ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAyMGY3MmU4Li5iZWNjNTVjIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDE5ICsxLDIwIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSogRml4IGRiYXUxeDAwIEJvYXJkCi0gIC0gRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKLSAgICBQTEw6cyB3ZXJlIG5vdCBzZXQgZm9yIGJvYXJkcyBvdGhlciB0aGFuIDE1NTAuCi0gICAgRmxhc2ggQ0ZJIGNhdXNlZCBjYXJkIHRvIGhhbmcgZHVlIHRvIHVuZGVmaW5lZCBDRkdfRkxBU0hfQkFOS1NfTElTVC4KLSAgICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCi0gIFBhdGNoIGJ5IFRob21hcyBMYW5nZSBBdWcgMTAgMjAwNQorCisqIFNvbWUgY29kZSBjbGVhbnVwCisKKyogRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKKyAgUExMOnMgd2VyZSBub3Qgc2V0IGZvciBib2FyZHMgb3RoZXIgdGhhbiAxNTUwLgorICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgorICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCisgIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTAgQXVnIDIwMDUKIAogKiBGaXhlcyBjb21tb24vY21kX2ZsYXNoLmM6Ci0KLSAgIC0gZml4IHNvbWUgY29tcGlsZXIvcGFyc2VyIGVycm9yLCBpZiB1c2luZyBtNjhrIHRvb2wgY2hhaW4KLSAgIC0gb3B0aWNhbCBmaXggZm9yIHByb3RlY3Qgb24vb2ZmIGFsbCBtZXNzYWdlcywgaWYgdXNpbmcgbW9yZQotICAgICB0aGVuIG9uZSBiYW5rCi0gIFBhdGNoIGJ5IEplbnMgU2NoYXJzaWcsIDI4IEp1bHkgMjAwNQorICAtIGZpeCBzb21lIGNvbXBpbGVyL3BhcnNlciBlcnJvciwgaWYgdXNpbmcgbTY4ayB0b29sIGNoYWluCisgIC0gb3B0aWNhbCBmaXggZm9yIHByb3RlY3Qgb24vb2ZmIGFsbCBtZXNzYWdlcywgaWYgdXNpbmcgbW9yZQorICAgIHRoZW4gb25lIGJhbmsKKyAgUGF0Y2ggYnkgSmVucyBTY2hhcnNpZywgMjggSnVsIDIwMDUKIAogKiBGaXggUXVhZCBVQVJUIG1hcHBpbmcgb24gTUNDMjAwIGJvYXJkIGR1ZSB0byBuZXcgSFcgcmV2aXNpb24KIApAQCAtNTcsMTggKzU4LDE4IEBACiAqIFVwZGF0ZXMgdG8gY29tbW9uIFBQQzR4eCBvbmJvYXJkIChERFIpU0RSQU0gaW5pdCBjb2RlICg0MDUgYW5kIDQ0MCkKIAogICA0MDUgU0RSQU06IC0gVGhlIFNEUkFNIHBhcmFtZXRlcnMgY2FuIG5vdyBiZSBkZWZpbmVkIGluIHRoZSBib2FyZAotICAgICAgICAgICAgICAgY29uZmlnIGZpbGUgYW5kIHRoZSA0MDUgU0RSQU0gY29udHJvbGxlciB2YWx1ZXMgd2lsbAotICAgICAgICAgICAgICAgYmUgY2FsY3VsYXRlZCB1cG9uIGJvb3R1cCAoc2VlIFBQQ2hhbWVsZW9uRVZCKS4KLSAgICAgICAgICAgICAgIFdoZW4gdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBib2FyZAotICAgICAgICAgICAgICAgY29uZmlnIGZpbGUsIHRoZSByZWdpc3RlciBzZXR1cCB3aWxsIGJlIGFzIGl0IGlzIG5vdywKLSAgICAgICAgICAgICAgIHNvIHRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBicmVhayBhbnkgY3VycmVudAotICAgICAgICAgICAgICAgZGVzaWduIHVzaW5nIHRoaXMgY29kZS4KKwkgICAgICAgY29uZmlnIGZpbGUgYW5kIHRoZSA0MDUgU0RSQU0gY29udHJvbGxlciB2YWx1ZXMgd2lsbAorCSAgICAgICBiZSBjYWxjdWxhdGVkIHVwb24gYm9vdHVwIChzZWUgUFBDaGFtZWxlb25FVkIpLgorCSAgICAgICBXaGVuIHRob3NlIHNldHRpbmdzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgYm9hcmQKKwkgICAgICAgY29uZmlnIGZpbGUsIHRoZSByZWdpc3RlciBzZXR1cCB3aWxsIGJlIGFzIGl0IGlzIG5vdywKKwkgICAgICAgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGJyZWFrIGFueSBjdXJyZW50CisJICAgICAgIGRlc2lnbiB1c2luZyB0aGlzIGNvZGUuCiAKLSAgICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZWEgTWFyc29uIGZyb20gREFWRSBmb3IgdGhpcyBwYXRjaC4KKwkgICAgICAgVGhhbmtzIHRvIEFuZHJlYSBNYXJzb24gZnJvbSBEQVZFIGZvciB0aGlzIHBhdGNoLgogCiAgIDQ0MCBERFI6ICAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZQotICAgICAgICAgICAgICAgVFIxIHZhbHVlIGZvciB0aGUgRERSLgotICAgICAgICAgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgorCSAgICAgICBUUjEgdmFsdWUgZm9yIHRoZSBERFIuCisJICAgICAtIEFkZGVkIEVDQyBzdXBwb3J0IChzZWUgcDNwNDQwKS4KIAogICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IE1hciAyMDA2CiAKQEAgLTQ0Miw3ICs0NDMsNyBAQAogICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IFUtQm9vdCBidWlsZC4KICAgRW5hYmxlIERFQlVHIGZvciBsaWJfYXJtL2JvYXJkLmMgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzLgogICBOZXcgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTyBhbmQgQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPIG9wdGlvbnMuCi0gIFBhdGNoICBieSBTdGVmYW4gUm9lc2UsIDI0IEphbiAyMDA2CisgIFBhdGNoCSBieSBTdGVmYW4gUm9lc2UsIDI0IEphbiAyMDA2CiAKICogRml4IHZhcmlvdXMgY29tcGlsZXIgd2FybmluZ3Mgb24gcHBjNHh4IGJ1aWxkcyAoRUxESyA0LjApCiAgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggSmFuIDIwMDYKQEAgLTU4OCwxMSArNTg5LDExIEBACiAKICogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIFBIWXMuCiAgIFRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIGJvYXJkczoKLQljbWNwdTIgICAgICAoYXQ5MXJtOTIwMC9ldGhlci5jKQorCWNtY3B1MgkgICAgKGF0OTFybTkyMDAvZXRoZXIuYykKIAlQUENoYW1lbGVvbiAocHBjNHh4LzR4eF9lbmV0LmMpCi0JeXVrb24gICAgICAgKG1wYzgyMjAvZmVjLmMpCi0JdWMxMDAgICAgICAgKG1wYzh4eC9mZWMuYykKLQl0cW04MzR4ICAgICAobXBjODM0eC90c2VjLmMpIHdpdGggRUVQUk8xMDAKKwl5dWtvbgkgICAgKG1wYzgyMjAvZmVjLmMpCisJdWMxMDAJICAgIChtcGM4eHgvZmVjLmMpCisJdHFtODM0eAkgICAgKG1wYzgzNHgvdHNlYy5jKSB3aXRoIEVFUFJPMTAwCiAJbGl0ZTUyMDAgICAgKG1wYzV4eHgvZmVjLmMpIHdpdGggRUVQUk8xMDAgY2FyZCAoZHJpdmVycy9lZXBybzEwMC5jKQogICBNYWluIGNoYW5nZXMgaW5jbHVkZToKICAgY29tbW9uL21paXBoeXV0aWwuYwpAQCAtMTEzMiwxOCArMTEzMywxOCBAQAogICBUaGUgZmlyc3Qgb25lIGlzIHRvIGRlZmluZSBhIHNpbmdsZSwgc3RhdGljIHBhcnRpdGlvbjoKIAogICAjdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfREVWICAgICAgICAgICAgICAgIm5vcjAiCi0gICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRSAgICAgICAgIDB4RkZGRkZGRkYJLyogdXNlIHdob2xlIGRldmljZSAqLwotICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUgICAgICAgICAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQgICAgICAgMHgwMDAwMDAwMAorICAjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSAibm9yMCIKKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJIDB4MDAwMDAwMDAKIAogICBUaGUgc2Vjb25kIG1ldGhvZCB1c2VzIHRoZSBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBkeW5hbWljCiAgIHBhcnRpdGlvbmluZzoKIAogICAvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLwogICAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCi0gICNkZWZpbmUgTVRESURTX0RFRkFVTFQgICAgICAgICAibm9yMT16dW1hLTEsbm9yMj16dW1hLTIiCi0gICNkZWZpbmUgTVREUEFSVFNfREVGQVVMVCAgICAgICAibXRkcGFydHM9enVtYS0xOi0oamZmczIpLHp1bWEtMjotKHVzZXIpIgorICAjZGVmaW5lIE1URElEU19ERUZBVUxUCSAibm9yMT16dW1hLTEsbm9yMj16dW1hLTIiCisgICNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkgIm10ZHBhcnRzPXp1bWEtMTotKGpmZnMyKSx6dW1hLTI6LSh1c2VyKSIKIAogICBDb21tYW5kIGxpbmUgb2YgY291cnNlIHByb2R1Y2VzIGJpZ2dlciBpbWFnZXMsIGFuZCBtYXkgYmUgaW5hcHByb3ByaWF0ZQogICBmb3Igc29tZSB0YXJnZXRzLCBzbyBieSBkZWZhdWx0IGl0J3Mgb2ZmLgpAQCAtMzQ1Niw3ICszNDU3LDcgQEAKICAgQnJpbmcgQVJNIG1lbW9yeSBsYXlvdXQgaW4gc3luYyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uOgogICBzdGFjayBhbmQgbWFsbG9jLWhlYXAgYXJlIG5vdyBsb2NhdGVkIF9iZWxvd18gdGhlIFUtQm9vdCBjb2RlCiAKLSogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlICBpbWFnZQorKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUJaW1hZ2UKICAgaGVhZGVycyBmaXJzdCBpbnN0ZWFkIG9mIGFsd2F5cyByZWFkaW5nIHRoZSB3aG9sZSBpbWFnZXMuCiAKICogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKQEAgLTM1NzYsNyArMzU3Nyw3IEBACiAqIE1ha2UgNTIwMCByZXNldCBjb21tYW5kIF9yZWFsbHlfIHJlc2V0IHRoZSBib2FyZCwgd2l0aG91dCBydW5uaW5nCiAgIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0CiAKLSogRml4IGVycm9ycyB3aXRoIGZsYXNoIGVyYXNlIHdoZW4gcmFuZ2Ugc3BhbnMgIGFjcm9zcyBiYW5rcworKiBGaXggZXJyb3JzIHdpdGggZmxhc2ggZXJhc2Ugd2hlbiByYW5nZSBzcGFucwlhY3Jvc3MgYmFua3MKICAgdGhhdCBhcmUgbWFwcGVkIGluIHJldmVyc2Ugb3JkZXIKIAogKiBGaXggZmxhc2ggbWFwcGluZyBhbmQgZGlzcGxheSBvbiBQM0c0IGJvYXJkCkBAIC0zODIwLDcgKzM4MjEsNyBAQAogICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5CiAKLSogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNiAgTUh6KQorKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2CSBNSHopCiAgIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKIApAQCAtNDMwNyw3ICs0MzA4LDcgQEAKICAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCiAKICogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAotICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZSAgX2F0X2NvbXBpbGVfCisgIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lCSBfYXRfY29tcGlsZV8KICAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAogICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KIApAQCAtNDM1Nyw3ICs0MzU4LDcgQEAKICogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgogICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CiAKLSogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MgIFZGRCBjb21tYW5kOworKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncwlWRkQgY29tbWFuZDsKICAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOwogICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CiAKQEAgLTQ3MDAsNyArNDcwMSw3IEBACiAKICogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCiAKLSogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplICBldGhhZGRyICBlbnZpcm9ubWVudAorKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUJIGV0aGFkZHIgIGVudmlyb25tZW50CiAgIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQogCiAqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CkBAIC00ODYwLDcgKzQ4NjEsNyBAQAogKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcwogCi0qIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDICBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKKyogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMJIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogICBkcml2ZXJzCiAKICogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGFlOWUxMGYuLjNhZTljZmMgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlDT05GSUdfQVJNQURJTExPLAlDT05GSUdfQVQ5MVJNOTIwMERLLAlDT05GSUdfQ0VSRjI1MCwKIAkJQ09ORklHX0NTQjYzNywJCUNPTkZJR19ERUxUQSwJCUNPTkZJR19ETlAxMTEwLAogCSAJQ09ORklHX0VQNzMxMiwJCUNPTkZJR19IMl9PTUFQMTYxMCwJQ09ORklHX0hIUF9DUkFETEUsCi0JCUNPTkZJR19JTVBBNywJCUNPTkZJR19JTk5PVkFUT1JPTUFQMTUxMCwgQ09ORklHX0lOTk9WQVRPUk9NQVAxNjEwLCAKKwkJQ09ORklHX0lNUEE3LAkgICAgQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLAlDT05GSUdfSU5OT1ZBVE9ST01BUDE2MTAsCiAJCUNPTkZJR19LQjkyMDIsCQlDT05GSUdfTEFSVCwJCUNPTkZJR19MUEQ3QTQwMCwKIAkJQ09ORklHX0xVQkJPQ0ssCQlDT05GSUdfT1NLX09NQVA1OTEyLAlDT05GSUdfT01BUDI0MjBINCwKIAkJQ09ORklHX1NIQU5OT04sCQlDT05GSUdfUDJfT01BUDczMCwJQ09ORklHX1NNREsyNDAwLApAQCAtMzg4LDEyICszODgsMTIgQEAKIAkJZnJlcXVlbmN5IGlzIHRoaXMgdmFsdWUgbXVsdGlwbGllZCBieSAxMyBNSHouCiAKIAkJQ0ZHX01PTkFIQU5TX1RVUkJPX1JVTl9NT0RFX1JBVElPCi0JCQorCiAJCURlZmluZXMgdGhlIE1vbmFoYW5zIHR1cmJvIG1vZGUgdG8gb3NjaWxsYXRvcgogCQlyYXRpby4gVmFsaWQgdmFsdWVzIGFyZSAxIChkZWZhdWx0IGlmIHVuZGVmaW5lZCkgYW5kCi0JCTIuIFRoZSBjb3JlIGZyZXF1ZW5jeSBhcyBjYWxjdWxhdGVkIGFib3ZlIGlzIG11bHRpcGxpZWQgCisJCTIuIFRoZSBjb3JlIGZyZXF1ZW5jeSBhcyBjYWxjdWxhdGVkIGFib3ZlIGlzIG11bHRpcGxpZWQKIAkJYnkgdGhpcyB2YWx1ZS4KLQkJCisKIC0gTGludXggS2VybmVsIEludGVyZmFjZToKIAkJQ09ORklHX0NMT0NLU19JTl9NSFoKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaWNlY3ViZS9pY2VjdWJlLmMgYi9ib2FyZC9pY2VjdWJlL2ljZWN1YmUuYwppbmRleCA0MTk3YTdjLi40ZjA1NmIyIDEwMDY0NAotLS0gYS9ib2FyZC9pY2VjdWJlL2ljZWN1YmUuYworKysgYi9ib2FyZC9pY2VjdWJlL2ljZWN1YmUuYwpAQCAtMTg3LDE3ICsxODcsMTcgQEAKICNlbmRpZiAvKiBDRkdfUkFNQk9PVCAqLwogCiAJLyoKLQkgKiBPbiBNUEM1MjAwQiB3ZSBuZWVkIHRvIHNldCB0aGUgc3BlY2lhbCBjb25maWd1cmF0aW9uIGRlbGF5IGluIHRoZSAKLQkgKiBERFIgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRvIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0gCisJICogT24gTVBDNTIwMEIgd2UgbmVlZCB0byBzZXQgdGhlIHNwZWNpYWwgY29uZmlndXJhdGlvbiBkZWxheSBpbiB0aGUKKwkgKiBERFIgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRvIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0KIAkgKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MDoKIAkgKgotCSAqICJUaGUgU0RlbGF5IHNob3VsZCBiZSB3cml0dGVuIHRvIGEgdmFsdWUgb2YgMHgwMDAwMDAwNC4gSXQgaXMgCi0JICogcmVxdWlyZWQgdG8gYWNjb3VudCBmb3IgY2hhbmdlcyBjYXVzZWQgYnkgbm9ybWFsIHdhZmVyIHByb2Nlc3NpbmcgCisJICogIlRoZSBTRGVsYXkgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gYSB2YWx1ZSBvZiAweDAwMDAwMDA0LiBJdCBpcworCSAqIHJlcXVpcmVkIHRvIGFjY291bnQgZm9yIGNoYW5nZXMgY2F1c2VkIGJ5IG5vcm1hbCB3YWZlciBwcm9jZXNzaW5nCiAJICogcGFyYW1ldGVycy4iCi0JICovIAorCSAqLwogCXN2ciA9IGdldF9zdnIoKTsKIAlwdnIgPSBnZXRfcHZyKCk7Ci0JaWYgKChTVlJfTUpSRVYoc3ZyKSA+PSAyKSAmJiAKKwlpZiAoKFNWUl9NSlJFVihzdnIpID49IDIpICYmCiAJICAgIChQVlJfTUFKKHB2cikgPT0gMSkgJiYgKFBWUl9NSU4ocHZyKSA9PSA0KSkgewogCiAJCSoodnVfbG9uZyAqKU1QQzVYWFhfU0RSQU1fU0RFTEFZID0gMHgwNDsKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNDllbWRzL21wYzgzNDllbWRzLmMgYi9ib2FyZC9tcGM4MzQ5ZW1kcy9tcGM4MzQ5ZW1kcy5jCmluZGV4IDczYTMzZjYuLjdlY2U3ZGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzgzNDllbWRzL21wYzgzNDllbWRzLmMKKysrIGIvYm9hcmQvbXBjODM0OWVtZHMvbXBjODM0OWVtZHMuYwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAKIAlpbS0+ZGRyLmNzYm5kc1syXS5jc2JuZHMgPSAweDAwMDAwMDBmOwogCWltLT5kZHIuY3NfY29uZmlnWzJdID0gQ0ZHX0REUl9DT05GSUc7CiAKLQkvKiBjdXJyZW50bHkgd2UgdXNlIG9ubHkgb25lIENTLCBzbyBkaXNhYmxlIHRoZSBvdGhlciBiYW5rcyAqLyAKKwkvKiBjdXJyZW50bHkgd2UgdXNlIG9ubHkgb25lIENTLCBzbyBkaXNhYmxlIHRoZSBvdGhlciBiYW5rcyAqLwogCWltLT5kZHIuY3NfY29uZmlnWzBdID0gMDsKIAlpbS0+ZGRyLmNzX2NvbmZpZ1sxXSA9IDA7CiAJaW0tPmRkci5jc19jb25maWdbM10gPSAwOwogCiAJaW0tPmRkci50aW1pbmdfY2ZnXzEgPSBDRkdfRERSX1RJTUlOR18xOwogCWltLT5kZHIudGltaW5nX2NmZ18yID0gQ0ZHX0REUl9USU1JTkdfMjsKLQkKKwogCWltLT5kZHIuc2RyYW1fY2ZnID0KIAkJU0RSQU1fQ0ZHX1NSRU4KICNpZiBkZWZpbmVkKENPTkZJR19ERFJfMlRfVElNSU5HKQpAQCAtMTM2LDcgKzEzNiw3IEBACiAjZW5kaWYKIAlpbS0+ZGRyLnNkcmFtX21vZGUgPSBDRkdfRERSX01PREU7CiAKLQlpbS0+ZGRyLnNkcmFtX2ludGVydmFsID0gQ0ZHX0REUl9JTlRFUlZBTDsgCisJaW0tPmRkci5zZHJhbV9pbnRlcnZhbCA9IENGR19ERFJfSU5URVJWQUw7CiAJdWRlbGF5KDIwMCk7CiAKIAkvKiBlbmFibGUgRERSIGNvbnRyb2xsZXIgKi8KQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJdm9sYXRpbGUgdTMyIHZhbDsKIAl1NjQgKmFkZHIsIGNvdW50LCB2YWw2NDsKIAlyZWdpc3RlciB1NjQgKmk7Ci0JCisKIAlpZiAoYXJnYyA+IDQpIHsKIAkJcHJpbnRmICgiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJaWYgKGFyZ2MgPT0gMikgewogCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICJzdGF0dXMiKSA9PSAwKSB7CiAJCQllY2NfcHJpbnRfc3RhdHVzKCk7CkBAIC0zNzksOCArMzc5LDggQEAKIAkJCWRkci0+Y2FwdHVyZV9hdHRyaWJ1dGVzID0gMDsKIAkJCXJldHVybiAwOwogCQl9Ci0JfSAKLQkKKwl9CisKIAlpZiAoYXJnYyA9PSAzKSB7CiAJCWlmIChzdHJjbXAoYXJndlsxXSwgInNiZWNudCIpID09IDApIHsKIAkJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKQEAgLTQxNiw4ICs0MTYsOCBAQAogCQkJfSBlbHNlIGlmIChzdHJjbXAoYXJndlsyXSwgIittc2UiKSA9PSAwKSB7CiAJCQkJdmFsIHw9IEVDQ19FUlJPUl9ESVNBQkxFX01TRUQ7CiAJCQl9IGVsc2UgaWYgKHN0cmNtcChhcmd2WzJdLCAiK2FsbCIpID09IDApIHsKLQkJCQl2YWwgfD0gKEVDQ19FUlJPUl9ESVNBQkxFX1NCRUQgfCAKLQkJCQkJRUNDX0VSUk9SX0RJU0FCTEVfTUJFRCB8IAorCQkJCXZhbCB8PSAoRUNDX0VSUk9SX0RJU0FCTEVfU0JFRCB8CisJCQkJCUVDQ19FUlJPUl9ESVNBQkxFX01CRUQgfAogCQkJCQlFQ0NfRVJST1JfRElTQUJMRV9NU0VEKTsKIAkJCX0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMl0sICItc2JlIikgPT0gMCkgewogCQkJCXZhbCAmPSB+RUNDX0VSUk9SX0RJU0FCTEVfU0JFRDsKQEAgLTQyNiw4ICs0MjYsOCBAQAogCQkJfSBlbHNlIGlmIChzdHJjbXAoYXJndlsyXSwgIi1tc2UiKSA9PSAwKSB7CiAJCQkJdmFsICY9IH5FQ0NfRVJST1JfRElTQUJMRV9NU0VEOwogCQkJfSBlbHNlIGlmIChzdHJjbXAoYXJndlsyXSwgIi1hbGwiKSA9PSAwKSB7Ci0JCQkJdmFsICY9IH4oRUNDX0VSUk9SX0RJU0FCTEVfU0JFRCB8IAotCQkJCQlFQ0NfRVJST1JfRElTQUJMRV9NQkVEIHwgCisJCQkJdmFsICY9IH4oRUNDX0VSUk9SX0RJU0FCTEVfU0JFRCB8CisJCQkJCUVDQ19FUlJPUl9ESVNBQkxFX01CRUQgfAogCQkJCQlFQ0NfRVJST1JfRElTQUJMRV9NU0VEKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRmKCJJbmNvcnJlY3QgZXJyX2Rpc2FibGUgZmllbGRcbiIpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXgxYWRzL214MWFkcy5jIGIvYm9hcmQvbXgxYWRzL214MWFkcy5jCmluZGV4IDkxM2Y5NWMuLmFiZjJmZDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL214MWFkcy9teDFhZHMuYworKysgYi9ib2FyZC9teDFhZHMvbXgxYWRzLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogCUdQQ1IgPSAweDAwMDAwM0FCOwkvKiBJL08gcGFkIGRyaXZpbmcgc3RyZW5ndGggICAgICovCiAKLQkvKglNWDFfQ1MxVSAJPSAweDAwMDAwQTAwOwkqLy8qIFNSQU0gaW5pdGlhbGl6YXRpb24gICAgICAgICAgKi8KKwkvKglNWDFfQ1MxVSAJPSAweDAwMDAwQTAwOwkqLyAvKiBTUkFNIGluaXRpYWxpemF0aW9uICAgICAgICAgICovCiAvKglNWDFfQ1MxTCAJPSAweDExMTEwNjAxOyAJKi8KIAogCU1QQ1RMMCA9IDB4MDQ2MzI0MTA7CS8qIHNldHRpbmcgZm9yIDE1MCBNSHogTUNVIFBMTCBDTEsgICAgICAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9sb2FkLmMgYi9jb21tb24vY21kX2xvYWQuYwppbmRleCAzMWZlZjgxLi4yNDMyZWUyIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2xvYWQuYworKysgYi9jb21tb24vY21kX2xvYWQuYwpAQCAtOTczLDcgKzk3Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2V0Y3htb2RlbSh2b2lkKSB7Ci0JaWYgKHRzdGMoKSkgCisJaWYgKHRzdGMoKSkKIAkJcmV0dXJuIChnZXRjKCkpOwogCXJldHVybiAtMTsKIH0KQEAgLTk4NCw0OSArOTg0LDUxIEBACiAJaW50IGVycjsKIAlpbnQgcmVzOwogCWNvbm5lY3Rpb25faW5mb190IGluZm87Ci0JY2hhciAJeW1vZGVtQnVmWzEwMjRdOwotCXVsb25nCXN0b3JlX2FkZHIgPSB+MDsKLQl1bG9uZwlhZGRyID0gMDsKKwljaGFyIHltb2RlbUJ1ZlsxMDI0XTsKKwl1bG9uZyBzdG9yZV9hZGRyID0gfjA7CisJdWxvbmcgYWRkciA9IDA7CiAKLQlzaXplPTA7CQotCWluZm8ubW9kZT14eXpNb2RlbV95bW9kZW07Ci0JcmVzPXh5ek1vZGVtX3N0cmVhbV9vcGVuKCZpbmZvLCAmZXJyKTsKKwlzaXplID0gMDsKKwlpbmZvLm1vZGUgPSB4eXpNb2RlbV95bW9kZW07CisJcmVzID0geHl6TW9kZW1fc3RyZWFtX29wZW4gKCZpbmZvLCAmZXJyKTsKIAlpZiAoIXJlcykgewotCSAgIAotCSAgIHdoaWxlICgocmVzPXh5ek1vZGVtX3N0cmVhbV9yZWFkKHltb2RlbUJ1ZiwgMTAyNCwgJmVycikpID4gMCApewotCQkgICAgc3RvcmVfYWRkciA9IGFkZHIgKyBvZmZzZXQ7Ci0JCSAgICBzaXplKz1yZXM7Ci0JCSAgICBhZGRyKz1yZXM7IAotI2lmbmRlZiBDRkdfTk9fRkxBU0gKLQkJICAgIGlmIChhZGRyMmluZm8oc3RvcmVfYWRkcikpIHsKLQkJCWludCByYzsKIAotCQkJcmMgPSBmbGFzaF93cml0ZSgoY2hhciAqKXltb2RlbUJ1ZixzdG9yZV9hZGRyLHJlcyk7Ci0JCQlpZiAocmMgIT0gMCkgewotCQkJCWZsYXNoX3BlcnJvciAocmMpOwotCQkJCXJldHVybiAofjApOwotCQkJfQotCQkgICAgfSBlbHNlCisJCXdoaWxlICgocmVzID0KKwkJCXh5ek1vZGVtX3N0cmVhbV9yZWFkICh5bW9kZW1CdWYsIDEwMjQsICZlcnIpKSA+IDApIHsKKwkJCXN0b3JlX2FkZHIgPSBhZGRyICsgb2Zmc2V0OworCQkJc2l6ZSArPSByZXM7CisJCQlhZGRyICs9IHJlczsKKyNpZm5kZWYgQ0ZHX05PX0ZMQVNICisJCQlpZiAoYWRkcjJpbmZvIChzdG9yZV9hZGRyKSkgeworCQkJCWludCByYzsKKworCQkJCXJjID0gZmxhc2hfd3JpdGUgKChjaGFyICopIHltb2RlbUJ1ZiwKKwkJCQkJCSAgc3RvcmVfYWRkciwgcmVzKTsKKwkJCQlpZiAocmMgIT0gMCkgeworCQkJCQlmbGFzaF9wZXJyb3IgKHJjKTsKKwkJCQkJcmV0dXJuICh+MCk7CisJCQkJfQorCQkJfSBlbHNlCiAjZW5kaWYKLQkJICAgIHsKLQkJCW1lbWNweSAoKGNoYXIgKikoc3RvcmVfYWRkciksIHltb2RlbUJ1ZiwgcmVzKTsKLQkJICAgIH0KLQkKLQkgICB9Ci0JfSAKLQllbHNlIHsKLQkJcHJpbnRmICgiJXNcbiIseHl6TW9kZW1fZXJyb3IoZXJyKSk7CisJCQl7CisJCQkJbWVtY3B5ICgoY2hhciAqKSAoc3RvcmVfYWRkciksIHltb2RlbUJ1ZiwKKwkJCQkJcmVzKTsKKwkJCX0KKworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiJXNcbiIsIHh5ek1vZGVtX2Vycm9yIChlcnIpKTsKIAl9Ci0JCi0JeHl6TW9kZW1fc3RyZWFtX2Nsb3NlKCZlcnIpOwotICAJeHl6TW9kZW1fc3RyZWFtX3Rlcm1pbmF0ZShmYWxzZSwmZ2V0Y3htb2RlbSk7CQorCisJeHl6TW9kZW1fc3RyZWFtX2Nsb3NlICgmZXJyKTsKKwl4eXpNb2RlbV9zdHJlYW1fdGVybWluYXRlIChmYWxzZSwgJmdldGN4bW9kZW0pOwogCiAKIAlmbHVzaF9jYWNoZSAob2Zmc2V0LCBzaXplKTsKIAotCXByaW50ZigiIyMgVG90YWwgU2l6ZSAgICAgID0gMHglMDh4ID0gJWQgQnl0ZXNcbiIsIHNpemUsIHNpemUpOwotCXNwcmludGYoYnVmLCAiJVgiLCBzaXplKTsKLQlzZXRlbnYoImZpbGVzaXplIiwgYnVmKTsKKwlwcmludGYgKCIjIyBUb3RhbCBTaXplICAgICAgPSAweCUwOHggPSAlZCBCeXRlc1xuIiwgc2l6ZSwgc2l6ZSk7CisJc3ByaW50ZiAoYnVmLCAiJVgiLCBzaXplKTsKKwlzZXRlbnYgKCJmaWxlc2l6ZSIsIGJ1Zik7CiAKIAlyZXR1cm4gb2Zmc2V0OwogfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NyYzE2LmMgYi9jb21tb24vY3JjMTYuYwppbmRleCBkNTcxNDA1Li4zY2VmMTA2IDEwMDY0NAotLS0gYS9jb21tb24vY3JjMTYuYworKysgYi9jb21tb24vY3JjMTYuYwpAQCAtMSw5NCArMSw5NiBAQAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vICAgICAgY3JjMTYuYwotLy8KLS8vICAgICAgMTYgYml0IENSQyB3aXRoIHBvbHlub21pYWwgeF4xNit4XjEyK3heNSsxCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8jIyMjRUNPU0dQTENPUFlSSUdIVEJFR0lOIyMjIwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLgotLy8gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KLS8vIENvcHlyaWdodCAoQykgMjAwMiBHYXJ5IFRob21hcwotLy8KLS8vIGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgotLy8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLS8vIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS8vCi0vLyBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQotLy8gV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLy8gZm9yIG1vcmUgZGV0YWlscy4KLS8vCi0vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotLy8gd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0vLyA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLS8vCi0vLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcwotLy8gb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0Ci0vLyB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90Ci0vLyBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotLy8gTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCi0vLyBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgotLy8gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KLS8vIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8jIyMjI0RFU0NSSVBUSU9OQkVHSU4jIyMjCi0vLwotLy8gQXV0aG9yKHMpOiAgICBndGhvbWFzCi0vLyBDb250cmlidXRvcnM6IGd0aG9tYXMsYXNsCi0vLyBEYXRlOiAgICAgICAgIDIwMDEtMDEtMzEKLS8vIFB1cnBvc2U6ICAgICAgCi0vLyBEZXNjcmlwdGlvbjogIAotLy8gICAgICAgICAgICAgIAotLy8gVGhpcyBjb2RlIGlzIHBhcnQgb2YgZUNvcyAodG0pLgotLy8KLS8vIyMjI0RFU0NSSVBUSU9ORU5EIyMjIwotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogICAgICBjcmMxNi5jCisgKgorICogICAgICAxNiBiaXQgQ1JDIHdpdGggcG9seW5vbWlhbCB4XjE2K3heMTIreF41KzEKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMjCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyIEdhcnkgVGhvbWFzCisgKgorICogZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIGVDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCisgKiBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQKKyAqIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QKKyAqIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBIb3dldmVyIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmaWxlIG11c3Qgc3RpbGwgYmUgbWFkZSBhdmFpbGFibGUKKyAqIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKgorICogVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCisgKiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKgorICogQWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIGVDb3MgbWF5IGJlIGFycmFuZ2VkIGJ5IGNvbnRhY3RpbmcgUmVkIEhhdCwgSW5jLgorICogYXQgaHR0cDogKnNvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiMjIyMjREVTQ1JJUFRJT05CRUdJTiMjIyMKKyAqCisgKiBBdXRob3Iocyk6ICAgIGd0aG9tYXMKKyAqIENvbnRyaWJ1dG9yczogZ3Rob21hcyxhc2wKKyAqIERhdGU6ICAgICAgICAgMjAwMS0wMS0zMQorICogUHVycG9zZToKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0IG9mIGVDb3MgKHRtKS4KKyAqCisgKiMjIyNERVNDUklQVElPTkVORCMjIyMKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KIAogI2luY2x1ZGUgImNyYy5oIgogCi0vLyBUYWJsZSBvZiBDUkMgY29uc3RhbnRzIC0gaW1wbGVtZW50cyB4XjE2K3heMTIreF41KzEKKy8qIFRhYmxlIG9mIENSQyBjb25zdGFudHMgLSBpbXBsZW1lbnRzIHheMTYreF4xMit4XjUrMSAqLwogc3RhdGljIGNvbnN0IHVpbnQxNl90IGNyYzE2X3RhYltdID0gewotICAgIDB4MDAwMCwgMHgxMDIxLCAweDIwNDIsIDB4MzA2MywgMHg0MDg0LCAweDUwYTUsIDB4NjBjNiwgMHg3MGU3LCAKLSAgICAweDgxMDgsIDB4OTEyOSwgMHhhMTRhLCAweGIxNmIsIDB4YzE4YywgMHhkMWFkLCAweGUxY2UsIDB4ZjFlZiwgCi0gICAgMHgxMjMxLCAweDAyMTAsIDB4MzI3MywgMHgyMjUyLCAweDUyYjUsIDB4NDI5NCwgMHg3MmY3LCAweDYyZDYsIAotICAgIDB4OTMzOSwgMHg4MzE4LCAweGIzN2IsIDB4YTM1YSwgMHhkM2JkLCAweGMzOWMsIDB4ZjNmZiwgMHhlM2RlLCAKLSAgICAweDI0NjIsIDB4MzQ0MywgMHgwNDIwLCAweDE0MDEsIDB4NjRlNiwgMHg3NGM3LCAweDQ0YTQsIDB4NTQ4NSwgCi0gICAgMHhhNTZhLCAweGI1NGIsIDB4ODUyOCwgMHg5NTA5LCAweGU1ZWUsIDB4ZjVjZiwgMHhjNWFjLCAweGQ1OGQsIAotICAgIDB4MzY1MywgMHgyNjcyLCAweDE2MTEsIDB4MDYzMCwgMHg3NmQ3LCAweDY2ZjYsIDB4NTY5NSwgMHg0NmI0LCAKLSAgICAweGI3NWIsIDB4YTc3YSwgMHg5NzE5LCAweDg3MzgsIDB4ZjdkZiwgMHhlN2ZlLCAweGQ3OWQsIDB4YzdiYywgCi0gICAgMHg0OGM0LCAweDU4ZTUsIDB4Njg4NiwgMHg3OGE3LCAweDA4NDAsIDB4MTg2MSwgMHgyODAyLCAweDM4MjMsIAotICAgIDB4YzljYywgMHhkOWVkLCAweGU5OGUsIDB4ZjlhZiwgMHg4OTQ4LCAweDk5NjksIDB4YTkwYSwgMHhiOTJiLCAKLSAgICAweDVhZjUsIDB4NGFkNCwgMHg3YWI3LCAweDZhOTYsIDB4MWE3MSwgMHgwYTUwLCAweDNhMzMsIDB4MmExMiwgCi0gICAgMHhkYmZkLCAweGNiZGMsIDB4ZmJiZiwgMHhlYjllLCAweDliNzksIDB4OGI1OCwgMHhiYjNiLCAweGFiMWEsIAotICAgIDB4NmNhNiwgMHg3Yzg3LCAweDRjZTQsIDB4NWNjNSwgMHgyYzIyLCAweDNjMDMsIDB4MGM2MCwgMHgxYzQxLCAKLSAgICAweGVkYWUsIDB4ZmQ4ZiwgMHhjZGVjLCAweGRkY2QsIDB4YWQyYSwgMHhiZDBiLCAweDhkNjgsIDB4OWQ0OSwgCi0gICAgMHg3ZTk3LCAweDZlYjYsIDB4NWVkNSwgMHg0ZWY0LCAweDNlMTMsIDB4MmUzMiwgMHgxZTUxLCAweDBlNzAsIAotICAgIDB4ZmY5ZiwgMHhlZmJlLCAweGRmZGQsIDB4Y2ZmYywgMHhiZjFiLCAweGFmM2EsIDB4OWY1OSwgMHg4Zjc4LCAKLSAgICAweDkxODgsIDB4ODFhOSwgMHhiMWNhLCAweGExZWIsIDB4ZDEwYywgMHhjMTJkLCAweGYxNGUsIDB4ZTE2ZiwgCi0gICAgMHgxMDgwLCAweDAwYTEsIDB4MzBjMiwgMHgyMGUzLCAweDUwMDQsIDB4NDAyNSwgMHg3MDQ2LCAweDYwNjcsIAotICAgIDB4ODNiOSwgMHg5Mzk4LCAweGEzZmIsIDB4YjNkYSwgMHhjMzNkLCAweGQzMWMsIDB4ZTM3ZiwgMHhmMzVlLCAKLSAgICAweDAyYjEsIDB4MTI5MCwgMHgyMmYzLCAweDMyZDIsIDB4NDIzNSwgMHg1MjE0LCAweDYyNzcsIDB4NzI1NiwgCi0gICAgMHhiNWVhLCAweGE1Y2IsIDB4OTVhOCwgMHg4NTg5LCAweGY1NmUsIDB4ZTU0ZiwgMHhkNTJjLCAweGM1MGQsIAotICAgIDB4MzRlMiwgMHgyNGMzLCAweDE0YTAsIDB4MDQ4MSwgMHg3NDY2LCAweDY0NDcsIDB4NTQyNCwgMHg0NDA1LCAKLSAgICAweGE3ZGIsIDB4YjdmYSwgMHg4Nzk5LCAweDk3YjgsIDB4ZTc1ZiwgMHhmNzdlLCAweGM3MWQsIDB4ZDczYywgCi0gICAgMHgyNmQzLCAweDM2ZjIsIDB4MDY5MSwgMHgxNmIwLCAweDY2NTcsIDB4NzY3NiwgMHg0NjE1LCAweDU2MzQsIAotICAgIDB4ZDk0YywgMHhjOTZkLCAweGY5MGUsIDB4ZTkyZiwgMHg5OWM4LCAweDg5ZTksIDB4Yjk4YSwgMHhhOWFiLCAKLSAgICAweDU4NDQsIDB4NDg2NSwgMHg3ODA2LCAweDY4MjcsIDB4MThjMCwgMHgwOGUxLCAweDM4ODIsIDB4MjhhMywgCi0gICAgMHhjYjdkLCAweGRiNWMsIDB4ZWIzZiwgMHhmYjFlLCAweDhiZjksIDB4OWJkOCwgMHhhYmJiLCAweGJiOWEsIAotICAgIDB4NGE3NSwgMHg1YTU0LCAweDZhMzcsIDB4N2ExNiwgMHgwYWYxLCAweDFhZDAsIDB4MmFiMywgMHgzYTkyLCAKLSAgICAweGZkMmUsIDB4ZWQwZiwgMHhkZDZjLCAweGNkNGQsIDB4YmRhYSwgMHhhZDhiLCAweDlkZTgsIDB4OGRjOSwgCi0gICAgMHg3YzI2LCAweDZjMDcsIDB4NWM2NCwgMHg0YzQ1LCAweDNjYTIsIDB4MmM4MywgMHgxY2UwLCAweDBjYzEsIAotICAgIDB4ZWYxZiwgMHhmZjNlLCAweGNmNWQsIDB4ZGY3YywgMHhhZjliLCAweGJmYmEsIDB4OGZkOSwgMHg5ZmY4LCAKLSAgICAweDZlMTcsIDB4N2UzNiwgMHg0ZTU1LCAweDVlNzQsIDB4MmU5MywgMHgzZWIyLCAweDBlZDEsIDB4MWVmMCwgCisgICAgMHgwMDAwLCAweDEwMjEsIDB4MjA0MiwgMHgzMDYzLCAweDQwODQsIDB4NTBhNSwgMHg2MGM2LCAweDcwZTcsCisgICAgMHg4MTA4LCAweDkxMjksIDB4YTE0YSwgMHhiMTZiLCAweGMxOGMsIDB4ZDFhZCwgMHhlMWNlLCAweGYxZWYsCisgICAgMHgxMjMxLCAweDAyMTAsIDB4MzI3MywgMHgyMjUyLCAweDUyYjUsIDB4NDI5NCwgMHg3MmY3LCAweDYyZDYsCisgICAgMHg5MzM5LCAweDgzMTgsIDB4YjM3YiwgMHhhMzVhLCAweGQzYmQsIDB4YzM5YywgMHhmM2ZmLCAweGUzZGUsCisgICAgMHgyNDYyLCAweDM0NDMsIDB4MDQyMCwgMHgxNDAxLCAweDY0ZTYsIDB4NzRjNywgMHg0NGE0LCAweDU0ODUsCisgICAgMHhhNTZhLCAweGI1NGIsIDB4ODUyOCwgMHg5NTA5LCAweGU1ZWUsIDB4ZjVjZiwgMHhjNWFjLCAweGQ1OGQsCisgICAgMHgzNjUzLCAweDI2NzIsIDB4MTYxMSwgMHgwNjMwLCAweDc2ZDcsIDB4NjZmNiwgMHg1Njk1LCAweDQ2YjQsCisgICAgMHhiNzViLCAweGE3N2EsIDB4OTcxOSwgMHg4NzM4LCAweGY3ZGYsIDB4ZTdmZSwgMHhkNzlkLCAweGM3YmMsCisgICAgMHg0OGM0LCAweDU4ZTUsIDB4Njg4NiwgMHg3OGE3LCAweDA4NDAsIDB4MTg2MSwgMHgyODAyLCAweDM4MjMsCisgICAgMHhjOWNjLCAweGQ5ZWQsIDB4ZTk4ZSwgMHhmOWFmLCAweDg5NDgsIDB4OTk2OSwgMHhhOTBhLCAweGI5MmIsCisgICAgMHg1YWY1LCAweDRhZDQsIDB4N2FiNywgMHg2YTk2LCAweDFhNzEsIDB4MGE1MCwgMHgzYTMzLCAweDJhMTIsCisgICAgMHhkYmZkLCAweGNiZGMsIDB4ZmJiZiwgMHhlYjllLCAweDliNzksIDB4OGI1OCwgMHhiYjNiLCAweGFiMWEsCisgICAgMHg2Y2E2LCAweDdjODcsIDB4NGNlNCwgMHg1Y2M1LCAweDJjMjIsIDB4M2MwMywgMHgwYzYwLCAweDFjNDEsCisgICAgMHhlZGFlLCAweGZkOGYsIDB4Y2RlYywgMHhkZGNkLCAweGFkMmEsIDB4YmQwYiwgMHg4ZDY4LCAweDlkNDksCisgICAgMHg3ZTk3LCAweDZlYjYsIDB4NWVkNSwgMHg0ZWY0LCAweDNlMTMsIDB4MmUzMiwgMHgxZTUxLCAweDBlNzAsCisgICAgMHhmZjlmLCAweGVmYmUsIDB4ZGZkZCwgMHhjZmZjLCAweGJmMWIsIDB4YWYzYSwgMHg5ZjU5LCAweDhmNzgsCisgICAgMHg5MTg4LCAweDgxYTksIDB4YjFjYSwgMHhhMWViLCAweGQxMGMsIDB4YzEyZCwgMHhmMTRlLCAweGUxNmYsCisgICAgMHgxMDgwLCAweDAwYTEsIDB4MzBjMiwgMHgyMGUzLCAweDUwMDQsIDB4NDAyNSwgMHg3MDQ2LCAweDYwNjcsCisgICAgMHg4M2I5LCAweDkzOTgsIDB4YTNmYiwgMHhiM2RhLCAweGMzM2QsIDB4ZDMxYywgMHhlMzdmLCAweGYzNWUsCisgICAgMHgwMmIxLCAweDEyOTAsIDB4MjJmMywgMHgzMmQyLCAweDQyMzUsIDB4NTIxNCwgMHg2Mjc3LCAweDcyNTYsCisgICAgMHhiNWVhLCAweGE1Y2IsIDB4OTVhOCwgMHg4NTg5LCAweGY1NmUsIDB4ZTU0ZiwgMHhkNTJjLCAweGM1MGQsCisgICAgMHgzNGUyLCAweDI0YzMsIDB4MTRhMCwgMHgwNDgxLCAweDc0NjYsIDB4NjQ0NywgMHg1NDI0LCAweDQ0MDUsCisgICAgMHhhN2RiLCAweGI3ZmEsIDB4ODc5OSwgMHg5N2I4LCAweGU3NWYsIDB4Zjc3ZSwgMHhjNzFkLCAweGQ3M2MsCisgICAgMHgyNmQzLCAweDM2ZjIsIDB4MDY5MSwgMHgxNmIwLCAweDY2NTcsIDB4NzY3NiwgMHg0NjE1LCAweDU2MzQsCisgICAgMHhkOTRjLCAweGM5NmQsIDB4ZjkwZSwgMHhlOTJmLCAweDk5YzgsIDB4ODllOSwgMHhiOThhLCAweGE5YWIsCisgICAgMHg1ODQ0LCAweDQ4NjUsIDB4NzgwNiwgMHg2ODI3LCAweDE4YzAsIDB4MDhlMSwgMHgzODgyLCAweDI4YTMsCisgICAgMHhjYjdkLCAweGRiNWMsIDB4ZWIzZiwgMHhmYjFlLCAweDhiZjksIDB4OWJkOCwgMHhhYmJiLCAweGJiOWEsCisgICAgMHg0YTc1LCAweDVhNTQsIDB4NmEzNywgMHg3YTE2LCAweDBhZjEsIDB4MWFkMCwgMHgyYWIzLCAweDNhOTIsCisgICAgMHhmZDJlLCAweGVkMGYsIDB4ZGQ2YywgMHhjZDRkLCAweGJkYWEsIDB4YWQ4YiwgMHg5ZGU4LCAweDhkYzksCisgICAgMHg3YzI2LCAweDZjMDcsIDB4NWM2NCwgMHg0YzQ1LCAweDNjYTIsIDB4MmM4MywgMHgxY2UwLCAweDBjYzEsCisgICAgMHhlZjFmLCAweGZmM2UsIDB4Y2Y1ZCwgMHhkZjdjLCAweGFmOWIsIDB4YmZiYSwgMHg4ZmQ5LCAweDlmZjgsCisgICAgMHg2ZTE3LCAweDdlMzYsIDB4NGU1NSwgMHg1ZTc0LCAweDJlOTMsIDB4M2ViMiwgMHgwZWQxLCAweDFlZjAsCiB9OwogCiB1aW50MTZfdApAQCAtMTAzLDQgKzEwNSwzIEBACiAgICAgfQogICAgIHJldHVybiBja3N1bTsKIH0KLQpkaWZmIC0tZ2l0IGEvY29tbW9uL3h5ek1vZGVtLmMgYi9jb21tb24veHl6TW9kZW0uYwppbmRleCAzYzg2YjEzLi40YTEzN2JmIDEwMDY0NAotLS0gYS9jb21tb24veHl6TW9kZW0uYworKysgYi9jb21tb24veHl6TW9kZW0uYwpAQCAtMSw2NSArMSw2NyBAQAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vICAgICAgeHl6TW9kZW0uYwotLy8KLS8vICAgICAgUmVkQm9vdCBzdHJlYW0gaGFuZGxlciBmb3IgeHl6TW9kZW0gcHJvdG9jb2wKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMjCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0uCi0vLyBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgotLy8gQ29weXJpZ2h0IChDKSAyMDAyIEdhcnkgVGhvbWFzCi0vLwotLy8gZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi0vLyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotLy8gU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLy8KLS8vIGVDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCi0vLyBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0vLyBmb3IgbW9yZSBkZXRhaWxzLgotLy8KLS8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0vLyB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLS8vIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgotLy8KLS8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCi0vLyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQKLS8vIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QKLS8vIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0vLyBMaWNlbnNlLiBIb3dldmVyIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmaWxlIG11c3Qgc3RpbGwgYmUgbWFkZSBhdmFpbGFibGUKLS8vIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0vLwotLy8gVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCi0vLyB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0vLwotLy8gQWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIGVDb3MgbWF5IGJlIGFycmFuZ2VkIGJ5IGNvbnRhY3RpbmcgUmVkIEhhdCwgSW5jLgotLy8gYXQgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyMjIyMjREVTQ1JJUFRJT05CRUdJTiMjIyMKLS8vCi0vLyBBdXRob3Iocyk6ICAgIGd0aG9tYXMKLS8vIENvbnRyaWJ1dG9yczogZ3Rob21hcywgdHNtaXRoLCBZb3NoaW5vcmkgU2F0bwotLy8gRGF0ZTogICAgICAgICAyMDAwLTA3LTE0Ci0vLyBQdXJwb3NlOiAgICAgIAotLy8gRGVzY3JpcHRpb246ICAKLS8vICAgICAgICAgICAgICAKLS8vIFRoaXMgY29kZSBpcyBwYXJ0IG9mIFJlZEJvb3QgKHRtKS4KLS8vCi0vLyMjIyNERVNDUklQVElPTkVORCMjIyMKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqICAgICAgeHl6TW9kZW0uYworICoKKyAqICAgICAgUmVkQm9vdCBzdHJlYW0gaGFuZGxlciBmb3IgeHl6TW9kZW0gcHJvdG9jb2wKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiMjIyNFQ09TR1BMQ09QWVJJR0hUQkVHSU4jIyMjCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0uCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyIEdhcnkgVGhvbWFzCisgKgorICogZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIGVDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCisgKiBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQKKyAqIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QKKyAqIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBIb3dldmVyIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmaWxlIG11c3Qgc3RpbGwgYmUgbWFkZSBhdmFpbGFibGUKKyAqIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKgorICogVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uCisgKiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKgorICogQWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIGVDb3MgbWF5IGJlIGFycmFuZ2VkIGJ5IGNvbnRhY3RpbmcgUmVkIEhhdCwgSW5jLgorICogYXQgaHR0cDogKnNvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiMjIyMjREVTQ1JJUFRJT05CRUdJTiMjIyMKKyAqCisgKiBBdXRob3Iocyk6ICAgIGd0aG9tYXMKKyAqIENvbnRyaWJ1dG9yczogZ3Rob21hcywgdHNtaXRoLCBZb3NoaW5vcmkgU2F0bworICogRGF0ZTogICAgICAgICAyMDAwLTA3LTE0CisgKiBQdXJwb3NlOgorICogRGVzY3JpcHRpb246CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgUmVkQm9vdCAodG0pLgorICoKKyAqIyMjI0RFU0NSSVBUSU9ORU5EIyMjIworICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLwogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPHh5ek1vZGVtLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8Y3JjLmg+CiAKLS8vIEFzc3VtcHRpb24gLSBydW4geHl6TW9kZW0gcHJvdG9jb2wgb3ZlciB0aGUgY29uc29sZSBwb3J0CisvKiBBc3N1bXB0aW9uIC0gcnVuIHh5ek1vZGVtIHByb3RvY29sIG92ZXIgdGhlIGNvbnNvbGUgcG9ydCAqLwogCi0vLyBWYWx1ZXMgbWFnaWMgdG8gdGhlIHByb3RvY29sCisvKiBWYWx1ZXMgbWFnaWMgdG8gdGhlIHByb3RvY29sICovCiAjZGVmaW5lIFNPSCAweDAxCiAjZGVmaW5lIFNUWCAweDAyCiAjZGVmaW5lIEVPVCAweDA0CkBAIC02NywxMSArNjksMTEgQEAKICNkZWZpbmUgQlNQIDB4MDgKICNkZWZpbmUgTkFLIDB4MTUKICNkZWZpbmUgQ0FOIDB4MTgKLSNkZWZpbmUgRU9GIDB4MUEgIC8vIF5aIGZvciBET1Mgb2ZmaWNpb25hZG9zCisjZGVmaW5lIEVPRiAweDFBICAvKiBeWiBmb3IgRE9TIG9mZmljaW9uYWRvcyAqLwogCiAjZGVmaW5lIFVTRV9ZTU9ERU1fTEVOR1RICiAKLS8vIERhdGEgJiBzdGF0ZSBsb2NhbCB0byB0aGUgcHJvdG9jb2wKKy8qIERhdGEgJiBzdGF0ZSBsb2NhbCB0byB0aGUgcHJvdG9jb2wgKi8KIHN0YXRpYyBzdHJ1Y3QgewogI2lmZGVmIFJFREJPT1QKICAgICBoYWxfdmlydHVhbF9jb21tX3RhYmxlX3QqIF9fY2hhbjsKQEAgLTgwLDcgKzgyLDcgQEAKICNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgcGt0WzEwMjRdLCAqYnVmcDsKICAgICB1bnNpZ25lZCBjaGFyIGJsayxjYmxrLGNyYzEsY3JjMjsKLSAgICB1bnNpZ25lZCBjaGFyIG5leHRfYmxrOyAgLy8gRXhwZWN0ZWQgYmxvY2sKKyAgICB1bnNpZ25lZCBjaGFyIG5leHRfYmxrOyAgLyogRXhwZWN0ZWQgYmxvY2sgKi8KICAgICBpbnQgbGVuLCBtb2RlLCB0b3RhbF9yZXRyaWVzOwogICAgIGludCB0b3RhbF9TT0gsIHRvdGFsX1NUWCwgdG90YWxfQ0FOOwogICAgIGJvb2wgY3JjX21vZGUsIGF0X2VvZiwgdHhfYWNrOwpAQCAtODksMTMgKzkxLDEzIEBACiAjZW5kaWYKIH0geHl6OwogCi0jZGVmaW5lIHh5ek1vZGVtX0NIQVJfVElNRU9VVCAgICAgICAgICAgIDIwMDAgIC8vIDIgc2Vjb25kcworI2RlZmluZSB4eXpNb2RlbV9DSEFSX1RJTUVPVVQgICAgICAgICAgICAyMDAwICAvKiAyIHNlY29uZHMgKi8KICNkZWZpbmUgeHl6TW9kZW1fTUFYX1JFVFJJRVMgICAgICAgICAgICAgMjAKICNkZWZpbmUgeHl6TW9kZW1fTUFYX1JFVFJJRVNfV0lUSF9DUkMgICAgMTAKLSNkZWZpbmUgeHl6TW9kZW1fQ0FOX0NPVU5UICAgICAgICAgICAgICAgIDMgICAgLy8gV2FpdCBmb3IgMyBDQU4gYmVmb3JlIHF1aXR0aW5nCisjZGVmaW5lIHh5ek1vZGVtX0NBTl9DT1VOVCAgICAgICAgICAgICAgICAzICAgIC8qIFdhaXQgZm9yIDMgQ0FOIGJlZm9yZSBxdWl0dGluZyAqLwogCiAKLSNpZm5kZWYgUkVEQk9PVCAgLy9TQgorI2lmbmRlZiBSRURCT09UICAvKlNCICovCiB0eXBlZGVmIGludCBjeWdfaW50MzI7CiBpbnQgQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUIChjaGFyIGNoYW4sY2hhciAqYykgewogI2RlZmluZSBERUxBWSAyMApAQCAtMTE1LDcgKzExNyw3IEBACiAJcHV0Yyh5KTsKIH0KIAotLy8gVmFsaWRhdGUgYSBoZXggY2hhcmFjdGVyCisvKiBWYWxpZGF0ZSBhIGhleCBjaGFyYWN0ZXIgKi8KIF9faW5saW5lX18gc3RhdGljIGJvb2wKIF9pc19oZXgoY2hhciBjKQogewpAQCAtMTI0LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKSk7CiB9CiAKLS8vIENvbnZlcnQgYSBzaW5nbGUgaGV4IG5pYmJsZQorLyogQ29udmVydCBhIHNpbmdsZSBoZXggbmliYmxlICovCiBfX2lubGluZV9fIHN0YXRpYyBpbnQKIF9mcm9tX2hleChjaGFyIGMpCiB7CkBAIC0xNDAsNyArMTQyLDcgQEAKICAgICByZXR1cm4gcmV0OwogfQogCi0vLyBDb252ZXJ0IGEgY2hhcmFjdGVyIHRvIGxvd2VyIGNhc2UKKy8qIENvbnZlcnQgYSBjaGFyYWN0ZXIgdG8gbG93ZXIgY2FzZSAqLwogX19pbmxpbmVfXyBzdGF0aWMgY2hhcgogX3RvbG93ZXIoY2hhciBjKQogewpAQCAtMTUwLDExICsxNTIsNyBAQAogICAgIHJldHVybiBjOwogfQogCi0KLQotLy8KLS8vIFBhcnNlIChzY2FuKSBhIG51bWJlcgotLy8KKy8qIFBhcnNlIChzY2FuKSBhIG51bWJlciAqLwogYm9vbAogcGFyc2VfbnVtKGNoYXIgKnMsIHVuc2lnbmVkIGxvbmcgKnZhbCwgY2hhciAqKmVzLCBjaGFyICpkZWxpbSkKIHsKQEAgLTE3MywxMCArMTcxLDEwIEBACiAgICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgIGMgPSAqcysrOwogICAgICAgICBpZiAoX2lzX2hleChjKSAmJiAoKGRpZ2l0ID0gX2Zyb21faGV4KGMpKSA8IHJhZGl4KSkgewotICAgICAgICAgICAgLy8gVmFsaWQgZGlnaXQKKyAgICAgICAgICAgIC8qIFZhbGlkIGRpZ2l0ICovCiAjaWZkZWYgQ1lHUEtHX0hBTF9NSVBTCi0gICAgICAgICAgICAvLyBGSVhNRTogdHg0OSBjb21waWxlciBnZW5lcmF0ZXMgMHgyNTM5MDE4IGZvciBNVUwgd2hpY2gKLSAgICAgICAgICAgIC8vIGlzbid0IGFueSBnb29kLgorICAgICAgICAgICAgLyogRklYTUU6IHR4NDkgY29tcGlsZXIgZ2VuZXJhdGVzIDB4MjUzOTAxOCBmb3IgTVVMIHdoaWNoICovCisgICAgICAgICAgICAvKiBpc24ndCBhbnkgZ29vZC4gKi8KICAgICAgICAgICAgIGlmICgxNiA9PSByYWRpeCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgPDwgNDsKICAgICAgICAgICAgIGVsc2UKQEAgLTE4NywxMiArMTg1LDEyIEBACiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChkZWxpbSAhPSAoY2hhciAqKTApIHsKLSAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhpcyBjaGFyYWN0ZXIgaXMgb25lIG9mIHRoZSBkZWxpbWl0ZXJzCisgICAgICAgICAgICAgICAgLyogU2VlIGlmIHRoaXMgY2hhcmFjdGVyIGlzIG9uZSBvZiB0aGUgZGVsaW1pdGVycyAqLwogICAgICAgICAgICAgICAgIGNoYXIgKmRwID0gZGVsaW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKCpkcCAmJiAoYyAhPSAqZHApKSBkcCsrOwotICAgICAgICAgICAgICAgIGlmICgqZHApIGJyZWFrOyAgLy8gRm91bmQgYSBnb29kIGRlbGltaXRlcgorICAgICAgICAgICAgICAgIGlmICgqZHApIGJyZWFrOyAgLyogRm91bmQgYSBnb29kIGRlbGltaXRlciAqLwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gTWFsZm9ybWF0dGVkIG51bWJlcgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLyogTWFsZm9ybWF0dGVkIG51bWJlciAqLwogICAgICAgICB9CiAgICAgfQogICAgICp2YWwgPSByZXN1bHQ7CkBAIC0yMDcsMTEgKzIwNSwxMSBAQAogI2RlZmluZSBVU0VfU1BSSU5URgogI2lmZGVmIERFQlVHCiAjaWZuZGVmIFVTRV9TUFJJTlRGCi0vLwotLy8gTm90ZTogdGhpcyBkZWJ1ZyBzZXR1cCBvbmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQgcGxhdGZvcm0gaGFzIHR3byBzZXJpYWwgcG9ydHMKLS8vIGF2YWlsYWJsZSBzbyB0aGF0IHRoZSBvdGhlciBvbmUgKGN1cnJlbnRseSBvbmx5IHBvcnQgMSkgY2FuIGJlIHVzZWQgZm9yIGRlYnVnCi0vLyBtZXNzYWdlcy4KLS8vCisvKgorICogTm90ZTogdGhpcyBkZWJ1ZyBzZXR1cCBvbmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQgcGxhdGZvcm0gaGFzIHR3byBzZXJpYWwgcG9ydHMKKyAqIGF2YWlsYWJsZSBzbyB0aGF0IHRoZSBvdGhlciBvbmUgKGN1cnJlbnRseSBvbmx5IHBvcnQgMSkgY2FuIGJlIHVzZWQgZm9yIGRlYnVnCisgKiBtZXNzYWdlcy4KKyAqLwogc3RhdGljIGludAogem1fZHByaW50ZihjaGFyICpmbXQsIC4uLikKIHsKQEAgLTIzNSw5ICsyMzMsOSBAQAogfQogCiAjZWxzZQotLy8KLS8vIE5vdGU6IHRoaXMgZGVidWcgc2V0dXAgd29ya3MgYnkgc3RvcmluZyB0aGUgc3RyaW5ncyBpbiBhIGZpeGVkIGJ1ZmZlcgotLy8KKy8qCisgKiBOb3RlOiB0aGlzIGRlYnVnIHNldHVwIHdvcmtzIGJ5IHN0b3JpbmcgdGhlIHN0cmluZ3MgaW4gYSBmaXhlZCBidWZmZXIKKyAqLwogI2RlZmluZSBGSU5BTAogI2lmZGVmIEZJTkFMCiBzdGF0aWMgY2hhciAqem1fb3V0ID0gKGNoYXIgKikweDAwMzgwMDAwOwpAQCAtMzA4LDcgKzMwNiw3IEBACiAjZGVmaW5lIFpNX0RFQlVHKHgpCiAjZW5kaWYKIAotLy8gV2FpdCBmb3IgdGhlIGxpbmUgdG8gZ28gaWRsZQorLyogV2FpdCBmb3IgdGhlIGxpbmUgdG8gZ28gaWRsZSAqLwogc3RhdGljIHZvaWQKIHh5ek1vZGVtX2ZsdXNoKHZvaWQpCiB7CkBAIC0zMzAsNyArMzI4LDcgQEAKICAgICB1bnNpZ25lZCBzaG9ydCBja3N1bTsKIAogICAgIFpNX0RFQlVHKHptX25ldygpKTsKLSAgICAvLyBGaW5kIHRoZSBzdGFydCBvZiBhIGhlYWRlcgorICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIGEgaGVhZGVyICovCiAgICAgY2FuX3RvdGFsID0gMDsKICAgICBoZHJfY2hhcnMgPSAwOwogCkBAIC0zNTYsMTEgKzM1NCwxMSBAQAogICAgICAgICAgICAgICAgIGlmICgrK2Nhbl90b3RhbCA9PSB4eXpNb2RlbV9DQU5fQ09VTlQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh5ek1vZGVtX2NhbmNlbDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciBtdWx0aXBsZSBDQU4gdG8gYXZvaWQgZWFybHkgcXVpdHMKKyAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgbXVsdGlwbGUgQ0FOIHRvIGF2b2lkIGVhcmx5IHF1aXRzICovCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRU9UOgotICAgICAgICAgICAgICAgIC8vIEVPVCBvbmx5IHN1cHBvcnRlZCBpZiBubyBub2lzZQorICAgICAgICAgICAgICAgIC8qIEVPVCBvbmx5IHN1cHBvcnRlZCBpZiBubyBub2lzZSAqLwogICAgICAgICAgICAgICAgIGlmIChoZHJfY2hhcnMgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCBBQ0spOwogICAgICAgICAgICAgICAgICAgICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJBQ0sgb24gRU9UICMlZFxuIiwgX19MSU5FX18pKTsKQEAgLTM2OCwxOSArMzY2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4eXpNb2RlbV9lb2Y7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvLyBJZ25vcmUsIHdhaXRpbmcgZm9yIHN0YXJ0IG9mIGhlYWRlcgorICAgICAgICAgICAgICAgIC8qIElnbm9yZSwgd2FpdGluZyBmb3Igc3RhcnQgb2YgaGVhZGVyICovCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRGF0YSBzdHJlYW0gdGltZWQgb3V0Ci0gICAgICAgICAgICB4eXpNb2RlbV9mbHVzaCgpOyAgLy8gVG9zcyBhbnkgY3VycmVudCBpbnB1dAorICAgICAgICAgICAgLyogRGF0YSBzdHJlYW0gdGltZWQgb3V0ICovCisgICAgICAgICAgICB4eXpNb2RlbV9mbHVzaCgpOyAgLyogVG9zcyBhbnkgY3VycmVudCBpbnB1dCAqLwogICAgICAgICAgICAgWk1fREVCVUcoem1fZHVtcChfX0xJTkVfXykpOwogICAgICAgICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoKGN5Z19pbnQzMikyNTAwMDApOwogICAgICAgICAgICAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBIZWFkZXIgZm91bmQsIG5vdyByZWFkIHRoZSBkYXRhCisgICAgLyogSGVhZGVyIGZvdW5kLCBub3cgcmVhZCB0aGUgZGF0YSAqLwogICAgIHJlcyA9IENZR0FDQ19DT01NX0lGX0dFVENfVElNRU9VVCgqeHl6Ll9fY2hhbiwgJnh5ei5ibGspOwogICAgIFpNX0RFQlVHKHptX3NhdmUoeHl6LmJsaykpOwogICAgIGlmICghcmVzKSB7CkBAIC00MjAsMTggKzQxOCwxOCBAQAogICAgICAgICB9CiAgICAgfQogICAgIFpNX0RFQlVHKHptX2R1bXAoX19MSU5FX18pKTsKLSAgICAvLyBWYWxpZGF0ZSB0aGUgbWVzc2FnZQorICAgIC8qIFZhbGlkYXRlIHRoZSBtZXNzYWdlICovCiAgICAgaWYgKCh4eXouYmxrIF4geHl6LmNibGspICE9ICh1bnNpZ25lZCBjaGFyKTB4RkYpIHsKICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiRnJhbWluZyBlcnJvciAtIGJsazogJXgvJXgvJXhcbiIsIHh5ei5ibGssIHh5ei5jYmxrLCAoeHl6LmJsayBeIHh5ei5jYmxrKSkpOwogICAgICAgICBaTV9ERUJVRyh6bV9kdW1wX2J1Zih4eXoucGt0LCB4eXoubGVuKSk7CiAgICAgICAgIHh5ek1vZGVtX2ZsdXNoKCk7CiAgICAgICAgIHJldHVybiB4eXpNb2RlbV9mcmFtZTsKICAgICB9Ci0gICAgLy8gVmVyaWZ5IGNoZWNrc3VtL0NSQworICAgIC8qIFZlcmlmeSBjaGVja3N1bS9DUkMgKi8KICAgICBpZiAoeHl6LmNyY19tb2RlKSB7CiAgICAgICAgIGNrc3VtID0gY3lnX2NyYzE2KHh5ei5wa3QsIHh5ei5sZW4pOwogICAgICAgICBpZiAoY2tzdW0gIT0gKCh4eXouY3JjMSA8PCA4KSB8IHh5ei5jcmMyKSkgewotICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiQ1JDIGVycm9yIC0gcmVjdmQ6ICUwMnglMDJ4LCBjb21wdXRlZDogJXhcbiIsIAorICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiQ1JDIGVycm9yIC0gcmVjdmQ6ICUwMnglMDJ4LCBjb21wdXRlZDogJXhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ei5jcmMxLCB4eXouY3JjMiwgY2tzdW0gJiAweEZGRkYpKTsKICAgICAgICAgICAgIHJldHVybiB4eXpNb2RlbV9ja3N1bTsKICAgICAgICAgfQpAQCAtNDQ1LDE4ICs0NDMsMTggQEAKICAgICAgICAgICAgIHJldHVybiB4eXpNb2RlbV9ja3N1bTsKICAgICAgICAgfQogICAgIH0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIG1lc3NhZ2UgcGFzc2VzIFtzdHJ1Y3R1cmFsXSBtdXN0ZXIKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIG1lc3NhZ2UgcGFzc2VzIFtzdHJ1Y3R1cmFsXSBtdXN0ZXIgKi8KICAgICByZXR1cm4gMDsKIH0KIAotaW50IAoraW50CiB4eXpNb2RlbV9zdHJlYW1fb3Blbihjb25uZWN0aW9uX2luZm9fdCAqaW5mbywgaW50ICplcnIpCiB7CiAgICAgaW50IGNvbnNvbGVfY2hhbiwgc3RhdD0wOwogICAgIGludCByZXRyaWVzID0geHl6TW9kZW1fTUFYX1JFVFJJRVM7CiAgICAgaW50IGNyY19yZXRyaWVzID0geHl6TW9kZW1fTUFYX1JFVFJJRVNfV0lUSF9DUkM7CiAKLS8vICAgIFpNX0RFQlVHKHptX291dCA9IHptX291dF9zdGFydCk7CisvKiAgICBaTV9ERUJVRyh6bV9vdXQgPSB6bV9vdXRfc3RhcnQpOyAqLwogI2lmZGVmIHh5ek1vZGVtX3ptb2RlbQogICAgIGlmIChpbmZvLT5tb2RlID09IHh5ek1vZGVtX3ptb2RlbSkgewogICAgICAgICAqZXJyID0geHl6TW9kZW1fbm9abW9kZW07CkBAIC00NjUsNyArNDYzLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgUkVEQk9PVAotICAgIC8vIFNldCB1cCB0aGUgSS9PIGNoYW5uZWwuICBOb3RlOiB0aGlzIGFsbG93cyBmb3IgdXNpbmcgYSBkaWZmZXJlbnQgcG9ydCBpbiB0aGUgZnV0dXJlCisgICAgLyogU2V0IHVwIHRoZSBJL08gY2hhbm5lbC4gIE5vdGU6IHRoaXMgYWxsb3dzIGZvciB1c2luZyBhIGRpZmZlcmVudCBwb3J0IGluIHRoZSBmdXR1cmUgKi8KICAgICBjb25zb2xlX2NoYW4gPSBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NKENZR05VTV9DQUxMX0lGX1NFVF9DT01NX0lEX1FVRVJZX0NVUlJFTlQpOwogICAgIGlmIChpbmZvLT5jaGFuID49IDApIHsKICAgICAgICAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTShpbmZvLT5jaGFuKTsKQEAgLTQ3Nyw5ICs0NzUsOSBAQAogICAgIENZR0FDQ19DQUxMX0lGX1NFVF9DT05TT0xFX0NPTU0oY29uc29sZV9jaGFuKTsKICAgICBDWUdBQ0NfQ09NTV9JRl9DT05UUk9MKCp4eXouX19jaGFuLCBfX0NPTU1DVExfU0VUX1RJTUVPVVQsIHh5ek1vZGVtX0NIQVJfVElNRU9VVCk7CiAjZWxzZQotLy8gVE9ETzogQ0hFQ0sgIQorLyogVE9ETzogQ0hFQ0sgISAqLwogICAgIGludCBkdW1teTsKLSAgICB4eXouX19jaGFuPSZkdW1teTsgCisgICAgeHl6Ll9fY2hhbj0mZHVtbXk7CiAjZW5kaWYKICAgICB4eXoubGVuID0gMDsKICAgICB4eXouY3JjX21vZGUgPSB0cnVlOwpAQCAtNDk0LDExICs0OTIsMTEgQEAKICAgICB4eXoucmVhZF9sZW5ndGggPSAwOwogICAgIHh5ei5maWxlX2xlbmd0aCA9IDA7CiAjZW5kaWYKLSAgICAKKwogICAgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sICh4eXouY3JjX21vZGUgPyAnQycgOiBOQUspKTsKIAogICAgIGlmICh4eXoubW9kZSA9PSB4eXpNb2RlbV94bW9kZW0pIHsKLQkgICAgLy8gWC1tb2RlbSBkb2Vzbid0IGhhdmUgYW4gaW5mb3JtYXRpb24gaGVhZGVyIC0gZXhpdCBoZXJlCisJICAgIC8qIFgtbW9kZW0gZG9lc24ndCBoYXZlIGFuIGluZm9ybWF0aW9uIGhlYWRlciAtIGV4aXQgaGVyZSAqLwogICAgICAgICAgICAgeHl6Lm5leHRfYmxrID0gMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTUwNiwyNCArNTA0LDI0IEBACiAgICAgd2hpbGUgKHJldHJpZXMtLSA+IDApIHsKICAgICAgICAgc3RhdCA9IHh5ek1vZGVtX2dldF9oZHIoKTsKICAgICAgICAgaWYgKHN0YXQgPT0gMCkgewotICAgICAgICAgICAgLy8gWS1tb2RlbSBmaWxlIGluZm9ybWF0aW9uIGhlYWRlcgorICAgICAgICAgICAgLyogWS1tb2RlbSBmaWxlIGluZm9ybWF0aW9uIGhlYWRlciAqLwogICAgICAgICAgICAgaWYgKHh5ei5ibGsgPT0gMCkgewogI2lmZGVmIFVTRV9ZTU9ERU1fTEVOR1RICi0gICAgICAgICAgICAgICAgLy8gc2tpcCBmaWxlbmFtZQorICAgICAgICAgICAgICAgIC8qIHNraXAgZmlsZW5hbWUgKi8KICAgICAgICAgICAgICAgICB3aGlsZSAoKnh5ei5idWZwKyspOwotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgbGVuZ3RoCisgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBsZW5ndGggKi8KICAgICAgICAgICAgICAgICBwYXJzZV9udW0oeHl6LmJ1ZnAsICZ4eXouZmlsZV9sZW5ndGgsIE5VTEwsICIgIik7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgZmlsZSBuYW1lIGRhdGEgYmxvY2sgcXVpZXRseSBkaXNjYXJkZWQKKyAgICAgICAgICAgICAgICAvKiBUaGUgcmVzdCBvZiB0aGUgZmlsZSBuYW1lIGRhdGEgYmxvY2sgcXVpZXRseSBkaXNjYXJkZWQgKi8KICAgICAgICAgICAgICAgICB4eXoudHhfYWNrID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHh5ei5uZXh0X2JsayA9IDE7CiAgICAgICAgICAgICB4eXoubGVuID0gMDsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgCisgICAgICAgIH0gZWxzZQogICAgICAgICBpZiAoc3RhdCA9PSB4eXpNb2RlbV90aW1lb3V0KSB7CiAgICAgICAgICAgICBpZiAoLS1jcmNfcmV0cmllcyA8PSAwKSB4eXouY3JjX21vZGUgPSBmYWxzZTsKLSAgICAgICAgICAgIENZR0FDQ19DQUxMX0lGX0RFTEFZX1VTKDUqMTAwMDAwKTsgICAvLyBFeHRyYSBkZWxheSBmb3Igc3RhcnR1cAorICAgICAgICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoNSoxMDAwMDApOyAgIC8qIEV4dHJhIGRlbGF5IGZvciBzdGFydHVwICovCiAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7CiAgICAgICAgICAgICB4eXoudG90YWxfcmV0cmllcysrOwogICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiTkFLICglZClcbiIsIF9fTElORV9fKSk7CkBAIC01MzcsNyArNTM1LDcgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKLWludCAKK2ludAogeHl6TW9kZW1fc3RyZWFtX3JlYWQoY2hhciAqYnVmLCBpbnQgc2l6ZSwgaW50ICplcnIpCiB7CiAgICAgaW50IHN0YXQsIHRvdGFsLCBsZW47CkBAIC01NDUsNyArNTQzLDcgQEAKIAogICAgIHRvdGFsID0gMDsKICAgICBzdGF0ID0geHl6TW9kZW1fY2FuY2VsOwotICAgIC8vIFRyeSBhbmQgZ2V0ICdzaXplJyBieXRlcyBpbnRvIHRoZSBidWZmZXIKKyAgICAvKiBUcnkgYW5kIGdldCAnc2l6ZScgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCiAgICAgd2hpbGUgKCF4eXouYXRfZW9mICYmIChzaXplID4gMCkpIHsKICAgICAgICAgaWYgKHh5ei5sZW4gPT0gMCkgewogICAgICAgICAgICAgcmV0cmllcyA9IHh5ek1vZGVtX01BWF9SRVRSSUVTOwpAQCAtNTYyLDggKzU2MCw4IEBACiAjZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEpIHsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgYmxvY2tzIGNhbiBiZSBwYWRkZWQgd2l0aCBeWiAoRU9GKSBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHRyaWVzIHRvIGRldGVjdCBhbmQgcmVtb3ZlIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIGJsb2NrcyBjYW4gYmUgcGFkZGVkIHdpdGggXlogKEVPRikgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY29kZSB0cmllcyB0byBkZXRlY3QgYW5kIHJlbW92ZSB0aGVtICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4eXouYnVmcFt4eXoubGVuLTFdID09IEVPRikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHh5ei5idWZwW3h5ei5sZW4tMl0gPT0gRU9GKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeHl6LmJ1ZnBbeHl6Lmxlbi0zXSA9PSBFT0YpKSB7CkBAIC01NzQsMTAgKzU3MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAjaWZkZWYgVVNFX1lNT0RFTV9MRU5HVEgKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhY2N1bXVsYXRlZCBsZW5ndGggZXhjZWVkcyB0aGF0IG9mIHRoZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc28sIHJlZHVjZSBzaXplIChpLmUuLCBjdXQgb3V0IHBhZCBieXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZG8gdGhpcyBmb3IgWS1tb2RlbSAoYW5kIFotbW9kZW0gc2hvdWxkIGl0IGV2ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHN1cHBvcnRlZCBzaW5jZSBpdCBjYW4gZmFsbCBiYWNrIHRvIFktbW9kZW0gbW9kZSkuCisJCQkvKgorICAgICAgICAgICAgICAgICAgICAgICAgICogU2VlIGlmIGFjY3VtdWxhdGVkIGxlbmd0aCBleGNlZWRzIHRoYXQgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiBzbywgcmVkdWNlIHNpemUgKGkuZS4sIGN1dCBvdXQgcGFkIGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICogT25seSBkbyB0aGlzIGZvciBZLW1vZGVtIChhbmQgWi1tb2RlbSBzaG91bGQgaXQgZXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgc3VwcG9ydGVkIHNpbmNlIGl0IGNhbiBmYWxsIGJhY2sgdG8gWS1tb2RlbSBtb2RlKS4KKwkJCSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHh5ei5tb2RlICE9IHh5ek1vZGVtX3htb2RlbSAmJiAwICE9IHh5ei5maWxlX2xlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ei5yZWFkX2xlbmd0aCArPSB4eXoubGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4eXoucmVhZF9sZW5ndGggPiB4eXouZmlsZV9sZW5ndGgpIHsKQEAgLTU4Nyw5ICs1ODcsOSBAQAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4eXouYmxrID09ICgoeHl6Lm5leHRfYmxrIC0gMSkgJiAweEZGKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCByZS1BQ0sgdGhpcyBzbyBzZW5kZXIgd2lsbCBnZXQgb24gd2l0aCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgLyogSnVzdCByZS1BQ0sgdGhpcyBzbyBzZW5kZXIgd2lsbCBnZXQgb24gd2l0aCBpdCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbiwgQUNLKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLy8gTmVlZCBuZXcgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIE5lZWQgbmV3IGhlYWRlciAqLwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHh5ek1vZGVtX3NlcXVlbmNlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02MDQsNyArNjA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sICh4eXouY3JjX21vZGUgPyAnQycgOiBOQUspKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHh5ei50b3RhbF9yZXRyaWVzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJSZWFkaW5nIEZpbmFsIEhlYWRlclxuIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHh5ek1vZGVtX2dldF9oZHIoKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSB4eXpNb2RlbV9nZXRfaGRyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCBBQ0spOwogICAgICAgICAgICAgICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiRklOQUwgQUNLICglZClcbiIsIF9fTElORV9fKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTYyMSw3ICs2MjEsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAvLyBEb24ndCAicmVhZCIgZGF0YSBmcm9tIHRoZSBFT0YgcHJvdG9jb2wgcGFja2FnZQorICAgICAgICAvKiBEb24ndCAicmVhZCIgZGF0YSBmcm9tIHRoZSBFT0YgcHJvdG9jb2wgcGFja2FnZSAqLwogICAgICAgICBpZiAoIXh5ei5hdF9lb2YpIHsKICAgICAgICAgICAgIGxlbiA9IHh5ei5sZW47CiAgICAgICAgICAgICBpZiAoc2l6ZSA8IGxlbikgbGVuID0gc2l6ZTsKQEAgLTYzOSwxNSArNjM5LDE1IEBACiB2b2lkCiB4eXpNb2RlbV9zdHJlYW1fY2xvc2UoaW50ICplcnIpCiB7Ci0gICAgZGlhZ19wcmludGYoInh5ek1vZGVtIC0gJXMgbW9kZSwgJWQoU09IKS8lZChTVFgpLyVkKENBTikgcGFja2V0cywgJWQgcmV0cmllc1xuIiwgCisgICAgZGlhZ19wcmludGYoInh5ek1vZGVtIC0gJXMgbW9kZSwgJWQoU09IKS8lZChTVFgpLyVkKENBTikgcGFja2V0cywgJWQgcmV0cmllc1xuIiwKICAgICAgICAgICAgICAgICB4eXouY3JjX21vZGUgPyAiQ1JDIiA6ICJDa3N1bSIsCiAgICAgICAgICAgICAgICAgeHl6LnRvdGFsX1NPSCwgeHl6LnRvdGFsX1NUWCwgeHl6LnRvdGFsX0NBTiwKICAgICAgICAgICAgICAgICB4eXoudG90YWxfcmV0cmllcyk7CiAgICAgWk1fREVCVUcoem1fZmx1c2goKSk7CiB9CiAKLS8vIE5lZWQgdG8gYmUgYWJsZSB0byBjbGVhbiBvdXQgdGhlIGlucHV0IGJ1ZmZlciwgc28gaGF2ZSB0byB0YWtlIHRoZQotLy8gZ2V0YworLyogTmVlZCB0byBiZSBhYmxlIHRvIGNsZWFuIG91dCB0aGUgaW5wdXQgYnVmZmVyLCBzbyBoYXZlIHRvIHRha2UgdGhlICovCisvKiBnZXRjICovCiB2b2lkIHh5ek1vZGVtX3N0cmVhbV90ZXJtaW5hdGUoYm9vbCBhYm9ydCwgaW50ICgqZ2V0Yykodm9pZCkpCiB7CiAgIGludCBjOwpAQCAtNjU3LDggKzY1Nyw4IEBACiAgICAgICBzd2l0Y2ggKHh5ei5tb2RlKSB7CiAJY2FzZSB4eXpNb2RlbV94bW9kZW06CiAJY2FzZSB4eXpNb2RlbV95bW9kZW06Ci0JICAvLyBUaGUgWC9ZTU9ERU0gU3BlYyBzZWVtcyB0byBzdWdnZXN0IHRoYXQgbXVsdGlwbGUgQ0FOIGZvbGxvd2VkIGJ5IGFuIGVxdWFsCi0JICAvLyBudW1iZXIgb2YgQmFja3NwYWNlcyBpcyBhIGZyaWVuZGx5IHdheSB0byBnZXQgdGhlIG90aGVyIGVuZCB0byBhYm9ydC4KKwkgIC8qIFRoZSBYL1lNT0RFTSBTcGVjIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCBtdWx0aXBsZSBDQU4gZm9sbG93ZWQgYnkgYW4gZXF1YWwgKi8KKwkgIC8qIG51bWJlciBvZiBCYWNrc3BhY2VzIGlzIGEgZnJpZW5kbHkgd2F5IHRvIGdldCB0aGUgb3RoZXIgZW5kIHRvIGFib3J0LiAqLwogCSAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbixDQU4pOwogCSAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbixDQU4pOwogCSAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbixDQU4pOwpAQCAtNjY3LDI5ICs2NjcsMzMgQEAKIAkgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sQlNQKTsKIAkgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sQlNQKTsKIAkgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sQlNQKTsKLQkgIC8vIE5vdyBjb25zdW1lIHRoZSByZXN0IG9mIHdoYXQncyB3YWl0aW5nIG9uIHRoZSBsaW5lLgorCSAgLyogTm93IGNvbnN1bWUgdGhlIHJlc3Qgb2Ygd2hhdCdzIHdhaXRpbmcgb24gdGhlIGxpbmUuICovCiAJICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJGbHVzaGluZyBzZXJpYWwgbGluZS5cbiIpKTsKIAkgIHh5ek1vZGVtX2ZsdXNoKCk7CiAgICAgICAgICAgeHl6LmF0X2VvZiA9IHRydWU7CiAJYnJlYWs7CiAjaWZkZWYgeHl6TW9kZW1fem1vZGVtCiAJY2FzZSB4eXpNb2RlbV96bW9kZW06Ci0JICAvLyBNaWdodCBzdXBwb3J0IGl0IHNvbWUgZGF5IEkgc3VwcG9zZS4KKwkgIC8qIE1pZ2h0IHN1cHBvcnQgaXQgc29tZSBkYXkgSSBzdXBwb3NlLiAqLwogI2VuZGlmCiAJYnJlYWs7CiAgICAgICB9CiAgIH0gZWxzZSB7CiAgICAgICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJFbmdhZ2luZyBjbGVhbnVwIG1vZGUuLi5cbiIpKTsKLSAgICAgIC8vIENvbnN1bWUgYW55IHRyYWlsaW5nIGNyYXAgbGVmdCBpbiB0aGUgaW5idWZmZXIgZnJvbQotICAgICAgLy8gcHJldmlvdXMgcmVjaWV2ZWQgYmxvY2tzLiBTaW5jZSB2ZXJ5IGZldyBmaWxlcyBhcmUgYW4gZXhhY3QgbXVsdGlwbGUKLSAgICAgIC8vIG9mIHRoZSB0cmFuc2ZlciBibG9jayBzaXplLCB0aGVyZSB3aWxsIGFsbW9zdCBhbHdheXMgYmUgc29tZSBndW5rIGhlcmUuCi0gICAgICAvLyBJZiB3ZSBkb24ndCBlYXQgaXQgbm93LCBSZWRCb290IHdpbGwgdGhpbmsgdGhlIHVzZXIgdHlwZWQgaXQuCisgICAgICAvKgorICAgICAgICogQ29uc3VtZSBhbnkgdHJhaWxpbmcgY3JhcCBsZWZ0IGluIHRoZSBpbmJ1ZmZlciBmcm9tCisgICAgICAgKiBwcmV2aW91cyByZWNpZXZlZCBibG9ja3MuIFNpbmNlIHZlcnkgZmV3IGZpbGVzIGFyZSBhbiBleGFjdCBtdWx0aXBsZQorICAgICAgICogb2YgdGhlIHRyYW5zZmVyIGJsb2NrIHNpemUsIHRoZXJlIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSBzb21lIGd1bmsgaGVyZS4KKyAgICAgICAqIElmIHdlIGRvbid0IGVhdCBpdCBub3csIFJlZEJvb3Qgd2lsbCB0aGluayB0aGUgdXNlciB0eXBlZCBpdC4KKyAgICAgICAqLwogICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiVHJhaWxpbmcgZ3VuazpcbiIpKTsKICAgICAgIHdoaWxlICgoYyA9ICgqZ2V0YykoKSkgPiAtMSkgOwogICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiXG4iKSk7Ci0gICAgICAvLyBNYWtlIGEgc21hbGwgZGVsYXkgdG8gZ2l2ZSB0ZXJtaW5hbCBwcm9ncmFtcyBsaWtlIG1pbmljb20KLSAgICAgIC8vIHRpbWUgdG8gZ2V0IGNvbnRyb2wgYWdhaW4gYWZ0ZXIgdGhlaXIgZmlsZSB0cmFuc2ZlciBwcm9ncmFtCi0gICAgICAvLyBleGl0cy4KKyAgICAgIC8qCisgICAgICAgKiBNYWtlIGEgc21hbGwgZGVsYXkgdG8gZ2l2ZSB0ZXJtaW5hbCBwcm9ncmFtcyBsaWtlIG1pbmljb20KKyAgICAgICAqIHRpbWUgdG8gZ2V0IGNvbnRyb2wgYWdhaW4gYWZ0ZXIgdGhlaXIgZmlsZSB0cmFuc2ZlciBwcm9ncmFtCisgICAgICAgKiBleGl0cy4KKyAgICAgICAqLwogICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoKGN5Z19pbnQzMikyNTAwMDApOwogICB9CiB9CkBAIC03MjgsMTIgKzczMiwxMiBAQAogICAgIH0KIH0KIAotLy8KLS8vIFJlZEJvb3QgaW50ZXJmYWNlCi0vLwotI2lmIDAgLy8gU0IKKy8qCisgKiBSZWRCb290IGludGVyZmFjZQorICovCisjaWYgMCAvKiBTQiAqLwogR0VUQ19JT19GVU5DUyh4eXpNb2RlbV9pbywgeHl6TW9kZW1fc3RyZWFtX29wZW4sIHh5ek1vZGVtX3N0cmVhbV9jbG9zZSwKICAgICAgICAgICAgICAgeHl6TW9kZW1fc3RyZWFtX3Rlcm1pbmF0ZSwgeHl6TW9kZW1fc3RyZWFtX3JlYWQsIHh5ek1vZGVtX2Vycm9yKTsKIFJlZEJvb3RfbG9hZCh4bW9kZW0sIHh5ek1vZGVtX2lvLCBmYWxzZSwgZmFsc2UsIHh5ek1vZGVtX3htb2RlbSk7CiBSZWRCb290X2xvYWQoeW1vZGVtLCB4eXpNb2RlbV9pbywgZmFsc2UsIGZhbHNlLCB4eXpNb2RlbV95bW9kZW0pOwotI2VuZGlmIAorI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9jcHUuYyBiL2NwdS9tcGM1eHh4L2NwdS5jCmluZGV4IDVhZDRiYWEuLjZiNmY4MjggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2NwdS5jCisrKyBiL2NwdS9tcGM1eHh4L2NwdS5jCkBAIC01OCw3ICs1OCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXByaW50ZiAoIiB2JWQuJWQsIENvcmUgdiVkLiVkIiwgU1ZSX01KUkVWIChzdnIpLCBTVlJfTU5SRVYgKHN2ciksIAorCXByaW50ZiAoIiB2JWQuJWQsIENvcmUgdiVkLiVkIiwgU1ZSX01KUkVWIChzdnIpLCBTVlJfTU5SRVYgKHN2ciksCiAJCVBWUl9NQUoocHZyKSwgUFZSX01JTihwdnIpKTsKICNlbmRpZgogCXByaW50ZiAoIiBhdCAlcyBNSHpcbiIsIHN0cm1oeiAoYnVmLCBjbG9jaykpOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvY3B1LmMgYi9jcHUvbXBjODN4eC9jcHUuYwppbmRleCA3Y2ExY2ViLi4yMGJiYTZjIDEwMDY0NAotLS0gYS9jcHUvbXBjODN4eC9jcHUuYworKysgYi9jcHUvbXBjODN4eC9jcHUuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJZG1hbXIwID0gKERNQV9DSEFOTkVMX1RSQU5TRkVSX01PREVfRElSRUNUIHwKIAkJCURNQV9DSEFOTkVMX1NPVVJDRV9BRERSRVNTX0hPTERfOEIgfAogCQkJRE1BX0NIQU5ORUxfU09VUkNFX0FEUkVTU1NfSE9MRF9FTik7Ci0JCisKIAlkbWEtPmRtYW1yMCA9IHN3YWIzMihkbWFtcjApOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9zcGRfc2RyYW0uYyBiL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCmluZGV4IGI0MDEyYTguLjQ4NjI0ZmUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCisrKyBiL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwNgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqIAorICoKICAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgogICogKEMpIENvcHlyaWdodCAyMDAzIE1vdG9yb2xhIEluYy4KICAqIFhpYW5naHVhIFhpYW8gKFguWGlhb0Btb3Rvcm9sYS5jb20pCkBAIC00MjYsNyArNDI2LDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIGFsbCBvZiBtZW1vcnkgZm9yIEVDQywgdGhlbiBlbmFibGUgZXJyb3JzLgogICovCi0vLyNkZWZpbmUgQ09ORklHX0REUl9FQ0NfSU5JVF9WSUFfRE1BCisvKiAjZGVmaW5lIENPTkZJR19ERFJfRUNDX0lOSVRfVklBX0RNQSAqLwogdm9pZCBkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKQogewogCXVpbnQgKnA7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NkcmFtLmMgYi9jcHUvcHBjNHh4L3NkcmFtLmMKaW5kZXggYzVhYjAxNy4uZTMxZDU5ZCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc2RyYW0uYwpAQCAtMTgsNyArMTgsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTM4LDE3ICszOCwxNyBAQAogCiAjaWZuZGVmIENGR19TRFJBTV9UQUJMRQogc2RyYW1fY29uZl90IG1iMGNmW10gPSB7Ci0JeygxMjggPDwgMjApLCAxMywgMHgwMDBBNDAwMX0sICAgICAgLyogKDAtMTI4TUIpIEFkZHJlc3MgTW9kZSAzLCAxM3gxMCg0KSAqLwotCXsoNjQgPDwgMjApLCAgMTMsIDB4MDAwODQwMDF9LCAgICAgIC8qICgwLTY0TUIpIEFkZHJlc3MgTW9kZSAzLCAxM3g5KDQpICAgKi8KLQl7KDMyIDw8IDIwKSwgIDEyLCAweDAwMDYyMDAxfSwgICAgICAvKiAoMC0zMk1CKSBBZGRyZXNzIE1vZGUgMiwgMTJ4OSg0KSAgICovCi0JeygxNiA8PCAyMCksICAxMiwgMHgwMDA0NjAwMX0sICAgICAgLyogKDAtMTZNQikgQWRkcmVzcyBNb2RlIDQsIDEyeDgoNCkgICAqLwotCXsoNCA8PCAyMCksICAgMTEsIDB4MDAwMDgwMDF9LCAgICAgIC8qICgwLTRNQikgQWRkcmVzcyBNb2RlIDUsIDExeDgoMikgICAgKi8KKwl7KDEyOCA8PCAyMCksIDEzLCAweDAwMEE0MDAxfSwJICAgIC8qICgwLTEyOE1CKSBBZGRyZXNzIE1vZGUgMywgMTN4MTAoNCkgKi8KKwl7KDY0IDw8IDIwKSwgIDEzLCAweDAwMDg0MDAxfSwJICAgIC8qICgwLTY0TUIpIEFkZHJlc3MgTW9kZSAzLCAxM3g5KDQpCSAgKi8KKwl7KDMyIDw8IDIwKSwgIDEyLCAweDAwMDYyMDAxfSwJICAgIC8qICgwLTMyTUIpIEFkZHJlc3MgTW9kZSAyLCAxMng5KDQpCSAgKi8KKwl7KDE2IDw8IDIwKSwgIDEyLCAweDAwMDQ2MDAxfSwJICAgIC8qICgwLTE2TUIpIEFkZHJlc3MgTW9kZSA0LCAxMng4KDQpCSAgKi8KKwl7KDQgPDwgMjApLCAgIDExLCAweDAwMDA4MDAxfSwJICAgIC8qICgwLTRNQikgQWRkcmVzcyBNb2RlIDUsIDExeDgoMikJICAqLwogfTsKICNlbHNlCiBzZHJhbV9jb25mX3QgbWIwY2ZbXSA9IENGR19TRFJBTV9UQUJMRTsKICNlbmRpZgogCi0jZGVmaW5lCU5fTUIwQ0YgKHNpemVvZihtYjBjZikgLyBzaXplb2YobWIwY2ZbMF0pKQorI2RlZmluZSBOX01CMENGIChzaXplb2YobWIwY2YpIC8gc2l6ZW9mKG1iMGNmWzBdKSkKIAogCiAjaWZuZGVmIENPTkZJR180NDAKQEAgLTY1LDc2ICs2NSw3NiBAQAogc3RhdGljIHVsb25nIGNvbXB1dGVfc2R0cjEodWxvbmcgc3BlZWQpCiB7CiAjaWZkZWYgQ0ZHX1NEUkFNX0NBU0wKLSAgICAgICAgdWxvbmcgdG1wOwotICAgICAgICB1bG9uZyBzZHRyMSA9IDA7CisJdWxvbmcgdG1wOworCXVsb25nIHNkdHIxID0gMDsKIAotICAgICAgICAvKiBDQVNMICovCi0gICAgICAgIGlmIChDRkdfU0RSQU1fQ0FTTCA8IDIpCi0gICAgICAgICAgICAgICAgc2R0cjEgfD0gKDEgPDwgU0RSQU0wX1RSX0NBU0wpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWYgKENGR19TRFJBTV9DQVNMID4gNCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNkdHIxIHw9ICgzIDw8IFNEUkFNMF9UUl9DQVNMKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZHRyMSB8PSAoKENGR19TRFJBTV9DQVNMLTEpIDw8IFNEUkFNMF9UUl9DQVNMKTsKKwkvKiBDQVNMICovCisJaWYgKENGR19TRFJBTV9DQVNMIDwgMikKKwkJc2R0cjEgfD0gKDEgPDwgU0RSQU0wX1RSX0NBU0wpOworCWVsc2UKKwkJaWYgKENGR19TRFJBTV9DQVNMID4gNCkKKwkJCXNkdHIxIHw9ICgzIDw8IFNEUkFNMF9UUl9DQVNMKTsKKwkJZWxzZQorCQkJc2R0cjEgfD0gKChDRkdfU0RSQU1fQ0FTTC0xKSA8PCBTRFJBTTBfVFJfQ0FTTCk7CiAKLSAgICAgICAgLyogUFRBICovCi0gICAgICAgIHRtcCA9IG5zMmNsa3MoQ0ZHX1NEUkFNX1BUQSk7Ci0gICAgICAgIGlmICgodG1wID49IDIpICYmICh0bXAgPD0gNCkpCi0gICAgICAgICAgICAgICAgc2R0cjEgfD0gKCh0bXAtMSkgPDwgU0RSQU0wX1RSX1BUQSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZHRyMSB8PSAoKDQtMSkgPDwgU0RSQU0wX1RSX1BUQSk7CisJLyogUFRBICovCisJdG1wID0gbnMyY2xrcyhDRkdfU0RSQU1fUFRBKTsKKwlpZiAoKHRtcCA+PSAyKSAmJiAodG1wIDw9IDQpKQorCQlzZHRyMSB8PSAoKHRtcC0xKSA8PCBTRFJBTTBfVFJfUFRBKTsKKwllbHNlCisJCXNkdHIxIHw9ICgoNC0xKSA8PCBTRFJBTTBfVFJfUFRBKTsKIAotICAgICAgICAvKiBDVFAgKi8KLSAgICAgICAgdG1wID0gbnMyY2xrcyhDRkdfU0RSQU1fQ1RQKTsKLSAgICAgICAgaWYgKCh0bXAgPj0gMikgJiYgKHRtcCA8PSA0KSkKLSAgICAgICAgICAgICAgICBzZHRyMSB8PSAoKHRtcC0xKSA8PCBTRFJBTTBfVFJfQ1RQKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNkdHIxIHw9ICgoNC0xKSA8PCBTRFJBTTBfVFJfQ1RQKTsKKwkvKiBDVFAgKi8KKwl0bXAgPSBuczJjbGtzKENGR19TRFJBTV9DVFApOworCWlmICgodG1wID49IDIpICYmICh0bXAgPD0gNCkpCisJCXNkdHIxIHw9ICgodG1wLTEpIDw8IFNEUkFNMF9UUl9DVFApOworCWVsc2UKKwkJc2R0cjEgfD0gKCg0LTEpIDw8IFNEUkFNMF9UUl9DVFApOwogCi0gICAgICAgIC8qIExERiAqLwotICAgICAgICB0bXAgPSBuczJjbGtzKENGR19TRFJBTV9MREYpOwotICAgICAgICBpZiAoKHRtcCA+PSAyKSAmJiAodG1wIDw9IDQpKQotICAgICAgICAgICAgICAgIHNkdHIxIHw9ICgodG1wLTEpIDw8IFNEUkFNMF9UUl9MREYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2R0cjEgfD0gKCgyLTEpIDw8IFNEUkFNMF9UUl9MREYpOworCS8qIExERiAqLworCXRtcCA9IG5zMmNsa3MoQ0ZHX1NEUkFNX0xERik7CisJaWYgKCh0bXAgPj0gMikgJiYgKHRtcCA8PSA0KSkKKwkJc2R0cjEgfD0gKCh0bXAtMSkgPDwgU0RSQU0wX1RSX0xERik7CisJZWxzZQorCQlzZHRyMSB8PSAoKDItMSkgPDwgU0RSQU0wX1RSX0xERik7CiAKLSAgICAgICAgLyogUkZUQSAqLwotICAgICAgICB0bXAgPSBuczJjbGtzKENGR19TRFJBTV9SRlRBKTsKLSAgICAgICAgaWYgKCh0bXAgPj0gNCkgJiYgKHRtcCA8PSAxMCkpCi0gICAgICAgICAgICAgICAgc2R0cjEgfD0gKCh0bXAtNCkgPDwgU0RSQU0wX1RSX1JGVEEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2R0cjEgfD0gKCgxMC00KSA8PCBTRFJBTTBfVFJfUkZUQSk7CisJLyogUkZUQSAqLworCXRtcCA9IG5zMmNsa3MoQ0ZHX1NEUkFNX1JGVEEpOworCWlmICgodG1wID49IDQpICYmICh0bXAgPD0gMTApKQorCQlzZHRyMSB8PSAoKHRtcC00KSA8PCBTRFJBTTBfVFJfUkZUQSk7CisJZWxzZQorCQlzZHRyMSB8PSAoKDEwLTQpIDw8IFNEUkFNMF9UUl9SRlRBKTsKIAotICAgICAgICAvKiBSQ0QgKi8KLSAgICAgICAgdG1wID0gbnMyY2xrcyhDRkdfU0RSQU1fUkNEKTsKLSAgICAgICAgaWYgKCh0bXAgPj0gMikgJiYgKHRtcCA8PSA0KSkKLSAgICAgICAgICAgICAgICBzZHRyMSB8PSAoKHRtcC0xKSA8PCBTRFJBTTBfVFJfUkNEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNkdHIxIHw9ICgoNC0xKSA8PCBTRFJBTTBfVFJfUkNEKTsKKwkvKiBSQ0QgKi8KKwl0bXAgPSBuczJjbGtzKENGR19TRFJBTV9SQ0QpOworCWlmICgodG1wID49IDIpICYmICh0bXAgPD0gNCkpCisJCXNkdHIxIHw9ICgodG1wLTEpIDw8IFNEUkFNMF9UUl9SQ0QpOworCWVsc2UKKwkJc2R0cjEgfD0gKCg0LTEpIDw8IFNEUkFNMF9UUl9SQ0QpOwogCi0gICAgICAgIHJldHVybiBzZHRyMTsKKwlyZXR1cm4gc2R0cjE7CiAjZWxzZSAvKiBDRkdfU0RSQU1fQ0FTTCAqLwotICAgICAgICAvKgotICAgICAgICAgKiBJZiBubyB2YWx1ZXMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlCi0gICAgICAgICAqIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZXMsIHdoaWNoIHNlZW0gdG8gYmUgb2sgZm9yIG1vc3QKLSAgICAgICAgICogYm9hcmRzLgotICAgICAgICAgKgotICAgICAgICAgKiBSRU1BUks6Ci0gICAgICAgICAqIEZvciBuZXcgYm9hcmQgcG9ydHMgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHRvIGRlZmluZSB0aGUKLSAgICAgICAgICogY29ycmVjdCB2YWx1ZXMgZm9yIHRoZSB1c2VkIFNEUkFNIGNoaXBzIGluIHlvdXIgYm9hcmQKLSAgICAgICAgICogY29uZmlnIGZpbGUgKHNlZSBQUENoYW1lbGVvbkVWQi5oKQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNwZWVkID4gMTAwMDAwMDAwKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiAxMzMgTUh6IFNEUkFNCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDB4MDEwNzQwMTU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBkZWZhdWx0OiAxMDAgTUh6IFNEUkFNCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDB4MDA4NjQwMGQ7Ci0gICAgICAgIH0KKwkvKgorCSAqIElmIG5vIHZhbHVlcyBhcmUgY29uZmlndXJlZCBpbiB0aGUgYm9hcmQgY29uZmlnIGZpbGUKKwkgKiB1c2UgdGhlIGRlZmF1bHQgdmFsdWVzLCB3aGljaCBzZWVtIHRvIGJlIG9rIGZvciBtb3N0CisJICogYm9hcmRzLgorCSAqCisJICogUkVNQVJLOgorCSAqIEZvciBuZXcgYm9hcmQgcG9ydHMgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIHRvIGRlZmluZSB0aGUKKwkgKiBjb3JyZWN0IHZhbHVlcyBmb3IgdGhlIHVzZWQgU0RSQU0gY2hpcHMgaW4geW91ciBib2FyZAorCSAqIGNvbmZpZyBmaWxlIChzZWUgUFBDaGFtZWxlb25FVkIuaCkKKwkgKi8KKwlpZiAoc3BlZWQgPiAxMDAwMDAwMDApIHsKKwkJLyoKKwkJICogMTMzIE1IeiBTRFJBTQorCQkgKi8KKwkJcmV0dXJuIDB4MDEwNzQwMTU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogZGVmYXVsdDogMTAwIE1IeiBTRFJBTQorCQkgKi8KKwkJcmV0dXJuIDB4MDA4NjQwMGQ7CisJfQogI2VuZGlmIC8qIENGR19TRFJBTV9DQVNMICovCiB9CiAKQEAgLTE0MiwyNCArMTQyLDI0IEBACiBzdGF0aWMgdWxvbmcgY29tcHV0ZV9ydHIodWxvbmcgc3BlZWQsIHVsb25nIHJvd3MsIHVsb25nIHJlZnJlc2gpCiB7CiAjaWZkZWYgQ0ZHX1NEUkFNX0NBU0wKLSAgICAgICAgdWxvbmcgdG1wOworCXVsb25nIHRtcDsKIAotICAgICAgICB0bXAgPSAoKHJlZnJlc2gqMTAwMCoxMDAwKSAvICgxIDw8IHJvd3MpKSAqIChzcGVlZCAvIDEwMDApOwotICAgICAgICB0bXAgLz0gMTAwMDAwMDsKKwl0bXAgPSAoKHJlZnJlc2gqMTAwMCoxMDAwKSAvICgxIDw8IHJvd3MpKSAqIChzcGVlZCAvIDEwMDApOworCXRtcCAvPSAxMDAwMDAwOwogCi0gICAgICAgIHJldHVybiAoKHRtcCAmIDB4MDAwMDNGRjgpIDw8IDE2KTsKKwlyZXR1cm4gKCh0bXAgJiAweDAwMDAzRkY4KSA8PCAxNik7CiAjZWxzZSAvKiBDRkdfU0RSQU1fQ0FTTCAqLwotICAgICAgICBpZiAoc3BlZWQgPiAxMDAwMDAwMDApIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIDEzMyBNSHogU0RSQU0KLSAgICAgICAgICAgICAgICAgKi8KKwlpZiAoc3BlZWQgPiAxMDAwMDAwMDApIHsKKwkJLyoKKwkJICogMTMzIE1IeiBTRFJBTQorCQkgKi8KIAkJcmV0dXJuIDB4MDdmMDAwMDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBkZWZhdWx0OiAxMDAgTUh6IFNEUkFNCi0gICAgICAgICAgICAgICAgICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogZGVmYXVsdDogMTAwIE1IeiBTRFJBTQorCQkgKi8KIAkJcmV0dXJuIDB4MDVmMDAwMDA7Ci0gICAgICAgIH0KKwl9CiAjZW5kaWYgLyogQ0ZHX1NEUkFNX0NBU0wgKi8KIH0KIApAQCAtMTcyLDE5ICsxNzIsMTkgQEAKIAl1bG9uZyBzZHRyMTsKIAlpbnQgaTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBEZXRlcm1pbmUgU0RSQU0gc3BlZWQKLSAgICAgICAgICovCi0gICAgICAgIHNwZWVkID0gZ2V0X2J1c19mcmVxKDApOyAvKiBwYXJhbWV0ZXIgbm90IHVzZWQgb24gcHBjNHh4ICovCisJLyoKKwkgKiBEZXRlcm1pbmUgU0RSQU0gc3BlZWQKKwkgKi8KKwlzcGVlZCA9IGdldF9idXNfZnJlcSgwKTsgLyogcGFyYW1ldGVyIG5vdCB1c2VkIG9uIHBwYzR4eCAqLwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIHNkdHIxIChyZWdpc3RlciBTRFJBTTBfVFIpIG11c3QgdGFrZSBpbnRvIGFjY291bnQgdGltaW5ncyBsaXN0ZWQKLSAgICAgICAgICogaW4gU0RSQU0gY2hpcCBkYXRhc2hlZXQuIHJ0ciAocmVnaXN0ZXIgU0RSQU0wX1JUUikgbXVzdCB0YWtlIGludG8KLSAgICAgICAgICogYWNjb3VudCBhY3R1YWwgU0RSQU0gc2l6ZS4gU28gd2UgY2FuIHNldCB1cCBzZHRyMSBhY2NvcmRpbmcgdG8gd2hhdAotICAgICAgICAgKiBpcyBzcGVjaWZpZWQgaW4gYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlIHdoaWxlIHJ0ciBkZXBlbmRkcyBvbiBTRFJBTQotICAgICAgICAgKiBzaXplIHdlIGFyZSBhc3N1bWluZyBiZWZvcmUgZGV0ZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgc2R0cjEgPSBjb21wdXRlX3NkdHIxKHNwZWVkKTsKKwkvKgorCSAqIHNkdHIxIChyZWdpc3RlciBTRFJBTTBfVFIpIG11c3QgdGFrZSBpbnRvIGFjY291bnQgdGltaW5ncyBsaXN0ZWQKKwkgKiBpbiBTRFJBTSBjaGlwIGRhdGFzaGVldC4gcnRyIChyZWdpc3RlciBTRFJBTTBfUlRSKSBtdXN0IHRha2UgaW50bworCSAqIGFjY291bnQgYWN0dWFsIFNEUkFNIHNpemUuIFNvIHdlIGNhbiBzZXQgdXAgc2R0cjEgYWNjb3JkaW5nIHRvIHdoYXQKKwkgKiBpcyBzcGVjaWZpZWQgaW4gYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlIHdoaWxlIHJ0ciBkZXBlbmRkcyBvbiBTRFJBTQorCSAqIHNpemUgd2UgYXJlIGFzc3VtaW5nIGJlZm9yZSBkZXRlY3Rpb24uCisJICovCisJc2R0cjEgPSBjb21wdXRlX3NkdHIxKHNwZWVkKTsKIAogCWZvciAoaT0wOyBpPE5fTUIwQ0Y7IGkrKykgewogCQkvKgpAQCAtMzQzLDggKzM0Myw4IEBACiAgKiBBdXRvZGV0ZWN0IG9uYm9hcmQgRERSIFNEUkFNIG9uIDQ0MCBwbGF0Zm9ybXMKICAqCiAgKiBOT1RFOiBTb21lIG9mIHRoZSBoYXJkY29kZWQgdmFsdWVzIGFyZSBoYXJkd2FyZSBkZXBlbmRhbnQsCi0gKiAgICAgICBzbyB0aGlzIHNob3VsZCBiZSBleHRlbmRlZCBmb3Igb3RoZXIgZnV0dXJlIGJvYXJkcwotICogICAgICAgdXNpbmcgdGhpcyByb3V0aW5lIQorICoJIHNvIHRoaXMgc2hvdWxkIGJlIGV4dGVuZGVkIGZvciBvdGhlciBmdXR1cmUgYm9hcmRzCisgKgkgdXNpbmcgdGhpcyByb3V0aW5lIQogICovCiBsb25nIGludCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKIHsKQEAgLTM2MCwxMSArMzYwLDExIEBACiAJCS8qCiAJCSAqIFNldHVwIHNvbWUgZGVmYXVsdAogCQkgKi8KLQkJbXRzZHJhbShtZW1fdWFiYmEsIDB4MDAwMDAwMDApOwkvKiB1YmJhPTAgKGRlZmF1bHQpICAgICAgICAgICAgICovCi0JCW10c2RyYW0obWVtX3NsaW8sIDB4MDAwMDAwMDApOwkvKiByZHJlPTAgd3JyZT0wIHJhcnc9MCAgICAgICAgICovCisJCW10c2RyYW0obWVtX3VhYmJhLCAweDAwMDAwMDAwKTsgLyogdWJiYT0wIChkZWZhdWx0KQkJKi8KKwkJbXRzZHJhbShtZW1fc2xpbywgMHgwMDAwMDAwMCk7CS8qIHJkcmU9MCB3cnJlPTAgcmFydz0wCQkqLwogCQltdHNkcmFtKG1lbV9kZXZvcHQsIDB4MDAwMDAwMDApOyAvKiBkbGw9MCBkcz0wIChub3JtYWwpCQkqLwogCQltdHNkcmFtKG1lbV93ZGRjdHIsIDB4MDAwMDAwMDApOyAvKiB3cmNwPTAgZGNkPTAJCSovCi0JCW10c2RyYW0obWVtX2Nsa3RyLCAweDQwMDAwMDAwKTsJLyogY2xrcD0xICg5MCBkZWcgd3IpIGRjZHQ9MCAgICAqLworCQltdHNkcmFtKG1lbV9jbGt0ciwgMHg0MDAwMDAwMCk7IC8qIGNsa3A9MSAoOTAgZGVnIHdyKSBkY2R0PTAJKi8KIAogCQkvKgogCQkgKiBGb2xsb3dpbmcgZm9yIENBUyBMYXRlbmN5ID0gMi41IEAgMTMzIE1IeiBQTEIKQEAgLTM3OSw3ICszNzksNyBAQAogCQkvKgogCQkgKiBFbmFibGUgdGhlIGNvbnRyb2xsZXIsIHRoZW4gd2FpdCBmb3IgRENFTiB0byBjb21wbGV0ZQogCQkgKi8KLQkJbXRzZHJhbShtZW1fY2ZnMCwgMHg4NjAwMDAwMCk7CS8qIERDRU49MSwgUE1VRD0xLCA2NC1iaXQgICAgICAgKi8KKwkJbXRzZHJhbShtZW1fY2ZnMCwgMHg4NjAwMDAwMCk7CS8qIERDRU49MSwgUE1VRD0xLCA2NC1iaXQJKi8KIAkJdWRlbGF5KDEwMDAwKTsKIAogCQlpZiAoZ2V0X3JhbV9zaXplKDAsIG1iMGNmW2ldLnNpemUpID09IG1iMGNmW2ldLnNpemUpIHsKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubXBjODM0OWVtZHMuZGRyZWNjIGIvZG9jL1JFQURNRS5tcGM4MzQ5ZW1kcy5kZHJlY2MKaW5kZXggNDAxYzBiNi4uZWIyNDljMyAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5tcGM4MzQ5ZW1kcy5kZHJlY2MKKysrIGIvZG9jL1JFQURNRS5tcGM4MzQ5ZW1kcy5kZHJlY2MKQEAgLTE1Miw1ICsxNTIsMyBAQAogcmVhY2hlZCBTaW5nbGUtQml0IEVycm9yIFRocmVzaG9sZC4gTXVsdGlwbGUgTWVtb3J5IEVycm9ycyBiaXQgaXMgYWxzbyAnb24nLCB0aGF0CiBpcyBDb3VudGVyIHJlYWNoZWQgVGhyZXNob2xkIG1vcmUgdGhhbiBvbmUgdGltZSAoaXQgd3JhcHMgYmFjayBhZnRlciByZWFjaGluZwogVGhyZXNob2xkKS4KLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODM0OUVNRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4MzQ5RU1EUy5oCmluZGV4IDM5ZTNkOTUuLjFhNDc5ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4MzQ5RU1EUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4MzQ5RU1EUy5oCkBAIC03NSwxMyArNzUsMTMgQEAKIAogLyoKICAqIDMyLWJpdCBkYXRhIHBhdGggbW9kZS4KLSAqIAorICoKICAqIFBsZWFzZSBub3RlIHRoYXQgdXNpbmcgdGhpcyBtb2RlIGZvciBkZXZpY2VzIHdpdGggdGhlIHJlYWwgZGVuc2l0eSBvZiA2NC1iaXQKICAqIGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgbWVtb3J5IGR1ZSB0byB0aGUgZWZmZWN0IG9mCiAgKiB3cmFwcGluZyBhcm91bmQgd2hpbGUgdHJhbnNsYXRpbmcgYWRkcmVzcyB0byByb3cvY29sdW1ucywgZm9yIGV4YW1wbGUgaW4gdGhlCiAgKiAyNTZNQiBtb2R1bGUgdGhlIHVwcGVyIDEyOE1CIGdldCBhbGlhc2VkIHdpdGggY29udGVudHMgb2YgdGhlIGxvd2VyCiAgKiAxMjhNQik7IG5vcm1hbGx5IHRoaXMgZGVmaW5lIHNob3VsZCBiZSB1c2VkIGZvciBkZXZpY2VzIHdpdGggcmVhbCAzMi1iaXQKLSAqIGRhdGEgcGF0aC4gCisgKiBkYXRhIHBhdGguCiAgKi8KICN1bmRlZiBDT05GSUdfRERSXzMyQklUCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3JjLmggYi9pbmNsdWRlL2NyYy5oCmluZGV4IDYzMzk5YmYuLjEwNTYwYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3JjLmgKKysrIGIvaW5jbHVkZS9jcmMuaApAQCAtMSw1NiArMSw1OCBAQAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vICAgICAgY3JjLmgKLS8vCi0vLyAgICAgIEludGVyZmFjZSBmb3IgdGhlIENSQyBhbGdvcml0aG1zLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIyMjI0VDT1NHUExDT1BZUklHSFRCRUdJTiMjIyMKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4KLS8vIENvcHlyaWdodCAoQykgMjAwMiBBbmRyZXcgTHVubgotLy8KLS8vIGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgotLy8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLS8vIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS8vCi0vLyBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQotLy8gV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLy8gZm9yIG1vcmUgZGV0YWlscy4KLS8vCi0vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotLy8gd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0vLyA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLS8vCi0vLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcwotLy8gb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0Ci0vLyB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90Ci0vLyBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotLy8gTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCi0vLyBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgotLy8gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KLS8vIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8jIyMjI0RFU0NSSVBUSU9OQkVHSU4jIyMjCi0vLwotLy8gQXV0aG9yKHMpOiAgICBBbmRyZXcgTHVubgotLy8gQ29udHJpYnV0b3JzOiBBbmRyZXcgTHVubgotLy8gRGF0ZTogICAgICAgICAyMDAyLTA4LTA2Ci0vLyBQdXJwb3NlOiAgICAgIAotLy8gRGVzY3JpcHRpb246ICAKLS8vICAgICAgICAgICAgICAKLS8vIFRoaXMgY29kZSBpcyBwYXJ0IG9mIGVDb3MgKHRtKS4KLS8vCi0vLyMjIyNERVNDUklQVElPTkVORCMjIyMKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqICAgICAgY3JjLmgKKyAqCisgKiAgICAgIEludGVyZmFjZSBmb3IgdGhlIENSQyBhbGdvcml0aG1zLgorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIyMjI0VDT1NHUExDT1BZUklHSFRCRUdJTiMjIyMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBBbmRyZXcgTHVubgorICoKKyAqIGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcworICogb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0CisgKiB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90CisgKiBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgorICogdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KKyAqIGF0IGh0dHA6ICpzb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIworICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICojIyMjI0RFU0NSSVBUSU9OQkVHSU4jIyMjCisgKgorICogQXV0aG9yKHMpOiAgICBBbmRyZXcgTHVubgorICogQ29udHJpYnV0b3JzOiBBbmRyZXcgTHVubgorICogRGF0ZTogICAgICAgICAyMDAyLTA4LTA2CisgKiBQdXJwb3NlOgorICogRGVzY3JpcHRpb246CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgZUNvcyAodG0pLgorICoKKyAqIyMjI0RFU0NSSVBUSU9ORU5EIyMjIworICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLwogCiAjaWZuZGVmIF9TRVJWSUNFU19DUkNfQ1JDX0hfCiAjZGVmaW5lIF9TRVJWSUNFU19DUkNfQ1JDX0hfCkBAIC02NSwzNyArNjcsMzQgQEAKICMgZW5kaWYKICNlbmRpZgogCi0vLyBDb21wdXRlIGEgQ1JDLCB1c2luZyB0aGUgUE9TSVggMTAwMyBkZWZpbml0aW9uCi1leHRlcm4gdWludDMyX3QgCisvKiBDb21wdXRlIGEgQ1JDLCB1c2luZyB0aGUgUE9TSVggMTAwMyBkZWZpbml0aW9uICovCitleHRlcm4gdWludDMyX3QKIGN5Z19wb3NpeF9jcmMzMih1bnNpZ25lZCBjaGFyICpzLCBpbnQgbGVuKTsKIAotLy8gR2FyeSBTLiBCcm93bidzIDMyIGJpdCBDUkMKKy8qIEdhcnkgUy4gQnJvd24ncyAzMiBiaXQgQ1JDICovCiAKLWV4dGVybiB1aW50MzJfdCAKK2V4dGVybiB1aW50MzJfdAogY3lnX2NyYzMyKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwogCi0vLyBHYXJ5IFMuIEJyb3duJ3MgMzIgYml0IENSQywgYnV0IGFjY3VtdWxhdGUgdGhlIHJlc3VsdCBmcm9tIGEKLS8vIHByZXZpb3VzIENSQyBjYWxjdWxhdGlvbgorLyogR2FyeSBTLiBCcm93bidzIDMyIGJpdCBDUkMsIGJ1dCBhY2N1bXVsYXRlIHRoZSByZXN1bHQgZnJvbSBhICovCisvKiBwcmV2aW91cyBDUkMgY2FsY3VsYXRpb24gKi8KIAotZXh0ZXJuIHVpbnQzMl90IAorZXh0ZXJuIHVpbnQzMl90CiBjeWdfY3JjMzJfYWNjdW11bGF0ZSh1aW50MzJfdCBjcmMsIHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwogCi0vLyBFdGhlcm5ldCBGQ1MgQWxnb3JpdGhtCisvKiBFdGhlcm5ldCBGQ1MgQWxnb3JpdGhtICovCiAKLWV4dGVybiB1aW50MzJfdCAKK2V4dGVybiB1aW50MzJfdAogY3lnX2V0aGVyX2NyYzMyKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwogCi0vLyBFdGhlcm5ldCBGQ1MgYWxnb3JpdGhtLCBidXQgYWNjdW11bGF0ZSB0aGUgcmVzdWx0IGZyb20gYSBwcmV2aW91cwotLy8gQ1JDIGNhbGN1bGF0aW9uLgorLyogRXRoZXJuZXQgRkNTIGFsZ29yaXRobSwgYnV0IGFjY3VtdWxhdGUgdGhlIHJlc3VsdCBmcm9tIGEgcHJldmlvdXMgKi8KKy8qIENSQyBjYWxjdWxhdGlvbi4gKi8KIAotZXh0ZXJuIHVpbnQzMl90IAorZXh0ZXJuIHVpbnQzMl90CiBjeWdfZXRoZXJfY3JjMzJfYWNjdW11bGF0ZSh1aW50MzJfdCBjcmMsIHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwogCi0vLyAxNiBiaXQgQ1JDIHdpdGggcG9seW5vbWlhbCB4XjE2K3heMTIreF41KzEKKy8qIDE2IGJpdCBDUkMgd2l0aCBwb2x5bm9taWFsIHheMTYreF4xMit4XjUrMSAqLwogCiBleHRlcm4gdWludDE2X3QgY3lnX2NyYzE2KHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwogCi0jZW5kaWYgLy8gX1NFUlZJQ0VTX0NSQ19DUkNfSF8KLQotCi0KKyNlbmRpZiAvKiBfU0VSVklDRVNfQ1JDX0NSQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS94eXpNb2RlbS5oIGIvaW5jbHVkZS94eXpNb2RlbS5oCmluZGV4IGE2MmExNzQuLjRlYzEwYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveHl6TW9kZW0uaAorKysgYi9pbmNsdWRlL3h5ek1vZGVtLmgKQEAgLTEsNjUgKzEsNjcgQEAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyAgICAgIHh5ek1vZGVtLmgKLS8vCi0vLyAgICAgIFJlZEJvb3Qgc3RyZWFtIGhhbmRsZXIgZm9yIHh5ek1vZGVtIHByb3RvY29sCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8jIyMjRUNPU0dQTENPUFlSSUdIVEJFR0lOIyMjIwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLgotLy8gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KLS8vIENvcHlyaWdodCAoQykgMjAwMiBHYXJ5IFRob21hcwotLy8KLS8vIGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgotLy8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLS8vIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLS8vCi0vLyBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQotLy8gV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLS8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotLy8gZm9yIG1vcmUgZGV0YWlscy4KLS8vCi0vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotLy8gd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0vLyA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLS8vCi0vLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcwotLy8gb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0Ci0vLyB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90Ci0vLyBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotLy8gTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCi0vLyBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgotLy8gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotLy8KLS8vIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KLS8vIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8jIyMjI0RFU0NSSVBUSU9OQkVHSU4jIyMjCi0vLwotLy8gQXV0aG9yKHMpOiAgICBndGhvbWFzCi0vLyBDb250cmlidXRvcnM6IGd0aG9tYXMKLS8vIERhdGU6ICAgICAgICAgMjAwMC0wNy0xNAotLy8gUHVycG9zZTogICAgICAKLS8vIERlc2NyaXB0aW9uOiAgCi0vLyAgICAgICAgICAgICAgCi0vLyBUaGlzIGNvZGUgaXMgcGFydCBvZiBSZWRCb290ICh0bSkuCi0vLwotLy8jIyMjREVTQ1JJUFRJT05FTkQjIyMjCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgICAgIHh5ek1vZGVtLmgKKyAqCisgKiAgICAgIFJlZEJvb3Qgc3RyZWFtIGhhbmRsZXIgZm9yIHh5ek1vZGVtIHByb3RvY29sCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICojIyMjRUNPU0dQTENPUFlSSUdIVEJFR0lOIyMjIworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLgorICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBHYXJ5IFRob21hcworICoKKyAqIGVDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcworICogb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0CisgKiB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90CisgKiBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgorICogdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIEFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4KKyAqIGF0IGh0dHA6ICpzb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIworICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICojIyMjI0RFU0NSSVBUSU9OQkVHSU4jIyMjCisgKgorICogQXV0aG9yKHMpOiAgICBndGhvbWFzCisgKiBDb250cmlidXRvcnM6IGd0aG9tYXMKKyAqIERhdGU6ICAgICAgICAgMjAwMC0wNy0xNAorICogUHVycG9zZToKKyAqIERlc2NyaXB0aW9uOgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0IG9mIFJlZEJvb3QgKHRtKS4KKyAqCisgKiMjIyNERVNDUklQVElPTkVORCMjIyMKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KIAogI2lmbmRlZiBfWFlaTU9ERU1fSF8KICNkZWZpbmUgX1hZWk1PREVNX0hfCiAKICNkZWZpbmUgeHl6TW9kZW1feG1vZGVtIDEKICNkZWZpbmUgeHl6TW9kZW1feW1vZGVtIDIKLS8vIERvbid0IGRlZmluZSB0aGlzIHVudGlsIHRoZSBwcm90b2NvbCBzdXBwb3J0IGlzIGluIHBsYWNlCi0vLyNkZWZpbmUgeHl6TW9kZW1fem1vZGVtIDMKKy8qIERvbid0IGRlZmluZSB0aGlzIHVudGlsIHRoZSBwcm90b2NvbCBzdXBwb3J0IGlzIGluIHBsYWNlICovCisvKiNkZWZpbmUgeHl6TW9kZW1fem1vZGVtIDMgKi8KIAogI2RlZmluZSB4eXpNb2RlbV9hY2Nlc3MgICAtMQogI2RlZmluZSB4eXpNb2RlbV9ub1ptb2RlbSAtMgpAQCAtMTAzLDEwICsxMDUsMTAgQEAKICNlbmRpZgogCiAKLWludCAgIHh5ek1vZGVtX3N0cmVhbV9vcGVuKGNvbm5lY3Rpb25faW5mb190ICppbmZvLCBpbnQgKmVycik7ICAgIAotdm9pZCAgeHl6TW9kZW1fc3RyZWFtX2Nsb3NlKGludCAqZXJyKTsgICAgCi12b2lkICB4eXpNb2RlbV9zdHJlYW1fdGVybWluYXRlKGJvb2wgbWV0aG9kLCBpbnQgKCpnZXRjKSh2b2lkKSk7ICAgIAotaW50ICAgeHl6TW9kZW1fc3RyZWFtX3JlYWQoY2hhciAqYnVmLCBpbnQgc2l6ZSwgaW50ICplcnIpOyAgICAKK2ludCAgIHh5ek1vZGVtX3N0cmVhbV9vcGVuKGNvbm5lY3Rpb25faW5mb190ICppbmZvLCBpbnQgKmVycik7Cit2b2lkICB4eXpNb2RlbV9zdHJlYW1fY2xvc2UoaW50ICplcnIpOwordm9pZCAgeHl6TW9kZW1fc3RyZWFtX3Rlcm1pbmF0ZShib29sIG1ldGhvZCwgaW50ICgqZ2V0Yykodm9pZCkpOworaW50ICAgeHl6TW9kZW1fc3RyZWFtX3JlYWQoY2hhciAqYnVmLCBpbnQgc2l6ZSwgaW50ICplcnIpOwogY2hhciAqeHl6TW9kZW1fZXJyb3IoaW50IGVycik7CiAKLSNlbmRpZiAvLyBfWFlaTU9ERU1fSF8KKyNlbmRpZiAvKiBfWFlaTU9ERU1fSF8gKi8KZGlmZiAtLWdpdCBhL3J0Yy9kczEzNzQuYyBiL3J0Yy9kczEzNzQuYwppbmRleCAzMWYwNmU1Li41MGE5OTZjIDEwMDY0NAotLS0gYS9ydGMvZHMxMzc0LmMKKysrIGIvcnRjL2RzMTM3NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCS8qCiAJICogU2luY2UgdGhlIHJlYWRzIGFyZSBiZWluZyBwZXJmb3JtZWQgb25lIGJ5dGUgYXQgYSB0aW1lLAotCSAqIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgYSBjYXJyeSB3aWxsIG9jY3VyIGR1cmluZyB0aGUgcmVhZC4gCisJICogdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBhIGNhcnJ5IHdpbGwgb2NjdXIgZHVyaW5nIHRoZSByZWFkLgogCSAqIFRvIGRldGVjdCB0aGlzLCAyIHJlYWRzIGFyZSBwZXJmb3JtZWQgYW5kIGNvbXBhcmVkLgogCSAqLwogCWxpbWl0ID0gMTA7Cg==