ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggODEyMDMwNC4uMDQwMzZjNCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTUgKzEsMTUgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NTA5MDEgb2YgV2luZSB0aGUgTVMgV2luZG93cyBlbXVsYXRvci4gIFRoaXMgaXMgc3RpbGwgYQorVGhpcyBpcyByZWxlYXNlIDk1MDkxOCBvZiBXaW5lIHRoZSBNUyBXaW5kb3dzIGVtdWxhdG9yLiAgVGhpcyBpcyBzdGlsbCBhCiBkZXZlbG9wZXIncyBvbmx5IHJlbGVhc2UuICBUaGVyZSBhcmUgbWFueSBidWdzIGFuZCBtYW55IHVuaW1wbGVtZW50ZWQgQVBJCiBmZWF0dXJlcy4gIE1vc3QgYXBwbGljYXRpb25zIHN0aWxsIGRvIG5vdCB3b3JrLgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gIndpbmUtbmV3QGFtc2NvbnMuY29tIi4gIFBsZWFzZSBkb24ndCBmb3JnZXQKIHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuICBJJ2xsIG1ha2UgYSBuZXcgcmVsZWFzZSBldmVyeSBvdGhlciB3ZWVrLgogCi1XSEFUJ1MgTkVXIHdpdGggV2luZS05NTA5MDE6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQotCS0gQWNjZXNzZXMgdG8gQklPUyBzZWdtZW50IDB4NDAgYXJlIHRyYXBwZWQgYW5kIGVtdWxhdGVkLgotCS0gTXVsdGltZWRpYSBpbXByb3ZlbWVudHMuCi0JLSBJUEMgY2FuIG5vdyBiZSBkaXNhYmxlZCBhdCBjb21waWxlLXRpbWUuCi0JLSBEb2N1bWVudGF0aW9uIGZvciB0aGUgSVBDIGNvZGUuCitXSEFUJ1MgTkVXIHdpdGggV2luZS05NTA5MTg6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQorCS0gU3VwcG9ydCBmb3Igc2VsZi1sb2FkaW5nIG1vZHVsZXMuCisJLSBXaW4zMiBzdXBwb3J0IHNob3VsZCBiZWdpbiB0byB3b3JrIGFnYWluLgorCS0gQ3Vyc29yIGZpeGVzLgorCS0gTmV3IGNvbmZpZ3VyZSBzY3JpcHQgc2hvdWxkIGJlIHVzZWFibGUgbm93LgogCS0gTG90cyBvZiBidWcgZml4ZXMuCiAKIFNlZSB0aGUgUkVBRE1FIGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KQEAgLTE4LDExICsxOCwxMSBAQAogdGhlIHJlbGVhc2UgaXMgYXZhaWxhYmxlIGF0IHRoZSBmdHAgc2l0ZXMuICBUaGUgc291cmNlcyB3aWxsIGJlIGF2YWlsYWJsZQogZnJvbSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKIAotICAgIHN1bnNpdGUudW5jLmVkdTovcHViL0xpbnV4L0FMUEhBL3dpbmUvV2luZS05NTA5MDEudGFyLmd6Ci0gICAgdHN4LTExLm1pdC5lZHU6L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTAxLnRhci5negotICAgIGZ0cC5pbmZvbWFnaWMuY29tOi9wdWIvbWlycm9ycy9saW51eC93aW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTAxLnRhci5negotICAgIGZ0cC5mdW5ldC5maTovcHViL09TL0xpbnV4L0FMUEhBL1dpbmUvV2luZS05NTA5MDEudGFyLmd6Ci0gICAgYXJpcy5jb206L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTAxLnRhci5negorICAgIHN1bnNpdGUudW5jLmVkdTovcHViL0xpbnV4L0FMUEhBL3dpbmUvV2luZS05NTA5MTgudGFyLmd6CisgICAgdHN4LTExLm1pdC5lZHU6L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTE4LnRhci5negorICAgIGZ0cC5pbmZvbWFnaWMuY29tOi9wdWIvbWlycm9ycy9saW51eC93aW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTE4LnRhci5negorICAgIGZ0cC5mdW5ldC5maTovcHViL09TL0xpbnV4L0FMUEhBL1dpbmUvV2luZS05NTA5MTgudGFyLmd6CisgICAgYXJpcy5jb206L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTUwOTE4LnRhci5negogCiBJdCBzaG91bGQgYWxzbyBiZSBhdmFpbGFibGUgZnJvbSBhbnkgc2l0ZSB0aGF0IG1pcnJvcnMgdHN4LTExIG9yIHN1bnNpdGUuCiAKQEAgLTM2LDE0ICszNiwxNyBAQAogV2luZSBpcyBhdmFpbGFibGUgdGhhbmtzIHRvIHRoZSB3b3JrIG9mIEJvYiBBbXN0YWR0LCBEYWcgQXNoZWltLAogTWFydGluIEF5b3R0ZSwgUm9zcyBCaXJvLCBFcmlrIEJvcywgRm9ucyBCb3RtYW4sIEpvaG4gQnJlemFrLAogQW5kcmV3IEJ1bGhhaywgSm9obiBCdXJ0b24sIFBhdWwgRmFsc3RhZCwgT2xhZiBGbGViYmUsIFBldGVyIEdhbGJhdnksCi1DYW1lcm9uIEhlaWRlLCBKZWZmcmV5IEhzdSwgTWlndWVsIGRlIEljYXphLCBBbGV4YW5kcmUgSnVsbGlhcmQsCitSYW1vbiBHYXJjaWEsIEhhbnMgZGUgR3JhYWYsIENoYXJsZXMgTS4gSGFubnVtLCBDYW1lcm9uIEhlaWRlLAorSm9jaGVuIEhvZW5pY2tlLCBKZWZmcmV5IEhzdSwgTWlndWVsIGRlIEljYXphLCBBbGV4YW5kcmUgSnVsbGlhcmQsCiBKb24gS29ucmF0aCwgU2NvdHQgQS4gTGFpcmQsIE1hcnRpbiB2b24gTG9ld2lzLCBLZW5uZXRoIE1hY0RvbmFsZCwKLVBldGVyIE1hY0RvbmFsZCwgV2lsbGlhbSBNYWdybywgRGF2aWQgTWV0Y2FsZmUsIE1pY2hhZWwgUGF0cmEsCi1Kb2huIFJpY2hhcmRzb24sIEpvaGFubmVzIFJ1c2NoZWluc2tpLCBUaG9tYXMgU2FuZGZvcmQsCi1Db25zdGFudGluZSBTYXB1bnR6YWtpcywgQmVybmQgU2NobWlkdCwgWW5ndmkgU2lndXJqb25zc29uLCBSaWNrIFNsYWRrZXksCi1XaWxsaWFtIFNtaXRoLCBFcmlrIFN2ZW5kc2VuLCBHb3JhbiBUaHluaSwgSmltbXkgVGlydGF3YW5nc2EsIEpvbiBUb21icywKLUxpbnVzIFRvcnZhbGRzLCBNaWNoYWVsIFZla3NsZXIsIENhcmwgV2lsbGlhbXMsIEthcmwgR3VlbnRlciBXdWVuc2NoLAotRXJpYyBZb3VuZ2RhbGUsIGFuZCBKYW1lcyBZb3VuZ21hbi4KK1BldGVyIE1hY0RvbmFsZCwgV2lsbGlhbSBNYWdybywgTWFyY3VzIE1laXNzbmVyLCBHcmFoYW0gTWVuaGVubml0dCwKK0RhdmlkIE1ldGNhbGZlLCBNaWNoYWVsIFBhdHJhLCBKb2huIFJpY2hhcmRzb24sIEpvaGFubmVzIFJ1c2NoZWluc2tpLAorVGhvbWFzIFNhbmRmb3JkLCBDb25zdGFudGluZSBTYXB1bnR6YWtpcywgRGFuaWVsIFNjaGVwbGVyLAorQmVybmQgU2NobWlkdCwgWW5ndmkgU2lndXJqb25zc29uLCBSaWNrIFNsYWRrZXksIFdpbGxpYW0gU21pdGgsCitFcmlrIFN2ZW5kc2VuLCBHb3JhbiBUaHluaSwgSmltbXkgVGlydGF3YW5nc2EsIEpvbiBUb21icywKK0xpbnVzIFRvcnZhbGRzLCBHcmVnb3J5IFRydWJldHNrb3ksIE1pY2hhZWwgVmVrc2xlciwgTW9ydGVuIFdlbGluZGVyLAorSmFuIFdpbGxhbW93aXVzLCBDYXJsIFdpbGxpYW1zLCBLYXJsIEd1ZW50ZXIgV3VlbnNjaCwgRXJpYyBZb3VuZ2RhbGUsCithbmQgSmFtZXMgWW91bmdtYW4uCiAKIC0tCiBBbGV4YW5kcmUgSnVsbGlhcmQKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1YTY0MjI3Li4xM2E2ZTllIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdW4gU2VwIDE3IDE2OjQ3OjQ5IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KKworCSogW2NvbmZpZ3VyZS5pbl0gWyovTWFrZWZpbGUuaW5dIFtNYWtlLnJ1bGVzLmluXQorCUNsZWFuZWQgdXAgbWFrZWZpbGVzLCBhZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgV2luZWxpYiwKKwlncm91cGVkIGNvbW1vbiBtYWtlIHJ1bGVzIGluIE1ha2UucnVsZXMuaW4uCisKKwkqIFtDb25maWd1cmVdCisJUmVuYW1lZCB0byAnQ29uZmlndXJlLm9sZCc7IHBsZWFzZSB1c2UgJ2NvbmZpZ3VyZScgaW5zdGVhZC4KKworCSogW2NvbnRyb2xzL21lbnUuY10KKwlGaXhlZCBEZXN0cm95TWVudSgpIHRvIGF2b2lkIGRlbGV0aW5nIHRoZSBzYW1lIG1lbnUgdHdpY2UuCisJTW9yZSBmaXhlcyB0byBXTV9NRU5VU0VMRUNULCBhbmQgYWRkZWQgV01fSU5JVE1FTlUuCisKKwkqIFtpZjE2MzIvcmVsYXkuY10KKwlGaXhlZCB3cm9uZyByZWdpc3RlciB2YWx1ZXMgZGlzcGxheWVkIGJ5IFJFTEFZX0RlYnVnQ2FsbDMyKCkuCisKKwkqIFttZW1vcnkvbG9jYWwuY10KKwlGaXhlZCBMb2NhbExvY2soKSBhbmQgTG9jYWxVbmxvY2soKSB0byBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZQorCWxvY2sgY291bnQgZm9yIG1vdmVhYmxlIGJsb2Nrcy4KKworCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9zaGVsbC5jXSBbcmMvd2luZXJjLmNdCisJTW9kaWZpZWQgdGhlIGdlbmVyYXRlZCBDIGZpbGUgc28gdGhhdCB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24KKwkoc2l6ZSwgZXRjLikgaXMgYWxzbyBleHBvcnRlZC4KKwlNb2RpZmllZCBjb21tb24gZGlhbG9ncyB0byB1c2UgdGhlIG5ldyBpbmZvcm1hdGlvbnMuCisKKwkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQorCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAorCXNvbWVvbmUuCisKKwkqIFtyYy9zeXNyZXMucmNdIFtyYy9zeXNyZXNfRW4ucmNdCisJTW92ZWQgRW5nbGlzaCByZXNvdXJjZXMgdG8gc3lzcmVzX0VuLnJjLgorCUNoYW5nZWQgaWRzIGZyb20gbnVtZXJpYyB0byBzeW1ib2xpYyBmb3IgZGlhbG9ncy4KKworCSogW3dpbmRvd3MvZGlhbG9nLmNdCisJTW9kaWZpZWQgdGVtcGxhdGUgcGFyc2luZyB0byBiZSBhYmxlIHRvIHBhc3Mgc2VnbWVudGVkIHBvaW50ZXJzIHRvCisJQ3JlYXRlV2luZG93KCkuCisKKwkqIFt3aW5kb3dzL3dpbi5jXQorCUNyZWF0ZVdpbmRvdygpIG5vdyB0YWtlcyBzZWdtZW50ZWQgcG9pbnRlcnMgZm9yIGNsYXNzIGFuZCB3aW5kb3cKKwluYW1lcy4KKwlNYXhtaW1pemUgb3IgbWluaW1pemUgdGhlIHdpbmRvdyB1cG9uIGNyZWF0aW9uIGlmIHRoZSBXU19NQVhJTUlaRQorCW9yIFdTX01JTklNSVpFIGJpdHMgYXJlIHNldC4KKworVGh1IFNlcCAxNCAxNzoxOTo1NyAxOTk1ICBQYXVsIFdpbGhlbG0gIDxwYXVsQHBhdWwuYWNjZXNzb25lLmNvbT4KKworCSogW2NvbnRyb2xzL3Njcm9sbC5jXQorCUZpeGVkIHNjcm9sbC1iYXIgYnVncyBmb3Igbm9uLWNsaWVudCB3aW5kb3dzLgorCitUaHUgU2VwIDE0IDE0OjA0OjE0IE1FVCBEU1QgMTk5NSBKb2NoZW4gSG9lbmlja2UgPEpvY2hlbi5Ib2VuaWNrZUBhcmJpLkluZm9ybWF0aWsuVW5pLU9sZGVuYnVyZy5kZT4KKworCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQorCUN1cnNvciBpcyBub3QgbWlycm9yZWQgYW55IG1vcmUgYW5kIHRoZSBob3RzcG90IGlzIHNldCByaWdodC4KKworV2VkIFNlcCAxMyAxNDoyMjozMSAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisKKwkqIFtvbGUuaF0KKwlNaXNjIHNtYWxsIGZpeGVzLgorCitNb24gU2VwICA0IDAwOjAxOjIzIDE5OTUgIEpvbiBUb21icyA8am9uQGd0ZS5lc2kudXMuZXM+CisKKwkqIFtyYy9zeXNyZXNfRXMucmNdCisJRmlyc3QgYXR0ZW1wdCBhdCBTcGFuaXNoIFtFc10gbGFuZ3VhZ2Ugc3VwcG9ydC4KKworU3VuIFNlcCAgMyAxMzoyMjozMyAxOTk1ICAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgorCisJKiBbaW5jbHVkZS9hbGlhcy5oXVt3aW5kb3dzL2FsaWFzLmNdW2luY2x1ZGUvcmVsYXkzMi5oXQorCU5ldyBmaWxlcworCisJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQorCVdJREdFVFNfSW5pdDogcmVnaXN0ZXIgYWxpYXMgd2luZG93IHByb2NlZHVyZXMKKworCSogW2lmMTYzMi9jYWxsYmFjay5jXQorCUNhbGxXbmRQcm9jOiBDYWxsIGFsaWFzIGZ1bmN0aW9ucyBpZiBuZWNlc3NhcnkKKworCSogW2lmMTYzMi9nZGkzMi5zcGVjXQorCUdldFN0b2NrT2JqZWN0LCBUZXh0T3V0QTogbmV3IHJlbGF5cworCisJKiBbbWlzYy91c2VyMzIuY11baWYxNjMyL3VzZXIzMi5zcGVjXVttaXNjL01ha2VmaWxlLmluXVttaXNjL0ltYWtlZmlsZV0KKwl1c2VyMzIuYzogbmV3IGZpbGUKKwlCZWdpblBhaW50LENyZWF0ZVdpbmRvd0V4QSxEZWZXaW5kb3dQcm9jQSxEaXNwYXRjaE1lc3NhZ2UsRW5kUGFpbnQsCisJR2V0TWVzc2FnZUEsUmVnaXN0ZXJDbGFzc0EsU2hvd1dpbmRvdyxVcGRhdGVXaW5kb3c6IG5ldyByZWxheXMKKworCSogW2lmMTYzMi93aW5wcm9jczMyLnNwZWNdW2xvYWRlci9wZV9pbWFnZS5jXVtsb2FkZXIvbW9kdWxlLmNdCisJUEVfV2luMzJDYWxsVG9TdGFydDogbmV3IGZ1bmN0aW9uCisJTU9EVUxFX0NyZWF0ZUluc3RhbmNlOiByZW1vdmVkIHN0YXRpYyBhdHRyaWJ1dGUKKwlMb2FkTW9kdWxlOiBUcnkgbG9hZGluZyBQRSBpbWFnZSBvbiBlcnJvciAyMQorCVBFX0xvYWRNb2R1bGU6IG5ldyBmdW5jdGlvbgorCVBFX0xvYWRJbWFnZTogaW5pdGlhbGl6ZSBwZV9kYXRhIHdpdGggMAorCQorCSogW2luY2x1ZGUvZGxscy5oXVtpbmNsdWRlL3BlZXhlLmhdCisJbW92ZWQgcGVfZGF0YSBhbmQgd19maWxlcyB0byBwZWV4ZS5oCisJCisJKiBbbWlzYy9zaGVsbC5jXQorCVNoZWxsQWJvdXQ6IFJlZ2lzdGVyIEFib3V0V25kUHJvYyBhbGlhc2VzCisKKwkqIFttaXNjZW11L2ludDIxLmNdCisJaGFuZGxlIDB4NDQwQSBhbmQgMHhEQworCisJKiBbbWlzY2VtdS9pbnQyZi5jXQorCWhhbmRsZSAweDg0CisKKwkqIFtvYmplY3RzL2RpYi5jXQorCUNyZWF0ZURJQml0bWFwOiBjb21wbGFpbiBpZiBCSVRNQVBJTkZPSEVBREVSIGlzIG9mIHdyb25nIHNpemUKKworCSogW3Rvb2xzL2J1aWxkLmNdCisJaW5jbHVkZSB3aW5kb3dzLmggYW5kIHJlbGF5MzIuaCBpbnRvIGdlbmVyYXRlZCBXaW4zMiByZWxheXMsCisJZG9uJ3QgZGVjbGFyZSB0aGUgaW1wbGVtZW50YXRpb24gYXMgaW50ICgqKSgpOworCWxpbWl0IGluIFdJTjMyX2J1aWx0aW4gd2FzIG9mZiBieSBvbmUKKworCSogW3dpbmRvd3MvY2FyZXQuY10KKwlDQVJFVF9Jbml0aWFsaXplOiBuZXcgZnVuY3Rpb24sIGNhbGwgb24gc3RyYXRlZ2ljIHBsYWNlcworCisJKiBbd2luZG93cy9tZXNzYWdlYm94LmNdCisJTWVzc2FnZUJveDogcmVnaXN0ZXIgbWVzc2FnZSBib3ggcHJvYyBhbGlhc2VzCisKKwkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY11baWYxNjMyL2NvbWRsZzMyLnNwZWNdCisJTmV3IGZpbGVzCisKKwkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2lmMTYzMi9JbWFrZWZpbGVdW2lmMTYzMi9yZWxheTMyLmNdCisJYWRkZWQgbmV3IHNwZWMgZmlsZXMKKwlSRUxBWTMyX0dldEJ1aWx0aW5ETEw6IHBlcmZvcm0gbG9va3VwIGNhc2UgaW5zZW5zaXRpdmUKKwlSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IHN0YXJ0IG5hbWUgc2VhcmNoIGF0IDAKKworCSogW2lmMTYzMi91c2VyLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL2dkaS5zcGVjXQorCUFkZGVkIHN0dWJzIGZvciBuZXcgV2luOTUgQVBJCisKK1NhdCBTZXAgMiAxOTk1ICBNYXJ0aW4gUm95CisKKwkqIFttaXNjL2NvbW1kbGcuY10KKwlJbiBXTV9JTklURElBTE9HLCBjdXJyZW50IGZpbHRlciBtdXN0IHJlZmxlY3QgbHBvZm4tPm5GaWx0ZXJJbmRleC4KKyAgCVdoZW4gcHJvY2VzcyBJRE9LIGJ1dHRvbiBpbiBGSUxFRExHX1dNQ29tbWFuZCgpLAorIAlscG9mbi0+bkZpbHRlckluZGV4IHNob3VsZCBiZSB1cGRhdGVkIHRvIGN1cnJlbnQgc2VsZWN0aW9uLgorCitUaHUgQXVnIDMxIDE1OjAwOjAwIDE5OTUgUmFtJ29uIEdhcmMnaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CisKKwkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KKwlBZGRlZCBzdXBwb3J0IG9mIHNlbGYtbG9hZGluZyBtb2R1bGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRodSBBdWcgMzEgMTc6MTk6NTcgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgogCiAJKiBbQ29uZmlndXJlXQpkaWZmIC0tZ2l0IGEvQ29uZmlndXJlIGIvQ29uZmlndXJlLm9sZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gQ29uZmlndXJlCnJlbmFtZSB0byBDb25maWd1cmUub2xkCmRpZmYgLS1naXQgYS9NYWtlLnJ1bGVzLmluIGIvTWFrZS5ydWxlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE4YzUwCi0tLSAvZGV2L251bGwKKysrIGIvTWFrZS5ydWxlcy5pbgpAQCAtMCwwICsxLDQyIEBACisjIEdsb2JhbCBydWxlcyBzaGFyZWQgYnkgYWxsIG1ha2VmaWxlcworIyBUaGUgbWFrZWZpbGUgbXVzdCBkZWZpbmUgYXQgbGVhc3QgVE9QU1JDIGFuZCBNT0RVTEUKKworQ0MgCSAgPSBAQ0NACitDRkxBR1MgCSAgPSBAQ0ZMQUdTQAorREVGUyAgICAgID0gQERFRlNACitMQU5HCSAgPSBATEFOR0AKK1hfQ0ZMQUdTICA9IEBYX0NGTEFHU0AKK1lBQ0MgICAgICA9IEBZQUNDQAorTEVYICAgICAgID0gQExFWEAKK0xFWExJQiAgICA9IEBMRVhMSUJACitESVZJTkNMICAgPSAtSSQoVE9QU1JDKS9pbmNsdWRlCitBTExDRkxBR1MgPSAkKENGTEFHUykgJChERUZTKSAkKExBTkcpICQoWF9DRkxBR1MpICQoRElWSU5DTCkgJChFWFRSQV9ERUZTKQorTERDT01CSU5FID0gbGQgLXIKK1JNICAgICAgICA9IHJtIC1mCitAU0VUX01BS0VACisKK09CSlMgPSAkKENfU1JDUzouYz0ubykgJChBU01fU1JDUzouUz0ubykKKworLmMubzoKKwkkKENDKSAtYyAkKEFMTENGTEFHUykgLW8gJCoubyAkPAorCisuUy5vOgorCSQoQ0MpIC1jIC1vICQqLm8gJDwgIAorCiskKE1PRFVMRSkubzogJChPQkpTKQorCSQoTERDT01CSU5FKSAkKE9CSlMpIC1vICQoTU9EVUxFKS5vCisKK2RlcGVuZDo6ICQoQ19TUkNTKQorCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCisJJChDQykgJChBTExDRkxBR1MpIC1NTSAkKENfU1JDUykgPj4gdG1wX21ha2UKKwltdiB0bXBfbWFrZSBNYWtlZmlsZQorCitjbGVhbjo6CisJJChSTSkgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCisKK2Rpc3RjbGVhbjo6IGNsZWFuCisJJChSTSkgTWFrZWZpbGUKKworbGFuZ2NsZWFuOjoKKworZHVtbXk6CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IGZkNzExOTIuLjU1NTlkZDkgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0zLDc4ICszLDkyIEBACiAjIGFsbCAoZGVmYXVsdCk6CWJ1aWxkIHdpbmUKICMgY2xlYW46CQlyZW1vdmUgYWxsIGludGVybWVkaWF0ZSBmaWxlcwogIyBkaXN0Y2xlYW46CQlhbHNvIHJlbW92ZSBhbGwgZmlsZXMgY3JlYXRlZCBieSBjb25maWd1cmUKLSMgY291bnRyeWNsZWFuOgkJcmVtb3ZlIGFsbCBmaWxlcyB3aGljaCBoYXZlIHRvIGJlIHJlbWFkZSBpZgorIyBsYW5nY2xlYW46CQlyZW1vdmUgYWxsIGZpbGVzIHdoaWNoIGhhdmUgdG8gYmUgcmVtYWRlIGlmCiAjCQkJYSBkaWZmZXJlbnQgTEFOR3VhZ2UgaXMgc2VsZWN0ZWQKICMgZGVwZW5kOgkJY3JlYXRlIHRoZSBkZXBlbmRlbmNpZXMKICMKICMgQXV0aG9yOiBNaWNoYWVsIFBhdHJhICAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CiAjICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRyYUBpdHAxLnBoeXNpay50dS1iZXJsaW4uZGU+CiAKLUNDIAk9IEBDQ0AKLUNGTEFHUyAJPSBAQ0ZMQUdTQAotREVGUyAgICA9IEBERUZTQAotWElOQ0wgCT0gQHhfaW5jbHVkZXNACi1UT1BTUkMgID0gQHRvcF9zcmNkaXJACi1ESVZJTkNMID0gLUkkKFRPUFNSQykvaW5jbHVkZQotWFBNX0xJQgk9IC1sWHBtCi1YTElCCT0gLWxYZXh0IC1sWDExCi1YRElSCT0gLUxAeF9saWJyYXJpZXNACi1MRExJQlMJPSAtbG0KLUxECT0gQExEQAotTEFORwk9IEBMQU5HQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACitDQyAJICA9IEBDQ0AKK0NGTEFHUyAJICA9IEBDRkxBR1NACitERUZTICAgICAgPSBAREVGU0AKK0xBTkcJICA9IEBMQU5HQAorWF9DRkxBR1MgID0gQFhfQ0ZMQUdTQAorWF9MSUJTICAgID0gQFhfTElCU0AKK1RPUFNSQyAgICA9IEB0b3Bfc3JjZGlyQAorRElWSU5DTCAgID0gLUkkKFRPUFNSQykvaW5jbHVkZQorWFBNX0xJQgkgID0gLWxYcG0KK1hMSUIJICA9IEBYX1BSRV9MSUJTQCAtbFhleHQgLWxYMTEgQFhfRVhUUkFfTElCU0AKK0xETElCUwkgID0gLWxtCitBUiAgICAgICAgPSBhciByYworUkFOTElCICAgID0gQFJBTkxJQkAKK1JNICAgICAgICA9IHJtIC1mCiBAU0VUX01BS0VACiAKLUNPTU1PTlNVQkRJUlMgPSBjb250cm9scyByYyBpcGMgbG9hZGVyIG1pc2MgbXVsdGltZWRpYSBvYmplY3RzIHdpbmRvd3MKK01BSU5fVEFSR0VUID0gQE1BSU5fVEFSR0VUQAogCi1FTVVTVUJESVJTID0gdG9vbHMgZGVidWdnZXIgaWYxNjMyIG1lbW9yeSBtaXNjZW11CitDT01NT05TVUJESVJTID0gcmMgY29udHJvbHMgaXBjIGxvYWRlciBtaXNjIG11bHRpbWVkaWEgb2JqZWN0cyB3aW5kb3dzCisKK0VNVVNVQkRJUlMgPSB0b29scyBkZWJ1Z2dlciBkZWJ1Z2dlci9yZWFkbGluZSBpZjE2MzIgbWVtb3J5IG1pc2NlbXUKIAogTElCU1VCRElSUyA9IHRvb2xraXQKICAKLUNPTU1PTk9CSlMgPSBjb250cm9scy9jb250cm9scy5vIGlwYy9pcGMubyBsb2FkZXIvbG9hZGVyLm8gbWlzYy9taXNjLm8gXAotCW11bHRpbWVkaWEvbXVsdGltZWRpYS5vIG9iamVjdHMvb2JqZWN0cy5vIHJjL3JjLm8gXAorQUxMU1VCRElSUyA9ICQoQ09NTU9OU1VCRElSUykgJChFTVVTVUJESVJTKSAkKExJQlNVQkRJUlMpCisKK0NPTU1PTk9CSlMgPSBcCisJY29udHJvbHMvY29udHJvbHMubyBcCisJaXBjL2lwYy5vIFwKKwlsb2FkZXIvbG9hZGVyLm8gXAorCW1pc2MvbWlzYy5vIFwKKwltdWx0aW1lZGlhL211bHRpbWVkaWEubyBcCisJb2JqZWN0cy9vYmplY3RzLm8gXAorCXJjL3JjLm8gXAogCXdpbmRvd3Mvd2luZG93cy5vCiAKLUVNVU9CSlMgPSBkZWJ1Z2dlci9kZWJ1Z2dlci5vIGlmMTYzMi9pZjE2MzIubyBtZW1vcnkvbWVtb3J5Lm8gbWlzY2VtdS9taXNjZW11Lm8KK0VNVU9CSlMgPSBcCisJZGVidWdnZXIvZGVidWdnZXIubyBcCisJZGVidWdnZXIvcmVhZGxpbmUvcmVhZGxpbmUubyBcCisJaWYxNjMyL2lmMTYzMi5vIFwKKwltZW1vcnkvbWVtb3J5Lm8gXAorCW1pc2NlbXUvbWlzY2VtdS5vCiAKIExJQk9CSlMgPSB0b29sa2l0L3Rvb2xraXQubwotIAotCi1TVUJESVJTID0gJChDT01NT05TVUJESVJTKSAkKEVNVVNVQkRJUlMpCi0KLU9CSlMgPSAkKENPTU1PTk9CSlMpICQoRU1VT0JKUykKIAogCi1hbGw6IHdpbmUgd2luZS5zeW0KK2FsbDogJChNQUlOX1RBUkdFVCkKIAotd2luZS5zeW06IHdpbmUKK3dpbmU6ICQoQ09NTU9OU1VCRElSUykgJChFTVVTVUJESVJTKSBkdW1teQorCSQoQ0MpIC1vIHdpbmUgJChDT01NT05PQkpTKSAkKEVNVU9CSlMpICQoTERPUFRJT05TKSAkKFhfTElCUykgJChYUE1fTElCKSAkKFhMSUIpICQoTERMSUJTKQogCW5tIHdpbmUgfCBncmVwIC12IF9jb21waWxlZCB8IHNvcnQgPndpbmUuc3ltCiAKLXdpbmU6ICQoU1VCRElSUykgZHVtbXkKLQkkKENDKSAtbyB3aW5lICQoT0JKUykgJChMRE9QVElPTlMpICQoWERJUikgJChYUE1fTElCKSAkKFhMSUIpICQoTERMSUJTKQord2luZWxpYi5hOiAkKENPTU1PTlNVQkRJUlMpICQoTElCU1VCRElSUykgZHVtbXkKKwkkKFJNKSAkQAorCSQoQVIpICRAICQoQ09NTU9OT0JKUykgJChMSUJPQkpTKQorCSQoUkFOTElCKSAkQAogCi0kKFNVQkRJUlMpOiBkdW1teQotCUBjZCAkQDsgJChNQUtFKSAnQ0M9JChDQyknICdDRkxBR1M9JChDRkxBR1MpJyAnREVGUz0kKERFRlMpJyAnTEQ9JChMRCknICdMRENPTUJJTkVGTEFHUz0kKExEQ09NQklORUZMQUdTKScgJ0xBTkc9JChMQU5HKScKKyQoQUxMU1VCRElSUyk6IGR1bW15CisJQGNkICRAOyAkKE1BS0UpICdDQz0kKENDKScgJ0NGTEFHUz0kKENGTEFHUyknICdERUZTPSQoREVGUyknICdMQU5HPSQoTEFORyknCiAKIGRlcGVuZDoKLQlmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRlcGVuZCk7IGRvbmUKKwlmb3IgaSBpbiAkKEFMTFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRlcGVuZCk7IGRvbmUKIAogZXRhZ3M6CiAJZXRhZ3MgYGZpbmQgLiAtbmFtZSAnKi5bY2hTXScgLXByaW50YAogCiBjbGVhbjoKLQlmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGNsZWFuKTsgZG9uZQotCXJtIC1mICoubyBcIypcIyAqfiAqLmJhayB3aW5lIHdpbmUuc3ltIFRBR1MKKwlmb3IgaSBpbiAkKEFMTFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGNsZWFuKTsgZG9uZQorCSQoUk0pICoubyBcIypcIyAqfiAqLmJhayB3aW5lIHdpbmUuc3ltIHdpbmVsaWIuYSBUQUdTCiAKIGRpc3RjbGVhbjoKLQlmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRpc3RjbGVhbik7IGRvbmUKKwlmb3IgaSBpbiAkKEFMTFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRpc3RjbGVhbik7IGRvbmUKIAllY2hvICIvKiBhdXRvY29uZi5oIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LiAgUnVuIENvbmZpZ3VyZSAqLyIgPmF1dG9jb25mLmgKIAllY2hvICIjZXJyb3IgWW91IG11c3QgcnVuIENvbmZpZ3VyZSBiZWZvcmUgeW91IGNhbiBidWlsZCB0aGUgbWFrZWZpbGVzLiIgPj5hdXRvY29uZi5oCi0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHdpbmUgd2luZS5zeW0gVEFHUwotCXJtIC1mIGNvbmZpZy4qIGluY2x1ZGUvY29uZmlnLmggTWFrZWZpbGUKKwkkKFJNKSAqLm8gXCMqXCMgKn4gKi5iYWsgd2luZSB3aW5lLnN5bSB3aW5lbGliLmEgVEFHUworCSQoUk0pIGNvbmZpZy4qIGluY2x1ZGUvY29uZmlnLmggTWFrZS5ydWxlcyBNYWtlZmlsZQogCi1jb3VudHJ5Y2xlYW46Ci0JZm9yIGkgaW4gJChTVUJESVJTKTsgZG8gKGNkICQkaTsgJChNQUtFKSBjb3VudHJ5Y2xlYW4pOyBkb25lCi0Jcm0gLWYgd2luZSB3aW5lLnN5bQorbGFuZ2NsZWFuOgorCWZvciBpIGluICQoQUxMU1VCRElSUyk7IGRvIChjZCAkJGk7ICQoTUFLRSkgbGFuZ2NsZWFuKTsgZG9uZQorCSQoUk0pIHdpbmUgd2luZS5zeW0gd2luZWxpYi5hCiAJCiBkdW1teToKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBmOWNhMDE5Li42ZGM2ZDY0IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yMSw5ICsyMSw5IEBACiBpdCBhcmUgcHJvYmFibHkgYXZhaWxhYmxlIG9uIHRoZSBmdHAgc2l0ZSB3aGVyZSB5b3UgZ290IFdpbmUuIFRoZXkgY2FuCiBhbHNvIGJlIGZvdW5kIG9uIGZ0cC54Lm9yZyBhbmQgYWxsIGl0cyBtaXJyb3Igc2l0ZXMuCiAKLVRvIGJ1aWxkIFdpbmUsIGZpcnN0IGRvIGEgIi4vQ29uZmlndXJlIiBhbmQgdGhlbiBhICJtYWtlIiAob3IgImdtYWtlIgotaWYgeW91J3JlIHJ1bm5pbmcgKkJTRCkuICBUaGUgZXhlY3V0YWJsZSAid2luZSIgd2lsbCBiZSBidWlsdC4gICJ3aW5lIgotd2lsbCBsb2FkIGFuZCBydW4gMTYtYml0IFdpbmRvd3MgZXhlY3V0YWJsZXMuIAorVG8gYnVpbGQgV2luZSwgZmlyc3QgZG8gYSAiLi9jb25maWd1cmUiIGFuZCB0aGVuIGEgIm1ha2UgZGVwZW5kOyBtYWtlIi4KKyBUaGUgZXhlY3V0YWJsZSAid2luZSIgd2lsbCBiZSBidWlsdC4gICJ3aW5lIiB3aWxsIGxvYWQgYW5kIHJ1biAxNi1iaXQKK1dpbmRvd3MgZXhlY3V0YWJsZXMuCiAKIFRvIHVwZ3JhZGUgdG8gYSBuZXcgcmVsZWFzZSBieSB1c2luZyBhIHBhdGNoIGZpbGUsIGZpcnN0IGNkIHRvIHRoZQogdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgcmVsZWFzZSAodGhlIG9uZSBjb250YWluaW5nIHRoaXMgUkVBRE1FCkBAIC0zMiw4ICszMiw4IEBACiAgICAgZ3VuemlwIC1jIHBhdGNoLWZpbGUgfCBwYXRjaCAtcDEKIAogd2hlcmUgInBhdGNoLWZpbGUiIGlzIHRoZSBuYW1lIG9mIHRoZSBwYXRjaCBmaWxlIChzb21ldGhpbmcgbGlrZQotV2luZS15eW1tZGQuZGlmZi5neikuIFlvdSBjYW4gdGhlbiByZS1ydW4gIi4vQ29uZmlndXJlIiwgYW5kIHRoZW4KLXJ1biAibWFrZSIuIAorV2luZS15eW1tZGQuZGlmZi5neikuIFlvdSBjYW4gdGhlbiByZS1ydW4gIi4vY29uZmlndXJlIiwgYW5kIHRoZW4KK3J1biAibWFrZSBkZXBlbmQ7IG1ha2UiLgogCiAKIDMuIFNFVFVQCkBAIC0xNDcsOSArMTQ3LDEwIEBACiBjb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmUuIFRoZSBXaW5lIEZBUSBpcyBwb3N0ZWQgdGhlcmUgZXZlcnkKIG1vbnRoLgogCi1JZiB5b3UgYWRkIHNvbWV0aGluZywgb3IgZml4IGEgYnVnLCBwbGVhc2Ugc2VuZCBhIHBhdGNoIHRvCi13aW5lLW5ld0BhbXNjb25zLmNvbSBmb3IgaW5jbHVzaW9uIGluIHRoZSBuZXh0IHJlbGVhc2UuCitJZiB5b3UgYWRkIHNvbWV0aGluZywgb3IgZml4IGEgYnVnLCBwbGVhc2Ugc2VuZCBhIHBhdGNoICgnZGlmZiAtdScKK2Zvcm1hdCBwcmVmZXJyZWQpIHRvIHdpbmUtbmV3QGFtc2NvbnMuY29tIGZvciBpbmNsdXNpb24gaW4gdGhlIG5leHQKK3JlbGVhc2UuCiAKIC0tCiBBbGV4YW5kcmUgSnVsbGlhcmQKLWp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaAoranVsbGlhcmRAbHJjLmVwZmwuY2gKZGlmZiAtLWdpdCBhL1dpbmUubWFuIGIvV2luZS5tYW4KaW5kZXggZTM5YmJmZC4uYWViMTQ2MyAxMDA2NDQKLS0tIGEvV2luZS5tYW4KKysrIGIvV2luZS5tYW4KQEAgLTEsNSArMSw1IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlRIIFdJTkUgMSAiSnVuZSAyOSwgMTk5NSIgIlZlcnNpb24gNi8yMC85NSIgIldpbmRvd3MgRW11bGF0aW9uIgorLlRIIFdJTkUgMSAiU2VwdGVtYmVyIDEsIDE5OTUiICJWZXJzaW9uIDkvMS85NSIgIldpbmRvd3MgRW11bGF0aW9uIgogLlNIIE5BTUUKIHdpbmUgXC0gcnVuIFdpbmRvd3MgMy54IHByb2dyYW1zIHVuZGVyIExpbnV4CiAuU0ggU1lOT1BTSVMKQEAgLTIzLDcgKzIzLDcgQEAKIFNlZSB0aGUgZmlsZXMgCiAuQiBSRUFETUUsCiAuQiBDaGFuZ2VMb2csIAotLkIgQ29uZmlndXJlLCAKKy5CIGNvbmZpZ3VyZSwgCiBhbmQgdGhlCiAuQiBNYWtlZmlsZQogY29udGFpbmVkIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uCkBAIC00NSw4ICs0NSwxMSBAQAogLlNIIElOU1RBTExBVElPTgogVG8gaW5zdGFsbCAKIC5CIHdpbmUsCi1ydW4gIi4vQ29uZmlndXJlIiwgd2hpY2ggd2lsbCBhc2sgZm9yIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kCi1jcmVhdGUgdGhlIE1ha2VmaWxlcywgdGhlbiBydW4gIm1ha2UiLgorcnVuICIuL2NvbmZpZ3VyZSIsIHdoaWNoIHdpbGwgZGV0ZWN0IHlvdXIgc3BlY2lmaWMgc2V0dXAgYW5kIGNyZWF0ZQordGhlIE1ha2VmaWxlcy4gWW91IGNhbiBydW4gIi4vY29uZmlndXJlIC0taGVscCIgdG8gc2VlIHRoZSBhdmFpbGFibGUKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlbiBkbyAibWFrZSBkZXBlbmQ7IG1ha2UiIHRvIGJ1aWxkIHRoZQorLkIgd2luZQorZXhlY3V0YWJsZS4KIC5TSCBPUFRJT05TCiAuVFAKIC5JIC1kZXB0aCBuCkBAIC0xMjIsNyArMTI1LDcgQEAKIGV4cGVjdHMgYSBjb25maWd1cmF0aW9uIGZpbGUgKC91c3IvbG9jYWwvZXRjL3dpbmUuY29uZiksIAogd2hpY2ggc2hvdWxkIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBydWxlcy4gIFRoZSBhY3R1YWwgZmlsZSBuYW1lIG1heQogYmUgc3BlY2lmaWVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZQotLkIgQ29uZmlndXJlCisuQiBjb25maWd1cmUKIHNjcmlwdC4gIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgaGF2ZSBhIAogLkkgLndpbmVyYwogZmlsZSBvZiB0aGlzIGZvcm1hdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LgpAQCAtMjU5LDI4ICsyNjIsMjYgQEAKIGlzIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlIHdvcmsgb2YgQm9iIEFtc3RhZHQsIERhZyBBc2hlaW0sCiBNYXJ0aW4gQXlvdHRlLCBSb3NzIEJpcm8sIEVyaWsgQm9zLCBGb25zIEJvdG1hbiwgSm9obiBCcmV6YWssCiBBbmRyZXcgQnVsaGFrLCBKb2huIEJ1cnRvbiwgUGF1bCBGYWxzdGFkLCBPbGFmIEZsZWJiZSwgUGV0ZXIgR2FsYmF2eSwKLUNhbWVyb24gSGVpZGUsIEplZmZyZXkgSHN1LCBNaWd1ZWwgZGUgSWNhemEsIEFsZXhhbmRyZSBKdWxsaWFyZCwKK1JhbW9uIEdhcmNpYSwgSGFucyBkZSBHcmFhZiwgQ2hhcmxlcyBNLiBIYW5udW0sIENhbWVyb24gSGVpZGUsCitKb2NoZW4gSG9lbmlja2UsIEplZmZyZXkgSHN1LCBNaWd1ZWwgZGUgSWNhemEsIEFsZXhhbmRyZSBKdWxsaWFyZCwKIEpvbiBLb25yYXRoLCBTY290dCBBLiBMYWlyZCwgTWFydGluIHZvbiBMb2V3aXMsIEtlbm5ldGggTWFjRG9uYWxkLAotUGV0ZXIgTWFjRG9uYWxkLCBXaWxsaWFtIE1hZ3JvLCBEYXZpZCBNZXRjYWxmZSwgTWljaGFlbCBQYXRyYSwKLUpvaG4gUmljaGFyZHNvbiwgSm9oYW5uZXMgUnVzY2hlaW5za2ksIFRob21hcyBTYW5kZm9yZCwKLUNvbnN0YW50aW5lIFNhcHVudHpha2lzLCBCZXJuZCBTY2htaWR0LCBZbmd2aSBTaWd1cmpvbnNzb24sIFJpY2sgU2xhZGtleSwKLVdpbGxpYW0gU21pdGgsIEVyaWsgU3ZlbmRzZW4sIEdvcmFuIFRoeW5pLCBKaW1teSBUaXJ0YXdhbmdzYSwgSm9uIFRvbWJzLAotTGludXMgVG9ydmFsZHMsIE1pY2hhZWwgVmVrc2xlciwgQ2FybCBXaWxsaWFtcywgS2FybCBHdWVudGVyIFd1ZW5zY2gsCi1FcmljIFlvdW5nZGFsZSwgYW5kIEphbWVzIFlvdW5nbWFuLgorUGV0ZXIgTWFjRG9uYWxkLCBXaWxsaWFtIE1hZ3JvLCBNYXJjdXMgTWVpc3NuZXIsIEdyYWhhbSBNZW5oZW5uaXR0LAorRGF2aWQgTWV0Y2FsZmUsIE1pY2hhZWwgUGF0cmEsIEpvaG4gUmljaGFyZHNvbiwgSm9oYW5uZXMgUnVzY2hlaW5za2ksCitUaG9tYXMgU2FuZGZvcmQsIENvbnN0YW50aW5lIFNhcHVudHpha2lzLCBEYW5pZWwgU2NoZXBsZXIsCitCZXJuZCBTY2htaWR0LCBZbmd2aSBTaWd1cmpvbnNzb24sIFJpY2sgU2xhZGtleSwgV2lsbGlhbSBTbWl0aCwKK0VyaWsgU3ZlbmRzZW4sIEdvcmFuIFRoeW5pLCBKaW1teSBUaXJ0YXdhbmdzYSwgSm9uIFRvbWJzLAorTGludXMgVG9ydmFsZHMsIEdyZWdvcnkgVHJ1YmV0c2tveSwgTWljaGFlbCBWZWtzbGVyLCBNb3J0ZW4gV2VsaW5kZXIsCitKYW4gV2lsbGFtb3dpdXMsIENhcmwgV2lsbGlhbXMsIEthcmwgR3VlbnRlciBXdWVuc2NoLCBFcmljIFlvdW5nZGFsZSwKK2FuZCBKYW1lcyBZb3VuZ21hbi4KIC5QUAotVGhpcyBtYW4gcGFnZSBpcyBtYWludGFpbmVkIGJ5IE1pa2UgUGhpbGxpcHMgKG1zcGhpbEBtYWlsLndtLmVkdSksIHNvIHBsZWFzZQotc2VuZCBhbGwgY29ycmVjdGlvbnMsIGNvbW1lbnRzLCBmbGFtZXMsIGV0Yy4sIHRvIGhpbS4KK1RoaXMgbWFuIHBhZ2UgaXMgbWFpbnRhaW5lZCBieSBNaWtlIFBoaWxsaXBzIChtc3BoaWxAZmFjc3RhZmYud20uZWR1KSwgc28gCitwbGVhc2Ugc2VuZCBhbGwgY29ycmVjdGlvbnMsIGNvbW1lbnRzLCBmbGFtZXMsIGV0Yy4sIHRvIGhpbS4KIC5TSCBCVUdTCi1UaGVyZSBhcmUgdG9vIG1hbnkgdG8gY291bnQsIG11Y2ggbGVzcyBsaXN0LiAgU29tZSBhcmUgb2Ygbm90ZSwgaG93ZXZlcjoKLUFueSBXaW5kb3dzIHByb2dyYW0gdXNpbmcgVmlzdWFsIEJhc2ljIChWQlJVTnh4eC5ETEwpIHdpbGwgbm90IHJ1biB5ZXQsCi1ub3Igd2lsbCBhbnkgcHJvZ3JhbSBkZXBlbmRpbmcgb24gdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyBvciBvbiB0aGUKLUNPTU1ETEcgKGFueSBzdGFuZGFyZCBmaWxlIG9wZW4vc2F2ZSBpbnRlcmZhY2UpIHVubGVzcyB5b3UgZGlzYWJsZSB0aGUgCi1pbnRlcm5hbCBDT01NRExHIHdpdGggdGhlIAotLkkgLWRsbCAtY29tbWRsZwotb3B0aW9uLiAgSW4gYWRkaXRpb24sIDE2LWNvbG9yIHN1cHBvcnQgaXMgaW1wZXJmZWN0IGF0IGJlc3QsIGFuZCAKLWljb25zIHNvbWV0aW1lcyBkaXNwbGF5IGltcHJvcGVybHkgb24gc29tZSBzeXN0ZW1zLiAgQ2VydGFpbiAKLW11bHRpLWxhbmd1YWdlIG1vZHVsZXMgd2lsbCBub3QgbG9hZCBwcm9wZXJseS4gIFByb2dyZXNzIGlzIGJlaW5nIG1hZGUgCi1yZWd1bGFybHksIGhvd2V2ZXIuCitUaGVyZSBhcmUgdG9vIG1hbnkgdG8gY291bnQsIG11Y2ggbGVzcyBsaXN0LiAgU29tZSBidWdzIG9mIG5vdGUsIGhvd2V2ZXIsCithcmUgdGhhdCBwcm9ncmFtcyByZXF1aXJpbmcgVkJSVU54eHguRExMIGFyZSB1bnJlbGlhYmxlICh3aXRoIHJlcG9ydHMgb2YKK3NvbWUgd29ya2luZyksIE9MRSBpcyBub3QgaW4gcGxhY2UsIHRoZSBpbnRlcm5hbCBDT01NRExHIHN1cHBvcnQgaXMgbm90IHlldAorYXQgMTAwJSAoYWx0aG91Z2ggcmFwaWRseSBpbXByb3ZpbmcpLiAgQ29sb3Igc3VwcG9ydCBmb3Igb3RoZXIgdGhhbiA4YnBwCisoMjU2IGNvbG9ycykgaXMgY3VycmVudGx5IGZsYWt5LgogLlBQCiBDdXJyZW50bHksIG5vIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIGNhbiBoYXZlIHVwcGVyLWNhc2UgbGV0dGVycyBpbiB0aGVtCiAoZXguIC9tc2Rvcy9kcml2ZUMpLCBhcyB0aGUgY29udmVyc2lvbnMgbmVjZXNzYXJ5IHRvIGhhbmRsZSB0aGUgbXNkb3MgCkBAIC0yODgsNyArMjg5LDcgQEAKIC5QUAogQSBwYXJ0aWFsIGxpc3Qgb2YgYXBwbGljYXRpb25zIGtub3duIHRvIHdvcmsgd2l0aCAKIC5CIHdpbmUKLWluY2x1ZGU6IHNvbCwgY3J1ZWwsIGdvbGYuZXhlLCBjbG9jaywgbm90ZXBhZCwgY2hhcm1hcCwgYW5kIGNhbGMuCitpbmNsdWRlOiBzb2wsIGNydWVsLCBnb2xmLCBjbG9jaywgbm90ZXBhZCwgY2hhcm1hcCwgY2FsYywgYW5kIHd6aXAxMS4KIFRoZSBmb2xsb3dpbmcgVVJMcyBwb2ludCB0byBkaWZmZXJlbnQgc3VjY2Vzcy90ZXN0aW5nIGxpc3RzOgogLmJyCiAuSSBodHRwOi8vd3d3LmlmaS51aW8ubm8vfmRhc2gvd2luZS93b3JraW5nLWFwcHMuaHRtbApAQCAtMzE3LDEyICszMTgsOSBAQAogLkkgQ2hhbmdlTG9nCiBDaGFuZ2VzIGluIFdpbmUsIHNpbmNlIHRoZSBiZWdpbm5pbmcgKG1vc3QgcmVjZW50IGNoYW5nZXMgZmlyc3QpCiAuVFAKLS5JIENvbmZpZ3VyZQotU2hlbGwgc2NyaXB0IHRvIGF1dG9tYXRlIGNvbXBpbGF0aW9uLiAgVXN1YWxseSBmb2xsb3dlZCBieSBtYWtlIChvciBnbWFrZSAKLW9uICpCU0Qgc3lzdGVtcykgdG8gY29tcGlsZSB3aW5lOyBpdCBjYW4gZXZlbiBidWlsZCBhIHNhbXBsZSAKLS5CIHdpbmUuY29uZgotZmlsZQotCisuSSBjb25maWd1cmUKK1NoZWxsIHNjcmlwdCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIE1ha2VmaWxlcy4gIFVzdWFsbHkgZm9sbG93ZWQgYnkgbWFrZSAKKyhvciBnbWFrZSBvbiAqQlNEIHN5c3RlbXMpIHRvIGNvbXBpbGUgd2luZS4KIC5UUAogLkkgV2luZSBuZXdzZ3JvdXAKIFN1YnNjcmliZSB0byBjb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCAzYjhkN2RhLi5lMzc2MGM4IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xMyw3ICsxMyw5IEBACiBhY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCiAjIEFueSBhZGRpdGlvbnMgZnJvbSBjb25maWd1cmUuaW46CiBhY19oZWxwPSIkYWNfaGVscAotICAtLXdpdGgtbGFuZ3VhZ2U9TEFORyAgICBjaGFuZ2UgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgKExBTkc9RW4vRGUvTm8pIgorICAtLXdpdGgtbGlicmFyeSAgICAgICAgICBidWlsZCBXaW5lIGFzIGEgbGlicmFyeSBpbnN0ZWFkIG9mIGFuIGVtdWxhdG9yIgorYWNfaGVscD0iJGFjX2hlbHAKKyAgLS13aXRoLWxhbmd1YWdlPUxBTkcgICAgY2hhbmdlIHRoZSBkZWZhdWx0IGxhbmd1YWdlIChMQU5HPUVuL0RlL05vL0VzKSIKIGFjX2hlbHA9IiRhY19oZWxwCiAgIC0td2l0aC1pcGMgICAgICAgICAgICAgIHVzZSBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gZm9yIERERSIKIGFjX2hlbHA9IiRhY19oZWxwCkBAIC00MTIsNiArNDE0LDIwIEBACiB0ZXN0IC16ICIkQ0ZMQUdTIiAmJiBDRkxBR1M9Ii1nIC1PMiAtV2FsbCIgCiB0ZXN0IC16ICIkTERGTEFHUyIgJiYgTERGTEFHUz0tZyAKIAorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnJhcnkgb3IgLS13aXRob3V0LWxpYnJhcnkgd2FzIGdpdmVuLgord2l0aHZhbD0iJHdpdGhfbGlicmFyeSIKK2lmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbgorICBjYXQgPj4gY29uZmRlZnMuaCA8PFxFT0YKKyNkZWZpbmUgV0lORUxJQiAxCitFT0YKKyBNQUlOX1RBUkdFVD0id2luZWxpYi5hIgorZWxzZQorICBNQUlOX1RBUkdFVD0id2luZSIKK2ZpCisKKworCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxhbmd1YWdlIG9yIC0td2l0aG91dC1sYW5ndWFnZSB3YXMgZ2l2ZW4uCiB3aXRodmFsPSIkd2l0aF9sYW5ndWFnZSIKIGlmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbgpAQCAtNDIxLDYgKzQzNyw3IEBACiBmaQogCiAKKwogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pcGMgb3IgLS13aXRob3V0LWlwYyB3YXMgZ2l2ZW4uCiB3aXRodmFsPSIkd2l0aF9pcGMiCiBpZiB0ZXN0IC1uICIkd2l0aHZhbCI7IHRoZW4KQEAgLTQzMCw2ICs0NDcsNyBAQAogCiBmaQogCisKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWFsbG9jLWRlYnVnIG9yIC0td2l0aG91dC1tYWxsb2MtZGVidWcgd2FzIGdpdmVuLgogd2l0aHZhbD0iJHdpdGhfbWFsbG9jX2RlYnVnIgogaWYgdGVzdCAtbiAiJHdpdGh2YWwiOyB0aGVuCkBAIC00NDAsNiArNDU4LDcgQEAKIGZpCiAKIAorCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwke01BS0V9IiIuLi4gJGFjX2MiIDE+JjYKIHNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9JDIKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgpAQCAtNTU0LDcgKzU3Myw3IEBACiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDU1OCAiY29uZmlndXJlIgorI2xpbmUgNTc3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KIFN5bnRheCBFcnJvcgpAQCAtNTY4LDcgKzU4Nyw3IEBACiAgIHJtIC1yZiBjb25mdGVzdCoKICAgQ1BQPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA1NzIgImNvbmZpZ3VyZSIKKyNsaW5lIDU5MSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiBTeW50YXggRXJyb3IKQEAgLTU5Myw2ICs2MTIsMjYgQEAKIGZpCiBlY2hvICIkYWNfdCIiJENQUCIgMT4mNgogCitlY2hvICRhY19uICJjaGVja2luZyBmb3IgUE9TSVhpemVkIElTQyIiLi4uICRhY19jIiAxPiY2CitpZiB0ZXN0IC1kIC9ldGMvY29uZi9rY29uZmlnLmQgJiYKKyAgZ3JlcCBfUE9TSVhfVkVSU0lPTiAvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oID4vZGV2L251bGwgMj4mMQordGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIElTQz15ZXMgIyBJZiBsYXRlciB0ZXN0cyB3YW50IHRvIGNoZWNrIGZvciBJU0MuCisgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBfUE9TSVhfU09VUkNFIDEKK0VPRgorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtcG9zaXgiCisgIGVsc2UKKyAgICBDQz0iJENDIC1YcCIKKyAgZmkKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CisgIElTQz0KK2ZpCisKICMgSWYgd2UgZmluZCBYLCBzZXQgc2hlbGwgdmFycyB4X2luY2x1ZGVzIGFuZCB4X2xpYnJhcmllcyB0byB0aGUKICMgcGF0aHMsIG90aGVyd2lzZSBzZXQgbm9feD15ZXMuCiAjIFVzZXMgYWNfIHZhcnMgYXMgdGVtcHMgdG8gYWxsb3cgY29tbWFuZCBsaW5lIHRvIG92ZXJyaWRlIGNhY2hlIGFuZCBjaGVja3MuCkBAIC02NTQsNyArNjkzLDcgQEAKIHRlc3QgLXogIiR4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uIiAmJiB4X2RpcmVjdF90ZXN0X2Z1bmN0aW9uPVh0TWFsbG9jCiB0ZXN0IC16ICIkeF9kaXJlY3RfdGVzdF9pbmNsdWRlIiAmJiB4X2RpcmVjdF90ZXN0X2luY2x1ZGU9WDExL0ludHJpbnNpYy5oCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSA2NTggImNvbmZpZ3VyZSIKKyNsaW5lIDY5NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8JHhfZGlyZWN0X3Rlc3RfaW5jbHVkZT4KIEVPRgpAQCAtNzE3LDcgKzc1Niw3IEBACiBhY19zYXZlX0xJQlM9IiRMSUJTIgogTElCUz0iLWwkeF9kaXJlY3RfdGVzdF9saWJyYXJ5ICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgNzIxICJjb25maWd1cmUiCisjbGluZSA3NjAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KQEAgLTc5OSw2ICs4MzgsMjI2IEBACiAgIGVjaG8gIiRhY190IiJsaWJyYXJpZXMgJHhfbGlicmFyaWVzLCBoZWFkZXJzICR4X2luY2x1ZGVzIiAxPiY2CiBmaQogCitpZiB0ZXN0ICIkbm9feCIgPSB5ZXM7IHRoZW4gCisgICMgTm90IGFsbCBwcm9ncmFtcyBtYXkgdXNlIHRoaXMgc3ltYm9sLCBidXQgaXQgZG9lcyBub3QgaHVydCB0byBkZWZpbmUgaXQuCisgIFhfQ0ZMQUdTPSIkWF9DRkxBR1MgLURYX0RJU1BMQVlfTUlTU0lORyIKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJHhfaW5jbHVkZXMiOyB0aGVuCisgICAgWF9DRkxBR1M9IiRYX0NGTEFHUyAtSSR4X2luY2x1ZGVzIgorICBmaQorCisgICMgSXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgbW9yZSByb2J1c3QgY2hlY2sgZm9yIHRoZSAtUiBsZCBvcHRpb24gdGhhbgorICAjIGp1c3QgY2hlY2tpbmcgZm9yIFNvbGFyaXMuCisgICMgSXQgd291bGQgYWxzbyBiZSBuaWNlIHRvIGRvIHRoaXMgZm9yIGFsbCAtTCBvcHRpb25zLCBub3QganVzdCB0aGlzIG9uZS4KKyAgaWYgdGVzdCAtbiAiJHhfbGlicmFyaWVzIjsgdGhlbgorICAgIFhfTElCUz0iJFhfTElCUyAtTCR4X2xpYnJhcmllcyIKKyAgICBpZiB0ZXN0ICJgKHVuYW1lKSAyPi9kZXYvbnVsbGAiID0gU3VuT1MgJiYKKyAgICAgIHVuYW1lIC1yIHwgZ3JlcCAnXjUnID4vZGV2L251bGw7IHRoZW4KKyAgICAgIFhfTElCUz0iJFhfTElCUyAtUiR4X2xpYnJhcmllcyIKKyAgICBmaQorICBmaQorCisgICMgQ2hlY2sgZm9yIGxpYnJhcmllcyB0aGF0IFgxMVI2IFh0L1hhdyBwcm9ncmFtcyBuZWVkLgorCisgIGFjX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisgIExERkxBR1M9IiRMREZMQUdTIC1MJHhfbGlicmFyaWVzIgorICAjIFNNIG5lZWRzIElDRSB0byAoZHluYW1pY2FsbHkpIGxpbmsgdW5kZXIgU3VuT1MgNC54IChzbyB3ZSBoYXZlIHRvCisgICMgY2hlY2sgZm9yIElDRSBmaXJzdCksIGJ1dCB3ZSBtdXN0IGxpbmsgaW4gdGhlIG9yZGVyIC1sU00gLWxJQ0Ugb3IKKyAgIyB3ZSBnZXQgdW5kZWZpbmVkIHN5bWJvbHMuICBTbyBhc3N1bWUgd2UgaGF2ZSBTTSBpZiB3ZSBoYXZlIElDRS4KKyAgIyBUaGVzZSBoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIGJlZm9yZSAtbFgxMSwgdW5saWtlIHRoZSBvdGhlcgorICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KKyAgIyAgLS1pbnRlcnJhbkB1bHVydS5TdGFuZm9yZC5FRFUsIGtiQGNzLnVtYi5lZHUuCisgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAtbElDRSIiLi4uICRhY19jIiAxPiY2CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliX0lDRScrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbElDRSAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA4NzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK2ludCB0KCkgeworSWNlQ29ubmVjdGlvbk51bWJlcigpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIGV2YWwgJGFjX2xpbms7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfSUNFPXllcyIKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfSUNFPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nSUNFYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfUFJFX0xJQlM9IiRYX1BSRV9MSUJTIC1sU00gLWxJQ0UiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICBMREZMQUdTPSIkYWNfc2F2ZV9MREZMQUdTIgorCisgICMgQ2hlY2sgZm9yIHN5c3RlbS1kZXBlbmRlbnQgbGlicmFyaWVzIFggcHJvZ3JhbXMgbXVzdCBsaW5rIHdpdGguCisKKyAgaWYgdGVzdCAiJElTQyIgPSB5ZXM7IHRoZW4KKyAgICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxuc2xfcyAtbGluZXQiCisgIGVsc2UKKyAgICAjIE1hcnR5bi5Kb2huc29uQGNsLmNhbS5hYy51ayBzYXlzIHRoaXMgaXMgbmVlZGVkIGZvciBVbHRyaXgsIGlmIHRoZSBYCisgICAgIyBsaWJyYXJpZXMgd2VyZSBidWlsdCB3aXRoIERFQ25ldCBzdXBwb3J0LiAgQW5kIGthcmxAY3MudW1iLmVkdSBzYXlzCisgICAgIyB0aGUgQWxwaGEgbmVlZHMgZG5ldF9zdHViIChkbmV0IGRvZXMgbm90IGV4aXN0KS4KKyAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgLWxkbmV0IiIuLi4gJGFjX2MiIDE+JjYKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfZG5ldCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRuZXQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgOTIxICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitpbnQgdCgpIHsKK2RuZXRfbnRvYSgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIGV2YWwgJGFjX2xpbms7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfZG5ldD15ZXMiCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliX2RuZXQ9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXydkbmV0YFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGRuZXQiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGlmIHRlc3QgJGFjX2N2X2xpYl9kbmV0ID0gbm87IHRoZW4KKyAgICAgIGVjaG8gJGFjX24gImNoZWNraW5nIGZvciAtbGRuZXRfc3R1YiIiLi4uICRhY19jIiAxPiY2CitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfbGliX2RuZXRfc3R1Yicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGFjX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSItbGRuZXRfc3R1YiAgJExJQlMiCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjbGluZSA5NTUgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK2ludCB0KCkgeworZG5ldF9udG9hKCkKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgZXZhbCAkYWNfbGluazsgdGhlbgorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl9kbmV0X3N0dWI9eWVzIgorZWxzZQorICBybSAtcmYgY29uZnRlc3QqCisgIGV2YWwgImFjX2N2X2xpYl9kbmV0X3N0dWI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitMSUJTPSIkYWNfc2F2ZV9MSUJTIgorCitmaQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfbGliXydkbmV0X3N0dWJgXCIgPSB5ZXMiOyB0aGVuCisgIGVjaG8gIiRhY190IiJ5ZXMiIDE+JjYKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldF9zdHViIgorZWxzZQorICBlY2hvICIkYWNfdCIibm8iIDE+JjYKK2ZpCisKKyAgICBmaQorCisgICAgIyBtc2hAY2lzLnVmbC5lZHUgc2F5cyAtbG5zbCAoYW5kIC1sc29ja2V0KSBhcmUgbmVlZGVkIGZvciBoaXMgMzg2L0FULAorICAgICMgdG8gZ2V0IHRoZSBTeXNWIHRyYW5zcG9ydCBmdW5jdGlvbnMuCisgICAgIyBOb3Qgc3VyZSB3aGljaCBmbGF2b3Igb2YgMzg2IFVOSVggdGhpcyBpcywgYnV0IGl0IHNlZW1zIGhhcm1sZXNzIHRvCisgICAgIyBjaGVjayBmb3IgaXQuCisgICAgZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIC1sbnNsIiIuLi4gJGFjX2MiIDE+JjYKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9saWJfbnNsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9Ii1sbnNsICAkTElCUyIKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDk5NCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQoraW50IHQoKSB7Cit0X2FjY2VwdCgpCis7IHJldHVybiAwOyB9CitFT0YKK2lmIGV2YWwgJGFjX2xpbms7IHRoZW4KKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfbnNsPXllcyIKK2Vsc2UKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICBldmFsICJhY19jdl9saWJfbnNsPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorTElCUz0iJGFjX3NhdmVfTElCUyIKKworZmkKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X2xpYl8nbnNsYFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYWNfdCIieWVzIiAxPiY2CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbG5zbCIKK2Vsc2UKKyAgZWNobyAiJGFjX3QiIm5vIiAxPiY2CitmaQorCisKKyAgICAjIGxpZWRlckBza3lsZXIubWF2ZC5ob25leXdlbGwuY29tIHNheXMgd2l0aG91dCAtbHNvY2tldCwKKyAgICAjIHNvY2tldC9zZXRzb2Nrb3B0IGFuZCBvdGhlciByb3V0aW5lcyBhcmUgdW5kZWZpbmVkIHVuZGVyIFNDTyBPRFQgMi4wLgorICAgICMgQnV0IC1sc29ja2V0IGlzIGJyb2tlbiBvbiBJUklYLCBhY2NvcmRpbmcgdG8gc2ltb25AbGlhLmRpLmVwZmwuY2guCisgICAgaWYgdGVzdCAiYCh1bmFtZSkgMj4vZGV2L251bGxgIiAhPSBJUklYOyB0aGVuCisgICAgICBlY2hvICRhY19uICJjaGVja2luZyBmb3IgLWxzb2NrZXQiIi4uLiAkYWNfYyIgMT4mNgoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2xpYl9zb2NrZXQnK3NldH0nYFwiID0gc2V0IjsgdGhlbgorICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgorZWxzZQorICBhY19zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTAzMiAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQoraW50IHQoKSB7Citzb2NrZXQoKQorOyByZXR1cm4gMDsgfQorRU9GCitpZiBldmFsICRhY19saW5rOyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliX3NvY2tldD15ZXMiCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgZXZhbCAiYWNfY3ZfbGliX3NvY2tldD1ubyIKK2ZpCitybSAtZiBjb25mdGVzdCoKK0xJQlM9IiRhY19zYXZlX0xJQlMiCisKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9saWJfJ3NvY2tldGBcIiA9IHllcyI7IHRoZW4KKyAgZWNobyAiJGFjX3QiInllcyIgMT4mNgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxzb2NrZXQiCitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKKworICAgIGZpCisgIGZpCitmaQorCiBmb3IgYWNfcHJvZyBpbiAnYmlzb24gLXknIGJ5YWNjCiBkbwogIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCkBAIC04NzMsNyArMTEzMiw3IEBACiAgIGFjX3NhdmVfTElCUz0iJExJQlMiCiBMSUJTPSItbCRhY19saWIgICRMSUJTIgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgODc3ICJjb25maWd1cmUiCisjbGluZSAxMTM2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogaW50IG1haW4oKSB7IHJldHVybiAwOyB9CkBAIC05MDEsMjAgKzExNjAsMzMgQEAKIAogZmkKIAotaWYgdGVzdCAtbiAiJHhfaW5jbHVkZXMiIDsgdGhlbgotICB4X2luY2x1ZGVzPSItSSR4X2luY2x1ZGVzIgorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY193b3JkIiIuLi4gJGFjX2MiIDE+JjYKK2lmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9wcm9nX1JBTkxJQicrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgYWNfY3ZfcHJvZ19SQU5MSUI9InJhbmxpYiIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIiAmJiBhY19jdl9wcm9nX1JBTkxJQj0iOiIKIGZpCi1pZiB0ZXN0IC1uICIkeF9ubyIgOyB0aGVuCi0gIEFYRklMRVM9J0FYRklMRVM9JwogZmkKLQotCi0KLQotCi1MRD1sZAotTERDT01CSU5FRkxBR1M9Ii1yIgotCitSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGVjaG8gIiRhY190IiIkUkFOTElCIiAxPiY2CitlbHNlCisgIGVjaG8gIiRhY190IiJubyIgMT4mNgorZmkKIAogCiBmb3IgYWNfZnVuYyBpbiB0Y2dldGF0dHIKQEAgLTkyNCw3ICsxMTk2LDcgQEAKICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgOTI4ICJjb25maWd1cmUiCisjbGluZSAxMjAwICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jKCk7IGJlbG93LiAgKi8KQEAgLTk3Niw3ICsxMjQ4LDcgQEAKICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgOTgwICJjb25maWd1cmUiCisjbGluZSAxMjUyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDwkYWNfaGRyPgogRU9GCkBAIC0xMDA5LDcgKzEyODEsNyBAQAogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMDEzICJjb25maWd1cmUiCisjbGluZSAxMjg1ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtMTA2Myw3ICsxMzM1LDcgQEAKICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTA2NyAiY29uZmlndXJlIgorI2xpbmUgMTMzOSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQpAQCAtMTE0MCw3ICsxNDEyLDcgQEAKICAgYWNfY3ZfY19jcm9zcz15ZXMKIGVsc2UKIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExNDQgImNvbmZpZ3VyZSIKKyNsaW5lIDE0MTYgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogbWFpbigpe3JldHVybigwKTt9CiBFT0YKQEAgLTExNjEsNyArMTQzMyw3IEBACiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExNjUgImNvbmZpZ3VyZSIKKyNsaW5lIDE0MzcgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTE4Myw3ICsxNDU1LDcgQEAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExODcgImNvbmZpZ3VyZSIKKyNsaW5lIDE0NTkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgogRU9GCkBAIC0xMjAxLDcgKzE0NzMsNyBAQAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTIwNSAiY29uZmlndXJlIgorI2xpbmUgMTQ3NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiBFT0YKQEAgLTEyMjIsNyArMTQ5NCw3IEBACiAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBlbHNlCiBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMjI2ICJjb25maWd1cmUiCisjbGluZSAxNDk4ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxjdHlwZS5oPgogI2RlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCkBAIC0xMjU2LDcgKzE1MjgsNyBAQAogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAxMjYwICJjb25maWd1cmUiCisjbGluZSAxNTMyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBTVERDX0hFQURFUlMKQEAgLTEzMTEsOSArMTU4MywxMiBAQAogZmkKIGZpCiAKK2NhdCA+PiBjb25mZGVmcy5oIDw8RU9GCisjZGVmaW5lIFdJTkVfSU5JX0dMT0JBTCAkV0lORV9JTklfR0xPQkFMCitFT0YKIAogCi10ZXN0IC16ICIkTERGTEFHUyIgJiYgTERGTEFHUz0tZyAKK01BS0VfUlVMRVM9JFRPUF9TUkNESVIvTWFrZS5ydWxlcwogCiAKIHRyYXAgJycgMSAyIDE1CkBAIC0xNDE0LDcgKzE2ODksNyBAQAogCiBhY19naXZlbl9zcmNkaXI9JHNyY2RpcgogCi10cmFwICdybSAtZnIgYGVjaG8gImNvbnRyb2xzL01ha2VmaWxlIGlwYy9NYWtlZmlsZSBsb2FkZXIvTWFrZWZpbGUgbWVtb3J5L01ha2VmaWxlIG1pc2MvTWFrZWZpbGUgbWlzY2VtdS9NYWtlZmlsZSBtdWx0aW1lZGlhL01ha2VmaWxlIG9iamVjdHMvTWFrZWZpbGUgd2luZG93cy9NYWtlZmlsZSByYy9NYWtlZmlsZSBkZWJ1Z2dlci9NYWtlZmlsZSBkZWJ1Z2dlci9yZWFkbGluZS9NYWtlZmlsZSB0b29scy9NYWtlZmlsZSBpZjE2MzIvTWFrZWZpbGUgTWFrZWZpbGUgYXV0b2NvbmYuaCIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQordHJhcCAncm0gLWZyIGBlY2hvICJNYWtlLnJ1bGVzIGNvbnRyb2xzL01ha2VmaWxlIGlwYy9NYWtlZmlsZSBsb2FkZXIvTWFrZWZpbGUgbWVtb3J5L01ha2VmaWxlIG1pc2MvTWFrZWZpbGUgbWlzY2VtdS9NYWtlZmlsZSBtdWx0aW1lZGlhL01ha2VmaWxlIG9iamVjdHMvTWFrZWZpbGUgd2luZG93cy9NYWtlZmlsZSByYy9NYWtlZmlsZSBkZWJ1Z2dlci9NYWtlZmlsZSBkZWJ1Z2dlci9yZWFkbGluZS9NYWtlZmlsZSB0b29scy9NYWtlZmlsZSBpZjE2MzIvTWFrZWZpbGUgdG9vbGtpdC9NYWtlZmlsZSBNYWtlZmlsZSIgfCBzZWQgInMvOlteIF0qLy9nImAgY29uZnRlc3QqOyBleGl0IDEnIDEgMiAxNQogCiAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLiAKIHNlZCAncy8lQC9AQC87IHMvQCUvQEAvOyBzLyVnJC9AZy87IC9AZyQvcy9bXFxcXCYlXS9cXFxcJi9nOyAKQEAgLTE0MzAsMjYgKzE3MDUsMjggQEAKIHMlQGV4ZWNfcHJlZml4QCUkZXhlY19wcmVmaXglZwogcyVAcHJlZml4QCUkcHJlZml4JWcKIHMlQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJSRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lJWcKK3MlQE1BSU5fVEFSR0VUQCUkTUFJTl9UQVJHRVQlZwogcyVATEFOR0AlJExBTkclZwogcyVAU0VUX01BS0VAJSRTRVRfTUFLRSVnCiBzJUBDQ0AlJENDJWcKIHMlQENQUEAlJENQUCVnCitzJUBYX0NGTEFHU0AlJFhfQ0ZMQUdTJWcKK3MlQFhfUFJFX0xJQlNAJSRYX1BSRV9MSUJTJWcKK3MlQFhfTElCU0AlJFhfTElCUyVnCitzJUBYX0VYVFJBX0xJQlNAJSRYX0VYVFJBX0xJQlMlZwogcyVAWUFDQ0AlJFlBQ0MlZwogcyVATEVYQCUkTEVYJWcKIHMlQExFWExJQkAlJExFWExJQiVnCi1zJUBBWEZJTEVTQCUkQVhGSUxFUyVnCi1zJUB4X2luY2x1ZGVzQCUkeF9pbmNsdWRlcyVnCi1zJUB4X2xpYnJhcmllc0AlJHhfbGlicmFyaWVzJWcKLXMlQExJQk9CSlNAJSRMSUJPQkpTJWcKLXMlQExEQCUkTEQlZwotcyVATERDT01CSU5FRkxBR1NAJSRMRENPTUJJTkVGTEFHUyVnCitzJUBSQU5MSUJAJSRSQU5MSUIlZwogcyVAV0lORV9JTklfR0xPQkFMQCUkV0lORV9JTklfR0xPQkFMJWcKKy9ATUFLRV9SVUxFU0AvciAkTUFLRV9SVUxFUworcyVATUFLRV9SVUxFU0AlJWcKIAogQ0VPRgogRU9GCiBjYXQgPj4gJENPTkZJR19TVEFUVVMgPDxFT0YKIAotQ09ORklHX0ZJTEVTPVwke0NPTkZJR19GSUxFUy0iY29udHJvbHMvTWFrZWZpbGUgaXBjL01ha2VmaWxlIGxvYWRlci9NYWtlZmlsZSBtZW1vcnkvTWFrZWZpbGUgbWlzYy9NYWtlZmlsZSBtaXNjZW11L01ha2VmaWxlIG11bHRpbWVkaWEvTWFrZWZpbGUgb2JqZWN0cy9NYWtlZmlsZSB3aW5kb3dzL01ha2VmaWxlIHJjL01ha2VmaWxlIGRlYnVnZ2VyL01ha2VmaWxlIGRlYnVnZ2VyL3JlYWRsaW5lL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIGlmMTYzMi9NYWtlZmlsZSBNYWtlZmlsZSBhdXRvY29uZi5oIn0KK0NPTkZJR19GSUxFUz1cJHtDT05GSUdfRklMRVMtIk1ha2UucnVsZXMgY29udHJvbHMvTWFrZWZpbGUgaXBjL01ha2VmaWxlIGxvYWRlci9NYWtlZmlsZSBtZW1vcnkvTWFrZWZpbGUgbWlzYy9NYWtlZmlsZSBtaXNjZW11L01ha2VmaWxlIG11bHRpbWVkaWEvTWFrZWZpbGUgb2JqZWN0cy9NYWtlZmlsZSB3aW5kb3dzL01ha2VmaWxlIHJjL01ha2VmaWxlIGRlYnVnZ2VyL01ha2VmaWxlIGRlYnVnZ2VyL3JlYWRsaW5lL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIGlmMTYzMi9NYWtlZmlsZSB0b29sa2l0L01ha2VmaWxlIE1ha2VmaWxlIn0KIEVPRgogY2F0ID4+ICRDT05GSUdfU1RBVFVTIDw8XEVPRgogZm9yIGFjX2ZpbGUgaW4gLi4gJENPTkZJR19GSUxFUzsgZG8gaWYgdGVzdCAieCRhY19maWxlIiAhPSB4Li47IHRoZW4KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCA3MWFhYzVjLi41MTU0Y2Q3IDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC04LDM4ICs4LDM1IEBACiB0ZXN0IC16ICIkQ0ZMQUdTIiAmJiBDRkxBR1M9Ii1nIC1PMiAtV2FsbCIgQUNfU1VCU1QoQ0ZMQUdTKQogdGVzdCAteiAiJExERkxBR1MiICYmIExERkxBR1M9LWcgQUNfU1VCU1QoTERGTEFHUykKIAorZG5sICoqKiogQ29tbWFuZC1saW5lIGFyZ3VtZW50cyAqKioqCisKK0FDX0FSR19XSVRIKGxpYnJhcnksCitbICAtLXdpdGgtbGlicmFyeSAgICAgICAgICBidWlsZCBXaW5lIGFzIGEgbGlicmFyeSBpbnN0ZWFkIG9mIGFuIGVtdWxhdG9yXSwKK1tBQ19ERUZJTkUoV0lORUxJQikgTUFJTl9UQVJHRVQ9IndpbmVsaWIuYSJdLFtNQUlOX1RBUkdFVD0id2luZSJdKQorQUNfU1VCU1QoTUFJTl9UQVJHRVQpCisKIEFDX0FSR19XSVRIKGxhbmd1YWdlLAotWyAgLS13aXRoLWxhbmd1YWdlPUxBTkcgICAgY2hhbmdlIHRoZSBkZWZhdWx0IGxhbmd1YWdlIChMQU5HPUVuL0RlL05vKV0sCitbICAtLXdpdGgtbGFuZ3VhZ2U9TEFORyAgICBjaGFuZ2UgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgKExBTkc9RW4vRGUvTm8vRXMpXSwKIFtMQU5HPSItQUxBTkdcKCR3aXRodmFsXCkiXSwKIFtMQU5HPSItQUxBTkdcKEVuXCkiXSwpCiBBQ19TVUJTVChMQU5HKQorCiBBQ19BUkdfV0lUSChpcGMsCiBbICAtLXdpdGgtaXBjICAgICAgICAgICAgICB1c2UgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIGZvciBEREVdLAogW0FDX0RFRklORShDT05GSUdfSVBDKV0pCisKIEFDX0FSR19XSVRIKG1hbGxvYy1kZWJ1ZywKIFsgIC0td2l0aC1tYWxsb2MtZGVidWcgICAgIGVuYWJsZSBtYWxsb2MoKSBkZWJ1Z2dpbmddLAogW0FDX0RFRklORShNQUxMT0NfREVCVUdHSU5HKV0pCiAKK2RubCAqKioqIENoZWNrIGZvciBzb21lIHByb2dyYW1zICoqKioKKwogQUNfUFJPR19NQUtFX1NFVAogQUNfUFJPR19DQwotQUNfUEFUSF9YCitBQ19QQVRIX1hUUkEKIEFDX1BST0dfWUFDQwogQUNfUFJPR19MRVgKLWlmIHRlc3QgLW4gIiR4X2luY2x1ZGVzIiA7IHRoZW4KLSAgeF9pbmNsdWRlcz0iLUkkeF9pbmNsdWRlcyIKLWZpCi1pZiB0ZXN0IC1uICIkeF9ubyIgOyB0aGVuCi0gIEFYRklMRVM9J0FYRklMRVM9JwotZmkKLUFDX1NVQlNUKEFYRklMRVMpCi1BQ19TVUJTVCh4X2luY2x1ZGVzKQotQUNfU1VCU1QoeF9saWJyYXJpZXMpCi1BQ19TVUJTVChMSUJPQkpTKQotCi1MRD1sZAotTERDT01CSU5FRkxBR1M9Ii1yIgotQUNfU1VCU1QoTEQpCi1BQ19TVUJTVChMRENPTUJJTkVGTEFHUykKK0FDX1BST0dfUkFOTElCCiAKIEFDX0NIRUNLX0ZVTkNTKHRjZ2V0YXR0cikKIEFDX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpCkBAIC03NSw4ICs3MiwxMiBAQAogZmkKIGZpCiBBQ19TVUJTVChXSU5FX0lOSV9HTE9CQUwpCitBQ19ERUZJTkVfVU5RVU9URUQoV0lORV9JTklfR0xPQkFMLCRXSU5FX0lOSV9HTE9CQUwpCiAKLUFDX09VVFBVVChjb250cm9scy9NYWtlZmlsZSBpcGMvTWFrZWZpbGUgbG9hZGVyL01ha2VmaWxlIG1lbW9yeS9NYWtlZmlsZSBtaXNjL01ha2VmaWxlIG1pc2NlbXUvTWFrZWZpbGUgbXVsdGltZWRpYS9NYWtlZmlsZSBvYmplY3RzL01ha2VmaWxlIHdpbmRvd3MvTWFrZWZpbGUgcmMvTWFrZWZpbGUgZGVidWdnZXIvTWFrZWZpbGUgZGVidWdnZXIvcmVhZGxpbmUvTWFrZWZpbGUgdG9vbHMvTWFrZWZpbGUgaWYxNjMyL01ha2VmaWxlIE1ha2VmaWxlIGF1dG9jb25mLmgpCitNQUtFX1JVTEVTPSRUT1BfU1JDRElSL01ha2UucnVsZXMKK0FDX1NVQlNUX0ZJTEUoTUFLRV9SVUxFUykKKworQUNfT1VUUFVUKE1ha2UucnVsZXMgY29udHJvbHMvTWFrZWZpbGUgaXBjL01ha2VmaWxlIGxvYWRlci9NYWtlZmlsZSBtZW1vcnkvTWFrZWZpbGUgbWlzYy9NYWtlZmlsZSBtaXNjZW11L01ha2VmaWxlIG11bHRpbWVkaWEvTWFrZWZpbGUgb2JqZWN0cy9NYWtlZmlsZSB3aW5kb3dzL01ha2VmaWxlIHJjL01ha2VmaWxlIGRlYnVnZ2VyL01ha2VmaWxlIGRlYnVnZ2VyL3JlYWRsaW5lL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIGlmMTYzMi9NYWtlZmlsZSB0b29sa2l0L01ha2VmaWxlIE1ha2VmaWxlKQogCiBlY2hvCiBlY2hvICJDb25maWd1cmUgZmluaXNoZWQuICBEbyAnbWFrZSBkZXBlbmQ7IG1ha2UnIHRvIGNvbXBpbGUgV2luZS4iCmRpZmYgLS1naXQgYS9jb250cm9scy9NYWtlZmlsZS5pbiBiL2NvbnRyb2xzL01ha2VmaWxlLmluCmluZGV4IDAyY2JiM2IuLjNiMDE4YTQgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL01ha2VmaWxlLmluCisrKyBiL2NvbnRyb2xzL01ha2VmaWxlLmluCkBAIC0xLDM5ICsxLDIwIEBACi1DQyAJPSBAQ0NACi1DRkxBR1MgCT0gQENGTEFHU0AKLVhJTkNMIAk9IEB4X2luY2x1ZGVzQAogVE9QU1JDICA9IEB0b3Bfc3JjZGlyQAotRElWSU5DTCA9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUxEICAgICAgPSBATERACi1MRENPTUJJTkVGTEFHUyA9IEBMRENPTUJJTkVGTEFHU0AKIAogTU9EVUxFIAk9IGNvbnRyb2xzCiAKLVNSQ1MgCT0gYnV0dG9uLmMgY29tYm8uYyBkZXNrdG9wLmMgZWRpdC5jIGxpc3Rib3guYyBtZW51LmMgc2Nyb2xsLmMgXAotCXN0YXRpYy5jIHdpZGdldHMuYwotCi1PQkpTID0gJChTUkNTOi5jPS5vKQotCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKK0NfU1JDUyA9IFwKKwlidXR0b24uYyBcCisJY29tYm8uYyBcCisJZGVza3RvcC5jIFwKKwllZGl0LmMgXAorCWxpc3Rib3guYyBcCisJbWVudS5jIFwKKwlzY3JvbGwuYyBcCisJc3RhdGljLmMgXAorCXdpZGdldHMuYwogCiBhbGw6ICQoTU9EVUxFKS5vCiAKLSQoTU9EVUxFKS5vOiAkKE9CSlMpCi0JJChMRCkgJChMRENPTUJJTkVGTEFHUykgJChPQkpTKSAtbyAkKE1PRFVMRSkubwotCi1kZXBlbmQ6Ci0Jc2VkICcvXCNcI1wjIERlcGVuZGVuY2llcy9xJyA8IE1ha2VmaWxlID4gdG1wX21ha2UKLQkkKENDKSAkKERJVklOQ0wpICQoWElOQ0wpIC1NTSAqLmMgPj4gdG1wX21ha2UKLQltdiB0bXBfbWFrZSBNYWtlZmlsZQotCi1jbGVhbjoKLQlybSAtZiAqLm8gXCMqXCMgKn4gKi5iYWsgdG1wX21ha2UKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZHVtbXk6CitATUFLRV9SVUxFU0AKIAogIyMjIERlcGVuZGVuY2llczoKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2NvbWJvLmMgYi9jb250cm9scy9jb21iby5jCmluZGV4IDE2MDBhMjMuLjc3Mzc0Y2QgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2NvbWJvLmMKKysrIGIvY29udHJvbHMvY29tYm8uYwpAQCAtMTQsMTMgKzE0LDE0IEBACiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgInN5c21ldHJpY3MuaCIKICNpbmNsdWRlICJjb21iby5oIgorI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAid2luLmgiCi0jaW5jbHVkZSAic3RkZGVidWcuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImdyYXBoaWNzLmgiCiAjaW5jbHVkZSAibGlzdGJveC5oIgogI2luY2x1ZGUgImRvc19mcy5oIgorI2luY2x1ZGUgInN0ZGRlYnVnLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAogIC8qCiAgICogTm90ZTogQ29tYm9zIGFyZSBwcm9iYWJseSBpbXBsZW1lbnRlZCBpbiBhIGRpZmZlcmVudCB3YXkgYnkgV2luZG93cy4KQEAgLTEyNyw3ICsxMjgsNyBAQAogICAgIGRwcmludGZfY29tYm8oc3RkZGViLCJDQlNfU0lNUExFXG4iKTsKICAgICBTZXRSZWN0RW1wdHkoJmxwaGMtPlJlY3RCdXR0b24pOwogICAgIGxwaGMtPkxCb3hUb3AgPSBscGhsLT5TdGRJdGVtSGVpZ2h0OwotICAgIGxwaGMtPmhXbmRFZGl0ID0gQ3JlYXRlV2luZG93KGVkaXROYW1lLCAiIiwgCisgICAgbHBoYy0+aFduZEVkaXQgPSBDcmVhdGVXaW5kb3coTUFLRV9TRUdQVFIoZWRpdE5hbWUpLCAoU0VHUFRSKTAsIAogCQkJCSAgV1NfQ0hJTEQgfCBXU19DTElQQ0hJTERSRU4gfCBXU19WSVNJQkxFIHwgU1NfTEVGVCwKIAkJCQkgIDAsIDAsIHJlY3QucmlnaHQsIGxwaGwtPlN0ZEl0ZW1IZWlnaHQsCiAJCQkJICBod25kLCAxLCBHZXRXaW5kb3dXb3JkKGh3bmQsR1dXX0hJTlNUQU5DRSksIDBMKTsKQEAgLTE0MSw3ICsxNDIsNyBAQAogICAgIFNldFdpbmRvd1Bvcyhod25kLCAwLCAwLCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0ICsgMipTWVNNRVRSSUNTX0NYQk9SREVSLAogCQkgbHBobC0+U3RkSXRlbUhlaWdodCArIDIqU1lTTUVUUklDU19DWUJPUkRFUiwKIAkJIFNXUF9OT01PVkUgfCBTV1BfTk9aT1JERVIpOwotICAgIGxwaGMtPmhXbmRFZGl0ID0gQ3JlYXRlV2luZG93KGVkaXROYW1lLCAiIiwKKyAgICBscGhjLT5oV25kRWRpdCA9IENyZWF0ZVdpbmRvdyhNQUtFX1NFR1BUUihlZGl0TmFtZSksIChTRUdQVFIpMCwKIAkJCQkgIFdTX0NISUxEIHwgV1NfQ0xJUENISUxEUkVOIHwgV1NfVklTSUJMRSB8IFNTX0xFRlQsCiAJCQkJICAwLCAwLCBscGhjLT5SZWN0QnV0dG9uLmxlZnQsIGxwaGwtPlN0ZEl0ZW1IZWlnaHQsCiAJCQkJICBod25kLCAxLCBHZXRXaW5kb3dXb3JkKGh3bmQsR1dXX0hJTlNUQU5DRSksIDBMKTsKQEAgLTE2MSw3ICsxNjIsNyBAQAogICAvKiBGSVhNRTogV2luU2lnaHQgc2F5cyB0aGVzZSBzaG91bGQgYmUgQ0hJTEQgd2luZG93cyB3aXRoIHRoZSBUT1BNT1NUIGZsYWcKICAgICogc2V0LiBXaW5lIGRvZXNuJ3Qgc3VwcG9ydCBUT1BNT1NULCBhbmQgc2ltcGx5IHNldHRpbmcgdGhlIFdTX0NISUxECiAgICAqIGZsYWcgZG9lc24ndCB3b3JrLiAqLwotICBscGhjLT5oV25kTEJveCA9IENyZWF0ZVdpbmRvdyhjbGFzc05hbWUsICIiLCAKKyAgbHBoYy0+aFduZExCb3ggPSBDcmVhdGVXaW5kb3coTUFLRV9TRUdQVFIoY2xhc3NOYW1lKSwgKFNFR1BUUikwLCAKIAkJCQlXU19QT1BVUCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwsCiAJCQkJbGJveHJlY3QubGVmdCwgbGJveHJlY3QudG9wLAogCQkJCWxib3hyZWN0LnJpZ2h0IC0gbGJveHJlY3QubGVmdCwgCmRpZmYgLS1naXQgYS9jb250cm9scy9tZW51LmMgYi9jb250cm9scy9tZW51LmMKaW5kZXggNTk4ZGUzYS4uMjUwZjQyNCAxMDA2NDQKLS0tIGEvY29udHJvbHMvbWVudS5jCisrKyBiL2NvbnRyb2xzL21lbnUuYwpAQCAtMjksNiArMjksNyBAQAogLyogI2RlZmluZSBERUJVR19NRU5VU0hPUlRDVVQgKi8KICNpbmNsdWRlICJkZWJ1Zy5oIgogCisjaW5jbHVkZSAiLi4vcmMvc3lzcmVzLmgiCiAKICAgLyogRGltZW5zaW9uIG9mIHRoZSBtZW51IGJpdG1hcHMgKi8KIHN0YXRpYyBXT1JEIGNoZWNrX2JpdG1hcF93aWR0aCA9IDAsIGNoZWNrX2JpdG1hcF9oZWlnaHQgPSAwOwpAQCAtNjczLDcgKzY3NCw3IEBACiAgICAgewogCVdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmRPd25lciApOwogCWlmICghd25kUHRyKSByZXR1cm4gRkFMU0U7Ci0JbWVudS0+aFduZCA9IENyZWF0ZVdpbmRvdyggKExQU1RSKVBPUFVQTUVOVV9DTEFTU19BVE9NLCAiIiwKKwltZW51LT5oV25kID0gQ3JlYXRlV2luZG93KCBQT1BVUE1FTlVfQ0xBU1NfQVRPTSwgKFNFR1BUUikwLAogCQkJCSAgIFdTX1BPUFVQIHwgV1NfQk9SREVSLCB4LCB5LCAKIAkJCQkgICBtZW51LT5XaWR0aCArIDIqU1lTTUVUUklDU19DWEJPUkRFUiwKIAkJCQkgICBtZW51LT5IZWlnaHQgKyAyKlNZU01FVFJJQ1NfQ1lCT1JERVIsCkBAIC03MzIsMTggKzczMywyNSBAQAogICAgIGlmIChscHBvcC0+Rm9jdXNlZEl0ZW0gIT0gTk9fU0VMRUNURURfSVRFTSkgCiAgICAgewogCWlmIChscHBvcC0+Rm9jdXNlZEl0ZW0gPT0gU1lTTUVOVV9TRUxFQ1RFRCkKKyAgICAgICAgewogCSAgICBOQ19EcmF3U3lzQnV0dG9uKCBscHBvcC0+aFduZCwgaGRjLCBUUlVFICk7CisgICAgICAgICAgICBTZW5kTWVzc2FnZSggaHduZE93bmVyLCBXTV9NRU5VU0VMRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c3RlbU1lbnUoIGxwcG9wLT5oV25kLCBGQUxTRSApLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKCBscHBvcC0+d0ZsYWdzIHwgTUZfTU9VU0VTRUxFQ1QsIGhtZW51ICkgKTsKKyAgICAgICAgfQogCWVsc2UKIAl7CiAJICAgIGl0ZW1zW2xwcG9wLT5Gb2N1c2VkSXRlbV0uaXRlbV9mbGFncyB8PSBNRl9ISUxJVEU7CiAJICAgIE1FTlVfRHJhd01lbnVJdGVtKCBscHBvcC0+aFduZCwgaGRjLCAmaXRlbXNbbHBwb3AtPkZvY3VzZWRJdGVtXSwgbHBwb3AtPkhlaWdodCwKIAkJCSAgICAgICAhKGxwcG9wLT53RmxhZ3MgJiBNRl9QT1BVUCkgKTsKLQkgICAgZHByaW50Zl9tZW51KHN0ZGRlYiwiU2VuZGluZyBXTV9NRU5VU0VMRUNUICUwNHggJTA0eFxuIiwgaXRlbXNbbHBwb3AtPkZvY3VzZWRJdGVtXS5pdGVtX2lkLGl0ZW1zW2xwcG9wLT5Gb2N1c2VkSXRlbV0uaXRlbV9mbGFncyk7CiAJICAgIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIFdNX01FTlVTRUxFQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbHBwb3AtPkZvY3VzZWRJdGVtXS5pdGVtX2lkLAogCQkgICAgICAgICBNQUtFTE9ORyggaXRlbXNbbHBwb3AtPkZvY3VzZWRJdGVtXS5pdGVtX2ZsYWdzIHwgTUZfTU9VU0VTRUxFQ1QsIGhtZW51KSk7CiAJfQogICAgIH0KKyAgICBlbHNlIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIFdNX01FTlVTRUxFQ1QsIGhtZW51LAorICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKCBscHBvcC0+d0ZsYWdzIHwgTUZfTU9VU0VTRUxFQ1QsIGhtZW51ICkgKTsKKwogICAgIFJlbGVhc2VEQyggbHBwb3AtPmhXbmQsIGhkYyApOwogfQogCkBAIC0xMzk5LDYgKzE0MDcsNyBAQAogewogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKICAgICBTZW5kTWVzc2FnZSggaHduZCwgV01fRU5URVJNRU5VTE9PUCwgMCwgMCApOworICAgIFNlbmRNZXNzYWdlKCBod25kLCBXTV9JTklUTUVOVSwgd25kUHRyLT53SURtZW51LCAwICk7CiAgICAgTUVOVV9UcmFja01lbnUoIChITUVOVSl3bmRQdHItPndJRG1lbnUsIFRQTV9MRUZUQUxJR04gfCBUUE1fTEVGVEJVVFRPTiwKIAkJICAgIHB0LngsIHB0LnksIGh3bmQsIE5VTEwgKTsKICAgICBTZW5kTWVzc2FnZSggaHduZCwgV01fRVhJVE1FTlVMT09QLCAwLCAwICk7CkBAIC0xNDE1LDYgKzE0MjQsNyBAQAogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKICAgICBpZiAoIXduZFB0ci0+d0lEbWVudSkgcmV0dXJuOwogICAgIFNlbmRNZXNzYWdlKCBod25kLCBXTV9FTlRFUk1FTlVMT09QLCAwLCAwICk7CisgICAgU2VuZE1lc3NhZ2UoIGh3bmQsIFdNX0lOSVRNRU5VLCB3bmRQdHItPndJRG1lbnUsIDAgKTsKICAgICAgIC8qIFNlbGVjdCBmaXJzdCBzZWxlY3RhYmxlIGl0ZW0gKi8KICAgICBNRU5VX1NlbGVjdEl0ZW0oIGh3bmQsIHduZFB0ci0+d0lEbWVudSwgTk9fU0VMRUNURURfSVRFTSApOwogICAgIE1FTlVfU2VsZWN0TmV4dEl0ZW0oIGh3bmQsIChITUVOVSl3bmRQdHItPndJRG1lbnUgKTsKQEAgLTE0MjUsNyArMTQzNSw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJVHJhY2tQb3B1cE1lbnUJCVtVU0VSLjQxNl0KKyAqICAgICAgICAgICBUcmFja1BvcHVwTWVudSAgIChVU0VSLjQxNikKICAqLwogQk9PTCBUcmFja1BvcHVwTWVudSggSE1FTlUgaE1lbnUsIFdPUkQgd0ZsYWdzLCBzaG9ydCB4LCBzaG9ydCB5LAogCQkgICAgIHNob3J0IG5SZXNlcnZlZCwgSFdORCBoV25kLCBMUFJFQ1QgbHBSZWN0ICkKQEAgLTE5MzIsMjggKzE5NDIsMjkgQEAKICAqLwogQk9PTCBEZXN0cm95TWVudShITUVOVSBoTWVudSkKIHsKLQlMUFBPUFVQTUVOVSBscHBvcDsKLQlkcHJpbnRmX21lbnUoc3RkZGViLCJEZXN0cm95TWVudSAoJTA0WCkgIVxuIiwgaE1lbnUpOwotCWlmIChoTWVudSA9PSAwKSByZXR1cm4gRkFMU0U7Ci0JbHBwb3AgPSAoTFBQT1BVUE1FTlUpIFVTRVJfSEVBUF9MSU5fQUREUihoTWVudSk7Ci0JaWYgKGxwcG9wID09IE5VTEwpIHJldHVybiBGQUxTRTsKLQlpZiAoKGxwcG9wLT53RmxhZ3MgJiBNRl9QT1BVUCkgJiYgbHBwb3AtPmhXbmQpCi0gICAgICAgICAgICBEZXN0cm95V2luZG93KCBscHBvcC0+aFduZCApOworICAgIExQUE9QVVBNRU5VIGxwcG9wOworICAgIGRwcmludGZfbWVudShzdGRkZWIsIkRlc3Ryb3lNZW51ICglMDRYKSAhXG4iLCBoTWVudSk7CisgICAgaWYgKGhNZW51ID09IDApIHJldHVybiBGQUxTRTsKKyAgICBscHBvcCA9IChMUFBPUFVQTUVOVSkgVVNFUl9IRUFQX0xJTl9BRERSKGhNZW51KTsKKyAgICBpZiAoIWxwcG9wIHx8IChscHBvcC0+d01hZ2ljICE9IE1FTlVfTUFHSUMpKSByZXR1cm4gRkFMU0U7CisgICAgbHBwb3AtPndNYWdpYyA9IDA7ICAvKiBNYXJrIGl0IGFzIGRlc3Ryb3llZCAqLworICAgIGlmICgobHBwb3AtPndGbGFncyAmIE1GX1BPUFVQKSAmJiBscHBvcC0+aFduZCkKKyAgICAgICAgRGVzdHJveVdpbmRvdyggbHBwb3AtPmhXbmQgKTsKIAotCWlmIChscHBvcC0+aEl0ZW1zKQotCXsKLQkgICAgaW50IGk7Ci0JICAgIE1FTlVJVEVNICppdGVtID0gKE1FTlVJVEVNICopIFVTRVJfSEVBUF9MSU5fQUREUiggbHBwb3AtPmhJdGVtcyApOwotCSAgICBmb3IgKGkgPSBscHBvcC0+bkl0ZW1zOyBpID4gMDsgaS0tLCBpdGVtKyspCi0JICAgIHsKLQkJaWYgKGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9QT1BVUCkKLQkJICAgIERlc3Ryb3lNZW51KCBpdGVtLT5pdGVtX2lkICk7Ci0JICAgIH0KLQkgICAgVVNFUl9IRUFQX0ZSRUUoIGxwcG9wLT5oSXRlbXMgKTsKLQl9Ci0JVVNFUl9IRUFQX0ZSRUUoIGhNZW51ICk7Ci0JZHByaW50Zl9tZW51KHN0ZGRlYiwiRGVzdHJveU1lbnUgKCUwNFgpIC8vIEVuZCAhXG4iLCBoTWVudSk7Ci0JcmV0dXJuIFRSVUU7CisgICAgaWYgKGxwcG9wLT5oSXRlbXMpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgTUVOVUlURU0gKml0ZW0gPSAoTUVOVUlURU0gKikgVVNFUl9IRUFQX0xJTl9BRERSKCBscHBvcC0+aEl0ZW1zICk7CisgICAgICAgIGZvciAoaSA9IGxwcG9wLT5uSXRlbXM7IGkgPiAwOyBpLS0sIGl0ZW0rKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9QT1BVUCkKKyAgICAgICAgICAgICAgICBEZXN0cm95TWVudSggaXRlbS0+aXRlbV9pZCApOworICAgICAgICB9CisgICAgICAgIFVTRVJfSEVBUF9GUkVFKCBscHBvcC0+aEl0ZW1zICk7CisgICAgfQorICAgIFVTRVJfSEVBUF9GUkVFKCBoTWVudSApOworICAgIGRwcmludGZfbWVudShzdGRkZWIsIkRlc3Ryb3lNZW51ICglMDRYKSAvLyBFbmQgIVxuIiwgaE1lbnUpOworICAgIHJldHVybiBUUlVFOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjEzNywxMCArMjE0OCwxMCBAQAogewogICAgIEhNRU5VIGhNZW51OwogICAgIExQUE9QVVBNRU5VIG1lbnU7Ci0gICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc3lzcmVzX01FTlVfU1lTTUVOVVtdOwogCi0gICAgaE1lbnU9TG9hZE1lbnVJbmRpcmVjdChzeXNyZXNfTUVOVV9TWVNNRU5VKTsKLSAgICBpZighaE1lbnUpeworICAgIGhNZW51ID0gTG9hZE1lbnVJbmRpcmVjdCggc3lzcmVzX01FTlVfU1lTTUVOVS5ieXRlcyApOworICAgIGlmKCFoTWVudSkKKyAgICB7CiAJZHByaW50Zl9tZW51KHN0ZGRlYiwiTm8gU1lTTUVOVVxuIik7CiAJcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvc2Nyb2xsLmMgYi9jb250cm9scy9zY3JvbGwuYwppbmRleCAxMWI4ZTIwLi4yMzBiN2I0IDEwMDY0NAotLS0gYS9jb250cm9scy9zY3JvbGwuYworKysgYi9jb250cm9scy9zY3JvbGwuYwpAQCAtNTkzLDEyICs1OTMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCksIEZBTFNFICk7CiAgICAgICAgIGlmIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgU2V0U3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiwgKG1zZyA9PSBXTV9MQlVUVE9ORE9XTikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTF9GSVJTVF9ERUxBWSA6IFNDUk9MTF9SRVBFQVRfREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgaWYgKChtc2cgPT0gV01fTEJVVFRPTkRPV04pIHx8IChtc2cgPT0gV01fU1lTVElNRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNldFN5c3RlbVRpbWVyKCBod25kLCBTQ1JPTExfVElNRVIsIChtc2cgPT0gV01fTEJVVFRPTkRPV04pID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NST0xMX0ZJUlNUX0RFTEFZIDogU0NST0xMX1JFUEVBVF9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIHZlcnRpY2FsID8gV01fVlNDUk9MTCA6IFdNX0hTQ1JPTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNCX0xJTkVVUCwgTUFLRUxPTkcoIDAsIGh3bmRDdGwgKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBLaWxsU3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiApOwogICAgICAgICBicmVhazsKQEAgLTYwOSwxMiArNjExLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCksIEZBTFNFICk7CiAgICAgICAgIGlmIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgU2V0U3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiwgKG1zZyA9PSBXTV9MQlVUVE9ORE9XTikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTF9GSVJTVF9ERUxBWSA6IFNDUk9MTF9SRVBFQVRfREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgaWYgKChtc2cgPT0gV01fTEJVVFRPTkRPV04pIHx8IChtc2cgPT0gV01fU1lTVElNRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNldFN5c3RlbVRpbWVyKCBod25kLCBTQ1JPTExfVElNRVIsIChtc2cgPT0gV01fTEJVVFRPTkRPV04pID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NST0xMX0ZJUlNUX0RFTEFZIDogU0NST0xMX1JFUEVBVF9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIHZlcnRpY2FsID8gV01fVlNDUk9MTCA6IFdNX0hTQ1JPTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNCX1BBR0VVUCwgTUFLRUxPTkcoIDAsIGh3bmRDdGwgKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBLaWxsU3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiApOwogICAgICAgICBicmVhazsKQEAgLTY1MywxMiArNjU3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAoaGl0dGVzdCA9PSB0cmFja0hpdFRlc3QpICk7CiAgICAgICAgIGlmIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgU2V0U3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiwgKG1zZyA9PSBXTV9MQlVUVE9ORE9XTikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTF9GSVJTVF9ERUxBWSA6IFNDUk9MTF9SRVBFQVRfREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgaWYgKChtc2cgPT0gV01fTEJVVFRPTkRPV04pIHx8IChtc2cgPT0gV01fU1lTVElNRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNldFN5c3RlbVRpbWVyKCBod25kLCBTQ1JPTExfVElNRVIsIChtc2cgPT0gV01fTEJVVFRPTkRPV04pID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NST0xMX0ZJUlNUX0RFTEFZIDogU0NST0xMX1JFUEVBVF9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIHZlcnRpY2FsID8gV01fVlNDUk9MTCA6IFdNX0hTQ1JPTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNCX1BBR0VET1dOLCBNQUtFTE9ORyggMCwgaHduZEN0bCApKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIEtpbGxTeXN0ZW1UaW1lciggaHduZCwgU0NST0xMX1RJTUVSICk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjY4LDEyICs2NzQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAoaGl0dGVzdCA9PSB0cmFja0hpdFRlc3QpICk7CiAgICAgICAgIGlmIChoaXR0ZXN0ID09IHRyYWNrSGl0VGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgU2V0U3lzdGVtVGltZXIoIGh3bmQsIFNDUk9MTF9USU1FUiwgKG1zZyA9PSBXTV9MQlVUVE9ORE9XTikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTF9GSVJTVF9ERUxBWSA6IFNDUk9MTF9SRVBFQVRfREVMQVksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgaWYgKChtc2cgPT0gV01fTEJVVFRPTkRPV04pIHx8IChtc2cgPT0gV01fU1lTVElNRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNldFN5c3RlbVRpbWVyKCBod25kLCBTQ1JPTExfVElNRVIsIChtc2cgPT0gV01fTEJVVFRPTkRPV04pID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NST0xMX0ZJUlNUX0RFTEFZIDogU0NST0xMX1JFUEVBVF9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZBUlBST0MpMCApOwogICAgICAgICAgICAgICAgIFNlbmRNZXNzYWdlKCBod25kT3duZXIsIHZlcnRpY2FsID8gV01fVlNDUk9MTCA6IFdNX0hTQ1JPTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNCX0xJTkVET1dOLCBNQUtFTE9ORyggMCwgaHduZEN0bCApKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIEtpbGxTeXN0ZW1UaW1lciggaHduZCwgU0NST0xMX1RJTUVSICk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvd2lkZ2V0cy5jIGIvY29udHJvbHMvd2lkZ2V0cy5jCmluZGV4IGNkMDRiMmIuLjM0ZDY3OGEgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3dpZGdldHMuYworKysgYi9jb250cm9scy93aWRnZXRzLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAic2VsZWN0b3JzLmgiCiAjaW5jbHVkZSAic3RhY2tmcmFtZS5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAicmVsYXkzMi5oIgogCiBzdGF0aWMgV05EQ0xBU1MgV0lER0VUU19CdWlsdGluQ2xhc3Nlc1tdID0KIHsKQEAgLTU4LDExICs2MCwyMCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IE5CX0JVSUxUSU5fQ0xBU1NFUzsgaSsrLCBjbGFzcysrKQogICAgIHsKKyAgICAgICAgRFdPUkQgV2luZVByb2MsV2luMTZQcm9jLFdpbjMyUHJvYzsKKyAgICAgICAgLyogY3VycmVudGx5LCB0aGVyZSBpcyBubyB3YXkgdG8gZ2V0IHRoZSAncmVhbCcgcG9pbnRlciBhdCBydW4gdGltZSAqLworICAgICAgICBXaW5lUHJvYz0wOworICAgICAgICBXaW4xNlByb2MgPSBHZXRXbmRQcm9jRW50cnkxNiggKGNoYXIgKiljbGFzcy0+bHBmblduZFByb2MgKTsKKyAgICAgICAgV2luMzJQcm9jID0gKERXT1JEKVJFTEFZMzJfR2V0RW50cnlQb2ludCgKKyAgICAgICAgICAgICAiV0lOUFJPQ1MzMiIsKGNoYXIgKiljbGFzcy0+bHBmblduZFByb2MsIDApOworICAgICAgICAvKiBSZWdpc3RlciB0aGUgYWxpYXMgc28gd2UgZG9uJ3QgcGFzcyBXaW4xNiBwb2ludGVycyB0byBXaW4zMiBhcHBzICovCisgICAgICAgIEFMSUFTX1JlZ2lzdGVyQWxpYXMoV2luZVByb2MsV2luMTZQcm9jLFdpbjMyUHJvYyk7CisKICAgICAgICAgc3RyY3B5KCBuYW1lLCAoY2hhciAqKWNsYXNzLT5scHN6Q2xhc3NOYW1lICk7CiAgICAgICAgIGNsYXNzLT5scHN6Q2xhc3NOYW1lID0gTUFLRV9TRUdQVFIobmFtZSk7Ci0JY2xhc3MtPmhDdXJzb3IgPSBMb2FkQ3Vyc29yKCAwLCBJRENfQVJST1cgKTsKKyAgICAgICAgY2xhc3MtPmhDdXJzb3IgPSBMb2FkQ3Vyc29yKCAwLCBJRENfQVJST1cgKTsKICAgICAgICAgY2xhc3MtPmxwZm5XbmRQcm9jID0gR2V0V25kUHJvY0VudHJ5MTYoIChjaGFyICopY2xhc3MtPmxwZm5XbmRQcm9jICk7Ci0JaWYgKCFSZWdpc3RlckNsYXNzKCBjbGFzcyApKSByZXR1cm4gRkFMU0U7CisgICAgICAgIGlmICghUmVnaXN0ZXJDbGFzcyggY2xhc3MgKSkgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL01ha2VmaWxlLmluIGIvZGVidWdnZXIvTWFrZWZpbGUuaW4KaW5kZXggNzViMDMxNi4uYzkxYjAxZSAxMDA2NDQKLS0tIGEvZGVidWdnZXIvTWFrZWZpbGUuaW4KKysrIGIvZGVidWdnZXIvTWFrZWZpbGUuaW4KQEAgLTEsNTggKzEsMzAgQEAKLUNDCT0gQENDQAotQ0ZMQUdTCT0gQENGTEFHU0AKLVRPUFNSQwk9IEB0b3Bfc3JjZGlyQAotRElWSU5DTAk9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUJJU09OCT0gQFlBQ0NACi1GTEVYCT0gQExFWEAKLURJVkRFRlMJPSAtRFVTRV9SRUFETElORQotQ09NUElMRQk9ICQoQ0MpICQoQ0ZMQUdTKSAkKERJVklOQ0wpICQoRElWREVGUykKLUxECT0gQExEQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACi1AU0VUX01BS0VACitUT1BTUkMgICAgID0gQHRvcF9zcmNkaXJACitFWFRSQV9ERUZTID0gLURVU0VfUkVBRExJTkUKIAorTU9EVUxFID0gZGVidWdnZXIKIAotTU9EVUxFCT0gZGVidWdnZXIKK0NfU1JDUyA9IFwKKwlicmVhay5jIFwKKwlkYl9kaXNhc20uYyBcCisJaGFzaC5jIFwKKwlpbmZvLmMgXAorCW1lbW9yeS5jIFwKKwlyZWdpc3RlcnMuYyBcCisJc3RhY2suYyBcCisJeS50YWIuYyBcCisJbGV4Lnl5LmMKIAotU1JDUwk9IGJyZWFrLmMgZGJfZGlzYXNtLmMgaGFzaC5jIGluZm8uYyBtZW1vcnkuYyByZWdpc3RlcnMuYyBzdGFjay5jCithbGw6ICQoTU9EVUxFKS5vCiAKLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pIGRiZy50YWIubyBsZXgueXkubworQE1BS0VfUlVMRVNACiAKLWFsbDogJChNT0RVTEUpLm8gZGJnLnRhYi5vIGxleC55eS5vCit5LnRhYi5jIHkudGFiLmg6IGRiZy55CisJJChZQUNDKSAtZCAtdCBkYmcueQogCi1kYmcudGFiLmMgZGJnLnRhYi5oOiBkYmcueQotCSQoQklTT04pIC1iIGRiZyAtZCBkYmcueQorbGV4Lnl5LmM6IGRlYnVnLmwKKwkkKExFWCkgLTggLUkgZGVidWcubAogCi1sZXgueXkuYzogZGVidWcubCBkYmcudGFiLmgKLQkkKEZMRVgpIC04IC1JIGRlYnVnLmwKLQotLmMubzoKLQkkKENPTVBJTEUpIC1jIC1vICQqLm8gJDwKLSAKLSQoTU9EVUxFKS5vOiAkKE9CSlMpIHJlYWRsaW5lCi0JJChMRCkgJChMRENPTUJJTkVGTEFHUykgJChPQkpTKSByZWFkbGluZS9yZWFkbGluZS5vIC1vICQoTU9EVUxFKS5vCi0KLXJlYWRsaW5lOiBkdW1teQotCWNkIHJlYWRsaW5lOyAkKE1BS0UpICdDQz0kKENDKScgJ0NGTEFHUz0kKENGTEFHUyknICdMRD0kKExEKScgJ0xEQ09NQklORUZMQUdTPSQoTERDT01CSU5FRkxBR1MpJwotCi1kZXBlbmQ6Ci0Jc2VkICcvXCNcI1wjIERlcGVuZGVuY2llcy9xJyA8IE1ha2VmaWxlID4gdG1wX21ha2UKLQkkKENDKSAkKERJVklOQ0wpICQoWElOQ0wpIC1NTSAqLmMgPj4gdG1wX21ha2UKLQltdiB0bXBfbWFrZSBNYWtlZmlsZQotCi1jbGVhbjoKLQkoY2QgcmVhZGxpbmU7ICQoTUFLRSkgY2xlYW4pCi0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0Jcm0gLWYgZGJnLnRhYi5jIGRiZy50YWIuaCBsZXgueXkuYyB5LnRhYi5jIHkudGFiLmgKLQotZGlzdGNsZWFuOgotCShjZCByZWFkbGluZTsgJChNQUtFKSBkaXN0Y2xlYW4pCi0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIGRiZy50YWIuYyBkYmcudGFiLmggbGV4Lnl5LmMgeS50YWIuYyB5LnRhYi5oIHRtcF9tYWtlIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZGJnLnRhYi5vOiBkYmcudGFiLmMKLWxleC55eS5vOiBsZXgueXkuYwotIAotZHVtbXk6CitjbGVhbjo6CisJcm0gLWYgeS50YWIuYyB5LnRhYi5oIGxleC55eS5jCiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9kYmcueSBiL2RlYnVnZ2VyL2RiZy55CmluZGV4IDI0YmRlMGMuLjVhYTY3ODAgMTAwNjQ0Ci0tLSBhL2RlYnVnZ2VyL2RiZy55CisrKyBiL2RlYnVnZ2VyL2RiZy55CkBAIC02NSw2ICs2NSw3IEBACiAJfCBFTkFCTEUgTlVNICdcbicgICAgICAgeyBERUJVR19FbmFibGVCcmVha3BvaW50KCAkMiwgVFJVRSApOyB9CiAJfCBESVNBQkxFIE5VTSAnXG4nICAgICAgeyBERUJVR19FbmFibGVCcmVha3BvaW50KCAkMiwgRkFMU0UgKTsgfQogCXwgQlJFQUsgJyonIGFkZHIgJ1xuJyAgIHsgREVCVUdfQWRkQnJlYWtwb2ludCggJiQzICk7IH0KKyAgICAgICAgfCBCUkVBSyBzeW1ib2wgJ1xuJyAgICAgeyBERUJVR19BZGRCcmVha3BvaW50KCAmJDIgKTsgfQogICAgICAgICB8IEJSRUFLICdcbicgICAgICAgICAgICB7IERCR19BRERSIGFkZHIgPSB7IENTX3JlZyhERUJVR19jb250ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFSVBfcmVnKERFQlVHX2NvbnRleHQpIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfQWRkQnJlYWtwb2ludCggJmFkZHIgKTsKQEAgLTE0MCw3ICsxNDEsNyBAQAogICAgIGNoYXIgU3ltYm9sVGFibGVGaWxlWzI1Nl07CiAgICAgaW50IGluc3RyX2xlbiA9IDAsIG5ld21vZGU7CiAjaWZkZWYgWVlERUJVRwotICAgIHl5ZGVidWcgPSAxOworICAgIHl5ZGVidWcgPSAwOwogI2VuZGlmCiAKICAgICB5eWluID0gc3RkaW47CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9kZWJ1Zy5sIGIvZGVidWdnZXIvZGVidWcubAppbmRleCBhZjExZGI0Li4yOTMyMWU3IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9kZWJ1Zy5sCisrKyBiL2RlYnVnZ2VyL2RlYnVnLmwKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJkZWJ1Z2dlci5oIgotI2luY2x1ZGUgImRiZy50YWIuaCIKKyNpbmNsdWRlICJ5LnRhYi5oIgogCiAjaWZkZWYgVVNFX1JFQURMSU5FCiAjdW5kZWYgWVlfSU5QVVQKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3JlYWRsaW5lL01ha2VmaWxlLmluIGIvZGVidWdnZXIvcmVhZGxpbmUvTWFrZWZpbGUuaW4KaW5kZXggODczZjNkMi4uZDNiMGNhZCAxMDA2NDQKLS0tIGEvZGVidWdnZXIvcmVhZGxpbmUvTWFrZWZpbGUuaW4KKysrIGIvZGVidWdnZXIvcmVhZGxpbmUvTWFrZWZpbGUuaW4KQEAgLTEsNDEgKzEsMTIgQEAKLUNDIAk9IEBDQ0AKLUNGTEFHUyAJPSBAQ0ZMQUdTQAotREVGUyAgICA9IEBERUZTQAotWElOQ0wgCT0gQHhfaW5jbHVkZXNACi1UT1BTUkMgID0gQHRvcF9zcmNkaXJACi1ESVZJTkNMID0gLUkkKFRPUFNSQykvaW5jbHVkZQotTEQJPSBATERACi1MRENPTUJJTkVGTEFHUyA9IEBMRENPTUJJTkVGTEFHU0AKLURJVkRFRlMJPSAkKERFRlMpIC1ESElERSAtREFOU0lfQVJST1dTCitUT1BTUkMgICAgID0gQHRvcF9zcmNkaXJACitFWFRSQV9ERUZTID0gLURISURFIC1EQU5TSV9BUlJPV1MKIAorTU9EVUxFID0gcmVhZGxpbmUKIAotTU9EVUxFIAk9IHJlYWRsaW5lCi0KLVNSQ1MgCT0gZWRpdGxpbmUuYyBzeXN1bml4LmMKLQotT0JKUyA9ICQoU1JDUzouYz0ubykKLQotLmMubzoKLQkkKENDKSAtYyAkKERJVkRFRlMpICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKK0NfU1JDUyA9IGVkaXRsaW5lLmMgc3lzdW5peC5jCiAKIGFsbDogJChNT0RVTEUpLm8KIAotJChNT0RVTEUpLm86ICQoT0JKUykKLQkkKExEKSAkKExEQ09NQklORUZMQUdTKSAkKE9CSlMpIC1vICQoTU9EVUxFKS5vCi0KLWRlcGVuZDoKLQlzZWQgJy9cI1wjXCMgRGVwZW5kZW5jaWVzL3EnIDwgTWFrZWZpbGUgPiB0bXBfbWFrZQotCSQoQ0MpICQoRElWSU5DTCkgJChYSU5DTCkgLU1NICouYyA+PiB0bXBfbWFrZQotCW12IHRtcF9tYWtlIE1ha2VmaWxlCi0KLWNsZWFuOgotCXJtIC1mICoubyBcIypcIyAqfiAqLmJhayB0bXBfbWFrZQotCi1kaXN0Y2xlYW46IGNsZWFuCi0Jcm0gLWYgTWFrZWZpbGUKLQotY291bnRyeWNsZWFuOgotCi1kdW1teToKK0BNQUtFX1JVTEVTQAogCiAjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvaWYxNjMyL0ltYWtlZmlsZSBiL2lmMTYzMi9JbWFrZWZpbGUKaW5kZXggNmUzMmNhYi4uOGViNmMxZSAxMDA2NDQKLS0tIGEvaWYxNjMyL0ltYWtlZmlsZQorKysgYi9pZjE2MzIvSW1ha2VmaWxlCkBAIC00Myw2ICs0Myw4IEBACiAJd2lucHJvY3Muc3BlYyBcCiAJd2luc29jay5zcGVjCiBETExTMzIgPSBcCisJYWR2YXBpMzIuc3BlYyBcCisJY29tZGxnMzIuc3BlYyBcCiAJZ2RpMzIuc3BlYyBcCiAJa2VybmVsMzIuc3BlYyBcCiAJc2hlbGwzMi5zcGVjIFwKZGlmZiAtLWdpdCBhL2lmMTYzMi9NYWtlZmlsZS5pbiBiL2lmMTYzMi9NYWtlZmlsZS5pbgppbmRleCA0ZWFiNjJjLi41MmUwYTE4IDEwMDY0NAotLS0gYS9pZjE2MzIvTWFrZWZpbGUuaW4KKysrIGIvaWYxNjMyL01ha2VmaWxlLmluCkBAIC0xLDE3ICsxLDcgQEAKLUNDIAk9IEBDQ0AKLUNGTEFHUyAJPSBAQ0ZMQUdTQAotWElOQ0wgCT0gQHhfaW5jbHVkZXNACi1UT1BTUkMgID0gQHRvcF9zcmNkaXJACi1ESVZJTkNMID0gLUkkKFRPUFNSQykvaW5jbHVkZQotTEQJPSBATERACi1MRENPTUJJTkVGTEFHUyA9IEBMRENPTUJJTkVGTEFHU0AKLUJVSUxECT0gJChUT1BTUkMpL3Rvb2xzL2J1aWxkCi1AU0VUX01BS0VACitUT1BTUkMgPSBAdG9wX3NyY2RpckAKK0JVSUxEICA9ICQoVE9QU1JDKS90b29scy9idWlsZAogCi0KLU1PRFVMRSAJPSBpZjE2MzIKLQotU1JDUyAJPSBjYWxsYmFjay5jIHJlbGF5LmMgcmVsYXkzMi5jCitNT0RVTEUgPSBpZjE2MzIKIAogRExMUzE2CT0gY29tbWRsZy5zcGVjIGNvbXBvYmouc3BlYyBkZGVtbC5zcGVjIGdkaS5zcGVjIGtlcm5lbC5zcGVjIFwKIAlrZXlib2FyZC5zcGVjIG1tc3lzdGVtLnNwZWMgbW91c2Uuc3BlYyBvbGUyLnNwZWMgb2xlMmNvbnYuc3BlYyBcCkBAIC0xOSwyMiArOSwyNCBAQAogCXNoZWxsLnNwZWMgc291bmQuc3BlYyBzdG9yYWdlLnNwZWMgc3RyZXNzLnNwZWMgc3lzdGVtLnNwZWMgXAogCXRvb2xoZWxwLnNwZWMgdXNlci5zcGVjIHdpbjg3ZW0uc3BlYyB3aW5wcm9jcy5zcGVjIHdpbnNvY2suc3BlYwogCi1ETExTMzIJPSBnZGkzMi5zcGVjIGtlcm5lbDMyLnNwZWMgc2hlbGwzMi5zcGVjIHVzZXIzMi5zcGVjIHdpbnByb2NzMzIuc3BlYwotCi0KLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pICQoRExMUzE2Oi5zcGVjPS5vKSAkKERMTFMzMjouc3BlYz0ubykgY2FsbDE2Lm8gY2FsbDMyLm8KK0RMTFMzMgk9IGFkdmFwaTMyLnNwZWMgY29tZGxnMzIuc3BlYyBnZGkzMi5zcGVjIGtlcm5lbDMyLnNwZWMgc2hlbGwzMi5zcGVjIHVzZXIzMi5zcGVjIHdpbnByb2NzMzIuc3BlYwogCiBTUEVDMTZfRklMRVMgPSAkKERMTFMxNjouc3BlYz0uUykKIFNQRUMzMl9GSUxFUyA9ICQoRExMUzMyOi5zcGVjPS5jKQogCitDX1NSQ1MgPSBcCisJJChTUEVDMzJfRklMRVMpIFwKKwljYWxsYmFjay5jIFwKKwlyZWxheS5jIFwKKwlyZWxheTMyLmMKKworQVNNX1NSQ1MgPSBcCisJJChTUEVDMTZfRklMRVMpIFwKKwljYWxsMTYuUyBcCisJY2FsbDMyLlMKKwogLlNVRkZJWEVTOiAuc3BlYwogCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKLQotLlMubzoKLQkkKENDKSAtYyAtbyAkKi5vICQ8ICAKLQogLnNwZWMuUzoKIAkkKEJVSUxEKSAtc3BlYzE2ICQ8ID4gJCouUwogCkBAIC00MywxMCArMzUsMTIgQEAKIAogYWxsOiBjaGVja2J1aWxkICQoTU9EVUxFKS5vCiAKLSQoU1BFQzE2X0ZJTEVTKSAkKFNQRUMzMl9GSUxFUyk6ICQoVE9QU1JDKS90b29scy9idWlsZAorQE1BS0VfUlVMRVNACiAKLWNoZWNrYnVpbGQ6Ci0JY2QgJChUT1BTUkMpL3Rvb2xzOyAkKE1BS0UpICdDQz0kKENDKScgJ0NGTEFHUz0kKENGTEFHUyknICdMRD0kKExEKScgJ0xEQ09NQklORUZMQUdTPSQoTERDT01CSU5FRkxBR1MpJyBidWlsZAorJChTUEVDMTZfRklMRVMpICQoU1BFQzMyX0ZJTEVTKTogJChCVUlMRCkKKworJChCVUlMRCkgY2hlY2tidWlsZDoKKwljZCAkKFRPUFNSQykvdG9vbHM7ICQoTUFLRSkgJ0NDPSQoQ0MpJyAnQ0ZMQUdTPSQoQ0ZMQUdTKScgJ0RFRlM9JChERUZTKScgJ0xBTkc9JChMQU5HKScgYnVpbGQKIAogY2FsbDE2LlM6ICQoVE9QU1JDKS9pbmNsdWRlL2NhbGxiYWNrLmggJChCVUlMRCkKIAkkKEJVSUxEKSAtY2FsbDE2IGBjYXQgJChUT1BTUkMpL2luY2x1ZGUvY2FsbGJhY2suaCB8IGdyZXAgImV4dGVybi4qQ2FsbFRvMTZfIiB8IHNlZCAncy8uKkNhbGxUbzE2X1woLipcKSguKi9cMS8nIHwgc29ydCB8IHVuaXFgID4gY2FsbDE2LlMKQEAgLTU0LDIzICs0OCw3IEBACiBjYWxsMzIuUzogJChTUEVDMTZfRklMRVMpCiAJJChCVUlMRCkgLWNhbGwzMiBgY2F0ICQoU1BFQzE2X0ZJTEVTKSB8IGdyZXAgQ2FsbFRvMzJfIHwgc2VkICdzLy4qQ2FsbFRvMzJfXCguKlwpL1wxLycgfCBzb3J0IHwgdW5pcWAgPiBjYWxsMzIuUwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gJChTUkNTKSA+PiB0bXBfbWFrZQotCW12IHRtcF9tYWtlIE1ha2VmaWxlCi0KLWNsZWFuOgotCXJtIC1mICoubyBcIypcIyAqfiAqLmJhayB0bXBfbWFrZQotCXJtIC1mICQoRExMUzE2Oi5zcGVjPS5TKSAkKERMTFMzMjouc3BlYz0uYykgY2FsbDMyLlMgY2FsbDE2LlMKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZHVtbXk6CitjbGVhbjo6CisJcm0gLWYgJChTUEVDMTZfRklMRVMpICQoU1BFQzMyX0ZJTEVTKSBjYWxsMzIuUyBjYWxsMTYuUwogCiAjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2FkdmFwaTMyLnNwZWMgYi9pZjE2MzIvYWR2YXBpMzIuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMzODk5Ci0tLSAvZGV2L251bGwKKysrIGIvaWYxNjMyL2FkdmFwaTMyLnNwZWMKQEAgLTAsMCArMSwyMDQgQEAKK25hbWUJYWR2YXBpMzIKK2Jhc2UJMQorCiswMDAwIHN0dWIgQWJvcnRTeXN0ZW1TaHV0ZG93bkEKKzAwMDEgc3R1YiBBYm9ydFN5c3RlbVNodXRkb3duVworMDAwMiBzdHViIEFjY2Vzc0NoZWNrCiswMDAzIHN0dWIgQWNjZXNzQ2hlY2tBbmRBdWRpdEFsYXJtQQorMDAwNCBzdHViIEFjY2Vzc0NoZWNrQW5kQXVkaXRBbGFybVcKKzAwMDUgc3R1YiBBZGRBY2Nlc3NBbGxvd2VkQWNlCiswMDA2IHN0dWIgQWRkQWNjZXNzRGVuaWVkQWNlCiswMDA3IHN0dWIgQWRkQWNlCiswMDA4IHN0dWIgQWRkQXVkaXRBY2Nlc3NBY2UKKzAwMDkgc3R1YiBBZGp1c3RUb2tlbkdyb3VwcworMDAxMCBzdHViIEFkanVzdFRva2VuUHJpdmlsZWdlcworMDAxMSBzdHViIEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAorMDAxMiBzdHViIEFsbG9jYXRlTG9jYWxseVVuaXF1ZUlkCiswMDEzIHN0dWIgQXJlQWxsQWNjZXNzZXNHcmFudGVkCiswMDE0IHN0dWIgQXJlQW55QWNjZXNzZXNHcmFudGVkCiswMDE1IHN0dWIgQmFja3VwRXZlbnRMb2dBCiswMDE2IHN0dWIgQmFja3VwRXZlbnRMb2dXCiswMDE3IHN0dWIgQ2hhbmdlU2VydmljZUNvbmZpZ0EKKzAwMTggc3R1YiBDaGFuZ2VTZXJ2aWNlQ29uZmlnVworMDAxOSBzdHViIENsZWFyRXZlbnRMb2dBCiswMDIwIHN0dWIgQ2xlYXJFdmVudExvZ1cKKzAwMjEgc3R1YiBDbG9zZUV2ZW50TG9nCiswMDIyIHN0dWIgQ2xvc2VTZXJ2aWNlSGFuZGxlCiswMDIzIHN0dWIgQ29udHJvbFNlcnZpY2UKKzAwMjQgc3R1YiBDb3B5U2lkCiswMDI1IHN0dWIgQ3JlYXRlUHJpdmF0ZU9iamVjdFNlY3VyaXR5CiswMDI2IHN0dWIgQ3JlYXRlUHJvY2Vzc0FzVXNlckEKKzAwMjcgc3R1YiBDcmVhdGVQcm9jZXNzQXNVc2VyVworMDAyOCBzdHViIENyZWF0ZVNlcnZpY2VBCiswMDI5IHN0dWIgQ3JlYXRlU2VydmljZVcKKzAwMzAgc3R1YiBEZWxldGVBY2UKKzAwMzEgc3R1YiBEZWxldGVTZXJ2aWNlCiswMDMyIHN0dWIgRGVyZWdpc3RlckV2ZW50U291cmNlCiswMDMzIHN0dWIgRGVzdHJveVByaXZhdGVPYmplY3RTZWN1cml0eQorMDAzNCBzdHViIER1cGxpY2F0ZVRva2VuCiswMDM1IHN0dWIgRW51bURlcGVuZGVudFNlcnZpY2VzQQorMDAzNiBzdHViIEVudW1EZXBlbmRlbnRTZXJ2aWNlc1cKKzAwMzcgc3R1YiBFbnVtU2VydmljZXNTdGF0dXNBCiswMDM4IHN0dWIgRW51bVNlcnZpY2VzU3RhdHVzVworMDAzOSBzdHViIEVxdWFsUHJlZml4U2lkCiswMDQwIHN0dWIgRXF1YWxTaWQKKzAwNDEgc3R1YiBGaW5kRmlyc3RGcmVlQWNlCiswMDQyIHN0dWIgRnJlZVNpZAorMDA0MyBzdHViIEdldEFjZQorMDA0NCBzdHViIEdldEFjbEluZm9ybWF0aW9uCiswMDQ1IHN0dWIgR2V0RmlsZVNlY3VyaXR5QQorMDA0NiBzdHViIEdldEZpbGVTZWN1cml0eVcKKzAwNDcgc3R1YiBHZXRLZXJuZWxPYmplY3RTZWN1cml0eQorMDA0OCBzdHViIEdldExlbmd0aFNpZAorMDA0OSBzdHViIEdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzCiswMDUwIHN0dWIgR2V0T2xkZXN0RXZlbnRMb2dSZWNvcmQKKzAwNTEgc3R1YiBHZXRQcml2YXRlT2JqZWN0U2VjdXJpdHkKKzAwNTIgc3R1YiBHZXRTZWN1cml0eURlc2NyaXB0b3JDb250cm9sCiswMDUzIHN0dWIgR2V0U2VjdXJpdHlEZXNjcmlwdG9yRGFjbAorMDA1NCBzdHViIEdldFNlY3VyaXR5RGVzY3JpcHRvckdyb3VwCiswMDU1IHN0dWIgR2V0U2VjdXJpdHlEZXNjcmlwdG9yTGVuZ3RoCiswMDU2IHN0dWIgR2V0U2VjdXJpdHlEZXNjcmlwdG9yT3duZXIKKzAwNTcgc3R1YiBHZXRTZWN1cml0eURlc2NyaXB0b3JTYWNsCiswMDU4IHN0dWIgR2V0U2VydmljZURpc3BsYXlOYW1lQQorMDA1OSBzdHViIEdldFNlcnZpY2VEaXNwbGF5TmFtZVcKKzAwNjAgc3R1YiBHZXRTZXJ2aWNlS2V5TmFtZUEKKzAwNjEgc3R1YiBHZXRTZXJ2aWNlS2V5TmFtZVcKKzAwNjIgc3R1YiBHZXRTaWRJZGVudGlmaWVyQXV0aG9yaXR5CiswMDYzIHN0dWIgR2V0U2lkTGVuZ3RoUmVxdWlyZWQKKzAwNjQgc3R1YiBHZXRTaWRTdWJBdXRob3JpdHkKKzAwNjUgc3R1YiBHZXRTaWRTdWJBdXRob3JpdHlDb3VudAorMDA2NiBzdHViIEdldFRva2VuSW5mb3JtYXRpb24KKzAwNjcgc3R1YiBHZXRVc2VyTmFtZUEKKzAwNjggc3R1YiBHZXRVc2VyTmFtZVcKKzAwNjkgc3R1YiBJbXBlcnNvbmF0ZUxvZ2dlZE9uVXNlcgorMDA3MCBzdHViIEltcGVyc29uYXRlTmFtZWRQaXBlQ2xpZW50CiswMDcxIHN0dWIgSW1wZXJzb25hdGVTZWxmCiswMDcyIHN0dWIgSW5pdGlhbGl6ZUFjbAorMDA3MyBzdHViIEluaXRpYWxpemVTZWN1cml0eURlc2NyaXB0b3IKKzAwNzQgc3R1YiBJbml0aWFsaXplU2lkCiswMDc1IHN0dWIgSW5pdGlhdGVTeXN0ZW1TaHV0ZG93bkEKKzAwNzYgc3R1YiBJbml0aWF0ZVN5c3RlbVNodXRkb3duVworMDA3NyBzdHViIElzVGV4dFVuaWNvZGUKKzAwNzggc3R1YiBJc1ZhbGlkQWNsCiswMDc5IHN0dWIgSXNWYWxpZFNlY3VyaXR5RGVzY3JpcHRvcgorMDA4MCBzdHViIElzVmFsaWRTaWQKKzAwODEgc3R1YiBMb2NrU2VydmljZURhdGFiYXNlCiswMDgyIHN0dWIgTG9nb25Vc2VyQQorMDA4MyBzdHViIExvZ29uVXNlclcKKzAwODQgc3R1YiBMb29rdXBBY2NvdW50TmFtZUEKKzAwODUgc3R1YiBMb29rdXBBY2NvdW50TmFtZVcKKzAwODYgc3R1YiBMb29rdXBBY2NvdW50U2lkQQorMDA4NyBzdHViIExvb2t1cEFjY291bnRTaWRXCiswMDg4IHN0dWIgTG9va3VwUHJpdmlsZWdlRGlzcGxheU5hbWVBCiswMDg5IHN0dWIgTG9va3VwUHJpdmlsZWdlRGlzcGxheU5hbWVXCiswMDkwIHN0dWIgTG9va3VwUHJpdmlsZWdlTmFtZUEKKzAwOTEgc3R1YiBMb29rdXBQcml2aWxlZ2VOYW1lVworMDA5MiBzdHViIExvb2t1cFByaXZpbGVnZVZhbHVlQQorMDA5MyBzdHViIExvb2t1cFByaXZpbGVnZVZhbHVlVworMDA5NCBzdHViIE1ha2VBYnNvbHV0ZVNECiswMDk1IHN0dWIgTWFrZVNlbGZSZWxhdGl2ZVNECiswMDk2IHN0dWIgTWFwR2VuZXJpY01hc2sKKzAwOTcgc3R1YiBOb3RpZnlCb290Q29uZmlnU3RhdHVzCiswMDk4IHN0dWIgTm90aWZ5Q2hhbmdlRXZlbnRMb2cKKzAwOTkgc3R1YiBPYmplY3RDbG9zZUF1ZGl0QWxhcm1BCiswMTAwIHN0dWIgT2JqZWN0Q2xvc2VBdWRpdEFsYXJtVworMDEwMSBzdHViIE9iamVjdE9wZW5BdWRpdEFsYXJtQQorMDEwMiBzdHViIE9iamVjdE9wZW5BdWRpdEFsYXJtVworMDEwMyBzdHViIE9iamVjdFByaXZpbGVnZUF1ZGl0QWxhcm1BCiswMTA0IHN0dWIgT2JqZWN0UHJpdmlsZWdlQXVkaXRBbGFybVcKKzAxMDUgc3R1YiBPcGVuQmFja3VwRXZlbnRMb2dBCiswMTA2IHN0dWIgT3BlbkJhY2t1cEV2ZW50TG9nVworMDEwNyBzdHViIE9wZW5FdmVudExvZ0EKKzAxMDggc3R1YiBPcGVuRXZlbnRMb2dXCiswMTA5IHN0dWIgT3BlblByb2Nlc3NUb2tlbgorMDExMCBzdHViIE9wZW5TQ01hbmFnZXJBCiswMTExIHN0dWIgT3BlblNDTWFuYWdlclcKKzAxMTIgc3R1YiBPcGVuU2VydmljZUEKKzAxMTMgc3R1YiBPcGVuU2VydmljZVcKKzAxMTQgc3R1YiBPcGVuVGhyZWFkVG9rZW4KKzAxMTUgc3R1YiBQcml2aWxlZ2VDaGVjaworMDExNiBzdHViIFByaXZpbGVnZWRTZXJ2aWNlQXVkaXRBbGFybUEKKzAxMTcgc3R1YiBQcml2aWxlZ2VkU2VydmljZUF1ZGl0QWxhcm1XCiswMTE4IHN0dWIgUXVlcnlTZXJ2aWNlQ29uZmlnQQorMDExOSBzdHViIFF1ZXJ5U2VydmljZUNvbmZpZ1cKKzAxMjAgc3R1YiBRdWVyeVNlcnZpY2VMb2NrU3RhdHVzQQorMDEyMSBzdHViIFF1ZXJ5U2VydmljZUxvY2tTdGF0dXNXCiswMTIyIHN0dWIgUXVlcnlTZXJ2aWNlT2JqZWN0U2VjdXJpdHkKKzAxMjMgc3R1YiBRdWVyeVNlcnZpY2VTdGF0dXMKKzAxMjQgc3R1YiBSZWFkRXZlbnRMb2dBCiswMTI1IHN0dWIgUmVhZEV2ZW50TG9nVworMDEyNiBzdHViIFJlZ0Nsb3NlS2V5CiswMTI3IHN0dWIgUmVnQ29ubmVjdFJlZ2lzdHJ5QQorMDEyOCBzdHViIFJlZ0Nvbm5lY3RSZWdpc3RyeVcKKzAxMjkgc3R1YiBSZWdDcmVhdGVLZXlBCiswMTMwIHN0dWIgUmVnQ3JlYXRlS2V5RXhBCiswMTMxIHN0dWIgUmVnQ3JlYXRlS2V5RXhXCiswMTMyIHN0dWIgUmVnQ3JlYXRlS2V5VworMDEzMyBzdHViIFJlZ0RlbGV0ZUtleUEKKzAxMzQgc3R1YiBSZWdEZWxldGVLZXlXCiswMTM1IHN0dWIgUmVnRGVsZXRlVmFsdWVBCiswMTM2IHN0dWIgUmVnRGVsZXRlVmFsdWVXCiswMTM3IHN0dWIgUmVnRW51bUtleUEKKzAxMzggc3R1YiBSZWdFbnVtS2V5RXhBCiswMTM5IHN0dWIgUmVnRW51bUtleUV4VworMDE0MCBzdHViIFJlZ0VudW1LZXlXCiswMTQxIHN0dWIgUmVnRW51bVZhbHVlQQorMDE0MiBzdHViIFJlZ0VudW1WYWx1ZVcKKzAxNDMgc3R1YiBSZWdGbHVzaEtleQorMDE0NCBzdHViIFJlZ0dldEtleVNlY3VyaXR5CiswMTQ1IHN0dWIgUmVnTG9hZEtleUEKKzAxNDYgc3R1YiBSZWdMb2FkS2V5VworMDE0NyBzdHViIFJlZ05vdGlmeUNoYW5nZUtleVZhbHVlCiswMTQ4IHN0dWIgUmVnT3BlbktleUEKKzAxNDkgc3R1YiBSZWdPcGVuS2V5RXhBCiswMTUwIHN0dWIgUmVnT3BlbktleUV4VworMDE1MSBzdHViIFJlZ09wZW5LZXlXCiswMTUyIHN0dWIgUmVnUXVlcnlJbmZvS2V5QQorMDE1MyBzdHViIFJlZ1F1ZXJ5SW5mb0tleVcKKzAxNTQgc3R1YiBSZWdRdWVyeU11bHRpcGxlVmFsdWVzQQorMDE1NSBzdHViIFJlZ1F1ZXJ5TXVsdGlwbGVWYWx1ZXNXCiswMTU2IHN0dWIgUmVnUXVlcnlWYWx1ZUEKKzAxNTcgc3R1YiBSZWdRdWVyeVZhbHVlRXhBCiswMTU4IHN0dWIgUmVnUXVlcnlWYWx1ZUV4VworMDE1OSBzdHViIFJlZ1F1ZXJ5VmFsdWVXCiswMTYwIHN0dWIgUmVnUmVtYXBQcmVEZWZLZXkKKzAxNjEgc3R1YiBSZWdSZXBsYWNlS2V5QQorMDE2MiBzdHViIFJlZ1JlcGxhY2VLZXlXCiswMTYzIHN0dWIgUmVnUmVzdG9yZUtleUEKKzAxNjQgc3R1YiBSZWdSZXN0b3JlS2V5VworMDE2NSBzdHViIFJlZ1NhdmVLZXlBCiswMTY2IHN0dWIgUmVnU2F2ZUtleVcKKzAxNjcgc3R1YiBSZWdTZXRLZXlTZWN1cml0eQorMDE2OCBzdHViIFJlZ1NldFZhbHVlQQorMDE2OSBzdHViIFJlZ1NldFZhbHVlRXhBCiswMTcwIHN0dWIgUmVnU2V0VmFsdWVFeFcKKzAxNzEgc3R1YiBSZWdTZXRWYWx1ZVcKKzAxNzIgc3R1YiBSZWdVbkxvYWRLZXlBCiswMTczIHN0dWIgUmVnVW5Mb2FkS2V5VworMDE3NCBzdHViIFJlZ2lzdGVyRXZlbnRTb3VyY2VBCiswMTc1IHN0dWIgUmVnaXN0ZXJFdmVudFNvdXJjZVcKKzAxNzYgc3R1YiBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlckEKKzAxNzcgc3R1YiBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlclcKKzAxNzggc3R1YiBSZXBvcnRFdmVudEEKKzAxNzkgc3R1YiBSZXBvcnRFdmVudFcKKzAxODAgc3R1YiBSZXZlcnRUb1NlbGYKKzAxODEgc3R1YiBTZXRBY2xJbmZvcm1hdGlvbgorMDE4MiBzdHViIFNldEZpbGVTZWN1cml0eUEKKzAxODMgc3R1YiBTZXRGaWxlU2VjdXJpdHlXCiswMTg0IHN0dWIgU2V0S2VybmVsT2JqZWN0U2VjdXJpdHkKKzAxODUgc3R1YiBTZXRQcml2YXRlT2JqZWN0U2VjdXJpdHkKKzAxODYgc3R1YiBTZXRTZWN1cml0eURlc2NyaXB0b3JEYWNsCiswMTg3IHN0dWIgU2V0U2VjdXJpdHlEZXNjcmlwdG9yR3JvdXAKKzAxODggc3R1YiBTZXRTZWN1cml0eURlc2NyaXB0b3JPd25lcgorMDE4OSBzdHViIFNldFNlY3VyaXR5RGVzY3JpcHRvclNhY2wKKzAxOTAgc3R1YiBTZXRTZXJ2aWNlQml0cworMDE5MSBzdHViIFNldFNlcnZpY2VPYmplY3RTZWN1cml0eQorMDE5MiBzdHViIFNldFNlcnZpY2VTdGF0dXMKKzAxOTMgc3R1YiBTZXRUaHJlYWRUb2tlbgorMDE5NCBzdHViIFNldFRva2VuSW5mb3JtYXRpb24KKzAxOTUgc3R1YiBTdGFydFNlcnZpY2VBCiswMTk2IHN0dWIgU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJBCiswMTk3IHN0dWIgU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXJXCiswMTk4IHN0dWIgU3RhcnRTZXJ2aWNlVworMDE5OSBzdHViIFVubG9ja1NlcnZpY2VEYXRhYmFzZQorCmRpZmYgLS1naXQgYS9pZjE2MzIvY2FsbGJhY2suYyBiL2lmMTYzMi9jYWxsYmFjay5jCmluZGV4IGM2MGY0NmEuLjFjYzFmZGUgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9jYWxsYmFjay5jCisrKyBiL2lmMTYzMi9jYWxsYmFjay5jCkBAIC0xMCwyMyArMTAsMzUgQEAKICNpbmNsdWRlICJjYWxsYmFjay5oIgogI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKICNpbmNsdWRlICJ3aW4uaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorI2luY2x1ZGUgInJlbGF5MzIuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJICAgICBDYWxsV2luZG93UHJvYyAgICAoVVNFUi4xMjIpCiAgKi8KIExPTkcgQ2FsbFdpbmRvd1Byb2MoIFdORFBST0MgZnVuYywgSFdORCBod25kLCBXT1JEIG1lc3NhZ2UsCiAJCSAgICAgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtICkKIHsKKyAgICBGVU5DVElPTkFMSUFTICphOwogICAgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKIAogICAgIGlmICghd25kUHRyKSByZXR1cm4gMDsKICAgICBTcHlNZXNzYWdlKGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICByZXR1cm4gQ2FsbFduZFByb2MoIChGQVJQUk9DKWZ1bmMsIHduZFB0ci0+aEluc3RhbmNlLCAKKworICAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgc29tZXRoaW5nIGJldHRlciB0aGFuIDE2IGJpdCByZWxheXMgKi8KKyAgICBpZighQUxJQVNfVXNlQWxpYXNlcyB8fCAhKGE9QUxJQVNfTG9va3VwQWxpYXMoKERXT1JEKWZ1bmMpKSB8fAorICAgICAgICAoIWEtPndpbmUgJiYgIWEtPndpbjMyKSkKKyAgICAgICAgcmV0dXJuIENhbGxXbmRQcm9jKCAoRkFSUFJPQylmdW5jLCB3bmRQdHItPmhJbnN0YW5jZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSApOworICAgIGlmKGEtPndpbmUpCisgICAgICAgIHJldHVybiAoKExPTkcoKikoV09SRCxXT1JELFdPUkQsTE9ORykpKGEtPndpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChod25kLG1lc3NhZ2Usd1BhcmFtLGxQYXJhbSk7CisgICAgaWYoIWEtPndpbjMyKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwiV2hlcmUgaXMgdGhlIFdpbjMyIGNhbGxiYWNrP1xuIik7CisgICAgcmV0dXJuIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MoYS0+d2luMzIsaHduZCxtZXNzYWdlLHdQYXJhbSxsUGFyYW0pOwogfQogCiAKZGlmZiAtLWdpdCBhL2lmMTYzMi9jb21kbGczMi5zcGVjIGIvaWYxNjMyL2NvbWRsZzMyLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4MWNlMwotLS0gL2Rldi9udWxsCisrKyBiL2lmMTYzMi9jb21kbGczMi5zcGVjCkBAIC0wLDAgKzEsMjggQEAKK25hbWUJY29tZGxnMzIKK2Jhc2UJMQorCiswMDAwIHN0dWIgQXJyb3dCdG5XbmRQcm9jCiswMDAxIHN0dWIgQ2hvb3NlQ29sb3JBCiswMDAyIHN0dWIgQ2hvb3NlQ29sb3JXCiswMDAzIHN0dWIgQ2hvb3NlRm9udEEKKzAwMDQgc3R1YiBDaG9vc2VGb250VworMDAwNSBzdHViIENvbW1EbGdFeHRlbmRlZEVycm9yCiswMDA2IHN0dWIgRmluZFRleHRBCiswMDA3IHN0dWIgRmluZFRleHRXCiswMDA4IHN0dWIgR2V0RmlsZVRpdGxlQQorMDAwOSBzdHViIEdldEZpbGVUaXRsZVcKKzAwMTAgc3R1YiBHZXRPcGVuRmlsZU5hbWVBCiswMDExIHN0dWIgR2V0T3BlbkZpbGVOYW1lVworMDAxMiBzdHViIEdldFNhdmVGaWxlTmFtZUEKKzAwMTMgc3R1YiBHZXRTYXZlRmlsZU5hbWVXCiswMDE0IHN0dWIgTG9hZEFsdGVyQml0bWFwCiswMDE1IHN0dWIgUGFnZVNldHVwRGxnQQorMDAxNiBzdHViIFBhZ2VTZXR1cERsZ1cKKzAwMTcgc3R1YiBQcmludERsZ0EKKzAwMTggc3R1YiBQcmludERsZ1cKKzAwMTkgc3R1YiBSZXBsYWNlVGV4dEEKKzAwMjAgc3R1YiBSZXBsYWNlVGV4dFcKKzAwMjEgc3R1YiBXYW50QXJyb3dzCiswMDIyIHN0dWIgZHdMQlN1YmNsYXNzCiswMDIzIHN0dWIgZHdPS1N1YmNsYXNzCisKZGlmZiAtLWdpdCBhL2lmMTYzMi9nZGkuc3BlYyBiL2lmMTYzMi9nZGkuc3BlYwppbmRleCA3ODRhZDY2Li4yZWEzM2YxIDEwMDY0NAotLS0gYS9pZjE2MzIvZ2RpLnNwZWMKKysrIGIvaWYxNjMyL2dkaS5zcGVjCkBAIC0xNTQsNiArMTU0LDcgQEAKIDE3OSBwYXNjYWwxNiBHZXREQ1N0YXRlKHdvcmQpIEdldERDU3RhdGUKIDE4MCBwYXNjYWwxNiBTZXREQ1N0YXRlKHdvcmQgd29yZCkgU2V0RENTdGF0ZQogMTgxIHBhc2NhbDE2IFJlY3RJblJlZ2lvbk9sZCh3b3JkIHB0cikgUmVjdEluUmVnaW9uCisxODggc3R1YiBHZXRUZXh0RXh0ZW50RXgKIDE5MCBzdHViIFNldERDSG9vawogMTkxIHN0dWIgR2V0RENIb29rCiAxOTIgc3R1YiBTZXRIb29rRmxhZ3MKQEAgLTE5Niw2ICsxOTcsMTcgQEAKIDI1MCBwYXNjYWwxNiBDb3B5KHB0ciBwdHIgd29yZCkgQ29weQogMjUzIHN0dWIgRGVsZXRlU3Bvb2xQYWdlCiAyNTQgc3R1YiBTcG9vbEZpbGUKKzI2NyBzdHViIFN0YXJ0RG9jUHJpbnRFcmEKKzI2OCBzdHViIFN0YXJ0UGFnZVByaW50ZXIKKzI2OSBzdHViIFdyaXRlUHJpbnRlcgorMjcwIHN0dWIgRW5kUGFnZVByaW50ZXIKKzI3MSBzdHViIEFib3J0UHJpbnRlcgorMjcyIHN0dWIgRW5kRG9jUHJpbnRlcgorMjc0IHN0dWIgQ2xvc2VQcmludGVyCisyODAgc3R1YiBHZXRSZWFsRHJpdmVySW5mbworMjgxIHN0dWIgRHJ2U2V0UHJpbnRlckRhdGEKKzI4MiBzdHViIERydkdldFByaW50ZXJEYXRhCisyOTkgc3R1YiBFTkdJTkVHRVRDSEFSV0lEVEhFWAogMzAwIHN0dWIgRU5HSU5FRU5VTUVSQVRFRk9OVAogMzAxIHN0dWIgRU5HSU5FREVMRVRFRk9OVAogMzAyIHN0dWIgRU5HSU5FUkVBTElaRUZPTlQKQEAgLTIxMSw2ICsyMjMsOSBAQAogMzEyIHN0dWIgQ29udmVydE91dExpbmVGb250RmlsZQogMzEzIHBhc2NhbDE2IEdldFJhc3Rlcml6ZXJDYXBzKHB0ciB3b3JkKSBHZXRSYXN0ZXJpemVyQ2FwcwogMzE0IHN0dWIgRW5naW5lRXh0VGV4dE91dAorMzE1IHN0dWIgRW5naW5lUmVhbGl6ZUZvbnRFeHQKKzMxNiBzdHViIEVuZ2luZUdldENoYXJXaWR0aFN0cgorMzE3IHN0dWIgRW5naW5lR2V0R2x5cGhCbXBFeHQKIDMzMCBwYXNjYWwxNiBFbnVtRm9udEZhbWlsaWVzKHdvcmQgcHRyIHNlZ3B0ciBsb25nKSBFbnVtRm9udEZhbWlsaWVzCiAzMzIgcGFzY2FsMTYgR2V0S2VybmluZ1BhaXJzKHdvcmQgd29yZCBwdHIpIEdldEtlcm5pbmdQYWlycwogMzQ1IHBhc2NhbDE2IEdldFRleHRBbGlnbih3b3JkKSBHZXRUZXh0QWxpZ24KQEAgLTIyMyw2ICsyMzgsNyBAQAogMzUyIHN0dWIgR2V0UGh5c2ljYWxGb250SGFuZGxlCiAzNTMgc3R1YiBHZXRBc3BlY3RSYXRpb0ZpbHRlcgogMzU0IHN0dWIgU2hyaW5rR0RJSGVhcAorMzU1IHN0dWIgRlRyYXBwaW5nMAogMzYwIHBhc2NhbDE2IENyZWF0ZVBhbGV0dGUocHRyKSBDcmVhdGVQYWxldHRlCiAzNjEgcGFzY2FsMTYgR0RJU2VsZWN0UGFsZXR0ZSh3b3JkIHdvcmQpIEdESVNlbGVjdFBhbGV0dGUKIDM2MiBwYXNjYWwxNiBHRElSZWFsaXplUGFsZXR0ZSh3b3JkKSBHRElSZWFsaXplUGFsZXR0ZQpAQCAtMjQ4LDYgKzI2NCw3IEBACiA0MDAgcGFzY2FsMTYgRmFzdFdpbmRvd0ZyYW1lKHdvcmQgbG9uZyB3b3JkIHdvcmQgbG9uZykgRmFzdFdpbmRvd0ZyYW1lCiA0MDEgc3R1YiBHRElNT1ZFQklUTUFQCiA0MDMgc3R1YiBHRElJTklUMgorNDA0IHN0dWIgR2V0VFRHbHlwaEluZGV4TWFwCiA0MDUgc3R1YiBGSU5BTEdESUlOSVQKIDQwNyBzdHViIENSRUFURVVTRVJCSVRNQVAKIDQwOSBzdHViIENSRUFURVVTRVJESVNDQVJEQUJMRUJJVE1BUApAQCAtMjk2LDQgKzMxMyw2NSBAQAogICAgICAgICAgICAgIFNjYWxlVmlld3BvcnRFeHRFeAogNDg1IHBhc2NhbDE2IFNjYWxlV2luZG93RXh0RXgod29yZCBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQgcHRyKQogICAgICAgICAgICAgIFNjYWxlV2luZG93RXh0RXgKLTQ4NiBzdHViIEdFVEFTUEVDVFJBVElPRklMRVJFWAorNDg2IHN0dWIgR0VUQVNQRUNUUkFUSU9GSUxURVJFWAorNDg5IHN0dWIgQ3JlYXRlRElCU2VjdGlvbgorNDkwIHN0dWIgQ2xvc2VFbmhNZXRhZmlsZQorNDkxIHN0dWIgQ29weUVuaE1ldGFmaWxlCis0OTIgc3R1YiBDcmVhdGVFbmhNZXRhZmlsZQorNDkzIHN0dWIgRGVsZXRlRW5oTWV0YWZpbGUKKzQ5NSBzdHViIEdESUNvbW1lbnQKKzQ5NiBzdHViIEdldEVuaE1ldGFmaWxlCis0OTcgc3R1YiBHZXRFbmhNZXRhZmlsZUJpdHMKKzQ5OCBzdHViIEdldEVuaE1ldGFmaWxlRGVzY3JpcHRpb24KKzQ5OSBzdHViIEdldEVuaE1ldGFmaWxlSGVhZGVyCis1MDEgc3R1YiBHZXRFbmhNZXRhZmlsZVBhbGV0dGVFbnRyaWVzCis1MDIgc3R1YiBQb2x5QmV6aWVyCis1MDMgc3R1YiBQb2x5QmV6aWVyVG8KKzUwNCBzdHViIFBsYXlFbmhNZXRhZmlsZVJlY29yZAorNTA1IHN0dWIgU2V0RW5oTWV0YWZpbGVCaXRzCis1MDYgc3R1YiBTZXRNZXRhUmduCis1MDggc3R1YiBFeHRTZWxlY3RDbGlwUmduCis1MTEgc3R1YiBBYm9ydFBhdGgKKzUxMiBzdHViIEJlZ2luUGF0aAorNTEzIHN0dWIgQ2xvc2VGaWd1cmUKKzUxNCBzdHViIEVuZFBhdGgKKzUxNSBzdHViIEZpbGxQYXRoCis1MTYgc3R1YiBGbGF0dGVuUGF0aAorNTE3IHN0dWIgR2V0UGF0aAorNTE4IHN0dWIgUGF0aFRvUmVnaW9uCis1MTkgc3R1YiBTZWxlY3RDbGlwUGF0aAorNTIwIHN0dWIgU3Ryb2tlQW5kRmlsbFBhdGgKKzUyMSBzdHViIFN0cm9rZVBhdGgKKzUyMiBzdHViIFdpZGVuUGF0aAorNTIzIHN0dWIgRXh0Q3JlYXRlUGVuCis1MjQgc3R1YiBHZXRBcmNEaXJlY3Rpb24KKzUyNSBzdHViIFNldEFyY0RpcmVjdGlvbgorNTI2IHN0dWIgR2V0TWl0ZXJMaW1pdAorNTI3IHN0dWIgU2V0TWl0ZXJMaW1pdAorNTI4IHN0dWIgR0RJUGFyYW1ldGVyc0luZm8KKzUyOSBzdHViIENyZWF0ZUhhbGZ0b25lUGFsZXR0ZQorNjAyIHN0dWIgU2V0RElCQ29sb3JUYWJsZQorNjAzIHN0dWIgR2V0RElCQ29sb3JUYWJsZQorNjA0IHN0dWIgU2V0U29saWRCcnVzaAorNjA1IHN0dWIgU3lzRGVsZXRlT2JqZWN0Cis2MDYgc3R1YiBTZXRNYWdpY0NvbG9ycworNjA3IHN0dWIgR2V0UmVnaW9uRGF0YQorNjA4IHN0dWIgRXh0Q3JlYXRlUmVnaW9uCis2MDkgc3R1YiBHRElGcmVlUmVzb3VyY2VzCis2MTAgc3R1YiBHRElTaWduYWxQcm9jMzIKKzYxMSBzdHViIEdldFJhbmRvbVJnbgorNjEyIHN0dWIgR2V0VGV4dENoYXJTZXQKKzYxMyBzdHViIEVudW1Gb250RmFtaWxpZXNFeAorNjE0IHN0dWIgQWRkTHBrVG9HREkKKzYxNSBzdHViIEdldENoYXJhY3RlclBsYWNlbWVudAorNjE2IHN0dWIgR2V0Rm9udExhbmd1YWdlSW5mbworNjUwIHN0dWIgQnVpbGRJbnZlcnNlVGFibGVESUIKKzcwMSBzdHViIEdESVRIS0NPTk5FQ1RJT05EQVRBTFMKKzcwMiBzdHViIEZUX0dESUZUSEtUSEtDT05ORUNUSU9OREFUQQorNzAzIHN0dWIgRkRUSEtDT05ORUNUSU9OREFUQVNMCis3MDQgc3R1YiBJQ01USEtDT05ORUNUSU9OREFUQVNMCis4MjAgc3R1YiBJQ01DcmVhdGVUcmFuc2Zvcm0KKzgyMSBzdHViIElDTURlbGV0ZVRyYW5zZm9ybQorODIyIHN0dWIgSUNNVHJhbnNsYXRlUkdCCis4MjMgc3R1YiBJQ01UcmFuc2xhdGVSR0JzCis4MjQgc3R1YiBJQ01DaGVja0NPbG9yc0luR2FtdXQKZGlmZiAtLWdpdCBhL2lmMTYzMi9nZGkzMi5zcGVjIGIvaWYxNjMyL2dkaTMyLnNwZWMKaW5kZXggMWU1YjFmNC4uM2ViY2I4NiAxMDA2NDQKLS0tIGEvaWYxNjMyL2dkaTMyLnNwZWMKKysrIGIvaWYxNjMyL2dkaTMyLnNwZWMKQEAgLTIyMSw3ICsyMjEsNyBAQAogMDIxNyBzdHViIEdldFJlZ2lvbkRhdGEKIDAyMTggc3R1YiBHZXRSZWxBYnMKIDAyMTkgc3R1YiBHZXRSZ25Cb3gKLTAyMjAgc3R1YiBHZXRTdG9ja09iamVjdAorMDIyMCBzdGRjYWxsIEdldFN0b2NrT2JqZWN0KGxvbmcpCUdldFN0b2NrT2JqZWN0CiAwMjIxIHN0dWIgR2V0U3RyZXRjaEJsdE1vZGUKIDAyMjIgc3R1YiBHZXRTeXN0ZW1QYWxldHRlRW50cmllcwogMDIyMyBzdHViIEdldFN5c3RlbVBhbGV0dGVVc2UKQEAgLTM1Niw3ICszNTYsNyBAQAogMDM1MiBzdHViIFN0cm9rZUFuZEZpbGxQYXRoCiAwMzUzIHN0dWIgU3Ryb2tlUGF0aAogMDM1NCBzdHViIFN3YXBCdWZmZXJzCi0wMzU1IHN0dWIgVGV4dE91dEEKKzAzNTUgc3RkY2FsbCBUZXh0T3V0QShsb25nIGxvbmcgbG9uZyBwdHIgbG9uZykgVGV4dE91dAogMDM1NiBzdHViIFRleHRPdXRXCiAwMzU3IHN0dWIgVW5sb2FkTmV0d29ya0ZvbnRzCiAwMzU4IHN0dWIgVW5yZWFsaXplT2JqZWN0CmRpZmYgLS1naXQgYS9pZjE2MzIva2VybmVsLnNwZWMgYi9pZjE2MzIva2VybmVsLnNwZWMKaW5kZXggNzg4MTViZi4uNGNmODQyNCAxMDA2NDQKLS0tIGEvaWYxNjMyL2tlcm5lbC5zcGVjCisrKyBiL2lmMTYzMi9rZXJuZWwuc3BlYwpAQCAtMjcsNiArMjcsNyBAQAogMjQgIHBhc2NhbDE2IFVubG9ja1NlZ21lbnQod29yZCkgVW5sb2NrU2VnbWVudAogMjUgIHBhc2NhbCBHbG9iYWxDb21wYWN0KGxvbmcpIEdsb2JhbENvbXBhY3QKIDI2ICBwYXNjYWwxNiBHbG9iYWxGcmVlQWxsKHdvcmQpIEdsb2JhbEZyZWVBbGwKKzI3ICBzdHViIEdldE1vZHVsZU5hbWUKIDI4ICBzdHViIEdsb2JhbE1hc3RlckhhbmRsZQogMjkgIHBhc2NhbDE2IFlpZWxkKCkgWWllbGQKIDMwICBwYXNjYWwxNiBXYWl0RXZlbnQod29yZCkgV2FpdEV2ZW50CkBAIC0xMDUsNyArMTA2LDcgQEAKIDEwNyBwYXNjYWwgU2V0RXJyb3JNb2RlKHdvcmQpIFNldEVycm9yTW9kZQogMTA4IHN0dWIgU3dpdGNoU3RhY2tUbwogMTA5IHN0dWIgU3dpdGNoU3RhY2tCYWNrCi0xMTAgc3R1YiBQYXRjaENvZGVIYW5kbGUKKzExMCBwYXNjYWwxNiBQYXRjaENvZGVIYW5kbGUod29yZCkgUGF0Y2hDb2RlSGFuZGxlCiAxMTEgcGFzY2FsIEdsb2JhbFdpcmUod29yZCkgR2xvYmFsV2lyZQogMTEyIHBhc2NhbDE2IEdsb2JhbFVuV2lyZSh3b3JkKSBHbG9iYWxVbldpcmUKIDExMyBlcXVhdGUgX19BSFNISUZUIDMKQEAgLTEzOSw2ICsxNDAsMTQgQEAKIDEzOSBzdHViIERvU2lnbmFsCiAxNDAgc3R1YiBTZXRTaWdIYW5kbGVyCiAxNDEgc3R1YiBJbml0VGFzazEKKzE0MiBzdHViIEdldFByb2ZpbGVTZWN0aW9uTmFtZXMKKzE0MyBzdHViIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbk5hbWVzCisxNDQgc3R1YiBDcmVhdGVEaXJlY3RvcnkKKzE0NSBzdHViIFJlbW92ZURpcmVjdG9yeQorMTQ2IHN0dWIgRGVsZXRlRmlsZQorMTQ3IHN0dWIgU2V0TGFzdEVycm9yCisxNDggc3R1YiBHZXRMYXN0RXJyb3IKKzE0OSBzdHViIEdldFZlcnNpb25FeAogMTUwIHBhc2NhbDE2IERpcmVjdGVkWWllbGQod29yZCkgRGlyZWN0ZWRZaWVsZAogMTUxIHN0dWIgV2luT2xkQXBDYWxsCiAxNTIgcGFzY2FsMTYgR2V0TnVtVGFza3MoKSBHZXROdW1UYXNrcwpAQCAtMTk2LDYgKzIwNSwyNiBAQAogMjA1IHN0dWIgQ1ZXQnJlYWsKIDIwNiBwYXNjYWwxNiBBbGxvY1NlbGVjdG9yQXJyYXkod29yZCkgQWxsb2NTZWxlY3RvckFycmF5CiAyMDcgcmV0dXJuIElzREJDU0xlYWRCeXRlIDIgMAorMjE2IHN0dWIgUmVnRW51bUtleQorMjE3IHN0dWIgUmVnT3BlbktleQorMjE4IHN0dWIgUmVnQ3JlYXRlS2V5CisyMTkgc3R1YiBSZWdEZWxldGVWYWx1ZQorMjIwIHN0dWIgUmVnQ2xvc2VLZXkKKzIyMSBzdHViIFJlZ1NldFZhbHVlCisyMjIgc3R1YiBSZWdEZWxldGVWYWx1ZQorMjIzIHN0dWIgUmVnRW51bVZhbHVlCisyMjQgc3R1YiBSZWdRdWVyeVZhbHVlCisyMjUgc3R1YiBSZWdRdWVyeVZhbHVlRXgKKzIyNiBzdHViIFJlZ1NldFZhbHVlRXgKKzIyNyBzdHViIFJlZ0ZsdXNoS2V5CisjMjI4IEsyMjgKKyMyMjkgSzIyOQorMjMwIHN0dWIgR2xvYmFsU21hcnRQYWdlTG9jaworMjMxIHN0dWIgR2xvYmFsU21hcnRQYWdlVW5sb2NrCisyMzIgc3R1YiBSZWdMb2FkS2V5CisyMzMgc3R1YiBSZWdVbmxvYWRLZXkKKzIzNCBzdHViIFJlZ1NhdmVLZXkKKzIzNSBzdHViIEludmFsaWRhdGVObHNDYWNoZQogMzEwIHBhc2NhbDE2IExvY2FsSGFuZGxlRGVsdGEod29yZCkgTG9jYWxIYW5kbGVEZWx0YQogMzExIHN0dWIgR2V0U2V0S2VybmVsRG9zUHJvYwogMzE0IHN0dWIgRGVidWdEZWZpbmVTZWdtZW50CkBAIC0yMzAsOSArMjU5LDM1IEBACiAzNDkgcGFzY2FsMTYgX2hyZWFkKHdvcmQgcHRyIGxvbmcpIF9ocmVhZAogMzUwIHBhc2NhbDE2IF9od3JpdGUod29yZCBwdHIgbG9uZykgX2h3cml0ZQogIzM1MSBCVU5OWV8zNTEKKzM1MiBzdHViIGxzdHJjYXRuCiAzNTMgcGFzY2FsIGxzdHJjcHluKHNlZ3B0ciBzZWdwdHIgd29yZCkgbHN0cmNweW4KIDM1NCBzdHViIEdldEFwcENvbXBhdEZsYWdzCiAzNTUgcGFzY2FsMTYgR2V0V2luRGVidWdJbmZvKHB0ciB3b3JkKSBHZXRXaW5EZWJ1Z0luZm8KIDM1NiBwYXNjYWwxNiBTZXRXaW5EZWJ1Z0luZm8ocHRyKSBTZXRXaW5EZWJ1Z0luZm8KKzM2MCBzdHViIE9wZW5GaWxlRXgKKyMzNjEgUElHTEVUXzM2MQogNDAzIHBhc2NhbDE2IEZhclNldE93bmVyKHdvcmQgd29yZCkgRmFyU2V0T3duZXIKIDQwNCBwYXNjYWwxNiBGYXJHZXRPd25lcih3b3JkKSBGYXJHZXRPd25lcgorNDA2IHN0dWIgV3JpdGVQcml2YXRlUHJvZmlsZVN0cnVjdAorNDA3IHN0dWIgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3QKKzQxMSBzdHViIEdldEN1cnJlbnREaXJlY3RvcnkKKzQxMiBzdHViIFNldEN1cnJlbnREaXJlY3RvcnkKKzQxMyBzdHViIEZpbmRGaXJzdEZpbGUKKzQxNCBzdHViIEZpbmROZXh0RmlsZQorNDE1IHN0dWIgRmluZENsb3NlCis0MTYgc3R1YiBXcml0ZVByaXZhdGVQcm9maWxlU2VjdGlvbgorNDE3IHN0dWIgV3JpdGVQcm9maWxlU2VjdGlvbgorNDE4IHN0dWIgR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uCis0MTkgc3R1YiBHZXRQcm9maWxlU2VjdGlvbgorNDIwIHN0dWIgR2V0RmlsZUF0dHJpYnV0ZXMKKzQyMSBzdHViIFNldEZpbGVBdHRyaWJ1dGVzCis0MjIgc3R1YiBHZXREaXNrRnJlZVNwYWNlCis0MzIgc3R1YiBGaWxlVGltZVRvTG9jYWxGaWxlVGltZQorNDkxIHN0dWIgUmVnaXN0ZXJTZXJ2aWNlUHJvY2VzcworNTEzIHN0dWIgTG9hZExpYnJhcnlFeDMyVworNTE0IHN0dWIgRnJlZUxpYnJhcnkzMlcKKzUxNSBzdHViIEdldFByb2NBZGRyZXNzMzJXCis1MTYgc3R1YiBHZXRWRE1Qb2ludGVyMzJXCis1MTcgc3R1YiBDYWxsUHJvYzMyVworNTE4IHN0dWIgQ2FsbFByb2NFeDMyVworNjI3IHN0dWIgSXNCYWRGbGF0UmVhZFdyaXRlUHRyCmRpZmYgLS1naXQgYS9pZjE2MzIvcmVsYXkuYyBiL2lmMTYzMi9yZWxheS5jCmluZGV4IDkzMjJhMjUuLmQzMjVjZTggMTAwNjQ0Ci0tLSBhL2lmMTYzMi9yZWxheS5jCisrKyBiL2lmMTYzMi9yZWxheS5jCkBAIC05OCw3ICs5OCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBSRUxBWV9EZWJ1Z0NhbGwzMgogICovCi12b2lkIFJFTEFZX0RlYnVnQ2FsbDMyKCBpbnQgZnVuY190eXBlLCBjaGFyICphcmdzICkKK3ZvaWQgUkVMQVlfRGVidWdDYWxsMzIoIGludCBmdW5jX3R5cGUsIGNoYXIgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbnRyeV9wb2ludCwgaW50IGFyZ3MzMiApCiB7CiAgICAgU1RBQ0sxNkZSQU1FICpmcmFtZTsKICAgICBzdHJ1Y3QgZGxsX3RhYmxlX3MgKnRhYmxlOwpAQCAtMTU0LDcgKzE1NSw3IEBACiAKICAgICBpZiAoZnVuY190eXBlID09IDIpICAvKiByZWdpc3RlciBmdW5jdGlvbiAqLwogICAgIHsKLSAgICAgICAgc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0ID0gKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKWFyZ3MxNjsKKyAgICAgICAgc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0ICpjb250ZXh0ID0gKHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqKSZhcmdzMzI7CiAgICAgICAgIHByaW50ZiggIiAgICAgQVg9JTA0eCBCWD0lMDR4IENYPSUwNHggRFg9JTA0eCBTST0lMDR4IERJPSUwNHggRVM9JTA0eCBFRkw9JTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgQVhfcmVnKGNvbnRleHQpLCBCWF9yZWcoY29udGV4dCksIENYX3JlZyhjb250ZXh0KSwKICAgICAgICAgICAgICAgICBEWF9yZWcoY29udGV4dCksIFNJX3JlZyhjb250ZXh0KSwgRElfcmVnKGNvbnRleHQpLApAQCAtMTY2LDcgKzE2Nyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBSRUxBWV9EZWJ1Z1JldHVybgogICovCi12b2lkIFJFTEFZX0RlYnVnUmV0dXJuKCBpbnQgZnVuY190eXBlLCBpbnQgcmV0X3ZhbCApCit2b2lkIFJFTEFZX0RlYnVnUmV0dXJuKCBpbnQgZnVuY190eXBlLCBpbnQgcmV0X3ZhbCwgaW50IGFyZ3MzMiApCiB7CiAgICAgU1RBQ0sxNkZSQU1FICpmcmFtZTsKICAgICBzdHJ1Y3QgZGxsX3RhYmxlX3MgKnRhYmxlOwpAQCAtMTkyLDYgKzE5MywxMyBAQAogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6IC8qIHJlZ3MgKi8KICAgICAgICAgcHJpbnRmKCAicmV0dmFsPW5vbmUgZHM9JTA0eFxuIiwgZnJhbWUtPmRzICk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdjb250ZXh0X3N0cnVjdCAqY29udGV4dCA9IChzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKikmYXJnczMyOworICAgICAgICAgICAgcHJpbnRmKCAiICAgICBBWD0lMDR4IEJYPSUwNHggQ1g9JTA0eCBEWD0lMDR4IFNJPSUwNHggREk9JTA0eCBFUz0lMDR4IEVGTD0lMDhseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgQVhfcmVnKGNvbnRleHQpLCBCWF9yZWcoY29udGV4dCksIENYX3JlZyhjb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgRFhfcmVnKGNvbnRleHQpLCBTSV9yZWcoY29udGV4dCksIERJX3JlZyhjb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgRVNfcmVnKGNvbnRleHQpLCBFRkxfcmVnKGNvbnRleHQpICk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvaWYxNjMyL3JlbGF5MzIuYyBiL2lmMTYzMi9yZWxheTMyLmMKaW5kZXggOTYwZDczOS4uMGQwNjMwZCAxMDA2NDQKLS0tIGEvaWYxNjMyL3JlbGF5MzIuYworKysgYi9pZjE2MzIvcmVsYXkzMi5jCkBAIC0xOSwxMCArMTksMjEgQEAKIAogV0lOMzJfYnVpbHRpbgkqV0lOMzJfYnVpbHRpbl9saXN0OwogCisvKiBGdW5jdGlvbnMgYXJlIGluIGdlbmVyYXRlZCBjb2RlICovCit2b2lkIEFEVkFQSTMyX0luaXQoKTsKK3ZvaWQgQ09NRExHMzJfSW5pdCgpOwordm9pZCBHREkzMl9Jbml0KCk7Cit2b2lkIEtFUk5FTDMyX0luaXQoKTsKK3ZvaWQgU0hFTEwzMl9Jbml0KCk7Cit2b2lkIFVTRVIzMl9Jbml0KCk7Cit2b2lkIFdJTlBST0NTMzJfSW5pdCgpOworCiBpbnQgUkVMQVkzMl9Jbml0KHZvaWQpCiB7CiAjaWZuZGVmIFdJTkVMSUIKIAkvKiBBZGQgYSBjYWxsIGZvciBlYWNoIERMTCAqLworCUFEVkFQSTMyX0luaXQoKTsKKwlDT01ETEczMl9Jbml0KCk7CiAJR0RJMzJfSW5pdCgpOwogCUtFUk5FTDMyX0luaXQoKTsKIAlTSEVMTDMyX0luaXQoKTsKQEAgLTM3LDcgKzQ4LDcgQEAKIHsKIAlXSU4zMl9idWlsdGluICppdDsKIAlmb3IoaXQ9V0lOMzJfYnVpbHRpbl9saXN0O2l0O2l0PWl0LT5uZXh0KQotCWlmKHN0cmNtcChuYW1lLGl0LT5uYW1lKT09MCkKKwlpZihzdHJjYXNlY21wKG5hbWUsaXQtPm5hbWUpPT0wKQogCQlyZXR1cm4gaXQ7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NCw5ICs4NSwxMCBAQAogCQlzdHJjbXAoaXRlbSxkbGwtPmZ1bmN0aW9uc1toaW50XS5uYW1lKT09MCkKIAkJcmV0dXJuIGRsbC0+ZnVuY3Rpb25zW2hpbnRdLmRlZmluaXRpb247CiAJLyogaGludCBpcyBpbmNvcnJlY3QsIHNlYXJjaCBmb3IgbmFtZSAqLwotCWZvcihpPTE7aTxkbGwtPnNpemU7aSsrKQotCQlpZihzdHJjbXAoaXRlbSxkbGwtPmZ1bmN0aW9uc1tpXS5uYW1lKT09MCkKLQkJCXJldHVybiBkbGwtPmZ1bmN0aW9uc1tpXS5kZWZpbml0aW9uOworCWZvcihpPTA7aTxkbGwtPnNpemU7aSsrKQorICAgICAgICAgICAgaWYgKGRsbC0+ZnVuY3Rpb25zW2ldLm5hbWUgJiYgIXN0cmNtcChpdGVtLGRsbC0+ZnVuY3Rpb25zW2ldLm5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBkbGwtPmZ1bmN0aW9uc1tpXS5kZWZpbml0aW9uOworCiAJLyogZnVuY3Rpb24gYXQgaGludCBoYXMgbm8gbmFtZSAodW5pbXBsZW1lbnRlZCkgKi8KIAlpZihoaW50ICYmIGhpbnQ8ZGxsLT5zaXplICYmICFkbGwtPmZ1bmN0aW9uc1toaW50XS5uYW1lKQogCXsKZGlmZiAtLWdpdCBhL2lmMTYzMi91c2VyLnNwZWMgYi9pZjE2MzIvdXNlci5zcGVjCmluZGV4IDcyZjJiN2YuLmRkODJhZWUgMTAwNjQ0Ci0tLSBhL2lmMTYzMi91c2VyLnNwZWMKKysrIGIvaWYxNjMyL3VzZXIuc3BlYwpAQCAtMzksNyArMzksNyBAQAogMzggIHBhc2NhbDE2IEdldFdpbmRvd1RleHRMZW5ndGgod29yZCkgR2V0V2luZG93VGV4dExlbmd0aAogMzkgIHBhc2NhbDE2IEJlZ2luUGFpbnQod29yZCBwdHIpIEJlZ2luUGFpbnQKIDQwICBwYXNjYWwxNiBFbmRQYWludCh3b3JkIHB0cikgRW5kUGFpbnQKLTQxICBwYXNjYWwxNiBDcmVhdGVXaW5kb3cocHRyIHB0ciBsb25nIHNfd29yZCBzX3dvcmQgc193b3JkIHNfd29yZAorNDEgIHBhc2NhbDE2IENyZWF0ZVdpbmRvdyhzZWdwdHIgc2VncHRyIGxvbmcgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkCiAJICAgICAgICAgICAgICAgICAgd29yZCB3b3JkIHdvcmQgc2VncHRyKSBDcmVhdGVXaW5kb3cKIDQyICBwYXNjYWwxNiBTaG93V2luZG93KHdvcmQgd29yZCkgU2hvd1dpbmRvdwogNDMgIHBhc2NhbDE2IENsb3NlV2luZG93KHdvcmQpIENsb3NlV2luZG93CkBAIC0xMTYsNiArMTE2LDcgQEAKIDExNSBzdHViIFJlcGx5TWVzc2FnZQogMTE2IHBhc2NhbDE2IFBvc3RBcHBNZXNzYWdlKHdvcmQgd29yZCB3b3JkIGxvbmcpIFBvc3RBcHBNZXNzYWdlCiAxMTggcGFzY2FsMTYgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKGxvbmcpIFJlZ2lzdGVyV2luZG93TWVzc2FnZQorMTE3IHN0dWIgV2luZG93RnJvbURDCiAxMTkgcGFzY2FsICAgR2V0TWVzc2FnZVBvcygpIEdldE1lc3NhZ2VQb3MKIDEyMCBwYXNjYWwgICBHZXRNZXNzYWdlVGltZSgpIEdldE1lc3NhZ2VUaW1lCiAxMjEgcGFzY2FsICAgU2V0V2luZG93c0hvb2soc193b3JkIHNlZ3B0cikgU2V0V2luZG93c0hvb2sKQEAgLTIxNyw3ICsyMTgsNyBAQAogIzIxNiBVU0VSU0VFVVNFUkRPCiAyMTcgcGFzY2FsMTYgTG9va3VwTWVudUhhbmRsZSh3b3JkIHNfd29yZCkgTG9va3VwTWVudUhhbmRsZQogMjE4IHBhc2NhbDE2IERpYWxvZ0JveEluZGlyZWN0KHdvcmQgd29yZCB3b3JkIHNlZ3B0cikgRGlhbG9nQm94SW5kaXJlY3QKLTIxOSBwYXNjYWwxNiBDcmVhdGVEaWFsb2dJbmRpcmVjdCh3b3JkIHB0ciB3b3JkIHNlZ3B0cikgQ3JlYXRlRGlhbG9nSW5kaXJlY3QKKzIxOSBwYXNjYWwxNiBDcmVhdGVEaWFsb2dJbmRpcmVjdCh3b3JkIHNlZ3B0ciB3b3JkIHNlZ3B0cikgQ3JlYXRlRGlhbG9nSW5kaXJlY3QKIDIyMCBwYXNjYWwxNiBMb2FkTWVudUluZGlyZWN0KHB0cikgTG9hZE1lbnVJbmRpcmVjdAogMjIxIHBhc2NhbDE2IFNjcm9sbERDKHdvcmQgc193b3JkIHNfd29yZCBwdHIgcHRyIHdvcmQgcHRyKSBTY3JvbGxEQwogMjIyIHBhc2NhbDE2IEdldEtleWJvYXJkU3RhdGUocHRyKSBHZXRLZXlib2FyZFN0YXRlCkBAIC0yNDEsNyArMjQyLDcgQEAKIDI0MCBwYXNjYWwxNiBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKHdvcmQgd29yZCB3b3JkIHNlZ3B0ciBsb25nKQogICAgICAgICAgICAgIERpYWxvZ0JveEluZGlyZWN0UGFyYW0KIDI0MSBwYXNjYWwxNiBDcmVhdGVEaWFsb2dQYXJhbSh3b3JkIHNlZ3B0ciB3b3JkIHNlZ3B0ciBsb25nKSBDcmVhdGVEaWFsb2dQYXJhbQotMjQyIHBhc2NhbDE2IENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0od29yZCBwdHIgd29yZCBzZWdwdHIgbG9uZykKKzI0MiBwYXNjYWwxNiBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKHdvcmQgc2VncHRyIHdvcmQgc2VncHRyIGxvbmcpCiAgICAgICAgICAgICAgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbQogMjQzIHBhc2NhbCAgIEdldERpYWxvZ0Jhc2VVbml0cygpIEdldERpYWxvZ0Jhc2VVbml0cwogMjQ0IHBhc2NhbDE2IEVxdWFsUmVjdChwdHIgcHRyKSBFcXVhbFJlY3QKQEAgLTI5Nyw2ICsyOTgsNyBAQAogMjkzIHBhc2NhbCAgIENhbGxOZXh0SG9va0V4KHNlZ3B0ciBzX3dvcmQgd29yZCBsb25nKSBDYWxsTmV4dEhvb2tFeAogMjk0IHN0dWIgTG9ja1dpbmRvd1VwZGF0ZQogIzI5OSBNT1VTRV9FVkVOVAorMzAwIHN0dWIgVW5sb2FkSW5zdGFsbGVkRHJpdmVycwogIzMwMSBCT1pPU0xJVkVIRVJFIDotKSkKICMzMDYgQkVBUjMwNgogMzA4IHBhc2NhbCAgIERlZkRsZ1Byb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgRGVmRGxnUHJvYwpAQCAtMzI1LDEyICszMjcsMzEgQEAKIDM1OCBwYXNjYWwxNiBJc01lbnUod29yZCkgSXNNZW51CiAzNTkgcGFzY2FsMTYgR2V0RENFeCh3b3JkIHdvcmQgbG9uZykgR2V0RENFeAogMzYyIHN0dWIgRENIb29rCi0zNjggc3R1YiBDb3B5SWNvbgorMzY0IHN0dWIgTG9va3VwSWNvbklERnJvbURpcmVjdG9yeUV4CiszNjggcGFzY2FsMTYgQ29weUljb24od29yZCB3b3JkKSBDb3B5SWNvbgogMzY5IHN0dWIgQ29weUN1cnNvcgogMzcwIHBhc2NhbDE2IEdldFdpbmRvd1BsYWNlbWVudCh3b3JkIHB0cikgR2V0V2luZG93UGxhY2VtZW50CiAzNzEgcGFzY2FsMTYgU2V0V2luZG93UGxhY2VtZW50KHdvcmQgcHRyKSBTZXRXaW5kb3dQbGFjZW1lbnQKIDM3MiBzdHViIEdldEludGVybmFsSWNvbkhlYWRlcgogMzczIHBhc2NhbDE2IFN1YnRyYWN0UmVjdChwdHIgcHRyIHB0cikgU3VidHJhY3RSZWN0CiszNzUgc3R1YiBEcmF3VGV4dEV4CiszNzYgc3R1YiBTZXRNZXNzYWdlRXh0cmFJbmZvCiszNzggc3R1YiBTZXRQcm9wRXgKKzM3OSBzdHViIEdldFByb3BFeAorMzgwIHN0dWIgUmVtb3ZlUHJvcEV4CiszODEgc3R1YiBVc3JNUFJfVGh1bmtEYXRhMTYKKzM4MiBzdHViIFNldFdpbmRvd0NvbnRleHRIZWxwSUQKKzM4MyBzdHViIEdldFdpbmRvd0NvbnRleHRIZWxwSUQKKzM4NCBzdHViIFNldE1lbnVDb250ZXh0SGVscElECiszODUgc3R1YiBHZXRNZW51Q29udGV4dEhlbHBJRAorMzg5IHN0dWIgTG9hZEltYWdlCiszOTAgc3R1YiBDb3B5SW1hZ2UKKzM5MSBzdHViIFNpZ25hbFByb2MzMgorMzk0IHN0dWIgRHJhd0ljb25FeAorMzk1IHN0dWIgR2V0SWNvbkluZm8KKzM5NyBzdHViIFJlZ2lzdGVyQ2xhc3NFeAorMzk4IHN0dWIgR2V0Q2xhc3NJbmZvRXgKKzM5OSBzdHViIENoaWxkV2luZG93RnJvbVBvaW50RXgKIDQwMCBzdHViIEZpbmFsVXNlckluaXQKIDQwMiBwYXNjYWwxNiBHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdCh3b3JkIHB0ciBzX3dvcmQpCiAgICAgICAgICAgICAgR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQKQEAgLTM0MCw2ICszNjEsNyBAQAogNDA3IHBhc2NhbDE2IENyZWF0ZUljb24od29yZCB3b3JkIHdvcmQgYnl0ZSBieXRlIHB0ciBwdHIpIENyZWF0ZUljb24KIDQwOCBwYXNjYWwxNiBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3Qod29yZCBwdHIgcHRyIHB0cikKIAkgICAgIENyZWF0ZUN1cnNvckljb25JbmRpcmVjdAorNDA5IHN0dWIgSW5pdFRocmVhZElucHV0CiA0MTAgcGFzY2FsMTYgSW5zZXJ0TWVudSh3b3JkIHdvcmQgd29yZCB3b3JkIHB0cikgSW5zZXJ0TWVudQogNDExIHBhc2NhbDE2IEFwcGVuZE1lbnUod29yZCB3b3JkIHdvcmQgcHRyKSBBcHBlbmRNZW51CiA0MTIgcGFzY2FsMTYgUmVtb3ZlTWVudSh3b3JkIHdvcmQgd29yZCkgUmVtb3ZlTWVudQpAQCAtMzU1LDYgKzM3Nyw5IEBACiA0MjEgcGFzY2FsMTYgd3ZzcHJpbnRmKHB0ciBwdHIgcHRyKSB3dnNwcmludGYKIDQyMiBzdHViIERsZ0RpclNlbGVjdEV4CiA0MjMgc3R1YiBEbGdEaXJTZWxlY3RDb21ib0JveEV4Cis0Mjcgc3R1YiBGaW5kV2luZG93RXgKKzQyOCBzdHViIFRpbGVXaW5kb3dzCis0Mjkgc3R1YiBDYXNjYWRlV2luZG93cwogNDMwIHBhc2NhbDE2IGxzdHJjbXAocHRyIHB0cikgbHN0cmNtcAogNDMxIHBhc2NhbCAgIEFuc2lVcHBlcihzZWdwdHIpIFdJTjE2X0Fuc2lVcHBlcgogNDMyIHBhc2NhbCAgIEFuc2lMb3dlcihzZWdwdHIpIFdJTjE2X0Fuc2lMb3dlcgpAQCAtMzY0LDEwICszODksMTYgQEAKIDQzNiBwYXNjYWwxNiBJc0NoYXJMb3dlcihieXRlKSBJc0NoYXJMb3dlcgogNDM3IHBhc2NhbDE2IEFuc2lVcHBlckJ1ZmYocHRyIHdvcmQpIEFuc2lVcHBlckJ1ZmYKIDQzOCBwYXNjYWwxNiBBbnNpTG93ZXJCdWZmKHB0ciB3b3JkKSBBbnNpTG93ZXJCdWZmCis0NDEgc3R1YiBJbnNlcnRNZW51SXRlbQorNDQzIHN0dWIgR2V0TWVudUl0ZW1JbmZvCiA0NDUgcGFzY2FsICAgRGVmRnJhbWVQcm9jKHdvcmQgd29yZCB3b3JkIHdvcmQgbG9uZykgRGVmRnJhbWVQcm9jCis0NDYgc3R1YiBTZXRNZW51SXRlbUluZm8KIDQ0NyBwYXNjYWwgICBEZWZNRElDaGlsZFByb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgRGVmTURJQ2hpbGRQcm9jCis0NDggc3R1YiBEcmF3QW5pbWF0ZWRSZWN0cworNDQ5IHN0dWIgRHJhd1N0YXRlCis0NTAgc3R1YiBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgKIDQ1MSBwYXNjYWwxNiBUcmFuc2xhdGVNRElTeXNBY2NlbCh3b3JkIHB0cikgVHJhbnNsYXRlTURJU3lzQWNjZWwKLTQ1MiBwYXNjYWwxNiBDcmVhdGVXaW5kb3dFeChsb25nIHB0ciBwdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKKzQ1MiBwYXNjYWwxNiBDcmVhdGVXaW5kb3dFeChsb25nIHNlZ3B0ciBzZWdwdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCBzZWdwdHIpIENyZWF0ZVdpbmRvd0V4CiA0NTQgcGFzY2FsMTYgQWRqdXN0V2luZG93UmVjdEV4KHB0ciBsb25nIHdvcmQgbG9uZykgQWRqdXN0V2luZG93UmVjdEV4CiA0NTUgc3R1YiBHZXRJY29uSWQKQEAgLTM4Niw2ICs0MTcsMTEgQEAKIDQ3MSBwYXNjYWwxNiBsc3RyY21waShwdHIgcHRyKSBsc3RyY21waQogNDcyIHBhc2NhbCAgIEFuc2lOZXh0KHNlZ3B0cikgQW5zaU5leHQKIDQ3MyBwYXNjYWwgICBBbnNpUHJldihzZWdwdHIgc2VncHRyKSBBbnNpUHJldgorNDc1IHN0dWIgU2V0U2Nyb2xsSW5mbworNDc2IHN0dWIgR2V0U2Nyb2xsSW5mbworNDc3IHN0dWIgR2V0S2V5Ym9hcmRMYXlvdXROYW1lCis0Nzggc3R1YiBMb2FkS2V5Ym9hcmRMYXlvdXQKKzQ3OSBzdHViIE1lbnVJdGVtRnJvbVBvaW50CiA0ODAgc3R1YiBHZXRVc2VyTG9jYWxPYmpUeXBlCiAjNDgxIEhBUkRXQVJFX0VWRU5UCiA0ODIgcGFzY2FsMTYgRW5hYmxlU2Nyb2xsQmFyKHdvcmQgd29yZCB3b3JkKSBFbmFibGVTY3JvbGxCYXIKQEAgLTQyNCwzICs0NjAsNTcgQEAKIDUzMCBwYXNjYWwxNiBXTmV0R2V0RGlyZWN0b3J5VHlwZShwdHIgcHRyKSBXTmV0R2V0RGlyZWN0b3J5VHlwZQogNTMxIHBhc2NhbDE2IFdOZXREaXJlY3RvcnlOb3RpZnkod29yZCBwdHIgd29yZCkgV05ldERpcmVjdG9yeU5vdGlmeQogNTMyIHBhc2NhbDE2IFdOZXRHZXRQcm9wZXJ0eVRleHQod29yZCB3b3JkIHdvcmQgcHRyIHdvcmQpIFdOZXRHZXRQcm9wZXJ0eVRleHQKKzUzMyBzdHViIFdOZXRJbml0aWFsaXplCis1MzQgc3R1YiBXTmV0TG9nb24KKzY2OSBzdHViIFNldFdpbmRvd1JnbgorNjAwIHN0dWIgR2V0U2hlbGxXaW5kb3cKKzYwMSBzdHViIERvSG90a2V5U3R1ZmYKKzYwMiBzdHViIFNldENoZWNrQ3Vyc29yVGltZXIKKzYwNCBzdHViIEJyb2FkY2FzdFN5c3RlbU1lc3NhZ2UKKzYwNSBzdHViIEhhY2tUYXNrTW9uaXRvcgorNjA2IHN0dWIgRm9ybWF0TWVzc2FnZQorNjA4IHN0dWIgR2V0Rm9yZWdyb3VuZFdpbmRvdworNjA5IHN0dWIgU2V0Rm9yZWdyb3VuZFdpbmRvdworNjEwIHN0dWIgRGVzdHJveUljb24zMgorNjIwIHN0dWIgQ2hhbmdlRGlzcGxheVNldHRpbmdzCis2MjEgc3R1YiBFbnVtRGlzcGxheVNldHRpbmdzCis2NDAgc3R1YiBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzCis2NTAgc3R1YiBBY3RpdmF0ZUtleWJvYXJkTGF5b3V0Cis2NTEgc3R1YiBHZXRLZXlib2FyZExheW91dAorNjUyIHN0dWIgR2V0S2V5Ym9hcmRMYXlvdXRMaXN0Cis2NTQgc3R1YiBVbmxvYWRLZXlib2FyZExheW91dAorNjU1IHN0dWIgUG9zdFBvc3RlZE1lc3NhZ2VzCis2NTYgc3R1YiBEcmF3RnJhbWVDb250cm9sCis2NTcgc3R1YiBEcmF3Q2FwdGlvblRlbXAKKzY1OCBzdHViIERpc3BhdGNoSW5wdXQKKzY1OSBzdHViIERyYXdFZGdlCis2NjAgc3R1YiBEcmF3Q2FwdGlvbgorNjYxIHN0dWIgU2V0U3lzQ29sb3JzVGVtcAorNjYyIHN0dWIgRHJhd01lbnViYXJUZW1wCis2NjMgc3R1YiBHZXRNZW51RGVmYXVsdEl0ZW0KKzY2NCBzdHViIFNldE1lbnVEZWZhdWx0SXRlbQorNjY1IHN0dWIgR2V0TWVudUl0ZW1SZWN0Cis2NjYgc3R1YiBDaGVja01lbnVSYWRpb0l0ZW0KKzY2NyBzdHViIFRyYWNrUG9wdXBNZW51RXgKKzY2OCBzdHViIFNldFdpbmRvd1JnbgorNjY5IHN0dWIgR2V0V2luZG93UmduCis4MDAgc3R1YiBDSE9PU0VGT05UX0NBTExCQUNLMTYKKzgwMSBzdHViIEZJTkRSRVBMQUNFX0NBTExCQUNLMTYKKzgwMiBzdHViIE9QRU5GSUxFTkFNRV9DQUxMQkFDSzE2Cis4MDMgc3R1YiBQUklOVERMR19DQUxMQkFDSzE2Cis4MDQgc3R1YiBDSE9PU0VDT0xPUl9DQUxMQkFDSzE2Cis4MTkgc3R1YiBQZWVrTWVzc2FnZTMyCis4MjAgc3R1YiBHZXRNZXNzYWdlMzIKKzgyMSBzdHViIFRyYW5zbGF0ZU1lc3NhZ2UzMgorODIxIHN0dWIgSXNEaWFsb2dNZXNzYWdlMzIKKzgyMiBzdHViIERpc3BhdGNoTWVzc2FnZTMyCis4MjUgc3R1YiBQb3N0TWVzc2FnZTMyCis4MjYgc3R1YiBQb3N0VGhyZWFkTWVzc2FnZTMyCis4Mjcgc3R1YiBNZXNzYWdlQm94SW5kaXJlY3QKKzgyMyBzdHViIENhbGxNc2dGaWx0ZXIzMgorODUxIHN0dWIgTXNnVGhrQ29ubmVjdGlvbkRhdGFMUworODUzIHN0dWIgRlRfVVNSRlRIS1RIS0NPTk5FQ1RJT05EQVRBCis4NTQgc3R1YiBGVF9fVVNSRjJUSEtUSEtDT05ORUNUSU9OREFUQQorODU1IHN0dWIgVXNyMzJUaGtDb25uZWN0aW9uRGF0YVNMCis4OTAgc3R1YiBJbnN0YWxsSU1UCis4OTEgc3R1YiBVbmluc3RhbGxJTVQKZGlmZiAtLWdpdCBhL2lmMTYzMi91c2VyMzIuc3BlYyBiL2lmMTYzMi91c2VyMzIuc3BlYwppbmRleCA0YjgwYmYwLi4zYzc5MjdiIDEwMDY0NAotLS0gYS9pZjE2MzIvdXNlcjMyLnNwZWMKKysrIGIvaWYxNjMyL3VzZXIzMi5zcGVjCkBAIC0xMCw3ICsxMCw3IEBACiAwMDA2IHN0dWIgQXJyYW5nZUljb25pY1dpbmRvd3MKIDAwMDcgc3R1YiBBdHRhY2hUaHJlYWRJbnB1dAogMDAwOCBzdHViIEJlZ2luRGVmZXJXaW5kb3dQb3MKLTAwMDkgc3R1YiBCZWdpblBhaW50CiswMDA5IHN0ZGNhbGwgQmVnaW5QYWludChsb25nIHB0cikgVVNFUjMyX0JlZ2luUGFpbnQKIDAwMTAgc3R1YiBCcmluZ1dpbmRvd1RvVG9wCiAwMDExIHN0dWIgQnJvYWRjYXN0U3lzdGVtTWVzc2FnZQogMDAxMiBzdHViIENhbGNDaGlsZFNjcm9sbApAQCAtODMsNyArODMsOCBAQAogMDA3OSBzdHViIENyZWF0ZU1ESVdpbmRvd1cKIDAwODAgc3R1YiBDcmVhdGVNZW51CiAwMDgxIHN0dWIgQ3JlYXRlUG9wdXBNZW51Ci0wMDgyIHN0dWIgQ3JlYXRlV2luZG93RXhBCiswMDgyIHN0ZGNhbGwgQ3JlYXRlV2luZG93RXhBKGxvbmcgcHRyIHB0ciBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgCisJCQkJCQkJbG9uZyBsb25nIGxvbmcgcHRyKQlVU0VSMzJfQ3JlYXRlV2luZG93RXhBCiAwMDgzIHN0dWIgQ3JlYXRlV2luZG93RXhXCiAwMDg0IHN0dWIgQ3JlYXRlV2luZG93U3RhdGlvbkEKIDAwODUgc3R1YiBDcmVhdGVXaW5kb3dTdGF0aW9uVwpAQCAtMTI2LDcgKzEyNyw3IEBACiAwMTIyIHN0dWIgRGVmRnJhbWVQcm9jVwogMDEyMyBzdHViIERlZk1ESUNoaWxkUHJvY0EKIDAxMjQgc3R1YiBEZWZNRElDaGlsZFByb2NXCi0wMTI1IHN0dWIgRGVmV2luZG93UHJvY0EKKzAxMjUgc3RkY2FsbCBEZWZXaW5kb3dQcm9jQShsb25nIGxvbmcgbG9uZyBsb25nKSBVU0VSMzJfRGVmV2luZG93UHJvY0EKIDAxMjYgc3R1YiBEZWZXaW5kb3dQcm9jVwogMDEyNyBzdHViIERlZmVyV2luZG93UG9zCiAwMTI4IHN0dWIgRGVsZXRlTWVudQpAQCAtMTQxLDcgKzE0Miw3IEBACiAwMTM3IHN0dWIgRGlhbG9nQm94SW5kaXJlY3RQYXJhbVcKIDAxMzggc3R1YiBEaWFsb2dCb3hQYXJhbUEKIDAxMzkgc3R1YiBEaWFsb2dCb3hQYXJhbVcKLTAxNDAgc3R1YiBEaXNwYXRjaE1lc3NhZ2VBCiswMTQwIHN0ZGNhbGwgRGlzcGF0Y2hNZXNzYWdlQShwdHIpIFVTRVIzMl9EaXNwYXRjaE1lc3NhZ2VBCiAwMTQxIHN0dWIgRGlzcGF0Y2hNZXNzYWdlVwogMDE0MiBzdHViIERsZ0Rpckxpc3RBCiAwMTQzIHN0dWIgRGxnRGlyTGlzdENvbWJvQm94QQpAQCAtMTc2LDcgKzE3Nyw3IEBACiAwMTcyIHN0dWIgRW5kRGVmZXJXaW5kb3dQb3MKIDAxNzMgc3R1YiBFbmREaWFsb2cKIDAxNzQgc3R1YiBFbmRNZW51Ci0wMTc1IHN0dWIgRW5kUGFpbnQKKzAxNzUgc3RkY2FsbCBFbmRQYWludChsb25nIHB0cikgVVNFUjMyX0VuZFBhaW50CiAwMTc2IHN0dWIgRW5kVGFzawogMDE3NyBzdHViIEVudW1DaGlsZFdpbmRvd3MKIDAxNzggc3R1YiBFbnVtQ2xpcGJvYXJkRm9ybWF0cwpAQCAtMjcwLDcgKzI3MSw3IEBACiAwMjY2IHN0dWIgR2V0TWVudVN0YXRlCiAwMjY3IHN0dWIgR2V0TWVudVN0cmluZ0EKIDAyNjggc3R1YiBHZXRNZW51U3RyaW5nVwotMDI2OSBzdHViIEdldE1lc3NhZ2VBCiswMjY5IHN0ZGNhbGwgR2V0TWVzc2FnZUEocHRyIGxvbmcgbG9uZyBsb25nKSBVU0VSMzJfR2V0TWVzc2FnZUEKIDAyNzAgc3R1YiBHZXRNZXNzYWdlRXh0cmFJbmZvCiAwMjcxIHN0dWIgR2V0TWVzc2FnZVBvcwogMDI3MiBzdHViIEdldE1lc3NhZ2VUaW1lCkBAIC00MjcsNyArNDI4LDcgQEAKIDA0MjMgc3R1YiBQdEluUmVjdAogMDQyNCBzdHViIFF1ZXJ5U2VuZE1lc3NhZ2UKIDA0MjUgc3R1YiBSZWRyYXdXaW5kb3cKLTA0MjYgc3R1YiBSZWdpc3RlckNsYXNzQQorMDQyNiBzdGRjYWxsIFJlZ2lzdGVyQ2xhc3NBKHB0cikJVVNFUjMyX1JlZ2lzdGVyQ2xhc3NBCiAwNDI3IHN0dWIgUmVnaXN0ZXJDbGFzc0V4QQogMDQyOCBzdHViIFJlZ2lzdGVyQ2xhc3NFeFcKIDA0Mjkgc3R1YiBSZWdpc3RlckNsYXNzVwpAQCAtNTM0LDcgKzUzNSw3IEBACiAwNTMwIHN0dWIgU2hvd093bmVkUG9wdXBzCiAwNTMxIHN0dWIgU2hvd1Njcm9sbEJhcgogMDUzMiBzdHViIFNob3dTdGFydEdsYXNzCi0wNTMzIHN0dWIgU2hvd1dpbmRvdworMDUzMyBzdGRjYWxsIFNob3dXaW5kb3cobG9uZyBsb25nKSBTaG93V2luZG93CiAwNTM0IHN0dWIgU2hvd1dpbmRvd0FzeW5jCiAwNTM1IHN0dWIgU3VidHJhY3RSZWN0CiAwNTM2IHN0dWIgU3dhcE1vdXNlQnV0dG9uCkBAIC01NjcsNyArNTY4LDcgQEAKIDA1NjMgc3R1YiBVbnJlZ2lzdGVyQ2xhc3NXCiAwNTY0IHN0dWIgVW5yZWdpc3RlckhvdEtleQogMDU2NSBzdHViIFVwZGF0ZVBlclVzZXJTeXN0ZW1QYXJhbWV0ZXJzCi0wNTY2IHN0dWIgVXBkYXRlV2luZG93CiswNTY2IHN0ZGNhbGwgVXBkYXRlV2luZG93KGxvbmcpIFVwZGF0ZVdpbmRvdwogMDU2NyBzdHViIFVzZXJDbGllbnREbGxJbml0aWFsaXplCiAwNTY4IHN0dWIgVXNlclJlYWxpemVQYWxldHRlCiAwNTY5IHN0dWIgVXNlclJlZ2lzdGVyV293SGFuZGxlcnMKZGlmZiAtLWdpdCBhL2lmMTYzMi93aW5wcm9jcy5zcGVjIGIvaWYxNjMyL3dpbnByb2NzLnNwZWMKaW5kZXggYjk1ZTA3NC4uMjdmZDUwZiAxMDA2NDQKLS0tIGEvaWYxNjMyL3dpbnByb2NzLnNwZWMKKysrIGIvaWYxNjMyL3dpbnByb2NzLnNwZWMKQEAgLTI2LDYgKzI2LDkgQEAKIDIzIHBhc2NhbDE2IENBUkVUX0NhbGxiYWNrKHdvcmQgd29yZCB3b3JkIGxvbmcpIENBUkVUX0NhbGxiYWNrCiAyNCBwYXNjYWwxNiBUQVNLX1Jlc2NoZWR1bGUoKSBUQVNLX1Jlc2NoZWR1bGUKIDI1IHBhc2NhbCBNTVN5c1RpbWVDYWxsYmFjayh3b3JkIHdvcmQgd29yZCBsb25nKSBNTVN5c1RpbWVDYWxsYmFjaworMjYgcmVnaXN0ZXIgV2luMzJDYWxsVG9TdGFydCgpIFBFX1dpbjMyQ2FsbFRvU3RhcnQKKzI3IHBhc2NhbCBFbnRyeUFkZHJQcm9jKHdvcmQgd29yZCkgTU9EVUxFX0dldEVudHJ5UG9pbnQKKzI4IHBhc2NhbCBNeUFsbG9jKHdvcmQgd29yZCB3b3JkKSBNT0RVTEVfQWxsb2NhdGVTZWdtZW50CiAKICMgSW50ZXJydXB0IHZlY3RvcnMgMC0yNTUgYXJlIG9yZGluYWxzIDEwMC0zNTUKICMgVGhlICd3b3JkJyBwYXJhbWV0ZXIgYXJlIHRoZSBmbGFncyBwdXNoZWQgb24gdGhlIHN0YWNrIGJ5IHRoZSBpbnRlcnJ1cHQKQEAgLTI4Niw0ICsyODksMyBAQAogMzUzIHJlZ2lzdGVyIElOVF9JbnRmZEhhbmRsZXIod29yZCkgSU5UX0R1bW15SGFuZGxlcgogMzU0IHJlZ2lzdGVyIElOVF9JbnRmZUhhbmRsZXIod29yZCkgSU5UX0R1bW15SGFuZGxlcgogMzU1IHJlZ2lzdGVyIElOVF9JbnRmZkhhbmRsZXIod29yZCkgSU5UX0R1bW15SGFuZGxlcgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FsaWFzLmggYi9pbmNsdWRlL2FsaWFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkYWEwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWxpYXMuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBhbGlhc2VzCisgKgorICogQ29weXJpZ2h0IDE5OTUgTWFydGluIHZvbiBMb2V3aXMKKyAqCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0ZVTkNUSU9OQUxJQVN7CisJRFdPUkQJCXdpbmU7CisJRFdPUkQJCXdpbjE2OworCURXT1JECQl3aW4zMjsKK30gRlVOQ1RJT05BTElBUzsKKworZXh0ZXJuIGludCBBTElBU19Vc2VBbGlhc2VzOworCit0eXBlZGVmIHN0cnVjdCBfQUxJQVNIQVNIeworCURXT1JEIHVzZWQ7CisJaW50IHJlY25vOworfSBBTElBU0hBU0g7CisKK3ZvaWQgQUxJQVNfUmVnaXN0ZXJBbGlhcyhEV09SRCxEV09SRCxEV09SRCk7CitGVU5DVElPTkFMSUFTKiBBTElBU19Mb29rdXBBbGlhcyhEV09SRCk7CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2FsbGJhY2suaCBiL2luY2x1ZGUvY2FsbGJhY2suaAppbmRleCBmYWM4Y2QyLi5iMWEwZTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NhbGxiYWNrLmgKKysrIGIvaW5jbHVkZS9jYWxsYmFjay5oCkBAIC0yMiw4ICsyMiwxMCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVuYyAgICAgZHMgICAgcGFyYW1ldGVycyAqLwogZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF8gICAgICggRkFSUFJPQywgV09SRCApOworZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF93dyAgICggRkFSUFJPQywgV09SRCwgV09SRCwgV09SRCApOwogZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF93bCAgICggRkFSUFJPQywgV09SRCwgV09SRCwgTE9ORyApOwogZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF9sbCAgICggRkFSUFJPQywgV09SRCwgTE9ORywgTE9ORyApOworZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF93d3cgICggRkFSUFJPQywgV09SRCwgV09SRCwgV09SRCwgV09SRCApOwogZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF93d2wgICggRkFSUFJPQywgV09SRCwgV09SRCwgV09SRCwgTE9ORyApOwogZXh0ZXJuIFdPUkQgQ2FsbFRvMTZfd29yZF93bHcgICggRkFSUFJPQywgV09SRCwgV09SRCwgTE9ORywgV09SRCApOwogZXh0ZXJuIExPTkcgQ2FsbFRvMTZfbG9uZ193d2wgICggRkFSUFJPQywgV09SRCwgV09SRCwgV09SRCwgTE9ORyApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jdXJzb3IuaCBiL2luY2x1ZGUvY3Vyc29yLmgKaW5kZXggMjFiZDMyMi4uODVjNWM4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jdXJzb3IuaAorKysgYi9pbmNsdWRlL2N1cnNvci5oCkBAIC0xNywyNCArMTcsMjMgQEAKICAgICAgICAgQllURSAgICAgICAgICAgIGJ5Qml0c1BpeDsgICAgICAvKiBiaXRzIHBlciBwaXhlbCAqLwogICAgICAgICB9IENVUlNPUklDT05JTkZPLCBGQVIgKkxQQ1VSU09SSUNPTklORk87CiAKK3R5cGVkZWYgc3RydWN0ICB7CisJV09SRAljZFJlc2VydmVkOworCVdPUkQJY2RUeXBlOworCVdPUkQJY2RDb3VudDsKKyAgICAgICAgfSBDVVJTT1JESVI7CisgCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURQlXaWR0aDsKLQlCWVRFCVJlc2VydmVkMTsKLQlCWVRFCUhlaWdodDsKLQlCWVRFCVJlc2VydmVkMjsKLQlXT1JECWN1clhIb3RzcG90OwotCVdPUkQJY3VyWUhvdHNwb3Q7CisJV09SRAlXaWR0aDsKKwlXT1JECUhlaWdodDsKKwlXT1JECVBsYW5lczsKKwlXT1JECUJpdENvdW50OwogCURXT1JECWN1ckRJQlNpemU7Ci0JRFdPUkQJY3VyRElCT2Zmc2V0OworCVdPUkQJY3VyRElCT2Zmc2V0OwogCX0gQ1VSU09SREVTQ1JJUDsKIAotdHlwZWRlZiBzdHJ1Y3QgewotCUNVUlNPUkRFU0NSSVAJZGVzY3JpcHRvcjsKLQlIQklUTUFQCQloQml0bWFwOwotCURpc3BsYXkJCSpkaXNwbGF5OwotCVBpeG1hcAkJcGl4c2hhcGU7Ci0JUGl4bWFwCQlwaXhtYXNrOwotCUN1cnNvcgkJeGN1cnNvcjsKK3R5cGVkZWYgc3RydWN0ICB7CisJQ3Vyc29yCXhjdXJzb3I7CiAJfSBDVVJTT1JBTExPQzsKIAogZXh0ZXJuIHZvaWQgQ1VSU09SX1NldFdpbkN1cnNvciggSFdORCBod25kLCBIQ1VSU09SIGhjdXJzb3IgKTsgICAvKiBjdXJzb3IuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kZGVfYXRvbS5oIGIvaW5jbHVkZS9kZGVfYXRvbS5oCmluZGV4IDYyYjUwZmYuLmRjYzBlODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGRlX2F0b20uaAorKysgYi9pbmNsdWRlL2RkZV9hdG9tLmgKQEAgLTIxLDcgKzIxLDcgQEAKIEFUT00gRERFX0dsb2JhbEFkZEF0b20oIFNFR1BUUiBzdHIgKTsKIEFUT00gRERFX0dsb2JhbERlbGV0ZUF0b20oIEFUT00gYXRvbSApOwogQVRPTSBEREVfR2xvYmFsRmluZEF0b20oIFNFR1BUUiBzdHIgKTsKLVdPUkQgRERFX0dsb2JhbEdldEF0b21OYW1lKCBBVE9NIGF0b20sIExQU1RSIGJ1ZmZlciwgc2hvcnQgY291bnQgKQorV09SRCBEREVfR2xvYmFsR2V0QXRvbU5hbWUoIEFUT00gYXRvbSwgTFBTVFIgYnVmZmVyLCBzaG9ydCBjb3VudCApOwogCiAjZW5kaWYgIC8qIENPTkZJR19JUEMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kaWFsb2cuaCBiL2luY2x1ZGUvZGlhbG9nLmgKaW5kZXggMDJiZjhkMC4uYWNhOWFkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kaWFsb2cuaAorKysgYi9pbmNsdWRlL2RpYWxvZy5oCkBAIC0xMSwxMSArMTEsNiBAQAogCiBleHRlcm4gQk9PTCBESUFMT0dfSW5pdCh2b2lkKTsKIGV4dGVybiBIV05EIERJQUxPR19HZXRGaXJzdFRhYkl0ZW0oIEhXTkQgaHduZERsZyApOwotZXh0ZXJuIGludCBEaWFsb2dCb3hJbmRpcmVjdFB0cihISU5TVEFOQ0UgaEluc3QsIExQQ1NUUiBkbGdUZW1wbGF0ZSwKLQkJCQlIV05EIG93bmVyLCBXTkRQUk9DIGRsZ1Byb2MpOwotZXh0ZXJuIGludCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtUHRyKEhJTlNUQU5DRSBoSW5zdCwgTFBDU1RSIGRsZ1RlbXBsYXRlLAotCQkJCSAgICAgSFdORCBvd25lciwgV05EUFJPQyBkbGdQcm9jLCAKLQkJCQkgICAgIExQQVJBTSBwYXJhbSk7CiAKICNpZm5kZWYgV0lORUxJQgogI3ByYWdtYSBwYWNrKDEpCkBAIC02NywxMiArNjIsMTIgQEAKICAgLyogRGlhbG9nIHRlbXBsYXRlICovCiB0eXBlZGVmIHN0cnVjdAogewotICAgIERMR1RFTVBMQVRFSEVBREVSICogaGVhZGVyOwotICAgIHVuc2lnbmVkIGNoYXIgKiAgICAgbWVudU5hbWU7Ci0gICAgTFBTVFIgICAgICAgICAgICAgICBjbGFzc05hbWU7Ci0gICAgTFBTVFIgICAgICAgICAgICAgICBjYXB0aW9uOwotICAgIFdPUkQgICAgICAgICAgICAgICAgcG9pbnRTaXplOwotICAgIExQU1RSICAgICAgICAgICAgICAgZmFjZU5hbWU7CisgICAgRExHVEVNUExBVEVIRUFERVIgIGhlYWRlcjsKKyAgICBTRUdQVFIgICAgICAgICAgICAgbWVudU5hbWU7CisgICAgU0VHUFRSICAgICAgICAgICAgIGNsYXNzTmFtZTsKKyAgICBTRUdQVFIgICAgICAgICAgICAgY2FwdGlvbjsKKyAgICBXT1JEICAgICAgICAgICAgICAgcG9pbnRTaXplOworICAgIFNFR1BUUiAgICAgICAgICAgICBmYWNlTmFtZTsKIH0gRExHVEVNUExBVEU7CiAKICNpZm5kZWYgV0lORUxJQgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kbGxzLmggYi9pbmNsdWRlL2RsbHMuaAppbmRleCA4MTMyMjBiLi40YjRiNjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RsbHMuaAorKysgYi9pbmNsdWRlL2RsbHMuaApAQCAtMTIsMzIgKzEyLDYgQEAKICNkZWZpbmUgTUFYX05BTUVfTEVOR1RICQk2NAogCiAKLQotc3RydWN0IHBlX2RhdGEgewotCXN0cnVjdCBwZV9oZWFkZXJfcyAqcGVfaGVhZGVyOwotCXN0cnVjdCBwZV9zZWdtZW50X3RhYmxlICpwZV9zZWc7Ci0Jc3RydWN0IFBFX0ltcG9ydF9EaXJlY3RvcnkgKnBlX2ltcG9ydDsKLQlzdHJ1Y3QgUEVfRXhwb3J0X0RpcmVjdG9yeSAqcGVfZXhwb3J0OwotCXN0cnVjdCBQRV9SZXNvdXJjZV9EaXJlY3RvcnkgKnBlX3Jlc291cmNlOwotCWludCByZXNvdXJjZV9vZmZzZXQ7IC8qIG9mZnNldCB0byByZXNvdXJjZSB0eXBlZGlyZWN0b3J5IGluIGZpbGUgKi8KLX07Ci0KLXN0cnVjdCB3X2ZpbGVzCi17Ci0gICAgc3RydWN0IHdfZmlsZXMgICogbmV4dDsKLSAgICBjaGFyICogbmFtZTsgICAvKiBOYW1lLCBhcyBpdCBhcHBlYXJzIGluIHRoZSB3aW5kb3dzIGJpbmFyaWVzICovCi0gICAgY2hhciAqIGZpbGVuYW1lOyAvKiBBY3R1YWwgbmFtZSBvZiB0aGUgdW5peCBmaWxlIHRoYXQgc2F0aXNmaWVzIHRoaXMgKi8KLSAgICBpbnQgdHlwZTsgICAgICAgIC8qIERMTCBvciBFWEUgKi8KLSAgICBpbnQgZmQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgaGluc3RhbmNlOwotICAgIEhBTkRMRSBoTW9kdWxlOwotICAgIGludCBpbml0aWFsaXNlZDsKLSAgICBzdHJ1Y3QgbXpfaGVhZGVyX3MgKm16X2hlYWRlcjsKLSAgICBzdHJ1Y3QgcGVfZGF0YSAqcGU7Ci19OwotCi1leHRlcm4gc3RydWN0ICB3X2ZpbGVzICp3aW5lX2ZpbGVzOwotCiAjZGVmaW5lIERMTAkwCiAjZGVmaW5lIEVYRQkxCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbW9kdWxlLmggYi9pbmNsdWRlL21vZHVsZS5oCmluZGV4IDU4YTMwNjEuLjVjYTVhNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9tb2R1bGUuaApAQCAtNDgsNiArNDgsNyBAQAogICAgIEhBTkRMRSAgbnJuYW1lX2hhbmRsZTsgICAgLyogSGFuZGxlIHRvIG5vbi1yZXNpZGVudCBuYW1lIHRhYmxlIGluIG1lbW9yeSAqLwogICAgIFdPUkQgICAgbWluX3N3YXBfYXJlYTsgICAgLyogTWluLiBzd2FwIGFyZWEgc2l6ZSAqLwogICAgIFdPUkQgICAgZXhwZWN0ZWRfdmVyc2lvbjsgLyogRXhwZWN0ZWQgV2luZG93cyB2ZXJzaW9uICovCisgICAgV09SRCAgICBzZWxmX2xvYWRpbmdfc2VsOyAvKiBTZWxlY3RvciB1c2VkIGZvciBzZWxmLWxvYWRpbmcgYXBwcy4gcHJvY3MgKi8KIH0gTkVfTU9EVUxFOwogCiAgIC8qIExvYWRlZCBmaWxlIGluZm8gKi8KQEAgLTcxLDcgKzcyLDI1IEBACiAgICAgV09SRCAgICBzZWxlY3RvcjsgIC8qIFNlbGVjdG9yIG9mIHNlZ21lbnQgaW4gbWVtb3J5ICovCiB9IFNFR1RBQkxFRU5UUlk7CiAKKyAgLyogU2VsZi1sb2FkaW5nIG1vZHVsZXMgY29udGFpbiB0aGlzIHN0cnVjdHVyZSBpbiB0aGVpciBmaXJzdCBzZWdtZW50ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgV09SRCAgICB2ZXJzaW9uOwkJLyogTXVzdCBiZSAweEEwICovCisgICAgV09SRCAgICByZXNlcnZlZDsgICAKKyAgICBGQVJQUk9DIEJvb3RBcHA7ICAgIAkvKiBzdGFydHVwIHByb2NlZHVyZSAqLworICAgIEZBUlBST0MgTG9hZEFwcFNlZzsgCS8qIHByb2NlZHVyZSB0byBsb2FkIGEgc2VnbWVudCAqLworICAgIEZBUlBST0MgcmVzZXJ2ZWQyOworICAgIEZBUlBST0MgTXlBbGxvYzsgICAgIAkvKiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZWR1cmUsIAorCQkJCSAqIHdpbmUgbXVzdCB3cml0ZSB0aGlzIGZpZWxkICovCisgICAgRkFSUFJPQyBFbnRyeUFkZHJQcm9jOworICAgIEZBUlBST0MgRXhpdFByb2M7CQkvKiBleGl0IHByb2NlZHVyZSAqLworICAgIFdPUkQgICAgcmVzZXJ2ZWQzWzRdOworICAgIEZBUlBST0MgU2V0T3duZXI7ICAgICAgICAgICAvKiBTZXQgT3duZXIgcHJvY2VkdXJlLCBleHBvcnRlZCBieSB3aW5lICovCit9IFNFTEZMT0FESEVBREVSOworCiAgIC8qIFBhcmFtZXRlcnMgZm9yIExvYWRNb2R1bGUoKSAqLworCiB0eXBlZGVmIHN0cnVjdAogewogICAgIEhBTkRMRSBoRW52aXJvbm1lbnQ7ICAvKiBFbnZpcm9ubWVudCBzZWdtZW50ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL29sZS5oIGIvaW5jbHVkZS9vbGUuaAppbmRleCBmZDg3YWNmLi4xOGNmNzA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL29sZS5oCisrKyBiL2luY2x1ZGUvb2xlLmgKQEAgLTQsOSArNCwxNyBAQAogCiB0eXBlZGVmIExQQ1NUUglPTEVfTFBDU1RSOwogCisvKiBvYmplY3QgdHlwZXMgKi8KKyNkZWZpbmUgT1RfTElOSwkJMQorI2RlZmluZSBPVF9FTUJFRERFRAkyCisjZGVmaW5lIE9UX1NUQVRJQwkzCisKKy8qIGFjdGl2YXRlIHZlcmJzICovCisjZGVmaW5lIE9MRVZFUkJfUFJJTUFSWQkwCisKIHR5cGVkZWYgZW51bQogewotICAgIE9MRV9PSz0wLCAvKiBZZXMgU2lyISAqLworICAgIE9MRV9PSywKICAgICBPTEVfV0FJVF9GT1JfUkVMRUFTRSwKICAgICBPTEVfQlVTWSwKICAgICBPTEVfRVJST1JfUFJPVEVDVF9PTkxZLApAQCAtNjUsMjggKzczLDY0IEBACiAgICAgT0xFX1dBUk5fREVMRVRFX0RBVEEgPSAxMDAwCiB9IE9MRVNUQVRVUzsKIAotdHlwZWRlZiBlbnVtewordHlwZWRlZiBlbnVtIHsKIAlPTEVfU0VSVkVSX01VTFRJLAogCU9MRV9TRVJWRVJfU0lOR0xFCiB9IE9MRV9TRVJWRVJfVVNFOwotLyogZHVubm8gaWYgdGhlIHZhbHVlcyBhcmUgY29ycmVjdCwgc29tZWJvZHkgcGxlYXNlIGNoZWNrICovCisKIHR5cGVkZWYgZW51bSB7CiAJT0xFX0NIQU5HRUQsCisJT0xFX1NBVkVELAogCU9MRV9DTE9TRUQsCi0JT0xFX1FVRVJZX1BBSU5ULAotCU9MRV9RVUVSWV9SRVRSWSwKLQlPTEVfUkVMRUFTRSwKIAlPTEVfUkVOQU1FRCwKLQlPTEVfU0FWRUQKKwlPTEVfUVVFUllfUEFJTlQsCisJT0xFX1JFTEVBU0UsCisJT0xFX1FVRVJZX1JFVFJZCiB9IE9MRV9OT1RJRklDQVRJT047CiAKK3R5cGVkZWYgZW51bSB7CisJb2xlcmVuZGVyX25vbmUsCisJb2xlcmVuZGVyX2RyYXcsCisJb2xlcmVuZGVyX2Zvcm1hdAorfSBPTEVPUFRfUkVOREVSOworCit0eXBlZGVmIGVudW0geworCW9sZXVwZGF0ZV9hbHdheXMsCisJb2xldXBkYXRlX29uc2F2ZSwKKwlvbGV1cGRhdGVfb25jYWxsLAorCW9sZXVwZGF0ZV9vbmNsb3NlLAorfSBPTEVPUFRfVVBEQVRFOworCiB0eXBlZGVmCUxPTkcJTEhTRVJWRVI7CiB0eXBlZGVmIExPTkcJTEhTRVJWRVJET0M7CiB0eXBlZGVmIExPTkcJTEhDTElFTlRET0M7CiB0eXBlZGVmIExPTkcJT0xFQ0xJUEZPUk1BVDsvKiBkdW5ubyBhYm91dCB0aGlzIHR5cGUsIHBsZWFzZSBjaGFuZ2UvYWRkICovCi10eXBlZGVmIExPTkcJT0xFT1BUX1VQREFURTsvKiBkdW5ubyBhYm91dCB0aGlzIHR5cGUsIHBsZWFzZSBjaGFuZ2UvYWRkICovCi10eXBlZGVmIE9MRU9QVF9VUERBVEUqCUxQT0xFT1BUX1VQREFURTsvKiBkdW5ubyBhYm91dCB0aGlzIHR5cGUsIHBsZWFzZSBjaGFuZ2UvYWRkICovCi10eXBlZGVmIExPTkcJKk9MRV9SRUxFQVNFX01FVEhPRDsvKiBkdW5ubyAqLwordHlwZWRlZiBPTEVPUFRfVVBEQVRFKglMUE9MRU9QVF9VUERBVEU7CisKK3R5cGVkZWYgZW51bSB7CisJT0xFX05PTkUsCS8qIG5vbmUgKi8KKwlPTEVfREVMRVRFLAkvKiBkZWxldGUgb2JqZWN0ICovCisJT0xFX0xOS1BBU1RFLAkvKiBsaW5rIHBhc3RlICovCisJT0xFX0VNQlBBU1RFLAkvKiBwYXN0ZShhbmQgdXBkYXRlKSAqLworCU9MRV9TSE9XLAorCU9MRV9SVU4sCisJT0xFX0FDVElWQVRFLAorCU9MRV9VUERBVEUsCisJT0xFX0NMT1NFLAorCU9MRV9SRUNPTk5FQ1QsCisJT0xFX1NFVFVQREFURU9QVElPTlMsCisJT0xFX1NFUlZFUlJVTkxBVU5DSCwJLyogdW5sYXVuY2ggKHRlcm1pbmF0ZT8pIHNlcnZlciAqLworCU9MRV9MT0FERlJPTVNUUkVBTSwJLyogKGF1dG8gcmVjb25uZWN0KSAqLworCU9MRV9TRVREQVRBLAkJLyogT2xlU2V0RGF0YSAqLworCU9MRV9SRVFVRVNUREFUQSwJLyogT2xlUmVxdWVzdERhdGEgKi8KKwlPTEVfT1RIRVIsCisJT0xFX0NSRUFURSwKKwlPTEVfQ1JFQVRFRlJPTVRFTVBMQVRFLAorCU9MRV9DUkVBVEVMSU5LRlJPTUZJTEUsCisJT0xFX0NPUFlGUk9NTE5LLAorCU9MRV9DUkVBVFJFRlJPTUZJTEUsCisJT0xFX0NSRUFURUlOVklTSUJMRQorfSBPTEVfUkVMRUFTRV9NRVRIT0Q7CiAKIHR5cGVkZWYgc3RydWN0IF9PTEVUQVJHRVRERVZJQ0UgewogCVVJTlQJb3RkRGV2aWNlTmFtZU9mZnNldDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3B0aW9ucy5oIGIvaW5jbHVkZS9vcHRpb25zLmgKaW5kZXggZWUxZTNkYy4uOGFjNmQyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcHRpb25zLmgKKysrIGIvaW5jbHVkZS9vcHRpb25zLmgKQEAgLTEyLDYgKzEyLDcgQEAKICAgICBjaGFyICogZGVza3RvcEdlb21ldHJ5OyAvKiBOVUxMIHdoZW4gbm8gZGVza3RvcCAqLwogICAgIGNoYXIgKiBwcm9ncmFtTmFtZTsgICAgIC8qIFRvIHVzZSB3aGVuIGxvYWRpbmcgcmVzb3VyY2VzICovCiAgICAgaW50ICAgIHVzZVByaXZhdGVNYXA7CisgICAgaW50ICAgIHVzZUZpeGVkTWFwOwogICAgIGludCAgICBzeW5jaHJvbm91czsgICAgIC8qIFggc3luY2hyb25vdXMgbW9kZSAqLwogICAgIGludCAgICBiYWNraW5nc3RvcmU7ICAgIC8qIFVzZSBiYWNraW5nIHN0b3JlICovCiAgICAgc2hvcnQgIGNtZFNob3c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BlX2ltYWdlLmggYi9pbmNsdWRlL3BlX2ltYWdlLmgKaW5kZXggMTY5ZGRkOC4uY2RhZGI2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wZV9pbWFnZS5oCisrKyBiL2luY2x1ZGUvcGVfaW1hZ2UuaApAQCAtMSw3ICsxLDMzIEBACiAjaWZuZGVmIF9fV0lORV9QRV9JTUFHRV9ICiAjZGVmaW5lIF9fV0lORV9QRV9JTUFHRV9ICiAKLWV4dGVybiB2b2lkICpSRUxBWTMyX0dldEVudHJ5UG9pbnQoY2hhciAqZGxsX25hbWUsIGNoYXIgKml0ZW0sIGludCBoaW50KTsKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisKK3N0cnVjdCBwZV9kYXRhIHsKKwlzdHJ1Y3QgcGVfaGVhZGVyX3MgKnBlX2hlYWRlcjsKKwlzdHJ1Y3QgcGVfc2VnbWVudF90YWJsZSAqcGVfc2VnOworCXN0cnVjdCBQRV9JbXBvcnRfRGlyZWN0b3J5ICpwZV9pbXBvcnQ7CisJc3RydWN0IFBFX0V4cG9ydF9EaXJlY3RvcnkgKnBlX2V4cG9ydDsKKwlzdHJ1Y3QgUEVfUmVzb3VyY2VfRGlyZWN0b3J5ICpwZV9yZXNvdXJjZTsKKwlpbnQgcmVzb3VyY2Vfb2Zmc2V0OyAvKiBvZmZzZXQgdG8gcmVzb3VyY2UgdHlwZWRpcmVjdG9yeSBpbiBmaWxlICovCit9OworCitzdHJ1Y3Qgd19maWxlcworeworICAgIHN0cnVjdCB3X2ZpbGVzICAqIG5leHQ7CisgICAgY2hhciAqIG5hbWU7ICAgLyogTmFtZSwgYXMgaXQgYXBwZWFycyBpbiB0aGUgd2luZG93cyBiaW5hcmllcyAqLworICAgIGNoYXIgKiBmaWxlbmFtZTsgLyogQWN0dWFsIG5hbWUgb2YgdGhlIHVuaXggZmlsZSB0aGF0IHNhdGlzZmllcyB0aGlzICovCisgICAgaW50IHR5cGU7ICAgICAgICAvKiBETEwgb3IgRVhFICovCisgICAgaW50IGZkOworICAgIHVuc2lnbmVkIHNob3J0IGhpbnN0YW5jZTsKKyAgICBIQU5ETEUgaE1vZHVsZTsKKyAgICBpbnQgaW5pdGlhbGlzZWQ7CisgICAgc3RydWN0IG16X2hlYWRlcl9zICptel9oZWFkZXI7CisgICAgc3RydWN0IHBlX2RhdGEgKnBlOworCU9GU1RSVUNUIG9mczsKK307CisKKwogZXh0ZXJuIGludCBQRV91bmxvYWRJbWFnZShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CiBleHRlcm4gaW50IFBFX1N0YXJ0UHJvZ3JhbShzdHJ1Y3Qgd19maWxlcyAqd3BudCk7CiBleHRlcm4gdm9pZCBQRV9Jbml0RExMKHN0cnVjdCB3X2ZpbGVzICp3cG50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVsYXkzMi5oIGIvaW5jbHVkZS9yZWxheTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZjY4OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmVsYXkzMi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBSZWxheTMyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDE5OTUgTWFydGluIHZvbiBMb2V3aXMKKyAqLworCit2b2lkICpSRUxBWTMyX0dldEVudHJ5UG9pbnQoY2hhciAqZGxsX25hbWUsIGNoYXIgKml0ZW0sIGludCBoaW50KTsKK0xPTkcgUkVMQVkzMl9DYWxsV2luZG93UHJvYyhXTkRQUk9DLGludCxpbnQsaW50LGludCk7CisKK3R5cGVkZWYgc3RydWN0IHRhZ1dORENMQVNTQXsKKwlVSU5UCXN0eWxlOworCVdORFBST0MJbHBmblduZFByb2M7CisJaW50CQljYkNsc0V4dHJhOworCWludAkJY2JXbmRFeHRyYTsKKwlEV09SRAloSW5zdGFuY2U7CisJRFdPUkQJaEljb247CisJRFdPUkQJaEN1cnNvcjsKKwlEV09SRAloYnJCYWNrZ3JvdW5kOworCWNoYXIqCWxwc3pNZW51TmFtZTsKKwljaGFyKglscHN6Q2xhc3NOYW1lOworfVdORENMQVNTQTsKKworc3RydWN0IFdJTjMyX1BPSU5UeworCUxPTkcgeDsKKwlMT05HIHk7Cit9OworCitzdHJ1Y3QgV0lOMzJfTVNHeworCURXT1JEIGh3bmQ7CisJRFdPUkQgbWVzc2FnZTsKKwlEV09SRCB3UGFyYW07CisJRFdPUkQgbFBhcmFtOworCURXT1JEIHRpbWU7CisJc3RydWN0IFdJTjMyX1BPSU5UIHB0OworfTsKKworc3RydWN0IFdJTjMyX1JFQ1R7CisJTE9ORyBsZWZ0OworCUxPTkcgdG9wOworCUxPTkcgcmlnaHQ7CisJTE9ORyBib3R0b207Cit9OworCitzdHJ1Y3QgV0lOMzJfUEFJTlRTVFJVQ1R7CisJRFdPUkQgaGRjOworCURXT1JEIGZFcmFzZTsKKwlzdHJ1Y3QgV0lOMzJfUkVDVCByY1BhaW50OworCURXT1JEIGZSZXN0b3JlOworCURXT1JEIGZJbmNVcGRhdGU7CisJQllURSByZ2JSZXNlcnZlZFszMl07Cit9OworCisKK0FUT00gVVNFUjMyX1JlZ2lzdGVyQ2xhc3NBKFdORENMQVNTQSAqKTsKK0xSRVNVTFQgVVNFUjMyX0RlZldpbmRvd1Byb2NBKERXT1JEIGh3bmQsRFdPUkQgbXNnLERXT1JEIHdQYXJhbSxEV09SRCBsUGFyYW0pOworQk9PTCBVU0VSMzJfR2V0TWVzc2FnZUEoc3RydWN0IFdJTjMyX01TRyogbHBtc2csRFdPUkQgaHduZCxEV09SRCBtaW4sRFdPUkQgbWF4KTsKK0hEQyBVU0VSMzJfQmVnaW5QYWludChEV09SRCBod25kLHN0cnVjdCBXSU4zMl9QQUlOVFNUUlVDVCAqbHBwcyk7CitCT09MIFVTRVIzMl9FbmRQYWludChEV09SRCBod25kLHN0cnVjdCBXSU4zMl9QQUlOVFNUUlVDVCAqbHBwcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbmRvd3MuaCBiL2luY2x1ZGUvd2luZG93cy5oCmluZGV4IDEwNTIzN2YuLjdmNjU3NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luZG93cy5oCisrKyBiL2luY2x1ZGUvd2luZG93cy5oCkBAIC05OCw4ICs5OCw4IEBACiAgICAgSU5UICAgICAgIHk7CiAgICAgSU5UICAgICAgIHg7CiAgICAgTE9ORyAgICAgIHN0eWxlIFdJTkVfUEFDS0VEOwotICAgIGNoYXIgKiAgICBscHN6TmFtZSBXSU5FX1BBQ0tFRDsKLSAgICBjaGFyICogICAgbHBzekNsYXNzIFdJTkVfUEFDS0VEOworICAgIFNFR1BUUiAgICBscHN6TmFtZSBXSU5FX1BBQ0tFRDsKKyAgICBTRUdQVFIgICAgbHBzekNsYXNzIFdJTkVfUEFDS0VEOwogICAgIERXT1JEICAgICBkd0V4U3R5bGUgV0lORV9QQUNLRUQ7CiB9IENSRUFURVNUUlVDVCwgKkxQQ1JFQVRFU1RSVUNUOwogCkBAIC0xMTEsOCArMTExLDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBMUFNUUiAgICAgc3pDbGFzczsKLSAgICBMUFNUUiAgICAgc3pUaXRsZTsKKyAgICBTRUdQVFIgICAgc3pDbGFzczsKKyAgICBTRUdQVFIgICAgc3pUaXRsZTsKICAgICBIQU5ETEUgICAgaE93bmVyOwogICAgIElOVCAgICAgICB4OwogICAgIElOVCAgICAgICB5OwpAQCAtMjQyNyw2ICsyNDI3LDcgQEAKIEYoV09SRCxHZXRDdXJyZW50UERCKQogRihXT1JELEdldERvdWJsZUNsaWNrVGltZSkKIEYoV09SRCxHZXROdW1UYXNrcykKK0YoV09SRCxHZXRUYXNrRFMpCiBGKGludCxDb3VudENsaXBib2FyZEZvcm1hdHMpCiBGKGludCxHZXRLQkNvZGVQYWdlKQogRihpbnQsR2V0VGhyZXNob2xkU3RhdHVzKQpAQCAtMjk1Nyw3ICsyOTU4LDcgQEAKIEZkKEhSR04sQ3JlYXRlUG9seVBvbHlnb25SZ24sTFBQT0lOVCxhLExQSU5ULGIsc2hvcnQsYyxzaG9ydCxkKQogRmQoSFJHTixDcmVhdGVSZWN0UmduLHNob3J0LGEsc2hvcnQsYixzaG9ydCxjLHNob3J0LGQpCiBGZChIV05ELENyZWF0ZURpYWxvZyxIQU5ETEUsYSxTRUdQVFIsYixIV05ELGMsV05EUFJPQyxkKQotRmQoSFdORCxDcmVhdGVEaWFsb2dJbmRpcmVjdCxIQU5ETEUsYSxMUENTVFIsYixIV05ELGMsV05EUFJPQyxkKQorRmQoSFdORCxDcmVhdGVEaWFsb2dJbmRpcmVjdCxIQU5ETEUsYSxTRUdQVFIsYixIV05ELGMsV05EUFJPQyxkKQogRmQoSU5ULEdldFRlbXBGaWxlTmFtZSxCWVRFLGEsTFBDU1RSLGIsVUlOVCxjLExQU1RSLGQpCiBGZChMT05HLERlZkRsZ1Byb2MsSFdORCxhLFdPUkQsYixXT1JELGMsTE9ORyxkKQogRmQoTE9ORyxEZWZNRElDaGlsZFByb2MsSFdORCxhLFdPUkQsYixXT1JELGMsTE9ORyxkKQpAQCAtMzAwNCw3ICszMDA1LDcgQEAKIEZlKERXT1JELFNjYWxlVmlld3BvcnRFeHQsSERDLGEsc2hvcnQsYixzaG9ydCxjLHNob3J0LGQsc2hvcnQsZSkKIEZlKERXT1JELFNjYWxlV2luZG93RXh0LEhEQyxhLHNob3J0LGIsc2hvcnQsYyxzaG9ydCxkLHNob3J0LGUpCiBGZShIQklUTUFQLENyZWF0ZUJpdG1hcCxzaG9ydCxhLHNob3J0LGIsQllURSxjLEJZVEUsZCxMUFNUUixlKQotRmUoSFdORCxDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtLEhBTkRMRSxhLExQQ1NUUixiLEhXTkQsYyxXTkRQUk9DLGQsTFBBUkFNLGUpCitGZShIV05ELENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0sSEFORExFLGEsU0VHUFRSLGIsSFdORCxjLFdORFBST0MsZCxMUEFSQU0sZSkKIEZlKEhXTkQsQ3JlYXRlRGlhbG9nUGFyYW0sSEFORExFLGEsU0VHUFRSLGIsSFdORCxjLFdORFBST0MsZCxMUEFSQU0sZSkKIEZlKExPTkcsQ2FsbFdpbmRvd1Byb2MsV05EUFJPQyxhLEhXTkQsYixXT1JELGMsV09SRCxkLExPTkcsZSkKIEZlKExPTkcsRGVmRnJhbWVQcm9jLEhXTkQsYSxIV05ELGIsV09SRCxjLFdPUkQsZCxMT05HLGUpCkBAIC0zMDU0LDggKzMwNTUsOCBAQAogRmkoQk9PTCxHcmF5U3RyaW5nLEhEQyxhLEhCUlVTSCxiLEZBUlBST0MsZ3NwcmMsTFBBUkFNLGxQYXJhbSxJTlQsY2NoLElOVCx4LElOVCx5LElOVCxjeCxJTlQsY3kpCiBGaShCT09MLFBpZSxIREMsYSxpbnQseExlZnQsaW50LHlUb3AsaW50LHhSaWdodCxpbnQseUJvdHRvbSxpbnQseFN0YXJ0LGludCx5U3RhcnQsaW50LHhFbmQsaW50LHlFbmQpCiBGayhCT09MLFN0cmV0Y2hCbHQsSERDLGEsc2hvcnQsYixzaG9ydCxjLHNob3J0LGQsc2hvcnQsZSxIREMsZixzaG9ydCxnLHNob3J0LGgsc2hvcnQsaSxzaG9ydCxqLERXT1JELGspCi1GayhIV05ELENyZWF0ZVdpbmRvdyxMUFNUUixhLExQU1RSLGIsRFdPUkQsYyxzaG9ydCxkLHNob3J0LGUsc2hvcnQsZixzaG9ydCxnLEhXTkQsaCxITUVOVSxpLEhBTkRMRSxqLFNFR1BUUixrKQotRmwoSFdORCxDcmVhdGVXaW5kb3dFeCxEV09SRCxhLExQU1RSLGIsTFBTVFIsYyxEV09SRCxkLHNob3J0LGUsc2hvcnQsZixzaG9ydCxnLHNob3J0LGgsSFdORCxpLEhNRU5VLGosSEFORExFLGssU0VHUFRSLGwpCitGayhIV05ELENyZWF0ZVdpbmRvdyxTRUdQVFIsYSxTRUdQVFIsYixEV09SRCxjLHNob3J0LGQsc2hvcnQsZSxzaG9ydCxmLHNob3J0LGcsSFdORCxoLEhNRU5VLGksSEFORExFLGosU0VHUFRSLGspCitGbChIV05ELENyZWF0ZVdpbmRvd0V4LERXT1JELGEsU0VHUFRSLGIsU0VHUFRSLGMsRFdPUkQsZCxzaG9ydCxlLHNob3J0LGYsc2hvcnQsZyxzaG9ydCxoLEhXTkQsaSxITUVOVSxqLEhBTkRMRSxrLFNFR1BUUixsKQogRmwoaW50LFNldERJQml0c1RvRGV2aWNlLEhEQyxhLHNob3J0LGIsc2hvcnQsYyxXT1JELGQsV09SRCxlLFdPUkQsZixXT1JELGcsV09SRCxoLFdPUkQsaSxMUFNUUixqLExQQklUTUFQSU5GTyxrLFdPUkQsbCkKIEZtKGludCxTdHJldGNoRElCaXRzLEhEQyxhLFdPUkQsYixXT1JELGMsV09SRCxkLFdPUkQsZSxXT1JELGYsV09SRCxnLFdPUkQsaCxXT1JELGksTFBTVFIsaixMUEJJVE1BUElORk8sayxXT1JELGwsRFdPUkQsbSkKIEZuKEhGT05ULENyZWF0ZUZvbnQsaW50LGEsaW50LGIsaW50LGMsaW50LGQsaW50LGUsQllURSxmLEJZVEUsZyxCWVRFLGgsQllURSxpLEJZVEUsaixCWVRFLGssQllURSxsLEJZVEUsbSxMUFNUUixuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5wb3MuaCBiL2luY2x1ZGUvd2lucG9zLmgKaW5kZXggNDEwNWViNS4uNjhlZGJkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5wb3MuaAorKysgYi9pbmNsdWRlL3dpbnBvcy5oCkBAIC0yMCw2ICsyMCw3IEBACiB9IERXUDsKIAogCitleHRlcm4gdm9pZCBXSU5QT1NfRmluZEljb25Qb3MoIEhXTkQgaHduZCApOwogZXh0ZXJuIEhXTkQgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyggSFdORCBod25kLCBCT09MIG1vdXNlTXNnICk7CiBleHRlcm4gTE9ORyBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIEhXTkQgaHduZCwgQk9PTCBjYWxjVmFsaWRSZWN0LAogCQkJCSAgIFJFQ1QgKm5ld1dpbmRvd1JlY3QsIFJFQ1QgKm9sZFdpbmRvd1JlY3QsCmRpZmYgLS1naXQgYS9pcGMvTWFrZWZpbGUuaW4gYi9pcGMvTWFrZWZpbGUuaW4KaW5kZXggODExZjJiNC4uYTJjMzY4YiAxMDA2NDQKLS0tIGEvaXBjL01ha2VmaWxlLmluCisrKyBiL2lwYy9NYWtlZmlsZS5pbgpAQCAtMSw0NyArMSwxOSBAQAotQ0MgCT0gQENDQAotQ0ZMQUdTIAk9IEBDRkxBR1NACi1YSU5DTCAJPSBAeF9pbmNsdWRlc0AKLVRPUFNSQyAgPSBAdG9wX3NyY2RpckAKLURJVklOQ0wgPSAtSSQoVE9QU1JDKS9pbmNsdWRlCi1MRAk9IEBMREAKLUxEQ09NQklORUZMQUdTID0gQExEQ09NQklORUZMQUdTQAorVE9QU1JDID0gQHRvcF9zcmNkaXJACitNT0RVTEUgPSBpcGMKIAotCi1NT0RVTEUgCT0gaXBjCi0KLVNSQ1MgPSAgICBiaXRfYXJyYXkuYyBcCi0JICBkZGVfYXRvbS5jICBcCi0JICBkZGVfbWVtLmMgXAotICAgICAgICAgIGRkZV9wcm9jLmMgIFwKLSAgICAgICAgICBnZW5lcmljX2hhc2guYyBcCi0gICAgICAgICAgc2htX2Jsb2NrLmMgXAotICAgICAgICAgIHNobV9mcmFnbWVudC5jIFwKLSAgICAgICAgICBzaG1fbWFpbl9ibGsuYyBcCi0gICAgICAgICAgc2htX3NlbWFwaC5jCi0KLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pCi0KLS5jLm86Ci0JJChDQykgLWMgJChDRkxBR1MpICQoWElOQ0wpICQoRElWSU5DTCkgLW8gJCoubyAkPAorQ19TUkNTID0gXAorCWJpdF9hcnJheS5jIFwKKwlkZGVfYXRvbS5jICBcCisJZGRlX21lbS5jIFwKKwlkZGVfcHJvYy5jICBcCisJZ2VuZXJpY19oYXNoLmMgXAorCXNobV9ibG9jay5jIFwKKwlzaG1fZnJhZ21lbnQuYyBcCisJc2htX21haW5fYmxrLmMgXAorCXNobV9zZW1hcGguYwogCiBhbGw6ICQoTU9EVUxFKS5vCiAKLSQoTU9EVUxFKS5vOiAkKE9CSlMpCi0JJChMRCkgJChMRENPTUJJTkVGTEFHUykgJChPQkpTKSAtbyAkKE1PRFVMRSkubwotCi1kZXBlbmQ6Ci0Jc2VkICcvXCNcI1wjIERlcGVuZGVuY2llcy9xJyA8IE1ha2VmaWxlID4gdG1wX21ha2UKLQkkKENDKSAkKERJVklOQ0wpICQoWElOQ0wpIC1NTSAqLmMgPj4gdG1wX21ha2UKLQltdiB0bXBfbWFrZSBNYWtlZmlsZQotCi1jbGVhbjoKLQlybSAtZiAqLm8gXCMqXCMgKn4gKi5iYWsgdG1wX21ha2UKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZHVtbXk6CitATUFLRV9SVUxFU0AKIAogIyMjIERlcGVuZGVuY2llczoKZGlmZiAtLWdpdCBhL2xvYWRlci9NYWtlZmlsZS5pbiBiL2xvYWRlci9NYWtlZmlsZS5pbgppbmRleCBiZjNlNGNmLi43NGQ2YTcxIDEwMDY0NAotLS0gYS9sb2FkZXIvTWFrZWZpbGUuaW4KKysrIGIvbG9hZGVyL01ha2VmaWxlLmluCkBAIC0xLDQwICsxLDE5IEBACi1DQyAJPSBAQ0NACi1DRkxBR1MgCT0gQENGTEFHU0AKLVhJTkNMIAk9IEB4X2luY2x1ZGVzQAotVE9QU1JDICA9IEB0b3Bfc3JjZGlyQAotRElWSU5DTCA9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUxECT0gQExEQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACitUT1BTUkMgPSBAdG9wX3NyY2RpckAKK01PRFVMRSA9IGxvYWRlcgogCi0KLU1PRFVMRSAJPSBsb2FkZXIKLQotU1JDUyAJPSBtYWluLmMgbW9kdWxlLmMgbmVfaW1hZ2UuYyBuZV9yZXNvdXJjZS5jIHBlX2ltYWdlLmMgXAotCXBlX3Jlc291cmNlLmMgc2lnbmFsLmMgcmVzb3VyY2UuYyB0YXNrLmMKLSAKLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pCi0KLS5jLm86Ci0JJChDQykgLWMgJChDRkxBR1MpICQoWElOQ0wpICQoRElWSU5DTCkgLW8gJCoubyAkPAorQ19TUkNTID0gXAorCW1haW4uYyBcCisJbW9kdWxlLmMgXAorCW5lX2ltYWdlLmMgXAorCW5lX3Jlc291cmNlLmMgXAorCXBlX2ltYWdlLmMgXAorCXBlX3Jlc291cmNlLmMgXAorCXNpZ25hbC5jIFwKKwlyZXNvdXJjZS5jIFwKKwl0YXNrLmMKIAogYWxsOiAkKE1PRFVMRSkubwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46Ci0KLWR1bW15OgorQE1BS0VfUlVMRVNACiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9sb2FkZXIvbW9kdWxlLmMgYi9sb2FkZXIvbW9kdWxlLmMKaW5kZXggZjUxOGU2Yy4uOTI4YjY0NyAxMDA2NDQKLS0tIGEvbG9hZGVyL21vZHVsZS5jCisrKyBiL2xvYWRlci9tb2R1bGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAorI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAKIHN0YXRpYyBITU9EVUxFIGhGaXJzdE1vZHVsZSA9IDA7CiBzdGF0aWMgSE1PRFVMRSBoQ2FjaGVkTW9kdWxlID0gMDsgIC8qIE1vZHVsZSBjYWNoZWQgYnkgTU9EVUxFX09wZW5GaWxlICovCkBAIC0yNDQsNyArMjQ1LDQzIEBACiAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGNhY2hlZGZkICk7CiAgICAgcmV0dXJuIGNhY2hlZGZkOwogfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTU9EVUxFX05lMk1lbUZsYWdzCisgKi8KIAorLyogVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIE5FIHNlZ21lbnQgZmxhZ3MgdG8gR2xvYmFsQWxsb2MgZmxhZ3MgKi8KKworc3RhdGljIFdPUkQgTU9EVUxFX05lMk1lbUZsYWdzKFdPUkQgZmxhZ3MpCit7IAorICAgIFdPUkQgbWVtZmxhZ3MgPSAwOworI2lmIDAKKyAgICBpZiAoZmxhZ3MgJiBORV9TRUdGTEFHU19ESVNDQVJEQUJMRSkgCisgICAgICBtZW1mbGFncyB8PSBHTUVNX0RJU0NBUkRBQkxFOworICAgIGlmIChmbGFncyAmIE5FX1NFR0ZMQUdTX01PVkVBQkxFIHx8IAorCSggISAoZmxhZ3MgJiBORV9TRUdGTEFHU19EQVRBKSAmJgorCSAgISAoZmxhZ3MgJiBORV9TRUdGTEFHU19MT0FERUQpICYmCisJICAhIChmbGFncyAmIE5FX1NFR0ZMQUdTX0FMTE9DQVRFRCkKKwkgKQorCSkKKyAgICAgIG1lbWZsYWdzIHw9IEdNRU1fTU9WRUFCTEU7CisgICAgbWVtZmxhZ3MgfD0gR01FTV9aRVJPSU5JVDsKKyNlbHNlCisgICAgbWVtZmxhZ3MgPSBHTUVNX1pFUk9JTklUIHwgR01FTV9GSVhFRDsKKyAgICByZXR1cm4gbWVtZmxhZ3M7CisjZW5kaWYKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTU9EVUxFX0FsbG9jYXRlU2VnbWVudCAoV0lOUFJPQ1MuMjYpCisgKi8KKworRFdPUkQgTU9EVUxFX0FsbG9jYXRlU2VnbWVudChXT1JEIHdGbGFncywgV09SRCB3U2l6ZSwgV09SRCB3RWxlbSkKK3sKKyAgICBXT1JEIHNpemUgPSB3U2l6ZSA8PCB3RWxlbTsKKyAgICBXT1JEIGhNZW0gPSBHbG9iYWxBbGxvYyggTU9EVUxFX05lMk1lbUZsYWdzKHdGbGFncyksIHNpemUpOworICAgIFdPUkQgc2VsZWN0b3IgPSBISVdPUkQoR2xvYmFsTG9jayhoTWVtKSk7CisgICAgcmV0dXJuIE1BS0VMT05HKGhNZW0sIHNlbGVjdG9yKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTU9EVUxFX0NyZWF0ZVNlZ21lbnRzCkBAIC0yNjMsNyArMzAwLDcgQEAKICAgICAgICAgaWYgKGkgPT0gcE1vZHVsZS0+c3MpIG1pbnNpemUgKz0gcE1vZHVsZS0+c3RhY2tfc2l6ZTsKIAkvKiBUaGUgREdST1VQIGlzIGFsbG9jYXRlZCBieSBNT0RVTEVfQ3JlYXRlSW5zdGFuY2UgKi8KICAgICAgICAgaWYgKGkgPT0gcE1vZHVsZS0+ZGdyb3VwKSBjb250aW51ZTsKLSAgICAgICAgcFNlZ21lbnQtPnNlbGVjdG9yID0gR0xPQkFMX0FsbG9jKCBHTUVNX1pFUk9JTklUIHwgR01FTV9GSVhFRCwKKyAgICAgICAgcFNlZ21lbnQtPnNlbGVjdG9yID0gR0xPQkFMX0FsbG9jKCBNT0RVTEVfTmUyTWVtRmxhZ3MocFNlZ21lbnQtPmZsYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2l6ZSwgaE1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShwU2VnbWVudC0+ZmxhZ3MgJiBORV9TRUdGTEFHU19EQVRBKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCkBAIC0yOTcsNyArMzM0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE1PRFVMRV9DcmVhdGVJbnN0YW5jZQogICovCi1zdGF0aWMgSElOU1RBTkNFIE1PRFVMRV9DcmVhdGVJbnN0YW5jZSggSE1PRFVMRSBoTW9kdWxlLCBMT0FEUEFSQU1TICpwYXJhbXMgKQorSElOU1RBTkNFIE1PRFVMRV9DcmVhdGVJbnN0YW5jZSggSE1PRFVMRSBoTW9kdWxlLCBMT0FEUEFSQU1TICpwYXJhbXMgKQogewogICAgIFNFR1RBQkxFRU5UUlkgKnBTZWdtZW50OwogICAgIE5FX01PRFVMRSAqcE1vZHVsZTsKQEAgLTg0OCw2ICs4ODUsOCBAQAogCiAgICAgICAgIGlmICgoaE1vZHVsZSA9IE1PRFVMRV9Mb2FkRXhlSGVhZGVyKCBmZCwgJm9mcyApKSA8IDMyKQogICAgICAgICB7CisJCQlpZihoTW9kdWxlID09IDIxKQorCQkJCXJldHVybiBQRV9Mb2FkTW9kdWxlKGZkLCZvZnMscGFyYW1CbG9jayk7CiAgICAgICAgICAgICBjbG9zZSggZmQgKTsKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkxvYWRNb2R1bGU6IGNhbid0IGxvYWQgJyVzJywgZXJyb3I9JWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBoTW9kdWxlICk7CkBAIC05MDgsNyArOTQ3LDQ2IEBACiAKICAgICAgICAgICAvKiBMb2FkIHRoZSBzZWdtZW50cyAqLwogCi0gICAgICAgIGZvciAoaSA9IDE7IGkgPD0gcE1vZHVsZS0+c2VnX2NvdW50OyBpKyspIE5FX0xvYWRTZWdtZW50KCBoTW9kdWxlLCBpICk7CisJaWYgKHBNb2R1bGUtPmZsYWdzICYgTkVfRkZMQUdTX1NFTEZMT0FEKQorCXsKKwkJLyogSGFuZGxlIHNlbGYgbG9hZGluZyBtb2R1bGVzICovCisJCVNFR1RBQkxFRU5UUlkgKiBwU2VnVGFibGUgPSAoU0VHVEFCTEVFTlRSWSAqKSBORV9TRUdfVEFCTEUocE1vZHVsZSk7CisJCVNFTEZMT0FESEVBREVSICpzZWxmbG9hZGhlYWRlcjsKKwkJSE1PRFVMRSBoc2VsZmxvYWQgPSBHZXRNb2R1bGVIYW5kbGUoIldJTlBST0NTIik7CisJCVdPUkQgb2xkc3MsIG9sZHNwLCBzYXZlZF9kZ3JvdXAgPSBwU2VnVGFibGVbcE1vZHVsZS0+ZGdyb3VwIC0gMV0uc2VsZWN0b3I7CisJCWZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6ICAlKi4qcyBpcyBhIHNlbGYtbG9hZGluZyBtb2R1bGVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cHBvcnQgZm9yIHNlbGYtbG9hZGluZyBtb2R1bGVzIGlzIHZlcnkgZXhwZXJpbWVudGFsXG4iLAorICAgICAgICAgICAgICAgICooKEJZVEUqKXBNb2R1bGUgKyBwTW9kdWxlLT5uYW1lX3RhYmxlKSwKKyAgICAgICAgICAgICAgICAqKChCWVRFKilwTW9kdWxlICsgcE1vZHVsZS0+bmFtZV90YWJsZSksCisgICAgICAgICAgICAgICAgKGNoYXIgKilwTW9kdWxlICsgcE1vZHVsZS0+bmFtZV90YWJsZSArIDEpOworCQlORV9Mb2FkU2VnbWVudCggaE1vZHVsZSwgMSApOworCQlzZWxmbG9hZGhlYWRlciA9IChTRUxGTE9BREhFQURFUiAqKQorCQkJUFRSX1NFR19PRkZfVE9fTElOKHBTZWdUYWJsZS0+c2VsZWN0b3IsIDApOworCQlzZWxmbG9hZGhlYWRlci0+RW50cnlBZGRyUHJvYyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9HZXRFbnRyeVBvaW50KGhzZWxmbG9hZCwyNyk7CisJCXNlbGZsb2FkaGVhZGVyLT5NeUFsbG9jICA9IE1PRFVMRV9HZXRFbnRyeVBvaW50KGhzZWxmbG9hZCwyOCk7CisJCXNlbGZsb2FkaGVhZGVyLT5TZXRPd25lciA9IE1PRFVMRV9HZXRFbnRyeVBvaW50KEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMIiksNDAzKTsKKwkJcE1vZHVsZS0+c2VsZl9sb2FkaW5nX3NlbCA9IEdsb2JhbEhhbmRsZVRvU2VsKAorCQkJCQlHTE9CQUxfQWxsb2MgKEdNRU1fWkVST0lOSVQsCisJCQkJCTB4RkYwMCwgaE1vZHVsZSwgRkFMU0UsIEZBTFNFLCBGQUxTRSkKKwkJCQkJKTsKKwkJb2xkc3MgPSBJRjE2MzJfU2F2ZWQxNl9zczsKKwkJb2xkc3AgPSBJRjE2MzJfU2F2ZWQxNl9zcDsKKwkJSUYxNjMyX1NhdmVkMTZfc3MgPSBwTW9kdWxlLT5zZWxmX2xvYWRpbmdfc2VsOworCQlJRjE2MzJfU2F2ZWQxNl9zcCA9IDB4RkYwMDsKKwkJQ2FsbFRvMTZfd29yZF93dyAoc2VsZmxvYWRoZWFkZXItPkJvb3RBcHAsCisJCQlwTW9kdWxlLT5zZWxmX2xvYWRpbmdfc2VsLCBoTW9kdWxlLCBmZCk7CisJCS8qIHNvbWUgQm9vdEFwcCBwcm9jcyBvdmVyd3JpdGUgdGhlIHNlbGVjdG9yIG9mIGRncm91cCAqLworCQlwU2VnVGFibGVbcE1vZHVsZS0+ZGdyb3VwIC0gMV0uc2VsZWN0b3IgPSBzYXZlZF9kZ3JvdXA7CisJCUlGMTYzMl9TYXZlZDE2X3NzID0gb2xkc3M7CisJCUlGMTYzMl9TYXZlZDE2X3NwID0gb2xkc3A7CisJCWZvciAoaSA9IDI7IGkgPD0gcE1vZHVsZS0+c2VnX2NvdW50OyBpKyspIE5FX0xvYWRTZWdtZW50KCBoTW9kdWxlLCBpICk7CisJfSAKKwllbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gcE1vZHVsZS0+c2VnX2NvdW50OyBpKyspCisgICAgICAgICAgICAgICAgTkVfTG9hZFNlZ21lbnQoIGhNb2R1bGUsIGkgKTsKKyAgICAgICAgfQogCiAgICAgICAgICAgLyogRml4dXAgdGhlIGZ1bmN0aW9ucyBwcm9sb2dzICovCiAKZGlmZiAtLWdpdCBhL2xvYWRlci9uZV9pbWFnZS5jIGIvbG9hZGVyL25lX2ltYWdlLmMKaW5kZXggMTQ1MGMwYS4uYjA1ZTY1ZSAxMDA2NDQKLS0tIGEvbG9hZGVyL25lX2ltYWdlLmMKKysrIGIvbG9hZGVyL25lX2ltYWdlLmMKQEAgLTU5LDcgKzU5LDQxIEBACiAgICAgbHNlZWsoIGZkLCBwU2VnLT5maWxlcG9zIDw8IHBNb2R1bGUtPmFsaWdubWVudCwgU0VFS19TRVQgKTsKICAgICBzaXplID0gcFNlZy0+c2l6ZSA/IHBTZWctPnNpemUgOiAweDEwMDAwOwogICAgIG1lbSA9IEdsb2JhbExvY2socFNlZy0+c2VsZWN0b3IpOwotICAgIGlmICghKHBTZWctPmZsYWdzICYgTkVfU0VHRkxBR1NfSVRFUkFURUQpKQorICAgIGlmIChwTW9kdWxlLT5mbGFncyAmIE5FX0ZGTEFHU19TRUxGTE9BRCAmJiBzZWdudW0gPiAxKSB7CQorIAkvKiBJbXBsZW1lbnQgc2VsZiBsb2FkaW5nIHNlZ21lbnRzICovCisgCVNFTEZMT0FESEVBREVSICpzZWxmbG9hZGhlYWRlcjsKKyAJV09SRCBvbGRzcywgb2xkc3AsIG9sZHNlbGVjdG9yLCBuZXdzZWxlY3RvcjsKKyAJc2VsZmxvYWRoZWFkZXIgPSAoU0VMRkxPQURIRUFERVIgKikKKyAJCVBUUl9TRUdfT0ZGX1RPX0xJTihwU2VnVGFibGUtPnNlbGVjdG9yLDApOworIAlvbGRzcyA9IElGMTYzMl9TYXZlZDE2X3NzOworIAlvbGRzcCA9IElGMTYzMl9TYXZlZDE2X3NwOworIAlvbGRzZWxlY3RvciA9IHBTZWctPnNlbGVjdG9yOworIAlJRjE2MzJfU2F2ZWQxNl9zcyA9IHBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWw7CisgCUlGMTYzMl9TYXZlZDE2X3NwID0gMHhGRjAwOworIAluZXdzZWxlY3RvciA9ICBDYWxsVG8xNl93b3JkX3d3dyhzZWxmbG9hZGhlYWRlci0+TG9hZEFwcFNlZywKKyAJCXBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWwsIGhNb2R1bGUsIGZkLCBzZWdudW0pOworIAlpZiAobmV3c2VsZWN0b3IgIT0gb2xkc2VsZWN0b3IpIHsKKyAJICAvKiBTZWxmIGxvYWRlcnMgbGlrZSBjcmVhdGluZyB0aGVpciBvd24gc2VsZWN0b3JzOyAKKyAJICAgKiB0aGV5IGxvdmUgYXNraW5nIGZvciB0cm91YmxlIHRvIFdpbmUgZGV2ZWxvcGVycworIAkgICAqLworIAkgIGlmIChzZWdudW0gPT0gcE1vZHVsZS0+ZGdyb3VwKSB7CisgCSAgICBtZW1jcHkoUFRSX1NFR19PRkZfVE9fTElOKG9sZHNlbGVjdG9yLDApLAorIAkJICAgUFRSX1NFR19PRkZfVE9fTElOKG5ld3NlbGVjdG9yLDApLCAKKyAJCSAgIHBTZWctPm1pbnNpemUgPyBwU2VnLT5taW5zaXplIDogMHgxMDAwMCk7CisgCSAgICBGcmVlU2VsZWN0b3IobmV3c2VsZWN0b3IpOworIAkgICAgcFNlZy0+c2VsZWN0b3IgPSBvbGRzZWxlY3RvcjsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiQSBuZXcgc2VsZWN0b3Igd2FzIGFsbG9jYXRlZCBmb3IgdGhlIGRncm91cCBzZWdtZW50XG4iCisgCQkgICAgIk9sZCBzZWxlY3RvciBpcyAlZCwgbmV3IG9uZSBpcyAlZCIsIG9sZHNlbGVjdG9yLCBuZXdzZWxlY3Rvcik7CisgCSAgfSBlbHNlIHsKKyAJICAgIEZyZWVTZWxlY3RvcihwU2VnLT5zZWxlY3Rvcik7CisgCSAgICBwU2VnLT5zZWxlY3RvciA9IG5ld3NlbGVjdG9yOworIAkgIH0KKyAJfSAKKyAJCisgCUlGMTYzMl9TYXZlZDE2X3NzID0gb2xkc3M7CisgCUlGMTYzMl9TYXZlZDE2X3NwID0gb2xkc3A7CisgICAgIH0KKyAgICBlbHNlIGlmICghKHBTZWctPmZsYWdzICYgTkVfU0VHRkxBR1NfSVRFUkFURUQpKQogICAgICAgcmVhZChmZCwgbWVtLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgIC8qCkBAIC04NSw2ICsxMTksNyBAQAogICAgICAgZnJlZShidWZmKTsKICAgICB9CiAKKyAgICBwU2VnLT5mbGFncyB8PSBORV9TRUdGTEFHU19MT0FERUQ7CiAgICAgaWYgKCEocFNlZy0+ZmxhZ3MgJiBORV9TRUdGTEFHU19SRUxPQ19EQVRBKSkKICAgICAgICAgcmV0dXJuIFRSVUU7ICAvKiBObyByZWxvY2F0aW9uIGRhdGEsIHdlIGFyZSBkb25lICovCiAKQEAgLTQ3NCwzICs1MDksMTUgQEAKICAgICB9CiAgICAgTkVfSW5pdERMTCggaE1vZHVsZSApOwogfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIE5FX1BhdGNoQ29kZUhhbmRsZQorICoKKyAqIE5lZWRlZCBmb3Igc2VsZi1sb2FkaW5nIG1vZHVsZXMuCisgKi8KKworLyogSXQgZG9lcyBub3RoaW5nICovCit2b2lkIFBhdGNoQ29kZUhhbmRsZShIQU5ETEUgaFNlbCkKK3sKK30KZGlmZiAtLWdpdCBhL2xvYWRlci9wZV9pbWFnZS5jIGIvbG9hZGVyL3BlX2ltYWdlLmMKaW5kZXggMmQyODRiNS4uNDkzZGUwZiAxMDA2NDQKLS0tIGEvbG9hZGVyL3BlX2ltYWdlLmMKKysrIGIvbG9hZGVyL3BlX2ltYWdlLmMKQEAgLTE4LDYgKzE4LDE2IEBACiAjaW5jbHVkZSAibmVleGUuaCIKICNpbmNsdWRlICJwZWV4ZS5oIgogI2luY2x1ZGUgInBlX2ltYWdlLmgiCisjaW5jbHVkZSAicmVsYXkzMi5oIgorI2luY2x1ZGUgIm1vZHVsZS5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisjaW5jbHVkZSAidGFzay5oIgorI2luY2x1ZGUgImxkdC5oIgorI2luY2x1ZGUgInJlZ2lzdGVycy5oIgorCisjaW5jbHVkZSAic3RkZGVidWcuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIE1BUF9BTk9OWU1PVVMJMHgyMAogCkBAIC0xNjcsNiArMTc3LDcgQEAKIAlpbnQgaSwgcmVzdWx0OwogCiAJd3BudC0+cGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwZV9kYXRhKSk7CisJbWVtc2V0KHdwbnQtPnBlLDAsc2l6ZW9mKHN0cnVjdCBwZV9kYXRhKSk7CiAJd3BudC0+cGUtPnBlX2hlYWRlciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlX2hlYWRlcl9zKSk7CiAKIAkvKiByZWFkIFBFIGhlYWRlciAqLwpAQCAtMjI1LDYgKzIzNiwxMjQgQEAKIAlyZXR1cm4gKHdwbnQtPmhpbnN0YW5jZSk7CiB9CiAKK0hJTlNUQU5DRSBQRV9Mb2FkTW9kdWxlKGludCBmZCwgT0ZTVFJVQ1QgKm9mcywgTE9BRFBBUkFNUyogcGFyYW1zKQoreworCXN0cnVjdCB3X2ZpbGVzICp3cG50OworCWludCBzaXplOworCU5FX01PRFVMRSAqcE1vZHVsZTsKKwlMT0FERURGSUxFSU5GTyAqcEZpbGVJbmZvOworCVNFR1RBQkxFRU5UUlkgKnBTZWdtZW50OworCWNoYXIgKnBTdHI7CisJRFdPUkQgY3RzOworCUhNT0RVTEUgaE1vZHVsZTsKKwlISU5TVEFOQ0UgaEluc3RhbmNlOworCisJQUxJQVNfVXNlQWxpYXNlcz0xOworCisJd3BudD1tYWxsb2Moc2l6ZW9mKHN0cnVjdCB3X2ZpbGVzKSk7CisJd3BudC0+bmV4dD13aW5lX2ZpbGVzOworCXdpbmVfZmlsZXM9d3BudDsKKwl3cG50LT5vZnM9Km9mczsKKwl3cG50LT5mZD1mZDsKKwl3cG50LT50eXBlPTA7CisJd3BudC0+aGluc3RhbmNlPTA7CisJd3BudC0+aE1vZHVsZT0wOworCXdwbnQtPmluaXRpYWxpc2VkPTA7CisJbHNlZWsoZmQsMCxTRUVLX1NFVCk7CisJd3BudC0+bXpfaGVhZGVyPW1hbGxvYyhzaXplb2Yoc3RydWN0IG16X2hlYWRlcl9zKSk7CisJcmVhZChmZCx3cG50LT5tel9oZWFkZXIsc2l6ZW9mKHN0cnVjdCBtel9oZWFkZXJfcykpOworCisJc2l6ZT1zaXplb2YoTkVfTU9EVUxFKSArCisJCS8qIGxvYWRlZCBmaWxlIGluZm8gKi8KKwkJc2l6ZW9mKExPQURFREZJTEVJTkZPKSArIHN0cmxlbihvZnMtPnN6UGF0aE5hbWUpICsKKwkJLyogc2VnbWVudCB0YWJsZTogRFMsQ1MgKi8KKwkJMiAqIHNpemVvZihTRUdUQUJMRUVOVFJZKSArCisJCS8qIG5hbWUgdGFibGUgKi8KKwkJOSArCisJCS8qIHNldmVyYWwgZW1wdHkgdGFibGVzICovCisJCTg7CisKKwloTW9kdWxlID0gR2xvYmFsQWxsb2MoIEdNRU1fTU9WRUFCTEUgfCBHTUVNX1pFUk9JTklULCBzaXplICk7CisJd3BudC0+aE1vZHVsZT1oTW9kdWxlOworCWlmICghaE1vZHVsZSkgcmV0dXJuIDExOyAgLyogaW52YWxpZCBleGUgKi8KKworCUZhclNldE93bmVyKCBoTW9kdWxlLCBoTW9kdWxlICk7CisJCisJcE1vZHVsZSA9IEdsb2JhbExvY2soaE1vZHVsZSk7CisKKwkvKiBTZXQgYWxsIHVzZWQgZW50cmllcyAqLworCXBNb2R1bGUtPm1hZ2ljPU5FX1NJR05BVFVSRTsKKwlwTW9kdWxlLT5jb3VudD0xOworCXBNb2R1bGUtPm5leHQ9MDsKKwlwTW9kdWxlLT5mbGFncz0wOworCXBNb2R1bGUtPmRncm91cD0xOworCXBNb2R1bGUtPnNzPTE7CisJcE1vZHVsZS0+Y3M9MjsKKwkvKiBXaG8gd2FudHMgdG8gTG9jYWxBbGxvYyBmb3IgYSBQRSBNb2R1bGU/ICovCisJcE1vZHVsZS0+aGVhcF9zaXplPTB4MTAwMDsKKwlwTW9kdWxlLT5zdGFja19zaXplPTB4RjAwMDsKKwlwTW9kdWxlLT5zZWdfY291bnQ9MTsKKwlwTW9kdWxlLT5tb2RyZWZfY291bnQ9MDsKKwlwTW9kdWxlLT5ucm5hbWVfc2l6ZT0wOworCXBNb2R1bGUtPnNlZ190YWJsZT1zaXplb2YoTkVfTU9EVUxFKSsKKwkJCXNpemVvZihMT0FERURGSUxFSU5GTykrc3RybGVuKG9mcy0+c3pQYXRoTmFtZSk7CisJcE1vZHVsZS0+ZmlsZWluZm89c2l6ZW9mKE5FX01PRFVMRSk7CisJcE1vZHVsZS0+b3NfZmxhZ3M9TkVfT1NGTEFHU19XSU5ET1dTOworCXBNb2R1bGUtPmV4cGVjdGVkX3ZlcnNpb249MHgzMEE7CisKKwlwRmlsZUluZm89KExPQURFREZJTEVJTkZPICopKHBNb2R1bGUgKyAxKTsKKwlwRmlsZUluZm8tPmxlbmd0aCA9IHNpemVvZihMT0FERURGSUxFSU5GTykrc3RybGVuKG9mcy0+c3pQYXRoTmFtZSktMTsKKwlzdHJjcHkocEZpbGVJbmZvLT5maWxlbmFtZSxvZnMtPnN6UGF0aE5hbWUpOworCisJcFNlZ21lbnQ9KFNFR1RBQkxFRU5UUlkqKSgoY2hhciopcEZpbGVJbmZvK3BGaWxlSW5mby0+bGVuZ3RoKzEpOworCXBNb2R1bGUtPmRncm91cF9lbnRyeT0oaW50KXBTZWdtZW50LShpbnQpcE1vZHVsZTsKKwlwU2VnbWVudC0+c2l6ZT0wOworCXBTZWdtZW50LT5mbGFncz1ORV9TRUdGTEFHU19EQVRBOworCXBTZWdtZW50LT5taW5zaXplPTB4MTAwMDsKKwlwU2VnbWVudCsrOworCisJY3RzPUdldFduZFByb2NFbnRyeTE2KCJXaW4zMkNhbGxUb1N0YXJ0Iik7CisJcFNlZ21lbnQtPnNlbGVjdG9yPWN0cz4+MTY7CisJcE1vZHVsZS0+aXA9Y3RzICYgMHhGRkZGOworCXBTZWdtZW50Kys7CisKKwlwU3RyPShjaGFyKilwU2VnbWVudDsKKwlwTW9kdWxlLT5uYW1lX3RhYmxlPShpbnQpcFN0ci0oaW50KXBNb2R1bGU7CisJc3RyY3B5KHBTdHIsIlx4MDhXMzJTWFhYWCIpOworCXBTdHIrPTk7CisKKwkvKiBBbGwgdGFibGVzIHplcm8gdGVybWluYXRlZCAqLworCXBNb2R1bGUtPnJlc190YWJsZT1wTW9kdWxlLT5pbXBvcnRfdGFibGU9cE1vZHVsZS0+ZW50cnlfdGFibGU9CisJCShpbnQpcFN0ci0oaW50KXBNb2R1bGU7CisKKwlQRV9Mb2FkSW1hZ2Uod3BudCk7CisKKwlwTW9kdWxlLT5oZWFwX3NpemU9MHgxMDAwOworCXBNb2R1bGUtPnN0YWNrX3NpemU9MHhFMDAwOworCisJLyogQ3JlYXRlSW5zdGFuY2UgYWxsb2NhdGVzIG5vdyA2NEtCICovCisJaEluc3RhbmNlPU1PRFVMRV9DcmVhdGVJbnN0YW5jZShoTW9kdWxlKTsKKwl3cG50LT5oaW5zdGFuY2U9aEluc3RhbmNlOworCisJVEFTS19DcmVhdGVUYXNrKGhNb2R1bGUsaEluc3RhbmNlLDAsCisJCXBhcmFtcy0+aEVudmlyb25tZW50LChMUFNUUilQVFJfU0VHX1RPX0xJTihwYXJhbXMtPmNtZExpbmUpLAorCQkqKChXT1JEKilQVFJfU0VHX1RPX0xJTihwYXJhbXMtPnNob3dDbWQpKzEpKTsKKwkKKwlyZXR1cm4gaEluc3RhbmNlOworfQorCit2b2lkIFBFX1dpbjMyQ2FsbFRvU3RhcnQoc3RydWN0IHNpZ2NvbnRleHRfc3RydWN0IGNvbnRleHQpCit7CisJaW50IGZzOworCXN0cnVjdCB3X2ZpbGVzICp3cG50PXdpbmVfZmlsZXM7CisJZnM9R2xvYmFsQWxsb2MoR0hORCwweDEwMDAwKTsKKwlmcHJpbnRmKHN0ZGRlYiwiR29pbmcgdG8gc3RhcnQgV2luMzIgcHJvZ3JhbVxuIik7CQorCUluaXRUYXNrKGNvbnRleHQpOworCVVTRVJfSW5pdEFwcCh3cG50LT5oTW9kdWxlKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92dyAldzAsJSVmcyI6OiJyIiAoZnMpKTsKKwkoKHZvaWQoKikoKSkobG9hZF9hZGRyK3dwbnQtPnBlLT5wZV9oZWFkZXItPm9wdF9jb2ZmLkFkZHJlc3NPZkVudHJ5UG9pbnQpKSgpOworfQorCiBpbnQgUEVfVW5sb2FkSW1hZ2Uoc3RydWN0IHdfZmlsZXMgKndwbnQpCiB7CiAJcHJpbnRmKCJQRXVubG9hZEltYWdlKCkgY2FsbGVkIVxuIik7CmRpZmYgLS1naXQgYS9tZW1vcnkvTWFrZWZpbGUuaW4gYi9tZW1vcnkvTWFrZWZpbGUuaW4KaW5kZXggNzkxYmRhZS4uMzU3ZGVkOSAxMDA2NDQKLS0tIGEvbWVtb3J5L01ha2VmaWxlLmluCisrKyBiL21lbW9yeS9NYWtlZmlsZS5pbgpAQCAtMSw0NCArMSwxNSBAQAotQ0MgCT0gQENDQAotQ0ZMQUdTIAk9IEBDRkxBR1NACi1YSU5DTCAJPSBAeF9pbmNsdWRlc0AKLVRPUFNSQyAgPSBAdG9wX3NyY2RpckAKLURJVklOQ0wgPSAtSSQoVE9QU1JDKS9pbmNsdWRlCi1MRAk9IEBMREAKLUxEQ09NQklORUZMQUdTID0gQExEQ09NQklORUZMQUdTQAorVE9QU1JDID0gQHRvcF9zcmNkaXJACitNT0RVTEUgPSBtZW1vcnkKIAotCi1NT0RVTEUgCT0gbWVtb3J5Ci0KLVNSQ1MgPSBcCitDX1NSQ1MgPSBcCiAJYXRvbS5jIFwKIAlnbG9iYWwuYyBcCiAJbGR0LmMgXAogCWxvY2FsLmMgXAogCXNlbGVjdG9yLmMKLSAKLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pCi0KLS5jLm86Ci0JJChDQykgLWMgJChDRkxBR1MpICQoWElOQ0wpICQoRElWSU5DTCkgLW8gJCoubyAkPAogCiBhbGw6ICQoTU9EVUxFKS5vCiAKLSQoTU9EVUxFKS5vOiAkKE9CSlMpCi0JJChMRCkgJChMRENPTUJJTkVGTEFHUykgJChPQkpTKSAtbyAkKE1PRFVMRSkubwotCi1kZXBlbmQ6Ci0Jc2VkICcvXCNcI1wjIERlcGVuZGVuY2llcy9xJyA8IE1ha2VmaWxlID4gdG1wX21ha2UKLQkkKENDKSAkKERJVklOQ0wpICQoWElOQ0wpIC1NTSAqLmMgPj4gdG1wX21ha2UKLQltdiB0bXBfbWFrZSBNYWtlZmlsZQotCi1jbGVhbjoKLQlybSAtZiAqLm8gXCMqXCMgKn4gKi5iYWsgdG1wX21ha2UKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZHVtbXk6CitATUFLRV9SVUxFU0AKIAogIyMjIERlcGVuZGVuY2llczoKZGlmZiAtLWdpdCBhL21lbW9yeS9sb2NhbC5jIGIvbWVtb3J5L2xvY2FsLmMKaW5kZXggYTAyNjQ0Ny4uZmE1ODQ1YiAxMDA2NDQKLS0tIGEvbWVtb3J5L2xvY2FsLmMKKysrIGIvbWVtb3J5L2xvY2FsLmMKQEAgLTgyNSw4ICs4MjUsMTEgQEAKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAKICAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbExvY2s6ICUwNHggIiwgaGFuZGxlICk7Ci0gICAgaWYgKEhBTkRMRV9NT1ZFQUJMRShoYW5kbGUpKSB7Ci0JaGFuZGxlID0gKihXT1JEICopKHB0ciArIGhhbmRsZSk7CisgICAgaWYgKEhBTkRMRV9NT1ZFQUJMRShoYW5kbGUpKQorICAgIHsKKyAgICAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikocHRyICsgaGFuZGxlKTsKKyAgICAgICAgaWYgKHBFbnRyeS0+bG9jayA8IDI1NSkgcEVudHJ5LT5sb2NrKys7CisgICAgICAgIGhhbmRsZSA9IHBFbnRyeS0+YWRkcjsKICAgICB9CiAgICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAicmV0dXJuaW5nICUwNHhcbiIsIGhhbmRsZSApOwogICAgIHJldHVybiBoYW5kbGU7CkBAIC04MzgsNyArODQxLDE4IEBACiAgKi8KIEJPT0wgTE9DQUxfVW5sb2NrKCBXT1JEIGRzLCBITE9DQUwgaGFuZGxlICkKIHsKLSAgICByZXR1cm4gVFJVRTsKKyAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CisKKyAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbFVubG9jazogJTA0eFxuIiwgaGFuZGxlICk7CisgICAgaWYgKEhBTkRMRV9NT1ZFQUJMRShoYW5kbGUpKQorICAgIHsKKyAgICAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikocHRyICsgaGFuZGxlKTsKKyAgICAgICAgaWYgKCFwRW50cnktPmxvY2sgfHwgKHBFbnRyeS0+bG9jayA9PSAyNTUpKSByZXR1cm4gRkFMU0U7CisgICAgICAgIC8qIEZvciBtb3ZlYWJsZSBibG9jaywgcmV0dXJuIHRoZSBuZXcgbG9jayBjb3VudCAqLworICAgICAgICAvKiAoc2VlIF9XaW5kb3dzX0ludGVybmFsc18gcC4gMTk3KSAqLworICAgICAgICByZXR1cm4gLS1wRW50cnktPmxvY2s7CisgICAgfQorICAgIGVsc2UgcmV0dXJuIEZBTFNFOwogfQogCiAKZGlmZiAtLWdpdCBhL21lbW9yeS9zZWxlY3Rvci5jIGIvbWVtb3J5L3NlbGVjdG9yLmMKaW5kZXggNGJlMTYzZC4uZmVkODczZCAxMDA2NDQKLS0tIGEvbWVtb3J5L3NlbGVjdG9yLmMKKysrIGIvbWVtb3J5L3NlbGVjdG9yLmMKQEAgLTMwOSwxNCArMzA5LDE0IEBACiAgICAgaWYgKG9wID09IDApICAvKiBnZXQgKi8KICAgICB7CiAgICAgICAgIHJldHVybiAxIC8qIGFjY2Vzc2VkICovIHwKLSAgICAgICAgICAgICAgIChlbnRyeS5yZWFkX29ubHkgPDwgMSkgfAorICAgICAgICAgICAgICAgKChlbnRyeS5yZWFkX29ubHkgPT0gMCkgPDwgMSkgfAogICAgICAgICAgICAgICAgKGVudHJ5LnR5cGUgPDwgMikgfAogICAgICAgICAgICAgICAgKGVudHJ5LnNlZ18zMmJpdCA8PCAxNCkgfAogICAgICAgICAgICAgICAgKGVudHJ5LmxpbWl0X2luX3BhZ2VzIDw8IDE1KTsKICAgICB9CiAgICAgZWxzZSAgLyogc2V0ICovCiAgICAgewotICAgICAgICBlbnRyeS5yZWFkX29ubHkgPSB2YWwgJiAyOworICAgICAgICBlbnRyeS5yZWFkX29ubHkgPSAodmFsICYgMiA9PSAwKTsKICAgICAgICAgZW50cnkudHlwZSA9ICh2YWwgPj4gMikgJiAzOwogICAgICAgICBlbnRyeS5zZWdfMzJiaXQgPSB2YWwgJiAweDQwMDA7CiAgICAgICAgIGVudHJ5LmxpbWl0X2luX3BhZ2VzID0gdmFsICYgMHg4MDAwOwpkaWZmIC0tZ2l0IGEvbWlzYy9JbWFrZWZpbGUgYi9taXNjL0ltYWtlZmlsZQppbmRleCAxNDcwYmFkLi4yYjg5YmQ3IDEwMDY0NAotLS0gYS9taXNjL0ltYWtlZmlsZQorKysgYi9taXNjL0ltYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQAogCXNweS5jIFwKIAlzdHJlc3MuYyBcCiAJdXNlci5jIFwKKwl1c2VyMzIuYyBcCiAJd2luc29ja2V0LmMKIAogT0JKUyA9ICQoU1JDUzouYz0ubykKZGlmZiAtLWdpdCBhL21pc2MvTWFrZWZpbGUuaW4gYi9taXNjL01ha2VmaWxlLmluCmluZGV4IGYyYjRhOTYuLmM2MDZiOTQgMTAwNjQ0Ci0tLSBhL21pc2MvTWFrZWZpbGUuaW4KKysrIGIvbWlzYy9NYWtlZmlsZS5pbgpAQCAtMSw0OSArMSw0NCBAQAotQ0MgCT0gQENDQAotQ0ZMQUdTIAk9IEBDRkxBR1NACi1YSU5DTCAJPSBAeF9pbmNsdWRlc0AKLVRPUFNSQyAgPSBAdG9wX3NyY2RpckAKLURJVklOQ0wgPSAtSSQoVE9QU1JDKS9pbmNsdWRlIC1JJChUT1BTUkMpCi1MRAk9IEBMREAKLUxBTkcJPSBATEFOR0AKLUxEQ09NQklORUZMQUdTID0gQExEQ09NQklORUZMQUdTQAotQFNFVF9NQUtFQAorVE9QU1JDID0gQHRvcF9zcmNkaXJACitNT0RVTEUgPSBtaXNjCiAKLQotTU9EVUxFIAk9IG1pc2MKLQotU1JDUyAJPSBjbGlwYm9hcmQuYyBjb21tLmMgY29tbWRsZy5jIGNvbXBvYmouYyBkb3NfZnMuYyBcCi0JZHJpdmVyLmMgZXhlYy5jIGVzY2FwZS5jIGZpbGUuYyBrZXlib2FyZC5jIGtlcm5lbDMyLmMgbHN0ci5jIFwKLQltYWluLmMgb2xlMi5jIG9sZTJkaXNwLmMgb2xlMm5scy5jIG9sZWNsaS5jIG9sZXN2ci5jIG5ldHdvcmsuYyBcCi0JcHJvZmlsZS5jIHJlY3QuYyBzaGVsbC5jIHNvdW5kLmMgc3B5LmMgc3RyZXNzLmMgdXNlci5jIFwKK0NfU1JDUyA9IFwKKwljbGlwYm9hcmQuYyBcCisJY29tbS5jIFwKKwljb21tZGxnLmMgXAorCWNvbXBvYmouYyBcCisJZG9zX2ZzLmMgXAorCWRyaXZlci5jIFwKKwlleGVjLmMgXAorCWVzY2FwZS5jIFwKKwlmaWxlLmMgXAorCWtleWJvYXJkLmMgXAorCWtlcm5lbDMyLmMgXAorCWxzdHIuYyBcCisJbWFpbi5jIFwKKwlvbGUyLmMgXAorCW9sZTJkaXNwLmMgXAorCW9sZTJubHMuYyBcCisJb2xlY2xpLmMgXAorCW9sZXN2ci5jIFwKKwluZXR3b3JrLmMgXAorCXByb2ZpbGUuYyBcCisJcmVjdC5jIFwKKwlzaGVsbC5jIFwKKwlzb3VuZC5jIFwKKwlzcHkuYyBcCisJc3RyZXNzLmMgXAorCXVzZXIuYyBcCisJdXNlcjMyLmMgXAogCXdpbnNvY2tldC5jCi0gCi1PQkpTID0gJChTUkNTOi5jPS5vKQotCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpICQoTEFORykgLW8gJCoubyAkPAogCiBhbGw6IGNoZWNrcmMgJChNT0RVTEUpLm8KIAogY2hlY2tyYzogZHVtbXkKLQljZCAkKFRPUFNSQykvcmM7ICQoTUFLRSkgJ0NDPSQoQ0MpJyAnQ0ZMQUdTPSQoQ0ZMQUdTKScgJ0xEPSQoTEQpJyAnTERDT01CSU5FRkxBR1M9JChMRENPTUJJTkVGTEFHUyknCisJY2QgJChUT1BTUkMpL3JjOyAkKE1BS0UpICdDQz0kKENDKScgJ0NGTEFHUz0kKENGTEFHUyknICdERUZTPSQoREVGUyknICdMQU5HPSQoTEFORyknCiAKLSQoTU9EVUxFKS5vOiAkKE9CSlMpCi0JJChMRCkgJChMRENPTUJJTkVGTEFHUykgJChPQkpTKSAtbyAkKE1PRFVMRSkubworbGFuZ2NsZWFuOjoKKwkkKFJNKSBvbGUybmxzLm8KIAotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46Ci0Jcm0gLWYgb2xlMm5scy5vIHNoZWxsLm8gY29tbWRsZy5vCi0KLWR1bW15OgorQE1BS0VfUlVMRVNACiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9taXNjL2NvbW1kbGcuYyBiL21pc2MvY29tbWRsZy5jCmluZGV4IDc5Y2ZiNjkuLjc3NGNjODQgMTAwNjQ0Ci0tLSBhL21pc2MvY29tbWRsZy5jCisrKyBiL21pc2MvY29tbWRsZy5jCkBAIC03LDkgKzcsOSBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZGlhbG9nLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAidXNlci5oIgorI2luY2x1ZGUgImdsb2JhbC5oIgogI2luY2x1ZGUgIm1lc3NhZ2UuaCIKICNpbmNsdWRlICJjb21tZGxnLmgiCiAjaW5jbHVkZSAiZGxncy5oIgpAQCAtMTgsOSArMTgsNiBAQAogI2luY2x1ZGUgImRvc19mcy5oIgogI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKIAotI2RlZmluZSBPUEVORklMRURMRzIJCQkxMQotI2RlZmluZSBTQVZFRklMRURMRzIJCQkxMgotCiBzdGF0aWMJRFdPUkQgCQlDb21tRGxnTGFzdEVycm9yID0gMDsKIAogc3RhdGljCUhCSVRNQVAJCWhGb2xkZXIgPSAwOwpAQCAtNTQsMTA2ICs1MSw5OCBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlHZXRPcGVuRmlsZU5hbWUJCQlbQ09NTURMRy4xXQorICogICAgICAgICAgIEdldE9wZW5GaWxlTmFtZSAgIChDT01NRExHLjEpCiAgKi8KIEJPT0wgR2V0T3BlbkZpbGVOYW1lKExQT1BFTkZJTEVOQU1FIGxwb2ZuKQogewotICBIQU5ETEUgICAgaERsZ1RtcGw7Ci0gIEhBTkRMRSAgICBoUmVzSW5mbzsKLSAgSElOU1RBTkNFIGhJbnN0OwotICBCT09MIAkgICAgYlJldDsKLSAgTFBDU1RSICAgIGRsZ1RlbXBsYXRlOworICAgIEhJTlNUQU5DRSBoSW5zdDsKKyAgICBIQU5ETEUgaERsZ1RtcGwsIGhSZXNJbmZvOworICAgIEJPT0wgYlJldDsKICAgCi0gIGlmIChscG9mbiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFGaWxlRGxnX0luaXQoKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpCisgICAgaWYgKCFscG9mbiB8fCAhRmlsZURsZ19Jbml0KCkpIHJldHVybiBGQUxTRTsKKworICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpIGhEbGdUbXBsID0gbHBvZm4tPmhJbnN0YW5jZTsKKyAgICBlbHNlIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEUpCiAgICAgewotICAgICAgZGxnVGVtcGxhdGUgPSBHbG9iYWxMb2NrKGxwb2ZuLT5oSW5zdGFuY2UpOwotICAgICAgaWYgKCFkbGdUZW1wbGF0ZSkKLQl7Ci0JICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7Ci0JICByZXR1cm4gRkFMU0U7Ci0JfQorICAgICAgICBpZiAoIShoUmVzSW5mbyA9IEZpbmRSZXNvdXJjZSggbHBvZm4tPmhJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwb2ZuLT5scFRlbXBsYXRlTmFtZSwgUlRfRElBTE9HKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9GSU5EUkVTRkFJTFVSRTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBoRGxnVG1wbCA9IExvYWRSZXNvdXJjZSggbHBvZm4tPmhJbnN0YW5jZSwgaFJlc0luZm8gKTsKICAgICB9Ci0gIGVsc2UKKyAgICBlbHNlIGhEbGdUbXBsID0gR0xPQkFMX0NyZWF0ZUJsb2NrKCBHTUVNX0ZJWEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jlc19ESUFMT0dfT1BFTl9GSUxFLmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jlc19ESUFMT0dfT1BFTl9GSUxFLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q3VycmVudFBEQigpLCBGQUxTRSwgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgTlVMTCApOworICAgIGlmICghaERsZ1RtcGwpCiAgICAgewotICAgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVURU1QTEFURSkKLQl7Ci0JICBoSW5zdCA9IGxwb2ZuLT5oSW5zdGFuY2U7Ci0JICBoUmVzSW5mbyA9IEZpbmRSZXNvdXJjZShoSW5zdCwgbHBvZm4tPmxwVGVtcGxhdGVOYW1lLCBSVF9ESUFMT0cpOwotCSAgaWYgKGhSZXNJbmZvID09IDApCi0JICAgIHsKLQkgICAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfRklORFJFU0ZBSUxVUkU7Ci0JICAgICAgcmV0dXJuIEZBTFNFOwotCSAgICB9Ci0JICBoRGxnVG1wbCA9IExvYWRSZXNvdXJjZShoSW5zdCwgaFJlc0luZm8pOwotCSAgaWYgKGhEbGdUbXBsID09IDApCi0JICAgIHsKLQkgICAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7Ci0JICAgICAgcmV0dXJuIEZBTFNFOwotCSAgICB9Ci0JICBkbGdUZW1wbGF0ZSA9IEdsb2JhbExvY2soaERsZ1RtcGwpOwotCX0KLSAgICAgIGVsc2UKLQlkbGdUZW1wbGF0ZSA9IHN5c3Jlc19ESUFMT0dfMzsKKyAgICAgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotICBoSW5zdCA9IEdldFdpbmRvd1dvcmQobHBvZm4tPmh3bmRPd25lciwgR1dXX0hJTlNUQU5DRSk7Ci0gIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtUHRyKGhJbnN0LCBkbGdUZW1wbGF0ZSwgbHBvZm4tPmh3bmRPd25lciwKLQkJCQkgICBHZXRXbmRQcm9jRW50cnkxNigiRmlsZU9wZW5EbGdQcm9jIiksCi0JCQkJICAgKERXT1JEKWxwb2ZuKTsKLSAgcHJpbnRmKCJHZXRPcGVuRmlsZU5hbWUgLy8gcmV0dXJuIGxwc3RyRmlsZT0nJXMnICFcbiIsIAotCSAoTFBTVFIpUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsZSkpOwotICByZXR1cm4gYlJldDsKKworICAgIGhJbnN0ID0gR2V0V2luZG93V29yZCggbHBvZm4tPmh3bmRPd25lciwgR1dXX0hJTlNUQU5DRSApOworICAgIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKCBoSW5zdCwgaERsZ1RtcGwsIGxwb2ZuLT5od25kT3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFduZFByb2NFbnRyeTE2KCJGaWxlT3BlbkRsZ1Byb2MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEKWxwb2ZuICk7CisKKyAgICBpZiAoIShscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpKQorICAgIHsKKyAgICAgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVURU1QTEFURSkgRnJlZVJlc291cmNlKCBoRGxnVG1wbCApOworICAgICAgICBlbHNlIEdMT0JBTF9GcmVlQmxvY2soIGhEbGdUbXBsICk7CisgICAgfQorCisgICAgcHJpbnRmKCJHZXRPcGVuRmlsZU5hbWUgLy8gcmV0dXJuIGxwc3RyRmlsZT0nJXMnICFcbiIsIAorICAgICAgICAgICAoTFBTVFIpUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsZSkpOworICAgIHJldHVybiBiUmV0OwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCQkJCUdldFNhdmVGaWxlTmFtZQkJCVtDT01NRExHLjJdCisgKiAgICAgICAgICAgR2V0U2F2ZUZpbGVOYW1lICAgKENPTU1ETEcuMikKICAqLwogQk9PTCBHZXRTYXZlRmlsZU5hbWUoTFBPUEVORklMRU5BTUUgbHBvZm4pCiB7Ci0gIEhBTkRMRSAgICBoRGxnVG1wbDsKLSAgSEFORExFICAgIGhSZXNJbmZvOwotICBISU5TVEFOQ0UgaEluc3Q7Ci0gIEJPT0wJICAgIGJSZXQ7Ci0gIExQQ1NUUiAgICBkbGdUZW1wbGF0ZTsKKyAgICBISU5TVEFOQ0UgaEluc3Q7CisgICAgSEFORExFIGhEbGdUbXBsLCBoUmVzSW5mbzsKKyAgICBCT09MIGJSZXQ7CiAgIAotICBpZiAoIUZpbGVEbGdfSW5pdCgpKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKCFscG9mbiB8fCAhRmlsZURsZ19Jbml0KCkpIHJldHVybiBGQUxTRTsKIAotICBpZiAobHBvZm4gPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotICBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFSEFORExFKSB7Ci0gICAgZGxnVGVtcGxhdGUgPSBHbG9iYWxMb2NrKGxwb2ZuLT5oSW5zdGFuY2UpOwotICAgIGlmICghZGxnVGVtcGxhdGUpIHsKLSAgICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9MT0FEUkVTRkFJTFVSRTsKLSAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFSEFORExFKSBoRGxnVG1wbCA9IGxwb2ZuLT5oSW5zdGFuY2U7CisgICAgZWxzZSBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFKQorICAgIHsKKyAgICAgICAgaEluc3QgPSBscG9mbi0+aEluc3RhbmNlOworICAgICAgICBpZiAoIShoUmVzSW5mbyA9IEZpbmRSZXNvdXJjZSggbHBvZm4tPmhJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwb2ZuLT5scFRlbXBsYXRlTmFtZSwgUlRfRElBTE9HICkpKQorICAgICAgICB7CisgICAgICAgICAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfRklORFJFU0ZBSUxVUkU7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaERsZ1RtcGwgPSBMb2FkUmVzb3VyY2UoIGxwb2ZuLT5oSW5zdGFuY2UsIGhSZXNJbmZvICk7CiAgICAgfQotICB9IGVsc2UgewotICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEUpIHsKLSAgICAgIGhJbnN0ID0gbHBvZm4tPmhJbnN0YW5jZTsKLSAgICAgIGhSZXNJbmZvID0gRmluZFJlc291cmNlKGhJbnN0LCBscG9mbi0+bHBUZW1wbGF0ZU5hbWUsIFJUX0RJQUxPRyk7Ci0gICAgICBpZiAoaFJlc0luZm8gPT0gMCkgewotCUNvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9GSU5EUkVTRkFJTFVSRTsKLQlyZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBoRGxnVG1wbCA9IExvYWRSZXNvdXJjZShoSW5zdCwgaFJlc0luZm8pOwotICAgICAgaWYgKGhEbGdUbXBsID09IDApIHsKLQlDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7Ci0JcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgZGxnVGVtcGxhdGUgPSBHbG9iYWxMb2NrKGhEbGdUbXBsKTsKLSAgICB9IGVsc2UgewotICAgICAgZGxnVGVtcGxhdGUgPSBzeXNyZXNfRElBTE9HXzQ7IC8qIFNBVkVGSUxFRElBTE9HICovCisgICAgZWxzZSBoRGxnVG1wbCA9IEdMT0JBTF9DcmVhdGVCbG9jayggR01FTV9GSVhFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZXNfRElBTE9HX1NBVkVfRklMRS5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZXNfRElBTE9HX1NBVkVfRklMRS5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEN1cnJlbnRQREIoKSwgRkFMU0UsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIE5VTEwgKTsKKworCisgICAgaEluc3QgPSBHZXRXaW5kb3dXb3JkKCBscG9mbi0+aHduZE93bmVyLCBHV1dfSElOU1RBTkNFICk7CisgICAgYlJldCA9IERpYWxvZ0JveEluZGlyZWN0UGFyYW0oIGhJbnN0LCBoRGxnVG1wbCwgbHBvZm4tPmh3bmRPd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIkZpbGVTYXZlRGxnUHJvYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbHBvZm4pOyAKKyAgICBpZiAoIShscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpKQorICAgIHsKKyAgICAgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVURU1QTEFURSkgRnJlZVJlc291cmNlKCBoRGxnVG1wbCApOworICAgICAgICBlbHNlIEdMT0JBTF9GcmVlQmxvY2soIGhEbGdUbXBsICk7CiAgICAgfQotICB9Ci0gIGhJbnN0ID0gR2V0V2luZG93V29yZChscG9mbi0+aHduZE93bmVyLCBHV1dfSElOU1RBTkNFKTsKLSAgYlJldCA9IERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIoaEluc3QsIGRsZ1RlbXBsYXRlLCBscG9mbi0+aHduZE93bmVyLAotCQkJCSAgIEdldFduZFByb2NFbnRyeTE2KCJGaWxlU2F2ZURsZ1Byb2MiKSwKLQkJCQkgICAoRFdPUkQpbHBvZm4pOyAKLSAgcHJpbnRmKCJHZXRTYXZlRmlsZU5hbWUgLy8gcmV0dXJuIGxwc3RyRmlsZT0nJXMnICFcbiIsIAotCSAoTFBTVFIpUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsZSkpOwotICByZXR1cm4gYlJldDsKKworICAgIHByaW50ZiggIkdldFNhdmVGaWxlTmFtZSAvLyByZXR1cm4gbHBzdHJGaWxlPSclcycgIVxuIiwgCisgICAgICAgICAgICAoTFBTVFIpUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsZSkpOworICAgIHJldHVybiBiUmV0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMyOCwxMyArMzE3LDE2IEBACiAgIGlmIChscG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpCiAgICAgewogICAgICAgcHN0ciA9IChMUFNUUilQVFJfU0VHX1RPX0xJTihscG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpOworICAgICAgcHJpbnRmKCJscHN0ckN1c3RvbUZpbHRlciA9ICVwXG4iLCBwc3RyKTsKICAgICAgIHdoaWxlKCpwc3RyKQogCXsKIAkgIG4gPSBzdHJsZW4ocHN0cik7CiAJICBzdHJjcHkodG1wc3RyLCBwc3RyKTsKKwkgIHByaW50ZigibHBzdHJDdXN0b21GaWx0ZXIgLy8gYWRkIHRtcHN0cj0nJXMnICIsIHRtcHN0cik7CiAJICBTZW5kRGxnSXRlbU1lc3NhZ2UoaFduZCwgY21iMSwgQ0JfQUREU1RSSU5HLCAwLCBNQUtFX1NFR1BUUih0bXBzdHIpKTsKIAkgIHBzdHIgKz0gbiArIDE7CiAJICBuID0gc3RybGVuKHBzdHIpOworCSAgcHJpbnRmKCJhc3NvY2lhdGVkIHRvICclcydcbiIsIHBzdHIpOwogCSAgcHN0ciArPSBuICsgMTsKIAl9CiAgICAgfQpAQCAtMzQ0LDE1ICszMzYsMjEgQEAKICAgICB7CiAgICAgICBuID0gc3RybGVuKHBzdHIpOwogICAgICAgc3RyY3B5KHRtcHN0ciwgcHN0cik7CisgICAgICBwcmludGYoImxwc3RyRmlsdGVyIC8vIGFkZCB0bXBzdHI9JyVzJyAiLCB0bXBzdHIpOwogICAgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhXbmQsIGNtYjEsIENCX0FERFNUUklORywgMCwgTUFLRV9TRUdQVFIodG1wc3RyKSk7CiAgICAgICBwc3RyICs9IG4gKyAxOwogICAgICAgbiA9IHN0cmxlbihwc3RyKTsKKyAgICAgIHByaW50ZigiYXNzb2NpYXRlZCB0byAnJXMnXG4iLCBwc3RyKTsKICAgICAgIHBzdHIgKz0gbiArIDE7CiAgICAgfQogICAvKiBzZXQgZGVmYXVsdCBmaWx0ZXIgKi8KLSAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhXbmQsIGNtYjEsIENCX1NFVENVUlNFTCwgMCwgMCk7ICAgIAorICBpZiAobHBvZm4tPm5GaWx0ZXJJbmRleCA9PSAwICYmIGxwb2ZuLT5scHN0ckN1c3RvbUZpbHRlciA9PSAoU0VHUFRSKU5VTEwpCisgIAlscG9mbi0+bkZpbHRlckluZGV4ID0gMTsKKyAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhXbmQsIGNtYjEsIENCX1NFVENVUlNFTCwgbHBvZm4tPm5GaWx0ZXJJbmRleCAtIDEsIDApOyAgICAKICAgc3RyY3B5KHRtcHN0ciwgRklMRURMR19HZXRGaWxlVHlwZShQVFJfU0VHX1RPX0xJTihscG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpLAotCQkJCSAgICAgUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsdGVyKSwgMCkpOworCSAgICAgUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsdGVyKSwgbHBvZm4tPm5GaWx0ZXJJbmRleCAtIDEpKTsKKyAgcHJpbnRmKCJuRmlsdGVySW5kZXggPSAlbGQgLy8gU2V0VGV4dCBvZiBlZHQxIHRvICclcydcbiIsIAorICAJCQlscG9mbi0+bkZpbHRlckluZGV4LCB0bXBzdHIpOwogICBTZW5kRGxnSXRlbU1lc3NhZ2UoaFduZCwgZWR0MSwgV01fU0VUVEVYVCwgMCwgTUFLRV9TRUdQVFIodG1wc3RyKSk7CiAgIC8qIGdldCBkcml2ZSBsaXN0ICovCiAgICp0bXBzdHIgPSAwOwpAQCAtMzcxLDcgKzM2OSw3IEBACiAgICAgZnByaW50ZihzdGRlcnIsICJGaWxlRGxnOiBjb3VsZG4ndCByZWFkIGluaXRpYWwgZGlyZWN0b3J5ICVzIVxuIiwgdG1wc3RyKTsKICAgLyogc2VsZWN0IGN1cnJlbnQgZHJpdmUgaW4gY29tYm8gMiAqLwogICBuID0gRE9TX0dldERlZmF1bHREcml2ZSgpOwotICBTZW5kRGxnSXRlbU1lc3NhZ2UoaFduZCwgY21iMiwgQ0JfU0VUQ1VSU0VMLCBuIC0gMSwgMCk7CisgIFNlbmREbGdJdGVtTWVzc2FnZShoV25kLCBjbWIyLCBDQl9TRVRDVVJTRUwsIG4sIDApOwogICBpZiAoIShscG9mbi0+RmxhZ3MgJiBPRk5fU0hPV0hFTFApKQogICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoV25kLCBwc2hIZWxwKSwgU1dfSElERSk7CiAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fSElERVJFQURPTkxZKQpAQCAtNDc4LDYgKzQ3Niw4IEBACiAJc3RyY2F0KHRtcHN0ciwgIlxcIik7CiAgICAgICBsUmV0ID0gU2VuZERsZ0l0ZW1NZXNzYWdlKGhXbmQsIGNtYjEsIENCX0dFVENVUlNFTCwgMCwgMCk7CiAgICAgICBpZiAobFJldCA9PSBMQl9FUlIpIHJldHVybiBUUlVFOworICAgICAgbHBvZm4tPm5GaWx0ZXJJbmRleCA9IGxSZXQgKyAxOworICAgICAgcHJpbnRmKCJjb21tZGxnOiBscG9mbi0+bkZpbHRlckluZGV4PSVsZFxuIiwgbHBvZm4tPm5GaWx0ZXJJbmRleCk7CiAgICAgICBzdHJjcHkodG1wc3RyMiwgCiAJICAgICBGSUxFRExHX0dldEZpbGVUeXBlKFBUUl9TRUdfVE9fTElOKGxwb2ZuLT5scHN0ckN1c3RvbUZpbHRlciksCiAJCQkJIFBUUl9TRUdfVE9fTElOKGxwb2ZuLT5scHN0ckZpbHRlciksCkBAIC01MzAsMTAgKzUzMCwxMCBAQAogICByZXR1cm4gRkFMU0U7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCQkJCUZpbGVPcGVuRGxnUHJvYwkJCVtDT01NRExHLjZdCi0gKi8KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRmlsZU9wZW5EbGdQcm9jICAgKENPTU1ETEcuNikKKyAqLwogQk9PTCBGaWxlT3BlbkRsZ1Byb2MoSFdORCBoV25kLCBXT1JEIHdNc2csIFdPUkQgd1BhcmFtLCBMT05HIGxQYXJhbSkKIHsgIAogICBzd2l0Y2ggKHdNc2cpCkBAIC01NjYsNyArNTY2LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlGaWxlU2F2ZURsZ1Byb2MJCQlbQ09NTURMRy43XQorICogICAgICAgICAgIEZpbGVTYXZlRGxnUHJvYyAgIChDT01NRExHLjcpCiAgKi8KIEJPT0wgRmlsZVNhdmVEbGdQcm9jKEhXTkQgaFduZCwgV09SRCB3TXNnLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0pCiB7CkBAIC02MDQsMjIgKzYwNCwyNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCQkJCUNob29zZUNvbG9yCQkJCVtDT01NRExHLjVdCisgKiAgICAgICAgICAgQ2hvb3NlQ29sb3IgICAoQ09NTURMRy41KQogICovCiBCT09MIENob29zZUNvbG9yKExQQ0hPT1NFQ09MT1IgbHBDaENvbCkKIHsKLSAgICAgICAgV05EICAgICAqd25kUHRyOwotCUJPT0wJYlJldDsKLSAgICAgICAgd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIobHBDaENvbC0+aHduZE93bmVyKTsKLQliUmV0ID0gRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cih3bmRQdHItPmhJbnN0YW5jZSwgc3lzcmVzX0RJQUxPR184LAotCQlscENoQ29sLT5od25kT3duZXIsIEdldFduZFByb2NFbnRyeTE2KCJDb2xvckRsZ1Byb2MiKSwgCi0JCShEV09SRClscENoQ29sKTsKLQlyZXR1cm4gYlJldDsKKyAgICBIQU5ETEUgaEluc3QsIGhEbGdUbXBsOworICAgIEJPT0wgYlJldDsKKworICAgIGhEbGdUbXBsID0gR0xPQkFMX0NyZWF0ZUJsb2NrKEdNRU1fRklYRUQsIHN5c3Jlc19ESUFMT0dfQ0hPT1NFX0NPTE9SLmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jlc19ESUFMT0dfQ0hPT1NFX0NPTE9SLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q3VycmVudFBEQigpLCBGQUxTRSwgRkFMU0UsIFRSVUUsIE5VTEwgKTsKKyAgICBoSW5zdCA9IEdldFdpbmRvd1dvcmQoIGxwQ2hDb2wtPmh3bmRPd25lciwgR1dXX0hJTlNUQU5DRSApOworICAgIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKCBoSW5zdCwgaERsZ1RtcGwsIGxwQ2hDb2wtPmh3bmRPd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIkNvbG9yRGxnUHJvYyIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEKWxwQ2hDb2wgKTsKKyAgICBHTE9CQUxfRnJlZUJsb2NrKCBoRGxnVG1wbCApOworICAgIHJldHVybiBiUmV0OwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCQkJCUNvbG9yRGxnUHJvYwkJCVtDT01NRExHLjhdCisgKiAgICAgICAgICAgQ29sb3JEbGdQcm9jICAgKENPTU1ETEcuOCkKICAqLwogQk9PTCBDb2xvckRsZ1Byb2MoSFdORCBoV25kLCBXT1JEIHdNc2csIFdPUkQgd1BhcmFtLCBMT05HIGxQYXJhbSkKIHsKQEAgLTY0Niw0MyArNjUxLDQ3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAJCQkJRmluZFRleHREbGcJCQkJW0NPTU1ETEcuMTFdCisgKiAgICAgICAgICAgRmluZFRleHREbGcgICAoQ09NTURMRy4xMSkKICAqLwogQk9PTCBGaW5kVGV4dChMUEZJTkRSRVBMQUNFIGxwRmluZCkKIHsKLSAgV05EICAgICp3bmRQdHI7Ci0gIEJPT0wgICBiUmV0OwotICBMUENTVFIgbHBUZW1wbGF0ZTsKLSAgCi0gIGxwVGVtcGxhdGUgPSBzeXNyZXNfRElBTE9HXzk7Ci0gIHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGxwRmluZC0+aHduZE93bmVyKTsKLSAgYlJldCA9IERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIod25kUHRyLT5oSW5zdGFuY2UsIGxwVGVtcGxhdGUsCi0JCQkJbHBGaW5kLT5od25kT3duZXIsIEdldFduZFByb2NFbnRyeTE2KCJGaW5kVGV4dERsZ1Byb2MiKSwKLQkJCQkoRFdPUkQpbHBGaW5kKTsKLSAgcmV0dXJuIGJSZXQ7CisgICAgSEFORExFIGhJbnN0LCBoRGxnVG1wbDsKKyAgICBCT09MIGJSZXQ7CisKKyAgICBoRGxnVG1wbCA9IEdMT0JBTF9DcmVhdGVCbG9jayhHTUVNX0ZJWEVELCBzeXNyZXNfRElBTE9HX0ZJTkRfVEVYVC5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZXNfRElBTE9HX0ZJTkRfVEVYVC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEN1cnJlbnRQREIoKSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBOVUxMICk7CisgICAgaEluc3QgPSBHZXRXaW5kb3dXb3JkKCBscEZpbmQtPmh3bmRPd25lciwgR1dXX0hJTlNUQU5DRSApOworICAgIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKCBoSW5zdCwgaERsZ1RtcGwsIGxwRmluZC0+aHduZE93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRXbmRQcm9jRW50cnkxNigiRmluZFRleHREbGdQcm9jIiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbHBGaW5kICk7CisgICAgR0xPQkFMX0ZyZWVCbG9jayggaERsZ1RtcGwgKTsKKyAgICByZXR1cm4gYlJldDsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlSZXBsYWNlVGV4dERsZwkJCVtDT01NRExHLjEyXQorICogICAgICAgICAgIFJlcGxhY2VUZXh0RGxnICAgKENPTU1ETEcuMTIpCiAgKi8KIEJPT0wgUmVwbGFjZVRleHQoTFBGSU5EUkVQTEFDRSBscEZpbmQpCiB7Ci0gIFdORCAgICAqd25kUHRyOwotICBCT09MICAgYlJldDsKLSAgTFBDU1RSIGxwVGVtcGxhdGU7CisgICAgSEFORExFIGhJbnN0LCBoRGxnVG1wbDsKKyAgICBCT09MIGJSZXQ7CiAKLSAgbHBUZW1wbGF0ZSA9IHN5c3Jlc19ESUFMT0dfMTA7Ci0gIHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGxwRmluZC0+aHduZE93bmVyKTsKLSAgYlJldCA9IERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIod25kUHRyLT5oSW5zdGFuY2UsIGxwVGVtcGxhdGUsCi0JCQkJICAgbHBGaW5kLT5od25kT3duZXIsIEdldFduZFByb2NFbnRyeTE2KCJSZXBsYWNlVGV4dERsZ1Byb2MiKSwKLQkJCQkgICAoRFdPUkQpbHBGaW5kKTsKLSAgcmV0dXJuIGJSZXQ7CisgICAgaERsZ1RtcGwgPSBHTE9CQUxfQ3JlYXRlQmxvY2soR01FTV9GSVhFRCwgc3lzcmVzX0RJQUxPR19SRVBMQUNFX1RFWFQuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzcmVzX0RJQUxPR19SRVBMQUNFX1RFWFQuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDdXJyZW50UERCKCksIEZBTFNFLCBGQUxTRSwgVFJVRSwgTlVMTCApOworICAgIGhJbnN0ID0gR2V0V2luZG93V29yZCggbHBGaW5kLT5od25kT3duZXIsIEdXV19ISU5TVEFOQ0UgKTsKKyAgICBiUmV0ID0gRGlhbG9nQm94SW5kaXJlY3RQYXJhbSggaEluc3QsIGhEbGdUbXBsLCBscEZpbmQtPmh3bmRPd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIlJlcGxhY2VUZXh0RGxnUHJvYyIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEKWxwRmluZCApOworICAgIEdMT0JBTF9GcmVlQmxvY2soIGhEbGdUbXBsICk7CisgICAgcmV0dXJuIGJSZXQ7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAJCQkJRmluZFRleHREbGdQcm9jCQkJW0NPTU1ETEcuMTNdCisgKiAgICAgICAgICAgRmluZFRleHREbGdQcm9jICAgKENPTU1ETEcuMTMpCiAgKi8KIEJPT0wgRmluZFRleHREbGdQcm9jKEhXTkQgaFduZCwgV09SRCB3TXNnLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0pCiB7CkBAIC03MDksNyArNzE4LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlSZXBsYWNlVGV4dERsZ1Byb2MJCVtDT01NRExHLjE0XQorICogICAgICAgICAgIFJlcGxhY2VUZXh0RGxnUHJvYyAgIChDT01NRExHLjE0KQogICovCiBCT09MIFJlcGxhY2VUZXh0RGxnUHJvYyhIV05EIGhXbmQsIFdPUkQgd01zZywgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtKQogewpAQCAtNzM2LDM1ICs3NDUsNDAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlQcmludERsZwkJCQlbQ09NTURMRy4yMF0KKyAqICAgICAgICAgICBQcmludERsZyAgIChDT01NRExHLjIwKQogICovCiBCT09MIFByaW50RGxnKExQUFJJTlRETEcgbHBQcmludCkKIHsKLSAgV05EICAgICp3bmRQdHI7Ci0gIEJPT0wgICBiUmV0OwotICBMUENTVFIgbHBUZW1wbGF0ZTsKLSAgCi0gIHByaW50ZigiUHJpbnREbGcoJXApIC8vIEZsYWdzPSUwOGxYXG4iLCBscFByaW50LCBscFByaW50LT5GbGFncyk7Ci0gIGlmIChscFByaW50LT5GbGFncyAmIFBEX1BSSU5UU0VUVVApICB7Ci0gICAgbHBUZW1wbGF0ZSA9IHN5c3Jlc19ESUFMT0dfNjsKLSAgfSBlbHNlICB7Ci0gICAgbHBUZW1wbGF0ZSA9IHN5c3Jlc19ESUFMT0dfNTsKLSAgfQotICB3bmRQdHIgPSBXSU5fRmluZFduZFB0cihscFByaW50LT5od25kT3duZXIpOwotICBpZiAobHBQcmludC0+RmxhZ3MgJiBQRF9QUklOVFNFVFVQKQotICBiUmV0ID0gRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cih3bmRQdHItPmhJbnN0YW5jZSwgbHBUZW1wbGF0ZSwKLQkJCQkgICBscFByaW50LT5od25kT3duZXIsIEdldFduZFByb2NFbnRyeTE2KCJQcmludFNldHVwRGxnUHJvYyIpLAotCQkJCSAgIChEV09SRClscFByaW50KTsKLSAgZWxzZQotICBiUmV0ID0gRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cih3bmRQdHItPmhJbnN0YW5jZSwgbHBUZW1wbGF0ZSwKLQkJCQkgICBscFByaW50LT5od25kT3duZXIsIEdldFduZFByb2NFbnRyeTE2KCJQcmludERsZ1Byb2MiKSwKLQkJCQkgICAoRFdPUkQpbHBQcmludCk7Ci0gIHJldHVybiBiUmV0OworICAgIEhBTkRMRSBoSW5zdCwgaERsZ1RtcGw7CisgICAgQk9PTCBiUmV0OworCisgICAgcHJpbnRmKCJQcmludERsZyglcCkgLy8gRmxhZ3M9JTA4bFhcbiIsIGxwUHJpbnQsIGxwUHJpbnQtPkZsYWdzICk7CisKKyAgICBpZiAobHBQcmludC0+RmxhZ3MgJiBQRF9QUklOVFNFVFVQKQorICAgICAgICBoRGxnVG1wbCA9IEdMT0JBTF9DcmVhdGVCbG9jayggR01FTV9GSVhFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jlc19ESUFMT0dfUFJJTlRfU0VUVVAuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZXNfRElBTE9HX1BSSU5UX1NFVFVQLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDdXJyZW50UERCKCksIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIFRSVUUsIE5VTEwgKTsKKyAgICBlbHNlCisgICAgICAgIGhEbGdUbXBsID0gR0xPQkFMX0NyZWF0ZUJsb2NrKCBHTUVNX0ZJWEVELCBzeXNyZXNfRElBTE9HX1BSSU5ULmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzcmVzX0RJQUxPR19QUklOVC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q3VycmVudFBEQigpLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBUUlVFLCBOVUxMICk7CisKKyAgICBoSW5zdCA9IEdldFdpbmRvd1dvcmQoIGxwUHJpbnQtPmh3bmRPd25lciwgR1dXX0hJTlNUQU5DRSApOworICAgIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKCBoSW5zdCwgaERsZ1RtcGwsIGxwUHJpbnQtPmh3bmRPd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxwUHJpbnQtPkZsYWdzICYgUERfUFJJTlRTRVRVUCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIlByaW50U2V0dXBEbGdQcm9jIikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIlByaW50RGxnUHJvYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbHBQcmludCApOworICAgIEdMT0JBTF9GcmVlQmxvY2soIGhEbGdUbXBsICk7CisgICAgcmV0dXJuIGJSZXQ7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAJCQkJUHJpbnREbGdQcm9jCQkJW0NPTU1ETEcuMjFdCisgKiAgICAgICAgICAgUHJpbnREbGdQcm9jICAgKENPTU1ETEcuMjEpCiAgKi8KIEJPT0wgUHJpbnREbGdQcm9jKEhXTkQgaFduZCwgV09SRCB3TXNnLCBXT1JEIHdQYXJhbSwgTE9ORyBsUGFyYW0pCiB7CkBAIC03OTEsNyArODA1LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlQcmludFNldHVwRGxnUHJvYwkJW0NPTU1ETEcuMjJdCisgKiAgICAgICAgICAgUHJpbnRTZXR1cERsZ1Byb2MgICAoQ09NTURMRy4yMikKICAqLwogQk9PTCBQcmludFNldHVwRGxnUHJvYyhIV05EIGhXbmQsIFdPUkQgd01zZywgV09SRCB3UGFyYW0sIExPTkcgbFBhcmFtKQogewpAQCAtODE3LDcgKzgzMSw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAJCQkJQ29tbURsZ0V4dGVuZEVycm9yCQlbQ09NTURMRy4yNl0KKyAqICAgICAgICAgICBDb21tRGxnRXh0ZW5kRXJyb3IgICAoQ09NTURMRy4yNikKICAqLwogRFdPUkQgQ29tbURsZ0V4dGVuZEVycm9yKHZvaWQpCiB7CkBAIC04MjYsNyArODQwLDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIAkJCQlHZXRGaWxlVGl0bGUJCQlbQ09NTURMRy4yN10KKyAqICAgICAgICAgICBHZXRGaWxlVGl0bGUgICAoQ09NTURMRy4yNykKICAqLwogaW50IEdldEZpbGVUaXRsZShMUENTVFIgbHBGaWxlLCBMUFNUUiBscFRpdGxlLCBVSU5UIGNiQnVmKQogewpkaWZmIC0tZ2l0IGEvbWlzYy9kb3NfZnMuYyBiL21pc2MvZG9zX2ZzLmMKaW5kZXggMzIyZGRhYi4uYTE0MTc5OCAxMDA2NDQKLS0tIGEvbWlzYy9kb3NfZnMuYworKysgYi9taXNjL2Rvc19mcy5jCkBAIC0yOSwxMiArMjksMTYgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAibXNkb3MuaCIKICNpbmNsdWRlICJkb3NfZnMuaCIKLSNpbmNsdWRlICJhdXRvY29uZi5oIgogI2luY2x1ZGUgImNvbW0uaCIKICNpbmNsdWRlICJ0YXNrLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisjaWZuZGVmIFdJTkVfSU5JX0dMT0JBTAorLyogR2V0IHRoZSBXSU5FX0lOSV9HTE9CQUwgZGVmaW5pdGlvbiBmcm9tIGF1dG9jb25mLmggKi8KKyNpbmNsdWRlICJhdXRvY29uZi5oIgorI2VuZGlmCisKICNkZWZpbmUgV0lORV9JTklfVVNFUiAifi8ud2luZXJjIgogI2RlZmluZSBNQVhfRE9TX0RSSVZFUwkyNgogCmRpZmYgLS1naXQgYS9taXNjL2ZpbGUuYyBiL21pc2MvZmlsZS5jCmluZGV4IGMzZGMzZWQuLjI0ODhjNjMgMTAwNjQ0Ci0tLSBhL21pc2MvZmlsZS5jCisrKyBiL21pc2MvZmlsZS5jCkBAIC0yNzYsMTggKzI3NiwxNSBAQAogICAgICooKFdPUkQqKSgmb2ZzLT5yZXNlcnZlZFswXSkpPQogICAgICAgICAgKChub3ctPnRtX3llYXIgKiAweDIwMCkgKyAobm93LT50bV9tb24gKiAweDIwKSArIG5vdy0+dG1fbWRheSk7CiAKLQogICAgIGlmIChhY3Rpb24gJiBPRl9WRVJJRlkpCiAgICAgICByZXR1cm4gKHZlcmlmeV90aW1lICE9ICooKGludCopb2ZzLT5yZXNlcnZlZCkpOwogCi0gICAgaWYgKGFjdGlvbiAmIE9GX0VYSVNUKQotICAgICAgcmV0dXJuIDA7Ci0gICAgCiAgICAgaWYgKChoYW5kbGUgPSBfbG9wZW4oIG9mcy0+c3pQYXRoTmFtZSwgd1N0eWxlICkpID09IC0xKQogICAgIHsKICAgICAgICAgb2ZzLT5uRXJyQ29kZSA9IDI7ICAvKiBub3QgZm91bmQgKi8KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBpZiAoYWN0aW9uICYgT0ZfRVhJU1QpIGNsb3NlKGhhbmRsZSk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIApkaWZmIC0tZ2l0IGEvbWlzYy9tYWluLmMgYi9taXNjL21haW4uYwppbmRleCBjZWIyMDZkLi4yYTcwZGM0IDEwMDY0NAotLS0gYS9taXNjL21haW4uYworKysgYi9taXNjL21haW4uYwpAQCAtMjgsMTcgKzI4LDIwIEBACiAjaW5jbHVkZSAic3RkZGVidWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1jb25zdCBjaGFyIHBlb3BsZVtdID0gIldpbmUgaXMgYXZhaWxhYmxlIHRoYW5rcyB0byB0aGUgd29yayBvZiAiXAotIkJvYiBBbXN0YWR0LCBEYWcgQXNoZWltLCBNYXJ0aW4gQXlvdHRlLCBSb3NzIEJpcm8sIEVyaWsgQm9zLCBGb25zIEJvdG1hbiwgIlwKLSJKb2huIEJyZXphaywgQW5kcmV3IEJ1bGhhaywgSm9obiBCdXJ0b24sIFBhdWwgRmFsc3RhZCwgT2xhZiBGbGViYmUsICJcCi0iUGV0ZXIgR2FsYmF2eSwgQ2FtZXJvbiBIZWlkZSwgSmVmZnJleSBIc3UsIE1pZ3VlbCBkZSBJY2F6YSwgIlwKLSJBbGV4YW5kcmUgSnVsbGlhcmQsIEpvbiBLb25yYXRoLCBTY290dCBBLiBMYWlyZCwgTWFydGluIHZvbiBMb2V3aXMsICJcCi0iS2VubmV0aCBNYWNEb25hbGQsIFBldGVyIE1hY0RvbmFsZCwgV2lsbGlhbSBNYWdybywgRGF2aWQgTWV0Y2FsZmUsICJcCi0iTWljaGFlbCBQYXRyYSwgSm9obiBSaWNoYXJkc29uLCBKb2hhbm5lcyBSdXNjaGVpbnNraSwgVGhvbWFzIFNhbmRmb3JkLCAiXAotIkNvbnN0YW50aW5lIFNhcHVudHpha2lzLCBCZXJuZCBTY2htaWR0LCBZbmd2aSBTaWd1cmpvbnNzb24sIFJpY2sgU2xhZGtleSwgIlwKLSJXaWxsaWFtIFNtaXRoLCBFcmlrIFN2ZW5kc2VuLCBHb3JhbiBUaHluaSwgSmltbXkgVGlydGF3YW5nc2EsIEpvbiBUb21icywgIlwKLSJMaW51cyBUb3J2YWxkcywgTWljaGFlbCBWZWtzbGVyLCBDYXJsIFdpbGxpYW1zLCBLYXJsIEd1ZW50ZXIgV3VlbnNjaCwgIlwKLSJFcmljIFlvdW5nZGFsZSwgYW5kIEphbWVzIFlvdW5nbWFuLiI7Citjb25zdCBjaGFyIHBlb3BsZVtdID0gIldpbmUgaXMgYXZhaWxhYmxlIHRoYW5rcyB0byB0aGUgd29yayBvZiAiCisiQm9iIEFtc3RhZHQsIERhZyBBc2hlaW0sIE1hcnRpbiBBeW90dGUsIFJvc3MgQmlybywgRXJpayBCb3MsICIKKyJGb25zIEJvdG1hbiwgSm9obiBCcmV6YWssIEFuZHJldyBCdWxoYWssIEpvaG4gQnVydG9uLCBQYXVsIEZhbHN0YWQsICIKKyJPbGFmIEZsZWJiZSwgUGV0ZXIgR2FsYmF2eSwgUmFtb24gR2FyY2lhLCBIYW5zIGRlIEdyYWFmLCAiCisiQ2hhcmxlcyBNLiBIYW5udW0sIENhbWVyb24gSGVpZGUsIEpvY2hlbiBIb2VuaWNrZSwgSmVmZnJleSBIc3UsICIKKyJNaWd1ZWwgZGUgSWNhemEsIEFsZXhhbmRyZSBKdWxsaWFyZCwgSm9uIEtvbnJhdGgsIFNjb3R0IEEuIExhaXJkLCAiCisiTWFydGluIHZvbiBMb2V3aXMsIEtlbm5ldGggTWFjRG9uYWxkLCBQZXRlciBNYWNEb25hbGQsIFdpbGxpYW0gTWFncm8sICIKKyJNYXJjdXMgTWVpc3NuZXIsIEdyYWhhbSBNZW5oZW5uaXR0LCBEYXZpZCBNZXRjYWxmZSwgTWljaGFlbCBQYXRyYSwgIgorIkpvaG4gUmljaGFyZHNvbiwgSm9oYW5uZXMgUnVzY2hlaW5za2ksIFRob21hcyBTYW5kZm9yZCwgIgorIkNvbnN0YW50aW5lIFNhcHVudHpha2lzLCBEYW5pZWwgU2NoZXBsZXIsIEJlcm5kIFNjaG1pZHQsICIKKyJZbmd2aSBTaWd1cmpvbnNzb24sIFJpY2sgU2xhZGtleSwgV2lsbGlhbSBTbWl0aCwgRXJpayBTdmVuZHNlbiwgIgorIkdvcmFuIFRoeW5pLCBKaW1teSBUaXJ0YXdhbmdzYSwgSm9uIFRvbWJzLCBMaW51cyBUb3J2YWxkcywgIgorIkdyZWdvcnkgVHJ1YmV0c2tveSwgTWljaGFlbCBWZWtzbGVyLCBNb3J0ZW4gV2VsaW5kZXIsIEphbiBXaWxsYW1vd2l1cywgIgorIkNhcmwgV2lsbGlhbXMsIEthcmwgR3VlbnRlciBXdWVuc2NoLCBFcmljIFlvdW5nZGFsZSwgYW5kIEphbWVzIFlvdW5nbWFuLiI7CiAKICNkZWZpbmUgV0lORV9DTEFTUyAgICAiV2luZSIgICAgLyogQ2xhc3MgbmFtZSBmb3IgcmVzb3VyY2VzICovCiAKQEAgLTY0LDYgKzY3LDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgLyogZGVza3RvcEdlb21ldHJ5ICovCiAgICAgTlVMTCwgICAgICAgICAgIC8qIHByb2dyYW1OYW1lICovCiAgICAgRkFMU0UsICAgICAgICAgIC8qIHVzZVByaXZhdGVNYXAgKi8KKyAgICBGQUxTRSwgICAgICAgICAgLyogdXNlRml4ZWRNYXAgKi8KICAgICBGQUxTRSwgICAgICAgICAgLyogc3luY2hyb25vdXMgKi8KICAgICBGQUxTRSwgICAgICAgICAgLyogYmFja2luZyBzdG9yZSAqLwogICAgIFNXX1NIT1dOT1JNQUwsICAvKiBjbWRTaG93ICovCkBAIC04NCw2ICs4OCw3IEBACiAgICAgeyAiLWlwYyIsICAgICAgICAgICAiLmlwYyIsICAgICAgICAgICAgIFhybW9wdGlvbk5vQXJnLCAgKGNhZGRyX3QpIm9mZiJ9LAogICAgIHsgIi1uYW1lIiwgICAgICAgICAgIi5uYW1lIiwgICAgICAgICAgICBYcm1vcHRpb25TZXBBcmcsIChjYWRkcl90KU5VTEwgfSwKICAgICB7ICItcHJpdmF0ZW1hcCIsICAgICIucHJpdmF0ZW1hcCIsICAgICAgWHJtb3B0aW9uTm9BcmcsICAoY2FkZHJfdCkib24iIH0sCisgICAgeyAiLWZpeGVkbWFwIiwgICAgICAiLmZpeGVkbWFwIiwgICAgICAgIFhybW9wdGlvbk5vQXJnLCAgKGNhZGRyX3QpTlVMTCB9LAogICAgIHsgIi1zeW5jaHJvbm91cyIsICAgIi5zeW5jaHJvbm91cyIsICAgICBYcm1vcHRpb25Ob0FyZywgIChjYWRkcl90KSJvbiIgfSwKICAgICB7ICItZGVidWciLCAgICAgICAgICIuZGVidWciLCAgICAgICAgICAgWHJtb3B0aW9uTm9BcmcsICAoY2FkZHJfdCkib24iIH0sCiAgICAgeyAiLWRlYnVnbXNnIiwgICAgICAiLmRlYnVnbXNnIiwgICAgICAgIFhybW9wdGlvblNlcEFyZywgKGNhZGRyX3QpTlVMTCB9LApAQCAtMTA2LDYgKzExMSw3IEBACiAgICIgICAgLWRlYnVnICAgICAgICAgIEVudGVyIGRlYnVnZ2VyIGJlZm9yZSBzdGFydGluZyBhcHBsaWNhdGlvblxuIiBcCiAgICIgICAgLW5hbWUgbmFtZSAgICAgIFNldCB0aGUgYXBwbGljYXRpb24gbmFtZVxuIiBcCiAgICIgICAgLXByaXZhdGVtYXAgICAgIFVzZSBhIHByaXZhdGUgY29sb3IgbWFwXG4iIFwKKyAgIiAgICAtZml4ZWRtYXAgICAgICAgVXNlIGEgXCJzdGFuZGFyZFwiIGNvbG9yIG1hcFxuIiBcCiAgICIgICAgLXN5bmNocm9ub3VzICAgIFR1cm4gb24gc3luY2hyb25vdXMgZGlzcGxheSBtb2RlXG4iIFwKICAgIiAgICAtYmFja2luZ3N0b3JlICAgVHVybiBvbiBiYWNraW5nIHN0b3JlXG4iIFwKICAgIiAgICAtc3B5IGZpbGUgICAgICAgT2Jzb2xldGUuIFVzZSAtZGVidWdtc2cgK3NweSBmb3IgU3B5IG1lc3NhZ2VzXG4iIFwKQEAgLTMwMiw2ICszMDgsOCBAQAogCU9wdGlvbnMuY21kU2hvdyA9IFNXX1NIT1dNSU5JTUlaRUQ7CiAgICAgaWYgKE1BSU5fR2V0UmVzb3VyY2UoIGRiLCAiLnByaXZhdGVtYXAiLCAmdmFsdWUgKSkKIAlPcHRpb25zLnVzZVByaXZhdGVNYXAgPSBUUlVFOworICAgIGlmIChNQUlOX0dldFJlc291cmNlKCBkYiwgIi5maXhlZG1hcCIsICZ2YWx1ZSApKQorCU9wdGlvbnMudXNlRml4ZWRNYXAgPSBUUlVFOwogICAgIGlmIChNQUlOX0dldFJlc291cmNlKCBkYiwgIi5zeW5jaHJvbm91cyIsICZ2YWx1ZSApKQogCU9wdGlvbnMuc3luY2hyb25vdXMgPSBUUlVFOwogICAgIGlmIChNQUlOX0dldFJlc291cmNlKCBkYiwgIi5iYWNraW5nc3RvcmUiLCAmdmFsdWUgKSkKZGlmZiAtLWdpdCBhL21pc2MvbmV0d29yay5jIGIvbWlzYy9uZXR3b3JrLmMKaW5kZXggZmQxMGY2NS4uYWJmN2UxYiAxMDA2NDQKLS0tIGEvbWlzYy9uZXR3b3JrLmMKKysrIGIvbWlzYy9uZXR3b3JrLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogICovCiBVSU5UIFdOZXRHZXRVc2VyKExQU1RSIGxwTG9jYWxOYW1lLCBMUFNUUiBscFVzZXJOYW1lLCBEV09SRCAqbHBTaXplKQogewotCXByaW50ZigiRU1QVFkgU1RVQiAhISEgV05ldEdldFVzZXIoJyVzJywgJXAsICVwKTtcbiIsIAorCXByaW50ZigiRU1QVFkgU1RVQiAhISEgV05ldEdldFVzZXIoJXAsICVwLCAlcCk7XG4iLCAKIAkJCQkJCQlscExvY2FsTmFtZSwgbHBVc2VyTmFtZSwgbHBTaXplKTsKIAlyZXR1cm4gV05fTkVUX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvbWlzYy9vbGUybmxzLmMgYi9taXNjL29sZTJubHMuYwppbmRleCAzZWNjYmQzLi5mYmVjM2Q3IDEwMDY0NAotLS0gYS9taXNjL29sZTJubHMuYworKysgYi9taXNjL29sZTJubHMuYwpAQCAtMjQsNiArMjQsOCBAQAogCXJldHVybiA5OwogI2VsaWYgI0xBTkcoRGUpCiAJcmV0dXJuIDc7CisjZWxpZiAjTEFORyhFcykKKwlyZXR1cm4gNzsgLyogSnVzdCBhIEd1ZXNzIDotKSAqLwogI2VsaWYgI0xBTkcoTm8pCiAJcmV0dXJuIDB4MTQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbC5jIGIvbWlzYy9zaGVsbC5jCmluZGV4IDc1OGZlYjIuLjc1ODhhNTcgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGwuYworKysgYi9taXNjL3NoZWxsLmMKQEAgLTgsMTEgKzgsMTMgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJzaGVsbC5oIgorI2luY2x1ZGUgImdsb2JhbC5oIgogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAic2VsZWN0b3JzLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJyZWxheTMyLmgiCiAjaW5jbHVkZSAiLi4vcmMvc3lzcmVzLmgiCiAjaW5jbHVkZSAiZGxncy5oIgotI2luY2x1ZGUgImRpYWxvZy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIApAQCAtNDc3LDIzICs0NzksMzkgQEAKICAqLwogSU5UIFNoZWxsQWJvdXQoSFdORCBoV25kLCBMUENTVFIgc3pBcHAsIExQQ1NUUiBzek90aGVyU3R1ZmYsIEhJQ09OIGhJY29uKQogewotICBpZiAoc3pBcHApIHsKLSAgICBzdHJjcHkoQXBwTmFtZSwgc3pBcHApOwotICB9IGVsc2UgIHsKLSAgICAqQXBwTmFtZSA9IDA7Ci0gIH0KLSAgaWYgKHN6T3RoZXJTdHVmZikgewotICAgIHN0cmNweShBcHBNaXNjLCBzek90aGVyU3R1ZmYpOwotICB9IGVsc2UgewotICAgICpBcHBNaXNjID0gMDsKLSAgfQotICBpZiAoIWhJY29uKSB7Ci0gICAgaEljb24gPSBMb2FkSWNvbigwLE1BS0VJTlRSRVNPVVJDRShPSUNfV0lORUlDT04pKTsKLSAgfQotICByZXR1cm4gRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cihHZXRXaW5kb3dXb3JkKGhXbmQsIEdXV19ISU5TVEFOQ0UpLAotCQkJCSAgIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YLAotCQkJCSAgIGhXbmQsIEdldFduZFByb2NFbnRyeTE2KCJBYm91dERsZ1Byb2MiKSwKLQkJCQkgICBoSWNvbik7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBCT09MIGJSZXQ7CisgICAgRFdPUkQgV2luZVByb2MsV2luMTZQcm9jLFdpbjMyUHJvYzsKKyAgICBzdGF0aWMgaW50IGluaXRpYWxpemVkPTA7CisKKyAgICBpZiAoc3pBcHApIHN0cmNweShBcHBOYW1lLCBzekFwcCk7CisgICAgZWxzZSAqQXBwTmFtZSA9IDA7CisKKyAgICBpZiAoc3pPdGhlclN0dWZmKSBzdHJjcHkoQXBwTWlzYywgc3pPdGhlclN0dWZmKTsKKyAgICBlbHNlICpBcHBNaXNjID0gMDsKKworICAgIGlmICghaEljb24pIGhJY29uID0gTG9hZEljb24oMCxNQUtFSU5UUkVTT1VSQ0UoT0lDX1dJTkVJQ09OKSk7CisgICAgCisgICAgaWYoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgV2luZVByb2M9KERXT1JEKUFib3V0RGxnUHJvYzsKKyAgICAgICAgV2luMTZQcm9jPShEV09SRClHZXRXbmRQcm9jRW50cnkxNigiQWJvdXREbGdQcm9jIik7CisgICAgICAgIFdpbjMyUHJvYz0oRFdPUkQpUkVMQVkzMl9HZXRFbnRyeVBvaW50KCJXSU5QUk9DUzMyIiwiQWJvdXREbGdQcm9jIiwwKTsKKyAgICAgICAgQUxJQVNfUmVnaXN0ZXJBbGlhcyhXaW5lUHJvYyxXaW4xNlByb2MsV2luMzJQcm9jKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQ9MTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSBHTE9CQUxfQ3JlYXRlQmxvY2soIEdNRU1fRklYRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyZXNfRElBTE9HX1NIRUxMX0FCT1VUX01TR0JPWC5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDdXJyZW50UERCKCksIEZBTFNFLCBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIE5VTEwgKTsKKyAgICBpZiAoIWhhbmRsZSkgcmV0dXJuIEZBTFNFOworICAgIGJSZXQgPSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKCBHZXRXaW5kb3dXb3JkKCBoV25kLCBHV1dfSElOU1RBTkNFICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgaFduZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0V25kUHJvY0VudHJ5MTYoIkFib3V0RGxnUHJvYyIpLCBoSWNvbiApOworICAgIEdMT0JBTF9GcmVlQmxvY2soIGhhbmRsZSApOworICAgIHJldHVybiBiUmV0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbWlzYy91c2VyMzIuYyBiL21pc2MvdXNlcjMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViMjgwZgotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvdXNlcjMyLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBXaW4zMiB1c2VyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAxOTk1IE1hcnRpbiB2b24gTG9ld2lzCisgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgd3JhcHBlcnMgdG8gZXhpc3RpbmcgV2luZSBmdW5jdGlvbnMgb3IgdHJpdmlhbAorICAgc3R1YnMuICdSZWFsJyBpbXBsZW1lbnRhdGlvbnMgZ28gaW50byBjb250ZXh0IHNwZWNpZmljIGZpbGVzICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAid2luZXJyb3IuaCIKKyNpbmNsdWRlICJyZWxheTMyLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJzdGFja2ZyYW1lLmgiCisKKy8qIFN0cnVjdHVyZSBjb3B5IGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgTVNHMTZ0bzMyKE1TRyAqbXNnMTYsc3RydWN0IFdJTjMyX01TRyAqbXNnMzIpCit7CisJbXNnMzItPmh3bmQ9bXNnMTYtPmh3bmQ7CisJbXNnMzItPm1lc3NhZ2U9bXNnMTYtPm1lc3NhZ2U7CisJbXNnMzItPndQYXJhbT1tc2cxNi0+d1BhcmFtOworCW1zZzMyLT5sUGFyYW09bXNnMTYtPmxQYXJhbTsKKwltc2czMi0+dGltZT1tc2cxNi0+dGltZTsKKwltc2czMi0+cHQueD1tc2cxNi0+cHQueDsKKwltc2czMi0+cHQueT1tc2cxNi0+cHQueTsKK30KKworc3RhdGljIHZvaWQgTVNHMzJ0bzE2KHN0cnVjdCBXSU4zMl9NU0cgKm1zZzMyLE1TRyAqbXNnMTYpCit7CisJbXNnMTYtPmh3bmQ9bXNnMzItPmh3bmQ7CisJbXNnMTYtPm1lc3NhZ2U9bXNnMzItPm1lc3NhZ2U7CisJbXNnMTYtPndQYXJhbT1tc2czMi0+d1BhcmFtOworCW1zZzE2LT5sUGFyYW09bXNnMzItPmxQYXJhbTsKKwltc2cxNi0+dGltZT1tc2czMi0+dGltZTsKKwltc2cxNi0+cHQueD1tc2czMi0+cHQueDsKKwltc2cxNi0+cHQueT1tc2czMi0+cHQueTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgUmVnaXN0ZXJDbGFzc0EgICAgICAoVVNFUjMyLjQyNikKKyAqLworQVRPTSBVU0VSMzJfUmVnaXN0ZXJDbGFzc0EoV05EQ0xBU1NBKiB3bmRjbGFzcykKK3sKKwlXTkRDTEFTUyBjb3B5OworCWNoYXIgKnMxLCpzMjsKKwljb3B5LnN0eWxlPXduZGNsYXNzLT5zdHlsZTsKKwlBTElBU19SZWdpc3RlckFsaWFzKDAsMCx3bmRjbGFzcy0+bHBmblduZFByb2MpOworCWNvcHkubHBmblduZFByb2M9d25kY2xhc3MtPmxwZm5XbmRQcm9jOworCWNvcHkuY2JDbHNFeHRyYT13bmRjbGFzcy0+Y2JDbHNFeHRyYTsKKwljb3B5LmNiV25kRXh0cmE9d25kY2xhc3MtPmNiV25kRXh0cmE7CisJY29weS5oSW5zdGFuY2U9d25kY2xhc3MtPmhJbnN0YW5jZTsKKwljb3B5LmhJY29uPXduZGNsYXNzLT5oSWNvbjsKKwljb3B5LmhDdXJzb3I9d25kY2xhc3MtPmhDdXJzb3I7CisJY29weS5oYnJCYWNrZ3JvdW5kPXduZGNsYXNzLT5oYnJCYWNrZ3JvdW5kOworCWlmKHduZGNsYXNzLT5scHN6TWVudU5hbWUpCisJeworCQlzMT1hbGxvY2Eoc3RybGVuKHduZGNsYXNzLT5scHN6TWVudU5hbWUpKzEpOworCQlzdHJjcHkoczEsd25kY2xhc3MtPmxwc3pNZW51TmFtZSk7CisJCWNvcHkubHBzek1lbnVOYW1lPU1BS0VfU0VHUFRSKHMxKTsKKwl9ZWxzZQorCQljb3B5Lmxwc3pNZW51TmFtZT0wOworCWlmKHduZGNsYXNzLT5scHN6Q2xhc3NOYW1lKQorCXsKKwkJczI9YWxsb2NhKHN0cmxlbih3bmRjbGFzcy0+bHBzekNsYXNzTmFtZSkrMSk7CisJCXN0cmNweShzMix3bmRjbGFzcy0+bHBzekNsYXNzTmFtZSk7CisJCWNvcHkubHBzekNsYXNzTmFtZT1NQUtFX1NFR1BUUihzMik7CisJfQorCXJldHVybiBSZWdpc3RlckNsYXNzKCZjb3B5KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICBEZWZXaW5kb3dQcm9jQSAgICAgICAoVVNFUjMyLjEyNSkKKyAqLworTFJFU1VMVCBVU0VSMzJfRGVmV2luZG93UHJvY0EoRFdPUkQgaHduZCxEV09SRCBtc2csRFdPUkQgd1BhcmFtLERXT1JEIGxQYXJhbSkKK3sKKwkvKiBzb21lIG1lc3NhZ2VzIGNlcnRhaW5seSBuZWVkIHNwZWNpYWwgY2FzaW5nLiBXZSBjb21lIHRvIHRoYXQgbGF0ZXIgKi8KKwlyZXR1cm4gRGVmV2luZG93UHJvYyhod25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICBHZXRNZXNzYWdlQSAgICAgICAgICAoVVNFUjMyLjI2OSkKKyAqLworQk9PTCBVU0VSMzJfR2V0TWVzc2FnZUEoc3RydWN0IFdJTjMyX01TRyogbHBtc2csRFdPUkQgaHduZCxEV09SRCBtaW4sRFdPUkQgbWF4KQoreworCUJPT0wgcmV0OworCU1TRyBtc2c7CisJcmV0PUdldE1lc3NhZ2UoTUFLRV9TRUdQVFIoJm1zZyksaHduZCxtaW4sbWF4KTsKKwlNU0cxNnRvMzIoJm1zZyxscG1zZyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICBCZWdpblBhaW50ICAgICAgICAgICAoVVNFUjMyLjkpCisgKi8KK0hEQyBVU0VSMzJfQmVnaW5QYWludChEV09SRCBod25kLHN0cnVjdCBXSU4zMl9QQUlOVFNUUlVDVCAqbHBwcykKK3sKKwlQQUlOVFNUUlVDVCBwczsKKwlIREMgcmV0OworCXJldD1CZWdpblBhaW50KGh3bmQsJnBzKTsKKwlscHBzLT5oZGM9cHMuaGRjOworCWxwcHMtPmZFcmFzZT1wcy5mRXJhc2U7CisJbHBwcy0+cmNQYWludC50b3A9cHMucmNQYWludC50b3A7CisJbHBwcy0+cmNQYWludC5sZWZ0PXBzLnJjUGFpbnQubGVmdDsKKwlscHBzLT5yY1BhaW50LnJpZ2h0PXBzLnJjUGFpbnQucmlnaHQ7CisJbHBwcy0+cmNQYWludC5ib3R0b209cHMucmNQYWludC5ib3R0b207CisJbHBwcy0+ZlJlc3RvcmU9cHMuZlJlc3RvcmU7CisJbHBwcy0+ZkluY1VwZGF0ZT1wcy5mSW5jVXBkYXRlOworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgRW5kUGFpbnQgICAgICAgICAgICAgKFVTRVIzMi4xNzUpCisgKi8KK0JPT0wgVVNFUjMyX0VuZFBhaW50KERXT1JEIGh3bmQsc3RydWN0IFdJTjMyX1BBSU5UU1RSVUNUICpscHBzKQoreworCVBBSU5UU1RSVUNUIHBzOworCXBzLmhkYz1scHBzLT5oZGM7CisJcHMuZkVyYXNlPWxwcHMtPmZFcmFzZTsKKwlwcy5yY1BhaW50LnRvcD1scHBzLT5yY1BhaW50LnRvcDsKKwlwcy5yY1BhaW50LmxlZnQ9bHBwcy0+cmNQYWludC5sZWZ0OworCXBzLnJjUGFpbnQucmlnaHQ9bHBwcy0+cmNQYWludC5yaWdodDsKKwlwcy5yY1BhaW50LmJvdHRvbT1scHBzLT5yY1BhaW50LmJvdHRvbTsKKwlwcy5mUmVzdG9yZT1scHBzLT5mUmVzdG9yZTsKKwlwcy5mSW5jVXBkYXRlPWxwcHMtPmZJbmNVcGRhdGU7CisJRW5kUGFpbnQoaHduZCwmcHMpOworCXJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgRGlzcGF0Y2hNZXNzYWdlQSAgICAgICAoVVNFUjMyLjE0MCkKKyAqLworTE9ORyBVU0VSMzJfRGlzcGF0Y2hNZXNzYWdlQShzdHJ1Y3QgV0lOMzJfTVNHKiBscG1zZykKK3sKKwlNU0cgbXNnOworCUxPTkcgcmV0OworCU1TRzMydG8xNihscG1zZywmbXNnKTsKKwlyZXQ9RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworCU1TRzE2dG8zMigmbXNnLGxwbXNnKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQ3JlYXRlV2luZG93RXhBICAgICAgICAoVVNFUjMyLjgyKQorICovCitEV09SRCBVU0VSMzJfQ3JlYXRlV2luZG93RXhBKGxvbmcgZmxhZ3MsY2hhciogY2xhc3MsY2hhciAqdGl0bGUsCisJbG9uZyBzdHlsZSxpbnQgeCxpbnQgeSxpbnQgd2lkdGgsaW50IGhlaWdodCxEV09SRCBwYXJlbnQsRFdPUkQgbWVudSwKKwlEV09SRCBpbnN0YW5jZSxEV09SRCBwYXJhbSkKK3sKKyAgICBjaGFyICpjbGFzc2J1ZiwgKnRpdGxlYnVmOworICAgIC8qSGF2ZSB0byB0cmFuc2xhdGUgQ1dfVVNFREVGQVVMVCAqLworICAgIGlmKHg9PTB4ODAwMDAwMDApeD1DV19VU0VERUZBVUxUOworICAgIGlmKHdpZHRoPT0weDgwMDAwMDAwKXdpZHRoPUNXX1VTRURFRkFVTFQ7CisgICAgY2xhc3NidWYgPSBhbGxvY2EoIHN0cmxlbihjbGFzcykrMSApOworICAgIHN0cmNweSggY2xhc3NidWYsIGNsYXNzICk7CisgICAgdGl0bGVidWYgPSBhbGxvY2EoIHN0cmxlbih0aXRsZSkrMSApOworICAgIHN0cmNweSggdGl0bGVidWYsIHRpdGxlICk7CisgICAgcmV0dXJuIENyZWF0ZVdpbmRvd0V4KCBmbGFncywgTUFLRV9TRUdQVFIoY2xhc3NidWYpLCBNQUtFX1NFR1BUUih0aXRsZWJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSx4LHksd2lkdGgsaGVpZ2h0LHBhcmVudCxtZW51LGluc3RhbmNlLHBhcmFtICk7Cit9CmRpZmYgLS1naXQgYS9taXNjZW11L01ha2VmaWxlLmluIGIvbWlzY2VtdS9NYWtlZmlsZS5pbgppbmRleCA0MjYwOTdkLi42ZGY2OGIwIDEwMDY0NAotLS0gYS9taXNjZW11L01ha2VmaWxlLmluCisrKyBiL21pc2NlbXUvTWFrZWZpbGUuaW4KQEAgLTEsMTUgKzEsNyBAQAotQ0MgCT0gQENDQAotQ0ZMQUdTIAk9IEBDRkxBR1NACi1YSU5DTCAJPSBAeF9pbmNsdWRlc0AKLVRPUFNSQyAgPSBAdG9wX3NyY2RpckAKLURJVklOQ0wgPSAtSSQoVE9QU1JDKS9pbmNsdWRlCi1MRAk9IEBMREAKLUxEQ09NQklORUZMQUdTID0gQExEQ09NQklORUZMQUdTQAorVE9QU1JDID0gQHRvcF9zcmNkaXJACitNT0RVTEUgPSBtaXNjZW11CiAKLQotTU9EVUxFIAk9IG1pc2NlbXUKLQotU1JDUyA9IFwKK0NfU1JDUyA9IFwKIAlkb3NtZW0uYyBcCiAJZHBtaS5jIFwKIAllbXVsYXRlLmMgXApAQCAtMjYsMjkgKzE4LDggQEAKIAlpbnRlcnJ1cHRzLmMgXAogCWlvcG9ydHMuYwogCi1PQkpTID0gJChTUkNTOi5jPS5vKQotCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKLQogYWxsOiAkKE1PRFVMRSkubwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46Ci0KLWR1bW15OgorQE1BS0VfUlVMRVNACiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9taXNjZW11L2Rvc21lbS5jIGIvbWlzY2VtdS9kb3NtZW0uYwppbmRleCA0YWMwNDQ0Li5mZDY3M2VlIDEwMDY0NAotLS0gYS9taXNjZW11L2Rvc21lbS5jCisrKyBiL21pc2NlbXUvZG9zbWVtLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAjaW5jbHVkZSAibGR0LmgiCkBAIC0xMzcsNyArMTM4LDcgQEAKIHN0YXRpYyB2b2lkIERPU01FTV9BbGFybSh2b2lkKQogewogICAgIHBCaW9zRGF0YS0+VGlja3MgPSBJTlQxQV9HZXRUaWNrc1NpbmNlTWlkbmlnaHQoKTsKLSAgICBwcmludGYoICJUaWNrcyA9ICVkXG4iLCBwQmlvc0RhdGEtPlRpY2tzICk7CisgICAgcHJpbnRmKCAiVGlja3MgPSAlbGRcbiIsIHBCaW9zRGF0YS0+VGlja3MgKTsKIC8qCiAgICAgc2lnbmFsKCBTSUdBTFJNLCBET1NNRU1fQWxhcm0gKTsKICAgICBhbGFybSggMSApOwpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9pbnQyMS5jIGIvbWlzY2VtdS9pbnQyMS5jCmluZGV4IDcyMDgwNmMuLmQ1ODBlYzUgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvaW50MjEuYworKysgYi9taXNjZW11L2ludDIxLmMKQEAgLTMwMyw4ICszMDMsOSBAQAogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJc2l6ZSA9IHJlYWQoQlhfcmVnKGNvbnRleHQpLCBwdHIsIENYX3JlZyhjb250ZXh0KSk7Ci0gICAgICAgIAlkcHJpbnRmX2ludChzdGRkZWIsICJpbnQyMTogcmVhZCAoJWQsIHZvaWQgKiwgMHgleCkgPSAweCV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJYX3JlZyhjb250ZXh0KSwgQ1hfcmVnKGNvbnRleHQpLCBzaXplKTsKKyAgICAgICAgCWRwcmludGZfaW50KHN0ZGRlYiwiaW50MjE6IHJlYWQoJWQsICUwNHg6JTA0eCwgMHgleCkgPSAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJYX3JlZyhjb250ZXh0KSwgRFNfcmVnKGNvbnRleHQpLCBEWF9yZWcoY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1hfcmVnKGNvbnRleHQpLCBzaXplICk7CiAJCWlmIChzaXplID09IC0xKSB7CiAJCQllcnJub190b19kb3NlcnIoKTsKIAkJCUFYX3JlZyhjb250ZXh0KSA9IEV4dGVuZGVkRXJyb3I7CkBAIC02MjIsNyArNjIzLDcgQEAKIHsKIAlkcHJpbnRmX2ludCAoc3RkZGViLCAiaW50MjE6IGNsb3NlICglZClcbiIsIEJYX3JlZyhjb250ZXh0KSk7CiAKLQlpZiAoY2xvc2UoQlhfcmVnKGNvbnRleHQpKSA9PSAtMSkKKwlpZiAoX2xjbG9zZSggQlhfcmVnKGNvbnRleHQpICkpCiAgICAgICAgIHsKIAkJZXJybm9fdG9fZG9zZXJyKCk7CiAJCUFYX3JlZyhjb250ZXh0KSA9IEV4dGVuZGVkRXJyb3I7CkBAIC0xNzYxLDYgKzE3NjIsOSBAQAogCQlicmVhazsKIAkgICAgfQogCSAgICBicmVhazsKKyAgICAKKyAgICAgIGNhc2UgMHhkYzogLyogQ09OTkVDVElPTiBTRVJWSUNFUyAtIEdFVCBDT05ORUNUSU9OIE5VTUJFUiAqLworICAgICAgICBicmVhazsKIAogCSAgY2FzZSAweGVhOiAvKiBOT1ZFTEwgTkVUV0FSRSAtIFJFVFVSTiBTSEVMTCBWRVJTSU9OICovCiAJICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9pbnQyZi5jIGIvbWlzY2VtdS9pbnQyZi5jCmluZGV4IDNhOWNhZDQuLjY2YTdhMDEgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvaW50MmYuYworKysgYi9taXNjZW11L2ludDJmLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBjYXNlIDB4MDA6ICAvKiBXaW5kb3dzIGVuaGFuY2VkIG1vZGUgaW5zdGFsbGF0aW9uIGNoZWNrICovCiAgICAgICAgIEFYX3JlZyhjb250ZXh0KSA9IE9wdGlvbnMuZW5oYW5jZWQgPyBXSU5WRVJTSU9OIDogMDsKICAgICAgICAgYnJlYWs7Ci0KKwkKICAgICBjYXNlIDB4MGE6ICAvKiBHZXQgV2luZG93cyB2ZXJzaW9uIGFuZCB0eXBlICovCiAgICAgICAgIEFYX3JlZyhjb250ZXh0KSA9IDA7CiAgICAgICAgIEJYX3JlZyhjb250ZXh0KSA9IChXSU5WRVJTSU9OID4+IDgpIHwgKChXSU5WRVJTSU9OIDw8IDgpICYgMHhmZjAwKTsKQEAgLTU0LDYgKzU0LDE1IEBACiAgICAgY2FzZSAweDgwOiAgLyogUmVsZWFzZSB0aW1lLXNsaWNlICovCiAgICAgICAgIGJyZWFrOyAgLyogbm90aGluZyB0byBkbyAqLwogCisJY2FzZSAweDg0OiAgLyogR2V0IGRldmljZSBBUEkgZW50cnkgcG9pbnQgKi8KKwkgICAgZnByaW50ZihzdGRlcnIsIkFwcGxpY2F0aW9uIGF0dGVtcHRlZCB0byBhY2Nlc3MgVnhEICU0WFxuIiwKKwkJCUJYX3JlZyhjb250ZXh0KSk7CisJCWZwcmludGYoc3RkZXJyLCJUaGlzIGRldmljZSBpcyBub3Qga25vd24gdG8gV2luZS4iKTsKKwkJZnByaW50ZihzdGRlcnIsIkV4cGVjdCBhIGZhaWx1cmUgbm93XG4iKTsKKwkJRVNfcmVnKGNvbnRleHQpPTA7CisJCURJX3JlZyhjb250ZXh0KT0wOworCQlicmVhazsKKwogICAgIGNhc2UgMHg4NjogIC8qIERQTUkgZGV0ZWN0IG1vZGUgKi8KICAgICAgICAgQVhfcmVnKGNvbnRleHQpID0gMDsgIC8qIFJ1bm5pbmcgdW5kZXIgRFBNSSAqLwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvTWFrZWZpbGUuaW4gYi9tdWx0aW1lZGlhL01ha2VmaWxlLmluCmluZGV4IGJjMDM0ZmMuLjFlOTQzYWYgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvTWFrZWZpbGUuaW4KKysrIGIvbXVsdGltZWRpYS9NYWtlZmlsZS5pbgpAQCAtMSwxNSArMSw3IEBACi1DQyAJPSBAQ0NACi1DRkxBR1MgCT0gQENGTEFHU0AKLVhJTkNMIAk9IEB4X2luY2x1ZGVzQAotVE9QU1JDICA9IEB0b3Bfc3JjZGlyQAotRElWSU5DTCA9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUxECT0gQExEQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACitUT1BTUkMgPSBAdG9wX3NyY2RpckAKK01PRFVMRSA9IG11bHRpbWVkaWEKIAotCi1NT0RVTEUgCT0gbXVsdGltZWRpYQotCi1TUkNTID0gXAorQ19TUkNTID0gXAogCWF1ZGlvLmMgXAogCWpveXN0aWNrLmMgXAogCW1jaWFuaW0uYyBcCkBAIC0yMCwyOSArMTIsOCBAQAogCW1tc3lzdGVtLmMgXAogCXRpbWUuYwogCi1PQkpTID0gJChTUkNTOi5jPS5vKQotCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKLQogYWxsOiAkKE1PRFVMRSkubwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46Ci0KLWR1bW15OgorQE1BS0VfUlVMRVNACiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21jaXN0cmluZy5jIGIvbXVsdGltZWRpYS9tY2lzdHJpbmcuYwppbmRleCA2NTNhOTA3Li5mODYwNTYzIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL21jaXN0cmluZy5jCisrKyBiL211bHRpbWVkaWEvbWNpc3RyaW5nLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCQkJRkxBRzEoIm5vc3RhdGljIixNQ0lfQU5JTV9PUEVOX05PU1RBVElDKTsKIAkJCWlmICghU1RSQ01QKGtleXdvcmRzW2ldLCJwYXJlbnQiKSAmJiAoaSsxPG5yb2ZrZXl3b3JkcykpIHsKIAkJCQlkd0ZsYWdzIHw9IE1DSV9BTklNX09QRU5fUEFSRU5UOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIldSIsJihVLmFuaW1vcGVuUGFyYW1zLmhXbmRQYXJlbnQpKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWh1IiwmKFUuYW5pbW9wZW5QYXJhbXMuaFduZFBhcmVudCkpOwogCQkJCWkrPTI7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC00MDYsNyArNDA2LDcgQEAKIAkJCS8qIGxvb2tzIGp1c3QgbGlrZSBhbmltLCBidXQgd2l0aG91dCBOT1NUQVRJQyAqLwogCQkJaWYgKCFTVFJDTVAoa2V5d29yZHNbaV0sInBhcmVudCIpICYmIChpKzE8bnJvZmtleXdvcmRzKSkgewogCQkJCWR3RmxhZ3MgfD0gTUNJX09WTFlfT1BFTl9QQVJFTlQ7Ci0JCQkJc3NjYW5mKGtleXdvcmRzW2krMV0sIiVkIiwmKFUub3ZseW9wZW5QYXJhbXMuaFduZFBhcmVudCkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoVS5vdmx5b3BlblBhcmFtcy5oV25kUGFyZW50KSk7CiAJCQkJaSs9MjsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTUzOSw3ICs1MzksNyBAQAogc3RhdGljIERXT1JECiBNQ0lTVFJfU3RhdHVzKF9NQ0lTVFJfUFJPVE9fKSB7CiAJTUNJX1NUQVRVU19QQVJNUwlzdGF0dXNQYXJhbXM7Ci0JaW50CQkJdHlwZSxpLHJlcyx0aW1lZjsKKwlpbnQJCQl0eXBlID0gMCxpLHJlcyx0aW1lZjsKIAogCXN0YXR1c1BhcmFtcy5kd0NhbGxiYWNrID0gMDsKIAlkd0ZsYWdzCXw9IE1DSV9TVEFUVVNfSVRFTTsKQEAgLTEzNzksMTAgKzEzNzksMTAgQEAKIAkJY2FzZSBNQ0lfREVWVFlQRV9PVkVSTEFZOgogCQkJaWYgKCFTVFJDTVAoa2V5d29yZHNbaV0sImF0IikgJiYgKGkrNDxucm9ma2V5d29yZHMpKSB7CiAJCQkJZHdGbGFncyB8PSBNQ0lfT1ZMWV9SRUNUOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlZCIsJihVLm92bHlsb2FkUGFyYW1zLnJjLmxlZnQpKTsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWQiLCYoVS5vdmx5bG9hZFBhcmFtcy5yYy50b3ApKTsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSszXSwiJWQiLCYoVS5vdmx5bG9hZFBhcmFtcy5yYy5yaWdodCkpOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlZCIsJihVLm92bHlsb2FkUGFyYW1zLnJjLmJvdHRvbSkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoVS5vdmx5bG9hZFBhcmFtcy5yYy5sZWZ0KSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krMl0sIiVoZCIsJihVLm92bHlsb2FkUGFyYW1zLnJjLnRvcCkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzNdLCIlaGQiLCYoVS5vdmx5bG9hZFBhcmFtcy5yYy5yaWdodCkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlaGQiLCYoVS5vdmx5bG9hZFBhcmFtcy5yYy5ib3R0b20pKTsKIAkJCQltZW1jcHkoa2V5d29yZHMraSxrZXl3b3JkcysoaSs1KSxucm9ma2V5d29yZHMtKGkrNSkpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTQzMSwxMCArMTQzMSwxMCBAQAogCQljYXNlIE1DSV9ERVZUWVBFX09WRVJMQVk6CiAJCQlpZiAoIVNUUkNNUChrZXl3b3Jkc1tpXSwiYXQiKSAmJiAoaSs0PG5yb2ZrZXl3b3JkcykpIHsKIAkJCQlkd0ZsYWdzIHw9IE1DSV9PVkxZX1JFQ1Q7Ci0JCQkJc3NjYW5mKGtleXdvcmRzW2krMV0sIiVkIiwmKFUub3ZseXNhdmVQYXJhbXMucmMubGVmdCkpOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzJdLCIlZCIsJihVLm92bHlzYXZlUGFyYW1zLnJjLnRvcCkpOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzNdLCIlZCIsJihVLm92bHlzYXZlUGFyYW1zLnJjLnJpZ2h0KSk7Ci0JCQkJc3NjYW5mKGtleXdvcmRzW2krNF0sIiVkIiwmKFUub3ZseXNhdmVQYXJhbXMucmMuYm90dG9tKSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krMV0sIiVoZCIsJihVLm92bHlzYXZlUGFyYW1zLnJjLmxlZnQpKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWhkIiwmKFUub3ZseXNhdmVQYXJhbXMucmMudG9wKSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krM10sIiVoZCIsJihVLm92bHlzYXZlUGFyYW1zLnJjLnJpZ2h0KSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krNF0sIiVoZCIsJihVLm92bHlzYXZlUGFyYW1zLnJjLmJvdHRvbSkpOwogCQkJCW1lbWNweShrZXl3b3JkcytpLGtleXdvcmRzKyhpKzUpLG5yb2ZrZXl3b3Jkcy0oaSs1KSk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xNTk5LDEwICsxNTk5LDEwIEBACiAJCXJldHVybiBNQ0lFUlJfVU5TVVBQT1JURURfRlVOQ1RJT047CiAJaT0wO3doaWxlIChpPG5yb2ZrZXl3b3JkcykgewogCQlpZiAoIVNUUkNNUChrZXl3b3Jkc1tpXSwiYXQiKSAmJiAoaSs0PG5yb2ZrZXl3b3JkcykpIHsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlbGQiLCYodW5mcmVlemVQYXJhbXMucmMubGVmdCkpOwotCQkJc3NjYW5mKGtleXdvcmRzW2krMl0sIiVsZCIsJih1bmZyZWV6ZVBhcmFtcy5yYy50b3ApKTsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzNdLCIlbGQiLCYodW5mcmVlemVQYXJhbXMucmMucmlnaHQpKTsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlbGQiLCYodW5mcmVlemVQYXJhbXMucmMuYm90dG9tKSk7CisJCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWhkIiwmKHVuZnJlZXplUGFyYW1zLnJjLmxlZnQpKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzJdLCIlaGQiLCYodW5mcmVlemVQYXJhbXMucmMudG9wKSk7CisJCQlzc2NhbmYoa2V5d29yZHNbaSszXSwiJWhkIiwmKHVuZnJlZXplUGFyYW1zLnJjLnJpZ2h0KSk7CisJCQlzc2NhbmYoa2V5d29yZHNbaSs0XSwiJWhkIiwmKHVuZnJlZXplUGFyYW1zLnJjLmJvdHRvbSkpOwogCQkJZHdGbGFncyB8PSBNQ0lfT1ZMWV9SRUNUOwogCQkJaSs9NTsKIAkJCWNvbnRpbnVlOwpAQCAtMTYyNCwxMCArMTYyNCwxMCBAQAogCQlyZXR1cm4gTUNJRVJSX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOwogCWk9MDt3aGlsZSAoaTxucm9ma2V5d29yZHMpIHsKIAkJaWYgKCFTVFJDTVAoa2V5d29yZHNbaV0sImF0IikgJiYgKGkrNDxucm9ma2V5d29yZHMpKSB7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWxkIiwmKGZyZWV6ZVBhcmFtcy5yYy5sZWZ0KSk7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWxkIiwmKGZyZWV6ZVBhcmFtcy5yYy50b3ApKTsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzNdLCIlbGQiLCYoZnJlZXplUGFyYW1zLnJjLnJpZ2h0KSk7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSs0XSwiJWxkIiwmKGZyZWV6ZVBhcmFtcy5yYy5ib3R0b20pKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoZnJlZXplUGFyYW1zLnJjLmxlZnQpKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzJdLCIlaGQiLCYoZnJlZXplUGFyYW1zLnJjLnRvcCkpOworCQkJc3NjYW5mKGtleXdvcmRzW2krM10sIiVoZCIsJihmcmVlemVQYXJhbXMucmMucmlnaHQpKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlaGQiLCYoZnJlZXplUGFyYW1zLnJjLmJvdHRvbSkpOwogCQkJZHdGbGFncyB8PSBNQ0lfT1ZMWV9SRUNUOwogCQkJaSs9NTsKIAkJCWNvbnRpbnVlOwpAQCAtMTY2NSwxMCArMTY2NSwxMCBAQAogCQkJRkxBRzEoInNvdXJjZSIsTUNJX0FOSU1fUFVUX1NPVVJDRSk7CiAJCQlGTEFHMSgiZGVzdGluYXRpb24iLE1DSV9BTklNX1BVVF9ERVNUSU5BVElPTik7CiAJCQlpZiAoIVNUUkNNUChrZXl3b3Jkc1tpXSwiYXQiKSAmJiAoaSs0PG5yb2ZrZXl3b3JkcykpIHsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWxkIiwmKFUuYW5pbXB1dFBhcmFtcy5yYy5sZWZ0KSk7Ci0JCQkJc3NjYW5mKGtleXdvcmRzW2krMl0sIiVsZCIsJihVLmFuaW1wdXRQYXJhbXMucmMudG9wKSk7Ci0JCQkJc3NjYW5mKGtleXdvcmRzW2krM10sIiVsZCIsJihVLmFuaW1wdXRQYXJhbXMucmMucmlnaHQpKTsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSs0XSwiJWxkIiwmKFUuYW5pbXB1dFBhcmFtcy5yYy5ib3R0b20pKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWhkIiwmKFUuYW5pbXB1dFBhcmFtcy5yYy5sZWZ0KSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krMl0sIiVoZCIsJihVLmFuaW1wdXRQYXJhbXMucmMudG9wKSk7CisJCQkJc3NjYW5mKGtleXdvcmRzW2krM10sIiVoZCIsJihVLmFuaW1wdXRQYXJhbXMucmMucmlnaHQpKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSs0XSwiJWhkIiwmKFUuYW5pbXB1dFBhcmFtcy5yYy5ib3R0b20pKTsKIAkJCQlkd0ZsYWdzIHw9IE1DSV9BTklNX1JFQ1Q7CiAJCQkJaSs9NTsKIAkJCQljb250aW51ZTsKQEAgLTE2ODAsMTAgKzE2ODAsMTAgQEAKIAkJCUZMQUcxKCJ2aWRlbyIsTUNJX09WTFlfUFVUX1ZJREVPKTsKIAkJCUZMQUcxKCJmcmFtZSIsTUNJX09WTFlfUFVUX0ZSQU1FKTsKIAkJCWlmICghU1RSQ01QKGtleXdvcmRzW2ldLCJhdCIpICYmIChpKzQ8bnJvZmtleXdvcmRzKSkgewotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlbGQiLCYoVS5vdmx5cHV0UGFyYW1zLnJjLmxlZnQpKTsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWxkIiwmKFUub3ZseXB1dFBhcmFtcy5yYy50b3ApKTsKLQkJCQlzc2NhbmYoa2V5d29yZHNbaSszXSwiJWxkIiwmKFUub3ZseXB1dFBhcmFtcy5yYy5yaWdodCkpOwotCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlbGQiLCYoVS5vdmx5cHV0UGFyYW1zLnJjLmJvdHRvbSkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoVS5vdmx5cHV0UGFyYW1zLnJjLmxlZnQpKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWhkIiwmKFUub3ZseXB1dFBhcmFtcy5yYy50b3ApKTsKKwkJCQlzc2NhbmYoa2V5d29yZHNbaSszXSwiJWhkIiwmKFUub3ZseXB1dFBhcmFtcy5yYy5yaWdodCkpOworCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlaGQiLCYoVS5vdmx5cHV0UGFyYW1zLnJjLmJvdHRvbSkpOwogCQkJCWR3RmxhZ3MgfD0gTUNJX09WTFlfUkVDVDsKIAkJCQlpKz01OwogCQkJCWNvbnRpbnVlOwpAQCAtMTc5MiwxNyArMTc5MiwxNyBAQAogCWk9MDsKIAl3aGlsZSAoaTxucm9ma2V5d29yZHMpIHsKIAkJaWYgKCFTVFJDTVAoa2V5d29yZHNbaV0sImF0IikgJiYgKGkrNDxucm9ma2V5d29yZHMpKSB7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWxkIiwmKHVwZGF0ZVBhcmFtcy5yYy5sZWZ0KSk7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSsyXSwiJWxkIiwmKHVwZGF0ZVBhcmFtcy5yYy50b3ApKTsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzNdLCIlbGQiLCYodXBkYXRlUGFyYW1zLnJjLnJpZ2h0KSk7Ci0JCQlzc2NhbmYoa2V5d29yZHNbaSs0XSwiJWxkIiwmKHVwZGF0ZVBhcmFtcy5yYy5ib3R0b20pKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYodXBkYXRlUGFyYW1zLnJjLmxlZnQpKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzJdLCIlaGQiLCYodXBkYXRlUGFyYW1zLnJjLnRvcCkpOworCQkJc3NjYW5mKGtleXdvcmRzW2krM10sIiVoZCIsJih1cGRhdGVQYXJhbXMucmMucmlnaHQpKTsKKwkJCXNzY2FuZihrZXl3b3Jkc1tpKzRdLCIlaGQiLCYodXBkYXRlUGFyYW1zLnJjLmJvdHRvbSkpOwogCQkJZHdGbGFncyB8PSBNQ0lfQU5JTV9SRUNUOwogCQkJaSs9NTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghU1RSQ01QKGtleXdvcmRzW2ldLCJoZGMiKSAmJiAoaSsxPG5yb2ZrZXl3b3JkcykpIHsKIAkJCWR3RmxhZ3MgfD0gTUNJX0FOSU1fVVBEQVRFX0hEQzsKLQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlZCIsJih1cGRhdGVQYXJhbXMuaERDKSk7CisJCQlzc2NhbmYoa2V5d29yZHNbaSsxXSwiJWhkIiwmKHVwZGF0ZVBhcmFtcy5oREMpKTsKIAkJCWkrPTI7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTg5MSw3ICsxODkxLDcgQEAKIAkJCQlpZiAoIVNUUkNNUChrZXl3b3Jkc1tpKzFdLCJkZWZhdWx0IikpIAogCQkJCQlVLmFuaW13aW5kb3dQYXJhbXMuaFduZCA9IE1DSV9PVkxZX1dJTkRPV19ERUZBVUxUOwogCQkJCWVsc2UKLQkJCQkJc3NjYW5mKGtleXdvcmRzW2krMV0sIiVkIiwmKFUuYW5pbXdpbmRvd1BhcmFtcy5oV25kKSk7CisJCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoVS5hbmltd2luZG93UGFyYW1zLmhXbmQpKTsKIAkJCQlpKz0yOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTk2MCw3ICsxOTYwLDcgQEAKIAkJCQlpZiAoIVNUUkNNUChrZXl3b3Jkc1tpKzFdLCJkZWZhdWx0IikpIAogCQkJCQlVLm92bHl3aW5kb3dQYXJhbXMuaFduZCA9IE1DSV9PVkxZX1dJTkRPV19ERUZBVUxUOwogCQkJCWVsc2UKLQkJCQkJc3NjYW5mKGtleXdvcmRzW2krMV0sIiVkIiwmKFUub3ZseXdpbmRvd1BhcmFtcy5oV25kKSk7CisJCQkJCXNzY2FuZihrZXl3b3Jkc1tpKzFdLCIlaGQiLCYoVS5vdmx5d2luZG93UGFyYW1zLmhXbmQpKTsKIAkJCQlpKz0yOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS90aW1lLmMgYi9tdWx0aW1lZGlhL3RpbWUuYwppbmRleCBiZmE1YWJjLi4wMGJmZmM0IDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL3RpbWUuYworKysgYi9tdWx0aW1lZGlhL3RpbWUuYwpAQCAtMTAsOCArMTAsMTAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAibGR0LmgiCiAjaW5jbHVkZSAiY2FsbGJhY2suaCIKKyNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAiZHJpdmVyLmgiCiAjaW5jbHVkZSAibW1zeXN0ZW0uaCIKQEAgLTI3LDYgKzI5LDcgQEAKICAgICBXT1JEIHdEZWxheTsKICAgICBXT1JEIHdSZXNvbDsKICAgICBGQVJQUk9DIGxwRnVuYzsKKyAgICBISU5TVEFOQ0UgaEluc3RhbmNlOwogICAgIERXT1JEIGR3VXNlcjsKICAgICBXT1JEIHdGbGFnczsKICAgICBXT1JEIHdUaW1lcklEOwpAQCAtNDIsNiArNDUsNyBAQAogICovCiBXT1JEIE1NU3lzVGltZUNhbGxiYWNrKEhXTkQgaFduZCwgV09SRCB3TXNnLCBJTlQgbklELCBEV09SRCBkd1RpbWUpCiB7CisgICAgRkFSUFJPQwlscEZ1bmM7CiAgICAgTFBUSU1FUkVOVFJZIGxwVGltZXIgPSBscFRpbWVyTGlzdDsKICAgICBtbVN5c1RpbWVNUy51Lm1zICs9IDMzOwogICAgIG1tU3lzVGltZVNNUFRFLnUuc21wdGUuZnJhbWUrKzsKQEAgLTUxLDggKzU1LDI2IEBACiAJICAgIGxwVGltZXItPndDdXJUaW1lID0gbHBUaW1lci0+d0RlbGF5OwogCSAgICBpZiAobHBUaW1lci0+bHBGdW5jICE9IChGQVJQUk9DKSBOVUxMKSB7CiAJCWRwcmludGZfbW10aW1lKHN0ZGRlYiwgIk1NU3lzVGltZUNhbGxiYWNrIC8vIGJlZm9yZSBDYWxsQmFjazE2ICFcbiIpOwotCQlDYWxsVGltZUZ1bmNQcm9jKGxwVGltZXItPmxwRnVuYywgbHBUaW1lci0+d1RpbWVySUQsIDAsCi0JCQkJIGxwVGltZXItPmR3VXNlciwgMCwgMCk7CisJCWRwcmludGZfbW10aW1lKHN0ZGRlYiwgIk1NU3lzVGltZUNhbGxiYWNrIC8vIGxwRnVuYz0lMDhseCB3VGltZXJJRD0lMDRYIGR3VXNlcj0lMDhsWCAhXG4iLAorCQkJbHBUaW1lci0+bHBGdW5jLCBscFRpbWVyLT53VGltZXJJRCwgbHBUaW1lci0+ZHdVc2VyKTsKKwkJZHByaW50Zl9tbXRpbWUoc3RkZGViLCAiTU1TeXNUaW1lQ2FsbGJhY2sgLy8gaEluc3RhbmNlPSUwNFggIVxuIiwgbHBUaW1lci0+aEluc3RhbmNlKTsKKy8qCisJCWxwRnVuYyA9IE1ha2VQcm9jSW5zdGFuY2UobHBUaW1lci0+aEluc3RhbmNlLCBscFRpbWVyLT5scEZ1bmMpOworCQlkcHJpbnRmX21tdGltZShzdGRkZWIsICJNTVN5c1RpbWVDYWxsYmFjayAvLyBNYWtlUHJvY0luc3RhbmNlKGxwRnVuYyk9JXAgJXAgIVxuIiwgCisJCQlscEZ1bmMsIFBUUl9TRUdfVE9fTElOKGxwRnVuYykpOworKi8KKwkJbHBGdW5jID0gTU9EVUxFX0dldEVudHJ5UG9pbnQoIGxwVGltZXItPmhJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfR2V0T3JkaW5hbChscFRpbWVyLT5oSW5zdGFuY2UsIlRpbWVyQ2FsbEJhY2siICkpOworCQlkcHJpbnRmX21tdGltZShzdGRkZWIsICJNTVN5c1RpbWVDYWxsYmFjayAvLyBscEZ1bmM9JTA4bHggIVxuIiwgbHBGdW5jKTsKKwkJCisJCUNhbGxUbzE2X3dvcmRfd3dsbGwobHBUaW1lci0+bHBGdW5jLAorCQkJbHBUaW1lci0+aEluc3RhbmNlLCBscFRpbWVyLT53VGltZXJJRCwgCisJCQkwLCBscFRpbWVyLT5kd1VzZXIsIDAsIDApOworCisvKgorCQlDYWxsVGltZUZ1bmNQcm9jKGxwVGltZXItPmxwRnVuYywgbHBUaW1lci0+d1RpbWVySUQsIAorCQkJCTAsIGxwVGltZXItPmR3VXNlciwgMCwgMCk7CisqLwogCQlkcHJpbnRmX21tdGltZShzdGRkZWIsICJNTVN5c1RpbWVDYWxsYmFjayAvLyBhZnRlciBDYWxsQmFjazE2ICFcbiIpOwogCQlmZmx1c2goc3Rkb3V0KTsKIAkgICAgfQpAQCAtMTA0LDcgKzEyNiw3IEBACiAgICAgV09SRCB3TmV3SUQgPSAwOwogICAgIExQVElNRVJFTlRSWSBscE5ld1RpbWVyOwogICAgIExQVElNRVJFTlRSWSBscFRpbWVyID0gbHBUaW1lckxpc3Q7Ci0gICAgZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ0aW1lU2V0RXZlbnQoJXUsICV1LCAlcCwgJTA4bFgsICUwNFgpO1xuIiwKKyAgICBkcHJpbnRmX21tdGltZShzdGRkZWIsICJ0aW1lU2V0RXZlbnQoJXUsICV1LCAlcCwgJTA4bFgsICUwNFgpO1xuIiwKIAkJICB3RGVsYXksIHdSZXNvbCwgbHBGdW5jLCBkd1VzZXIsIHdGbGFncyk7CiAgICAgaWYgKCFtbVRpbWVTdGFydGVkKQogCVN0YXJ0TU1UaW1lKCk7CkBAIC0xMzAsNiArMTUyLDEwIEBACiAgICAgbHBOZXdUaW1lci0+d0RlbGF5ID0gd0RlbGF5OwogICAgIGxwTmV3VGltZXItPndSZXNvbCA9IHdSZXNvbDsKICAgICBscE5ld1RpbWVyLT5scEZ1bmMgPSAoRkFSUFJPQykgbHBGdW5jOworICAgIGxwTmV3VGltZXItPmhJbnN0YW5jZSA9IEdldFRhc2tEUygpOworCWRwcmludGZfbW10aW1lKHN0ZGRlYiwgInRpbWVTZXRFdmVudCAvLyBoSW5zdGFuY2U9JTA0WCAhXG4iLCBscE5ld1RpbWVyLT5oSW5zdGFuY2UpOworCWRwcmludGZfbW10aW1lKHN0ZGRlYiwgInRpbWVTZXRFdmVudCAvLyBQVFJfU0VHX1RPX0xJTihscEZ1bmMpPSVwICFcbiIsIAorCQkJCVBUUl9TRUdfVE9fTElOKGxwRnVuYykpOwogICAgIGxwTmV3VGltZXItPmR3VXNlciA9IGR3VXNlcjsKICAgICBscE5ld1RpbWVyLT53RmxhZ3MgPSB3RmxhZ3M7CiAgICAgcmV0dXJuIGxwTmV3VGltZXItPndUaW1lcklEOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9NYWtlZmlsZS5pbiBiL29iamVjdHMvTWFrZWZpbGUuaW4KaW5kZXggOWE5YTZhZi4uZjg4YmIyMSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9NYWtlZmlsZS5pbgorKysgYi9vYmplY3RzL01ha2VmaWxlLmluCkBAIC0xLDM5ICsxLDI3IEBACi1DQyAJPSBAQ0NACi1DRkxBR1MgCT0gQENGTEFHU0AKLVhJTkNMIAk9IEB4X2luY2x1ZGVzQAotVE9QU1JDICA9IEB0b3Bfc3JjZGlyQAotRElWSU5DTCA9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUxECT0gQExEQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACitUT1BTUkMgPSBAdG9wX3NyY2RpckAKK01PRFVMRSA9IG9iamVjdHMKIAotCi1NT0RVTEUgCT0gb2JqZWN0cwotCi1TUkNTIAk9IGJpdGJsdC5jIGJpdG1hcC5jIGJydXNoLmMgY2xpcHBpbmcuYyBjb2xvci5jIGRjLmMgZGN2YWx1ZXMuYyBcCi0JZGliLmMgZm9udC5jIGdkaW9iai5jIGxpbmVkZGEuYyBtZXRhZmlsZS5jIG9lbWJpdG1hcC5jIHBhbGV0dGUuYyBcCi0JcGVuLmMgcmVnaW9uLmMgdGV4dC5jCi0KLU9CSlMgPSAkKFNSQ1M6LmM9Lm8pCi0KLS5jLm86Ci0JJChDQykgLWMgJChDRkxBR1MpICQoWElOQ0wpICQoRElWSU5DTCkgLW8gJCoubyAkPAorQ19TUkNTID0gXAorCWJpdGJsdC5jIFwKKwliaXRtYXAuYyBcCisJYnJ1c2guYyBcCisJY2xpcHBpbmcuYyBcCisJY29sb3IuYyBcCisJZGMuYyBcCisJZGN2YWx1ZXMuYyBcCisJZGliLmMgXAorCWZvbnQuYyBcCisJZ2Rpb2JqLmMgXAorCWxpbmVkZGEuYyBcCisJbWV0YWZpbGUuYyBcCisJb2VtYml0bWFwLmMgXAorCXBhbGV0dGUuYyBcCisJcGVuLmMgXAorCXJlZ2lvbi5jIFwKKwl0ZXh0LmMKIAogYWxsOiAkKE1PRFVMRSkubwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46CitATUFLRV9SVUxFU0AKIAogIyMjIERlcGVuZGVuY2llczoKZGlmZiAtLWdpdCBhL29iamVjdHMvY29sb3IuYyBiL29iamVjdHMvY29sb3IuYwppbmRleCBjMTBhNmMwLi5iZGUwMzNiIDEwMDY0NAotLS0gYS9vYmplY3RzL2NvbG9yLmMKKysrIGIvb2JqZWN0cy9jb2xvci5jCkBAIC0xMiw5ICsxMiwxOCBAQAogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJnZGkuaCIKICNpbmNsdWRlICJjb2xvci5oIgotCisjaW5jbHVkZSAicGFsZXR0ZS5oIgogCiBDb2xvcm1hcCBDT0xPUl9XaW5Db2xvcm1hcCA9IDA7CitpbnQgQ09MT1JfRml4ZWRNYXAgPSAwOworCitpbnQgQ09MT1JfUmVkc2hpZnQgPSAwOworaW50IENPTE9SX1JlZG1heCA9IDA7CitpbnQgQ09MT1JfR3JlZW5zaGlmdCA9IDA7CitpbnQgQ09MT1JfR3JlZW5tYXggPSAwOworaW50IENPTE9SX0JsdWVzaGlmdCA9IDA7CitpbnQgQ09MT1JfQmx1ZW1heCA9IDA7CitpbnQgQ09MT1JfR3JheW1heCA9IDA7CiAKICAgLyogU3lzdGVtIHBhbGV0dGUgc3RhdGljIGNvbG9ycyAqLwogCkBAIC0xODEsNiArMTkwLDIzIEBACiAgICAgcmV0dXJuIGhwYWxldHRlOwogfQogCit2b2lkCitDT0xPUl9Db21wdXRlc2hpZnRzKHVuc2lnbmVkIGxvbmcgbWFza2JpdHMsIGludCAqc2hpZnQsIGludCAqbWF4KQoreworICAgIGludCBpOworCisgICAgaWYobWFza2JpdHM9PTApIHsKKyAgICAgICAgKnNoaWZ0PTA7CisgICAgICAgICptYXg9MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvcihpPTA7IShtYXNrYml0cyYxKTtpKyspCisgICAgICAgIG1hc2tiaXRzID4+PSAxOworCisgICAgKnNoaWZ0ID0gaTsKKyAgICAqbWF4ID0gbWFza2JpdHM7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENPTE9SX0luaXQKQEAgLTE5MCwxMiArMjE2LDEzIEBACiBIUEFMRVRURSBDT0xPUl9Jbml0KHZvaWQpCiB7CiAgICAgVmlzdWFsICogdmlzdWFsID0gRGVmYXVsdFZpc3VhbCggZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSApOwotICAgIAorCiAgICAgc3dpdGNoKHZpc3VhbC0+Y2xhc3MpCiAgICAgewogICAgIGNhc2UgR3JheVNjYWxlOgogICAgIGNhc2UgUHNldWRvQ29sb3I6CiAgICAgY2FzZSBEaXJlY3RDb2xvcjoKKyAgICAgICAgQ09MT1JfRml4ZWRNYXAgPSAwOwogCWlmIChPcHRpb25zLnVzZVByaXZhdGVNYXApCiAJewogCSAgICBDT0xPUl9XaW5Db2xvcm1hcCA9IFhDcmVhdGVDb2xvcm1hcCggZGlzcGxheSwgcm9vdFdpbmRvdywKQEAgLTIxNCwxMSArMjQxLDIxIEBACiAJCWJyZWFrOwogCSAgICB9CiAJfQorCUNPTE9SX1dpbkNvbG9ybWFwID0gRGVmYXVsdENvbG9ybWFwT2ZTY3JlZW4oIHNjcmVlbiApOworICAgICAgICBicmVhazsKIAkvKiBGYWxsIHRocm91Z2ggKi8KICAgICBjYXNlIFN0YXRpY0dyYXk6CisJQ09MT1JfV2luQ29sb3JtYXAgPSBEZWZhdWx0Q29sb3JtYXBPZlNjcmVlbiggc2NyZWVuICk7CisJQ09MT1JfRml4ZWRNYXAgPSAxOworICAgICAgICBDT0xPUl9HcmF5bWF4ID0gKDE8PHNjcmVlbkRlcHRoKS0xOworICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRpY0NvbG9yOgogICAgIGNhc2UgVHJ1ZUNvbG9yOgogCUNPTE9SX1dpbkNvbG9ybWFwID0gRGVmYXVsdENvbG9ybWFwT2ZTY3JlZW4oIHNjcmVlbiApOworCUNPTE9SX0ZpeGVkTWFwID0gMTsKKyAgICAgICAgQ09MT1JfQ29tcHV0ZXNoaWZ0cyh2aXN1YWwtPnJlZF9tYXNrLCAmQ09MT1JfUmVkc2hpZnQsICZDT0xPUl9SZWRtYXgpOworICAgICAgICBDT0xPUl9Db21wdXRlc2hpZnRzKHZpc3VhbC0+Z3JlZW5fbWFzaywgJkNPTE9SX0dyZWVuc2hpZnQsICZDT0xPUl9HcmVlbm1heCk7CisgICAgICAgIENPTE9SX0NvbXB1dGVzaGlmdHModmlzdWFsLT5ibHVlX21hc2ssICZDT0xPUl9CbHVlc2hpZnQsICZDT0xPUl9CbHVlbWF4KTsKIAlicmVhazsJCiAgICAgfQogICAgIHJldHVybiBDT0xPUl9Jbml0UGFsZXR0ZSgpOwpAQCAtMjUxLDIyICsyODgsODQgQEAKICAqICAgICAgICAgICBDT0xPUl9Ub1BoeXNpY2FsCiAgKgogICogUmV0dXJuIHRoZSBwaHlzaWNhbCBjb2xvciBjbG9zZXN0IHRvICdjb2xvcicuCisgKgorICogRVNXOiBUaGlzIHN0aWxsIG5lZWRzIGEgbG90IG9mIHdvcms7IGluIHBhcnRpY3VsYXIsIHdoYXQgaGFwcGVucyB3aGVuCisgKiB3ZSBoYXZlIHJlYWxseSBsYXJnZSAoPiA4IGJpdCkgRGlyZWN0Q29sb3IgYm9hcmRzPworICogQnV0IGl0IHNob3VsZCB3b3JrIGJldHRlciBpbiAxNiBhbmQgMjQgYml0IG1vZGVzIG5vdy4KKyAqIChBdCBsZWFzdCBpdCBwYXlzIGF0dGVudGlvbiB0byB0aGUgWCBzZXJ2ZXIncyBkZXNjcmlwdGlvbgorICogaW4gVHJ1ZUNvbG9yIG1vZGUsIGluc3RlYWQgb2YgYmxpbmRseSBwYXNzaW5nIHRocm91Z2ggdGhlCisgKiBjb2xvciBzcGVjIGFuZCBzd2FwcGluZyByZWQgdG8gYmx1ZSBvciBsb3NpbmcgYmx1ZSBhbmQgcGFydCBvZiB0aGUKKyAqIGdyZWVuIGVudGlyZWx5LCBkZXBlbmRpbmcgb24gd2hhdCBtb2RlIG9uZSBpcyBpbiEpCisgKgogICovCiBpbnQgQ09MT1JfVG9QaHlzaWNhbCggREMgKmRjLCBDT0xPUlJFRiBjb2xvciApCiB7CiAgICAgV09SRCBpbmRleCA9IDA7CiAgICAgV09SRCAqbWFwcGluZzsKIAotICAgIGlmIChzY3JlZW5EZXB0aCA+IDgpIHJldHVybiBjb2xvcjsKKyAgICAvKiBpZiAoc2NyZWVuRGVwdGggPiA4KSByZXR1cm4gY29sb3I7ICovCisKICAgICBpZiAoZGMgJiYgKGRjLT53LmJpdHNQZXJQaXhlbCA9PSAxKSAmJiAoKGNvbG9yID4+IDI0KSA9PSAwKSkKICAgICB7CisJLyogbW9ub2Nocm9tZSAqLwogICAgICAgICBpZiAoKChjb2xvciA+PiAxNikgJiAweGZmKSArCiAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhmZikgKyAoY29sb3IgJiAweGZmKSA+IDI1NSozLzIpCiAgICAgICAgICAgICByZXR1cm4gMTsgIC8qIHdoaXRlICovCiAgICAgICAgIGVsc2UgcmV0dXJuIDA7ICAvKiBibGFjayAqLwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2goY29sb3IgPj4gMjQpCisKKyAgICBpZihDT0xPUl9GaXhlZE1hcCkgeworCisgICAgICAgIC8qIHRoZXJlIGlzIG5vIGNvbG9ybWFwIHBvc3NpYmxlOyB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBjb21wdXRlCisgICAgICAgICAgIHRoZSBwaXhlbCB2YWx1ZSBmcm9tIHRoZSB2aXN1YWwgaW5mb3JtYXRpb24gc3RvcmVkIGVhcmxpZXIgKi8KKworCXVuc2lnbmVkIGxvbmcgd2hpY2ggPSBjb2xvciA+PiAyNDsKKworCXVuc2lnbmVkIGxvbmcgcmVkLCBncmVlbiwgYmx1ZTsKKwl1bnNpZ25lZCBpZHg7CisJUEFMRVRURU9CSiAqIHBhbFB0cjsKKworCXN3aXRjaCh3aGljaCkgeworCQljYXNlIDA6IC8qIFJHQiAqLworCQljYXNlIDI6IC8qIFBBTEVUVEVSR0IgLS0gbmVlZHMgc29tZSB3b3JrLCBidXQgd2h5IGJvdGhlcjsgd2UndmUgZ290IGEgUkVBTExZIExBUkdFIG51bWJlciBvZiBjb2xvcnMuLi4/ICovCisJCWRlZmF1bHQ6CisKKwkJcmVkID0gR2V0UlZhbHVlKGNvbG9yKTsKKwkJZ3JlZW4gPSBHZXRHVmFsdWUoY29sb3IpOworCQlibHVlID0gR2V0QlZhbHVlKGNvbG9yKTsKKwkJYnJlYWs7CisKKwkJY2FzZSAxOiAvKiBQQUxFVFRFSURYIC0tIGhtbSwgZ2V0IHRoZSByZWFsIGNvbG9yIGZyb20gdGhlIHN0b2NrIHBhbGV0dGUgKi8KKwkJcGFsUHRyID0gKFBBTEVUVEVPQkogKikgR0RJX0dldE9ialB0ciggU1RPQ0tfREVGQVVMVF9QQUxFVFRFLCBQQUxFVFRFX01BR0lDKTsKKwkJaWR4ID0gY29sb3IgJiAweGZmZmY7CisJCWlmKGlkeCA+PSBwYWxQdHItPmxvZ3BhbGV0dGUucGFsTnVtRW50cmllcykgeworCQkJLyogb3V0IG9mIGJvdW5kcyAqLworCQkJcmVkID0gZ3JlZW4gPSBibHVlID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCXJlZCA9IHBhbFB0ci0+bG9ncGFsZXR0ZS5wYWxQYWxFbnRyeVtpZHhdLnBlUmVkOworCQkJZ3JlZW4gPSBwYWxQdHItPmxvZ3BhbGV0dGUucGFsUGFsRW50cnlbaWR4XS5wZUdyZWVuOworCQkJYmx1ZSA9IHBhbFB0ci0+bG9ncGFsZXR0ZS5wYWxQYWxFbnRyeVtpZHhdLnBlQmx1ZTsKKwkJfQorCX0KKworCWlmKENPTE9SX0dyYXltYXgpIHsKKwkgICAgLyogZ3JheXNjYWxlIG9ubHk7IHJldHVybiBzY2FsZWQgdmFsdWUgKi8KKyAgICAgICAgICAgIHJldHVybiAoIChyZWQgKiAzMCArIGdyZWVuICogNjkgKyBibHVlICogMTEpICogQ09MT1JfR3JheW1heCkgLyAyNTUwMDsKKwl9CisJZWxzZSB7CisJICAgIC8qIHNjYWxlIGVhY2ggaW5kaXZpZHVhbGx5IGFuZCBjb25zdHJ1Y3QgdGhlIFRydWVDb2xvciBwaXhlbCB2YWx1ZSAqLworCSAgICBpZihDT0xPUl9SZWRtYXggIT0gMjU1KQorICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBDT0xPUl9SZWRtYXgpIC8gMjU1OworCSAgICBpZihDT0xPUl9HcmVlbm1heCAhPSAyNTUpCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBDT0xPUl9HcmVlbm1heCkgLyAyNTU7CisJICAgIGlmKENPTE9SX0JsdWVtYXggIT0gMjU1KQorICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIENPTE9SX0JsdWVtYXgpIC8gMjU1OworCisJICAgIHJldHVybiAocmVkIDw8IENPTE9SX1JlZHNoaWZ0KSB8IChncmVlbiA8PCBDT0xPUl9HcmVlbnNoaWZ0KSB8IChibHVlIDw8IENPTE9SX0JsdWVzaGlmdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBzd2l0Y2goY29sb3IgPj4gMjQpCiAgICAgewogICAgIGNhc2UgMDogIC8qIFJHQiAqLwogCWluZGV4ID0gR2V0TmVhcmVzdFBhbGV0dGVJbmRleCggU1RPQ0tfREVGQVVMVF9QQUxFVFRFLCBjb2xvciApOwpAQCAtMzM4LDcgKzQzNyw3IEBACiAgICAgV09SRCBpbmRleDsKICAgICBEQyAqZGMgPSAoREMgKikgR0RJX0dldE9ialB0ciggaGRjLCBEQ19NQUdJQyApOwogICAgIGlmICghZGMpIHJldHVybiAwOwotICAgIGlmIChzY3JlZW5EZXB0aCA+IDgpIHJldHVybiBjb2xvcjsKKyAgICBpZiAoc2NyZWVuRGVwdGggPiA4KSByZXR1cm4gY29sb3I7IC8qIEZJWE1FICovCiAgICAgaW5kZXggPSAoV09SRCkoQ09MT1JfVG9QaHlzaWNhbCggZGMsIGNvbG9yICYgMHhmZmZmZmYgKSAmIDB4ZmZmZik7CiAgICAgcmV0dXJuIFBBTEVUVEVJTkRFWCggaW5kZXggKTsKIH0KZGlmZiAtLWdpdCBhL29iamVjdHMvZGliLmMgYi9vYmplY3RzL2RpYi5jCmluZGV4IGEwMjMyODAuLmM5NzYxODAgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGliLmMKKysrIGIvb2JqZWN0cy9kaWIuYwpAQCAtNjgwLDYgKzY4MCwxMiBAQAogewogICAgIEhCSVRNQVAgaGFuZGxlOwogICAgIAorCWlmKGhlYWRlci0+YmlTaXplIT1zaXplb2YoQklUTUFQSU5GT0hFQURFUikpCisJeworCQlmcHJpbnRmKHN0ZGVyciwiQ3JlYXRlRElCaXRtYXA6IHdyb25nIHNpemUgKCVsZCkgZm9yIGhlYWRlclxuIiwKKwkJCWhlYWRlci0+YmlTaXplKTsKKwkJcmV0dXJuIDA7CisJfQogICAgIGhhbmRsZSA9IENyZWF0ZUNvbXBhdGlibGVCaXRtYXAoIGhkYywgaGVhZGVyLT5iaVdpZHRoLCBoZWFkZXItPmJpSGVpZ2h0ICk7CiAvKiAgICBoYW5kbGUgPSBDcmVhdGVCaXRtYXAoIGhlYWRlci0+YmlXaWR0aCwgaGVhZGVyLT5iaUhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGhlYWRlci0+YmlCaXRDb3VudCwgTlVMTCApOwpAQCAtNzI3LDMgKzczMywxMSBAQAogICAgIFNldEJrQ29sb3IoIGhEQywgb2xkQmcgKTsKICAgICByZXR1cm4gVFJVRTsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIENvcHlJY29uICAgIChVU0VSLjM2OCkKKyAqLworQk9PTCBDb3B5SWNvbihIQU5ETEUgaGFuZGxlLCBISUNPTiBoSWNvbikKK3sKKyAgICBwcmludGYoIlNUVUIgISEhIENvcHlJY29uOiAleCAleFxuIixoYW5kbGUsaEljb24pOworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvcmMvTWFrZWZpbGUuaW4gYi9yYy9NYWtlZmlsZS5pbgppbmRleCA2M2M0MmQwLi5hZWM4ZDAyIDEwMDY0NAotLS0gYS9yYy9NYWtlZmlsZS5pbgorKysgYi9yYy9NYWtlZmlsZS5pbgpAQCAtMSw1MCArMSwzOCBAQAotQ0MJPSBAQ0NACi1DRkxBR1MJPSBAQ0ZMQUdTQAotVE9QU1JDCT0gQHRvcF9zcmNkaXJACi1ESVZJTkNMCT0gLUkkKFRPUFNSQykvaW5jbHVkZQotQklTT04JPSBAWUFDQ0AKLUZMRVgJPSBATEVYQAotTEFORwk9IEBMQU5HQAotQ09NUElMRQk9ICQoQ0MpICQoQ0ZMQUdTKSAkKERJVklOQ0wpICQoTEFORykKK1RPUFNSQyA9IEB0b3Bfc3JjZGlyQAogCi1hbGw6IHJjLm8KK01PRFVMRSA9IHJjCisKK0NfU1JDUyA9IHN5c3Jlcy5jCisKK2FsbDogJChNT0RVTEUpLm8KKworQE1BS0VfUlVMRVNACiAKIHkudGFiLmMgeS50YWIuaDogcGFyc2VyLnkKLQkkKEJJU09OKSAtZCAtdCBwYXJzZXIueQorCSQoWUFDQykgLWQgLXQgcGFyc2VyLnkKIAotbGV4Lnl5LmM6IHBhcnNlci5sIHBhcnNlci5oIHkudGFiLmgKLQkkKEZMRVgpIC04IC1JIHBhcnNlci5sCitsZXgueXkuYzogcGFyc2VyLmwKKwkkKExFWCkgLTggLUkgcGFyc2VyLmwKIAogd2luZXJjOiBsZXgueXkubyB3aW5lcmMubyB5LnRhYi5vCi0JJChDT01QSUxFKSBsZXgueXkubyB3aW5lcmMubyB5LnRhYi5vIC1vIHdpbmVyYworCSQoQ0MpICQoQUxMQ0ZMQUdTKSBsZXgueXkubyB3aW5lcmMubyB5LnRhYi5vIC1vIHdpbmVyYyAkKExFWExJQikKIAotc3lzcmVzLnJjdDogc3lzcmVzLnJjCitzeXNyZXMucmN0OiBzeXNyZXMucmMgc3lzcmVzX0VuLnJjIHN5c3Jlc19Fcy5yYyBzeXNyZXNfRGUucmMgc3lzcmVzX05vLnJjCiAJZWNobyAiI2luY2x1ZGUgXCJ3aW5kb3dzLmhcIiIgPnN5c3Jlcy5yY3QKIAllY2hvIFdJTkRPV1NfSF9FTkRTX0hFUkUgPj5zeXNyZXMucmN0CiAJY2F0IHN5c3Jlcy5yYyA+PnN5c3Jlcy5yY3QKIAogc3lzcmVzLmMgc3lzcmVzLmg6IHN5c3Jlcy5yY3Qgd2luZXJjCi0JJChDT01QSUxFKSAtRSAteCBjIC1QIHN5c3Jlcy5yY3QgPiBzeXNyZXMudG1wCi0JY2F0IHN5c3Jlcy50bXAgfCBzZWQgLWUgJzEsL15XSU5ET1dTX0hfRU5EU19IRVJFL2QnIHwgLi93aW5lcmMgLW8gc3lzcmVzIC12IC1wIHN5c3JlcworCSQoQ0MpICQoQUxMQ0ZMQUdTKSAtRSAteCBjIC1QIHN5c3Jlcy5yY3QgfCBzZWQgLWUgJzEsL15XSU5ET1dTX0hfRU5EU19IRVJFL2QnIHwgLi93aW5lcmMgLW8gc3lzcmVzIC12IC1wIHN5c3JlcwogCi1yYy5vOiBzeXNyZXMubwotCWNwIHN5c3Jlcy5vIHJjLm8KK2NsZWFuOjoKKwkkKFJNKSBsZXgueXkuYyBzeXNyZXMucmN0IHdpbmVyYyB5LnRhYi5jIHkudGFiLmggc3lzcmVzLmMgc3lzcmVzLmgKIAotLmMubzoKLQkkKENPTVBJTEUpIC1jIC1vICQqLm8gJDwKK2xhbmdjbGVhbjo6CisJJChSTSkgc3lzcmVzLmMgc3lzcmVzLmggc3lzcmVzLm8KIAotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0Jcm0gLWYgbGV4Lnl5LmMgc3lzcmVzLnRtcCBzeXNyZXMucmN0IHdpbmVyYyB5LnRhYi5jIHkudGFiLmggc3lzcmVzLmMgc3lzcmVzLmgKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZGVwZW5kOiBzeXNyZXMuaAotCi15LnRhYi5vOiB5LnRhYi5jCi1sZXgueXkubzogbGV4Lnl5LmMKK3kudGFiLm86IHkudGFiLmMgeS50YWIuaCBwYXJzZXIuaAorbGV4Lnl5Lm86IGxleC55eS5jIHkudGFiLmggcGFyc2VyLmgKIHdpbmVyYy5vOiAkKFRPUFNSQykvaW5jbHVkZS93aW5kb3dzLmggJChUT1BTUkMpL2luY2x1ZGUvbmVleGUuaCBwYXJzZXIuaCB5LnRhYi5oCiAgCisjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvcmMvc3lzcmVzLnJjIGIvcmMvc3lzcmVzLnJjCmluZGV4IGVjZDc4NTkuLjRjZDJlZmQgMTAwNjQ0Ci0tLSBhL3JjL3N5c3Jlcy5yYworKysgYi9yYy9zeXNyZXMucmMKQEAgLTEsMjEwICsxLDExIEBACiAjaWYgI0xBTkcoRW4pCi0KLVNZU01FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCi17Ci0gTUVOVUlURU0gIiZSZXN0b3JlIiwgNjE3MjgKLSBNRU5VSVRFTSAiJk1vdmUiLCA2MTQ1NgotIE1FTlVJVEVNICImU2l6ZSIsIDYxNDQwCi0gTUVOVUlURU0gIk1pJm5pbWl6ZSIsIDYxNDcyCi0gTUVOVUlURU0gIk1hJnhpbWl6ZSIsIDYxNDg4Ci0gTUVOVUlURU0gU0VQQVJBVE9SCi0gTUVOVUlURU0gIiZDbG9zZVx0QWx0LUY0IiwgNjE1MzYKLSBNRU5VSVRFTSBTRVBBUkFUT1IKLSBNRU5VSVRFTSAiJlN3aXRjaCB0byAuLi5cdEN0cmwtRXNjIiwgNjE3NDQKLSBNRU5VSVRFTSBTRVBBUkFUT1IKLSBNRU5VSVRFTSAiJkFib3V0IFdJTkUgLi4uIiwgNjE3NjEKLX0KLQotTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OAotU1RZTEUgRFNfU1lTTU9EQUwgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKLUJFR0lOCi0gICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQotICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKLSAgICAgICAgUFVTSEJVVFRPTiAiJk9rIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKLSAgICAgICAgUFVTSEJVVFRPTiAiJkNhbmNlbCIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCi0gICAgICAgIFBVU0hCVVRUT04gIiZBYm9ydCIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAotICAgICAgICBQVVNIQlVUVE9OICImUmV0cnkiLCA0LCAxNjAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKLSAgICAgICAgUFVTSEJVVFRPTiAiJklnbm9yZSIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAotICAgICAgICBQVVNIQlVUVE9OICImWWVzIiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCi0gICAgICAgIFBVU0hCVVRUT04gIiZObyIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAotRU5ECi0KLVNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIxMywgMTc5Ci1TVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKLUNBUFRJT04gIkFib3V0ICVzIgotRk9OVCAxMCwgIlN5c3RlbSIKLXsKLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDg2LCAxNjAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjA1LCAxMjAKLSBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAxOTAsIDExMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAotIElDT04gIiIsIDEwODgsIDE4NSwgMTAsIDE4LCAyMAotfQotCi0KLTMgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNAotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKLUNBUFRJT04gIk9wZW4iCi1GT05UIDgsICJIZWx2IgotewotIExURVhUICJGaWxlICZOYW1lOiIsIDEwOTAsIDYsIDYsIDc2LCA5Ci0gRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAotIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAotIExURVhUICImRGlyZWN0b3JpZXM6IiwgLTEsIDExMCwgNiwgOTIsIDkKLSBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKLSBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAotIExURVhUICJMaXN0IEZpbGVzIG9mICZUeXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKLSBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCi0gTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5Ci0gQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAotIERFRlBVU0hCVVRUT04gIk9wZW4iLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIENIRUNLQk9YICImUmVhZCBPbmx5IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLX0KLQotCi00IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKLVNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCi1DQVBUSU9OICJTYXZlIEFzIC4uLiIKLUZPTlQgOCwgIkhlbHYiCi17Ci0gTFRFWFQgIkZpbGUgJk5hbWU6IiwgMTA5MCwgNiwgNiwgNzYsIDkKLSBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCi0gTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCi0gTFRFWFQgIiZEaXJlY3RvcmllczoiLCAtMSwgMTEwLCA2LCA5MiwgOQotIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAotIExJU1RCT1ggMTEyMSwgMTEwLCAzMiwgOTIsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCi0gTFRFWFQgIkxpc3QgRmlsZXMgb2YgJlR5cGU6IiwgMTA4OSwgNiwgMTA0LCA5MCwgOQotIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKLSBMVEVYVCAiRHJpJnZlczoiLCAxMDkxLCAxMTAsIDEwNCwgOTIsIDkKLSBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCi0gREVGUFVTSEJVVFRPTiAiU2F2ZSBBcyIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICImSGVscCIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotfQotCi0KLTUgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKLUNBUFRJT04gIlByaW50IgotRk9OVCA4LCAiSGVsdiIKLXsKLSBMVEVYVCAiUHJpbnRlcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gR1JPVVBCT1ggIlByaW50IFJhbmdlIiwgMTA3MiwgNiwgMzAsIDE2MCwgNjUsIEJTX0dST1VQQk9YCi0gUkFESU9CVVRUT04gIiZBbGwiLCAxMDU2LCAxNiwgNDUsIDYwLCAxMgotIFJBRElPQlVUVE9OICJTJmVsZWN0aW9uIiwgMTA1NywgMTYsIDYwLCA2MCwgMTIKLSBSQURJT0JVVFRPTiAiJlBhZ2VzIiwgMTA1OCwgMTYsIDc1LCA2MCwgMTIKLSBERUZQVVNIQlVUVE9OICJQcmludCIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICImU2V0dXAiLCAxMDI0LCAyMDYsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIExURVhUICImRnJvbToiLCAxMDkwLCA2MCwgODAsIDMwLCA5Ci0gTFRFWFQgIiZUbzoiLCAxMDkxLCAxMjAsIDgwLCAzMCwgOQotIExURVhUICJQcmludCAmUXVhbGl0eToiLCAxMDkyLCA2LCAxMDAsIDc2LCA5Ci0gQ09NQk9CT1ggMTEzNiwgODAsIDEwMCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIlByaW50IHRvIEZpJmxlIiwgMTA0MCwgMjAsIDEwMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBDSEVDS0JPWCAiQ29uZGVuc2VkIiwgMTA0MSwgMTYwLCAxMDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi19Ci0KLQotNiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0Ci1TVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQotQ0FQVElPTiAiUHJpbnQgU2V0dXAiCi1GT05UIDgsICJIZWx2IgotewotIEdST1VQQk9YICJQcmludGVyIiwgMTA3MiwgNiwgMTAsIDE4MCwgNjUsIEJTX0dST1VQQk9YCi0gUkFESU9CVVRUT04gIiZEZWZhdWx0IFByaW50ZXIiLCAxMDU2LCAxNiwgMjAsIDgwLCAxMgotIExURVhUICJbbm9uZV0iLCAxMDg4LCAzNSwgMzUsIDEyMCwgOQotIFJBRElPQlVUVE9OICJTcGVjaWZpYyAmUHJpbnRlciIsIDEwNTcsIDE2LCA1MCwgODAsIDEyCi0gQ09NQk9CT1ggMTEzNiwgMzUsIDY1LCAxNDksIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCi0gREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJlNldHVwIiwgMTAyNCwgMjA2LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBHUk9VUEJPWCAiT3JpZW50YXRpb24iLCAxMDczLCA2LCA4NSwgMTAwLCA1MCwgQlNfR1JPVVBCT1gKLSBSQURJT0JVVFRPTiAiUG8mcnRyYWl0IiwgMTA1OCwgNTAsIDEwMCwgNDAsIDEyCi0gUkFESU9CVVRUT04gIiZMYW5kc2NhcGUiLCAxMDU5LCA1MCwgMTE1LCA0MCwgMTIKLSBJQ09OICJMQU5EU0NBUCIsIDEwOTcsIDEwLCA5NSwgMzIsIDMyCi0gSUNPTiAiUE9SVFJBSVQiLCAxMDk4LCAxMCwgOTUsIDMyLCAzMgotIEdST1VQQk9YICJQYXBlciIsIDEwNzQsIDEyMCwgODUsIDE4MCwgNTAsIEJTX0dST1VQQk9YCi0gTFRFWFQgIlNpJnplIiwgMTA4OSwgMTMwLCA5NSwgMzAsIDkKLSBMVEVYVCAiJlNvdXJjZSIsIDEwOTAsIDEzMCwgMTEwLCAzMCwgOQotIENPTUJPQk9YIDExMzcsIDE1NSwgOTUsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAotIENPTUJPQk9YIDExMzgsIDE1NSwgMTEwLCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKLX0KLQotCi03IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKLVNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCi1DQVBUSU9OICJGb250IgotRk9OVCA4LCAiSGVsdiIKLXsKLSBMVEVYVCAiRm9udDoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi19Ci0KLQotOCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMjAwCi1TVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQotQ0FQVElPTiAiQ29sb3IiCi1GT05UIDgsICJIZWx2IgotewotIExURVhUICImQmFzaWMgQ29sb3JzOiIsIDEwODgsIDYsIDYsIDQwLCA5Ci0gTFRFWFQgIiZDdXN0b20gQ29sb3JzOiIsIDEwODksIDYsIDEyNiwgNDAsIDkKLSBMVEVYVCAiQ29sb3J8U29sJmlkIiwgMTA5MCwgMTAwLCAxNDYsIDQwLCA5Ci0gTFRFWFQgIiZIdWU6IiwgMTA5MSwgMTUwLCAxMjYsIDQwLCA5Ci0gTFRFWFQgIiZTYXQ6IiwgMTA5MiwgMTUwLCAxNDYsIDQwLCA5Ci0gTFRFWFQgIiZMdW06IiwgMTA5MywgMTUwLCAxNjYsIDQwLCA5Ci0gTFRFWFQgIiZSZWQ6IiwgMTA5NCwgMTUwLCAxMjYsIDQwLCA5Ci0gTFRFWFQgIiZHcmVlbjoiLCAxMDk1LCAxNTAsIDE0NiwgNDAsIDkKLSBMVEVYVCAiQmwmdWU6IiwgMTA5NiwgMTUwLCAxNjYsIDQwLCA5Ci0gREVGUFVTSEJVVFRPTiAiT2siLCAxLCA2LCAxODIsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIiZBZGQgdG8gQ3VzdG9tIENvbG9ycyIsIDEwMjQsIDEyMCwgMTgyLCAxMDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICImRGVsZXRlIEN1c3RvbSBDb2xvcnMiLCAxMDI1LCA2LCAxNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgNzYsIDE4MiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLX0KLQotCi05IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAotU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKLUNBUFRJT04gIkZpbmQiCi1GT05UIDgsICJIZWx2IgotewotIExURVhUICJGaSZuZCBXaGF0OiIsIDEwODgsIDYsIDYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKLSBDSEVDS0JPWCAiTWF0Y2ggJldob2xlIFdvcmQgT25seSIsIDEwNDAsIDIwLCAzMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBDSEVDS0JPWCAiTWF0Y2ggJkNhc2UiLCAxMDQxLCAyMCwgNTAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gR1JPVVBCT1ggIkRpcmVjdGlvbiIsIDEwNzIsIDkwLCA0MCwgODAsIDQwLCBCU19HUk9VUEJPWAotIFJBRElPQlVUVE9OICImVXAiLCAxMDU2LCAxMDAsIDUwLCA1MCwgMTIKLSBSQURJT0JVVFRPTiAiJkRvd24iLCAxMDU3LCAxNTAsIDUwLCA1MCwgMTIKLSBERUZQVVNIQlVUVE9OICImRmluZCBOZXh0IiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotfQotCi0KLTEwIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMTQKLVNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCi1DQVBUSU9OICJSZXBsYWNlIgotRk9OVCA4LCAiSGVsdiIKLXsKLSBMVEVYVCAiRmkmbmQgV2hhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gTFRFWFQgIlJlJnBsYWNlIFdpdGg6IiwgMTA5MCwgNiwgMjYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5Ci0gQ0hFQ0tCT1ggIk1hdGNoICZXaG9sZSBXb3JkIE9ubHkiLCAxMDQwLCAyMCwgNDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gQ0hFQ0tCT1ggIk1hdGNoICZDYXNlIiwgMTA0MSwgMjAsIDYwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIERFRlBVU0hCVVRUT04gIiZGaW5kIE5leHQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIiZSZXBsYWNlIiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJSZXBsYWNlICZBbGwiLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi19Ci0KKyNpbmNsdWRlICJzeXNyZXNfRW4ucmMiCiAjZWxpZiAjTEFORyhEZSkKICNpbmNsdWRlICJzeXNyZXNfRGUucmMiCiAjZWxpZiAjTEFORyhObykKICNpbmNsdWRlICJzeXNyZXNfTm8ucmMiCisjZWxpZiAjTEFORyhFcykKKyNpbmNsdWRlICJzeXNyZXNfRXMucmMiCiAjZWxzZQogI2Vycm9yIExBTkcgbm90IHNldCB0byBhbiBpbXBsZW1lbnRlZCBsYW5ndWFnZS4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvcmMvc3lzcmVzX0RlLnJjIGIvcmMvc3lzcmVzX0RlLnJjCmluZGV4IDYyMDFhNjUuLjc3MGQwMTEgMTAwNjQ0Ci0tLSBhL3JjL3N5c3Jlc19EZS5yYworKysgYi9yYy9zeXNyZXNfRGUucmMKQEAgLTI3LDE5ICsyNywxOSBAQAogICAgICAgICBQVVNIQlVUVE9OICImTmVpbiIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogRU5ECiAKLVNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIxMywgMTc5CitTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMjMsIDIwMAogU1RZTEUgRFNfTE9DQUxFRElUIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJJbmZvIPxiZXIgJXMiCiBGT05UIDEwLCAiU3lzdGVtIgogewotIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODYsIDE2MCwgNDAsIDE0Ci0gQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMDUsIDEyMAotIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDE5MCwgMTEwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCi0gSUNPTiAiIiwgMTA4OCwgMTg1LCAxMCwgMTgsIDIwCisgREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMTgwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMTQwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAxMzAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIAogCi0zIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK09QRU5fRklMRSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAi1mZmbmVuIgogRk9OVCA4LCAiSGVsdiIKQEAgLTYxLDcgKzYxLDcgQEAKIH0KIAogCi00IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NBVkVfRklMRSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiU3BlaWNoZXJuIGFscyAuLi4iCiBGT05UIDgsICJIZWx2IgpAQCAtODMsNyArODMsNyBAQAogfQogCiAKLTUgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorUFJJTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkRydWNrZW4iCiBGT05UIDgsICJIZWx2IgpAQCAtMTA2LDcgKzEwNiw3IEBACiB9CiAKIAotNiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitQUklOVF9TRVRVUCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiRHJ1Y2tlcmVpbnJpY2h0dW5nIgogRk9OVCA4LCAiSGVsdiIKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAKLTcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorQ0hPT1NFX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkZvbnQiCiBGT05UIDgsICJIZWx2IgpAQCAtMTQ0LDcgKzE0NCw3IEBACiB9CiAKIAotOCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMjAwCitDSE9PU0VfQ09MT1IgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDIwMAogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkZhcmJlIgogRk9OVCA4LCAiSGVsdiIKQEAgLTE2NSw3ICsxNjUsNyBAQAogfQogCiAKLTkgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CitGSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiU3VjaGVuIgogRk9OVCA4LCAiSGVsdiIKQEAgLTE4Miw3ICsxODIsNyBAQAogfQogCiAKLTEwIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMTQKK1JFUExBQ0VfVEVYVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTE0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiRXJzZXR6ZW4iCiBGT05UIDgsICJIZWx2IgpkaWZmIC0tZ2l0IGEvcmMvc3lzcmVzX0VuLnJjIGIvcmMvc3lzcmVzX0VuLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MGI5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9yYy9zeXNyZXNfRW4ucmMKQEAgLTAsMCArMSwyMDAgQEAKK1NZU01FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCit7CisgTUVOVUlURU0gIiZSZXN0b3JlIiwgNjE3MjgKKyBNRU5VSVRFTSAiJk1vdmUiLCA2MTQ1NgorIE1FTlVJVEVNICImU2l6ZSIsIDYxNDQwCisgTUVOVUlURU0gIk1pJm5pbWl6ZSIsIDYxNDcyCisgTUVOVUlURU0gIk1hJnhpbWl6ZSIsIDYxNDg4CisgTUVOVUlURU0gU0VQQVJBVE9SCisgTUVOVUlURU0gIiZDbG9zZVx0QWx0LUY0IiwgNjE1MzYKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiJlN3aXRjaCB0byAuLi5cdEN0cmwtRXNjIiwgNjE3NDQKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiJkFib3V0IFdJTkUgLi4uIiwgNjE3NjEKK30KKworTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OAorU1RZTEUgRFNfU1lTTU9EQUwgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0JFR0lOCisgICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQorICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKKyAgICAgICAgUFVTSEJVVFRPTiAiJk9rIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKKyAgICAgICAgUFVTSEJVVFRPTiAiJkNhbmNlbCIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gIiZBYm9ydCIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImUmV0cnkiLCA0LCAxNjAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKKyAgICAgICAgUFVTSEJVVFRPTiAiJklnbm9yZSIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImWWVzIiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCisgICAgICAgIFBVU0hCVVRUT04gIiZObyIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorRU5ECisKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjAwCitTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkFib3V0ICVzIgorRk9OVCAxMCwgIlN5c3RlbSIKK3sKKyBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAxODAsIDQwLCAxNAorIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAxNDAKKyBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAyMDAsIDEzMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIElDT04gIiIsIDEwODgsIDE5NSwgMTAsIDE4LCAyMAorfQorCisKK09QRU5fRklMRSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiT3BlbiIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZpbGUgJk5hbWU6IiwgMTA5MCwgNiwgNiwgNzYsIDkKKyBFRElUVEVYVCAxMTUyLCA2LCAxNiwgOTAsIDEyLCBFU19BVVRPSFNDUk9MTCB8IEVTX09FTUNPTlZFUlQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCisgTElTVEJPWCAxMTIwLCA2LCAzMiwgOTAsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZEaXJlY3RvcmllczoiLCAtMSwgMTEwLCA2LCA5MiwgOQorIExURVhUICIiLCAxMDg4LCAxMTAsIDE4LCA5MiwgOSwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIExJU1RCT1ggMTEyMSwgMTEwLCAzMiwgOTIsIDY4LCBMQlNfU1RBTkRBUkQgfCBMQlNfT1dORVJEUkFXRklYRUQgfCBMQlNfSEFTU1RSSU5HUyB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkxpc3QgRmlsZXMgb2YgJlR5cGU6IiwgMTA4OSwgNiwgMTA0LCA5MCwgOQorIENPTUJPQk9YIDExMzYsIDYsIDExNCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiRHJpJnZlczoiLCAxMDkxLCAxMTAsIDEwNCwgOTIsIDkKKyBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiT3BlbiIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgMjA4LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImSGVscCIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZSZWFkIE9ubHkiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKK1NBVkVfRklMRSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiU2F2ZSBBcyAuLi4iCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJGaWxlICZOYW1lOiIsIDEwOTAsIDYsIDYsIDc2LCA5CisgRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAorIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImRGlyZWN0b3JpZXM6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJMaXN0IEZpbGVzIG9mICZUeXBlOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIkRyaSZ2ZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIlNhdmUgQXMiLCAxLCAyMDgsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJkhlbHAiLCAxMDM4LCAyMDgsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICImUmVhZCBPbmx5IiwgMTA0MCwgMjA4LCA2OCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCitQUklOVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiUHJpbnQiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJQcmludGVyOiIsIDEwODgsIDYsIDYsIDQwLCA5CisgTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKKyBHUk9VUEJPWCAiUHJpbnQgUmFuZ2UiLCAxMDcyLCA2LCAzMCwgMTYwLCA2NSwgQlNfR1JPVVBCT1gKKyBSQURJT0JVVFRPTiAiJkFsbCIsIDEwNTYsIDE2LCA0NSwgNjAsIDEyCisgUkFESU9CVVRUT04gIlMmZWxlY3Rpb24iLCAxMDU3LCAxNiwgNjAsIDYwLCAxMgorIFJBRElPQlVUVE9OICImUGFnZXMiLCAxMDU4LCAxNiwgNzUsIDYwLCAxMgorIERFRlBVU0hCVVRUT04gIlByaW50IiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZTZXR1cCIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgIiZGcm9tOiIsIDEwOTAsIDYwLCA4MCwgMzAsIDkKKyBMVEVYVCAiJlRvOiIsIDEwOTEsIDEyMCwgODAsIDMwLCA5CisgTFRFWFQgIlByaW50ICZRdWFsaXR5OiIsIDEwOTIsIDYsIDEwMCwgNzYsIDkKKyBDT01CT0JPWCAxMTM2LCA4MCwgMTAwLCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiUHJpbnQgdG8gRmkmbGUiLCAxMDQwLCAyMCwgMTAwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJDb25kZW5zZWQiLCAxMDQxLCAxNjAsIDEwMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCitQUklOVF9TRVRVUCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiUHJpbnQgU2V0dXAiCitGT05UIDgsICJIZWx2IgoreworIEdST1VQQk9YICJQcmludGVyIiwgMTA3MiwgNiwgMTAsIDE4MCwgNjUsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIiZEZWZhdWx0IFByaW50ZXIiLCAxMDU2LCAxNiwgMjAsIDgwLCAxMgorIExURVhUICJbbm9uZV0iLCAxMDg4LCAzNSwgMzUsIDEyMCwgOQorIFJBRElPQlVUVE9OICJTcGVjaWZpYyAmUHJpbnRlciIsIDEwNTcsIDE2LCA1MCwgODAsIDEyCisgQ09NQk9CT1ggMTEzNiwgMzUsIDY1LCAxNDksIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiT2siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiJlNldHVwIiwgMTAyNCwgMjA2LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBHUk9VUEJPWCAiT3JpZW50YXRpb24iLCAxMDczLCA2LCA4NSwgMTAwLCA1MCwgQlNfR1JPVVBCT1gKKyBSQURJT0JVVFRPTiAiUG8mcnRyYWl0IiwgMTA1OCwgNTAsIDEwMCwgNDAsIDEyCisgUkFESU9CVVRUT04gIiZMYW5kc2NhcGUiLCAxMDU5LCA1MCwgMTE1LCA0MCwgMTIKKyBJQ09OICJMQU5EU0NBUCIsIDEwOTcsIDEwLCA5NSwgMzIsIDMyCisgSUNPTiAiUE9SVFJBSVQiLCAxMDk4LCAxMCwgOTUsIDMyLCAzMgorIEdST1VQQk9YICJQYXBlciIsIDEwNzQsIDEyMCwgODUsIDE4MCwgNTAsIEJTX0dST1VQQk9YCisgTFRFWFQgIlNpJnplIiwgMTA4OSwgMTMwLCA5NSwgMzAsIDkKKyBMVEVYVCAiJlNvdXJjZSIsIDEwOTAsIDEzMCwgMTEwLCAzMCwgOQorIENPTUJPQk9YIDExMzcsIDE1NSwgOTUsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIENPTUJPQk9YIDExMzgsIDE1NSwgMTEwLCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKK30KKworCitDSE9PU0VfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiRm9udCIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZvbnQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKK0NIT09TRV9DT0xPUiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMjAwCitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiQ29sb3IiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICImQmFzaWMgQ29sb3JzOiIsIDEwODgsIDYsIDYsIDQwLCA5CisgTFRFWFQgIiZDdXN0b20gQ29sb3JzOiIsIDEwODksIDYsIDEyNiwgNDAsIDkKKyBMVEVYVCAiQ29sb3J8U29sJmlkIiwgMTA5MCwgMTAwLCAxNDYsIDQwLCA5CisgTFRFWFQgIiZIdWU6IiwgMTA5MSwgMTUwLCAxMjYsIDQwLCA5CisgTFRFWFQgIiZTYXQ6IiwgMTA5MiwgMTUwLCAxNDYsIDQwLCA5CisgTFRFWFQgIiZMdW06IiwgMTA5MywgMTUwLCAxNjYsIDQwLCA5CisgTFRFWFQgIiZSZWQ6IiwgMTA5NCwgMTUwLCAxMjYsIDQwLCA5CisgTFRFWFQgIiZHcmVlbjoiLCAxMDk1LCAxNTAsIDE0NiwgNDAsIDkKKyBMVEVYVCAiQmwmdWU6IiwgMTA5NiwgMTUwLCAxNjYsIDQwLCA5CisgREVGUFVTSEJVVFRPTiAiT2siLCAxLCA2LCAxODIsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZBZGQgdG8gQ3VzdG9tIENvbG9ycyIsIDEwMjQsIDEyMCwgMTgyLCAxMDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImRGVsZXRlIEN1c3RvbSBDb2xvcnMiLCAxMDI1LCA2LCAxNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsIiwgMiwgNzYsIDE4MiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCitGSU5EX1RFWFQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDg0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiRmluZCIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkZpJm5kIFdoYXQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIENIRUNLQk9YICJNYXRjaCAmV2hvbGUgV29yZCBPbmx5IiwgMTA0MCwgMjAsIDMwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJNYXRjaCAmQ2FzZSIsIDEwNDEsIDIwLCA1MCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBHUk9VUEJPWCAiRGlyZWN0aW9uIiwgMTA3MiwgOTAsIDQwLCA4MCwgNDAsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIiZVcCIsIDEwNTYsIDEwMCwgNTAsIDUwLCAxMgorIFJBRElPQlVUVE9OICImRG93biIsIDEwNTcsIDE1MCwgNTAsIDUwLCAxMgorIERFRlBVU0hCVVRUT04gIiZGaW5kIE5leHQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworUkVQTEFDRV9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMTQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJSZXBsYWNlIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiRmkmbmQgV2hhdDoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgTFRFWFQgIlJlJnBsYWNlIFdpdGg6IiwgMTA5MCwgNiwgMjYsIDQwLCA5CisgTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5CisgQ0hFQ0tCT1ggIk1hdGNoICZXaG9sZSBXb3JkIE9ubHkiLCAxMDQwLCAyMCwgNDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIk1hdGNoICZDYXNlIiwgMTA0MSwgMjAsIDYwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIiZGaW5kIE5leHQiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZSZXBsYWNlIiwgMTAyNCwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJSZXBsYWNlICZBbGwiLCAxMDI1LCAyMDYsIDQ0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbCIsIDIsIDIwNiwgNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CmRpZmYgLS1naXQgYS9yYy9zeXNyZXNfRXMucmMgYi9yYy9zeXNyZXNfRXMucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3MmFlOQotLS0gL2Rldi9udWxsCisrKyBiL3JjL3N5c3Jlc19Fcy5yYwpAQCAtMCwwICsxLDIwMiBAQAorCitTWVNNRU5VIE1FTlUgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRQoreworIE1FTlVJVEVNICImUmVzdGF1cmVyIiwgNjE3MjgKKyBNRU5VSVRFTSAiJk1vdmVyIiwgNjE0NTYKKyBNRU5VSVRFTSAiJlRhbWHxbyIsIDYxNDQwCisgTUVOVUlURU0gIk1pJm5pbWl6YXIiLCA2MTQ3MgorIE1FTlVJVEVNICJNYSZ4aW1pemFyIiwgNjE0ODgKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiJkNlcnJhclx0QWx0LUY0IiwgNjE1MzYKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiQ2FtJmJpYXIgYSAuLi5cdEN0cmwtRXNjIiwgNjE3NDQKKyBNRU5VSVRFTSBTRVBBUkFUT1IKKyBNRU5VSVRFTSAiJkFjZXJjYSBkZSBXSU5FLi4uIiwgNjE3NjEKK30KKworTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OAorU1RZTEUgRFNfU1lTTU9EQUwgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0JFR0lOCisgICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQorICAgICAgICBMVEVYVCAiIiwgMTAwLCAzMiwgNCwgMTc2LCA0OCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKKyAgICAgICAgUFVTSEJVVFRPTiAiJkFjZXB0YXIiLCAxLCAxNiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImQ2FuY2VsYXIiLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImQWJvcnRhciIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImUmVpbnRlbnRhciIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImSWdub3JhciIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAorICAgICAgICBQVVNIQlVUVE9OICImU+0iLCA2LCAyNTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKKyAgICAgICAgUFVTSEJVVFRPTiAiJk5vIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCitFTkQKKworU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NUWUxFIERTX0xPQ0FMRURJVCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiQWNlcmNhIGRlICVzIgorRk9OVCAxMCwgIlN5c3RlbSIKK3sKKyBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgMSwgOTEsIDE4MCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDE0MAorIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgSUNPTiAiIiwgMTA4OCwgMTk1LCAxMCwgMTgsIDIwCit9CisKKworT1BFTl9GSUxFIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJBYnJpciIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIk5vbWJyZSBkZSAmYXJjaGl2bzoiLCAxMDkwLCA2LCA2LCA3NiwgOQorIEVESVRURVhUIDExNTIsIDYsIDE2LCA5MCwgMTIsIEVTX0FVVE9IU0NST0xMIHwgRVNfT0VNQ09OVkVSVCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKKyBMSVNUQk9YIDExMjAsIDYsIDMyLCA5MCwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJkRpcmVjdG9yaW9zOiIsIC0xLCAxMTAsIDYsIDkyLCA5CisgTFRFWFQgIiIsIDEwODgsIDExMCwgMTgsIDkyLCA5LCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgTElTVEJPWCAxMTIxLCAxMTAsIDMyLCA5MiwgNjgsIExCU19TVEFOREFSRCB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX0RJU0FCTEVOT1NDUk9MTCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAiJk1vc3RyYXIgYXJjaGl2b3MgZGUgdGlwbzoiLCAxMDg5LCA2LCAxMDQsIDkwLCA5CisgQ09NQk9CT1ggMTEzNiwgNiwgMTE0LCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICJVJm5pZGFkZXM6IiwgMTA5MSwgMTEwLCAxMDQsIDkyLCA5CisgQ09NQk9CT1ggMTEzNywgMTEwLCAxMTQsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIkFicmlyIiwgMSwgMjA4LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDIwOCwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQSZ5dWRhIiwgMTAzOCwgMjA4LCA0NiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiJlNvbG8gbGVjdHVyYSIsIDEwNDAsIDIwOCwgNjgsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworU0FWRV9GSUxFIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICImR3VhcmRhciBjb21vLi4uIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiTm9tYnJlIGRlICZhcmNoaXZvOiIsIDEwOTAsIDYsIDYsIDc2LCA5CisgRURJVFRFWFQgMTE1MiwgNiwgMTYsIDkwLCAxMiwgRVNfQVVUT0hTQ1JPTEwgfCBFU19PRU1DT05WRVJUIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAorIExJU1RCT1ggMTEyMCwgNiwgMzIsIDkwLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImRGlyZWN0b3Jpb3M6IiwgLTEsIDExMCwgNiwgOTIsIDkKKyBMVEVYVCAiIiwgMTA4OCwgMTEwLCAxOCwgOTIsIDksIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBMSVNUQk9YIDExMjEsIDExMCwgMzIsIDkyLCA2OCwgTEJTX1NUQU5EQVJEIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfVEFCU1RPUAorIExURVhUICImTW9zdHJhciBhcmNoaXZvcyBkZSB0aXBvOiIsIDEwODksIDYsIDEwNCwgOTAsIDkKKyBDT01CT0JPWCAxMTM2LCA2LCAxMTQsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgTFRFWFQgIlUmbmlkYWRlczoiLCAxMDkxLCAxMTAsIDEwNCwgOTIsIDkKKyBDT01CT0JPWCAxMTM3LCAxMTAsIDExNCwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiJkd1YXJkYXIgY29tbyIsIDEsIDIwOCwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCAyLCAyMDgsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkEmeXVkYSIsIDEwMzgsIDIwOCwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZTb2xvIGxlY3R1cmEiLCAxMDQwLCAyMDgsIDY4LCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCisKK1BSSU5UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJJbXByaW1pciIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkltcHJlc29yYToiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICJDYW1wbyBkZSBpbXByZXNp824iLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgR1JPVVBCT1ggIiIsIDEwNzIsIDYsIDMwLCAxNjAsIDY1LCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICImVG9kbyIsIDEwNTYsIDE2LCA0NSwgNjAsIDEyCisgUkFESU9CVVRUT04gIlNlbGVjYyZp824iLCAxMDU3LCAxNiwgNjAsIDYwLCAxMgorIFJBRElPQlVUVE9OICImUGFnaW5hcyIsIDEwNTgsIDE2LCA3NSwgNjAsIDEyCisgREVGUFVTSEJVVFRPTiAiSW1wcmltaXIiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImU2V0dXAiLCAxMDI0LCAyMDYsIDQ2LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImRGVzZGU6IiwgMTA5MCwgNjAsIDgwLCAzMCwgOQorIExURVhUICImSGFzdGE6IiwgMTA5MSwgMTIwLCA4MCwgMzAsIDkKKyBMVEVYVCAiQ2FsaWRhZCBkZSBpbXByZSZzafNuOiIsIDEwOTIsIDYsIDEwMCwgNzYsIDkKKyBDT01CT0JPWCAxMTM2LCA4MCwgMTAwLCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyBDSEVDS0JPWCAiSW1wcmkmbWlyIGVuIHVuIGFyY2hpdm8iLCAxMDQwLCAyMCwgMTAwLCA1MCwgMTIsIEJTX0FVVE9DSEVDS0JPWCB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENIRUNLQk9YICJDb25kZW5zZWQiLCAxMDQxLCAxNjAsIDEwMCwgNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCitQUklOVF9TRVRVUCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiQ29uZmlndXJhY2nzbiBkZSBpbXByZXNp824iCitGT05UIDgsICJIZWx2IgoreworIEdST1VQQk9YICJJbXByZXNvcmE6IiwgMTA3MiwgNiwgMTAsIDE4MCwgNjUsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIlByZSZkZXRlcm1pbmFkYSBkZWwgc2lzdGVtYSIsIDEwNTYsIDE2LCAyMCwgODAsIDEyCisgTFRFWFQgIltub25lXSIsIDEwODgsIDM1LCAzNSwgMTIwLCA5CisgUkFESU9CVVRUT04gIkltcHJlc29yYSAmZXNwZWNtZmljYToiLCAxMDU3LCAxNiwgNTAsIDgwLCAxMgorIENPTUJPQk9YIDExMzYsIDM1LCA2NSwgMTQ5LCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImQ29uZmlndXJhciIsIDEwMjQsIDIwNiwgNDYsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIk9yaWVudGFjafNuIiwgMTA3MywgNiwgODUsIDEwMCwgNTAsIEJTX0dST1VQQk9YCisgUkFESU9CVVRUT04gIiZWZXJ0aWNhbCIsIDEwNTgsIDUwLCAxMDAsIDQwLCAxMgorIFJBRElPQlVUVE9OICImSG9yaXpvbnRhbCIsIDEwNTksIDUwLCAxMTUsIDQwLCAxMgorIElDT04gIkxBTkRTQ0FQIiwgMTA5NywgMTAsIDk1LCAzMiwgMzIKKyBJQ09OICJQT1JUUkFJVCIsIDEwOTgsIDEwLCA5NSwgMzIsIDMyCisgR1JPVVBCT1ggIlBhcGVsIiwgMTA3NCwgMTIwLCA4NSwgMTgwLCA1MCwgQlNfR1JPVVBCT1gKKyBMVEVYVCAiJlRhbWHxbyIsIDEwODksIDEzMCwgOTUsIDMwLCA5CisgTFRFWFQgIk8mcmlnZW46IiwgMTA5MCwgMTMwLCAxMTAsIDMwLCA5CisgQ09NQk9CT1ggMTEzNywgMTU1LCA5NSwgOTIsIDY4LCBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBDQlNfSEFTU1RSSU5HUyB8IFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCisgQ09NQk9CT1ggMTEzOCwgMTU1LCAxMTAsIDkyLCA2OCwgQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgQ0JTX0hBU1NUUklOR1MgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorfQorCisKK0NIT09TRV9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJGdWVudGUiCitGT05UIDgsICJIZWx2IgoreworIExURVhUICJGdWVudGU6IiwgMTA4OCwgNiwgNiwgNDAsIDkKKyBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQorIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkNhbmNlbGFyIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKK30KKworCitDSE9PU0VfQ09MT1IgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDIwMAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkNvbG9yIgorRk9OVCA4LCAiSGVsdiIKK3sKKyBMVEVYVCAiQ29sb3JlcyAmYmFzaWNvczoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICJDb2xvcmVzIHBlcnNvbiZhbGl6YWRvczoiLCAxMDg5LCA2LCAxMjYsIDQwLCA5CisgTFRFWFQgIkNvbG9yfFPzbCZpZG8iLCAxMDkwLCAxMDAsIDE0NiwgNDAsIDkKKyBMVEVYVCAiJkh1ZToiLCAxMDkxLCAxNTAsIDEyNiwgNDAsIDkKKyBMVEVYVCAiJlNhdDoiLCAxMDkyLCAxNTAsIDE0NiwgNDAsIDkKKyBMVEVYVCAiJkx1bToiLCAxMDkzLCAxNTAsIDE2NiwgNDAsIDkKKyBMVEVYVCAiJlJvam86IiwgMTA5NCwgMTUwLCAxMjYsIDQwLCA5CisgTFRFWFQgIiZWZXJkZToiLCAxMDk1LCAxNTAsIDE0NiwgNDAsIDkKKyBMVEVYVCAiQSZ6dWw6IiwgMTA5NiwgMTUwLCAxNjYsIDQwLCA5CisgREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIDEsIDYsIDE4MiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQWdyZWdhciBhIGxvcyAmY29sb3JlcyBwZXJzb25hbGl6YWRvcyIsIDEwMjQsIDEyMCwgMTgyLCAxMDAsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJCb3JyYXIgY29sb3JlcyBwZXJzb25hbGl6YWRvcyIsIDEwMjUsIDYsIDE2NCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDc2LCAxODIsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworRklORF9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAorU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKK0NBUFRJT04gIkJ1c2NhciIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkJ1c2NhcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgQ0hFQ0tCT1ggIiZDb21wYXJhciBwYWxhYnJhIGVudGVyYSBzb2xhbWVudGUiLCAxMDQwLCAyMCwgMzAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZNYXn6c2N1bGFzL21pbvpzY3VsYXMiLCAxMDQxLCAyMCwgNTAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgR1JPVVBCT1ggIkRpcmVjY2nzbiIsIDEwNzIsIDkwLCA0MCwgODAsIDQwLCBCU19HUk9VUEJPWAorIFJBRElPQlVUVE9OICJBJnJyaWJhIiwgMTA1NiwgMTAwLCA1MCwgNTAsIDEyCisgUkFESU9CVVRUT04gIiZBYmFqbyIsIDEwNTcsIDE1MCwgNTAsIDUwLCAxMgorIERFRlBVU0hCVVRUT04gIkJ1c2NhciAmc2lndWllbnRlIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCit9CisKKworUkVQTEFDRV9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMTQKK1NUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJSJmVlbXBsYXphciIKK0ZPTlQgOCwgIkhlbHYiCit7CisgTFRFWFQgIkJ1c2NhcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQorIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5CisgTFRFWFQgIlJlJnBsYWNlIFdpdGg6IiwgMTA5MCwgNiwgMjYsIDQwLCA5CisgTFRFWFQgIiIsIDEwOTEsIDYwLCAyNiwgMTUwLCA5CisgQ0hFQ0tCT1ggIiZDb21wYXJhciBwYWxhYnJhIGVudGVyYSBzb2xhbWVudGUiLCAxMDQwLCAyMCwgNDAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgQ0hFQ0tCT1ggIiZNYXn6c2N1bGFzL21pbvpzY3VsYXMiLCAxMDQxLCAyMCwgNjAsIDUwLCAxMiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgREVGUFVTSEJVVFRPTiAiUmVlbXBsYXphciAmc2lndWllbnRlIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICImUmVlbXBsYXphciIsIDEwMjQsIDIwNiwgMjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiUmVlbXBsYXphciAmdG9kbyIsIDEwMjUsIDIwNiwgNDQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCAyLCAyMDYsIDY0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorfQorCmRpZmYgLS1naXQgYS9yYy9zeXNyZXNfTm8ucmMgYi9yYy9zeXNyZXNfTm8ucmMKaW5kZXggMzM4N2VmMS4uZjdjYTYyNSAxMDA2NDQKLS0tIGEvcmMvc3lzcmVzX05vLnJjCisrKyBiL3JjL3N5c3Jlc19Oby5yYwpAQCAtMjcsMTkgKzI3LDE5IEBACiAgICAgICAgIFBVU0hCVVRUT04gIiZOZWkiLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKIEVORAogCi1TSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMTMsIDE3OQorU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKIFNUWUxFIERTX0xPQ0FMRURJVCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiT20gJXMiCiBGT05UIDEwLCAiU3lzdGVtIgogewotIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODYsIDE2MCwgNDAsIDE0Ci0gQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMDUsIDEyMAotIExURVhUICJUZWtzdCIsIDEwMCwgMTEsIDQwLCAxOTAsIDExMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAotIElDT04gIiIsIDEwODgsIDE4NSwgMTAsIDE4LCAyMAorIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgOTEsIDE4MCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDE0MAorIExURVhUICJUZWtzdCIsIDEwMCwgMTEsIDQwLCAyMDAsIDEzMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIElDT04gIiIsIDEwODgsIDE5NSwgMTAsIDE4LCAyMAogfQogCiAKLTMgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNzUsIDEzNAorT1BFTl9GSUxFIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICLFcG5lIgogRk9OVCA4LCAiSGVsdiIKQEAgLTYxLDcgKzYxLDcgQEAKIH0KIAogCi00IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjc1LCAxMzQKK1NBVkVfRklMRSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI3NSwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiTGFncmUgc29tIC4uLiIKIEZPTlQgOCwgIkhlbHYiCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIAotNSBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitQUklOVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiU2tyaXYiCiBGT05UIDgsICJIZWx2IgpAQCAtMTA2LDcgKzEwNiw3IEBACiB9CiAKIAotNiBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitQUklOVF9TRVRVUCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiU2tyaXZlb3Bwc2V0dCIKIEZPTlQgOCwgIkhlbHYiCkBAIC0xMzIsNyArMTMyLDcgQEAKIH0KIAogCi03IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK0NIT09TRV9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJGb250IgogRk9OVCA4LCAiSGVsdiIKQEAgLTE0NCw3ICsxNDQsNyBAQAogfQogCiAKLTggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDIwMAorQ0hPT1NFX0NPTE9SIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAyMDAKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJGYXJnZSIKIEZPTlQgOCwgIkhlbHYiCkBAIC0xNjUsNyArMTY1LDcgQEAKIH0KIAogCi05IERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAorRklORF9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCA4NAogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkZpbm4iCiBGT05UIDgsICJIZWx2IgpAQCAtMTgyLDcgKzE4Miw3IEBACiB9CiAKIAotMTAgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDExNAorUkVQTEFDRV9URVhUIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMTQKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJCeXR0IgogRk9OVCA4LCAiSGVsdiIKZGlmZiAtLWdpdCBhL3JjL3dpbmVyYy5jIGIvcmMvd2luZXJjLmMKaW5kZXggYzg4MzJjZi4uMTRiMGM4NSAxMDA2NDQKLS0tIGEvcmMvd2luZXJjLmMKKysrIGIvcmMvd2luZXJjLmMKQEAgLTUxMSw2MiArNTExLDg1IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotI2RlZmluZSBJU0NPTlNUQU5UCWNvbnN0YW50PyJjb25zdCAiOiIiCisjZGVmaW5lIElTQ09OU1RBTlQJKGNvbnN0YW50ID8gImNvbnN0ICIgOiAiIikKKwogLyogY3JlYXRlIHRoZSBmaW5hbCBvdXRwdXQgKi8KIHZvaWQgY3JlYXRlX291dHB1dChnZW5fcmVzKiB0b3ApCiB7Ci0JZ2VuX3JlcyAqaXQ7Ci0JZnByaW50ZihoZWFkZXIsIi8qXHRcdCVzXG4gKiBUaGlzIEZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuIgotCQkiIERvIG5vdCBlZGl0XG4gKi9cbiNpbmNsdWRlIFwicmVzb3VyY2UuaFwiXG4iLGhuYW1lKTsKLQlmcHJpbnRmKGNvZGUsIi8qXHRcdCVzXG4gKiBUaGlzIEZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuIgotCQkiIERvIG5vdCBlZGl0XG4gKi9cbiIsc25hbWUpOwotCS8qIGRlY2xhcmUgdGhlIHJlc291cmNlcyAqLwotCWZvcihpdD10b3A7aXQ7aXQ9aXQtPm5leHQpCi0JCWZwcmludGYoaGVhZGVyLCJleHRlcm4gJXN1bnNpZ25lZCBjaGFyICVzW107XG4iLElTQ09OU1RBTlQsCi0JCWdldF9yZXNvdXJjZV9uYW1lKGl0KSk7Ci0JZnByaW50ZihoZWFkZXIsImV4dGVybiAlc3N0cnVjdCBSZXNvdXJjZVRhYmxlICVzVGFibGVbXTtcbiIsCi0JCUlTQ09OU1RBTlQscHJlZml4KTsKKyAgICBnZW5fcmVzICppdDsKIAotCWZwcmludGYoY29kZSwiI2luY2x1ZGUgXCJ3aW5kb3dzLmhcIlxuI2luY2x1ZGUgXCIlc1wiXG4iLGhuYW1lKTsKIAotCS8qIHByaW50IHRoZSByZXNvdXJjZSB0YWJsZSAoMCB0ZXJtaW5hdGVkKSAqLwotCWZwcmludGYoY29kZSwiXG4lc3N0cnVjdCBSZXNvdXJjZVRhYmxlICVzVGFibGVbXT17XG4iLElTQ09OU1RBTlQscHJlZml4KTsKLQlmb3IoaXQ9dG9wO2l0O2l0PWl0LT5uZXh0KQotCXsJaW50IHR5cGU7Ci0JCXN3aXRjaChpdC0+dHlwZSkKLQkJe2Nhc2UgYWNjOnR5cGU9TkVfUlNDVFlQRV9BQ0NFTEVSQVRPUjticmVhazsKLQkJIGNhc2UgYm1wOnR5cGU9TkVfUlNDVFlQRV9CSVRNQVA7YnJlYWs7Ci0JCSBjYXNlIGN1cjp0eXBlPU5FX1JTQ1RZUEVfQ1VSU09SO2JyZWFrOwotCQkgY2FzZSBkbGc6dHlwZT1ORV9SU0NUWVBFX0RJQUxPRzticmVhazsKLQkJIGNhc2UgZm50OnR5cGU9TkVfUlNDVFlQRV9GT05UO2JyZWFrOwotCQkgY2FzZSBpY286dHlwZT1ORV9SU0NUWVBFX0lDT047YnJlYWs7Ci0JCSBjYXNlIG1lbjp0eXBlPU5FX1JTQ1RZUEVfTUVOVTticmVhazsKLQkJIGNhc2UgcmR0OnR5cGU9TkVfUlNDVFlQRV9SQ0RBVEE7YnJlYWs7Ci0JCSBjYXNlIHN0cjp0eXBlPU5FX1JTQ1RZUEVfU1RSSU5HO2JyZWFrOwotCQkgZGVmYXVsdDpmcHJpbnRmKHN0ZGVyciwiVW5rbm93biByZXN0eXBlXG4iKTt0eXBlPS0xO2JyZWFrOwotCQl9Ci0JCWlmKGl0LT5uX3R5cGUpCi0JCQlmcHJpbnRmKGNvZGUsInswLCVkLFwiJXNcIiwlcywlZH0sXG4iLAotCQkJdHlwZSxpdC0+bi5zX25hbWUsZ2V0X3Jlc291cmNlX25hbWUoaXQpLGl0LT5zaXplKTsKLQkJZWxzZQotCQkJZnByaW50Zihjb2RlLCJ7JWQsJWQsXCJAJWRcIiwlcywlZH0sXG4iLAotCQkJaXQtPm4uaV9uYW1lLHR5cGUsaXQtPm4uaV9uYW1lLGdldF9yZXNvdXJjZV9uYW1lKGl0KSwKLQkJCWl0LT5zaXplKTsKLQl9Ci0JZnByaW50Zihjb2RlLCJ7MCwwLDAsMH19O1xuXG4iKTsKKyAgICBmcHJpbnRmKCBoZWFkZXIsICIvKiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgIiAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gRG8gbm90IGVkaXQhXG4iCisgICAgICAgICAgICAgICAgICAgICAiICovXG5cbiIKKyAgICAgICAgICAgICAgICAgICAgICJzdHJ1Y3QgcmVzb3VyY2VcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGludCBpZCwgdHlwZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICIgICAgY2hhciAqbmFtZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICIgICAgdW5zaWduZWQgY2hhciAqYnl0ZXM7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIHVuc2lnbmVkIGludCBzaXplO1xuIgorICAgICAgICAgICAgICAgICAgICAgIn07XG5cbiIsIGhuYW1lICk7CiAKLQkvKiBwcmludCB0aGUgcmVzb3VyY2VzICovCi0JZm9yKGl0PXRvcDtpdDtpdD1pdC0+bmV4dCkKLQl7CWludCBpOwotCQlmcHJpbnRmKGNvZGUsIiVzdW5zaWduZWQgY2hhciAlc1tdPXtcbiIsCi0JCQlJU0NPTlNUQU5ULGdldF9yZXNvdXJjZV9uYW1lKGl0KSk7Ci0JCWZvcihpPTA7aTxpdC0+c2l6ZS0xO2krKykKLQkJewotCQkJZnByaW50Zihjb2RlLCIlIzR4LCIsaXQtPnJlc1tpXSk7Ci0JCQlpZigoaSY3KT09NylmcHV0YygnXG4nLGNvZGUpOworICAgIC8qIERlY2xhcmUgdGhlIHJlc291cmNlcyAqLworCisgICAgZm9yIChpdD10b3A7aXQ7aXQ9aXQtPm5leHQpCisgICAgICAgIGZwcmludGYoIGhlYWRlciwiZXh0ZXJuICVzc3RydWN0IHJlc291cmNlICVzO1xuIiwKKyAgICAgICAgICAgICAgICAgSVNDT05TVEFOVCwgZ2V0X3Jlc291cmNlX25hbWUoaXQpICk7CisgICAgZnByaW50ZiggaGVhZGVyLCJcbmV4dGVybiAlc3N0cnVjdCByZXNvdXJjZSAqICVzVGFibGVbXTtcbiIsCisgICAgICAgICAgICAgSVNDT05TVEFOVCwgcHJlZml4ICk7CisKKyAgICAvKiBQcmludCB0aGUgcmVzb3VyY2VzIGJ5dGVzICovCisKKyAgICBmcHJpbnRmKCBjb2RlLCAiLyogJXNcbiIKKyAgICAgICAgICAgICAgICAgICAiICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiBEbyBub3QgZWRpdCFcbiIKKyAgICAgICAgICAgICAgICAgICAiICovXG5cbiIKKyAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgXCIlc1wiXG4iLCBzbmFtZSwgaG5hbWUgKTsKKyAgICBmb3IoaXQ9dG9wO2l0O2l0PWl0LT5uZXh0KQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZwcmludGYoIGNvZGUsICJzdGF0aWMgJXN1bnNpZ25lZCBjaGFyICVzX19ieXRlc1tdID0ge1xuIiwKKyAgICAgICAgICAgICAgICAgSVNDT05TVEFOVCwgZ2V0X3Jlc291cmNlX25hbWUoaXQpICk7CisgICAgICAgIGZvciAoaT0wO2k8aXQtPnNpemUtMTtpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoY29kZSwiJSM0eCwiLGl0LT5yZXNbaV0pOworICAgICAgICAgICAgaWYgKChpJjcpPT03KWZwdXRjKCdcbicsY29kZSk7CiAgICAgICAgIH0KLQkJZnByaW50Zihjb2RlLCIlIzR4fTtcbiIsaXQtPnJlc1tpXSk7Ci0JfQorICAgICAgICBmcHJpbnRmKGNvZGUsIiUjNHh9O1xuXG4iLGl0LT5yZXNbaV0pOworICAgIH0KKworICAgIC8qIFByaW50IHRoZSByZXNvdXJjZXMgKi8KKyAgICBmb3IgKGl0PXRvcDtpdDtpdD1pdC0+bmV4dCkKKyAgICB7CisgICAgICAgIGludCB0eXBlOworICAgICAgICBzd2l0Y2goaXQtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBhY2M6dHlwZT1ORV9SU0NUWVBFX0FDQ0VMRVJBVE9SO2JyZWFrOworICAgICAgICBjYXNlIGJtcDp0eXBlPU5FX1JTQ1RZUEVfQklUTUFQO2JyZWFrOworICAgICAgICBjYXNlIGN1cjp0eXBlPU5FX1JTQ1RZUEVfQ1VSU09SO2JyZWFrOworICAgICAgICBjYXNlIGRsZzp0eXBlPU5FX1JTQ1RZUEVfRElBTE9HO2JyZWFrOworICAgICAgICBjYXNlIGZudDp0eXBlPU5FX1JTQ1RZUEVfRk9OVDticmVhazsKKyAgICAgICAgY2FzZSBpY286dHlwZT1ORV9SU0NUWVBFX0lDT047YnJlYWs7CisgICAgICAgIGNhc2UgbWVuOnR5cGU9TkVfUlNDVFlQRV9NRU5VO2JyZWFrOworICAgICAgICBjYXNlIHJkdDp0eXBlPU5FX1JTQ1RZUEVfUkNEQVRBO2JyZWFrOworICAgICAgICBjYXNlIHN0cjp0eXBlPU5FX1JTQ1RZUEVfU1RSSU5HO2JyZWFrOworICAgICAgICBkZWZhdWx0OmZwcmludGYoc3RkZXJyLCJVbmtub3duIHJlc3R5cGVcbiIpO3R5cGU9LTE7YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoaXQtPm5fdHlwZSkKKyAgICAgICAgICAgIGZwcmludGYoY29kZSwiJXNzdHJ1Y3QgcmVzb3VyY2UgJXMgPSB7MCwlZCxcIiVzXCIsJXNfX2J5dGVzLCVkfTtcbiIsCisgICAgICAgICAgICAgICAgICAgIElTQ09OU1RBTlQsIGdldF9yZXNvdXJjZV9uYW1lKGl0KSwgdHlwZSwgaXQtPm4uc19uYW1lLAorICAgICAgICAgICAgICAgICAgICBnZXRfcmVzb3VyY2VfbmFtZShpdCksIGl0LT5zaXplICk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYoY29kZSwiJXNzdHJ1Y3QgcmVzb3VyY2UgJXMgPSB7JWQsJWQsXCJAJWRcIiwlc19fYnl0ZXMsJWR9O1xuIiwKKyAgICAgICAgICAgICAgICAgICAgSVNDT05TVEFOVCwgZ2V0X3Jlc291cmNlX25hbWUoaXQpLCBpdC0+bi5pX25hbWUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgIGl0LT5uLmlfbmFtZSwgZ2V0X3Jlc291cmNlX25hbWUoaXQpLCBpdC0+c2l6ZSApOworICAgIH0KKworICAgIC8qIFByaW50IHRoZSByZXNvdXJjZSB0YWJsZSAoTlVMTCB0ZXJtaW5hdGVkKSAqLworCisgICAgZnByaW50Zihjb2RlLCJcbiVzc3RydWN0IHJlc291cmNlICogJXNUYWJsZVtdID0ge1xuIiwgSVNDT05TVEFOVCwgcHJlZml4KTsKKyAgICBmb3IgKGl0PXRvcDtpdDtpdD1pdC0+bmV4dCkKKyAgICAgICAgZnByaW50ZiggY29kZSwgIiAgJiVzLFxuIiwgZ2V0X3Jlc291cmNlX25hbWUoaXQpICk7CisgICAgZnByaW50ZiggY29kZSwgIiAgMFxufTtcbiIgKTsKIH0KIAogdm9pZCBtYWtlX2ZvbnQoKQpkaWZmIC0tZ2l0IGEvdG9vbGtpdC9NYWtlZmlsZS5pbiBiL3Rvb2xraXQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5Y2IxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xraXQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxNCBAQAorVE9QU1JDID0gQHRvcF9zcmNkaXJACitNT0RVTEUgPSB0b29sa2l0CisKK0NfU1JDUyA9IFwKKwlhcmNoLmMgXAorCWhlYXAuYyBcCisJc3VwLmMgXAorCXdpbm1haW4uYworCithbGw6ICQoTU9EVUxFKS5vCisKK0BNQUtFX1JVTEVTQAorCisjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvdG9vbGtpdC9oZWxsby5jIGIvdG9vbGtpdC9oZWxsby5jCmluZGV4IGQ5ZDk5NzguLjYwNGYxOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xraXQvaGVsbG8uYworKysgYi90b29sa2l0L2hlbGxvLmMKQEAgLTEsNCArMSwzIEBACi0vKiAjaW5jbHVkZSAiYXV0b2NvbmYuaCIgKi8KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKIHZvaWQgV3JpdGUgKEhEQyBkYywgaW50IHgsIGludCB5LCBjaGFyICpzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuaW4gYi90b29scy9NYWtlZmlsZS5pbgppbmRleCAwMWM0YjEwLi41MDdmNjkxIDEwMDY0NAotLS0gYS90b29scy9NYWtlZmlsZS5pbgorKysgYi90b29scy9NYWtlZmlsZS5pbgpAQCAtMSwzMSArMSwxOCBAQAotQ0MgCT0gQENDQAotQ0ZMQUdTIAk9IEBDRkxBR1NACi1YSU5DTCAJPSBAeF9pbmNsdWRlc0AKIFRPUFNSQyAgPSBAdG9wX3NyY2RpckAKLURJVklOQ0wgPSAtSSQoVE9QU1JDKS9pbmNsdWRlCiAKK1BST0dSQU0gPSBidWlsZAorTU9EVUxFICA9IG5vbmUKIAotYWxsOiBidWlsZAorQ19TUkNTID0gYnVpbGQuYwogCi1idWlsZDogYnVpbGQubwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBidWlsZCBidWlsZC5vCithbGw6ICQoUFJPR1JBTSkKIAotLmMubzoKLQkkKENDKSAtYyAkKENGTEFHUykgJChYSU5DTCkgJChESVZJTkNMKSAtbyAkKi5vICQ8CitATUFLRV9SVUxFU0AKIAotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKKyQoUFJPR1JBTSk6ICQoT0JKUykKKwkkKENDKSAkKENGTEFHUykgLW8gYnVpbGQgJChPQkpTKQogCi1jbGVhbjoKLQlybSAtZiAqLm8gXCMqXCMgKn4gKi5iYWsgYnVpbGQgdG1wX21ha2UKLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIE1ha2VmaWxlCi0KLWNvdW50cnljbGVhbjoKLQotZHVtbXk6CitjbGVhbjo6CisJJChSTSkgJChQUk9HUkFNKQogCiAjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQuYyBiL3Rvb2xzL2J1aWxkLmMKaW5kZXggY2E5ZmFjNy4uMDIyMWM0OSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQuYworKysgYi90b29scy9idWlsZC5jCkBAIC03MTgsOSArNzE4LDExIEBACiAKICAgICBwcmludGYoICIvKiBGaWxlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LCBkbyBub3QgZWRpdCEgKi9cbiIgKTsKICAgICBwcmludGYoICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XG4iKTsKKwlwcmludGYoICIjaW5jbHVkZSBcIndpbmRvd3MuaFwiXG4iKTsKICAgICBwcmludGYoICIjaW5jbHVkZSBcImRsbHMuaFwiXG4iKTsKICAgICBwcmludGYoICIjaW5jbHVkZSBcInBlX2ltYWdlLmhcIlxuIik7CiAgICAgcHJpbnRmKCAiI2luY2x1ZGUgXCJ3aW5lcnJvci5oXCJcbiIpOworCXByaW50ZiggIiNpbmNsdWRlIFwicmVsYXkzMi5oXCJcbiIpOwogICAgIHByaW50ZiggIiNpbmNsdWRlIFwic3RkZGVidWcuaFwiXG4iKTsKICAgICBwcmludGYoICIjaW5jbHVkZSBcImRlYnVnLmhcIlxuIik7CiAgICAgcHJpbnRmKCAiXG5leHRlcm4gaW50IFJFTEFZMzJfVW5pbXBsZW1lbnRlZCgpO1xuXG4iICk7CkBAIC03NTgsNyArNzYwLDYgQEAKICAgICAgICAgICAgICAgICBpZiAoYXJnbm8hPWFyZ2MtMSkgcHV0Y2hhciggJywnICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmludGYoICIpXG57XG4iICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdGV4dGVybiBpbnQgJXMoKTtcbiIsIGZkcC0+aW50ZXJuYWxfbmFtZSApOwogICAgICAgICAgICAgcHJpbnRmKCAiXHRkcHJpbnRmX3JlbGF5KHN0ZGRlYixcIkVudGVyaW5nICUlcy4lJXMoIik7CiAgICAgICAgICAgICBmb3IgKGFyZ25vPTA7YXJnbm88YXJnYzthcmdubysrKSBwcmludGYoICIlJXggIik7CiAgICAgICAgICAgICBwcmludGYoICIpXFxuXCIsIFwiJXNcIiwgXCIlc1wiIiwgVXBwZXJETExOYW1lLCBvZHAtPmV4cG9ydF9uYW1lKTsKQEAgLTgxNyw3ICs4MTgsNyBAQAogICAgIHByaW50ZigifTtcblxuIik7CiAKICAgICBwcmludGYoICJzdGF0aWMgV0lOMzJfYnVpbHRpbiBkbGw9e1wiJXNcIixmdW5jdGlvbnMsJWQsMH07XG4iLAotICAgICAgICAgICAgVXBwZXJETExOYW1lLCBMaW1pdCk7CisgICAgICAgICAgICBVcHBlckRMTE5hbWUsIExpbWl0KzEpOwogCiAgICAgcHJpbnRmKCAidm9pZCAlc19Jbml0KHZvaWQpXG57XG4iLFVwcGVyRExMTmFtZSk7CiAgICAgcHJpbnRmKCAiXHRkbGwubmV4dD1XSU4zMl9idWlsdGluX2xpc3Q7XG4iKTsKQEAgLTk5MCwxNCArOTkxLDE1IEBACiAKICAgICAvKiBUcmFuc2ZlciB0aGUgYXJndW1lbnRzICovCiAKLSAgICBwcmludGYoICJcdGxlYWwgMTYoJSVlYnApLCUlZXNpXG4iICk7CiAgICAgcHJpbnRmKCAiXHRtb3ZsIDEyKCUlZWJwKSwlJWVjeFxuIiApOwogICAgIHByaW50ZiggIlx0b3JsICUlZWN4LCUlZWN4XG4iICk7CiAgICAgcHJpbnRmKCAiXHRqZSAxZlxuIiApOworICAgIHByaW50ZiggIlx0bGVhbCAxNiglJWVicCksJSVlc2lcbiIgKTsKICAgICBwcmludGYoICJcdHNobGwgJDIsJSVlY3hcbiIgKTsKICAgICBwcmludGYoICJcdHN1YmwgJSVlY3gsJSVlc3BcbiIgKTsKICAgICBwcmludGYoICJcdG1vdmwgJSVlc3AsJSVlZGlcbiIgKTsKICAgICBwcmludGYoICJcdHNocmwgJDIsJSVlY3hcbiIgKTsKKyAgICBwcmludGYoICJcdGNsZFxuIiApOwogICAgIHByaW50ZiggIlx0cmVwOyBtb3ZzbFxuIiApOwogICAgIHByaW50ZiggIjE6XG4iICk7CiAKZGlmZiAtLWdpdCBhL3dpbmRvd3MvSW1ha2VmaWxlIGIvd2luZG93cy9JbWFrZWZpbGUKaW5kZXggOTczMjE1Zi4uNTRjMGYyNyAxMDA2NDQKLS0tIGEvd2luZG93cy9JbWFrZWZpbGUKKysrIGIvd2luZG93cy9JbWFrZWZpbGUKQEAgLTMsNiArMyw3IEBACiBNT0RVTEUgPSB3aW5kb3dzCiAKIFNSQ1MgPSBcCisJYWxpYXMuYyBcCiAJY2FyZXQuYyBcCiAJY2xhc3MuYyBcCiAJY3Vyc29yLmMgXApkaWZmIC0tZ2l0IGEvd2luZG93cy9NYWtlZmlsZS5pbiBiL3dpbmRvd3MvTWFrZWZpbGUuaW4KaW5kZXggNzYyMWI2Zi4uNGVlZjhhMCAxMDA2NDQKLS0tIGEvd2luZG93cy9NYWtlZmlsZS5pbgorKysgYi93aW5kb3dzL01ha2VmaWxlLmluCkBAIC0xLDQ0ICsxLDM3IEBACi1DQyAJPSBAQ0NACi1DRkxBR1MgCT0gQENGTEFHU0AKLVhJTkNMIAk9IEB4X2luY2x1ZGVzQAotVE9QU1JDICA9IEB0b3Bfc3JjZGlyQAotRElWSU5DTCA9IC1JJChUT1BTUkMpL2luY2x1ZGUKLUxECT0gQExEQAotTERDT01CSU5FRkxBR1MgPSBATERDT01CSU5FRkxBR1NACitUT1BTUkMgPSBAdG9wX3NyY2RpckAKK01PRFVMRSA9IHdpbmRvd3MKIAotCi1NT0RVTEUgCT0gd2luZG93cwotCi1TUkNTIAk9IGNhcmV0LmMgY2xhc3MuYyBjdXJzb3IuYyBkY2UuYyBkZWZkbGcuYyBkZWZ3bmQuYyBkaWFsb2cuYyBcCi0JZXZlbnQuYyBmb2N1cy5jIGdyYXBoaWNzLmMgaG9vay5jIGtleWJvYXJkLmMgbWFwcGluZy5jIG1kaS5jIFwKLQltZXNzYWdlLmMgbXNnYm94LmMgbm9uY2xpZW50LmMgcGFpbnRpbmcuYyBwcm9wZXJ0eS5jIHNjcm9sbC5jIFwKLQlzeXNjb2xvci5jIHN5c21ldHJpY3MuYyB0aW1lci5jIHV0aWxpdHkuYyB3aW4uYyBcCitDX1NSQ1MgPSBcCisJYWxpYXMuYyBcCisJY2FyZXQuYyBcCisJY2xhc3MuYyBcCisJY3Vyc29yLmMgXAorCWRjZS5jIFwKKwlkZWZkbGcuYyBcCisJZGVmd25kLmMgXAorCWRpYWxvZy5jIFwKKwlldmVudC5jIFwKKwlmb2N1cy5jIFwKKwlncmFwaGljcy5jIFwKKwlob29rLmMgXAorCWtleWJvYXJkLmMgXAorCW1hcHBpbmcuYyBcCisJbWRpLmMgXAorCW1lc3NhZ2UuYyBcCisJbXNnYm94LmMgXAorCW5vbmNsaWVudC5jIFwKKwlwYWludGluZy5jIFwKKwlwcm9wZXJ0eS5jIFwKKwlzY3JvbGwuYyBcCisJc3lzY29sb3IuYyBcCisJc3lzbWV0cmljcy5jIFwKKwl0aW1lci5jIFwKKwl1dGlsaXR5LmMgXAorCXdpbi5jIFwKIAl3aW5wb3MuYwotIAotCi1PQkpTID0gJChTUkNTOi5jPS5vKQotCi0uYy5vOgotCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkKFhJTkNMKSAkKERJVklOQ0wpIC1vICQqLm8gJDwKIAogYWxsOiAkKE1PRFVMRSkubwogCi0kKE1PRFVMRSkubzogJChPQkpTKQotCSQoTEQpICQoTERDT01CSU5FRkxBR1MpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KLQotZGVwZW5kOgotCXNlZCAnL1wjXCNcIyBEZXBlbmRlbmNpZXMvcScgPCBNYWtlZmlsZSA+IHRtcF9tYWtlCi0JJChDQykgJChESVZJTkNMKSAkKFhJTkNMKSAtTU0gKi5jID4+IHRtcF9tYWtlCi0JbXYgdG1wX21ha2UgTWFrZWZpbGUKLQotY2xlYW46Ci0Jcm0gLWYgKi5vIFwjKlwjICp+ICouYmFrIHRtcF9tYWtlCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSBNYWtlZmlsZQotCi1jb3VudHJ5Y2xlYW46Ci0KLWR1bW15OgorQE1BS0VfUlVMRVNACiAKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS93aW5kb3dzL2FsaWFzLmMgYi93aW5kb3dzL2FsaWFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkMjVjZQotLS0gL2Rldi9udWxsCisrKyBiL3dpbmRvd3MvYWxpYXMuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogRnVuY3Rpb24gYWxpYXMgc3VwcG9ydAorICogCisgKiBDb3B5cmlnaHQgMTk5NSBNYXJ0aW4gdm9uIExvZXdpcworICogCisgKi8KKworI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgorCisjaW5jbHVkZSAic3RkZGVidWcuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisvKiBzb21lIGxhcmdlIHByaW1lICovCisjZGVmaW5lIFRBQkxFU0laRQkyNjc3CisKK3N0YXRpYyBBTElBU0hBU0ggQWxpYXNUYWJsZVtUQUJMRVNJWkVdOworLyogdGhpcyBjb3VsZCBiZSBhIGJpdCBzbWFsbGVyICovCitzdGF0aWMgRlVOQ1RJT05BTElBUyBBbGlhc1JlY29yZFtUQUJMRVNJWkVdOworLyogcmVjb3JkIDAgaXMgYWx3YXlzIGVtcHR5ICovCitzdGF0aWMgaW50IExhc3RSZWNvcmQ7CisKK2ludCBBTElBU19Vc2VBbGlhc2VzOworCisvKiBjbG9zZWQgaGFzaGluZyAqLworc3RhdGljIGludCBBTElBU19Mb2NhdGVIYXNoKERXT1JEIHZhbHVlKQoreworCWludCBoYXNoLHN0YXJ0OworCXN0YXJ0PWhhc2g9dmFsdWUlVEFCTEVTSVpFOworCXdoaWxlKEFsaWFzVGFibGVbaGFzaF0udXNlZCAmJiBBbGlhc1RhYmxlW2hhc2hdLnVzZWQhPXZhbHVlKQorCXsKKwkJaGFzaCsrOworCQlpZihoYXNoPT1UQUJMRVNJWkUpCisJCQloYXNoPTA7CisJCWlmKGhhc2g9PXN0YXJ0KQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwiSGFzaCB0YWJsZSBmdWxsLCBpbmNyZWFzZSBzaXplIGluIGFsaWFzLmNcbiIpOworCQkJZXhpdCgwKTsKKwkJfQorCX0KKwlyZXR1cm4gaGFzaDsKK30KKwordm9pZCBBTElBU19SZWdpc3RlckFsaWFzKERXT1JEIFdpbmUsRFdPUkQgV2luMTYsIERXT1JEIFdpbjMyKQoreworICAgIGludCB3aGFzaCA9IDAsIHcxNmhhc2ggPSAwLCB3MzJoYXNoID0gMCwgcmVjbm89MDsKKyAgICBpZiAoIVdpbmUgJiYgIVdpbjE2ICYmICFXaW4zMikgcmV0dXJuOworICAgIGlmIChXaW5lKQorICAgIHsKKyAgICAgICAgd2hhc2g9QUxJQVNfTG9jYXRlSGFzaChXaW5lKTsKKwlyZWNubz1BbGlhc1RhYmxlW3doYXNoXS51c2VkP0FsaWFzVGFibGVbd2hhc2hdLnVzZWQ6MDsKKyAgICB9CisgICAgaWYgKFdpbjE2KQorICAgIHsKKyAgICAgICAgdzE2aGFzaD1BTElBU19Mb2NhdGVIYXNoKFdpbjE2KTsKKwlyZWNubz1BbGlhc1RhYmxlW3cxNmhhc2hdLnVzZWQ/QWxpYXNUYWJsZVt3MTZoYXNoXS51c2VkOjA7CisgICAgfQorICAgIGlmIChXaW4zMikKKyAgICB7CisgICAgICAgIHczMmhhc2g9QUxJQVNfTG9jYXRlSGFzaChXaW4zMik7CisgICAgICAgIHJlY25vPUFsaWFzVGFibGVbdzMyaGFzaF0udXNlZD9BbGlhc1RhYmxlW3czMmhhc2hdLnVzZWQ6MDsKKyAgICB9CisgICAgaWYgKCFyZWNubykKKyAgICB7CisgICAgICAgIHJlY25vPUxhc3RSZWNvcmQ7CisgICAgICAgIExhc3RSZWNvcmQrKzsKKyAgICB9CisgICAgaWYgKFdpbmUpCisgICAgeworICAgICAgICBBbGlhc1RhYmxlW3doYXNoXS51c2VkPVdpbmU7CisgICAgICAgIEFsaWFzVGFibGVbd2hhc2hdLnJlY25vPXJlY25vOworICAgICAgICBBbGlhc1JlY29yZFtyZWNub10ud2luZT1XaW5lOworICAgIH0KKyAgICBpZiAoV2luMTYpCisgICAgeworICAgICAgICBBbGlhc1RhYmxlW3cxNmhhc2hdLnVzZWQ9V2luMTY7CisJQWxpYXNUYWJsZVt3MTZoYXNoXS5yZWNubz1yZWNubzsKKyAgICAgICAgQWxpYXNSZWNvcmRbcmVjbm9dLndpbjE2PVdpbjE2OworICAgIH0KKyAgICBpZiAoV2luMzIpCisgICAgeworICAgICAgICBBbGlhc1RhYmxlW3czMmhhc2hdLnVzZWQ9V2luMzI7CisgICAgICAgIEFsaWFzVGFibGVbdzMyaGFzaF0ucmVjbm89cmVjbm87CisgICAgICAgIEFsaWFzUmVjb3JkW3JlY25vXS53aW4zMj1XaW4zMjsKKyAgICB9Cit9CisKK0ZVTkNUSU9OQUxJQVMqIEFMSUFTX0xvb2t1cEFsaWFzKERXT1JEIGZuKQoreworCWludCBpbmRleDsKKwlpbmRleD1BTElBU19Mb2NhdGVIYXNoKGZuKTsKKwlpZihBbGlhc1RhYmxlW2luZGV4XS51c2VkPT1mbikKKwkJcmV0dXJuICZBbGlhc1JlY29yZFtBbGlhc1RhYmxlW2luZGV4XS5yZWNub107CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS93aW5kb3dzL2NhcmV0LmMgYi93aW5kb3dzL2NhcmV0LmMKaW5kZXggOGYzMjk5MC4uYTg1YTQ3YyAxMDA2NDQKLS0tIGEvd2luZG93cy9jYXJldC5jCisrKyBiL3dpbmRvd3MvY2FyZXQuYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJzZWxlY3RvcnMuaCIKKyNpbmNsdWRlICJhbGlhcy5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAvKiAjZGVmaW5lIERFQlVHX0NBUkVUICovCiAjaW5jbHVkZSAiZGVidWcuaCIKQEAgLTk0LDYgKzk1LDIzIEBACiAgICAgUmVsZWFzZURDKENhcmV0Lmh3bmQsIGhkYyk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICBDQVJFVF9Jbml0aWFsaXplCisgKi8KK3N0YXRpYyB2b2lkIENBUkVUX0luaXRpYWxpemUoKQoreworICAgIERXT1JEIFdpbmVQcm9jLFdpbjE2UHJvYyxXaW4zMlByb2M7CisgICAgc3RhdGljIGludCBpbml0aWFsaXplZD0wOworICAgIGlmKCFpbml0aWFsaXplZCkKKyAgICB7CisgICAgICBXaW5lUHJvYz0oRFdPUkQpQ0FSRVRfQ2FsbGJhY2s7CisgICAgICBXaW4xNlByb2M9KERXT1JEKUdldFduZFByb2NFbnRyeTE2KCJDQVJFVF9DYWxsYmFjayIpOworICAgICAgV2luMzJQcm9jPShEV09SRClSRUxBWTMyX0dldEVudHJ5UG9pbnQoIldJTlBST0NTMzIiLCJDQVJFVF9DYWxsYmFjayIsMCk7CisgICAgICBBTElBU19SZWdpc3RlckFsaWFzKFdpbmVQcm9jLFdpbjE2UHJvYyxXaW4zMlByb2MpOworICAgICAgaW5pdGlhbGl6ZWQ9MTsKKyAgICB9Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgIENyZWF0ZUNhcmV0ICAgICAgICAgIChVU0VSLjE2MykKQEAgLTEzMyw2ICsxNTEsOCBAQAogICAgIENhcmV0LnRpbWVvdXQgPSA3NTA7CiAgICAgTG9ja0NhcmV0ID0gRkFMU0U7CiAKKyAgICBDQVJFVF9Jbml0aWFsaXplKCk7CisKICAgICBDYXJldC50aW1lcmlkID0gU2V0U3lzdGVtVGltZXIoIChIV05EKTAsIDAsIENhcmV0LnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGQVJQUk9DKUdldFduZFByb2NFbnRyeTE2KCJDQVJFVF9DYWxsYmFjayIpKTsKIApAQCAtMjIwLDYgKzI0MCw4IEBACiB7CiAgICAgaWYgKCFDYXJldC5od25kKSByZXR1cm47CiAKKyAgICBDQVJFVF9Jbml0aWFsaXplKCk7CisKICAgICBLaWxsU3lzdGVtVGltZXIoIChIV05EKTAsIENhcmV0LnRpbWVyaWQpOwogICAgIENhcmV0LnRpbWVvdXQgPSBtc2VjczsKICAgICBDYXJldC50aW1lcmlkID0gU2V0U3lzdGVtVGltZXIoIChIV05EKTAsIDAsIENhcmV0LnRpbWVvdXQsCmRpZmYgLS1naXQgYS93aW5kb3dzL2N1cnNvci5jIGIvd2luZG93cy9jdXJzb3IuYwppbmRleCA1YTQxZDNjLi45ODc1ZGYxIDEwMDY0NAotLS0gYS93aW5kb3dzL2N1cnNvci5jCisrKyBiL3dpbmRvd3MvY3Vyc29yLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogICAgV0lORQogc3RhdGljIGNoYXIgQ29weXJpZ2h0W10gPSAiQ29weXJpZ2h0ICBNYXJ0aW4gQXlvdHRlLCAxOTkzIjsKLSovCisgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMiwzNSArMTIsNDAgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxYMTEvY3Vyc29yZm9udC5oPgogI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgIm5lZXhlLmgiCiAjaW5jbHVkZSAid2luZS5oIgorI2luY2x1ZGUgImNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiYXJjaC5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiBzdGF0aWMgaW50IFNob3dDdXJzQ291bnQgPSAwOwogc3RhdGljIEhDVVJTT1IgaEFjdGl2ZUN1cnNvcjsKIHN0YXRpYyBIQ1VSU09SIGhFbXB0eUN1cnNvciA9IDA7CiBSRUNUCUNsaXBDdXJzb3JSZWN0OwogCi1zdGF0aWMgc3RydWN0IHsgU0VHUFRSIG5hbWU7IEhDVVJTT1IgY3Vyc29yOyB9IHN5c3RlbV9jdXJzb3JbXSA9CitzdGF0aWMgc3RydWN0IHsgCisgICBTRUdQVFIgbmFtZTsgSENVUlNPUiBjdXJzb3I7IHVuc2lnbmVkIGludCBzaGFwZTsKK30gc3lzdGVtX2N1cnNvcltdID0KIHsKLSAgICB7IElEQ19BUlJPVywgMCB9LAotICAgIHsgSURDX0lCRUFNLCAwIH0sCi0gICAgeyBJRENfV0FJVCwgMCB9LAotICAgIHsgSURDX0NST1NTLCAwIH0sCi0gICAgeyBJRENfVVBBUlJPVywgMCB9LAotICAgIHsgSURDX1NJWkUsIDAgfSwKLSAgICB7IElEQ19JQ09OLCAwIH0sCi0gICAgeyBJRENfU0laRU5XU0UsIDAgfSwKLSAgICB7IElEQ19TSVpFTkVTVywgMCB9LAotICAgIHsgSURDX1NJWkVXRSwgMCB9LAotICAgIHsgSURDX1NJWkVOUywgMCB9CisgICAgeyBJRENfQVJST1csICAgIDAsIFhDX3RvcF9sZWZ0X2Fycm93fSwKKyAgICB7IElEQ19JQkVBTSwgICAgMCwgWENfeHRlcm0gfSwKKyAgICB7IElEQ19XQUlULCAgICAgMCwgWENfd2F0Y2ggfSwKKyAgICB7IElEQ19DUk9TUywgICAgMCwgWENfY3Jvc3NoYWlyIH0sCisgICAgeyBJRENfVVBBUlJPVywgIDAsIFhDX2Jhc2VkX2Fycm93X3VwIH0sCisgICAgeyBJRENfU0laRSwgICAgIDAsIFhDX2JvdHRvbV9yaWdodF9jb3JuZXIgfSwKKyAgICB7IElEQ19JQ09OLCAgICAgMCwgWENfaWNvbiB9LAorICAgIHsgSURDX1NJWkVOV1NFLCAwLCBYQ19mbGV1ciB9LAorICAgIHsgSURDX1NJWkVORVNXLCAwLCBYQ19mbGV1ciB9LAorICAgIHsgSURDX1NJWkVXRSwgICAwLCBYQ19zYl9oX2RvdWJsZV9hcnJvdyB9LAorICAgIHsgSURDX1NJWkVOUywgICAwLCBYQ19zYl92X2RvdWJsZV9hcnJvdyB9CiB9OwogCiAjZGVmaW5lIE5CX1NZU19DVVJTT1JTICAoc2l6ZW9mKHN5c3RlbV9jdXJzb3IpL3NpemVvZihzeXN0ZW1fY3Vyc29yWzBdKSkKQEAgLTU0LDEzICs1OSwxMyBAQAogICAgIEhDVVJTT1IgCWhDdXJzb3I7CiAgICAgSFJTUkMgICAgICAgaFJzcmM7CiAgICAgSEFORExFIAlyc2NfbWVtOwotICAgIFdPUkQgCSpscDsKKyAgICBjaGFyICAgICAgICAqbHBiaXRzOwogICAgIExPTkcgICAgICAgICpscGwsc2l6ZTsKLSAgICBDVVJTT1JERVNDUklQICpscGN1cmRlc2M7Ci0gICAgQ1VSU09SQUxMT0MJICAqbHBjdXI7Ci0gICAgSERDIAloZGM7CisgICAgQ1VSU09SQUxMT0MgKmxwY3VyOworICAgIENVUlNPUkRJUiAgICpscGN1cmRpcjsKKyAgICBDVVJTT1JERVNDUklQIGN1cmRlc2M7CisgICAgUE9JTlQgICAgICAgaG90c3BvdDsKICAgICBpbnQgaTsKLSAgICB1bnNpZ25lZCBjaGFyICpjcDEsKmNwMjsKICAgICBkcHJpbnRmX3Jlc291cmNlKHN0ZGRlYiwiTG9hZEN1cnNvcjogaW5zdGFuY2UgPSAlMDR4LCBuYW1lID0gJTA4bHhcbiIsCiAJICAgaW5zdGFuY2UsIGN1cnNvcl9uYW1lKTsKICAgICBpZiAoIWluc3RhbmNlKQpAQCAtNjgsMTE2ICs3Myw2OSBAQAogCWZvciAoaSA9IDA7IGkgPCBOQl9TWVNfQ1VSU09SUzsgaSsrKQogCSAgICBpZiAoc3lzdGVtX2N1cnNvcltpXS5uYW1lID09IGN1cnNvcl9uYW1lKQogCSAgICB7Ci0JCWlmIChzeXN0ZW1fY3Vyc29yW2ldLmN1cnNvcikgcmV0dXJuIHN5c3RlbV9jdXJzb3JbaV0uY3Vyc29yOwotICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7CisJICAgICAgICBpZiAoIXN5c3RlbV9jdXJzb3JbaV0uY3Vyc29yKSAKKwkgICAgICAgIHsKKwkJICAgIGhDdXJzb3IgPSBHbG9iYWxBbGxvYyAoR01FTV9NT1ZFQUJMRSwgc2l6ZW9mIChDdXJzb3IpKTsKKwkJICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiTG9hZEN1cnNvciBBbGxvYyBoQ3Vyc29yPSVYXG4iLCBoQ3Vyc29yKTsKKwkJICAgIHN5c3RlbV9jdXJzb3JbaV0uY3Vyc29yID0gaEN1cnNvcjsKKwkJICAgIGxwY3VyID0gKENVUlNPUkFMTE9DICopIEdsb2JhbExvY2soaEN1cnNvcik7CisJCSAgICBscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVGb250Q3Vyc29yKGRpc3BsYXksIHN5c3RlbV9jdXJzb3JbaV0uc2hhcGUpOworCQkgICAgR2xvYmFsVW5sb2NrKGhDdXJzb3IpOworCSAgICAgICAgfQorCSAgICAgICAJcmV0dXJuIHN5c3RlbV9jdXJzb3JbaV0uY3Vyc29yOwogCSAgICB9Ci0JaWYgKGkgPT0gTkJfU1lTX0NVUlNPUlMpIHJldHVybiAwOwotICAgIH0KLSAgICBoQ3Vyc29yID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgc2l6ZW9mKENVUlNPUkFMTE9DKSArIDEwMjRMKTsgCi0gICAgaWYgKGhDdXJzb3IgPT0gKEhDVVJTT1IpTlVMTCkgcmV0dXJuIDA7Ci0gICAgaWYgKCFpbnN0YW5jZSkgc3lzdGVtX2N1cnNvcltpXS5jdXJzb3IgPSBoQ3Vyc29yOwotCi0gICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIEFsbG9jIGhDdXJzb3I9JVhcbiIsIGhDdXJzb3IpOwotICAgIGxwY3VyID0gKENVUlNPUkFMTE9DICopR2xvYmFsTG9jayhoQ3Vyc29yKTsKLSAgICBtZW1zZXQobHBjdXIsIDAsIHNpemVvZihDVVJTT1JBTExPQykpOwotICAgIGlmIChpbnN0YW5jZSA9PSAoSEFORExFKU5VTEwpIHsKLQlzd2l0Y2goKExPTkcpY3Vyc29yX25hbWUpIHsKLQkgICAgY2FzZSBJRENfQVJST1c6Ci0JCWxwY3VyLT54Y3Vyc29yID0gWENyZWF0ZUZvbnRDdXJzb3IoZGlzcGxheSwgWENfdG9wX2xlZnRfYXJyb3cpOwotCQlHbG9iYWxVbmxvY2soaEN1cnNvcik7Ci0JICAgIAlyZXR1cm4gaEN1cnNvcjsKLQkgICAgY2FzZSBJRENfQ1JPU1M6Ci0JCWxwY3VyLT54Y3Vyc29yID0gWENyZWF0ZUZvbnRDdXJzb3IoZGlzcGxheSwgWENfY3Jvc3NoYWlyKTsKLQkJR2xvYmFsVW5sb2NrKGhDdXJzb3IpOwotCSAgICAJcmV0dXJuIGhDdXJzb3I7Ci0JICAgIGNhc2UgSURDX0lCRUFNOgotCQlscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVGb250Q3Vyc29yKGRpc3BsYXksIFhDX3h0ZXJtKTsKLQkJR2xvYmFsVW5sb2NrKGhDdXJzb3IpOwotCSAgICAJcmV0dXJuIGhDdXJzb3I7Ci0JICAgIGNhc2UgSURDX1dBSVQ6Ci0JCWxwY3VyLT54Y3Vyc29yID0gWENyZWF0ZUZvbnRDdXJzb3IoZGlzcGxheSwgWENfd2F0Y2gpOwotCQlHbG9iYWxVbmxvY2soaEN1cnNvcik7Ci0JICAgIAlyZXR1cm4gaEN1cnNvcjsKLQkgICAgY2FzZSBJRENfU0laRU5TOgotCQlscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVGb250Q3Vyc29yKGRpc3BsYXksIFhDX3NiX3ZfZG91YmxlX2Fycm93KTsKLQkJR2xvYmFsVW5sb2NrKGhDdXJzb3IpOwotCSAgICAJcmV0dXJuIGhDdXJzb3I7Ci0JICAgIGNhc2UgSURDX1NJWkVXRToKLQkJbHBjdXItPnhjdXJzb3IgPSBYQ3JlYXRlRm9udEN1cnNvcihkaXNwbGF5LCBYQ19zYl9oX2RvdWJsZV9hcnJvdyk7Ci0JCUdsb2JhbFVubG9jayhoQ3Vyc29yKTsKLQkgICAgCXJldHVybiBoQ3Vyc29yOwotICAgICAgICAgICAgY2FzZSBJRENfU0laRU5XU0U6Ci0gICAgICAgICAgICBjYXNlIElEQ19TSVpFTkVTVzoKLSAgICAgICAgICAgICAgICBscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVGb250Q3Vyc29yKGRpc3BsYXksIFhDX2ZsZXVyKTsKLSAgICAgICAgICAgICAgICBHbG9iYWxVbmxvY2soaEN1cnNvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGhDdXJzb3I7Ci0JICAgIGRlZmF1bHQ6Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCi0jaWYgMAotICAgIC8qIHRoaXMgY29kZSByZXBsYWNlcyBhbGwgYml0bWFwIGN1cnNvcnMgd2l0aCB0aGUgZGVmYXVsdCBjdXJzb3IgKi8KLSAgICBscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVGb250Q3Vyc29yKGRpc3BsYXksIFhDX3RvcF9sZWZ0X2Fycm93KTsKLSAgICBHbG9iYWxVbmxvY2soaEN1cnNvcik7Ci0gICAgcmV0dXJuIGhDdXJzb3I7Ci0jZW5kaWYKLQotICAgIGlmICghKGhkYyA9IEdldERDKDApKSkgcmV0dXJuIDA7Ci0gICAgaWYgKCEoaFJzcmMgPSBGaW5kUmVzb3VyY2UoIGluc3RhbmNlLCBjdXJzb3JfbmFtZSwgUlRfR1JPVVBfQ1VSU09SICkpKQotICAgIHsKLQlSZWxlYXNlREMoMCwgaGRjKTsgCiAJcmV0dXJuIDA7CiAgICAgfQorCisgICAgaWYgKCEoaFJzcmMgPSBGaW5kUmVzb3VyY2UoIGluc3RhbmNlLCBjdXJzb3JfbmFtZSwgUlRfR1JPVVBfQ1VSU09SICkpKQorCXJldHVybiAwOwogICAgIHJzY19tZW0gPSBMb2FkUmVzb3VyY2UoaW5zdGFuY2UsIGhSc3JjICk7CiAgICAgaWYgKHJzY19tZW0gPT0gKEhBTkRMRSlOVUxMKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsIkxvYWRDdXJzb3IgLyBDdXJzb3IgJTA4bHggbm90IEZvdW5kICFcbiIsIGN1cnNvcl9uYW1lKTsKLQlSZWxlYXNlREMoMCwgaGRjKTsgCi0JcmV0dXJuIDA7Ci0JfQotICAgIGxwID0gKFdPUkQgKilMb2NrUmVzb3VyY2UocnNjX21lbSk7Ci0gICAgaWYgKGxwID09IE5VTEwpIHsKLSAgICAgICAgRnJlZVJlc291cmNlKCByc2NfbWVtICk7Ci0JUmVsZWFzZURDKDAsIGhkYyk7IAotCXJldHVybiAwOwotCX0KLSAgICBscGN1cmRlc2MgPSAoQ1VSU09SREVTQ1JJUCAqKShscCArIDMpOwotI2lmIDAKLSAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJSZXNlcnZlZD0lWFxuIiwgKmxwKTsKLSAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJSZXNvdXJjZVR5cGU9JVhcbiIsICoobHAgKyAxKSk7Ci0gICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3VyUmVzb3VyY2VDb3VudD0lWFxuIiwgKihscCArIDIpKTsKLSAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJzb3IgV2lkdGg9JWRcbiIsIAotCQkoaW50KWxwY3VyZGVzYy0+V2lkdGgpOwotICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiTG9hZEN1cnNvciAvIGN1cnNvciBIZWlnaHQ9JWRcbiIsIAotCQkoaW50KWxwY3VyZGVzYy0+SGVpZ2h0KTsKLSAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJzb3IgY3VyWEhvdHNwb3Q9JWRcbiIsIAotCQkoaW50KWxwY3VyZGVzYy0+Y3VyWEhvdHNwb3QpOwotICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiTG9hZEN1cnNvciAvIGN1cnNvciBjdXJZSG90c3BvdD0lZFxuIiwgCi0JCShpbnQpbHBjdXJkZXNjLT5jdXJZSG90c3BvdCk7Ci0gICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3Vyc29yIGN1ckRJQlNpemU9JWxYXG4iLCAKLQkJKERXT1JEKWxwY3VyZGVzYy0+Y3VyRElCU2l6ZSk7Ci0gICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3Vyc29yIGN1ckRJQk9mZnNldD0lbFhcbiIsIAotCQkoRFdPUkQpbHBjdXJkZXNjLT5jdXJESUJPZmZzZXQpOwotI2VuZGlmCi0gICAgbHBjdXItPmRlc2NyaXB0b3IgPSAqbHBjdXJkZXNjOwotICAgIEZyZWVSZXNvdXJjZSggcnNjX21lbSApOwotICAgIGlmICghKGhSc3JjID0gRmluZFJlc291cmNlKCBpbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUlOVFJFU09VUkNFKGxwY3VyZGVzYy0+Y3VyRElCT2Zmc2V0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUX0NVUlNPUiApKSkKLSAgICB7Ci0JUmVsZWFzZURDKDAsIGhkYyk7IAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTG9hZEN1cnNvciAvIEN1cnNvciAlMDhseCBub3QgRm91bmQgIVxuIiwgY3Vyc29yX25hbWUpOwogCXJldHVybiAwOwogICAgIH0KKyAgICBscGN1cmRpciA9IChDVVJTT1JESVIgKilMb2NrUmVzb3VyY2UocnNjX21lbSk7CisgICAgaWYgKGxwY3VyZGlyID09IE5VTEwpIHsKKyAgICAgICAgRnJlZVJlc291cmNlKCByc2NfbWVtICk7CisJcmV0dXJuIDA7CisgICAgfQorICAgIGN1cmRlc2MgPSAqKENVUlNPUkRFU0NSSVAgKikobHBjdXJkaXIgKyAxKTsgIC8qIENPTlZfQ1VSREVTQyA/ICovCisjaWYgMAorICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiTG9hZEN1cnNvciAvIGN1clJlc2VydmVkPSVYXG4iLCBscGN1cmRpci0+Y2RSZXNlcnZlZCk7CisgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3VyUmVzb3VyY2VUeXBlPSVYXG4iLCBscGN1cmRpci0+Y2RUeXBlKTsKKyAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJSZXNvdXJjZUNvdW50PSVYXG4iLCBscGN1cmRpci0+Y2RDb3VudCk7CisgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3Vyc29yIFdpZHRoPSVkXG4iLCAKKwkJKGludCljdXJkZXNjLldpZHRoKTsKKyAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkxvYWRDdXJzb3IgLyBjdXJzb3IgSGVpZ2h0PSVkXG4iLCAKKwkJKGludCljdXJkZXNjLkhlaWdodCk7CisgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3Vyc29yIGN1ckRJQlNpemU9JWxYXG4iLCAKKwkJKERXT1JEKWN1cmRlc2MuY3VyRElCU2l6ZSk7CisgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJMb2FkQ3Vyc29yIC8gY3Vyc29yIGN1ckRJQk9mZnNldD0lbFhcbiIsCisJCShEV09SRCljdXJkZXNjLmN1ckRJQk9mZnNldCk7CisjZW5kaWYKKyAgICBGcmVlUmVzb3VyY2UoIHJzY19tZW0gKTsKKyAgICBpZiAoIShoUnNyYyA9IEZpbmRSZXNvdXJjZSggaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VJTlRSRVNPVVJDRShjdXJkZXNjLmN1ckRJQk9mZnNldCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVF9DVVJTT1IgKSkpCisJcmV0dXJuIDA7CiAgICAgcnNjX21lbSA9IExvYWRSZXNvdXJjZShpbnN0YW5jZSwgaFJzcmMgKTsKICAgICBpZiAocnNjX21lbSA9PSAoSEFORExFKU5VTEwpIHsKICAgICAJZnByaW50ZihzdGRlcnIsCiAJCSJMb2FkQ3Vyc29yIC8gQ3Vyc29yICUwOGx4IEJpdG1hcCBub3QgRm91bmQgIVxuIiwgY3Vyc29yX25hbWUpOwotCVJlbGVhc2VEQygwLCBoZGMpOyAKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgbHBsID0gKExPTkcgKikgTG9ja1Jlc291cmNlKHJzY19tZW0pOworICAgIGlmIChscGwgPT0gTlVMTCkgeworICAgICAgICBGcmVlUmVzb3VyY2UoIHJzY19tZW0gKTsKIAlyZXR1cm4gMDsKIAl9Ci0gICAgbHBsID0gKExPTkcgKilMb2NrUmVzb3VyY2UocnNjX21lbSk7Ci0gICAgbHBsKys7CisgICAgaG90c3BvdCA9ICooUE9JTlQgKikgbHBsKys7ICAvKiBDT05WX1BPSU5UID8gKi8KICAgICBzaXplID0gQ09OVl9MT05HICgqbHBsKTsKKyNpZiAwCisgICAgaWYgKCEoaGRjID0gR2V0REMoMCkpKSB7CisgICAgICAgRnJlZVJlc291cmNlKCByc2NfbWVtICk7CisgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChzaXplID09IHNpemVvZihCSVRNQVBDT1JFSEVBREVSKSl7CiAJQ09OVl9CSVRNQVBDT1JFSEVBREVSIChscGwpOwogICAgICAgICAoKEJJVE1BUElORk9IRUFERVIgKilscGwpLT5iaUhlaWdodCAvPSAyOwpAQCAtMTkwLDQwICsxNDgsMzIgQEAKICAgICAgIGZwcmludGYoc3RkZXJyLCJObyBiaXRtYXAgZm9yIGN1cnNvcj9cbiIpOwogICAgICAgbHBjdXItPmhCaXRtYXAgPSAwOwogICAgIH0KLSAgICBscGwgPSAoTE9ORyAqKSgoY2hhciAqKWxwbCArIHNpemUgKyA4KTsKLSAgLyogVGhpcyBpcyByYXRoZXIgc3RyYW5nZSEgVGhlIGRhdGEgaXMgc3RvcmVkICpCQUNLV0FSRFMqIGFuZCAgICAgICAqLwotICAvKiBtaXJyb3JlZCEgQnV0IHdoeT8/IEZJWE1FOiB0aGUgaW1hZ2UgbXVzdCBiZSBmbGlwcGVkIGF0IHRoZSBZICAgICovCi0gIC8qIGF4aXMsIGVpdGhlciBoZXJlIG9yIGluIENyZWF0ZUN1c29yKCk7ICovCi0gICAgc2l6ZSA9IGxwY3VyLT5kZXNjcmlwdG9yLkhlaWdodC8yICogKChscGN1ci0+ZGVzY3JpcHRvci5XaWR0aCs3KS84KTsKLSNpZiAwCi0gICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJCZWZvcmU6XG4iKTsKLSAgICBmb3IoaT0wO2k8MipzaXplO2krKykgIHsKLSAgICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiJTAyeCAiLCgodW5zaWduZWQgY2hhciAqKWxwbClbaV0pOwotICAgICAgaWYgKChpICYgNykgPT0gNykgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJcbiIpOwotICAgIH0KLSNlbmRpZgotICAgIGNwMSA9IChjaGFyICopbHBsOwotICAgIGNwMiA9IGNwMSsyKnNpemU7Ci0gICAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAgewotICAgICAgY2hhciB0bXA9Ki0tY3AyOwotICAgICAgKmNwMiA9ICpjcDE7Ci0gICAgICAqY3AxKysgPSB0bXA7Ci0gICAgfQotI2lmIDAKLSAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIkFmdGVyOlxuIik7Ci0gICAgZm9yKGk9MDtpPDIqc2l6ZTtpKyspICB7Ci0gICAgICBkcHJpbnRmX2N1cnNvcihzdGRkZWIsIiUwMnggIiwoKHVuc2lnbmVkIGNoYXIgKilscGwpW2ldKTsKLSAgICAgIGlmICgoaSAmIDcpID09IDcpIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiXG4iKTsKLSAgICB9Ci0jZW5kaWYKLSAgICBoQ3Vyc29yID0gQ3JlYXRlQ3Vyc29yKGluc3RhbmNlLCBscGN1ci0+ZGVzY3JpcHRvci5jdXJYSG90c3BvdCwgCi0gCWxwY3VyLT5kZXNjcmlwdG9yLmN1cllIb3RzcG90LCBscGN1ci0+ZGVzY3JpcHRvci5XaWR0aCwKLQlscGN1ci0+ZGVzY3JpcHRvci5IZWlnaHQvMiwKLQkoTFBTVFIpbHBsLCAoKExQU1RSKWxwbCkrc2l6ZSk7Ci0KLSAgICBGcmVlUmVzb3VyY2UoIHJzY19tZW0gKTsKLSAgICBHbG9iYWxVbmxvY2soaEN1cnNvcik7CiAgICAgUmVsZWFzZURDKDAsaGRjKTsKKyNlbmRpZgorICAgIGlmIChzaXplID09IHNpemVvZihCSVRNQVBDT1JFSEVBREVSKSkKKwlscGJpdHMgPSAoY2hhciAqKWxwbCArIHNpemVvZihCSVRNQVBDT1JFSEVBREVSKSArIDIqc2l6ZW9mKFJHQlRSSVBMRSk7CisgICAgZWxzZSBpZiAoc2l6ZSA9PSBzaXplb2YoQklUTUFQSU5GT0hFQURFUikpCisJbHBiaXRzID0gKGNoYXIgKilscGwgKyBzaXplb2YoQklUTUFQSU5GT0hFQURFUikgKyAyKnNpemVvZihSR0JRVUFEKTsKKyAgICBlbHNlICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwiSW52YWxpZCBiaXRtYXAgaW4gY3Vyc29yIHJlc291cmNlXG4iKTsKKyAgICAgIEZyZWVSZXNvdXJjZShyc2NfbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBUaGUgaGVpZ2h0IG9mIHRoZSBjdXJzb3IgaXMgdGhlIGhlaWdodCBvZiB0aGUgWE9SLUJpdG1hcAorICAgICAqIHBsdXMgdGhlIGhlaWdodCBvZiB0aGUgQU5ELUJpdG1hcCwgc28gZGl2aWRlIGl0IGJ5IHR3by4KKyAgICAgKi8KKyAgICBzaXplID0gY3VyZGVzYy5IZWlnaHQvMiAqICgoY3VyZGVzYy5XaWR0aCszMSkvMzIgKiA0KTsKKyNpZiAwCisgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJCaXRtYXA6XG4iKTsKKyAgICBmb3IoaT0wO2k8MipzaXplO2krKykgIHsKKyAgICAgIGRwcmludGZfY3Vyc29yKHN0ZGRlYiwiJTAyeCAiLCh1bnNpZ25lZCBjaGFyKSBscGNbaV0pOworICAgICAgaWYgKChpICYgNykgPT0gNykgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJcbiIpOworICAgIH0KKyNlbmRpZgorICAgIGhDdXJzb3IgPSBDcmVhdGVDdXJzb3IoaW5zdGFuY2UsIGhvdHNwb3QueCwgaG90c3BvdC55LCAKKwkJCSAgIGN1cmRlc2MuV2lkdGgsIGN1cmRlc2MuSGVpZ2h0IC8gMiwKKwkJCSAgIGxwYml0cytzaXplLCBscGJpdHMpOworICAgIEZyZWVSZXNvdXJjZSggcnNjX21lbSApOwogICAgIHJldHVybiBoQ3Vyc29yOwogfQogCkBAIC0yNTIsNTEgKzIwMiw3MSBAQAogSENVUlNPUiBDcmVhdGVDdXJzb3IoSEFORExFIGluc3RhbmNlLCBzaG9ydCBuWGhvdHNwb3QsIHNob3J0IG5ZaG90c3BvdCwgCiAJc2hvcnQgbldpZHRoLCBzaG9ydCBuSGVpZ2h0LCBMUFNUUiBscEFORGJpdFBsYW5lLCBMUFNUUiBscFhPUmJpdFBsYW5lKQogewotICAgIEhDVVJTT1IgCWhDdXJzb3I7Ci0gICAgQ1VSU09SQUxMT0MJICAqbHBjdXI7Ci0gICAgSERDIAloZGM7Ci0gICAgaW50ICAgICAgICAgYnBsbGVuID0gKG5XaWR0aCArIDcpLzggKiBuSGVpZ2h0OwotICAgIGNoYXIgICAgICAgICp0bXBicGwgPSBtYWxsb2MoYnBsbGVuKTsKLSAgICBpbnQgICAgICAgICBpOworICAgIEhDVVJTT1IJaEN1cnNvcjsKKyAgICBDVVJTT1JBTExPQyAqbHBjdXI7CisgICAgaW50CQlicGwgPSAobldpZHRoICsgMzEpLzMyICogNDsKKyAgICBjaGFyCSp0bXBiaXRzID0gbWFsbG9jKGJwbCAqIG5IZWlnaHQpOworICAgIGNoYXIJKnNyYywgKmRzdDsKKyAgICBpbnQJCWk7CisgICAgWEltYWdlCSppbWFnZTsKKyAgICBQaXhtYXAJcGl4c2hhcGUsIHBpeG1hc2s7CisgICAgZXh0ZXJuIHZvaWQgX1hJbml0SW1hZ2VGdW5jUHRycyggWEltYWdlKiApOwogICAKICAgICBYQ29sb3IgYmtjb2xvcixmZ2NvbG9yOwogICAgIENvbG9ybWFwIGNtYXAgPSBYRGVmYXVsdENvbG9ybWFwKGRpc3BsYXksWERlZmF1bHRTY3JlZW4oZGlzcGxheSkpOwogICAgIAotICAgIGRwcmludGZfcmVzb3VyY2Uoc3RkZGViLCJDcmVhdGVDdXJzb3I6IGluc3Q9JTA0eCBuWGhvdHNwb3Q9JWQgIG5ZaG90c3BvdD0lZCBuV2lkdGg9JWQgbkhlaWdodD0lZFxuIiwgIAorICAgIGRwcmludGZfcmVzb3VyY2Uoc3RkZGViLCAiQ3JlYXRlQ3Vyc29yOiBpbnN0PSUwNHggblhob3RzcG90PSVkICBuWWhvdHNwb3Q9JWQgbldpZHRoPSVkIG5IZWlnaHQ9JWRcbiIsICAKICAgICAgICBpbnN0YW5jZSwgblhob3RzcG90LCBuWWhvdHNwb3QsIG5XaWR0aCwgbkhlaWdodCk7CiAgICAgZHByaW50Zl9yZXNvdXJjZShzdGRkZWIsIkNyZWF0ZUN1cnNvcjogaW5zdD0lMDR4IGxwQU5EYml0UGxhbmU9JXAgbHBYT1JiaXRQbGFuZT0lcFxuIiwKIAlpbnN0YW5jZSwgbHBBTkRiaXRQbGFuZSwgbHBYT1JiaXRQbGFuZSk7CiAKLSAgICBpZiAoIShoZGMgPSBHZXREQyhHZXREZXNrdG9wV2luZG93KCkpKSkgcmV0dXJuIDA7Ci0gICAgaEN1cnNvciA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIHNpemVvZihDVVJTT1JBTExPQykgKyAxMDI0TCk7IAotICAgIGlmIChoQ3Vyc29yID09IChIQ1VSU09SKU5VTEwpIHsKLQlSZWxlYXNlREMoR2V0RGVza3RvcFdpbmRvdygpLCBoZGMpOyAKKyAgICBpbWFnZSA9IFhDcmVhdGVJbWFnZSggZGlzcGxheSwgRGVmYXVsdFZpc3VhbE9mU2NyZWVuKHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIFpQaXhtYXAsIDAsIHRtcGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5XaWR0aCwgbkhlaWdodCwgMzIsIGJwbCApOworICAgIGlmICghaW1hZ2UpIHsKKwlmcmVlICh0bXBiaXRzKTsKIAlyZXR1cm4gMDsKLQl9CisgICAgfQorICAgIGltYWdlLT5ieXRlX29yZGVyID0gTVNCRmlyc3Q7CisgICAgaW1hZ2UtPmJpdG1hcF9iaXRfb3JkZXIgPSBNU0JGaXJzdDsKKyAgICBpbWFnZS0+Yml0bWFwX3VuaXQgPSAxNjsKKyAgICBfWEluaXRJbWFnZUZ1bmNQdHJzKGltYWdlKTsKKworICAgIGhDdXJzb3IgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBzaXplb2YoQ3Vyc29yKSk7IAorICAgIGlmIChoQ3Vyc29yID09IChIQ1VSU09SKU5VTEwpIHsKKwlYRGVzdHJveUltYWdlKGltYWdlKTsKKwlyZXR1cm4gMDsKKyAgICB9CiAgICAgZHByaW50Zl9jdXJzb3Ioc3RkZGViLCJDcmVhdGVDdXJzb3IgQWxsb2MgaEN1cnNvcj0lWFxuIiwgaEN1cnNvcik7CiAgICAgbHBjdXIgPSAoQ1VSU09SQUxMT0MgKilHbG9iYWxMb2NrKGhDdXJzb3IpOwotICAgIG1lbXNldChscGN1ciwgMCwgc2l6ZW9mKENVUlNPUkFMTE9DKSk7Ci0gICAgbHBjdXItPmRlc2NyaXB0b3IuY3VyWEhvdHNwb3QgPSBuWGhvdHNwb3Q7Ci0gICAgbHBjdXItPmRlc2NyaXB0b3IuY3VyWUhvdHNwb3QgPSBuWWhvdHNwb3Q7Ci0gICAgZm9yKGk9MDsgaTxicGxsZW47IGkrKykgdG1wYnBsW2ldID0gfmxwQU5EYml0UGxhbmVbaV07Ci0gICAgbHBjdXItPnBpeG1hc2sgPSBYQ3JlYXRlUGl4bWFwRnJvbUJpdG1hcERhdGEoCi0gICAgCWRpc3BsYXksIERlZmF1bHRSb290V2luZG93KGRpc3BsYXkpLCAKLSAgICAgICAgdG1wYnBsLCBuV2lkdGgsIG5IZWlnaHQsIDEsIDAsIDEpOwotICAgIGZvcihpPTA7IGk8YnBsbGVuOyBpKyspIHRtcGJwbFtpXSBePSBscFhPUmJpdFBsYW5lW2ldOwotICAgIGxwY3VyLT5waXhzaGFwZSA9IFhDcmVhdGVQaXhtYXBGcm9tQml0bWFwRGF0YSgKLSAgICAJZGlzcGxheSwgRGVmYXVsdFJvb3RXaW5kb3coZGlzcGxheSksCi0gICAgICAgIHRtcGJwbCwgbldpZHRoLCBuSGVpZ2h0LCAxLCAwLCAxKTsKKworICAgIGZvcihzcmM9bHBBTkRiaXRQbGFuZSwgZHN0PXRtcGJpdHMrKG5IZWlnaHQtMSkqYnBsOyAKKwlkc3Q+PXRtcGJpdHM7IHNyYys9YnBsLCBkc3QtPWJwbCkKKyAgICAgICAgZm9yKGk9MDsgaTxicGw7IGkrKykgCisgICAgICAgICAgICBkc3RbaV0gPSB+c3JjW2ldOworICAgIHBpeG1hc2sgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIERlZmF1bHRSb290V2luZG93KGRpc3BsYXkpLCAKKwkJCSAgICBuV2lkdGgsIG5IZWlnaHQsIDEpOworICAgIENhbGxUbzMyX0xhcmdlU3RhY2soWFB1dEltYWdlLCAxMCwKKwkJCWRpc3BsYXksIHBpeG1hc2ssIEJJVE1BUF9tb25vR0MsIGltYWdlLCAKKwkJCTAsIDAsIDAsIDAsIG5XaWR0aCwgbkhlaWdodCApOworCisgICAgZm9yKHNyYz1scFhPUmJpdFBsYW5lLCBkc3Q9dG1wYml0cysobkhlaWdodC0xKSpicGw7IAorCWRzdD49dG1wYml0czsgc3JjKz1icGwsIGRzdC09YnBsKQorICAgICAgICBmb3IoaT0wOyBpPGJwbDsgaSsrKSAKKyAgICAgICAgICAgIGRzdFtpXSA9IH5zcmNbaV07CisgICAgcGl4c2hhcGUgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIERlZmF1bHRSb290V2luZG93KGRpc3BsYXkpLCAKKwkJCSAgICAgbldpZHRoLCBuSGVpZ2h0LCAxKTsKKyAgICBDYWxsVG8zMl9MYXJnZVN0YWNrKFhQdXRJbWFnZSwgMTAsCisJCQlkaXNwbGF5LCBwaXhzaGFwZSwgQklUTUFQX21vbm9HQywgaW1hZ2UsIAorCQkJMCwgMCwgMCwgMCwgbldpZHRoLCBuSGVpZ2h0ICk7CiAgICAgWFBhcnNlQ29sb3IoZGlzcGxheSxjbWFwLCIjMDAwMDAwIiwmZmdjb2xvcik7CiAgICAgWFBhcnNlQ29sb3IoZGlzcGxheSxjbWFwLCIjZmZmZmZmIiwmYmtjb2xvcik7Ci0gICAgbHBjdXItPnhjdXJzb3IgPSBYQ3JlYXRlUGl4bWFwQ3Vyc29yKGRpc3BsYXksCi0gCWxwY3VyLT5waXhzaGFwZSwgbHBjdXItPnBpeG1hc2ssIAotIAkmZmdjb2xvciwgJmJrY29sb3IsIGxwY3VyLT5kZXNjcmlwdG9yLmN1clhIb3RzcG90LCAKLSAJbHBjdXItPmRlc2NyaXB0b3IuY3VyWUhvdHNwb3QpOwotICAgIGZyZWUodG1wYnBsKTsKLSAgICBYRnJlZVBpeG1hcChkaXNwbGF5LCBscGN1ci0+cGl4c2hhcGUpOwotICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIGxwY3VyLT5waXhtYXNrKTsKLSAgICBSZWxlYXNlREMoR2V0RGVza3RvcFdpbmRvdygpLCBoZGMpOyAKKyAgICBscGN1ci0+eGN1cnNvciA9IFhDcmVhdGVQaXhtYXBDdXJzb3IoZGlzcGxheSwgcGl4c2hhcGUsIHBpeG1hc2ssCisJCQkgICAgICAgICAgICAgICAgICZmZ2NvbG9yLCAmYmtjb2xvciwgblhob3RzcG90LCBuWWhvdHNwb3QpOworICAgIFhGcmVlUGl4bWFwKGRpc3BsYXksIHBpeHNoYXBlKTsKKyAgICBYRnJlZVBpeG1hcChkaXNwbGF5LCBwaXhtYXNrKTsKICAgICBHbG9iYWxVbmxvY2soaEN1cnNvcik7CisgICAgWERlc3Ryb3lJbWFnZShpbWFnZSk7CiAgICAgcmV0dXJuIGhDdXJzb3I7CiB9CiAKQEAgLTMxNSw3ICsyODUsNyBAQAogCWlmIChzeXN0ZW1fY3Vyc29yW2ldLmN1cnNvciA9PSBoQ3Vyc29yKSByZXR1cm4gVFJVRTsKICAgICB9CiAgICAgbHBjdXIgPSAoQ1VSU09SQUxMT0MgKilHbG9iYWxMb2NrKGhDdXJzb3IpOwotICAgIGlmIChscGN1ci0+aEJpdG1hcCAhPSAoSEJJVE1BUClOVUxMKSBEZWxldGVPYmplY3QobHBjdXItPmhCaXRtYXApOworICAgIFhGcmVlQ3Vyc29yIChkaXNwbGF5LCBscGN1ci0+eGN1cnNvcik7CiAgICAgR2xvYmFsVW5sb2NrKGhDdXJzb3IpOwogICAgIEdsb2JhbEZyZWUoaEN1cnNvcik7CiAgICAgcmV0dXJuIFRSVUU7CkBAIC00MjksNyArMzk5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFoRW1wdHlDdXJzb3IpCiAgICAgICAgICAgICAgICAgaEVtcHR5Q3Vyc29yID0gQ3JlYXRlQ3Vyc29yKCAwLCAxLCAxLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4RkZceEZGIiwgIlx4RkZceEZGIiApOworCQkJCQkgICAgIlx4RkZceEZGXHhGRlx4RkYiLCAiXHhGRlx4RkZceEZGXHhGRiIgKTsKICAgICAgICAgICAgIENVUlNPUl9TZXRDdXJzb3IoIGhFbXB0eUN1cnNvciApOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9kaWFsb2cuYyBiL3dpbmRvd3MvZGlhbG9nLmMKaW5kZXggMWIyOGRhYi4uYjZhM2QzMSAxMDA2NDQKLS0tIGEvd2luZG93cy9kaWFsb2cuYworKysgYi93aW5kb3dzL2RpYWxvZy5jCkBAIC03OCw0MiArNzgsMzYgQEAKICAqIFJldHVybiB0aGUgY2xhc3MgYW5kIHRleHQgb2YgdGhlIGNvbnRyb2wgcG9pbnRlZCB0byBieSBwdHIsCiAgKiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV4dCBjb250cm9sLgogICovCi1zdGF0aWMgRExHQ09OVFJPTEhFQURFUiAqIERJQUxPR19HZXRDb250cm9sKCBETEdDT05UUk9MSEVBREVSICogcHRyLAotCQkJCQkgICAgIGNoYXIgKiogY2xhc3MsIGNoYXIgKiogdGV4dCApCitzdGF0aWMgU0VHUFRSIERJQUxPR19HZXRDb250cm9sKCBTRUdQVFIgcHRyLCBTRUdQVFIgKmNsYXNzLCBTRUdQVFIgKnRleHQgKQogewotICAgIHVuc2lnbmVkIGNoYXIgKiBwID0gKHVuc2lnbmVkIGNoYXIgKilwdHI7CisgICAgdW5zaWduZWQgY2hhciAqYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopUFRSX1NFR19UT19MSU4oIHB0ciApOworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBiYXNlOworCiAgICAgcCArPSAxNDsgIC8qIHNpemUgb2YgY29udHJvbCBoZWFkZXIgKi8KIAogICAgIGlmICgqcCAmIDB4ODApCiAgICAgewotCXN3aXRjaCgqcCsrKQotCXsKLQljYXNlIDB4ODA6ICpjbGFzcyA9ICJCVVRUT04iOyBicmVhazsKLQljYXNlIDB4ODE6ICpjbGFzcyA9ICJFRElUIjsgYnJlYWs7Ci0JY2FzZSAweDgyOiAqY2xhc3MgPSAiU1RBVElDIjsgYnJlYWs7Ci0JY2FzZSAweDgzOiAqY2xhc3MgPSAiTElTVEJPWCI7IGJyZWFrOwotCWNhc2UgMHg4NDogKmNsYXNzID0gIlNDUk9MTEJBUiI7IGJyZWFrOwotCWNhc2UgMHg4NTogKmNsYXNzID0gIkNPTUJPQk9YIjsgYnJlYWs7Ci0JZGVmYXVsdDogICAqY2xhc3MgPSAiIjsgYnJlYWs7Ci0JfQorICAgICAgICAqY2xhc3MgPSBNQUtFSU5UUkVTT1VSQ0UoICpwICk7CisgICAgICAgIHArKzsKICAgICB9CiAgICAgZWxzZSAKICAgICB7Ci0JKmNsYXNzID0gcDsKKwkqY2xhc3MgPSBwdHIgKyAoV09SRCkocCAtIGJhc2UpOwogCXAgKz0gc3RybGVuKHApICsgMTsKICAgICB9CisKICAgICBpZiAoKnAgPT0gMHhmZikKICAgICB7CiAJICAvKiBJbnRlZ2VyIGlkLCBub3QgZG9jdW1lbnRlZCAoPykuIE9ubHkgd29ya3MgZm9yIFNTX0lDT04gY29udHJvbHMgKi8KLQkqdGV4dCA9IChjaGFyICopTUFLRUlOVFJFU09VUkNFKCBwWzFdICsgMjU2KnBbMl0gKTsKKwkqdGV4dCA9IE1BS0VJTlRSRVNPVVJDRSggcFsxXSArIDI1NiAqIHBbMl0gKTsKIAlwICs9IDQ7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0JKnRleHQgPSBwOworCSp0ZXh0ID0gcHRyICsgKFdPUkQpKHAgLSBiYXNlKTsKIAlwICs9IHN0cmxlbihwKSArIDI7CiAgICAgfQotICAgIHJldHVybiAoRExHQ09OVFJPTEhFQURFUiAqKXA7CisgICAgcmV0dXJuIHB0ciArIChXT1JEKShwIC0gYmFzZSk7CiB9CiAKIApAQCAtMTIzLDMyICsxMTcsNTQgQEAKICAqIEZpbGwgYSBETEdURU1QTEFURSBzdHJ1Y3R1cmUgZnJvbSB0aGUgZGlhbG9nIHRlbXBsYXRlLCBhbmQgcmV0dXJuCiAgKiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNvbnRyb2wuCiAgKi8KLXN0YXRpYyBETEdDT05UUk9MSEVBREVSICogRElBTE9HX1BhcnNlVGVtcGxhdGUoIExQQ1NUUiB0ZW1wbGF0ZSwKLQkJCQkJICAgICAgICBETEdURU1QTEFURSAqIHJlc3VsdCApCitzdGF0aWMgU0VHUFRSIERJQUxPR19QYXJzZVRlbXBsYXRlKCBTRUdQVFIgdGVtcGxhdGUsIERMR1RFTVBMQVRFICogcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyICogcCA9ICh1bnNpZ25lZCBjaGFyICopdGVtcGxhdGU7CisgICAgdW5zaWduZWQgY2hhciAqYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopUFRSX1NFR19UT19MSU4odGVtcGxhdGUpOworICAgIHVuc2lnbmVkIGNoYXIgKiBwID0gYmFzZTsKICAKLSAgICByZXN1bHQtPmhlYWRlciA9IChETEdURU1QTEFURUhFQURFUiAqKXA7CisgICAgcmVzdWx0LT5oZWFkZXIgPSAqKERMR1RFTVBMQVRFSEVBREVSICopcDsKICAgICBwICs9IDEzOwogCi0gICAgcmVzdWx0LT5tZW51TmFtZSA9IHA7Ci0gICAgaWYgKCpwID09IDB4ZmYpIHAgKz0gMzsKLSAgICBlbHNlIHAgKz0gc3RybGVuKHApICsgMTsKKyAgICAvKiBHZXQgdGhlIG1lbnUgbmFtZSAqLwogCi0gICAgaWYgKCpwKSByZXN1bHQtPmNsYXNzTmFtZSA9IHA7Ci0gICAgZWxzZSByZXN1bHQtPmNsYXNzTmFtZSA9IERJQUxPR19DTEFTU19OQU1FOwotICAgIHAgKz0gc3RybGVuKHApICsgMTsKLQotICAgIHJlc3VsdC0+Y2FwdGlvbiA9IHA7Ci0gICAgcCArPSBzdHJsZW4ocCkgKyAxOwotCi0gICAgaWYgKHJlc3VsdC0+aGVhZGVyLT5zdHlsZSAmIERTX1NFVEZPTlQpCisgICAgaWYgKCpwID09IDB4ZmYpCiAgICAgewotCXJlc3VsdC0+cG9pbnRTaXplID0gKihXT1JEICopcDsJcCArPSBzaXplb2YoV09SRCk7Ci0JcmVzdWx0LT5mYWNlTmFtZSA9IHA7ICAgICAgICAgICBwICs9IHN0cmxlbihwKSArIDE7CisgICAgICAgIHJlc3VsdC0+bWVudU5hbWUgPSBNQUtFSU5UUkVTT1VSQ0UoIHBbMV0gKyAyNTYgKiBwWzJdICk7CisgICAgICAgIHAgKz0gMzsKKyAgICB9CisgICAgZWxzZSBpZiAoKnApCisgICAgeworICAgICAgICByZXN1bHQtPm1lbnVOYW1lID0gdGVtcGxhdGUgKyAoV09SRCkocCAtIGJhc2UpOworICAgICAgICBwICs9IHN0cmxlbihwKSArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlc3VsdC0+bWVudU5hbWUgPSAwOworICAgICAgICBwKys7CiAgICAgfQogCi0gICAgcmV0dXJuIChETEdDT05UUk9MSEVBREVSICopcDsKKyAgICAvKiBHZXQgdGhlIGNsYXNzIG5hbWUgKi8KKworICAgIGlmICgqcCkgcmVzdWx0LT5jbGFzc05hbWUgPSB0ZW1wbGF0ZSArIChXT1JEKShwIC0gYmFzZSk7CisgICAgZWxzZSByZXN1bHQtPmNsYXNzTmFtZSA9IERJQUxPR19DTEFTU19BVE9NOworICAgIHAgKz0gc3RybGVuKHApICsgMTsKKworICAgIC8qIEdldCB0aGUgd2luZG93IGNhcHRpb24gKi8KKworICAgIHJlc3VsdC0+Y2FwdGlvbiA9IHRlbXBsYXRlICsgKFdPUkQpKHAgLSBiYXNlKTsKKyAgICBwICs9IHN0cmxlbihwKSArIDE7CisKKyAgICAvKiBHZXQgdGhlIGZvbnQgbmFtZSAqLworCisgICAgaWYgKHJlc3VsdC0+aGVhZGVyLnN0eWxlICYgRFNfU0VURk9OVCkKKyAgICB7CisJcmVzdWx0LT5wb2ludFNpemUgPSAqKFdPUkQgKilwOworICAgICAgICBwICs9IHNpemVvZihXT1JEKTsKKwlyZXN1bHQtPmZhY2VOYW1lID0gdGVtcGxhdGUgKyAoV09SRCkocCAtIGJhc2UpOworICAgICAgICBwICs9IHN0cmxlbihwKSArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHRlbXBsYXRlICsgKFdPUkQpKHAgLSBiYXNlKTsKIH0KIAogCkBAIC0xNTcsMTcgKzE3MywyNyBAQAogICovCiBzdGF0aWMgdm9pZCBESUFMT0dfRGlzcGxheVRlbXBsYXRlKCBETEdURU1QTEFURSAqIHJlc3VsdCApCiB7Ci0gICAgZHByaW50Zl9kaWFsb2coc3RkZGViLCAiRElBTE9HICVkLCAlZCwgJWQsICVkXG4iLCByZXN1bHQtPmhlYWRlci0+eCwgcmVzdWx0LT5oZWFkZXItPnksCi0JICAgIHJlc3VsdC0+aGVhZGVyLT5jeCwgcmVzdWx0LT5oZWFkZXItPmN5ICk7Ci0gICAgZHByaW50Zl9kaWFsb2coc3RkZGViLCAiIFNUWUxFICUwOGx4XG4iLCByZXN1bHQtPmhlYWRlci0+c3R5bGUgKTsKLSAgICBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICIgQ0FQVElPTiAnJXMnXG4iLCByZXN1bHQtPmNhcHRpb24gKTsKLSAgICBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICIgQ0xBU1MgJyVzJ1xuIiwgcmVzdWx0LT5jbGFzc05hbWUgKTsKLSAgICBpZiAocmVzdWx0LT5tZW51TmFtZVswXSA9PSAweGZmKQotCWRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiBNRU5VICVkXG4iLCByZXN1bHQtPm1lbnVOYW1lWzFdICsgMjU2KnJlc3VsdC0+bWVudU5hbWVbMl0gKTsKLSAgICBlbHNlIAotICAgICAgICBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICIgTUVOVSAnJXMnXG4iLCByZXN1bHQtPm1lbnVOYW1lICk7Ci0gICAgaWYgKHJlc3VsdC0+aGVhZGVyLT5zdHlsZSAmIERTX1NFVEZPTlQpCi0JZHByaW50Zl9kaWFsb2coc3RkZGViLCAiIEZPTlQgJWQsJyVzJ1xuIiwgcmVzdWx0LT5wb2ludFNpemUsIHJlc3VsdC0+ZmFjZU5hbWUgKTsKKyAgICBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICJESUFMT0cgJWQsICVkLCAlZCwgJWRcbiIsIHJlc3VsdC0+aGVhZGVyLngsIHJlc3VsdC0+aGVhZGVyLnksCisJICAgIHJlc3VsdC0+aGVhZGVyLmN4LCByZXN1bHQtPmhlYWRlci5jeSApOworICAgIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiBTVFlMRSAlMDhseFxuIiwgcmVzdWx0LT5oZWFkZXIuc3R5bGUgKTsKKyAgICBkcHJpbnRmX2RpYWxvZyggc3RkZGViLCAiIENBUFRJT04gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilQVFJfU0VHX1RPX0xJTihyZXN1bHQtPmNhcHRpb24pICk7CisKKyAgICBpZiAoSElXT1JEKHJlc3VsdC0+Y2xhc3NOYW1lKSkKKyAgICAgICAgZHByaW50Zl9kaWFsb2coIHN0ZGRlYiwgIiBDTEFTUyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilQVFJfU0VHX1RPX0xJTihyZXN1bHQtPmNsYXNzTmFtZSkgKTsKKyAgICBlbHNlCisgICAgICAgIGRwcmludGZfZGlhbG9nKCBzdGRkZWIsICIgQ0xBU1MgIyVkXG4iLCBMT1dPUkQocmVzdWx0LT5jbGFzc05hbWUpICk7CisKKyAgICBpZiAoSElXT1JEKHJlc3VsdC0+bWVudU5hbWUpKQorICAgICAgICBkcHJpbnRmX2RpYWxvZyggc3RkZGViLCAiIE1FTlUgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopUFRSX1NFR19UT19MSU4ocmVzdWx0LT5tZW51TmFtZSkgKTsKKyAgICBlbHNlIGlmIChMT1dPUkQocmVzdWx0LT5tZW51TmFtZSkpCisJZHByaW50Zl9kaWFsb2coc3RkZGViLCAiIE1FTlUgJTA0eFxuIiwgTE9XT1JEKHJlc3VsdC0+bWVudU5hbWUpICk7CisKKyAgICBpZiAocmVzdWx0LT5oZWFkZXIuc3R5bGUgJiBEU19TRVRGT05UKQorCWRwcmludGZfZGlhbG9nKCBzdGRkZWIsICIgRk9OVCAlZCwnJXMnXG4iLCByZXN1bHQtPnBvaW50U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopUFRSX1NFR19UT19MSU4ocmVzdWx0LT5mYWNlTmFtZSkgKTsKIH0KIAogCkBAIC0xOTAsMTQgKzIxNiwxNCBAQAogICAgIEhXTkQgaHduZCA9IDA7CiAgICAgSFJTUkMgaFJzcmM7CiAgICAgSEdMT0JBTCBobWVtOwotICAgIExQQ1NUUiBkYXRhOworICAgIFNFR1BUUiBkYXRhOwogCiAgICAgZHByaW50Zl9kaWFsb2coc3RkZGViLCAiQ3JlYXRlRGlhbG9nUGFyYW06ICVkLCUwOGx4LCVkLCUwOGx4LCVsZFxuIiwKIAkgICAgaEluc3QsIGRsZ1RlbXBsYXRlLCBvd25lciwgKERXT1JEKWRsZ1Byb2MsIHBhcmFtICk7CiAgICAgIAogICAgIGlmICghKGhSc3JjID0gRmluZFJlc291cmNlKCBoSW5zdCwgZGxnVGVtcGxhdGUsIFJUX0RJQUxPRyApKSkgcmV0dXJuIDA7CiAgICAgaWYgKCEoaG1lbSA9IExvYWRSZXNvdXJjZSggaEluc3QsIGhSc3JjICkpKSByZXR1cm4gMDsKLSAgICBpZiAoIShkYXRhID0gTG9ja1Jlc291cmNlKCBobWVtICkpKSBod25kID0gMDsKKyAgICBpZiAoIShkYXRhID0gV0lOMTZfTG9ja1Jlc291cmNlKCBobWVtICkpKSBod25kID0gMDsKICAgICBlbHNlIGh3bmQgPSBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKGhJbnN0LCBkYXRhLCBvd25lciwgZGxnUHJvYywgcGFyYW0pOwogICAgIEZyZWVSZXNvdXJjZSggaG1lbSApOwogICAgIHJldHVybiBod25kOwpAQCAtMjA3LDcgKzIzMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVEaWFsb2dJbmRpcmVjdCAgIChVU0VSLjIxOSkKICAqLwotSFdORCBDcmVhdGVEaWFsb2dJbmRpcmVjdCggSElOU1RBTkNFIGhJbnN0LCBMUENTVFIgZGxnVGVtcGxhdGUsCitIV05EIENyZWF0ZURpYWxvZ0luZGlyZWN0KCBISU5TVEFOQ0UgaEluc3QsIFNFR1BUUiBkbGdUZW1wbGF0ZSwKIAkJCSAgIEhXTkQgb3duZXIsIFdORFBST0MgZGxnUHJvYyApCiB7CiAgICAgcmV0dXJuIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oIGhJbnN0LCBkbGdUZW1wbGF0ZSwgb3duZXIsIGRsZ1Byb2MsIDAgKTsKQEAgLTIxNywxNyArMjQzLDE3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtICAgKFVTRVIuMjQyKQogICovCi1IV05EIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oIEhJTlNUQU5DRSBoSW5zdCwgTFBDU1RSIGRsZ1RlbXBsYXRlLAorSFdORCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKCBISU5TVEFOQ0UgaEluc3QsIFNFR1BUUiBkbGdUZW1wbGF0ZSwKIAkJCSAgICAgICAgSFdORCBvd25lciwgV05EUFJPQyBkbGdQcm9jLCBMUEFSQU0gcGFyYW0gKQogewotICAgIEhNRU5VIGhNZW51OworICAgIEhNRU5VIGhNZW51ID0gMDsKICAgICBIRk9OVCBoRm9udCA9IDA7CiAgICAgSFdORCBod25kLCBod25kQ3RybDsKICAgICBSRUNUIHJlY3Q7CiAgICAgV05EICogd25kUHRyOwogICAgIGludCBpOwogICAgIERMR1RFTVBMQVRFIHRlbXBsYXRlOwotICAgIERMR0NPTlRST0xIRUFERVIgKiBoZWFkZXI7CisgICAgU0VHUFRSIGhlYWRlclB0cjsKICAgICBESUFMT0dJTkZPICogZGxnSW5mbzsKICAgICBEV09SRCBleFN0eWxlID0gMDsKICAgICBXT1JEIHhVbml0ID0geEJhc2VVbml0OwpAQCAtMjM2LDQwICsyNjIsMjMgQEAKICAgICAgIC8qIFBhcnNlIGRpYWxvZyB0ZW1wbGF0ZSAqLwogCiAgICAgaWYgKCFkbGdUZW1wbGF0ZSkgcmV0dXJuIDA7Ci0gICAgaGVhZGVyID0gRElBTE9HX1BhcnNlVGVtcGxhdGUoIGRsZ1RlbXBsYXRlLCAmdGVtcGxhdGUgKTsKLSAgICBpZihkZWJ1Z2dpbmdfZGlhbG9nKURJQUxPR19EaXNwbGF5VGVtcGxhdGUoICZ0ZW1wbGF0ZSApOworICAgIGhlYWRlclB0ciA9IERJQUxPR19QYXJzZVRlbXBsYXRlKCBkbGdUZW1wbGF0ZSwgJnRlbXBsYXRlICk7CisgICAgaWYgKGRlYnVnZ2luZ19kaWFsb2cpIERJQUxPR19EaXNwbGF5VGVtcGxhdGUoICZ0ZW1wbGF0ZSApOwogCiAgICAgICAvKiBMb2FkIG1lbnUgKi8KIAotICAgIHN3aXRjaCAodGVtcGxhdGUubWVudU5hbWVbMF0pCi0gICAgewotICAgICAgY2FzZSAweDAwOgotCSAgaE1lbnUgPSAwOwotCSAgYnJlYWs7Ci0gICAgICBjYXNlIDB4ZmY6Ci0JICBoTWVudSA9IExvYWRNZW51KCBoSW5zdCwgTUFLRUlOVFJFU09VUkNFKCB0ZW1wbGF0ZS5tZW51TmFtZVsxXSArCi0JCQkJCQkgICAyNTYqdGVtcGxhdGUubWVudU5hbWVbMl0gKSk7Ci0JICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gY29weSB0aGUgbWVudSBuYW1lIHRvIGEgMTYtYml0IGFjY2Vzc2libGUgYXJlYSAqLwotICAgICAgICAgICAgICBjaGFyIG5hbWVbMjU2XTsKLSAgICAgICAgICAgICAgc3RybmNweSggbmFtZSwgdGVtcGxhdGUubWVudU5hbWUsIDI1NSApOwotICAgICAgICAgICAgICBuYW1lWzI1NV0gPSAnXDAnOwotICAgICAgICAgICAgICBoTWVudSA9IExvYWRNZW51KCBoSW5zdCwgTUFLRV9TRUdQVFIobmFtZSkgKTsKLSAgICAgICAgICB9Ci0JICBicmVhazsKLSAgICB9CisgICAgaWYgKHRlbXBsYXRlLm1lbnVOYW1lKSBoTWVudSA9IExvYWRNZW51KCBoSW5zdCwgdGVtcGxhdGUubWVudU5hbWUgKTsKIAogICAgICAgLyogQ3JlYXRlIGN1c3RvbSBmb250IGlmIG5lZWRlZCAqLwogCi0gICAgaWYgKHRlbXBsYXRlLmhlYWRlci0+c3R5bGUgJiBEU19TRVRGT05UKQorICAgIGlmICh0ZW1wbGF0ZS5oZWFkZXIuc3R5bGUgJiBEU19TRVRGT05UKQogICAgIHsKICAgICAgICAgICAvKiBUaGUgZm9udCBoZWlnaHQgbXVzdCBiZSBuZWdhdGl2ZSBhcyBpdCBpcyBhIHBvaW50IHNpemUgKi8KICAgICAgICAgICAvKiAoc2VlIENyZWF0ZUZvbnQoKSBkb2N1bWVudGF0aW9uIGluIHRoZSBXaW5kb3dzIFNESykuICAgKi8KIAloRm9udCA9IENyZWF0ZUZvbnQoIC10ZW1wbGF0ZS5wb2ludFNpemUsIDAsIDAsIDAsIEZXX0RPTlRDQVJFLAogCQkJICAgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIERFRkFVTFRfQ0hBUlNFVCwgMCwgMCwKLQkJCSAgICBERUZBVUxUX1FVQUxJVFksIEZGX0RPTlRDQVJFLCB0ZW1wbGF0ZS5mYWNlTmFtZSApOworCQkJICAgIERFRkFVTFRfUVVBTElUWSwgRkZfRE9OVENBUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQU1RSKVBUUl9TRUdfVE9fTElOKHRlbXBsYXRlLmZhY2VOYW1lKSApOwogCWlmIChoRm9udCkKIAl7CiAJICAgIFRFWFRNRVRSSUMgdG07CkBAIC0yOTEsMTggKzMwMCwyNiBAQAogICAgICAgLyogQ3JlYXRlIGRpYWxvZyBtYWluIHdpbmRvdyAqLwogCiAgICAgcmVjdC5sZWZ0ID0gcmVjdC50b3AgPSAwOwotICAgIGlmICghKHRlbXBsYXRlLmhlYWRlci0+c3R5bGUgJiBEU19BQlNBTElHTikpCi0JQ2xpZW50VG9TY3JlZW4oIG93bmVyLCAoUE9JTlQgKikmcmVjdCApOwotICAgIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyB0ZW1wbGF0ZS5oZWFkZXItPmN4ICogeFVuaXQgLyA0OwotICAgIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyB0ZW1wbGF0ZS5oZWFkZXItPmN5ICogeVVuaXQgLyA4OwotICAgIGlmICh0ZW1wbGF0ZS5oZWFkZXItPnN0eWxlICYgRFNfTU9EQUxGUkFNRSkgZXhTdHlsZSB8PSBXU19FWF9ETEdNT0RBTEZSQU1FOwotICAgIEFkanVzdFdpbmRvd1JlY3RFeCggJnJlY3QsIHRlbXBsYXRlLmhlYWRlci0+c3R5bGUsIGhNZW51LCBleFN0eWxlICk7CisgICAgcmVjdC5yaWdodCA9IHRlbXBsYXRlLmhlYWRlci5jeCAqIHhVbml0IC8gNDsKKyAgICByZWN0LmJvdHRvbSA9IHRlbXBsYXRlLmhlYWRlci5jeSAqIHlVbml0IC8gODsKKyAgICBpZiAodGVtcGxhdGUuaGVhZGVyLnN0eWxlICYgRFNfTU9EQUxGUkFNRSkgZXhTdHlsZSB8PSBXU19FWF9ETEdNT0RBTEZSQU1FOworICAgIEFkanVzdFdpbmRvd1JlY3RFeCggJnJlY3QsIHRlbXBsYXRlLmhlYWRlci5zdHlsZSwgaE1lbnUsIGV4U3R5bGUgKTsKKyAgICByZWN0LnJpZ2h0IC09IHJlY3QubGVmdDsKKyAgICByZWN0LmJvdHRvbSAtPSByZWN0LnRvcDsKIAotICAgIGh3bmQgPSBDcmVhdGVXaW5kb3dFeCggZXhTdHlsZSwgdGVtcGxhdGUuY2xhc3NOYW1lLCB0ZW1wbGF0ZS5jYXB0aW9uLAotCQkJICAgdGVtcGxhdGUuaGVhZGVyLT5zdHlsZSAmIH5XU19WSVNJQkxFLAotCQkJICAgcmVjdC5sZWZ0ICsgdGVtcGxhdGUuaGVhZGVyLT54ICogeFVuaXQgLyA0LAotCQkJICAgcmVjdC50b3AgKyB0ZW1wbGF0ZS5oZWFkZXItPnkgKiB5VW5pdCAvIDgsCi0JCQkgICByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLAorICAgIGlmICgoSU5UKXRlbXBsYXRlLmhlYWRlci54ID09IENXX1VTRURFRkFVTFQpCisgICAgICAgIHJlY3QubGVmdCA9IHJlY3QudG9wID0gQ1dfVVNFREVGQVVMVDsKKyAgICBlbHNlCisgICAgeworICAgICAgICByZWN0LmxlZnQgKz0gdGVtcGxhdGUuaGVhZGVyLnggKiB4VW5pdCAvIDQ7CisgICAgICAgIHJlY3QudG9wICs9IHRlbXBsYXRlLmhlYWRlci55ICogeVVuaXQgLyA4OworICAgICAgICBpZiAoISh0ZW1wbGF0ZS5oZWFkZXIuc3R5bGUgJiBEU19BQlNBTElHTikpCisgICAgICAgICAgICBDbGllbnRUb1NjcmVlbiggb3duZXIsIChQT0lOVCAqKSZyZWN0ICk7CisgICAgfQorCisgICAgaHduZCA9IENyZWF0ZVdpbmRvd0V4KCBleFN0eWxlLCB0ZW1wbGF0ZS5jbGFzc05hbWUsIHRlbXBsYXRlLmNhcHRpb24sIAorCQkJICAgdGVtcGxhdGUuaGVhZGVyLnN0eWxlICYgfldTX1ZJU0lCTEUsCisJCQkgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSwKIAkJCSAgIG93bmVyLCBoTWVudSwgaEluc3QsIChTRUdQVFIpMCApOwogICAgIGlmICghaHduZCkKICAgICB7CkBAIC0zMjAsNDggKzMzNyw3NiBAQAogICAgIGRsZ0luZm8tPm1zZ1Jlc3VsdCA9IDA7ICAvKiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGRlZmF1bHQgYnV0dG9uIGlkICovCiAgICAgZGxnSW5mby0+aERpYWxvZ0hlYXAgPSAwOwogCi0gICAgZm9yIChpID0gMDsgaSA8IHRlbXBsYXRlLmhlYWRlci0+bmJJdGVtczsgaSsrKQorICAgIGZvciAoaSA9IDA7IGkgPCB0ZW1wbGF0ZS5oZWFkZXIubmJJdGVtczsgaSsrKQogICAgIHsKLQlETEdDT05UUk9MSEVBREVSICogbmV4dF9oZWFkZXI7Ci0JTFBTVFIgY2xhc3MsIHRleHQ7CisJRExHQ09OVFJPTEhFQURFUiAqaGVhZGVyOworCVNFR1BUUiBjbGFzc05hbWUsIHdpbk5hbWU7CiAgICAgICAgIEhXTkQgaHduZERlZkJ1dHRvbiA9IDA7Ci0JbmV4dF9oZWFkZXIgPSBESUFMT0dfR2V0Q29udHJvbCggaGVhZGVyLCAmY2xhc3MsICZ0ZXh0ICk7CisgICAgICAgIGNoYXIgYnVmZmVyWzEwXTsKIAotCWRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiAgICVzICIsIGNsYXNzKTsKLQlpZiAoKGludCl0ZXh0ICYgMHhmZmZmMDAwMCkgCi0JICBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsIiclcyciLCB0ZXh0KTsKLQllbHNlIAotCSAgZHByaW50Zl9kaWFsb2coc3RkZGViLCIlNFgiLCAoaW50KXRleHQgJiAweGZmZmYpOworICAgICAgICBoZWFkZXIgPSAoRExHQ09OVFJPTEhFQURFUiAqKVBUUl9TRUdfVE9fTElOKCBoZWFkZXJQdHIgKTsKKwloZWFkZXJQdHIgPSBESUFMT0dfR2V0Q29udHJvbCggaGVhZGVyUHRyLCAmY2xhc3NOYW1lLCAmd2luTmFtZSApOworCisgICAgICAgIGlmICghSElXT1JEKGNsYXNzTmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChMT1dPUkQoY2xhc3NOYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgMHg4MDogc3RyY3B5KCBidWZmZXIsICJCVVRUT04iICk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDgxOiBzdHJjcHkoIGJ1ZmZlciwgIkVESVQiICk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAweDgyOiBzdHJjcHkoIGJ1ZmZlciwgIlNUQVRJQyIgKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4ODM6IHN0cmNweSggYnVmZmVyLCAiTElTVEJPWCIgKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4ODQ6IHN0cmNweSggYnVmZmVyLCAiU0NST0xMQkFSIiApOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHg4NTogc3RyY3B5KCBidWZmZXIsICJDT01CT0JPWCIgKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgIGJ1ZmZlclswXSA9ICdcMCc7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xhc3NOYW1lID0gTUFLRV9TRUdQVFIoYnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChISVdPUkQoY2xhc3NOYW1lKSkKKyAgICAgICAgICAgIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiAgICVzICIsIChjaGFyKilQVFJfU0VHX1RPX0xJTihjbGFzc05hbWUpKTsKKyAgICAgICAgZWxzZSBkcHJpbnRmX2RpYWxvZyhzdGRkZWIsICIgICAlMDR4ICIsIExPV09SRChjbGFzc05hbWUpICk7CisJaWYgKEhJV09SRCh3aW5OYW1lKSkKKyAgICAgICAgICAgIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwiJyVzJyIsIChjaGFyICopUFRSX1NFR19UT19MSU4od2luTmFtZSkgKTsKKwllbHNlIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwiJTA0eCIsIExPV09SRCh3aW5OYW1lKSApOworCiAJZHByaW50Zl9kaWFsb2coc3RkZGViLCIgJWQsICVkLCAlZCwgJWQsICVkLCAlMDhseFxuIiwgCi0JCWhlYWRlci0+aWQsIGhlYWRlci0+eCwgaGVhZGVyLT55LCAKLQkJaGVhZGVyLT5jeCwgaGVhZGVyLT5jeSwgaGVhZGVyLT5zdHlsZSApOworICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmlkLCBoZWFkZXItPngsIGhlYWRlci0+eSwgCisgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+Y3gsIGhlYWRlci0+Y3ksIGhlYWRlci0+c3R5bGUgKTsKIAotCWlmICgoc3RyY21wKGNsYXNzLCAiRURJVCIpID09IDApICYmCi0JICAgICAgICAgICAgKChoZWFkZXItPnN0eWxlICYgRFNfTE9DQUxFRElUKSAhPSBEU19MT0NBTEVESVQpKSB7Ci0JICAgIGlmICghZGxnSW5mby0+aERpYWxvZ0hlYXApIHsKKwlpZiAoSElXT1JEKGNsYXNzTmFtZSkgJiYKKyAgICAgICAgICAgICFzdHJjbXAoIChjaGFyICopUFRSX1NFR19UT19MSU4oY2xhc3NOYW1lKSwgIkVESVQiKSAmJgorICAgICAgICAgICAgKChoZWFkZXItPnN0eWxlICYgRFNfTE9DQUxFRElUKSAhPSBEU19MT0NBTEVESVQpKQorICAgICAgICB7CisJICAgIGlmICghZGxnSW5mby0+aERpYWxvZ0hlYXApCisgICAgICAgICAgICB7CiAJCWRsZ0luZm8tPmhEaWFsb2dIZWFwID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgMHgxMDAwMCk7Ci0JCWlmICghZGxnSW5mby0+aERpYWxvZ0hlYXApIHsKKwkJaWYgKCFkbGdJbmZvLT5oRGlhbG9nSGVhcCkKKyAgICAgICAgICAgICAgICB7CiAJCSAgICBmcHJpbnRmKHN0ZGVyciwiQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbTogSW5zdWZmaWNpZW50IG1lbW9yeSB0byBjcmVhdGUgaGVhcCBmb3IgZWRpdCBjb250cm9sXG4iKTsKIAkJICAgIGNvbnRpbnVlOwogCQl9CiAJCUxvY2FsSW5pdChkbGdJbmZvLT5oRGlhbG9nSGVhcCwgMCwgMHhmZmZmKTsKIAkgICAgfQotCSAgICBoZWFkZXItPnN0eWxlIHw9IFdTX0NISUxEOwotCSAgICBod25kQ3RybCA9IENyZWF0ZVdpbmRvd0V4KCBXU19FWF9OT1BBUkVOVE5PVElGWSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGV4dCwgaGVhZGVyLT5zdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+eCAqIHhVbml0IC8gNCwgaGVhZGVyLT55ICogeVVuaXQgLyA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5jeCAqIHhVbml0IC8gNCwgaGVhZGVyLT5jeSAqIHlVbml0IC8gOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3bmQsIGhlYWRlci0+aWQsIGRsZ0luZm8tPmhEaWFsb2dIZWFwLCAoU0VHUFRSKTAgKTsKKwkgICAgaHduZEN0cmwgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT1BBUkVOVE5PVElGWSwgY2xhc3NOYW1lLCB3aW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPnN0eWxlIHwgV1NfQ0hJTEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+eCAqIHhVbml0IC8gNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT55ICogeVVuaXQgLyA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmN4ICogeFVuaXQgLyA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmN5ICogeVVuaXQgLyA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBoZWFkZXItPmlkLCBkbGdJbmZvLT5oRGlhbG9nSGVhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFR1BUUikwICk7CiAJfQogCWVsc2UKICAgICAgICAgewotCSAgICBoZWFkZXItPnN0eWxlIHw9IFdTX0NISUxEOwotCSAgICBod25kQ3RybCA9IENyZWF0ZVdpbmRvd0V4KCBXU19FWF9OT1BBUkVOVE5PVElGWSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0ZXh0LCBoZWFkZXItPnN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPnggKiB4VW5pdCAvIDQsIGhlYWRlci0+eSAqIHlVbml0IC8gOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5jeCAqIHhVbml0IC8gNCwgaGVhZGVyLT5jeSAqIHlVbml0IC8gOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHduZCwgaGVhZGVyLT5pZCwgaEluc3QsIChTRUdQVFIpMCApOworCSAgICBod25kQ3RybCA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PUEFSRU5UTk9USUZZLCBjbGFzc05hbWUsIHdpbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+c3R5bGUgfCBXU19DSElMRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT54ICogeFVuaXQgLyA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPnkgKiB5VW5pdCAvIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+Y3ggKiB4VW5pdCAvIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+Y3kgKiB5VW5pdCAvIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3bmQsIGhlYWRlci0+aWQsIGhJbnN0LCAoU0VHUFRSKTAgKTsKIAl9CisKICAgICAgICAgLyogTWFrZSB0aGUgY29udHJvbCBsYXN0IG9uZSBpbiBaLW9yZGVyLCBzbyB0aGF0IGNvbnRyb2xzIHJlbWFpbgogICAgICAgICAgICBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGNyZWF0ZWQgKi8KIAlTZXRXaW5kb3dQb3MoIGh3bmRDdHJsLCBIV05EX0JPVFRPTSwgMCwgMCwgMCwgMCwKQEAgLTM3Niw5ICs0MjEsOCBAQAogICAgICAgICAgICAgaWYgKGh3bmREZWZCdXR0b24pCiAgICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UoIGh3bmREZWZCdXR0b24sIEJNX1NFVFNUWUxFLCBCU19QVVNIQlVUVE9OLCBGQUxTRSk7CiAgICAgICAgICAgICBod25kRGVmQnV0dG9uID0gaHduZEN0cmw7Ci0gICAgICAgICAgICBkbGdJbmZvLT5tc2dSZXN1bHQgPSBoZWFkZXItPmlkOworICAgICAgICAgICAgZGxnSW5mby0+bXNnUmVzdWx0ID0gR2V0V2luZG93V29yZCggaHduZEN0cmwsIEdXV19JRCApOwogICAgICAgICB9Ci0JaGVhZGVyID0gbmV4dF9oZWFkZXI7CiAgICAgfSAgICAKIAogICAgIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiBFTkRcbiIgKTsKQEAgLTM5OCw3ICs0NDIsNyBAQAogCVNlbmRNZXNzYWdlKCBod25kLCBXTV9TRVRGT05ULCBkbGdJbmZvLT5oVXNlckZvbnQsIDAgKTsKICAgICBpZiAoU2VuZE1lc3NhZ2UoIGh3bmQsIFdNX0lOSVRESUFMT0csIGRsZ0luZm8tPmh3bmRGb2N1cywgcGFyYW0gKSkKIAlTZXRGb2N1cyggZGxnSW5mby0+aHduZEZvY3VzICk7Ci0gICAgaWYgKHRlbXBsYXRlLmhlYWRlci0+c3R5bGUgJiBXU19WSVNJQkxFKSBTaG93V2luZG93KGh3bmQsIFNXX1NIT1cpOworICAgIGlmICh0ZW1wbGF0ZS5oZWFkZXIuc3R5bGUgJiBXU19WSVNJQkxFKSBTaG93V2luZG93KGh3bmQsIFNXX1NIT1cpOwogICAgIHJldHVybiBod25kOwogfQogCkBAIC00ODUsOSArNTI5LDkgQEAKIAkJCSAgICBIV05EIG93bmVyLCBXTkRQUk9DIGRsZ1Byb2MsIExQQVJBTSBwYXJhbSApCiB7CiAgICAgSFdORCBod25kOwotICAgIExQQ1NUUiBwdHI7CisgICAgU0VHUFRSIHB0cjsKIAotICAgIGlmICghKHB0ciA9IEdsb2JhbExvY2soIGRsZ1RlbXBsYXRlICkpKSByZXR1cm4gLTE7CisgICAgaWYgKCEocHRyID0gV0lOMTZfR2xvYmFsTG9jayggZGxnVGVtcGxhdGUgKSkpIHJldHVybiAtMTsKICAgICBod25kID0gQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSggaEluc3QsIHB0ciwgb3duZXIsIGRsZ1Byb2MsIHBhcmFtICk7CiAgICAgR2xvYmFsVW5sb2NrKCBkbGdUZW1wbGF0ZSApOwogICAgIGlmIChod25kKSByZXR1cm4gRElBTE9HX0RvRGlhbG9nQm94KCBod25kLCBvd25lciApOwpAQCAtNDk2LDI5ICs1NDAsNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIKLSAqICBsaWtlIERpYWxvZ0JveEluZGlyZWN0UGFyYW0sIGJ1dCBleHBlY3RzIHBvaW50ZXIgdG8gdGVtcGxhdGUKLSAqLwotaW50IERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIoSElOU1RBTkNFIGhJbnN0LExQQ1NUUiBkbGdUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXTkQgb3duZXIsIFdORFBST0MgZGxnUHJvYywgTFBBUkFNIHBhcmFtKQotewotICAgIEhXTkQgaHduZDsKLSAgICBod25kID0gQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSggaEluc3QsIGRsZ1RlbXBsYXRlLCBvd25lciwgZGxnUHJvYywgcGFyYW0gKTsKLSAgICBpZiAoaHduZCkgcmV0dXJuIERJQUxPR19Eb0RpYWxvZ0JveCggaHduZCwgb3duZXIgKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIERpYWxvZ0JveEluZGlyZWN0UHRyCi0gKiAgbGlrZSBEaWFsb2dCb3hJbmRpcmVjdCwgYnV0IGV4cGVjdHMgcG9pbnRlciB0byB0ZW1wbGF0ZQotICovCi1pbnQgRGlhbG9nQm94SW5kaXJlY3RQdHIoIEhJTlNUQU5DRSBoSW5zdCwgTFBDU1RSIGRsZ1RlbXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBIV05EIG93bmVyLCBXTkRQUk9DIGRsZ1Byb2MpCi17Ci0gICAgcmV0dXJuIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHIoaEluc3QsIGRsZ1RlbXBsYXRlLCBvd25lciwgZGxnUHJvYywgMCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEVuZERpYWxvZyAgIChVU0VSLjg4KQogICovCiB2b2lkIEVuZERpYWxvZyggSFdORCBod25kLCBzaG9ydCByZXR2YWwgKQpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZGkuYyBiL3dpbmRvd3MvbWRpLmMKaW5kZXggYWE2N2JmMC4uZGU3ZGVkNyAxMDA2NDQKLS0tIGEvd2luZG93cy9tZGkuYworKysgYi93aW5kb3dzL21kaS5jCkBAIC0xMDcsOCArMTA3LDcgQEAKICAgICBjcy0+eCA9IGNpLT5uQWN0aXZlQ2hpbGRyZW4gKiBzcGFjaW5nOyAgCiAgICAgY3MtPnkgPSBjaS0+bkFjdGl2ZUNoaWxkcmVuICogc3BhY2luZzsKIAotICAgIGh3bmQgPSBDcmVhdGVXaW5kb3dFeCgwLCBQVFJfU0VHX1RPX0xJTihjcy0+c3pDbGFzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9TRUdfVE9fTElOKGNzLT5zelRpdGxlKSwgCisgICAgaHduZCA9IENyZWF0ZVdpbmRvdyggY3MtPnN6Q2xhc3MsIGNzLT5zelRpdGxlLAogCQkJICBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX0NBUFRJT04gfCBXU19DTElQU0lCTElOR1MgfAogCQkJICBXU19NQVhJTUlaRUJPWCB8IFdTX01JTklNSVpFQk9YIHwgV1NfU1lTTUVOVSB8CiAJCQkgIFdTX1RISUNLRlJBTUUgfCBXU19WSVNJQkxFIHwgY3MtPnN0eWxlLApkaWZmIC0tZ2l0IGEvd2luZG93cy9tc2dib3guYyBiL3dpbmRvd3MvbXNnYm94LmMKaW5kZXggYzA2NGY2ZC4uMDViYzA5YyAxMDA2NDQKLS0tIGEvd2luZG93cy9tc2dib3guYworKysgYi93aW5kb3dzL21zZ2JveC5jCkBAIC03LDggKzcsMTAgQEAKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJkbGdzLmgiCi0jaW5jbHVkZSAiZGlhbG9nLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCiAjaW5jbHVkZSAic2VsZWN0b3JzLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJyZWxheTMyLmgiCiAjaW5jbHVkZSAiLi4vcmMvc3lzcmVzLmgiCiAjaW5jbHVkZSAidGFzay5oIgogCkBAIC0xNzUsMTUgKzE3NywzNSBAQAogCiBpbnQgTWVzc2FnZUJveChIV05EIGhXbmQsIExQU1RSIHRleHQsIExQU1RSIHRpdGxlLCBXT1JEIHR5cGUpCiB7Ci0gIE1TR0JPWCBtYm94OworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgTVNHQk9YIG1ib3g7CisgICAgaW50IHJldDsKKyAgICBEV09SRCBXaW5lUHJvYyxXaW4xNlByb2MsV2luMzJQcm9jOworICAgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOwogCi0gIG1ib3gudGl0bGUgPSB0aXRsZTsKLSAgbWJveC50ZXh0ICA9IHRleHQ7Ci0gIG1ib3gudHlwZSAgPSB0eXBlOwotICByZXR1cm4gRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cihHZXRXaW5kb3dXb3JkKGhXbmQsIEdXV19ISU5TVEFOQ0UpLAotCQkJCSAgIHN5c3Jlc19ESUFMT0dfTVNHQk9YLCBoV25kLAotCQkJCSAgIEdldFduZFByb2NFbnRyeTE2KCJTeXN0ZW1NZXNzYWdlQm94UHJvYyIpLAotCQkJCSAgIChMT05HKSZtYm94KTsKKyAgICBtYm94LnRpdGxlID0gdGl0bGU7CisgICAgbWJveC50ZXh0ICA9IHRleHQ7CisgICAgbWJveC50eXBlICA9IHR5cGU7CisKKyAgICBpZiAoIWluaXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgV2luZVByb2M9KERXT1JEKVN5c3RlbU1lc3NhZ2VCb3hQcm9jOworICAgICAgICBXaW4xNlByb2M9KERXT1JEKUdldFduZFByb2NFbnRyeTE2KCJTeXN0ZW1NZXNzYWdlQm94UHJvYyIpOworICAgICAgICBXaW4zMlByb2M9KERXT1JEKVJFTEFZMzJfR2V0RW50cnlQb2ludCgiV0lOUFJPQ1MzMiIsIlN5c3RlbU1lc3NhZ2VCb3hQcm9jIiwwKTsKKyAgICAgICAgQUxJQVNfUmVnaXN0ZXJBbGlhcyhXaW5lUHJvYyxXaW4xNlByb2MsV2luMzJQcm9jKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQ9MTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSBHTE9CQUxfQ3JlYXRlQmxvY2soIEdNRU1fRklYRUQsIHN5c3Jlc19ESUFMT0dfTVNHQk9YLmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzcmVzX0RJQUxPR19NU0dCT1guc2l6ZSwgR2V0Q3VycmVudFBEQigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCBUUlVFLCBOVUxMICk7CisgICAgaWYgKCFoYW5kbGUpIHJldHVybiAwOworICAgIHJldCA9IERpYWxvZ0JveEluZGlyZWN0UGFyYW0oIEdldFdpbmRvd1dvcmQoaFduZCwgR1dXX0hJTlNUQU5DRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBoV25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFduZFByb2NFbnRyeTE2KCJTeXN0ZW1NZXNzYWdlQm94UHJvYyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMT05HKSZtYm94ICk7CisgICAgR0xPQkFMX0ZyZWVCbG9jayggaGFuZGxlICk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbi5jIGIvd2luZG93cy93aW4uYwppbmRleCA1ODc0ZWNiLi5kN2UyZDJkIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbi5jCisrKyBiL3dpbmRvd3Mvd2luLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ3JlYXRlV2luZG93ICAgKFVTRVIuNDEpCiAgKi8KLUhXTkQgQ3JlYXRlV2luZG93KCBMUFNUUiBjbGFzc05hbWUsIExQU1RSIHdpbmRvd05hbWUsCitIV05EIENyZWF0ZVdpbmRvdyggU0VHUFRSIGNsYXNzTmFtZSwgU0VHUFRSIHdpbmRvd05hbWUsCiAJCSAgIERXT1JEIHN0eWxlLCBzaG9ydCB4LCBzaG9ydCB5LCBzaG9ydCB3aWR0aCwgc2hvcnQgaGVpZ2h0LAogCQkgICBIV05EIHBhcmVudCwgSE1FTlUgbWVudSwgSEFORExFIGluc3RhbmNlLCBTRUdQVFIgZGF0YSApIAogewpAQCAtMjkxLDcgKzI5MSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVXaW5kb3dFeCAgIChVU0VSLjQ1MikKICAqLwotSFdORCBDcmVhdGVXaW5kb3dFeCggRFdPUkQgZXhTdHlsZSwgTFBTVFIgY2xhc3NOYW1lLCBMUFNUUiB3aW5kb3dOYW1lLAorSFdORCBDcmVhdGVXaW5kb3dFeCggRFdPUkQgZXhTdHlsZSwgU0VHUFRSIGNsYXNzTmFtZSwgU0VHUFRSIHdpbmRvd05hbWUsCiAJCSAgICAgRFdPUkQgc3R5bGUsIHNob3J0IHgsIHNob3J0IHksIHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQsCiAJCSAgICAgSFdORCBwYXJlbnQsIEhNRU5VIG1lbnUsIEhBTkRMRSBpbnN0YW5jZSwgU0VHUFRSIGRhdGEgKSAKIHsKQEAgLTMwMCwzMSArMzAwLDI1IEBACiAgICAgV05EICp3bmRQdHI7CiAgICAgUE9JTlQgbWF4U2l6ZSwgbWF4UG9zLCBtaW5UcmFjaywgbWF4VHJhY2s7CiAgICAgQ1JFQVRFU1RSVUNUIGNyZWF0ZVN0cnVjdDsKLSAgICBIQU5ETEUgaHdpbk5hbWUsIGhjbGFzc05hbWU7CiAgICAgaW50IHdtY3JlYXRlOwogICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbl9hdHRyOwogCiAgICAgLyogRklYTUU6IHdpbmRvd05hbWUgYW5kIGNsYXNzTmFtZSBzaG91bGQgYmUgU0VHUFRScyAqLwogCisgICAgZHByaW50Zl93aW4oIHN0ZGRlYiwgIkNyZWF0ZVdpbmRvd0V4OiAiICk7CiAgICAgaWYgKEhJV09SRCh3aW5kb3dOYW1lKSkKLQlkcHJpbnRmX3dpbiggc3RkZGViLCAiQ3JlYXRlV2luZG93RXg6ICclcycgIiwgd2luZG93TmFtZSApOworCWRwcmludGZfd2luKCBzdGRkZWIsICInJXMnICIsIChjaGFyICopUFRSX1NFR19UT19MSU4od2luZG93TmFtZSkgKTsKICAgICBlbHNlCi0JZHByaW50Zl93aW4oIHN0ZGRlYiwgIkNyZWF0ZVdpbmRvd0V4OiAlMDR4ICIsIExPV09SRCh3aW5kb3dOYW1lKSApOworCWRwcmludGZfd2luKCBzdGRkZWIsICIlMDR4ICIsIExPV09SRCh3aW5kb3dOYW1lKSApOwogICAgIGlmIChISVdPUkQoY2xhc3NOYW1lKSkKLSAgICAgICAgZHByaW50Zl93aW4oIHN0ZGRlYiwgIiclcycgIiwgY2xhc3NOYW1lICk7CisgICAgICAgIGRwcmludGZfd2luKCBzdGRkZWIsICInJXMnICIsIChjaGFyICopUFRSX1NFR19UT19MSU4oY2xhc3NOYW1lKSApOwogICAgIGVsc2UKICAgICAgICAgZHByaW50Zl93aW4oIHN0ZGRlYiwgIiUwNHggIiwgTE9XT1JEKGNsYXNzTmFtZSkgKTsKIAogICAgIGRwcmludGZfd2luKHN0ZGRlYiwgIiUwOGx4ICUwOGx4ICVkLCVkICVkeCVkICUwNHggJTA0eCAlMDR4ICUwOGx4XG4iLAogCQlleFN0eWxlLCBzdHlsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwKIAkJcGFyZW50LCBtZW51LCBpbnN0YW5jZSwgZGF0YSk7Ci0gICAgLyogJ3NvdW5kcmVjLmV4ZScgaGFzIG5lZ2F0aXZlIHBvc2l0aW9uICEgCi0gICAgICAgV2h5ID8gRm9yIG5vdywgaGVyZSBhIHBhdGNoIDogKi8KLSAgICBpZiAoSElXT1JEKGNsYXNzTmFtZSkgJiYgIXN0cmNtcChjbGFzc05hbWUsICJTb3VuZFJlYyIpKQotICAgIHsKLQlpZiAoeCA8IDApIHggPSAwOwotCWlmICh5IDwgMCkgeSA9IDA7Ci0gICAgfQorCiAgICAgaWYgKHggPT0gQ1dfVVNFREVGQVVMVCkgeCA9IHkgPSAwOwogICAgIGlmICh3aWR0aCA9PSBDV19VU0VERUZBVUxUKQogICAgIHsKQEAgLTM1MCwxNSArMzQ0LDE0IEBACiAJfQogICAgIH0KIAorICAgIGlmICghKGNsYXNzID0gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCBjbGFzc05hbWUsIEdldEV4ZVB0cihpbnN0YW5jZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGFzc1B0ciApKSkKICAgICB7Ci0gICAgICAgIC8qIEZJWE1FISEgKi8KLSAgICAgICAgY2hhciBidWZmWzI1Nl07Ci0gICAgICAgIGlmIChISVdPUkQoY2xhc3NOYW1lKSkgc3RyY3B5KCBidWZmLCBjbGFzc05hbWUgKTsKLSAgICAgICAgaWYgKCEoY2xhc3MgPSBDTEFTU19GaW5kQ2xhc3NCeU5hbWUoIEhJV09SRChjbGFzc05hbWUpID8gTUFLRV9TRUdQVFIoYnVmZikgOiAoU0VHUFRSKWNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0RXhlUHRyKCBpbnN0YW5jZSApLCAmY2xhc3NQdHIgKSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDcmVhdGVXaW5kb3cgQkFEIENMQVNTTkFNRSAnJXMnICFcbiIsIGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ3JlYXRlV2luZG93IEJBRCBDTEFTU05BTUUgIiApOworICAgICAgICBpZiAoSElXT1JEKGNsYXNzTmFtZSkpIGZwcmludGYoIHN0ZGVyciwgIiclcydcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopUFRSX1NFR19UT19MSU4oY2xhc3NOYW1lKSApOworICAgICAgICBlbHNlIGZwcmludGYoIHN0ZGVyciwgIiUwNHhcbiIsIExPV09SRChjbGFzc05hbWUpICk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgICAgLyogQ29ycmVjdCB0aGUgd2luZG93IHN0eWxlICovCkBAIC0zOTUsNyArMzg4LDcgQEAKICAgICB3bmRQdHItPmh3bmRQcmV2QWN0aXZlID0gMDsKICAgICB3bmRQdHItPmh3bmRMYXN0QWN0aXZlID0gaHduZDsKICAgICB3bmRQdHItPmxwZm5XbmRQcm9jICAgID0gY2xhc3NQdHItPndjLmxwZm5XbmRQcm9jOwotICAgIHduZFB0ci0+ZHdTdHlsZSAgICAgICAgPSBzdHlsZTsKKyAgICB3bmRQdHItPmR3U3R5bGUgICAgICAgID0gc3R5bGUgJiB+V1NfVklTSUJMRTsKICAgICB3bmRQdHItPmR3RXhTdHlsZSAgICAgID0gZXhTdHlsZTsKICAgICB3bmRQdHItPndJRG1lbnUgICAgICAgID0gMDsKICAgICB3bmRQdHItPmhUZXh0ICAgICAgICAgID0gMDsKQEAgLTQ2Miw3ICs0NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXRXZlbnRNYXNrIHwgQ1dPdmVycmlkZVJlZGlyZWN0IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0NvbG9ybWFwIHwgQ1dDdXJzb3IgfCBDV1NhdmVVbmRlciB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dCYWNraW5nU3RvcmUsICZ3aW5fYXR0ciApOwotICAgICAgICBYU3RvcmVOYW1lKCBkaXNwbGF5LCB3bmRQdHItPndpbmRvdywgd2luZG93TmFtZSApOworICAgICAgICBYU3RvcmVOYW1lKCBkaXNwbGF5LCB3bmRQdHItPndpbmRvdywgUFRSX1NFR19UT19MSU4od2luZG93TmFtZSkgKTsKICAgICAgICAgRVZFTlRfUmVnaXN0ZXJXaW5kb3coIHduZFB0ci0+d2luZG93LCBod25kICk7CiAgICAgICAgIEdsb2JhbFVubG9jayggaEN1cnNvciApOwogICAgIH0KQEAgLTQ4NiwzMyArNDc5LDEzIEBACiAgICAgY3JlYXRlU3RydWN0LnggICAgICAgICAgICAgID0geDsKICAgICBjcmVhdGVTdHJ1Y3QueSAgICAgICAgICAgICAgPSB5OwogICAgIGNyZWF0ZVN0cnVjdC5zdHlsZSAgICAgICAgICA9IHN0eWxlOworICAgIGNyZWF0ZVN0cnVjdC5scHN6TmFtZSAgICAgICA9IHdpbmRvd05hbWU7CisgICAgY3JlYXRlU3RydWN0Lmxwc3pDbGFzcyAgICAgID0gY2xhc3NOYW1lOwogICAgIGNyZWF0ZVN0cnVjdC5kd0V4U3R5bGUgICAgICA9IDA7Ci0gICAgaWYgKEhJV09SRChjbGFzc05hbWUpKQotICAgIHsKLSAgICAgICAgaGNsYXNzTmFtZSA9IFVTRVJfSEVBUF9BTExPQyggc3RybGVuKGNsYXNzTmFtZSkrMSApOwotICAgICAgICBzdHJjcHkoIFVTRVJfSEVBUF9MSU5fQUREUihoY2xhc3NOYW1lKSwgY2xhc3NOYW1lICk7Ci0gICAgICAgIGNyZWF0ZVN0cnVjdC5scHN6Q2xhc3MgPSAoTFBTVFIpVVNFUl9IRUFQX1NFR19BRERSKGhjbGFzc05hbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBoY2xhc3NOYW1lID0gMDsKLSAgICAgICAgY3JlYXRlU3RydWN0Lmxwc3pDbGFzcyA9IGNsYXNzTmFtZTsKLSAgICB9Ci0KLSAgICBpZiAoSElXT1JEKHdpbmRvd05hbWUpKQotICAgIHsKLSAgICAgICAgaHdpbk5hbWUgPSBVU0VSX0hFQVBfQUxMT0MoIHN0cmxlbih3aW5kb3dOYW1lKSsxICk7Ci0gICAgICAgIHN0cmNweSggVVNFUl9IRUFQX0xJTl9BRERSKGh3aW5OYW1lKSwgd2luZG93TmFtZSApOwotICAgICAgICBjcmVhdGVTdHJ1Y3QubHBzek5hbWUgPSAoTFBTVFIpVVNFUl9IRUFQX1NFR19BRERSKGh3aW5OYW1lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaHdpbk5hbWUgPSAwOwotICAgICAgICBjcmVhdGVTdHJ1Y3QubHBzek5hbWUgPSB3aW5kb3dOYW1lOwotICAgIH0KIAogICAgIHdtY3JlYXRlID0gU2VuZE1lc3NhZ2UoIGh3bmQsIFdNX05DQ1JFQVRFLCAwLCBNQUtFX1NFR1BUUigmY3JlYXRlU3RydWN0KSApOwotICAgIGlmICghd21jcmVhdGUpIHsKKyAgICBpZiAoIXdtY3JlYXRlKQorICAgIHsKIAlkcHJpbnRmX3dpbihzdGRkZWIsIkNyZWF0ZVdpbmRvd0V4OiBXTV9OQ0NSRUFURSByZXR1cm4gMFxuIik7CiAJd21jcmVhdGUgPSAtMTsKICAgICB9CkBAIC01MjMsOSArNDk2LDYgQEAKIAl3bWNyZWF0ZSA9IFNlbmRNZXNzYWdlKGh3bmQsIFdNX0NSRUFURSwgMCwgTUFLRV9TRUdQVFIoJmNyZWF0ZVN0cnVjdCkpOwogICAgIH0KIAotICAgIGlmIChoY2xhc3NOYW1lKSBVU0VSX0hFQVBfRlJFRSggaGNsYXNzTmFtZSApOwotICAgIGlmIChod2luTmFtZSkgVVNFUl9IRUFQX0ZSRUUoIGh3aW5OYW1lICk7Ci0KICAgICBpZiAod21jcmVhdGUgPT0gLTEpCiAgICAgewogCSAgLyogQWJvcnQgd2luZG93IGNyZWF0aW9uICovCkBAIC01MzgsOSArNTA4LDI1IEBACiAgICAgaWYgKHN0eWxlICYgV1NfU1lTTUVOVSkgd25kUHRyLT5oU3lzTWVudSA9IENvcHlTeXNNZW51KCk7CiAKICAgICBXSU5fU2VuZFBhcmVudE5vdGlmeSggaHduZCwgV01fQ1JFQVRFLCBNQUtFTE9ORyggaHduZCwgd25kUHRyLT53SURtZW51ICkgKTsKLSAgICAKLSAgICBpZiAoc3R5bGUgJiBXU19WSVNJQkxFKSBTaG93V2luZG93KCBod25kLCBTV19TSE9XICk7Ci0vKiAgICBpZiAoc3R5bGUgJiBXU19NSU5JTUlaRSkgU2hvd1dpbmRvdyggaHduZCwgU1dfTUlOSU1JWkUgKTsgKi8KKworICAgIC8qIFNob3cgdGhlIHdpbmRvdywgbWF4aW1pemluZyBvciBtaW5pbWl6aW5nIGlmIG5lZWRlZCAqLworCisgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKQorICAgIHsKKyAgICAgICAgd25kUHRyLT5kd1N0eWxlICY9IH5XU19NQVhJTUlaRTsKKyAgICAgICAgV0lOUE9TX0ZpbmRJY29uUG9zKCBod25kICk7CisgICAgICAgIFNldFdpbmRvd1BvcyggaHduZCwgMCwgd25kUHRyLT5wdEljb25Qb3MueCwgd25kUHRyLT5wdEljb25Qb3MueSwKKyAgICAgICAgICAgICAgICAgICAgICBTWVNNRVRSSUNTX0NYSUNPTiwgU1lTTUVUUklDU19DWUlDT04sCisgICAgICAgICAgICAgICAgICAgICAgU1dQX0ZSQU1FQ0hBTkdFRCB8CisgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgV1NfVklTSUJMRSkgPyBTV1BfU0hPV1dJTkRPVyA6IDAgKTsKKyAgICB9CisgICAgZWxzZSBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfTUFYSU1JWkUpCisgICAgeworICAgICAgICBTZXRXaW5kb3dQb3MoIGh3bmQsIDAsIG1heFBvcy54LCBtYXhQb3MueSwgbWF4U2l6ZS54LCBtYXhTaXplLnksCisgICAgICAgICAgICAgICAgICAgICAgU1dQX0ZSQU1FQ0hBTkdFRCB8CisgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgV1NfVklTSUJMRSkgPyBTV1BfU0hPV1dJTkRPVyA6IDAgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3R5bGUgJiBXU19WSVNJQkxFKSBTaG93V2luZG93KCBod25kLCBTV19TSE9XICk7CiAKICAgICBkcHJpbnRmX3dpbihzdGRkZWIsICJDcmVhdGVXaW5kb3dFeDogcmV0dXJuICUwNFggXG4iLCBod25kKTsKICAgICByZXR1cm4gaHduZDsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mvd2lucG9zLmMgYi93aW5kb3dzL3dpbnBvcy5jCmluZGV4IDU3NzIyMWQuLjVlZjllNDUgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvd2lucG9zLmMKKysrIGIvd2luZG93cy93aW5wb3MuYwpAQCAtMjQsNyArMjQsNyBAQAogICogRmluZCBhIHN1aXRhYmxlIHBsYWNlIGZvciBhbiBpY29uaWMgd2luZG93LgogICogVGhlIG5ldyBwb3NpdGlvbiBpcyBzdG9yZWQgaW50byB3bmRQdHItPnB0SWNvblBvcy4KICAqLwotc3RhdGljIHZvaWQgV0lOUE9TX0ZpbmRJY29uUG9zKCBIV05EIGh3bmQgKQordm9pZCBXSU5QT1NfRmluZEljb25Qb3MoIEhXTkQgaHduZCApCiB7CiAgICAgUkVDVCByZWN0UGFyZW50OwogICAgIHNob3J0IHgsIHksIHhzcGFjaW5nLCB5c3BhY2luZzsK