ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggNjRmYTUxNy4uZTJkMGM5OCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTQgKzEsMTQgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NjAzMzEgb2YgV2luZSB0aGUgTVMgV2luZG93cyBlbXVsYXRvci4gIFRoaXMgaXMgc3RpbGwgYQorVGhpcyBpcyByZWxlYXNlIDk2MDQwNSBvZiBXaW5lIHRoZSBNUyBXaW5kb3dzIGVtdWxhdG9yLiAgVGhpcyBpcyBzdGlsbCBhCiBkZXZlbG9wZXIncyBvbmx5IHJlbGVhc2UuICBUaGVyZSBhcmUgbWFueSBidWdzIGFuZCBtYW55IHVuaW1wbGVtZW50ZWQgQVBJCiBmZWF0dXJlcy4gIE1vc3QgYXBwbGljYXRpb25zIHN0aWxsIGRvIG5vdCB3b3JrLgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk2MDMzMTogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBNYW55IGltcHJvdmVtZW50cyB0byBrZXlib2FyZCBoYW5kbGluZy4KLQktIE5ldyByZWdpc3RyeSBjb2RlIHdpdGggV2luMzIgc3VwcG9ydC4KLQktIFN1cHBvcnQgZm9yIEl0YWxpYW4gbGFuZ3VhZ2UuCitXSEFUJ1MgTkVXIHdpdGggV2luZS05NjA0MDU6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQorCS0gRmFzdGVyIHRleHQgZGlzcGxheS4KKwktIFN1cHBvcnQgZm9yIFNDTyBPcGVuU2VydmVyIDUuCisJLSBDbGVhbmVyIFdpbjMyIG1vZHVsZSBoYW5kbGluZy4KIAktIExvdHMgb2YgYnVnIGZpeGVzLgogCiBTZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCkBAIC0xNywxMCArMTcsMTAgQEAKIHRoZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZnRwIHNpdGVzLiAgVGhlIHNvdXJjZXMgd2lsbCBiZSBhdmFpbGFibGUKIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAKLSAgICBzdW5zaXRlLnVuYy5lZHU6L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTYwMzMxLnRhci5negotICAgIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDMzMS50YXIuZ3oKLSAgICBmdHAuaW5mb21hZ2ljLmNvbTovcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDMzMS50YXIuZ3oKLSAgICBhcmlzLmNvbTovcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjAzMzEudGFyLmd6CisgICAgc3Vuc2l0ZS51bmMuZWR1Oi9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDQwNS50YXIuZ3oKKyAgICB0c3gtMTEubWl0LmVkdTovcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA0MDUudGFyLmd6CisgICAgZnRwLmluZm9tYWdpYy5jb206L3B1Yi9taXJyb3JzL2xpbnV4L3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA0MDUudGFyLmd6CisgICAgYXJpcy5jb206L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNDA1LnRhci5negogCiBJdCBzaG91bGQgYWxzbyBiZSBhdmFpbGFibGUgZnJvbSBhbnkgc2l0ZSB0aGF0IG1pcnJvcnMgdHN4LTExIG9yIHN1bnNpdGUuCiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ODY4NTQzOS4uZjM3YzZiZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSw0ICsxLDc2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGcmkgQXByICA1IDE1OjIyOjU1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgorCisJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zdGF0aWMuY10KKwlDaGFuZ2VzIHRvIHVzZSBXTkQgKiB3aGVyZXZlciBwb3NzaWJsZS4KKworCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KKwlBZGRlZCAnaW5mbyBtb2R1bGUnIGFuZCAnd2FsayBtb2R1bGUnIGNvbW1hbmRzLgorCisJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQorCUFkZGVkIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGlvbiB0byBjYWxsIGZyb20gV2luZSBpbnRvIDMyLWJpdCBjb2RlLgorCUNoYW5nZWQgYWxsICdjYWxsMzInIHJlZmVyZW5jZXMgaW4gJ2NhbGxmcm9tMTYnIHRvIGF2b2lkIGNvbmZ1c2lvbgorCXdpdGggV2luMzIgcm91dGluZXMuCisKKwkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCisJQWRkZWQgcHJvdG90eXBlcyBmb3IgMzItYml0IGNhbGxiYWNrcy4KKworCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9yZWxheTMyLmNdIFt0b29scy9idWlsZC5jXQorCVVuaWZpZWQgMTYtIGFuZCAzMi1iaXQgbW9kdWxlcy4gVGhlIGZha2UgbW9kdWxlIGZvciAzMi1iaXQgRExMcyBpcworCW5vdyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2dyYW0uCisKKwkqIFtpbmNsdWRlL21vZHVsZS5oXQorCUFkZGVkIGV4dHJhIGluZm8gdG8gTkVfTU9EVUxFIGZvciBXaW4zMiBtb2R1bGVzIHRvIHBvaW50IHRvIHRoZSBQRQorCW1vZHVsZSBkYXRhLgorCisJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXSBbbG9hZGVyL3BlX2ltYWdlLmNdIFt3aW4zMi9yZXNvdXJjZS5jXQorCVJlbW92ZWQgdGhlIHdpbmVfZmlsZXMgbGlzdC4gVGhlIFBFIGRhdGEgZm9yIGEgbW9kdWxlIGNhbiBub3cgYmUKKwlhY2Nlc3NlZCB3aXRoIHRoZSBORV9XSU4zMl9NT0RVTEUgbWFjcm8uCisKKwkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2luc3RyLmNdCisJRG9uJ3Qgc3RhcnQgdGhlIEJJT1MgdGltZXIgYXQgc3RhcnR1cCwgYnV0IG9ubHkgYWZ0ZXIgYW4gYWNjZXNzIHRvCisJdGhlIDB4NDAgc2VnbWVudC4KKworCSogW21lbW9yeS9sb2NhbC5jXQorCUNoYW5nZWQgTE9DQUxfTG9jaygpIHRvIHJldHVybiBhIDMyLWJpdCBwb2ludGVyLgorCisJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL2RsbHMuaF0KKwlTb21lIGJ1aWx0LWluIERMTHMgKGxpa2UgS0VSTkVMKSBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIGZyb20KKyAJdGhlIGNvbW1hbmQtbGluZS4KKwkKK1RodSBBcHIgIDQgMTk6NTQ6MzkgMTk5NiAgS2VpdGggUmV5bm9sZHMgPGtlaXRockBzY28uQ09NPgorCisJKiBbKi8qXQorCUEgbG90IG9mIHNtYWxsIGNoYW5nZXMgdG8gc3VwcG9ydCBTQ08gT3BlblNlcnZlciA1LgorCitUaHUgQXByICA0IDE1OjM4OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgorCisJKiBbY29udHJvbHMvZWRpdC5jXQorCUZpeGVkIEdldEtleVN0YXRlKCkgY2FsbCB0byB1c2UgMHg4MDAwIGNvbnZlbnRpb24uCisKKwkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KKwlBZGRlZCB1bmRvY3VtZW50ZWQgbWVzc2FnZXMgRU1fU0NST0xMIGFuZCBFTV9HRVRUSFVNQi4KKworVGh1IEFwciAgNCAwOTo1Mjo1MiAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KKworCSogW2lmMTYzMi9leGNlcHQuU10KKwlNb2RpZmllZCBjb2RlIHRvIGFzc2VtYmxlIG9uIHVuaXh3YXJlLgorCitXZWQgQXByICAzIDA5OjM4OjI2IDE5OTYgIEp1ZXJnZW4gTWFycXVhcmR0IDxtYXJxdUBsdW5hci5hZHZhbnRlc3QuZGU+CisKKwkqIFtvYmplY3RzL2ZvbnQuY10KKwlJbXBsZW1lbnRhdGlvbiBvZiBhIHNlY29uZCBmb250IGNhY2hlIHdoaWNoIHdpbGwgYmUgdXBkYXRlZAorCWR5bmFtaWNhbGx5LgorCitNb24gQXByICAxIDE2OjQ3OjQwIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgorCisJKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGEucmNdCisJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10gW3Jlc291cmNlcy9zeXNyZXNfRW8ucmNdCisJICBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10gW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCisJICBbcmVzb3VyY2VzL3N5c3Jlc19Oby5yY10gW3Jlc291cmNlcy9UT0RPXQorCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN1biBNYXIgMzEgMTM6NTQ6NDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CiAKIAkqIFt0b29scy9idWlsZC5jXQpkaWZmIC0tZ2l0IGEvTWFrZS5ydWxlcy5pbiBiL01ha2UucnVsZXMuaW4KaW5kZXggYjA3YjEzMS4uYmI1NmQ1MSAxMDA2NDQKLS0tIGEvTWFrZS5ydWxlcy5pbgorKysgYi9NYWtlLnJ1bGVzLmluCkBAIC0zLDcgKzMsOCBAQAogCiAjIEZpcnN0IHNvbWUgdXNlZnVsIGRlZmluaXRpb25zCiAKLUNDIAkgID0gQENDQAorU0hFTEwgICAgID0gL2Jpbi9zaAorQ0MgICAgICAgID0gQENDQAogQ1BQICAgICAgID0gQENQUEAKIENGTEFHUyAJICA9IEBDRkxBR1NACiBERUZTICAgICAgPSBAREVGU0AKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggNDJmOTM1ZS4uMTJiZDFiNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTExLDcgKzExLDggQEAKIAogIyBGaXJzdCBzb21lIHVzZWZ1bCBkZWZpbml0aW9ucwogCi1DQyAJICA9IEBDQ0AKK1NIRUxMICAgICA9IC9iaW4vc2gKK0NDICAgICAgICA9IEBDQ0AKIENQUCAgICAgICA9IEBDUFBACiBDRkxBR1MgCSAgPSBAQ0ZMQUdTQAogREVGUyAgICAgID0gQERFRlNAIC1EV0lORV9JTklfR0xPQkFMPVwiJChXSU5FX0lOSV9HTE9CQUwpXCIKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2J1dHRvbi5jIGIvY29udHJvbHMvYnV0dG9uLmMKaW5kZXggODBiZDBmNC4uNjg1MTVkYiAxMDA2NDQKLS0tIGEvY29udHJvbHMvYnV0dG9uLmMKKysrIGIvY29udHJvbHMvYnV0dG9uLmMKQEAgLTEyLDE0ICsxMiwxNCBAQAogI2luY2x1ZGUgImJ1dHRvbi5oIgogI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKIAotZXh0ZXJuIHZvaWQgREVGV05EX1NldFRleHQoIEhXTkQgaHduZCwgTFBTVFIgdGV4dCApOyAgLyogd2luZG93cy9kZWZ3bmQuYyAqLworZXh0ZXJuIHZvaWQgREVGV05EX1NldFRleHQoIFdORCAqd25kUHRyLCBMUFNUUiB0ZXh0ICk7ICAvKiB3aW5kb3dzL2RlZnduZC5jICovCiAKLXN0YXRpYyB2b2lkIFBCX1BhaW50KCBIV05EIGhXbmQsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7Ci1zdGF0aWMgdm9pZCBDQl9QYWludCggSFdORCBoV25kLCBIREMgaERDLCBXT1JEIGFjdGlvbiApOwotc3RhdGljIHZvaWQgR0JfUGFpbnQoIEhXTkQgaFduZCwgSERDIGhEQywgV09SRCBhY3Rpb24gKTsKLXN0YXRpYyB2b2lkIFVCX1BhaW50KCBIV05EIGhXbmQsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7Ci1zdGF0aWMgdm9pZCBPQl9QYWludCggSFdORCBoV25kLCBIREMgaERDLCBXT1JEIGFjdGlvbiApOwotc3RhdGljIHZvaWQgQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uKEhXTkQgaFduZCk7CitzdGF0aWMgdm9pZCBQQl9QYWludCggV05EICp3bmRQdHIsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7CitzdGF0aWMgdm9pZCBDQl9QYWludCggV05EICp3bmRQdHIsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7CitzdGF0aWMgdm9pZCBHQl9QYWludCggV05EICp3bmRQdHIsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7CitzdGF0aWMgdm9pZCBVQl9QYWludCggV05EICp3bmRQdHIsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7CitzdGF0aWMgdm9pZCBPQl9QYWludCggV05EICp3bmRQdHIsIEhEQyBoREMsIFdPUkQgYWN0aW9uICk7CitzdGF0aWMgdm9pZCBCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24oIFdORCAqd25kUHRyICk7CiAKIAogI2RlZmluZSBNQVhfQlROX1RZUEUgIDEyCkBAIC00MCw3ICs0MCw3IEBACiAgICAgQlVUVE9OX1VOQ0hFQ0tFRCAgICAvKiBCU19PV05FUkRSQVcgKi8KIH07CiAKLXR5cGVkZWYgdm9pZCAoKnBmUGFpbnQpKEhXTkQsSERDLFdPUkQpOwordHlwZWRlZiB2b2lkICgqcGZQYWludCkoIFdORCAqd25kUHRyLCBIREMgaGRjLCBXT1JEIGFjdGlvbiApOwogCiBzdGF0aWMgcGZQYWludCBidG5QYWludEZ1bmNbTUFYX0JUTl9UWVBFXSA9CiB7CkBAIC01OCwxMSArNTgsMjEgQEAKICAgICBPQl9QYWludCAgICAgLyogQlNfT1dORVJEUkFXICovCiB9OwogCi0jZGVmaW5lIFBBSU5UX0JVVFRPTihod25kLHN0eWxlLGFjdGlvbikgXAorI2RlZmluZSBQQUlOVF9CVVRUT04od25kUHRyLHN0eWxlLGFjdGlvbikgXAogICAgICBpZiAoYnRuUGFpbnRGdW5jW3N0eWxlXSkgeyBcCi0gICAgICAgICBIREMgaGRjID0gR2V0REMoIGh3bmQgKTsgXAotICAgICAgICAgKGJ0blBhaW50RnVuY1tzdHlsZV0pKGh3bmQsaGRjLGFjdGlvbik7IFwKLSAgICAgICAgIFJlbGVhc2VEQyggaHduZCwgaGRjICk7IH0KKyAgICAgICAgIEhEQyBoZGMgPSBHZXREQyggKHduZFB0ciktPmh3bmRTZWxmICk7IFwKKyAgICAgICAgIChidG5QYWludEZ1bmNbc3R5bGVdKSh3bmRQdHIsaGRjLGFjdGlvbik7IFwKKyAgICAgICAgIFJlbGVhc2VEQyggKHduZFB0ciktPmh3bmRTZWxmLCBoZGMgKTsgfQorCisjaWZkZWYgV0lORUxJQjMyCisjZGVmaW5lIEJVVFRPTl9TRU5EX0NUTENPTE9SKHduZFB0cixoZGMpIFwKKyAgICBTZW5kTWVzc2FnZSggR2V0UGFyZW50KCh3bmRQdHIpLT5od25kU2VsZiksIFdNX0NUTENPTE9SQlROLCBcCisgICAgICAgICAgICAgICAgIChoZGMpLCAod25kUHRyKS0+aHduZFNlbGYgKQorI2Vsc2UKKyNkZWZpbmUgQlVUVE9OX1NFTkRfQ1RMQ09MT1Iod25kUHRyLGhkYykgXAorICAgIFNlbmRNZXNzYWdlKCBHZXRQYXJlbnQoKHduZFB0ciktPmh3bmRTZWxmKSwgV01fQ1RMQ09MT1IsIChoZGMpLCBcCisgICAgICAgICAgICAgICAgIE1BS0VMUEFSQU0oKHduZFB0ciktPmh3bmRTZWxmLCBDVExDT0xPUl9CVE4pICkKKyNlbmRpZgogCiBzdGF0aWMgSEJJVE1BUCBoYml0bWFwQ2hlY2tCb3hlcyA9IDA7CiBzdGF0aWMgV09SRCBjaGVja0JveFdpZHRoID0gMCwgY2hlY2tCb3hIZWlnaHQgPSAwOwpAQCAtOTMsNyArMTAzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAKIAljYXNlIFdNX0VOQUJMRToKLSAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIGhXbmQsIHN0eWxlLCBPREFfRFJBV0VOVElSRSApOworICAgICAgICAgICAgICAgIFBBSU5UX0JVVFRPTiggd25kUHRyLCBzdHlsZSwgT0RBX0RSQVdFTlRJUkUgKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNX0NSRUFURToKQEAgLTEyNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgUEFJTlRTVFJVQ1QgcHM7CiAgICAgICAgICAgICAgICAgICAgIEhEQyBoZGMgPSBCZWdpblBhaW50KCBoV25kLCAmcHMgKTsKLSAgICAgICAgICAgICAgICAgICAgKGJ0blBhaW50RnVuY1tzdHlsZV0pKCBoV25kLCBoZGMsIE9EQV9EUkFXRU5USVJFICk7CisgICAgICAgICAgICAgICAgICAgIChidG5QYWludEZ1bmNbc3R5bGVdKSggd25kUHRyLCBoZGMsIE9EQV9EUkFXRU5USVJFICk7CiAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VEQyggaFduZCwgaGRjICk7CiAgICAgICAgICAgICAgICAgfQogCQlicmVhazsKQEAgLTE4NywxNCArMTk3LDE0IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBXTV9TRVRURVhUOgotCQlERUZXTkRfU2V0VGV4dCggaFduZCwgKExQU1RSKVBUUl9TRUdfVE9fTElOKGxQYXJhbSkgKTsKLSAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIGhXbmQsIHN0eWxlLCBPREFfRFJBV0VOVElSRSApOworCQlERUZXTkRfU2V0VGV4dCggd25kUHRyLCAoTFBTVFIpUFRSX1NFR19UT19MSU4obFBhcmFtKSApOworICAgICAgICAgICAgICAgIFBBSU5UX0JVVFRPTiggd25kUHRyLCBzdHlsZSwgT0RBX0RSQVdFTlRJUkUgKTsKIAkJcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBXTV9TRVRGT05UOgogICAgICAgICAgICAgICAgIGluZm9QdHItPmhGb250ID0gKEhGT05UKSB3UGFyYW07CiAgICAgICAgICAgICAgICAgaWYgKGxQYXJhbSkKLSAgICAgICAgICAgICAgICAgICAgUEFJTlRfQlVUVE9OKCBoV25kLCBzdHlsZSwgT0RBX0RSQVdFTlRJUkUgKTsKKyAgICAgICAgICAgICAgICAgICAgUEFJTlRfQlVUVE9OKCB3bmRQdHIsIHN0eWxlLCBPREFfRFJBV0VOVElSRSApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV01fR0VURk9OVDoKQEAgLTIwMiwxMiArMjEyLDEyIEBACiAKIAljYXNlIFdNX1NFVEZPQ1VTOgogICAgICAgICAgICAgICAgIGluZm9QdHItPnN0YXRlIHw9IEJVVFRPTl9IQVNGT0NVUzsKLSAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIGhXbmQsIHN0eWxlLCBPREFfRk9DVVMgKTsKKyAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIHduZFB0ciwgc3R5bGUsIE9EQV9GT0NVUyApOwogCQlicmVhazsKIAogCWNhc2UgV01fS0lMTEZPQ1VTOgogICAgICAgICAgICAgICAgIGluZm9QdHItPnN0YXRlICY9IH5CVVRUT05fSEFTRk9DVVM7Ci0gICAgICAgICAgICAgICAgUEFJTlRfQlVUVE9OKCBoV25kLCBzdHlsZSwgT0RBX0ZPQ1VTICk7CisgICAgICAgICAgICAgICAgUEFJTlRfQlVUVE9OKCB3bmRQdHIsIHN0eWxlLCBPREFfRk9DVVMgKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNX1NZU0NPTE9SQ0hBTkdFOgpAQCAtMjE5LDcgKzIyOSw3IEBACiAJCXduZFB0ci0+ZHdTdHlsZSA9ICh3bmRQdHItPmR3U3R5bGUgJiAweGZmZmZmZmYwKSAKIAkJICAgICAgICAgICAgICAgICAgIHwgKHdQYXJhbSAmIDB4MDAwMDAwMGYpOwogICAgICAgICAgICAgICAgIHN0eWxlID0gd25kUHRyLT5kd1N0eWxlICYgMHgwMDAwMDAwZjsKLSAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIGhXbmQsIHN0eWxlLCBPREFfRFJBV0VOVElSRSApOworICAgICAgICAgICAgICAgIFBBSU5UX0JVVFRPTiggd25kUHRyLCBzdHlsZSwgT0RBX0RSQVdFTlRJUkUgKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJNX0dFVENIRUNLOgpAQCAtMjMyLDEwICsyNDIsMTAgQEAKIAkJaWYgKChpbmZvUHRyLT5zdGF0ZSAmIDMpICE9IHdQYXJhbSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9QdHItPnN0YXRlID0gKGluZm9QdHItPnN0YXRlICYgfjMpIHwgd1BhcmFtOwotICAgICAgICAgICAgICAgICAgICBQQUlOVF9CVVRUT04oIGhXbmQsIHN0eWxlLCBPREFfU0VMRUNUICk7CisgICAgICAgICAgICAgICAgICAgIFBBSU5UX0JVVFRPTiggd25kUHRyLCBzdHlsZSwgT0RBX1NFTEVDVCApOwogICAgICAgICAgICAgICAgIH0KIAkJaWYoc3R5bGUgPT0gQlNfQVVUT1JBRElPQlVUVE9OICYmIHdQYXJhbT09QlVUVE9OX0NIRUNLRUQpCi0JCQlCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24oaFduZCk7CisJCQlCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24oIHduZFB0ciApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAJY2FzZSBCTV9HRVRTVEFURToKQEAgLTI0Nyw3ICsyNTcsNyBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdQYXJhbSkgaW5mb1B0ci0+c3RhdGUgfD0gQlVUVE9OX0hJR0hMSUdIVEVEOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGluZm9QdHItPnN0YXRlICY9IH5CVVRUT05fSElHSExJR0hURUQ7Ci0gICAgICAgICAgICAgICAgICAgIFBBSU5UX0JVVFRPTiggaFduZCwgc3R5bGUsIE9EQV9TRUxFQ1QgKTsKKyAgICAgICAgICAgICAgICAgICAgUEFJTlRfQlVUVE9OKCB3bmRQdHIsIHN0eWxlLCBPREFfU0VMRUNUICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yNjQsNyArMjc0LDcgQEAKICAqICAgICAgIFB1c2ggQnV0dG9uIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIFBCX1BhaW50KCBIV05EIGhCdXR0b24sIEhEQyBoREMsIFdPUkQgYWN0aW9uICkKK3N0YXRpYyB2b2lkIFBCX1BhaW50KCBXTkQgKnduZFB0ciwgSERDIGhEQywgV09SRCBhY3Rpb24gKQogewogICAgIFJFQ1QgcmM7CiAgICAgSFBFTiBoT2xkUGVuOwpAQCAtMjcyLDE5ICsyODIsMTMgQEAKICAgICBjaGFyICp0ZXh0OwogICAgIERXT1JEIGR3VGV4dFNpemU7CiAgICAgVEVYVE1FVFJJQyB0bTsKLSAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBoQnV0dG9uICk7CiAgICAgQlVUVE9OSU5GTyAqaW5mb1B0ciA9IChCVVRUT05JTkZPICopd25kUHRyLT53RXh0cmE7CiAKLSAgICBHZXRDbGllbnRSZWN0KGhCdXR0b24sICZyYyk7CisgICAgR2V0Q2xpZW50UmVjdCh3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogCiAgICAgICAvKiBTZW5kIFdNX0NUTENPTE9SIHRvIGFsbG93IGNoYW5naW5nIHRoZSBmb250ICh0aGUgY29sb3JzIGFyZSBmaXhlZCkgKi8KICAgICBpZiAoaW5mb1B0ci0+aEZvbnQpIFNlbGVjdE9iamVjdCggaERDLCBpbmZvUHRyLT5oRm9udCApOwotI2lmZGVmIFdJTkVMSUIzMgotICAgIFNlbmRNZXNzYWdlKCBHZXRQYXJlbnQoaEJ1dHRvbiksIFdNX0NUTENPTE9SQlROLCBoREMsIGhCdXR0b24gKTsKLSNlbHNlCi0gICAgU2VuZE1lc3NhZ2UoIEdldFBhcmVudChoQnV0dG9uKSwgV01fQ1RMQ09MT1IsIChXT1JEKWhEQywKLSAgICAgICAgICAgICAgICAgTUFLRUxQQVJBTShoQnV0dG9uLCBDVExDT0xPUl9CVE4pICk7Ci0jZW5kaWYKKyAgICBCVVRUT05fU0VORF9DVExDT0xPUiggd25kUHRyLCBoREMgKTsKICAgICBoT2xkUGVuID0gKEhQRU4pU2VsZWN0T2JqZWN0KGhEQywgc3lzQ29sb3JPYmplY3RzLmhwZW5XaW5kb3dGcmFtZSk7CiAgICAgaE9sZEJydXNoID0gKEhCUlVTSClTZWxlY3RPYmplY3QoaERDLCBzeXNDb2xvck9iamVjdHMuaGJydXNoQnRuRmFjZSk7CiAgICAgU2V0QmtNb2RlKGhEQywgVFJBTlNQQVJFTlQpOwpAQCAtMzQ3LDcgKzM1MSw3IEBACiAgKiAgICAgICBDaGVjayBCb3ggJiBSYWRpbyBCdXR0b24gRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgQ0JfUGFpbnQoIEhXTkQgaFduZCwgSERDIGhEQywgV09SRCBhY3Rpb24gKQorc3RhdGljIHZvaWQgQ0JfUGFpbnQoIFdORCAqd25kUHRyLCBIREMgaERDLCBXT1JEIGFjdGlvbiApCiB7CiAgICAgUkVDVCByYzsKICAgICBIQlJVU0ggaEJydXNoOwpAQCAtMzU1LDE4ICszNTksMTIgQEAKICAgICBjaGFyICp0ZXh0OwogICAgIFRFWFRNRVRSSUMgdG07CiAgICAgU0laRSBzaXplOwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaFduZCk7CiAgICAgQlVUVE9OSU5GTyAqaW5mb1B0ciA9IChCVVRUT05JTkZPICopd25kUHRyLT53RXh0cmE7CiAKLSAgICBHZXRDbGllbnRSZWN0KGhXbmQsICZyYyk7CisgICAgR2V0Q2xpZW50UmVjdCh3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogCiAgICAgaWYgKGluZm9QdHItPmhGb250KSBTZWxlY3RPYmplY3QoIGhEQywgaW5mb1B0ci0+aEZvbnQgKTsKLSNpZmRlZiBXSU5FTElCMzIgLyogSkJQOiBEaWZmZXJlbnQgaW4gV2luMzIgKi8KLSAgICBoQnJ1c2ggPSBTZW5kTWVzc2FnZShHZXRQYXJlbnQoaFduZCksIFdNX0NUTENPTE9SQlROLCBoREMsIGhXbmQpOwotI2Vsc2UKLSAgICBoQnJ1c2ggPSBTZW5kTWVzc2FnZShHZXRQYXJlbnQoaFduZCksIFdNX0NUTENPTE9SLCBoREMsCi0JCQkgTUFLRUxQQVJBTShoV25kLCBDVExDT0xPUl9CVE4pKTsKLSNlbmRpZgorICAgIGhCcnVzaCA9IEJVVFRPTl9TRU5EX0NUTENPTE9SKCB3bmRQdHIsIGhEQyApOwogICAgIGlmIChhY3Rpb24gPT0gT0RBX0RSQVdFTlRJUkUpIEZpbGxSZWN0KGhEQywgJnJjLCBoQnJ1c2gpOwogCiAgICAgR2V0VGV4dE1ldHJpY3MoaERDLCAmdG0pOwpAQCAtNDEyLDE0ICs0MTAsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICBCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24KICAqCi0gKiBoV25kIGlzIGNoZWNrZWQsIHVuY2hlY2sgZXZlcnl0aGluZyBlbHNlIGluIGdyb3VwCisgKiB3bmRQdHIgaXMgY2hlY2tlZCwgdW5jaGVjayBldmVyeXRoaW5nIGVsc2UgaW4gZ3JvdXAKICAqLwotc3RhdGljIHZvaWQgQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uKEhXTkQgaFduZCkKK3N0YXRpYyB2b2lkIEJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbiggV05EICp3bmRQdHIgKQogewotICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGhXbmQpOwotICAgIEhXTkQgc2libGluZzsKLSAgICBmb3Ioc2libGluZyA9IEdldE5leHREbGdHcm91cEl0ZW0ocGFyZW50LGhXbmQsRkFMU0UpOwotICAgICAgICBzaWJsaW5nICE9IGhXbmQ7CisgICAgSFdORCBwYXJlbnQsIHNpYmxpbmc7CisgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpKSByZXR1cm47CisgICAgcGFyZW50ID0gd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmOworICAgIGZvcihzaWJsaW5nID0gR2V0TmV4dERsZ0dyb3VwSXRlbShwYXJlbnQsd25kUHRyLT5od25kU2VsZixGQUxTRSk7CisgICAgICAgIHNpYmxpbmcgIT0gd25kUHRyLT5od25kU2VsZjsKICAgICAgICAgc2libGluZyA9IEdldE5leHREbGdHcm91cEl0ZW0ocGFyZW50LHNpYmxpbmcsRkFMU0UpKQogCSAgICBTZW5kTWVzc2FnZShzaWJsaW5nLEJNX1NFVENIRUNLLEJVVFRPTl9VTkNIRUNLRUQsMCk7CiB9CkBAIC00MjksMjYgKzQyOCwyMCBAQAogICogICAgICAgR3JvdXAgQm94IEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIEdCX1BhaW50KCBIV05EIGhXbmQsIEhEQyBoREMsIFdPUkQgYWN0aW9uICkKK3N0YXRpYyB2b2lkIEdCX1BhaW50KCBXTkQgKnduZFB0ciwgSERDIGhEQywgV09SRCBhY3Rpb24gKQogewogICAgIFJFQ1QgcmM7CiAgICAgY2hhciAqdGV4dDsKICAgICBTSVpFIHNpemU7Ci0gICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaFduZCApOwogICAgIEJVVFRPTklORk8gKmluZm9QdHIgPSAoQlVUVE9OSU5GTyAqKXduZFB0ci0+d0V4dHJhOwogCiAgICAgaWYgKGFjdGlvbiAhPSBPREFfRFJBV0VOVElSRSkgcmV0dXJuOwogCiAgICAgaWYgKGluZm9QdHItPmhGb250KSBTZWxlY3RPYmplY3QoIGhEQywgaW5mb1B0ci0+aEZvbnQgKTsKLSNpZmRlZiBXSU5FTElCMzIKLSAgICBTZW5kTWVzc2FnZSggR2V0UGFyZW50KGhXbmQpLCBXTV9DVExDT0xPUkJUTiwgaERDLCBoV25kICk7Ci0jZWxzZQotICAgIFNlbmRNZXNzYWdlKCBHZXRQYXJlbnQoaFduZCksIFdNX0NUTENPTE9SLCBoREMsCi0JCSBNQUtFTFBBUkFNKGhXbmQsIENUTENPTE9SX0JUTikpOwotI2VuZGlmCisgICAgQlVUVE9OX1NFTkRfQ1RMQ09MT1IoIHduZFB0ciwgaERDICk7CiAgICAgU2VsZWN0T2JqZWN0KCBoREMsIHN5c0NvbG9yT2JqZWN0cy5ocGVuV2luZG93RnJhbWUgKTsKIAotICAgIEdldENsaWVudFJlY3QoaFduZCwgJnJjKTsKKyAgICBHZXRDbGllbnRSZWN0KCB3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogCiAgICAgTW92ZVRvKCBoREMsIHJjLmxlZnQsIHJjLnRvcCsyICk7CiAgICAgTGluZVRvKCBoREMsIHJjLnJpZ2h0LTEsIHJjLnRvcCsyICk7CkBAIC00NzEsMjQgKzQ2NCwxOCBAQAogICogICAgICAgVXNlciBCdXR0b24gRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgVUJfUGFpbnQoIEhXTkQgaFduZCwgSERDIGhEQywgV09SRCBhY3Rpb24gKQorc3RhdGljIHZvaWQgVUJfUGFpbnQoIFdORCAqd25kUHRyLCBIREMgaERDLCBXT1JEIGFjdGlvbiApCiB7CiAgICAgUkVDVCByYzsKICAgICBIQlJVU0ggaEJydXNoOwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGhXbmQgKTsKICAgICBCVVRUT05JTkZPICppbmZvUHRyID0gKEJVVFRPTklORk8gKil3bmRQdHItPndFeHRyYTsKIAogICAgIGlmIChhY3Rpb24gPT0gT0RBX1NFTEVDVCkgcmV0dXJuOwogCi0gICAgR2V0Q2xpZW50UmVjdChoV25kLCAmcmMpOworICAgIEdldENsaWVudFJlY3QoIHduZFB0ci0+aHduZFNlbGYsICZyYyk7CiAKICAgICBpZiAoaW5mb1B0ci0+aEZvbnQpIFNlbGVjdE9iamVjdCggaERDLCBpbmZvUHRyLT5oRm9udCApOwotI2lmZGVmIFdJTkVMSUIzMgotICAgIGhCcnVzaCA9IFNlbmRNZXNzYWdlKCBHZXRQYXJlbnQoaFduZCksIFdNX0NUTENPTE9SQlROLCBoREMsIGhXbmQgKTsKLSNlbHNlCi0gICAgaEJydXNoID0gU2VuZE1lc3NhZ2UoR2V0UGFyZW50KGhXbmQpLCBXTV9DVExDT0xPUiwgKFdPUkQpaERDLAotCQkJIE1BS0VMUEFSQU0oaFduZCwgQ1RMQ09MT1JfQlROKSk7Ci0jZW5kaWYKKyAgICBoQnJ1c2ggPSBCVVRUT05fU0VORF9DVExDT0xPUiggd25kUHRyLCBoREMgKTsKICAgICBGaWxsUmVjdChoREMsICZyYywgaEJydXNoKTsKIAogICAgIGlmICgoYWN0aW9uID09IE9EQV9GT0NVUykgfHwKQEAgLTUwMSwxMCArNDg4LDkgQEAKICAqICAgICAgIE93bmVyZHJhd24gQnV0dG9uIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIE9CX1BhaW50KCBIV05EIGhXbmQsIEhEQyBoREMsIFdPUkQgYWN0aW9uICkKK3N0YXRpYyB2b2lkIE9CX1BhaW50KCBXTkQgKnduZFB0ciwgSERDIGhEQywgV09SRCBhY3Rpb24gKQogewogICAgIERSQVdJVEVNU1RSVUNUIGRpczsKLSAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBoV25kICk7CiAgICAgQlVUVE9OSU5GTyAqaW5mb1B0ciA9IChCVVRUT05JTkZPICopd25kUHRyLT53RXh0cmE7CiAKICAgICBkaXMuQ3RsVHlwZSAgICA9IE9EVF9CVVRUT047CkBAIC01MTQsOSArNTAwLDEwIEBACiAgICAgZGlzLml0ZW1TdGF0ZSAgPSAoaW5mb1B0ci0+c3RhdGUgJiBCVVRUT05fSEFTRk9DVVMpID8gT0RTX0ZPQ1VTIDogMCB8CiAgICAgICAgICAgICAgICAgICAgICAoaW5mb1B0ci0+c3RhdGUgJiBCVVRUT05fSElHSExJR0hURUQpID8gT0RTX1NFTEVDVEVEIDogMCB8CiAgICAgICAgICAgICAgICAgICAgICAod25kUHRyLT5kd1N0eWxlICYgV1NfRElTQUJMRUQpID8gT0RTX0RJU0FCTEVEIDogMDsKLSAgICBkaXMuaHduZEl0ZW0gICA9IGhXbmQ7CisgICAgZGlzLmh3bmRJdGVtICAgPSB3bmRQdHItPmh3bmRTZWxmOwogICAgIGRpcy5oREMgICAgICAgID0gaERDOwotICAgIEdldENsaWVudFJlY3QoIGhXbmQsICZkaXMucmNJdGVtICk7CisgICAgR2V0Q2xpZW50UmVjdCggd25kUHRyLT5od25kU2VsZiwgJmRpcy5yY0l0ZW0gKTsKICAgICBkaXMuaXRlbURhdGEgICA9IDA7Ci0gICAgU2VuZE1lc3NhZ2UoR2V0UGFyZW50KGhXbmQpLCBXTV9EUkFXSVRFTSwgMSwgKExQQVJBTSkgTUFLRV9TRUdQVFIoJmRpcykgKTsKKyAgICBTZW5kTWVzc2FnZSggR2V0UGFyZW50KHduZFB0ci0+aHduZFNlbGYpLCBXTV9EUkFXSVRFTSwgMSwKKyAgICAgICAgICAgICAgICAgKExQQVJBTSlNQUtFX1NFR1BUUigmZGlzKSApOwogfQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvZWRpdC5jIGIvY29udHJvbHMvZWRpdC5jCmluZGV4IDZiMTE1NGMuLjM3ZDk1YWQgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2VkaXQuYworKysgYi9jb250cm9scy9lZGl0LmMKQEAgLTEzNSwxNiArMTM1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgKkVESVRfSGVhcExvY2soSFdORCBod25kLCBIQU5ETEUgaGFuZGxlKQogewotICAgIEhJTlNUQU5DRSBoaW5zdGFuY2UgPSBXSU5fR2V0V2luZG93SW5zdGFuY2UoIGh3bmQgKTsKLSNpZiBkZWZpbmVkKFdJTkVMSUIpCi0gICAgcmV0dXJuIExPQ0FMX0xvY2soIGhpbnN0YW5jZSwgaGFuZGxlICk7Ci0jZWxzZQotICAgIEhBTkRMRSBvZmZzOwotICAgIAotICAgIGlmIChoYW5kbGUgPT0gMCkgcmV0dXJuIDA7Ci0gICAgb2ZmcyA9IExPQ0FMX0xvY2soIGhpbnN0YW5jZSwgaGFuZGxlICk7Ci0gICAgcmV0dXJuIFBUUl9TRUdfT0ZGX1RPX0xJTiggaGluc3RhbmNlLCBvZmZzICk7Ci0jZW5kaWYKKyAgICByZXR1cm4gTE9DQUxfTG9jayggV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLCBoYW5kbGUgKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjc5OCw3ICsyNzg5LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmKG1vdGlvbktleSAmJiAoMHg4MCAmIEdldEtleVN0YXRlKFZLX1NISUZUKSkpIHsKKyAgICBpZihtb3Rpb25LZXkgJiYgKDB4ODAwMCAmIEdldEtleVN0YXRlKFZLX1NISUZUKSkpIHsKICAgICAgICAgRURJVF9FeHRlbmRTZWwoaHduZCwgZXMtPlduZENvbCwgZXMtPlduZFJvdyplcy0+dHh0aHQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEVESVRfU2V0QW5jaG9yKGh3bmQsIGVzLT5DdXJyTGluZSwgZXMtPkN1cnJDb2wpOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvc3RhdGljLmMgYi9jb250cm9scy9zdGF0aWMuYwppbmRleCBlYjUxOTYxLi45ZjQ3MGI1IDEwMDY0NAotLS0gYS9jb250cm9scy9zdGF0aWMuYworKysgYi9jb250cm9scy9zdGF0aWMuYwpAQCAtMyw4ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgIERhdmlkIFcuIE1ldGNhbGZlLCAxOTkzCiAgKgotc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBEYXZpZCBXLiBNZXRjYWxmZSwgMTk5MyI7Ci0qLworICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTEyLDM1ICsxMSwzNSBAQAogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJzdGF0aWMuaCIKIAotZXh0ZXJuIHZvaWQgREVGV05EX1NldFRleHQoIEhXTkQgaHduZCwgTFBTVFIgdGV4dCApOyAgLyogd2luZG93cy9kZWZ3bmQuYyAqLworZXh0ZXJuIHZvaWQgREVGV05EX1NldFRleHQoIFdORCAqd25kUHRyLCBMUFNUUiB0ZXh0ICk7ICAvKiB3aW5kb3dzL2RlZnduZC5jICovCiAKLXN0YXRpYyB2b2lkIFBhaW50VGV4dGZuKCBIV05EIGh3bmQsIEhEQyBoZGMgKTsKLXN0YXRpYyB2b2lkIFBhaW50UmVjdGZuKCBIV05EIGh3bmQsIEhEQyBoZGMgKTsKLXN0YXRpYyB2b2lkIFBhaW50SWNvbmZuKCBIV05EIGh3bmQsIEhEQyBoZGMgKTsKK3N0YXRpYyB2b2lkIFNUQVRJQ19QYWludFRleHRmbiggV05EICp3bmRQdHIsIEhEQyBoZGMgKTsKK3N0YXRpYyB2b2lkIFNUQVRJQ19QYWludFJlY3RmbiggV05EICp3bmRQdHIsIEhEQyBoZGMgKTsKK3N0YXRpYyB2b2lkIFNUQVRJQ19QYWludEljb25mbiggV05EICp3bmRQdHIsIEhEQyBoZGMgKTsKIAogCiBzdGF0aWMgQ09MT1JSRUYgY29sb3Jfd2luZG93ZnJhbWUsIGNvbG9yX2JhY2tncm91bmQsIGNvbG9yX3dpbmRvdzsKIAogCi10eXBlZGVmIHZvaWQgKCpwZlBhaW50KShIV05ELCBIREMpOwordHlwZWRlZiB2b2lkICgqcGZQYWludCkoIFdORCAqLCBIREMpOwogCiAjZGVmaW5lIExBU1RfU1RBVElDX1RZUEUgIFNTX0xFRlROT1dPUkRXUkFQCiAKIHN0YXRpYyBwZlBhaW50IHN0YXRpY1BhaW50RnVuY1tMQVNUX1NUQVRJQ19UWVBFKzFdID0KIHsKLSAgICBQYWludFRleHRmbiwgICAgICAgICAgICAgLyogU1NfTEVGVCAqLwotICAgIFBhaW50VGV4dGZuLCAgICAgICAgICAgICAvKiBTU19DRU5URVIgKi8KLSAgICBQYWludFRleHRmbiwgICAgICAgICAgICAgLyogU1NfUklHSFQgKi8KLSAgICBQYWludEljb25mbiwgICAgICAgICAgICAgLyogU1NfSUNPTiAqLwotICAgIFBhaW50UmVjdGZuLCAgICAgICAgICAgICAvKiBTU19CTEFDS1JFQ1QgKi8KLSAgICBQYWludFJlY3RmbiwgICAgICAgICAgICAgLyogU1NfR1JBWVJFQ1QgKi8KLSAgICBQYWludFJlY3RmbiwgICAgICAgICAgICAgLyogU1NfV0hJVEVSRUNUICovCi0gICAgUGFpbnRSZWN0Zm4sICAgICAgICAgICAgIC8qIFNTX0JMQUNLRlJBTUUgKi8KLSAgICBQYWludFJlY3RmbiwgICAgICAgICAgICAgLyogU1NfR1JBWUZSQU1FICovCi0gICAgUGFpbnRSZWN0Zm4sICAgICAgICAgICAgIC8qIFNTX1dISVRFRlJBTUUgKi8KKyAgICBTVEFUSUNfUGFpbnRUZXh0Zm4sICAgICAgLyogU1NfTEVGVCAqLworICAgIFNUQVRJQ19QYWludFRleHRmbiwgICAgICAvKiBTU19DRU5URVIgKi8KKyAgICBTVEFUSUNfUGFpbnRUZXh0Zm4sICAgICAgLyogU1NfUklHSFQgKi8KKyAgICBTVEFUSUNfUGFpbnRJY29uZm4sICAgICAgLyogU1NfSUNPTiAqLworICAgIFNUQVRJQ19QYWludFJlY3RmbiwgICAgICAvKiBTU19CTEFDS1JFQ1QgKi8KKyAgICBTVEFUSUNfUGFpbnRSZWN0Zm4sICAgICAgLyogU1NfR1JBWVJFQ1QgKi8KKyAgICBTVEFUSUNfUGFpbnRSZWN0Zm4sICAgICAgLyogU1NfV0hJVEVSRUNUICovCisgICAgU1RBVElDX1BhaW50UmVjdGZuLCAgICAgIC8qIFNTX0JMQUNLRlJBTUUgKi8KKyAgICBTVEFUSUNfUGFpbnRSZWN0Zm4sICAgICAgLyogU1NfR1JBWUZSQU1FICovCisgICAgU1RBVElDX1BhaW50UmVjdGZuLCAgICAgIC8qIFNTX1dISVRFRlJBTUUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogTm90IGRlZmluZWQgKi8KLSAgICBQYWludFRleHRmbiwgICAgICAgICAgICAgLyogU1NfU0lNUExFICovCi0gICAgUGFpbnRUZXh0Zm4gICAgICAgICAgICAgIC8qIFNTX0xFRlROT1dPUkRXUkFQICovCisgICAgU1RBVElDX1BhaW50VGV4dGZuLCAgICAgIC8qIFNTX1NJTVBMRSAqLworICAgIFNUQVRJQ19QYWludFRleHRmbiAgICAgICAvKiBTU19MRUZUTk9XT1JEV1JBUCAqLwogfTsKIAogCkBAIC00OSwxMCArNDgsOSBAQAogICoKICAqIFNldCB0aGUgaWNvbiBmb3IgYW4gU1NfSUNPTiBjb250cm9sLgogICovCi1zdGF0aWMgSElDT04gU1RBVElDX1NldEljb24oIEhXTkQgaHduZCwgSElDT04gaGljb24gKQorc3RhdGljIEhJQ09OIFNUQVRJQ19TZXRJY29uKCBXTkQgKnduZFB0ciwgSElDT04gaGljb24gKQogewogICAgIEhJQ09OIHByZXZJY29uOwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKICAgICBTVEFUSUNJTkZPICppbmZvUHRyID0gKFNUQVRJQ0lORk8gKil3bmRQdHItPndFeHRyYTsKIAogICAgIGlmICgod25kUHRyLT5kd1N0eWxlICYgMHgwZikgIT0gU1NfSUNPTikgcmV0dXJuIDA7CkBAIC02MSw3ICs1OSw3IEBACiAgICAgaWYgKGhpY29uKQogICAgIHsKICAgICAgICAgQ1VSU09SSUNPTklORk8gKmluZm8gPSAoQ1VSU09SSUNPTklORk8gKikgR2xvYmFsTG9jayggaGljb24gKTsKLSAgICAgICAgU2V0V2luZG93UG9zKCBod25kLCAwLCAwLCAwLCBpbmZvLT5uV2lkdGgsIGluZm8tPm5IZWlnaHQsCisgICAgICAgIFNldFdpbmRvd1Bvcyggd25kUHRyLT5od25kU2VsZiwgMCwgMCwgMCwgaW5mby0+bldpZHRoLCBpbmZvLT5uSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9NT1ZFIHwgU1dQX05PWk9SREVSICk7CiAgICAgICAgIEdsb2JhbFVubG9jayggaGljb24gKTsKICAgICB9CkBAIC05NCw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdC0+bHBzek5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFoaWNvbikgIC8qIFRyeSBPRU0gaWNvbiAoRklYTUU6IGlzIHRoaXMgcmlnaHQ/KSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaGljb24gPSBMb2FkSWNvbiggMCwgY3JlYXRlU3RydWN0LT5scHN6TmFtZSApOwotICAgICAgICAgICAgICAgICAgICBTVEFUSUNfU2V0SWNvbiggaFduZCwgaGljb24gKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVElDX1NldEljb24oIHduZFB0ciwgaGljb24gKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9CkBAIC0xMTUsNyArMTEzLDcgQEAKIAogICAgICAgICBjYXNlIFdNX05DREVTVFJPWToKICAgICAgICAgICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKQotICAgICAgICAgICAgICAgIERlc3Ryb3lJY29uKCBTVEFUSUNfU2V0SWNvbiggaFduZCwgMCApICk7CisgICAgICAgICAgICAgICAgRGVzdHJveUljb24oIFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIDAgKSApOwogICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYyhoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyNSw3ICsxMjMsNyBAQAogICAgICAgICAgICAgICAgIFBBSU5UU1RSVUNUIHBzOwogICAgICAgICAgICAgICAgIEJlZ2luUGFpbnQoIGhXbmQsICZwcyApOwogICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQYWludEZ1bmNbc3R5bGVdKQotICAgICAgICAgICAgICAgICAgICAoc3RhdGljUGFpbnRGdW5jW3N0eWxlXSkoIGhXbmQsIHBzLmhkYyApOworICAgICAgICAgICAgICAgICAgICAoc3RhdGljUGFpbnRGdW5jW3N0eWxlXSkoIHduZFB0ciwgcHMuaGRjICk7CiAgICAgICAgICAgICAgICAgRW5kUGFpbnQoIGhXbmQsICZwcyApOwogICAgICAgICAgICAgfQogCSAgICBicmVhazsKQEAgLTE0MCwxMCArMTM4LDEwIEBACiAJY2FzZSBXTV9TRVRURVhUOgogCSAgICBpZiAoc3R5bGUgPT0gU1NfSUNPTikKIAkgICAgICAgIC8qIEZJWE1FIDogc2hvdWxkIHdlIGFsc28gcmV0dXJuIHRoZSBwcmV2aW91cyBoSWNvbiBoZXJlID8/PyAqLwotICAgICAgICAgICAgICAgIFNUQVRJQ19TZXRJY29uKCBoV25kLCBMb2FkSWNvbiggd25kUHRyLT5oSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VHUFRSKWxQYXJhbSApKTsKKyAgICAgICAgICAgICAgICBTVEFUSUNfU2V0SWNvbiggd25kUHRyLCBMb2FkSWNvbiggd25kUHRyLT5oSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRUdQVFIpbFBhcmFtICkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIERFRldORF9TZXRUZXh0KCBoV25kLCAoTFBTVFIpUFRSX1NFR19UT19MSU4obFBhcmFtKSApOworICAgICAgICAgICAgICAgIERFRldORF9TZXRUZXh0KCB3bmRQdHIsIChMUFNUUilQVFJfU0VHX1RPX0xJTihsUGFyYW0pICk7CiAJICAgIEludmFsaWRhdGVSZWN0KCBoV25kLCBOVUxMLCBGQUxTRSApOwogCSAgICBVcGRhdGVXaW5kb3coIGhXbmQgKTsKIAkgICAgYnJlYWs7CkBAIC0xNzEsNyArMTY5LDcgQEAKIAkgICAgcmV0dXJuIGluZm9QdHItPmhJY29uOwogCiAJY2FzZSBTVE1fU0VUSUNPTjoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBTVEFUSUNfU2V0SWNvbiggaFduZCwgKEhJQ09OKXdQYXJhbSApOworICAgICAgICAgICAgbFJlc3VsdCA9IFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIChISUNPTil3UGFyYW0gKTsKICAgICAgICAgICAgIEludmFsaWRhdGVSZWN0KCBoV25kLCBOVUxMLCBGQUxTRSApOwogICAgICAgICAgICAgVXBkYXRlV2luZG93KCBoV25kICk7CiAJICAgIGJyZWFrOwpAQCAtMTg1LDE4ICsxODMsMTcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBQYWludFRleHRmbiggSFdORCBod25kLCBIREMgaGRjICkKK3N0YXRpYyB2b2lkIFNUQVRJQ19QYWludFRleHRmbiggV05EICp3bmRQdHIsIEhEQyBoZGMgKQogewogICAgIFJFQ1QgcmM7CiAgICAgSEJSVVNIIGhCcnVzaDsKICAgICBjaGFyICp0ZXh0OwogICAgIFdPUkQgd0Zvcm1hdDsKIAotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgICAgTE9ORyBzdHlsZSA9IHduZFB0ci0+ZHdTdHlsZTsKICAgICBTVEFUSUNJTkZPICppbmZvUHRyID0gKFNUQVRJQ0lORk8gKil3bmRQdHItPndFeHRyYTsKIAotICAgIEdldENsaWVudFJlY3QoaHduZCwgJnJjKTsKKyAgICBHZXRDbGllbnRSZWN0KCB3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogICAgIHRleHQgPSBVU0VSX0hFQVBfTElOX0FERFIoIHduZFB0ci0+aFRleHQgKTsKIAogICAgIHN3aXRjaCAoc3R5bGUgJiAweDAwMDAwMDBGKQpAQCAtMjMwLDI0ICsyMjcsMjMgQEAKIAogICAgIGlmIChpbmZvUHRyLT5oRm9udCkgU2VsZWN0T2JqZWN0KCBoZGMsIGluZm9QdHItPmhGb250ICk7CiAjaWZkZWYgV0lORUxJQjMyCi0gICAgaEJydXNoID0gU2VuZE1lc3NhZ2UoIEdldFBhcmVudChod25kKSwgV01fQ1RMQ09MT1JTVEFUSUMsIGhkYywgaHduZCApOworICAgIGhCcnVzaCA9IFNlbmRNZXNzYWdlKCBHZXRQYXJlbnQod25kUHRyLT5od25kU2VsZiksIFdNX0NUTENPTE9SU1RBVElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZGMsIHduZFB0ci0+aHduZFNlbGYgKTsKICNlbHNlCi0gICAgaEJydXNoID0gU2VuZE1lc3NhZ2UoIEdldFBhcmVudChod25kKSwgV01fQ1RMQ09MT1IsIChXT1JEKWhkYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoaHduZCwgQ1RMQ09MT1JfU1RBVElDKSk7CisgICAgaEJydXNoID0gU2VuZE1lc3NhZ2UoIEdldFBhcmVudCh3bmRQdHItPmh3bmRTZWxmKSwgV01fQ1RMQ09MT1IsIChXT1JEKWhkYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcod25kUHRyLT5od25kU2VsZiwgQ1RMQ09MT1JfU1RBVElDKSk7CiAjZW5kaWYKICAgICBpZiAoIWhCcnVzaCkgaEJydXNoID0gR2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpOwogICAgIEZpbGxSZWN0KGhkYywgJnJjLCBoQnJ1c2gpOwogICAgIGlmICh0ZXh0KSBEcmF3VGV4dCggaGRjLCB0ZXh0LCAtMSwgJnJjLCB3Rm9ybWF0ICk7CiB9CiAKLXN0YXRpYyB2b2lkIFBhaW50UmVjdGZuKCBIV05EIGh3bmQsIEhEQyBoZGMgKQorc3RhdGljIHZvaWQgU1RBVElDX1BhaW50UmVjdGZuKCBXTkQgKnduZFB0ciwgSERDIGhkYyApCiB7CiAgICAgUkVDVCByYzsKICAgICBIQlJVU0ggaEJydXNoOwogCi0gICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0cihod25kKTsKLQotICAgIEdldENsaWVudFJlY3QoaHduZCwgJnJjKTsKKyAgICBHZXRDbGllbnRSZWN0KCB3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogICAgIAogICAgIHN3aXRjaCAod25kUHRyLT5kd1N0eWxlICYgMHgwZikKICAgICB7CkBAIC0yODIsMTkgKzI3OCwxOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIFBhaW50SWNvbmZuKCBIV05EIGh3bmQsIEhEQyBoZGMgKQorc3RhdGljIHZvaWQgU1RBVElDX1BhaW50SWNvbmZuKCBXTkQgKnduZFB0ciwgSERDIGhkYyApCiB7CiAgICAgUkVDVCAJcmM7CiAgICAgSEJSVVNIICAgICAgaGJydXNoOwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgICAgU1RBVElDSU5GTyAqaW5mb1B0ciA9IChTVEFUSUNJTkZPICopd25kUHRyLT53RXh0cmE7CiAKLSAgICBHZXRDbGllbnRSZWN0KGh3bmQsICZyYyk7CisgICAgR2V0Q2xpZW50UmVjdCggd25kUHRyLT5od25kU2VsZiwgJnJjKTsKICNpZmRlZiBXSU5FTElCMzIKLSAgICBoYnJ1c2ggPSBTZW5kTWVzc2FnZSggR2V0UGFyZW50KGh3bmQpLCBXTV9DVExDT0xPUlNUQVRJQywgaGRjLCBod25kICk7CisgICAgaGJydXNoID0gU2VuZE1lc3NhZ2UoIEdldFBhcmVudCh3bmRQdHItPmh3bmRTZWxmKSwgV01fQ1RMQ09MT1JTVEFUSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhkYywgd25kUHRyLT5od25kU2VsZiApOwogI2Vsc2UKLSAgICBoYnJ1c2ggPSBTZW5kTWVzc2FnZSggR2V0UGFyZW50KGh3bmQpLCBXTV9DVExDT0xPUiwgaGRjLAotICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFTE9ORyhod25kLCBDVExDT0xPUl9TVEFUSUMpKTsKKyAgICBoYnJ1c2ggPSBTZW5kTWVzc2FnZSggR2V0UGFyZW50KHduZFB0ci0+aHduZFNlbGYpLCBXTV9DVExDT0xPUiwgaGRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFTE9ORyh3bmRQdHItPmh3bmRTZWxmLCBDVExDT0xPUl9TVEFUSUMpKTsKICNlbmRpZgogICAgIEZpbGxSZWN0KCBoZGMsICZyYywgaGJydXNoICk7CiAgICAgaWYgKGluZm9QdHItPmhJY29uKSBEcmF3SWNvbiggaGRjLCByYy5sZWZ0LCByYy50b3AsIGluZm9QdHItPmhJY29uICk7CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9icmVhay5jIGIvZGVidWdnZXIvYnJlYWsuYwppbmRleCA3OGU0Y2M2Li5lZGJkZGI4IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9icmVhay5jCisrKyBiL2RlYnVnZ2VyL2JyZWFrLmMKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImRlYnVnZ2VyLmgiCmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9kYmcueSBiL2RlYnVnZ2VyL2RiZy55CmluZGV4IDIwNjI0N2IuLmIxYWUwZTQgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyL2RiZy55CisrKyBiL2RlYnVnZ2VyL2RiZy55CkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAiY2xhc3MuaCIKKyNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAicXVldWUuaCIKICNpbmNsdWRlICJ3aW4uaCIKQEAgLTM4LDcgKzM5LDcgQEAKIAogJXRva2VuIHRDT05UIHRTVEVQIHRMSVNUIHRORVhUIHRRVUlUIHRIRUxQIHRCQUNLVFJBQ0UgdElORk8gdFdBTEsKICV0b2tlbiB0RU5BQkxFIHRESVNBQkxFIHRCUkVBSyB0REVMRVRFIHRTRVQgdE1PREUgdFBSSU5UIHRFWEFNIHRERUZJTkUgdEFCT1JUCi0ldG9rZW4gdENMQVNTIHRTVEFDSyB0U0VHTUVOVFMgdFJFR1MgdFdORCB0UVVFVUUgCisldG9rZW4gdENMQVNTIHRNT0RVTEUgdFNUQUNLIHRTRUdNRU5UUyB0UkVHUyB0V05EIHRRVUVVRSAKICV0b2tlbiB0Tk9fU1lNQk9MIHRFT0wKICV0b2tlbiB0U1lNQk9MRklMRQogCkBAIC0xMjksNiArMTMwLDcgQEAKIGluZm9fY29tbWFuZDoKICAgICAgIHRJTkZPIHRCUkVBSyB0RU9MICAgICAgICAgeyBERUJVR19JbmZvQnJlYWtwb2ludHMoKTsgfQogICAgIHwgdElORk8gdENMQVNTIGV4cHIgdEVPTCAgICB7IENMQVNTX0R1bXBDbGFzcyggJDMgKTsgfQorICAgIHwgdElORk8gdE1PRFVMRSBleHByIHRFT0wgICB7IE1PRFVMRV9EdW1wTW9kdWxlKCAkMyApOyB9CiAgICAgfCB0SU5GTyB0UVVFVUUgZXhwciB0RU9MICAgIHsgUVVFVUVfRHVtcFF1ZXVlKCAkMyApOyB9CiAgICAgfCB0SU5GTyB0UkVHUyB0RU9MICAgICAgICAgIHsgREVCVUdfSW5mb1JlZ2lzdGVycygpOyB9CiAgICAgfCB0SU5GTyB0U0VHTUVOVFMgZXhwciB0RU9MIHsgTERUX1ByaW50KCBTRUxFQ1RPUl9UT19FTlRSWSgkMyksIDEgKTsgfQpAQCAtMTM4LDYgKzE0MCw3IEBACiAKIHdhbGtfY29tbWFuZDoKICAgICAgIHRXQUxLIHRDTEFTUyB0RU9MICAgICAgICAgeyBDTEFTU19XYWxrQ2xhc3NlcygpOyB9CisgICAgfCB0V0FMSyB0TU9EVUxFIHRFT0wgICAgICAgIHsgTU9EVUxFX1dhbGtNb2R1bGVzKCk7IH0KICAgICB8IHRXQUxLIHRRVUVVRSB0RU9MICAgICAgICAgeyBRVUVVRV9XYWxrUXVldWVzKCk7IH0KICAgICB8IHRXQUxLIHRXTkQgdEVPTCAgICAgICAgICAgeyBXSU5fV2Fsa1dpbmRvd3MoIDAsIDAgKTsgfQogICAgIHwgdFdBTEsgdFdORCB0TlVNIHRFT0wgICAgICB7IFdJTl9XYWxrV2luZG93cyggJDMsIDAgKTsgfQpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvZGVidWcubCBiL2RlYnVnZ2VyL2RlYnVnLmwKaW5kZXggYWJhY2Y4ZS4uMDgwNmUwNSAxMDA2NDQKLS0tIGEvZGVidWdnZXIvZGVidWcubAorKysgYi9kZWJ1Z2dlci9kZWJ1Zy5sCkBAIC05NCw2ICs5NCw3IEBACiB4CQkJCXsgcmV0dXJuIHRFWEFNOyB9CiAKIGNsYXNzfGNsYXN8Y2xhICAgICAgICAgICAgICAgICAgeyByZXR1cm4gdENMQVNTOyB9Cittb2R1bGV8bW9kdWx8bW9kdXxtb2QgICAgICAgICAgIHsgcmV0dXJuIHRNT0RVTEU7IH0KIHF1ZXVlfHF1ZXV8cXVlCQkJeyByZXR1cm4gdFFVRVVFOyB9CiByZWdpc3RlcnN8cmVnc3xyZWd8cmUJCXsgcmV0dXJuIHRSRUdTOyB9CiBzZWdtZW50c3xzZWdtZW50fHNlZ218c2VnfHNlCXsgcmV0dXJuIHRTRUdNRU5UUzsgfQpkaWZmIC0tZ2l0IGEvZmlsZXMvZG9zX2ZzLmMgYi9maWxlcy9kb3NfZnMuYwppbmRleCAyYjczNmNhLi42NTY1MzYxIDEwMDY0NAotLS0gYS9maWxlcy9kb3NfZnMuYworKysgYi9maWxlcy9kb3NfZnMuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx0aW1lLmg+Ci0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZpbGVzL2RyaXZlLmMgYi9maWxlcy9kcml2ZS5jCmluZGV4IDY0OGZhZjUuLjk0OGY5YjYgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2RyaXZlLmMKKysrIGIvZmlsZXMvZHJpdmUuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPHN5cy9tb3VudC5oPgogI2luY2x1ZGUgPHN5cy9lcnJuby5oPgogI2VuZGlmCi0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgogI2VuZGlmCiAKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSNpZmRlZiBfX3N2cjRfXworI2lmIGRlZmluZWQoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKICAgICBpZiAoc3RhdGZzKCBET1NEcml2ZXNbZHJpdmVdLnJvb3QsICZpbmZvLCAwLCAwKSA8IDApCiAjZWxzZQogICAgIGlmIChzdGF0ZnMoIERPU0RyaXZlc1tkcml2ZV0ucm9vdCwgJmluZm8pIDwgMCkKQEAgLTQ0OSw3ICs0NDksNyBAQAogICAgIH0KIAogICAgICpzaXplID0gaW5mby5mX2JzaXplICogaW5mby5mX2Jsb2NrczsKLSNpZmRlZiBfX3N2cjRfXworI2lmIGRlZmluZWQoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKICAgICAqYXZhaWxhYmxlID0gaW5mby5mX2JmcmVlICogaW5mby5mX2JzaXplOwogI2Vsc2UKICAgICAqYXZhaWxhYmxlID0gaW5mby5mX2JhdmFpbCAqIGluZm8uZl9ic2l6ZTsKZGlmZiAtLWdpdCBhL2lmMTYzMi9NYWtlZmlsZS5pbiBiL2lmMTYzMi9NYWtlZmlsZS5pbgppbmRleCAzMTFmY2FiLi5kNTVmZTQwIDEwMDY0NAotLS0gYS9pZjE2MzIvTWFrZWZpbGUuaW4KKysrIGIvaWYxNjMyL01ha2VmaWxlLmluCkBAIC01MCwxMCArNTAsMTEgQEAKIAogQVNNX1NSQ1MgPSBcCiAJJChTUEVDX0ZJTEVTKSBcCi0JY2FsbDE2LlMgXAotCWNhbGwzMi5TIFwKLQlleGNlcHQuUyBcCi0Jc3RkY2FsbC5TCisJY2FsbGZyb20xNi5TIFwKKwljYWxsZnJvbTMyLlMgXAorCWNhbGx0bzE2LlMgXAorCWNhbGx0bzMyLlMgXAorCWV4Y2VwdC5TCiAKIC5TVUZGSVhFUzogLnNwZWMKIApAQCAtNjksMTYgKzcwLDE5IEBACiAkKEJVSUxEKSBjaGVja2J1aWxkOgogCWNkICQoVE9QU1JDKS90b29sczsgJChTVUJNQUtFKSBidWlsZAogCi1jYWxsMTYuUzogJChUT1BTUkMpL2luY2x1ZGUvY2FsbGJhY2suaCAkKEJVSUxEKQotCSQoQlVJTEQpIC1jYWxsMTYgYGNhdCAkKFRPUFNSQykvaW5jbHVkZS9jYWxsYmFjay5oIHwgZ3JlcCAiZXh0ZXJuLipDYWxsVG8xNl8iIHwgc2VkICdzLy4qQ2FsbFRvMTZfXCguKlwpKC4qL1wxLycgfCBzb3J0IHwgdW5pcWAgPiBjYWxsMTYuUworY2FsbGZyb20xNi5TOiAkKFNQRUNfRklMRVMpCisJJChCVUlMRCkgLWNhbGxmcm9tMTYgYGNhdCAkKFNQRUNfRklMRVMpIHwgZ3JlcCBDYWxsRnJvbTE2XyB8IHNlZCAncy8uKkNhbGxGcm9tMTZfXCguKlwpL1wxLycgfCBzb3J0IHwgdW5pcWAgPiBjYWxsZnJvbTE2LlMKIAotY2FsbDMyLlM6ICQoU1BFQ19GSUxFUykKLQkkKEJVSUxEKSAtY2FsbDMyIGBjYXQgJChTUEVDX0ZJTEVTKSB8IGdyZXAgQ2FsbFRvMzJfIHwgc2VkICdzLy4qQ2FsbFRvMzJfXCguKlwpL1wxLycgfCBzb3J0IHwgdW5pcWAgPiBjYWxsMzIuUworY2FsbGZyb20zMi5TOiAkKFNQRUNfRklMRVMpCisJJChCVUlMRCkgLWNhbGxmcm9tMzIgYGNhdCAkKFNQRUNfRklMRVMpIHwgZ3JlcCBDYWxsRnJvbTMyXyB8IHNlZCAncy8uKkNhbGxGcm9tMzJfXChbMC05XSpcKS9cMS8nIHwgc29ydCB8IHVuaXFgID4gY2FsbGZyb20zMi5TCiAKLXN0ZGNhbGwuUzogJChTUEVDX0ZJTEVTKQotCSQoQlVJTEQpIC1zdGRjYWxsIGBjYXQgJChTUEVDX0ZJTEVTKSB8IGdyZXAgU3RkY2FsbF8gfCBzZWQgJ3MvLipTdGRjYWxsX1woWzAtOV0qXCkvXDEvJyB8IHNvcnQgfCB1bmlxYCA+IHN0ZGNhbGwuUworY2FsbHRvMTYuUzogJChUT1BTUkMpL2luY2x1ZGUvY2FsbGJhY2suaCAkKEJVSUxEKQorCSQoQlVJTEQpIC1jYWxsdG8xNiBgY2F0ICQoVE9QU1JDKS9pbmNsdWRlL2NhbGxiYWNrLmggfCBncmVwICJleHRlcm4uKkNhbGxUbzE2XyIgfCBzZWQgJ3MvLipDYWxsVG8xNl9cKC4qXCkoLiovXDEvJyB8IHNvcnQgfCB1bmlxYCA+IGNhbGx0bzE2LlMKKworY2FsbHRvMzIuUzogJChUT1BTUkMpL2luY2x1ZGUvY2FsbGJhY2suaCAkKEJVSUxEKQorCSQoQlVJTEQpIC1jYWxsdG8zMiBgY2F0ICQoVE9QU1JDKS9pbmNsdWRlL2NhbGxiYWNrLmggfCBncmVwICJleHRlcm4uKkNhbGxUbzMyXyIgfCBzZWQgJ3MvLipDYWxsVG8zMl9cKC4qXCkoLiovXDEvJyB8IHNvcnQgfCB1bmlxYCA+IGNhbGx0bzMyLlMKIAogY2xlYW46OgotCXJtIC1mICQoU1BFQ19GSUxFUykgY2FsbDMyLlMgY2FsbDE2LlMgc3RkY2FsbC5TCisJcm0gLWYgJChTUEVDX0ZJTEVTKSBjYWxsZnJvbTE2LlMgY2FsbGZyb20zMi5TIGNhbGx0bzE2LlMgY2FsbHRvMzIuUwogCiAjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2NhbGxiYWNrLmMgYi9pZjE2MzIvY2FsbGJhY2suYwppbmRleCA3ZDIyYjE3Li45MWU5MWUyIDEwMDY0NAotLS0gYS9pZjE2MzIvY2FsbGJhY2suYworKysgYi9pZjE2MzIvY2FsbGJhY2suYwpAQCAtMzksOCArMzksNyBAQAogICAgICAgICBmcHJpbnRmKHN0ZGVyciwiV2hlcmUgaXMgdGhlIFdpbjMyIGNhbGxiYWNrP1xuIik7CiAgICAgaWYgKFVzZXNMUGFyYW1QdHIobWVzc2FnZSkpCiAJcmV0dXJuIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2NDb252U3RydWN0KGEtPndpbjMyLGh3bmQsbWVzc2FnZSx3UGFyYW0sbFBhcmFtKTsKLSAgICBlbHNlCi0JcmV0dXJuIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MoYS0+d2luMzIsaHduZCxtZXNzYWdlLHdQYXJhbSxsUGFyYW0pOworICAgIHJldHVybiBDYWxsV25kUHJvYzMyKCAoRkFSUFJPQylhLT53aW4zMiwgaHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0gKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2lmMTYzMi9leGNlcHQuUyBiL2lmMTYzMi9leGNlcHQuUwppbmRleCA2MGNkNzEwLi4yYjUyMmNhIDEwMDY0NAotLS0gYS9pZjE2MzIvZXhjZXB0LlMKKysrIGIvaWYxNjMyL2V4Y2VwdC5TCkBAIC00LDE3ICs0LDIwIEBACiAgKiBDb3B5cmlnaHQgKGMpIDE5OTYgT25ubyBIb3ZlcnMsIChvbm5vQHN0YWNrLnVyYy50dWUubmwpCiAgKgogICovCisjaWYgZGVmaW5lZChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQorI2RlZmluZSBfX0VMRl9fIDEKKyNlbmRpZgogCiAjaWZuZGVmIF9fRUxGX18KKwogICAgICAuZ2xvYmwgX0VYQ19DYWxsVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyCi0gICAgIC5leHRlcm4gX3BUb3BFeGNIYW5kbGVyCi0KICBfRVhDX0NhbGxVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXI6Ci0jZWxzZSAgLyogX19FTEZfXyAqLwotICAgICAuZ2xvYmwgRVhDX0NhbGxVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIKLSAgICAgLmV4dGVybiBwVG9wRXhjSGFuZGxlcgogCisjZWxzZSAgLyogX19FTEZfXyAqLworCisgICAgIC5nbG9ibCBFWENfQ2FsbFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgogIEVYQ19DYWxsVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyOgorCiAjZW5kaWYgIC8qIF9fRUxGX18gKi8KICAgICAgbGVhbCAgIDQoJWVzcCksJWVheAogICAgICBwdXNobCAgJWVheApAQCAtNDUsNTYgKzQ4LDU1IEBACiAgKiB3ZSBwYXNzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXMgYSBmaWZ0aCBwYXJhbWV0ZXIgdG8gQ29udGV4dENhbGwKICAqCiAgKi8KLSAgICAgICAuZXF1IENPTlRFWFRfU2VnU3MsICAgICAgICAtNAotICAgICAgIC5lcXUgQ09OVEVYVF9Fc3AsICAgICAgICAgIC04Ci0gICAgICAgLmVxdSBDT05URVhUX0VGbGFncywgICAgICAgLTEyCi0gICAgICAgLmVxdSBDT05URVhUX1NlZ0NzLCAgICAgICAgLTE2Ci0gICAgICAgLmVxdSBDT05URVhUX0VpcCwgICAgICAgICAgLTIwCi0gICAgICAgLmVxdSBDT05URVhUX0VicCwgICAgICAgICAgLTI0Ci0gICAgICAgLmVxdSBDT05URVhUX0VheCwgICAgICAgICAgLTI4Ci0gICAgICAgLmVxdSBDT05URVhUX0VjeCwgICAgICAgICAgLTMyCi0gICAgICAgLmVxdSBDT05URVhUX0VkeCwgICAgICAgICAgLTM2Ci0gICAgICAgLmVxdSBDT05URVhUX0VieCwgICAgICAgICAgLTQwCi0gICAgICAgLmVxdSBDT05URVhUX0VzaSwgICAgICAgICAgLTQ0Ci0gICAgICAgLmVxdSBDT05URVhUX0VkaSwgICAgICAgICAgLTQ4Ci0gICAgICAgLmVxdSBDT05URVhUX1NlZ0RzLCAgICAgICAgLTUyCi0gICAgICAgLmVxdSBDT05URVhUX1NlZ0VzLCAgICAgICAgLTU2Ci0gICAgICAgLmVxdSBDT05URVhUX1NlZ0ZzLCAgICAgICAgLTYwCi0gICAgICAgLmVxdSBDT05URVhUX1NlZ0dzLCAgICAgICAgLTY0Ci0gICAgICAgLmVxdSBGTE9BVF9DcjBOcHhTdGF0ZSwgICAgLTY4Ci0gICAgICAgLmVxdSBGTE9BVF9SZWdpc3RlckFyZWEsICAgLTE0OAotICAgICAgIC5lcXUgRkxPQVRfRGF0YVNlbGVjdG9yLCAgIC0xNTIKLSAgICAgICAuZXF1IEZMT0FUX0RhdGFPZmZzZXQsICAgICAtMTU2Ci0gICAgICAgLmVxdSBGTE9BVF9FcnJvclNlbGVjdG9yLCAgLTE2MAotICAgICAgIC5lcXUgRkxPQVRfRXJyb3JPZmZzZXQsICAgIC0xNjQKLSAgICAgICAuZXF1IEZMT0FUX1RhZ1dvcmQsICAgICAgICAtMTY4Ci0gICAgICAgLmVxdSBGTE9BVF9TdGF0dXNXb3JkLCAgICAgLTE3MgotICAgICAgIC5lcXUgRkxPQVRfQ29udHJvbFdvcmQsICAgIC0xNzYKLSAgICAgICAuZXF1IENPTlRFWFRfRmxvYXRTYXZlLCAgICAtMTc2Ci0gICAgICAgLmVxdSBDT05URVhUX0RyNywgICAgICAgICAgLTE4MAotICAgICAgIC5lcXUgQ09OVEVYVF9EcjYsICAgICAgICAgIC0xODQKLSAgICAgICAuZXF1IENPTlRFWFRfRHIzLCAgICAgICAgICAtMTg4Ci0gICAgICAgLmVxdSBDT05URVhUX0RyMiwgICAgICAgICAgLTE5MgotICAgICAgIC5lcXUgQ09OVEVYVF9EcjEsICAgICAgICAgIC0xOTYKLSAgICAgICAuZXF1IENPTlRFWFRfRHIwLCAgICAgICAgICAtMjAwCi0gICAgICAgLmVxdSBDT05URVhUX0NvbnRleHRGbGFncywgLTIwNAotICAgICAgIC5lcXUgQ09OVEVYVCwgICAgICAgICAgICAgIC0yMDQKLSAgICAgICAuZXF1IENPTlRFWFRTSVpFLCAgICAgICAgICAgMjA0Ci0gICAgICAgLmVxdSBDT05URVhURkxBR1MsICAgICAgICAgIDB4MTAwMDcKKyNkZWZpbmUgQ09OVEVYVF9TZWdTcyAgICAgICAgLTQKKyNkZWZpbmUgQ09OVEVYVF9Fc3AgICAgICAgICAgLTgKKyNkZWZpbmUgQ09OVEVYVF9FRmxhZ3MgICAgICAgLTEyCisjZGVmaW5lIENPTlRFWFRfU2VnQ3MgICAgICAgIC0xNgorI2RlZmluZSBDT05URVhUX0VpcCAgICAgICAgICAtMjAKKyNkZWZpbmUgQ09OVEVYVF9FYnAgICAgICAgICAgLTI0CisjZGVmaW5lIENPTlRFWFRfRWF4ICAgICAgICAgIC0yOAorI2RlZmluZSBDT05URVhUX0VjeCAgICAgICAgICAtMzIKKyNkZWZpbmUgQ09OVEVYVF9FZHggICAgICAgICAgLTM2CisjZGVmaW5lIENPTlRFWFRfRWJ4ICAgICAgICAgIC00MAorI2RlZmluZSBDT05URVhUX0VzaSAgICAgICAgICAtNDQKKyNkZWZpbmUgQ09OVEVYVF9FZGkgICAgICAgICAgLTQ4CisjZGVmaW5lIENPTlRFWFRfU2VnRHMgICAgICAgIC01MgorI2RlZmluZSBDT05URVhUX1NlZ0VzICAgICAgICAtNTYKKyNkZWZpbmUgQ09OVEVYVF9TZWdGcyAgICAgICAgLTYwCisjZGVmaW5lIENPTlRFWFRfU2VnR3MgICAgICAgIC02NAorI2RlZmluZSBGTE9BVF9DcjBOcHhTdGF0ZSAgICAtNjgKKyNkZWZpbmUgRkxPQVRfUmVnaXN0ZXJBcmVhICAgLTE0OAorI2RlZmluZSBGTE9BVF9EYXRhU2VsZWN0b3IgICAtMTUyCisjZGVmaW5lIEZMT0FUX0RhdGFPZmZzZXQgICAgIC0xNTYKKyNkZWZpbmUgRkxPQVRfRXJyb3JTZWxlY3RvciAgLTE2MAorI2RlZmluZSBGTE9BVF9FcnJvck9mZnNldCAgICAtMTY0CisjZGVmaW5lIEZMT0FUX1RhZ1dvcmQgICAgICAgIC0xNjgKKyNkZWZpbmUgRkxPQVRfU3RhdHVzV29yZCAgICAgLTE3MgorI2RlZmluZSBGTE9BVF9Db250cm9sV29yZCAgICAtMTc2CisjZGVmaW5lIENPTlRFWFRfRmxvYXRTYXZlICAgIC0xNzYKKyNkZWZpbmUgQ09OVEVYVF9EcjcgICAgICAgICAgLTE4MAorI2RlZmluZSBDT05URVhUX0RyNiAgICAgICAgICAtMTg0CisjZGVmaW5lIENPTlRFWFRfRHIzICAgICAgICAgIC0xODgKKyNkZWZpbmUgQ09OVEVYVF9EcjIgICAgICAgICAgLTE5MgorI2RlZmluZSBDT05URVhUX0RyMSAgICAgICAgICAtMTk2CisjZGVmaW5lIENPTlRFWFRfRHIwICAgICAgICAgIC0yMDAKKyNkZWZpbmUgQ09OVEVYVF9Db250ZXh0RmxhZ3MgLTIwNAorI2RlZmluZSBDT05URVhUICAgICAgICAgICAgICAtMjA0CisjZGVmaW5lIENPTlRFWFRTSVpFICAgICAgICAgICAyMDQKKyNkZWZpbmUgQ09OVEVYVEZMQUdTICAgICAgICAgIDB4MTAwMDcKIAotICAgICAgIC5lcXUgT1JJR19FU1AsICAgICAgICAgICAgICAxNiAgICAgICAgIC8qKiBjZGVjbCAhISEgKiovCi0gICAgICAgLmVxdSBQQVJNX0FSRzQsICAgICAgICAgICAgIDI4Ci0gICAgICAgLmVxdSBQQVJNX0FSRzMsICAgICAgICAgICAgIDI0Ci0gICAgICAgLmVxdSBQQVJNX0FSRzIsICAgICAgICAgICAgIDIwCi0gICAgICAgLmVxdSBQQVJNX0FSRzEsICAgICAgICAgICAgIDE2Ci0gICAgICAgLmVxdSBQQVJNX1JFVFVSTiwgICAgICAgICAgIDEyCi0gICAgICAgLmVxdSBQQVJNX0NBTExGVU5DLCAgICAgICAgIDgKLSAgICAgICAuZXF1IFBBUk1fRUJQLCAgICAgICAgICAgICAgNAotICAgICAgIC5lcXUgUEFSTV9FRkxBR1MsICAgICAgICAgICAwCisjZGVmaW5lIE9SSUdfRVNQICAgICAgICAgICAgICAxNiAgICAgICAgIC8qKiBjZGVjbCAhISEgKiovCisjZGVmaW5lIFBBUk1fQVJHNCAgICAgICAgICAgICAyOAorI2RlZmluZSBQQVJNX0FSRzMgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUEFSTV9BUkcyICAgICAgICAgICAgIDIwCisjZGVmaW5lIFBBUk1fQVJHMSAgICAgICAgICAgICAxNgorI2RlZmluZSBQQVJNX1JFVFVSTiAgICAgICAgICAgMTIKKyNkZWZpbmUgUEFSTV9DQUxMRlVOQyAgICAgICAgIDgKKyNkZWZpbmUgUEFSTV9FQlAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUEFSTV9FRkxBR1MgICAgICAgICAgIDAKIAogI2lmbmRlZiBfX0VMRl9fCiAJLmdsb2JsIF9SYWlzZUV4Y2VwdGlvbgotICAgICAgICAuZXh0ZXJuIF9FWENfUmFpc2VFeGNlcHRpb24KIAogIF9SYWlzZUV4Y2VwdGlvbjoKICAgICAgICBwdXNoICAgJF9FWENfUmFpc2VFeGNlcHRpb24KQEAgLTEwNyw3ICsxMDksNiBAQAogCiAjZWxzZSAgLyogX19FTEZfXyAqLwogICAgICAgIC5nbG9ibCBSYWlzZUV4Y2VwdGlvbgotICAgICAgIC5leHRlcm4gRVhDX1JhaXNlRXhjZXB0aW9uCiAKICBSYWlzZUV4Y2VwdGlvbjoKICAgICAgICBwdXNoICAgJEVYQ19SYWlzZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvaWYxNjMyL3JlbGF5LmMgYi9pZjE2MzIvcmVsYXkuYwppbmRleCBjMzk2MGJhLi45ZGFhY2MxIDEwMDY0NAotLS0gYS9pZjE2MzIvcmVsYXkuYworKysgYi9pZjE2MzIvcmVsYXkuYwpAQCAtMjUsNDMgKzI1LDU5IEBACiAKIEJVSUxUSU5fRExMIGRsbF9idWlsdGluX3RhYmxlW10gPQogewotICAgIERMTF9FTlRSWSggS0VSTkVMLCAgIDApLAotICAgIERMTF9FTlRSWSggVVNFUiwgICAgIDApLAotICAgIERMTF9FTlRSWSggR0RJLCAgICAgIDApLAotICAgIERMTF9FTlRSWSggV0lOODdFTSwgIERMTF9GTEFHX05PVF9VU0VEKSwKLSAgICBETExfRU5UUlkoIFNIRUxMLCAgICAwKSwKLSAgICBETExfRU5UUlkoIFNPVU5ELCAgICAwKSwKLSAgICBETExfRU5UUlkoIEtFWUJPQVJELCAwKSwKLSAgICBETExfRU5UUlkoIFdJTlNPQ0ssICAwKSwKLSAgICBETExfRU5UUlkoIFNUUkVTUywgICAwKSwKLSAgICBETExfRU5UUlkoIE1NU1lTVEVNLCAwKSwKLSAgICBETExfRU5UUlkoIFNZU1RFTSwgICAwKSwKLSAgICBETExfRU5UUlkoIFRPT0xIRUxQLCAwKSwKLSAgICBETExfRU5UUlkoIE1PVVNFLCAgICAwKSwKLSAgICBETExfRU5UUlkoIENPTU1ETEcsICBETExfRkxBR19OT1RfVVNFRCksCi0gICAgRExMX0VOVFJZKCBPTEUyLCAgICAgRExMX0ZMQUdfTk9UX1VTRUQpLAotICAgIERMTF9FTlRSWSggT0xFMkNPTlYsIERMTF9GTEFHX05PVF9VU0VEKSwKLSAgICBETExfRU5UUlkoIE9MRTJESVNQLCBETExfRkxBR19OT1RfVVNFRCksCi0gICAgRExMX0VOVFJZKCBPTEUyTkxTLCAgRExMX0ZMQUdfTk9UX1VTRUQpLAotICAgIERMTF9FTlRSWSggT0xFMlBST1gsIERMTF9GTEFHX05PVF9VU0VEKSwKLSAgICBETExfRU5UUlkoIE9MRUNMSSwgICBETExfRkxBR19OT1RfVVNFRCksCi0gICAgRExMX0VOVFJZKCBPTEVTVlIsICAgRExMX0ZMQUdfTk9UX1VTRUQpLAotICAgIERMTF9FTlRSWSggQ09NUE9CSiwgIERMTF9GTEFHX05PVF9VU0VEKSwKLSAgICBETExfRU5UUlkoIFNUT1JBR0UsICBETExfRkxBR19OT1RfVVNFRCksCi0gICAgRExMX0VOVFJZKCBXSU5QUk9DUywgMCksCi0gICAgRExMX0VOVFJZKCBEREVNTCwgICAgRExMX0ZMQUdfTk9UX1VTRUQpLAotICAgIERMTF9FTlRSWSggTFpFWFBBTkQsIDApLAotICAgIHsgTlVMTCwgfSAgLyogTGFzdCBlbnRyeSAqLworICAgIC8qIFdpbjE2IERMTHMgKi8KKyAgICBETExfRU5UUlkoIEtFUk5FTCwgICAgIERMTF9GTEFHX0FMV0FZU19VU0VEKSwKKyAgICBETExfRU5UUlkoIFVTRVIsICAgICAgIERMTF9GTEFHX0FMV0FZU19VU0VEKSwKKyAgICBETExfRU5UUlkoIEdESSwgICAgICAgIERMTF9GTEFHX0FMV0FZU19VU0VEKSwKKyAgICBETExfRU5UUlkoIFdJTjg3RU0sICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIFNIRUxMLCAgICAgIDApLAorICAgIERMTF9FTlRSWSggU09VTkQsICAgICAgMCksCisgICAgRExMX0VOVFJZKCBLRVlCT0FSRCwgICAwKSwKKyAgICBETExfRU5UUlkoIFdJTlNPQ0ssICAgIDApLAorICAgIERMTF9FTlRSWSggU1RSRVNTLCAgICAgMCksCisgICAgRExMX0VOVFJZKCBNTVNZU1RFTSwgICAwKSwKKyAgICBETExfRU5UUlkoIFNZU1RFTSwgICAgIDApLAorICAgIERMTF9FTlRSWSggVE9PTEhFTFAsICAgMCksCisgICAgRExMX0VOVFJZKCBNT1VTRSwgICAgICAwKSwKKyAgICBETExfRU5UUlkoIENPTU1ETEcsICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRTIsICAgICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRTJDT05WLCAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRTJESVNQLCAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRTJOTFMsICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRTJQUk9YLCAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRUNMSSwgICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIE9MRVNWUiwgICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIENPTVBPQkosICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIFNUT1JBR0UsICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIFdJTlBST0NTLCAgIERMTF9GTEFHX0FMV0FZU19VU0VEKSwKKyAgICBETExfRU5UUlkoIERERU1MLCAgICAgIERMTF9GTEFHX05PVF9VU0VEKSwKKyAgICBETExfRU5UUlkoIExaRVhQQU5ELCAgIDApLAorICAgIC8qIFdpbjMyIERMTHMgKi8KKyAgICBETExfRU5UUlkoIEFEVkFQSTMyLCAgIDApLAorICAgIERMTF9FTlRSWSggQ09NQ1RMMzIsICAgMCksCisgICAgRExMX0VOVFJZKCBDT01ETEczMiwgICAwKSwKKyAgICBETExfRU5UUlkoIE9MRTMyLCAgICAgIDApLAorICAgIERMTF9FTlRSWSggR0RJMzIsICAgICAgMCksCisgICAgRExMX0VOVFJZKCBLRVJORUwzMiwgICBETExfRkxBR19BTFdBWVNfVVNFRCksCisgICAgRExMX0VOVFJZKCBTSEVMTDMyLCAgICAwKSwKKyAgICBETExfRU5UUlkoIFVTRVIzMiwgICAgIDApLAorICAgIERMTF9FTlRSWSggV0lOUFJPQ1MzMiwgRExMX0ZMQUdfQUxXQVlTX1VTRUQpLAorICAgIERMTF9FTlRSWSggV0lOU1BPT0wsICAgMCksCisgICAgLyogTGFzdCBlbnRyeSAqLworICAgIHsgTlVMTCwgfQogfTsKIAotICAvKiBTYXZlZCAxNi1iaXQgc3RhY2sgKi8KKyAgLyogU2F2ZWQgMTYtYml0IHN0YWNrIGZvciBjdXJyZW50IHByb2Nlc3MgKFdpbjE2IG9ubHkpICovCiBXT1JEIElGMTYzMl9TYXZlZDE2X3NzID0gMDsKIFdPUkQgSUYxNjMyX1NhdmVkMTZfc3AgPSAwOwogCi0gIC8qIFNhdmVkIDMyLWJpdCBzdGFjayAqLworICAvKiBTYXZlZCAzMi1iaXQgc3RhY2sgZm9yIGN1cnJlbnQgcHJvY2VzcyAoV2luMTYgb25seSkgKi8KIERXT1JEIElGMTYzMl9TYXZlZDMyX2VzcCA9IDA7CiBTRUdQVFIgSUYxNjMyX1N0YWNrMzJfYmFzZSA9IDA7Ci1EV09SRCBJRjE2MzJfT3JpZ2luYWwzMl9lc3AgPSAwOworCisgIC8qIE9yaWdpbmFsIFVuaXggc3RhY2sgKi8KK0RXT1JEIElGMTYzMl9PcmlnaW5hbDMyX2VzcDsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBSRUxBWV9Jbml0CkBAIC03MiwyMCArODgsMjAgQEAKIAogICAgICAgLyogQWxsb2NhdGUgdGhlIGNvZGUgc2VsZWN0b3IgZm9yIENhbGxUbzE2IHJvdXRpbmVzICovCiAKLSAgICBleHRlcm4gdm9pZCBDQUxMMTZfU3RhcnQoKSwgQ0FMTDE2X0VuZCgpOwotICAgIGV4dGVybiB2b2lkIENBTEwxNl9SZXRfd29yZCgpLCBDQUxMMTZfUmV0X2xvbmcoKTsKLSAgICBleHRlcm4gRFdPUkQgQ0FMTDE2X1JldEFkZHJfd29yZCwgQ0FMTDE2X1JldEFkZHJfbG9uZzsKKyAgICBleHRlcm4gdm9pZCBDQUxMVE8xNl9TdGFydCgpLCBDQUxMVE8xNl9FbmQoKTsKKyAgICBleHRlcm4gdm9pZCBDQUxMVE8xNl9SZXRfd29yZCgpLCBDQUxMVE8xNl9SZXRfbG9uZygpOworICAgIGV4dGVybiBEV09SRCBDQUxMVE8xNl9SZXRBZGRyX3dvcmQsIENBTExUTzE2X1JldEFkZHJfbG9uZzsKIAotICAgIGNvZGVzZWwgPSBHTE9CQUxfQ3JlYXRlQmxvY2soIEdNRU1fRklYRUQsICh2b2lkICopQ0FMTDE2X1N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KUNBTEwxNl9FbmQgLSAoaW50KUNBTEwxNl9TdGFydCwKKyAgICBjb2Rlc2VsID0gR0xPQkFMX0NyZWF0ZUJsb2NrKCBHTUVNX0ZJWEVELCAodm9pZCAqKUNBTExUTzE2X1N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KUNBTExUTzE2X0VuZCAtIChpbnQpQ0FMTFRPMTZfU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFRSVUUsIFRSVUUsIEZBTFNFLCBOVUxMICk7CiAgICAgaWYgKCFjb2Rlc2VsKSByZXR1cm4gRkFMU0U7CiAKICAgICAgIC8qIFBhdGNoIHRoZSByZXR1cm4gYWRkcmVzc2VzIGZvciBDYWxsVG8xNiByb3V0aW5lcyAqLwogCi0gICAgQ0FMTDE2X1JldEFkZHJfd29yZCA9IE1BS0VMT05HKCAoaW50KUNBTEwxNl9SZXRfd29yZCAtIChpbnQpQ0FMTDE2X1N0YXJ0LAorICAgIENBTExUTzE2X1JldEFkZHJfd29yZD1NQUtFTE9ORyggKGludClDQUxMVE8xNl9SZXRfd29yZC0oaW50KUNBTExUTzE2X1N0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNlbCApOwotICAgIENBTEwxNl9SZXRBZGRyX2xvbmcgPSBNQUtFTE9ORyggKGludClDQUxMMTZfUmV0X2xvbmcgLSAoaW50KUNBTEwxNl9TdGFydCwKKyAgICBDQUxMVE8xNl9SZXRBZGRyX2xvbmc9TUFLRUxPTkcoIChpbnQpQ0FMTFRPMTZfUmV0X2xvbmctKGludClDQUxMVE8xNl9TdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZWwgKTsKIAogICAgIHJldHVybiBUUlVFOwpAQCAtOTMsMTAgKzEwOSwxMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFJFTEFZX0RlYnVnQ2FsbDMyCisgKiAgICAgICAgICAgUkVMQVlfRGVidWdDYWxsRnJvbTE2CiAgKi8KLXZvaWQgUkVMQVlfRGVidWdDYWxsMzIoIGludCBmdW5jX3R5cGUsIGNoYXIgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbnRyeV9wb2ludCwgaW50IGFyZ3MzMiApCit2b2lkIFJFTEFZX0RlYnVnQ2FsbEZyb20xNiggaW50IGZ1bmNfdHlwZSwgY2hhciAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbnRyeV9wb2ludCwgaW50IGFyZ3MzMiApCiB7CiAgICAgU1RBQ0sxNkZSQU1FICpmcmFtZTsKICAgICBzdHJ1Y3QgZGxsX3RhYmxlX3MgKnRhYmxlOwpAQCAtMTYyLDkgKzE3OCw5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUkVMQVlfRGVidWdSZXR1cm4KKyAqICAgICAgICAgICBSRUxBWV9EZWJ1Z0NhbGxGcm9tMTZSZXQKICAqLwotdm9pZCBSRUxBWV9EZWJ1Z1JldHVybiggaW50IGZ1bmNfdHlwZSwgaW50IHJldF92YWwsIGludCBhcmdzMzIgKQordm9pZCBSRUxBWV9EZWJ1Z0NhbGxGcm9tMTZSZXQoIGludCBmdW5jX3R5cGUsIGludCByZXRfdmFsLCBpbnQgYXJnczMyICkKIHsKICAgICBTVEFDSzE2RlJBTUUgKmZyYW1lOwogICAgIHN0cnVjdCBkbGxfdGFibGVfcyAqdGFibGU7CkBAIC0yMzAsNyArMjQ2LDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgdW5pbXBsZW1lbnRlZCAzMi1iaXQgZW50cnkgcG9pbnRzIChkZWNsYXJlZAogICogYXMgJ3N0dWInIGluIHRoZSBzcGVjIGZpbGUpLgotICogKFRoZSBhcmdzIGFyZSB0aGUgc2FtZSB0aGFuIGZvciBSRUxBWV9EZWJ1Z1N0ZGNhbGwpLgorICogKFRoZSBhcmdzIGFyZSB0aGUgc2FtZSB0aGFuIGZvciBSRUxBWV9EZWJ1Z0NhbGxGcm9tMzIpLgogICovCiB2b2lkIFJFTEFZX1VuaW1wbGVtZW50ZWQzMiggaW50IG5iX2FyZ3MsIHZvaWQgKmVudHJ5X3BvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSApCkBAIC0yNDEsNyArMjU3LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBSRUxBWV9EZWJ1Z0NhbGwxNgorICogICAgICAgICAgIFJFTEFZX0RlYnVnQ2FsbFRvMTYKICAqCiAgKiAnc3RhY2snIHBvaW50cyB0byB0aGUgY2FsbGVkIGZ1bmN0aW9uIGFkZHJlc3Mgb24gdGhlIDMyLWJpdCBzdGFjay4KICAqIFN0YWNrIGxheW91dDoKQEAgLTI1MSw3ICsyNjcsNyBAQAogICogKHN0YWNrKzQpICAgMTYtYml0IGRzCiAgKiAoc3RhY2spICAgICBmdW5jIHRvIGNhbGwKICAqLwotdm9pZCBSRUxBWV9EZWJ1Z0NhbGwxNiggaW50KiBzdGFjaywgaW50IG5iYXJncyApCit2b2lkIFJFTEFZX0RlYnVnQ2FsbFRvMTYoIGludCogc3RhY2ssIGludCBuYmFyZ3MgKQogewogICAgIGlmICghZGVidWdnaW5nX3JlbGF5KSByZXR1cm47CiAKQEAgLTI2NCwxMCArMjgwLDExIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUkVMQVlfRGVidWdTdGRjYWxsCisgKiAgICAgICAgICAgUkVMQVlfRGVidWdDYWxsRnJvbTMyCiAgKi8KLXZvaWQgUkVMQVlfRGVidWdTdGRjYWxsKCBpbnQgbmJfYXJncywgdm9pZCAqZW50cnlfcG9pbnQsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWJwLCBpbnQgcmV0X2FkZHIsIGludCBhcmcxICkKK3ZvaWQgUkVMQVlfRGVidWdDYWxsRnJvbTMyKCBpbnQgbmJfYXJncywgdm9pZCAqZW50cnlfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY19uYW1lLCBpbnQgZWJwLCBpbnQgcmV0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEgKQogewogICAgIGludCAgKnBhcmc7CiAgICAgaWYgKCFkZWJ1Z2dpbmdfcmVsYXkpIHJldHVybjsKQEAgLTI4MiwxMiArMjk5LDI4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUkVMQVlfRGVidWdTdGRjYWxsUmV0CisgKiAgICAgICAgICAgUkVMQVlfRGVidWdDYWxsRnJvbTMyUmV0CiAgKi8KLXZvaWQgUkVMQVlfRGVidWdTdGRjYWxsUmV0KCBpbnQgcmV0X3ZhbCwgdm9pZCAqZW50cnlfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY19uYW1lLCBpbnQgZWJwLCBpbnQgcmV0X2FkZHIgKQordm9pZCBSRUxBWV9EZWJ1Z0NhbGxGcm9tMzJSZXQoIGludCByZXRfdmFsLCB2b2lkICplbnRyeV9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jX25hbWUsIGludCBlYnAsIGludCByZXRfYWRkciApCiB7CiAgICAgaWYgKCFkZWJ1Z2dpbmdfcmVsYXkpIHJldHVybjsKICAgICBwcmludGYoICJSZXQgICVzKCkgcmV0dmFsPTB4JTA4eCByZXQ9JTA4eFxuIiwKICAgICAgICAgICAgIGZ1bmNfbmFtZSwgcmV0X3ZhbCwgcmV0X2FkZHIgKTsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBSRUxBWV9EZWJ1Z0NhbGxUbzMyCisgKi8KK3ZvaWQgUkVMQVlfRGVidWdDYWxsVG8zMiggdW5zaWduZWQgaW50IGZ1bmMsIGludCBuYmFyZ3MsIHVuc2lnbmVkIGludCBhcmcxICApCit7CisgICAgdW5zaWduZWQgaW50ICphcmdwdHI7CisKKyAgICBpZiAoIWRlYnVnZ2luZ19yZWxheSkgcmV0dXJuOworCisgICAgcHJpbnRmKCAiQ2FsbFRvMzIoZnVuYz0lMDh4IiwgZnVuYyApOworICAgIGZvciAoYXJncHRyID0gJmFyZzE7IG5iYXJnczsgbmJhcmdzLS0sIGFyZ3B0cisrKQorICAgICAgICBwcmludGYoICIsJTA4eCIsICphcmdwdHIgKTsKKyAgICBwcmludGYoICIpXG4iICk7Cit9CmRpZmYgLS1naXQgYS9pZjE2MzIvcmVsYXkzMi5jIGIvaWYxNjMyL3JlbGF5MzIuYwppbmRleCA0MThmMWNjLi4xNGQ5OGE0IDEwMDY0NAotLS0gYS9pZjE2MzIvcmVsYXkzMi5jCisrKyBiL2lmMTYzMi9yZWxheTMyLmMKQEAgLTExLDEwICsxMSwxMCBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiZGxscy5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgIm5lZXhlLmgiCi0jaW5jbHVkZSAicGVfaW1hZ2UuaCIKICNpbmNsdWRlICJwZWV4ZS5oIgogI2luY2x1ZGUgInJlbGF5MzIuaCIKICNpbmNsdWRlICJzdHJ1Y3QzMi5oIgpAQCAtMjQsMTE2ICsyNCw1NyBAQAogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotI2RlZmluZSBETExfRU5UUlkobmFtZSkgXAotICB7ICNuYW1lLCAoV0lOMzJfZnVuY3Rpb24gKiluYW1lIyNfTW9kdWxlX1N0YXJ0LCBcCi0gICAgKFdJTjMyX2Z1bmN0aW9uICopbmFtZSMjX01vZHVsZV9FbmQsIChpbnQgKiluYW1lIyNfRGF0YV9TdGFydCwgTlVMTCB9Ci0KLXN0YXRpYyBXSU4zMl9idWlsdGluIFdJTjMyX2J1aWx0aW5fbGlzdFtdID0KK3R5cGVkZWYgc3RydWN0CiB7Ci0gICAgRExMX0VOVFJZKEFEVkFQSTMyKSwKLSAgICBETExfRU5UUlkoQ09NQ1RMMzIpLAotICAgIERMTF9FTlRSWShDT01ETEczMiksCi0gICAgRExMX0VOVFJZKE9MRTMyKSwKLSAgICBETExfRU5UUlkoR0RJMzIpLAotICAgIERMTF9FTlRSWShLRVJORUwzMiksCi0gICAgRExMX0VOVFJZKFNIRUxMMzIpLAotICAgIERMTF9FTlRSWShVU0VSMzIpLAotICAgIERMTF9FTlRSWShXSU5QUk9DUzMyKSwKLSAgICBETExfRU5UUlkoV0lOU1BPT0wpCi19OworICAgIGNoYXIgKm5hbWU7CisgICAgdm9pZCAqZGVmaW5pdGlvbjsKK30gV0lOMzJfZnVuY3Rpb247CiAKLSNkZWZpbmUgTkJfRExMUyAoc2l6ZW9mKFdJTjMyX2J1aWx0aW5fbGlzdCkvc2l6ZW9mKFdJTjMyX2J1aWx0aW5fbGlzdFswXSkpCi0KLXN0YXRpYyB2b2lkIFJFTEFZMzJfTWFrZUZha2VNb2R1bGUoV0lOMzJfYnVpbHRpbipkbGwpOwotCi1pbnQgUkVMQVkzMl9Jbml0KHZvaWQpCit0eXBlZGVmIHN0cnVjdAogeworICAgIGludCBiYXNlOworICAgIGludCBzaXplOworICAgIFdJTjMyX2Z1bmN0aW9uIGZ1bmN0aW9uc1sxXTsKK30gV0lOMzJfRExMX0lORk87CisKKwordm9pZCAqUkVMQVkzMl9HZXRFbnRyeVBvaW50KEJVSUxUSU5fRExMICpkbGwsIGNoYXIgKml0ZW0sIGludCBoaW50KQoreworICAgIGNvbnN0IFdJTjMyX0RMTF9JTkZPICppbmZvID0gKGNvbnN0IFdJTjMyX0RMTF9JTkZPICopZGxsLT5kYXRhX3N0YXJ0OwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IE5CX0RMTFM7IGkrKykKLSAgICAgICAgUkVMQVkzMl9NYWtlRmFrZU1vZHVsZSggJldJTjMyX2J1aWx0aW5fbGlzdFtpXSApOworICAgIGRwcmludGZfbW9kdWxlKHN0ZGRlYiwgIkxvb2tpbmcgZm9yICVzIGluICVzLCBoaW50ICV4XG4iLAorICAgICAgICAgICAgICAgICAgIGl0ZW0gPyBpdGVtOiAiKG5vIG5hbWUpIiwgZGxsLT5uYW1lLCBoaW50KTsKKyAgICBpZighZGxsKSByZXR1cm4gMDsKIAotICAgIC8qIFdoeSBzaG91bGQgaXQgZmFpbCwgYW55d2F5cz8gKi8KLSAgICByZXR1cm4gMTsKLX0KKyAgICAvKiBpbXBvcnQgYnkgb3JkaW5hbCAqLworICAgIGlmKCFpdGVtKQorICAgIHsKKyAgICAgICAgaWYoaGludCAmJiBoaW50IDwgaW5mby0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbmZvLT5mdW5jdGlvbnNbaGludCAtIGluZm8tPmJhc2VdLmRlZmluaXRpb247CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotV0lOMzJfYnVpbHRpbiAqUkVMQVkzMl9HZXRCdWlsdGluRExMKGNoYXIgKm5hbWUpCi17Ci0JV0lOMzJfYnVpbHRpbiAqaXQ7Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICpjcDsKLSAgICAgICAgaW50IGk7CisgICAgLyogaGludCBpcyBjb3JyZWN0ICovCisgICAgaWYgKGhpbnQgJiYgaGludCA8IGluZm8tPnNpemUgJiYgCisgICAgICAgIGluZm8tPmZ1bmN0aW9uc1toaW50XS5uYW1lICYmCisgICAgICAgIHN0cmNtcChpdGVtLGluZm8tPmZ1bmN0aW9uc1toaW50XS5uYW1lKT09MCkKKyAgICAgICAgcmV0dXJuIGluZm8tPmZ1bmN0aW9uc1toaW50XS5kZWZpbml0aW9uOwogCi0JbGVuID0gKGNwPXN0cmNocihuYW1lLCcuJykpID8gKGNwLW5hbWUpIDogc3RybGVuKG5hbWUpOwotCWZvcihpID0gTkJfRExMUywgaXQgPSBXSU4zMl9idWlsdGluX2xpc3Q7IChpID4gMCk7IGktLSwgaXQrKykKLSAgICAgICAgICAgIGlmICghbHN0cm5jbXBpKG5hbWUsaXQtPm5hbWUsbGVuKSkgcmV0dXJuIGl0OwotCXJldHVybiBOVUxMOwotfQorICAgIC8qIGhpbnQgaXMgaW5jb3JyZWN0LCBzZWFyY2ggZm9yIG5hbWUgKi8KKyAgICBmb3IoaT0wO2kgPCBpbmZvLT5zaXplO2krKykKKyAgICAgICAgaWYgKGluZm8tPmZ1bmN0aW9uc1tpXS5uYW1lICYmICFzdHJjbXAoaXRlbSxpbmZvLT5mdW5jdGlvbnNbaV0ubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gaW5mby0+ZnVuY3Rpb25zW2ldLmRlZmluaXRpb247CiAKLXZvaWQgUkVMQVkzMl9VbmltcGxlbWVudGVkKGNoYXIgKmRsbCwgaW50IGl0ZW0pCi17Ci0JV0lOMzJfYnVpbHRpbiAqRGxsOwotCWZwcmludGYoIHN0ZGVyciwgIk5vIGhhbmRsZXIgZm9yIHJvdXRpbmUgJXMuJWQiLCBkbGwsIGl0ZW0pOwotCURsbD1SRUxBWTMyX0dldEJ1aWx0aW5ETEwoZGxsKTsKLQlpZihEbGwgJiYgRGxsLT5mdW5jdGlvbnNbaXRlbV0ubmFtZSkKLQkJZnByaW50ZihzdGRlcnIsICIoJXM/KVxuIiwgRGxsLT5mdW5jdGlvbnNbaXRlbV0ubmFtZSk7Ci0JZWxzZQotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JZmZsdXNoKHN0ZGVycik7Ci0JZXhpdCgxKTsKLX0KLQotdm9pZCAqUkVMQVkzMl9HZXRFbnRyeVBvaW50KFdJTjMyX2J1aWx0aW4gKmRsbCwgY2hhciAqaXRlbSwgaW50IGhpbnQpCi17Ci0JaW50IGksIHNpemU7Ci0KLQlkcHJpbnRmX21vZHVsZShzdGRkZWIsICJMb29raW5nIGZvciAlcyBpbiAlcywgaGludCAleFxuIiwKLQkJaXRlbSA/IGl0ZW06ICIobm8gbmFtZSkiLCBkbGwtPm5hbWUsIGhpbnQpOwotCWlmKCFkbGwpCi0JCXJldHVybiAwOwotICAgICAgICBzaXplID0gKGludCkoZGxsLT5sYXN0X2Z1bmMgLSBkbGwtPmZ1bmN0aW9ucyk7Ci0KLQkvKiBpbXBvcnQgYnkgb3JkaW5hbCAqLwotCWlmKCFpdGVtKXsKLQkJaWYoaGludCAmJiBoaW50IDwgc2l6ZSkKLQkJCXJldHVybiBkbGwtPmZ1bmN0aW9uc1toaW50IC0gKmRsbC0+YmFzZV0uZGVmaW5pdGlvbjsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIGhpbnQgaXMgY29ycmVjdCAqLwotCWlmKGhpbnQgJiYgaGludCA8IHNpemUgJiYgCi0JCWRsbC0+ZnVuY3Rpb25zW2hpbnRdLm5hbWUgJiYKLQkJc3RyY21wKGl0ZW0sZGxsLT5mdW5jdGlvbnNbaGludF0ubmFtZSk9PTApCi0JCXJldHVybiBkbGwtPmZ1bmN0aW9uc1toaW50XS5kZWZpbml0aW9uOwotCS8qIGhpbnQgaXMgaW5jb3JyZWN0LCBzZWFyY2ggZm9yIG5hbWUgKi8KLQlmb3IoaT0wO2kgPCBzaXplO2krKykKLSAgICAgICAgICAgIGlmIChkbGwtPmZ1bmN0aW9uc1tpXS5uYW1lICYmICFzdHJjbXAoaXRlbSxkbGwtPmZ1bmN0aW9uc1tpXS5uYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZGxsLT5mdW5jdGlvbnNbaV0uZGVmaW5pdGlvbjsKLQotCS8qIGZ1bmN0aW9uIGF0IGhpbnQgaGFzIG5vIG5hbWUgKHVuaW1wbGVtZW50ZWQpICovCi0JaWYoaGludCAmJiBoaW50IDwgc2l6ZSAmJiAhZGxsLT5mdW5jdGlvbnNbaGludF0ubmFtZSkKLQl7Ci0JCWRsbC0+ZnVuY3Rpb25zW2hpbnRdLm5hbWU9eHN0cmR1cChpdGVtKTsKLQkJZHByaW50Zl9tb2R1bGUoc3RkZGViLCAiUmV0dXJuaW5nIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXMuJWRcbiIsCi0JCQlkbGwtPm5hbWUsaGludCk7Ci0JCXJldHVybiBkbGwtPmZ1bmN0aW9uc1toaW50XS5kZWZpbml0aW9uOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotTE9ORyBSRUxBWTMyX0NhbGxXaW5kb3dQcm9jKCBXTkRQUk9DIGZ1bmMsIGludCBod25kLCBpbnQgbWVzc2FnZSwKLSAgICAgICAgICAgICBpbnQgd1BhcmFtLCBpbnQgbFBhcmFtICkKLXsKLQlpbnQgcmV0OwotCV9fYXNtX18gKAotCQkicHVzaCAlMTsiCi0JCSJwdXNoICUyOyIKLQkJInB1c2ggJTM7IgotCQkicHVzaCAlNDsiCi0JCSJjYWxsICU1OyIKLQkJOiAiPWEiIChyZXQpCi0JCTogImciIChsUGFyYW0pLCAiZyIgKHdQYXJhbSksICJnIiAobWVzc2FnZSksICJnIiAoaHduZCksICJnIiAoZnVuYykKLQkpOwotCXJldHVybiByZXQ7CisgICAgLyogZnVuY3Rpb24gYXQgaGludCBoYXMgbm8gbmFtZSAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICBpZihoaW50ICYmIGhpbnQgPCBpbmZvLT5zaXplICYmICFpbmZvLT5mdW5jdGlvbnNbaGludF0ubmFtZSkKKyAgICB7CisvKiAgICAgICAgaW5mby0+ZnVuY3Rpb25zW2hpbnRdLm5hbWU9eHN0cmR1cChpdGVtKTsgKi8KKyAgICAgICAgZHByaW50Zl9tb2R1bGUoc3RkZGViLCJSZXR1cm5pbmcgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlcy4lZCAoJXM/KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZGxsLT5uYW1lLGhpbnQsaXRlbSk7CisgICAgICAgIHJldHVybiBpbmZvLT5mdW5jdGlvbnNbaGludF0uZGVmaW5pdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIExPTkcgUkVMQVkzMl9DYWxsV2luZG93UHJvY0NvbnZTdHJ1Y3QoIFdORFBST0MgZnVuYywgaW50IGh3bmQsIGludCBtZXNzYWdlLApAQCAtMTQ5LDE4ICs5MCwxOCBAQAogCUxPTkcgcmVzdWx0OwogCXZvaWQgKmxQYXJhbTsKIAlpZighbFBhcmFtMTYpCi0JCXJldHVybiBSRUxBWTMyX0NhbGxXaW5kb3dQcm9jKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KWxQYXJhbTE2KTsKKwkJcmV0dXJuIENhbGxXbmRQcm9jMzIoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpbFBhcmFtMTYpOwogCWxQYXJhbSA9IFBUUl9TRUdfVE9fTElOKGxQYXJhbTE2KTsKIAlzd2l0Y2gobWVzc2FnZSkgewogCQljYXNlIFdNX0dFVE1JTk1BWElORk86CiAJCQlTVFJVQ1QzMl9NSU5NQVhJTkZPMTZ0bzMyKGxQYXJhbSwmc3QubW1pKTsKLQkJCXJlc3VsdD1SRUxBWTMyX0NhbGxXaW5kb3dQcm9jKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KSZzdC5tbWkpOworCQkJcmVzdWx0PUNhbGxXbmRQcm9jMzIoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpJnN0Lm1taSk7CiAJCQlTVFJVQ1QzMl9NSU5NQVhJTkZPMzJ0bzE2KCZzdC5tbWksbFBhcmFtKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCWNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6CiAJCWNhc2UgV01fV0lORE9XUE9TQ0hBTkdFRDoKIAkJCVNUUlVDVDMyX1dJTkRPV1BPUzE2dG8zMihsUGFyYW0sJndwKTsKLQkJCXJlc3VsdD1SRUxBWTMyX0NhbGxXaW5kb3dQcm9jKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KSZ3cCk7CisJCQlyZXN1bHQ9Q2FsbFduZFByb2MzMihmdW5jLGh3bmQsbWVzc2FnZSx3UGFyYW0sKGludCkmd3ApOwogCQkJU1RSVUNUMzJfV0lORE9XUE9TMzJ0bzE2KCZ3cCxsUGFyYW0pOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJY2FzZSBXTV9OQ0NBTENTSVpFOgpAQCAtMTcwLDcgKzExMSw3IEBACiAJCQkJc3QubmNjcy5scHBvcz0md3A7CiAJCQl9IGVsc2UKIAkJCQlzdC5uY2NzLmxwcG9zPSAwOwotCQkJcmVzdWx0PVJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpJnN0Lm5jY3MpOworCQkJcmVzdWx0PUNhbGxXbmRQcm9jMzIoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpJnN0Lm5jY3MpOwogCQkJU1RSVUNUMzJfTkNDQUxDU0laRTMydG8xNkZsYXQoJnN0Lm5jY3MsbFBhcmFtKTsKIAkJCWlmKCgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zKQogCQkJCVNUUlVDVDMyX1dJTkRPV1BPUzMydG8xNigmd3AsKChOQ0NBTENTSVpFX1BBUkFNUyopbFBhcmFtKS0+bHBwb3MpOwpAQCAtMTgyLDcgKzEyMyw3IEBACiAJCQkJUFRSX1NFR19UT19MSU4obHBjcy0+bHBzek5hbWUpIDogKGNoYXIqKWxwY3MtPmxwc3pOYW1lOwogCQkJc3QuY3MubHBzekNsYXNzID0gSElXT1JEKGxwY3MtPmxwc3pDbGFzcykgPyAKIAkJCQlQVFJfU0VHX1RPX0xJTihscGNzLT5scHN6Q2xhc3MpIDogKGNoYXIqKWxwY3MtPmxwc3pDbGFzczsKLQkJCXJlc3VsdD1SRUxBWTMyX0NhbGxXaW5kb3dQcm9jKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KSZzdC5jcyk7CisJCQlyZXN1bHQ9Q2FsbFduZFByb2MzMihmdW5jLGh3bmQsbWVzc2FnZSx3UGFyYW0sKGludCkmc3QuY3MpOwogCQkJU1RSVUNUMzJfQ1JFQVRFU1RSVUNUMzJ0bzE2KCZzdC5jcyxsUGFyYW0pOwogCQkJbHBjcy0+bHBzek5hbWUgPSBISVdPUkQoc3QuY3MubHBzek5hbWUpID8gCiAJCQkJTUFLRV9TRUdQVFIoc3QuY3MubHBzek5hbWUpIDogKFNFR1BUUilzdC5jcy5scHN6TmFtZTsKQEAgLTE5MSw3MSArMTMyLDkgQEAKIAkJCXJldHVybiByZXN1bHQ7CiAJCWNhc2UgV01fR0VUVEVYVDoKIAkJY2FzZSBXTV9TRVRURVhUOgotCQkJcmV0dXJuIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpbFBhcmFtKTsKKwkJCXJldHVybiBDYWxsV25kUHJvYzMyKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KWxQYXJhbSk7CiAJCWRlZmF1bHQ6CiAJCQlmcHJpbnRmKHN0ZGVyciwiTm8gY29udmVyc2lvbiBmdW5jdGlvbiBmb3IgbWVzc2FnZSAlZFxuIixtZXNzYWdlKTsKIAl9Ci0JcmV0dXJuIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MoZnVuYyxod25kLG1lc3NhZ2Usd1BhcmFtLChpbnQpbFBhcmFtKTsKKwlyZXR1cm4gQ2FsbFduZFByb2MzMihmdW5jLGh3bmQsbWVzc2FnZSx3UGFyYW0sKGludClsUGFyYW0pOwogfQotCi1zdGF0aWMgdm9pZCBSRUxBWTMyX01ha2VGYWtlTW9kdWxlKFdJTjMyX2J1aWx0aW4qZGxsKQotewotCU5FX01PRFVMRSAqcE1vZHVsZTsKLQlzdHJ1Y3Qgd19maWxlcyAqd3BudDsKLQlpbnQgc2l6ZTsKLQlITU9EVUxFIGhNb2R1bGU7Ci0JT0ZTVFJVQ1QgKnBGaWxlSW5mbzsKLQljaGFyICpwU3RyOwotCXdwbnQ9eG1hbGxvYyhzaXplb2Yoc3RydWN0IHdfZmlsZXMpKTsKLQl3cG50LT5oaW5zdGFuY2U9MDsKLQl3cG50LT5oTW9kdWxlPTA7Ci0Jd3BudC0+aW5pdGlhbGlzZWQ9MTsKLQl3cG50LT5tel9oZWFkZXI9d3BudC0+cGU9MDsKLQlzaXplPXNpemVvZihORV9NT0RVTEUpICsKLQkJLyogbG9hZGVkIGZpbGUgaW5mbyAqLwotCQlzaXplb2YoKnBGaWxlSW5mbykgLSBzaXplb2YocEZpbGVJbmZvLT5zelBhdGhOYW1lKSArCi0gICAgICAgICAgICAgICAgc3RybGVuKGRsbC0+bmFtZSkgKyAxICsKLQkJLyogbmFtZSB0YWJsZSAqLwotCQkxMiArCi0JCS8qIHNldmVyYWwgZW1wdHkgdGFibGVzICovCi0JCTg7Ci0JaE1vZHVsZSA9IEdsb2JhbEFsbG9jKCBHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgc2l6ZSApOwotCXdwbnQtPmhNb2R1bGUgPSBoTW9kdWxlOwotCUZhclNldE93bmVyKCBoTW9kdWxlLCBoTW9kdWxlICk7Ci0JcE1vZHVsZSA9IChORV9NT0RVTEUqKUdsb2JhbExvY2soaE1vZHVsZSk7Ci0JLyogU2V0IGFsbCB1c2VkIGVudHJpZXMgKi8KLQlwTW9kdWxlLT5tYWdpYz1ORV9TSUdOQVRVUkU7Ci0JcE1vZHVsZS0+Y291bnQ9MTsKLQlwTW9kdWxlLT5uZXh0PTA7Ci0JcE1vZHVsZS0+ZmxhZ3M9TkVfRkZMQUdTX1dJTjMyOwotCXBNb2R1bGUtPmRncm91cD0wOwotCXBNb2R1bGUtPnNzPTA7Ci0JcE1vZHVsZS0+Y3M9MDsKLQlwTW9kdWxlLT5oZWFwX3NpemU9MDsKLQlwTW9kdWxlLT5zdGFja19zaXplPTA7Ci0JcE1vZHVsZS0+c2VnX2NvdW50PTA7Ci0JcE1vZHVsZS0+bW9kcmVmX2NvdW50PTA7Ci0JcE1vZHVsZS0+bnJuYW1lX3NpemU9MDsKLQlwTW9kdWxlLT5zZWdfdGFibGU9MDsKLQlwTW9kdWxlLT5maWxlaW5mbz1zaXplb2YoTkVfTU9EVUxFKTsKLQlwTW9kdWxlLT5vc19mbGFncz1ORV9PU0ZMQUdTX1dJTkRPV1M7Ci0JcE1vZHVsZS0+ZXhwZWN0ZWRfdmVyc2lvbj0weDMwQTsKLQlwRmlsZUluZm89KE9GU1RSVUNUICopKHBNb2R1bGUgKyAxKTsKLQlwRmlsZUluZm8tPmNCeXRlcyA9IHNpemVvZigqcEZpbGVJbmZvKSAtIHNpemVvZihwRmlsZUluZm8tPnN6UGF0aE5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4oZGxsLT5uYW1lKTsKLQlzdHJjcHkoIHBGaWxlSW5mby0+c3pQYXRoTmFtZSwgZGxsLT5uYW1lICk7Ci0JcFN0ciA9ICgoY2hhciopcEZpbGVJbmZvKSArIHBGaWxlSW5mby0+Y0J5dGVzICsgMTsKLQlwTW9kdWxlLT5uYW1lX3RhYmxlPShpbnQpcFN0ci0oaW50KXBNb2R1bGU7Ci0JKnBTdHI9c3RybGVuKGRsbC0+bmFtZSk7Ci0Jc3RyY3B5KHBTdHIrMSxkbGwtPm5hbWUpOwotCXBTdHIgKz0gKnBTdHIrMTsKLQlwTW9kdWxlLT5yZXNfdGFibGU9cE1vZHVsZS0+aW1wb3J0X3RhYmxlPXBNb2R1bGUtPmVudHJ5X3RhYmxlPQotCQkoaW50KXBTdHItKGludClwTW9kdWxlOwotCU1PRFVMRV9SZWdpc3Rlck1vZHVsZShoTW9kdWxlKTsKLQl3cG50LT5idWlsdGluPWRsbDsKLQl3cG50LT5uZXh0PXdpbmVfZmlsZXM7Ci0Jd2luZV9maWxlcz13cG50OwotfQotCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jYWxsYmFjay5oIGIvaW5jbHVkZS9jYWxsYmFjay5oCmluZGV4IDJhMzNiNmYuLjNlYjUyOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2FsbGJhY2suaAorKysgYi9pbmNsdWRlL2NhbGxiYWNrLmgKQEAgLTEyLDExICsxMiwxMiBAQAogCiAjaW5jbHVkZSAic3RhY2tmcmFtZS5oIgogCi1leHRlcm4gaW50IENhbGxUbzMyX0xhcmdlU3RhY2soIGludCAoKmZ1bmMpKCksIGludCBuYmFyZ3MsIC4uLiApOworZXh0ZXJuCitpbnQgQ2FsbFRvMzJfTGFyZ2VTdGFjayggaW50ICgqZnVuYykoKSwgaW50IG5iYXJncywgLi4uICk7CiAKIAogLyogTGlzdCBvZiB0aGUgMTYtYml0IGNhbGxiYWNrIGZ1bmN0aW9ucy4gVGhpcyBsaXN0IGlzIHVzZWQgICovCi0vKiBieSB0aGUgYnVpbGQgcHJvZ3JhbSB0byBnZW5lcmF0ZSB0aGUgZmlsZSBpZjE2MzIvY2FsbDE2LlMgKi8KKy8qIGJ5IHRoZSBidWlsZCBwcm9ncmFtIHRvIGdlbmVyYXRlIHRoZSBmaWxlIGlmMTYzMi9jYWxsdG8xNi5TICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdW5jICAgICBkcyAgICBwYXJhbWV0ZXJzICovCiBleHRlcm4gV09SRCBDYWxsVG8xNl93b3JkXyAgICAgKCBGQVJQUk9DLCBXT1JEICk7CkBAIC02OCw2ICs2OSwyMiBAQAogI2RlZmluZSBDYWxsV29yZEJyZWFrUHJvYyggZnVuYywgbHBjaCwgaWNoQ3VycmVudCwgY2NoLCBjb2RlICkgXAogICAgIENhbGxUbzE2X3dvcmRfbHd3dyggZnVuYywgQ1VSUkVOVF9EUywgbHBjaCwgaWNoQ3VycmVudCwgY2NoLCBjb2RlICkKIAorCisvKiBMaXN0IG9mIHRoZSAzMi1iaXQgY2FsbGJhY2sgZnVuY3Rpb25zLiBUaGlzIGxpc3QgaXMgdXNlZCAgKi8KKy8qIGJ5IHRoZSBidWlsZCBwcm9ncmFtIHRvIGdlbmVyYXRlIHRoZSBmaWxlIGlmMTYzMi9jYWxsdG8zMi5TICovCisKK2V4dGVybiBMT05HIENhbGxUbzMyXzAoIEZBUlBST0MgKTsKK2V4dGVybiBMT05HIENhbGxUbzMyXzMoIEZBUlBST0MsIERXT1JELCBEV09SRCwgRFdPUkQgKTsKK2V4dGVybiBMT05HIENhbGxUbzMyXzQoIEZBUlBST0MsIERXT1JELCBEV09SRCwgRFdPUkQsIERXT1JEICk7CisKKyNkZWZpbmUgQ2FsbFRhc2tTdGFydDMyKCBmdW5jICkgXAorICAgIENhbGxUbzMyXzAoIGZ1bmMgKQorI2RlZmluZSBDYWxsRExMRW50cnlQcm9jMzIoIGZ1bmMsIGhtb2R1bGUsIGEsIGIgKSBcCisgICAgQ2FsbFRvMzJfMyggZnVuYywgaG1vZHVsZSwgYSwgYiApCisjZGVmaW5lIENhbGxXbmRQcm9jMzIoIGZ1bmMsIGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0gKSBcCisgICAgQ2FsbFRvMzJfNCggZnVuYywgaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSApCisKKwogI2Vsc2UgIC8qIFdJTkVMSUIgKi8KIAogI2RlZmluZSBDYWxsRW51bUNoaWxkUHJvYyggZnVuYywgaHduZCwgbFBhcmFtICkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZWJ1Z2dlci5oIGIvaW5jbHVkZS9kZWJ1Z2dlci5oCmluZGV4IDQyYjQyMDYuLjFmMWE3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGVidWdnZXIuaAorKysgYi9pbmNsdWRlL2RlYnVnZ2VyLmgKQEAgLTQwLDYgKzQwLDEwIEBACiAgICAgICBERUJVR19QcmludEFkZHJlc3MoYWRkcixkYmdfbW9kZSksIFwKICAgICAgIGZwcmludGYoc3RkZXJyLCJcbiIpLDApKQogCisjaWZkZWYgUkVHX1NQICAvKiBTb21lIFN1biBpbmNsdWRlcyBkZWZpbmUgdGhpcyAqLworI3VuZGVmIFJFR19TUAorI2VuZGlmCisKIGVudW0gZGVidWdfcmVncwogewogICAgIFJFR19FQVgsIFJFR19FQlgsIFJFR19FQ1gsIFJFR19FRFgsIFJFR19FU0ksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RsbHMuaCBiL2luY2x1ZGUvZGxscy5oCmluZGV4IDJlNWJjYmMuLjMwNGIxNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGxscy5oCisrKyBiL2luY2x1ZGUvZGxscy5oCkBAIC0yMCw4ICsyMCw5IEBACiB9IEJVSUxUSU5fRExMOwogCiAvKiBETEwgZmxhZ3MgKi8KLSNkZWZpbmUgRExMX0ZMQUdfTk9UX1VTRUQgICAgMSAgLyogVXNlIG9yaWdpbmFsIFdpbmRvd3MgRExMIGlmIHBvc3NpYmxlICovCi0jZGVmaW5lIERMTF9GTEFHX1dJTjMyICAgICAgIDIgIC8qIERMTCBpcyBhIFdpbjMyIERMTCAqLworI2RlZmluZSBETExfRkxBR19OT1RfVVNFRCAgICAweDAxICAvKiBVc2Ugb3JpZ2luYWwgV2luZG93cyBETEwgaWYgcG9zc2libGUgKi8KKyNkZWZpbmUgRExMX0ZMQUdfQUxXQVlTX1VTRUQgMHgwMiAgLyogQWx3YXlzIHVzZSBidWlsdC1pbiBETEwgKi8KKyNkZWZpbmUgRExMX0ZMQUdfV0lOMzIgICAgICAgMHgwNCAgLyogRExMIGlzIGEgV2luMzIgRExMICovCiAKICNkZWZpbmUgREVDTEFSRV9ETEwobmFtZSkgXAogZXh0ZXJuIGNvbnN0IEJZVEUgbmFtZSMjX0NvZGVfU3RhcnRbXTsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sb2NhbC5oIGIvaW5jbHVkZS9sb2NhbC5oCmluZGV4IDkzYjRjYmUuLmQzZjEyZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbG9jYWwuaAorKysgYi9pbmNsdWRlL2xvY2FsLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBXT1JEIExPQ0FMX1NpemUoIEhBTkRMRSBkcywgSExPQ0FMIGhhbmRsZSApOwogZXh0ZXJuIFdPUkQgTE9DQUxfRmxhZ3MoIEhBTkRMRSBkcywgSExPQ0FMIGhhbmRsZSApOwogZXh0ZXJuIFdPUkQgTE9DQUxfSGVhcFNpemUoIEhBTkRMRSBkcyApOwotZXh0ZXJuIE5QVk9JRCBMT0NBTF9Mb2NrKCBIQU5ETEUgZHMsIEhMT0NBTCBoYW5kbGUgKTsKK2V4dGVybiBMUFNUUiBMT0NBTF9Mb2NrKCBIQU5ETEUgZHMsIEhMT0NBTCBoYW5kbGUgKTsKIGV4dGVybiBCT09MIExPQ0FMX1VubG9jayggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlICk7CiAKICNlbmRpZiAgLyogX19XSU5FX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbW9kdWxlLmggYi9pbmNsdWRlL21vZHVsZS5oCmluZGV4IGJjMjNlMWMuLjAxNTYxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9tb2R1bGUuaApAQCAtNTEsNiArNTEsMTQgQEAKICAgICBXT1JEICAgIHNlbGZfbG9hZGluZ19zZWw7IC8qIFNlbGVjdG9yIHVzZWQgZm9yIHNlbGYtbG9hZGluZyBhcHBzLiBwcm9jcyAqLwogfSBORV9NT0RVTEU7CiAKKworICAvKiBFeHRyYSBtb2R1bGUgaW5mbyBhcHBlbmRlZCB0byBORV9NT0RVTEUgZm9yIFdpbjMyIG1vZHVsZXMgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRFdPUkQgICBwZV9tb2R1bGU7Cit9IE5FX1dJTjMyX0VYVFJBSU5GTzsKKworCiAgIC8qIEluLW1lbW9yeSBzZWdtZW50IHRhYmxlICovCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNjEsNiArNjksNyBAQAogICAgIEhBTkRMRSAgc2VsZWN0b3I7ICAvKiBTZWxlY3RvciBvZiBzZWdtZW50IGluIG1lbW9yeSAqLwogfSBTRUdUQUJMRUVOVFJZOwogCisKICAgLyogU2VsZi1sb2FkaW5nIG1vZHVsZXMgY29udGFpbiB0aGlzIHN0cnVjdHVyZSBpbiB0aGVpciBmaXJzdCBzZWdtZW50ICovCiAKIHR5cGVkZWYgc3RydWN0CkBAIC05NywxMSArMTA2LDE3IEBACiAjZGVmaW5lIE5FX01PRFVMRV9OQU1FKHBNb2R1bGUpIFwKICAgICAoKChPRlNUUlVDVCAqKSgoY2hhciopKHBNb2R1bGUpICsgKHBNb2R1bGUpLT5maWxlaW5mbykpLT5zelBhdGhOYW1lKQogCisjZGVmaW5lIE5FX1dJTjMyX01PRFVMRShwTW9kdWxlKSBcCisgICAgKChzdHJ1Y3QgcGVfZGF0YSAqKSgoKHBNb2R1bGUpLT5mbGFncyAmIE5FX0ZGTEFHU19XSU4zMikgPyBcCisgICAgICAgICAgICAgICAgICAgICgoTkVfV0lOMzJfRVhUUkFJTkZPICopKChwTW9kdWxlKSArIDEpKS0+cGVfbW9kdWxlIDogMCkpCisKICNpZm5kZWYgV0lORUxJQgogI3ByYWdtYSBwYWNrKDQpCiAjZW5kaWYKIAogZXh0ZXJuIEJPT0wgTU9EVUxFX0luaXQodm9pZCk7CitleHRlcm4gdm9pZCBNT0RVTEVfRHVtcE1vZHVsZSggSE1PRFVMRSBobW9kdWxlICk7CitleHRlcm4gdm9pZCBNT0RVTEVfV2Fsa01vZHVsZXModm9pZCk7CiBleHRlcm4gaW50IE1PRFVMRV9PcGVuRmlsZSggSE1PRFVMRSBoTW9kdWxlICk7CiBleHRlcm4gTFBTVFIgTU9EVUxFX0dldE1vZHVsZU5hbWUoIEhNT0RVTEUgaE1vZHVsZSApOwogZXh0ZXJuIHZvaWQgTU9EVUxFX1JlZ2lzdGVyTW9kdWxlKCBITU9EVUxFIGhNb2R1bGUgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGVfaW1hZ2UuaCBiL2luY2x1ZGUvcGVfaW1hZ2UuaAppbmRleCA3OTkzOTJhLi5lOTdkNDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BlX2ltYWdlLmgKKysrIGIvaW5jbHVkZS9wZV9pbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImRsbHMuaCIKIAogc3RydWN0IHBlX2RhdGEgewogCXN0cnVjdCBwZV9oZWFkZXJfcyAqcGVfaGVhZGVyOwpAQCAtMTcsNDAgKzE4LDcgQEAKIAlpbnQgcmVzb3VyY2Vfb2Zmc2V0OyAvKiBvZmZzZXQgdG8gcmVzb3VyY2UgdHlwZWRpcmVjdG9yeSBpbiBmaWxlICovCiB9OwogCi10eXBlZGVmIHN0cnVjdCBfV0lOMzJfZnVuY3Rpb257Ci0gICAgY2hhciAqbmFtZTsKLSAgICB2b2lkICpkZWZpbml0aW9uOwotfSBXSU4zMl9mdW5jdGlvbjsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dJTjMyX2J1aWx0aW57Ci0gICAgY2hhciAqbmFtZTsKLSAgICBXSU4zMl9mdW5jdGlvbiAqZnVuY3Rpb25zOwotICAgIFdJTjMyX2Z1bmN0aW9uICpsYXN0X2Z1bmM7Ci0gICAgY29uc3QgaW50ICpiYXNlOwotICAgIHN0cnVjdCBfV0lOMzJfYnVpbHRpbiAqbmV4dDsKLX0gV0lOMzJfYnVpbHRpbjsKLQotc3RydWN0IHdfZmlsZXMKLXsKLSAgICBzdHJ1Y3Qgd19maWxlcyAgKiBuZXh0OwotICAgIGNoYXIgKiBuYW1lOyAgIC8qIE5hbWUsIGFzIGl0IGFwcGVhcnMgaW4gdGhlIHdpbmRvd3MgYmluYXJpZXMgKi8KLSAgICBjaGFyICogZmlsZW5hbWU7IC8qIEFjdHVhbCBuYW1lIG9mIHRoZSB1bml4IGZpbGUgdGhhdCBzYXRpc2ZpZXMgdGhpcyAqLwotICAgIGludCB0eXBlOyAgICAgICAgLyogRExMIG9yIEVYRSAqLwotICAgIEhJTlNUQU5DRSBoaW5zdGFuY2U7Ci0gICAgSE1PRFVMRSBoTW9kdWxlOwotICAgIGludCBpbml0aWFsaXNlZDsKLSAgICBzdHJ1Y3QgbXpfaGVhZGVyX3MgKm16X2hlYWRlcjsKLSAgICBzdHJ1Y3QgcGVfZGF0YSAqcGU7Ci0JT0ZTVFJVQ1Qgb2ZzOwotICAgIHVuc2lnbmVkIGludCBsb2FkX2FkZHI7Ci0JV0lOMzJfYnVpbHRpbiogYnVpbHRpbjsKLX07Ci0KLQotZXh0ZXJuIGludCBQRV91bmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7Ci1leHRlcm4gaW50IFBFX1N0YXJ0UHJvZ3JhbShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7Ci1leHRlcm4gdm9pZCBQRV9Jbml0RExMKEhNT0RVTEUgaE1vZHVsZSk7CitleHRlcm4gaW50IFBFX3VubG9hZEltYWdlKEhNT0RVTEUgaE1vZHVsZSk7CiBleHRlcm4gdm9pZCBteV93Y3N0b21icyhjaGFyICogcmVzdWx0LCB1X3Nob3J0ICogc291cmNlLCBpbnQgbGVuKTsKLWV4dGVybiBzdHJ1Y3Qgd19maWxlcyAqd2luZV9maWxlczsKIAogI2VuZGlmIC8qIF9fV0lORV9QRV9JTUFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlZ2lzdGVycy5oIGIvaW5jbHVkZS9yZWdpc3RlcnMuaAppbmRleCA5M2E5NTY3Li45OGYyOGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlZ2lzdGVycy5oCisrKyBiL2luY2x1ZGUvcmVnaXN0ZXJzLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSAid2luZS5oIgogCi0jaWZuZGVmIF9fc3ZyNF9fCisjaWYgIWRlZmluZWQoX19zdnI0X18pICYmICFkZWZpbmVkKF9TQ09fRFMpCiAKICNkZWZpbmUgRUFYX3JlZyhjb250ZXh0KSAgICAgKChjb250ZXh0KS0+c2NfZWF4KQogI2RlZmluZSBFQlhfcmVnKGNvbnRleHQpICAgICAoKGNvbnRleHQpLT5zY19lYngpCkBAIC02NSw3ICs2NSwxMSBAQAogI2RlZmluZSBTRVRfQ0ZMQUcoY29udGV4dCkgICAoRUZMX3JlZyhjb250ZXh0KSB8PSAweDAwMDEpCiAjZGVmaW5lIFJFU0VUX0NGTEFHKGNvbnRleHQpIChFRkxfcmVnKGNvbnRleHQpICY9IDB4ZmZmZmZmZmUpCiAKLSNlbHNlICAvKiBfX3N2cjRfXyAqLworI2Vsc2UgIC8qIF9fc3ZyNF9fIHx8IF9TQ09fRFMgKi8KKworI2lmZGVmIF9TQ09fRFMKKyNkZWZpbmUgZ3JlZ3MgcmVncworI2VuZGlmCiAKICNkZWZpbmUgRUFYX3JlZyhjb250ZXh0KSAgICAgICgoY29udGV4dCktPnVjX21jb250ZXh0LmdyZWdzW0VBWF0pCiAjZGVmaW5lIEVCWF9yZWcoY29udGV4dCkgICAgICAoKGNvbnRleHQpLT51Y19tY29udGV4dC5ncmVnc1tFQlhdKQpAQCAtMTIyLDYgKzEyNiw2IEBACiAjZGVmaW5lIFNFVF9DRkxBRyhjb250ZXh0KSAgIChFRkxfcmVnKGNvbnRleHQpIHw9IDB4MDAwMSkKICNkZWZpbmUgUkVTRVRfQ0ZMQUcoY29udGV4dCkgKEVGTF9yZWcoY29udGV4dCkgJj0gMHhmZmZmZmZmZSkKIAotI2VuZGlmICAvKiBfX3N2cjRfXyAqLworI2VuZGlmICAvKiBfX3N2cjRfXyB8fCBfU0NPX0RTICovCiAKICNlbmRpZiAvKiBfX1dJTkVfUkVHSVNURVJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVsYXkzMi5oIGIvaW5jbHVkZS9yZWxheTMyLmgKaW5kZXggYzBjZjQ5OS4uMDZiODc0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZWxheTMyLmgKKysrIGIvaW5jbHVkZS9yZWxheTMyLmgKQEAgLTQsMTYgKzQsMTMgQEAKICAqIENvcHlyaWdodCAxOTk1IE1hcnRpbiB2b24gTG9ld2lzCiAgKi8KIAotI2lmbmRlZiBfUkVMQVkzMl9ICi0jZGVmaW5lIF9SRUxBWTMyX0gKLSNpbmNsdWRlICJwZV9pbWFnZS5oIgorI2lmbmRlZiBfX1dJTkVfUkVMQVkzMl9ICisjZGVmaW5lIF9fV0lORV9SRUxBWTMyX0gKKworI2luY2x1ZGUgImRsbHMuaCIKICNpbmNsdWRlICJzdHJ1Y3QzMi5oIgogCi12b2lkIFJFTEFZMzJfVW5pbXBsZW1lbnRlZChjaGFyICpkbGwsIGludCBpdGVtKTsKLVdJTjMyX2J1aWx0aW4gKlJFTEFZMzJfR2V0QnVpbHRpbkRMTChjaGFyICpuYW1lKTsKLXZvaWQgKlJFTEFZMzJfR2V0RW50cnlQb2ludChXSU4zMl9idWlsdGluICpkbGwsIGNoYXIgKml0ZW0sIGludCBoaW50KTsKLUxPTkcgUkVMQVkzMl9DYWxsV2luZG93UHJvYyhXTkRQUk9DLGludCxpbnQsaW50LGludCk7Ci12b2lkIFJFTEFZMzJfRGVidWdFbnRlcihjaGFyICpkbGwsY2hhciAqbmFtZSk7Cit2b2lkICpSRUxBWTMyX0dldEVudHJ5UG9pbnQoQlVJTFRJTl9ETEwgKmRsbCwgY2hhciAqaXRlbSwgaW50IGhpbnQpOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdXTkRDTEFTU0F7CiAJVUlOVAlzdHlsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3RhY2tmcmFtZS5oIGIvaW5jbHVkZS9zdGFja2ZyYW1lLmgKaW5kZXggYTlkNDAyMC4uMGI0NDUxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGFja2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9zdGFja2ZyYW1lLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNwcmFnbWEgcGFjaygxKQogI2VuZGlmCiAKLSAgLyogMTYtYml0IHN0YWNrIGxheW91dCBhZnRlciBDYWxsVG8zMigpICovCisgIC8qIDE2LWJpdCBzdGFjayBsYXlvdXQgYWZ0ZXIgQ2FsbEZyb20xNigpICovCiB0eXBlZGVmIHN0cnVjdAogewogICAgIFdPUkQgICAgc2F2ZWRfc3M7ICAgICAgICAgICAgICAgIC8qIHNhdmVkIHByZXZpb3VzIDE2LWJpdCBzdGFjayAqLwpAQCAtNDksMTMgKzQ5LDE1IEBACiAjcHJhZ21hIHBhY2soNCkKICNlbmRpZgogCi0gIC8qIFNhdmVkIDE2LWJpdCBzdGFjayAqLworICAvKiBTYXZlZCAxNi1iaXQgc3RhY2sgZm9yIGN1cnJlbnQgcHJvY2VzcyAoV2luMTYgb25seSkgKi8KIGV4dGVybiBXT1JEIElGMTYzMl9TYXZlZDE2X3NzOwogZXh0ZXJuIFdPUkQgSUYxNjMyX1NhdmVkMTZfc3A7CiAKLSAgLyogU2F2ZWQgMzItYml0IHN0YWNrICovCisgIC8qIFNhdmVkIDMyLWJpdCBzdGFjayBmb3IgY3VycmVudCBwcm9jZXNzIChXaW4xNiBvbmx5KSAqLwogZXh0ZXJuIERXT1JEIElGMTYzMl9TYXZlZDMyX2VzcDsKIGV4dGVybiBTRUdQVFIgSUYxNjMyX1N0YWNrMzJfYmFzZTsKKworICAvKiBPcmlnaW5hbCBVbml4IHN0YWNrICovCiBleHRlcm4gRFdPUkQgSUYxNjMyX09yaWdpbmFsMzJfZXNwOwogCiAjaWZuZGVmIFdJTkVMSUIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luZG93cy5oIGIvaW5jbHVkZS93aW5kb3dzLmgKaW5kZXggYjgyM2FkMy4uYzI1ZDkxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5kb3dzLmgKKysrIGIvaW5jbHVkZS93aW5kb3dzLmgKQEAgLTIxNTgsNiArMjE1OCw5IEBACiAjZGVmaW5lIEVNX1NFVFdPUkRCUkVBS1BST0MgICAgKFdNX1VTRVIrMzIpCiAjZGVmaW5lIEVNX0dFVFdPUkRCUkVBS1BST0MgICAgKFdNX1VTRVIrMzMpCiAjZGVmaW5lIEVNX0dFVFBBU1NXT1JEQ0hBUiAgICAgKFdNX1VTRVIrMzQpCisvKiBFZGl0IGNvbnRyb2wgdW5kb2N1bWVudGVkIG1lc3NhZ2VzICovCisjZGVmaW5lIEVNX1NDUk9MTCAgICAgICAgICAgICAgKFdNX1VTRVIrNSkKKyNkZWZpbmUgRU1fR0VUVEhVTUIgICAgICAgICAgICAoV01fVVNFUisxNCkKIAogdHlwZWRlZiBpbnQgKENBTExCQUNLICpFRElUV09SREJSRUFLUFJPQykoTFBTVFIgbHBjaCwgaW50IGljaEN1cnJlbnQsCiAJCQkJCSAgaW50IGNjaCwgaW50IGNvZGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5lLmggYi9pbmNsdWRlL3dpbmUuaAppbmRleCBlOGI0Y2ZhLi5hZjFiZTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmUuaAorKysgYi9pbmNsdWRlL3dpbmUuaApAQCAtNDYsOCArNDYsMTEgQEAKICNkZWZpbmUgV0lORV9DT0RFX1NFTEVDVE9SIDB4MTcKICNlbmRpZgogCi0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgX1NDT19EUworI2luY2x1ZGUgPHN5cy9yZWdzZXQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgogI2RlZmluZSBzaWdjb250ZXh0X3N0cnVjdCB1Y29udGV4dAogI2RlZmluZSBXSU5FX0RBVEFfU0VMRUNUT1IgMHgxZgpkaWZmIC0tZ2l0IGEvbGlicmFyeS9taXNjc3R1YnMuYyBiL2xpYnJhcnkvbWlzY3N0dWJzLmMKaW5kZXggMGMzZjhjMS4uOGVkM2YyNCAxMDA2NDQKLS0tIGEvbGlicmFyeS9taXNjc3R1YnMuYworKysgYi9saWJyYXJ5L21pc2NzdHVicy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgIHsgcmV0dXJuIExvY2FsQWxsb2MoZmxhZ3Msc2l6ZSk7IH0KIEhMT0NBTCBMT0NBTF9SZUFsbG9jKFdPUkQgZHMsIEhMT0NBTCBoYW5kbGUsIFdPUkQgc2l6ZSwgV09SRCBmbGFncykKICAgeyByZXR1cm4gTG9jYWxSZUFsbG9jKGhhbmRsZSxzaXplLGZsYWdzKTsgfQotTlBWT0lEIExPQ0FMX0xvY2soIFdPUkQgZHMsIEhMT0NBTCBoYW5kbGUgKQorTFBTVFIgTE9DQUxfTG9jayggV09SRCBkcywgSExPQ0FMIGhhbmRsZSApCiAgIHsgcmV0dXJuIExvY2FsTG9jayhoYW5kbGUpOyB9CiBCT09MIExPQ0FMX1VubG9jayggV09SRCBkcywgSExPQ0FMIGhhbmRsZSApCiAgIHsgcmV0dXJuIExvY2FsVW5sb2NrKGhhbmRsZSk7IH0KQEAgLTEyOSwxMiArMTI5LDcgQEAKICAgcmV0dXJuIDA7CiB9CiAKLVdJTjMyX2J1aWx0aW4gKlJFTEFZMzJfR2V0QnVpbHRpbkRMTChjaGFyICpuYW1lKQotewotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkICpSRUxBWTMyX0dldEVudHJ5UG9pbnQoV0lOMzJfYnVpbHRpbiAqZGxsLCBjaGFyICppdGVtLCBpbnQgaGludCkKK3ZvaWQgKlJFTEFZMzJfR2V0RW50cnlQb2ludChCVUlMVElOX0RMTCAqZGxsLCBjaGFyICppdGVtLCBpbnQgaGludCkKIHsKICAgcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9sb2FkZXIvbWFpbi5jIGIvbG9hZGVyL21haW4uYwppbmRleCAwYzQ5MDM3Li5iMDZlMjYxIDEwMDY0NAotLS0gYS9sb2FkZXIvbWFpbi5jCisrKyBiL2xvYWRlci9tYWluLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIGludCBNQUlOX0luaXQodm9pZCkKIHsKICAgICBleHRlcm4gQk9PTCBSRUxBWV9Jbml0KHZvaWQpOwotICAgIGV4dGVybiBCT09MIFJFTEFZMzJfSW5pdCh2b2lkKTsgCiAKICAgICBpbnQgcXVldWVTaXplOwogCkBAIC02Miw5ICs2MSw2IEBACiAjaWZuZGVmIFdJTkVMSUIKICAgICAgIC8qIEluaXRpYWxpemUgcmVsYXkgY29kZSAqLwogICAgIGlmICghUkVMQVlfSW5pdCgpKSByZXR1cm4gMDsKLQotICAgICAgLyogSW5pdGlhbGl6ZSBXaW4zMiByZWxheSBjb2RlICovCi0gICAgaWYgKCFSRUxBWTMyX0luaXQoKSkgcmV0dXJuIDA7CiAjZW5kaWYKIAogICAgICAgLyogQ3JlYXRlIGJ1aWx0LWluIG1vZHVsZXMgKi8KZGlmZiAtLWdpdCBhL2xvYWRlci9tb2R1bGUuYyBiL2xvYWRlci9tb2R1bGUuYwppbmRleCBmY2U3MzRjLi4wNjBjMjg2IDEwMDY0NAotLS0gYS9sb2FkZXIvbW9kdWxlLmMKKysrIGIvbG9hZGVyL21vZHVsZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgSE1PRFVMRSBoTW9kdWxlOwogICAgIE5FX01PRFVMRSAqcE1vZHVsZTsKICAgICBTRUdUQUJMRUVOVFJZICpwU2VnVGFibGU7Ci0gICAgc3RydWN0IGRsbF90YWJsZV9zICp0YWJsZTsKKyAgICBCVUlMVElOX0RMTCAqdGFibGU7CiAgICAgY2hhciBkbGxuYW1lWzE2XSwgKnA7CiAKICAgICAvKiBGaXggdGhlIG5hbWUgaW4gY2FzZSB3ZSBoYXZlIGEgZnVsbCBwYXRoIGFuZCBleHRlbnNpb24gKi8KQEAgLTcxLDI1ICs3MSwzMSBAQAogCiAgICAgZHByaW50Zl9tb2R1bGUoIHN0ZGRlYiwgIkJ1aWx0LWluICVzOiBobW9kdWxlPSUwNHhcbiIsCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5uYW1lLCBoTW9kdWxlICk7Ci0KLSAgICAvKiBBbGxvY2F0ZSB0aGUgY29kZSBzZWdtZW50ICovCi0KICAgICBwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKTsKLSAgICBwU2VnVGFibGUgPSBORV9TRUdfVEFCTEUoIHBNb2R1bGUgKTsKIAotICAgIHBTZWdUYWJsZS0+c2VsZWN0b3IgPSBHTE9CQUxfQ3JlYXRlQmxvY2soIEdNRU1fRklYRUQsIHRhYmxlLT5jb2RlX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTZWdUYWJsZS0+bWluc2l6ZSwgaE1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCBUUlVFLCBGQUxTRSwgTlVMTCApOwotICAgIGlmICghcFNlZ1RhYmxlLT5zZWxlY3RvcikgcmV0dXJuIDA7Ci0gICAgcFNlZ1RhYmxlKys7CisgICAgaWYgKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1dJTjMyKQorICAgIHsKKyAgICAgICAgKChORV9XSU4zMl9FWFRSQUlORk8qKShwTW9kdWxlKzEpKS0+cGVfbW9kdWxlID0gKERXT1JEKXRhYmxlOworICAgIH0KKyAgICBlbHNlICAvKiBXaW4xNiBtb2R1bGUgKi8KKyAgICB7CisgICAgICAgIC8qIEFsbG9jYXRlIHRoZSBjb2RlIHNlZ21lbnQgKi8KIAotICAgIC8qIEFsbG9jYXRlIHRoZSBkYXRhIHNlZ21lbnQgKi8KKyAgICAgICAgcFNlZ1RhYmxlID0gTkVfU0VHX1RBQkxFKCBwTW9kdWxlICk7CisgICAgICAgIHBTZWdUYWJsZS0+c2VsZWN0b3IgPSBHTE9CQUxfQ3JlYXRlQmxvY2soR01FTV9GSVhFRCwgdGFibGUtPmNvZGVfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNlZ1RhYmxlLT5taW5zaXplLCBoTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIFRSVUUsIEZBTFNFLCBOVUxMICk7CisgICAgICAgIGlmICghcFNlZ1RhYmxlLT5zZWxlY3RvcikgcmV0dXJuIDA7CisgICAgICAgIHBTZWdUYWJsZSsrOwogCi0gICAgcFNlZ1RhYmxlLT5zZWxlY3RvciA9IEdMT0JBTF9BbGxvYyggR01FTV9GSVhFRCwgcFNlZ1RhYmxlLT5taW5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhNb2R1bGUsIEZBTFNFLCBGQUxTRSwgRkFMU0UgKTsKLSAgICBpZiAoIXBTZWdUYWJsZS0+c2VsZWN0b3IpIHJldHVybiAwOwotICAgIG1lbWNweSggR2xvYmFsTG9jayggcFNlZ1RhYmxlLT5zZWxlY3RvciApLAotICAgICAgICAgICAgdGFibGUtPmRhdGFfc3RhcnQsIHBTZWdUYWJsZS0+bWluc2l6ZSApOworICAgICAgICAvKiBBbGxvY2F0ZSB0aGUgZGF0YSBzZWdtZW50ICovCisKKyAgICAgICAgcFNlZ1RhYmxlLT5zZWxlY3RvciA9IEdMT0JBTF9BbGxvYyggR01FTV9GSVhFRCwgcFNlZ1RhYmxlLT5taW5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoTW9kdWxlLCBGQUxTRSwgRkFMU0UsIEZBTFNFICk7CisgICAgICAgIGlmICghcFNlZ1RhYmxlLT5zZWxlY3RvcikgcmV0dXJuIDA7CisgICAgICAgIG1lbWNweSggR2xvYmFsTG9jayggcFNlZ1RhYmxlLT5zZWxlY3RvciApLAorICAgICAgICAgICAgICAgIHRhYmxlLT5kYXRhX3N0YXJ0LCBwU2VnVGFibGUtPm1pbnNpemUgKTsKKyAgICB9CiAKICAgICBwTW9kdWxlLT5uZXh0ID0gaEZpcnN0TW9kdWxlOwogICAgIGhGaXJzdE1vZHVsZSA9IGhNb2R1bGU7CkBAIC0xMDQsMTMgKzExMCwxNCBAQAogICovCiBCT09MIE1PRFVMRV9Jbml0KHZvaWQpCiB7Ci0gICAgLyogRm9yIHRoZXNlLCBidWlsdC1pbiBtb2R1bGVzIGFyZSBhbHdheXMgdXNlZCAqLwotCiAjaWZuZGVmIFdJTkVMSUIzMgotICAgIGlmICghTU9EVUxFX0xvYWRCdWlsdGluKCAiS0VSTkVMIiwgVFJVRSApIHx8Ci0gICAgICAgICFNT0RVTEVfTG9hZEJ1aWx0aW4oICJHREkiLCBUUlVFICkgfHwKLSAgICAgICAgIU1PRFVMRV9Mb2FkQnVpbHRpbiggIlVTRVIiLCBUUlVFICkgfHwKLSAgICAgICAgIU1PRFVMRV9Mb2FkQnVpbHRpbiggIldJTlBST0NTIiwgVFJVRSApKSByZXR1cm4gRkFMU0U7CisgICAgQlVJTFRJTl9ETEwgKmRsbDsKKworICAgIC8qIExvYWQgYWxsIG1vZHVsZXMgbWFya2VkIGFzIGFsd2F5cyB1c2VkICovCisKKyAgICBmb3IgKGRsbCA9IGRsbF9idWlsdGluX3RhYmxlOyBkbGwtPm5hbWU7IGRsbCsrKQorICAgICAgICBpZiAoZGxsLT5mbGFncyAmIERMTF9GTEFHX0FMV0FZU19VU0VEKQorICAgICAgICAgICAgaWYgKCFNT0RVTEVfTG9hZEJ1aWx0aW4oZGxsLT5uYW1lLCBUUlVFKSkgcmV0dXJuIEZBTFNFOwogI2VuZGlmCiAgICAgLyogSW5pdGlhbGl6ZSBLRVJORUwuMTc4IChfX1dJTkZMQUdTKSB3aXRoIHRoZSBjb3JyZWN0IGZsYWdzIHZhbHVlICovCiAKQEAgLTEyMCw5ICsxMjcsOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIE1PRFVMRV9QcmludE1vZHVsZQorICogICAgICAgICAgIE1PRFVMRV9EdW1wTW9kdWxlCiAgKi8KLXZvaWQgTU9EVUxFX1ByaW50TW9kdWxlKCBITU9EVUxFIGhtb2R1bGUgKQordm9pZCBNT0RVTEVfRHVtcE1vZHVsZSggSE1PRFVMRSBobW9kdWxlICkKIHsKICAgICBpbnQgaSwgb3JkaW5hbDsKICAgICBTRUdUQUJMRUVOVFJZICpwU2VnOwpAQCAtMTMwLDYgKzEzNywxMiBAQAogICAgIFdPUkQgKnB3b3JkOwogICAgIE5FX01PRFVMRSAqcE1vZHVsZSA9IChORV9NT0RVTEUgKilHbG9iYWxMb2NrKCBobW9kdWxlICk7CiAKKyAgICBpZiAoIXBNb2R1bGUgfHwgKHBNb2R1bGUtPm1hZ2ljICE9IE5FX1NJR05BVFVSRSkpCisgICAgeworICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIqKioqICUwNHggaXMgbm90IGEgbW9kdWxlIGhhbmRsZVxuIiwgaG1vZHVsZSApOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgICAvKiBEdW1wIHRoZSBtb2R1bGUgaW5mbyAqLwogCiAgICAgcHJpbnRmKCAiTW9kdWxlICUwNHg6XG4iLCBobW9kdWxlICk7CkBAIC0xNDIsNiArMTU1LDggQEAKICAgICBwcmludGYoICJvc19mbGFncz0lZCBzd2FwX2FyZWE9JWQgdmVyc2lvbj0lMDR4XG4iLAogICAgICAgICAgICAgcE1vZHVsZS0+b3NfZmxhZ3MsIHBNb2R1bGUtPm1pbl9zd2FwX2FyZWEsCiAgICAgICAgICAgICBwTW9kdWxlLT5leHBlY3RlZF92ZXJzaW9uICk7CisgICAgaWYgKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1dJTjMyKQorICAgICAgICBwcmludGYoICJQRSBtb2R1bGU9JTA4eFxuIiwgKHVuc2lnbmVkIGludClORV9XSU4zMl9NT0RVTEUocE1vZHVsZSkgKTsKIAogICAgICAgLyogRHVtcCB0aGUgZmlsZSBpbmZvICovCiAKQEAgLTI1MSw2ICsyNjYsMzEgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBNT0RVTEVfV2Fsa01vZHVsZXMKKyAqCisgKiBXYWxrIHRoZSBtb2R1bGUgbGlzdCBhbmQgcHJpbnQgdGhlIG1vZHVsZXMuCisgKi8KK3ZvaWQgTU9EVUxFX1dhbGtNb2R1bGVzKHZvaWQpCit7CisgICAgSE1PRFVMRSBoTW9kdWxlID0gaEZpcnN0TW9kdWxlOworICAgIGZwcmludGYoIHN0ZGVyciwgIk1vZHVsZSBGbGFncyBOYW1lXG4iICk7CisgICAgd2hpbGUgKGhNb2R1bGUpCisgICAgeworICAgICAgICBORV9NT0RVTEUgKnBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jayggaE1vZHVsZSApOworICAgICAgICBpZiAoIXBNb2R1bGUgfHwgKHBNb2R1bGUtPm1hZ2ljICE9IE5FX1NJR05BVFVSRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIioqKiogQmFkIG1vZHVsZSAlMDR4IGluIGxpc3RcbiIsIGhNb2R1bGUgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIgJTA0eCAgJTA0eCAgJS4qc1xuIiwgaE1vZHVsZSwgcE1vZHVsZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICooKGNoYXIgKilwTW9kdWxlICsgcE1vZHVsZS0+bmFtZV90YWJsZSksCisgICAgICAgICAgICAgICAgIChjaGFyICopcE1vZHVsZSArIHBNb2R1bGUtPm5hbWVfdGFibGUgKyAxICk7CisgICAgICAgIGhNb2R1bGUgPSBwTW9kdWxlLT5uZXh0OworICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBNT0RVTEVfT3BlbkZpbGUKICAqLwogaW50IE1PRFVMRV9PcGVuRmlsZSggSE1PRFVMRSBoTW9kdWxlICkKQEAgLTU5MSw3ICs2MzEsNyBAQAogICAgIH0KICAgICBlbHNlIHBNb2R1bGUtPmRsbHNfdG9faW5pdCA9IDA7CiAKLSAgICBpZiAoZGVidWdnaW5nX21vZHVsZSkgTU9EVUxFX1ByaW50TW9kdWxlKCBoTW9kdWxlICk7CisgICAgaWYgKGRlYnVnZ2luZ19tb2R1bGUpIE1PRFVMRV9EdW1wTW9kdWxlKCBoTW9kdWxlICk7CiAgICAgcE1vZHVsZS0+bmV4dCA9IGhGaXJzdE1vZHVsZTsKICAgICBoRmlyc3RNb2R1bGUgPSBoTW9kdWxlOwogICAgIHJldHVybiBoTW9kdWxlOwpkaWZmIC0tZ2l0IGEvbG9hZGVyL3BlX2ltYWdlLmMgYi9sb2FkZXIvcGVfaW1hZ2UuYwppbmRleCBjZWQ0NWQwLi5hZDgyMjg4IDEwMDY0NAotLS0gYS9sb2FkZXIvcGVfaW1hZ2UuYworKysgYi9sb2FkZXIvcGVfaW1hZ2UuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiZGxscy5oIgogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAicGVleGUuaCIKQEAgLTMzLDggKzM0LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInhtYWxsb2MuaCIKIAotc3RydWN0IHdfZmlsZXMgKndpbmVfZmlsZXMgPSBOVUxMOwotCiB2b2lkIG15X3djc3RvbWJzKGNoYXIgKiByZXN1bHQsIHVfc2hvcnQgKiBzb3VyY2UsIGludCBsZW4pCiB7CiAgIHdoaWxlKGxlbi0tKSB7CkBAIC01Nyw3ICs1Niw3IEBACiAgIGlmKHJfc2l6ZSkKICAgICB2X3NpemU9cl9zaXplOwogICBlbHNlCi0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAgICAgZnByaW50ZihzdGRlcnIsInhtbWFwOiAlcyBsaW5lICVkIGRvZXNuJ3Qgc3VwcG9ydCBNQVBfQU5PTlxuIixfX0ZJTEVfXywgX19MSU5FX18pOwogI2Vsc2UKICAgICBmbGFncyB8PSBNQVBfQU5PTjsKQEAgLTEwNCwxMCArMTAzLDEwIEBACiAgICAgfQogfQogCi1EV09SRCBQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbihzdHJ1Y3Qgd19maWxlcyogd3BudCwgY2hhciogZnVuY05hbWUpCitzdGF0aWMgRFdPUkQgUEVfRmluZEV4cG9ydGVkRnVuY3Rpb24oc3RydWN0IHBlX2RhdGEgKnBlLCBjaGFyKiBmdW5jTmFtZSkKIHsKLQlzdHJ1Y3QgUEVfRXhwb3J0X0RpcmVjdG9yeSAqIGV4cG9ydHMgPSB3cG50LT5wZS0+cGVfZXhwb3J0OwotCXVuc2lnbmVkIGxvYWRfYWRkciA9IHdwbnQtPnBlLT5sb2FkX2FkZHI7CisJc3RydWN0IFBFX0V4cG9ydF9EaXJlY3RvcnkgKiBleHBvcnRzID0gcGUtPnBlX2V4cG9ydDsKKwl1bnNpZ25lZCBsb2FkX2FkZHIgPSBwZS0+bG9hZF9hZGRyOwogCXVfc2hvcnQgKiBvcmRpbmFsOwogCXVfbG9uZyAqIGZ1bmN0aW9uOwogCXVfY2hhciAqKiBuYW1lLCAqZW5hbWU7CkBAIC0xMzYsMjUgKzEzNSwyOCBAQAogCiBEV09SRCBQRV9HZXRQcm9jQWRkcmVzcyhITU9EVUxFIGhNb2R1bGUsIGNoYXIqIGZ1bmN0aW9uKQogewotCXN0cnVjdCB3X2ZpbGVzICp3cG50OwotCWZvcih3cG50PXdpbmVfZmlsZXM7d3BudDt3cG50PXdwbnQtPm5leHQpCi0JCWlmKHdwbnQtPmhNb2R1bGU9PWhNb2R1bGUpIGJyZWFrOwotCWlmKCF3cG50KXJldHVybiAwOwotCWlmKHdwbnQtPmJ1aWx0aW4pCi0JewotCQlpZihISVdPUkQoZnVuY3Rpb24pKQotCQkJcmV0dXJuIFJFTEFZMzJfR2V0RW50cnlQb2ludCh3cG50LT5idWlsdGluLGZ1bmN0aW9uLDApOwotCQllbHNlCi0JCQlyZXR1cm4gUkVMQVkzMl9HZXRFbnRyeVBvaW50KHdwbnQtPmJ1aWx0aW4sMCwoaW50KWZ1bmN0aW9uKTsKLQl9Ci0JcmV0dXJuIFBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uKHdwbnQsZnVuY3Rpb24pOworICAgIE5FX01PRFVMRSAqcE1vZHVsZTsKKyAgICBzdHJ1Y3QgcGVfZGF0YSAqcGU7CisKKyAgICBpZiAoIShwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKSkpIHJldHVybiAwOworICAgIGlmICghKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1dJTjMyKSkgcmV0dXJuIDA7CisgICAgaWYgKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX0JVSUxUSU4pCisgICAgeworICAgICAgICBCVUlMVElOX0RMTCAqZGxsID0gKEJVSUxUSU5fRExMICopTkVfV0lOMzJfTU9EVUxFKHBNb2R1bGUpOworICAgICAgICBpZihISVdPUkQoZnVuY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFJFTEFZMzJfR2V0RW50cnlQb2ludChkbGwsZnVuY3Rpb24sMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSRUxBWTMyX0dldEVudHJ5UG9pbnQoZGxsLDAsKGludClmdW5jdGlvbik7CisgICAgfQorICAgIGlmICghKHBlID0gTkVfV0lOMzJfTU9EVUxFKHBNb2R1bGUpKSkgcmV0dXJuIDA7CisgICAgcmV0dXJuIFBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uKCBwZSwgZnVuY3Rpb24gKTsKIH0KIAotdm9pZCBmaXh1cF9pbXBvcnRzKHN0cnVjdCB3X2ZpbGVzKiB3cG50KQordm9pZCBmaXh1cF9pbXBvcnRzKHN0cnVjdCBwZV9kYXRhICpwZSwgSE1PRFVMRSBoTW9kdWxlKQogeyAKICAgc3RydWN0IFBFX0ltcG9ydF9EaXJlY3RvcnkgKiBwZV9pbXA7CiAgIGludCBmaXh1cF9mYWlsZWQ9MDsKLSAgdW5zaWduZWQgaW50IGxvYWRfYWRkciA9IHdwbnQtPnBlLT5sb2FkX2FkZHI7CisgIHVuc2lnbmVkIGludCBsb2FkX2FkZHIgPSBwZS0+bG9hZF9hZGRyOwogICBpbnQgaTsKICAgTkVfTU9EVUxFICpuZV9tb2Q7CiAgIEhNT0RVTEUgKm1vZF9wdHI7CkBAIC0xNjMsMjEgKzE2NSwxOSBAQAogICBkcHJpbnRmX3dpbjMyKHN0ZGRlYiwgIlxuRHVtcGluZyBpbXBvcnRzIGxpc3RcbiIpOwogCiAgIC8qIGZpcnN0LCBjb3VudCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIG5vbi1pbnRlcm5hbCBtb2R1bGVzICovCi0gIHBlX2ltcCA9IHdwbnQtPnBlLT5wZV9pbXBvcnQ7CisgIHBlX2ltcCA9IHBlLT5wZV9pbXBvcnQ7CiAgIGZvcihpPTA7cGVfaW1wLT5Nb2R1bGVOYW1lO3BlX2ltcCsrKQogICAJaSsrOwogCiAgIC8qIE5vdywgYWxsb2NhdGUgbWVtb3J5IGZvciBkbGxzX3RvX2luaXQgKi8KLSAgbmVfbW9kID0gR2xvYmFsTG9jayh3cG50LT5oTW9kdWxlKTsKKyAgbmVfbW9kID0gR2xvYmFsTG9jayhoTW9kdWxlKTsKICAgbmVfbW9kLT5kbGxzX3RvX2luaXQgPSBHTE9CQUxfQWxsb2MoR01FTV9aRVJPSU5JVCwoaSsxKSAqIHNpemVvZihITU9EVUxFKSwKLSAgCQkJCQl3cG50LT5oTW9kdWxlLCBGQUxTRSwgRkFMU0UsIEZBTFNFICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhNb2R1bGUsIEZBTFNFLCBGQUxTRSwgRkFMU0UgKTsKICAgbW9kX3B0ciA9IEdsb2JhbExvY2sobmVfbW9kLT5kbGxzX3RvX2luaXQpOwogICAvKiBsb2FkIHRoZSBtb2R1bGVzIGFuZCBwdXQgdGhlaXIgaGFuZGxlcyBpbnRvIHRoZSBsaXN0ICovCi0gIGZvcihpPTAscGVfaW1wID0gd3BudC0+cGUtPnBlX2ltcG9ydDtwZV9pbXAtPk1vZHVsZU5hbWU7cGVfaW1wKyspCisgIGZvcihpPTAscGVfaW1wID0gcGUtPnBlX2ltcG9ydDtwZV9pbXAtPk1vZHVsZU5hbWU7cGVfaW1wKyspCiAgIHsKICAgCWNoYXIgKm5hbWUgPSAoY2hhciopbG9hZF9hZGRyK3BlX2ltcC0+TW9kdWxlTmFtZTsKLSAgCWlmKFJFTEFZMzJfR2V0QnVpbHRpbkRMTChuYW1lKSkKLQkJY29udGludWU7CiAJbW9kX3B0cltpXSA9IExvYWRNb2R1bGUobmFtZSwoTFBWT0lEKS0xKTsKIAlpZihtb2RfcHRyW2ldPD0oSE1PRFVMRSkzMikKIAl7CkBAIC0xODYsNyArMTg2LDcgQEAKIAl9CiAJaSsrOwogICB9Ci0gIHBlX2ltcCA9IHdwbnQtPnBlLT5wZV9pbXBvcnQ7CisgIHBlX2ltcCA9IHBlLT5wZV9pbXBvcnQ7CiAgIHdoaWxlIChwZV9pbXAtPk1vZHVsZU5hbWUpCiAgICAgewogICAgICAgY2hhciAqIE1vZHVsZTsKQEAgLTI2NywzNSArMjY3LDM1IEBACiAgIGlmKGZpeHVwX2ZhaWxlZClleGl0KDEpOwogfQogCi1zdGF0aWMgdm9pZCBjYWxjX3ZtYV9zaXplKHN0cnVjdCB3X2ZpbGVzICp3cG50KQorc3RhdGljIHZvaWQgY2FsY192bWFfc2l6ZShzdHJ1Y3QgcGVfZGF0YSAqcGUpCiB7CiAgIGludCBpOwogCiAgIGRwcmludGZfd2luMzIoc3RkZGViLCAiRHVtcCBvZiBzZWdtZW50IHRhYmxlXG4iKTsKICAgZHByaW50Zl93aW4zMihzdGRkZWIsICIgICBOYW1lICAgIFZTeiAgVmFkZHIgICAgIFN6UmF3ICAgRmlsZWFkciAgKlJlbG9jICpMaW5ldW0gI1JlbG9jICNMaW51bSBDaGFyXG4iKTsKLSAgZm9yKGk9MDsgaTwgd3BudC0+cGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zOyBpKyspCisgIGZvcihpPTA7IGk8IHBlLT5wZV9oZWFkZXItPmNvZmYuTnVtYmVyT2ZTZWN0aW9uczsgaSsrKQogICAgIHsKICAgICAgIGRwcmludGZfd2luMzIoc3RkZGViLCAiJThzOiAlNC40bHggJTguOGx4ICU4LjhseCAlOC44bHggJTguOGx4ICU4LjhseCAlNC40eCAlNC40eCAlOC44bHhcbiIsIAotCSAgICAgd3BudC0+cGUtPnBlX3NlZ1tpXS5OYW1lLCAKLQkgICAgIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9TaXplLAotCSAgICAgd3BudC0+cGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MsCi0JICAgICB3cG50LT5wZS0+cGVfc2VnW2ldLlNpemVfT2ZfUmF3X0RhdGEsCi0JICAgICB3cG50LT5wZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1Jhd0RhdGEsCi0JICAgICB3cG50LT5wZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1JlbG9jYXRpb25zLAotCSAgICAgd3BudC0+cGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9MaW5lbnVtYmVycywKLQkgICAgIHdwbnQtPnBlLT5wZV9zZWdbaV0uTnVtYmVyT2ZSZWxvY2F0aW9ucywKLQkgICAgIHdwbnQtPnBlLT5wZV9zZWdbaV0uTnVtYmVyT2ZMaW5lbnVtYmVycywKLQkgICAgIHdwbnQtPnBlLT5wZV9zZWdbaV0uQ2hhcmFjdGVyaXN0aWNzKTsKLQkgIHdwbnQtPnBlLT52bWFfc2l6ZSA9IG1heCh3cG50LT5wZS0+dm1hX3NpemUsCi0JICAJCXdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzICsgCi0JCQl3cG50LT5wZS0+cGVfc2VnW2ldLlNpemVfT2ZfUmF3X0RhdGEpOworCSAgICAgcGUtPnBlX3NlZ1tpXS5OYW1lLCAKKwkgICAgIHBlLT5wZV9zZWdbaV0uVmlydHVhbF9TaXplLAorCSAgICAgcGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MsCisJICAgICBwZS0+cGVfc2VnW2ldLlNpemVfT2ZfUmF3X0RhdGEsCisJICAgICBwZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1Jhd0RhdGEsCisJICAgICBwZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1JlbG9jYXRpb25zLAorCSAgICAgcGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9MaW5lbnVtYmVycywKKwkgICAgIHBlLT5wZV9zZWdbaV0uTnVtYmVyT2ZSZWxvY2F0aW9ucywKKwkgICAgIHBlLT5wZV9zZWdbaV0uTnVtYmVyT2ZMaW5lbnVtYmVycywKKwkgICAgIHBlLT5wZV9zZWdbaV0uQ2hhcmFjdGVyaXN0aWNzKTsKKwkgIHBlLT52bWFfc2l6ZSA9IG1heChwZS0+dm1hX3NpemUsCisJICAJCXBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzICsgCisJCQlwZS0+cGVfc2VnW2ldLlNpemVfT2ZfUmF3X0RhdGEpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgZG9fcmVsb2NhdGlvbnMoc3RydWN0IHdfZmlsZXMgKndwbnQpCitzdGF0aWMgdm9pZCBkb19yZWxvY2F0aW9ucyhzdHJ1Y3QgcGVfZGF0YSAqcGUpCiB7Ci0JaW50IGRlbHRhID0gd3BudC0+cGUtPmxvYWRfYWRkciAtIHdwbnQtPnBlLT5iYXNlX2FkZHI7Ci0Jc3RydWN0IFBFX1JlbG9jX0Jsb2NrICpyID0gd3BudC0+cGUtPnBlX3JlbG9jOworCWludCBkZWx0YSA9IHBlLT5sb2FkX2FkZHIgLSBwZS0+YmFzZV9hZGRyOworCXN0cnVjdCBQRV9SZWxvY19CbG9jayAqciA9IHBlLT5wZV9yZWxvYzsKIAlpbnQgaGRlbHRhID0gKGRlbHRhID4+IDE2KSAmIDB4RkZGRjsKIAlpbnQgbGRlbHRhID0gZGVsdGEgJiAweEZGRkY7CiAJLyogaW50IHJlbG9jX3NpemUgPSAqLwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJCXJldHVybjsKIAl3aGlsZShyLT5QYWdlUlZBKQogCXsKLQkJY2hhciAqcGFnZSA9IChjaGFyKil3cG50LT5wZS0+bG9hZF9hZGRyICsgci0+UGFnZVJWQTsKKwkJY2hhciAqcGFnZSA9IChjaGFyKilwZS0+bG9hZF9hZGRyICsgci0+UGFnZVJWQTsKIAkJaW50IGNvdW50ID0gKHItPkJsb2NrU2l6ZSAtIDgpLzI7CiAJCWludCBpOwogCQlkcHJpbnRmX2ZpeHVwKHN0ZGRlYiwgIiV4IHJlbG9jYXRpb25zIGZvciBwYWdlICVseFxuIiwKQEAgLTM1NywxNzkgKzM1NywxNzcgQEAKICAqCQkJUEVfTG9hZEltYWdlCiAgKiBMb2FkIG9uZSBQRSBmb3JtYXQgZXhlY3V0YWJsZSBpbnRvIG1lbW9yeQogICovCi1zdGF0aWMgSElOU1RBTkNFIFBFX0xvYWRJbWFnZSggaW50IGZkLCBzdHJ1Y3Qgd19maWxlcyAqd3BudCApCitzdGF0aWMgc3RydWN0IHBlX2RhdGEgKlBFX0xvYWRJbWFnZSggaW50IGZkLCBITU9EVUxFIGhNb2R1bGUsIFdPUkQgb2Zmc2V0ICkKIHsKLQlpbnQgaSwgcmVzdWx0OworICAgIHN0cnVjdCBwZV9kYXRhICpwZTsKKyAgICBpbnQgaSwgcmVzdWx0OwogICAgIHVuc2lnbmVkIGludCBsb2FkX2FkZHI7Ci0Jc3RydWN0IERpcmVjdG9yeSBkaXI7CisgICAgc3RydWN0IERpcmVjdG9yeSBkaXI7CiAKLQl3cG50LT5wZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZV9kYXRhKSk7Ci0JbWVtc2V0KHdwbnQtPnBlLDAsc2l6ZW9mKHN0cnVjdCBwZV9kYXRhKSk7Ci0Jd3BudC0+cGUtPnBlX2hlYWRlciA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZV9oZWFkZXJfcykpOworCXBlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlX2RhdGEpKTsKKwltZW1zZXQocGUsMCxzaXplb2Yoc3RydWN0IHBlX2RhdGEpKTsKKwlwZS0+cGVfaGVhZGVyID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlX2hlYWRlcl9zKSk7CiAKIAkvKiByZWFkIFBFIGhlYWRlciAqLwotCWxzZWVrKCBmZCwgd3BudC0+bXpfaGVhZGVyLT5uZV9vZmZzZXQsIFNFRUtfU0VUKTsKLQlyZWFkKCBmZCwgd3BudC0+cGUtPnBlX2hlYWRlciwgc2l6ZW9mKHN0cnVjdCBwZV9oZWFkZXJfcykpOworCWxzZWVrKCBmZCwgb2Zmc2V0LCBTRUVLX1NFVCk7CisJcmVhZCggZmQsIHBlLT5wZV9oZWFkZXIsIHNpemVvZihzdHJ1Y3QgcGVfaGVhZGVyX3MpKTsKIAogCS8qIHJlYWQgc2VjdGlvbnMgKi8KLQl3cG50LT5wZS0+cGVfc2VnID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlX3NlZ21lbnRfdGFibGUpICogCi0JCQkJICAgd3BudC0+cGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zKTsKLQlyZWFkKCBmZCwgd3BudC0+cGUtPnBlX3NlZywgc2l6ZW9mKHN0cnVjdCBwZV9zZWdtZW50X3RhYmxlKSAqIAotCQkJd3BudC0+cGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zKTsKKwlwZS0+cGVfc2VnID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlX3NlZ21lbnRfdGFibGUpICogCisJCQkJICAgcGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zKTsKKwlyZWFkKCBmZCwgcGUtPnBlX3NlZywgc2l6ZW9mKHN0cnVjdCBwZV9zZWdtZW50X3RhYmxlKSAqIAorCQkJcGUtPnBlX2hlYWRlci0+Y29mZi5OdW1iZXJPZlNlY3Rpb25zKTsKIAotCWxvYWRfYWRkciA9IHdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkJhc2VPZkltYWdlOwotCXdwbnQtPnBlLT5iYXNlX2FkZHI9bG9hZF9hZGRyOwotCXdwbnQtPnBlLT52bWFfc2l6ZT0wOworCWxvYWRfYWRkciA9IHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkJhc2VPZkltYWdlOworCXBlLT5iYXNlX2FkZHI9bG9hZF9hZGRyOworCXBlLT52bWFfc2l6ZT0wOwogCWRwcmludGZfd2luMzIoc3RkZGViLCAiTG9hZCBhZGRyIGlzICV4XG4iLGxvYWRfYWRkcik7Ci0JY2FsY192bWFfc2l6ZSh3cG50KTsKKwljYWxjX3ZtYV9zaXplKHBlKTsKIAogCS8qIFdlIHVzZSBtYWxsb2MgaGVyZSwgd2hpbGUgYSBodWdlIHBhcnQgb2YgdGhhdCBhZGRyZXNzIHNwYWNlIGRvZXMKIAkgICBub3QgYmUgc3VwcG9ydGVkIGJ5IGFjdHVhbCBtZW1vcnkuIEl0IGhhcyB0byBiZSBjb250aWd1b3VzLCB0aG91Z2guCiAJICAgSSBkb24ndCBrbm93IGlmIG1tYXAoIi9kZXYvbnVsbCIpOyB3b3VsZCBkbyBhbnkgYmV0dGVyLgogCSAgIFdoYXQgSSdkIHJlYWxseSBsaWtlIHRvIGRvIGlzIGEgV2luMzIgc3R5bGUgVmlydHVhbEFsbG9jL01hcFZpZXdPZkZpbGUKIAkgICBzZXF1ZW5jZSAqLwotCWxvYWRfYWRkciA9IHdwbnQtPnBlLT5sb2FkX2FkZHIgPSBtYWxsb2Mod3BudC0+cGUtPnZtYV9zaXplKTsKKwlsb2FkX2FkZHIgPSBwZS0+bG9hZF9hZGRyID0gbWFsbG9jKHBlLT52bWFfc2l6ZSk7CiAJZHByaW50Zl93aW4zMihzdGRkZWIsICJMb2FkIGFkZHIgaXMgcmVhbGx5ICV4LCByYW5nZSAleFxuIiwKLQkJd3BudC0+cGUtPmxvYWRfYWRkciwgd3BudC0+cGUtPnZtYV9zaXplKTsKKwkJcGUtPmxvYWRfYWRkciwgcGUtPnZtYV9zaXplKTsKIAogCi0JZm9yKGk9MDsgaSA8IHdwbnQtPnBlLT5wZV9oZWFkZXItPmNvZmYuTnVtYmVyT2ZTZWN0aW9uczsgaSsrKQorCWZvcihpPTA7IGkgPCBwZS0+cGVfaGVhZGVyLT5jb2ZmLk51bWJlck9mU2VjdGlvbnM7IGkrKykKIAl7CiAJCS8qIGxvYWQgb25seSBub24tQlNTIHNlZ21lbnRzICovCi0JCWlmKHdwbnQtPnBlLT5wZV9zZWdbaV0uQ2hhcmFjdGVyaXN0aWNzICYgCisJCWlmKHBlLT5wZV9zZWdbaV0uQ2hhcmFjdGVyaXN0aWNzICYgCiAJCQl+IElNQUdFX1NDTl9UWVBFX0NOVF9VTklOSVRJQUxJWkVEX0RBVEEpCi0JCWlmKGxzZWVrKGZkLHdwbnQtPnBlLT5wZV9zZWdbaV0uUG9pbnRlclRvUmF3RGF0YSxTRUVLX1NFVCkgPT0gLTEKLQkJfHwgcmVhZChmZCxsb2FkX2FkZHIgKyB3cG50LT5wZS0+cGVfc2VnW2ldLlZpcnR1YWxfQWRkcmVzcywKLQkJCQl3cG50LT5wZS0+cGVfc2VnW2ldLlNpemVfT2ZfUmF3X0RhdGEpIAotCQkJCSE9IHdwbnQtPnBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSkKKwkJaWYobHNlZWsoZmQscGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhLFNFRUtfU0VUKSA9PSAtMQorCQl8fCByZWFkKGZkLGxvYWRfYWRkciArIHBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzLAorCQkJCXBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSkgCisJCQkJIT0gcGUtPnBlX3NlZ1tpXS5TaXplX09mX1Jhd19EYXRhKQogCQl7CiAJCQlmcHJpbnRmKHN0ZGVyciwiRmFpbGVkIHRvIGxvYWQgc2VjdGlvbiAleFxuIiwgaSk7CiAJCQlleGl0KDApOwogCQl9Ci0JCXJlc3VsdCA9IGxvYWRfYWRkciArIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzOworCQlyZXN1bHQgPSBsb2FkX2FkZHIgKyBwZS0+cGVfc2VnW2ldLlZpcnR1YWxfQWRkcmVzczsKICNpZiAwCiAJaWYoIWxvYWRfYWRkcikgewogCQkKLQkJcmVzdWx0ID0gKGludCl4bW1hcCgoY2hhciAqKTAsIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9TaXplLAotCQkJd3BudC0+cGUtPnBlX3NlZ1tpXS5TaXplX09mX1Jhd19EYXRhLCA3LAotCQkJTUFQX1BSSVZBVEUsIGZkLCB3cG50LT5wZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1Jhd0RhdGEpOwotCQlsb2FkX2FkZHIgPSAodW5zaWduZWQgaW50KSByZXN1bHQgLSAgd3BudC0+cGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3M7CisJCXJlc3VsdCA9IChpbnQpeG1tYXAoKGNoYXIgKikwLCBwZS0+cGVfc2VnW2ldLlZpcnR1YWxfU2l6ZSwKKwkJCXBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSwgNywKKwkJCU1BUF9QUklWQVRFLCBmZCwgcGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhKTsKKwkJbG9hZF9hZGRyID0gKHVuc2lnbmVkIGludCkgcmVzdWx0IC0gIHBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzOwogCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IChpbnQpeG1tYXAoKGNoYXIgKikgbG9hZF9hZGRyICsgd3BudC0+cGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MsIAotCQkJICB3cG50LT5wZS0+cGVfc2VnW2ldLlZpcnR1YWxfU2l6ZSwKLQkJICAgICAgd3BudC0+cGUtPnBlX3NlZ1tpXS5TaXplX09mX1Jhd19EYXRhLCA3LCBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgCi0JCSAgICAgIGZkLCB3cG50LT5wZS0+cGVfc2VnW2ldLlBvaW50ZXJUb1Jhd0RhdGEpOworCQlyZXN1bHQgPSAoaW50KXhtbWFwKChjaGFyICopIGxvYWRfYWRkciArIHBlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzLCAKKwkJCSAgcGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX1NpemUsCisJCSAgICAgIHBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSwgNywgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIAorCQkgICAgICBmZCwgcGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhKTsKIAl9CiAJaWYocmVzdWx0PT0tMSl7CiAJCWZwcmludGYoc3RkZXJyLCJDb3VsZCBub3QgbG9hZCBzZWN0aW9uICV4IHRvIGRlc2lyZWQgYWRkcmVzcyAlbHhcbiIsCi0JCQlpLCBsb2FkX2FkZHIrd3BudC0+cGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MpOworCQkJaSwgbG9hZF9hZGRyK3BlLT5wZV9zZWdbaV0uVmlydHVhbF9BZGRyZXNzKTsKIAkJZnByaW50ZihzdGRlcnIsIk5lZWQgdG8gaW1wbGVtZW50IHJlbG9jYXRpb25zIG5vd1xuIik7CiAJCWV4aXQoMCk7CiAJfQogI2VuZGlmCiAKLSAgICAgICAgaWYoc3RyY21wKHdwbnQtPnBlLT5wZV9zZWdbaV0uTmFtZSwgIi5ic3MiKSA9PSAwKQorICAgICAgICBpZihzdHJjbXAocGUtPnBlX3NlZ1tpXS5OYW1lLCAiLmJzcyIpID09IDApCiAgICAgICAgICAgICBtZW1zZXQoKHZvaWQgKilyZXN1bHQsIDAsIAotICAgICAgICAgICAgICAgICAgIHdwbnQtPnBlLT5wZV9zZWdbaV0uVmlydHVhbF9TaXplID8KLSAgICAgICAgICAgICAgICAgICB3cG50LT5wZS0+cGVfc2VnW2ldLlZpcnR1YWxfU2l6ZSA6Ci0gICAgICAgICAgICAgICAgICAgd3BudC0+cGUtPnBlX3NlZ1tpXS5TaXplX09mX1Jhd19EYXRhKTsKKyAgICAgICAgICAgICAgICAgICBwZS0+cGVfc2VnW2ldLlZpcnR1YWxfU2l6ZSA/CisgICAgICAgICAgICAgICAgICAgcGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX1NpemUgOgorICAgICAgICAgICAgICAgICAgIHBlLT5wZV9zZWdbaV0uU2l6ZV9PZl9SYXdfRGF0YSk7CiAKLQlpZihzdHJjbXAod3BudC0+cGUtPnBlX3NlZ1tpXS5OYW1lLCAiLmlkYXRhIikgPT0gMCkKLQkJd3BudC0+cGUtPnBlX2ltcG9ydCA9IChzdHJ1Y3QgUEVfSW1wb3J0X0RpcmVjdG9yeSAqKSByZXN1bHQ7CisJaWYoc3RyY21wKHBlLT5wZV9zZWdbaV0uTmFtZSwgIi5pZGF0YSIpID09IDApCisJCXBlLT5wZV9pbXBvcnQgPSAoc3RydWN0IFBFX0ltcG9ydF9EaXJlY3RvcnkgKikgcmVzdWx0OwogCi0JaWYoc3RyY21wKHdwbnQtPnBlLT5wZV9zZWdbaV0uTmFtZSwgIi5lZGF0YSIpID09IDApCi0JCXdwbnQtPnBlLT5wZV9leHBvcnQgPSAoc3RydWN0IFBFX0V4cG9ydF9EaXJlY3RvcnkgKikgcmVzdWx0OworCWlmKHN0cmNtcChwZS0+cGVfc2VnW2ldLk5hbWUsICIuZWRhdGEiKSA9PSAwKQorCQlwZS0+cGVfZXhwb3J0ID0gKHN0cnVjdCBQRV9FeHBvcnRfRGlyZWN0b3J5ICopIHJlc3VsdDsKIAotCWlmKHN0cmNtcCh3cG50LT5wZS0+cGVfc2VnW2ldLk5hbWUsICIucnNyYyIpID09IDApIHsKLQkgICAgd3BudC0+cGUtPnBlX3Jlc291cmNlID0gKHN0cnVjdCBQRV9SZXNvdXJjZV9EaXJlY3RvcnkgKikgcmVzdWx0OworCWlmKHN0cmNtcChwZS0+cGVfc2VnW2ldLk5hbWUsICIucnNyYyIpID09IDApIHsKKwkgICAgcGUtPnBlX3Jlc291cmNlID0gKHN0cnVjdCBQRV9SZXNvdXJjZV9EaXJlY3RvcnkgKikgcmVzdWx0OwogI2lmIDAKIC8qIEZJWE1FIHBlLT5yZXNvdXJjZV9vZmZzZXQgc2hvdWxkIGJlIGRlbGV0ZWQgZnJvbSBzdHJ1Y3R1cmUgaWYgdGhpcwogIGlmZGVmIGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgKi8KIAkgICAgLyogc2F2ZSBvZmZzZXQgZm9yIFBFX0ZpbmRSZXNvdXJjZSAqLwotCSAgICB3cG50LT5wZS0+cmVzb3VyY2Vfb2Zmc2V0ID0gd3BudC0+cGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MgLSAKLQkJCQkJd3BudC0+cGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhOworCSAgICBwZS0+cmVzb3VyY2Vfb2Zmc2V0ID0gcGUtPnBlX3NlZ1tpXS5WaXJ0dWFsX0FkZHJlc3MgLSAKKwkJCQkJcGUtPnBlX3NlZ1tpXS5Qb2ludGVyVG9SYXdEYXRhOwogI2VuZGlmCQogCSAgICB9Ci0JaWYoc3RyY21wKHdwbnQtPnBlLT5wZV9zZWdbaV0uTmFtZSwgIi5yZWxvYyIpID09IDApCi0JCXdwbnQtPnBlLT5wZV9yZWxvYyA9IChzdHJ1Y3QgUEVfUmVsb2NfQmxvY2sgKikgcmVzdWx0OworCWlmKHN0cmNtcChwZS0+cGVfc2VnW2ldLk5hbWUsICIucmVsb2MiKSA9PSAwKQorCQlwZS0+cGVfcmVsb2MgPSAoc3RydWN0IFBFX1JlbG9jX0Jsb2NrICopIHJlc3VsdDsKIAogCX0KIAogCS8qIFRoZXJlIGlzIHdvcmQgdGhhdCB0aGUgYWN0dWFsIGxvYWRlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZQogCSAgIHNlY3Rpb24gbmFtZXMsIGFuZCBvbmx5IGdvZXMgZm9yIHRoZSBEYXRhRGlyZWN0b3J5ICovCi0JZGlyPXdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnlbSU1BR0VfRklMRV9FWFBPUlRfRElSRUNUT1JZXTsKKwlkaXI9cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeVtJTUFHRV9GSUxFX0VYUE9SVF9ESVJFQ1RPUlldOwogCWlmKGRpci5TaXplKQogCXsKLQkJaWYod3BudC0+cGUtPnBlX2V4cG9ydCAmJiAKLQkJCXdwbnQtPnBlLT5wZV9leHBvcnQhPWxvYWRfYWRkcitkaXIuVmlydHVhbF9hZGRyZXNzKQorCQlpZihwZS0+cGVfZXhwb3J0ICYmIAorCQkJcGUtPnBlX2V4cG9ydCE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCiAJCQlmcHJpbnRmKHN0ZGVyciwid3JvbmcgZXhwb3J0IGRpcmVjdG9yeT8/XG4iKTsKIAkJLyogYWx3YXlzIHRydXN0IHRoZSBkaXJlY3RvcnkgKi8KLQkJd3BudC0+cGUtPnBlX2V4cG9ydCA9IGxvYWRfYWRkcitkaXIuVmlydHVhbF9hZGRyZXNzOworCQlwZS0+cGVfZXhwb3J0ID0gbG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3M7CiAJfQogCi0JZGlyPXdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnlbSU1BR0VfRklMRV9JTVBPUlRfRElSRUNUT1JZXTsKKwlkaXI9cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeVtJTUFHRV9GSUxFX0lNUE9SVF9ESVJFQ1RPUlldOwogCWlmKGRpci5TaXplKQogCXsKLQkJaWYod3BudC0+cGUtPnBlX2ltcG9ydCAmJiAKLQkJCXdwbnQtPnBlLT5wZV9pbXBvcnQhPWxvYWRfYWRkcitkaXIuVmlydHVhbF9hZGRyZXNzKQorCQlpZihwZS0+cGVfaW1wb3J0ICYmIAorCQkJcGUtPnBlX2ltcG9ydCE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCiAJCQlmcHJpbnRmKHN0ZGVyciwid3JvbmcgaW1wb3J0IGRpcmVjdG9yeT8/XG4iKTsKLQkJd3BudC0+cGUtPnBlX2ltcG9ydCA9IGxvYWRfYWRkcitkaXIuVmlydHVhbF9hZGRyZXNzOworCQlwZS0+cGVfaW1wb3J0ID0gbG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3M7CiAJfQogCi0JZGlyPXdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnlbSU1BR0VfRklMRV9SRVNPVVJDRV9ESVJFQ1RPUlldOworCWRpcj1wZS0+cGVfaGVhZGVyLT5vcHRfY29mZi5EYXRhRGlyZWN0b3J5W0lNQUdFX0ZJTEVfUkVTT1VSQ0VfRElSRUNUT1JZXTsKIAlpZihkaXIuU2l6ZSkKIAl7Ci0JCWlmKHdwbnQtPnBlLT5wZV9yZXNvdXJjZSAmJiAKLQkJCXdwbnQtPnBlLT5wZV9yZXNvdXJjZSE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCisJCWlmKHBlLT5wZV9yZXNvdXJjZSAmJiAKKwkJCXBlLT5wZV9yZXNvdXJjZSE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCiAJCQlmcHJpbnRmKHN0ZGVyciwid3JvbmcgcmVzb3VyY2UgZGlyZWN0b3J5Pz9cbiIpOwotCQl3cG50LT5wZS0+cGVfcmVzb3VyY2UgPSBsb2FkX2FkZHIrZGlyLlZpcnR1YWxfYWRkcmVzczsKKwkJcGUtPnBlX3Jlc291cmNlID0gbG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3M7CiAJfQogCi0JZGlyPXdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnlbSU1BR0VfRklMRV9CQVNFX1JFTE9DQVRJT05fVEFCTEVdOworCWRpcj1wZS0+cGVfaGVhZGVyLT5vcHRfY29mZi5EYXRhRGlyZWN0b3J5W0lNQUdFX0ZJTEVfQkFTRV9SRUxPQ0FUSU9OX1RBQkxFXTsKIAlpZihkaXIuU2l6ZSkKIAl7Ci0JCWlmKHdwbnQtPnBlLT5wZV9yZWxvYyAmJiAKLQkJCXdwbnQtPnBlLT5wZV9yZWxvYyE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCisJCWlmKHBlLT5wZV9yZWxvYyAmJiAKKwkJCXBlLT5wZV9yZWxvYyE9bG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3MpCiAJCQlmcHJpbnRmKHN0ZGVyciwid3JvbmcgcmVsb2NhdGlvbiBsaXN0Pz9cbiIpOwotCQl3cG50LT5wZS0+cGVfcmVsb2MgPSBsb2FkX2FkZHIrZGlyLlZpcnR1YWxfYWRkcmVzczsKKwkJcGUtPnBlX3JlbG9jID0gbG9hZF9hZGRyK2Rpci5WaXJ0dWFsX2FkZHJlc3M7CiAJfQogCi0JaWYod3BudC0+cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQorCWlmKHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKIAkJW0lNQUdFX0ZJTEVfRVhDRVBUSU9OX0RJUkVDVE9SWV0uU2l6ZSkKIAkJZHByaW50Zl93aW4zMihzdGRuaW1wLCJFeGNlcHRpb24gZGlyZWN0b3J5IGlnbm9yZWRcbiIpOwogCi0JaWYod3BudC0+cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQorCWlmKHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKIAkJW0lNQUdFX0ZJTEVfU0VDVVJJVFlfRElSRUNUT1JZXS5TaXplKQogCQlkcHJpbnRmX3dpbjMyKHN0ZG5pbXAsIlNlY3VyaXR5IGRpcmVjdG9yeSBpZ25vcmVkXG4iKTsKIAotCWlmKHdwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKKwlpZihwZS0+cGVfaGVhZGVyLT5vcHRfY29mZi5EYXRhRGlyZWN0b3J5CiAJCVtJTUFHRV9GSUxFX0RFQlVHX0RJUkVDVE9SWV0uU2l6ZSkKIAkJZHByaW50Zl93aW4zMihzdGRuaW1wLCJEZWJ1ZyBkaXJlY3RvcnkgaWdub3JlZFxuIik7CiAKLQlpZih3cG50LT5wZS0+cGVfaGVhZGVyLT5vcHRfY29mZi5EYXRhRGlyZWN0b3J5CisJaWYocGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQogCQlbSU1BR0VfRklMRV9ERVNDUklQVElPTl9TVFJJTkddLlNpemUpCiAJCWRwcmludGZfd2luMzIoc3RkbmltcCwiRGVzY3JpcHRpb24gc3RyaW5nIGlnbm9yZWRcbiIpOwogCi0JaWYod3BudC0+cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQorCWlmKHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKIAkJW0lNQUdFX0ZJTEVfTUFDSElORV9WQUxVRV0uU2l6ZSkKIAkJZHByaW50Zl93aW4zMihzdGRuaW1wLCJNYWNoaW5lIFZhbHVlIGlnbm9yZWRcbiIpOwogCi0JaWYod3BudC0+cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQorCWlmKHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKIAkJW0lNQUdFX0ZJTEVfVEhSRUFEX0xPQ0FMX1NUT1JBR0VdLlNpemUpCiAJCSBkcHJpbnRmX3dpbjMyKHN0ZG5pbXAsIlRocmVhZCBsb2NhbCBzdG9yYWdlIGlnbm9yZWRcbiIpOwogCi0JaWYod3BudC0+cGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuRGF0YURpcmVjdG9yeQorCWlmKHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkRhdGFEaXJlY3RvcnkKIAkJW0lNQUdFX0ZJTEVfQ0FMTEJBQ0tfRElSRUNUT1JZXS5TaXplKQogCQlkcHJpbnRmX3dpbjMyKHN0ZG5pbXAsIkNhbGxiYWNrIGRpcmVjdG9yeSBpZ25vcmVkXG4iKTsKIAogCi0JaWYod3BudC0+cGUtPnBlX2ltcG9ydCkgZml4dXBfaW1wb3J0cyh3cG50KTsKLQlpZih3cG50LT5wZS0+cGVfZXhwb3J0KSBkdW1wX2V4cG9ydHMod3BudC0+cGUtPnBlX2V4cG9ydCxsb2FkX2FkZHIpOwotCWlmKHdwbnQtPnBlLT5wZV9yZWxvYykgZG9fcmVsb2NhdGlvbnMod3BudCk7Ci0gIAotCXdwbnQtPmhpbnN0YW5jZSA9IChISU5TVEFOQ0UpMHg4MDAwOwotCXdwbnQtPmxvYWRfYWRkciA9IGxvYWRfYWRkcjsKLQlyZXR1cm4gKHdwbnQtPmhpbnN0YW5jZSk7CisJaWYocGUtPnBlX2ltcG9ydCkgZml4dXBfaW1wb3J0cyhwZSwgaE1vZHVsZSk7CisJaWYocGUtPnBlX2V4cG9ydCkgZHVtcF9leHBvcnRzKHBlLT5wZV9leHBvcnQsbG9hZF9hZGRyKTsKKwlpZihwZS0+cGVfcmVsb2MpIGRvX3JlbG9jYXRpb25zKHBlKTsKKyAgICAgICAgcmV0dXJuIHBlOwogfQogCiBISU5TVEFOQ0UgTU9EVUxFX0NyZWF0ZUluc3RhbmNlKEhNT0RVTEUgaE1vZHVsZSxMT0FEUEFSQU1TICpwYXJhbXMpOwpAQCAtNTM3LDMxICs1MzUsMjcgQEAKIAogSElOU1RBTkNFIFBFX0xvYWRNb2R1bGUoIGludCBmZCwgT0ZTVFJVQ1QgKm9mcywgTE9BRFBBUkFNUyogcGFyYW1zICkKIHsKLQlzdHJ1Y3Qgd19maWxlcyAqd3BudDsKKyAgICAgICAgc3RydWN0IHBlX2RhdGEgKnBlOwogCWludCBzaXplLCBvZl9zaXplOwogCU5FX01PRFVMRSAqcE1vZHVsZTsKKyAgICAgICAgTkVfV0lOMzJfRVhUUkFJTkZPICpwRXh0cmFJbmZvOwogCVNFR1RBQkxFRU5UUlkgKnBTZWdtZW50OwogCWNoYXIgKnBTdHI7CiAJRFdPUkQgY3RzOwogCUhNT0RVTEUgaE1vZHVsZTsKIAlISU5TVEFOQ0UgaEluc3RhbmNlOworICAgICAgICBzdHJ1Y3QgbXpfaGVhZGVyX3MgbXpfaGVhZGVyOwogCiAJQUxJQVNfVXNlQWxpYXNlcz0xOwogCi0Jd3BudD14bWFsbG9jKHNpemVvZihzdHJ1Y3Qgd19maWxlcykpOwotCXdwbnQtPm9mcz0qb2ZzOwotCXdwbnQtPnR5cGU9MDsKLQl3cG50LT5oaW5zdGFuY2U9MDsKLQl3cG50LT5oTW9kdWxlPTA7Ci0Jd3BudC0+aW5pdGlhbGlzZWQ9MDsKLQl3cG50LT5idWlsdGluPTA7CiAJbHNlZWsoZmQsMCxTRUVLX1NFVCk7Ci0Jd3BudC0+bXpfaGVhZGVyPXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtel9oZWFkZXJfcykpOwotCXJlYWQoZmQsd3BudC0+bXpfaGVhZGVyLHNpemVvZihzdHJ1Y3QgbXpfaGVhZGVyX3MpKTsKKwlyZWFkKCBmZCwgJm16X2hlYWRlciwgc2l6ZW9mKG16X2hlYWRlcikgKTsKIAogICAgICAgICBvZl9zaXplID0gc2l6ZW9mKE9GU1RSVUNUKSAtIHNpemVvZihvZnMtPnN6UGF0aE5hbWUpCiAgICAgICAgICAgICAgICAgICArIHN0cmxlbihvZnMtPnN6UGF0aE5hbWUpICsgMTsKIAlzaXplID0gc2l6ZW9mKE5FX01PRFVMRSkgKworICAgICAgICAgICAgICAgLyogZXh0cmEgbW9kdWxlIGluZm8gKi8KKyAgICAgICAgICAgICAgIHNpemVvZihORV9XSU4zMl9FWFRSQUlORk8pICsKICAgICAgICAgICAgICAgIC8qIGxvYWRlZCBmaWxlIGluZm8gKi8KICAgICAgICAgICAgICAgIG9mX3NpemUgKwogICAgICAgICAgICAgICAgLyogc2VnbWVudCB0YWJsZTogRFMsQ1MgKi8KQEAgLTU3Miw3ICs1NjYsNiBAQAogICAgICAgICAgICAgICAgODsKIAogCWhNb2R1bGUgPSBHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemUgKTsKLQl3cG50LT5oTW9kdWxlPWhNb2R1bGU7CiAJaWYgKCFoTW9kdWxlKSByZXR1cm4gKEhJTlNUQU5DRSkxMTsgIC8qIGludmFsaWQgZXhlICovCiAKIAlGYXJTZXRPd25lciggaE1vZHVsZSwgaE1vZHVsZSApOwpAQCAtNTkzLDE3ICs1ODYsMTkgQEAKIAlwTW9kdWxlLT5zZWdfY291bnQ9MTsKIAlwTW9kdWxlLT5tb2RyZWZfY291bnQ9MDsKIAlwTW9kdWxlLT5ucm5hbWVfc2l6ZT0wOwotCXBNb2R1bGUtPnNlZ190YWJsZT1zaXplb2YoTkVfTU9EVUxFKSArIG9mX3NpemU7Ci0JcE1vZHVsZS0+ZmlsZWluZm89c2l6ZW9mKE5FX01PRFVMRSk7CisJcE1vZHVsZS0+ZmlsZWluZm89c2l6ZW9mKE5FX01PRFVMRSkgKyBzaXplb2YoTkVfV0lOMzJfRVhUUkFJTkZPKTsKIAlwTW9kdWxlLT5vc19mbGFncz1ORV9PU0ZMQUdTX1dJTkRPV1M7CiAJcE1vZHVsZS0+ZXhwZWN0ZWRfdmVyc2lvbj0weDMwQTsKIAotICAgICAgICAvKiBTZXQgbG9hZGVkIGZpbGUgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgbWVtY3B5KCBwTW9kdWxlICsgMSwgb2ZzLCBvZl9zaXplICk7Ci0gICAgICAgICgoT0ZTVFJVQ1QgKikocE1vZHVsZSsxKSktPmNCeXRlcyA9IG9mX3NpemUgLSAxOworICAgICAgICAvKiBTZXQgZXh0cmEgaW5mbyAqLworICAgICAgICBwRXh0cmFJbmZvID0gKE5FX1dJTjMyX0VYVFJBSU5GTyAqKShwTW9kdWxlICsgMSk7CiAKLQlwU2VnbWVudD0oU0VHVEFCTEVFTlRSWSopKChjaGFyKikocE1vZHVsZSArIDEpICsgb2Zfc2l6ZSk7Ci0JcE1vZHVsZS0+ZGdyb3VwX2VudHJ5PShpbnQpcFNlZ21lbnQtKGludClwTW9kdWxlOworICAgICAgICAvKiBTZXQgbG9hZGVkIGZpbGUgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgbWVtY3B5KCBwRXh0cmFJbmZvICsgMSwgb2ZzLCBvZl9zaXplICk7CisgICAgICAgICgoT0ZTVFJVQ1QgKikocEV4dHJhSW5mbysxKSktPmNCeXRlcyA9IG9mX3NpemUgLSAxOworCisJcFNlZ21lbnQ9KFNFR1RBQkxFRU5UUlkqKSgoY2hhciopKHBFeHRyYUluZm8gKyAxKSArIG9mX3NpemUpOworCXBNb2R1bGUtPnNlZ190YWJsZT1wTW9kdWxlLT5kZ3JvdXBfZW50cnk9KGludClwU2VnbWVudC0oaW50KXBNb2R1bGU7CiAJcFNlZ21lbnQtPnNpemU9MDsKIAlwU2VnbWVudC0+ZmxhZ3M9TkVfU0VHRkxBR1NfREFUQTsKIAlwU2VnbWVudC0+bWluc2l6ZT0weDEwMDA7CkBAIC02MzAsMzIgKzYyNSwyMyBAQAogCiAgICAgICAgIE1PRFVMRV9SZWdpc3Rlck1vZHVsZShoTW9kdWxlKTsKIAotCVBFX0xvYWRJbWFnZSggZmQsIHdwbnQgKTsKKwlwZSA9IFBFX0xvYWRJbWFnZSggZmQsIGhNb2R1bGUsIG16X2hlYWRlci5uZV9vZmZzZXQgKTsKIAorICAgICAgICBwRXh0cmFJbmZvLT5wZV9tb2R1bGUgPSAoRFdPUkQpcGU7CiAJcE1vZHVsZS0+aGVhcF9zaXplPTB4MTAwMDsKIAlwTW9kdWxlLT5zdGFja19zaXplPTB4RTAwMDsKIAogCS8qIENyZWF0ZUluc3RhbmNlIGFsbG9jYXRlcyBub3cgNjRLQiAqLwogCWhJbnN0YW5jZT1NT0RVTEVfQ3JlYXRlSW5zdGFuY2UoaE1vZHVsZSxOVUxMIC8qIEZJWDogTlVMTD8gcmVhbGx5PyAqLyk7Ci0Jd3BudC0+aGluc3RhbmNlPWhJbnN0YW5jZTsKLQotCWlmICh3cG50LT5wZS0+cGVfZXhwb3J0KSB7Ci0JCXBTdHIgPSAoKHVuc2lnbmVkIGNoYXIgKikod3BudC0+bG9hZF9hZGRyKSkrd3BudC0+cGUtPnBlX2V4cG9ydC0+TmFtZTsKLQkJd3BudC0+bmFtZSA9IHhzdHJkdXAocFN0cik7Ci0JfSBlbHNlIHsKLQkJd3BudC0+bmFtZSA9IHhzdHJkdXAoIG9mcy0+c3pQYXRoTmFtZSApOwotCX0KLQotCXdwbnQtPm5leHQ9d2luZV9maWxlczsKLQl3aW5lX2ZpbGVzPXdwbnQ7CiAKICAgICAgICAgLyogRklYTUU6IElzIHRoaXMgcmVhbGx5IHRoZSBjb3JyZWN0IHBsYWNlIHRvIGluaXRpYWxpc2UgdGhlIERMTD8gKi8KLQlpZiAoKHdwbnQtPnBlLT5wZV9oZWFkZXItPmNvZmYuQ2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfRklMRV9ETEwpKSB7Ci0gICAgICAgICAgICBQRV9Jbml0RExMKGhNb2R1bGUpOworCWlmICgocGUtPnBlX2hlYWRlci0+Y29mZi5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9GSUxFX0RMTCkpIHsKKy8qICAgICAgICAgICAgUEVfSW5pdERMTChoTW9kdWxlKTsgKi8KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFRBU0tfQ3JlYXRlVGFzayhoTW9kdWxlLGhJbnN0YW5jZSwwLAogCQlwYXJhbXMtPmhFbnZpcm9ubWVudCwoTFBTVFIpUFRSX1NFR19UT19MSU4ocGFyYW1zLT5jbWRMaW5lKSwKIAkJKigoV09SRCopUFRSX1NFR19UT19MSU4ocGFyYW1zLT5zaG93Q21kKSsxKSk7CisgICAgICAgICAgICBQRV9Jbml0aWFsaXplRExMcyhoTW9kdWxlKTsKIAl9CiAJcmV0dXJuIGhJbnN0YW5jZTsKIH0KQEAgLTY2NSw0MSArNjUxLDQ4IEBACiAKIHZvaWQgUEVfV2luMzJDYWxsVG9TdGFydChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgY29udGV4dCkKIHsKLQlpbnQgZnM7Ci0Jc3RydWN0IHdfZmlsZXMgKndwbnQ9d2luZV9maWxlczsKLQlkcHJpbnRmX3dpbjMyKHN0ZGRlYiwiR29pbmcgdG8gc3RhcnQgV2luMzIgcHJvZ3JhbVxuIik7CQotCUluaXRUYXNrKGNvbnRleHQpOwotCVVTRVJfSW5pdEFwcCh3cG50LT5oTW9kdWxlKTsKLSAgICAgICAgZnM9KGludClHbG9iYWxBbGxvYyhHSE5ELDB4MTAwMDApOwotICAgICAgICBQRV9Jbml0VEVCKGZzKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92dyAldzAsJSVmcyI6OiJyIiAoZnMpKTsKLQkoKHZvaWQoKikoKSkod3BudC0+bG9hZF9hZGRyK3dwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkFkZHJlc3NPZkVudHJ5UG9pbnQpKSgpOworICAgIGludCBmczsKKyAgICBITU9EVUxFIGhNb2R1bGU7CisgICAgc3RydWN0IHBlX2RhdGEgKnBlOworCisgICAgZHByaW50Zl93aW4zMihzdGRkZWIsIkdvaW5nIHRvIHN0YXJ0IFdpbjMyIHByb2dyYW1cbiIpOwkKKyAgICBJbml0VGFzayhjb250ZXh0KTsKKyAgICBoTW9kdWxlID0gR2V0RXhlUHRyKCBHZXRDdXJyZW50VGFzaygpICk7CisgICAgVVNFUl9Jbml0QXBwKCBoTW9kdWxlICk7CisgICAgZnM9KGludClHbG9iYWxBbGxvYyhHSE5ELDB4MTAwMDApOworICAgIFBFX0luaXRURUIoZnMpOworICAgIHBlID0gTkVfV0lOMzJfTU9EVUxFKCAoTkVfTU9EVUxFICopR2xvYmFsTG9jayhoTW9kdWxlKSApOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3Z3ICV3MCwlJWZzIjo6InIiIChmcykpOworLyogICAgKCh2b2lkKCopKCkpKHBlLT5sb2FkX2FkZHIrcGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuQWRkcmVzc09mRW50cnlQb2ludCkpKCk7ICovCisgICAgQ2FsbFRhc2tTdGFydDMyKCAoRkFSUFJPQykocGUtPmxvYWRfYWRkciArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkFkZHJlc3NPZkVudHJ5UG9pbnQpICk7CiB9CiAKLWludCBQRV9VbmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCkKK2ludCBQRV9VbmxvYWRJbWFnZSggSE1PRFVMRSBoTW9kdWxlICkKIHsKIAlwcmludGYoIlBFdW5sb2FkSW1hZ2UoKSBjYWxsZWQhXG4iKTsKIAkvKiBmcmVlIHJlc291cmNlcywgaW1hZ2UsIHVubWFwICovCiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgUEVfSW5pdERMTChITU9EVUxFIGhNb2R1bGUpCitzdGF0aWMgdm9pZCBQRV9Jbml0RExMKEhNT0RVTEUgaE1vZHVsZSkKIHsKLQlzdHJ1Y3Qgd19maWxlcyAqd3BudDsKLQloTW9kdWxlID0gR2V0RXhlUHRyKGhNb2R1bGUpOwotCWZvcih3cG50ID0gd2luZV9maWxlczt3cG50ICYmIHdwbnQtPmhNb2R1bGUgIT0gaE1vZHVsZTsKLQkJd3BudCA9IHdwbnQtPm5leHQpIC8qbm90aGluZyovOwotCWlmKCF3cG50IHx8IHdwbnQtPmluaXRpYWxpc2VkKQotCQlyZXR1cm47Ci0gICAgICAgIC8qIEZJWE1FOiBXaGF0IGFyZSB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgMiBhbmQgMz8gKi8KKyAgICBORV9NT0RVTEUgKnBNb2R1bGU7CisgICAgc3RydWN0IHBlX2RhdGEgKnBlOworICAgIGhNb2R1bGUgPSBHZXRFeGVQdHIoaE1vZHVsZSk7CisgICAgaWYgKCEocE1vZHVsZSA9IChORV9NT0RVTEUgKilHbG9iYWxMb2NrKGhNb2R1bGUpKSkgcmV0dXJuOworICAgIGlmICghKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1dJTjMyKSkgcmV0dXJuOworICAgIGlmICghKHBlID0gTkVfV0lOMzJfTU9EVUxFKHBNb2R1bGUpKSkgcmV0dXJuOworICAgIC8qIEZJWE1FOiBXaGF0IGFyZSB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgMiBhbmQgMz8gKi8KICAgICAgICAgCi0JLyogSXMgdGhpcyBhIGxpYnJhcnk/ICovCi0JaWYgKHdwbnQtPnBlLT5wZV9oZWFkZXItPmNvZmYuQ2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfRklMRV9ETEwpIHsKLQkJLyogU2hvdWxkIGNhbGwgRExMRW50cnlQb2ludCBoZXJlICovCi0JCXByaW50ZigiSW5pdFBFRExMKCkgY2FsbGVkIVxuIik7Ci0JCXdwbnQtPmluaXRpYWxpc2VkID0gMTsKLSAgICAgICAgICAgICAgICAoKHZvaWQoKikoKSkod3BudC0+bG9hZF9hZGRyK3dwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkFkZHJlc3NPZkVudHJ5UG9pbnQpKSh3cG50LT5oTW9kdWxlLCAwLCAwKTsKLQl9CisgICAgLyogSXMgdGhpcyBhIGxpYnJhcnk/ICovCisgICAgaWYgKHBlLT5wZV9oZWFkZXItPmNvZmYuQ2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfRklMRV9ETEwpCisgICAgeworICAgICAgICBwcmludGYoIkluaXRQRURMTCgpIGNhbGxlZCFcbiIpOworICAgICAgICBDYWxsRExMRW50cnlQcm9jMzIoIChGQVJQUk9DKShwZS0+bG9hZF9hZGRyICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGUtPnBlX2hlYWRlci0+b3B0X2NvZmYuQWRkcmVzc09mRW50cnlQb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaE1vZHVsZSwgMCwgMCApOworICAgIH0KIH0KIAogCmRpZmYgLS1naXQgYS9sb2FkZXIvc2lnbmFsLmMgYi9sb2FkZXIvc2lnbmFsLmMKaW5kZXggOGViYzBiNi4uZDliNzJhYiAxMDA2NDQKLS0tIGEvbG9hZGVyL3NpZ25hbC5jCisrKyBiL2xvYWRlci9zaWduYWwuYwpAQCAtMTAsOCArMTAsMTAgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lYi5oPgogCi0jaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fc3ZyNF9fKQorI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQorI2lmbmRlZiBfU0NPX0RTCiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2Vsc2UKICNpbmNsdWRlIDxzeXNjYWxsLmg+CkBAIC03Niw3ICs3OCw3IEBACiBzdGF0aWMgdm9pZCB3aW5fZmF1bHQoaW50IHNpZ25hbCwgc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0IGNvbnRleHRfc3RydWN0KQogewogICAgIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCA9ICZjb250ZXh0X3N0cnVjdDsKLSNlbGlmIGRlZmluZWQoX19zdnI0X18pCisjZWxpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiBzdGF0aWMgdm9pZCB3aW5fZmF1bHQoaW50IHNpZ25hbCwgdm9pZCAqc2lnaW5mbywgdWNvbnRleHRfdCAqY29udGV4dCkKIHsKICNlbHNlCkBAIC0xMjgsNyArMTMwLDcgQEAKIAogI2lmZGVmIGxpbnV4CiAgICAgc2lnX2FjdC5zYV9oYW5kbGVyID0gZnVuYzsKLSAgICBzaWdfYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKyAgICBzaWdfYWN0LnNhX2ZsYWdzID0gU0FfUkVTVEFSVCB8IFNBX05PTUFTSzsKICAgICAvKiBQb2ludCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjaywgbWludXMgNCBqdXN0IGluIGNhc2UsIGFuZCBtYWtlCiAgICAgICAgaXQgYWxpZ25lZCAgKi8KICAgICBzaWdfYWN0LnNhX3Jlc3RvcmVyID0gCkBAIC0xNDUsMTQgKzE0NywxNCBAQAogICAgIHJldCA9IHNpZ2FjdGlvbiggc2lnLCAmc2lnX2FjdCwgTlVMTCApOwogI2VuZGlmICAvKiBfX0ZyZWVCU0RfXyB8fCBfX05ldEJTRF9fICovCiAKLSNpZiBkZWZpbmVkIChfX3N2cjRfXykKKyNpZiBkZWZpbmVkIChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQogICAgIHNpZ3NldF90IHNpZ19tYXNrOwogICAgIHNpZ2VtcHR5c2V0KCZzaWdfbWFzayk7CiAgICAgc2lnX2FjdC5zYV9oYW5kbGVyID0gZnVuYzsKICAgICBzaWdfYWN0LnNhX2ZsYWdzID0gU0FfT05TVEFDSyB8IFNBX1NJR0lORk87CiAgICAgc2lnX2FjdC5zYV9tYXNrID0gc2lnX21hc2s7CiAgICAgcmV0ID0gc2lnYWN0aW9uKCBzaWcsICZzaWdfYWN0LCBOVUxMICk7Ci0jZW5kaWYgIC8qIF9fc3ZyNF9fICovCisjZW5kaWYgIC8qIF9fc3ZyNF9fIHx8IF9TQ09fRFMgKi8KIAogICAgIGlmIChyZXQgPCAwKQogICAgIHsKQEAgLTE4OSw3ICsxOTEsNyBAQAogICAgIH0KICNlbmRpZiAgLyogX19GcmVlQlNEX18gfHwgX19OZXRCU0RfXyAqLwogCi0jaWYgZGVmaW5lZCAoX19zdnI0X18pCisjaWYgZGVmaW5lZCAoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKICAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgc3M7CiAgICAgICAgIAogICAgIGlmICgoc3Muc3Nfc3AgPSBtYWxsb2MoU0lHU1RLU1opICkgPT0gTlVMTCkgewpAQCAtMjAzLDcgKzIwNSw3IEBACiAgICAgICAgIHBlcnJvcigic2lnc3RhY2siKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9Ci0jZW5kaWYgIC8qIF9fc3ZyNF9fICovCisjZW5kaWYgIC8qIF9fc3ZyNF9fIHx8IF9TQ09fRFMgKi8KICAgICAKICAgICBTSUdOQUxfU2V0SGFuZGxlciggU0lHQUxSTSwgKHZvaWQgKCopKCkpd2luZV90aW1lciApOwogICAgIFNJR05BTF9TZXRIYW5kbGVyKCBTSUdTRUdWLCAodm9pZCAoKikoKSl3aW5fZmF1bHQgKTsKQEAgLTIxNywxOSArMjE5LDIxIEBACiAjaWZkZWYgQ09ORklHX0lQQwogICAgIFNJR05BTF9TZXRIYW5kbGVyKCBTSUdVU1IyLCAodm9pZCAoKikoKSlzdG9wX3dhaXQgKTsgLyogRm9yIElQQyAqLwogI2VuZGlmCi0gICAgU0lHTkFMX1N0YXJ0QklPU1RpbWVyKCk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQlTSUdOQUxfU3RhcnRUaW1lcgorICoJCVNJR05BTF9TdGFydEJJT1NUaW1lcgogICoKICAqIFN0YXJ0IHRoZSBCSU9TIHRpY2sgdGltZXIuCiAgKi8KIHZvaWQgU0lHTkFMX1N0YXJ0QklPU1RpbWVyKHZvaWQpCiB7CiAgICAgc3RydWN0IGl0aW1lcnZhbCB2dF90aW1lcjsKKyAgICBzdGF0aWMgaW50IHRpbWVyX3N0YXJ0ZWQgPSAwOwogCisgICAgaWYgKHRpbWVyX3N0YXJ0ZWQpIHJldHVybjsKKyAgICB0aW1lcl9zdGFydGVkID0gMTsKICAgICB2dF90aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwogICAgIHZ0X3RpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSA1NDkyOTsKICAgICB2dF90aW1lci5pdF92YWx1ZSA9IHZ0X3RpbWVyLml0X2ludGVydmFsOwpkaWZmIC0tZ2l0IGEvbG9hZGVyL3Rhc2suYyBiL2xvYWRlci90YXNrLmMKaW5kZXggMGZjNGE2Ny4uMGEyYTNiOCAxMDA2NDQKLS0tIGEvbG9hZGVyL3Rhc2suYworKysgYi9sb2FkZXIvdGFzay5jCkBAIC0zODQsNyArMzg0LDcgQEAKICAgICBjaGFyICpzdGFjazE2VG9wLCAqc3RhY2szMlRvcDsKICAgICBTVEFDSzE2RlJBTUUgKmZyYW1lMTY7CiAgICAgU1RBQ0szMkZSQU1FICpmcmFtZTMyOwotICAgIGV4dGVybiBEV09SRCBDQUxMMTZfUmV0QWRkcl93b3JkOworICAgIGV4dGVybiBEV09SRCBDQUxMVE8xNl9SZXRBZGRyX3dvcmQ7CiAjZW5kaWYKICAgICAKICAgICBpZiAoIShwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKSkpIHJldHVybiAwOwpAQCAtNTI5LDggKzUyOSw4IEBACiAgICAgZnJhbWUxNi0+b3JkaW5hbF9udW1iZXIgPSAyNDsgIC8qIFdJTlBST0NTLjI0IGlzIFRBU0tfUmVzY2hlZHVsZSAqLwogICAgIGZyYW1lMTYtPmRsbF9pZCA9IDI0OyAvKiBXSU5QUk9DUyAqLwogICAgIGZyYW1lMTYtPmJwID0gMDsKLSAgICBmcmFtZTE2LT5pcCA9IExPV09SRCggQ0FMTDE2X1JldEFkZHJfd29yZCApOwotICAgIGZyYW1lMTYtPmNzID0gSElXT1JEKCBDQUxMMTZfUmV0QWRkcl93b3JkICk7CisgICAgZnJhbWUxNi0+aXAgPSBMT1dPUkQoIENBTExUTzE2X1JldEFkZHJfd29yZCApOworICAgIGZyYW1lMTYtPmNzID0gSElXT1JEKCBDQUxMVE8xNl9SZXRBZGRyX3dvcmQgKTsKICAgICBwVGFzay0+c3AgLT0gc2l6ZW9mKFNUQUNLMTZGUkFNRSk7CiAKICAgICAgIC8qIElmIHRoZXJlJ3Mgbm8gMTYtYml0IHN0YWNrIHlldCwgdXNlIGEgcGFydCBvZiB0aGUgbmV3IHRhc2sgc3RhY2sgKi8KZGlmZiAtLWdpdCBhL21lbW9yeS9sZHQuYyBiL21lbW9yeS9sZHQuYwppbmRleCA4NmFiMmVmLi5lNTI2N2Q3IDEwMDY0NAotLS0gYS9tZW1vcnkvbGR0LmMKKysrIGIvbWVtb3J5L2xkdC5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIF9zeXNjYWxsMyhpbnQsIG1vZGlmeV9sZHQsIGludCwgZnVuYywgdm9pZCAqLCBwdHIsIHVuc2lnbmVkIGxvbmcsIGJ5dGVjb3VudCkKICNlbmRpZiAgLyogbGludXggKi8KLSNpZmRlZiBfX3N2cjRfXworI2lmIGRlZmluZWQoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKICNpbmNsdWRlIDxzeXMvc3lzaTg2Lmg+CiAjaW5jbHVkZSA8c3lzL3NlZy5oPgogI2VuZGlmCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAgLyogX19OZXRCU0RfXyB8fCBfX0ZyZWVCU0RfXyAqLwotI2lmZGVmIF9fc3ZyNF9fCisjaWYgZGVmaW5lZChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQogewogICAgIHN0cnVjdCBzc2QgbGR0X21vZDsKICAgICBpbnQgaTsKZGlmZiAtLWdpdCBhL21lbW9yeS9sb2NhbC5jIGIvbWVtb3J5L2xvY2FsLmMKaW5kZXggZTExMzQ5Ni4uZjI0OWE4MCAxMDA2NDQKLS0tIGEvbWVtb3J5L2xvY2FsLmMKKysrIGIvbWVtb3J5L2xvY2FsLmMKQEAgLTgyMywxNiArODIzLDE0IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgTE9DQUxfTG9jaworICogICAgICAgICAgIExPQ0FMX0ludGVybmFsTG9jawogICovCi1IQU5ETEUgTE9DQUxfTG9jayggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlICkKK3N0YXRpYyBITE9DQUwgTE9DQUxfSW50ZXJuYWxMb2NrKCBMUFNUUiBoZWFwLCBITE9DQUwgaGFuZGxlICkKIHsKLSAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7Ci0KICAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbExvY2s6ICUwNHggIiwgaGFuZGxlICk7CiAgICAgaWYgKEhBTkRMRV9NT1ZFQUJMRShoYW5kbGUpKQogICAgIHsKLSAgICAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikocHRyICsgaGFuZGxlKTsKKyAgICAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikoaGVhcCArIGhhbmRsZSk7CiAgICAgICAgIGlmIChwRW50cnktPmxvY2sgPCAyNTUpIHBFbnRyeS0+bG9jaysrOwogICAgICAgICBoYW5kbGUgPSBwRW50cnktPmFkZHI7CiAgICAgfQpAQCAtODQyLDYgKzg0MCwxNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIExPQ0FMX0xvY2sKKyAqLworTFBTVFIgTE9DQUxfTG9jayggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlICkKK3sKKyAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CisgICAgcmV0dXJuIGhhbmRsZSA/IHB0ciArIExPQ0FMX0ludGVybmFsTG9jayggcHRyLCBoYW5kbGUgKSA6IE5VTEw7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTE9DQUxfVW5sb2NrCiAgKi8KIEJPT0wgTE9DQUxfVW5sb2NrKCBXT1JEIGRzLCBITE9DQUwgaGFuZGxlICkKQEAgLTkyOSw3ICs5MzcsOCBAQAogICovCiBOUFZPSUQgTG9jYWxMb2NrKCBITE9DQUwgaGFuZGxlICkKIHsKLSAgICByZXR1cm4gTE9DQUxfTG9jayggQ1VSUkVOVF9EUywgaGFuZGxlICk7CisgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBDVVJSRU5UX0RTLCAwICk7CisgICAgcmV0dXJuIChOUFZPSUQpTE9DQUxfSW50ZXJuYWxMb2NrKCBwdHIsIGhhbmRsZSApOwogfQogCiAKZGlmZiAtLWdpdCBhL21pc2MvY29tbS5jIGIvbWlzYy9jb21tLmMKaW5kZXggNDY3OTEyZC4uZDBkZmVmMyAxMDA2NDQKLS0tIGEvbWlzYy9jb21tLmMKKysrIGIvbWlzYy9jb21tLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkJCX0KIAkJCXN0YXQodGVtcCwgJnN0KTsKIAkJCWlmICghU19JU0NIUihzdC5zdF9tb2RlKSkgCi0JCQkJZnByaW50ZihzdGRlcnIsImNvbW06IGNhbiAndCB1c2UgYCVzJyBhcyAlcyAhXG4iLCB0ZW1wLCBvcHRpb24pOworCQkJCWZwcmludGYoc3RkZXJyLCJjb21tOiBjYW4ndCB1c2UgYCVzJyBhcyAlcyAhXG4iLCB0ZW1wLCBvcHRpb24pOwogCQkJZWxzZQogCQkJCWlmICgoQ09NW3hdLmRldmljZW5hbWUgPSBtYWxsb2Moc3RybGVuKHRlbXApKzEpKSA9PSBOVUxMKSAKIAkJCQkJZnByaW50ZihzdGRlcnIsImNvbW06IGNhbid0IG1hbGxvYyBmb3IgZGV2aWNlIGluZm8hXG4iKTsKQEAgLTc3LDcgKzc3LDcgQEAKIAkJZWxzZSB7CiAJCQlzdGF0KHRlbXAsICZzdCk7CiAJCQlpZiAoIVNfSVNDSFIoc3Quc3RfbW9kZSkpIAotCQkJCWZwcmludGYoc3RkZXJyLCJjb21tOiBjYW4gJ3QgdXNlIGAlcycgYXMgJXMgIVxuIiwgdGVtcCwgb3B0aW9uKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwiY29tbTogY2FuJ3QgdXNlIGAlcycgYXMgJXMgIVxuIiwgdGVtcCwgb3B0aW9uKTsKIAkJCWVsc2UgCiAJCQkJaWYgKChMUFRbeF0uZGV2aWNlbmFtZSA9IG1hbGxvYyhzdHJsZW4odGVtcCkrMSkpID09IE5VTEwpIAogCQkJCQlmcHJpbnRmKHN0ZGVyciwiY29tbTogY2FuJ3QgbWFsbG9jIGZvciBkZXZpY2UgaW5mbyFcbiIpOwpAQCAtMzUyLDE1ICszNTIsMTkgQEAKIAkJCXJldHVybiAweDgwICsgbWF4OwogCQkJYnJlYWs7CiAKKyNpZmRlZiBUSU9DTV9EVFIKIAkJY2FzZSBDTFJEVFI6CiAJCQlwb3J0LmNfY2ZsYWcgJj0gVElPQ01fRFRSOwogCQkJYnJlYWs7CisjZW5kaWYKIAorI2lmZGVmIFRJT0NNX1JUUwogCQljYXNlIENMUlJUUzoKIAkJCXBvcnQuY19jZmxhZyAmPSBUSU9DTV9SVFM7CiAJCQlicmVhazsKKyNlbmRpZgogCQotI2lmbmRlZiBfX3N2cjRfXworI2lmZGVmIENSVFNDVFMKIAkJY2FzZSBTRVREVFI6CiAJCQlwb3J0LmNfY2ZsYWcgfD0gQ1JUU0NUUzsKIAkJCWJyZWFrOwpAQCAtNDY0LDcgKzQ2OCwxMSBAQAogCXBvcnQuY19jY1tWTUlOXSA9IDA7CiAJcG9ydC5jX2NjW1ZUSU1FXSA9IDE7CiAKKyNpZmRlZiBJTUFYQkVMCiAJcG9ydC5jX2lmbGFnICY9IH4oSVNUUklQfEJSS0lOVHxJR05DUnxJQ1JOTHxJTkxDUnxJTUFYQkVMKTsKKyNlbHNlCisJcG9ydC5jX2lmbGFnICY9IH4oSVNUUklQfEJSS0lOVHxJR05DUnxJQ1JOTHxJTkxDUik7CisjZW5kaWYKIAlwb3J0LmNfaWZsYWcgfD0gKElHTkJSSyk7CiAKIAlwb3J0LmNfb2ZsYWcgJj0gfihPUE9TVCk7CkBAIC02MjIsNyArNjMwLDcgQEAKIAkJCWNvbW1lcnJvciA9IElFX0JZVEVTSVpFOwogCQkJcmV0dXJuIC0xOwogCX0KLSNpZm5kZWYgX19zdnI0X18KKyNpZmRlZiBDUlRTQ1RTCiAKIAlpZiAobHBkY2ItPmZEdHJmbG93IHx8IGxwZGNiLT5mUnRzZmxvdyB8fCBscGRjYi0+Zk91dHhDdHNGbG93KQogCQlwb3J0LmNfY2ZsYWcgfD0gQ1JUU0NUUzsKQEAgLTczMCw3ICs3MzgsNyBAQAogCWxwZGNiLT5mQmluYXJ5ID0gMTsKIAlscGRjYi0+ZkR0ckRpc2FibGUgPSAwOwogCi0jaWZuZGVmIF9fc3ZyNF9fCisjaWZkZWYgQ1JUU0NUUwogCiAJaWYgKHBvcnQuY19jZmxhZyAmIENSVFNDVFMpIHsKIAkJbHBkY2ItPmZEdHJmbG93ID0gMTsKZGlmZiAtLWdpdCBhL21pc2MvbWFpbi5jIGIvbWlzYy9tYWluLmMKaW5kZXggY2FhMjUzZi4uZTdiZmRkYSAxMDA2NDQKLS0tIGEvbWlzYy9tYWluLmMKKysrIGIvbWlzYy9tYWluLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogICovCiBzdGF0aWMgQk9PTCBNQUlOX1BhcnNlRExMT3B0aW9ucyhjaGFyICpvcHRpb25zKQogewotICAgIGludCBpLCBsOworICAgIGludCBsOwogICAgIEJVSUxUSU5fRExMICpkbGw7CiAKICAgICBpZiAoc3RybGVuKG9wdGlvbnMpPDMpIHJldHVybiBGQUxTRTsKQEAgLTI4MCw3ICsyODAsMTEgQEAKICAgICAgICAgICAgIGlmICghbHN0cm5jbXBpKG9wdGlvbnMrMSxkbGwtPm5hbWUsbC0xKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoKm9wdGlvbnMgPT0gJysnKSBkbGwtPmZsYWdzICY9IH5ETExfRkxBR19OT1RfVVNFRDsKLSAgICAgICAgICAgICAgICBlbHNlIGRsbC0+ZmxhZ3MgfD0gRExMX0ZMQUdfTk9UX1VTRUQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRsbC0+ZmxhZ3MgJiBETExfRkxBR19BTFdBWVNfVVNFRCkgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICBkbGwtPmZsYWdzIHw9IERMTF9GTEFHX05PVF9VU0VEOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDM4LDggKzQ0Miw5IEBACiAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXM6IFN5bnRheDogLWRsbCAreHh4LC4uLiBvciAtZGxsIC14eHgsLi4uXG4iLGFyZ3ZbMF0pOwogICAgICAgICAgZnByaW50ZihzdGRlcnIsIkV4YW1wbGU6IC1kbGwgLW9sZTIgICAgRG8gbm90IHVzZSBlbXVsYXRlZCBPTEUyLkRMTFxuIik7CiAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQXZhaWxhYmxlIERMTHNcbiIpOwotICAgICAgICAgZm9yIChkbGwgPSBkbGxfYnVpbHRpbl90YWJsZTsgZGxsLT5uYW1lOyBkbGwrKykKLSAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJS05cyVjIixkbGwtPm5hbWUsICgoKGkrMiklOD09MCk/J1xuJzonICcpKTsKKyAgICAgICAgIGZvciAoaSA9IDAsIGRsbCA9IGRsbF9idWlsdGluX3RhYmxlOyBkbGwtPm5hbWU7IGRsbCsrKQorICAgICAgICAgICAgIGlmICghKGRsbC0+ZmxhZ3MgJiBETExfRkxBR19BTFdBWVNfVVNFRCkpCisgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlLTlzJWMiLGRsbC0+bmFtZSwgKCgoKytpKSU4PT0wKT8nXG4nOicgJykpOwogICAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuXG4iKTsKICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWlzYy9wb3J0LmMgYi9taXNjL3BvcnQuYwppbmRleCA3NTE3NTBjLi4xNjVhNmRmIDEwMDY0NAotLS0gYS9taXNjL3BvcnQuYworKysgYi9taXNjL3BvcnQuYwpAQCAtOSw4ICs5LDcgQEAKICAgICBkZWxheS50dl9zZWMgPSAwOwogICAgIGRlbGF5LnR2X3VzZWMgPSB1c2Vjb25kczsKIAotICAgICh2b2lkKSBzZWxlY3QgKDAsIChmZF9zZXQgKikgTlVMTCwgKGZkX3NldCAqKSBOVUxMLCAoZmRfc2V0ICopIE5VTEwsCi0JCSAgICZkZWxheSk7CisgICAgKHZvaWQpIHNlbGVjdCAoMCwgKGZkX3NldCAqKSAwLCAoZmRfc2V0ICopIDAsIChmZF9zZXQgKikgMCwgJmRlbGF5KTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbWlzYy9yZWdpc3RyeS5jIGIvbWlzYy9yZWdpc3RyeS5jCmluZGV4IDFjZmYzOWYuLjY0ODMwNzggMTAwNjQ0Ci0tLSBhL21pc2MvcmVnaXN0cnkuYworKysgYi9taXNjL3JlZ2lzdHJ5LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJ3aW5lcnJvci5oIgpAQCAtNzYsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgTFBLRVlTVFJVQ1QKLWdldF9oYW5kbGUoaGtleSkgeworZ2V0X2hhbmRsZShIS0VZIGhrZXkpIHsKIAlpbnQJaTsKIAogCWZvciAoaT0wO2k8bnJvZm9wZW5oYW5kbGVzO2krKykKZGlmZiAtLWdpdCBhL21pc2Mvd2luc29ja2V0LmMgYi9taXNjL3dpbnNvY2tldC5jCmluZGV4IGNkNjliYzAuLjkxNjUyZTggMTAwNjQ0Ci0tLSBhL21pc2Mvd2luc29ja2V0LmMKKysrIGIvbWlzYy93aW5zb2NrZXQuYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9pcGMuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpZmRlZiBfX3N2cjRfXworI2lmIGRlZmluZWRfX3N2cjRfXwogI2luY2x1ZGUgPHN5cy9maWxpby5oPgogI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KICNlbmRpZgpAQCAtMjksNiArMjksMTEgQEAKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKKyNpZmRlZiBfU0NPX0RTCisjZGVmaW5lIF9JT1IgX0lPU1IKKyNkZWZpbmUgX0lPVyBfSU9TVworI2VuZGlmCisKIHN0YXRpYyBXT1JEIHdzYV9lcnJubzsKIHN0YXRpYyBpbnQgd3NhX2luaXR0ZWQ7CiBzdGF0aWMga2V5X3Qgd2luZV9rZXkgPSAwOwpAQCAtMjA4LDcgKzIxMyw5IEBACiAjaWZkZWYgRVBST0NMSU0KIAljYXNlIEVQUk9DTElNOgkJcmV0dXJuIFdTQUVQUk9DTElNOwogI2VuZGlmCisjaWZkZWYgRVVTRVJTCiAJY2FzZSBFVVNFUlM6CQlyZXR1cm4gV1NBRVVTRVJTOworI2VuZGlmCiAjaWZkZWYgRURRVU9UCiAJY2FzZSBFRFFVT1Q6CQlyZXR1cm4gV1NBRURRVU9UOwogI2VuZGlmCmRpZmYgLS1naXQgYS9taXNjZW11L2Rvc21lbS5jIGIvbWlzY2VtdS9kb3NtZW0uYwppbmRleCBkM2Q1ZmE5Li5hNGMxNTZhIDEwMDY0NAotLS0gYS9taXNjZW11L2Rvc21lbS5jCisrKyBiL21pc2NlbXUvZG9zbWVtLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICovCiB2b2lkIERPU01FTV9UaWNrKHZvaWQpCiB7Ci0gICAgcEJpb3NEYXRhLT5UaWNrcysrOworICAgIGlmIChwQmlvc0RhdGEpIHBCaW9zRGF0YS0+VGlja3MrKzsKIH0KIAogCkBAIC0xNDksOCArMTQ5LDYgQEAKICAqLwogdm9pZCBET1NNRU1fRmlsbEJpb3NTZWdtZW50KHZvaWQpCiB7Ci0gICAgZXh0ZXJuIHZvaWQgU0lHTkFMX1N0YXJ0QklPU1RpbWVyKHZvaWQpOwotCiAgICAgcEJpb3NEYXRhID0gKEJJT1NEQVRBICopR2xvYmFsTG9jayggRE9TTUVNX0Jpb3NTZWcgKTsKIAogICAgICAgLyogQ2xlYXIgYWxsIHVudXNlZCB2YWx1ZXMgKi8KQEAgLTE3NSw3ICsxNzMsNSBAQAogICAgIHBCaW9zRGF0YS0+TmJIYXJkRGlza3MgICAgICAgICAgPSAyOwogICAgIHBCaW9zRGF0YS0+S2JkQnVmZmVyU3RhcnQgICAgICAgPSAweDFlOwogICAgIHBCaW9zRGF0YS0+S2JkQnVmZmVyRW5kICAgICAgICAgPSAweDNlOwotCi0gICAgU0lHTkFMX1N0YXJ0QklPU1RpbWVyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL21pc2NlbXUvaW5zdHIuYyBiL21pc2NlbXUvaW5zdHIuYwppbmRleCAxNGFjNDYxLi43NjdmNGU4IDEwMDY0NAotLS0gYS9taXNjZW11L2luc3RyLmMKKysrIGIvbWlzY2VtdS9pbnN0ci5jCkBAIC0yOCw4ICsyOCwxMCBAQAogewogICAgIGlmIChzZWwgPT0gMHg0MCkKICAgICB7CisgICAgICAgIGV4dGVybiB2b2lkIFNJR05BTF9TdGFydEJJT1NUaW1lcih2b2lkKTsKICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiRGlyZWN0IGFjY2VzcyB0byBzZWdtZW50IDB4NDAgKGNzOmlwPSUwNHg6JTA0bHgpLlxuIiwKICAgICAgICAgICAgICAgICAgQ1NfcmVnKGNvbnRleHQpLCBFSVBfcmVnKGNvbnRleHQpICk7CisgICAgICAgIFNJR05BTF9TdGFydEJJT1NUaW1lcigpOwogICAgICAgICByZXR1cm4gRE9TTUVNX0Jpb3NTZWc7CiAgICAgfQogICAgIHJldHVybiAwOyAgLyogQ2FuJ3QgcmVwbGFjZSBzZWxlY3RvciAqLwpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9pbnQyMS5jIGIvbWlzY2VtdS9pbnQyMS5jCmluZGV4IDA4ZjMwMGUuLjUzZTA3NjkgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvaW50MjEuYworKysgYi9taXNjZW11L2ludDIxLmMKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJ4bWFsbG9jLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2lmZGVmIF9fc3ZyNF9fCi0vKiBTVlI0IERPRVNOVGRvIGxvY2tpbmcgdGhlIHNhbWUgd2F5IG11c3QgaW1wbGVtZW50IHByb3Blcmx5ICovCisjaWYgZGVmaW5lZChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQorLyogU1ZSNCBET0VTTlQgZG8gbG9ja2luZyB0aGUgc2FtZSB3YXkgbXVzdCBpbXBsZW1lbnQgcHJvcGVybHkgKi8KICNkZWZpbmUgTE9DS19FWCAwCiAjZGVmaW5lIExPQ0tfU0ggIDEKICNkZWZpbmUgTE9DS19OQiAgOApAQCAtMzQ2LDcgKzM0Niw3IEBACiAKIAkgIGludCByZXN1bHQscmV0cmllcz1zaGFyaW5nX3JldHJpZXM7CiAJICB7Ci0jaWZkZWYgX19zdnI0X18KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAgICAgICAgICAgICAgIHByaW50ZigiU2hvdWxkIGNhbGwgZmxvY2sgYW5kIG5lZWRzIHBvcnRpbmcgdG8gbG9ja2ZcbiIpOwogICAgICAgICAgICAgICByZXN1bHQgPSAwOwogICAgICAgICAgICAgICByZXRyaWVzID0gMDsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvdGltZS5jIGIvbXVsdGltZWRpYS90aW1lLmMKaW5kZXggZjBlMjFmZS4uYjQ5ZGZiNyAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS90aW1lLmMKKysrIGIvbXVsdGltZWRpYS90aW1lLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAibGR0LmgiCisjaW5jbHVkZSAibW9kdWxlLmgiCiAjaW5jbHVkZSAiY2FsbGJhY2suaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAiZHJpdmVyLmgiCmRpZmYgLS1naXQgYS9vYmplY3RzL2ZvbnQuYyBiL29iamVjdHMvZm9udC5jCmluZGV4IDExNGM4ZWEuLjQxYzhkMzggMTAwNjQ0Ci0tLSBhL29iamVjdHMvZm9udC5jCisrKyBiL29iamVjdHMvZm9udC5jCkBAIC0zLDYgKzMsMTAgQEAKICAqCiAgKiBDb3B5cmlnaHQgMTk5MyBBbGV4YW5kcmUgSnVsbGlhcmQKICAqCisgKiBFbmhhY2VtZW50cyBieSBKdWVyZ2VuIE1hcnF1YXJkdCAxOTk2CisgKgorICogSW1wbGVtZW50YXRpb24gb2YgYSBzZWNvbmQgZm9udCBjYWNoZSB3aGljaCAKKyAqIHdpbGwgYmUgdXBkYXRlZCBkeW5hbWljYWxseQogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTcsNiArMjEsNyBAQAogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorI2RlZmluZSBGT05UQ0FDSEUgCTMyCS8qIGR5bmFtaWMgZm9udCBjYWNoZSBzaXplICovCiAjZGVmaW5lIE1BWF9GT05UUwkyNTYKIHN0YXRpYyBMUExPR0ZPTlQgbHBMb2dGb250TGlzdFtNQVhfRk9OVFNdID0geyBOVUxMIH07CiAKQEAgLTEzOSwxMCArMTQ0LDE1IEBACiAgICAgaWYgKGhlaWdodCA9PSAwKSBoZWlnaHQgPSAxMjA7ICAvKiBEZWZhdWx0IGhlaWdodCA9IDEyICovCiAgICAgZWxzZSBpZiAoaGVpZ2h0IDwgMCkKICAgICB7Ci0gICAgICAgICAgLyogSWYgaGVpZ2h0IGlzIG5lZ2F0aXZlLCBpdCBtZWFucyB0aGUgaGVpZ2h0IG9mIHRoZSBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgLyogKndpdGhvdXQqIHRoZSBpbnRlcm5hbCBsZWFkaW5nLiBTbyB3ZSBhZGp1c3QgaXQgYSBiaXQgdG8gICAgICovCi0gICAgICAgICAgLyogY29tcGVuc2F0ZS4gNS80IHNlZW1zIHRvIGdpdmUgZ29vZCByZXN1bHRzIGZvciBzbWFsbCBmb250cy4gICovCi0gICAgICAgIGhlaWdodCA9IDEwICogKC1oZWlnaHQgKiA4IC8gNyk7CisgICAgICAgIC8qIElmIGhlaWdodCBpcyBuZWdhdGl2ZSwgaXQgbWVhbnMgdGhlIGhlaWdodCBvZiB0aGUgY2hhcmFjdGVycyAqLworICAgICAgICAvKiAqd2l0aG91dCogdGhlIGludGVybmFsIGxlYWRpbmcuIFNvIHdlIGFkanVzdCBpdCBhIGJpdCB0byAgICAgKi8KKyAgICAgICAgLyogY29tcGVuc2F0ZS4gNS80IHNlZW1zIHRvIGdpdmUgZ29vZCByZXN1bHRzIGZvciBzbWFsbCBmb250cy4gICovCisJLyogCisgICAgICAgICAqIEouTS46IFRoaXMgY2F1c2VzIHdyb25nIGZvbnQgc2l6ZSBmb3IgYmlnZ2VyIGZvbnRzIGUuZy4gaW4gV2lud29yZCAmIFdyaXRlIAorICAgICAgICBoZWlnaHQgPSAxMCAqICgtaGVpZ2h0ICogOSAvIDgpOworCSAqIG1heSBiZSB3ZSBoYXZlIHRvIHVzZSBhbiBub24gbGluZWFyIGZ1bmN0aW9uCisJKi8KKyAgICAgICAgaGVpZ2h0ICo9IC0xMDsKICAgICB9CiAgICAgZWxzZSBoZWlnaHQgKj0gMTA7CiAgICAgd2lkdGggID0gMTAgKiAoZm9udC0+bGZXaWR0aCAqIGRjLT53LlZwb3J0RXh0WSAvIGRjLT53LlduZEV4dFkpOwpAQCAtMTUxLDEwICsxNjEsMTcgQEAKIAkJICAgICAgd2lkdGgsIGZvbnQtPmxmV2lkdGggKTsKIAl3aWR0aCA9IC13aWR0aDsKICAgICB9CisKICAgICBzcGFjaW5nID0gKGZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkgJiBGSVhFRF9QSVRDSCkgPyAnbScgOgogCSAgICAgIChmb250LT5sZlBpdGNoQW5kRmFtaWx5ICYgVkFSSUFCTEVfUElUQ0gpID8gJ3AnIDogJyonOworICAgIAorICAKICAgICBjaGFyc2V0ID0gKGZvbnQtPmxmQ2hhclNldCA9PSBBTlNJX0NIQVJTRVQpID8gImlzbzg4NTktMSIgOiAiKi0qIjsKLSAgICBpZiAoKmZvbnQtPmxmRmFjZU5hbWUpIGZhbWlseSA9IEZPTlRfVHJhbnNsYXRlTmFtZSggZm9udC0+bGZGYWNlTmFtZSApOworICAgIGlmICgqZm9udC0+bGZGYWNlTmFtZSkgeworCWZhbWlseSA9IEZPTlRfVHJhbnNsYXRlTmFtZSggZm9udC0+bGZGYWNlTmFtZSApOworCS8qIEZJWCBNRTogSSBkb24ndCBpZiB0aGF0J3MgY29ycmVjdCBidXQgaXQgd29ya3MgSi5NLiAqLworCXNwYWNpbmcgPSAnKic7CisJfQogICAgIGVsc2Ugc3dpdGNoKGZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkgJiAweGYwKQogICAgIHsKICAgICBjYXNlIEZGX1JPTUFOOgpAQCAtMTkxLDYgKzIwOCw3IEBACiAJICAgIG5hbWVzID0gWExpc3RGb250cyggZGlzcGxheSwgcGF0dGVybiwgMSwgJmNvdW50ICk7CiAJICAgIGlmIChjb3VudCA+IDApIGJyZWFrOwogICAgICAgICAgICAgaWYgKHNwYWNpbmcgPT0gJ20nKSAvKiB0cnkgJ2MnIGlmIG5vICdtJyBmb3VuZCAqLyB7CisKICAgICAgICAgICAgICAgICBzcGFjaW5nID0gJ2MnOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzcGFjaW5nID09ICdwJykgLyogdHJ5ICcqJyBpZiBubyAncCcgZm91bmQgKi8gewpAQCAtMzY3LDYgKzM4NSwxNSBAQAogSEZPTlQgRk9OVF9TZWxlY3RPYmplY3QoIERDICogZGMsIEhGT05UIGhmb250LCBGT05UT0JKICogZm9udCApCiB7CiAgICAgc3RhdGljIFhfUEhZU0ZPTlQgc3RvY2tGb250c1tMQVNUX1NUT0NLX0ZPTlQtRklSU1RfU1RPQ0tfRk9OVCsxXTsKKworICAgIHN0YXRpYyBzdHJ1Y3QgeworCQlIRk9OVAkJaWQ7CisJCUxPR0ZPTlQJCWxvZ2ZvbnQ7CisJCWludAkJYWNjZXNzOworCQlpbnQJCXVzZWQ7CisJCVhfUEhZU0ZPTlQJY2FjaGVGb250OyB9IGNhY2hlRm9udHNbRk9OVENBQ0hFXSwgKmNhY2hlRm9udHNNaW47CisgICAgaW50IAlpOworCiAgICAgWF9QSFlTRk9OVCAqIHN0b2NrUHRyOwogICAgIEhGT05UIHByZXZIYW5kbGUgPSBkYy0+dy5oRm9udDsKICAgICBYRm9udFN0cnVjdCAqIGZvbnRTdHJ1Y3Q7CkBAIC0zOTMsOSArNDIwLDQ2IEBACiAKICAgICBpZiAoKGhmb250ID49IEZJUlNUX1NUT0NLX0ZPTlQpICYmIChoZm9udCA8PSBMQVNUX1NUT0NLX0ZPTlQpKQogCXN0b2NrUHRyID0gJnN0b2NrRm9udHNbaGZvbnQgLSBGSVJTVF9TVE9DS19GT05UXTsKLSAgICBlbHNlIAorICAgIGVsc2UgewogCXN0b2NrUHRyID0gTlVMTDsKLSAgICAKKwkvKgorCSAqIE9rLCBJdCdzIG5vdCBhIHN0b2NrIGZvbnQgYnV0IAorCSAqIG1heSBiZSBpdCdzIGNhY2hlZCBpbiBkeW5hbWljIGNhY2hlCisJICovCisJZm9yKGk9MDsgaTxGT05UQ0FDSEU7IGkrKykgLyogc2VhcmNoIGZvciBzYW1lIGhhbmRsZSAqLworCSAgICAgaWYgKGNhY2hlRm9udHNbaV0uaWQ9PWhmb250KSB7IC8qIEdvdCB0aGUgaGFuZGxlICovCisJCS8qCisJCSAqIENoZWNrIGlmIEhhbmRsZSBtYXRjaGVzIHRoZSBmb250IAorCQkgKi8KKwkJaWYobWVtY21wKCZjYWNoZUZvbnRzW2ldLmxvZ2ZvbnQsJihmb250LT5sb2dmb250KSwgc2l6ZW9mKExPR0ZPTlQpKSkgeworCQkJLyogTm86IHJlbW92ZSBoYW5kbGUgaWQgZnJvbSBkeW5hbWljIGZvbnQgY2FjaGUgKi8KKwkJCWNhY2hlRm9udHNbaV0uYWNjZXNzPTA7CisJCQljYWNoZUZvbnRzW2ldLnVzZWQ9MDsKKwkJCWNhY2hlRm9udHNbaV0uaWQ9MDsKKwkJCS8qIG1heSBiZSB0aGVyZSBpcyBhbiB1bnVzZWQgaGFuZGxlIHdoaWNoIGNvbnRhaW5zIHRoZSBmb250ICovCisJCQlmb3IoaT0wOyBpPEZPTlRDQUNIRTsgaSsrKSB7CisJCQkJaWYoKGNhY2hlRm9udHNbaV0udXNlZCA9PSAwKSAmJgorCQkJCSAgKG1lbWNtcCgmY2FjaGVGb250c1tpXS5sb2dmb250LCYoZm9udC0+bG9nZm9udCksIHNpemVvZihMT0dGT05UKSkpPT0gMCkgeworCQkJCQkvKiBnb3QgaXQgbG9hZCBmcm9tIGNhY2hlIGFuZCBzZXQgbmV3IGhhbmRsZSBpZCAqLworCQkJCQlzdG9ja1B0ciA9ICZjYWNoZUZvbnRzW2ldLmNhY2hlRm9udDsKKwkJCQkJY2FjaGVGb250c1tpXS5hY2Nlc3M9MTsKKwkJCQkJY2FjaGVGb250c1tpXS51c2VkPTE7CisJCQkJCWNhY2hlRm9udHNbaV0uaWQ9aGZvbnQ7CisJCQkJCWRwcmludGZfZm9udChzdGRkZWIsIkZPTlRfU2VsZWN0T2JqZWN0OiBnb3QgZm9udCBmcm9tIHVudXNlZCBoYW5kbGVcbiIpOworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkKKwkJCX0KKwkJZWxzZSB7CisJCQkvKiBZZXM6IGxvYWQgZnJvbSBkeW5hbWljIGZvbnQgY2FjaGUgKi8KKwkJCXN0b2NrUHRyID0gJmNhY2hlRm9udHNbaV0uY2FjaGVGb250OworCQkJY2FjaGVGb250c1tpXS5hY2Nlc3MrKzsKKwkJCWNhY2hlRm9udHNbaV0udXNlZCsrOworCQkJfQorCQlicmVhazsKKwkJfQorCX0KICAgICBpZiAoIXN0b2NrUHRyIHx8ICFzdG9ja1B0ci0+ZnN0cnVjdCkKICAgICB7CiAJaWYgKCEoZm9udFN0cnVjdCA9IEZPTlRfTWF0Y2hGb250KCAmZm9udC0+bG9nZm9udCwgZGMgKSkpCkBAIC00MjIsMTYgKzQ4NiwxNCBAQAogCQkgICAgIGhmb250LCBmb250U3RydWN0ICk7CiAgICAgfQkKIAotICAgICAgLyogRnJlZSBwcmV2aW91cyBmb250ICovCi0KLSAgICBpZiAoKHByZXZIYW5kbGUgPCBGSVJTVF9TVE9DS19GT05UKSB8fCAocHJldkhhbmRsZSA+IExBU1RfU1RPQ0tfRk9OVCkpCi0gICAgewotCWlmIChkYy0+dS54LmZvbnQuZnN0cnVjdCkKLQkgICAgWEZyZWVGb250KCBkaXNwbGF5LCBkYy0+dS54LmZvbnQuZnN0cnVjdCApOwotICAgIH0KKyAgICAgIC8qIFVudXNlIHByZXZpb3VzIGZvbnQgKi8KKwlmb3IgKGk9MDsgaSA8IEZPTlRDQUNIRTsgaSsrKSB7CisJCWlmIChjYWNoZUZvbnRzW2ldLmlkID09IHByZXZIYW5kbGUpIHsKKwkJCWNhY2hlRm9udHNbaV0udXNlZC0tOworCQkJfQorCQl9CiAKICAgICAgIC8qIFN0b3JlIGZvbnQgKi8KLQogICAgIGRjLT53LmhGb250ID0gaGZvbnQ7CiAgICAgaWYgKHN0b2NrUHRyKQogICAgIHsKQEAgLTQ0NCw4ICs1MDYsMzEgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLQlkYy0+dS54LmZvbnQuZnN0cnVjdCA9IGZvbnRTdHJ1Y3Q7Ci0JRk9OVF9HZXRNZXRyaWNzKCAmZm9udC0+bG9nZm9udCwgZm9udFN0cnVjdCwgJmRjLT51LnguZm9udC5tZXRyaWNzICk7CisJLyogCisJICogQ2hlY2sgaW4gY2FjaGVGb250CisJICovCisJY2FjaGVGb250c01pbj1OVUxMOworCWZvciAoaT0wOyBpIDwgRk9OVENBQ0hFOyBpKyspIHsKKwkJaWYgKGNhY2hlRm9udHNbaV0udXNlZD09MCkgCisJCQlpZiAoKCFjYWNoZUZvbnRzTWluKSB8fCAoKGNhY2hlRm9udHNNaW4pICYmIChjYWNoZUZvbnRzTWluLT5hY2Nlc3MgPiBjYWNoZUZvbnRzW2ldLmFjY2VzcykpKQorCQkJCWNhY2hlRm9udHNNaW49JmNhY2hlRm9udHNbaV07CisJCX0KKwlpZiAoIWNhY2hlRm9udHNNaW4pCisJCWZwcmludGYoc3RkZXJyLCJObyB1bnVzZWQgZm9udCBjYWNoZSBlbnRyeSAhISEhXG4iICk7CisKKwlpZiAoY2FjaGVGb250c01pbi0+aWQhPTApIHsKKwkJZHByaW50Zl9mb250KHN0ZGRlYiwKKwkJCSJGT05UX1NlbGVjdE9iamVjdDogRnJlZWluZyAlMDR4IFxuIixjYWNoZUZvbnRzTWluLT5pZCApOworCQlYRnJlZUZvbnQoIGRpc3BsYXksIGNhY2hlRm9udHNNaW4tPmNhY2hlRm9udC5mc3RydWN0ICk7CisJCX0KKwljYWNoZUZvbnRzTWluLT5jYWNoZUZvbnQuZnN0cnVjdCA9IGZvbnRTdHJ1Y3Q7CisJRk9OVF9HZXRNZXRyaWNzKCAmZm9udC0+bG9nZm9udCwgZm9udFN0cnVjdCwgJmNhY2hlRm9udHNNaW4tPmNhY2hlRm9udC5tZXRyaWNzICk7CisJY2FjaGVGb250c01pbi0+YWNjZXNzPTE7CisJY2FjaGVGb250c01pbi0+dXNlZD0xOworCWNhY2hlRm9udHNNaW4tPmlkPWhmb250OworCW1lbWNweSggJmRjLT51LnguZm9udCwgJihjYWNoZUZvbnRzTWluLT5jYWNoZUZvbnQpLCBzaXplb2YoY2FjaGVGb250c01pbi0+Y2FjaGVGb250KSApOworCW1lbWNweSgmY2FjaGVGb250c01pbi0+bG9nZm9udCwmKGZvbnQtPmxvZ2ZvbnQpLCBzaXplb2YoTE9HRk9OVCkpOworCiAgICAgfQogICAgIHJldHVybiBwcmV2SGFuZGxlOwogfQpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL1RPRE8gYi9yZXNvdXJjZXMvVE9ETwppbmRleCBkYjc3MWNjLi5lMzkxYmQzIDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvVE9ETworKysgYi9yZXNvdXJjZXMvVE9ETwpAQCAtMSwyMCArMSwyOSBAQAotRHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGaW5kVGV4dCgpIGFuZCBSZXBsYWNlVGV4dCgpIGluIC9taXNjL2NvbW1kbGcuYwotSSBoYWQgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIGluIHN5c3Jlc19Fbi5yYyBvZiB0aGUgZGlhbG9ncyBGSU5EX1RFWFQgYW5kCi1SRVBMQUNFX1RFWFQuICBUaGVzZSBjaGFuZ2VzIHNob3VsZCBhbHNvIGJlIG1hZGUgZm9yIHRoZSBvdGhlciBsYW5ndWFnZXMuCi1Ob3Qgb25seSBzaG91bGQgdGhlIGRlZmluaXRpb25zIGluIHN5c3Jlc18/Py5yYyBtYWRlIHVwIHRvIGRhdGUgd2l0aCB0aGUKLUVubGlzaCB2ZXJzaW9uLCBidXQgYWxzbyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGNoYW5nZWQgc28KLXRoYXQgdGhleSB3aWxsIGJlIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgdGV4dCBmb3IgZXZlcnkgaW5kaXZpZHVhbAotbGFuZ3VhZ2UuCitUaGUgZGltZW5zaW9ucyBvZiB0aGUgY29udHJvbHMgc2hvdWxkIGJlIGNoYW5nZWQgc28gdGhhdCB0aGV5IHdpbGwgYmUgYmlnIAorZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHRleHQgZm9yIGV2ZXJ5IGluZGl2aWR1YWwgbGFuZ3VhZ2UuCiAKIFRoZXJlZm9yZToKIAotLSBEZWZpbml0aW9ucyBvZiBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCBpbiBzeXNyZXNfPz8ucmMgc2hvdWxkIG1hdGNoCi0gIHRob3NlIGluIHN5c3Jlc19Fbi5yYwogLSBEaW1lbnNpb25zIG9mIGNvbnRyb2xzIGFyZSBiYXNlZCBvbiBzeXNyZXNfRW4ucmMuICBPdGhlciBsYW5ndWFnZXMgc2hvdWxkCiAgIGNoYW5nZSB0aGVzZSBkaW1lbnNpb25zIGluIG9yZGVyIHRvIG1ha2UgdGhlIHRleHQgZml0LgogCitJIChrcnlub3NAcWJjLmNsaWMubmV0KSB3aWxsIHRyeSB0byBtYWtlIHN5c3Jlc19Gci5yYyBmaXQgY29ycmVjdGx5LCBpZiAKK3NvbWVvbmUgaXMgaW50ZXJyZXN0ZWQgaW4gb3RoZXJzIGxhbmd1YWdlcywgbWVzc2FnZSBtZS4gSSBtYXkgY29ycmVjdCAKK290aGVycyBsYW5ndWFnZXMgYWZ0ZXIsIGJ1dCBub3Qgc29vbi4KKworSGVyZSBhcmUgc3RydWN0dXJlIG9mIGVhY2ggbGluZSAoZm9yIGV4YW1wbGUpOgorUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAxNzQsIDc1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorMTAzODogVGhlIElEIG9mIHRoaXMgYnV0dG9uLCB5b3Ugc2hvdWxkbid0IGNoYW5nZSB0aGlzLgorMTc0IDogWC1vZmZzZXQgb2YgdGhlIGJ1dHRvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mCisgICAgICB0aGUgZGlhbG9nIGJveC4KKzc1ICA6IFktb2Zmc2V0Cis1MCAgOiBUaGUgd2lkdGggb2YgdGhlIGJ1dHRvbgorMTQgIDogVGhlIGhlaWdodAorZmxhZ3MgKFdTXz8/PyBldGMpOiBUaGV5IGNvbnRyb2wgaG93IHRoZSBkaWFsb2cgYmVoYXZlcy4gIFRoaW5ncyBsaWtlOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyB0aGUgZm9jdXMgd2l0aCBhIFRBQiwgc2Nyb2xsaW5nIHRvIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICBvZiByYWRpb2J1dHRvbnMgd2l0aCB1cC9kb3duIGtleXMsIGV0Yy4gIElmIHlvdSdyZQorICAgICAgICAgICAgICAgICAgICBub3Qgc3VyZTogbGVhdmUgdGhlbSBhcyB0aGV5IGFyZSAoaW4gdGhlIGVuZ2xpc2gKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbikuCisgCisKIEZyYW5zIHZhbiBEb3Jzc2VsYWVyCiBkb3Jzc2VsQHJ1bGhtMS5MZWlkZW5Vbml2Lm5sCi0KLQotUm9iZXJ0IFBvdWxpb3QgKGtyeW5vc0BxYmMuY2xpYy5uZXQpOiBDaGFuZ2VzIHRvIHN5c3Jlc19Gci5yYyBoYXZlIGJlZW4gbWFkZS4KZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9zeXNyZXNfQ3oucmMgYi9yZXNvdXJjZXMvc3lzcmVzX0N6LnJjCmluZGV4IDlkYzA1MmYuLmU3MTI5ZDYgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXNfQ3oucmMKKysrIGIvcmVzb3VyY2VzL3N5c3Jlc19Dei5yYwpAQCAtMTY1LDM2ICsxNjUsMzggQEAKIH0KIAogCi1GSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CitGSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzYsIDYyCiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiSGxlZOFu7SIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIiZWeWhsZWRhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIlBvdXplICZjZWzhIHNsb3ZhIiwgMTA0MCwgMjAsIDMwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICImUm96bGmab3ZhdCBtYWzhIGEgdmVsa+EgcO1zbWVuYSIsIDEwNDEsIDIwLCA1MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBHUk9VUEJPWCAiU23sciIsIDEwNzIsIDkwLCA0MCwgODAsIDQwLCBCU19HUk9VUEJPWAotIFJBRElPQlVUVE9OICImTmFob3J1IiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCi0gUkFESU9CVVRUT04gIiZEb2x1IiwgMTA1NywgMTUwLCA1MCwgNTAsIDEyCi0gREVGUFVTSEJVVFRPTiAiVnlobGVkYXQgZCZhbJrtIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJaYXb47XQiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImVnlobGVkYXQ6IiwgLTEsIDQsIDgsIDQyLCA4CisgRURJVFRFWFQgMTE1MiwgNDcsIDcsIDEyOCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIlBvdXplICZjZWzhIHNsb3ZhIiwgMTA0MCwgNCwgMjYsIDEwMCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImUm96bGmab3ZhdCBtYWzhIGEgdmVsa+EgcO1zbWVuYSIsIDEwNDEsIDQsIDQyLCA2NCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AKKyBHUk9VUEJPWCAiU23sciIsIDEwNzIsIDEwNywgMjYsIDY4LCAyOAorIENPTlRST0wgIk4mYWhvcnUiLCAxMDU2LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxMTEsIDM4LCAyMCwgMTIKKyBDT05UUk9MICImRG9sdSIsIDEwNTcsICJCVVRUT04iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QLCAxMzgsIDM4LCAzMCwgMTIKKyBERUZQVVNIQlVUVE9OICJWeWhsZWRhdCBkJmFsmu0iLCAxLCAxODIsIDUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiWmF2+O10IiwgMiwgMTgyLCAyMywgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImTuFwb3bsZGEiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiWuFt7G5hIgogRk9OVCA4LCAiSGVsdiIKIHsKLSBMVEVYVCAiJlZ5aGxlZGF0OiIsIDEwODgsIDYsIDYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKLSBMVEVYVCAiJlphbexuaXQgemE6IiwgMTA5MCwgNiwgMjYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIlBvdXplICZjZWzhIHNsb3ZhIiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICImUm96bGmab3ZhdCBtYWzhIGEgdmVsa+EgcO1zbWVuYSIsIDEwNDEsIDIwLCA2MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBERUZQVVNIQlVUVE9OICJWeWhsZWRhdCBkJmFsmu0iLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIlphJm3sbml0IiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJaYW3sbml0IHZlIHb9JmLscnUiLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIlphdvjtdCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZWeWhsZWRhdDoiLCAtMSwgNCwgOSwgNDgsIDgKKyBFRElUVEVYVCAxMTUyLCA1NCwgNywgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJlphbexuaXQgemE6IiwgLTEsIDQsIDI2LCA0OCwgOAorIEVESVRURVhUIDExNTMsIDU0LCAyNCwgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiUG91emUgJmNlbOEgc2xvdmEiLCAxMDQwLCA1LCA0NiwgMTA0LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZSb3psaZpvdmF0IG1hbOEgYSB2ZWxr4SBw7XNtZW5hIiwgMTA0MSwgNSwgNjIsIDU5LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIlZ5aGxlZGF0IGQmYWya7SIsIDEsIDE3NCwgNCwgNTAsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiWmEmbexuaXQiLCAxMDI0LCAxNzQsIDIxLCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIlphbexuaXQgdmUgdv0mYuxydSIsIDEwMjUsIDE3NCwgMzgsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiWmF2+O10IiwgMiwgMTc0LCA1NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImTuFwb3bsZGEiLCAxMDM4LCAxNzQsIDc1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19EYS5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRGEucmMKaW5kZXggZGY5YzExZi4uOWE3YzcwMCAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19EYS5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0RhLnJjCkBAIC0xNjUsMzYgKzE2NSwzOCBAQAogfQogCiAKLUZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgODQKK0ZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDIzNiwgNjIKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJGaW5kIgogRk9OVCA4LCAiSGVsdiIKIHsKLSBMVEVYVCAiJkZpbmQgaHZhZDoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIkt1biAmaGVsZSBvcmQiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIkZvcnNrZWwgcOUgc3RvcmUvc23lICZib2dzdGF2ZXIiLCAxMDQxLCAyMCwgNTAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gR1JPVVBCT1ggIlJldG5pbmciLCAxMDcyLCA5MCwgNDAsIDgwLCA0MCwgQlNfR1JPVVBCT1gKLSBSQURJT0JVVFRPTiAiJk9wIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCi0gUkFESU9CVVRUT04gIiZOZWQiLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKLSBERUZQVVNIQlVUVE9OICImRmluZCBu5nN0ZSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQW5udWxsZXIiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRmluZCBodmFkOiIsIC0xLCA0LCA4LCA0MiwgOAorIEVESVRURVhUIDExNTIsIDQ3LCA3LCAxMjgsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImS3VuIGhlbGUgb3JkIiwgMTA0MCwgNCwgMjYsIDEwMCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJGb3Jza2VsIHDlIHN0b3JlL3Nt5SAmYm9nc3RhdmVyIiwgMTA0MSwgNCwgNDIsIDY0LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorIEdST1VQQk9YICJSZXRuaW5nIiwgMTA3MiwgMTA3LCAyNiwgNjgsIDI4CisgQ09OVFJPTCAiJk9wIiwgMTA1NiwgIkJVVFRPTiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgMTExLCAzOCwgMjAsIDEyCisgQ09OVFJPTCAiJk5lZCIsIDEwNTcsICJCVVRUT04iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QLCAxMzgsIDM4LCAzMCwgMTIKKyBERUZQVVNIQlVUVE9OICImRmluZCBu5nN0ZSIsIDEsIDE4MiwgNSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBbm51bGxlciIsIDIsIDE4MiwgMjMsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhq5mxwIiwgMTAzOCwgMTgyLCA0NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KIAogCi1SRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDExNAorUkVQTEFDRV9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjMwLCA5NAogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkVyc3RhdCIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIiZGaW5kIGh2YWQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIExURVhUICImRXJzdGF0IG1lZDoiLCAxMDkwLCA2LCAyNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA5MSwgNjAsIDI2LCAxNTAsIDkKLSBDSEVDS0JPWCAiS3VuICZoZWxlIG9yZCIsIDEwNDAsIDIwLCA0MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBDSEVDS0JPWCAiRm9yc2tlbCBw5SBzdG9yZS9zbeUgJmJvZ3N0YXZlciIsIDEwNDEsIDIwLCA2MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBERUZQVVNIQlVUVE9OICImRmluZCBu5nN0ZSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkVyc3RhdCIsIDEwMjQsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiRXJzdGF0ICZhbGxlIiwgMTAyNSwgMjA2LCA0NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJBZmJyeWQiLCAyLCAyMDYsIDY0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRmluZCBodmFkOiIsICAtMSwgNCwgOSwgNDgsIDgKKyBFRElUVEVYVCAxMTUyLCA1NCwgNywgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJkVyc3RhdCBtZWQ6IiwgLTEsIDQsIDI2LCA0OCwgOAorIEVESVRURVhUIDExNTMsIDU0LCAyNCwgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJkt1biBoZWxlIG9yZCIsIDEwNDAsIDUsIDQ2LCAxMDQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIkZvcnNrZWwgcOUgc3RvcmUvc23lICZib2dzdGF2ZXIiLCAxMDQxLCA1LCA2MiwgNTksIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiJkZpbmQgbuZzdGUiLCAxLCAxNzQsIDQsIDUwLCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZFcnN0YXQiLCAxMDI0LCAxNzQsIDIxLCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkVyc3RhdCAmYWxsZSIsIDEwMjUsIDE3NCwgMzgsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQW5udWxsZXIiLCAyLCAxNzQsIDU1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZIauZscCIsIDEwMzgsIDE3NCwgNzUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiB9CmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvc3lzcmVzX0RlLnJjIGIvcmVzb3VyY2VzL3N5c3Jlc19EZS5yYwppbmRleCA3NzBkMDExLi5hYmI4ZjYwIDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvc3lzcmVzX0RlLnJjCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfRGUucmMKQEAgLTE2NSwzNyArMTY1LDM4IEBACiB9CiAKIAotRklORF9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAorRklORF9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjM2LCA2MgogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIlN1Y2hlbiIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIlMmdWNoZW4gbmFjaDoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIk51ciBnYW56ZSAmV29ydGUiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIkJlYWNodGUgR3Jv3y9LbGVpbnNjaHJlaWJ1bmciLCAxMDQxLCAyMCwgNTAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gR1JPVVBCT1ggIlJpY2h0dW5nIiwgMTA3MiwgOTAsIDQwLCA4MCwgNDAsIEJTX0dST1VQQk9YCi0gUkFESU9CVVRUT04gIiZIb2NoIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCi0gUkFESU9CVVRUT04gIiZSdW50ZXIiLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKLSBERUZQVVNIQlVUVE9OICImTuRjaHN0ZW4gZmluZGVuIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICJTJnVjaGVuIG5hY2g6IiwgLTEsIDQsIDgsIDQyLCA4CisgRURJVFRFWFQgMTE1MiwgNDcsIDcsIDEyOCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIk51ciBnYW56ZSAmV29ydGUiLCAxMDQwLCA0LCAyNiwgMTAwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIkJlYWNodGUgR3Jv3y9LbGVpbnNjaHJlaWJ1bmciLCAxMDQxLCA0LCA0MiwgNjQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIlJpY2h0dW5nIiwgMTA3MiwgMTA3LCAyNiwgNjgsIDI4CisgQ09OVFJPTCAiSCZvY2giLCAxMDU2LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxMTEsIDM4LCAyMCwgMTIKKyBDT05UUk9MICImUnVudGVyIiwgMTA1NywgIkJVVFRPTiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AsIDEzOCwgMzgsIDMwLCAxMgorIERFRlBVU0hCVVRUT04gIiZO5GNoc3RlbiBmaW5kZW4iLCAxLCAxODIsIDUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQWJicmVjaGVuIiwgMiwgMTgyLCAyMywgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGlsZmUiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiRXJzZXR6ZW4iCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJTJnVjaGVuIG5hY2g6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIExURVhUICJFcnNldHplbiAmZHVyY2g6IiwgMTA5MCwgNiwgMjYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIk51ciBnYW56ZSAmV29ydGUiLCAxMDQwLCAyMCwgNDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIkJlYWNodGUgR3Jv3y9LbGVpbnNjaHJlaWJ1bmciLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gREVGUFVTSEJVVFRPTiAiJk7kY2hzdGVuIGZpbmRlbiIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkVyc2V0emVuIiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICImQWxsZSBlcnNldHplbiIsIDEwMjUsIDIwNiwgNDQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQWJicmVjaGVuIiwgMiwgMjA2LCA2NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiUyZ1Y2hlbiBuYWNoOiIsIC0xLCA0LCA5LCA0OCwgOAorIEVESVRURVhUIDExNTIsIDU0LCA3LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICJFcnNldHplbiAmZHVyY2g6IiwgLTEsIDQsIDI2LCA0OCwgOAorIEVESVRURVhUIDExNTMsIDU0LCAyNCwgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiTnVyIGdhbnplICZXb3J0ZSIsIDEwNDAsIDUsIDQ2LCAxMDQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiQmVhY2h0ZSBHcm/fL0tsZWluc2NocmVpYnVuZyIsIDEwNDEsIDUsIDYyLCA1OSwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AKKyBERUZQVVNIQlVUVE9OICImTuRjaHN0ZW4gZmluZGVuIiwgMSwgMTc0LCA0LCA1MCwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImRXJzZXR6ZW4iLCAxMDI0LCAxNzQsIDIxLCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZBbGxlIGVyc2V0emVuIiwgMTAyNSwgMTc0LCAzOCwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCAyLCAxNzQsIDU1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZIaWxmZSIsIDEwMzgsIDE3NCwgNzUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiB9Ci0KZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9zeXNyZXNfRW8ucmMgYi9yZXNvdXJjZXMvc3lzcmVzX0VvLnJjCmluZGV4IDA5YjNhOTMuLmRhMjIzZWUgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXNfRW8ucmMKKysrIGIvcmVzb3VyY2VzL3N5c3Jlc19Fby5yYwpAQCAtMTY1LDM3ICsxNjUsMzggQEAKIH0KIAogCi1GSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CitGSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzYsIDYyCiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiU2Vy5nUiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICImU2Vy5nU6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIENIRUNLQk9YICJOdXIgdHV0YW4gJnZvcnRvbiIsIDEwNDAsIDIwLCAzMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBDSEVDS0JPWCAiQXRlbnR1ICZVc2tsZWNvbiIsIDEwNDEsIDIwLCA1MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBHUk9VUEJPWCAiRGlyZWt0byIsIDEwNzIsIDkwLCA0MCwgODAsIDQwLCBCU19HUk9VUEJPWAotIFJBRElPQlVUVE9OICImUmV0cm8iLCAxMDU2LCAxMDAsIDUwLCA1MCwgMTIKLSBSQURJT0JVVFRPTiAiJkFudGH9ZW4iLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKLSBERUZQVVNIQlVUVE9OICImUGx1c2Vy5nUiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIk51bGlndSIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZTZXLmdToiLCAtMSwgNCwgOCwgNDIsIDgKKyBFRElUVEVYVCAxMTUyLCA0NywgNywgMTI4LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiTnVyIHR1dGFuICZ2b3J0b24iLCAxMDQwLCA0LCAyNiwgMTAwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIkF0ZW50dSAmVXNrbGVjb24iLCAxMDQxLCA0LCA0MiwgNjQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIkRpcmVrdG8iLCAxMDcyLCAxMDcsIDI2LCA2OCwgMjgKKyBDT05UUk9MICImUmV0cm8iLCAxMDU2LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QLCAxMTEsIDM4LCAyMCwgMTIKKyBDT05UUk9MICImQW50Yf1lbiIsIDEwNTcsICJCVVRUT04iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QLCAxMzgsIDM4LCAzMCwgMTIKKyBERUZQVVNIQlVUVE9OICImUGx1c2Vy5nUiLCAxLCAxODIsIDUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiTnVsaWd1IiwgMiwgMTgyLCAyMywgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGVscHUiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiQW5zdGF0Yf1pZ3UiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJBbnN0YXRh/WlndToiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gTFRFWFQgIiZwZXI6IiwgMTA5MCwgNiwgMjYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIk51ciB0dXRhbiAmdm9ydG9uIiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICJBdGVudHUgJlVza2xlY29uIiwgMTA0MSwgMjAsIDYwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIERFRlBVU0hCVVRUT04gIlBsdSZzZXLmdSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkFuc3RhdGH9aWd1IiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJBbnN0YXRh/WlndSDmJml1am4iLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIk51bGlndSIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIkFuc3RhdGH9aWd1OiIsIC0xLCA0LCA5LCA0OCwgOAorIEVESVRURVhUIDExNTIsIDU0LCA3LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImcGVyOiIsIC0xLCA0LCAyNiwgNDgsIDgKKyBFRElUVEVYVCAxMTUzLCA1NCwgMjQsIDExNCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIk51ciB0dXRhbiAmdm9ydG9uIiwgMTA0MCwgNSwgNDYsIDEwNCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJBdGVudHUgJlVza2xlY29uIiwgMTA0MSwgNSwgNjIsIDU5LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIlBsdSZzZXLmdSIsIDEsIDE3NCwgNCwgNTAsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkFuc3RhdGH9aWd1IiwgMTAyNCwgMTc0LCAyMSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBbnN0YXRh/WlndSDmJml1am4iLCAxMDI1LCAxNzQsIDM4LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIk51bGlndSIsIDIsIDE3NCwgNTUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhlbHB1IiwgMTAzOCwgMTc0LCA3NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KLQpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Fcy5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRXMucmMKaW5kZXggYzQ3MmFlOS4uMjM1ZmRkOSAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Fcy5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0VzLnJjCkBAIC0xNjYsMzcgKzE2NiwzOCBAQAogfQogCiAKLUZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgODQKK0ZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDIzNiwgNjIKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJCdXNjYXIiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJCdXNjYXI6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIENIRUNLQk9YICImQ29tcGFyYXIgcGFsYWJyYSBlbnRlcmEgc29sYW1lbnRlIiwgMTA0MCwgMjAsIDMwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICImTWF5+nNjdWxhcy9taW76c2N1bGFzIiwgMTA0MSwgMjAsIDUwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIEdST1VQQk9YICJEaXJlY2Np824iLCAxMDcyLCA5MCwgNDAsIDgwLCA0MCwgQlNfR1JPVVBCT1gKLSBSQURJT0JVVFRPTiAiQSZycmliYSIsIDEwNTYsIDEwMCwgNTAsIDUwLCAxMgotIFJBRElPQlVUVE9OICImQWJham8iLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKLSBERUZQVVNIQlVUVE9OICJCdXNjYXIgJnNpZ3VpZW50ZSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICJCdXNjYXI6IiwgIC0xLCA0LCA4LCA0MiwgOAorIEVESVRURVhUIDExNTIsIDQ3LCA3LCAxMjgsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImQ29tcGFyYXIgcGFsYWJyYSBlbnRlcmEgc29sYW1lbnRlIiwgMTA0MCwgNCwgMjYsIDEwMCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImTWF5+nNjdWxhcy9taW76c2N1bGFzIiwgMTA0MSwgNCwgNDIsIDY0LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorIEdST1VQQk9YICJEaXJlY2Np824iLCAxMDcyLCAxMDcsIDI2LCA2OCwgMjgKKyBDT05UUk9MICJBJnJyaWJhIiwgMTA1NiwgIkJVVFRPTiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgMTExLCAzOCwgMjAsIDEyCisgQ09OVFJPTCAiJkFiYWpvIiwgMTA1NywgIkJVVFRPTiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AsIDEzOCwgMzgsIDMwLCAxMgorIERFRlBVU0hCVVRUT04gIkJ1c2NhciAmc2lndWllbnRlIiwgMSwgMTgyLCA1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMTgyLCAyMywgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBJnl1ZGEiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiUiZlZW1wbGF6YXIiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJCdXNjYXI6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIExURVhUICJSZSZwbGFjZSBXaXRoOiIsIDEwOTAsIDYsIDI2LCA0MCwgOQotIExURVhUICIiLCAxMDkxLCA2MCwgMjYsIDE1MCwgOQotIENIRUNLQk9YICImQ29tcGFyYXIgcGFsYWJyYSBlbnRlcmEgc29sYW1lbnRlIiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICImTWF5+nNjdWxhcy9taW76c2N1bGFzIiwgMTA0MSwgMjAsIDYwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIERFRlBVU0hCVVRUT04gIlJlZW1wbGF6YXIgJnNpZ3VpZW50ZSIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJlJlZW1wbGF6YXIiLCAxMDI0LCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIlJlZW1wbGF6YXIgJnRvZG8iLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMjA2LCA2NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiQnVzY2FyOiIsIC0xLCA0LCA5LCA0OCwgOAorIEVESVRURVhUIDExNTIsIDU0LCA3LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICJSZSZlbXBsYXphciBwb3I6IiwgMTA5MCwgLTEsIDQsIDI2LCA0OCwgOAorIEVESVRURVhUIDExNTMsIDU0LCAyNCwgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJkNvbXBhcmFyIHBhbGFicmEgZW50ZXJhIHNvbGFtZW50ZSIsIDEwNDAsIDUsIDQ2LCAxMDQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJk1hefpzY3VsYXMvbWlu+nNjdWxhcyIsIDEwNDEsIDUsIDYyLCA1OSwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AKKyBERUZQVVNIQlVUVE9OICJSZWVtcGxhemFyICZzaWd1aWVudGUiLCAxLCAxNzQsIDQsIDUwLCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZSZWVtcGxhemFyIiwgMTAyNCwgMTc0LCAyMSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJSZWVtcGxhemFyICZ0b2RvIiwgMTAyNSwgMTc0LCAzOCwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDE3NCwgNTUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQSZ5dWRhIiwgMTAzOCwgMTc0LCA3NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KLQpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19GaS5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRmkucmMKaW5kZXggOWE5ZjdhMi4uNDQ3ZjQyNiAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19GaS5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0ZpLnJjCkBAIC0xNjUsMzYgKzE2NSwzOCBAQAogfQogCiAKLUZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgODQKK0ZJTkRfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDIzNiwgNjIKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJFdHNpIgogRk9OVCA4LCAiSGVsdiIKIHsKLSBMVEVYVCAiJkV0c2l0dOR25DoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIiZLb2tvIHNhbmEiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIktpcmphaW5rJm9rbyIsIDEwNDEsIDIwLCA1MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBHUk9VUEJPWCAiU3V1bnRhIiwgMTA3MiwgOTAsIDQwLCA4MCwgNDAsIEJTX0dST1VQQk9YCi0gUkFESU9CVVRUT04gIiZZbPZzIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCi0gUkFESU9CVVRUT04gIiZBbGFzIiwgMTA1NywgMTUwLCA1MCwgNTAsIDEyCi0gREVGUFVTSEJVVFRPTiAiRXRzaSAmc2V1cmFhdmEiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIlBlcnV1dGEiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRXRzaXR05HbkOiIsIC0xLCA0LCA4LCA0MiwgOAorIEVESVRURVhUIDExNTIsIDQ3LCA3LCAxMjgsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImS29rbyBzYW5hIiwgMTA0MCwgNCwgMjYsIDEwMCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJLaXJqYWluayZva28iLCAxMDQxLCA0LCA0MiwgNjQsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIlN1dW50YSIsIDEwNzIsIDEwNywgMjYsIDY4LCAyOAorIENPTlRST0wgIiZZbPZzIiwgMTA1NiwgIkJVVFRPTiIsIEJTX0FVVE9SQURJT0JVVFRPTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCwgMTExLCAzOCwgMjAsIDEyCisgQ09OVFJPTCAiJkFsYXMiLCAxMDU3LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgMTM4LCAzOCwgMzAsIDEyCisgREVGUFVTSEJVVFRPTiAiRXRzaSAmc2V1cmFhdmEiLCAxLCAxODIsIDUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiUGVydXV0YSIsIDIsIDE4MiwgMjMsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiTyZoamUiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiS29ydmFhIgogRk9OVCA4LCAiSGVsdiIKIHsKLSBMVEVYVCAiJkV0c2l0dOR25DoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gTFRFWFQgIktvJnJ2YXR0YXZhOiIsIDEwOTAsIDYsIDI2LCA0MCwgOQotIExURVhUICIiLCAxMDkxLCA2MCwgMjYsIDE1MCwgOQotIENIRUNLQk9YICImS29rbyBzYW5hIiwgMTA0MCwgMjAsIDQwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICJLaXJqYWluayZva28iLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gREVGUFVTSEJVVFRPTiAiRXRzaSAmc2V1cmFhdmEiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIktvcnYmYWEiLCAxMDI0LCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIktvcnZhYSBrYSZpa2tpIiwgMTAyNSwgMjA2LCA0NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJTJnVsamUiLCAyLCAyMDYsIDY0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRXRzaXR05HbkOiIsIC0xLCA0LCA5LCA0OCwgOAorIEVESVRURVhUIDExNTIsIDU0LCA3LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICJLbyZydmF0dGF2YToiLCAtMSwgNCwgMjYsIDQ4LCA4CisgRURJVFRFWFQgMTE1MywgNTQsIDI0LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImS29rbyBzYW5hIiwgMTA0MCwgNSwgNDYsIDEwNCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJLaXJqYWluayZva28iLCAxMDQxLCA1LCA2MiwgNTksIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiRXRzaSAmc2V1cmFhdmEiLCAxLCAxNzQsIDQsIDUwLCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIktvcnYmYWEiLCAxMDI0LCAxNzQsIDIxLCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIktvcnZhYSBrYSZpa2tpIiwgMTAyNSwgMTc0LCAzOCwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJTJnVsamUiLCAyLCAxNzQsIDU1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIk8maGplIiwgMTAzOCwgMTc0LCA3NSwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIH0KZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9zeXNyZXNfTm8ucmMgYi9yZXNvdXJjZXMvc3lzcmVzX05vLnJjCmluZGV4IGY3Y2E2MjUuLmYyMDhmNzUgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXNfTm8ucmMKKysrIGIvcmVzb3VyY2VzL3N5c3Jlc19Oby5yYwpAQCAtMTY1LDM2ICsxNjUsMzggQEAKIH0KIAogCi1GSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CitGSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzYsIDYyCiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiRmlubiIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIiZGaW5uIGh2YToiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIiZLdW4gaGVsZSBvcmQiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIiZTa2lsbCBw5SBzdG9yZS9zbeUgYm9rc3RhdmVyIiwgMTA0MSwgMjAsIDUwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIEdST1VQQk9YICJSZXRuaW5nIiwgMTA3MiwgOTAsIDQwLCA4MCwgNDAsIEJTX0dST1VQQk9YCi0gUkFESU9CVVRUT04gIiZPcHAiLCAxMDU2LCAxMDAsIDUwLCA1MCwgMTIKLSBSQURJT0JVVFRPTiAiJk5lZCIsIDEwNTcsIDE1MCwgNTAsIDUwLCAxMgotIERFRlBVU0hCVVRUT04gIiZGaW5uIG5lc3RlIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJBdmJyeXQiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRmlubiBodmE6IiwgLTEsIDQsIDgsIDQyLCA4CisgRURJVFRFWFQgMTE1MiwgNDcsIDcsIDEyOCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZLdW4gaGVsZSBvcmQiLCAxMDQwLCA0LCAyNiwgMTAwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZTa2lsbCBw5SBzdG9yZS9zbeUgYm9rc3RhdmVyIiwgMTA0MSwgNCwgNDIsIDY0LCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorIEdST1VQQk9YICJSZXRuaW5nIiwgMTA3MiwgMTA3LCAyNiwgNjgsIDI4CisgQ09OVFJPTCAiJk9wcCIsIDEwNTYsICJCVVRUT04iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AsIDExMSwgMzgsIDIwLCAxMgorIENPTlRST0wgIiZOZWQiLCAxMDU3LCAiQlVUVE9OIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUCwgMTM4LCAzOCwgMzAsIDEyCisgREVGUFVTSEJVVFRPTiAiJkZpbm4gbmVzdGUiLCAxLCAxODIsIDUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQXZicnl0IiwgMiwgMTgyLCAyMywgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGplbHAiLCAxMDM4LCAxODIsIDQ1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogfQogCiAKLVJFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CitSRVBMQUNFX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyMzAsIDk0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiQnl0dCIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIiZGaW5uIGh2YToiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gTFRFWFQgIiZCeXR0IG1lZDoiLCAxMDkwLCA2LCAyNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA5MSwgNjAsIDI2LCAxNTAsIDkKLSBDSEVDS0JPWCAiJkt1biBoZWxlIG9yZCIsIDEwNDAsIDIwLCA0MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBDSEVDS0JPWCAiJlNraWxsIHDlIHN0b3JlL3Nt5SBib2tzdGF2ZXIiLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gREVGUFVTSEJVVFRPTiAiJkZpbm4gbmVzdGUiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIiZCeXR0IiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICImQnl0dCBhbHQiLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZGaW5uIGh2YToiLCAtMSwgNCwgOSwgNDgsIDgKKyBFRElUVEVYVCAxMTUyLCA1NCwgNywgMTE0LCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJkJ5dHQgbWVkOiIsIC0xLCA0LCAyNiwgNDgsIDggCisgRURJVFRFWFQgMTE1MywgNTQsIDI0LCAxMTQsIDEyLCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImS3VuIGhlbGUgb3JkIiwgMTA0MCwgNSwgNDYsIDEwNCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImU2tpbGwgcOUgc3RvcmUvc23lIGJva3N0YXZlciIsIDEwNDEsIDUsIDYyLCA1OSwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIiZGaW5uIG5lc3RlIiwgMSwgMTc0LCA0LCA1MCwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImQnl0dCIsIDEwMjQsIDE3NCwgMjEsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkJ5dHQgYWx0IiwgMTAyNSwgMTc0LCAzOCwgNTAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJBdmJyeXQiLCAyLCAxNzQsIDU1LCA1MCwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZIamVscCIsIDEwMzgsIDE3NCwgNzUsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiB9CmRpZmYgLS1naXQgYS90b29scy9idWlsZC5jIGIvdG9vbHMvYnVpbGQuYwppbmRleCAwNGY3YTY4Li45ZTk5NGYwIDEwMDY0NAotLS0gYS90b29scy9idWlsZC5jCisrKyBiL3Rvb2xzL2J1aWxkLmMKQEAgLTEsMjEgKzEsMjMgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMTk5MyBSb2JlcnQgSi4gQW1zdGFkdAotICogQ29weXJpZ2h0IDE5OTUgQWxleGFuZHJlIEp1bGxpYXJkCiAgKiBDb3B5cmlnaHQgMTk5NSBNYXJ0aW4gdm9uIExvZXdpcworICogQ29weXJpZ2h0IDE5OTUsIDE5OTYgQWxleGFuZHJlIEp1bGxpYXJkCiAgKi8KIAorI2lmbmRlZiBXSU5FTElCCisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogI2luY2x1ZGUgIndpbmVycm9yLmgiICAvKiBmb3IgRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQgKi8KICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAogLyogRUxGIHN5bWJvbHMgZG8gbm90IGhhdmUgYW4gdW5kZXJzY29yZSBpbiBmcm9udCAqLwotI2lmIGRlZmluZWQgKF9fRUxGX18pIHx8IGRlZmluZWQgKF9fc3ZyNF9fKQorI2lmIGRlZmluZWQgKF9fRUxGX18pIHx8IGRlZmluZWQgKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAjZGVmaW5lIFBSRUZJWAogI2Vsc2UKICNkZWZpbmUgUFJFRklYICJfIgpAQCAtOTEsMTkgKzkzLDggQEAKIAogICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXIgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGV4dCBzdHJ1Y3QgKi8KICNkZWZpbmUgQ09OVEVYVE9GRlNFVChyZWcpIFwKLSAgICgoaW50KSYoKChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKikxKS0+cmVnKSAtIDEgXAotICAgIC0gc2l6ZW9mKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCkpCi0jaWZkZWYgX19zdnI0X18KLSNkZWZpbmUgc2NfZWF4IHVjX21jb250ZXh0LmdyZWdzW0VBWF0KLSNkZWZpbmUgc2NfZWJ4IHVjX21jb250ZXh0LmdyZWdzW0VCWF0KLSNkZWZpbmUgc2NfZWN4IHVjX21jb250ZXh0LmdyZWdzW0VDWF0KLSNkZWZpbmUgc2NfZWR4IHVjX21jb250ZXh0LmdyZWdzW0VEWF0KLSNkZWZpbmUgc2NfZXNpIHVjX21jb250ZXh0LmdyZWdzW0VTSV0KLSNkZWZpbmUgc2NfZWRpIHVjX21jb250ZXh0LmdyZWdzW0VESV0KLSNkZWZpbmUgc2NfZHMgdWNfbWNvbnRleHQuZ3JlZ3NbRFNdCi0jZGVmaW5lIHNjX2VzIHVjX21jb250ZXh0LmdyZWdzW0VTXQotI2RlZmluZSBzY19lZmxhZ3MgdWNfbWNvbnRleHQuZ3JlZ3NbRUZMXQotI2VuZGlmCisgICgoaW50KSZyZWcjI19yZWcoKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKTApIFwKKyAgIC0gc2l6ZW9mKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCkpCiAKIHN0YXRpYyB2b2lkICp4bWFsbG9jIChzaXplX3Qgc2l6ZSkKIHsKQEAgLTUyNywzOSArNTE4LDc3IEBACiB9CiAKIAotc3RhdGljIGludCBPdXRwdXRWYXJpYWJsZUNvZGUoIGNoYXIgKnN0b3JhZ2UsIE9SRERFRiAqb2RwICkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIFN0b3JlVmFyaWFibGVDb2RlCisgKgorICogU3RvcmUgYSBsaXN0IG9mIGludHMgaW50byBhIGJ5dGUgYXJyYXkuCisgKi8KK3N0YXRpYyBpbnQgU3RvcmVWYXJpYWJsZUNvZGUoIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsIE9SRERFRiAqb2RwICkKIHsKICAgICBPUkRWQVJERUYgKnZkcDsKICAgICBpbnQgaTsKIAogICAgIHZkcCA9IG9kcC0+YWRkaXRpb25hbF9kYXRhOwotICAgIHByaW50ZiggIlx0LmRhdGFcbiIgKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgdmRwLT5uX3ZhbHVlczsgaSsrKQorICAgIHN3aXRjaChzaXplKQogICAgIHsKLQlpZiAoKGkgJiA3KSA9PSAwKQotCSAgICBwcmludGYoICJcdCVzXHQiLCBzdG9yYWdlKTsKLQkgICAgCi0JcHJpbnRmKCAiJWQiLCB2ZHAtPnZhbHVlc1tpXSk7Ci0JCi0JaWYgKChpICYgNykgPT0gNyB8fCBpID09IHZkcC0+bl92YWx1ZXMgLSAxKSBwcmludGYoICJcbiIpOwotCWVsc2UgcHJpbnRmKCAiLCAiKTsKKyAgICBjYXNlIDE6CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZHAtPm5fdmFsdWVzOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0gPSB2ZHAtPnZhbHVlc1tpXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmRwLT5uX3ZhbHVlczsgaSsrKQorICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCAqKWJ1ZmZlcilbaV0gPSB2ZHAtPnZhbHVlc1tpXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmRwLT5uX3ZhbHVlczsgaSsrKQorICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQgKilidWZmZXIpW2ldID0gdmRwLT52YWx1ZXNbaV07CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBwcmludGYoICJcbiIpOwotICAgIHByaW50ZiggIlx0LnRleHRcbiIgKTsKLSAgICByZXR1cm4gdmRwLT5uX3ZhbHVlczsKKyAgICByZXR1cm4gdmRwLT5uX3ZhbHVlcyAqIHNpemU7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgQnVpbGRNb2R1bGUKKyAqICAgICAgICAgRHVtcEJ5dGVzCiAgKgotICogQnVpbGQgdGhlIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kdWxlLCBhbmQgZHVtcCBpdAorICogRHVtcCBhIGJ5dGUgc3RyZWFtIGludG8gdGhlIGFzc2VtYmx5IGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkIER1bXBCeXRlcyggY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VjdGlvbiwgY29uc3QgY2hhciAqbGFiZWxfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsX2VuZCApCit7CisgICAgaW50IGk7CisgICAgaWYgKHNlY3Rpb24pIHByaW50ZiggIlx0JXNcbiIsIHNlY3Rpb24gKTsKKyAgICBpZiAobGFiZWxfc3RhcnQpCisgICAgeworICAgICAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiJXNfJXNcbiIsIERMTE5hbWUsIGxhYmVsX3N0YXJ0ICk7CisgICAgICAgIHByaW50ZiggUFJFRklYICIlc18lczpcbiIsIERMTE5hbWUsIGxhYmVsX3N0YXJ0ICk7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmICghKGkgJiAweDBmKSkgcHJpbnRmKCAiXHQuYnl0ZSAiICk7CisgICAgICAgIHByaW50ZiggIiVkIiwgKmRhdGErKyApOworICAgICAgICBpZiAoaSA8IGxlbiAtIDEpIHByaW50ZiggIiVjIiwgKChpICYgMHgwZikgIT0gMHgwZikgPyAnLCcgOiAnXG4nICk7CisgICAgfQorICAgIHByaW50ZiggIlxuIiApOworICAgIGlmIChsYWJlbF9lbmQpCisgICAgeworICAgICAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiJXNfJXNcbiIsIERMTE5hbWUsIGxhYmVsX2VuZCApOworICAgICAgICBwcmludGYoIFBSRUZJWCAiJXNfJXM6XG4iLCBETExOYW1lLCBsYWJlbF9lbmQgKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQnVpbGRNb2R1bGUxNgorICoKKyAqIEJ1aWxkIHRoZSBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgYSAxNi1iaXQgTkUgbW9kdWxlLCBhbmQgZHVtcCBpdAogICogYXMgYSBieXRlIHN0cmVhbSBpbnRvIHRoZSBhc3NlbWJseSBjb2RlLgogICovCi1zdGF0aWMgdm9pZCBCdWlsZE1vZHVsZSggaW50IG1heF9jb2RlX29mZnNldCwgaW50IG1heF9kYXRhX29mZnNldCApCitzdGF0aWMgdm9pZCBCdWlsZE1vZHVsZTE2KCBpbnQgbWF4X2NvZGVfb2Zmc2V0LCBpbnQgbWF4X2RhdGFfb2Zmc2V0ICkKIHsKICAgICBPUkRERUYgKm9kcDsKLSAgICBpbnQgaSwgc2l6ZTsKKyAgICBpbnQgaTsKICAgICBjaGFyICpidWZmZXI7CiAgICAgTkVfTU9EVUxFICpwTW9kdWxlOwogICAgIFNFR1RBQkxFRU5UUlkgKnBTZWdtZW50OwpAQCAtNzI4LDE4ICs3NTcsMTIwIEBACiAKICAgICAgIC8qIER1bXAgdGhlIG1vZHVsZSBjb250ZW50ICovCiAKLSAgICBwcmludGYoICJcdC5kYXRhXG4iICk7Ci0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX01vZHVsZV9TdGFydFxuIiwgRExMTmFtZSApOwotICAgIHByaW50ZiggUFJFRklYICIlc19Nb2R1bGVfU3RhcnQ6XG4iLCBETExOYW1lICk7Ci0gICAgc2l6ZSA9IChpbnQpcHN0ciAtIChpbnQpcE1vZHVsZTsKLSAgICBmb3IgKGkgPSAwLCBwc3RyID0gYnVmZmVyOyBpIDwgc2l6ZTsgaSsrLCBwc3RyKyspCi0gICAgewotICAgICAgICBpZiAoIShpICYgNykpIHByaW50ZiggIlx0LmJ5dGUgIiApOwotICAgICAgICBwcmludGYoICIlZCVjIiwgKnBzdHIsICgoaSAmIDcpICE9IDcpID8gJywnIDogJ1xuJyApOwotICAgIH0KLSAgICBpZiAoaSAmIDcpIHByaW50ZiggIjBcbiIgKTsKLSAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiJXNfTW9kdWxlX0VuZFxuIiwgRExMTmFtZSApOwotICAgIHByaW50ZiggUFJFRklYICIlc19Nb2R1bGVfRW5kOlxuIiwgRExMTmFtZSApOworICAgIER1bXBCeXRlcyggKGNoYXIgKilwTW9kdWxlLCAoaW50KXBzdHIgLSAoaW50KXBNb2R1bGUsCisgICAgICAgICAgICAgICAiLmRhdGEiLCAiTW9kdWxlX1N0YXJ0IiwgIk1vZHVsZV9FbmQiICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQnVpbGRNb2R1bGUzMgorICoKKyAqIEJ1aWxkIHRoZSBpbi1tZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgYSAzMi1iaXQgcHNldWRvLU5FIG1vZHVsZSwgYW5kIGR1bXAgaXQKKyAqIGFzIGEgYnl0ZSBzdHJlYW0gaW50byB0aGUgYXNzZW1ibHkgY29kZS4KKyAqLworc3RhdGljIHZvaWQgQnVpbGRNb2R1bGUzMih2b2lkKQoreworICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICBORV9NT0RVTEUgKnBNb2R1bGU7CisgICAgTkVfV0lOMzJfRVhUUkFJTkZPICpwRXh0cmFJbmZvOworICAgIE9GU1RSVUNUICpwRmlsZUluZm87CisgICAgQllURSAqcHN0cjsKKyAgICBXT1JEICpwd29yZDsKKworICAgIC8qICAgTW9kdWxlIGxheW91dDoKKyAgICAgKiBORV9NT0RVTEUgICAgICAgICAgICBNb2R1bGUKKyAgICAgKiBORV9XSU4zMl9FWFRSQUlORk8gICBXaW4zMiBtb2R1bGUgZXh0cmEgaW5mbworICAgICAqIE9GU1RSVUNUICAgICAgICAgICAgIEZpbGUgaW5mb3JtYXRpb24KKyAgICAgKiBTRUdUQUJMRUVOVFJZICAgICAgICBTZWdtZW50IHRhYmxlIChlbXB0eSkKKyAgICAgKiBXT1JEWzJdICAgICAgICAgICAgICBSZXNvdXJjZSB0YWJsZSAoZW1wdHkpCisgICAgICogQllURVsyXSAgICAgICAgICAgICAgSW1wb3J0ZWQgbmFtZXMgKGVtcHR5KQorICAgICAqIEJZVEVbbl0gICAgICAgICAgICAgIFJlc2lkZW50IG5hbWVzIHRhYmxlICgxIGVudHJ5KQorICAgICAqIEJZVEVbbl0gICAgICAgICAgICAgIEVudHJ5IHRhYmxlIChlbXB0eSkKKyAgICAgKi8KKworICAgIGJ1ZmZlciA9IHhtYWxsb2MoIDB4MTAwMDAgKTsKKworICAgIHBNb2R1bGUgPSAoTkVfTU9EVUxFICopYnVmZmVyOworICAgIHBNb2R1bGUtPm1hZ2ljID0gTkVfU0lHTkFUVVJFOworICAgIHBNb2R1bGUtPmNvdW50ID0gMTsKKyAgICBwTW9kdWxlLT5uZXh0ID0gMDsKKyAgICBwTW9kdWxlLT5mbGFncyA9IE5FX0ZGTEFHU19TSU5HTEVEQVRBIHwgTkVfRkZMQUdTX0JVSUxUSU4gfAorICAgICAgICAgICAgICAgICAgICAgTkVfRkZMQUdTX0xJQk1PRFVMRSB8IE5FX0ZGTEFHU19XSU4zMjsKKyAgICBwTW9kdWxlLT5kZ3JvdXAgPSAwOworICAgIHBNb2R1bGUtPmhlYXBfc2l6ZSA9IDA7CisgICAgcE1vZHVsZS0+c3RhY2tfc2l6ZSA9IDA7CisgICAgcE1vZHVsZS0+aXAgPSAwOworICAgIHBNb2R1bGUtPmNzID0gMDsKKyAgICBwTW9kdWxlLT5zcCA9IDA7CisgICAgcE1vZHVsZS0+c3MgPSAwOworICAgIHBNb2R1bGUtPnNlZ19jb3VudCA9IDA7CisgICAgcE1vZHVsZS0+bW9kcmVmX2NvdW50ID0gMDsKKyAgICBwTW9kdWxlLT5ucm5hbWVfc2l6ZSA9IDA7CisgICAgcE1vZHVsZS0+bW9kcmVmX3RhYmxlID0gMDsKKyAgICBwTW9kdWxlLT5ucm5hbWVfZnBvcyA9IDA7CisgICAgcE1vZHVsZS0+bW92ZWFibGVfZW50cmllcyA9IDA7CisgICAgcE1vZHVsZS0+YWxpZ25tZW50ID0gMDsKKyAgICBwTW9kdWxlLT50cnVldHlwZSA9IDA7CisgICAgcE1vZHVsZS0+b3NfZmxhZ3MgPSBORV9PU0ZMQUdTX1dJTkRPV1M7CisgICAgcE1vZHVsZS0+bWlzY19mbGFncyA9IDA7CisgICAgcE1vZHVsZS0+ZGxsc190b19pbml0ICA9IDA7CisgICAgcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSA9IDA7CisgICAgcE1vZHVsZS0+bWluX3N3YXBfYXJlYSA9IDA7CisgICAgcE1vZHVsZS0+ZXhwZWN0ZWRfdmVyc2lvbiA9IDB4MDMwYTsKKworICAgIC8qIFdpbjMyIGV4dHJhIGluZm8gKi8KKworICAgIHBFeHRyYUluZm8gPSAoTkVfV0lOMzJfRVhUUkFJTkZPICopKHBNb2R1bGUgKyAxKTsKKyAgICBwRXh0cmFJbmZvLT5wZV9tb2R1bGUgPSAwOworCisgICAgICAvKiBGaWxlIGluZm9ybWF0aW9uICovCisKKyAgICBwRmlsZUluZm8gPSAoT0ZTVFJVQ1QgKikocEV4dHJhSW5mbyArIDEpOworICAgIHBNb2R1bGUtPmZpbGVpbmZvID0gKGludClwRmlsZUluZm8gLSAoaW50KXBNb2R1bGU7CisgICAgbWVtc2V0KCBwRmlsZUluZm8sIDAsIHNpemVvZigqcEZpbGVJbmZvKSAtIHNpemVvZihwRmlsZUluZm8tPnN6UGF0aE5hbWUpICk7CisgICAgcEZpbGVJbmZvLT5jQnl0ZXMgPSBzaXplb2YoKnBGaWxlSW5mbykgLSBzaXplb2YocEZpbGVJbmZvLT5zelBhdGhOYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4oRExMTmFtZSkgKyA0OworICAgIHNwcmludGYoIHBGaWxlSW5mby0+c3pQYXRoTmFtZSwgIiVzLkRMTCIsIERMTE5hbWUgKTsKKyAgICBwc3RyID0gKGNoYXIgKilwRmlsZUluZm8gKyBwRmlsZUluZm8tPmNCeXRlcyArIDE7CisgICAgICAgIAorICAgICAgLyogU2VnbWVudCB0YWJsZSAqLworCisgICAgcE1vZHVsZS0+c2VnX3RhYmxlID0gKGludClwc3RyIC0gKGludClwTW9kdWxlOworCisgICAgICAvKiBSZXNvdXJjZSB0YWJsZSAqLworCisgICAgcHdvcmQgPSAoV09SRCAqKXBzdHI7CisgICAgcE1vZHVsZS0+cmVzX3RhYmxlID0gKGludClwd29yZCAtIChpbnQpcE1vZHVsZTsKKyAgICAqcHdvcmQrKyA9IDA7CisgICAgKnB3b3JkKysgPSAwOworCisgICAgICAvKiBJbXBvcnRlZCBuYW1lcyB0YWJsZSAqLworCisgICAgcHN0ciA9IChjaGFyICopcHdvcmQ7CisgICAgcE1vZHVsZS0+aW1wb3J0X3RhYmxlID0gKGludClwc3RyIC0gKGludClwTW9kdWxlOworICAgICpwc3RyKysgPSAwOworICAgICpwc3RyKysgPSAwOworCisgICAgICAvKiBSZXNpZGVudCBuYW1lcyB0YWJsZSAqLworCisgICAgcE1vZHVsZS0+bmFtZV90YWJsZSA9IChpbnQpcHN0ciAtIChpbnQpcE1vZHVsZTsKKyAgICAvKiBGaXJzdCBlbnRyeSBpcyBtb2R1bGUgbmFtZSAqLworICAgICpwc3RyID0gc3RybGVuKERMTE5hbWUgKTsKKyAgICBzdHJjcHkoIHBzdHIgKyAxLCBETExOYW1lICk7CisgICAgcHN0ciArPSAqcHN0ciArIDE7CisgICAgKihXT1JEICopcHN0ciA9IDA7CisgICAgcHN0ciArPSBzaXplb2YoV09SRCk7CisgICAgKnBzdHIrKyA9IDA7CisKKyAgICAgIC8qIEVudHJ5IHRhYmxlICovCisKKyAgICBwTW9kdWxlLT5lbnRyeV90YWJsZSA9IChpbnQpcHN0ciAtIChpbnQpcE1vZHVsZTsKKyAgICAqcHN0cisrID0gMDsKKworICAgICAgLyogRHVtcCB0aGUgbW9kdWxlIGNvbnRlbnQgKi8KKworICAgIER1bXBCeXRlcyggKGNoYXIgKilwTW9kdWxlLCAoaW50KXBzdHIgLSAoaW50KXBNb2R1bGUsCisgICAgICAgICAgICAgICAiLmRhdGEiLCAiTW9kdWxlX1N0YXJ0IiwgIk1vZHVsZV9FbmQiICk7CiB9CiAKIApAQCAtNzU3LDYgKzg4OCw3IEBACiAKICAgICBwcmludGYoICIvKiBGaWxlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5OyBkbyBub3QgZWRpdCEgKi9cbiIgKTsKICAgICBwcmludGYoICJcdC50ZXh0XG4iICk7CisgICAgcHJpbnRmKCAiXHQuYWxpZ24gNFxuIiApOwogICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICIlc19Db2RlX1N0YXJ0XG4iLCBETExOYW1lICk7CiAgICAgcHJpbnRmKCBQUkVGSVggIiVzX0NvZGVfU3RhcnQ6XG5cbiIsIERMTE5hbWUgKTsKIApAQCAtNzczLDExICs5MDUsOSBAQAogICAgICAgICAgICAgcHJpbnRmKCAiXHQuYWxpZ24gNFxuIiApOwogICAgICAgICAgICAgcHJpbnRmKCAiJXNfJWQ6XG4iLCBETExOYW1lLCBpICk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICUlZWJwXG4iICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICQlc18lZF9OYW1lXG4iLCBETExOYW1lLCBpICk7CisgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICROYW1lXyVkXG4iLCBpICk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICQiIFBSRUZJWCAiJXNcbiIsIFNUVUJfQ0FMTEJBQ0sgKTsKLSAgICAgICAgICAgIHByaW50ZiggIlx0am1wICIgUFJFRklYICJTdGRjYWxsXzBcbiIgKTsKLSAgICAgICAgICAgIHByaW50ZiggIiVzXyVkX05hbWU6XG4iLCBETExOYW1lLCBpICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdC5hc2NpaSBcIiVzXyVkXFwwXCJcbiIsIERMTE5hbWUsIGkgKTsKKyAgICAgICAgICAgIHByaW50ZiggIlx0am1wICIgUFJFRklYICJDYWxsRnJvbTMyXzBcbiIgKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgVFlQRV9TVERDQUxMOgpAQCAtNzg3LDExICs5MTcsOSBAQAogICAgICAgICAgICAgcHJpbnRmKCAiXHQuYWxpZ24gNFxuIiApOwogICAgICAgICAgICAgcHJpbnRmKCAiJXNfJWQ6XG4iLCBETExOYW1lLCBpICk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICUlZWJwXG4iICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICQlc18lZF9OYW1lXG4iLCBETExOYW1lLCBpICk7CisgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICROYW1lXyVkXG4iLCBpICk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICQiIFBSRUZJWCAiJXNcbiIsIGZkcC0+aW50ZXJuYWxfbmFtZSApOwotICAgICAgICAgICAgcHJpbnRmKCAiXHRqbXAgIiBQUkVGSVggIlN0ZGNhbGxfJWRcbiIsIHN0cmxlbihmZHAtPmFyZ190eXBlcykgKTsKLSAgICAgICAgICAgIHByaW50ZiggIiVzXyVkX05hbWU6XG4iLCBETExOYW1lLCBpICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdC5hc2NpaSBcIiVzXFwwXCJcbiIsIG9kcC0+ZXhwb3J0X25hbWUgKTsKKyAgICAgICAgICAgIHByaW50ZiggIlx0am1wICIgUFJFRklYICJDYWxsRnJvbTMyXyVkXG4iLCBzdHJsZW4oZmRwLT5hcmdfdHlwZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgVFlQRV9SRVRVUk46CkBAIC04MDQsOCArOTMyLDYgQEAKICAgICAgICAgICAgIHByaW50ZiggIlx0bW92bCAkJWQsJSVlYXhcbiIsIHJkcC0+cmV0X3ZhbHVlICk7CiAgICAgICAgICAgICBpZiAocmRwLT5hcmdfc2l6ZSkgcHJpbnRmKCAiXHRyZXQgJCVkXG4iLCByZHAtPmFyZ19zaXplICk7CiAgICAgICAgICAgICBlbHNlIHByaW50ZiggIlx0cmV0XG4iICk7Ci0gICAgICAgICAgICBwcmludGYoICIlc18lZF9OYW1lOlxuIiwgRExMTmFtZSwgaSApOwotICAgICAgICAgICAgcHJpbnRmKCAiXHQuYXNjaWkgXCIlc1xcMFwiXG4iLCBvZHAtPmV4cG9ydF9uYW1lICk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgpAQCAtODE1LDkgKzk0MSwxMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQnVpbGRNb2R1bGUzMigpOworCisgICAgcHJpbnRmKCAiXHQudGV4dFxuIiApOworICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICIlc19EYXRhX1N0YXJ0XG4iLCBETExOYW1lICk7CisgICAgcHJpbnRmKCBQUkVGSVggIiVzX0RhdGFfU3RhcnQ6XG4iLCBETExOYW1lICk7CisgICAgcHJpbnRmKCAiXHQubG9uZyAlZCwlZFxuIiwgQmFzZSwgTGltaXQgKTsKICAgICBwcmludGYoICJcbi8qIEZ1bmN0aW9uIHRhYmxlICovXG4iICk7Ci0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX01vZHVsZV9TdGFydFxuIiwgRExMTmFtZSApOwotICAgIHByaW50ZiggUFJFRklYICIlc19Nb2R1bGVfU3RhcnQ6XG4iLCBETExOYW1lICk7CiAKICAgICBvZHAgPSBPcmRpbmFsRGVmaW5pdGlvbnM7CiAgICAgZm9yIChpID0gMDsgaSA8PSBMaW1pdDsgaSsrLCBvZHArKykKQEAgLTgyNSwxNyArOTU1LDE5IEBACiAgICAgICAgIGlmIChvZHAtPnR5cGUgPT0gVFlQRV9JTlZBTElEKQogICAgICAgICAgICAgcHJpbnRmKCAiXHQubG9uZyAwLCVzXyVkXG4iLCBETExOYW1lLCBpICk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZiggIlx0LmxvbmcgJXNfJWRfTmFtZSwlc18lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgRExMTmFtZSwgaSwgRExMTmFtZSwgaSApOworICAgICAgICAgICAgcHJpbnRmKCAiXHQubG9uZyBOYW1lXyVkLCVzXyVkXG4iLCBpLCBETExOYW1lLCBpICk7CiAgICAgfQotCi0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX01vZHVsZV9FbmRcbiIsIERMTE5hbWUgKTsKLSAgICBwcmludGYoIFBSRUZJWCAiJXNfTW9kdWxlX0VuZDpcbiIsIERMTE5hbWUgKTsKICAgICBwcmludGYoICJcdC5sb25nIDAsMFxuIiApOwogCi0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX0RhdGFfU3RhcnRcbiIsIERMTE5hbWUgKTsKLSAgICBwcmludGYoIFBSRUZJWCAiJXNfRGF0YV9TdGFydDpcbiIsIERMTE5hbWUgKTsKLSAgICBwcmludGYoICJcdC5sb25nICVkXG4iLCBCYXNlICk7CisgICAgcHJpbnRmKCAiXG4vKiBOYW1lIHRhYmxlICovXG4iICk7CisgICAgZm9yIChpID0gMCwgb2RwID0gT3JkaW5hbERlZmluaXRpb25zOyBpIDw9IExpbWl0OyBpKyssIG9kcCsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiTmFtZV8lZDpcdCIsIGkgKTsKKyAgICAgICAgaWYgKG9kcC0+dHlwZSA9PSBUWVBFX0lOVkFMSUQpCisgICAgICAgICAgICBwcmludGYoICIuYXNjaWkgXCIlcy4lZFxcMFwiXG4iLCBETExOYW1lLCBpICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZiggIi5hc2NpaSBcIiVzXFwwXCJcbiIsIG9kcC0+ZXhwb3J0X25hbWUgKTsKKyAgICB9CiB9CiAKIApAQCAtODUxLDE3ICs5ODMsMTMgQEAKICAgICBPUkRSRVRERUYgKnJkcDsKICAgICBpbnQgaTsKICAgICBpbnQgY29kZV9vZmZzZXQsIGRhdGFfb2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisKKyAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKil4bWFsbG9jKCAweDEwMDAwICk7CisgICAgbWVtc2V0KCBkYXRhLCAwLCAxNiApOworICAgIGRhdGFfb2Zmc2V0ID0gMTY7CiAKICAgICBwcmludGYoICIvKiBGaWxlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5OyBkbyBub3QgZWRpdCEgKi9cbiIgKTsKLSAgICBwcmludGYoICJcdC5kYXRhXG4iICk7Ci0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX0RhdGFfU3RhcnRcbiIsIERMTE5hbWUgKTsKLSAgICBwcmludGYoIFBSRUZJWCAiJXNfRGF0YV9TdGFydDpcbiIsIERMTE5hbWUgKTsKLSNpZmRlZiBfX3N2cjRfXwotICAgIHByaW50ZiggIlx0LjRieXRlIDAsMCwwLDAsMCwwLDAsMFxuIiApOwotI2Vsc2UKLSAgICBwcmludGYoICJcdC53b3JkIDAsMCwwLDAsMCwwLDAsMFxuIiApOwotI2VuZGlmCi0gICAgZGF0YV9vZmZzZXQgPSAxNjsKICAgICBwcmludGYoICJcdC50ZXh0XG4iICk7CiAgICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIiVzX0NvZGVfU3RhcnRcbiIsIERMTE5hbWUgKTsKICAgICBwcmludGYoIFBSRUZJWCAiJXNfQ29kZV9TdGFydDpcbiIsIERMTE5hbWUgKTsKQEAgLTg4NiwyMyArMTAxNCwxOSBAQAogICAgICAgICAgIGNhc2UgVFlQRV9CWVRFOgogICAgICAgICAgICAgcHJpbnRmKCAiLyogJXMuJWQgKi9cbiIsIERMTE5hbWUsIGkpOwogICAgICAgICAgICAgb2RwLT5vZmZzZXQgPSBkYXRhX29mZnNldDsKLSAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IE91dHB1dFZhcmlhYmxlQ29kZSggIi5ieXRlIiwgb2RwKTsKKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IFN0b3JlVmFyaWFibGVDb2RlKCBkYXRhLCAxLCBvZHApOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlIFRZUEVfV09SRDoKICAgICAgICAgICAgIHByaW50ZiggIi8qICVzLiVkICovXG4iLCBETExOYW1lLCBpKTsKICAgICAgICAgICAgIG9kcC0+b2Zmc2V0ID0gZGF0YV9vZmZzZXQ7Ci0jaWZkZWYgX19zdnI0X18KLSAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IDIgKiBPdXRwdXRWYXJpYWJsZUNvZGUoICIuNGJ5dGUiLCBvZHApOwotI2Vsc2UKLSAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IDIgKiBPdXRwdXRWYXJpYWJsZUNvZGUoICIud29yZCIsIG9kcCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRhdGFfb2Zmc2V0ICs9IFN0b3JlVmFyaWFibGVDb2RlKCBkYXRhLCAyLCBvZHApOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICBjYXNlIFRZUEVfTE9ORzoKICAgICAgICAgICAgIHByaW50ZiggIi8qICVzLiVkICovXG4iLCBETExOYW1lLCBpKTsKICAgICAgICAgICAgIG9kcC0+b2Zmc2V0ID0gZGF0YV9vZmZzZXQ7Ci0gICAgICAgICAgICBkYXRhX29mZnNldCArPSA0ICogT3V0cHV0VmFyaWFibGVDb2RlKCAiLmxvbmciLCBvZHApOworICAgICAgICAgICAgZGF0YV9vZmZzZXQgKz0gU3RvcmVWYXJpYWJsZUNvZGUoIGRhdGEsIDQsIG9kcCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgIGNhc2UgVFlQRV9SRVRVUk46CkBAIC05MTEsMTIgKzEwMzUsMTUgQEAKICAgICAgICAgICAgIHByaW50ZiggIlx0bW92dyAkJWQsJSVkeFxuIiwgKHJkcC0+cmV0X3ZhbHVlID4+IDE2KSAmIDB4ZmZmZik7CiAgICAgICAgICAgICBwcmludGYoICJcdC5ieXRlIDB4NjZcbiIpOwogICAgICAgICAgICAgaWYgKHJkcC0+YXJnX3NpemUgIT0gMCkKLSAgICAgICAgICAgICAgICBwcmludGYoICJcdGxyZXQgJCVkXG4iLCByZHAtPmFyZ19zaXplKTsKKyAgICAgICAgICAgICAgICBwcmludGYoICJcdGxyZXQgJCVkXG5cbiIsIHJkcC0+YXJnX3NpemUpOwogICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHByaW50ZiggIlx0bHJldFxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCAiXHRub3BcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZiggIlx0bm9wXG5cbiIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgb2RwLT5vZmZzZXQgPSBjb2RlX29mZnNldDsKLSAgICAgICAgICAgIGNvZGVfb2Zmc2V0ICs9IDEwOyAgLyogQXNzZW1ibHkgY29kZSBpcyAxMCBieXRlcyBsb25nICovCi0gICAgICAgICAgICBpZiAocmRwLT5hcmdfc2l6ZSAhPSAwKSBjb2RlX29mZnNldCArPSAyOworICAgICAgICAgICAgY29kZV9vZmZzZXQgKz0gMTI7ICAvKiBBc3NlbWJseSBjb2RlIGlzIDEyIGJ5dGVzIGxvbmcgKi8KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgY2FzZSBUWVBFX1JFR0lTVEVSOgpAQCAtOTI3LDcgKzEwNTQsNyBAQAogICAgICAgICAgICAgcHJpbnRmKCAiXHRwdXNodyAlJWJwXG4iICk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2hsICQweCUwOHhcbiIsIChETExJZCA8PCAxNikgfCBpKTsKICAgICAgICAgICAgIHByaW50ZiggIlx0cHVzaGwgJCIgUFJFRklYICIlc1xuIiwgZmRwLT5pbnRlcm5hbF9uYW1lICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdGxqbXAgJDB4JTA0eCwgJCIgUFJFRklYICJDYWxsVG8zMl8lc18lc1xuXG4iLAorICAgICAgICAgICAgcHJpbnRmKCAiXHRsam1wICQweCUwNHgsICQiIFBSRUZJWCAiQ2FsbEZyb20xNl8lc18lc1xuIiwKICAgICAgICAgICAgICAgICAgICAgV0lORV9DT0RFX1NFTEVDVE9SLAogICAgICAgICAgICAgICAgICAgICAob2RwLT50eXBlID09IFRZUEVfUkVHSVNURVIpID8gInJlZ3MiIDoKICAgICAgICAgICAgICAgICAgICAgKG9kcC0+dHlwZSA9PSBUWVBFX1BBU0NBTCkgPyAibG9uZyIgOiAid29yZCIsCkBAIC05MzYsNyArMTA2Myw3IEBACiAgICAgICAgICAgICBwcmludGYoICJcdG5vcFxuIiApOwogICAgICAgICAgICAgcHJpbnRmKCAiXHRub3BcbiIgKTsKICAgICAgICAgICAgIHByaW50ZiggIlx0bm9wXG4iICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdG5vcFxuIiApOworICAgICAgICAgICAgcHJpbnRmKCAiXHRub3BcblxuIiApOwogICAgICAgICAgICAgb2RwLT5vZmZzZXQgPSBjb2RlX29mZnNldDsKICAgICAgICAgICAgIGNvZGVfb2Zmc2V0ICs9IDI0OyAgLyogQXNzZW1ibHkgY29kZSBpcyAyNCBieXRlcyBsb25nICovCiAgICAgICAgICAgICBicmVhazsKQEAgLTk1NCw3ICsxMDgxLDEzIEBACiAgICAgICAgIGNvZGVfb2Zmc2V0Kys7CiAgICAgfQogCi0gICAgQnVpbGRNb2R1bGUoIGNvZGVfb2Zmc2V0LCBkYXRhX29mZnNldCApOworICAgIC8qIE91dHB1dCBkYXRhIHNlZ21lbnQgKi8KKworICAgIER1bXBCeXRlcyggZGF0YSwgZGF0YV9vZmZzZXQsIE5VTEwsICJEYXRhX1N0YXJ0IiwgTlVMTCApOworCisgICAgLyogQnVpbGQgdGhlIG1vZHVsZSAqLworCisgICAgQnVpbGRNb2R1bGUxNiggY29kZV9vZmZzZXQsIGRhdGFfb2Zmc2V0ICk7CiB9CiAKIApAQCAtMTE2NiwyMiArMTI5OSwxOCBAQAogCiAgICAgLyogU3RvcmUgdGhlIHJlZ2lzdGVycyAqLwogCi0gICAgcHJpbnRmKCAiXHRwb3BsICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19lYngpICk7IC8qIEdldCBlYnggZnJvbSBzdGFjayAqLwotICAgIHByaW50ZiggIlx0bW92bCAlJWVheCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWF4KSApOwotICAgIHByaW50ZiggIlx0bW92bCAlJWVjeCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWN4KSApOwotICAgIHByaW50ZiggIlx0bW92bCAlJWVkeCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWR4KSApOwotICAgIHByaW50ZiggIlx0bW92bCAlJWVzaSwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZXNpKSApOwotICAgIHByaW50ZiggIlx0bW92bCAlJWVkaSwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWRpKSApOworICAgIHByaW50ZiggIlx0cG9wbCAlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRUJYKSApOyAvKiBHZXQgZWJ4IGZyb20gc3RhY2sqLworICAgIHByaW50ZiggIlx0bW92bCAlJWVheCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRUFYKSApOworICAgIHByaW50ZiggIlx0bW92bCAlJWVjeCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRUNYKSApOworICAgIHByaW50ZiggIlx0bW92bCAlJWVkeCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRURYKSApOworICAgIHByaW50ZiggIlx0bW92bCAlJWVzaSwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRVNJKSApOworICAgIHByaW50ZiggIlx0bW92bCAlJWVkaSwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRURJKSApOwogICAgIHByaW50ZiggIlx0bW92dyAtMTAoJSVlYnApLCUlYXhcbiIgKTsgIC8qIEdldCBzYXZlZCBkcyBmcm9tIHN0YWNrICovCi0gICAgcHJpbnRmKCAiXHRtb3Z3ICUlYXgsJWQoJSVlYngpXG4iLCBDT05URVhUT0ZGU0VUKHNjX2RzKSApOworICAgIHByaW50ZiggIlx0bW92dyAlJWF4LCVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChEUykgKTsKICAgICBwcmludGYoICJcdG1vdncgLTEyKCUlZWJwKSwlJWF4XG4iICk7ICAvKiBHZXQgc2F2ZWQgZXMgZnJvbSBzdGFjayAqLwotICAgIHByaW50ZiggIlx0bW92dyAlJWF4LCVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19lcykgKTsKKyAgICBwcmludGYoICJcdG1vdncgJSVheCwlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoRVMpICk7CiAgICAgcHJpbnRmKCAiXHRwdXNoZmxcbiIgKTsKLSNpZm5kZWYgX19GcmVlQlNEX18KLSAgICBwcmludGYoICJcdHBvcGwgJWQoJSVlYngpXG4iLCBDT05URVhUT0ZGU0VUKHNjX2VmbGFncykgKTsKLSNlbHNlICAgIAotICAgIHByaW50ZiggIlx0cG9wbCAlZCglJWVieClcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWZsKSApOwotI2VuZGlmCisgICAgcHJpbnRmKCAiXHRwb3BsICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChFRkwpICk7CiB9CiAKIApAQCAtMTE5OCwyOCArMTMyNywyNCBAQAogCiAgICAgLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCiAKLSAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWN4XG4iLCBDT05URVhUT0ZGU0VUKHNjX2VjeCkgKTsKLSAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWR4XG4iLCBDT05URVhUT0ZGU0VUKHNjX2VkeCkgKTsKLSAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZXNpXG4iLCBDT05URVhUT0ZGU0VUKHNjX2VzaSkgKTsKLSAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWRpXG4iLCBDT05URVhUT0ZGU0VUKHNjX2VkaSkgKTsKKyAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWN4XG4iLCBDT05URVhUT0ZGU0VUKEVDWCkgKTsKKyAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWR4XG4iLCBDT05URVhUT0ZGU0VUKEVEWCkgKTsKKyAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZXNpXG4iLCBDT05URVhUT0ZGU0VUKEVTSSkgKTsKKyAgICBwcmludGYoICJcdG1vdmwgJWQoJSVlYngpLCUlZWRpXG4iLCBDT05URVhUT0ZGU0VUKEVESSkgKTsKICAgICBwcmludGYoICJcdHBvcGwgJSVlYXhcbiIgKTsgIC8qIFJlbW92ZSBvbGQgZHMgYW5kIGVzIGZyb20gc3RhY2sgKi8KLSAgICBwcmludGYoICJcdHB1c2h3ICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19kcykgKTsgLyogUHVzaCBuZXcgZHMgKi8KLSAgICBwcmludGYoICJcdHB1c2h3ICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19lcykgKTsgLyogUHVzaCBuZXcgZXMgKi8KLSNpZm5kZWYgX19GcmVlQlNEX18KLSAgICBwcmludGYoICJcdHB1c2hsICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19lZmxhZ3MpICk7Ci0jZWxzZSAgICAKLSAgICBwcmludGYoICJcdHB1c2hsICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChzY19lZmwpICk7Ci0jZW5kaWYKKyAgICBwcmludGYoICJcdHB1c2h3ICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChEUykgKTsgLyogUHVzaCBuZXcgZHMgKi8KKyAgICBwcmludGYoICJcdHB1c2h3ICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChFUykgKTsgLyogUHVzaCBuZXcgZXMgKi8KKyAgICBwcmludGYoICJcdHB1c2hsICVkKCUlZWJ4KVxuIiwgQ09OVEVYVE9GRlNFVChFRkwpICk7CiAgICAgcHJpbnRmKCAiXHRwb3BmbFxuIiApOwotICAgIHByaW50ZiggIlx0bW92bCAlZCglJWVieCksJSVlYXhcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWF4KSApOwotICAgIHByaW50ZiggIlx0bW92bCAlZCglJWVieCksJSVlYnhcbiIsIENPTlRFWFRPRkZTRVQoc2NfZWJ4KSApOworICAgIHByaW50ZiggIlx0bW92bCAlZCglJWVieCksJSVlYXhcbiIsIENPTlRFWFRPRkZTRVQoRUFYKSApOworICAgIHByaW50ZiggIlx0bW92bCAlZCglJWVieCksJSVlYnhcbiIsIENPTlRFWFRPRkZTRVQoRUJYKSApOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEJ1aWxkQ2FsbDMyRnVuYworICogICAgICAgICBCdWlsZENhbGxGcm9tMTZGdW5jCiAgKgotICogQnVpbGQgYSAzMi1iaXQgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBzeW50YXggb2YgdGhlIGZ1bmN0aW9uCisgKiBCdWlsZCBhIDE2LWJpdC10by1XaW5lIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgc3ludGF4IG9mIHRoZSBmdW5jdGlvbgogICogcHJvZmlsZSBpczogdHlwZV94eHh4eCwgd2hlcmUgJ3R5cGUnIGlzIG9uZSBvZiAncmVncycsICd3b3JkJyBvcgogICogJ2xvbmcnIGFuZCBlYWNoICd4JyBpcyBhbiBhcmd1bWVudCAoJ3cnPXdvcmQsICdzJz1zaWduZWQgd29yZCwKICAqICdsJz1sb25nLCAncCc9cG9pbnRlcikuCkBAIC0xMjM2LDcgKzEzNjEsNyBAQAogICogKHNwKSAgICAgZW50cnlwb2ludCAobG9uZykKICAqCiAgKi8KLXN0YXRpYyB2b2lkIEJ1aWxkQ2FsbDMyRnVuYyggY2hhciAqcHJvZmlsZSApCitzdGF0aWMgdm9pZCBCdWlsZENhbGxGcm9tMTZGdW5jKCBjaGFyICpwcm9maWxlICkKIHsKICAgICBpbnQgYXJnc2l6ZSA9IDA7CiAgICAgaW50IHNob3J0X3JldCA9IDA7CkBAIC0xMjU2LDExICsxMzgxLDExIEBACiAgICAgLyogRnVuY3Rpb24gaGVhZGVyICovCiAKICAgICBwcmludGYoICIvKioqKioqKioqKlxuIiApOwotICAgIHByaW50ZiggIiAqICIgUFJFRklYICJDYWxsVG8zMl8lc1xuIiwgcHJvZmlsZSApOworICAgIHByaW50ZiggIiAqICIgUFJFRklYICJDYWxsRnJvbTE2XyVzXG4iLCBwcm9maWxlICk7CiAgICAgcHJpbnRmKCAiICoqKioqKioqKiovXG4iICk7CiAgICAgcHJpbnRmKCAiXHQuYWxpZ24gNFxuIiApOwotICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDYWxsVG8zMl8lc1xuXG4iLCBwcm9maWxlICk7Ci0gICAgcHJpbnRmKCBQUkVGSVggIkNhbGxUbzMyXyVzOlxuIiwgcHJvZmlsZSApOworICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDYWxsRnJvbTE2XyVzXG5cbiIsIHByb2ZpbGUgKTsKKyAgICBwcmludGYoIFBSRUZJWCAiQ2FsbEZyb20xNl8lczpcbiIsIHByb2ZpbGUgKTsKIAogICAgIC8qIFNldHVwIGJwIHRvIHBvaW50IHRvIGl0cyBjb3B5IG9uIHRoZSBzdGFjayAqLwogCkBAIC0xMzIwLDkgKzE0NDUsOSBAQAogICAgIGlmIChkZWJ1Z2dpbmcpCiAgICAgewogICAgICAgICBwcmludGYoICJcdHB1c2hsICUlZWF4XG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0cHVzaGwgJENBTEwzMl9TdHJfJXNcbiIsIHByb2ZpbGUgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRwdXNobCAkUHJvZmlsZV8lc1xuIiwgcHJvZmlsZSApOwogICAgICAgICBwcmludGYoICJcdHB1c2hsICQlZFxuIiwgcmVnX2Z1bmMgPyAyIDogKHNob3J0X3JldCA/IDEgOiAwKSApOwotICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnQ2FsbDMyXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0Y2FsbCAiIFBSRUZJWCAiUkVMQVlfRGVidWdDYWxsRnJvbTE2XG4iICk7CiAgICAgICAgIHByaW50ZiggIlx0cG9wbCAlJWVheFxuIiApOwogICAgICAgICBwcmludGYoICJcdHBvcGwgJSVlYXhcbiIgKTsKICAgICAgICAgcHJpbnRmKCAiXHRwb3BsICUlZWF4XG4iICk7CkBAIC0xMzM4LDcgKzE0NjMsNyBAQAogICAgIHsKICAgICAgICAgcHJpbnRmKCAiXHRwdXNobCAlJWVheFxuIiApOwogICAgICAgICBwcmludGYoICJcdHB1c2hsICQlZFxuIiwgcmVnX2Z1bmMgPyAyIDogKHNob3J0X3JldCA/IDEgOiAwKSApOwotICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnUmV0dXJuXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0Y2FsbCAiIFBSRUZJWCAiUkVMQVlfRGVidWdDYWxsRnJvbTE2UmV0XG4iICk7CiAgICAgICAgIHByaW50ZiggIlx0cG9wbCAlJWVheFxuIiApOwogICAgICAgICBwcmludGYoICJcdHBvcGwgJSVlYXhcbiIgKTsKICAgICB9CkBAIC0xNDM2LDkgKzE1NjEsOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEJ1aWxkQ2FsbDE2RnVuYworICogICAgICAgICBCdWlsZENhbGxUbzE2RnVuYwogICoKLSAqIEJ1aWxkIGEgMTYtYml0IGNhbGxiYWNrIGZ1bmN0aW9uLgorICogQnVpbGQgYSBXaW5lLXRvLTE2LWJpdCBjYWxsYmFjayBmdW5jdGlvbi4KICAqCiAgKiBTdGFjayBmcmFtZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb246CiAgKiAgLi4uICAgICAgLi4uCkBAIC0xNDU3LDcgKzE1ODIsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBheCwgV09SRCBieCwgV09SRCBjeCwgV09SRCBkeCwKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc2ksIFdPUkQgZGkgKTsKICAqLwotc3RhdGljIHZvaWQgQnVpbGRDYWxsMTZGdW5jKCBjaGFyICpwcm9maWxlICkKK3N0YXRpYyB2b2lkIEJ1aWxkQ2FsbFRvMTZGdW5jKCBjaGFyICpwcm9maWxlICkKIHsKICAgICBpbnQgc2hvcnRfcmV0ID0gMDsKICAgICBpbnQgcmVnX2Z1bmMgPSAwOwpAQCAtMTUxNCw3ICsxNjM5LDcgQEAKICAgICAgICAgcHJpbnRmKCAiXHRhZGRsICQxMiwlJWVheFxuIiApOwogICAgICAgICBwcmludGYoICJcdHB1c2hsICQlZFxuIiwgcmVnX2Z1bmMgPyA4IDogc3RybGVuKGFyZ3MpICk7CiAgICAgICAgIHByaW50ZiggIlx0cHVzaGwgJSVlYXhcbiIgKTsKLSAgICAgICAgcHJpbnRmKCAiXHRjYWxsICIgUFJFRklYICJSRUxBWV9EZWJ1Z0NhbGwxNlxuIiApOworICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnQ2FsbFRvMTZcbiIgKTsKICAgICAgICAgcHJpbnRmKCAiXHRwb3BsICUlZWF4XG4iICk7CiAgICAgICAgIHByaW50ZiggIlx0cG9wbCAlJWVheFxuIiApOwogICAgIH0KQEAgLTE1NDUsNyArMTY3MCw3IEBACiAgICAgewogICAgICAgICBpbnQgcG9zID0gMjA7ICAvKiBmaXJzdCBhcmd1bWVudCBwb3NpdGlvbiAqLwogCi0gICAgICAgIC8qIE1ha2UgJWJwIHBvaW50IHRvIHRoZSBwcmV2aW91cyBzdGFja2ZyYW1lIChidWlsdCBieSBDYWxsVG8zMikgKi8KKyAgICAgICAgLyogTWFrZSAlYnAgcG9pbnQgdG8gdGhlIHByZXZpb3VzIHN0YWNrZnJhbWUgKGJ1aWx0IGJ5IENhbGxGcm9tMTYpICovCiAgICAgICAgIHByaW50ZiggIlx0bW92dyAlJXNwLCUlYnBcbiIgKTsKICAgICAgICAgcHJpbnRmKCAiXHRhZGR3ICQxNiwlJWJwXG4iICk7CiAKQEAgLTE1NjYsNyArMTY5MSw3IEBACiAKICAgICAvKiBQdXNoIHRoZSByZXR1cm4gYWRkcmVzcyAqLwogCi0gICAgcHJpbnRmKCAiXHRwdXNobCAiIFBSRUZJWCAiQ0FMTDE2X1JldEFkZHJfJXNcbiIsCisgICAgcHJpbnRmKCAiXHRwdXNobCAiIFBSRUZJWCAiQ0FMTFRPMTZfUmV0QWRkcl8lc1xuIiwKICAgICAgICAgICAgIHNob3J0X3JldCA/ICJ3b3JkIiA6ICJsb25nIiApOwogCiAgICAgLyogUHVzaCB0aGUgY2FsbGVkIHJvdXRpbmUgYWRkcmVzcyAqLwpAQCAtMTYwNSwxNiArMTczMCwxNiBAQAogICovCiBzdGF0aWMgdm9pZCBCdWlsZFJldDE2RnVuYygpCiB7Ci0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNBTEwxNl9SZXRfd29yZFxuIiApOwotICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMMTZfUmV0X2xvbmdcbiIgKTsKKyAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiQ0FMTFRPMTZfUmV0X3dvcmRcbiIgKTsKKyAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiQ0FMTFRPMTZfUmV0X2xvbmdcbiIgKTsKIAogICAgIC8qIFB1dCByZXR1cm4gdmFsdWUgaW50byBlYXggKi8KIAotICAgIHByaW50ZiggUFJFRklYICJDQUxMMTZfUmV0X2xvbmc6XG4iICk7CisgICAgcHJpbnRmKCBQUkVGSVggIkNBTExUTzE2X1JldF9sb25nOlxuIiApOwogICAgIHByaW50ZiggIlx0cHVzaHcgJSVkeFxuIiApOwogICAgIHByaW50ZiggIlx0cHVzaHcgJSVheFxuIiApOwogICAgIHByaW50ZiggIlx0cG9wbCAlJWVheFxuIiApOwotICAgIHByaW50ZiggUFJFRklYICJDQUxMMTZfUmV0X3dvcmQ6XG4iICk7CisgICAgcHJpbnRmKCBQUkVGSVggIkNBTExUTzE2X1JldF93b3JkOlxuIiApOwogCiAgICAgLyogUmVzdG9yZSAzMi1iaXQgc2VnbWVudCByZWdpc3RlcnMgKi8KIApAQCAtMTY1MywxOCArMTc3OCwxOSBAQAogICAgIC8qIERlY2xhcmUgdGhlIHJldHVybiBhZGRyZXNzIHZhcmlhYmxlcyAqLwogCiAgICAgcHJpbnRmKCAiXHQuZGF0YVxuIiApOwotICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMMTZfUmV0QWRkcl93b3JkXG4iICk7Ci0gICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNBTEwxNl9SZXRBZGRyX2xvbmdcbiIgKTsKLSAgICBwcmludGYoIFBSRUZJWCAiQ0FMTDE2X1JldEFkZHJfd29yZDpcdC5sb25nIDBcbiIgKTsKLSAgICBwcmludGYoIFBSRUZJWCAiQ0FMTDE2X1JldEFkZHJfbG9uZzpcdC5sb25nIDBcbiIgKTsKKyAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiQ0FMTFRPMTZfUmV0QWRkcl93b3JkXG4iICk7CisgICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNBTExUTzE2X1JldEFkZHJfbG9uZ1xuIiApOworICAgIHByaW50ZiggUFJFRklYICJDQUxMVE8xNl9SZXRBZGRyX3dvcmQ6XHQubG9uZyAwXG4iICk7CisgICAgcHJpbnRmKCBQUkVGSVggIkNBTExUTzE2X1JldEFkZHJfbG9uZzpcdC5sb25nIDBcbiIgKTsKICAgICBwcmludGYoICJcdC50ZXh0XG4iICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgQnVpbGRTdGRjYWxsRnVuYworICogICAgICAgICBCdWlsZENhbGxGcm9tMzJGdW5jCiAgKgotICogQnVpbGQgYSBzdGRjYWxsIGNhbGwtYmFjayBmdW5jdGlvbi4gJ2FyZ3MnIGlzIHRoZSBudW1iZXIgb2YgZHdvcmQgYXJndW1lbnRzLgorICogQnVpbGQgYSAzMi1iaXQtdG8tV2luZSBjYWxsLWJhY2sgZnVuY3Rpb24uCisgKiAnYXJncycgaXMgdGhlIG51bWJlciBvZiBkd29yZCBhcmd1bWVudHMuCiAgKgogICogU3RhY2sgbGF5b3V0OgogICogICAuLi4gICAgIC4uLgpAQCAtMTY3NSwzNSArMTgwMSwyNyBAQAogICogKGVicC00KSAgIGZ1bmMgbmFtZQogICogKGVicC04KSAgIGVudHJ5IHBvaW50CiAgKi8KLXN0YXRpYyB2b2lkIEJ1aWxkU3RkY2FsbEZ1bmMoIGludCBhcmdzICkKK3N0YXRpYyB2b2lkIEJ1aWxkQ2FsbEZyb20zMkZ1bmMoIGludCBhcmdzICkKIHsKICAgICAvKiBGdW5jdGlvbiBoZWFkZXIgKi8KIAogICAgIHByaW50ZiggIi8qKioqKioqKioqXG4iICk7Ci0gICAgcHJpbnRmKCAiICogIiBQUkVGSVggIlN0ZGNhbGxfJWRcbiIsIGFyZ3MgKTsKKyAgICBwcmludGYoICIgKiAiIFBSRUZJWCAiQ2FsbEZyb20zMl8lZFxuIiwgYXJncyApOwogICAgIHByaW50ZiggIiAqKioqKioqKioqL1xuIiApOwogICAgIHByaW50ZiggIlx0LmFsaWduIDRcbiIgKTsKLSAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiU3RkY2FsbF8lZFxuXG4iLCBhcmdzICk7Ci0gICAgcHJpbnRmKCBQUkVGSVggIlN0ZGNhbGxfJWQ6XG4iLCBhcmdzICk7CisgICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNhbGxGcm9tMzJfJWRcblxuIiwgYXJncyApOworICAgIHByaW50ZiggUFJFRklYICJDYWxsRnJvbTMyXyVkOlxuIiwgYXJncyApOwogCiAgICAgLyogRW50cnkgY29kZSAqLwogCiAgICAgcHJpbnRmKCAiXHRsZWFsIDgoJSVlc3ApLCUlZWJwXG4iICk7CiAKLSNpZiAwCi0gICAgLyogU3dpdGNoIHRvIHRoZSBpbnRlcm5hbCBzdGFjayAqLwotCi0gICAgcHJpbnRmKCAiXHRwdXNobCAiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMzJfZXNwXG4iICk7Ci0gICAgcHJpbnRmKCAiXHRtb3ZsICUlZXNwLCAiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMzJfZXNwXG4iICk7Ci0gICAgcHJpbnRmKCAiXHRtb3ZsICIgUFJFRklYICJJRjE2MzJfT3JpZ2luYWwzMl9lc3AsICUlZXNwXG4iICk7Ci0jZW5kaWYKLQogICAgIC8qIFByaW50IHRoZSBkZWJ1Z2dpbmcgaW5mbyAqLwogCiAgICAgaWYgKGRlYnVnZ2luZykKICAgICB7CiAgICAgICAgIHByaW50ZiggIlx0cHVzaGwgJCVkXG4iLCBhcmdzICk7Ci0gICAgICAgIHByaW50ZiggIlx0Y2FsbCAiIFBSRUZJWCAiUkVMQVlfRGVidWdTdGRjYWxsXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0Y2FsbCAiIFBSRUZJWCAiUkVMQVlfRGVidWdDYWxsRnJvbTMyXG4iICk7CiAgICAgICAgIHByaW50ZiggIlx0YWRkICQ0LCAlJWVzcFxuIiApOwogICAgIH0KIApAQCAtMTczMiwxNSArMTg1MCwxMCBAQAogICAgIHsKICAgICAgICAgcHJpbnRmKCAiXHRhZGQgJCVkLCUlZXNwXG4iLCBhcmdzID8gKGFyZ3MgKiA0KSA6IDQgKTsKICAgICAgICAgcHJpbnRmKCAiXHRwdXNobCAlJWVheFxuIiApOwotICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnU3RkY2FsbFJldFxuIiApOworICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnQ2FsbEZyb20zMlJldFxuIiApOwogICAgICAgICBwcmludGYoICJcdHBvcGwgJSVlYXhcbiIgKTsKICAgICB9CiAKLSAgICAvKiBTd2l0Y2ggYmFjayB0byB0aGUgbm9ybWFsIHN0YWNrICovCi0KLSNpZiAwCi0gICAgcHJpbnRmKCAiXHRtb3ZsIC0xMiglJWVicCksIiBQUkVGSVggIklGMTYzMl9TYXZlZDMyX2VzcFxuIiApOwotI2VuZGlmCiAgICAgcHJpbnRmKCAiXHRtb3ZsICUlZWJwLCUlZXNwXG4iICk7CiAgICAgcHJpbnRmKCAiXHRwb3BsICUlZWJwXG4iICk7CiAKQEAgLTE3NTEsMTIgKzE4NjQsNzUgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBCdWlsZENhbGxUbzMyRnVuYworICoKKyAqIEJ1aWxkIGEgV2luZS10by0zMi1iaXQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogU3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgorICogIC4uLiAgICAgIC4uLgorICogKGVicCsxNikgYXJnMgorICogKGVicCsxMikgYXJnMQorICogKGVicCs4KSAgZnVuYyB0byBjYWxsCisgKiAoZWJwKzQpICByZXR1cm4gYWRkcmVzcworICogKGVicCkgICAgcHJldmlvdXMgZWJwCisgKgorICogUHJvdG90eXBlIGZvciB0aGUgQ2FsbFRvMzIgZnVuY3Rpb25zOgorICogICBleHRlcm4gTE9ORyBDYWxsVG8zMl9ubiggRkFSUFJPQyBmdW5jLCBhcmdzLi4uICk7CisgKi8KK3N0YXRpYyB2b2lkIEJ1aWxkQ2FsbFRvMzJGdW5jKCBpbnQgYXJncyApCit7CisgICAgLyogRnVuY3Rpb24gaGVhZGVyICovCisKKyAgICBwcmludGYoICIvKioqKioqKioqKlxuIiApOworICAgIHByaW50ZiggIiAqICIgUFJFRklYICJDYWxsVG8zMl8lZFxuIiwgYXJncyApOworICAgIHByaW50ZiggIiAqKioqKioqKioqL1xuIiApOworICAgIHByaW50ZiggIlx0LmFsaWduIDRcbiIgKTsKKyAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiQ2FsbFRvMzJfJWRcblxuIiwgYXJncyApOworICAgIHByaW50ZiggUFJFRklYICJDYWxsVG8zMl8lZDpcbiIsIGFyZ3MgKTsKKworICAgIC8qIEVudHJ5IGNvZGUgKi8KKworICAgIHByaW50ZiggIlx0cHVzaGwgJSVlYnBcbiIgKTsKKyAgICBwcmludGYoICJcdG1vdmwgJSVlc3AsJSVlYnBcbiIgKTsKKworICAgIC8qIFRyYW5zZmVyIGFyZ3VtZW50cyAqLworCisgICAgaWYgKGFyZ3MpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gYXJnczsgaSA+IDA7IGktLSkgcHJpbnRmKCAiXHRwdXNobCAlZCglJWVicClcbiIsIDQgKiBpICsgOCApOworICAgIH0KKworICAgIC8qIFByaW50IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0ICovCisKKyAgICBpZiAoZGVidWdnaW5nKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCAiXHRwdXNobCAkJWRcbiIsIGFyZ3MgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRwdXNobCA4KCUlZWJwKVxuIiApOworICAgICAgICBwcmludGYoICJcdGNhbGwgIiBQUkVGSVggIlJFTEFZX0RlYnVnQ2FsbFRvMzJcbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRhZGRsICQ4LCUlZXNwXG4iICk7CisgICAgfQorCisgICAgLyogQ2FsbCB0aGUgZnVuY3Rpb24gKi8KKworICAgIHByaW50ZiggIlx0Y2FsbCA4KCUlZWJwKVxuIiApOworCisgICAgLyogUmV0dXJuIHRvIFdpbmUgKi8KKworICAgIHByaW50ZiggIlx0bW92bCAlJWVicCwlJWVzcFxuIiApOworICAgIHByaW50ZiggIlx0cG9wbCAlJWVicFxuIiApOworICAgIHByaW50ZiggIlx0cmV0XG4iICk7Cit9CisKKwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBidWlsZCAtc3BlYyBTUEVDTkFNRVNcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICAgICBidWlsZCAtY2FsbDMyIEZVTkNUSU9OX1BST0ZJTEVTXG4iCi0gICAgICAgICAgICAgICAgICAgICIgICAgICAgYnVpbGQgLWNhbGwxNiBGVU5DVElPTl9QUk9GSUxFU1xuIgotICAgICAgICAgICAgICAgICAgICAiICAgICAgIGJ1aWxkIC1zdGRjYWxsIEZVTkNUSU9OX1BST0ZJTEVTXG4iICk7CisgICAgICAgICAgICAgICAgICAgICIgICAgICAgYnVpbGQgLWNhbGxmcm9tMTYgRlVOQ1RJT05fUFJPRklMRVNcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICBidWlsZCAtY2FsbHRvMTYgRlVOQ1RJT05fUFJPRklMRVNcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICAgICBidWlsZCAtY2FsbGZyb20zMiBGVU5DVElPTl9QUk9GSUxFU1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgICAgIGJ1aWxkIC1jYWxsdG8zMiBGVU5DVElPTl9QUk9GSUxFU1xuIiApOwogICAgIGV4aXQoMSk7CiB9CiAKQEAgLTE3NzEsNyArMTk0Nyw3IEBACiAgICAgewogICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSBCdWlsZFNwZWNGaWxlcyggYXJndltpXSApOwogICAgIH0KLSAgICBlbHNlIGlmICghc3RyY21wKCBhcmd2WzFdLCAiLWNhbGwzMiIgKSkgIC8qIDMyLWJpdCBjYWxsYmFja3MgKi8KKyAgICBlbHNlIGlmICghc3RyY21wKCBhcmd2WzFdLCAiLWNhbGxmcm9tMTYiICkpICAvKiAxNi1iaXQtdG8tV2luZSBjYWxsYmFja3MgKi8KICAgICB7CiAgICAgICAgIC8qIEZpbGUgaGVhZGVyICovCiAKQEAgLTE3ODQsNyArMTk2MCw3IEBACiAKICAgICAgICAgLyogQnVpbGQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCi0gICAgICAgIGZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIEJ1aWxkQ2FsbDMyRnVuYyggYXJndltpXSApOworICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSBCdWlsZENhbGxGcm9tMTZGdW5jKCBhcmd2W2ldICk7CiAKICAgICAgICAgLyogT3V0cHV0IHRoZSBhcmd1bWVudCBkZWJ1Z2dpbmcgc3RyaW5ncyAqLwogCkBAIC0xNzkzLDMyICsxOTY5LDMyIEBACiAgICAgICAgICAgICBwcmludGYoICIvKiBBcmd1bWVudCBzdHJpbmdzICovXG4iICk7CiAgICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ZiggIkNBTEwzMl9TdHJfJXM6XG4iLCBhcmd2W2ldICk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCAiUHJvZmlsZV8lczpcbiIsIGFyZ3ZbaV0gKTsKICAgICAgICAgICAgICAgICBwcmludGYoICJcdC5hc2NpaSBcIiVzXFwwXCJcbiIsIGFyZ3ZbaV0gKyA1ICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCggYXJndlsxXSwgIi1jYWxsMTYiICkpICAvKiAxNi1iaXQgY2FsbGJhY2tzICovCisgICAgZWxzZSBpZiAoIXN0cmNtcCggYXJndlsxXSwgIi1jYWxsdG8xNiIgKSkgIC8qIFdpbmUtdG8tMTYtYml0IGNhbGxiYWNrcyAqLwogICAgIHsKICAgICAgICAgLyogRmlsZSBoZWFkZXIgKi8KIAogICAgICAgICBwcmludGYoICIvKiBGaWxlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LiBEbyBub3QgZWRpdCEgKi9cblxuIiApOwogICAgICAgICBwcmludGYoICJcdC50ZXh0XG4iICk7Ci0gICAgICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMMTZfU3RhcnRcbiIgKTsKLSAgICAgICAgcHJpbnRmKCBQUkVGSVggIkNBTEwxNl9TdGFydDpcbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNBTExUTzE2X1N0YXJ0XG4iICk7CisgICAgICAgIHByaW50ZiggUFJFRklYICJDQUxMVE8xNl9TdGFydDpcbiIgKTsKIAogICAgICAgICAvKiBCdWlsZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAKLSAgICAgICAgZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgQnVpbGRDYWxsMTZGdW5jKCBhcmd2W2ldICk7CisgICAgICAgIGZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIEJ1aWxkQ2FsbFRvMTZGdW5jKCBhcmd2W2ldICk7CiAKICAgICAgICAgLyogT3V0cHV0IHRoZSAxNi1iaXQgcmV0dXJuIGNvZGUgKi8KIAogICAgICAgICBCdWlsZFJldDE2RnVuYygpOwogCi0gICAgICAgIHByaW50ZiggIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMMTZfRW5kXG4iICk7Ci0gICAgICAgIHByaW50ZiggUFJFRklYICJDQUxMMTZfRW5kOlxuIiApOworICAgICAgICBwcmludGYoICJcdC5nbG9ibCAiIFBSRUZJWCAiQ0FMTFRPMTZfRW5kXG4iICk7CisgICAgICAgIHByaW50ZiggUFJFRklYICJDQUxMVE8xNl9FbmQ6XG4iICk7CiAgICAgfQotICAgIGVsc2UgaWYgKCFzdHJjbXAoIGFyZ3ZbMV0sICItc3RkY2FsbCIgKSkgIC8qIHN0ZGNhbGwgY2FsbGJhY2tzICovCisgICAgZWxzZSBpZiAoIXN0cmNtcCggYXJndlsxXSwgIi1jYWxsZnJvbTMyIiApKSAgLyogMzItYml0LXRvLVdpbmUgY2FsbGJhY2tzICovCiAgICAgewogICAgICAgICAvKiBGaWxlIGhlYWRlciAqLwogCkBAIC0xODI3LDkgKzIwMDMsMjIgQEAKIAogICAgICAgICAvKiBCdWlsZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAKLSAgICAgICAgZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykgQnVpbGRTdGRjYWxsRnVuYyggYXRvaShhcmd2W2ldKSApOworICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSBCdWlsZENhbGxGcm9tMzJGdW5jKCBhdG9pKGFyZ3ZbaV0pICk7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoIGFyZ3ZbMV0sICItY2FsbHRvMzIiICkpICAvKiBXaW5lLXRvLTMyLWJpdCBjYWxsYmFja3MgKi8KKyAgICB7CisgICAgICAgIC8qIEZpbGUgaGVhZGVyICovCisKKyAgICAgICAgcHJpbnRmKCAiLyogRmlsZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS4gRG8gbm90IGVkaXQhICovXG5cbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHQudGV4dFxuIiApOworCisgICAgICAgIC8qIEJ1aWxkIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgKi8KKworICAgICAgICBmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKSBCdWlsZENhbGxUbzMyRnVuYyggYXRvaShhcmd2W2ldKSApOwogICAgIH0KICAgICBlbHNlIHVzYWdlKCk7CiAKICAgICByZXR1cm4gMDsKIH0KKworI2VuZGlmICAvKiBXSU5FTElCICovCmRpZmYgLS1naXQgYS93aW4zMi9lbnZpcm9ubWVudC5jIGIvd2luMzIvZW52aXJvbm1lbnQuYwppbmRleCBhOTE1MmYxLi5lZmY5MDUwIDEwMDY0NAotLS0gYS93aW4zMi9lbnZpcm9ubWVudC5jCisrKyBiL3dpbjMyL2Vudmlyb25tZW50LmMKQEAgLTEwLDggKzEwLDggQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luZXJyb3IuaCIKICNpbmNsdWRlICJrZXJuZWwzMi5oIgorI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInRhc2suaCIKLSNpbmNsdWRlICJwZV9pbWFnZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIApAQCAtMjYsNyArMjYsNyBAQAogICAgIFBEQiAqcGRiID0gKFBEQiAqKUdsb2JhbExvY2soIEdldEN1cnJlbnRQREIoKSApOwogCiAjaWZuZGVmIFdJTkVMSUIKLSAgICBzdHJjcHkoYnVmZmVyLCB3aW5lX2ZpbGVzLT5uYW1lKTsKKyAgICBzdHJjcHkoYnVmZmVyLCBNT0RVTEVfR2V0TW9kdWxlTmFtZSggR2V0RXhlUHRyKEdldEN1cnJlbnRUYXNrKCkpICkgKTsKICAgICBjcCA9IGJ1ZmZlcitzdHJsZW4oYnVmZmVyKTsKICAgICAqY3ArKyA9ICcgJzsKICNlbHNlCmRpZmYgLS1naXQgYS93aW4zMi9leGNlcHQuYyBiL3dpbjMyL2V4Y2VwdC5jCmluZGV4IGU3ODljZjguLjkzZGUwMmYgMTAwNjQ0Ci0tLSBhL3dpbjMyL2V4Y2VwdC5jCisrKyBiL3dpbjMyL2V4Y2VwdC5jCkBAIC0zOSwxNyArMzksMTQgQEAKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiZXhjZXB0LmgiCi0jaW5jbHVkZSAicmVsYXkzMi5oIgotCi1XSU5BUEkgRFdPUkQgS0VSTkVMMzJfNTM3KFBFWENFUFRJT05fUE9JTlRFUlMgcHRycyk7CiAKIExQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIgcFRvcEV4Y0hhbmRsZXIgPSBOVUxMOwogCiB2b2lkIEVYQ19Jbml0KHZvaWQpCiB7Ci0gICAgV0lOMzJfYnVpbHRpbiAqZGxsID0gUkVMQVkzMl9HZXRCdWlsdGluRExMKCJLRVJORUwzMiIpOwotICAgIHBUb3BFeGNIYW5kbGVyID0gKExQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIpUkVMQVkzMl9HZXRFbnRyeVBvaW50KCBkbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyIiwgNTM3ICk7CisgICAgcFRvcEV4Y0hhbmRsZXIgPSAoTFBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUilQRV9HZXRQcm9jQWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlciIgKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3dpbjMyL2luaXQuYyBiL3dpbjMyL2luaXQuYwppbmRleCA2ZGU0YzIwLi4wZDUzNzQ5IDEwMDY0NAotLS0gYS93aW4zMi9pbml0LmMKKysrIGIvd2luMzIvaW5pdC5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSAia2VybmVsMzIuaCIKICNpbmNsdWRlICJoYW5kbGUzMi5oIgogI2luY2x1ZGUgImV4Y2VwdC5oIgotI2luY2x1ZGUgInBlX2ltYWdlLmgiCiAjaW5jbHVkZSAidGFzay5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjZGVmaW5lIERFQlVHX1dJTjMyCmRpZmYgLS1naXQgYS93aW4zMi9yZXNvdXJjZS5jIGIvd2luMzIvcmVzb3VyY2UuYwppbmRleCAxOWE5ZTQxLi43ZDU1ZWM5IDEwMDY0NAotLS0gYS93aW4zMi9yZXNvdXJjZS5jCisrKyBiL3dpbjMyL3Jlc291cmNlLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAia2VybmVsMzIuaCIKICNpbmNsdWRlICJwZV9pbWFnZS5oIgorI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgImhhbmRsZTMyLmgiCiAjaW5jbHVkZSAibGlicmVzLmgiCiAjaW5jbHVkZSAicmVzb3VyY2UzMi5oIgpAQCAtOTIsNyArOTMsOCBAQAogSEFORExFMzIgRmluZFJlc291cmNlMzIoIEhJTlNUQU5DRSBoTW9kdWxlLCBMUENXU1RSIG5hbWUsIExQQ1dTVFIgdHlwZSApCiB7CiAjaWZuZGVmIFdJTkVMSUIKLSAgICBzdHJ1Y3Qgd19maWxlcyAqd3B0ciA9IHdpbmVfZmlsZXM7CisgICAgc3RydWN0IHBlX2RhdGEgKnBlOworICAgIE5FX01PRFVMRSAqcE1vZHVsZTsKICAgICBQSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZIHJlc2RpcnB0cjsKICAgICBEV09SRCByb290OwogCUhBTkRMRTMyIHJlc3VsdDsKQEAgLTEwMywxMSArMTA1LDExIEBACiAgICAgZHByaW50Zl9yZXNvdXJjZSggc3RkZGViLCAiIG5hbWU9IiApOwogICAgIFByaW50SWQoIG5hbWUgKTsKICAgICBkcHJpbnRmX3Jlc291cmNlKCBzdGRkZWIsICJcbiIgKTsKLSAgICB3aGlsZSAod3B0ciAhPSBOVUxMICYmICh3cHRyLT5oTW9kdWxlICE9IGhNb2R1bGUpKQotCXdwdHIgPSB3cHRyLT5uZXh0OwotICAgIGlmICgod3B0ciA9PSBOVUxMKSB8fCAod3B0ci0+cGUgPT0gTlVMTCkgfHwgKHdwdHItPnBlLT5wZV9yZXNvdXJjZSA9PSBOVUxMKSkKLQlyZXR1cm4gMDsKLSAgICByZXNkaXJwdHIgPSAoUElNQUdFX1JFU09VUkNFX0RJUkVDVE9SWSkgd3B0ci0+cGUtPnBlX3Jlc291cmNlOworICAgIGlmICghKHBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jayggaE1vZHVsZSApKSkgcmV0dXJuIDA7CisgICAgaWYgKCEocE1vZHVsZS0+ZmxhZ3MgJiBORV9GRkxBR1NfV0lOMzIpKSByZXR1cm4gMDsgIC8qIEZJWE1FPyAqLworICAgIGlmICghKHBlID0gTkVfV0lOMzJfTU9EVUxFKHBNb2R1bGUpKSB8fCAhcGUtPnBlX3Jlc291cmNlKSByZXR1cm4gMDsKKworICAgIHJlc2RpcnB0ciA9IChQSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZKSBwZS0+cGVfcmVzb3VyY2U7CiAgICAgcm9vdCA9IChEV09SRCkgcmVzZGlycHRyOwogICAgIGlmICgocmVzZGlycHRyID0gR2V0UmVzRGlyRW50cnkocmVzZGlycHRyLCB0eXBlLCByb290KSkgPT0gTlVMTCkKIAlyZXR1cm4gMDsKQEAgLTEyOSwxNyArMTMxLDE4IEBACiBIQU5ETEUzMiBMb2FkUmVzb3VyY2UzMiggSElOU1RBTkNFIGhNb2R1bGUsIEhBTkRMRTMyIGhSc3JjICkKIHsKICNpZm5kZWYgV0lORUxJQgotICAgIHN0cnVjdCB3X2ZpbGVzICp3cHRyID0gd2luZV9maWxlczsKKyAgICBzdHJ1Y3QgcGVfZGF0YSAqcGU7CisgICAgTkVfTU9EVUxFICpwTW9kdWxlOwogCiAgICAgaE1vZHVsZSA9IEdldEV4ZVB0ciggaE1vZHVsZSApOyAgLyogSW4gY2FzZSB3ZSB3ZXJlIHBhc3NlZCBhbiBoSW5zdGFuY2UgKi8KICAgICBkcHJpbnRmX3Jlc291cmNlKHN0ZGRlYiwgIkxvYWRSZXNvdXJjZTogbW9kdWxlPSUwNHggcmVzPSUwNHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICBoTW9kdWxlLCBoUnNyYyApOwogICAgIGlmICghaFJzcmMpIHJldHVybiAwOwotICAgIHdoaWxlICh3cHRyICE9IE5VTEwgJiYgKHdwdHItPmhNb2R1bGUgIT0gaE1vZHVsZSkpCi0Jd3B0ciA9IHdwdHItPm5leHQ7Ci0gICAgaWYgKCh3cHRyID09IE5VTEwpIHx8ICh3cHRyLT5wZSA9PSBOVUxMKSB8fCAod3B0ci0+cGUtPnBlX3Jlc291cmNlID09IE5VTEwpKQotCXJldHVybiAwOwotICAgIHJldHVybiAoSEFORExFMzIpICh3cHRyLT5sb2FkX2FkZHIrKChQSU1BR0VfUkVTT1VSQ0VfREFUQV9FTlRSWSloUnNyYyktPk9mZnNldFRvRGF0YSk7CisKKyAgICBpZiAoIShwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKSkpIHJldHVybiAwOworICAgIGlmICghKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1dJTjMyKSkgcmV0dXJuIDA7ICAvKiBGSVhNRT8gKi8KKyAgICBpZiAoIShwZSA9IE5FX1dJTjMyX01PRFVMRShwTW9kdWxlKSkgfHwgIXBlLT5wZV9yZXNvdXJjZSkgcmV0dXJuIDA7CisgICAgcmV0dXJuIChIQU5ETEUzMikgKHBlLT5sb2FkX2FkZHIrKChQSU1BR0VfUkVTT1VSQ0VfREFUQV9FTlRSWSloUnNyYyktPk9mZnNldFRvRGF0YSk7CiAjZWxzZQogICAgIHJldHVybiBMSUJSRVNfTG9hZFJlc291cmNlKCBoTW9kdWxlLCBoUnNyYyApOwogI2VuZGlmCmRpZmYgLS1naXQgYS93aW5kb3dzL2RlZnduZC5jIGIvd2luZG93cy9kZWZ3bmQuYwppbmRleCBkMDgxZjIyLi41ZWNjYmY0IDEwMDY0NAotLS0gYS93aW5kb3dzL2RlZnduZC5jCisrKyBiL3dpbmRvd3MvZGVmd25kLmMKQEAgLTMzLDEwICszMyw5IEBACiAgKgogICogU2V0IHRoZSB3aW5kb3cgdGV4dC4KICAqLwotdm9pZCBERUZXTkRfU2V0VGV4dCggSFdORCBod25kLCBMUFNUUiB0ZXh0ICkKK3ZvaWQgREVGV05EX1NldFRleHQoIFdORCAqd25kUHRyLCBMUFNUUiB0ZXh0ICkKIHsKICAgICBMUFNUUiB0ZXh0UHRyOwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKIAogICAgIGlmICghdGV4dCkgdGV4dCA9ICIiOwogICAgIGlmICh3bmRQdHItPmhUZXh0KSBVU0VSX0hFQVBfRlJFRSggd25kUHRyLT5oVGV4dCApOwpAQCAtNjYsNyArNjUsNyBAQAogCXsKIAkgICAgQ1JFQVRFU1RSVUNUICpjcmVhdGVTdHJ1Y3QgPSAoQ1JFQVRFU1RSVUNUKilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwogCSAgICBpZiAoY3JlYXRlU3RydWN0LT5scHN6TmFtZSkKLQkJREVGV05EX1NldFRleHQoIGh3bmQsCisJCURFRldORF9TZXRUZXh0KCB3bmRQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQU1RSKVBUUl9TRUdfVE9fTElOKGNyZWF0ZVN0cnVjdC0+bHBzek5hbWUpICk7CiAJICAgIHJldHVybiAxOwogCX0KQEAgLTI0OSw3ICsyNDgsNyBAQAogCX0KIAogICAgIGNhc2UgV01fU0VUVEVYVDoKLQlERUZXTkRfU2V0VGV4dCggaHduZCwgKExQU1RSKVBUUl9TRUdfVE9fTElOKGxQYXJhbSkgKTsKKwlERUZXTkRfU2V0VGV4dCggd25kUHRyLCAoTFBTVFIpUFRSX1NFR19UT19MSU4obFBhcmFtKSApOwogCU5DX0hhbmRsZU5DUGFpbnQoIGh3bmQgLCAoSFJHTikxICk7ICAvKiBSZXBhaW50IGNhcHRpb24gKi8KIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvd2luZG93cy9tc2dib3guYyBiL3dpbmRvd3MvbXNnYm94LmMKaW5kZXggYzgyMTVmZC4uZWJhY2YxMiAxMDA2NDQKLS0tIGEvd2luZG93cy9tc2dib3guYworKysgYi93aW5kb3dzL21zZ2JveC5jCkBAIC0xODIsNyArMTgyLDYgQEAKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIE1TR0JPWCBtYm94OwogICAgIGludCByZXQ7Ci0gICAgRFdPUkQgV2luZVByb2MsV2luMTZQcm9jLFdpbjMyUHJvYzsKIAogICAgIG1ib3gudGl0bGUgPSB0aXRsZTsKICAgICBtYm94LnRleHQgID0gdGV4dDsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvd2luLmMgYi93aW5kb3dzL3dpbi5jCmluZGV4IDVjMGIyYWIuLjlhNDFiNWQgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvd2luLmMKKysrIGIvd2luZG93cy93aW4uYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgLyogaWYgbFZhbHVlIGNvbnRhaW5zIGN1cnNvciBjb29yZGluYXRlcyB0aGV5IGhhdmUgdG8gYmUKICAgICAgKiBtYXBwZWQgdG8gdGhlIGNsaWVudCBhcmVhIG9mIHBhcmVudCB3aW5kb3cgKi8KIAotICAgIGlmIChiTW91c2UpIE1hcFdpbmRvd1BvaW50cygwLCBod25kLCBscHB0LCAyKTsKKyAgICBpZiAoYk1vdXNlKSBNYXBXaW5kb3dQb2ludHMoMCwgaHduZCwgbHBwdCwgMSk7CiAjaWZuZGVmIFdJTkVMSUIzMgogICAgIGVsc2UgbFZhbHVlID0gTUFLRUxPTkcoIExPV09SRChsVmFsdWUpLCBpZENoaWxkICk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3dpbmUuaW5pIGIvd2luZS5pbmkKaW5kZXggNTFhNjc0NS4uZjA2OTBlYyAxMDA2NDQKLS0tIGEvd2luZS5pbmkKKysrIGIvd2luZS5pbmkKQEAgLTQwLDYgKzQwLDkgQEAKIHN5c3RlbT0qLWhlbHZldGljYQogbXNzYW5zc2VyaWY9Ki1oZWx2ZXRpY2EKIG1zc2VyaWY9Ki10aW1lcworY291cmllciBuZXc9YWRvYmUtY291cmllcgordGltZXMgbmV3IHJvbWFuPWFkb2JlLXRpbWVzCitzeW1ib2w9YWRvYmUtc3ltYm9sCiBmaXhlZHN5cz0qLWZpeGVkCiBhcmlhbD0qLWhlbHZldGljYQogaGVsdj0qLWhlbHZldGljYQo=