ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggMTY5N2MxZS4uNjA1ZTQzOCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTMgKzEsMTUgQEAKLVRoaXMgaXMgcmVsZWFzZSA5ODA2MTQgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5ODA2Mjggb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk4MDYxNDogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBNYW55IGRyYXdpbmcgZml4ZXMuCi0JLSBJbnRlci1ETEwgY2FsbHMgc25vb3BpbmcuCitXSEFUJ1MgTkVXIHdpdGggV2luZS05ODA2Mjg6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQorCS0gQ29tbW9uIGNvbnRyb2xzIGltcHJvdmVtZW50cy4KKwktIFdpbjE2IERMTCBzbm9vcGluZy4KKwktIFByZWxpbWluYXJ5IGludGVybmFsIFBvc3RzY3JpcHQgZHJpdmVyLgorCS0gSW1wcm92ZWQgRElCIHNlY3Rpb24gaGFuZGxpbmcuCiAJLSBMb3RzIG9mIGJ1ZyBmaXhlcy4KIAogU2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgpAQCAtMTYsMTAgKzE4LDEwIEBACiB0aGUgcmVsZWFzZSBpcyBhdmFpbGFibGUgYXQgdGhlIGZ0cCBzaXRlcy4gIFRoZSBzb3VyY2VzIHdpbGwgYmUgYXZhaWxhYmxlCiBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogCi0gIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDYxNC50YXIuZ3oKLSAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA2MTQudGFyLmd6Ci0gIGZ0cDovL2Z0cC5pbmZvbWFnaWMuY29tL3B1Yi9taXJyb3JzL2xpbnV4L3N1bnNpdGUvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDYxNC50YXIuZ3oKLSAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDYxNC50YXIuZ3oKKyAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNjI4LnRhci5negorICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDYyOC50YXIuZ3oKKyAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvc3Vuc2l0ZS9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNjI4LnRhci5negorICBmdHA6Ly9mdHAucHJvZ3NvYy51dHMuZWR1LmF1L3B1Yi9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNjI4LnRhci5negogCiBJdCBzaG91bGQgYWxzbyBiZSBhdmFpbGFibGUgZnJvbSBhbnkgc2l0ZSB0aGF0IG1pcnJvcnMgdHN4LTExIG9yIHN1bnNpdGUuCiAKZGlmZiAtLWdpdCBhL0JVR1MgYi9CVUdTCmluZGV4IDhlMjZiMDQuLjlmMDhjNDggMTAwNjQ0Ci0tLSBhL0JVR1MKKysrIGIvQlVHUwpAQCAtMTMsMTcgKzEzLDIxIEBACiAKICAqIEluY29tcGxldGUgdGhyZWFkL3Byb2Nlc3Mgc2NoZWR1bGluZyBzdXBwb3J0IGluIFdpbjMyIGNvZGUuCiAKKyAqIFRocmVhZGluZyBmb3Igbm9uIExpbnV4IHN5c3RlbXMgY29tcGxldGVseSBtaXNzaW5nLiAobWlnaHQgdXNlCisgICBMV1BzIGluIFNvbGFyaXMsIEZyZWVCU0Q/IE5ldEJTRD8gU0NPPykKKwogICogVmVyeSBhbHBoYSBwcmludGluZyBjb2RlIHVzaW5nIHdpbjE2IGRyaXZlcnMuCi0gICBXZSBzaG91bGQgYWRkIGEgV0lORSBpbnRlcm5hbCBQb3N0U2NyaXB0IGRyaXZlciAoYWxsIG90aGVyIHByaW50ZXJzCi0gICBjYW4gYmUgc3VwcG9ydGVkIHVzaW5nIGdob3N0c2NyaXB0IGZpbHRlcnMpLgogCi0gKiBFeHRyZW1lbHkgYWxwaGEgV2luOTUgaW50ZXJmYWNlIGNvZGUuCisgKiBWZXJ5IGFscGhhIGludGVybmFsIFBvc3RzY3JpcHQgZHJpdmVyLiBbaC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWtdCiAKKyAqIEV4dHJlbWVseSBhbHBoYSBXaW45NSBpbnRlcmZhY2UgY29kZS4JCQogICogTm8gT0xFMiBhbmQgT0xFMzIgc3VwcG9ydCAoaW5jbHVkaW5nIE9MRTIgaW50ZXJmYWNlcyBldGMuKS4KKwkgKHN0YXJ0ZWQgd29yayBvbiBwaWRsLWhhbmRsaW5nLCBJU2hlbGxGb2xkZXJzIElFbnVtSWRMaXN0cyAKKwkgYW5kIFNIKiBmdW5jdGlvbnMganVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlKQkKIAogICogTm8gTVMgVmlkZW8gc3VwcG9ydC4gW2p1c3Qgc3RhcnRlZCwgbWFyY3VzQGpldC5mcmFua2VuLmRlXQogCi0gKiBDT01ETEczMiBzdXBwb3J0IG5vdCBjb21wbGV0ZSB5ZXQgW2JlcnRob0Bha2hwaGQuYXUuZGs/XQorICogQ09NRExHMzIgc3VwcG9ydCBub3QgY29tcGxldGUgeWV0IFtiZXJ0aG9AYWtocGhkLmF1LmRrXQogCiAgKiBDT01NQ1RSTC9DT01DVEwzMiBzdXBwb3J0IGluIHByb2dyZXNzIFtla29obEBhYm8ucmhlaW4temVpdHVuZy5kZV0uCiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyYzRiOTY1Li4xNDNkNzYxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMjQyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdW4gSnVuIDI4IDE4OjM3OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgorCisJKiBbaWYxNjMyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnN0ci5jXSBbbWVtb3J5L3ZpcnR1YWwuY10KKwlNb3ZlZCBwYWdlLWZhdWx0IGhhbmRsaW5nIHRvIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbi4KKworCSogW3NjaGVkdWxlci90aHJlYWQuY10KKwlBZGRlZCBsb2NraW5nIGFuZCBjaGVjayBmb3Igb3duIHRocmVhZCBpbiBTdXNwZW5kL1Jlc3VtZVRocmVhZC4KKworU2F0IEp1biAyNyAyMToyNToyMSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKworCSogW29iamVjdHMvZGliLmNdIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10gCisJICBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXSBbaW5jbHVkZS9iaXRtYXAuaF0KKwlJbXByb3ZlZCBESUIgc2VjdGlvbiBoYW5kbGluZyB1c2luZyBwYWdlIGZhdWx0IGhhbmRsZXJzLgorCShOb3RlOiBUaGlzIHBhdGNoIGluY2x1ZGVzIGNvZGUgY29udHJpYnV0ZWQgYnkgTWF0dGhldyBKLiBGcmFuY2lzLikKKworCSogW21lbW9yeS92aXJ0dWFsLmNdIFtpZjE2MzIvc2lnbmFsLmNdIFtpbmNsdWRlL2dsb2JhbC5oXQorCVBhZ2UgRmF1bHQgaGFuZGxlciBzdXBwb3J0IGFkZGVkLgorCisJKiBbaWYxNjMyL3NpZ25hbC5jXSBbbG9hZGVyL3NpZ25hbC5jXSBbdG9vbHMvYnVpbGQuY10gW21pc2Mvc3lzdGVtLmNdCisJICBbbWlzYy93aW5zb2NrX2Rucy5jXSBbaW5jbHVkZS9zaWdfY29udGV4dC5oXSBbaW5jbHVkZS90aHJlYWQuaF0KKwkxNi1iaXQgJWZzIGhhbmRsaW5nIGltcHJvdmVkOiBBbHdheXMgcHJlc2VydmUgMTYtYml0ICVmcyB2YWx1ZSwKKwlhbHdheXMgcmVzdG9yZSAzMi1iaXQgJWZzIHZhbHVlIGZvciBzaWduYWwgaGFuZGxlcnMuCisKKwkqIFtpZjE2MzIvdGh1bmsuY10gW2xvYWRlci9tb2R1bGUuY10gW21pc2MvY2FsbGJhY2suY10gW3dpbmRvd3MvdXNlci5jXQorCSAgW2xvYWRlci9uZS9yZXNvdXJjZS5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbaW5jbHVkZS9tb2R1bGUuaF0KKwkgIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvd3Byb2NzLnNwZWNdCisJUmVzb3VyY2UgSGFuZGxlciBmdW5jdGlvbiBwb2ludGVyIHN0b3JlZCBhcyAxNi1iaXQgU0VHUFRSLgorCisJKiBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbaWYxNjMyL3VzZXIuc3BlY10KKwkgIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvbmUvbW9kdWxlLmNdCisJU29tZSBtaW5vciBpbmNvbXBhdGliaWxpdGllcyBmaXhlZCAoV2luMzJzIHJlbGllcyBvbiB0aG9zZSk6CisJR2V0RXhlUHRyLCBJc1dpbmRvdzE2IHNob3VsZCBzZXQgRVMgb24gcmV0dXJuOyBXSU5QT1NfU2VuZE5DQ2FsY1NpemUKKwlzaG91bGQgY29wZSB3aXRoIGhhdmluZyB0aGUgV0lORE9XUE9TIHN0cnVjdHVyZSB0cmFzaGVkOworCXRoZSBPRlNUUlVDVCBpbiB0aGUgTkUgbW9kdWxlIGltYWdlIHNob3VsZCBiZSBwbGFjZWQgKmxhc3QqLgorCisJKiBbaW5jbHVkZS93aW5kb3dzLmhdCisJTWlzc2luZyBwcm90b3R5cGUgZm9yIEZsdXNoVmlld09mRmlsZS4KKworCSogW2xvYWRlci90YXNrLmNdCisJQnVnZml4OiBDb21tYW5kIGxpbmUgc2hvdWxkICpub3QqIHN0YXJ0IHdpdGggYSBibGFuay4KKwkKKwkqIFtsb2FkZXIvbmUvc2VnbWVudC5jXQorCUJ1Z2ZpeDogRml4dXBzIHRvIG9mZnNldCAwIHdlcmUgbmV2ZXIgYXBwbGllZC4KKworCSogW21pc2MvbHN0ci5jXQorCVVzZSBkZWJ1Z3N0cl9hIGluIE91dHB1dERlYnVnU3RyaW5nMTYuCisKKwkqIFttc2Rvcy9kcG1pLmNdCisJU3R1YiBmb3IgaW50IDMxIEJMPTJmIEFYPTdhMjAgKE5ldFdhcmU6IEdldCBWTE0gQ2FsbCBBZGRyZXNzKSBhZGRlZC4KKworCSogW21zZG9zL2ludDIxLmNdCisJU3R1YiBmb3IgaW50IDIxIEFYPTQ0MGQgQ0w9NmYgKGdldCBkcml2ZSBtYXAgaW5mb3JtYXRpb24pIGFkZGVkLgorCitGcmkgSnVuIDI2IDE4OjA4OjMwIDE5OTggIFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CisKKwkqIFt3aW5kb3dzL3dpbnBvcy5jXQorCUZpeCBzbWFsbCBidWdsZXQgdGhhdCBtaXhlZCB1cCBtYXhpbWl6ZWQgYW5kIG1pbmltaXplZCB3aW5kb3dzLgorCisJKiBbaW5jbHVkZS94MTFkcnYuaF0gW29iamVjdHMvZGMuY10gW2dyYXBoaWNzL3gxMWRydi9wZW4uY10KKwkgIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KKwlGaXggc29tZSBidWdzIHdpdGggbGluZXMgam9pbmluZyBzdHlsZXMuIERyYXdzIHJlY3RhbmdsZXMKKwl3aXRoIHRoaWNrIHBlbnMgbm93IGNvcnJlY3RseS4KKworRnJpIEp1biAyNiAxNjoyMjoyMyAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CisKKwkqIFttaXNjL3NoZWxsLmNdCisJRml4ZWQgYnVnIEkgaW50cm9kdWNlZCBsYXN0IHJlbGVhc2UgaW4gSW50ZXJuYWxFeHRyYWN0SWNvbi4KKworCSogW3dpbjMyL2ZpbGUuY10KKwlBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBDcmVhdGVGaWxlMzJBLgorCisJKiBbZG9jdW1lbnRhdGlvbi93aW5lLm1hbl0KKwlVcGRhdGVkIG1hbnBhZ2UuCQorCisJKiBbQ2hhbmdlTG9nXQorCUFkZGVkIG15IGVudHJ5IGZyb20gbGFzdCByZWxlYXNlLgorCitGcmkgSnVuIDI2IDEzOjMzOjMwIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgorCisJKiBbZ3JhcGhpY3MvcHNkcnYvKl0gW2lmMTYzMi93aW5lcHMuc3BlY10gW2luY2x1ZGUvcHNkcnYuaF0KKwkgIFtpbmNsdWRlL3ByaW50LmhdIFtvYmplY3RzL2dkaW9iai5jXQorCUZpcnN0IHN0YWdlcyBvZiBhbiBpbnRlcm5hbCBQb3N0c2NyaXB0IGRyaXZlci4gU2VlCisJZ3JhcGhpY3MvcHNkcnYvUkVBRE1FIC4gU2hvdWxkIHByaW50IHRleHQgKGJhZGx5KSBmcm9tIHdpbjMuMSBub3RlcGFkLAorCXdyaXRlIGFuZCB3aW53b3JkNi4KKworCSogW2RvY3VtZW50YXRpb24vcHJpbnRpbmddCisJU29tZSBub3RlcyBvbiBwcmludGluZy4KKworCSogW2NvbnRyb2xzL2VkaXQuY10KKwlTdHJpcCBvZmYgV1NfQk9SREVSIGluIFdNX05DUkVBVEUsIGVkaXQgZHJhd3MgaXRzIG93biByZWN0YW5nbGUuCisJRUNfVVNFRk9OVElORk8gc2VlbXMgdG8gYmUgdXNlZCBhcyBhIGxlZnQvcmlnaHQgdmFsdWUgZm9yIEVNX1NFVE1BUkdJTlMKKwlhbmQgbm90IGFzIGFuIGFjdGlvbiBhcyB0aGUgZG9jcyBzYXkuIFRoaXMgYWN0dWFsbHkgbWFrZXMgbW9yZSBzZW5zZS4KKwlTY3JvbGwgdGhlIGNhcmV0IGJhY2sgdG8gemVybyBhZnRlciBhIFdNX1NFVFRFWFQuCisKK0ZyaSBKdW4gMjYgMTA6NTY6MjUgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CisKKwkqIFtpZjE2MzIvc25vb3AuY10KKwlBZGRlZCB3aW4xNiBpbnRlci1kbGwgc25vb3BpbmcuCisKKwkqIFt3aW4zMi9vcmRpbmFscy5jXQorCUtFUk5FTF80ODUgaXMgR2V0UHJvY2Vzc0R3b3JkLgorCisJKiBbaW5jbHVkZS94bWFsbG9jLmhdW2luY2x1ZGUvYml0bWFwLmhdW21pc2MveG1hbGxvYy5jXQorCUFkZGVkIHhjYWxsb2Mgc28gd2UgMCBpbml0aWFsaXplIFhJbWFnZXMuIAorCUZpeGVzL0hpZGVzIHRoZSAnanVuayBhcm91bmQgTU9QWUZpc2gnLgorCisJKiBbbWlzYy9udGRsbC5jXQorCVNvbWUgc3R1YnMgYWRkZWQuCisKK1RodSBKdW4gMjUgMTU6MjI6NDMgMTk5OCAgQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+CisKKwkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIAorCUltcGxlbWVudGVkIFN1c3BlbmRUaHJlYWQgYW5kIFJlc3VtZVRocmVhZC4KKworVGh1IEp1biAyNSAwMDo1NTowMyAxOTk4ICBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgorCisJKiBbaW5jbHVkZS9kZWJ1Zy5oLGRwbGF5LmgsZHNvdW5kLmhdW211bHRpbWVkaWEvZHNvdW5kLmMsZHBsYXkuY10KKwkgIFtyZWxheTMyL2RwbGF5eC5zcGVjLGRwbGF5LnNwZWNdW211bHRpbWVkaWEvTWFrZWZpbGUuaW5dCisJICBbZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0cGxheV0KKwlBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBEaXJlY3RQbGF5ICYgRGlyZWN0UGxheUxvYmJ5LiBNb3ZlZCB0aGUKKwlwcmVsaW1pbmFyeSBzdHVicyBwdXQgaW4gdGhlIGRzb3VuZCBmaWxlcyBpbnRvIHR3byBuZXcgZmlsZXMKKwlkcGxheS5oIGFuZCBkcGxheS5jLgorCUFkZGVkIG5ldyBkZWJ1ZyBjaGFubmVsIChkcGxheSkgZm9yIHRoaXMuCisJQ3JlYXRlZCBuZXcgZG9jdW1lbnQgdG8ga2VlcCB0cmFjayBvZiBpbXBsZW1lbnRhdGlvbi4KKworCSogW2luY2x1ZGUvd2luaW9jdGwuaF1bd2luMzIvZGV2aWNlLmNdCisJQWRkZWQgc29tZSBmcmFtZXdvcmsgaW4gRGV2aWNlSW9Db250cm9sIHRvLCBpbiB0aGUgZnV0dXJlLCBzdXBwb3J0CisJdGhlICJidWlsdGluIiB3aW5kb3dzIGR3SW9Db250cm9sQ29kZXMuIEFkZGVkIG5ldyBoZWFkZXIgZmlsZQorCXdpbmlvY3RsLmggLiAKKworCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KKwlBZGRlZCBzbGlnaHRseSBpbXByb3ZlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIFBsYXlTb3VuZC4KKworV2VkIEp1biAyNCAxMjowMDowMCAxOTk4ICBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4gCisKKwkqIFtmaWxlcy9wcm9maWxlLmNdW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXVtsb2FkZXIvbW9kdWxlLmNdCisJQ2hhbmdlZCBsc3RyY21waTMyQSB0byBzdHJjYXNlY21wLCBsc3RybmNtcGkzMkEgdG8gc3RybmNhc2VjbXAsCisJbHN0cmNweTMyQSB0byBzdHJjcHksIGxzdHJsZW4zMkEgdG8gc3RybGVuLCBsc3RyY21wMzJBIHRvIHN0cmNtcAorCWJlY2F1c2UgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgbG9jYWxlIG9uIHN1Y2ggcGxhY2VzLgorCUl0IGNhdXNlcyBhIGh1Z2Ugb3ZlcmhlYWQgYW5kIGV2ZW4gZmFpbHMgc29tZXRpbWVzIAorCisJKiBbaW5jbHVkZS9vbGVhdXRvLmhdW2luY2x1ZGUvd2luZXJyb3IuaF0KKwlBZGRlZCBzb21lIG9sZS1yZWxhdGVkIGNvbnN0YW50cy4KKworCSogW21pc2Mvc2hlbGwuY10KKwlTSEVMTDMyX0RsbEdldENsYXNzT2JqZWN0LCBTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbiwKKwlTSEdldFBhdGhGcm9tSURMaXN0IGltcHJvdmVkIHRoZSBzdHVicworCisJKiBbb2xlL2ZvbGRlcnMuY10KKwlJU2hlbGxGb2xkZXIqIGZ1bmN0aW9ucyByZXdyb3RlIHRoZSBzdHVicyBzbyBkb24ndCBjcmFzaCBhbmQgZ2l2ZQorCXNvbWV0aGluZyBzZW5zaWJsZSBiYWNrLCBzdGFydGVkIGltcGxlbWVudGF0aW9uIG9mLgorCisJKiBbb2xlL3R5cGVsaWIuY11bcmVsYXkzMi9vbGVhdXQzMi5zcGVjXQorCUxvYWRUeXBlTGliMzIsIFJlZ2lzdGVyVHlwZUxpYiBzdHViLgorCisJKiBbb2xlL29sZTJubHMuY10KKwlGaXhlZCBhIGJ1ZmZlciBvdmVycnVuIGluIENvbXBhcmVTdHJpbmczMkEuCisJVGVzdCBmb3IgYSBiYWQgcG9pbnRlciBpbiBMQ01hcFN0cmluZzMyQSAoaGFwcGVucworCWluIHdpbmhscDMyIHdoaWxlIGJ1aWxkaW5nIGEgaW5kZXggZm9yIHNlYXJjaGluZykuIAorCisJKiBbcmVsYXkzMi9vbGVhdXQzMi5zcGVjXSBbb2xlL3R5cGVsaWIuY10KKwlBZGRlZCBzdHViIGZvciBMb2FkVHlwZUxpYiAob2xlMzIpIHRvIG1ha2UgZXhjZWw5NSBoYXBweS4KKworVHVlIEp1biAyMyAyMjo0NzowOSAxOTk4ICBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgorCisJKiBbZmlsZXMvcHJvZmlsZS5jXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQorCUFkZGVkIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3RBLCBHZXRQcml2YXRlUHJvZmlsZVN0cnVjdEEsCisJR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uTmFtZXMxNi4KKworVHVlIEp1biAyMyAwMTozNDo0MyAxOTk4ICBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+CisKKwkqIFtvbGUvb2xlMm5scy5jXQorCUdldFN0cmluZ1R5cGVFeDMyQTogSW1wbGVtZW50ZWQgQ1RfQ1RZUEUyIGFuZCBDVF9DVFlQRTMgY2FzZXMuCisJTENNYXBTdHJpbmczMkE6IE1hcCBmaW5hbCAnXDAnIGZvciAnXDAnLXRlcm1pbmF0ZWQgc3RyaW5ncy4KKworCSogW21pc2Mvc2hlbGxvcmQuY10gW2ZpbGVzL3Byb2ZpbGUuY10gW2dyYXBoaWNzL2RyaXZlci5jXSAKKwkgIFtsb2FkZXIvbW9kdWxlLmNdIFttc2Rvcy9pbnQyMS5jXSBbd2luZG93cy9kcml2ZXIuY10gW2ZpbGVzL2RyaXZlLmNdCisJQ2hhbmdlZCBsc3RyY21waTMyQSAtPiBzdHJjYXNlY21wLiAgU2hvdWxkIGJlIE9LIGluIHRoZXNlIHBsYWNlcy4KKworU2F0IEp1biAyMCAyMzo0MDowMCAxOTk4ICBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AYWtocGhkLmF1LmRrPgorCisJKiBbdG9vbHMvd3JjL10KKwlXcmMgdmVyc2lvbiAxLjAuMiAoMjAtSnVuLTE5OTgpLiBQbGVhc2UgcmV2ZXJ0IHRvIAorCXRoZSBmaWxlIHRvb2xzL3dyYy9DSEFOR0VTIGZvciBkZXRhaWxzLgorCitTYXQgSnVuIDIwIDE0OjU4OjAwIDE5OTggIE1hcmNlbCBCYXVyICA8bWJhdXJAZzI2LmV0aHouY2g+CisKKwkqIFtvbGUvb2xlMm5scy5jXSBbb2xlL25scy8qXQorCUFkZGVkIHRoZSBmaXJzdCA1NyBubHMgZmlsZXMsIG1vc3QgYXJlIG5vdCB5ZXQgY29tcGxldGUuCisKK1dlZCBKdW4gMTcgMTE6MTY6NTQgMTk5OCAgRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgorCisJKiBbcmVsYXkzMi9yZWxheTM4Ni5jXSBbaWYxNjMyL3JlbGF5LmNdCisJTW92ZSBkZWJ1Z19yZWxheV8oaW5jbHVkZXxleGNsdWRlKV9saXN0IGhhbmRsaW5nIGludG8KKwlzZXBlcmF0ZSBmdW5jdGlvbiBSRUxBWV9TaG93RGVidWdtc2dzUmVsYXkoKS4gIEluY2x1ZGUKKwljaGVja2luZyBvZiB0aGlzIGZvciAxNiBiaXQgY2FsbHMgKG9yaWdpbmFsbHkgb25seQorCTMyLWJpdCBjYWxscykuCisKKwkqIFtyZWxheTMyL3Nub29wLmNdIFttaXNjL21haW4uY10KKwlBZGQgZGVidWdfc25vb3BfKGluY2x1ZGV8ZXhjbHVkZSlfbGlzdCBhcyBwZXIgdGhlIHJlbGF5IHN0dWZmLgorCUZpeCB0eXBvIGFuZCBhZGQgaW5mb3JtYXRpb24gb24gLWRlYnVnbXNnICsvLXJlbGF5PS4uLiBpbgorCWhlbHAgb24gLWRlYnVnbXNnLiAgUmVmZXIgdG8gYXZhaWxhYmlsaXR5IG9mIHNub29wIHRvby4KKworVHVlIEp1biAxMCAyMjowMDoxOCAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCisJKiBbY29udHJvbHMvaGVhZGVyLmNdW2luY2x1ZGUvaGVhZGVyLmhdW2luY2x1ZGUvY29tbWN0cmwuaF0KKwlBZGRlZCBvd25lciBkcmF3IHN1cHBvcnQuCisKKwkqIFt3aW5kb3dzL25vbmNsaWVudC5jXVt3aW5kb3dzL3N5c21ldGljcy5jXQorCUZpeGVkIG1lbnUgYmFyIGhlaWdodCBmb3IgV2luOTUgbG9vay4KKwlTcGxpdCBOQ19BZGp1c3RSZWN0OTUoKSBpbnRvIE5DX0FkanVzdFJlY3RPdXRlcjk1KCkgYW5kCisJTkNfQWRqdXN0UmVjdElubmVyOTUgdG8gZml4IGEgbWVudSBiYXIgYnVnLgorCUltcHJvdmVkIFdpbjk1IGxvb2suCisKKwkqIFtjb250cm9scy9wcm9ncmVzcy5jXQorCUltcHJvdmVkIGRyYXdpbmcgY29kZS4gQm9yZGVycyB3aWxsIGJlIGRyYXduIGJ5IG5vbi1jbGllbnQgY29kZS4KKworCSogW2NvbnRyb2xzL3VwZG93bi5jXQorCUNoYW5nZWQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZpeGVkIHNvbWUgYnVncy4KKworCSogW2NvbnRyb2xzL3Rvb2xiYXIuY10KKwlGaXhlZCBUQl9CVVRUT05TVFJVQ1RTSVpFIGJ1ZyBpbiBNRkMgcHJvZ3JhbXMuCisJU2V2ZXJhbCBpbXByb3ZlbWVudHMuCisKKwkqIFttaXNjL3NoZWxsLmNdCisJQWRkZWQgc3R1YiBmb3IgQnJvd3NlRm9yRm9sZGVyc0EoKS4KKworCSogW21pc2Mvc2hlbGxvcmQuY10KKwlBZGRlZCBzdHViIGZvciBTSEVMTDMyXzE0NygpLgorCisJKiBbY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jXQorCU1pbm9yIGNoYW5nZXMuCisKKwkqIFtkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sc10KKwlOZXcgRmlsZTogRG9jdW1lbnRhdGlvbiBhYm91dCBkZXZlbG9wbWVudCBzdGF0dXMsIHVuZG9jdW1lbnRlZAorCWZlYXR1cmVzIGFuZCBmdW5jdGlvbnMgb2YgdGhlIGNvbW1vbiBjb250cm9scy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3VuIEp1biAxNSAxMDozMDozNSAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KIAogCSogW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZmlsZS5jXSBbaWYxNjMyL3dwcm9jcy5zcGVjXQpAQCAtMTEyLDYgKzM1MCwyNyBAQAogCUFkZGVkIHN0dWJzIGZvciBPcGVuRGVza3RvcEEsIFNldFRocmVhZERlc2t0b3AsIGFuZAogCVNldFVzZXJPYmplY3RJbmZvcm1hdGlvbkEuCiAKK1dlZCBKdW4gMTAgIDIwOjI4OjA4IDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CisKKwkqIFtkZWJ1Z2dlci9icmVhay5jXQorCUZpeGVkIGJ1ZyBpbnRyb2R1Y2VkIGluIDk4MDUwMyB0aGF0IGJyb2tlIHRoZSAtZGVidWcgY29tbWFuZCAKKwlsaW5lIG9wdGlvbiBmb3IgUEUgZXhlY3V0YWJsZSBmaWxlcy4KKworCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW2luY2x1ZGUvZGVidWd0b29scy5oXQorCSAgW2RvY3VtZW50YXRpb24vZGVidWctbXNnc10KKwlBZGRlZCAnY29uZmlndXJlJyBvcHRpb25zIHRvIGNvbXBpbGUgb3V0IGRlYnVnZ2luZyBtZXNzYWdlcy4KKwlVc2UgLS1kaXNhYmxlLWRlYnVnIHRvIGRpc2FibGUgYWxsIGRlYnVnZ2luZyBtZXNzYWdlcywgYW5kCisJLS1kaXNhYmxlLXRyYWNlIHRvIGp1c3QgZGlzYWJsZSBUUkFDRSBtZXNzYWdlcy4gIFRoaXMgcmVzdWx0cworCWluIGEgc3RyaXBwZWQgZXhlY3V0YWJsZSB0aGF0IGlzIDE1LTIwJSBzbWFsbGVyLiAgVGhpcyBvcHRpb24KKwlpcyB2ZXJ5IG11Y2ggdW50ZXN0ZWQtLWRvbid0IGV4cGVjdCBpdCB0byB3b3JrLgorCisJKiBbZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzXSBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmddCisJTWlub3IgdXBkYXRlcy4KKworCSogWyovKi5jXQorCUZpeGVkIHNvbWUgY29tcGlsZSB3YXJuaW5ncy4gIFRoaXMgYWxzbyBpbmNsdWRlcyB0aGUKKwljb21waWxlX3dhcm5pbmdzX3RyaXZpYWwgcGF0Y2ggZnJvbSBXaW5lSFEuCisKIFR1ZSBKdW4gMTAgMjI6MDA6MTggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KIAogCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXVtpbmNsdWRlL3N5c21ldHJpY3MuaF0KZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KaW5kZXggYTA2NzRmZS4uNGY5NWRiZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwLDYgKzUwLDcgQEAKIAogRU1VU1VCRElSUyA9IFwKIAlkZWJ1Z2dlciBcCisJZ3JhcGhpY3MvcHNkcnYgXAogCWdyYXBoaWNzL3dpbjE2ZHJ2IFwKIAlpZjE2MzIgXAogCW1pc2NlbXUKQEAgLTk1LDYgKzk2LDcgQEAKIAogRU1VT0JKUyA9IFwKIAlkZWJ1Z2dlci9kZWJ1Z2dlci5vIFwKKwlncmFwaGljcy9wc2Rydi9wc2Rydi5vIFwKIAlncmFwaGljcy93aW4xNmRydi93aW4xNmRydi5vIFwKIAlpZjE2MzIvaWYxNjMyLm8gXAogCW1pc2NlbXUvbWlzY2VtdS5vCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNDA5YjNmNS4uYjAwOGQ0ZCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjQ0Nyw3ICsyNDQ3LDcgQEAKIGZpCiAKIAotZm9yIGFjX2Z1bmMgaW4gY2xvbmUgZ2V0cGFnZXNpemUgbWVtbW92ZSBzaWdhbHRzdGFjayBzdHJlcnJvciBzdHJpY21wIHRjZ2V0YXR0ciB0aW1lZ20gdXNsZWVwIHdhaXQ0IHdhaXRwaWQKK2ZvciBhY19mdW5jIGluIGNsb25lIGdldHBhZ2VzaXplIG1lbW1vdmUgc2lnYWx0c3RhY2sgc3RyZXJyb3Igc3RyaWNtcCB0Y2dldGF0dHIgdGltZWdtIHVzbGVlcCB3YWl0NCB3YWl0cGlkIHZmc2NhbmYKIGRvCiBlY2hvICRhY19uICJjaGVja2luZyBmb3IgJGFjX2Z1bmMiIi4uLiAkYWNfYyIgMT4mNgogZWNobyAiY29uZmlndXJlOjI0NTQ6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CkBAIC0zMzAzLDYgKzMzMDMsNyBAQAogZmlsZXMvTWFrZWZpbGUKIGdyYXBoaWNzL01ha2VmaWxlCiBncmFwaGljcy9tZXRhZmlsZWRydi9NYWtlZmlsZQorZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUKIGdyYXBoaWNzL3dpbjE2ZHJ2L01ha2VmaWxlCiBncmFwaGljcy94MTFkcnYvTWFrZWZpbGUKIGlmMTYzMi9NYWtlZmlsZQpAQCAtMzQzNSw2ICszNDM2LDcgQEAKIGZpbGVzL01ha2VmaWxlCiBncmFwaGljcy9NYWtlZmlsZQogZ3JhcGhpY3MvbWV0YWZpbGVkcnYvTWFrZWZpbGUKK2dyYXBoaWNzL3BzZHJ2L01ha2VmaWxlCiBncmFwaGljcy93aW4xNmRydi9NYWtlZmlsZQogZ3JhcGhpY3MveDExZHJ2L01ha2VmaWxlCiBpZjE2MzIvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBhZTk5NDRjLi5mMzNmMDdmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC0yMzUsNyArMjM1LDcgQEAKIAogZG5sICoqKiogQ2hlY2sgZm9yIGZ1bmN0aW9ucyBhbmQgaGVhZGVyIGZpbGVzICoqKioKIAotQUNfQ0hFQ0tfRlVOQ1MoY2xvbmUgZ2V0cGFnZXNpemUgbWVtbW92ZSBzaWdhbHRzdGFjayBzdHJlcnJvciBzdHJpY21wIHRjZ2V0YXR0ciB0aW1lZ20gdXNsZWVwIHdhaXQ0IHdhaXRwaWQpCitBQ19DSEVDS19GVU5DUyhjbG9uZSBnZXRwYWdlc2l6ZSBtZW1tb3ZlIHNpZ2FsdHN0YWNrIHN0cmVycm9yIHN0cmljbXAgdGNnZXRhdHRyIHRpbWVnbSB1c2xlZXAgd2FpdDQgd2FpdHBpZCB2ZnNjYW5mKQogQUNfQ0hFQ0tfSEVBREVSUyh3Y3R5cGUuaCBzeXMvc3lzY2FsbC5oIHN5c2NhbGwuaCBzeXMvcGFyYW0uaCBzeXMvdmZzLmggc3lzL21vdW50Lmggc3lzL3N0YXRmcy5oIGZsb2F0LmggbGludXgvY2Ryb20uaCBzeXMvY2Rpby5oIHN5cy9maWxpby5oIHN5cy9tb2RlbS5oIHN0cmluZ3MuaCBzeXMvc3RydGlvLmgpCiBBQ19IRUFERVJfU1RBVCgpCiBBQ19DX0NPTlNUKCkKQEAgLTQ0Miw2ICs0NDIsNyBAQAogZmlsZXMvTWFrZWZpbGUKIGdyYXBoaWNzL01ha2VmaWxlCiBncmFwaGljcy9tZXRhZmlsZWRydi9NYWtlZmlsZQorZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUKIGdyYXBoaWNzL3dpbjE2ZHJ2L01ha2VmaWxlCiBncmFwaGljcy94MTFkcnYvTWFrZWZpbGUKIGlmMTYzMi9NYWtlZmlsZQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jIGIvY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jCmluZGV4IDI3MTllM2IuLjg4YjU3ZDUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuYworKysgYi9jb250cm9scy9jb21jdGwzMnVuZG9jLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCiAgKiBUT0RPCiAgKiAgICAgLSBGaXggRFNBX0luc2VydEl0ZW0uCisgKiAgICAgLSBGaXggRFNBX0dldEl0ZW0uCiAgKiAgICAgLSBXcml0ZSBkb2N1bWVudGF0aW9uLgogICovCiAKQEAgLTM5LDEwICs0MCw2IEBACiB9IERQQV9EQVRBLCAqTFBEUEFfREFUQTsKIAogCi1EV09SRCBXSU5BUEkgQWxsb2MgKERXT1JEKTsKLURXT1JEIFdJTkFQSSBSZUFsbG9jIChEV09SRCwgRFdPUkQpOwotRFdPUkQgV0lOQVBJIEZyZWUgKERXT1JEKTsKLQogRFdPUkQgV0lOQVBJIERTQV9DcmVhdGUgKERXT1JELCBEV09SRCk7CiAKIApAQCAtNTEsMzEgKzQ4LDMyIEBACiBEV09SRCBXSU5BUEkgRFBBX0luc2VydFB0ciAoRFdPUkQsIERXT1JELCBEV09SRCk7CiAKIAotTFBTVFIgV0lOQVBJIENPTUNUTDMyX1N0ckNockEgKExQU1RSIGxwU3RyaW5nLCBDSEFSIGNDaGFyKTsKKwogCiAKIERXT1JEIFdJTkFQSQotQWxsb2MgKERXT1JEIGR3UGFyYW0xKQorQ09NQ1RMMzJfQWxsb2MgKERXT1JEIGR3UGFyYW0pCiB7CiAgICAgRFdPUkQgZHdQdHI7CiAKLSAgICBkd1B0ciA9IChEV09SRClIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksIGR3UGFyYW0xKTsKKyAgICBkd1B0ciA9IChEV09SRClIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLCBkd1BhcmFtKTsKIAotICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KSByZXQ9MHglMDhseFxuIiwgZHdQYXJhbTEsIGR3UHRyKTsKKyAgICBUUkFDRSAoY29tbWN0cmwsICIoMHglMDhseCkgcmV0PTB4JTA4bHhcbiIsIGR3UGFyYW0sIGR3UHRyKTsKIAogICAgIHJldHVybiBkd1B0cjsKIH0KIAogCiBEV09SRCBXSU5BUEkKLVJlQWxsb2MgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKK0NPTUNUTDMyX1JlQWxsb2MgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKIHsKICAgICBEV09SRCBkd1B0cjsKIAogICAgIGlmIChkd1BhcmFtMSA9PSAwKQotCWR3UHRyID0gKERXT1JEKUhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwgZHdQYXJhbTIpOworCWR3UHRyID0gKERXT1JEKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCisJCQkJICBkd1BhcmFtMik7CiAgICAgZWxzZQotCWR3UHRyID0gKERXT1JEKUhlYXBSZUFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLCAKKwlkd1B0ciA9IChEV09SRClIZWFwUmVBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCiAJCQkJICAgIChMUFZPSUQpZHdQYXJhbTEsIGR3UGFyYW0yKTsKIAogICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4IDB4JTA4bHgpIHJldD0weCUwOGx4XG4iLApAQCAtODYsMTUgKzg0LDIxIEBACiAKIAogRFdPUkQgV0lOQVBJCi1GcmVlIChEV09SRCBkd1BhcmFtMSkKK0NPTUNUTDMyX0ZyZWUgKERXT1JEIGR3UGFyYW0pCiB7Ci0gICAgVFJBQ0UgKGNvbW1jdHJsLCAiKDB4JTA4bHgpXG4iLCBkd1BhcmFtMSk7Ci0gICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIChMUFZPSUQpZHdQYXJhbTEpOworICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KVxuIiwgZHdQYXJhbSk7CisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCAoTFBWT0lEKWR3UGFyYW0pOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKIAorRFdPUkQgV0lOQVBJCitDT01DVEwzMl9HZXRTaXplIChEV09SRCBkd1BhcmFtKQoreworICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4KVxuIiwgZHdQYXJhbSk7CisgICAgcmV0dXJuIChIZWFwU2l6ZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIChMUFZPSUQpZHdQYXJhbSkpOworfQogCiAKIApAQCAtMTM2LDYgKzE0MCwzNiBAQAogCiAKIERXT1JEIFdJTkFQSQorRFNBX0dldEl0ZW0gKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMiwgRFdPUkQgZHdQYXJhbTMpCit7CisgICAgRklYTUUgKGNvbW1jdHJsLCAiKDB4JTA4bHggMHglMDhseCAweCUwOGx4KTogc3R1YiFcbiIsCisJICAgZHdQYXJhbTEsIGR3UGFyYW0yLCBkd1BhcmFtMyk7CisKKyAgICByZXR1cm4gMDsKK30KKworCitEV09SRCBXSU5BUEkKK0RTQV9HZXRJdGVtUHRyIChEV09SRCBkd1BhcmFtMSwgRFdPUkQgZHdQYXJhbTIpCit7CisgICAgTFBEU0FfREFUQSBkc2FQdHIgPSAoTFBEU0FfREFUQSlkd1BhcmFtMTsKKworICAgIFRSQUNFIChjb21tY3RybCwgIigweCUwOGx4IDB4JTA4bHgpXG4iLCBkd1BhcmFtMSwgZHdQYXJhbTIpOworCisgICAgaWYgKGRzYVB0ciA9PSBOVUxMKQorCXJldHVybiAwOworICAgIGlmIChkc2FQdHItPnB0cnMgPT0gTlVMTCkKKwlyZXR1cm4gMDsKKyAgICBpZiAoKGR3UGFyYW0yIDwgMCkgfHwgKGR3UGFyYW0yID49IGRzYVB0ci0+ZHdFbnRyeUNvdW50KSkKKwlyZXR1cm4gMDsKKworICAgIFRSQUNFIChjb21tY3RybCwgInJldD0weCUwOGx4XG4iLCAoRFdPUkQpZHNhUHRyLT5wdHJzW2R3UGFyYW0yXSk7CisKKyAgICByZXR1cm4gKERXT1JEKWRzYVB0ci0+cHRyc1tkd1BhcmFtMl07Cit9CisKKworRFdPUkQgV0lOQVBJCiBEU0FfSW5zZXJ0SXRlbSAoRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yLCBEV09SRCBkd1BhcmFtMykKIHsKICAgICBMUERTQV9EQVRBIGRzYVB0ciA9IChMUERTQV9EQVRBKWR3UGFyYW0xOwpAQCAtMTg4LDI0ICsyMjIsNiBAQAogfQogCiAKLURXT1JEIFdJTkFQSQotRFNBX0dldEl0ZW1QdHIgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKLXsKLSAgICBMUERTQV9EQVRBIGRzYVB0ciA9IChMUERTQV9EQVRBKWR3UGFyYW0xOwotCi0gICAgVFJBQ0UgKGNvbW1jdHJsLCAiKDB4JTA4bHggMHglMDhseClcbiIsIGR3UGFyYW0xLCBkd1BhcmFtMik7Ci0KLSAgICBpZiAoZHNhUHRyID09IE5VTEwpCi0JcmV0dXJuIDA7Ci0gICAgaWYgKGRzYVB0ci0+cHRycyA9PSBOVUxMKQotCXJldHVybiAwOwotICAgIGlmICgoZHdQYXJhbTIgPCAwKSB8fCAoZHdQYXJhbTIgPj0gZHNhUHRyLT5kd0VudHJ5Q291bnQpKQotCXJldHVybiAwOwotCi0gICAgVFJBQ0UgKGNvbW1jdHJsLCAicmV0PTB4JTA4bHhcbiIsIChEV09SRClkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKLQotICAgIHJldHVybiAoRFdPUkQpZHNhUHRyLT5wdHJzW2R3UGFyYW0yXTsKLX0KIAogCiBEV09SRCBXSU5BUEkKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2NvbW1jdHJsLmMgYi9jb250cm9scy9jb21tY3RybC5jCmluZGV4IDIyZWY0YzQuLjhkZGRmNWIgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2NvbW1jdHJsLmMKKysrIGIvY29udHJvbHMvY29tbWN0cmwuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNZW51SGVscCAoQ09NQ1RMMzIuMikKKyAqIE1lbnVIZWxwIFtDT01DVEwzMi4yXQogICoKICAqCiAgKgpAQCAtMjM0LDcgKzIzNCw3IEBACiAgICAgaWYgKCFJc1dpbmRvdzMyIChod25kU3RhdHVzKSkgcmV0dXJuOwogCiAgICAgc3dpdGNoICh1TXNnKSB7Ci0gICAgICAgIGNhc2UgV01fTUVOVVNFTEVDVDoKKwljYXNlIFdNX01FTlVTRUxFQ1Q6CiAgICAgICAgICAgICBUUkFDRSAoY29tbWN0cmwsICJXTV9NRU5VU0VMRUNUIHdQYXJhbT0weCVYIGxQYXJhbT0weCVsWFxuIiwKICAgICAgICAgICAgICAgICAgICB3UGFyYW0sIGxQYXJhbSk7CiAKQEAgLTI0NSw3ICsyNDUsNiBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKEhJV09SRCh3UGFyYW0pICYgTUZfUE9QVVApIHsKICAgICAgICAgICAgICAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAicG9wdXAgbWVudSBzZWxlY3RlZCFcbiIpOwotICAgICAgICAgICAgICAgICAgICBGSVhNRSAoY29tbWN0cmwsICJubyBwb3B1cCBtZW51IHRleHRzIVxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgc3pTdGF0dXNUZXh0WzBdID0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC0yODEsOCArMjgwLDggQEAKICAgICAgICAgICAgICAgICAgSU5UMzIgZHhCaXRtYXAsIElOVDMyIGR5Qml0bWFwLCBVSU5UMzIgdVN0cnVjdFNpemUpCiB7CiAgICAgSFdORDMyIGh3bmRUQiA9Ci0gICAgICAgIENyZWF0ZVdpbmRvd0V4MzJBKDAsIFRPT0xCQVJDTEFTU05BTUUzMkEsICIiLCBzdHlsZSwgMCwgMCwgMCwgMCwKLQkJCSAgaHduZCwgKEhNRU5VMzIpd0lELCAwLCBOVUxMKTsKKyAgICAgICAgQ3JlYXRlV2luZG93RXgzMkEgKDAsIFRPT0xCQVJDTEFTU05BTUUzMkEsICIiLCBzdHlsZSwgMCwgMCwgMCwgMCwKKwkJCSAgIGh3bmQsIChITUVOVTMyKXdJRCwgMCwgTlVMTCk7CiAgICAgaWYoaHduZFRCKSB7CiAJVEJBRERCSVRNQVAgdGJhYjsKIApAQCAtMzQ4LDM1ICszNDcsMzkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2V0RWZmZWN0aXZlQ2xpZW50UmVjdCBbQ09NQ1RMMzIuNF0KICAqCisgKiBQQVJBTVMKKyAqICAgICBod25kICAgW0ldIGhhbmRsZSB0byB0aGUgY2xpZW50IHdpbmRvdy4KKyAqICAgICBscFJlY3QgW09dIHBvaW50ZXIgdG8gdGhlIHJlY3RhbmdsZSBvZiB0aGUgY2xpZW50IHdpbmRvdworICogICAgIGxwSW5mbyBbSV0gcG9pbnRlciB0byBhbiBhcnJheSBvZiBpbnRlZ2VycwogICoKLSAqCisgKiBOT1RFUwogICovCiAKIFZPSUQgV0lOQVBJCiBHZXRFZmZlY3RpdmVDbGllbnRSZWN0IChIV05EMzIgaHduZCwgTFBSRUNUMzIgbHBSZWN0LCBMUElOVDMyIGxwSW5mbykKIHsKLSAgICBSRUNUMzIgIHJjQ2xpZW50LCByY0N0cmw7Ci0gICAgSFdORDMyICBod25kQ3RybDsKLSAgICBMUElOVDMyIGxwUnVuOworICAgIFJFQ1QzMiByY0NsaWVudCwgcmNDdHJsOworICAgIElOVDMyICBpZEN0cmwsICpscFJ1bjsKIAogICAgIFRSQUNFIChjb21tY3RybCwgImh3bmQ9MHglMDhseCBscFJlY3Q9MHglMDhseCBscEluZm89MHglMDhseFxuIiwKIAkgICAoRFdPUkQpaHduZCwgKERXT1JEKWxwUmVjdCwgKERXT1JEKWxwSW5mbyk7CiAKICAgICBHZXRDbGllbnRSZWN0MzIgKGh3bmQsICZyY0NsaWVudCk7Ci0KKyNpZiAwCiAgICAgbHBSdW4gPSBscEluZm87Ci0gICAgVFJBQ0UgKGNvbW1jdHJsLCAiKmxwUnVuPTB4JTA4eFxuIiwgKmxwUnVuKTsKLSAgICB3aGlsZSAoKmxwUnVuKSB7Ci0JbHBSdW4rKzsKLQlUUkFDRSAoY29tbWN0cmwsICJjb250cm9sIGlkIDB4JTA4eFxuIiwgKmxwUnVuKTsKLQlod25kQ3RybCA9IEdldERsZ0l0ZW0zMiAoaHduZCwgKmxwUnVuKTsKLQlHZXRXaW5kb3dSZWN0MzIgKGh3bmRDdHJsLCAmcmNDdHJsKTsKLQlNYXBXaW5kb3dQb2ludHMzMiAoTlVMTCwgaHduZCwgKExQUE9JTlQzMikmcmNDdHJsLCAyKTsKLQlTdWJ0cmFjdFJlY3QzMiAoJnJjQ2xpZW50LCAmcmNDbGllbnQsICZyY0N0cmwpOwotCWxwUnVuKys7Ci0JVFJBQ0UgKGNvbW1jdHJsLCAiKmxwUnVuPTB4JTA4eFxuIiwgKmxwUnVuKTsKLSAgICB9CiAKKyAgICBkbyB7CisJbHBSdW4gKz0gMzsKKwlpZEN0cmwgPSAqbHBSdW47CisJaWYgKGlkQ3RybCkgeworCSAgICBUUkFDRSAoY29tbWN0cmwsICJjb250cm9sIGlkIDB4JXhcbiIsIGlkQ3RybCk7CisJICAgIEdldFdpbmRvd1JlY3QzMiAoR2V0RGxnSXRlbTMyIChod25kLCBpZEN0cmwpLCAmcmNDdHJsKTsKKwkgICAgTWFwV2luZG93UG9pbnRzMzIgKE5VTEwsIGh3bmQsIChMUFBPSU5UMzIpJnJjQ3RybCwgMik7CisJICAgIFN1YnRyYWN0UmVjdDMyICgmcmNDbGllbnQsICZyY0NsaWVudCwgJnJjQ3RybCk7CisJICAgIGxwUnVuKys7CisJfQorICAgIH0gd2hpbGUgKGlkQ3RybCk7CisjZW5kaWYKICAgICBDb3B5UmVjdDMyIChscFJlY3QsICZyY0NsaWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2VkaXQuYyBiL2NvbnRyb2xzL2VkaXQuYwppbmRleCBkODQwN2JjLi5hY2ZlZjU3IDEwMDY0NAotLS0gYS9jb250cm9scy9lZGl0LmMKKysrIGIvY29udHJvbHMvZWRpdC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNhbGxiYWNrLmgiCisjaW5jbHVkZSAidHdlYWsuaCIKIAogI2RlZmluZSBCVUZMSU1JVF9NVUxUSQkJNjU1MzQJLyogbWF4aW11bSBidWZmZXIgc2l6ZSAobm90IGluY2x1ZGluZyAnXDAnKQogCQkJCQkgICBGSVhNRTogQlRXLCBuZXcgc3BlY3Mgc2F5IDY1NTM1IChkbyB5b3UgZGFyZSA/Pz8pICovCkBAIC0xNzcsNiArMTc4LDcgQEAKIHN0YXRpYyB2b2lkCUVESVRfTW92ZVdvcmRGb3J3YXJkKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBCT09MMzIgZXh0ZW5kKTsKIHN0YXRpYyB2b2lkCUVESVRfUGFpbnRMaW5lKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBIREMzMiBoZGMsIElOVDMyIGxpbmUsIEJPT0wzMiByZXYpOwogc3RhdGljIElOVDMyCUVESVRfUGFpbnRUZXh0KFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBIREMzMiBoZGMsIElOVDMyIHgsIElOVDMyIHksIElOVDMyIGxpbmUsIElOVDMyIGNvbCwgSU5UMzIgY291bnQsIEJPT0wzMiByZXYpOworc3RhdGljIHZvaWQJRURJVF9TZXRDYXJldFBvcyhXTkQgKnduZCwgRURJVFNUQVRFICplcywgSU5UMzIgcG9zLCBCT09MMzIgYWZ0ZXJfd3JhcCk7IAogc3RhdGljIHZvaWQJRURJVF9TZXRSZWN0TlAoV05EICp3bmQsIEVESVRTVEFURSAqZXMsIExQUkVDVDMyIGxwcmMpOwogc3RhdGljIHZvaWQJRURJVF9VbmxvY2tCdWZmZXIoV05EICp3bmQsIEVESVRTVEFURSAqZXMsIEJPT0wzMiBmb3JjZSk7CiBzdGF0aWMgSU5UMzIJRURJVF9Xb3JkQnJlYWtQcm9jKExQU1RSIHMsIElOVDMyIGluZGV4LCBJTlQzMiBjb3VudCwgSU5UMzIgYWN0aW9uKTsKQEAgLTIxNiw3ICsyMTgsNyBAQAogc3RhdGljIHZvaWQJRURJVF9XTV9Db21tYW5kKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBJTlQzMiBjb2RlLCBJTlQzMiBpZCwgSFdORDMyIGNvbnJ0b2wpOwogc3RhdGljIHZvaWQJRURJVF9XTV9Db250ZXh0TWVudShXTkQgKnduZCwgRURJVFNUQVRFICplcywgSFdORDMyIGh3bmQsIElOVDMyIHgsIElOVDMyIHkpOwogc3RhdGljIHZvaWQJRURJVF9XTV9Db3B5KFdORCAqd25kLCBFRElUU1RBVEUgKmVzKTsKLXN0YXRpYyBMUkVTVUxUCUVESVRfV01fQ3JlYXRlKFdORCAqd25kLCBMUENSRUFURVNUUlVDVDMyQSBjcyk7CitzdGF0aWMgTFJFU1VMVAlFRElUX1dNX0NyZWF0ZShXTkQgKnduZCwgRURJVFNUQVRFICplcywgTFBDUkVBVEVTVFJVQ1QzMkEgY3MpOwogc3RhdGljIHZvaWQJRURJVF9XTV9EZXN0cm95KFdORCAqd25kLCBFRElUU1RBVEUgKmVzKTsKIHN0YXRpYyBMUkVTVUxUCUVESVRfV01fRXJhc2VCa0duZChXTkQgKnduZCwgRURJVFNUQVRFICplcywgSERDMzIgZGMpOwogc3RhdGljIElOVDMyCUVESVRfV01fR2V0VGV4dChXTkQgKnduZCwgRURJVFNUQVRFICplcywgSU5UMzIgY291bnQsIExQU1RSIHRleHQpOwpAQCAtMjI3LDYgKzIyOSw3IEBACiBzdGF0aWMgTFJFU1VMVAlFRElUX1dNX0xCdXR0b25Eb3duKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBEV09SRCBrZXlzLCBJTlQzMiB4LCBJTlQzMiB5KTsKIHN0YXRpYyBMUkVTVUxUCUVESVRfV01fTEJ1dHRvblVwKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBEV09SRCBrZXlzLCBJTlQzMiB4LCBJTlQzMiB5KTsKIHN0YXRpYyBMUkVTVUxUCUVESVRfV01fTW91c2VNb3ZlKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBEV09SRCBrZXlzLCBJTlQzMiB4LCBJTlQzMiB5KTsKK3N0YXRpYyBMUkVTVUxUCUVESVRfV01fTkNDcmVhdGUoV05EICp3bmQsIExQQ1JFQVRFU1RSVUNUMzJBIGNzKTsKIHN0YXRpYyB2b2lkCUVESVRfV01fUGFpbnQoV05EICp3bmQsIEVESVRTVEFURSAqZXMpOwogc3RhdGljIHZvaWQJRURJVF9XTV9QYXN0ZShXTkQgKnduZCwgRURJVFNUQVRFICplcyk7CiBzdGF0aWMgdm9pZAlFRElUX1dNX1NldEZvY3VzKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBIV05EMzIgd2luZG93X2xvc2luZ19mb2N1cyk7CkBAIC0zMDUsMTQgKzMwOCwxNCBAQAogCUxSRVNVTFQgcmVzdWx0ID0gMDsKIAogCXN3aXRjaCAobXNnKSB7Ci0JY2FzZSBXTV9DUkVBVEU6Ci0JCURQUklOVEZfRURJVF9NU0czMigiV01fQ1JFQVRFIik7Ci0JCXJldHVybiBFRElUX1dNX0NyZWF0ZSh3bmQsIChMUENSRUFURVNUUlVDVDMyQSlsUGFyYW0pOwotCiAJY2FzZSBXTV9ERVNUUk9ZOgogCQlEUFJJTlRGX0VESVRfTVNHMzIoIldNX0RFU1RST1kiKTsKIAkJRURJVF9XTV9EZXN0cm95KHduZCwgZXMpOwogCQlyZXR1cm4gMDsKKworCWNhc2UgV01fTkNDUkVBVEU6CisJCURQUklOVEZfRURJVF9NU0czMigiV01fTkNDUkVBVEUiKTsKKwkJcmV0dXJuIEVESVRfV01fTkNDcmVhdGUod25kLCAoTFBDUkVBVEVTVFJVQ1QzMkEpbFBhcmFtKTsKIAl9CiAKIAlpZiAoIWVzKQpAQCAtNzE4LDYgKzcyMSwxMSBAQAogCQlFRElUX1dNX0NvcHkod25kLCBlcyk7CiAJCWJyZWFrOwogCisJY2FzZSBXTV9DUkVBVEU6CisJCURQUklOVEZfRURJVF9NU0czMigiV01fQ1JFQVRFIik7CisJCXJlc3VsdCA9IEVESVRfV01fQ3JlYXRlKHduZCwgZXMsIChMUENSRUFURVNUUlVDVDMyQSlsUGFyYW0pOworCQlicmVhazsKKwogCWNhc2UgV01fQ1VUOgogCQlEUFJJTlRGX0VESVRfTVNHMzIoIldNX0NVVCIpOwogCQlFRElUX1dNX0N1dCh3bmQsIGVzKTsKQEAgLTE3MjEsNjcgKzE3MjksMjYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqCUVNX1NDUk9MTENBUkVUCisgKglFRElUX1NldENhcmV0UG9zCiAgKgogICovCi1zdGF0aWMgdm9pZCBFRElUX0VNX1Njcm9sbENhcmV0KFdORCAqd25kLCBFRElUU1RBVEUgKmVzKQorc3RhdGljIHZvaWQgRURJVF9TZXRDYXJldFBvcyhXTkQgKnduZCwgRURJVFNUQVRFICplcywgSU5UMzIgcG9zLAorCQkJICAgICBCT09MMzIgYWZ0ZXJfd3JhcCkKIHsKLQlpZiAoZXMtPnN0eWxlICYgRVNfTVVMVElMSU5FKSB7Ci0JCUlOVDMyIGw7Ci0JCUlOVDMyIGxpOwotCQlJTlQzMiB2bGM7Ci0JCUlOVDMyIHd3OwotCQlJTlQzMiBjdyA9IGVzLT5jaGFyX3dpZHRoOwotCQlJTlQzMiB4OwotCQlJTlQzMiBkeSA9IDA7Ci0JCUlOVDMyIGR4ID0gMDsKKwlMUkVTVUxUIHJlcyA9IEVESVRfRU1fUG9zRnJvbUNoYXIod25kLCBlcywgcG9zLCBhZnRlcl93cmFwKTsKKwlJTlQzMiB4ID0gU0xPV09SRChyZXMpOworCUlOVDMyIHkgPSBTSElXT1JEKHJlcyk7CiAKLQkJbCA9IEVESVRfRU1fTGluZUZyb21DaGFyKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kKTsKLQkJbGkgPSBFRElUX0VNX0xpbmVJbmRleCh3bmQsIGVzLCBsKTsKLQkJeCA9IFNMT1dPUkQoRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgZXMtPmZsYWdzICYgRUZfQUZURVJfV1JBUCkpOwotCQl2bGMgPSAoZXMtPmZvcm1hdF9yZWN0LmJvdHRvbSAtIGVzLT5mb3JtYXRfcmVjdC50b3ApIC8gZXMtPmxpbmVfaGVpZ2h0OwotCQlpZiAobCA+PSBlcy0+eV9vZmZzZXQgKyB2bGMpCi0JCQlkeSA9IGwgLSB2bGMgKyAxIC0gZXMtPnlfb2Zmc2V0OwotCQlpZiAobCA8IGVzLT55X29mZnNldCkKLQkJCWR5ID0gbCAtIGVzLT55X29mZnNldDsKLQkJd3cgPSBlcy0+Zm9ybWF0X3JlY3QucmlnaHQgLSBlcy0+Zm9ybWF0X3JlY3QubGVmdDsKLQkJaWYgKHggPCBlcy0+Zm9ybWF0X3JlY3QubGVmdCkKLQkJCWR4ID0geCAtIGVzLT5mb3JtYXRfcmVjdC5sZWZ0IC0gd3cgLyBIU0NST0xMX0ZSQUNUSU9OIC8gY3cgKiBjdzsKLQkJaWYgKHggPiBlcy0+Zm9ybWF0X3JlY3QucmlnaHQpCi0JCQlkeCA9IHggLSBlcy0+Zm9ybWF0X3JlY3QubGVmdCAtIChIU0NST0xMX0ZSQUNUSU9OIC0gMSkgKiB3dyAvIEhTQ1JPTExfRlJBQ1RJT04gLyBjdyAqIGN3OwotCQlpZiAoZHkgfHwgZHgpCi0JCQlFRElUX0VNX0xpbmVTY3JvbGwod25kLCBlcywgZHgsIGR5KTsKLQl9IGVsc2UgewotCQlJTlQzMiB4OwotCQlJTlQzMiBnb2FsOwotCQlJTlQzMiBmb3JtYXRfd2lkdGg7Ci0KLQkJaWYgKCEoZXMtPnN0eWxlICYgRVNfQVVUT0hTQ1JPTEwpKQotCQkJcmV0dXJuOwotCi0JCXggPSBTTE9XT1JEKEVESVRfRU1fUG9zRnJvbUNoYXIod25kLCBlcywgZXMtPnNlbGVjdGlvbl9lbmQsIEZBTFNFKSk7Ci0JCWZvcm1hdF93aWR0aCA9IGVzLT5mb3JtYXRfcmVjdC5yaWdodCAtIGVzLT5mb3JtYXRfcmVjdC5sZWZ0OwotCQlpZiAoeCA8IGVzLT5mb3JtYXRfcmVjdC5sZWZ0KSB7Ci0JCQlnb2FsID0gZXMtPmZvcm1hdF9yZWN0LmxlZnQgKyBmb3JtYXRfd2lkdGggLyBIU0NST0xMX0ZSQUNUSU9OOwotCQkJZG8gewotCQkJCWVzLT54X29mZnNldC0tOwotCQkJCXggPSBTTE9XT1JEKEVESVRfRU1fUG9zRnJvbUNoYXIod25kLCBlcywgZXMtPnNlbGVjdGlvbl9lbmQsIEZBTFNFKSk7Ci0JCQl9IHdoaWxlICgoeCA8IGdvYWwpICYmIGVzLT54X29mZnNldCk7Ci0JCQkvKiBGSVhNRTogdXNlIFNjcm9sbFdpbmRvdygpIHNvbWVob3cgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSAqLwotCQkJSW52YWxpZGF0ZVJlY3QzMih3bmQtPmh3bmRTZWxmLCBOVUxMLCBUUlVFKTsKLQkJfSBlbHNlIGlmICh4ID4gZXMtPmZvcm1hdF9yZWN0LnJpZ2h0KSB7Ci0JCQlJTlQzMiB4X2xhc3Q7Ci0JCQlJTlQzMiBsZW4gPSBsc3RybGVuMzJBKGVzLT50ZXh0KTsKLQkJCWdvYWwgPSBlcy0+Zm9ybWF0X3JlY3QucmlnaHQgLSBmb3JtYXRfd2lkdGggLyBIU0NST0xMX0ZSQUNUSU9OOwotCQkJZG8gewotCQkJCWVzLT54X29mZnNldCsrOwotCQkJCXggPSBTTE9XT1JEKEVESVRfRU1fUG9zRnJvbUNoYXIod25kLCBlcywgZXMtPnNlbGVjdGlvbl9lbmQsIEZBTFNFKSk7Ci0JCQkJeF9sYXN0ID0gU0xPV09SRChFRElUX0VNX1Bvc0Zyb21DaGFyKHduZCwgZXMsIGxlbiwgRkFMU0UpKTsKLQkJCX0gd2hpbGUgKCh4ID4gZ29hbCkgJiYgKHhfbGFzdCA+IGVzLT5mb3JtYXRfcmVjdC5yaWdodCkpOwotCQkJLyogRklYTUU6IHVzZSBTY3JvbGxXaW5kb3coKSBzb21laG93IHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgKi8KLQkJCUludmFsaWRhdGVSZWN0MzIod25kLT5od25kU2VsZiwgTlVMTCwgVFJVRSk7Ci0JCX0KLQl9CisJaWYoeCA8IGVzLT5mb3JtYXRfcmVjdC5sZWZ0KQorCQl4ID0gZXMtPmZvcm1hdF9yZWN0LmxlZnQ7CisJaWYoeCA+IGVzLT5mb3JtYXRfcmVjdC5yaWdodCAtIDIpCisJCXggPSBlcy0+Zm9ybWF0X3JlY3QucmlnaHQgLSAyOworCWlmKHkgPiBlcy0+Zm9ybWF0X3JlY3QuYm90dG9tKQorCQl5ID0gZXMtPmZvcm1hdF9yZWN0LmJvdHRvbTsKKwlpZih5IDwgZXMtPmZvcm1hdF9yZWN0LnRvcCkKKwkJeSA9IGVzLT5mb3JtYXRfcmVjdC50b3A7CisJU2V0Q2FyZXRQb3MzMih4LCB5KTsKKwlyZXR1cm47CiB9CiAKIApAQCAtMTc5OCw2ICsxNzY1LDggQEAKIAlDb3B5UmVjdDMyKCZlcy0+Zm9ybWF0X3JlY3QsIHJjKTsKIAlpZiAoZXMtPnN0eWxlICYgV1NfQk9SREVSKSB7CiAJCUlOVDMyIGJ3ID0gR2V0U3lzdGVtTWV0cmljczMyKFNNX0NYQk9SREVSKSArIDE7CisJCWlmKCFUV0VBS19XaW45NUxvb2spCisJCQlidyArPSAyOwogCQllcy0+Zm9ybWF0X3JlY3QubGVmdCArPSBidzsKIAkJZXMtPmZvcm1hdF9yZWN0LnRvcCArPSBidzsKIAkJZXMtPmZvcm1hdF9yZWN0LnJpZ2h0IC09IGJ3OwpAQCAtMjQ5Niw2ICsyNDY1LDcyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKglFTV9TQ1JPTExDQVJFVAorICoKKyAqLworc3RhdGljIHZvaWQgRURJVF9FTV9TY3JvbGxDYXJldChXTkQgKnduZCwgRURJVFNUQVRFICplcykKK3sKKwlpZiAoZXMtPnN0eWxlICYgRVNfTVVMVElMSU5FKSB7CisJCUlOVDMyIGw7CisJCUlOVDMyIGxpOworCQlJTlQzMiB2bGM7CisJCUlOVDMyIHd3OworCQlJTlQzMiBjdyA9IGVzLT5jaGFyX3dpZHRoOworCQlJTlQzMiB4OworCQlJTlQzMiBkeSA9IDA7CisJCUlOVDMyIGR4ID0gMDsKKworCQlsID0gRURJVF9FTV9MaW5lRnJvbUNoYXIod25kLCBlcywgZXMtPnNlbGVjdGlvbl9lbmQpOworCQlsaSA9IEVESVRfRU1fTGluZUluZGV4KHduZCwgZXMsIGwpOworCQl4ID0gU0xPV09SRChFRElUX0VNX1Bvc0Zyb21DaGFyKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kLCBlcy0+ZmxhZ3MgJiBFRl9BRlRFUl9XUkFQKSk7CisJCXZsYyA9IChlcy0+Zm9ybWF0X3JlY3QuYm90dG9tIC0gZXMtPmZvcm1hdF9yZWN0LnRvcCkgLyBlcy0+bGluZV9oZWlnaHQ7CisJCWlmIChsID49IGVzLT55X29mZnNldCArIHZsYykKKwkJCWR5ID0gbCAtIHZsYyArIDEgLSBlcy0+eV9vZmZzZXQ7CisJCWlmIChsIDwgZXMtPnlfb2Zmc2V0KQorCQkJZHkgPSBsIC0gZXMtPnlfb2Zmc2V0OworCQl3dyA9IGVzLT5mb3JtYXRfcmVjdC5yaWdodCAtIGVzLT5mb3JtYXRfcmVjdC5sZWZ0OworCQlpZiAoeCA8IGVzLT5mb3JtYXRfcmVjdC5sZWZ0KQorCQkJZHggPSB4IC0gZXMtPmZvcm1hdF9yZWN0LmxlZnQgLSB3dyAvIEhTQ1JPTExfRlJBQ1RJT04gLyBjdyAqIGN3OworCQlpZiAoeCA+IGVzLT5mb3JtYXRfcmVjdC5yaWdodCkKKwkJCWR4ID0geCAtIGVzLT5mb3JtYXRfcmVjdC5sZWZ0IC0gKEhTQ1JPTExfRlJBQ1RJT04gLSAxKSAqIHd3IC8gSFNDUk9MTF9GUkFDVElPTiAvIGN3ICogY3c7CisJCWlmIChkeSB8fCBkeCkKKwkJCUVESVRfRU1fTGluZVNjcm9sbCh3bmQsIGVzLCBkeCwgZHkpOworCX0gZWxzZSB7CisJCUlOVDMyIHg7CisJCUlOVDMyIGdvYWw7CisJCUlOVDMyIGZvcm1hdF93aWR0aDsKKworCQlpZiAoIShlcy0+c3R5bGUgJiBFU19BVVRPSFNDUk9MTCkpCisJCQlyZXR1cm47CisKKwkJeCA9IFNMT1dPUkQoRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgRkFMU0UpKTsKKwkJZm9ybWF0X3dpZHRoID0gZXMtPmZvcm1hdF9yZWN0LnJpZ2h0IC0gZXMtPmZvcm1hdF9yZWN0LmxlZnQ7CisJCWlmICh4IDwgZXMtPmZvcm1hdF9yZWN0LmxlZnQpIHsKKwkJCWdvYWwgPSBlcy0+Zm9ybWF0X3JlY3QubGVmdCArIGZvcm1hdF93aWR0aCAvIEhTQ1JPTExfRlJBQ1RJT047CisJCQlkbyB7CisJCQkJZXMtPnhfb2Zmc2V0LS07CisJCQkJeCA9IFNMT1dPUkQoRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgRkFMU0UpKTsKKwkJCX0gd2hpbGUgKCh4IDwgZ29hbCkgJiYgZXMtPnhfb2Zmc2V0KTsKKwkJCS8qIEZJWE1FOiB1c2UgU2Nyb2xsV2luZG93KCkgc29tZWhvdyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlICovCisJCQlJbnZhbGlkYXRlUmVjdDMyKHduZC0+aHduZFNlbGYsIE5VTEwsIFRSVUUpOworCQl9IGVsc2UgaWYgKHggPiBlcy0+Zm9ybWF0X3JlY3QucmlnaHQpIHsKKwkJCUlOVDMyIHhfbGFzdDsKKwkJCUlOVDMyIGxlbiA9IGxzdHJsZW4zMkEoZXMtPnRleHQpOworCQkJZ29hbCA9IGVzLT5mb3JtYXRfcmVjdC5yaWdodCAtIGZvcm1hdF93aWR0aCAvIEhTQ1JPTExfRlJBQ1RJT047CisJCQlkbyB7CisJCQkJZXMtPnhfb2Zmc2V0Kys7CisJCQkJeCA9IFNMT1dPUkQoRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgRkFMU0UpKTsKKwkJCQl4X2xhc3QgPSBTTE9XT1JEKEVESVRfRU1fUG9zRnJvbUNoYXIod25kLCBlcywgbGVuLCBGQUxTRSkpOworCQkJfSB3aGlsZSAoKHggPiBnb2FsKSAmJiAoeF9sYXN0ID4gZXMtPmZvcm1hdF9yZWN0LnJpZ2h0KSk7CisJCQkvKiBGSVhNRTogdXNlIFNjcm9sbFdpbmRvdygpIHNvbWVob3cgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSAqLworCQkJSW52YWxpZGF0ZVJlY3QzMih3bmQtPmh3bmRTZWxmLCBOVUxMLCBUUlVFKTsKKwkJfQorCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICoJRU1fU0VUSEFORExFCiAgKgogICoJRklYTUU6CUVTX0xPV0VSQ0FTRSwgRVNfVVBQRVJDQVNFLCBFU19PRU1DT05WRVJULCBFU19OVU1CRVIgPz8/CkBAIC0yNjA3LDI0ICsyNjQyLDMzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJRU1fU0VUTUFSR0lOUworICogCisgKiBFQ19VU0VGT05USU5GTyBpcyB1c2VkIGFzIGEgbGVmdCBvciByaWdodCB2YWx1ZSBpLmUuIGxQYXJhbSBhbmQgbm90IGFzIGFuCisgKiBhY3Rpb24gd1BhcmFtIGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkuIEl0IGFsc28gYXBwZWFycyBub3QgdG8gYWZmZWN0CisgKiBtdWx0aWxpbmUgY29udHJvbHM/PwogICoKICAqLwotc3RhdGljIHZvaWQgRURJVF9FTV9TZXRNYXJnaW5zKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBJTlQzMiBhY3Rpb24sIElOVDMyIGxlZnQsIElOVDMyIHJpZ2h0KQorc3RhdGljIHZvaWQgRURJVF9FTV9TZXRNYXJnaW5zKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBJTlQzMiBhY3Rpb24sCisJCQkgICAgICAgSU5UMzIgbGVmdCwgSU5UMzIgcmlnaHQpCiB7Ci0JaWYgKGFjdGlvbiAmIEVDX1VTRUZPTlRJTkZPKSB7Ci0JCWlmIChlcy0+c3R5bGUgJiBFU19NVUxUSUxJTkUpIHsKLQkJCS8qCi0JCQkgKglGSVhNRTogZG8gc29tZSBHZXRBQkNDaGFyV2lkdGgsIG9yIHNvCi0JCQkgKgkJVGhpcyBpcyBqdXN0IHByZWxpbWluYXJ5Ci0JCQkgKi8KLQkJCWVzLT5sZWZ0X21hcmdpbiA9IGVzLT5yaWdodF9tYXJnaW4gPSBlcy0+Y2hhcl93aWR0aC80OwotCQl9IGVsc2UKLQkJCWVzLT5sZWZ0X21hcmdpbiA9IGVzLT5yaWdodF9tYXJnaW4gPSBlcy0+Y2hhcl93aWR0aC80OwotCX0gZWxzZSB7Ci0JCWlmIChhY3Rpb24gJiBFQ19MRUZUTUFSR0lOKQorCWlmIChhY3Rpb24gJiBFQ19MRUZUTUFSR0lOKSB7CisJCWlmIChsZWZ0ICE9IEVDX1VTRUZPTlRJTkZPKQogCQkJZXMtPmxlZnRfbWFyZ2luID0gbGVmdDsKLQkJaWYgKGFjdGlvbiAmIEVDX1JJR0hUTUFSR0lOKQotCQkJZXMtPnJpZ2h0X21hcmdpbiA9IHJpZ2h0OworCQllbHNlCisJCQlpZiAoZXMtPnN0eWxlICYgRVNfTVVMVElMSU5FKQorCQkJCWVzLT5sZWZ0X21hcmdpbiA9IDA7IC8qID8/ICovCisJCQllbHNlCisJCQkgIGVzLT5sZWZ0X21hcmdpbiA9IGVzLT5jaGFyX3dpZHRoOworCX0KKworCWlmIChhY3Rpb24gJiBFQ19SSUdIVE1BUkdJTikgeworCQlpZiAocmlnaHQgIT0gRUNfVVNFRk9OVElORk8pCisgCQkJZXMtPnJpZ2h0X21hcmdpbiA9IHJpZ2h0OworCQllbHNlCisJCQlpZiAoZXMtPnN0eWxlICYgRVNfTVVMVElMSU5FKQorCQkJCWVzLT5yaWdodF9tYXJnaW4gPSAwOyAvKiA/PyAqLworCQkJZWxzZQorCQkJCWVzLT5yaWdodF9tYXJnaW4gPSBlcy0+Y2hhcl93aWR0aDsKIAl9CiAJVFJBQ0UoZWRpdCwgImxlZnQ9JWQsIHJpZ2h0PSVkXG4iLCBlcy0+bGVmdF9tYXJnaW4sIGVzLT5yaWdodF9tYXJnaW4pOwogfQpAQCAtMjY4MywxMCArMjcyNyw4IEBACiAJCWVzLT5mbGFncyB8PSBFRl9BRlRFUl9XUkFQOwogCWVsc2UKIAkJZXMtPmZsYWdzICY9IH5FRl9BRlRFUl9XUkFQOwotCWlmIChlcy0+ZmxhZ3MgJiBFRl9GT0NVU0VEKSB7Ci0JCUxSRVNVTFQgcG9zID0gRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlbmQsIGFmdGVyX3dyYXApOwotCQlTZXRDYXJldFBvczMyKFNMT1dPUkQocG9zKSwgU0hJV09SRChwb3MpKTsKLQl9CisJaWYgKGVzLT5mbGFncyAmIEVGX0ZPQ1VTRUQpCisJCUVESVRfU2V0Q2FyZXRQb3Mod25kLCBlcywgZW5kLCBhZnRlcl93cmFwKTsKIC8qIFRoaXMgaXMgbGl0dGxlICBiaXQgbW9yZSBlZmZpY2llbnQgdGhhbiBiZWZvcmUsIG5vdCBzdXJlIGlmIGl0IGNhbiBiZSBpbXByb3ZlZC4gRklYTUU/ICovCiAgICAgICAgIE9SREVSX1VJTlQzMihzdGFydCwgZW5kKTsKICAgICAgICAgT1JERVJfVUlOVDMyKGVuZCwgb2xkX2VuZCk7CkBAIC0yOTc2LDcwICszMDE4LDggQEAKICAqCVdNX0NSRUFURQogICoKICAqLwotc3RhdGljIExSRVNVTFQgRURJVF9XTV9DcmVhdGUoV05EICp3bmQsIExQQ1JFQVRFU1RSVUNUMzJBIGNzKQorc3RhdGljIExSRVNVTFQgRURJVF9XTV9DcmVhdGUoV05EICp3bmQsIEVESVRTVEFURSAqZXMsIExQQ1JFQVRFU1RSVUNUMzJBIGNzKQogewotCUVESVRTVEFURSAqZXM7Ci0KLQlpZiAoIShlcyA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoKmVzKSkpKQotCQlyZXR1cm4gLTE7Ci0JKihFRElUU1RBVEUgKiopd25kLT53RXh0cmEgPSBlczsKLQlpZiAoIShlcy0+aGVhcCA9IEhlYXBDcmVhdGUoMCwgMHgxMDAwMCwgMCkpKQotCQlyZXR1cm4gLTE7Ci0JZXMtPnN0eWxlID0gY3MtPnN0eWxlOwotCi0JLyogcmVtb3ZlIHRoZSBXU19DQVBUSU9OIHN0eWxlIGlmIGl0IGhhcyBiZWVuIHNldCAtIHRoaXMgaXMgcmVhbGx5IGEgICovCi0JLyogcHNldWRvIG9wdGlvbiBtYWRlIGZyb20gYSBjb21iaW5hdGlvbiBvZiBXU19CT1JERVIgYW5kIFdTX0RMR0ZSQU1FICovCi0JaWYgKChlcy0+c3R5bGUgJiBXU19CT1JERVIpICYmIChlcy0+c3R5bGUgJiBXU19ETEdGUkFNRSkpCi0JCWVzLT5zdHlsZSBePSBXU19ETEdGUkFNRTsKLQotCWlmIChlcy0+c3R5bGUgJiBFU19NVUxUSUxJTkUpIHsKLQkJZXMtPmJ1ZmZlcl9zaXplID0gQlVGU1RBUlRfTVVMVEk7Ci0JCWVzLT5idWZmZXJfbGltaXQgPSBCVUZMSU1JVF9NVUxUSTsKLQkJaWYgKGVzLT5zdHlsZSAmIFdTX1ZTQ1JPTEwpCi0JCQllcy0+c3R5bGUgfD0gRVNfQVVUT1ZTQ1JPTEw7Ci0JCWlmIChlcy0+c3R5bGUgJiBXU19IU0NST0xMKQotCQkJZXMtPnN0eWxlIHw9IEVTX0FVVE9IU0NST0xMOwotCQllcy0+c3R5bGUgJj0gfkVTX1BBU1NXT1JEOwotCQlpZiAoKGVzLT5zdHlsZSAmIEVTX0NFTlRFUikgfHwgKGVzLT5zdHlsZSAmIEVTX1JJR0hUKSkgewotCQkJaWYgKGVzLT5zdHlsZSAmIEVTX1JJR0hUKQotCQkJCWVzLT5zdHlsZSAmPSB+RVNfQ0VOVEVSOwotCQkJZXMtPnN0eWxlICY9IH5XU19IU0NST0xMOwotCQkJZXMtPnN0eWxlICY9IH5FU19BVVRPSFNDUk9MTDsKLQkJfQotCi0JCS8qIEZJWE1FOiBmb3Igbm93LCBhbGwgbXVsdGkgbGluZSBjb250cm9scyBhcmUgQVVUT1ZTQ1JPTEwgKi8KLQkJZXMtPnN0eWxlIHw9IEVTX0FVVE9WU0NST0xMOwotCX0gZWxzZSB7Ci0JCWVzLT5idWZmZXJfc2l6ZSA9IEJVRlNUQVJUX1NJTkdMRTsKLQkJZXMtPmJ1ZmZlcl9saW1pdCA9IEJVRkxJTUlUX1NJTkdMRTsKLQkJZXMtPnN0eWxlICY9IH5FU19DRU5URVI7Ci0JCWVzLT5zdHlsZSAmPSB+RVNfUklHSFQ7Ci0JCWVzLT5zdHlsZSAmPSB+V1NfSFNDUk9MTDsKLQkJZXMtPnN0eWxlICY9IH5XU19WU0NST0xMOwotCQllcy0+c3R5bGUgJj0gfkVTX0FVVE9WU0NST0xMOwotCQllcy0+c3R5bGUgJj0gfkVTX1dBTlRSRVRVUk47Ci0JCWlmIChlcy0+c3R5bGUgJiBFU19VUFBFUkNBU0UpIHsKLQkJCWVzLT5zdHlsZSAmPSB+RVNfTE9XRVJDQVNFOwotCQkJZXMtPnN0eWxlICY9IH5FU19OVU1CRVI7Ci0JCX0gZWxzZSBpZiAoZXMtPnN0eWxlICYgRVNfTE9XRVJDQVNFKQotCQkJZXMtPnN0eWxlICY9IH5FU19OVU1CRVI7Ci0JCWlmIChlcy0+c3R5bGUgJiBFU19QQVNTV09SRCkKLQkJCWVzLT5wYXNzd29yZF9jaGFyID0gJyonOwotCi0JCS8qIEZJWE1FOiBmb3Igbm93LCBhbGwgc2luZ2xlIGxpbmUgY29udHJvbHMgYXJlIEFVVE9IU0NST0xMICovCi0JCWVzLT5zdHlsZSB8PSBFU19BVVRPSFNDUk9MTDsKLQl9Ci0JaWYgKCEoZXMtPnRleHQgPSBIZWFwQWxsb2MoZXMtPmhlYXAsIDAsIGVzLT5idWZmZXJfc2l6ZSArIDEpKSkKLQkJcmV0dXJuIC0xOwotCWVzLT5idWZmZXJfc2l6ZSA9IEhlYXBTaXplKGVzLT5oZWFwLCAwLCBlcy0+dGV4dCkgLSAxOwotCWlmICghKGVzLT51bmRvX3RleHQgPSBIZWFwQWxsb2MoZXMtPmhlYXAsIDAsIGVzLT5idWZmZXJfc2l6ZSArIDEpKSkKLQkJcmV0dXJuIC0xOwotCWVzLT51bmRvX2J1ZmZlcl9zaXplID0gSGVhcFNpemUoZXMtPmhlYXAsIDAsIGVzLT51bmRvX3RleHQpIC0gMTsKLQkqZXMtPnRleHQgPSAnXDAnOwotCWlmIChlcy0+c3R5bGUgJiBFU19NVUxUSUxJTkUpCi0JCWlmICghKGVzLT5maXJzdF9saW5lX2RlZiA9IEhlYXBBbGxvYyhlcy0+aGVhcCwgSEVBUF9aRVJPX01FTU9SWSwgc2l6ZW9mKExJTkVERUYpKSkpCi0JCQlyZXR1cm4gLTE7Ci0JZXMtPmxpbmVfY291bnQgPSAxOwogCS8qCiAJICoJVG8gaW5pdGlhbGl6ZSBzb21lIGZpbmFsIHN0cnVjdHVyZSBtZW1iZXJzLCB3ZSBjYWxsIHNvbWUgaGVscGVyCiAJICoJZnVuY3Rpb25zLiAgSG93ZXZlciwgc2luY2UgdGhlIEVESVRTVEFURSBpcyBub3QgY29uc2lzdGVudCAoaS5lLgpAQCAtMzU0Nyw2ICszNTI3LDc4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKglXTV9OQ0NSRUFURQorICoKKyAqLworc3RhdGljIExSRVNVTFQgRURJVF9XTV9OQ0NyZWF0ZShXTkQgKnduZCwgTFBDUkVBVEVTVFJVQ1QzMkEgY3MpCit7CisJRURJVFNUQVRFICplczsKKworCWlmICghKGVzID0gSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIEhFQVBfWkVST19NRU1PUlksIHNpemVvZigqZXMpKSkpCisJCXJldHVybiBGQUxTRTsKKwkqKEVESVRTVEFURSAqKil3bmQtPndFeHRyYSA9IGVzOworCWlmICghKGVzLT5oZWFwID0gSGVhcENyZWF0ZSgwLCAweDEwMDAwLCAwKSkpCisJCXJldHVybiBGQUxTRTsKKwllcy0+c3R5bGUgPSBjcy0+c3R5bGU7CisKKwlpZiAoKGVzLT5zdHlsZSAmIFdTX0JPUkRFUikgJiYgIShlcy0+c3R5bGUgJiBXU19ETEdGUkFNRSkpCisJCVNldFdpbmRvd0xvbmczMkEod25kLT5od25kU2VsZiwgR1dMX1NUWUxFLCAKKwkJCQllcy0+c3R5bGUgJiB+V1NfQk9SREVSKTsKKworCWlmIChlcy0+c3R5bGUgJiBFU19NVUxUSUxJTkUpIHsKKwkJZXMtPmJ1ZmZlcl9zaXplID0gQlVGU1RBUlRfTVVMVEk7CisJCWVzLT5idWZmZXJfbGltaXQgPSBCVUZMSU1JVF9NVUxUSTsKKwkJaWYgKGVzLT5zdHlsZSAmIFdTX1ZTQ1JPTEwpCisJCQllcy0+c3R5bGUgfD0gRVNfQVVUT1ZTQ1JPTEw7CisJCWlmIChlcy0+c3R5bGUgJiBXU19IU0NST0xMKQorCQkJZXMtPnN0eWxlIHw9IEVTX0FVVE9IU0NST0xMOworCQllcy0+c3R5bGUgJj0gfkVTX1BBU1NXT1JEOworCQlpZiAoKGVzLT5zdHlsZSAmIEVTX0NFTlRFUikgfHwgKGVzLT5zdHlsZSAmIEVTX1JJR0hUKSkgeworCQkJaWYgKGVzLT5zdHlsZSAmIEVTX1JJR0hUKQorCQkJCWVzLT5zdHlsZSAmPSB+RVNfQ0VOVEVSOworCQkJZXMtPnN0eWxlICY9IH5XU19IU0NST0xMOworCQkJZXMtPnN0eWxlICY9IH5FU19BVVRPSFNDUk9MTDsKKwkJfQorCisJCS8qIEZJWE1FOiBmb3Igbm93LCBhbGwgbXVsdGkgbGluZSBjb250cm9scyBhcmUgQVVUT1ZTQ1JPTEwgKi8KKwkJZXMtPnN0eWxlIHw9IEVTX0FVVE9WU0NST0xMOworCX0gZWxzZSB7CisJCWVzLT5idWZmZXJfc2l6ZSA9IEJVRlNUQVJUX1NJTkdMRTsKKwkJZXMtPmJ1ZmZlcl9saW1pdCA9IEJVRkxJTUlUX1NJTkdMRTsKKwkJZXMtPnN0eWxlICY9IH5FU19DRU5URVI7CisJCWVzLT5zdHlsZSAmPSB+RVNfUklHSFQ7CisJCWVzLT5zdHlsZSAmPSB+V1NfSFNDUk9MTDsKKwkJZXMtPnN0eWxlICY9IH5XU19WU0NST0xMOworCQllcy0+c3R5bGUgJj0gfkVTX0FVVE9WU0NST0xMOworCQllcy0+c3R5bGUgJj0gfkVTX1dBTlRSRVRVUk47CisJCWlmIChlcy0+c3R5bGUgJiBFU19VUFBFUkNBU0UpIHsKKwkJCWVzLT5zdHlsZSAmPSB+RVNfTE9XRVJDQVNFOworCQkJZXMtPnN0eWxlICY9IH5FU19OVU1CRVI7CisJCX0gZWxzZSBpZiAoZXMtPnN0eWxlICYgRVNfTE9XRVJDQVNFKQorCQkJZXMtPnN0eWxlICY9IH5FU19OVU1CRVI7CisJCWlmIChlcy0+c3R5bGUgJiBFU19QQVNTV09SRCkKKwkJCWVzLT5wYXNzd29yZF9jaGFyID0gJyonOworCisJCS8qIEZJWE1FOiBmb3Igbm93LCBhbGwgc2luZ2xlIGxpbmUgY29udHJvbHMgYXJlIEFVVE9IU0NST0xMICovCisJCWVzLT5zdHlsZSB8PSBFU19BVVRPSFNDUk9MTDsKKwl9CisJaWYgKCEoZXMtPnRleHQgPSBIZWFwQWxsb2MoZXMtPmhlYXAsIDAsIGVzLT5idWZmZXJfc2l6ZSArIDEpKSkKKwkJcmV0dXJuIEZBTFNFOworCWVzLT5idWZmZXJfc2l6ZSA9IEhlYXBTaXplKGVzLT5oZWFwLCAwLCBlcy0+dGV4dCkgLSAxOworCWlmICghKGVzLT51bmRvX3RleHQgPSBIZWFwQWxsb2MoZXMtPmhlYXAsIDAsIGVzLT5idWZmZXJfc2l6ZSArIDEpKSkKKwkJcmV0dXJuIEZBTFNFOworCWVzLT51bmRvX2J1ZmZlcl9zaXplID0gSGVhcFNpemUoZXMtPmhlYXAsIDAsIGVzLT51bmRvX3RleHQpIC0gMTsKKwkqZXMtPnRleHQgPSAnXDAnOworCWlmIChlcy0+c3R5bGUgJiBFU19NVUxUSUxJTkUpCisJCWlmICghKGVzLT5maXJzdF9saW5lX2RlZiA9IEhlYXBBbGxvYyhlcy0+aGVhcCwgSEVBUF9aRVJPX01FTU9SWSwgc2l6ZW9mKExJTkVERUYpKSkpCisJCQlyZXR1cm4gRkFMU0U7CisJZXMtPmxpbmVfY291bnQgPSAxOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKglXTV9QQUlOVAogICoKICAqLwpAQCAtMzU1OSw3ICszNjExLDYgQEAKIAlSRUNUMzIgcmM7CiAJUkVDVDMyIHJjTGluZTsKIAlSRUNUMzIgcmNSZ247Ci0gCUxSRVNVTFQgcG9zOwogCUJPT0wzMiByZXYgPSBJc1dpbmRvd0VuYWJsZWQzMih3bmQtPmh3bmRTZWxmKSAmJgogCQkJCSgoZXMtPmZsYWdzICYgRUZfRk9DVVNFRCkgfHwKIAkJCQkJKGVzLT5zdHlsZSAmIEVTX05PSElERVNFTCkpOwpAQCAtMzU2OCw2ICszNjE5LDE0IEBACiAJCUVESVRfTk9USUZZX1BBUkVOVCh3bmQsIEVOX1VQREFURSwgIkVOX1VQREFURSIpOwogCiAJZGMgPSBCZWdpblBhaW50MzIod25kLT5od25kU2VsZiwgJnBzKTsKKwlpZihlcy0+c3R5bGUgJiBXU19CT1JERVIpIHsKKwkJR2V0Q2xpZW50UmVjdDMyKHduZC0+aHduZFNlbGYsICZyYyk7CisJCWlmKGVzLT5zdHlsZSAmIEVTX01VTFRJTElORSkgeworCQkJaWYoZXMtPnN0eWxlICYgV1NfSFNDUk9MTCkgcmMuYm90dG9tKys7CisJCQlpZihlcy0+c3R5bGUgJiBXU19WU0NST0xMKSByYy5yaWdodCsrOworCQl9CisJCVJlY3RhbmdsZTMyKGRjLCByYy5sZWZ0LCByYy50b3AsIHJjLnJpZ2h0LCByYy5ib3R0b20pOworCX0KIAlJbnRlcnNlY3RDbGlwUmVjdDMyKGRjLCBlcy0+Zm9ybWF0X3JlY3QubGVmdCwKIAkJCQllcy0+Zm9ybWF0X3JlY3QudG9wLAogCQkJCWVzLT5mb3JtYXRfcmVjdC5yaWdodCwKQEAgLTM1OTYsMTAgKzM2NTUsOSBAQAogCX0KIAlpZiAoZXMtPmZvbnQpCiAJCVNlbGVjdE9iamVjdDMyKGRjLCBvbGRfZm9udCk7Ci0JaWYgKGVzLT5mbGFncyAmIEVGX0ZPQ1VTRUQpIHsKLQkJcG9zID0gRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgZXMtPmZsYWdzICYgRUZfQUZURVJfV1JBUCk7Ci0JCVNldENhcmV0UG9zMzIoU0xPV09SRChwb3MpLCBTSElXT1JEKHBvcykpOwotCX0KKwlpZiAoZXMtPmZsYWdzICYgRUZfRk9DVVNFRCkKKwkJRURJVF9TZXRDYXJldFBvcyh3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwKKwkJCQkgZXMtPmZsYWdzICYgRUZfQUZURVJfV1JBUCk7CiAJRW5kUGFpbnQzMih3bmQtPmh3bmRTZWxmLCAmcHMpOwogCWlmICgoZXMtPnN0eWxlICYgV1NfVlNDUk9MTCkgJiYgIShlcy0+ZmxhZ3MgJiBFRl9WU0NST0xMX1RSQUNLKSkgewogCQlJTlQzMiB2bGMgPSAoZXMtPmZvcm1hdF9yZWN0LmJvdHRvbSAtIGVzLT5mb3JtYXRfcmVjdC50b3ApIC8gZXMtPmxpbmVfaGVpZ2h0OwpAQCAtMzY2MSwxMiArMzcxOSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBFRElUX1dNX1NldEZvY3VzKFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBIV05EMzIgd2luZG93X2xvc2luZ19mb2N1cykKIHsKLQlMUkVTVUxUIHBvczsKLQogCWVzLT5mbGFncyB8PSBFRl9GT0NVU0VEOwogCUNyZWF0ZUNhcmV0MzIod25kLT5od25kU2VsZiwgMCwgMiwgZXMtPmxpbmVfaGVpZ2h0KTsKLQlwb3MgPSBFRElUX0VNX1Bvc0Zyb21DaGFyKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kLCBlcy0+ZmxhZ3MgJiBFRl9BRlRFUl9XUkFQKTsKLQlTZXRDYXJldFBvczMyKFNMT1dPUkQocG9zKSwgU0hJV09SRChwb3MpKTsKKwlFRElUX1NldENhcmV0UG9zKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kLAorCQkJIGVzLT5mbGFncyAmIEVGX0FGVEVSX1dSQVApOwogCWlmKCEoZXMtPnN0eWxlICYgRVNfTk9ISURFU0VMKSkKIAkJRURJVF9JbnZhbGlkYXRlVGV4dCh3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX3N0YXJ0LCBlcy0+c2VsZWN0aW9uX2VuZCk7CiAJU2hvd0NhcmV0MzIod25kLT5od25kU2VsZik7CkBAIC0zNjc4LDYgKzM3MzQsMTAgQEAKICAqCiAgKglXTV9TRVRGT05UCiAgKgorICogV2l0aCBXaW45NSBsb29rIHRoZSBtYXJnaW5zIGFyZSBzZXQgdG8gZGVmYXVsdCBmb250IHZhbHVlIHVubGVzcyAKKyAqIHRoZSBzeXN0ZW0gZm9udCAoZm9udCA9PSAwKSBpcyBiZWluZyBzZXQsIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgbGVmdAorICogdW5jaGFuZ2VkLgorICoKICAqLwogc3RhdGljIHZvaWQgRURJVF9XTV9TZXRGb250KFdORCAqd25kLCBFRElUU1RBVEUgKmVzLCBIRk9OVDMyIGZvbnQsIEJPT0wzMiByZWRyYXcpCiB7CkBAIC0zNjk1LDE4ICszNzU1LDIzIEBACiAJaWYgKGZvbnQpCiAJCVNlbGVjdE9iamVjdDMyKGRjLCBvbGRfZm9udCk7CiAJUmVsZWFzZURDMzIod25kLT5od25kU2VsZiwgZGMpOwotCWlmICh3bmQtPmZsYWdzICYgV0lOX0lTV0lOMzIpCi0JCUVESVRfRU1fU2V0TWFyZ2lucyh3bmQsIGVzLCBFQ19VU0VGT05USU5GTywgMCwgMCk7CisJaWYgKGZvbnQgJiBUV0VBS19XaW45NUxvb2spCisJCUVESVRfRU1fU2V0TWFyZ2lucyh3bmQsIGVzLCBFQ19MRUZUTUFSR0lOIHwgRUNfUklHSFRNQVJHSU4sCisJCQkJICAgRUNfVVNFRk9OVElORk8sIEVDX1VTRUZPTlRJTkZPKTsKIAlpZiAoZXMtPnN0eWxlICYgRVNfTVVMVElMSU5FKQogCQlFRElUX0J1aWxkTGluZURlZnNfTUwod25kLCBlcyk7CisJZWxzZSB7CisJCVJFQ1QzMiByOworCQlHZXRDbGllbnRSZWN0MzIod25kLT5od25kU2VsZiwgJnIpOworCQlFRElUX1NldFJlY3ROUCh3bmQsIGVzLCAmcik7CisJfQogCWlmIChyZWRyYXcpCiAJCUludmFsaWRhdGVSZWN0MzIod25kLT5od25kU2VsZiwgTlVMTCwgVFJVRSk7CiAJaWYgKGVzLT5mbGFncyAmIEVGX0ZPQ1VTRUQpIHsKLQkJTFJFU1VMVCBwb3M7CiAJCURlc3Ryb3lDYXJldDMyKCk7CiAJCUNyZWF0ZUNhcmV0MzIod25kLT5od25kU2VsZiwgMCwgMiwgZXMtPmxpbmVfaGVpZ2h0KTsKLQkJcG9zID0gRURJVF9FTV9Qb3NGcm9tQ2hhcih3bmQsIGVzLCBlcy0+c2VsZWN0aW9uX2VuZCwgZXMtPmZsYWdzICYgRUZfQUZURVJfV1JBUCk7Ci0JCVNldENhcmV0UG9zMzIoU0xPV09SRChwb3MpLCBTSElXT1JEKHBvcykpOworCQlFRElUX1NldENhcmV0UG9zKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kLAorCQkJCSBlcy0+ZmxhZ3MgJiBFRl9BRlRFUl9XUkFQKTsKIAkJU2hvd0NhcmV0MzIod25kLT5od25kU2VsZik7CiAJfQogfQpAQCAtMzcyMywxMCArMzc4OCwxNCBAQAogCWlmICh0ZXh0KSB7CiAJCVRSQUNFKGVkaXQsICJcdCclcydcbiIsIHRleHQpOwogCQlFRElUX0VNX1JlcGxhY2VTZWwod25kLCBlcywgRkFMU0UsIHRleHQpOwotCQllcy0+eF9vZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCVRSQUNFKGVkaXQsICJcdDxOVUxMPlxuIik7CisJCUVESVRfRU1fUmVwbGFjZVNlbCh3bmQsIGVzLCBGQUxTRSwgIiIpOwogCX0KKwllcy0+eF9vZmZzZXQgPSAwOwogCWVzLT5mbGFncyB8PSBFRl9NT0RJRklFRDsKIAllcy0+ZmxhZ3MgfD0gRUZfVVBEQVRFOworCUVESVRfRU1fU2V0U2VsKHduZCwgZXMsIDAsIDAsIEZBTFNFKTsKIAlFRElUX0VNX1Njcm9sbENhcmV0KHduZCwgZXMpOwogfQogCmRpZmYgLS1naXQgYS9jb250cm9scy9oZWFkZXIuYyBiL2NvbnRyb2xzL2hlYWRlci5jCmluZGV4IDE4YmJmYWEuLjFlNzA5N2FhIDEwMDY0NAotLS0gYS9jb250cm9scy9oZWFkZXIuYworKysgYi9jb250cm9scy9oZWFkZXIuYwpAQCAtNiw3ICs2LDYgQEAKICAqICBUT0RPOgogICogICAtIEltYWdlbGlzdCBzdXBwb3J0IChwYXJ0aWFsbHkpLgogICogICAtIENhbGxiYWNrIGl0ZW1zLgotICogICAtIE93bmVyIGRyYXcgc3VwcG9ydC4KICAqICAgLSBPcmRlciBsaXN0IHN1cHBvcnQuCiAgKiAgIC0gQ29udHJvbCBzcGVjaWZpYyBjdXJzb3JzIChvdmVyIGRpdmlkZXJzKS4KICAqICAgLSBIb3R0cmFjayBzdXBwb3J0IChwYXJ0aWFsbHkpLgpAQCAtMzgsOCArMzcsMTAgQEAKIAogCiBzdGF0aWMgSU5UMzIKLUhFQURFUl9EcmF3SXRlbSAoV05EICp3bmRQdHIsIEhEQzMyIGhkYywgSEVBREVSX0lURU0gKnBoZGksIEJPT0wzMiBiSG90VHJhY2spCitIRUFERVJfRHJhd0l0ZW0gKFdORCAqd25kUHRyLCBIREMzMiBoZGMsIElOVDMyIGlJdGVtLCBCT09MMzIgYkhvdFRyYWNrKQogeworICAgIEhFQURFUl9JTkZPICppbmZvUHRyID0gSEVBREVSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBIRUFERVJfSVRFTSAqcGhkaSA9ICZpbmZvUHRyLT5pdGVtc1tpSXRlbV07CiAgICAgUkVDVDMyIHI7CiAgICAgSU5UMzIgIG9sZEJrTW9kZTsKIApAQCAtNjIsNyArNjMsMTggQEAKICAgICAgICAgRHJhd0VkZ2UzMiAoaGRjLCAmciwgRURHRV9FVENIRUQsIEJGX0JPVFRPTSB8IEJGX1JJR0hUIHwgQkZfQURKVVNUKTsKIAogICAgIGlmIChwaGRpLT5mbXQgJiBIREZfT1dORVJEUkFXKSB7Ci0gICAgICAgIC8qIEZJWE1FOiBvd25lciBkcmF3biBpdGVtcyAqLworCURSQVdJVEVNU1RSVUNUMzIgZGlzOworCWRpcy5DdGxUeXBlICAgID0gT0RUX0hFQURFUjsKKwlkaXMuQ3RsSUQgICAgICA9IHduZFB0ci0+d0lEbWVudTsKKwlkaXMuaXRlbUlEICAgICA9IGlJdGVtOworCWRpcy5pdGVtQWN0aW9uID0gT0RBX0RSQVdFTlRJUkU7CisJZGlzLml0ZW1TdGF0ZSAgPSBwaGRpLT5iRG93biA/IE9EU19TRUxFQ1RFRCA6IDA7CisJZGlzLmh3bmRJdGVtICAgPSB3bmRQdHItPmh3bmRTZWxmOworCWRpcy5oREMgICAgICAgID0gaGRjOworCWRpcy5yY0l0ZW0gICAgID0gcjsKKwlkaXMuaXRlbURhdGEgICA9IHBoZGktPmxQYXJhbTsKKwlTZW5kTWVzc2FnZTMyQSAoR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpLCBXTV9EUkFXSVRFTSwKKwkJCShXUEFSQU0zMil3bmRQdHItPndJRG1lbnUsIChMUEFSQU0pJmRpcyk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBVSU5UMzIgdVRleHRKdXN0aWZ5ID0gRFRfTEVGVDsKQEAgLTE2MSw3ICsxNzMsNiBAQAogCX0KIAogCWlmIChwaGRpLT5mbXQgJiBIREZfSU1BR0UpIHsKLQkgICAgSEVBREVSX0lORk8gKmluZm9QdHIgPSBIRUFERVJfR2V0SW5mb1B0cih3bmRQdHIpOwogCiAKIC8vCSAgICBJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbCwgcGhkaS0+aUltYWdlLC4uLik7CkBAIC0yMDMsNyArMjE0LDcgQEAKIAogICAgIHggPSByZWN0LmxlZnQ7CiAgICAgZm9yIChpID0gMDsgaSA8IGluZm9QdHItPnVOdW1JdGVtOyBpKyspIHsKLSAgICAgICAgeCA9IEhFQURFUl9EcmF3SXRlbSAod25kUHRyLCBoZGMsICZpbmZvUHRyLT5pdGVtc1tpXSwgRkFMU0UpOworICAgICAgICB4ID0gSEVBREVSX0RyYXdJdGVtICh3bmRQdHIsIGhkYywgaSwgRkFMU0UpOwogICAgIH0KIAogICAgIGlmICgoeCA8PSByZWN0LnJpZ2h0KSAmJiAoaW5mb1B0ci0+dU51bUl0ZW0gPiAwKSkgewpAQCAtMjE5LDE0ICsyMzAsMTQgQEAKIAogCiBzdGF0aWMgdm9pZAotSEVBREVSX1JlZnJlc2hJdGVtIChXTkQgKnduZFB0ciwgSERDMzIgaGRjLCBIRUFERVJfSVRFTSAqcGhkaSkKK0hFQURFUl9SZWZyZXNoSXRlbSAoV05EICp3bmRQdHIsIEhEQzMyIGhkYywgSU5UMzIgaUl0ZW0pCiB7CiAgICAgSEVBREVSX0lORk8gKmluZm9QdHIgPSBIRUFERVJfR2V0SW5mb1B0cih3bmRQdHIpOwogICAgIEhGT05UMzIgaEZvbnQsIGhPbGRGb250OwogCiAgICAgaEZvbnQgPSBpbmZvUHRyLT5oRm9udCA/IGluZm9QdHItPmhGb250IDogR2V0U3RvY2tPYmplY3QzMiAoU1lTVEVNX0ZPTlQpOwogICAgIGhPbGRGb250ID0gU2VsZWN0T2JqZWN0MzIgKGhkYywgaEZvbnQpOwotICAgIEhFQURFUl9EcmF3SXRlbSAod25kUHRyLCBoZGMsIHBoZGksIEZBTFNFKTsKKyAgICBIRUFERVJfRHJhd0l0ZW0gKHduZFB0ciwgaGRjLCBpSXRlbSwgRkFMU0UpOwogICAgIFNlbGVjdE9iamVjdDMyIChoZGMsIGhPbGRGb250KTsKIH0KIApAQCAtNTAxLDggKzUxMiw4IEBACiAgICAgaWYgKGluZm9QdHItPnVOdW1JdGVtID09IDEpIHsKICAgICAgICAgVFJBQ0UoaGVhZGVyLCAiU2ltcGxlIGRlbGV0ZSFcbiIpOwogICAgICAgICBpZiAoaW5mb1B0ci0+aXRlbXNbMF0ucHN6VGV4dCkKLSAgICAgICAgICAgIEhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBpbmZvUHRyLT5pdGVtc1swXS5wc3pUZXh0KTsKLSAgICAgICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGluZm9QdHItPml0ZW1zKTsKKyAgICAgICAgICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+aXRlbXNbMF0ucHN6VGV4dCk7CisgICAgICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+aXRlbXMpOwogICAgICAgICBpbmZvUHRyLT5pdGVtcyA9IDA7CiAgICAgICAgIGluZm9QdHItPnVOdW1JdGVtID0gMDsKICAgICB9CkBAIC01MTEsMTAgKzUyMiwxMCBAQAogICAgICAgICBUUkFDRShoZWFkZXIsICJDb21wbGV4IGRlbGV0ZSEgW2lJdGVtPSVkXVxuIiwgaUl0ZW0pOwogCiAgICAgICAgIGlmIChpbmZvUHRyLT5pdGVtc1tpSXRlbV0ucHN6VGV4dCkKLSAgICAgICAgICAgIEhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBpbmZvUHRyLT5pdGVtc1tpSXRlbV0ucHN6VGV4dCk7CisgICAgICAgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0KTsKIAogICAgICAgICBpbmZvUHRyLT51TnVtSXRlbS0tOwotICAgICAgICBpbmZvUHRyLT5pdGVtcyA9IEhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwKKyAgICAgICAgaW5mb1B0ci0+aXRlbXMgPSBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChIRUFERVJfSVRFTSkgKiBpbmZvUHRyLT51TnVtSXRlbSk7CiAgICAgICAgIC8qIHByZSBkZWxldGUgY29weSAqLwogICAgICAgICBpZiAoaUl0ZW0gPiAwKSB7CkBAIC01MjgsNyArNTM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgKGluZm9QdHItPnVOdW1JdGVtIC0gaUl0ZW0pICogc2l6ZW9mKEhFQURFUl9JVEVNKSk7CiAgICAgICAgIH0KIAotICAgICAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgb2xkSXRlbXMpOworICAgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG9sZEl0ZW1zKTsKICAgICB9CiAKICAgICBIRUFERVJfU2V0SXRlbUJvdW5kcyAod25kUHRyKTsKQEAgLTY2OSw3ICs2ODAsNyBAQAogICAgICAgICBpSXRlbSA9IGluZm9QdHItPnVOdW1JdGVtOwogCiAgICAgaWYgKGluZm9QdHItPnVOdW1JdGVtID09IDApIHsKLSAgICAgICAgaW5mb1B0ci0+aXRlbXMgPSBIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksCisgICAgICAgIGluZm9QdHItPml0ZW1zID0gSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoSEVBREVSX0lURU0pKTsKICAgICAgICAgaW5mb1B0ci0+dU51bUl0ZW0rKzsKICAgICB9CkBAIC02NzcsNyArNjg4LDcgQEAKICAgICAgICAgSEVBREVSX0lURU0gKm9sZEl0ZW1zID0gaW5mb1B0ci0+aXRlbXM7CiAKICAgICAgICAgaW5mb1B0ci0+dU51bUl0ZW0rKzsKLSAgICAgICAgaW5mb1B0ci0+aXRlbXMgPSBIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksCisgICAgICAgIGluZm9QdHItPml0ZW1zID0gSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoSEVBREVSX0lURU0pICogaW5mb1B0ci0+dU51bUl0ZW0pOwogICAgICAgICAvKiBwcmUgaW5zZXJ0IGNvcHkgKi8KICAgICAgICAgaWYgKGlJdGVtID4gMCkgewpAQCAtNjkxLDcgKzcwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIChpbmZvUHRyLT51TnVtSXRlbSAtIGlJdGVtKSAqIHNpemVvZihIRUFERVJfSVRFTSkpOwogICAgICAgICB9CiAKLSAgICAgICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIG9sZEl0ZW1zKTsKKyAgICAgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBvbGRJdGVtcyk7CiAgICAgfQogCiAgICAgaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLmJEb3duID0gRkFMU0U7CkBAIC03MDMsNyArNzE0LDcgQEAKICAgICBpZiAocGhkaS0+bWFzayAmIEhESV9URVhUKSB7CiAgICAgICAgIGxlbiA9IGxzdHJsZW4zMkEgKHBoZGktPnBzelRleHQpOwogICAgICAgICBpbmZvUHRyLT5pdGVtc1tpSXRlbV0ucHN6VGV4dCA9Ci0gICAgICAgICAgICBIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksIGxlbisxKTsKKyAgICAgICAgICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksIGxlbisxKTsKICAgICAgICAgbHN0cmNweTMyQSAoaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLnBzelRleHQsIHBoZGktPnBzelRleHQpOwogICAgICAgICBpbmZvUHRyLT5pdGVtc1tpSXRlbV0uY2NoVGV4dE1heCA9IHBoZGktPmNjaFRleHRNYXg7CiAgICAgfQpAQCAtNzQ4LDcgKzc1OSw3IEBACiAgICAgICAgIGxwTGF5b3V0LT5wd3Bvcy0+Y3kgPSAwOwogICAgIGVsc2UKICAgICAgICAgbHBMYXlvdXQtPnB3cG9zLT5jeSA9IGluZm9QdHItPm5IZWlnaHQ7Ci0gICAgbHBMYXlvdXQtPnB3cG9zLT5mbGFncyA9IFNXUF9OT0FDVElWQVRFfFNXUF9OT1pPUkRFUjsKKyAgICBscExheW91dC0+cHdwb3MtPmZsYWdzID0gU1dQX05PWk9SREVSOwogCiAgICAgVFJBQ0UgKGhlYWRlciwgIkxheW91dCB4PSVkIHk9JWQgY3g9JWQgY3k9JWRcbiIsCiAgICAgICAgICAgIGxwTGF5b3V0LT5wd3Bvcy0+eCwgbHBMYXlvdXQtPnB3cG9zLT55LApAQCAtODE4LDkgKzgyOSw5IEBACiAgICAgaWYgKHBoZGktPm1hc2sgJiBIRElfVEVYVCkgewogICAgICAgICBJTlQzMiBsZW4gPSBsc3RybGVuMzJBIChwaGRpLT5wc3pUZXh0KTsKICAgICAgICAgaWYgKGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0KQotCSAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLnBzelRleHQpOworCSAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0KTsKICAgICAgICAgaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLnBzelRleHQgPQotICAgICAgICAgICAgSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLCBsZW4rMSk7CisgICAgICAgICAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLCBsZW4rMSk7CiAgICAgICAgIGxzdHJjcHkzMkEgKGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0LCBwaGRpLT5wc3pUZXh0KTsKICAgICAgICAgaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLmNjaFRleHRNYXggPSBwaGRpLT5jY2hUZXh0TWF4OwogICAgIH0KQEAgLTg1OSw3ICs4NzAsNyBAQAogICAgIEhGT05UMzIgaE9sZEZvbnQ7CiAgICAgSERDMzIgICBoZGM7CiAKLSAgICBpbmZvUHRyID0gKEhFQURFUl9JTkZPICopSGVhcEFsbG9jKCBTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorICAgIGluZm9QdHIgPSAoSEVBREVSX0lORk8gKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIRUFERVJfSU5GTykpOwogICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CiAKQEAgLTg5NiwxNSArOTA3LDE1IEBACiAgICAgaWYgKGluZm9QdHItPml0ZW1zKSB7CiAgICAgICAgIGZvciAoaUl0ZW0gPSAwOyBpSXRlbSA8IGluZm9QdHItPnVOdW1JdGVtOyBpSXRlbSsrKSB7CiAgICAgICAgICAgICBpZiAoaW5mb1B0ci0+aXRlbXNbaUl0ZW1dLnBzelRleHQpCi0gICAgICAgICAgICAgICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0KTsKKyAgICAgICAgICAgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPml0ZW1zW2lJdGVtXS5wc3pUZXh0KTsKICAgICAgICAgfQotICAgICAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgaW5mb1B0ci0+aXRlbXMpOworICAgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPml0ZW1zKTsKICAgICB9CiAKICAgICBpZiAoaW5mb1B0ci0+aGltbCkKIAlJbWFnZUxpc3RfRGVzdHJveSAoaW5mb1B0ci0+aGltbCk7CiAKLSAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgaW5mb1B0cik7CisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBpbmZvUHRyKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtOTYyLDcgKzk3Myw3IEBACiAKIAkvKiBTZW5kIFdNX0NVU1RPTURSQVcgKi8KIAloZGMgPSBHZXREQzMyICh3bmRQdHItPmh3bmRTZWxmKTsKLQlIRUFERVJfUmVmcmVzaEl0ZW0gKHduZFB0ciwgaGRjLCAmaW5mb1B0ci0+aXRlbXNbaUl0ZW1dKTsKKwlIRUFERVJfUmVmcmVzaEl0ZW0gKHduZFB0ciwgaGRjLCBpSXRlbSk7CiAJUmVsZWFzZURDMzIgKHduZFB0ci0+aHduZFNlbGYsIGhkYyk7CiAKIAlUUkFDRSAoaGVhZGVyLCAiUHJlc3NlZCBpdGVtICVkIVxuIiwgaUl0ZW0pOwpAQCAtOTg3LDggKzk5OCw2IEBACiAJfQogICAgIH0KIAotCi0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTAxMCw3ICsxMDE5LDcgQEAKIAlpZiAoKGlJdGVtID09IGluZm9QdHItPmlNb3ZlSXRlbSkgJiYgKGZsYWdzID09IEhIVF9PTkhFQURFUikpIHsKIAkgICAgaW5mb1B0ci0+aXRlbXNbaW5mb1B0ci0+aU1vdmVJdGVtXS5iRG93biA9IEZBTFNFOwogCSAgICBoZGMgPSBHZXREQzMyICh3bmRQdHItPmh3bmRTZWxmKTsKLQkgICAgSEVBREVSX1JlZnJlc2hJdGVtICh3bmRQdHIsIGhkYywgJmluZm9QdHItPml0ZW1zW2luZm9QdHItPmlNb3ZlSXRlbV0pOworCSAgICBIRUFERVJfUmVmcmVzaEl0ZW0gKHduZFB0ciwgaGRjLCBpbmZvUHRyLT5pTW92ZUl0ZW0pOwogCSAgICBSZWxlYXNlREMzMiAod25kUHRyLT5od25kU2VsZiwgaGRjKTsKIAogCSAgICBIRUFERVJfU2VuZENsaWNrTm90aWZ5ICh3bmRQdHIsIEhETl9JVEVNQ0xJQ0szMkEsIGluZm9QdHItPmlNb3ZlSXRlbSk7CkBAIC0xMDg2LDcgKzEwOTUsNyBAQAogCSAgICBlbHNlCiAJCWluZm9QdHItPml0ZW1zW2luZm9QdHItPmlNb3ZlSXRlbV0uYkRvd24gPSBGQUxTRTsKIAkgICAgaGRjID0gR2V0REMzMiAod25kUHRyLT5od25kU2VsZik7Ci0JICAgIEhFQURFUl9SZWZyZXNoSXRlbSAod25kUHRyLCBoZGMsICZpbmZvUHRyLT5pdGVtc1tpbmZvUHRyLT5pTW92ZUl0ZW1dKTsKKwkgICAgSEVBREVSX1JlZnJlc2hJdGVtICh3bmRQdHIsIGhkYywgaW5mb1B0ci0+aU1vdmVJdGVtKTsKIAkgICAgUmVsZWFzZURDMzIgKHduZFB0ci0+aHduZFNlbGYsIGhkYyk7CiAKIAkgICAgVFJBQ0UgKGhlYWRlciwgIk1vdmluZyBwcmVzc2VkIGl0ZW0gJWQhXG4iLCBpbmZvUHRyLT5pTW92ZUl0ZW0pOwpAQCAtMTEyNyw3ICsxMTM2LDcgQEAKICAgICB9CiAKICAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIEhEU19CVVRUT05TKSAmJiAod25kUHRyLT5kd1N0eWxlICYgSERTX0hPVFRSQUNLKSkgewotCisJRklYTUUgKGhlYWRlciwgImhvdCB0cmFjayBzdXBwb3J0IVxuIik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jb250cm9scy9saXN0Ym94LmMgYi9jb250cm9scy9saXN0Ym94LmMKaW5kZXggNjBlYTE4My4uMjVhZjc2NSAxMDA2NDQKLS0tIGEvY29udHJvbHMvbGlzdGJveC5jCisrKyBiL2NvbnRyb2xzL2xpc3Rib3guYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgImNvbWJvLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ0d2Vhay5oIgogCiAvKiBVbmltcGxlbWVudGVkIHlldDoKICAqIC0gTEJTX05PU0VMCkBAIC0xMzMwLDcgKzEzMzEsNyBAQAogICAgIGlmIChpbmRleCA8PSBkZXNjci0+Zm9jdXNfaXRlbSkKICAgICB7CiAgICAgICAgIGRlc2NyLT5mb2N1c19pdGVtKys7Ci0gICAgICAgIExJU1RCT1hfTW92ZUNhcmV0KCB3bmQsIGRlc2NyLCBkZXNjci0+Zm9jdXNfaXRlbSAtIDEsIEZBTFNFICk7CisgICAgICAgIExJU1RCT1hfTW92ZUNhcmV0KCB3bmQsIGRlc2NyLCBkZXNjci0+Zm9jdXNfaXRlbSwgRkFMU0UgKTsKICAgICB9CiAKICAgICAvKiBJZiBsaXN0Ym94IHdhcyBlbXB0eSwgc2V0IGZvY3VzIHRvIHRoZSBmaXJzdCBpdGVtICovCkBAIC0xNDQ3LDcgKzE0NDgsNyBAQAogICAgIGlmIChpbmRleCA8PSBkZXNjci0+Zm9jdXNfaXRlbSkKICAgICB7CiAgICAgICAgIGRlc2NyLT5mb2N1c19pdGVtLS07Ci0gICAgICAgIExJU1RCT1hfTW92ZUNhcmV0KCB3bmQsIGRlc2NyLCBkZXNjci0+Zm9jdXNfaXRlbSArIDEsIEZBTFNFICk7CisgICAgICAgIExJU1RCT1hfTW92ZUNhcmV0KCB3bmQsIGRlc2NyLCBkZXNjci0+Zm9jdXNfaXRlbSwgRkFMU0UgKTsKICAgICB9CiAgICAgcmV0dXJuIExCX09LQVk7CiB9CkBAIC0yNDg0LDYgKzI0ODUsMTEgQEAKICAgICAgICAgfQogCWJyZWFrOwogCisgICAgY2FzZSBXTV9OQ0NSRUFURToKKwlpZiAoVFdFQUtfV2luOTVMb29rKQorCSAgICB3bmQtPmR3RXhTdHlsZSB8PSBXU19FWF9DTElFTlRFREdFOworICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYzMyQSggaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSApOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgaWYgKChtc2cgPj0gV01fVVNFUikgJiYgKG1zZyA8IDB4YzAwMCkpCiAgICAgICAgICAgICBXQVJOKGxpc3Rib3gsICJbJTA0eF06IHVua25vd24gbXNnICUwNHggd3AgJTA4eCBscCAlMDhseFxuIiwKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL21lbnUuYyBiL2NvbnRyb2xzL21lbnUuYwppbmRleCBlZTQwN2UyLi42ZTYwODU4IDEwMDY0NAotLS0gYS9jb250cm9scy9tZW51LmMKKysrIGIvY29udHJvbHMvbWVudS5jCkBAIC02NTMsNyArNjUzLDEwIEBACiAgICAgewogICAgICAgICBkd1NpemUgPSBHZXRUZXh0RXh0ZW50KCBoZGMsIGxwaXRlbS0+dGV4dCwgc3RybGVuKGxwaXRlbS0+dGV4dCkgKTsKICAgICAgICAgbHBpdGVtLT5yZWN0LnJpZ2h0ICArPSBMT1dPUkQoZHdTaXplKTsKLSAgICAgICAgbHBpdGVtLT5yZWN0LmJvdHRvbSArPSBNQVgoIEhJV09SRChkd1NpemUpLCBTWVNNRVRSSUNTX0NZTUVOVSApOworCWlmIChUV0VBS19XaW45NUxvb2spCisgICAgICAgICAgICBscGl0ZW0tPnJlY3QuYm90dG9tICs9IE1BWCAoSElXT1JEKGR3U2l6ZSksIHN5c01ldHJpY3NbU01fQ1lNRU5VXS0gMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxwaXRlbS0+cmVjdC5ib3R0b20gKz0gTUFYKCBISVdPUkQoZHdTaXplKSwgU1lTTUVUUklDU19DWU1FTlUgKTsKICAgICAgICAgbHBpdGVtLT54VGFiID0gMDsKIAogICAgICAgICBpZiAobWVudUJhcikgbHBpdGVtLT5yZWN0LnJpZ2h0ICs9IE1FTlVfQkFSX0lURU1TX1NQQUNFOwpAQCAtNjk4LDYgKzcwMSw3IEBACiAJbHBpdGVtID0gJmxwcG9wLT5pdGVtc1tzdGFydF07CiAJb3JnWCA9IG1heFg7CiAJb3JnWSA9IFNZU01FVFJJQ1NfQ1lCT1JERVI7CisKIAltYXhUYWIgPSBtYXhUYWJXaWR0aCA9IDA7CiAKIAkgIC8qIFBhcnNlIGl0ZW1zIHVudGlsIGNvbHVtbiBicmVhayBvciBlbmQgb2YgbWVudSAqLwpAQCAtNzMxLDYgKzczNSw5IEBACiAJbHBwb3AtPkhlaWdodCA9IE1BWCggbHBwb3AtPkhlaWdodCwgb3JnWSApOwogICAgIH0KIAorICAgIGlmKFRXRUFLX1dpbjk1TG9vaykKKwlscHBvcC0+SGVpZ2h0Kys7CisKICAgICBscHBvcC0+V2lkdGggID0gbWF4WDsKICAgICBSZWxlYXNlREMzMiggMCwgaGRjICk7CiB9CkBAIC04ODEsMjIgKzg4OCwxMCBAQAogCSovCiAgICAgfQogCi0gICAgaWYgKGxwaXRlbS0+ZlN0YXRlICYgTUZfSElMSVRFKSB7Ci0JUkVDVDMyICByID0gcmVjdDsKLQlyLnRvcCArPSBNRU5VX0hpZ2hsaWdodFRvcE51ZGdlOwotCXIuYm90dG9tICs9IE1FTlVfSGlnaGxpZ2h0Qm90dG9tTnVkZ2U7Ci0Jci5sZWZ0ICs9IE1FTlVfSGlnaGxpZ2h0TGVmdE51ZGdlOwotCXIucmlnaHQgKz0gTUVOVV9IaWdobGlnaHRSaWdodE51ZGdlOwotCUZpbGxSZWN0MzIoIGhkYywgJnIsIEdldFN5c0NvbG9yQnJ1c2gzMihDT0xPUl9ISUdITElHSFQpICk7Ci0gICAgfQotICAgIGVsc2UgewotCVJFQ1QzMiAgciA9IHJlY3Q7Ci0Jci50b3AgKz0gTUVOVV9IaWdobGlnaHRUb3BOdWRnZTsKLQlyLmJvdHRvbSArPSBNRU5VX0hpZ2hsaWdodEJvdHRvbU51ZGdlOwotCXIubGVmdCArPSBNRU5VX0hpZ2hsaWdodExlZnROdWRnZTsKLQlyLnJpZ2h0ICs9IE1FTlVfSGlnaGxpZ2h0UmlnaHROdWRnZTsKLQlGaWxsUmVjdDMyKCBoZGMsICZyLCBHZXRTeXNDb2xvckJydXNoMzIoQ09MT1JfTUVOVSkgKTsKLSAgICB9CisgICAgaWYgKGxwaXRlbS0+ZlN0YXRlICYgTUZfSElMSVRFKQorCUZpbGxSZWN0MzIoIGhkYywgJnJlY3QsIEdldFN5c0NvbG9yQnJ1c2gzMihDT0xPUl9ISUdITElHSFQpICk7CisgICAgZWxzZQorCUZpbGxSZWN0MzIoIGhkYywgJnJlY3QsIEdldFN5c0NvbG9yQnJ1c2gzMihDT0xPUl9NRU5VKSApOwogCiAgICAgU2V0QmtNb2RlMzIoIGhkYywgVFJBTlNQQVJFTlQgKTsKIApAQCAtMTE0Nyw5ICsxMTQyLDYgQEAKICAgICBscHJlY3QtPmJvdHRvbSA9IGxwcmVjdC0+dG9wICsgbHBwb3AtPkhlaWdodDsKICAgICBpZiAoc3VwcHJlc3NfZHJhdykgcmV0dXJuIGxwcG9wLT5IZWlnaHQ7CiAgICAgCi0gICAgaWYoVFdFQUtfV2luOTVMb29rKQotCSsrbHByZWN0LT5ib3R0b207Ci0KICAgICBGaWxsUmVjdDMyKGhEQywgbHByZWN0LCBHZXRTeXNDb2xvckJydXNoMzIoQ09MT1JfTUVOVSkgKTsKIAogICAgIGlmKCFUV0VBS19XaW45NUxvb2spIHsKQEAgLTExNTcsNiArMTE0OSwxMSBAQAogCU1vdmVUbyggaERDLCBscHJlY3QtPmxlZnQsIGxwcmVjdC0+Ym90dG9tICk7CiAJTGluZVRvMzIoIGhEQywgbHByZWN0LT5yaWdodCwgbHByZWN0LT5ib3R0b20gKTsKICAgICB9CisgICAgZWxzZSB7CisJU2VsZWN0T2JqZWN0MzIoIGhEQywgR2V0U3lzQ29sb3JQZW4zMihDT0xPUl8zREZBQ0UpKTsKKwlNb3ZlVG8oIGhEQywgbHByZWN0LT5sZWZ0LCBscHJlY3QtPmJvdHRvbSApOworCUxpbmVUbzMyKCBoREMsIGxwcmVjdC0+cmlnaHQsIGxwcmVjdC0+Ym90dG9tICk7CisgICAgfQogCiAgICAgaWYgKGxwcG9wLT5uSXRlbXMgPT0gMCkgcmV0dXJuIFNZU01FVFJJQ1NfQ1lNRU5VOwogICAgIGZvciAoaSA9IDA7IGkgPCBscHBvcC0+bkl0ZW1zOyBpKyspCmRpZmYgLS1naXQgYS9jb250cm9scy9wcm9ncmVzcy5jIGIvY29udHJvbHMvcHJvZ3Jlc3MuYwppbmRleCBkODNjYjkzLi4zYWNiMjk0IDEwMDY0NAotLS0gYS9jb250cm9scy9wcm9ncmVzcy5jCisrKyBiL2NvbnRyb2xzL3Byb2dyZXNzLmMKQEAgLTI5LDI1ICsyOSwyMCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFBST0dSRVNTX1BhaW50Ci0gKiBEcmF3IHRoZSBhcnJvd3MuIFRoZSBiYWNrZ3JvdW5kIG5lZWQgbm90IGJlIGVyYXNlZC4KLSAqIElmIGRjIT0wLCBpdCBkcmF3cyBvbiBpdAorICogUFJPR1JFU1NfRHJhdworICogRHJhd3MgdGhlIHByb2dyZXNzIGJhci4KICAqLwotc3RhdGljIHZvaWQgUFJPR1JFU1NfUGFpbnQoV05EICp3bmRQdHIsIEhEQzMyIGRjKQorc3RhdGljIHZvaWQKK1BST0dSRVNTX0RyYXcgKFdORCAqd25kUHRyLCBIREMzMiBoZGMpCiB7CiAgIFBST0dSRVNTX0lORk8gKmluZm9QdHIgPSBQUk9HUkVTU19HZXRJbmZvUHRyKHduZFB0cik7CiAgIEhCUlVTSDMyIGhickJhciwgaGJyQms7CiAgIGludCByaWdodEJhciwgcmlnaHRNb3N0LCBsZWRXaWR0aDsKLSAgUEFJTlRTVFJVQ1QzMiBwczsKICAgUkVDVDMyIHJlY3Q7Ci0gIEhEQzMyIGhkYzsKIAotICBUUkFDRShwcm9ncmVzcywgInBhaW50IHBvcz0lZCBtaW49JWQsIG1heD0lZFxuIiwKKyAgVFJBQ0UocHJvZ3Jlc3MsICJyZWZyZXNoIHBvcz0lZCBtaW49JWQsIG1heD0lZFxuIiwKIAkgICAgICAgaW5mb1B0ci0+Q3VyVmFsLCBpbmZvUHRyLT5NaW5WYWwsIGluZm9QdHItPk1heFZhbCk7CiAKLSAgLyogZ2V0IGEgZGMgKi8KLSAgaGRjID0gZGM9PTAgPyBCZWdpblBhaW50MzIod25kUHRyLT5od25kU2VsZiwgJnBzKSA6IGRjOwotCiAgIC8qIGdldCB0aGUgcmVxdWlyZWQgYmFyIGJydXNoICovCiAgIGlmIChpbmZvUHRyLT5Db2xvckJhciA9PSBDTFJfREVGQVVMVCkKICAgICBoYnJCYXIgPSBHZXRTeXNDb2xvckJydXNoMzIoQ09MT1JfSElHSExJR0hUKTsKQEAgLTYwLDExICs1NSwxMCBAQAogICBlbHNlCiAgICAgaGJyQmsgPSBDcmVhdGVTb2xpZEJydXNoMzIgKGluZm9QdHItPkNvbG9yQmspOwogCi0gIC8qIGdldCByZWN0IGZvciB0aGUgYmFyLCBhZGp1c3RlZCBmb3IgdGhlIGJvcmRlciAqLworICAvKiBnZXQgY2xpZW50IHJlY3RhbmdsZSAqLwogICBHZXRDbGllbnRSZWN0MzIgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0KTsKIAotICAvKiBkcmF3IHRoZSBib3JkZXIgKi8KLSAgRHJhd0VkZ2UzMihoZGMsICZyZWN0LCBCRFJfU1VOS0VOT1VURVIsIEJGX1JFQ1R8QkZfQURKVVNUKTsKKyAgLyogZHJhdyB0aGUgYmFja2dyb3VuZCAqLwogICBGaWxsUmVjdDMyKGhkYywgJnJlY3QsIGhickJrKTsKIAogICByZWN0LmxlZnQrKzsgcmVjdC5yaWdodC0tOyByZWN0LnRvcCsrOyByZWN0LmJvdHRvbS0tOwpAQCAtMTI1LDEzICsxMTksNDAgQEAKICAgLyogZGVsZXRlIGJhY2tncm91bmQgYnJ1c2ggKi8KICAgaWYgKGluZm9QdHItPkNvbG9yQmsgIT0gQ0xSX0RFRkFVTFQpCiAgICAgICBEZWxldGVPYmplY3QzMiAoaGJyQmspOwotCi0gIC8qIGNsZWFuLXVwICovICAKLSAgaWYoIWRjKQotICAgIEVuZFBhaW50MzIod25kUHRyLT5od25kU2VsZiwgJnBzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQUk9HUkVTU19SZWZyZXNoCisgKiBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuIFRoZSBiYWNrZ3JvdW5kIG5lZWQgbm90IGJlIGVyYXNlZC4KKyAqLworc3RhdGljIHZvaWQKK1BST0dSRVNTX1JlZnJlc2ggKFdORCAqd25kUHRyKQoreworICAgIEhEQzMyIGhkYzsKKworICAgIGhkYyA9IEdldERDMzIgKHduZFB0ci0+aHduZFNlbGYpOworICAgIFBST0dSRVNTX0RyYXcgKHduZFB0ciwgaGRjKTsKKyAgICBSZWxlYXNlREMzMiAod25kUHRyLT5od25kU2VsZiwgaGRjKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQUk9HUkVTU19QYWludAorICogRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyLiBUaGUgYmFja2dyb3VuZCBuZWVkIG5vdCBiZSBlcmFzZWQuCisgKiBJZiBkYyE9MCwgaXQgZHJhd3Mgb24gaXQKKyAqLworc3RhdGljIHZvaWQKK1BST0dSRVNTX1BhaW50IChXTkQgKnduZFB0cikKK3sKKyAgICBQQUlOVFNUUlVDVDMyIHBzOworICAgIEhEQzMyIGhkYzsKKworICAgIGhkYyA9IEJlZ2luUGFpbnQzMiAod25kUHRyLT5od25kU2VsZiwgJnBzKTsKKyAgICBQUk9HUkVTU19EcmF3ICh3bmRQdHIsIGhkYyk7CisgICAgRW5kUGFpbnQzMiAod25kUHRyLT5od25kU2VsZiwgJnBzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBQUk9HUkVTU19Db2VyY2VQb3MKICAqIE1ha2VzIHN1cmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gKENVclZhbCkgaXMgd2l0aGluIGJvdW5kcy4KICAqLwpAQCAtMTU3LDEwICsxNzgsMTUgQEAKIAogICBzd2l0Y2gobWVzc2FnZSkKICAgICB7CisgICAgY2FzZSBXTV9OQ0NSRUFURToKKyAgICAgIHduZFB0ci0+ZHdFeFN0eWxlIHw9IFdTX0VYX1NUQVRJQ0VER0U7CisgICAgICByZXR1cm4gVFJVRTsKKwogICAgIGNhc2UgV01fQ1JFQVRFOgogICAgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBpbmZvIHN0cnVjdCAqLwotICAgICAgaW5mb1B0ciA9IChQUk9HUkVTU19JTkZPICopSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQUk9HUkVTU19JTkZPKSk7CisgICAgICBpbmZvUHRyID0gCisJKFBST0dSRVNTX0lORk8gKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFBST0dSRVNTX0lORk8pKTsKICAgICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CiAKICAgICAgIC8qIGluaXRpYWxpemUgdGhlIGluZm8gc3RydWN0ICovCkBAIC0xNzUsNyArMjAxLDcgQEAKICAgICAKICAgICBjYXNlIFdNX0RFU1RST1k6CiAgICAgICBUUkFDRShwcm9ncmVzcywgIlByb2dyZXNzIEN0cmwgZGVzdHJ1Y3Rpb24sIGh3bmQ9JTA0eFxuIiwgaHduZCk7Ci0gICAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgaW5mb1B0cik7CisgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHIpOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdNX0VSQVNFQktHTkQ6CkBAIC0xOTQsNyArMjIwLDcgQEAKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXTV9QQUlOVDoKLSAgICAgIFBST0dSRVNTX1BhaW50KHduZFB0ciwgd1BhcmFtKTsKKyAgICAgIFBST0dSRVNTX1BhaW50ICh3bmRQdHIpOwogICAgICAgYnJlYWs7CiAgICAgCiAgICAgY2FzZSBQQk1fREVMVEFQT1M6CkBAIC0yMDQsOCArMjMwLDcgQEAKICAgICAgIGlmKHdQYXJhbSAhPSAwKXsKIAlpbmZvUHRyLT5DdXJWYWwgKz0gKFVJTlQxNil3UGFyYW07CiAJUFJPR1JFU1NfQ29lcmNlUG9zKHduZFB0cik7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0MzIgKGh3bmQsIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgVXBkYXRlV2luZG93MzIgKGh3bmQpOworCVBST0dSRVNTX1JlZnJlc2ggKHduZFB0cik7CiAgICAgICB9CiAgICAgICByZXR1cm4gdGVtcDsKIApAQCAtMjE2LDggKzI0MSw3IEBACiAgICAgICBpZih0ZW1wICE9IHdQYXJhbSl7CiAJaW5mb1B0ci0+Q3VyVmFsID0gKFVJTlQxNil3UGFyYW07CiAJUFJPR1JFU1NfQ29lcmNlUG9zKHduZFB0cik7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0MzIgKGh3bmQsIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgVXBkYXRlV2luZG93MzIgKGh3bmQpOworCVBST0dSRVNTX1JlZnJlc2ggKHduZFB0cik7CiAgICAgICB9CiAgICAgICByZXR1cm4gdGVtcDsgICAgICAgICAgCiAgICAgICAKQEAgLTIzMSw4ICsyNTUsNyBAQAogCWlmKGluZm9QdHItPk1heFZhbCA8PSBpbmZvUHRyLT5NaW5WYWwpCiAJICBpbmZvUHRyLT5NYXhWYWwgPSBpbmZvUHRyLT5NaW5WYWwrMTsKIAlQUk9HUkVTU19Db2VyY2VQb3Mod25kUHRyKTsKLSAgICAgICAgSW52YWxpZGF0ZVJlY3QzMiAoaHduZCwgTlVMTCwgRkFMU0UpOwotICAgICAgICBVcGRhdGVXaW5kb3czMiAoaHduZCk7CisJUFJPR1JFU1NfUmVmcmVzaCAod25kUHRyKTsKICAgICAgIH0KICAgICAgIHJldHVybiB0ZW1wOwogCkBAIC0yNTEsMTAgKzI3NCw3IEBACiAgICAgICBpZihpbmZvUHRyLT5DdXJWYWwgPiBpbmZvUHRyLT5NYXhWYWwpCiAJaW5mb1B0ci0+Q3VyVmFsID0gaW5mb1B0ci0+TWluVmFsOwogICAgICAgaWYodGVtcCAhPSBpbmZvUHRyLT5DdXJWYWwpCi0gICAgICB7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0MzIgKGh3bmQsIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgVXBkYXRlV2luZG93MzIgKGh3bmQpOwotICAgICAgfQorCVBST0dSRVNTX1JlZnJlc2ggKHduZFB0cik7CiAgICAgICByZXR1cm4gdGVtcDsKIAogICAgIGNhc2UgUEJNX1NFVFJBTkdFMzI6CkBAIC0yNjYsOCArMjg2LDcgQEAKIAlpZihpbmZvUHRyLT5NYXhWYWwgPD0gaW5mb1B0ci0+TWluVmFsKQogCSAgaW5mb1B0ci0+TWF4VmFsID0gaW5mb1B0ci0+TWluVmFsKzE7CiAJUFJPR1JFU1NfQ29lcmNlUG9zKHduZFB0cik7Ci0gICAgICAgIEludmFsaWRhdGVSZWN0MzIgKGh3bmQsIE5VTEwsIEZBTFNFKTsKLSAgICAgICAgVXBkYXRlV2luZG93MzIgKGh3bmQpOworCVBST0dSRVNTX1JlZnJlc2ggKHduZFB0cik7CiAgICAgICB9CiAgICAgICByZXR1cm4gdGVtcDsKICAgICAKQEAgLTI4NywxNiArMzA2LDE0IEBACiAgICAgICBpZiAod1BhcmFtKQogCVVOS05PV05fUEFSQU0oUEJNX1NFVEJBUkNPTE9SLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICBpbmZvUHRyLT5Db2xvckJhciA9IChDT0xPUlJFRilsUGFyYW07ICAgICAKLSAgICAgIEludmFsaWRhdGVSZWN0MzIgKGh3bmQsIE5VTEwsIEZBTFNFKTsKLSAgICAgIFVwZGF0ZVdpbmRvdzMyIChod25kKTsKKyAgICAgIFBST0dSRVNTX1JlZnJlc2ggKHduZFB0cik7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgUEJNX1NFVEJLQ09MT1I6CiAgICAgICBpZiAod1BhcmFtKQogCVVOS05PV05fUEFSQU0oUEJNX1NFVEJLQ09MT1IsIHdQYXJhbSwgbFBhcmFtKTsKICAgICAgIGluZm9QdHItPkNvbG9yQmsgPSAoQ09MT1JSRUYpbFBhcmFtOwotICAgICAgSW52YWxpZGF0ZVJlY3QzMiAoaHduZCwgTlVMTCwgRkFMU0UpOwotICAgICAgVXBkYXRlV2luZG93MzIgKGh3bmQpOworICAgICAgUFJPR1JFU1NfUmVmcmVzaCAod25kUHRyKTsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDogCkBAIC0zMTYsNyArMzMzLDggQEAKICAqIFJlZ2lzdGVycyB0aGUgcHJvZ3Jlc3MgYmFyIHdpbmRvdyBjbGFzcy4KICAqIAogICovCi12b2lkIFBST0dSRVNTX1JlZ2lzdGVyKHZvaWQpCit2b2lkIAorUFJPR1JFU1NfUmVnaXN0ZXIodm9pZCkKIHsKICAgICBXTkRDTEFTUzMyQSB3bmRDbGFzczsKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvc3RhdGljLmMgYi9jb250cm9scy9zdGF0aWMuYwppbmRleCAwMWYzODZjLi4yNTVmMDFmIDEwMDY0NAotLS0gYS9jb250cm9scy9zdGF0aWMuYworKysgYi9jb250cm9scy9zdGF0aWMuYwpAQCAtMTIsMTIgKzEyLDEzIEBACiAjaW5jbHVkZSAic3RhdGljLmgiCiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHdlYWsuaCIKIAogc3RhdGljIHZvaWQgU1RBVElDX1BhaW50VGV4dGZuKCBXTkQgKnduZFB0ciwgSERDMzIgaGRjICk7CiBzdGF0aWMgdm9pZCBTVEFUSUNfUGFpbnRSZWN0Zm4oIFdORCAqd25kUHRyLCBIREMzMiBoZGMgKTsKIHN0YXRpYyB2b2lkIFNUQVRJQ19QYWludEljb25mbiggV05EICp3bmRQdHIsIEhEQzMyIGhkYyApOwogc3RhdGljIHZvaWQgU1RBVElDX1BhaW50Qml0bWFwZm4oIFdORCAqd25kUHRyLCBIREMzMiBoZGMgKTsKLQorc3RhdGljIHZvaWQgU1RBVElDX1BhaW50RXRjaGVkZm4oIFdORCAqd25kUHRyLCBIREMzMiBoZGMgKTsKIAogc3RhdGljIENPTE9SUkVGIGNvbG9yX3dpbmRvd2ZyYW1lLCBjb2xvcl9iYWNrZ3JvdW5kLCBjb2xvcl93aW5kb3c7CiAKQEAgLTQyLDkgKzQzLDkgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogU1NfT1dORVJEUkFXICovCiAgICAgU1RBVElDX1BhaW50Qml0bWFwZm4sICAgIC8qIFNTX0JJVE1BUCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBTU19FTkhNRVRBRklMRSAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBTU19FVENIRURIT1JJWiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBTU19FVENIRURWRVJUICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIFNTX0VUQ0hFREZSQU1FICovCisgICAgU1RBVElDX1BhaW50RXRjaGVkZm4sICAgIC8qIFNTX0VUQ0hFREhPUklaICovCisgICAgU1RBVElDX1BhaW50RXRjaGVkZm4sICAgIC8qIFNTX0VUQ0hFRFZFUlQgKi8KKyAgICBTVEFUSUNfUGFpbnRFdGNoZWRmbiwgICAgLyogU1NfRVRDSEVERlJBTUUgKi8KIH07CiAKIApAQCAtMTcwLDYgKzE3MSw5IEBACiAgICAgc3dpdGNoICh1TXNnKQogICAgIHsKICAgICBjYXNlIFdNX05DQ1JFQVRFOgorCWlmIChUV0VBS19XaW45NUxvb2sgJiYgKHduZFB0ci0+ZHdTdHlsZSAmIFNTX1NVTktFTikpCisJICAgIHduZFB0ci0+ZHdFeFN0eWxlIHw9IFdTX0VYX1NUQVRJQ0VER0U7CisKICAgICAgICAgaWYgKHN0eWxlID09IFNTX0lDT04pCiAgICAgICAgIHsKICAgICAgICAgICAgIENSRUFURVNUUlVDVDMyQSAqY3MgPSAoQ1JFQVRFU1RSVUNUMzJBICopbFBhcmFtOwpAQCAtMzkyLDcgKzM5Niw3IEBACiAgICAgaWYgKGluZm9QdHItPmhJY29uKSBEcmF3SWNvbjMyKCBoZGMsIHJjLmxlZnQsIHJjLnRvcCwgaW5mb1B0ci0+aEljb24gKTsKIH0KIAotc3RhdGljIHZvaWQgU1RBVElDX1BhaW50Qml0bWFwZm4oV05EICp3bmRQdHIsIEhEQzMyIGhkYyApIAorc3RhdGljIHZvaWQgU1RBVElDX1BhaW50Qml0bWFwZm4oV05EICp3bmRQdHIsIEhEQzMyIGhkYyApCiB7CiAgICAgUkVDVDMyIHJjOwogICAgIEhCUlVTSDMyIGhicnVzaDsKQEAgLTQxNiwzICs0MjAsNDggQEAKICAgICAgICAgR0RJX0hFQVBfVU5MT0NLKGluZm9QdHItPmhJY29uKTsKICAgICB9CiB9CisKKworc3RhdGljIHZvaWQgU1RBVElDX1BhaW50RXRjaGVkZm4oIFdORCAqd25kUHRyLCBIREMzMiBoZGMgKQoreworICAgIFJFQ1QzMiByYzsKKyAgICBIQlJVU0gzMiBoYnJ1c2g7CisgICAgSFBFTjMyIGhwZW47CisKKyAgICBpZiAoIVRXRUFLX1dpbjk1TG9vaykgcmV0dXJuOworCisgICAgR2V0Q2xpZW50UmVjdDMyKCB3bmRQdHItPmh3bmRTZWxmLCAmcmMgKTsKKyAgICBoYnJ1c2ggPSBTZW5kTWVzc2FnZTMyQSggR2V0UGFyZW50MzIod25kUHRyLT5od25kU2VsZiksIFdNX0NUTENPTE9SU1RBVElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGMsIHduZFB0ci0+aHduZFNlbGYgKTsKKyAgICBGaWxsUmVjdDMyKCBoZGMsICZyYywgaGJydXNoICk7CisKKyAgICBzd2l0Y2ggKHduZFB0ci0+ZHdTdHlsZSAmIFNTX1RZUEVNQVNLKQorICAgIHsKKwljYXNlIFNTX0VUQ0hFREhPUlo6CisJICAgIGhwZW4gPSBTZWxlY3RPYmplY3QzMiAoaGRjLCBHZXRTeXNDb2xvclBlbjMyIChDT0xPUl8zRFNIQURPVykpOworCSAgICBNb3ZlVG9FeDMyIChoZGMsIHJjLmxlZnQsIHJjLmJvdHRvbSAvIDIgLSAxLCBOVUxMKTsKKwkgICAgTGluZVRvMzIgKGhkYywgcmMucmlnaHQgLSAxLCByYy5ib3R0b20gLyAyIC0gMSk7CisJICAgIFNlbGVjdE9iamVjdDMyIChoZGMsIEdldFN5c0NvbG9yUGVuMzIgKENPTE9SXzNESElHSExJR0hUKSk7CisJICAgIE1vdmVUb0V4MzIgKGhkYywgcmMubGVmdCwgcmMuYm90dG9tIC8gMiwgTlVMTCk7CisJICAgIExpbmVUbzMyIChoZGMsIHJjLnJpZ2h0LCByYy5ib3R0b20gLyAyKTsKKwkgICAgTGluZVRvMzIgKGhkYywgcmMucmlnaHQsIHJjLmJvdHRvbSAvIDIgLSAxKTsKKwkgICAgU2VsZWN0T2JqZWN0MzIgKGhkYywgaHBlbik7CisJICAgIGJyZWFrOworCisJY2FzZSBTU19FVENIRURWRVJUOgorCSAgICBocGVuID0gU2VsZWN0T2JqZWN0MzIgKGhkYywgR2V0U3lzQ29sb3JQZW4zMiAoQ09MT1JfM0RTSEFET1cpKTsKKwkgICAgTW92ZVRvRXgzMiAoaGRjLCByYy5yaWdodCAvIDIgLSAxLCByYy50b3AsIE5VTEwpOworCSAgICBMaW5lVG8zMiAoaGRjLCByYy5yaWdodCAvIDIgLSAxLCByYy5ib3R0b20gLSAxKTsKKwkgICAgU2VsZWN0T2JqZWN0MzIgKGhkYywgR2V0U3lzQ29sb3JQZW4zMiAoQ09MT1JfM0RISUdITElHSFQpKTsKKwkgICAgTW92ZVRvRXgzMiAoaGRjLCByYy5yaWdodCAvIDIsIHJjLnRvcCwgTlVMTCk7CisJICAgIExpbmVUbzMyIChoZGMsIHJjLnJpZ2h0IC8gMiwgcmMuYm90dG9tKTsKKwkgICAgTGluZVRvMzIgKGhkYywgcmMucmlnaHQgLyAyIC0xICwgcmMuYm90dG9tKTsKKwkgICAgU2VsZWN0T2JqZWN0MzIgKGhkYywgaHBlbik7IAorCSAgICBicmVhazsKKworCWNhc2UgU1NfRVRDSEVERlJBTUU6CisJICAgIERyYXdFZGdlMzIgKGhkYywgJnJjLCBFREdFX0VUQ0hFRCwgQkZfUkVDVCk7CisJICAgIGJyZWFrOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvc3RhdHVzLmMgYi9jb250cm9scy9zdGF0dXMuYwppbmRleCA2ZGYzOWIwLi45MzExM2UxIDEwMDY0NAotLS0gYS9jb250cm9scy9zdGF0dXMuYworKysgYi9jb250cm9scy9zdGF0dXMuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgLyogbm93IGRyYXcgdGV4dCAqLwogICAgIGlmICh0ZXh0KSB7CiAgICAgICBpbnQgb2xkYmttb2RlID0gU2V0QmtNb2RlMzIoaGRjLCBUUkFOU1BBUkVOVCk7Ci0gICAgICBMUFNUUiBwID0gdGV4dDsKKyAgICAgIExQU1RSIHAgPSAoTFBTVFIpdGV4dDsKICAgICAgIFVJTlQzMiBhbGlnbiA9IERUX0xFRlQ7CiAgICAgICBpZiAoKnAgPT0gJ1x0JykgewogCXArKzsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3Rvb2xiYXIuYyBiL2NvbnRyb2xzL3Rvb2xiYXIuYwppbmRleCAzYzVkMTM0Li40ZjNjZTk2IDEwMDY0NAotLS0gYS9jb250cm9scy90b29sYmFyLmMKKysrIGIvY29udHJvbHMvdG9vbGJhci5jCkBAIC0xMSwxNCArMTEsMTYgQEAKICAqICAgICBFcmljIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KICAqCiAgKiBUT0RPOgotICogICAtIE1hbnkgbWVzc2FnZXMuCi0gKiAgIC0gQWxsIG5vdGlmaWNhdGlvbnMuCisgKiAgIC0gQml0bWFwIGRyYXdpbmcuCisgKiAgIC0gQnV0dG9uIHdyYXBwaW5nLgorICogICAtIE1lc3NhZ2VzLgorICogICAtIE5vdGlmaWNhdGlvbnMuCiAgKiAgIC0gRml4IFRCX0dFVEJJVE1BUEZMQUdTLgogICogICAtIEZpeCBUQl9HRVRST1dTIGFuZCBUQl9TRVRST1dTLgogICogICAtIFRvb2x0aXAgc3VwcG9ydCAocGFydGlhbGx5KS4KICAqICAgLSBVbmljb2RlIHN1cHBwb3J0LgogICogICAtIEludGVybmFsIENPTU1DVEwzMiBiaXRtYXBzLgotICogICAtIEN1c3RvbWl6ZSBkaWFsb2cuCisgKiAgIC0gRml4IFRPT0xCQVJfQ3VzdG9taXplLiAoQ3VzdG9taXplIGRpYWxvZy4pCiAgKgogICogVGVzdGluZzoKICAqICAgLSBSdW4gdGVzdHMgdXNpbmcgV2FpdGUgR3JvdXAgV2luZG93czk1IEFQSSBCaWJsZSBWb2x1bWUgMi4KQEAgLTM5LDkgKzQxLDEwIEBACiAjaW5jbHVkZSAiZGVidWcuaCIKIAogCi0jZGVmaW5lIFNFUEFSQVRPUl9XSURUSCAgOAotI2RlZmluZSBTRVBBUkFUT1JfSEVJR0hUIDUKLQorI2RlZmluZSBTRVBBUkFUT1JfV0lEVEggICAgOAorI2RlZmluZSBTRVBBUkFUT1JfSEVJR0hUICAgNQorI2RlZmluZSBUT1BfQk9SREVSICAgICAgICAgMgorI2RlZmluZSBCT1RUT01fQk9SREVSICAgICAgMgogCiAKIApAQCAtNDksNzYgKzUyLDk0IEBACiAKIAogc3RhdGljIHZvaWQKK1RPT0xCQVJfRHJhd0ZsYXRTZXBhcmF0b3IgKExQUkVDVDMyIGxwUmVjdCwgSERDMzIgaGRjKQoreworICAgIElOVDMyIHggPSAobHBSZWN0LT5sZWZ0ICsgbHBSZWN0LT5yaWdodCkgLyAyIC0gMTsKKyAgICBJTlQzMiB5Qm90dG9tID0gbHBSZWN0LT5ib3R0b20gLSAzOworICAgIElOVDMyIHlUb3AgPSBscFJlY3QtPnRvcCArIDE7CisKKyAgICBTZWxlY3RPYmplY3QzMiAoIGhkYywgR2V0U3lzQ29sb3JQZW4zMiAoQ09MT1JfM0RTSEFET1cpKTsKKyAgICBNb3ZlVG9FeDMyIChoZGMsIHgsIHlCb3R0b20sIE5VTEwpOworICAgIExpbmVUbzMyIChoZGMsIHgsIHlUb3ApOworICAgIHgrKzsKKyAgICBTZWxlY3RPYmplY3QzMiAoIGhkYywgR2V0U3lzQ29sb3JQZW4zMiAoQ09MT1JfM0RISUxJR0hUKSk7CisgICAgTW92ZVRvRXgzMiAoaGRjLCB4LCB5Qm90dG9tLCBOVUxMKTsKKyAgICBMaW5lVG8zMiAoaGRjLCB4LCB5VG9wKTsKK30KKworCitzdGF0aWMgdm9pZAogVE9PTEJBUl9EcmF3QnV0dG9uIChXTkQgKnduZFB0ciwgVEJVVFRPTl9JTkZPICpidG5QdHIsIEhEQzMyIGhkYykKIHsKICAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBCT09MMzIgYkZsYXQgPSAod25kUHRyLT5kd1N0eWxlICYgVEJTVFlMRV9GTEFUKTsKICAgICBSRUNUMzIgcmM7CiAKICAgICBpZiAoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9ISURERU4pIHJldHVybjsKIAogICAgIHJjID0gYnRuUHRyLT5yZWN0OwogICAgIGlmIChidG5QdHItPmZzU3R5bGUgJiBUQlNUWUxFX1NFUCkgewotCisJaWYgKChiRmxhdCkgJiYgKGJ0blB0ci0+aWRDb21tYW5kID09IDApKQorCSAgICBUT09MQkFSX0RyYXdGbGF0U2VwYXJhdG9yICgmYnRuUHRyLT5yZWN0LCBoZGMpOworCXJldHVybjsKICAgICB9Ci0gICAgZWxzZSB7Ci0JaWYgKCEoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9FTkFCTEVEKSkgewotCSAgICAvKiBidXR0b24gaXMgZGlzYWJsZWQgKi8KLQkgICAgSElDT04zMiBoSWNvbjsKLQkgICAgRHJhd0VkZ2UzMiAoaGRjLCAmcmMsIEVER0VfUkFJU0VELAotCQkJQkZfU09GVCB8IEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwotCSAgICBoSWNvbiA9IEltYWdlTGlzdF9HZXRJY29uIChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIElMRF9JTUFHRSk7Ci0JICAgIERyYXdTdGF0ZTMyQSAoaGRjLCAoSEJSVVNIMzIpTlVMTCwgTlVMTCwgTUFLRUxPTkcoaEljb24sIDApLCAwLAotCQlyYy5sZWZ0KzEsIHJjLnRvcCsxLAotCQlpbmZvUHRyLT5uQml0bWFwV2lkdGgsIGluZm9QdHItPm5CaXRtYXBIZWlnaHQsIERTVF9JQ09OfERTU19ESVNBQkxFRCk7Ci0vLwkgICAgSW1hZ2VMaXN0X0RyYXcgKGluZm9QdHItPmhpbWxEaXMsIGJ0blB0ci0+aUJpdG1hcCwgaGRjLAotLy8JCQkgICAgcmMubGVmdCsxLCByYy50b3ArMSwgSUxEX05PUk1BTCk7Ci0JICAgIHJldHVybjsKLQl9CiAKLQkvKiBUQlNUWUxFX0JVVFRPTiAqLwotCWlmIChidG5QdHItPmZzU3RhdGUgJiBUQlNUQVRFX1BSRVNTRUQpIHsKLQkgICAgRHJhd0VkZ2UzMiAoaGRjLCAmcmMsIEVER0VfU1VOS0VOLAotCQkJQkZfUkVDVCB8IEJGX01JRERMRSB8IEJGX0FESlVTVCk7Ci0JICAgIEltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKLQkJCSAgICByYy5sZWZ0KzIsIHJjLnRvcCsyLCBJTERfTk9STUFMKTsKLQkgICAgcmV0dXJuOwotCX0KLQotCWlmICgoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9DSEVDSykgJiYKLQkgICAgKGJ0blB0ci0+ZnNTdGF0ZSAmIFRCU1RBVEVfQ0hFQ0tFRCkpIHsKLQkgICAgSEJSVVNIMzIgaGJyOwotCSAgICBEcmF3RWRnZTMyIChoZGMsICZyYywgRURHRV9TVU5LRU4sCi0JCQlCRl9SRUNUIHwgQkZfTUlERExFIHwgQkZfQURKVVNUKTsKLQotCSAgICBoYnIgPSBTZWxlY3RPYmplY3QzMiAoaGRjLCBDQUNIRV9HZXRQYXR0ZXJuNTVBQUJydXNoICgpKTsKLQkgICAgUGF0Qmx0MzIgKGhkYywgcmMubGVmdCwgcmMudG9wLCByYy5yaWdodCAtIHJjLmxlZnQsCi0JCSAgICAgIHJjLmJvdHRvbSAtIHJjLnRvcCwgMHgwMEZBMDA4OSk7Ci0JICAgIFNlbGVjdE9iamVjdDMyIChoZGMsIGhicik7Ci0JICAgIEltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKLQkJCSAgICByYy5sZWZ0KzIsIHJjLnRvcCsyLCBJTERfTk9STUFMKTsKLQkgICAgcmV0dXJuOwotCX0KLQkKLQlpZiAoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9JTkRFVEVSTUlOQVRFKSB7Ci0JICAgIEhCUlVTSDMyIGhicjsKLQkgICAgRHJhd0VkZ2UzMiAoaGRjLCAmcmMsIEVER0VfUkFJU0VELAotCQkJQkZfU09GVCB8IEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwotCi0JICAgIGhiciA9IFNlbGVjdE9iamVjdDMyIChoZGMsIENBQ0hFX0dldFBhdHRlcm41NUFBQnJ1c2ggKCkpOwotCSAgICBQYXRCbHQzMiAoaGRjLCByYy5sZWZ0LCByYy50b3AsIHJjLnJpZ2h0IC0gcmMubGVmdCwKLQkJICAgICAgcmMuYm90dG9tIC0gcmMudG9wLCAweDAwRkEwMDg5KTsKLQkgICAgU2VsZWN0T2JqZWN0MzIgKGhkYywgaGJyKTsKLS8vCSAgICBJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbERlZiwgYnRuUHRyLT5pQml0bWFwLCBoZGMsCi0vLwkJCSAgICByYy5sZWZ0KzEsIHJjLnRvcCsxLCBJTERfTk9STUFMKTsKLQkgICAgcmV0dXJuOwotCX0KLQotCS8qIG5vcm1hbCBzdGF0ZSAqLworICAgIC8qIGRpc2FibGVkICovCisgICAgaWYgKCEoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9FTkFCTEVEKSkgeworCUhJQ09OMzIgaEljb247CiAJRHJhd0VkZ2UzMiAoaGRjLCAmcmMsIEVER0VfUkFJU0VELAogCQkgICAgQkZfU09GVCB8IEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOwotCUltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKLQkJCXJjLmxlZnQrMSwgcmMudG9wKzEsIElMRF9OT1JNQUwpOworCisvLwlJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbERpcywgYnRuUHRyLT5pQml0bWFwLCBoZGMsCisvLwkJCXJjLmxlZnQrMSwgcmMudG9wKzEsIElMRF9OT1JNQUwpOworCXJldHVybjsKICAgICB9CisKKyAgICAvKiBwcmVzc2VkIFRCU1RZTEVfQlVUVE9OICovCisgICAgaWYgKGJ0blB0ci0+ZnNTdGF0ZSAmIFRCU1RBVEVfUFJFU1NFRCkgeworCURyYXdFZGdlMzIgKGhkYywgJnJjLCBFREdFX1NVTktFTiwKKwkJICAgIEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOworCUltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKKwkJCXJjLmxlZnQrMiwgcmMudG9wKzIsIElMRF9OT1JNQUwpOworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBjaGVja2VkIFRCU1RZTEVfQ0hFQ0sqLworICAgIGlmICgoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9DSEVDSykgJiYKKwkoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9DSEVDS0VEKSkgeworCUhCUlVTSDMyIGhicjsKKwlEcmF3RWRnZTMyIChoZGMsICZyYywgRURHRV9TVU5LRU4sCisJCSAgICBCRl9SRUNUIHwgQkZfTUlERExFIHwgQkZfQURKVVNUKTsKKworCWhiciA9IFNlbGVjdE9iamVjdDMyIChoZGMsIENBQ0hFX0dldFBhdHRlcm41NUFBQnJ1c2ggKCkpOworCVBhdEJsdDMyIChoZGMsIHJjLmxlZnQsIHJjLnRvcCwgcmMucmlnaHQgLSByYy5sZWZ0LAorCQkgIHJjLmJvdHRvbSAtIHJjLnRvcCwgMHgwMEZBMDA4OSk7CisJU2VsZWN0T2JqZWN0MzIgKGhkYywgaGJyKTsKKwlJbWFnZUxpc3RfRHJhdyAoaW5mb1B0ci0+aGltbERlZiwgYnRuUHRyLT5pQml0bWFwLCBoZGMsCisJCQlyYy5sZWZ0KzIsIHJjLnRvcCsyLCBJTERfTk9STUFMKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogaW5kZXRlcm1pbmF0ZSAqLwkKKyAgICBpZiAoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9JTkRFVEVSTUlOQVRFKSB7CisJSEJSVVNIMzIgaGJyOworCURyYXdFZGdlMzIgKGhkYywgJnJjLCBFREdFX1JBSVNFRCwKKwkJICAgIEJGX1NPRlQgfCBCRl9SRUNUIHwgQkZfTUlERExFIHwgQkZfQURKVVNUKTsKKworCWhiciA9IFNlbGVjdE9iamVjdDMyIChoZGMsIENBQ0hFX0dldFBhdHRlcm41NUFBQnJ1c2ggKCkpOworCVBhdEJsdDMyIChoZGMsIHJjLmxlZnQsIHJjLnRvcCwgcmMucmlnaHQgLSByYy5sZWZ0LAorCQkgIHJjLmJvdHRvbSAtIHJjLnRvcCwgMHgwMEZBMDA4OSk7CisJU2VsZWN0T2JqZWN0MzIgKGhkYywgaGJyKTsKKy8vCUltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGlzLCBidG5QdHItPmlCaXRtYXAsIGhkYywKKy8vCQkJcmMubGVmdCsxLCByYy50b3ArMSwgSUxEX05PUk1BTCk7CisJcmV0dXJuOworICAgIH0KKworICAgIC8qIG5vcm1hbCBzdGF0ZSAqLworICAgIERyYXdFZGdlMzIgKGhkYywgJnJjLCBFREdFX1JBSVNFRCwKKwkJQkZfU09GVCB8IEJGX1JFQ1QgfCBCRl9NSURETEUgfCBCRl9BREpVU1QpOworICAgIEltYWdlTGlzdF9EcmF3IChpbmZvUHRyLT5oaW1sRGVmLCBidG5QdHItPmlCaXRtYXAsIGhkYywKKwkJICAgIHJjLmxlZnQrMSwgcmMudG9wKzEsIElMRF9OT1JNQUwpOwogfQogCiAKQEAgLTEzMCwxNCArMTUxLDEwIEBACiAgICAgVEJVVFRPTl9JTkZPICpidG5QdHI7CiAgICAgSU5UMzIgaTsKIAotCiAgICAgLyogZHJhdyBidXR0b25zICovCi0KICAgICBidG5QdHIgPSBpbmZvUHRyLT5idXR0b25zOwotICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGluZm9QdHItPm5OdW1CdXR0b25zOyBpKyssIGJ0blB0cisrKQogCVRPT0xCQVJfRHJhd0J1dHRvbiAod25kUHRyLCBidG5QdHIsIGhkYyk7Ci0JYnRuUHRyKys7Ci0gICAgfQogfQogCiAKQEAgLTE0NiwzMyArMTYzLDYzIEBACiB7CiAgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CiAgICAgVEJVVFRPTl9JTkZPICpidG5QdHI7Ci0gICAgUkVDVDMyIHJlY3Q7Ci0gICAgSU5UMzIgaTsKKyAgICBJTlQzMiBpLCBqLCBuUm93czsKKyAgICBJTlQzMiB4LCB5LCBjeCwgY3k7CisgICAgQk9PTDMyIGJWZXJ0aWNhbDsKIAotICAgIHJlY3QubGVmdCAgID0gaW5mb1B0ci0+bkluZGVudDsKLSAgICByZWN0LnRvcCAgICA9IGluZm9QdHItPm5CdXR0b25Ub3A7Ci0vLyAgICByZWN0LnJpZ2h0ICA9IHJlY3QubGVmdCArIGluZm9QdHItPm5CdXR0b25XaWR0aDsKLSAgICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgaW5mb1B0ci0+bkJ1dHRvbkhlaWdodDsKKyAgICB4ICA9IGluZm9QdHItPm5JbmRlbnQ7CisgICAgeSAgPSBUT1BfQk9SREVSOworICAgIGN4ID0gaW5mb1B0ci0+bkJ1dHRvbldpZHRoOworICAgIGN5ID0gaW5mb1B0ci0+bkJ1dHRvbkhlaWdodDsKKyAgICBuUm93cyA9IDE7CiAKICAgICBidG5QdHIgPSBpbmZvUHRyLT5idXR0b25zOwogICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrLCBidG5QdHIrKykgewotCWlmIChidG5QdHItPmZzU3RhdGUgJiBUQlNUQVRFX0hJRERFTikgewotCSAgICBidG5QdHItPnJlY3QubGVmdCA9IDA7Ci0JICAgIGJ0blB0ci0+cmVjdC5yaWdodCA9IDA7Ci0JICAgIGJ0blB0ci0+cmVjdC50b3AgPSAwOwotCSAgICBidG5QdHItPnJlY3QuYm90dG9tID0gMDsKKwliVmVydGljYWwgPSBGQUxTRTsKKworCWlmIChidG5QdHItPmZzU3RhdGUgJiBUQlNUQVRFX0hJRERFTikKIAkgICAgY29udGludWU7CisKKwlpZiAoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9TRVApIHsKKwkgICAgLyogVU5ET0NVTUVOVEVEOiBJZiBhIHNlcGFyYXRvciBoYXMgYSBub24gemVybyBiaXRtYXAgaW5kZXgsICovCisJICAgIC8qIGl0IGlzIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIHNlcGFyYXRvci4gVGhpcyBpcyB1c2VkIGZvciAqLworCSAgICAvKiBjdXN0b20gY29udHJvbHMgaW4gdG9vbGJhcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBUQlNUWUxFX1dSQVBBQkxFKSAmJgorCQkoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9XUkFQKSkgeworCQl4ID0gMDsKKwkJeSArPSBjeTsKKwkJY3ggPSBpbmZvUHRyLT5uV2lkdGg7CisJCWN5ID0gKChidG5QdHItPmlCaXRtYXAgPT0gMCkgPworCQkgICAgU0VQQVJBVE9SX1dJRFRIIDogYnRuUHRyLT5pQml0bWFwKSAqIDIgLyAzOworCQluUm93cysrOworCQliVmVydGljYWwgPSBUUlVFOworCSAgICB9CisJICAgIGVsc2UKKwkJY3ggPSAoYnRuUHRyLT5pQml0bWFwID09IDApID8KKwkJICAgIFNFUEFSQVRPUl9XSURUSCA6IGJ0blB0ci0+aUJpdG1hcDsKKwl9CisJZWxzZSB7CisJICAgIC8qIHRoaXMgbXVzdCBiZSBhIGJ1dHRvbiAqLworCSAgICBjeCA9IGluZm9QdHItPm5CdXR0b25XaWR0aDsKKwogCX0KIAotCWJ0blB0ci0+cmVjdCA9IHJlY3Q7Ci0JaWYgKGJ0blB0ci0+ZnNTdHlsZSAmIFRCU1RZTEVfU0VQKQotCSAgICBidG5QdHItPnJlY3QucmlnaHQgPSBidG5QdHItPnJlY3QubGVmdCArIFNFUEFSQVRPUl9XSURUSDsKKwlidG5QdHItPnJlY3QubGVmdCAgID0geDsKKwlidG5QdHItPnJlY3QudG9wICAgID0geTsKKwlidG5QdHItPnJlY3QucmlnaHQgID0geCArIGN4OworCWJ0blB0ci0+cmVjdC5ib3R0b20gPSB5ICsgY3k7CisKKwlpZiAoYlZlcnRpY2FsKSB7CisJICAgIHggPSAwOworCSAgICB5ICs9IGN5OworCSAgICBpZiAoaSA8IGluZm9QdHItPm5OdW1CdXR0b25zKQorCQluUm93cysrOworCX0KIAllbHNlCi0JICAgIGJ0blB0ci0+cmVjdC5yaWdodCA9IGJ0blB0ci0+cmVjdC5sZWZ0ICsgaW5mb1B0ci0+bkJ1dHRvbldpZHRoOwotCXJlY3QubGVmdCA9IGJ0blB0ci0+cmVjdC5yaWdodDsKKwkgICAgeCArPSBjeDsKICAgICB9CiAKLSAgICBpbmZvUHRyLT5uSGVpZ2h0ID0gcmVjdC5ib3R0b20gKyA4OworICAgIGluZm9QdHItPm5IZWlnaHQgPSB5ICsgY3kgKyBCT1RUT01fQk9SREVSOwogfQogCiAKQEAgLTE4Myw5ICsyMzAsOCBAQAogICAgIFRCVVRUT05fSU5GTyAqYnRuUHRyOwogICAgIElOVDMyIGk7CiAgICAgCi0KICAgICBidG5QdHIgPSBpbmZvUHRyLT5idXR0b25zOwotICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGluZm9QdHItPm5OdW1CdXR0b25zOyBpKyssIGJ0blB0cisrKSB7CiAJaWYgKGJ0blB0ci0+ZnNTdHlsZSAmIFRCU1RZTEVfU0VQKSB7CiAJICAgIGlmIChQdEluUmVjdDMyICgmYnRuUHRyLT5yZWN0LCAqbHBQdCkpIHsKIAkJVFJBQ0UgKHRvb2xiYXIsICIgT04gU0VQQVJBVE9SICVkIVxuIiwgaSk7CkBAIC0xOTcsMTAgKzI0Myw3IEBACiAJCVRSQUNFICh0b29sYmFyLCAiIE9OIEJVVFRPTiAlZCFcbiIsIGkpOwogCQlyZXR1cm4gaTsKIAkgICAgfQotCiAJfQotCi0JYnRuUHRyKys7CiAgICAgfQogCiAgICAgVFJBQ0UgKHRvb2xiYXIsICIgTk9XSEVSRSFcbiIpOwpAQCAtMjE1LDEyICsyNTgsMTEgQEAKICAgICBJTlQzMiBpOwogCiAgICAgYnRuUHRyID0gaW5mb1B0ci0+YnV0dG9uczsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mb1B0ci0+bk51bUJ1dHRvbnM7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrLCBidG5QdHIrKykgewogCWlmIChidG5QdHItPmlkQ29tbWFuZCA9PSBpZENvbW1hbmQpIHsKIAkgICAgVFJBQ0UgKHRvb2xiYXIsICJjb21tYW5kPSVkIGluZGV4PSVkXG4iLCBpZENvbW1hbmQsIGkpOwogCSAgICByZXR1cm4gaTsKIAl9Ci0JYnRuUHRyKys7CiAgICAgfQogICAgIFRSQUNFICh0b29sYmFyLCAibm8gaW5kZXggZm91bmQgZm9yIGNvbW1hbmQ9JWRcbiIsIGlkQ29tbWFuZCk7CiAgICAgcmV0dXJuIC0xOwpAQCAtMjg5LDI4ICszMzEsMTUgQEAKIAkvKiBjcmVhdGUgbmV3IGRlZmF1bHQgaW1hZ2UgbGlzdCAqLwogCVRSQUNFICh0b29sYmFyLCAiY3JlYXRpbmcgZGVmYXVsdCBpbWFnZSBsaXN0IVxuIik7CiAJaW5mb1B0ci0+aGltbERlZiA9Ci0JICAgIEltYWdlTGlzdF9DcmVhdGUgKGluZm9QdHItPm5CaXRtYXBXaWR0aCwgCi0JCQkgICAgICBpbmZvUHRyLT5uQml0bWFwSGVpZ2h0LCBJTENfQ09MT1IgfCBJTENfTUFTSywKLQkJCSAgICAgIChJTlQzMil3UGFyYW0sIDIpOworCSAgICBJbWFnZUxpc3RfQ3JlYXRlIChpbmZvUHRyLT5uQml0bWFwV2lkdGgsIGluZm9QdHItPm5CaXRtYXBIZWlnaHQsCisJCQkgICAgICBJTENfQ09MT1IgfCBJTENfTUFTSywgKElOVDMyKXdQYXJhbSwgMik7CiAgICAgfQogCi0jaWYgMAotICAgIGlmICghKGluZm9QdHItPmhpbWxEaXMpKSB7Ci0JLyogY3JlYXRlIG5ldyBkaXNhYmxlZCBpbWFnZSBsaXN0ICovCi0JVFJBQ0UgKHRvb2xiYXIsICJjcmVhdGluZyBkaXNhYmxlZCBpbWFnZSBsaXN0IVxuIik7Ci0JaW5mb1B0ci0+aGltbERpcyA9Ci0JICAgIEltYWdlTGlzdF9DcmVhdGUgKGluZm9QdHItPm5CaXRtYXBXaWR0aCwgCi0JCQkgICAgICBpbmZvUHRyLT5uQml0bWFwSGVpZ2h0LCBJTENfQ09MT1IgfCBJTENfTUFTSywKLQkJCSAgICAgIChJTlQzMil3UGFyYW0sIDIpOwotICAgIH0KLSNlbmRpZgotCiAgICAgLyogQWRkIGJpdG1hcHMgdG8gdGhlIGRlZmF1bHQgaW1hZ2UgbGlzdCAqLwogICAgIGlmIChscEFkZEJtcC0+aEluc3QgPT0gKEhJTlNUQU5DRTMyKTApIHsKIAluSW5kZXggPSAKIAkgICAgSW1hZ2VMaXN0X0FkZE1hc2tlZCAoaW5mb1B0ci0+aGltbERlZiwgKEhCSVRNQVAzMilscEFkZEJtcC0+bklELAotCQkJCSAweEMwQzBDMCk7Ci0vLwkJCQkgR2V0U3lzQ29sb3IzMiAoQ09MT1JfM0RGQUNFKSk7CisJCQkJIEdldFN5c0NvbG9yMzIgKENPTE9SXzNERkFDRSkpOwogICAgIH0KICAgICBlbHNlIGlmIChscEFkZEJtcC0+aEluc3QgPT0gSElOU1RfQ09NTUNUUkwpIHsKIAkvKiBhZGQgaW50ZXJuYWwgYml0bWFwcyAqLwpAQCAtMzUzLDE3ICszODIsMTcgQEAKIAogICAgIGlmIChpbmZvUHRyLT5uTnVtQnV0dG9ucyA9PSAwKSB7CiAJaW5mb1B0ci0+YnV0dG9ucyA9Ci0JICAgIEhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwKKwkgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKIAkJICAgICAgIHNpemVvZiAoVEJVVFRPTl9JTkZPKSAqIG5OZXdCdXR0b25zKTsKICAgICB9CiAgICAgZWxzZSB7CiAJVEJVVFRPTl9JTkZPICpvbGRCdXR0b25zID0gaW5mb1B0ci0+YnV0dG9uczsKIAlpbmZvUHRyLT5idXR0b25zID0KLQkgICAgSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorCSAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogCQkgICAgICAgc2l6ZW9mIChUQlVUVE9OX0lORk8pICogbk5ld0J1dHRvbnMpOwogCW1lbWNweSAoJmluZm9QdHItPmJ1dHRvbnNbMF0sICZvbGRCdXR0b25zWzBdLAogCQluT2xkQnV0dG9ucyAqIHNpemVvZihUQlVUVE9OX0lORk8pKTsKLSAgICAgICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIG9sZEJ1dHRvbnMpOworICAgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG9sZEJ1dHRvbnMpOwogICAgIH0KIAogICAgIGluZm9QdHItPm5OdW1CdXR0b25zID0gbk5ld0J1dHRvbnM7CkBAIC00MDksMjAgKzQzOCwyMCBAQAogCW5JbmRleCA9IGluZm9QdHItPm5OdW1TdHJpbmdzOwogCWlmIChpbmZvUHRyLT5uTnVtU3RyaW5ncyA9PSAwKSB7CiAJICAgIGluZm9QdHItPnN0cmluZ3MgPQotCQlIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksIHNpemVvZihjaGFyICopKTsKKwkJSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwgc2l6ZW9mKGNoYXIgKikpOwogCX0KIAllbHNlIHsKIAkgICAgY2hhciAqKm9sZFN0cmluZ3MgPSBpbmZvUHRyLT5zdHJpbmdzOwogCSAgICBpbmZvUHRyLT5zdHJpbmdzID0KLQkJSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorCQlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogCQkJICAgc2l6ZW9mKGNoYXIgKikgKiAoaW5mb1B0ci0+bk51bVN0cmluZ3MgKyAxKSk7CiAJICAgIG1lbWNweSAoJmluZm9QdHItPnN0cmluZ3NbMF0sICZvbGRTdHJpbmdzWzBdLAogCQkgICAgc2l6ZW9mKGNoYXIgKikgKiBpbmZvUHRyLT5uTnVtU3RyaW5ncyk7Ci0JICAgIEhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBvbGRTdHJpbmdzKTsKKwkgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBvbGRTdHJpbmdzKTsKIAl9CiAKIAlpbmZvUHRyLT5zdHJpbmdzW2luZm9QdHItPm5OdW1TdHJpbmdzXSA9Ci0JICAgIEhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwgc2l6ZW9mKGNoYXIpKihsZW4rMSkpOworCSAgICBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoY2hhcikqKGxlbisxKSk7CiAJbHN0cmNweTMyQSAoaW5mb1B0ci0+c3RyaW5nc1tpbmZvUHRyLT5uTnVtU3RyaW5nc10sIHN6U3RyaW5nKTsKIAlpbmZvUHRyLT5uTnVtU3RyaW5ncysrOwogICAgIH0KQEAgLTQzOSwyMCArNDY4LDIwIEBACiAKIAkgICAgaWYgKGluZm9QdHItPm5OdW1TdHJpbmdzID09IDApIHsKIAkJaW5mb1B0ci0+c3RyaW5ncyA9Ci0JCSAgICBIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksIHNpemVvZihjaGFyICopKTsKKwkJICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksIHNpemVvZihjaGFyICopKTsKIAkgICAgfQogCSAgICBlbHNlIHsKIAkJY2hhciAqKm9sZFN0cmluZ3MgPSBpbmZvUHRyLT5zdHJpbmdzOwogCQlpbmZvUHRyLT5zdHJpbmdzID0KLQkJICAgIEhlYXBBbGxvYyAoU3lzdGVtSGVhcCwgSEVBUF9aRVJPX01FTU9SWSwKKwkJICAgIEhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCiAJCQkgICAgICAgc2l6ZW9mKGNoYXIgKikgKiAoaW5mb1B0ci0+bk51bVN0cmluZ3MgKyAxKSk7CiAJCW1lbWNweSAoJmluZm9QdHItPnN0cmluZ3NbMF0sICZvbGRTdHJpbmdzWzBdLAogCQkJc2l6ZW9mKGNoYXIgKikgKiBpbmZvUHRyLT5uTnVtU3RyaW5ncyk7Ci0JCUhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBvbGRTdHJpbmdzKTsKKwkJSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBvbGRTdHJpbmdzKTsKIAkgICAgfQogCiAJICAgIGluZm9QdHItPnN0cmluZ3NbaW5mb1B0ci0+bk51bVN0cmluZ3NdID0KLQkJSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLCBzaXplb2YoY2hhcikqKGxlbisxKSk7CisJCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksIHNpemVvZihjaGFyKSoobGVuKzEpKTsKIAkgICAgbHN0cmNweTMyQSAoaW5mb1B0ci0+c3RyaW5nc1tpbmZvUHRyLT5uTnVtU3RyaW5nc10sIHApOwogCSAgICBpbmZvUHRyLT5uTnVtU3RyaW5ncysrOwogCkBAIC00OTMsNiArNTIyLDEyIEBACiB7CiAgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CiAKKyAgICBpZiAoaW5mb1B0ciA9PSBOVUxMKSB7CisJRVJSICh0b29sYmFyLCAiKDB4JTA4bHgsIDB4JTA4eCwgMHglMDhseClcbiIsIChEV09SRCl3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwlFUlIgKHRvb2xiYXIsICJpbmZvUHRyID09IE5VTEwhXG4iKTsKKwlyZXR1cm4gMDsKKyAgICB9CisKICAgICBpbmZvUHRyLT5kd1N0cnVjdFNpemUgPSAoRFdPUkQpd1BhcmFtOwogCiAgICAgcmV0dXJuIDA7CkBAIC01NzUsNyArNjEwLDEzIEBACiB9CiAKIAotLy8gPDwgVE9PTEJBUl9DdXN0b21pemUgPj4KK3N0YXRpYyBMUkVTVUxUCitUT09MQkFSX0N1c3RvbWl6ZSAoV05EICp3bmRQdHIpCit7CisgICAgRklYTUUgKHRvb2xiYXIsICJjdXN0b21pemF0aW9uIG5vdCBpbXBsZW1lbnRlZCFcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CiAKIAogc3RhdGljIExSRVNVTFQKQEAgLTU4OSw3ICs2MzAsNyBAQAogCiAgICAgaWYgKGluZm9QdHItPm5OdW1CdXR0b25zID09IDEpIHsKIAlUUkFDRSAodG9vbGJhciwgIiBzaW1wbGUgZGVsZXRlIVxuIik7Ci0JSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGluZm9QdHItPmJ1dHRvbnMpOworCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+YnV0dG9ucyk7CiAJaW5mb1B0ci0+YnV0dG9ucyA9IE5VTEw7CiAJaW5mb1B0ci0+bk51bUJ1dHRvbnMgPSAwOwogICAgIH0KQEAgLTU5OCw3ICs2MzksNyBAQAogICAgICAgICBUUkFDRSh0b29sYmFyLCAiY29tcGxleCBkZWxldGUhIFtuSW5kZXg9JWRdXG4iLCBuSW5kZXgpOwogCiAJaW5mb1B0ci0+bk51bUJ1dHRvbnMtLTsKLQlpbmZvUHRyLT5idXR0b25zID0gSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorCWluZm9QdHItPmJ1dHRvbnMgPSBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogCQkJCSAgICAgIHNpemVvZiAoVEJVVFRPTl9JTkZPKSAqIGluZm9QdHItPm5OdW1CdXR0b25zKTsKICAgICAgICAgaWYgKG5JbmRleCA+IDApIHsKICAgICAgICAgICAgIG1lbWNweSAoJmluZm9QdHItPmJ1dHRvbnNbMF0sICZvbGRCdXR0b25zWzBdLApAQCAtNjEwLDcgKzY1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIChpbmZvUHRyLT5uTnVtQnV0dG9ucyAtIG5JbmRleCkgKiBzaXplb2YoVEJVVFRPTl9JTkZPKSk7CiAgICAgICAgIH0KIAotICAgICAgICBIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgb2xkQnV0dG9ucyk7CisgICAgICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgb2xkQnV0dG9ucyk7CiAgICAgfQogCiAgICAgVE9PTEJBUl9DYWxjVG9vbGJhciAod25kUHRyKTsKQEAgLTYzNiw3ICs2NzcsNyBAQAogCiAgICAgYnRuUHRyID0gJmluZm9QdHItPmJ1dHRvbnNbbkluZGV4XTsKICAgICBpZiAoTE9XT1JEKGxQYXJhbSkgPT0gRkFMU0UpCi0JYnRuUHRyLT5mc1N0YXRlICY9IH5UQlNUQVRFX0VOQUJMRUQ7CisJYnRuUHRyLT5mc1N0YXRlICY9IH4oVEJTVEFURV9FTkFCTEVEIHwgVEJTVEFURV9QUkVTU0VEKTsKICAgICBlbHNlCiAJYnRuUHRyLT5mc1N0YXRlIHw9IFRCU1RBVEVfRU5BQkxFRDsKIApAQCAtNzAwLDcgKzc0MSwxNiBAQAogCiAKIC8vIDw8IFRPT0xCQVJfR2V0QnV0dG9uSW5mbyA+PgotLy8gPDwgVE9PTEJBUl9HZXRCdXR0b25TaXplID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xCQVJfR2V0QnV0dG9uU2l6ZSAoV05EICp3bmRQdHIpCit7CisgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICByZXR1cm4gTUFLRUxPTkcoKFdPUkQpaW5mb1B0ci0+bkJ1dHRvbldpZHRoLAorCQkgICAgKFdPUkQpaW5mb1B0ci0+bkJ1dHRvbkhlaWdodCk7Cit9CiAKIAogc3RhdGljIExSRVNVTFQKQEAgLTkwNCw3ICs5NTQsNyBAQAogCiAgICAgb2xkQnV0dG9ucyA9IGluZm9QdHItPmJ1dHRvbnM7CiAgICAgaW5mb1B0ci0+bk51bUJ1dHRvbnMrKzsKLSAgICBpbmZvUHRyLT5idXR0b25zID0gSGVhcEFsbG9jIChTeXN0ZW1IZWFwLCBIRUFQX1pFUk9fTUVNT1JZLAorICAgIGluZm9QdHItPmJ1dHRvbnMgPSBIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAogCQkJCSAgc2l6ZW9mIChUQlVUVE9OX0lORk8pICogaW5mb1B0ci0+bk51bUJ1dHRvbnMpOwogICAgIC8qIHByZSBpbnNlcnQgY29weSAqLwogICAgIGlmIChuSW5kZXggPiAwKSB7CkBAIC05MjYsNyArOTc2LDcgQEAKIAkJKGluZm9QdHItPm5OdW1CdXR0b25zIC0gbkluZGV4IC0gMSkgKiBzaXplb2YoVEJVVFRPTl9JTkZPKSk7CiAgICAgfQogCi0gICAgSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIG9sZEJ1dHRvbnMpOworICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgb2xkQnV0dG9ucyk7CiAKICAgICBUT09MQkFSX0NhbGNUb29sYmFyICh3bmRQdHIpOwogCkBAIC0xMDU5LDcgKzExMDksMzcgQEAKIAogCiAvLyA8PCBUT09MQkFSX1JlcGxhY2VCaXRtYXAgPj4KLS8vIDw8IFRPT0xCQVJfU2F2ZVJlc3RvcmUgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9TYXZlUmVzdG9yZTMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBMUFRCU0FWRVBBUkFNUzMyQSBscFNhdmUgPSAoTFBUQlNBVkVQQVJBTVMzMkEpbFBhcmFtOworCisgICAgaWYgKGxwU2F2ZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAgIGlmICgoQk9PTDMyKXdQYXJhbSkgeworCS8qIHNhdmUgdG9vbGJhciBpbmZvcm1hdGlvbiAqLworCUZJWE1FICh0b29sYmFyLCAic2F2ZSB0byBcIiVzXCIgXCIlc1wiXG4iLAorCSAgICAgICBscFNhdmUtPnBzelN1YktleSwgbHBTYXZlLT5wc3pWYWx1ZU5hbWUpOworCisKKyAgICB9CisgICAgZWxzZSB7CisJLyogcmVzdG9yZSB0b29sYmFyIGluZm9ybWF0aW9uICovCisKKwlGSVhNRSAodG9vbGJhciwgInJlc3RvcmUgZnJvbSBcIiVzXCIgXCIlc1wiXG4iLAorCSAgICAgICBscFNhdmUtPnBzelN1YktleSwgbHBTYXZlLT5wc3pWYWx1ZU5hbWUpOworCisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisvLyA8PCBUT09MQkFSX1NhdmVSZXN0b3JlMzJXID4+CiAvLyA8PCBUT09MQkFSX1NldEFuY2hvckhpZ2hsaWdodCA+PgogCiAKQEAgLTEyMzMsMjYgKzEzMTMsMTUgQEAKIHN0YXRpYyBMUkVTVUxUCiBUT09MQkFSX0NyZWF0ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBUT09MQkFSX0lORk8gKmluZm9QdHI7Ci0KLSAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZm8gc3RydWN0dXJlICovCi0gICAgaW5mb1B0ciA9IChUT09MQkFSX0lORk8gKilIZWFwQWxsb2MgKFN5c3RlbUhlYXAsIEhFQVBfWkVST19NRU1PUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUT09MQkFSX0lORk8pKTsKLSAgICB3bmRQdHItPndFeHRyYVswXSA9IChEV09SRClpbmZvUHRyOwotCi0gICAgaWYgKGluZm9QdHIgPT0gTlVMTCkgewotCUVSUiAodG9vbGJhciwgImNvdWxkIG5vdCBhbGxvY2F0ZSBpbmZvIG1lbW9yeSFcbiIpOwotCXJldHVybiAwOwotICAgIH0KKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKIAogICAgIC8qIGluaXRpYWxpemUgaW5mbyBzdHJ1Y3R1cmUgKi8KICAgICBpbmZvUHRyLT5uQnV0dG9uSGVpZ2h0ID0gMjI7CiAgICAgaW5mb1B0ci0+bkJ1dHRvbldpZHRoID0gMjM7Ci0gICAgaW5mb1B0ci0+bkJ1dHRvblRvcCA9IDI7CiAgICAgaW5mb1B0ci0+bkJpdG1hcEhlaWdodCA9IDE1OwogICAgIGluZm9QdHItPm5CaXRtYXBXaWR0aCA9IDE2OwogCi0gICAgaW5mb1B0ci0+bkhlaWdodCA9IGluZm9QdHItPm5CdXR0b25IZWlnaHQgKyA2OworICAgIGluZm9QdHItPm5IZWlnaHQgPSBpbmZvUHRyLT5uQnV0dG9uSGVpZ2h0ICsgVE9QX0JPUkRFUiArIEJPVFRPTV9CT1JERVI7CiAgICAgaW5mb1B0ci0+bk1heFJvd3MgPSAxOwogCiAgICAgaW5mb1B0ci0+YkNhcHR1cmVkID0gMDsKQEAgLTEyNjAsNiArMTMyOSw4IEBACiAgICAgaW5mb1B0ci0+bk9sZEhpdCA9IC0xOwogCiAgICAgaW5mb1B0ci0+aHduZE5vdGlmeSA9IEdldFBhcmVudDMyICh3bmRQdHItPmh3bmRTZWxmKTsKKyAgICBpbmZvUHRyLT5iVHJhbnNwYXJlbnQgPSAod25kUHRyLT5kd1N0eWxlICYgVEJTVFlMRV9GTEFUKTsKKyAgICBpbmZvUHRyLT5uSG90SXRlbSA9IC0xOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMjc2LDE2ICsxMzQ3LDE2IEBACiAKICAgICAvKiBkZWxldGUgYnV0dG9uIGRhdGEgKi8KICAgICBpZiAoaW5mb1B0ci0+YnV0dG9ucykKLQlIZWFwRnJlZSAoU3lzdGVtSGVhcCwgMCwgaW5mb1B0ci0+YnV0dG9ucyk7CisJSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBpbmZvUHRyLT5idXR0b25zKTsKIAogICAgIC8qIGRlbGV0ZSBzdHJpbmdzICovCiAgICAgaWYgKGluZm9QdHItPnN0cmluZ3MpIHsKIAlJTlQzMiBpOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtU3RyaW5nczsgaSsrKQogCSAgICBpZiAoaW5mb1B0ci0+c3RyaW5nc1tpXSkKLQkJSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGluZm9QdHItPnN0cmluZ3NbaV0pOworCQlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPnN0cmluZ3NbaV0pOwogCi0JSGVhcEZyZWUgKFN5c3RlbUhlYXAsIDAsIGluZm9QdHItPnN0cmluZ3MpOworCUhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0ci0+c3RyaW5ncyk7CiAgICAgfQogCiAgICAgLyogZGVzdHJveSBkZWZhdWx0IGltYWdlIGxpc3QgKi8KQEAgLTEzMDEsNyArMTM3Miw3IEBACiAJSW1hZ2VMaXN0X0Rlc3Ryb3kgKGluZm9QdHItPmhpbWxIb3QpOwogCiAgICAgLyogZnJlZSB0b29sYmFyIGluZm8gZGF0YSAqLwotICAgIEhlYXBGcmVlIChTeXN0ZW1IZWFwLCAwLCBpbmZvUHRyKTsKKyAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHIpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMzM0LDExICsxNDA1LDggQEAKIAlUT09MQkFSX0RyYXdCdXR0b24gKHduZFB0ciwgYnRuUHRyLCBoZGMpOwogCVJlbGVhc2VEQzMyICh3bmRQdHItPmh3bmRTZWxmLCBoZGMpOwogICAgIH0KLSAgICBlbHNlIGlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfQURKVVNUQUJMRSkgewotCS8qIGN1c3RvbWl6ZSAqLwotCi0JRklYTUUgKHRvb2xiYXIsICJjdXN0b21pemF0aW9uIG5vdCBpbXBsZW1lbnRlZCFcbiIpOwotICAgIH0KKyAgICBlbHNlIGlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfQURKVVNUQUJMRSkKKwlUT09MQkFSX0N1c3RvbWl6ZSAod25kUHRyKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtMTM4OCw2ICsxNDU2LDcgQEAKICAgICBJTlQzMiAgIG5IaXQ7CiAgICAgSU5UMzIgICBuT2xkSW5kZXggPSAtMTsKICAgICBIREMzMiAgIGhkYzsKKyAgICBCT09MMzIgIGJTZW5kTWVzc2FnZSA9IFRSVUU7CiAKICAgICBwdC54ID0gKElOVDMyKUxPV09SRChsUGFyYW0pOwogICAgIHB0LnkgPSAoSU5UMzIpSElXT1JEKGxQYXJhbSk7CkBAIC0xMzk5LDI1ICsxNDY4LDI4IEBACiAJYnRuUHRyID0gJmluZm9QdHItPmJ1dHRvbnNbaW5mb1B0ci0+bkJ1dHRvbkRvd25dOwogCWJ0blB0ci0+ZnNTdGF0ZSAmPSB+VEJTVEFURV9QUkVTU0VEOwogCi0JaWYgKGJ0blB0ci0+ZnNTdHlsZSAmIFRCU1RZTEVfQ0hFQ0spIHsKLQkgICAgaWYgKGJ0blB0ci0+ZnNTdHlsZSAmIFRCU1RZTEVfR1JPVVApIHsKLQkJbk9sZEluZGV4ID0gVE9PTEJBUl9HZXRDaGVja2VkR3JvdXBCdXR0b25JbmRleCAoaW5mb1B0ciwgaW5mb1B0ci0+bkJ1dHRvbkRvd24pOwotCQlpZiAobk9sZEluZGV4ID09IGluZm9QdHItPm5CdXR0b25Eb3duKQotCQkgICAgcmV0dXJuIDA7Ci0JCWlmIChuT2xkSW5kZXggIT0gLTEpCi0JCSAgICBpbmZvUHRyLT5idXR0b25zW25PbGRJbmRleF0uZnNTdGF0ZSAmPSB+VEJTVEFURV9DSEVDS0VEOwotCQlidG5QdHItPmZzU3RhdGUgfD0gVEJTVEFURV9DSEVDS0VEOwotCSAgICB9Ci0JICAgIGVsc2UgewotCQlpZiAoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9DSEVDS0VEKQotCQkgICAgYnRuUHRyLT5mc1N0YXRlICY9IH5UQlNUQVRFX0NIRUNLRUQ7Ci0JCWVsc2UKKwlpZiAobkhpdCA9PSBpbmZvUHRyLT5uQnV0dG9uRG93bikgeworCSAgICBpZiAoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9DSEVDSykgeworCQlpZiAoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9HUk9VUCkgeworCQkgICAgbk9sZEluZGV4ID0gVE9PTEJBUl9HZXRDaGVja2VkR3JvdXBCdXR0b25JbmRleCAoaW5mb1B0ciwKKwkJCWluZm9QdHItPm5CdXR0b25Eb3duKTsKKwkJICAgIGlmIChuT2xkSW5kZXggPT0gaW5mb1B0ci0+bkJ1dHRvbkRvd24pCisJCQliU2VuZE1lc3NhZ2UgPSBGQUxTRTsKKwkJICAgIGlmICgobk9sZEluZGV4ICE9IGluZm9QdHItPm5CdXR0b25Eb3duKSAmJiAKKwkJCShuT2xkSW5kZXggIT0gLTEpKQorCQkJaW5mb1B0ci0+YnV0dG9uc1tuT2xkSW5kZXhdLmZzU3RhdGUgJj0gflRCU1RBVEVfQ0hFQ0tFRDsKIAkJICAgIGJ0blB0ci0+ZnNTdGF0ZSB8PSBUQlNUQVRFX0NIRUNLRUQ7CisJCX0KKwkJZWxzZSB7CisJCSAgICBpZiAoYnRuUHRyLT5mc1N0YXRlICYgVEJTVEFURV9DSEVDS0VEKQorCQkJYnRuUHRyLT5mc1N0YXRlICY9IH5UQlNUQVRFX0NIRUNLRUQ7CisJCSAgICBlbHNlCisJCQlidG5QdHItPmZzU3RhdGUgfD0gVEJTVEFURV9DSEVDS0VEOworCQl9CiAJICAgIH0KIAl9Ci0KLQlpbmZvUHRyLT5uQnV0dG9uRG93biA9IC0xOwotCWluZm9QdHItPm5PbGRIaXQgPSAtMTsKKwllbHNlCisJICAgIGJTZW5kTWVzc2FnZSA9IEZBTFNFOwogCiAJaGRjID0gR2V0REMzMiAod25kUHRyLT5od25kU2VsZik7CiAJaWYgKG5PbGRJbmRleCAhPSAtMSkKQEAgLTE0MjUsOSArMTQ5NywxMyBAQAogCVRPT0xCQVJfRHJhd0J1dHRvbiAod25kUHRyLCBidG5QdHIsIGhkYyk7CiAJUmVsZWFzZURDMzIgKHduZFB0ci0+aHduZFNlbGYsIGhkYyk7CiAKLQlTZW5kTWVzc2FnZTMyQSAoR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpLCBXTV9DT01NQU5ELAotCQkJTUFLRVdQQVJBTShidG5QdHItPmlkQ29tbWFuZCwgMCksCi0JCQkoTFBBUkFNKXduZFB0ci0+aHduZFNlbGYpOworCWlmIChiU2VuZE1lc3NhZ2UpCisJICAgIFNlbmRNZXNzYWdlMzJBIChpbmZvUHRyLT5od25kTm90aWZ5LCBXTV9DT01NQU5ELAorCQkJICAgIE1BS0VXUEFSQU0oYnRuUHRyLT5pZENvbW1hbmQsIDApLAorCQkJICAgIChMUEFSQU0pd25kUHRyLT5od25kU2VsZik7CisKKwlpbmZvUHRyLT5uQnV0dG9uRG93biA9IC0xOworCWluZm9QdHItPm5PbGRIaXQgPSAtMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE0NzAsMzQgKzE1NDYsNDMgQEAKIH0KIAogCi0KLQotCiBzdGF0aWMgTFJFU1VMVAogVE9PTEJBUl9OQ0NhbGNTaXplIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewotICAgIFJFQ1QzMiB0bXBSZWN0ID0gezAsIDAsIDAsIDB9OwotICAgIExQUkVDVDMyIHdpblJlY3Q7Ci0KLS8vICAgIERlZldpbmRvd1Byb2MzMkEgKHduZFB0ci0+aHduZFNlbGYsIFdNX05DQ0FMQ1NJWkUsIHdQYXJhbSwgbFBhcmFtKTsKLQotICAgIHdpblJlY3QgPSAoTFBSRUNUMzIpbFBhcmFtOwotCi0vLyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQk9SREVSKQotLy8JSW5mbGF0ZVJlY3QzMiAoJnRtcFJlY3QsIDEsIDEpOwotCiAgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgQ0NTX05PRElWSURFUikpIHsKLQl0bXBSZWN0LnRvcCAtPSAyOwotCXRtcFJlY3QuYm90dG9tIC09IDI7CisJTFBSRUNUMzIgd2luUmVjdCAgPSAoTFBSRUNUMzIpbFBhcmFtOworCXdpblJlY3QtPnRvcCAgICArPSAyOyAgIAorCXdpblJlY3QtPmJvdHRvbSArPSAyOyAgIAogICAgIH0KIAotICAgIHdpblJlY3QtPmxlZnQgICAtPSB0bXBSZWN0LmxlZnQ7ICAgCi0gICAgd2luUmVjdC0+dG9wICAgIC09IHRtcFJlY3QudG9wOyAgIAotICAgIHdpblJlY3QtPnJpZ2h0ICAtPSB0bXBSZWN0LnJpZ2h0OyAgIAotICAgIHdpblJlY3QtPmJvdHRvbSAtPSB0bXBSZWN0LmJvdHRvbTsgICAKLQogICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBICh3bmRQdHItPmh3bmRTZWxmLCBXTV9OQ0NBTENTSVpFLCB3UGFyYW0sIGxQYXJhbSk7Ci0vLyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9OQ0NyZWF0ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHI7CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluZm8gc3RydWN0dXJlICovCisgICAgaW5mb1B0ciA9IChUT09MQkFSX0lORk8gKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVE9PTEJBUl9JTkZPKSk7CisgICAgd25kUHRyLT53RXh0cmFbMF0gPSAoRFdPUkQpaW5mb1B0cjsKKworICAgIGlmIChpbmZvUHRyID09IE5VTEwpIHsKKwlFUlIgKHRvb2xiYXIsICJjb3VsZCBub3QgYWxsb2NhdGUgaW5mbyBtZW1vcnkhXG4iKTsKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoKFRPT0xCQVJfSU5GTyopd25kUHRyLT53RXh0cmFbMF0gIT0gaW5mb1B0cikgeworCUVSUiAodG9vbGJhciwgInBvaW50ZXIgYXNzaWdubWVudCBlcnJvciFcbiIpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIHRoaXMgaXMganVzdCBmb3Igc2VjdXJpdHkgKHJlbGlhYmxlPz8pKi8KKyAgICBpbmZvUHRyLT5kd1N0cnVjdFNpemUgPSBzaXplb2YoVEJCVVRUT04pOworCisgICAgcmV0dXJuIERlZldpbmRvd1Byb2MzMkEgKHduZFB0ci0+aHduZFNlbGYsIFdNX05DQ1JFQVRFLCB3UGFyYW0sIGxQYXJhbSk7CiB9CiAKIApAQCAtMTU2OCwzMiArMTY1Myw0NCBAQAogICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOwogICAgIFJFQ1QzMiBwYXJlbnRfcmVjdDsKICAgICBIV05EMzIgcGFyZW50OworICAgIElOVDMyICB4LCB5LCBjeCwgY3k7CiAgICAgSU5UMzIgIGZsYWdzOworICAgIFVJTlQzMiB1UG9zRmxhZ3MgPSAwOwogCiAgICAgZmxhZ3MgPSAoSU5UMzIpIHdQYXJhbTsKIAogICAgIC8qIEZJWE1FIGZvciBmbGFncyA9Ci0gICAgICogU0laRV9NQVhJTUlaRUQsIFNJWkVfTUFYU0hPVywgU0laRV9NSU5JTUlaRUQsIFNJWkVfUkVTVE9SRUQKKyAgICAgKiBTSVpFX01BWElNSVpFRCwgU0laRV9NQVhTSE9XLCBTSVpFX01JTklNSVpFRAogICAgICAqLwogCi0vLyAgICBpZiAoZmxhZ3MgPT0gU0laRV9SRVNUT1JFRCkgeworICAgIGlmIChmbGFncyA9PSBTSVpFX1JFU1RPUkVEKSB7CiAJLyogd2lkdGggYW5kIGhlaWdodCBkb24ndCBhcHBseSAqLwogCXBhcmVudCA9IEdldFBhcmVudDMyICh3bmRQdHItPmh3bmRTZWxmKTsKIAlHZXRDbGllbnRSZWN0MzIocGFyZW50LCAmcGFyZW50X3JlY3QpOwotICAgICAgICBpbmZvUHRyLT5uV2lkdGggPSBwYXJlbnRfcmVjdC5yaWdodCAtIHBhcmVudF9yZWN0LmxlZnQ7Ci0JVE9PTEJBUl9DYWxjVG9vbGJhciAod25kUHRyKTsKLQlNb3ZlV2luZG93MzIod25kUHRyLT5od25kU2VsZiwgcGFyZW50X3JlY3QubGVmdCwgcGFyZW50X3JlY3QudG9wLCAvLzAsIDAsCi0JCSAgICAgaW5mb1B0ci0+bldpZHRoLCBpbmZvUHRyLT5uSGVpZ2h0LCBUUlVFKTsKLS8vICAgIH0KKworCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9SRVNJWkUpCisJICAgIHVQb3NGbGFncyB8PSBTV1BfTk9TSVpFOworCWVsc2UgeworCSAgICBpbmZvUHRyLT5uV2lkdGggPSBwYXJlbnRfcmVjdC5yaWdodCAtIHBhcmVudF9yZWN0LmxlZnQ7CisJICAgIFRPT0xCQVJfQ2FsY1Rvb2xiYXIgKHduZFB0cik7CisJICAgIGN5ID0gaW5mb1B0ci0+bkhlaWdodDsKKwkgICAgY3ggPSBpbmZvUHRyLT5uV2lkdGg7CisJfQorCisJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT1BBUkVOVEFMSUdOKSB7CisJICAgIHVQb3NGbGFncyB8PSBTV1BfTk9NT1ZFOworCX0KKworCWlmICghKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT0RJVklERVIpKQorCSAgICBjeSArPSAyOworCisJU2V0V2luZG93UG9zMzIgKHduZFB0ci0+aHduZFNlbGYsIDAsIHBhcmVudF9yZWN0LmxlZnQsIHBhcmVudF9yZWN0LnRvcCwKKwkJCWN4LCBjeSwgdVBvc0ZsYWdzIHwgU1dQX05PWk9SREVSKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIAotCi0KLQotCi0KIExSRVNVTFQgV0lOQVBJCiBUb29sYmFyV2luZG93UHJvYyAoSFdORDMyIGh3bmQsIFVJTlQzMiB1TXNnLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CkBAIC0xNjMyLDcgKzE3MjksOCBAQAogCWNhc2UgVEJfQ09NTUFORFRPSU5ERVg6CiAJICAgIHJldHVybiBUT09MQkFSX0NvbW1hbmRUb0luZGV4ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAotLy8JY2FzZSBUQl9DVVNUT01JWkU6CisJY2FzZSBUQl9DVVNUT01JWkU6CisJICAgIHJldHVybiBUT09MQkFSX0N1c3RvbWl6ZSAod25kUHRyKTsKIAogCWNhc2UgVEJfREVMRVRFQlVUVE9OOgogCSAgICByZXR1cm4gVE9PTEJBUl9EZWxldGVCdXR0b24gKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwpAQCAtMTY1Miw3ICsxNzUwLDkgQEAKIAkgICAgcmV0dXJuIFRPT0xCQVJfR2V0QnV0dG9uICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUQl9HRVRCVVRUT05JTkZPOgkJCS8qIDQuNzEgKi8KLS8vCWNhc2UgVEJfR0VUQlVUVE9OU0laRToJCQkvKiA0LjcwICovCisKKwljYXNlIFRCX0dFVEJVVFRPTlNJWkU6CisJICAgIHJldHVybiBUT09MQkFSX0dldEJ1dHRvblNpemUgKHduZFB0cik7CiAKIAljYXNlIFRCX0dFVEJVVFRPTlRFWFQzMkE6CiAJICAgIHJldHVybiBUT09MQkFSX0dldEJ1dHRvblRleHQzMkEgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwpAQCAtMTczNCw3ICsxODM0LDEwIEBACiAJICAgIHJldHVybiBUT09MQkFSX1ByZXNzQnV0dG9uICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUQl9SRVBMQUNFQklUTUFQOgotLy8JY2FzZSBUQl9TQVZFUkVTVE9SRTMyQToKKworCWNhc2UgVEJfU0FWRVJFU1RPUkUzMkE6CisJICAgIHJldHVybiBUT09MQkFSX1NhdmVSZXN0b3JlMzJBICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwogLy8JY2FzZSBUQl9TQVZFUkVTVE9SRTMyVzoKIC8vCWNhc2UgVEJfU0VUQU5DSE9SSElHSExJR0hUOgkJLyogNC43MSAqLwogCkBAIC0xNzkwLDYgKzE4OTMsOSBAQAogCWNhc2UgV01fREVTVFJPWToKIAkgICAgcmV0dXJuIFRPT0xCQVJfRGVzdHJveSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKKy8vCWNhc2UgV01fRVJBU0VCS0dORDoKKy8vCSAgICByZXR1cm4gVE9PTEJBUl9FcmFzZUJhY2tncm91bmQgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCiAJY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgogCSAgICByZXR1cm4gVE9PTEJBUl9MQnV0dG9uRGJsQ2xrICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtMTgwOCw2ICsxOTE0LDkgQEAKIAljYXNlIFdNX05DQ0FMQ1NJWkU6CiAJICAgIHJldHVybiBUT09MQkFSX05DQ2FsY1NpemUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCisJY2FzZSBXTV9OQ0NSRUFURToKKwkgICAgcmV0dXJuIFRPT0xCQVJfTkNDcmVhdGUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCiAJY2FzZSBXTV9OQ1BBSU5UOgogCSAgICByZXR1cm4gVE9PTEJBUl9OQ1BhaW50ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvdXBkb3duLmMgYi9jb250cm9scy91cGRvd24uYwppbmRleCBkNzFiYTlkLi4wM2Q2ZWQwIDEwMDY0NAotLS0gYS9jb250cm9scy91cGRvd24uYworKysgYi9jb250cm9scy91cGRvd24uYwpAQCAtOCw3ICs4LDkgQEAKICAqICAgICBhcnJvdyBrZXlzCiAgKiAgIC0gSSBhbSBub3Qgc3VyZSBhYm91dCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBNaW4sIE1heCwgUG9zCiAgKiAgICAgKGluIHRoZSBVUERPV05fSU5GTyB0aGUgZmllbGRzOiBNaW5WYWwsIE1heFZhbCwgQ3VyVmFsKQotICogICAtIEkgdGhpbmsgSSBkbyBub3QgaGFuZGxlIGNvcnJlY3RseSB0aGUgV1NfQk9SREVSIHN0eWxlLgorICogICAtIEkgdGhpbmsgSSBkb24gbm90IGhhbmRsZSBjb3JyZWN0bHkgdGhlIFdTX0JPUkRFUiBzdHlsZS4KKyAqICAgICAoU2hvdWxkIGJlIGZpeGVkLiA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+KQorICoKICAqIFRlc3Rpbmc6CiAgKiAgIE5vdCBtdWNoLiBUaGUgZm9sbG93aW5nICBoYXZlIG5vdCBiZWVuIHRlc3RlZCBhdCBhbGw6CiAgKiAgICAgLSBob3Jpem9udGFsIGFycm93cwpAQCAtNjMsNyArNjUsOCBAQAogICAgICAgICAiVXBEb3duIEN0cmw6IFVua25vd24gcGFyYW1ldGVyKHMpIGZvciBtZXNzYWdlICIgI21zZyAgICAgXAogCSIoJTA0eCk6IHdwPSUwNHggbHA9JTA4bHhcbiIsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogCi0jZGVmaW5lIFVQRE9XTl9HZXRJbmZvUHRyKHduZFB0cikgKChVUERPV05fSU5GTyAqKXduZFB0ci0+d0V4dHJhKQorI2RlZmluZSBVUERPV05fR2V0SW5mb1B0cih3bmRQdHIpICgoVVBET1dOX0lORk8gKil3bmRQdHItPndFeHRyYVswXSkKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBVUERPV05fSW5Cb3VuZHMKQEAgLTE4OSw3ICsxOTIsNyBAQAogICAgICAgcmV0dXJuIEZBTFNFOwogICB9CiAgIGVsc2V7Ci0gICAgLyogd2UgaGF2ZSBhIHJlZ3VyYWwgd2luZG93LCBzbyB3aWxsIGdldCB0aGUgdGV4dCAqLworICAgIC8qIHdlIGhhdmUgYSByZWd1bGFyIHdpbmRvdywgc28gd2lsbCBnZXQgdGhlIHRleHQgKi8KICAgICBpZiAoIUdldFdpbmRvd1RleHQzMkEoaW5mb1B0ci0+QnVkZHksIHR4dCwgc2l6ZW9mKHR4dCkpKQogICAgICAgcmV0dXJuIEZBTFNFOwogCkBAIC0yMzgsNyArMjQxLDcgQEAKICAgaWYoV0lER0VUU19Jc0NvbnRyb2wzMihXSU5fRmluZFduZFB0cihpbmZvUHRyLT5CdWRkeSksIEJJQzMyX0xJU1RCT1gpKXsKICAgICBTZW5kTWVzc2FnZTMyQShpbmZvUHRyLT5CdWRkeSwgTEJfU0VUQ1VSU0VMMzIsIGluZm9QdHItPkN1clZhbCwgMCk7CiAgIH0KLSAgZWxzZXsgLyogUmVndXJhbCB3aW5kb3csIHNvIHNldCBjYXB0aW9uIHRvIHRoZSBudW1iZXIgKi8KKyAgZWxzZXsgLyogUmVndWxhciB3aW5kb3csIHNvIHNldCBjYXB0aW9uIHRvIHRoZSBudW1iZXIgKi8KICAgICBsZW4gPSBzcHJpbnRmKHR4dDEsIChpbmZvUHRyLT5CYXNlPT0xNikgPyAiJVgiIDogIiVkIiwgaW5mb1B0ci0+Q3VyVmFsKTsKIAogICAgIHNlcCA9IFVQRE9XTl9HZXRUaG91c2FuZFNlcCgpOyAKQEAgLTI2NSwyMCArMjY4LDE2IEBACiB9IAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBVUERPV05fUGFpbnQKKyAqIFVQRE9XTl9EcmF3IFtJbnRlcm5hbF0KKyAqCiAgKiBEcmF3IHRoZSBhcnJvd3MuIFRoZSBiYWNrZ3JvdW5kIG5lZWQgbm90IGJlIGVyYXNlZC4KICAqLwotc3RhdGljIHZvaWQgVVBET1dOX1BhaW50KFdORCAqd25kUHRyKQorc3RhdGljIHZvaWQgVVBET1dOX0RyYXcgKFdORCAqd25kUHRyLCBIREMzMiBoZGMpCiB7CiAgIFVQRE9XTl9JTkZPICppbmZvUHRyID0gVVBET1dOX0dldEluZm9QdHIod25kUHRyKTsKLSAgUEFJTlRTVFJVQ1QzMiBwczsKICAgQk9PTDMyIHByc3NlZDsKICAgUkVDVDMyIHJlY3Q7Ci0gIEhEQzMyIGhkYzsKICAgCi0gIC8qIHN0YXJ0IHBhaW50aW5nIHRoZSBidXR0b24gKi8KLSAgaGRjID0gQmVnaW5QYWludDMyKCB3bmRQdHItPmh3bmRTZWxmLCAmcHMgKTsKLQogICAvKiBEcmF3IHRoZSBpbmNyIGJ1dHRvbiAqLwogICBVUERPV05fR2V0QXJyb3dSZWN0KHduZFB0ciwgJnJlY3QsIFRSVUUpOwogICBwcnNzZWQgPSAoaW5mb1B0ci0+RmxhZ3MgJiBGTEFHX0lOQ1IpICYmIChpbmZvUHRyLT5GbGFncyAmIEZMQUdfTU9VU0VJTik7CkBAIC0yOTgsMTAgKzI5NywzOCBAQAogCSh3bmRQdHItPmR3U3R5bGUgJiBVRFNfSE9SWiA/IERGQ1NfU0NST0xMUklHSFQgOiBERkNTX1NDUk9MTERPV04pIHwKIAkocHJzc2VkID8gREZDU19QVVNIRUQgOiAwKSB8CiAJKHduZFB0ci0+ZHdTdHlsZSZXU19ESVNBQkxFRCA/IERGQ1NfSU5BQ1RJVkUgOiAwKSApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVQRE9XTl9SZWZyZXNoIFtJbnRlcm5hbF0KKyAqCisgKiBTeW5jaHJvbm91cyBkcmF3aW5nIChtdXN0IE5PVCBiZSB1c2VkIGluIFdNX1BBSU5UKS4KKyAqIENhbGxzIFVQRE9XTl9EcmF3LgorICovCitzdGF0aWMgdm9pZCBVUERPV05fUmVmcmVzaCAoV05EICp3bmRQdHIpCit7CisgICAgSERDMzIgaGRjOworICAKKyAgICBoZGMgPSBHZXREQzMyICh3bmRQdHItPmh3bmRTZWxmKTsKKyAgICBVUERPV05fRHJhdyAod25kUHRyLCBoZGMpOworICAgIFJlbGVhc2VEQzMyICh3bmRQdHItPmh3bmRTZWxmLCBoZGMpOworfQogCiAKLSAgLyogY2xlYW4tdXAgKi8gIAotICBFbmRQYWludDMyKCB3bmRQdHItPmh3bmRTZWxmLCAmcHMgKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVBET1dOX1BhaW50IFtJbnRlcm5hbF0KKyAqCisgKiBBc3luY2hyb25vdXMgZHJhd2luZyAobXVzdCBPTkxZIGJlIHVzZWQgaW4gV01fUEFJTlQpLgorICogQ2FsbHMgVVBET1dOX0RyYXcuCisgKi8KK3N0YXRpYyB2b2lkIFVQRE9XTl9QYWludCAoV05EICp3bmRQdHIpCit7CisgICAgUEFJTlRTVFJVQ1QzMiBwczsKKyAgICBIREMzMiBoZGM7CisgIAorICAgIGhkYyA9IEJlZ2luUGFpbnQzMiAod25kUHRyLT5od25kU2VsZiwgJnBzKTsKKyAgICBVUERPV05fRHJhdyAod25kUHRyLCBoZGMpOworICAgIEVuZFBhaW50MzIgKHduZFB0ci0+aHduZFNlbGYsICZwcyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzU1LDkgKzM4MiwxMCBAQAogICAvKiBub3cgcG9zaXRpb24gdGhlIHVwL2Rvd24gKi8KICAgLyogU2luY2UgdGhlIFVEU19BTElHTiogZmxhZ3Mgd2VyZSB1c2VkLCAqLwogICAvKiB3ZSB3aWxsIHBpY2sgdGhlIHBvc2l0aW9uIGFuZCBzaXplIG9mIHRoZSB3aW5kb3cuICovCisKICAgU2V0V2luZG93UG9zMzIod25kUHRyLT5od25kU2VsZiwwLHgsYnVkUmVjdC50b3AtREVGQVVMVF9BRERUT1AsREVGQVVMVF9XSURUSCwKIAkJIChidWRSZWN0LmJvdHRvbS1idWRSZWN0LnRvcCkrREVGQVVMVF9BRERUT1ArREVGQVVMVF9BRERCT1QsCi0JCSBTV1BfTk9BQ1RJVkFURXxTV1BfTk9aT1JERVIpOyAKKwkJIFNXUF9OT0FDVElWQVRFfFNXUF9OT1pPUkRFUik7CiAKICAgcmV0dXJuIFRSVUU7CiB9CSAgCkBAIC00MTMsNyArNDQxLDggQEAKICAgLyogQWxzbywgbm90aWZ5IGl0ICovCiAgIC8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiBvbmx5IGlmCiAgICAgICAgICAgICB3ZSBkbyBub3QgaGF2ZSB0aGUgVURTX1NFVEJVRERZSU5UIHN0eWxlIHNldD8gKi8KLSAgU2VuZE1lc3NhZ2UzMkEoaW5mb1B0ci0+QnVkZHksIAorCisgIFNlbmRNZXNzYWdlMzJBKEdldFBhcmVudDMyICh3bmRQdHItPmh3bmRTZWxmKSwgCiAJCSB3bmRQdHItPmR3U3R5bGUgJiBVRFNfSE9SWiA/IFdNX0hTQ1JPTEwgOiBXTV9WU0NST0xMLCAKIAkJIE1BS0VMT05HKGluY3IgPyBTQl9MSU5FVVAgOiBTQl9MSU5FRE9XTiwgaW5mb1B0ci0+Q3VyVmFsKSwKIAkJIHduZFB0ci0+aHduZFNlbGYpOwpAQCAtNDU3LDcgKzQ4Niw3IEBACiAgICAgUmVsZWFzZUNhcHR1cmUoKTsgICAgICAgICAgLyogaWYgd2Ugc3RpbGwgaGF2ZSBpdCAgICAgICovICAKICAgCiAgIGluZm9QdHItPkZsYWdzID0gMDsgICAgICAgICAgLyogZ2V0IHJpZCBvZiBhbnkgZmxhZ3MgICAgICovCi0gIFVQRE9XTl9QYWludCh3bmRQdHIpOyAgICAgICAgLyogcmVkcmF3IHRoZSBjb250cm9sIGp1c3QgaW4gY2FzZSAqLworICBVUERPV05fUmVmcmVzaCAod25kUHRyKTsgICAgIC8qIHJlZHJhdyB0aGUgY29udHJvbCBqdXN0IGluIGNhc2UgKi8KICAgCiAgIHJldHVybiBUUlVFOwogfQpAQCAtNTA1LDcgKzUzNCw3IEBACiAgICAgICBpbmZvUHRyLT5GbGFncyB8PSBGTEFHX01PVVNFSU47CiAgICAgICAKICAgICAgIC8qIHJlcGFpbnQgdGhlIGNvbnRyb2wgKi8KLSAgICAgIFVQRE9XTl9QYWludCh3bmRQdHIpOworICAgICAgVVBET1dOX1JlZnJlc2ggKHduZFB0cik7CiAKICAgICAgIC8qIHByb2Nlc3MgdGhlIGNsaWNrICovCiAgICAgICBVUERPV05fRG9BY3Rpb24od25kUHRyLCAxLCBpbmZvUHRyLT5GbGFncyAmIEZMQUdfSU5DUik7CkBAIC01NDEsNyArNTcwLDcgQEAKICAgICAgIH0KICAgICAgIC8qIElmIHN0YXRlIGNoYW5nZWQsIHJlZHJhdyB0aGUgY29udHJvbCAqLwogICAgICAgaWYodGVtcCAhPSBpbmZvUHRyLT5GbGFncykKLQlVUERPV05fUGFpbnQod25kUHRyKTsKKwlVUERPV05fUmVmcmVzaCAod25kUHRyKTsKICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0OgpAQCAtNTYyLDkgKzU5MSwxNiBAQAogCiAgIHN3aXRjaChtZXNzYWdlKQogICAgIHsKLSAgICBjYXNlIFdNX0NSRUFURToKKyAgICBjYXNlIFdNX05DQ1JFQVRFOgogICAgICAgLyogZ2V0IHJpZCBvZiBib3JkZXIsIGlmIGFueSAqLwogICAgICAgd25kUHRyLT5kd1N0eWxlICY9IH5XU19CT1JERVI7CisgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNhc2UgV01fQ1JFQVRFOgorICAgICAgaW5mb1B0ciA9CisJKFVQRE9XTl9JTkZPKilIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkJCSBzaXplb2YoVVBET1dOX0lORk8pKTsKKyAgICAgIHduZFB0ci0+d0V4dHJhWzBdID0gKERXT1JEKWluZm9QdHI7CiAKICAgICAgIC8qIGluaXRpYWxpemUgdGhlIGluZm8gc3RydWN0ICovCiAgICAgICBpbmZvUHRyLT5BY2NlbENvdW50PTA7IGluZm9QdHItPkFjY2VsVmVjdD0wOyAKQEAgLTU4Myw2ICs2MTksMTAgQEAKICAgICBjYXNlIFdNX0RFU1RST1k6CiAgICAgICBpZihpbmZvUHRyLT5BY2NlbFZlY3QpCiAJZnJlZShpbmZvUHRyLT5BY2NlbFZlY3QpOworCisgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHIpOworICAgICAgd25kUHRyLT53RXh0cmFbMF0gPSAwOworCiAgICAgICBUUkFDRSh1cGRvd24sICJVcERvd24gQ3RybCBkZXN0cnVjdGlvbiwgaHduZD0lMDR4XG4iLCBod25kKTsKICAgICAgIGJyZWFrOwogCQpAQCAtNzg1LDcgKzgyNSw3IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIFVQRE9XTl9SZWdpc3RlciBbSW50ZXJuYWxdCisgKiBVUERPV05fUmVnaXN0ZXIgW0ludGVybmFsXQogICoKICAqIFJlZ2lzdGVycyB0aGUgdXBkb3duIHdpbmRvdyBjbGFzcy4KICAqLwpAQCAtNzk2LDEwICs4MzYsMTAgQEAKICAgICBpZiggR2xvYmFsRmluZEF0b20zMkEoIFVQRE9XTl9DTEFTUzMyQSApICkgcmV0dXJuOwogCiAgICAgWmVyb01lbW9yeSggJnduZENsYXNzLCBzaXplb2YoIFdORENMQVNTMzJBICkgKTsKLSAgICB3bmRDbGFzcy5zdHlsZSAgICAgICAgID0gQ1NfR0xPQkFMQ0xBU1MgfCBDU19EQkxDTEtTIHwgQ1NfVlJFRFJBVzsKKyAgICB3bmRDbGFzcy5zdHlsZSAgICAgICAgID0gQ1NfR0xPQkFMQ0xBU1MgfCBDU19WUkVEUkFXOwogICAgIHduZENsYXNzLmxwZm5XbmRQcm9jICAgPSAoV05EUFJPQzMyKVVwRG93bldpbmRvd1Byb2M7CiAgICAgd25kQ2xhc3MuY2JDbHNFeHRyYSAgICA9IDA7Ci0gICAgd25kQ2xhc3MuY2JXbmRFeHRyYSAgICA9IHNpemVvZihVUERPV05fSU5GTyk7CisgICAgd25kQ2xhc3MuY2JXbmRFeHRyYSAgICA9IHNpemVvZihVUERPV05fSU5GTyopOwogICAgIHduZENsYXNzLmhDdXJzb3IgICAgICAgPSBMb2FkQ3Vyc29yMzJBKCAwLCBJRENfQVJST1czMkEgKTsKICAgICB3bmRDbGFzcy5oYnJCYWNrZ3JvdW5kID0gKEhCUlVTSDMyKShDT0xPUl8zREZBQ0UgKyAxKTsKICAgICB3bmRDbGFzcy5scHN6Q2xhc3NOYW1lID0gVVBET1dOX0NMQVNTMzJBOwpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMgYi9kb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM0YTJmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKQEAgLTAsMCArMSwyOTYgQEAKKworICAgICAgICAgICAgICAgICAgQ09NTU9OIENPTlRST0xTCisgICAgICAgICAgICAgIHRoZWlyIGRldmVsb3BtZW50IHN0YXR1cworICAgIGFuZCB0aGVpciBVTkRPQ1VNRU5URUQgZmVhdHVyZXMgYW5kIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisxLiBJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLS0tLQorICBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaGVyZWluIGlzIGJhc2VkIG9uIHRoZSBkbGwgdmVyc2lvbiA0LjcyIHdoaWNoCisgIGlzIGluY2x1ZGVkIGluIE1TIEludGVybmV0IEV4cGxvcmVyIDQuMDEuCisKKyAgQWxsIGluZm9ybWF0aW9uIGFib3V0IGNvbW1vbiBjb250cm9scyBzaG91bGQgYmUgY29sbGVjdGVkIGluIHRoaXMgZG9jdW1lbnQuCisKKyAgQWxsIFdpbmUgcHJvZ3JhbW1lcnMgYXJlIGVuY291cmFnZWQgdG8gYWRkIHRoZWlyIGtub3dsZWRnZSB0byB0aGlzIGRvY3VtZW50LgorCisKKzIuIEdlbmVyYWwgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBjb21tb24gY29udHJvbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBNUyBQbGF0Zm9ybSBTREsKKyAgYW5kIHRoZSBNUyBJbnRlcm5ldCBDbGllbnQgU0RLIChtb3N0IHJlY2VudCkuIEluZm9ybWF0aW9uIGZyb20gdGhlc2UgU0RLJ3MKKyAgd2lsbCBOT1QgYmUgcmVwZWF0ZWQgaGVyZS4gT25seSBpbmZvcm1hdGlvbiB3aGljaCBjYW4gTk9UIGJlIGZvdW5kIGluIHRoZXNlCisgIFNESydzIHdpbGwgYmUgY29sbGVjdGVkIGhlcmUuIFNvbWUgaW5mb3JtYXRpb24gaW4gdGhlIFNESydzIG1lbnRpb25lZCBhYm92ZQorICBpcyAoaW50ZW50aW9uYWxseT8/PykgV1JPTkcuIENvcnJlY3Rpb25zIHRvIHdyb25nIGluZm9ybWF0aW9uIHdpbGwgYmUKKyAgY29sbGVjdGVkIGhlcmUgdG9vLgorCisKKzMuIENvbnRyb2xzCistLS0tLS0tLS0tLQorICBUaGlzIHBhcmFncmFwaCBkZXNjcmliZXMgdGhlIGRldmVsb3BtZW50IHN0YXR1cyBvZiB0aGUgY29tbW9uIGNvbnRyb2xzLgorCisKKworMy4xIEFuaW1hdGlvbiBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisKKzMuMiBDb21ibyBCb3ggRXggQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0YXR1czoKKyAgICAgIC0gTm90aGluZyBkb25lIGF0IGFsbC4KKworCiszLjMgRGF0ZSBhbmQgVGltZSBQaWNrZXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisKKzMuNCBEcmFnIExpc3QgQm94IENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisKKzMuNSBGbGF0IFNjcm9sbCBCYXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0YXR1czoKKyAgICAgIC0gTm90aGluZyBkb25lIGF0IGFsbC4KKworCiszLjYgSGVhZGVyIENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCisgIFN0YXR1czoKKyAgICAgIC0gQWxtb3N0IGZpbmlzaGVkLgorCisKKzMuNyBIb3QgS2V5IENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisKKzMuOCBJbWFnZSBMaXN0IChubyBjb250cm9sKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEF1dGhvcjoKKyAgICAgIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CisKKyAgU3RhdHVzOgorICAgICAgLSBBbG1vc3QgZmluaXNoZWQuCisKKyAgTm90ZXM6CisgICAgICBNb3N0IG9mIG15IHRlc3QgcHJvZ3JhbXMgd29yayBhcyBleHBlY3RlZC4gQnV0IHdoZW4gaW1hZ2UgbGlzdHMgYXJlIHVzZWQKKyAgICAgIGluIG90aGVyIGNvbnRyb2xzIChlLmcuIFRvb2xiYXIpIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSBlcnJvci1mcmVlLgorICAgICAgSXQgbG9va3MgbGlrZSBJIGhhdmUgdG8gZG8gYSBtYWpvciByZS13cml0ZSAodXNlIERJQidzIGluc3RlYWQgb2YgRERCJ3MpLgorCisKKzMuOSBJUCBBZGRyZXNzIENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisKKzMuMTAgTGlzdCBWaWV3IENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisgIE5vdGVzOgorICAgICAgVGhpcyBjb250cm9sIGlkIE5FRURFRCBpbiBtYW55IHBsYWNlcy4gQW55IHZvbHVudGVlcnM/PworCisKKzMuMTEgTW9udGggQ2FsZW5kYXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0YXR1czoKKyAgICAgIC0gTm90aGluZyBkb25lIGF0IGFsbC4KKworCiszLjEyIFBhZ2VyIENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLQorICBTdGF0dXM6CisgICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCisgICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLgorCisgIE5vdGVzOgorICAgICAgVGhlIGR1bW15IHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBhdXRob3IuCisKKworMy4xMyBQcm9ncmVzcyBCYXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBieSBEaW1pdHJpZSBPLiBQYXVuLgorICAgICAgRml4ZXMgYW5kIGltcHJvdmVtZW50cyBieSBFcmljIEtvaGwuCisKKyAgU3RhdHVzOgorICAgICAgLSBBbG1vc3QgZmluaXNoZWQgKHNob3VsZCBiZWhhdmUgbGlrZSB0aGUgb3JpZ2luYWwpLgorCisgIE5vdGVzOgorICAgICAgV01fR0VURk9OVCBhbmQgV01fU0VURk9OVCBhcmUgbm90IGltcGxlbWVudGVkIHlldC4gVGhleSBzZWVtIHRvIGJlCisgICAgICB1c2VsZXNzIGJlY2F1c2UgcHJvZ3Jlc3MgYmFycyB1c3VhbGx5IGRvbid0IGRpc3BsYXkgYW55IHRleHR1YWwKKyAgICAgIGluZm9ybWF0aW9uLiBCdXQgaWYgTSQgaW1wbGVtZW50ZWQgYW4gdW5kb2N1bWVudGVkIGZsYWcgdG8gZGlzcGxheQorICAgICAgdGV4dHVhbCBpbmZvcm1hdGlvbiAoZS5nLiBwZXJjZW50YWdlKSB0aGVzZSBtZXNzYWdlcyB3b3VsZCBtYWtlIHNlbnNlLgorCisKKzMuMTQgUHJvcGVydHkgU2hlZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3RhdHVzOgorICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgorCisgIE5vdGVzOgorICAgICAgLSBUaGlzIGNvbnRyb2wgaWQgTkVFREVEIGluIG1hbnkgcGxhY2VzLgorICAgICAgLSBUYWIgY29udHJvbCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgZmlyc3QuCisgICAgICBBbnkgdm9sdW50ZWVycz8/CisKKworMy4xNSBSZWJhciBDb250cm9sIChDb29sIEJhcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0YXR1czoKKyAgICAgIC0gRHVtbXkgY29udHJvbC4gTm8gZnVuY3Rpb25hbGl0eS4KKyAgICAgIC0gTm90IHlldCBwdWJsaXNoZWQuCisKKyAgTm90ZXM6CisgICAgICBUaGUgZHVtbXkgc291cmNlIGNvZGUgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGF1dGhvci4KKworCiszLjE2IFN0YXR1cyBCYXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXV0aG9yOgorICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24gYnkgQnJ1Y2UgTWlsbmVyLgorICAgICAgRml4ZXMgYW5kIGltcHJvdmVtZW50cyBieSBFcmljIEtvaGwuCisKKyAgU3RhdHVzOgorICAgICAgLSBBbG1vc3QgZmluaXNoZWQuCisKKyAgTm90ZXM6CisgICAgICAtIFRvb2wgdGlwcyBuZWVkIHRvIGJlIGFkZGVkLCBidXQgc2luY2UgdGhleSBhcmUgbm90IGRvbmUgeWV0Li4uCisKKyAgTm90ZXM6CisgICAgICBIYXZlIGEgbG9vayBhdCBjb250cm9scy9zdGF0dXMuYyBmb3IgYSBsaXN0IG9mIGJ1Z3MgYW5kIG1pc3NpbmcgZmVhdHVyZXMuCisKKworMy4xNyBUYWIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLQorICBTdGF0dXM6CisgICAgICAtIE5vdGhpbmcgZG9uZSBhdCBhbGwuCisgICAgICAtIG5lZWRlZC4KKworCiszLjE4IFRvb2xiYXIgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXV0aG9yOgorICAgICAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKworICBTdGF0dXM6CisgICAgICAtIERldmVsb3BtZW50IGluIHByb2dyZXNzLgorICAgICAgLSBCYXNpYyBmdW5jdGlvbmFsaXR5IGlzIGFsbW9zdCBkb25lLiAoZGxsIHZlcnNpb24gNC4wKQorCisKKzMuMTkgVG9vbHRpcCBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCisgIFN0YXR1czoKKyAgICAgIC0gRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuCisgICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLCBidXQgd2lsbCBiZSBwdWJsaXNoZWQgc29vbi4KKworCiszLjIwIFRyYWNrYmFyIENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBdXRob3I6CisgICAgICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCisgIFN0YXR1czoKKyAgICAgIC0gRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuCisgICAgICAtIE5vdCB5ZXQgcHVibGlzaGVkLCBidXQgd2lsbCBiZSBwdWJsaXNoZWQgc29vbi4KKworCiszLjIxIFRyZWUgVmlldyBDb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0YXR1czoKKyAgICAgIC0gTm90aGluZyBkb25lIGF0IGFsbC4KKyAgICAgIC0gbmVlZGVkLgorCisKKzMuMjIgVXBkb3duIENvbnRyb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXV0aG9yOgorICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24gYnkgRGltaXRyaWUgTy4gUGF1bi4KKyAgICAgIFNvbWUgbWlub3IgY2hhbmdlcyBieSBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPi4KKworICBTdGF0dXM6CisgICAgICAtIFVua25vd24uCisKKyAgTm90ZXM6CisgICAgICAtIEhhdmUgYSBsb29rIGF0IGNvbnRyb2xzL3VwZG93bi5jIGZvciBhIGxpc3Qgb2YgYnVncyBhbmQgbWlzc2luZworICAgICAgICBmZWF0dXJlcy4KKworICAgICAgLSBUaGUgc3RhdHVzIGlzIHVua25vd24sIGJlY2F1c2UgSSBkaWQgbm90IGhhdmUgYSBjbG9zZSBsb29rIGF0IHRoaXMKKyAgICAgICAgY29udHJvbC4gT25lIHRlc3QtcHJvZ3JhbSBsb29rZWQgcXVpdGUgZ29vZCwgYnV0IGluIFdpbjk1J3MKKyAgICAgICAgY2RwbGF5ZXIuZXhlIHRoZSBjb250cm9sIGRvZXMgbm90IHNob3cgYXQgYWxsLgorICAgICAgCisgICAgICBBbnkgdm9sdW50ZWVycz8/CisKKworNC4gQWRkaXRpb25hbCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEhhcyB0byBiZSB3cml0dGVuLi4uCisKKworNS4gVW5kb2N1bWVudGVkIGZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgcXVpdGUgYSBsb3Qgb2YgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyBsaWtlOgorICAgICAtIERTQSAoRHlubmFtaWMgU3RyaW5nIEFycmF5PykgZnVuY3Rpb25zLgorICAgICAtIERQQSAoRHltbmFtaWMgUG9pbnRlciBBcnJheT8pIGZ1bmN0aW9ucy4KKyAgICAgLSBNUlUgKCJNb3N0IFJlY2VudGx5IFVzZWQiIExpc3QpIGZ1bmN0aW9ucy4KKyAgICAgLSBvdGhlciB1bmtub3duIGZ1bmN0aW9ucy4KKworICBIYXZlIGEgbG9vayBhdCByZWxheTMyL2NvbWN0bDMyLnNwZWMuCisKKworNS4xIER5bW5hbWljIFN0cmluZyBBcnJheXMgPz8/IChEU0EpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTW9zdCBvZiB0aGUgRFNBIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQuIEkgdXNlZCBUQVNLTUFOLkVYRSB0byB3cml0ZSB0aGVtLgorICBTaW5jZSBUQVNLTUFOLkVYRSBkb2Vzbid0IGJhaWwgb3V0IG9yIGNyYXNoIEkgdGhpbmsgSSd2ZSBkb25lIGl0IHJpZ2h0LgorCisgIEhhdmUgYSBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KKyAgRnVydGhlciBkb2N1bWVudGF0aW9uIHdpbGwgYmUgd3JpdHRlbi4uLgorCisKKzUuMiBEeW5hbWljIFBvaW50ZXIgQXJyYXlzID8/PyAoRFBBKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNpbWlsYXIgdG8gdGhlIERTQSBmdW5jdGlvbnMsIGJ1dCB0aGV5IGp1c3Qgc3RvcmUgcG9pbnRlcnMuIEkgaGF2ZSB3cml0dGVuCisgIHNvbWUgc3R1YnMgYW5kIHNlbWktc3R1YnMuIFRoZXkgYXJlIHVzZWQgYnkgRXhwbG9yZXIgYW5kIElFNCBidXQgdGhlIAorICBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBpbmNvbXBsZXRlIHNpbmNlIGJvdGggcHJvZ3JhbXMgc2VlbSB0byBjcmFzaCBiZWNhdXNlCisgIG9mIG90aGVyIGluY29tcGxldGUgZnVuY3Rpb25zLgorCisgIEhhdmUgYSBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KKyAgRnVydGhlciBkb2N1bWVudGF0aW9uIHdpbGwgYmUgd3JpdHRlbi4uLgorCisKKzUuMyBNZW51SGVscAorLS0tLS0tLS0tLS0tCisgIEhhcyB0byBiZSB3cml0dGVuLi4uCisKKworNS40IEdldEVmZmVjdGl2ZUNsaWVudFJlY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhhcyB0byBiZSB3cml0dGVuLi4uCisKKworNi4gRXBpbG9ndWUKKy0tLS0tLS0tLS0tCisgIFlvdSBzZWUsIG11Y2ggd29yayBoYXMgc3RpbGwgdG8gYmUgZG9uZS4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdyaXRpbmcKKyAgYSBjb250cm9sIHNlbmQgbWUgYW4gZS1tYWlsLiBJZiB5b3UgbGlrZSB0byBmaXggYnVncyBvciBhZGQgc29tZQorICBmdW5jdGlvbmFsaXR5IHNlbmQgYW4gZS1tYWlsIHRvIHRoZSBhdXRob3Igb2YgdGhlIGNvbnRyb2wuCisKKyAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KKwpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9wcmludGluZyBiL2RvY3VtZW50YXRpb24vcHJpbnRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3OTY5MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJpbnRpbmcKQEAgLTAsMCArMSw1MCBAQAorUHJpbnRpbmcgaW4gV2luZQorPT09PT09PT09PT09PT09PQorCitQcmludGluZyBpbiBXaW5lIGNhbiBiZSBkb25lIGluIG9uZSBvZiB0d28gd2F5cy4gQm90aCBvZiB3aGljaCBhcmUgdmVyeSBhbHBoYS4KKworMS4gVXNlIGEgd2luZG93cyAzLjEgcHJpbnRlciBkcml2ZXIuCisKKzIuIFVzZSB0aGUgYnVpbHRpbiBXaW5lIFBvc3RzY3JpcHQgZHJpdmVyICgrIGdob3N0c2NyaXB0IHRvIHByb2R1Y2Ugb3V0cHV0IGZvcgorICAgbm9uLXBvc3RzY3JpcHQgcHJpbnRlcnMpLgorCisKKzEuIEV4dGVybmFsIHByaW50ZXIgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBdCBwcmVzZW50IG9ubHkgMTYgYml0IGRyaXZlcnMgd2lsbCB3b3JrLgorQWRkCisKK3ByaW50ZXI9b24KKwordG8gdGhlIFt3aW5lXSBzZWN0aW9uIG9mIHdpbmUuY29uZiAob3Igfi8ud2luZXJjKS4gVGhpcyBsZXRzIENyZWF0ZURDIHByb2NlZWQKK2lmIGl0cyBkcml2ZXIgYXJndW1lbnQgaXMgYSAxNiBiaXQgZHJpdmVyLgorCitZb3Ugd2lsbCBwcm9iYWJseSBhbHNvIG5lZWQgdG8gYWRkCisKK1RURW5hYmxlPTAKK1RUT25seT0wCisKK3RvIHRoZSBbVHJ1ZVR5cGVdIHNlY3Rpb24gb2Ygd2luLmluaSAuCisKK1RoZSBjb2RlIGZvciB0aGUgZHJpdmVyIGludGVyZmFjZSBpcyBpbiBncmFwaGljcy93aW4xNmRydiAuCisKKworMi4gQnVpbHRpbiBXaW5lIFBvc3RzY3JpcHQgZHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VuYWJsZXMgcHJpbnRpbmcgb2YgcG9zdHNjcmlwdCBmaWxlcyB2aWEgYSBkcml2ZXIgYnVpbHQgaW50byBXaW5lLiBTZWUKK2dyYXBoaWNzL3BzZHJ2L1JFQURNRSBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4gVGhlIGNvZGUgZm9yIHRoZQorcG9zdHNjcmlwdCBkcml2ZXIgaXMgaW4gZ3JhcGhpY3MvcHNkcnYgLgorCisKKworU3Bvb2xpbmcKKz09PT09PT09CitTcG9vbGluZyBpcyByYXRoZXIgcHJpbWl0aXZlLiBUaGUgW3Nwb29sZXJdIHNlY3Rpb24gb2Ygd2luZS5jb25mIG1hcHMgYSBwb3J0CisoZS5nLiBMUFQxOikgdG8gYSBmaWxlIG9yIGEgY29tbWFuZCB2aWEgYSBwaXBlLiBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGxpbmVzCisKK0xQVDE6PWZvby5wcworTFBUMjo9fGxwcgorCittYXAgTFBUMTogdG8gZmlsZSBmb28ucHMgYW5kIExQVDI6IHRvIHRoZSBscHIgY29tbWFuZC4gSWYgYSBqb2IgaXMgc2VudCB0byBhbgordW5saXN0ZWQgcG9ydCB0aGVuIGEgZmlsZSBpcyBjcmVhdGVkIHdpdGggdGhhdCBwb3J0J3MgbmFtZSBlLmcuIGZvciBMUFQzOiBhCitmaWxlIGNhbGxlZCBMUFQzOiB3b3VsZCBiZSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0cGxheSBiL2RvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdHBsYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljODU5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdHBsYXkKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGlyZWN0IHBsYXkKK2FuZCBkaXJlY3QgcGxheSBsb2JieSBmZWF0dXJlcy4gCisKK01vc3QgbWV0aG9kcyBhbmQgQVBJcyBhcmUgbm90IGltcGxlbWVudGVkIGF0IHRoaXMgcG9pbnQuIEV4YW1pbmUgdGhlIGNvZGUKK3RvIHNlZSB3aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkLiAgU3RheSB0dW5lZCBmb3Igc29tZSBpbmZvcm1hdGlvbiBoZXJlIG9uY2UKK3RoZXJlIGlzIG1vcmUgaW1wbGVtZW50YXRpb24gKGFuZCBJIGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGVjayBJJ20gZG9pbmcpLgorCitUaGUgZmlsZXMgYXJlIGluY2x1ZGUvZHBsYXkuaCBhbmQgbXVsdGltZWRpYS9kcGxheS5jLgorCitJIHRoaW5rIEkgY2FuIHNhZmVseSBzYXkgdGhhdCBhbnkgYXBwbGljYXRpb24gd2hpY2ggcmVxdWlyZXMgZGlyZWN0IHBsYXkKK29yIGRpcmVjdCBwbGF5IGxvYmJ5IHdpbGwgbm90IHdvcmsgYXQgdGhpcyBwb2ludC4gUHJpb3JpdHkgd2lsbCBiZSB0byBnZXQKK2xzZXJ2ZXIuZXhlIGFuZCBzdGFyIHdhcnMgcmViZWxsaW9uIGdvaW5nIChhdCBsZWFzdCB0aGUgZGlyZWN0IHBsYXkgcG9ydGlvbnMpLgorCisKKworVE9ETzoKKyAgSnVzdCBhYm91dCBldmVyeXRoaW5nCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3dpbmUubWFuIGIvZG9jdW1lbnRhdGlvbi93aW5lLm1hbgppbmRleCAwYmU0NDUxLi5hZjQ1ZjQyIDEwMDY0NAotLS0gYS9kb2N1bWVudGF0aW9uL3dpbmUubWFuCisrKyBiL2RvY3VtZW50YXRpb24vd2luZS5tYW4KQEAgLTEsNSArMSw1IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlRIIFdJTkUgMSAiU2VwdGVtYmVyIDEsIDE5OTUiICJWZXJzaW9uIDkvMS85NSIgIldpbmRvd3MgRW11bGF0aW9uIgorLlRIIFdJTkUgMSAiSnVuZSAyMiwgMTk5OCIgIlZlcnNpb24gOTgwNjE0IiAiV2luZG93cyBFbXVsYXRvciIKIC5TSCBOQU1FCiB3aW5lIFwtIHJ1biBXaW5kb3dzIHByb2dyYW1zIHVuZGVyIFVuaXgKIC5TSCBTWU5PUFNJUwpAQCAtMTYsNDQgKzE2LDUwIEBACiBpbnZva2VzIHRoZSBXaW5kb3dzIGVtdWxhdG9yLgogLlBQCiAuQiB3aW5lIAotY3VycmVudGx5IHJ1bnMgYSBudW1iZXIgb2YgZ2FtZXMgYW5kIHNtYWxsIGFwcGxpY2F0aW9ucyAoYXBwcm94aW1hdGVseQotaGFsZiBvZiB0aGUgYXBwbGV0cyBhbmQgY29tbW9uIGdhbWVzIGFjdHVhbGx5IHJ1biksIGFsdGhvdWdoIHRoZSBlbnRpcmUgQVBJCi1oYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuCi0uUFAKLVNlZSB0aGUgZmlsZXMgCi0uQiBSRUFETUUsCi0uQiBDaGFuZ2VMb2csIAotLkIgY29uZmlndXJlLCAKLWFuZCB0aGUKLS5CIE1ha2VmaWxlCi1jb250YWluZWQgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24KLXRvIGNvbXBpbGUKLS5CIHdpbmUuCitjdXJyZW50bHkgcnVucyBhIGdyb3dpbmcgbGlzdCBvZiBhcHBsaWNhdGlvbnMgd3JpdHRlbiBmb3IgYm90aCBXaW4zLjEgYW5kIAorV2luOTUuICBPbGRlciwgc2ltcGxlciBhcHBsaWNhdGlvbnMgd29yayBiZXR0ZXIgdGhhbiBuZXdlciwgbW9yZSBjb21wbGV4IAorb25lcy4gIEEgbGFyZ2UgcGVyY2VudGFnZSBvZiB0aGUgQVBJIGhhcyBiZWVuIGltcGxlbWVudGVkLCBhbHRob3VnaCB0aGVyZQorYXJlIHN0aWxsIHNldmVyYWwgbWFqb3IgcGllY2VzIG9mIHdvcmsgbGVmdCB0byBkby4KIC5TSCBSRVFVSVJFTUVOVFMKIEF0IHByZXNlbnQsIAogLkIgd2luZQogd2lsbCBydW4gdW5kZXIgYW55IExpbnV4IGtlcm5lbCBtb3JlIHJlY2VudCB0aGFuIDAuOTkuMTMsIG9yCiB1bmRlciByZWNlbnQgcmVsZWFzZXMgb2YgTmV0QlNEL2kzODYsIEZyZWVCU0QgYW5kIE9wZW5CU0QvaTM4Ni4KIC5QUAorVGhlIGN1cnJlbnQgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgcmVsaWVzIG9uIHRoZSAKKy5CIGNsb25lKDIpCitzeXN0ZW0gY2FsbCwgd2hpY2ggaXMgY3VycmVudGx5IGF2YWlsYWJsZSBvbmx5IG9uIExpbnV4IHN5c3RlbXMgcnVubmluZworbGliYzYgKGdsaWJjMikuCisuUFAKIC5CIFgKLW11c3QgYmUgaW5zdGFsbGVkLgorbXVzdCBiZSBpbnN0YWxsZWQuICBUbyB1c2UgV2luZSdzIHN1cHBvcnQgZm9yIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zLAoreW91ciBYIGxpYnJhcmllcyBtdXN0IGJlIHJlZXRyYW50LiAgSWYgeW91IGhhdmUgbGliYzYgKGdsaWJjMiksIG9yIHlvdSAKK2NvbXBpbGVkIHRoZSBsaWJyYXJpZXMgeW91cnNlbGYsIHRoZXkgd2VyZSBwcm9iYWJseSBjb21waWxlZCB3aXRoIHRoZSAKK3JlZXRyYW50IG9wdGlvbiBlbmFibGVkLiAgCiAuUFAKIC5CIGxpYlhwbQotbXVzdCBiZSBpbnN0YWxsZWQuICAoSXQgaXMgcHJvYmFibHkgYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgc2l0ZSAKK211c3QgYmUgaW5zdGFsbGVkLiAgSXQgaXMgcHJvYmFibHkgYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUgc2l0ZSAKIC5CIHdpbmUKLXdhcywgb3IgdGhlIHNvdXJjZXMgbWF5IGJlIEZUUCdkIGZyb20gZnRwLngub3JnKS4KK3dhcywgb3IgdGhlIHNvdXJjZXMgbWF5IGJlIEZUUCdkIGZyb20gZnRwLngub3JnLiAgVXN1YWxseSBpdCdzIGluIGEKK3BhY2thZ2UgbmFtZWQgc29tZXRoaW5nIGxpa2UgWEZyZWU4Ni1kZXZlbC4KKwogLlNIIElOU1RBTExBVElPTgogVG8gaW5zdGFsbCAKIC5CIFdpbmUsCi1ydW4gIi4vY29uZmlndXJlIiwgd2hpY2ggd2lsbCBkZXRlY3QgeW91ciBzcGVjaWZpYyBzZXR1cCBhbmQgY3JlYXRlCi10aGUgTWFrZWZpbGVzLiBZb3UgY2FuIHJ1biAiLi9jb25maWd1cmUgLS1oZWxwIiB0byBzZWUgdGhlIGF2YWlsYWJsZQotY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGVuIGRvICJtYWtlIGRlcGVuZDsgbWFrZSIgdG8gYnVpbGQgdGhlCitydW4gIi4vY29uZmlndXJlIiBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlLCB3aGljaCB3aWxsIAorZGV0ZWN0IHlvdXIgc3BlY2lmaWMgc2V0dXAgYW5kIGNyZWF0ZSB0aGUgTWFrZWZpbGVzLiAgWW91IGNhbiBydW4gCisiLi9jb25maWd1cmUgLS1oZWxwIiB0byBzZWUgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBUaGVuIGRvIAorIm1ha2UgZGVwZW5kOyBtYWtlIiB0byBidWlsZCB0aGUKIC5CIHdpbmUKIGV4ZWN1dGFibGUsIGFuZCB0aGVuICJtYWtlIGluc3RhbGwiIHRvIGluc3RhbGwgaXQuIEJ5IGRlZmF1bHQsCiAuQiB3aW5lCiBpcyBpbnN0YWxsZWQgaW4gL3Vzci9sb2NhbC9iaW47IHlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCBwYXRoIHdpdGgKIHRoZSAtLXByZWZpeCBvcHRpb24gd2hlbiBydW5uaW5nCiAuQiBjb25maWd1cmUuCisuUFAKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIAorLkIgUkVBRE1FCitmaWxlIGNvbnRhaW5lZCBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbgogLlNIIE9QVElPTlMKIC5UUAogLkkgLWJhY2tpbmdzdG9yZQpAQCAtNjIsMTcgKzY4LDM5IEBACiAuSSAtZGVidWcKIEVudGVyIHRoZSBkZWJ1Z2dlciBiZWZvcmUgc3RhcnRpbmcgYXBwbGljYXRpb24KIC5UUAotLkkgLWRlYnVnbXNnIG5hbWVbLG5hbWVdCi1UdXJuIGRlYnVnZ2luZyBtZXNzYWdlcyBvbiBvciBvZmYgLSBmb3IgaW5zdGFuY2UsIAotLkkgLWRlYnVnbXNnICtkbGwsK2hlYXAKLXdpbGwgdHVybiBvbiBETEwgYW5kIGhlYXAgZGVidWdnaW5nIG1lc3NhZ2VzLiAgVGhlIGZ1bGwgbGlzdCBpczogYWxsLCBhY2NlbCwKLWF0b20sIGJpdGJsdCwgYml0bWFwLCBjYXJldCwgY2RhdWRpbywgY2xhc3MsIGNsaXBib2FyZCwgY2xpcHBpbmcsIGNvbWJvLAotY29tbSwgY29tbWRsZywgY3J0ZGxsLCBjdXJzb3IsIGRjLCBkZGUsIGRpYWxvZywgZGxsLCBkb3NmcywgZHJpdmVyLCBlZGl0LAotZW52LCBldmVudCwgZXhlYywgZmlsZSwgZml4dXAsIGZvbnQsIGdkaSwgZ2xvYmFsLCBncmFwaGljcywgaGVhcCwgaG9vaywKLWljb24sIGludCwga2V5LCBrZXlib2FyZCwgbGR0LCBsaXN0Ym94LCBsb2NhbCwgbWNpLCBtY2lhbmltLCBtY2l3YXZlLCBtZGksCi1tZW51LCBtZXNzYWdlLCBtZXRhZmlsZSwgbWlkaSwgbW1pbywgbW1zeXMsIG1tdGltZSwgbW9kdWxlLCBtc2csIG5vbmNsaWVudCwKLW9sZSwgcGFsZXR0ZSwgcHJvZmlsZSwgcHJvcCwgcmVnLCByZWdpb24sIHJlbGF5LCByZXNvdXJjZSwgc2Nyb2xsLCBzZWdtZW50LAotc2VsZWN0b3Isc2VtLCBzZW5kbXNnLCBzaG0sIHN0cmVzcywgc3RyaW5nLCBzeXNjb2xvciwgdGFzaywgdGV4dCwgdGltZXIsIHRvb2xoZWxwLHZlciwgdnhkLCB3aW4sIHdpbjMyLCB3aW5zb2NrLgorLkkgLWRlYnVnbXNnIFt4eHhdI25hbWVbLFt4eHgxXSNuYW1lMV0KK1R1cm4gZGVidWdnaW5nIG1lc3NhZ2VzIG9uIG9yIG9mZi4gIAorLlJTICs3CisuUFAKK3h4eCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6IGVyciwgd2FybiwgZml4bWUsIG9yIHRyYWNlLCBhbmQgIyBjYW4gYmUKK2VpdGhlciArIG9yIC0uICBOb3RlIHRoYXQgdGhlcmUgaXMgbm90IGEgc3BhY2UgYmV0d2VlbiBuYW1lcy4KKy5QUAorRm9yIGluc3RhbmNlOgorLlBQCisuSSAtZGVidWdtc2cgd2FybitkbGwsK2hlYXAKK3dpbGwgdHVybiBvbiBETEwgYW5kIGhlYXAgd2FybmluZyBtZXNzYWdlcy4gIAorLmJyCisuSSAtZGVidWdtc2cgZml4bWUtYWxsLHdhcm4rY3Vyc29yLCtyZWxheQord2lsbCB0dXJuIG9mZiBhbGwgRklYTUUgbWVzc2FnZXMsIHR1cm4gb24gY3Vyc29yIHdhcm5pbmcgbWVzc2FnZXMsIGFuZCB0dXJuCitvbiBhbGwgcmVsYXkgbWVzc2FnZXMgKEFQSSBjYWxscykuCisuUFAKK1RoZSBmdWxsIGxpc3Qgb2YgbmFtZXMgaXM6IGFsbCwgYWNjZWwsIGFkdmFwaSwgYXNwaSwgYXRvbSwgYml0Ymx0LCBiaXRtYXAsIAorY2FyZXQsIGNkLCBjZGF1ZGlvLCBjbGFzcywgY2xpcGJvYXJkLCBjbGlwcGluZywgY29tYm8sIGNvbW0sIGNvbW1jdHJsLCAKK2NvbW1kbGcsIGNvbnNvbGUsIGNydGRsbCwgY3Vyc29yLCBkYywgZGRlLCBkZGVtbCwgZGRyYXcsIGRlYnVnLCBkaWFsb2csIAorZGlucHV0LCBkbGwsIGRvc2ZzLCBkcml2ZXIsIGRzb3VuZCwgZWRpdCwgZXZlbnQsIGV4ZWMsIGZpbGUsIGZpeHVwLCBmb250LCAKK2dkaSwgZ2xvYmFsLCBncmFwaGljcywgaGVhZGVyLCBoZWFwLCBob29rLCBpY29uLCBpbWFnZWxpc3QsIGludCwgaW50MjEsIAoraW50MzEsIGtleSwga2V5Ym9hcmQsIGxkdCwgbGlzdGJveCwgbG9jYWwsIG1jaSwgbWNpYW5pbSwgbWNpd2F2ZSwgbWRpLCBtZW51LCAKK21lc3NhZ2UsIG1ldGFmaWxlLCBtaWRpLCBtbWF1eCwgbW1pbywgbW1zeXMsIG1tdGltZSwgbW9kdWxlLCBtcHIsIG1zZywgCitub25jbGllbnQsIG50ZGxsLCBvbGUsIHBhbGV0dGUsIHByaW50LCBwcm9jZXNzLCBwcm9maWxlLCBwcm9wLCByZWcsIHJlZ2lvbiwgCityZWxheSwgcmVzb3VyY2UsIHNjcm9sbCwgc2VjdXJpdHksIHNlZ21lbnQsIHNlbGVjdG9yLCBzZW0sIHNlbmRtc2csIHNoZWxsLCAKK3NobSwgc25vb3AsIHNvdW5kLCBzdHJlc3MsIHN0cmluZywgc3lzY29sb3IsIHRhc2ssIHRleHQsIHRocmVhZCwgdGh1bmssIHRpbWVyLCAKK3Rvb2xoZWxwLCB0d2VhaywgdWl0b29scywgdXBkb3duLCB2ZXIsIHZpcnR1YWwsIHZ4ZCwgd2luLCB3aW4xNmRydiwgd2luMzIsIAord2luZywgd2luc29jaywgd25ldCwgeDExLCB4MTFkcnYuCisuUFAKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGRlYnVnZ2luZyBtZXNzYWdlcywgc2VlIHRoZSBmaWxlIAorLkkgZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzCitpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KKy5SRQogLlRQCiAuSSAtZGVwdGggbgogQ2hhbmdlIHRoZSBkZXB0aCB0byB1c2UgZm9yIG11bHRpcGxlLWRlcHRoIHNjcmVlbnMKQEAgLTEzMyw3ICsxNjEsNyBAQAogLlRQCiAuSSAtd2ludmVyIHZlcnNpb24KIFNwZWNpZnkgd2hpY2ggV2luZG93cyB2ZXJzaW9uIFdJTkUgc2hvdWxkIGltaXRhdGUuCi1Qb3NzaWJsZSBhcmd1bWVudHMgYXJlOiB3aW4zMSwgd2luOTUgYW5kIG50MzUxLgorUG9zc2libGUgYXJndW1lbnRzIGFyZTogd2luMzEsIHdpbjk1LCBudDM1MSwgYW5kIG50NDAuCiAuUEQgMQogLlNIIFBST0dSQU0vQVJHVU1FTlRTCiBUaGUgcHJvZ3JhbSBuYW1lIG1heSBiZSBzcGVjaWZpZWQgaW4gRE9TIGZvcm1hdCAoQzpcXFdJTkRPV1NcXFNPTC5FWEUpIG9yIGluIApAQCAtMTU1LDcgKzE4Myw5IEBACiAuQiBjb25maWd1cmUKIHNjcmlwdC4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgaGF2ZSBhIAogLkkgLndpbmVyYwotZmlsZSBvZiB0aGlzIGZvcm1hdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LgorZmlsZSBvZiB0aGlzIGZvcm1hdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IG9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorLkIgV0lORV9JTkkKK3BvaW50aW5nIHRvIGEgY29uZmlndXJhdGlvbiBmaWxlLgogLlNIIENPTkZJR1VSQVRJT04gRklMRSBGT1JNQVQKIEFsbCBlbnRyaWVzIGFyZSBncm91cGVkIGluIHNlY3Rpb25zOyBhIHNlY3Rpb24gYmVnaW5zIHdpdGggdGhlIGxpbmUKIC5icgpAQCAtMjkwLDYgKzMyMCwxNCBAQAogLmJyCiBkZWZhdWx0OiBub25lCiAuYnIgVXNlZCB0byBzcGVjaWZ5IHdoaWNoIG1lc3NhZ2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGxvZ2ZpbGUuCisuUFAKKy5CIFtUd2Vhay5MYXlvdXRdCisuYnIKKy5JIGZvcm1hdDogV2luOTVMb29rPTx0cnVlfGZhbHNlPgorLmJyCitkZWZhdWx0OiBmYWxzZQorLmJyIAorVXNlIFdpbjk1IGxvb2sgKHRydWUpIG9yIFdpbjMuMSBsb29rIChmYWxzZSkuCiAuU0ggU0FNUExFIENPTkZJR1VSQVRJT04gRklMRQogW0RyaXZlIEFdCiAuYnIKQEAgLTM0MCw2ICszNzgsMTIgQEAKIEV4Y2x1ZGU9V01fVElNRVI7V01fU0VUQ1VSU09SO1dNX01PVVNFTU9WRTtXTV9OQ0hJVFRFU1Q7CiAuYnIKIEluY2x1ZGU9V01fQ09NTUFORDsKKy5QUAorW1R3ZWFrLkxheW91dF0KKy5iciBXaW45NUxvb2s9W3RydWV8ZmFsc2VdCisuYnIgV2luOTVMb29rPXRydWUgZW5hYmxlcyBXaW45NS1saWtlIHdpbmRvd3MgbGF5b3V0czsgV2luOTVMb29rPWZhbHNlIAordXNlcyBXaW4zLjEtbGlrZSBkaXNwbGF5cy4gSWYgdGhpcyBzZWN0aW9uIGlzIG5vdCBpbmNsdWRlZCwgaXQgZGVmYXVsdHMKK3RvIGZhbHNlLgogLlNIIEFVVEhPUlMKIC5CIFdpbmUKIGlzIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlIHdvcmsgb2YgQm9iIEFtc3RhZHQsIERhZyBBc2hlaW0sCkBAIC0zNTYsOSArNDAwLDYgQEAKIExpbnVzIFRvcnZhbGRzLCBHcmVnb3J5IFRydWJldHNrb3ksIE1pY2hhZWwgVmVrc2xlciwgTW9ydGVuIFdlbGluZGVyLAogSmFuIFdpbGxhbW93aXVzLCBDYXJsIFdpbGxpYW1zLCBLYXJsIEd1ZW50ZXIgV3VlbnNjaCwgRXJpYyBZb3VuZ2RhbGUsCiBhbmQgSmFtZXMgWW91bmdtYW4uCi0uUFAKLVRoaXMgbWFuIHBhZ2UgaXMgbWFpbnRhaW5lZCBieSBNaWtlIFBoaWxsaXBzIChtc3BoaWxAZmFjc3RhZmYud20uZWR1KSwgc28gCi1wbGVhc2Ugc2VuZCBhbGwgY29ycmVjdGlvbnMsIGNvbW1lbnRzLCBmbGFtZXMsIGV0Yy4sIHRvIGhpbS4KIC5TSCBCVUdTCiBUaGVyZSBhcmUgdG9vIG1hbnkgdG8gY291bnQsIG11Y2ggbGVzcyBsaXN0LiAgU29tZSBidWdzIG9mIG5vdGUsIGhvd2V2ZXIsCiBhcmUgdGhhdCBwcm9ncmFtcyByZXF1aXJpbmcgVkJSVU54eHguRExMIGFyZSB1bnJlbGlhYmxlICh3aXRoIHJlcG9ydHMgb2YKQEAgLTM2NiwxOCArNDA3LDExIEBACiBhdCAxMDAlIChhbHRob3VnaCByYXBpZGx5IGltcHJvdmluZykuICBDb2xvciBzdXBwb3J0IGZvciBvdGhlciB0aGFuIDhicHAKICgyNTYgY29sb3JzKSBpcyBjdXJyZW50bHkgZmxha3kuCiAuUFAKLUEgcGFydGlhbCBsaXN0IG9mIGFwcGxpY2F0aW9ucyBrbm93biB0byB3b3JrIHdpdGggCi0uQiB3aW5lCi1pbmNsdWRlOiBzb2wsIGNydWVsLCBnb2xmLCBjbG9jaywgbm90ZXBhZCwgY2hhcm1hcCwgY2FsYywgYW5kIHd6aXAxMS4KLVRoZSBmb2xsb3dpbmcgVVJMcyBwb2ludCB0byBkaWZmZXJlbnQgc3VjY2Vzcy90ZXN0aW5nIGxpc3RzOgotLmJyCi0uSSBodHRwOi8vd3d3LmlmaS51aW8ubm8vfmRhc2gvd2luZS93b3JraW5nLWFwcHMuaHRtbAotLmJyCi0uSSBodHRwOi8vZHV0aWZwLnR3aS50dWRlbGZ0Lm5sOjgwMDAvd2luZS8KK0Egc3RhdHVzIHJlcG9ydCBvbiBtYW55IGFwcHBsaWNhdGlvbnMgaXMgYXZhaWxhYmxlIGZyb20KKy5JIGh0dHA6Ly93d3cud2luZWhxLmNvbS9hcHBzLmNnaS4KK1VzZXJzIGNhbiBhZGQsIG1vZGlmeSwgYW5kIGRlbGV0ZSBlbnRyaWVzIG9uIHRoaXMgbGlzdC4KIC5QUAotV2Ugd291bGQgbGlrZSB0byBoZWFyIGFib3V0IHdoYXQgc29mdHdhcmUgZG9lcyBydW4gdW5kZXIgCi0uQiBXaW5lLAotYW5kIHN1Y2ggcmVwb3J0cyBtYXkgYmUgcG9zdGVkIHRvIAorQnVnIHJlcG9ydHMgYW5kIHN1Y2Nlc3NlcyBtYXkgYmUgcG9zdGVkIHRvIAogLkkgY29tcC5lbXVsYXRvcnMubXMtd2luZG93cy53aW5lLgogLlNIIEFWQUlMQUJJTElUWQogVGhlIG1vc3QgcmVjZW50IHB1YmxpYyB2ZXJzaW9uIG9mIApAQCAtMzg1LDYgKzQxOSwyMCBAQAogY2FuIGJlIGZ0cCdlZCBmcm9tIHRzeC0xMS5taXQuZWR1IGluIHRoZSAvcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQgCiBkaXJlY3RvcnkuICBUaGUgcmVsZWFzZXMgYXJlIGluIHRoZSBmb3JtYXQgJ1dpbmUteXltbWRkLnRhci5neicsIAogb3IgJ1dpbmUteXltbWRkLmRpZmYuZ3onIGZvciB0aGUgZGlmZidzIGZyb20gdGhlIHByZXZpb3VzIHJlbGVhc2UuCisuUFAKK1RoZQorLkIgd2luZQoraG9tZXBhZ2UgaXMgYXQKKy5JIGh0dHA6Ly93d3cud2luZWhxLmNvbS4KK1RoaXMgd2Vic2l0ZSBjb250YWlucyBhIGdyZWF0IGRlYWwgb2YgaW5mb3JtYXRpb24gYWJvdXQKKy5CIHdpbmUKK2FzIHdlbGwgYXMgYSBjb2xsZWN0aW9uIG9mIHVub2ZmaWNpYWwgcGF0Y2hlcyBhZ2FpbnN0IHRoZSBjdXJyZW50IHJlbGVhc2UuCisuUFAKK1RoZQorLkIgd2luZSAKK25ld3Nncm91cCBpcyAKKy5JIGNvbXAuZW11bGF0b3JzLm1zLXdpbmRvd3Mud2luZS4KK0FsbCBkaXNjdXNzaW9ucyBhYm91dCB0aGUgcHJvamVjdCB0YWtlIHBsYWNlIGluIHRoaXMgZm9ydW0uCiAuU0ggRklMRVMKIC5QRCAwCiAuVFAKQEAgLTM5MiwxNCArNDQwLDEyIEBACiBUaGUgaW52b2tlciBwcm9ncmFtLgogLlRQCiAuSSAvdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmYKLU1haW4gY29uZmlndXJhdGlvbiBmaWxlIGZvciB3aW5lLgorR2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igd2luZS4KIC5UUAotLkkgQ2hhbmdlTG9nCi1DaGFuZ2VzIGluIFdpbmUsIHNpbmNlIHRoZSBiZWdpbm5pbmcgKG1vc3QgcmVjZW50IGNoYW5nZXMgZmlyc3QpCisuSSAvdXNyL2xvY2FsL2xpYi93aW5lLnN5bQorR2xvYmFsIHN5bWJvbCB0YWJsZSAodXNlZCBpbiBkZWJ1Z2dlcikKIC5UUAotLkkgY29uZmlndXJlCi1TaGVsbCBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBNYWtlZmlsZXMuICBVc3VhbGx5IGZvbGxvd2VkIGJ5Ci1tYWtlIHRvIGNvbXBpbGUgd2luZS4KLS5UUAotLkkgV2luZSBuZXdzZ3JvdXAKLVN1YnNjcmliZSB0byBjb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmUKKy5JIH4vLndpbmVyYworVXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUKKy5TSCAiU0VFIEFMU08iCitjbG9uZSgyKQpkaWZmIC0tZ2l0IGEvZmlsZXMvZGlyZWN0b3J5LmMgYi9maWxlcy9kaXJlY3RvcnkuYwppbmRleCBhYTk3NWE0Li4yNmRlZDMxIDEwMDY0NAotLS0gYS9maWxlcy9kaXJlY3RvcnkuYworKysgYi9maWxlcy9kaXJlY3RvcnkuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgY2hhciBidWZmZXJbMl07CiAgICAgLyogRklYTUU6IGFwcGFyZW50bHkgV2luZG93cyBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBpZ25vcmVkIGJ5dGUgKi8KICAgICBpZiAoIUdldFRlbXBQYXRoMzJBKCBzaXplb2YoYnVmZmVyKSwgYnVmZmVyICkpIGJ1ZmZlclswXSA9ICdDJzsKLSAgICByZXR1cm4gdG91cHBlcihidWZmZXJbMF0pIC0gJ0EnOworICAgIHJldHVybiB0b3VwcGVyKGJ1ZmZlclswXSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZmlsZXMvZHJpdmUuYyBiL2ZpbGVzL2RyaXZlLmMKaW5kZXggMjQ2YjM0Ny4uNzJlZGUzZCAxMDA2NDQKLS0tIGEvZmlsZXMvZHJpdmUuYworKysgYi9maWxlcy9kcml2ZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICBQUk9GSUxFX0dldFdpbmVJbmlTdHJpbmcoIG5hbWUsICJUeXBlIiwgImhkIiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSApOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoRFJJVkVfVHlwZXMpL3NpemVvZihEUklWRV9UeXBlc1swXSk7IGkrKykKICAgICB7Ci0gICAgICAgIGlmICghbHN0cmNtcGkzMkEoIGJ1ZmZlciwgRFJJVkVfVHlwZXNbaV0gKSkgcmV0dXJuIChEUklWRVRZUEUpaTsKKyAgICAgICAgaWYgKCFzdHJjYXNlY21wKCBidWZmZXIsIERSSVZFX1R5cGVzW2ldICkpIHJldHVybiAoRFJJVkVUWVBFKWk7CiAgICAgfQogICAgIE1TRygiJXM6IHVua25vd24gdHlwZSAnJXMnLCBkZWZhdWx0aW5nIHRvICdoZCcuXG4iLCBuYW1lLCBidWZmZXIgKTsKICAgICByZXR1cm4gVFlQRV9IRDsKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgIGNvbnN0IEZTX0RFU0NSICpkZXNjcjsKIAogICAgIGZvciAoZGVzY3IgPSBEUklWRV9GaWxlc3lzdGVtczsgZGVzY3ItPm5hbWU7IGRlc2NyKyspCi0gICAgICAgIGlmICghbHN0cmNtcGkzMkEoIHZhbHVlLCBkZXNjci0+bmFtZSApKSByZXR1cm4gZGVzY3ItPmZsYWdzOworICAgICAgICBpZiAoIXN0cmNhc2VjbXAoIHZhbHVlLCBkZXNjci0+bmFtZSApKSByZXR1cm4gZGVzY3ItPmZsYWdzOwogICAgIE1TRygiJXM6IHVua25vd24gZmlsZXN5c3RlbSB0eXBlICclcycsIGRlZmF1bHRpbmcgdG8gJ3VuaXgnLlxuIiwKIAluYW1lLCB2YWx1ZSApOwogICAgIHJldHVybiBEUklWRV9DQVNFX1NFTlNJVElWRSB8IERSSVZFX0NBU0VfUFJFU0VSVklORzsKZGlmZiAtLWdpdCBhL2ZpbGVzL3Byb2ZpbGUuYyBiL2ZpbGVzL3Byb2ZpbGUuYwppbmRleCA1M2U2MTBhLi5mYTQ3OTZlIDEwMDY0NAotLS0gYS9maWxlcy9wcm9maWxlLmMKKysrIGIvZmlsZXMvcHJvZmlsZS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIHsKICAgICB3aGlsZSAoKnNlY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoKCpzZWN0aW9uKS0+bmFtZSAmJiAhbHN0cmNtcGkzMkEoICgqc2VjdGlvbiktPm5hbWUsIG5hbWUgKSkKKyAgICAgICAgaWYgKCgqc2VjdGlvbiktPm5hbWUgJiYgIXN0cmNhc2VjbXAoICgqc2VjdGlvbiktPm5hbWUsIG5hbWUgKSkKICAgICAgICAgewogICAgICAgICAgICAgUFJPRklMRVNFQ1RJT04gKnRvX2RlbCA9ICpzZWN0aW9uOwogICAgICAgICAgICAgKnNlY3Rpb24gPSB0b19kZWwtPm5leHQ7CkBAIC0yNjYsMTIgKzI2NiwxMiBAQAogewogICAgIHdoaWxlICgqc2VjdGlvbikKICAgICB7Ci0gICAgICAgIGlmICgoKnNlY3Rpb24pLT5uYW1lICYmICFsc3RyY21waTMyQSggKCpzZWN0aW9uKS0+bmFtZSwgc2VjdGlvbl9uYW1lICkpCisgICAgICAgIGlmICgoKnNlY3Rpb24pLT5uYW1lICYmICFzdHJjYXNlY21wKCAoKnNlY3Rpb24pLT5uYW1lLCBzZWN0aW9uX25hbWUgKSkKICAgICAgICAgewogICAgICAgICAgICAgUFJPRklMRUtFWSAqKmtleSA9ICYoKnNlY3Rpb24pLT5rZXk7CiAgICAgICAgICAgICB3aGlsZSAoKmtleSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWxzdHJjbXBpMzJBKCAoKmtleSktPm5hbWUsIGtleV9uYW1lICkpCisgICAgICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKCAoKmtleSktPm5hbWUsIGtleV9uYW1lICkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBQUk9GSUxFS0VZICp0b19kZWwgPSAqa2V5OwogICAgICAgICAgICAgICAgICAgICAqa2V5ID0gdG9fZGVsLT5uZXh0OwpAQCAtMzAwLDEyICszMDAsMTIgQEAKIHsKICAgICB3aGlsZSAoKnNlY3Rpb24pCiAgICAgewotICAgICAgICBpZiAoKCpzZWN0aW9uKS0+bmFtZSAmJiAhbHN0cmNtcGkzMkEoICgqc2VjdGlvbiktPm5hbWUsIHNlY3Rpb25fbmFtZSApKQorICAgICAgICBpZiAoKCpzZWN0aW9uKS0+bmFtZSAmJiAhc3RyY2FzZWNtcCggKCpzZWN0aW9uKS0+bmFtZSwgc2VjdGlvbl9uYW1lICkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFBST0ZJTEVLRVkgKiprZXkgPSAmKCpzZWN0aW9uKS0+a2V5OwogICAgICAgICAgICAgd2hpbGUgKCprZXkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFsc3RyY21waTMyQSggKCprZXkpLT5uYW1lLCBrZXlfbmFtZSApKSByZXR1cm4gKmtleTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoICgqa2V5KS0+bmFtZSwga2V5X25hbWUgKSkgcmV0dXJuICprZXk7CiAgICAgICAgICAgICAgICAga2V5ID0gJigqa2V5KS0+bmV4dDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY3JlYXRlKSByZXR1cm4gTlVMTDsKQEAgLTQ3Niw3ICs0NzYsNyBAQAogICAgIFBST0ZJTEVLRVkgKmtleTsKICAgICB3aGlsZSAoc2VjdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChzZWN0aW9uLT5uYW1lICYmICFsc3RyY21waTMyQSggc2VjdGlvbi0+bmFtZSwgc2VjdGlvbl9uYW1lICkpCisgICAgICAgIGlmIChzZWN0aW9uLT5uYW1lICYmICFzdHJjYXNlY21wKCBzZWN0aW9uLT5uYW1lLCBzZWN0aW9uX25hbWUgKSkKICAgICAgICAgewogICAgICAgICAgICAgSU5UMzIgb2xkbGVuID0gbGVuOwogICAgICAgICAgICAgZm9yIChrZXkgPSBzZWN0aW9uLT5rZXk7IGtleTsga2V5ID0ga2V5LT5uZXh0KQpAQCAtNjY0LDcgKzY2NCw3IEBACiAKICAgICAvKiBTZWFyY2ggZm9yIHRoZSBjb3JyZWN0IHNlY3Rpb24gKi8KICAgICBmb3Ioc2NhbnNlY3QgPSBXaW5lUHJvZmlsZTsgc2NhbnNlY3Q7IHNjYW5zZWN0ID0gc2NhbnNlY3QtPm5leHQpIHsKLQlpZihzY2Fuc2VjdC0+bmFtZSAmJiAhbHN0cmNtcGkzMkEoc2NhbnNlY3QtPm5hbWUsIHNlY3Rpb24pKSB7CisJaWYoc2NhbnNlY3QtPm5hbWUgJiYgIXN0cmNhc2VjbXAoc2NhbnNlY3QtPm5hbWUsIHNlY3Rpb24pKSB7CiAKIAkgICAgLyogRW51bWVyYXRlIGVhY2gga2V5IHdpdGggdGhlIGNhbGxiYWNrICovCiAJICAgIGZvcihzY2Fua2V5ID0gc2NhbnNlY3QtPmtleTsgc2NhbmtleTsgc2NhbmtleSA9IHNjYW5rZXktPm5leHQpIHsKQEAgLTc1Miw2ICs3NTIsMTIgQEAKICAgICBjb25zdCBjaGFyICpwOwogICAgIEZJTEUgKmY7CiAKKyAgICBpZiAoIChwID0gZ2V0ZW52KCAiV0lORV9JTkkiICkpICYmIChmID0gZm9wZW4oIHAsICJyIiApKSApCisgICAgICB7CisJV2luZVByb2ZpbGUgPSBQUk9GSUxFX0xvYWQoIGYgKTsKKwlmY2xvc2UoIGYgKTsKKwlyZXR1cm4gMTsKKyAgICAgIH0KICAgICBpZiAoKHAgPSBnZXRlbnYoICJIT01FIiApKSAhPSBOVUxMKQogICAgIHsKICAgICAgICAgbHN0cmNweW4zMkEoYnVmZmVyLCBwLCBNQVhfUEFUSE5BTUVfTEVOIC0gc2l6ZW9mKFBST0ZJTEVfV2luZUluaU5hbWUpKTsKQEAgLTEwNzcsMTEgKzEwODMsNjcgQEAKIFdPUkQgV0lOQVBJIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbk5hbWVzMTYoIExQU1RSIGJ1ZmZlciwgV09SRCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIGZpbGVuYW1lICkKIHsKLSAgICBGSVhNRShwcm9maWxlLCAiKCVwLCVkLCVzKTpzdHViXG4iLCBidWZmZXIsIHNpemUsIGZpbGVuYW1lKTsKLSAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAnXDAnOwotICAgIHJldHVybiAwOworIGNoYXIgKmJ1ZjsKKyBpbnQgbCxjdXJzaXplOworIFBST0ZJTEVTRUNUSU9OICpzZWN0aW9uOworCisgICAgaWYgKFBST0ZJTEVfT3BlbiggZmlsZW5hbWUgKSkgeworCWJ1Zj1idWZmZXI7CisJY3Vyc2l6ZT0wOworCXNlY3Rpb249Q3VyUHJvZmlsZS5zZWN0aW9uOworCWZvciAoIDsgc2VjdGlvbjsgc2VjdGlvbiA9IHNlY3Rpb24tPm5leHQpIHsKKwkJbD1zdHJsZW4gKHNlY3Rpb24tPm5hbWUpOworCQljdXJzaXplKz1sKzE7CisgICAgICAgIAlpZiAoY3Vyc2l6ZSA+IHNpemUrMSkKKwkJCXJldHVybiBzaXplLTI7CisJCXN0cmNweSAoYnVmLHNlY3Rpb24tPm5hbWUpOworCQlidWYrPWw7CisJCSpidWY9MDsKKwkJYnVmKys7CisJCX0KKyAJYnVmKys7CisgCSpidWY9MDsKKyAJcmV0dXJuIChidWYtYnVmZmVyKTsKKyB9CisgcmV0dXJuIEZBTFNFOwogfQogCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3QzMkEgKEtFUk5FTDMyLjM3MCkKKyAqLworV09SRCBXSU5BUEkgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3QzMkEgKExQQ1NUUiBzZWN0aW9uLCBMUENTVFIga2V5LCAKKwlMUFZPSUQgYnVmLCBVSU5UMzIgbGVuLCBMUENTVFIgZmlsZW5hbWUpCit7CisgICAgUFJPRklMRUtFWSAqazsKKworICAgIGlmIChQUk9GSUxFX09wZW4oIGZpbGVuYW1lICkpIHsKKyAgICAgICAgaz1QUk9GSUxFX0ZpbmQgKCAmQ3VyUHJvZmlsZS5zZWN0aW9uLCBzZWN0aW9uLCBrZXksIEZBTFNFKTsKKwlpZiAoIWspIHJldHVybiBGQUxTRTsKKyAgICAJbHN0cmNweW4zMkEoIGJ1Ziwgay0+dmFsdWUsIHN0cmxlbihrLT52YWx1ZSkpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIHJldHVybiBGQUxTRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBXcml0ZVByaXZhdGVQcm9maWxlU3RydWN0MzJBIChLRVJORUwzMi43NDQpCisgKi8KK1dPUkQgV0lOQVBJIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3QzMkEgKExQQ1NUUiBzZWN0aW9uLCBMUENTVFIga2V5LCAKKwlMUFZPSUQgYnVmLCBVSU5UMzIgYnVmc2l6ZSwgTFBDU1RSIGZpbGVuYW1lKQoreworICAgIGlmICgoIXNlY3Rpb24pICYmICgha2V5KSAmJiAoIWJ1ZikpIHsJLyogZmx1c2ggdGhlIGNhY2hlICovCisgICAgICAgIFBST0ZJTEVfRmx1c2hGaWxlKCk7CisJcmV0dXJuIEZBTFNFOworIAl9CisKKyAgICBpZiAoIVBST0ZJTEVfT3BlbiggZmlsZW5hbWUgKSkgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBQUk9GSUxFX1NldFN0cmluZyggc2VjdGlvbiwga2V5LCBidWYpOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFdyaXRlT3V0UHJvZmlsZXMgICAoS0VSTkVMLjMxNSkKICAqLwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvZHJpdmVyLmMgYi9ncmFwaGljcy9kcml2ZXIuYwppbmRleCBhMjJjZDZkLi5jNGEyOGQ2IDEwMDY0NAotLS0gYS9ncmFwaGljcy9kcml2ZXIuYworKysgYi9ncmFwaGljcy9kcml2ZXIuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnR1JBUEhJQ1NfRFJJVkVSCiB7CkBAIC01NCw3ICs1NSw3IEBACiAgICAgR1JBUEhJQ1NfRFJJVkVSICpkcml2ZXIgPSBmaXJzdERyaXZlcjsKICAgICB3aGlsZSAoZHJpdmVyKQogICAgIHsKLSAgICAgICAgaWYgKCFsc3RyY21waTMyQSggZHJpdmVyLT5uYW1lLCBuYW1lICkpIHJldHVybiBkcml2ZXItPmZ1bmNzOworICAgICAgICBpZiAoIXN0cmNhc2VjbXAoIGRyaXZlci0+bmFtZSwgbmFtZSApKSByZXR1cm4gZHJpdmVyLT5mdW5jczsKICAgICAgICAgZHJpdmVyID0gZHJpdmVyLT5uZXh0OwogICAgIH0KICAgICByZXR1cm4gZ2VuZXJpY0RyaXZlciA/IGdlbmVyaWNEcml2ZXItPmZ1bmNzIDogTlVMTDsKQEAgLTcxLDcgKzcyLDcgQEAKICAgICAgICAgR1JBUEhJQ1NfRFJJVkVSICoqcHBEcml2ZXIgPSAmZmlyc3REcml2ZXI7CiAgICAgICAgIHdoaWxlICgqcHBEcml2ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbHN0cmNtcGkzMkEoICgqcHBEcml2ZXIpLT5uYW1lLCBuYW1lICkpCisgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoICgqcHBEcml2ZXIpLT5uYW1lLCBuYW1lICkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgR1JBUEhJQ1NfRFJJVkVSICpkcml2ZXIgPSAqcHBEcml2ZXI7CiAgICAgICAgICAgICAgICAgKCpwcERyaXZlcikgPSBkcml2ZXItPm5leHQ7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9wc2Rydi9NYWtlZmlsZS5pbiBiL2dyYXBoaWNzL3BzZHJ2L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OWYwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaGljcy9wc2Rydi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIzIEBACitERUZTICAgICAgPSAtRF9fV0lORV9fCitUT1BTUkNESVIgPSBAdG9wX3NyY2RpckAKK1RPUE9CSkRJUiA9IC4uLy4uCitTUkNESVIgICAgPSBAc3JjZGlyQAorVlBBVEggICAgID0gQHNyY2RpckAKK01PRFVMRSAgICA9IHBzZHJ2CisKK0NfU1JDUyA9IFwKKwlhZm0uYyBcCisJZHJpdmVyLmMgXAorCWVzY2FwZS5jIFwKKwlmb250LmMgXAorCWdyYXBoaWNzLmMgXAorCWluaXQuYyBcCisJb2JqZWN0cy5jIFwKKwlwcy5jIFwKKwl0ZXh0LmMKKworYWxsOiAkKE1PRFVMRSkubworCitATUFLRV9SVUxFU0AKKworIyMjIERlcGVuZGVuY2llczoKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BzZHJ2L1JFQURNRSBiL2dyYXBoaWNzL3BzZHJ2L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZjZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGhpY3MvcHNkcnYvUkVBRE1FCkBAIC0wLDAgKzEsNzUgQEAKK1dpbmUgUG9zdHNjcmlwdCBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBjb21wbGV0ZSB0aGlzIHdpbGwgYWxsb3cgV2luZSB0byBnZW5lcmF0ZSBQb3N0c2NyaXB0IGZpbGVzIHdpdGhvdXQgbmVlZGluZworYW4gZXh0ZXJuYWwgcHJpbnRlciBkcml2ZXIuIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwcmludCB0byBhIG5vbiBQb3N0c2NyaXB0CitwcmludGVyIGJ5IGZpbHRlcmluZyB0aGUgb3V0cHV0IHRocm91Z2ggZ2hvc3RzY3JpcHQuCisKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworQXQgdGhlIG1vbWVudCB0aGUgZHJpdmVyIHdpbGwgb25seSB3b3JrIGZvciAxNiBiaXQgYXBwcywgdGhlIG1vdmUgdG8gMzIgYml0CitzaG91bGQgYmUgcXVpdGUgZWFzeSwgSSdkIGp1c3QgbGlrZSB0byBpbXByb3ZlIGl0IGZpcnN0LiBUaGUgZHJpdmVyIGJlaGF2ZXMgYXMKK2lmIGl0IHdlcmUgYSBEUlYgZmlsZSBjYWxsZWQgV0lORVBTLkRSViAuIFRvIGluc3RhbGwgaXQgYXMgdGhlIGRlZmF1bHQgcHJpbnRlcgorZHJpdmVyIGFkZAorCitkZXZpY2U9V2luZSBQb3N0c2NyaXB0IERyaXZlcixXSU5FUFMsTFBUMToKKwordG8gdGhlIFt3aW5kb3dzXSBzZWN0aW9uIG9mIHdpbi5pbmkgLiBZb3UgbWF5IHByZWZlciB0byBhZGQKKworV2luZSBQb3N0c2NyaXB0IERyaXZlcj1XSU5FUFMsTFBUMToKKwordG8gdGhlIFtkZXZpY2VzXSBzZWN0aW9uIG9mIHdpbi5pbmkgaW5zdGVhZC4KKworWW91IHdpbGwgbmVlZCBBZG9iZSBGb250IE1ldHJpYyAoQUZNKSBmaWxlcyBmb3IgdGhlICh0eXBlIDEgUG9zdHNjcmlwdCkgZm9udHMKK3RoYXQgeW91IHdpc2ggdG8gdXNlLiBZb3UgY2FuIGdldCB0aGVzZSBmcm9tCisKK2Z0cDovL2Z0cC5hZG9iZS5jb20vcHViL2Fkb2JlL3R5cGUvd2luL2FsbC9hZm1maWxlcyAuIFRoZSBkaXJlY3RvcmllcyBiYXNlMTcgb3IKK2Jhc2UzNSBhcmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQuCisKK05vdGUgdGhhdCB0aGVzZSBhcmUgb25seSB0aGUgZm9udCBtZXRyaWNzIGFuZCBub3QgdGhlIGZvbnRzIHRoZW1zZWx2ZXMuIEF0CitwcmVzZW50IHRoZSBkcml2ZXIgZG9lcyBub3QgZG93bmxvYWQgYWRkaXRpb25hbCBmb250cywgc28geW91IGNhbiBvbmx5IHVzZQorZm9udHMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBwcmludGVyLgorCitUaGVuIGNyZWF0ZSBhIFthZm1maWxlc10gc2VjdGlvbiBpbiB5b3VyIHdpbmUuY29uZiAob3Igfi8ud2luZXJjKSBhbmQgYWRkIGEKK2xpbmUgb2YgdGhlIGZvcm0KKworZmlsZT0vdW5peC9wYXRoL25hbWUvZmlsZW5hbWUuYWZtCisKK2ZvciBlYWNoIEFGTSBmaWxlIHRoYXQgeW91IHdpc2ggdG8gdXNlLiBbVGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZV0KKworTm90ZSB0aGF0IHlvdSBuZWVkIG5vdCBzZXQgcHJpbnRlcj1vbiBpbiB0aGUgW3dpbmVdIHNlY3Rpb24gb2Ygd2luZS5jb25mLCB0aGlzCitlbmFibGVzIHByaW50aW5nIHZpYSBleHRlcm5hbCBwcmludGVyIGRyaXZlcnMgYW5kIGRvZXMgbm90IGFmZmVjdCB3aW5lcHMuCisKK0lmIHlvdSdyZSBsdWNreSB5b3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHByb2R1Y2UgUFMgZmlsZXMgZnJvbSBXaW5lIQorCitJJ3ZlIHRlc3RlZCBpdCB3aXRoIHdpbjMuMSBub3RlcGFkL3dyaXRlLCBXaW53b3JkNiBhbmQgT3JpZ2luNC4wIHdpdGggc29tZQorZGVncmVlIG9mIHN1Y2Nlc3MgLSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHNvbWV0aGluZyBvdXQsIGl0IG1heSBub3QgYmUgaW4KK3RoZSByaWdodCBwbGFjZS4KKworVE9ETyAvIEJ1Z3MKKy0tLS0tLS0tLS0tCisKK0RyaXZlciBkb2Vzbid0IHJlYWQgUFBEIGZpbGVzIC0gaXQgc2hvdWxkLgorCitBNCBwb3J0cmFpdCBtb2RlIGlzIGhhcmQgY29kZWQgaW4gYXQgdGhlIG1vbWVudC4KKworR3JhcGhpY3MgYXJlIGJhc2ljYWxseSBub24tZXhpc3RlbnQuIE9ubHkgTW92ZVRvL0xpbmVUby9SZWN0YW5nbGUgd2l0aCBhIHRoaW4KK2JsYWNrIHBlbi4KKworTm8gY29sb3VyLgorCitBRk0gcGFyc2luZyBpcyBub3QgZmluaXNoZWQgKG9yIGlkZWFsKS4KKworTm8gVHJ1ZVR5cGUgZG93bmxvYWQuCisKK01hbnkgcGFydGlhbC1pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCisKK1Byb2JhYmx5IG1hbnkgbW9yZS4uLgorCisKK1NpbmNlIHRoZSBkcml2ZXIgaXMgdmVyeSB2ZXJ5IGFscGhhLCB0aGluZ3MgYXJlIGxpa2VseSB0byBjaGFuZ2UgcXVpY2tseS4KK1BsZWFzZSBjb250YWN0IG1lIGlmIHlvdSB3YW50IHRvIGhlbHAgc28gdGhhdCB3ZSBjYW4gYXZvaWQgZHVwbGljYXRpb24uCisKK0h1dyBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94LmFjLnVrPgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvcHNkcnYvYWZtLmMgYi9ncmFwaGljcy9wc2Rydi9hZm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTdlZTlmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGhpY3MvcHNkcnYvYWZtLmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKglBZG9iZSBGb250IE1ldHJpYyAoQUZNKSBmaWxlIHBhcnNpbmcKKyAqCVNlZSBodHRwOi8vd3d3LmFkb2JlLmNvbS9zdXBwb3J0c2VydmljZS9kZXZyZWxhdGlvbnMvUERGUy9UTi81MDA0LkFGTV9TcGVjLnBkZgorICoKKyAqCUNvcHlyaWdodCAxOTk4ICBIdXcgRCBNIERhdmllcworICogCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJ3aW5udC5oIiAvKiBIRUFQX1pFUk9fTUVNT1JZICovCisjaW5jbHVkZSAicHNkcnYuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLyogcHRyIHRvIGZvbnRzIGZvciB3aGljaCB3ZSBoYXZlIGFmbSBmaWxlcyAqLworRm9udEZhbWlseSAqUFNEUlZfQUZNRm9udExpc3QgPSBOVUxMOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0FGTUdldENoYXJNZXRyaWNzCisgKgorICogUGFyc2VzIENoYXJNZXRyaWMgc2VjdGlvbiBvZiBBRk0gZmlsZS4KKyAqCisgKiBBY3R1YWxseSBvbmx5IGNvbGxlY3RzIHRoZSB3aWR0aHMgb2YgbnVtYmVyZWQgY2hhcnMgYW5kIHB1dHMgdGhlbiBpbgorICogYWZtLT5DaGFyV2lkdGhzLgorICovCitzdGF0aWMgdm9pZCBQU0RSVl9BRk1HZXRDaGFyTWV0cmljcyhBRk0gKmFmbSwgRklMRSAqZnApCit7CisgICAgY2hhciBidWZbMjU2XTsKKyAgICBjaGFyICpjcCwgKml0ZW0sICp2YWx1ZTsKKyAgICBpbnQgaSwgY2hhcm5vOworCisgICAgZm9yKGkgPSAwOyBpIDwgYWZtLT5OdW1vZk1ldHJpY3M7IGkrKykgeworICAgICAgICBpZighZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisJICAgRVJSKHBzZHJ2LCAiVW5leHBlY3RlZCBFT0ZcbiIpOworCSAgIHJldHVybjsKKwl9CisJY3AgPSBidWYgKyBzdHJsZW4oYnVmKTsKKwlkbyB7CisJICAgICpjcCA9ICdcMCc7CisJICAgIGNwLS07CisJfSB3aGlsZShjcCA+IGJ1ZiAmJiBpc3NwYWNlKCpjcCkpOworCisgICAgICAgIGl0ZW0gPSBzdHJ0b2soYnVmLCAiOyIpOworCWlmKCFzdHJuY21wKGl0ZW0sICJDICIsIDIpKSB7CisJICAgIHZhbHVlID0gc3RyY2hyKGl0ZW0sICcgJyk7CisJICAgIHNzY2FuZih2YWx1ZSwgIiAlZCIsICZjaGFybm8pOworCX0gZWxzZSBpZighc3RybmNtcChpdGVtLCAiQ0ggIiwgMykpIHsKKwkgICAgdmFsdWUgPSBzdHJyY2hyKGl0ZW0sICcgJyk7CisJICAgIHNzY2FuZih2YWx1ZSwgIiAleCIsICZjaGFybm8pOworCX0gZWxzZSB7CisJICAgIFdBUk4ocHNkcnYsICJEb24ndCB1bmRlcnN0YW5kICclcydcbiIsIGl0ZW0pOworCSAgICByZXR1cm47CisJfQorCisJd2hpbGUoKGl0ZW0gPSBzdHJ0b2soTlVMTCwgIjsiKSkpIHsKKwkgICAgd2hpbGUoaXNzcGFjZSgqaXRlbSkpCisJICAgICAgICBpdGVtKys7CisJICAgIHZhbHVlID0gc3RyY2hyKGl0ZW0sICcgJyk7CisJICAgIGlmKCF2YWx1ZSkgLyogbGFzdCBjaGFyIG1heWJlIGEgJzsnIGJ1dCBubyB3aGl0ZSBzcGFjZSBhZnRlciBpdCAqLworCSAgICAgICAgYnJlYWs7CisJICAgIHZhbHVlKys7CisKKwkgICAgaWYoIXN0cm5jbXAoIldYICIsIGl0ZW0sIDMpIHx8ICFzdHJuY21wKCJXMFggIiwgaXRlbSwgNCkpIHsKKwkgICAgICAgIGlmKGNoYXJubyA+PSAwICYmIGNoYXJubyA8PSAweGZmKQorCQkgICAgc3NjYW5mKHZhbHVlLCAiJWYiLCAmKGFmbS0+Q2hhcldpZHRoc1tjaGFybm9dKSk7CisJICAgIH0KKwkgICAgLyogd291bGQgY2Fycnkgb24gaGVyZSB0byBzY2FuIGluIEJCb3gsIG5hbWUgYW5kIGxpZ3MgKi8KKworCX0KKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0FGTVBhcnNlCisgKgorICogRmlsbHMgb3V0IGFuIEFGTSBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgc3Vic3RydWN0dXJlcyAoc2VlIHBzZHJ2LmgpCisgKiBmb3IgYSBnaXZlbiBBRk0gZmlsZS4gQWxsIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgcHJvY2VzcyBoZWFwLiAKKyAqIFJldHVybnMgYSBwdHIgdG8gdGhlIEFGTSBzdHJ1Y3R1cmUgb3IgTlVMTCBvbiBlcnJvci4KKyAqCisgKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAod2UgZG9uJ3QgaGFuZGxlIGtlcm5pbmcgeWV0KSBhbmQgbm90IGVmZmljaWVudAorICovCitzdGF0aWMgQUZNICpQU0RSVl9BRk1QYXJzZShjaGFyIGNvbnN0ICpmaWxlKQoreworICAgIEZJTEUgKmZwOworICAgIGNoYXIgYnVmWzI1Nl07CisgICAgY2hhciAqdmFsdWU7CisgICAgQUZNICphZm07CisgICAgY2hhciAqY3A7CisKKyAgICBpZigoZnAgPSBmb3BlbihmaWxlLCAiciIpKSA9PSBOVUxMKSB7CisgICAgICAgIE1TRygiQ2FuJ3Qgb3BlbiBBRk0gZmlsZSAnJXMnLiBQbGVhc2UgY2hlY2sgd2luZS5jb25mIC5cbiIsIGZpbGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhZm0gPSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgSEVBUF9aRVJPX01FTU9SWSwgc2l6ZW9mKEFGTSkpOworICAgIGlmKCFhZm0pIHsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgd2hpbGUoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisJY3AgPSBidWYgKyBzdHJsZW4oYnVmKTsKKwlkbyB7CisJICAgICpjcCA9ICdcMCc7CisJICAgIGNwLS07CisJfSB3aGlsZShjcCA+IGJ1ZiAmJiBpc3NwYWNlKCpjcCkpOworCisgICAgICAgIHZhbHVlID0gc3RyY2hyKGJ1ZiwgJyAnKTsKKwlpZih2YWx1ZSkKKwkgICAgdmFsdWUrKzsKKworCWlmKCFzdHJuY21wKCJGb250TmFtZSIsIGJ1ZiwgOCkpIHsKKwkgICAgYWZtLT5Gb250TmFtZSA9IEhFQVBfc3RyZHVwQShHZXRQcm9jZXNzSGVhcCgpLCAwLCB2YWx1ZSk7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmKCFzdHJuY21wKCJGdWxsTmFtZSIsIGJ1ZiwgOCkpIHsKKwkgICAgYWZtLT5GdWxsTmFtZSA9IEhFQVBfc3RyZHVwQShHZXRQcm9jZXNzSGVhcCgpLCAwLCB2YWx1ZSk7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmKCFzdHJuY21wKCJGYW1pbHlOYW1lIiwgYnVmLCAxMCkpIHsKKwkgICAgYWZtLT5GYW1pbHlOYW1lID0gSEVBUF9zdHJkdXBBKEdldFByb2Nlc3NIZWFwKCksIDAsIHZhbHVlKTsKKwkgICAgY29udGludWU7CisJfQorCQorCWlmKCFzdHJuY21wKCJXZWlnaHQiLCBidWYsIDYpKSB7CisJICAgIGlmKCFzdHJuY21wKCJSb21hbiIsIHZhbHVlLCA1KSB8fCAhc3RybmNtcCgiTWVkaXVtIiwgdmFsdWUsIDYpCisJICAgICAgIHx8ICFzdHJuY21wKCJCb29rIiwgdmFsdWUsIDQpKQorCSAgICAgICAgYWZtLT5XZWlnaHQgPSBGV19OT1JNQUw7CisJICAgIGVsc2UgaWYoIXN0cm5jbXAoIkRlbWkiLCB2YWx1ZSwgNCkpCisJICAgICAgICBhZm0tPldlaWdodCA9IEZXX0RFTUlCT0xEOworCSAgICBlbHNlIGlmKCFzdHJuY21wKCJCb2xkIiwgdmFsdWUsIDQpKQorCSAgICAgICAgYWZtLT5XZWlnaHQgPSBGV19CT0xEOworCSAgICBlbHNlIGlmKCFzdHJuY21wKCJMaWdodCIsIHZhbHVlLCA1KSkKKwkgICAgICAgIGFmbS0+V2VpZ2h0ID0gRldfTElHSFQ7CisJICAgIGVsc2UgeworICAJICAgICAgICBGSVhNRShwc2RydiwgIlVua293biBBRk0gV2VpZ2h0ICclcydcbiIsIHZhbHVlKTsKKwkgICAgICAgIGFmbS0+V2VpZ2h0ID0gRldfTk9STUFMOworCSAgICB9CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmKCFzdHJuY21wKCJJdGFsaWNBbmdsZSIsIGJ1ZiwgMTEpKSB7CisJICAgIHNzY2FuZih2YWx1ZSwgIiVmIiwgJihhZm0tPkl0YWxpY0FuZ2xlKSk7CisJICAgIGNvbnRpbnVlOworCX0KKworCWlmKCFzdHJuY21wKCJJc0ZpeGVkUGl0Y2giLCBidWYsIDEyKSkgeworCSAgICBpZighc3RybmNhc2VjbXAoImZhbHNlIiwgdmFsdWUsIDUpKQorCSAgICAgICAgYWZtLT5Jc0ZpeGVkUGl0Y2ggPSBGQUxTRTsKKwkgICAgZWxzZQorCSAgICAgICAgYWZtLT5Jc0ZpeGVkUGl0Y2ggPSBUUlVFOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZighc3RybmNtcCgiRm9udEJCb3giLCBidWYsIDgpKSB7CisJICAgIHNzY2FuZih2YWx1ZSwgIiVmICVmICVmICVmIiwgJihhZm0tPkZvbnRCQm94LmxseCksIAorCQkgICAmKGFmbS0+Rm9udEJCb3gubGx5KSwgJihhZm0tPkZvbnRCQm94LnVyeCksIAorCQkgICAmKGFmbS0+Rm9udEJCb3gudXJ5KSApOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZighc3RybmNtcCgiVW5kZXJsaW5lUG9zaXRpb24iLCBidWYsIDE3KSkgeworCSAgICBzc2NhbmYodmFsdWUsICIlZiIsICYoYWZtLT5VbmRlcmxpbmVQb3NpdGlvbikgKTsKKwkgICAgY29udGludWU7CisJfQorCisJaWYoIXN0cm5jbXAoIlVuZGVybGluZVRoaWNrbmVzcyIsIGJ1ZiwgMTgpKSB7CisJICAgIHNzY2FuZih2YWx1ZSwgIiVmIiwgJihhZm0tPlVuZGVybGluZVRoaWNrbmVzcykgKTsKKwkgICAgY29udGludWU7CisJfQorCisJaWYoIXN0cm5jbXAoIkNhcEhlaWdodCIsIGJ1ZiwgOSkpIHsKKwkgICAgc3NjYW5mKHZhbHVlLCAiJWYiLCAmKGFmbS0+Q2FwSGVpZ2h0KSApOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZighc3RybmNtcCgiWEhlaWdodCIsIGJ1ZiwgNykpIHsKKwkgICAgc3NjYW5mKHZhbHVlLCAiJWYiLCAmKGFmbS0+WEhlaWdodCkgKTsKKwkgICAgY29udGludWU7CisJfQorCisJaWYoIXN0cm5jbXAoIkFzY2VuZGVyIiwgYnVmLCA4KSkgeworCSAgICBzc2NhbmYodmFsdWUsICIlZiIsICYoYWZtLT5Bc2NlbmRlcikgKTsKKwkgICAgY29udGludWU7CisJfQorCisJaWYoIXN0cm5jbXAoIkRlc2NlbmRlciIsIGJ1ZiwgOSkpIHsKKwkgICAgc3NjYW5mKHZhbHVlLCAiJWYiLCAmKGFmbS0+RGVzY2VuZGVyKSApOworCSAgICBjb250aW51ZTsKKwl9CisKKwlpZighc3RybmNtcCgiU3RhcnRDaGFyTWV0cmljcyIsIGJ1ZiwgMTYpKSB7CisJICAgIHNzY2FuZih2YWx1ZSwgIiVkIiwgJihhZm0tPk51bW9mTWV0cmljcykgKTsKKwkgICAgUFNEUlZfQUZNR2V0Q2hhck1ldHJpY3MoYWZtLCBmcCk7CisJICAgIGNvbnRpbnVlOworCX0KKworICAgIH0KKworICAgIGZjbG9zZShmcCk7CisgICAgaWYoYWZtLT5Bc2NlbmRlciA9PSAwLjApIGFmbS0+QXNjZW5kZXIgPSAxMDAwLjA7CisgICAgcmV0dXJuIGFmbTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJUFNEUlZfQWRkQUZNdG9MaXN0CisgKgorICogQWRkcyBhbiBhZm0gdG8gdGhlIGN1cnJlbnQgZm9udCBsaXN0LiBDcmVhdGVzIG5ldyBmYW1pbHkgbm9kZSBpZiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyB2b2lkIFBTRFJWX0FkZEFGTXRvTGlzdChBRk0gKmFmbSkKK3sKKyAgICBGb250RmFtaWx5ICpmYW1pbHkgPSBQU0RSVl9BRk1Gb250TGlzdDsKKyAgICBGb250RmFtaWx5ICoqaW5zZXJ0ID0gJlBTRFJWX0FGTUZvbnRMaXN0OworICAgIEFGTSAqdG1wYWZtOworCisgICAgd2hpbGUoZmFtaWx5KSB7CisgICAgICAgIGlmKCFzdHJjbXAoZmFtaWx5LT5GYW1pbHlOYW1lLCBhZm0tPkZhbWlseU5hbWUpKQorCSAgICBicmVhazsKKwlpbnNlcnQgPSAmKGZhbWlseS0+bmV4dCk7CisJZmFtaWx5ID0gZmFtaWx5LT5uZXh0OworICAgIH0KKyAgICAKKyAgICBpZighZmFtaWx5KSB7CisgICAgICAgIGZhbWlseSA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCBIRUFQX1pFUk9fTUVNT1JZLAorCQkJICAgc2l6ZW9mKCpmYW1pbHkpKTsKKwkqaW5zZXJ0ID0gZmFtaWx5OworCWZhbWlseS0+RmFtaWx5TmFtZSA9IEhFQVBfc3RyZHVwQShHZXRQcm9jZXNzSGVhcCgpLCAwLAorCQkJCQkgIGFmbS0+RmFtaWx5TmFtZSk7CisJZmFtaWx5LT5hZm0gPSBhZm07CisJcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0bXBhZm0gPSBmYW1pbHktPmFmbTsKKyAgICB3aGlsZSh0bXBhZm0tPm5leHQpCisgICAgICAgIHRtcGFmbSA9IHRtcGFmbS0+bmV4dDsKKworICAgIHRtcGFmbS0+bmV4dCA9IGFmbTsKKworICAgIHJldHVybjsKK30KKyAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX2FmbWZpbGVzQ2FsbGJhY2sKKyAqCisgKiBDYWxsYmFjayBmb3IgUFJPRklMRV9FbnVtZXJhdGVXaW5lSW5pU2VjdGlvbgorICovCitzdGF0aWMgdm9pZCBQU0RSVl9hZm1maWxlc0NhbGxiYWNrKGNoYXIgY29uc3QgKmtleSwgY2hhciBjb25zdCAqdmFsdWUsCit2b2lkICp1c2VyKQoreworICAgIEFGTSAqYWZtOworCisgICAgYWZtID0gUFNEUlZfQUZNUGFyc2UodmFsdWUpOworICAgIGlmKGFmbSkKKyAgICAgICAgUFNEUlZfQWRkQUZNdG9MaXN0KGFmbSk7CisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0R1bXBGb250TGlzdAorICoKKyAqLworc3RhdGljIHZvaWQgUFNEUlZfRHVtcEZvbnRMaXN0KHZvaWQpCit7CisgICAgRm9udEZhbWlseSAqZmFtaWx5OworICAgIEFGTSAqYWZtOworCisgICAgZm9yKGZhbWlseSA9IFBTRFJWX0FGTUZvbnRMaXN0OyBmYW1pbHk7IGZhbWlseSA9IGZhbWlseS0+bmV4dCkgeworICAgICAgICBUUkFDRShwc2RydiwgIkZhbWlseSAnJXMnXG4iLCBmYW1pbHktPkZhbWlseU5hbWUpOworCWZvcihhZm0gPSBmYW1pbHktPmFmbTsgYWZtOyBhZm0gPSBhZm0tPm5leHQpIHsKKwkgICAgVFJBQ0UocHNkcnYsICJcdEZvbnROYW1lICclcydcbiIsIGFmbS0+Rm9udE5hbWUpOworCX0KKyAgICB9CisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0dldEZvbnRNZXRyaWNzCisgKgorICogT25seSBleHBvcnRlZCBmdW5jdGlvbiBpbiB0aGlzIGZpbGUuIFBhcnNlcyBhbGwgYWZtIGZpbGVzIGxpc3RlZCBpbgorICogW2FmbWZpbGVzXSBvZiB3aW5lLmNvbmYgLgorICovCitCT09MMzIgUFNEUlZfR2V0Rm9udE1ldHJpY3Modm9pZCkKK3sKKyAgICBQUk9GSUxFX0VudW1lcmF0ZVdpbmVJbmlTZWN0aW9uKCAiYWZtZmlsZXMiLCBQU0RSVl9hZm1maWxlc0NhbGxiYWNrLCBOVUxMKTsKKyAgICBQU0RSVl9EdW1wRm9udExpc3QoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvcHNkcnYvZHJpdmVyLmMgYi9ncmFwaGljcy9wc2Rydi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjE3ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGhpY3MvcHNkcnYvZHJpdmVyLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSB0aGUgUG9zdHNjcmlwdCBkcml2ZXIuCisgKgorICogW0V4dF1EZXZpY2VNb2RlLCBEZXZpY2VDYXBhYmlsaXRpZXMuIAorICoKKyAqIFdpbGwgbmVlZCBFeHRUZXh0T3V0IGZvciB3aW53b3JkNiAodXJnaCEpCisgKgorICogQ29weXJpZ2h0IDE5OTggIEh1dyBEIE0gRGF2aWVzCisgKgorICovCisKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAicHNkcnYuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKK3N0YXRpYyBERVZNT0RFMTYgRGVmYXVsdERldk1vZGUgPSAKK3sKKy8qIGRtRGV2aWNlTmFtZSAqLwkiV2luZSBQb3N0c2NyaXB0IERyaXZlciIsCisvKiBkbVNwZWNWZXJzaW9uICovCTB4MzBhLAorLyogZG1Ecml2ZXJWZXJzaW9uICovCTB4MDAxLAorLyogZG1TaXplICovCQlzaXplb2YoREVWTU9ERTE2KSwKKy8qIGRtRHJpdmVyRXh0cmEgKi8JMCwKKy8qIGRtRmllbGRzICovCQlETV9PUklFTlRBVElPTiB8IERNX1BBUEVSU0laRSB8IERNX1BBUEVSTEVOR1RIIHwgCisJCQkgIERNX1BBUEVSV0lEVEgsCisvKiBkbU9yaWVudGF0aW9uICovCURNT1JJRU5UX1BPUlRSQUlULAorLyogZG1QYXBlclNpemUgKi8JRE1QQVBFUl9BNCwKKy8qIGRtUGFwZXJMZW5ndGggKi8JMjkzMCwKKy8qIGRtUGFwZXJXaWR0aCAqLyAgICAgIDIwMDAsCisvKiBkbVNjYWxlICovCQkwLAorLyogZG1Db3BpZXMgKi8JCTAsCisvKiBkbURlZmF1bHRTb3VyY2UgKi8JMCwKKy8qIGRtUHJpbnRRdWFsaXR5ICovCTAsCisvKiBkbUNvbG9yICovCQkwLAorLyogZG1EdXBsZXggKi8JCTAsCisvKiBkbVlSZXNvbHV0aW9uICovCTAsCisvKiBkbVRUT3B0aW9uICovCTAsCisvKiBkbUNvbGxhdGUgKi8JCTAsCisvKiBkbUZvcm1OYW1lICovCSIiLAorLyogZG1VbnVzZWRQYWRkaW5nICovICAgMCwKKy8qIGRtQml0c1BlclBlbCAqLwkwLAorLyogZG1QZWxzV2lkdGggKi8JMCwKKy8qIGRtUGVsc0hlaWdodCAqLwkwLAorLyogZG1EaXNwbGF5RmxhZ3MgKi8JMCwKKy8qIGRtRGlzcGxheUZyZXF1ZW5jeSAqLyAwCit9OworCisKK3N0YXRpYyBjaGFyIFBhcGVyTmFtZXNbXVs2NF0gPSB7Ik15IEE0In07CitzdGF0aWMgV09SRCBQYXBlcnNbXSA9IHtETVBBUEVSX0E0fTsKK3N0YXRpYyBQT0lOVDE2IFBhcGVyU2l6ZXNbXSA9IHt7MjExMCwgMjk3NX19Oworc3RhdGljIGNoYXIgQmluTmFtZXNbXVsyNF0gPSB7Ik15IEJpbiJ9Oworc3RhdGljIFdPUkQgQmluc1tdID0ge0RNQklOX0FVVE99Oworc3RhdGljIExPTkcgUmVzb2x1dGlvbnNbXVsyXSA9IHsgezYwMCw2MDB9IH07CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0V4dERldmljZU1vZGUxNglbV0lORVBTLjkwXQorICoKKyAqIEp1c3QgcmV0dXJucyBkZWZhdWx0IGRldm1vZGUgYXQgdGhlIG1vbWVudAorICovCitJTlQxNiBXSU5BUEkgUFNEUlZfRXh0RGV2aWNlTW9kZTE2KEhXTkQxNiBod25kLCBIQU5ETEUxNiBoRHJpdmVyLAorTFBERVZNT0RFMTYgbHBkbU91dHB1dCwgTFBTVFIgbHBzekRldmljZSwgTFBTVFIgbHBzelBvcnQsCitMUERFVk1PREUxNiBscGRtSW5wdXQsIExQU1RSIGxwc3pQcm9maWxlLCBXT1JEIGZ3TW9kZSkKK3sKKworICBUUkFDRShwc2RydiwKKyIoaHduZD0lMDR4LCBoRHJpdmVyPSUwNHgsIGRldk91dD0lcCwgRGV2aWNlPSclcycsIFBvcnQ9JyVzJywgZGV2SW49JXAsIFByb2ZpbGU9JyVzJywgTW9kZT0lMDR4KVxuIiwKK2h3bmQsIGhEcml2ZXIsIGxwZG1PdXRwdXQsIGxwc3pEZXZpY2UsIGxwc3pQb3J0LCBscGRtSW5wdXQsIGxwc3pQcm9maWxlLAorZndNb2RlKTsKKworICBpZighZndNb2RlKQorICAgIHJldHVybiBzaXplb2YoRGVmYXVsdERldk1vZGUpOworCisgIGlmKGZ3TW9kZSAmIERNX0NPUFkpCisgICAgbWVtY3B5KGxwZG1PdXRwdXQsICZEZWZhdWx0RGV2TW9kZSwgc2l6ZW9mKERlZmF1bHREZXZNb2RlKSk7CisgIAorICByZXR1cm4gSURPSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCVBTRFJWX0RldmljZUNhcGFiaWxpdGllczE2CVtXSU5FUFMuOTFdCisgKgorICovCitEV09SRCBXSU5BUEkgUFNEUlZfRGV2aWNlQ2FwYWJpbGl0aWVzMTYoTFBTVFIgbHBzekRldmljZSwgTFBTVFIgbHBzelBvcnQsCisgIFdPUkQgZndDYXBhYmlsaXR5LCBMUFNUUiBscHN6T3V0cHV0LCBMUERFVk1PREUxNiBscGRtKQoreworICBUUkFDRShwc2RydiwgIkNhcD0lZFxuIiwgZndDYXBhYmlsaXR5KTsKKworICBzd2l0Y2goZndDYXBhYmlsaXR5KSB7CisKKyAgY2FzZSBEQ19QQVBFUlM6CisgICAgaWYobHBzek91dHB1dCAhPSBOVUxMKQorICAgICAgbWVtY3B5KGxwc3pPdXRwdXQsIFBhcGVycywgc2l6ZW9mKFBhcGVycykpOworICAgIHJldHVybiBzaXplb2YoUGFwZXJzKSAvIHNpemVvZihXT1JEKTsKKworICBjYXNlIERDX1BBUEVSU0laRToKKyAgICBpZihscHN6T3V0cHV0ICE9IE5VTEwpCisgICAgICBtZW1jcHkobHBzek91dHB1dCwgUGFwZXJTaXplcywgc2l6ZW9mKFBhcGVyU2l6ZXMpKTsKKyAgICByZXR1cm4gc2l6ZW9mKFBhcGVyU2l6ZXMpIC8gc2l6ZW9mKFBPSU5UMTYpOworCisgIGNhc2UgRENfQklOUzoKKyAgICBpZihscHN6T3V0cHV0ICE9IE5VTEwpCisgICAgICBtZW1jcHkobHBzek91dHB1dCwgQmlucywgc2l6ZW9mKEJpbnMpKTsKKyAgICByZXR1cm4gc2l6ZW9mKEJpbnMpIC8gc2l6ZW9mKFdPUkQpOworICAgIAorICBjYXNlIERDX0JJTk5BTUVTOgorICAgIGlmKGxwc3pPdXRwdXQgIT0gTlVMTCkKKyAgICAgIG1lbWNweShscHN6T3V0cHV0LCBCaW5OYW1lcywgc2l6ZW9mKEJpbk5hbWVzKSk7CisgICAgcmV0dXJuIHNpemVvZihCaW5OYW1lcykgLyBzaXplb2YoQmluTmFtZXNbMF0pOworCisgIGNhc2UgRENfUEFQRVJOQU1FUzoKKyAgICBpZihscHN6T3V0cHV0ICE9IE5VTEwpCisgICAgICBtZW1jcHkobHBzek91dHB1dCwgUGFwZXJOYW1lcywgc2l6ZW9mKFBhcGVyTmFtZXMpKTsKKyAgICByZXR1cm4gc2l6ZW9mKFBhcGVyTmFtZXMpIC8gc2l6ZW9mKFBhcGVyTmFtZXNbMF0pOworCisgIGNhc2UgRENfT1JJRU5UQVRJT046CisgICAgcmV0dXJuIDkwOworCisgIGNhc2UgRENfRU5VTVJFU09MVVRJT05TOgorICAgIGlmKGxwc3pPdXRwdXQgIT0gTlVMTCkKKyAgICAgIG1lbWNweShscHN6T3V0cHV0LCBSZXNvbHV0aW9ucywgc2l6ZW9mKFJlc29sdXRpb25zKSk7CisgICAgcmV0dXJuIHNpemVvZihSZXNvbHV0aW9ucykgLyBzaXplb2YoUmVzb2x1dGlvbnNbMF0pOworCisKKyAgZGVmYXVsdDoKKyAgICBGSVhNRShwc2RydiwgIlVuc3VwcG9ydGVkIGNhcGFiaWxpdHkgJWRcbiIsIGZ3Q2FwYWJpbGl0eSk7CisgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJUFNEUlZfRGV2aWNlTW9kZTE2CVtXSU5FUFMuMTNdCisgKgorICovCit2b2lkIFdJTkFQSSBQU0RSVl9EZXZpY2VNb2RlMTYoSFdORDE2IGh3bmQsIEhBTkRMRTE2IGhEcml2ZXIsCitMUFNUUiBscHN6RGV2aWNlLCBMUFNUUiBscHN6UG9ydCkKK3sKKyAgICBQU0RSVl9FeHREZXZpY2VNb2RlMTYoIGh3bmQsIGhEcml2ZXIsIE5VTEwsIGxwc3pEZXZpY2UsIGxwc3pQb3J0LCBOVUxMLCAKKwkJCSAgIE5VTEwsIERNX1BST01QVCApOworICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jIGIvZ3JhcGhpY3MvcHNkcnYvZXNjYXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2NTgyYgotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICoJUG9zdHNjcmlwdCBkcml2ZXIgRXNjYXBlIGZ1bmN0aW9uCisgKgorICoJQ29weXJpZ2h0IDE5OTggIEh1dyBEIE0gRGF2aWVzCisgKi8KKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAicHNkcnYuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInByaW50LmgiCisKKworSU5UMzIgUFNEUlZfRXNjYXBlKCBEQyAqZGMsIElOVDMyIG5Fc2NhcGUsIElOVDMyIGNiSW5wdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VHUFRSIGxwSW5EYXRhLCBTRUdQVFIgbHBPdXREYXRhICkKK3sKKyAgICBQU0RSVl9QREVWSUNFICpwaHlzRGV2ID0gKFBTRFJWX1BERVZJQ0UgKilkYy0+cGh5c0RldjsKKworICAgIHN3aXRjaChuRXNjYXBlKSB7CisKKyAgICBjYXNlIE5FWFRCQU5EOiB7CisgICAgICAgIFJFQ1QxNiAqciA9IChSRUNUMTYgKilQVFJfU0VHX1RPX0xJTihscE91dERhdGEpOworCWlmKCFwaHlzRGV2LT5qb2IuYmFuZGluZykgeworCSAgICBwaHlzRGV2LT5qb2IuYmFuZGluZyA9IFRSVUU7CisJICAgIFNldFJlY3QxNiggciwgMCwgMCwgZGMtPncuZGV2Q2Fwcy0+aG9yelJlcywKKwkJICAgICAgICAgICAgICAgICAgICAgZGMtPncuZGV2Q2Fwcy0+dmVydFJlcyApOworCSAgICBUUkFDRShwc2RydiwgIk5FWFRCQU5EIHJldHVybmluZyAlZCwlZCAtICVkLCVkXG4iLCByLT5sZWZ0LAorCQkgIHItPnRvcCwgci0+cmlnaHQsIHItPmJvdHRvbSApOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgICAgIFNldFJlY3QxNiggciwgMCwgMCwgMCwgMCApOworCVRSQUNFKHBzZHJ2LCAiTkVYVEJBTkQgcmVjdCB0byAwLDAgLSAwLDBcbiIgKTsKKwlwaHlzRGV2LT5qb2IuYmFuZGluZyA9IEZBTFNFOworICAgIH0JLyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBORVdGUkFNRToKKyAgICAgICAgVFJBQ0UocHNkcnYsICJORVdGUkFNRVxuIik7CisKKyAgICAgICAgaWYoIXBoeXNEZXYtPmpvYi5oSm9iKSB7CisJICAgIEZJWE1FKHBzZHJ2LCAiaEpvYiA9PSAwLiBOb3cgd2hhdD9cbiIpOworCSAgICByZXR1cm4gMDsKKwl9CisKKwlpZighUFNEUlZfV3JpdGVFbmRQYWdlKCBkYyApKQorCSAgICByZXR1cm4gMDsKKworCXBoeXNEZXYtPmpvYi5OZWVkUGFnZUhlYWRlciA9IFRSVUU7CisJcmV0dXJuIDE7CisgICAgICAgICAgCisgICAgY2FzZSBTVEFSVERPQzoKKyAgICAgICAgVFJBQ0UocHNkcnYsICJTVEFSVERPQ1xuIik7CisgICAgICAgIGlmKHBoeXNEZXYtPmpvYi5oSm9iKSB7CisJICAgIEZJWE1FKHBzZHJ2LCAiaEpvYiAhPSAwLiBOb3cgd2hhdD9cbiIpOworCSAgICByZXR1cm4gMDsKKwl9CisKKwlwaHlzRGV2LT5qb2IuaEpvYiA9IE9wZW5Kb2IocGh5c0Rldi0+am9iLm91dHB1dCwKKwkJCQkgICAgUFRSX1NFR19UT19MSU4obHBJbkRhdGEpLCBkYy0+aFNlbGYpOworCWlmKCFwaHlzRGV2LT5qb2IuaEpvYikgeworCSAgICBXQVJOKHBzZHJ2LCAiT3BlbkpvYiBmYWlsZWRcbiIpOworCSAgICByZXR1cm4gMDsKKwl9CisJcGh5c0Rldi0+am9iLmJhbmRpbmcgPSBGQUxTRTsKKwlwaHlzRGV2LT5qb2IuTmVlZFBhZ2VIZWFkZXIgPSBGQUxTRTsKKwlwaHlzRGV2LT5qb2IuUGFnZU5vID0gMTsKKwlpZighUFNEUlZfV3JpdGVIZWFkZXIoIGRjLCBQVFJfU0VHX1RPX0xJTihscEluRGF0YSksIGNiSW5wdXQgKSkKKwkgICAgcmV0dXJuIDA7CisKKwlpZighUFNEUlZfV3JpdGVOZXdQYWdlKCBkYyApKQorCSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMTsKKworICAgIGNhc2UgUVVFUllFU0NTVVBQT1JUOgorICAgICAgICBpZihjYklucHV0ICE9IDIpIHsKKwkgICAgV0FSTihwc2RydiwgImNiSW5wdXQgIT0gMiAoPSVkKSBmb3IgUVVFUllFU0NTVVBQT1JUXG4iLCBjYklucHV0KTsKKwkgICAgcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkgICAgVUlOVDE2IG51bSA9ICooVUlOVDE2ICopUFRSX1NFR19UT19MSU4obHBJbkRhdGEpOworCSAgICBUUkFDRShwc2RydiwgIlFVRVJZRVNDU1VQUE9SVCBmb3IgJWRcbiIsIG51bSk7CSAgIAorCSAgICByZXR1cm4gMDsKKwl9CisKKyAgICBjYXNlIFNFVEFCT1JUUFJPQzoKKyAgICAgICAgRklYTUUocHNkcnYsICJTRVRBQk9SVFBST0M6IGlnbm9yaW5nXG4iKTsKKwlyZXR1cm4gMTsKKworICAgIGNhc2UgR0VUUEhZU1BBR0VTSVpFOgorICAgICAgICB7CisJICAgIFBPSU5UMTYgKnAgID0gKFBPSU5UMTYgKilQVFJfU0VHX1RPX0xJTihscE91dERhdGEpOworCSAgICAKKwkgICAgcC0+eCA9IGRjLT53LmRldkNhcHMtPmhvcnpSZXM7CisJICAgIHAtPnkgPSBkYy0+dy5kZXZDYXBzLT52ZXJ0UmVzOworCSAgICBUUkFDRShwc2RydiwgIkdFVFBIWVNQQUdFU0laRTogcmV0dXJuaW5nICVkeCVkXG4iLCBwLT54LCBwLT55KTsKKwkgICAgcmV0dXJuIDE7CisJfQorCisgICAgY2FzZSBHRVRQUklOVElOR09GRlNFVDoKKyAgICAgICAgeworCSAgICBQT0lOVDE2ICpwICA9IChQT0lOVDE2ICopUFRSX1NFR19UT19MSU4obHBPdXREYXRhKTsKKyAgICAgICAgCisJICAgIHAtPnggPSBwLT55ID0gMDsKKwkgICAgVFJBQ0UocHNkcnYsICJHRVRQUklOVElOR09GRlNFVDogcmV0dXJuaW5nICVkeCVkXG4iLCBwLT54LCBwLT55KTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgICAgCisgICAgY2FzZSBHRVRTQ0FMSU5HRkFDVE9SOgorICAgICAgICB7CisJICAgIFBPSU5UMTYgKnAgID0gKFBPSU5UMTYgKilQVFJfU0VHX1RPX0xJTihscE91dERhdGEpOworICAgICAgICAKKwkgICAgcC0+eCA9IHAtPnkgPSAwOworCSAgICBUUkFDRShwc2RydiwgIkdFVFNDQUxJTkdGQUNUT1I6IHJldHVybmluZyAlZHglZFxuIiwgcC0+eCwgcC0+eSk7CisJICAgIHJldHVybiAxOworCX0KKworICAgIGNhc2UgRU5ERE9DOgorICAgICAgICBUUkFDRShwc2RydiwgIkVORERPQ1xuIik7CisgICAgICAgIGlmKCFwaHlzRGV2LT5qb2IuaEpvYikgeworCSAgICBGSVhNRShwc2RydiwgImhKb2IgPT0gMC4gTm93IHdoYXQ/XG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCisJcGh5c0Rldi0+am9iLk5lZWRQYWdlSGVhZGVyID0gRkFMU0U7CisKKwlpZighUFNEUlZfV3JpdGVGb290ZXIoIGRjICkpCisJICAgIHJldHVybiAwOworCisgICAgICAgIGlmKCBDbG9zZUpvYiggcGh5c0Rldi0+am9iLmhKb2IgKSA9PSBTUF9FUlJPUiApIHsKKwkgICAgV0FSTihwc2RydiwgIkNsb3NlSm9iIGVycm9yXG4iKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCXBoeXNEZXYtPmpvYi5oSm9iID0gMDsKKwlyZXR1cm4gMTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEZJWE1FKHBzZHJ2LCAiVW5pbXBsZW1lbnRlZCBjb2RlIDB4JXhcbiIsIG5Fc2NhcGUpOworCXJldHVybiAwOworICAgIH0KK30KKworCmRpZmYgLS1naXQgYS9ncmFwaGljcy9wc2Rydi9mb250LmMgYi9ncmFwaGljcy9wc2Rydi9mb250LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZTVkNQotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoaWNzL3BzZHJ2L2ZvbnQuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqCVBvc3RzY3JpcHQgZHJpdmVyIGZvbnQgZnVuY3Rpb25zCisgKgorICoJQ29weXJpZ2h0IDE5OTggIEh1dyBEIE0gRGF2aWVzCisgKgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgInByaW50LmgiCisjaW5jbHVkZSAicHNkcnYuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfRk9OVF9TZWxlY3RPYmplY3QKKyAqLworSEZPTlQxNiBQU0RSVl9GT05UX1NlbGVjdE9iamVjdCggREMgKiBkYywgSEZPTlQxNiBoZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT05UT0JKICpmb250ICkKK3sKKyAgICBIRk9OVDE2IHByZXZmb250ID0gZGMtPncuaEZvbnQ7CisgICAgUFNEUlZfUERFVklDRSAqcGh5c0RldiA9IChQU0RSVl9QREVWSUNFICopZGMtPnBoeXNEZXY7CisgICAgTE9HRk9OVDE2ICpsZiA9ICYoZm9udC0+bG9nZm9udCk7CisgICAgQk9PTDMyIGJkID0gRkFMU0UsIGl0ID0gRkFMU0U7CisgICAgQUZNICphZm07CisgICAgRm9udEZhbWlseSAqZmFtaWx5OworICAgIGNoYXIgRmFjZU5hbWVbTEZfRkFDRVNJWkVdOworCisKKyAgICBUUkFDRShwc2RydiwgIkZhY2VOYW1lID0gJyVzJyBIZWlnaHQgPSAlZCBJdGFsaWMgPSAlZCBXZWlnaHQgPSAlZFxuIiwKKwkgIGxmLT5sZkZhY2VOYW1lLCBsZi0+bGZIZWlnaHQsIGxmLT5sZkl0YWxpYywgbGYtPmxmV2VpZ2h0KTsKKworICAgIGRjLT53LmhGb250ID0gaGZvbnQ7CisKKyAgICBpZihsZi0+bGZJdGFsaWMpCisgICAgICAgIGl0ID0gVFJVRTsKKyAgICBpZihsZi0+bGZXZWlnaHQgPiA1NTApCisgICAgICAgIGJkID0gVFJVRTsKKyAgICBsc3RyY3B5MzJBKEZhY2VOYW1lLCBsZi0+bGZGYWNlTmFtZSk7CisgICAgCisgICAgaWYoRmFjZU5hbWVbMF0gPT0gJ1wwJykgeworICAgICAgICBzd2l0Y2gobGYtPmxmUGl0Y2hBbmRGYW1pbHkgJiAweGYwKSB7CisJY2FzZSBGRl9ET05UQ0FSRToKKwkgICAgYnJlYWs7CisJY2FzZSBGRl9ST01BTjoKKwljYXNlIEZGX1NDUklQVDoKKwkgICAgbHN0cmNweTMyQShGYWNlTmFtZSwgIlRpbWVzIik7CisJICAgIGJyZWFrOworCWNhc2UgRkZfU1dJU1M6CisJICAgIGxzdHJjcHkzMkEoRmFjZU5hbWUsICJIZWx2ZXRpY2EiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBGRl9NT0RFUk46CisJICAgIGxzdHJjcHkzMkEoRmFjZU5hbWUsICJDb3VyaWVyIik7CisJICAgIGJyZWFrOworCWNhc2UgRkZfREVDT1JBVElWRToKKwkgICAgbHN0cmNweTMyQShGYWNlTmFtZSwgIlN5bWJvbCIpOworCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgaWYoRmFjZU5hbWVbMF0gPT0gJ1wwJykgeworICAgICAgICBzd2l0Y2gobGYtPmxmUGl0Y2hBbmRGYW1pbHkgJiAweDBmKSB7CisJY2FzZSBWQVJJQUJMRV9QSVRDSDoKKwkgICAgbHN0cmNweTMyQShGYWNlTmFtZSwgIlRpbWVzIik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIGxzdHJjcHkzMkEoRmFjZU5hbWUsICJDb3VyaWVyIik7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisKKyAgICBmb3IoZmFtaWx5ID0gUFNEUlZfQUZNRm9udExpc3Q7IGZhbWlseTsgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KSB7CisgICAgICAgIGlmKCFsc3RybmNtcDMyQShGYWNlTmFtZSwgZmFtaWx5LT5GYW1pbHlOYW1lLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZmFtaWx5LT5GYW1pbHlOYW1lKSkpCisJICAgIGJyZWFrOworICAgIH0KKyAgICBpZighZmFtaWx5KQorICAgICAgICBmYW1pbHkgPSBQU0RSVl9BRk1Gb250TGlzdDsKKworICAgIAorICAgIGZvcihhZm0gPSBmYW1pbHktPmFmbTsgYWZtOyBhZm0gPSBhZm0tPm5leHQpIHsKKyAgICAgICAgaWYoIChiZCA9PSAoYWZtLT5XZWlnaHQgPT0gRldfQk9MRCkpICYmIAorCSAgICAoaXQgPT0gKGFmbS0+SXRhbGljQW5nbGUgIT0gMC4wKSkgKQorCSAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmKCFhZm0pCisgICAgICAgIGFmbSA9IGZhbWlseS0+YWZtOyAvKiBub3QgaWRlYWwgKi8KKyAgICAKKyAgICBwaHlzRGV2LT5mb250LmFmbSA9IGFmbTsKKyAgICBwaHlzRGV2LT5mb250LnNpemUgPSBZTFNUT0RTKGRjLCBsZi0+bGZIZWlnaHQpOworICAgIGlmKHBoeXNEZXYtPmZvbnQuc2l6ZSA8IDApIHsKKyAgICAgICAgVFJBQ0UocHNkcnYsICJwaHlzRGV2LT5mb250LnNpemUgPCAwXG4iKTsKKyAgICAgICAgcGh5c0Rldi0+Zm9udC5zaXplID0gYWJzKHBoeXNEZXYtPmZvbnQuc2l6ZSk7CisgICAgICAgIFRSQUNFKHBzZHJ2LCAicGh5c0Rldi0+Zm9udC5zaXplIG5vdyAlZFxuIiwgcGh5c0Rldi0+Zm9udC5zaXplKTsKKyAgICB9CisgICAgcGh5c0Rldi0+Zm9udC5zY2FsZSA9IHBoeXNEZXYtPmZvbnQuc2l6ZSAvIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFmbS0+QXNjZW5kZXIgLSBhZm0tPkRlc2NlbmRlcik7CisKKyAgICBwaHlzRGV2LT5mb250LmVzY2FwZW1lbnQgPSBsZi0+bGZFc2NhcGVtZW50OworICAgIHBoeXNEZXYtPmZvbnQudG0udG1IZWlnaHQgPSBwaHlzRGV2LT5mb250LnNpemU7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bUFzY2VudCA9IGFmbS0+QXNjZW5kZXIgKiBwaHlzRGV2LT5mb250LnNjYWxlOworICAgIHBoeXNEZXYtPmZvbnQudG0udG1EZXNjZW50ID0gLWFmbS0+RGVzY2VuZGVyICogcGh5c0Rldi0+Zm9udC5zY2FsZTsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtSW50ZXJuYWxMZWFkaW5nID0gcGh5c0Rldi0+Zm9udC50bS50bUhlaWdodCAqIDAuMjsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtRXh0ZXJuYWxMZWFkaW5nID0gcGh5c0Rldi0+Zm9udC50bS50bUhlaWdodCAqIDAuMjsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtQXZlQ2hhcldpZHRoID0gYWZtLT5DaGFyV2lkdGhzWzEyMF0gKiAvKiB4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzRGV2LT5mb250LnNjYWxlOworICAgIHBoeXNEZXYtPmZvbnQudG0udG1NYXhDaGFyV2lkdGggPSBhZm0tPkNoYXJXaWR0aHNbNzddICogLyogTSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNEZXYtPmZvbnQuc2NhbGU7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bVdlaWdodCA9IGFmbS0+V2VpZ2h0OworICAgIHBoeXNEZXYtPmZvbnQudG0udG1JdGFsaWMgPSBhZm0tPkl0YWxpY0FuZ2xlICE9IDAuMDsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtVW5kZXJsaW5lZCA9IGxmLT5sZlVuZGVybGluZTsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtU3RydWNrT3V0ID0gbGYtPmxmU3RyaWtlT3V0OworICAgIHBoeXNEZXYtPmZvbnQudG0udG1GaXJzdENoYXIgPSAzMjsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtTGFzdENoYXIgPSAyNTE7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bURlZmF1bHRDaGFyID0gMTI4OworICAgIHBoeXNEZXYtPmZvbnQudG0udG1CcmVha0NoYXIgPSAzMjsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtUGl0Y2hBbmRGYW1pbHkgPSBhZm0tPklzRml4ZWRQaXRjaCA/IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1QRl9GSVhFRF9QSVRDSDsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtUGl0Y2hBbmRGYW1pbHkgfD0gVE1QRl9ERVZJQ0U7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bUNoYXJTZXQgPSBBTlNJX0NIQVJTRVQ7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bU92ZXJoYW5nID0gMDsKKyAgICBwaHlzRGV2LT5mb250LnRtLnRtRGlnaXRpemVkQXNwZWN0WCA9IGRjLT53LmRldkNhcHMtPmxvZ1BpeGVsc1k7CisgICAgcGh5c0Rldi0+Zm9udC50bS50bURpZ2l0aXplZEFzcGVjdFkgPSBkYy0+dy5kZXZDYXBzLT5sb2dQaXhlbHNYOworCisgICAgcGh5c0Rldi0+Zm9udC5zZXQgPSBGQUxTRTsKKworICAgIFRSQUNFKHBzZHJ2LCAiU2VsZWN0ZWQgUFMgZm9udCAnJXMnIHNpemUgJWQgd2VpZ2h0ICVkXG4iLCAKKwkgIHBoeXNEZXYtPmZvbnQuYWZtLT5Gb250TmFtZSwgcGh5c0Rldi0+Zm9udC5zaXplLAorCSAgcGh5c0Rldi0+Zm9udC50bS50bVdlaWdodCApOworICAgIAorICAgIHJldHVybiBwcmV2Zm9udDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfR2V0VGV4dE1ldHJpY3MKKyAqLworQk9PTDMyIFBTRFJWX0dldFRleHRNZXRyaWNzKERDICpkYywgVEVYVE1FVFJJQzMyQSAqbWV0cmljcykKK3sKKyAgICBQU0RSVl9QREVWSUNFICpwaHlzRGV2ID0gKFBTRFJWX1BERVZJQ0UgKilkYy0+cGh5c0RldjsKKworICAgIG1lbWNweShtZXRyaWNzLCAmKHBoeXNEZXYtPmZvbnQudG0pLCBzaXplb2YocGh5c0Rldi0+Zm9udC50bSkpOworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX0dldFRleHRFeHRlbnRQb2ludAorICovCitCT09MMzIgUFNEUlZfR2V0VGV4dEV4dGVudFBvaW50KCBEQyAqZGMsIExQQ1NUUiBzdHIsIElOVDMyIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU0laRTMyIHNpemUgKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworICAgIElOVDMyIGk7CisgICAgZmxvYXQgd2lkdGg7CisKKyAgICBzaXplLT5jeSA9IFlEU1RPTFMoZGMsIHBoeXNEZXYtPmZvbnQudG0udG1IZWlnaHQpOworICAgIHdpZHRoID0gMC4wOworCisgICAgZm9yKGkgPSAwOyBpIDwgY291bnQgJiYgc3RyW2ldOyBpKyspCisgICAgICAgIHdpZHRoICs9IHBoeXNEZXYtPmZvbnQuYWZtLT5DaGFyV2lkdGhzWyAoVUlOVDMyKXN0cltpXSBdOworICAgIAorICAgIHdpZHRoICo9IHBoeXNEZXYtPmZvbnQuc2NhbGU7CisgICAgc2l6ZS0+Y3ggPSBYRFNUT0xTKGRjLCB3aWR0aCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBQU0RSVl9TZXRGb250CisgKi8KK0JPT0wzMiBQU0RSVl9TZXRGb250KCBEQyAqZGMgKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworCisgICAgaWYocGh5c0Rldi0+Zm9udC5zZXQpIHJldHVybiBUUlVFOworCisgICAgUFNEUlZfV3JpdGVSZWVuY29kZUZvbnQoZGMpOworICAgIFBTRFJWX1dyaXRlU2V0Rm9udChkYyk7CisgICAgcGh5c0Rldi0+Zm9udC5zZXQgPSBUUlVFOworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX0dldEZvbnRNZXRyaWMKKyAqLworc3RhdGljIFVJTlQzMiBQU0RSVl9HZXRGb250TWV0cmljKERDICpkYywgQUZNICpwYWZtLCBORVdURVhUTUVUUklDMTYgKnBUTSwgCisgICAgICAgICAgICAgIEVOVU1MT0dGT05URVgxNiAqcExGLCBJTlQxNiBzaXplKQorCit7CisgICAgbWVtc2V0KCBwTEYsIDAsIHNpemVvZigqcExGKSApOworICAgIG1lbXNldCggcFRNLCAwLCBzaXplb2YoKnBUTSkgKTsKKworI2RlZmluZSBwbGYgKChMUExPR0ZPTlQxNilwTEYpCisgICAgcGxmLT5sZkhlaWdodCAgICA9IHBUTS0+dG1IZWlnaHQgICAgICAgPSBzaXplOworICAgIHBsZi0+bGZXaWR0aCAgICAgPSBwVE0tPnRtQXZlQ2hhcldpZHRoID0gc2l6ZSAqIDAuNzsKKyAgICBwbGYtPmxmV2VpZ2h0ICAgID0gcFRNLT50bVdlaWdodCAgICAgICA9IHBhZm0tPldlaWdodDsKKyAgICBwbGYtPmxmSXRhbGljICAgID0gcFRNLT50bUl0YWxpYyAgICAgICA9IHBhZm0tPkl0YWxpY0FuZ2xlICE9IDAuMDsKKyAgICBwbGYtPmxmVW5kZXJsaW5lID0gcFRNLT50bVVuZGVybGluZWQgICA9IDA7CisgICAgcGxmLT5sZlN0cmlrZU91dCA9IHBUTS0+dG1TdHJ1Y2tPdXQgICAgPSAwOworICAgIHBsZi0+bGZDaGFyU2V0ICAgPSBwVE0tPnRtQ2hhclNldCAgICAgID0gQU5TSV9DSEFSU0VUOworCisgICAgLyogY29udmVydCBwaXRjaCB2YWx1ZXMgKi8KKworICAgIHBUTS0+dG1QaXRjaEFuZEZhbWlseSA9IHBhZm0tPklzRml4ZWRQaXRjaCA/IDAgOiBUTVBGX0ZJWEVEX1BJVENIOworICAgIHBUTS0+dG1QaXRjaEFuZEZhbWlseSB8PSBUTVBGX0RFVklDRTsKKyAgICBwbGYtPmxmUGl0Y2hBbmRGYW1pbHkgPSAwOworCisgICAgbHN0cmNweW4zMkEoIHBsZi0+bGZGYWNlTmFtZSwgcGFmbS0+RmFtaWx5TmFtZSwgTEZfRkFDRVNJWkUgKTsKKyN1bmRlZiBwbGYKKworICAgIHBUTS0+dG1Bc2NlbnQgPSBwVE0tPnRtSGVpZ2h0ICogMC4yOworICAgIHBUTS0+dG1EZXNjZW50ID0gcFRNLT50bUhlaWdodCAtIHBUTS0+dG1Bc2NlbnQ7CisgICAgcFRNLT50bUludGVybmFsTGVhZGluZyA9IHBUTS0+dG1IZWlnaHQgKiAwLjI7CisgICAgcFRNLT50bU1heENoYXJXaWR0aCA9IHBUTS0+dG1IZWlnaHQgKiAwLjc7CisgICAgcFRNLT50bURpZ2l0aXplZEFzcGVjdFggPSBkYy0+dy5kZXZDYXBzLT5sb2dQaXhlbHNZOworICAgIHBUTS0+dG1EaWdpdGl6ZWRBc3BlY3RZID0gZGMtPncuZGV2Q2Fwcy0+bG9nUGl4ZWxzWDsKKworICAgICooSU5UMzIqKSZwVE0tPnRtRmlyc3RDaGFyID0gMzI7CisKKyAgICAvKiByZXR1cm4gZm9udCB0eXBlICovCisKKyAgICByZXR1cm4gREVWSUNFX0ZPTlRUWVBFOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX0VudW1EZXZpY2VGb250cworICovCitCT09MMzIgUFNEUlZfRW51bURldmljZUZvbnRzKCBEQyogZGMsIExQTE9HRk9OVDE2IHBsZiwgCisJCQkJICAgICAgICBERVZJQ0VGT05URU5VTVBST0MgcHJvYywgTFBBUkFNIGxwICkKK3sKKyAgICBFTlVNTE9HRk9OVEVYMTYJbGY7CisgICAgTkVXVEVYVE1FVFJJQzE2CXRtOworICAgIEJPT0wzMgkgIAliLCBiUmV0ID0gMDsKKyAgICBBRk0JCQkqYWZtOworICAgIEZvbnRGYW1pbHkJCSpmYW1pbHk7CisKKyAgICBpZiggcGxmLT5sZkZhY2VOYW1lWzBdICkgeworICAgICAgICBUUkFDRShwc2RydiwgImxmRmFjZU5hbWUgPSAnJXMnXG4iLCBwbGYtPmxmRmFjZU5hbWUpOworICAgICAgICBmb3IoZmFtaWx5ID0gUFNEUlZfQUZNRm9udExpc3Q7IGZhbWlseTsgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KSB7CisgICAgICAgICAgICBpZighbHN0cm5jbXAzMkEocGxmLT5sZkZhY2VOYW1lLCBmYW1pbHktPkZhbWlseU5hbWUsIAorCQkJc3RybGVuKGZhbWlseS0+RmFtaWx5TmFtZSkpKQorCSAgICAgICAgYnJlYWs7CisJfQorCWlmKGZhbWlseSkgeworCSAgICBmb3IoYWZtID0gZmFtaWx5LT5hZm07IGFmbTsgYWZtID0gYWZtLT5uZXh0KSB7CisJICAgICAgICBUUkFDRShwc2RydiwgIkdvdCAnJXMnXG4iLCBhZm0tPkZvbnROYW1lKTsKKwkJaWYoIChiID0gKCpwcm9jKSggKExQRU5VTUxPR0ZPTlQxNikmbGYsICZ0bSwgCisJCQlQU0RSVl9HZXRGb250TWV0cmljKCBkYywgYWZtLCAmdG0sICZsZiwgMjAwICksIGxwICkpICkKKwkJICAgICBiUmV0ID0gYjsKKwkJZWxzZSBicmVhazsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgeworCisgICAgICAgIFRSQUNFKHBzZHJ2LCAibGZGYWNlTmFtZSA9IE5VTExcbiIpOworICAgICAgICBmb3IoZmFtaWx5ID0gUFNEUlZfQUZNRm9udExpc3Q7IGZhbWlseTsgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KSB7CisJICAgIGFmbSA9IGZhbWlseS0+YWZtOworCSAgICBUUkFDRShwc2RydiwgIkdvdCAnJXMnXG4iLCBhZm0tPkZvbnROYW1lKTsKKwkgICAgaWYoIChiID0gKCpwcm9jKSggKExQRU5VTUxPR0ZPTlQxNikmbGYsICZ0bSwgCisJCSAgIFBTRFJWX0dldEZvbnRNZXRyaWMoIGRjLCBhZm0sICZ0bSwgJmxmLCAyMDAgKSwgbHAgKSkgKQorCSAgICAgICAgYlJldCA9IGI7CisJICAgIGVsc2UgYnJlYWs7CisJfQorICAgIH0KKyAgICByZXR1cm4gYlJldDsKK30KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMgYi9ncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzRjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKglQb3N0c2NyaXB0IGRyaXZlciBncmFwaGljcyBmdW5jdGlvbnMKKyAqCisgKglDb3B5cmlnaHQgMTk5OCAgSHV3IEQgTSBEYXZpZXMKKyAqCisgKglOb3QgbXVjaCBoZXJlIHlldC4uLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgInBzZHJ2LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJwcmludC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICAgICBQU0RSVl9Nb3ZlVG9FeAorICovCitCT09MMzIgUFNEUlZfTW92ZVRvRXgoREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5LCBMUFBPSU5UMzIgcHQpCit7CisgICAgVFJBQ0UocHNkcnYsICIlZCAlZFxuIiwgeCwgeSk7CisgICAgaWYgKHB0KQorICAgIHsKKwlwdC0+eCA9IGRjLT53LkN1cnNQb3NYOworCXB0LT55ID0gZGMtPncuQ3Vyc1Bvc1k7CisgICAgfQorICAgIGRjLT53LkN1cnNQb3NYID0geDsKKyAgICBkYy0+dy5DdXJzUG9zWSA9IHk7CisKKyAgICByZXR1cm4gUFNEUlZfV3JpdGVNb3ZlVG8oZGMsIFhMUFRPRFAoZGMsIHgpLCBZTFBUT0RQKGRjLCB5KSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX0xpbmVUbworICovCitCT09MMzIgUFNEUlZfTGluZVRvKERDICpkYywgSU5UMzIgeCwgSU5UMzIgeSkKK3sKKyAgICBUUkFDRShwc2RydiwgIiVkICVkXG4iLCB4LCB5KTsKKworICAgIFBTRFJWX1dyaXRlTGluZVRvKGRjLCBYTFBUT0RQKGRjLCB4KSwgWUxQVE9EUChkYywgeSkpOworICAgIFBTRFJWX1dyaXRlU3Ryb2tlKGRjKTsKKworICAgIGRjLT53LkN1cnNQb3NYID0geDsKKyAgICBkYy0+dy5DdXJzUG9zWSA9IHk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX1JlY3RhbmdsZQorICovCitCT09MMzIgUFNEUlZfUmVjdGFuZ2xlKERDICpkYywgSU5UMzIgbGVmdCwgSU5UMzIgdG9wLCBJTlQzMiByaWdodCwKKwkJICAgICAgIElOVDMyIGJvdHRvbSkKK3sKKyAgICBJTlQzMiB3aWR0aCA9IFhMU1RPRFMoZGMsIHJpZ2h0IC0gbGVmdCk7CisgICAgSU5UMzIgaGVpZ2h0ID0gWUxTVE9EUyhkYywgYm90dG9tIC0gdG9wKTsKKworCisgICAgVFJBQ0UocHNkcnYsICIlZCAlZCAtICVkICVkXG4iLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgUFNEUlZfV3JpdGVSZWN0YW5nbGUoZGMsIFhMUFRPRFAoZGMsIGxlZnQpLCBZTFBUT0RQKGRjLCB0b3ApLAorCQkgd2lkdGgsIGhlaWdodCk7CisgICAgUFNEUlZfV3JpdGVTdHJva2UoZGMpOworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFBTRFJWX0VsbGlwc2UKKyAqLworQk9PTDMyIFBTRFJWX0VsbGlwc2UoIERDICpkYywgSU5UMzIgbGVmdCwgSU5UMzIgdG9wLCBJTlQzMiByaWdodCwgSU5UMzIgYm90dG9tICkKK3sKKyAgICBUUkFDRShwc2RydiwgIiVkICVkIC0gJWQgJWRcbiIsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgCisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9wc2Rydi9pbml0LmMgYi9ncmFwaGljcy9wc2Rydi9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5YjUxOQotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoaWNzL3BzZHJ2L2luaXQuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqCVBvc3RzY3JpcHQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICoKKyAqCUNvcHlyaWdodCAxOTk4IEh1dyBEIE0gRGF2aWVzCisgKgorICovCisKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAiZ2RpLmgiCisjaW5jbHVkZSAicHNkcnYuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImhlYXAuaCIKKworc3RhdGljIEJPT0wzMiBQU0RSVl9DcmVhdGVEQyggREMgKmRjLCBMUENTVFIgZHJpdmVyLCBMUENTVFIgZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1NUUiBvdXRwdXQsIGNvbnN0IERFVk1PREUxNiogaW5pdERhdGEgKTsKK3N0YXRpYyBCT09MMzIgUFNEUlZfRGVsZXRlREMoIERDICpkYyApOworCitzdGF0aWMgY29uc3QgRENfRlVOQ1RJT05TIFBTRFJWX0Z1bmNzID0KK3sKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwQXJjICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcEJpdEJsdCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBDaG9yZCAqLworICAgIFBTRFJWX0NyZWF0ZURDLCAgICAgICAgICAgICAgICAgIC8qIHBDcmVhdGVEQyAqLworICAgIFBTRFJWX0RlbGV0ZURDLCAgICAgICAgICAgICAgICAgIC8qIHBEZWxldGVEQyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBEZWxldGVPYmplY3QgKi8KKyAgICBQU0RSVl9FbGxpcHNlLCAgICAgICAgICAgICAgICAgICAvKiBwRWxsaXBzZSAqLworICAgIFBTRFJWX0VudW1EZXZpY2VGb250cywgICAgICAgICAgIC8qIHBFbnVtRGV2aWNlRm9udHMgKi8KKyAgICBQU0RSVl9Fc2NhcGUsICAgICAgICAgICAgICAgICAgICAvKiBwRXNjYXBlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcEV4Y2x1ZGVDbGlwUmVjdCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBFeGNsdWRlVmlzUmVjdCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBFeHRGbG9vZEZpbGwgKi8KKyAgICBQU0RSVl9FeHRUZXh0T3V0LCAgICAgICAgICAgICAgICAvKiBwRXh0VGV4dE91dCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBHZXRDaGFyV2lkdGggKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwR2V0UGl4ZWwgKi8KKyAgICBQU0RSVl9HZXRUZXh0RXh0ZW50UG9pbnQsICAgICAgICAvKiBwR2V0VGV4dEV4dGVudFBvaW50ICovCisgICAgUFNEUlZfR2V0VGV4dE1ldHJpY3MsICAgICAgICAgICAgLyogcEdldFRleHRNZXRyaWNzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcEludGVyc2VjdENsaXBSZWN0ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcEludGVyc2VjdFZpc1JlY3QgKi8KKyAgICBQU0RSVl9MaW5lVG8sICAgICAgICAgICAgICAgICAgICAvKiBwTGluZVRvICovCisgICAgUFNEUlZfTW92ZVRvRXgsICAgICAgICAgICAgICAgICAgLyogcE1vdmVUb0V4ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcE9mZnNldENsaXBSZ24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwT2Zmc2V0Vmlld3BvcnRPcmcgKG9wdGlvbmFsKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBPZmZzZXRXaW5kb3dPcmcgKG9wdGlvbmFsKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQYWludFJnbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQYXRCbHQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUGllICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlQb2x5Z29uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlQb2x5bGluZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBQb2x5Z29uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFBvbHlsaW5lICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFJlYWxpemVQYWxldHRlICovCisgICAgUFNEUlZfUmVjdGFuZ2xlLCAgICAgICAgICAgICAgICAgLyogcFJlY3RhbmdsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBSZXN0b3JlREMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwUm91bmRSZWN0ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNhdmVEQyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTY2FsZVZpZXdwb3J0RXh0IChvcHRpb25hbCkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2NhbGVXaW5kb3dFeHQgKG9wdGlvbmFsKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZWxlY3RDbGlwUmduICovCisgICAgUFNEUlZfU2VsZWN0T2JqZWN0LCAgICAgICAgICAgICAgLyogcFNlbGVjdE9iamVjdCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZWxlY3RQYWxldHRlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldEJrQ29sb3IgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0QmtNb2RlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldERldmljZUNsaXBwaW5nICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldERJQml0c1RvRGV2aWNlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldE1hcE1vZGUgKG9wdGlvbmFsKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRNYXBwZXJGbGFncyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRQaXhlbCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRQb2x5RmlsbE1vZGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0Uk9QMiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRSZWxBYnMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0U3RyZXRjaEJsdE1vZGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0VGV4dEFsaWduICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldFRleHRDaGFyYWN0ZXJFeHRyYSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRUZXh0Q29sb3IgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0VGV4dEp1c3RpZmljYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU2V0Vmlld3BvcnRFeHQgKG9wdGlvbmFsKSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBTZXRWaWV3cG9ydE9yZyAob3B0aW9uYWwpICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldFdpbmRvd0V4dCAob3B0aW9uYWwpICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFNldFdpbmRvd09yZyAob3B0aW9uYWwpICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcFN0cmV0Y2hCbHQgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwU3RyZXRjaERJQml0cyAqLworfTsKKworCisvKiBEZWZhdWx0IGVudHJpZXMgZm9yIGRldmNhcHMgKi8KKworc3RhdGljIERldmljZUNhcHMgUFNEUlZfRGV2Q2FwcyA9IHsKKy8qIHZlcnNpb24gKi8JCTAsIAorLyogdGVjaG5vbG9neSAqLwlEVF9SQVNQUklOVEVSLAorLyogaG9yelNpemUgKi8JCTIwMCwKKy8qIHZlcnRTaXplICovCQkyODgsCisvKiBob3J6UmVzICovCQk0NzMzLAorLyogdmVydFJlcyAqLwkJNjgwOCwgCisvKiBiaXRzUGl4ZWwgKi8JCTEsCisvKiBwbGFuZXMgKi8JCTEsCisvKiBudW1CcnVzaGVzICovCS0xLAorLyogbnVtUGVucyAqLwkJMTAsCisvKiBudW1NYXJrZXJzICovCTAsCisvKiBudW1Gb250cyAqLwkJMzksCisvKiBudW1Db2xvcnMgKi8JCTIsCisvKiBwZGV2aWNlU2l6ZSAqLwkwLAkKKy8qIGN1cnZlQ2FwcyAqLwkJQ0NfQ0lSQ0xFUyB8IENDX1BJRSB8IENDX0NIT1JEIHwgQ0NfRUxMSVBTRVMgfAorCQkJQ0NfV0lERSB8IENDX1NUWUxFRCB8IENDX1dJREVTVFlMRUQgfCBDQ19JTlRFUklPUlMgfAorCQkJQ0NfUk9VTkRSRUNULAorLyogbGluZUNhcHMgKi8JCUxDX1BPTFlMSU5FIHwgTENfTUFSS0VSIHwgTENfUE9MWU1BUktFUiB8IExDX1dJREUgfAorCQkJTENfU1RZTEVEIHwgTENfV0lERVNUWUxFRCB8IExDX0lOVEVSSU9SUywKKy8qIHBvbHlnb2FsbkNhcHMgKi8JUENfUE9MWUdPTiB8IFBDX1JFQ1RBTkdMRSB8IFBDX1dJTkRQT0xZR09OIHwKKwkJCVBDX1NDQU5MSU5FIHwgUENfV0lERSB8IFBDX1NUWUxFRCB8IFBDX1dJREVTVFlMRUQgfAorCQkJUENfSU5URVJJT1JTLAorLyogdGV4dENhcHMgKi8JCTAsIC8qIHBzZHJ2IDB4NTlmNyAqLworLyogY2xpcENhcHMgKi8JCUNQX1JFQ1RBTkdMRSwKKy8qIHJhc3RlckNhcHMgKi8JUkNfQklUQkxUIHwgUkNfQkFORElORyB8IFJDX1NDQUxJTkcgfCBSQ19CSVRNQVA2NCB8CisJCQlSQ19ESV9CSVRNQVAgfCBSQ19ESUJUT0RFViB8IFJDX0JJR0ZPTlQgfAorCQkJUkNfU1RSRVRDSEJMVCB8IFJDX1NUUkVUQ0hESUIgfCBSQ19ERVZCSVRTLCAKKwkJCS8qIHBzZHJ2IDB4NmU5OSAqLworLyogYXNwZWN0WCAqLwkJNjAwLAorLyogYXNwZWN0WSAqLwkJNjAwLAorLyogYXNwZWN0WFkgKi8JCTg0OCwKKy8qIHBhZDEgKi8JCXsgMCB9LAorLyogbG9nUGl4ZWxzWCAqLwk2MDAsCisvKiBsb2dQaXhlbHNZICovCTYwMCwgCisvKiBwYWQyICovCQl7IDAgfSwKKy8qIHBhbGV0dGUgc2l6ZSAqLwkwLAorLyogLi5ldGMgKi8JCTAsIDAgfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICAgICBQU0RSVl9Jbml0CisgKgorICogSW5pdGlhbGl6ZXMgZm9udCBtZXRyaWNzIGFuZCByZWdpc3RlcnMgZHJpdmVyLiBDYWxsZWQgZnJvbSBHRElfSW5pdCgpCisgKgorICovCitCT09MMzIgUFNEUlZfSW5pdCh2b2lkKQoreworICBUUkFDRShwc2RydiwgIlxuIik7CisgIFBTRFJWX0dldEZvbnRNZXRyaWNzKCk7CisgIHJldHVybiBEUklWRVJfUmVnaXN0ZXJEcml2ZXIoICJXSU5FUFMiLCAmUFNEUlZfRnVuY3MgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICAgICBQU0RSVl9DcmVhdGVEQworICovCitzdGF0aWMgQk9PTDMyIFBTRFJWX0NyZWF0ZURDKCBEQyAqZGMsIExQQ1NUUiBkcml2ZXIsIExQQ1NUUiBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIG91dHB1dCwgY29uc3QgREVWTU9ERTE2KiBpbml0RGF0YSApCit7CisgICAgUFNEUlZfUERFVklDRSAqcGh5c0RldjsKKworICAgIFRSQUNFKHBzZHJ2LCAiKCVzICVzICVzICVwKVxuIiwgZHJpdmVyLCBkZXZpY2UsIG91dHB1dCwgaW5pdERhdGEpOworCisgICAgaWYoIVBTRFJWX0FGTUZvbnRMaXN0KSB7CisgICAgICAgIE1TRygiVG8gdXNlIFdJTkVQUyB5b3UgbmVlZCB0byBpbnN0YWxsIHNvbWUgQUZNIGZpbGVzLlxuIik7CisJcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGRjLT53LmRldkNhcHMgPSAmUFNEUlZfRGV2Q2FwczsKKyAgICBkYy0+dy5oVmlzUmduID0gQ3JlYXRlUmVjdFJnbjMyKDAsIDAsIGRjLT53LmRldkNhcHMtPmhvcnpSZXMsCisgICAgCQkJICAgIGRjLT53LmRldkNhcHMtPnZlcnRSZXMpOworICAgIAorICAgIHBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKUhlYXBBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwKKwkJCQkJICAgICAgICAgICAgIHNpemVvZigqcGh5c0RldikgKTsKKyAgICBpZiAoIXBoeXNEZXYpIHJldHVybiBGQUxTRTsKKyAgICBkYy0+cGh5c0RldiA9IHBoeXNEZXY7CisgICAgcGh5c0Rldi0+am9iLm91dHB1dCA9IEhFQVBfc3RyZHVwQSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgb3V0cHV0ICk7CisgICAgaWYgKCFwaHlzRGV2LT5qb2Iub3V0cHV0KSByZXR1cm4gRkFMU0U7CisgICAgcGh5c0Rldi0+am9iLmhKb2IgPSAwOworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkgICAgIFBTRFJWX0RlbGV0ZURDCisgKi8KK3N0YXRpYyBCT09MMzIgUFNEUlZfRGVsZXRlREMoIERDICpkYyApCit7CisgICAgUFNEUlZfUERFVklDRSAqcGh5c0RldiA9IChQU0RSVl9QREVWSUNFICopZGMtPnBoeXNEZXY7CisKKyAgICBUUkFDRShwc2RydiwgIlxuIik7CisgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIHBoeXNEZXYtPmpvYi5vdXRwdXQgKTsKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcGh5c0RldiApOworICAgIGRjLT5waHlzRGV2ID0gTlVMTDsKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvcHNkcnYvb2JqZWN0cy5jIGIvZ3JhcGhpY3MvcHNkcnYvb2JqZWN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2RlODIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaGljcy9wc2Rydi9vYmplY3RzLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqCVBvc3RzY3JpcHQgZHJpdmVyIG9iamVjdCBoYW5kbGluZworICoKKyAqCUNvcHlyaWdodCAxOTk4ICBIdXcgRCBNIERhdmllcworICoKKyAqLworCisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgInBzZHJ2LmgiCisjaW5jbHVkZSAiZm9udC5oIgorI2luY2x1ZGUgInBlbi5oIgorI2luY2x1ZGUgImJydXNoLmgiCisjaW5jbHVkZSAiYml0bWFwLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfQklUTUFQX1NlbGVjdE9iamVjdAorICovCitzdGF0aWMgSEJJVE1BUDE2IFBTRFJWX0JJVE1BUF9TZWxlY3RPYmplY3QoIERDICogZGMsIEhCSVRNQVAxNiBoYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRNQVBPQkogKiBibXAgKQoreworICAgIEZJWE1FKHBzZHJ2LCAic3R1YlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfQlJVU0hfU2VsZWN0T2JqZWN0CisgKi8KK3N0YXRpYyBIQlJVU0gzMiBQU0RSVl9CUlVTSF9TZWxlY3RPYmplY3QoIERDICogZGMsIEhCUlVTSDMyIGhicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSVVNIT0JKICogYnJ1c2ggKQoreworICAgIEZJWE1FKHBzZHJ2LCAic3R1YlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfUEVOX1NlbGVjdE9iamVjdAorICovCitzdGF0aWMgSFBFTjMyIFBTRFJWX1BFTl9TZWxlY3RPYmplY3QoIERDICogZGMsIEhQRU4zMiBocGVuLCBQRU5PQkogKiBwZW4gKQoreworICAgIEZJWE1FKHBzZHJ2LCAic3R1YlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfU2VsZWN0T2JqZWN0CisgKi8KK0hHRElPQkozMiBQU0RSVl9TZWxlY3RPYmplY3QoIERDICpkYywgSEdESU9CSjMyIGhhbmRsZSApCit7CisgICAgR0RJT0JKSERSICogcHRyID0gR0RJX0dldE9ialB0ciggaGFuZGxlLCBNQUdJQ19ET05UQ0FSRSApOworICAgIEhHRElPQkozMiByZXQgPSAwOworCisgICAgaWYgKCFwdHIpIHJldHVybiAwOworICAgIFRSQUNFKHBzZHJ2LCAiaGRjPSUwNHggJTA0eFxuIiwgZGMtPmhTZWxmLCBoYW5kbGUgKTsKKyAgICAKKyAgICBzd2l0Y2gocHRyLT53TWFnaWMpCisgICAgeworICAgICAgY2FzZSBQRU5fTUFHSUM6CisJICByZXQgPSBQU0RSVl9QRU5fU2VsZWN0T2JqZWN0KCBkYywgaGFuZGxlLCAoUEVOT0JKICopcHRyICk7CisJICBicmVhazsKKyAgICAgIGNhc2UgQlJVU0hfTUFHSUM6CisJICByZXQgPSBQU0RSVl9CUlVTSF9TZWxlY3RPYmplY3QoIGRjLCBoYW5kbGUsIChCUlVTSE9CSiAqKXB0ciApOworCSAgYnJlYWs7CisgICAgICBjYXNlIEJJVE1BUF9NQUdJQzoKKwkgIHJldCA9IFBTRFJWX0JJVE1BUF9TZWxlY3RPYmplY3QoIGRjLCBoYW5kbGUsIChCSVRNQVBPQkogKilwdHIgKTsKKwkgIGJyZWFrOworICAgICAgY2FzZSBGT05UX01BR0lDOgorCSAgcmV0ID0gUFNEUlZfRk9OVF9TZWxlY3RPYmplY3QoIGRjLCBoYW5kbGUsIChGT05UT0JKICopcHRyICk7CSAgCisJICBicmVhazsKKyAgICAgIGNhc2UgUkVHSU9OX01BR0lDOgorCSAgcmV0ID0gKEhHRElPQkoxNilTZWxlY3RDbGlwUmduMTYoIGRjLT5oU2VsZiwgaGFuZGxlICk7CisJICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJICBFUlIocHNkcnYsICJVbmtub3duIG9iamVjdCBtYWdpYyAlMDR4XG4iLCBwdHItPndNYWdpYyk7CisJICBicmVhazsKKyAgICB9CisgICAgR0RJX0hFQVBfVU5MT0NLKCBoYW5kbGUgKTsKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvcHNkcnYvcHMuYyBiL2dyYXBoaWNzL3BzZHJ2L3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0NGQxNwotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoaWNzL3BzZHJ2L3BzLmMKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKglQb3N0c2NyaXB0IG91dHB1dCBmdW5jdGlvbnMKKyAqCisgKglDb3B5cmlnaHQgMTk5OCAgSHV3IEQgTSBEYXZpZXMKKyAqCisgKi8KKworI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJwc2Rydi5oIgorI2luY2x1ZGUgInByaW50LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworY2hhciBwc2hlYWRlcltdID0gLyogdGl0bGUgKi8KKyIlJSFQUy1BZG9iZS0zLjAgKG5vdCBxdWl0ZSlcbiIKKyIlJSUlQ3JlYXRvcjogV2luZSBQb3N0c2NyaXB0IERyaXZlclxuIgorIiUlJSVUaXRsZTogJXNcbiIKKyIlJSUlQm91bmRpbmdCb3g6IDAgMCA1OTUgODQyXG4iCisiJSUlJVBhZ2VzOiAoYXRlbmQpXG4iCisiJSUlJUVuZENvbW1lbnRzXG4iCisiJSUlJUJlZ2luUHJvbG9nXG4iCisiL3JlZW5jb2RlZm9udCB7XG4iCisiZmluZGZvbnRcbiIKKyJkdXAgbGVuZ3RoIGRpY3QgYmVnaW5cbiIKKyJ7MSBpbmRleCAvRklEIG5lIHtkZWZ9IHtwb3AgcG9wfSBpZmVsc2V9IGZvcmFsbFxuIgorIi9FbmNvZGluZyBJU09MYXRpbjFFbmNvZGluZyBkZWZcbiIKKyJjdXJyZW50ZGljdFxuIgorImVuZFxuIgorImRlZmluZWZvbnQgcG9wXG4iCisifSBiaW5kIGRlZlxuIgorIiUlJSVFbmRQcm9sb2dcbiIKKyIlJSUlQmVnaW5TZXR1cFxuIgorIiUlJSVFbmRTZXR1cFxuIjsKKworY2hhciBwc25ld3BhZ2VbXSA9IC8qIG5hbWUsIG51bWJlciAqLworIiUlJSVQYWdlOiAlcyAlZFxuIgorIiUlJSVCZWdpblBhZ2VTZXR1cFxuIgorIi9wZ3NhdmUgc2F2ZSBkZWZcbiIKKyI3MiA2MDAgZGl2IGR1cCBzY2FsZVxuIgorIjAgNzAxNCB0cmFuc2xhdGVcbiIKKyIxIC0xIHNjYWxlXG4iCisiJSUlJUVuZFBhZ2VTZXR1cFxuIjsKKworY2hhciBwc2VuZHBhZ2VbXSA9CisicGdzYXZlIHJlc3RvcmVcbiIKKyJzaG93cGFnZVxuIjsKKworY2hhciBwc2Zvb3RlcltdID0gLyogcGFnZXMgKi8KKyIlJSUlVHJhaWxlclxuIgorIiUlJSVQYWdlczogJWRcbiIKKyIlJSUlRU9GXG4iOworCitjaGFyIHBzbW92ZXRvW10gPSAvKiB4LCB5ICovCisiJWQgJWQgbW92ZXRvXG4iOworCitjaGFyIHBzbGluZXRvW10gPSAvKiB4LCB5ICovCisiJWQgJWQgbGluZXRvXG4iOworCitjaGFyIHBzcmxpbmV0b1tdID0gLyogZHgsIGR5ICovCisiJWQgJWQgcmxpbmV0b1xuIjsKKworY2hhciBwc3N0cm9rZVtdID0gCisic3Ryb2tlXG4iOworCitjaGFyIHBzcmVjdGFuZ2xlW10gPSAvKiB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAtd2lkdGggKi8KKyIlZCAlZCBtb3ZldG9cbiIKKyIlZCAwIHJsaW5ldG9cbiIKKyIwICVkIHJsaW5ldG9cbiIKKyIlZCAwIHJsaW5ldG9cbiIKKyJjbG9zZXBhdGhcbiI7CisKK2NoYXIgcHNzaG93W10gPSAvKiBzdHJpbmcgKi8KKyIoJXMpIHNob3dcbiI7CisKK2NoYXIgcHNzZXRmb250W10gPSAvKiBmb250bmFtZSwgeHNjYWxlLCB5c2NhbGUsIGFzY2VudCwgZXNjYXBlbWVudCAqLworIi8lcyBmaW5kZm9udFxuIgorIlslZCAwIDAgJWQgMCAlZF1cbiIKKyIlZCAxMCBkaXYgbWF0cml4IHJvdGF0ZVxuIgorIm1hdHJpeCBjb25jYXRtYXRyaXhcbiIKKyJtYWtlZm9udCBzZXRmb250XG4iOworCitjaGFyIHBzcmVlbmNvZGVmb250W10gPSAvKiBuZXdmb250bmFtZSBiYXNlZm9udG5hbWUqLworIi8lcyAvJXMgcmVlbmNvZGVmb250XG4iOworCisKK2ludCBQU0RSVl9Xcml0ZVNwb29sKERDICpkYywgTFBTVFIgbHBEYXRhLCBXT1JEIGNjaCkKK3sKKyAgICBQU0RSVl9QREVWSUNFICpwaHlzRGV2ID0gKFBTRFJWX1BERVZJQ0UgKilkYy0+cGh5c0RldjsKKworICAgIGlmKHBoeXNEZXYtPmpvYi5OZWVkUGFnZUhlYWRlcikgeworCXBoeXNEZXYtPmpvYi5QYWdlTm8rKzsKKyAgICAgICAgaWYoICFQU0RSVl9Xcml0ZU5ld1BhZ2UoZGMpICkKKwkgICAgcmV0dXJuIEZBTFNFOworCXBoeXNEZXYtPmpvYi5OZWVkUGFnZUhlYWRlciA9IEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gV3JpdGVTcG9vbCggcGh5c0Rldi0+am9iLmhKb2IsIGxwRGF0YSwgY2NoICk7Cit9CisKKworSU5UMzIgUFNEUlZfV3JpdGVIZWFkZXIoIERDICpkYywgY2hhciAqdGl0bGUsIGludCBsZW4gKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworICAgIGNoYXIgKmJ1ZiwgKnRpdGxlYnVmOworCisKKyAgICB0aXRsZWJ1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBsZW4rMSApOworICAgIGlmKCF0aXRsZWJ1ZikgeworICAgICAgICBXQVJOKHBzZHJ2LCAiSGVhcEFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBtZW1jcHkodGl0bGVidWYsIHRpdGxlLCBsZW4pOworICAgIHRpdGxlYnVmW2xlbl0gPSAnXDAnOworCisgICAgYnVmID0gKGNoYXIgKilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemVvZihwc2hlYWRlcikgKyBsZW4pOworICAgIGlmKCFidWYpIHsKKyAgICAgICAgV0FSTihwc2RydiwgIkhlYXBBbGxvYyBmYWlsZWRcbiIpOworCUhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCB0aXRsZWJ1ZiApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3c3ByaW50ZjMyQShidWYsIHBzaGVhZGVyLCB0aXRsZSk7CisKKyAgICBpZiggV3JpdGVTcG9vbCggcGh5c0Rldi0+am9iLmhKb2IsIGJ1Ziwgc3RybGVuKGJ1ZikgKSAhPSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oYnVmKSApIHsKKyAgICAgICAgV0FSTihwc2RydiwgIldyaXRlU3Bvb2wgZXJyb3JcbiIpOworCUhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCB0aXRsZWJ1ZiApOworCUhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWYgKTsKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIHRpdGxlYnVmICk7CisgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGJ1ZiApOworICAgIHJldHVybiAxOworfQorCisKK0lOVDMyIFBTRFJWX1dyaXRlRm9vdGVyKCBEQyAqZGMgKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworICAgIGNoYXIgKmJ1ZjsKKworICAgIGJ1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplb2YocHNmb290ZXIpICsgMTAwICk7CisgICAgaWYoIWJ1ZikgeworICAgICAgICBXQVJOKHBzZHJ2LCAiSGVhcEFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdzcHJpbnRmMzJBKGJ1ZiwgcHNmb290ZXIsIHBoeXNEZXYtPmpvYi5QYWdlTm8pOworCisgICAgaWYoIFdyaXRlU3Bvb2woIHBoeXNEZXYtPmpvYi5oSm9iLCBidWYsIHN0cmxlbihidWYpICkgIT0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGJ1ZikgKSB7CisgICAgICAgIFdBUk4ocHNkcnYsICJXcml0ZVNwb29sIGVycm9yXG4iKTsKKwlIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgYnVmICk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWYgKTsKKyAgICByZXR1cm4gMTsKK30KKworCisKK0lOVDMyIFBTRFJWX1dyaXRlRW5kUGFnZSggREMgKmRjICkKK3sKKyAgICBQU0RSVl9QREVWSUNFICpwaHlzRGV2ID0gKFBTRFJWX1BERVZJQ0UgKilkYy0+cGh5c0RldjsKKworICAgIGlmKCBXcml0ZVNwb29sKCBwaHlzRGV2LT5qb2IuaEpvYiwgcHNlbmRwYWdlLCBzaXplb2YocHNlbmRwYWdlKS0xICkgIT0gCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBzZW5kcGFnZSktMSApIHsKKyAgICAgICAgV0FSTihwc2RydiwgIldyaXRlU3Bvb2wgZXJyb3JcbiIpOworCXJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworCisKKworSU5UMzIgUFNEUlZfV3JpdGVOZXdQYWdlKCBEQyAqZGMgKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworICAgIGNoYXIgKmJ1ZjsKKyAgICBjaGFyIG5hbWVbMTAwXTsKKyAgICAKKyAgICB3c3ByaW50ZjMyQShuYW1lLCAiJWQiLCBwaHlzRGV2LT5qb2IuUGFnZU5vKTsKKworICAgIGJ1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplb2YocHNuZXdwYWdlKSArIDEwMCApOworICAgIGlmKCFidWYpIHsKKyAgICAgICAgV0FSTihwc2RydiwgIkhlYXBBbGxvYyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3c3ByaW50ZjMyQShidWYsIHBzbmV3cGFnZSwgbmFtZSwgcGh5c0Rldi0+am9iLlBhZ2VObyk7IAorICAgIGlmKCBXcml0ZVNwb29sKCBwaHlzRGV2LT5qb2IuaEpvYiwgYnVmLCBzdHJsZW4oYnVmKSApICE9IAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihidWYpICkgeworICAgICAgICBXQVJOKHBzZHJ2LCAiV3JpdGVTcG9vbCBlcnJvclxuIik7CisJSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGJ1ZiApOworCXJldHVybiAwOworICAgIH0KKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgYnVmICk7CisgICAgcmV0dXJuIDE7Cit9CisKKworQk9PTDMyIFBTRFJWX1dyaXRlTW92ZVRvKERDICpkYywgSU5UMzIgeCwgSU5UMzIgeSkKK3sKKyAgICBjaGFyIGJ1ZlsxMDBdOworCisgICAgd3NwcmludGYzMkEoYnVmLCBwc21vdmV0bywgeCwgeSk7CisgICAgcmV0dXJuIFBTRFJWX1dyaXRlU3Bvb2woZGMsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCitCT09MMzIgUFNEUlZfV3JpdGVMaW5lVG8oREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5KQoreworICAgIGNoYXIgYnVmWzEwMF07CisKKyAgICB3c3ByaW50ZjMyQShidWYsIHBzbGluZXRvLCB4LCB5KTsKKyAgICByZXR1cm4gUFNEUlZfV3JpdGVTcG9vbChkYywgYnVmLCBzdHJsZW4oYnVmKSk7Cit9CisKKworQk9PTDMyIFBTRFJWX1dyaXRlU3Ryb2tlKERDICpkYykKK3sKKyAgICByZXR1cm4gUFNEUlZfV3JpdGVTcG9vbChkYywgcHNzdHJva2UsIHNpemVvZihwc3N0cm9rZSktMSk7Cit9CisKKworCitCT09MMzIgUFNEUlZfV3JpdGVSZWN0YW5nbGUoREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5LCBJTlQzMiB3aWR0aCwgCisJCQlJTlQzMiBoZWlnaHQpCit7CisgICAgY2hhciBidWZbMTAwXTsKKworICAgIHdzcHJpbnRmMzJBKGJ1ZiwgcHNyZWN0YW5nbGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIC13aWR0aCk7CisgICAgcmV0dXJuIFBTRFJWX1dyaXRlU3Bvb2woZGMsIGJ1Ziwgc3RybGVuKGJ1ZikpOworfQorCitzdGF0aWMgY2hhciBlbmNvZGluZ2V4dFtdID0gIi1JU09MYXRpbjEiOworCitCT09MMzIgUFNEUlZfV3JpdGVTZXRGb250KERDICpkYykKK3sKKyAgICBQU0RSVl9QREVWSUNFICpwaHlzRGV2ID0gKFBTRFJWX1BERVZJQ0UgKilkYy0+cGh5c0RldjsKKyAgICBjaGFyICpidWYsICpuZXdidWY7CisKKyAgICBidWYgPSAoY2hhciAqKUhlYXBBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwKKwkgICAgIHNpemVvZihwc3NldGZvbnQpICsgc3RybGVuKHBoeXNEZXYtPmZvbnQuYWZtLT5Gb250TmFtZSkgKyA0MCk7CisKKyAgICBpZighYnVmKSB7CisgICAgICAgIFdBUk4ocHNkcnYsICJIZWFwQWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIG5ld2J1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLAorCSAgICAgIHN0cmxlbihwaHlzRGV2LT5mb250LmFmbS0+Rm9udE5hbWUpICsgc2l6ZW9mKGVuY29kaW5nZXh0KSk7CisKKyAgICBpZighbmV3YnVmKSB7CisgICAgICAgIFdBUk4ocHNkcnYsICJIZWFwQWxsb2MgZmFpbGVkXG4iKTsKKwlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWYpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgd3NwcmludGYzMkEobmV3YnVmLCAiJXMlcyIsIHBoeXNEZXYtPmZvbnQuYWZtLT5Gb250TmFtZSwgZW5jb2RpbmdleHQpOworCisgICAgd3NwcmludGYzMkEoYnVmLCBwc3NldGZvbnQsIG5ld2J1ZiwgCisJCXBoeXNEZXYtPmZvbnQudG0udG1IZWlnaHQsIC1waHlzRGV2LT5mb250LnRtLnRtSGVpZ2h0LAorCQlwaHlzRGV2LT5mb250LnRtLnRtQXNjZW50LCAtcGh5c0Rldi0+Zm9udC5lc2NhcGVtZW50KTsKKworICAgIFBTRFJWX1dyaXRlU3Bvb2woZGMsIGJ1Ziwgc3RybGVuKGJ1ZikpOworICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGJ1Zik7CisgICAgcmV0dXJuIFRSVUU7Cit9ICAgIAorCitCT09MMzIgUFNEUlZfV3JpdGVSZWVuY29kZUZvbnQoREMgKmRjKQoreworICAgIFBTRFJWX1BERVZJQ0UgKnBoeXNEZXYgPSAoUFNEUlZfUERFVklDRSAqKWRjLT5waHlzRGV2OworICAgIGNoYXIgKmJ1ZiwgKm5ld2J1ZjsKKyAKKyAgICBidWYgPSAoY2hhciAqKUhlYXBBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwKKwkgICAgIHNpemVvZihwc3JlZW5jb2RlZm9udCkgKyAyICogc3RybGVuKHBoeXNEZXYtPmZvbnQuYWZtLT5Gb250TmFtZSkgCisJCQkgICAgICsgc2l6ZW9mKGVuY29kaW5nZXh0KSk7CisKKyAgICBpZighYnVmKSB7CisgICAgICAgIFdBUk4ocHNkcnYsICJIZWFwQWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIG5ld2J1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLAorCSAgICAgIHN0cmxlbihwaHlzRGV2LT5mb250LmFmbS0+Rm9udE5hbWUpICsgc2l6ZW9mKGVuY29kaW5nZXh0KSk7CisKKyAgICBpZighbmV3YnVmKSB7CisgICAgICAgIFdBUk4ocHNkcnYsICJIZWFwQWxsb2MgZmFpbGVkXG4iKTsKKwlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWYpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgd3NwcmludGYzMkEobmV3YnVmLCAiJXMlcyIsIHBoeXNEZXYtPmZvbnQuYWZtLT5Gb250TmFtZSwgZW5jb2RpbmdleHQpOworICAgIHdzcHJpbnRmMzJBKGJ1ZiwgcHNyZWVuY29kZWZvbnQsIG5ld2J1ZiwgcGh5c0Rldi0+Zm9udC5hZm0tPkZvbnROYW1lKTsKKworICAgIFBTRFJWX1dyaXRlU3Bvb2woZGMsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCisgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbmV3YnVmKTsKKyAgICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWYpOworICAgIHJldHVybiBUUlVFOworfSAgICAKKworQk9PTDMyIFBTRFJWX1dyaXRlU2hvdyhEQyAqZGMsIGNoYXIgKnN0ciwgSU5UMzIgY291bnQpCit7CisgICAgY2hhciAqYnVmOworCisgICAgYnVmID0gKGNoYXIgKilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemVvZihwc3Nob3cpICsgY291bnQpOworCisgICAgaWYoIWJ1ZikgeworICAgICAgICBXQVJOKHBzZHJ2LCAiSGVhcEFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB3c3ByaW50ZjMyQShidWYsIHBzc2hvdywgc3RyKTsKKworICAgIFBTRFJWX1dyaXRlU3Bvb2woZGMsIGJ1Ziwgc3RybGVuKGJ1ZikpOworICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGJ1Zik7CisgICAgcmV0dXJuIFRSVUU7Cit9ICAgIAorCisKKworCisKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BzZHJ2L3RleHQuYyBiL2dyYXBoaWNzL3BzZHJ2L3RleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg2Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGhpY3MvcHNkcnYvdGV4dC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKglQb3N0c2NyaXB0IGRyaXZlciB0ZXh0IGZ1bmN0aW9ucworICoKKyAqCUNvcHlyaWdodCAxOTk4ICBIdXcgRCBNIERhdmllcworICoKKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJwc2Rydi5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAicHJpbnQuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUFNEUlZfRXh0VGV4dE91dAorICovCitCT09MMzIgUFNEUlZfRXh0VGV4dE91dCggREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5LCBVSU5UMzIgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVDMyICpscHJlY3QsIExQQ1NUUiBzdHIsIFVJTlQzMiBjb3VudCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQzMiAqbHBEeCApCit7CisgICAgUFNEUlZfUERFVklDRSAqcGh5c0RldiA9IChQU0RSVl9QREVWSUNFICopZGMtPnBoeXNEZXY7CisgICAgY2hhciAqc3RyYnVmOworICAgIFNJWkUzMiBzejsKKworICAgIFRSQUNFKHBzZHJ2LCAiKHg9JWQsIHk9JWQsIGZsYWdzPTB4JTA4eCwgc3RyPSclcycsIGNvdW50PSVkKVxuIiwgeCwgeSwKKwkgIGZsYWdzLCBzdHIsIGNvdW50KTsKKworICAgIHN0cmJ1ZiA9IChjaGFyICopSGVhcEFsbG9jKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBjb3VudCArIDEpOworICAgIGlmKCFzdHJidWYpIHsKKyAgICAgICAgV0FSTihwc2RydiwgIkhlYXBBbGxvYyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYoZGMtPncudGV4dEFsaWduICYgVEFfVVBEQVRFQ1ApIHsKKwl4ID0gZGMtPncuQ3Vyc1Bvc1g7CisJeSA9IGRjLT53LkN1cnNQb3NZOworICAgIH0KKworICAgIHggPSBYTFBUT0RQKGRjLCB4KTsKKyAgICB5ID0gWUxQVE9EUChkYywgeSk7CisKKyAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMkEoZGMtPmhTZWxmLCBzdHIsIGNvdW50LCAmc3opOworICAgIHN6LmN4ID0gWExTVE9EUyhkYywgc3ouY3gpOworICAgIHN6LmN5ID0gWUxTVE9EUyhkYywgc3ouY3kpOworCisgICAgc3dpdGNoKGRjLT53LnRleHRBbGlnbiAmIChUQV9MRUZUIHwgVEFfQ0VOVEVSIHwgVEFfUklHSFQpICkgeworICAgIGNhc2UgVEFfTEVGVDoKKyAgICAgICAgaWYoZGMtPncudGV4dEFsaWduICYgVEFfVVBEQVRFQ1ApCisJICAgIGRjLT53LkN1cnNQb3NYID0gWERQVE9MUChkYywgeCArIHN6LmN4KTsKKwlicmVhazsKKworICAgIGNhc2UgVEFfQ0VOVEVSOgorCXggLT0gc3ouY3gvMjsKKwlicmVhazsKKworICAgIGNhc2UgVEFfUklHSFQ6CisJeCAtPSBzei5jeDsKKwlpZihkYy0+dy50ZXh0QWxpZ24gJiBUQV9VUERBVEVDUCkKKwkgICAgZGMtPncuQ3Vyc1Bvc1ggPSBYRFBUT0xQKGRjLCB4KTsKKwlicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2goZGMtPncudGV4dEFsaWduICYgKFRBX1RPUCB8IFRBX0JBU0VMSU5FIHwgVEFfQk9UVE9NKSApIHsKKyAgICBjYXNlIFRBX1RPUDoKKwlicmVhazsKKworICAgIGNhc2UgVEFfQkFTRUxJTkU6CisJeSAtPSBwaHlzRGV2LT5mb250LnRtLnRtQXNjZW50OworCWJyZWFrOworCisgICAgY2FzZSBUQV9CT1RUT006CisgICAgICAgIHkgLT0gc3ouY3k7CisJYnJlYWs7CisgICAgfQorCisgICAgbWVtY3B5KHN0cmJ1Ziwgc3RyLCBjb3VudCk7CisgICAgKihzdHJidWYgKyBjb3VudCkgPSAnXDAnOworICAgIAorICAgIFBTRFJWX1NldEZvbnQoZGMpOworCisgICAgUFNEUlZfV3JpdGVNb3ZlVG8oZGMsIHgsIHkpOworICAgIFBTRFJWX1dyaXRlU2hvdyhkYywgc3RyYnVmLCBzdHJsZW4oc3RyYnVmKSk7CisKKyAgICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCBzdHJidWYpOworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jIGIvZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jCmluZGV4IDY5OWQ2N2MuLjZjYzg5OTQgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi9iaXRibHQuYworKysgYi9ncmFwaGljcy94MTFkcnYvYml0Ymx0LmMKQEAgLTE0MDQsNyArMTQwNCw2IEBACiAgICAgcmVzdWx0ID0gKEJPT0wzMilDQUxMX0xBUkdFX1NUQUNLKCBCSVRCTFRfRG9TdHJldGNoQmx0LCAmcGFyYW1zICk7CiAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKICAgICBESUJfVXBkYXRlRElCU2VjdGlvbiggZGNEc3QsIFRSVUUgKTsKLSAgICBESUJfVXBkYXRlRElCU2VjdGlvbiggZGNTcmMsIFRSVUUgKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNDI3LDYgKzE0MjYsNSBAQAogICAgIHJlc3VsdCA9IChCT09MMzIpQ0FMTF9MQVJHRV9TVEFDSyggQklUQkxUX0RvU3RyZXRjaEJsdCwgJnBhcmFtcyApOwogICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CiAgICAgRElCX1VwZGF0ZURJQlNlY3Rpb24oIGRjRHN0LCBUUlVFICk7Ci0gICAgRElCX1VwZGF0ZURJQlNlY3Rpb24oIGRjU3JjLCBUUlVFICk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKaW5kZXggNGYwOGZkZi4uMTkxMmU1NSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogQk9PTDMyCiBYMTFEUlZfUmVjdGFuZ2xlKERDICpkYywgSU5UMzIgbGVmdCwgSU5UMzIgdG9wLCBJTlQzMiByaWdodCwgSU5UMzIgYm90dG9tKQogewotICAgIElOVDMyIHdpZHRoLCBvbGR3aWR0aDsKKyAgICBJTlQzMiB3aWR0aCwgb2xkd2lkdGgsIG9sZGpvaW5zdHlsZTsKIAogICAgIFRSQUNFKGdyYXBoaWNzLCAiKCVkICVkICVkICVkKVxuIiwgCiAgICAgCWxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBAIC0yNzYsNiArMjc2LDkgQEAKICAgICB9CiAgICAgaWYod2lkdGggPT0gMSkgd2lkdGg9MDsKICAgICBkYy0+dS54LnBlbi53aWR0aD13aWR0aDsKKyAgICBvbGRqb2luc3R5bGU9ZGMtPnUueC5wZW4ubGluZWpvaW47CisgICAgaWYoZGMtPnUueC5wZW4udHlwZSE9UFNfR0VPTUVUUklDKQorICAgICAgICAgICAgZGMtPnUueC5wZW4ubGluZWpvaW49UFNfSk9JTl9NSVRFUjsKIAogICAgIGlmICgocmlnaHQgPiBsZWZ0ICsgd2lkdGgpICYmIChib3R0b20gPiB0b3AgKyB3aWR0aCkpCiAgICAgewpAQCAtMjkxLDYgKzI5NCw3IEBACiAJCSAgICAgICAgcmlnaHQtbGVmdC0xLCBib3R0b20tdG9wLTEgKTsKIAogICAgIGRjLT51LngucGVuLndpZHRoPW9sZHdpZHRoOworICAgIGRjLT51LngucGVuLmxpbmVqb2luPW9sZGpvaW5zdHlsZTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L3Blbi5jIGIvZ3JhcGhpY3MveDExZHJ2L3Blbi5jCmluZGV4IGE5MThjODUuLjUyNTEwNzUgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi9wZW4uYworKysgYi9ncmFwaGljcy94MTFkcnYvcGVuLmMKQEAgLTIzLDEwICsyMywxMiBAQAogCiAgICAgZGMtPncuaFBlbiA9IGhwZW47CiAgICAgZGMtPnUueC5wZW4uc3R5bGUgPSBwZW4tPmxvZ3Blbi5sb3BuU3R5bGUgJiBQU19TVFlMRV9NQVNLOworICAgIGRjLT51LngucGVuLnR5cGUgPSBwZW4tPmxvZ3Blbi5sb3BuU3R5bGUgJiBQU19UWVBFX01BU0s7CiAgICAgZGMtPnUueC5wZW4uZW5kY2FwID0gcGVuLT5sb2dwZW4ubG9wblN0eWxlICYgUFNfRU5EQ0FQX01BU0s7CiAgICAgZGMtPnUueC5wZW4ubGluZWpvaW4gPSBwZW4tPmxvZ3Blbi5sb3BuU3R5bGUgJiBQU19KT0lOX01BU0s7CiAKLSAgICBkYy0+dS54LnBlbi53aWR0aCA9IHBlbi0+bG9ncGVuLmxvcG5XaWR0aC54ICogZGMtPnZwb3J0RXh0WCAvIGRjLT53bmRFeHRYOworICAgIGRjLT51LngucGVuLndpZHRoID0gKHBlbi0+bG9ncGVuLmxvcG5XaWR0aC54ICogZGMtPnZwb3J0RXh0WCArCisgICAgICAgICAgICAgICAgICAgIGRjLT53bmRFeHRYIC8gMikgLyBkYy0+d25kRXh0WDsKICAgICBpZiAoZGMtPnUueC5wZW4ud2lkdGggPCAwKSBkYy0+dS54LnBlbi53aWR0aCA9IC1kYy0+dS54LnBlbi53aWR0aDsKICAgICBpZiAoZGMtPnUueC5wZW4ud2lkdGggPT0gMSkgZGMtPnUueC5wZW4ud2lkdGggPSAwOyAgLyogRmFzdGVyICovCiAgICAgZGMtPnUueC5wZW4ucGl4ZWwgPSBDT0xPUl9Ub1BoeXNpY2FsKCBkYywgcGVuLT5sb2dwZW4ubG9wbkNvbG9yICk7ICAgIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L3hmb250LmMgYi9ncmFwaGljcy94MTFkcnYveGZvbnQuYwppbmRleCAyMzc4ZWMzLi44NTc2MmM2IDEwMDY0NAotLS0gYS9ncmFwaGljcy94MTFkcnYveGZvbnQuYworKysgYi9ncmFwaGljcy94MTFkcnYveGZvbnQuYwpAQCAtMTk3LDE0ICsxOTcsMTQgQEAKICAgICAgIGZpLT5maV9mbGFncyB8PSBGSV9QT0xZV0VJR0hUOwogICBlbHNlIGlmKCBqID09IDQgKQogICAgICAgIHsKLSAgICAgICAgIGlmKCAhbHN0cm5jbXBpMzJBKCAiYm9sZCIsIGxwU3RyLCA0KSApCisgICAgICAgICBpZiggIXN0cm5jYXNlY21wKCAiYm9sZCIsIGxwU3RyLCA0KSApCiAgICAgICAgICAgIGZpLT5kZi5kZldlaWdodCA9IEZXX0JPTEQ7IAotCSBlbHNlIGlmKCAhbHN0cm5jbXBpMzJBKCAiZGVtaSIsIGxwU3RyLCA0KSApCisJIGVsc2UgaWYoICFzdHJuY2FzZWNtcCggImRlbWkiLCBscFN0ciwgNCkgKQogCSB7CiAJICAgZmktPmZpX2ZsYWdzIHw9IEZJX0ZXX0RFTUk7CiAJICAgZmktPmRmLmRmV2VpZ2h0ID0gRldfREVNSUJPTEQ7CiAJIH0KLQkgZWxzZSBpZiggIWxzdHJuY21waTMyQSggImJvb2siLCBscFN0ciwgNCkgKQorCSBlbHNlIGlmKCAhc3RybmNhc2VjbXAoICJib29rIiwgbHBTdHIsIDQpICkKIAkgewogCSAgIGZpLT5maV9mbGFncyB8PSBGSV9GV19CT09LOwogCSAgIGZpLT5kZi5kZldlaWdodCA9IEZXX1JFR1VMQVI7CkBAIC0yMTIsMTQgKzIxMiwxNCBAQAogICAgICAgIH0KICAgZWxzZSBpZiggaiA9PSA1ICkKICAgICAgICB7Ci0gICAgICAgICBpZiggIWxzdHJuY21waTMyQSggImxpZ2h0IiwgbHBTdHIsIDUpICkKKyAgICAgICAgIGlmKCAhc3RybmNhc2VjbXAoICJsaWdodCIsIGxwU3RyLCA1KSApCiAJICAgZmktPmRmLmRmV2VpZ2h0ID0gRldfTElHSFQ7Ci0gICAgICAgICBlbHNlIGlmKCAhbHN0cm5jbXBpMzJBKCAiYmxhY2siLCBscFN0ciwgNSkgKQorICAgICAgICAgZWxzZSBpZiggIXN0cm5jYXNlY21wKCAiYmxhY2siLCBscFN0ciwgNSkgKQogCSAgIGZpLT5kZi5kZldlaWdodCA9IEZXX0JMQUNLOwogICAgICAgIH0KLSAgZWxzZSBpZiggaiA9PSA2ICYmICFsc3RybmNtcGkzMkEoICJtZWRpdW0iLCBscFN0ciwgNikgKQorICBlbHNlIGlmKCBqID09IDYgJiYgIXN0cm5jYXNlY21wKCAibWVkaXVtIiwgbHBTdHIsIDYpICkKICAgICAgIGZpLT5kZi5kZldlaWdodCA9IEZXX1JFR1VMQVI7IAotICBlbHNlIGlmKCBqID09IDggJiYgIWxzdHJuY21waTMyQSggImRlbWlib2xkIiwgbHBTdHIsIDgpICkKKyAgZWxzZSBpZiggaiA9PSA4ICYmICFzdHJuY2FzZWNtcCggImRlbWlib2xkIiwgbHBTdHIsIDgpICkKICAgICAgIGZpLT5kZi5kZldlaWdodCA9IEZXX0RFTUlCT0xEOyAKICAgZWxzZQogICAgICAgZmktPmRmLmRmV2VpZ2h0ID0gRldfRE9OVENBUkU7IC8qIEZJWE1FOiB0cnkgdG8gZ2V0IHNvbWV0aGluZwpAQCAtMjc0LDcgKzI3NCw3IEBACiAvKiB3aWR0aCBuYW1lIC0gKi8KICAgIGxwY2ggPSBMRkRfQWR2YW5jZSggbHBzdHIgPSBscGNoLCAxKTsKICAgIGlmKCAhKmxwY2ggKSByZXR1cm4gRkFMU0U7Ci0gICBpZiggbHN0cm5jbXBpMzJBKCAibm9ybWFsIiwgbHBzdHIsIDYpICkJLyogWFhYICduYXJyb3cnLCAnY29uZGVuc2VkJywgZXRjLi4uICovCisgICBpZiggc3RybmNhc2VjbXAoICJub3JtYWwiLCBscHN0ciwgNikgKQkvKiBYWFggJ25hcnJvdycsICdjb25kZW5zZWQnLCBldGMuLi4gKi8KICAgICAgICBkZWNfc3R5bGVfY2hlY2sgPSBUUlVFOwogICAgZWxzZQogICAgICAgIGZpLT5maV9mbGFncyB8PSBGSV9OT1JNQUw7CkBAIC03NTEsMjggKzc1MSwyOCBAQAogICAgc3dpdGNoKCBsZkZhY2VOYW1lWzBdICkKICAgIHsKICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgIGNhc2UgJ0gnOiBpZighbHN0cmNtcGkzMkEobGZGYWNlTmFtZSwgIkhlbHZldGljYSIpICkKKyAgICAgICAgY2FzZSAnSCc6IGlmKCFzdHJjYXNlY21wKGxmRmFjZU5hbWUsICJIZWx2ZXRpY2EiKSApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGRl9TV0lTUzsKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgY2FzZSAnQyc6IGlmKCFsc3RyY21waTMyQShsZkZhY2VOYW1lLCAiQ291cmllciIpIHx8Ci0JCSAgICAgIWxzdHJjbXBpMzJBKGxmRmFjZU5hbWUsICJDaGFydGVyIikgKQorICAgICAgICBjYXNlICdDJzogaWYoIXN0cmNhc2VjbXAobGZGYWNlTmFtZSwgIkNvdXJpZXIiKSB8fAorCQkgICAgICFzdHJjYXNlY21wKGxmRmFjZU5hbWUsICJDaGFydGVyIikgKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkZfUk9NQU47CiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgIGNhc2UgJ1AnOiBpZiggIWxzdHJjbXBpMzJBKGxmRmFjZU5hbWUsIlBhbGF0aW5vIikgKQorICAgICAgICBjYXNlICdQJzogaWYoICFzdHJjYXNlY21wKGxmRmFjZU5hbWUsIlBhbGF0aW5vIikgKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkZfUk9NQU47CiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgIGNhc2UgJ1QnOiBpZighbHN0cm5jbXBpMzJBKGxmRmFjZU5hbWUsICJUaW1lcyIsIDUpICkKKyAgICAgICAgY2FzZSAnVCc6IGlmKCFzdHJuY2FzZWNtcChsZkZhY2VOYW1lLCAiVGltZXMiLCA1KSApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGRl9ST01BTjsKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgY2FzZSAnVSc6IGlmKCFsc3RyY21waTMyQShsZkZhY2VOYW1lLCAiVXRvcGlhIikgKQorICAgICAgICBjYXNlICdVJzogaWYoIXN0cmNhc2VjbXAobGZGYWNlTmFtZSwgIlV0b3BpYSIpICkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZGX1JPTUFOOwogICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ3onOgotICAgICAgICBjYXNlICdaJzogaWYoIWxzdHJjbXBpMzJBKGxmRmFjZU5hbWUsICJaYXBmIERpbmdiYXRzIikgKQorICAgICAgICBjYXNlICdaJzogaWYoIXN0cmNhc2VjbXAobGZGYWNlTmFtZSwgIlphcGYgRGluZ2JhdHMiKSApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGRl9ERUNPUkFUSVZFOwogICAgfQogICAgcmV0dXJuIDA7CkBAIC03ODYsNyArNzg2LDcgQEAKIHsKICAgICByZXNvdXJjZSA9IExGRF9BZHZhbmNlKCByZXNvdXJjZSwgMiApOwogICAgIGlmKCByZXNvdXJjZSApCi0JcmV0dXJuICghbHN0cm5jbXBpMzJBKCByZXNvdXJjZSwgbmFtZSwgbiApKTsKKwlyZXR1cm4gKCFzdHJuY2FzZWNtcCggcmVzb3VyY2UsIG5hbWUsIG4gKSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC04NTcsOCArODU3LDggQEAKIAkgICAgd2hpbGUoICpidWZmZXIgJiYgaXNzcGFjZSgqYnVmZmVyKSApIGJ1ZmZlcisrOwogCSAgICBmb3IoIGZyID0gTlVMTCwgcGZyID0gZm9udExpc3Q7IHBmcjsgcGZyID0gcGZyLT5uZXh0ICkKIAkgICAgewotCQlpID0gbHN0cmxlbjMyQSggcGZyLT5yZXNvdXJjZSApOwotCQlpZiggIWxzdHJuY21waTMyQSggcGZyLT5yZXNvdXJjZSwgYnVmZmVyLCBpKSApCisJCWkgPSBzdHJsZW4oIHBmci0+cmVzb3VyY2UgKTsKKwkJaWYoICFzdHJuY2FzZWNtcCggcGZyLT5yZXNvdXJjZSwgYnVmZmVyLCBpKSApCiAJCXsKIAkJICAgIGlmKCBmciApCiAJCSAgICB7CkBAIC04ODQsNyArODg0LDcgQEAKICAgICB3aGlsZSggMSApIAogICAgIHsKIAkvKiBjaGVjayBpZiB3ZSBhbHJlYWR5IGdvdCBvbmUgKi8KLQlpZiggIWxzdHJjbXBpMzJBKCBwZmEtPmZhVHlwZUZhY2UsIGxwQWxpYXMgKSApCisJaWYoICFzdHJjYXNlY21wKCBwZmEtPmZhVHlwZUZhY2UsIGxwQWxpYXMgKSApCiAJewogCSAgICBUUkFDRShmb250LCJcdHJlZHVuZGFudCBhbGlhcyAnJXMnIC0+ICclcydcbiIsIAogCQkgIGxwQWxpYXMsIGxwVHlwZUZhY2UgKTsKQEAgLTk2NiwxNCArOTY2LDE0IEBACiAJewogCSAgICBpbnQgbGVuZ3RoOwogCi0JICAgIGxlbmd0aCA9IGxzdHJsZW4zMkEoIGxwQWxpYXMgKTsKKwkgICAgbGVuZ3RoID0gc3RybGVuKCBscEFsaWFzICk7CiAJICAgIGlmKCBscFJlc291cmNlICYmIGxlbmd0aCApCiAJICAgIHsKIAkJZm9udFJlc291cmNlKiBmciwgKmZyTWF0Y2ggPSBOVUxMOwogCiAJCWZvciAoZnIgPSBmb250TGlzdDsgZnIgOyBmciA9IGZyLT5uZXh0KQogCQl7Ci0JCSAgICBpZiggIWxzdHJjbXBpMzJBKCBmci0+cmVzb3VyY2UsIGxwUmVzb3VyY2UgKSApIGZyTWF0Y2ggPSBmcjsKKwkJICAgIGlmKCAhc3RyY2FzZWNtcCggZnItPnJlc291cmNlLCBscFJlc291cmNlICkgKSBmck1hdGNoID0gZnI7CiAJCSAgICBpZiggWEZPTlRfQ2hlY2tSZXNvdXJjZU5hbWUoIGZyLT5yZXNvdXJjZSwgbHBBbGlhcywgbGVuZ3RoICkgKQogCQkgICAgewogCQkJLyogYWxpYXMgaXMgbm90IG5lZWRlZCBzaW5jZSB0aGUgcmVhbCBmb250IGlzIHByZXNlbnQgKi8KQEAgLTk5MCw3ICs5OTAsNyBAQAogCQkJZm9yKHBmYSA9IGFsaWFzVGFibGU7IHBmYTsgcGZhID0gcGZhLT5uZXh0KQogCQkJewogCS8qIFJlbW92ZSBscEFsaWFzIGZyb20gYWxpYXNUYWJsZSAtIHdlIHNob3VsZCBmcmVlIHRoZSBvbGQgZW50cnkgKi8KLQkJCSAgICBpZighbHN0cmNtcDMyQShscEFsaWFzLCBwZmEtPmZhQWxpYXMpKQorCQkJICAgIGlmKCFzdHJjbXAobHBBbGlhcywgcGZhLT5mYUFsaWFzKSkKIAkJCSAgICB7CiAJCQkJaWYocHJldikKIAkJCQkgICAgcHJldi0+bmV4dCA9IHBmYS0+bmV4dDsKQEAgLTk5OSw3ICs5OTksNyBAQAogCQkJICAgICB9CiAKIAkvKiBVcGRhdGUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIHN1YnN0aXR1dGVkIGZvbnQgaW4gYWxpYXNUYWJsZSAqLwotCQkJICAgIGlmKCFsc3RyY21wMzJBKGZyTWF0Y2gtPmxmRmFjZU5hbWUsCisJCQkgICAgaWYoIXN0cmNtcChmck1hdGNoLT5sZkZhY2VOYW1lLAogCQkJCQkJCXBmYS0+ZmFUeXBlRmFjZSkpCiAJCQkJcGZhLT5mYVR5cGVGYWNlID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLAogCQkJCQkJCSBscEFsaWFzICk7CkBAIC0xMDM3LDExICsxMDM3LDExIEBACiAgICAgcHdkID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOwogICAgIGlmKCBwd2QgJiYgcHdkLT5wd19kaXIgKQogICAgIHsKLQlpbnQgaSA9IGxzdHJsZW4zMkEoIHB3ZC0+cHdfZGlyICkgKyBsc3RybGVuMzJBKCBJTklXaW5lUHJlZml4ICkgKyAKLQkJCQkJICAgIGxzdHJsZW4zMkEoIElOSUZvbnRNZXRyaWNzICkgKyAyOworCWludCBpID0gc3RybGVuKCBwd2QtPnB3X2RpciApICsgc3RybGVuKCBJTklXaW5lUHJlZml4ICkgKyAKKwkJCQkJICAgIHN0cmxlbiggSU5JRm9udE1ldHJpY3MgKSArIDI7CiAJaWYoIGkgPiAqYnVmX3NpemUgKSAKIAkgICAgYnVmZmVyID0gKGNoYXIqKSBIZWFwUmVBbGxvYyggU3lzdGVtSGVhcCwgMCwgYnVmZmVyLCAqYnVmX3NpemUgPSBpICk7Ci0JbHN0cmNweTMyQSggYnVmZmVyLCBwd2QtPnB3X2RpciApOworCXN0cmNweSggYnVmZmVyLCBwd2QtPnB3X2RpciApOwogCXN0cmNhdCggYnVmZmVyLCBJTklXaW5lUHJlZml4ICk7CiAJc3RyY2F0KCBidWZmZXIsIElOSUZvbnRNZXRyaWNzICk7CiAgICAgfSBlbHNlIGJ1ZmZlclswXSA9ICdcMCc7CkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCiAJZm9yKCBqID0gaSA9IDAsIHBmciA9IGZvbnRMaXN0OyBwZnI7IHBmciA9IHBmci0+bmV4dCApIAogCXsKLQkgICAgaSArPSBsc3RybGVuMzJBKCBwZnItPnJlc291cmNlICkgKyAxOworCSAgICBpICs9IHN0cmxlbiggcGZyLT5yZXNvdXJjZSApICsgMTsKIAkgICAgaiArPSBwZnItPmNvdW50OwogCX0KICAgICAgICAgaSArPSBuX2ZmICogc2l6ZW9mKGZvbnRSZXNvdXJjZSkgKyBqICogc2l6ZW9mKGZvbnRJbmZvKSArIHNpemVvZihpbnQpOwpAQCAtMTIwNyw3ICsxMjA3LDcgQEAKIAkgICAgd3JpdGUoIGZkLCAmaSwgc2l6ZW9mKGludCkgKTsKIAkgICAgZm9yKCBwZnIgPSBmb250TGlzdDsgcGZyICYmIGkgPT0gajsgcGZyID0gcGZyLT5uZXh0ICkKIAkgICAgewotCSAgICAgICAgaSA9IGxzdHJsZW4zMkEoIHBmci0+cmVzb3VyY2UgKSArIDE7CisJICAgICAgICBpID0gc3RybGVuKCBwZnItPnJlc291cmNlICkgKyAxOwogCQlqID0gd3JpdGUoIGZkLCBwZnItPnJlc291cmNlLCBpICk7CiAJICAgIH0KIAl9CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogICAgICBwcmludGYoIiVpXHQ6ICVzXG4iLCBpLCB4X3BhdHRlcm5baV0gKTsKICNlbmRpZgogCi0gICAgIGogPSBsc3RybGVuMzJBKCB4X3BhdHRlcm5baV0gKTsKKyAgICAgaiA9IHN0cmxlbiggeF9wYXR0ZXJuW2ldICk7CiAgICAgIGlmKCBqICkgeF9jaGVja3N1bSBePSBfX2dlbmVyaWNDaGVja1N1bSggeF9wYXR0ZXJuW2ldLCBqICk7CiAgIH0KICAgeF9jaGVja3N1bSB8PSBYX1BGT05UX01BR0lDOwpAQCAtMTM5NSw4ICsxMzk1LDggQEAKIAogCWZvciggcGZyID0gTlVMTCwgZnIgPSBmb250TGlzdDsgZnI7IGZyID0gZnItPm5leHQgKQogCXsKLQkgICBpZiggIWxzdHJuY21waTMyQShmci0+cmVzb3VyY2UsIHR5cGVmYWNlLCBqKSAmJiAKLQkgICAgICAgbHN0cmxlbjMyQShmci0+cmVzb3VyY2UpID09IGogKSBicmVhazsKKwkgICBpZiggIXN0cm5jYXNlY21wKGZyLT5yZXNvdXJjZSwgdHlwZWZhY2UsIGopICYmIAorCSAgICAgICBzdHJsZW4oZnItPnJlc291cmNlKSA9PSBqICkgYnJlYWs7CiAJICAgcGZyID0gZnI7CiAJfSAgCiAKQEAgLTE0MzMsNyArMTQzMyw3IEBACiAJewogCSAgICAvKiBzZXQgc2NhbGFibGUgZm9udCBoZWlnaHQgdG8gMjQgdG8gZ2V0IGFuIG9yaWdpbiBmb3IgZXh0cmFwb2xhdGlvbiAqLwogCi0JICAgaiA9IGxzdHJsZW4zMkEodHlwZWZhY2UpOyAgaiArPSAweDEwOworCSAgIGogPSBzdHJsZW4odHlwZWZhY2UpOyAgaiArPSAweDEwOwogCSAgIGlmKCBqID4gYnVmX3NpemUgKSAKIAkgICAgICAgYnVmZmVyID0gKGNoYXIqKUhlYXBSZUFsbG9jKCBTeXN0ZW1IZWFwLCAwLCBidWZmZXIsIGJ1Zl9zaXplID0gaiApOwogCkBAIC0xNDgyLDcgKzE0ODIsNyBAQAogCiAgIC8qIGNoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBYMTEgUjYgc2VydmVyICovCiAKLSAgbHN0cmNweTMyQShidWZmZXIsICItKi0qLSotKi1ub3JtYWwtKi1bMTIgMCAwIDEyXS0qLTcyLSotKi0qLWlzbzg4NTktMSIpOworICBzdHJjcHkoYnVmZmVyLCAiLSotKi0qLSotbm9ybWFsLSotWzEyIDAgMCAxMl0tKi03Mi0qLSotKi1pc284ODU5LTEiKTsKICAgaWYoICh4X2ZzID0gVFNYTG9hZFF1ZXJ5Rm9udChkaXNwbGF5LCBidWZmZXIpKSApCiAgIHsKICAgICAgICBYVGV4dENhcHMgfD0gVENfU0ZfWF9ZSU5ERVA7CkBAIC0xNzM5LDcgKzE3MzksNyBAQAogewogICB3aGlsZSggcGZyICkKICAgewotICAgIGlmKCAhbHN0cmNtcGkzMkEoIHBmci0+bGZGYWNlTmFtZSwgcFR5cGVGYWNlICkgKSBicmVhazsKKyAgICBpZiggIXN0cmNhc2VjbXAoIHBmci0+bGZGYWNlTmFtZSwgcFR5cGVGYWNlICkgKSBicmVhazsKICAgICBwZnIgPSBwZnItPm5leHQ7CiAgIH0KICAgcmV0dXJuIHBmcjsKQEAgLTE3NjEsNyArMTc2MSw3IEBACiAJTFBTVFIgc3RyID0gTlVMTDsKIAogCWZvciggZmEgPSBhbGlhc1RhYmxlOyBmYTsgZmEgPSBmYS0+bmV4dCApCi0JICAgICBpZiggIWxzdHJjbXBpMzJBKCBmYS0+ZmFBbGlhcywgZm0ucGxmLT5sZkZhY2VOYW1lICkgKSAKKwkgICAgIGlmKCAhc3RyY21wKCBmYS0+ZmFBbGlhcywgZm0ucGxmLT5sZkZhY2VOYW1lICkgKSAKIAkgICAgIHsKIAkJc3RyID0gZmEtPmZhVHlwZUZhY2U7CiAJCWJyZWFrOwpAQCAtMTgzNCw3ICsxODM0LDcgQEAKIAogCSAgICBpZiggIW1lbWNtcCggcGxmLCAmZm9udENhY2hlW2ldLmxmLAogCQkJIHNpemVvZihMT0dGT05UMTYpIC0gTEZfRkFDRVNJWkUgKSAmJgotCQkhbHN0cm5jbXBpMzJBKCBwbGYtPmxmRmFjZU5hbWUsIGZvbnRDYWNoZVtpXS5sZi5sZkZhY2VOYW1lLCAKKwkJIXN0cm5jYXNlY21wKCBwbGYtPmxmRmFjZU5hbWUsIGZvbnRDYWNoZVtpXS5sZi5sZkZhY2VOYW1lLCAKIAkJCQkJCQkgICAgTEZfRkFDRVNJWkUgKSApCiAJICAgIHsKIAkJLyogcmVtb3ZlIHRlbXBvcmFyaWx5IGZyb20gdGhlIGxydSBsaXN0ICovCmRpZmYgLS1naXQgYS9pZjE2MzIvTWFrZWZpbGUuaW4gYi9pZjE2MzIvTWFrZWZpbGUuaW4KaW5kZXggZGZhZDJkZC4uMzI3NTQ4NyAxMDA2NDQKLS0tIGEvaWYxNjMyL01ha2VmaWxlLmluCisrKyBiL2lmMTYzMi9NYWtlZmlsZS5pbgpAQCAtMzgsNiArMzgsNyBAQAogCXdpbjg3ZW0uc3BlYyBcCiAJd2luYXNwaS5zcGVjIFwKIAl3aW5kZWJ1Zy5zcGVjIFwKKwl3aW5lcHMuc3BlYyBcCiAJd2luZy5zcGVjIFwKIAl3aW5zb2NrLnNwZWMgXAogCXdwcm9jcy5zcGVjCkBAIC00OSw2ICs1MCw3IEBACiAJZHVtbXkuYyBcCiAJcmVsYXkuYyBcCiAJc2lnbmFsLmMgXAorCXNub29wLmMgXAogCXRodW5rLmMKIAogR0VOX0FTTV9TUkNTID0gXApkaWZmIC0tZ2l0IGEvaWYxNjMyL2J1aWx0aW4uYyBiL2lmMTYzMi9idWlsdGluLmMKaW5kZXggN2Y0MGUyMS4uNDBjMzY1MiAxMDA2NDQKLS0tIGEvaWYxNjMyL2J1aWx0aW4uYworKysgYi9pZjE2MzIvYnVpbHRpbi5jCkBAIC03Niw2ICs3Niw3IEBACiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXSU44N0VNX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXSU5BU1BJX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXSU5ERUJVR19EZXNjcmlwdG9yOworZXh0ZXJuIGNvbnN0IFdJTjE2X0RFU0NSSVBUT1IgV0lORVBTX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXSU5HX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXSU5TT0NLX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBXUFJPQ1NfRGVzY3JpcHRvcjsKQEAgLTExNyw2ICsxMTgsNyBAQAogICAgIHsgJldJTjMyUzE2X0Rlc2NyaXB0b3IsIDAgfSwKICAgICB7ICZXSU44N0VNX0Rlc2NyaXB0b3IsICBETExfRkxBR19OT1RfVVNFRCB9LAogICAgIHsgJldJTkFTUElfRGVzY3JpcHRvciwgIDAgfSwKKyAgICB7ICZXSU5FUFNfRGVzY3JpcHRvciwgICBETExfRkxBR19BTFdBWVNfVVNFRCB9LAogICAgIHsgJldJTkdfRGVzY3JpcHRvciwgICAgIDAgfSwKICAgICB7ICZXSU5TT0NLX0Rlc2NyaXB0b3IsICAwIH0sCiAgICAgLyogTGFzdCBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbC5zcGVjIGIvaWYxNjMyL2tlcm5lbC5zcGVjCmluZGV4IDg4ZjljZjAuLmE1N2M5ODcgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwuc3BlYworKysgYi9pZjE2MzIva2VybmVsLnNwZWMKQEAgLTY0LDcgKzY0LDcgQEAKIDY0ICBwYXNjYWwxNiBBY2Nlc3NSZXNvdXJjZSh3b3JkIHdvcmQpIEFjY2Vzc1Jlc291cmNlMTYKIDY1ICBwYXNjYWwgU2l6ZW9mUmVzb3VyY2Uod29yZCB3b3JkKSBTaXplb2ZSZXNvdXJjZTE2CiA2NiAgcGFzY2FsMTYgQWxsb2NSZXNvdXJjZSh3b3JkIHdvcmQgbG9uZykgQWxsb2NSZXNvdXJjZQotNjcgIHBhc2NhbCBTZXRSZXNvdXJjZUhhbmRsZXIod29yZCBzZWdzdHIgc2VncHRyKSBUSFVOS19TZXRSZXNvdXJjZUhhbmRsZXIKKzY3ICBwYXNjYWwgU2V0UmVzb3VyY2VIYW5kbGVyKHdvcmQgc2Vnc3RyIHNlZ3B0cikgU2V0UmVzb3VyY2VIYW5kbGVyCiA2OCAgcGFzY2FsMTYgSW5pdEF0b21UYWJsZSh3b3JkKSBJbml0QXRvbVRhYmxlMTYKIDY5ICBwYXNjYWwxNiBGaW5kQXRvbShzZWdzdHIpIEZpbmRBdG9tMTYKIDcwICBwYXNjYWwxNiBBZGRBdG9tKHNlZ3N0cikgQWRkQXRvbTE2CkBAIC0xMzMsNyArMTMzLDcgQEAKIDEzMCBwYXNjYWwgRmlsZUNEUihwdHIpIEZpbGVDRFIKIDEzMSBwYXNjYWwgR2V0RE9TRW52aXJvbm1lbnQoKSBHZXRET1NFbnZpcm9ubWVudAogMTMyIHBhc2NhbCBHZXRXaW5GbGFncygpIEdldFdpbkZsYWdzCi0xMzMgcGFzY2FsMTYgR2V0RXhlUHRyKHdvcmQpIEdldEV4ZVB0cgorMTMzIHJlZ2lzdGVyIEdldEV4ZVB0cih3b3JkKSBXSU4xNl9HZXRFeGVQdHIKIDEzNCBwYXNjYWwxNiBHZXRXaW5kb3dzRGlyZWN0b3J5KHB0ciB3b3JkKSBHZXRXaW5kb3dzRGlyZWN0b3J5MTYKIDEzNSBwYXNjYWwxNiBHZXRTeXN0ZW1EaXJlY3RvcnkocHRyIHdvcmQpIEdldFN5c3RlbURpcmVjdG9yeTE2CiAxMzYgcGFzY2FsMTYgR2V0RHJpdmVUeXBlKHdvcmQpIEdldERyaXZlVHlwZTE2CkBAIC0zMjIsNyArMzIyLDcgQEAKIDQ4MCBzdHViIEtFUk5FTF80ODAKIDQ4MSBzdHViIEtFUk5FTF80ODEKIDQ4MiBwYXNjYWwgTG9hZExpYnJhcnkzMihzdHIpIExvYWRMaWJyYXJ5MzJBCi00ODUgc3R1YiBLRVJORUxfNDg1Cis0ODUgcGFzY2FsIEdldFByb2Nlc3NEV09SRChsb25nIHNfd29yZCkgR2V0UHJvY2Vzc0R3b3JkCiA0ODYgc3R1YiBLRVJORUxfNDg2CiA0OTEgc3R1YiBSZWdpc3RlclNlcnZpY2VQcm9jZXNzCiA1MDAgc3R1YiBLRVJORUxfNTAwCmRpZmYgLS1naXQgYS9pZjE2MzIvbW1zeXN0ZW0uc3BlYyBiL2lmMTYzMi9tbXN5c3RlbS5zcGVjCmluZGV4IDViZDBiMjQuLjRiMTE4YmYgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9tbXN5c3RlbS5zcGVjCisrKyBiL2lmMTYzMi9tbXN5c3RlbS5zcGVjCkBAIC03LDcgKzcsNyBAQAogNSAgICAgIHBhc2NhbCAgbW1zeXN0ZW1HZXRWZXJzaW9uKCkgbW1zeXN0ZW1HZXRWZXJzaW9uMTYKIDYgICAgICBwYXNjYWwgIERyaXZlclByb2MobG9uZyB3b3JkIHdvcmQgbG9uZyBsb25nKSBEcml2ZXJQcm9jCiA4ICAgICAgc3R1YiAgICBXTU1NSURJUlVOT05DRQotMzAgICAgIHBhc2NhbDE2IE91dHB1dERlYnVnU3RyKHB0cikgT3V0cHV0RGVidWdTdHJpbmcxNgorMzAgICAgIHBhc2NhbDE2IE91dHB1dERlYnVnU3RyKHN0cikgT3V0cHV0RGVidWdTdHJpbmcxNgogMzEgICAgIHBhc2NhbCAgRHJpdmVyQ2FsbGJhY2sobG9uZyB3b3JkIHdvcmQgd29yZCBsb25nIGxvbmcgbG9uZykgRHJpdmVyQ2FsbGJhY2sKIDMyICAgICBzdHViICAgIFNUQUNLRU5URVIKIDMzICAgICBzdHViICAgIFNUQUNLTEVBVkUKZGlmZiAtLWdpdCBhL2lmMTYzMi9yZWxheS5jIGIvaWYxNjMyL3JlbGF5LmMKaW5kZXggYzZmMDJmNC4uY2M5MDRlMyAxMDA2NDQKLS0tIGEvaWYxNjMyL3JlbGF5LmMKKysrIGIvaWYxNjMyL3JlbGF5LmMKQEAgLTU1LDYgKzU1LDkgQEAKIH0KIAogCisgICAgLyogZnJvbSByZWxheTMyL3JlbGF5Mzg2LmMgKi8KKyAgICBleHRlcm4gZGVidWdfcmVsYXlfaW5jbHVkZWxpc3Q7CisgICAgZXh0ZXJuIGRlYnVnX3JlbGF5X2V4Y2x1ZGVsaXN0OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBSRUxBWV9EZWJ1Z0NhbGxGcm9tMTYKQEAgLTY1LDE0ICs2OCwxOCBAQAogICAgIFNUQUNLMTZGUkFNRSAqZnJhbWU7CiAgICAgV09SRCBvcmRpbmFsOwogICAgIGNoYXIgKmFyZ3MxNjsKKyAgICBjb25zdCBjaGFyICpmdW5zdHI7CiAgICAgaW50IGk7CisgICAgLyogZnJvbSByZWxheTMyL3JlbGF5Mzg2LmMgKi8KKyAgICBleHRlcm4gaW50IFJFTEFZX1Nob3dEZWJ1Z21zZ1JlbGF5KGNvbnN0IGNoYXIgKik7CiAKICAgICBpZiAoIVRSQUNFX09OKHJlbGF5KSkgcmV0dXJuOwogCiAgICAgZnJhbWUgPSBDVVJSRU5UX1NUQUNLMTY7Ci0gICAgRFBSSU5URiggIkNhbGwgJXMoIiwgQlVJTFRJTl9HZXRFbnRyeVBvaW50MTYoIGZyYW1lLT5lbnRyeV9jcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVudHJ5X2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3JkaW5hbCApKTsKKyAgICBmdW5zdHIgPSBCVUlMVElOX0dldEVudHJ5UG9pbnQxNihmcmFtZS0+ZW50cnlfY3MsZnJhbWUtPmVudHJ5X2lwLCZvcmRpbmFsKTsKKyAgICBpZiAoIWZ1bnN0cikgcmV0dXJuOyAvKiBoYXBwZW5zIGZvciB0aGUgdHdvIHNub29wIHJlZ2lzdGVyIHJlbGF5cyAqLworICAgIGlmICghUkVMQVlfU2hvd0RlYnVnbXNnUmVsYXkoZnVuc3RyKSkgcmV0dXJuOworICAgIERQUklOVEYoICJDYWxsICVzKCIsZnVuc3RyKTsKICAgICBWQV9TVEFSVDE2KCBhcmdzMTYgKTsKIAogICAgIGlmIChmdW5jX3R5cGUgJiA0KSAgLyogY2RlY2wgKi8KQEAgLTE4NCwxMiArMTkxLDE2IEBACiB7CiAgICAgU1RBQ0sxNkZSQU1FICpmcmFtZTsKICAgICBXT1JEIG9yZGluYWw7CisgICAgY29uc3QgY2hhciAqZnVuc3RyOworICAgIC8qIGZyb20gcmVsYXkzMi9yZWxheTM4Ni5jICovCisgICAgZXh0ZXJuIGludCBSRUxBWV9TaG93RGVidWdtc2dSZWxheShjb25zdCBjaGFyICopOwogCiAgICAgaWYgKCFUUkFDRV9PTihyZWxheSkpIHJldHVybjsKICAgICBmcmFtZSA9IENVUlJFTlRfU1RBQ0sxNjsKLSAgICBEUFJJTlRGKCAiUmV0ICAlcygpICIsIEJVSUxUSU5fR2V0RW50cnlQb2ludDE2KCBmcmFtZS0+ZW50cnlfY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZW50cnlfaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3JkaW5hbCApKTsKKyAgICBmdW5zdHIgPSBCVUlMVElOX0dldEVudHJ5UG9pbnQxNihmcmFtZS0+ZW50cnlfY3MsZnJhbWUtPmVudHJ5X2lwLCZvcmRpbmFsKTsKKyAgICBpZiAoIWZ1bnN0cikgcmV0dXJuOworICAgIGlmICghUkVMQVlfU2hvd0RlYnVnbXNnUmVsYXkoZnVuc3RyKSkgcmV0dXJuOworICAgIERQUklOVEYoICJSZXQgICVzKCkgIixmdW5zdHIpOwogICAgIHN3aXRjaChmdW5jX3R5cGUpCiAgICAgewogICAgIGNhc2UgMDogLyogbG9uZyAqLwpAQCAtNDc1LDEwICs0ODYsMTAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgICAgQ2FsbFByb2NFeDMyVygpICAgKEtFUk5FTC41MTgpICAgICAgICAKKyogICAgICAgICAgIENhbGxQcm9jRXgzMlcoKSAgIChLRVJORUwuNTE4KQogKgogKiAgICAgIEMgLSBzdHlsZSBsaW5rYWdlIHRvIENhbGxQcm9jMzJXIC0gY2FsbGVyIHBvcHMgc3RhY2suCi0qLyAKKyovCiBEV09SRCBXSU5BUEkgV0lOMTZfQ2FsbFByb2NFeDMyVygpCiB7CiAJcmV0dXJuIFJFTEFZX0NhbGxQcm9jMzJXKFRSVUUpOwpkaWZmIC0tZ2l0IGEvaWYxNjMyL3Nub29wLmMgYi9pZjE2MzIvc25vb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI0NjYyCi0tLSAvZGV2L251bGwKKysrIGIvaWYxNjMyL3Nub29wLmMKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiAzODYtc3BlY2lmaWMgV2luMTYgZGxsPC0+ZGxsIHNub29waW5nIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAxOTk4IE1hcmN1cyBNZWlzc25lcgorICovCisKKyNpZmRlZiBfX2kzODZfXworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgIndpbmJhc2UuaCIKKyNpbmNsdWRlICJ3aW5udC5oIgorI2luY2x1ZGUgImhlYXAuaCIKKyNpbmNsdWRlICJnbG9iYWwuaCIKKyNpbmNsdWRlICJzZWxlY3RvcnMuaCIKKyNpbmNsdWRlICJzdGFja2ZyYW1lLmgiCisjaW5jbHVkZSAic25vb3AuaCIKKyNpbmNsdWRlICJkZWJ1Z3N0ci5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKyNwcmFnbWEgcGFjaygxKQorCit2b2lkIFdJTkFQSSBTTk9PUDE2X0VudHJ5KENPTlRFWFQgKmNvbnRleHQpOwordm9pZCBXSU5BUEkgU05PT1AxNl9SZXR1cm4oQ09OVEVYVCAqY29udGV4dCk7CitleHRlcm4gdm9pZCBDYWxsRnJvbTE2X3BfcmVnc18oKTsKKworLyogR2VuZXJpYyBjYWxsZnJvbTE2X3BfcmVncyBmdW5jdGlvbiBlbnRyeS4KKyAqICAgICAgcHVzaHcgJWJwCQkJMHg1NQorICogICAgICBwdXNobCAkRE9TM0NhbGwJCQlEV09SRCBmdW4zMgorICogICAgICAuYnl0ZSAweDlhCQkJMHg5YQorICogICAgICAubG9uZyBDYWxsRnJvbTE2X3BfcmVnc18JRFdPUkQgYWRkcgorICogICAgICAubG9uZyAweDkwOTAwMDIzCQlXT1JEIHNlZztub3A7bm9wCisgKi8KKwordHlwZWRlZglzdHJ1Y3QgdGFnU05PT1AxNl9GVU4geworCS8qIGNvZGUgcGFydCAqLworCUJZVEUJCWxjYWxsOwkJLyogMHg5YSBjYWxsIGFic29sdXRlIHdpdGggc2VnbWVudCAqLworCURXT1JECQlzbnI7CisJLyogdW5yZWFjaGVkICovCisJaW50CQlucm9mYXJnczsKKwlGQVJQUk9DMTYJb3JpZ2Z1bjsKKwljaGFyCQkqbmFtZTsKK30gU05PT1AxNl9GVU47CisKK3R5cGVkZWYgc3RydWN0IHRhZ1NOT09QMTZfRExMIHsKKwlITU9EVUxFMTYJaG1vZDsKKwlIQU5ETEUxNglmdW5oYW5kbGU7CisJU05PT1AxNl9GVU4JKmZ1bnM7CisJTFBDU1RSCQluYW1lOworCXN0cnVjdCB0YWdTTk9PUDE2X0RMTAkqbmV4dDsKK30gU05PT1AxNl9ETEw7CisKK3R5cGVkZWYgc3RydWN0IHRhZ1NOT09QMTZfUkVUVVJORU5UUlkgeworCS8qIGNvZGUgcGFydCAqLworCUJZVEUJCWxjYWxsOwkJLyogMHg5YSBjYWxsIGFic29sdXRlIHdpdGggc2VnbWVudCAqLworCURXT1JECQlzbnI7CisJLyogdW5yZWFjaGVkICovCisJRkFSUFJPQzE2CW9yaWdyZXR1cm47CisJU05PT1AxNl9ETEwJKmRsbDsKKwlEV09SRAkJb3JkaW5hbDsKKwlXT1JECQlvcmlnU1A7CisJV09SRAkJKmFyZ3M7CQkvKiBzYXZlZCBhcmdzIGFjcm9zcyBhIHN0ZGNhbGwgKi8KK30gU05PT1AxNl9SRVRVUk5FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnU05PT1AxNl9SRVRVUk5FTlRSSUVTIHsKKwlTTk9PUDE2X1JFVFVSTkVOVFJZIGVudHJ5WzY1NTAwL3NpemVvZihTTk9PUDE2X1JFVFVSTkVOVFJZKV07CisJSEFORExFMTYJcmV0aGFuZGxlOworCXN0cnVjdCB0YWdTTk9PUDE2X1JFVFVSTkVOVFJJRVMJKm5leHQ7Cit9IFNOT09QMTZfUkVUVVJORU5UUklFUzsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnU05PT1AxNl9SRUxBWSB7CisJLyogY29kZSBwYXJ0ICovCisJQllURQkJcHJlZml4OwkJLyogMHg2NiAsIDMyYml0IHByZWZpeCAqLworCUJZVEUJCXB1c2hicDsJCS8qIDB4NTUgKi8KKwlCWVRFCQlwdXNobDsJCS8qIDB4NjggKi8KKwlEV09SRAkJcmVhbGZ1bjsJLyogU05PT1AxNl9SZXR1cm4gKi8KKwlCWVRFCQlsY2FsbDsJCS8qIDB4OWEgY2FsbCBhYnNvbHV0ZSB3aXRoIHNlZ21lbnQgKi8KKwlEV09SRAkJY2FsbGZyb21yZWdzOworCVdPUkQJCXNlZzsKKwkvKiB1bnJlYWNoZWQgKi8KK30gU05PT1AxNl9SRUxBWTsKKworI3ByYWdtYSBwYWNrKDQpCisKK3N0YXRpYwlTTk9PUDE2X0RMTAkJKmZpcnN0ZGxsID0gTlVMTDsKK3N0YXRpYwlTTk9PUDE2X1JFVFVSTkVOVFJJRVMgCSpmaXJzdHJldHMgPSBOVUxMOworc3RhdGljCVNOT09QMTZfUkVMQVkJCSpzbnI7CitzdGF0aWMJSEFORExFMTYJCXhzbnIgPSAwOworCit2b2lkCitTTk9PUDE2X1JlZ2lzdGVyRExMKE5FX01PRFVMRSAqcE1vZHVsZSxMUENTVFIgbmFtZSkgeworCVNOT09QMTZfRExMCSoqZGxsID0gJihmaXJzdGRsbCk7CisJY2hhcgkJKnM7CisKKwlpZiAoIVRSQUNFX09OKHNub29wKSkgcmV0dXJuOworCWlmICghc25yKSB7CisJCXhzbnI9R0xPQkFMX0FsbG9jKEdNRU1fWkVST0lOSVQsMipzaXplb2YoKnNuciksMCxUUlVFLFRSVUUsRkFMU0UpOworCQlzbnIgPSBHbG9iYWxMb2NrMTYoeHNucik7CisJCXNuclswXS5wcmVmaXgJPSAweDY2OworCQlzbnJbMF0ucHVzaGJwCT0gMHg1NTsKKwkJc25yWzBdLnB1c2hsCT0gMHg2ODsKKwkJc25yWzBdLnJlYWxmdW4JPSAoRFdPUkQpU05PT1AxNl9FbnRyeTsKKwkJc25yWzBdLmxjYWxsIAk9IDB4OWE7CisJCXNuclswXS5jYWxsZnJvbXJlZ3MgPSAoRFdPUkQpQ2FsbEZyb20xNl9wX3JlZ3NfOworCQlHRVRfQ1Moc25yWzBdLnNlZyk7CisJCXNuclsxXS5wcmVmaXgJPSAweDY2OworCQlzbnJbMV0ucHVzaGJwCT0gMHg1NTsKKwkJc25yWzFdLnB1c2hsCT0gMHg2ODsKKwkJc25yWzFdLnJlYWxmdW4JPSAoRFdPUkQpU05PT1AxNl9SZXR1cm47CisJCXNuclsxXS5sY2FsbCAJPSAweDlhOworCQlzbnJbMV0uY2FsbGZyb21yZWdzID0gKERXT1JEKUNhbGxGcm9tMTZfcF9yZWdzXzsKKwkJR0VUX0NTKHNuclsxXS5zZWcpOworCX0KKwl3aGlsZSAoKmRsbCkgeworCQlpZiAoKCpkbGwpLT5obW9kID09IHBNb2R1bGUtPnNlbGYpCisJCQlyZXR1cm47IC8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCQlkbGwgPSAmKCgqZGxsKS0+bmV4dCk7CisJfQorCSpkbGwgPSAoU05PT1AxNl9ETEwqKUhlYXBBbGxvYyhTeXN0ZW1IZWFwLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKFNOT09QMTZfRExMKSk7CisJKCpkbGwpLT5uZXh0CT0gTlVMTDsKKwkoKmRsbCktPmhtb2QJPSBwTW9kdWxlLT5zZWxmOworCWlmICgocz1zdHJyY2hyKG5hbWUsJ1xcJykpKQorCQluYW1lID0gcysxOworCSgqZGxsKS0+bmFtZQk9IEhFQVBfc3RyZHVwQShTeXN0ZW1IZWFwLDAsbmFtZSk7CisJaWYgKChzPXN0cnJjaHIoKCpkbGwpLT5uYW1lLCcuJykpKQorCQkqcz0nXDAnOworCSgqZGxsKS0+ZnVuaGFuZGxlID0gR2xvYmFsSGFuZGxlVG9TZWwoR0xPQkFMX0FsbG9jKEdNRU1fWkVST0lOSVQsNjU1MzUsMCxUUlVFLEZBTFNFLEZBTFNFKSk7CisJKCpkbGwpLT5mdW5zID0gR2xvYmFsTG9jazE2KCgqZGxsKS0+ZnVuaGFuZGxlKTsKKwlpZiAoISgqZGxsKS0+ZnVucykgeworCQlIZWFwRnJlZShTeXN0ZW1IZWFwLDAsKmRsbCk7CisJCUZJWE1FKHNub29wLCJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoKCpkbGwpLT5mdW5zLDAsNjU1MzUpOworfQorCitGQVJQUk9DMTYKK1NOT09QMTZfR2V0UHJvY0FkZHJlc3MxNihITU9EVUxFMTYgaG1vZCxEV09SRCBvcmRpbmFsLEZBUlBST0MxNiBvcmlnZnVuKSB7CisJU05PT1AxNl9ETEwJCQkqZGxsID0gZmlyc3RkbGw7CisJU05PT1AxNl9GVU4JCQkqZnVuOworCU5FX01PRFVMRQkJCSpwTW9kdWxlID0gTkVfR2V0UHRyKGhtb2QpOworCXVuc2lnbmVkIGNoYXIJCQkqY3BudDsKKwljaGFyCQkJCW5hbWVbMjAwXTsKKworCWlmICghVFJBQ0VfT04oc25vb3ApIHx8ICFwTW9kdWxlIHx8ICFISVdPUkQob3JpZ2Z1bikpCisJCXJldHVybiBvcmlnZnVuOworCWlmICghKihMUEJZVEUpUFRSX1NFR19UT19MSU4ob3JpZ2Z1bikpIC8qIDB4MDAgaXMgYW4gaW1wb3NzLiBvcGNvZGUsIHBvc3MuIGRhdGFyZWYuICovCisJCXJldHVybiBvcmlnZnVuOworCXdoaWxlIChkbGwpIHsKKwkJaWYgKGhtb2QgPT0gZGxsLT5obW9kKQorCQkJYnJlYWs7CisJCWRsbD1kbGwtPm5leHQ7CisJfQorCWlmICghZGxsKQkvKiBwcm9iYWJseSBpbnRlcm5hbCAqLworCQlyZXR1cm4gb3JpZ2Z1bjsKKwlpZiAob3JkaW5hbD42NTUzNS9zaXplb2YoU05PT1AxNl9GVU4pKQorCQlyZXR1cm4gb3JpZ2Z1bjsKKwlmdW4gPSBkbGwtPmZ1bnMrb3JkaW5hbDsKKwkvKiBhbHJlYWR5IGRvbmU/ICovCisJZnVuLT5sY2FsbCAJPSAweDlhOworCWZ1bi0+c25yCT0gTUFLRUxPTkcoMCx4c25yKTsKKwlmdW4tPm9yaWdmdW4JPSBvcmlnZnVuOworCWlmIChmdW4tPm5hbWUpCisJCXJldHVybiAoRkFSUFJPQzE2KShTRUdQVFIpTUFLRUxPTkcoKChjaGFyKilmdW4tKGNoYXIqKWRsbC0+ZnVucyksZGxsLT5mdW5oYW5kbGUpOworCWNwbnQgPSAodW5zaWduZWQgY2hhciAqKXBNb2R1bGUgKyBwTW9kdWxlLT5uYW1lX3RhYmxlOworCXdoaWxlICgqY3BudCkgeworCQljcG50ICs9ICpjcG50ICsgMSArIHNpemVvZihXT1JEKTsKKwkJaWYgKCooV09SRCopKGNwbnQrKmNwbnQrMSkgPT0gb3JkaW5hbCkgeworCQkJc3ByaW50ZihuYW1lLCIlLipzIiwqY3BudCxjcG50KzEpOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogTm93IHNlYXJjaCB0aGUgbm9uLXJlc2lkZW50IG5hbWVzIHRhYmxlICovCisKKwlpZiAoISpjcG50ICYmIHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUpIHsKKwkJY3BudCA9IChjaGFyICopR2xvYmFsTG9jazE2KCBwTW9kdWxlLT5ucm5hbWVfaGFuZGxlICk7CisJCXdoaWxlICgqY3BudCkgeworCQkJY3BudCArPSAqY3BudCArIDEgKyBzaXplb2YoV09SRCk7CisJCQlpZiAoKihXT1JEKikoY3BudCsqY3BudCsxKSA9PSBvcmRpbmFsKSB7CisJCQkJICAgIHNwcmludGYobmFtZSwiJS4qcyIsKmNwbnQsY3BudCsxKTsKKwkJCQkgICAgYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKCpjcG50KQorCQlmdW4tPm5hbWUgPSBIRUFQX3N0cmR1cEEoU3lzdGVtSGVhcCwwLG5hbWUpOworCWVsc2UKKwkJZnVuLT5uYW1lID0gSEVBUF9zdHJkdXBBKFN5c3RlbUhlYXAsMCwiIik7CisJZnVuLT5sY2FsbCAJPSAweDlhOworCWZ1bi0+c25yCT0gTUFLRUxPTkcoMCx4c25yKTsKKwlmdW4tPm9yaWdmdW4JPSBvcmlnZnVuOworCWZ1bi0+bnJvZmFyZ3MJPSAtMTsKKwlyZXR1cm4gKEZBUlBST0MxNikoU0VHUFRSKU1BS0VMT05HKCgoY2hhciopZnVuLShjaGFyKilkbGwtPmZ1bnMpLGRsbC0+ZnVuaGFuZGxlKTsKK30KKworI2RlZmluZSBDQUxMRVIxUkVGICgqKERXT1JEKikoUFRSX1NFR19PRkZfVE9fTElOKFNTX3JlZyhjb250ZXh0KSxTUF9yZWcoY29udGV4dCkrNCkpKQordm9pZCBXSU5BUEkgU05PT1AxNl9FbnRyeShDT05URVhUICpjb250ZXh0KSB7CisJRFdPUkQJCW9yZGluYWw9MDsKKwlEV09SRAkJZW50cnk9KERXT1JEKVBUUl9TRUdfT0ZGX1RPX0xJTihDU19yZWcoY29udGV4dCksSVBfcmVnKGNvbnRleHQpKS01OworCVdPUkQJCXhjcyA9IENTX3JlZyhjb250ZXh0KTsKKwlTTk9PUDE2X0RMTAkqZGxsID0gZmlyc3RkbGw7CisJU05PT1AxNl9GVU4JKmZ1biA9IE5VTEw7CisJU05PT1AxNl9SRVRVUk5FTlRSSUVTCSoqcmV0cyA9ICZmaXJzdHJldHM7CisJU05PT1AxNl9SRVRVUk5FTlRSWQkqcmV0OworCWludAkJaSxtYXg7CisKKwl3aGlsZSAoZGxsKSB7CisJCWlmICh4Y3MgPT0gZGxsLT5mdW5oYW5kbGUpIHsKKwkJCWZ1biA9IChTTk9PUDE2X0ZVTiopZW50cnk7CisJCQlvcmRpbmFsID0gZnVuLWRsbC0+ZnVuczsKKwkJCWJyZWFrOworCQl9CisJCWRsbD1kbGwtPm5leHQ7CisJfQorCWlmICghZGxsKSB7CisJCUZJWE1FKHNub29wLCJlbnRyeXBvaW50IDB4JTA4bHggbm90IGZvdW5kXG4iLGVudHJ5KTsKKwkJcmV0dXJuOyAvKiBvb3BzICovCisJfQorCS8qIGd1ZXNzIGNkZWNsIC4uLiAqLworCWlmIChmdW4tPm5yb2ZhcmdzPDApIHsKKwkJLyogVHlwaWNhbCBjZGVjbCByZXR1cm4gZnJhbWUgaXM6CisJCSAqIAlhZGQgZXNwLCB4eHh4eHh4eCAKKwkJICogd2hpY2ggaGFzIChmb3IgeHh4eHh4eHggdXAgdG8gMjU1IHRoZSBvcGNvZGUgIjgzIEM0IHh4Ii4KKwkJICovCisJCUxQQllURQlyZXRlaXAgPSAoTFBCWVRFKVBUUl9TRUdfVE9fTElOKENBTExFUjFSRUYpOworCisJCWlmICgocmV0ZWlwWzBdPT0weDgzKSYmKHJldGVpcFsxXT09MHhjNCkpCisJCQlmdW4tPm5yb2ZhcmdzPXJldGVpcFsyXS8yOworCX0KKworCXdoaWxlICgqcmV0cykgeworCQlmb3IgKGk9MDtpPHNpemVvZigoKnJldHMpLT5lbnRyeSkvc2l6ZW9mKCgqcmV0cyktPmVudHJ5WzBdKTtpKyspCisJCQlpZiAoISgqcmV0cyktPmVudHJ5W2ldLm9yaWdyZXR1cm4pCisJCQkJYnJlYWs7CisJCWlmIChpIT1zaXplb2YoKCpyZXRzKS0+ZW50cnkpL3NpemVvZigoKnJldHMpLT5lbnRyeVswXSkpCisJCQlicmVhazsKKwkJcmV0cyA9ICYoKCpyZXRzKS0+bmV4dCk7CisJfQorCWlmICghKnJldHMpIHsKKwkJSEFORExFMTYJaGFuZCA9IEdsb2JhbEhhbmRsZVRvU2VsKEdMT0JBTF9BbGxvYyhHTUVNX1pFUk9JTklULDY1NTM1LDAsVFJVRSxGQUxTRSxGQUxTRSkpOworCQkqcmV0cyA9IEdsb2JhbExvY2sxNihoYW5kKTsKKwkJbWVtc2V0KCpyZXRzLDAsNjU1MzUpOworCQkoKnJldHMpLT5yZXRoYW5kbGUgPSBoYW5kOworCQlpID0gMDsJLyogZW50cnkgMCBpcyBmcmVlICovCisJfQorCXJldCA9ICYoKCpyZXRzKS0+ZW50cnlbaV0pOworCXJldC0+bGNhbGwgCT0gMHg5YTsKKwlyZXQtPnNucgk9IE1BS0VMT05HKHNpemVvZihTTk9PUDE2X1JFTEFZKSx4c25yKTsKKwlyZXQtPm9yaWdyZXR1cm4JPSAoRkFSUFJPQzE2KUNBTExFUjFSRUY7CisJQ0FMTEVSMVJFRgk9IE1BS0VMT05HKChjaGFyKikmKHJldC0+bGNhbGwpLShjaGFyKikoKCpyZXRzKS0+ZW50cnkpLCgqcmV0cyktPnJldGhhbmRsZSk7CisJcmV0LT5kbGwJPSBkbGw7CisJcmV0LT5hcmdzCT0gTlVMTDsKKwlyZXQtPm9yZGluYWwJPSBvcmRpbmFsOworCXJldC0+b3JpZ1NQCT0gU1BfcmVnKGNvbnRleHQpOworCisJSVBfcmVnKGNvbnRleHQpPSBMT1dPUkQoZnVuLT5vcmlnZnVuKTsKKwlDU19yZWcoY29udGV4dCk9IEhJV09SRChmdW4tPm9yaWdmdW4pOworCisJRFBSSU5URigiQ2FsbCAlcy4lbGQ6ICVzKCIsZGxsLT5uYW1lLG9yZGluYWwsZnVuLT5uYW1lKTsKKwlpZiAoZnVuLT5ucm9mYXJncz4wKSB7CisJCW1heCA9IGZ1bi0+bnJvZmFyZ3M7IGlmIChtYXg+MTYpIG1heD0xNjsKKwkJZm9yIChpPW1heDtpLS07KQorCQkJRFBSSU5URigiJTA0eCVzIiwqKFdPUkQqKShQVFJfU0VHX09GRl9UT19MSU4oU1NfcmVnKGNvbnRleHQpLFNQX3JlZyhjb250ZXh0KSkrOCtzaXplb2YoV09SRCkqaSksaT8iLCI6IiIpOworCQlpZiAobWF4IT1mdW4tPm5yb2ZhcmdzKQorCQkJRFBSSU5URigiIC4uLiIpOworCX0gZWxzZSBpZiAoZnVuLT5ucm9mYXJnczwwKSB7CisJCURQUklOVEYoIjx1bmtub3duLCBjaGVjayByZXR1cm4+Iik7CisJCXJldC0+YXJncyA9IEhlYXBBbGxvYyhTeXN0ZW1IZWFwLDAsMTYqc2l6ZW9mKFdPUkQpKTsKKwkJbWVtY3B5KHJldC0+YXJncywoTFBCWVRFKShQVFJfU0VHX09GRl9UT19MSU4oU1NfcmVnKGNvbnRleHQpLFNQX3JlZyhjb250ZXh0KSkrOCksc2l6ZW9mKFdPUkQpKjE2KTsKKwl9CisJRFBSSU5URigiKSByZXQ9JTA0eDolMDR4XG4iLEhJV09SRCgoRFdPUkQpKCpyZXRzKS0+ZW50cnlbaV0ub3JpZ3JldHVybiksTE9XT1JEKChEV09SRCkoKnJldHMpLT5lbnRyeVtpXS5vcmlncmV0dXJuKSk7Cit9CisKK3ZvaWQgV0lOQVBJIFNOT09QMTZfUmV0dXJuKENPTlRFWFQgKmNvbnRleHQpIHsKKwlTTk9PUDE2X1JFVFVSTkVOVFJZCSpyZXQgPSAoU05PT1AxNl9SRVRVUk5FTlRSWSopKFBUUl9TRUdfT0ZGX1RPX0xJTihDU19yZWcoY29udGV4dCksSVBfcmVnKGNvbnRleHQpKS01KTsKKworCS8qIFdlIGhhdmVuJ3QgZm91bmQgb3V0IHRoZSBucm9mYXJncyB5ZXQuIElmIHdlIGNhbGxlZCBhIGNkZWNsCisJICogZnVuY3Rpb24gaXQgaXMgdG9vIGxhdGUgYW55d2F5IGFuZCB3ZSBjYW4ganVzdCBzZXQgJzAnICh3aGljaCAKKwkgKiB3aWxsIGJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZyBhbmQgY3VycmVudCBTUAorCSAqIElmIHBhc2NhbCAtPiBldmVyeXRoaW5nIG9rLgorCSAqLworCWlmIChyZXQtPmRsbC0+ZnVuc1tyZXQtPm9yZGluYWxdLm5yb2ZhcmdzPDApCisJCXJldC0+ZGxsLT5mdW5zW3JldC0+b3JkaW5hbF0ubnJvZmFyZ3M9KFNQX3JlZyhjb250ZXh0KS1yZXQtPm9yaWdTUC00KS8yOworCUlQX3JlZyhjb250ZXh0KSA9IExPV09SRChyZXQtPm9yaWdyZXR1cm4pOworCUNTX3JlZyhjb250ZXh0KSA9IEhJV09SRChyZXQtPm9yaWdyZXR1cm4pOworCWlmIChyZXQtPmFyZ3MpIHsKKwkJaW50CWksbWF4OworCisJCURQUklOVEYoIlJldCAgJXMuJWxkOiAlcygiLHJldC0+ZGxsLT5uYW1lLHJldC0+b3JkaW5hbCxyZXQtPmRsbC0+ZnVuc1tyZXQtPm9yZGluYWxdLm5hbWUpOworCQltYXggPSByZXQtPmRsbC0+ZnVuc1tyZXQtPm9yZGluYWxdLm5yb2ZhcmdzOworCQlpZiAobWF4PjE2KSBtYXg9MTY7CisKKwkJZm9yIChpPW1heDtpLS07KQorCQkJRFBSSU5URigiJTA0eCVzIixyZXQtPmFyZ3NbaV0saT8iLCI6IiIpOworCQlEUFJJTlRGKCIpIHJldHZhbCA9ICUwNHg6JTA0eCByZXQ9JTA0eDolMDR4XG4iLAorCQkJRFhfcmVnKGNvbnRleHQpLEFYX3JlZyhjb250ZXh0KSxISVdPUkQocmV0LT5vcmlncmV0dXJuKSxMT1dPUkQocmV0LT5vcmlncmV0dXJuKQorCQkpOworCQlIZWFwRnJlZShTeXN0ZW1IZWFwLDAscmV0LT5hcmdzKTsKKwkJcmV0LT5hcmdzID0gTlVMTDsKKwl9IGVsc2UKKwkJRFBSSU5URigiUmV0ICAlcy4lbGQ6ICVzKCkgcmV0dmFsID0gJTA0eDolMDR4IHJldD0lMDR4OiUwNHhcbiIsCisJCQlyZXQtPmRsbC0+bmFtZSxyZXQtPm9yZGluYWwscmV0LT5kbGwtPmZ1bnNbcmV0LT5vcmRpbmFsXS5uYW1lLAorCQkJRFhfcmVnKGNvbnRleHQpLEFYX3JlZyhjb250ZXh0KSxISVdPUkQocmV0LT5vcmlncmV0dXJuKSxMT1dPUkQocmV0LT5vcmlncmV0dXJuKQorCQkpOworCXJldC0+b3JpZ3JldHVybiA9IE5VTEw7IC8qIG1hcmsgYXMgZW1wdHkgKi8KK30KKyNlbHNlCS8qICFfX2kzODZfXyAqLwordm9pZCBTTk9PUDE2X1JlZ2lzdGVyRExMKE5FX01PRFVMRSAqcE1vZHVsZSxMUENTVFIgbmFtZSkgeworCUZJWE1FKHNub29wLCJzbm9vcGluZyB3b3JrcyBvbmx5IG9uIGkzODYgZm9yIG5vdy5cbiIpOworCXJldHVybjsKK30KKworRkFSUFJPQzE2IFNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNihITU9EVUxFMTYgaG1vZCxEV09SRCBvcmRpbmFsLEZBUlBST0MxNiBvcmlnZnVuKSB7CisJcmV0dXJuIG9yaWdmdW47Cit9CisjZW5kaWYJLyogIV9faTM4Nl9fICovCmRpZmYgLS1naXQgYS9pZjE2MzIvdGh1bmsuYyBiL2lmMTYzMi90aHVuay5jCmluZGV4IGZlYzNiOWUuLjAxNzk0YWIgMTAwNjQ0Ci0tLSBhL2lmMTYzMi90aHVuay5jCisrKyBiL2lmMTYzMi90aHVuay5jCkBAIC0xNTIsNiArMTUyLDcgQEAKICAgICAodm9pZCAqKUNhbGxUbzE2X3dvcmRfd3csICAgICAgICAgICAgICAvKiBDYWxsQm9vdEFwcFByb2MgKi8KICAgICAodm9pZCAqKUNhbGxUbzE2X3dvcmRfd3d3LCAgICAgICAgICAgICAvKiBDYWxsTG9hZEFwcFNlZ1Byb2MgKi8KICAgICAodm9pZCAqKUNhbGxUbzE2X3dvcmRfLCAgICAgICAgICAgICAgICAvKiBDYWxsU3lzdGVtVGltZXJQcm9jICovCisgICAgKHZvaWQgKilDYWxsVG8xNl93b3JkX3d3dywgICAgICAgICAgICAgLyogQ2FsbFJlc291cmNlSGFuZGxlclByb2MgKi8KICAgICAodm9pZCAqKUNhbGxUbzE2X2xvbmdfbCwgICAgICAgICAgICAgICAvKiBDYWxsV09XQ2FsbGJhY2tQcm9jICovCiAgICAgVEhVTktfV09XQ2FsbGJhY2sxNkV4LCAgICAgICAgICAgICAgICAgLyogQ2FsbFdPV0NhbGxiYWNrMTZFeCAqLwogICAgICh2b2lkICopQ2FsbFRvMTZfbG9uZ19sLCAgICAgICAgICAgICAgIC8qIENhbGxBU1BJUG9zdFByb2MgKi8KQEAgLTU2Niw1NSArNTY3LDYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBUSFVOS19TZXRSZXNvdXJjZUhhbmRsZXIJKEtFUk5FTC42NykKLSAqLwotRkFSUFJPQzE2IFdJTkFQSSBUSFVOS19TZXRSZXNvdXJjZUhhbmRsZXIoIEhNT0RVTEUxNiBoTW9kdWxlLCBTRUdQVFIgdHlwZUlkLCBGQVJQUk9DMTYgcHJvYyApCi17Ci0gICAgc3RhdGljIEZBUlBST0MxNiBkZWZESUJJY29uTG9hZGVyMTYgPSBOVUxMOwotICAgIHN0YXRpYyBGQVJQUk9DMTYgZGVmRElCQ3Vyc29yTG9hZGVyMTYgPSBOVUxMOwotICAgIHN0YXRpYyBGQVJQUk9DMTYgZGVmUmVzb3VyY2VMb2FkZXIxNiA9IE5VTEw7Ci0KLSAgICBUSFVOSyAqdGh1bmsgPSBOVUxMOwotCi0gICAgaWYoICFkZWZSZXNvdXJjZUxvYWRlcjE2ICkKLSAgICB7Ci0JSE1PRFVMRTE2IGhVc2VyID0gR2V0TW9kdWxlSGFuZGxlMTYoIlVTRVIiKTsKLQlkZWZESUJJY29uTG9hZGVyMTYgPSBORV9HZXRFbnRyeVBvaW50KCBoVXNlciwgMzU3ICk7Ci0JZGVmRElCQ3Vyc29yTG9hZGVyMTYgPSBORV9HZXRFbnRyeVBvaW50KCBoVXNlciwgMzU2ICk7Ci0JZGVmUmVzb3VyY2VMb2FkZXIxNiA9IE1PRFVMRV9HZXRXbmRQcm9jRW50cnkxNiggIkRlZlJlc291cmNlSGFuZGxlciIgKTsKLSAgICB9Ci0KLSAgICBpZiggcHJvYyA9PSBkZWZSZXNvdXJjZUxvYWRlcjE2ICkKLQl0aHVuayA9IChUSFVOSyopJk5FX0RlZlJlc291cmNlSGFuZGxlcjsKLSAgICBlbHNlIGlmKCBwcm9jID09IGRlZkRJQkljb25Mb2FkZXIxNiApCi0JdGh1bmsgPSAoVEhVTksqKSZMb2FkRElCSWNvbkhhbmRsZXI7Ci0gICAgZWxzZSBpZiggcHJvYyA9PSBkZWZESUJDdXJzb3JMb2FkZXIxNiApCi0JdGh1bmsgPSAoVEhVTksqKSZMb2FkRElCQ3Vyc29ySGFuZGxlcjsKLSAgICBlbHNlCi0gICAgewotCXRodW5rID0gVEhVTktfQWxsb2MoIHByb2MsIChSRUxBWSlDYWxsVG8xNl93b3JkX3d3dyApOwotCWlmKCAhdGh1bmsgKSByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdGh1bmsgPSAoVEhVTksqKVNldFJlc291cmNlSGFuZGxlciggaE1vZHVsZSwgdHlwZUlkLCAoRkFSUFJPQzE2KXRodW5rICk7Ci0KLSAgICBpZiggdGh1bmsgPT0gKFRIVU5LKikmTkVfRGVmUmVzb3VyY2VIYW5kbGVyICkKLQlyZXR1cm4gZGVmUmVzb3VyY2VMb2FkZXIxNjsKLSAgICBpZiggdGh1bmsgPT0gKFRIVU5LKikmTG9hZERJQkljb25IYW5kbGVyICkKLQlyZXR1cm4gZGVmRElCSWNvbkxvYWRlcjE2OwotICAgIGlmKCB0aHVuayA9PSAoVEhVTksqKSZMb2FkRElCQ3Vyc29ySGFuZGxlciApCi0JcmV0dXJuIGRlZkRJQkN1cnNvckxvYWRlcjE2OwotCi0gICAgaWYoIHRodW5rICkKLSAgICB7Ci0JcHJvYyA9IHRodW5rLT5wcm9jOwotCVRIVU5LX0ZyZWUoIHRodW5rICk7Ci0JcmV0dXJuIHByb2M7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBUSFVOS19XT1dDYWxsYmFjazE2RXgJKFdPVzMyLjMpKEtFUk5FTDMyLjU1KQogICogR2VuZXJpYyB0aHVua2luZyByb3V0aW5lIHRvIGNhbGwgMTYgYml0IGZ1bmN0aW9ucyBmcm9tIDMyYml0IGNvZGUuCiAgKiAKZGlmZiAtLWdpdCBhL2lmMTYzMi91c2VyLnNwZWMgYi9pZjE2MzIvdXNlci5zcGVjCmluZGV4IDgzZTc2MDMuLjI5OTk3N2IgMTAwNjQ0Ci0tLSBhL2lmMTYzMi91c2VyLnNwZWMKKysrIGIvaWYxNjMyL3VzZXIuc3BlYwpAQCAtNDgsNyArNDgsNyBAQAogNDQgIHBhc2NhbDE2IE9wZW5JY29uKHdvcmQpIE9wZW5JY29uMTYKIDQ1ICBwYXNjYWwxNiBCcmluZ1dpbmRvd1RvVG9wKHdvcmQpIEJyaW5nV2luZG93VG9Ub3AxNgogNDYgIHBhc2NhbDE2IEdldFBhcmVudCh3b3JkKSBHZXRQYXJlbnQxNgotNDcgIHBhc2NhbDE2IElzV2luZG93KHdvcmQpIElzV2luZG93MTYKKzQ3ICByZWdpc3RlciBJc1dpbmRvdyh3b3JkKSBXSU4xNl9Jc1dpbmRvdzE2CiA0OCAgcGFzY2FsMTYgSXNDaGlsZCh3b3JkIHdvcmQpIElzQ2hpbGQxNgogNDkgIHBhc2NhbDE2IElzV2luZG93VmlzaWJsZSh3b3JkKSBJc1dpbmRvd1Zpc2libGUxNgogNTAgIHBhc2NhbDE2IEZpbmRXaW5kb3coc2Vnc3RyIHN0cikgRmluZFdpbmRvdzE2CmRpZmYgLS1naXQgYS9pZjE2MzIvd2luZXBzLnNwZWMgYi9pZjE2MzIvd2luZXBzLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAyYWNhMgotLS0gL2Rldi9udWxsCisrKyBiL2lmMTYzMi93aW5lcHMuc3BlYwpAQCAtMCwwICsxLDcgQEAKK25hbWUgICAgd2luZXBzCit0eXBlICAgIHdpbjE2CisKKzEzIHBhc2NhbDE2IERldmljZU1vZGUod29yZCB3b3JkIHN0ciBzdHIpIFBTRFJWX0RldmljZU1vZGUxNgorOTAgcGFzY2FsMTYgRXh0RGV2aWNlTW9kZSh3b3JkIHdvcmQgcHRyIHN0ciBzdHIgcHRyIHN0ciB3b3JkKSBQU0RSVl9FeHREZXZpY2VNb2RlMTYKKzkxIHBhc2NhbCBEZXZpY2VDYXBhYmlsaXRpZXMoc3RyIHN0ciB3b3JkIHB0ciBwdHIpIFBTRFJWX0RldmljZUNhcGFiaWxpdGllczE2CisKZGlmZiAtLWdpdCBhL2lmMTYzMi93cHJvY3Muc3BlYyBiL2lmMTYzMi93cHJvY3Muc3BlYwppbmRleCA3OTkzYWVhLi45NjViNmJiIDEwMDY0NAotLS0gYS9pZjE2MzIvd3Byb2NzLnNwZWMKKysrIGIvaWYxNjMyL3dwcm9jcy5zcGVjCkBAIC0xNCw2ICsxNCw4IEBACiAyOSBwYXNjYWwgRGVmUmVzb3VyY2VIYW5kbGVyKHdvcmQgd29yZCB3b3JkKSBORV9EZWZSZXNvdXJjZUhhbmRsZXIKIDMwIHBhc2NhbCBGb3JtYXRDaGFyRGxnUHJvYyh3b3JkIHdvcmQgd29yZCBsb25nKSBGb3JtYXRDaGFyRGxnUHJvYzE2CiAzMSBwYXNjYWwxNiBBU1BJX0RPU19mdW5jKGxvbmcpIEFTUElfRE9TX2Z1bmMKKzMyIHBhc2NhbCBMb2FkRElCSWNvbkhhbmRsZXIod29yZCB3b3JkIHdvcmQpIExvYWRESUJJY29uSGFuZGxlcgorMzMgcGFzY2FsIExvYWRESUJDdXJzb3JIYW5kbGVyKHdvcmQgd29yZCB3b3JkKSBMb2FkRElCQ3Vyc29ySGFuZGxlcgogIAogIyBJbnRlcnJ1cHQgdmVjdG9ycyAwLTI1NSBhcmUgb3JkaW5hbHMgMTAwLTM1NQogIyBUaGUgJ3dvcmQnIHBhcmFtZXRlciBhcmUgdGhlIGZsYWdzIHB1c2hlZCBvbiB0aGUgc3RhY2sgYnkgdGhlIGludGVycnVwdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9iaXRtYXAuaCBiL2luY2x1ZGUvYml0bWFwLmgKaW5kZXggMDQyYzRhNy4uYTllOGMzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2JpdG1hcC5oCkBAIC0zNCw2ICszNCw4IEBACiAgICAgRElCU0VDVElPTiAqZGliU2VjdGlvbjsKICAgICBSR0JRVUFEICAgICpjb2xvck1hcDsKICAgICBpbnQgICAgICAgICBuQ29sb3JNYXA7CisgICAgLyogRElCU0VDVElPTiBtYXBwaW5nIHN0YXR1cyAqLworICAgIGVudW0geyBESUJfTm9IYW5kbGVyLCBESUJfSW5TeW5jLCBESUJfQXBwTW9kLCBESUJfR2RpTW9kIH0gc3RhdHVzOwogCiB9IEJJVE1BUE9CSjsKIApAQCAtNTEsNyArNTMsNyBAQAogeyBcCiAgICAgaW50IHdpZHRoX2J5dGVzID0gRElCX0dldFhJbWFnZVdpZHRoQnl0ZXMoICh3aWR0aCksIChicHApICk7IFwKICAgICAoaW1hZ2UpID0gVFNYQ3JlYXRlSW1hZ2UoZGlzcGxheSwgRGVmYXVsdFZpc3VhbE9mU2NyZWVuKHNjcmVlbiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChicHApLCBaUGl4bWFwLCAwLCB4bWFsbG9jKCAoaGVpZ2h0KSp3aWR0aF9ieXRlcyApLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChicHApLCBaUGl4bWFwLCAwLCB4Y2FsbG9jKCAoaGVpZ2h0KSp3aWR0aF9ieXRlcyApLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aWR0aCksIChoZWlnaHQpLCAzMiwgd2lkdGhfYnl0ZXMgKTsgXAogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NhbGxiYWNrLmggYi9pbmNsdWRlL2NhbGxiYWNrLmgKaW5kZXggYTg2NjhhMy4uZTAzZDg2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jYWxsYmFjay5oCisrKyBiL2luY2x1ZGUvY2FsbGJhY2suaApAQCAtMzcsNiArMzcsNyBAQAogICAgIFZPSUQgKENBTExCQUNLICpDYWxsQm9vdEFwcFByb2MpKCBGQVJQUk9DMTYsIEhBTkRMRTE2LCBIRklMRTE2ICk7CiAgICAgV09SRCAoQ0FMTEJBQ0sgKkNhbGxMb2FkQXBwU2VnUHJvYykoIEZBUlBST0MxNiwgSEFORExFMTYsIEhGSUxFMTYsIFdPUkQgKTsKICAgICBWT0lEIChDQUxMQkFDSyAqQ2FsbFN5c3RlbVRpbWVyUHJvYykoIEZBUlBST0MxNiApOworICAgIEhHTE9CQUwxNiAoQ0FMTEJBQ0sgKkNhbGxSZXNvdXJjZUhhbmRsZXJQcm9jKSggRkFSUFJPQzE2LCBIR0xPQkFMMTYsIEhNT0RVTEUxNiwgSFJTUkMxNiApOwogICAgIERXT1JEIChDQUxMQkFDSyAqQ2FsbFdPV0NhbGxiYWNrUHJvYykoIEZBUlBST0MxNiwgRFdPUkQgKTsKICAgICBCT09MMzIgKENBTExCQUNLICpDYWxsV09XQ2FsbGJhY2sxNkV4KSggRkFSUFJPQzE2LCBEV09SRCwgRFdPUkQsIExQVk9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbWN0cmwuaCBiL2luY2x1ZGUvY29tbWN0cmwuaAppbmRleCBiYTk0YmZhLi41MjNjY2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1jdHJsLmgKKysrIGIvaW5jbHVkZS9jb21tY3RybC5oCkBAIC04NSw2ICs4NSwxMiBAQAogI2RlZmluZSBMUFNUUl9URVhUQ0FMTEJBQ0sgV0lORUxJQl9OQU1FX0FXKExQU1RSX1RFWFRDQUxMQkFDSykKIAogCisvKiBvd25lciBkcmF3biB0eXBlcyAqLworI2RlZmluZSBPRFRfSEVBREVSICAgICAgMTAwCisjZGVmaW5lIE9EVF9UQUIgICAgICAgICAxMDEKKyNkZWZpbmUgT0RUX0xJU1RWSUVXICAgIDEwMgorCisKIC8qIFN0YXR1c1dpbmRvdyAqLwogCiAjZGVmaW5lIFNUQVRVU0NMQVNTTkFNRTE2ICAgICAibXNjdGxzX3N0YXR1c2JhciIKQEAgLTUwNiw0NiArNTEyLDQ3IEBACiAKIC8qIFRvb2xiYXIgKi8KIAotI2RlZmluZSBUT09MQkFSQ0xBU1NOQU1FMTYgICAgICAgICJUb29sYmFyV2luZG93IgotI2RlZmluZSBUT09MQkFSQ0xBU1NOQU1FMzJXICAgICAgIEwiVG9vbGJhcldpbmRvdzMyIgotI2RlZmluZSBUT09MQkFSQ0xBU1NOQU1FMzJBICAgICAgICJUb29sYmFyV2luZG93MzIiCisjZGVmaW5lIFRPT0xCQVJDTEFTU05BTUUxNiAgICAgICAgIlRvb2xiYXJXaW5kb3ciIAorI2RlZmluZSBUT09MQkFSQ0xBU1NOQU1FMzJXICAgICAgIEwiVG9vbGJhcldpbmRvdzMyIiAKKyNkZWZpbmUgVE9PTEJBUkNMQVNTTkFNRTMyQSAgICAgICAiVG9vbGJhcldpbmRvdzMyIiAKICNkZWZpbmUgVE9PTEJBUkNMQVNTTkFNRSBXSU5FTElCX05BTUVfQVcoVE9PTEJBUkNMQVNTTkFNRSkKIAotCi0jZGVmaW5lIENNQl9NQVNLRUQgICAgICAgICAgICAgIDB4MDIKLQotI2RlZmluZSBUQlNUQVRFX0NIRUNLRUQgICAgICAgICAweDAxCi0jZGVmaW5lIFRCU1RBVEVfUFJFU1NFRCAgICAgICAgIDB4MDIKLSNkZWZpbmUgVEJTVEFURV9FTkFCTEVEICAgICAgICAgMHgwNAotI2RlZmluZSBUQlNUQVRFX0hJRERFTiAgICAgICAgICAweDA4Ci0jZGVmaW5lIFRCU1RBVEVfSU5ERVRFUk1JTkFURSAgIDB4MTAKLSNkZWZpbmUgVEJTVEFURV9XUkFQICAgICAgICAgICAgMHgyMAotI2RlZmluZSBUQlNUQVRFX0VMTElQU0VTICAgICAgICAweDQwCi0jZGVmaW5lIFRCU1RBVEVfTUFSS0VEICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBUQlNUWUxFX0JVVFRPTiAgICAgICAgICAweDAwCi0jZGVmaW5lIFRCU1RZTEVfU0VQICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgVEJTVFlMRV9DSEVDSyAgICAgICAgICAgMHgwMgotI2RlZmluZSBUQlNUWUxFX0dST1VQICAgICAgICAgICAweDA0Ci0jZGVmaW5lIFRCU1RZTEVfQ0hFQ0tHUk9VUCAgICAgIChUQlNUWUxFX0dST1VQIHwgVEJTVFlMRV9DSEVDSykKLSNkZWZpbmUgVEJTVFlMRV9EUk9QRE9XTiAgICAgICAgMHgwOAogIAotI2RlZmluZSBUQlNUWUxFX1RPT0xUSVBTICAgICAgICAweDAxMDAKLSNkZWZpbmUgVEJTVFlMRV9XUkFQQUJMRSAgICAgICAgMHgwMjAwCi0jZGVmaW5lIFRCU1RZTEVfQUxURFJBRyAgICAgICAgIDB4MDQwMAotI2RlZmluZSBUQlNUWUxFX0ZMQVQgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgVEJTVFlMRV9MSVNUICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIFRCU1RZTEVfQ1VTVE9NRVJBU0UgICAgIDB4MjAwMAotCisjZGVmaW5lIENNQl9NQVNLRUQgICAgICAgICAgICAgIDB4MDIgCisgCisjZGVmaW5lIFRCU1RBVEVfQ0hFQ0tFRCAgICAgICAgIDB4MDEgCisjZGVmaW5lIFRCU1RBVEVfUFJFU1NFRCAgICAgICAgIDB4MDIgCisjZGVmaW5lIFRCU1RBVEVfRU5BQkxFRCAgICAgICAgIDB4MDQgCisjZGVmaW5lIFRCU1RBVEVfSElEREVOICAgICAgICAgIDB4MDggCisjZGVmaW5lIFRCU1RBVEVfSU5ERVRFUk1JTkFURSAgIDB4MTAgCisjZGVmaW5lIFRCU1RBVEVfV1JBUCAgICAgICAgICAgIDB4MjAgCisjZGVmaW5lIFRCU1RBVEVfRUxMSVBTRVMgICAgICAgIDB4NDAKKyNkZWZpbmUgVEJTVEFURV9NQVJLRUQgICAgICAgICAgMHg4MCAKKyAKKyAKKyNkZWZpbmUgVEJTVFlMRV9CVVRUT04gICAgICAgICAgMHgwMCAKKyNkZWZpbmUgVEJTVFlMRV9TRVAgICAgICAgICAgICAgMHgwMSAKKyNkZWZpbmUgVEJTVFlMRV9DSEVDSyAgICAgICAgICAgMHgwMiAKKyNkZWZpbmUgVEJTVFlMRV9HUk9VUCAgICAgICAgICAgMHgwNCAKKyNkZWZpbmUgVEJTVFlMRV9DSEVDS0dST1VQICAgICAgKFRCU1RZTEVfR1JPVVAgfCBUQlNUWUxFX0NIRUNLKSAKKyNkZWZpbmUgVEJTVFlMRV9EUk9QRE9XTiAgICAgICAgMHgwOCAKKyAKKyNkZWZpbmUgVEJTVFlMRV9UT09MVElQUyAgICAgICAgMHgwMTAwIAorI2RlZmluZSBUQlNUWUxFX1dSQVBBQkxFICAgICAgICAweDAyMDAgCisjZGVmaW5lIFRCU1RZTEVfQUxURFJBRyAgICAgICAgIDB4MDQwMCAKKyNkZWZpbmUgVEJTVFlMRV9GTEFUICAgICAgICAgICAgMHgwODAwIAorI2RlZmluZSBUQlNUWUxFX0xJU1QgICAgICAgICAgICAweDEwMDAgCisjZGVmaW5lIFRCU1RZTEVfQ1VTVE9NRVJBU0UgICAgIDB4MjAwMCAKKyAKICNkZWZpbmUgVEJfRU5BQkxFQlVUVE9OICAgICAgICAgIChXTV9VU0VSKzEpCiAjZGVmaW5lIFRCX0NIRUNLQlVUVE9OICAgICAgICAgICAoV01fVVNFUisyKQogI2RlZmluZSBUQl9QUkVTU0JVVFRPTiAgICAgICAgICAgKFdNX1VTRVIrMykKICNkZWZpbmUgVEJfSElERUJVVFRPTiAgICAgICAgICAgIChXTV9VU0VSKzQpCiAjZGVmaW5lIFRCX0lOREVURVJNSU5BVEUgICAgICAgICAoV01fVVNFUis1KQotI2RlZmluZSBUQl9JU0JVVFRPTkVOQUJMRUQgICAgICAgKFdNX1VTRVIrOSkKLSNkZWZpbmUgVEJfSVNCVVRUT05DSEVDS0VEICAgICAgIChXTV9VU0VSKzEwKQotI2RlZmluZSBUQl9JU0JVVFRPTlBSRVNTRUQgICAgICAgKFdNX1VTRVIrMTEpCi0jZGVmaW5lIFRCX0lTQlVUVE9OSElEREVOICAgICAgICAoV01fVVNFUisxMikKKyNkZWZpbmUgVEJfSVNCVVRUT05FTkFCTEVEICAgICAgIChXTV9VU0VSKzkpIAorI2RlZmluZSBUQl9JU0JVVFRPTkNIRUNLRUQgICAgICAgKFdNX1VTRVIrMTApIAorI2RlZmluZSBUQl9JU0JVVFRPTlBSRVNTRUQgICAgICAgKFdNX1VTRVIrMTEpIAorI2RlZmluZSBUQl9JU0JVVFRPTkhJRERFTiAgICAgICAgKFdNX1VTRVIrMTIpIAogI2RlZmluZSBUQl9JU0JVVFRPTklOREVURVJNSU5BVEUgKFdNX1VTRVIrMTMpCiAjZGVmaW5lIFRCX0lTQlVUVE9OSElHSExJR0hURUQgICAoV01fVVNFUisxNCkKICNkZWZpbmUgVEJfU0VUU1RBVEUgICAgICAgICAgICAgIChXTV9VU0VSKzE3KQpAQCAtNTY2LDggKzU3Myw4IEBACiAjZGVmaW5lIFRCX1NBVkVSRVNUT1JFMzJXICAgICAgICAoV01fVVNFUis3NikKICNkZWZpbmUgVEJfU0FWRVJFU1RPUkUgV0lORUxJQl9OQU1FX0FXKFRCX1NBVkVSRVNUT1JFKQogI2RlZmluZSBUQl9DVVNUT01JWkUgICAgICAgICAgICAgKFdNX1VTRVIrMjcpCi0jZGVmaW5lIFRCX0FERFNUUklORzMyQSAgICAgICAgICAoV01fVVNFUisyOCkKLSNkZWZpbmUgVEJfQUREU1RSSU5HMzJXICAgICAgICAgIChXTV9VU0VSKzc3KQorI2RlZmluZSBUQl9BRERTVFJJTkczMkEgICAgICAgICAgKFdNX1VTRVIrMjgpIAorI2RlZmluZSBUQl9BRERTVFJJTkczMlcgICAgICAgICAgKFdNX1VTRVIrNzcpIAogI2RlZmluZSBUQl9BRERTVFJJTkcgV0lORUxJQl9OQU1FX0FXKFRCX0FERFNUUklORykKICNkZWZpbmUgVEJfR0VUSVRFTVJFQ1QgICAgICAgICAgIChXTV9VU0VSKzI5KQogI2RlZmluZSBUQl9CVVRUT05TVFJVQ1RTSVpFICAgICAgKFdNX1VTRVIrMzApCkBAIC02MDIsMTAgKzYwOSwzMiBAQAogI2RlZmluZSBUQl9TRVRCVVRUT05XSURUSCAgICAgICAgKFdNX1VTRVIrNTkpCiAjZGVmaW5lIFRCX1NFVE1BWFRFWFRST1dTICAgICAgICAoV01fVVNFUis2MCkKICNkZWZpbmUgVEJfR0VUVEVYVFJPV1MgICAgICAgICAgIChXTV9VU0VSKzYxKQotCisjZGVmaW5lIFRCX0dFVE9CSkVDVCAgICAgICAgICAgICAoV01fVVNFUis2MikKKyNkZWZpbmUgVEJfU0VURFJBV1RFWFRGTEFHUyAgICAgIChXTV9VU0VSKzcwKQorI2RlZmluZSBUQl9HRVRIT1RJVEVNICAgICAgICAgICAgKFdNX1VTRVIrNzEpCisjZGVmaW5lIFRCX1NFVEhPVElURU0gICAgICAgICAgICAoV01fVVNFUis3MikKKyNkZWZpbmUgVEJfU0VUQU5DSE9SSElHSExJR0hUICAgIChXTV9VU0VSKzczKQorI2RlZmluZSBUQl9HRVRBTkNIT1JISUdITElHSFQgICAgKFdNX1VTRVIrNzQpCiAjZGVmaW5lIFRCX01BUEFDQ0VMRVJBVE9SMzJBICAgICAoV01fVVNFUis3OCkKICNkZWZpbmUgVEJfTUFQQUNDRUxFUkFUT1IzMlcgICAgIChXTV9VU0VSKzkwKQogI2RlZmluZSBUQl9NQVBBQ0NFTEVSQVRPUiBXSU5FTElCX05BTUVfQVcoVEJfTUFQQUNDRUxFUkFUT1IpCisjZGVmaW5lIFRCX0dFVElOU0VSVE1BUksgICAgICAgICAoV01fVVNFUis3OSkKKyNkZWZpbmUgVEJfU0VUSU5TRVJUTUFSSyAgICAgICAgIChXTV9VU0VSKzgwKQorI2RlZmluZSBUQl9JTlNFUlRNQVJLSElUVEVTVCAgICAgKFdNX1VTRVIrODEpCisjZGVmaW5lIFRCX01PVkVCVVRUT04gICAgICAgICAgICAoV01fVVNFUis4MikKKyNkZWZpbmUgVEJfR0VUTUFYU0laRSAgICAgICAgICAgIChXTV9VU0VSKzgzKQorI2RlZmluZSBUQl9TRVRFWFRFTkRFRFNUWUxFICAgICAgKFdNX1VTRVIrODQpCisjZGVmaW5lIFRCX0dFVEVYVEVOREVEU1RZTEUgICAgICAoV01fVVNFUis4NSkKKyNkZWZpbmUgVEJfR0VUUEFERElORyAgICAgICAgICAgIChXTV9VU0VSKzg2KQorI2RlZmluZSBUQl9TRVRQQURESU5HICAgICAgICAgICAgKFdNX1VTRVIrODcpCisjZGVmaW5lIFRCX1NFVElOU0VSVE1BUktDT0xPUiAgICAoV01fVVNFUis4OCkKKyNkZWZpbmUgVEJfR0VUSU5TRVJUTUFSS0NPTE9SICAgIChXTV9VU0VSKzg5KQorCisjZGVmaW5lIFRCX1NFVENPTE9SU0NIRU1FICAgICAgICBDQ01fU0VUQ09MT1JTQ0hFTUUKKyNkZWZpbmUgVEJfR0VUQ09MT1JTQ0hFTUUgICAgICAgIENDTV9HRVRDT0xPUlNDSEVNRQorCisjZGVmaW5lIFRCX1NFVFVOSUNPREVGT1JNQVQgICAgICBDQ01fU0VUVU5JQ09ERUZPUk1BVAorI2RlZmluZSBUQl9HRVRVTklDT0RFRk9STUFUICAgICAgQ0NNX0dFVFVOSUNPREVGT1JNQVQKIAogCiAvKiBUaGlzIGlzIGp1c3QgZm9yIG9sZCBDcmVhdGVUb29sYmFyLiAqLwpAQCAtNjQ2LDEyICs2NzUsMzMgQEAKICNkZWZpbmUgSElOU1RfQ09NTUNUUkwgICAgICAgICAoKEhJTlNUQU5DRTMyKS0xKQogCiAKLUhXTkQzMiBXSU5BUEkgQ3JlYXRlVG9vbGJhcihIV05EMzIsIERXT1JELCBVSU5UMzIsIElOVDMyLCBISU5TVEFOQ0UzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIsIExQQ09MRFRCQlVUVE9OLCBJTlQzMik7Ci1IV05EMzIgV0lOQVBJIENyZWF0ZVRvb2xiYXJFeChIV05EMzIsIERXT1JELCBVSU5UMzIsIElOVDMyLCBISU5TVEFOQ0UzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiwgTFBDVEJCVVRUT04sIElOVDMyLCBJTlQzMiwgSU5UMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiwgSU5UMzIsIFVJTlQzMik7Ci1IQklUTUFQMzIgV0lOQVBJIENyZWF0ZU1hcHBlZEJpdG1hcCAoSElOU1RBTkNFMzIsIElOVDMyLCBVSU5UMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDT0xPUk1BUCwgSU5UMzIpOwordHlwZWRlZiBzdHJ1Y3QgdGFnVEJTQVZFUEFSQU1TQSB7CisgICAgSEtFWSAgIGhrcjsKKyAgICBMUENTVFIgcHN6U3ViS2V5OworICAgIExQQ1NUUiBwc3pWYWx1ZU5hbWU7Cit9IFRCU0FWRVBBUkFNUzMyQSwgKkxQVEJTQVZFUEFSQU1TMzJBOworCit0eXBlZGVmIHN0cnVjdCB0YWdUQlNBVkVQQVJBTVNXIHsKKyAgICBIS0VZICAgaGtyOworICAgIExQQ1dTVFIgcHN6U3ViS2V5OworICAgIExQQ1dTVFIgcHN6VmFsdWVOYW1lOworfSBUQlNBVkVQQVJBTVNBMzJXLCAqTFBUQlNBVkVQQVJBTVNBMzJXOworCisjZGVmaW5lIFRCU0FWRVBBUkFNUyAgIFdJTkVMSUJfTkFNRUFXKFRCU0FWRVBBUkFNUykKKyNkZWZpbmUgTFBUQlNBVkVQQVJBTVMgV0lORUxJQl9OQU1FQVcoTFBUQlNBVkVQQVJBTVMpCisKKworSFdORDMyIFdJTkFQSQorQ3JlYXRlVG9vbGJhcihIV05EMzIsIERXT1JELCBVSU5UMzIsIElOVDMyLCBISU5TVEFOQ0UzMiwKKyAgICAgICAgICAgICAgVUlOVDMyLCBMUENPTERUQkJVVFRPTiwgSU5UMzIpOyAKKyAKK0hXTkQzMiBXSU5BUEkKK0NyZWF0ZVRvb2xiYXJFeChIV05EMzIsIERXT1JELCBVSU5UMzIsIElOVDMyLAorICAgICAgICAgICAgICAgIEhJTlNUQU5DRTMyLCBVSU5UMzIsIExQQ1RCQlVUVE9OLCAKKyAgICAgICAgICAgICAgICBJTlQzMiwgSU5UMzIsIElOVDMyLCBJTlQzMiwgSU5UMzIsIFVJTlQzMik7IAorCitIQklUTUFQMzIgV0lOQVBJCitDcmVhdGVNYXBwZWRCaXRtYXAgKEhJTlNUQU5DRTMyLCBJTlQzMiwgVUlOVDMyLCBMUENPTE9STUFQLCBJTlQzMik7IAorCiAKICNlbmRpZiAgLyogX19XSU5FX0NPTU1DVFJMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnLmguaW4gYi9pbmNsdWRlL2NvbmZpZy5oLmluCmluZGV4IGU1N2E3OGUuLjIxZTE4ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnLmguaW4KKysrIGIvaW5jbHVkZS9jb25maWcuaC5pbgpAQCAtODcsNiArODcsOSBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1c2xlZXAgZnVuY3Rpb24uICAqLwogI3VuZGVmIEhBVkVfVVNMRUVQCiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdmZzY2FuZiBmdW5jdGlvbi4gICovCisjdW5kZWYgSEFWRV9WRlNDQU5GCisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgd2FpdDQgZnVuY3Rpb24uICAqLwogI3VuZGVmIEhBVkVfV0FJVDQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZWJ1Zy5oIGIvaW5jbHVkZS9kZWJ1Zy5oCmluZGV4IGZmNGI1MDguLmFkNjVjNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGVidWcuaAorKysgYi9pbmNsdWRlL2RlYnVnLmgKQEAgLTM0LDk0ICszNCw5NiBAQAogI2RlZmluZSBkYmNoX2RsbCAyNgogI2RlZmluZSBkYmNoX2Rvc2ZzIDI3CiAjZGVmaW5lIGRiY2hfZG9zbWVtIDI4Ci0jZGVmaW5lIGRiY2hfZHJpdmVyIDI5Ci0jZGVmaW5lIGRiY2hfZHNvdW5kIDMwCi0jZGVmaW5lIGRiY2hfZWRpdCAzMQotI2RlZmluZSBkYmNoX2V2ZW50IDMyCi0jZGVmaW5lIGRiY2hfZXhlYyAzMwotI2RlZmluZSBkYmNoX2ZpbGUgMzQKLSNkZWZpbmUgZGJjaF9maXh1cCAzNQotI2RlZmluZSBkYmNoX2ZvbnQgMzYKLSNkZWZpbmUgZGJjaF9nZGkgMzcKLSNkZWZpbmUgZGJjaF9nbG9iYWwgMzgKLSNkZWZpbmUgZGJjaF9ncmFwaGljcyAzOQotI2RlZmluZSBkYmNoX2hlYWRlciA0MAotI2RlZmluZSBkYmNoX2hlYXAgNDEKLSNkZWZpbmUgZGJjaF9ob29rIDQyCi0jZGVmaW5lIGRiY2hfaWNvbiA0MwotI2RlZmluZSBkYmNoX2ltYWdlbGlzdCA0NAotI2RlZmluZSBkYmNoX2ludCA0NQotI2RlZmluZSBkYmNoX2ludDIxIDQ2Ci0jZGVmaW5lIGRiY2hfaW50MzEgNDcKLSNkZWZpbmUgZGJjaF9rZXkgNDgKLSNkZWZpbmUgZGJjaF9rZXlib2FyZCA0OQotI2RlZmluZSBkYmNoX2xkdCA1MAotI2RlZmluZSBkYmNoX2xpc3Rib3ggNTEKLSNkZWZpbmUgZGJjaF9sb2NhbCA1MgotI2RlZmluZSBkYmNoX21jaSA1MwotI2RlZmluZSBkYmNoX21jaWFuaW0gNTQKLSNkZWZpbmUgZGJjaF9tY2l3YXZlIDU1Ci0jZGVmaW5lIGRiY2hfbWRpIDU2Ci0jZGVmaW5lIGRiY2hfbWVudSA1NwotI2RlZmluZSBkYmNoX21lc3NhZ2UgNTgKLSNkZWZpbmUgZGJjaF9tZXRhZmlsZSA1OQotI2RlZmluZSBkYmNoX21pZGkgNjAKLSNkZWZpbmUgZGJjaF9tbWF1eCA2MQotI2RlZmluZSBkYmNoX21taW8gNjIKLSNkZWZpbmUgZGJjaF9tbXN5cyA2MwotI2RlZmluZSBkYmNoX21tdGltZSA2NAotI2RlZmluZSBkYmNoX21vZHVsZSA2NQotI2RlZmluZSBkYmNoX21wciA2NgotI2RlZmluZSBkYmNoX21zZyA2NwotI2RlZmluZSBkYmNoX25vbmNsaWVudCA2OAotI2RlZmluZSBkYmNoX250ZGxsIDY5Ci0jZGVmaW5lIGRiY2hfb2xlIDcwCi0jZGVmaW5lIGRiY2hfcGFsZXR0ZSA3MQotI2RlZmluZSBkYmNoX3ByaW50IDcyCi0jZGVmaW5lIGRiY2hfcHJvY2VzcyA3MwotI2RlZmluZSBkYmNoX3Byb2ZpbGUgNzQKLSNkZWZpbmUgZGJjaF9wcm9ncmVzcyA3NQotI2RlZmluZSBkYmNoX3Byb3AgNzYKLSNkZWZpbmUgZGJjaF9yZWcgNzcKLSNkZWZpbmUgZGJjaF9yZWdpb24gNzgKLSNkZWZpbmUgZGJjaF9yZWxheSA3OQotI2RlZmluZSBkYmNoX3Jlc291cmNlIDgwCi0jZGVmaW5lIGRiY2hfc2Nyb2xsIDgxCi0jZGVmaW5lIGRiY2hfc2VjdXJpdHkgODIKLSNkZWZpbmUgZGJjaF9zZWdtZW50IDgzCi0jZGVmaW5lIGRiY2hfc2VsZWN0b3IgODQKLSNkZWZpbmUgZGJjaF9zZW0gODUKLSNkZWZpbmUgZGJjaF9zZW5kbXNnIDg2Ci0jZGVmaW5lIGRiY2hfc2hlbGwgODcKLSNkZWZpbmUgZGJjaF9zaG0gODgKLSNkZWZpbmUgZGJjaF9zbm9vcCA4OQotI2RlZmluZSBkYmNoX3NvdW5kIDkwCi0jZGVmaW5lIGRiY2hfc3RhdGljIDkxCi0jZGVmaW5lIGRiY2hfc3RyZXNzIDkyCi0jZGVmaW5lIGRiY2hfc3RyaW5nIDkzCi0jZGVmaW5lIGRiY2hfc3lzY29sb3IgOTQKLSNkZWZpbmUgZGJjaF9zeXN0ZW0gOTUKLSNkZWZpbmUgZGJjaF90YXNrIDk2Ci0jZGVmaW5lIGRiY2hfdGV4dCA5NwotI2RlZmluZSBkYmNoX3RocmVhZCA5OAotI2RlZmluZSBkYmNoX3RodW5rIDk5Ci0jZGVmaW5lIGRiY2hfdGltZXIgMTAwCi0jZGVmaW5lIGRiY2hfdG9vbGJhciAxMDEKLSNkZWZpbmUgZGJjaF90b29saGVscCAxMDIKLSNkZWZpbmUgZGJjaF90d2VhayAxMDMKLSNkZWZpbmUgZGJjaF91aXRvb2xzIDEwNAotI2RlZmluZSBkYmNoX3VwZG93biAxMDUKLSNkZWZpbmUgZGJjaF92ZXIgMTA2Ci0jZGVmaW5lIGRiY2hfdmlydHVhbCAxMDcKLSNkZWZpbmUgZGJjaF92eGQgMTA4Ci0jZGVmaW5lIGRiY2hfd2luIDEwOQotI2RlZmluZSBkYmNoX3dpbjE2ZHJ2IDExMAotI2RlZmluZSBkYmNoX3dpbjMyIDExMQotI2RlZmluZSBkYmNoX3dpbmcgMTEyCi0jZGVmaW5lIGRiY2hfd2luc29jayAxMTMKLSNkZWZpbmUgZGJjaF93bmV0IDExNAotI2RlZmluZSBkYmNoX3gxMSAxMTUKLSNkZWZpbmUgZGJjaF94MTFkcnYgMTE2CisjZGVmaW5lIGRiY2hfZHBsYXkgMjkKKyNkZWZpbmUgZGJjaF9kcml2ZXIgMzAKKyNkZWZpbmUgZGJjaF9kc291bmQgMzEKKyNkZWZpbmUgZGJjaF9lZGl0IDMyCisjZGVmaW5lIGRiY2hfZXZlbnQgMzMKKyNkZWZpbmUgZGJjaF9leGVjIDM0CisjZGVmaW5lIGRiY2hfZmlsZSAzNQorI2RlZmluZSBkYmNoX2ZpeHVwIDM2CisjZGVmaW5lIGRiY2hfZm9udCAzNworI2RlZmluZSBkYmNoX2dkaSAzOAorI2RlZmluZSBkYmNoX2dsb2JhbCAzOQorI2RlZmluZSBkYmNoX2dyYXBoaWNzIDQwCisjZGVmaW5lIGRiY2hfaGVhZGVyIDQxCisjZGVmaW5lIGRiY2hfaGVhcCA0MgorI2RlZmluZSBkYmNoX2hvb2sgNDMKKyNkZWZpbmUgZGJjaF9pY29uIDQ0CisjZGVmaW5lIGRiY2hfaW1hZ2VsaXN0IDQ1CisjZGVmaW5lIGRiY2hfaW50IDQ2CisjZGVmaW5lIGRiY2hfaW50MjEgNDcKKyNkZWZpbmUgZGJjaF9pbnQzMSA0OAorI2RlZmluZSBkYmNoX2tleSA0OQorI2RlZmluZSBkYmNoX2tleWJvYXJkIDUwCisjZGVmaW5lIGRiY2hfbGR0IDUxCisjZGVmaW5lIGRiY2hfbGlzdGJveCA1MgorI2RlZmluZSBkYmNoX2xvY2FsIDUzCisjZGVmaW5lIGRiY2hfbWNpIDU0CisjZGVmaW5lIGRiY2hfbWNpYW5pbSA1NQorI2RlZmluZSBkYmNoX21jaXdhdmUgNTYKKyNkZWZpbmUgZGJjaF9tZGkgNTcKKyNkZWZpbmUgZGJjaF9tZW51IDU4CisjZGVmaW5lIGRiY2hfbWVzc2FnZSA1OQorI2RlZmluZSBkYmNoX21ldGFmaWxlIDYwCisjZGVmaW5lIGRiY2hfbWlkaSA2MQorI2RlZmluZSBkYmNoX21tYXV4IDYyCisjZGVmaW5lIGRiY2hfbW1pbyA2MworI2RlZmluZSBkYmNoX21tc3lzIDY0CisjZGVmaW5lIGRiY2hfbW10aW1lIDY1CisjZGVmaW5lIGRiY2hfbW9kdWxlIDY2CisjZGVmaW5lIGRiY2hfbXByIDY3CisjZGVmaW5lIGRiY2hfbXNnIDY4CisjZGVmaW5lIGRiY2hfbm9uY2xpZW50IDY5CisjZGVmaW5lIGRiY2hfbnRkbGwgNzAKKyNkZWZpbmUgZGJjaF9vbGUgNzEKKyNkZWZpbmUgZGJjaF9wYWxldHRlIDcyCisjZGVmaW5lIGRiY2hfcHJpbnQgNzMKKyNkZWZpbmUgZGJjaF9wcm9jZXNzIDc0CisjZGVmaW5lIGRiY2hfcHJvZmlsZSA3NQorI2RlZmluZSBkYmNoX3Byb2dyZXNzIDc2CisjZGVmaW5lIGRiY2hfcHJvcCA3NworI2RlZmluZSBkYmNoX3BzZHJ2IDc4CisjZGVmaW5lIGRiY2hfcmVnIDc5CisjZGVmaW5lIGRiY2hfcmVnaW9uIDgwCisjZGVmaW5lIGRiY2hfcmVsYXkgODEKKyNkZWZpbmUgZGJjaF9yZXNvdXJjZSA4MgorI2RlZmluZSBkYmNoX3Njcm9sbCA4MworI2RlZmluZSBkYmNoX3NlY3VyaXR5IDg0CisjZGVmaW5lIGRiY2hfc2VnbWVudCA4NQorI2RlZmluZSBkYmNoX3NlbGVjdG9yIDg2CisjZGVmaW5lIGRiY2hfc2VtIDg3CisjZGVmaW5lIGRiY2hfc2VuZG1zZyA4OAorI2RlZmluZSBkYmNoX3NoZWxsIDg5CisjZGVmaW5lIGRiY2hfc2htIDkwCisjZGVmaW5lIGRiY2hfc25vb3AgOTEKKyNkZWZpbmUgZGJjaF9zb3VuZCA5MgorI2RlZmluZSBkYmNoX3N0YXRpYyA5MworI2RlZmluZSBkYmNoX3N0cmVzcyA5NAorI2RlZmluZSBkYmNoX3N0cmluZyA5NQorI2RlZmluZSBkYmNoX3N5c2NvbG9yIDk2CisjZGVmaW5lIGRiY2hfc3lzdGVtIDk3CisjZGVmaW5lIGRiY2hfdGFzayA5OAorI2RlZmluZSBkYmNoX3RleHQgOTkKKyNkZWZpbmUgZGJjaF90aHJlYWQgMTAwCisjZGVmaW5lIGRiY2hfdGh1bmsgMTAxCisjZGVmaW5lIGRiY2hfdGltZXIgMTAyCisjZGVmaW5lIGRiY2hfdG9vbGJhciAxMDMKKyNkZWZpbmUgZGJjaF90b29saGVscCAxMDQKKyNkZWZpbmUgZGJjaF90d2VhayAxMDUKKyNkZWZpbmUgZGJjaF91aXRvb2xzIDEwNgorI2RlZmluZSBkYmNoX3VwZG93biAxMDcKKyNkZWZpbmUgZGJjaF92ZXIgMTA4CisjZGVmaW5lIGRiY2hfdmlydHVhbCAxMDkKKyNkZWZpbmUgZGJjaF92eGQgMTEwCisjZGVmaW5lIGRiY2hfd2luIDExMQorI2RlZmluZSBkYmNoX3dpbjE2ZHJ2IDExMgorI2RlZmluZSBkYmNoX3dpbjMyIDExMworI2RlZmluZSBkYmNoX3dpbmcgMTE0CisjZGVmaW5lIGRiY2hfd2luc29jayAxMTUKKyNkZWZpbmUgZGJjaF93bmV0IDExNgorI2RlZmluZSBkYmNoX3gxMSAxMTcKKyNkZWZpbmUgZGJjaF94MTFkcnYgMTE4CiAvKiBEZWZpbml0aW9ucyBmb3IgY2xhc3NlcyBpZGVudGlmaWVycyAqLwogI2RlZmluZSBkYmNsX2ZpeG1lIDAKICNkZWZpbmUgZGJjbF9lcnIgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZWJ1Z2RlZnMuaCBiL2luY2x1ZGUvZGVidWdkZWZzLmgKaW5kZXggNmFhZTQ5Zi4uYThkZGQyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZWJ1Z2RlZnMuaAorKysgYi9pbmNsdWRlL2RlYnVnZGVmcy5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgImRlYnVndG9vbHMuaCIKICNlbmRpZgogCi0jZGVmaW5lIERFQlVHX0NIQU5ORUxfQ09VTlQgMTE3CisjZGVmaW5lIERFQlVHX0NIQU5ORUxfQ09VTlQgMTE5CiAjaWZkZWYgREVCVUdfUlVOVElNRQogc2hvcnQgZGVidWdfbXNnX2VuYWJsZWRbXVtERUJVR19DTEFTU19DT1VOVF0gPSB7CiB7MSwgMSwgMCwgMH0sCkBAIC0xMjQsNiArMTI0LDggQEAKIHsxLCAxLCAwLCAwfSwKIHsxLCAxLCAwLCAwfSwKIHsxLCAxLCAwLCAwfSwKK3sxLCAxLCAwLCAwfSwKK3sxLCAxLCAwLCAwfSwKIH07CiBjb25zdCBjaGFyKiBkZWJ1Z19jaF9uYW1lW10gPSB7CiAiYWNjZWwiLApAQCAtMTU1LDYgKzE1Nyw3IEBACiAiZGxsIiwKICJkb3NmcyIsCiAiZG9zbWVtIiwKKyJkcGxheSIsCiAiZHJpdmVyIiwKICJkc291bmQiLAogImVkaXQiLApAQCAtMjAzLDYgKzIwNiw3IEBACiAicHJvZmlsZSIsCiAicHJvZ3Jlc3MiLAogInByb3AiLAorInBzZHJ2IiwKICJyZWciLAogInJlZ2lvbiIsCiAicmVsYXkiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcGxheS5oIGIvaW5jbHVkZS9kcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDY0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RwbGF5LmgKQEAgLTAsMCArMSwzMzggQEAKKy8qIEhlYWRlciBmb3IgRGlyZWN0IFBsYXkgYW5kIERpcmVjdCBQbGF5IExvYmJ5ICovCisjaWZuZGVmIF9fV0lORV9EUExBWV9ICisjZGVmaW5lIF9fV0lORV9EUExBWV9ICisKKyNpbmNsdWRlICJtbXN5c3RlbS5oIgorCisvKiBSZXR1cm4gVmFsdWVzICovCisjZGVmaW5lIF9GQUNEUCAgMHg4NzcKKyNkZWZpbmUgTUFLRV9EUEhSRVNVTFQoIGNvZGUgKSAgICBNQUtFX0hSRVNVTFQoIDEsIF9GQUNEUCwgY29kZSApCisKKyNkZWZpbmUgRFBfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICBTX09LCisjZGVmaW5lIERQRVJSX0FMUkVBRFlJTklUSUFMSVpFRCAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAgNSApCisjZGVmaW5lIERQRVJSX0FDQ0VTU0RFTklFRCAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAxMCApCisjZGVmaW5lIERQRVJSX0FDVElWRVBMQVlFUlMgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAyMCApCisjZGVmaW5lIERQRVJSX0JVRkZFUlRPT1NNQUxMICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAzMCApCisjZGVmaW5lIERQRVJSX0NBTlRBRERQTEFZRVIgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICA0MCApCisjZGVmaW5lIERQRVJSX0NBTlRDUkVBVEVHUk9VUCAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICA1MCApCisjZGVmaW5lIERQRVJSX0NBTlRDUkVBVEVQTEFZRVIgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICA2MCApCisjZGVmaW5lIERQRVJSX0NBTlRDUkVBVEVTRVNTSU9OICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICA3MCApCisjZGVmaW5lIERQRVJSX0NBUFNOT1RBVkFJTEFCTEVZRVQgICAgICAgTUFLRV9EUEhSRVNVTFQoICA4MCApCisjZGVmaW5lIERQRVJSX0VYQ0VQVElPTiAgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICA5MCApCisjZGVmaW5lIERQRVJSX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgRV9GQUlMCisjZGVmaW5lIERQRVJSX0lOVkFMSURGTEFHUyAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDEyMCApCisjZGVmaW5lIERQRVJSX0lOVkFMSURPQkpFQ1QgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDEzMCApCisjZGVmaW5lIERQRVJSX0lOVkFMSURQQVJBTSAgICAgICAgICAgICAgRV9JTlZBTElEQVJHCisjZGVmaW5lIERQRVJSX0lOVkFMSURQQVJBTVMgICAgICAgICAgICAgRFBFUlJfSU5WQUxJRFBBUkFNCisjZGVmaW5lIERQRVJSX0lOVkFMSURQTEFZRVIgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDE1MCApCisjZGVmaW5lIERQRVJSX0lOVkFMSURHUk9VUCAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDE1NSApCisjZGVmaW5lIERQRVJSX05PQ0FQUyAgICAgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDE2MCApCisjZGVmaW5lIERQRVJSX05PQ09OTkVDVElPTiAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDE3MCApCisjZGVmaW5lIERQRVJSX05PTUVNT1JZICAgICAgICAgICAgICAgICAgRV9PVVRPRk1FTU9SWQorI2RlZmluZSBEUEVSUl9PVVRPRk1FTU9SWSAgICAgICAgICAgICAgIERQRVJSX05PTUVNT1JZCisjZGVmaW5lIERQRVJSX05PTUVTU0FHRVMgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDE5MCApCisjZGVmaW5lIERQRVJSX05PTkFNRVNFUlZFUkZPVU5EICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDIwMCApCisjZGVmaW5lIERQRVJSX05PUExBWUVSUyAgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDIxMCApCisjZGVmaW5lIERQRVJSX05PU0VTU0lPTlMgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDIyMCApCisjZGVmaW5lIERQRVJSX1BFTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVfUEVORElORworI2RlZmluZSBEUEVSUl9TRU5EVE9PQklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMjMwICkKKyNkZWZpbmUgRFBFUlJfVElNRU9VVCAgICAgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMjQwICkKKyNkZWZpbmUgRFBFUlJfVU5BVkFJTEFCTEUgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMjUwICkKKyNkZWZpbmUgRFBFUlJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICBFX05PVElNUEwKKyNkZWZpbmUgRFBFUlJfQlVTWSAgICAgICAgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMjcwICkKKyNkZWZpbmUgRFBFUlJfVVNFUkNBTkNFTCAgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMjgwICkKKyNkZWZpbmUgRFBFUlJfTk9JTlRFUkZBQ0UgICAgICAgICAgICAgICBFX05PSU5URVJGQUNFCisjZGVmaW5lIERQRVJSX0NBTk5PVENSRUFURVNFUlZFUiAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDI5MCApCisjZGVmaW5lIERQRVJSX1BMQVlFUkxPU1QgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDMwMCApCisjZGVmaW5lIERQRVJSX1NFU1NJT05MT1NUICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDMxMCApCisjZGVmaW5lIERQRVJSX1VOSU5JVElBTElaRUQgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDMyMCApCisjZGVmaW5lIERQRVJSX05PTkVXUExBWUVSUyAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDMzMCApCisjZGVmaW5lIERQRVJSX0lOVkFMSURQQVNTV09SRCAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDM0MCApCisjZGVmaW5lIERQRVJSX0NPTk5FQ1RJTkcgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDM1MCApCisjZGVmaW5lIERQRVJSX0JVRkZFUlRPT0xBUkdFICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDEwMDAgKQorI2RlZmluZSBEUEVSUl9DQU5UQ1JFQVRFUFJPQ0VTUyAgICAgICAgIE1BS0VfRFBIUkVTVUxUKCAxMDEwICkKKyNkZWZpbmUgRFBFUlJfQVBQTk9UU1RBUlRFRCAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMTAyMCApCisjZGVmaW5lIERQRVJSX0lOVkFMSURJTlRFUkZBQ0UgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDEwMzAgKQorI2RlZmluZSBEUEVSUl9OT1NFUlZJQ0VQUk9WSURFUiAgICAgICAgIE1BS0VfRFBIUkVTVUxUKCAxMDQwICkKKyNkZWZpbmUgRFBFUlJfVU5LTk9XTkFQUExJQ0FUSU9OICAgICAgICBNQUtFX0RQSFJFU1VMVCggMTA1MCApCisjZGVmaW5lIERQRVJSX05PVExPQkJJRUQgICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDEwNzAgKQorI2RlZmluZSBEUEVSUl9TRVJWSUNFUFJPVklERVJMT0FERUQgICAgIE1BS0VfRFBIUkVTVUxUKCAxMDgwICkKKyNkZWZpbmUgRFBFUlJfQUxSRUFEWVJFR0lTVEVSRUQgICAgICAgICBNQUtFX0RQSFJFU1VMVCggMTA5MCApCisjZGVmaW5lIERQRVJSX05PVFJFR0lTVEVSRUQgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoIDExMDAgKQorI2RlZmluZSBEUEVSUl9BVVRIRU5USUNBVElPTkZBSUxFRCAgICAgIE1BS0VfRFBIUkVTVUxUKCAgMjAwMCApCisjZGVmaW5lIERQRVJSX0NBTlRMT0FEU1NQSSAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAyMDEwICkKKyNkZWZpbmUgRFBFUlJfRU5DUllQVElPTkZBSUxFRCAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggIDIwMjAgKQorI2RlZmluZSBEUEVSUl9TSUdORkFJTEVEICAgICAgICAgICAgICAgIE1BS0VfRFBIUkVTVUxUKCAgMjAzMCApCisjZGVmaW5lIERQRVJSX0NBTlRMT0FEU0VDVVJJVFlQQUNLQUdFICAgTUFLRV9EUEhSRVNVTFQoICAyMDQwICkKKyNkZWZpbmUgRFBFUlJfRU5DUllQVElPTk5PVFNVUFBPUlRFRCAgICBNQUtFX0RQSFJFU1VMVCggIDIwNTAgKQorI2RlZmluZSBEUEVSUl9DQU5UTE9BRENBUEkgICAgICAgICAgICAgIE1BS0VfRFBIUkVTVUxUKCAgMjA2MCApCisjZGVmaW5lIERQRVJSX05PVExPR0dFRElOICAgICAgICAgICAgICAgTUFLRV9EUEhSRVNVTFQoICAyMDcwICkKKyNkZWZpbmUgRFBFUlJfTE9HT05ERU5JRUQgICAgICAgICAgICAgICBNQUtFX0RQSFJFU1VMVCggIDIwODAgKQorCitERUZJTkVfR1VJRChJSURfSURpcmVjdFBsYXkyLCAweDJiNzRmN2MwLCAweDkxNTQsIDB4MTFjZiwgMHhhOSwgMHhjZCwgMHgwLCAweGFhLCAweDAsIDB4NjgsIDB4ODYsIDB4ZTMpOworREVGSU5FX0dVSUQoSUlEX0lEaXJlY3RQbGF5MkEsMHg5ZDQ2MDU4MCwgMHhhODIyLCAweDExY2YsIDB4OTYsIDB4YywgMHgwLCAweDgwLCAweGM3LCAweDUzLCAweDRlLCAweDgyKTsKKworREVGSU5FX0dVSUQoSUlEX0lEaXJlY3RQbGF5MywgMHgxMzNlZmU0MCwgMHgzMmRjLCAweDExZDAsIDB4OWMsIDB4ZmIsIDB4MCwgMHhhMCwgMHhjOSwgMHhhLCAweDQzLCAweGNiKTsKK0RFRklORV9HVUlEKElJRF9JRGlyZWN0UGxheTNBLDB4MTMzZWZlNDEsIDB4MzJkYywgMHgxMWQwLCAweDljLCAweGZiLCAweDAsIDB4YTAsIDB4YzksIDB4YSwgMHg0MywgMHhjYik7CisKKy8vIHtEMUVCNkQyMC04OTIzLTExZDAtOUQ5Ny0wMEEwQzkwQTQzQ0J9CitERUZJTkVfR1VJRChDTFNJRF9EaXJlY3RQbGF5LDB4ZDFlYjZkMjAsIDB4ODkyMywgMHgxMWQwLCAweDlkLCAweDk3LCAweDAsIDB4YTAsIDB4YzksIDB4YSwgMHg0MywgMHhjYik7CisKKworLyoge0FGNDY1QzcxLTk1ODgtMTFjZi1BMDIwLTAwQUEwMDYxNTdBQ30gKi8KK0RFRklORV9HVUlEKElJRF9JRGlyZWN0UGxheUxvYmJ5LCAweGFmNDY1YzcxLCAweDk1ODgsIDB4MTFjZiwgMHhhMCwgMHgyMCwgMHgwLCAweGFhLCAweDAsIDB4NjEsIDB4NTcsIDB4YWMpOworLyogezI2QzY2QTcwLUIzNjctMTFjZi1BMDI0LTAwQUEwMDYxNTdBQ30gKi8KK0RFRklORV9HVUlEKElJRF9JRGlyZWN0UGxheUxvYmJ5QSwgMHgyNmM2NmE3MCwgMHhiMzY3LCAweDExY2YsIDB4YTAsIDB4MjQsIDB4MCwgMHhhYSwgMHgwLCAweDYxLCAweDU3LCAweGFjKTsKKy8qIHswMTk0QzIyMC1BMzAzLTExZDAtOUM0Ri0wMEEwQzkwNTQyNUV9ICovCitERUZJTkVfR1VJRChJSURfSURpcmVjdFBsYXlMb2JieTIsIDB4MTk0YzIyMCwgMHhhMzAzLCAweDExZDAsIDB4OWMsIDB4NGYsIDB4MCwgMHhhMCwgMHhjOSwgMHg1LCAweDQyLCAweDVlKTsKKy8qIHsxQkI0QUY4MC1BMzAzLTExZDAtOUM0Ri0wMEEwQzkwNTQyNUV9ICovCitERUZJTkVfR1VJRChJSURfSURpcmVjdFBsYXlMb2JieTJBLCAweDFiYjRhZjgwLCAweGEzMDMsIDB4MTFkMCwgMHg5YywgMHg0ZiwgMHgwLCAweGEwLCAweGM5LCAweDUsIDB4NDIsIDB4NWUpOworLyogezJGRThGODEwLUIyQTUtMTFkMC1BNzg3LTAwMDBGODAzQUJGQ30gKi8KK0RFRklORV9HVUlEKENMU0lEX0RpcmVjdFBsYXlMb2JieSwgMHgyZmU4ZjgxMCwgMHhiMmE1LCAweDExZDAsIDB4YTcsIDB4ODcsIDB4MCwgMHgwLCAweGY4LCAweDMsIDB4YWIsIDB4ZmMpOworCisvKgorICogR1VJRFMgdXNlZCBieSBTZXJ2aWNlIFByb3ZpZGVycyBzaGlwcGVkIHdpdGggRGlyZWN0UGxheQorICogVXNlIHRoZXNlIHRvIGlkZW50aWZ5IFNlcnZpY2UgUHJvdmlkZXIgcmV0dXJuZWQgYnkgRW51bUNvbm5lY3Rpb25zCisgKi8KKworLyogR1VJRCBmb3IgSVBYIHNlcnZpY2UgcHJvdmlkZXIgezY4NUJDNDAwLTlEMkMtMTFjZi1BOUNELTAwQUEwMDY4ODZFM30gKi8KK0RFRklORV9HVUlEKERQU1BHVUlEX0lQWCwgMHg2ODViYzQwMCwgMHg5ZDJjLCAweDExY2YsIDB4YTksIDB4Y2QsIDB4MCwgMHhhYSwgMHgwLCAweDY4LCAweDg2LCAweGUzKTsKKworLyogR1VJRCBmb3IgVENQL0lQIHNlcnZpY2UgcHJvdmlkZXIgMzZFOTVFRTAtODU3Ny0xMWNmLTk2MEMtMDA4MEM3NTM0RTgyICovCitERUZJTkVfR1VJRChEUFNQR1VJRF9UQ1BJUCwgMHgzNkU5NUVFMCwgMHg4NTc3LCAweDExY2YsIDB4OTYsIDB4YywgMHgwLCAweDgwLCAweGM3LCAweDUzLCAweDRlLCAweDgyKTsKKworLyogR1VJRCBmb3IgU2VyaWFsIHNlcnZpY2UgcHJvdmlkZXIgezBGMUQ2ODYwLTg4RDktMTFjZi05QzRFLTAwQTBDOTA1NDI1RX0gKi8KK0RFRklORV9HVUlEKERQU1BHVUlEX1NFUklBTCwgMHhmMWQ2ODYwLCAweDg4ZDksIDB4MTFjZiwgMHg5YywgMHg0ZSwgMHgwLCAweGEwLCAweGM5LCAweDUsIDB4NDIsIDB4NWUpOworCisvKiBHVUlEIGZvciBNb2RlbSBzZXJ2aWNlIHByb3ZpZGVyIHs0NEVBQTc2MC1DQjY4LTExY2YtOUM0RS0wMEEwQzkwNTQyNUV9ICovCitERUZJTkVfR1VJRChEUFNQR1VJRF9NT0RFTSwgMHg0NGVhYTc2MCwgMHhjYjY4LCAweDExY2YsIDB4OWMsIDB4NGUsIDB4MCwgMHhhMCwgMHhjOSwgMHg1LCAweDQyLCAweDVlKTsKKworCisjcHJhZ21hIHBhY2soMSkKKworLyogRGlyZWN0IFBsYXkgKi8KK3R5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5ICAgICAgICBJRGlyZWN0UGxheSwgKkxQRElSRUNUUExBWTsKKworLyogRGlyZWN0IFBsYXkgMiAqLwordHlwZWRlZiBzdHJ1Y3QgSURpcmVjdFBsYXkyICAgICAgIElEaXJlY3RQbGF5MiwgKkxQRElSRUNUUExBWTI7Cit0eXBlZGVmIHN0cnVjdCBJRGlyZWN0UGxheTIgICAgICAgSURpcmVjdFBsYXkyQSwgKkxQRElSRUNUUExBWTJBOworCisvKiBEaXJlY3QgUGxheSAzICovCit0eXBlZGVmIHN0cnVjdCBJRGlyZWN0UGxheTMgICAgICAgSURpcmVjdFBsYXkzLCAqTFBESVJFQ1RQTEFZMzsKK3R5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5MyAgICAgICBJRGlyZWN0UGxheTNBLCAqTFBESVJFQ1RQTEFZM0E7CisKKy8qIERQSUQgLSBEaXJlY3RQbGF5IHBsYXllciBhbmQgZ3JvdXAgSUQgKi8KK3R5cGVkZWYgRFdPUkQgRFBJRCwgKkxQRFBJRDsKKworLyogRFBJRCBmcm9tIHdoZW5jZSBvcmlnaW5hdGUgbWVzc2FnZXMgLSBqdXN0IGFuIElEICovCisjZGVmaW5lIERQSURfU1lTTVNHICAgICAgICAgICAgIDAgICAgICAgICAgIC8qIERQSUQgb2Ygc3lzdGVtICovCisjZGVmaW5lIERQSURfQUxMUExBWUVSUyAgICAgICAgIDAgICAgICAgICAgIC8qIERQSUQgb2YgYWxsIHBsYXllcnMgKi8KKyNkZWZpbmUgRFBJRF9TRVJWRVJQTEFZRVIgICAgICAgMSAgICAgICAgICAgLyogRFBJRCBvZiB0aGUgc2VydmVyIHBsYXllciAqLworI2RlZmluZSBEUElEX1VOS05PV04gICAgICAgICAgICAweEZGRkZGRkZGICAvKiBQbGF5ZXIgSUQgaXMgdW5rbm93biAqLworCisvKiAgRFBDQVBTIC0gIFVzZWQgdG8gb2J0YWluIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBEaXJlY3RQbGF5IG9iamVjdCAqLwordHlwZWRlZiBzdHJ1Y3QgdGFnRFBDQVBTCit7CisgICAgRFdPUkQgZHdTaXplOyAgICAgICAgICAgICAgIC8qIFNpemUgb2Ygc3RydWN0dXJlIGluIGJ5dGVzICovCisgICAgRFdPUkQgZHdGbGFnczsgICAgICAgICAgICAgIAorICAgIERXT1JEIGR3TWF4QnVmZmVyU2l6ZTsgICAgICAKKyAgICBEV09SRCBkd01heFF1ZXVlU2l6ZTsgICAgICAgLyogT2Jzb2xldGUuICovCisgICAgRFdPUkQgZHdNYXhQbGF5ZXJzOyAgICAgICAgIC8qIE1heGltdW0gcGxheWVycy9ncm91cHMgKGxvY2FsICsgcmVtb3RlKSAqLworICAgIERXT1JEIGR3SHVuZHJlZEJhdWQ7ICAgICAgICAvKiBCYW5kd2lkdGggaW4gMTAwIGJpdHMgcGVyIHNlY29uZCB1bml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaS5lLiAyNCBpcyAyNDAwLCA5NiBpcyA5NjAwLCBldGMuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBEV09SRCBkd0xhdGVuY3k7ICAgICAgICAgICAgLyogRXN0aW1hdGVkIGxhdGVuY3k7IDAgPSB1bmtub3duICovCisgICAgRFdPUkQgZHdNYXhMb2NhbFBsYXllcnM7ICAgIC8qIE1heGltdW0gIyBvZiBsb2NhbGx5IGNyZWF0ZWQgcGxheWVycyAqLworICAgIERXT1JEIGR3SGVhZGVyTGVuZ3RoOyAgICAgICAvKiBNYXhpbXVtIGhlYWRlciBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICBEV09SRCBkd1RpbWVvdXQ7ICAgICAgICAgICAgLyogU2VydmljZSBwcm92aWRlcidzIHN1Z2dlc3RlZCB0aW1lb3V0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgaG93IGxvbmcgRGlyZWN0UGxheSB3aWxsIHdhaXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc3BvbnNlcyB0byBzeXN0ZW0gbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IERQQ0FQUywgKkxQRFBDQVBTOworCit0eXBlZGVmIHN0cnVjdCB0YWdEUE5BTUUKK3sKKyAgICBEV09SRCAgIGR3U2l6ZTsgICAgICAgICAgICAgCisgICAgRFdPUkQgICBkd0ZsYWdzOyAgICAgICAgICAgIC8qIE5vdCB1c2VkIG11c3QgYmUgMCAqLworICAgIHVuaW9uIHBsYXllclNob3J0TmFtZSAgICAgICAvKiBQbGF5ZXIncyBIYW5kbGU/ICovCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBMUFdTVFIgIGxwc3pTaG9ydE5hbWU7ICAKKyAgICAgICAgTFBTVFIgICBscHN6U2hvcnROYW1lQTsgCisgICAgfTsKKyAgICB1bmlvbiBwbGF5ZXJMb25nTmFtZSAgICAgICAgLyogUGxheWVyJ3MgZm9ybWFsL3JlYWwgbmFtZSAqLworICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIExQV1NUUiAgbHBzekxvbmdOYW1lOyAgCisgICAgICAgIExQU1RSICAgbHBzekxvbmdOYW1lQTsgIAorICAgIH07CisKK30gRFBOQU1FLCAqTFBEUE5BTUU7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0RQU0VTU0lPTkRFU0MyCit7CisgICAgRFdPUkQgICBkd1NpemU7ICAgICAgICAgICAgIAorICAgIERXT1JEICAgZHdGbGFnczsgICAgICAgICAgIAorICAgIEdVSUQgICAgZ3VpZEluc3RhbmNlOyAgICAgIAorICAgIEdVSUQgICAgZ3VpZEFwcGxpY2F0aW9uOyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIERXT1JEICAgZHdNYXhQbGF5ZXJzOyAgICAgIAorICAgIERXT1JEICAgZHdDdXJyZW50UGxheWVyczsgIAorCisgICAgdW5pb24gc2Vzc2lvbk5hbWUKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgTFBXU1RSICBscHN6U2Vzc2lvbk5hbWU7ICAKKyAgICAgICAgTFBTVFIgICBscHN6U2Vzc2lvbk5hbWVBOyAKKyAgICB9OworCisgICAgdW5pb24gb3B0bmxTZXNzaW9uUGFzc3dkCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBMUFdTVFIgIGxwc3pQYXNzd29yZDsgICAKKyAgICAgICAgTFBTVFIgICBscHN6UGFzc3dvcmRBOyAgCisgICAgfTsKKworICAgIERXT1JEICAgZHdSZXNlcnZlZDE7ICAgICAgIAorICAgIERXT1JEICAgZHdSZXNlcnZlZDI7CisgICAgRFdPUkQgICBkd1VzZXIxOyAgICAgICAgICAKKyAgICBEV09SRCAgIGR3VXNlcjI7CisgICAgRFdPUkQgICBkd1VzZXIzOworICAgIERXT1JEICAgZHdVc2VyNDsKK30gRFBTRVNTSU9OREVTQzIsICpMUERQU0VTU0lPTkRFU0MyOworCit0eXBlZGVmIHN0cnVjdCB0YWdEUExDT05ORUNUSU9OCit7CisgICAgRFdPUkQgICAgICAgICAgICAgICBkd1NpemU7ICAgICAgICAgIAorICAgIERXT1JEICAgICAgICAgICAgICAgZHdGbGFnczsgICAgICAgICAgCisgICAgTFBEUFNFU1NJT05ERVNDMiAgICBscFNlc3Npb25EZXNjOyAgIAorICAgIExQRFBOQU1FICAgICAgICAgICAgbHBQbGF5ZXJOYW1lOyAgICAKKyAgICBHVUlEICAgICAgICAgICAgICAgIGd1aWRTUDsgICAgICAgICAgCisgICAgTFBWT0lEICAgICAgICAgICAgICBscEFkZHJlc3M7ICAgICAgIAorICAgIERXT1JEICAgICAgICAgICAgICAgZHdBZGRyZXNzU2l6ZTsgIAorfSBEUExDT05ORUNUSU9OLCAqTFBEUExDT05ORUNUSU9OOworCit0eXBlZGVmIHN0cnVjdCB0YWdEUExBUFBJTkZPCit7CisgICAgRFdPUkQgICAgICAgZHdTaXplOyAgICAgICAgICAgIAorICAgIEdVSUQgICAgICAgIGd1aWRBcHBsaWNhdGlvbjsgICAKKworICAgIHVuaW9uIGFwcE5hbWUKKyAgICB7CisgICAgICAgIExQU1RSICAgbHBzekFwcE5hbWVBOyAgICAgIAorICAgICAgICBMUFdTVFIgIGxwc3pBcHBOYW1lOworICAgIH07CisKK30gRFBMQVBQSU5GTywgKkxQRFBMQVBQSU5GTzsKK3R5cGVkZWYgY29uc3QgRFBMQVBQSU5GTyAqTFBDRFBMQVBQSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgRFBDT01QT1VOREFERFJFU1NFTEVNRU5UCit7CisgICAgR1VJRCAgICBndWlkRGF0YVR5cGU7CisgICAgRFdPUkQgICBkd0RhdGFTaXplOworICAgIExQVk9JRCAgbHBEYXRhOworfSBEUENPTVBPVU5EQUREUkVTU0VMRU1FTlQsICpMUERQQ09NUE9VTkRBRERSRVNTRUxFTUVOVDsKK3R5cGVkZWYgY29uc3QgRFBDT01QT1VOREFERFJFU1NFTEVNRU5UICpMUENEUENPTVBPVU5EQUREUkVTU0VMRU1FTlQ7CisKK3R5cGVkZWYgQk9PTDMyIChDQUxMQkFDSyogTFBEUEVOVU1EUENBTExCQUNLVykoCisgICAgTFBHVUlEICAgICAgbHBndWlkU1AsCisgICAgTFBXU1RSICAgICAgbHBTUE5hbWUsCisgICAgRFdPUkQgICAgICAgZHdNYWpvclZlcnNpb24sCisgICAgRFdPUkQgICAgICAgZHdNaW5vclZlcnNpb24sCisgICAgTFBWT0lEICAgICAgbHBDb250ZXh0KTsKKwordHlwZWRlZiBCT09MMzIgKENBTExCQUNLKiBMUERQRU5VTURQQ0FMTEJBQ0tBKSgKKyAgICBMUEdVSUQgICAgICBscGd1aWRTUCwKKyAgICBMUFNUUiAgICAgICBscFNQTmFtZSwgICAgICAgLyogcHRyIHRvIHN0ciB3LyBkcml2ZXIgZGVzY3JpcHRpb24gKi8KKyAgICBEV09SRCAgICAgICBkd01ham9yVmVyc2lvbiwgLyogTWFqb3IgIyBvZiBkcml2ZXIgc3BlYyBpbiBscGd1aWRTUCAqLworICAgIERXT1JEICAgICAgIGR3TWlub3JWZXJzaW9uLCAvKiBNaW5vciAjIG9mIGRyaXZlciBzcGVjIGluIGxwZ3VpZFNQICovIAorICAgIExQVk9JRCAgICAgIGxwQ29udGV4dCk7ICAgICAvKiBVc2VyIGdpdmVuICovCisKK3R5cGVkZWYgY29uc3QgR1VJRCAgICpMUENHVUlEOwordHlwZWRlZiBjb25zdCBEUE5BTUUgKkxQQ0RQTkFNRTsKKwordHlwZWRlZiBCT09MMzIgKENBTExCQUNLKiBMUERQRU5VTUNPTk5FQ1RJT05TQ0FMTEJBQ0spKAorICAgIExQQ0dVSUQgICAgIGxwZ3VpZFNQLAorICAgIExQVk9JRCAgICAgIGxwQ29ubmVjdGlvbiwKKyAgICBEV09SRCAgICAgICBkd0Nvbm5lY3Rpb25TaXplLAorICAgIExQQ0RQTkFNRSAgIGxwTmFtZSwKKyAgICBEV09SRCAgICAgICBkd0ZsYWdzLAorICAgIExQVk9JRCAgICAgIGxwQ29udGV4dCk7CisKK2V4dGVybiBIUkVTVUxUIFdJTkFQSSBEaXJlY3RQbGF5RW51bWVyYXRlQSggTFBEUEVOVU1EUENBTExCQUNLQSwgTFBWT0lEICk7CitleHRlcm4gSFJFU1VMVCBXSU5BUEkgRGlyZWN0UGxheUVudW1lcmF0ZVcoIExQRFBFTlVNRFBDQUxMQkFDS1csIExQVk9JRCApOworZXh0ZXJuIEhSRVNVTFQgV0lOQVBJIERpcmVjdFBsYXlDcmVhdGUoIExQR1VJRCBscEdVSUQsIExQRElSRUNUUExBWSAqbHBscERQLCBJVW5rbm93biAqcFVuayk7CisKKworLyogRGlyZWN0IFBsYXkgTG9iYnkgMSAqLwordHlwZWRlZiBzdHJ1Y3QgSURpcmVjdFBsYXlMb2JieSAgIElEaXJlY3RQbGF5TG9iYnksICpMUERJUkVDVFBMQVlMT0JCWTsKK3R5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5TG9iYnkgICBJRGlyZWN0UGxheUxvYmJ5QSwgKkxQRElSRUNUUExBWUxPQkJZQTsKKworLyogRGlyZWN0IFBsYXkgTG9iYnkgMiAqLwordHlwZWRlZiBzdHJ1Y3QgSURpcmVjdFBsYXlMb2JieTIgICAgSURpcmVjdFBsYXlMb2JieTIsICpMUERJUkVDVFBMQVlMT0JCWTI7Cit0eXBlZGVmIHN0cnVjdCBJRGlyZWN0UGxheUxvYmJ5MiAgICBJRGlyZWN0UGxheUxvYmJ5MkEsICpMUERJUkVDVFBMQVlMT0JCWTJBOworCitleHRlcm4gSFJFU1VMVCBXSU5BUEkgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVyhMUEdVSUQsIExQRElSRUNUUExBWUxPQkJZMiAqLCBJVW5rbm93biAqLCBMUFZPSUQsIERXT1JEICk7CitleHRlcm4gSFJFU1VMVCBXSU5BUEkgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlQShMUEdVSUQsIExQRElSRUNUUExBWUxPQkJZMkEgKiwgSVVua25vd24gKiwgTFBWT0lELCBEV09SRCApOworCisKKwordHlwZWRlZiBCT09MMzIgKENBTExCQUNLKiBMUERQRU5VTUFERFJFU1NDQUxMQkFDSykoCisgICAgUkVGR1VJRCAgICAgICAgIGd1aWREYXRhVHlwZSwKKyAgICBEV09SRCAgICAgICAgICAgZHdEYXRhU2l6ZSwKKyAgICBMUENWT0lEICAgICAgICAgbHBEYXRhLAorICAgIExQVk9JRCAgICAgICAgICBscENvbnRleHQpOworCit0eXBlZGVmIEJPT0wzMiAoQ0FMTEJBQ0sqIExQRFBMRU5VTUFERFJFU1NUWVBFU0NBTExCQUNLKSgKKyAgICBSRUZHVUlEICAgICAgICAgZ3VpZERhdGFUeXBlLAorICAgIExQVk9JRCAgICAgICAgICBscENvbnRleHQsCisgICAgRFdPUkQgICAgICAgICAgIGR3RmxhZ3MpOworCit0eXBlZGVmIEJPT0wzMiAoQ0FMTEJBQ0sqIExQRFBMRU5VTUxPQ0FMQVBQTElDQVRJT05TQ0FMTEJBQ0spKAorICAgIExQQ0RQTEFQUElORk8gICBscEFwcEluZm8sCisgICAgTFBWT0lEICAgICAgICAgIGxwQ29udGV4dCwKKyAgICBEV09SRCAgICAgICAgICAgZHdGbGFncyk7CisKKworI2RlZmluZSBTVERNRVRIT0QoeGZuKSBIUkVTVUxUIChDQUxMQkFDSyAqZm4jI3hmbikKKyNkZWZpbmUgU1RETUVUSE9EXyhyZXQseGZuKSByZXQgKENBTExCQUNLICpmbiMjeGZuKQorI2RlZmluZSBQVVJFCisjZGVmaW5lIEZBUgorI2RlZmluZSBUSElTXyBUSElTLAorCisjZGVmaW5lIFRISVMgTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMKK3R5cGVkZWYgc3RydWN0IHRhZ0xQRElSRUNUUExBWUxPQkJZMl9WVEFCTEUgeworICAgIC8qICBJVW5rbm93biBNZXRob2RzICJJbmhlcml0ZWQgTWV0aG9kcyIgKi8KKyAgICBTVERNRVRIT0QoUXVlcnlJbnRlcmZhY2UpICAgICAgIChUSElTXyBSRUZJSUQgcmlpZCwgTFBWT0lEICogcHB2T2JqKSBQVVJFOworICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKSAgICAgICAgKFRISVMpIFBVUkU7CisgICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKSAgICAgICAoVEhJUykgUFVSRTsKKworICAgIC8qICBJRGlyZWN0UGxheUxvYmJ5IE1ldGhvZHMgKi8KKyAgICBTVERNRVRIT0QoQ29ubmVjdCkgICAgICAgICAgICAgIChUSElTXyBEV09SRCwgTFBESVJFQ1RQTEFZMiAqLCBJVW5rbm93biAqKSBQVVJFOworICAgIFNURE1FVEhPRChDcmVhdGVBZGRyZXNzKSAgICAgICAgKFRISVNfIFJFRkdVSUQsIFJFRkdVSUQsIExQQ1ZPSUQsIERXT1JELCBMUFZPSUQsIExQRFdPUkQpIFBVUkU7CisgICAgU1RETUVUSE9EKEVudW1BZGRyZXNzKSAgICAgICAgICAoVEhJU18gTFBEUEVOVU1BRERSRVNTQ0FMTEJBQ0ssIExQQ1ZPSUQsIERXT1JELCBMUFZPSUQpIFBVUkU7CisgICAgU1RETUVUSE9EKEVudW1BZGRyZXNzVHlwZXMpICAgICAoVEhJU18gTFBEUExFTlVNQUREUkVTU1RZUEVTQ0FMTEJBQ0ssIFJFRkdVSUQsIExQVk9JRCwgRFdPUkQpIFBVUkU7CisgICAgU1RETUVUSE9EKEVudW1Mb2NhbEFwcGxpY2F0aW9ucykoVEhJU18gTFBEUExFTlVNTE9DQUxBUFBMSUNBVElPTlNDQUxMQkFDSywgTFBWT0lELCBEV09SRCkgUFVSRTsKKyAgICBTVERNRVRIT0QoR2V0Q29ubmVjdGlvblNldHRpbmdzKShUSElTXyBEV09SRCwgTFBWT0lELCBMUERXT1JEKSBQVVJFOworICAgIFNURE1FVEhPRChSZWNlaXZlTG9iYnlNZXNzYWdlKSAgKFRISVNfIERXT1JELCBEV09SRCwgTFBEV09SRCwgTFBWT0lELCBMUERXT1JEKSBQVVJFOworICAgIFNURE1FVEhPRChSdW5BcHBsaWNhdGlvbikgICAgICAgKFRISVNfIERXT1JELCBMUERXT1JELCBMUERQTENPTk5FQ1RJT04sIEhBTkRMRTMyKSBQVVJFOworICAgIFNURE1FVEhPRChTZW5kTG9iYnlNZXNzYWdlKSAgICAgKFRISVNfIERXT1JELCBEV09SRCwgTFBWT0lELCBEV09SRCkgUFVSRTsKKyAgICBTVERNRVRIT0QoU2V0Q29ubmVjdGlvblNldHRpbmdzKShUSElTXyBEV09SRCwgRFdPUkQsIExQRFBMQ09OTkVDVElPTikgUFVSRTsKKyAgICBTVERNRVRIT0QoU2V0TG9iYnlNZXNzYWdlRXZlbnQpIChUSElTXyBEV09SRCwgRFdPUkQsIEhBTkRMRTMyKSBQVVJFOworCisgICAgLyogIElEaXJlY3RQbGF5TG9iYnkyIE1ldGhvZHMgKi8KKyAgICBTVERNRVRIT0QoQ3JlYXRlQ29tcG91bmRBZGRyZXNzKShUSElTXyBMUENEUENPTVBPVU5EQUREUkVTU0VMRU1FTlQsIERXT1JELCBMUFZPSUQsIExQRFdPUkQpIFBVUkU7CisKK30gRElSRUNUUExBWUxPQkJZMl9WVEFCTEUsICpMUERJUkVDVFBMQVlMT0JCWTJfVlRBQkxFOworCisvKiBJcyB0aGlzIHJpZ2h0PyBIb3cgZG9lcyBvbmUga25vdz8gKi8KK3N0cnVjdCBJRGlyZWN0UGxheUxvYmJ5MiB7CisgICAgTFBESVJFQ1RQTEFZTE9CQlkyX1ZUQUJMRSBscHZ0Ymw7CisgICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICByZWY7Cit9OworCisjcHJhZ21hIHBhY2soNCkKKworI3VuZGVmIFNURE1FVEhPRAorI3VuZGVmIFNURE1FVEhPRF8KKyN1bmRlZiBQVVJFCisjdW5kZWYgRkFSCisjdW5kZWYgVEhJU18KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Rzb3VuZC5oIGIvaW5jbHVkZS9kc291bmQuaAppbmRleCBhZjdhNmE4Li44MWExMjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Rzb3VuZC5oCisrKyBiL2luY2x1ZGUvZHNvdW5kLmgKQEAgLTI1MSwyOSArMjUxLDQgQEAKICN1bmRlZiBQVVJFCiAjdW5kZWYgRkFSCiAjdW5kZWYgVEhJU18KLQotLyogRGlyZWN0UGxheUxvYmJ5IHN0dWZmICovCi0vKiB7QUY0NjVDNzEtOTU4OC0xMWNmLUEwMjAtMDBBQTAwNjE1N0FDfSAqLwotREVGSU5FX0dVSUQoSUlEX0lEaXJlY3RQbGF5TG9iYnksIDB4YWY0NjVjNzEsIDB4OTU4OCwgMHgxMWNmLCAweGEwLCAweDIwLCAweDAsIDB4YWEsIDB4MCwgMHg2MSwgMHg1NywgMHhhYyk7Ci0vKiB7MjZDNjZBNzAtQjM2Ny0xMWNmLUEwMjQtMDBBQTAwNjE1N0FDfSAqLwotREVGSU5FX0dVSUQoSUlEX0lEaXJlY3RQbGF5TG9iYnlBLCAweDI2YzY2YTcwLCAweGIzNjcsIDB4MTFjZiwgMHhhMCwgMHgyNCwgMHgwLCAweGFhLCAweDAsIDB4NjEsIDB4NTcsIDB4YWMpOwotLyogezAxOTRDMjIwLUEzMDMtMTFkMC05QzRGLTAwQTBDOTA1NDI1RX0gKi8KLURFRklORV9HVUlEKElJRF9JRGlyZWN0UGxheUxvYmJ5MiwgMHgxOTRjMjIwLCAweGEzMDMsIDB4MTFkMCwgMHg5YywgMHg0ZiwgMHgwLCAweGEwLCAweGM5LCAweDUsIDB4NDIsIDB4NWUpOwotLyogezFCQjRBRjgwLUEzMDMtMTFkMC05QzRGLTAwQTBDOTA1NDI1RX0gKi8KLURFRklORV9HVUlEKElJRF9JRGlyZWN0UGxheUxvYmJ5MkEsIDB4MWJiNGFmODAsIDB4YTMwMywgMHgxMWQwLCAweDljLCAweDRmLCAweDAsIDB4YTAsIDB4YzksIDB4NSwgMHg0MiwgMHg1ZSk7Ci0vKiB7MkZFOEY4MTAtQjJBNS0xMWQwLUE3ODctMDAwMEY4MDNBQkZDfSAqLwotREVGSU5FX0dVSUQoQ0xTSURfRGlyZWN0UGxheUxvYmJ5LCAweDJmZThmODEwLCAweGIyYTUsIDB4MTFkMCwgMHhhNywgMHg4NywgMHgwLCAweDAsIDB4ZjgsIDB4MywgMHhhYiwgMHhmYyk7Ci0KLXR5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5TG9iYnkgICAgICpMUERJUkVDVFBMQVlMT0JCWTsKLXR5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5TG9iYnkgICAgICpMUERJUkVDVFBMQVlMT0JCWUE7Ci10eXBlZGVmIHN0cnVjdCBJRGlyZWN0UGxheUxvYmJ5ICAgICBJRGlyZWN0UGxheUxvYmJ5QTsKLQotdHlwZWRlZiBzdHJ1Y3QgSURpcmVjdFBsYXlMb2JieTIgICAgKkxQRElSRUNUUExBWUxPQkJZMjsKLXR5cGVkZWYgc3RydWN0IElEaXJlY3RQbGF5TG9iYnkyICAgICpMUERJUkVDVFBMQVlMT0JCWTJBOwotdHlwZWRlZiBzdHJ1Y3QgSURpcmVjdFBsYXlMb2JieTIgICAgSURpcmVjdFBsYXlMb2JieTJBOwotCi1leHRlcm4gSFJFU1VMVCBXSU5BUEkgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVyhMUEdVSUQsIExQRElSRUNUUExBWUxPQkJZICosIElVbmtub3duICosIExQVk9JRCwgRFdPUkQgKTsKLQotZXh0ZXJuIEhSRVNVTFQgV0lOQVBJIERpcmVjdFBsYXlMb2JieUNyZWF0ZUEoTFBHVUlELCBMUERJUkVDVFBMQVlMT0JCWUEgKiwgSVVua25vd24gKiwgTFBWT0lELCBEV09SRCApOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2xvYmFsLmggYi9pbmNsdWRlL2dsb2JhbC5oCmluZGV4IDU2YmU2NWIuLjc3NWYzMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2xvYmFsLmgKKysrIGIvaW5jbHVkZS9nbG9iYWwuaApAQCAtMzMsNCArMzMsOCBAQAogZXh0ZXJuIERXT1JEIFZJUlRVQUxfR2V0UGFnZVNpemUodm9pZCk7CiBleHRlcm4gRFdPUkQgVklSVFVBTF9HZXRHcmFudWxhcml0eSh2b2lkKTsKIAordHlwZWRlZiBCT09MMzIgKCpIQU5ETEVSUFJPQykoTFBWT0lELCBMUFZPSUQpOworZXh0ZXJuIEJPT0wzMiBWSVJUVUFMX1NldEZhdWx0SGFuZGxlcihMUFZPSUQgYWRkciwgSEFORExFUlBST0MgcHJvYywgTFBWT0lEIGFyZyk7CitleHRlcm4gQk9PTDMyIFZJUlRVQUxfSGFuZGxlRmF1bHQoTFBWT0lEIGFkZHIpOworCiAjZW5kaWYgIC8qIF9fV0lORV9HTE9CQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oZWFkZXIuaCBiL2luY2x1ZGUvaGVhZGVyLmgKaW5kZXggNDk4ZWEwZi4uNzEwYjFlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oZWFkZXIuaAorKysgYi9pbmNsdWRlL2hlYWRlci5oCkBAIC00Nyw2ICs0Nyw2IEBACiB9IEhFQURFUl9JTkZPOwogCiAKLXZvaWQgSEVBREVSX1JlZ2lzdGVyKCB2b2lkICk7CitleHRlcm4gdm9pZCBIRUFERVJfUmVnaXN0ZXIgKHZvaWQpOwogCiAjZW5kaWYgLyogX19XSU5FX0hFQURFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tb2R1bGUuaCBiL2luY2x1ZGUvbW9kdWxlLmgKaW5kZXggYzBiYjI3Ni4uN2FkZDI5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tb2R1bGUuaAorKysgYi9pbmNsdWRlL21vZHVsZS5oCkBAIC0xNDIsOCArMTQyLDYgQEAKIGV4dGVybiBGQVJQUk9DMTYgTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCBjb25zdCBjaGFyICpuYW1lICk7CiBleHRlcm4gRkFSUFJPQzE2IFdJTkFQSSBXSU4zMl9HZXRQcm9jQWRkcmVzczE2KCBITU9EVUxFMzIgaG1vZHVsZSwgTFBDU1RSIG5hbWUgKTsKIAotdHlwZWRlZiBIR0xPQkFMMTYgKENBTExCQUNLICpSRVNPVVJDRUhBTkRMRVIxNikoSEdMT0JBTDE2LEhNT0RVTEUxNixIUlNSQzE2KTsKLQogLyogbG9hZGVyL25lL21vZHVsZS5jICovCiBleHRlcm4gTkVfTU9EVUxFICpORV9HZXRQdHIoIEhNT0RVTEUxNiBoTW9kdWxlICk7CiBleHRlcm4gdm9pZCBORV9EdW1wTW9kdWxlKCBITU9EVUxFMTYgaE1vZHVsZSApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub25jbGllbnQuaCBiL2luY2x1ZGUvbm9uY2xpZW50LmgKaW5kZXggMmJjNTk1YS4uN2EzYjA0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ub25jbGllbnQuaAorKysgYi9pbmNsdWRlL25vbmNsaWVudC5oCkBAIC05LDE2ICs5LDE2IEBACiAKICNpbmNsdWRlICJ3aW4uaCIKIAotZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNQYWludCggSFdORDMyIGh3bmQgLCBIUkdOMzIgY2xpcCk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0FjdGl2YXRlKCBXTkQgKnB3bmQsIFdQQVJBTTE2IHdQYXJhbSApOwotZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNDYWxjU2l6ZSggV05EICpwV25kLCBSRUNUMzIgKndpblJlY3QgKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZU5DSGl0VGVzdCggSFdORDMyIGh3bmQsIFBPSU5UMTYgcHQgKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRvd24oIFdORCogcFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoIFdORCAqcFduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZVN5c0NvbW1hbmQoIEhXTkQzMiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIFBPSU5UMTYgcHQgKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZVNldEN1cnNvciggSFdORDMyIGh3bmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApOwotZXh0ZXJuIHZvaWQgTkNfRHJhd1N5c0J1dHRvbiggSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24gKTsKLWV4dGVybiB2b2lkIE5DX0RyYXdTeXNCdXR0b245NSggSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24gKTsKK2V4dGVybiBMT05HICAgTkNfSGFuZGxlTkNQYWludCggSFdORDMyIGh3bmQgLCBIUkdOMzIgY2xpcCk7CitleHRlcm4gTE9ORyAgIE5DX0hhbmRsZU5DQWN0aXZhdGUoIFdORCAqcHduZCwgV1BBUkFNMTYgd1BhcmFtICk7CitleHRlcm4gTE9ORyAgIE5DX0hhbmRsZU5DQ2FsY1NpemUoIFdORCAqcFduZCwgUkVDVDMyICp3aW5SZWN0ICk7CitleHRlcm4gTE9ORyAgIE5DX0hhbmRsZU5DSGl0VGVzdCggSFdORDMyIGh3bmQsIFBPSU5UMTYgcHQgKTsKK2V4dGVybiBMT05HICAgTkNfSGFuZGxlTkNMQnV0dG9uRG93biggV05EKiBwV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKTsKK2V4dGVybiBMT05HICAgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrKCBXTkQgKnBXbmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CitleHRlcm4gTE9ORyAgIE5DX0hhbmRsZVN5c0NvbW1hbmQoIEhXTkQzMiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIFBPSU5UMTYgcHQgKTsKK2V4dGVybiBMT05HICAgTkNfSGFuZGxlU2V0Q3Vyc29yKCBIV05EMzIgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBMUEFSQU0gbFBhcmFtICk7CitleHRlcm4gdm9pZCAgIE5DX0RyYXdTeXNCdXR0b24oIEhXTkQzMiBod25kLCBIREMzMiBoZGMsIEJPT0wzMiBkb3duICk7CitleHRlcm4gQk9PTDMyIE5DX0RyYXdTeXNCdXR0b245NSggSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24gKTsKIGV4dGVybiBCT09MMzIgTkNfR2V0U3lzUG9wdXBQb3MoIFdORCogd25kUHRyLCBSRUNUMzIqIHJlY3QgKTsKIAogI2VuZGlmIC8qIF9fV0lORV9OT05DTElFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vbGVhdXRvLmggYi9pbmNsdWRlL29sZWF1dG8uaAppbmRleCA4YTBmMjY1Li42MWQ0MmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL29sZWF1dG8uaAorKysgYi9pbmNsdWRlL29sZWF1dG8uaApAQCAtMTEsNCArMTEsOCBAQAogVk9JRCBTeXNGcmVlU3RyaW5nMzIoQlNUUjMyKTsKICNkZWZpbmUgU3lzRnJlZVN0cmluZyBXSU5FTElCX05BTUUoU3lzRnJlZVN0cmluZykKIAordHlwZWRlZiBjaGFyIE9MRUNIQVI7Cit0eXBlZGVmIHZvaWQgSVR5cGVMaWI7Cit0eXBlZGVmIElUeXBlTGliICogTFBUWVBFTElCOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHJpbnQuaCBiL2luY2x1ZGUvcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2M1NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9wcmludC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisKK0hBTkRMRTE2IFdJTkFQSSBPcGVuSm9iKExQU1RSIGxwT3V0cHV0LCBMUFNUUiBscFRpdGxlLCBIREMxNiBoREMpOworaW50IFdJTkFQSSBDbG9zZUpvYihIQU5ETEUxNiBoSm9iKTsKK2ludCBXSU5BUEkgV3JpdGVTcG9vbChIQU5ETEUxNiBoSm9iLCBMUFNUUiBscERhdGEsIFdPUkQgY2NoKTsKK2ludCBXSU5BUEkgRGVsZXRlSm9iKEhBTkRMRTE2IGhKb2IsIFdPUkQgd05vdFVzZWQpOworaW50IFdJTkFQSSBTdGFydFNwb29sUGFnZShIQU5ETEUxNiBoSm9iKTsKK2ludCBXSU5BUEkgRW5kU3Bvb2xQYWdlKEhBTkRMRTE2IGhKb2IpOworRFdPUkQgV0lOQVBJIEdldFNwb29sSm9iKGludCBuT3B0aW9uLCBMT05HIHBhcmFtKTsKK2ludCBXSU5BUEkgV3JpdGVEaWFsb2coSEFORExFMTYgaEpvYiwgTFBTVFIgbHBNc2csIFdPUkQgY2NoTXNnKTsKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzZHJ2LmggYi9pbmNsdWRlL3BzZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0Nzg5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHNkcnYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqCVBvc3RzY3JpcHQgZHJpdmVyIGRlZmluaXRpb25zCisgKgorICoJQ29weXJpZ2h0IDE5OTggIEh1dyBEIE0gRGF2aWVzCisgKi8KKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAiZm9udC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgZmxvYXQJbGx4LCBsbHksIHVyeCwgdXJ5OworfSBBRk1CQk9YOworCit0eXBlZGVmIHN0cnVjdCBfdGFnQUZNTElHUyB7CisgICAgY2hhcgkJKnN1Y2Nlc3NvcjsKKyAgICBjaGFyCQkqbGlnYXR1cmU7CisgICAgc3RydWN0IF90YWdBRk1MSUdTCSpuZXh0OworfSBBRk1MSUdTOworCit0eXBlZGVmIHN0cnVjdCBfdGFnQUZNTUVUUklDUyB7CisgICAgaW50CQkJCUM7CQkJLyogY2hhcmFjdGVyICovICAKKyAgICBmbG9hdAkJCVdYOworICAgIGNoYXIJCQkqTjsJCQkvKiBuYW1lICovCisgICAgQUZNQkJPWAkJCUI7CisgICAgQUZNTElHUwkJCSpMOwkJCS8qIExpZ2F0dXJlcyAqLworICAgIHN0cnVjdCBfdGFnQUZNTUVUUklDUwkqbmV4dDsKK30gQUZNTUVUUklDUzsKKwordHlwZWRlZiBzdHJ1Y3QgX3RhZ0FGTSB7CisgICAgY2hhcgkJKkZvbnROYW1lOworICAgIGNoYXIJCSpGdWxsTmFtZTsKKyAgICBjaGFyCQkqRmFtaWx5TmFtZTsKKyAgICBpbnQJCQlXZWlnaHQ7CQkJLyogRldfTk9STUFMIGV0Yy4gKi8KKyAgICBmbG9hdAkJSXRhbGljQW5nbGU7CisgICAgQk9PTDMyCQlJc0ZpeGVkUGl0Y2g7CisgICAgZmxvYXQJCVVuZGVybGluZVBvc2l0aW9uOworICAgIGZsb2F0CQlVbmRlcmxpbmVUaGlja25lc3M7CisgICAgQUZNQkJPWAkJRm9udEJCb3g7CisgICAgZmxvYXQJCUNhcEhlaWdodDsKKyAgICBmbG9hdAkJWEhlaWdodDsKKyAgICBmbG9hdAkJQXNjZW5kZXI7CisgICAgZmxvYXQJCURlc2NlbmRlcjsKKyAgICBmbG9hdAkJQ2hhcldpZHRoc1syNTZdOworICAgIGludAkJCU51bW9mTWV0cmljczsKKyAgICBBRk1NRVRSSUNTCQkqTWV0cmljczsKKyAgICBzdHJ1Y3QgX3RhZ0FGTQkqbmV4dDsKK30gQUZNOyAvKiBDaGFyV2lkdGhzIGlzIGEgc2hvcnRjdXQgdG8gdGhlIFdYIHZhbHVlcyBvZiBudW1iZXJlZCBnbHlwaHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX3RhZ0ZvbnRGYW1pbHkgeworICAgIGNoYXIJCQkqRmFtaWx5TmFtZTsgLyogZmFtaWx5IG5hbWUgKi8KKyAgICBBRk0JCQkJKmFmbTsJICAgICAvKiBsaXN0IG9mIGFmbXMgZm9yIHRoaXMgZmFtaWx5ICovCisgICAgc3RydWN0IF90YWdGb250RmFtaWx5CSpuZXh0OyAgICAgICAvKiBuZXh0IGZhbWlseSAqLworfSBGb250RmFtaWx5OworCitleHRlcm4gRm9udEZhbWlseSAqUFNEUlZfQUZNRm9udExpc3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBBRk0JCQkqYWZtOworICAgIFRFWFRNRVRSSUMzMkEJdG07CisgICAgSU5UMzIJCXNpemU7CisgICAgZmxvYXQJCXNjYWxlOworICAgIElOVDMyCQllc2NhcGVtZW50OworICAgIEJPT0wzMgkJc2V0OwkJLyogSGF2ZSB3ZSBkb25lIGEgc2V0Zm9udCB5ZXQgKi8KK30gUFNGT05UOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgSEFORExFMTYJCWhKb2I7CisgICAgTFBTVFIJCW91dHB1dDsJCS8qIE91dHB1dCBmaWxlL3BvcnQgKi8KKyAgICBCT09MMzIgICAgICAgICAgICAgIGJhbmRpbmc7ICAgICAgICAvKiBIYXZlIHdlIHJlY2VpdmVkIGEgTkVYVEJBTkQgKi8KKyAgICBCT09MMzIJCU5lZWRQYWdlSGVhZGVyOyAvKiBQYWdlIGhlYWRlciBub3Qgc2VudCB5ZXQgKi8KKyAgICBJTlQzMgkJUGFnZU5vOworfSBKT0I7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUFNGT05UCQlmb250OwkJLyogQ3VycmVudCBQUyBmb250ICovCisgICAgSk9CCQkJam9iOworfSBQU0RSVl9QREVWSUNFOworCisKK2V4dGVybiBCT09MMzIgUFNEUlZfR2V0Rm9udE1ldHJpY3Modm9pZCk7CisKK2V4dGVybiBCT09MMzIgUFNEUlZfSW5pdCh2b2lkKTsKK2V4dGVybiBIRk9OVDE2IFBTRFJWX0ZPTlRfU2VsZWN0T2JqZWN0KCBEQyAqZGMsIEhGT05UMTYgaGZvbnQsIEZPTlRPQkogKmZvbnQpOworZXh0ZXJuIEJPT0wzMiBQU0RSVl9TZXRGb250KCBEQyAqZGMgKTsKKworZXh0ZXJuIElOVDMyIFBTRFJWX1dyaXRlSGVhZGVyKCBEQyAqZGMsIGNoYXIgKnRpdGxlLCBpbnQgbGVuICk7CitleHRlcm4gSU5UMzIgUFNEUlZfV3JpdGVGb290ZXIoIERDICpkYyApOworZXh0ZXJuIElOVDMyIFBTRFJWX1dyaXRlTmV3UGFnZSggREMgKmRjICk7CitleHRlcm4gSU5UMzIgUFNEUlZfV3JpdGVFbmRQYWdlKCBEQyAqZGMgKTsKK2V4dGVybiBCT09MMzIgUFNEUlZfV3JpdGVNb3ZlVG8oREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5KTsKK2V4dGVybiBCT09MMzIgUFNEUlZfV3JpdGVMaW5lVG8oREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5KTsKK2V4dGVybiBCT09MMzIgUFNEUlZfV3JpdGVTdHJva2UoREMgKmRjKTsKK2V4dGVybiBCT09MMzIgUFNEUlZfV3JpdGVSZWN0YW5nbGUoREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5LCBJTlQzMiB3aWR0aCwgCisJCQlJTlQzMiBoZWlnaHQpOworZXh0ZXJuIEJPT0wzMiBQU0RSVl9Xcml0ZVNldEZvbnQoREMgKmRjKTsKK2V4dGVybiBCT09MMzIgUFNEUlZfV3JpdGVTaG93KERDICpkYywgY2hhciAqc3RyLCBJTlQzMiBjb3VudCk7CitleHRlcm4gQk9PTDMyIFBTRFJWX1dyaXRlUmVlbmNvZGVGb250KERDICpkYyk7CisKKworCisKKworCisKKworZXh0ZXJuIEJPT0wzMiBQU0RSVl9FbnVtRGV2aWNlRm9udHMoIERDKiBkYywgTFBMT0dGT05UMTYgcGxmLCAKKwkJCQkgICAgICAgIERFVklDRUZPTlRFTlVNUFJPQyBwcm9jLCBMUEFSQU0gbHAgKTsKK2V4dGVybiBJTlQzMiBQU0RSVl9Fc2NhcGUoIERDICpkYywgSU5UMzIgbkVzY2FwZSwgSU5UMzIgY2JJbnB1dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdQVFIgbHBJbkRhdGEsIFNFR1BUUiBscE91dERhdGEgKTsKK2V4dGVybiBCT09MMzIgUFNEUlZfRXh0VGV4dE91dCggREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5LCBVSU5UMzIgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVDMyICpscHJlY3QsIExQQ1NUUiBzdHIsIFVJTlQzMiBjb3VudCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQzMiAqbHBEeCApOworZXh0ZXJuIEJPT0wzMiBQU0RSVl9HZXRUZXh0RXh0ZW50UG9pbnQoIERDICpkYywgTFBDU1RSIHN0ciwgSU5UMzIgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTSVpFMzIgc2l6ZSApOworZXh0ZXJuIEJPT0wzMiBQU0RSVl9HZXRUZXh0TWV0cmljcyggREMgKmRjLCBURVhUTUVUUklDMzJBICptZXRyaWNzICk7CitleHRlcm4gQk9PTDMyIFBTRFJWX0xpbmVUbyggREMgKmRjLCBJTlQzMiB4LCBJTlQzMiB5ICk7CitleHRlcm4gQk9PTDMyIFBTRFJWX01vdmVUb0V4KCBEQyAqZGMsIElOVDMyIHgsIElOVDMyIHksIExQUE9JTlQzMiBwdCApOworZXh0ZXJuIEhHRElPQkozMiBQU0RSVl9TZWxlY3RPYmplY3QoIERDICpkYywgSEdESU9CSjMyIGhhbmRsZSApOworCitleHRlcm4gQk9PTDMyIFBTRFJWX1JlY3RhbmdsZShEQyAqZGMsIElOVDMyIGxlZnQsIElOVDMyIHRvcCwgSU5UMzIgcmlnaHQsCisJCSAgICAgICBJTlQzMiBib3R0b20pOworZXh0ZXJuIEJPT0wzMiBQU0RSVl9FbGxpcHNlKERDICpkYywgSU5UMzIgbGVmdCwgSU5UMzIgdG9wLCBJTlQzMiByaWdodCwKKwkJICAgICAgIElOVDMyIGJvdHRvbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NobG9iai5oIGIvaW5jbHVkZS9zaGxvYmouaAppbmRleCA5ZDI3N2MxLi40MTFjYTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NobG9iai5oCisrKyBiL2luY2x1ZGUvc2hsb2JqLmgKQEAgLTI0Nyw2ICsyNDcsODQgQEAKIAogRFdPUkQgV0lOQVBJIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QoTFBDTFNJRCxSRUZJSUQsTFBWT0lEKik7CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNIQnJvd3NlRm9yRm9sZGVyIEFQSQorICovCisKK3R5cGVkZWYgaW50IChDQUxMQkFDSyogQkZGQ0FMTEJBQ0spKEhXTkQzMiBod25kLCBVSU5UMzIgdU1zZywgTFBBUkFNIGxQYXJhbSwgTFBBUkFNIGxwRGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0JST1dTRUlORk8zMkEgeworICAgIEhXTkQzMiAgICAgICAgaHduZE93bmVyOworICAgIExQQ0lURU1JRExJU1QgcGlkbFJvb3Q7CisgICAgTFBTVFIgICAgICAgICBwc3pEaXNwbGF5TmFtZTsKKyAgICBMUENTVFIgICAgICAgIGxwc3pUaXRsZTsKKyAgICBVSU5UMzIgICAgICAgIHVsRmxhZ3M7CisgICAgQkZGQ0FMTEJBQ0sgICBscGZuOworICAgIExQQVJBTSAgICAgICAgbFBhcmFtOworICAgIGludCAgICAgICAgICAgaUltYWdlOworfSBCUk9XU0VJTkZPMzJBLCAqUEJST1dTRUlORk8zMkEsICpMUEJST1dTRUlORk8zMkE7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0JST1dTRUlORk8zMlcgeworICAgIEhXTkQzMiAgICAgICAgaHduZE93bmVyOworICAgIExQQ0lURU1JRExJU1QgcGlkbFJvb3Q7CisgICAgTFBXU1RSICAgICAgICBwc3pEaXNwbGF5TmFtZTsKKyAgICBMUENXU1RSICAgICAgIGxwc3pUaXRsZTsKKyAgICBVSU5UMzIgICAgICAgIHVsRmxhZ3M7CisgICAgQkZGQ0FMTEJBQ0sgICBscGZuOworICAgIExQQVJBTSAgICAgICAgbFBhcmFtOworICAgIGludCAgICAgICAgICAgaUltYWdlOworfSBCUk9XU0VJTkZPMzJXLCAqUEJST1dTRUlORk8zMlcsICpMUEJST1dTRUlORk8zMlc7IAorCisjZGVmaW5lIEJST1dTRUlORk8gICBXSU5FTElCX05BTUVfQVcoQlJPV1NFSU5GTykKKyNkZWZpbmUgUEJST1dTRUlORk8gIFdJTkVMSUJfTkFNRV9BVyhQQlJPV1NFSU5GTykKKyNkZWZpbmUgTFBCUk9XU0VJTkZPIFdJTkVMSUJfTkFNRV9BVyhMUEJST1dTRUlORk8pCisKKy8vIEJyb3dzaW5nIGZvciBkaXJlY3RvcnkuCisjZGVmaW5lIEJJRl9SRVRVUk5PTkxZRlNESVJTICAgMHgwMDAxCisjZGVmaW5lIEJJRl9ET05UR09CRUxPV0RPTUFJTiAgMHgwMDAyCisjZGVmaW5lIEJJRl9TVEFUVVNURVhUICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEJJRl9SRVRVUk5GU0FOQ0VTVE9SUyAgMHgwMDA4CisjZGVmaW5lIEJJRl9FRElUQk9YICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEJJRl9WQUxJREFURSAgICAgICAgICAgMHgwMDIwCisgCisjZGVmaW5lIEJJRl9CUk9XU0VGT1JDT01QVVRFUiAgMHgxMDAwCisjZGVmaW5lIEJJRl9CUk9XU0VGT1JQUklOVEVSICAgMHgyMDAwCisjZGVmaW5lIEJJRl9CUk9XU0VJTkNMVURFRklMRVMgMHg0MDAwCisKKy8vIG1lc3NhZ2UgZnJvbSBicm93c2VyCisjZGVmaW5lIEJGRk1fSU5JVElBTElaRUQgICAgICAgIDEKKyNkZWZpbmUgQkZGTV9TRUxDSEFOR0VEICAgICAgICAgMgorI2RlZmluZSBCRkZNX1ZBTElEQVRFRkFJTEVEQSAgICAzICAgLy8gbFBhcmFtOnN6UGF0aCByZXQ6MShjb250KSwwKEVuZERpYWxvZykKKyNkZWZpbmUgQkZGTV9WQUxJREFURUZBSUxFRFcgICAgNCAgIC8vIGxQYXJhbTp3elBhdGggcmV0OjEoY29udCksMChFbmREaWFsb2cpCisKKy8vIG1lc3NhZ2VzIHRvIGJyb3dzZXIKKyNkZWZpbmUgQkZGTV9TRVRTVEFUVVNURVhUQSAgICAgKFdNX1VTRVIrMTAwKQorI2RlZmluZSBCRkZNX0VOQUJMRU9LICAgICAgICAgICAoV01fVVNFUisxMDEpCisjZGVmaW5lIEJGRk1fU0VUU0VMRUNUSU9OQSAgICAgIChXTV9VU0VSKzEwMikKKyNkZWZpbmUgQkZGTV9TRVRTRUxFQ1RJT05XICAgICAgKFdNX1VTRVIrMTAzKQorI2RlZmluZSBCRkZNX1NFVFNUQVRVU1RFWFRXICAgICAoV01fVVNFUisxMDQpCisKK0xQSVRFTUlETElTVCBXSU5BUEkgU0hCcm93c2VGb3JGb2xkZXIzMkEoTFBCUk9XU0VJTkZPMzJBIGxwYmkpOworLyoKK0xQSVRFTUlETElTVCBXSU5BUEkgU0hCcm93c2VGb3JGb2xkZXIzMlcoTFBCUk9XU0VJTkZPMzJXIGxwYmkpOworCisjaWZkZWYgVU5JQ09ERQorI2RlZmluZSBTSEJyb3dzZUZvckZvbGRlciAgIFNIQnJvd3NlRm9yRm9sZGVyVworI2RlZmluZSBCRkZNX1NFVFNUQVRVU1RFWFQgIEJGRk1fU0VUU1RBVFVTVEVYVFcKKyNkZWZpbmUgQkZGTV9TRVRTRUxFQ1RJT04gICBCRkZNX1NFVFNFTEVDVElPTlcKKworI2RlZmluZSBCRkZNX1ZBTElEQVRFRkFJTEVEIEJGRk1fVkFMSURBVEVGQUlMRURXCisjZWxzZQorI2RlZmluZSBTSEJyb3dzZUZvckZvbGRlciAgIFNIQnJvd3NlRm9yRm9sZGVyQQorI2RlZmluZSBCRkZNX1NFVFNUQVRVU1RFWFQgIEJGRk1fU0VUU1RBVFVTVEVYVEEKKyNkZWZpbmUgQkZGTV9TRVRTRUxFQ1RJT04gICBCRkZNX1NFVFNFTEVDVElPTkEKKworI2RlZmluZSBCRkZNX1ZBTElEQVRFRkFJTEVEIEJGRk1fVkFMSURBVEVGQUlMRURBIAorI2VuZGlmIAorKi8KKworCiAjdW5kZWYgUFVSRQogI3VuZGVmIEZBUgogI3VuZGVmIFRISVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2lnX2NvbnRleHQuaCBiL2luY2x1ZGUvc2lnX2NvbnRleHQuaAppbmRleCA1MGRlZjk0Li41OTVkOTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NpZ19jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9zaWdfY29udGV4dC5oCkBAIC0yMTcsOCArMjE3LDExIEBACiAjZGVmaW5lIEZMX3NpZyhjb250ZXh0KSAgICAgICgqKFdPUkQqKSZFRkxfc2lnKGNvbnRleHQpKQogCiAjaWZkZWYgRlNfc2lnCi0jZGVmaW5lIEhBTkRMRVJfSU5JVCgpIFNFVF9GUyhGU19zaWcoSEFORExFUl9DT05URVhUKSkKLSNlbHNlIEZTX3NpZworZXh0ZXJuIFdPUkQgQ0FMTFRPMTZfQ3VycmVudF9mczsKKyNkZWZpbmUgSEFORExFUl9JTklUKCkgXAorICAgIFNFVF9GUyhJU19TRUxFQ1RPUl9TWVNURU0oQ1Nfc2lnKEhBTkRMRVJfQ09OVEVYVCkpID8gXAorICAgICAgICAgICBGU19zaWcoSEFORExFUl9DT05URVhUKSA6IENBTExUTzE2X0N1cnJlbnRfZnMpCisjZWxzZQogI2RlZmluZSBIQU5ETEVSX0lOSVQoKSAvKiBub3RoaW5nICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zbm9vcC5oIGIvaW5jbHVkZS9zbm9vcC5oCmluZGV4IDBjNWZkNWYuLjI5YTdiOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc25vb3AuaAorKysgYi9pbmNsdWRlL3Nub29wLmgKQEAgLTEsOCArMSwxMyBAQAogLyogCi0gKiBEZWZpbml0aW9ucyBmb3IgaW50ZXItd2luMzItZGxsIHNub29waW5nCisgKiBEZWZpbml0aW9ucyBmb3IgaW50ZXItZGxsIHNub29waW5nCiAgKi8KICNpZm5kZWYgX19XSU5FX1NOT09QX0gKICNkZWZpbmUgX19XSU5FX1NOT09QX0gKLWV4dGVybiB2b2lkIFNOT09QX1JlZ2lzdGVyRExMKEhNT0RVTEUzMiBobW9kLExQQ1NUUiBuYW1lLERXT1JEIG5yb2ZvcmRpbmFscyk7Ci1leHRlcm4gRkFSUFJPQzMyIFNOT09QX0dldFByb2NBZGRyZXNzMzIoSE1PRFVMRTMyIGhtb2QsTFBDU1RSIG5hbWUsRFdPUkQgb3JkaW5hbCxGQVJQUk9DMzIgb3JpZ2Z1bik7CisKKyNpbmNsdWRlICJtb2R1bGUuaCIKKworZXh0ZXJuIHZvaWQgU05PT1BfUmVnaXN0ZXJETEwoSE1PRFVMRTMyLExQQ1NUUixEV09SRCk7CitleHRlcm4gRkFSUFJPQzMyIFNOT09QX0dldFByb2NBZGRyZXNzMzIoSE1PRFVMRTMyLExQQ1NUUixEV09SRCxGQVJQUk9DMzIpOworZXh0ZXJuIHZvaWQgU05PT1AxNl9SZWdpc3RlckRMTChORV9NT0RVTEUqLExQQ1NUUik7CitleHRlcm4gRkFSUFJPQzE2IFNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNihITU9EVUxFMTYsRFdPUkQsRkFSUFJPQzE2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90aHJlYWQuaCBiL2luY2x1ZGUvdGhyZWFkLmgKaW5kZXggMDk2ZWFkZi4uOWU5NWQyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90aHJlYWQuaAorKysgYi9pbmNsdWRlL3RocmVhZC5oCkBAIC03MCw3ICs3MCw3IEBACiAgICAgRFdPUkQgICAgICAgICAgY3VyX3N0YWNrOyAgICAgIC8qICA4MCBDdXJyZW50IHN0YWNrICh3YXM6IHVua25vd24pICovCiAgICAgRFdPUkQgICAgICAgICAgdW5rbm93bjNbMl07ICAgIC8qICA4NCBVbmtub3duICovCiAgICAgV09SRCAgICAgICAgICAgY3VycmVudF9zczsgICAgIC8qICA4YyBBbm90aGVyIDE2LWJpdCBzdGFjayBzZWxlY3RvciAqLwotICAgIFdPUkQgICAgICAgICAgIHBhZDI7ICAgICAgICAgICAvKiAgOGUgKi8KKyAgICBXT1JEICAgICAgICAgICBzYXZlZF9mczsgICAgICAgLyogIDhlIFNhdmVkIDE2LWJpdCBGUyAod2FzOiBwYWQyKSAqLwogICAgIHZvaWQgICAgICAgICAgKnNzX3RhYmxlOyAgICAgICAvKiAgOTAgUG9pbnRlciB0byBpbmZvIGFib3V0IDE2LWJpdCBzdGFjayAqLwogICAgIFdPUkQgICAgICAgICAgIHRodW5rX3NzOyAgICAgICAvKiAgOTQgWWV0IGFub3RoZXIgMTYtYml0IHN0YWNrIHNlbGVjdG9yICovCiAgICAgV09SRCAgICAgICAgICAgcGFkMzsgICAgICAgICAgIC8qICA5NiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90b29sYmFyLmggYi9pbmNsdWRlL3Rvb2xiYXIuaAppbmRleCAxNGVjZDg0Li40MDdjMzMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Rvb2xiYXIuaAorKysgYi9pbmNsdWRlL3Rvb2xiYXIuaApAQCAtMjcsNyArMjcsNiBAQAogICAgIERXT1JEICAgICAgZHdTdHJ1Y3RTaXplOyAgIC8qIHNpemUgb2YgVEJCVVRUT04gc3RydWN0ICovCiAgICAgSU5UMzIgICAgICBuSGVpZ2h0OyAgICAgICAgLyogaGVpZ2h0IG9mIHRoZSB0b29sYmFyICovCiAgICAgSU5UMzIgICAgICBuV2lkdGg7ICAgICAgICAgLyogd2lkdGggb2YgdGhlIHRvb2xiYXIgKi8KLSAgICBJTlQzMiAgICAgIG5CdXR0b25Ub3A7ICAgICAvKiB0b3Agb2YgdGhlIGJ1dHRvbiByZWN0YW5nbGUgKi8KICAgICBJTlQzMiAgICAgIG5CdXR0b25IZWlnaHQ7CiAgICAgSU5UMzIgICAgICBuQnV0dG9uV2lkdGg7CiAgICAgSU5UMzIgICAgICBuQml0bWFwSGVpZ2h0OwpAQCAtNDIsMTIgKzQxLDE0IEBACiAgICAgQk9PTDMyICAgICBiQ2FwdHVyZWQ7CiAgICAgSU5UMzIgICAgICBuQnV0dG9uRG93bjsKICAgICBJTlQzMiAgICAgIG5PbGRIaXQ7CisgICAgSU5UMzIgICAgICBuSG90SXRlbTsgICAgICAgIC8qIGluZGV4IG9mIHRoZSAiaG90IiBpdGVtICovCiAKICAgICBISU1BR0VMSVNUIGhpbWxEZWY7ICAgICAgICAgLyogZGVmYXVsdCBpbWFnZSBsaXN0ICovCiAgICAgSElNQUdFTElTVCBoaW1sSG90OyAgICAgICAgIC8qIGhvdCBpbWFnZSBsaXN0ICovCiAgICAgSElNQUdFTElTVCBoaW1sRGlzOyAgICAgICAgIC8qIGRpc2FibGVkIGltYWdlIGxpc3QgKi8KICAgICBIV05EMzIgICAgIGh3bmRUb29sVGlwOyAgICAgLyogaGFuZGxlIHRvIHRvb2wgdGlwIGNvbnRyb2wgKi8KICAgICBIV05EMzIgICAgIGh3bmROb3RpZnk7ICAgICAgLyogaGFuZGxlIHRvIHRoZSB3aW5kb3cgdGhhdCBnZXRzIG5vdGlmaWNhdGlvbnMgKi8KKyAgICBCT09MMzIgICAgIGJUcmFuc3BhcmVudDsgICAgLyogYmFja2dyb3VuZCB0cmFuc3BhcmVuY3kgZmxhZyAqLwogCiAgICAgVEJVVFRPTl9JTkZPICpidXR0b25zOwogICAgIENIQVIgICAgICAgICAqKnN0cmluZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZlcnNpb24uaCBiL2luY2x1ZGUvdmVyc2lvbi5oCmluZGV4IDVhMDkyZTMuLmFiYjliNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0xICsxIEBACi0jZGVmaW5lIFdJTkVfUkVMRUFTRV9JTkZPICJXaW5lIHJlbGVhc2UgOTgwNjE0IgorI2RlZmluZSBXSU5FX1JFTEVBU0VfSU5GTyAiV2luZSByZWxlYXNlIDk4MDYyOCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luZG93cy5oIGIvaW5jbHVkZS93aW5kb3dzLmgKaW5kZXggOTExOWU0MS4uNmI3YmZjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5kb3dzLmgKKysrIGIvaW5jbHVkZS93aW5kb3dzLmgKQEAgLTQ2NSw2ICs0NjUsOSBAQAogI2RlZmluZSBIVEdST1dCT1ggICAgICAgICAgIEhUU0laRQogI2RlZmluZSBIVFJFRFVDRSAgICAgICAgICAgIEhUTUlOQlVUVE9OCiAjZGVmaW5lIEhUWk9PTSAgICAgICAgICAgICAgSFRNQVhCVVRUT04KKyNkZWZpbmUgSFRPQkpFQ1QgICAgICAgICAgICAxOQorI2RlZmluZSBIVENMT1NFICAgICAgICAgICAgIDIwCisjZGVmaW5lIEhUSEVMUCAgICAgICAgICAgICAgMjEKIAogICAvKiBXTV9TWVNDT01NQU5EIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBTQ19TSVpFIC8qIGF0IGxlYXN0IEhQLVVYOiBhbHJlYWR5IGRlZmluZWQgaW4gL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCAqLwpAQCAtNTQ0Miw2ICs1NDQ1LDU0IEBACiBERUNMX1dJTkVMSUJfVFlQRV9BVyhERVZNT0RFKQogREVDTF9XSU5FTElCX1RZUEVfQVcoTFBERVZNT0RFKQogCisjZGVmaW5lIERNX1VQREFURQkxCisjZGVmaW5lIERNX0NPUFkJCTIKKyNkZWZpbmUgRE1fUFJPTVBUCTQKKyNkZWZpbmUgRE1fTU9ESUZZCTgKKworI2RlZmluZSBETV9PUklFTlRBVElPTgkJMHgwMDAwMDAwMUwKKyNkZWZpbmUgRE1fUEFQRVJTSVpFCQkweDAwMDAwMDAyTAorI2RlZmluZSBETV9QQVBFUkxFTkdUSAkJMHgwMDAwMDAwNEwKKyNkZWZpbmUgRE1fUEFQRVJXSURUSAkJMHgwMDAwMDAwOEwKKyNkZWZpbmUgRE1fU0NBTEUJCTB4MDAwMDAwMTBMCisjZGVmaW5lIERNX0NPUElFUwkJMHgwMDAwMDEwMEwKKyNkZWZpbmUgRE1fREVGQVVMVFNPVVJDRQkweDAwMDAwMjAwTAorI2RlZmluZSBETV9QUklOVFFVQUxJVFkJCTB4MDAwMDA0MDBMCisjZGVmaW5lIERNX0NPTE9SCQkweDAwMDAwODAwTAorI2RlZmluZSBETV9EVVBMRVgJCTB4MDAwMDEwMDBMCisKKy8qIGV0Yy4uLi4gKi8KKworI2RlZmluZSBETU9SSUVOVF9QT1JUUkFJVAkxCisjZGVmaW5lIERNT1JJRU5UX0xBTkRTQ0FQRQkyCisKKyNkZWZpbmUgRE1QQVBFUl9MRVRURVIJMQorI2RlZmluZSBETVBBUEVSX0EzCTgKKyNkZWZpbmUgRE1QQVBFUl9BNAk5CisjZGVmaW5lIERNUEFQRVJfQTUJMTEKKworI2RlZmluZSBETUJJTl9VUFBFUgkxCisjZGVmaW5lIERNQklOX0FVVE8JNworCisjZGVmaW5lIERDX0ZJRUxEUwkJMQorI2RlZmluZSBEQ19QQVBFUlMJCTIKKyNkZWZpbmUgRENfUEFQRVJTSVpFCQkzCisjZGVmaW5lIERDX01JTkVYVEVOVAkJNAorI2RlZmluZSBEQ19NQVhFWFRFTlQJCTUKKyNkZWZpbmUgRENfQklOUwkJCTYKKyNkZWZpbmUgRENfRFVQTEVYCQk3CisjZGVmaW5lIERDX1NJWkUJCQk4CisjZGVmaW5lIERDX0VYVFJBCQk5CisjZGVmaW5lIERDX1ZFUlNJT04JCTEwCisjZGVmaW5lIERDX0RSSVZFUgkJMTEKKyNkZWZpbmUgRENfQklOTkFNRVMJCTEyCisjZGVmaW5lIERDX0VOVU1SRVNPTFVUSU9OUwkxMworI2RlZmluZSBEQ19GSUxFREVQRU5ERU5DSUVTCTE0CisjZGVmaW5lIERDX1RSVUVUWVBFCQkxNQorI2RlZmluZSBEQ19QQVBFUk5BTUVTCQkxNgorI2RlZmluZSBEQ19PUklFTlRBVElPTgkJMTcKKyNkZWZpbmUgRENfQ09QSUVTCQkxOAorCiB0eXBlZGVmIHN0cnVjdCBfUFJJTlRFUl9ERUZBVUxUUzMyQSB7CiAgICAgTFBTVFIgICAgICAgIHBEYXRhdHlwZTsKICAgICBMUERFVk1PREUzMkEgcERldk1vZGU7CkBAIC02MzI2LDYgKzYzNzcsNyBAQAogI2RlZmluZSAgICAgRmluZFJlc291cmNlRXggV0lORUxJQl9OQU1FX0FXKEZpbmRSZXNvdXJjZUV4KQogQk9PTDMyICAgICAgV0lOQVBJIEZsdXNoQ29uc29sZUlucHV0QnVmZmVyKEhBTkRMRTMyKTsKIEJPT0wzMiAgICAgIFdJTkFQSSBGbHVzaEZpbGVCdWZmZXJzKEhGSUxFMzIpOworQk9PTDMyICAgICAgV0lOQVBJIEZsdXNoVmlld09mRmlsZShMUENWT0lELCBEV09SRCk7CiBEV09SRCAgICAgICBXSU5BUEkgRm9ybWF0TWVzc2FnZTMyQShEV09SRCxMUENWT0lELERXT1JELERXT1JELExQU1RSLAogCQkJCSAgICBEV09SRCxMUERXT1JEKTsKICNkZWZpbmUgICAgIEZvcm1hdE1lc3NhZ2UgV0lORUxJQl9OQU1FX0FXKEZvcm1hdE1lc3NhZ2UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbmVycm9yLmggYi9pbmNsdWRlL3dpbmVycm9yLmgKaW5kZXggZDViMmNmYy4uNDQxZjgzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5lcnJvci5oCisrKyBiL2luY2x1ZGUvd2luZXJyb3IuaApAQCAtNzAsMTcgKzcwLDQ3IEBACiAjZGVmaW5lIEVSUk9SX0lOVkFMSURfUFJJTlRFUl9OQU1FICAxODAxCiAKIC8qIEhSRVNVTFQgdmFsdWVzIGZvciBPTEUsIFNIRUxMIGFuZCBvdGhlciBJbnRlcmZhY2Ugc3R1ZmYgKi8KKy8qIHRoZSBjb2RlcyA0MDAwLTQwZmYgYXJlIHJlc2VydmVkIGZvciBPTEUgKi8KICNkZWZpbmUJTk9FUlJPUgkJCQkwCiAjZGVmaW5lCVNfT0sJCQkJMAotI2RlZmluZQlFX0ZBSUwJCQkJMHg4MDAwMDAwOAorCisKICNkZWZpbmUJRV9VTkVYUEVDVEVECQkJMHg4MDAwRkZGRgogCisjZGVmaW5lIEVfTk9USU1QTAkJCTB4ODAwMDQwMDEKKyNkZWZpbmUgRV9OT0lOVEVSRkFDRQkJCTB4ODAwMDQwMDIKKyNkZWZpbmUgRV9QT0lOVEVSCQkJMHg4MDAwNDAwMworI2RlZmluZSBFX0FCT1JUCQkJCTB4ODAwMDQwMDQKKyNkZWZpbmUgRV9GQUlMCQkJCTB4ODAwMDQwMDUKKworLyojZGVmaW5lIENPX0VfSU5JVF9UTFMJCQkweDgwMDA0MDA2CisjZGVmaW5lIENPX0VfSU5JVF9TSEFSRURfQUxMT0NBVE9SCTB4ODAwMDQwMDcKKyNkZWZpbmUgQ09fRV9JTklUX01FTU9SWV9BTExPQ0FUT1IJMHg4MDAwNDAwOAorI2RlZmluZSBDT19FX0lOSVRfQ0xBU1NfQ0FDSEUJCTB4ODAwMDQwMDkKKyNkZWZpbmUgQ09fRV9JTklUX1JQQ19DSEFOTkVMCQkweDgwMDA0MDBBCisjZGVmaW5lIENPX0VfSU5JVF9UTFNfU0VUX0NIQU5ORUxfQ09OVFJPTAkweDgwMDA0MDBCCisjZGVmaW5lIENPX0VfSU5JVF9UTFNfQ0hBTk5FTF9DT05UUk9MCTB4ODAwMDQwMEMKKyNkZWZpbmUgQ09fRV9JTklUX1VOQUNDRVBURURfVVNFUl9BTExPQ0FUT1IJMHg4MDAwNDAwRAorI2RlZmluZSBDT19FX0lOSVRfU0NNX01VVEVYX0VYSVNUUwkweDgwMDA0MDBFCisjZGVmaW5lIENPX0VfSU5JVF9TQ01fRklMRV9NQVBQSU5HX0VYSVNUUwkweDgwMDA0MDBGCisjZGVmaW5lIENPX0VfSU5JVF9TQ01fTUFQX1ZJRVdfT0ZfRklMRQkweDgwMDA0MDEwCisjZGVmaW5lIENPX0VfSU5JVF9TQ01fRVhFQ19GQUlMVVJFCTB4ODAwMDQwMTEKKyNkZWZpbmUgQ09fRV9JTklUX09OTFlfU0lOR0xFX1RIUkVBREVECTB4ODAwMDQwMTIgKi8KKworCiAjZGVmaW5lCU9MRV9FX0VOVU1fTk9NT1JFCQkweDgwMDQwMDAyCiAjZGVmaW5lCUNMQVNTX0VfQ0xBU1NOT1RBVkFJTEFCTEUJMHg4MDA0MDExMQogCisjZGVmaW5lIEVfQUNDRVNTREVOSUVECQkJMHg4MDA3MDAwNQorI2RlZmluZSBFX0hBTkRMRQkJCTB4ODAwNzAwMDYKICNkZWZpbmUJRV9PVVRPRk1FTU9SWQkJCTB4ODAwNzAwMEUKICNkZWZpbmUJRV9JTlZBTElEQVJHCQkJMHg4MDA3MDA1NwogCisvLyNkZWZpbmUgT0xFX0VfRklSU1QgMHg4MDA0MDAwMEwKKy8vI2RlZmluZSBPTEVfRV9MQVNUICAweDgwMDQwMEZGTAorLy8jZGVmaW5lIE9MRV9TX0ZJUlNUIDB4MDAwNDAwMDBMCisvLyNkZWZpbmUgT0xFX1NfTEFTVCAgMHgwMDA0MDBGRkwKKwogI2RlZmluZSBTVEdfRV9JTlZBTElERlVOQ1RJT04JCTB4ODAwMzAwMDEKICNkZWZpbmUgU1RHX0VfRklMRU5PVEZPVU5ECQkweDgwMDMwMDAyCiAjZGVmaW5lIFNUR19FX1BBVEhOT1RGT1VORAkJMHg4MDAzMDAwMwpAQCAtMTE1LDQgKzE0NSwxNSBAQAogI2RlZmluZSBTVEdfRV9OT1RGSUxFQkFTRURTVE9SQUdFCTB4ODAwMzAxMDcKICNkZWZpbmUgU1RHX0VfRVhUQU5UTUFSU0hBTExJTkdTCTB4ODAwMzAxMDgKIAorLyogYWx0ZW4gdmVyc2lvbmVuCisjZGVmaW5lIEVfTk9USU1QTAkJCTB4ODAwMDAwMDEKKyNkZWZpbmUgRV9PVVRPRk1FTU9SWQkJCTB4ODAwMDAwMDIKKyNkZWZpbmUgRV9JTlZBTElEQVJHCQkJMHg4MDAwMDAwMworI2RlZmluZSBFX05PSU5URVJGQUNFCQkJMHg4MDAwMDAwNAorI2RlZmluZSBFX1BPSU5URVIJCQkweDgwMDAwMDA1CisjZGVmaW5lIEVfSEFORExFCQkJMHg4MDAwMDAwNgorI2RlZmluZSBFX0FCT1JUCQkJCTB4ODAwMDAwMDcKKyNkZWZpbmUJRV9GQUlMCQkJCTB4ODAwMDAwMDgKKyNkZWZpbmUgRV9BQ0NFU1NERU5JRUQJCQkweDgwMDAwMDA5ICovCisKICNlbmRpZiAgLyogX19XSU5FX1dJTkVSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luaW9jdGwuaCBiL2luY2x1ZGUvd2luaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODhlMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS93aW5pb2N0bC5oCkBAIC0wLDAgKzEsMjU0IEBACisjaWZuZGVmIF9fV0lORV9XSU5JT0NUTF9ICisjZGVmaW5lIF9fV0lORV9XSU5JT0NUTF9ICisKKyNpbmNsdWRlICJ3aW5udC5oIgorCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBDVExfQ09ERSggRGV2aWNlVHlwZSwgRnVuY3Rpb24sIE1ldGhvZCwgQWNjZXNzICkgKCAgICAgICAgICAgICAgICAgXAorICAgIChEV09SRCkoKERldmljZVR5cGUpIDw8IDE2KSB8ICgoQWNjZXNzKSA8PCAxNCkgfCAoKEZ1bmN0aW9uKSA8PCAyKSB8IChNZXRob2QpIFwKKykKKworI2RlZmluZSBERVZJQ0VfVFlQRSBEV09SRAorCisjZGVmaW5lIEZJTEVfREVWSUNFX0JFRVAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGSUxFX0RFVklDRV9DRF9ST00gICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRklMRV9ERVZJQ0VfQ0RfUk9NX0ZJTEVfU1lTVEVNICAweDAwMDAwMDAzCisjZGVmaW5lIEZJTEVfREVWSUNFX0NPTlRST0xMRVIgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBGSUxFX0RFVklDRV9EQVRBTElOSyAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgRklMRV9ERVZJQ0VfREZTICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEZJTEVfREVWSUNFX0RJU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBGSUxFX0RFVklDRV9ESVNLX0ZJTEVfU1lTVEVNICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRklMRV9ERVZJQ0VfRklMRV9TWVNURU0gICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEZJTEVfREVWSUNFX0lOUE9SVF9QT1JUICAgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZSBGSUxFX0RFVklDRV9LRVlCT0FSRCAgICAgICAgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUgRklMRV9ERVZJQ0VfTUFJTFNMT1QgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lIEZJTEVfREVWSUNFX01JRElfSU4gICAgICAgICAgICAgMHgwMDAwMDAwZAorI2RlZmluZSBGSUxFX0RFVklDRV9NSURJX09VVCAgICAgICAgICAgIDB4MDAwMDAwMGUKKyNkZWZpbmUgRklMRV9ERVZJQ0VfTU9VU0UgICAgICAgICAgICAgICAweDAwMDAwMDBmCisjZGVmaW5lIEZJTEVfREVWSUNFX01VTFRJX1VOQ19QUk9WSURFUiAgMHgwMDAwMDAxMAorI2RlZmluZSBGSUxFX0RFVklDRV9OQU1FRF9QSVBFICAgICAgICAgIDB4MDAwMDAwMTEKKyNkZWZpbmUgRklMRV9ERVZJQ0VfTkVUV09SSyAgICAgICAgICAgICAweDAwMDAwMDEyCisjZGVmaW5lIEZJTEVfREVWSUNFX05FVFdPUktfQlJPV1NFUiAgICAgMHgwMDAwMDAxMworI2RlZmluZSBGSUxFX0RFVklDRV9ORVRXT1JLX0ZJTEVfU1lTVEVNIDB4MDAwMDAwMTQKKyNkZWZpbmUgRklMRV9ERVZJQ0VfTlVMTCAgICAgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIEZJTEVfREVWSUNFX1BBUkFMTEVMX1BPUlQgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBGSUxFX0RFVklDRV9QSFlTSUNBTF9ORVRDQVJEICAgIDB4MDAwMDAwMTcKKyNkZWZpbmUgRklMRV9ERVZJQ0VfUFJJTlRFUiAgICAgICAgICAgICAweDAwMDAwMDE4CisjZGVmaW5lIEZJTEVfREVWSUNFX1NDQU5ORVIgICAgICAgICAgICAgMHgwMDAwMDAxOQorI2RlZmluZSBGSUxFX0RFVklDRV9TRVJJQUxfTU9VU0VfUE9SVCAgIDB4MDAwMDAwMWEKKyNkZWZpbmUgRklMRV9ERVZJQ0VfU0VSSUFMX1BPUlQgICAgICAgICAweDAwMDAwMDFiCisjZGVmaW5lIEZJTEVfREVWSUNFX1NDUkVFTiAgICAgICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBGSUxFX0RFVklDRV9TT1VORCAgICAgICAgICAgICAgIDB4MDAwMDAwMWQKKyNkZWZpbmUgRklMRV9ERVZJQ0VfU1RSRUFNUyAgICAgICAgICAgICAweDAwMDAwMDFlCisjZGVmaW5lIEZJTEVfREVWSUNFX1RBUEUgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgorI2RlZmluZSBGSUxFX0RFVklDRV9UQVBFX0ZJTEVfU1lTVEVNICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRklMRV9ERVZJQ0VfVFJBTlNQT1JUICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIEZJTEVfREVWSUNFX1VOS05PV04gICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBGSUxFX0RFVklDRV9WSURFTyAgICAgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgRklMRV9ERVZJQ0VfVklSVFVBTF9ESVNLICAgICAgICAweDAwMDAwMDI0CisjZGVmaW5lIEZJTEVfREVWSUNFX1dBVkVfSU4gICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSBGSUxFX0RFVklDRV9XQVZFX09VVCAgICAgICAgICAgIDB4MDAwMDAwMjYKKyNkZWZpbmUgRklMRV9ERVZJQ0VfODA0Ml9QT1JUICAgICAgICAgICAweDAwMDAwMDI3CisjZGVmaW5lIEZJTEVfREVWSUNFX05FVFdPUktfUkVESVJFQ1RPUiAgMHgwMDAwMDAyOAorI2RlZmluZSBGSUxFX0RFVklDRV9CQVRURVJZICAgICAgICAgICAgIDB4MDAwMDAwMjkKKyNkZWZpbmUgRklMRV9ERVZJQ0VfQlVTX0VYVEVOREVSICAgICAgICAweDAwMDAwMDJhCisjZGVmaW5lIEZJTEVfREVWSUNFX01PREVNICAgICAgICAgICAgICAgMHgwMDAwMDAyYgorI2RlZmluZSBGSUxFX0RFVklDRV9WRE0gICAgICAgICAgICAgICAgIDB4MDAwMDAwMmMKKyNkZWZpbmUgRklMRV9ERVZJQ0VfTUFTU19TVE9SQUdFICAgICAgICAweDAwMDAwMDJkCisjZGVmaW5lIEZJTEVfREVWSUNFX1NNQiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyZQorI2RlZmluZSBGSUxFX0RFVklDRV9LUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMmYKKyNkZWZpbmUgRklMRV9ERVZJQ0VfQ0hBTkdFUiAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIEZJTEVfREVWSUNFX1NNQVJUQ0FSRCAgICAgICAgICAgMHgwMDAwMDAzMQorI2RlZmluZSBGSUxFX0RFVklDRV9BQ1BJICAgICAgICAgICAgICAgIDB4MDAwMDAwMzIKKyNkZWZpbmUgRklMRV9ERVZJQ0VfRFZEICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIEZJTEVfREVWSUNFX0ZVTExTQ1JFRU5fVklERU8gICAgMHgwMDAwMDAzNAorI2RlZmluZSBGSUxFX0RFVklDRV9ERlNfRklMRV9TWVNURU0gICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgRklMRV9ERVZJQ0VfREZTX1ZPTFVNRSAgICAgICAgICAweDAwMDAwMDM2CisKKyNkZWZpbmUgTUVUSE9EX0JVRkZFUkVEICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1FVEhPRF9JTl9ESVJFQ1QgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNRVRIT0RfT1VUX0RJUkVDVCAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUVUSE9EX05FSVRIRVIgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgRklMRV9BTllfQUNDRVNTICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEZJTEVfUkVBRF9BQ0NFU1MgICAgICAgICAgICAgICAgRklMRV9SRUFEX0RBVEEgIC8qIGZpbGUgJiBwaXBlICovCisjZGVmaW5lIEZJTEVfV1JJVEVfQUNDRVNTICAgICAgICAgICAgICAgRklMRV9XUklURV9EQVRBIC8qIGZpbGUgJiBwaXBlICovCisKKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgIDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8yICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAgMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfQkFUQ0hfT1BMT0NLICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sICAyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfT1BMT0NLX0JSRUFLX0FDS05PV0xFREdFICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgIDMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9PUEJBVENIX0FDS19DTE9TRV9QRU5ESU5HIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAgNCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX09QTE9DS19CUkVBS19OT1RJRlkgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sICA1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgIDYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9VTkxPQ0tfVk9MVU1FICAgICAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAgNywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0RJU01PVU5UX1ZPTFVNRSAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sICA4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKy8qIGRlY29tbWlzc2lvbmVkIGZzY3RsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlNDVExfSVNfVk9MVU1FX01PVU5URUQgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMTAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9JU19QQVRITkFNRV9WQUxJRCAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAxMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpIAorI2RlZmluZSBGU0NUTF9NQVJLX1ZPTFVNRV9ESVJUWSAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAxMiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisvKiBkZWNvbW1pc3Npb25lZCBmc2N0bCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX1JFVFJJRVZBTF9QT0lOVEVSUyAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDE0LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfR0VUX0NPTVBSRVNTSU9OICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMTUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9TRVRfQ09NUFJFU1NJT04gICAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAxNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfREFUQSB8IEZJTEVfV1JJVEVfREFUQSkKKy8qIGRlY29tbWlzc2lvbmVkIGZzY3RsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGRlY29tbWlzc2lvbmVkIGZzY3RsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlNDVExfTUFSS19BU19TWVNURU1fSElWRSAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMTksICBNRVRIT0RfTkVJVEhFUiwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9PUExPQ0tfQlJFQUtfQUNLX05PXzIgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAyMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0lOVkFMSURBVEVfVk9MVU1FUyAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDIxLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfUVVFUllfRkFUX0JQQiAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMjIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9SRVFVRVNUX0ZJTFRFUl9PUExPQ0sgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAyMywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0ZJTEVTWVNURU1fR0VUX1NUQVRJU1RJQ1MgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDI0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKy8qIFN0YXJ0OiBfV0lOMzJfV0lOTlQgPj0gMHgwNDAwICovCisjZGVmaW5lIEZTQ1RMX0dFVF9OVEZTX1ZPTFVNRV9EQVRBICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDI1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfR0VUX05URlNfRklMRV9SRUNPUkQgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMjYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKSAKKyNkZWZpbmUgRlNDVExfR0VUX1ZPTFVNRV9CSVRNQVAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMjcsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9BTllfQUNDRVNTKSAKKyNkZWZpbmUgRlNDVExfR0VUX1JFVFJJRVZBTF9QT0lOVEVSUyAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMjgsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9BTllfQUNDRVNTKSAKKyNkZWZpbmUgRlNDVExfTU9WRV9GSUxFICAgICAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMjksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKSAKKyNkZWZpbmUgRlNDVExfSVNfVk9MVU1FX0RJUlRZICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMzAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBGU0NUTF9HRVRfSEZTX0lORk9STUFUSU9OICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAzMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0FMTE9XX0VYVEVOREVEX0RBU0RfSU8gICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDMyLCBNRVRIT0RfTkVJVEhFUiwgIEZJTEVfQU5ZX0FDQ0VTUykKKy8qIEVuZDogX1dJTjMyX1dJTk5UID49IDB4MDQwMCAqLworCisvKiBTdGFydDogX1dJTjMyX1dJTk5UID49IDB4MDUwMCAqLworI2RlZmluZSBGU0NUTF9SRUFEX1BST1BFUlRZX0RBVEEgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAzMywgTUVUSE9EX05FSVRIRVIsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgRlNDVExfV1JJVEVfUFJPUEVSVFlfREFUQSAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgMzQsIE1FVEhPRF9ORUlUSEVSLCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX0ZJTkRfRklMRVNfQllfU0lEICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDM1LCBNRVRIT0RfTkVJVEhFUiwgRklMRV9BTllfQUNDRVNTKQorLyogZGVjb21taXNzaW9uZWQgZnNjdGwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGU0NUTF9EVU1QX1BST1BFUlRZX0RBVEEgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCAzNywgIE1FVEhPRF9ORUlUSEVSLCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX1NFVF9PQkpFQ1RfSUQgICAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDM4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkgCisjZGVmaW5lIEZTQ1RMX0dFVF9PQkpFQ1RfSUQgICAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDM5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykgCisjZGVmaW5lIEZTQ1RMX0RFTEVURV9PQkpFQ1RfSUQgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDQwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKSAKKyNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKSAKKyNkZWZpbmUgRlNDVExfREVMRVRFX1JFUEFSU0VfUE9JTlQgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKSAKKyNkZWZpbmUgRlNDVExfRU5VTV9VU05fREFUQSAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDQsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9SRUFEX0RBVEEpICAKKyNkZWZpbmUgRlNDVExfU0VDVVJJVFlfSURfQ0hFQ0sgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDUsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9SRUFEX0RBVEEpICAKKyNkZWZpbmUgRlNDVExfUkVBRF9VU05fSk9VUk5BTCAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDYsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9SRUFEX0RBVEEpICAKKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRF9FWFRFTkRFRCAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNDcsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBCisjZGVmaW5lIEZTQ1RMX0NSRUFURV9PUl9HRVRfT0JKRUNUX0lEICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDQ4LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykgCisjZGVmaW5lIEZTQ1RMX1NFVF9TUEFSU0UgICAgICAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDQ5LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfV1JJVEVfREFUQSkKKyNkZWZpbmUgRlNDVExfU0VUX1pFUk9fREFUQSAgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNTAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKSAKKyNkZWZpbmUgRlNDVExfUVVFUllfQUxMT0NBVEVEX1JBTkdFUyAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNTEsICBNRVRIT0RfTkVJVEhFUiwgRklMRV9SRUFEX0RBVEEpICAKKyNkZWZpbmUgRlNDVExfRU5BQkxFX1VQR1JBREUgICAgICAgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9GSUxFX1NZU1RFTSwgNTIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9XUklURV9EQVRBKQorI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCA1MywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpIAorI2RlZmluZSBGU0NUTF9FTkNSWVBUSU9OX0ZTQ1RMX0lPICAgICAgIENUTF9DT0RFKEZJTEVfREVWSUNFX0ZJTEVfU1lTVEVNLCA1NCwgIE1FVEhPRF9ORUlUSEVSLCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDU1LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfQU5ZX0FDQ0VTUykgCisjZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDU2LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfQU5ZX0FDQ0VTUykgCisjZGVmaW5lIEZTQ1RMX0NSRUFURV9VU05fSk9VUk5BTCAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDU3LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfUkVBRF9EQVRBKSAgCisjZGVmaW5lIEZTQ1RMX1JFQURfRklMRV9VU05fREFUQSAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDU4LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfUkVBRF9EQVRBKSAgCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1VTTl9DTE9TRV9SRUNPUkQgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDU5LCAgTUVUSE9EX05FSVRIRVIsIEZJTEVfUkVBRF9EQVRBKSAgCisjZGVmaW5lIEZTQ1RMX0VYVEVORF9WT0xVTUUgICAgICAgICAgICAgQ1RMX0NPREUoRklMRV9ERVZJQ0VfRklMRV9TWVNURU0sIDYwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKy8qIEVuZDogX1dJTjMyX1dJTk5UID49IDB4MDUwMCAqLworCisKKworI2RlZmluZSBJT0NUTF9TVE9SQUdFX0JBU0UgRklMRV9ERVZJQ0VfTUFTU19TVE9SQUdFCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfQ0hFQ0tfVkVSSUZZICAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjAwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfTUVESUFfUkVNT1ZBTCAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjAxLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfRUpFQ1RfTUVESUEgICAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjAyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfTE9BRF9NRURJQSAgICAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjAzLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfUkVTRVJWRSAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjA0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfUkVMRUFTRSAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjA1LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX1NUT1JBR0VfRklORF9ORVdfREVWSUNFUyAgIENUTF9DT0RFKElPQ1RMX1NUT1JBR0VfQkFTRSwgMHgwMjA2LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfU1RPUkFHRV9HRVRfTUVESUFfVFlQRVMgICAgQ1RMX0NPREUoSU9DVExfU1RPUkFHRV9CQVNFLCAweDAzMDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9TVE9SQUdFX0dFVF9NRURJQV9UWVBFU19FWCBDVExfQ09ERShJT0NUTF9TVE9SQUdFX0JBU0UsIDB4MDMwMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfU1RPUkFHRV9SRVNFVF9CVVMgICAgICAgICAgQ1RMX0NPREUoSU9DVExfU1RPUkFHRV9CQVNFLCAweDA0MDAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfU1RPUkFHRV9SRVNFVF9ERVZJQ0UgICAgICAgQ1RMX0NPREUoSU9DVExfU1RPUkFHRV9CQVNFLCAweDA0MDEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfU1RPUkFHRV9HRVRfREVWSUNFX05VTUJFUiAgQ1RMX0NPREUoSU9DVExfU1RPUkFHRV9CQVNFLCAweDA0MjAsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX0RJU0tfQkFTRSAgICAgICAgICAgICAgICAgRklMRV9ERVZJQ0VfRElTSworI2RlZmluZSBJT0NUTF9ESVNLX0dFVF9EUklWRV9HRU9NRVRSWSAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDAwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19HRVRfUEFSVElUSU9OX0lORk8gICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwMSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX1NFVF9QQVJUSVRJT05fSU5GTyAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDAyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MgfCBGSUxFX1dSSVRFX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19HRVRfRFJJVkVfTEFZT1VUICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwMywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX1NFVF9EUklWRV9MQVlPVVQgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDA0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MgfCBGSUxFX1dSSVRFX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19WRVJJRlkgICAgICAgICAgICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwNSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfRk9STUFUX1RSQUNLUyAgICAgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMDYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUyB8IEZJTEVfV1JJVEVfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX1JFQVNTSUdOX0JMT0NLUyAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDA3LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MgfCBGSUxFX1dSSVRFX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19QRVJGT1JNQU5DRSAgICAgICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwOCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfSVNfV1JJVEFCTEUgICAgICAgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMDksIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX0xPR0dJTkcgICAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDBhLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19GT1JNQVRfVFJBQ0tTX0VYICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwYiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTIHwgRklMRV9XUklURV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfSElTVE9HUkFNX1NUUlVDVFVSRSAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMGMsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX0hJU1RPR1JBTV9EQVRBICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDBkLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19ISVNUT0dSQU1fUkVTRVQgICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDAwZSwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX0FOWV9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfUkVRVUVTVF9TVFJVQ1RVUkUgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMGYsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX1JFUVVFU1RfREFUQSAgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDEwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19DSEVDS19WRVJJRlkgICAgICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDIwMCwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX01FRElBX1JFTU9WQUwgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMjAxLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfRUpFQ1RfTUVESUEgICAgICAgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAyMDIsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19MT0FEX01FRElBICAgICAgICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDIwMywgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX1JFU0VSVkUgICAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMjA0LCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIElPQ1RMX0RJU0tfUkVMRUFTRSAgICAgICAgICAgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAyMDUsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUykKKyNkZWZpbmUgSU9DVExfRElTS19GSU5EX05FV19ERVZJQ0VTICAgICBDVExfQ09ERShJT0NUTF9ESVNLX0JBU0UsIDB4MDIwNiwgTUVUSE9EX0JVRkZFUkVELCBGSUxFX1JFQURfQUNDRVNTKQorI2RlZmluZSBJT0NUTF9ESVNLX0dFVF9NRURJQV9UWVBFUyAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMzAwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvKiBTdGFydDogRm9yIF9XSU4zMl9XSU5OVCA+PSAweDA0MDAgKi8gCisjZGVmaW5lIElPQ1RMX0RJU0tfQ09OVFJPTExFUl9OVU1CRVIgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMTEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9BTllfQUNDRVNTKQorI2RlZmluZSBTTUFSVF9HRVRfVkVSU0lPTiAgICAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDIwLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MpCisjZGVmaW5lIFNNQVJUX1NFTkRfRFJJVkVfQ09NTUFORCAgICAgICAgQ1RMX0NPREUoSU9DVExfRElTS19CQVNFLCAweDAwMjEsIE1FVEhPRF9CVUZGRVJFRCwgRklMRV9SRUFEX0FDQ0VTUyB8IEZJTEVfV1JJVEVfQUNDRVNTKQorI2RlZmluZSBTTUFSVF9SQ1ZfRFJJVkVfREFUQSAgICAgICAgICAgIENUTF9DT0RFKElPQ1RMX0RJU0tfQkFTRSwgMHgwMDIyLCBNRVRIT0RfQlVGRkVSRUQsIEZJTEVfUkVBRF9BQ0NFU1MgfCBGSUxFX1dSSVRFX0FDQ0VTUykKKy8qIEVuZDogRm9yIF9XSU4zMl9XSU5OVCA+PSAweDA0MDAgKi8gCisKKyNkZWZpbmUgSU9DVExfU0VSSUFMX0xTUk1TVF9JTlNFUlQgICAgICBDVExfQ09ERShGSUxFX0RFVklDRV9TRVJJQUxfUE9SVCwzMSxNRVRIT0RfQlVGRkVSRUQsRklMRV9BTllfQUNDRVNTKQorCisKKy8qIFJldHVybiBDb2Rlcy4uLiBzaG91bGQgdGhlc2UgYmUgdGhlIHNhbWUgYXMgc29tZXRoaW5nIHNvbWV3aGVyZT8gKi8KKyNkZWZpbmUgUEFSVElUSU9OX0VOVFJZX1VOVVNFRCAgICAgICAgICAweDAwICAgICAgLy8gRW50cnkgdW51c2VkCisjZGVmaW5lIFBBUlRJVElPTl9GQVRfMTIgICAgICAgICAgICAgICAgMHgwMSAgICAgIC8vIDEyLWJpdCBGQVQgZW50cmllcworI2RlZmluZSBQQVJUSVRJT05fWEVOSVhfMSAgICAgICAgICAgICAgIDB4MDIgICAgICAvLyBYZW5peAorI2RlZmluZSBQQVJUSVRJT05fWEVOSVhfMiAgICAgICAgICAgICAgIDB4MDMgICAgICAvLyBYZW5peAorI2RlZmluZSBQQVJUSVRJT05fRkFUXzE2ICAgICAgICAgICAgICAgIDB4MDQgICAgICAvLyAxNi1iaXQgRkFUIGVudHJpZXMKKyNkZWZpbmUgUEFSVElUSU9OX0VYVEVOREVEICAgICAgICAgICAgICAweDA1ICAgICAgLy8gRXh0ZW5kZWQgcGFydGl0aW9uIGVudHJ5CisjZGVmaW5lIFBBUlRJVElPTl9IVUdFICAgICAgICAgICAgICAgICAgMHgwNiAgICAgIC8vIEh1Z2UgcGFydGl0aW9uIE1TLURPUyBWNAorI2RlZmluZSBQQVJUSVRJT05fSUZTICAgICAgICAgICAgICAgICAgIDB4MDcgICAgICAvLyBJRlMgUGFydGl0aW9uCisjZGVmaW5lIFBBUlRJVElPTl9GQVQzMiAgICAgICAgICAgICAgICAgMHgwQiAgICAgIC8vIEZBVDMyCisjZGVmaW5lIFBBUlRJVElPTl9GQVQzMl9YSU5UMTMgICAgICAgICAgMHgwQyAgICAgIC8vIEZBVDMyIHVzaW5nIGV4dGVuZGVkIGludDEzIHNlcnZpY2VzCisjZGVmaW5lIFBBUlRJVElPTl9YSU5UMTMgICAgICAgICAgICAgICAgMHgwRSAgICAgIC8vIFdpbjk1IHBhcnRpdGlvbiB1c2luZyBleHRlbmRlZCBpbnQxMyBzZXJ2aWNlcworI2RlZmluZSBQQVJUSVRJT05fWElOVDEzX0VYVEVOREVEICAgICAgIDB4MEYgICAgICAvLyBTYW1lIGFzIHR5cGUgNSBidXQgdXNlcyBleHRlbmRlZCBpbnQxMyBzZXJ2aWNlcworI2RlZmluZSBQQVJUSVRJT05fUFJFUCAgICAgICAgICAgICAgICAgIDB4NDEgICAgICAvLyBQb3dlclBDIFJlZmVyZW5jZSBQbGF0Zm9ybSAoUFJlUCkgQm9vdCBQYXJ0aXRpb24KKyNkZWZpbmUgUEFSVElUSU9OX0xETSAgICAgICAgICAgICAgICAgICAweDQyICAgICAgLy8gTG9naWNhbCBEaXNrIE1hbmFnZXIgcGFydGl0aW9uCisjZGVmaW5lIFBBUlRJVElPTl9VTklYICAgICAgICAgICAgICAgICAgMHg2MyAgICAgIC8vIFVuaXgKKworCisvKiBEZXZpY2UgSW8gU3R1ZmYgLSBNb3N0IFZ4RCBzdXBwb3J0LgorICogTk9URTogQWxsIFZ4RCBtZXNzYWdlcyBzZWVtIHRvIHN0YXJ0IHdpdGggYSBoaXdvcmQgb3IgMAorICovCit0eXBlZGVmIHN0cnVjdCB0YWdESU9DUmVncyB7CisgICAgRFdPUkQgICByZWdfRUJYOworICAgIERXT1JEICAgcmVnX0VEWDsgICAgICAKKyAgICBEV09SRCAgIHJlZ19FQ1g7ICAgICAgCisgICAgRFdPUkQgICByZWdfRUFYOworICAgIERXT1JEICAgcmVnX0VESTsKKyAgICBEV09SRCAgIHJlZ19FU0k7CisgICAgRFdPUkQgICByZWdfRmxhZ3M7Cit9IERJT0NfUkVHSVNURVJTLCAqUERJT0NfUkVHSVNURVJTOyAgICAgICAgIAorCisvKiBTdGFydCBWV0lOMzIgaW5mb3JtYXRpb246IAorICogVldJTjMyIGlzIGEgVnhEIHdoaWNoIHN1cHBvcnRzIHRoZSBNU0RPUyBJbyByb3V0aW5lcy4KKyAqLworI2RlZmluZSBWV0lOMzJfRElPQ19ET1NfSU9DVEwgICAgIDEgLyogVGhpcyBpcyB0aGUgc3BlY2lmaWVkIE1TLURPUyBkZXZpY2UgSS9PIGN0bCAtIEludGVycnVwdCAyMWggRnVuY3Rpb24gNDQwMGggLSA0NDExaCAqLworI2RlZmluZSBWV0lOMzJfRElPQ19ET1NfSU5UMjUgICAgIDIgLyogVGhpcyBpcyB0aGUgQWJzb2x1dGUgRGlzayBSZWFkIGNvbW1hbmQgLSBJbnRlcnJ1cHQgMjVoICovCisjZGVmaW5lIFZXSU4zMl9ESU9DX0RPU19JTlQyNiAgICAgMyAvKiBUaGlzIGlzIHRoZSBBYnNvbHV0ZSBEaXNrIFdyaXRlIGNvbW1hbmQgLSBJbnRlcnJ1cHQgMjVoICovCisjZGVmaW5lIFZXSU4zMl9ESU9DX0RPU19JTlQxMyAgICAgNCAvKiBUaGlzIGlzIEludGVycnVwdCAxM2ggY29tbWFuZHMgKi8KKyNkZWZpbmUgVldJTjMyX0RJT0NfRE9TX0RSSVZFSU5GTyA2IC8qIFRoaXMgaXMgSW50ZXJydXB0IDIxaCBGdW5jdGlvbiA3MzBYIGNvbW1hbmRzICovCisKKy8qIEltcG9ydGFudDogQWxsIE1TX0RPUyBkYXRhIHN0cnVjdHVyZXMgbXVzdCBiZSBwYWNrZWQgb24gYSBvbmUtYnl0ZSBib3VuZGFyeSAtIGdvb2Qgb2xkIDE2IGJpdC4gKi8KKworI3ByYWdtYSBwYWNrKDEpCit0eXBlZGVmIHN0cnVjdCB0YWdNSUQgeworICAgIFdPUkQgIG1pZEluZm9MZXZlbDsKKyAgICBEV09SRCBtaWRTZXJpYWxOdW07CisgICAgQllURSAgbWlkVm9sTGFiZWxbMTFdOworICAgIEJZVEUgIG1pZEZpbGVTeXNUeXBlWzhdOworfSBNSUQsICpQTUlEOworI3ByYWdtYSBwYWNrKCkKKworLyogRW5kIFZXSU4zMiBpbmZvcm1hdGlvbiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUveDExZHJ2LmggYi9pbmNsdWRlL3gxMWRydi5oCmluZGV4IGM5NmE2ZmMuLmQ4ZTdkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveDExZHJ2LmgKKysrIGIvaW5jbHVkZS94MTFkcnYuaApAQCAtMjAsNiArMjAsNyBAQAogICAgIGludCAgICAgICAgICB3aWR0aDsKICAgICBjaGFyICogICAgICAgZGFzaGVzOwogICAgIGludCAgICAgICAgICBkYXNoX2xlbjsKKyAgICBpbnQgICAgICAgICAgdHlwZTsgICAgICAgICAgLyogR0VPTUVUUklDIHx8IENPU01FVElDICovCiB9IFhfUEhZU1BFTjsKIAogICAvKiBYIHBoeXNpY2FsIGJydXNoICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3htYWxsb2MuaCBiL2luY2x1ZGUveG1hbGxvYy5oCmluZGV4IGYwNTRlZGQuLjc4YzM1NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveG1hbGxvYy5oCisrKyBiL2luY2x1ZGUveG1hbGxvYy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX1dJTkVfWE1BTExPQ19ICiAKIHZvaWQgKnhtYWxsb2MoIGludCBzaXplICk7Cit2b2lkICp4Y2FsbG9jKCBpbnQgc2l6ZSApOwogdm9pZCAqeHJlYWxsb2MoIHZvaWQgKnB0ciwgaW50IHNpemUgKTsKIGNoYXIgKnhzdHJkdXAoIGNvbnN0IGNoYXIgKnN0ciApOwogCmRpZmYgLS1naXQgYS9sb2FkZXIvbW9kdWxlLmMgYi9sb2FkZXIvbW9kdWxlLmMKaW5kZXggN2I3ZmY2NS4uMjY2ODE3NCAxMDA2NDQKLS0tIGEvbG9hZGVyL21vZHVsZS5jCisrKyBiL2xvYWRlci9tb2R1bGUuYwpAQCAtMTczLDYgKzE3MywxMiBAQAogICAgICAgICAgICAgcmV0dXJuIChGQVJQUk9DMTYpUHJpbnRTZXR1cERsZ1Byb2M7CiAgICAgICAgIGlmICghc3RyY21wKG5hbWUsIlJlcGxhY2VUZXh0RGxnUHJvYyIpKQogICAgICAgICAgICAgcmV0dXJuIChGQVJQUk9DMTYpUmVwbGFjZVRleHREbGdQcm9jMTY7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsIkRlZlJlc291cmNlSGFuZGxlciIpKQorICAgICAgICAgICAgcmV0dXJuIChGQVJQUk9DMTYpTkVfRGVmUmVzb3VyY2VIYW5kbGVyOworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCJMb2FkRElCSWNvbkhhbmRsZXIiKSkKKyAgICAgICAgICAgIHJldHVybiAoRkFSUFJPQzE2KUxvYWRESUJJY29uSGFuZGxlcjsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwiTG9hZERJQkN1cnNvckhhbmRsZXIiKSkKKyAgICAgICAgICAgIHJldHVybiAoRkFSUFJPQzE2KUxvYWRESUJDdXJzb3JIYW5kbGVyOwogICAgICAgICBGSVhNRShtb2R1bGUsIk5vIG1hcHBpbmcgZm9yICVzKCksIGFkZCBvbmUgaW4gbGlicmFyeS9taXNjc3R1YnMuY1xuIixuYW1lKTsKICAgICAgICAgYXNzZXJ0KCBGQUxTRSApOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNiw3ICsyNDIsNyBAQAogCSAgICBpZiAoZG90cHRyKQkqZG90cHRyCQk9ICdcMCc7CiAJICAgIGlmICh4ZG90cHRyKSAqeGRvdHB0cgk9ICdcMCc7CiAJfQotCWlmICghbHN0cmNtcGkzMkEoIGZpbGVuYW1lLCB4bW9kbmFtZSkpIHsKKwlpZiAoIXN0cmNhc2VjbXAoIGZpbGVuYW1lLCB4bW9kbmFtZSkpIHsKIAkgICAgSGVhcEZyZWUocHJvY2Vzcy0+aGVhcCwwLGZpbGVuYW1lKTsKIAkgICAgSGVhcEZyZWUocHJvY2Vzcy0+aGVhcCwwLHhtb2RuYW1lKTsKIAkgICAgcmV0dXJuIHdtLT5tb2R1bGU7CmRpZmYgLS1naXQgYS9sb2FkZXIvbmUvbW9kdWxlLmMgYi9sb2FkZXIvbmUvbW9kdWxlLmMKaW5kZXggZTliNjQ1Yy4uMTQ4ZWZiYyAxMDA2NDQKLS0tIGEvbG9hZGVyL25lL21vZHVsZS5jCisrKyBiL2xvYWRlci9uZS9tb2R1bGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImdsb2JhbC5oIgogI2luY2x1ZGUgInByb2Nlc3MuaCIKICNpbmNsdWRlICJ0b29saGVscC5oIgorI2luY2x1ZGUgInNub29wLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogc3RhdGljIEhNT0RVTEUxNiBoRmlyc3RNb2R1bGUgPSAwOwpAQCAtMzI3LDcgKzMyOCwxMCBAQAogCiAgICAgaWYgKHNlbCA9PSAweGZlKSBzZWwgPSAweGZmZmY7ICAvKiBjb25zdGFudCBlbnRyeSAqLwogICAgIGVsc2Ugc2VsID0gKFdPUkQpKERXT1JEKU5FX1NFR19UQUJMRShwTW9kdWxlKVtzZWwtMV0uc2VsZWN0b3I7Ci0gICAgcmV0dXJuIChGQVJQUk9DMTYpUFRSX1NFR19PRkZfVE9fU0VHUFRSKCBzZWwsIG9mZnNldCApOworICAgIGlmIChzZWw9PTB4ZmZmZikKKwlyZXR1cm4gKEZBUlBST0MxNilQVFJfU0VHX09GRl9UT19TRUdQVFIoIHNlbCwgb2Zmc2V0ICk7CisgICAgZWxzZQorCXJldHVybiAoRkFSUFJPQzE2KVNOT09QMTZfR2V0UHJvY0FkZHJlc3MxNihoTW9kdWxlLG9yZGluYWwsKEZBUlBST0MxNilQVFJfU0VHX09GRl9UT19TRUdQVFIoIHNlbCwgb2Zmc2V0ICkpOwogfQogCiAKQEAgLTQ0NCw4ICs0NDgsNiBAQAogICAgIC8qIFdlIG5vdyBoYXZlIGEgdmFsaWQgTkUgaGVhZGVyICovCiAKICAgICBzaXplID0gc2l6ZW9mKE5FX01PRFVMRSkgKwotICAgICAgICAgICAgIC8qIGxvYWRlZCBmaWxlIGluZm8gKi8KLSAgICAgICAgICAgc2l6ZW9mKE9GU1RSVUNUKS1zaXplb2Yob2ZzLT5zelBhdGhOYW1lKStzdHJsZW4ob2ZzLT5zelBhdGhOYW1lKSsxKwogICAgICAgICAgICAgIC8qIHNlZ21lbnQgdGFibGUgKi8KICAgICAgICAgICAgbmVfaGVhZGVyLm5fc2VnbWVudF90YWIgKiBzaXplb2YoU0VHVEFCTEVFTlRSWSkgKwogICAgICAgICAgICAgIC8qIHJlc291cmNlIHRhYmxlICovCkBAIC00NTcsOSArNDU5LDExIEBACiAgICAgICAgICAgICAgLyogaW1wb3J0ZWQgbmFtZXMgdGFibGUgKi8KICAgICAgICAgICAgbmVfaGVhZGVyLmVudHJ5X3RhYl9vZmZzZXQgLSBuZV9oZWFkZXIuaW5hbWVfdGFiX29mZnNldCArCiAgICAgICAgICAgICAgLyogZW50cnkgdGFibGUgbGVuZ3RoICovCi0gICAgICAgICAgIG5lX2hlYWRlci5lbnRyeV90YWJfbGVuZ3RoOworICAgICAgICAgICBuZV9oZWFkZXIuZW50cnlfdGFiX2xlbmd0aCArCisgICAgICAgICAgICAgLyogbG9hZGVkIGZpbGUgaW5mbyAqLworICAgICAgICAgICBzaXplb2YoT0ZTVFJVQ1QpLXNpemVvZihvZnMtPnN6UGF0aE5hbWUpK3N0cmxlbihvZnMtPnN6UGF0aE5hbWUpKzE7CiAKLSAgICBoTW9kdWxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemUgKTsKKyAgICBoTW9kdWxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9GSVhFRCB8IEdNRU1fWkVST0lOSVQsIHNpemUgKTsKICAgICBpZiAoIWhNb2R1bGUpIHJldHVybiAoSE1PRFVMRTE2KTExOyAgLyogaW52YWxpZCBleGUgKi8KICAgICBGYXJTZXRPd25lciggaE1vZHVsZSwgaE1vZHVsZSApOwogICAgIHBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jazE2KCBoTW9kdWxlICk7CkBAIC00OTQsMTQgKzQ5OCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBTdG9yZSB0aGUgZmlsZW5hbWUgaW5mb3JtYXRpb24gKi8KLQotICAgIHBNb2R1bGUtPmZpbGVpbmZvID0gKGludClwRGF0YSAtIChpbnQpcE1vZHVsZTsKLSAgICBzaXplID0gc2l6ZW9mKE9GU1RSVUNUKS1zaXplb2Yob2ZzLT5zelBhdGhOYW1lKStzdHJsZW4ob2ZzLT5zelBhdGhOYW1lKSsxOwotICAgIG1lbWNweSggcERhdGEsIG9mcywgc2l6ZSApOwotICAgICgoT0ZTVFJVQ1QgKilwRGF0YSktPmNCeXRlcyA9IHNpemUgLSAxOwotICAgIHBEYXRhICs9IHNpemU7Ci0KICAgICAvKiBHZXQgdGhlIHNlZ21lbnQgdGFibGUgKi8KIAogICAgIHBNb2R1bGUtPnNlZ190YWJsZSA9IChpbnQpcERhdGEgLSAoaW50KXBNb2R1bGU7CkBAIC02MDUsNiArNjAxLDE0IEBACiAgICAgfQogICAgIHBEYXRhICs9IG5lX2hlYWRlci5lbnRyeV90YWJfbGVuZ3RoOwogCisgICAgLyogU3RvcmUgdGhlIGZpbGVuYW1lIGluZm9ybWF0aW9uICovCisKKyAgICBwTW9kdWxlLT5maWxlaW5mbyA9IChpbnQpcERhdGEgLSAoaW50KXBNb2R1bGU7CisgICAgc2l6ZSA9IHNpemVvZihPRlNUUlVDVCktc2l6ZW9mKG9mcy0+c3pQYXRoTmFtZSkrc3RybGVuKG9mcy0+c3pQYXRoTmFtZSkrMTsKKyAgICBtZW1jcHkoIHBEYXRhLCBvZnMsIHNpemUgKTsKKyAgICAoKE9GU1RSVUNUICopcERhdGEpLT5jQnl0ZXMgPSBzaXplIC0gMTsKKyAgICBwRGF0YSArPSBzaXplOworCiAgICAgLyogRnJlZSB0aGUgZmFzdC1sb2FkIGFyZWEgKi8KIAogI3VuZGVmIFJFQUQKQEAgLTY1MCw2ICs2NTQsNyBAQAogICAgIGVsc2UgcE1vZHVsZS0+ZGxsc190b19pbml0ID0gMDsKIAogICAgIE5FX1JlZ2lzdGVyTW9kdWxlKCBwTW9kdWxlICk7CisgICAgU05PT1AxNl9SZWdpc3RlckRMTChwTW9kdWxlLG9mcy0+c3pQYXRoTmFtZSk7CiAgICAgcmV0dXJuIGhNb2R1bGU7CiB9CiAKZGlmZiAtLWdpdCBhL2xvYWRlci9uZS9yZXNvdXJjZS5jIGIvbG9hZGVyL25lL3Jlc291cmNlLmMKaW5kZXggNzMzOTQ2Ny4uYzVkM2ZjZSAxMDA2NDQKLS0tIGEvbG9hZGVyL25lL3Jlc291cmNlLmMKKysrIGIvbG9hZGVyL25lL3Jlc291cmNlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJuZWV4ZS5oIgogI2luY2x1ZGUgInJlc291cmNlLmgiCisjaW5jbHVkZSAiY2FsbGJhY2suaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIE5FWFRfVFlQRUlORk8ocFR5cGVJbmZvKSAoKE5FX1RZUEVJTkZPICopKChjaGFyKikoKHBUeXBlSW5mbykgKyAxKSArIFwKQEAgLTIxOCwxMSArMjE5LDEzIEBACiAgICAgTkVfTU9EVUxFICpwTW9kdWxlID0gTkVfR2V0UHRyKCBoTW9kdWxlICk7CiAgICAgTkVfVFlQRUlORk8gKnBUeXBlSW5mbyA9IChORV9UWVBFSU5GTyAqKSgoY2hhciAqKXBNb2R1bGUgKyBwTW9kdWxlLT5yZXNfdGFibGUgKyAyKTsKIAorICAgIEZBUlBST0MxNiBoYW5kbGVyID0gTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCJEZWZSZXNvdXJjZUhhbmRsZXIiKTsKKwogICAgIFRSQUNFKHJlc291cmNlLCJJbml0UmVzb3VyY2VIYW5kbGVyWyUwNHhdXG4iLCBoTW9kdWxlICk7CiAKICAgICB3aGlsZShwVHlwZUluZm8tPnR5cGVfaWQpCiAgICAgewotCXBUeXBlSW5mby0+cmVzbG9hZGVyID0gKEZBUlBST0MxNikmTkVfRGVmUmVzb3VyY2VIYW5kbGVyOworCXBUeXBlSW5mby0+cmVzbG9hZGVyID0gaGFuZGxlcjsKIAlwVHlwZUluZm8gPSBORVhUX1RZUEVJTkZPKHBUeXBlSW5mbyk7CiAgICAgfQogICAgIHJldHVybiBUUlVFOwpAQCAtNDUwLDcgKzQ1Myw2IEBACiAKICAgICBpZiAocE5hbWVJbmZvKQogICAgIHsKLQlSRVNPVVJDRUhBTkRMRVIxNiBsb2FkZXI7CiAJaWYgKHBOYW1lSW5mby0+aGFuZGxlCiAJICAgICYmICEoR2xvYmFsRmxhZ3MxNihwTmFtZUluZm8tPmhhbmRsZSkgJiBHTUVNX0RJU0NBUkRFRCkpCiAJewpAQCAtNDYxLDE2ICs0NjMsMTYgQEAKIAllbHNlCiAJewogCSAgICBpZiAocFR5cGVJbmZvLT5yZXNsb2FkZXIpCi0JICAJbG9hZGVyID0gKFJFU09VUkNFSEFORExFUjE2KXBUeXBlSW5mby0+cmVzbG9hZGVyOworICAgICAgICAgICAgICAgIHBOYW1lSW5mby0+aGFuZGxlID0gQ2FsbGJhY2tzLT5DYWxsUmVzb3VyY2VIYW5kbGVyUHJvYygKKyAgICAgICAgICAgICAgICAgICAgcFR5cGVJbmZvLT5yZXNsb2FkZXIsIHBOYW1lSW5mby0+aGFuZGxlLCBoTW9kdWxlLCBoUnNyYyApOwogCSAgICBlbHNlIC8qIHRoaXMgaXMgcmVhbGx5IGJhZCAqLwogCSAgICB7CiAJCUVSUihyZXNvdXJjZSwgIlslMDR4XTogTWlzc2luZyByZXNvdXJjZSBoYW5kbGVyIVxuIiwgaE1vZHVsZSk7Ci0JCWxvYWRlciA9IE5FX0RlZlJlc291cmNlSGFuZGxlcjsKKyAgICAgICAgICAgICAgICBwTmFtZUluZm8tPmhhbmRsZSA9IE5FX0RlZlJlc291cmNlSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5hbWVJbmZvLT5oYW5kbGUsIGhNb2R1bGUsIGhSc3JjICk7CiAJICAgIH0KIAotCSAgICAvKiBGaW5hbGx5IGNhbGwgcmVzb3VyY2UgbG9hZGVyICovCi0KLQkgICAgaWYgKChwTmFtZUluZm8tPmhhbmRsZSA9IGxvYWRlcihwTmFtZUluZm8tPmhhbmRsZSwgaE1vZHVsZSwgaFJzcmMpKSkKKwkgICAgaWYgKHBOYW1lSW5mby0+aGFuZGxlKQogCSAgICB7CiAJCXBOYW1lSW5mby0+dXNhZ2UrKzsKIAkJcE5hbWVJbmZvLT5mbGFncyB8PSBORV9TRUdGTEFHU19MT0FERUQ7CmRpZmYgLS1naXQgYS9sb2FkZXIvbmUvc2VnbWVudC5jIGIvbG9hZGVyL25lL3NlZ21lbnQuYwppbmRleCA3MTlkNmQxLi4yOGNhYTc3IDEwMDY0NAotLS0gYS9sb2FkZXIvbmUvc2VnbWVudC5jCisrKyBiL2xvYWRlci9uZS9zZWdtZW50LmMKQEAgLTM0OSw3ICszNDksNyBAQAogICAgICAgICAgICAgICAgIGlmIChuZXh0X29mZnNldCA9PSBvZmZzZXQpIGJyZWFrOyAgLyogYXZvaWQgaW5maW5pdGUgbG9vcCAqLwogICAgICAgICAgICAgICAgIGlmIChuZXh0X29mZnNldCA+PSBHbG9iYWxTaXplMTYocFNlZy0+c2VsZWN0b3IpKSBicmVhazsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBuZXh0X29mZnNldDsKLSAgICAgICAgICAgIH0gd2hpbGUgKG9mZnNldCAmJiAob2Zmc2V0ICE9IDB4ZmZmZikpOworICAgICAgICAgICAgfSB3aGlsZSAob2Zmc2V0ICE9IDB4ZmZmZik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2xvYWRlci9zaWduYWwuYyBiL2xvYWRlci9zaWduYWwuYwppbmRleCAyZTNkZWM2Li4wMDIzYzY1IDEwMDY0NAotLS0gYS9sb2FkZXIvc2lnbmFsLmMKKysrIGIvbG9hZGVyL3NpZ25hbC5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAic2lnX2NvbnRleHQuaCIKICNpbmNsdWRlICJ3aW5zb2NrLmgiCiAKKy8qIEdsb2JhbCB2YXJpYWJsZSB0byBzYXZlICVmcyByZWdpc3RlciB3aGlsZSBpbiAxNi1iaXQgY29kZSAqLworV09SRCBDQUxMVE8xNl9DdXJyZW50X2ZzOwogCiAvKiBMaW51eCBzaWdhY3Rpb24gZnVuY3Rpb24gKi8KIApkaWZmIC0tZ2l0IGEvbG9hZGVyL3Rhc2suYyBiL2xvYWRlci90YXNrLmMKaW5kZXggYTg0MmMwOC4uNTQ4M2YwZiAxMDA2NDQKLS0tIGEvbG9hZGVyL3Rhc2suYworKysgYi9sb2FkZXIvdGFzay5jCkBAIC0zNDYsNiArMzQ2LDcgQEAKIAogICAgIGNtZF9saW5lID0gcGRiMzItPmVudl9kYi0+Y21kX2xpbmU7CiAgICAgd2hpbGUgKCpjbWRfbGluZSAmJiAoKmNtZF9saW5lICE9ICcgJykgJiYgKCpjbWRfbGluZSAhPSAnXHQnKSkgY21kX2xpbmUrKzsKKyAgICB3aGlsZSAoKCpjbWRfbGluZSA9PSAnICcpIHx8ICgqY21kX2xpbmUgPT0gJ1x0JykpIGNtZF9saW5lKys7CiAgICAgbHN0cmNweW4zMkEoIHBUYXNrLT5wZGIuY21kTGluZSsxLCBjbWRfbGluZSwgc2l6ZW9mKHBUYXNrLT5wZGIuY21kTGluZSktMSk7CiAgICAgcFRhc2stPnBkYi5jbWRMaW5lWzBdID0gc3RybGVuKCBwVGFzay0+cGRiLmNtZExpbmUgKyAxICk7CiAKQEAgLTEyNDUsMTAgKzEyNDYsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0RXhlUHRyICAgKEtFUk5FTC4xMzMpCiAgKi8KLUhNT0RVTEUxNiBXSU5BUEkgR2V0RXhlUHRyKCBIQU5ETEUxNiBoYW5kbGUgKQorc3RhdGljIEhNT0RVTEUxNiBHZXRFeGVQdHJIZWxwZXIoIEhBTkRMRTE2IGhhbmRsZSwgSFRBU0sxNiAqaFRhc2sgKQogewogICAgIGNoYXIgKnB0cjsKLSAgICBIVEFTSzE2IGhUYXNrOwogICAgIEhBTkRMRTE2IG93bmVyOwogCiAgICAgICAvKiBDaGVjayBmb3IgbW9kdWxlIGhhbmRsZSAqLwpAQCAtMTI1NiwzMSArMTI1Niw2MCBAQAogICAgIGlmICghKHB0ciA9IEdsb2JhbExvY2sxNiggaGFuZGxlICkpKSByZXR1cm4gMDsKICAgICBpZiAoKChORV9NT0RVTEUgKilwdHIpLT5tYWdpYyA9PSBJTUFHRV9PUzJfU0lHTkFUVVJFKSByZXR1cm4gaGFuZGxlOwogCisgICAgICAvKiBTZWFyY2ggZm9yIHRoaXMgaGFuZGxlIGluc2lkZSBhbGwgdGFza3MgKi8KKworICAgICpoVGFzayA9IGhGaXJzdFRhc2s7CisgICAgd2hpbGUgKCpoVGFzaykKKyAgICB7CisgICAgICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCAqaFRhc2sgKTsKKyAgICAgICAgaWYgKCgqaFRhc2sgPT0gaGFuZGxlKSB8fAorICAgICAgICAgICAgKHBUYXNrLT5oSW5zdGFuY2UgPT0gaGFuZGxlKSB8fAorICAgICAgICAgICAgKHBUYXNrLT5oUXVldWUgPT0gaGFuZGxlKSB8fAorICAgICAgICAgICAgKHBUYXNrLT5oUERCID09IGhhbmRsZSkpIHJldHVybiBwVGFzay0+aE1vZHVsZTsKKyAgICAgICAgKmhUYXNrID0gcFRhc2stPmhOZXh0OworICAgIH0KKwogICAgICAgLyogQ2hlY2sgdGhlIG93bmVyIGZvciBtb2R1bGUgaGFuZGxlICovCiAKICAgICBvd25lciA9IEZhckdldE93bmVyKCBoYW5kbGUgKTsKICAgICBpZiAoIShwdHIgPSBHbG9iYWxMb2NrMTYoIG93bmVyICkpKSByZXR1cm4gMDsKICAgICBpZiAoKChORV9NT0RVTEUgKilwdHIpLT5tYWdpYyA9PSBJTUFHRV9PUzJfU0lHTkFUVVJFKSByZXR1cm4gb3duZXI7CiAKLSAgICAgIC8qIFNlYXJjaCBmb3IgdGhpcyBoYW5kbGUgYW5kIGl0cyBvd25lciBpbnNpZGUgYWxsIHRhc2tzICovCisgICAgICAvKiBTZWFyY2ggZm9yIHRoZSBvd25lciBpbnNpZGUgYWxsIHRhc2tzICovCiAKLSAgICBoVGFzayA9IGhGaXJzdFRhc2s7Ci0gICAgd2hpbGUgKGhUYXNrKQorICAgICpoVGFzayA9IGhGaXJzdFRhc2s7CisgICAgd2hpbGUgKCpoVGFzaykKICAgICB7Ci0gICAgICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApOwotICAgICAgICBpZiAoKGhUYXNrID09IGhhbmRsZSkgfHwKLSAgICAgICAgICAgIChwVGFzay0+aEluc3RhbmNlID09IGhhbmRsZSkgfHwKLSAgICAgICAgICAgIChwVGFzay0+aFF1ZXVlID09IGhhbmRsZSkgfHwKLSAgICAgICAgICAgIChwVGFzay0+aFBEQiA9PSBoYW5kbGUpKSByZXR1cm4gcFRhc2stPmhNb2R1bGU7Ci0gICAgICAgIGlmICgoaFRhc2sgPT0gb3duZXIpIHx8CisgICAgICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCAqaFRhc2sgKTsKKyAgICAgICAgaWYgKCgqaFRhc2sgPT0gb3duZXIpIHx8CiAgICAgICAgICAgICAocFRhc2stPmhJbnN0YW5jZSA9PSBvd25lcikgfHwKICAgICAgICAgICAgIChwVGFzay0+aFF1ZXVlID09IG93bmVyKSB8fAogICAgICAgICAgICAgKHBUYXNrLT5oUERCID09IG93bmVyKSkgcmV0dXJuIHBUYXNrLT5oTW9kdWxlOwotICAgICAgICBoVGFzayA9IHBUYXNrLT5oTmV4dDsKKyAgICAgICAgKmhUYXNrID0gcFRhc2stPmhOZXh0OwogICAgIH0KKwogICAgIHJldHVybiAwOwogfQogCitITU9EVUxFMTYgV0lOQVBJIEdldEV4ZVB0ciggSEFORExFMTYgaGFuZGxlICkKK3sKKyAgICBIVEFTSzE2IGR1bW15OworICAgIHJldHVybiBHZXRFeGVQdHJIZWxwZXIoIGhhbmRsZSwgJmR1bW15ICk7Cit9CisKK3ZvaWQgV0lOQVBJIFdJTjE2X0dldEV4ZVB0ciggQ09OVEVYVCAqY29udGV4dCApCit7CisgICAgV09SRCAqc3RhY2sgPSBQVFJfU0VHX09GRl9UT19MSU4oU1NfcmVnKGNvbnRleHQpLCBTUF9yZWcoY29udGV4dCkpOworICAgIEhBTkRMRTE2IGhhbmRsZSA9IChIQU5ETEUxNilzdGFja1syXTsKKyAgICBIVEFTSzE2IGhUYXNrID0gMDsKKyAgICBITU9EVUxFMTYgaE1vZHVsZTsKKworICAgIGhNb2R1bGUgPSBHZXRFeGVQdHJIZWxwZXIoIGhhbmRsZSwgJmhUYXNrICk7CisKKyAgICBBWF9yZWcoY29udGV4dCkgPSBDWF9yZWcoY29udGV4dCkgPSBoTW9kdWxlOworICAgIGlmIChoVGFzaykgRVNfcmVnKGNvbnRleHQpID0gaFRhc2s7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFRhc2tGaXJzdCAgIChUT09MSEVMUC42MykKICAqLwpkaWZmIC0tZ2l0IGEvbWVtb3J5L3ZpcnR1YWwuYyBiL21lbW9yeS92aXJ0dWFsLmMKaW5kZXggYzAzMzU0My4uNDE0ZTljYSAxMDA2NDQKLS0tIGEvbWVtb3J5L3ZpcnR1YWwuYworKysgYi9tZW1vcnkvdmlydHVhbC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgInByb2Nlc3MuaCIKICNpbmNsdWRlICJ4bWFsbG9jLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2lmbmRlZiBNU19TWU5DCkBAIC0zNiwxNSArMzcsMTcgQEAKIC8qIEZpbGUgdmlldyAqLwogdHlwZWRlZiBzdHJ1Y3QgX0ZWCiB7Ci0gICAgc3RydWN0IF9GViAgICpuZXh0OyAgICAgLyogTmV4dCB2aWV3ICovCi0gICAgc3RydWN0IF9GViAgICpwcmV2OyAgICAgLyogUHJldiB2aWV3ICovCi0gICAgVUlOVDMyICAgICAgICBiYXNlOyAgICAgLyogQmFzZSBhZGRyZXNzICovCi0gICAgVUlOVDMyICAgICAgICBzaXplOyAgICAgLyogU2l6ZSBpbiBieXRlcyAqLwotICAgIFVJTlQzMiAgICAgICAgZmxhZ3M7ICAgIC8qIEFsbG9jYXRpb24gZmxhZ3MgKi8KLSAgICBVSU5UMzIgICAgICAgIG9mZnNldDsgICAvKiBPZmZzZXQgZnJvbSBzdGFydCBvZiBtYXBwZWQgZmlsZSAqLwotICAgIEZJTEVfTUFQUElORyAqbWFwcGluZzsgIC8qIEZpbGUgbWFwcGluZyAqLwotICAgIEJZVEUgICAgICAgICAgcHJvdGVjdDsgIC8qIFByb3RlY3Rpb24gZm9yIGFsbCBwYWdlcyBhdCBhbGxvY2F0aW9uIHRpbWUgKi8KLSAgICBCWVRFICAgICAgICAgIHByb3RbMV07ICAvKiBQcm90ZWN0aW9uIGJ5dGUgZm9yIGVhY2ggcGFnZSAqLworICAgIHN0cnVjdCBfRlYgICAqbmV4dDsgICAgICAgIC8qIE5leHQgdmlldyAqLworICAgIHN0cnVjdCBfRlYgICAqcHJldjsgICAgICAgIC8qIFByZXYgdmlldyAqLworICAgIFVJTlQzMiAgICAgICAgYmFzZTsgICAgICAgIC8qIEJhc2UgYWRkcmVzcyAqLworICAgIFVJTlQzMiAgICAgICAgc2l6ZTsgICAgICAgIC8qIFNpemUgaW4gYnl0ZXMgKi8KKyAgICBVSU5UMzIgICAgICAgIGZsYWdzOyAgICAgICAvKiBBbGxvY2F0aW9uIGZsYWdzICovCisgICAgVUlOVDMyICAgICAgICBvZmZzZXQ7ICAgICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgbWFwcGVkIGZpbGUgKi8KKyAgICBGSUxFX01BUFBJTkcgKm1hcHBpbmc7ICAgICAvKiBGaWxlIG1hcHBpbmcgKi8KKyAgICBIQU5ETEVSUFJPQyAgIGhhbmRsZXJQcm9jOyAvKiBGYXVsdCBoYW5kbGVyICovCisgICAgTFBWT0lEICAgICAgICBoYW5kbGVyQXJnOyAgLyogRmF1bHQgaGFuZGxlciBhcmd1bWVudCAqLworICAgIEJZVEUgICAgICAgICAgcHJvdGVjdDsgICAgIC8qIFByb3RlY3Rpb24gZm9yIGFsbCBwYWdlcyBhdCBhbGxvY2F0aW9uIHRpbWUgKi8KKyAgICBCWVRFICAgICAgICAgIHByb3RbMV07ICAgICAvKiBQcm90ZWN0aW9uIGJ5dGUgZm9yIGVhY2ggcGFnZSAqLwogfSBGSUxFX1ZJRVc7CiAKIC8qIFBlci1wYWdlIHByb3RlY3Rpb24gYnl0ZSB2YWx1ZXMgKi8KQEAgLTUwMSw2ICs1MDQsMzIgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBWSVJUVUFMX1NldEZhdWx0SGFuZGxlcgorICovCitCT09MMzIgVklSVFVBTF9TZXRGYXVsdEhhbmRsZXIoIExQVk9JRCBhZGRyLCBIQU5ETEVSUFJPQyBwcm9jLCBMUFZPSUQgYXJnICkKK3sKKyAgICBGSUxFX1ZJRVcgKnZpZXc7CisKKyAgICBpZiAoISh2aWV3ID0gVklSVFVBTF9GaW5kVmlldygoVUlOVDMyKWFkZHIpKSkgcmV0dXJuIEZBTFNFOworICAgIHZpZXctPmhhbmRsZXJQcm9jID0gcHJvYzsKKyAgICB2aWV3LT5oYW5kbGVyQXJnICA9IGFyZzsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgVklSVFVBTF9IYW5kbGVGYXVsdAorICovCitCT09MMzIgVklSVFVBTF9IYW5kbGVGYXVsdChMUFZPSUQgYWRkcikKK3sKKyAgICBGSUxFX1ZJRVcgKnZpZXcgPSBWSVJUVUFMX0ZpbmRWaWV3KChVSU5UMzIpYWRkcik7CisKKyAgICBpZiAodmlldyAmJiB2aWV3LT5oYW5kbGVyUHJvYykKKyAgICAgICAgcmV0dXJuIHZpZXctPmhhbmRsZXJQcm9jKHZpZXctPmhhbmRsZXJBcmcsIGFkZHIpOworICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgIFZpcnR1YWxBbGxvYyAgIChLRVJORUwzMi41NDgpCiAgKiBSZXNlcnZlcyBvciBjb21taXRzIGEgcmVnaW9uIG9mIHBhZ2VzIGluIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQogICoKZGlmZiAtLWdpdCBhL21pc2MvY2FsbGJhY2suYyBiL21pc2MvY2FsbGJhY2suYwppbmRleCBhMzkxMTlhLi4zOTA3ZmMzIDEwMDY0NAotLS0gYS9taXNjL2NhbGxiYWNrLmMKKysrIGIvbWlzYy9jYWxsYmFjay5jCkBAIC0xMTYsNiArMTE2LDE3IEBACiAgICAgcHJvYygpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJICAgICBDQUxMQkFDS19DYWxsUmVzb3VyY2VIYW5kbGVyUHJvYworICovCitzdGF0aWMgSEdMT0JBTDE2IFdJTkFQSSBDQUxMQkFDS19DYWxsUmVzb3VyY2VIYW5kbGVyUHJvYyggRkFSUFJPQzE2IHByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEdMT0JBTDE2IGhNZW1PYmosIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhNT0RVTEUxNiBoTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhSU1JDMTYgaFJzcmMgKQoreworICAgIHJldHVybiBwcm9jKCBoTWVtT2JqLCBoTW9kdWxlLCBoUnNyYyApOworfQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgICAgIENBTExCQUNLX0NhbGxBU1BJUG9zdFByb2MKQEAgLTIyNywzMiArMjM4LDMzIEBACiAgKi8KIHN0YXRpYyBjb25zdCBDQUxMQkFDS1NfVEFCTEUgQ0FMTEJBQ0tfV2luZWxpYlRhYmxlID0KIHsKLSAgICBDQUxMQkFDS19DYWxsUmVnaXN0ZXJQcm9jLCAgICAgLyogQ2FsbFJlZ2lzdGVyU2hvcnRQcm9jICovCi0gICAgQ0FMTEJBQ0tfQ2FsbFJlZ2lzdGVyUHJvYywgICAgIC8qIENhbGxSZWdpc3RlckxvbmdQcm9jICovCi0gICAgVEFTS19SZXNjaGVkdWxlLCAgICAgICAgICAgICAgIC8qIENhbGxUYXNrUmVzY2hlZHVsZVByb2MgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbEZyb20xNlduZFByb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsV25kUHJvYywgICAgICAgICAgLyogQ2FsbFduZFByb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsRHJpdmVyUHJvYywgICAgICAgLyogQ2FsbERyaXZlclByb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsRHJpdmVyQ2FsbGJhY2ssICAgLyogQ2FsbERyaXZlckNhbGxiYWNrICovCi0gICAgQ0FMTEJBQ0tfQ2FsbFRpbWVGdW5jUHJvYywgICAgIC8qIENhbGxUaW1lRnVuY1Byb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsV2luZG93c0V4aXRQcm9jLCAgLyogQ2FsbFdpbmRvd3NFeGl0UHJvYyAqLwotICAgIENBTExCQUNLX0NhbGxXb3JkQnJlYWtQcm9jLCAgICAvKiBDYWxsV29yZEJyZWFrUHJvYyAqLwotICAgIENBTExCQUNLX0NhbGxCb290QXBwUHJvYywgICAgICAvKiBDYWxsQm9vdEFwcFByb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsTG9hZEFwcFNlZ1Byb2MsICAgLyogQ2FsbExvYWRBcHBTZWdQcm9jICovCi0gICAgQ0FMTEJBQ0tfQ2FsbFN5c3RlbVRpbWVyUHJvYywgIC8qIENhbGxTeXN0ZW1UaW1lclByb2MgKi8KLSAgICBDQUxMQkFDS19DYWxsV09XQ2FsbGJhY2tQcm9jLCAgLyogQ2FsbFdPV0NhbGxiYWNrUHJvYyAqLwotICAgIENBTExCQUNLX0NhbGxXT1dDYWxsYmFjazE2RXgsICAvKiBDYWxsV09XQ2FsbGJhY2sxNkV4ICovCi0gICAgQ0FMTEJBQ0tfQ2FsbEFTUElQb3N0UHJvYywgICAgIC8qIENhbGxBU1BJUG9zdFByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsUmVnaXN0ZXJQcm9jLCAgICAgICAgLyogQ2FsbFJlZ2lzdGVyU2hvcnRQcm9jICovCisgICAgQ0FMTEJBQ0tfQ2FsbFJlZ2lzdGVyUHJvYywgICAgICAgIC8qIENhbGxSZWdpc3RlckxvbmdQcm9jICovCisgICAgVEFTS19SZXNjaGVkdWxlLCAgICAgICAgICAgICAgICAgIC8qIENhbGxUYXNrUmVzY2hlZHVsZVByb2MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbEZyb20xNlduZFByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsV25kUHJvYywgICAgICAgICAgICAgLyogQ2FsbFduZFByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsRHJpdmVyUHJvYywgICAgICAgICAgLyogQ2FsbERyaXZlclByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsRHJpdmVyQ2FsbGJhY2ssICAgICAgLyogQ2FsbERyaXZlckNhbGxiYWNrICovCisgICAgQ0FMTEJBQ0tfQ2FsbFRpbWVGdW5jUHJvYywgICAgICAgIC8qIENhbGxUaW1lRnVuY1Byb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsV2luZG93c0V4aXRQcm9jLCAgICAgLyogQ2FsbFdpbmRvd3NFeGl0UHJvYyAqLworICAgIENBTExCQUNLX0NhbGxXb3JkQnJlYWtQcm9jLCAgICAgICAvKiBDYWxsV29yZEJyZWFrUHJvYyAqLworICAgIENBTExCQUNLX0NhbGxCb290QXBwUHJvYywgICAgICAgICAvKiBDYWxsQm9vdEFwcFByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsTG9hZEFwcFNlZ1Byb2MsICAgICAgLyogQ2FsbExvYWRBcHBTZWdQcm9jICovCisgICAgQ0FMTEJBQ0tfQ2FsbFN5c3RlbVRpbWVyUHJvYywgICAgIC8qIENhbGxTeXN0ZW1UaW1lclByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsUmVzb3VyY2VIYW5kbGVyUHJvYywgLyogQ2FsbFJlc291cmNlSGFuZGxlclByb2MgKi8KKyAgICBDQUxMQkFDS19DYWxsV09XQ2FsbGJhY2tQcm9jLCAgICAgLyogQ2FsbFdPV0NhbGxiYWNrUHJvYyAqLworICAgIENBTExCQUNLX0NhbGxXT1dDYWxsYmFjazE2RXgsICAgICAvKiBDYWxsV09XQ2FsbGJhY2sxNkV4ICovCisgICAgQ0FMTEJBQ0tfQ2FsbEFTUElQb3N0UHJvYywgICAgICAgIC8qIENhbGxBU1BJUG9zdFByb2MgKi8KICAgICAvKiBUaGUgZ3JhcGhpY3MgZHJpdmVyIGNhbGxiYWNrcyBhcmUgbmV2ZXIgdXNlZCBpbiBXaW5lbGliICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZDb250cm9sUHJvYyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsRHJ2RW5hYmxlUHJvYyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsRHJ2RW51bURGb250c1Byb2MgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydkVudW1PYmpQcm9jICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZPdXRwdXRQcm9jICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZSZWFsaXplUHJvYyAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsRHJ2U3RyZXRjaEJsdFByb2MgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydkV4dFRleHRPdXRQcm9jICovCi0gICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZHZXRDaGFyV2lkdGggKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydkNvbnRyb2xQcm9jICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZFbmFibGVQcm9jICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZFbnVtREZvbnRzUHJvYyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsRHJ2RW51bU9ialByb2MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydk91dHB1dFByb2MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydlJlYWxpemVQcm9jICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxEcnZTdHJldGNoQmx0UHJvYyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsRHJ2RXh0VGV4dE91dFByb2MgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbERydkdldENoYXJXaWR0aCAqLwogfTsKIAogY29uc3QgQ0FMTEJBQ0tTX1RBQkxFICpDYWxsYmFja3MgPSAmQ0FMTEJBQ0tfV2luZWxpYlRhYmxlOwpkaWZmIC0tZ2l0IGEvbWlzYy9jcnRkbGwuYyBiL21pc2MvY3J0ZGxsLmMKaW5kZXggM2I4OGMzZi4uYzJmMzc1MCAxMDA2NDQKLS0tIGEvbWlzYy9jcnRkbGwuYworKysgYi9taXNjL2NydGRsbC5jCkBAIC0zMDYsNyArMzA2LDkgQEAKICAgICBJTlQzMiByZXM7CiAKICAgICB2YV9zdGFydCggdmFsaXN0LCBmb3JtYXQgKTsKKyNpZmRlZiBIQVZFX1ZGU0NBTkYKICAgICByZXMgPSB2ZnNjYW5mKCB4bGF0X2ZpbGVfcHRyKHN0cmVhbSksIGZvcm1hdCwgdmFsaXN0ICk7CisjZW5kaWYKICAgICB2YV9lbmQoIHZhbGlzdCApOwogICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9taXNjL2ltYWdlbGlzdC5jIGIvbWlzYy9pbWFnZWxpc3QuYwppbmRleCBlY2Q2ZDMxLi41Y2E2ZTI0IDEwMDY0NAotLS0gYS9taXNjL2ltYWdlbGlzdC5jCisrKyBiL21pc2MvaW1hZ2VsaXN0LmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IDE5OTggRXJpYyBLb2hsCiAgKgogICogIFRPRE86Ci0gKiAgICAtIEZpeCBvZmZzZXRzIGluIEltYWdlTGlzdF9EcmF3SW5kaXJlY3QuCisgKiAgICAtIEZpeCB4Qml0bWFwIGFuZCB5Qml0bWFwIGluIEltYWdlTGlzdF9EcmF3SW5kaXJlY3QuCiAgKiAgICAtIEZpeCBJTERfVFJBTlNQQVJFTlQgZXJyb3IgaW4gSW1hZ2VMaXN0X0RyYXdJbmRpcmVjdC4KICAqICAgIC0gRml4IEltYWdlTGlzdF9HZXRJY29uIChtaWdodCBiZSBhIHJlc3VsdCBvZiB0aGUKICAqICAgICAgSUxEX1RSQU5TUEFSRU5UIGVycm9yIGluIEltYWdlTGlzdF9EcmF3SW5kaXJlY3QpLgpAQCAtMTE1LDcgKzExNSw3IEBACiAKICAgICBpZiAoaGltbC0+aGJtTWFzaykgewogICAgICAgICBoYm1OZXdCaXRtYXAgPSAKLSAgICAgICAgICAgIENyZWF0ZUJpdG1hcDMyIChuTmV3V2lkdGgsIGhpbWwtPmN5LCAxLCAxLCBOVUxMKTsKKyAgICAgICAgICAgIENyZWF0ZUJpdG1hcDMyIChuTmV3V2lkdGgsIGhpbWwtPmN5LCAxLCBoaW1sLT51Qml0c1BpeGVsLCBOVUxMKTsKIAogICAgICAgICBpZiAoaGJtTmV3Qml0bWFwID09IDApCiAgICAgICAgICAgICBFUlIgKGltYWdlbGlzdCwgImNyZWF0aW5nIG5ldyBtYXNrIGJpdG1hcCEiKTsKQEAgLTI3NCwxMCArMjc0LDEzIEBACiAgICAgSU5UMzIgICAgbkluZGV4LCBuSW1hZ2VDb3VudDsKICAgICBCSVRNQVAzMiBibXA7CiAgICAgSU5UMzIgICAgblN0YXJ0WCwgblJ1blgsIG5SdW5ZOworICAgIENPTE9SUkVGIGJrQ29sb3I7CiAKICAgICBpZiAoaGltbCA9PSBOVUxMKQogCXJldHVybiAoLTEpOwogCisgICAgYmtDb2xvciA9IChjbHJNYXNrID09IENMUl9OT05FKSA/IGhpbWwtPmNsckJrIDogY2xyTWFzazsKKwogICAgIEdldE9iamVjdDMyQSAoaGJtSW1hZ2UsIHNpemVvZihCSVRNQVAzMiksICZibXApOwogICAgIG5JbWFnZUNvdW50ID0gYm1wLmJtV2lkdGggLyBoaW1sLT5jeDsKIApAQCAtMzAzLDggKzMwNiw3IEBACiAgICAgICAgIGZvciAoblJ1blkgPSAwOyBuUnVuWSA8IGhpbWwtPmN5OyBuUnVuWSsrKSB7CiAgICAgICAgICAgICBmb3IgKG5SdW5YID0gMDsgblJ1blggPCBibXAuYm1XaWR0aDsgblJ1blgrKykgewogICAgICAgICAgICAgICAgIGlmIChHZXRQaXhlbDMyIChoZGNJbWFnZUxpc3QsIG5TdGFydFggKyBuUnVuWCwgblJ1blkpID09Ci0gICAgICAgICAgICAgICAgICAgIGNsck1hc2spCi0gICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBia0NvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIFNldFBpeGVsMzIgKGhkY0ltYWdlTGlzdCwgblN0YXJ0WCArIG5SdW5YLCBuUnVuWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkdCKDAsIDAsIDApKTsKICAgICAgICAgICAgICAgICAgICAgU2V0UGl4ZWwzMiAoaGRjTWFzaywgblN0YXJ0WCArIG5SdW5YLCBuUnVuWSwKQEAgLTQzOCw3ICs0NDAsOCBAQAogICAgICAgICAvKiBjcmVhdGUgdGVtcG9yYXJ5IGJpdG1hcHMgKi8KICAgICAgICAgaGJtVGVtcEltYWdlID0gQ3JlYXRlQml0bWFwMzIgKGhpbWxTcmMtPmN4LCBoaW1sU3JjLT5jeSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbWxTcmMtPnVCaXRzUGl4ZWwsIE5VTEwpOwotICAgICAgICBoYm1UZW1wTWFzayA9IENyZWF0ZUJpdG1hcDMyIChoaW1sU3JjLT5jeCwgaGltbFNyYy0+Y3ksIDEsIDEsIE5VTEwpOworICAgICAgICBoYm1UZW1wTWFzayA9IENyZWF0ZUJpdG1hcDMyIChoaW1sU3JjLT5jeCwgaGltbFNyYy0+Y3ksIDEsCisJCQkJICAgICAgaGltbFNyYy0+dUJpdHNQaXhlbCwgTlVMTCk7CiAKICAgICAgICAgLyogY29weSAoYW5kIHN0cmV0Y2gpIGRlc3RpbmF0aW9uIHRvIHRlbXBvcmFyeSBiaXRtYXBzLihzYXZlKSAqLwogICAgICAgICAvKiBpbWFnZSAqLwpAQCAtNTc4LDggKzU4MSw4IEBACiAgICAgfQogCiAgICAgaWYgKGhpbWwtPmZsYWdzICYgSUxDX01BU0spIHsKLSAgICAgICAgaGltbC0+aGJtTWFzayA9IAotICAgICAgICAgICAgQ3JlYXRlQml0bWFwMzIgKGhpbWwtPmN4ICogaGltbC0+Y01heEltYWdlLCBoaW1sLT5jeSwgMSwgMSwgTlVMTCk7CisgICAgICAgIGhpbWwtPmhibU1hc2sgPSBDcmVhdGVCaXRtYXAzMiAoaGltbC0+Y3ggKiBoaW1sLT5jTWF4SW1hZ2UsIGhpbWwtPmN5LAorCQkJCQkxLCBoaW1sLT51Qml0c1BpeGVsLCBOVUxMKTsKICAgICAgICAgaWYgKGhpbWwtPmhibU1hc2sgPT0gMCkgewogICAgICAgICAgICAgRVJSKGltYWdlbGlzdCwgIkVycm9yIGNyZWF0aW5nIG1hc2sgYml0bWFwIVxuIik7CiAgICAgICAgICAgICBpZiAoaGltbC0+aGJtSW1hZ2UpCkBAIC04NjAsNyArODYzLDcgQEAKIAogQk9PTDMyIFdJTkFQSQogSW1hZ2VMaXN0X0RyYXdFeCAoSElNQUdFTElTVCBoaW1sLCBJTlQzMiBpLCBIREMzMiBoZGMsIElOVDMyIHgsIElOVDMyIHksCi0JCSAgSU5UMzIgeE9mZnMsIElOVDMyIHlPZmZzLCBDT0xPUlJFRiByZ2JCaywgQ09MT1JSRUYgcmdiRmcsCisJCSAgSU5UMzIgZHgsIElOVDMyIGR5LCBDT0xPUlJFRiByZ2JCaywgQ09MT1JSRUYgcmdiRmcsCiAJCSAgVUlOVDMyIGZTdHlsZSkKIHsKICAgICBJTUFHRUxJU1REUkFXUEFSQU1TIGltbGRwOwpAQCAtODcxLDggKzg3NCw4IEBACiAgICAgaW1sZHAuaGRjRHN0ICA9IGhkYywKICAgICBpbWxkcC54ICAgICAgID0geDsKICAgICBpbWxkcC55ICAgICAgID0geTsKLSAgICBpbWxkcC5jeCAgICAgID0geE9mZnM7Ci0gICAgaW1sZHAuY3kgICAgICA9IHlPZmZzOworICAgIGltbGRwLmN4ICAgICAgPSBkeDsKKyAgICBpbWxkcC5jeSAgICAgID0gZHk7CiAgICAgaW1sZHAueEJpdG1hcCA9IDA7CiAgICAgaW1sZHAueUJpdG1hcCA9IDA7CiAgICAgaW1sZHAucmdiQmsgICA9IHJnYkJrOwpAQCAtOTA0LDYgKzkwNyw3IEBACiAgICAgSERDMzIgICAgICBoZGNJbWFnZUxpc3QsIGhkY1RlbXBJbWFnZTsKICAgICBIQklUTUFQMzIgIGhibVRlbXBJbWFnZTsKICAgICBIQlJVU0gzMiAgIGhCcnVzaCwgaE9sZEJydXNoOworICAgIElOVDMyICAgICAgY3gsIGN5OwogICAgIElOVDMyICAgICAgbk92bElkeDsKICAgICBDT0xPUlJFRiAgIGNsckJsZW5kOwogICAgIEJPT0wzMiAgICAgYkltYWdlOyAgICAgICAvKiBkcmF3IGltYWdlID8gKi8KQEAgLTkyMCw3ICs5MjQsMTAgQEAKIAlyZXR1cm4gKEZBTFNFKTsKIAogICAgIGhpbWxMb2NhbCA9IHBpbWxkcC0+aGltbDsKLSAgICAKKworICAgIGN4ID0gKHBpbWxkcC0+Y3ggPT0gMCkgPyBoaW1sTG9jYWwtPmN4IDogcGltbGRwLT5jeDsKKyAgICBjeSA9IChwaW1sZHAtPmN5ID09IDApID8gaGltbExvY2FsLT5jeSA6IHBpbWxkcC0+Y3k7CisKICAgICAvKiBJTERfTk9STUFMIHN0YXRlICovCiAgICAgYkltYWdlICAgICAgPSBUUlVFOwogICAgIGJJbWFnZVRyYW5zID0gRkFMU0U7CkBAIC05NjcsMzEgKzk3NCwyOSBAQAogCiAgICAgaWYgKGJNYXNrKQogICAgIHsKLSAgICAgICAgLyogZHJhdyB0aGUgbWFzayAqLwotICAgICAgICBTZWxlY3RPYmplY3QzMiAoaGRjSW1hZ2VMaXN0LCBoaW1sTG9jYWwtPmhibU1hc2spOwotICAgICAgICAKLSAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwKLSAgICAgICAgICAgICAgICAgIGhpbWxMb2NhbC0+Y3gsIGhpbWxMb2NhbC0+Y3ksIGhkY0ltYWdlTGlzdCwKLSAgICAgICAgICAgICAgICAgIGhpbWxMb2NhbC0+Y3ggKiBwaW1sZHAtPmksIDAsCi0gICAgICAgICAgICAgICAgICBiTWFza1RyYW5zID8gU1JDQU5EIDogU1JDQ09QWSk7CisJLyogZHJhdyB0aGUgbWFzayAqLworCVNlbGVjdE9iamVjdDMyIChoZGNJbWFnZUxpc3QsIGhpbWxMb2NhbC0+aGJtTWFzayk7CisJQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgY3gsIGN5LAorCQkgIGhkY0ltYWdlTGlzdCwgaGltbExvY2FsLT5jeCAqIHBpbWxkcC0+aSwgMCwKKwkJICBiTWFza1RyYW5zID8gU1JDQU5EIDogU1JDQ09QWSk7CiAgICAgfQogCiAgICAgaWYgKGJJbWFnZSkKICAgICB7Ci0gICAgICAgIC8qIGRyYXcgdGhlIGltYWdlICovCi0gICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZUxpc3QsIGhpbWxMb2NhbC0+aGJtSW1hZ2UpOworCS8qIGRyYXcgdGhlIGltYWdlICovCisJU2VsZWN0T2JqZWN0MzIgKGhkY0ltYWdlTGlzdCwgaGltbExvY2FsLT5oYm1JbWFnZSk7CiAKICAgICAgICAgaWYgKCFiSW1hZ2VUcmFucykKICAgICAgICAgewogICAgICAgICAgICAgaEJydXNoID0gQ3JlYXRlU29saWRCcnVzaDMyIChoaW1sTG9jYWwtPmNsckJrKTsKICAgICAgICAgICAgIGhPbGRCcnVzaCA9IFNlbGVjdE9iamVjdDMyIChwaW1sZHAtPmhkY0RzdCwgaEJydXNoKTsKICAgICAgICAgICAgIFBhdEJsdDMyIChwaW1sZHAtPmhkY0RzdCwgcGltbGRwLT54LCBwaW1sZHAtPnksCi0gICAgICAgICAgICAgICAgICAgICAgaGltbExvY2FsLT5jeCwgaGltbExvY2FsLT5jeSwgUEFUQ09QWSk7CisgICAgICAgICAgICAgICAgICAgICAgY3gsIGN5LCBQQVRDT1BZKTsKICAgICAgICAgICAgIERlbGV0ZU9iamVjdDMyIChTZWxlY3RPYmplY3QzMiAocGltbGRwLT5oZGNEc3QsIGhPbGRCcnVzaCkpOwogICAgICAgICB9CiAKLSAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgaGltbExvY2FsLT5jeCwKLSAgICAgICAgICAgICAgICAgIGhpbWxMb2NhbC0+Y3ksIGhkY0ltYWdlTGlzdCwgaGltbExvY2FsLT5jeCAqIHBpbWxkcC0+aSwgMCwKKyAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgY3gsIGN5LAorICAgICAgICAgICAgICAgICAgaGRjSW1hZ2VMaXN0LCBoaW1sTG9jYWwtPmN4ICogcGltbGRwLT5pLCAwLAogICAgICAgICAgICAgICAgICAgU1JDUEFJTlQpOwogCiAgICAgICAgIGlmIChiQmxlbmQyNSB8fCBiQmxlbmQ1MCkKQEAgLTEwMTcsOCArMTAyMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgaGltbExvY2FsLT5jeSwgaGRjSW1hZ2VMaXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBwaW1sZHAtPmkgKiBoaW1sTG9jYWwtPmN4LCAwLCBTUkNQQUlOVCk7CiAKLSAgICAgICAgICAgIEJpdEJsdDMyIChwaW1sZHAtPmhkY0RzdCwgcGltbGRwLT54LCBwaW1sZHAtPnksIGhpbWxMb2NhbC0+Y3gsCi0gICAgICAgICAgICAgICAgICAgICAgaGltbExvY2FsLT5jeSwgaGRjVGVtcEltYWdlLCAwLCAwLCBTUkNBTkQpOworICAgICAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgY3gsIGN5LAorCQkgICAgICBoZGNUZW1wSW1hZ2UsIDAsIDAsIFNSQ0FORCk7CiAKICAgICAgICAgICAgIC8qIGZpbGwgKi8KICAgICAgICAgICAgIGhCcnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2gzMiAoY2xyQmxlbmQpOwpAQCAtMTAzNSw4ICsxMDQwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICBoaW1sTG9jYWwtPmN5LCBoZGNJbWFnZUxpc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHBpbWxkcC0+aSAqIGhpbWxMb2NhbC0+Y3gsIDAsIFNSQ1BBSU5UKTsKIAotICAgICAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgaGltbExvY2FsLT5jeCwKLSAgICAgICAgICAgICAgICAgICAgICBoaW1sTG9jYWwtPmN5LCBoZGNUZW1wSW1hZ2UsIDAsIDAsIFNSQ1BBSU5UKTsKKyAgICAgICAgICAgIEJpdEJsdDMyIChwaW1sZHAtPmhkY0RzdCwgcGltbGRwLT54LCBwaW1sZHAtPnksIGN4LCBjeSwKKyAgICAgICAgICAgICAgICAgICAgICBoZGNUZW1wSW1hZ2UsIDAsIDAsIFNSQ1BBSU5UKTsKIAogICAgICAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGhibVRlbXBJbWFnZSk7CiAgICAgICAgICAgICBEZWxldGVEQzMyIChoZGNUZW1wSW1hZ2UpOwpAQCAtMTA0NCwyNCArMTA0OSwyMCBAQAogICAgIH0gICAKIAogICAgIC8qIERyYXcgb3ZlcmxheSBpbWFnZSAqLwotICAgIGlmIChwaW1sZHAtPmZTdHlsZSAmIDB4MDcwMCkKLSAgICB7Ci0gICAgICAgIG5PdmxJZHggPSAocGltbGRwLT5mU3R5bGUgJiAweDA3MDApID4+IDg7Ci0gICAgICAgIGlmICgobk92bElkeCA+PSAxKSAmJiAobk92bElkeCA8PSBNQVhfT1ZFUkxBWUlNQUdFKSkKLSAgICAgICAgewotICAgICAgICAgICAgbk92bElkeCA9IHBpbWxkcC0+aGltbC0+bk92bElkeFtuT3ZsSWR4IC0gMV07Ci0gICAgICAgICAgICBpZiAoKG5PdmxJZHggPj0gMCkgJiYgKG5PdmxJZHggPD0gcGltbGRwLT5oaW1sLT5jQ3VySW1hZ2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwaW1sZHAtPmhpbWwtPmhibU1hc2spCi0gICAgICAgICAgICAgICAgeyAgCisgICAgaWYgKHBpbWxkcC0+ZlN0eWxlICYgMHgwNzAwKSB7CisJbk92bElkeCA9IChwaW1sZHAtPmZTdHlsZSAmIDB4MDcwMCkgPj4gODsKKwlpZiAoKG5PdmxJZHggPj0gMSkgJiYgKG5PdmxJZHggPD0gTUFYX09WRVJMQVlJTUFHRSkpIHsKKwkgICAgbk92bElkeCA9IHBpbWxkcC0+aGltbC0+bk92bElkeFtuT3ZsSWR4IC0gMV07CisJICAgIGlmICgobk92bElkeCA+PSAwKSAmJiAobk92bElkeCA8PSBwaW1sZHAtPmhpbWwtPmNDdXJJbWFnZSkpIHsKKwkJaWYgKHBpbWxkcC0+aGltbC0+aGJtTWFzaykgeyAgCiAgICAgICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZUxpc3QsIHBpbWxkcC0+aGltbC0+aGJtTWFzayk7Ci0gICAgICAgICAgICAgICAgICAgIEJpdEJsdDMyIChwaW1sZHAtPmhkY0RzdCwgcGltbGRwLT54LCBwaW1sZHAtPnksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGltbGRwLT5oaW1sLT5jeCwgcGltbGRwLT5oaW1sLT5jeSwgaGRjSW1hZ2VMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGltbGRwLT5oaW1sLT5jeCAqIG5PdmxJZHgsIDAsIFNSQ0FORCk7ICAKLSAgICAgICAgICAgICAgICB9ICAKKyAgICAgICAgICAgICAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwgY3gsIGN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRjSW1hZ2VMaXN0LCBwaW1sZHAtPmhpbWwtPmN4ICogbk92bElkeCwgMCwKKwkJCSAgICAgIFNSQ0FORCk7CisJCX0gIAogICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZUxpc3QsIHBpbWxkcC0+aGltbC0+aGJtSW1hZ2UpOwotICAgICAgICAgICAgICAgIEJpdEJsdDMyIChwaW1sZHAtPmhkY0RzdCwgcGltbGRwLT54LCBwaW1sZHAtPnksIAotICAgICAgICAgICAgICAgICAgICAgICAgICBwaW1sZHAtPmhpbWwtPmN4LCBwaW1sZHAtPmhpbWwtPmN5LCBoZGNJbWFnZUxpc3QsCisgICAgICAgICAgICAgICAgQml0Qmx0MzIgKHBpbWxkcC0+aGRjRHN0LCBwaW1sZHAtPngsIHBpbWxkcC0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3gsIGN5LCBoZGNJbWFnZUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbWxkcC0+aGltbC0+Y3ggKiBuT3ZsSWR4LCAwLCBTUkNQQUlOVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NDUsNyArMTc0Niw3IEBACiAgICAgICAgICAgICBEZWxldGVPYmplY3QzMiAoaGltbC0+aGJtTWFzayk7CiAgICAgICAgICAgICBoaW1sLT5oYm1NYXNrID0KICAgICAgICAgICAgICAgICBDcmVhdGVCaXRtYXAzMiAoaGltbC0+Y01heEltYWdlICogaGltbC0+Y3gsIGhpbWwtPmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xNzY0LDcgKzE3NjUsNyBAQAogICAgICAgICAgICAgQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKGhpbWwtPmhibU1hc2spCi0gICAgICAgICAgICBoYm1OZXdNYXNrID0gQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgMSwgTlVMTCk7CisgICAgICAgICAgICBoYm1OZXdNYXNrID0gQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhibU5ld01hc2sgPSAwOyAgLyogSnVzdCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5ISAqLwogCkBAIC0yMTIyLDcgKzIxMjMsNyBAQAogICAgICAgICBEZWxldGVPYmplY3QzMiAoaGltbC0+aGJtTWFzayk7CiAgICAgICAgIGhpbWwtPmhibU1hc2sgPQogICAgICAgICAgICAgQ3JlYXRlQml0bWFwMzIgKGhpbWwtPmNNYXhJbWFnZSAqIGhpbWwtPmN4LCBoaW1sLT5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBoaW1sLT51Qml0c1BpeGVsLCBOVUxMKTsKICAgICB9CiAKICAgICByZXR1cm4gKFRSVUUpOwpAQCAtMjE3OSw3ICsyMTgwLDcgQEAKICAgICBpZiAoaGltbC0+aGJtTWFzaykKICAgICB7CiAgICAgICAgIGhibU5ld0JpdG1hcCA9IENyZWF0ZUJpdG1hcDMyIChuTmV3Q291bnQgKiBoaW1sLT5jeCwgaGltbC0+Y3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGhpbWwtPnVCaXRzUGl4ZWwsIE5VTEwpOwogICAgICAgICBpZiAoaGJtTmV3Qml0bWFwICE9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZUxpc3QsIGhpbWwtPmhibU1hc2spOwpkaWZmIC0tZ2l0IGEvbWlzYy9sc3RyLmMgYi9taXNjL2xzdHIuYwppbmRleCAwNDNhNzc4Li4wMjU1MDQ5IDEwMDY0NAotLS0gYS9taXNjL2xzdHIuYworKysgYi9taXNjL2xzdHIuYwpAQCAtNDMsMTMgKzQzLDEzIEBACiAvKiBGSVhNRTogc2hvdWxkIHByb2JhYmx5IGdldCByaWQgb2Ygd2N0eXBlLmggYWx0b2dldGhlciAqLwogI2luY2x1ZGUgImNhc2VtYXAuaCIKIAotV0NIQVIgX3Rvd3VwcGVyKFdDSEFSIGNvZGUpCitXQ0hBUiB0b3d1cHBlcihXQ0hBUiBjb2RlKQogewogICAgIGNvbnN0IFdDSEFSICogcHRyID0gdXBydGFibGVbSElCWVRFKGNvZGUpXTsKICAgICByZXR1cm4gcHRyID8gcHRyW0xPQllURShjb2RlKV0gOiBjb2RlOwogfQogCi1XQ0hBUiBfdG93bG93ZXIoV0NIQVIgY29kZSkKK1dDSEFSIHRvd2xvd2VyKFdDSEFSIGNvZGUpCiB7CiAgICAgY29uc3QgV0NIQVIgKiBwdHIgPSBsd3J0YWJsZVtISUJZVEUoY29kZSldOwogICAgIHJldHVybiBwdHIgPyBwdHJbTE9CWVRFKGNvZGUpXSA6IGNvZGU7CkBAIC0xNzEsMTUgKzE3MSwxMCBAQAogdm9pZCBXSU5BUEkgT3V0cHV0RGVidWdTdHJpbmcxNiggTFBDU1RSIHN0ciApCiB7CiAgICAgY2hhciBtb2R1bGVbMTBdOwotICAgIGNoYXIgKnAsICpidWZmZXIgPSBIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIDAsIHN0cmxlbihzdHIpKzIgKTsKLSAgICAvKiBSZW1vdmUgQ1JzICovCi0gICAgZm9yIChwID0gYnVmZmVyOyAqc3RyOyBzdHIrKykgaWYgKCpzdHIgIT0gJ1xyJykgKnArKyA9ICpzdHI7Ci0gICAgKnAgPSAnXDAnOwotICAgIGlmICgocCA+IGJ1ZmZlcikgJiYgKHBbLTFdID09ICdcbicpKSBwWzFdID0gJ1wwJzsgLyogUmVtb3ZlIHRyYWlsaW5nIFxuICovCiAgICAgaWYgKCFHZXRNb2R1bGVOYW1lKCBHZXRDdXJyZW50VGFzaygpLCBtb2R1bGUsIHNpemVvZihtb2R1bGUpICkpCiAgICAgICAgIHN0cmNweSggbW9kdWxlLCAiPz8/IiApOwotICAgIERVTVAoIiVzIHNheXMgJyVzJ1xuIiwgbW9kdWxlLCBidWZmZXIgKTsKLSAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgYnVmZmVyICk7CisKKyAgICBEVU1QKCAiJXMgc2F5cyAlc1xuIiwgbW9kdWxlLCBkZWJ1Z3N0cl9hKHN0cikgKTsKIH0KIAogCmRpZmYgLS1naXQgYS9taXNjL21haW4uYyBiL21pc2MvbWFpbi5jCmluZGV4IDhkYjBmOWQuLjk4MTllNTUgMTAwNjQ0Ci0tLSBhL21pc2MvbWFpbi5jCisrKyBiL21pc2MvbWFpbi5jCkBAIC0yMTIsNiArMjEyLDkgQEAKICAgLyogZGVmaW5lZCBpbiByZWxheTMyL3JlbGF5Mzg2LmMgKi8KICAgZXh0ZXJuIGNoYXIgKipkZWJ1Z19yZWxheV9pbmNsdWRlbGlzdDsKICAgZXh0ZXJuIGNoYXIgKipkZWJ1Z19yZWxheV9leGNsdWRlbGlzdDsKKyAgLyogZGVmaW5lZCBpbiByZWxheTMyL3Nub29wLmMgKi8KKyAgZXh0ZXJuIGNoYXIgKipkZWJ1Z19zbm9vcF9pbmNsdWRlbGlzdDsKKyAgZXh0ZXJuIGNoYXIgKipkZWJ1Z19zbm9vcF9leGNsdWRlbGlzdDsKIAogICBpbnQgbCwgY2xzOwogICBpZiAoc3RybGVuKG9wdGlvbnMpPDMpCkBAIC0yNDcsMTMgKzI1MCwxNCBAQAogCSAgICBpZihjbHMgPT0gLTEgfHwgY2xzID09IGopCiAJICAgICAgZGVidWdfbXNnX2VuYWJsZWRbaV1bal09KCpvcHRpb25zPT0nKycpOwogICAgICAgfQotICAgIGVsc2UgaWYgKCFsc3RybmNtcGkzMkEob3B0aW9ucysxLCAicmVsYXk9IiwgNikpCisgICAgZWxzZSBpZiAoIWxzdHJuY21waTMyQShvcHRpb25zKzEsICJyZWxheT0iLCA2KSB8fAorCSAgICAgIWxzdHJuY21waTMyQShvcHRpb25zKzEsICJzbm9vcD0iLCA2KSkKICAgICAgIHsKIAlpbnQgaSwgajsKIAljaGFyICpzLCAqczIsICoqKm91dHB1dCwgYzsKIAogCWZvciAoaT0wOyBpPERFQlVHX0NIQU5ORUxfQ09VTlQ7IGkrKykKLQkgIGlmIChkZWJ1Z19jaF9uYW1lICYmICghbHN0cm5jbXBpMzJBKGRlYnVnX2NoX25hbWVbaV0sInJlbGF5Iiw1KSkpeworCSAgaWYgKGRlYnVnX2NoX25hbWUgJiYgKCFsc3RybmNtcGkzMkEoZGVidWdfY2hfbmFtZVtpXSxvcHRpb25zKzEsNSkpKXsKIAkgICAgZm9yKGo9MDsgajxERUJVR19DTEFTU19DT1VOVDsgaisrKQogCSAgICAgIGlmKGNscyA9PSAtMSB8fCBjbHMgPT0gaikKIAkJZGVidWdfbXNnX2VuYWJsZWRbaV1bal09VFJVRTsKQEAgLTI2MiwxMCArMjY2LDEzIEBACiAJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiwgbWF5YmUgYXNzZXJ0KGkhPURFQlVHX0NIQU5ORUxfQ09VTlQpPyAqLwogCWlmIChpPT1ERUJVR19DSEFOTkVMX0NPVU5UKQogCSAgcmV0dXJuIEZBTFNFOwotCWlmICgqb3B0aW9ucyA9PSAnKycpCi0JICBvdXRwdXQgPSAmZGVidWdfcmVsYXlfaW5jbHVkZWxpc3Q7Ci0JZWxzZQotCSAgb3V0cHV0ID0gJmRlYnVnX3JlbGF5X2V4Y2x1ZGVsaXN0OworCW91dHB1dCA9ICgqb3B0aW9ucyA9PSAnKycpID8KKwkJCSgoKihvcHRpb25zKzEpID09ICdyJykgPworCQkJCSZkZWJ1Z19yZWxheV9pbmNsdWRlbGlzdCA6CisJCQkJJmRlYnVnX3Nub29wX2luY2x1ZGVsaXN0KSA6CisJCQkoKCoob3B0aW9ucysxKSA9PSAncicpID8KKwkJCQkmZGVidWdfcmVsYXlfZXhjbHVkZWxpc3QgOgorCQkJCSZkZWJ1Z19zbm9vcF9leGNsdWRlbGlzdCk7CiAJcyA9IG9wdGlvbnMgKyA3OwogCWkgPSAxOwogCXdoaWxlKChzID0gc3RyY2hyKHMsICc6JykpKSBpKyssIHMrKzsKQEAgLTQ0OCw4ICs0NTUsMTMgQEAKIAkgICAgaW50IGk7CiAJICAgIE1TRygiJXM6IFN5bnRheDogLWRlYnVnbXNnIFtjbGFzc10reHh4LC4uLiAgb3IgIgogCQkgICAgIi1kZWJ1Z21zZyBbY2xhc3NdLXh4eCwuLi5cbiIsYXJndlswXSk7Ci0JICAgIE1TRygiRXhhbXBsZTogLWRlYnVnbXNnICthbGwsd2Fybi1oZWFwIgotCQkgICAgInR1cm4gb24gYWxsIG1lc3NhZ2VzIGV4Y2VwdCB3YXJuaW5nIGhlYXAgbWVzc2FnZXNcbiIpOworCSAgICBNU0coIkV4YW1wbGU6IC1kZWJ1Z21zZyArYWxsLHdhcm4taGVhcFxuIgorCQkgICAgIiAgdHVybiBvbiBhbGwgbWVzc2FnZXMgZXhjZXB0IHdhcm5pbmcgaGVhcCBtZXNzYWdlc1xuIik7CisJICAgIE1TRygiU3BlY2lhbCBjYXNlOiAtZGVidWdtc2cgK3JlbGF5PURMTDpETEwuIyMjOkZ1bmNOYW1lXG4iCisJCSIgIHR1cm4gb24gLWRlYnVnbXNnICtyZWxheSBvbmx5IGFzIHNwZWNpZmllZFxuIgorCQkiU3BlY2lhbCBjYXNlOiAtZGVidWdtc2cgLXJlbGF5PURMTDpETEwuIyMjOkZ1bmNOYW1lXG4iCisJCSIgIHR1cm4gb24gLWRlYnVnbXNnICtyZWxheSBleGNlcHQgYXMgc3BlY2lmaWVkXG4iCisJCSJBbHNvIHBlcm1pdHRlZCwgK3Nub29wPS4uLiwgLXNub29wPS4uLiBhcyB3aXRoIHJlbGF5LlxuXG4iKTsKIAogCSAgICBNU0coIkF2YWlsYWJsZSBtZXNzYWdlIGNsYXNzZXM6XG4iKTsKIAkgICAgZm9yKGk9MDtpPERFQlVHX0NMQVNTX0NPVU5UO2krKykKZGlmZiAtLWdpdCBhL21pc2MvbnRkbGwuYyBiL21pc2MvbnRkbGwuYwppbmRleCBkMjY1ZDkyLi4xNjljZjQ1IDEwMDY0NAotLS0gYS9taXNjL250ZGxsLmMKKysrIGIvbWlzYy9udGRsbC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAiZGVidWdzdHIuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsTGVuZ3RoUmVxdWlyZWRTaWQJCQlbTlRETExdCkBAIC02ODAsMyArNjgxLDM0IEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworRFdPUkQgV0lOQVBJIE50T3BlbktleShEV09SRCB4MSxEV09SRCB4MixEV09SRCB4MykgeworCUZJWE1FKG50ZGxsLCIoMHglMDhseCglcyksMHglMDhseCwweCUwOGx4KSxzdHViIVxuIix4MSwKKwkJZGVidWdzdHJfdygqKExQV1NUUiopeDEpLHgyLHgzKTsKKwkvKiBobW0uLi4gKi8KKwlyZXR1cm4gUmVnT3BlbktleTMyVyh4MiwqKExQV1NUUiopeDEseDMpOworfQorCitEV09SRCBXSU5BUEkgTnRRdWVyeVZhbHVlS2V5KERXT1JEIHgxLERXT1JEIHgyLERXT1JEIHgzLERXT1JEIHg0LERXT1JEIHg1LERXT1JEIHg2KSB7CisJRklYTUUobnRkbGwsIiglMDhseCwlMDhseCwlMDhseCwlMDhseCwlMDhseCwlMDhseCksc3R1YiFcbiIsCisJCXgxLHgyLHgzLHg0LHg1LHg2CisJKTsKKwlyZXR1cm4gMDsKK30KKworRFdPUkQgV0lOQVBJIE50UXVlcnlUaW1lclJlc29sdXRpb24oRFdPUkQgeDEsRFdPUkQgeDIsRFdPUkQgeDMpIHsKKwlGSVhNRShudGRsbCwiKDB4JTA4bHgsMHglMDhseCwweCUwOGx4KSwgc3R1YiFcbiIseDEseDIseDMpOworCXJldHVybiAxOworfQorCitEV09SRCBXSU5BUEkgTnRDbG9zZShEV09SRCB4MSkgeworCUZJWE1FKG50ZGxsLCIoMHglMDhseCksc3R1YiFcbiIseDEpOworCXJldHVybiAxOworfQorCitEV09SRCBXSU5BUEkgTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcyhEV09SRCB4MSxEV09SRCB4MixEV09SRCB4MyxEV09SRCB4NCxEV09SRCB4NSkgeworCUZJWE1FKG50ZGxsLCIoMHglMDhseCwweCUwOGx4LDB4JTA4bHgsMHglMDhseCwweCUwOGx4KSxzdHViIVxuIiwKKwkJeDEseDIseDMseDQseDUKKwkpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbC5jIGIvbWlzYy9zaGVsbC5jCmluZGV4IDQwYTgwODQuLmIxNDAwODMgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGwuYworKysgYi9taXNjL3NoZWxsLmMKQEAgLTEsNSArMSw4IEBACiAvKgogICogCQkJCVNoZWxsIExpYnJhcnkgRnVuY3Rpb25zCisgKgorICogIGN1cnJlbnRseSB3b3JrIGluIHByb2dyZXNzIG9uIFNIKiBhbmQgU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdCBmdW5jdGlvbnMKKyAqICA8Y29udGFjdCBqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGUgOTgwNjI0PgogICovCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMTcyLDcgKzExNzUsNyBAQAogCWZvciAoaT0wO2k8bjtpKyspIHsKIAkgICAgTFBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkJeHJlc2RpcjsKIAotCSAgICB4cmVzZGlyID0gR2V0UmVzRGlyRW50cnlXKGljb25yZXNkaXIsKExQV1NUUikmKFJldFB0cltpXSksKERXT1JEKXJvb3RyZXNkaXIsRkFMU0UpOworCSAgICB4cmVzZGlyID0gR2V0UmVzRGlyRW50cnlXKGljb25yZXNkaXIsKExQV1NUUilSZXRQdHJbaV0sKERXT1JEKXJvb3RyZXNkaXIsRkFMU0UpOwogCSAgICB4cmVzZGlyID0gR2V0UmVzRGlyRW50cnlXKHhyZXNkaXIsKExQV1NUUikwLChEV09SRClyb290cmVzZGlyLFRSVUUpOwogCiAJICAgIGlkYXRhZW50ID0gKExQSU1BR0VfUkVTT1VSQ0VfREFUQV9FTlRSWSl4cmVzZGlyOwpAQCAtMTU4MCw2ICsxNTgzLDcgQEAKICAgICBjaGFyCXhjbHNpZFs1MF0seGlpZFs1MF07CiAgICAgSFJFU1VMVAlocmVzID0gRV9PVVRPRk1FTU9SWTsKIAorCiAgICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmNsc2lkLHhjbHNpZCk7CiAgICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpaWlkLHhpaWQpOwogICAgIFRSQUNFKHNoZWxsLCIoJXMsJXMsJXApXG4iLHhjbHNpZCx4aWlkLHBwdik7CkBAIC0xNTk0LDIzICsxNTk4LDI0IEBACiAgICAgCiAgICAgaWYgKHBDbGFzc0ZhY3RvcnkpIHsKICAgICAJaFJlcyA9IHBDbGFzc0ZhY3RvcnktPlF1ZXJ5SW50ZXJmYWNlKHJpaWQscHB2KTsKLQlwQ2xhc3NGYWN0b3J5LT5SZWxlYXNlKCk7CisJCXBDbGFzc0ZhY3RvcnktPlJlbGVhc2UoKTsKICAgICB9CiAgICAgcmV0dXJuIGhSZXM7CiAgKgogICogVGhlIG1hZ2ljIG9mIHRoZSB3aG9sZSBzdHVmZiBpcyBzdGlsbCB1bmNsZWFyIHRvIG1lLCBzbyBqdXN0IGhhY2sgdG9nZXRoZXIgCi0gKiBzb21ldGhpbmcuCisgKiBzb21ldGhpbmcuICAgCiAgKi8KICAgCi0gICAgaWYgKCFtZW1jbXAocmNsc2lkLCZDTFNJRF9TaGVsbERlc2t0b3Asc2l6ZW9mKENMU0lEX1NoZWxsRGVza3RvcCkpKSB7Ci0gICAgCVRSQUNFKHNoZWxsLCIgICByZXF1ZXN0ZWQgQ0xTSURfU2hlbGxEZXNrdG9wLCBjcmVhdGluZyBpdC5cbiIpOwotCSpwcHYgPSBJU2hlbGxGb2xkZXJfQ29uc3RydWN0b3IoKTsKLQlGSVhNRShzaGVsbCwiSW5pdGlhbGl6ZSB0aGlzIGZvbGRlciB0byBiZSB0aGUgc2hlbGwgZGVza3RvcCBmb2xkZXJcbiIpOwotCXJldHVybiAwOwotICAgIH0KKyAgaWYgKCFtZW1jbXAocmNsc2lkLCZDTFNJRF9TaGVsbERlc2t0b3Asc2l6ZW9mKENMU0lEX1NoZWxsRGVza3RvcCkpKQorCXsJVFJBQ0Uoc2hlbGwsIiAgIHJlcXVlc3RlZCBDTFNJRF9TaGVsbERlc2t0b3AsIGNyZWF0aW5nIGl0LlxuIik7CisgIAkqcHB2ID0gSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKCk7CisvKgkJRklYTUUoc2hlbGwsIkluaXRpYWxpemUgdGhpcyBmb2xkZXIgdG8gYmUgdGhlIHNoZWxsIGRlc2t0b3AgZm9sZGVyXG4iKSovCisJCXJldHVybiBTX09LOworCX0KIAotICAgIEZJWE1FKHNoZWxsLCAiY2xzaWQoJXMpIG5vdCBmb3VuZC4gIFJldHVybmluZyBFX09VVE9GTUVNT1JZLlxuIix4Y2xzaWQpOwotICAgIHJldHVybiBocmVzOworCUZJWE1FKHNoZWxsLCAiY2xzaWQoJXMpIG5vdCBmb3VuZCwgcmV0dXJuIENMQVNTX0VfQ0xBU1NOT1RBVkFJTEFCTEUuXG4iLHhjbHNpZCk7CisJKnBwdj1OVUxMOworCXJldHVybiBDTEFTU19FX0NMQVNTTk9UQVZBSUxBQkxFOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTY1MSwxMSArMTY1Niw1MSBAQAogICoKICAqIG5Gb2xkZXIgaXMgYSBDU0lETF94eHh4eC4KICAqLwotSFJFU1VMVCBXSU5BUEkgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24oSFdORDMyIGh3bmRPd25lciwgSU5UMzIgbkZvbGRlciwgTFBJVEVNSURMSVNUICogcHBpZGwpIHsKLQlGSVhNRShzaGVsbCwiKCUwNHgsJWQsJXApLHN0dWIhXG4iLCBod25kT3duZXIsbkZvbGRlcixwcGlkbCk7Ci0JKnBwaWRsID0gKExQSVRFTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLDIqc2l6ZW9mKElURU1JRExJU1QpKTsKLQlGSVhNRShzaGVsbCwgIndlIHJldHVybiBvbmx5IHRoZSBlbXB0eSBJVEVNSURMSVNUIGN1cnJlbnRseS5cbiIpOwotCSgqcHBpZGwpLT5ta2lkLmNiID0gMDsKK0hSRVNVTFQgV0lOQVBJIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uKEhXTkQzMiBod25kT3duZXIsIElOVDMyIG5Gb2xkZXIsIExQSVRFTUlETElTVCAqIHBwaWRsKQorewlGSVhNRShzaGVsbCwiKCUwNHgsJWQsJXApLHN0dWIhXG4iLCBod25kT3duZXIsbkZvbGRlcixwcGlkbCk7CisKKwlzd2l0Y2ggKG5Gb2xkZXIpCisJewljYXNlIENTSURMX0JJVEJVQ0tFVDoJCQkJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUmVjeWNlbGVyXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfQ09OVFJPTFM6CQkJCSAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBDb250cm9sXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfREVTS1RPUDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEZXNrdG9wXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfREVTS1RPUERJUkVDVE9SWTogIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRGVza0RpclxuIik7CisJCQkJCQkJCQkJCQkJCQkJCWJyZWFrOworCQljYXNlIENTSURMX0RSSVZFUzoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEcml2ZXNcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9GT05UUzoJCQkgIAkJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRm9udHNcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9ORVRIT09EOgkJCSAgCQlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIE5ldGhvb2RcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9ORVRXT1JLOgkJCSAgCQlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIE5ldHdvcmtcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9QRVJTT05BTDoJCQkgIAlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFBlcnNvbmFsXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfUFJJTlRFUlM6CQkJICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUHJpbnRlcnNcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9QUk9HUkFNUzoJCQkJICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFByb2dyYW1tc1xuIik7CisJCQkJCQkJCQkJCQkJCQkJCWJyZWFrOworCQljYXNlIENTSURMX1JFQ0VOVDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBSZWNlbnRcbiIpOworCQkJCQkJCQkJCQkJCQkJCQlicmVhazsKKwkJY2FzZSBDU0lETF9TRU5EVE86CQkJICAJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgU2VuZHRvXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfU1RBUlRNRU5VOgkJCSAgCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgU3RhcnRtZW51XG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfU1RBUlRVUDoJCQkgIAkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTdGFydHVwXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWNhc2UgQ1NJRExfVEVNUExBVEVTOgkJCSAgCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgVGVtcGxhdGVzXG4iKTsKKwkJCQkJCQkJCQkJCQkJCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkJICAJCQkJCQkJRVJSIChzaGVsbCwidW5rbm93biBDU0lETFxuIik7CisJCQkJCQkJCQkJCQkJCQkJCWJyZWFrOworCX0KKworCSpwcGlkbCA9IChMUElURU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSVRFTUlETElTVCkpOworCSgqcHBpZGwpLT5ta2lkLmNiID0gMDsJCS8qdGhlIGZpcnN0IElURU1JRExJU1QqLworCisJRklYTUUoc2hlbGwsICJyZXR1cm4gZW1wdHkgSVRFTUlETElTVCBvbmx5IChwaWRsICVwKVxuIiwqcHBpZGwpOworCiAJcmV0dXJuIE5PRVJST1I7CiB9CiAKQEAgLTE2NjMsOSArMTcwOCw5IEBACiAgKgkJCSBTSEdldFBhdGhGcm9tSURMaXN0CQlbU0hFTEwzMi4yMjFdCiAgKiByZXR1cm5zIHRoZSBwYXRoIGZyb20gYSBwYXNzZWQgUElETC4KICAqLwotQk9PTDMyIFdJTkFQSSBTSEdldFBhdGhGcm9tSURMaXN0KExQQ0lURU1JRExJU1QgcGlkbCxMUFNUUiBwc3pQYXRoKSB7Ci0JRklYTUUoc2hlbGwsIiglcCwlcCksc3R1YiFcbiIscGlkbCxwc3pQYXRoKTsKLQlsc3RyY3B5MzJBKHBzelBhdGgsIkU6XFwiKTsgLyogRklYTUUgKi8KK0JPT0wzMiBXSU5BUEkgU0hHZXRQYXRoRnJvbUlETGlzdChMUENJVEVNSURMSVNUIHBpZGwsTFBTVFIgcHN6UGF0aCkgCit7CUZJWE1FKHNoZWxsLCIocGlkbCAlcCwlcCksc3R1YiwgcmV0dXJuaW5nIEU6XFxcXCBcbiIscGlkbCxwc3pQYXRoKTsKKwlzdHJjcHkocHN6UGF0aCwiRTpcXCIpOyAvKiBGSVhNRSAqLwogCXJldHVybiBOT0VSUk9SOwogfQogCkBAIC0xNjgzLDMgKzE3MjgsMTggQEAKICAgICByZXR1cm4gMDsKIH0KIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0hCcm93c2VGb3JGb2xkZXJBIFtTSEVMTDMyLjIwOV0KKyAqCisgKi8KKworTFBJVEVNSURMSVNUIFdJTkFQSQorU0hCcm93c2VGb3JGb2xkZXIzMkEgKExQQlJPV1NFSU5GTzMyQSBscGJpKQoreworICAgIEZJWE1FIChleGVjLCAiKCVseCkgZW1wdHkgc3R1YiFcbiIsIChEV09SRClscGJpKTsKKyAgICBGSVhNRSAoZXhlYywgIiglcykgZW1wdHkgc3R1YiFcbiIsIGxwYmktPmxwc3pUaXRsZSk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbG9yZC5jIGIvbWlzYy9zaGVsbG9yZC5jCmluZGV4IDYyZGU2OGIuLjQzMmU1Y2EgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGxvcmQuYworKysgYi9taXNjL3NoZWxsb3JkLmMKQEAgLTY4LDkgKzY4LDkgQEAKICAqICAgICBPcmlnaW5hbCBOYW1lOiBQYXRoSXNSb290CiAgKi8KIEJPT0wzMiBXSU5BUEkgU0hFTEwzMl8yOShMUENTVFIgeCkgewotCWlmICghbHN0cmNtcDMyQSh4KzEsIjpcXCIpKQkJLyogIlg6XCIgKi8KKwlpZiAoIXN0cmNtcCh4KzEsIjpcXCIpKQkJLyogIlg6XCIgKi8KIAkJcmV0dXJuIDE7Ci0JaWYgKCFsc3RyY21wMzJBKHgsIlxcIikpCQkvKiAiXCIgKi8KKwlpZiAoIXN0cmNtcCh4LCJcXCIpKQkJLyogIlwiICovCiAJCXJldHVybiAxOwogCWlmICh4WzBdPT0nXFwnICYmIHhbMV09PSdcXCcpIHsJCS8qIFVOQyAiXFw8eHg+XCIgKi8KIAkJaW50CWZvdW5kYmFja3NsYXNoID0gMDsKQEAgLTQwMCw3ICs0MDAsNyBAQAogICogICAgIE9yaWdpbmFsIG5hbWU6IFJlZ2lzdGVyU2hlbGxIb29rIChleHBvcnRlZCBieSBvcmRpbmFsKQogICovCiB2b2lkIFdJTkFQSSBTSEVMTDMyXzE4MShIV05EMzIgaHduZCwgRFdPUkQgeSkgewotICAgIEZJWE1FKHNoZWxsLCIoMHglMDhseCwweCUwOGx4KTpzdHViLlxuIixod25kLHkpOworICAgIEZJWE1FKHNoZWxsLCIoMHglMDhseCwweCUwOHgpOnN0dWIuXG4iLGh3bmQseSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NDEsNyArNDQxLDcgQEAKIAlGQVJQUk9DMzIJZGxsdW5sb2FkLG5hbWVwcm9jOwogCiAJaWYgKHhobW9kKSAqeGhtb2QgPSAwOwotCWlmICghbHN0cmNtcGkzMkEoU0hFTEwzMl8zNChkbGxuYW1lKSwic2hlbGwzMi5kbGwiKSkKKwlpZiAoIXN0cmNhc2VjbXAoU0hFTEwzMl8zNChkbGxuYW1lKSwic2hlbGwzMi5kbGwiKSkKIAkJcmV0dXJuIChHZXRDbGFzc1B0cilTSEVMTDMyX0RsbEdldENsYXNzT2JqZWN0OwogCiAJaG1vZCA9IExvYWRMaWJyYXJ5RXgzMkEoZGxsbmFtZSwwLExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKQEAgLTYwNyw2ICs2MDcsOCBAQAogCUxQU0hJVEVNSUQJc2k7CiAJRFdPUkQJCWxlbjsKIAorCWlmICghaWlsKQorCQlyZXR1cm4gMDsKIAlzaSA9ICYoaWlsLT5ta2lkKTsKIAlsZW4gPSAyOwogCXdoaWxlIChzaS0+Y2IpIHsKQEAgLTYzOSw2ICs2NDEsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSAJCSBTSEVMTDMyXzE5NSAgIAkJCVtTSEVMTDMyLjE5NV0KICAqIGZyZWVfcHRyKCkgLSBmcmVlcyBtZW1vcnkgdXNpbmcgSU1hbGxvYworICoKKyAqIE5PVEVTCisgKiAgICAgT3JpZ2luYWwgbmFtZTogU0hGcmVlIChleHBvcnRlZCBieSBvcmRpbmFsKQogICovCiBEV09SRCBXSU5BUEkgU0hFTEwzMl8xOTUoTFBWT0lEIHgpIHsKIAlyZXR1cm4gTG9jYWxGcmVlMzIoKEhBTkRMRTMyKXgpOwpAQCAtNjYyLDcgKzY2Nyw4IEBACiAKIAlsZW4gPSBTSEVMTDMyXzE1MihpaWwpOwogCW5ld2lpbCA9IChMUElURU1JRExJU1QpU0hFTEwzMl8xOTYobGVuKTsKLQltZW1jcHkobmV3aWlsLGlpbCxsZW4pOworCWlmIChuZXdpaWwpCisJCW1lbWNweShuZXdpaWwsaWlsLGxlbik7CiAJcmV0dXJuIG5ld2lpbDsKIH0KIApAQCAtNjg1LDE2ICs2OTEsMjIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgCQkgU0hFTEwzMl8xNTUgICAJCQlbU0hFTEwzMi4xNTVdCiAgKiBmcmVlX2NoZWNrX3B0ciAtIGZyZWVzIG1lbW9yeSAoaWYgbm90IE5VTEwpIGFsbG9jYXRlZCBieSBTSE1hbGxvYyBhbGxvY2F0b3IKKyAqCisgKiBOT1RFUworICogICAgIE9yaWdpbmFsIG5hbWU6IElMRnJlZSAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKICAqLwogRFdPUkQgV0lOQVBJIFNIRUxMMzJfMTU1KExQVk9JRCB4KSB7Ci0JaWYgKCF4KQorCUZJWE1FIChzaGVsbCwiKDB4JTA4bHgpOnN0dWIuXG4iLCAoRFdPUkQpeCk7CisvLwlpZiAoIXgpCiAJCXJldHVybiAwOwotCXJldHVybiBTSEVMTDMyXzE5NSh4KTsKKy8vCXJldHVybiBTSEVMTDMyXzE5NSh4KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNIRUxMMzJfODUgW1NIRUxMMzIuODVdCi0gKiB1bmtub3duCisgKgorICogTk9URVMKKyAqICAgICBPcmlnaW5hbCBuYW1lOiBPcGVuUmVnU3RyZWFtIChleHBvcnRlZCBieSBvcmRpbmFsKQogICovCiBEV09SRCBXSU5BUEkgU0hFTEwzMl84NShEV09SRCB4MSxEV09SRCB4MixEV09SRCB4MyxEV09SRCB4NCkgewogICAgIEZJWE1FKHNoZWxsLCIoMHglMDhseCwweCUwOGx4LDB4JTA4bHgsMHglMDhseCk6c3R1Yi5cbiIsCkBAIC03MDYsMTUgKzcxOCwyMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNIRUxMMzJfODYgW1NIRUxMMzIuODZdCiAgKiB1bmtub3duCisgKgorICogTk9URVMKKyAqICAgICBPcmlnaW5hbCBuYW1lOiBTSFJlZ2lzdGVyRHJhZ0Ryb3AgKGV4cG9ydGVkIGJ5IG9yZGluYWwpCiAgKi8KIERXT1JEIFdJTkFQSSBTSEVMTDMyXzg2KEhXTkQzMiBod25kLERXT1JEIHgyKSB7Ci0gICAgRklYTUUoc2hlbGwsIigweCUwOGx4LDB4JTA4bHgpOnN0dWIuXG4iLGh3bmQseDIpOworICAgIEZJWE1FIChzaGVsbCwgIigweCUwOGx4LDB4JTA4eCk6c3R1Yi5cbiIsIGh3bmQsIHgyKTsKICAgICByZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNIRUxMMzJfODcgW1NIRUxMMzIuODddCiAgKiB1bmtub3duCisgKgorICogTk9URVMKKyAqICAgICBPcmlnaW5hbCBuYW1lOiBTSFJldm9rZURyYWdEcm9wIChleHBvcnRlZCBieSBvcmRpbmFsKQogICovCiBEV09SRCBXSU5BUEkgU0hFTEwzMl84NyhEV09SRCB4KSB7CiAgICAgRklYTUUoc2hlbGwsIigweCUwOGx4KTpzdHViLlxuIix4KTsKQEAgLTcyNCwxMyArNzQyLDE1IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTSEVMTDMyXzYxIFtTSEVMTDMyLjYxXQotICogU2hlbGwvUnVuLURpYWxvZworICoKKyAqIE5PVEVTCisgKiAgICAgT3JpZ2luYWwgbmFtZTogUnVuRmlsZURsZyAoZXhwb3J0ZWQgYnkgb3JkaW5hbCkKICAqLwogRFdPUkQgV0lOQVBJCiBTSEVMTDMyXzYxIChIV05EMzIgaHduZE93bmVyLCBEV09SRCBkd1BhcmFtMSwgRFdPUkQgZHdQYXJhbTIsCiAJICAgIExQU1RSIGxwc3pUaXRsZSwgTFBTVFIgbHBzelByb21wdCwgVUlOVDMyIHVGbGFncykKIHsKLSAgICBGSVhNRSAoc2hlbGwsIigweCUwOHggMHglbHggMHglbHggXCIlc1wiIFwiJXNcIiAweCVseCk6c3R1Yi5cbiIsCisgICAgRklYTUUgKHNoZWxsLCIoMHglMDh4IDB4JWx4IDB4JWx4IFwiJXNcIiBcIiVzXCIgMHgleCk6c3R1Yi5cbiIsCiAJICAgaHduZE93bmVyLCBkd1BhcmFtMSwgZHdQYXJhbTIsIGxwc3pUaXRsZSwgbHBzelByb21wdCwgdUZsYWdzKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTc2MSwzICs3ODEsMTcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0hFTEwzMl8xNDcgW1NIRUxMMzIuMTQ3XQorICoKKyAqIE5PVEVTCisgKiAgICAgT3JpZ2luYWwgbmFtZTogU0hDTFNJREZyb21TdHJpbmcgKGV4cG9ydGVkIGJ5IG9yZGluYWwpCisgKi8KK0RXT1JEIFdJTkFQSQorU0hFTEwzMl8xNDcgKERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKK3sKKyAgICBGSVhNRSAoc2hlbGwsIigweCVseCAweCVseCk6c3R1Yi5cbiIsIGR3UGFyYW0xLCBkd1BhcmFtMik7CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL21pc2MvdG9vbGhlbHAuYyBiL21pc2MvdG9vbGhlbHAuYwppbmRleCA2MDY0MTZiLi5jM2NiNjBhIDEwMDY0NAotLS0gYS9taXNjL3Rvb2xoZWxwLmMKKysrIGIvbWlzYy90b29saGVscC5jCkBAIC0xMDEsMyArMTAxLDEyIEBACiAJLyoganVzdCByZXR1cm4gcHJldmlvdXNseSBpbnN0YWxsZWQgbm90aWZpY2F0aW9uIGZ1bmN0aW9uICovCiAJcmV0dXJuIHRtcDsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ3JlYXRlVG9vbEhlbHAzMlNuYXBzaG90CQkJKEtFUk5FTDMyLjE3OSkKKyAqCXNlZSAiVW5kb2N1bWVudGVkIFdpbmRvd3MiCisgKi8KK0hBTkRMRTMyIFdJTkFQSSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoRFdPUkQgZHdGbGFncywgRFdPUkQgdGgzMlByb2Nlc3NJRCkgeworCUZJWE1FKHRvb2xoZWxwLCIoMHglMDhseCwweCUwOGx4KSwgc3R1YiFcbiIsZHdGbGFncyx0aDMyUHJvY2Vzc0lEKTsKKwlyZXR1cm4gSU5WQUxJRF9IQU5ETEVfVkFMVUUzMjsKK30KZGlmZiAtLWdpdCBhL21pc2Mvd2luc29jay5jIGIvbWlzYy93aW5zb2NrLmMKaW5kZXggNDRjMWVjZC4uNWViNjdkNSAxMDA2NDQKLS0tIGEvbWlzYy93aW5zb2NrLmMKKysrIGIvbWlzYy93aW5zb2NrLmMKQEAgLTY1LDggKzY1LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgZGF0YSAqLwogCi1leHRlcm4gaW50IGhfZXJybm87Ci0KIHN0YXRpYyBIQU5ETEUzMiAJX1dTSGVhcCA9IDA7CiBzdGF0aWMgdW5zaWduZWQgY2hhcioJX3dzX3N0dWIgPSBOVUxMOwogc3RhdGljIExQV1NJTkZPICAgICAgICAgX3dzaV9saXN0ID0gTlVMTDsKQEAgLTI1NzAsOSArMjU2OCw5IEBACiB7CiAgICAgaW50CWxvY19lcnJubyA9IGVycm5vOyAKICNpZmRlZiBIQVZFX1NUUkVSUk9SCi0gICAgV0FSTih3aW5zb2NrLCAiZXJybm8gJWQsICglcykuXG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBXQVJOKHdpbnNvY2ssICJlcnJubyAlZCwgKCVzKS5cbiIsIGxvY19lcnJubywgc3RyZXJyb3IobG9jX2Vycm5vKSk7CiAjZWxzZQotICAgIFdBUk4od2luc29jaywgImVycm5vICVkXG4iLCBlcnJubyk7CisgICAgV0FSTih3aW5zb2NrLCAiZXJybm8gJWRcbiIsIGxvY19lcnJubyk7CiAjZW5kaWYKIAogICAgIHN3aXRjaChsb2NfZXJybm8pCkBAIC0yNjM1LDcgKzI2MzMsNyBAQAogICAgICAgIC8qIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGdldCBoZXJlIGFuZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXMgKi8KIAljYXNlIDA6CQkJcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0JCVdBUk4od2luc29jaywgIlVua25vd24gZXJybm8gJWQhXG4iLCBlcnJubyk7CisJCVdBUk4od2luc29jaywgIlVua25vd24gZXJybm8gJWQhXG4iLCBsb2NfZXJybm8pOwogCQlyZXR1cm4gV1NBRU9QTk9UU1VQUDsKICAgICB9CiB9CkBAIC0yNjQ0LDExICsyNjQyLDcgQEAKIHsKICAgICBpbnQJCWxvY19lcnJubyA9IGhfZXJybm87CiAKLSNpZmRlZiBIQVZFX1NUUkVSUk9SCi0gICAgV0FSTih3aW5zb2NrLCAiaF9lcnJubyAlZCwgKCVzKS5cbiIsIGhfZXJybm8sIHN0cmVycm9yKGhfZXJybm8pKTsKLSNlbHNlCi0gICAgV0FSTih3aW5zb2NrLCAiaF9lcnJubyAlZC5cbiIsIGhfZXJybm8pOwotI2VuZGlmCisgICAgV0FSTih3aW5zb2NrLCAiaF9lcnJubyAlZC5cbiIsIGxvY19lcnJubyk7CiAKICAgICBzd2l0Y2gobG9jX2Vycm5vKQogICAgIHsKQEAgLTI2NTksNyArMjY1Myw3IEBACiAKIAljYXNlIDA6CQkJcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0JCVdBUk4od2luc29jaywiVW5rbm93biBoX2Vycm5vICVkIVxuIiwgaF9lcnJubyk7CisJCVdBUk4od2luc29jaywiVW5rbm93biBoX2Vycm5vICVkIVxuIiwgbG9jX2Vycm5vKTsKIAkJcmV0dXJuIFdTQUVPUE5PVFNVUFA7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWlzYy93aW5zb2NrX2Rucy5jIGIvbWlzYy93aW5zb2NrX2Rucy5jCmluZGV4IDNjYjFmZTAuLmJhZjliOWYgMTAwNjQ0Ci0tLSBhL21pc2Mvd2luc29ja19kbnMuYworKysgYi9taXNjL3dpbnNvY2tfZG5zLmMKQEAgLTMzLDggKzMzLDYgQEAKICMgaW5jbHVkZSA8c3lzL2ZpbGUuaD4KICNlbmRpZgogCi1leHRlcm4gaW50IGhfZXJybm87Ci0KICNpbmNsdWRlICJ3aW5zb2NrLmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImhlYXAuaCIKZGlmZiAtLWdpdCBhL21pc2MveG1hbGxvYy5jIGIvbWlzYy94bWFsbG9jLmMKaW5kZXggM2ZhYTZhOC4uMGU3NTdlOCAxMDA2NDQKLS0tIGEvbWlzYy94bWFsbG9jLmMKKysrIGIvbWlzYy94bWFsbG9jLmMKQEAgLTI4LDYgKzI4LDE2IEBACiAgICAgICAgIE1TRygiVmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkLlxuIik7CiAgICAgICAgIGV4aXQgKDEpOwogICAgIH0KKyAgICBtZW1zZXQocmVzLDAsc2l6ZSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZCAqeGNhbGxvYyggaW50IHNpemUgKQoreworICAgIHZvaWQgKnJlczsKKworICAgIHJlcyA9IHhtYWxsb2MgKHNpemUpOworICAgIG1lbXNldChyZXMsMCxzaXplKTsKICAgICByZXR1cm4gcmVzOwogfQogCmRpZmYgLS1naXQgYS9taXNjZW11L2luc3RyLmMgYi9taXNjZW11L2luc3RyLmMKaW5kZXggNDY1ZjE2Yy4uNDFlYWE1YiAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnN0ci5jCisrKyBiL21pc2NlbXUvaW5zdHIuYwpAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJsZHQuaCIKKyNpbmNsdWRlICJnbG9iYWwuaCIKICNpbmNsdWRlICJtaXNjZW11LmgiCiAjaW5jbHVkZSAic2lnX2NvbnRleHQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgpAQCAtMjk2LDYgKzI5NywxMyBAQAogICAgIGludCBwcmVmaXgsIHNlZ3ByZWZpeCwgcHJlZml4bGVuLCBsZW4sIHJlcFgsIGxvbmdfb3AsIGxvbmdfYWRkcjsKICAgICBCWVRFICppbnN0cjsKIAorICAgIC8qIENoZWNrIGZvciBwYWdlLWZhdWx0ICovCisKKyNpZiBkZWZpbmVkKFRSQVBfc2lnKSAmJiBkZWZpbmVkKENSMl9zaWcpCisgICAgaWYgKFRSQVBfc2lnKGNvbnRleHQpID09IDB4MGUKKyAgICAgICAgJiYgVklSVFVBTF9IYW5kbGVGYXVsdCggKExQVk9JRClDUjJfc2lnKGNvbnRleHQpICkpIHJldHVybiBUUlVFOworI2VuZGlmCisKICAgICBsb25nX29wID0gbG9uZ19hZGRyID0gSVNfU0VMRUNUT1JfMzJCSVQoQ1Nfc2lnKGNvbnRleHQpKTsKICAgICBpbnN0ciA9IChCWVRFICopTUFLRV9QVFIoQ1Nfc2lnKGNvbnRleHQpLEVJUF9zaWcoY29udGV4dCkpOwogICAgIGlmICghaW5zdHIpIHJldHVybiBGQUxTRTsKZGlmZiAtLWdpdCBhL21pc2NlbXUvbWFpbi5jIGIvbWlzY2VtdS9tYWluLmMKaW5kZXggNDE3NGIwZS4uNGVhYzJjNCAxMDA2NDQKLS0tIGEvbWlzY2VtdS9tYWluLmMKKysrIGIvbWlzY2VtdS9tYWluLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAicHJvY2Vzcy5oIgogI2luY2x1ZGUgIndpbjE2ZHJ2LmgiCisjaW5jbHVkZSAicHNkcnYuaCIKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKIApAQCAtMzIsNiArMzMsOSBAQAogICAgIC8qIENyZWF0ZSB0aGUgV2luMTYgcHJpbnRlciBkcml2ZXIgKi8KICAgICBpZiAoIVdJTjE2RFJWX0luaXQoKSkgcmV0dXJuIEZBTFNFOwogCisgICAgLyogQ3JlYXRlIHRoZSBQb3N0c2NyaXB0IHByaW50ZXIgZHJpdmVyIChGSVhNRTogc2hvdWxkIGJlIGluIFdpbmVsaWIpICovCisgICAgaWYgKCFQU0RSVl9Jbml0KCkpIHJldHVybiBGQUxTRTsKKwogICAgIC8qIEluaXRpYWxpemUgYWxsIHRoZSBVU0VSIHN0dWZmICovCiAgICAgcmV0dXJuIE1BSU5fVXNlckluaXQoKTsKIH0KZGlmZiAtLWdpdCBhL21zZG9zL2RwbWkuYyBiL21zZG9zL2RwbWkuYwppbmRleCA0ZWRiYzllLi4xYWE4MDJmIDEwMDY0NAotLS0gYS9tc2Rvcy9kcG1pLmMKKysrIGIvbXNkb3MvZHBtaS5jCkBAIC0xOTEsNiArMTkxLDE4IEBACiAgICAgICAgICAgICAvKiBNU0NERVggaG9vayAqLwogICAgICAgICAgICAgZG9fbXNjZGV4KCAmcmVhbG1vZGVfY3R4LCAxICk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDdhOgorICAgICAgICAgICAgLyogTk9WRUxMIE5ldFdhcmUgKi8KKyAgICAgICAgICAgIHN3aXRjaCAoQUxfcmVnKCZyZWFsbW9kZV9jdHgpKQorCSAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAweDIwOiAgLyogR2V0IFZMTSBDYWxsIEFkZHJlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIG5vdGhpbmcgLT4gTmV0V2FyZSBub3QgaW5zdGFsbGVkICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFNFVF9DRkxBRyhjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgU0VUX0NGTEFHKGNvbnRleHQpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9tc2Rvcy9pbnQyMS5jIGIvbXNkb3MvaW50MjEuYwppbmRleCAzMWQ2YTkzLi5jYmIxODFjIDEwMDY0NAotLS0gYS9tc2Rvcy9pbnQyMS5jCisrKyBiL21zZG9zL2ludDIxLmMKQEAgLTI4OSw2ICsyODksMTMgQEAKIAkJCVRSQUNFKGludDIxLCJsb2dpY2FsIHZvbHVtZSAlZCB1bmxvY2tlZC5cbiIsZHJpdmUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSAweDZmOgorCQkJbWVtc2V0KGRhdGFwdHIrMSwgJ1wwJywgZGF0YXB0clswXS0xKTsKKwkJCWRhdGFwdHJbMV0gPSBkYXRhcHRyWzBdOyAKKwkJCWRhdGFwdHJbMl0gPSAweDA3OyAvKiBwcm90ZWN0ZWQgbW9kZSBkcml2ZXI7IG5vIGVqZWN0OyBubyBub3RpZmljYXRpb24gKi8KKwkJCWRhdGFwdHJbM10gPSAweEZGOyAvKiBubyBwaHlzaWNhbCBkcml2ZSAqLworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIElOVF9CQVJGKCBjb250ZXh0LCAweDIxICk7CiAJfQpAQCAtMTMxNiw3ICsxMzIzLDcgQEAKICAgICAgICAgY2FzZSAweDAyOnsKICAgICAgICAgICAgRklMRV9PQkpFQ1QgKmZpbGU7CiAgICAgICAgICAgIGZpbGUgPSBGSUxFX0dldEZpbGUoQlhfcmVnKGNvbnRleHQpKTsKLSAgICAgICAgICAgIGlmICghbHN0cmNtcGkzMkEoZmlsZS0+dW5peF9uYW1lLCAiU0NTSU1HUiQiKSkKKyAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcChmaWxlLT51bml4X25hbWUsICJTQ1NJTUdSJCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgQVNQSV9ET1NfSGFuZGxlSW50KGNvbnRleHQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL01ha2VmaWxlLmluIGIvbXVsdGltZWRpYS9NYWtlZmlsZS5pbgppbmRleCBhMDRjYjU1Li4zNDdiMGQ2IDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL01ha2VmaWxlLmluCisrKyBiL211bHRpbWVkaWEvTWFrZWZpbGUuaW4KQEAgLTcsNiArNyw3IEBACiAKIENfU1JDUyA9IFwKIAlhdWRpby5jIFwKKwlkcGxheS5jIFwKIAlkc291bmQuYyBcCiAJaW5pdC5jIFwKIAlqb3lzdGljay5jIFwKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvZHBsYXkuYyBiL211bHRpbWVkaWEvZHBsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWYzNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbXVsdGltZWRpYS9kcGxheS5jCkBAIC0wLDAgKzEsNTI4IEBACisvKiBEaXJlY3QgUGxheSAzIGFuZCBEaXJlY3QgUGxheSBMb2JieSAxIEltcGxlbWVudGF0aW9uCisgKiBQcmVzZW50bHkgb25seSB0aGUgTG9iYnkgc2tlbGV0b24gaXMgaW1wbGVtZW50ZWQuICAgICAgICAgICAgICAgICAgICAKKyAqCisgKiBDb3B5cmlnaHQgMTk5OCAtIFBldGVyIEh1bm5pc2V0dAorICoKKyAqLworI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJoZWFwLmgiCisjaW5jbHVkZSAid2ludHlwZXMuaCIKKyNpbmNsdWRlICJ3aW5lcnJvci5oIgorI2luY2x1ZGUgImludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJtbXN5c3RlbS5oIgorI2luY2x1ZGUgImRwbGF5LmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ3aW5udC5oIgorI2luY2x1ZGUgIndpbnJlZy5oIgorCisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X1F1ZXJ5SW50ZXJmYWNlCisoIExQRElSRUNUUExBWUxPQkJZMiB0aGlzLAorICBSRUZJSUQgcmlpZCwKKyAgTFBWT0lEKiBwcHZPYmogKQoreworICBGSVhNRSggZHBsYXksICI6c3R1YlxuIik7CisgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsKK30KKworc3RhdGljIFVMT05HIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X0FkZFJlZgorKCBMUERJUkVDVFBMQVlMT0JCWTIgdGhpcyApCit7CisgICsrKHRoaXMtPnJlZik7CisgIFRSQUNFKCBkcGxheSwiIHJlZiBjb3VudCBub3cgJWxkXG4iLCB0aGlzLT5yZWYgKTsKKyAgcmV0dXJuICh0aGlzLT5yZWYpOworfQorCitzdGF0aWMgVUxPTkcgV0lOQVBJIElEaXJlY3RQbGF5TG9iYnlfUmVsZWFzZQorKCBMUERJUkVDVFBMQVlMT0JCWTIgdGhpcyApCit7CisgIHRoaXMtPnJlZi0tOworCisgIFRSQUNFKCBkcGxheSwgIiByZWYgY291bnQgbm93ICVsZFxuIiwgdGhpcy0+cmVmICk7CisgIAorICAvKiBEZWFsbG9jYXRlIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgKi8KKyAgaWYoICEodGhpcy0+cmVmKSApCisgIHsKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgdGhpcyApOyAKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiB0aGlzLT5yZWY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogCisgKiBDb25uZWN0cyBhbiBhcHBsaWNhdGlvbiB0byB0aGUgc2Vzc2lvbiBzcGVjaWZpZWQgYnkgdGhlIERQTENPTk5FQ1RJT04KKyAqIHN0cnVjdHVyZSBjdXJyZW50bHkgc3RvcmVkIHdpdGggdGhlIERpcmVjdFBsYXlMb2JieSBvYmplY3QuCisgKgorICogUmV0dXJucyBhIElEaXJlY3RQbGF5MiBvciBJRGlyZWN0UGxheTJBIGludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X0Nvbm5lY3QKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIERXT1JEIGR3RmxhZ3MsCisgIExQRElSRUNUUExBWTIqIGxwbHBEUCwKKyAgSVVua25vd24qIHBVbmspCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDcmVhdGVzIGEgRGlyZWN0UGxheSBBZGRyZXNzLCBnaXZlbiBhIHNlcnZpY2UgcHJvdmlkZXItc3BlY2lmaWMgbmV0d29yaworICogYWRkcmVzcy4gCisgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY29udGFpbnMgdGhlIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyCisgKiAoR1VJRCkgb2YgdGhlIHNlcnZpY2UgcHJvdmlkZXIgYW5kIGRhdGEgdGhhdCB0aGUgc2VydmljZSBwcm92aWRlciBjYW4KKyAqIGludGVycHJldCBhcyBhIG5ldHdvcmsgYWRkcmVzcy4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X0NyZWF0ZUFkZHJlc3MKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIFJFRkdVSUQgZ3VpZFNQLAorICBSRUZHVUlEIGd1aWREYXRhVHlwZSwKKyAgTFBDVk9JRCBscERhdGEsIAorICBEV09SRCBkd0RhdGFTaXplLAorICBMUFZPSUQgbHBBZGRyZXNzLCAKKyAgTFBEV09SRCBscGR3QWRkcmVzc1NpemUgKQoreworICBGSVhNRSggZHBsYXksICI6c3R1YlxuIik7CisgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUGFyc2VzIG91dCBjaHVua3MgZnJvbSB0aGUgRGlyZWN0UGxheSBBZGRyZXNzIGJ1ZmZlciBieSBjYWxsaW5nIHRoZQorICogZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24sIHdpdGggbHBDb250ZXh0LCBmb3IgZWFjaCBvZiB0aGUgY2h1bmtzLgorICoKKyAqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3RQbGF5TG9iYnlfRW51bUFkZHJlc3MKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIExQRFBFTlVNQUREUkVTU0NBTExCQUNLIGxwRW51bUFkZHJlc3NDYWxsYmFjaywgCisgIExQQ1ZPSUQgbHBBZGRyZXNzLAorICBEV09SRCBkd0FkZHJlc3NTaXplLCAKKyAgTFBWT0lEIGxwQ29udGV4dCApCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFbnVtZXJhdGVzIGFsbCB0aGUgYWRkcmVzcyB0eXBlcyB0aGF0IGEgZ2l2ZW4gc2VydmljZSBwcm92aWRlciBuZWVkcyB0bworICogYnVpbGQgdGhlIERpcmVjdFBsYXkgQWRkcmVzcy4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X0VudW1BZGRyZXNzVHlwZXMKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIExQRFBMRU5VTUFERFJFU1NUWVBFU0NBTExCQUNLIGxwRW51bUFkZHJlc3NUeXBlQ2FsbGJhY2ssCisgIFJFRkdVSUQgZ3VpZFNQLCAKKyAgTFBWT0lEIGxwQ29udGV4dCwKKyAgRFdPUkQgZHdGbGFncyApCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFbnVtZXJhdGVzIHdoYXQgYXBwbGljYXRpb25zIGFyZSByZWdpc3RlcmVkIHdpdGggRGlyZWN0UGxheSBieQorICogaW52b2tpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggbHBDb250ZXh0LgorICoKKyAqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3RQbGF5TG9iYnlfRW51bUxvY2FsQXBwbGljYXRpb25zCisoIExQRElSRUNUUExBWUxPQkJZMiB0aGlzLAorICBMUERQTEVOVU1MT0NBTEFQUExJQ0FUSU9OU0NBTExCQUNLIGEsCisgIExQVk9JRCBscENvbnRleHQsCisgIERXT1JEIGR3RmxhZ3MgKQoreworICBGSVhNRSggZHBsYXksICI6c3R1YlxuIik7CisgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmV0cmlldmVzIHRoZSBEUExDT05ORUNUSU9OIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAqIG5lZWRlZCB0byBzdGFydCBhbmQgY29ubmVjdCBhbiBhcHBsaWNhdGlvbi4gVGhpcyB3YXMgZ2VuZXJhdGVkIHVzaW5nCisgKiBlaXRoZXIgdGhlIFJ1bkFwcGxpY2F0aW9uIG9yIFNldENvbm5lY3Rpb25TZXR0aW5ncyBtZXRob2RzLgorICoKKyAqIE5PVEVTOiBJZiBscERhdGEgaXMgTlVMTCB0aGVuIGp1c3QgcmV0dXJuIGxwZHdEYXRhU2l6ZS4gVGhpcyBhbGxvd3MKKyAqICAgICAgICB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gYmUgYWxsb2NhdGVkIGJ5IG91ciBjYWxsZXIgd2hpY2ggY2FuIHRoZW4KKyAqICAgICAgICBjYWxsIHRoaXMgcHJvY2VkdXJlL21ldGhvZCBhZ2FpbiB3aXRoIGEgdmFsaWQgZGF0YSBwb2ludGVyLgorICovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdFBsYXlMb2JieV9HZXRDb25uZWN0aW9uU2V0dGluZ3MKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIERXT1JEIGR3QXBwSUQsIAorICBMUFZPSUQgbHBEYXRhLAorICBMUERXT1JEIGxwZHdEYXRhU2l6ZSApCit7CisgIExQRFBMQ09OTkVDVElPTiBscENvbm5lY3Rpb25TZXR0aW5nczsKKworICBGSVhNRSggZHBsYXksICI6c2VtaSBzdHViICVwICUwOGx4ICVwICVwIFxuIiwgdGhpcywgZHdBcHBJRCwgbHBEYXRhLCBscGR3RGF0YVNpemUgKTsKKworICBpZiAoICFscERhdGEgKQorICB7CisgICAgLyogTGV0J3MgY2hlY2sgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMgYWxsb2NhdGVkICovCisgICAgaWYoICpscGR3RGF0YVNpemUgPj0gc2l6ZW9mKCBEUExDT05ORUNUSU9OICkgKQorICAgIHsKKyAgICAgIHJldHVybiBEUF9PSzsgIAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgKmxwZHdEYXRhU2l6ZSA9IHNpemVvZiggRFBMQ09OTkVDVElPTiApOworICAgICAgcmV0dXJuIERQRVJSX0JVRkZFUlRPT1NNQUxMOworICAgIH0KKyAgfQorCisgIC8qIE9rIHdlIGFzc3VtZSB0aGF0IHdlJ3ZlIGJlZW4gZ2l2ZW4gYSBidWZmZXIgdGhhdCBpcyBsYXJnZSBlbm91Z2ggZm9yIG91ciBuZWVkcyAqLworICBscENvbm5lY3Rpb25TZXR0aW5ncyA9ICggTFBEUExDT05ORUNUSU9OICkgbHBEYXRhOyAKKworICAvKiBGaWxsIGluIHRoZSBmaWVsZHMgKi8KKworICByZXR1cm4gRFBFUlJfTk9UTE9CQklFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmV0cmlldmVzIHRoZSBtZXNzYWdlIHNlbnQgYmV0d2VlbiBhIGxvYmJ5IGNsaWVudCBhbmQgYSBEaXJlY3RQbGF5IAorICogYXBwbGljYXRpb24uIEFsbCBtZXNzYWdlcyBhcmUgcXVldWVkIHVudGlsIHJlY2VpdmVkLgorICoKKyAqLworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3RQbGF5TG9iYnlfUmVjZWl2ZUxvYmJ5TWVzc2FnZQorKCBMUERJUkVDVFBMQVlMT0JCWTIgdGhpcywKKyAgRFdPUkQgZHdGbGFncywKKyAgRFdPUkQgZHdBcHBJRCwKKyAgTFBEV09SRCBscGR3TWVzc2FnZUZsYWdzLAorICBMUFZPSUQgbHBEYXRhLAorICBMUERXT1JEIGxwZHdEYXRhU2l6ZSApCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViICVwICUwOGx4ICUwOGx4ICVwICVwICVwXG4iLCB0aGlzLCBkd0ZsYWdzLCBkd0FwcElELCBscGR3TWVzc2FnZUZsYWdzLCBscERhdGEsCisgICAgICAgICBscGR3RGF0YVNpemUgKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdGFydHMgYW4gYXBwbGljYXRpb24gYW5kIHBhc3NlcyB0byBpdCBhbGwgdGhlIGluZm9ybWF0aW9uIHRvCisgKiBjb25uZWN0IHRvIGEgc2Vzc2lvbi4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X1J1bkFwcGxpY2F0aW9uCisoIExQRElSRUNUUExBWUxPQkJZMiB0aGlzLAorICBEV09SRCBkd0ZsYWdzLAorICBMUERXT1JEIGxwZHdBcHBJRCwKKyAgTFBEUExDT05ORUNUSU9OIGxwQ29ubiwKKyAgSEFORExFMzIgaFJlY2VpdmVFdmVudCApCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTZW5kcyBhIG1lc3NhZ2UgYmV0d2VlbiB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBsb2JieSBjbGllbnQuCisgKiBBbGwgbWVzc2FnZXMgYXJlIHF1ZXVlZCB1bnRpbCByZWNlaXZlZC4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X1NlbmRMb2JieU1lc3NhZ2UKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIERXT1JEIGR3RmxhZ3MsCisgIERXT1JEIGR3QXBwSUQsCisgIExQVk9JRCBscERhdGEsCisgIERXT1JEIGR3RGF0YVNpemUgKQoreworICBGSVhNRSggZHBsYXksICI6c3R1YlxuIik7CisgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kaWZpZXMgdGhlIERQTENPTk5FQ1RJT04gc3RydWN0dXJlIHRvIGNvbnRhaW4gYWxsIGluZm9ybWF0aW9uCisgKiBuZWVkZWQgdG8gc3RhcnQgYW5kIGNvbm5lY3QgYW4gYXBwbGljYXRpb24uCisgKgorICovCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdFBsYXlMb2JieV9TZXRDb25uZWN0aW9uU2V0dGluZ3MKKyggTFBESVJFQ1RQTEFZTE9CQlkyIHRoaXMsCisgIERXT1JEIGR3RmxhZ3MsCisgIERXT1JEIGR3QXBwSUQsCisgIExQRFBMQ09OTkVDVElPTiBscENvbm4gKQoreworICBGSVhNRSggZHBsYXksICI6IHRoaXM9JXAsIGR3RmxhZ3M9JTA4bHgsIGR3QXBwSWQ9JTA4bHgsIGxwQ29ubj0lcDogc3R1YlxuIiwKKyAgICAgICAgIHRoaXMsIGR3RmxhZ3MsIGR3QXBwSUQsIGxwQ29ubiApOworCisgIC8qIFBhcmFtYXRlciBjaGVjayAqLworICBpZiggZHdGbGFncyB8fCAhdGhpcyB8fCAhbHBDb25uICkKKyAgeworICAgIHJldHVybiBEUEVSUl9JTlZBTElEUEFSQU1TOworICB9CisKKyAgaWYoICEoIGxwQ29ubi0+ZHdTaXplID09IHNpemVvZihEUExDT05ORUNUSU9OKSApICkKKyAgeworICAgIC8qIElzIHRoaXMgdGhlIHJpZ2h0IHJldHVybiBjb2RlPyAqLworICAgIHJldHVybiBEUEVSUl9JTlZBTElEUEFSQU1TOworICB9CisKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZWdpc3RlcnMgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHNldCB3aGVuIGEgbG9iYnkgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAqCisgKi8KK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X1NldExvYmJ5TWVzc2FnZUV2ZW50CisoIExQRElSRUNUUExBWUxPQkJZMiB0aGlzLAorICBEV09SRCBkd0ZsYWdzLAorICBEV09SRCBkd0FwcElELAorICBIQU5ETEUzMiBoUmVjZWl2ZUV2ZW50ICkKK3sKKyAgRklYTUUoIGRwbGF5LCAiOnN0dWJcbiIpOworICByZXR1cm4gRFBFUlJfT1VUT0ZNRU1PUlk7Cit9CisKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0UGxheUxvYmJ5X0NyZWF0ZUNvbXBvdW5kQWRkcmVzcworKCBMUERJUkVDVFBMQVlMT0JCWTIgdGhpcywKKyAgTFBDRFBDT01QT1VOREFERFJFU1NFTEVNRU5UIGxwRWxlbWVudHMsCisgIERXT1JEIGR3RWxlbWVudENvdW50LAorICBMUFZPSUQgbHBBZGRyZXNzLAorICBMUERXT1JEIGxwZHdBZGRyZXNzU2l6ZSApCit7CisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworfQorCisvKiBEaXJlY3QgUGxheSBMb2JieSAyIFZpcnR1YWwgVGFibGUgZm9yIG1ldGhvZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFnTFBESVJFQ1RQTEFZTE9CQlkyX1ZUQUJMRSBsb2JieTJWVCA9IHsKKyAgSURpcmVjdFBsYXlMb2JieV9RdWVyeUludGVyZmFjZSwKKyAgSURpcmVjdFBsYXlMb2JieV9BZGRSZWYsIAorICBJRGlyZWN0UGxheUxvYmJ5X1JlbGVhc2UsCisgIElEaXJlY3RQbGF5TG9iYnlfQ29ubmVjdCwKKyAgSURpcmVjdFBsYXlMb2JieV9DcmVhdGVBZGRyZXNzLAorICBJRGlyZWN0UGxheUxvYmJ5X0VudW1BZGRyZXNzLAorICBJRGlyZWN0UGxheUxvYmJ5X0VudW1BZGRyZXNzVHlwZXMsCisgIElEaXJlY3RQbGF5TG9iYnlfRW51bUxvY2FsQXBwbGljYXRpb25zLAorICBJRGlyZWN0UGxheUxvYmJ5X0dldENvbm5lY3Rpb25TZXR0aW5ncywKKyAgSURpcmVjdFBsYXlMb2JieV9SZWNlaXZlTG9iYnlNZXNzYWdlLAorICBJRGlyZWN0UGxheUxvYmJ5X1J1bkFwcGxpY2F0aW9uLAorICBJRGlyZWN0UGxheUxvYmJ5X1NlbmRMb2JieU1lc3NhZ2UsCisgIElEaXJlY3RQbGF5TG9iYnlfU2V0Q29ubmVjdGlvblNldHRpbmdzLAorICBJRGlyZWN0UGxheUxvYmJ5X1NldExvYmJ5TWVzc2FnZUV2ZW50LAorICBJRGlyZWN0UGxheUxvYmJ5X0NyZWF0ZUNvbXBvdW5kQWRkcmVzcworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIERpcmVjdFBsYXlMb2JieUNyZWF0ZUEgICAoRFBMQVlYLjQpCisgKgorICovCitIUkVTVUxUIFdJTkFQSSBEaXJlY3RQbGF5TG9iYnlDcmVhdGVBKCBMUEdVSUQgbHBHVUlERFNQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBESVJFQ1RQTEFZTE9CQlkyQSAqbHBscERQTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICpscFVuaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgbHBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdEYXRhU2l6ZSApCit7CisgIFRSQUNFKGRwbGF5LCJscEdVSUREU1A9JXAgbHBscERQTD0lcCBscFVuaz0lcCBscERhdGE9JXAgZHdEYXRhU2l6ZT0lMDhseFxuIiwKKyAgICAgICAgbHBHVUlERFNQLGxwbHBEUEwsbHBVbmssbHBEYXRhLGR3RGF0YVNpemUpOworCisgIC8qIFBhcmFtZXRlciBDaGVjazogbHBHVUlEU1AsIGxwVW5rICYgbHBEYXRhIG11c3QgYmUgTlVMTC4gZHdEYXRhU2l6ZSBtdXN0CisgICAqIGVxdWFsIDAuIFRoZXNlIGZpZWxkcyBhcmUgbW9zdGx5IGZvciBmdXR1cmUgZXhwYW5zaW9uLgorICAgKi8KKyAgaWYgKCBscEdVSUREU1AgfHwgbHBVbmsgfHwgbHBEYXRhIHx8IGR3RGF0YVNpemUgKQorICB7CisgICAgICpscGxwRFBMID0gTlVMTDsKKyAgICAgcmV0dXJuIERQRVJSX0lOVkFMSURQQVJBTVM7CisgIH0KKworICAqbHBscERQTCA9IChMUERJUkVDVFBMQVlMT0JCWTJBKUhlYXBBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBJRGlyZWN0UGxheUxvYmJ5MkEgKSApOworCisgIGlmKCAhICgqbHBscERQTCkgKQorICB7CisgICAgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsKKyAgfQorCisgICgqbHBscERQTCktPmxwdnRibCA9ICZsb2JieTJWVDsKKyAgKCpscGxwRFBMKS0+cmVmICAgID0gMTsKKworICAvKiBTdGlsbCBzb21lIHN0dWZmIHRvIGRvIGhlcmUgKi8KKworICByZXR1cm4gRFBfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBEaXJlY3RQbGF5TG9iYnlDcmVhdGVXICAgKERQTEFZWC41KQorICoKKyAqLworSFJFU1VMVCBXSU5BUEkgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVyggTFBHVUlEIGxwR1VJRERTUCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERJUkVDVFBMQVlMT0JCWTIgKmxwbHBEUEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAqbHBVbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgbHBEYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3RGF0YVNpemUgKQoreworICBUUkFDRShkcGxheSwibHBHVUlERFNQPSVwIGxwbHBEUEw9JXAgbHBVbms9JXAgbHBEYXRhPSVwIGR3RGF0YVNpemU9JTA4bHhcbiIsCisgICAgICAgIGxwR1VJRERTUCxscGxwRFBMLGxwVW5rLGxwRGF0YSxkd0RhdGFTaXplKTsKKworICAvKiBQYXJhbWV0ZXIgQ2hlY2s6IGxwR1VJRFNQLCBscFVuayAmIGxwRGF0YSBtdXN0IGJlIE5VTEwuIGR3RGF0YVNpemUgbXVzdCAKKyAgICogZXF1YWwgMC4gVGhlc2UgZmllbGRzIGFyZSBtb3N0bHkgZm9yIGZ1dHVyZSBleHBhbnNpb24uCisgICAqLworICBpZiAoIGxwR1VJRERTUCB8fCBscFVuayB8fCBscERhdGEgfHwgZHdEYXRhU2l6ZSApCisgIHsKKyAgICAgKmxwbHBEUEwgPSBOVUxMOworICAgICByZXR1cm4gRFBFUlJfSU5WQUxJRFBBUkFNUzsKKyAgfQorCisgICpscGxwRFBMID0gKExQRElSRUNUUExBWUxPQkJZMilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIEhFQVBfWkVST19NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBJRGlyZWN0UGxheUxvYmJ5MiApICk7CisKKyAgaWYoICEqbHBscERQTCkKKyAgeworICAgICByZXR1cm4gRFBFUlJfT1VUT0ZNRU1PUlk7CisgIH0KKworICAoKmxwbHBEUEwpLT5scHZ0YmwgPSAmbG9iYnkyVlQ7CisgICgqbHBscERQTCktPnJlZiAgICA9IDE7CisKKyAgcmV0dXJuIERQX09LOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBEaXJlY3RQbGF5RW51bWVyYXRlQSAoRFBMQVlYLjIpIAorICoKKyAqICBUaGUgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGxwQ29udGV4dCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSAKKyAqICBhcHByb3ByaWF0ZSBkYXRhIGZvciBlYWNoIHNlcnZpY2Ugb2ZmZXJlZCBieSB0aGUgT1MuIFRoZXNlIHNlcnZpY2VzIGFyZQorICogIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgb24gdGhpcyBwYXJ0aWN1bGFyIG1hY2hpbmUgYnV0IGFyZSBkZWZpbmVkCisgKiAgYXMgc2ltcGxlIHNlcnZpY2UgcHJvdmlkZXJzIHVuZGVyIHRoZSAiU2VydmljZSBQcm92aWRlcnMiIHJlZ2lzdHJ5IGtleS4KKyAqICBUaGlzIHN0cnVjdHVyZSBpcyB0aGVuIHBhc3NlZCB0byBscEVudW1DYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgZGlmZmVyZW50IAorICogIHNlcnZpY2VzLiAKKyAqCisgKiAgVGhpcyBBUEkgaXMgdXNlZnVsIG9ubHkgZm9yIGFwcGxpY2F0aW9ucyB3cml0dGVuIHVzaW5nIERpcmVjdFgzIG9yCisgKiAgd29yc2UuIEl0IGlzIHN1cGVyY2VlZGVkIGJ5IElEaXJlY3RQbGF5Mzo6RW51bUNvbm5lY3Rpb25zIHdoaWNoIGFsc28KKyAqICBnaXZlcyBpbmZvcm1hdGlvbiBvbiB0aGUgYWN0dWFsIGNvbm5lY3Rpb25zLgorICoKKyAqIGRlZm4gb2YgYSBzZXJ2aWNlIHByb3ZpZGVyOgorICogQSBkeW5hbWljLWxpbmsgbGlicmFyeSB1c2VkIGJ5IERpcmVjdFBsYXkgdG8gY29tbXVuaWNhdGUgb3ZlciBhIG5ldHdvcmsuIAorICogVGhlIHNlcnZpY2UgcHJvdmlkZXIgY29udGFpbnMgYWxsIHRoZSBuZXR3b3JrLXNwZWNpZmljIGNvZGUgcmVxdWlyZWQKKyAqIHRvIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuIE9ubGluZSBzZXJ2aWNlcyBhbmQgbmV0d29yayBvcGVyYXRvcnMgY2FuCisgKiBzdXBwbHkgc2VydmljZSBwcm92aWRlcnMgdG8gdXNlIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBwcm90b2NvbHMsIGNvbW11bmljYXRpb25zCisgKiBtZWRpYSwgYW5kIG5ldHdvcmsgcmVzb3VyY2VzLiAKKyAqCisgKiBUT0RPOiBBbGxvY2F0ZSBzdHJpbmcgYnVmZmVyIHNwYWNlIGZyb20gdGhlIGhlYXAgKGxlbmd0aCBmcm9tIHJlZykKKyAqICAgICAgIFBhc3MgcmVhbCBkZXZpY2UgZHJpdmVyIG51bWJlcnMuLi4KKyAqICAgICAgIEdldCB0aGUgR1VJRCBwcm9wZXJseS4uLgorICovCitIUkVTVUxUIFdJTkFQSSBEaXJlY3RQbGF5RW51bWVyYXRlQSggTFBEUEVOVU1EUENBTExCQUNLQSBscEVudW1DYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgbHBDb250ZXh0ICkKK3sKKworICBIS0VZIGhrUmVzdWx0OyAKKyAgTFBDU1RSIHNlYXJjaFN1YktleSAgICA9ICJTT0ZUV0FSRVxcTWljcm9zb2Z0XFxEaXJlY3RQbGF5XFxTZXJ2aWNlIFByb3ZpZGVycyI7CisgIExQU1RSIGd1aWREYXRhU3ViS2V5ICAgPSAiR3VpZCI7CisgIExQU1RSIG1halZlckRhdGFTdWJLZXkgPSAiZHdSZXNlcnZlZDEiOworICBEV09SRCBkd0luZGV4LCBzaXplT2ZTdWJLZXlOYW1lPTUwOworICBjaGFyIHN1YktleU5hbWVbNTFdOyAKKworICBUUkFDRSggZHBsYXksICI6IGxwRW51bUNhbGxiYWNrPSVwIGxwQ29udGV4dD0lcFxuIiwgbHBFbnVtQ2FsbGJhY2ssIGxwQ29udGV4dCApOworCisgIGlmKCAhbHBFbnVtQ2FsbGJhY2sgfHwgISpscEVudW1DYWxsYmFjayApCisgIHsKKyAgICAgcmV0dXJuIERQRVJSX0lOVkFMSURQQVJBTVM7CisgIH0KKworICAvKiBOZWVkIHRvIGxvb3Agb3ZlciB0aGUgc2VydmljZSBwcm92aWRlcnMgaW4gdGhlIHJlZ2lzdHJ5ICovCisgIGlmKCBSZWdPcGVuS2V5RXgzMkEoIEhLRVlfTE9DQUxfTUFDSElORSwgc2VhcmNoU3ViS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAwLCBLRVlfRU5VTUVSQVRFX1NVQl9LRVlTLCAmaGtSZXN1bHQgKSAhPSBFUlJPUl9TVUNDRVNTICkKKyAgeworICAgIC8qIEhtbW0uIERvZXMgdGhpcyBtZWFuIHRoYXQgdGhlcmUgYXJlIG5vIHNlcnZpY2UgcHJvdmlkZXJzPyAqLyAKKyAgICBFUlIoZHBsYXksICI6IG5vIHNlcnZpY2UgcHJvdmlkZXJzP1xuIik7CisgICAgcmV0dXJuIERQX09LOyAKKyAgfQorCisgIC8qIFRyYXZlcnNlIGFsbCB0aGUgc2VydmljZSBwcm92aWRlcnMgd2UgaGF2ZSBhdmFpbGFibGUgKi8KKyAgZm9yKCBkd0luZGV4PTA7CisgICAgICAgUmVnRW51bUtleTMyQSggaGtSZXN1bHQsIGR3SW5kZXgsIHN1YktleU5hbWUsIHNpemVPZlN1YktleU5hbWUgKSAhPQorICAgICAgICAgRVJST1JfTk9fTU9SRV9JVEVNUzsKKyAgICAgICArK2R3SW5kZXggKQorICB7CisgICAgSEtFWSAgICAgaGtTZXJ2aWNlUHJvdmlkZXI7CisgICAgR1VJRCAgICAgc2VydmljZVByb3ZpZGVyR1VJRDsKKyAgICBEV09SRCAgICByZXR1cm5UeXBlR1VJRCwgcmV0dXJuVHlwZVJlc2VydmVkMSwgc2l6ZU9mUmV0dXJuQnVmZmVyPTUwOworICAgIGNoYXIgICAgIHJldHVybkJ1ZmZlcls1MV07CisgICAgRFdPUkQgICAgbWFqVmVyc2lvbk51bSwgbWluVmVyc2lvbk51bTsKKyAgICBMUFdTVFIgICBscFdHVUlEU3RyaW5nOyAKKworICAgIFRSQUNFKCBkcGxheSwgIiB0aGlzIHRpbWUgdGhyb3VnaDogJXNcbiIsIHN1YktleU5hbWUgKTsKKworICAgIC8qIEdldCBhIGhhbmRsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHNlcnZpY2UgcHJvdmlkZXIgKi8KKyAgICBpZiggUmVnT3BlbktleUV4MzJBKCBoa1Jlc3VsdCwgc3ViS2V5TmFtZSwgMCwgS0VZX1FVRVJZX1ZBTFVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICZoa1NlcnZpY2VQcm92aWRlciApICE9IEVSUk9SX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgIEVSUiggZHBsYXksICI6IHdoYXQgdGhlIGhlY2sgaXMgZ29pbmcgb24/XG4iICk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIEdVSUQsIERldmljZSBtYWpvciBudW1iZXIgYW5kIGRldmljZSBtaW5vciBudW1iZXIgCisgICAgICogZnJvbSB0aGUgcmVnaXN0cnkuIAorICAgICAqLworICAgIGlmKCBSZWdRdWVyeVZhbHVlRXgzMkEoIGhrU2VydmljZVByb3ZpZGVyLCBndWlkRGF0YVN1YktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmcmV0dXJuVHlwZUdVSUQsIHJldHVybkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZU9mUmV0dXJuQnVmZmVyICkgIT0gRVJST1JfU1VDQ0VTUyApCisgICAgeworICAgICAgRVJSKCBkcGxheSwgIjogbWlzc2luZyBHVUlEIHJlZ2lzdHJ5IGRhdGEgbWVtYmVyc1xuIiApOworICAgICAgY29udGludWU7IAorICAgIH0KKworICAgIC8qIEZJWE1FOiBDaGVjayByZXR1cm4gdHlwZXMgdG8gZW5zdXJlIHdlJ3JlIGludGVycHJldGluZyBkYXRhIHJpZ2h0ICovCisgICAgbHBXR1VJRFN0cmluZyA9IEhFQVBfc3RyZHVwQXRvVyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcmV0dXJuQnVmZmVyICk7CisgICAgQ0xTSURGcm9tU3RyaW5nMzIoIChMUENPTEVTVFIzMilscFdHVUlEU3RyaW5nLCAmc2VydmljZVByb3ZpZGVyR1VJRCApOyAKKyAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbHBXR1VJRFN0cmluZyApOworCisgICAgc2l6ZU9mUmV0dXJuQnVmZmVyID0gNTA7CisgCisgICAgaWYoIFJlZ1F1ZXJ5VmFsdWVFeDMyQSggaGtTZXJ2aWNlUHJvdmlkZXIsIG1halZlckRhdGFTdWJLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgJnJldHVyblR5cGVSZXNlcnZlZDEsIHJldHVybkJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZU9mUmV0dXJuQnVmZmVyICkgIT0gRVJST1JfU1VDQ0VTUyApCisgICAgeworICAgICAgRVJSKCBkcGxheSwgIjogbWlzc2luZyBkd1Jlc2VydmVkMSByZWdpc3RyeSBkYXRhIG1lbWJlcnNcbiIpIDsKKyAgICAgIGNvbnRpbnVlOyAKKyAgICB9CisgICAgLyogRklYTUU6IFRoaXMgY291bGRuJ3QgcG9zc2libHkgYmUgcmlnaHQuLi4qLworICAgIG1halZlcnNpb25OdW0gPSBHRVRfRFdPUkQoIHJldHVybkJ1ZmZlciApOworCisgICAgLyogVGhlIGVudW1lcmF0aW9uIHdpbGwgcmV0dXJuIEZBTFNFIGlmIHdlIGFyZSBub3QgdG8gY29udGludWUgKi8KKyAgICBpZiggIWxwRW51bUNhbGxiYWNrKCAmc2VydmljZVByb3ZpZGVyR1VJRCAsIHN1YktleU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbWFqVmVyc2lvbk51bSwgKERXT1JEKTAsIGxwQ29udGV4dCApICkKKyAgICB7CisgICAgICBXQVJOKCBkcGxheSwgImxwRW51bUNhbGxiYWNrIHJldHVybmluZyBGQUxTRVxuIiApOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIERQX09LOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBEaXJlY3RQbGF5RW51bWVyYXRlVyAoRFBMQVlYLjMpCisgKgorICovCitIUkVTVUxUIFdJTkFQSSBEaXJlY3RQbGF5RW51bWVyYXRlVyggTFBEUEVOVU1EUENBTExCQUNLVyBscEVudW1DYWxsYmFjaywgTFBWT0lEIGxwQ29udGV4dCApCit7CisKKyAgRklYTUUoIGRwbGF5LCAiOnN0dWJcbiIpOworCisgIHJldHVybiBEUEVSUl9PVVRPRk1FTU9SWTsgCisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIERpcmVjdFBsYXlDcmVhdGUgKERQTEFZWC4xKSAoRFBMQVkuMSkKKyAqCisgKi8KK0hSRVNVTFQgV0lOQVBJIERpcmVjdFBsYXlDcmVhdGUKKyggTFBHVUlEIGxwR1VJRCwgTFBESVJFQ1RQTEFZICpscGxwRFAsIElVbmtub3duICpwVW5rKQoreworCisgIEZJWE1FKCBkcGxheSwgIjpzdHViXG4iKTsKKyAgcmV0dXJuIERQRVJSX09VVE9GTUVNT1JZOworCit9CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL2Rzb3VuZC5jIGIvbXVsdGltZWRpYS9kc291bmQuYwppbmRleCA1ZTI0OGIwLi44OTI2YWYzIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL2Rzb3VuZC5jCisrKyBiL211bHRpbWVkaWEvZHNvdW5kLmMKQEAgLTEwNzcsMjYgKzEwNzcsMyBAQAogICAgIEZJWE1FKGRzb3VuZCwgIih2b2lkKTogc3R1YlxuIik7CiAgICAgcmV0dXJuIFNfRkFMU0U7CiB9Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVyAoRFBMQVlYLjUpCi0gKgotICovCi1IUkVTVUxUIFdJTkFQSSBEaXJlY3RQbGF5TG9iYnlDcmVhdGVXKCBMUEdVSUQgbHBHVUlELCBMUERJUkVDVFBMQVlMT0JCWSAqYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICpiLCBMUFZPSUQgYywgRFdPUkQgZCApCi17Ci0gIEZJWE1FKGRzb3VuZCwibHBHVUlEPSVwIGE9JXAgYj0lcCBjPSVwIGQ9JTA4bHggOnN0dWJcbiIsbHBHVUlELGEsYixjLGQpOwotICByZXR1cm4gRV9GQUlMOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlQSAgIChEUExBWVguNCkKLSAqCi0gKi8KLUhSRVNVTFQgV0lOQVBJIERpcmVjdFBsYXlMb2JieUNyZWF0ZUEoIExQR1VJRCBscEdVSUQsIExQRElSRUNUUExBWUxPQkJZQSAqYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICpiLCBMUFZPSUQgYywgRFdPUkQgZCApCi17Ci0gIEZJWE1FKGRzb3VuZCwibHBHVUlEPSVwIGE9JXAgYj0lcCBjPSVwIGQ9JTA4bHggOnN0dWJcbiIsbHBHVUlELGEsYixjLGQpOwotICByZXR1cm4gRV9GQUlMOwotfQotCmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL2luaXQuYyBiL211bHRpbWVkaWEvaW5pdC5jCmluZGV4IDdlNDg1NTAuLjYzZGYxYmYgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvaW5pdC5jCisrKyBiL211bHRpbWVkaWEvaW5pdC5jCkBAIC01OCw3ICs1OCw3IEBACiBCT09MMzIgTVVMVElNRURJQV9Jbml0ICh2b2lkKQogewogI2lmZGVmIEhBVkVfT1NTCi0gIGludCBpLCBzdGF0dXMsIG51bXN5bnRoZGV2cywgbnVtbWlkaWRldnM7CisgIGludCBpLCBzdGF0dXMsIG51bXN5bnRoZGV2cz0yNTUsIG51bW1pZGlkZXZzPTI1NTsKICAgc3RydWN0IHN5bnRoX2luZm8gc2luZm87CiAgIHN0cnVjdCBtaWRpX2luZm8gbWluZm87CiAgIGludCBmZDsgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciBmb3IgTUlESV9ERVYgKi8KQEAgLTE4Miw1ICsxODIsNCBAQAogI2VuZGlmIC8qIEhBVkVfT1NTICovCiAgIAogICByZXR1cm4gVFJVRTsKLSAgCiB9CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21tc3lzdGVtLmMgYi9tdWx0aW1lZGlhL21tc3lzdGVtLmMKaW5kZXggNTg4OGNhNS4uMzZjOTI2MSAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tbXN5c3RlbS5jCisrKyBiL211bHRpbWVkaWEvbW1zeXN0ZW0uYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgIFRSQUNFKG1tc3lzLCAicHN6U291bmQ9JyVwJyBobW9kPSUwNFggZmR3U291bmQ9JTA4bFhcbiIsCiAJcHN6U291bmQsIGhtb2QsIGZkd1NvdW5kKTsKICAgaWYoaG1vZCAhPSAwIHx8ICEoZmR3U291bmQgJiBTTkRfRklMRU5BTUUpKSB7Ci0gICAgRklYTUUobW1zeXMsICJvbmx5IGRpc2sgc291bmQgZmlsZXMgYXJlIHN1cHBvcnRlZFxuIik7CisgICAgRklYTUUobW1zeXMsICJvbmx5IGRpc2sgc291bmQgZmlsZXMgYXJlIHN1cHBvcnRlZC4gVHlwZTogJTA4bHhcbiIsZmR3U291bmQpOwogICAgIHJldHVybiBGQUxTRTsKICAgfSBlbHNlCiAgICAgcmV0dXJuICBzbmRQbGF5U291bmQocHN6U291bmQsIChVSU5UMTYpIGZkd1NvdW5kKTsKZGlmZiAtLWdpdCBhL29iamVjdHMvYml0bWFwLmMgYi9vYmplY3RzL2JpdG1hcC5jCmluZGV4IDBhM2RiZGYuLjRkNmZkNGIgMTAwNjQ0Ci0tLSBhL29iamVjdHMvYml0bWFwLmMKKysrIGIvb2JqZWN0cy9iaXRtYXAuYwpAQCAtMTc4LDYgKzE3OCw3IEBACiAgICAgYm1wT2JqUHRyLT5kaWJTZWN0aW9uID0gTlVMTDsKICAgICBibXBPYmpQdHItPmNvbG9yTWFwID0gTlVMTDsKICAgICBibXBPYmpQdHItPm5Db2xvck1hcCA9IDA7CisgICAgYm1wT2JqUHRyLT5zdGF0dXMgPSBESUJfTm9IYW5kbGVyOwogCiAgICAgICAvKiBDcmVhdGUgdGhlIHBpeG1hcCAqLwogICAgIGJtcE9ialB0ci0+cGl4bWFwID0gVFNYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIHJvb3RXaW5kb3csIHdpZHRoLCBoZWlnaHQsIGJwcCk7CkBAIC0xODYsNyArMTg3LDcgQEAKIAlHRElfSEVBUF9GUkVFKCBoYml0bWFwICk7CiAJaGJpdG1hcCA9IDA7CiAgICAgfQotICAgIGVsc2UgaWYgKGJpdHMpICAvKiBTZXQgYml0bWFwIGJpdHMgKi8KKyAgICBlbHNlIGlmIChiaXRzKSAvKiBTZXQgYml0bWFwIGJpdHMgKi8KIAlTZXRCaXRtYXBCaXRzMzIoIGhiaXRtYXAsIGhlaWdodCAqIGJtcE9ialB0ci0+Yml0bWFwLmJtV2lkdGhCeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzICk7CiAgICAgR0RJX0hFQVBfVU5MT0NLKCBoYml0bWFwICk7CkBAIC04MzIsOCArODMzLDExIEBACiAgICAgewogCURJQlNFQ1RJT04gKmRpYiA9IGJtcC0+ZGliU2VjdGlvbjsKIAotCWlmICghZGliLT5kc2hTZWN0aW9uICYmIGRpYi0+ZHNCbS5ibUJpdHMpCi0JICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGRpYi0+ZHNCbS5ibUJpdHMpOworCWlmIChkaWItPmRzQm0uYm1CaXRzKQorICAgICAgICAgICAgaWYgKGRpYi0+ZHNoU2VjdGlvbikKKyAgICAgICAgICAgICAgICBVbm1hcFZpZXdPZkZpbGUoZGliLT5kc0JtLmJtQml0cyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVmlydHVhbEZyZWUoZGliLT5kc0JtLmJtQml0cywgTUVNX1JFTEVBU0UsIDBMKTsKIAogCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGRpYik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9jdXJzb3JpY29uLmMgYi9vYmplY3RzL2N1cnNvcmljb24uYwppbmRleCAxOGYxNzIxLi5mNjU2OGM4IDEwMDY0NAotLS0gYS9vYmplY3RzL2N1cnNvcmljb24uYworKysgYi9vYmplY3RzL2N1cnNvcmljb24uYwpAQCAtMTYyNSw3ICsxNjI1LDggQEAKICAgICBpZiAoaE1lbURDICYmIHB0cikKICAgICB7CiAJSEJJVE1BUDMyIGhYb3JCaXRzLCBoQW5kQml0czsKLQlDT0xPUlJFRiBvbGRGZywgb2xkQmc7CisJQ09MT1JSRUYgIG9sZEZnLCBvbGRCZzsKKwlJTlQzMiAgICAgblN0cmV0Y2hNb2RlOwogCiAJLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gICovCiAJaWYgKGN4V2lkdGggPT0gMCkKQEAgLTE2MzksNiArMTY0MCw4IEBACiAJICAgIGVsc2UKIAkJY3lXaWR0aCA9IHB0ci0+bkhlaWdodDsKIAorCW5TdHJldGNoTW9kZSA9IFNldFN0cmV0Y2hCbHRNb2RlMzIgKGhkYywgU1RSRVRDSF9ERUxFVEVTQ0FOUyk7CisKIAloWG9yQml0cyA9IENyZWF0ZUJpdG1hcDMyICggcHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwKIAkJCQkgICAgcHRyLT5iUGxhbmVzLCBwdHItPmJCaXRzUGVyUGl4ZWwsCiAJCQkJICAgIChjaGFyICopKHB0ciArIDEpCkBAIC0xNjUzLDEyICsxNjU2LDEyIEBACiAJewogCSAgICBIQklUTUFQMzIgaEJpdFRlbXAgPSBTZWxlY3RPYmplY3QzMiggaE1lbURDLCBoQW5kQml0cyApOwogCSAgICBpZiAoZmxhZ3MgJiBESV9NQVNLKQotCQlCaXRCbHQzMiAoaGRjLCB4MCwgeTAsIGN4V2lkdGgsIGN5V2lkdGgsCi0JCQkgIGhNZW1EQywgMCwgMCwgU1JDQU5EKTsKKwkJU3RyZXRjaEJsdDMyIChoZGMsIHgwLCB5MCwgY3hXaWR0aCwgY3lXaWR0aCwKKwkJCSAgICAgIGhNZW1EQywgMCwgMCwgcHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgU1JDQU5EKTsKIAkgICAgU2VsZWN0T2JqZWN0MzIoIGhNZW1EQywgaFhvckJpdHMgKTsKIAkgICAgaWYgKGZsYWdzICYgRElfSU1BR0UpCi0JCUJpdEJsdDMyIChoZGMsIHgwLCB5MCwgY3hXaWR0aCwgY3lXaWR0aCwKLQkJCSAgaE1lbURDLCAwLCAwLCBTUkNQQUlOVCk7CisJCVN0cmV0Y2hCbHQzMiAoaGRjLCB4MCwgeTAsIGN4V2lkdGgsIGN5V2lkdGgsCisJCQkgIGhNZW1EQywgMCwgMCwgcHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgU1JDUEFJTlQpOwogCSAgICBTZWxlY3RPYmplY3QzMiggaE1lbURDLCBoQml0VGVtcCApOwogCSAgICByZXN1bHQgPSBUUlVFOwogCX0KQEAgLTE2NjcsNiArMTY3MCw3IEBACiAJU2V0QmtDb2xvcjMyKCBoZGMsIG9sZEJnICk7CiAJaWYgKGhYb3JCaXRzKSBEZWxldGVPYmplY3QzMiggaFhvckJpdHMgKTsKIAlpZiAoaEFuZEJpdHMpIERlbGV0ZU9iamVjdDMyKCBoQW5kQml0cyApOworCVNldFN0cmV0Y2hCbHRNb2RlMzIgKGhkYywgblN0cmV0Y2hNb2RlKTsKICAgICB9CiAgICAgaWYgKGhNZW1EQykgRGVsZXRlREMzMiggaE1lbURDICk7CiAgICAgR2xvYmFsVW5sb2NrMTYoIGhJY29uICk7CmRpZmYgLS1naXQgYS9vYmplY3RzL2RjLmMgYi9vYmplY3RzL2RjLmMKaW5kZXggNzUxNDMwZC4uMjAyNDNjMyAxMDA2NDQKLS0tIGEvb2JqZWN0cy9kYy5jCisrKyBiL29iamVjdHMvZGMuYwpAQCAtMzg5LDggKzM4OSwxMCBAQAogICAgIHsKICAgICBjYXNlIFBTX0pPSU5fQkVWRUw6CiAJdmFsLmpvaW5fc3R5bGUgPSBKb2luQmV2ZWw7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFNfSk9JTl9NSVRFUjoKIAl2YWwuam9pbl9zdHlsZSA9IEpvaW5NaXRlcjsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQU19KT0lOX1JPVU5EOgogICAgIGRlZmF1bHQ6CiAJdmFsLmpvaW5fc3R5bGUgPSBKb2luUm91bmQ7CmRpZmYgLS1naXQgYS9vYmplY3RzL2RpYi5jIGIvb2JqZWN0cy9kaWIuYwppbmRleCA0Zjg4ZWU5Li43Mjc4MGY5IDEwMDY0NAotLS0gYS9vYmplY3RzL2RpYi5jCisrKyBiL29iamVjdHMvZGliLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJjYWxsYmFjay5oIgogI2luY2x1ZGUgInBhbGV0dGUuaCIKICNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImdsb2JhbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKIHN0YXRpYyBpbnQgYml0bWFwRGVwdGhUYWJsZVtdID0geyA4LCAxLCAzMiwgMTYsIDI0LCAxNSwgNCwgMCB9OwpAQCAtMjgwLDYgKzI4MSwyMiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBESUJfTWFwQ29sb3IKKyAqLworc3RhdGljIGludCBESUJfTWFwQ29sb3IoIGludCAqcGh5c01hcCwgaW50IG5QaHlzTWFwLCBpbnQgcGh5cyApCit7CisgICAgaW50IGNvbG9yOworCisgICAgZm9yIChjb2xvciA9IDA7IGNvbG9yIDwgblBoeXNNYXA7IGNvbG9yKyspCisgICAgICAgIGlmIChwaHlzTWFwW2NvbG9yXSA9PSBwaHlzKQorICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworCisgICAgV0FSTihiaXRtYXAsICJTdHJhbmdlIGNvbG9yICUwOHhcbiIsIHBoeXMpOworICAgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERJQl9TZXRJbWFnZUJpdHNfMV9MaW5lCiAgKgogICogSGFuZGxlcyBhIHNpbmdsZSBsaW5lIG9mIDEgYml0IGRhdGEuCkBAIC0zOTIsNiArNDA5LDUxIEBACiAgICAgfQogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBESUJfR2V0SW1hZ2VCaXRzXzQKKyAqCisgKiBHZXRESUJpdHMgZm9yIGEgNC1iaXQgZGVlcCBESUIuCisgKi8KK3N0YXRpYyB2b2lkIERJQl9HZXRJbWFnZUJpdHNfNCggaW50IGxpbmVzLCBCWVRFICpzcmNiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzcmN3aWR0aCwgRFdPUkQgZHN0d2lkdGgsIGludCBsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbG9ycywgaW50IG5Db2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQoreworICAgIERXT1JEIGksIHg7CisgICAgaW50IGg7CisgICAgQllURSAqYml0cyA9IHNyY2JpdHMgKyAobGVmdCA+PiAxKTsKKworICAgIC8qIDMyIGJpdCBhbGlnbmVkICovCisgICAgRFdPUkQgbGluZWJ5dGVzID0gKChzcmN3aWR0aCs3KSZ+NykvMjsKKworICAgIGRzdHdpZHRoICs9IGxlZnQ7CisKKyAgICAvKiBGSVhNRTogc2hvdWxkIGF2b2lkIHB1dHRpbmcgeDxsZWZ0IHBpeGVscyAobWlub3Igc3BlZWQgaXNzdWUpICovCisgICAgaWYgKGxpbmVzID4gMCkgeworICAgICAgIGZvciAoaCA9IGxpbmVzLTE7IGggPj0gMDsgaC0tKSB7CisgICAgICAgICAgIGZvciAoaSA9IGRzdHdpZHRoLzIsIHggPSBsZWZ0Jn4xOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAqYml0cysrID0gKERJQl9NYXBDb2xvciggY29sb3JzLCBuQ29sb3JzLCBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4KyssIGggKSkgPDwgNCkKKyAgICAgICAgICAgICAgICAgICAgICAgfCAoRElCX01hcENvbG9yKCBjb2xvcnMsIG5Db2xvcnMsIFhHZXRQaXhlbCggYm1wSW1hZ2UsIHgrKywgaCApKSAmIDB4MGYpOworICAgICAgICAgICB9CisgICAgICAgICAgIGlmIChkc3R3aWR0aCAmIDEpCisgICAgICAgICAgICAgICAqYml0cyA9IChESUJfTWFwQ29sb3IoIGNvbG9ycywgbkNvbG9ycywgWEdldFBpeGVsKCBibXBJbWFnZSwgeCsrLCBoICkpIDw8IDQpOworICAgICAgICAgICBzcmNiaXRzICs9IGxpbmVieXRlczsKKyAgICAgICAgICAgYml0cyAgICAgPSBzcmNiaXRzICsgKGxlZnQgPj4gMSk7CisgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgbGluZXMgPSAtbGluZXM7CisgICAgICAgZm9yIChoID0gMDsgaCA8IGxpbmVzOyBoKyspIHsKKyAgICAgICAgICAgZm9yIChpID0gZHN0d2lkdGgvMiwgeCA9IGxlZnQmfjE7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICpiaXRzKysgPSAoRElCX01hcENvbG9yKCBjb2xvcnMsIG5Db2xvcnMsIFhHZXRQaXhlbCggYm1wSW1hZ2UsIHgrKywgaCApKSA8PCA0KQorICAgICAgICAgICAgICAgICAgICAgICB8IChESUJfTWFwQ29sb3IoIGNvbG9ycywgbkNvbG9ycywgWEdldFBpeGVsKCBibXBJbWFnZSwgeCsrLCBoICkpICYgMHgwZik7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgaWYgKGRzdHdpZHRoICYgMSkKKyAgICAgICAgICAgICAgICpiaXRzID0gKERJQl9NYXBDb2xvciggY29sb3JzLCBuQ29sb3JzLCBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4KyssIGggKSkgPDwgNCk7CisgICAgICAgICAgIHNyY2JpdHMgKz0gbGluZWJ5dGVzOworICAgICAgICAgICBiaXRzICAgICA9IHNyY2JpdHMgKyAobGVmdCA+PiAxKTsKKyAgICAgICB9CisgICAgfQorfQorCiAjZGVmaW5lIGNoZWNrX3h5KHgseSkgXAogCWlmICh4ID4gd2lkdGgpIHsgXAogCQl4ID0gMDsgXApAQCAtNDk4LDYgKzU2MCw0NiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBESUJfR2V0SW1hZ2VCaXRzXzgKKyAqCisgKiBHZXRESUJpdHMgZm9yIGFuIDgtYml0IGRlZXAgRElCLgorICovCitzdGF0aWMgdm9pZCBESUJfR2V0SW1hZ2VCaXRzXzgoIGludCBsaW5lcywgQllURSAqc3JjYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3Jjd2lkdGgsIERXT1JEIGRzdHdpZHRoLCBpbnQgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2xvcnMsIGludCBuQ29sb3JzLCBYSW1hZ2UgKmJtcEltYWdlICkKK3sKKyAgICBEV09SRCB4OworICAgIGludCBoOworICAgIEJZVEUgKmJpdHMgPSBzcmNiaXRzICsgbGVmdDsKKworICAgIC8qIGFsaWduIHRvIDMyIGJpdCAqLworICAgIERXT1JEIGxpbmVieXRlcyA9IChzcmN3aWR0aCArIDMpICYgfjM7CisKKyAgICBkc3R3aWR0aCs9bGVmdDsKKworICAgIGlmIChsaW5lcyA+IDApIHsKKyAgICAgICBmb3IgKGggPSBsaW5lcyAtIDE7IGggPj0gMDsgaC0tKSB7CisgICAgICAgICAgIGZvciAoeCA9IGxlZnQ7IHggPCBkc3R3aWR0aDsgeCsrLCBiaXRzKyspIHsKKyAgICAgICAgICAgICAgIGlmICggWEdldFBpeGVsKCBibXBJbWFnZSwgeCwgaCApICE9IGNvbG9yc1sqYml0c10gKQorICAgICAgICAgICAgICAgICAgICpiaXRzID0gRElCX01hcENvbG9yKCBjb2xvcnMsIG5Db2xvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCBoICkgKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBiaXRzID0gKHNyY2JpdHMgKz0gbGluZWJ5dGVzKSArIGxlZnQ7CisgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgbGluZXMgPSAtbGluZXM7CisgICAgICAgZm9yIChoID0gMDsgaCA8IGxpbmVzOyBoKyspIHsKKyAgICAgICAgICAgZm9yICh4ID0gbGVmdDsgeCA8IGRzdHdpZHRoOyB4KyssIGJpdHMrKykgeworICAgICAgICAgICAgICAgaWYgKCBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCBoICkgIT0gY29sb3JzWypiaXRzXSApCisgICAgICAgICAgICAgICAgICAgKmJpdHMgPSBESUJfTWFwQ29sb3IoIGNvbG9ycywgbkNvbG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEdldFBpeGVsKCBibXBJbWFnZSwgeCwgaCApICk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgYml0cyA9IChzcmNiaXRzICs9IGxpbmVieXRlcykgKyBsZWZ0OworICAgICAgIH0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJICAgICAgRElCX1NldEltYWdlQml0c19STEU4CiAgKgogICogU2V0RElCaXRzIGZvciBhbiA4LWJpdCBkZWVwIGNvbXByZXNzZWQgRElCLgpAQCAtNzI3LDYgKzgyOSw1OCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9HZXRJbWFnZUJpdHNfMTYKKyAqCisgKiBHZXRESUJpdHMgZm9yIGFuIDE2LWJpdCBkZWVwIERJQi4KKyAqLworc3RhdGljIHZvaWQgRElCX0dldEltYWdlQml0c18xNiggaW50IGxpbmVzLCBCWVRFICpzcmNiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHNyY3dpZHRoLCBEV09SRCBkc3R3aWR0aCwgaW50IGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY29sb3JzLCBpbnQgbkNvbG9ycywgWEltYWdlICpibXBJbWFnZSApCit7CisgICAgRFdPUkQgeDsKKyAgICBMUFdPUkQgcHRyOworICAgIGludCBoOworICAgIEJZVEUgciwgZywgYjsKKworICAgIC8qIGFsaWduIHRvIDMyIGJpdCAqLworICAgIERXT1JEIGxpbmVieXRlcyA9IChzcmN3aWR0aCAqIDIgKyAzKSAmIH4zOworCisgICAgZHN0d2lkdGggKz0gbGVmdDsKKworICAgIHB0ciA9IChMUFdPUkQpIHNyY2JpdHMgKyBsZWZ0OworICAgIGlmIChsaW5lcyA+IDApIHsKKyAgICAgICBmb3IgKGggPSBsaW5lcyAtIDE7IGggPj0gMDsgaC0tKQorICAgICAgICB7CisgICAgICAgICAgIGZvciAoeCA9IGxlZnQ7IHggPCBkc3R3aWR0aDsgeCsrLCBwdHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDT0xPUlJFRiBwaXhlbCA9IENPTE9SX1RvTG9naWNhbCggWEdldFBpeGVsKCBibXBJbWFnZSwgeCwgaCApICk7CisgICAgICAgICAgICAgICByID0gKEJZVEUpIEdldFJWYWx1ZShwaXhlbCk7CisgICAgICAgICAgICAgICBnID0gKEJZVEUpIEdldEdWYWx1ZShwaXhlbCk7CisgICAgICAgICAgICAgICBiID0gKEJZVEUpIEdldEJWYWx1ZShwaXhlbCk7CisgICAgICAgICAgICAgICAgKnB0ciA9ICggKChyIDw8IDcpICYgMHg3YzAwKSB8ICgoZyA8PCAyKSAmIDB4MDNlMCkgfCAoKGIgPj4gMykgJiAweDAwMWYpICk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgcHRyID0gKExQV09SRCkgKHNyY2JpdHMgKz0gbGluZWJ5dGVzKSArIGxlZnQ7CisgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgbGluZXMgPSAtbGluZXM7CisgICAgICAgZm9yIChoID0gMDsgaCA8IGxpbmVzOyBoKyspCisgICAgICAgIHsKKyAgICAgICAgICAgZm9yICh4ID0gbGVmdDsgeCA8IGRzdHdpZHRoOyB4KyssIHB0cisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENPTE9SUkVGIHBpeGVsID0gQ09MT1JfVG9Mb2dpY2FsKCBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCBoICkgKTsKKyAgICAgICAgICAgICAgIHIgPSAoQllURSkgR2V0UlZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgICAgIGcgPSAoQllURSkgR2V0R1ZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgICAgIGIgPSAoQllURSkgR2V0QlZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgICAgICAqcHRyID0gKCAoKHIgPDwgNykgJiAweDdjMDApIHwgKChnIDw8IDIpICYgMHgwM2UwKSB8ICgoYiA+PiAzKSAmIDB4MDAxZikgKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIHB0ciA9IChMUFdPUkQpIChzcmNiaXRzICs9IGxpbmVieXRlcykgKyBsZWZ0OworICAgICAgIH0KKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRElCX1NldEltYWdlQml0c18yNAogICoKICAqIFNldERJQml0cyBmb3IgYSAyNC1iaXQgZGVlcCBESUIuCkBAIC03NjgsNiArOTIyLDU0IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRElCX0dldEltYWdlQml0c18yNAorICoKKyAqIEdldERJQml0cyBmb3IgYW4gMjQtYml0IGRlZXAgRElCLgorICovCitzdGF0aWMgdm9pZCBESUJfR2V0SW1hZ2VCaXRzXzI0KCBpbnQgbGluZXMsIEJZVEUgKnNyY2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3Jjd2lkdGgsIERXT1JEIGRzdHdpZHRoLCBpbnQgbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb2xvcnMsIGludCBuQ29sb3JzLCBYSW1hZ2UgKmJtcEltYWdlICkKK3sKKyAgICBEV09SRCB4OworICAgIGludCBoOworICAgIEJZVEUgKmJpdHMgPSBzcmNiaXRzICsgKGxlZnQgKiAzKTsKKworICAgIC8qIGFsaWduIHRvIDMyIGJpdCAqLworICAgIERXT1JEIGxpbmVieXRlcyA9IChzcmN3aWR0aCAqIDMgKyAzKSAmIH4zOworCisgICAgZHN0d2lkdGggKz0gbGVmdDsKKworICAgIGlmIChsaW5lcyA+IDApIHsKKyAgICAgICBmb3IgKGggPSBsaW5lcyAtIDE7IGggPj0gMDsgaC0tKQorICAgICAgICB7CisgICAgICAgICAgIGZvciAoeCA9IGxlZnQ7IHggPCBkc3R3aWR0aDsgeCsrLCBiaXRzICs9IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ09MT1JSRUYgcGl4ZWwgPSBDT0xPUl9Ub0xvZ2ljYWwoIFhHZXRQaXhlbCggYm1wSW1hZ2UsIHgsIGggKSApOworICAgICAgICAgICAgICAgIGJpdHNbMF0gPSBHZXRSVmFsdWUocGl4ZWwpOworICAgICAgICAgICAgICAgIGJpdHNbMV0gPSBHZXRHVmFsdWUocGl4ZWwpOworICAgICAgICAgICAgICAgIGJpdHNbMl0gPSBHZXRCVmFsdWUocGl4ZWwpOworICAgICAgICAgICB9CisgICAgICAgICAgIGJpdHMgPSAoc3JjYml0cyArPSBsaW5lYnl0ZXMpICsgKGxlZnQgKiAzKTsKKyAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICBsaW5lcyA9IC1saW5lczsKKyAgICAgICBmb3IgKGggPSAwOyBoIDwgbGluZXM7IGgrKykKKyAgICAgICAgeworICAgICAgICAgICBmb3IgKHggPSBsZWZ0OyB4IDwgZHN0d2lkdGg7IHgrKywgYml0cyArPSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENPTE9SUkVGIHBpeGVsID0gQ09MT1JfVG9Mb2dpY2FsKCBYR2V0UGl4ZWwoIGJtcEltYWdlLCB4LCBoICkgKTsKKyAgICAgICAgICAgICAgICBiaXRzWzBdID0gR2V0UlZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgICAgICBiaXRzWzFdID0gR2V0R1ZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgICAgICBiaXRzWzJdID0gR2V0QlZhbHVlKHBpeGVsKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGJpdHMgPSAoc3JjYml0cyArPSBsaW5lYnl0ZXMpICsgKGxlZnQgKiAzKTsKKyAgICAgICB9CisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERJQl9TZXRJbWFnZUJpdHNfMzIKICAqCiAgKiBTZXRESUJpdHMgZm9yIGEgMzItYml0IGRlZXAgRElCLgpAQCAtODA2LDYgKzEwMDgsNTQgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBESUJfR2V0SW1hZ2VCaXRzXzMyCisgKgorICogR2V0RElCaXRzIGZvciBhbiAzMi1iaXQgZGVlcCBESUIuCisgKi8KK3N0YXRpYyB2b2lkIERJQl9HZXRJbWFnZUJpdHNfMzIoIGludCBsaW5lcywgQllURSAqc3JjYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzcmN3aWR0aCwgRFdPUkQgZHN0d2lkdGgsIGludCBsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbG9ycywgaW50IG5Db2xvcnMsIFhJbWFnZSAqYm1wSW1hZ2UgKQoreworICAgIERXT1JEIHg7CisgICAgaW50IGg7CisgICAgQllURSAqYml0cyA9IHNyY2JpdHMgKyAobGVmdCAqIDQpOworCisgICAgLyogYWxpZ24gdG8gMzIgYml0ICovCisgICAgRFdPUkQgbGluZWJ5dGVzID0gKHNyY3dpZHRoICogNCk7CisKKyAgICBkc3R3aWR0aCArPSBsZWZ0OworCisgICAgaWYgKGxpbmVzID4gMCkgeworICAgICAgIGZvciAoaCA9IGxpbmVzIC0gMTsgaCA+PSAwOyBoLS0pCisgICAgICAgIHsKKyAgICAgICAgICAgZm9yICh4ID0gbGVmdDsgeCA8IGRzdHdpZHRoOyB4KyssIGJpdHMgKz0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDT0xPUlJFRiBwaXhlbCA9IENPTE9SX1RvTG9naWNhbCggWEdldFBpeGVsKCBibXBJbWFnZSwgeCwgaCApICk7CisgICAgICAgICAgICAgICAgYml0c1swXSA9IEdldFJWYWx1ZShwaXhlbCk7CisgICAgICAgICAgICAgICAgYml0c1sxXSA9IEdldEdWYWx1ZShwaXhlbCk7CisgICAgICAgICAgICAgICAgYml0c1syXSA9IEdldEJWYWx1ZShwaXhlbCk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgYml0cyA9IChzcmNiaXRzICs9IGxpbmVieXRlcykgKyAobGVmdCAqIDQpOworICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgIGxpbmVzID0gLWxpbmVzOworICAgICAgIGZvciAoaCA9IDA7IGggPCBsaW5lczsgaCsrKQorICAgICAgICB7CisgICAgICAgICAgIGZvciAoeCA9IGxlZnQ7IHggPCBkc3R3aWR0aDsgeCsrLCBiaXRzICs9IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ09MT1JSRUYgcGl4ZWwgPSBDT0xPUl9Ub0xvZ2ljYWwoIFhHZXRQaXhlbCggYm1wSW1hZ2UsIHgsIGggKSApOworICAgICAgICAgICAgICAgIGJpdHNbMF0gPSBHZXRSVmFsdWUocGl4ZWwpOworICAgICAgICAgICAgICAgIGJpdHNbMV0gPSBHZXRHVmFsdWUocGl4ZWwpOworICAgICAgICAgICAgICAgIGJpdHNbMl0gPSBHZXRCVmFsdWUocGl4ZWwpOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgYml0cyA9IChzcmNiaXRzICs9IGxpbmVieXRlcykgKyAobGVmdCAqIDQpOworICAgICAgIH0KKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRElCX1NldEltYWdlQml0cwogICoKICAqIFRyYW5zZmVyIHRoZSBiaXRzIHRvIGFuIFggaW1hZ2UuCkBAIC04MjUsNyArMTA3NSw4IEBACiAJCQkJCQkgICAgZGVzY3ItPmNvbG9yTWFwLCBkZXNjci0+bkNvbG9yTWFwICkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmKCBkZXNjci0+ZGMtPncuZmxhZ3MgJiBEQ19ESVJUWSApIENMSVBQSU5HX1VwZGF0ZUdDUmVnaW9uKGRlc2NyLT5kYyk7CisgICAgaWYgKCBkZXNjci0+ZGMgJiYgZGVzY3ItPmRjLT53LmZsYWdzICYgRENfRElSVFkgKSAKKyAgICAgICAgQ0xJUFBJTkdfVXBkYXRlR0NSZWdpb24oZGVzY3ItPmRjKTsKIAogICAgICAgLyogVHJhbnNmZXIgdGhlIHBpeGVscyAqLwogICAgIGxpbmVzID0gZGVzY3ItPmxpbmVzOwpAQCAtODc3LDYgKzExMjgsODIgQEAKICAgICByZXR1cm4gbGluZXM7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9HZXRJbWFnZUJpdHMKKyAqCisgKiBUcmFuc2ZlciB0aGUgYml0cyBmcm9tIGFuIFggaW1hZ2UuCisgKiBUaGUgWGxpYiBjcml0aWNhbCBzZWN0aW9uIG11c3QgYmUgZW50ZXJlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IERJQl9HZXRJbWFnZUJpdHMoIGNvbnN0IERJQl9TRVRJTUFHRUJJVFNfREVTQ1IgKmRlc2NyICkKK3sKKyAgICBpbnQgKmNvbG9yTWFwcGluZzsKKyAgICBYSW1hZ2UgKmJtcEltYWdlOworICAgIGludCBsaW5lczsKKworICAgICAgLyogVHJhbnNsYXRlIHRoZSBjb2xvciBtYXBwaW5nIHRhYmxlICovCisKKyAgICBpZiAoZGVzY3ItPmluZm9CcHAgPiA4KSBjb2xvck1hcHBpbmcgPSBOVUxMOworICAgIGVsc2UgaWYgKCEoY29sb3JNYXBwaW5nID0gRElCX1BoeXNpY2FsQ29sb3JNYXAoIGRlc2NyLT5kYywgZGVzY3ItPmRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPmNvbG9yTWFwLCBkZXNjci0+bkNvbG9yTWFwICkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgLyogVHJhbnNmZXIgdGhlIHBpeGVscyAqLworCisgICAgbGluZXMgPSBkZXNjci0+bGluZXM7CisgICAgaWYgKGxpbmVzIDwgMCkgbGluZXMgPSAtbGluZXM7CisgICAgYm1wSW1hZ2UgPSBYR2V0SW1hZ2UoIGRpc3BsYXksIGRlc2NyLT5kcmF3YWJsZSwgZGVzY3ItPnhEZXN0LCBkZXNjci0+eURlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPmhlaWdodCwgQWxsUGxhbmVzLCBaUGl4bWFwICk7CisKKyAgICBzd2l0Y2goZGVzY3ItPmluZm9CcHApCisgICAgeworICAgIGNhc2UgMToKKyAgICAgICAgRklYTUUoYml0bWFwLCAiRGVwdGggMSBub3QgeWV0IHN1cHBvcnRlZCFcbiIpOworICAgICAgIGJyZWFrOworCisgICAgY2FzZSA0OgorICAgICAgIGlmIChkZXNjci0+Y29tcHJlc3Npb24pIEZJWE1FKGJpdG1hcCwgIkNvbXByZXNzaW9uIG5vdCB5ZXQgc3VwcG9ydGVkIVxuIik7CisgICAgICAgZWxzZSBESUJfR2V0SW1hZ2VCaXRzXzQoIGRlc2NyLT5saW5lcywgKExQVk9JRClkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hcHBpbmcsIGRlc2NyLT5uQ29sb3JNYXAsIGJtcEltYWdlICk7CisgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDg6CisgICAgICAgaWYgKGRlc2NyLT5jb21wcmVzc2lvbikgRklYTUUoYml0bWFwLCAiQ29tcHJlc3Npb24gbm90IHlldCBzdXBwb3J0ZWQhXG4iKTsKKyAgICAgICBlbHNlIERJQl9HZXRJbWFnZUJpdHNfOCggZGVzY3ItPmxpbmVzLCAoTFBWT0lEKWRlc2NyLT5iaXRzLCBkZXNjci0+aW5mb1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZywgZGVzY3ItPm5Db2xvck1hcCwgYm1wSW1hZ2UgKTsKKyAgICAgICBicmVhazsKKworICAgIGNhc2UgMTU6CisgICAgY2FzZSAxNjoKKyAgICAgICBESUJfR2V0SW1hZ2VCaXRzXzE2KCBkZXNjci0+bGluZXMsIChMUFZPSUQpZGVzY3ItPmJpdHMsIGRlc2NyLT5pbmZvV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT53aWR0aCwgZGVzY3ItPnhTcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTWFwcGluZywgZGVzY3ItPm5Db2xvck1hcCwgYm1wSW1hZ2UgKTsKKyAgICAgICBicmVhazsKKworICAgIGNhc2UgMjQ6CisgICAgICAgRElCX0dldEltYWdlQml0c18yNCggZGVzY3ItPmxpbmVzLCAoTFBWT0lEKWRlc2NyLT5iaXRzLCBkZXNjci0+aW5mb1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+d2lkdGgsIGRlc2NyLT54U3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hcHBpbmcsIGRlc2NyLT5uQ29sb3JNYXAsIGJtcEltYWdlICk7CisgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDMyOgorICAgICAgIERJQl9HZXRJbWFnZUJpdHNfMzIoIGRlc2NyLT5saW5lcywgKExQVk9JRClkZXNjci0+Yml0cywgZGVzY3ItPmluZm9XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPndpZHRoLCBkZXNjci0+eFNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXBwaW5nLCBkZXNjci0+bkNvbG9yTWFwLCBibXBJbWFnZSApOworICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgV0FSTihiaXRtYXAsICIoJWQpOiBJbnZhbGlkIGRlcHRoXG4iLCBkZXNjci0+aW5mb0JwcCApOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoY29sb3JNYXBwaW5nKSBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgY29sb3JNYXBwaW5nICk7CisKKyAgICBYRGVzdHJveUltYWdlKCBibXBJbWFnZSApOworICAgIHJldHVybiBsaW5lczsKK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBTdHJldGNoRElCaXRzMTYgICAoR0RJLjQzOSkKQEAgLTE0OTEsNiArMTgxOCwxOTUgQEAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBCSVRNQVBPQkogKmJtcCwgRFdPUkQgbmV3X3Byb3QgKQoreworICAgIERJQlNFQ1RJT04gKmRpYiA9IGJtcC0+ZGliU2VjdGlvbjsKKyAgICBJTlQzMiBlZmZIZWlnaHQgPSBkaWItPmRzQm0uYm1IZWlnaHQgPj0gMD8gZGliLT5kc0JtLmJtSGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1kaWItPmRzQm0uYm1IZWlnaHQ7CisgICAgSU5UMzIgdG90YWxTaXplID0gZGliLT5kc0JtaWguYmlTaXplSW1hZ2U/IGRpYi0+ZHNCbWloLmJpU2l6ZUltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaWItPmRzQm0uYm1XaWR0aEJ5dGVzICogZWZmSGVpZ2h0OworICAgIERXT1JEIG9sZF9wcm90OworCisgICAgVmlydHVhbFByb3RlY3QoZGliLT5kc0JtLmJtQml0cywgdG90YWxTaXplLCBuZXdfcHJvdCwgJm9sZF9wcm90KTsKKyAgICBUUkFDRShiaXRtYXAsICJDaGFuZ2VkIHByb3RlY3Rpb24gZnJvbSAlbGQgdG8gJWxkXG4iLCAKKyAgICAgICAgICAgICAgICAgIG9sZF9wcm90LCBuZXdfcHJvdCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9Eb1VwZGF0ZURJQlNlY3Rpb24KKyAqLworc3RhdGljIHZvaWQgRElCX0RvVXBkYXRlRElCU2VjdGlvbiggQklUTUFQT0JKICpibXAsIEJPT0wzMiB0b0RJQiApCit7CisgICAgRElCU0VDVElPTiAqZGliID0gYm1wLT5kaWJTZWN0aW9uOworICAgIERJQl9TRVRJTUFHRUJJVFNfREVTQ1IgZGVzY3I7CisKKyAgICBpZiAoRElCX0dldEJpdG1hcEluZm8oICZkaWItPmRzQm1paCwgJmRlc2NyLmluZm9XaWR0aCwgJmRlc2NyLmxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2NyLmluZm9CcHAsICZkZXNjci5jb21wcmVzc2lvbiApID09IC0xKQorCXJldHVybjsKKworICAgIGRlc2NyLmRjICAgICAgICA9IE5VTEw7CisgICAgZGVzY3IuY29sb3JNYXAgID0gYm1wLT5jb2xvck1hcDsKKyAgICBkZXNjci5uQ29sb3JNYXAgPSBibXAtPm5Db2xvck1hcDsKKyAgICBkZXNjci5iaXRzICAgICAgPSBkaWItPmRzQm0uYm1CaXRzOworICAgIGRlc2NyLmRlcHRoICAgICA9IGJtcC0+Yml0bWFwLmJtQml0c1BpeGVsOworICAgIGRlc2NyLmRyYXdhYmxlICA9IGJtcC0+cGl4bWFwOworICAgIGRlc2NyLmdjICAgICAgICA9IEJJVE1BUF9HQyhibXApOworICAgIGRlc2NyLnhTcmMgICAgICA9IDA7CisgICAgZGVzY3IueVNyYyAgICAgID0gMDsKKyAgICBkZXNjci54RGVzdCAgICAgPSAwOworICAgIGRlc2NyLnlEZXN0ICAgICA9IDA7CisgICAgZGVzY3Iud2lkdGggICAgID0gYm1wLT5iaXRtYXAuYm1XaWR0aDsKKyAgICBkZXNjci5oZWlnaHQgICAgPSBibXAtPmJpdG1hcC5ibUhlaWdodDsKKworICAgIGlmICh0b0RJQikKKyAgICB7CisgICAgICAgIFRSQUNFKGJpdG1hcCwgIkNvcHlpbmcgZnJvbSBQaXhtYXAgdG8gRElCIGJpdHNcbiIpOworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICAgICAgICBDQUxMX0xBUkdFX1NUQUNLKCBESUJfR2V0SW1hZ2VCaXRzLCAmZGVzY3IgKTsKKyAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlUUkFDRShiaXRtYXAsICJDb3B5aW5nIGZyb20gRElCIGJpdHMgdG8gUGl4bWFwXG4iKTsgCisgICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgICAgICAgIENBTExfTEFSR0VfU1RBQ0soIERJQl9TZXRJbWFnZUJpdHMsICZkZXNjciApOworICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRElCX0ZhdWx0SGFuZGxlcgorICovCitzdGF0aWMgQk9PTDMyIERJQl9GYXVsdEhhbmRsZXIoIExQVk9JRCByZXMsIExQVk9JRCBhZGRyICkKK3sKKyAgICBCT09MMzIgaGFuZGxlZCA9IEZBTFNFOworICAgIEJJVE1BUE9CSiAqYm1wOworCisgICAgYm1wID0gKEJJVE1BUE9CSiAqKUdESV9HZXRPYmpQdHIoIChIQklUTUFQMzIpcmVzLCBCSVRNQVBfTUFHSUMgKTsKKyAgICBpZiAoIWJtcCkgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKGJtcC0+ZGliU2VjdGlvbikKKyAgICAgICAgc3dpdGNoIChibXAtPnN0YXR1cykKKyAgICAgICAgeworICAgICAgICBjYXNlIERJQl9HZGlNb2Q6CisgICAgICAgICAgICBUUkFDRSggYml0bWFwLCAiY2FsbGVkIGluIHN0YXR1cyBESUJfR2RpTW9kXG4iICk7CisgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX1JFQURXUklURSApOworICAgICAgICAgICAgRElCX0RvVXBkYXRlRElCU2VjdGlvbiggYm1wLCBUUlVFICk7CisgICAgICAgICAgICBESUJfRG9Qcm90ZWN0RElCU2VjdGlvbiggYm1wLCBQQUdFX1JFQURPTkxZICk7CisgICAgICAgICAgICBibXAtPnN0YXR1cyA9IERJQl9JblN5bmM7CisgICAgICAgICAgICBoYW5kbGVkID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRElCX0luU3luYzoKKyAgICAgICAgICAgIFRSQUNFKCBiaXRtYXAsICJjYWxsZWQgaW4gc3RhdHVzIERJQl9JblN5bmNcbiIgKTsKKyAgICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBibXAsIFBBR0VfUkVBRFdSSVRFICk7CisgICAgICAgICAgICBibXAtPnN0YXR1cyA9IERJQl9BcHBNb2Q7CisgICAgICAgICAgICBoYW5kbGVkID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRElCX0FwcE1vZDoKKyAgICAgICAgICAgIEZJWE1FKCBiaXRtYXAsICJjYWxsZWQgaW4gc3RhdHVzIERJQl9BcHBNb2Q6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGNhbid0IGhhcHBlbiFcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRElCX05vSGFuZGxlcjoKKyAgICAgICAgICAgIEZJWE1FKCBiaXRtYXAsICJjYWxsZWQgaW4gc3RhdHVzIERJQl9Ob0hhbmRsZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGNhbid0IGhhcHBlbiFcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBHRElfSEVBUF9VTkxPQ0soIChIQklUTUFQMzIpcmVzICk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIERJQl9VcGRhdGVESUJTZWN0aW9uCisgKi8KK3ZvaWQgRElCX1VwZGF0ZURJQlNlY3Rpb24oIERDICpkYywgQk9PTDMyIHRvRElCICkKK3sKKyAgICBCSVRNQVBPQkogKmJtcDsKKworICAgIC8qIEVuc3VyZSB0aGlzIGlzIGEgQ29tcGF0aWJsZSBEQyB0aGF0IGhhcyBhIERJQiBzZWN0aW9uIHNlbGVjdGVkICovCisKKyAgICBpZiAoIWRjKSByZXR1cm47CisgICAgaWYgKCEoZGMtPncuZmxhZ3MgJiBEQ19NRU1PUlkpKSByZXR1cm47CisKKyAgICBibXAgPSAoQklUTUFQT0JKICopR0RJX0dldE9ialB0ciggZGMtPncuaEJpdG1hcCwgQklUTUFQX01BR0lDICk7CisgICAgaWYgKCFibXApIHJldHVybjsKKworICAgIGlmICghYm1wLT5kaWJTZWN0aW9uKQorICAgIHsKKwlHRElfSEVBUF9VTkxPQ0soZGMtPncuaEJpdG1hcCk7CisJcmV0dXJuOworICAgIH0KKworCisgICAgaWYgKCF0b0RJQikKKyAgICB7CisgICAgICAgIC8qIFByZXBhcmUgZm9yIGFjY2VzcyB0byB0aGUgRElCIGJ5IEdESSBmdW5jdGlvbnMgKi8KKworICAgICAgICBzd2l0Y2ggKGJtcC0+c3RhdHVzKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgRElCX05vSGFuZGxlcjoKKyAgICAgICAgICAgIERJQl9Eb1VwZGF0ZURJQlNlY3Rpb24oIGJtcCwgRkFMU0UgKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRElCX0dkaU1vZDoKKyAgICAgICAgICAgIFRSQUNFKCBiaXRtYXAsICJmcm9tRElCIGNhbGxlZCBpbiBzdGF0dXMgRElCX0dkaU1vZFxuIiApOworICAgICAgICAgICAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBESUJfSW5TeW5jOgorICAgICAgICAgICAgVFJBQ0UoIGJpdG1hcCwgImZyb21ESUIgY2FsbGVkIGluIHN0YXR1cyBESUJfSW5TeW5jXG4iICk7CisgICAgICAgICAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERJQl9BcHBNb2Q6CisgICAgICAgICAgICBUUkFDRSggYml0bWFwLCAiZnJvbURJQiBjYWxsZWQgaW4gc3RhdHVzIERJQl9BcHBNb2RcbiIgKTsKKyAgICAgICAgICAgIERJQl9Eb1VwZGF0ZURJQlNlY3Rpb24oIGJtcCwgRkFMU0UgKTsKKyAgICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBibXAsIFBBR0VfUkVBRE9OTFkgKTsKKyAgICAgICAgICAgIGJtcC0+c3RhdHVzID0gRElCX0luU3luYzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIEFja25vd2xlZGdlIHdyaXRlIGFjY2VzcyB0byB0aGUgRElCIGJ5IEdESSBmdW5jdGlvbnMgKi8KKworICAgICAgICBzd2l0Y2ggKGJtcC0+c3RhdHVzKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgRElCX05vSGFuZGxlcjoKKyAgICAgICAgICAgIERJQl9Eb1VwZGF0ZURJQlNlY3Rpb24oIGJtcCwgVFJVRSApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBESUJfR2RpTW9kOgorICAgICAgICAgICAgVFJBQ0UoIGJpdG1hcCwgIiAgdG9ESUIgY2FsbGVkIGluIHN0YXR1cyBESUJfR2RpTW9kXG4iICk7CisgICAgICAgICAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERJQl9JblN5bmM6CisgICAgICAgICAgICBUUkFDRSggYml0bWFwLCAiICB0b0RJQiBjYWxsZWQgaW4gc3RhdHVzIERJQl9JblN5bmNcbiIgKTsKKyAgICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBibXAsIFBBR0VfTk9BQ0NFU1MgKTsKKyAgICAgICAgICAgIGJtcC0+c3RhdHVzID0gRElCX0dkaU1vZDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRElCX0FwcE1vZDoKKyAgICAgICAgICAgIEZJWE1FKCBiaXRtYXAsICIgIHRvRElCIGNhbGxlZCBpbiBzdGF0dXMgRElCX0FwcE1vZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgY2FuJ3QgaGFwcGVuIVxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgCisgICAgR0RJX0hFQVBfVU5MT0NLKGRjLT53LmhCaXRtYXApOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVESUJTZWN0aW9uMTYgICAgKEdESS40ODkpCiAgKi8KQEAgLTE1MTYsNiArMjAzMiw3IEBACiAKICAgICAvKiBGaWxsIEJJVE1BUDMyIHN0cnVjdHVyZSB3aXRoIERJQiBkYXRhICovCiAgICAgQklUTUFQSU5GT0hFQURFUiAqYmkgPSAmYm1pLT5ibWlIZWFkZXI7CisgICAgSU5UMzIgZWZmSGVpZ2h0LCB0b3RhbFNpemU7CiAgICAgQklUTUFQMzIgYm07CiAKICAgICBUUkFDRShiaXRtYXAsICJmb3JtYXQgKCVsZCwlbGQpLCBwbGFuZXMgJWQsIGJwcCAlZCwgc2l6ZSAlbGQsIGNvbG9ycyAlbGQgKCVzKVxuIiwKQEAgLTE1MzcsMTUgKzIwNTQsMTUgQEAKICAgICBibS5ibUJpdHMgPSBOVUxMOwogCiAgICAgLyogR2V0IHN0b3JhZ2UgbG9jYXRpb24gZm9yIERJQiBiaXRzICovCi0gICAgaWYgKHNlY3Rpb24pCi0JRklYTUUoYml0bWFwLCAic2VjdGlvbiAhPSBOVUxMIG5vdCBpbXBsZW1lbnRlZCFcbiIpOwkKLSAgICBlbHNlCi0gICAgewotCUlOVDMyIHRvdGFsU2l6ZSA9IGJpLT5iaVNpemVJbWFnZT8gYmktPmJpU2l6ZUltYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYm0uYm1XaWR0aEJ5dGVzICogYm0uYm1IZWlnaHQ7CisgICAgZWZmSGVpZ2h0ID0gYm0uYm1IZWlnaHQgPj0gMCA/IGJtLmJtSGVpZ2h0IDogLWJtLmJtSGVpZ2h0OworICAgIHRvdGFsU2l6ZSA9IGJpLT5iaVNpemVJbWFnZT8gYmktPmJpU2l6ZUltYWdlIDogYm0uYm1XaWR0aEJ5dGVzICogZWZmSGVpZ2h0OwogCi0JYm0uYm1CaXRzID0gSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIEhFQVBfWkVST19NRU1PUlksIHRvdGFsU2l6ZSk7Ci0gICAgfQorICAgIGlmIChzZWN0aW9uKQorICAgICAgICBibS5ibUJpdHMgPSBNYXBWaWV3T2ZGaWxlKHNlY3Rpb24sIEZJTEVfTUFQX0FMTF9BQ0NFU1MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBMLCBvZmZzZXQsIHRvdGFsU2l6ZSk7CisgICAgZWxzZQorCWJtLmJtQml0cyA9IFZpcnR1YWxBbGxvYyhOVUxMLCB0b3RhbFNpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOwogCiAgICAgLyogQWxsb2NhdGUgTWVtb3J5IGZvciBESUIgYW5kIGZpbGwgc3RydWN0dXJlICovCiAgICAgaWYgKGJtLmJtQml0cykKQEAgLTE1ODcsOTQgKzIxMDQsMzUgQEAKIAkgICAgYm1wLT5kaWJTZWN0aW9uID0gZGliOwogICAgICAgICAgICAgYm1wLT5jb2xvck1hcCAgID0gY29sb3JNYXA7CiAJICAgIGJtcC0+bkNvbG9yTWFwICA9IG5Db2xvck1hcDsKLQkgICAgR0RJX0hFQVBfVU5MT0NLKHJlcyk7CisgICAgICAgICAgICBibXAtPnN0YXR1cyAgICAgPSBESUJfTm9IYW5kbGVyOwogICAgICAgIH0KICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCBpbiBjYXNlIG9mIGVycm9ycyAqLwogICAgIGlmICghcmVzIHx8ICFibXAgfHwgIWRpYiB8fCAhYm0uYm1CaXRzIHx8IChibS5ibUJpdHNQaXhlbCA8PSA4ICYmICFjb2xvck1hcCkpCiAgICAgewotCWlmIChibS5ibUJpdHMgJiYgc2VjdGlvbikgCi0JICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGJtLmJtQml0cyksIGJtLmJtQml0cyA9IE5VTEw7CisJaWYgKGJtLmJtQml0cykKKyAgICAgICAgICAgIGlmIChzZWN0aW9uKQorICAgICAgICAgICAgICAgIFVubWFwVmlld09mRmlsZShibS5ibUJpdHMpLCBibS5ibUJpdHMgPSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFZpcnR1YWxGcmVlKGJtLmJtQml0cywgTUVNX1JFTEVBU0UsIDBMKSwgYm0uYm1CaXRzID0gTlVMTDsKIAogCWlmIChjb2xvck1hcCkgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgY29sb3JNYXApLCBjb2xvck1hcCA9IE5VTEw7CiAJaWYgKGRpYikgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgZGliKSwgZGliID0gTlVMTDsKIAlpZiAocmVzKSBEZWxldGVPYmplY3QzMihyZXMpLCByZXMgPSAwOwogICAgIH0KIAorICAgIC8qIEluc3RhbGwgZmF1bHQgaGFuZGxlciwgaWYgcG9zc2libGUgKi8KKyAgICBpZiAoYm0uYm1CaXRzKQorICAgICAgICBpZiAoVklSVFVBTF9TZXRGYXVsdEhhbmRsZXIoYm0uYm1CaXRzLCBESUJfRmF1bHRIYW5kbGVyLCAoTFBWT0lEKXJlcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIERJQl9Eb1Byb3RlY3RESUJTZWN0aW9uKCBibXAsIFBBR0VfUkVBRE9OTFkgKTsKKyAgICAgICAgICAgIGJtcC0+c3RhdHVzID0gRElCX0luU3luYzsKKyAgICAgICAgfQorCiAgICAgLyogUmV0dXJuIEJJVE1BUCBoYW5kbGUgYW5kIHN0b3JhZ2UgbG9jYXRpb24gKi8KKyAgICBpZiAocmVzKSBHRElfSEVBUF9VTkxPQ0socmVzKTsKICAgICBpZiAoYm0uYm1CaXRzICYmIGJpdHMpICpiaXRzID0gYm0uYm1CaXRzOwogICAgIHJldHVybiByZXM7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIERJQl9VcGRhdGVESUJTZWN0aW9uCi0gKi8KLXZvaWQgRElCX1VwZGF0ZURJQlNlY3Rpb24oIERDICpkYywgQk9PTDMyIHRvRElCICkKLXsKLSAgICBCSVRNQVBPQkogKmJtcDsKLSAgICBESUJTRUNUSU9OICpkaWI7Ci0KLSAgICAvKiBFbnN1cmUgdGhpcyBpcyBhIENvbXBhdGlibGUgREMgdGhhdCBoYXMgYSBESUIgc2VjdGlvbiBzZWxlY3RlZCAqLwotCi0gICAgaWYgKCFkYykgcmV0dXJuOwotICAgIGlmICghKGRjLT53LmZsYWdzICYgRENfTUVNT1JZKSkgcmV0dXJuOwotCi0gICAgYm1wID0gKEJJVE1BUE9CSiAqKUdESV9HZXRPYmpQdHIoIGRjLT53LmhCaXRtYXAsIEJJVE1BUF9NQUdJQyApOwotICAgIGlmICghYm1wKSByZXR1cm47Ci0KLSAgICBkaWIgPSBibXAtPmRpYlNlY3Rpb247Ci0gICAgaWYgKCFkaWIpCi0gICAgewotCUdESV9IRUFQX1VOTE9DSyhkYy0+dy5oQml0bWFwKTsKLQlyZXR1cm47Ci0gICAgfQotCi0gIAotICAgIC8qIENvcHkgUGl4bWFwIHRvIGJpdHMgKi8KLSAgICBpZiAodG9ESUIpCi0gICAgewotICAgICAgICAvKiBFeHBlY3QgY29sb3VyIGNvcnJ1cHRpb24gaWYgeW91IHVuY29tbWVudCB0aGlzLiAtTUYgKi8KLS8vICAgICAgICBCSVRNQVBJTkZPIGJpOwotLy8gICAgICAgIGJpLmJtaUhlYWRlciA9IGRpYi0+ZHNCbWloOwotLy8gICAgICAgIGJpLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOyAvKiBkb24ndCBjb3B5IHBhbGV0dGUgKi8KLS8vICAgICAgICBUUkFDRShiaXRtYXAsICJDb3B5aW5nIGZyb20gUGl4bWFwIHRvIERJQiBiaXRzXG4iKTsKLS8vICAgICAgICBHZXRESUJpdHMzMiggZGMtPmhTZWxmLCBkYy0+dy5oQml0bWFwLCAwLCBkaWItPmRzQm1paC5iaUhlaWdodCwKLS8vICAgICAgICAgICAgICAgICAgICAgZGliLT5kc0JtLmJtQml0cywgJmJpLCAwICk7Ci0gICAgfQotCi0gICAgLyogQ29weSBiaXRzIHRvIFBpeG1hcCAqLwotICAgIGVsc2UKLSAgICB7Ci0gICAgCURJQl9TRVRJTUFHRUJJVFNfREVTQ1IgZGVzY3I7Ci0KLQlUUkFDRShiaXRtYXAsICJDb3B5aW5nIGZyb20gRElCIGJpdHMgdG8gUGl4bWFwXG4iKTsgCi0JaWYgKERJQl9HZXRCaXRtYXBJbmZvKCAmZGliLT5kc0JtaWgsICZkZXNjci5pbmZvV2lkdGgsICZkZXNjci5saW5lcywKLQkJCSAgICAgICAmZGVzY3IuaW5mb0JwcCwgJmRlc2NyLmNvbXByZXNzaW9uICkgPT0gLTEpCi0JewotCSAgICBHRElfSEVBUF9VTkxPQ0soZGMtPncuaEJpdG1hcCk7Ci0JICAgIHJldHVybjsKLQl9Ci0KLSAgICAgICAgZGVzY3IuZGMgICAgICAgID0gZGM7Ci0gICAgICAgIGRlc2NyLmNvbG9yTWFwICA9IGJtcC0+Y29sb3JNYXA7Ci0gICAgICAgIGRlc2NyLm5Db2xvck1hcCA9IGJtcC0+bkNvbG9yTWFwOwotICAgICAgICBkZXNjci5iaXRzICAgICAgPSBkaWItPmRzQm0uYm1CaXRzOwotICAgICAgICBkZXNjci5kZXB0aCAgICAgPSBibXAtPmJpdG1hcC5ibUJpdHNQaXhlbDsKLSAgICAgICAgZGVzY3IuZHJhd2FibGUgID0gYm1wLT5waXhtYXA7Ci0gICAgICAgIGRlc2NyLmdjICAgICAgICA9IEJJVE1BUF9HQyhibXApOwotICAgICAgICBkZXNjci54U3JjICAgICAgPSAwOwotICAgICAgICBkZXNjci55U3JjICAgICAgPSAwOwotICAgICAgICBkZXNjci54RGVzdCAgICAgPSAwOwotICAgICAgICBkZXNjci55RGVzdCAgICAgPSAwOwotICAgICAgICBkZXNjci53aWR0aCAgICAgPSBibXAtPmJpdG1hcC5ibVdpZHRoOwotICAgICAgICBkZXNjci5oZWlnaHQgICAgPSBibXAtPmJpdG1hcC5ibUhlaWdodDsKLQotICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOwotICAgICAgICBDQUxMX0xBUkdFX1NUQUNLKCBESUJfU2V0SW1hZ2VCaXRzLCAmZGVzY3IgKTsKLSAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKLSAgICB9Ci0KLSAgICBHRElfSEVBUF9VTkxPQ0soZGMtPncuaEJpdG1hcCk7Ci19Ci0KZGlmZiAtLWdpdCBhL29iamVjdHMvZ2Rpb2JqLmMgYi9vYmplY3RzL2dkaW9iai5jCmluZGV4IDIyYzg3MjIuLmMzZGVkMzQgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZ2Rpb2JqLmMKKysrIGIvb2JqZWN0cy9nZGlvYmouYwpAQCAtMjQ2LDIxICsyNDYsMjAgQEAKIAogICAgIERJQl9Jbml0KCk7CS8qIGFsd2F5cyBiZWZvcmUgWDExRFJWX0luaXQoKSAqLwogCi0gICAgaWYoIFgxMURSVl9Jbml0KCkgKQotICAgIHsKKyAgICBpZiggISBYMTFEUlZfSW5pdCgpICkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCiAJLyogQ3JlYXRlIGRlZmF1bHQgcGFsZXR0ZSAqLwogCiAgICAgICAvKiBEUiB3ZWxsICp0aGlzKiBwYWxldHRlIGNhbid0IGJlIG1vdmVhYmxlICg/KSAqLwotCi0JSFBBTEVUVEUxNiBocGFsZXR0ZSA9IFBBTEVUVEVfSW5pdCgpOwotCi0JaWYoIGhwYWxldHRlICkKLQl7Ci0JICAgIFN0b2NrT2JqZWN0c1tERUZBVUxUX1BBTEVUVEVdID0gKEdESU9CSkhEUiAqKUdESV9IRUFQX0xPQ0soIGhwYWxldHRlICk7Ci0JICAgIHJldHVybiBUUlVFOwotCX0KKyAgICB7CisgICAgSFBBTEVUVEUxNiBocGFsZXR0ZSA9IFBBTEVUVEVfSW5pdCgpOworICAgIGlmKCAhaHBhbGV0dGUgKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgU3RvY2tPYmplY3RzW0RFRkFVTFRfUEFMRVRURV0gPSAoR0RJT0JKSERSICopR0RJX0hFQVBfTE9DSyggaHBhbGV0dGUgKTsKICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvb2JqZWN0cy9vZW1iaXRtYXAuYyBiL29iamVjdHMvb2VtYml0bWFwLmMKaW5kZXggOGRiZDI1Zi4uY2M0ZDE5MSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9vZW1iaXRtYXAuYworKysgYi9vYmplY3RzL29lbWJpdG1hcC5jCkBAIC0zNDAsNiArMzQwLDcgQEAKICAgICBibXBPYmpQdHItPmRpYlNlY3Rpb24gICAgICAgICAgPSBOVUxMOwogICAgIGJtcE9ialB0ci0+Y29sb3JNYXAgICAgICAgICAgICA9IE5VTEw7CiAgICAgYm1wT2JqUHRyLT5uQ29sb3JNYXAgICAgICAgICAgID0gMDsKKyAgICBibXBPYmpQdHItPnN0YXR1cyAgICAgICAgICAgICAgPSBESUJfTm9IYW5kbGVyOwogCiAgICAgR0RJX0hFQVBfVU5MT0NLKCBoYml0bWFwICk7CiAgICAgcmV0dXJuIGhiaXRtYXA7CmRpZmYgLS1naXQgYS9vbGUvZm9sZGVycy5jIGIvb2xlL2ZvbGRlcnMuYwppbmRleCBhOWZjNzE3Li4xYzM3ODEyIDEwMDY0NAotLS0gYS9vbGUvZm9sZGVycy5jCisrKyBiL29sZS9mb2xkZXJzLmMKQEAgLTIsNiArMiw5IEBACiAgKglTaGVsbCBGb2xkZXIgc3R1ZmYKICAqCiAgKglDb3B5cmlnaHQgMTk5NwlNYXJjdXMgTWVpc3NuZXIKKyAqCisgKiAgY3VycmVudGx5IHdvcmsgaW4gcHJvZ3Jlc3Mgb24gSVNoZWxsRm9sZGVycyxJRW51bUlETGlzdCBhbmQgcGlkbCBoYW5kbGluZworICogIDxjb250YWN0IGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZSwgOTgwNjI0PgogICovCiAKICNpbmNsdWRlIDxjdHlwZS5oPgpAQCAtMTMsNiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBvYmouaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAic2hsb2JqLmgiCisjaW5jbHVkZSAid2luZXJyb3IuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSUVudW1JRExpc3QgaW1wbGVtZW50YXRpb24KQEAgLTY2LDcgKzcwLDcgQEAKICAqIElTaGVsbEZvbGRlciBpbXBsZW1lbnRhdGlvbgogICovCiBzdGF0aWMgVUxPTkcgV0lOQVBJIElTaGVsbEZvbGRlcl9SZWxlYXNlKExQU0hFTExGT0xERVIgdGhpcykgewotCVRSQUNFKG9sZSwiKCVwKS0+KClcbiIsdGhpcyk7CisJVFJBQ0Uob2xlLCIoJXApLT4oY291bnQ9JWx1KVxuIix0aGlzLHRoaXMtPnJlZik7CiAJaWYgKCEtLSh0aGlzLT5yZWYpKSB7CiAJCVdBUk4ob2xlLCIgZnJlZWluZyBJU2hlbGxGb2xkZXIoJXApXG4iLHRoaXMpOwogCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcyk7CkBAIC03Niw0MyArODAsNjUgQEAKIH0KIAogc3RhdGljIFVMT05HIFdJTkFQSSBJU2hlbGxGb2xkZXJfQWRkUmVmKExQU0hFTExGT0xERVIgdGhpcykgewotCVRSQUNFKG9sZSwiKCVwKS0+KClcbiIsdGhpcyk7CisJVFJBQ0Uob2xlLCIoJXApLT4oY291bnQ9JWx1KVxuIix0aGlzLCh0aGlzLT5yZWYpKzEpOwogCXJldHVybiArKyh0aGlzLT5yZWYpOwogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0dldEF0dHJpYnV0ZXNPZigKIAlMUFNIRUxMRk9MREVSIHRoaXMsVUlOVDMyIGNpZGwsTFBDSVRFTUlETElTVCAqYXBpZGwsRFdPUkQgKnJnZkluT3V0CiApIHsKLQlGSVhNRShvbGUsIiglcCktPiglZCwlcCwlcCksc3R1YiFcbiIsCi0JCXRoaXMsY2lkbCxhcGlkbCxyZ2ZJbk91dAorCUZJWE1FKG9sZSwiXG4JKCVwKS0+KCVkLCVwLT4oJXApLCVwKSxzdHViIVxuIiwKKwkJdGhpcyxjaWRsLGFwaWRsLCphcGlkbCxyZ2ZJbk91dAogCSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIEVfTk9USU1QTDsKIH0KIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyEJCUlTaGVsbEZvbGRlcl9CaW5kVG9PYmplY3QKKyEKKyovCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0JpbmRUb09iamVjdCgKLQlMUFNIRUxMRk9MREVSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsLExQQkMgcGJjUmVzZXJ2ZWQsUkVGSUlEIHJpaWQsTFBWT0lEICogcHB2T3V0Ci0pIHsKLQljaGFyCXhjbHNpZFs1MF07CisJTFBTSEVMTEZPTERFUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCxMUEJDIHBiY1Jlc2VydmVkLAorCVJFRklJRCByaWlkLExQVk9JRCAqIHBwdk91dCkKKyAgewljaGFyCXhjbHNpZFs1MF07CiAKLQlXSU5FX1N0cmluZ0Zyb21DTFNJRChyaWlkLHhjbHNpZCk7Ci0JRklYTUUob2xlLCIoJXApLT4oJXAsJXAsJXMsJXApLHN0dWIhXG4iLAotCQl0aGlzLHBpZGwscGJjUmVzZXJ2ZWQseGNsc2lkLHBwdk91dAotCSk7Ci0JKnBwdk91dCA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcigpOwotCXJldHVybiAwOworCQlXSU5FX1N0cmluZ0Zyb21DTFNJRChyaWlkLHhjbHNpZCk7CisKKwkJRklYTUUob2xlLCIoJXApLT4ocGlkbDolcCwlcCwlcywlcCksc3R1YiFcbiIsdGhpcyxwaWRsLHBiY1Jlc2VydmVkLHhjbHNpZCxwcHZPdXQpOworCQkqcHB2T3V0ID0gSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKCk7CisKKwkJcmV0dXJuIEVfTk9USU1QTDsKIH0KLQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyEJCUlTaGVsbEZvbGRlcl9QYXJzZURpc3BsYXlOYW1lCishCisqLwogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9QYXJzZURpc3BsYXlOYW1lKAogCUxQU0hFTExGT0xERVIgdGhpcyxIV05EMzIgaHduZE93bmVyLExQQkMgcGJjUmVzZXJ2ZWQsCiAJTFBPTEVTVFIzMiBscHN6RGlzcGxheU5hbWUsRFdPUkQgKnBjaEVhdGVuLExQSVRFTUlETElTVCAqcHBpZGwsCiAJRFdPUkQgKnBkd0F0dHJpYnV0ZXMKLSkgewotCUZJWE1FKG9sZSwiKCVwKS0+KCUwOHgsJXAsJXAsJXAsJXAsJXApLHN0dWIhXG4iLAotCQl0aGlzLGh3bmRPd25lcixwYmNSZXNlcnZlZCxscHN6RGlzcGxheU5hbWUscGNoRWF0ZW4scHBpZGwscGR3QXR0cmlidXRlcworKSB7CVRSQUNFKG9sZSwiKCVwKS0+KCUwOHgsJXAsJXA9JXMsJXAsJXAsJXApXG4iLAorCQl0aGlzLGh3bmRPd25lcixwYmNSZXNlcnZlZCxscHN6RGlzcGxheU5hbWUsZGVidWdzdHJfdyhscHN6RGlzcGxheU5hbWUpLHBjaEVhdGVuLHBwaWRsLHBkd0F0dHJpYnV0ZXMKIAkpOwotCWlmIChwYmNSZXNlcnZlZCkKLQkJKihEV09SRCopcGJjUmVzZXJ2ZWQgPSAwOwotCXJldHVybiAwOworLy8JaWYgKHBiY1Jlc2VydmVkKQorLy8JCSooRFdPUkQqKXBiY1Jlc2VydmVkID0gMDsKKworCSpwcGlkbCA9IChMUElURU1JRExJU1QpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxzaXplb2YoSVRFTUlETElTVCkpOworCSgqcHBpZGwpLT5ta2lkLmNiID0gMHgwOwkJLyp0aGUgZmlyc3QgSVRFTUlETElTVCovCisJKCpwcGlkbCktPm1raWQuYWJJRFswXSA9IDB4MDsJCS8qdGhlIGZpcnN0IElURU1JRExJU1QqLworCisvLwkoKExQSVRFTUlETElTVCkgKCgoTFBCWVRFKXBwaWRsKSs0KSApLT5ta2lkLmNiPTA7IC8qdGhlIHNlY29uZCBJVEVNSURMSVNUKi8KKy8vCSgoTFBJVEVNSURMSVNUKSAoKChMUEJZVEUpcHBpZGwpKzQpICktPm1raWQuYWJJRFswXT0wOyAvKnRoZSBzZWNvbmQgSVRFTUlETElTVCovCisJRklYTUUoc2hlbGwsICJyZXR1cm4gZHVtbXkgSVRFTUlETElTVCBvbmx5IChwaWRsICVwKVxuIiwqcHBpZGwpOworIAorCS8qIGl0IGlzIE5VTEwgaWYgdGhlIGNhbGxlciBkb24ndCByZXF1ZXN0IGF0dHJpYnV0ZXMqLworCWlmIChwZHdBdHRyaWJ1dGVzKQorCXsJKnBkd0F0dHJpYnV0ZXM9U0ZHQU9fRk9MREVSOworCX0KKworCS8vKnBjaEVhdGVuID0gbHN0cmxlbjMyVyhscHN6RGlzcGxheU5hbWUpOyAJCS8qIG51bWJlciBvZiBjaGFyJ3MgcGFyc2VkKi8KKwkvL1RSQUNFKHNoZWxsLCIlMSBjaGFycyBwYXJzZWQiLCpwY2hFYXRlbikKKwlyZXR1cm4gTk9FUlJPUjsKIH0KIAogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElTaGVsbEZvbGRlcl9FbnVtT2JqZWN0cygKQEAgLTE1OCwxMCArMTg0LDEwIEBACiAKIExQU0hFTExGT0xERVIgSVNoZWxsRm9sZGVyX0NvbnN0cnVjdG9yKCkgewogCUxQU0hFTExGT0xERVIJc2Y7Ci0KIAlzZiA9IChMUFNIRUxMRk9MREVSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKElTaGVsbEZvbGRlcikpOwogCXNmLT5yZWYJCT0gMTsKIAlzZi0+bHB2dGJsCT0gJnNmdnQ7CisJVFJBQ0Uob2xlLCIoJXApLT4oKVxuIixzZik7CiAJcmV0dXJuIHNmOwogfQogCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Fmay5ubHMgYi9vbGUvbmxzL2Fmay5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5NGY1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Fmay5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQWZyaWthYW5zIChTb3V0aCBBZnJpY2EpCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJhZmsiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2JlbC5ubHMgYi9vbGUvbmxzL2JlbC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1ZWRjYgotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYmVsLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBCZWxhcnVzaWFuCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJiZWwiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Jnci5ubHMgYi9vbGUvbmxzL2Jnci5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyM2NhYwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvYmdyLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBCdWxnYXJpYQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQnVsZ2FyaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJiZ3IiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiYmdyIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9jYXQubmxzIGIvb2xlL25scy9jYXQubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjZhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2NhdC5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQ2F0YWxhbgorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNwIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiY2F0IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJQdHMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9jemUubmxzIGIvb2xlL25scy9jemUubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjM2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2N6ZS5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkN6ZWNoIFJlcHVibGljIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJjemUiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIj96ZWNoIHJlcHVibGlrYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiY3plIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9kZWEubmxzIGIvb2xlL25scy9kZWEubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjUwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2RlYS5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQXVzdHJpYQorICovCisgCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZWEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIoBzdGVycmVpY2giKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDEiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwigHN0ZXJyZWljaCAoRGV1dHNjaCkiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiQXVzdHJpYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQVRTIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCKAc3RlcnJlaWNoIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCInIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiQVRTIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2Ftc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU29ubnRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiRGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJEbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTbyIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGV6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9kZXMubmxzIGIvb2xlL25scy9kZXMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWEyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Rlcy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3dpdHplcmxhbmQKKyAqLworIAorTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRldXRzY2giKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkdlcm1hbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGVzIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJTY2h3ZWl6IikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQxIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlNjaHdlaXogKERldXRzY2gpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlN3aXR6ZXJsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJTZyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiU2Nod2VpeiIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQxIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiJyIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJTRnIiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiQ0hGIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2Ftc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU29ubnRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiRGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJEbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTbyIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGV6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9kZXUubmxzIGIvb2xlL25scy9kZXUubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjgxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2RldS5ubHMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgR2VybWFueQorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJEZXV0c2NoIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJHZXJtYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGV1dHNjaCIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEZXV0c2NobGFuZCIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJHZXJtYW55IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJEZSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGV1dHNjaGxhbmQiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0OSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MSIpCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQorLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRE0iKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkRFTSIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNaXR0d29jaCIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ubmFiZW5kIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJTb25udGFnIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ1YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeRyeiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZXplbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN5HIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJKdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZXoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Ruay5ubHMgYi9vbGUvbmxzL2Ruay5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5Y2ExYwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZG5rLm5scwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBEZW5tYXJrCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjYiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRhbnNrIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJEYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRuayIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGFuc2siKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDUiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiRGFubWFyayIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEZW5tYXJrIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJESyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGFubWFyayIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjYiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ1IikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwia3IiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiREtLIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQorTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQorLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KK0xPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCitMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KK0xPQ1ZBTChMT0NBTEVfUzExNTksICIiKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNYW5kYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIlRpcnNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiVG9yc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM+HJkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlP4bmRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphbnVhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnRzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1haiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFqIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvZW5hLm5scyBiL29sZS9ubHMvZW5hLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJiYTBlCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbmEubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEF1c3RyYWxpYQorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDgwOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwgIkVuZ2xpc2ggKEF1c3RyYWxpYSkiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiZW5hIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiNDQiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIkF1c3RyYWxpYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiQXVzdHJhbGlhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiQVVTIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiQXVzdHJhbGlhIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIiQiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkFVRCIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJkZC9NTS95eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiSEg6bW06c3MiKQorTE9DVkFMKExPQ0FMRV9JREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIldlZG5lc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU2F0dXJkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIldlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VuYy5ubHMgYi9vbGUvbmxzL2VuYy5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZGVjNAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZW5jLm5scwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBDYW5hZGEKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA0MDkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsICJFbmdsaXNoIChDYW5hZGEpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgImVuYyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIkNhbmFkYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiQ2FuYWRhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiQ0FOIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiQ2FuYWRhIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICIxIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjQzNyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCitMT0NWQUwoTE9DQUxFX1NMSVNULCAiLCIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCAiJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiQ0FEIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCAiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsICIwIikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsICIvIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwgIk0vZC95eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkZGQsIE1NTU0gZGQsIHl5eXkiKQorTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCwgImg6bW06c3MgdHQiKQorTE9DVkFMKExPQ0FMRV9JREFURSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTERBVEUsICIwIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUUsICIwIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjYiKQorTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIldlZG5lc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU2F0dXJkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIldlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VuZy5ubHMgYi9vbGUvbmxzL2VuZy5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkYmQyNAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZW5nLm5scwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBVbml0ZWQgS2luZ2RvbQorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDgwOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwgIkVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJlbmciKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiVW5pdGVkIEtpbmdkb20iKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwgIlVuaXRlZCBLaW5nZG9tIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiR0JSIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiVW5pdGVkIEtpbmdkb20iKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDgwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjQ0IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjg1MCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCitMT0NWQUwoTE9DQUxFX1NMSVNULCAiLCIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCAioyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiR0JQIikKK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCAiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsICIvIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwgImRkL01NL3l5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCAiZGQgTU1NTSB5eXl5IikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJISDptbTpzcyIpCitMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JVElNRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCitMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsICIwIikKKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJNb25kYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiVGh1cnNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIlN1bmRheSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCAiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVseSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPY3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvZW5sLm5scyBiL29sZS9ubHMvZW5sLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDI4MTRhCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbmwubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEVuZ2xpc2ggQmVsaXplCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDA5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiZW5sIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiVW5pdGVkIFN0YXRlcyIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiVW5pdGVkIFN0YXRlcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIlVTQSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIlVuaXRlZCBTdGF0ZXMiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCAiNDM3IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKK0xPQ1ZBTChMT0NBTEVfU0xJU1QsICIsIikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIuIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLCIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJVU0QiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiTS9kL3l5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCAiZGRkZCwgTU1NTSBkZCwgeXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiaDptbTpzcyB0dCIpCitMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCitMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiNiIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsICIwIikKKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJNb25kYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiVGh1cnNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIlN1bmRheSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCAiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVseSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPY3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvZW50Lm5scyBiL29sZS9ubHMvZW50Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjllYzYzCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbnQubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFRyaW5pZGFkICYgVG9iYWdvCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDA5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgImVudCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlRyaW5pZGFkICYgVG9iYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJUcmluaWRhZCAmIFRvYmFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIlVTQSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIlVuaXRlZCBTdGF0ZXMiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCAiNDM3IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKK0xPQ1ZBTChMT0NBTEVfU0xJU1QsICIsIikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIuIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLCIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJVU0QiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiTS9kL3l5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCAiZGRkZCwgTU1NTSBkZCwgeXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiaDptbTpzcyB0dCIpCitMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCitMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiNiIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsICIwIikKKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJNb25kYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiVGh1cnNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIlN1bmRheSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCAiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVseSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPY3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvZW51Lm5scyBiL29sZS9ubHMvZW51Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzFjZGZkCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lbnUubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFVuaXRlZCBTdGF0ZXMKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA0MDkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsICJFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJlbnUiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIxIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiVVNBIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiVW5pdGVkIFN0YXRlcyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwNDA5IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI0MzciKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIiQiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlVTRCIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJNL2QveXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJoOm1tOnNzIHR0IikKK0xPQ1ZBTChMT0NBTEVfSURBVEUsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04sICIwIikKK0xPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKK0xPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICI2IikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQorCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIk1vbmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwgIlR1ZXNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJXZWRuZXNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsICJUaHVyc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIkZyaWRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNhdHVyZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiU3VuZGF5IikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsICJNb24iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsICJUdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsICJXZWQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsICJUaHUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsICJGcmkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsICJTYXQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsICJTdW4iKQorCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCAiSmFudWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCAiRmVicnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywgIk1hcmNoIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsICJBcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCAiTWF5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsICJKdW5lIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsICJKdWx5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsICJBdWd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwgIlNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwgIk9jdG9iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsICJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwgIkRlY2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwgIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCAiRmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsICJNYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwgIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCAiTWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsICJKdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywgIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCAiQXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksICJTZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsICJPY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsICJOb3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsICJEZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIwIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQpkaWZmIC0tZ2l0IGEvb2xlL25scy9lbnoubmxzIGIvb2xlL25scy9lbnoubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODI0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Vuei5ubHMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgTmV3IFplYWxhbmQKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsICJFbmdsaXNoIChOZXcgWmVhbGFuZCkiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiZW56IikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiNDQiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIk5ldyBaZWFsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJOZXcgWmVhbGFuZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIk5aTCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIk5ldyBaZWFsYW5kIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA4MDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIqMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkdCUCIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJkZC9NTS95eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiSEg6bW06c3MiKQorTE9DVkFMKExPQ0FMRV9JREFURSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIldlZG5lc2RheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU2F0dXJkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIldlZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNhdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzaC5ubHMgYi9vbGUvbmxzL2VzaC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4YTlmMQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNoLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChIb25kdXJhcykKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzaCIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3BhaW4iKQorLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYYBhIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUHRzIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJFU1AiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNpLm5scyBiL29sZS9ubHMvZXNpLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVmODgxCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc2kubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKE5pY2FyYWd1YSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzaSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3BhaW4iKQorLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYYBhIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiUHRzIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJFU1AiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWk/cmNvbGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQorCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyem8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYWJyaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWF5byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0dWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkaWNpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImVuZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFiciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJtYXkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwianVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJvY3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIm5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNtLm5scyBiL29sZS9ubHMvZXNtLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzAyM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc20ubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIE1leGlrbworICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNtIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJNZXhpY28iKQorLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRXNwYYBhIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiJCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiTVhOIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Vzbi5ubHMgYi9vbGUvbmxzL2Vzbi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzNGMyYQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNuLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChNb2Rlcm4pCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc24iKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlNwYWluIikKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlB0cyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRVNQIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzcC5ubHMgYi9vbGUvbmxzL2VzcC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5MWU4OQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZXNwLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTcGFuaXNoIChUcmFkaXRpb25hbCBTb3J0KQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNwIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJQdHMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc3BlcmFudG8ubmxzIGIvb2xlL25scy9lc3BlcmFudG8ubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTFhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2VzcGVyYW50by5ubHMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRXNwZXJhbnRvCisgKiAgICAgIAorICogICAgICBFc3BlcmFudG8gc2VlbXMgbm90IHRvIGJlIHN1cHBvcnRlZCBieSBXaW5kb3dzCisgKgorICogICAgICBUT0RPOiBJU08gbnVtZXJpY2FsIElEIGZvciBsYW5ndWFnZSA/CisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGVyYW50byIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRXNwZXJhbnRvIikKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZXUiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkVzcGVyYW50byIpCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSBub3Qgb2ZmaWNpYWwgaW4gYW55IG9uZSBjb3VudHJ5ICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpIElTTyBJRCBvZiBsYW5nIFRPRE8gKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCIzIikgLyogaXMgdGhpcyByaWdodD8gVE9ETyAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwiMyIpIC8qIGlzIHRoaXMgcmlnaHQ/IFRPRE8gKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJOTEciKSAvKiBhY2NvdW50aW5nIGN1cnJlbmN5IG9mIFVFQSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQorTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwieXl5eS5tbS5kZCIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQorLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KK0xPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCitMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTkpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5KSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcmRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtZXJrcmVkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwivGH9ZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZlbmRyZWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzYWJhdG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRpbWFu5m8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIrxhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRpIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudWFybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFqbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJh/Wd1c3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYnJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFqIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYf1nIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXN0Lm5scyBiL29sZS9ubHMvZXN0Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTQ1M2EyCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc3QubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEVzdG9uaWEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXN0IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvZXN1Lm5scyBiL29sZS9ubHMvZXN1Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDk2OTBiCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9lc3UubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNwYW5pc2ggKFB1ZXJ0byBSaWNvKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXN1IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTcGFpbiIpCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJQdHMiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkVTUCIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImp1ZXZlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmllcm5lcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwicz9hYmFkbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYXlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0aWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJvY3R1YnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRpY2llbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiZW5lIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYWJyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ldXEubmxzIGIvb2xlL25scy9ldXEubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWM1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2V1cS5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQmFzcXVlCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJldXEiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlNwYWluIikKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlB0cyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiRVNQIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21pbmdvIikKKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1heW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVuaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRpZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdHVicmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmllbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGljaWVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJlbmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Zpbi5ubHMgYi9vbGUvbmxzL2Zpbi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2YjVkMwotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZmluLm5scwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBGaW5sYW5kCisgKi8KKyAKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIxMSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3VvbWkiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkZpbm5pc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZpbiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwic3VvbWkiKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiU3VvbWkiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmlubGFuZCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRmluIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdW9taSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjExIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzNTgiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCitMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwibWsiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiRklNIikKKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAvKgorTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQorTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKK0xPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCitMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQorLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KK0xPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCitMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgLyoKKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KK0xPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQorLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibWFhbmFudGFpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJ0aWlzdGFpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJrZXNraXZpaWtrbyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwidG9yc3RhaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwicGVyamFudGFpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJsYXVhbnRhaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic3VubnVudGFpIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiS2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJQZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTGEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlN1IikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwidGFtbWlrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiaGVsbWlrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFhbGlza3V1IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImh1aHRpa3V1IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsInRvdWtva3V1IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImtlc+RrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiaGVpbuRrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiZWxva3V1IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInN5eXNrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsImxva2FrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm1hcnJhc2t1dSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiam91bHVrdXUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsInRhbW1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImhlbG1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hYWxpcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJodWh0aSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJ0b3VrbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJrZXPkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImhlaW7kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImVsbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzeXlzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJsb2thIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJtYXJyYXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImpvdWx1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmEubmxzIGIvb2xlL25scy9mcmEubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOWZlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2ZyYS5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRnJhbmNlCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJGcmFuY2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZyYSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2ZyYi5ubHMgYi9vbGUvbmxzL2ZyYi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2Nzc0NQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvZnJiLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBCZWxnaXVtCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJCZWxnaXVtIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcmIiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcnMubmxzIGIvb2xlL25scy9mcnMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYzRjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2Zycy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3dpdHplcmxhbmQgKEZyZW5jaCkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlN3aXR6ZXJsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcnMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ncmMubmxzIGIvb2xlL25scy9ncmMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNmU0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2dyYy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgR3JlZWsKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkdyZWVrIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJncmMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9oa2cubmxzIGIvb2xlL25scy9oa2cubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZmJmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2hrZy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQ2hpbmVzZSAoSG9uZyBLb25nKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQ2hpbmVzZSAoSG9uZyBLb25nKSIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaGtnIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvaHJ2Lm5scyBiL29sZS9ubHMvaHJ2Lm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNkMjYxCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9ocnYubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIENyb2F0aWEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaHJ2IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvaHVuLm5scyBiL29sZS9ubHMvaHVuLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZlNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9odW4ubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEh1bmdhcmlhbgorICovCisKK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJNYWd5YXIiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkh1bmdhcmlhbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaHVuIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJNYWd5YXIiKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzYiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTWFneWFyb3JzeuFnIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkh1bmdhcnkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkh1IikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJNYWd5YXJvcnN64WciKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzNiIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MiIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCI4NTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiwiKQorLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkZ0IikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkhVRiIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjAiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkuTU0uZGQiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgeXl5eS4gTU1NTSBkIikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKworLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTkpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5KSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiSOl0ZvUiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIktlZGQiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIlN6ZXJkYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiQ3P8dPZydPZrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJQ6W50ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlN6b21iYXQiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlZhc+FybmFwIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIkjpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJLZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiU2UiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkNzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJQ6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlZhIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudeFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ14XIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeFyY2l1cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCLBcHJpbGlzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk3hanVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkr6bml1cyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJK+mxpdXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQXVndXN6dHVzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlN6ZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdPNiZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJN4XIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiwXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk3haiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJK+m4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSvpsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTemUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2lybC5ubHMgYi9vbGUvbmxzL2lybC5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxNTIyOAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvaXJsLm5scwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBJcmVsYW5kCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDA5IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJpcmwiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJFbmdsaXNoIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIxIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJVbml0ZWQgU3RhdGVzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiVVNBIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiRWlyZSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwNDA5IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI0MzciKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQorTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKK0xPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIklSIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJJRVAiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiTS9kL3l5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCAiZGRkZCwgTU1NTSBkZCwgeXl5eSIpCitMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiaDptbTpzcyB0dCIpCitMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCitMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiNiIpCitMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsICIwIikKKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJNb25kYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCAiVGh1cnNkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIlN1bmRheSIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbnVhcnkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCAiQXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVseSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPY3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT2N0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvaXNsLm5scyBiL29sZS9ubHMvaXNsLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA3ZGExCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9pc2wubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEljZWxhbmQKKyAqLworCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwigHNsZW5zayIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiSWNlbGFuZGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJpc2wiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIoBzbGVuc2siKQorLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwigHNsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkljZWxhbmQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIklzIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCKAc2xhbmQiKQorLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0MCIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQorLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwia3IiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIklTSyIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5KSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm2AbnVkYWd1ciIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGhyaWRqdWRhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaWR2aWt1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImZpbW10dWRhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJmgHN0dWRhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJsYXVnYXJkYWd1ciIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic3VubnVkYWd1ciIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJtgCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiZHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJmaSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiZoAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsImxhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJzdSIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImphboBhciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJygGFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWGAIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImqAboAiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiaoBsgCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCKAZ3N0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0gGJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlc2VtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm3kciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWGAIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImqAbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqgGwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwigGeAIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJugHYiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaXRhLm5scyBiL29sZS9ubHMvaXRhLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjQ1NjhlCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9pdGEubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIEl0YWx5CisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkl0YWxpYW5vIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJJdGFsaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJpdGEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkl0YWxpYW5vIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjM5IikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkl0YWxpYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJJdGFseSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiSXQiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkl0YWxpYSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjM5IikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgLyoKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMaXQuIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJJVEwiKQorLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJMdW5lZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJNYXJ0ZWRpJyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWVyY29sZWRpJyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiR2lvdmVkaSciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlZlbmVyZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTYWJhdG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIkRvbWVuaWNhIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIkx1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJNYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkdpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJWZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIkRvIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiR2VubmFpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJicmFpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ6byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbGUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFnZ2lvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkdpdWdubyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJMdWdsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQWdvc3RvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNldHRlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT3R0b2JyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRpY2VtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJHZW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkdpdSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJMdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQWdvIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNldCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT3R0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRpYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KKyAKZGlmZiAtLWdpdCBhL29sZS9ubHMvaXRzLm5scyBiL29sZS9ubHMvaXRzLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDkzZmRlCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9pdHMubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFN3aXR6ZXJsYW5kCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkl0YWxpYW5vIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJJdGFsaWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJpdHMiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkl0YWxpYW5vIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQxIikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlN2aXp6ZXJhIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlN3aXR6ZXJhbmQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkNIIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdml6emVyYSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgLyoKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJTRnIiKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkNIRiIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5KSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIkx1bmVkaSciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIk1hcnRlZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNZXJjb2xlZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJHaW92ZWRpJyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiVmVuZXJkaSciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNhYmF0byIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiRG9tZW5pY2EiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTHUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIk1hIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiR2kiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlZlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQorCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJHZW5uYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYmJyYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnpvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWdnaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiR2l1Z25vIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkx1Z2xpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBZ29zdG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2V0dGVtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPdHRvYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGljZW1icmUiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkdlbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiR2l1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkx1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBZ28iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPdHQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGljIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworIApkaWZmIC0tZ2l0IGEvb2xlL25scy9rb2oubmxzIGIvb2xlL25scy9rb2oubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYWNlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2tvai5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgS29yZWFuCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImtvaiIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL2tvci5ubHMgYi9vbGUvbmxzL2tvci5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NGYwMAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMva29yLm5scwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBLb3JlYW4KKyAqICAgICAgc3RyaW5nIHVzaW5nIGNvZGVwYWdlIDk0OQorICovCisgCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiMTgiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIlwzMDdcMzIxXDI2MVwyNzFcMjc2XDM1NiIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiS29yZWFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJrb3IiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlwzMDdcMzIxXDI2MVwyNzFcMjc2XDM1NiIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI4MiIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJcMjY0XDM1M1wzMDdcMzIxXDI3MVwzMTZcMjYxXDI3MSIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJLb3JlYSAoU291dGgpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJLT1IiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlwyNjRcMzUzXDMwN1wzMjFcMjcxXDMxNlwyNjFcMjcxIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiMTgiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjgyIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiOTQ5IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjk0OSIpCitMT0NWQUwoTE9DQUxFX1NMSVNULCIsIikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLiIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLCIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywiMzswIikKK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsIjEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJcXCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJXb24iKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCitMT0NWQUwoTE9DQUxFX1NEQVRFLCIvIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJ5eXl5L01NL2RkIikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJ5eXl5L01NL2RkIikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsImg6bW06c3MgdHQiKQorTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCitMT0NWQUwoTE9DQUxFX0lMREFURSwiMSIpCitMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKK0xPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwiMCIpCitMT0NWQUwoTE9DQUxFX0lDRU5UVVJZLCIwIikKK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMCIpCitMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywiMCIpCitMT0NWQUwoTE9DQUxFX0lNT05MWkVSTywiMCIpCitMT0NWQUwoTE9DQUxFX1MxMTU5LCJcMjc3XDMwMFwzMDBcMzc0IikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksIlwyNzdcMzAwXDMxMFwzMDQiKQorTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCIxIikKKy8qIEtvcmVhbiBUYW5ndW4gRXJhIGNhbGVuZGFyICovCitMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCI1IikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCI2IikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwiMCIpCisKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJcMjc3XDM3MVwyNzdcMzQ0XDMwMFwzMTciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIlwzMTBcMjU1XDI3N1wzNDRcMzAwXDMxNyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiXDI3NFwzNjZcMjc3XDM0NFwzMDBcMzE3IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJcMjcwXDM2MVwyNzdcMzQ0XDMwMFwzMTciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlwyNjFcMzM1XDI3N1wzNDRcMzAwXDMxNyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiXDMwNVwzNDRcMjc3XDM0NFwzMDBcMzE3IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJcMzAwXDMxN1wyNzdcMzQ0XDMwMFwzMTciKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlwzMTBcMjU1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJcMjc0XDM2NiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiXDI3MFwzNjEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlwyNjFcMzM1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJcMzA1XDM0NCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiXDMwMFwzMTciKQorCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIxXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiMlwyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIjNcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCI0XDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiNVwyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIjZcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCI3XDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiOFwyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIjlcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiMTBcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiMTFcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiMTJcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKKworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiMVwyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIjJcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIzXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiNFwyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIjVcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCI2XDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiN1wyNzdcMzcxIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIjhcMjc3XDM3MSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCI5XDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIjEwXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIjExXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIjEyXDI3N1wzNzEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwiLSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywiMyIpCitMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCIwIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsIjAiKQpkaWZmIC0tZ2l0IGEvb2xlL25scy9sdGgubmxzIGIvb2xlL25scy9sdGgubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTg2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2x0aC5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgTGl0aHVhbmlhbgorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJsdGgiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9sdmkubmxzIGIvb2xlL25scy9sdmkubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDE3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL2x2aS5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgTGF0dmlhCisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImx2aSIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL25sYi5ubHMgYi9vbGUvbmxzL25sYi5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5MTAzZgotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvbmxiLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBOZXRoZXJsYW5kcworICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJubGIiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ubHMubmxzIGIvb2xlL25scy9ubHMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDU2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL25scy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgRHV0Y2gKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibmxzIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvbm9uLm5scyBiL29sZS9ubHMvbm9uLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTkyZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9ub24ubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIE5vcndheSAoTnlub3JzaykKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibm9uIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvbm9yLm5scyBiL29sZS9ubHMvbm9yLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU0NGZkCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9ub3IubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIE5vcndheSAoQm9rbT9sKQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJub3IiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9wbGsubmxzIGIvb2xlL25scy9wbGsubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NzRjODgKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3Bsay5ubHMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgUG9sYW5kCisgKi8KKyAgICAgICAgCitMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiUG9sc2tpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJQb2xpc2giKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJwbGsiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlBvbHNraSIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJQb2xza2EiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiUG9sYW5kIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJQbCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiUG9sc2thIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCIxMjUyIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjEyNTIiKQorTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCitMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQorTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiAiKQorLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQorTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksInpceEIzIikKKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5KSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBvbmllZHppYVwyNjNlayIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiV3RvcmVrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJTcm9kYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiQ3p3YXJ0ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlBpXHhCOXRlayIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ib3RhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJOaWVkemllbGEiKQorCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUG8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIld0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJTciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiQ3oiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlB0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiTmkiKQorCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJTdHljemVceEYxIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkx1dHkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFyemVjIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkt3aWVjaWVceEYxIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1haiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJDemVyd2llYyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJMaXBpZWMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiU2llcnBpZVx4RjEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiV3J6ZXNpZVx4RjEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIlBhXDIzN2R6aWVybmlrIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJMaXN0YXBhZCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiR3J1ZHppZVx4RjEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIlN0eSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJMdXQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkt3aSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiQ3plIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkxpcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJTaWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiV3J6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJQYVx4OUYiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIkxpcyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiR3J1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9wcmMubmxzIGIvb2xlL25scy9wcmMubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjI1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3ByYy5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgUGVvcGxlJ3MgcmVwdWJsaWMgb2YgQ2hpbmEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlBlb3BsZSdzIHJlcHVibGljIG9mIENoaW5hIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJwcmMiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9wdGIubmxzIGIvb2xlL25scy9wdGIubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MGM5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3B0Yi5ubHMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgQnJhemlsCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDE2IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiUG9ydHVndVwzNTJzIChCcmFzaWwpIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiUHJvdHVndWVzZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgInB0YiIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIlBvcnR1Z3VcMzUycyIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiQnJhc2lsIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJCcmF6aWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsICJCUkEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsICJCcmFzaWwiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCAiNDM3IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKK0xPQ1ZBTChMT0NBTEVfU0xJU1QsICI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLiIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJVU0QiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiZGQvTU0veXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJoOm1tOnNzIHR0IikKK0xPQ1ZBTChMT0NBTEVfSURBVEUsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04sICIwIikKK0xPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKK0xPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICI2IikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQorCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIlNlZ3VuZGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUZXJcMzQ3YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIlF1YXJ0YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlF1aW50YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIlNleHRhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU1wzNDFiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiRG9taW5nbyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiU2VnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVGVyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiUXVhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiUXVpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiU2V4IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU1wzNDFiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiRG9tIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbmVpcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZldmVyZWlybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyXDM0N28iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsICJKdW5obyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVsaG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2V0ZW1icm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPdXR1YnJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1icm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZXplbWJybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZldiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1haSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT3V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGV6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvcHRnLm5scyBiL29sZS9ubHMvcHRnLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzQyOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9wdGcubmxzCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFBvcnR1Z2FsCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDE2IikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiUG9ydHVndVwzNTJzIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiUHJvdHVndWVzZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgInB0ZyIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIlBvcnR1Z3VcMzUycyIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiUG9ydHVnYWwiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwgIlBvcnR1Z2FsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiUFRHIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiUG9ydHVnYWwiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCAiNDM3IikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKK0xPQ1ZBTChMT0NBTEVfU0xJU1QsICI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsICIxIikKK0xPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIsIikKK0xPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLiIpCitMT0NWQUwoTE9DQUxFX1NHUk9VUElORywgIjM7MCIpCitMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQorTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJVU0QiKQorTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKK0xPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKK0xPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQorTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiZGQvTU0veXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKK0xPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJoOm1tOnNzIHR0IikKK0xPQ1ZBTChMT0NBTEVfSURBVEUsICIwIikKK0xPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04sICIwIikKK0xPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKK0xPQ1ZBTChMT0NBTEVfSVRMWkVSTywgIjAiKQorTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8sICIwIikKK0xPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQorTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKK0xPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiwgIjAiKQorTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICI2IikKK0xPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQorCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIlNlZ3VuZGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUZXJcMzQ3YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywgIlF1YXJ0YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlF1aW50YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIlNleHRhIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCAiU1wzNDFiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiRG9taW5nbyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiU2VnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVGVyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiUXVhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiUXVpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiU2V4IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU1wzNDFiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiRG9tIikKKworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbmVpcm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZldmVyZWlybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyXDM0N28iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFicmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYWlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsICJKdW5obyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVsaG8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkFnb3N0byIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2V0ZW1icm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPdXR1YnJvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1icm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZXplbWJybyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZldiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBYnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1haSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkFnbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT3V0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGV6IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKKworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvcm9tLm5scyBiL29sZS9ubHMvcm9tLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2FhYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9yb20ubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFJvbWFuaWEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwicm9tIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvc2dwLm5scyBiL29sZS9ubHMvc2dwLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2E3ZTRjCi0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9zZ3AubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIENoaW5lc2UgKFNpbmdhcG9yZSkKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkNoaW5lc2UgKFNpbmdhcG9yZSkiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInNncCIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL3NreS5ubHMgYi9vbGUvbmxzL3NreS5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4YWYzYQotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvc2t5Lm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBTbG92YWtpYQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJza3kiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9zbHYubmxzIGIvb2xlL25scy9zbHYubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDA2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3Nsdi5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU2xvdmVuaWEKKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwic2x2IikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9ubHMvc3JiLm5scyBiL29sZS9ubHMvc3JiLm5scwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FhYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvb2xlL25scy9zcmIubmxzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICoJT0xFMk5MUyBsaWJyYXJ5CisgKiAgICAgIFNlcmJpYQorICovCisKKy8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJzcmIiKQorLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCisvKiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzExNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCisvKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJPbiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJM+CIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU/giKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KKwpkaWZmIC0tZ2l0IGEvb2xlL25scy9zdmUubmxzIGIvb2xlL25scy9zdmUubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDA1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3N2ZS5ubHMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgU3dlZGVuCisgKi8KKworTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjFkIikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJTdmVuc2thIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTd2VkaXNoIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJzdmUiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlN2ZW5za2EiKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDUiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiU1dFIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlN3ZWRlbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiU1ZFIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdmVyaWdlIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiMWQiKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ1IikKKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKK0xPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQorTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCitMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCitMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KK0xPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQorLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCitMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCitMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKK0xPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQorTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCitMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQorTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCitMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCitMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKK0xPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQorLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTeVuZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUaXNkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiVG9yc2RhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlZGFnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM9nJkYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlP2bmRhZyIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJN5SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz2IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT9iIpCisKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhcmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhcmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFycyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdGkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCisKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQorCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCitMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQpkaWZmIC0tZ2l0IGEvb2xlL25scy90cmsubmxzIGIvb2xlL25scy90cmsubmxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNmI3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9vbGUvbmxzL3Ryay5ubHMKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKglPTEUyTkxTIGxpYnJhcnkKKyAqICAgICAgVHVya2V5CisgKi8KKworLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInRyayIpCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCisvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQorLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLworCmRpZmYgLS1naXQgYS9vbGUvbmxzL3Vrci5ubHMgYi9vbGUvbmxzL3Vrci5ubHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2NWIyOAotLS0gL2Rldi9udWxsCisrKyBiL29sZS9ubHMvdWtyLm5scwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqCU9MRTJOTFMgbGlicmFyeQorICogICAgICBVa3JhaW5pYW4KKyAqLworCisvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwidWtyIikKKy8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCisvKiBMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCisvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpICovCisvKiBMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCisvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCisvKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCisvKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLworLyogTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKKy8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCisvKiBMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfUzIzNTksICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLworLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLworLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPgiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikgKi8KKworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCisKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCisvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworCisvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KKy8qIExPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLworLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCisKZGlmZiAtLWdpdCBhL29sZS9vbGUybmxzLmMgYi9vbGUvb2xlMm5scy5jCmluZGV4IGE2MzE4ZGMuLjA4MTVkOTYgMTAwNjQ0Ci0tLSBhL29sZS9vbGUybmxzLmMKKysrIGIvb2xlL29sZTJubHMuYwpAQCAtMjk0LDEzNjYgKzI5NCw4NCBAQAogICAgIHsKICAgICBjYXNlIExBTkdfRGU6CiAgICAgCXN3aXRjaCAoTENUeXBlKSB7Ci0vKiBUaGlzIGRlZmluaXRpb25zIGFwcGx5IHRvIEdlcm1hbnkgb25seS4gVXNlcnMgaW4gQXVzdHJpYSAKLSAgIG9yIFN3aXR6ZXJsYW5kIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IHRoZW0gKi8KLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJEZXV0c2NoIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJHZXJtYW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGV1dHNjaCIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCi1MT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEZXV0c2NobGFuZCIpCi1MT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEZXV0c2NobGFuZCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRGUiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRldXRzY2hsYW5kIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQotLyogRHVubm8KLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCi0qLwotTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCi1MT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKLUxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQotTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQotLyoKLUxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQotKi8KLUxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQotSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KLUxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKLSovCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRE0iKQotLyoKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCi1MT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCi1MT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKLSovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKLSovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLS8qCi1MT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKQotKi8KLUxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSUxEQVRFKQotKi8KLUxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKLUxPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpCi0qLwotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKLUxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQotTE9DVkFMKExPQ0FMRV9TMTE1OSkKLUxPQ1ZBTChMT0NBTEVfUzIzNTkpCi1MT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCi1MT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQotTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCi1MT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCi0qLwotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1vbnRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiRGllbnN0YWciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk1pdHR3b2NoIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJEb25uZXJzdGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJGcmVpdGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTb25uYWJlbmQiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlNvbm50YWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEaSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRvIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFpIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3QiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJKYW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk3kciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJKdWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT2t0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRleiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKLS8qCi1MT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pCi1MT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pCi1MT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQotTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpCi1MT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQotTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCi1MT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQotKi8KKyNpbmNsdWRlICJubHMvZGV1Lm5scyIKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgIC8qIExBTkcoRGUpICovCiAKICAgICBjYXNlIExBTkdfRGE6CiAgICAgCXN3aXRjaCAoTENUeXBlKSB7Ci1MT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiNiIpCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGFuc2siKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkRhbmlzaCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGFuIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJEYW5zayIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCi1MT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEYW5tYXJrIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRlbm1hcmsiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRLIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEYW5tYXJrIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiNiIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KLUxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQotTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCi1MT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKLUxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLS8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLwotTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKLUxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLUxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwotTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQotLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLS8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCi1MT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwotTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLwotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi1MT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKLUxPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQotLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1hbmRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiVGlyc2RhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiT25zZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUb3JzZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJGcmVkYWciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIkz4cmRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU/huZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJKYW51YXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ0cyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTZXB0ZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZWNlbWJlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJNYWoiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQotTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKLUxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCi1MT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKyNpbmNsdWRlICJubHMvZG5rLm5scyIKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgLyogTEFORyhEYSkgKi8KIAogICAgIGNhc2UgTEFOR19FbjoKICAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDQwOSIpCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwgIkVuZ2xpc2ggKFVuaXRlZCBTdGF0ZXMpIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiRW5nbGlzaCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgIkVOVSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIkVuZ2xpc2giKQotTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwgIjEiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlVuaXRlZCBTdGF0ZXMiKQotTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwgIlVuaXRlZCBTdGF0ZXMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsICJVU0EiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsICJVbml0ZWQgU3RhdGVzIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICIxIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjQzNyIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCi1MT0NWQUwoTE9DQUxFX1NMSVNULCAiLCIpCi1MT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMSIpCi1MT0NWQUwoTE9DQUxFX1NERUNJTUFMLCAiLiIpCi1MT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwgIiwiKQotTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQotTE9DVkFMKExPQ0FMRV9JRElHSVRTLCAiMiIpCi1MT0NWQUwoTE9DQUxFX0lMWkVSTywgIjEiKQotTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKLUxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCAiJCIpCi1MT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVVNEIikKLUxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIuIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCAiLCIpCi1MT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCi1MT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCAiMiIpCi1MT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywgIjIiKQotTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKLUxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsICIwIikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsICIvIikKLUxPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKLUxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwgIk0vZC95eSIpCi1MT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkZGQsIE1NTU0gZGQsIHl5eXkiKQotTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCwgImg6bW06c3MgdHQiKQotTE9DVkFMKExPQ0FMRV9JREFURSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JTERBVEUsICIwIikKLUxPQ1ZBTChMT0NBTEVfSVRJTUUsICIwIikKLUxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQotTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjAiKQotTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIwIikKLUxPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCi1MT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQotTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjYiKQotTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIk1vbmRheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwgIlR1ZXNkYXkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJXZWRuZXNkYXkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsICJUaHVyc2RheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIkZyaWRheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNhdHVyZGF5IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiU3VuZGF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwgIkphbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCAiRmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsICJNYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwgIkFwciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCAiTWF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsICJKdW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywgIkp1bCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCAiQXVnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksICJTZXAiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsICJPY3QiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsICJOb3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsICJEZWMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsICIiKQotTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKLUxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKyNpbmNsdWRlICJubHMvZW51Lm5scyIKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgIC8qIExBTkcoRW4pICovCiAKICAgICBjYXNlIExBTkdfRW86CiAgICAgCXN3aXRjaCAoTENUeXBlKSB7Ci0vKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpIElTTyBudW1lcmljYWwgSUQgZm9yIGxhbmd1YWdlIFRPRE8gKi8KLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJFc3BlcmFudG8iKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkVzcGVyYW50byIpCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGV1IikgKi8KLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3BlcmFudG8iKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSBub3Qgb2ZmaWNpYWwgaW4gYW55IG9uZSBjb3VudHJ5ICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEZXV0c2NobGFuZCIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJHZXJtYW55IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJEZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGV1dHNjaGxhbmQiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikgSVNPIElEIG9mIGxhbmcgVE9ETyAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikgKi8KLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiMyIpIC8qIGlzIHRoaXMgcmlnaHQ/IFRPRE8gKi8KLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjMiKSAvKiBpcyB0aGlzIHJpZ2h0PyBUT0RPICovCi1MT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKLUxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQotTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCi1MT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KLUxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiTkxHIikgLyogYWNjb3VudGluZyBjdXJyZW5jeSBvZiBVRUEgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkubW0uZGQiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLS8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCi1MT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwotTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLwotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi0vKiBMT0NWQUwoTE9DQUxFX1MxMTU5KSAqLwotLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5kbyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZG8iKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1lcmtyZWRvIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCK8Yf1kbyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZG8iKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInNhYmF0byIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZGltYW7mbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwivGEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJzYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudWFybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFqbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWxpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJh/Wd1c3RvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYnJvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXByIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImH9ZyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZWMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCi0vKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworI2luY2x1ZGUgIm5scy9lc3BlcmFudG8ubmxzIgogCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7CiAJfQogICAgIGJyZWFrOyAgLyogTEFORyhFbykgKi8KIAogICAgIGNhc2UgTEFOR19GaToKICAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIxMSIpCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3VvbWkiKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkZpbm5pc2giKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZpbiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwic3VvbWkiKQotTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiU3VvbWkiKQotTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmlubGFuZCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRmluIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdW9taSIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjExIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzNTgiKQotLyogCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKQotKi8KLUxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQotTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCi1MT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKLUxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLS8qCi1MT0NWQUwoTE9DQUxFX1NHUk9VUElORykKLSovCi1MT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQotTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikKLUlzIHRoaXMgIjAxMjM0NTY3ODkiID8/Ci1MT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCi0qLwotTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIm1rIikKLS8qCi1MT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKQotTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKLUxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQotTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpCi0qLwotTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi0vKgotTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpCi0qLwotTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQotTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCi1MT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKLUxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQotTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKLUxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi0vKgotTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKLSovCi1MT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lMREFURSkKLSovCi1MT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pCi1MT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQotKi8KLUxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCi1MT0NWQUwoTE9DQUxFX0lNT05MWkVSTykKLSovCi1MT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQotTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCi1MT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQotTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCi1MT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCi0qLwotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm1hYW5hbnRhaSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGlpc3RhaSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywia2Vza2l2aWlra28iKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsInRvcnN0YWkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInBlcmphbnRhaSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwibGF1YW50YWkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsInN1bm51bnRhaSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJLZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlBlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJMYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU3UiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwidGFtbWlrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiaGVsbWlrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFhbGlza3V1IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImh1aHRpa3V1IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsInRvdWtva3V1IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImtlc+RrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiaGVpbuRrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiZWxva3V1IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInN5eXNrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsImxva2FrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm1hcnJhc2t1dSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiam91bHVrdXUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJ0YW1taSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJoZWxtaSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYWFsaXMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiaHVodGkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwidG91a28iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwia2Vz5CIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJoZWlu5CIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJlbG8iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic3l5cyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwibG9rYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibWFycmFzIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJqb3VsdSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKLUxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCi1MT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQotTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpCi1MT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQotTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCi1MT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQotKi8KKyNpbmNsdWRlICJubHMvZmluLm5scyIKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgIC8qIExBTkcoRmkpICovCiAKICAgICBjYXNlIExBTkdfSXQ6CiAgICAgCXN3aXRjaCAoTENUeXBlKSB7Ci1MT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiSXRhbGlhbm8iKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkl0YWxpYW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIml0YSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiSXRhbGlhbm8iKQotTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzkiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiSXRhbGlhIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkl0YWx5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJJdCIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiSXRhbGlhIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiMzkiKQotLyogRHVubm8KLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCi0qLwotTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCi1MT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKLUxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQotTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQotLyoKLUxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQotKi8KLUxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQotSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KLUxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKLSovCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiTGl0LiIpCi0vKgotTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKLUxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCi1MT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKLUxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQotKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQotKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKLUxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQotTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCi1MT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKLUxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCi1MT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQotLyoKLUxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCi0qLwotTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JTERBVEUpCi0qLwotTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQotTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKLSovCi1MT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQotTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCi1MT0NWQUwoTE9DQUxFX1MxMTU5KQotTE9DVkFMKExPQ0FMRV9TMjM1OSkKLUxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKLUxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCi1MT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKLUxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKLSovCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTHVuZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiTWFydGVkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk1lcmNvbGVkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkdpb3ZlZGknIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJWZW5lcmRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2FiYXRvIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJEb21lbmljYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTHUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIk1hIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiR2kiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlZlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiR2VubmFpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJicmFpbyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ6byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbGUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFnZ2lvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkdpdWdubyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJMdWdsaW8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQWdvc3RvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNldHRlbWJyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiT3R0b2JyZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1icmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRpY2VtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiR2VuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJNYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1hZyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJHaXUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiTHVnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkFnbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJTZXQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk90dCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEaWMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi0vKgotTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQotTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCi1MT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKLUxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQotTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKLSovCisjaW5jbHVkZSAibmxzL2l0YS5ubHMiCiAJZGVmYXVsdDogZm91bmQ9MDticmVhazsKIAl9CiAgICAgYnJlYWs7ICAvKiBMQU5HKEl0KSAqLwogCiAgICAgY2FzZSAweDA4MDk6CiAgICAgCXN3aXRjaCAoTENUeXBlKSB7Ci1MT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA4MDkiKQotTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsICJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkiKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiRU5HIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiNDQiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlVuaXRlZCBLaW5nZG9tIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJVbml0ZWQgS2luZ2RvbSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIkdCUiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIlVuaXRlZCBLaW5nZG9tIikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA4MDkiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI4NTAiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQotTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQotTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjAiKQotTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwgIi4iKQotTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKLUxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKLUxPQ1ZBTChMT0NBTEVfSURJR0lUUywgIjIiKQotTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKLUxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIqMiKQotTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkdCUCIpCi1MT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLiIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQotTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQotTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywgIjIiKQotTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKLUxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCAiMSIpCi1MT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCi1MT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsICJkZC9NTS95eSIpCi1MT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCi1MT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiSEg6bW06c3MiKQotTE9DVkFMKExPQ0FMRV9JREFURSwgIjEiKQotTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKLUxPQ1ZBTChMT0NBTEVfSVRJTUUsICIxIikKLUxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwgIjAiKQotTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywgIjEiKQotTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKLUxPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCi1MT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQotTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSywgIjAiKQotTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIk1vbmRheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwgIlR1ZXNkYXkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJXZWRuZXNkYXkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsICJUaHVyc2RheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwgIkZyaWRheSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNhdHVyZGF5IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiU3VuZGF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiTW9uIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiVGh1IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiU3VuIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyY2giKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwgIkp1bmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2VwdGVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGVjZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwgIkphbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCAiRmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsICJNYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwgIkFwciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCAiTWF5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsICJKdW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywgIkp1bCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCAiQXVnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksICJTZXAiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsICJPY3QiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsICJOb3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsICJEZWMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsICIiKQotTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKLUxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCi1MT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKKyNpbmNsdWRlICJubHMvZW5nLm5scyIKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgLyogTEFORygweDA4MDkpIChVLksuIEVuZ2xpc2gpICovCiAKICAgICBjYXNlIExBTkdfS286IC8qIHN0cmluZyB1c2luZyBjb2RlcGFnZSA5NDkgKi8KICAgICAgICAgc3dpdGNoIChMQ1R5cGUpIHsKLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIxOCIpCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiXDMwN1wzMjFcMjYxXDI3MVwyNzZcMzU2IikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJLb3JlYW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsIktPUiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiXDMwN1wzMjFcMjYxXDI3MVwyNzZcMzU2IikKLUxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjgyIikKLUxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlwyNjRcMzUzXDMwN1wzMjFcMjcxXDMxNlwyNjFcMjcxIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIktvcmVhIChTb3V0aCkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIktPUiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiXDI2NFwzNTNcMzA3XDMyMVwyNzFcMzE2XDI2MVwyNzEiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIxOCIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiODIiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI5NDkiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwiOTQ5IikKLUxPQ1ZBTChMT0NBTEVfU0xJU1QsIiwiKQotTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCi1MT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIuIikKLUxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIsIikKLUxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCIzOzAiKQotTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKLUxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIwIikKLUxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwiMSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQotTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlxcIikKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIldvbiIpCi1MT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIuIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIsIikKLUxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQotTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi8iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkvTU0vZGQiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsInl5eXkvTU0vZGQiKQotTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCwiaDptbTpzcyB0dCIpCi1MT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLUxPQ1ZBTChMT0NBTEVfSUxEQVRFLCIxIikKLUxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQotTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCIwIikKLUxPQ1ZBTChMT0NBTEVfSUNFTlRVUlksIjAiKQotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIwIikKLUxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCIwIikKLUxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCIwIikKLUxPQ1ZBTChMT0NBTEVfUzExNTksIlwyNzdcMzAwXDMwMFwzNzQiKQotTE9DVkFMKExPQ0FMRV9TMjM1OSwiXDI3N1wzMDBcMzEwXDMwNCIpCi1MT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsIjEiKQotLyogS29yZWFuIFRhbmd1biBFcmEgY2FsZW5kYXIgKi8KLUxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsIjUiKQotTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssIjYiKQotTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCIwIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJcMjc3XDM3MVwyNzdcMzQ0XDMwMFwzMTciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIlwzMTBcMjU1XDI3N1wzNDRcMzAwXDMxNyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiXDI3NFwzNjZcMjc3XDM0NFwzMDBcMzE3IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJcMjcwXDM2MVwyNzdcMzQ0XDMwMFwzMTciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlwyNjFcMzM1XDI3N1wzNDRcMzAwXDMxNyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiXDMwNVwzNDRcMjc3XDM0NFwzMDBcMzE3IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJcMzAwXDMxN1wyNzdcMzQ0XDMwMFwzMTciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIlwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJcMzEwXDI1NSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiXDI3NFwzNjYiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlwyNzBcMzYxIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJcMjYxXDMzNSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiXDMwNVwzNDQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlwzMDBcMzE3IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIjFcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIyXDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiM1wyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIjRcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCI1XDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiNlwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIjdcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCI4XDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiOVwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIxMFwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIxMVwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIxMlwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiMVwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIjJcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIzXDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiNFwyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIjVcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCI2XDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiN1wyNzdcMzcxIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIjhcMjc3XDM3MSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCI5XDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIjEwXDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIjExXDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIjEyXDI3N1wzNzEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi1MT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sIiIpCi1MT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sIi0iKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sIjMiKQotTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sIjAiKQotTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsIjMiKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwiMCIpCi1MT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCIwIikKKyNpbmNsdWRlICJubHMva29yLm5scyIKICAgICAgICAgZGVmYXVsdDogZm91bmQ9MDticmVhazsKICAgICAgICAgfQogICAgIGJyZWFrOyAgLyogTEFORyhLbykgKi8KIAogICAgIGNhc2UgTEFOR19IdToKICAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJNYWd5YXIiKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkh1bmdhcmlhbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaHVuIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJNYWd5YXIiKQotTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzYiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTWFneWFyb3JzeuFnIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkh1bmdhcnkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkh1IikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJNYWd5YXJvcnN64WciKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzNiIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MiIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCI4NTIiKQotTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCi1MT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKLUxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIi4iKQotTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiwiKQotLyoKLUxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQotKi8KLUxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCi1MT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQotSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KLUxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKLSovCi1MT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRnQiKQotLyoKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCi1MT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCi1MT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKLSovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIwIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKLSovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi8iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkuTU0uZGQiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgeXl5eS4gTU1NTSBkIikKLS8qCi1MT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKQotKi8KLUxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSUxEQVRFKQotKi8KLUxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKLUxPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpCi0qLwotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKLUxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQotTE9DVkFMKExPQ0FMRV9TMTE1OSkKLUxPQ1ZBTChMT0NBTEVfUzIzNTkpCi1MT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCi1MT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQotTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCi1MT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCi0qLwotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIkjpdGb1IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJLZWRkIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJTemVyZGEiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkNz/HT2cnT2ayIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiUOludGVrIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTem9tYmF0IikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJWYXPhcm5hcCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiSOkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIktlIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJTZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiQ3MiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlDpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiVmEiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudeFyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ14XIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTeFyY2l1cyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCLBcHJpbGlzIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk3hanVzIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkr6bml1cyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJK+mxpdXMiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQXVndXN6dHVzIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlN6ZXB0ZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdPNiZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZWNlbWJlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeFyIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIsFwciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJN4WoiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSvpuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkr6bCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJBdWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU3plIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIk5vdiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQotLyoKLUxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKLUxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKQotTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCi1MT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKLUxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpCi1MT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKLUxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCi0qLworI2luY2x1ZGUgIm5scy9odW4ubmxzIgogCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7CiAJfQogICAgIGJyZWFrOyAgLyogTEFORyhFbikgKi8KIAogICAgIGNhc2UgTEFOR19QbDoKICAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLUxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJQb2xza2kiKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlBvbGlzaCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgInBvbCIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiUG9sc2tpIikKLUxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ5IikKLUxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlBvbHNrYSIpCi1MT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQb2xhbmQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlBsIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJQb2xza2EiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0OSIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjEyNTIiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwiMTI1MiIpCi1MT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKLUxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQotTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCi1MT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiICIpCi0vKgotTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCi0qLwotTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKLUxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLS8qCi1MT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCi1JcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwotTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKQotKi8KLUxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJ6XHhCMyIpCi0vKgotTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKLUxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCi1MT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKLUxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQotKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQotKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKLUxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQotTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCi1MT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKLUxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCi1MT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQotLyoKLUxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCi0qLwotTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JTERBVEUpCi0qLwotTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi0vKgotTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQotTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKLSovCi1MT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQotLyoKLUxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQotTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCi1MT0NWQUwoTE9DQUxFX1MxMTU5KQotTE9DVkFMKExPQ0FMRV9TMjM1OSkKLUxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKLUxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCi1MT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKLUxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKLSovCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiUG9uaWVkemlhXDI2M2VrIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJXdG9yZWsiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIlNyb2RhIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJDendhcnRlayIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiUGlceEI5dGVrIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTb2JvdGEiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIk5pZWR6aWVsYSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUG8iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIld0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJTciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiQ3oiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlB0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTbyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiTmkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiU3R5Y3plXHhGMSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJMdXR5IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnplYyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJLd2llY2llXHhGMSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiQ3plcndpZWMiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiTGlwaWVjIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIlNpZXJwaWVceEYxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIldyemVzaWVceEYxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJQYVwyMzdkemllcm5payIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTGlzdGFwYWQiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkdydWR6aWVceEYxIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiU3R5IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkx1dCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJNYXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiS3dpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJDemUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiTGlwIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIlNpZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJXcnoiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIlBhXHg5RiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTGlzIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJHcnUiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi0vKgotTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQotTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQotTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCi1MT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQotTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKLUxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQotTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKLSovCisjaW5jbHVkZSAibmxzL3Bsay5ubHMiCiAJZGVmYXVsdDogZm91bmQ9MDticmVhazsKIAl9CiAgICAgYnJlYWs7ICAvKiBMQU5HKFBsKSAqLwogCiAgICAgY2FzZSBMQU5HX1BvOgogICAgIAlzd2l0Y2ggKExDVHlwZSkgewotTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsICIwNDE2IikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiUG9ydHVndVwzNTJzIChCcmFzaWwpIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiUHJvdHVndWVzZSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgIlBPUiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIlBvcnR1Z3VcMzUycyIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCi1MT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiQnJhc2lsIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJCcmF6aWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsICJCUkEiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsICJCcmFzaWwiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCAiNDM3IikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKLUxPQ1ZBTChMT0NBTEVfU0xJU1QsICI7IikKLUxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsICIxIikKLUxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIsIikKLUxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLiIpCi1MT0NWQUwoTE9DQUxFX1NHUk9VUElORywgIjM7MCIpCi1MT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKLUxPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIsICIxIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQotTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKLUxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsICJVU0QiKQotTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIiwiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKLUxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCAiMzswIikKLUxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKLUxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwgIjAiKQotTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQotTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwgIjoiKQotTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiZGQvTU0veXkiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKLUxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJoOm1tOnNzIHR0IikKLUxPQ1ZBTChMT0NBTEVfSURBVEUsICIwIikKLUxPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lUSU1FLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04sICIwIikKLUxPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKLUxPQ1ZBTChMT0NBTEVfSVRMWkVSTywgIjAiKQotTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8sICIwIikKLUxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCi1MT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQotTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKLUxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQotTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUiwgIjAiKQotTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICI2IikKLUxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsICJTZWd1bmRhIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVGVyXDM0N2EiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJRdWFydGEiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsICJRdWludGEiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJTZXh0YSIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNcMzQxYmFkbyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywgIkRvbWluZ28iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsICJTZWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsICJUZXIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsICJRdWEiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsICJRdWkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsICJTZXgiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsICJTXDM0MWIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsICJEb20iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbmVpcm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZldmVyZWlybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCAiTWFyXDM0N28iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFicmlsIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYWlvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsICJKdW5obyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVsaG8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkFnb3N0byIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCAiU2V0ZW1icm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPdXR1YnJvIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1icm8iKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZXplbWJybyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZXYiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQWJyIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYWkiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBZ28iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNldCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk91dCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRleiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCi1MT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQotTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCi1MT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQotTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIwIikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCi1MT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQotTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQorI2luY2x1ZGUgIm5scy9wdGIubmxzIgogCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7CiAJfQogICAgIGJyZWFrOyAvKiBMQU5HKFBvKSAqLwogCi1jYXNlIExBTkdfU3c6CisgICAgY2FzZSBMQU5HX1N3OgogICAgIAlzd2l0Y2ggKExDVHlwZSkgewotTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjFkIikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJTdmVuc2thIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTd2VkaXNoIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJTViIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiU3ZlbnNrYSIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCi1MT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJTV0UiKQotTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3dlZGVuIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJTVkUiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlN2ZXJpZ2UiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIxZCIpCi1MT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KLUxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQotTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCi1MT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKLUxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLS8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLwotTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKLUxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLUxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwotTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KLUxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQotLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCi1MT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKLUxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQotTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCi1MT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQotTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLS8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCi1MT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwotTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLwotTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLS8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi1MT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKLUxPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQotLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk3lbmRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiVGlzZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJPbnNkYWciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIlRvcnNkYWciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiTPZyZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJT9m5kYWciKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk3lIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUaSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiT24iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTPYiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP2IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhcmkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhcmkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFycyIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdGkiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJOb3ZlbWJlciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJKYW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJBcHIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFqIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJKdWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiT2t0IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRlYyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKLUxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCi1MT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCi1MT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQotTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKLUxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKLUxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCi1MT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCisjaW5jbHVkZSAibmxzL3N2ZS5ubHMiCiAJZGVmYXVsdDogZm91bmQ9MDticmVhazsKIAl9CiAgICAgYnJlYWs7IC8qIExBTkcoU3cpICovCkBAIC0xNzg3LDYgKzUwNSw1MjQgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQ1RfQ1R5cGUyX0xVVFtdID0geworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gICAwICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgIDEgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAgMiAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gICAzICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgIDQgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAgNSAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gICA2ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgIDcgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAgOCAqLworICBDMl9TRUdNRU5UU0VQQVJBVE9SLCAvKiAgIC0gICA5ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMTAgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAxMSAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDEyICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMTMgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAxNCAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDE1ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMTYgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAxNyAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDE4ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMTkgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAyMCAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDIxICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMjIgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAyMyAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDI0ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMjUgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAyNiAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDI3ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMjggKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogICAtICAyOSAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiAgIC0gIDMwICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qICAgLSAgMzEgKi8KKyAgQzJfV0hJVEVTUEFDRSwgLyogICAtICAzMiAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qICEgLSAgMzMgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiAiIC0gIDM0ICovIC8qICIgKi8KKyAgQzJfRVVST1BFVEVSTUlOQVRPUiwgLyogIyAtICAzNSAqLworICBDMl9FVVJPUEVURVJNSU5BVE9SLCAvKiAkIC0gIDM2ICovCisgIEMyX0VVUk9QRVRFUk1JTkFUT1IsIC8qICUgLSAgMzcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qICYgLSAgMzggKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiAnIC0gIDM5ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogKCAtICA0MCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qICkgLSAgNDEgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiAqIC0gIDQyICovCisgIEMyX0VVUk9QRVRFUk1JTkFUT1IsIC8qICsgLSAgNDMgKi8KKyAgQzJfQ09NTU9OU0VQQVJBVE9SLCAvKiAsIC0gIDQ0ICovCisgIEMyX0VVUk9QRVRFUk1JTkFUT1IsIC8qIC0gLSAgNDUgKi8KKyAgQzJfRVVST1BFU0VQQVJBVE9SLCAvKiAuIC0gIDQ2ICovCisgIEMyX0VVUk9QRVNFUEFSQVRPUiwgLyogLyAtICA0NyAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qIDAgLSAgNDggKi8KKyAgQzJfRVVST1BFTlVNQkVSLCAvKiAxIC0gIDQ5ICovCisgIEMyX0VVUk9QRU5VTUJFUiwgLyogMiAtICA1MCAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qIDMgLSAgNTEgKi8KKyAgQzJfRVVST1BFTlVNQkVSLCAvKiA0IC0gIDUyICovCisgIEMyX0VVUk9QRU5VTUJFUiwgLyogNSAtICA1MyAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qIDYgLSAgNTQgKi8KKyAgQzJfRVVST1BFTlVNQkVSLCAvKiA3IC0gIDU1ICovCisgIEMyX0VVUk9QRU5VTUJFUiwgLyogOCAtICA1NiAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qIDkgLSAgNTcgKi8KKyAgQzJfQ09NTU9OU0VQQVJBVE9SLCAvKiA6IC0gIDU4ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogOyAtICA1OSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIDwgLSAgNjAgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiA9IC0gIDYxICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogPiAtICA2MiAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qID8gLSAgNjMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEAgLSAgNjQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEEgLSAgNjUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEIgLSAgNjYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEMgLSAgNjcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEQgLSAgNjggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEUgLSAgNjkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEYgLSAgNzAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEcgLSAgNzEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEggLSAgNzIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEkgLSAgNzMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEogLSAgNzQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEsgLSAgNzUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIEwgLSAgNzYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIE0gLSAgNzcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIE4gLSAgNzggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIE8gLSAgNzkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFAgLSAgODAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFEgLSAgODEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFIgLSAgODIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFMgLSAgODMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFQgLSAgODQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFUgLSAgODUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFYgLSAgODYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFcgLSAgODcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFggLSAgODggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFkgLSAgODkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIFogLSAgOTAgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiBbIC0gIDkxICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogXCAtICA5MiAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIF0gLSAgOTMgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiBeIC0gIDk0ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogXyAtICA5NSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIGAgLSAgOTYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGEgLSAgOTcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGIgLSAgOTggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGMgLSAgOTkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGQgLSAxMDAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGUgLSAxMDEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGYgLSAxMDIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGcgLSAxMDMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGggLSAxMDQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGkgLSAxMDUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGogLSAxMDYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGsgLSAxMDcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIGwgLSAxMDggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIG0gLSAxMDkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIG4gLSAxMTAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIG8gLSAxMTEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHAgLSAxMTIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHEgLSAxMTMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHIgLSAxMTQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHMgLSAxMTUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHQgLSAxMTYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHUgLSAxMTcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHYgLSAxMTggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHcgLSAxMTkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHggLSAxMjAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHkgLSAxMjEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIHogLSAxMjIgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiB7IC0gMTIzICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogfCAtIDEyNCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIH0gLSAxMjUgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiB+IC0gMTI2ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qIH8gLSAxMjcgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyoggCAtIDEyOCAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiCBIC0gMTI5ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyoggiAtIDEzMCAqLworICBDMl9MRUZUVE9SSUdIVCwgLyoggyAtIDEzMSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIIQgLSAxMzIgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCFIC0gMTMzICovCisgIEMyX09USEVSTkVVVFJBTCwgLyoghiAtIDEzNCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIIcgLSAxMzUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIIggLSAxMzYgKi8KKyAgQzJfRVVST1BFVEVSTUlOQVRPUiwgLyogiSAtIDEzNyAqLworICBDMl9MRUZUVE9SSUdIVCwgLyogiiAtIDEzOCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIIsgLSAxMzkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIIwgLSAxNDAgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogjSAtIDE0MSAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiCOIC0gMTQyICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qII8gLSAxNDMgKi8KKyAgQzJfTk9UQVBQTElDQUJMRSwgLyogkCAtIDE0NCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIJEgLSAxNDUgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCSIC0gMTQ2ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogkyAtIDE0NyAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIJQgLSAxNDggKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCVIC0gMTQ5ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogliAtIDE1MCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIJcgLSAxNTEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIJggLSAxNTIgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCZIC0gMTUzICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiCaIC0gMTU0ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogmyAtIDE1NSAqLworICBDMl9MRUZUVE9SSUdIVCwgLyognCAtIDE1NiAqLworICBDMl9OT1RBUFBMSUNBQkxFLCAvKiCdIC0gMTU3ICovCisgIEMyX05PVEFQUExJQ0FCTEUsIC8qIJ4gLSAxNTggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIJ8gLSAxNTkgKi8KKyAgQzJfV0hJVEVTUEFDRSwgLyogoCAtIDE2MCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIKEgLSAxNjEgKi8KKyAgQzJfRVVST1BFVEVSTUlOQVRPUiwgLyogoiAtIDE2MiAqLworICBDMl9FVVJPUEVURVJNSU5BVE9SLCAvKiCjIC0gMTYzICovCisgIEMyX0VVUk9QRVRFUk1JTkFUT1IsIC8qIKQgLSAxNjQgKi8KKyAgQzJfRVVST1BFVEVSTUlOQVRPUiwgLyogpSAtIDE2NSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIKYgLSAxNjYgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCnIC0gMTY3ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogqCAtIDE2OCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIKkgLSAxNjkgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCqIC0gMTcwICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogqyAtIDE3MSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIKwgLSAxNzIgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiCtIC0gMTczICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogriAtIDE3NCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIK8gLSAxNzUgKi8KKyAgQzJfRVVST1BFVEVSTUlOQVRPUiwgLyogsCAtIDE3NiAqLworICBDMl9FVVJPUEVURVJNSU5BVE9SLCAvKiCxIC0gMTc3ICovCisgIEMyX0VVUk9QRU5VTUJFUiwgLyogsiAtIDE3OCAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qILMgLSAxNzkgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiC0IC0gMTgwICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogtSAtIDE4MSAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qILYgLSAxODIgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiC3IC0gMTgzICovCisgIEMyX09USEVSTkVVVFJBTCwgLyoguCAtIDE4NCAqLworICBDMl9FVVJPUEVOVU1CRVIsIC8qILkgLSAxODUgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiC6IC0gMTg2ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyoguyAtIDE4NyAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qILwgLSAxODggKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiC9IC0gMTg5ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyogviAtIDE5MCAqLworICBDMl9PVEhFUk5FVVRSQUwsIC8qIL8gLSAxOTEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMAgLSAxOTIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMEgLSAxOTMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMIgLSAxOTQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMMgLSAxOTUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMQgLSAxOTYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMUgLSAxOTcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMYgLSAxOTggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMcgLSAxOTkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMggLSAyMDAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMkgLSAyMDEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMogLSAyMDIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMsgLSAyMDMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIMwgLSAyMDQgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIM0gLSAyMDUgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIM4gLSAyMDYgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qIM8gLSAyMDcgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINAgLSAyMDggKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINEgLSAyMDkgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINIgLSAyMTAgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINMgLSAyMTEgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINQgLSAyMTIgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINUgLSAyMTMgKi8KKyAgQzJfTEVGVFRPUklHSFQsIC8qINYgLSAyMTQgKi8KKyAgQzJfT1RIRVJORVVUUkFMLCAvKiDXIC0gMjE1ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDYIC0gMjE2ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDZIC0gMjE3ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDaIC0gMjE4ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDbIC0gMjE5ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDcIC0gMjIwICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDdIC0gMjIxICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDeIC0gMjIyICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDfIC0gMjIzICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDgIC0gMjI0ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDhIC0gMjI1ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDiIC0gMjI2ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDjIC0gMjI3ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDkIC0gMjI4ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDlIC0gMjI5ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDmIC0gMjMwICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDnIC0gMjMxICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDoIC0gMjMyICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDpIC0gMjMzICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDqIC0gMjM0ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDrIC0gMjM1ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDsIC0gMjM2ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDtIC0gMjM3ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDuIC0gMjM4ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDvIC0gMjM5ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDwIC0gMjQwICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDxIC0gMjQxICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDyIC0gMjQyICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiDzIC0gMjQzICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiD0IC0gMjQ0ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiD1IC0gMjQ1ICovCisgIEMyX0xFRlRUT1JJR0hULCAvKiD2IC0gMjQ2ICovCisgIEMyX09USEVSTkVVVFJBTCwgLyog9yAtIDI0NyAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog+CAtIDI0OCAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog+SAtIDI0OSAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog+iAtIDI1MCAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog+yAtIDI1MSAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog/CAtIDI1MiAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog/SAtIDI1MyAqLworICBDMl9MRUZUVE9SSUdIVCwgLyog/iAtIDI1NCAqLworICBDMl9MRUZUVE9SSUdIVCAvKiD/IC0gMjU1ICovCit9OworCitzdGF0aWMgY29uc3QgV09SRCBDVF9DVHlwZTNfTFVUW10gPSB7IAorICAweDAwMDAsIC8qICAgLSAgIDAgKi8KKyAgMHgwMDAwLCAvKiAgIC0gICAxICovCisgIDB4MDAwMCwgLyogICAtICAgMiAqLworICAweDAwMDAsIC8qICAgLSAgIDMgKi8KKyAgMHgwMDAwLCAvKiAgIC0gICA0ICovCisgIDB4MDAwMCwgLyogICAtICAgNSAqLworICAweDAwMDAsIC8qICAgLSAgIDYgKi8KKyAgMHgwMDAwLCAvKiAgIC0gICA3ICovCisgIDB4MDAwMCwgLyogICAtICAgOCAqLworICAweDAwMDgsIC8qICAgLSAgIDkgKi8KKyAgMHgwMDA4LCAvKiAgIC0gIDEwICovCisgIDB4MDAwOCwgLyogICAtICAxMSAqLworICAweDAwMDgsIC8qICAgLSAgMTIgKi8KKyAgMHgwMDA4LCAvKiAgIC0gIDEzICovCisgIDB4MDAwMCwgLyogICAtICAxNCAqLworICAweDAwMDAsIC8qICAgLSAgMTUgKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDE2ICovCisgIDB4MDAwMCwgLyogICAtICAxNyAqLworICAweDAwMDAsIC8qICAgLSAgMTggKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDE5ICovCisgIDB4MDAwMCwgLyogICAtICAyMCAqLworICAweDAwMDAsIC8qICAgLSAgMjEgKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDIyICovCisgIDB4MDAwMCwgLyogICAtICAyMyAqLworICAweDAwMDAsIC8qICAgLSAgMjQgKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDI1ICovCisgIDB4MDAwMCwgLyogICAtICAyNiAqLworICAweDAwMDAsIC8qICAgLSAgMjcgKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDI4ICovCisgIDB4MDAwMCwgLyogICAtICAyOSAqLworICAweDAwMDAsIC8qICAgLSAgMzAgKi8KKyAgMHgwMDAwLCAvKiAgIC0gIDMxICovCisgIDB4MDA0OCwgLyogICAtICAzMiAqLworICAweDAwNDgsIC8qICEgLSAgMzMgKi8KKyAgMHgwNDQ4LCAvKiAiIC0gIDM0ICovIC8qICIgKi8KKyAgMHgwMDQ4LCAvKiAjIC0gIDM1ICovCisgIDB4MDQ0OCwgLyogJCAtICAzNiAqLworICAweDAwNDgsIC8qICUgLSAgMzcgKi8KKyAgMHgwMDQ4LCAvKiAmIC0gIDM4ICovCisgIDB4MDQ0MCwgLyogJyAtICAzOSAqLworICAweDAwNDgsIC8qICggLSAgNDAgKi8KKyAgMHgwMDQ4LCAvKiApIC0gIDQxICovCisgIDB4MDA0OCwgLyogKiAtICA0MiAqLworICAweDAwNDgsIC8qICsgLSAgNDMgKi8KKyAgMHgwMDQ4LCAvKiAsIC0gIDQ0ICovCisgIDB4MDQ0MCwgLyogLSAtICA0NSAqLworICAweDAwNDgsIC8qIC4gLSAgNDYgKi8KKyAgMHgwNDQ4LCAvKiAvIC0gIDQ3ICovCisgIDB4MDA0MCwgLyogMCAtICA0OCAqLworICAweDAwNDAsIC8qIDEgLSAgNDkgKi8KKyAgMHgwMDQwLCAvKiAyIC0gIDUwICovCisgIDB4MDA0MCwgLyogMyAtICA1MSAqLworICAweDAwNDAsIC8qIDQgLSAgNTIgKi8KKyAgMHgwMDQwLCAvKiA1IC0gIDUzICovCisgIDB4MDA0MCwgLyogNiAtICA1NCAqLworICAweDAwNDAsIC8qIDcgLSAgNTUgKi8KKyAgMHgwMDQwLCAvKiA4IC0gIDU2ICovCisgIDB4MDA0MCwgLyogOSAtICA1NyAqLworICAweDAwNDgsIC8qIDogLSAgNTggKi8KKyAgMHgwMDQ4LCAvKiA7IC0gIDU5ICovCisgIDB4MDA0OCwgLyogPCAtICA2MCAqLworICAweDA0NDgsIC8qID0gLSAgNjEgKi8KKyAgMHgwMDQ4LCAvKiA+IC0gIDYyICovCisgIDB4MDA0OCwgLyogPyAtICA2MyAqLworICAweDA0NDgsIC8qIEAgLSAgNjQgKi8KKyAgMHg4MDQwLCAvKiBBIC0gIDY1ICovCisgIDB4ODA0MCwgLyogQiAtICA2NiAqLworICAweDgwNDAsIC8qIEMgLSAgNjcgKi8KKyAgMHg4MDQwLCAvKiBEIC0gIDY4ICovCisgIDB4ODA0MCwgLyogRSAtICA2OSAqLworICAweDgwNDAsIC8qIEYgLSAgNzAgKi8KKyAgMHg4MDQwLCAvKiBHIC0gIDcxICovCisgIDB4ODA0MCwgLyogSCAtICA3MiAqLworICAweDgwNDAsIC8qIEkgLSAgNzMgKi8KKyAgMHg4MDQwLCAvKiBKIC0gIDc0ICovCisgIDB4ODA0MCwgLyogSyAtICA3NSAqLworICAweDgwNDAsIC8qIEwgLSAgNzYgKi8KKyAgMHg4MDQwLCAvKiBNIC0gIDc3ICovCisgIDB4ODA0MCwgLyogTiAtICA3OCAqLworICAweDgwNDAsIC8qIE8gLSAgNzkgKi8KKyAgMHg4MDQwLCAvKiBQIC0gIDgwICovCisgIDB4ODA0MCwgLyogUSAtICA4MSAqLworICAweDgwNDAsIC8qIFIgLSAgODIgKi8KKyAgMHg4MDQwLCAvKiBTIC0gIDgzICovCisgIDB4ODA0MCwgLyogVCAtICA4NCAqLworICAweDgwNDAsIC8qIFUgLSAgODUgKi8KKyAgMHg4MDQwLCAvKiBWIC0gIDg2ICovCisgIDB4ODA0MCwgLyogVyAtICA4NyAqLworICAweDgwNDAsIC8qIFggLSAgODggKi8KKyAgMHg4MDQwLCAvKiBZIC0gIDg5ICovCisgIDB4ODA0MCwgLyogWiAtICA5MCAqLworICAweDAwNDgsIC8qIFsgLSAgOTEgKi8KKyAgMHgwNDQ4LCAvKiBcIC0gIDkyICovCisgIDB4MDA0OCwgLyogXSAtICA5MyAqLworICAweDA0NDgsIC8qIF4gLSAgOTQgKi8KKyAgMHgwNDQ4LCAvKiBfIC0gIDk1ICovCisgIDB4MDQ0OCwgLyogYCAtICA5NiAqLworICAweDgwNDAsIC8qIGEgLSAgOTcgKi8KKyAgMHg4MDQwLCAvKiBiIC0gIDk4ICovCisgIDB4ODA0MCwgLyogYyAtICA5OSAqLworICAweDgwNDAsIC8qIGQgLSAxMDAgKi8KKyAgMHg4MDQwLCAvKiBlIC0gMTAxICovCisgIDB4ODA0MCwgLyogZiAtIDEwMiAqLworICAweDgwNDAsIC8qIGcgLSAxMDMgKi8KKyAgMHg4MDQwLCAvKiBoIC0gMTA0ICovCisgIDB4ODA0MCwgLyogaSAtIDEwNSAqLworICAweDgwNDAsIC8qIGogLSAxMDYgKi8KKyAgMHg4MDQwLCAvKiBrIC0gMTA3ICovCisgIDB4ODA0MCwgLyogbCAtIDEwOCAqLworICAweDgwNDAsIC8qIG0gLSAxMDkgKi8KKyAgMHg4MDQwLCAvKiBuIC0gMTEwICovCisgIDB4ODA0MCwgLyogbyAtIDExMSAqLworICAweDgwNDAsIC8qIHAgLSAxMTIgKi8KKyAgMHg4MDQwLCAvKiBxIC0gMTEzICovCisgIDB4ODA0MCwgLyogciAtIDExNCAqLworICAweDgwNDAsIC8qIHMgLSAxMTUgKi8KKyAgMHg4MDQwLCAvKiB0IC0gMTE2ICovCisgIDB4ODA0MCwgLyogdSAtIDExNyAqLworICAweDgwNDAsIC8qIHYgLSAxMTggKi8KKyAgMHg4MDQwLCAvKiB3IC0gMTE5ICovCisgIDB4ODA0MCwgLyogeCAtIDEyMCAqLworICAweDgwNDAsIC8qIHkgLSAxMjEgKi8KKyAgMHg4MDQwLCAvKiB6IC0gMTIyICovCisgIDB4MDA0OCwgLyogeyAtIDEyMyAqLworICAweDAwNDgsIC8qIHwgLSAxMjQgKi8KKyAgMHgwMDQ4LCAvKiB9IC0gMTI1ICovCisgIDB4MDQ0OCwgLyogfiAtIDEyNiAqLworICAweDAwMDAsIC8qIH8gLSAxMjcgKi8KKyAgMHgwMDAwLCAvKiCAIC0gMTI4ICovCisgIDB4MDAwMCwgLyoggSAtIDEyOSAqLworICAweDAwMDgsIC8qIIIgLSAxMzAgKi8KKyAgMHg4MDAwLCAvKiCDIC0gMTMxICovCisgIDB4MDAwOCwgLyoghCAtIDEzMiAqLworICAweDAwMDgsIC8qIIUgLSAxMzMgKi8KKyAgMHgwMDA4LCAvKiCGIC0gMTM0ICovCisgIDB4MDAwOCwgLyoghyAtIDEzNSAqLworICAweDAwMDEsIC8qIIggLSAxMzYgKi8KKyAgMHgwMDA4LCAvKiCJIC0gMTM3ICovCisgIDB4ODAwMywgLyogiiAtIDEzOCAqLworICAweDAwMDgsIC8qIIsgLSAxMzkgKi8KKyAgMHg4MDAwLCAvKiCMIC0gMTQwICovCisgIDB4MDAwMCwgLyogjSAtIDE0MSAqLworICAweDAwMDAsIC8qII4gLSAxNDIgKi8KKyAgMHgwMDAwLCAvKiCPIC0gMTQzICovCisgIDB4MDAwMCwgLyogkCAtIDE0NCAqLworICAweDAwODgsIC8qIJEgLSAxNDUgKi8KKyAgMHgwMDg4LCAvKiCSIC0gMTQ2ICovCisgIDB4MDA4OCwgLyogkyAtIDE0NyAqLworICAweDAwODgsIC8qIJQgLSAxNDggKi8KKyAgMHgwMDA4LCAvKiCVIC0gMTQ5ICovCisgIDB4MDQwMCwgLyogliAtIDE1MCAqLworICAweDA0MDAsIC8qIJcgLSAxNTEgKi8KKyAgMHgwNDA4LCAvKiCYIC0gMTUyICovCisgIDB4MDAwMCwgLyogmSAtIDE1MyAqLworICAweDgwMDMsIC8qIJogLSAxNTQgKi8KKyAgMHgwMDA4LCAvKiCbIC0gMTU1ICovCisgIDB4ODAwMCwgLyognCAtIDE1NiAqLworICAweDAwMDAsIC8qIJ0gLSAxNTcgKi8KKyAgMHgwMDAwLCAvKiCeIC0gMTU4ICovCisgIDB4ODAwMywgLyognyAtIDE1OSAqLworICAweDAwMDgsIC8qIKAgLSAxNjAgKi8KKyAgMHgwMDA4LCAvKiChIC0gMTYxICovCisgIDB4MDA0OCwgLyogoiAtIDE2MiAqLworICAweDAwNDgsIC8qIKMgLSAxNjMgKi8KKyAgMHgwMDA4LCAvKiCkIC0gMTY0ICovCisgIDB4MDA0OCwgLyogpSAtIDE2NSAqLworICAweDAwNDgsIC8qIKYgLSAxNjYgKi8KKyAgMHgwMDA4LCAvKiCnIC0gMTY3ICovCisgIDB4MDQwOCwgLyogqCAtIDE2OCAqLworICAweDAwMDgsIC8qIKkgLSAxNjkgKi8KKyAgMHgwNDAwLCAvKiCqIC0gMTcwICovCisgIDB4MDAwOCwgLyogqyAtIDE3MSAqLworICAweDAwNDgsIC8qIKwgLSAxNzIgKi8KKyAgMHgwNDA4LCAvKiCtIC0gMTczICovCisgIDB4MDAwOCwgLyogriAtIDE3NCAqLworICAweDA0NDgsIC8qIK8gLSAxNzUgKi8KKyAgMHgwMDA4LCAvKiCwIC0gMTc2ICovCisgIDB4MDAwOCwgLyogsSAtIDE3NyAqLworICAweDAwMDAsIC8qILIgLSAxNzggKi8KKyAgMHgwMDAwLCAvKiCzIC0gMTc5ICovCisgIDB4MDQwOCwgLyogtCAtIDE4MCAqLworICAweDAwMDgsIC8qILUgLSAxODEgKi8KKyAgMHgwMDA4LCAvKiC2IC0gMTgyICovCisgIDB4MDAwOCwgLyogtyAtIDE4MyAqLworICAweDA0MDgsIC8qILggLSAxODQgKi8KKyAgMHgwMDAwLCAvKiC5IC0gMTg1ICovCisgIDB4MDQwMCwgLyoguiAtIDE4NiAqLworICAweDAwMDgsIC8qILsgLSAxODcgKi8KKyAgMHgwMDAwLCAvKiC8IC0gMTg4ICovCisgIDB4MDAwMCwgLyogvSAtIDE4OSAqLworICAweDAwMDAsIC8qIL4gLSAxOTAgKi8KKyAgMHgwMDA4LCAvKiC/IC0gMTkxICovCisgIDB4ODAwMywgLyogwCAtIDE5MiAqLworICAweDgwMDMsIC8qIMEgLSAxOTMgKi8KKyAgMHg4MDAzLCAvKiDCIC0gMTk0ICovCisgIDB4ODAwMywgLyogwyAtIDE5NSAqLworICAweDgwMDMsIC8qIMQgLSAxOTYgKi8KKyAgMHg4MDAzLCAvKiDFIC0gMTk3ICovCisgIDB4ODAwMCwgLyogxiAtIDE5OCAqLworICAweDgwMDMsIC8qIMcgLSAxOTkgKi8KKyAgMHg4MDAzLCAvKiDIIC0gMjAwICovCisgIDB4ODAwMywgLyogySAtIDIwMSAqLworICAweDgwMDMsIC8qIMogLSAyMDIgKi8KKyAgMHg4MDAzLCAvKiDLIC0gMjAzICovCisgIDB4ODAwMywgLyogzCAtIDIwNCAqLworICAweDgwMDMsIC8qIM0gLSAyMDUgKi8KKyAgMHg4MDAzLCAvKiDOIC0gMjA2ICovCisgIDB4ODAwMywgLyogzyAtIDIwNyAqLworICAweDgwMDAsIC8qINAgLSAyMDggKi8KKyAgMHg4MDAzLCAvKiDRIC0gMjA5ICovCisgIDB4ODAwMywgLyog0iAtIDIxMCAqLworICAweDgwMDMsIC8qINMgLSAyMTEgKi8KKyAgMHg4MDAzLCAvKiDUIC0gMjEyICovCisgIDB4ODAwMywgLyog1SAtIDIxMyAqLworICAweDgwMDMsIC8qINYgLSAyMTQgKi8KKyAgMHgwMDA4LCAvKiDXIC0gMjE1ICovCisgIDB4ODAwMywgLyog2CAtIDIxNiAqLworICAweDgwMDMsIC8qINkgLSAyMTcgKi8KKyAgMHg4MDAzLCAvKiDaIC0gMjE4ICovCisgIDB4ODAwMywgLyog2yAtIDIxOSAqLworICAweDgwMDMsIC8qINwgLSAyMjAgKi8KKyAgMHg4MDAzLCAvKiDdIC0gMjIxICovCisgIDB4ODAwMCwgLyog3iAtIDIyMiAqLworICAweDgwMDAsIC8qIN8gLSAyMjMgKi8KKyAgMHg4MDAzLCAvKiDgIC0gMjI0ICovCisgIDB4ODAwMywgLyog4SAtIDIyNSAqLworICAweDgwMDMsIC8qIOIgLSAyMjYgKi8KKyAgMHg4MDAzLCAvKiDjIC0gMjI3ICovCisgIDB4ODAwMywgLyog5CAtIDIyOCAqLworICAweDgwMDMsIC8qIOUgLSAyMjkgKi8KKyAgMHg4MDAwLCAvKiDmIC0gMjMwICovCisgIDB4ODAwMywgLyog5yAtIDIzMSAqLworICAweDgwMDMsIC8qIOggLSAyMzIgKi8KKyAgMHg4MDAzLCAvKiDpIC0gMjMzICovCisgIDB4ODAwMywgLyog6iAtIDIzNCAqLworICAweDgwMDMsIC8qIOsgLSAyMzUgKi8KKyAgMHg4MDAzLCAvKiDsIC0gMjM2ICovCisgIDB4ODAwMywgLyog7SAtIDIzNyAqLworICAweDgwMDMsIC8qIO4gLSAyMzggKi8KKyAgMHg4MDAzLCAvKiDvIC0gMjM5ICovCisgIDB4ODAwMCwgLyog8CAtIDI0MCAqLworICAweDgwMDMsIC8qIPEgLSAyNDEgKi8KKyAgMHg4MDAzLCAvKiDyIC0gMjQyICovCisgIDB4ODAwMywgLyog8yAtIDI0MyAqLworICAweDgwMDMsIC8qIPQgLSAyNDQgKi8KKyAgMHg4MDAzLCAvKiD1IC0gMjQ1ICovCisgIDB4ODAwMywgLyog9iAtIDI0NiAqLworICAweDAwMDgsIC8qIPcgLSAyNDcgKi8KKyAgMHg4MDAzLCAvKiD4IC0gMjQ4ICovCisgIDB4ODAwMywgLyog+SAtIDI0OSAqLworICAweDgwMDMsIC8qIPogLSAyNTAgKi8KKyAgMHg4MDAzLCAvKiD7IC0gMjUxICovCisgIDB4ODAwMywgLyog/CAtIDI1MiAqLworICAweDgwMDMsIC8qIP0gLSAyNTMgKi8KKyAgMHg4MDAwLCAvKiD+IC0gMjU0ICovCisgIDB4ODAwMyAgLyog/yAtIDI1NSAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgR2V0U3RyaW5nVHlwZUEgICAgICAgICAgICAgICAgW09MRTJOTFMuN10KICAqLwpAQCAtMTgwMyw0MCArMTAzOSw2MyBAQAogewogCXJldHVybiBHZXRTdHJpbmdUeXBlRXgzMkEobG9jYWxlLGR3SW5mb1R5cGUsc3JjLGNjaFNyYyxjaGFydHlwZSk7CiB9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgIEdldFN0cmluZ1R5cGVFeEEgICAgICAgICAgICAgICAgW0tFUk5FTDMyLjI3Nl0KKyAqCisgKiBGSVhNRTogSWdub3JlcyB0aGUgbG9jYWxlLgogICovCiBCT09MMzIgV0lOQVBJIEdldFN0cmluZ1R5cGVFeDMyQShMQ0lEIGxvY2FsZSxEV09SRCBkd0luZm9UeXBlLExQQ1NUUiBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjY2hTcmMsTFBXT1JEIGNoYXJ0eXBlKQogewogCWludAlpOwotCi0Jc3dpdGNoIChkd0luZm9UeXBlKSB7Ci0JY2FzZSBDVF9DVFlQRTI6Ci0JCUZJWE1FKG9sZSwiQ1RfQ1RZUEUyIG5vdCBzdXBwb3J0ZWQuXG4iKTsKLQkJcmV0dXJuIEZBTFNFOwotCWNhc2UgQ1RfQ1RZUEUzOgotCQlGSVhNRShvbGUsIkNUX0NUWVBFMyBub3Qgc3VwcG9ydGVkLlxuIik7Ci0JCXJldHVybiBGQUxTRTsKLQlkZWZhdWx0OmJyZWFrOworCQorCWlmICgoc3JjPT1OVUxMKSB8fCAoY2hhcnR5cGU9PU5VTEwpIHx8IChzcmM9PShMUFNUUiljaGFydHlwZSkpCisJeworCSAgU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKKwkgIHJldHVybiBGQUxTRTsKIAl9CisKIAlpZiAoY2NoU3JjPT0tMSkKLQkJY2NoU3JjPWxzdHJsZW4zMkEoc3JjKTsKLQlmb3IgKGk9MDtpPGNjaFNyYztpKyspIHsKLQkJY2hhcnR5cGVbaV0gPSAwOwotCQlpZiAoaXNkaWdpdChzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfRElHSVQ7Ci0JCWlmIChpc2FscGhhKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9BTFBIQTsKLQkJaWYgKGlzbG93ZXIoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0xPV0VSOwotCQlpZiAoaXN1cHBlcihzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfVVBQRVI7Ci0JCWlmIChpc3NwYWNlKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9TUEFDRTsKLQkJaWYgKGlzcHVuY3Qoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX1BVTkNUOwotCQlpZiAoaXNjbnRybChzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQ05UUkw7CisJICBjY2hTcmM9bHN0cmxlbjMyQShzcmMpKzE7CisJICAKKwlzd2l0Y2ggKGR3SW5mb1R5cGUpIHsKKwljYXNlIENUX0NUWVBFMToKKwkgIGZvciAoaT0wO2k8Y2NoU3JjO2krKykgCisJICB7CisJICAgIGNoYXJ0eXBlW2ldID0gMDsKKwkgICAgaWYgKGlzZGlnaXQoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0RJR0lUOworCSAgICBpZiAoaXNhbHBoYShzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQUxQSEE7CisJICAgIGlmIChpc2xvd2VyKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9MT1dFUjsKKwkgICAgaWYgKGlzdXBwZXIoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX1VQUEVSOworCSAgICBpZiAoaXNzcGFjZShzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfU1BBQ0U7CisJICAgIGlmIChpc3B1bmN0KHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9QVU5DVDsKKwkgICAgaWYgKGlzY250cmwoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0NOVFJMOwogLyogRklYTUU6IGlzYmxhbmsoKSBpcyBhIEdOVSBleHRlbnNpb24gKi8KIC8qCQlpZiAoaXNibGFuayhzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQkxBTks7ICovCi0gICAgICAgICAgICAgICAgaWYgKChzcmNbaV0gPT0gJyAnKSB8fCAoc3JjW2ldID09ICdcdCcpKSBjaGFydHlwZVtpXXw9QzFfQkxBTks7Ci0JCS8qIEMxX1hESUdJVCAqLworCSAgICBpZiAoKHNyY1tpXSA9PSAnICcpIHx8IChzcmNbaV0gPT0gJ1x0JykpIGNoYXJ0eXBlW2ldfD1DMV9CTEFOSzsKKwkgICAgLyogQzFfWERJR0lUICovCiAJfQogCXJldHVybiBUUlVFOworCisJY2FzZSBDVF9DVFlQRTI6CisJICBmb3IgKGk9MDtpPGNjaFNyYztpKyspIAorCSAgeworCSAgICBjaGFydHlwZVtpXT0oV09SRClDVF9DVHlwZTJfTFVUW2ldOworCSAgfQorCSAgcmV0dXJuIFRSVUU7CisKKwljYXNlIENUX0NUWVBFMzoKKwkgIGZvciAoaT0wO2k8Y2NoU3JjO2krKykgCisJICB7CisJICAgIGNoYXJ0eXBlW2ldPUNUX0NUeXBlM19MVVRbaV07CisJICB9CisJICByZXR1cm4gVFJVRTsKKworCWRlZmF1bHQ6CisJICBFUlIob2xlLCJVbmtub3duIGR3SW5mb1R5cGU6JWxkXG4iLGR3SW5mb1R5cGUpOworCSAgcmV0dXJuIEZBTFNFOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg2MCw2ICsxMTE5LDEwIEBACiB7CiAJaW50CWk7CiAKKworCWlmIChjY2hTcmM9PS0xKQorCSAgY2NoU3JjPWxzdHJsZW4zMlcoc3JjKSsxOworCQogCXN3aXRjaCAoZHdJbmZvVHlwZSkgewogCWNhc2UgQ1RfQ1RZUEUyOgogCQlGSVhNRShvbGUsIkNUX0NUWVBFMiBub3Qgc3VwcG9ydGVkLlxuIik7CkBAIC0xODY5LDggKzExMzIsNiBAQAogCQlyZXR1cm4gRkFMU0U7CiAJZGVmYXVsdDpicmVhazsKIAl9Ci0JaWYgKGNjaFNyYz09LTEpCi0JCWNjaFNyYz1sc3RybGVuMzJXKHNyYyk7CiAJZm9yIChpPTA7aTxjY2hTcmM7aSsrKSB7CiAJCWNoYXJ0eXBlW2ldID0gMDsKIAkJaWYgKGlzZGlnaXQoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0RJR0lUOwpAQCAtMjQxNyw3ICsxNjc4LDcgQEAKICAgICByZXR1cm4gMDsKICAgfQogICBpZiAoc3JjbGVuPT0tMSkgCi0gICAgc3JjbGVuID0gbHN0cmxlbjMyQShzcmNzdHIpOworICAgIHNyY2xlbiA9IGxzdHJsZW4zMkEoc3Jjc3RyKSArIDEgOyAgICAvKiAoaW5jbHVkZSBmaW5hbCAnXDAnKSAqLwogCiAgIGlmIChtYXBmbGFncyAmIH4gKCBMQ01BUF9VUFBFUkNBU0UgfCBMQ01BUF9MT1dFUkNBU0UgfCBMQ01BUF9TT1JUS0VZIHwKIAkJICAgICBOT1JNX0lHTk9SRUNBU0UgfCBOT1JNX0lHTk9SRU5PTlNQQUNFIHwgU09SVF9TVFJJTkdTT1JUKSApCkBAIC0yNDM0LDEwICsxNjk1LDggQEAKICAgICBpZiAoZHN0bGVuPT0wKQogICAgICAgcmV0dXJuIHNyY2xlbjsgIC8qIGRzdGxlbj0wIG1lYW5zICJkbyBub3RoaW5nIGJ1dCByZXR1cm4gcmVxdWlyZWQgbGVuZ3RoIiAqLwogICAgIGlmIChkc3RsZW48c3JjbGVuKQotICAgIHsKLSAgICAgIFNldExhc3RFcnJvcihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICAgIHNyY2xlbj1kc3RsZW47ICAvKiBObywgdGhpcyBjYXNlIGlzIG5vdCBhbiBlcnJvciB1bmRlciBXaW5kb3dzIDk1LgorCQkgICAgICAgICBBbmQgbm8gJ1wwJyBnZXRzIHdyaXR0ZW4uICovCiAgICAgaWYgKG1hcGZsYWdzICYgTENNQVBfVVBQRVJDQVNFKQogICAgICAgZiA9IHRvdXBwZXI7CiAgICAgZWxzZSBpZiAobWFwZmxhZ3MgJiBMQ01BUF9MT1dFUkNBU0UpCkBAIC0yNTA1LDYgKzE3NjQsMTMgQEAKICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIC8qRklYTUUgdGhlIFBvaW50ZXJjaGVjayBzaG91bGQgbm90IGJlIG5lc3Nlc2FyeSAqLworICAgIGlmIChJc0JhZFdyaXRlUHRyMzIgKGRzdHN0cixyb29tKSkKKyAgICB7IEVSUiAoc3RyaW5nLCJiYWQgZGVzdGluYXRpb24gYnVmZmVyIChkc3RzdHIpIDogJXAsJWRcbiIsZHN0c3RyLGRzdGxlbik7CisgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvKiBsb2NhdGUgZWFjaCBjb21wb25lbnQsIHdyaXRlIHNlcGFyYXRvcnMgKi8KICAgICBkaWFjcml0aWNfY29tcG9uZW50ID0gZHN0c3RyICsgMip1bmljb2RlX2xlbiA7CiAgICAgKmRpYWNyaXRpY19jb21wb25lbnQrKyA9ICdcMSc7IApAQCAtMjU4OSw3ICsxODU1LDcgQEAKICAgICByZXR1cm4gMDsKICAgfQogICBpZiAoc3JjbGVuPT0tMSkgCi0gICAgc3JjbGVuID0gbHN0cmxlbjMyVyhzcmNzdHIpOworICAgIHNyY2xlbiA9IGxzdHJsZW4zMlcoc3Jjc3RyKSsxOwogICBpZiAobWFwZmxhZ3MgJiBMQ01BUF9TT1JUS0VZKSAKICAgewogICAgIEZJWE1FKHN0cmluZywiKDB4JTA0bHgsMHglMDhseCwlcCwlZCwlcCwlZCk6ICIKQEAgLTI2MzUsNyArMTkwMSw4IEBACiB7CiAgIGludCBtYXBzdHJpbmdfZmxhZ3M7CiAgIGludCBsZW4xLGxlbjI7Ci0KKyAgaW50IHJlc3VsdDsKKyAgTFBTVFIgc2sxLHNrMjsKICAgVFJBQ0Uob2xlLCIlcyBhbmQgJXNcbiIsCiAJZGVidWdzdHJfYSAoczEpLCBkZWJ1Z3N0cl9hIChzMikpOwogCkBAIC0yNjQ1LDggKzE5MTIsNiBAQAogICAgIHJldHVybiAwOwogICB9CiAKLSAgaWYoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRU5PTlNQQUNFKQotICAgIEZJWE1FKG9sZSwgIklHTk9SRU5PTlNQQUNFIG5vdCBzdXBwb3J0ZWRcbiIpOwogICBpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFU1lNQk9MUykKICAgICBGSVhNRShvbGUsICJJR05PUkVTWU1CT0xTIG5vdCBzdXBwb3J0ZWRcbiIpOwogICAJCkBAIC0yNjU3LDE3ICsxOTIyLDE5IEBACiAgIGlmICgobGVuMT09MCl8fChsZW4yPT0wKSkKICAgICByZXR1cm4gMDsgICAgIC8qIHNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZCAqLwogCi0gIHsKLSAgICBjaGFyIHNrMVtsZW4xXTsgICAgCi0gICAgY2hhciBzazJbbGVuMl07ICAgIAotICAgIGlmICggKCFMQ01hcFN0cmluZzMyQShsY2lkLG1hcHN0cmluZ19mbGFncyxzMSxsMSxzazEsbGVuMSkpCisgIHNrMSA9IChMUFNUUilIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLGxlbjEpOworICBzazIgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxsZW4yKTsKKyAgaWYgKCAoIUxDTWFwU3RyaW5nMzJBKGxjaWQsbWFwc3RyaW5nX2ZsYWdzLHMxLGwxLHNrMSxsZW4xKSkKIAkgfHwgKCFMQ01hcFN0cmluZzMyQShsY2lkLG1hcHN0cmluZ19mbGFncyxzMixsMixzazIsbGVuMikpICkKLSAgICB7Ci0gICAgICBFUlIob2xlLCJCdWcgaW4gTENtYXBTdHJpbmczMkEuIik7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0cmNtcChzazEsc2syKSsyOworICB7IEVSUihvbGUsIkJ1ZyBpbiBMQ21hcFN0cmluZzMyQS5cbiIpOworICAgIHJlc3VsdCA9IDA7CiAgIH0KKyAgZWxzZQorICB7IHJlc3VsdCA9IHN0cmNtcChzazEsc2syKSsyOworICB9CisgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxzazEpOworICBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsc2syKTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9vbGUvdHlwZWxpYi5jIGIvb2xlL3R5cGVsaWIuYwppbmRleCAxZmZkYmQxLi45N2E1N2JiIDEwMDY0NAotLS0gYS9vbGUvdHlwZWxpYi5jCisrKyBiL29sZS90eXBlbGliLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkqcGF0aCA9IFN5c0FsbG9jU3RyaW5nMTYocGF0aG5hbWUpOwogCXJldHVybiBTX09LOwogfQotCisgCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJUXVlcnlQYXRoT2ZSZWdUeXBlTGliCQkJKE9MRUFVVDMyLjE2NCkKICAqIFJFVFVSTlMKQEAgLTk0LDcgKzk0LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTG9hZFR5cGVMaWIgW1RZUEVMSUIuM10gIExvYWRzIGFuZCByZWdpc3RlcnMgYSB0eXBlIGxpYnJhcnkKLSAqCiAgKiBOT1RFUwogICogICAgRG9jczogT0xFQ0hBUiBGQVIqIHN6RmlsZQogICogICAgRG9jczogaVR5cGVMaWIgRkFSKiBGQVIqIHBwdExpYgpAQCAtMTExLDYgKzExMCw0NSBAQAogICAgIHJldHVybiBFX0ZBSUw7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExvYWRUeXBlTGliCQkJCShPTEVBVVQzMi4xNjEpCisgKiBMb2FkcyBhbmQgcmVnaXN0ZXJzIGEgdHlwZSBsaWJyYXJ5CisgKiBOT1RFUworICogICAgRG9jczogT0xFQ0hBUiBGQVIqIHN6RmlsZQorICogICAgRG9jczogaVR5cGVMaWIgRkFSKiBGQVIqIHBwdExpYgorICoKKyAqIFJFVFVSTlMKKyAqICAgIFN1Y2Nlc3M6IFNfT0sKKyAqICAgIEZhaWx1cmU6IFN0YXR1cworICovCitIUkVTVUxUIFdJTkFQSSBMb2FkVHlwZUxpYjMyKAorICAgIHZvaWQgKnN6RmlsZSwgICAvKiBbaW5dIE5hbWUgb2YgZmlsZSB0byBsb2FkIGZyb20gKi8KKyAgICB2b2lkICogKnBwdExpYikgLyogW291dF0gUG9pbnRlciB0byBwb2ludGVyIHRvIGxvYWRlZCB0eXBlIGxpYnJhcnkgKi8KK3sKKyAgICBGSVhNRShvbGUsICIoJXMsJXApOiBzdHViXG4iLHN6RmlsZSxwcHRMaWIpOworICAgIChsb25nICopcHB0TGliPTB4MTIzOworICAgIHJldHVybiBTX09LOyAgICAgICAgICAgLyogZml4bWU6IHByZXRlbmQgZXZlcnl0aGluZyBpcyBPSyovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlZ2lzdGVyVHlwZUxpYgkJCQkoT0xFQVVUMzIuMTYzKQorICogQWRkcyBpbmZvcm1hdGlvbiBhYm91dCBhIHR5cGUgbGlicmFyeSB0byB0aGUgU3lzdGVtIFJlZ2lzdHJ5ICAgICAgICAgICAKKyAqIE5PVEVTCisgKiAgICBEb2NzOiBJVHlwZUxpYiBGQVIgKiBwdGxpYgorICogICAgRG9jczogT0xFQ0hBUiBGQVIqIHN6RnVsbFBhdGgKKyAqICAgIERvY3M6IE9MRUNIQVIgRkFSKiBzekhlbHBEaXIKKyAqCisgKiBSRVRVUk5TCisgKiAgICBTdWNjZXNzOiBTX09LCisgKiAgICBGYWlsdXJlOiBTdGF0dXMKKyAqLworSFJFU1VMVCBXSU5BUEkgUmVnaXN0ZXJUeXBlTGliMzIoCisgICAgIElUeXBlTGliICogcHRsaWIsICAgICAgLypbaW5dIFBvaW50ZXIgdG8gdGhlIGxpYnJhcnkqLworICAgICBPTEVDSEFSICogc3pGdWxsUGF0aCwgLypbaW5dIGZ1bGwgUGF0aCBvZiB0aGUgbGlicmFyeSovCisgICAgIE9MRUNIQVIgKiBzekhlbHBEaXIpICAvKltpbl0gZGlyIHRvIHRoZSBoZWxwZmlsZSBmb3IgdGhlIGxpYnJhcnksIG1heSBiZSBOVUxMKi8gIAoreyAgIEZJWE1FKG9sZSwgIiglcCwlcywlcyk6IHN0dWJcbiIscHRsaWIsIHN6RnVsbFBhdGgsc3pIZWxwRGlyKTsKKyAgICByZXR1cm4gU19PSzsJLyogZml4bWU6IHByZXRlbmQgZXZlcnl0aGluZyBpcyBPSyovCit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKglPQUJ1aWxkVmVyc2lvbgkJCQkoVFlQRUxJQi4xNSkKZGlmZiAtLWdpdCBhL3JlbGF5MzIvY29tY3RsMzIuc3BlYyBiL3JlbGF5MzIvY29tY3RsMzIuc3BlYwppbmRleCBjZDU4NzFjLi4zZDA0YzA0IDEwMDY0NAotLS0gYS9yZWxheTMyL2NvbWN0bDMyLnNwZWMKKysrIGIvcmVsYXkzMi9jb21jdGwzMi5zcGVjCkBAIC03NSwxMCArNzUsMTAgQEAKICA2OCBzdGRjYWxsIEltYWdlTGlzdF9SZXBsYWNlKHB0ciBsb25nIGxvbmcgbG9uZykgSW1hZ2VMaXN0X1JlcGxhY2UKICA2OSBzdGRjYWxsIEltYWdlTGlzdF9SZXBsYWNlSWNvbihwdHIgbG9uZyBsb25nKSBJbWFnZUxpc3RfUmVwbGFjZUljb24KICA3MCBzdGRjYWxsIEltYWdlTGlzdF9TZXRCa0NvbG9yKHB0ciBsb25nKSBJbWFnZUxpc3RfU2V0QmtDb2xvcgotIDcxIHN0ZGNhbGwgQWxsb2MobG9uZykgQWxsb2MKLSA3MiBzdGRjYWxsIFJlQWxsb2MobG9uZyBsb25nKSBSZUFsbG9jCi0gNzMgc3RkY2FsbCBGcmVlKGxvbmcpIEZyZWUKLSA3NCBzdHViIEdldFNpemUKKyA3MSBzdGRjYWxsIEFsbG9jKGxvbmcpIENPTUNUTDMyX0FsbG9jCisgNzIgc3RkY2FsbCBSZUFsbG9jKGxvbmcgbG9uZykgQ09NQ1RMMzJfUmVBbGxvYworIDczIHN0ZGNhbGwgRnJlZShsb25nKSBDT01DVEwzMl9GcmVlCisgNzQgc3RkY2FsbCBHZXRTaXplKGxvbmcpIENPTUNUTDMyX0dldFNpemUKICA3NSBzdGRjYWxsIEltYWdlTGlzdF9TZXREcmFnQ3Vyc29ySW1hZ2UocHRyIGxvbmcgbG9uZyBsb25nKSBJbWFnZUxpc3RfU2V0RHJhZ0N1cnNvckltYWdlCiAgNzYgc3R1YiBJbWFnZUxpc3RfU2V0RmlsdGVyCiAgNzcgc3RkY2FsbCBJbWFnZUxpc3RfU2V0SWNvblNpemUocHRyIGxvbmcgbG9uZykgSW1hZ2VMaXN0X1NldEljb25TaXplCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogMzIwIHN0ZGNhbGwgRFNBX0NyZWF0ZShsb25nIGxvbmcpIERTQV9DcmVhdGUKIDMyMSBzdGRjYWxsIERTQV9EZXN0cm95KGxvbmcpIERTQV9EZXN0cm95Ci0zMjIgc3R1YiBEU0FfR2V0SXRlbQorMzIyIHN0ZGNhbGwgRFNBX0dldEl0ZW0obG9uZyBsb25nIGxvbmcpIERTQV9HZXRJdGVtCiAzMjMgc3RkY2FsbCBEU0FfR2V0SXRlbVB0cihsb25nIGxvbmcpIERTQV9HZXRJdGVtUHRyCiAzMjQgc3RkY2FsbCBEU0FfSW5zZXJ0SXRlbShsb25nIGxvbmcgbG9uZykgRFNBX0luc2VydEl0ZW0KIDMyNSBzdHViIERTQV9TZXRJdGVtCmRpZmYgLS1naXQgYS9yZWxheTMyL2RwbGF5LnNwZWMgYi9yZWxheTMyL2RwbGF5LnNwZWMKaW5kZXggZDhkYmUyYy4uMmQ2MmNiNSAxMDA2NDQKLS0tIGEvcmVsYXkzMi9kcGxheS5zcGVjCisrKyBiL3JlbGF5MzIvZHBsYXkuc3BlYwpAQCAtMSw1ICsxLDUgQEAKIG5hbWUgZHBsYXkKIHR5cGUgd2luMzIKIAotICAxIHN0dWIgRGlyZWN0UGxheUNyZWF0ZQorICAxIHN0ZGNhbGwgRGlyZWN0UGxheUNyZWF0ZShwdHIgcHRyIHB0ciBwdHIpIERpcmVjdFBsYXlDcmVhdGUKICAgMiBzdHViIERpcmVjdFBsYXlFbnVtZXJhdGUKZGlmZiAtLWdpdCBhL3JlbGF5MzIvZHBsYXl4LnNwZWMgYi9yZWxheTMyL2RwbGF5eC5zcGVjCmluZGV4IGNmZmNlODAuLjQ5YzUxYjcgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvZHBsYXl4LnNwZWMKKysrIGIvcmVsYXkzMi9kcGxheXguc3BlYwpAQCAtMSw5ICsxLDkgQEAKIG5hbWUgZHBsYXl4CiB0eXBlIHdpbjMyCiAKLSAgMSBzdHViIERpcmVjdFBsYXlDcmVhdGUKLSAgMiBzdHViIERpcmVjdFBsYXlFbnVtZXJhdGVBCi0gIDMgc3R1YiBEaXJlY3RQbGF5RW51bWVyYXRlVworICAxIHN0ZGNhbGwgRGlyZWN0UGxheUNyZWF0ZShwdHIgcHRyIHB0ciBwdHIpIERpcmVjdFBsYXlDcmVhdGUKKyAgMiBzdGRjYWxsIERpcmVjdFBsYXlFbnVtZXJhdGVBKHB0ciBwdHIpIERpcmVjdFBsYXlFbnVtZXJhdGVBCisgIDMgc3RkY2FsbCBEaXJlY3RQbGF5RW51bWVyYXRlVyhwdHIgcHRyKSBEaXJlY3RQbGF5RW51bWVyYXRlVwogICA0IHN0ZGNhbGwgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlQShwdHIgcHRyIHB0ciBwdHIgbG9uZykgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlQQogICA1IHN0ZGNhbGwgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVyhwdHIgcHRyIHB0ciBwdHIgbG9uZykgRGlyZWN0UGxheUxvYmJ5Q3JlYXRlVwogICA5IHN0dWIgRGlyZWN0UGxheUVudW1lcmF0ZQpkaWZmIC0tZ2l0IGEvcmVsYXkzMi9rZXJuZWwzMi5zcGVjIGIvcmVsYXkzMi9rZXJuZWwzMi5zcGVjCmluZGV4IGU0MDM0NTEuLjJlMzU2NDIgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIva2VybmVsMzIuc3BlYworKysgYi9yZWxheTMyL2tlcm5lbDMyLnNwZWMKQEAgLTE5MSw3ICsxOTEsNyBAQAogMTc2IHN0dWIgQ3JlYXRlU29ja2V0SGFuZGxlCiAxNzcgc3R1YiBDcmVhdGVUYXBlUGFydGl0aW9uCiAxNzggc3RkY2FsbCBDcmVhdGVUaHJlYWQocHRyIGxvbmcgcHRyIGxvbmcgbG9uZyBwdHIpIENyZWF0ZVRocmVhZAotMTc5IHN0dWIgQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90CisxNzkgc3RkY2FsbCBDcmVhdGVUb29saGVscDMyU25hcHNob3QobG9uZyBsb25nKSBDcmVhdGVUb29saGVscDMyU25hcHNob3QKIDE4MCBzdHViIERlYnVnQWN0aXZlUHJvY2VzcwogIyBGSVhNRQogIzE4MSByZWdpc3RlciBEZWJ1Z0JyZWFrKCkgRGVidWdCcmVhawpAQCAtMzg0LDcgKzM4NCw3IEBACiAzNjcgc3R1YiBHZXRQcml2YXRlUHJvZmlsZVNlY3Rpb25XCiAzNjggc3RkY2FsbCBHZXRQcml2YXRlUHJvZmlsZVN0cmluZ0Eoc3RyIHN0ciBzdHIgcHRyIGxvbmcgc3RyKSBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzMyQQogMzY5IHN0ZGNhbGwgR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmdXKHdzdHIgd3N0ciB3c3RyIHB0ciBsb25nIHdzdHIpIEdldFByaXZhdGVQcm9maWxlU3RyaW5nMzJXCi0zNzAgc3R1YiBHZXRQcml2YXRlUHJvZmlsZVN0cnVjdEEKKzM3MCBzdGRjYWxsIEdldFByaXZhdGVQcm9maWxlU3RydWN0QSAoc3RyIHN0ciBwdHIgbG9uZyBzdHIpIEdldFByaXZhdGVQcm9maWxlU3RydWN0MzJBCiAzNzEgc3R1YiBHZXRQcml2YXRlUHJvZmlsZVN0cnVjdFcKIDM3MiBzdGRjYWxsIEdldFByb2NBZGRyZXNzKGxvbmcgc3RyKSBHZXRQcm9jQWRkcmVzczMyCiAzNzMgc3RkY2FsbCBHZXRQcm9jZXNzQWZmaW5pdHlNYXNrKGxvbmcgcHRyIHB0cikgR2V0UHJvY2Vzc0FmZmluaXR5TWFzawpAQCAtNzIzLDggKzcyMyw4IEBACiA3MDYgc3RkY2FsbCBVbm1hcFZpZXdPZkZpbGUocHRyKSBVbm1hcFZpZXdPZkZpbGUKIDcwNyBzdHViIFVwZGF0ZVJlc291cmNlQQogNzA4IHN0dWIgVXBkYXRlUmVzb3VyY2VXCi03MDkgc3R1YiBWZXJMYW5ndWFnZU5hbWVBCi03MTAgc3R1YiBWZXJMYW5ndWFnZU5hbWVXCis3MDkgc3RkY2FsbCBWZXJMYW5ndWFnZU5hbWVBKGxvbmcgc3RyIGxvbmcpIFZlckxhbmd1YWdlTmFtZTMyQQorNzEwIHN0ZGNhbGwgVmVyTGFuZ3VhZ2VOYW1lVyhsb25nIHdzdHIgbG9uZykgVmVyTGFuZ3VhZ2VOYW1lMzJXCiA3MTEgc3RkY2FsbCBWaXJ0dWFsQWxsb2MocHRyIGxvbmcgbG9uZyBsb25nKSBWaXJ0dWFsQWxsb2MKIDcxMiBzdGRjYWxsIFZpcnR1YWxGcmVlKHB0ciBsb25nIGxvbmcpIFZpcnR1YWxGcmVlCiA3MTMgc3RkY2FsbCBWaXJ0dWFsTG9jayhwdHIgbG9uZykgVmlydHVhbExvY2sKQEAgLTc1OCw3ICs3NTgsNyBAQAogNzQxIHN0dWIgV3JpdGVQcml2YXRlUHJvZmlsZVNlY3Rpb25XCiA3NDIgc3RkY2FsbCBXcml0ZVByaXZhdGVQcm9maWxlU3RyaW5nQShzdHIgc3RyIHN0ciBzdHIpIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmczMkEKIDc0MyBzdGRjYWxsIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmdXKHdzdHIgd3N0ciB3c3RyIHdzdHIpIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmczMlcKLTc0NCBzdHViIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3RBCis3NDQgc3RkY2FsbCBXcml0ZVByaXZhdGVQcm9maWxlU3RydWN0QSAoc3RyIHN0ciBwdHIgbG9uZyBzdHIpIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3QzMkEKIDc0NSBzdHViIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3RXCiA3NDYgc3RkY2FsbCBXcml0ZVByb2Nlc3NNZW1vcnkobG9uZyBwdHIgcHRyIGxvbmcgcHRyKSBXcml0ZVByb2Nlc3NNZW1vcnkKIDc0NyBzdHViIFdyaXRlUHJvZmlsZVNlY3Rpb25BCmRpZmYgLS1naXQgYS9yZWxheTMyL250ZGxsLnNwZWMgYi9yZWxheTMyL250ZGxsLnNwZWMKaW5kZXggMmU0YTdlYy4uYWFmMmQ0MSAxMDA2NDQKLS0tIGEvcmVsYXkzMi9udGRsbC5zcGVjCisrKyBiL3JlbGF5MzIvbnRkbGwuc3BlYwpAQCAtNjUsNyArNjUsNyBAQAogMDYyIHN0dWIgTnRDYW5jZWxJb0ZpbGUKIDA2MyBzdHViIE50Q2FuY2VsVGltZXIKIDA2NCBzdHViIE50Q2xlYXJFdmVudAotMDY1IHN0dWIgTnRDbG9zZQorMDY1IHN0ZGNhbGwgTnRDbG9zZShsb25nKSBOdENsb3NlCiAwNjYgc3R1YiBOdENsb3NlT2JqZWN0QXVkaXRBbGFybQogMDY3IHN0dWIgTnRDb21wbGV0ZUNvbm5lY3RQb3J0CiAwNjggc3R1YiBOdENvbm5lY3RQb3J0CkBAIC0xMjksNyArMTI5LDcgQEAKIDEyNiBzdHViIE50T3BlbkV2ZW50UGFpcgogMTI3IHN0ZGNhbGwgTnRPcGVuRmlsZShwdHIgbG9uZyBwdHIgcHRyIGxvbmcgbG9uZykgTnRPcGVuRmlsZQogMTI4IHN0dWIgTnRPcGVuSW9Db21wbGV0aW9uCi0xMjkgc3R1YiBOdE9wZW5LZXkKKzEyOSBzdGRjYWxsIE50T3BlbktleShwdHIgbG9uZyBwdHIpIE50T3BlbktleQogMTMwIHN0dWIgTnRPcGVuTXV0YW50CiAxMzEgc3R1YiBOdE9wZW5PYmplY3RBdWRpdEFsYXJtCiAxMzIgc3R1YiBOdE9wZW5Qcm9jZXNzCkBAIC0xNTQsNyArMTU0LDcgQEAKIDE1MSBzdHViIE50UXVlcnlFdmVudAogMTUyIHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uRmlsZQogMTUzIHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uUG9ydAotMTU0IHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcworMTU0IHN0ZGNhbGwgTnRRdWVyeUluZm9ybWF0aW9uUHJvY2Vzcyhsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MKIDE1NSBzdHViIE50UXVlcnlJbmZvcm1hdGlvblRocmVhZAogMTU2IHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uVG9rZW4KIDE1NyBzdHViIE50UXVlcnlJbnRlcnZhbFByb2ZpbGUKQEAgLTE3MSw4ICsxNzEsOCBAQAogMTY4IHN0ZGNhbGwgTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uKGxvbmcgbG9uZyBsb25nIGxvbmcpIE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbgogMTY5IHN0dWIgTnRRdWVyeVN5c3RlbVRpbWUKIDE3MCBzdHViIE50UXVlcnlUaW1lcgotMTcxIHN0dWIgTnRRdWVyeVRpbWVyUmVzb2x1dGlvbgotMTcyIHN0dWIgTnRRdWVyeVZhbHVlS2V5CisxNzEgc3RkY2FsbCBOdFF1ZXJ5VGltZXJSZXNvbHV0aW9uKGxvbmcgbG9uZyBsb25nKSBOdFF1ZXJ5VGltZXJSZXNvbHV0aW9uCisxNzIgc3RkY2FsbCBOdFF1ZXJ5VmFsdWVLZXkobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIE50UXVlcnlWYWx1ZUtleQogMTczIHN0dWIgTnRRdWVyeVZpcnR1YWxNZW1vcnkKIDE3NCBzdHViIE50UXVlcnlWb2x1bWVJbmZvcm1hdGlvbkZpbGUKIDE3NSBzdHViIE50UmFpc2VFeGNlcHRpb24KQEAgLTM5OSwxMSArMzk5LDExIEBACiAzOTYgc3R1YiBSdGxJbWFnZURpcmVjdG9yeUVudHJ5VG9EYXRhCiAzOTcgc3RkY2FsbCBSdGxJbWFnZU50SGVhZGVyKGxvbmcpIFJ0bEltYWdlTnRIZWFkZXIKIDM5OCBzdHViIFJ0bEltcGVyc29uYXRlU2VsZgotMzk5IHN0ZGNhbGwgUnRsSW5pdEFuc2lTdHJpbmcocHRyIHB0cikgUnRsSW5pdEFuc2lTdHJpbmcKKzM5OSBzdGRjYWxsIFJ0bEluaXRBbnNpU3RyaW5nKHB0ciBzdHIpIFJ0bEluaXRBbnNpU3RyaW5nCiA0MDAgc3R1YiBSdGxJbml0Q29kZVBhZ2VUYWJsZQogNDAxIHN0dWIgUnRsSW5pdE5sc1RhYmxlcwotNDAyIHN0ZGNhbGwgUnRsSW5pdFN0cmluZyhwdHIgcHRyKSBSdGxJbml0U3RyaW5nCi00MDMgc3RkY2FsbCBSdGxJbml0VW5pY29kZVN0cmluZyhwdHIgcHRyKSBSdGxJbml0VW5pY29kZVN0cmluZworNDAyIHN0ZGNhbGwgUnRsSW5pdFN0cmluZyhwdHIgc3RyKSBSdGxJbml0U3RyaW5nCis0MDMgc3RkY2FsbCBSdGxJbml0VW5pY29kZVN0cmluZyhwdHIgd3N0cikgUnRsSW5pdFVuaWNvZGVTdHJpbmcKIDQwNCBzdHViIFJ0bEluaXRpYWxpemVCaXRNYXAKIDQwNSBzdHViIFJ0bEluaXRpYWxpemVDb250ZXh0CiA0MDYgc3RkY2FsbCBSdGxJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKHB0cikgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbgpkaWZmIC0tZ2l0IGEvcmVsYXkzMi9vbGVhdXQzMi5zcGVjIGIvcmVsYXkzMi9vbGVhdXQzMi5zcGVjCmluZGV4IGFmODA5NTUuLmZlNTdkOTcgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvb2xlYXV0MzIuc3BlYworKysgYi9yZWxheTMyL29sZWF1dDMyLnNwZWMKQEAgLTEzMSw5ICsxMzEsOSBAQAogMTQ5IHN0dWIgU3lzU3RyaW5nQnl0ZUxlbgogMTUwIHN0dWIgU3lzQWxsb2NTdHJpbmdCeXRlTGVuCiAxNjAgc3R1YiBDcmVhdGVUeXBlTGliCi0xNjEgc3R1YiBMb2FkVHlwZUxpYgotMTYyIHN0dWIgTG9hZFJlZ1R5cGVMaWIKLTE2MyBzdHViIFJlZ2lzdGVyVHlwZUxpYgorMTYxIHN0ZGNhbGwgTG9hZFR5cGVMaWIgKHB0ciBwdHIpIExvYWRUeXBlTGliMzIKKzE2MiBzdHViIExvYWRSZWdUeXBlTGliIAorMTYzIHN0ZGNhbGwgUmVnaXN0ZXJUeXBlTGliKHB0ciBzdHIgc3RyKSBSZWdpc3RlclR5cGVMaWIzMgogMTY0IHN0ZGNhbGwgUXVlcnlQYXRoT2ZSZWdUeXBlTGliKHB0ciBsb25nIGxvbmcgbG9uZyBwdHIpIFF1ZXJ5UGF0aE9mUmVnVHlwZUxpYjMyCiAxNjUgc3R1YiBMSGFzaFZhbE9mTmFtZVN5cwogMTY2IHN0dWIgTEhhc2hWYWxPZk5hbWVTeXNBCmRpZmYgLS1naXQgYS9yZWxheTMyL3JlbGF5Mzg2LmMgYi9yZWxheTMyL3JlbGF5Mzg2LmMKaW5kZXggZTU4NmQ0MC4uYmI2Mjk3ZiAxMDA2NDQKLS0tIGEvcmVsYXkzMi9yZWxheTM4Ni5jCisrKyBiL3JlbGF5MzIvcmVsYXkzODYuYwpAQCAtMTgsNiArMTgsNDYgQEAKIGNoYXIgKipkZWJ1Z19yZWxheV9leGNsdWRlbGlzdCA9IE5VTEwsICoqZGVidWdfcmVsYXlfaW5jbHVkZWxpc3QgPSBOVUxMOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBSRUxBWV9TaG93RGVidWdtc2dSZWxheQorICoKKyAqIFNpbXBsZSBmdW5jdGlvbiB0byBkZWNpZGUgaWYgYSBwYXJ0aWN1bGFyIGRlYnVnZ2luZyBtZXNzYWdlIGlzCisgKiB3YW50ZWQuICBDYWxsZWQgZnJvbSBSRUxBWV9DYWxsRnJvbTMyIGFuZCBmcm9tIGluIGlmMTYzMi9yZWxheS5jCisgKi8KK2ludCBSRUxBWV9TaG93RGVidWdtc2dSZWxheShjb25zdCBjaGFyICpmdW5jKSB7CisKKyAgaWYoZGVidWdfcmVsYXlfZXhjbHVkZWxpc3QgfHwgZGVidWdfcmVsYXlfaW5jbHVkZWxpc3QpIHsKKyAgICBjb25zdCBjaGFyICp0ZXJtID0gc3RyY2hyKGZ1bmMsICc6Jyk7CisgICAgY2hhciAqKmxpc3RpdGVtOworICAgIGludCBsZW4sIGxlbjIsIGl0ZW1sZW4sIHNob3c7CisKKyAgICBpZihkZWJ1Z19yZWxheV9leGNsdWRlbGlzdCkgeworICAgICAgc2hvdyA9IDE7CisgICAgICBsaXN0aXRlbSA9IGRlYnVnX3JlbGF5X2V4Y2x1ZGVsaXN0OworICAgIH0gZWxzZSB7CisgICAgICBzaG93ID0gMDsKKyAgICAgIGxpc3RpdGVtID0gZGVidWdfcmVsYXlfaW5jbHVkZWxpc3Q7CisgICAgfQorICAgIGFzc2VydCh0ZXJtKTsKKyAgICBhc3NlcnQoc3RybGVuKHRlcm0pID4gMik7CisgICAgbGVuID0gdGVybSAtIGZ1bmM7CisgICAgbGVuMiA9IHN0cmNocihmdW5jLCAnLicpIC0gZnVuYzsKKyAgICBhc3NlcnQobGVuMiAmJiBsZW4yID4gMCAmJiBsZW4yIDwgNjQpOworICAgIHRlcm0gKz0gMjsKKyAgICBmb3IoOyAqbGlzdGl0ZW07IGxpc3RpdGVtKyspIHsKKyAgICAgIGl0ZW1sZW4gPSBzdHJsZW4oKmxpc3RpdGVtKTsKKyAgICAgIGlmKChpdGVtbGVuID09IGxlbiAmJiAhc3RybmNtcCgqbGlzdGl0ZW0sIGZ1bmMsIGxlbikpIHx8CisgICAgICAgICAoaXRlbWxlbiA9PSBsZW4yICYmICFzdHJuY21wKCpsaXN0aXRlbSwgZnVuYywgbGVuMikpIHx8CisgICAgICAgICAhc3RyY21wKCpsaXN0aXRlbSwgdGVybSkpIHsKKyAgICAgICAgc2hvdyA9ICFzaG93OworICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2hvdzsKKyAgfQorICByZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgUkVMQVlfQ2FsbEZyb20zMgogICoKICAqIFN0YWNrIGxheW91dCBvbiBlbnRyeSB0byB0aGlzIGZ1bmN0aW9uOgpAQCAtMjksNyArNjksNyBAQAogICovCiBpbnQgUkVMQVlfQ2FsbEZyb20zMiggaW50IHJldF9hZGRyLCAuLi4gKQogewotICAgIGludCBpLCByZXQsIHNob3cgPSAxOworICAgIGludCBpLCByZXQsIHNob3c7CiAgICAgY2hhciBidWZmZXJbODBdOwogICAgIEZBUlBST0MzMiBmdW5jOwogICAgIHVuc2lnbmVkIGludCBtYXNrLCB0eXBlbWFzazsKQEAgLTQxLDM2ICs4MSw5IEBACiAgICAgV09SRCBuYl9hcmdzID0gKihXT1JEICopKHJlbGF5X2FkZHIgKyAxKSAvIHNpemVvZihpbnQpOwogCiAgICAgYXNzZXJ0KFRSQUNFX09OKHJlbGF5KSk7Ci0gICAgR0VUX0ZTKCBmcyApOwogICAgIGZ1bmMgPSAoRkFSUFJPQzMyKUJVSUxUSU4zMl9HZXRFbnRyeVBvaW50KCBidWZmZXIsIHJlbGF5X2FkZHIgLSA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZW1hc2sgKTsKLSAgICBpZihkZWJ1Z19yZWxheV9leGNsdWRlbGlzdCB8fCBkZWJ1Z19yZWxheV9pbmNsdWRlbGlzdCkgewotICAgICAgY2hhciAqdGVybSA9IHN0cmNocihidWZmZXIsICc6JyksICoqbGlzdGl0ZW07Ci0gICAgICBpbnQgbGVuLCBsZW4yLCBpdGVtbGVuOwotCi0gICAgICBpZihkZWJ1Z19yZWxheV9leGNsdWRlbGlzdCkgewotCXNob3cgPSAxOwotCWxpc3RpdGVtID0gZGVidWdfcmVsYXlfZXhjbHVkZWxpc3Q7Ci0gICAgICB9IGVsc2UgewotCXNob3cgPSAwOwotCWxpc3RpdGVtID0gZGVidWdfcmVsYXlfaW5jbHVkZWxpc3Q7Ci0gICAgICB9Ci0gICAgICBhc3NlcnQodGVybSk7Ci0gICAgICBhc3NlcnQoc3RybGVuKHRlcm0pID4gMik7Ci0gICAgICBsZW4gPSB0ZXJtIC0gYnVmZmVyOwotICAgICAgbGVuMiA9IHN0cmNocihidWZmZXIsICcuJykgLSBidWZmZXI7Ci0gICAgICBhc3NlcnQobGVuMiAmJiBsZW4yID4gMCAmJiBsZW4yIDwgNjQpOwotICAgICAgdGVybSArPSAyOwotICAgICAgZm9yKDsgKmxpc3RpdGVtOyBsaXN0aXRlbSsrKSB7Ci0gICAgICAgIGl0ZW1sZW4gPSBzdHJsZW4oKmxpc3RpdGVtKTsKLSAgICAgICAgaWYoKGl0ZW1sZW4gPT0gbGVuICYmICFzdHJuY21wKCpsaXN0aXRlbSwgYnVmZmVyLCBsZW4pKSB8fAotICAgICAgICAgICAoaXRlbWxlbiA9PSBsZW4yICYmICFzdHJuY21wKCpsaXN0aXRlbSwgYnVmZmVyLCBsZW4yKSkgfHwKLSAgICAgICAgICAgIXN0cmNtcCgqbGlzdGl0ZW0sIHRlcm0pKSB7Ci0gICAgICAgICAgc2hvdyA9ICFzaG93OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQorICAgIHNob3cgPSBSRUxBWV9TaG93RGVidWdtc2dSZWxheShidWZmZXIpOwogICAgIGlmKHNob3cpIHsKICAgICAgIERQUklOVEYoICJDYWxsICVzKCIsIGJ1ZmZlciApOwogICAgICAgYXJncysrOwpAQCAtODYsOSArOTksMTIgQEAKIAl9CiAgICAgICAgIGVsc2UgRFBSSU5URiggIiUwOHgiLCBhcmdzW2ldICk7CiAgICAgICB9CisgICAgICBHRVRfRlMoIGZzICk7CiAgICAgICBEUFJJTlRGKCAiKSByZXQ9JTA4eCBmcz0lMDR4XG4iLCByZXRfYWRkciwgZnMgKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgewogICAgICAgYXJncysrOworICAgICAgZnMgPSAwOyAvKiBxdWlldGVuIGdjYyAqLworICAgIH0KICAgICBpZiAoKnJlbGF5X2FkZHIgPT0gMHhjMykgLyogY2RlY2wgKi8KICAgICB7CiAgICAgICAgIExSRVNVTFQgKCpjZnVuYykoKSA9IChMUkVTVUxUKCopKCkpZnVuYzsKZGlmZiAtLWdpdCBhL3JlbGF5MzIvc2hlbGwzMi5zcGVjIGIvcmVsYXkzMi9zaGVsbDMyLnNwZWMKaW5kZXggNTYwNzU3OC4uMmJiODEyNiAxMDA2NDQKLS0tIGEvcmVsYXkzMi9zaGVsbDMyLnNwZWMKKysrIGIvcmVsYXkzMi9zaGVsbDMyLnNwZWMKQEAgLTE0Niw3ICsxNDYsNyBAQAogIDE0NCBzdHViIFNIRUxMMzJfMTQ0CiAgMTQ1IHN0dWIgU0hFTEwzMl8xNDUKICAxNDYgc3R1YiBTSEVMTDMyXzE0NgotIDE0NyBzdHViIFNIRUxMMzJfMTQ3CisgMTQ3IHN0ZGNhbGwgU0hFTEwzMl8xNDcobG9uZyBsb25nKSBTSEVMTDMyXzE0NwogIDE0OCBzdHViIEV4dHJhY3RJY29uUmVzSW5mb0EKICAxNDkgc3R1YiBTSEVMTDMyXzE0OQogIDE1MCBzdHViIEV4dHJhY3RJY29uUmVzSW5mb1cKQEAgLTIwOCw3ICsyMDgsNyBAQAogIDIwNiBzdHViIFNIQWRkVG9SZWNlbnREb2NzCiAgMjA3IHN0ZGNhbGwgU0hBcHBCYXJNZXNzYWdlKGxvbmcgcHRyKSBTSEFwcEJhck1lc3NhZ2UzMgogIDIwOCBzdHViIFNIQnJvd3NlRm9yRm9sZGVyCi0gMjA5IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJBCisgMjA5IHN0ZGNhbGwgU0hCcm93c2VGb3JGb2xkZXJBKHB0cikgU0hCcm93c2VGb3JGb2xkZXIzMkEKICAyMTAgc3R1YiBTSENoYW5nZU5vdGlmeQogIDIxMSBzdHViIFNIRmlsZU9wZXJhdGlvbgogIDIxMiBzdHViIFNIRmlsZU9wZXJhdGlvbkEKZGlmZiAtLWdpdCBhL3JlbGF5MzIvc25vb3AuYyBiL3JlbGF5MzIvc25vb3AuYwppbmRleCAwNjFmYWQyLi5mNGExMmZiIDEwMDY0NAotLS0gYS9yZWxheTMyL3Nub29wLmMKKysrIGIvcmVsYXkzMi9zbm9vcC5jCkBAIC0xOSwxMyArMTksMTUgQEAKICNpbmNsdWRlICJkZWJ1Z3N0ci5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK2NoYXIgKipkZWJ1Z19zbm9vcF9leGNsdWRlbGlzdCA9IE5VTEwsICoqZGVidWdfc25vb3BfaW5jbHVkZWxpc3QgPSBOVUxMOworCiAjaWZkZWYgTkVFRF9VTkRFUlNDT1JFX1BSRUZJWAogIyBkZWZpbmUgUFJFRklYICJfIgogI2Vsc2UKICMgZGVmaW5lIFBSRUZJWAogI2VuZGlmCiAKLS8qIFdlbGwgLG5vdCBleGFjdGx5IGV4dGVybiBzaW5jZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBmaWxlIChpbiB0aGUgbGluZXMKKy8qIFdlbGwsIG5vdCBleGFjdGx5IGV4dGVybiBzaW5jZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBmaWxlIChpbiB0aGUgbGluZXMKICAqIGJlbG93KS4gQnV0IHRoZSBDIENvbXBpbGVyIGRvZXNuJ3Qgc2VlIHRoZW0gdGhlcmUsIHNvIHdlIGhhdmUgdG8gaGVscCBhIGJpdC4KICAqLwogZXh0ZXJuIHZvaWQgU05PT1BfUmV0dXJuKCk7CkBAIC04MSw2ICs4Myw3IEBACiAJRFdPUkQJCW9yZGluYWw7CiAJRFdPUkQJCW9yaWdFU1A7CiAJRFdPUkQJCSphcmdzOwkJLyogc2F2ZWQgYXJncyBhY3Jvc3MgYSBzdGRjYWxsICovCisJQllURQkJc2hvdzsKIH0gU05PT1BfUkVUVVJORU5UUlk7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NOT09QX1JFVFVSTkVOVFJJRVMgewpAQCAtOTMsNiArOTYsNDQgQEAKIHN0YXRpYwlTTk9PUF9ETEwJCSpmaXJzdGRsbCA9IE5VTEw7CiBzdGF0aWMJU05PT1BfUkVUVVJORU5UUklFUyAJKmZpcnN0cmV0cyA9IE5VTEw7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgU05PT1BfU2hvd0RlYnVnbXNnU25vb3AKKyAqCisgKiBTaW1wbGUgZnVuY3Rpb24gdG8gZGVjaWRlIGlmIGEgcGFydGljdWxhciBkZWJ1Z2dpbmcgbWVzc2FnZSBpcworICogd2FudGVkLgorICovCitpbnQgU05PT1BfU2hvd0RlYnVnbXNnU25vb3AoY29uc3QgY2hhciAqZGxsLCBpbnQgb3JkLCBjb25zdCBjaGFyICpmbmFtZSkgeworCisgIGlmKGRlYnVnX3Nub29wX2V4Y2x1ZGVsaXN0IHx8IGRlYnVnX3Nub29wX2luY2x1ZGVsaXN0KSB7CisgICAgY2hhciAqKmxpc3RpdGVtOworICAgIGNoYXIgYnVmWzgwXTsKKyAgICBpbnQgbGVuLCBsZW4yLCBpdGVtbGVuLCBzaG93OworCisgICAgaWYoZGVidWdfc25vb3BfZXhjbHVkZWxpc3QpIHsKKyAgICAgIHNob3cgPSAxOworICAgICAgbGlzdGl0ZW0gPSBkZWJ1Z19zbm9vcF9leGNsdWRlbGlzdDsKKyAgICB9IGVsc2UgeworICAgICAgc2hvdyA9IDA7CisgICAgICBsaXN0aXRlbSA9IGRlYnVnX3Nub29wX2luY2x1ZGVsaXN0OworICAgIH0KKyAgICBsZW4gPSBzdHJsZW4oZGxsKTsKKyAgICBhc3NlcnQobGVuIDwgNjQpOworICAgIHNwcmludGYoYnVmLCAiJXMuJWQiLCBkbGwsIG9yZCk7CisgICAgbGVuMiA9IHN0cmxlbihidWYpOworICAgIGZvcig7ICpsaXN0aXRlbTsgbGlzdGl0ZW0rKykgeworICAgICAgaXRlbWxlbiA9IHN0cmxlbigqbGlzdGl0ZW0pOworICAgICAgaWYoKGl0ZW1sZW4gPT0gbGVuICYmICFzdHJuY21wKCpsaXN0aXRlbSwgYnVmLCBsZW4pKSB8fAorICAgICAgICAgKGl0ZW1sZW4gPT0gbGVuMiAmJiAhc3RybmNtcCgqbGlzdGl0ZW0sIGJ1ZiwgbGVuMikpIHx8CisgICAgICAgICAhc3RyY21wKCpsaXN0aXRlbSwgZm5hbWUpKSB7CisgICAgICAgIHNob3cgPSAhc2hvdzsKKyAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNob3c7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKIHZvaWQKIFNOT09QX1JlZ2lzdGVyRExMKEhNT0RVTEUzMiBobW9kLExQQ1NUUiBuYW1lLERXT1JEIG5yb2ZvcmRpbmFscykgewogCVNOT09QX0RMTAkqKmRsbCA9ICYoZmlyc3RkbGwpOwpAQCAtMTM2LDcgKzE3Nyw3IEBACiAJCSAgICAJCSAgIHBlX3NlZ1tqXS5TaXplT2ZSYXdEYXRhKQogCQkpCiAJCQlicmVhazsKLQkvKiBJZiB3ZSBsb29rZWQgdGhyb3VnaCBhbGwgc2VjdGlvbnMgKGFuZCBkaWRuJ3QgZmluZCBvbmUpIAorCS8qIElmIHdlIGxvb2tlZCB0aHJvdWdoIGFsbCBzZWN0aW9ucyAoYW5kIGRpZG4ndCBmaW5kIG9uZSkKIAkgKiBvciBpZiB0aGUgc2VjdGlvbm5hbWUgY29udGFpbnMgImRhdGEiLCB3ZSByZXR1cm4gdGhlCiAJICogb3JpZ2luYWwgZnVuY3Rpb24gc2luY2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBkYXRhcmVmZXJlbmNlLgogCSAqLwpAQCAtMjI1LDcgKzI2Niw3IEBACiAJU05PT1BfRlVOCSpmdW4gPSBOVUxMOwogCVNOT09QX1JFVFVSTkVOVFJJRVMJKipyZXRzID0gJmZpcnN0cmV0czsKIAlTTk9PUF9SRVRVUk5FTlRSWQkqcmV0OwotCWludAkJaSxtYXg7CisJaW50CQlpLG1heCxzaG93OwogCiAJd2hpbGUgKGRsbCkgewogCQlpZiAoCSgoY2hhciopZW50cnk+PShjaGFyKilkbGwtPmZ1bnMpCSYmCkBAIC0yNDQsNyArMjg1LDcgQEAKIAkvKiBndWVzcyBjZGVjbCAuLi4gKi8KIAlpZiAoZnVuLT5ucm9mYXJnczwwKSB7CiAJCS8qIFR5cGljYWwgY2RlY2wgcmV0dXJuIGZyYW1lIGlzOgotCQkgKiAJYWRkIGVzcCwgeHh4eHh4eHggCisJCSAqIAlhZGQgZXNwLCB4eHh4eHh4eAogCQkgKiB3aGljaCBoYXMgKGZvciB4eHh4eHh4eCB1cCB0byAyNTUgdGhlIG9wY29kZSAiODMgQzQgeHgiLgogCQkgKi8KIAkJTFBCWVRFCXJldGVpcCA9IChMUEJZVEUpQ0FMTEVSMVJFRjsKQEAgLTI3OSw2ICszMjAsOCBAQAogCiAJRUlQX3JlZyhjb250ZXh0KT0gKERXT1JEKWZ1bi0+b3JpZ2Z1bjsKIAorCXJldC0+c2hvdyA9IFNOT09QX1Nob3dEZWJ1Z21zZ1Nub29wKGRsbC0+bmFtZSwgb3JkaW5hbCwgZnVuLT5uYW1lKTsKKwlpZighcmV0LT5zaG93KSByZXR1cm47CiAJRFBSSU5URigiQ2FsbCAlcy4lbGQ6ICVzKCIsZGxsLT5uYW1lLG9yZGluYWwsZnVuLT5uYW1lKTsKIAlpZiAoZnVuLT5ucm9mYXJncz4wKSB7CiAJCW1heCA9IGZ1bi0+bnJvZmFyZ3M7IGlmIChtYXg+MTYpIG1heD0xNjsKQEAgLTI5OCwxNCArMzQxLDE2IEBACiAJU05PT1BfUkVUVVJORU5UUlkJKnJldCA9IChTTk9PUF9SRVRVUk5FTlRSWSopKEVJUF9yZWcoY29udGV4dCktNSk7CiAKIAkvKiBXZSBoYXZlbid0IGZvdW5kIG91dCB0aGUgbnJvZmFyZ3MgeWV0LiBJZiB3ZSBjYWxsZWQgYSBjZGVjbAotCSAqIGZ1bmN0aW9uIGl0IGlzIHRvbyBsYXRlIGFueXdheSBhbmQgd2UgY2FuIGp1c3Qgc2V0ICcwJyAod2hpY2ggCisJICogZnVuY3Rpb24gaXQgaXMgdG9vIGxhdGUgYW55d2F5IGFuZCB3ZSBjYW4ganVzdCBzZXQgJzAnICh3aGljaAogCSAqIHdpbGwgYmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnIGFuZCBjdXJyZW50IEVTUAogCSAqIElmIHN0ZGNhbGwgLT4gZXZlcnl0aGluZyBvay4KIAkgKi8KIAlpZiAocmV0LT5kbGwtPmZ1bnNbcmV0LT5vcmRpbmFsXS5ucm9mYXJnczwwKQogCQlyZXQtPmRsbC0+ZnVuc1tyZXQtPm9yZGluYWxdLm5yb2ZhcmdzPShFU1BfcmVnKGNvbnRleHQpLXJldC0+b3JpZ0VTUC00KS80OwogCUVJUF9yZWcoY29udGV4dCkgPSAoRFdPUkQpcmV0LT5vcmlncmV0dXJuOwotCWlmIChyZXQtPmFyZ3MpIHsKKwlpZighcmV0LT5zaG93KSB7CisJCTsKKwl9IGVsc2UgaWYgKHJldC0+YXJncykgewogCQlpbnQJaSxtYXg7CiAKIAkJRFBSSU5URigiUmV0ICAlcy4lbGQ6ICVzKCIscmV0LT5kbGwtPm5hbWUscmV0LT5vcmRpbmFsLHJldC0+ZGxsLT5mdW5zW3JldC0+b3JkaW5hbF0ubmFtZSk7CmRpZmYgLS1naXQgYS9zY2hlZHVsZXIvc3lzZGVwcy5jIGIvc2NoZWR1bGVyL3N5c2RlcHMuYwppbmRleCA4NTk5YzVmLi5kNzY5ODhhIDEwMDY0NAotLS0gYS9zY2hlZHVsZXIvc3lzZGVwcy5jCisrKyBiL3NjaGVkdWxlci9zeXNkZXBzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlICJ0aHJlYWQuaCIKICNpbmNsdWRlICJ3aW5iYXNlLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAogLyogWGxpYiBjcml0aWNhbCBzZWN0aW9uIChGSVhNRTogZG9lcyBub3QgYmVsb25nIGhlcmUpICovCiBDUklUSUNBTF9TRUNUSU9OIFgxMURSVl9Dcml0U2VjdGlvbiA9IHsgMCwgfTsKZGlmZiAtLWdpdCBhL3NjaGVkdWxlci90aHJlYWQuYyBiL3NjaGVkdWxlci90aHJlYWQuYwppbmRleCBlOWQyN2IxLi4xMTM3ZDM1IDEwMDY0NAotLS0gYS9zY2hlZHVsZXIvdGhyZWFkLmMKKysrIGIvc2NoZWR1bGVyL3RocmVhZC5jCkBAIC02OTAsMTIgKzY5MCwzNiBAQAogICogUkVUVVJOUwogICogICAgU3VjY2VzczogUHJldmlvdXMgc3VzcGVuZCBjb3VudAogICogICAgRmFpbHVyZTogMHhGRkZGRkZGRgorICogICAgQWxyZWFkeSBydW5uaW5nOiAwCiAgKi8KIERXT1JEIFdJTkFQSSBSZXN1bWVUaHJlYWQoCi0gICAgSEFORExFMzIgaGFuZGxlKSAvKiBbaW5dIEluZGVudGlmaWVzIHRocmVhZCB0byByZXN0YXJ0ICovCisgICAgSEFORExFMzIgaHRocmVhZCkgLyogW2luXSBJbmRlbnRpZmllcyB0aHJlYWQgdG8gcmVzdGFydCAqLwogewotICAgIEZJWE1FKHRocmVhZCwiKDB4JTA4eCk6IHN0dWJcbiIsaGFuZGxlKTsKLSAgICByZXR1cm4gMHhGRkZGRkZGRjsKKyAgICBUSERCICp0aHJlYWQ7CisgICAgRFdPUkQgb2xkY291bnQ7CisKKyAgICBTWVNURU1fTE9DSygpOworICAgIGlmICghKHRocmVhZCA9IFRIUkVBRF9HZXRQdHIoIGh0aHJlYWQsIFRIUkVBRF9RVUVSWV9JTkZPUk1BVElPTiApKSkKKyAgICB7CisgICAgICAgIFNZU1RFTV9VTkxPQ0soKTsKKyAgICAgICAgV0FSTih0aHJlYWQsICJJbnZhbGlkIHRocmVhZCBoYW5kbGVcbiIpOworCXJldHVybiAweEZGRkZGRkZGOworICAgIH0KKyAgICBpZiAoKG9sZGNvdW50ID0gdGhyZWFkLT5zdXNwZW5kX2NvdW50KSAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKCEtLXRocmVhZC0+c3VzcGVuZF9jb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtpbGwodGhyZWFkLT51bml4X3BpZCwgU0lHQ09OVCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgV0FSTih0aHJlYWQsICJVbmFibGUgdG8gQ09OVGludWUgcGlkOiAlMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLT51bml4X3BpZCk7CisgICAgICAgICAgICAgICAgb2xkY291bnQgPSAweEZGRkZGRkZGOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEszMk9CSl9EZWNDb3VudCgmdGhyZWFkLT5oZWFkZXIpOworICAgIFNZU1RFTV9VTkxPQ0soKTsKKyAgICByZXR1cm4gb2xkY291bnQ7CiB9CiAKIApAQCAtNzA3LDEwICs3MzEsMzkgQEAKICAqICAgIEZhaWx1cmU6IDB4RkZGRkZGRkYKICAqLwogRFdPUkQgV0lOQVBJIFN1c3BlbmRUaHJlYWQoCi0gICAgSEFORExFMzIgaGFuZGxlKSAvKiBbaW5dIEhhbmRsZSB0byB0aGUgdGhyZWFkICovCisgICAgSEFORExFMzIgaHRocmVhZCkgLyogW2luXSBIYW5kbGUgdG8gdGhlIHRocmVhZCAqLwogewotICAgIEZJWE1FKHRocmVhZCwiKDB4JTA4eCk6IHN0dWJcbiIsaGFuZGxlKTsKLSAgICByZXR1cm4gMHhGRkZGRkZGRjsKKyAgICBUSERCICp0aHJlYWQ7CisgICAgRFdPUkQgb2xkY291bnQ7CisKKyAgICBTWVNURU1fTE9DSygpOworICAgIGlmICghKHRocmVhZCA9IFRIUkVBRF9HZXRQdHIoIGh0aHJlYWQsIFRIUkVBRF9RVUVSWV9JTkZPUk1BVElPTiApKSkKKyAgICB7CisgICAgICAgIFNZU1RFTV9VTkxPQ0soKTsKKyAgICAgICAgV0FSTih0aHJlYWQsICJJbnZhbGlkIHRocmVhZCBoYW5kbGVcbiIpOworCXJldHVybiAweEZGRkZGRkZGOworICAgIH0KKyAgICAKKyAgICBpZiAoIShvbGRjb3VudCA9IHRocmVhZC0+c3VzcGVuZF9jb3VudCkpCisgICAgeworICAgICAgICBpZiAodGhyZWFkLT51bml4X3BpZCA9PSBnZXRwaWQoKSkKKyAgICAgICAgICAgIFdBUk4odGhyZWFkLCAiQXR0ZW1wdGluZyB0byBzdXNwZW5kIG15c2VsZlxuIiApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraWxsKHRocmVhZC0+dW5peF9waWQsIFNJR1NUT1ApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFdBUk4odGhyZWFkLCAiVW5hYmxlIHRvIFNUT1AgcGlkOiAlMDR4XG4iLCAKKyAgICAgICAgICAgICAgICAgICAgIHRocmVhZC0+dW5peF9waWQpOworICAgICAgICAgICAgICAgIG9sZGNvdW50ID0gMHhGRkZGRkZGRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgdGhyZWFkLT5zdXNwZW5kX2NvdW50Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB0aHJlYWQtPnN1c3BlbmRfY291bnQrKzsKKyAgICBLMzJPQkpfRGVjQ291bnQoICZ0aHJlYWQtPmhlYWRlciApOworICAgIFNZU1RFTV9VTkxPQ0soKTsKKyAgICByZXR1cm4gb2xkY291bnQ7CisKIH0KIAogCmRpZmYgLS1naXQgYS90b29scy9idWlsZC5jIGIvdG9vbHMvYnVpbGQuYwppbmRleCBmMDU2NGQ0Li5jMTE5MTM2IDEwMDY0NAotLS0gYS90b29scy9idWlsZC5jCisrKyBiL3Rvb2xzL2J1aWxkLmMKQEAgLTE2Nyw2ICsxNjcsOSBAQAogICAvKiBPZmZzZXQgb2YgdGhlIHN0YWNrIHBvaW50ZXIgcmVsYXRpdmUgdG8gJWZzOigwKSAqLwogI2RlZmluZSBTVEFDS09GRlNFVCAoU1RSVUNUT0ZGU0VUKFRIREIsY3VyX3N0YWNrKSAtIFNUUlVDVE9GRlNFVChUSERCLHRlYikpCiAKKyAgLyogT2Zmc2V0IG9mIHRoZSBzYXZlZCBmcyByZWxhdGl2ZSB0byAlZnM6KDApICovCisjZGVmaW5lIEZTT0ZGU0VUIChTVFJVQ1RPRkZTRVQoVEhEQixzYXZlZF9mcykgLSBTVFJVQ1RPRkZTRVQoVEhEQix0ZWIpKQorCiAKIHN0YXRpYyB2b2lkICp4bWFsbG9jIChzaXplX3Qgc2l6ZSkKIHsKQEAgLTE2MDUsNyArMTYwOCwxMCBAQAogICAgIGZwcmludGYoIG91dGZpbGUsICJcdGRhdGExNlxuIik7CiAjZW5kaWYKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICUlYngsJSVlc1xuIiApOworCisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAlJWZzLCAlJWJ4XG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAiIFBSRUZJWCAiQ0FMTFRPMTZfQ3VycmVudF9mcywlJWZzXG4iICk7CisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0LmJ5dGUgMHg2NFxuXHRtb3Z3ICUlYngsKCVkKVxuIiwgRlNPRkZTRVQgKTsKIAogICAgIC8qIEdldCB0aGUgMzItYml0IHN0YWNrIHBvaW50ZXIgZnJvbSB0aGUgVEVCICovCiAKQEAgLTE3MjQsNiArMTczMCw5IEBACiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0LmJ5dGUgMHg2NFxuXHRwb3BsICglZClcbiIsIFNUQUNLT0ZGU0VUICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAlJWZzLCIgUFJFRklYICJDQUxMVE8xNl9DdXJyZW50X2ZzXG4iICk7CiAKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuYnl0ZSAweDY0XG5cdG1vdncgKCVkKSwlJWJ4XG4iLCBGU09GRlNFVCApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVieCwgJSVmc1xuIiApOworCiAgICAgaWYgKHJlZ19mdW5jKQogICAgIHsKICAgICAgICAgLyogQ2FsYyB0aGUgYXJndW1lbnRzIHNpemUgKi8KQEAgLTE5MDksNiArMTkxOCw5IEBACiAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdmwgJSVlYXgsJSVlc3BcbiIgKTsKICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0LmJ5dGUgMHg2NFxuXHRtb3ZsICUlZWR4LCglZClcbiIsIFNUQUNLT0ZGU0VUICk7CiAKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuYnl0ZSAweDY0XG5cdG1vdncgKCVkKSwlJWN4XG4iLCBGU09GRlNFVCApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVjeCwgJSVmc1xuIiApOworCiAgICAgICAgIC8qIEdldCB0aGUgcmVnaXN0ZXJzLiBlYnggaXMgaGFuZGxlZCBsYXRlciBvbi4gKi8KIAogICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3ZsIDgoJSVlYngpLCUlZWJ4XG4iICk7CkBAIC0xOTU5LDYgKzE5NzEsOSBAQAogICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuYnl0ZSAweDY0XG5cdG1vdncgKCVkKSwlJXNwXG4iLCBTVEFDS09GRlNFVCApOwogICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuYnl0ZSAweDY0XG5cdG1vdmwgJSVlZHgsKCVkKVxuIiwgU1RBQ0tPRkZTRVQgKTsKIAorICAgIGZwcmludGYoIG91dGZpbGUsICJcdC5ieXRlIDB4NjRcblx0bW92dyAoJWQpLCUlY3hcbiIsIEZTT0ZGU0VUICk7CisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAlJWN4LCAlJWZzXG4iICk7CisKICAgICAgICAgLyogTWFrZSAlYnAgcG9pbnQgdG8gdGhlIHByZXZpb3VzIHN0YWNrZnJhbWUgKGJ1aWx0IGJ5IENhbGxGcm9tMTYpICovCiAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdnp3bCAlJXNwLCUlZWJwXG4iICk7CiAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdGxlYWwgJWQoJSVlYnApLCUlZWJwXG4iLApAQCAtMjAzOSw3ICsyMDU0LDEwIEBACiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0ZGF0YTE2XG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVieCwlJWVzXG4iICk7CisKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICUlZnMsICUlY3hcbiIgKTsKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICIgUFJFRklYICJDQUxMVE8xNl9DdXJyZW50X2ZzLCUlZnNcbiIgKTsKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuYnl0ZSAweDY0XG5cdG1vdncgJSVjeCwoJWQpXG4iLCBGU09GRlNFVCApOwogCiAgICAgLyogUmVzdG9yZSB0aGUgMzItYml0IHN0YWNrICovCiAKQEAgLTIwNjgsMTEgKzIwODYsOSBAQAogICAgIGZwcmludGYoIG91dGZpbGUsICJcdC5nbG9ibCAiIFBSRUZJWCAiQ0FMTFRPMTZfUmV0QWRkcl93b3JkXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMVE8xNl9SZXRBZGRyX2xvbmdcbiIgKTsKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHQuZ2xvYmwgIiBQUkVGSVggIkNBTExUTzE2X1JldEFkZHJfZWF4XG4iICk7Ci0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0Lmdsb2JsICIgUFJFRklYICJDQUxMVE8xNl9DdXJyZW50X2ZzXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgUFJFRklYICJDQUxMVE8xNl9SZXRBZGRyX3dvcmQ6XHQubG9uZyAwXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgUFJFRklYICJDQUxMVE8xNl9SZXRBZGRyX2xvbmc6XHQubG9uZyAwXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgUFJFRklYICJDQUxMVE8xNl9SZXRBZGRyX2VheDpcdC5sb25nIDBcbiIgKTsKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCBQUkVGSVggIkNBTExUTzE2X0N1cnJlbnRfZnM6XHQubG9uZyAwXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0LnRleHRcbiIgKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvd3JjL0NIQU5HRVMgYi90b29scy93cmMvQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFkNTYyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvd3JjL0NIQU5HRVMKQEAgLTAsMCArMSwzMSBAQAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMS4wLjIgKDIwLUp1bi0xOTk4KQorLSBTdGFydGVkIHRoaXMgZmlsZQorLSBGaXhlZCBhIGJ1ZyBpbiBmaWxlbmFtZSBzY2FubmluZyB3aGVuIHRoZXkgYXJlIGRvdWJsZSBxdW90ZWQuIFRoZSBjb2RlIG5vdworICBpcyBjb21wYXRpYmxlIHdpdGggTVMnIHJjIGFuZCBCb3JsYW5kJ3MgYnJjLiBUaGVyZSBpcyBhIGNvbXByb21pc2UgaW4gdGhlCisgIGZpbGVuYW1lcyBiZWNhdXNlIG9mIGNhc2Utc2Vuc2l0aXZpdHkgdW5kZXIgKm5peC4KKy0gQmFja3NsYXNoZXMgaW4gYSBmaWxlcGF0aCBhcmUgbm93IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXMgYW5kIGRvdWJsZQorLSBGaXhlZCBhIGJ1ZyBpbiBwcmludGluZyB0aGUgZmlsZW5hbWUgaWYgbG9hZGluZyBvZiBhIGZpbGUgc2hvdWxkIGZhaWwuCisgIGJhY2tzbGFzaGVzIGFyZSBjb252ZXJ0ZWQgdG8gc2luZ2xlIGZvcndhcmQgc2xhc2guCistIEFkZGVkIC1MIG9wdGlvbiB0byBwcmV2ZW50IGNvbnZlcnNpb24gdG8gbG93ZXIgY2FzZSBmb3IgZW1iZWRkZWQgZmlsZW5hbWVzCisgIGluIHJlc291cmNlIHN0YXRlbWVudHMuCistIEFkZGVkIGxhbmd1YWdlIHBvc2liaWxpdGllcyB0byBpY29ucyBhbmQgY3Vyc29ycyBzbyB0aGF0IHRoZSBjdXJyZW50CisgIGxhbmd1YWdlIGlzIHB1dCBpbnRvIHRoZSAucmVzIGFucyAucyBmaWxlLgorLSBBZGRlZCBjaGFyYWN0ZXIgcG9zaXRpb24gaW5kaWNhdGlvbiBvZiBhbiBlcnJvci4KKy0gRml4ZWQgQ0xBU1Mgc3RhdGVtZW50IHNvIHRoYXQgaXQgYWNjZXB0cyBkb3VibGUgcXVvdGVkIHN0cmluZ3MgYXMgY2xhc3MKKyAgYXJndW1lbnQuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcnJlY3QgYmVoYXZpb3VyIChzZWUgU0RLKS4gVGhlIHVucXVvdGVkCisgIGNsYXNzLW5hbWUgaXMgc3RpbGwgc3VwcG9ydGVkIGJlY2F1c2UgaXQgc2VlbXMgYSByZWFzb25hYmxlIG9wdGlvbi4KKy0gRml4ZWQgYWNjZWxlcmF0b3JzIHdpdGggQ09OVFJPTCBvcHRpb24gc2V0IHNvIHRoYXQgdGhleSBnZW5lcmF0ZSBjb3JyZWN0CisgIGNvZGUgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIGVycm9yLgorLSBBZGRlZCB0ZXN0aW5nIGZvciBmbGV4IHZlcnNpb24gMi41IG9yIGJldHRlciBiZWNhdXNlIHdyYyBuZWVkcyB0aGUKKyAgeXlfc2NhbiogZnVuY3Rpb25zIHRvIGRvIHByZXByb2Nlc3NpbmcuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVmVyc2lvbiAgMS4wLjEgKDA4LUp1bi0xOTk4KQorLSBBZGRlZCAtQSBjb21tYW5kbGluZSBvcHRpb24gdG8gZ2VuZXJhdGUgYXV0b3JlZ2lzdGVyIGNvZGUgZm9yIHRoZSB3aW5lbGliCisgIHByb2dyYW1zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMS4wLjAgKDI4LU1heS0xOTk4KQorLSBJbml0aWFsIHJlbGVhc2UKZGlmZiAtLWdpdCBhL3Rvb2xzL3dyYy9SRUFETUUud3JjIGIvdG9vbHMvd3JjL1JFQURNRS53cmMKaW5kZXggN2MyYjQ3YS4uMjZjNGZkNiAxMDA2NDQKLS0tIGEvdG9vbHMvd3JjL1JFQURNRS53cmMKKysrIGIvdG9vbHMvd3JjL1JFQURNRS53cmMKQEAgLTEsNSArMSw5IEBACi1UaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlICgxLjAuMCAoMjgtTWF5LTE5OTgpKSBvZiB0aGUgbmV3IHJlc291cmNlIGNvbXBpbGVyCi0nd3JjJy4gSXQgaW1wcm92ZXMgdGhlIHdpbmVyYyBpbXBsZW1lbnRhdGlvbiBieSB0aGVzZSBmZWF0dXJlczoKK1JlbGVhc2UgMS4wLjIgb2Ygd3JjICgyMC1KdW4tMTk5OCksIHRoZSB3aW5lIHJlc291cmNlIGNvbXBpbGVyLgorCitTZWUgdGhlIGZpbGUgQ0hBTkdFUyBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmVyc2lvbiBhbmQgd2hhdCBoYXMgYmVlbgorY29ycmVjdGVkIGluIHRoZSBjdXJyZW50IHZlcnNpb24uCisKK1dyYyBmZWF0dXJlczoKIAogLSBzb3VyY2UgcHJlcHJvY2Vzc2luZwogLSAxNiBhbmQgMzIgYml0IHN1cHBvcnQKQEAgLTIzLDYgKzI3LDcgQEAKIAogVXNhZ2U6IHdyYyBbb3B0aW9ucy4uLl0gW2luZmlsZVsucmN8LnJlc11dCiAgICAtYSBuICAgICAgICBBbGlnbm1lbnQgb2YgcmVzb3VyY2UgKHdpbjE2IG9ubHksIGRlZmF1bHQgaXMgNCkKKyAgIC1BICAgICAgICAgIEF1dG8gcmVnaXN0ZXIgcmVzb3VyY2VzIChvbmx5IHdpdGggZ2NjIDIuNyBhbmQgYmV0dGVyKQogICAgLWIgICAgICAgICAgQ3JlYXRlIGEgQyBhcnJheSBmcm9tIGEgYmluYXJ5IC5yZXMgZmlsZQogICAgLWMgICAgICAgICAgQWRkICdjb25zdCcgcHJlZml4IHRvIEMgY29uc3RhbnRzCiAgICAtQyBjcCAgICAgICBTZXQgdGhlIHJlc291cmNlJ3MgY29kZXBhZ2UgdG8gY3AgKGRlZmF1bHQgaXMgMCkKQEAgLTM0LDYgKzM5LDcgQEAKICAgIC1IIGZpbGUgICAgIFNhbWUgYXMgLWggYnV0IHdyaXR0ZW4gdG8gZmlsZQogICAgLUkgcGF0aCAgICAgU2V0IGluY2x1ZGUgc2VhcmNoIGRpciB0byBwYXRoIChtdWx0aXBsZSAtSSBhbGxvd2VkKQogICAgLWwgbGFuICAgICAgU2V0IGRlZmF1bHQgbGFuZ3VhZ2UgdG8gbGFuIChkZWZhdWx0IGlzIG5ldXRyYWwgezB9KQorICAgLUwgICAgICAgICAgTGVhdmUgY2FzZSBvZiBlbWJlZGRlZCBmaWxlbmFtZXMgYXMgaXMKICAgIC1uICAgICAgICAgIERvIG5vdCBnZW5lcmF0ZSAucyBmaWxlCiAgICAtbyBmaWxlICAgICBPdXRwdXQgdG8gZmlsZSAoZGVmYXVsdCBpcyBpbmZpbGUuW3Jlc3xzfGhdCiAgICAtcCBwcmVmaXggICBHaXZlIGEgcHJlZml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVzCkBAIC0xMDIsNyArMTA4LDggQEAKIE5vdCBhbGwgcmVzb3VyY2UtdHlwZXMgY2FuIGhhdmUgbG9jYWwgbGFuZ3VhZ2Uga2V5d29yZHMgYXR0YWNoZWQgeWV0CiAobm90YWJseTogQklUTUFQLCBDVVJTT1IsIElDT04gYW5kIHVzZXJ0eXBlKS4gVGhpcyBpcyBkdWUgdG8gaW1wbGVtZW50YXRpb24KIG9mIGZpbGVuYW1lLXNjYW5uaW5nIGFuZCB0aGUgY29tcGxleGl0eSB0aGF0IGl0IHBvc2VzLiBUaGlzIHdpbGwgYmUgY2hhbmdlZAotaW4gdGhlIG5leHQgcmVsZWFzZS4KK2luIHRoZSBuZXh0IHJlbGVhc2UuIFlvdSBjYW4gd29yayBhcnJvdW5kIHRoaXMgcHJvYmxlbSBieSBwdXR0aW5nIGEgTEFOR1VBR0UKK3N0YXRlbWVudCBiZWZvcmUgKGFuZCBldnQuIGFmdGVyKSB0aGUgY29kZSBpbiB0aGUgcmVzb3VyY2UgZmlsZS4KIAogCiBSZXNvdXJjZSB0eXBlcyBzdXBwb3J0ZWQKQEAgLTExMCw3ICsxMTcsNyBAQAogQWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQgZXhjZXB0IGZvcjoKIC0gRk9OVAogLSBNRVNTQUdFVEFCTEUKLS0gZXh0ZW5zaW9ucyBsaWtlIFRPT0xCQVIgYW5kIHRoZSBsaWtlCistIGV4dGVuc2lvbnMgbGlrZSBUT09MQkFSIGFuZCB0aGUgbGlrZSAoaXMgdGhpcyBhIHVzZXItdHlwZT8pCiAKIFRoZXNlIHR5cGVzIHdpbGwgYmUgaW1wbGVtZW50ZWQgYXMgc29vbiBhcyBJIGdldCBhIHByb3BlciBzcGVjaWZpY2F0aW9uIG9mCiB0aGUgbGF5b3V0LgpAQCAtMTIwLDEwICsxMjcsMTAgQEAKIG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy4gVGhlc2UgYXJlIGV4YW1wbGVzIG9mIHZhbGlkIHVzZXJ0eXBlCiByZXNvdXJjZXM6CiAKLU15TmFtZSAiTXlUeXBlIiBteWRhdGEuYmluCi1NeU5hbWUgMTIzNDUgbXlkYXRhLmJpbgotTXlOYW1lICJNeVR5cGUiICJteWRhdGEuYmluIgotTXlOYW1lIDEyMzQ1ICJteWRhdGEuYmluIgorTXlOYW1lICJNeVR5cGUiCW15ZGF0YS5iaW4KK015TmFtZSAxMjM0NQlteWRhdGEuYmluCitNeU5hbWUgIk15VHlwZSIJIm15ZGF0YS5iaW4iCitNeU5hbWUgMTIzNDUJIm15ZGF0YS5iaW4iCiAKIE15TmFtZSAiTXlUeXBlIgogewpAQCAtMjQyLDcgKzI0OSwxMCBAQAogLSBVTklDT0RFIHRyYW5zbGF0aW9ucyBhcmUgbm90L25vdCBjb3JyZWN0IGltcGxlbWVudGVkCiAtIE5vIGRvY3VtZW50YXRpb24gKCd3cmMgLT8nIGdpdmVzIGNvbW1hbmQtbGluZSBvcHRpb25zIHRob3VnaCkKIC0gZ3JlcCBmb3IgRklYTUUgaW4gdGhlIHNvdXJjZQotCistIE1lbW9yeSBvcHRpb25zIGFyZSB3cm9uZyB1bmRlciBzb21lIGNvbmRpdGlvbnMuIFRoZXJlIHNlZW1zIHRvIGJlIGEKKyAgZGlmZmVyZW50IGFjdGlvbiBmb3Igd2luMzIgYW5kIHdpbjE2LgorLSBVc2VyLXR5cGUgcmVzb3VyY2VzIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IGxheW91dC4KKy0gRmlsZW5hbWUgc2Nhbm5pbmcgaXMgc3RpbGwgaG9wZWxlc3MuCiAKIFJlcG9ydGluZyBidWdzIGFuZCBwYXRjaGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvd3JjL2dlbnJlcy5jIGIvdG9vbHMvd3JjL2dlbnJlcy5jCmluZGV4IGI5ZTgzMWMuLjBmODYzZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3dyYy9nZW5yZXMuYworKysgYi90b29scy93cmMvZ2VucmVzLmMKQEAgLTgwMCwxMSArODAwLDYgQEAKIAlyZXMgPSBuZXdfcmVzKCk7CiAJaWYod2luMzIpCiAJewotCQkvKiBGSVhNRTogQm9ybGFuZCdzIHJjIGNvbXBpbGVyIHdyaXRlcyB0aGUgZGVmYXVsdCBzeXN0ZW0ncwotCQkgKiBsYW5ndWFnZSBpZiBub25lIHNwZWNpZmllZCAoMHg0MDYgZm9yIG1lIHRoYXQgaXMpLiBJIGJlbGlldmUKLQkJICogdGhhdCB0aGlzIGlzIGEgQm9ybGFuZCBidWcgKGJyYzMyIHZlci4gNS4wMSksIGFzIHRoZSBkZWZhdWx0Ci0JCSAqIHNob3VsZCBiZSAwIChzeXN0ZW0gZGVmYXVsdCkuCi0JCSAqLwogCQlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9NRU5VLCBOVUxMLCBuYW1lLCBtZW5leC0+bWVtb3B0LCAmKG1lbmV4LT5sdmMpKTsKIAogCQlwdXRfd29yZChyZXMsIDEpOwkJLyogTWVudWhlYWRlcjogVmVyc2lvbiAqLwpAQCAtODQ3LDE1ICs4NDIsOSBAQAogCWFzc2VydChjdXJnICE9IE5VTEwpOwogCiAJcmVzID0gbmV3X3JlcygpOwotCXJlc3RhZyA9IHB1dF9yZXNfaGVhZGVyKHJlcywgV1JDX1JUX0dST1VQX0NVUlNPUiwgTlVMTCwgbmFtZSwgY3VyZy0+bWVtb3B0LCBOVUxMKTsKKwlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9HUk9VUF9DVVJTT1IsIE5VTEwsIG5hbWUsIGN1cmctPm1lbW9wdCwgJihjdXJnLT5sdmMpKTsKIAlpZih3aW4zMikKIAl7Ci0JCS8qIEZJWE1FOiBCb3JsYW5kJ3MgcmMgY29tcGlsZXIgd3JpdGVzIHRoZSBkZWZhdWx0IHN5c3RlbSdzCi0JCSAqIGxhbmd1YWdlIGlmIG5vbmUgc3BlY2lmaWVkICgweDQwNiBmb3IgbWUgdGhhdCBpcykuIEkgYmVsaWV2ZQotCQkgKiB0aGF0IHRoaXMgaXMgYSBCb3JsYW5kIGJ1ZyAoYnJjMzIgdmVyLiA1LjAxKSwgYXMgdGhlIGRlZmF1bHQKLQkJICogc2hvdWxkIGJlIDAgKHN5c3RlbSBkZWZhdWx0KS4KLQkJICovCi0KIAkJcHV0X3dvcmQocmVzLCAwKTsJLyogUmVzZXJ2ZWQgKi8KIAkJLyogRklYTUU6IFRoZSBSZXNUeXBlIGluIHRoZSBORVdIRUFERVIgc3RydWN0dXJlIHNob3VsZAogCQkgKiBjb250YWluIDE0IGFjY29yZGluZyB0byB0aGUgTVMgd2luMzIgZG9jLiBUaGlzIGlzCkBAIC05NjMsMTIgKzk1Miw3IEBACiAJcmVzID0gbmV3X3JlcygpOwogCW5hbWUudHlwZSA9IG5hbWVfb3JkOwogCW5hbWUubmFtZS5pX25hbWUgPSBjdXItPmlkOwotCS8qIEZJWE1FOiBCb3JsYW5kJ3MgcmMgY29tcGlsZXIgd3JpdGVzIHRoZSBkZWZhdWx0IHN5c3RlbSdzCi0JICogbGFuZ3VhZ2UgaWYgbm9uZSBzcGVjaWZpZWQgKDB4NDA2IGZvciBtZSB0aGF0IGlzKS4gSSBiZWxpZXZlCi0JICogdGhhdCB0aGlzIGlzIGEgQm9ybGFuZCBidWcgKGJyYzMyIHZlci4gNS4wMSksIGFzIHRoZSBkZWZhdWx0Ci0JICogc2hvdWxkIGJlIDAgKHN5c3RlbSBkZWZhdWx0KS4KLQkgKi8KLQlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9DVVJTT1IsIE5VTEwsICZuYW1lLCBXUkNfTU9fTU9WRUFCTEUgfCBXUkNfTU9fRElTQ0FSREFCTEUsIE5VTEwpOworCXJlc3RhZyA9IHB1dF9yZXNfaGVhZGVyKHJlcywgV1JDX1JUX0NVUlNPUiwgTlVMTCwgJm5hbWUsIFdSQ19NT19NT1ZFQUJMRSB8IFdSQ19NT19ESVNDQVJEQUJMRSwgJihjdXItPmx2YykpOwogCXB1dF93b3JkKHJlcywgY3VyLT54aG90KTsKIAlwdXRfd29yZChyZXMsIGN1ci0+eWhvdCk7CiAJcHV0X3Jhd19kYXRhKHJlcywgY3VyLT5kYXRhLCAwKTsKQEAgLTEwMDEsMTUgKzk4NSw5IEBACiAJYXNzZXJ0KGljb2cgIT0gTlVMTCk7CiAKIAlyZXMgPSBuZXdfcmVzKCk7Ci0JcmVzdGFnID0gcHV0X3Jlc19oZWFkZXIocmVzLCBXUkNfUlRfR1JPVVBfSUNPTiwgTlVMTCwgbmFtZSwgaWNvZy0+bWVtb3B0LCBOVUxMKTsKKwlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9HUk9VUF9JQ09OLCBOVUxMLCBuYW1lLCBpY29nLT5tZW1vcHQsICYoaWNvZy0+bHZjKSk7CiAJaWYod2luMzIpCiAJewotCQkvKiBGSVhNRTogQm9ybGFuZCdzIHJjIGNvbXBpbGVyIHdyaXRlcyB0aGUgZGVmYXVsdCBzeXN0ZW0ncwotCQkgKiBsYW5ndWFnZSBpZiBub25lIHNwZWNpZmllZCAoMHg0MDYgZm9yIG1lIHRoYXQgaXMpLiBJIGJlbGlldmUKLQkJICogdGhhdCB0aGlzIGlzIGEgQm9ybGFuZCBidWcgKGJyYzMyIHZlci4gNS4wMSksIGFzIHRoZSBkZWZhdWx0Ci0JCSAqIHNob3VsZCBiZSAwIChzeXN0ZW0gZGVmYXVsdCkuCi0JCSAqLwotCiAJCXB1dF93b3JkKHJlcywgMCk7CS8qIFJlc2VydmVkICovCiAJCS8qIEZJWE1FOiBUaGUgUmVzVHlwZSBpbiB0aGUgTkVXSEVBREVSIHN0cnVjdHVyZSBzaG91bGQKIAkJICogY29udGFpbiAxNCBhY2NvcmRpbmcgdG8gdGhlIE1TIHdpbjMyIGRvYy4gVGhpcyBpcwpAQCAtMTA3NywxMiArMTA1NSw3IEBACiAJcmVzID0gbmV3X3JlcygpOwogCW5hbWUudHlwZSA9IG5hbWVfb3JkOwogCW5hbWUubmFtZS5pX25hbWUgPSBpY28tPmlkOwotCS8qIEZJWE1FOiBCb3JsYW5kJ3MgcmMgY29tcGlsZXIgd3JpdGVzIHRoZSBkZWZhdWx0IHN5c3RlbSdzCi0JICogbGFuZ3VhZ2UgaWYgbm9uZSBzcGVjaWZpZWQgKDB4NDA2IGZvciBtZSB0aGF0IGlzKS4gSSBiZWxpZXZlCi0JICogdGhhdCB0aGlzIGlzIGEgQm9ybGFuZCBidWcgKGJyYzMyIHZlci4gNS4wMSksIGFzIHRoZSBkZWZhdWx0Ci0JICogc2hvdWxkIGJlIDAgKHN5c3RlbSBkZWZhdWx0KS4KLQkgKi8KLQlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9JQ09OLCBOVUxMLCAmbmFtZSwgV1JDX01PX01PVkVBQkxFIHwgV1JDX01PX0RJU0NBUkRBQkxFLCBOVUxMKTsKKwlyZXN0YWcgPSBwdXRfcmVzX2hlYWRlcihyZXMsIFdSQ19SVF9JQ09OLCBOVUxMLCAmbmFtZSwgV1JDX01PX01PVkVBQkxFIHwgV1JDX01PX0RJU0NBUkRBQkxFLCAmKGljby0+bHZjKSk7CiAJcHV0X3Jhd19kYXRhKHJlcywgaWNvLT5kYXRhLCAwKTsKIAogCVNldFJlc1NpemUocmVzLCByZXN0YWcpOwkvKiBTZXQgUmVzb3VyY2VTaXplICovCmRpZmYgLS1naXQgYS90b29scy93cmMvbmV3c3RydWMuYyBiL3Rvb2xzL3dyYy9uZXdzdHJ1Yy5jCmluZGV4IDZkMzNjNGIuLjNmYjk5NDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3dyYy9uZXdzdHJ1Yy5jCisrKyBiL3Rvb2xzL3dyYy9uZXdzdHJ1Yy5jCkBAIC0xNTUsNiArMTU1LDcgQEAKIAl9CiAJZWxzZQogCQlpY29nLT5tZW1vcHQgPSBXUkNfTU9fTU9WRUFCTEUgfCBXUkNfTU9fUFVSRSB8IFdSQ19NT19ESVNDQVJEQUJMRTsKKwlpY29nLT5sdmMubGFuZ3VhZ2UgPSBkdXBfbGFuZ3VhZ2UoY3VycmVudGxhbmd1YWdlKTsKIAlzcGxpdF9pY29ucyhyZCwgaWNvZywgJihpY29nLT5uaWNvbikpOwogCWZyZWUocmQtPmRhdGEpOwogCWZyZWUocmQpOwpAQCAtMTcxLDYgKzE3Miw3IEBACiAJfQogCWVsc2UKIAkJY3VyZy0+bWVtb3B0ID0gV1JDX01PX01PVkVBQkxFIHwgV1JDX01PX1BVUkUgfCBXUkNfTU9fRElTQ0FSREFCTEU7CisJY3VyZy0+bHZjLmxhbmd1YWdlID0gZHVwX2xhbmd1YWdlKGN1cnJlbnRsYW5ndWFnZSk7CiAJc3BsaXRfY3Vyc29ycyhyZCwgY3VyZywgJihjdXJnLT5uY3Vyc29yKSk7CiAJZnJlZShyZC0+ZGF0YSk7CiAJZnJlZShyZCk7CmRpZmYgLS1naXQgYS90b29scy93cmMvcGFyc2VyLmggYi90b29scy93cmMvcGFyc2VyLmgKaW5kZXggYTAzODM3MS4uY2UwOTVhZiAxMDA2NDQKLS0tIGEvdG9vbHMvd3JjL3BhcnNlci5oCisrKyBiL3Rvb2xzL3dyYy9wYXJzZXIuaApAQCAtMTgsNyArMTgsOSBAQAogCiAvKiBGcm9tIHBhcnNlci5sICovCiBleHRlcm4gRklMRSAqeXlpbjsKK2V4dGVybiBjaGFyICp5eXRleHQ7CiBleHRlcm4gaW50IGxpbmVfbnVtYmVyOworZXh0ZXJuIGludCBjaGFyX251bWJlcjsKIAogaW50IHl5bGV4KHZvaWQpOwogdm9pZCBzZXRfeXl3Zih2b2lkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3dyYy9wYXJzZXIubCBiL3Rvb2xzL3dyYy9wYXJzZXIubAppbmRleCA3YjQxMWQ4Li5kZGI3YTk3IDEwMDY0NAotLS0gYS90b29scy93cmMvcGFyc2VyLmwKKysrIGIvdG9vbHMvd3JjL3BhcnNlci5sCkBAIC0zLDYgKzMsMTUgQEAKICAqIENvcHlyaWdodCAxOTk0IE1hcnRpbiB2b24gTG9ld2lzCiAgKiBDb3B5cmlnaHQgMTk5OCBCZXJ0aG8gQS4gU3R1bHRpZW5zIChCUykKICAqCisgKiAyMC1KdW4tMTk5OCBCUwktIENoYW5nZWQgdGhlIGZpbGVuYW1lIGNvbnZlcnNpb24uIEZpbGVuYW1lcyBhcmUKKyAqCQkJICBjYXNlLXNlbnNpdGl2ZSBpbmRlciAqbml4LCBidXQgbm90IHVuZGVyIGRvcy4KKyAqCQkJICBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byBjb252ZXJ0IHRvIGxvd2VyIGNhc2UuCisgKgkJCS0gQWxsIGJhY2tzbGFzaGVzIGFyZSBjb252ZXJ0ZWQgdG8gZm9yd2FyZCBhbmQKKyAqCQkJICBib3RoIHNpbmdsZSBhbmQgZG91YmxlIHNsYXNoIGlzIHJlY29nbml6ZWQgYXMKKyAqCQkJICBNUy9Cb3JsYW5kIGRvZXMuCisgKgkJCS0gRml4ZWQgYSBidWcgaW4gJ3l5d2YnIGNhc2UgdGhhdCBwcmV2ZW50ZWQKKyAqCQkJICBkb3VibGUgcXVvdGVkIG5hbWVzIHRvIGJlIHNjYW5uZWQgcHJvcHBlcmx5LgorICoKICAqIDE5LU1heS0xOTk4IEJTCS0gU3RhcnRlZCB0byBidWlsZCBhIHByZXByb2Nlc3Nvci4KICAqCQkJLSBDaGFuZ2VkIGtleXdvcmQgcHJvY2Vzc2luZyBjb21wbGV0ZWx5IHRvCiAgKgkJCSAgdGFibGUtbG9va3Vwcy4KQEAgLTM3LDYgKzQ2LDcgQEAKIAogLyogRXhjbHVzaXZlIHJ1bGVzIHdoZW4gbG9va2luZyBmb3IgYSBmaWxlbmFtZSAqLwogJXggeXl3ZgorJXggeXl3Zl9zCiAvKiBFeGNsdXNpdmUgc3RyaW5nIGhhbmRsaW5nICovCiAleCB5eXN0cgogLyogRXhjbHVzaXZlIHVuaWNvZGUgc3RyaW5nIGhhbmRsaW5nICovCkBAIC03OCwxMSArODgsMTYgQEAKIAogJXsKIAorI2lmICFkZWZpbmVkKFlZX0ZMRVhfTUFKT1JfVkVSU0lPTikgfHwgKDEwMDAgKiBZWV9GTEVYX01BSk9SX1ZFUlNJT04gKyBZWV9GTEVYX01JTk9SX1ZFUlNJT04gPCAyMDA1KQorI2Vycm9yIE11c3QgdXNlIGZsZXggdmVyc2lvbiAyLjUuMSBvciBoaWdoZXIgKHl5X3NjYW5fKiByb3V0aW5lcyBhcmUgcmVxdWlyZWQpLgorI2VuZGlmCisKIC8qI2RlZmluZSBMRVhfREVCVUcqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSAid3JjLmgiCkBAIC05Niw2ICsxMTEsOSBAQAogI2RlZmluZSBZWV9VU0VfUFJPVE9TCiAjZGVmaW5lIFlZX05PX1VOUFVUCiAKKy8qIEFsd2F5cyB1cGRhdGUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHBvc2l0aW9uIHdpdGhpbiBhIGxpbmUgKi8KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04JY2hhcl9udW1iZXIrPXl5bGVuZzsKKwogcmF3X2RhdGFfdCAqbmV3X3Jhd19kYXRhKHZvaWQpOwogCiB2b2lkIGFkZGNjaGFyKGNoYXIgYyk7CkBAIC0xMDMsOCArMTIxLDEwIEBACiBzdHJpbmdfdCAqZ2V0X2J1ZmZlcmVkX2NzdHJpbmcodm9pZCk7CiBzdHJpbmdfdCAqZ2V0X2J1ZmZlcmVkX3dzdHJpbmcodm9pZCk7CiBzdHJpbmdfdCAqbWFrZV9zdHJpbmcoY2hhciAqcyk7CitzdHJpbmdfdCAqbWFrZV9maWxlbmFtZShjaGFyICpzLCBpbnQgbGVuKTsKIAotaW50IGxpbmVfbnVtYmVyID0gMTsKK2ludCBsaW5lX251bWJlciA9IDE7CQkvKiBUaGUgY3VycmVudCBsaW5lICovCitpbnQgY2hhcl9udW1iZXIgPSAxOwkJLyogVGhlIGN1cnJlbnQgY2hhciBwb3Mgd2l0aGluIHRoZSBsaW5lICovCiBzdGF0aWMgY2hhciBjYnVmZmVyWzEwMjRdOwkvKiBCdWZmZXJzIGZvciBzdHJpbmcgY29sbGVjdGlvbiAqLwogc3RhdGljIGludCBjYnVmaWR4Owogc3RhdGljIHNob3J0IHdidWZmZXJbMTAyNF07CkBAIC0xNTIsNiArMTcyLDcgQEAKIAkJCQkJICAgb3IgTlVMTCBpZiBoYW5kbGluZyBpbmNsdWRlcwogCQkJCQkgKi8KIAlpbnQgbGluZV9udW1iZXI7CQkvKiBMaW5lIHRoYXQgd2Ugd2VyZSBoYW5kbGluZyAqLworCWludCBjaGFyX251bWJlcjsJCS8qIFRoZSBjdXJyZW50IHBvc2l0aW9uICovCiAJY2hhciAqZmlsZW5hbWU7CQkJLyogRmlsZW5hbWUgdGhhdCB3ZSB3ZXJlIGhhbmRsaW5nICovCiB9OwogCkBAIC0xNzQsNyArMTk1LDkgQEAKIAl7CiAJCS8qIFRoZXNlIHdpbGwgdHJhY2sgdGhlIHl5ZXJyb3IgdG8gdGhlIGNvcnJlY3QgZmlsZSBhbmQgbGluZSAqLwogCQlidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0ubGluZV9udW1iZXIgPSBsaW5lX251bWJlcjsKKwkJYnVmZmVyc3RhY2tbYnVmZmVyc3RhY2tpZHhdLmNoYXJfbnVtYmVyID0gY2hhcl9udW1iZXI7CiAJCWxpbmVfbnVtYmVyID0gMTsKKwkJY2hhcl9udW1iZXIgPSAxOwogCQlidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0uZmlsZW5hbWUgPSBpbnB1dF9uYW1lOwogCQlpbnB1dF9uYW1lID0gZmlsZW5hbWU7CiAJfQpAQCAtMTkzLDE0ICsyMTYsMTYgQEAKIAllbHNlCiAJewogCQlsaW5lX251bWJlciA9IGJ1ZmZlcnN0YWNrW2J1ZmZlcnN0YWNraWR4XS5saW5lX251bWJlcjsKKwkJY2hhcl9udW1iZXIgPSBidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0uY2hhcl9udW1iZXI7CiAJCWlucHV0X25hbWUgPSBidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0uZmlsZW5hbWU7CiAJCWZjbG9zZSh5eWluKTsKIAl9CiAJaWYoeXlkZWJ1ZykKLQkJcHJpbnRmKCJwb3BfYnVmZmVyOiAlcCAlcCAoJWQpICVwXG4iLAorCQlwcmludGYoInBvcF9idWZmZXI6ICVwICVwICglZCwgJWQpICVwXG4iLAogCQkJYnVmZmVyc3RhY2tbYnVmZmVyc3RhY2tpZHhdLmJ1ZmZlcnN0YXRlLAogCQkJYnVmZmVyc3RhY2tbYnVmZmVyc3RhY2tpZHhdLmRlZmluZSwKIAkJCWJ1ZmZlcnN0YWNrW2J1ZmZlcnN0YWNraWR4XS5saW5lX251bWJlciwKKwkJCWJ1ZmZlcnN0YWNrW2J1ZmZlcnN0YWNraWR4XS5jaGFyX251bWJlciwKIAkJCWJ1ZmZlcnN0YWNrW2J1ZmZlcnN0YWNraWR4XS5maWxlbmFtZSk7CiAJeXlfc3dpdGNoX3RvX2J1ZmZlcihidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0uYnVmZmVyc3RhdGUpOwogCXJldHVybiBidWZmZXJzdGFja1tidWZmZXJzdGFja2lkeF0uYnVmZmVyc3RhdGU7CkBAIC00MDAsNyArNDI1LDcgQEAKIAkJCWlmKFlZX1NUQVJUID09IHBwX2RlZl9zKQogCQkJCWFkZF90b19zdWJzdHRleHQoeXl0ZXh0LCB5eWxlbmcpOwogCQl9Ci08cHBfaWdub3JlLHBwX2RlZl9zPlxce3dzfSpcbglsaW5lX251bWJlcisrOwkvKiBMaW5lIGNvbnRpbnVhdGlvbiAqLworPHBwX2lnbm9yZSxwcF9kZWZfcz5cXHt3c30qXG4JbGluZV9udW1iZXIrKzsJY2hhcl9udW1iZXIgPSAxOyAvKiBMaW5lIGNvbnRpbnVhdGlvbiAqLwogPHBwX2lnbm9yZSxwcF9kZWZfcz5cbgkJewogCQkJaWYoWVlfU1RBUlQgPT0gcHBfZGVmX3MpCiAJCQl7CkBAIC00MDksNiArNDM0LDcgQEAKIAkJCQlzdWJzdHRleHQgPSBOVUxMOwogCQkJfQogCQkJbGluZV9udW1iZXIrKzsKKwkJCWNoYXJfbnVtYmVyID0gMTsKIAkJCXBvcF9zdGFydCgpOwogCQkJcG9wX3N0YXJ0KCk7CiAJCX0KQEAgLTUzNiw3ICs1NjIsNyBAQAogCiA8cHBfc3RyaXBwX2ZpbmFsPnt3c30qCTsgLyogSWdub3JlICovCiA8cHBfc3RyaXBwX2ZpbmFsPjsJcG9wX3N0YXJ0KCk7IC8qIEtpbGwgdGhlIHNlbWljb2xvbiAqLwotPHBwX3N0cmlwcF9maW5hbD5cbglsaW5lX251bWJlcisrOyBwb3Bfc3RhcnQoKTsKKzxwcF9zdHJpcHBfZmluYWw+XG4JbGluZV9udW1iZXIrKzsgY2hhcl9udW1iZXIgPSAxOyBwb3Bfc3RhcnQoKTsKIDxwcF9zdHJpcHBfZmluYWw+Lgl5eWxlc3MoMCk7IHBvcF9zdGFydCgpOwogCiA8cHBfZmFsc2U+LgkJOwkvKiBJZ25vcmUgZXZlcnl0aGluZyBleGNlcHQgI3h4eCBkdXJpbmcgZmFsc2UgI2lmIHN0YXRlICovCkBAIC01NzAsNyArNTk2LDcgQEAKIAkJCQkJd2FudF9pZGVudCA9IDA7CiAJCQkJCXl5bHZhbC5zdHIgPSBtYWtlX3N0cmluZyh5eXRleHQpOwogCQkJCSNpZmRlZiBMRVhfREVCVUcKLQkJCQkJcHJpbnRmKCJ3YW50IElERU5UICglcywgJWQpOiA8JXM+XG4iLCBpbnB1dF9uYW1lLCBsaW5lX251bWJlciwgeXl0ZXh0KTsKKwkJCQkJcHJpbnRmKCJ3YW50IElERU5UICglcywgJWQsICVkKTogPCVzPlxuIiwgaW5wdXRfbmFtZSwgbGluZV9udW1iZXIsIGNoYXJfbnVtYmVyLCB5eXRleHQpOwogCQkJCSNlbmRpZgogCQkJCQlyZXR1cm4gSURFTlQ7CiAJCQkJfQpAQCAtNTgzLDcgKzYwOSw3IEBACiAJCQkJCWlmKCFwcHAtPmV4cGFuZGluZykKIAkJCQkJewogCQkJCSNpZmRlZiBMRVhfREVCVUcKLQkJCQkJCXByaW50ZigiZXhwYW5kIElERU5UICglcywgJWQpOiA8JXM+XG4iLCBpbnB1dF9uYW1lLCBsaW5lX251bWJlciwgeXl0ZXh0KTsKKwkJCQkJCXByaW50ZigiZXhwYW5kIElERU5UICglcywgJWQsICVkKTogPCVzPlxuIiwgaW5wdXRfbmFtZSwgbGluZV9udW1iZXIsIGNoYXJfbnVtYmVyLCB5eXRleHQpOwogCQkJCSNlbmRpZgogCQkJCQkJcHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsIHBwcCwgTlVMTCk7CiAJCQkJCQl5eV9zY2FuX3N0cmluZyhwcHAtPnN1YnN0KTsKQEAgLTYxOSwxMCArNjQ1LDExIEBACiAJCQkJewogCQkJCQl5eWx2YWwuc3RyID0gbWFrZV9zdHJpbmcoeXl0ZXh0KTsKIAkJCQkjaWZkZWYgTEVYX0RFQlVHCi0JCQkJCXByaW50ZigiJXMgSURFTlQgKCVzLCAlZCk6IDwlcz5cbiIsCisJCQkJCXByaW50ZigiJXMgSURFTlQgKCVzLCAlZCwgJWQpOiA8JXM+XG4iLAogCQkJCQkJd2FudF9yc2NuYW1lID8gInJzY25hbWUiIDogImp1c3QiLAogCQkJCQkJaW5wdXRfbmFtZSwKIAkJCQkJCWxpbmVfbnVtYmVyLAorCQkJCQkJY2hhcl9udW1iZXIsCiAJCQkJCQl5eXRleHQpOwogCQkJCSNlbmRpZgogCQkJCQlyZXR1cm4gSURFTlQ7CkBAIC02MzUsOCArNjYyLDEwIEBACiBcPFw9CQkJcmV0dXJuIExURTsKIFw+XD0JCQlyZXR1cm4gR1RFOwogCi08eXl3Zj5bXiBcZlx0XHJcbl0qCXsgcG9wX3N0YXJ0KCk7IHl5bHZhbC5zdHIgPSBtYWtlX3N0cmluZyh5eXRleHQpOyByZXR1cm4gRklMRU5BTUU7IH0KLTx5eXdmPlwiW15cIl0qXCIJeyBwb3Bfc3RhcnQoKTsgeXlsdmFsLnN0ciA9IG1ha2Vfc3RyaW5nKHl5dGV4dCk7IHJldHVybiBGSUxFTkFNRTsgfQorPHl5d2Y+W14gXGZcdFxyXG5cIl0qCXsgcG9wX3N0YXJ0KCk7IHl5bHZhbC5zdHIgPSBtYWtlX2ZpbGVuYW1lKHl5dGV4dCwgeXlsZW5nKTsgcmV0dXJuIEZJTEVOQU1FOyB9Cis8eXl3Zj5cIgkJcHVzaF90byh5eXdmX3MpOworPHl5d2Zfcz5bXlwiXG5dKlwiCXsgcG9wX3N0YXJ0KCk7IHBvcF9zdGFydCgpOyB5eWx2YWwuc3RyID0gbWFrZV9maWxlbmFtZSh5eXRleHQsIHl5bGVuZy0xKTsgcmV0dXJuIEZJTEVOQU1FOyB9Cis8eXl3Zl9zPlxuCQl5eWVycm9yKCJOZXdsaW5lIGluIGZpbGVuYW1lIik7CiAKIExcIgkJCXsKIAkJCQlwdXNoX3RvKHl5bHN0cik7CkBAIC03MzksNyArNzY4LDcgQEAKIDxJTklUSUFMLHBwX2lnbm9yZSxwcF9kZWZfcz4iLyoiCXB1c2hfdG8oY29tbWVudCk7CS8qIEVhdCBjb21tZW50ICovCiA8Y29tbWVudD5bXipcbl0qCTsKIDxjb21tZW50PiIqIitbXiovXG5dKgk7Ci08Y29tbWVudD5cbgkJbGluZV9udW1iZXIrKzsKKzxjb21tZW50PlxuCQlsaW5lX251bWJlcisrOyBjaGFyX251bWJlciA9IDE7CiA8Y29tbWVudD4iKiIrIi8iCXBvcF9zdGFydCgpOwogCiA7W15cbl0qCQkJOyAvKiBFYXQgY29tbWVudCAqLwpAQCAtNzQ5LDYgKzc3OCw3IEBACiAJCQkJaWYoWVlfU1RBUlQgPT0geXl3ZikKIAkJCQkJcG9wX3N0YXJ0KCk7CiAJCQkJbGluZV9udW1iZXIrKzsKKwkJCQljaGFyX251bWJlciA9IDE7CiAJCQkJaWYod2FudF9ubCkKIAkJCQl7CiAJCQkJCXdhbnRfbmwgPSAwOwpAQCAtODMwLDYgKzg2MCwzNyBAQAogCXJldHVybiBzdHI7CiB9CiAKK3N0cmluZ190ICptYWtlX2ZpbGVuYW1lKGNoYXIgKnMsIGludCBsZW4pCit7CisJY2hhciAqY3B0cjsKKwlzdHJpbmdfdCAqc3RyID0gbmV3X3N0cmluZygpOworCisJc3RyLT5zaXplID0gbGVuOworCXN0ci0+dHlwZSA9IHN0cl9jaGFyOworCXN0ci0+c3RyLmNzdHIgPSAoY2hhciAqKXhtYWxsb2Moc3RyLT5zaXplKzEpOworCW1lbWNweShzdHItPnN0ci5jc3RyLCBzLCBzdHItPnNpemUpOworCXN0ci0+c3RyLmNzdHJbc3RyLT5zaXplXSA9ICdcMCc7CisKKwkvKiBSZW1vdmUgZXNjYXBlZCBiYWNrc2xhc2ggYW5kIGNvbnZlcnQgdG8gZm9yd2FyZCAqLworCWNwdHIgPSBzdHItPnN0ci5jc3RyOworCWZvcihjcHRyID0gc3RyLT5zdHIuY3N0cjsgKGNwdHIgPSBzdHJjaHIoY3B0ciwgJ1xcJykpICE9IE5VTEw7IGNwdHIrKykKKwl7CisJCWlmKGNwdHJbMV0gPT0gJ1xcJykKKwkJeworCQkJbWVtbW92ZShjcHRyLCBjcHRyKzEsIHN0cmxlbihjcHRyKSk7CisJCQlzdHItPnNpemUtLTsKKwkJfQorCQkqY3B0ciA9ICcvJzsKKwl9CisKKwkvKiBDb252ZXJ0IHRvIGxvd2VyIGNhc2UuIFNlZW1zIHRvIGJlIHJlYXNvbmFibGUgdG8gZG8gKi8KKwlmb3IoY3B0ciA9IHN0ci0+c3RyLmNzdHI7ICFsZWF2ZV9jYXNlICYmICpjcHRyOyBjcHRyKyspCisJeworCQkqY3B0ciA9IHRvbG93ZXIoKmNwdHIpOworCX0KKwlyZXR1cm4gc3RyOworfQorCiAvKiBDYWxsZWQgZnJvbSB0aGUgcGFyc2VyIHRvIHNpZ25hbCBmaWxlbmFtZSByZXF1ZXN0ICovCiB2b2lkIHNldF95eXdmKHZvaWQpCiB7CmRpZmYgLS1naXQgYS90b29scy93cmMvcGFyc2VyLnkgYi90b29scy93cmMvcGFyc2VyLnkKaW5kZXggNjE4NmRhOS4uNDk0ZDAwNiAxMDA2NDQKLS0tIGEvdG9vbHMvd3JjL3BhcnNlci55CisrKyBiL3Rvb2xzL3dyYy9wYXJzZXIueQpAQCAtMyw2ICszLDEyIEBACiAgKiBDb3B5cmlnaHQgIE1hcnRpbiB2b24gTG9ld2lzLCAxOTk0CiAgKiBDb3B5cmlnaHQgMTk5OCBCZXJ0aG8gQS4gU3R1bHRpZW5zIChCUykKICAqCisgKiAyMC1KdW4tMTk5OCBCUwktIEZpeGVkIGEgYnVnIGluIGxvYWRfZmlsZSgpIHdoZXJlIHRoZSBuYW1lIHdhcyBub3QKKyAqCQkJICBwcmludGVkIG91dCBjb3JyZWN0bHkuCisgKgorICogMTctSnVuLTE5OTggQlMJLSBGaXhlZCBhIGJ1ZyBpbiBDTEFTUyBzdGF0ZW1lbnQgcGFyc2luZyB3aGljaCBzaG91bGQKKyAqCQkJICBhbHNvIGFjY2VwdCBhIHRTVFJJTkcgYXMgYXJndW1lbnQuCisgKgogICogMjUtTWF5LTE5OTggQlMJLSBGb3VuZCBvdXQgdGhhdCBJIG5lZWQgdG8gc3VwcG9ydCBsYW5ndWFnZSwgdmVyc2lvbgogICoJCQkgIGFuZCBjaGFyYWN0ZXJpc3RpY3MgaW4gaW5saW5lIHJlc291cmNlcyAoYml0bWFwLAogICoJCQkgIGN1cnNvciwgZXRjKSBidXQgdGhleSBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgd2l0aApAQCAtMjUwLDcgKzI1Niw3IEBACiAldHlwZSA8bXNnPiAJbWVzc2FnZXRhYmxlCiAldHlwZSA8dXNyPiAJdXNlcnJlcwogJXR5cGUgPG51bT4gCWl0ZW1fb3B0aW9ucwotJXR5cGUgPG5pZD4gCW5hbWVpZCBjdGxjbGFzcyB1c2VydHlwZQorJXR5cGUgPG5pZD4gCW5hbWVpZCBuYW1laWRfcyBjdGxjbGFzcyB1c2VydHlwZQogJXR5cGUgPG51bT4gCWFjY19vcHQKICV0eXBlIDxpcHRyPglsb2FkbWVtb3B0cyBsYW1vIGxhbWEKICV0eXBlIDxmbnRpZD4Jb3B0X2ZvbnQgb3B0X2V4Zm9udApAQCAtMzk0LDExICs0MDAsOCBAQAogCQl9CiAJOwogCi0vKiBGSVhNRToKLSAqIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBNRU5VIE1FTlUgey4uLn0gaXMgYSB2YWxpZCAoISkgcmVzb3VyY2UuCi0gKiBUaGUgbmFtZS1pZGVudGlmaWVyIGlzICJNRU5VIi4gV2UgY2Fubm90IHBhcnNlIHRoaXMgd2l0aG91dCBnZW5lcmF0aW5nCi0gKiBhbiBlcnJvci4gSXQgd291bGQgbWVhbiB0aGF0IGEgbGlzdCBvZiBrZXl3b3JkcyBtdXN0IGJlIGFkZGVkIGhlcmUKLSAqIGFuZCBjb252ZXJ0ZWQgaW50byBhIHZhbGlkIG5hbWVfaWRfdCBzdHJ1Y3R1cmUuCisvKgorICogR2V0IGEgdmFsaWQgbmFtZS9pZAogICovCiBuYW1laWQJOiBleHByCXsKIAkJJCQgPSBuZXdfbmFtZV9pZCgpOwpAQCAtNDE0LDYgKzQxNywxOCBAQAogCQl9CiAJOwogCisvKgorICogRXh0cmEgc3RyaW5nIHJlY29nbml0aW9uIGZvciBDTEFTUyBzdGF0ZW1lbnQgaW4gZGlhbG9ncworICovCituYW1laWRfczogbmFtZWlkCXsgJCQgPSAkMTsgfQorCXwgdFNUUklORwl7CisJCSQkID0gbmV3X25hbWVfaWQoKTsKKwkJJCQtPnR5cGUgPSBuYW1lX3N0cjsKKwkJJCQtPm5hbWUuc19uYW1lID0gJDE7CisJCXdhbnRfcnNjbmFtZSA9IDA7CisJCX0KKwk7CisKIC8qIGdldCB0aGUgdmFsdWUgZm9yIGEgc2luZ2xlIHJlc291cmNlKi8KIHJlc291cmNlX2RlZmluaXRpb24KIAk6IGFjY2VsZXJhdG9ycwl7ICQkID0gbmV3X3Jlc291cmNlKHJlc19hY2MsICQxLCAkMS0+bWVtb3B0LCAkMS0+bHZjLmxhbmd1YWdlKTsgfQpAQCAtNjMxLDcgKzY0Niw3IEBACiAJfCBkbGdfYXR0cmlidXRlcyBFWFNUWUxFIGV4cHIJeyAkJD1kaWFsb2dfZXhzdHlsZSgkMywkMSk7IH0KIAl8IGRsZ19hdHRyaWJ1dGVzIENBUFRJT04gdFNUUklORyB7ICQkPWRpYWxvZ19jYXB0aW9uKCQzLCQxKTsgfQogCXwgZGxnX2F0dHJpYnV0ZXMgb3B0X2ZvbnQJeyAkJD1kaWFsb2dfZm9udCgkMiwkMSk7IH0KLQl8IGRsZ19hdHRyaWJ1dGVzIENMQVNTIG5hbWVpZAl7ICQkPWRpYWxvZ19jbGFzcygkMywkMSk7IH0KKwl8IGRsZ19hdHRyaWJ1dGVzIENMQVNTIG5hbWVpZF9zCXsgJCQ9ZGlhbG9nX2NsYXNzKCQzLCQxKTsgfQogCXwgZGxnX2F0dHJpYnV0ZXMgTUVOVSBuYW1laWQJeyAkJD1kaWFsb2dfbWVudSgkMywkMSk7IH0KIAl8IGRsZ19hdHRyaWJ1dGVzIG9wdF9sYW5ndWFnZQl7ICQkPWRpYWxvZ19sYW5ndWFnZSgkMiwkMSk7IH0KIAl8IGRsZ19hdHRyaWJ1dGVzIG9wdF9jaGFyYWN0cwl7ICQkPWRpYWxvZ19jaGFyYWN0ZXJpc3RpY3MoJDIsJDEpOyB9CkBAIC04MjMsNyArODM4LDcgQEAKIAl8IGRsZ2V4X2F0dHJpYnMgRVhTVFlMRSBleHByCXsgJCQ9ZGlhbG9nZXhfZXhzdHlsZSgkMywkMSk7IH0KIAl8IGRsZ2V4X2F0dHJpYnMgQ0FQVElPTiB0U1RSSU5HIHsgJCQ9ZGlhbG9nZXhfY2FwdGlvbigkMywkMSk7IH0KIAl8IGRsZ2V4X2F0dHJpYnMgb3B0X2V4Zm9udAl7ICQkPWRpYWxvZ2V4X2ZvbnQoJDIsJDEpOyB9Ci0JfCBkbGdleF9hdHRyaWJzIENMQVNTIG5hbWVpZAl7ICQkPWRpYWxvZ2V4X2NsYXNzKCQzLCQxKTsgfQorCXwgZGxnZXhfYXR0cmlicyBDTEFTUyBuYW1laWRfcwl7ICQkPWRpYWxvZ2V4X2NsYXNzKCQzLCQxKTsgfQogCXwgZGxnZXhfYXR0cmlicyBNRU5VIG5hbWVpZAl7ICQkPWRpYWxvZ2V4X21lbnUoJDMsJDEpOyB9CiAJfCBkbGdleF9hdHRyaWJzIG9wdF9sYW5ndWFnZQl7ICQkPWRpYWxvZ2V4X2xhbmd1YWdlKCQyLCQxKTsgfQogCXwgZGxnZXhfYXR0cmlicyBvcHRfY2hhcmFjdHMJeyAkJD1kaWFsb2dleF9jaGFyYWN0ZXJpc3RpY3MoJDIsJDEpOyB9CkBAIC0xODM4LDEwICsxODUzLDE0IEBACiAJaWYoa2V5LT50eXBlICE9IHN0cl9jaGFyKQogCQl5eWVycm9yKCJLZXkgY29kZSBtdXN0IGJlIGFuIGFzY2lpIHN0cmluZyIpOwogCi0JaWYoKGZsYWdzICYgV1JDX0FGX1ZJUlRLRVkpICYmICghaXN1cHBlcihrZXktPnN0ci5jc3RyWzBdKSB8fCAhaXNkaWdpdChrZXktPnN0ci5jc3RyWzBdKSkpCisJaWYoKGZsYWdzICYgV1JDX0FGX1ZJUlRLRVkpICYmICghaXN1cHBlcihrZXktPnN0ci5jc3RyWzBdKSAmJiAhaXNkaWdpdChrZXktPnN0ci5jc3RyWzBdKSkpCiAJCXl5ZXJyb3IoIlZJUlRLRVkgY29kZSBpcyBub3QgZXF1YWwgdG8gYXNjaWkgdmFsdWUiKTsKIAotCWlmKGtleS0+c3RyLmNzdHJbMF0gPT0gJ14nKQorCWlmKGtleS0+c3RyLmNzdHJbMF0gPT0gJ14nICYmIChmbGFncyAmIFdSQ19BRl9DT05UUk9MKSAhPSAwKQorCXsKKwkJeXllcnJvcigiQ2Fubm90IHVzZSBib3RoICdeJyBhbmQgQ09OVFJPTCBtb2RpZmllciIpOworCX0KKwllbHNlIGlmKGtleS0+c3RyLmNzdHJbMF0gPT0gJ14nKQogCXsKIAkJa2V5Y29kZSA9IHRvdXBwZXIoa2V5LT5zdHIuY3N0clsxXSkgLSAnQCc7CiAJCWlmKGtleWNvZGUgPj0gJyAnKQpAQCAtMTg3OSw3ICsxODk4LDcgQEAKIAkJCiAJZnAgPSBmb3BlbihuYW1lLT5zdHIuY3N0ciwgInJiIik7CiAJaWYoIWZwKQotCQl5eWVycm9yKCJDYW5ub3Qgb3BlbiBmaWxlICVzIiwgbmFtZSk7CisJCXl5ZXJyb3IoIkNhbm5vdCBvcGVuIGZpbGUgJXMiLCBuYW1lLT5zdHIuY3N0cik7CiAJcmQgPSBuZXdfcmF3X2RhdGEoKTsKIAlmc2VlayhmcCwgMCwgU0VFS19FTkQpOwogCXJkLT5zaXplID0gZnRlbGwoZnApOwpAQCAtMjE3NSw2ICsyMTk0LDcgQEAKIAl7CiAJCWljbyA9IG5ld19pY29uKCk7CiAJCWljby0+aWQgPSBhbGxvY19pY29uX2lkKCk7CisJCWljby0+bHZjLmxhbmd1YWdlID0gZHVwX2xhbmd1YWdlKGljb2ctPmx2Yy5sYW5ndWFnZSk7CiAJCWlmKGlkZVtpXS5vZmZzZXQgPiByZC0+c2l6ZQogCQl8fCBpZGVbaV0ub2Zmc2V0ICsgaWRlW2ldLnJlc3NpemUgPiByZC0+c2l6ZSkKIAkJCXl5ZXJyb3IoIkljb24gcmVzb3VyY2UgZGF0YSBjb3JydXB0Iik7CkBAIC0yMjI3LDYgKzIyNDcsNyBAQAogCXsKIAkJY3VyID0gbmV3X2N1cnNvcigpOwogCQljdXItPmlkID0gYWxsb2NfY3Vyc29yX2lkKCk7CisJCWN1ci0+bHZjLmxhbmd1YWdlID0gZHVwX2xhbmd1YWdlKGN1cmctPmx2Yy5sYW5ndWFnZSk7CiAJCWlmKGNkZVtpXS5vZmZzZXQgPiByZC0+c2l6ZQogCQl8fCBjZGVbaV0ub2Zmc2V0ICsgY2RlW2ldLnJlc3NpemUgPiByZC0+c2l6ZSkKIAkJCXl5ZXJyb3IoIkN1cnNvciByZXNvdXJjZSBkYXRhIGNvcnJ1cHQiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3dyYy91dGlscy5jIGIvdG9vbHMvd3JjL3V0aWxzLmMKaW5kZXggMWNiOGFiOC4uN2QxYjY3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvd3JjL3V0aWxzLmMKKysrIGIvdG9vbHMvd3JjL3V0aWxzLmMKQEAgLTE1LDExICsxNSwxMCBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgIndyYy5oIgogI2luY2x1ZGUgInV0aWxzLmgiCisjaW5jbHVkZSAicGFyc2VyLmgiCiAKICNkZWZpbmUgV0FOVF9ORUFSX0lORElDQVRJT04KIAotZXh0ZXJuIGludCBsaW5lX251bWJlcjsKLWV4dGVybiBjaGFyKiB5eXRleHQ7CiAKICNpZmRlZiBXQU5UX05FQVJfSU5ESUNBVElPTgogdm9pZCBtYWtlX3ByaW50KGNoYXIgKnN0cikKQEAgLTM3LDcgKzM2LDcgQEAKIHsKIAl2YV9saXN0IGFwOwogCXZhX3N0YXJ0KGFwLCBzKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yICVzOiAlZDogIiwgaW5wdXRfbmFtZSA/IGlucHV0X25hbWUgOiAic3RkaW4iLCBsaW5lX251bWJlcik7CisJZnByaW50ZihzdGRlcnIsICJFcnJvciAlczogJWQsICVkOiAiLCBpbnB1dF9uYW1lID8gaW5wdXRfbmFtZSA6ICJzdGRpbiIsIGxpbmVfbnVtYmVyLCBjaGFyX251bWJlcik7CiAJdmZwcmludGYoc3RkZXJyLCBzLCBhcCk7CiAjaWZkZWYgV0FOVF9ORUFSX0lORElDQVRJT04KIAl7CkBAIC00Nyw3ICs0Niw3IEBACiAJCWZyZWUoY3B5KTsKIAl9CiAjZWxzZQotCWZwcmludGYoc3RkZXJyLCAiXG4iLCB5eXRleHQpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgogCXZhX2VuZChhcCk7CiAJZXhpdCgxKTsKQEAgLTU4LDcgKzU3LDcgQEAKIHsKIAl2YV9saXN0IGFwOwogCXZhX3N0YXJ0KGFwLCBzKTsKLQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmcgJXM6JWQ6ICIsIGlucHV0X25hbWUgPyBpbnB1dF9uYW1lIDogInN0ZGluIiwgbGluZV9udW1iZXIpOworCWZwcmludGYoc3RkZXJyLCAiV2FybmluZyAlczogJWQsICVkOiAiLCBpbnB1dF9uYW1lID8gaW5wdXRfbmFtZSA6ICJzdGRpbiIsIGxpbmVfbnVtYmVyLCBjaGFyX251bWJlcik7CiAJdmZwcmludGYoc3RkZXJyLCBzLCBhcCk7CiAjaWZkZWYgV0FOVF9ORUFSX0lORElDQVRJT04KIAl7CkBAIC02OCw3ICs2Nyw3IEBACiAJCWZyZWUoY3B5KTsKIAl9CiAjZWxzZQotCWZwcmludGYoc3RkZXJyLCAiXG4iLCB5eXRleHQpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgogCXZhX2VuZChhcCk7CiAJcmV0dXJuIDA7CkBAIC0xODksNyArMTg4LDcgQEAKIAl9CiAJZWxzZQogCXsKLQkJZXJyb3IoIkNhbm5vdCB5ZXQgY29tcGFyZSB1bmljb2RlIHN0cmluZ3MiKTsKKwkJaW50ZXJuYWxfZXJyb3IoX19GSUxFX18sIF9fTElORV9fLCAiQ2Fubm90IHlldCBjb21wYXJlIHVuaWNvZGUgc3RyaW5ncyIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNyw3ICsyMTYsNyBAQAogCWludCByZXR2YWwgPSBzdHJpY21wKGNzMSwgY3MyKTsKIAlmcmVlKGNzMSk7CiAJZnJlZShjczIpOwotCXdhcm5pbmcoIkNvbXBhcmluZyB1bmljb2RlIHN0cmluZ3MgLT4gY29udmVydGluZyB0byBhc2NpaSIpOworCXdhcm5pbmcoIkNvbXBhcmluZyB1bmljb2RlIHN0cmluZ3Mgd2l0aG91dCBjYXNlIC0+IGNvbnZlcnRpbmcgdG8gYXNjaWkiKTsKIAlyZXR1cm4gcmV0dmFsOzsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvd3JjL3dyYy5jIGIvdG9vbHMvd3JjL3dyYy5jCmluZGV4IDZmZmNkMjkuLmY5ZTFjNmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3dyYy93cmMuYworKysgYi90b29scy93cmMvd3JjLmMKQEAgLTMsNiArMywxMiBAQAogICogQ29weXJpZ2h0ICBNYXJ0aW4gdm9uIExvZXdpcywgMTk5NAogICogQ29weXJpZ250IDE5OTggQmVydGhvIEEuIFN0dWx0aWVucyAoQlMpCiAgKgorICogMjAtSnVuLTE5OTggQlMJLSBBZGRlZCAtTCBvcHRpb24gdG8gcHJldmVudCBjYXNlIGNvbnZlcnNpb24KKyAqCQkJICBvZiBlbWJlZGRlZCBmaWxlbmFtZXMuCisgKgorICogMDgtSnVuLTE5OTggQlMJLSBBZGRlZCAtQSBvcHRpb24gdG8gZ2VuZXJhdGUgYXV0b3JlZ2lzdGVyIGNvZGUKKyAqCQkJICBmb3Igd2luZWxpYiBvcGVyYXRpb24uCisgKgogICogMjEtTWF5LTE5OTggQlMJLSBSZW1vdmVkIHRoZSBDUFAgb3B0aW9uLiBJdHMgaW50ZXJuYWwgbm93LgogICoJCQktIEFkZGVkIGltcGxlbWVudGF0aW9ucyBmb3IgZGVmaW5lcyBhbmQgaW5jbHVkZXMKICAqCQkJICBvbiB0aGUgY29tbWFuZGxpbmUuCkBAIC01OCw2ICs2NCw3IEBACiAJIiAgIC1IIGZpbGUgICAgIFNhbWUgYXMgLWggYnV0IHdyaXR0ZW4gdG8gZmlsZVxuIgogCSIgICAtSSBwYXRoICAgICBTZXQgaW5jbHVkZSBzZWFyY2ggZGlyIHRvIHBhdGggKG11bHRpcGxlIC1JIGFsbG93ZWQpXG4iCiAJIiAgIC1sIGxhbiAgICAgIFNldCBkZWZhdWx0IGxhbmd1YWdlIHRvIGxhbiAoZGVmYXVsdCBpcyBuZXV0cmFsIHswfSlcbiIKKwkiICAgLUwgICAgICAgICAgTGVhdmUgY2FzZSBvZiBlbWJlZGRlZCBmaWxlbmFtZXMgYXMgaXNcbiIKIAkiICAgLW4gICAgICAgICAgRG8gbm90IGdlbmVyYXRlIC5zIGZpbGVcbiIKIAkiICAgLW8gZmlsZSAgICAgT3V0cHV0IHRvIGZpbGUgKGRlZmF1bHQgaXMgaW5maWxlLltyZXN8c3xoXVxuIgogCSIgICAtcCBwcmVmaXggICBHaXZlIGEgcHJlZml4IGZvciB0aGUgZ2VuZXJhdGVkIG5hbWVzXG4iCkBAIC0xMDYsOSArMTEzLDYgQEAKIAogLyoKICAqIENyZWF0ZSBhIC5yZXMgZmlsZSBmcm9tIHRoZSBzb3VyY2UgYW5kIGV4aXQgKC1yIG9wdGlvbikuCi0gKiBUaGUgY29tcGlsZXIgYWN0dWFsbHkgYWx3YXlzIGNyZWF0ZXMgdGhpcyBmaWxlLCBhbmQgdGhlbgotICogY29udmVydHMgaXQgaW50byB3aGF0ZXZlciBpcyByZXF1ZXN0ZWQuIFRoZSBjb21waWxlciBqdXN0Ci0gKiBzdG9wcyBhZnRlciB0aGUgcmVzLWZpbGUgd2hlbiBjcmVhdGVfcmVzIGlzIHNldC4KICAqLwogaW50IGNyZWF0ZV9yZXMgPSAwOwogCkBAIC0xODgsNiArMTkyLDEyIEBACiAgKi8KIGludCBhdXRvX3JlZ2lzdGVyID0gMDsKIAorLyoKKyAqIFNldCB3aGVuIHRoZSBjYXNlIG9mIGVtYmVkZGVkIGZpbGVuYW1lcyBzaG91bGQgbm90IGJlIGNvbnZlcnRlZAorICogdG8gbG93ZXIgY2FzZSAoLUwgb3B0aW9uKQorICovCitpbnQgbGVhdmVfY2FzZSA9IDA7CisKIGNoYXIgKm91dHB1dF9uYW1lOwkJLyogVGhlIG5hbWUgZ2l2ZW4gYnkgdGhlIC1vIG9wdGlvbiAqLwogY2hhciAqaW5wdXRfbmFtZTsJCS8qIFRoZSBuYW1lIGdpdmVuIG9uIHRoZSBjb21tYW5kLWxpbmUgKi8KIGNoYXIgKmhlYWRlcl9uYW1lOwkJLyogVGhlIG5hbWUgZ2l2ZW4gYnkgdGhlIC1IIG9wdGlvbiAqLwpAQCAtMjIzLDcgKzIzMyw3IEBACiAJCQlzdHJjYXQoY21kbGluZSwgIiAiKTsKIAl9CiAKLQl3aGlsZSgob3B0YyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpBYmNDOmQ6RDplZ2hIOkk6bDpubzpwOnJzdFRWdzpXIikpICE9IEVPRikKKwl3aGlsZSgob3B0YyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpBYmNDOmQ6RDplZ2hIOkk6bDpMbm86cDpyc3RUVnc6VyIpKSAhPSBFT0YpCiAJewogCQlzd2l0Y2gob3B0YykKIAkJewpAQCAtMjcwLDYgKzI4MCw5IEBACiAJCQkJY3VycmVudGxhbmd1YWdlID0gbmV3X2xhbmd1YWdlKFBSSU1BUllMQU5HSUQobGFuKSwgU1VCTEFOR0lEKGxhbikpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgJ0wnOgorCQkJbGVhdmVfY2FzZSA9IDE7CisJCQlicmVhazsKIAkJY2FzZSAnbic6CiAJCQljcmVhdGVfcyA9IDA7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3Rvb2xzL3dyYy93cmMuaCBiL3Rvb2xzL3dyYy93cmMuaAppbmRleCBiM2Q4ZWY2Li4zNzFiOTY1IDEwMDY0NAotLS0gYS90b29scy93cmMvd3JjLmgKKysrIGIvdG9vbHMvd3JjL3dyYy5oCkBAIC0xMiw4ICsxMiw4IEBACiAjaW5jbHVkZSAid3JjdHlwZXMuaCIKICNlbmRpZgogCi0jZGVmaW5lIFdSQ19WRVJTSU9OCSIxLjAuMSIKLSNkZWZpbmUgV1JDX1JFTEVBU0VEQVRFCSIoMDgtSnVuLTE5OTgpIgorI2RlZmluZSBXUkNfVkVSU0lPTgkiMS4wLjIiCisjZGVmaW5lIFdSQ19SRUxFQVNFREFURQkiKDIwLUp1bi0xOTk4KSIKICNkZWZpbmUgV1JDX0ZVTExWRVJTSU9OIFdSQ19WRVJTSU9OICIgIiBXUkNfUkVMRUFTRURBVEUKIAogLyogT25seSB1c2VkIGluIGhlYXZ5IGRlYnVnZ2luZyBzZXNzaW9ucyAqLwpAQCAtNzcsNiArNzcsNyBAQAogZXh0ZXJuIERXT1JEIGNvZGVwYWdlOwogZXh0ZXJuIGludCBwZWRhbnRpYzsKIGV4dGVybiBpbnQgYXV0b19yZWdpc3RlcjsKK2V4dGVybiBpbnQgbGVhdmVfY2FzZTsKIAogZXh0ZXJuIGNoYXIgKnByZWZpeDsKIGV4dGVybiBjaGFyICpvdXRwdXRfbmFtZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3dyYy93cmN0eXBlcy5oIGIvdG9vbHMvd3JjL3dyY3R5cGVzLmgKaW5kZXggMDAwNzVkZS4uZWViZGI1NiAxMDA2NDQKLS0tIGEvdG9vbHMvd3JjL3dyY3R5cGVzLmgKKysrIGIvdG9vbHMvd3JjL3dyY3R5cGVzLmgKQEAgLTIzOSw3ICsyMzksNyBAQAogfSBmb250X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGljb25fZGlyX2VudHJ5IHsKLSAgICBCWVRFICB3aWR0aDsJLyogRnJvbSB0aGUgU0tEIGRvYy4gKi8KKyAgICBCWVRFICB3aWR0aDsJLyogRnJvbSB0aGUgU0RLIGRvYy4gKi8KICAgICBCWVRFICBoZWlnaHQ7CiAgICAgQllURSAgbmNscjsKICAgICBCWVRFICByZXNlcnZlZDsKQEAgLTI1Miw2ICsyNTIsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgaWNvbiB7CiAJc3RydWN0IGljb24JKm5leHQ7CiAJc3RydWN0IGljb24JKnByZXY7CisJbHZjX3QJCWx2YzsKIAlpbnQJCWlkOwkvKiBVbmlxdWUgaWNvbiBpZCB3aXRoaW4gcmVzb3VyY2UgZmlsZSAqLwogCWludAkJd2lkdGg7CS8qIEZpZWxkIGZyb20gdGhlIEljb25EaXJFbnRyeSAqLwogCWludAkJaGVpZ2h0OwpAQCAtMjYzLDEyICsyNjQsMTMgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgaWNvbl9ncm91cCB7CiAJRFdPUkQJCW1lbW9wdDsKKwlsdmNfdAkJbHZjOwogCWljb25fdAkJKmljb25saXN0OwogCWludAkJbmljb247CiB9IGljb25fZ3JvdXBfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgY3Vyc29yX2Rpcl9lbnRyeSB7Ci0gICAgQllURSAgd2lkdGg7CS8qIEZyb20gdGhlIFNLRCBkb2MuICovCisgICAgQllURSAgd2lkdGg7CS8qIEZyb20gdGhlIFNESyBkb2MuICovCiAgICAgQllURSAgaGVpZ2h0OwogICAgIEJZVEUgIG5jbHI7CiAgICAgQllURSAgcmVzZXJ2ZWQ7CkBAIC0yODEsNiArMjgzLDcgQEAKIHR5cGVkZWYgc3RydWN0IGN1cnNvciB7CiAJc3RydWN0IGN1cnNvcgkqbmV4dDsKIAlzdHJ1Y3QgY3Vyc29yCSpwcmV2OworCWx2Y190CQlsdmM7CiAJaW50CQlpZDsJLyogVW5pcXVlIGljb24gaWQgd2l0aGluIHJlc291cmNlIGZpbGUgKi8KIAlpbnQJCXdpZHRoOwkvKiBGaWVsZCBmcm9tIHRoZSBDdXJzb3JEaXJFbnRyeSAqLwogCWludAkJaGVpZ2h0OwpAQCAtMjk0LDYgKzI5Nyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IGN1cnNvcl9ncm91cCB7CiAJRFdPUkQJCW1lbW9wdDsKKwlsdmNfdAkJbHZjOwogCWN1cnNvcl90CSpjdXJzb3JsaXN0OwogCWludAkJbmN1cnNvcjsKIH0gY3Vyc29yX2dyb3VwX3Q7CmRpZmYgLS1naXQgYS90b29scy93cmMvd3JpdGVyZXMuYyBiL3Rvb2xzL3dyYy93cml0ZXJlcy5jCmluZGV4IGJkMmZhMzYuLmVmMTc2MTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3dyYy93cml0ZXJlcy5jCisrKyBiL3Rvb2xzL3dyYy93cml0ZXJlcy5jCkBAIC05MzIsNyArOTMyLDggQEAKIAl9CiAKIAlub3cgPSB0aW1lKE5VTEwpOwotCWZwcmludGYoZm8sIHNfZmlsZV9oZWFkX3N0ciwgaW5wdXRfbmFtZSwgY21kbGluZSwgY3RpbWUoJm5vdykpOworCWZwcmludGYoZm8sIHNfZmlsZV9oZWFkX3N0ciwgaW5wdXRfbmFtZSA/IGlucHV0X25hbWUgOiAic3RkaW4iLAorICAgICAgICAgICAgICAgIGNtZGxpbmUsIGN0aW1lKCZub3cpKTsKIAogCS8qIEdldCBhbiBpZGVhIGhvdyBtYW55IHdlIGhhdmUgYW5kIHJlc3RydWN0dXJlIHRoZSB0YWJsZXMgKi8KIAljb3VudF9yZXNvdXJjZXModG9wKTsKQEAgLTEwODQsNyArMTA4NSw4IEBACiAJfQogCiAJdGltZSgmbm93KTsKLQlmcHJpbnRmKGZvLCBoX2ZpbGVfaGVhZF9zdHIsIGlucHV0X25hbWUsIGNtZGxpbmUsIGN0aW1lKCZub3cpLCBub3csIG5vdyk7CisJZnByaW50ZihmbywgaF9maWxlX2hlYWRfc3RyLCBpbnB1dF9uYW1lID8gaW5wdXRfbmFtZSA6ICJzdGRpbiIsCisgICAgICAgICAgICAgICAgY21kbGluZSwgY3RpbWUoJm5vdyksIG5vdywgbm93KTsKIAogCS8qIEZpcnN0IHdyaXRlIHRoZSBzZWdtZW50IHRhYmxlcyByZWZlcmVuY2UgKi8KIAlpZihjcmVhdGVfZGlyKQpkaWZmIC0tZ2l0IGEvd2luMzIvZGV2aWNlLmMgYi93aW4zMi9kZXZpY2UuYwppbmRleCA1MjhkMzZhLi4wNTJlNDcyIDEwMDY0NAotLS0gYS93aW4zMi9kZXZpY2UuYworKysgYi93aW4zMi9kZXZpY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIm1tc3lzdGVtLmgiCiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAid2luaW9jdGwuaCIKIAogdm9pZCBERVZJQ0VfRGVzdHJveShLMzJPQkogKmRldik7CiBjb25zdCBLMzJPQkpfT1BTIERFVklDRV9PcHMgPQpAQCAtNzEsNiArNzIsMTIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQlEZXZpY2VJb0NvbnRyb2wgKEtFUk5FTDMyLjE4OCkKKyAqIFRoaXMgaXMgb25lIG9mIHRob3NlIGJpZyB1Z2x5IG5hc3R5IHByb2NlZHVyZSB3aGljaCBjYW4gZG8KKyAqIGEgbWlsbGlvbiBhbmQgb25lIHRoaW5ncyB3aGVuIGl0IGNvbWVzIHRvIGRldmljZXMuIEl0IGNhbiBhbHNvIGJlCisgKiB1c2VkIGZvciBWeEQgY29tbXVuaWNhdGlvbi4KKyAqCisgKiBBIHJldHVybiB2YWx1ZSBvZiBGQUxTRSBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgd3Jvbmcgd2hpY2gKKyAqIEdldExhc3RFcnJvciBjYW4gZGVjeXBoZXIuCiAgKi8KIEJPT0wzMiBXSU5BUEkgRGV2aWNlSW9Db250cm9sKEhBTkRMRTMyIGhEZXZpY2UsIERXT1JEIGR3SW9Db250cm9sQ29kZSwgCiAJCQkgICAgICBMUFZPSUQgbHB2bG5CdWZmZXIsIERXT1JEIGNibG5CdWZmZXIsCkBAIC04NSwxMiArOTIsMjMgQEAKIAkJaERldmljZSxkd0lvQ29udHJvbENvZGUsbHB2bG5CdWZmZXIsY2JsbkJ1ZmZlciwKIAkJbHB2T3V0QnVmZmVyLGNiT3V0QnVmZmVyLGxwY2JCeXRlc1JldHVybmVkLGxwT3ZlcmxhcHBlZAogCSk7CisKIAlpZiAoIWRldikKKwl7CisJCVNldExhc3RFcnJvciggRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgKTsKIAkJcmV0dXJuIEZBTFNFOwotCS8qIEZJWE1FOiBTZXQgYXBwcm9wcmlhdGUgZXJyb3IgKi8KLQlGSVhNRSh3aW4zMiwiCWRldmljZSAlc1xuIixkZXYtPmRldm5hbWUpOwotCWlmICghc3RyY21wKGRldi0+ZGV2bmFtZSwiVlREQVBJIikpIHsKLQkJc3dpdGNoIChkd0lvQ29udHJvbENvZGUpIHsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGlzIGlzIGEgdXNlciBkZWZpbmVkIGNvbnRyb2wgY29kZSBmb3IgYSBWeEQgKi8KKyAgICAgICAgaWYoIEhJV09SRCggZHdJb0NvbnRyb2xDb2RlICkgPT0gMCApCisgICAgICAgIHsKKwkgICAgLyogRklYTUU6IFNldCBhcHByb3ByaWF0ZSBlcnJvciAqLworCSAgICBGSVhNRSh3aW4zMiwiIFZ4RCBkZXZpY2UgJXMgbXNnXG4iLGRldi0+ZGV2bmFtZSk7CisgCisJICAgIGlmICghc3RyY21wKGRldi0+ZGV2bmFtZSwiVlREQVBJIikpCisgICAgICAgICAgICB7CisJCXN3aXRjaCAoZHdJb0NvbnRyb2xDb2RlKQorICAgICAgICAgICAgICAgIHsKIAkJY2FzZSA1OglpZiAobHB2T3V0QnVmZmVyICYmIChjYk91dEJ1ZmZlcj49NCkpCiAJCQkJKihEV09SRCopbHB2T3V0QnVmZmVyID0gdGltZUdldFRpbWUoKTsKIAkJCWlmIChscGNiQnl0ZXNSZXR1cm5lZCkKQEAgLTk5LDcgKzExNyw1NCBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwkKKyAgICAgICAgICAgfQogCX0KLQlGSVhNRSh3aW4zMiwiCSh1bmhhbmRsZWQpXG4iKTsKLQlyZXR1cm4gRkFMU0U7CisJZWxzZQorCXsKKwkJc3dpdGNoKCBkd0lvQ29udHJvbENvZGUgKQorCQl7CisJCWNhc2UgRlNDVExfREVMRVRFX1JFUEFSU0VfUE9JTlQ6CisJCWNhc2UgRlNDVExfRElTTU9VTlRfVk9MVU1FOgorCQljYXNlIEZTQ1RMX0dFVF9DT01QUkVTU0lPTjoKKwkJY2FzZSBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVDoKKwkJY2FzZSBGU0NUTF9MT0NLX1ZPTFVNRToKKwkJY2FzZSBGU0NUTF9RVUVSWV9BTExPQ0FURURfUkFOR0VTOgorCQljYXNlIEZTQ1RMX1NFVF9DT01QUkVTU0lPTjoKKwkJY2FzZSBGU0NUTF9TRVRfUkVQQVJTRV9QT0lOVDoKKwkJY2FzZSBGU0NUTF9TRVRfU1BBUlNFOgorCQljYXNlIEZTQ1RMX1NFVF9aRVJPX0RBVEE6CisJCWNhc2UgRlNDVExfVU5MT0NLX1ZPTFVNRToKKwkJY2FzZSBJT0NUTF9ESVNLX0NIRUNLX1ZFUklGWToKKwkJY2FzZSBJT0NUTF9ESVNLX0VKRUNUX01FRElBOgorCQljYXNlIElPQ1RMX0RJU0tfRk9STUFUX1RSQUNLUzoKKwkJY2FzZSBJT0NUTF9ESVNLX0dFVF9EUklWRV9HRU9NRVRSWToKKwkJY2FzZSBJT0NUTF9ESVNLX0dFVF9EUklWRV9MQVlPVVQ6CisJCWNhc2UgSU9DVExfRElTS19HRVRfTUVESUFfVFlQRVM6CisJCWNhc2UgSU9DVExfRElTS19HRVRfUEFSVElUSU9OX0lORk86CisJCWNhc2UgSU9DVExfRElTS19MT0FEX01FRElBOgorCQljYXNlIElPQ1RMX0RJU0tfTUVESUFfUkVNT1ZBTDoKKwkJY2FzZSBJT0NUTF9ESVNLX1BFUkZPUk1BTkNFOgorCQljYXNlIElPQ1RMX0RJU0tfUkVBU1NJR05fQkxPQ0tTOgorCQljYXNlIElPQ1RMX0RJU0tfU0VUX0RSSVZFX0xBWU9VVDoKKwkJY2FzZSBJT0NUTF9ESVNLX1NFVF9QQVJUSVRJT05fSU5GTzoKKwkJY2FzZSBJT0NUTF9ESVNLX1ZFUklGWToKKwkJY2FzZSBJT0NUTF9TRVJJQUxfTFNSTVNUX0lOU0VSVDoKKwkJY2FzZSBJT0NUTF9TVE9SQUdFX0NIRUNLX1ZFUklGWToKKwkJY2FzZSBJT0NUTF9TVE9SQUdFX0VKRUNUX01FRElBOgorCQljYXNlIElPQ1RMX1NUT1JBR0VfR0VUX01FRElBX1RZUEVTOgorCQljYXNlIElPQ1RMX1NUT1JBR0VfTE9BRF9NRURJQToKKwkJY2FzZSBJT0NUTF9TVE9SQUdFX01FRElBX1JFTU9WQUw6CisgICAgCQkJRklYTUUoIHdpbjMyLCAidW5pbXBsZW1lbnRlZCBkd0lvQ29udHJvbENvZGU9JTA4bHhcbiIsIGR3SW9Db250cm9sQ29kZSk7CisgICAgCQkJU2V0TGFzdEVycm9yKCBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCApOworICAgIAkJCXJldHVybiBGQUxTRTsKKyAgICAJCQlicmVhazsKKwkJZGVmYXVsdDoKKyAgICAJCQlGSVhNRSggd2luMzIsICJpZ25vcmVkIGR3SW9Db250cm9sQ29kZT0lMDhseFxuIixkd0lvQ29udHJvbENvZGUpOworICAgIAkJCVNldExhc3RFcnJvciggRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQgKTsKKyAgICAJCQlyZXR1cm4gRkFMU0U7CisgICAgCQkJYnJlYWs7CisJCX0KKwl9CisgICAJcmV0dXJuIEZBTFNFOwogfQpkaWZmIC0tZ2l0IGEvd2luMzIvZmlsZS5jIGIvd2luMzIvZmlsZS5jCmluZGV4IGNiYTg3MGYuLjNkMjQ2NDAgMTAwNjQ0Ci0tLSBhL3dpbjMyL2ZpbGUuYworKysgYi93aW4zMi9maWxlLmMKQEAgLTk3LDcgKzk3LDI5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICBDcmVhdGVGaWxlMzJBICAgICAgICAgICAgICAoS0VSTkVMMzIuNDUpCisgKiBDcmVhdGVGaWxlMzJBIFtLRVJORUwzMi40NV0gIENyZWF0ZXMgb3Igb3BlbnMgYSBmaWxlIG9yIG90aGVyIG9iamVjdAorICoKKyAqIENyZWF0ZXMgb3Igb3BlbnMgYW4gb2JqZWN0LCBhbmQgcmV0dXJucyBhIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvCisgKiBhY2Nlc3MgdGhhdCBvYmplY3QuCisgKgorICogUEFSQU1TCisgKgorICogZmlsZW5hbWUJW0ldIHBvaW50ZXIgdG8gZmlsZW5hbWUgdG8gYmUgYWNjZXNzZWQKKyAqIGFjY2VzcwlbSV0gYWNjZXNzIG1vZGUgcmVxdWVzdGVkCisgKiBzaGFyaW5nCVtJXSBzaGFyZSBtb2RlCisgKiBzZWN1cml0eQlbSV0gcG9pbnRlciB0byBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKiBjcmVhdGlvbglbSV0gPworICogYXR0cmlidXRlcwlbSV0gPworICogdGVtcGxhdGUJW0ldIGhhbmRsZSB0byBmaWxlIHdpdGggYXR0cmlidXRlcyB0byBjb3B5CisgKgorICogUkVUVVJOUworICogICBTdWNjZXNzOiBPcGVuIGhhbmRsZSB0byBzcGVjaWZpZWQgZmlsZQorICogICBGYWlsdXJlOiBJTlZBTElEX0hBTkRMRV9WQUxVRQorICoKKyAqIE5PVEVTCisgKiAgU2hvdWxkIGNhbGwgU2V0TGFzdEVycm9yKCkgb24gZmFpbHVyZS4KKyAqCisgKiBCVUdTCiAgKgogICogRG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzLCBwaXBlcywgdGVtcGxhdGUgZmlsZXMsIG9yIGEKICAqIGxvdCBvZiB0aGUgJ2F0dHJpYnV0ZXMnIGZsYWdzIHlldC4KZGlmZiAtLWdpdCBhL3dpbjMyL29yZGluYWxzLmMgYi93aW4zMi9vcmRpbmFscy5jCmluZGV4IDQ4MWZhMDguLmExMDc3YTYgMTAwNjQ0Ci0tLSBhL3dpbjMyL29yZGluYWxzLmMKKysrIGIvd2luMzIvb3JkaW5hbHMuYwpAQCAtMTAxLDcgKzEwMSw2IEBACiAgKiAgICAgICAgICAgR2V0UHJvY2Vzc0R3b3JkICAgIChLRVJORUwzMi4xOCkKICAqICdPZiBjb3Vyc2UgeW91IGNhbm5vdCBkaXJlY3RseSBhY2Nlc3MgV2luZG93cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzJwogICovCi0KIERXT1JEIFdJTkFQSSBHZXRQcm9jZXNzRHdvcmQoRFdPUkQgcHJvY2Vzc2lkLERXT1JEIGFjdGlvbikKIHsKIAlQREIzMgkqcHJvY2VzcyA9IHByb2Nlc3NpZD8gUFJPQ0VTU19JZFRvUERCKCBwcm9jZXNzaWQgKQpAQCAtMTcxLDcgKzE3MCw2IEBACiAJLyogc2hvdWxkbid0IGNvbWUgaGVyZSAqLwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCUdldFdpbjE2RE9TRW52CQkJKEtFUk5FTDMyLjM0KQogICogUmV0dXJucyBzb21lIGludGVybmFsIHZhbHVlLi4uLiBwcm9iYWJseSB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCBkYXRhYmFzZT8KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZHJpdmVyLmMgYi93aW5kb3dzL2RyaXZlci5jCmluZGV4IGY2MmIzZjEuLmUzOGZlY2YgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZHJpdmVyLmMKKysrIGIvd2luZG93cy9kcml2ZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImRyaXZlci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIExQRFJJVkVSSVRFTSBscERydkl0ZW1MaXN0ID0gTlVMTDsKIExQRFJJVkVSSVRFTTMyQSBscERydkl0ZW1MaXN0MzIgPSBOVUxMOwpAQCAtMTIxLDcgKzEyMiw3IEBACiAgICAgbHBkcnYgPSBscERydkl0ZW1MaXN0OwogICAgIHdoaWxlIChscGRydikJCQkvKiBYWFggZmluZCBpdC4uLiBsaWtlIHRoaXM/ICovCiAgICAgewotCWlmICghbHN0cmNtcGkzMkEoIGxwRHJpdmVyTmFtZSwgbHBkcnYtPmRpcy5zekFsaWFzTmFtZSApKQorCWlmICghc3RyY2FzZWNtcCggbHBEcml2ZXJOYW1lLCBscGRydi0+ZGlzLnN6QWxpYXNOYW1lICkpCiAJewogCSAgICBscGRydi0+Y291bnQrKzsKIAkgICAgU2VuZERyaXZlck1lc3NhZ2UxNiggbHBkcnYtPmRpcy5oRHJpdmVyLCBEUlZfT1BFTiwgMEwsIGxQYXJhbSApOwpAQCAtMjA1LDcgKzIwNiw3IEBACiAKICAgICBscGRydiA9IGxwRHJ2SXRlbUxpc3QzMjsKICAgICB3aGlsZSAobHBkcnYpIHsKLQlpZiAoIWxzdHJjbXBpMzJBKCBscERyaXZlck5hbWUsIGxwZHJ2LT5kaXMuc3pBbGlhc05hbWUgKSkgeworCWlmICghc3RyY2FzZWNtcCggbHBEcml2ZXJOYW1lLCBscGRydi0+ZGlzLnN6QWxpYXNOYW1lICkpIHsKIAkgICAgbHBkcnYtPmNvdW50Kys7CiAJICAgIGxwZHJ2LT5kaXMuaERyaXZlciA9IFNlbmREcml2ZXJNZXNzYWdlMzIoIGxwZHJ2LT5kaXMuaERyaXZlciwgRFJWX09QRU4sICIiLypGSVhNRSovLCAwTCApOwogCSAgICByZXR1cm4gKEhEUlZSMzIpbHBkcnY7CmRpZmYgLS1naXQgYS93aW5kb3dzL25vbmNsaWVudC5jIGIvd2luZG93cy9ub25jbGllbnQuYwppbmRleCA1MjFjMGIxLi5mOTkxN2VlIDEwMDY0NAotLS0gYS93aW5kb3dzL25vbmNsaWVudC5jCisrKyBiL3dpbmRvd3Mvbm9uY2xpZW50LmMKQEAgLTM2LDYgKzM2LDcgQEAKIEhCUlVTSDMyICBOQ19XaW5TaGFkb3c5NTsKIAogc3RhdGljIEhCSVRNQVAxNiBoYml0bWFwQ2xvc2UgPSAwOworc3RhdGljIEhCSVRNQVAxNiBoYml0bWFwQ2xvc2VEID0gMDsKIHN0YXRpYyBIQklUTUFQMTYgaGJpdG1hcE1pbmltaXplID0gMDsKIHN0YXRpYyBIQklUTUFQMTYgaGJpdG1hcE1pbmltaXplRCA9IDA7CiBzdGF0aWMgSEJJVE1BUDE2IGhiaXRtYXBNYXhpbWl6ZSA9IDA7CkBAIC01NCw2ICs1NSwxNSBAQAogICAgICgoKHN0eWxlKSAmIFdTX1RISUNLRlJBTUUpICYmIFwKICAgICAgISgoKHN0eWxlKSAmIChXU19ETEdGUkFNRXxXU19CT1JERVIpKSA9PSBXU19ETEdGUkFNRSkpCiAKKyNkZWZpbmUgSEFTX0ZJWEVERlJBTUUoc3R5bGUsZXhTdHlsZSkgXAorICAgKCgoKChleFN0eWxlKSAmIFdTX0VYX0RMR01PREFMRlJBTUUpIHx8IFwKKyAgICAgICgoc3R5bGUpICYgV1NfRExHRlJBTUUpKSAmJiAoKHN0eWxlKSAmIFdTX0JPUkRFUikpICYmIFwKKyAgICAgISgoc3R5bGUpICYgV1NfVEhJQ0tGUkFNRSkpCisKKyNkZWZpbmUgSEFTX1NJWkVGUkFNRShzdHlsZSkgXAorICAgICgoKHN0eWxlKSAmIFdTX1RISUNLRlJBTUUpICYmIFwKKyAgICAgISgoKHN0eWxlKSAmIChXU19ETEdGUkFNRXxXU19CT1JERVIpKSA9PSBXU19ETEdGUkFNRSkpCisKICNkZWZpbmUgSEFTX01FTlUodykgICghKCh3KS0+ZHdTdHlsZSAmIFdTX0NISUxEKSAmJiAoKHcpLT53SURtZW51ICE9IDApKQogCiAjZGVmaW5lIE9OX0xFRlRfQk9SREVSKGhpdCkgXApAQCAtMTEzLDI5ICsxMjMsMzQgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQ19BZGp1c3RSZWN0T3V0ZXI5NQogICoKLSAqICAgTkNfQWRqdXN0UmVjdDk1KAotICogICAgICBMUFJFQ1QxNiAgcmVjdCwKLSAqICAgICAgRFdPUkQgIHN0eWxlLAotICogICAgICBCT09MMzIgIG1lbnUsCi0gKiAgICAgIERXT1JEICBleFN0eWxlICkKKyAqIENvbXB1dGVzIHRoZSBzaXplIG9mIHRoZSAib3V0c2lkZSIgcGFydHMgb2YgdGhlIHdpbmRvdyBiYXNlZCBvbiB0aGUKKyAqIHBhcmFtZXRlcnMgb2YgdGhlIGNsaWVudCBhcmVhLgogICoKLSAqICAgQ29tcHV0ZXMgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgY2xpZW50Ci0gKiAgIGFyZWEuCisgKyBQQVJBTVMKKyAqICAgICBMUFJFQ1QxNiAgcmVjdAorICogICAgIERXT1JEICBzdHlsZQorICogICAgIEJPT0wzMiAgbWVudQorICogICAgIERXT1JEICBleFN0eWxlCiAgKgotICogICBCdWdzCi0gKiAgICAgICAgTW9zdCBvZiB0aGlzIGNvZGUgaXMgY29waWVkIGZyb20gTkNfQWRqdXN0UmVjdC4gIEl0IHNob3VsZG4ndCBiZS4KLSAqICAgICAgICBUaGVyZSBhcmUgc29tZSB1bmlxdWUgdGhpbmdzIGFib3V0IFdpbiA5NSB0aGF0IGFyZSBiZWluZyBob3JyaWJseQotICogICAgICAgIG5lZ2xlY3RlZCBoZXJlLiAgSSBkb24ndCBrbm93IHdoYXQgdGhleSBhcmUsIGVpdGhlci4gIDotXAorICogTk9URVMKKyAqICAgICAiT3V0ZXIiIHBhcnRzIG9mIGEgd2luZG93IG1lYW5zIHRoZSB3aG9sZSB3aW5kb3cgZnJhbWUsIGNhcHRpb24gYW5kCisgKiAgICAgbWVudSBiYXIuIEl0IGRvZXMgbm90IGluY2x1ZGUgImlubmVyIiBwYXJ0cyBvZiB0aGUgZnJhbWUgbGlrZSBjbGllbnQKKyAqICAgICBlZGdlLCBzdGF0aWMgZWRnZSBvciBzY3JvbGwgYmFycy4KICAqCi0gKiAgIFJldmlzaW9uIGhpc3RvcnkKLSAqICAgICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKLSAqICAgICAgICAgICAgIE9yaWdpbmFsIGN1dCAmIHBhc3RlIGZyb20gTkNfQWRqdXN0UmVjdAorICogUmV2aXNpb24gaGlzdG9yeQorICogICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgIE9yaWdpbmFsIChOQ19BZGp1c3RSZWN0OTUpIGN1dCAmIHBhc3RlIGZyb20gTkNfQWRqdXN0UmVjdAorICoKKyAqICAgICAyMC1KdW4tMTk5OCBFcmljIEtvaGwgKGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlKQorICogICAgICAgIFNwbGl0IE5DX0FkanVzdFJlY3Q5NSBpbnRvIE5DX0FkanVzdFJlY3RPdXRlcjk1IGFuZAorICogICAgICAgIE5DX0FkanVzdFJlY3RJbm5lcjk1IGFuZCBhZGRlZCBoYW5kbGluZyBvZiBXaW45NSBzdHlsZXMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBOQ19BZGp1c3RSZWN0OTUoIExQUkVDVDE2IHJlY3QsIERXT1JEIHN0eWxlLCBCT09MMzIgbWVudSwKLQkJCSAgICAgRFdPUkQgZXhTdHlsZSApCitzdGF0aWMgdm9pZAorTkNfQWRqdXN0UmVjdE91dGVyOTUgKExQUkVDVDE2IHJlY3QsIERXT1JEIHN0eWxlLCBCT09MMzIgbWVudSwgRFdPUkQgZXhTdHlsZSkKIHsKICAgICBpZihzdHlsZSAmIFdTX0lDT05JQykgcmV0dXJuOwogCkBAIC0xNDQsMjEgKzE1OSw2NyBAQAogICAgICAgICAgICgoc3R5bGUgJiAoV1NfRExHRlJBTUUgfCBXU19USElDS0ZSQU1FKSkgfHwKICAgICAgICAgICAgKGV4U3R5bGUgJiBXU19FWF9ETEdNT0RBTEZSQU1FKSkpKQogICAgIHsKLSAgICAgICAgaWYgKEhBU19ETEdGUkFNRSggc3R5bGUsIGV4U3R5bGUgKSkKKyAgICAgICAgaWYgKEhBU19GSVhFREZSQU1FKCBzdHlsZSwgZXhTdHlsZSApKQogICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNihyZWN0LCBTWVNNRVRSSUNTX0NYRExHRlJBTUUsIFNZU01FVFJJQ1NfQ1lETEdGUkFNRSApOwogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChIQVNfVEhJQ0tGUkFNRShzdHlsZSkpCisgICAgICAgICAgICBpZiAoSEFTX1NJWkVGUkFNRShzdHlsZSkpCiAgICAgICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNiggcmVjdCwgU1lTTUVUUklDU19DWEZSQU1FLCBTWVNNRVRSSUNTX0NZRlJBTUUgKTsKKyNpZiAwCiAgICAgICAgICAgICBpZiAoc3R5bGUgJiBXU19CT1JERVIpCiAgICAgICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNiggcmVjdCwgU1lTTUVUUklDU19DWEJPUkRFUiwgU1lTTUVUUklDU19DWUJPUkRFUik7CisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIGlmICgoc3R5bGUgJiBXU19DQVBUSU9OKSA9PSBXU19DQVBUSU9OKQotICAgICAgICAgICAgcmVjdC0+dG9wIC09IFNZU01FVFJJQ1NfQ1lDQVBUSU9OIC0gU1lTTUVUUklDU19DWUJPUkRFUjsKKwkgICAgaWYgKGV4U3R5bGUgJiBXU19FWF9UT09MV0lORE9XKQorCQlyZWN0LT50b3AgLT0gU1lTTUVUUklDU19DWVNNQ0FQVElPTjsKKwkgICAgZWxzZQorCQlyZWN0LT50b3AgLT0gU1lTTUVUUklDU19DWUNBUFRJT047CisvLyAgICAgICAgICAgIHJlY3QtPnRvcCAtPSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl07CiAgICAgfQotICAgIGlmIChtZW51KSByZWN0LT50b3AgLT0gU1lTTUVUUklDU19DWU1FTlUgKyBTWVNNRVRSSUNTX0NZQk9SREVSICsgMjsKLSAgICBlbHNlIGlmICghKHN0eWxlICYgV1NfQ0hJTEQpKSByZWN0LT50b3AgKz0gU1lTTUVUUklDU19DWUJPUkRFUjsKKworICAgIGlmIChtZW51KQorCXJlY3QtPnRvcCAtPSBzeXNNZXRyaWNzW1NNX0NZTUVOVV07Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkNfQWRqdXN0UmVjdElubmVyOTUKKyAqCisgKiBDb21wdXRlcyB0aGUgc2l6ZSBvZiB0aGUgImluc2lkZSIgcGFydCBvZiB0aGUgd2luZG93IGJhc2VkIG9uIHRoZQorICogcGFyYW1ldGVycyBvZiB0aGUgY2xpZW50IGFyZWEuCisgKgorICsgUEFSQU1TCisgKiAgICAgTFBSRUNUMTYgcmVjdAorICogICAgIERXT1JEICAgIHN0eWxlCisgKiAgICAgRFdPUkQgICAgZXhTdHlsZQorICoKKyAqIE5PVEVTCisgKiAgICAgIklubmVyIiBwYXJ0IG9mIGEgd2luZG93IG1lYW5zIHRoZSB3aW5kb3cgZnJhbWUgaW5zaWRlIG9mIHRoZSBmbGF0CisgKiAgICAgd2luZG93IGZyYW1lLiBJdCBpbmNsdWRlcyB0aGUgY2xpZW50IGVkZ2UsIHRoZSBzdGF0aWMgZWRnZSBhbmQgdGhlCisgKiAgICAgc2Nyb2xsIGJhcnMuCisgKgorICogUmV2aXNpb24gaGlzdG9yeQorICogICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgIE9yaWdpbmFsIChOQ19BZGp1c3RSZWN0OTUpIGN1dCAmIHBhc3RlIGZyb20gTkNfQWRqdXN0UmVjdAorICoKKyAqICAgICAyMC1KdW4tMTk5OCBFcmljIEtvaGwgKGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlKQorICogICAgICAgIFNwbGl0IE5DX0FkanVzdFJlY3Q5NSBpbnRvIE5DX0FkanVzdFJlY3RPdXRlcjk1IGFuZAorICogICAgICAgIE5DX0FkanVzdFJlY3RJbm5lcjk1IGFuZCBhZGRlZCBoYW5kbGluZyBvZiBXaW45NSBzdHlsZXMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorTkNfQWRqdXN0UmVjdElubmVyOTUgKExQUkVDVDE2IHJlY3QsIERXT1JEIHN0eWxlLCBEV09SRCBleFN0eWxlKQoreworICAgIGlmKHN0eWxlICYgV1NfSUNPTklDKSByZXR1cm47CisKKyAgICBpZiAoZXhTdHlsZSAmIFdTX0VYX0NMSUVOVEVER0UpCisJSW5mbGF0ZVJlY3QxNiAocmVjdCwgc3lzTWV0cmljc1tTTV9DWEVER0VdLCBzeXNNZXRyaWNzW1NNX0NZRURHRV0pOworCisgICAgaWYgKGV4U3R5bGUgJiBXU19FWF9TVEFUSUNFREdFKQorCUluZmxhdGVSZWN0MTYgKHJlY3QsIHN5c01ldHJpY3NbU01fQ1hCT1JERVJdLCBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXSk7CiAKICAgICBpZiAoc3R5bGUgJiBXU19WU0NST0xMKSByZWN0LT5yaWdodCAgKz0gU1lTTUVUUklDU19DWFZTQ1JPTEw7CiAgICAgaWYgKHN0eWxlICYgV1NfSFNDUk9MTCkgcmVjdC0+Ym90dG9tICs9IFNZU01FVFJJQ1NfQ1lIU0NST0xMOwpAQCAtMjA2LDE1ICsyNjcsMTggQEAKICAgICBpZiAoIShzdHlsZSAmIChXU19QT1BVUCB8IFdTX0NISUxEKSkpICAvKiBPdmVybGFwcGVkIHdpbmRvdyAqLwogCXN0eWxlIHw9IFdTX0NBUFRJT047CiAgICAgc3R5bGUgJj0gKFdTX0RMR0ZSQU1FIHwgV1NfQk9SREVSIHwgV1NfVEhJQ0tGUkFNRSB8IFdTX0NISUxEKTsKLSAgICBleFN0eWxlICY9IChXU19FWF9ETEdNT0RBTEZSQU1FIHwgV1NfRVhfQ0xJRU5URURHRSk7CisgICAgZXhTdHlsZSAmPSAoV1NfRVhfRExHTU9EQUxGUkFNRSB8IFdTX0VYX0NMSUVOVEVER0UgfAorCQlXU19FWF9TVEFUSUNFREdFIHwgV1NfRVhfVE9PTFdJTkRPVyk7CiAgICAgaWYgKGV4U3R5bGUgJiBXU19FWF9ETEdNT0RBTEZSQU1FKSBzdHlsZSAmPSB+V1NfVEhJQ0tGUkFNRTsKIAogICAgIFRSQUNFKG5vbmNsaWVudCwgIiglZCwlZCktKCVkLCVkKSAlMDhseCAlZCAlMDhseFxuIiwKICAgICAgICAgICAgICAgICAgICAgICByZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0LCByZWN0LT5ib3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUsIG1lbnUsIGV4U3R5bGUgKTsKIAotICAgIGlmKFRXRUFLX1dpbjk1TG9vaykKLQlOQ19BZGp1c3RSZWN0OTUoIHJlY3QsIHN0eWxlLCBtZW51LCBleFN0eWxlICk7CisgICAgaWYoVFdFQUtfV2luOTVMb29rKSB7CisJTkNfQWRqdXN0UmVjdE91dGVyOTUoIHJlY3QsIHN0eWxlLCBtZW51LCBleFN0eWxlICk7CisJTkNfQWRqdXN0UmVjdElubmVyOTUoIHJlY3QsIHN0eWxlLCBleFN0eWxlICk7CisgICAgfQogICAgIGVsc2UKIAlOQ19BZGp1c3RSZWN0KCByZWN0LCBzdHlsZSwgbWVudSwgZXhTdHlsZSApOwogCkBAIC0yNTMsNyArMzE3LDcgQEAKIAogICAgIGlmKCAhKCBwV25kLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUgKSApIHsKIAlpZihUV0VBS19XaW45NUxvb2spCi0JICAgIE5DX0FkanVzdFJlY3Q5NSggJnRtcFJlY3QsIHBXbmQtPmR3U3R5bGUsIEZBTFNFLCBwV25kLT5kd0V4U3R5bGUgKTsKKwkgICAgTkNfQWRqdXN0UmVjdE91dGVyOTUoICZ0bXBSZWN0LCBwV25kLT5kd1N0eWxlLCBGQUxTRSwgcFduZC0+ZHdFeFN0eWxlICk7CiAJZWxzZQogCSAgICBOQ19BZGp1c3RSZWN0KCAmdG1wUmVjdCwgcFduZC0+ZHdTdHlsZSwgRkFMU0UsIHBXbmQtPmR3RXhTdHlsZSApOwogCkBAIC0yNzQsNiArMzM4LDE1IEBACiAJCQkJICAgICAgIHdpblJlY3QtPnJpZ2h0IC0gd2luUmVjdC0+bGVmdCwKIAkJCQkgICAgICAgLXRtcFJlY3QubGVmdCwgLXRtcFJlY3QudG9wICkgKyAxOwogCX0KKworCWlmIChUV0VBS19XaW45NUxvb2spIHsKKwkgICAgU2V0UmVjdDE2ICgmdG1wUmVjdCwgMCwgMCwgMCwgMCk7CisJICAgIE5DX0FkanVzdFJlY3RJbm5lcjk1ICgmdG1wUmVjdCwgcFduZC0+ZHdTdHlsZSwgcFduZC0+ZHdFeFN0eWxlKTsKKwkgICAgd2luUmVjdC0+bGVmdCAgIC09IHRtcFJlY3QubGVmdDsKKwkgICAgd2luUmVjdC0+dG9wICAgIC09IHRtcFJlY3QudG9wOworCSAgICB3aW5SZWN0LT5yaWdodCAgLT0gdG1wUmVjdC5yaWdodDsKKwkgICAgd2luUmVjdC0+Ym90dG9tIC09IHRtcFJlY3QuYm90dG9tOworCX0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMzNSwxNiArNDA4LDI0IEBACiAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19JQ09OSUMpIHx8ICh3bmRQdHItPmZsYWdzICYgV0lOX01BTkFHRUQpKSByZXR1cm47CiAKICAgICAgIC8qIFJlbW92ZSBmcmFtZSBmcm9tIHJlY3RhbmdsZSAqLwotICAgIGlmIChIQVNfRExHRlJBTUUgKHduZFB0ci0+ZHdTdHlsZSwgd25kUHRyLT5kd0V4U3R5bGUgKSkKKyAgICBpZiAoSEFTX0ZJWEVERlJBTUUgKHduZFB0ci0+ZHdTdHlsZSwgd25kUHRyLT5kd0V4U3R5bGUgKSkKICAgICB7CiAJSW5mbGF0ZVJlY3QzMiggcmVjdCwgLVNZU01FVFJJQ1NfQ1hGSVhFREZSQU1FLCAtU1lTTUVUUklDU19DWUZJWEVERlJBTUUpOwogICAgIH0KLSAgICBlbHNlIGlmIChIQVNfVEhJQ0tGUkFNRSAod25kUHRyLT5kd1N0eWxlKSkKKyAgICBlbHNlIGlmIChIQVNfU0laRUZSQU1FICh3bmRQdHItPmR3U3R5bGUpKQogICAgIHsKIAlJbmZsYXRlUmVjdDMyKCByZWN0LCAtU1lTTUVUUklDU19DWFNJWkVGUkFNRSwgLVNZU01FVFJJQ1NfQ1lTSVpFRlJBTUUgKTsKIAotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19CT1JERVIpCi0JICAgIEluZmxhdGVSZWN0MzIoIHJlY3QsIC1TWVNNRVRSSUNTX0NYQk9SREVSLCAtU1lTTUVUUklDU19DWUJPUkRFUiApOworLyoJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0JPUkRFUikKKyAgICAgICAgICBJbmZsYXRlUmVjdDMyKCByZWN0LCAtU1lTTUVUUklDU19DWEJPUkRFUiwgLVNZU01FVFJJQ1NfQ1lCT1JERVIgKTsqLworICAgIH0KKworICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19DSElMRCkgeworCWlmICh3bmRQdHItPmR3RXhTdHlsZSAmIFdTX0VYX0NMSUVOVEVER0UpCisJICAgIEluZmxhdGVSZWN0MzIgKHJlY3QsIC1TWVNNRVRSSUNTX0NYRURHRSwgLVNZU01FVFJJQ1NfQ1lFREdFKTsKKworCWlmICh3bmRQdHItPmR3RXhTdHlsZSAmIFdTX0VYX1NUQVRJQ0VER0UpCisJICAgIEluZmxhdGVSZWN0MzIgKHJlY3QsIC1TWVNNRVRSSUNTX0NYQk9SREVSLCAtU1lTTUVUUklDU19DWUJPUkRFUik7CiAgICAgfQogCiAgICAgcmV0dXJuOwpAQCAtMzUyLDIyICs0MzMsMTkgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBOQ19IYW5kbGVOQ0hpdFRlc3QKKyAqIE5DX0RvTkNIaXRUZXN0CiAgKgotICogSGFuZGxlIGEgV01fTkNISVRURVNUIG1lc3NhZ2UuIENhbGxlZCBmcm9tIERlZldpbmRvd1Byb2MoKS4KLSAqCi0gKiBGSVhNRTogIEEgV2luOTUgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIG5lZWRlZC4KKyAqIEhhbmRsZSBhIFdNX05DSElUVEVTVCBtZXNzYWdlLiBDYWxsZWQgZnJvbSBOQ19IYW5kbGVOY0hpdFRlc3QoKS4KICAqLwotTE9ORyBOQ19IYW5kbGVOQ0hpdFRlc3QoIEhXTkQzMiBod25kLCBQT0lOVDE2IHB0ICkKKworTE9ORyBOQ19Eb05DSGl0VGVzdCAoV05EICp3bmRQdHIsIFBPSU5UMTYgcHQgKQogewogICAgIFJFQ1QxNiByZWN0OwotICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKLSAgICBpZiAoIXduZFB0cikgcmV0dXJuIEhURVJST1I7CiAKICAgICBUUkFDRShub25jbGllbnQsICJod25kPSUwNHggcHQ9JWQsJWRcbiIsCi0JCSAgICAgIGh3bmQsIHB0LngsIHB0LnkgKTsKKwkJICAgICAgd25kUHRyLT5od25kU2VsZiwgcHQueCwgcHQueSApOwogCi0gICAgR2V0V2luZG93UmVjdDE2KCBod25kLCAmcmVjdCApOworICAgIEdldFdpbmRvd1JlY3QxNiAod25kUHRyLT5od25kU2VsZiwgJnJlY3QgKTsKICAgICBpZiAoIVB0SW5SZWN0MTYoICZyZWN0LCBwdCApKSByZXR1cm4gSFROT1dIRVJFOwogCiAgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKSByZXR1cm4gSFRDQVBUSU9OOwpAQCAtNDI1LDcgKzUwMyw3IEBACiAKICAgICAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19DQVBUSU9OKSA9PSBXU19DQVBUSU9OKQogICAgICAgICB7Ci0gICAgICAgICAgICByZWN0LnRvcCArPSBTWVNNRVRSSUNTX0NZQ0FQVElPTiAtIDE7CisgICAgICAgICAgICByZWN0LnRvcCArPSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAxOwogICAgICAgICAgICAgaWYgKCFQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvKiBDaGVjayBzeXN0ZW0gbWVudSAqLwpAQCAtNDQ3LDggKzUyNSw4IEBACiAKICAgICAgIC8qIENoZWNrIGNsaWVudCBhcmVhICovCiAKLSAgICBTY3JlZW5Ub0NsaWVudDE2KCBod25kLCAmcHQgKTsKLSAgICBHZXRDbGllbnRSZWN0MTYoIGh3bmQsICZyZWN0ICk7CisgICAgU2NyZWVuVG9DbGllbnQxNiggd25kUHRyLT5od25kU2VsZiwgJnB0ICk7CisgICAgR2V0Q2xpZW50UmVjdDE2KCB3bmRQdHItPmh3bmRTZWxmLCAmcmVjdCApOwogICAgIGlmIChQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkgcmV0dXJuIEhUQ0xJRU5UOwogCiAgICAgICAvKiBDaGVjayB2ZXJ0aWNhbCBzY3JvbGwgYmFyICovCkBAIC00ODgsNiArNTY2LDE3MyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkNfRG9OQ0hpdFRlc3Q5NQorICoKKyAqIEhhbmRsZSBhIFdNX05DSElUVEVTVCBtZXNzYWdlLiBDYWxsZWQgZnJvbSBOQ19IYW5kbGVOQ0hpdFRlc3QoKS4KKyAqCisgKiBGSVhNRTogIEp1c3QgYSBjb3B5IG9mIHRoZSBXaW4gMy4xIHZlcnNpb24uCisgKi8KKworTE9ORworTkNfRG9OQ0hpdFRlc3Q5NSAoV05EICp3bmRQdHIsIFBPSU5UMTYgcHQgKQoreworICAgIFJFQ1QxNiByZWN0OworCisgICAgVFJBQ0Uobm9uY2xpZW50LCAiaHduZD0lMDR4IHB0PSVkLCVkXG4iLAorCQkgICAgICB3bmRQdHItPmh3bmRTZWxmLCBwdC54LCBwdC55ICk7CisKKyAgICBHZXRXaW5kb3dSZWN0MTYgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0ICk7CisgICAgaWYgKCFQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkgcmV0dXJuIEhUTk9XSEVSRTsKKworICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRSkgcmV0dXJuIEhUQ0FQVElPTjsKKworICAgIGlmICghKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkpCisgICAgeworICAgICAgICAvKiBDaGVjayBib3JkZXJzICovCisgICAgICAgIGlmIChIQVNfU0laRUZSQU1FKCB3bmRQdHItPmR3U3R5bGUgKSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNiggJnJlY3QsIC1TWVNNRVRSSUNTX0NYRlJBTUUsIC1TWVNNRVRSSUNTX0NZRlJBTUUgKTsKKy8vICAgICAgICAgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0JPUkRFUikKKy8vICAgICAgICAgICAgICAgIEluZmxhdGVSZWN0MTYoJnJlY3QsLVNZU01FVFJJQ1NfQ1hCT1JERVIsLVNZU01FVFJJQ1NfQ1lCT1JERVIpOworICAgICAgICAgICAgaWYgKCFQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDaGVjayB0b3Agc2l6aW5nIGJvcmRlciAqLworICAgICAgICAgICAgICAgIGlmIChwdC55IDwgcmVjdC50b3ApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocHQueCA8IHJlY3QubGVmdCtTWVNNRVRSSUNTX0NYU0laRSkgcmV0dXJuIEhUVE9QTEVGVDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0LnggPj0gcmVjdC5yaWdodC1TWVNNRVRSSUNTX0NYU0laRSkgcmV0dXJuIEhUVE9QUklHSFQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBIVFRPUDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgYm90dG9tIHNpemluZyBib3JkZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAocHQueSA+PSByZWN0LmJvdHRvbSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdC54IDwgcmVjdC5sZWZ0K1NZU01FVFJJQ1NfQ1hTSVpFKSByZXR1cm4gSFRCT1RUT01MRUZUOworICAgICAgICAgICAgICAgICAgICBpZiAocHQueCA+PSByZWN0LnJpZ2h0LVNZU01FVFJJQ1NfQ1hTSVpFKSByZXR1cm4gSFRCT1RUT01SSUdIVDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhUQk9UVE9NOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDaGVjayBsZWZ0IHNpemluZyBib3JkZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAocHQueCA8IHJlY3QubGVmdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdC55IDwgcmVjdC50b3ArU1lTTUVUUklDU19DWVNJWkUpIHJldHVybiBIVFRPUExFRlQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdC55ID49IHJlY3QuYm90dG9tLVNZU01FVFJJQ1NfQ1lTSVpFKSByZXR1cm4gSFRCT1RUT01MRUZUOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSFRMRUZUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDaGVjayByaWdodCBzaXppbmcgYm9yZGVyICovCisgICAgICAgICAgICAgICAgaWYgKHB0LnggPj0gcmVjdC5yaWdodCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdC55IDwgcmVjdC50b3ArU1lTTUVUUklDU19DWVNJWkUpIHJldHVybiBIVFRPUFJJR0hUOworICAgICAgICAgICAgICAgICAgICBpZiAocHQueSA+PSByZWN0LmJvdHRvbS1TWVNNRVRSSUNTX0NZU0laRSkgcmV0dXJuIEhUQk9UVE9NUklHSFQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBIVFJJR0hUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlICAvKiBObyB0aGljayBmcmFtZSAqLworICAgICAgICB7CisgICAgICAgICAgICBpZiAoSEFTX0ZJWEVERlJBTUUoIHduZFB0ci0+ZHdTdHlsZSwgd25kUHRyLT5kd0V4U3R5bGUgKSkKKyAgICAgICAgICAgICAgICBJbmZsYXRlUmVjdDE2KCZyZWN0LCAtU1lTTUVUUklDU19DWERMR0ZSQU1FLCAtU1lTTUVUUklDU19DWURMR0ZSQU1FKTsKKy8vICAgICAgICAgICAgZWxzZSBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQk9SREVSKQorLy8gICAgICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNigmcmVjdCwgLVNZU01FVFJJQ1NfQ1hCT1JERVIsIC1TWVNNRVRSSUNTX0NZQk9SREVSKTsKKyAgICAgICAgICAgIGlmICghUHRJblJlY3QxNiggJnJlY3QsIHB0ICkpIHJldHVybiBIVEJPUkRFUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGNhcHRpb24gKi8KKworICAgICAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NBUFRJT04pID09IFdTX0NBUFRJT04pCisgICAgICAgIHsKKwkgICAgaWYgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfVE9PTFdJTkRPVykKKwkgICAgICAgIHJlY3QudG9wICs9IHN5c01ldHJpY3NbU01fQ1lTTUNBUFRJT05dIC0gMTsKKwkgICAgZWxzZQorCSAgICAgICAgcmVjdC50b3AgKz0gc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMTsKKyAgICAgICAgICAgIGlmICghUHRJblJlY3QxNiggJnJlY3QsIHB0ICkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgc3lzdGVtIG1lbnUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1NZU01FTlUpICYmCisJCSAgICAoKHduZFB0ci0+Y2xhc3MtPmhJY29uU20pIHx8ICh3bmRQdHItPmNsYXNzLT5oSWNvbikpKQorICAgICAgICAgICAgICAgICAgICByZWN0LmxlZnQgKz0gc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMTsKKyAgICAgICAgICAgICAgICBpZiAocHQueCA8IHJlY3QubGVmdCkgcmV0dXJuIEhUU1lTTUVOVTsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGNsb3NlIGJ1dHRvbiAqLworICAgICAgICAgICAgICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19TWVNNRU5VKQorICAgICAgICAgICAgICAgICAgICByZWN0LnJpZ2h0IC09IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDE7CisgICAgICAgICAgICAgICAgaWYgKHB0LnggPiByZWN0LnJpZ2h0KSByZXR1cm4gSFRDTE9TRTsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIG1heGltaXplIGJveCAqLworICAgICAgICAgICAgICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NQVhJTUlaRUJPWCkKKyAgICAgICAgICAgICAgICAgICAgcmVjdC5yaWdodCAtPSBTWVNNRVRSSUNTX0NYU0laRSArIDE7CisgICAgICAgICAgICAgICAgaWYgKHB0LnggPiByZWN0LnJpZ2h0KSByZXR1cm4gSFRNQVhCVVRUT047CisKKyAgICAgICAgICAgICAgICAvKiBDaGVjayBtaW5pbWl6ZSBib3ggKi8KKyAgICAgICAgICAgICAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkVCT1gpCisgICAgICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgLT0gU1lTTUVUUklDU19DWFNJWkUgKyAxOworICAgICAgICAgICAgICAgIGlmIChwdC54ID4gcmVjdC5yaWdodCkgcmV0dXJuIEhUTUlOQlVUVE9OOworICAgICAgICAgICAgICAgIHJldHVybiBIVENBUFRJT047CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgIC8qIENoZWNrIGNsaWVudCBhcmVhICovCisKKyAgICBTY3JlZW5Ub0NsaWVudDE2KCB3bmRQdHItPmh3bmRTZWxmLCAmcHQgKTsKKyAgICBHZXRDbGllbnRSZWN0MTYoIHduZFB0ci0+aHduZFNlbGYsICZyZWN0ICk7CisgICAgaWYgKFB0SW5SZWN0MTYoICZyZWN0LCBwdCApKSByZXR1cm4gSFRDTElFTlQ7CisKKyAgICAgIC8qIENoZWNrIHZlcnRpY2FsIHNjcm9sbCBiYXIgKi8KKworICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKQorICAgIHsKKwlyZWN0LnJpZ2h0ICs9IFNZU01FVFJJQ1NfQ1hWU0NST0xMOworCWlmIChQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkgcmV0dXJuIEhUVlNDUk9MTDsKKyAgICB9CisKKyAgICAgIC8qIENoZWNrIGhvcml6b250YWwgc2Nyb2xsIGJhciAqLworCisgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0hTQ1JPTEwpCisgICAgeworCXJlY3QuYm90dG9tICs9IFNZU01FVFJJQ1NfQ1lIU0NST0xMOworCWlmIChQdEluUmVjdDE2KCAmcmVjdCwgcHQgKSkKKwl7CisJICAgICAgLyogQ2hlY2sgc2l6ZSBib3ggKi8KKwkgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKSAmJgorCQkocHQueCA+PSByZWN0LnJpZ2h0IC0gU1lTTUVUUklDU19DWFZTQ1JPTEwpKQorCQlyZXR1cm4gSFRTSVpFOworCSAgICByZXR1cm4gSFRIU0NST0xMOworCX0KKyAgICB9CisKKyAgICAgIC8qIENoZWNrIG1lbnUgYmFyICovCisKKyAgICBpZiAoSEFTX01FTlUod25kUHRyKSkKKyAgICB7CisJaWYgKChwdC55IDwgMCkgJiYgKHB0LnggPj0gMCkgJiYgKHB0LnggPCByZWN0LnJpZ2h0KSkKKwkgICAgcmV0dXJuIEhUTUVOVTsKKyAgICB9CisKKyAgICAgIC8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworICAgIHJldHVybiBIVEVSUk9SOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkNfSGFuZGxlTkNIaXRUZXN0CisgKgorICogSGFuZGxlIGEgV01fTkNISVRURVNUIG1lc3NhZ2UuIENhbGxlZCBmcm9tIERlZldpbmRvd1Byb2MoKS4KKyAqLworTE9ORworTkNfSGFuZGxlTkNIaXRUZXN0KCBIV05EMzIgaHduZCAsIFBPSU5UMTYgcHQpCit7CisgICAgV05EKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworCisgICAgaWYgKCF3bmRQdHIpCisJcmV0dXJuIEhURVJST1I7CisKKyAgICBpZihUV0VBS19XaW45NUxvb2spCisJcmV0dXJuIE5DX0RvTkNIaXRUZXN0OTUgKHduZFB0ciwgcHQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5DX0RvTkNIaXRUZXN0ICh3bmRQdHIsIHB0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBOQ19EcmF3U3lzQnV0dG9uCiAgKi8KIHZvaWQgTkNfRHJhd1N5c0J1dHRvbiggSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24gKQpAQCAtNTU3LDQ1ICs4MDIsODMgQEAKICAqICAgICAgSERDMzIgIGhkYywKICAqICAgICAgQk9PTDMyICBkb3duICkKICAqCi0gKiAgIERyYXdzIGEgZmFrZSBXaW45NSBzeXN0ZW0gYnV0dG9uLiAgSG9ycmlibHkgYnJva2VuLiAgV2Ugc2hvdWxkIGJlIGRyYXdpbmcKLSAqICAgYW4gaWNvbiwgbm90IHRoZSBYLiAgKFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgdGhvdWdodCkKLSAqCi0gKiAgIEJ1Z3MKLSAqICAgICAgICBQbGFpbiBhbmQgc2ltcGx5IGRvZXNuJ3Qgd29yay4gIEZhaWxzIG1pc2VyYWJseSBmb3IgY2hpbGQgd2luZG93cy4KKyAqICAgRHJhd3MgdGhlIFdpbjk1IHN5c3RlbSBpY29uLgogICoKICAqICAgUmV2aXNpb24gaGlzdG9yeQogICogICAgICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQogICogICAgICAgICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24gZnJvbSBOQ19EcmF3U3lzQnV0dG9uIHNvdXJjZS4KKyAqICAgICAgICAxMS1KdW4tMTk5OCBFcmljIEtvaGwgKGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlKQorICogICAgICAgICAgICAgRml4ZWQgbW9zdCBidWdzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQk9PTDMyCitOQ19EcmF3U3lzQnV0dG9uOTUgKEhXTkQzMiBod25kLCBIREMzMiBoZGMsIEJPT0wzMiBkb3duKQoreworICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKKworICAgIGlmKCAhKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkgKQorICAgIHsKKwlISUNPTjMyICBoSWNvbiA9IDA7CisJUkVDVDMyIHJlY3Q7CisKKwlOQ19HZXRJbnNpZGVSZWN0OTUoIGh3bmQsICZyZWN0ICk7CisKKwlpZiAod25kUHRyLT5jbGFzcy0+aEljb25TbSkKKwkgICAgaEljb24gPSB3bmRQdHItPmNsYXNzLT5oSWNvblNtOworCWVsc2UgaWYgKHduZFB0ci0+Y2xhc3MtPmhJY29uKQorCSAgICBoSWNvbiA9IHduZFB0ci0+Y2xhc3MtPmhJY29uOworCisJaWYgKGhJY29uKQorCSAgICBEcmF3SWNvbkV4MzIgKGhkYywgcmVjdC5sZWZ0ICsgMiwgcmVjdC50b3AgKyAxLCBoSWNvbiwKKwkJCSAgc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMywKKwkJCSAgc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMywgMCwgMCwgRElfTk9STUFMKTsKKwlyZXR1cm4gKGhJY29uICE9IDApOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgdm9pZCAgTkNfRHJhd0Nsb3NlQnV0dG9uOTUoCisgKiAgICAgIEhXTkQzMiAgaHduZCwKKyAqICAgICAgSERDMzIgIGhkYywKKyAqICAgICAgQk9PTDMyICBkb3duICkKKyAqCisgKiAgIERyYXdzIHRoZSBXaW45NSBjbG9zZSBidXR0b24uCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMTEtSnVuLTE5OTggRXJpYyBLb2hsIChla29obEBhYm8ucmhlaW4temVpdHVuZy5kZSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGZyb20gTkNfRHJhd1N5c0J1dHRvbjk1IHNvdXJjZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQKLU5DX0RyYXdTeXNCdXR0b245NSAoSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24pCitOQ19EcmF3Q2xvc2VCdXR0b245NSAoSFdORDMyIGh3bmQsIEhEQzMyIGhkYywgQk9PTDMyIGRvd24pCiB7CiAgICAgUkVDVDMyIHJlY3Q7CiAgICAgSERDMzIgaGRjTWVtOwotICAgIEhCSVRNQVAzMiBoYml0bWFwOwogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKIAogICAgIGlmKCAhKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkgKQogICAgIHsKIAlCSVRNQVAzMiBibXA7CisJSEJJVE1BUDMyIGhCbXAsIGhPbGRCbXA7CiAKIAlOQ19HZXRJbnNpZGVSZWN0OTUoIGh3bmQsICZyZWN0ICk7Ci0JaGRjTWVtID0gQ3JlYXRlQ29tcGF0aWJsZURDMzIoIGhkYyApOwotCWhiaXRtYXAgPSBTZWxlY3RPYmplY3QzMiggaGRjTWVtLCBoYml0bWFwQ2xvc2UgKTsKLQlHZXRPYmplY3QzMkEgKGhiaXRtYXBDbG9zZSwgc2l6ZW9mKEJJVE1BUDMyKSwgJmJtcCk7Ci0JQml0Qmx0MzIgKGhkYywgcmVjdC5sZWZ0ICsgKHN5c01ldHJpY3NbU01fQ1hTSVpFXSAtIGJtcC5ibVdpZHRoKSAvIDIgKwotCQkgICAgIE5DX1N5c0NvbnRyb2xOdWRnZSwKLQkJICAgICByZWN0LnRvcCArIChzeXNNZXRyaWNzW1NNX0NZU0laRV0gLSBibXAuYm1IZWlnaHQgLSAxKSAvIDIsCi0JCSAgICAgYm1wLmJtV2lkdGgsIGJtcC5ibUhlaWdodCwKLQkJICAgICBoZGNNZW0sIDAsIDAsIGRvd24gPyBOT1RTUkNDT1BZIDogU1JDQ09QWSApOwogCi0JU2VsZWN0T2JqZWN0MzIoIGhkY01lbSwgaGJpdG1hcCApOwotCURlbGV0ZURDMzIoIGhkY01lbSApOwotCQorCWhkY01lbSA9IENyZWF0ZUNvbXBhdGlibGVEQzMyKCBoZGMgKTsKKwloQm1wID0gLypkb3duID8gaGJpdG1hcENsb3NlRCA6Ki8gaGJpdG1hcENsb3NlOworCWhPbGRCbXAgPSBTZWxlY3RPYmplY3QzMiAoaGRjTWVtLCBoQm1wKTsKKwlHZXRPYmplY3QzMkEgKGhCbXAsIHNpemVvZihCSVRNQVAzMiksICZibXApOworCUJpdEJsdDMyIChoZGMsIHJlY3QucmlnaHQgLSAoc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dICsgMSArIGJtcC5ibVdpZHRoKSAvIDIsCisJCSAgcmVjdC50b3AgKyAoc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMSAtIGJtcC5ibUhlaWdodCkgLyAyLAorCQkgIGJtcC5ibVdpZHRoLCBibXAuYm1IZWlnaHQsIGhkY01lbSwgMCwgMCwgZG93biA/IE5PVFNSQ0NPUFkgOiBTUkNDT1BZKTsKKworCVNlbGVjdE9iamVjdDMyIChoZGNNZW0sIGhPbGRCbXApOworCURlbGV0ZURDMzIgKGhkY01lbSk7CiAgICAgfQotICAgIHJldHVybjsKIH0KIAogCkBAIC02MTAsOSArODkzLDggQEAKICAqCiAgKiAgIEJ1Z3MKICAqICAgICAgICBNYW55LiAgU3BhY2luZyBtaWdodCBzdGlsbCBiZSBpbmNvcnJlY3QuICBOZWVkIHRvIGZpdCBhIGNsb3NlCi0gKiAgICAgICAgYnV0dG9uIGJldHdlZW4gdGhlIG1heCBidXR0b24gYW5kIHRoZSBlZGdlLiAgRHJhd3MgdGhlIHdyb25nIHRoaW5nCi0gKiAgICAgICAgKGEgV2luMzEgdXAtZG93bikgd2hlbiBtYXhpbWl6ZWQuICBTaG91bGQgc2NhbGUgdGhlIGltYWdlIHdpdGggdGhlCi0gKiAgICAgICAgdGl0bGUgYmFyLiAgQW5kIG1vcmUuLi4KKyAqICAgICAgICBidXR0b24gYmV0d2VlbiB0aGUgbWF4IGJ1dHRvbiBhbmQgdGhlIGVkZ2UuCisgKiAgICAgICAgU2hvdWxkIHNjYWxlIHRoZSBpbWFnZSB3aXRoIHRoZSB0aXRsZSBiYXIuICBBbmQgbW9yZS4uLgogICoKICAqICAgUmV2aXNpb24gaGlzdG9yeQogICogICAgICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQpAQCAtNjM3LDExICs5MTksMTMgQEAKIAkJCSAgICAgICAmYm1zeikpIHsKIAogCU5DX0dldEluc2lkZVJlY3Q5NSggaHduZCwgJnJlY3QgKTsKKworCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19TWVNNRU5VKQorCSAgICByZWN0LnJpZ2h0IC09IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSArIDE7CiAJCi0JR1JBUEhfRHJhd0JpdG1hcCggaGRjLCBibSwKLQkJCSAgcmVjdC5yaWdodCArIE5DX01heENvbnRyb2xOdWRnZSAtCisJR1JBUEhfRHJhd0JpdG1hcCggaGRjLCBibSwgcmVjdC5yaWdodCArIE5DX01pbkNvbnRyb2xOdWRnZSAtCiAJCQkgIChzeXNNZXRyaWNzW1NNX0NYU0laRV0gKyBibXN6LmN4KSAvIDIsCi0JCQkgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lTSVpFXSAtIGJtc3ouY3kgLSAxKSAvIDIsCisJCQkgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDEgLSBibXN6LmN5KSAvIDIsCiAJCQkgIDAsIDAsIGJtc3ouY3gsIGJtc3ouY3ksIEZBTFNFICk7CiAgICAgfQogCkBAIC02ODQsMTMgKzk2OCwxNiBAQAogCQogCU5DX0dldEluc2lkZVJlY3Q5NSggaHduZCwgJnJlY3QgKTsKIAorCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19TWVNNRU5VKQorCSAgICByZWN0LnJpZ2h0IC09IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSArIDE7CisKIAlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfTUFYSU1JWkVCT1gpCiAJICAgIHJlY3QucmlnaHQgKz0gLTEgKyBOQ19NYXhDb250cm9sTnVkZ2UgLQogCQkoc3lzTWV0cmljc1tTTV9DWFNJWkVdICsgYm1zei5jeCkgLyAyOwogCiAJR1JBUEhfRHJhd0JpdG1hcCggaGRjLCBibSwgcmVjdC5yaWdodCArIE5DX01pbkNvbnRyb2xOdWRnZSAtCiAJCQkgIChzeXNNZXRyaWNzW1NNX0NYU0laRV0gKyBibXN6LmN4KSAvIDIsCi0JCQkgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lTSVpFXSAtIGJtc3ouY3kgLSAxKSAvIDIsCisJCQkgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDEgLSBibXN6LmN5KSAvIDIsCiAJCQkgIDAsIDAsIGJtc3ouY3gsIGJtc3ouY3ksIEZBTFNFICk7CiAgICAgfQogCkBAIC04MjYsOCArMTExMyw4IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0Jd2lkdGggPSBzeXNNZXRyaWNzW1NNX0NYRlJBTUVdIC0gc3lzTWV0cmljc1tTTV9DWEVER0VdIC0gMTsKLQloZWlnaHQgPSBzeXNNZXRyaWNzW1NNX0NZRlJBTUVdIC0gc3lzTWV0cmljc1tTTV9DWUVER0VdIC0gMTsKKwl3aWR0aCA9IHN5c01ldHJpY3NbU01fQ1hGUkFNRV0gLSBzeXNNZXRyaWNzW1NNX0NYRURHRV07CisJaGVpZ2h0ID0gc3lzTWV0cmljc1tTTV9DWUZSQU1FXSAtIHN5c01ldHJpY3NbU01fQ1lFREdFXTsKICAgICB9CiAKICAgICBTZWxlY3RPYmplY3QzMiggaGRjLCBHZXRTeXNDb2xvckJydXNoMzIoYWN0aXZlID8gQ09MT1JfQUNUSVZFQk9SREVSIDoKQEAgLTg0NCwxNiArMTEzMSw2IEBACiAgICAgICAgICAgICAgIC13aWR0aCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wLCBQQVRDT1BZICk7CiAKICAgICBJbmZsYXRlUmVjdDMyKCByZWN0LCAtd2lkdGgsIC1oZWlnaHQgKTsKLQotICAgIGlmKCFkbGdGcmFtZSkgewotCS8qIERyYXcgaW5uZXIgcmVjdGFuZ2xlICovCi0JR1JBUEhfRHJhd1JlY3RhbmdsZSggaGRjLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsCi0JCQkgICAgIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwKLQkJCSAgICAgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wLAotCQkJICAgICBUV0VBS19QZW5DMDk1ICk7Ci0KLQlJbmZsYXRlUmVjdDMyKCByZWN0LCAtMSwgLTEgKTsKLSAgICB9CiB9CiAKIApAQCAtODk3LDYgKzExNzQsNyBAQAogICAgIHsKIAlpZiAoIShoYml0bWFwQ2xvc2UgPSBMb2FkQml0bWFwMTYoIDAsIE1BS0VJTlRSRVNPVVJDRTE2KE9CTV9DTE9TRSkgKSkpCiAJICAgIHJldHVybjsKKwloYml0bWFwQ2xvc2VEICAgID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UxNihPQk1fQ0xPU0UpICk7CiAJaGJpdG1hcE1pbmltaXplICA9IExvYWRCaXRtYXAxNiggMCwgTUFLRUlOVFJFU09VUkNFMTYoT0JNX1JFRFVDRSkgKTsKIAloYml0bWFwTWluaW1pemVEID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UxNihPQk1fUkVEVUNFRCkgKTsKIAloYml0bWFwTWF4aW1pemUgID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UxNihPQk1fWk9PTSkgKTsKQEAgLTk4MywxMSArMTI2MSwxNiBAQAogICAgIEJPT0wzMiAgYWN0aXZlICkKIHsKICAgICBSRUNUMzIgIHIgPSAqcmVjdDsKLSAgICBXTkQgICAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKLSAgICBjaGFyICBidWZmZXJbMjU2XTsKKyAgICBXTkQgICAgICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworICAgIGNoYXIgICAgYnVmZmVyWzI1Nl07CisgICAgUE9JTlQzMiBzZXBbMl0gPSB7IHsgci5sZWZ0LCAgci5ib3R0b20gLSAxIH0sCisJCSAgICAgICB7IHIucmlnaHQsIHIuYm90dG9tIC0gMSB9IH07CiAKICAgICBpZiAod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSByZXR1cm47CiAKKyAgICBHUkFQSF9EcmF3TGluZXMoIGhkYywgc2VwLCAxLCBUV0VBS19QZW5DMDk1ICk7CisgICAgci5ib3R0b20tLTsKKwogICAgIEZpbGxSZWN0MzIoIGhkYywgJnIsIEdldFN5c0NvbG9yQnJ1c2gzMihhY3RpdmUgPyBDT0xPUl9BQ1RJVkVDQVBUSU9OIDoKIAkJCQkJICAgIENPTE9SX0lOQUNUSVZFQ0FQVElPTikgKTsKIApAQCAtMTAwMyw4ICsxMjg2LDEwIEBACiAgICAgfQogCiAgICAgaWYgKHN0eWxlICYgV1NfU1lTTUVOVSkgewotCU5DX0RyYXdTeXNCdXR0b245NSggaHduZCwgaGRjLCBGQUxTRSApOwotCXIubGVmdCArPSBTWVNNRVRSSUNTX0NYU0laRSArIDE7CisJaWYgKE5DX0RyYXdTeXNCdXR0b245NSAoaHduZCwgaGRjLCBGQUxTRSkpCisJICAgIHIubGVmdCArPSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAxOworCU5DX0RyYXdDbG9zZUJ1dHRvbjk1IChod25kLCBoZGMsIEZBTFNFKTsKKwlyLnJpZ2h0IC09IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDE7CiAgICAgfQogICAgIGlmIChzdHlsZSAmIFdTX01BWElNSVpFQk9YKSB7CiAJTkNfRHJhd01heEJ1dHRvbjk1KCBod25kLCBoZGMsIEZBTFNFICk7CkBAIC0xMTg0LDEyICsxNDY5LDEyIEBACiAgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgR2V0U3lzQ29sb3JQZW4zMihDT0xPUl9XSU5ET1dGUkFNRSkgKTsKIAogICAgIGlmKCEod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSkgewotICAgICAgICBpZigod25kUHRyLT5kd1N0eWxlICYgV1NfQk9SREVSKSB8fCAod25kUHRyLT5kd1N0eWxlICYgV1NfRExHRlJBTUUpIHx8Ci0JICAgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfRExHTU9EQUxGUkFNRSkpIHsKKyAgICAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19CT1JERVIpICYmICgod25kUHRyLT5kd1N0eWxlICYgV1NfRExHRlJBTUUpIHx8CisJICAgICh3bmRQdHItPmR3RXhTdHlsZSAmIFdTX0VYX0RMR01PREFMRlJBTUUpIHx8ICh3bmRQdHItPmR3U3R5bGUgJiBXU19USElDS0ZSQU1FKSkpIHsKICAgICAgICAgICAgIERyYXdFZGdlMzIgKGhkYywgJnJlY3QsIEVER0VfUkFJU0VELCBCRl9SRUNUIHwgQkZfQURKVVNUKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChIQVNfRExHRlJBTUUoIHduZFB0ci0+ZHdTdHlsZSwgd25kUHRyLT5kd0V4U3R5bGUgKSkgCisgICAgICAgIGlmIChIQVNfRklYRURGUkFNRSggd25kUHRyLT5kd1N0eWxlLCB3bmRQdHItPmR3RXhTdHlsZSApKSAKICAgICAgICAgICAgIE5DX0RyYXdGcmFtZTk1KCBoZGMsICZyZWN0LCBUUlVFLCBhY3RpdmUgKTsKICAgICAgICAgZWxzZSBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVEhJQ0tGUkFNRSkKICAgICAgICAgICAgIE5DX0RyYXdGcmFtZTk1KGhkYywgJnJlY3QsIEZBTFNFLCBhY3RpdmUgKTsKQEAgLTExOTcsNDMgKzE0ODIsMzggQEAKICAgICAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19DQVBUSU9OKSA9PSBXU19DQVBUSU9OKQogICAgICAgICB7CiAgICAgICAgICAgICBSRUNUMzIgIHIgPSByZWN0OwotCSAgICBQT0lOVDMyICBzZXBbMl0gPSB7IHsgcmVjdC5sZWZ0LAotCQkJCSAgcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyIH0sCi0JCQkJeyByZWN0LnJpZ2h0LAotCQkJCSAgcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyIH0gfTsKLQotICAgICAgICAgICAgci5ib3R0b20gPSByZWN0LnRvcCArIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDI7Ci0gICAgICAgICAgICByZWN0LnRvcCArPSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyICsgc3lzTWV0cmljc1tTTV9DWUJPUkRFUl07CisJICAgIGlmICh3bmRQdHItPmR3RXhTdHlsZSAmIFdTX0VYX1RPT0xXSU5ET1cpIHsKKwkJci5ib3R0b20gPSByZWN0LnRvcCArIHN5c01ldHJpY3NbU01fQ1lTTUNBUFRJT05dOworCQlyZWN0LnRvcCArPSBzeXNNZXRyaWNzW1NNX0NZU01DQVBUSU9OXTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJci5ib3R0b20gPSByZWN0LnRvcCArIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXTsKKwkJcmVjdC50b3AgKz0gc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dOworCSAgICB9CiAgICAgICAgICAgICBOQ19EcmF3Q2FwdGlvbjk1KCBoZGMsICZyLCBod25kLCB3bmRQdHItPmR3U3R5bGUsIGFjdGl2ZSApOwotCSAgICBHUkFQSF9EcmF3TGluZXMoIGhkYywgc2VwLCAxLCBUV0VBS19QZW5DMDk1ICk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoSEFTX01FTlUod25kUHRyKSkKICAgICB7CiAJUkVDVDMyIHIgPSByZWN0OwotCXIuYm90dG9tID0gcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZTUVOVV0gLSBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXTsKLQlyLnRvcCAtPSBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXTsKKwlyLmJvdHRvbSA9IHJlY3QudG9wICsgc3lzTWV0cmljc1tTTV9DWU1FTlVdOwogCQogCVRSQUNFKG5vbmNsaWVudCwgIkNhbGxpbmcgRHJhd01lbnVCYXIgd2l0aCAiCiAJCQkgICJyZWN0ICglZCwgJWQpLSglZCwgJWQpXG4iLCByLmxlZnQsIHIudG9wLAogCQkJICByLnJpZ2h0LCByLmJvdHRvbSk7CiAKLQlyZWN0LnRvcCArPSBNRU5VX0RyYXdNZW51QmFyKCBoZGMsICZyLCBod25kLCBzdXBwcmVzc19tZW51cGFpbnQgKTsKKwlyZWN0LnRvcCArPSBNRU5VX0RyYXdNZW51QmFyKCBoZGMsICZyLCBod25kLCBzdXBwcmVzc19tZW51cGFpbnQgKSArIDE7CiAgICAgfQogCiAgICAgVFJBQ0Uobm9uY2xpZW50LCAiQWZ0ZXIgTWVudUJhciwgcmVjdCBpcyAoJWQsICVkKS0oJWQsICVkKS5cbiIsCiAJCSAgICAgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSApOwogCi0gICAgLyogRHJhdyB0aGUgaW5uZXIgZnJhbWVzICovCi0gICAgR1JBUEhfRHJhd1JlY3RhbmdsZSggaGRjLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LAotCQkJIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFRXRUFLX1BlbkMwOTUgKTsKLSAgICBJbmZsYXRlUmVjdDMyKCZyZWN0LCAtMSwgLTEpOwotICAgIEdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdCggaGRjLCAmcmVjdCwgMSwgMSwgTkNfV2luU2hhZG93OTUsCi0JCQkJIE5DX1dpbkhpZ2hsaWdodDk1ICk7CisgICAgaWYgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfQ0xJRU5URURHRSkKKwlEcmF3RWRnZTMyIChoZGMsICZyZWN0LCBFREdFX1NVTktFTiwgQkZfUkVDVCB8IEJGX0FESlVTVCk7CiAKLSAgICBJbmZsYXRlUmVjdDMyKCZyZWN0LCAtMSwgLTEpOwotCisgICAgaWYgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfU1RBVElDRURHRSkKKwlEcmF3RWRnZTMyIChoZGMsICZyZWN0LCBCRFJfU1VOS0VOT1VURVIsIEJGX1JFQ1QgfCBCRl9BREpVU1QpOwogCiAgICAgLyogRHJhdyB0aGUgc2Nyb2xsLWJhcnMgKi8KIApAQCAtMTM3OCw4ICsxNjU4LDE0IEBACiAgIAkgIE9mZnNldFJlY3QzMiggcmVjdCwgd25kUHRyLT5yZWN0V2luZG93LmxlZnQsIHduZFB0ci0+cmVjdFdpbmRvdy50b3ApOwogICAJICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpCiAgICAgIAkgICAgICBDbGllbnRUb1NjcmVlbjMyKCB3bmRQdHItPnBhcmVudC0+aHduZFNlbGYsIChQT0lOVDMyICopcmVjdCApOwotICAgICAgICAgIHJlY3QtPnJpZ2h0ID0gcmVjdC0+bGVmdCArIFNZU01FVFJJQ1NfQ1hTSVpFOwotICAgICAgICAgIHJlY3QtPmJvdHRvbSA9IHJlY3QtPnRvcCArIFNZU01FVFJJQ1NfQ1lTSVpFOworICAgICAgICAgIGlmKFRXRUFLX1dpbjk1TG9vaykgeworICAgICAgICAgICAgcmVjdC0+cmlnaHQgPSByZWN0LT5sZWZ0ICsgc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dIC0gMTsKKyAgICAgICAgICAgIHJlY3QtPmJvdHRvbSA9IHJlY3QtPnRvcCArIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDE7CisJICB9CisJICBlbHNlIHsKKyAgICAgICAgICAgIHJlY3QtPnJpZ2h0ID0gcmVjdC0+bGVmdCArIFNZU01FVFJJQ1NfQ1hTSVpFOworICAgICAgICAgICAgcmVjdC0+Ym90dG9tID0gcmVjdC0+dG9wICsgU1lTTUVUUklDU19DWVNJWkU7CisJICB9CiAgICAgICB9CiAgICAgICByZXR1cm4gVFJVRTsKICAgfQpAQCAtMTc0OSw2ICsyMDM1LDQyIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQ19UcmFja0Nsb3NlQnV0dG9uOTUKKyAqCisgKiBUcmFjayBhIG1vdXNlIGJ1dHRvbiBwcmVzcyBvbiB0aGUgV2luOTUgY2xvc2UgYnV0dG9uLgorICovCitzdGF0aWMgdm9pZAorTkNfVHJhY2tDbG9zZUJ1dHRvbjk1IChIV05EMzIgaHduZCwgV09SRCB3UGFyYW0pCit7CisgICAgTVNHMTYgbXNnOworICAgIEhEQzMyIGhkYyA9IEdldFdpbmRvd0RDMzIoIGh3bmQgKTsKKyAgICBCT09MMzIgcHJlc3NlZCA9IFRSVUU7CisKKyAgICBTZXRDYXB0dXJlMzIoIGh3bmQgKTsKKworICAgIE5DX0RyYXdDbG9zZUJ1dHRvbjk1IChod25kLCBoZGMsIFRSVUUpOworCisgICAgZG8KKyAgICB7CisJQk9PTDMyIG9sZHN0YXRlID0gcHJlc3NlZDsKKyAgICAgICAgTVNHX0ludGVybmFsR2V0TWVzc2FnZSggJm1zZywgMCwgMCwgMCwgUE1fUkVNT1ZFLCBGQUxTRSApOworCisJcHJlc3NlZCA9IChOQ19IYW5kbGVOQ0hpdFRlc3QoIGh3bmQsIG1zZy5wdCApID09IHdQYXJhbSk7CisJaWYgKHByZXNzZWQgIT0gb2xkc3RhdGUpCisJICAgTkNfRHJhd0Nsb3NlQnV0dG9uOTUgKGh3bmQsIGhkYywgcHJlc3NlZCk7CisgICAgfSB3aGlsZSAobXNnLm1lc3NhZ2UgIT0gV01fTEJVVFRPTlVQKTsKKworICAgIE5DX0RyYXdDbG9zZUJ1dHRvbjk1IChod25kLCBoZGMsIEZBTFNFKTsKKworICAgIFJlbGVhc2VDYXB0dXJlKCk7CisgICAgUmVsZWFzZURDMzIoIGh3bmQsIGhkYyApOworICAgIGlmICghcHJlc3NlZCkgcmV0dXJuOworCisgICAgU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fU1lTQ09NTUFORCwgU0NfQ0xPU0UsICooTE9ORyopJm1zZy5wdCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE5DX1RyYWNrU2Nyb2xsQmFyCiAgKgogICogVHJhY2sgYSBtb3VzZSBidXR0b24gcHJlc3Mgb24gdGhlIGhvcml6b250YWwgb3IgdmVydGljYWwgc2Nyb2xsLWJhci4KQEAgLTE4NTUsNiArMjE3NywxMSBAQAogCU5DX1RyYWNrTWluTWF4Qm94KCBod25kLCB3UGFyYW0gKTsKIAlicmVhazsKIAorICAgIGNhc2UgSFRDTE9TRToKKwlpZiAoVFdFQUtfV2luOTVMb29rKQorCSAgICBOQ19UcmFja0Nsb3NlQnV0dG9uOTUgKGh3bmQsIHdQYXJhbSk7CisJYnJlYWs7CisKICAgICBjYXNlIEhUTEVGVDoKICAgICBjYXNlIEhUUklHSFQ6CiAgICAgY2FzZSBIVFRPUDoKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvc3lzY29sb3IuYyBiL3dpbmRvd3Mvc3lzY29sb3IuYwppbmRleCBjMDhhZGM3Li5mZTQ4NDMxIDEwMDY0NAotLS0gYS93aW5kb3dzL3N5c2NvbG9yLmMKKysrIGIvd2luZG93cy9zeXNjb2xvci5jCkBAIC01Niw3ICs1Niw3IEBACiAgICAgIlRpdGxlVGV4dCIsICIyNTUgMjU1IDI1NSIsICAgICAgLyogQ09MT1JfQ0FQVElPTlRFWFQgICAgICAgICAqLwogICAgICJBY3RpdmVCb3JkZXIiLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0FDVElWRUJPUkRFUiAgICAgICAgKi8KICAgICAiSW5hY3RpdmVCb3JkZXIiLCAiMjU1IDI1NSAyNTUiLCAvKiBDT0xPUl9JTkFDVElWRUJPUkRFUiAgICAgICovCi0gICAgIkFwcFdvcmtzcGFjZSIsICIyNTUgMjU1IDIzMiIsICAgLyogQ09MT1JfQVBQV09SS1NQQUNFICAgICAgICAqLworICAgICJBcHBXb3Jrc3BhY2UiLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0FQUFdPUktTUEFDRSAgICAgICAgKi8KICAgICAiSGlsaWdodCIsICIyMjMgMjIzIDIyMyIsICAgICAgICAvKiBDT0xPUl9ISUdITElHSFQgICAgICAgICAgICovCiAgICAgIkhpbGlnaHRUZXh0IiwgIjAgMCAwIiwgICAgICAgICAgLyogQ09MT1JfSElHSExJR0hUVEVYVCAgICAgICAqLwogICAgICJCdXR0b25GYWNlIiwgIjE5MiAxOTIgMTkyIiwgICAgIC8qIENPTE9SX0JUTkZBQ0UgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3dpbmRvd3Mvc3lzbWV0cmljcy5jIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKaW5kZXggYjAyZjYyOS4uNDQxMWUwYyAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNtZXRyaWNzLmMKKysrIGIvd2luZG93cy9zeXNtZXRyaWNzLmMKQEAgLTI3LDggKzI3LDEyIEBACiAgICAgc3lzTWV0cmljc1tTTV9DWFZTQ1JPTExdID0KIAlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJTY3JvbGxCYXJXaWR0aCIsIDE2KSArIDE7CiAgICAgc3lzTWV0cmljc1tTTV9DWUhTQ1JPTExdID0gc3lzTWV0cmljc1tTTV9DWFZTQ1JPTExdOwotICAgIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSA9IDIgKwotCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIkNhcHRpb25IZWlnaHQiLCAxOCk7CisgICAgaWYgKFRXRUFLX1dpbjk1TG9vaykKKwlzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gPQorCSAgICBQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJDYXB0aW9uSGVpZ2h0IiwgMTkpOworICAgIGVsc2UKKwlzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gPSAyICsKKwkgICAgUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiQ2FwdGlvbkhlaWdodCIsIDE4KTsKICAgICBzeXNNZXRyaWNzW1NNX0NYQk9SREVSXSA9IDE7CiAgICAgc3lzTWV0cmljc1tTTV9DWUJPUkRFUl0gPSBzeXNNZXRyaWNzW1NNX0NYQk9SREVSXTsKICAgICBzeXNNZXRyaWNzW1NNX0NYRExHRlJBTUVdID0KQEAgLTM5LDggKzQzLDEyIEBACiAgICAgc3lzTWV0cmljc1tTTV9DWEhUSFVNQl0gPSBzeXNNZXRyaWNzW1NNX0NZVlRIVU1CXTsKICAgICBzeXNNZXRyaWNzW1NNX0NYSUNPTl0gPSAzMjsKICAgICBzeXNNZXRyaWNzW1NNX0NZSUNPTl0gPSAzMjsKLSAgICBzeXNNZXRyaWNzW1NNX0NZTUVOVV0gPQotCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVIZWlnaHQiLCAxOCk7CisgICAgaWYgKFRXRUFLX1dpbjk1TG9vaykKKwlzeXNNZXRyaWNzW1NNX0NZTUVOVV0gPQorCSAgICBQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJNZW51SGVpZ2h0IiwgMTkpOworICAgIGVsc2UKKwlzeXNNZXRyaWNzW1NNX0NZTUVOVV0gPQorCSAgICBQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJNZW51SGVpZ2h0IiwgMTgpOwogICAgIHN5c01ldHJpY3NbU01fQ1hGVUxMU0NSRUVOXSA9IHN5c01ldHJpY3NbU01fQ1hTQ1JFRU5dOwogICAgIHN5c01ldHJpY3NbU01fQ1lGVUxMU0NSRUVOXSA9CiAJc3lzTWV0cmljc1tTTV9DWVNDUkVFTl0gLSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl07CmRpZmYgLS1naXQgYS93aW5kb3dzL3VzZXIuYyBiL3dpbmRvd3MvdXNlci5jCmluZGV4IGQwY2Q3ZWQuLjBhNjYxMWEgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvdXNlci5jCisrKyBiL3dpbmRvd3MvdXNlci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibWlzY2VtdS5oIgogI2luY2x1ZGUgInF1ZXVlLmgiCiAjaW5jbHVkZSAic2hlbGwuaCIKKyNpbmNsdWRlICJjYWxsYmFjay5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzICAgKFVTRVIuMjg0KQpAQCAtOTMsNyArOTQsNyBAQAogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgUkVTT1VSQ0VIQU5ETEVSMTYgX19yMTZsb2FkZXIgPSBOVUxMOworc3RhdGljIEZBUlBST0MxNiBfX3IxNmxvYWRlciA9IE5VTEw7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgVVNFUl9DYWxsRGVmYXVsdFJzcmNIYW5kbGVyCkBAIC0xMDIsNyArMTAzLDcgQEAKICAqLwogSEdMT0JBTDE2IFVTRVJfQ2FsbERlZmF1bHRSc3JjSGFuZGxlciggSEdMT0JBTDE2IGhNZW1PYmosIEhNT0RVTEUxNiBoTW9kdWxlLCBIUlNSQzE2IGhSc3JjICkKIHsKLSAgICByZXR1cm4gX19yMTZsb2FkZXIoIGhNZW1PYmosIGhNb2R1bGUsIGhSc3JjICk7CisgICAgcmV0dXJuIENhbGxiYWNrcy0+Q2FsbFJlc291cmNlSGFuZGxlclByb2MoIF9fcjE2bG9hZGVyLCBoTWVtT2JqLCBoTW9kdWxlLCBoUnNyYyApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE2LDEzICsxMTcsMTIgQEAKICAgICAgKiB3aGVuIGEgbW9kdWxlJ3MgcmVzb3VyY2UgdGFibGUgaXMgbG9hZGVkLiAqLwogCiAgICAgcHJvYyA9IFNldFJlc291cmNlSGFuZGxlciggaEluc3RhbmNlLCBSVF9JQ09OMTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MzMilMb2FkRElCSWNvbkhhbmRsZXIgKTsKLSAgICBpZighX19yMTZsb2FkZXIgKSAKLQlfX3IxNmxvYWRlciA9IChSRVNPVVJDRUhBTkRMRVIxNilwcm9jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9HZXRXbmRQcm9jRW50cnkxNigiTG9hZERJQkljb25IYW5kbGVyIikgKTsKKyAgICBpZiAoIV9fcjE2bG9hZGVyKSBfX3IxNmxvYWRlciA9IHByb2M7CisKICAgICBwcm9jID0gU2V0UmVzb3VyY2VIYW5kbGVyKCBoSW5zdGFuY2UsIFJUX0NVUlNPUjE2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGQVJQUk9DMzIpTG9hZERJQkN1cnNvckhhbmRsZXIgKTsKLSAgICBpZighX19yMTZsb2FkZXIgKQotCV9fcjE2bG9hZGVyID0gKFJFU09VUkNFSEFORExFUjE2KXByb2M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCJMb2FkRElCQ3Vyc29ySGFuZGxlciIpICk7CisgICAgaWYgKCFfX3IxNmxvYWRlcikgX19yMTZsb2FkZXIgPSBwcm9jOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvd2luZG93cy93aW4uYyBiL3dpbmRvd3Mvd2luLmMKaW5kZXggZTE0NmU4OS4uZDkzNjZlNCAxMDA2NDQKLS0tIGEvd2luZG93cy93aW4uYworKysgYi93aW5kb3dzL3dpbi5jCkBAIC0xNDA2LDggKzE0MDYsMTIgQEAKICAgICAJCVdBUk4oIHdpbiwiR1dXX0lEOiBkaXNjYXJkcyBoaWdoIGJpdHMgb2YgMHglMDh4IVxuIiwKICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT53SURtZW51KTsKICAgICAJcmV0dXJuIChXT1JEKXduZFB0ci0+d0lEbWVudTsKLSAgICBjYXNlIEdXV19IV05EUEFSRU5UOiByZXR1cm4gd25kUHRyLT5wYXJlbnQgPwotCQkJd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmIDogd25kUHRyLT5vd25lci0+aHduZFNlbGY7CisgICAgY2FzZSBHV1dfSFdORFBBUkVOVDogCisgICAgCXJldHVybiB3bmRQdHItPnBhcmVudCA/CisJCXduZFB0ci0+cGFyZW50LT5od25kU2VsZiA6ICgKKwkJCXduZFB0ci0+b3duZXIgPworCQkJIHduZFB0ci0+b3duZXItPmh3bmRTZWxmIDogCisJCQkgMCk7CiAgICAgY2FzZSBHV1dfSElOU1RBTkNFOiAgCiAgICAgCWlmIChISVdPUkQod25kUHRyLT5oSW5zdGFuY2UpKQogICAgIAkJV0FSTih3aW4sIkdXV19ISU5TVEFOQ0U6IGRpc2NhcmRzIGhpZ2ggYml0cyBvZiAweCUwOHghXG4iLApAQCAtMTcyOCw2ICsxNzMyLDE1IEBACiAgICAgcmV0dXJuIElzV2luZG93MzIoIGh3bmQgKTsKIH0KIAordm9pZCBXSU5BUEkgV0lOMTZfSXNXaW5kb3cxNiggQ09OVEVYVCAqY29udGV4dCApCit7CisgICAgV09SRCAqc3RhY2sgPSBQVFJfU0VHX09GRl9UT19MSU4oU1NfcmVnKGNvbnRleHQpLCBTUF9yZWcoY29udGV4dCkpOworICAgIEhXTkQxNiBod25kID0gKEhXTkQxNilzdGFja1syXTsKKworICAgIEFYX3JlZyhjb250ZXh0KSA9IElzV2luZG93MzIoIGh3bmQgKTsKKyAgICBFU19yZWcoY29udGV4dCkgPSBVU0VSX0hlYXBTZWw7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgSXNXaW5kb3czMiAgIChVU0VSMzIuMzQ4KQpkaWZmIC0tZ2l0IGEvd2luZG93cy93aW5wb3MuYyBiL3dpbmRvd3Mvd2lucG9zLmMKaW5kZXggNzM4MGRiOS4uMWViYTk4NiAxMDA2NDQKLS0tIGEvd2luZG93cy93aW5wb3MuYworKysgYi93aW5kb3dzL3dpbnBvcy5jCkBAIC0xMTgyLDEwICsxMTgyLDEwIEBACiAJCQkgICAgICooTFBQT0lOVDMyKSZwV25kLT5yZWN0V2luZG93LmxlZnQsICZwV25kLT5yZWN0V2luZG93ICk7CiAJd25kcGwtPmxlbmd0aCAgPSBzaXplb2YoKnduZHBsKTsKIAlpZiggcFduZC0+ZHdTdHlsZSAmIFdTX01JTklNSVpFICkKLQkgICAgd25kcGwtPnNob3dDbWQgPSBTV19TSE9XTUFYSU1JWkVEOworCSAgICB3bmRwbC0+c2hvd0NtZCA9IFNXX1NIT1dNSU5JTUlaRUQ7CiAJZWxzZSAKIAkgICAgd25kcGwtPnNob3dDbWQgPSAoIHBXbmQtPmR3U3R5bGUgJiBXU19NQVhJTUlaRSApCi0JCQkgICAgID8gU1dfU0hPV01JTklNSVpFRCA6IFNXX1NIT1dOT1JNQUwgOworCQkJICAgICA/IFNXX1NIT1dNQVhJTUlaRUQgOiBTV19TSE9XTk9STUFMIDsKIAlpZiggcFduZC0+ZmxhZ3MgJiBXSU5fUkVTVE9SRV9NQVggKQogCSAgICB3bmRwbC0+ZmxhZ3MgPSBXUEZfUkVTVE9SRVRPTUFYSU1JWkVEOwogCWVsc2UKQEAgLTE2NDgsMTQgKzE2NDgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNUMzIgKm5ld0NsaWVudFJlY3QgKQogewogICAgIE5DQ0FMQ1NJWkVfUEFSQU1TMzIgcGFyYW1zOworICAgIFdJTkRPV1BPUzMyIHdpbnBvc0NvcHk7CiAgICAgTE9ORyByZXN1bHQ7CiAKICAgICBwYXJhbXMucmdyY1swXSA9ICpuZXdXaW5kb3dSZWN0OwogICAgIGlmIChjYWxjVmFsaWRSZWN0KQogICAgIHsKKyAgICAgICAgd2lucG9zQ29weSA9ICp3aW5wb3M7CiAJcGFyYW1zLnJncmNbMV0gPSAqb2xkV2luZG93UmVjdDsKIAlwYXJhbXMucmdyY1syXSA9ICpvbGRDbGllbnRSZWN0OwotCXBhcmFtcy5scHBvcyA9IHdpbnBvczsKKwlwYXJhbXMubHBwb3MgPSAmd2lucG9zQ29weTsKICAgICB9CiAgICAgcmVzdWx0ID0gU2VuZE1lc3NhZ2UzMkEoIGh3bmQsIFdNX05DQ0FMQ1NJWkUsIGNhbGNWYWxpZFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUEFSQU0pJnBhcmFtcyApOwo=