ZGlmZiAtLWdpdCBhLy5naXRodWIvQ09OVFJJQlVUSU5HLm1kIGIvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQKaW5kZXggZDRmNTgwYi4uYmNlODliNCAxMDA2NDQKLS0tIGEvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQKKysrIGIvLmdpdGh1Yi9DT05UUklCVVRJTkcubWQKQEAgLTgsNyArOCw3IEBACiAKICAyLiBTdWJzY3JpYmUgdG8gdGhlIHN1aXRhYmxlIFttYWlsaW5nIGxpc3RzXShodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsLykKIAotUmVhZCBbQ09OVFJJQlVURV0oLi4vZG9jcy9DT05UUklCVVRFKQorUmVhZCBbQ09OVFJJQlVURV0oLi4vZG9jcy9DT05UUklCVVRFLm1kKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFNlbmQgeW91ciBzdWdnZXN0aW9ucyB1c2luZyBvbmUgb2YgdGhlc2UgbWV0aG9kczoKQEAgLTIwLDQgKzIwLDQgQEAKIAogIDMuIGFzIGFuIFtpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9pc3N1ZXMpCiAKLS8gVGhlIGNVUkwgdGVhbSEKKy8gVGhlIGN1cmwgdGVhbSEKZGlmZiAtLWdpdCBhLy50cmF2aXMueW1sIGIvLnRyYXZpcy55bWwKaW5kZXggNDllM2YxNS4uYmRkMjFiMCAxMDA2NDQKLS0tIGEvLnRyYXZpcy55bWwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTgsNyArOCw3IEBACiAKIGluc3RhbGw6CiAgIC0gaWYgWyAiJFRSQVZJU19PU19OQU1FIiA9PSAib3N4IiBdOyB0aGVuIGJyZXcgdXBkYXRlID4gL2Rldi9udWxsOyBmaQotICAtIGlmIFsgIiRUUkFWSVNfT1NfTkFNRSIgPT0gIm9zeCIgXTsgdGhlbiBicmV3IHJlaW5zdGFsbCAtcyBsaWJ0b29sID4gL2Rldi9udWxsOyBmaQorICAtIGlmIFsgIiRUUkFWSVNfT1NfTkFNRSIgPT0gIm9zeCIgXTsgdGhlbiBicmV3IHJlaW5zdGFsbCBsaWJ0b29sID4gL2Rldi9udWxsOyBmaQogICAtIGlmIFsgIiRUUkFWSVNfT1NfTkFNRSIgPT0gIm9zeCIgXTsgdGhlbiBicmV3IGluc3RhbGwgb3BlbnNzbCBsaWJpZG4gcnRtcGR1bXAgbGlic3NoMiBjLWFyZXMgbGlibWV0YWxpbmsgbGlicmVzc2wgbmdodHRwMjsgZmkKIAogYmVmb3JlX3NjcmlwdDoKZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCmluZGV4IDdiNzkxODUuLjI5NDI2YTcgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQuYnAKKysrIGIvQW5kcm9pZC5icApAQCAtNDAsNiArNDAsNyBAQAogICAgICAgICAiLURCVUlMRElOR19MSUJDVVJMIiwKICAgICBdLAogICAgIHNyY3M6WworICAgICAgICAibGliL3JhbmQuYyIsCiAgICAgICAgICJsaWIvZmlsZS5jIiwKICAgICAgICAgImxpYi90aW1ldmFsLmMiLAogICAgICAgICAibGliL2Jhc2U2NC5jIiwKQEAgLTYzLDcgKzY0LDYgQEAKICAgICAgICAgImxpYi9uZXRyYy5jIiwKICAgICAgICAgImxpYi9nZXRpbmZvLmMiLAogICAgICAgICAibGliL3RyYW5zZmVyLmMiLAotICAgICAgICAibGliL3N0cmVxdWFsLmMiLAogICAgICAgICAibGliL2Vhc3kuYyIsCiAgICAgICAgICJsaWIvc2VjdXJpdHkuYyIsCiAgICAgICAgICJsaWIvY3VybF9mbm1hdGNoLmMiLApAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgICJsaWIvc2VsZWN0LmMiLAogICAgICAgICAibGliL3RmdHAuYyIsCiAgICAgICAgICJsaWIvc3BsYXkuYyIsCisgICAgICAgICJsaWIvc3RyY2FzZS5jIiwKICAgICAgICAgImxpYi9zdHJkdXAuYyIsCiAgICAgICAgICJsaWIvc29ja3MuYyIsCiAgICAgICAgICJsaWIvc3NoLmMiLAotICAgICAgICAibGliL3Jhd3N0ci5jIiwKICAgICAgICAgImxpYi9jdXJsX2FkZHJpbmZvLmMiLAogICAgICAgICAibGliL3NvY2tzX2dzc2FwaS5jIiwKICAgICAgICAgImxpYi9zb2Nrc19zc3BpLmMiLApkaWZmIC0tZ2l0IGEvQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZSBiL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3ZDI5NgotLS0gL2Rldi9udWxsCisrKyBiL0NNYWtlL0N1cmxTeW1ib2xIaWRpbmcuY21ha2UKQEAgLTAsMCArMSw2MSBAQAoraW5jbHVkZShDaGVja0NTb3VyY2VDb21waWxlcykKKworb3B0aW9uKENVUkxfSElEREVOX1NZTUJPTFMgIlNldCB0byBPTiB0byBoaWRlIGxpYmN1cmwgaW50ZXJuYWwgc3ltYm9scyAoPWhpZGUgYWxsIHN5bWJvbHMgdGhhdCBhcmVuJ3Qgb2ZmaWNpYWxseSBleHRlcm5hbCkuIiBPTikKK21hcmtfYXNfYWR2YW5jZWQoQ1VSTF9ISURERU5fU1lNQk9MUykKKworaWYoQ1VSTF9ISURERU5fU1lNQk9MUykKKyAgICBzZXQoU1VQUE9SVFNfU1lNQk9MX0hJRElORyBGQUxTRSkKKworICAgIGlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmciKQorICAgICAgICBzZXQoU1VQUE9SVFNfU1lNQk9MX0hJRElORyBUUlVFKQorICAgICAgICBzZXQoX1NZTUJPTF9FWFRFUk4gIl9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoXCJkZWZhdWx0XCIpKSkiKQorICAgICAgICBzZXQoX0NGTEFHX1NZTUJPTFNfSElERSAiLWZ2aXNpYmlsaXR5PWhpZGRlbiIpCisgICAgZWxzZWlmKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDKQorICAgICAgICBpZihOT1QgQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi44LjEwKQorICAgICAgICAgICAgc2V0KEdDQ19WRVJTSU9OICR7Q01BS0VfQ19DT01QSUxFUl9WRVJTSU9OfSkKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAke0NNQUtFX0NfQ09NUElMRVJ9IC1kdW1wdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBHQ0NfVkVSU0lPTikKKyAgICAgICAgZW5kaWYoKQorICAgICAgICBpZihOT1QgR0NDX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDMuNCkKKyAgICAgICAgICAgICMgbm90ZTogdGhpcyBpcyBjb25zaWRlcmVkIGJ1Z2d5IHByaW9yIHRvIDQuMCBidXQgdGhlIGF1dG90b29scyBkb24ndCBjYXJlLCBzbyBsZXQncyBpZ25vcmUgdGhhdCBmYWN0CisgICAgICAgICAgICBzZXQoU1VQUE9SVFNfU1lNQk9MX0hJRElORyBUUlVFKQorICAgICAgICAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIikKKyAgICAgICAgICAgIHNldChfQ0ZMQUdfU1lNQk9MU19ISURFICItZnZpc2liaWxpdHk9aGlkZGVuIikKKyAgICAgICAgZW5kaWYoKQorICAgIGVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIlN1blBybyIgQU5EIE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDguMCkKKyAgICAgICAgc2V0KFNVUFBPUlRTX1NZTUJPTF9ISURJTkcgVFJVRSkKKyAgICAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2dsb2JhbCIpCisgICAgICAgIHNldChfQ0ZMQUdfU1lNQk9MU19ISURFICIteGxkc2NvcGU9aGlkZGVuIikKKyAgICBlbHNlaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJJbnRlbCIgQU5EIE5PVCBDTUFLRV9DX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTIDkuMCkKKyAgICAgICAgIyBub3RlOiB0aGlzIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoZWNrIGZvciB2ZXJzaW9uIDkuMS4wNDUgYnV0IEknbSBub3QgMTAwJSBzdXJlCisgICAgICAgICMgICAgICAgc28gbGV0J3MgdG8gaXQgdGhlIHNhbWUgd2F5IGF1dG90b29scyBkby4KKyAgICAgICAgc2V0KFNVUFBPUlRTX1NZTUJPTF9ISURJTkcgVFJVRSkKKyAgICAgICAgc2V0KF9TWU1CT0xfRVhURVJOICJfX2F0dHJpYnV0ZV9fICgoX192aXNpYmlsaXR5X18gKFwiZGVmYXVsdFwiKSkpIikKKyAgICAgICAgc2V0KF9DRkxBR19TWU1CT0xTX0hJREUgIi1mdmlzaWJpbGl0eT1oaWRkZW4iKQorICAgICAgICBjaGVja19jX3NvdXJjZV9jb21waWxlcygiI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICBpbnQgbWFpbiAodm9pZCkgeyBwcmludGYoXCJpY2MgZnZpc2liaWxpdHkgYnVnIHRlc3RcIik7IHJldHVybiAwOyB9IiBfbm9fYnVnKQorICAgICAgICBpZihOT1QgX25vX2J1ZykKKyAgICAgICAgICAgIHNldChTVVBQT1JUU19TWU1CT0xfSElESU5HIEZBTFNFKQorICAgICAgICAgICAgc2V0KF9TWU1CT0xfRVhURVJOICIiKQorICAgICAgICAgICAgc2V0KF9DRkxBR19TWU1CT0xTX0hJREUgIiIpCisgICAgICAgIGVuZGlmKCkKKyAgICBlbHNlaWYoTVNWQykKKyAgICAgICAgc2V0KFNVUFBPUlRTX1NZTUJPTF9ISURJTkcgVFJVRSkKKyAgICBlbmRpZigpCisKKyAgICBzZXQoSElERVNfQ1VSTF9QUklWQVRFX1NZTUJPTFMgJHtTVVBQT1JUU19TWU1CT0xfSElESU5HfSkKK2Vsc2VpZihNU1ZDKQorICAgIGlmKE5PVCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fTEVTUyAzLjcpCisgICAgICAgIHNldChDTUFLRV9XSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MUyBUUlVFKSAjcHJlc2VudCBzaW5jZSAzLjQuMyBidXQgYnJva2VuCisgICAgICAgIHNldChISURFU19DVVJMX1BSSVZBVEVfU1lNQk9MUyBGQUxTRSkKKyAgICBlbHNlKCkKKyAgICAgICAgbWVzc2FnZShXQVJOSU5HICJIaWRpbmcgcHJpdmF0ZSBzeW1ib2xzIHJlZ2FyZGxlc3MgQ1VSTF9ISURERU5fU1lNQk9MUyBiZWluZyBkaXNhYmxlZC4iKQorICAgICAgICBzZXQoSElERVNfQ1VSTF9QUklWQVRFX1NZTUJPTFMgVFJVRSkKKyAgICBlbmRpZigpCitlbHNlaWYoKQorICAgIHNldChISURFU19DVVJMX1BSSVZBVEVfU1lNQk9MUyBGQUxTRSkKK2VuZGlmKCkKKworc2V0KENVUkxfQ0ZMQUdfU1lNQk9MU19ISURFICR7X0NGTEFHX1NZTUJPTFNfSElERX0pCitzZXQoQ1VSTF9FWFRFUk5fU1lNQk9MICR7X1NZTUJPTF9FWFRFUk59KQpkaWZmIC0tZ2l0IGEvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UgYi9DTWFrZS9GaW5kTkdIVFRQMi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU2NmNmCi0tLSAvZGV2L251bGwKKysrIGIvQ01ha2UvRmluZE5HSFRUUDIuY21ha2UKQEAgLTAsMCArMSwxOCBAQAoraW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKworZmluZF9wYXRoKE5HSFRUUDJfSU5DTFVERV9ESVIgIm5naHR0cDIvbmdodHRwMi5oIikKKworZmluZF9saWJyYXJ5KE5HSFRUUDJfTElCUkFSWSBOQU1FUyBuZ2h0dHAyKQorCitmaW5kX3BhY2thZ2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTkdIVFRQMgorICAgIEZPVU5EX1ZBUgorICAgICAgTkdIVFRQMl9GT1VORAorICAgIFJFUVVJUkVEX1ZBUlMKKyAgICAgIE5HSFRUUDJfTElCUkFSWQorICAgICAgTkdIVFRQMl9JTkNMVURFX0RJUgorICAgIEZBSUxfTUVTU0FHRQorICAgICAgIkNvdWxkIE5PVCBmaW5kIE5HSFRUUDIiCispCisKK3NldChOR0hUVFAyX0lOQ0xVREVfRElSUyAke05HSFRUUDJfSU5DTFVERV9ESVJ9ICkKK3NldChOR0hUVFAyX0xJQlJBUklFUyAke05HSFRUUDJfTElCUkFSWX0pCmRpZmYgLS1naXQgYS9DTWFrZS9PdGhlclRlc3RzLmNtYWtlIGIvQ01ha2UvT3RoZXJUZXN0cy5jbWFrZQppbmRleCBkNTk5NDk4Li4zYjIwM2M1IDEwMDY0NAotLS0gYS9DTWFrZS9PdGhlclRlc3RzLmNtYWtlCisrKyBiL0NNYWtlL090aGVyVGVzdHMuY21ha2UKQEAgLTE3OSwxNyArMTc5LDIwIEBACiAKIAogaW5jbHVkZShDaGVja0NTb3VyY2VSdW5zKQotc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTKQotaWYoSEFWRV9TWVNfUE9MTF9IKQotICBzZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1ESEFWRV9TWVNfUE9MTF9IIikKLWVuZGlmKEhBVkVfU1lTX1BPTExfSCkKLWNoZWNrX2Nfc291cmNlX3J1bnMoIgotICAjaWZkZWYgSEFWRV9TWVNfUE9MTF9ICi0gICMgIGluY2x1ZGUgPHN5cy9wb2xsLmg+Ci0gICNlbmRpZgotICBpbnQgbWFpbih2b2lkKSB7Ci0gICAgcmV0dXJuIHBvbGwoKHZvaWQgKikwLCAwLCAxMCAvKm1zKi8pOwotICB9IiBIQVZFX1BPTExfRklORSkKKyMgU2VlIEhBVkVfUE9MTCBpbiBDTWFrZUxpc3RzLnR4dCBmb3Igd2h5IHBvbGwgaXMgZGlzYWJsZWQgb24gbWFjT1MKK2lmKE5PVCBBUFBMRSkKKyAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTKQorICBpZihIQVZFX1NZU19QT0xMX0gpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTICItREhBVkVfU1lTX1BPTExfSCIpCisgIGVuZGlmKEhBVkVfU1lTX1BPTExfSCkKKyAgY2hlY2tfY19zb3VyY2VfcnVucygiCisgICAgI2lmZGVmIEhBVkVfU1lTX1BPTExfSAorICAgICMgIGluY2x1ZGUgPHN5cy9wb2xsLmg+CisgICAgI2VuZGlmCisgICAgaW50IG1haW4odm9pZCkgeworICAgICAgcmV0dXJuIHBvbGwoKHZvaWQgKikwLCAwLCAxMCAvKm1zKi8pOworICAgIH0iIEhBVkVfUE9MTF9GSU5FKQorZW5kaWYoKQogCiBzZXQoSEFWRV9TSUdfQVRPTUlDX1QgMSkKIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUykKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggN2Y3YzRkNi4uYTZhNzM2OCAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTUsNyArNSw3IEBACiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogIwotIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogIwogIyBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xOSw3ICsxOSw3IEBACiAjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgY1VSTC9saWJjdXJsIENNYWtlIHNjcmlwdAorIyBjdXJsL2xpYmN1cmwgQ01ha2Ugc2NyaXB0CiAjIGJ5IFRldGV0ZXN0IGFuZCBTdWtlbmRlciAoQmVub2l0IE5laWwpCiAKICMgVE9ETzoKQEAgLTQyLDYgKzQyLDcgQEAKIHNldChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NNYWtlOyR7Q01BS0VfTU9EVUxFX1BBVEh9IikKIGluY2x1ZGUoVXRpbGl0aWVzKQogaW5jbHVkZShNYWNyb3MpCitpbmNsdWRlKENNYWtlRGVwZW5kZW50T3B0aW9uKQogCiBwcm9qZWN0KCBDVVJMIEMgKQogCkBAIC03MSwxMSArNzIsMTcgQEAKIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUvY3VybCkKIGluY2x1ZGVfZGlyZWN0b3JpZXMoICR7Q1VSTF9TT1VSQ0VfRElSfS9pbmNsdWRlICkKIAotb3B0aW9uKEJVSUxEX0NVUkxfRVhFICJTZXQgdG8gT04gdG8gYnVpbGQgY1VSTCBleGVjdXRhYmxlLiIgT04pCitvcHRpb24oQlVJTERfQ1VSTF9FWEUgIlNldCB0byBPTiB0byBidWlsZCBjdXJsIGV4ZWN1dGFibGUuIiBPTikKIG9wdGlvbihDVVJMX1NUQVRJQ0xJQiAiU2V0IHRvIE9OIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBzdGF0aWMgbGlua2luZy4iIE9GRikKIG9wdGlvbihFTkFCTEVfQVJFUyAiU2V0IHRvIE9OIHRvIGVuYWJsZSBjLWFyZXMgc3VwcG9ydCIgT0ZGKQotb3B0aW9uKEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUiAiU2V0IHRvIE9OIHRvIGVuYWJsZSBQT1NJWCB0aHJlYWRlZCBETlMgbG9va3VwIiBPRkYpCi0KK2lmKFdJTjMyKQorICBDTUFLRV9ERVBFTkRFTlRfT1BUSU9OKEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUgorICAgICAgICAgICAgICAgICAgICAgICAgICJTZXQgdG8gT04gdG8gZW5hYmxlIHRocmVhZGVkIEROUyBsb29rdXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgT04gIk5PVCBFTkFCTEVfQVJFUyIKKyAgICAgICAgICAgICAgICAgICAgICAgICBPRkYpCitlbHNlKCkKKyAgb3B0aW9uKEVOQUJMRV9USFJFQURFRF9SRVNPTFZFUiAiU2V0IHRvIE9OIHRvIGVuYWJsZSBQT1NJWCB0aHJlYWRlZCBETlMgbG9va3VwIiBPRkYpCitlbmRpZigpCiBvcHRpb24oRU5BQkxFX0RFQlVHICJTZXQgdG8gT04gdG8gZW5hYmxlIGN1cmwgZGVidWcgZmVhdHVyZXMiIE9GRikKIG9wdGlvbihFTkFCTEVfQ1VSTERFQlVHICJTZXQgdG8gT04gdG8gYnVpbGQgd2l0aCBUcmFja01lbW9yeSBmZWF0dXJlIGVuYWJsZWQiIE9GRikKIApAQCAtMTEyLDggKzExOSw3IEBACiAgIG1hcmtfYXNfYWR2YW5jZWQoQlVJTERfUkVMRUFTRV9ERUJVR19ESVJTKQogZW5kaWYoKQogCi1vcHRpb24oQ1VSTF9ISURERU5fU1lNQk9MUyAiU2V0IHRvIE9OIHRvIGhpZGUgbGliY3VybCBpbnRlcm5hbCBzeW1ib2xzICg9aGlkZSBhbGwgc3ltYm9scyB0aGF0IGFyZW4ndCBvZmZpY2lhbGx5IGV4dGVybmFsKS4iIE9OKQotbWFya19hc19hZHZhbmNlZChDVVJMX0hJRERFTl9TWU1CT0xTKQoraW5jbHVkZShDdXJsU3ltYm9sSGlkaW5nKQogCiBvcHRpb24oSFRUUF9PTkxZICJkaXNhYmxlcyBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBIVFRQIChUaGlzIG92ZXJyaWRlcyBhbGwgQ1VSTF9ESVNBQkxFXyogb3B0aW9ucykiIE9GRikKIG1hcmtfYXNfYWR2YW5jZWQoSFRUUF9PTkxZKQpAQCAtMjUwLDEzICsyNTYsMTcgQEAKIGVuZGlmKFdJTjMyKQogCiBpZihFTkFCTEVfVEhSRUFERURfUkVTT0xWRVIpCi0gIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInB0aHJlYWQuaCIgSEFWRV9QVEhSRUFEX0gpCi0gIGlmKEhBVkVfUFRIUkVBRF9IKQotICAgIHNldChDTUFLRV9USFJFQURfUFJFRkVSX1BUSFJFQUQgMSkKLSAgICBmaW5kX3BhY2thZ2UoVGhyZWFkcykKLSAgICBpZihDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVCkKLSAgICAgIHNldChDVVJMX0xJQlMgJHtDVVJMX0xJQlN9ICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0pCi0gICAgICBzZXQoVVNFX1RIUkVBRFNfUE9TSVggMSkKKyAgaWYoV0lOMzIpCisgICAgc2V0KFVTRV9USFJFQURTX1dJTjMyIE9OKQorICBlbHNlKCkKKyAgICBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJwdGhyZWFkLmgiIEhBVkVfUFRIUkVBRF9IKQorICAgIGlmKEhBVkVfUFRIUkVBRF9IKQorICAgICAgc2V0KENNQUtFX1RIUkVBRF9QUkVGRVJfUFRIUkVBRCAxKQorICAgICAgZmluZF9wYWNrYWdlKFRocmVhZHMpCisgICAgICBpZihDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVCkKKyAgICAgICAgc2V0KENVUkxfTElCUyAke0NVUkxfTElCU30gJHtDTUFLRV9USFJFQURfTElCU19JTklUfSkKKyAgICAgICAgc2V0KFVTRV9USFJFQURTX1BPU0lYIDEpCisgICAgICBlbmRpZigpCiAgICAgZW5kaWYoKQogICBlbmRpZigpCiBlbmRpZigpCkBAIC0zMjIsNiArMzMyLDEzIEBACiAgIGVuZGlmKCkKIGVuZGlmKCkKIAorb3B0aW9uKFVTRV9OR0hUVFAyICJVc2UgTmdodHRwMiBsaWJyYXJ5IiBPRkYpCitpZihVU0VfTkdIVFRQMikKKyAgZmluZF9wYWNrYWdlKE5HSFRUUDIgUkVRVUlSRUQpCisgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtOR0hUVFAyX0lOQ0xVREVfRElSU30pCisgIGxpc3QoQVBQRU5EIENVUkxfTElCUyAke05HSFRUUDJfTElCUkFSSUVTfSkKK2VuZGlmKCkKKwogaWYoTk9UIENVUkxfRElTQUJMRV9MREFQKQogICBpZihXSU4zMikKICAgICBvcHRpb24oVVNFX1dJTjMyX0xEQVAgIlVzZSBXaW5kb3dzIExEQVAgaW1wbGVtZW50YXRpb24iIE9OKQpAQCAtNDMyLDEyICs0NDksMTIgQEAKIGVuZGlmKCkKIAogIyBDaGVjayBmb3IgaWRuCi1jaGVja19saWJyYXJ5X2V4aXN0c19jb25jYXQoImlkbiIgaWRuYV90b19hc2NpaV9seiBIQVZFX0xJQklETikKK2NoZWNrX2xpYnJhcnlfZXhpc3RzX2NvbmNhdCgiaWRuMiIgaWRuMl9sb29rdXBfdWwgSEFWRV9MSUJJRE4yKQogCiAjIENoZWNrIGZvciBzeW1ib2wgZGxvcGVuIChzYW1lIGFzIEhBVkVfTElCREwpCiBjaGVja19saWJyYXJ5X2V4aXN0cygiJHtDVVJMX0xJQlN9IiBkbG9wZW4gIiIgSEFWRV9ETE9QRU4pCiAKLW9wdGlvbihDVVJMX1pMSUIgIlNldCB0byBPTiB0byBlbmFibGUgYnVpbGRpbmcgY1VSTCB3aXRoIHpsaWIgc3VwcG9ydC4iIE9OKQorb3B0aW9uKENVUkxfWkxJQiAiU2V0IHRvIE9OIHRvIGVuYWJsZSBidWlsZGluZyBjdXJsIHdpdGggemxpYiBzdXBwb3J0LiIgT04pCiBzZXQoSEFWRV9MSUJaIE9GRikKIHNldChIQVZFX1pMSUJfSCBPRkYpCiBzZXQoSEFWRV9aTElCIE9GRikKQEAgLTYwMSw3ICs2MTgsNyBAQAogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiZXJyLmgiICAgICAgICAgICAgSEFWRV9FUlJfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImVycm5vLmgiICAgICAgICAgIEhBVkVfRVJSTk9fSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImZjbnRsLmgiICAgICAgICAgIEhBVkVfRkNOVExfSCkKLWNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImlkbi1mcmVlLmgiICAgICAgIEhBVkVfSUROX0ZSRUVfSCkKK2NoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoImlkbjIuaCIgICAgICAgICAgIEhBVkVfSUROMl9IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiaWZhZGRycy5oIiAgICAgICAgSEFWRV9JRkFERFJTX0gpCiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJpby5oIiAgICAgICAgICAgICBIQVZFX0lPX0gpCiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJrcmIuaCIgICAgICAgICAgICBIQVZFX0tSQl9IKQpAQCAtNjMxLDcgKzY0OCw2IEBACiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ0ZXJtaW8uaCIgICAgICAgICBIQVZFX1RFUk1JT19IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgidGVybWlvcy5oIiAgICAgICAgSEFWRV9URVJNSU9TX0gpCiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ0aW1lLmgiICAgICAgICAgICBIQVZFX1RJTUVfSCkKLWNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInRsZC5oIiAgICAgICAgICAgIEhBVkVfVExEX0gpCiBjaGVja19pbmNsdWRlX2ZpbGVfY29uY2F0KCJ1bmlzdGQuaCIgICAgICAgICBIQVZFX1VOSVNURF9IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgidXRpbWUuaCIgICAgICAgICAgSEFWRV9VVElNRV9IKQogY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgieDUwOS5oIiAgICAgICAgICAgSEFWRV9YNTA5X0gpCkBAIC02NDUsOSArNjYxLDYgQEAKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN0ZGludC5oIiAgICAgICAgSEFWRV9TVERJTlRfSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInNvY2tpby5oIiAgICAgICAgSEFWRV9TT0NLSU9fSCkKIGNoZWNrX2luY2x1ZGVfZmlsZV9jb25jYXQoInN5cy91dHNuYW1lLmgiICAgSEFWRV9TWVNfVVRTTkFNRV9IKQotY2hlY2tfaW5jbHVkZV9maWxlX2NvbmNhdCgiaWRuYS5oIiAgICAgICAgICBIQVZFX0lETkFfSCkKLQotCiAKIGNoZWNrX3R5cGVfc2l6ZShzaXplX3QgIFNJWkVPRl9TSVpFX1QpCiBjaGVja190eXBlX3NpemUoc3NpemVfdCAgU0laRU9GX1NTSVpFX1QpCkBAIC02NjYsNiArNjc5LDcgQEAKICAgICBzZXQoc3NpemVfdCBfX2ludDY0KQogICBlbmRpZihOT1Qgc3NpemVfdCBBTkQgU0laRU9GX19fSU5UNjQgRVFVQUwgU0laRU9GX1NJWkVfVCkKIGVuZGlmKE5PVCBIQVZFX1NJWkVPRl9TU0laRV9UKQorIyBvZmZfdCBpcyBzaXplZCBsYXRlciwgYWZ0ZXIgdGhlIEhBVkVfRklMRV9PRkZTRVRfQklUUyB0ZXN0CiAKICMgRGlmZmVyZW50IHNpemVvZnMsIGV0Yy4KIApAQCAtNzI4LDcgKzc0MiwxMSBAQAogCiBjaGVja19zeW1ib2xfZXhpc3RzKGJhc2VuYW1lICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfQkFTRU5BTUUpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNvY2tldCAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU09DS0VUKQotY2hlY2tfc3ltYm9sX2V4aXN0cyhwb2xsICAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1BPTEwpCisjIHBvbGwgb24gbWFjT1MgaXMgdW5yZWxpYWJsZSwgaXQgZmlyc3QgZGlkIG5vdCBleGlzdCwgdGhlbiB3YXMgYnJva2VuIHVudGlsCisjIGZpeGVkIGluIDEwLjkgb25seSB0byBicmVhayBhZ2FpbiBpbiAxMC4xMi4KK2lmKE5PVCBBUFBMRSkKKyAgY2hlY2tfc3ltYm9sX2V4aXN0cyhwb2xsICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9QT0xMKQorZW5kaWYoKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhzZWxlY3QgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFTEVDVCkKIGNoZWNrX3N5bWJvbF9leGlzdHMoc3RyZHVwICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJEVVApCiBjaGVja19zeW1ib2xfZXhpc3RzKHN0cnN0ciAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSU1RSKQpAQCAtNzY0LDggKzc4Miw2IEBACiAgIGNoZWNrX3N5bWJvbF9leGlzdHMoUkFORF9zdGF0dXMgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9SQU5EX1NUQVRVUykKICAgY2hlY2tfc3ltYm9sX2V4aXN0cyhSQU5EX3NjcmVlbiAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1JBTkRfU0NSRUVOKQogICBjaGVja19zeW1ib2xfZXhpc3RzKFJBTkRfZWdkICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUkFORF9FR0QpCi0gIGNoZWNrX3N5bWJvbF9leGlzdHMoQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEgIiR7Q1VSTF9JTkNMVURFU30iCi0gICAgSEFWRV9DUllQVE9fQ0xFQU5VUF9BTExfRVhfREFUQSkKICAgaWYoSEFWRV9MSUJDUllQVE8gQU5EIEhBVkVfTElCU1NMKQogICAgIHNldChVU0VfT1BFTlNTTCAxKQogICBlbmRpZihIQVZFX0xJQkNSWVBUTyBBTkQgSEFWRV9MSUJTU0wpCkBAIC03OTUsOSArODExLDYgQEAKIGNoZWNrX3N5bWJvbF9leGlzdHMoZnRydW5jYXRlICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRlRSVU5DQVRFKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhnZXRwcm90b2J5bmFtZSAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRQUk9UT0JZTkFNRSkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZ2V0cmxpbWl0ICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUkxJTUlUKQotY2hlY2tfc3ltYm9sX2V4aXN0cyhpZG5fZnJlZSAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9JRE5fRlJFRSkKLWNoZWNrX3N5bWJvbF9leGlzdHMoaWRuYV9zdHJlcnJvciAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSUROQV9TVFJFUlJPUikKLWNoZWNrX3N5bWJvbF9leGlzdHModGxkX3N0cmVycm9yICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVExEX1NUUkVSUk9SKQogY2hlY2tfc3ltYm9sX2V4aXN0cyhzZXRsb2NhbGUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRMT0NBTEUpCiBjaGVja19zeW1ib2xfZXhpc3RzKHNldHJsaW1pdCAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVFJMSU1JVCkKIGNoZWNrX3N5bWJvbF9leGlzdHMoZmNudGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRkNOVEwpCkBAIC04NjQsOSArODc3LDE0IEBACiAgICAgKQogICBjdXJsX2ludGVybmFsX3Rlc3QoJHtDVVJMX1RFU1R9KQogZW5kZm9yZWFjaChDVVJMX1RFU1QpCisKIGlmKEhBVkVfRklMRV9PRkZTRVRfQklUUykKICAgc2V0KF9GSUxFX09GRlNFVF9CSVRTIDY0KQorICBzZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiKQogZW5kaWYoSEFWRV9GSUxFX09GRlNFVF9CSVRTKQorY2hlY2tfdHlwZV9zaXplKCJvZmZfdCIgIFNJWkVPRl9PRkZfVCkKK3NldChDTUFLRV9SRVFVSVJFRF9GTEFHUykKKwogZm9yZWFjaChDVVJMX1RFU1QKICAgICBIQVZFX0dMSUJDX1NUUkVSUk9SX1IKICAgICBIQVZFX1BPU0lYX1NUUkVSUk9SX1IKQEAgLTkyOCwxNiArOTQ2LDYgQEAKICAgZW5kaWYoTk9UIEhBVkVfWkxJQl9IKQogZW5kaWYoTk9UIENVUkxfU1BFQ0lBTF9MSUJaKQogCi1pZihfRklMRV9PRkZTRVRfQklUUykKLSAgc2V0KF9GSUxFX09GRlNFVF9CSVRTIDY0KQotZW5kaWYoX0ZJTEVfT0ZGU0VUX0JJVFMpCi1zZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MgIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiKQotc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jdXJsL2N1cmwuaCIpCi1jaGVja190eXBlX3NpemUoImN1cmxfb2ZmX3QiIFNJWkVPRl9DVVJMX09GRl9UKQotc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMpCi1zZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MpCi0KLQogIyBDaGVjayBmb3Igbm9uYmxvY2tpbmcKIHNldChIQVZFX0RJU0FCTEVEX05PTkJMT0NLSU5HIDEpCiBpZihIQVZFX0ZJT05CSU8gT1IKQEAgLTEwMTAsNiArMTAxOCwxMSBAQAogICBhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9MHgwNTAxKQogZW5kaWYoV0lOMzIpCiAKKyMgRm9yIHdpbmRvd3MsIGFsbCBjb21waWxlcnMgdXNlZCBieSBjbWFrZSBzaG91bGQgc3VwcG9ydCBsYXJnZSBmaWxlcworaWYoV0lOMzIpCisgIHNldChVU0VfV0lOMzJfTEFSR0VfRklMRVMgT04pCitlbmRpZihXSU4zMikKKwogaWYoTVNWQykKICAgYWRkX2RlZmluaXRpb25zKC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIC1EX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSkKIGVuZGlmKE1TVkMpCkBAIC0xMDYxLDggKzEwNzQsMTAgQEAKIF9hZGRfaWYoIklQdjYiICAgICAgICAgIEVOQUJMRV9JUFY2KQogX2FkZF9pZigidW5peC1zb2NrZXRzIiAgVVNFX1VOSVhfU09DS0VUUykKIF9hZGRfaWYoImxpYnoiICAgICAgICAgIEhBVkVfTElCWikKLV9hZGRfaWYoIkFzeW5jaEROUyIgICAgIFVTRV9BUkVTIE9SIFVTRV9USFJFQURTX1BPU0lYKQotX2FkZF9pZigiSUROIiAgICAgICAgICAgSEFWRV9MSUJJRE4pCitfYWRkX2lmKCJBc3luY2hETlMiICAgICBVU0VfQVJFUyBPUiBVU0VfVEhSRUFEU19QT1NJWCBPUiBVU0VfVEhSRUFEU19XSU4zMikKK19hZGRfaWYoIklETiIgICAgICAgICAgIEhBVkVfTElCSUROMikKK19hZGRfaWYoIkxhcmdlZmlsZSIgICAgIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UIEdSRUFURVIgNCkgQU5ECisgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkVPRl9PRkZfVCBHUkVBVEVSIDQpIE9SIFVTRV9XSU4zMl9MQVJHRV9GSUxFUykpCiAjIFRPRE8gU1NQMSAoV2luU1NMKSBjaGVjayBpcyBtaXNzaW5nCiBfYWRkX2lmKCJTU1BJIiAgICAgICAgICBVU0VfV0lORE9XU19TU1BJKQogX2FkZF9pZigiR1NTLUFQSSIgICAgICAgSEFWRV9HU1NBUEkpCkBAIC0xMTI4LDkgKzExNDMsNyBAQAogc2V0KENVUkxWRVJTSU9OICAgICAgICAgICAgICIke0NVUkxfVkVSU0lPTn0iKQogc2V0KEVOQUJMRV9TSEFSRUQgICAgICAgICAgICJ5ZXMiKQogaWYoQ1VSTF9TVEFUSUNMSUIpCi0gICMgQnJva2VuOiBMSUJDVVJMX0xJQlMgYmVsb3c7IC5hIGxpYiBpcyBub3QgYnVpbHQKLSAgbWVzc2FnZShXQVJOSU5HICJTdGF0aWMgbGlua2luZyBpcyBicm9rZW4hIikKLSAgc2V0KEVOQUJMRV9TVEFUSUMgICAgICAgICAibm8iKQorICBzZXQoRU5BQkxFX1NUQVRJQyAgICAgICAgICJ5ZXMiKQogZWxzZSgpCiAgIHNldChFTkFCTEVfU1RBVElDICAgICAgICAgIm5vIikKIGVuZGlmKCkKQEAgLTExMzksOSArMTE1MiwxMiBAQAogc2V0KExERkxBR1MgICAgICAgICAgICAgICAgICIke0NNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1N9IikKIHNldChMSUJDVVJMX0xJQlMgICAgICAgICAgICAiIikKIHNldChsaWJkaXIgICAgICAgICAgICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliIikKLSMgVE9ETyBDVVJMX0xJQlMgYWxzbyBjb250YWlucyBhYnNvbHV0ZSBwYXRocyB3aGljaCBkb24ndCB3b3JrIHdpdGggc3RhdGljIC1sLi4uCiBmb3JlYWNoKF9saWIgJHtDTUFLRV9DX0lNUExJQ0lUX0xJTktfTElCUkFSSUVTfSAke0NVUkxfTElCU30pCi0gIHNldChMSUJDVVJMX0xJQlMgICAgICAgICAgIiR7TElCQ1VSTF9MSUJTfSAtbCR7X2xpYn0iKQorICBpZihfbGliIE1BVENIRVMgIi4qLy4qIikKKyAgICBzZXQoTElCQ1VSTF9MSUJTICAgICAgICAgICIke0xJQkNVUkxfTElCU30gJHtfbGlifSIpCisgIGVsc2UoKQorICAgIHNldChMSUJDVVJMX0xJQlMgICAgICAgICAgIiR7TElCQ1VSTF9MSUJTfSAtbCR7X2xpYn0iKQorICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKICMgImEiIChMaW51eCkgb3IgImxpYiIgKFdpbmRvd3MpCiBzdHJpbmcoUkVQTEFDRSAiLiIgIiIgbGliZXh0ICIke0NNQUtFX1NUQVRJQ19MSUJSQVJZX1NVRkZJWH0iKQpkaWZmIC0tZ2l0IGEvR0lULUlORk8gYi9HSVQtSU5GTwppbmRleCAxNmY0YTIyLi42YjcwM2ZlIDEwMDY0NAotLS0gYS9HSVQtSU5GTworKysgYi9HSVQtSU5GTwpAQCAtNTEsMTcgKzUxLDMgQEAKICAgIGluc3RhbGwgdGhlbSwgeW91IGNhbiByZW5hbWUgdGhlIHNvdXJjZSBmaWxlIHNyYy90b29sX2h1Z2VoZWxwLmMuY3ZzIHRvCiAgICBzcmMvdG9vbF9odWdlaGVscC5jIGFuZCBhdm9pZCBoYXZpbmcgdG8gZ2VuZXJhdGUgdGhpcyBmaWxlLiBUaGlzIHdpbGwKICAgIGdpdmUgeW91IGEgc3R1YmJlZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIHRoYXQgZG9lc24ndCBjb250YWluIGFjdHVhbCBjb250ZW50LgotCi1NQUMgT1MgWAotCi0gV2l0aCBNYWMgT1MgWCAxMC4yIGFuZCB0aGUgYXNzb2NpYXRlZCBEZXZlbG9wZXIgVG9vbHMsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbnMKLSBvZiB0aGUgYnVpbGQgdG9vbHMgYXJlIGFkZXF1YXRlLiAgRm9yIE1hYyBPUyBYIDEwLjEgdXNlcnMsIEd1aWRvIE5laXR6ZXIKLSB3cm90ZSB0aGUgZm9sbG93aW5nIHN0ZXAtYnktc3RlcCBndWlkZToKLQotIDEuIEluc3RhbGwgZmluayAoaHR0cDovL2Zpbmsuc291cmNlZm9yZ2UubmV0KQotIDIuIFVwZGF0ZSBmaW5rIHRvIHRoZSBuZXdlc3QgdmVyc2lvbiAod2l0aCB0aGUgaW5zdGFsbGVkIGZpbmspCi0gMy4gSW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYXV0b2NvbmYsIGF1dG9tYWtlIGFuZCBtNCB3aXRoIGZpbmsKLSA0LiBJbnN0YWxsIHZlcnNpb24gMS40LjEgb2YgbGlidG9vbCAtIHlvdSBmaW5kIGl0IGluIHRoZSAidW5zdGFibGUiIHNlY3Rpb24KLSAgICAocmVhZCB0aGUgbWFudWFsIHRvIHNlZSBob3cgdG8gZ2V0IHVuc3RhYmxlIHZlcnNpb25zKQotIDUuIEdldCBjVVJMIGZyb20gZ2l0Ci0gNi4gQnVpbGQgY1VSTCB3aXRoICIuL2J1aWxkY29uZiIsICIuL2NvbmZpZ3VyZSIsICJtYWtlIiwgInN1ZG8gbWFrZSBpbnN0YWxsIgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCAyOTg2YWNmLi5mODZmZmJjIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpAQCAtMjQsMTAgKzI0LDEzIEBACiAKIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00CiAKLUNNQUtFX0RJU1QgPSBDTWFrZUxpc3RzLnR4dCBDTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4JXAotIENNYWtlL0N1cmxUZXN0cy5jIENNYWtlL0ZpbmRHU1MuY21ha2UgQ01ha2UvT3RoZXJUZXN0cy5jbWFrZQlcCi0gQ01ha2UvUGxhdGZvcm1zL1dpbmRvd3NDYWNoZS5jbWFrZSBDTWFrZS9VdGlsaXRpZXMuY21ha2UJXAotIGluY2x1ZGUvY3VybC9jdXJsYnVpbGQuaC5jbWFrZSBDTWFrZS9NYWNyb3MuY21ha2UKK0NNQUtFX0RJU1QgPSBDTWFrZUxpc3RzLnR4dCBDTWFrZS9DTWFrZUNvbmZpZ3VyYWJsZUZpbGUuaW4gICAgICBcCisgQ01ha2UvQ3VybFRlc3RzLmMgQ01ha2UvRmluZEdTUy5jbWFrZSBDTWFrZS9PdGhlclRlc3RzLmNtYWtlICAgXAorIENNYWtlL1BsYXRmb3Jtcy9XaW5kb3dzQ2FjaGUuY21ha2UgQ01ha2UvVXRpbGl0aWVzLmNtYWtlICAgICAgIFwKKyBpbmNsdWRlL2N1cmwvY3VybGJ1aWxkLmguY21ha2UgQ01ha2UvTWFjcm9zLmNtYWtlICAgICAgICAgICAgICBcCisgQ01ha2UvQ3VybFN5bWJvbEhpZGluZy5jbWFrZSBDTWFrZS9GaW5kQ0FSRVMuY21ha2UgICAgICAgICAgICAgXAorIENNYWtlL0ZpbmRMaWJTU0gyLmNtYWtlIENNYWtlL0ZpbmROR0hUVFAyLmNtYWtlCisKIAogVkM2X0xJQlRNUEwgPSBwcm9qZWN0cy9XaW5kb3dzL1ZDNi9saWIvbGliY3VybC50bXBsCiBWQzZfTElCRFNQID0gcHJvamVjdHMvV2luZG93cy9WQzYvbGliL2xpYmN1cmwuZHNwLmRpc3QKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCA2NDg4M2RjLi41NjdkNmQxIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0xLDQgKzEsNSBAQAogIVtjdXJsIGxvZ29dKGh0dHBzOi8vY2RuLnJhd2dpdC5jb20vY3VybC9jdXJsLXd3dy9tYXN0ZXIvbG9nby9jdXJsLWxvZ28uc3ZnKQorWyFbQ0lJIEJlc3QgUHJhY3RpY2VzXShodHRwczovL2Jlc3RwcmFjdGljZXMuY29yZWluZnJhc3RydWN0dXJlLm9yZy9wcm9qZWN0cy82My9iYWRnZSldKGh0dHBzOi8vYmVzdHByYWN0aWNlcy5jb3JlaW5mcmFzdHJ1Y3R1cmUub3JnL3Byb2plY3RzLzYzKQogCiBDdXJsIGlzIGEgY29tbWFuZC1saW5lIHRvb2wgZm9yIHRyYW5zZmVycmluZyBkYXRhIHNwZWNpZmllZCB3aXRoIFVSTAogc3ludGF4LiBGaW5kIG91dCBob3cgdG8gdXNlIGN1cmwgYnkgcmVhZGluZyBbdGhlIGN1cmwuMSBtYW4KZGlmZiAtLWdpdCBhL1JFQURNRS52ZXJzaW9uIGIvUkVBRE1FLnZlcnNpb24KaW5kZXggNDFhZTQyYi4uOWMyNTY4ZiAxMDA2NDQKLS0tIGEvUkVBRE1FLnZlcnNpb24KKysrIGIvUkVBRE1FLnZlcnNpb24KQEAgLTEsNiArMSw2IEBACi1VUkw6IGh0dHBzOi8vY3VybC5oYXh4LnNlL2Rvd25sb2FkL2N1cmwtNy41MC4xLnRhci5negotVmVyc2lvbjogNy41MC4xCi1VcHN0cmVhbSBjb21taXQ6IGYyY2IzYTAxMTkyZDM2Mzk1ZDE2YWNlYzZjZGI5MzQ0NmNhNmZkNDUKK1VSTDogaHR0cHM6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC03LjU0LjEudGFyLmd6CitWZXJzaW9uOiA3LjU0LjEKK1Vwc3RyZWFtIGNvbW1pdDogNTRiNjM2ZjE0NTQ2ZDNmZGU5ZjljNjdjM2IzMjcwMWQ3ODU2MzE2MQogTGljZW5zZTogTUlUCiBMaWNlbnNlIEZpbGU6IE5PVElDRQogQnVnQ29tcG9uZW50OiAzMTcxNApkaWZmIC0tZ2l0IGEvUkVMRUFTRS1OT1RFUyBiL1JFTEVBU0UtTk9URVMKaW5kZXggMTYzY2ViMS4uZjVkMTcyZiAxMDA2NDQKLS0tIGEvUkVMRUFTRS1OT1RFUworKysgYi9SRUxFQVNFLU5PVEVTCkBAIC0xLDI2ICsxLDUyIEBACi1DdXJsIGFuZCBsaWJjdXJsIDcuNTAuMQorQ3VybCBhbmQgbGliY3VybCA3LjUyLjAKIAotIFB1YmxpYyBjdXJsIHJlbGVhc2VzOiAgICAgICAgIDE1NwotIENvbW1hbmQgbGluZSBvcHRpb25zOiAgICAgICAgIDE4NQotIGN1cmxfZWFzeV9zZXRvcHQoKSBvcHRpb25zOiAgIDIyNAorIFB1YmxpYyBjdXJsIHJlbGVhc2VzOiAgICAgICAgIDE2MQorIENvbW1hbmQgbGluZSBvcHRpb25zOiAgICAgICAgIDIwNQorIGN1cmxfZWFzeV9zZXRvcHQoKSBvcHRpb25zOiAgIDI0MwogIFB1YmxpYyBmdW5jdGlvbnMgaW4gbGliY3VybDogIDYxCi0gQ29udHJpYnV0b3JzOiAgICAgICAgICAgICAgICAgMTQxOAorIENvbnRyaWJ1dG9yczogICAgICAgICAgICAgICAgIDE0NjcKKworVGhpcyByZWxlYXNlIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKworIG8gbnNzOiBtYXAgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgdG8gTlNTIGRlZmF1bHQKKyBvIHZ0bHM6IHN1cHBvcnQgVExTIDEuMyB2aWEgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMKKyBvIGN1cmw6IGludHJvZHVjZSB0aGUgLS10bHN2MS4zIG9wdGlvbiB0byBmb3JjZSBUTFMgMS4zCisgbyBjdXJsOiBBZGQgLS1yZXRyeS1jb25ucmVmdXNlZCBbMTFdCisgbyBwcm94eTogU3VwcG9ydCBIVFRQUyBwcm94eSBhbmQgU09DS1MrSFRUUChzKQogCiBUaGlzIHJlbGVhc2UgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBidWdmaXhlczoKIAotIG8gVExTOiBzd2l0Y2ggb2ZmIFNTTCBzZXNzaW9uIGlkIHdoZW4gY2xpZW50IGNlcnQgaXMgdXNlZCBbN10KLSBvIFRMUzogb25seSByZXVzZSBjb25uZWN0aW9ucyB3aXRoIHRoZSBzYW1lIGNsaWVudCBjZXJ0IFs4XQotIG8gY3VybF9tdWx0aV9jbGVhbnVwOiBjbGVhciBjb25uZWN0aW9uIHBvaW50ZXIgZm9yIGVhc3kgaGFuZGxlcyBbOV0KLSBvIGluY2x1ZGUgdGhlIENVUkxJTkZPX0hUVFBfVkVSU0lPTigzKSBtYW4gcGFnZSBpbnRvIHRoZSByZWxlYXNlIHRhcmJhbGwKLSBvIGluY2x1ZGUgdGhlIGh0dHAyLXNlcnZlci5wbCBzY3JpcHQgaW4gdGhlIHJlbGVhc2UgdGFyYmFsbAotIG8gdGVzdDU1ODogZml4IHRlc3QgYnkgc3RyaXBwaW5nIGZpbGUgcGF0aHMgZnJvbSBGRCBsaW5lcwotIG8gc3BuZWdvOiBDb3JyZWN0ZWQgbWlzcy1wbGFjZWQgKiBpbiBDdXJsX2F1dGhfc3BuZWdvX2NsZWFudXAoKSBkZWNsYXJhdGlvbgotIG8gdGVzdHM6IEZpeCBmb3IgaHR0cC8yIGZlYXR1cmUgWzFdCi0gbyBjbWFrZTogRml4IGZvciBzY2hhbm5lbCBzdXBwb3J0IFsyXQotIG8gY3VybC5oOiBtYWtlIHB1YmxpYyB0eXBlcyB2b2lkICogYWdhaW4gWzNdCi0gbyB3aW4zMjogZml4IGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGluIEN1cmxfbG9hZF9saWJyYXJ5IFs0XQotIG8gdHJhdmlzOiBmaXggT1NYIGJ1aWxkIGJ5IHJlLWluc3RhbGxpbmcgbGlidG9vbCBbNV0KLSBvIG1iZWR0bHM6IEZpeCBkZWJ1ZyBmdW5jdGlvbiBuYW1lIFs2XQorIG8gbXN2YzogcmVtb3ZlZCBhIHN0cmFnZ2xpbmcgcmVmZXJlbmNlIHRvIHN0cmVxdWFsLmMKKyBvIHdpbmJ1aWxkOiByZW1vdmUgc3RyY2FzZS5vYmogZnJvbSBjdXJsIGJ1aWxkIFsxXQorIG8gZXhhbXBsZXM6IGJ1Z2ZpeGVkIG11bHRpLXV2LmMKKyBvIGNvbmZpZ3VyZTogdmVyaWZ5IHRoYXQgY29tcGlsZXIgZ3Jva3MgLVdlcnJvcj1wYXJ0aWFsLWF2YWlsYWJpbGl0eSBbMl0KKyBvIG1iZWR0bHM6IGZpeCBidWlsZCB3aXRoIG1iZWR0bHMgdmVyc2lvbnMgPCAyLjQuMCBbM10KKyBvIGRpc3Q6IGFkZCB1bml0IHRlc3QgQ01ha2VMaXN0cy50eHQgdG8gdGhlIHRhcmJhbGwKKyBvIGN1cmwgLXc6IGFkZGVkIG1vcmUgZGVjaW1hbCBkaWdpdHMgdG8gdGltaW5nIGNvdW50ZXJzIFs0XQorIG8gZWFzeTogSW5pdGlhbGl6ZSBpbmZvIHZhcmlhYmxlcyBvbiBlYXN5IGluaXQgYW5kIGR1cGhhbmRsZSBbNV0KKyBvIGNtYWtlOiBkaXNhYmxlIHBvbGwgZm9yIG1hY09TIFs2XQorIG8gaHR0cDI6IERvbid0IHNlbmQgaGVhZGVyIGZpZWxkcyBwcm9oaWJpdGVkIGJ5IEhUVFAvMiBzcGVjIFs3XQorIG8gc3NoOiBjaGVjayBtZDUgZmluZ2VycHJpbnRzIGNhc2UgaW5zZW5zaXRpdmVseSAocmVncmVzc2lvbikgWzhdCisgbyBvcGVuc3NsOiBpbml0aWFsIFRMUyAxLjMgYWRhcHRpb25zCisgbyBjdXJsX2Zvcm1hZGQuMzogKl9GSUxFQ09OVEVOVCBhbmQgKl9GSUxFIG5lZWQgdGhlIGZpbGUgdG8gYmUga2VwdAorIG8gcHJpbnRmOiBmaXggIi4qZiIgaGFuZGxpbmcgWzldCisgbyBleGFtcGxlcy9maWxldXBsb2FkLmM6IGZjbG9zZSB0aGUgZmlsZSBhcyB3ZWxsCisgbyBTUE5FR086IEZpeCBtZW1vcnkgbGVhayB3aGVuIGF1dGhlbnRpY2F0aW9uIGZhaWxzIFsxMF0KKyBvIHJlYWxsb2M6IHVzZSBDdXJsX3NhZmVyZWFsbG9jIHRvIGF2b2lkIGNvbW1vbiBtaXN0YWtlcyBbMTJdCisgbyBvcGVuc3NsOiBtYWtlIHN1cmUgdG8gZmFpbCBpbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCBQUk5HIHNlZWRpbmcgZmFpbHMKKyBvIFVSTC1wYXJzZXI6IGZvciBmaWxlOi8vW2hvc3RdLyBVUkxzLCB0aGUgW2hvc3RdIG11c3QgYmUgbG9jYWxob3N0IFsxM10KKyBvIHRpbWV2YWw6IHByZWZlciB0aW1lX3QgdG8gaG9sZCBzZWNvbmRzIGluc3RlYWQgb2YgbG9uZworIG8gQ3VybF9yYW5kOiBmaXhlZCBhbmQgbW92ZWQgdG8gcmFuZC5jIFsxNF0KKyBvIGN1cmw6IGFkZCAtLWZhaWwtZWFybHkgWzE1XQorIG8gZ2xvYjogZml4IFthLWNdIGdsb2JiaW5nIHJlZ3Jlc3Npb24gWzE2XQorIG8gZGFyd2luc3NsOiBmaXggU1NMIGNsaWVudCBjZXJ0aWZpY2F0ZSBub3QgZm91bmQgb24gTWFjT1MgU2llcnJhIFsxN10KKyBvIGN1cmwuMTogQ2xhcmlmeSAtLWR1bXAtaGVhZGVyIG9ubHkgd3JpdGVzIHJlY2VpdmVkIGhlYWRlcnMKKyBvIGh0dHAyOiBGaXggYWRkcmVzcyBzYW5pdGl6ZXIgbWVtY3B5IHdhcm5pbmcKKyBvIGh0dHAyOiBVc2UgaHVnZSBIVFRQLzIgd2luZG93cyBbMThdCisgbyBjb25uZWN0czogRG9uJ3QgbWl4IHVuaXggZG9tYWluIHNvY2tldHMgd2l0aCByZWd1bGFyIG9uZXMKKyBvIHVybDogRml4IGNvbm4gcmV1c2UgZm9yIGxvY2FsIHBvcnRzIGFuZCBpbnRlcmZhY2VzIFsxOV0KKyBvIHg1MDk6IExpbWl0IEFTTi4xIHN0cnVjdHVyZSBzaXplcyB0byAyNTZLCisgbyBjaGVja3NyYzogYWRkIG1vcmUgY2hlY2tzCiAKIFRoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGtub3duIGJ1Z3M6CiAKQEAgLTI5LDIyICs1NSwzNSBAQAogVGhpcyByZWxlYXNlIHdvdWxkIG5vdCBoYXZlIGxvb2tlZCBsaWtlIHRoaXMgd2l0aG91dCBoZWxwLCBjb2RlLCByZXBvcnRzIGFuZAogYWR2aWNlIGZyb20gZnJpZW5kcyBsaWtlIHRoZXNlOgogCi0gIEFsYWluIERhbnRlbnksIEJydSBSb20sIERhbiBGYW5kcmljaCwgRGFuaWVsIFN0ZW5iZXJnLCBFcmljIFJlc2NvcmxhLAotICBGZXJuYW5kbyBNdcOxb3osIEthbWlsIER1ZGthLCBNYXJjZWxvIEVjaGV2ZXJyaWEsIE1hcnRpbiBWZWpuw6FyLAotICBQYXRyaWNrIE1vbm5lcmF0LCBQYXVsIEhvd2FydGgsIFBldGVyIEZyw7xoYmVyZ2VyLCBSYXkgU2F0aXJvLCBTZXJnZWkgTmlrdWxvdiwKLSAgU3RldmUgSG9sbWUsIFRob21hcyBHbGFuem1hbm4sIFZpa3RvciBTemFrw6F0cywgWW9uZ2dhbmcgTHVvLAotICAoMTggY29udHJpYnV0b3JzKQorICBBZGFtIFBpZ2dvdHQsIGFmcmluZCBvbiBnaXRodWIsIEFsZXggQ2hhbiwgQWxleCBSb3Vzc2tvdiwgQW5kcmVpIFNlZG9pLAorICBCcnVjZSBTdGVwaGVucywgRGFuIEZhbmRyaWNoLCBEYW5pZWwgSHdhbmcsIERhbmllbCBTdGVuYmVyZywgRGF2ZSBSZWlzbmVyLAorICBEYXZpZCBTY2h3ZWlrZXJ0LCBEbWl0cnkgS3Vyb2Noa2luLCBGcmFuayBHZXZhZXJ0cywgSXNhYWMgQm91a3JpcywKKyAgSmFrdWIgWmFrcnpld3NraSwgS2FtaWwgRHVka2EsIE1hcmNlbCBSYWFkLCBNYXVybyBSYXBwYSwgTWlrZSBDcm93ZSwKKyAgTmVhbCBQb29sZSwgTmljayBaaXR6bWFubiwgT2toaW4gVmFzaWxpaiwgUGF0cmljayBNb25uZXJhdCwgUGV0ZXIgV3UsCisgIFJheSBTYXRpcm8sIFJpY2tpIEhpcm5lciwgVGF0c3VoaXJvIFRzdWppa2F3YSwgVGhvbWFzIEdsYW56bWFubiwgVG9ueSBLZWxtYW4sCisgIFZhc3kgT2toaW4sCisgICgzMCBjb250cmlidXRvcnMpCiAKICAgICAgICAgVGhhbmtzISAoYW5kIHNvcnJ5IGlmIEkgZm9yZ290IHRvIG1lbnRpb24gc29tZW9uZSkKIAogUmVmZXJlbmNlcyB0byBidWcgcmVwb3J0cyBhbmQgZGlzY3Vzc2lvbnMgb24gaXNzdWVzOgogCi0gWzFdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxNi0wNy8wMDcwLmh0bWwKLSBbMl0gPSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9OTE3Ci0gWzNdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnLz9pPTkyNgotIFs0XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT05MzgKLSBbNV0gPSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9OTM5Ci0gWzZdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxNi0wOC8wMDAxLmh0bWwKLSBbN10gPSBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2Fkdl8yMDE2MDgwM0EuaHRtbAotIFs4XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvYWR2XzIwMTYwODAzQi5odG1sCi0gWzldID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxNjA4MDNDLmh0bWwKKyBbMV0gPSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9MTA5OAorIFsyXSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT0xMTA0CisgWzNdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnLz9pPTEwODcKKyBbNF0gPSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9MTEwNgorIFs1XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT0xMTAzCisgWzZdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnLz9pPTEwODkKKyBbN10gPSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9MTA5MgorIFs4XSA9IGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvY29tbWl0L2NlOGQwOTQ4M2VlYTJmY2IxYjUwZTMyM2UxYThlZDFmMzYxM2IyZTMjY29tbWl0Y29tbWVudC0xOTY2NjE0NgorIFs5XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT0xMTEzCisgWzEwXSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT0xMTE1CisgWzExXSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT0xMDY0CisgWzEyXSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTYtMTEvMDA4Ny5odG1sCisgWzEzXSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTYtMTEvMDEwNC5odG1sCisgWzE0XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTYtMTEvMDExOS5odG1sCisgWzE1XSA9IGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvYXJjaGl2ZS0yMDE2LTExLzAwMzguaHRtbAorIFsxNl0gPSBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2NvbW1pdC9lZTRmNzY2MDZjZmE0ZWUwNjhiZjI4ZWRkMzdjOGRhZTdlOGRiMzE3I2NvbW1pdGNvbW1lbnQtMTk4MjMxNDYKKyBbMTddID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnLz9pPTExMDUKKyBbMThdID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnLz9pPTExMDIKKyBbMTldID0gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxNi0xMS8wMTM3Lmh0bWwKZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNAppbmRleCBmYTYyMWI1Li4yYWJhZThkIDEwMDY0NAotLS0gYS9hY2luY2x1ZGUubTQKKysrIGIvYWNpbmNsdWRlLm00CkBAIC01LDcgKzUsNyBAQAogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICMKLSMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyMgQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICMKICMgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICMgeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzIsOCArMzIsOCBAQAogQUNfREVGVU4oW0NVUkxfQ0hFQ0tfREVGXSwgWwogICBBQ19SRVFVSVJFKFtDVVJMX0NQUF9QXSlkbmwKICAgT0xEQ1BQRkxBR1M9JENQUEZMQUdTCi0gICMgQ1BQUEZMQUdTIGNvbWVzIGZyb20gQ1VSTF9DUFBfUAotICBDUFBGTEFHUz0iJENQUFBGTEFHUyIKKyAgIyBDUFBQRkxBRyBjb21lcyBmcm9tIENVUkxfQ1BQX1AKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkQ1BQUEZMQUciCiAgIEFTX1ZBUl9QVVNIREVGKFthY19IYXZlRGVmXSwgW2N1cmxfY3ZfaGF2ZV9kZWZfJDFdKWRubAogICBBU19WQVJfUFVTSERFRihbYWNfRGVmXSwgW2N1cmxfY3ZfZGVmXyQxXSlkbmwKICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KQEAgLTE4NTYsNyArMTg1Niw3IEBACiAgIEFDX0NIRUNLX0hFQURFUlMoc3lzL3R5cGVzLmggc3lzL3RpbWUuaCB0aW1lLmgpCiAgIEFDX01TR19DSEVDS0lORyhbZm9yIG1vbm90b25pYyBjbG9ja19nZXR0aW1lXSkKICAgIwotICBpZiB0ZXN0ICJ4JGRvbnR3YW50X3J0IiA9PSAieG5vIiA7IHRoZW4KKyAgaWYgdGVzdCAieCRkb250d2FudF9ydCIgPSAieG5vIiA7IHRoZW4KICAgICBBQ19DT01QSUxFX0lGRUxTRShbCiAgICAgICBBQ19MQU5HX1BST0dSQU0oW1sKICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICkBAIC0zMTg3LDEyICszMTg3LDU5IEBACiAgICAgaWYgdGVzdCAieCRjcHBfcCIgPSAieG5vIjsgdGhlbgogICAgICAgQUNfTVNHX1dBUk4oW2ZhaWxlZCB0byBmaWd1cmUgb3V0IGNwcCAtUCBhbHRlcm5hdGl2ZV0pCiAgICAgICAjIHdpdGhvdXQgLVAKLSAgICAgIENQUFBGTEFHUz0kT0xEQ1BQRkxBR1MKKyAgICAgIENQUFBGTEFHPSIiCiAgICAgZWxzZQogICAgICAgIyB3aXRoIC1QCi0gICAgICBDUFBQRkxBR1M9JENQUEZMQUdTCisgICAgICBDUFBQRkxBRz0iLVAiCiAgICAgZmkKICAgICBkbmwgcmVzdG9yZSBDUFBGTEFHUwogICAgIENQUEZMQUdTPSRPTERDUFBGTEFHUworICBlbHNlCisgICAgIyB3aXRob3V0IC1QCisgICAgQ1BQUEZMQUc9IiIKICAgZmkKIF0pCisKKworZG5sIENVUkxfTUFDX0NGTEFHUworZG5sCitkbmwgQ2hlY2sgaWYgLW1tYWNvc3gtdmVyc2lvbi1taW4sIC1taXBob25lb3MtdmVyc2lvbi1taW4gb3IgYW55Citkbmwgc2ltaWxhciBhcmUgc2V0IG1hbnVhbGx5LCBvdGhlcndpc2UgZG8uIEFuZCBzZXQKK2RubCAtV2Vycm9yPXBhcnRpYWwtYXZhaWxhYmlsaXR5LgorZG5sCisKK0FDX0RFRlVOKFtDVVJMX01BQ19DRkxBR1NdLCBbCisKKyAgdHN0X2NmbGFncz0ibm8iCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKQorICAgICAgdHN0X2NmbGFncz0ieWVzIgorICAgICAgOzsKKyAgZXNhYworCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGdvb2QtdG8tdXNlIE1hYyBDRkxBR1NdKQorICBBQ19NU0dfUkVTVUxUKFskdHN0X2NmbGFnc10pOworCisgIGlmIHRlc3QgIiR0c3RfY2ZsYWdzIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgKnZlcnNpb24tbWluIGluIENGTEFHU10pCisgICAgbWluPSIiCisgICAgaWYgdGVzdCAteiAiJChlY2hvICRDRkxBR1MgfCBncmVwIG0uKm9zLiotdmVyc2lvbi1taW4pIjsgdGhlbgorICAgICAgbWluPSItbW1hY29zeC12ZXJzaW9uLW1pbj0xMC44IgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRtaW4iCisgICAgZmkKKyAgICBpZiB0ZXN0IC16ICIkbWluIjsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbc2V0IGJ5IHVzZXJdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoWyRtaW4gc2V0XSkKKyAgICBmaQorCisgICAgb2xkX0NGTEFHUz0kQ0ZMQUdTCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3I9cGFydGlhbC1hdmFpbGFiaWxpdHkiCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICRDQyBhY2NlcHRzIC1XZXJyb3I9cGFydGlhbC1hdmFpbGFiaWxpdHldKQorICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oKV0sCisgICAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgICAgW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIENGTEFHUz0kb2xkX0NGTEFHU10pCisgIGZpCisKK10pCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZWMzZDIyYS4uZTJlZjgwMiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAKIGRubCBTb2xhcmlzIHBrZ2FkZCBzdXBwb3J0IGRlZmluaXRpb25zCiBQS0dBRERfUEtHPSJIQVhYY3VybCIKLVBLR0FERF9OQU1FPSJjVVJMIC0gYSBjbGllbnQgdGhhdCBncm9rcyBVUkxzIgorUEtHQUREX05BTUU9ImN1cmwgLSBhIGNsaWVudCB0aGF0IGdyb2tzIFVSTHMiCiBQS0dBRERfVkVORE9SPSJjdXJsLmhheHguc2UiCiBBQ19TVUJTVChQS0dBRERfUEtHKQogQUNfU1VCU1QoUEtHQUREX05BTUUpCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBjdXJsX3Jlc19tc2c9ImRlZmF1bHQgKC0tZW5hYmxlLWFyZXMgLyAtLWVuYWJsZS10aHJlYWRlZC1yZXNvbHZlcikiCiAgICBjdXJsX2lwdjZfbXNnPSJubyAgICAgICgtLWVuYWJsZS1pcHY2KSIKIGN1cmxfdW5peF9zb2NrZXRzX21zZz0ibm8gICAgICAoLS1lbmFibGUtdW5peC1zb2NrZXRzKSIKLSAgICBjdXJsX2lkbl9tc2c9Im5vICAgICAgKC0td2l0aC17bGliaWRuLHdpbmlkbn0pIgorICAgIGN1cmxfaWRuX21zZz0ibm8gICAgICAoLS13aXRoLXtsaWJpZG4yLHdpbmlkbn0pIgogIGN1cmxfbWFudWFsX21zZz0ibm8gICAgICAoLS1lbmFibGUtbWFudWFsKSIKIGN1cmxfbGliY3VybF9tc2c9ImVuYWJsZWQgKC0tZGlzYWJsZS1saWJjdXJsLW9wdGlvbikiCiBjdXJsX3ZlcmJvc2VfbXNnPSJlbmFibGVkICgtLWRpc2FibGUtdmVyYm9zZSkiCkBAIC0zNDksNiArMzQ5LDggQEAKIGVzYWMKIENVUkxfQ0hFQ0tfV0lOMzJfTEFSR0VGSUxFCiAKK0NVUkxfTUFDX0NGTEFHUworCiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBkbmwgc3dpdGNoIG9mZiBwYXJ0aWN1bGFyIHByb3RvY29scwogZG5sCkBAIC04ODMsMTcgKzg4NSwzMCBAQAogICAgIE9QVF9aTElCPSIiCiAgIGZpCiAKLSAgaWYgdGVzdCAteiAiJE9QVF9aTElCIiA7IHRoZW4KLSAgICBkbmwgY2hlY2sgZm9yIHRoZSBsaWIgZmlyc3Qgd2l0aG91dCBzZXR0aW5nIGFueSBuZXcgcGF0aCwgc2luY2UgbWFueQotICAgIGRubCBwZW9wbGUgaGF2ZSBpdCBpbiB0aGUgZGVmYXVsdCBwYXRoCisgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKHpsaWIpCiAKLSAgICBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUVuZCwKKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICBMSUJTPSJgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIHpsaWJgICRMSUJTIgorICAgIExERkxBR1M9ImAkUEtHQ09ORklHIC0tbGlicy1vbmx5LUwgemxpYmAgJExERkxBR1MiCisgICAgQ1BQRkxBR1M9ImAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSB6bGliYCAkQ1BQRkxBR1MiCisgICAgT1BUX1pMSUI9IiIKKyAgICBIQVZFX0xJQlo9IjEiCisgIGZpCisKKyAgaWYgdGVzdCAteiAiJE9QVF9aTElCIiA7IHRoZW4KKworICAgIGlmIHRlc3QgLXogIiRIQVZFX0xJQloiOyB0aGVuCisKKyAgICAgIGRubCBDaGVjayBmb3IgdGhlIGxpYiB3aXRob3V0IHNldHRpbmcgYW55IG5ldyBwYXRoLCBzaW5jZSBtYW55CisgICAgICBkbmwgcGVvcGxlIGhhdmUgaXQgaW4gdGhlIGRlZmF1bHQgcGF0aAorCisgICAgICBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUVuZCwKICAgICAgICAgICAgICAgICAgICBkbmwgbGlieiBmb3VuZCwgc2V0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgIFtIQVZFX0xJQlo9IjEiCiAgICAgICAgICAgICAgICAgICAgIExJQlM9Ii1seiAkTElCUyJdLAogICAgICAgICAgICAgICAgICAgIGRubCBpZiBubyBsaWIgZm91bmQsIHRyeSAvdXNyL2xvY2FsCiAgICAgICAgICAgICAgICAgICAgW09QVF9aTElCPSIvdXNyL2xvY2FsIl0pCi0KKyAgICBmaQogICBmaQogCiAgIGRubCBBZGQgYSBub25lbXB0eSBwYXRoIHRvIHRoZSBjb21waWxlciBmbGFncwpAQCAtMTM1MCwxOCArMTM2NSwxOCBAQAogCiBPUFRfREFSV0lOU1NMPW5vCiBBQ19BUkdfV0lUSChkYXJ3aW5zc2wsZG5sCi1BQ19IRUxQX1NUUklORyhbLS13aXRoLWRhcndpbnNzbF0sW2VuYWJsZSBpT1MvTWFjIE9TIFggbmF0aXZlIFNTTC9UTFNdKQotQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1kYXJ3aW5zc2xdLCBbZGlzYWJsZSBpT1MvTWFjIE9TIFggbmF0aXZlIFNTTC9UTFNdKSwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGFyd2luc3NsXSxbZW5hYmxlIEFwcGxlIE9TIG5hdGl2ZSBTU0wvVExTXSkKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtZGFyd2luc3NsXSwgW2Rpc2FibGUgQXBwbGUgT1MgbmF0aXZlIFNTTC9UTFNdKSwKICAgT1BUX0RBUldJTlNTTD0kd2l0aHZhbCkKIAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBpT1MvTWFjIE9TIFggbmF0aXZlIFNTTC9UTFNdKQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBBcHBsZSBPUyBuYXRpdmUgU1NML1RMU10pCiBpZiB0ZXN0ICIkY3VybF9zc2xfbXNnIiA9ICIkaW5pdF9zc2xfbXNnIjsgdGhlbgogICBpZiB0ZXN0ICJ4JE9QVF9EQVJXSU5TU0wiICE9ICJ4bm8iICYmCiAgICAgIHRlc3QgLWQgIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1NlY3VyaXR5LmZyYW1ld29yayI7IHRoZW4KICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICBBQ19ERUZJTkUoVVNFX0RBUldJTlNTTCwgMSwgW3RvIGVuYWJsZSBpT1MvTWFjIE9TIFggbmF0aXZlIFNTTC9UTFMgc3VwcG9ydF0pCisgICAgQUNfREVGSU5FKFVTRV9EQVJXSU5TU0wsIDEsIFt0byBlbmFibGUgQXBwbGUgT1MgbmF0aXZlIFNTTC9UTFMgc3VwcG9ydF0pCiAgICAgQUNfU1VCU1QoVVNFX0RBUldJTlNTTCwgWzFdKQotICAgIGN1cmxfc3NsX21zZz0iZW5hYmxlZCAoaU9TL01hYyBPUyBYLW5hdGl2ZSkiCisgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChBcHBsZSBPUy1uYXRpdmUpIgogICAgIERBUldJTlNTTF9FTkFCTEVEPTEKICAgICBMREZMQUdTPSIkTERGTEFHUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgU2VjdXJpdHkiCiAgIGVsc2UKQEAgLTE2MTQsMTEgKzE2MjksOCBAQAogICAgIGRubCBTU0xfZ2V0X3NodXRkb3duIChidXQgdGhpcyBjaGVjayB3b24ndCBhY3R1YWxseSBkZXRlY3QgaXQgdGhlcmUKICAgICBkbmwgYXMgaXQncyBhIG1hY3JvIHRoYXQgbmVlZHMgdGhlIGhlYWRlciBmaWxlcyBiZSBpbmNsdWRlZCkKIAotICAgIEFDX0NIRUNLX0ZVTkNTKCBSQU5EX3N0YXR1cyBcCi0gICAgICAgICAgICAgICAgICAgIFJBTkRfc2NyZWVuIFwKLSAgICAgICAgICAgICAgICAgICAgUkFORF9lZ2QgXAorICAgIEFDX0NIRUNLX0ZVTkNTKCBSQU5EX2VnZCBcCiAgICAgICAgICAgICAgICAgICAgIEVOR0lORV9jbGVhbnVwIFwKLSAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGEgXAogICAgICAgICAgICAgICAgICAgICBTU0xfZ2V0X3NodXRkb3duIFwKICAgICAgICAgICAgICAgICAgICAgU1NMdjJfY2xpZW50X21ldGhvZCApCiAKQEAgLTI1NjEsNyArMjU3Myw3IEBACiAgICAgRElSX1NTSDI9JHtQUkVGSVhfU1NIMn0vbGliJGxpYnN1ZmYKICAgZmkKIAotICBMREZMQUdTPSIkTERGTEFHUyAkTERfU1NIMiIKKyAgTERGTEFHUz0iJExEX1NTSDIgJExERkxBR1MiCiAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJENQUF9TU0gyIgogICBMSUJTPSIkTElCX1NTSDIgJExJQlMiCiAKQEAgLTI4MDgsMTUgKzI4MjAsMTUgQEAKIGRubCBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIElETiBsaWJyYXJpZXMgYW5kIGhlYWRlcnMKIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCB3aXRoIGxpYmlkbl0pCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgd2l0aCBsaWJpZG4yXSkKIE9QVF9JRE49ImRlZmF1bHQiCiBBQ19BUkdfV0lUSChsaWJpZG4sCi1BQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmlkbj1QQVRIXSxbRW5hYmxlIGxpYmlkbiB1c2FnZV0pCi1BQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYmlkbl0sW0Rpc2FibGUgbGliaWRuIHVzYWdlXSksCitBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmlkbjI9UEFUSF0sW0VuYWJsZSBsaWJpZG4yIHVzYWdlXSkKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGliaWRuMl0sW0Rpc2FibGUgbGliaWRuMiB1c2FnZV0pLAogICBbT1BUX0lETj0kd2l0aHZhbF0pCiBjYXNlICIkT1BUX0lETiIgaW4KICAgbm8pCi0gICAgZG5sIC0td2l0aG91dC1saWJpZG4gb3B0aW9uIHVzZWQKKyAgICBkbmwgLS13aXRob3V0LWxpYmlkbjIgb3B0aW9uIHVzZWQKICAgICB3YW50X2lkbj0ibm8iCiAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQogICAgIDs7CkBAIC0yODI3LDEzICsyODM5LDEzIEBACiAgICAgQUNfTVNHX1JFU1VMVChbKGFzc3VtZWQpIHllc10pCiAgICAgOzsKICAgeWVzKQotICAgIGRubCAtLXdpdGgtbGliaWRuIG9wdGlvbiB1c2VkIHdpdGhvdXQgcGF0aAorICAgIGRubCAtLXdpdGgtbGliaWRuMiBvcHRpb24gdXNlZCB3aXRob3V0IHBhdGgKICAgICB3YW50X2lkbj0ieWVzIgogICAgIHdhbnRfaWRuX3BhdGg9ImRlZmF1bHQiCiAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKICAgICA7OwogICAqKQotICAgIGRubCAtLXdpdGgtbGliaWRuIG9wdGlvbiB1c2VkIHdpdGggcGF0aAorICAgIGRubCAtLXdpdGgtbGliaWRuMiBvcHRpb24gdXNlZCB3aXRoIHBhdGgKICAgICB3YW50X2lkbj0ieWVzIgogICAgIHdhbnRfaWRuX3BhdGg9IiR3aXRodmFsIgogICAgIEFDX01TR19SRVNVTFQoW3llcyAoJHdpdGh2YWwpXSkKQEAgLTI4NTAsMzMgKzI4NjIsMzMgQEAKICAgaWYgdGVzdCAiJHdhbnRfaWRuX3BhdGgiICE9ICJkZWZhdWx0IjsgdGhlbgogICAgIGRubCBwYXRoIGhhcyBiZWVuIHNwZWNpZmllZAogICAgIElETl9QQ0RJUj0iJHdhbnRfaWRuX3BhdGgvbGliJGxpYnN1ZmYvcGtnY29uZmlnIgotICAgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKGxpYmlkbiwgWyRJRE5fUENESVJdKQorICAgIENVUkxfQ0hFQ0tfUEtHQ09ORklHKGxpYmlkbjIsIFskSUROX1BDRElSXSkKICAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iOyB0aGVuCiAgICAgICBJRE5fTElCUz1gQ1VSTF9FWFBPUlRfUENESVIoWyRJRE5fUENESVJdKSBkbmwKLSAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbjIgMj4vZGV2L251bGxgCiAgICAgICBJRE5fTERGTEFHUz1gQ1VSTF9FWFBPUlRfUENESVIoWyRJRE5fUENESVJdKSBkbmwKLSAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgICAgJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYmlkbjIgMj4vZGV2L251bGxgCiAgICAgICBJRE5fQ1BQRkxBR1M9YENVUkxfRVhQT1JUX1BDRElSKFskSUROX1BDRElSXSkgZG5sCi0gICAgICAgICRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIGxpYmlkbiAyPi9kZXYvbnVsbGAKKyAgICAgICAgJFBLR0NPTkZJRyAtLWNmbGFncy1vbmx5LUkgbGliaWRuMiAyPi9kZXYvbnVsbGAKICAgICAgIElETl9ESVI9YGVjaG8gJElETl9MREZMQUdTIHwgJFNFRCAtZSAncy8tTC8vJ2AKICAgICBlbHNlCiAgICAgICBkbmwgcGtnLWNvbmZpZyBub3QgYXZhaWxhYmxlIG9yIHByb3ZpZGVzIG5vIGluZm8KLSAgICAgIElETl9MSUJTPSItbGlkbiIKKyAgICAgIElETl9MSUJTPSItbGlkbjIiCiAgICAgICBJRE5fTERGTEFHUz0iLUwkd2FudF9pZG5fcGF0aC9saWIkbGlic3VmZiIKICAgICAgIElETl9DUFBGTEFHUz0iLUkkd2FudF9pZG5fcGF0aC9pbmNsdWRlIgogICAgICAgSUROX0RJUj0iJHdhbnRfaWRuX3BhdGgvbGliJGxpYnN1ZmYiCiAgICAgZmkKICAgZWxzZQogICAgIGRubCBwYXRoIG5vdCBzcGVjaWZpZWQKLSAgICBDVVJMX0NIRUNLX1BLR0NPTkZJRyhsaWJpZG4pCisgICAgQ1VSTF9DSEVDS19QS0dDT05GSUcobGliaWRuMikKICAgICBpZiB0ZXN0ICIkUEtHQ09ORklHIiAhPSAibm8iOyB0aGVuCi0gICAgICBJRE5fTElCUz1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbiAyPi9kZXYvbnVsbGAKLSAgICAgIElETl9MREZMQUdTPWAkUEtHQ09ORklHIC0tbGlicy1vbmx5LUwgbGliaWRuIDI+L2Rldi9udWxsYAotICAgICAgSUROX0NQUEZMQUdTPWAkUEtHQ09ORklHIC0tY2ZsYWdzLW9ubHktSSBsaWJpZG4gMj4vZGV2L251bGxgCisgICAgICBJRE5fTElCUz1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1sIGxpYmlkbjIgMj4vZGV2L251bGxgCisgICAgICBJRE5fTERGTEFHUz1gJFBLR0NPTkZJRyAtLWxpYnMtb25seS1MIGxpYmlkbjIgMj4vZGV2L251bGxgCisgICAgICBJRE5fQ1BQRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3Mtb25seS1JIGxpYmlkbjIgMj4vZGV2L251bGxgCiAgICAgICBJRE5fRElSPWBlY2hvICRJRE5fTERGTEFHUyB8ICRTRUQgLWUgJ3MvLUwvLydgCiAgICAgZWxzZQogICAgICAgZG5sIHBrZy1jb25maWcgbm90IGF2YWlsYWJsZSBvciBwcm92aWRlcyBubyBpbmZvCi0gICAgICBJRE5fTElCUz0iLWxpZG4iCisgICAgICBJRE5fTElCUz0iLWxpZG4yIgogICAgIGZpCiAgIGZpCiAgICMKQEAgLTI4OTYsOSArMjkwOCw5IEBACiAgIExERkxBR1M9IiRJRE5fTERGTEFHUyAkTERGTEFHUyIKICAgTElCUz0iJElETl9MSUJTICRMSUJTIgogICAjCi0gIEFDX01TR19DSEVDS0lORyhbaWYgaWRuYV90b19hc2NpaV80aSBjYW4gYmUgbGlua2VkXSkKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBpZG4yX2xvb2t1cF91bCBjYW4gYmUgbGlua2VkXSkKICAgQUNfTElOS19JRkVMU0UoWwotICAgIEFDX0xBTkdfRlVOQ19MSU5LX1RSWShbaWRuYV90b19hc2NpaV80aV0pCisgICAgQUNfTEFOR19GVU5DX0xJTktfVFJZKFtpZG4yX2xvb2t1cF91bF0pCiAgIF0sWwogICAgIEFDX01TR19SRVNVTFQoW3llc10pCiAgICAgdHN0X2xpbmtzX2xpYmlkbj0ieWVzIgpAQCAtMjkwNiwzNyArMjkxOCwxOSBAQAogICAgIEFDX01TR19SRVNVTFQoW25vXSkKICAgICB0c3RfbGlua3NfbGliaWRuPSJubyIKICAgXSkKLSAgaWYgdGVzdCAiJHRzdF9saW5rc19saWJpZG4iID0gIm5vIjsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbaWYgaWRuYV90b19hc2NpaV9seiBjYW4gYmUgbGlua2VkXSkKLSAgICBBQ19MSU5LX0lGRUxTRShbCi0gICAgICBBQ19MQU5HX0ZVTkNfTElOS19UUlkoW2lkbmFfdG9fYXNjaWlfbHpdKQotICAgIF0sWwotICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgIHRzdF9saW5rc19saWJpZG49InllcyIKLSAgICBdLFsKLSAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICAgIHRzdF9saW5rc19saWJpZG49Im5vIgotICAgIF0pCi0gIGZpCiAgICMKKyAgQUNfQ0hFQ0tfSEVBREVSUyggaWRuMi5oICkKKwogICBpZiB0ZXN0ICIkdHN0X2xpbmtzX2xpYmlkbiIgPSAieWVzIjsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0xJQklETiwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWRuJyBsaWJyYXJ5ICgtbGlkbikuXSkKKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJJRE4yLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpZG4yJyBsaWJyYXJ5ICgtbGlkbjIpLl0pCiAgICAgZG5sIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBsaWJpZG4gaGF2ZSBkaWZmZXJlbnQgc2V0dXBzIG9mIHRoZXNlOgotICAgIEFDX0NIRUNLX0ZVTkNTKCBpZG5fZnJlZSBpZG5hX3N0cmVycm9yIHRsZF9zdHJlcnJvciApCi0gICAgQUNfQ0hFQ0tfSEVBREVSUyggaWRuLWZyZWUuaCB0bGQuaCApCi0gICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGxkX2giID0gInh5ZXMiOyB0aGVuCi0gICAgICBBQ19TVUJTVChbSUROX0VOQUJMRURdLCBbMV0pCi0gICAgICBjdXJsX2lkbl9tc2c9ImVuYWJsZWQiCi0gICAgICBpZiB0ZXN0IC1uICIkSUROX0RJUiIgLWEgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KLSAgICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRJRE5fRElSIgotICAgICAgICBleHBvcnQgTERfTElCUkFSWV9QQVRICi0gICAgICAgIEFDX01TR19OT1RJQ0UoW0FkZGVkICRJRE5fRElSIHRvIExEX0xJQlJBUllfUEFUSF0pCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIEFDX01TR19XQVJOKFtMaWJyYXJpZXMgZm9yIElETiBzdXBwb3J0IHRvbyBvbGQ6IElETiBkaXNhYmxlZF0pCi0gICAgICBDUFBGTEFHUz0iJGNsZWFuX0NQUEZMQUdTIgotICAgICAgTERGTEFHUz0iJGNsZWFuX0xERkxBR1MiCi0gICAgICBMSUJTPSIkY2xlYW5fTElCUyIKKworICAgIEFDX1NVQlNUKFtJRE5fRU5BQkxFRF0sIFsxXSkKKyAgICBjdXJsX2lkbl9tc2c9ImVuYWJsZWQgKGxpYmlkbjIpIgorICAgIGlmIHRlc3QgLW4gIiRJRE5fRElSIiAtYSAieCRjcm9zc19jb21waWxpbmciICE9ICJ4eWVzIjsgdGhlbgorICAgICAgTERfTElCUkFSWV9QQVRIPSIkTERfTElCUkFSWV9QQVRIOiRJRE5fRElSIgorICAgICAgZXhwb3J0IExEX0xJQlJBUllfUEFUSAorICAgICAgQUNfTVNHX05PVElDRShbQWRkZWQgJElETl9ESVIgdG8gTERfTElCUkFSWV9QQVRIXSkKICAgICBmaQogICBlbHNlCiAgICAgQUNfTVNHX1dBUk4oW0Nhbm5vdCBmaW5kIGxpYnJhcmllcyBmb3IgSUROIHN1cHBvcnQ6IElETiBkaXNhYmxlZF0pCkBAIC0zNjgzLDggKzM2NzcsOCBAQAogCiBpZiB0ZXN0ICJ4JENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCIgIT0gIngxIjsgdGhlbgogICBpZiB0ZXN0ICJ4JE9QRU5TU0xfRU5BQkxFRCIgPSAieDEiIC1vICJ4JFVTRV9XSU5ET1dTX1NTUEkiID0gIngxIiBcCi0gICAgICAtbyAieCRHTlVUTFNfRU5BQkxFRCIgPSAieDEiIC1vICJ4JE5TU19FTkFCTEVEIiA9ICJ4MSIgXAotICAgICAgLW8gIngkREFSV0lOU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgorICAgICAgLW8gIngkR05VVExTX0VOQUJMRUQiID0gIngxIiAtbyAieCRNQkVEVExTX0VOQUJMRUQiID0gIngxIiBcCisgICAgICAtbyAieCROU1NfRU5BQkxFRCIgPSAieDEiIC1vICJ4JERBUldJTlNTTF9FTkFCTEVEIiA9ICJ4MSI7IHRoZW4KICAgICBTVVBQT1JUX0ZFQVRVUkVTPSIkU1VQUE9SVF9GRUFUVVJFUyBOVExNIgogCiAgICAgaWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfSFRUUCIgIT0gIngxIiAtYSBcCkBAIC0zNzU2LDggKzM3NTAsOCBAQAogaWYgdGVzdCAieCRDVVJMX0RJU0FCTEVfU01CIiAhPSAieDEiIFwKICAgICAtYSAieCRDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgiICE9ICJ4MSIgXAogICAgIC1hIFwoICJ4JE9QRU5TU0xfRU5BQkxFRCIgPSAieDEiIC1vICJ4JFVTRV9XSU5ET1dTX1NTUEkiID0gIngxIiBcCi0gICAgICAtbyAieCRHTlVUTFNfRU5BQkxFRCIgPSAieDEiIC1vICJ4JE5TU19FTkFCTEVEIiA9ICJ4MSIgXAotICAgICAgLW8gIngkREFSV0lOU1NMX0VOQUJMRUQiID0gIngxIiBcKTsgdGhlbgorICAgICAgLW8gIngkR05VVExTX0VOQUJMRUQiID0gIngxIiAtbyAieCRNQkVEVExTX0VOQUJMRUQiID0gIngxIiBcCisgICAgICAtbyAieCROU1NfRU5BQkxFRCIgPSAieDEiIC1vICJ4JERBUldJTlNTTF9FTkFCTEVEIiA9ICJ4MSIgXCk7IHRoZW4KICAgU1VQUE9SVF9QUk9UT0NPTFM9IiRTVVBQT1JUX1BST1RPQ09MUyBTTUIiCiAgIGlmIHRlc3QgIngkU1NMX0VOQUJMRUQiID0gIngxIjsgdGhlbgogICAgIFNVUFBPUlRfUFJPVE9DT0xTPSIkU1VQUE9SVF9QUk9UT0NPTFMgU01CUyIKZGlmZiAtLWdpdCBhL2RvY3MvQklORElOR1MgYi9kb2NzL0JJTkRJTkdTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjY3YzNkLi4wMDAwMDAwCi0tLSBhL2RvY3MvQklORElOR1MKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmN1cmwgYmluZGluZ3MKLQotIENyZWF0aXZlIHBlb3BsZSBoYXZlIHdyaXR0ZW4gYmluZGluZ3Mgb3IgaW50ZXJmYWNlcyBmb3IgdmFyaW91cyBlbnZpcm9ubWVudHMKLSBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiBVc2luZyBvbmUgb2YgdGhlc2UgYWxsb3dzIHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZgotIGN1cmwgcG93ZXJzIGZyb20gd2l0aGluIHlvdXIgZmF2b3VyaXRlIGxhbmd1YWdlIG9yIHN5c3RlbS4KLQotIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBrbm93biBpbnRlcmZhY2VzIGFzIG9mIHRoaXMgd3JpdGluZy4KLQotIFRoZSBiaW5kaW5ncyBsaXN0ZWQgYmVsb3cgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJsL2xpYmN1cmwgZGlzdHJpYnV0aW9uCi0gYXJjaGl2ZXMsIGJ1dCBtdXN0IGJlIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZCBzZXBhcmF0ZWx5LgotCi1BZGE5NQotCi0gIFdyaXR0dGVuIGJ5IEFuZHJlYXMgQWxtcm90aAotICBodHRwOi8vd3d3LmFsbXJvdGguY29tL2FkYWN1cmwvaW5kZXguaHRtbAotCi1CYXNpYwotCi0gIFNjcmlwdEJhc2ljIGJpbmRpbmdzIHRvIGxpYmN1cmwuIFdyaXR0dGVuIGJ5IFBldGVyIFZlcmhhcwotICBodHRwOi8vc2NyaXB0YmFzaWMuY29tLwotCi1DCi0gIGxpYmN1cmwgaXMgYSBDIGxpYnJhcnkgaW4gaXRzZWxmIQotICBodHRwczovL2N1cmwuaGF4eC5zZS9saWJjdXJsLwotCi1DKysKLQotICBXcml0dGVuIGJ5IEplYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUKLSAgaHR0cDovL2N1cmxwcC5vcmcvCi0KLUNoCi0KLSAgV3JpdHRlbiBieSBTdGVwaGVuIE5lc3RpbmdlciBhbmQgSm9uYXRoYW4gUm9nYWRvCi0gIGh0dHA6Ly9jaGN1cmwuc291cmNlZm9yZ2UubmV0LwotCi1Db2NvYQotCi0gIEJCSFRUUDogd3JpdHRlbiBieSBCcnVubyBkZSBDYXJ2YWxobwotICBodHRwczovL2dpdGh1Yi5jb20vYnJ1bm9kZWNhcnZhbGhvL0JCSFRUUAotCi0gIGN1cmxoYW5kbGU6IFdyaXR0ZW4gYnkgRGFuIFdvb2QKLSAgaHR0cDovL2N1cmxoYW5kbGUuc291cmNlZm9yZ2UubmV0LwotCi1ECi0KLSAgV3JpdHRlbiBieSBLZW5uZXRoIEJvZ2VydAotICBodHRwOi8vZGxhbmcub3JnL2xpYnJhcnkvc3RkL25ldC9jdXJsLmh0bWwKLQotRHlsYW4KLQotICBXcml0dGVuIGJ5IENocmlzIERvdWJsZQotICBodHRwOi8vZHlsYW5saWJzLnNvdXJjZWZvcmdlLm5ldC8KLQotRWlmZmVsCi0KLSAgV3JpdHRlbiBieSBFaWZmZWwgU29mdHdhcmUKLSAgaHR0cHM6Ly9yb29tLmVpZmZlbC5jb20vbGlicmFyeS9jdXJsCi0KLUV1cGhvcmlhCi0KLSAgV3JpdHRlbiBieSBSYXkgU21pdGgKLSAgaHR0cDovL3JheXMtd2ViLmNvbS9ldWxpYmN1cmwuaHRtCi0KLUZhbGNvbgotCi0gIGh0dHA6Ly93d3cuZmFsY29ucGwub3JnL2luZGV4LmZ0ZD9wYWdlX2lkPXByanMmcHJqX2lkPWN1cmwKLQotRmVyaXRlCi0KLSAgV3JpdHRlbiBieSBQYXVsIFF1ZXJuYQotICBodHRwOi8vd3d3LmZlcml0ZS5vcmcvCi0KLUdhbWJhcwotCi0gIGh0dHA6Ly9nYW1iYXMuc291cmNlZm9yZ2UubmV0LwotCi1nbGliL0dUSysKLQotICBXcml0dGVuIGJ5IFJpY2hhcmQgQXR0ZXJlcgotICBodHRwOi8vYXR0ZXJlci5uZXQvZ2xpYmN1cmwvCi0KLUd1aWxlOgotCi0gIFdyaXR0ZW4gYnkgTWljaGFlbCBMLiBHcmFuCi0gIGh0dHA6Ly93d3cubG9uZWx5Y2FjdHVzLmNvbS9ndWlsZS1jdXJsLmh0bWwKLQotSGFyYm91cgotCi0gIFdyaXR0ZW4gYnkgVmlrdG9yIFN6YWvDoXRzCi0gIGh0dHBzOi8vZ2l0aHViLmNvbS92c3pha2F0cy9oYXJib3VyLWNvcmUvdHJlZS9tYXN0ZXIvY29udHJpYi9oYmN1cmwKLQotSGFza2VsbAotCi0gIFdyaXR0ZW4gYnkgR2Fsb2lzLCBJbmMKLSAgaHR0cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvY2dpLWJpbi9oYWNrYWdlLXNjcmlwdHMvcGFja2FnZS9jdXJsCi0KLUphdmEKLQotICBodHRwczovL2dpdGh1Yi5jb20vcGpsZWdhdG8vY3VybC1qYXZhCi0KLUp1bGlhCi0KLSAgV3JpdHRlbiBieSBQYXVsIEhvd2UKLSAgaHR0cHM6Ly9naXRodWIuY29tL2ZvcmlvL0N1cmwuamwKLQotTGlzcAotCi0gIFdyaXR0ZW4gYnkgTGlhbSBIZWFseQotICBodHRwOi8vY29tbW9uLWxpc3AubmV0L3Byb2plY3QvY2wtY3VybC8KLQotTHVhCi0KLSAgbHVhY3VybCBieSBBbGV4YW5kZXIgTWFyaW5vdgotICBodHRwOi8vbHVhY3VybC5sdWFmb3JnZS5uZXQvCi0KLSAgTHVhLWNVUkwgYnkgSsO8cmdlbiBIw7Z0emVsCi0gIGh0dHA6Ly9sdWFmb3JnZS5uZXQvcHJvamVjdHMvbHVhLWN1cmwvCi0KLU1vbm8KLQotICBXcml0dGVuIGJ5IEplZmZyZXkgUGhpbGxpcHMKLSAgaHR0cDovL2ZvcmdlLm5vdmVsbC5jb20vbW9kdWxlcy94Zm1vZC9wcm9qZWN0Lz9saWJjdXJsLW1vbm8KLQotLk5FVAotCi0gIGxpYmN1cmwtbmV0IGJ5IEplZmZyZXkgUGhpbGxpcHMKLSAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY3VybC1uZXQvCi0KLW5vZGUuanMKLQotICBub2RlLWxpYmN1cmwgYnkgSm9uYXRoYW4gQ2FyZG9zbyBNYWNoYWRvCi0gIGh0dHBzOi8vZ2l0aHViLmNvbS9KQ01haXMvbm9kZS1saWJjdXJsCi0KLU9iamVjdC1QYXNjYWwKLQotICBGcmVlIFBhc2NhbCwgRGVscGhpIGFuZCBLeWxpeCBiaW5kaW5nIHdyaXR0ZW4gYnkgQ2hyaXN0b3BoZSBFc3Blcm4uCi0gIGh0dHA6Ly93d3cudGVrb29sLmNvbS9vcGN1cmwKLQotTydDYW1sCi0KLSAgV3JpdHRlbiBieSBMYXJzIE5pbHNzb24KLSAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb2N1cmwvCi0KLVBhc2NhbAotCi0gIEZyZWUgUGFzY2FsLCBEZWxwaGkgYW5kIEt5bGl4IGJpbmRpbmcgd3JpdHRlbiBieSBKZWZmcmV5IFBvaGxtZXllci4KLSAgaHR0cDovL2hvdXN0b24ucXVpay5jb20vamtwL2N1cmxwYXMvCi0KLVBlcmwKLQotICBNYWludGFpbmVkIGJ5IENyaXMgQmFpbGlmZiBhbmQgQsOhbGludCBTemlsYWtzemkKLSAgaHR0cHM6Ly9naXRodWIuY29tL3N6YmFsaW50L1dXVy0tQ3VybAotCi1QSFAKLQotICBXcml0dGVuIGJ5IFN0ZXJsaW5nIEh1Z2hlcwotICBodHRwczovL3BocC5uZXQvY3VybAotCi1Qb3N0Z3JlU1FMCi0KLSAgV3JpdHRlbiBieSBHaWFuIFBhb2xvIENpY2VyaQotICBodHRwOi8vZ2JvcmcucG9zdGdyZXNxbC5vcmcvcHJvamVjdC9wZ2N1cmwvcHJvamRpc3BsYXkucGhwCi0KLVB5dGhvbgotCi0gIFB5Y1VSTCBieSBLamV0aWwgSmFjb2JzZW4KLSAgaHR0cDovL3B5Y3VybC5zb3VyY2Vmb3JnZS5uZXQvCi0KLVIKLQotICBodHRwOi8vY3Jhbi5yLXByb2plY3Qub3JnL3BhY2thZ2U9Y3VybAotCi1SZXh4Ci0KLSAgV3JpdHRlbiBNYXJrIEhlc3NsaW5nCi0gIGh0dHA6Ly9yZXh4Y3VybC5zb3VyY2Vmb3JnZS5uZXQvCi0KLVJQRwotCi0gIFN1cHBvcnQgZm9yIElMRS9SUEcgb24gT1MvNDAwIGlzIGluY2x1ZGVkIGluIHNvdXJjZSBkaXN0cmlidXRpb24KLSAgaHR0cHM6Ly9jdXJsLmhheHguc2UvbGliY3VybC8KLSAgU2VlIHBhY2thZ2VzL09TNDAwL1JFQURNRS5PUzQwMCBhbmQgcGFja2FnZXMvT1M0MDAvY3VybC5pbmMuaW4KLQotUnVieQotCi0gIGN1cmIgLSB3cml0dGVuIGJ5IFJvc3MgQmFtZm9yZAotICBodHRwOi8vY3VyYi5ydWJ5Zm9yZ2Uub3JnLwotCi0gIHJ1YnktY3VybC1tdWx0aSAtIHdyaXR0ZW4gYnkgS3Jpc3RqYW4gUGV0dXJzc29uIGFuZCBLZWl0aCBSYXJpY2sKLSAgaHR0cDovL2N1cmwtbXVsdGkucnVieWZvcmdlLm9yZy8KLQotUnVzdAotCi0gIGN1cmwtcnVzdCAtIGJ5IENhcmwgTGVyY2hlCi0gIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXJsbGVyY2hlL2N1cmwtcnVzdAotCi1TY2hlbWUKLQotICBCaWdsb28gYmluZGluZyBieSBLaXJpbGwgTGlzb3Zza3kKLSAgaHR0cDovL3d3dy5tZXRhcGFwZXIubmV0L2xpc292c2t5L3dlYi9jdXJsLwotCi1TLUxhbmcKLQotICBTLUxhbmcgYmluZGluZyBieSBKb2huIEUgRGF2aXMKLSAgaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy9tb2R1bGVzL2N1cmwuaHRtbAotCi1TbWFsbHRhbGsKLQotICBTbWFsbHRhbGsgYmluZGluZyBieSBEYW5pbCBPc2lwY2h1awotICBodHRwOi8vd3d3LnNxdWVha3NvdXJjZS5jb20vQ3VybFBsdWdpbi8KLQotU1AtRm9ydGgKLQotICBTUC1Gb3J0aCBiaW5kaW5nIGJ5IHlncmVrCi0gIGh0dHA6Ly93d3cuZm9ydGgub3JnLnJ1L35hYy9saWIvbGluL2N1cmwvCi0KLVNQTAotCi0gIFNQTCBiaW5kaW5nIGJ5IENsaWZmb3JkIFdvbGYKLSAgaHR0cDovL3d3dy5jbGlmZm9yZC5hdC9zcGwvCi0KLVRjbAotCi0gIFRjbGN1cmwgYnkgQW5kcsOpcyBHYXJjw61hCi0gIGh0dHA6Ly9taXJyb3IueWVsbG93NS5jb20vdGNsY3VybC8KLQotVmlzdWFsIEJhc2ljCi0KLSAgbGliY3VybC12YiBieSBKZWZmcmV5IFBoaWxsaXBzCi0gIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmN1cmwtdmIvCi0KLVZpc3VhbCBGb3hwcm8KLQotICBieSBDYXJsb3MgQWxsb2F0dGkKLSAgaHR0cDovL3d3dy5jdGwzMi5jb20uYXIvbGliY3VybC5hc3AKLQotUQotICBUaGUgbGliY3VybCBtb2R1bGUgaXMgcGFydCBvZiB0aGUgZGVmYXVsdCBpbnN0YWxsCi0gIGh0dHA6Ly9xLWxhbmcuc291cmNlZm9yZ2UubmV0LwotCi13eFdpZGdldHMKLQotICBXcml0dGVuIGJ5IENhc2V5IE8nRG9ubmVsbAotICBodHRwOi8vd3hjb2RlLnNvdXJjZWZvcmdlLm5ldC9jb21wb25lbnRzL3d4Y3VybC8KLQotWEJMaXRlCi0KLSAgV3JpdHRlbiBieSBEYXZpZCBTemFmcmFuc2tpCi0gIGh0dHA6Ly9wZXJzby53YW5hZG9vLmZyL3hibGl0ZS9saWJyYXJpZXMuaHRtbAotCi1Yb2pvCi0KLSAgV3JpdHRlbiBieSBBbmRyZXcgTGFtYmVydAotICBodHRwczovL2dpdGh1Yi5jb20vY2hhcm9ubjAvUkItbGliY1VSTApkaWZmIC0tZ2l0IGEvZG9jcy9CSU5ESU5HUy5tZCBiL2RvY3MvQklORElOR1MubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5YTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvQklORElOR1MubWQKQEAgLTAsMCArMSwxMDYgQEAKK2xpYmN1cmwgYmluZGluZ3MKKz09PT09PT09PT09PT09PT0KKworIENyZWF0aXZlIHBlb3BsZSBoYXZlIHdyaXR0ZW4gYmluZGluZ3Mgb3IgaW50ZXJmYWNlcyBmb3IgdmFyaW91cyBlbnZpcm9ubWVudHMKKyBhbmQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiBVc2luZyBvbmUgb2YgdGhlc2UgYWxsb3dzIHlvdSB0byB0YWtlIGFkdmFudGFnZSBvZgorIGN1cmwgcG93ZXJzIGZyb20gd2l0aGluIHlvdXIgZmF2b3VyaXRlIGxhbmd1YWdlIG9yIHN5c3RlbS4KKworIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBrbm93biBpbnRlcmZhY2VzIGFzIG9mIHRoaXMgd3JpdGluZy4KKworIFRoZSBiaW5kaW5ncyBsaXN0ZWQgYmVsb3cgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJsL2xpYmN1cmwgZGlzdHJpYnV0aW9uCisgYXJjaGl2ZXMsIGJ1dCBtdXN0IGJlIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZCBzZXBhcmF0ZWx5LgorCitbQWRhOTVdKGh0dHA6Ly93d3cuYWxtcm90aC5jb20vYWRhY3VybC9pbmRleC5odG1sKSAgV3JpdHRlbiBieSBBbmRyZWFzIEFsbXJvdGgKKworW0Jhc2ljXShodHRwOi8vc2NyaXB0YmFzaWMuY29tLykgU2NyaXB0QmFzaWMgYmluZGluZ3Mgd3JpdHRlbiBieSBQZXRlciBWZXJoYXMKKworW0MrK10oaHR0cDovL2N1cmxwcC5vcmcvKSBXcml0dGVuIGJ5IEplYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUKKworW0NoXShodHRwOi8vY2hjdXJsLnNvdXJjZWZvcmdlLm5ldC8pIFdyaXR0ZW4gYnkgU3RlcGhlbiBOZXN0aW5nZXIgYW5kIEpvbmF0aGFuIFJvZ2FkbworCitDb2NvYTogW0JCSFRUUF0oaHR0cHM6Ly9naXRodWIuY29tL2JydW5vZGVjYXJ2YWxoby9CQkhUVFApIHdyaXR0ZW4gYnkgQnJ1bm8gZGUgQ2FydmFsaG8KK1tjdXJsaGFuZGxlXShodHRwOi8vY3VybGhhbmRsZS5zb3VyY2Vmb3JnZS5uZXQvKSBXcml0dGVuIGJ5IERhbiBXb29kCisKK1tEXShodHRwOi8vZGxhbmcub3JnL2xpYnJhcnkvc3RkL25ldC9jdXJsLmh0bWwpIFdyaXR0ZW4gYnkgS2VubmV0aCBCb2dlcnQKKworW0R5bGFuXShodHRwOi8vZHlsYW5saWJzLnNvdXJjZWZvcmdlLm5ldC8pIFdyaXR0ZW4gYnkgQ2hyaXMgRG91YmxlCisKK1tFaWZmZWxdKGh0dHBzOi8vcm9vbS5laWZmZWwuY29tL2xpYnJhcnkvY3VybCkgV3JpdHRlbiBieSBFaWZmZWwgU29mdHdhcmUKKworW0V1cGhvcmlhXShodHRwOi8vcmF5cy13ZWIuY29tL2V1bGliY3VybC5odG0pIFdyaXR0ZW4gYnkgUmF5IFNtaXRoCisKK1tGYWxjb25dKGh0dHA6Ly93d3cuZmFsY29ucGwub3JnL2luZGV4LmZ0ZD9wYWdlX2lkPXByanMmcHJqX2lkPWN1cmwpCisKK1tGZXJpdGVdKGh0dHA6Ly93d3cuZmVyaXRlLm9yZy8pIFdyaXR0ZW4gYnkgUGF1bCBRdWVybmEKKworW0dhbWJhc10oaHR0cDovL2dhbWJhcy5zb3VyY2Vmb3JnZS5uZXQvKQorCitbZ2xpYi9HVEsrXShodHRwOi8vYXR0ZXJlci5uZXQvZ2xpYmN1cmwvKSBXcml0dGVuIGJ5IFJpY2hhcmQgQXR0ZXJlcgorCitbR3VpbGVdKGh0dHA6Ly93d3cubG9uZWx5Y2FjdHVzLmNvbS9ndWlsZS1jdXJsLmh0bWwpIFdyaXR0ZW4gYnkgTWljaGFlbCBMLiBHcmFuCisKK1tIYXJib3VyXShodHRwczovL2dpdGh1Yi5jb20vdnN6YWthdHMvaGFyYm91ci1jb3JlL3RyZWUvbWFzdGVyL2NvbnRyaWIvaGJjdXJsKSBXcml0dGVuIGJ5IFZpa3RvciBTemFrw6F0cworCitbSGFza2VsbF0oaHR0cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvY2dpLWJpbi9oYWNrYWdlLXNjcmlwdHMvcGFja2FnZS9jdXJsKSBXcml0dGVuIGJ5IEdhbG9pcywgSW5jCisKK1tKYXZhXShodHRwczovL2dpdGh1Yi5jb20vcGpsZWdhdG8vY3VybC1qYXZhKQorCitbSnVsaWFdKGh0dHBzOi8vZ2l0aHViLmNvbS9mb3Jpby9DdXJsLmpsKSBXcml0dGVuIGJ5IFBhdWwgSG93ZQorCitbTGlzcF0oaHR0cDovL2NvbW1vbi1saXNwLm5ldC9wcm9qZWN0L2NsLWN1cmwvKSBXcml0dGVuIGJ5IExpYW0gSGVhbHkKKworTHVhOiBbbHVhY3VybF0oaHR0cDovL2x1YWN1cmwubHVhZm9yZ2UubmV0LykgYnkgQWxleGFuZGVyIE1hcmlub3YsIFtMdWEtY1VSTF0oaHR0cDovL2x1YWZvcmdlLm5ldC9wcm9qZWN0cy9sdWEtY3VybC8pIGJ5IErDvHJnZW4gSMO2dHplbAorCitbTW9ub10oaHR0cDovL2ZvcmdlLm5vdmVsbC5jb20vbW9kdWxlcy94Zm1vZC9wcm9qZWN0Lz9saWJjdXJsLW1vbm8pIFdyaXR0ZW4gYnkgSmVmZnJleSBQaGlsbGlwcworCitbLk5FVF0oaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY3VybC1uZXQvKSBsaWJjdXJsLW5ldCBieSBKZWZmcmV5IFBoaWxsaXBzCisKK1tub2RlLmpzXShodHRwczovL2dpdGh1Yi5jb20vSkNNYWlzL25vZGUtbGliY3VybCkgbm9kZS1saWJjdXJsIGJ5IEpvbmF0aGFuIENhcmRvc28gTWFjaGFkbworCitbT2JqZWN0LVBhc2NhbF0oaHR0cDovL3d3dy50ZWtvb2wuY29tL29wY3VybCkgRnJlZSBQYXNjYWwsIERlbHBoaSBhbmQgS3lsaXggYmluZGluZyB3cml0dGVuIGJ5IENocmlzdG9waGUgRXNwZXJuLgorCitbTydDYW1sXShodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9vY3VybC8pIFdyaXR0ZW4gYnkgTGFycyBOaWxzc29uCisKK1tQYXNjYWxdKGh0dHA6Ly9ob3VzdG9uLnF1aWsuY29tL2prcC9jdXJscGFzLykgRnJlZSBQYXNjYWwsIERlbHBoaSBhbmQgS3lsaXggYmluZGluZyB3cml0dGVuIGJ5IEplZmZyZXkgUG9obG1leWVyLgorCitbUGVybF0oaHR0cHM6Ly9naXRodWIuY29tL3N6YmFsaW50L1dXVy0tQ3VybCkgTWFpbnRhaW5lZCBieSBDcmlzIEJhaWxpZmYgYW5kIELDoWxpbnQgU3ppbGFrc3ppCisKK1tQSFBdKGh0dHBzOi8vcGhwLm5ldC9jdXJsKSBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgU3RlcmxpbmcgSHVnaGVzCisKK1tQb3N0Z3JlU1FMXShodHRwOi8vZ2JvcmcucG9zdGdyZXNxbC5vcmcvcHJvamVjdC9wZ2N1cmwvcHJvamRpc3BsYXkucGhwKSBXcml0dGVuIGJ5IEdpYW4gUGFvbG8gQ2ljZXJpCisKK1tQeXRob25dKGh0dHA6Ly9weWN1cmwuc291cmNlZm9yZ2UubmV0LykgUHljVVJMIGJ5IEtqZXRpbCBKYWNvYnNlbgorCitbUl0oaHR0cDovL2NyYW4uci1wcm9qZWN0Lm9yZy9wYWNrYWdlPWN1cmwpCisKK1tSZXh4XShodHRwOi8vcmV4eGN1cmwuc291cmNlZm9yZ2UubmV0LykgV3JpdHRlbiBNYXJrIEhlc3NsaW5nCisKK1JQRywgc3VwcG9ydCBmb3IgSUxFL1JQRyBvbiBPUy80MDAgaXMgaW5jbHVkZWQgaW4gc291cmNlIGRpc3RyaWJ1dGlvbgorCitSdWJ5OiBbY3VyYl0oaHR0cDovL2N1cmIucnVieWZvcmdlLm9yZy8pIHdyaXR0ZW4gYnkgUm9zcyBCYW1mb3JkLCBbcnVieS1jdXJsLW11bHRpXShodHRwOi8vY3VybC1tdWx0aS5ydWJ5Zm9yZ2Uub3JnLykgd3JpdHRlbiBieSBLcmlzdGphbiBQZXR1cnNzb24gYW5kIEtlaXRoIFJhcmljaworCitbUnVzdF0oaHR0cHM6Ly9naXRodWIuY29tL2NhcmxsZXJjaGUvY3VybC1ydXN0KSBjdXJsLXJ1c3QgLSBieSBDYXJsIExlcmNoZQorCitbU2NoZW1lXShodHRwOi8vd3d3Lm1ldGFwYXBlci5uZXQvbGlzb3Zza3kvd2ViL2N1cmwvKSBCaWdsb28gYmluZGluZyBieSBLaXJpbGwgTGlzb3Zza3kKKworW1MtTGFuZ10oaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy9tb2R1bGVzL2N1cmwuaHRtbCkgYnkgSm9obiBFIERhdmlzCisKK1tTbWFsbHRhbGtdKGh0dHA6Ly93d3cuc3F1ZWFrc291cmNlLmNvbS9DdXJsUGx1Z2luLykgV3JpdHRlbiBieSBEYW5pbCBPc2lwY2h1aworCitbU1AtRm9ydGhdKGh0dHA6Ly93d3cuZm9ydGgub3JnLnJ1L35hYy9saWIvbGluL2N1cmwvKSBXcml0dGVuIGJ5IHlncmVrCisKK1tTUExdKGh0dHA6Ly93d3cuY2xpZmZvcmQuYXQvc3BsLykgV3JpdHRlbiBieSBDbGlmZm9yZCBXb2xmCisKK1tUY2xdKGh0dHA6Ly9taXJyb3IueWVsbG93NS5jb20vdGNsY3VybC8pIFRjbGN1cmwgYnkgQW5kcsOpcyBHYXJjw61hCisKK1tWaXN1YWwgQmFzaWNdKGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmN1cmwtdmIvKSBsaWJjdXJsLXZiIGJ5IEplZmZyZXkgUGhpbGxpcHMKKworW1Zpc3VhbCBGb3hwcm9dKGh0dHA6Ly93d3cuY3RsMzIuY29tLmFyL2xpYmN1cmwuYXNwKSBieSBDYXJsb3MgQWxsb2F0dGkKKworW1FdKGh0dHA6Ly9xLWxhbmcuc291cmNlZm9yZ2UubmV0LykgVGhlIGxpYmN1cmwgbW9kdWxlIGlzIHBhcnQgb2YgdGhlIGRlZmF1bHQgaW5zdGFsbAorCitbd3hXaWRnZXRzXShodHRwOi8vd3hjb2RlLnNvdXJjZWZvcmdlLm5ldC9jb21wb25lbnRzL3d4Y3VybC8pIFdyaXR0ZW4gYnkgQ2FzZXkgTydEb25uZWxsCisKK1tYQkxpdGVdKGh0dHA6Ly9wZXJzby53YW5hZG9vLmZyL3hibGl0ZS9saWJyYXJpZXMuaHRtbCkgV3JpdHRlbiBieSBEYXZpZCBTemFmcmFuc2tpCisKK1tYb2pvXShodHRwczovL2dpdGh1Yi5jb20vY2hhcm9ubjAvUkItbGliY1VSTCkgV3JpdHRlbiBieSBBbmRyZXcgTGFtYmVydApkaWZmIC0tZ2l0IGEvZG9jcy9DSEVDS1NSQy5tZCBiL2RvY3MvQ0hFQ0tTUkMubWQKaW5kZXggNTkxZTA2Ni4uYjQyZGU4NCAxMDA2NDQKLS0tIGEvZG9jcy9DSEVDS1NSQy5tZAorKysgYi9kb2NzL0NIRUNLU1JDLm1kCkBAIC0yMCw3ICsyMCw3IEBACiAKIGNoZWNrc3JjIGRvZXMgbm90IGNoZWNrIGFuZCB2ZXJpZnkgdGhlIGNvZGUgYWdhaW5zdCB0aGUgZW50aXJlIHN0eWxlIGd1aWRlLAogYnV0IHRoZSBzY3JpcHQgaXMgaW5zdGVhZCBhbiBlZmZvcnQgdG8gZGV0ZWN0IHRoZSBtb3N0IGNvbW1vbiBtaXN0YWtlcyBhbmQKLXN5bnRheCBtaXN0YWtlcyB0aGF0IGNvbnRyaWJ1dGVycyBtYWtlIGJlZm9yZSB0aGV5IGdldCBhY2N1c3RvbWVkIHRvIG91ciBjb2RlCitzeW50YXggbWlzdGFrZXMgdGhhdCBjb250cmlidXRvcnMgbWFrZSBiZWZvcmUgdGhleSBnZXQgYWNjdXN0b21lZCB0byBvdXIgY29kZQogc3R5bGUuIEhlY2ssIG1hbnkgb2YgdXMgcmVndWxhcnMgZG8gdGhlIG1pc3Rha2VzIHRvbyBhbmQgdGhpcyBzY3JpcHQgaGVscHMgdXMKIGtlZXAgdGhlIGNvZGUgaW4gc2hhcGUuCiAKQEAgLTMzLDcgKzMzLDcgQEAKIC0gYEJBRENPTU1BTkRgOiBUaGVyZSdzIGEgYmFkICFjaGVja3NyYyEgaW5zdHJ1Y3Rpb24gaW4gdGhlIGNvZGUuIFNlZSB0aGUKICAgICoqSWdub3JlIGNlcnRhaW4gd2FybmluZ3MqKiBzZWN0aW9uIGJlbG93IGZvciBkZXRhaWxzLgogCi0tIGBCQU5ORURGVU5DYDogQSBiYW5uZWQgZnVuY3Rpb24gd2FzIHVzZWQuIFRoZSBmdW50aW9ucyBzcHJpbnRmLCB2c3ByaW50ZiwKKy0gYEJBTk5FREZVTkNgOiBBIGJhbm5lZCBmdW5jdGlvbiB3YXMgdXNlZC4gVGhlIGZ1bmN0aW9ucyBzcHJpbnRmLCB2c3ByaW50ZiwKICAgIHN0cmNhdCwgc3RybmNhdCwgZ2V0cyBhcmUgKipuZXZlcioqIGFsbG93ZWQgaW4gY3VybCBzb3VyY2UgY29kZS4KIAogLSBgQlJBQ0VFTFNFYDogJ30gZWxzZScgb24gdGhlIHNhbWUgbGluZS4gVGhlIGVsc2UgaXMgc3VwcG9zZWQgdG8gYmUgb24gdGhlCmRpZmYgLS1naXQgYS9kb2NzL0NPREVfU1RZTEUubWQgYi9kb2NzL0NPREVfU1RZTEUubWQKaW5kZXggNzNhNGQ5NC4uYmE1ZjcxMCAxMDA2NDQKLS0tIGEvZG9jcy9DT0RFX1NUWUxFLm1kCisrKyBiL2RvY3MvQ09ERV9TVFlMRS5tZApAQCAtMSw0ICsxLDQgQEAKLSMgY1VSTCBDIGNvZGUgc3R5bGUKKyMgY3VybCBDIGNvZGUgc3R5bGUKIAogU291cmNlIGNvZGUgdGhhdCBoYXMgYSBjb21tb24gc3R5bGUgaXMgZWFzaWVyIHRvIHJlYWQgdGhhbiBjb2RlIHRoYXQgdXNlcwogZGlmZmVyZW50IHN0eWxlcyBpbiBkaWZmZXJlbnQgcGxhY2VzLiBJdCBoZWxwcyBtYWtpbmcgdGhlIGNvZGUgZmVlbCBsaWtlIG9uZQpAQCAtOSw4ICs5LDggQEAKIHRhc3RlcyBzYXRpc2ZpZWQuCiAKIE91ciBDIGNvZGUgaGFzIGEgZmV3IHN0eWxlIHJ1bGVzLiBNb3N0IG9mIHRoZW0gYXJlIHZlcmlmaWVkIGFuZCB1cGhlbGQgYnkgdGhlCi1saWIvY2hlY2tzcmMucGwgc2NyaXB0LiBJbnZva2VkIHdpdGggYG1ha2UgY2hlY2tzcmNgIG9yIGV2ZW4gYnkgZGVmYXVsdCBieSB0aGUKLWJ1aWxkIHN5c3RlbSB3aGVuIGJ1aWx0IGFmdGVyIGAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1kZWJ1Z2AgaGFzIGJlZW4gdXNlZC4KK2BsaWIvY2hlY2tzcmMucGxgIHNjcmlwdC4gSW52b2tlZCB3aXRoIGBtYWtlIGNoZWNrc3JjYCBvciBldmVuIGJ5IGRlZmF1bHQgYnkKK3RoZSBidWlsZCBzeXN0ZW0gd2hlbiBidWlsdCBhZnRlciBgLi9jb25maWd1cmUgLS1lbmFibGUtZGVidWdgIGhhcyBiZWVuIHVzZWQuCiAKIEl0IGlzIG5vcm1hbGx5IG5vdCBhIHByb2JsZW0gZm9yIGFueW9uZSB0byBmb2xsb3cgdGhlIGd1aWRlbGluZXMsIGFzIHlvdSBqdXN0CiBuZWVkIHRvIGNvcHkgdGhlIHN0eWxlIGFscmVhZHkgdXNlZCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIHRoZXJlIGFyZSBubwpAQCAtMjgsNyArMjgsOCBAQAogdW5kZXJzdGFuZGFibGUgYW5kIGJlIG5hbWVkIGFjY29yZGluZyB0byB3aGF0IHRoZXkncmUgdXNlZCBmb3IuIEZpbGUtbG9jYWwKIGZ1bmN0aW9ucyBzaG91bGQgYmUgbWFkZSBzdGF0aWMuIFdlIGxpa2UgbG93ZXIgY2FzZSBuYW1lcy4KIAotU2VlIHRoZSBJTlRFUk5BTFMgZG9jdW1lbnQgb24gaG93IHdlIG5hbWUgbm9uLWV4cG9ydGVkIGxpYnJhcnktZ2xvYmFsIHN5bWJvbHMuCitTZWUgdGhlIFtJTlRFUk5BTFNdKElOVEVSTkFMUy5tZCkgZG9jdW1lbnQgb24gaG93IHdlIG5hbWUgbm9uLWV4cG9ydGVkCitsaWJyYXJ5LWdsb2JhbCBzeW1ib2xzLgogCiAjIyBJbmRlbnRpbmcKIApAQCAtNTAsNyArNTEsNyBAQAogCiAjIyBMb25nIGxpbmVzCiAKLVNvdXJjZSBjb2RlIGluIGN1cmwgbWF5IG5ldmVyIGJlIHdpZGVyIHRoYW4gODAgY29sdW1ucyBhbmQgdGhlcmUgYXJlIHR3bworU291cmNlIGNvZGUgaW4gY3VybCBtYXkgbmV2ZXIgYmUgd2lkZXIgdGhhbiA3OSBjb2x1bW5zIGFuZCB0aGVyZSBhcmUgdHdvCiByZWFzb25zIGZvciBtYWludGFpbmluZyB0aGlzIGV2ZW4gaW4gdGhlIG1vZGVybiBlcmEgb2YgdmVyeSBsYXJnZSBhbmQgaGlnaAogcmVzb2x1dGlvbiBzY3JlZW5zOgogCkBAIC03Miw4ICs3MywxMiBAQAogICAgICAgLyogY2xlYXJseSBhIHlvdW5nc3RlciAqLwogICAgIH0KIAotV2hlbiB3ZSB3cml0ZSBmdW5jdGlvbnMgaG93ZXZlciwgdGhlIG9wZW5pbmcgYnJhY2Ugc2hvdWxkIGJlIGluIHRoZSBmaXJzdAotY29sdW1uIG9mIHRoZSBmaXJzdCBsaW5lOgorWW91IG1heSBvbWl0IHRoZSBicmFjZXMgaWYgdGhleSB3b3VsZCBjb250YWluIG9ubHkgYSBvbmUtbGluZSBzdGF0ZW1lbnQ6CisKKyAgICBpZigheCkKKyAgICAgIGNvbnRpbnVlOworCitGb3IgZnVuY3Rpb25zIHRoZSBvcGVuaW5nIGJyYWNlIHNob3VsZCBiZSBvbiBhIHNlcGFyYXRlIGxpbmU6CiAKICAgICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgewpAQCAtMTYyLDYgKzE2Nyw1MyBAQAogICAgIGNvbXBsZW1lbnQgPSB+Yml0czsKICAgICBlbXB0eSA9ICghKnN0cmluZykgPyBUUlVFIDogRkFMU0U7CiAKKyMjIENvbHVtbiBhbGlnbm1lbnQKKworU29tZSBzdGF0ZW1lbnRzIGNhbm5vdCBiZSBjb21wbGV0ZWQgb24gYSBzaW5nbGUgbGluZSBiZWNhdXNlIHRoZSBsaW5lIHdvdWxkCitiZSB0b28gbG9uZywgdGhlIHN0YXRlbWVudCB0b28gaGFyZCB0byByZWFkLCBvciBkdWUgdG8gb3RoZXIgc3R5bGUgZ3VpZGVsaW5lcworYWJvdmUuIEluIHN1Y2ggYSBjYXNlIHRoZSBzdGF0ZW1lbnQgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgorCitJZiBhIGNvbnRpbnVhdGlvbiBsaW5lIGlzIHBhcnQgb2YgYW4gZXhwcmVzc2lvbiBvciBzdWItZXhwcmVzc2lvbiB0aGVuIHlvdQorc2hvdWxkIGFsaWduIG9uIHRoZSBhcHByb3ByaWF0ZSBjb2x1bW4gc28gdGhhdCBpdCdzIGVhc3kgdG8gdGVsbCB3aGF0IHBhcnQgb2YKK3RoZSBzdGF0ZW1lbnQgaXQgaXMuIE9wZXJhdG9ycyBzaG91bGQgbm90IHN0YXJ0IGNvbnRpbnVhdGlvbiBsaW5lcy4gSW4gb3RoZXIKK2Nhc2VzIGZvbGxvdyB0aGUgMi1zcGFjZSBpbmRlbnQgZ3VpZGVsaW5lLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIGZyb20gbGliY3VybDoKKworfn5+YworICAgIGlmKEN1cmxfcGlwZWxpbmVfd2FudGVkKGhhbmRsZS0+bXVsdGksIENVUkxQSVBFX0hUVFAxKSAmJgorICAgICAgIChoYW5kbGUtPnNldC5odHRwdmVyc2lvbiAhPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzApICYmCisgICAgICAgKGhhbmRsZS0+c2V0Lmh0dHByZXEgPT0gSFRUUFJFUV9HRVQgfHwKKyAgICAgICAgaGFuZGxlLT5zZXQuaHR0cHJlcSA9PSBIVFRQUkVRX0hFQUQpKQorICAgICAgLyogZGlkbid0IGFzayBmb3IgSFRUUC8xLjAgYW5kIGEgR0VUIG9yIEhFQUQgKi8KKyAgICAgIHJldHVybiBUUlVFOworfn5+CisKK35+fmMKKyAgY2FzZSBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUjoKKyAgICBkYXRhLT5zZXQuaHR0cF9rZWVwX3NlbmRpbmdfb25fZXJyb3IgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworICAgIGJyZWFrOworfn5+CisKK35+fmMKKyAgICBkYXRhLT5zZXQuaHR0cF9kaXNhYmxlX2hvc3RuYW1lX2NoZWNrX2JlZm9yZV9hdXRoZW50aWNhdGlvbiA9CisgICAgICAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKK35+fgorCit+fn5jCisgIGlmKG9wdGlvbikgeworICAgIHJlc3VsdCA9IHBhcnNlX2xvZ2luX2RldGFpbHMob3B0aW9uLCBzdHJsZW4ob3B0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VycCA/ICZ1c2VyIDogTlVMTCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzc3dkcCA/ICZwYXNzd2QgOiBOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICB9Cit+fn4KKworfn5+YworICAgICAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkN1cmxfcHBfcmVhZHJlc3BfICVkIGJ5dGVzIG9mIHRyYWlsaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXIgcmVzcG9uc2UgbGVmdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIChpbnQpY2xpcGFtb3VudCkpOworfn5+CisKICMjIFBsYXRmb3JtIGRlcGVuZGVudCBjb2RlCiAKIFVzZSBgI2lmZGVmIEhBVkVfRkVBVFVSRWAgdG8gZG8gY29uZGl0aW9uYWwgY29kZS4gV2UgYXZvaWQgY2hlY2tpbmcgZm9yCmRpZmYgLS1naXQgYS9kb2NzL0NPTlRSSUJVVEUgYi9kb2NzL0NPTlRSSUJVVEUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODQxNzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9DT05UUklCVVRFCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gQ29udHJpYnV0aW5nIFNvdXJjZSBDb2RlCi0KLSBUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIG9mZmVyIGd1aWRlbGluZXMgdGhhdCBjYW4gYmUgdXNlZnVsIHRvIGtlZXAgaW4KLSBtaW5kIHdoZW4geW91IGRlY2lkZSB0byBjb250cmlidXRlIHRvIHRoZSBwcm9qZWN0LiBUaGlzIGNvbmNlcm5zIG5ldyBmZWF0dXJlcwotIGFzIHdlbGwgYXMgY29ycmVjdGlvbnMgdG8gZXhpc3RpbmcgZmxhd3Mgb3IgYnVncy4KLQotIDEuIExlYXJuaW5nIGNVUkwKLSAxLjEgSm9pbiB0aGUgQ29tbXVuaXR5Ci0gMS4yIExpY2Vuc2UKLSAxLjMgV2hhdCBUbyBSZWFkCi0KLSAyLiBXcml0ZSBhIGdvb2QgcGF0Y2gKLSAyLjEgRm9sbG93IGNvZGUgc3R5bGUKLSAyLjIgTm9uLWNsb2JiZXJpbmcgQWxsIE92ZXIKLSAyLjMgV3JpdGUgU2VwYXJhdGUgUGF0Y2hlcwotIDIuNCBQYXRjaCBBZ2FpbnN0IFJlY2VudCBTb3VyY2VzCi0gMi41IERvY3VtZW50Ci0gMi42IFRlc3QgQ2FzZXMKLQotIDMuIFB1c2hpbmcgT3V0IFlvdXIgQ2hhbmdlcwotIDMuMSBXcml0ZSBBY2Nlc3MgdG8gZ2l0IFJlcG9zaXRvcnkKLSAzLjIgSG93IFRvIE1ha2UgYSBQYXRjaCB3aXRoIGdpdAotIDMuMyBIb3cgVG8gTWFrZSBhIFBhdGNoIHdpdGhvdXQgZ2l0Ci0gMy40IEhvdyB0byBnZXQgeW91ciBjaGFuZ2VzIGludG8gdGhlIG1haW4gc291cmNlcwotIDMuNSBXcml0ZSBnb29kIGNvbW1pdCBtZXNzYWdlcwotIDMuNiBBYm91dCBwdWxsIHJlcXVlc3RzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0xLiBMZWFybmluZyBjVVJMCi0KLTEuMSBKb2luIHRoZSBDb21tdW5pdHkKLQotIFNraXAgb3ZlciB0byBodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsLyBhbmQgam9pbiB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZwotIGxpc3QocykuICBSZWFkIHVwIG9uIGRldGFpbHMgYmVmb3JlIHlvdSBwb3N0IHF1ZXN0aW9ucy4gUmVhZCB0aGlzIGZpbGUgYmVmb3JlCi0geW91IHN0YXJ0IHNlbmRpbmcgcGF0Y2hlcyEgV2UgcHJlZmVyIHBhdGNoZXMgYW5kIGRpc2N1c3Npb25zIGJlaW5nIGhlbGQgb24KLSB0aGUgbWFpbGluZyBsaXN0KHMpLCBub3Qgc2VudCB0byBpbmRpdmlkdWFscy4KLQotIEJlZm9yZSBwb3N0aW5nIHRvIG9uZSBvZiB0aGUgY3VybCBtYWlsaW5nIGxpc3RzLCBwbGVhc2UgcmVhZCB1cCBvbiB0aGUgbWFpbGluZwotIGxpc3QgZXRpcXVldHRlOiBodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsL2V0aXF1ZXR0ZS5odG1sCi0KLSBXZSBhbHNvIGhhbmcgb3V0IG9uIElSQyBpbiAjY3VybCBvbiBpcmMuZnJlZW5vZGUubmV0Ci0KLSBJZiB5b3UncmUgYXQgYWxsIGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgc2lkZSBvZiB0aGluZ3MsIGNvbnNpZGVyIGNsaWNraW5nCi0gJ3dhdGNoJyBvbiB0aGUgY3VybCByZXBvIGF0IGdpdGh1YiB0byBnZXQgbm90aWZpZWQgb24gcHVsbCByZXF1ZXN0cyBhbmQgbmV3Ci0gaXNzdWVzIHBvc3RlZCB0aGVyZS4KLQotMS4yLiBMaWNlbnNlCi0KLSBXaGVuIGNvbnRyaWJ1dGluZyB3aXRoIGNvZGUsIHlvdSBhZ3JlZSB0byBwdXQgeW91ciBjaGFuZ2VzIGFuZCBuZXcgY29kZSB1bmRlcgotIHRoZSBzYW1lIGxpY2Vuc2UgY3VybCBhbmQgbGliY3VybCBpcyBhbHJlYWR5IHVzaW5nIHVubGVzcyBzdGF0ZWQgYW5kIGFncmVlZAotIG90aGVyd2lzZS4KLQotIElmIHlvdSBhZGQgYSBsYXJnZXIgcGllY2Ugb2YgY29kZSwgeW91IGNhbiBvcHQgdG8gbWFrZSB0aGF0IGZpbGUgb3Igc2V0IG9mCi0gZmlsZXMgdG8gdXNlIGEgZGlmZmVyZW50IGxpY2Vuc2UgYXMgbG9uZyBhcyB0aGV5IGRvbid0IGVuZm9yY2UgYW55IGNoYW5nZXMgdG8KLSB0aGUgcmVzdCBvZiB0aGUgcGFja2FnZSBhbmQgdGhleSBtYWtlIHNlbnNlLiBTdWNoICJzZXBhcmF0ZSBwYXJ0cyIgY2FuIG5vdCBiZQotIEdQTCBsaWNlbnNlZCAoYXMgd2UgZG9uJ3Qgd2FudCBjb3B5bGVmdCB0byBhZmZlY3QgdXNlcnMgb2YgbGliY3VybCkgYnV0IHRoZXkKLSBtdXN0IHVzZSAiR1BMIGNvbXBhdGlibGUiIGxpY2Vuc2VzIChhcyB3ZSB3YW50IHRvIGFsbG93IHVzZXJzIHRvIHVzZSBsaWJjdXJsCi0gcHJvcGVybHkgaW4gR1BMIGxpY2Vuc2VkIGVudmlyb25tZW50cykuCi0KLSBXaGVuIGNoYW5naW5nIGV4aXN0aW5nIHNvdXJjZSBjb2RlLCB5b3UgZG8gbm90IGFsdGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhlCi0gb3JpZ2luYWwgZmlsZShzKS4gVGhlIGNvcHlyaWdodCB3aWxsIHN0aWxsIGJlIG93bmVkIGJ5IHRoZSBvcmlnaW5hbAotIGNyZWF0b3Iocykgb3IgdGhvc2Ugd2hvIGhhdmUgYmVlbiBhc3NpZ25lZCBjb3B5cmlnaHQgYnkgdGhlIG9yaWdpbmFsCi0gYXV0aG9yKHMpLgotCi0gQnkgc3VibWl0dGluZyBhIHBhdGNoIHRvIHRoZSBjdXJsIHByb2plY3QsIHlvdSBhcmUgYXNzdW1lZCB0byBoYXZlIHRoZSByaWdodAotIHRvIHRoZSBjb2RlIGFuZCB0byBiZSBhbGxvd2VkIGJ5IHlvdXIgZW1wbG95ZXIgb3Igd2hhdGV2ZXIgdG8gaGFuZCBvdmVyIHRoYXQKLSBwYXRjaC9jb2RlIHRvIHVzLiBXZSB3aWxsIGNyZWRpdCB5b3UgZm9yIHlvdXIgY2hhbmdlcyBhcyBmYXIgYXMgcG9zc2libGUsIHRvCi0gZ2l2ZSBjcmVkaXQgYnV0IGFsc28gdG8ga2VlcCBhIHRyYWNlIGJhY2sgdG8gd2hvIG1hZGUgd2hhdCBjaGFuZ2VzLiBQbGVhc2UKLSBhbHdheXMgcHJvdmlkZSB1cyB3aXRoIHlvdXIgZnVsbCByZWFsIG5hbWUgd2hlbiBjb250cmlidXRpbmchCi0KLTEuMyBXaGF0IFRvIFJlYWQKLQotIFNvdXJjZSBjb2RlLCB0aGUgbWFuIHBhZ2VzLCB0aGUgSU5URVJOQUxTIGRvY3VtZW50LCBUT0RPLCBLTk9XTl9CVUdTIGFuZCB0aGUKLSBtb3N0IHJlY2VudCBjaGFuZ2VzIGluIHRoZSBnaXQgbG9nLiBKdXN0IGx1cmtpbmcgb24gdGhlIGN1cmwtbGlicmFyeSBtYWlsaW5nCi0gbGlzdCBpcyBnb25uYSBnaXZlIHlvdSBhIGxvdCBvZiBpbnNpZ2h0cyBvbiB3aGF0J3MgZ29pbmcgb24gcmlnaHQgbm93LiBBc2tpbmcKLSB0aGVyZSBpcyBhIGdvb2QgaWRlYSB0b28uCi0KLTIuIFdyaXRlIGEgZ29vZCBwYXRjaAotCi0yLjEgRm9sbG93IGNvZGUgc3R5bGUKLQotIFdoZW4gd3JpdGluZyBDIGNvZGUsIGZvbGxvdyB0aGUgQ09ERV9TVFlMRSBhbHJlYWR5IGVzdGFibGlzaGVkIGluIHRoZQotIHByb2plY3QuIENvbnNpc3RlbnQgc3R5bGUgbWFrZXMgY29kZSBlYXNpZXIgdG8gcmVhZCBhbmQgbWlzdGFrZXMgbGVzcyBsaWtlbHkKLSB0byBoYXBwZW4uCi0KLTIuMiBOb24tY2xvYmJlcmluZyBBbGwgT3ZlcgotCi0gV2hlbiB5b3Ugd3JpdGUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgZml4IGJ1Z3MsIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBkb24ndAotIGZpZGRsZSBhbGwgb3ZlciB0aGUgc291cmNlIGZpbGVzIGFuZCBmdW5jdGlvbnMuIFJlbWVtYmVyIHRoYXQgaXQgaXMgbGlrZWx5Ci0gdGhhdCBvdGhlciBwZW9wbGUgaGF2ZSBkb25lIGNoYW5nZXMgaW4gdGhlIHNhbWUgc291cmNlIGZpbGVzIGFzIHlvdSBoYXZlIGFuZAotIHBvc3NpYmx5IGV2ZW4gaW4gdGhlIHNhbWUgZnVuY3Rpb25zLiBJZiB5b3UgYnJpbmcgY29tcGxldGVseSBuZXcKLSBmdW5jdGlvbmFsaXR5LCB0cnkgd3JpdGluZyBpdCBpbiBhIG5ldyBzb3VyY2UgZmlsZS4gSWYgeW91IGZpeCBidWdzLCB0cnkgdG8KLSBmaXggb25lIGJ1ZyBhdCBhIHRpbWUgYW5kIHNlbmQgdGhlbSBhcyBzZXBhcmF0ZSBwYXRjaGVzLgotCi0yLjMgV3JpdGUgU2VwYXJhdGUgUGF0Y2hlcwotCi0gSXQgaXMgYW5ub3lpbmcgd2hlbiB5b3UgZ2V0IGEgaHVnZSBwYXRjaCBmcm9tIHNvbWVvbmUgdGhhdCBpcyBzYWlkIHRvIGZpeCA1MTEKLSBvZGQgcHJvYmxlbXMsIGJ1dCBkaXNjdXNzaW9ucyBhbmQgb3BpbmlvbnMgZG9uJ3QgYWdyZWUgd2l0aCA1MTAgb2YgdGhlbSAtIG9yCi0gNTA5IG9mIHRoZW0gd2VyZSBhbHJlYWR5IGZpeGVkIGluIGEgZGlmZmVyZW50IHdheS4gVGhlbiB0aGUgcGF0Y2hlciBuZWVkcyB0bwotIGV4dHJhY3QgdGhlIHNpbmdsZSBpbnRlcmVzdGluZyBwYXRjaCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGh1Z2UgcGlsZSBvZgotIHNvdXJjZSwgYW5kIHRoYXQgZ2l2ZXMgYSBsb3Qgb2YgZXh0cmEgd29yay4gUHJlZmVyYWJseSwgYWxsIGZpeGVzIHRoYXQKLSBjb3JyZWN0IGRpZmZlcmVudCBwcm9ibGVtcyBzaG91bGQgYmUgaW4gdGhlaXIgb3duIHBhdGNoIHdpdGggYW4gYXR0YWNoZWQKLSBkZXNjcmlwdGlvbiBleGFjdGx5IHdoYXQgdGhleSBjb3JyZWN0IHNvIHRoYXQgYWxsIHBhdGNoZXMgY2FuIGJlIHNlbGVjdGl2ZWx5Ci0gYXBwbGllZCBieSB0aGUgbWFpbnRhaW5lciBvciBvdGhlciBpbnRlcmVzdGVkIHBhcnRpZXMuCi0KLSBBbHNvLCBzZXBhcmF0ZSBwYXRjaGVzIGVuYWJsZSBiaXNlY3RpbmcgbXVjaCBiZXR0ZXIgd2hlbiB3ZSB0cmFjayBwcm9ibGVtcyBpbgotIHRoZSBmdXR1cmUuCi0KLTIuNCBQYXRjaCBBZ2FpbnN0IFJlY2VudCBTb3VyY2VzCi0KLSBQbGVhc2UgdHJ5IHRvIGdldCB0aGUgbGF0ZXN0IGF2YWlsYWJsZSBzb3VyY2VzIHRvIG1ha2UgeW91ciBwYXRjaGVzCi0gYWdhaW5zdC4gSXQgbWFrZXMgdGhlIGxpZmUgb2YgdGhlIGRldmVsb3BlcnMgc28gbXVjaCBlYXNpZXIuIFRoZSB2ZXJ5IGJlc3QgaXMKLSBpZiB5b3UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc291cmNlcyBmcm9tIHRoZSBnaXQgcmVwb3NpdG9yeSwgYnV0IHRoZQotIGxhdGVzdCByZWxlYXNlIGFyY2hpdmUgaXMgcXVpdGUgT0sgYXMgd2VsbCEKLQotMi41IERvY3VtZW50Ci0KLSBXcml0aW5nIGRvY3MgaXMgZGVhZCBib3JpbmcgYW5kIG9uZSBvZiB0aGUgYmlnIHByb2JsZW1zIHdpdGggbWFueSBvcGVuIHNvdXJjZQotIHByb2plY3RzLiBTb21lb25lJ3MgZ290dGEgZG8gaXQuIEl0IG1ha2VzIGl0IGEgbG90IGVhc2llciBpZiB5b3Ugc3VibWl0IGEKLSBzbWFsbCBkZXNjcmlwdGlvbiBvZiB5b3VyIGZpeCBvciB5b3VyIG5ldyBmZWF0dXJlcyB3aXRoIGV2ZXJ5IGNvbnRyaWJ1dGlvbiBzbwotIHRoYXQgaXQgY2FuIGJlIHN3aWZ0bHkgYWRkZWQgdG8gdGhlIHBhY2thZ2UgZG9jdW1lbnRhdGlvbi4KLQotIFRoZSBkb2N1bWVudGF0aW9uIGlzIGFsd2F5cyBtYWRlIGluIG1hbiBwYWdlcyAobnJvZmYgZm9ybWF0dGVkKSBvciBwbGFpbgotIEFTQ0lJIGZpbGVzLiBBbGwgSFRNTCBmaWxlcyBvbiB0aGUgd2ViIHNpdGUgYW5kIGluIHRoZSByZWxlYXNlIGFyY2hpdmVzIGFyZQotIGdlbmVyYXRlZCBmcm9tIHRoZSBucm9mZi9BU0NJSSB2ZXJzaW9ucy4KLQotMi42IFRlc3QgQ2FzZXMKLQotIFNpbmNlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHRlc3Qgc3VpdGUsIHdlIGNhbiBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBtYWluCi0gZmVhdHVyZXMgYXJlIHdvcmtpbmcgYXMgdGhleSdyZSBzdXBwb3NlZCB0by4gVG8gbWFpbnRhaW4gdGhpcyBzaXR1YXRpb24gYW5kCi0gaW1wcm92ZSBpdCwgYWxsIG5ldyBmZWF0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGFkZGVkIG5lZWQgdG8gYmUgdGVzdGVkCi0gaW4gdGhlIHRlc3Qgc3VpdGUuIEV2ZXJ5IGZlYXR1cmUgdGhhdCBpcyBhZGRlZCBzaG91bGQgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZAotIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgaXQgd29ya3MgYXMgZG9jdW1lbnRlZC4gSWYgZXZlcnkgc3VibWl0dGVyIGFsc28KLSBwb3N0cyBhIGZldyB0ZXN0IGNhc2VzLCBpdCB3b24ndCBlbmQgdXAgYXMgYSBoZWF2eSBidXJkZW4gb24gYSBzaW5nbGUgcGVyc29uIQotCi0gSWYgeW91IGRvbid0IGhhdmUgdGVzdCBjYXNlcyBvciBwZXJoYXBzIHlvdSBoYXZlIGRvbmUgc29tZXRoaW5nIHRoYXQgaXMgdmVyeQotIGhhcmQgdG8gd3JpdGUgdGVzdHMgZm9yLCBkbyBleHBsYWluIGV4YWN0bHkgaG93IHlvdSBoYXZlIG90aGVyd2lzZSB0ZXN0ZWQgYW5kCi0gdmVyaWZpZWQgeW91ciBjaGFuZ2VzLgotCi0zLiBQdXNoaW5nIE91dCBZb3VyIENoYW5nZXMKLQotMy4xIFdyaXRlIEFjY2VzcyB0byBnaXQgUmVwb3NpdG9yeQotCi0gSWYgeW91IGFyZSBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yLCBvciBoYXZlIGFub3RoZXIgZ29vZCByZWFzb24sIHlvdSBjYW4gb2YKLSBjb3Vyc2UgZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgYW5kIHRoZW4geW91J2xsIGJlIGFibGUgdG8gcHVzaAotIHlvdXIgY2hhbmdlcyBzdHJhaWdodCBpbnRvIHRoZSBnaXQgcmVwbyBpbnN0ZWFkIG9mIHNlbmRpbmcgY2hhbmdlcyBieSBtYWlsIGFzCi0gcGF0Y2hlcy4gSnVzdCBhc2sgaWYgdGhpcyBpcyB3aGF0IHlvdSdkIHdhbnQuIFlvdSB3aWxsIGJlIHJlcXVpcmVkIHRvIGhhdmUKLSBwb3N0ZWQgYSBmZXcgcXVhbGl0eSBwYXRjaGVzIGZpcnN0LCBiZWZvcmUgeW91IGNhbiBiZSBncmFudGVkIHB1c2ggYWNjZXNzLgotCi0zLjIgSG93IFRvIE1ha2UgYSBQYXRjaCB3aXRoIGdpdAotCi0gWW91IG5lZWQgdG8gZmlyc3QgY2hlY2tvdXQgdGhlIHJlcG9zaXRvcnk6Ci0KLSAgICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwuZ2l0Ci0KLSBZb3UgdGhlbiBwcm9jZWVkIGFuZCBlZGl0IGFsbCB0aGUgZmlsZXMgeW91IGxpa2UgYW5kIHlvdSBjb21taXQgdGhlbSB0byB5b3VyCi0gbG9jYWwgcmVwb3NpdG9yeToKLQotICAgICBnaXQgY29tbWl0IFtmaWxlXQotCi0gQXMgdXN1YWwsIGdyb3VwIHlvdXIgY29tbWl0cyBzbyB0aGF0IHlvdSBjb21taXQgYWxsIGNoYW5nZXMgdGhhdCBhdCBvbmNlIHRoYXQKLSBjb25zdGl0dXRlcyBhIGxvZ2ljYWwgY2hhbmdlLiBTZWUgYWxzbyBzZWN0aW9uICIzLjUgV3JpdGUgZ29vZCBjb21taXQKLSBtZXNzYWdlcyIuCi0KLSBPbmNlIHlvdSBoYXZlIGRvbmUgYWxsIHlvdXIgY29tbWl0cyBhbmQgeW91J3JlIGhhcHB5IHdpdGggd2hhdCB5b3Ugc2VlLCB5b3UKLSBjYW4gbWFrZSBwYXRjaGVzIG91dCBvZiB5b3VyIGNoYW5nZXMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIG1haWxpbmc6Ci0KLSAgICAgZ2l0IGZvcm1hdC1wYXRjaCByZW1vdGVzL29yaWdpbi9tYXN0ZXIKLQotIFRoaXMgY3JlYXRlcyBmaWxlcyBpbiB5b3VyIGxvY2FsIGRpcmVjdG9yeSBuYW1lZCBOTk5OLVtuYW1lXS5wYXRjaCBmb3IgZWFjaAotIGNvbW1pdC4KLQotIE5vdyBzZW5kIHRob3NlIHBhdGNoZXMgb2ZmIHRvIHRoZSBjdXJsLWxpYnJhcnkgbGlzdC4gWW91IGNhbiBvZiBjb3Vyc2Ugb3B0IHRvCi0gZG8gdGhhdCB3aXRoIHRoZSAnZ2l0IHNlbmQtZW1haWwnIGNvbW1hbmQuCi0KLTMuMyBIb3cgVG8gTWFrZSBhIFBhdGNoIHdpdGhvdXQgZ2l0Ci0KLSBLZWVwIGEgY29weSBvZiB0aGUgdW5tb2RpZmllZCBjdXJsIHNvdXJjZXMuIE1ha2UgeW91ciBjaGFuZ2VzIGluIGEgc2VwYXJhdGUKLSBzb3VyY2UgdHJlZS4gV2hlbiB5b3UgdGhpbmsgeW91IGhhdmUgc29tZXRoaW5nIHRoYXQgeW91IHdhbnQgdG8gb2ZmZXIgdGhlCi0gY3VybCBjb21tdW5pdHksIHVzZSBHTlUgZGlmZiB0byBnZW5lcmF0ZSBwYXRjaGVzLgotCi0gSWYgeW91IGhhdmUgbW9kaWZpZWQgYSBzaW5nbGUgZmlsZSwgdHJ5IHNvbWV0aGluZyBsaWtlOgotCi0gICAgIGRpZmYgLXUgdW5tb2RpZmllZC1maWxlLmMgbXktY2hhbmdlZC1vbmUuYyA+IG15LWZpeGVzLmRpZmYKLQotIElmIHlvdSBoYXZlIG1vZGlmaWVkIHNldmVyYWwgZmlsZXMsIHBvc3NpYmx5IGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywgeW91Ci0gY2FuIHVzZSBkaWZmIHJlY3Vyc2l2ZWx5OgotCi0gICAgIGRpZmYgLXVyIGN1cmwtb3JpZ2luYWwtZGlyIGN1cmwtbW9kaWZpZWQtc291cmNlcy1kaXIgPiBteS1maXhlcy5kaWZmCi0KLSBUaGUgR05VIGRpZmYgYW5kIEdOVSBwYXRjaCB0b29scyBleGlzdCBmb3IgdmlydHVhbGx5IGFsbCBwbGF0Zm9ybXMsIGluY2x1ZGluZwotIGFsbCBraW5kcyBvZiBVbml4ZXMgYW5kIFdpbmRvd3M6Ci0KLSBGb3IgdW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zOgotCi0gICAgIGh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC8KLSAgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kaWZmdXRpbHMvCi0KLSBGb3IgV2luZG93czoKLQotICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL3BhdGNoLmh0bQotICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL2RpZmZ1dGlscy5odG0KLQotMy40IEhvdyB0byBnZXQgeW91ciBjaGFuZ2VzIGludG8gdGhlIG1haW4gc291cmNlcwotCi0gU3VibWl0IHlvdXIgcGF0Y2ggdG8gdGhlIGN1cmwtbGlicmFyeSBtYWlsaW5nIGxpc3QuCi0KLSBNYWtlIHRoZSBwYXRjaCBhZ2FpbnN0IGFzIHJlY2VudCBzb3VyY2VzIGFzIHBvc3NpYmxlLgotCi0gTWFrZSBzdXJlIHlvdXIgcGF0Y2ggYWRoZXJlcyB0byB0aGUgc291cmNlIGluZGVudCBhbmQgY29kaW5nIHN0eWxlIG9mIGFscmVhZHkKLSBleGlzdGluZyBzb3VyY2UgY29kZS4gRmFpbGluZyB0byBkbyBzbyBqdXN0IGFkZHMgbW9yZSB3b3JrIGZvciBtZS4KLQotIFJlc3BvbmQgdG8gcmVwbGllcyBvbiB0aGUgbGlzdCBhYm91dCB0aGUgcGF0Y2ggYW5kIGFuc3dlciBxdWVzdGlvbnMgYW5kL29yCi0gZml4IG5pdHMvZmxhd3MuIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQuIEkgd2lsbCB0YWtlIGxhY2sgb2YgcmVwbGllcyBhcyBhIHNpZ24KLSB0aGF0IHlvdSdyZSBub3QgdmVyeSBhbnhpb3VzIHRvIGdldCB5b3VyIHBhdGNoIGFjY2VwdGVkIGFuZCBJIHRlbmQgdG8gc2ltcGx5Ci0gZHJvcCBzdWNoIHBhdGNoZXMgZnJvbSBteSBUT0RPIGxpc3QuCi0KLSBJZiB5b3UndmUgZm9sbG93ZWQgdGhlIGFib3ZlIHBhcmFncmFwaHMgYW5kIHlvdXIgcGF0Y2ggc3RpbGwgaGFzbid0IGJlZW4KLSBpbmNvcnBvcmF0ZWQgYWZ0ZXIgc29tZSB3ZWVrcywgY29uc2lkZXIgcmVzdWJtaXR0aW5nIGl0IHRvIHRoZSBsaXN0LgotCi0zLjUgV3JpdGUgZ29vZCBjb21taXQgbWVzc2FnZXMKLQotIEEgc2hvcnQgZ3VpZGUgdG8gaG93IHRvIGRvIGZpbmUgY29tbWl0IG1lc3NhZ2VzIGluIHRoZSBjdXJsIHByb2plY3QuCi0KLSAgICAgIC0tLS0gc3RhcnQgLS0tLQotICAgICAgW2FyZWFdOiBbc2hvcnQgbGluZSBkZXNjcmliaW5nIHRoZSBtYWluIGVmZmVjdF0KLQotICAgICAgW3NlcGFyYXRlIHRoZSBhYm92ZSBzaW5nbGUgbGluZSBmcm9tIHRoZSByZXN0IHdpdGggYW4gZW1wdHkgbGluZV0KLQotICAgICAgW2Z1bGwgZGVzY3JpcHRpb24sIG5vIHdpZGVyIHRoYW4gNzIgY29sdW1ucyB0aGF0IGRlc2NyaWJlIGFzIG11Y2ggYXMKLSAgICAgIHBvc3NpYmxlIGFzIHRvIHdoeSB0aGlzIGNoYW5nZSBpcyBtYWRlLCBhbmQgcG9zc2libHkgd2hhdCB0aGluZ3MKLSAgICAgIGl0IGZpeGVzIGFuZCBldmVyeXRoaW5nIGVsc2UgdGhhdCBpcyByZWxhdGVkXQotCi0gICAgICBbQnVnOiBsaW5rIHRvIHNvdXJjZSBvZiB0aGUgcmVwb3J0IG9yIG1vcmUgcmVsYXRlZCBkaXNjdXNzaW9uXQotICAgICAgW1JlcG9ydGVkLWJ5OiBKb2huIERvZSAtIGNyZWRpdCB0aGUgcmVwb3J0ZXJdCi0gICAgICBbd2hhdGV2ZXItZWxzZS1ieTogY3JlZGl0IGFsbCBoZWxwZXJzLCBmaW5kZXJzLCBkb2Vyc10KLSAgICAgIC0tLS0gc3RvcCAtLS0tCi0KLSBEb24ndCBmb3JnZXQgdG8gdXNlIGNvbW1pdCAtLWF1dGhvcj0iIiBpZiB5b3UgY29tbWl0IHNvbWVvbmUgZWxzZSdzIHdvcmssCi0gYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHlvdXIgb3duIHVzZXIgYW5kIGVtYWlsIHNldHVwIGNvcnJlY3RseSBpbiBnaXQKLSBiZWZvcmUgeW91IGNvbW1pdAotCi0zLjYgQWJvdXQgcHVsbCByZXF1ZXN0cwotCi0gV2l0aCBnaXQgKGFuZCBlc3BlY2lhbGx5IGdpdGh1YikgaXQgaXMgZWFzeSBhbmQgdGVtcHRpbmcgdG8gc2VuZCBhIHB1bGwKLSByZXF1ZXN0IHRvIHRoZSBjdXJsIHByb2plY3QgdG8gaGF2ZSBjaGFuZ2VzIG1lcmdlZCB0aGlzIHdheSBpbnN0ZWFkIG9mCi0gbWFpbGluZyBwYXRjaGVzIHRvIHRoZSBjdXJsLWxpYnJhcnkgbWFpbGluZyBsaXN0LgotCi0gV2UgdXNlZCB0byBkaXNsaWtlIHRoaXMgYnV0IHdlJ3JlIHRyeWluZyB0byBjaGFuZ2UgdGhhdCBhbmQgYWNjZXB0IHRoYXQgdGhpcwotIGlzIGEgZnJpY3Rpb25sZXNzIHdheSBmb3IgcGVvcGxlIHRvIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QuIFdlIG5vdyB3ZWxjb21lCi0gcHVsbCByZXF1ZXN0cyEKLQotIFdlIHdpbGwgY29udGludWUgdG8gYXZvaWQgdXNpbmcgZ2l0aHViJ3MgbWVyZ2UgdG9vbHMgdG8gbWFrZSB0aGUgaGlzdG9yeQotIGxpbmVhciBhbmQgdG8gbWFrZSBzdXJlIGNvbW1pdHMgZm9sbG93IG91ciBzdHlsZSBndWlkZWxpbmVzLgpkaWZmIC0tZ2l0IGEvZG9jcy9DT05UUklCVVRFLm1kIGIvZG9jcy9DT05UUklCVVRFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjBmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL0NPTlRSSUJVVEUubWQKQEAgLTAsMCArMSwyNDcgQEAKKyMgQ29udHJpYnV0aW5nIHRvIHRoZSBjdXJsIHByb2plY3QKKworVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBvZmZlciBndWlkZWxpbmVzIG9uIGhvdyB0byBiZXN0IGNvbnRyaWJ1dGUgdG8gdGhlCitjdXJsIHByb2plY3QuIFRoaXMgY29uY2VybnMgbmV3IGZlYXR1cmVzIGFzIHdlbGwgYXMgY29ycmVjdGlvbnMgdG8gZXhpc3RpbmcKK2ZsYXdzIG9yIGJ1Z3MuCisKKyMjIExlYXJuaW5nIGN1cmwKKworIyMjIEpvaW4gdGhlIENvbW11bml0eQorCitTa2lwIG92ZXIgdG8gW2h0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvXShodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsLykgYW5kIGpvaW4KK3RoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3QocykuICBSZWFkIHVwIG9uIGRldGFpbHMgYmVmb3JlIHlvdSBwb3N0CitxdWVzdGlvbnMuIFJlYWQgdGhpcyBmaWxlIGJlZm9yZSB5b3Ugc3RhcnQgc2VuZGluZyBwYXRjaGVzISBXZSBwcmVmZXIKK3F1ZXN0aW9ucyBzZW50IHRvIGFuZCBkaXNjdXNzaW9ucyBiZWluZyBoZWxkIG9uIHRoZSBtYWlsaW5nIGxpc3QocyksIG5vdCBzZW50Cit0byBpbmRpdmlkdWFscy4KKworQmVmb3JlIHBvc3RpbmcgdG8gb25lIG9mIHRoZSBjdXJsIG1haWxpbmcgbGlzdHMsIHBsZWFzZSByZWFkIHVwIG9uIHRoZQorW21haWxpbmcgbGlzdCBldGlxdWV0dGVdKGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvZXRpcXVldHRlLmh0bWwpLgorCitXZSBhbHNvIGhhbmcgb3V0IG9uIElSQyBpbiAjY3VybCBvbiBpcmMuZnJlZW5vZGUubmV0CisKK0lmIHlvdSdyZSBhdCBhbGwgaW50ZXJlc3RlZCBpbiB0aGUgY29kZSBzaWRlIG9mIHRoaW5ncywgY29uc2lkZXIgY2xpY2tpbmcKKyd3YXRjaCcgb24gdGhlIFtjdXJsIHJlcG8gb24gZ2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsKSB0byBnZXQKK25vdGlmaWVkIG9uIHB1bGwgcmVxdWVzdHMgYW5kIG5ldyBpc3N1ZXMgcG9zdGVkIHRoZXJlLgorCisjIyMgTGljZW5zZSBhbmQgY29weXJpZ2h0CisKK1doZW4gY29udHJpYnV0aW5nIHdpdGggY29kZSwgeW91IGFncmVlIHRvIHB1dCB5b3VyIGNoYW5nZXMgYW5kIG5ldyBjb2RlIHVuZGVyCit0aGUgc2FtZSBsaWNlbnNlIGN1cmwgYW5kIGxpYmN1cmwgaXMgYWxyZWFkeSB1c2luZyB1bmxlc3Mgc3RhdGVkIGFuZCBhZ3JlZWQKK290aGVyd2lzZS4KKworSWYgeW91IGFkZCBhIGxhcmdlciBwaWVjZSBvZiBjb2RlLCB5b3UgY2FuIG9wdCB0byBtYWtlIHRoYXQgZmlsZSBvciBzZXQgb2YKK2ZpbGVzIHRvIHVzZSBhIGRpZmZlcmVudCBsaWNlbnNlIGFzIGxvbmcgYXMgdGhleSBkb24ndCBlbmZvcmNlIGFueSBjaGFuZ2VzIHRvCit0aGUgcmVzdCBvZiB0aGUgcGFja2FnZSBhbmQgdGhleSBtYWtlIHNlbnNlLiBTdWNoICJzZXBhcmF0ZSBwYXJ0cyIgY2FuIG5vdCBiZQorR1BMIGxpY2Vuc2VkIChhcyB3ZSBkb24ndCB3YW50IGNvcHlsZWZ0IHRvIGFmZmVjdCB1c2VycyBvZiBsaWJjdXJsKSBidXQgdGhleQorbXVzdCB1c2UgIkdQTCBjb21wYXRpYmxlIiBsaWNlbnNlcyAoYXMgd2Ugd2FudCB0byBhbGxvdyB1c2VycyB0byB1c2UgbGliY3VybAorcHJvcGVybHkgaW4gR1BMIGxpY2Vuc2VkIGVudmlyb25tZW50cykuCisKK1doZW4gY2hhbmdpbmcgZXhpc3Rpbmcgc291cmNlIGNvZGUsIHlvdSBkbyBub3QgYWx0ZXIgdGhlIGNvcHlyaWdodCBvZiB0aGUKK29yaWdpbmFsIGZpbGUocykuIFRoZSBjb3B5cmlnaHQgd2lsbCBzdGlsbCBiZSBvd25lZCBieSB0aGUgb3JpZ2luYWwgY3JlYXRvcihzKQorb3IgdGhvc2Ugd2hvIGhhdmUgYmVlbiBhc3NpZ25lZCBjb3B5cmlnaHQgYnkgdGhlIG9yaWdpbmFsIGF1dGhvcihzKS4KKworQnkgc3VibWl0dGluZyBhIHBhdGNoIHRvIHRoZSBjdXJsIHByb2plY3QsIHlvdSBhcmUgYXNzdW1lZCB0byBoYXZlIHRoZSByaWdodAordG8gdGhlIGNvZGUgYW5kIHRvIGJlIGFsbG93ZWQgYnkgeW91ciBlbXBsb3llciBvciB3aGF0ZXZlciB0byBoYW5kIG92ZXIgdGhhdAorcGF0Y2gvY29kZSB0byB1cy4gV2Ugd2lsbCBjcmVkaXQgeW91IGZvciB5b3VyIGNoYW5nZXMgYXMgZmFyIGFzIHBvc3NpYmxlLCB0bworZ2l2ZSBjcmVkaXQgYnV0IGFsc28gdG8ga2VlcCBhIHRyYWNlIGJhY2sgdG8gd2hvIG1hZGUgd2hhdCBjaGFuZ2VzLiBQbGVhc2UKK2Fsd2F5cyBwcm92aWRlIHVzIHdpdGggeW91ciBmdWxsIHJlYWwgbmFtZSB3aGVuIGNvbnRyaWJ1dGluZyEKKworIyMjIFdoYXQgVG8gUmVhZAorCitTb3VyY2UgY29kZSwgdGhlIG1hbiBwYWdlcywgdGhlIFtJTlRFUk5BTFMKK2RvY3VtZW50XShodHRwczovL2N1cmwuaGF4eC5zZS9kZXYvaW50ZXJuYWxzLmh0bWwpLAorW1RPRE9dKGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvdG9kby5odG1sKSwKK1tLTk9XTl9CVUdTXShodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2tub3duYnVncy5odG1sKSBhbmQgdGhlIFttb3N0IHJlY2VudAorY2hhbmdlc10oaHR0cHM6Ly9jdXJsLmhheHguc2UvZGV2L3NvdXJjZWFjdGl2aXR5Lmh0bWwpIGluIGdpdC4gSnVzdCBsdXJraW5nIG9uCit0aGUgW2N1cmwtbGlicmFyeSBtYWlsaW5nCitsaXN0XShodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC1saWJyYXJ5KSB3aWxsIGdpdmUgeW91IGEKK2xvdCBvZiBpbnNpZ2h0cyBvbiB3aGF0J3MgZ29pbmcgb24gcmlnaHQgbm93LiBBc2tpbmcgdGhlcmUgaXMgYSBnb29kIGlkZWEgdG9vLgorCisjIyBXcml0ZSBhIGdvb2QgcGF0Y2gKKworIyMjIEZvbGxvdyBjb2RlIHN0eWxlCisKK1doZW4gd3JpdGluZyBDIGNvZGUsIGZvbGxvdyB0aGUKK1tDT0RFX1NUWUxFXShodHRwczovL2N1cmwuaGF4eC5zZS9kZXYvY29kZS1zdHlsZS5odG1sKSBhbHJlYWR5IGVzdGFibGlzaGVkIGluCit0aGUgcHJvamVjdC4gQ29uc2lzdGVudCBzdHlsZSBtYWtlcyBjb2RlIGVhc2llciB0byByZWFkIGFuZCBtaXN0YWtlcyBsZXNzCitsaWtlbHkgdG8gaGFwcGVuLiBSdW4gYG1ha2UgY2hlY2tzcmNgIGJlZm9yZSB5b3Ugc3VibWl0IGFueXRoaW5nLCB0byBtYWtlIHN1cmUKK3lvdSBmb2xsb3cgdGhlIGJhc2ljIHN0eWxlLiBUaGF0IHNjcmlwdCBkb2Vzbid0IHZlcmlmeSBldmVyeXRoaW5nLCBidXQgaWYgaXQKK2NvbXBsYWlucyB5b3Uga25vdyB5b3UgaGF2ZSB3b3JrIHRvIGRvLgorCisjIyMgTm9uLWNsb2JiZXJpbmcgQWxsIE92ZXIKKworV2hlbiB5b3Ugd3JpdGUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgZml4IGJ1Z3MsIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBkb24ndAorZmlkZGxlIGFsbCBvdmVyIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGZ1bmN0aW9ucy4gUmVtZW1iZXIgdGhhdCBpdCBpcyBsaWtlbHkKK3RoYXQgb3RoZXIgcGVvcGxlIGhhdmUgZG9uZSBjaGFuZ2VzIGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlcyBhcyB5b3UgaGF2ZSBhbmQKK3Bvc3NpYmx5IGV2ZW4gaW4gdGhlIHNhbWUgZnVuY3Rpb25zLiBJZiB5b3UgYnJpbmcgY29tcGxldGVseSBuZXcKK2Z1bmN0aW9uYWxpdHksIHRyeSB3cml0aW5nIGl0IGluIGEgbmV3IHNvdXJjZSBmaWxlLiBJZiB5b3UgZml4IGJ1Z3MsIHRyeSB0bworZml4IG9uZSBidWcgYXQgYSB0aW1lIGFuZCBzZW5kIHRoZW0gYXMgc2VwYXJhdGUgcGF0Y2hlcy4KKworIyMjIFdyaXRlIFNlcGFyYXRlIENoYW5nZXMKKworSXQgaXMgYW5ub3lpbmcgd2hlbiB5b3UgZ2V0IGEgaHVnZSBwYXRjaCBmcm9tIHNvbWVvbmUgdGhhdCBpcyBzYWlkIHRvIGZpeCA1MTEKK29kZCBwcm9ibGVtcywgYnV0IGRpc2N1c3Npb25zIGFuZCBvcGluaW9ucyBkb24ndCBhZ3JlZSB3aXRoIDUxMCBvZiB0aGVtIC0gb3IKKzUwOSBvZiB0aGVtIHdlcmUgYWxyZWFkeSBmaXhlZCBpbiBhIGRpZmZlcmVudCB3YXkuIFRoZW4gdGhlIHBlcnNvbiBtZXJnaW5nCit0aGlzIGNoYW5nZSBuZWVkcyB0byBleHRyYWN0IHRoZSBzaW5nbGUgaW50ZXJlc3RpbmcgcGF0Y2ggZnJvbSBzb21ld2hlcmUKK3dpdGhpbiB0aGUgaHVnZSBwaWxlIG9mIHNvdXJjZSwgYW5kIHRoYXQgZ2l2ZXMgYSBsb3Qgb2YgZXh0cmEgd29yay4KKworUHJlZmVyYWJseSwgZWFjaCBmaXggdGhhdCBjb3JyZWN0IGEgcHJvYmxlbSBzaG91bGQgYmUgaW4gaXRzIG93biBwYXRjaC9jb21taXQKK3dpdGggaXRzIG93biBkZXNjcmlwdGlvbi9jb21taXQgbWVzc2FnZSBzdGF0aW5nIGV4YWN0bHkgd2hhdCB0aGV5IGNvcnJlY3Qgc28KK3RoYXQgYWxsIGNoYW5nZXMgY2FuIGJlIHNlbGVjdGl2ZWx5IGFwcGxpZWQgYnkgdGhlIG1haW50YWluZXIgb3Igb3RoZXIKK2ludGVyZXN0ZWQgcGFydGllcy4KKworQWxzbywgc2VwYXJhdGUgY2hhbmdlcyBlbmFibGUgYmlzZWN0aW5nIG11Y2ggYmV0dGVyIHdoZW4gd2UgdHJhY2sgcHJvYmxlbXMKK2FuZCByZWdyZXNzaW9uIGluIHRoZSBmdXR1cmUuCisKKyMjIyBQYXRjaCBBZ2FpbnN0IFJlY2VudCBTb3VyY2VzCisKK1BsZWFzZSB0cnkgdG8gZ2V0IHRoZSBsYXRlc3QgYXZhaWxhYmxlIHNvdXJjZXMgdG8gbWFrZSB5b3VyIHBhdGNoZXMgYWdhaW5zdC4KK0l0IG1ha2VzIHRoZSBsaXZlcyBvZiB0aGUgZGV2ZWxvcGVycyBzbyBtdWNoIGVhc2llci4gVGhlIHZlcnkgYmVzdCBpcyBpZiB5b3UKK2dldCB0aGUgbW9zdCB1cC10by1kYXRlIHNvdXJjZXMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnksIGJ1dCB0aGUgbGF0ZXN0CityZWxlYXNlIGFyY2hpdmUgaXMgcXVpdGUgT0sgYXMgd2VsbCEKKworIyMjIERvY3VtZW50YXRpb24KKworV3JpdGluZyBkb2NzIGlzIGRlYWQgYm9yaW5nIGFuZCBvbmUgb2YgdGhlIGJpZyBwcm9ibGVtcyB3aXRoIG1hbnkgb3BlbiBzb3VyY2UKK3Byb2plY3RzLiBTb21lb25lJ3MgZ290dGEgZG8gaXQuIEl0IG1ha2VzIGl0IGEgbG90IGVhc2llciBpZiB5b3Ugc3VibWl0IGEKK3NtYWxsIGRlc2NyaXB0aW9uIG9mIHlvdXIgZml4IG9yIHlvdXIgbmV3IGZlYXR1cmVzIHdpdGggZXZlcnkgY29udHJpYnV0aW9uIHNvCit0aGF0IGl0IGNhbiBiZSBzd2lmdGx5IGFkZGVkIHRvIHRoZSBwYWNrYWdlIGRvY3VtZW50YXRpb24uCisKK1RoZSBkb2N1bWVudGF0aW9uIGlzIGFsd2F5cyBtYWRlIGluIG1hbiBwYWdlcyAobnJvZmYgZm9ybWF0dGVkKSBvciBwbGFpbgorQVNDSUkgZmlsZXMuIEFsbCBIVE1MIGZpbGVzIG9uIHRoZSB3ZWIgc2l0ZSBhbmQgaW4gdGhlIHJlbGVhc2UgYXJjaGl2ZXMgYXJlCitnZW5lcmF0ZWQgZnJvbSB0aGUgbnJvZmYvQVNDSUkgdmVyc2lvbnMuCisKKyMjIyBUZXN0IENhc2VzCisKK1NpbmNlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHRlc3Qgc3VpdGUsIHdlIGNhbiBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBtYWluCitmZWF0dXJlcyBhcmUgd29ya2luZyBhcyB0aGV5J3JlIHN1cHBvc2VkIHRvLiBUbyBtYWludGFpbiB0aGlzIHNpdHVhdGlvbiBhbmQKK2ltcHJvdmUgaXQsIGFsbCBuZXcgZmVhdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZGRlZCBuZWVkIHRvIGJlIHRlc3RlZAoraW4gdGhlIHRlc3Qgc3VpdGUuIEV2ZXJ5IGZlYXR1cmUgdGhhdCBpcyBhZGRlZCBzaG91bGQgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZAordGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBpdCB3b3JrcyBhcyBkb2N1bWVudGVkLiBJZiBldmVyeSBzdWJtaXR0ZXIgYWxzbworcG9zdHMgYSBmZXcgdGVzdCBjYXNlcywgaXQgd29uJ3QgZW5kIHVwIGFzIGEgaGVhdnkgYnVyZGVuIG9uIGEgc2luZ2xlIHBlcnNvbiEKKworSWYgeW91IGRvbid0IGhhdmUgdGVzdCBjYXNlcyBvciBwZXJoYXBzIHlvdSBoYXZlIGRvbmUgc29tZXRoaW5nIHRoYXQgaXMgdmVyeQoraGFyZCB0byB3cml0ZSB0ZXN0cyBmb3IsIGRvIGV4cGxhaW4gZXhhY3RseSBob3cgeW91IGhhdmUgb3RoZXJ3aXNlIHRlc3RlZCBhbmQKK3ZlcmlmaWVkIHlvdXIgY2hhbmdlcy4KKworIyMgU2hhcmluZyBZb3VyIENoYW5nZXMKKworIyMjIEhvdyB0byBnZXQgeW91ciBjaGFuZ2VzIGludG8gdGhlIG1haW4gc291cmNlcworCitJZGVhbGx5IHlvdSBmaWxlIGEgW3B1bGwgcmVxdWVzdCBvbgorZ2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL3B1bGxzKSwgYnV0IHlvdSBjYW4gYWxzbyBzZW5kIHlvdXIgcGxhaW4KK3BhdGNoIHRvIFt0aGUgY3VybC1saWJyYXJ5IG1haWxpbmcKK2xpc3RdKGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGlzdC5jZ2k/bGlzdD1jdXJsLWxpYnJhcnkpLgorCitFaXRoZXIgd2F5LCB5b3VyIGNoYW5nZSB3aWxsIGJlIHJldmlld2VkIGFuZCBkaXNjdXNzZWQgdGhlcmUgYW5kIHlvdSB3aWxsIGJlCitleHBlY3RlZCB0byBjb3JyZWN0IGZsYXdzIHBvaW50ZWQgb3V0IGFuZCB1cGRhdGUgYWNjb3JkaW5nbHksIG9yIHRoZSBjaGFuZ2UKK3Jpc2sgc3RhbGxpbmcgYW5kIGV2ZW50dWFsbHkganVzdCBnZXQgZGVsZXRlZCB3aXRob3V0IGFjdGlvbi4gQXMgYSBzdWJtaXR0ZXIKK29mIGEgY2hhbmdlLCB5b3UgYXJlIHRoZSBvd25lciBvZiB0aGF0IGNoYW5nZSB1bnRpbCBpdCBoYXMgYmVlbiBtZXJnZWQuCisKK1Jlc3BvbmQgb24gdGhlIGxpc3Qgb3Igb24gZ2l0aHViIGFib3V0IHRoZSBjaGFuZ2UgYW5kIGFuc3dlciBxdWVzdGlvbnMgYW5kL29yCitmaXggbml0cy9mbGF3cy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudC4gV2Ugd2lsbCB0YWtlIGxhY2sgb2YgcmVwbGllcyBhcyBhCitzaWduIHRoYXQgeW91J3JlIG5vdCB2ZXJ5IGFueGlvdXMgdG8gZ2V0IHlvdXIgcGF0Y2ggYWNjZXB0ZWQgYW5kIHdlIHRlbmQgdG8KK3NpbXBseSBkcm9wIHN1Y2ggY2hhbmdlcy4KKworIyMjIEFib3V0IHB1bGwgcmVxdWVzdHMKKworV2l0aCBnaXRodWIgaXQgaXMgZWFzeSB0byBzZW5kIGEgW3B1bGwKK3JlcXVlc3RdKGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvcHVsbHMpIHRvIHRoZSBjdXJsIHByb2plY3QgdG8gaGF2ZQorY2hhbmdlcyBtZXJnZWQuCisKK1dlIHByZWZlciBwdWxsIHJlcXVlc3RzIHRvIG1haWxlZCBwYXRjaGVzLCBhcyBpdCBtYWtlcyBpdCBhIHByb3BlciBnaXQgY29tbWl0Cit0aGF0IGlzIGVhc3kgdG8gbWVyZ2UgYW5kIHRoZXkgYXJlIGVhc3kgdG8gdHJhY2sgYW5kIG5vdCB0aGF0IGVhc3kgdG8gbG9vc2UKK2luIGEgZmxvb2Qgb2YgbWFueSBlbWFpbHMsIGxpa2UgdGhleSBzb21ldGltZXMgZG8gb24gdGhlIG1haWxpbmcgbGlzdHMuCisKK1doZW4geW91IGFkanVzdCB5b3VyIHB1bGwgcmVxdWVzdHMgYWZ0ZXIgcmV2aWV3LCBjb25zaWRlciBzcXVhc2hpbmcgdGhlCitjb21taXRzIHNvIHRoYXQgd2UgY2FuIHJldmlldyB0aGUgZnVsbCB1cGRhdGVkIHZlcnNpb24gbW9yZSBlYXNpbHkuCisKKyMjIyBNYWtpbmcgcXVhbGl0eSBwYXRjaGVzCisKK01ha2UgdGhlIHBhdGNoIGFnYWluc3QgYXMgcmVjZW50IHNvdXJjZXMgYXMgcG9zc2libGUuCisKK0lmIHlvdSd2ZSBmb2xsb3dlZCB0aGUgdGlwcyBpbiB0aGlzIGRvY3VtZW50IGFuZCB5b3VyIHBhdGNoIHN0aWxsIGhhc24ndCBiZWVuCitpbmNvcnBvcmF0ZWQgb3IgcmVzcG9uZGVkIHRvIGFmdGVyIHNvbWUgd2Vla3MsIGNvbnNpZGVyIHJlc3VibWl0dGluZyBpdCB0bwordGhlIGxpc3Qgb3IgYmV0dGVyIHlldDogY2hhbmdlIGl0IHRvIGEgcHVsbCByZXF1ZXN0LgorCisjIyMgV3JpdGUgZ29vZCBjb21taXQgbWVzc2FnZXMKKworQSBzaG9ydCBndWlkZSB0byBob3cgdG8gd3JpdGUgY29tbWl0IG1lc3NhZ2VzIGluIHRoZSBjdXJsIHByb2plY3QuCisKKyAgICAtLS0tIHN0YXJ0IC0tLS0KKyAgICBbYXJlYV06IFtzaG9ydCBsaW5lIGRlc2NyaWJpbmcgdGhlIG1haW4gZWZmZWN0XQorICAgICAgICAgICAtLSBlbXB0eSBsaW5lIC0tCisgICAgW2Z1bGwgZGVzY3JpcHRpb24sIG5vIHdpZGVyIHRoYW4gNzIgY29sdW1ucyB0aGF0IGRlc2NyaWJlIGFzIG11Y2ggYXMKKyAgICBwb3NzaWJsZSBhcyB0byB3aHkgdGhpcyBjaGFuZ2UgaXMgbWFkZSwgYW5kIHBvc3NpYmx5IHdoYXQgdGhpbmdzCisgICAgaXQgZml4ZXMgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGlzIHJlbGF0ZWRdCisgICAgICAgICAgIC0tIGVtcHR5IGxpbmUgLS0KKyAgICBbQnVnOiBVUkwgdG8gc291cmNlIG9mIHRoZSByZXBvcnQgb3IgbW9yZSByZWxhdGVkIGRpc2N1c3Npb25dCisgICAgW1JlcG9ydGVkLWJ5OiBKb2huIERvZSAtIGNyZWRpdCB0aGUgcmVwb3J0ZXJdCisgICAgW3doYXRldmVyLWVsc2UtYnk6IGNyZWRpdCBhbGwgaGVscGVycywgZmluZGVycywgZG9lcnNdCisgICAgLS0tLSBzdG9wIC0tLS0KKworRG9uJ3QgZm9yZ2V0IHRvIHVzZSBjb21taXQgLS1hdXRob3I9IiIgaWYgeW91IGNvbW1pdCBzb21lb25lIGVsc2UncyB3b3JrLAorYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHlvdXIgb3duIHVzZXIgYW5kIGVtYWlsIHNldHVwIGNvcnJlY3RseSBpbiBnaXQKK2JlZm9yZSB5b3UgY29tbWl0CisKKyMjIyBXcml0ZSBBY2Nlc3MgdG8gZ2l0IFJlcG9zaXRvcnkKKworSWYgeW91IGFyZSBhIHZlcnkgZnJlcXVlbnQgY29udHJpYnV0b3IsIHlvdSBtYXkgYmUgZ2l2ZW4gcHVzaCBhY2Nlc3MgdG8gdGhlCitnaXQgcmVwb3NpdG9yeSBhbmQgdGhlbiB5b3UnbGwgYmUgYWJsZSB0byBwdXNoIHlvdXIgY2hhbmdlcyBzdHJhaWdodCBpbnRvIHRoZQorZ2l0IHJlcG8gaW5zdGVhZCBvZiBzZW5kaW5nIGNoYW5nZXMgYXMgcHVsbCByZXF1ZXN0cyBvciBieSBtYWlsIGFzIHBhdGNoZXMuCisKK0p1c3QgYXNrIGlmIHRoaXMgaXMgd2hhdCB5b3UnZCB3YW50LiBZb3Ugd2lsbCBiZSByZXF1aXJlZCB0byBoYXZlIHBvc3RlZAorc2V2ZXJhbCBoaWdoIHF1YWxpdHkgcGF0Y2hlcyBmaXJzdCwgYmVmb3JlIHlvdSBjYW4gYmUgZ3JhbnRlZCBwdXNoIGFjY2Vzcy4KKworIyMjIEhvdyBUbyBNYWtlIGEgUGF0Y2ggd2l0aCBnaXQKKworWW91IG5lZWQgdG8gZmlyc3QgY2hlY2tvdXQgdGhlIHJlcG9zaXRvcnk6CisKKyAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC5naXQKKworWW91IHRoZW4gcHJvY2VlZCBhbmQgZWRpdCBhbGwgdGhlIGZpbGVzIHlvdSBsaWtlIGFuZCB5b3UgY29tbWl0IHRoZW0gdG8geW91cgorbG9jYWwgcmVwb3NpdG9yeToKKworICAgIGdpdCBjb21taXQgW2ZpbGVdCisKK0FzIHVzdWFsLCBncm91cCB5b3VyIGNvbW1pdHMgc28gdGhhdCB5b3UgY29tbWl0IGFsbCBjaGFuZ2VzIHRoYXQgYXQgb25jZSB0aGF0Citjb25zdGl0dXRlcyBhIGxvZ2ljYWwgY2hhbmdlLgorCitPbmNlIHlvdSBoYXZlIGRvbmUgYWxsIHlvdXIgY29tbWl0cyBhbmQgeW91J3JlIGhhcHB5IHdpdGggd2hhdCB5b3Ugc2VlLCB5b3UKK2NhbiBtYWtlIHBhdGNoZXMgb3V0IG9mIHlvdXIgY2hhbmdlcyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgbWFpbGluZzoKKworICAgIGdpdCBmb3JtYXQtcGF0Y2ggcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisKK1RoaXMgY3JlYXRlcyBmaWxlcyBpbiB5b3VyIGxvY2FsIGRpcmVjdG9yeSBuYW1lZCBOTk5OLVtuYW1lXS5wYXRjaCBmb3IgZWFjaAorY29tbWl0LgorCitOb3cgc2VuZCB0aG9zZSBwYXRjaGVzIG9mZiB0byB0aGUgY3VybC1saWJyYXJ5IGxpc3QuIFlvdSBjYW4gb2YgY291cnNlIG9wdCB0bworZG8gdGhhdCB3aXRoIHRoZSAnZ2l0IHNlbmQtZW1haWwnIGNvbW1hbmQuCisKKyMjIyBIb3cgVG8gTWFrZSBhIFBhdGNoIHdpdGhvdXQgZ2l0CisKK0tlZXAgYSBjb3B5IG9mIHRoZSB1bm1vZGlmaWVkIGN1cmwgc291cmNlcy4gTWFrZSB5b3VyIGNoYW5nZXMgaW4gYSBzZXBhcmF0ZQorc291cmNlIHRyZWUuIFdoZW4geW91IHRoaW5rIHlvdSBoYXZlIHNvbWV0aGluZyB0aGF0IHlvdSB3YW50IHRvIG9mZmVyIHRoZQorY3VybCBjb21tdW5pdHksIHVzZSBHTlUgZGlmZiB0byBnZW5lcmF0ZSBwYXRjaGVzLgorCitJZiB5b3UgaGF2ZSBtb2RpZmllZCBhIHNpbmdsZSBmaWxlLCB0cnkgc29tZXRoaW5nIGxpa2U6CisKKyAgICBkaWZmIC11IHVubW9kaWZpZWQtZmlsZS5jIG15LWNoYW5nZWQtb25lLmMgPiBteS1maXhlcy5kaWZmCisKK0lmIHlvdSBoYXZlIG1vZGlmaWVkIHNldmVyYWwgZmlsZXMsIHBvc3NpYmx5IGluIGRpZmZlcmVudCBkaXJlY3RvcmllcywgeW91CitjYW4gdXNlIGRpZmYgcmVjdXJzaXZlbHk6CisKKyAgICBkaWZmIC11ciBjdXJsLW9yaWdpbmFsLWRpciBjdXJsLW1vZGlmaWVkLXNvdXJjZXMtZGlyID4gbXktZml4ZXMuZGlmZgorCitUaGUgR05VIGRpZmYgYW5kIEdOVSBwYXRjaCB0b29scyBleGlzdCBmb3IgdmlydHVhbGx5IGFsbCBwbGF0Zm9ybXMsIGluY2x1ZGluZworYWxsIGtpbmRzIG9mIFVuaXhlcyBhbmQgV2luZG93czoKKworRm9yIHVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtczoKKworIC0gW2h0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC9dKGh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC8pCisgLSBbaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9kaWZmdXRpbHMvXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2RpZmZ1dGlscy8pCisKK0ZvciBXaW5kb3dzOgorCisgLSBbaHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9wYXRjaC5odG1dKGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvcGF0Y2guaHRtKQorIC0gW2h0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvZGlmZnV0aWxzLmh0bV0oaHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9kaWZmdXRpbHMuaHRtKQpkaWZmIC0tZ2l0IGEvZG9jcy9GQVEgYi9kb2NzL0ZBUQppbmRleCA2ODFjZTI5Li5kNjYzODExIDEwMDY0NAotLS0gYS9kb2NzL0ZBUQorKysgYi9kb2NzL0ZBUQpAQCAtODEsNyArODEsNyBAQAogICA0LjE2IE15IEhUVFAgUE9TVCBvciBQVVQgcmVxdWVzdHMgYXJlIHNsb3chCiAgIDQuMTcgTm9uLWZ1bmN0aW9uYWwgY29ubmVjdCB0aW1lb3V0cyBvbiBXaW5kb3dzCiAgIDQuMTggZmlsZTovLyBVUkxzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyAoV2luZG93cywgTmV0V2FyZSkKLSAgNC4xOSBXaHkgZG9lc24ndCBjVVJMIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KKyAgNC4xOSBXaHkgZG9lc24ndCBjdXJsIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KICAgNC4yMCBjdXJsIGRvZXNuJ3QgcmV0dXJuIGVycm9yIGZvciBIVFRQIG5vbi0yMDAgcmVzcG9uc2VzIQogICA0LjIxIFdoeSBpcyB0aGVyZSBhIEhUVFAvMS4xIGluIG15IEhUVFAvMiByZXF1ZXN0PwogCkBAIC05NjgsOCArOTY4LDggQEAKIAogICA0LjkgQ3VybCBjYW4ndCBhdXRoZW50aWNhdGUgdG8gdGhlIHNlcnZlciB0aGF0IHJlcXVpcmVzIE5UTE0/CiAKLSAgTlRMTSBzdXBwb3J0IHJlcXVpcmVzIE9wZW5TU0wsIEdudVRMUywgTlNTLCBTZWN1cmUgVHJhbnNwb3J0LCBvciBNaWNyb3NvZnQKLSAgV2luZG93cyBsaWJyYXJpZXMgYXQgYnVpbGQtdGltZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgTlRMTSBzdXBwb3J0IHJlcXVpcmVzIE9wZW5TU0wsIEdudVRMUywgbWJlZFRMUywgTlNTLCBTZWN1cmUgVHJhbnNwb3J0LCBvcgorICBNaWNyb3NvZnQgV2luZG93cyBsaWJyYXJpZXMgYXQgYnVpbGQtdGltZSB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KIAogICBOVExNIGlzIGEgTWljcm9zb2Z0IHByb3ByaWV0YXJ5IHByb3RvY29sLiBQcm9wcmlldGFyeSBmb3JtYXRzIGFyZSBldmlsLiBZb3UKICAgc2hvdWxkIG5vdCB1c2Ugc3VjaCBvbmVzLgpAQCAtMTA4MywxOCArMTA4MywxOCBAQAogCiAgIDQuMTggZmlsZTovLyBVUkxzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyAoV2luZG93cywgTmV0V2FyZSkKIAotICBXaGVuIHVzaW5nIGNVUkwgdG8gdHJ5IHRvIGRvd25sb2FkIGEgbG9jYWwgZmlsZSwgb25lIG1pZ2h0IHVzZSBhIFVSTAorICBXaGVuIHVzaW5nIGN1cmwgdG8gdHJ5IHRvIGRvd25sb2FkIGEgbG9jYWwgZmlsZSwgb25lIG1pZ2h0IHVzZSBhIFVSTAogICBpbiB0aGlzIGZvcm1hdDoKIAogICBmaWxlOi8vRDovYmxhaC50eHQKIAotICBZb3UnbGwgZmluZCB0aGF0IGV2ZW4gaWYgRDpcYmxhaC50eHQgZG9lcyBleGlzdCwgY1VSTCByZXR1cm5zIGEgJ2ZpbGUKKyAgWW91J2xsIGZpbmQgdGhhdCBldmVuIGlmIEQ6XGJsYWgudHh0IGRvZXMgZXhpc3QsIGN1cmwgcmV0dXJucyBhICdmaWxlCiAgIG5vdCBmb3VuZCcgZXJyb3IuCiAKICAgQWNjb3JkaW5nIHRvIFJGQyAxNzM4IChodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTczOC50eHQpLAogICBmaWxlOi8vIFVSTHMgbXVzdCBjb250YWluIGEgaG9zdCBjb21wb25lbnQsIGJ1dCBpdCBpcyBpZ25vcmVkIGJ5CiAgIG1vc3QgaW1wbGVtZW50YXRpb25zLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgJ0Q6JyBpcyB0cmVhdGVkIGFzIHRoZQotICBob3N0IGNvbXBvbmVudCwgYW5kIGlzIHRha2VuIGF3YXkuIFRodXMsIGNVUkwgdHJpZXMgdG8gb3BlbiAnL2JsYWgudHh0Jy4KKyAgaG9zdCBjb21wb25lbnQsIGFuZCBpcyB0YWtlbiBhd2F5LiBUaHVzLCBjdXJsIHRyaWVzIHRvIG9wZW4gJy9ibGFoLnR4dCcuCiAgIElmIHlvdXIgc3lzdGVtIGlzIGluc3RhbGxlZCB0byBkcml2ZSBDOiwgdGhhdCB3aWxsIHJlc29sdmUgdG8gJ0M6XGJsYWgudHh0JywKICAgYW5kIGlmIHRoYXQgZG9lc24ndCBleGlzdCB5b3Ugd2lsbCBnZXQgdGhlIG5vdCBmb3VuZCBlcnJvci4KIApAQCAtMTEwNyw5ICsxMTA3LDkgQEAKIAogICBmaWxlOi8vbG9jYWxob3N0L0Q6L2JsYWgudHh0CiAKLSAgSW4gZWl0aGVyIGNhc2UsIGNVUkwgc2hvdWxkIG5vdyBiZSBsb29raW5nIGZvciB0aGUgY29ycmVjdCBmaWxlLgorICBJbiBlaXRoZXIgY2FzZSwgY3VybCBzaG91bGQgbm93IGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JyZWN0IGZpbGUuCiAKLSAgNC4xOSBXaHkgZG9lc24ndCBjVVJMIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KKyAgNC4xOSBXaHkgZG9lc24ndCBjdXJsIHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBuZXR3b3JrIGNhYmxlIGlzIHVucGx1Z2dlZD8KIAogICBVbnBsdWdnaW5nIGEgY2FibGUgaXMgbm90IGFuIGVycm9yIHNpdHVhdGlvbi4gVGhlIFRDUC9JUCBwcm90b2NvbCBzdGFjawogICB3YXMgZGVzaWduZWQgdG8gYmUgZmF1bHQgdG9sZXJhbnQsIHNvIGV2ZW4gdGhvdWdoIHRoZXJlIG1heSBiZSBhIHBoeXNpY2FsCkBAIC0xMzg1LDE0ICsxMzg1LDE0IEBACiAgIG1lbWJlciBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCBhIHBvaW50ZXIgdG8gdGhlIGNsYXNzOgogCiAgICAgIC8vIGYgaXMgdGhlIHBvaW50ZXIgdG8geW91ciBvYmplY3QuCi0gICAgIHN0YXRpYyBZb3VyQ2xhc3M6OmZ1bmModm9pZCAqYnVmZmVyLCBzaXplX3Qgc3osIHNpemVfdCBuLCB2b2lkICpmKQorICAgICBzdGF0aWMgc2l6ZV90IFlvdXJDbGFzczo6ZnVuYyh2b2lkICpidWZmZXIsIHNpemVfdCBzeiwgc2l6ZV90IG4sIHZvaWQgKmYpCiAgICAgIHsKICAgICAgICAvLyBDYWxsIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgogICAgICAgIHN0YXRpY19jYXN0PFlvdXJDbGFzcyo+KGYpLT5ub25TdGF0aWNGdW5jdGlvbigpOwogICAgICB9CiAKICAgICAgLy8gVGhpcyBpcyBob3cgeW91IHBhc3MgcG9pbnRlciB0byB0aGUgc3RhdGljIGZ1bmN0aW9uOgotICAgICBjdXJsX2Vhc3lfc2V0b3B0KGhjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIFlvdXJDbGFzczpmdW5jKTsKKyAgICAgY3VybF9lYXN5X3NldG9wdChoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBZb3VyQ2xhc3M6OmZ1bmMpOwogICAgICBjdXJsX2Vhc3lfc2V0b3B0KGhjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7CiAKICAgNS4xNSBIb3cgZG8gSSBnZXQgYW4gRlRQIGRpcmVjdG9yeSBsaXN0aW5nPwpkaWZmIC0tZ2l0IGEvZG9jcy9GRUFUVVJFUyBiL2RvY3MvRkVBVFVSRVMKaW5kZXggMTBmYmRkNS4uMjRmYTU2ZCAxMDA2NDQKLS0tIGEvZG9jcy9GRUFUVVJFUworKysgYi9kb2NzL0ZFQVRVUkVTCkBAIC0xOTUsOCArMTk1LDggQEAKICAgKjcgPSByZXF1aXJlcyBPcGVuU1NMLCBOU1MsIEdTS2l0LCBXaW5TU0wgb3IgU2VjdXJlIFRyYW5zcG9ydDsgR251VExTLCBmb3IKICAgICAgICBleGFtcGxlLCBvbmx5IHN1cHBvcnRzIFNTTHYzIGFuZCBUTFN2MQogICAqOCA9IHJlcXVpcmVzIGxpYnNzaDIKLSAgKjkgPSByZXF1aXJlcyBPcGVuU1NMLCBHbnVUTFMsIE5TUywgeWFzc2wsIFNlY3VyZSBUcmFuc3BvcnQgb3IgU1NQSSAobmF0aXZlCi0gICAgICAgV2luZG93cykKKyAgKjkgPSByZXF1aXJlcyBPcGVuU1NMLCBHbnVUTFMsIG1iZWRUTFMsIE5TUywgeWFzc2wsIFNlY3VyZSBUcmFuc3BvcnQgb3IgU1NQSQorICAgICAgIChuYXRpdmUgV2luZG93cykKICAgKjEwID0gcmVxdWlyZXMgYW55IG9mIHRoZSBTU0wgbGlicmFyaWVzIGluICgqMSkgYWJvdmUgb3RoZXIgdGhhbiBheFRMUywgd2hpY2gKICAgICAgICAgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MwogICAqMTEgPSByZXF1aXJlcyBsaWJpZG4gb3IgV2luZG93cwpkaWZmIC0tZ2l0IGEvZG9jcy9ISVNUT1JZIGIvZG9jcy9ISVNUT1JZLm1kCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRvY3MvSElTVE9SWQpyZW5hbWUgdG8gZG9jcy9ISVNUT1JZLm1kCmluZGV4IGY4NzhlZTEuLmFjOTNiNjcgMTAwNjQ0Ci0tLSBhL2RvY3MvSElTVE9SWQorKysgYi9kb2NzL0hJU1RPUlkubWQKQEAgLTEsMTAgKzEsNCBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLQotSG93IGNVUkwgQmVjYW1lIExpa2UgVGhpcworSG93IGN1cmwgQmVjYW1lIExpa2UgVGhpcwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUb3dhcmRzIHRoZSBlbmQgb2YgMTk5NiwgRGFuaWVsIFN0ZW5iZXJnIHdhcyBzcGVuZGluZyB0aW1lIHdyaXRpbmcgYW4gSVJDIGJvdApAQCAtMTc4LDYgKzE3Miw4IEBACiBBcHJpbC4gR251VExTIGNhbiBub3cgb3B0aW9uYWxseSBiZSB1c2VkIGZvciB0aGUgc2VjdXJlIGxheWVyIHdoZW4gY3VybCBpcwogYnVpbHQuCiAKK0FwcmlsOiBBZGRlZCB0aGUgbXVsdGlfc29ja2V0KCkgQVBJCisKIFNlcHRlbWJlcjogVEZUUCBzdXBwb3J0IHdhcyBhZGRlZC4KIAogTW9yZSB0aGFuIDEwMCwwMDAgdW5pcXVlIHZpc2l0b3JzIG9mIHRoZSBjdXJsIHdlYiBzaXRlLiAyNSBtaXJyb3JzLgpAQCAtMTkzLDggKzE4OSw2IEBACiAKIE1hcmNoOiBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBsaWJjdXJsIFRGVFAgUGFja2V0IEJ1ZmZlciBPdmVyZmxvdwogCi1BcHJpbDogQWRkZWQgdGhlIG11bHRpX3NvY2tldCgpIEFQSQotCiBTZXB0ZW1iZXI6IFRoZSBtYWpvciBTT05BTUUgbnVtYmVyIGZvciBsaWJjdXJsIHdhcyBidW1wZWQgdG8gNCBkdWUgdG8gdGhlCiByZW1vdmFsIG9mIGZ0cCB0aGlyZCBwYXJ0eSB0cmFuc2ZlciBzdXBwb3J0LgogCmRpZmYgLS1naXQgYS9kb2NzL0hUVFAyLm1kIGIvZG9jcy9IVFRQMi5tZAppbmRleCBjYzVhNWIzLi5lZmJlNjk5IDEwMDY0NAotLS0gYS9kb2NzL0hUVFAyLm1kCisrKyBiL2RvY3MvSFRUUDIubWQKQEAgLTk2LDE4ICs5NiwzMSBAQAogCiBjdXJsIG9mZmVycyB0aGUgYC0taHR0cDJgIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gZW5hYmxlIHVzZSBvZiBIVFRQLzIuCiAKLWN1cmwgb2ZmZXJzIHRoZSBgLS1odHRwMi1wcmlvci1rbm93bGVkZ2VgIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gZW5hYmxlIHVzZSBvZiAKK2N1cmwgb2ZmZXJzIHRoZSBgLS1odHRwMi1wcmlvci1rbm93bGVkZ2VgIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gZW5hYmxlIHVzZSBvZgogSFRUUC8yIHdpdGhvdXQgSFRUUC8xLjEgVXBncmFkZS4KIAogU2luY2UgNy40Ny4wLCB0aGUgY3VybCB0b29sIGVuYWJsZXMgSFRUUC8yIGJ5IGRlZmF1bHQgZm9yIEhUVFBTIGNvbm5lY3Rpb25zLgogCitjdXJsIHRvb2wgbGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBsaW5lIHRvb2wgd29uJ3QgZG8gYW55IEhUVFAvMiBtdWx0aXBsZXhpbmcgZXZlbiB0aG91Z2ggbGliY3VybAorc3VwcG9ydHMgaXQsIHNpbXBseSBiZWNhdXNlIHRoZSBjdXJsIHRvb2wgaXMgbm90IHdyaXR0ZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKK3RoZSBsaWJjdXJsIEFQSSB0aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGlzICh0aGUgbXVsdGkgaW50ZXJmYWNlKS4gV2UgaGF2ZSBhbgorb3V0c3RhbmRpbmcgVE9ETyBpdGVtIGZvciB0aGlzIGFuZCAqKnlvdSoqIGNhbiBoZWxwIHVzIG1ha2UgaXQgaGFwcGVuLgorCitUaGUgY29tbWFuZCBsaW5lIHRvb2wgYWxzbyBkb2Vzbid0IHN1cHBvcnQgSFRUUC8yIHNlcnZlciBwdXNoIGZvciB0aGUgc2FtZQorcmVhc29uIGl0IGRvZXNuJ3QgZG8gbXVsdGlwbGV4aW5nOiBpdCBuZWVkcyB0byB1c2UgdGhlIG11bHRpIGludGVyZmFjZSBmb3IKK3RoYXQgc28gdGhhdCBtdWx0aXBsZXhpbmcgaXMgc3VwcG9ydGVkLgorCiBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFsdC1TdmMgaXMgYSBzdWdnZXN0ZWQgZXh0ZW5zaW9uIHdpdGggYSBjb3JyZXNwb25kaW5nIGZyYW1lIChBTFRTVkMpIGluIEhUVFAvMgotdGhhdCB0ZWxscyB0aGUgY2xpZW50IGFib3V0IGFuIGFsdGVybmF0aXZlICJyb3V0ZSIgdG8gdGhlIHNhbWUgY29udGVudCBmb3IgdGhlCi1zYW1lIG9yaWdpbiBzZXJ2ZXIgdGhhdCB5b3UgZ2V0IHRoZSByZXNwb25zZSBmcm9tLiBBIGJyb3dzZXIgb3IgbG9uZy1saXZpbmcKLWNsaWVudCBjYW4gdXNlIHRoYXQgaGludCB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBhc3luY2hyb25vdXNseS4gIEZvcgotbGliY3VybCwgd2UgbWF5IGludHJvZHVjZSBhIHdheSB0byBicmluZyBzdWNoIGNsdWVzIHRvIHRoZSBhcHBsaWNhdG9uIGFuZC9vcgotbGV0IGEgc3Vic2VxdWVudCByZXF1ZXN0IHVzZSB0aGUgYWx0ZXJuYXRlIHJvdXRlCi1hdXRvbWF0aWNhbGx5LiBbU3BlY10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1hbHQtc3ZjLTE0KQorQWx0LVN2YyBpcyBhbiBleHRlbnNpb24gd2l0aCBhIGNvcnJlc3BvbmRpbmcgZnJhbWUgKEFMVFNWQykgaW4gSFRUUC8yIHRoYXQKK3RlbGxzIHRoZSBjbGllbnQgYWJvdXQgYW4gYWx0ZXJuYXRpdmUgInJvdXRlIiB0byB0aGUgc2FtZSBjb250ZW50IGZvciB0aGUgc2FtZQorb3JpZ2luIHNlcnZlciB0aGF0IHlvdSBnZXQgdGhlIHJlc3BvbnNlIGZyb20uIEEgYnJvd3NlciBvciBsb25nLWxpdmluZyBjbGllbnQKK2NhbiB1c2UgdGhhdCBoaW50IHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIGFzeW5jaHJvbm91c2x5LiAgRm9yIGxpYmN1cmwsIHdlCittYXkgaW50cm9kdWNlIGEgd2F5IHRvIGJyaW5nIHN1Y2ggY2x1ZXMgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZC9vciBsZXQgYQorc3Vic2VxdWVudCByZXF1ZXN0IHVzZSB0aGUgYWx0ZXJuYXRlIHJvdXRlIGF1dG9tYXRpY2FsbHkuCisKK1tEZXRhaWxlZCBpbiBSRkMgNzgzOF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc4MzgpCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwgYi9kb2NzL0lOU1RBTEwKaW5kZXggMmUxMDc1Yi4uZmYyNjBiMSAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMCisrKyBiL2RvY3MvSU5TVEFMTApAQCAtNiwxMTEwICs2LDQgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgVG8gQ29tcGlsZQogCi1JbnN0YWxsaW5nIEJpbmFyeSBQYWNrYWdlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgTG90cyBvZiBwZW9wbGUgZG93bmxvYWQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMgb2YgY3VybCBhbmQgbGliY3VybC4gVGhpcwotICAgZG9jdW1lbnQgZG9lcyBub3QgZGVzY3JpYmUgaG93IHRvIGluc3RhbGwgY3VybCBvciBsaWJjdXJsIHVzaW5nIHN1Y2ggYQotICAgYmluYXJ5IHBhY2thZ2UuIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBjb21waWxlLCBidWlsZCBhbmQgaW5zdGFsbAotICAgY3VybCBhbmQgbGliY3VybCBmcm9tIHNvdXJjZSBjb2RlLgotCi1CdWlsZGluZyBmcm9tIGdpdAotPT09PT09PT09PT09PT09PT0KLQotICAgSWYgeW91IGdldCB5b3VyIGNvZGUgb2ZmIGEgZ2l0IHJlcG9zaXRvcnksIHNlZSB0aGUgR0lULUlORk8gZmlsZSBpbiB0aGUKLSAgIHJvb3QgZGlyZWN0b3J5IGZvciBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHByb2NlZWQuCi0KLVVuaXgKLT09PT0KLQotICAgQSBub3JtYWwgVW5peCBpbnN0YWxsYXRpb24gaXMgbWFkZSBpbiB0aHJlZSBvciBmb3VyIHN0ZXBzIChhZnRlciB5b3UndmUKLSAgIHVucGFja2VkIHRoZSBzb3VyY2UgYXJjaGl2ZSk6Ci0KLSAgICAgICAgLi9jb25maWd1cmUKLSAgICAgICAgbWFrZQotICAgICAgICBtYWtlIHRlc3QgKG9wdGlvbmFsKQotICAgICAgICBtYWtlIGluc3RhbGwKLQotICAgWW91IHByb2JhYmx5IG5lZWQgdG8gYmUgcm9vdCB3aGVuIGRvaW5nIHRoZSBsYXN0IGNvbW1hbmQuCi0KLSAgIElmIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZSBzb3VyY2VzIGZyb20gdGhlIGdpdCByZXBvc2l0b3J5LCByZWFkIHRoZQotICAgR0lULUlORk8gb24gaG93IHRvIHByb2NlZWQuCi0KLSAgIEdldCBhIGZ1bGwgbGlzdGluZyBvZiBhbGwgYXZhaWxhYmxlIGNvbmZpZ3VyZSBvcHRpb25zIGJ5IGludm9raW5nIGl0IGxpa2U6Ci0KLSAgICAgICAgLi9jb25maWd1cmUgLS1oZWxwCi0KLSAgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgY3VybCBpbiBhIGRpZmZlcmVudCBmaWxlIGhpZXJhcmNoeSB0aGFuIC91c3IvbG9jYWwsCi0gICB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoYXQgYWxyZWFkeSB3aGVuIHJ1bm5pbmcgY29uZmlndXJlOgotCi0gICAgICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9wYXRoL3RvL2N1cmwvdHJlZQotCi0gICBJZiB5b3UgaGFwcGVuIHRvIGhhdmUgd3JpdGUgcGVybWlzc2lvbiBpbiB0aGF0IGRpcmVjdG9yeSwgeW91IGNhbiBkbyAnbWFrZQotICAgaW5zdGFsbCcgd2l0aG91dCBiZWluZyByb290LiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgdG8gbWFrZSBhIGxvY2FsCi0gICBpbnN0YWxsIGluIHlvdXIgb3duIGhvbWUgZGlyZWN0b3J5OgotCi0gICAgICAgIC4vY29uZmlndXJlIC0tcHJlZml4PSRIT01FCi0gICAgICAgIG1ha2UKLSAgICAgICAgbWFrZSBpbnN0YWxsCi0KLSAgIFRoZSBjb25maWd1cmUgc2NyaXB0IGFsd2F5cyB0cmllcyB0byBmaW5kIGEgd29ya2luZyBTU0wgbGlicmFyeSB1bmxlc3MKLSAgIGV4cGxpY2l0bHkgdG9sZCBub3QgdG8uIElmIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIGluIHRoZSBkZWZhdWx0IHNlYXJjaAotICAgcGF0aCBmb3IgeW91ciBjb21waWxlci9saW5rZXIsIHlvdSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuIElmCi0gICB5b3UgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZCBpbiAvdXNyL2xvY2FsL3NzbCwgeW91IGNhbiBydW4gY29uZmlndXJlIGxpa2U6Ci0KLSAgICAgICAgLi9jb25maWd1cmUgLS13aXRoLXNzbAotCi0gICBJZiB5b3UgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZCBzb21ld2hlcmUgZWxzZSAoZm9yIGV4YW1wbGUsIC9vcHQvT3BlblNTTCkKLSAgIGFuZCB5b3UgaGF2ZSBwa2ctY29uZmlnIGluc3RhbGxlZCwgc2V0IHRoZSBwa2ctY29uZmlnIHBhdGggZmlyc3QsIGxpa2UgdGhpczoKLQotICAgICAgICBlbnYgUEtHX0NPTkZJR19QQVRIPS9vcHQvT3BlblNTTC9saWIvcGtnY29uZmlnIC4vY29uZmlndXJlIC0td2l0aC1zc2wKLQotICAgV2l0aG91dCBwa2ctY29uZmlnIGluc3RhbGxlZCwgdXNlIHRoaXM6Ci0KLSAgICAgICAgLi9jb25maWd1cmUgLS13aXRoLXNzbD0vb3B0L09wZW5TU0wKLQotICAgSWYgeW91IGluc2lzdCBvbiBmb3JjaW5nIGEgYnVpbGQgd2l0aG91dCBTU0wgc3VwcG9ydCwgZXZlbiB0aG91Z2ggeW91IG1heQotICAgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZCBpbiB5b3VyIHN5c3RlbSwgeW91IGNhbiBydW4gY29uZmlndXJlIGxpa2UgdGhpczoKLQotICAgICAgICAuL2NvbmZpZ3VyZSAtLXdpdGhvdXQtc3NsCi0KLSAgIElmIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkLCBidXQgd2l0aCB0aGUgbGlicmFyaWVzIGluIG9uZSBwbGFjZSBhbmQgdGhlCi0gICBoZWFkZXIgZmlsZXMgc29tZXdoZXJlIGVsc2UsIHlvdSBoYXZlIHRvIHNldCB0aGUgTERGTEFHUyBhbmQgQ1BQRkxBR1MKLSAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBwcmlvciB0byBydW5uaW5nIGNvbmZpZ3VyZS4gIFNvbWV0aGluZyBsaWtlIHRoaXMKLSAgIHNob3VsZCB3b3JrOgotCi0gICAgICh3aXRoIHRoZSBCb3VybmUgc2hlbGwgYW5kIGl0cyBjbG9uZXMpOgotCi0gICAgICAgIENQUEZMQUdTPSItSS9wYXRoL3RvL3NzbC9pbmNsdWRlIiBMREZMQUdTPSItTC9wYXRoL3RvL3NzbC9saWIiIFwKLSAgICAgICAgICAgLi9jb25maWd1cmUKLQotICAgICAod2l0aCBjc2gsIHRjc2ggYW5kIHRoZWlyIGNsb25lcyk6Ci0KLSAgICAgICAgZW52IENQUEZMQUdTPSItSS9wYXRoL3RvL3NzbC9pbmNsdWRlIiBMREZMQUdTPSItTC9wYXRoL3RvL3NzbC9saWIiIFwKLSAgICAgICAgICAgLi9jb25maWd1cmUKLQotICAgSWYgeW91IGhhdmUgc2hhcmVkIFNTTCBsaWJzIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSB3aGVyZSB5b3VyIHJ1bi10aW1lCi0gICBsaW5rZXIgZG9lc24ndCBmaW5kIHRoZW0gKHdoaWNoIHVzdWFsbHkgY2F1c2VzIGNvbmZpZ3VyZSBmYWlsdXJlcyksIHlvdSBjYW4KLSAgIHByb3ZpZGUgdGhlIC1SIG9wdGlvbiB0byBsZCBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIHRvIHNldCBhIGhhcmQtY29kZWQKLSAgIHBhdGggdG8gdGhlIHJ1bi10aW1lIGxpbmtlcjoKLQotICAgICAgICBlbnYgTERGTEFHUz0tUi91c3IvbG9jYWwvc3NsL2xpYiAuL2NvbmZpZ3VyZSAtLXdpdGgtc3NsCi0KLSAgIE1PUkUgT1BUSU9OUwotICAgLS0tLS0tLS0tLS0tCi0KLSAgICAgVG8gZm9yY2UgY29uZmlndXJlIHRvIHVzZSB0aGUgc3RhbmRhcmQgY2MgY29tcGlsZXIgaWYgYm90aCBjYyBhbmQgZ2NjIGFyZQotICAgICBwcmVzZW50LCBydW4gY29uZmlndXJlIGxpa2UKLQotICAgICAgIENDPWNjIC4vY29uZmlndXJlCi0gICAgICAgICBvcgotICAgICAgIGVudiBDQz1jYyAuL2NvbmZpZ3VyZQotCi0gICAgIFRvIGZvcmNlIGEgc3RhdGljIGxpYnJhcnkgY29tcGlsZSwgZGlzYWJsZSB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAgYnkgcnVubmluZyBjb25maWd1cmUgbGlrZToKLQotICAgICAgIC4vY29uZmlndXJlIC0tZGlzYWJsZS1zaGFyZWQKLQotICAgICBUbyB0ZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHNraXAgc2VhcmNoaW5nIGZvciB0aHJlYWQtc2FmZSBmdW5jdGlvbnMsCi0gICAgIGFkZCBhbiBvcHRpb24gbGlrZToKLQotICAgICAgIC4vY29uZmlndXJlIC0tZGlzYWJsZS10aHJlYWQKLQotICAgICBJZiB5b3UncmUgYSBjdXJsIGRldmVsb3BlciBhbmQgdXNlIGdjYywgeW91IG1pZ2h0IHdhbnQgdG8gZW5hYmxlIG1vcmUKLSAgICAgZGVidWcgb3B0aW9ucyB3aXRoIHRoZSAtLWVuYWJsZS1kZWJ1ZyBvcHRpb24uCi0KLSAgICAgY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgd2hvbGUgcmFuZ2Ugb2YgbGlicmFyaWVzIHRvIHByb3ZpZGUgdmFyaW91cwotICAgICB1c2VmdWwgc2VydmljZXMsIGFuZCBjb25maWd1cmUgd2lsbCB0cnkgdG8gYXV0by1kZXRlY3QgYSBkZWNlbnQKLSAgICAgZGVmYXVsdC4gQnV0IGlmIHlvdSB3YW50IHRvIGFsdGVyIGl0LCB5b3UgY2FuIHNlbGVjdCBob3cgdG8gZGVhbCB3aXRoCi0gICAgIGVhY2ggaW5kaXZpZHVhbCBsaWJyYXJ5LgotCi0gICAgIFRvIGJ1aWxkIHdpdGggR251VExTIGZvciBTU0wvVExTLCB1c2UgYm90aCAtLXdpdGhvdXQtc3NsIGFuZAotICAgICAtLXdpdGgtZ251dGxzLgotCi0gICAgIFRvIGJ1aWxkIHdpdGggQ3lhc3NsIGZvciBTU0wvVExTLCB1c2UgYm90aCAtLXdpdGhvdXQtc3NsIGFuZAotICAgICAtLXdpdGgtY3lhc3NsLgotCi0gICAgIFRvIGJ1aWxkIHdpdGggTlNTIGZvciBTU0wvVExTLCB1c2UgYm90aCAtLXdpdGhvdXQtc3NsIGFuZCAtLXdpdGgtbnNzLgotCi0gICAgIFRvIGJ1aWxkIHdpdGggUG9sYXJTU0wgZm9yIFNTTC9UTFMsIHVzZSBib3RoIC0td2l0aG91dC1zc2wgYW5kCi0gICAgIC0td2l0aC1wb2xhcnNzbC4KLQotICAgICBUbyBidWlsZCB3aXRoIGF4VExTIGZvciBTU0wvVExTLCB1c2UgYm90aCAtLXdpdGhvdXQtc3NsIGFuZCAtLXdpdGgtYXh0bHMuCi0KLSAgICAgVG8gYnVpbGQgd2l0aCBHU1MtQVBJIHN1cHBvcnQsIHVzZSAtLXdpdGgtZ3NzYXBpIGFuZCBoYXZlIHRoZSBNSVQgS2VyYmVyb3MKLSAgICAgb3IgSGVpbWRhbCBwYWNrYWdlcyBpbnN0YWxsZWQuCi0KLSAgICAgVG8gZ2V0IHN1cHBvcnQgZm9yIFNDUCBhbmQgU0ZUUCwgYnVpbGQgd2l0aCAtLXdpdGgtbGlic3NoMiBhbmQgaGF2ZQotICAgICBsaWJzc2gyIDAuMTYgb3IgbGF0ZXIgaW5zdGFsbGVkLgotCi0gICAgIFRvIGdldCBNZXRhbGluayBzdXBwb3J0LCBidWlsZCB3aXRoIC0td2l0aC1saWJtZXRhbGluayBhbmQgaGF2ZSB0aGUKLSAgICAgbGlibWV0YWxpbmsgcGFja2FnZXMgaW5zdGFsbGVkLgotCi0gICBTUEVDSUFMIENBU0VTCi0gICAtLS0tLS0tLS0tLS0tCi0KLSAgIFNvbWUgdmVyc2lvbnMgb2YgdUNsaWJjIHJlcXVpcmUgY29uZmlndXJpbmcgd2l0aCBDUFBGTEFHUz0tRF9HTlVfU09VUkNFPTEKLSAgIHRvIGdldCBjb3JyZWN0IGxhcmdlIGZpbGUgc3VwcG9ydC4KLQotICAgVGhlIE9wZW4gV2F0Y29tIEMgY29tcGlsZXIgb24gTGludXggcmVxdWlyZXMgY29uZmlndXJpbmcgd2l0aCB0aGUgdmFyaWFibGVzOgotCi0gICAgICAgLi9jb25maWd1cmUgQ0M9b3djYyBBUj0iJFdBVENPTS9iaW5sL3dsaWIiIEFSX0ZMQUdTPS1xIFwKLSAgICAgICAgICAgUkFOTElCPS9iaW4vdHJ1ZSBTVFJJUD0iJFdBVENPTS9iaW5sL3dzdHJpcCIgQ0ZMQUdTPS1XZXh0cmEKLQotV2luMzIKLT09PT09Ci0KLSAgIEJ1aWxkaW5nIFdpbmRvd3MgRExMcyBhbmQgQyBydW4tdGltZSAoQ1JUKSBsaW5rYWdlIGlzc3VlcwotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIEFzIGEgZ2VuZXJhbCBydWxlLCBidWlsZGluZyBhIERMTCB3aXRoIHN0YXRpYyBDUlQgbGlua2FnZSBpcyBoaWdobHkKLSAgIGRpc2NvdXJhZ2VkLCBhbmQgaW50ZXJtaXhpbmcgQ1JUcyBpbiB0aGUgc2FtZSBhcHAgaXMgc29tZXRoaW5nIHRvCi0gICBhdm9pZCBhdCBhbnkgY29zdC4KLQotICAgUmVhZGluZyBhbmQgY29tcHJlaGVuc2lvbiBvZiBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZXMKLSAgIEtCOTQyNDggYW5kIEtCMTQwNTg0IGlzIGEgbXVzdCBmb3IgYW55IFdpbmRvd3MgZGV2ZWxvcGVyLiBFc3BlY2lhbGx5Ci0gICBpbXBvcnRhbnQgaXMgZnVsbCB1bmRlcnN0YW5kaW5nIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIGZvbGxvdyB0aGUKLSAgIGFkdmljZSBnaXZlbiBhYm92ZS4KLQotICAgS0I5NDI0OCAgLSBIb3cgVG8gVXNlIHRoZSBDIFJ1bi1UaW1lCi0gICAgICAgICAgICAgIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzk0MjQ4L2VuLXVzCi0KLSAgIEtCMTQwNTg0IC0gSG93IHRvIGxpbmsgd2l0aCB0aGUgY29ycmVjdCBDIFJ1bi1UaW1lIChDUlQpIGxpYnJhcnkKLSAgICAgICAgICAgICAgaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvMTQwNTg0L2VuLXVzCi0KLSAgIEtCMTkwNzk5IC0gUG90ZW50aWFsIEVycm9ycyBQYXNzaW5nIENSVCBPYmplY3RzIEFjcm9zcyBETEwgQm91bmRhcmllcwotICAgICAgICAgICAgICBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMjM1NDYwCi0KLSAgIElmIHlvdXIgYXBwIGlzIG1pc2JlaGF2aW5nIGluIHNvbWUgc3RyYW5nZSB3YXksIG9yIGl0IGlzIHN1ZmZlcmluZwotICAgZnJvbSBtZW1vcnkgY29ycnVwdGlvbiwgYmVmb3JlIGFza2luZyBmb3IgZnVydGhlciBoZWxwLCBwbGVhc2UgdHJ5Ci0gICBmaXJzdCB0byByZWJ1aWxkIGV2ZXJ5IHNpbmdsZSBsaWJyYXJ5IHlvdXIgYXBwIHVzZXMgYXMgd2VsbCBhcyB5b3VyCi0gICBhcHAgdXNpbmcgdGhlIGRlYnVnIG11bHRpdGhyZWFkZWQgZHluYW1pYyBDIHJ1bnRpbWUuCi0KLSAgIElmIHlvdSBnZXQgbGlua2FnZSBlcnJvcnMgcmVhZCBzZWN0aW9uIDUuNyBvZiB0aGUgRkFRIGRvY3VtZW50LgotCi0gICBNaW5nVzMyCi0gICAtLS0tLS0tCi0KLSAgIE1ha2Ugc3VyZSB0aGF0IE1pbkdXMzIncyBiaW4gZGlyIGlzIGluIHRoZSBzZWFyY2ggcGF0aCwgZm9yIGV4YW1wbGU6Ci0KLSAgICAgc2V0IFBBVEg9YzpcbWluZ3czMlxiaW47JVBBVEglCi0KLSAgIHRoZW4gcnVuICdtaW5ndzMyLW1ha2UgbWluZ3czMicgaW4gdGhlIHJvb3QgZGlyLiBUaGVyZSBhcmUgb3RoZXIKLSAgIG1ha2UgdGFyZ2V0cyBhdmFpbGFibGUgdG8gYnVpbGQgbGliY3VybCB3aXRoIG1vcmUgZmVhdHVyZXMsIHVzZToKLSAgICdtaW5ndzMyLW1ha2UgbWluZ3czMi16bGliJyB0byBidWlsZCB3aXRoIFpsaWIgc3VwcG9ydDsKLSAgICdtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2wtemxpYicgdG8gYnVpbGQgd2l0aCBTU0wgYW5kIFpsaWIgZW5hYmxlZDsKLSAgICdtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2gyLXNzbC16bGliJyB0byBidWlsZCB3aXRoIFNTSDIsIFNTTCwgWmxpYjsKLSAgICdtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2gyLXNzbC1zc3BpLXpsaWInIHRvIGJ1aWxkIHdpdGggU1NIMiwgU1NMLCBabGliCi0gICBhbmQgU1NQSSBzdXBwb3J0LgotCi0gICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgbGlua2luZyBsaWJyYXJpZXMgb3IgZmluZGluZyBoZWFkZXIgZmlsZXMsIGJlIHN1cmUKLSAgIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCAiTWFrZWZpbGUubTMyIiBmaWxlcyB1c2UgdGhlIHByb3BlciBwYXRocywgYW5kCi0gICBhZGp1c3QgYXMgbmVjZXNzYXJ5LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZXNlIHBhdGhzIHdpdGgKLSAgIGVudmlyb25tZW50IHZhcmlhYmxlcywgZm9yIGV4YW1wbGU6Ci0KLSAgICAgc2V0IFpMSUJfUEFUSD1jOlx6bGliLTEuMi44Ci0gICAgIHNldCBPUEVOU1NMX1BBVEg9Yzpcb3BlbnNzbC0xLjAuMmMKLSAgICAgc2V0IExJQlNTSDJfUEFUSD1jOlxsaWJzc2gyLTEuNi4wCi0KLSAgIEFUVEVOVElPTjogaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBsaWJzc2gyIHN1cHBvcnQgeW91IGhhdmUgdG8gdXNlIGxhdGVzdAotICAgdmVyc2lvbiAwLjE3IC0gcHJldmlvdXMgdmVyc2lvbnMgd2lsbCBOT1Qgd29yayB3aXRoIDcuMTcuMCBhbmQgbGF0ZXIhCi0gICBVc2UgJ21pbmd3MzItbWFrZSBtaW5ndzMyLXNzaDItc3NsLXpsaWInIHRvIGJ1aWxkIHdpdGggU1NIMiBhbmQgU1NMIGVuYWJsZWQuCi0KLSAgIEl0IGlzIG5vdyBhbHNvIHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggb3RoZXIgTERBUCBTREtzIHRoYW4gTVMgTERBUDsKLSAgIGN1cnJlbnRseSBpdCBpcyBwb3NzaWJsZSB0byBidWlsZCB3aXRoIG5hdGl2ZSBXaW4zMiBPcGVuTERBUCwgb3Igd2l0aCB0aGUKLSAgIE5vdmVsbCBDTERBUCBTREsuIElmIHlvdSB3YW50IHRvIHVzZSB0aGVzZSB5b3UgbmVlZCB0byBzZXQgdGhlc2UgdmFyczoKLQotICAgICBzZXQgTERBUF9TREs9Yzpcb3BlbmxkYXAKLSAgICAgc2V0IFVTRV9MREFQX09QRU5MREFQPTEKLQotICAgb3IgZm9yIHVzaW5nIHRoZSBOb3ZlbGwgU0RLOgotCi0gICAgIHNldCBVU0VfTERBUF9OT1ZFTEw9MQotCi0gICBJZiB5b3Ugd2FudCB0byBlbmFibGUgTERBUFMgc3VwcG9ydCB0aGVuIHNldCBMREFQUz0xLgotCi0gICAtIG9wdGlvbmFsIE1pbmdXMzItYnVpbHQgT3BlbkxEQVAgU0RLIGF2YWlsYWJsZSBmcm9tOgotICAgICBodHRwOi8vd3d3LmdrbncubmV0L21pcnJvci9vcGVubGRhcC8KLSAgIC0gb3B0aW9uYWwgcmVjZW50IE5vdmVsbCBDTERBUCBTREsgYXZhaWxhYmxlIGZyb206Ci0gICAgIGh0dHBzOi8vd3d3Lm5vdmVsbC5jb20vZGV2ZWxvcGVyL25kay9sZGFwX2xpYnJhcmllc19mb3JfYy5odG1sCi0KLSAgIEN5Z3dpbgotICAgLS0tLS0tCi0KLSAgIEFsbW9zdCBpZGVudGljYWwgdG8gdGhlIHVuaXggaW5zdGFsbGF0aW9uLiBSdW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaW4gdGhlCi0gICBjdXJsIHJvb3Qgd2l0aCAnc2ggY29uZmlndXJlJy4gTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBzaCBleGVjdXRhYmxlIGluCi0gICAvYmluLyBvciB5b3UnbGwgc2VlIHRoZSBjb25maWd1cmUgZmFpbCB0b3dhcmQgdGhlIGVuZC4KLQotICAgUnVuICdtYWtlJwotCi0gICBEZXYtQ3BwCi0gICAtLS0tLS0tCi0KLSAgIFNlZSB0aGUgc2VwYXJhdGUgSU5TVEFMTC5kZXZjcHAgZmlsZSBmb3IgZGV0YWlscy4KLQotICAgTVNWQyA2IGNhdmVhdHMKLSAgIC0tLS0tLS0tLS0tLS0tCi0KLSAgIElmIHlvdSB1c2UgTVNWQyA2IGl0IGlzIHJlcXVpcmVkIHRoYXQgeW91IHVzZSB0aGUgRmVicnVhcnkgMjAwMyBlZGl0aW9uIG9mCi0gICB0aGUgJ1BsYXRmb3JtIFNESycgd2hpY2ggY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKLQotICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG9hZC9kZXRhaWxzLmFzcHg/aWQ9MTIyNjEKLQotICAgQnVpbGRpbmcgYW55IHNvZnR3YXJlIHdpdGggTVNWQyA2IHdpdGhvdXQgaGF2aW5nIFBTREsgaW5zdGFsbGVkIGlzIGp1c3QKLSAgIGFza2luZyBmb3IgdHJvdWJsZSBkb3duIHRoZSByb2FkIG9uY2UgeW91IGhhdmUgcmVsZWFzZWQgaXQsIHlvdSBtaWdodCBub3RpY2UKLSAgIHRoZSBwcm9ibGVtcyBpbiB0aGUgZmlyc3QgY29ybmVyIG9yIHRlbiBtaWxlcyBhaGVhZCwgZGVwZW5kaW5nIG1vc3RseSBvbiB5b3VyCi0gICBjaG9pY2Ugb2Ygc3RhdGljIHZzIGR5bmFtaWMgcnVudGltZSBhbmQgdGhpcmQgcGFydHkgbGlicmFyaWVzLiBBbnlvbmUgdXNpbmcKLSAgIHNvZnR3YXJlIGJ1aWx0IGluIHN1Y2ggd2F5IHdpbGwgYXQgc29tZSBwb2ludCByZWdyZXQgaGF2aW5nIGRvbmUgc28uCi0KLSAgIElmIHRoZSBjb21waWxlciBoYXMgYmVlbiB1cGRhdGVkIHdpdGggdGhlIGluc3RhbGxhdGlvbiBvZiBhIHNlcnZpY2UgcGFjayBhcwotICAgdGhvc2UgbWVudGlvbmVkIGluIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzE5NDAyMiB0aGUgY29tcGlsZXIgY2FuIGJlCi0gICBzYWZlbHkgdXNlZCB0byByZWFkIHNvdXJjZSBjb2RlLCB0cmFuc2xhdGUgYW5kIG1ha2UgaXQgb2JqZWN0IGNvZGUuCi0KLSAgIEJ1dCwgZXZlbiB3aXRoIHRoZSBzZXJ2aWNlIHBhY2tzIG1lbnRpb25lZCBhYm92ZSBpbnN0YWxsZWQsIHRoZSByZXN1bHRpbmcKLSAgIHNvZnR3YXJlIGdlbmVyYXRlZCBpbiBzdWNoIGFuIGVudmlyb25tZW50IHdpbGwgYmUgdXNpbmcgb3V0ZGF0ZWQgc3lzdGVtCi0gICBoZWFkZXIgZmlsZXMgYW5kIGxpYnJhcmllcyB3aXRoIGJ1Z3MgYW5kIHNlY3VyaXR5IGlzc3VlcyB3aGljaCBoYXZlIGFscmVhZHkKLSAgIGJlZW4gYWRkcmVzc2VkIGFuZCBmaXhlZCBsb25nIHRpbWUgYWdvLgotCi0gICBTbywgYnVpbGRpbmcgY3VybCBhbmQgbGliY3VybCB3aXRoIE1TVkMgNiB3aXRob3V0IFBTREsgaXMgYWJzb2x1dGVseQotICAgZGlzY291cmFnZWQgZm9yIHRoZSBiZW5lZml0IG9mIGFueW9uZSB1c2luZyBzb2Z0d2FyZSBidWlsdCBpbiBzdWNoCi0gICBlbnZpcm9ubWVudC4gQW5kIGl0IHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBhbnkgd2F5LCBhcyB3ZSBjb3VsZCBqdXN0Ci0gICBiZSBodW50aW5nIGJ1Z3Mgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQgd2F5IGJhY2sgaW4gMjAwMy4KLQotICAgV2hlbiBidWlsZGluZyB3aXRoIE1TVkMgNiB3ZSBhdHRlbXB0IHRvIGRldGVjdCBpZiBQU0RLIGlzIG5vdCBiZWluZyB1c2VkLAotICAgYW5kIGlmIHRoaXMgaXMgdGhlIGNhc2UgdGhlIGJ1aWxkIHByb2Nlc3Mgd2lsbCBmYWlsIGhhcmQgd2l0aCBhbiBlcnJvcgotICAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgdGhlIEZlYnJ1YXJ5IDIwMDMgUFNESyBpcyByZXF1aXJlZC4gVGhpcyBpcyBkb25lIHRvCi0gICBwcm90ZWN0IHRoZSB1bnN1c3BlY3RpbmcgYW5kIGF2b2lkIFBFQktBQyBpc3N1ZXMuCi0KLSAgIEFkZGl0aW9uYWxseSBpdCBtaWdodCBoYXBwZW4gdGhhdCBhIGRpZSBoYXJkIE1TVkMgaGFja2VyIHN0aWxsIHdhbnRzIHRvCi0gICBidWlsZCBjdXJsIGFuZCBsaWJjdXJsIHdpdGggTVNWQyA2IHdpdGhvdXQgUFNESyBpbnN0YWxsZWQsIGV2ZW4ga25vd2luZwotICAgdGhhdCB0aGlzIGlzIGEgaGlnaGx5IGRpc2NvdXJhZ2VkIGFuZCB1bnN1cHBvcnRlZCBidWlsZCBlbnZpcm9ubWVudC4gSW4KLSAgIHRoaXMgY2FzZSB0aGUgYnJhdmUgb2YgaGVhcnQgd2lsbCBiZSBhYmxlIHRvIGJ1aWxkIGluIHN1Y2ggYW4gZW52aXJvbm1lbnQKLSAgIHdpdGggdGhlIHJlcXVpc2l0ZSBvZiBkZWZpbmluZyBwcmVwcm9jZXNzb3Igc3ltYm9sIEFMTE9XX01TVkM2X1dJVEhPVVRfUFNESwotICAgaW4gbGliL2NvbmZpZy13aW4zMi5oIGFuZCBrbm93aW5nIHRoYXQgTERBUCBhbmQgSVB2NiBzdXBwb3J0IHdpbGwgYmUgbWlzc2luZy4KLQotICAgTVNWQyBmcm9tIGNvbW1hbmQgbGluZQotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICBSdW4gdGhlICd2Y3ZhcnMzMi5iYXQnIGZpbGUgdG8gZ2V0IGEgcHJvcGVyIGVudmlyb25tZW50LiBUaGUKLSAgIHZjdmFyczMyLmJhdCBmaWxlIGlzIHBhcnQgb2YgdGhlIE1pY3Jvc29mdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQKLSAgIHlvdSBtYXkgZmluZCBpdCBpbiAnQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1x2Yzk4XGJpbicKLSAgIHByb3ZpZGVkIHRoYXQgeW91IGluc3RhbGxlZCBWaXN1YWwgQy9DKysgNiBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCi0KLSAgIFRoZW4gcnVuICdubWFrZSB2YycgaW4gY3VybCdzIHJvb3QgZGlyZWN0b3J5LgotCi0gICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHdpdGggemxpYiBzdXBwb3J0LCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkCi0gICB6bGliIChodHRwOi8vd3d3LnpsaWIubmV0LykgYXMgd2VsbC4gUGxlYXNlIHJlYWQgdGhlIHpsaWIKLSAgIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGNvbXBpbGUgemxpYi4gRGVmaW5lIHRoZSBaTElCX1BBVEggZW52aXJvbm1lbnQKLSAgIHZhcmlhYmxlIHRvIHRoZSBsb2NhdGlvbiBvZiB6bGliLmggYW5kIHpsaWIubGliLCBmb3IgZXhhbXBsZToKLQotICAgICBzZXQgWkxJQl9QQVRIPWM6XHpsaWItMS4yLjgKLQotICAgVGhlbiBydW4gJ25tYWtlIHZjLXpsaWInIGluIGN1cmwncyByb290IGRpcmVjdG9yeS4KLQotICAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSB3aXRoIFNTTCBzdXBwb3J0IHlvdSBuZWVkIHRoZSBPcGVuU1NMIHBhY2thZ2UuCi0gICBQbGVhc2UgcmVhZCB0aGUgT3BlblNTTCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBjb21waWxlIGFuZCBpbnN0YWxsCi0gICB0aGUgT3BlblNTTCBsaWJyYXJpZXMuICBUaGUgYnVpbGQgcHJvY2VzcyBvZiBPcGVuU1NMIGdlbmVyYXRlcyB0aGUKLSAgIGxpYmVheTMyLmRsbCBhbmQgc3NsZWF5MzIuZGxsIGZpbGVzIGluIHRoZSBvdXQzMmRsbCBzdWJkaXJlY3RvcnkgaW4KLSAgIHRoZSBPcGVuU1NMIGhvbWUgZGlyZWN0b3J5LiAgT3BlblNTTCBzdGF0aWMgbGlicmFyaWVzIChsaWJlYXkzMi5saWIsCi0gICBzc2xlYXkzMi5saWIsIFJTQWdsdWUubGliKSBhcmUgY3JlYXRlZCBpbiB0aGUgb3V0MzIgc3ViZGlyZWN0b3J5LgotCi0gICBCZWZvcmUgcnVubmluZyBubWFrZSBkZWZpbmUgdGhlIE9QRU5TU0xfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoCi0gICB0aGUgcm9vdC9iYXNlIGRpcmVjdG9yeSBvZiBPcGVuU1NMLCBmb3IgZXhhbXBsZToKLQotICAgICBzZXQgT1BFTlNTTF9QQVRIPWM6XG9wZW5zc2wtMC45Ljh6YwotCi0gICBUaGVuIHJ1biAnbm1ha2UgdmMtc3NsJyBvciAnbm1ha2UgdmMtc3NsLWRsbCcgaW4gY3VybCdzIHJvb3QKLSAgIGRpcmVjdG9yeS4gICdubWFrZSB2Yy1zc2wnIHdpbGwgY3JlYXRlIGEgbGliY3VybCBzdGF0aWMgYW5kIGR5bmFtaWMKLSAgIGxpYnJhcmllcyBpbiB0aGUgbGliIHN1YmRpcmVjdG9yeSwgYXMgd2VsbCBhcyBhIHN0YXRpY2FsbHkgbGlua2VkCi0gICB2ZXJzaW9uIG9mIGN1cmwuZXhlIGluIHRoZSBzcmMgc3ViZGlyZWN0b3J5LiAgVGhpcyBzdGF0aWNhbGx5IGxpbmtlZAotICAgdmVyc2lvbiBpcyBhIHN0YW5kYWxvbmUgZXhlY3V0YWJsZSBub3QgcmVxdWlyaW5nIGFueSBETEwgYXQKLSAgIHJ1bnRpbWUuIFRoaXMgbWFrZSBtZXRob2QgcmVxdWlyZXMgdGhhdCB5b3UgaGF2ZSB0aGUgc3RhdGljIE9wZW5TU0wKLSAgIGxpYnJhcmllcyBhdmFpbGFibGUgaW4gT3BlblNTTCdzIG91dDMyIHN1YmRpcmVjdG9yeS4KLSAgICdubWFrZSB2Yy1zc2wtZGxsJyBjcmVhdGVzIHRoZSBsaWJjdXJsIGR5bmFtaWMgbGlicmFyeSBhbmQKLSAgIGxpbmtzIGN1cmwuZXhlIGFnYWluc3QgbGliY3VybCBhbmQgT3BlblNTTCBkeW5hbWljYWxseS4KLSAgIFRoaXMgZXhlY3V0YWJsZSByZXF1aXJlcyBsaWJjdXJsLmRsbCBhbmQgdGhlIE9wZW5TU0wgRExMcwotICAgYXQgcnVudGltZS4KLSAgIFJ1biAnbm1ha2UgdmMtc3NsLXpsaWInIHRvIGJ1aWxkIHdpdGggYm90aCBzc2wgYW5kIHpsaWIgc3VwcG9ydC4KLQotICAgTVNWQyBJREUKLSAgIC0tLS0tLS0tCi0KLSAgIEEgZmFpcmx5IGNvbXByZWhlbnNpdmUgc2V0IG9mIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBmaWxlcyBhcmUgYXZhaWxhYmxlIGZvcgotICAgdjYuMCB0aHJvdWdoIHYxMi4wIGFuZCBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvamVjdHMgZm9sZGVyIHRvIGFsbG93IHByb3BlcgotICAgYnVpbGRpbmcgb2YgYm90aCB0aGUgbGliY3VybCBsaWJyYXJ5IGFzIHdlbGwgYXMgdGhlIGN1cmwgdG9vbC4KLQotICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgcHJvamVjdHMgYW5kIGJ1aWxkaW5nIHZpYSBWaXN1YWwgU3R1ZGlvCi0gICBwbGVhc2Ugc2VlIHRoZSBSRUFETUUgZmlsZSBsb2NhdGVkIGluIHRoZSBwcm9qZWN0cyBmb2xkZXIuCi0KLSAgIEJvcmxhbmQgQysrIGNvbXBpbGVyCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICBFbnN1cmUgdGhhdCB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIHByb3Blcmx5IHNldCB1cCB0byB1c2UgdGhlIGNvbXBpbGVyCi0gICBhbmQgYXNzb2NpYXRlZCB0b29scy4gUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGluY2x1ZGUgdGhlIHBhdGggdG8KLSAgIGJpbiBzdWJkaXJlY3Rvcnkgb2YgeW91ciBjb21waWxlciBpbnN0YWxsYXRpb24sIGVnOiBjOlxCb3JsYW5kXEJDQzU1XGJpbgotCi0gICBJdCBpcyBhZHZpc2FibGUgdG8gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEJDQ0RJUiB0byB0aGUgYmFzZSBwYXRoIG9mCi0gICB0aGUgY29tcGlsZXIgaW5zdGFsbGF0aW9uLgotCi0gICAgIHNldCBCQ0NESVI9YzpcQm9ybGFuZFxCQ0M1NQotCi0gICBJbiBvcmRlciB0byBidWlsZCBhIHBsYWluIHZhbmlsbGEgdmVyc2lvbiBvZiBjdXJsIGFuZCBsaWJjdXJsIHJ1biB0aGUKLSAgIGZvbGxvd2luZyBjb21tYW5kIGZyb20gY3VybCdzIHJvb3QgZGlyZWN0b3J5OgotCi0gICAgIG1ha2UgYm9ybGFuZAotCi0gICBUbyBidWlsZCBjdXJsIGFuZCBsaWJjdXJsIHdpdGggemxpYiBhbmQgT3BlblNTTCBzdXBwb3J0IHNldCBlbnZpcm9ubWVudAotICAgdmFyaWFibGVzIFpMSUJfUEFUSCBhbmQgT1BFTlNTTF9QQVRIIHRvIHRoZSBiYXNlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZQotICAgYWxyZWFkeSBidWlsdCB6bGliIGFuZCBPcGVuU1NMIGxpYnJhcmllcyBhbmQgZnJvbSBjdXJsJ3Mgcm9vdCBkaXJlY3RvcnkKLSAgIHJ1biBjb21tYW5kOgotCi0gICAgIG1ha2UgYm9ybGFuZC1zc2wtemxpYgotCi0gICBsaWJjdXJsIGxpYnJhcnkgd2lsbCBiZSBidWlsdCBpbiAnbGliJyBzdWJkaXJlY3Rvcnkgd2hpbGUgY3VybCB0b29sCi0gICBpcyBidWlsdCBpbiAnc3JjJyBzdWJkaXJlY3RvcnkuIEluIG9yZGVyIHRvIHVzZSBsaWJjdXJsIGxpYnJhcnkgaXQgaXMKLSAgIGFkdmlzYWJsZSB0byBtb2RpZnkgY29tcGlsZXIncyBjb25maWd1cmF0aW9uIGZpbGUgYmNjMzIuY2ZnIGxvY2F0ZWQKLSAgIGluIGM6XEJvcmxhbmRcQkNDNTVcYmluIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mIGxpYnJhcmllcyBpbmNsdWRlCi0gICBwYXRocyBmb3IgZXhhbXBsZSB0aGUgJy1JJyBsaW5lIGNvdWxkIHJlc3VsdCBpbiBzb21ldGhpbmcgbGlrZToKLQotICAgICAtSSJjOlxCb3JsYW5kXEJDQzU1XGluY2x1ZGU7YzpcY3VybFxpbmNsdWRlO2M6XG9wZW5zc2xcaW5jMzIiCi0KLSAgIGJjYzMuY2ZnICctTCcgbGluZSBjb3VsZCBhbHNvIGJlIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mCi0gICBvZiBsaWJjdXJsIGxpYnJhcnkgcmVzdWx0aW5nIGZvciBleGFtcGxlOgotCi0gICAgIC1MImM6XEJvcmxhbmRcQkNDNTVcbGliO2M6XGN1cmxcbGliO2M6XG9wZW5zc2xcb3V0MzIiCi0KLSAgIEluIG9yZGVyIHRvIGJ1aWxkIHNhbXBsZSBwcm9ncmFtICdzaW1wbGUuYycgZnJvbSB0aGUgZG9jc1xleGFtcGxlcwotICAgc3ViZGlyZWN0b3J5IHJ1biBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIG1lbnRpb25lZCBzdWJkaXJlY3Rvcnk6Ci0KLSAgICAgYmNjMzIgc2ltcGxlLmMgbGliY3VybC5saWIgY3czMm10LmxpYgotCi0gICBJbiBvcmRlciB0byBidWlsZCBzYW1wbGUgcHJvZ3JhbSBzaW1wbGVzc2wuYyBhbiBTU0wgZW5hYmxlZCBsaWJjdXJsCi0gICBpcyByZXF1aXJlZCwgYXMgd2VsbCBhcyB0aGUgT3BlblNTTCBsaWJlYXkzMi5saWIgYW5kIHNzbGVheTMyLmxpYgotICAgbGlicmFyaWVzLgotCi0gICBPVEhFUiBNU1ZDIElERXMKLSAgIC0tLS0tLS0tLS0tLS0tLQotCi0gICBJZiB5b3UgdXNlIFZDKyssIEJvcmxhbmQgb3Igc2ltaWxhciBjb21waWxlcnMuIEluY2x1ZGUgYWxsIGxpYiBzb3VyY2UKLSAgIGZpbGVzIGluIGEgc3RhdGljIGxpYiAicHJvamVjdCIgKGFsbCAuYyBhbmQgLmggZmlsZXMgdGhhdCBpcykuCi0gICAoeW91IHNob3VsZCBuYW1lIGl0IGxpYmN1cmwgb3Igc2ltaWxhcikKLQotICAgTWFrZSB0aGUgc291cmNlcyBpbiB0aGUgc3JjLyBkcmF3ZXIgYmUgYSAid2luMzIgY29uc29sZSBhcHBsaWNhdGlvbiIKLSAgIHByb2plY3QuIE5hbWUgaXQgY3VybC4KLQotICAgRGlzYWJsaW5nIFNwZWNpZmljIFByb3RvY29scyBpbiBXaW4zMiBidWlsZHMKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBjb25maWd1cmUgdXRpbGl0eSwgdW5mb3J0dW5hdGVseSwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFdpbmRvd3MKLSAgIGVudmlyb25tZW50LCB0aGVyZWZvcmUsIHlvdSBjYW5ub3QgdXNlIHRoZSB2YXJpb3VzIGRpc2FibGUtcHJvdG9jb2wKLSAgIG9wdGlvbnMgb2YgdGhlIGNvbmZpZ3VyZSB1dGlsaXR5IG9uIHRoaXMgcGxhdGZvcm0uCi0KLSAgIEhvd2V2ZXIsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0byBkaXNhYmxlIHNwZWNpZmljCi0gICBwcm90b2NvbHM6Ci0KLSAgIEhUVFBfT05MWSAgICAgICAgICAgICBkaXNhYmxlcyBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBIVFRQCi0gICBDVVJMX0RJU0FCTEVfRlRQICAgICAgZGlzYWJsZXMgRlRQCi0gICBDVVJMX0RJU0FCTEVfTERBUCAgICAgZGlzYWJsZXMgTERBUAotICAgQ1VSTF9ESVNBQkxFX1RFTE5FVCAgIGRpc2FibGVzIFRFTE5FVAotICAgQ1VSTF9ESVNBQkxFX0RJQ1QgICAgIGRpc2FibGVzIERJQ1QKLSAgIENVUkxfRElTQUJMRV9GSUxFICAgICBkaXNhYmxlcyBGSUxFCi0gICBDVVJMX0RJU0FCTEVfVEZUUCAgICAgZGlzYWJsZXMgVEZUUAotICAgQ1VSTF9ESVNBQkxFX0hUVFAgICAgIGRpc2FibGVzIEhUVFAKLSAgIENVUkxfRElTQUJMRV9JTUFQICAgICBkaXNhYmxlcyBJTUFQCi0gICBDVVJMX0RJU0FCTEVfUE9QMyAgICAgZGlzYWJsZXMgUE9QMwotICAgQ1VSTF9ESVNBQkxFX1NNVFAgICAgIGRpc2FibGVzIFNNVFAKLQotICAgSWYgeW91IHdhbnQgdG8gc2V0IGFueSBvZiB0aGVzZSBkZWZpbmVzIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLQotICAgLSBNb2RpZnkgbGliL2NvbmZpZy13aW4zMi5oCi0gICAtIE1vZGlmeSBsaWIvY3VybF9zZXR1cC5oCi0gICAtIE1vZGlmeSBsaWIvTWFrZWZpbGUudmM2Ci0gICAtIE1vZGlmeSB0aGUgIlByZXByb2Nlc3NvciBEZWZpbml0aW9ucyIgaW4gdGhlIGxpYmN1cmwgcHJvamVjdAotCi0gICBOb3RlOiBUaGUgcHJlLXByb2Nlc3NvciBzZXR0aW5ncyBjYW4gYmUgZm91bmQgdXNpbmcgdGhlIFZpc3VhbCBTdHVkaW8gSURFCi0gICB1bmRlciAiUHJvamVjdCAtPiBTZXR0aW5ncyAtPiBDL0MrKyAtPiBHZW5lcmFsIiBpbiBWQzYgYW5kICJQcm9qZWN0IC0+Ci0gICBQcm9wZXJ0aWVzIC0+IENvbmZpZ3VyYXRpb24gUHJvcGVydGllcyAtPiBDL0MrKyAtPiBQcmVwcm9jZXNzb3IiIGluIGxhdGVyCi0gICB2ZXJzaW9ucy4KLQotICAgVXNpbmcgQlNELXN0eWxlIGx3SVAgaW5zdGVhZCBvZiBXaW5zb2NrIFRDUC9JUCBzdGFjayBpbiBXaW4zMiBidWlsZHMKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIEluIG9yZGVyIHRvIGNvbXBpbGUgbGliY3VybCBhbmQgY3VybCB1c2luZyBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sKLSAgIGl0IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGRlZmluaXRpb24gb2YgcHJlcHJvY2Vzc29yIHN5bWJvbCBVU0VfTFdJUFNPQ0sKLSAgIHZpc2libGUgdG8gbGliY3VybCBhbmQgY3VybCBjb21waWxhdGlvbiBwcm9jZXNzZXMuIFRvIHNldCB0aGlzIGRlZmluaXRpb24KLSAgIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzOgotCi0gICAtIE1vZGlmeSBsaWIvY29uZmlnLXdpbjMyLmggYW5kIHNyYy9jb25maWctd2luMzIuaAotICAgLSBNb2RpZnkgbGliL01ha2VmaWxlLnZjNgotICAgLSBNb2RpZnkgdGhlICJQcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMiIGluIHRoZSBsaWJjdXJsIHByb2plY3QKLQotICAgTm90ZTogVGhlIHByZS1wcm9jZXNzb3Igc2V0dGluZ3MgY2FuIGJlIGZvdW5kIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERQotICAgdW5kZXIgIlByb2plY3QgLT4gU2V0dGluZ3MgLT4gQy9DKysgLT4gR2VuZXJhbCIgaW4gVkM2IGFuZCAiUHJvamVjdCAtPgotICAgUHJvcGVydGllcyAtPiBDb25maWd1cmF0aW9uIFByb3BlcnRpZXMgLT4gQy9DKysgLT4gUHJlcHJvY2Vzc29yIiBpbiBsYXRlcgotICAgdmVyc2lvbnMuCi0KLSAgIE9uY2UgdGhhdCBsaWJjdXJsIGhhcyBiZWVuIGJ1aWx0IHdpdGggQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQsCi0gICBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB5b3VyIHByb2dyYW0gaXQgaXMgbWFuZGF0b3J5IHRoYXQgeW91ciBwcm9ncmFtCi0gICBpbmNsdWRlcyBsd0lQIGhlYWRlciBmaWxlIDxsd2lwL29wdC5oPiAob3IgYW5vdGhlciBsd0lQIGhlYWRlciB0aGF0IGluY2x1ZGVzCi0gICB0aGlzKSBiZWZvcmUgaW5jbHVkaW5nIGFueSBsaWJjdXJsIGhlYWRlci4gWW91ciBwcm9ncmFtIGRvZXMgbm90IG5lZWQgdGhlCi0gICBVU0VfTFdJUFNPQ0sgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gd2hpY2ggaXMgZm9yIGxpYmN1cmwgaW50ZXJuYWxzIG9ubHkuCi0KLSAgIENvbXBpbGF0aW9uIGhhcyBiZWVuIHZlcmlmaWVkIHdpdGggbHdJUCAxLjQuMCBhbmQgY29udHJpYi0xLjQuMCBmcm9tOgotCi0gICBodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9sd2lwL2x3aXAtMS40LjAuemlwCi0gICBodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9sd2lwL2NvbnRyaWItMS40LjAuemlwCi0KLSAgIFRoaXMgQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgbXVzdCBiZSBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbAotICAgZ2l2ZW4gdGhhdCBpdCBoYXMgYmVlbiB2ZXJpZmllZCB0aGF0IGx3SVAgMS40LjAgc3RpbGwgbmVlZHMgc29tZSBwb2xpc2gsCi0gICBhbmQgbGliY3VybCBtaWdodCB5ZXQgbmVlZCBzb21lIGFkZGl0aW9uYWwgYWRqdXN0bWVudCwgY2F2ZWF0IGVtcHRvci4KLQotICAgSW1wb3J0YW50IHN0YXRpYyBsaWJjdXJsIHVzYWdlIG5vdGUKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFdoZW4gYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBzdGF0aWMgbGliY3VybCBsaWJyYXJ5LCB5b3UgbXVzdAotICAgYWRkICctRENVUkxfU1RBVElDTElCJyB0byB5b3VyIENGTEFHUy4gIE90aGVyd2lzZSB0aGUgbGlua2VyIHdpbGwgbG9vayBmb3IKLSAgIGR5bmFtaWMgaW1wb3J0IHN5bWJvbHMuCi0KLSAgIExlZ2FjeSBXaW5kb3dzIGFuZCBTU0wKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgV2luU1NMIChzcGVjaWZpY2FsbHkgU0NoYW5uZWwgZnJvbSBXaW5kb3dzIFNTUEkpLCBpcyB0aGUgbmF0aXZlIFNTTCBsaWJyYXJ5Ci0gICBpbiBXaW5kb3dzLiBIb3dldmVyLCBXaW5TU0wgaW4gV2luZG93cyA8PSBYUCBpcyB1bmFibGUgdG8gY29ubmVjdCB0byBzZXJ2ZXJzCi0gICB0aGF0IG5vIGxvbmdlciBzdXBwb3J0IHRoZSBsZWdhY3kgaGFuZHNoYWtlcyBhbmQgYWxnb3JpdGhtcyB1c2VkIGJ5IHRob3NlCi0gICB2ZXJzaW9ucy4gSWYgeW91IHdpbGwgYmUgdXNpbmcgY3VybCBpbiBvbmUgb2YgdGhvc2UgZWFybGllciB2ZXJzaW9ucyBvZgotICAgV2luZG93cyB5b3Ugc2hvdWxkIGNob29zZSBhbm90aGVyIFNTTCBiYWNrZW5kIHN1Y2ggYXMgT3BlblNTTC4KLQotQXBwbGUgaU9TIGFuZCBNYWMgT1MgWAotPT09PT09PT09PT09PT09PT09PT09PQotCi0gICBPbiByZWNlbnQgQXBwbGUgb3BlcmF0aW5nIHN5c3RlbXMsIGN1cmwgY2FuIGJlIGJ1aWx0IHRvIHVzZSBBcHBsZSdzCi0gICBTU0wvVExTIGltcGxlbWVudGF0aW9uLCBTZWN1cmUgVHJhbnNwb3J0LCBpbnN0ZWFkIG9mIE9wZW5TU0wuIFRvIGJ1aWxkIHdpdGgKLSAgIFNlY3VyZSBUcmFuc3BvcnQgZm9yIFNTTC9UTFMsIHVzZSB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtZGFyd2luc3NsLiAoSXQKLSAgIGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlIHRoZSBvcHRpb24gLS13aXRob3V0LXNzbC4pIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBpT1MKLSAgIDUuMCBvciBsYXRlciwgb3IgT1MgWCAxMC41ICgiTGVvcGFyZCIpIG9yIGxhdGVyLgotCi0gICBXaGVuIFNlY3VyZSBUcmFuc3BvcnQgaXMgaW4gdXNlLCB0aGUgY3VybCBvcHRpb25zIC0tY2FjZXJ0IGFuZCAtLWNhcGF0aCBhbmQKLSAgIHRoZWlyIGxpYmN1cmwgZXF1aXZhbGVudHMsIHdpbGwgYmUgaWdub3JlZCwgYmVjYXVzZSBTZWN1cmUgVHJhbnNwb3J0IHVzZXMKLSAgIHRoZSBjZXJ0aWZpY2F0ZXMgc3RvcmVkIGluIHRoZSBLZXljaGFpbiB0byBldmFsdWF0ZSB3aGV0aGVyIG9yIG5vdCB0byB0cnVzdAotICAgdGhlIHNlcnZlci4gVGhpcywgb2YgY291cnNlLCBpbmNsdWRlcyB0aGUgcm9vdCBjZXJ0aWZpY2F0ZXMgdGhhdCBzaGlwIHdpdGgKLSAgIHRoZSBPUy4gVGhlIC0tY2VydCBhbmQgLS1lbmdpbmUgb3B0aW9ucywgYW5kIHRoZWlyIGxpYmN1cmwgZXF1aXZhbGVudHMsIGFyZQotICAgY3VycmVudGx5IHVuaW1wbGVtZW50ZWQgaW4gY3VybCB3aXRoIFNlY3VyZSBUcmFuc3BvcnQuCi0KLSAgIEZvciBPUyBYIHVzZXJzOiBJbiBPUyBYIDEwLjggKCJNb3VudGFpbiBMaW9uIiksIEFwcGxlIG1hZGUgYSBtYWpvcgotICAgb3ZlcmhhdWwgdG8gdGhlIFNlY3VyZSBUcmFuc3BvcnQgQVBJIHRoYXQsIGFtb25nIG90aGVyIHRoaW5ncywgYWRkZWQKLSAgIHN1cHBvcnQgZm9yIHRoZSBuZXdlciBUTFMgMS4xIGFuZCAxLjIgcHJvdG9jb2xzLiBUbyBnZXQgY3VybCB0byBzdXBwb3J0Ci0gICBUTFMgMS4xIGFuZCAxLjIsIHlvdSBtdXN0IGJ1aWxkIGN1cmwgb24gTW91bnRhaW4gTGlvbiBvciBsYXRlciwgb3IgYnkKLSAgIHVzaW5nIHRoZSBlcXVpdmFsZW50IFNESy4gSWYgeW91IHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCi0gICBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIHRvIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBPUyBYIHByaW9yIHRvIGJ1aWxkaW5nIGN1cmwsCi0gICB0aGVuIGN1cmwgd2lsbCB1c2UgdGhlIG5ldyBTZWN1cmUgVHJhbnNwb3J0IEFQSSBvbiBNb3VudGFpbiBMaW9uIGFuZCBsYXRlciwKLSAgIGFuZCBmYWxsIGJhY2sgb24gdGhlIG9sZGVyIEFQSSB3aGVuIHRoZSBzYW1lIGN1cmwgYmluYXJ5IGlzIGV4ZWN1dGVkIG9uCi0gICBvbGRlciBjYXRzLiBGb3IgZXhhbXBsZSwgcnVubmluZyB0aGVzZSBjb21tYW5kcyBpbiBjdXJsJ3MgZGlyZWN0b3J5IGluIHRoZQotICAgc2hlbGwgd2lsbCBidWlsZCB0aGUgY29kZSBzdWNoIHRoYXQgaXQgd2lsbCBydW4gb24gY2F0cyBhcyBvbGQgYXMgT1MgWCAxMC42Ci0gICAoIlNub3cgTGVvcGFyZCIpICh1c2luZyBiYXNoKToKLQotICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iMTAuNiIKLSAgICAgIC4vY29uZmlndXJlIC0td2l0aC1kYXJ3aW5zc2wKLSAgICAgIG1ha2UKLQotSUJNIE9TLzIKLT09PT09PT09Ci0KLSAgIEJ1aWxkaW5nIHVuZGVyIE9TLzIgaXMgbm90IG11Y2ggZGlmZmVyZW50IGZyb20gYnVpbGRpbmcgdW5kZXIgdW5peC4KLSAgIFlvdSBuZWVkOgotCi0gICAgICAtIGVteCAwLjlkCi0gICAgICAtIEdOVSBtYWtlCi0gICAgICAtIEdOVSBwYXRjaAotICAgICAgLSBrc2gKLSAgICAgIC0gR05VIGJpc29uCi0gICAgICAtIEdOVSBmaWxlIHV0aWxpdGllcwotICAgICAgLSBHTlUgc2VkCi0gICAgICAtIGF1dG9jb25mIDIuMTMKLQotICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBPcGVuU1NMIG9yIE9wZW5MREFQIHN1cHBvcnQsIHlvdSdsbCBuZWVkIHRvCi0gICBkb3dubG9hZCB0aG9zZSBsaWJyYXJpZXMsIHRvby4gRGlyayBPaG1lIGhhcyBkb25lIHNvbWUgd29yayB0byBwb3J0IFNTTAotICAgbGlicmFyaWVzIHVuZGVyIE9TLzIsIGJ1dCBpdCBsb29rcyBsaWtlIGhlIGRvZXNuJ3QgY2FyZSBhYm91dCBlbXguICBZb3UnbGwKLSAgIGZpbmQgaGlzIHBhdGNoZXMgb246IGh0dHA6Ly9jb21lLnRvL0RpcmtfT2htZQotCi0gICBJZiBkdXJpbmcgdGhlIGxpbmtpbmcgeW91IGdldCBhbiBlcnJvciBhYm91dCBfZXJybm8gYmVpbmcgYW4gdW5kZWZpbmVkCi0gICBzeW1ib2wgcmVmZXJlbmNlZCBmcm9tIHRoZSB0ZXh0IHNlZ21lbnQsIHlvdSBuZWVkIHRvIGFkZCAtRF9fU1RfTVRfRVJSTk9fXwotICAgaW4geW91ciBkZWZpbml0aW9ucy4KLQotICAgSWYgZXZlcnl0aGluZyBzZWVtcyB0byB3b3JrIGZpbmUgYnV0IHRoZXJlJ3Mgbm8gY3VybC5leGUsIHlvdSBuZWVkIHRvIGFkZAotICAgLVpleGUgdG8geW91ciBsaW5rZXIgZmxhZ3MuCi0KLSAgIElmIHlvdSdyZSBnZXR0aW5nIGh1Z2UgYmluYXJpZXMsIHByb2JhYmx5IHlvdXIgbWFrZWZpbGVzIGhhdmUgdGhlIC1nIGluCi0gICBDRkxBR1MuCi0KLVZNUwotPT09Ci0KLSAgIChUaGUgVk1TIHNlY3Rpb24gaXMgaW4gd2hvbGUgY29udHJpYnV0ZWQgYnkgdGhlIGZyaWVuZGx5IE5pY28gQmFnZ3VzKQotCi0gICBDdXJsIHNlZW1zIHRvIHdvcmsgd2l0aCBGVFAgJiBIVFRQIG90aGVyIHByb3RvY29scyBhcmUgbm90IHRlc3RlZC4gICh0aGUKLSAgIHBlcmwgaHR0cC9mdHAgdGVzdGluZyBzZXJ2ZXIgc3VwcGxpZWQgYXMgdGVzdGluZyB0b28gY2Fubm90IHdvcmsgb24gVk1TCi0gICBiZWNhdXNlIHZtcyBoYXMgbm8gY29uY2VwdCBvZiBmb3JrKCkuIFsgSSB0cmllZCB0byBnaXZlIGl0IGEgd2hhY2ssIGJ1dAotICAgdGhhdCdzIG9mIG5vIHVzZS4KLQotICAgU1NMIHN0dWZmIGhhcyBub3QgYmVlbiBwb3J0ZWQuCi0KLSAgIFRlbG5ldCBoYXMgYWJvdXQgdGhlIHNhbWUgaXNzdWVzIGFzIGZvciBXaW4zMi4gV2hlbiB0aGUgY2hhbmdlcyBmb3IgV2luMzIKLSAgIGFyZSBjbGVhciBtYXliZSB0aGV5J2xsIHdvcmsgZm9yIFZNUyB0b28uIFRoZSBiYXNpYyBwcm9ibGVtIGlzIHRoYXQgc2VsZWN0Ci0gICBPTkxZIHdvcmtzIGZvciBzb2NrZXRzLgotCi0gICBNYXJrZWQgaW5zdGFuY2VzIG9mIGZvcGVuL1tmXXN0YXQgdGhhdCBtaWdodCBiZWNvbWUgYSBwcm9ibGVtLCBlc3BlY2lhbGx5Ci0gICBmb3Igbm9uIHN0cmVhbSBmaWxlcy4gSW4gdGhpcyByZWdhcmQsIHRoZSBmaWxlcyBvcGVuZWQgZm9yIHdyaXRpbmcgd2lsbCBiZQotICAgY3JlYXRlZCBzdHJlYW0vbGYgYW5kIHdpbGwgdGh1cyBiZSBzYWZlLiBKdXN0IGtlZXAgaW4gbWluZCB0aGF0IG5vbi1iaW5hcnkKLSAgIHJlYWQvd3JpbmcgZnJvbS90byBmaWxlcyB3aWxsIGhhdmUgYSByZWNvcmRzIHNpemUgbGltaXQgb2YgMzI3NjcgYnl0ZXMKLSAgIGltcG9zZWQuCi0KLSAgIFN0YXQgdG8gZ2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlcyBpcyBhZ2FpbiBvbmx5IHNhZmUgZm9yIHN0cmVhbSBmaWxlcyAmCi0gICBmaXhlZCByZWNvcmQgZmlsZXMgd2l0aG91dCBpbXBsaWVkIENDLgotCi0gICAtLSBNeSBndWVzcyBpcyB0aGF0IG9ubHkgYWxsb3dpbmcgYWNjZXNzIHRvIHN0cmVhbSBmaWxlcyBpcyB0aGUgcXVpY2tlc3QKLSAgIHdheSB0byBnZXQgYXJvdW5kIHRoZSBtb3N0IGlzc3Vlcy4gVGhlcmVmb3JlIGFsbCBmaWxlcyBuZWVkIHRvIHRvIGJlCi0gICBjaGVja2VkIHRvIGJlIHN1cmUgdGhleSB3aWxsIGJlIHN0cmVhbS9sZiBiZWZvcmUgcHJvY2Vzc2luZyB0aGVtLiAgVGhpcyBpcwotICAgdGhlIGVhc2llc3Qgd2F5IG91dCwgSSBrbm93LiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgY29kZSB0aGF0IG5lZWRzIHRvCi0gICByZXBvcnQgdGhlIGZpbGVzaXplIHdpbGwgYmVjb21lIGEgcGFpbiBpbiB0aGUgYXNzIG90aGVyd2lzZS4KLQotICAgRXhpdCBzdGF0dXMuLi4uIFdlbGwgd2UgbmVlZGVkIHNvbWV0aGluZyBkb25lIGhlcmUsCi0KLSAgIFZNUyBoYXMgYSBzdHJ1Y3R1cmVkIGV4aXN0IHN0YXR1czoKLSAgIHwgMyAgfCAgICAgICAyICAgIHwgICAgIDEgICAgICAgfCAgMHwKLSAgIHwxMDk4fDc2NTQzMjEwOTg3Nnw1NDMyMTA5ODc2NTQzfDIxMHwKLSAgICstLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLSsKLSAgIHxDdHJsfCAgRmFjaWxpdHkgIHwgRXJyb3IgY29kZSAgfHNldnwKLSAgICstLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLSsKLQotICAgV2l0aCB0aGUgQ3RybC1iaXRzIGFuIGFwcGxpY2F0aW9uIGNhbiB0ZWxsIGlmIHBhcnQgb3IgdGhlIHdob2xlIG1lc3NhZ2UgaGFzCi0gICBhbHJlYWR5IGJlZW4gcHJpbnRlZCBmcm9tIHRoZSBwcm9ncmFtLCBEQ0wgZG9lc24ndCBuZWVkIHRvIHByaW50IGl0IGFnYWluLgotCi0gICBGYWNpbGl0eSAtIGJhc2ljYWxseSB0aGUgcHJvZ3JhbSBJRC4gQSBjb2RlIGFzc2lnbmVkIHRvIHRoZSBwcm9ncmFtCi0gICB0aGUgbmFtZSBjYW4gYmUgZmV0Y2hlZCBmcm9tIGV4dGVybmFsIG9yIGludGVybmFsIG1lc3NhZ2UgbGlicmFyaWVzCi0gICBFcnJvciBjb2RlIC0gdGhlIGVyciBjb2RlcyBhc3NpZ25lZCBieSB0aGUgYXBwbGljYXRpb24KLSAgIFNldi4gLSBzZXZlcml0eTogRXZlbiA9IGVycm9yLCBvZmYgPSBub24gZXJyb3IKLQotICAgICAgMCA9IFdhcm5pbmcKLSAgICAgIDEgPSBTdWNjZXNzCi0gICAgICAyID0gRXJyb3IKLSAgICAgIDMgPSBJbmZvcm1hdGlvbgotICAgICAgNCA9IEZhdGFsCi0gICAgICA8NS03PiByZXNlcnZlZC4KLQotICAgVGhpcyBhbGwgcHJlc2VudHMgaXRzZWxmIHdpdGg6Ci0gICAlPEZBQ0lMSVRZPi08U2V2Pi08RXJyb3JuYW1lPiwgPEVycm9yIG1lc3NhZ2U+Ci0KLSAgIFNlZSBhbHNvIHRoZSBzcmMvY3VybG1zZy5tc2cgZmlsZSwgaXQgaGFzIHRoZSBzb3VyY2UgZm9yIHRoZSBtZXNzYWdlcyBJbgotICAgc3JjL21haW4uYyBhIHNlY3Rpb24gaXMgZGV2b3RlZCB0byBtZXNzYWdlIHN0YXR1cyB2YWx1ZXMsIHRoZSBnbG9iYWx2YWx1ZXMKLSAgIGNyZWF0ZSBzeW1ib2xzIHdpdGggY2VydGFpbiB2YWx1ZXMsIHJlZmVyZW5jZWQgZnJvbSBhIGNvbXBpbGVkIG1lc3NhZ2UKLSAgIGZpbGUuIEhhdmUgYWxsIGV4aXQgZnVuY3Rpb24gdXNlIGEgZXhpdCBzdGF0dXMgZGVyaXZlZCBmcm9tIGEgdHJhbnNsYXRpb24KLSAgIHRhYmxlIHdpdGggdGhlIGNvbXBpbGVkIG1lc3NhZ2UgY29kZXMuCi0KLSAgIFRoaXMgd2FzIGFsbCBjb21waWxlZCB3aXRoOgotCi0gICAgICBDb21wYXEgQyBWNi4yLTAwMyBvbiBPcGVuVk1TIEFscGhhIFY3LjEtMUgyCi0KLSAgIFNvIGZhciBmb3IgcG9ydGluZyBub3RlcyBhcyBvZjoKLQotICAgMTMtanVsLTIwMDEKLSAgIE4uIEJhZ2d1cwotCi1RTlgKLT09PQotCi0gICAoVGhpcyBzZWN0aW9uIHdhcyBncmFjaW91c2x5IGJyb3VnaHQgdG8gdXMgYnkgRGF2aWQgQmVudGhhbSkKLQotICAgQXMgUU5YIGlzIHRhcmdldGVkIGZvciByZXNvdXJjZSBjb25zdHJhaW5lZCBlbnZpcm9ubWVudHMsIHRoZSBRTlggaGVhZGVycwotICAgc2V0IGNvbnNlcnZhdGl2ZSBsaW1pdHMuIFRoaXMgaW5jbHVkZXMgdGhlIEZEX1NFVFNJWkUgbWFjcm8sIHNldCBieSBkZWZhdWx0Ci0gICB0byAzMi4gU29ja2V0IGRlc2NyaXB0b3JzIHJldHVybmVkIHdpdGhpbiB0aGUgQ1VSTCBsaWJyYXJ5IG1heSBleGNlZWQgdGhpcywKLSAgIHJlc3VsdGluZyBpbiBtZW1vcnkgZmF1bHRzL1NJR1NFR1YgY3Jhc2hlcyB3aGVuIHBhc3NlZCBpbnRvIHNlbGVjdCguLikKLSAgIGNhbGxzIHVzaW5nIGZkX3NldCBtYWNyb3MuCi0KLSAgIEEgZ29vZCBhbGwtcm91bmQgc29sdXRpb24gdG8gdGhpcyBpcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aGVuIGJ1aWxkaW5nCi0gICBsaWJjdXJsLCBieSBvdmVycmlkaW5nIENGTEFHUyBkdXJpbmcgY29uZmlndXJlLCBleGFtcGxlCi0KLSAgICMgIGNvbmZpZ3VyZSBDRkxBR1M9Jy1ERkRfU0VUU0laRT02NCAtZyAtTzInCi0KLVJJU0MgT1MKLT09PT09PT0KLQotICAgVGhlIGxpYnJhcnkgY2FuIGJlIGNyb3NzLWNvbXBpbGVkIHVzaW5nIGdjY3NkayBhcyBmb2xsb3dzOgotCi0gICAgICAgIENDPXJpc2Nvcy1nY2MgQVI9cmlzY29zLWFyIFJBTkxJQj0ncmlzY29zLWFyIC1zJyAuL2NvbmZpZ3VyZSBcCi0gICAgICAgICAgICAgLS1ob3N0PWFybS1yaXNjb3MtYW9mIC0td2l0aG91dC1yYW5kb20gLS1kaXNhYmxlLXNoYXJlZAotICAgICAgICBtYWtlCi0KLSAgIHdoZXJlIHJpc2Nvcy1nY2MgYW5kIHJpc2Nvcy1hciBhcmUgbGlua3MgdG8gdGhlIGdjY3NkayB0b29scy4KLSAgIFlvdSBjYW4gdGhlbiBsaW5rIHlvdXIgcHJvZ3JhbSB3aXRoIGN1cmwvbGliLy5saWJzL2xpYmN1cmwuYQotCi1BbWlnYU9TCi09PT09PT09Ci0KLSAgIChUaGlzIHNlY3Rpb24gd2FzIGdyYWNpb3VzbHkgYnJvdWdodCB0byB1cyBieSBEaWVnbyBDYXNvcnJhbikKLQotICAgVG8gYnVpbGQgY1VSTC9saWJjdXJsIG9uIEFtaWdhT1MganVzdCB0eXBlICdtYWtlIGFtaWdhJyAuLi4KLQotICAgV2hhdCB5b3UgbmVlZCBpczogICAgKG5vdCB0ZXN0ZWQgd2l0aCBvdGhlcnMgdmVyc2lvbnMpCi0KLSAgICAgICAgR2Vla0dhZGdldHMgLyBnY2MgMi45NS4zIChodHRwOi8vd3d3LmdlZWtnYWRnZXRzLm9yZy8pCi0KLSAgICAgICAgQW1pVENQIFNESyB2NC4zIChodHRwOi8vd3d3LmFtaW5ldC5uZXQvY29tbS90Y3AvQW1pVENQLVNESy00LjMubGhhKQotCi0gICAgICAgIE5hdGl2ZSBEZXZlbG9wZXIgS2l0IChodHRwOi8vd3d3LmFtaWdhLmNvbS8zLjkvZG93bmxvYWQvTkRLMy45LmxoYSkKLQotICAgQXMgbm8gaXhlbXVsLmxpYnJhcnkgaXMgcmVxdWlyZWQgeW91IHdpbGwgYmUgYWJsZSB0byBidWlsZCBpdCBmb3IKLSAgIFdhcnBPUy9Qb3dlclBDIChub3QgdGVzdGVkIGJ5IG1lKSwgYXMgd2VsbCBhIE1vcnBoT1MgdmVyc2lvbiBzaG91bGQgYmUKLSAgIHBvc3NpYmxlIHdpdGggbm8gcHJvYmxlbXMuCi0KLSAgIFRvIGVuYWJsZSBTU0wgc3VwcG9ydCwgeW91IG5lZWQgYSBPcGVuU1NMIG5hdGl2ZSB2ZXJzaW9uICh3aXRob3V0IGl4ZW11bCksCi0gICB5b3UgY2FuIGZpbmQgYSBwcmVjb21waWxlZCBwYWNrYWdlIGF0IGh0dHA6Ly9hbWlnYS5zb3VyY2Vmb3JnZS5uZXQvT3BlblNTTC8KLQotTmV0V2FyZQotPT09PT09PQotCi0gICBUbyBjb21waWxlIGN1cmwubmxtIC8gbGliY3VybC5ubG0geW91IG5lZWQ6Ci0KLSAgIC0gZWl0aGVyIGFueSBnY2MgLyBubG1jb252LCBvciBDb2RlV2FycmlvciA3IFBESyA0IG9yIGxhdGVyLgotICAgLSBnbnUgbWFrZSBhbmQgYXdrIHJ1bm5pbmcgb24gdGhlIHBsYXRmb3JtIHlvdSBjb21waWxlIG9uOwotICAgICBuYXRpdmUgV2luMzIgdmVyc2lvbnMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKLSAgICAgaHR0cDovL3d3dy5na253Lm5ldC9kZXZlbG9wbWVudC9wcmd0b29scy8KLSAgIC0gcmVjZW50IE5vdmVsbCBMaWJDIG9yIE5vdmVsbCBDTGliIFNESyBhdmFpbGFibGUgZnJvbToKLSAgICAgaHR0cHM6Ly93d3cubm92ZWxsLmNvbS9kZXZlbG9wZXIvbmRrLwotICAgLSBvcHRpb25hbCByZWNlbnQgTm92ZWxsIENMREFQIFNESyBhdmFpbGFibGUgZnJvbToKLSAgICAgaHR0cHM6Ly93d3cubm92ZWxsLmNvbS9kZXZlbG9wZXIvbmRrL2xkYXBfbGlicmFyaWVzX2Zvcl9jLmh0bWwKLSAgIC0gb3B0aW9uYWwgemxpYiBzb3VyY2VzIChzdGF0aWMgb3IgZHluYW1pYyBsaW5raW5nIHdpdGggemxpYi5pbXApOwotICAgICBzb3VyY2VzIHdpdGggTmV0V2FyZSBNYWtlZmlsZSBjYW4gYmUgb2J0YWluZWQgZnJvbToKLSAgICAgaHR0cDovL3d3dy5na253Lm5ldC9taXJyb3IvemxpYi8KLSAgIC0gb3B0aW9uYWwgT3BlblNTTCBzb3VyY2VzICh2ZXJzaW9uIDAuOS44IG9yIGxhdGVyIGJ1aWxkIHdpdGggQlNEIHNvY2tldHMpOwotICAgICB5b3UgY2FuIGZpbmQgcHJlY29tcGlsZWQgcGFja2FnZXMgYXQ6Ci0gICAgIGh0dHA6Ly93d3cuZ2tudy5uZXQvZGV2ZWxvcG1lbnQvb3NzbC9uZXR3YXJlLwotICAgICBmb3IgQ0xJQi1iYXNlZCBidWlsZHMgT3BlblNTTCAwLjkuOGggb3IgbGF0ZXIgaXMgcmVxdWlyZWQgIC0gZWFybGllciB2ZXJzaW9ucwotICAgICBkb24ndCBzdXBwb3J0IGJ1aWxkaW5nIHdpdGggQ0xJQiBCU0Qgc29ja2V0cy4KLSAgIC0gb3B0aW9uYWwgU1NIMiBzb3VyY2VzICh2ZXJzaW9uIDAuMTcgb3IgbGF0ZXIpOwotCi0gICBTZXQgYSBzZWFyY2ggcGF0aCB0byB5b3VyIGNvbXBpbGVyLCBsaW5rZXIgYW5kIHRvb2xzOyBvbiBMaW51eCBtYWtlCi0gICBzdXJlIHRoYXQgdGhlIHZhciBPU1RZUEUgY29udGFpbnMgdGhlIHN0cmluZyAnbGludXgnOyBzZXQgdGhlIHZhcgotICAgTkRLQkFTRSB0byBwb2ludCB0byB0aGUgYmFzZSBvZiB5b3VyIE5vdmVsbCBOREs7IGFuZCB0aGVuIHR5cGUKLSAgICdtYWtlIG5ldHdhcmUnIGZyb20gdGhlIHRvcCBzb3VyY2UgZGlyZWN0b3J5OyBvdGhlciB0YXJnZXRzIGF2YWlsYWJsZQotICAgYXJlICduZXR3YXJlLXNzbCcsICduZXR3YXJlLXNzbC16bGliJywgJ25ldHdhcmUtemxpYicgYW5kICduZXR3YXJlLWFyZXMnOwotICAgaWYgeW91IG5lZWQgb3RoZXIgY29tYmluYXRpb25zIHlvdSBjYW4gY29udHJvbCB0aGUgYnVpbGQgd2l0aCB0aGUKLSAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBXSVRIX1NTTCwgV0lUSF9aTElCLCBXSVRIX0FSRVMsIFdJVEhfU1NIMiwgYW5kCi0gICBFTkFCTEVfSVBWNjsgeW91IGNhbiBzZXQgTElOS19TVEFUSUM9MSB0byBsaW5rIGN1cmwubmxtIHN0YXRpY2FsbHkuCi0gICBCeSBkZWZhdWx0IExEQVAgc3VwcG9ydCBpcyBlbmFibGVkLCBob3dldmVyIGN1cnJlbnRseSB5b3Ugd2lsbCBuZWVkIGEgcGF0Y2gKLSAgIGluIG9yZGVyIHRvIHVzZSB0aGUgQ0xEQVAgTkRLIHdpdGggQlNEIHNvY2tldHMgKE5vdmVsbCBCdWcgMzAwMjM3KToKLSAgIGh0dHA6Ly93d3cuZ2tudy5uZXQvdGVzdC9jdXJsL2NsZGFwX25kay9sZGFwX25kay5kaWZmCi0gICBJIGZvdW5kIG9uIHNvbWUgTGludXggc3lzdGVtcyAoUkg5KSB0aGF0IE9TIGRldGVjdGlvbiBkaWRuJ3Qgd29yayBhbHRob3VnaAotICAgYSAnc2V0IHwgZ3JlcCBPU1RZUEUnIHNob3dzIHRoZSB2YXIgcHJlc2VudCBhbmQgc2V0OyBJIHNpbXBseSBvdmVyd3JvdGUgaXQKLSAgIHdpdGggJ09TVFlQRT1saW51eC1yaDktZ251JyBhbmQgdGhlIGRldGVjdGlvbiBpbiB0aGUgTWFrZWZpbGUgd29ya2VkLi4uCi0gICBBbnkgaGVscCBpbiB0ZXN0aW5nIGFwcHJlY2lhdGVkIQotICAgQnVpbGRzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCA4IHRpbWVzIGEgZGF5IGZyb20gY3VycmVudCBnaXQgYXJlIGhlcmU6Ci0gICBodHRwOi8vd3d3LmdrbncubmV0L21pcnJvci9jdXJsL2F1dG9idWlsZHMvCi0gICB0aGUgc3RhdHVzIG9mIHRoZXNlIGJ1aWxkcyBjYW4gYmUgdmlld2VkIGF0IHRoZSBhdXRvYnVpbGQgdGFibGU6Ci0gICBodHRwczovL2N1cmwuaGF4eC5zZS9kZXYvYnVpbGRzLmh0bWwKLQotZUNvcwotPT09PQotCi0gICBjdXJsIGRvZXMgbm90IHVzZSB0aGUgZUNvcyBidWlsZCBzeXN0ZW0sIHNvIHlvdSBtdXN0IGZpcnN0IGJ1aWxkIGVDb3MKLSAgIHNlcGFyYXRlbHksIHRoZW4gbGluayBjdXJsIHRvIHRoZSByZXN1bHRpbmcgZUNvcyBsaWJyYXJ5LiAgSGVyZSdzIGEgc2FtcGxlCi0gICBjb25maWd1cmUgbGluZSB0byBkbyBzbyBvbiBhbiB4ODYgTGludXggYm94IHRhcmdldGluZyB4ODY6Ci0KLSAgIEdDQ0xJQj1gZ2NjIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCAmJiBcCi0gICBDRkxBR1M9Ii1EX19FQ09TPTEgLW5vc3RkaW5jIC1JJEVDT1NfSU5TVEFMTC9pbmNsdWRlIFwKLSAgICAtSWBkaXJuYW1lICRHQ0NMSUJgL2luY2x1ZGUiIFwKLSAgIExERkxBR1M9Ii1ub3N0ZGxpYiAtV2wsLS1nYy1zZWN0aW9ucyAtV2wsLXN0YXRpYyBcCi0gICAgLUwkRUNPU19JTlNUQUxML2xpYiAtVHRhcmdldC5sZCAtbHRhcmdldCIgXAotICAgLi9jb25maWd1cmUgLS1ob3N0PWkzODYgLS1kaXNhYmxlLXNoYXJlZCBcCi0gICAgLS13aXRob3V0LXNzbCAtLXdpdGhvdXQtemxpYiAtLWRpc2FibGUtbWFudWFsIC0tZGlzYWJsZS1sZGFwCi0KLSAgIEluIG1vc3QgY2FzZXMsIGVDb3MgdXNlcnMgd2lsbCBiZSB1c2luZyBsaWJjdXJsIGZyb20gd2l0aGluIGEgY3VzdG9tCi0gICBlbWJlZGRlZCBhcHBsaWNhdGlvbi4gIFVzaW5nIHRoZSBzdGFuZGFyZCAnY3VybCcgZXhlY3V0YWJsZSBmcm9tCi0gICB3aXRoaW4gZUNvcyBtZWFucyBmYWNpbmcgdGhlIGxpbWl0YXRpb24gb2YgdGhlIHN0YW5kYXJkIGVDb3MgQwotICAgc3RhcnR1cCBjb2RlIHdoaWNoIGRvZXMgbm90IGFsbG93IHBhc3NpbmcgYXJndW1lbnRzIGluIG1haW4oKS4gIFRvCi0gICBydW4gJ2N1cmwnIGZyb20gZUNvcyBhbmQgaGF2ZSBpdCBkbyBzb21ldGhpbmcgdXNlZnVsLCB5b3Ugd2lsbCBuZWVkCi0gICB0byBlaXRoZXIgbW9kaWZ5IHRoZSBlQ29zIHN0YXJ0dXAgY29kZSB0byBwYXNzIGluIHNvbWUgYXJndW1lbnRzLCBvcgotICAgbW9kaWZ5IHRoZSBjdXJsIGFwcGxpY2F0aW9uIGl0c2VsZiB0byByZXRyaWV2ZSBpdHMgYXJndW1lbnRzIGZyb20KLSAgIHNvbWUgbG9jYXRpb24gc2V0IGJ5IHRoZSBib290bG9hZGVyIG9yIGhhcmQtY29kZSB0aGVtLgotCi0gICBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHBhdGNoIGNvdWxkIGJlIHVzZWQgdG8gaGFyZC1jb2RlIHNvbWUKLSAgIGFyZ3VtZW50cy4gIFRoZSBNVEFCX0VOVFJZIGxpbmUgbW91bnRzIGEgUkFNIGRpc2sgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbQotICAgKHdpdGhvdXQgbW91bnRpbmcgc29tZSBraW5kIG9mIGZpbGVzeXN0ZW0sIGVDb3MgZXJyb3JzIG91dCBhbGwgZmlsZQotICAgb3BlcmF0aW9ucyB3aGljaCBjdXJsIGRvZXMgbm90IHRha2UgdG8gd2VsbCkuICBUaGUgbmV4dCBzZWN0aW9uIHN5bnRoZXNpemVzCi0gICBzb21lIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIGN1cmwgdG8gdXNlLCBpbiB0aGlzIGNhc2UgdG8gZGlyZWN0IGN1cmwKLSAgIHRvIHJlYWQgZnVydGhlciBhcmd1bWVudHMgZnJvbSBhIGZpbGUuICBJdCB0aGVuIGNyZWF0ZXMgdGhhdCBmaWxlIG9uIHRoZQotICAgUkFNIGRpc2sgYW5kIHBsYWNlcyB3aXRoaW4gaXQgYSBVUkwgdG8gZG93bmxvYWQ6IGEgZmlsZTogVVJMIHRoYXQKLSAgIGp1c3QgaGFwcGVucyB0byBwb2ludCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZi4gIFRoZSByZXN1bHRzCi0gICBvZiBydW5uaW5nIGN1cmwgaW4gdGhpcyB3YXkgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKLSAgIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCi0KLS0tLSBzcmMvbWFpbi5jICAxOSBKdWwgMjAwNiAxOTowOTo1NiAtMDAwMCAgICAxLjM2MwotKysrIHNyYy9tYWluLmMgIDI0IEp1bCAyMDA2IDIxOjM3OjIzIC0wMDAwCi1AQCAtNDI4NiwxMSArNDI4NiwzMSBAQAotIH0KLQotCi0rI2lmZGVmIF9fRUNPUwotKyNpbmNsdWRlIDxjeWcvZmlsZWlvL2ZpbGVpby5oPgotK01UQUJfRU5UUlkoIHRlc3Rmc19tdGUxLAotKyAgICAgICAgICAgICAgICAgICAiLyIsCi0rICAgICAgICAgICAgICAgICAgICJyYW1mcyIsCi0rICAgICAgICAgICAgICAgICAgICIiLAotKyAgICAgICAgICAgICAgICAgICAwKTsKLSsjZW5kaWYKLQotIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gewotICAgaW50IHJlczsKLSAgIHN0cnVjdCBDb25maWd1cmFibGUgY29uZmlnOwotKyNpZmRlZiBfX0VDT1MKLSsgIGNoYXIgKmFyZ3NbXSA9IHsiZWNvcy1jdXJsIiwgIi1LIiwgImN1cmxjb25mLnR4dCJ9OwotKyAgRklMRSAqZjsKLSsgIGFyZ2MgPSBzaXplb2YoYXJncykvc2l6ZW9mKGFyZ3NbMF0pOwotKyAgYXJndiA9IGFyZ3M7Ci0rCi0rICBmID0gZm9wZW4oImN1cmxjb25mLnR4dCIsICJ3Iik7Ci0rICBpZiAoZikgewotKyAgICBmcHJpbnRmKGYsICItLXVybCBmaWxlOmN1cmxjb25mLnR4dCIpOwotKyAgICBmY2xvc2UoZik7Ci0rICB9Ci0rI2VuZGlmCi0gICBtZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCBDb25maWd1cmFibGUpKTsKLQotICAgY29uZmlnLmVycm9ycyA9IHN0ZGVycjsgLyogZGVmYXVsdCBlcnJvcnMgdG8gc3RkZXJyICovCi0KLU1pbml4Ci09PT09PQotCi0gICBjdXJsIGNhbiBiZSBjb21waWxlZCBvbiBNaW5peCAzIHVzaW5nIGdjYyBvciBBQ0sgKHN0YXJ0aW5nIHdpdGgKLSAgIHZlci4gMy4xLjMpLiAgRW5zdXJlIHRoYXQgR05VIGdhd2sgYW5kIGJhc2ggYXJlIGJvdGggaW5zdGFsbGVkIGFuZAotICAgYXZhaWxhYmxlIGluIHRoZSBQQVRILgotCi0gICBBQ0sKLSAgIC0tLQotICAgSW5jcmVhc2UgdGhlIGhlYXAgc2l6ZXMgb2YgdGhlIGNvbXBpbGVyIHdpdGggdGhlIGNvbW1hbmQ6Ci0KLSAgICAgYmluc2l6ZXMgeHhsCi0KLSAgIHRoZW4gY29uZmlndXJlIGFuZCBjb21waWxlIGN1cmwgd2l0aDoKLQotICAgICAuL2NvbmZpZ3VyZSBDQz1jYyBMRD1jYyBBUj0vdXNyL2Jpbi9hYWwgR1JFUD1ncmVwIFwKLSAgICAgIENQUEZMQUdTPSctRF9QT1NJWF9TT1VSQ0U9MSAtSS91c3IvbG9jYWwvaW5jbHVkZScKLSAgICAgbWFrZQotICAgICBjaG1lbSA9MjU2MDAwIHNyYy9jdXJsCi0KLSAgIEdDQwotICAgLS0tCi0gICBNYWtlIHN1cmUgZ2NjIGlzIGluIHlvdXIgUEFUSCB3aXRoIHRoZSBjb21tYW5kOgotCi0gICAgIGV4cG9ydCBQQVRIPS91c3IvZ251L2JpbjokUEFUSAotCi0gICB0aGVuIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSBjdXJsIHdpdGg6Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9Z2NjIEFSPS91c3IvZ251L2Jpbi9nYXIgR1JFUD1ncmVwCi0gICAgIG1ha2UKLSAgICAgY2htZW0gPTI1NjAwMCBzcmMvY3VybAotCi1TeW1iaWFuIE9TCi09PT09PT09PT09Ci0KLSAgIFRoZSBTeW1iaWFuIE9TIHBvcnQgdXNlcyB0aGUgU3ltYmlhbiBidWlsZCBzeXN0ZW0gdG8gY29tcGlsZS4gIEZyb20gdGhlCi0gICBwYWNrYWdlcy9TeW1iaWFuL2dyb3VwLyBkaXJlY3RvcnksIHJ1bjoKLQotICAgICAgYmxkbWFrZSBibGRmaWxlcwotICAgICAgYWJsZCBidWlsZAotCi0gICB0byBjb21waWxlIGFuZCBpbnN0YWxsIGN1cmwgYW5kIGxpYmN1cmwgdXNpbmcgU0JTdjEuIElmIHlvdXIgU3ltYmlhbgotICAgU0RLIGRvZXNuJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciBQLkkuUC5TLiwgeW91IHdpbGwgbmVlZCB0byBjb250YWN0Ci0gICB5b3VyIFNESyB2ZW5kb3IgdG8gb2J0YWluIHRoYXQgZmlyc3QuCi0KLVZ4V29ya3MKLT09PT09PT09Ci0KLSAgIEJ1aWxkIGZvciBWeFdvcmtzIGlzIHBlcmZvcm1lZCB1c2luZyBjcm9zcyBjb21waWxhdGlvbi4KLSAgIFRoYXQgbWVhbnMgeW91IGJ1aWxkIG9uIFdpbmRvd3MgbWFjaGluZSB1c2luZyBWeFdvcmtzIHRvb2xzIGFuZAotICAgcnVuIHRoZSBidWlsdCBpbWFnZSBvbiB0aGUgVnhXb3JrcyBkZXZpY2UuCi0KLSAgIFRvIGJ1aWxkIGxpYmN1cmwgZm9yIFZ4V29ya3MgeW91IG5lZWQ6Ci0KLSAgICAgIC0gQ1lHV0lOIChmcmVlLCBodHRwczovL2N5Z3dpbi5jb20vKQotICAgICAgLSBXaW5kIFJpdmVyIFdvcmtiZW5jaCAoY29tbWVyY2lhbCkKLQotICAgSWYgeW91IGhhdmUgQ1lHV0lOIGFuZCBXb3JrYmVuY2ggaW5zdGFsbGVkIG9uIHlvdSBtYWNoaW5lCi0gICBmb2xsb3cgYWZ0ZXIgbmV4dCBzdGVwczoKLQotICAgIDEuIE9wZW4gdGhlIENvbW1hbmQgUHJvbXB0IHdpbmRvdyBhbmQgY2hhbmdlIGRpcmVjdG9yeSAoJ2NkJykKLSAgICAgICB0byB0aGUgbGliY3VybCAnbGliJyBmb2xkZXIuCi0gICAgMi4gQWRkIENZR1dJTiAnYmluJyBmb2xkZXIgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gICAgICAgRm9yIGV4YW1wbGUsIHR5cGUgJ3NldCBQQVRIPUM6L2VtYmVkZGVkL2N5Z3dpbi9iaW47JVBBVEglJy4KLSAgICAzLiBBZGp1c3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIGRlZmluZWQgaW4gJ0Vudmlyb25tZW50JyBzZWN0aW9uCi0gICAgICAgb2YgdGhlIE1ha2VmaWxlLnZ4d29ya3MgZmlsZSB0byBwb2ludCB0byB5b3VyIHNvZnR3YXJlIGZvbGRlcnMuCi0gICAgNC4gQnVpbGQgdGhlIGxpYmN1cmwgYnkgdHlwaW5nICdtYWtlIC1mIC4vTWFrZWZpbGUudnh3b3JrcycKLQotICAgQXMgYSByZXN1bHQgdGhlIGxpYmN1cmwuYSBsaWJyYXJ5IHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSAnbGliJyBmb2xkZXIuCi0gICBUbyBjbGVhbiB0aGUgYnVpbGQgcmVzdWx0cyB0eXBlICdtYWtlIC1mIC4vTWFrZWZpbGUudnh3b3JrcyBjbGVhbicuCi0KLUFuZHJvaWQKLT09PT09PT0KLQotICAgTWV0aG9kIHVzaW5nIHRoZSBzdGF0aWMgbWFrZWZpbGU6Ci0KLSAgICAgIC0gc2VlIHRoZSBidWlsZCBub3RlcyBpbiB0aGUgcGFja2FnZXMvQW5kcm9pZC9BbmRyb2lkLm1rIGZpbGUuCi0KLSAgIE1ldGhvZCB1c2luZyBhIGNvbmZpZ3VyZSBjcm9zcy1jb21waWxlICh0ZXN0ZWQgd2l0aCBBbmRyb2lkIE5ESyByN2MsIHI4KToKLQotICAgICAgLSBwcmVwYXJlIHRoZSB0b29sY2hhaW4gb2YgdGhlIEFuZHJvaWQgTkRLIGZvciBzdGFuZGFsb25lIHVzZTsgdGhpcyBjYW4KLSAgICAgICAgYmUgZG9uZSBieSBpbnZva2luZyB0aGUgc2NyaXB0OgotICAgICAgICAuL2J1aWxkL3Rvb2xzL21ha2Utc3RhbmRhbG9uZS10b29sY2hhaW4uc2gKLSAgICAgICAgd2hpY2ggY3JlYXRlcyBhIHVzdWFsIGNyb3NzLWNvbXBpbGUgdG9vbGNoYWluLiBMZXRzIGFzc3VtZSB0aGF0IHlvdSBwdXQKLSAgICAgICAgdGhpcyB0b29sY2hhaW4gYmVsb3cgL29wdCB0aGVuIGludm9rZSBjb25maWd1cmUgd2l0aCBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgZXhwb3J0IFBBVEg9L29wdC9hcm0tbGludXgtYW5kcm9pZGVhYmktNC40LjMvYmluOiRQQVRICi0gICAgICAgIC4vY29uZmlndXJlIC0taG9zdD1hcm0tbGludXgtYW5kcm9pZGVhYmkgW21vcmUgY29uZmlndXJlIG9wdGlvbnNdCi0gICAgICAgIG1ha2UKLSAgICAgIC0gaWYgeW91IHdhbnQgdG8gY29tcGlsZSBkaXJlY3RseSBmcm9tIG91ciBHSVQgcmVwbyB5b3UgbWlnaHQgcnVuIGludG8KLSAgICAgICAgdGhpcyBpc3N1ZSB3aXRoIG9sZGVyIGF1dG9tYWtlIHN0dWZmOgotICAgICAgICBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uCi0gICAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBgYXJtLWxpbnV4LWFuZHJvaWRlYWJpJzoKLSAgICAgICAgc3lzdGVtIGBhbmRyb2lkZWFiaScgbm90IHJlY29nbml6ZWQKLSAgICAgICAgY29uZmlndXJlOiBlcnJvcjogL2Jpbi9zaCAuL2NvbmZpZy5zdWIgYXJtLWxpbnV4LWFuZHJvaWRlYWJpIGZhaWxlZAotICAgICAgICB0aGlzIGlzc3VlIGNhbiBiZSBmaXhlZCB3aXRoIHVzaW5nIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIGNvbmZpZy5zdWIKLSAgICAgICAgYW5kIGNvbmZpZy5ndWVzcyB3aGljaCBjYW4gYmUgb2J0YWluZWQgaGVyZToKLSAgICAgICAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9dHJlZQotICAgICAgICB5b3UgbmVlZCB0byByZXBsYWNlIHlvdXIgc3lzdGVtLW93biB2ZXJzaW9ucyB3aGljaCB1c3VhbGx5IGNhbiBiZQotICAgICAgICBmb3VuZCBpbiB5b3VyIGF1dG9tYWtlIGZvbGRlcjoKLSAgICAgICAgZmluZCAvdXNyIC1uYW1lIGNvbmZpZy5zdWIKLQotICAgV3JhcHBlciBmb3IgcGtnLWNvbmZpZzoKLQotICAgICAgLSBJbiBvcmRlciB0byBtYWtlIHByb3BlciB1c2Ugb2YgcGtnLWNvbmZpZyBzbyB0aGF0IGNvbmZpZ3VyZSBpcyBhYmxlIHRvCi0gICAgICAgIGZpbmQgYWxsIGRlcGVuZGVuY2llcyB5b3Ugc2hvdWxkIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IGZvciBwa2ctY29uZmlnOwotICAgICAgICBmaWxlIC9vcHQvYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuNC4zL2Jpbi9hcm0tbGludXgtYW5kcm9pZGVhYmktcGtnLWNvbmZpZzoKLQotICAgICAgICAjIS9iaW4vc2gKLSAgICAgICAgU1lTUk9PVD0kKGRpcm5hbWUgJHswJS8qfSkvc3lzcm9vdAotICAgICAgICBleHBvcnQgUEtHX0NPTkZJR19ESVI9Ci0gICAgICAgIGV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUj0ke1NZU1JPT1R9L3Vzci9sb2NhbC9saWIvcGtnY29uZmlnOiR7U1lTUk9PVH0vdXNyL3NoYXJlL3BrZ2NvbmZpZwotICAgICAgICBleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUj0ke1NZU1JPT1R9Ci0gICAgICAgIGV4ZWMgcGtnLWNvbmZpZyAiJEAiCi0KLSAgICAgICAgYWxzbyBjcmVhdGUgYSBjb3B5IG9yIHN5bWxpbmsgd2l0aCBuYW1lIGFybS11bmtub3duLWxpbnV4LWFuZHJvaWRlYWJpLXBrZy1jb25maWcuCi0KLUNST1NTIENPTVBJTEUKLT09PT09PT09PT09PT0KLQotICAgKFRoaXMgc2VjdGlvbiB3YXMgZ3JhY2lvdXNseSBicm91Z2h0IHRvIHVzIGJ5IEppbSBEdWV5LCB3aXRoIGFkZGl0aW9ucyBieQotICAgRGFuIEZhbmRyaWNoKQotCi0gICBEb3dubG9hZCBhbmQgdW5wYWNrIHRoZSBjVVJMIHBhY2thZ2UuCi0KLSAgICdjZCcgdG8gdGhlIG5ldyBkaXJlY3RvcnkuIChlLmcuIGNkIGN1cmwtNy4xMi4zKQotCi0gICBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBvaW50IHRvIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbiBhbmQgY2FsbAotICAgY29uZmlndXJlIHdpdGggYW55IG9wdGlvbnMgeW91IG5lZWQuICBCZSBzdXJlIGFuZCBzcGVjaWZ5IHRoZSAnLS1ob3N0JyBhbmQKLSAgICctLWJ1aWxkJyBwYXJhbWV0ZXJzIGF0IGNvbmZpZ3VyYXRpb24gdGltZS4gIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGFuCi0gICBleGFtcGxlIG9mIGNyb3NzLWNvbXBpbGluZyBmb3IgdGhlIElCTSA0MDVHUCBQb3dlclBDIHByb2Nlc3NvciB1c2luZyB0aGUKLSAgIHRvb2xjaGFpbiBmcm9tIE1vbnRlVmlzdGEgZm9yIEhhcmRoYXQgTGludXguCi0KLSAgIChiZWdpbiBzY3JpcHQpCi0KLSAgICMhIC9iaW4vc2gKLQotICAgZXhwb3J0IFBBVEg9JFBBVEg6L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L2JpbgotICAgZXhwb3J0IENQUEZMQUdTPSItSS9vcHQvaGFyZGhhdC9kZXZraXQvcHBjLzQwNS90YXJnZXQvdXNyL2luY2x1ZGUiCi0gICBleHBvcnQgQVI9cHBjXzQwNS1hcgotICAgZXhwb3J0IEFTPXBwY180MDUtYXMKLSAgIGV4cG9ydCBMRD1wcGNfNDA1LWxkCi0gICBleHBvcnQgUkFOTElCPXBwY180MDUtcmFubGliCi0gICBleHBvcnQgQ0M9cHBjXzQwNS1nY2MKLSAgIGV4cG9ydCBOTT1wcGNfNDA1LW5tCi0KLSAgIC4vY29uZmlndXJlIC0tdGFyZ2V0PXBvd2VycGMtaGFyZGhhdC1saW51eCBcCi0gICAgICAgIC0taG9zdD1wb3dlcnBjLWhhcmRoYXQtbGludXggXAotICAgICAgICAtLWJ1aWxkPWk1ODYtcGMtbGludXgtZ251IFwKLSAgICAgICAgLS1wcmVmaXg9L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L3RhcmdldC91c3IvbG9jYWwgXAotICAgICAgICAtLWV4ZWMtcHJlZml4PS91c3IvbG9jYWwKLQotICAgKGVuZCBzY3JpcHQpCi0KLSAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHByb3ZpZGUgYSBwYXJhbWV0ZXIgbGlrZSAnLS13aXRoLXJhbmRvbT0vZGV2L3VyYW5kb20nCi0gICB0byBjb25maWd1cmUgYXMgaXQgY2Fubm90IGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgYSByYW5kb20gbnVtYmVyCi0gICBnZW5lcmF0aW5nIGRldmljZSBmb3IgYSB0YXJnZXQgc3lzdGVtLiAgVGhlICctLXByZWZpeCcgcGFyYW1ldGVyCi0gICBzcGVjaWZpZXMgd2hlcmUgY1VSTCB3aWxsIGJlIGluc3RhbGxlZC4gIElmICdjb25maWd1cmUnIGNvbXBsZXRlcwotICAgc3VjY2Vzc2Z1bGx5LCBkbyAnbWFrZScgYW5kICdtYWtlIGluc3RhbGwnIGFzIHVzdWFsLgotCi0gICBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IGJlIGFibGUgdG8gc2ltcGxpZnkgdGhlIGFib3ZlIGNvbW1hbmRzIHRvIGFzCi0gICBsaXR0bGUgYXM6Ci0KLSAgICAgICAuL2NvbmZpZ3VyZSAtLWhvc3Q9QVJDSC1PUwotCi1SRURVQ0lORyBTSVpFCi09PT09PT09PT09PT09Ci0KLSAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUKLSAgIHNpemUgb2YgbGliY3VybCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIHdoZXJlIGJpbmFyeSBzaXplIGlzIGFuCi0gICBpbXBvcnRhbnQgZmFjdG9yLiAgRmlyc3QsIGJlIHN1cmUgdG8gc2V0IHRoZSBDRkxBR1MgdmFyaWFibGUgd2hlbgotICAgY29uZmlndXJpbmcgd2l0aCBhbnkgcmVsZXZhbnQgY29tcGlsZXIgb3B0aW1pemF0aW9uIGZsYWdzIHRvIHJlZHVjZSB0aGUKLSAgIHNpemUgb2YgdGhlIGJpbmFyeS4gIEZvciBnY2MsIHRoaXMgd291bGQgbWVhbiBhdCBtaW5pbXVtIHRoZSAtT3Mgb3B0aW9uLAotICAgYW5kIHBvdGVudGlhbGx5IHRoZSAtbWFyY2g9WCwgLW1keW5hbWljLW5vLXBpYyBhbmQgLWZsdG8gb3B0aW9ucyBhcyB3ZWxsLAotICAgZS5nLgotCi0gICAgICAuL2NvbmZpZ3VyZSBDRkxBR1M9Jy1PcycgTERGTEFHUz0nLVdsLC1Cc3ltYm9saWMnLi4uCi0KLSAgIE5vdGUgdGhhdCBuZXdlciBjb21waWxlcnMgb2Z0ZW4gcHJvZHVjZSBzbWFsbGVyIGNvZGUgdGhhbiBvbGRlciB2ZXJzaW9ucwotICAgZHVlIHRvIGltcHJvdmVkIG9wdGltaXphdGlvbi4KLQotICAgQmUgc3VyZSB0byBzcGVjaWZ5IGFzIG1hbnkgLS1kaXNhYmxlLSBhbmQgLS13aXRob3V0LSBmbGFncyBvbiB0aGUgY29uZmlndXJlCi0gICBjb21tYW5kLWxpbmUgYXMgeW91IGNhbiB0byBkaXNhYmxlIGFsbCB0aGUgbGliY3VybCBmZWF0dXJlcyB0aGF0IHlvdQotICAga25vdyB5b3VyIGFwcGxpY2F0aW9uIGlzIG5vdCBnb2luZyB0byBuZWVkLiAgQmVzaWRlcyBzcGVjaWZ5aW5nIHRoZQotICAgLS1kaXNhYmxlLVBST1RPQ09MIGZsYWdzIGZvciBhbGwgdGhlIHR5cGVzIG9mIFVSTHMgeW91ciBhcHBsaWNhdGlvbgotICAgd2lsbCBub3QgdXNlLCBoZXJlIGFyZSBzb21lIG90aGVyIGZsYWdzIHRoYXQgY2FuIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUKLSAgIGxpYnJhcnk6Ci0KLSAgICAgLS1kaXNhYmxlLWFyZXMgKGRpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBDLUFSRVMgRE5TIGxpYnJhcnkpCi0gICAgIC0tZGlzYWJsZS1jb29raWVzIChkaXNhYmxlcyBzdXBwb3J0IGZvciBIVFRQIGNvb2tpZXMpCi0gICAgIC0tZGlzYWJsZS1jcnlwdG8tYXV0aCAoZGlzYWJsZXMgSFRUUCBjcnlwdG9ncmFwaGljIGF1dGhlbnRpY2F0aW9uKQotICAgICAtLWRpc2FibGUtaXB2NiAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgSVB2NikKLSAgICAgLS1kaXNhYmxlLW1hbnVhbCAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0LWluIGRvY3VtZW50YXRpb24pCi0gICAgIC0tZGlzYWJsZS1wcm94eSAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgSFRUUCBhbmQgU09DS1MgcHJveGllcykKLSAgICAgLS1kaXNhYmxlLXVuaXgtc29ja2V0cyAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgVU5JWCBzb2NrZXRzKQotICAgICAtLWRpc2FibGUtdmVyYm9zZSAoZWxpbWluYXRlcyBkZWJ1Z2dpbmcgc3RyaW5ncyBhbmQgZXJyb3IgY29kZSBzdHJpbmdzKQotICAgICAtLWRpc2FibGUtdmVyc2lvbmVkLXN5bWJvbHMgKGRpc2FibGVzIHN1cHBvcnQgZm9yIHZlcnNpb25lZCBzeW1ib2xzKQotICAgICAtLWVuYWJsZS1oaWRkZW4tc3ltYm9scyAoZWxpbWluYXRlcyB1bm5lZWRlZCBzeW1ib2xzIGluIHRoZSBzaGFyZWQgbGlicmFyeSkKLSAgICAgLS13aXRob3V0LWxpYmlkbiAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGxpYmlkbiBETlMgbGlicmFyeSkKLSAgICAgLS13aXRob3V0LWxpYnJ0bXAgKGRpc2FibGVzIHN1cHBvcnQgZm9yIFJUTVApCi0gICAgIC0td2l0aG91dC1zc2wgKGRpc2FibGVzIHN1cHBvcnQgZm9yIFNTTC9UTFMpCi0gICAgIC0td2l0aG91dC16bGliIChkaXNhYmxlcyBzdXBwb3J0IGZvciBvbi10aGUtZmx5IGRlY29tcHJlc3Npb24pCi0KLSAgIFRoZSBHTlUgY29tcGlsZXIgYW5kIGxpbmtlciBoYXZlIGEgbnVtYmVyIG9mIG9wdGlvbnMgdGhhdCBjYW4gcmVkdWNlIHRoZQotICAgc2l6ZSBvZiB0aGUgbGliY3VybCBkeW5hbWljIGxpYnJhcmllcyBvbiBzb21lIHBsYXRmb3JtcyBldmVuIGZ1cnRoZXIuCi0gICBTcGVjaWZ5IHRoZW0gYnkgcHJvdmlkaW5nIGFwcHJvcHJpYXRlIENGTEFHUyBhbmQgTERGTEFHUyB2YXJpYWJsZXMgb24gdGhlCi0gICBjb25maWd1cmUgY29tbWFuZC1saW5lLCBlLmcuCi0KLSAgICAgQ0ZMQUdTPSItT3MgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgXAotICAgICAgICAgICAgIC1mbm8tdW53aW5kLXRhYmxlcyAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIC1mbHRvIiBcCi0gICAgIExERkxBR1M9Ii1XbCwtcyAtV2wsLUJzeW1ib2xpYyAtV2wsLS1nYy1zZWN0aW9ucyIKLQotICAgQmUgc3VyZSBhbHNvIHRvIHN0cmlwIGRlYnVnZ2luZyBzeW1ib2xzIGZyb20geW91ciBiaW5hcmllcyBhZnRlcgotICAgY29tcGlsaW5nIHVzaW5nICdzdHJpcCcgKG9yIHRoZSBhcHByb3ByaWF0ZSB2YXJpYW50IGlmIGNyb3NzLWNvbXBpbGluZykuCi0gICBJZiBzcGFjZSBpcyByZWFsbHkgdGlnaHQsIHlvdSBtYXkgYmUgYWJsZSB0byByZW1vdmUgc29tZSB1bm5lZWRlZAotICAgc2VjdGlvbnMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHVzaW5nIHRoZSAtUiBvcHRpb24gdG8gb2JqY29weSAoZS5nLiB0aGUKLSAgIC5jb21tZW50IHNlY3Rpb24pLgotCi0gICBVc2luZyB0aGVzZSB0ZWNobmlxdWVzIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGJhc2ljIEhUVFAtb25seSBzaGFyZWQKLSAgIGxpYmN1cmwgbGlicmFyeSBmb3IgaTM4NiBMaW51eCBwbGF0Zm9ybXMgdGhhdCBpcyBvbmx5IDEwOSBLaUIgaW4gc2l6ZSwgYW5kCi0gICBhbiBGVFAtb25seSBsaWJyYXJ5IHRoYXQgaXMgMTA5IEtpQiBpbiBzaXplIChhcyBvZiBsaWJjdXJsIHZlcnNpb24gNy40NS4wLAotICAgdXNpbmcgZ2NjIDQuOS4yKS4KLQotICAgWW91IG1heSBmaW5kIHRoYXQgc3RhdGljYWxseSBsaW5raW5nIGxpYmN1cmwgdG8geW91ciBhcHBsaWNhdGlvbiB3aWxsCi0gICByZXN1bHQgaW4gYSBsb3dlciB0b3RhbCBzaXplIHRoYW4gZHluYW1pY2FsbHkgbGlua2luZy4KLQotICAgTm90ZSB0aGF0IHRoZSBjdXJsIHRlc3QgaGFybmVzcyBjYW4gZGV0ZWN0IHRoZSB1c2Ugb2Ygc29tZSwgYnV0IG5vdCBhbGwsIG9mCi0gICB0aGUgLS1kaXNhYmxlIHN0YXRlbWVudHMgc3VnZ2VzdGVkIGFib3ZlLiBVc2Ugd2lsbCBjYXVzZSB0ZXN0cyByZWx5aW5nIG9uCi0gICB0aG9zZSBmZWF0dXJlcyB0byBmYWlsLiAgVGhlIHRlc3QgaGFybmVzcyBjYW4gYmUgbWFudWFsbHkgZm9yY2VkIHRvIHNraXAKLSAgIHRoZSByZWxldmFudCB0ZXN0cyBieSBzcGVjaWZ5aW5nIGNlcnRhaW4ga2V5IHdvcmRzIG9uIHRoZSBydW50ZXN0cy5wbAotICAgY29tbWFuZCBsaW5lLiAgRm9sbG93aW5nIGlzIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBrZXkgd29yZHM6Ci0KLSAgICAgLS1kaXNhYmxlLWNvb2tpZXMgICAgICAgICAgIWNvb2tpZXMKLSAgICAgLS1kaXNhYmxlLW1hbnVhbCAgICAgICAgICAgIS0tbWFudWFsCi0gICAgIC0tZGlzYWJsZS1wcm94eSAgICAgICAgICAgICFIVFRQXCBwcm94eSAhcHJveHl0dW5uZWwgIVNPQ0tTNCAhU09DS1M1Ci0KLVBPUlRTCi09PT09PQotCi0gICBUaGlzIGlzIGEgcHJvYmFibHkgaW5jb21wbGV0ZSBsaXN0IG9mIGtub3duIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcwotICAgdGhhdCBjdXJsIGhhcyBiZWVuIGNvbXBpbGVkIGZvci4gSWYgeW91IGtub3cgYSBzeXN0ZW0gY3VybCBjb21waWxlcyBhbmQKLSAgIHJ1bnMgb24sIHRoYXQgaXNuJ3QgbGlzdGVkLCBwbGVhc2UgbGV0IHVzIGtub3chCi0KLSAgICAgICAgLSBBbHBoYSBERUMgT1NGIDQKLSAgICAgICAgLSBBbHBoYSBEaWdpdGFsIFVOSVggdjMuMgotICAgICAgICAtIEFscGhhIEZyZWVCU0QgNC4xLCA0LjUKLSAgICAgICAgLSBBbHBoYSBMaW51eCAyLjIsIDIuNAotICAgICAgICAtIEFscGhhIE5ldEJTRCAxLjUuMgotICAgICAgICAtIEFscGhhIE9wZW5CU0QgMy4wCi0gICAgICAgIC0gQWxwaGEgT3BlblZNUyBWNy4xLTFIMgotICAgICAgICAtIEFscGhhIFRydTY0IHY1LjAgNS4xCi0gICAgICAgIC0gQVZSMzIgTGludXgKLSAgICAgICAgLSBBUk0gQW5kcm9pZCAxLjUsIDIuMSwgMi4zLCAzLjIsIDQueAotICAgICAgICAtIEFSTSBJTlRFR1JJVFkKLSAgICAgICAgLSBBUk0gaU9TCi0gICAgICAgIC0gQ2VsbCBMaW51eAotICAgICAgICAtIENlbGwgQ2VsbCBPUwotICAgICAgICAtIEhQLVBBIEhQLVVYIDkuWCAxMC5YIDExLlgKLSAgICAgICAgLSBIUC1QQSBMaW51eAotICAgICAgICAtIEhQMzAwMCBNUEUvaVgKLSAgICAgICAgLSBNaWNyb0JsYXplIHVDbGludXgKLSAgICAgICAgLSBNSVBTIElSSVggNi4yLCA2LjUKLSAgICAgICAgLSBNSVBTIExpbnV4Ci0gICAgICAgIC0gT1MvNDAwCi0gICAgICAgIC0gUG9ja2V0IFBDL1dpbiBDRSAzLjAKLSAgICAgICAgLSBQb3dlciBBSVggMy4yLjUsIDQuMiwgNC4zLjEsIDQuMy4yLCA1LjEsIDUuMgotICAgICAgICAtIFBvd2VyUEMgRGFyd2luIDEuMAotICAgICAgICAtIFBvd2VyUEMgSU5URUdSSVRZCi0gICAgICAgIC0gUG93ZXJQQyBMaW51eAotICAgICAgICAtIFBvd2VyUEMgTWFjIE9TIDkKLSAgICAgICAgLSBQb3dlclBDIE1hYyBPUyBYCi0gICAgICAgIC0gU0g0IExpbnV4IDIuNi5YCi0gICAgICAgIC0gU0g0IE9TMjEKLSAgICAgICAgLSBTSU5JWC1aIHY1Ci0gICAgICAgIC0gU3BhcmMgTGludXgKLSAgICAgICAgLSBTcGFyYyBTb2xhcmlzIDIuNCwgMi41LCAyLjUuMSwgMi42LCA3LCA4LCA5LCAxMAotICAgICAgICAtIFNwYXJjIFN1bk9TIDQuMS5YCi0gICAgICAgIC0gU3Ryb25nQVJNIChhbmQgb3RoZXIgQVJNKSBSSVNDIE9TIDMuMSwgNC4wMgotICAgICAgICAtIFN0cm9uZ0FSTS9BUk03L0FSTTkgTGludXggMi40LCAyLjYKLSAgICAgICAgLSBTdHJvbmdBUk0gTmV0QlNEIDEuNC4xCi0gICAgICAgIC0gU3ltYmlhbiBPUyAoUC5JLlAuUy4pIDkueAotICAgICAgICAtIFRQRgotICAgICAgICAtIFVsdHJpeCA0LjNhCi0gICAgICAgIC0gVU5JQ09TIDkuMAotICAgICAgICAtIGkzODYgQmVPUwotICAgICAgICAtIGkzODYgRE9TCi0gICAgICAgIC0gaTM4NiBlQ29zIDEuMy4xCi0gICAgICAgIC0gaTM4NiBFc2l4IDQuMQotICAgICAgICAtIGkzODYgRnJlZUJTRAotICAgICAgICAtIGkzODYgSFVSRAotICAgICAgICAtIGkzODYgSGFpa3UgT1MKLSAgICAgICAgLSBpMzg2IExpbnV4IDEuMywgMi4wLCAyLjIsIDIuMywgMi40LCAyLjYKLSAgICAgICAgLSBpMzg2IE1hYyBPUyBYCi0gICAgICAgIC0gaTM4NiBNSU5JWCAzLjEKLSAgICAgICAgLSBpMzg2IE5ldEJTRAotICAgICAgICAtIGkzODYgTm92ZWxsIE5ldFdhcmUKLSAgICAgICAgLSBpMzg2IE9TLzIKLSAgICAgICAgLSBpMzg2IE9wZW5CU0QKLSAgICAgICAgLSBpMzg2IFFOWCA2Ci0gICAgICAgIC0gaTM4NiBTQ08gdW5peAotICAgICAgICAtIGkzODYgU29sYXJpcyAyLjcKLSAgICAgICAgLSBpMzg2IFdpbmRvd3MgOTUsIDk4LCBNRSwgTlQsIDIwMDAsIFhQLCAyMDAzCi0gICAgICAgIC0gaTQ4NiBuY3Itc3lzdjQuMy4wMyAoTkNSIE1QLVJBUykKLSAgICAgICAgLSBpYTY0IExpbnV4IDIuMy45OQotICAgICAgICAtIG02OGsgQW1pZ2FPUyAzCi0gICAgICAgIC0gbTY4ayBMaW51eAotICAgICAgICAtIG02OGsgdUNsaW51eAotICAgICAgICAtIG02OGsgT3BlbkJTRAotICAgICAgICAtIG04OGsgZGctZGd1eDUuNFIzLjAwCi0gICAgICAgIC0gczM5MCBMaW51eAotICAgICAgICAtIHg4Nl82NCBMaW51eAotICAgICAgICAtIFhTY2FsZS9QWEEyNTAgTGludXggMi40Ci0gICAgICAgIC0gTmlvcyBJSSB1Q2xpbnV4Ci0KLVVzZWZ1bCBVUkxzCi09PT09PT09PT09PQotCi1heFRMUyAgICAgICAgaHR0cDovL2F4dGxzLnNvdXJjZWZvcmdlLm5ldC8KLWMtYXJlcyAgICAgICBodHRwOi8vYy1hcmVzLmhheHguc2UvCi1HTlUgR1NTICAgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc3MvCi1HbnVUTFMgICAgICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvCi1IZWltZGFsICAgICAgaHR0cDovL3d3dy5oNWwub3JnLwotbGliaWRuICAgICAgIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLwotbGlibWV0YWxpbmsgIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9saWJtZXRhbGluay8KLWxpYnNzaDIgICAgICBodHRwczovL3d3dy5saWJzc2gyLm9yZy8KLU1JVCBLZXJiZXJvcyBodHRwOi8vd2ViLm1pdC5lZHUva2VyYmVyb3Mvd3d3L2Rpc3QvCi1OU1MgICAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUwotT3BlbkxEQVAgICAgIGh0dHA6Ly93d3cub3BlbmxkYXAub3JnLwotT3BlblNTTCAgICAgIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnLwotUG9sYXJTU0wgICAgIGh0dHBzOi8vdGxzLm1iZWQub3JnLwotd29sZlNTTCAgICAgIGh0dHBzOi8vd3d3LndvbGZzc2wuY29tL3dvbGZTU0wvCi1abGliICAgICAgICAgaHR0cDovL3d3dy56bGliLm5ldC8KLQotTWluZ1cgICAgICAgIGh0dHA6Ly93d3cubWluZ3cub3JnLwotTWluR1ctdzY0ICAgIGh0dHA6Ly9taW5ndy13NjQuc291cmNlZm9yZ2UubmV0LwotT3BlbldhdGNvbSAgIGh0dHA6Ly93d3cub3BlbndhdGNvbS5vcmcvCitzZWUgSU5TVEFMTC5tZApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLmRldmNwcCBiL2RvY3MvSU5TVEFMTC5kZXZjcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ODlkNTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9JTlNUQUxMLmRldmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi1EZXZDcHAtTWluZ3cgSW5zdGFsbCAmIENvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXB0IDIwMDUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVmZXJlbmNlIEVtYWlscyBhdmFpbGFibGUgYXQgY3VybEBoYXh4LnNlOgotCi0gIExpYmN1cmwgSW5zdGFsbCBhbmQgVXNlIElzc3VlcwotICBBd2FpdGluZyBhbiBBbnN3ZXIgZm9yIFdpbiAzMiBJbnN0YWxsCi0gIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOyBFcnJvcgotICBNYWtlZmlsZSBJc3N1ZXMKLQotCi1IYXZpbmcgcHJldmlvdXNseSBkb25lIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHdoYXQgd2FzIGF2YWlsYWJsZSB0aGF0IG1ldCBteQotcmVxdWlyZW1lbnRzIHVuZGVyIEdQTCwgSSBzZXR0bGVkIGZvciBMaWJjdXJsIGFzIHRoZSBzb2Z0d2FyZSBvZiBjaG9pY2UgZm9yCi1tYW55IHJlYXNvbnMgbm90IHRoZSBsZWFzdCBvZiB3aGljaCB3YXMgdGhlIHN1cHBvcnQuCi0KLUJhY2tncm91bmQKLS0tLS0tLS0tLS0KLQotVGhpcyBxdWVzdCBzdGFydGVkIHdoZW4gSSBpbm5vY2VudGx5IHRyaWVkIHRvIGluY29ycG9yYXRlIHRoZSBsaWJjdXJsIGxpYnJhcnkKLWludG8gbXkgc2ltcGxlIHNvdXJjZSBjb2RlLiBJIGZpZ3VyZWQgdGhhdCBhIGZldyBlYXN5IHN0ZXBzIHdvdWxkIGFjY29tcGxpc2gKLXRoaXMgd2l0aG91dCBtYWpvciBoZWFkYWNoZXMuIEkgaGFkIG5vIGlkZWEgdGhhdCBJIHdvdWxkIGJlIGZhY2luZyBhbiBhbG1vc3QKLWluc3VybW91bnRhYmxlIGNoYWxsZW5nZS4KLQotVGhlIG1haW4gcHJvYmxlbSBsaWVzIGluIHR3byBhcmVhcy4gRmlyc3QgdGhlIGJ1bGsgb2Ygc3VwcG9ydCBmb3IgbGliY3VybAotZXhpc3RzIGZvciBhIFVuaXgvbGludXggY29tbWFuZCBsaW5lIGVudmlyb25tZW50cy4gVGhpcyBpcyBvZiBsaXR0bGUgaGVscCB3aGVuCi1pdCBjb21lcyB0byBXaW5kb3dzIE8vUy4KLQotU2Vjb25kbHkgdGhlIGhlbHAgdGhhdCBkb2VzIGV4aXN0IGZvciB0aGUgV2luZG93cyBPL1MgZm9jdXNlZCBhcm91bmQgbWluZ3cKLXRocm91Z2ggYSBjb21tYW5kIGxpbmUgYXJndW1lbnQgZW52aXJvbm1lbnQuCi0KLVlvdSBtYXkgYXNrICJXaHkgaXMgdGhpcyBhIHByb2JsZW0/IgotCi1JJ20gdXNpbmcgYSBXaW5kb3dzIE8vUyB3aXRoIERldkNwcC4gRm9yIHRob3NlIG9mIHlvdSB3aG8gYXJlIHVuZmFtaWxpYXIgd2l0aAotRGV2Q3BwLCBpdCBpcyBhIHdpbmRvdyBzaGVsbCBHVUkgdGhhdCByZXBsYWNlcyB0aGUgY29tbWFuZCBsaW5lIGVudmlyb25tZW50Ci1mb3IgZ2NjLiBBIGRlZmluaXRlIGltcHJvdmVtZW50IHRoYXQgSSBhbSB1bndpbGxpbmcgdG8gZ2l2ZSB1cC4gSG93ZXZlciB1c2luZwotRGV2Q3BwIHByZXNlbnRlZCBpdHMgb3duIHNldCBvZiBpc3N1ZXMuIEluYWR2ZXJ0ZW50bHkgSSBhbHNvIG1hZGUgc29tZQotY2FyZWxlc3MgZXJyb3JzIHN1Y2ggYXMgY29tcGlsaW5nIHRoZSA3LjE0IHZlcnNpb24gb2YgTWFrZWZpbGUgd2l0aCBhbiBvbGRlcgotdmVyc2lvbiBvZiBzb3VyY2UgY29kZS4gVGhhbmtzIHRvIERhbiBGYW5kcmljaCBmb3IgcGlja2luZyB0aGlzIHVwLgotCi1JIGRpZCBldmVudHVhbGx5IHdpdGggdGhlIGhlbHAgb2YgRGFuaWVsLCBQaGlsbGlwZSBhbmQgb3RoZXJzIG1hbmFnZSB0bwotaW1wbGVtZW50IHN1Y2Nlc3NmdWxseSAodGhlIG9ubHkgbWluZ3cgYXZhaWxhYmxlIHZlcnNpb24pCi1jdXJsLTcuMTMuMC13aW4zMi1zc2wtZGV2ZWwtbWluZ3czMiBpbnRvIHRoZSBEZXZDcHAgZW52aXJvbm1lbnQuIE9ubHkgdGhlCi1keW5hbWljIGxpYmN1cmwuZGxsIGxpYmN1cmxkbGwuYSBsaWJyYXJpZXMgd29ya2VkLiBUaGUgc3RhdGljIGxpYnJhcnkgd2hpY2ggSQotd2FzIGludGVyZXN0ZWQgaW4gZGlkIG5vdC4gRnVydGhlcm1vcmUgd2hlbiBJIHRyaWVkIHRvIGltcGxlbWVudCBvbmUgb2YgdGhlCi1leGFtcGxlcyBpbmNsdWRlZCB3aXRoIHRoZSBjdXJsIHBhY2thZ2UgKGdldCBpbmZvLmMpIGl0IGNhdXNlZCB0aGUgZXhlY3V0YWJsZQotdG8gY3Jhc2guIFRyYWNpbmcgdGhlIGJ1ZyBJIGZvdW5kIGl0IGluIHRoZSBjb2RlIGFuZCBmdW5jdGlvbiByZXMgPQotY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7LgotCi1BdCB0aGlzIHBvaW50IEkgaGFkIHRvIG1ha2UgYSBjaG9pY2UgYXMgdG8gd2hldGhlciBpbnZlc3QgbXkgbGltaXRlZAotdGltZS1lbmVyZ3kgcmVzb3VyY2UgdG8gZml4aW5nIHRoZSBidWcgb3IgdG8gY29tcGlsZSB0aGUgbmV3IHZlcnNpb24KLWF2YWlsYWJsZS4gQWZ0ZXIgc2VhcmNoaW5nIHRoZSBhcmNoaXZlcyBJIGZvdW5kIGEgdmVyeSBzaW1pbGFyIG9yIHRoZSBzYW1lIGJ1ZwotcmVwb3J0ZWQgZnJvbSB2ZXJzaW9uIDcuMTJ4IG9uLiBEYW5pZWwgZGlkIGluZm9ybSBtZSB0aGF0IGhlIHRob3VnaHQgdGhhdCB0aGlzCi1idWcgaGFkIGJlZW4gZml4ZWQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFNvIEkgcHJvY2VlZGVkIHRvIGNvbXBpbGUgdGhlCi1sYXRlc3QgU1NMIHZlcnNpb24gd2hlcmUgSSBmYWNlZCBvdGhlciBjaGFsbGVuZ2VzLgotCi1JbiBvcmRlciB0byBtYWtlIHRoaXMgcHJvY2VzcyB1bnJlbWFya2FibGUgZm9yIG90aGVycyB1c2luZyB0aGUgc2FtZQotZW52aXJvbm1lbnQgSSBkZWNpZGVkIHRvIGRvY3VtZW50IHRoZSBwcm9jZXNzIHNvIHRoYXQgb3RoZXJzIHdpbGwgZmluZCBpdAotcm91dGluZS4gSXQgd291bGQgYmUgYSBzaGFtZSBpZiBuZXdiaWVzIGNvdWxkIG5vdCBpbXBsZW1lbnQgdGhpcyBleGNlbGxlbnQKLXBhY2thZ2UgZm9yIHRoZWlyIHVzZS4KLQotSSB3b3VsZCBsaWtlIHRvIHRoYW5rIHRoZSBtYW55IG90aGVycyBpbiB0aGlzIGZvcnVtIGFuZCBpbiB0aGUgRGV2Q3BwIGZvcnVtCi1mb3IgdGhlaXIgaGVscC4gV2l0aG91dCB5b3VyIGhlbHAgSSBtYXkgZWl0aGVyIGhhdmUgZ2l2ZW4gdXAgb3IgaXQgd291bGQgaGF2ZQotdGFrZW4gbWUgbWFueSB0aW1lcyBsb25nZXIgdG8gYWNoaWV2ZSBzdWNjZXNzLgotCi1UaGUgQ29va2Jvb2sgQXBwcm9hY2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRpc2N1c3Npb24gd2lsbCBiZSBjb25maW5lZCB0byBhIFNTTCBzdGF0aWMgbGlicmFyeSBjb21waWxhdGlvbiBhbmQKLWluc3RhbGxhdGlvbi4gTGltaXRlZCBtZW50aW9uIGFuZCBjb21tZW50cyB3aWxsIGJlIGluc2VydGVkIHdoZXJlIGFwcHJvcHJpYXRlCi10byBoZWxwIHdpdGggbm9uLVNTTCwgZHluYW1pYyBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzLgotCi0KLSAgIFVzaW5nIE1ha2VmaWxlIGZyb20gRGV2Q3BwIHRvIGNvbXBpbGUgTGliY3VybCBsaWJyYXJpZXMKLQotUHJlYW1ibGUKLS0tLS0tLS0tCi0KLVVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiByZWxlYXNlIC0gY3VybC03LjE0LjAudGFyLmd6LiBDdXJsIHNvdXJjZSBjb2RlIGlzCi1wbGF0Zm9ybSBpbmRlcGVuZGVudC4gVGhpcyBzaW1wbHkgbWVhbnMgdGhhdCB0aGUgc291cmNlIGNvZGUgY2FuIGJlIGNvbXBpbGVkCi1mb3IgYW55IE9wZXJhdGluZyBTeXN0ZW0gKExpbnV4L1VuaXggV2luZG93cyBldGMuIGFuZCB2YXJpYXRpb25zIG9mIHRoZXJlb2YpLgotCi1UaGUgZmlyc3QgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGluc2lkZSBjdXJsLTcuMTQuMCB5b3Ugd2lsbCBmaW5kIHR3byBmb2xkZXJzCi1saWIgYW5kIHNyYy4gQm90aCBjb250YWluIE1ha2VmaWxlLm0zMiAocmVxdWlyZWQgZm9yIHdpbiBtaW5ndyBsaWJyYXJ5IG9yIGV4ZQotY29tcGlsYXRpb24pIGZpbGVzIHdoaWNoIGFyZSBkaWZmZXJlbnQuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28KLWZvbGRlcnMgYW5kIHRoZSBtYWtlZmlsZXMgaXMgdGhhdCB0aGUgc3JjIGZvbGRlciBjb250ZW50cyBhcmUgdXNlZCB0byBjb21waWxlCi1hbiBleGVjdXRhYmxlIGZpbGUoY3VybC5leGUpIHdoaWxlIHRoZSBsaWIgZm9sZGVyIGNvbnRlbnRzIGFyZSB1c2VkIHRvIGNvbXBpbGUKLWEgc3RhdGljIChsaWJjdXJsLmEpIGFuZCBkeW5hbWljIChsaWJjdXJsLmRsbCAmIGxpYmN1cmxkbGwuYSkgZmlsZSB0aGF0IGNhbiBiZQotdXNlZCB0byBjb21waWxlIGxpYmN1cmwgd2l0aCB5b3VyIG93biBzb3VyY2UgY29kZSBzbyB0aGF0IG9uZSBjYW4gdXNlIGFuZAotYWNjZXNzIGFsbCBsaWJjdXJsIGZ1bmN0aW9ucy4KLQotQmVmb3JlIHdlIHN0YXJ0IHBsZWFzZSBtYWtlIHN1cmUgdGhhdCBEZXZDcHAgaXMgaW5zdGFsbGVkIHByb3Blcmx5LiBJbgotcGFydGljdWxhciBtYWtlIHN1cmUgeW91IGhhdmUgbm8gc3BhY2VzIGluIHRoZSBuYW1lIG9mIGFueSBvZiB0aGUgZGlyZWN0b3JpZXMKLWFuZCBzdWJkaXJlY3RvcmllcyB3aGVyZSBEZXZDcHAgaXMgaW5zdGFsbGVkLiBGYWlsdXJlIHRvIGNvbXBseSB3aXRoIHRoZQotaW5zdGFsbCBpbnN0cnVjdGlvbnMgbWF5IHByb2R1Y2UgZXJyYXRpYyBiZWhhdmlvdXIgaW4gRGV2Q3BwLiBGb3IgZnVydGhlciBpbmZvCi1jaGVjayB0aGUgZm9sbG93aW5nIHNpdGVzCi0KLWh0dHA6Ly9hZGl0c3UuZnJlZXVuaXhob3N0LmNvbS9kZXYtY3BwLWZhcS5odG1sCi1odHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL2Rldi1jcHAvZGlzY3Vzc2lvbi80ODIxMS90aHJlYWQvMmE4NWVhNDYKLQotQXMgSSBoYXZlIG1lbnRpb25lZCBiZWZvcmUgSSB3aWxsIGNvbmZpbmUgdGhpcyB0byB0aGUgU1NMIExpYnJhcnkgY29tcGlsYXRpb25zCi1idXQgdGhlIHByb2Nlc3MgaXMgdmVyeSBzaW1pbGFyIGZvciBjb21waWxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZSAtIGN1cmwuZXhlOwotanVzdCBzdWJzdGl0dXRlIHRoZSBzcmMgZm9sZGVyIG1ha2VmaWxlIGluIGl0cyBzdGVhZC4KLQotRmlyc3QgdXNlIGEgdGV4dCBwcm9jZXNzb3IgTm90ZXBhZCwgb3IgeW91ciBvd24gZmF2b3VyaXRlIHRleHQgcHJvY2Vzc29yLiBUbwotZW5nYWdlIHlvdXIgZmF2b3VyaXRlIHRleHQgcHJvY2Vzc29yLCBzZWxlY3QgTWFrZWZpbGUubTMyIGNsaWNrIG9uY2Ugd2l0aCB5b3VyCi1tb3VzZSBvbiBmaWxlIGljb247IGljb24gdHVybnMgYmx1ZSwgcHJlc3MgdGhlIHNoaWZ0IGtleSBhbmQgcmlnaHQtY2xpY2sgb24KLW1vdXNlLCBtZW51IGFwcGVhcnMgc2VsZWN0ICJPcGVuIHdpdGgiLCBzZWxlY3QgeW91ciBmYXZvdXJpdGUgdGV4dCBwcm9jZXNzb3IuCi0KLU5leHQgcmVhZCB0aGUgY29udGVudHMgb2YgTWFrZWZpbGUubTMyLiBJdCBpbmNsdWRlcyBpbnN0cnVjdGlvbnMgb24gaXRzIHVzZS4KLQotTWV0aG9kIEkgLSBET1MgQ29tbWFuZCBMaW5lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZSAtIFRoZSBvbmx5IHJlYXNvbiBJIGhhdmUgaW5jbHVkZWQgdGhpcyBtZXRob2QgaXMgdGhhdCBNZXRob2QgSUkgd2hpY2ggaXMKLXRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBjb21waWxpbmcgZG9lcyBub3QgYWxsb3cgZm9yIHRoZSBzZXR0aW5nIG9mIG9wdGlvbgotc3dpdGNoZXMgKGUuZy4gU1NMID0gMSBvciBTU0wgPTApLiBBdCBsZWFzdCB0aGF0J3Mgd2hhdCB0aGV5IHRlbGwgbWUgYXQgdGhlCi1EZXYtQ3BwIGZvcnVtLgotCi0xIC0gTWFrZSBhIGNvcHkgb2YgKEQ6XERldi1DcHBcYmluKSBiaW4gZm9sZGVyIGFuZCBuYW1lIGl0ICJiaW4gT3JpZ2luYWwiCi1wbGFjZSBpdCBpbiB0aGUgRGV2LUNwcCBpbnN0YWxsZWQgZGlyZWN0b3J5IChEOlxEZXYtQ3BwXCBmb3IgdGhpcyBleGFtcGxlKQotCi0yIC0gQ29weSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBMSUIgZm9sZGVyIG9mIGN1cmwtNy4xNC4wLnRhci5neiBvciB6aXAKLXZlcnNpb24gaW50byB0aGUgYmluIGZvbGRlciBhYm92ZSAoRDpcRGV2LUNwcFxiaW4pLiBUaGUgcmVhc29uIGJlaW5nIGlzIHRoYXQKLXRoZSBtYWtlLmV4ZSBmaWxlIHJlc2lkZXMgaW4gdGhpcyBmb2xkZXIuIE1ha2UuZXhlIHdpbGwgdXNlIC0gTWFrZWZpbGUubTMyLAotTWFrZWZpbGUuaW5jLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGluY2x1ZGVkIGluIHRoZSBsaWIgZm9sZGVyIHRvIGNvbXBpbGUgdGhlCi1zb3VyY2UgY29kZS4gVGhlcmUgaXMgYSBQQVRIIGlzc3VlIHdpdGggbWFrZS5leGUgdGhhdCByZW1haW5zIHVucmVzb2x2ZWQgYXQKLWxlYXN0IGZvciBtZS4gVW5sZXNzIHRoZSBlbnRpcmUgc291cmNlIGNvZGUgdG8gYmUgY29tcGlsZWQgaXMgcGxhY2VkIGVudGlyZWx5Ci13aXRoaW4gdGhlIGRpcmVjdG9yeSBvZiBtYWtlLmV4ZSBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZ2VuZXJhdGVkIC0gImZpbGUKLXh4eHgueXl5IG5vdCBhdmFpbGFibGUiLgotCi0zLSBHbyB0byBEZXYtQ3BwXGJpbiBhbmQgZG91YmxlIGNsaWNrIG9uIG1ha2UgLmV4ZS4gWW91IHdpbGwgc2VlIGEgRE9TIHdpbmRvdwotcXVpY2tseSBwb3AgdXAgYW5kIGNsb3NlIHZlcnkgcXVpY2tseS4gTm90IHRvIHdvcnJ5ISBQbGVhc2UgZG8gbm90IHNraXAgdGhpcwotc3RlcC4KLQotNC0gQ2xpY2sgb24gdGhlIHN0YXJ0IGJ1dHRvblxQcm9ncmFtc1xNUy1ET1MgUHJvbXB0Lk9uY2UgdGhlIERPUyBXaW5kb3cgaXMgdXAKLVR5cGUgdGhlIGRpc2sgZHJpdmUgbGV0dGVyIChlLmcuIEU6ICkgZW5nYWdlIHRoZSBlbnRlciBidXR0b24uIFRoZSBwYXRoIHNob3VsZAotYXV0b21hdGljYWxseSB0YWtlIHlvdSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBtYWtlLmV4ZSBmaWxlLgotCi01LSBUbyBjb21waWxlIHRoZSBzb3VyY2UgY29kZSBzaW1wbHkgdHlwZSBhdCB0aGUgRE9TIHByb21wdCBtYWtlIC1mCi1NYWtlZmlsZS5tMzIgYXMgcGVyIGluc3RydWN0aW9ucyBjb250YWluZWQgaW4gdGhlIE1ha2VmaWxlLm0zMiBmaWxlICh1c2UgYW55Ci10ZXh0IHByb2Nlc3NvciB0byByZWFkIGluc3RydWN0aW9ucykuIEkgZG9uJ3QgYmVsaWV2ZSB0aGF0IHRoaXMgbWFrZWZpbGUKLWFsbG93cyBmb3IgdGhlIG9wdGlvbiBvZiBub24gU1NMLiBJZ25vcmUgYW55IHdhcm5pbmdzLgotCi02LSBDb2xsZWN0IGFuZCBtYWtlIGNvcGllcyBvZiBsaWJjdXJsLmEsIGxpYmN1cmwuZGxsLCBsaWJjdXJsZGxsLmEgYW5kIGFueSAqLm8KLWNvbXBpbGF0aW9ucyB5b3UgbWlnaHQgbmVlZCBpbiBhbm90aGVyIGRpcmVjdG9yeSBvdXRzaWRlIG9mIHRoZSBiaW4gZGlyZWN0b3J5Ci1hcyB5b3Ugd2lsbCBuZWVkIHRoaXMgZmlsZXMgc2hvcnRseSB0byBzZXQgdXAgbGliY3VybCBmb3IgdXNlIHdpdGgKLURldi1jcHAuIEZvciBtb3N0IGFwcHMgKi5vIGlzIG5vdCByZXF1aXJlZC4gTGF0ZXIgb24gd2Ugd2lsbCBzaG93IHdoYXQgdG8gZG8KLXdpdGggdGhlc2UgZmlsZXMuCi0KLTctIFlvdSBhcmUgZmluaXNoZWQgYnV0IGJlZm9yZSBjbG9zaW5nIHdlIG5lZWQgdG8gZG8gY2xlYW51cCAtIGVyYXNlIHRoZSBiaW4KLWZvbGRlciBhbmQgcmVuYW1lIHRoZSAiYmluIE9yaWdpbmFsIiBmb2xkZXIgY3JlYXRlZCBpbiBzdGVwIDEgdG8gYmluLgotCi1Ob3RlIHRvIGNvbXBpbGUgYSBjdXJsIGV4ZWN1dGFibGUgdGhlIHByb2Nlc3MgaXMgcHJvYmFibHkgc2ltaWxhciBidXQgaW5zdGVhZAotb2YgdXNpbmcgdGhlIExJQiBmb2xkZXIgY29udGVudHMgdXNlIHRoZSBTUkMgZm9sZGVyIGNvbnRlbnRzIGFuZCBNYWtlZmlsZXMgaW4KLWN1cmwtNy4xNC4wLnRhci5nei4gRmlsZSBkaXJlY3RvcmllcyByZWxhdGl2ZSBwbGFjZW1lbnRzIG11c3QgYmUgcmVzcGVjdGVkIGZvcgotY29tcGlsaW5nIHRvIHRha2UgcGxhY2Ugc3VjY2Vzc2Z1bGx5LiBUaGlzIG1heSBub3QgYmUgcG9zc2libGUgd2l0aCB0aGUgUEFUSAotcHJvYmxlbSB0aGF0IG1ha2UuZXhlIGV4cGVyaWVuY2VzLiBJZiBhbnlvbmUgaGFzIHNvbHZlZCB0aGlzIFBBVEggaXNzdWUgYW5kCi1wbGVhc2UgbWFrZSBzdXJlIGl0IGFjdHVhbGx5IHdvcmtzIG9uIFdpbiA5eC8yMDAwL1hQIGJlZm9yZSBsZXR0aW5nIG1lCi1rbm93LiBUaGVuIHBsZWFzZSBsZXQgbWUgb3IgRGFuaWVsIGluIG9uIHRoZSBzb2x1dGlvbiBzbyB0aGF0IGl0IGNhbiBiZQotaW5jbHVkZWQgd2l0aCB0aGVzZSBpbnN0cnVjdGlvbnMuIFRoYW5rcy4KLQotb3IKLQotTWV0aG9kIElJIC0gRGV2LUNwcCBHVUkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEtIENvcHkgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgTElCIGZvbGRlciBvZiBjdXJsLTcuMTQuMC50YXIuZ3ogb3IgemlwCi12ZXJzaW9uIGludG8gYW55IGZvbGRlciBvdXRzaWRlIG9mIChEZXYtQ3BwXGJpbikuCi0KLTItIERyb3AgdGhlIEZpbGUvTmV3L2NsaWNrIG9uIFByb2plY3QuCi0KLTMtIE5ldyBQcm9qZWN0IERpYWxvZ3VlIGJveCBhcHBlYXJzLiBEb3VibGUgY2xpY2sgb24gdGhlIFN0YXRpYyBMaWJyYXJ5LgotCi00LSBDcmVhdGUgUHJvamVjdCBEaWFsb2d1ZSBib3ggYXBwZWFycy4gU2VsZWN0IHRoZSBMSUIgZm9sZGVyIGxvY2F0aW9uIHRvCi1wbGFjZSBhbmQgbG9jYXRlIHlvdXIgUHJvamVjdCBGaWxlIE5hbWUuIFBsYWNpbmcgdGhlIFByb2plY3QgRmlsZSBOYW1lCi1lbHNld2hlcmUgbWF5IGNhdXNlIHByb2JsZW1zIChQQVRIIGlzc3VlIHByb2JsZW0gYWdhaW4pLgotCi01LSBEcm9wIGRvd24gdGhlIFByb2plY3QvUHJvamVjdCBPcHRpb25zLiBQcm9qZWN0IE9wdGlvbnMgRGlhbG9ndWUgYm94Ci1hcHBlYXJzLgotCi02LSBTZWxlY3QgdGhlIE1ha2VmaWxlIHRhYiBpbiB0aGUgUHJvamVjdCBPcHRpb25zIERpYWxvZ3VlIEJveC4gQ2hlY2sgQm94IC0KLVVzZSBDdXN0b20gTWFrZWZpbGUuIENsaWNrIG9uIHRoZSBGb2xkZXIgaWNvbiBhdCB0aGUgZXh0cmVtZSByaWdodCBvZiB0aGUKLUNoZWNrIEJveC4gU2VsZWN0IE1ha2VmaWxlLm0zMiBpbiB0aGUgZm9sZGVyIHdoZXJldmVyIHlvdSBoYXZlIHBsYWNlZCB0aGUKLWNvbnRlbnRzIG9mIHRoZSBMSUIgRm9sZGVyLiBQcmVzcyBPSyBhbmQgY2xvc2UgdGhlIERpYWxvZ3VlIEJveC4KLQotNy0gRHJvcCB0aGUgTWVudSBQcm9qZWN0L0NsaWNrIG9uIEFkZCB0byBQcm9qZWN0LiBPcGVuIEZpbGUgRGlhbG9ndWUgQm94Ci1hcHBlYXJzLiAgVGhlIERpYWxvZ3VlIEJveCBzaG91bGQgb3BlbiBpbiB0aGUgZm9sZGVyIHdoZXJldmVyIHlvdSBoYXZlIHBsYWNlZAotdGhlIGNvbnRlbnRzIG9mIHRoZSBMSUIgRm9sZGVyLiBJZiBub3QgZ28gdGhlcmUuCi0KLTgtIFNlbGVjdCBDcnRsLUEgdG8gc2VsZWN0IGFsbCBmaWxlcyBpbiB0aGUgTElCIGZvbGRlci4gQ2xpY2sgb24gb3BlbiB0byBhZGQKLWZpbGVzIGFuZCBjbG9zZSBib3guIFdhaXQgdGlsbCBhbGwgZmlsZXMgYXJlIGFkZGVkLiBUaGlzIG1heSB0YWtlIDMwIHNlY29uZHMKLW9yIGxvbmdlci4KLQotOS0gRHJvcCB0aGUgTWVudSBFeGVjdXRlL0NsaWNrIG9uIENvbXBpbGUuCi0KLTEwLSBUaGF0J3MgaXQuCi0KLQotICAgVGhlIGZvbGxvd2luZyBzdGVwcyBtdXN0IGJlIGNvbXBsZXRlZCBpZiBDdXJsIGlzIHRvIHdvcmsgcHJvcGVybHkKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUxJQiBmb2xkZXIgaW5jbHVzaW9ucyAoKi5hIHBsYWNlbWVudCkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotMS0gUmVmZXIgdG8gTWV0aG9kIEkgLSBET1MgQ29tbWFuZCBMaW5lIHBvaW50ICMgNiBUYWtlIGxpYmN1cmwuYSwgbGliY3VybGRsbC5hCi1hbmQgaW5zdGFsbCBpdCBpbiB0aGUgZGlyZWN0b3J5IEMoIG9yIHdoaWNoZXZlciBkcml2ZSBEZXYgaXMgaW5zdGFsbGVkKQotOlxEZXYtQ3BwXGxpYi4KLQotCi1JbmNsdWRlIEZvbGRlcgotLS0tLS0tLS0tLS0tLS0KLQotMS0gQ3JlYXRlIGEgbmV3IGZvbGRlciBieSB0aGUgbmFtZSBvZiBjdXJsIChkbyBub3QgY2hhbmdlIHRoZSBuYW1lIGN1cmwgdG8KLXNvbWUgb3RoZXIgbmFtZSBhcyBpdCB3aWxsIGNhdXNlIG1ham9yIGlzc3VlcykgaW4gdGhlIGRpcmVjdG9yeQotQzpcRGV2LUNwcFxpbmNsdWRlLgotCi0yLSBDb3B5IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGN1cmwgZm9sZGVyIG9mIGN1cmwtNy4xNC4wLnRhci5neiBvciB6aXAKLSB2ZXJzaW9uIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQgY3VybCBkaXJlY3RvcnkgLSBDOlxEZXYtQ3BwXGluY2x1ZGVcY3VybC4KLQotTGlua3MgVG8gSW5jbHVkZSBBbmQgTGliIEZvbGRlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0xLSBEcm9wIHRoZSBNZW51IC0gVG9vbHNcQ29tcGlsZXIgT3B0aW9uc1xEaXJlY3Rvcmllc1xMaWJyYXJpZXMuIE1ha2Ugc3VyZQotdGhhdCBDKCBvciB3aGljaGV2ZXIgZHJpdmUgRGV2IGlzIGluc3RhbGxlZCk6XERFVi1DUFBcbGliIGlzIGluY2x1ZGVkLgotCi0yLSBOZXh0IHNlbGVjdCB0aGUgTWVudSAtIFRvb2xzXENvbXBpbGVyIE9wdGlvbnNcRGlyZWN0b3JpZXNcQyBJbmNsdWRlcy4gTWFrZQotc3VyZSB0aGF0IEM6XERFVi1DUFBcaW5jbHVkZSBhbmQgQzpcRGV2LUNwcFxpbmNsdWRlXGN1cmwgYXJlIGluY2x1ZGVkLgotCi0zLSBOZXh0IHNlbGVjdCB0aGUgTWVudSAtIFRvb2xzXENvbXBpbGVyIE9wdGlvbnNcRGlyZWN0b3JpZXNcQysrCi1JbmNsdWRlcy4gTWFrZSBzdXJlIHRoYXQgQzpcREVWLUNQUFxpbmNsdWRlIGFuZCBDOlxEZXYtQ3BwXGluY2x1ZGVcY3VybCBhcmUKLWluY2x1ZGVkLgotCi1MaW5rZXIgTGlua3MKLS0tLS0tLS0tLS0tLQotCi0xLSBEcm9wIHRoZSBNZW51IC0gVG9vbHNcQ29tcGlsZXIgT3B0aW9uc1xEaXJlY3Rvcmllc1xDb21waWxlci4KLQotMi0gTWFrZSBzdXJlIHRoYXQgdGhlIGJveCAiQWRkIHRoZXNlIGNvbW1hbmRzIHRvIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIiBpcwotY2hlY2tlZC4KLQotMy0gSW5jbHVkZSBpbiB0aGUgd2hpdGUgc3BhY2UgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGJveCByZWZlcnJlZCBpbiAyIC1sY3VybAotLWx3czJfMzIuCi0KLVNTTCBGaWxlcwotLS0tLS0tLS0tCi0KLTEtIEdldCB0aGUgbGF0ZXN0IG9wZW5TU0wgKGFzIG9mIHRpbWUgb2YgdGhpcyB3cml0aW5nKQotb3BlbnNzbC0wLjkuN2Utd2luMzItYmluLnppcCBmb3IgdGhlIG1pbmltYWxpc3QgcGFja2FnZSBvZiB0aGUgb3BlbnNzbC0wLjkuN2UKLWJpbmFyaWVzIHBvcnRlZCB0byBNUyBXaW5kb3dzIDk1Lzk4L05UL1hQIHVzaW5nIHRoZSBNaW5nVzMyL0dDQy0zLjEKLWRldmVsb3BtZW50IGVudmlyb25tZW50LiBUaGUgZmlsZSBtYXkgYmUgZG93bmxvYWRlZCBhdAotaHR0cHM6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvLgotCi0yLSBPcGVuIHRoZSBhYm92ZSB6aXAgZmlsZS4gWW91IHdpbGwgZmluZCB0d28gZmlsZXMgLSBTREwuZGxsLAotU0RMX21peGVyLmRsbC4gSW5zdGFsbCB0aGVtIGluIHRoZSBkaXJlY3RvcnkgQzpcV0lORE9XU1xTWVNURU0zMiBmb3IgV2luIDl4Ci11c2VycyBhbmQgYzpcd2lubnRcc3lzdGVtMzIgZm9yIE5ULWZhbWlseSB1c2Vycy4KLQotTXVsdGl0aHJlYWRpbmcgRmlsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGJlIGNvbXBsZXRlZAotCi0jZGVmaW5lCi0tLS0tLS0tCi0KLTEtIE1ha2Ugc3VyZSB0aGF0IHlvdXIgcHJvZ3JhbSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIC0gI2RlZmluZSBDVVJMX1NUQVRJQ0xJQgotbXVzdCBiZSBkZWNsYXJlZCBGSVJTVCBiZWZvcmUgYW55IG90aGVyIGRlZmluZSBmdW5jdGlvbnMgbWF5IGJlCi1hZGRlZC4gT3RoZXJ3aXNlIHlvdSBtYXkgZXhwZXJpZW5jZSBsaW5rIGVycm9ycy4KLQotMi0gRG9uJ3QgZm9yZ2V0IHRvIGluY2x1ZGUgICAjaW5jbHVkZSAiY3VybC9jdXJsLmgiLgotCi1lLmcuCi0gICAgI2RlZmluZSBDVVJMX1NUQVRJQ0xJQgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAjaW5jbHVkZSAiY3VybC9jdXJsLmgiCi0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci1ldGMuLi4KLQotCi1TdGF0aWMgb3IgRHluYW1pYyBMaWJyYXJ5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBhYm92ZSBzdGVwcyBhcHBseSBmb3IgdGhlIHVzZSBieSBhIHN0YXRpYyBsaWJyYXJ5LiBTaG91bGQgeW91IGNob29zZSB0bwotdXNlIGEgZHluYW1pYyBsaWJyYXJ5IHlvdSB3aWxsIGJlIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlc2UgYWRkaXRpb25hbCBzdGVwcy4KLQotMS0gUmVmZXIgdG8gTWV0aG9kIEkgLSBET1MgQ29tbWFuZCBMaW5lIHBvaW50ICMgNi4gSW5zdGFsbCBsaWJjdXJsLmRsbCBpbiB0aGUKLWRpcmVjdG9yeSBDOlxXSU5ET1dTXFNZU1RFTTMyIGZvciBXaW4gOXggdXNlcnMgYW5kIGM6XHdpbm50XHN5c3RlbTMyIGZvcgotTlQtZmFtaWx5IHVzZXJzLgotCi0yLSBSZWZlciB0byBMaW5rZXIgTGlua3MgcG9pbnQgMyAtIFJlcGxhY2UgLWxjdXJsIHdpdGggLWxjdXJsZGxsLgotCi1Wb2lsYSB5b3UncmUgZG9uZS4KLQotVGhlIG5vbi1TU0wgc3RhdGljIExpYnJhcnkgYnVpbGQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byB1c2UgYXQgbGVhc3QgYXMgb2YgdGhlCi10aW1lIG9mIHRoaXMgd3JpdGluZyAtIHY3LjE0LiBDaGVjayByZWZlcmVuY2UgZW1haWxzIC0gUGhpbGxpcGUgYW5kIEkgZm91bmQgaXQKLWltcG9zc2libGUgdG8gZnVsbHkgY29tcGlsZSBhcyBjZXJ0YWluIGZpbGVzIHdlcmUgbWlzc2luZyBmb3IgbGlua2luZy4gTm8gYmlnCi1sb3NzIGFzIFNTTCBpcyBhIG1ham9yIHBsdXMuCi0KLUhvcGUgdGhpcyBIZWxwcwotCi1Ub20KZGlmZiAtLWdpdCBhL2RvY3MvSU5TVEFMTC5tZCBiL2RvY3MvSU5TVEFMTC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTBhZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9JTlNUQUxMLm1kCkBAIC0wLDAgKzEsNTEzIEBACisjIGhvdyB0byBpbnN0YWxsIGN1cmwgYW5kIGxpYmN1cmwKKworIyMgSW5zdGFsbGluZyBCaW5hcnkgUGFja2FnZXMKKworTG90cyBvZiBwZW9wbGUgZG93bmxvYWQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMgb2YgY3VybCBhbmQgbGliY3VybC4gVGhpcworZG9jdW1lbnQgZG9lcyBub3QgZGVzY3JpYmUgaG93IHRvIGluc3RhbGwgY3VybCBvciBsaWJjdXJsIHVzaW5nIHN1Y2ggYSBiaW5hcnkKK3BhY2thZ2UuIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBjb21waWxlLCBidWlsZCBhbmQgaW5zdGFsbCBjdXJsIGFuZAorbGliY3VybCBmcm9tIHNvdXJjZSBjb2RlLgorCisjIyBCdWlsZGluZyBmcm9tIGdpdAorCitJZiB5b3UgZ2V0IHlvdXIgY29kZSBvZmYgYSBnaXQgcmVwb3NpdG9yeSBpbnN0ZWFkIG9mIGEgcmVsZWFzZSB0YXJiYWxsLCBzZWUKK3RoZSBgR0lULUlORk9gIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb24gaG93IHRvCitwcm9jZWVkLgorCisjIFVuaXgKKworQSBub3JtYWwgVW5peCBpbnN0YWxsYXRpb24gaXMgbWFkZSBpbiB0aHJlZSBvciBmb3VyIHN0ZXBzIChhZnRlciB5b3UndmUKK3VucGFja2VkIHRoZSBzb3VyY2UgYXJjaGl2ZSk6CisKKyAgICAuL2NvbmZpZ3VyZQorICAgIG1ha2UKKyAgICBtYWtlIHRlc3QgKG9wdGlvbmFsKQorICAgIG1ha2UgaW5zdGFsbAorCitZb3UgcHJvYmFibHkgbmVlZCB0byBiZSByb290IHdoZW4gZG9pbmcgdGhlIGxhc3QgY29tbWFuZC4KKworR2V0IGEgZnVsbCBsaXN0aW5nIG9mIGFsbCBhdmFpbGFibGUgY29uZmlndXJlIG9wdGlvbnMgYnkgaW52b2tpbmcgaXQgbGlrZToKKworICAgIC4vY29uZmlndXJlIC0taGVscAorCitJZiB5b3Ugd2FudCB0byBpbnN0YWxsIGN1cmwgaW4gYSBkaWZmZXJlbnQgZmlsZSBoaWVyYXJjaHkgdGhhbiBgL3Vzci9sb2NhbGAsCitzcGVjaWZ5IHRoYXQgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZToKKworICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9wYXRoL3RvL2N1cmwvdHJlZQorCitJZiB5b3UgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIGluIHRoYXQgZGlyZWN0b3J5LCB5b3UgY2FuIGRvICdtYWtlIGluc3RhbGwnCit3aXRob3V0IGJlaW5nIHJvb3QuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSB0byBtYWtlIGEgbG9jYWwgaW5zdGFsbCBpbgoreW91ciBvd24gaG9tZSBkaXJlY3Rvcnk6CisKKyAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0kSE9NRQorICAgIG1ha2UKKyAgICBtYWtlIGluc3RhbGwKKworVGhlIGNvbmZpZ3VyZSBzY3JpcHQgYWx3YXlzIHRyaWVzIHRvIGZpbmQgYSB3b3JraW5nIFNTTCBsaWJyYXJ5IHVubGVzcworZXhwbGljaXRseSB0b2xkIG5vdCB0by4gSWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQgaW4gdGhlIGRlZmF1bHQgc2VhcmNoCitwYXRoIGZvciB5b3VyIGNvbXBpbGVyL2xpbmtlciwgeW91IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4gSWYgeW91CitoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIGluIC91c3IvbG9jYWwvc3NsLCB5b3UgY2FuIHJ1biBjb25maWd1cmUgbGlrZToKKworICAgIC4vY29uZmlndXJlIC0td2l0aC1zc2wKKworSWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQgc29tZXdoZXJlIGVsc2UgKGZvciBleGFtcGxlLCAvb3B0L09wZW5TU0wpIGFuZAoreW91IGhhdmUgcGtnLWNvbmZpZyBpbnN0YWxsZWQsIHNldCB0aGUgcGtnLWNvbmZpZyBwYXRoIGZpcnN0LCBsaWtlIHRoaXM6CisKKyAgICBlbnYgUEtHX0NPTkZJR19QQVRIPS9vcHQvT3BlblNTTC9saWIvcGtnY29uZmlnIC4vY29uZmlndXJlIC0td2l0aC1zc2wKKworV2l0aG91dCBwa2ctY29uZmlnIGluc3RhbGxlZCwgdXNlIHRoaXM6CisKKyAgIC4vY29uZmlndXJlIC0td2l0aC1zc2w9L29wdC9PcGVuU1NMCisKK0lmIHlvdSBpbnNpc3Qgb24gZm9yY2luZyBhIGJ1aWxkIHdpdGhvdXQgU1NMIHN1cHBvcnQsIGV2ZW4gdGhvdWdoIHlvdSBtYXkKK2hhdmUgT3BlblNTTCBpbnN0YWxsZWQgaW4geW91ciBzeXN0ZW0sIHlvdSBjYW4gcnVuIGNvbmZpZ3VyZSBsaWtlIHRoaXM6CisKKyAgIC4vY29uZmlndXJlIC0td2l0aG91dC1zc2wKKworSWYgeW91IGhhdmUgT3BlblNTTCBpbnN0YWxsZWQsIGJ1dCB3aXRoIHRoZSBsaWJyYXJpZXMgaW4gb25lIHBsYWNlIGFuZCB0aGUKK2hlYWRlciBmaWxlcyBzb21ld2hlcmUgZWxzZSwgeW91IGhhdmUgdG8gc2V0IHRoZSBMREZMQUdTIGFuZCBDUFBGTEFHUworZW52aXJvbm1lbnQgdmFyaWFibGVzIHByaW9yIHRvIHJ1bm5pbmcgY29uZmlndXJlLiAgU29tZXRoaW5nIGxpa2UgdGhpcyBzaG91bGQKK3dvcms6CisKKyAgICBDUFBGTEFHUz0iLUkvcGF0aC90by9zc2wvaW5jbHVkZSIgTERGTEFHUz0iLUwvcGF0aC90by9zc2wvbGliIiAuL2NvbmZpZ3VyZQorCitJZiB5b3UgaGF2ZSBzaGFyZWQgU1NMIGxpYnMgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IHdoZXJlIHlvdXIgcnVuLXRpbWUKK2xpbmtlciBkb2Vzbid0IGZpbmQgdGhlbSAod2hpY2ggdXN1YWxseSBjYXVzZXMgY29uZmlndXJlIGZhaWx1cmVzKSwgeW91IGNhbgorcHJvdmlkZSB0aGUgLVIgb3B0aW9uIHRvIGxkIG9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgdG8gc2V0IGEgaGFyZC1jb2RlZAorcGF0aCB0byB0aGUgcnVuLXRpbWUgbGlua2VyOgorCisgICAgTERGTEFHUz0tUi91c3IvbG9jYWwvc3NsL2xpYiAuL2NvbmZpZ3VyZSAtLXdpdGgtc3NsCisKKyMjIE1vcmUgT3B0aW9ucworCitUbyBmb3JjZSBhIHN0YXRpYyBsaWJyYXJ5IGNvbXBpbGUsIGRpc2FibGUgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uIGJ5CitydW5uaW5nIGNvbmZpZ3VyZSBsaWtlOgorCisgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLXNoYXJlZAorCitUbyB0ZWxsIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHNraXAgc2VhcmNoaW5nIGZvciB0aHJlYWQtc2FmZSBmdW5jdGlvbnMsIGFkZAorYW4gb3B0aW9uIGxpa2U6CisKKyAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtdGhyZWFkCisKK0lmIHlvdSdyZSBhIGN1cmwgZGV2ZWxvcGVyIGFuZCB1c2UgZ2NjLCB5b3UgbWlnaHQgd2FudCB0byBlbmFibGUgbW9yZSBkZWJ1Zworb3B0aW9ucyB3aXRoIHRoZSBgLS1lbmFibGUtZGVidWdgIG9wdGlvbi4KKworY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgd2hvbGUgcmFuZ2Ugb2YgbGlicmFyaWVzIHRvIHByb3ZpZGUgdmFyaW91cyB1c2VmdWwKK3NlcnZpY2VzLCBhbmQgY29uZmlndXJlIHdpbGwgdHJ5IHRvIGF1dG8tZGV0ZWN0IGEgZGVjZW50IGRlZmF1bHQuIEJ1dCBpZiB5b3UKK3dhbnQgdG8gYWx0ZXIgaXQsIHlvdSBjYW4gc2VsZWN0IGhvdyB0byBkZWFsIHdpdGggZWFjaCBpbmRpdmlkdWFsIGxpYnJhcnkuCisKKyMjIFNlbGVjdCBUTFMgYmFja2VuZAorCitUaGUgZGVmYXVsdCBPcGVuU1NMIGNvbmZpZ3VyZSBjaGVjayB3aWxsIGFsc28gZGV0ZWN0IGFuZCB1c2UgQm9yaW5nU1NMIG9yCitsaWJyZXNzbC4KKworIC0gR251VExTOiBgLS13aXRob3V0LXNzbCAtLXdpdGgtZ251dGxzYC4KKyAtIEN5YXNzbDogYC0td2l0aG91dC1zc2wgLS13aXRoLWN5YXNzbGAKKyAtIE5TUzogYC0td2l0aG91dC1zc2wgLS13aXRoLW5zc2AKKyAtIFBvbGFyU1NMOiBgLS13aXRob3V0LXNzbCAtLXdpdGgtcG9sYXJzc2xgCisgLSBtYmVkVExTOiBgLS13aXRob3V0LXNzbCAtLXdpdGgtbWJlZHRsc2AKKyAtIGF4VExTOiBgLS13aXRob3V0LXNzbCAtLXdpdGgtYXh0bHNgCisgLSBzY2hhbm5lbDogYC0td2l0aG91dC1zc2wgLS13aXRoLXdpbnNzbGAKKyAtIHNlY3VyZSB0cmFuc3BvcnQ6IGAtLXdpdGgtd2luc3NsIC0td2l0aC1kYXJ3aW5zc2xgCisKKyMgV2luZG93cworCisjIyBCdWlsZGluZyBXaW5kb3dzIERMTHMgYW5kIEMgcnVuLXRpbWUgKENSVCkgbGlua2FnZSBpc3N1ZXMKKworIEFzIGEgZ2VuZXJhbCBydWxlLCBidWlsZGluZyBhIERMTCB3aXRoIHN0YXRpYyBDUlQgbGlua2FnZSBpcyBoaWdobHkKKyBkaXNjb3VyYWdlZCwgYW5kIGludGVybWl4aW5nIENSVHMgaW4gdGhlIHNhbWUgYXBwIGlzIHNvbWV0aGluZyB0byBhdm9pZCBhdAorIGFueSBjb3N0LgorCisgUmVhZGluZyBhbmQgY29tcHJlaGVuZGluZyBNaWNyb3NvZnQgS25vd2xlZGdlIEJhc2UgYXJ0aWNsZXMgS0I5NDI0OCBhbmQKKyBLQjE0MDU4NCBpcyBhIG11c3QgZm9yIGFueSBXaW5kb3dzIGRldmVsb3Blci4gRXNwZWNpYWxseSBpbXBvcnRhbnQgaXMgZnVsbAorIHVuZGVyc3RhbmRpbmcgaWYgeW91IGFyZSBub3QgZ29pbmcgdG8gZm9sbG93IHRoZSBhZHZpY2UgZ2l2ZW4gYWJvdmUuCisKKyAtIFtIb3cgVG8gVXNlIHRoZSBDIFJ1bi1UaW1lXShodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi85NDI0OC9lbi11cykKKyAtIFtIb3cgdG8gbGluayB3aXRoIHRoZSBjb3JyZWN0IEMgUnVuLVRpbWUgQ1JUIGxpYnJhcnldKGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzE0MDU4NC9lbi11cykKKyAtIFtQb3RlbnRpYWwgRXJyb3JzIFBhc3NpbmcgQ1JUIE9iamVjdHMgQWNyb3NzIERMTCBCb3VuZGFyaWVzXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zMjM1NDYwKQorCitJZiB5b3VyIGFwcCBpcyBtaXNiZWhhdmluZyBpbiBzb21lIHN0cmFuZ2Ugd2F5LCBvciBpdCBpcyBzdWZmZXJpbmcgZnJvbQorbWVtb3J5IGNvcnJ1cHRpb24sIGJlZm9yZSBhc2tpbmcgZm9yIGZ1cnRoZXIgaGVscCwgcGxlYXNlIHRyeSBmaXJzdCB0bworcmVidWlsZCBldmVyeSBzaW5nbGUgbGlicmFyeSB5b3VyIGFwcCB1c2VzIGFzIHdlbGwgYXMgeW91ciBhcHAgdXNpbmcgdGhlCitkZWJ1ZyBtdWx0aXRocmVhZGVkIGR5bmFtaWMgQyBydW50aW1lLgorCisgSWYgeW91IGdldCBsaW5rYWdlIGVycm9ycyByZWFkIHNlY3Rpb24gNS43IG9mIHRoZSBGQVEgZG9jdW1lbnQuCisKKyMjIE1pbmdXMzIKKworTWFrZSBzdXJlIHRoYXQgTWluR1czMidzIGJpbiBkaXIgaXMgaW4gdGhlIHNlYXJjaCBwYXRoLCBmb3IgZXhhbXBsZToKKworICAgIHNldCBQQVRIPWM6XG1pbmd3MzJcYmluOyVQQVRIJQorCit0aGVuIHJ1biBgbWluZ3czMi1tYWtlIG1pbmd3MzJgIGluIHRoZSByb290IGRpci4gVGhlcmUgYXJlIG90aGVyCittYWtlIHRhcmdldHMgYXZhaWxhYmxlIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBtb3JlIGZlYXR1cmVzLCB1c2U6CisKKyAtIGBtaW5ndzMyLW1ha2UgbWluZ3czMi16bGliYCB0byBidWlsZCB3aXRoIFpsaWIgc3VwcG9ydDsKKyAtIGBtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2wtemxpYmAgdG8gYnVpbGQgd2l0aCBTU0wgYW5kIFpsaWIgZW5hYmxlZDsKKyAtIGBtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2gyLXNzbC16bGliYCB0byBidWlsZCB3aXRoIFNTSDIsIFNTTCwgWmxpYjsKKyAtIGBtaW5ndzMyLW1ha2UgbWluZ3czMi1zc2gyLXNzbC1zc3BpLXpsaWJgIHRvIGJ1aWxkIHdpdGggU1NIMiwgU1NMLCBabGliCisgICBhbmQgU1NQSSBzdXBwb3J0LgorCitJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgbGlua2luZyBsaWJyYXJpZXMgb3IgZmluZGluZyBoZWFkZXIgZmlsZXMsIGJlIHN1cmUKK3RvIHZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCAiTWFrZWZpbGUubTMyIiBmaWxlcyB1c2UgdGhlIHByb3BlciBwYXRocywgYW5kCithZGp1c3QgYXMgbmVjZXNzYXJ5LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZXNlIHBhdGhzIHdpdGgKK2Vudmlyb25tZW50IHZhcmlhYmxlcywgZm9yIGV4YW1wbGU6CisKKyAgICBzZXQgWkxJQl9QQVRIPWM6XHpsaWItMS4yLjgKKyAgICBzZXQgT1BFTlNTTF9QQVRIPWM6XG9wZW5zc2wtMS4wLjJjCisgICAgc2V0IExJQlNTSDJfUEFUSD1jOlxsaWJzc2gyLTEuNi4wCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgd2l0aCBvdGhlciBMREFQIFNES3MgdGhhbiBNUyBMREFQOyBjdXJyZW50bHkKK2l0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGggbmF0aXZlIFdpbjMyIE9wZW5MREFQLCBvciB3aXRoIHRoZSBOb3ZlbGwgQ0xEQVAKK1NESy4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZXNlIHlvdSBuZWVkIHRvIHNldCB0aGVzZSB2YXJzOgorCisgICAgc2V0IExEQVBfU0RLPWM6XG9wZW5sZGFwCisgICAgc2V0IFVTRV9MREFQX09QRU5MREFQPTEKKworb3IgZm9yIHVzaW5nIHRoZSBOb3ZlbGwgU0RLOgorCisgICAgc2V0IFVTRV9MREFQX05PVkVMTD0xCisKK0lmIHlvdSB3YW50IHRvIGVuYWJsZSBMREFQUyBzdXBwb3J0IHRoZW4gc2V0IExEQVBTPTEuCisKKyMjIEN5Z3dpbgorCitBbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSB1bml4IGluc3RhbGxhdGlvbi4gUnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IGluIHRoZQorY3VybCBzb3VyY2UgdHJlZSByb290IHdpdGggYHNoIGNvbmZpZ3VyZWAuIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgc2gKK2V4ZWN1dGFibGUgaW4gL2Jpbi8gb3IgeW91J2xsIHNlZSB0aGUgY29uZmlndXJlIGZhaWwgdG93YXJkIHRoZSBlbmQuCisKK1J1biBgbWFrZWAKKworIyMgQm9ybGFuZCBDKysgY29tcGlsZXIKKworRW5zdXJlIHRoYXQgeW91ciBidWlsZCBlbnZpcm9ubWVudCBpcyBwcm9wZXJseSBzZXQgdXAgdG8gdXNlIHRoZSBjb21waWxlciBhbmQKK2Fzc29jaWF0ZWQgdG9vbHMuIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBpbmNsdWRlIHRoZSBwYXRoIHRvIGJpbgorc3ViZGlyZWN0b3J5IG9mIHlvdXIgY29tcGlsZXIgaW5zdGFsbGF0aW9uLCBlZzogYGM6XEJvcmxhbmRcQkNDNTVcYmluYAorCitJdCBpcyBhZHZpc2FibGUgdG8gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEJDQ0RJUiB0byB0aGUgYmFzZSBwYXRoIG9mIHRoZQorY29tcGlsZXIgaW5zdGFsbGF0aW9uLgorCisgICAgc2V0IEJDQ0RJUj1jOlxCb3JsYW5kXEJDQzU1CisKK0luIG9yZGVyIHRvIGJ1aWxkIGEgcGxhaW4gdmFuaWxsYSB2ZXJzaW9uIG9mIGN1cmwgYW5kIGxpYmN1cmwgcnVuIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgZnJvbSBjdXJsJ3Mgcm9vdCBkaXJlY3Rvcnk6CisKKyAgICBtYWtlIGJvcmxhbmQKKworVG8gYnVpbGQgY3VybCBhbmQgbGliY3VybCB3aXRoIHpsaWIgYW5kIE9wZW5TU0wgc3VwcG9ydCBzZXQgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcyBgWkxJQl9QQVRIYCBhbmQgYE9QRU5TU0xfUEFUSGAgdG8gdGhlIGJhc2Ugc3ViZGlyZWN0b3JpZXMgb2YgdGhlCithbHJlYWR5IGJ1aWx0IHpsaWIgYW5kIE9wZW5TU0wgbGlicmFyaWVzIGFuZCBmcm9tIGN1cmwncyByb290IGRpcmVjdG9yeSBydW4KK2NvbW1hbmQ6CisKKyAgICBtYWtlIGJvcmxhbmQtc3NsLXpsaWIKKworbGliY3VybCBsaWJyYXJ5IHdpbGwgYmUgYnVpbHQgaW4gJ2xpYicgc3ViZGlyZWN0b3J5IHdoaWxlIGN1cmwgdG9vbCBpcyBidWlsdAoraW4gJ3NyYycgc3ViZGlyZWN0b3J5LiBJbiBvcmRlciB0byB1c2UgbGliY3VybCBsaWJyYXJ5IGl0IGlzIGFkdmlzYWJsZSB0bworbW9kaWZ5IGNvbXBpbGVyJ3MgY29uZmlndXJhdGlvbiBmaWxlIGJjYzMyLmNmZyBsb2NhdGVkIGluCitgYzpcQm9ybGFuZFxCQ0M1NVxiaW5gIHRvIHJlZmxlY3QgdGhlIGxvY2F0aW9uIG9mIGxpYnJhcmllcyBpbmNsdWRlIHBhdGhzIGZvcgorZXhhbXBsZSB0aGUgJy1JJyBsaW5lIGNvdWxkIHJlc3VsdCBpbiBzb21ldGhpbmcgbGlrZToKKworICAgIC1JImM6XEJvcmxhbmRcQkNDNTVcaW5jbHVkZTtjOlxjdXJsXGluY2x1ZGU7Yzpcb3BlbnNzbFxpbmMzMiIKKworYmNjMy5jZmcgYC1MYCBsaW5lIGNvdWxkIGFsc28gYmUgbW9kaWZpZWQgdG8gcmVmbGVjdCB0aGUgbG9jYXRpb24gb2Ygb2YKK2xpYmN1cmwgbGlicmFyeSByZXN1bHRpbmcgZm9yIGV4YW1wbGU6CisKKyAgICAtTCJjOlxCb3JsYW5kXEJDQzU1XGxpYjtjOlxjdXJsXGxpYjtjOlxvcGVuc3NsXG91dDMyIgorCitJbiBvcmRlciB0byBidWlsZCBzYW1wbGUgcHJvZ3JhbSBgc2ltcGxlLmNgIGZyb20gdGhlIGRvY3NcZXhhbXBsZXMKK3N1YmRpcmVjdG9yeSBydW4gZm9sbG93aW5nIGNvbW1hbmQgZnJvbSBtZW50aW9uZWQgc3ViZGlyZWN0b3J5OgorCisgICAgYmNjMzIgc2ltcGxlLmMgbGliY3VybC5saWIgY3czMm10LmxpYgorCitJbiBvcmRlciB0byBidWlsZCBzYW1wbGUgcHJvZ3JhbSBzaW1wbGVzc2wuYyBhbiBTU0wgZW5hYmxlZCBsaWJjdXJsIGlzCityZXF1aXJlZCwgYXMgd2VsbCBhcyB0aGUgT3BlblNTTCBsaWJlYXkzMi5saWIgYW5kIHNzbGVheTMyLmxpYiBsaWJyYXJpZXMuCisKKyMjIERpc2FibGluZyBTcGVjaWZpYyBQcm90b2NvbHMgaW4gV2luZG93cyBidWlsZHMKKworVGhlIGNvbmZpZ3VyZSB1dGlsaXR5LCB1bmZvcnR1bmF0ZWx5LCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgV2luZG93cworZW52aXJvbm1lbnQsIHRoZXJlZm9yZSwgeW91IGNhbm5vdCB1c2UgdGhlIHZhcmlvdXMgZGlzYWJsZS1wcm90b2NvbCBvcHRpb25zIG9mCit0aGUgY29uZmlndXJlIHV0aWxpdHkgb24gdGhpcyBwbGF0Zm9ybS4KKworSG93ZXZlciwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZWZpbmVzIHRvIGRpc2FibGUgc3BlY2lmaWMKK3Byb3RvY29sczoKKworIC0gYEhUVFBfT05MWWAgICAgICAgICAgICAgZGlzYWJsZXMgYWxsIHByb3RvY29scyBleGNlcHQgSFRUUAorIC0gYENVUkxfRElTQUJMRV9GVFBgICAgICAgZGlzYWJsZXMgRlRQCisgLSBgQ1VSTF9ESVNBQkxFX0xEQVBgICAgICBkaXNhYmxlcyBMREFQCisgLSBgQ1VSTF9ESVNBQkxFX1RFTE5FVGAgICBkaXNhYmxlcyBURUxORVQKKyAtIGBDVVJMX0RJU0FCTEVfRElDVGAgICAgIGRpc2FibGVzIERJQ1QKKyAtIGBDVVJMX0RJU0FCTEVfRklMRWAgICAgIGRpc2FibGVzIEZJTEUKKyAtIGBDVVJMX0RJU0FCTEVfVEZUUGAgICAgIGRpc2FibGVzIFRGVFAKKyAtIGBDVVJMX0RJU0FCTEVfSFRUUGAgICAgIGRpc2FibGVzIEhUVFAKKyAtIGBDVVJMX0RJU0FCTEVfSU1BUGAgICAgIGRpc2FibGVzIElNQVAKKyAtIGBDVVJMX0RJU0FCTEVfUE9QM2AgICAgIGRpc2FibGVzIFBPUDMKKyAtIGBDVVJMX0RJU0FCTEVfU01UUGAgICAgIGRpc2FibGVzIFNNVFAKKworSWYgeW91IHdhbnQgdG8gc2V0IGFueSBvZiB0aGVzZSBkZWZpbmVzIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworIC0gTW9kaWZ5IGxpYi9jb25maWctd2luMzIuaAorIC0gTW9kaWZ5IGxpYi9jdXJsX3NldHVwLmgKKyAtIE1vZGlmeSBsaWIvTWFrZWZpbGUudmM2CisgLSBNb2RpZnkgdGhlICJQcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMiIGluIHRoZSBsaWJjdXJsIHByb2plY3QKKworTm90ZTogVGhlIHByZS1wcm9jZXNzb3Igc2V0dGluZ3MgY2FuIGJlIGZvdW5kIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERQordW5kZXIgIlByb2plY3QgLT4gU2V0dGluZ3MgLT4gQy9DKysgLT4gR2VuZXJhbCIgaW4gVkM2IGFuZCAiUHJvamVjdCAtPgorUHJvcGVydGllcyAtPiBDb25maWd1cmF0aW9uIFByb3BlcnRpZXMgLT4gQy9DKysgLT4gUHJlcHJvY2Vzc29yIiBpbiBsYXRlcgordmVyc2lvbnMuCisKKyMjIFVzaW5nIEJTRC1zdHlsZSBsd0lQIGluc3RlYWQgb2YgV2luc29jayBUQ1AvSVAgc3RhY2sgaW4gV2luMzIgYnVpbGRzCisKK0luIG9yZGVyIHRvIGNvbXBpbGUgbGliY3VybCBhbmQgY3VybCB1c2luZyBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgaXQgaXMKK25lY2Vzc2FyeSB0byBtYWtlIGRlZmluaXRpb24gb2YgcHJlcHJvY2Vzc29yIHN5bWJvbCBVU0VfTFdJUFNPQ0sgdmlzaWJsZSB0bworbGliY3VybCBhbmQgY3VybCBjb21waWxhdGlvbiBwcm9jZXNzZXMuIFRvIHNldCB0aGlzIGRlZmluaXRpb24geW91IGhhdmUgdGhlCitmb2xsb3dpbmcgYWx0ZXJuYXRpdmVzOgorCisgLSBNb2RpZnkgbGliL2NvbmZpZy13aW4zMi5oIGFuZCBzcmMvY29uZmlnLXdpbjMyLmgKKyAtIE1vZGlmeSBsaWIvTWFrZWZpbGUudmM2CisgLSBNb2RpZnkgdGhlICJQcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMiIGluIHRoZSBsaWJjdXJsIHByb2plY3QKKworTm90ZTogVGhlIHByZS1wcm9jZXNzb3Igc2V0dGluZ3MgY2FuIGJlIGZvdW5kIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERQordW5kZXIgIlByb2plY3QgLT4gU2V0dGluZ3MgLT4gQy9DKysgLT4gR2VuZXJhbCIgaW4gVkM2IGFuZCAiUHJvamVjdCAtPgorUHJvcGVydGllcyAtPiBDb25maWd1cmF0aW9uIFByb3BlcnRpZXMgLT4gQy9DKysgLT4gUHJlcHJvY2Vzc29yIiBpbiBsYXRlcgordmVyc2lvbnMuCisKK09uY2UgdGhhdCBsaWJjdXJsIGhhcyBiZWVuIGJ1aWx0IHdpdGggQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQsIGluCitvcmRlciB0byB1c2UgaXQgd2l0aCB5b3VyIHByb2dyYW0gaXQgaXMgbWFuZGF0b3J5IHRoYXQgeW91ciBwcm9ncmFtIGluY2x1ZGVzCitsd0lQIGhlYWRlciBmaWxlIGA8bHdpcC9vcHQuaD5gIChvciBhbm90aGVyIGx3SVAgaGVhZGVyIHRoYXQgaW5jbHVkZXMgdGhpcykKK2JlZm9yZSBpbmNsdWRpbmcgYW55IGxpYmN1cmwgaGVhZGVyLiBZb3VyIHByb2dyYW0gZG9lcyBub3QgbmVlZCB0aGUKK2BVU0VfTFdJUFNPQ0tgIHByZXByb2Nlc3NvciBkZWZpbml0aW9uIHdoaWNoIGlzIGZvciBsaWJjdXJsIGludGVybmFscyBvbmx5LgorCitDb21waWxhdGlvbiBoYXMgYmVlbiB2ZXJpZmllZCB3aXRoIFtsd0lQCisxLjQuMF0oaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvbHdpcC9sd2lwLTEuNC4wLnppcCkgYW5kCitbY29udHJpYi0xLjQuMF0oaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvbHdpcC9jb250cmliLTEuNC4wLnppcCkuCisKK1RoaXMgQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgbXVzdCBiZSBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbCBnaXZlbgordGhhdCBpdCBoYXMgYmVlbiB2ZXJpZmllZCB0aGF0IGx3SVAgMS40LjAgc3RpbGwgbmVlZHMgc29tZSBwb2xpc2gsIGFuZCBsaWJjdXJsCittaWdodCB5ZXQgbmVlZCBzb21lIGFkZGl0aW9uYWwgYWRqdXN0bWVudCwgY2F2ZWF0IGVtcHRvci4KKworIyMgSW1wb3J0YW50IHN0YXRpYyBsaWJjdXJsIHVzYWdlIG5vdGUKKworV2hlbiBidWlsZGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIHN0YXRpYyBsaWJjdXJsIGxpYnJhcnkgb24gV2luZG93cywKK3lvdSBtdXN0IGFkZCBgLURDVVJMX1NUQVRJQ0xJQmAgdG8geW91ciBgQ0ZMQUdTYC4gIE90aGVyd2lzZSB0aGUgbGlua2VyIHdpbGwKK2xvb2sgZm9yIGR5bmFtaWMgaW1wb3J0IHN5bWJvbHMuCisKKyMjIExlZ2FjeSBXaW5kb3dzIGFuZCBTU0wKKworV2luU1NMIChzcGVjaWZpY2FsbHkgU0NoYW5uZWwgZnJvbSBXaW5kb3dzIFNTUEkpLCBpcyB0aGUgbmF0aXZlIFNTTCBsaWJyYXJ5IGluCitXaW5kb3dzLiBIb3dldmVyLCBXaW5TU0wgaW4gV2luZG93cyA8PSBYUCBpcyB1bmFibGUgdG8gY29ubmVjdCB0byBzZXJ2ZXJzIHRoYXQKK25vIGxvbmdlciBzdXBwb3J0IHRoZSBsZWdhY3kgaGFuZHNoYWtlcyBhbmQgYWxnb3JpdGhtcyB1c2VkIGJ5IHRob3NlCit2ZXJzaW9ucy4gSWYgeW91IHdpbGwgYmUgdXNpbmcgY3VybCBpbiBvbmUgb2YgdGhvc2UgZWFybGllciB2ZXJzaW9ucyBvZgorV2luZG93cyB5b3Ugc2hvdWxkIGNob29zZSBhbm90aGVyIFNTTCBiYWNrZW5kIHN1Y2ggYXMgT3BlblNTTC4KKworIyBBcHBsZSBpT1MgYW5kIE1hYyBPUyBYCisKK09uIG1vZGVybiBBcHBsZSBvcGVyYXRpbmcgc3lzdGVtcywgY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIEFwcGxlJ3MgU1NML1RMUworaW1wbGVtZW50YXRpb24sIFNlY3VyZSBUcmFuc3BvcnQsIGluc3RlYWQgb2YgT3BlblNTTC4gVG8gYnVpbGQgd2l0aCBTZWN1cmUKK1RyYW5zcG9ydCBmb3IgU1NML1RMUywgdXNlIHRoZSBjb25maWd1cmUgb3B0aW9uIGAtLXdpdGgtZGFyd2luc3NsYC4gKEl0IGlzIG5vdAorbmVjZXNzYXJ5IHRvIHVzZSB0aGUgb3B0aW9uIGAtLXdpdGhvdXQtc3NsYC4pIFRoaXMgZmVhdHVyZSByZXF1aXJlcyBpT1MgNS4wIG9yCitsYXRlciwgb3IgT1MgWCAxMC41ICgiTGVvcGFyZCIpIG9yIGxhdGVyLgorCitXaGVuIFNlY3VyZSBUcmFuc3BvcnQgaXMgaW4gdXNlLCB0aGUgY3VybCBvcHRpb25zIGAtLWNhY2VydGAgYW5kIGAtLWNhcGF0aGAKK2FuZCB0aGVpciBsaWJjdXJsIGVxdWl2YWxlbnRzLCB3aWxsIGJlIGlnbm9yZWQsIGJlY2F1c2UgU2VjdXJlIFRyYW5zcG9ydCB1c2VzCit0aGUgY2VydGlmaWNhdGVzIHN0b3JlZCBpbiB0aGUgS2V5Y2hhaW4gdG8gZXZhbHVhdGUgd2hldGhlciBvciBub3QgdG8gdHJ1c3QKK3RoZSBzZXJ2ZXIuIFRoaXMsIG9mIGNvdXJzZSwgaW5jbHVkZXMgdGhlIHJvb3QgY2VydGlmaWNhdGVzIHRoYXQgc2hpcCB3aXRoIHRoZQorT1MuIFRoZSBgLS1jZXJ0YCBhbmQgYC0tZW5naW5lYCBvcHRpb25zLCBhbmQgdGhlaXIgbGliY3VybCBlcXVpdmFsZW50cywgYXJlCitjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBpbiBjdXJsIHdpdGggU2VjdXJlIFRyYW5zcG9ydC4KKworRm9yIE9TIFggdXNlcnM6IEluIE9TIFggMTAuOCAoIk1vdW50YWluIExpb24iKSwgQXBwbGUgbWFkZSBhIG1ham9yIG92ZXJoYXVsIHRvCit0aGUgU2VjdXJlIFRyYW5zcG9ydCBBUEkgdGhhdCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBhZGRlZCBzdXBwb3J0IGZvciB0aGUgbmV3ZXIKK1RMUyAxLjEgYW5kIDEuMiBwcm90b2NvbHMuIFRvIGdldCBjdXJsIHRvIHN1cHBvcnQgVExTIDEuMSBhbmQgMS4yLCB5b3UgbXVzdAorYnVpbGQgY3VybCBvbiBNb3VudGFpbiBMaW9uIG9yIGxhdGVyLCBvciBieSB1c2luZyB0aGUgZXF1aXZhbGVudCBTREsuIElmIHlvdQorc2V0IHRoZSBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUYCBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIHRvIGFuIGVhcmxpZXIKK3ZlcnNpb24gb2YgT1MgWCBwcmlvciB0byBidWlsZGluZyBjdXJsLCB0aGVuIGN1cmwgd2lsbCB1c2UgdGhlIG5ldyBTZWN1cmUKK1RyYW5zcG9ydCBBUEkgb24gTW91bnRhaW4gTGlvbiBhbmQgbGF0ZXIsIGFuZCBmYWxsIGJhY2sgb24gdGhlIG9sZGVyIEFQSSB3aGVuCit0aGUgc2FtZSBjdXJsIGJpbmFyeSBpcyBleGVjdXRlZCBvbiBvbGRlciBjYXRzLiBGb3IgZXhhbXBsZSwgcnVubmluZyB0aGVzZQorY29tbWFuZHMgaW4gY3VybCdzIGRpcmVjdG9yeSBpbiB0aGUgc2hlbGwgd2lsbCBidWlsZCB0aGUgY29kZSBzdWNoIHRoYXQgaXQKK3dpbGwgcnVuIG9uIGNhdHMgYXMgb2xkIGFzIE9TIFggMTAuNiAoIlNub3cgTGVvcGFyZCIpICh1c2luZyBiYXNoKToKKworICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9IjEwLjYiCisgICAgLi9jb25maWd1cmUgLS13aXRoLWRhcndpbnNzbAorICAgIG1ha2UKKworIyBDcm9zcyBjb21waWxlCisKK0Rvd25sb2FkIGFuZCB1bnBhY2sgdGhlIGN1cmwgcGFja2FnZS4KKworJ2NkJyB0byB0aGUgbmV3IGRpcmVjdG9yeS4gKGUuZy4gYGNkIGN1cmwtNy4xMi4zYCkKKworU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwb2ludCB0byB0aGUgY3Jvc3MtY29tcGlsZSB0b29sY2hhaW4gYW5kIGNhbGwKK2NvbmZpZ3VyZSB3aXRoIGFueSBvcHRpb25zIHlvdSBuZWVkLiAgQmUgc3VyZSBhbmQgc3BlY2lmeSB0aGUgYC0taG9zdGAgYW5kCitgLS1idWlsZGAgcGFyYW1ldGVycyBhdCBjb25maWd1cmF0aW9uIHRpbWUuICBUaGUgZm9sbG93aW5nIHNjcmlwdCBpcyBhbgorZXhhbXBsZSBvZiBjcm9zcy1jb21waWxpbmcgZm9yIHRoZSBJQk0gNDA1R1AgUG93ZXJQQyBwcm9jZXNzb3IgdXNpbmcgdGhlCit0b29sY2hhaW4gZnJvbSBNb250ZVZpc3RhIGZvciBIYXJkaGF0IExpbnV4LgorCisgICAgIyEgL2Jpbi9zaAorCisgICAgZXhwb3J0IFBBVEg9JFBBVEg6L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1L2JpbgorICAgIGV4cG9ydCBDUFBGTEFHUz0iLUkvb3B0L2hhcmRoYXQvZGV2a2l0L3BwYy80MDUvdGFyZ2V0L3Vzci9pbmNsdWRlIgorICAgIGV4cG9ydCBBUj1wcGNfNDA1LWFyCisgICAgZXhwb3J0IEFTPXBwY180MDUtYXMKKyAgICBleHBvcnQgTEQ9cHBjXzQwNS1sZAorICAgIGV4cG9ydCBSQU5MSUI9cHBjXzQwNS1yYW5saWIKKyAgICBleHBvcnQgQ0M9cHBjXzQwNS1nY2MKKyAgICBleHBvcnQgTk09cHBjXzQwNS1ubQorCisgICAgLi9jb25maWd1cmUgLS10YXJnZXQ9cG93ZXJwYy1oYXJkaGF0LWxpbnV4CisgICAgICAgIC0taG9zdD1wb3dlcnBjLWhhcmRoYXQtbGludXgKKyAgICAgICAgLS1idWlsZD1pNTg2LXBjLWxpbnV4LWdudQorICAgICAgICAtLXByZWZpeD0vb3B0L2hhcmRoYXQvZGV2a2l0L3BwYy80MDUvdGFyZ2V0L3Vzci9sb2NhbAorICAgICAgICAtLWV4ZWMtcHJlZml4PS91c3IvbG9jYWwKKworWW91IG1heSBhbHNvIG5lZWQgdG8gcHJvdmlkZSBhIHBhcmFtZXRlciBsaWtlIGAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbWAgdG8KK2NvbmZpZ3VyZSBhcyBpdCBjYW5ub3QgZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGluZworZGV2aWNlIGZvciBhIHRhcmdldCBzeXN0ZW0uICBUaGUgYC0tcHJlZml4YCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXJlIGN1cmwKK3dpbGwgYmUgaW5zdGFsbGVkLiAgSWYgYGNvbmZpZ3VyZWAgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgZG8gYG1ha2VgIGFuZCBgbWFrZQoraW5zdGFsbGAgYXMgdXN1YWwuCisKK0luIHNvbWUgY2FzZXMsIHlvdSBtYXkgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGUgYWJvdmUgY29tbWFuZHMgdG8gYXMgbGl0dGxlIGFzOgorCisgICAgLi9jb25maWd1cmUgLS1ob3N0PUFSQ0gtT1MKKworIyBSRURVQ0lORyBTSVpFCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZgorbGliY3VybCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIHdoZXJlIGJpbmFyeSBzaXplIGlzIGFuIGltcG9ydGFudCBmYWN0b3IuCitGaXJzdCwgYmUgc3VyZSB0byBzZXQgdGhlIENGTEFHUyB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyaW5nIHdpdGggYW55IHJlbGV2YW50Citjb21waWxlciBvcHRpbWl6YXRpb24gZmxhZ3MgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkuICBGb3IgZ2NjLCB0aGlzCit3b3VsZCBtZWFuIGF0IG1pbmltdW0gdGhlIC1PcyBvcHRpb24sIGFuZCBwb3RlbnRpYWxseSB0aGUgYC1tYXJjaD1YYCwKK2AtbWR5bmFtaWMtbm8tcGljYCBhbmQgYC1mbHRvYCBvcHRpb25zIGFzIHdlbGwsIGUuZy4KKworICAgIC4vY29uZmlndXJlIENGTEFHUz0nLU9zJyBMREZMQUdTPSctV2wsLUJzeW1ib2xpYycuLi4KKworTm90ZSB0aGF0IG5ld2VyIGNvbXBpbGVycyBvZnRlbiBwcm9kdWNlIHNtYWxsZXIgY29kZSB0aGFuIG9sZGVyIHZlcnNpb25zCitkdWUgdG8gaW1wcm92ZWQgb3B0aW1pemF0aW9uLgorCitCZSBzdXJlIHRvIHNwZWNpZnkgYXMgbWFueSBgLS1kaXNhYmxlLWAgYW5kIGAtLXdpdGhvdXQtYCBmbGFncyBvbiB0aGUKK2NvbmZpZ3VyZSBjb21tYW5kLWxpbmUgYXMgeW91IGNhbiB0byBkaXNhYmxlIGFsbCB0aGUgbGliY3VybCBmZWF0dXJlcyB0aGF0IHlvdQora25vdyB5b3VyIGFwcGxpY2F0aW9uIGlzIG5vdCBnb2luZyB0byBuZWVkLiAgQmVzaWRlcyBzcGVjaWZ5aW5nIHRoZQorYC0tZGlzYWJsZS1QUk9UT0NPTGAgZmxhZ3MgZm9yIGFsbCB0aGUgdHlwZXMgb2YgVVJMcyB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbm90Cit1c2UsIGhlcmUgYXJlIHNvbWUgb3RoZXIgZmxhZ3MgdGhhdCBjYW4gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBsaWJyYXJ5OgorCisgLSBgLS1kaXNhYmxlLWFyZXNgIChkaXNhYmxlcyBzdXBwb3J0IGZvciB0aGUgQy1BUkVTIEROUyBsaWJyYXJ5KQorIC0gYC0tZGlzYWJsZS1jb29raWVzYCAoZGlzYWJsZXMgc3VwcG9ydCBmb3IgSFRUUCBjb29raWVzKQorIC0gYC0tZGlzYWJsZS1jcnlwdG8tYXV0aGAgKGRpc2FibGVzIEhUVFAgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbikKKyAtIGAtLWRpc2FibGUtaXB2NmAgKGRpc2FibGVzIHN1cHBvcnQgZm9yIElQdjYpCisgLSBgLS1kaXNhYmxlLW1hbnVhbGAgKGRpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBidWlsdC1pbiBkb2N1bWVudGF0aW9uKQorIC0gYC0tZGlzYWJsZS1wcm94eWAgKGRpc2FibGVzIHN1cHBvcnQgZm9yIEhUVFAgYW5kIFNPQ0tTIHByb3hpZXMpCisgLSBgLS1kaXNhYmxlLXVuaXgtc29ja2V0c2AgKGRpc2FibGVzIHN1cHBvcnQgZm9yIFVOSVggc29ja2V0cykKKyAtIGAtLWRpc2FibGUtdmVyYm9zZWAgKGVsaW1pbmF0ZXMgZGVidWdnaW5nIHN0cmluZ3MgYW5kIGVycm9yIGNvZGUgc3RyaW5ncykKKyAtIGAtLWRpc2FibGUtdmVyc2lvbmVkLXN5bWJvbHNgIChkaXNhYmxlcyBzdXBwb3J0IGZvciB2ZXJzaW9uZWQgc3ltYm9scykKKyAtIGAtLWVuYWJsZS1oaWRkZW4tc3ltYm9sc2AgKGVsaW1pbmF0ZXMgdW5uZWVkZWQgc3ltYm9scyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkpCisgLSBgLS13aXRob3V0LWxpYmlkbmAgKGRpc2FibGVzIHN1cHBvcnQgZm9yIHRoZSBsaWJpZG4gRE5TIGxpYnJhcnkpCisgLSBgLS13aXRob3V0LWxpYnJ0bXBgIChkaXNhYmxlcyBzdXBwb3J0IGZvciBSVE1QKQorIC0gYC0td2l0aG91dC1zc2xgIChkaXNhYmxlcyBzdXBwb3J0IGZvciBTU0wvVExTKQorIC0gYC0td2l0aG91dC16bGliYCAoZGlzYWJsZXMgc3VwcG9ydCBmb3Igb24tdGhlLWZseSBkZWNvbXByZXNzaW9uKQorCitUaGUgR05VIGNvbXBpbGVyIGFuZCBsaW5rZXIgaGF2ZSBhIG51bWJlciBvZiBvcHRpb25zIHRoYXQgY2FuIHJlZHVjZSB0aGUKK3NpemUgb2YgdGhlIGxpYmN1cmwgZHluYW1pYyBsaWJyYXJpZXMgb24gc29tZSBwbGF0Zm9ybXMgZXZlbiBmdXJ0aGVyLgorU3BlY2lmeSB0aGVtIGJ5IHByb3ZpZGluZyBhcHByb3ByaWF0ZSBDRkxBR1MgYW5kIExERkxBR1MgdmFyaWFibGVzIG9uIHRoZQorY29uZmlndXJlIGNvbW1hbmQtbGluZSwgZS5nLgorCisgICAgQ0ZMQUdTPSItT3MgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMKKyAgICAgICAgICAgIC1mbm8tdW53aW5kLXRhYmxlcyAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIC1mbHRvIgorICAgIExERkxBR1M9Ii1XbCwtcyAtV2wsLUJzeW1ib2xpYyAtV2wsLS1nYy1zZWN0aW9ucyIKKworQmUgc3VyZSBhbHNvIHRvIHN0cmlwIGRlYnVnZ2luZyBzeW1ib2xzIGZyb20geW91ciBiaW5hcmllcyBhZnRlciBjb21waWxpbmcKK3VzaW5nICdzdHJpcCcgKG9yIHRoZSBhcHByb3ByaWF0ZSB2YXJpYW50IGlmIGNyb3NzLWNvbXBpbGluZykuICBJZiBzcGFjZSBpcworcmVhbGx5IHRpZ2h0LCB5b3UgbWF5IGJlIGFibGUgdG8gcmVtb3ZlIHNvbWUgdW5uZWVkZWQgc2VjdGlvbnMgb2YgdGhlIHNoYXJlZAorbGlicmFyeSB1c2luZyB0aGUgLVIgb3B0aW9uIHRvIG9iamNvcHkgKGUuZy4gdGhlIC5jb21tZW50IHNlY3Rpb24pLgorCitVc2luZyB0aGVzZSB0ZWNobmlxdWVzIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGJhc2ljIEhUVFAtb25seSBzaGFyZWQKK2xpYmN1cmwgbGlicmFyeSBmb3IgaTM4NiBMaW51eCBwbGF0Zm9ybXMgdGhhdCBpcyBvbmx5IDExMyBLaUIgaW4gc2l6ZSwgYW5kIGFuCitGVFAtb25seSBsaWJyYXJ5IHRoYXQgaXMgMTEzIEtpQiBpbiBzaXplIChhcyBvZiBsaWJjdXJsIHZlcnNpb24gNy41MC4zLCB1c2luZworZ2NjIDUuNC4wKS4KKworWW91IG1heSBmaW5kIHRoYXQgc3RhdGljYWxseSBsaW5raW5nIGxpYmN1cmwgdG8geW91ciBhcHBsaWNhdGlvbiB3aWxsIHJlc3VsdAoraW4gYSBsb3dlciB0b3RhbCBzaXplIHRoYW4gZHluYW1pY2FsbHkgbGlua2luZy4KKworTm90ZSB0aGF0IHRoZSBjdXJsIHRlc3QgaGFybmVzcyBjYW4gZGV0ZWN0IHRoZSB1c2Ugb2Ygc29tZSwgYnV0IG5vdCBhbGwsIG9mCit0aGUgYC0tZGlzYWJsZWAgc3RhdGVtZW50cyBzdWdnZXN0ZWQgYWJvdmUuIFVzZSB3aWxsIGNhdXNlIHRlc3RzIHJlbHlpbmcgb24KK3Rob3NlIGZlYXR1cmVzIHRvIGZhaWwuICBUaGUgdGVzdCBoYXJuZXNzIGNhbiBiZSBtYW51YWxseSBmb3JjZWQgdG8gc2tpcCB0aGUKK3JlbGV2YW50IHRlc3RzIGJ5IHNwZWNpZnlpbmcgY2VydGFpbiBrZXkgd29yZHMgb24gdGhlIHJ1bnRlc3RzLnBsIGNvbW1hbmQKK2xpbmUuICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGFwcHJvcHJpYXRlIGtleSB3b3JkczoKKworIC0gYC0tZGlzYWJsZS1jb29raWVzYCAgICAgICAgICAhY29va2llcworIC0gYC0tZGlzYWJsZS1tYW51YWxgICAgICAgICAgICAhLS1tYW51YWwKKyAtIGAtLWRpc2FibGUtcHJveHlgICAgICAgICAgICAgIUhUVFBcIHByb3h5ICFwcm94eXR1bm5lbCAhU09DS1M0ICFTT0NLUzUKKworIyBQT1JUUworCitUaGlzIGlzIGEgcHJvYmFibHkgaW5jb21wbGV0ZSBsaXN0IG9mIGtub3duIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtcwordGhhdCBjdXJsIGhhcyBiZWVuIGNvbXBpbGVkIGZvci4gSWYgeW91IGtub3cgYSBzeXN0ZW0gY3VybCBjb21waWxlcyBhbmQKK3J1bnMgb24sIHRoYXQgaXNuJ3QgbGlzdGVkLCBwbGVhc2UgbGV0IHVzIGtub3chCisKKyAgLSBBbHBoYSBERUMgT1NGIDQKKyAgLSBBbHBoYSBEaWdpdGFsIFVOSVggdjMuMgorICAtIEFscGhhIEZyZWVCU0QgNC4xLCA0LjUKKyAgLSBBbHBoYSBMaW51eCAyLjIsIDIuNAorICAtIEFscGhhIE5ldEJTRCAxLjUuMgorICAtIEFscGhhIE9wZW5CU0QgMy4wCisgIC0gQWxwaGEgT3BlblZNUyBWNy4xLTFIMgorICAtIEFscGhhIFRydTY0IHY1LjAgNS4xCisgIC0gQVZSMzIgTGludXgKKyAgLSBBUk0gQW5kcm9pZCAxLjUsIDIuMSwgMi4zLCAzLjIsIDQueAorICAtIEFSTSBJTlRFR1JJVFkKKyAgLSBBUk0gaU9TCisgIC0gQ2VsbCBMaW51eAorICAtIENlbGwgQ2VsbCBPUworICAtIEhQLVBBIEhQLVVYIDkuWCAxMC5YIDExLlgKKyAgLSBIUC1QQSBMaW51eAorICAtIEhQMzAwMCBNUEUvaVgKKyAgLSBNaWNyb0JsYXplIHVDbGludXgKKyAgLSBNSVBTIElSSVggNi4yLCA2LjUKKyAgLSBNSVBTIExpbnV4CisgIC0gT1MvNDAwCisgIC0gUG9ja2V0IFBDL1dpbiBDRSAzLjAKKyAgLSBQb3dlciBBSVggMy4yLjUsIDQuMiwgNC4zLjEsIDQuMy4yLCA1LjEsIDUuMgorICAtIFBvd2VyUEMgRGFyd2luIDEuMAorICAtIFBvd2VyUEMgSU5URUdSSVRZCisgIC0gUG93ZXJQQyBMaW51eAorICAtIFBvd2VyUEMgTWFjIE9TIDkKKyAgLSBQb3dlclBDIE1hYyBPUyBYCisgIC0gU0g0IExpbnV4IDIuNi5YCisgIC0gU0g0IE9TMjEKKyAgLSBTSU5JWC1aIHY1CisgIC0gU3BhcmMgTGludXgKKyAgLSBTcGFyYyBTb2xhcmlzIDIuNCwgMi41LCAyLjUuMSwgMi42LCA3LCA4LCA5LCAxMAorICAtIFNwYXJjIFN1bk9TIDQuMS5YCisgIC0gU3Ryb25nQVJNIChhbmQgb3RoZXIgQVJNKSBSSVNDIE9TIDMuMSwgNC4wMgorICAtIFN0cm9uZ0FSTS9BUk03L0FSTTkgTGludXggMi40LCAyLjYKKyAgLSBTdHJvbmdBUk0gTmV0QlNEIDEuNC4xCisgIC0gU3ltYmlhbiBPUyAoUC5JLlAuUy4pIDkueAorICAtIFRQRgorICAtIFVsdHJpeCA0LjNhCisgIC0gVU5JQ09TIDkuMAorICAtIGkzODYgQmVPUworICAtIGkzODYgRE9TCisgIC0gaTM4NiBlQ29zIDEuMy4xCisgIC0gaTM4NiBFc2l4IDQuMQorICAtIGkzODYgRnJlZUJTRAorICAtIGkzODYgSFVSRAorICAtIGkzODYgSGFpa3UgT1MKKyAgLSBpMzg2IExpbnV4IDEuMywgMi4wLCAyLjIsIDIuMywgMi40LCAyLjYKKyAgLSBpMzg2IE1hYyBPUyBYCisgIC0gaTM4NiBNSU5JWCAzLjEKKyAgLSBpMzg2IE5ldEJTRAorICAtIGkzODYgTm92ZWxsIE5ldFdhcmUKKyAgLSBpMzg2IE9TLzIKKyAgLSBpMzg2IE9wZW5CU0QKKyAgLSBpMzg2IFFOWCA2CisgIC0gaTM4NiBTQ08gdW5peAorICAtIGkzODYgU29sYXJpcyAyLjcKKyAgLSBpMzg2IFdpbmRvd3MgOTUsIDk4LCBNRSwgTlQsIDIwMDAsIFhQLCAyMDAzCisgIC0gaTQ4NiBuY3Itc3lzdjQuMy4wMyAoTkNSIE1QLVJBUykKKyAgLSBpYTY0IExpbnV4IDIuMy45OQorICAtIG02OGsgQW1pZ2FPUyAzCisgIC0gbTY4ayBMaW51eAorICAtIG02OGsgdUNsaW51eAorICAtIG02OGsgT3BlbkJTRAorICAtIG04OGsgZGctZGd1eDUuNFIzLjAwCisgIC0gczM5MCBMaW51eAorICAtIHg4Nl82NCBMaW51eAorICAtIFhTY2FsZS9QWEEyNTAgTGludXggMi40CisgIC0gTmlvcyBJSSB1Q2xpbnV4CmRpZmYgLS1naXQgYS9kb2NzL0lOVEVSTkFMUyBiL2RvY3MvSU5URVJOQUxTLm1kCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIGRvY3MvSU5URVJOQUxTCnJlbmFtZSB0byBkb2NzL0lOVEVSTkFMUy5tZAppbmRleCA1NjVkOWRmLi43N2I5OTNlIDEwMDY0NAotLS0gYS9kb2NzL0lOVEVSTkFMUworKysgYi9kb2NzL0lOVEVSTkFMUy5tZApAQCAtMSw1ICsxLDUgQEAKLVRhYmxlIG9mIENvbnRlbnRzCi09PT09PT09PT09PT09PT09PQorY3VybCBpbnRlcm5hbHMKKz09PT09PT09PT09PT09CiAKICAtIFtJbnRyb10oI2ludHJvKQogIC0gW2dpdF0oI2dpdCkKQEAgLTQwLDggKzQwLDggQEAKICAtIFtTdHJ1Y3RzIGluIGxpYmN1cmxdKCNzdHJ1Y3RzKQogCiA8YSBuYW1lPSJpbnRybyI+PC9hPgotY3VybCBpbnRlcm5hbHMKLT09PT09PT09PT09PT09CitJbnRybworPT09PT0KIAogIFRoaXMgcHJvamVjdCBpcyBzcGxpdCBpbiB0d28uIFRoZSBsaWJyYXJ5IGFuZCB0aGUgY2xpZW50LiBUaGUgY2xpZW50IHBhcnQKICB1c2VzIHRoZSBsaWJyYXJ5LCBidXQgdGhlIGxpYnJhcnkgaXMgZGVzaWduZWQgdG8gYWxsb3cgb3RoZXIgYXBwbGljYXRpb25zIHRvCkBAIC0xNzQsNyArMTc0LDcgQEAKICByYXRoZXIgc21hbGwgYW5kIGVhc3ktdG8tZm9sbG93LiBBbGwgdGhlIG9uZXMgcHJlZml4ZWQgd2l0aCBgY3VybF9lYXN5YCBhcmUKICBwdXQgaW4gdGhlIGxpYi9lYXN5LmMgZmlsZS4KIAotIGBjdXJsX2dsb2JhbF9pbml0XygpYCBhbmQgYGN1cmxfZ2xvYmFsX2NsZWFudXAoKWAgc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUKKyBgY3VybF9nbG9iYWxfaW5pdCgpYCBhbmQgYGN1cmxfZ2xvYmFsX2NsZWFudXAoKWAgc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUKICBhcHBsaWNhdGlvbiB0byBpbml0aWFsaXplIGFuZCBjbGVhbiB1cCBnbG9iYWwgc3R1ZmYgaW4gdGhlIGxpYnJhcnkuIEFzIG9mCiAgdG9kYXksIGl0IGNhbiBoYW5kbGUgdGhlIGdsb2JhbCBTU0wgaW5pdGluZyBpZiBTU0wgaXMgZW5hYmxlZCBhbmQgaXQgY2FuIGluaXQKICB0aGUgc29ja2V0IGxheWVyIG9uIHdpbmRvd3MgbWFjaGluZXMuIGxpYmN1cmwgaXRzZWxmIGhhcyBubyAiZ2xvYmFsIiBzY29wZS4KQEAgLTE4NCwxNCArMTg0LDE0IEBACiAKICBbIGBjdXJsX2Vhc3lfaW5pdCgpYF1bMl0gYWxsb2NhdGVzIGFuIGludGVybmFsIHN0cnVjdCBhbmQgbWFrZXMgc29tZQogIGluaXRpYWxpemF0aW9ucy4gIFRoZSByZXR1cm5lZCBoYW5kbGUgZG9lcyBub3QgcmV2ZWFsIGludGVybmFscy4gVGhpcyBpcyB0aGUKLSAnQ3VybF9lYXN5JyBzdHJ1Y3Qgd2hpY2ggd29ya3MgYXMgYW4gImFuY2hvciIgc3RydWN0IGZvciBhbGwgYGN1cmxfZWFzeWAKKyBgQ3VybF9lYXN5YCBzdHJ1Y3Qgd2hpY2ggd29ya3MgYXMgYW4gImFuY2hvciIgc3RydWN0IGZvciBhbGwgYGN1cmxfZWFzeWAKICBmdW5jdGlvbnMuIEFsbCBjb25uZWN0aW9ucyBwZXJmb3JtZWQgd2lsbCBnZXQgY29ubmVjdC1zcGVjaWZpYyBkYXRhIGFsbG9jYXRlZAogIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaW5ncyByZWxhdGVkIHRvIHBhcnRpY3VsYXIgY29ubmVjdGlvbnMvcmVxdWVzdHMuCiAKICBbYGN1cmxfZWFzeV9zZXRvcHQoKWBdWzFdIHRha2VzIHRocmVlIGFyZ3VtZW50cywgd2hlcmUgdGhlIG9wdGlvbiBzdHVmZiBtdXN0CiAgYmUgcGFzc2VkIGluIHBhaXJzOiB0aGUgcGFyYW1ldGVyLUlEIGFuZCB0aGUgcGFyYW1ldGVyLXZhbHVlLiBUaGUgbGlzdCBvZgogIG9wdGlvbnMgaXMgZG9jdW1lbnRlZCBpbiB0aGUgbWFuIHBhZ2UuIFRoaXMgZnVuY3Rpb24gbWFpbmx5IHNldHMgdGhpbmdzIGluCi0gdGhlICdDdXJsX2Vhc3knIHN0cnVjdC4KKyB0aGUgYEN1cmxfZWFzeWAgc3RydWN0LgogCiAgYGN1cmxfZWFzeV9wZXJmb3JtKClgIGlzIGp1c3QgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIHRoZSBtdWx0aQogIEFQSS4gIEl0IGJhc2ljYWxseSBjYWxscyBgY3VybF9tdWx0aV9pbml0KClgLCBgY3VybF9tdWx0aV9hZGRfaGFuZGxlKClgLApAQCAtMjE4LDcgKzIxOCw3IEBACiAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhlcmUncyBhbiBhbGxvY2F0ZWQgYW5kIGluaXRpYXRlZCAnY29ubmVjdGRhdGEnCiAgICBzdHJ1Y3QgdGhhdCBpcyB1c2VkIGZvciB0aGlzIHBhcnRpY3VsYXIgY29ubmVjdGlvbiBvbmx5IChhbHRob3VnaCB0aGVyZSBtYXkKICAgIGJlIHNldmVyYWwgcmVxdWVzdHMgcGVyZm9ybWVkIG9uIHRoZSBzYW1lIGNvbm5lY3QpLiBBIGJ1bmNoIG9mIHRoaW5ncyBhcmUKLSAgIGluaXRlZC9pbmhlcml0ZWQgZnJvbSB0aGUgQ3VybF9lYXN5IHN0cnVjdC4KKyAgIGluaXRlZC9pbmhlcml0ZWQgZnJvbSB0aGUgYEN1cmxfZWFzeWAgc3RydWN0LgogCiA8YSBuYW1lPSJDdXJsX2RvIj48L2E+CiBDdXJsX2RvKCkKQEAgLTM4NSwxMSArMzg1LDExIEBACiAgVGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBzdXBwb3J0IGluIGxpYmN1cmwgcmVxdWlyZXMgc29tZSBjb25zaWRlcmF0aW9ucyBvbgogIGhvdyB0byBkbyB0aGluZ3MgaW5zaWRlIG9mIHRoZSBsaWJyYXJ5LgogCi0gLSBUaGUgJ0N1cmxfZWFzeScgc3RydWN0IHJldHVybmVkIGluIHRoZSBbYGN1cmxfZWFzeV9pbml0KClgXVsyXSBjYWxsCisgLSBUaGUgYEN1cmxfZWFzeWAgc3RydWN0IHJldHVybmVkIGluIHRoZSBbYGN1cmxfZWFzeV9pbml0KClgXVsyXSBjYWxsCiAgICBtdXN0IG5ldmVyIGhvbGQgY29ubmVjdGlvbi1vcmllbnRlZCBkYXRhLiBJdCBpcyBtZWFudCB0byBob2xkIHRoZSByb290IGRhdGEKICAgIGFzIHdlbGwgYXMgYWxsIHRoZSBvcHRpb25zIGV0YyB0aGF0IHRoZSBsaWJyYXJ5LXVzZXIgbWF5IGNob29zZS4KIAotIC0gVGhlICdDdXJsX2Vhc3knIHN0cnVjdCBob2xkcyB0aGUgImNvbm5lY3Rpb24gY2FjaGUiIChhbiBhcnJheSBvZgorIC0gVGhlIGBDdXJsX2Vhc3lgIHN0cnVjdCBob2xkcyB0aGUgImNvbm5lY3Rpb24gY2FjaGUiIChhbiBhcnJheSBvZgogICAgcG9pbnRlcnMgdG8gJ2Nvbm5lY3RkYXRhJyBzdHJ1Y3RzKS4KIAogIC0gVGhpcyBlbmFibGVzIHRoZSAnY3VybCBoYW5kbGUnIHRvIGJlIHJldXNlZCBvbiBzdWJzZXF1ZW50IHRyYW5zZmVycy4KQEAgLTQ4NSw3ICs0ODUsNyBAQAogIG1haW4oKSByZXNpZGVzIGluIGBzcmMvdG9vbF9tYWluLmNgLgogCiAgYHNyYy90b29sX2h1Z2VoZWxwLmNgIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBta2hlbHAucGwgcGVybCBzY3JpcHQKLSB0byBkaXNwbGF5IHRoZSBjb21wbGV0ZSAibWFudWFsIiBhbmQgdGhlIHNyYy90b29sX3VybGdsb2IuYyBmaWxlIGhvbGRzIHRoZQorIHRvIGRpc3BsYXkgdGhlIGNvbXBsZXRlICJtYW51YWwiIGFuZCB0aGUgYHNyYy90b29sX3VybGdsb2IuY2AgZmlsZSBob2xkcyB0aGUKICBmdW5jdGlvbnMgdXNlZCBmb3IgdGhlIFVSTC0iZ2xvYmJpbmciIHN1cHBvcnQuIEdsb2JiaW5nIGluIHRoZSBzZW5zZSB0aGF0IHRoZQogIHt9IGFuZCBbXSBleHBhbnNpb24gc3R1ZmYgaXMgdGhlcmUuCiAKQEAgLTU4OSw3ICs1ODksNyBAQAogYGN1cmxfb2ZmX3RgCiA9PT09PT09PT09CiAKLSBjdXJsX29mZl90IGlzIGEgZGF0YSB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBleHRlcm5hbCBsaWJjdXJsIGluY2x1ZGUKKyBgY3VybF9vZmZfdGAgaXMgYSBkYXRhIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGV4dGVybmFsIGxpYmN1cmwgaW5jbHVkZQogIGhlYWRlcnMuIEl0IGlzIHRoZSB0eXBlIG1lYW50IHRvIGJlIHVzZWQgZm9yIHRoZSBbYGN1cmxfZWFzeV9zZXRvcHQoKWBdWzFdCiAgb3B0aW9ucyB0aGF0IGVuZCB3aXRoIExBUkdFLiBUaGUgdHlwZSBpcyA2NGJpdCBsYXJnZSBvbiBtb3N0IG1vZGVybgogIHBsYXRmb3Jtcy4KQEAgLTYwNywxMCArNjA3LDEwIEBACiAKIGBjdXJseF9zdHJ0b29mZnQoKWAKIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIEEgbWFjcm8gdGhhdCBjb252ZXJ0cyBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtYmVyIHRvIGEgY3VybF9vZmZfdCBudW1iZXIuCi0gICBUaGlzIG1pZ2h0IHVzZSB0aGUgY3VybHhfc3RydG9sbCgpIGZ1bmN0aW9uIHdoaWNoIGlzIHByb3ZpZGVkIGFzIHNvdXJjZQorICAgQSBtYWNybyB0aGF0IGNvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBudW1iZXIgdG8gYSBgY3VybF9vZmZfdGAgbnVtYmVyLgorICAgVGhpcyBtaWdodCB1c2UgdGhlIGBjdXJseF9zdHJ0b2xsKClgIGZ1bmN0aW9uIHdoaWNoIGlzIHByb3ZpZGVkIGFzIHNvdXJjZQogICAgY29kZSBpbiBzdHJ0b29mZnQuYy4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBvbmx5IHByb3ZpZGVkIGlmIG5vCi0gICBzdHJ0b2xsKCkgKG9yIGVxdWl2YWxlbnQpIGZ1bmN0aW9uIGV4aXN0IG9uIHlvdXIgcGxhdGZvcm0uIElmIGN1cmxfb2ZmX3QKKyAgIHN0cnRvbGwoKSAob3IgZXF1aXZhbGVudCkgZnVuY3Rpb24gZXhpc3Qgb24geW91ciBwbGF0Zm9ybS4gSWYgYGN1cmxfb2ZmX3RgCiAgICBpcyBvbmx5IGEgMzIgYml0IG51bWJlciBvbiB5b3VyIHBsYXRmb3JtLCB0aGlzIG1hY3JvIHVzZXMgc3RydG9sKCkuCiAKIGBjdXJseF90dm5vdygpYApAQCAtNjI0LDE3ICs2MjQsMTcgQEAKIAogYGN1cmx4X3R2ZGlmZl9zZWNzKClgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHJldHVybnMgdGhlIHNhbWUgYXMgY3VybHhfdHZkaWZmIGJ1dCB3aXRoIGZ1bGwgdXNlYyByZXNvbHV0aW9uIChhcyBhCisgICByZXR1cm5zIHRoZSBzYW1lIGFzIGBjdXJseF90dmRpZmZgIGJ1dCB3aXRoIGZ1bGwgdXNlYyByZXNvbHV0aW9uIChhcyBhCiAgICBkb3VibGUpCiAKIEZ1dHVyZQogLS0tLS0tCiAKLSBTZXZlcmFsIGZ1bmN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGN1cmxfIG5hbWUgc3BhY2UgaW4gYQotIGZ1dHVyZSBsaWJjdXJsIHJlbGVhc2UuIFRoZXkgd2lsbCB0aGVuIG9ubHkgYmVjb21lIGF2YWlsYWJsZSBhcyBjdXJseF8KKyBTZXZlcmFsIGZ1bmN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIGBjdXJsX2AgbmFtZSBzcGFjZSBpbiBhCisgZnV0dXJlIGxpYmN1cmwgcmVsZWFzZS4gVGhleSB3aWxsIHRoZW4gb25seSBiZWNvbWUgYXZhaWxhYmxlIGFzIGBjdXJseF9gCiAgZnVuY3Rpb25zIGluc3RlYWQuIFRvIG1ha2UgdGhlIHRyYW5zaXRpb24gZWFzaWVyLCB3ZSBhbHJlYWR5IHRvZGF5IHByb3ZpZGUKLSB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgY3VybHhfIHByZWZpeCB0byBhbGxvdyBzb3VyY2VzIHRvIGdldCBidWlsdCBwcm9wZXJseQotIHdpdGggdGhlIG5ldyBmdW5jdGlvbiBuYW1lcy4gVGhlIGZ1bmN0aW9ucyB0aGlzIGNvbmNlcm5zIGFyZToKKyB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgYGN1cmx4X2AgcHJlZml4IHRvIGFsbG93IHNvdXJjZXMgdG8gZ2V0IGJ1aWx0CisgcHJvcGVybHkgd2l0aCB0aGUgbmV3IGZ1bmN0aW9uIG5hbWVzLiBUaGUgZnVuY3Rpb25zIHRoaXMgY29uY2VybnMgYXJlOgogCiAgLSBgY3VybHhfZ2V0ZW52YAogIC0gYGN1cmx4X3N0cmVxdWFsYApAQCAtNzE5LDcgKzcxOSw3IEBACiAKICB0aGlzIGhvc3QgaGFzIGdldGFkZHJpbmZvKCkgYW5kIGZhbWlseSwgYW5kIHRodXMgd2UgdXNlIHRoYXQuIFRoZSBob3N0IG1heQogIG5vdCBiZSBhYmxlIHRvIHJlc29sdmUgSVB2NiwgYnV0IHdlIGRvbid0IHJlYWxseSBoYXZlIHRvIHRha2UgdGhhdCBpbnRvCi0gYWNjb3VudC4gSG9zdHMgdGhhdCBhcmVuJ3QgSVB2Ni1lbmFibGVkIGhhdmUgQ1VSTFJFU19JUFY0IGRlZmluZWQuCisgYWNjb3VudC4gSG9zdHMgdGhhdCBhcmVuJ3QgSVB2Ni1lbmFibGVkIGhhdmUgYENVUkxSRVNfSVBWNGAgZGVmaW5lZC4KIAogIyMgYENVUkxSRVNfQVJFU2AKIApAQCAtNzUwLDcgKzc1MCw3IEBACiAgLSBob3N0aXA2LmMgICAgIC0gSVB2NiBzcGVjaWZpYyBmdW5jdGlvbnMKIAogIFRoZSBob3N0aXAuaCBpcyB0aGUgc2luZ2xlIHVuaXRlZCBoZWFkZXIgZmlsZSBmb3IgYWxsIHRoaXMuIEl0IGRlZmluZXMgdGhlCi0gYENVUkxSRVNfKmAgZGVmaW5lcyBiYXNlZCBvbiB0aGUgY29uZmlnKi5oIGFuZCBjdXJsX3NldHVwLmggZGVmaW5lcy4KKyBgQ1VSTFJFU18qYCBkZWZpbmVzIGJhc2VkIG9uIHRoZSBjb25maWcqLmggYW5kIGBjdXJsX3NldHVwLmhgIGRlZmluZXMuCiAKIDxhIG5hbWU9Im1lbW9yeWxlYWsiPjwvYT4KIFRyYWNrIERvd24gTWVtb3J5IExlYWtzCkBAIC04NTgsNyArODU4LDcgQEAKIAogIyMgQ3VybF9lYXN5CiAKLSAgVGhlIEN1cmxfZWFzeSBzdHJ1Y3QgaXMgdGhlIG9uZSByZXR1cm5lZCB0byB0aGUgb3V0c2lkZSBpbiB0aGUgZXh0ZXJuYWwgQVBJCisgIFRoZSBgQ3VybF9lYXN5YCBzdHJ1Y3QgaXMgdGhlIG9uZSByZXR1cm5lZCB0byB0aGUgb3V0c2lkZSBpbiB0aGUgZXh0ZXJuYWwgQVBJCiAgIGFzIGEgIkNVUkwgKiIuIFRoaXMgaXMgdXN1YWxseSBrbm93biBhcyBhbiBlYXN5IGhhbmRsZSBpbiBBUEkgZG9jdW1lbnRhdGlvbnMKICAgYW5kIGV4YW1wbGVzLgogCkBAIC04NjYsMjcgKzg2NiwyNyBAQAogICAnY29ubmVjdGRhdGEnIHN0cnVjdC4gV2hlbiBhIHRyYW5zZmVyIGlzIGFib3V0IHRvIGJlIG1hZGUsIGxpYmN1cmwgd2lsbAogICBlaXRoZXIgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gb3IgcmUtdXNlIGFuIGV4aXN0aW5nIG9uZS4gVGhlIHBhcnRpY3VsYXIKICAgY29ubmVjdGRhdGEgdGhhdCBpcyB1c2VkIGJ5IHRoaXMgaGFuZGxlIGlzIHBvaW50ZWQgb3V0IGJ5Ci0gIEN1cmxfZWFzeS0+ZWFzeV9jb25uLgorICBgQ3VybF9lYXN5LT5lYXN5X2Nvbm5gLgogCiAgIERhdGEgYW5kIGluZm9ybWF0aW9uIHRoYXQgcmVnYXJkIHRoaXMgcGFydGljdWxhciBzaW5nbGUgdHJhbnNmZXIgaXMgcHV0IGluCiAgIHRoZSBTaW5nbGVSZXF1ZXN0IHN1Yi1zdHJ1Y3QuCiAKLSAgV2hlbiB0aGUgQ3VybF9lYXN5IHN0cnVjdCBpcyBhZGRlZCB0byBhIG11bHRpIGhhbmRsZSwgYXMgaXQgbXVzdCBiZSBpbiBvcmRlcgotICB0byBkbyBhbnkgdHJhbnNmZXIsIHRoZSAtPm11bHRpIG1lbWJlciB3aWxsIHBvaW50IHRvIHRoZSBgQ3VybF9tdWx0aWAgc3RydWN0Ci0gIGl0IGJlbG9uZ3MgdG8uIFRoZSAtPnByZXYgYW5kIC0+bmV4dCBtZW1iZXJzIHdpbGwgdGhlbiBiZSB1c2VkIGJ5IHRoZSBtdWx0aQotICBjb2RlIHRvIGtlZXAgYSBsaW5rZWQgbGlzdCBvZiBDdXJsX2Vhc3kgc3RydWN0cyB0aGF0IGFyZSBhZGRlZCB0byB0aGF0IHNhbWUKLSAgbXVsdGkgaGFuZGxlLiBsaWJjdXJsIGFsd2F5cyB1c2VzIG11bHRpIHNvIC0+bXVsdGkgKndpbGwqIHBvaW50IHRvIGEKLSAgYEN1cmxfbXVsdGlgIHdoZW4gYSB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcy4KKyAgV2hlbiB0aGUgYEN1cmxfZWFzeWAgc3RydWN0IGlzIGFkZGVkIHRvIGEgbXVsdGkgaGFuZGxlLCBhcyBpdCBtdXN0IGJlIGluCisgIG9yZGVyIHRvIGRvIGFueSB0cmFuc2ZlciwgdGhlIC0+bXVsdGkgbWVtYmVyIHdpbGwgcG9pbnQgdG8gdGhlIGBDdXJsX211bHRpYAorICBzdHJ1Y3QgaXQgYmVsb25ncyB0by4gVGhlIC0+cHJldiBhbmQgLT5uZXh0IG1lbWJlcnMgd2lsbCB0aGVuIGJlIHVzZWQgYnkgdGhlCisgIG11bHRpIGNvZGUgdG8ga2VlcCBhIGxpbmtlZCBsaXN0IG9mIGBDdXJsX2Vhc3lgIHN0cnVjdHMgdGhhdCBhcmUgYWRkZWQgdG8KKyAgdGhhdCBzYW1lIG11bHRpIGhhbmRsZS4gbGliY3VybCBhbHdheXMgdXNlcyBtdWx0aSBzbyAtPm11bHRpICp3aWxsKiBwb2ludCB0bworICBhIGBDdXJsX211bHRpYCB3aGVuIGEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuCiAKLSAgLT5tc3RhdGUgaXMgdGhlIG11bHRpIHN0YXRlIG9mIHRoaXMgcGFydGljdWxhciBDdXJsX2Vhc3kuIFdoZW4KKyAgLT5tc3RhdGUgaXMgdGhlIG11bHRpIHN0YXRlIG9mIHRoaXMgcGFydGljdWxhciBgQ3VybF9lYXN5YC4gV2hlbgogICBgbXVsdGlfcnVuc2luZ2xlKClgIGlzIGNhbGxlZCwgaXQgd2lsbCBhY3Qgb24gdGhpcyBoYW5kbGUgYWNjb3JkaW5nIHRvIHdoaWNoCiAgIHN0YXRlIGl0IGlzIGluLiBUaGUgbXN0YXRlIGlzIGFsc28gd2hhdCB0ZWxscyB3aGljaCBzb2NrZXRzIHRvIHJldHVybiBmb3IgYQotICBzcGVjaWZpYyBDdXJsX2Vhc3kgd2hlbiBbYGN1cmxfbXVsdGlfZmRzZXQoKWBdWzEyXSBpcyBjYWxsZWQgZXRjLgorICBzcGVjaWZpYyBgQ3VybF9lYXN5YCB3aGVuIFtgY3VybF9tdWx0aV9mZHNldCgpYF1bMTJdIGlzIGNhbGxlZCBldGMuCiAKICAgVGhlIGxpYmN1cmwgc291cmNlIGNvZGUgZ2VuZXJhbGx5IHVzZSB0aGUgbmFtZSAnZGF0YScgZm9yIHRoZSB2YXJpYWJsZSB0aGF0Ci0gIHBvaW50cyB0byB0aGUgQ3VybF9lYXN5LgorICBwb2ludHMgdG8gdGhlIGBDdXJsX2Vhc3lgLgogCi0gIFdoZW4gZG9pbmcgbXVsdGlwbGV4ZWQgSFRUUC8yIHRyYW5zZmVycywgZWFjaCBDdXJsX2Vhc3kgaXMgYXNzb2NpYXRlZCB3aXRoCisgIFdoZW4gZG9pbmcgbXVsdGlwbGV4ZWQgSFRUUC8yIHRyYW5zZmVycywgZWFjaCBgQ3VybF9lYXN5YCBpcyBhc3NvY2lhdGVkIHdpdGgKICAgYW4gaW5kaXZpZHVhbCBzdHJlYW0sIHNoYXJpbmcgdGhlIHNhbWUgY29ubmVjdGRhdGEgc3RydWN0LiBNdWx0aXBsZXhpbmcKICAgbWFrZXMgaXQgZXZlbiBtb3JlIGltcG9ydGFudCB0byBrZWVwIHRoaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHRoaW5nIQogCkBAIC05MDEsMjEgKzkwMSwyMSBAQAogICB0aGUgY29ubmVjdGlvbiBjYW4ndCBiZSBrZXB0IGFsaXZlLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGNsb3NlZCBhZnRlciB1c2UKICAgYW5kIHRoZW4gdGhpcyBzdHJ1Y3QgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIGZyZWVkLgogCi0gIFRodXMsIHRoZSBzYW1lIEN1cmxfZWFzeSBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyBhbmQgZWFjaCB0aW1lIHNlbGVjdAorICBUaHVzLCB0aGUgc2FtZSBgQ3VybF9lYXN5YCBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyBhbmQgZWFjaCB0aW1lIHNlbGVjdAogICBhbm90aGVyIGNvbm5lY3RkYXRhIHN0cnVjdCB0byB1c2UgZm9yIHRoZSBjb25uZWN0aW9uLiBLZWVwIHRoaXMgaW4gbWluZCwgYXMKICAgaXQgaXMgdGhlbiBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaWYgb3B0aW9ucyBvciBjaG9pY2VzIGFyZSBiYXNlZCBvbiB0aGUKLSAgY29ubmVjdGlvbiBvciB0aGUgQ3VybF9lYXN5LgorICBjb25uZWN0aW9uIG9yIHRoZSBgQ3VybF9lYXN5YC4KIAogICBGdW5jdGlvbnMgaW4gbGliY3VybCB3aWxsIGFzc3VtZSB0aGF0IGNvbm5lY3RkYXRhLT5kYXRhIHBvaW50cyB0byB0aGUKLSAgQ3VybF9lYXN5IHRoYXQgdXNlcyB0aGlzIGNvbm5lY3Rpb24gKGZvciB0aGUgbW9tZW50KS4KKyAgYEN1cmxfZWFzeWAgdGhhdCB1c2VzIHRoaXMgY29ubmVjdGlvbiAoZm9yIHRoZSBtb21lbnQpLgogCiAgIEFzIGEgc3BlY2lhbCBjb21wbGV4aXR5LCBzb21lIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgbGliY3VybCByZXF1aXJlIGEKICAgc3BlY2lhbCBkaXNjb25uZWN0IHByb2NlZHVyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHNodXR0aW5nIGRvd24gdGhlCiAgIHNvY2tldC4gSXQgY2FuIGludm9sdmUgc2VuZGluZyBvbmUgb3IgbW9yZSBjb21tYW5kcyB0byB0aGUgc2VydmVyIGJlZm9yZQogICBkb2luZyBzby4gU2luY2UgY29ubmVjdGlvbnMgYXJlIGtlcHQgaW4gdGhlIGNvbm5lY3Rpb24gY2FjaGUgYWZ0ZXIgdXNlLCB0aGUKLSAgb3JpZ2luYWwgQ3VybF9lYXN5IG1heSBubyBsb25nZXIgYmUgYXJvdW5kIHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gc2h1dCBkb3duCisgIG9yaWdpbmFsIGBDdXJsX2Vhc3lgIG1heSBubyBsb25nZXIgYmUgYXJvdW5kIHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gc2h1dCBkb3duCiAgIGEgcGFydGljdWxhciBjb25uZWN0aW9uLiBGb3IgdGhpcyBwdXJwb3NlLCBsaWJjdXJsIGhvbGRzIGEgc3BlY2lhbCBkdW1teQotICBgY2xvc3VyZV9oYW5kbGVgIEN1cmxfZWFzeSBpbiB0aGUgYEN1cmxfbXVsdGlgIHN0cnVjdCB0byB1c2Ugd2hlbiBuZWVkZWQuCisgIGBjbG9zdXJlX2hhbmRsZWAgYEN1cmxfZWFzeWAgaW4gdGhlIGBDdXJsX211bHRpYCBzdHJ1Y3QgdG8gdXNlIHdoZW4gbmVlZGVkLgogCiAgIEZUUCB1c2VzIHR3byBUQ1AgY29ubmVjdGlvbnMgZm9yIGEgdHlwaWNhbCB0cmFuc2ZlciBidXQgaXQga2VlcHMgYm90aCBpbgogICB0aGlzIHNpbmdsZSBzdHJ1Y3QgYW5kIHRodXMgY2FuIGJlIGNvbnNpZGVyZWQgYSBzaW5nbGUgY29ubmVjdGlvbiBmb3IgbW9zdApAQCAtOTI5LDM2ICs5MjksMzcgQEAKICAgSW50ZXJuYWxseSwgdGhlIGVhc3kgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGFzIGEgd3JhcHBlciBhcm91bmQgbXVsdGkKICAgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBldmVyeXRoaW5nIG11bHRpIGludGVyZmFjZS4KIAotICBgQ3VybF9tdWx0aWAgaXMgdGhlIG11bHRpIGhhbmRsZSBzdHJ1Y3QgZXhwb3NlZCBhcyAiQ1VSTE0gKiIgaW4gZXh0ZXJuYWwgQVBJcy4KKyAgYEN1cmxfbXVsdGlgIGlzIHRoZSBtdWx0aSBoYW5kbGUgc3RydWN0IGV4cG9zZWQgYXMgIkNVUkxNICoiIGluIGV4dGVybmFsCisgIEFQSXMuCiAKLSAgVGhpcyBzdHJ1Y3QgaG9sZHMgYSBsaXN0IG9mIEN1cmxfZWFzeSBzdHJ1Y3RzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoaXMKKyAgVGhpcyBzdHJ1Y3QgaG9sZHMgYSBsaXN0IG9mIGBDdXJsX2Vhc3lgIHN0cnVjdHMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcwogICBoYW5kbGUgd2l0aCBbYGN1cmxfbXVsdGlfYWRkX2hhbmRsZSgpYF1bMTNdLiBUaGUgc3RhcnQgb2YgdGhlIGxpc3QgaXMKLSAgLT5lYXN5cCBhbmQgLT5udW1fZWFzeSBpcyBhIGNvdW50ZXIgb2YgYWRkZWQgQ3VybF9lYXN5cy4KKyAgYC0+ZWFzeXBgIGFuZCBgLT5udW1fZWFzeWAgaXMgYSBjb3VudGVyIG9mIGFkZGVkIGBDdXJsX2Vhc3lgcy4KIAotICAtPm1zZ2xpc3QgaXMgYSBsaW5rZWQgbGlzdCBvZiBtZXNzYWdlcyB0byBzZW5kIGJhY2sgd2hlbgorICBgLT5tc2dsaXN0YCBpcyBhIGxpbmtlZCBsaXN0IG9mIG1lc3NhZ2VzIHRvIHNlbmQgYmFjayB3aGVuCiAgIFtgY3VybF9tdWx0aV9pbmZvX3JlYWQoKWBdWzE0XSBpcyBjYWxsZWQuIEJhc2ljYWxseSBhIG5vZGUgaXMgYWRkZWQgdG8gdGhhdAotICBsaXN0IHdoZW4gYW4gaW5kaXZpZHVhbCBDdXJsX2Vhc3kncyB0cmFuc2ZlciBoYXMgY29tcGxldGVkLgorICBsaXN0IHdoZW4gYW4gaW5kaXZpZHVhbCBgQ3VybF9lYXN5YCdzIHRyYW5zZmVyIGhhcyBjb21wbGV0ZWQuCiAKLSAgLT5ob3N0Y2FjaGUgcG9pbnRzIHRvIHRoZSBuYW1lIGNhY2hlLiBJdCBpcyBhIGhhc2ggdGFibGUgZm9yIGxvb2tpbmcgdXAgbmFtZQotICB0byBJUC4gVGhlIG5vZGVzIGhhdmUgYSBsaW1pdGVkIGxpZmUgdGltZSBpbiB0aGVyZSBhbmQgdGhpcyBjYWNoZSBpcyBtZWFudAotICB0byByZWR1Y2UgdGhlIHRpbWUgZm9yIHdoZW4gdGhlIHNhbWUgbmFtZSBpcyB3YW50ZWQgd2l0aGluIGEgc2hvcnQgcGVyaW9kIG9mCi0gIHRpbWUuCisgIGAtPmhvc3RjYWNoZWAgcG9pbnRzIHRvIHRoZSBuYW1lIGNhY2hlLiBJdCBpcyBhIGhhc2ggdGFibGUgZm9yIGxvb2tpbmcgdXAKKyAgbmFtZSB0byBJUC4gVGhlIG5vZGVzIGhhdmUgYSBsaW1pdGVkIGxpZmUgdGltZSBpbiB0aGVyZSBhbmQgdGhpcyBjYWNoZSBpcworICBtZWFudCB0byByZWR1Y2UgdGhlIHRpbWUgZm9yIHdoZW4gdGhlIHNhbWUgbmFtZSBpcyB3YW50ZWQgd2l0aGluIGEgc2hvcnQKKyAgcGVyaW9kIG9mIHRpbWUuCiAKLSAgLT50aW1ldHJlZSBwb2ludHMgdG8gYSB0cmVlIG9mIEN1cmxfZWFzeXMsIHNvcnRlZCBieSB0aGUgcmVtYWluaW5nIHRpbWUKLSAgdW50aWwgaXQgc2hvdWxkIGJlIGNoZWNrZWQgLSBub3JtYWxseSBzb21lIHNvcnQgb2YgdGltZW91dC4gRWFjaCBDdXJsX2Vhc3kKKyAgYC0+dGltZXRyZWVgIHBvaW50cyB0byBhIHRyZWUgb2YgYEN1cmxfZWFzeWBzLCBzb3J0ZWQgYnkgdGhlIHJlbWFpbmluZyB0aW1lCisgIHVudGlsIGl0IHNob3VsZCBiZSBjaGVja2VkIC0gbm9ybWFsbHkgc29tZSBzb3J0IG9mIHRpbWVvdXQuIEVhY2ggYEN1cmxfZWFzeWAKICAgaGFzIG9uZSBub2RlIGluIHRoZSB0cmVlLgogCi0gIC0+c29ja2hhc2ggaXMgYSBoYXNoIHRhYmxlIHRvIGFsbG93IGZhc3QgbG9va3VwcyBvZiBzb2NrZXQgZGVzY3JpcHRvciB0bwotICB3aGljaCBDdXJsX2Vhc3kgdGhhdCB1c2VzIHRoYXQgZGVzY3JpcHRvci4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZQorICBgLT5zb2NraGFzaGAgaXMgYSBoYXNoIHRhYmxlIHRvIGFsbG93IGZhc3QgbG9va3VwcyBvZiBzb2NrZXQgZGVzY3JpcHRvciB0bworICB3aGljaCBgQ3VybF9lYXN5YCB0aGF0IHVzZXMgdGhhdCBkZXNjcmlwdG9yLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlCiAgIGBtdWx0aV9zb2NrZXRgIEFQSS4KIAotICAtPmNvbm5fY2FjaGUgcG9pbnRzIHRvIHRoZSBjb25uZWN0aW9uIGNhY2hlLiBJdCBrZWVwcyB0cmFjayBvZiBhbGwKKyAgYC0+Y29ubl9jYWNoZWAgcG9pbnRzIHRvIHRoZSBjb25uZWN0aW9uIGNhY2hlLiBJdCBrZWVwcyB0cmFjayBvZiBhbGwKICAgY29ubmVjdGlvbnMgdGhhdCBhcmUga2VwdCBhZnRlciB1c2UuIFRoZSBjYWNoZSBoYXMgYSBtYXhpbXVtIHNpemUuCiAKLSAgLT5jbG9zdXJlX2hhbmRsZSBpcyBkZXNjcmliZWQgaW4gdGhlICdjb25uZWN0ZGF0YScgc2VjdGlvbi4KKyAgYC0+Y2xvc3VyZV9oYW5kbGVgIGlzIGRlc2NyaWJlZCBpbiB0aGUgJ2Nvbm5lY3RkYXRhJyBzZWN0aW9uLgogCiAgIFRoZSBsaWJjdXJsIHNvdXJjZSBjb2RlIGdlbmVyYWxseSB1c2UgdGhlIG5hbWUgJ211bHRpJyBmb3IgdGhlIHZhcmlhYmxlIHRoYXQKLSAgcG9pbnRzIHRvIHRoZSBDdXJsX211bHRpIHN0cnVjdC4KKyAgcG9pbnRzIHRvIHRoZSBgQ3VybF9tdWx0aWAgc3RydWN0LgogCiAjIyBDdXJsX2hhbmRsZXIKIApAQCAtOTcxLDQxICs5NzIsNDEgQEAKICAgZnJvbSBhIHNpbmdsZSBhcnJheSB3aGljaCBpcyBzY2FubmVkIHRocm91Z2ggd2hlbiBhIFVSTCBpcyBnaXZlbiB0byBsaWJjdXJsCiAgIHRvIHdvcmsgd2l0aC4KIAotICAtPnNjaGVtZSBpcyB0aGUgVVJMIHNjaGVtZSBuYW1lLCB1c3VhbGx5IHNwZWxsZWQgb3V0IGluIHVwcGVyY2FzZS4gVGhhdCdzCi0gICJIVFRQIiBvciAiRlRQIiBldGMuIFNTTCB2ZXJzaW9ucyBvZiB0aGUgcHJvdGNvbCBuZWVkIGl0cyBvd24gYEN1cmxfaGFuZGxlcmAKKyAgYC0+c2NoZW1lYCBpcyB0aGUgVVJMIHNjaGVtZSBuYW1lLCB1c3VhbGx5IHNwZWxsZWQgb3V0IGluIHVwcGVyY2FzZS4gVGhhdCdzCisgICJIVFRQIiBvciAiRlRQIiBldGMuIFNTTCB2ZXJzaW9ucyBvZiB0aGUgcHJvdG9jb2wgbmVlZCBpdHMgb3duIGBDdXJsX2hhbmRsZXJgCiAgIHNldHVwIHNvIEhUVFBTIHNlcGFyYXRlIGZyb20gSFRUUC4KIAotICAtPnNldHVwX2Nvbm5lY3Rpb24gaXMgY2FsbGVkIHRvIGFsbG93IHRoZSBwcm90b2NvbCBjb2RlIHRvIGFsbG9jYXRlIHByb3RvY29sCi0gIHNwZWNpZmljIGRhdGEgdGhhdCB0aGVuIGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgQ3VybF9lYXN5IGZvciB0aGUgcmVzdCBvZgotICB0aGlzIHRyYW5zZmVyLiBJdCBnZXRzIGZyZWVkIGFnYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyLiBJdCB3aWxsIGJlCi0gIGNhbGxlZCBiZWZvcmUgdGhlICdjb25uZWN0ZGF0YScgZm9yIHRoZSB0cmFuc2ZlciBoYXMgYmVlbiBzZWxlY3RlZC9jcmVhdGVkLgotICBNb3N0IHByb3RvY29scyB3aWxsIGFsbG9jYXRlIGl0cyBwcml2YXRlICdzdHJ1Y3QgW1BST1RPQ09MXScgaGVyZSBhbmQgYXNzaWduCi0gIEN1cmxfZWFzeS0+cmVxLnByb3RvcCB0byBwb2ludCB0byBpdC4KKyAgYC0+c2V0dXBfY29ubmVjdGlvbmAgaXMgY2FsbGVkIHRvIGFsbG93IHRoZSBwcm90b2NvbCBjb2RlIHRvIGFsbG9jYXRlCisgIHByb3RvY29sIHNwZWNpZmljIGRhdGEgdGhhdCB0aGVuIGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYEN1cmxfZWFzeWAgZm9yCisgIHRoZSByZXN0IG9mIHRoaXMgdHJhbnNmZXIuIEl0IGdldHMgZnJlZWQgYWdhaW4gYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIuCisgIEl0IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgJ2Nvbm5lY3RkYXRhJyBmb3IgdGhlIHRyYW5zZmVyIGhhcyBiZWVuCisgIHNlbGVjdGVkL2NyZWF0ZWQuIE1vc3QgcHJvdG9jb2xzIHdpbGwgYWxsb2NhdGUgaXRzIHByaXZhdGUKKyAgJ3N0cnVjdCBbUFJPVE9DT0xdJyBoZXJlIGFuZCBhc3NpZ24gYEN1cmxfZWFzeS0+cmVxLnByb3RvcGAgdG8gcG9pbnQgdG8gaXQuCiAKLSAgLT5jb25uZWN0X2l0IGFsbG93cyBhIHByb3RvY29sIHRvIGRvIHNvbWUgc3BlY2lmaWMgYWN0aW9ucyBhZnRlciB0aGUgVENQCisgIGAtPmNvbm5lY3RfaXRgIGFsbG93cyBhIHByb3RvY29sIHRvIGRvIHNvbWUgc3BlY2lmaWMgYWN0aW9ucyBhZnRlciB0aGUgVENQCiAgIGNvbm5lY3QgaXMgZG9uZSwgdGhhdCBjYW4gc3RpbGwgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHBoYXNlLgogCi0gIFNvbWUgcHJvdG9jb2xzIHdpbGwgYWx0ZXIgdGhlIGNvbm5lY3RkYXRhLT5yZWN2W10gYW5kIGNvbm5lY3RkYXRhLT5zZW5kW10KLSAgZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhpcyBmdW5jdGlvbi4KKyAgU29tZSBwcm90b2NvbHMgd2lsbCBhbHRlciB0aGUgYGNvbm5lY3RkYXRhLT5yZWN2W11gIGFuZAorICBgY29ubmVjdGRhdGEtPnNlbmRbXWAgZnVuY3Rpb24gcG9pbnRlcnMgaW4gdGhpcyBmdW5jdGlvbi4KIAotICAtPmNvbm5lY3RpbmcgaXMgc2ltaWxhcmx5IGEgZnVuY3Rpb24gdGhhdCBrZWVwcyBnZXR0aW5nIGNhbGxlZCBhcyBsb25nIGFzIHRoZQotICBwcm90b2NvbCBjb25zaWRlcnMgaXRzZWxmIHN0aWxsIGluIHRoZSBjb25uZWN0aW5nIHBoYXNlLgorICBgLT5jb25uZWN0aW5nYCBpcyBzaW1pbGFybHkgYSBmdW5jdGlvbiB0aGF0IGtlZXBzIGdldHRpbmcgY2FsbGVkIGFzIGxvbmcgYXMKKyAgdGhlIHByb3RvY29sIGNvbnNpZGVycyBpdHNlbGYgc3RpbGwgaW4gdGhlIGNvbm5lY3RpbmcgcGhhc2UuCiAKLSAgLT5kb19pdCBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHRvIGlzc3VlIHRoZSB0cmFuc2ZlciByZXF1ZXN0LiBXaGF0IHdlIGNhbGwKKyAgYC0+ZG9faXRgIGlzIHRoZSBmdW5jdGlvbiBjYWxsZWQgdG8gaXNzdWUgdGhlIHRyYW5zZmVyIHJlcXVlc3QuIFdoYXQgd2UgY2FsbAogICB0aGUgRE8gYWN0aW9uIGludGVybmFsbHkuIElmIHRoZSBETyBpcyBub3QgZW5vdWdoIGFuZCB0aGluZ3MgbmVlZCB0byBiZSBrZXB0Ci0gIGdldHRpbmcgZG9uZSBmb3IgdGhlIGVudGlyZSBETyBzZXF1ZW5jZSB0byBjb21wbGV0ZSwgLT5kb2luZyBpcyB0aGVuIHVzdWFsbHkKLSAgYWxzbyBwcm92aWRlZC4gRWFjaCBwcm90b2NvbCB0aGF0IG5lZWRzIHRvIGRvIG11bHRpcGxlIGNvbW1hbmRzIG9yIHNpbWlsYXIKLSAgZm9yIGRvL2RvaW5nIG5lZWQgdG8gaW1wbGVtZW50IHRoZWlyIG93biBzdGF0ZSBtYWNoaW5lcyAoc2VlIFNDUCwgU0ZUUCwKLSAgRlRQKS4gU29tZSBwcm90b2NvbHMgKG9ubHkgRlRQIGFuZCBvbmx5IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMpIGhhcyBhCi0gIHNlcGFyYXRlIHBpZWNlIG9mIHRoZSBETyBzdGF0ZSBjYWxsZWQgYERPX01PUkVgLgorICBnZXR0aW5nIGRvbmUgZm9yIHRoZSBlbnRpcmUgRE8gc2VxdWVuY2UgdG8gY29tcGxldGUsIGAtPmRvaW5nYCBpcyB0aGVuCisgIHVzdWFsbHkgYWxzbyBwcm92aWRlZC4gRWFjaCBwcm90b2NvbCB0aGF0IG5lZWRzIHRvIGRvIG11bHRpcGxlIGNvbW1hbmRzIG9yCisgIHNpbWlsYXIgZm9yIGRvL2RvaW5nIG5lZWQgdG8gaW1wbGVtZW50IHRoZWlyIG93biBzdGF0ZSBtYWNoaW5lcyAoc2VlIFNDUCwKKyAgU0ZUUCwgRlRQKS4gU29tZSBwcm90b2NvbHMgKG9ubHkgRlRQIGFuZCBvbmx5IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMpIGhhcworICBhIHNlcGFyYXRlIHBpZWNlIG9mIHRoZSBETyBzdGF0ZSBjYWxsZWQgYERPX01PUkVgLgogCi0gIC0+ZG9pbmcga2VlcHMgZ2V0dGluZyBjYWxsZWQgd2hpbGUgaXNzdWluZyB0aGUgdHJhbnNmZXIgcmVxdWVzdCBjb21tYW5kKHMpCisgIGAtPmRvaW5nYCBrZWVwcyBnZXR0aW5nIGNhbGxlZCB3aGlsZSBpc3N1aW5nIHRoZSB0cmFuc2ZlciByZXF1ZXN0IGNvbW1hbmQocykKIAotICAtPmRvbmUgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIERPTkUuIFRoYXQncyBhZnRlciB0aGUKKyAgYC0+ZG9uZWAgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIERPTkUuIFRoYXQncyBhZnRlciB0aGUKICAgbWFpbiBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLgogCi0gIC0+ZG9fbW9yZSBnZXRzIGNhbGxlZCBkdXJpbmcgdGhlIGBET19NT1JFYCBzdGF0ZS4gVGhlIEZUUCBwcm90b2NvbCB1c2VzIHRoaXMKLSAgc3RhdGUgd2hlbiBzZXR0aW5nIHVwIHRoZSBzZWNvbmQgY29ubmVjdGlvbi4KKyAgYC0+ZG9fbW9yZWAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBgRE9fTU9SRWAgc3RhdGUuIFRoZSBGVFAgcHJvdG9jb2wgdXNlcworICB0aGlzIHN0YXRlIHdoZW4gc2V0dGluZyB1cCB0aGUgc2Vjb25kIGNvbm5lY3Rpb24uCiAKICAgLT5gcHJvdG9fZ2V0c29ja2AKICAgLT5gZG9pbmdfZ2V0c29ja2AKQEAgLTEwNTAsOSArMTA1MSw5IEBACiAKICMjIGNvbm5jYWNoZQogCi0gIElzIGEgaGFzaCB0YWJsZSB3aXRoIGNvbm5lY3Rpb25zIGZvciBsYXRlciByZS11c2UuIEVhY2ggQ3VybF9lYXN5IGhhcyBhCisgIElzIGEgaGFzaCB0YWJsZSB3aXRoIGNvbm5lY3Rpb25zIGZvciBsYXRlciByZS11c2UuIEVhY2ggYEN1cmxfZWFzeWAgaGFzIGEKICAgcG9pbnRlciB0byBpdHMgY29ubmVjdGlvbiBjYWNoZS4gRWFjaCBtdWx0aSBoYW5kbGUgc2V0cyB1cCBhIGNvbm5lY3Rpb24KLSAgY2FjaGUgdGhhdCBhbGwgYWRkZWQgQ3VybF9lYXN5cyBzaGFyZSBieSBkZWZhdWx0LgorICBjYWNoZSB0aGF0IGFsbCBhZGRlZCBgQ3VybF9lYXN5YHMgc2hhcmUgYnkgZGVmYXVsdC4KIAogIyMgQ3VybF9zaGFyZQogCkBAIC0xMDYxLDEwICsxMDYyLDEwIEBACiAKICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgc3RydWN0IGNhbiBoYXZlIGEgc2V0IG9mIG93biB2ZXJzaW9ucyBvZiBjYWNoZXMgYW5kCiAgIHBvb2xzIGFuZCB0aGVuIGJ5IHByb3ZpZGluZyB0aGlzIHN0cnVjdCBpbiB0aGUgYENVUkxPUFRfU0hBUkVgIG9wdGlvbiwgdGhvc2UKLSAgc3BlY2lmaWMgQ3VybF9lYXN5cyB3aWxsIHVzZSB0aGUgY2FjaGVzL3Bvb2xzIHRoYXQgdGhpcyBzaGFyZSBoYW5kbGUKKyAgc3BlY2lmaWMgYEN1cmxfZWFzeWBzIHdpbGwgdXNlIHRoZSBjYWNoZXMvcG9vbHMgdGhhdCB0aGlzIHNoYXJlIGhhbmRsZQogICBob2xkcy4KIAotICBUaGVuIGluZGl2aWR1YWwgQ3VybF9lYXN5IHN0cnVjdHMgY2FuIGJlIG1hZGUgdG8gc2hhcmUgc3BlY2lmaWMgdGhpbmdzCisgIFRoZW4gaW5kaXZpZHVhbCBgQ3VybF9lYXN5YCBzdHJ1Y3RzIGNhbiBiZSBtYWRlIHRvIHNoYXJlIHNwZWNpZmljIHRoaW5ncwogICB0aGF0IHRoZXkgb3RoZXJ3aXNlIHdvdWxkbid0LCBzdWNoIGFzIGNvb2tpZXMuCiAKICAgVGhlIGBDdXJsX3NoYXJlYCBzdHJ1Y3QgY2FuIGN1cnJlbnRseSBob2xkIGNvb2tpZXMsIEROUyBjYWNoZSBhbmQgdGhlIFNTTApAQCAtMTA3Myw3ICsxMDc0LDcgQEAKICMjIENvb2tpZUluZm8KIAogICBUaGlzIGlzIHRoZSBtYWluIGNvb2tpZSBzdHJ1Y3QuIEl0IGhvbGRzIGFsbCBrbm93biBjb29raWVzIGFuZCByZWxhdGVkCi0gIGluZm9ybWF0aW9uLiBFYWNoIEN1cmxfZWFzeSBoYXMgaXRzIG93biBwcml2YXRlIENvb2tpZUluZm8gZXZlbiB3aGVuCisgIGluZm9ybWF0aW9uLiBFYWNoIGBDdXJsX2Vhc3lgIGhhcyBpdHMgb3duIHByaXZhdGUgQ29va2llSW5mbyBldmVuIHdoZW4KICAgdGhleSBhcmUgYWRkZWQgdG8gYSBtdWx0aSBoYW5kbGUuIFRoZXkgY2FuIGJlIG1hZGUgdG8gc2hhcmUgY29va2llcyBieSB1c2luZwogICB0aGUgc2hhcmUgQVBJLgogCmRpZmYgLS1naXQgYS9kb2NzL0tOT1dOX0JVR1MgYi9kb2NzL0tOT1dOX0JVR1MKaW5kZXggNTc4ZTAxNS4uODQzMzliYSAxMDA2NDQKLS0tIGEvZG9jcy9LTk9XTl9CVUdTCisrKyBiL2RvY3MvS05PV05fQlVHUwpAQCAtMjIsOCArMjIsOCBAQAogIDEuOCBETlMgdGltaW5nIGlzIHdyb25nIGZvciBIVFRQIHJlZGlyZWN0cwogIDEuOSBIVFRQLzIgZnJhbWVzIHdoaWxlIGluIHRoZSBjb25uZWN0aW9uIHBvb2wga2lsbCByZXVzZQogIDEuMTAgU3RyaXBzIHRyYWlsaW5nIGRvdCBmcm9tIGhvc3QgbmFtZQotIDEuMTEgdHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWQgaW4gSFRUUC8yCi0gMS4xMiBDVVJMT1BUX1NFRUtGVU5DVElPTiBub3QgY2FsbGVkIHdpdGggQ1VSTEZPUk1fU1RSRUFNCisgMS4xMSBDVVJMT1BUX1NFRUtGVU5DVElPTiBub3QgY2FsbGVkIHdpdGggQ1VSTEZPUk1fU1RSRUFNCisgMS4xMiBIVFRQLzIgc2VydmVyIHB1c2ggZW5hYmxlZCB3aGVuIG5vIHB1c2hlcyBjYW4gYmUgYWNjZXB0ZWQKIAogIDIuIFRMUwogIDIuMSBIYW5ncyB3aXRoIFBvbGFyU1NMCkBAIC00OCwxMiArNDgsMTcgQEAKICA1LjMgbGliaWRuIGFuZCBvbGQgaWNvbnYKICA1LjQgQUlYIHNoYXJlZCBidWlsZCB3aXRoIGMtYXJlcyBmYWlscwogIDUuNSBjYW4ndCBoYW5kbGUgVW5pY29kZSBhcmd1bWVudHMgaW4gV2luZG93cworIDUuNiBjbWFrZSBzdXBwb3J0IGdhcHMKKyA1LjcgVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGdhcHMKKyA1LjggY29uZmlndXJlIGZpbmRpbmcgbGlicyBpbiB3cm9uZyBkaXJlY3RvcnkKKyA1LjkgVXRpbGl6ZSBSZXF1aXJlcy5wcml2YXRlIGRpcmVjdGl2ZXMgaW4gbGliY3VybC5wYworIDUuMTAgRml4IHRoZSBnY2MgdHlwZWNoZWNrcwogCiAgNi4gQXV0aGVudGljYXRpb24KICA2LjEgTlRMTSBhdXRoZW50aWNhdGlvbiBhbmQgdW5pY29kZQogIDYuMiBNSVQgS2VyYmVyb3MgZm9yIFdpbmRvd3MgYnVpbGQKICA2LjMgTlRMTSBpbiBzeXN0ZW0gY29udGV4dCB1c2VzIHdyb25nIG5hbWUKLSA2LjQgTmVnb3RpYXRlIG5lZWRzIGEgZmFrZSB1c2VyIG5hbWUKKyA2LjQgTmVnb3RpYXRlIGFuZCBLZXJiZXJvcyBWNSBuZWVkIGEgZmFrZSB1c2VyIG5hbWUKIAogIDcuIEZUUAogIDcuMSBGVFAgd2l0aG91dCBvciBzbG93IDIyMCByZXNwb25zZQpAQCAtNjMsNiArNjgsNyBAQAogIDcuNSBBU0NJSSBGVFAKICA3LjYgRlRQIHdpdGggTlVMcyBpbiBVUkwgcGFydHMKICA3LjcgRlRQIGFuZCBlbXB0eSBwYXRoIHBhcnRzIGluIHRoZSBVUkwKKyA3LjggUHJlbWF0dXJlIHRyYW5zZmVyIGVuZCBidXQgaGVhbHRoeSBjb250cm9sIGNoYW5uZWwKIAogIDguIFRFTE5FVAogIDguMSBURUxORVQgYW5kIHRpbWUgbGltdGlhdGlvbnMgZG9uJ3Qgd29yawpAQCAtNzYsMTYgKzgyLDE2IEBACiAgMTAuMiBTT0NLUyBkb24ndCBzdXBwb3J0IHRpbWVvdXRzCiAgMTAuMyBGVFBTIG92ZXIgU09DS1MKICAxMC40IGFjdGl2ZSBGVFAgb3ZlciBhIFNPQ0tTCi0gMTAuNSBTT0NLUyBwcm94eSBub3Qgd29ya2luZyB2aWEgSVB2NgogCiAgMTEuIEludGVybmFscwogIDExLjEgQ3VybCBsZWFrcyAub25pb24gaG9zdG5hbWVzIGluIEROUwogIDExLjIgZXJyb3IgYnVmZmVyIG5vdCBzZXQgaWYgY29ubmVjdGlvbiB0byBtdWx0aXBsZSBhZGRyZXNzZXMgZmFpbHMKKyAxMS4zIGMtYXJlcyBkZXZpYXRlcyBmcm9tIHN0b2NrIHJlc29sdmVyIG9uIGh0dHA6Ly8xMzQ2NTY5Nzc4CiAKICAxMi4gTERBUCBhbmQgT3BlbkxEQVAKICAxMi4xIE9wZW5MREFQIGhhbmdzIGFmdGVyIHJldHVybmluZyByZXN1bHRzCiAKLSAxMyBUQ1AvSVAKKyAxMy4gVENQL0lQCiAgMTMuMSAtLWludGVyZmFjZSBmb3IgaXB2NiBiaW5kcyB0byB1bnVzYWJsZSBJUCBhZGRyZXNzCiAKIApAQCAtMTk2LDE1ICsyMDIsNyBAQAogCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzcxNiBmb3IgdGhlIGRpc2N1c3Npb24uCiAKLTEuMTEgdHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWQgaW4gSFRUUC8yCi0KLSBGb3IgSFRUUC8xLCB3aGVuIC1IIHRyYW5zZmVyLWVuY29kaW5nOmNodW5rZWQgb3B0aW9uIGlzIGdpdmVuLCBjdXJsIGVuY29kZXMKLSB0aGUgcmVxdWVzdCB1c2luZyBjaHVua2VkIGVuY29kaW5nLiBCdXQgd2hlbiBIVFRQLzIgaXMgYmVpbmcgdXNlZCwgdGhlCi0gY29tbWFuZCB3cm9uZ2x5IHNlbmRzIGEgcmVxdWVzdCB3aXRoIGJvdGggY29udGVudC1sZW5ndGggYW5kCi0gdHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWQgaGVhZGVycyBiZWluZyBzZXQgKGFuZCB0aGUgcmVxdWVzdCBib2R5IGlzIG5vdAotIGNodW5rZWQtZW5jb2RlZCkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2lzc3Vlcy82NjIKLQotMS4xMiBDVVJMT1BUX1NFRUtGVU5DVElPTiBub3QgY2FsbGVkIHdpdGggQ1VSTEZPUk1fU1RSRUFNCisxLjExIENVUkxPUFRfU0VFS0ZVTkNUSU9OIG5vdCBjYWxsZWQgd2l0aCBDVVJMRk9STV9TVFJFQU0KIAogIEknbSB1c2luZyBsaWJjdXJsIHRvIFBPU1QgZm9ybSBkYXRhIHVzaW5nIGEgRklMRSogd2l0aCB0aGUgQ1VSTEZPUk1fU1RSRUFNCiAgb3B0aW9uIG9mIGN1cmxfZm9ybWFkZCgpLiBJJ3ZlIG5vdGljZWQgdGhhdCBpZiB0aGUgY29ubmVjdGlvbiBkcm9wcyBhdCBqdXN0CkBAIC0yMTUsNiArMjEzLDEzIEBACiAgc2VlbSB0byBmaXggdGhlIGlzc3VlIG9yIGV2ZW4gZ2V0IGNhbGxlZC4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9pc3N1ZXMvNzY4CiAKKzEuMTIgSFRUUC8yIHNlcnZlciBwdXNoIGVuYWJsZWQgd2hlbiBubyBwdXNoZXMgY2FuIGJlIGFjY2VwdGVkCisKKyBJZiB0aGUgZWFzeSBpbnRlcmZhY2UgaXMgdXNlZCwgd2UgY2FuJ3QgYWNjZXB0IGFueSBzZXJ2ZXIgcHVzaGVzIHNvIHdlIHNob3VsZAorIHN3aXRjaCBvZmYgdGhlbSBhbHJlYWR5IGluIHRoZSBoMiBzZXR0aW5ncyBhcyBvdGhlcndpc2Ugd2UgcmlzayB3YXN0aW5nCisgYmFuZHdpZHRoIHdoZW4gdGhlIHNlcnZlciB0cmllcyB0byBzZW5kIHB1c2hlcyBsaWJjdXJsIHdpbGwgbmV2ZXIgYWNjZXB0LgorCisgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzkyNwogCiAyLiBUTFMKIApAQCAtMzQxLDYgKzM0Niw1OSBAQAogICBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvP2k9MzQ1CiAgIGh0dHBzOi8vY3VybC5oYXh4LnNlL2J1Zy8/aT03MzEKIAorNS42IGNtYWtlIHN1cHBvcnQgZ2FwcworCisgVGhlIGNtYWtlIGJ1aWxkIHNldHVwIGxhY2tzIHNldmVyYWwgZmVhdHVyZXMgdGhhdCB0aGUgYXV0b2NvbmYgYnVpbGQKKyBvZmZlcnMuIFRoaXMgaW5jbHVkZXM6CisKKyAgLSBzeW1ib2wgaGlkaW5nIHdoZW4gdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIGJ1aWx0CisgIC0gdXNlIG9mIGNvcnJlY3Qgc29uYW1lIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgYnVpbGQKKyAgLSBzdXBwb3J0IGZvciBzZXZlcmFsIFRMUyBiYWNrZW5kcyBhcmUgbWlzc2luZworICAtIHRoZSB1bml0IHRlc3RzIGNhdXNlIGxpbmsgZmFpbHVyZXMgaW4gcmVndWxhciBub24tc3RhdGljIGJ1aWxkcworICAtIG5vIG5naHR0cDIgY2hlY2sKKworNS43IFZpc3VhbCBTdHVkaW8gcHJvamVjdCBnYXBzCisKKyBUaGUgVmlzdWFsIFN0dWRpbyBwcm9qZWN0cyBsYWNrIHNvbWUgZmVhdHVyZXMgdGhhdCB0aGUgYXV0b2NvbmYgYW5kIG5tYWtlCisgYnVpbGRzIG9mZmVyLCBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisKKyAgLSBzdXBwb3J0IGZvciB6bGliIGFuZCBuZ2h0dHAyCisgIC0gdXNlIG9mIHN0YXRpYyBydW50aW1lIGxpYnJhcmllcworICAtIGFkZCB0aGUgdGVzdCBzdWl0ZSBjb21wb25lbnRzCisKKyBJbiBhZGRpdGlvbiB0byB0aGlzIHRoZSBmb2xsb3dpbmcgY291bGQgYmUgaW1wbGVtZW50ZWQ6CisKKyAgLSBzdXBwb3J0IGZvciBvdGhlciBkZXZlbG9wbWVudCBJREVzCisgIC0gYWRkIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGlyZC1wYXJ0eSBETExzCisKKzUuOCBjb25maWd1cmUgZmluZGluZyBsaWJzIGluIHdyb25nIGRpcmVjdG9yeQorCisgV2hlbiB0aGUgY29uZmlndXJlIHNjcmlwdCBjaGVja3MgZm9yIHRoaXJkLXBhcnR5IGxpYnJhcmllcywgaXQgYWRkcyB0aG9zZQorIGRpcmVjdG9yaWVzIHRvIHRoZSBMREZMQUdTIHZhcmlhYmxlIGFuZCB0aGVuIHRyaWVzIGxpbmtpbmcgdG8gc2VlIGlmIGl0Cisgd29ya3MuIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlIGZvdW5kIGRpcmVjdG9yeSBpcyBrZXB0IGluIHRoZSBMREZMQUdTIHZhcmlhYmxlCisgd2hlbiB0aGUgc2NyaXB0IGNvbnRpbnVlcyB0byBleGVjdXRlIGFuZCBkbyBtb3JlIHRlc3RzIGFuZCBwb3NzaWJseSBjaGVjayBmb3IKKyBtb3JlIGxpYnJhcmllcy4KKworIFRoaXMgY2FuIG1ha2Ugc3Vic2VxdWVudCBjaGVja3MgZm9yIGxpYnJhcmllcyB3cm9uZ2x5IGRldGVjdCBhbm90aGVyCisgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5IHRoYXQgd2FzIHByZXZpb3VzbHkgYWRkZWQgdG8gTERGTEFHUyBieSBhbm90aGVyCisgbGlicmFyeSBjaGVjayEKKworIEEgcG9zc2libHkgYmV0dGVyIHdheSB0byBkbyB0aGVzZSBjaGVja3Mgd291bGQgYmUgdG8ga2VlcCB0aGUgcHJpc3RpbmUgTERGTEFHUworIGV2ZW4gYWZ0ZXIgc3VjY2Vzc2Z1bCBjaGVja3MgYW5kIGluc3RlYWQgYWRkIHRob3NlIHZlcmlmaWVkIHBhdGhzIHRvIGEKKyBzZXBhcmF0ZSB2YXJpYWJsZSB0aGF0IG9ubHkgYWZ0ZXIgYWxsIGxpYnJhcnkgY2hlY2tzIGhhdmUgYmVlbiBwZXJmb3JtZWQgZ2V0cworIGFwcGVuZGVkIHRvIExERkxBR1MuCisKKzUuOSBVdGlsaXplIFJlcXVpcmVzLnByaXZhdGUgZGlyZWN0aXZlcyBpbiBsaWJjdXJsLnBjCisKKyBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2lzc3Vlcy84NjQKKworNS4xMCBGaXggdGhlIGdjYyB0eXBlY2hlY2tzCisKKyBJc3N1ZSAjODQ2IGlkZW50aWZpZXMgYSBwcm9ibGVtIHdpdGggdGhlIGdjYy10eXBlY2hlY2tzIGFuZCBob3cgdGhlIHR5cGVzIGFyZQorIGRvY3VtZW50ZWQgYW5kIGNoZWNrZWQgZm9yIENVUkxJTkZPX0NFUlRJTkZPIGJ1dCBvdXIgYXR0ZW1wdHMgdG8gZml4IHRoZQorIGlzc3VlIHdlcmUgZnV0aWxlIGFuZCBuZWVkcyBtb3JlIGF0dGVudGlvbi4KKworIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzg0NgogCiA2LiBBdXRoZW50aWNhdGlvbgogCkBAIC0zNjcsMTMgKzQyNSwxNyBAQAogICJzeXN0ZW0gY29udGV4dCIgd2lsbCBtYWtlIGl0IHVzZSB3cm9uZyg/KSB1c2VyIG5hbWUgLSBhdCBsZWFzdCB3aGVuIGNvbXBhcmVkCiAgdG8gd2hhdCB3aW5odHRwIGRvZXMuIFNlZSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9NTM1CiAKLTYuNCBOZWdvdGlhdGUgbmVlZHMgYSBmYWtlIHVzZXIgbmFtZQorNi40IE5lZ290aWF0ZSBhbmQgS2VyYmVyb3MgVjUgbmVlZCBhIGZha2UgdXNlciBuYW1lCiAKLSBUbyBnZXQgSFRUUCBOZWdvdGlhdGUgKFNQTkVHTykgYXV0aGVudGljYXRpb24gdG8gd29yayBmaW5lLCB5b3UgbmVlZCB0bwotIHByb3ZpZGUgYSAoZmFrZSkgdXNlciBuYW1lICh0aGlzIGNvbmNlcm5zIGJvdGggY3VybCBhbmQgdGhlIGxpYikgYmVjYXVzZSB0aGUKLSBjb2RlIHdyb25nbHkgb25seSBjb25zaWRlcnMgYXV0aGVudGljYXRpb24gaWYgdGhlcmUncyBhIHVzZXIgbmFtZSBwcm92aWRlZC4KLSBodHRwczovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9NDQwIEhvdz8KLSBodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA0LTA4LzAxODIuaHRtbAorIEluIG9yZGVyIHRvIGdldCBOZWdvdGlhdGUgKFNQTkVHTykgYXV0aGVudGljYXRpb24gdG8gd29yayBpbiBIVFRQIG9yIEtlcmJlcm9zCisgVjUgaW4gdGhlIGUtbWFpbCBwcm90b2NvbHMsIHlvdSBuZWVkIHRvICBwcm92aWRlIGEgKGZha2UpIHVzZXIgbmFtZSAodGhpcworIGNvbmNlcm5zIGJvdGggY3VybCBhbmQgdGhlIGxpYikgYmVjYXVzZSB0aGUgY29kZSB3cm9uZ2x5IG9ubHkgY29uc2lkZXJzCisgYXV0aGVudGljYXRpb24gaWYgdGhlcmUncyBhIHVzZXIgbmFtZSBwcm92aWRlZCBieSBzZXR0aW5nCisgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCBpbiB1cmwuYyAgaHR0cHM6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTQ0MCBIb3c/CisgaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNC0wOC8wMTgyLmh0bWwgQSBwb3NzaWJsZSBzb2x1dGlvbiBpcyB0bworIGVpdGhlciBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBiZSBzZXQgb3IgaW50cm9kdWNlIGEgdmFyaWFibGUgc3VjaCBhcworIG5ldyBjb25uLT5iaXRzLndhbnRfYXV0aGVudGljYXRpb24gd2hpY2ggaXMgc2V0IHdoZW4gYW55IG9mIHRoZSBhdXRoZW50aWNhdGlvbgorIG9wdGlvbnMgYXJlIHNldC4KIAogCiA3LiBGVFAKQEAgLTQ0Miw2ICs1MDQsMTcgQEAKICB0aGUgdXNlciB3YW50cyB0byByZWFjaCB0aGUgcm9vdCBkaXIgKHRoaXMgZXhjZXB0aW9uIFNIQUxMIHJlbWFpbiBldmVuIHdoZW4KICB0aGlzIGJ1ZyBpcyBmaXhlZCkuCiAKKzcuOCBQcmVtYXR1cmUgdHJhbnNmZXIgZW5kIGJ1dCBoZWFsdGh5IGNvbnRyb2wgY2hhbm5lbAorCisgV2hlbiAnbXVsdGlfZG9uZScgaXMgY2FsbGVkIGJlZm9yZSB0aGUgdHJhbnNmZXIgaGFzIGJlZW4gY29tcGxldGVkIHRoZSBub3JtYWwKKyB3YXksIGl0IGlzIGNvbnNpZGVyZWQgYSAicHJlbWF0dXJlIiB0cmFuc2ZlciBlbmQuIEluIHRoaXMgc2l0dWF0aW9uLCBsaWJjdXJsCisgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGFzc3VtaW5nIGl0IGRvZXNuJ3Qga25vdyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24gc28KKyBpdCBjYW4ndCBiZSByZXVzZWQgZm9yIHN1YnNlcXVlbnQgcmVxdWVzdHMuCisKKyBXaXRoIEZUUCBob3dldmVyLCB0aGlzIGlzbid0IG5lY2Vzc2FyaWx5IHRydWUgYnV0IHRoZXJlIGFyZSBhIGJ1bmNoIG9mCisgc2l0dWF0aW9ucyAobGlzdGVkIGluIHRoZSBmdHBfZG9uZSBjb2RlKSB3aGVyZSBpdCAqY291bGQqIGtlZXAgdGhlIGNvbm5lY3Rpb24KKyBhbGl2ZSBldmVuIGluIHRoaXMgc2l0dWF0aW9uIC0gYnV0IHRoZSBjdXJyZW50IGNvZGUgZG9lc24ndC4gRml4aW5nIHRoaXMgd291bGQKKyBhbGxvdyBsaWJjdXJsIHRvIHJldXNlIEZUUCBjb25uZWN0aW9ucyBiZXR0ZXIuCiAKIDguIFRFTE5FVAogCkBAIC00OTMsMTIgKzU2Niw2IEBACiAKICBsaWJjdXJsIGRvZXNuJ3Qgc3VwcG9ydCBhY3RpdmUgRlRQIG92ZXIgYSBTT0NLUyBwcm94eQogCi0xMC41IFNPQ0tTIHByb3h5IG5vdCB3b3JraW5nIHZpYSBJUHY2Ci0KLSBgY3VybCAtLXByb3h5ICJzb2NrczovL2hvc3RuYW1lLXdpdGgtQUFBQS1yZWNvcmQiIGV4YW1wbGUuY29tYAotCi0gY3VybDogKDcpIENhbid0IGNvbXBsZXRlIFNPQ0tTNCBjb25uZWN0aW9uIHRvIDEuMi4zLjQ6MTA5LiAoOTEpLAotIHJlcXVlc3QgcmVqZWN0ZWQgb3IgZmFpbGVkLgogCiAxMS4gSW50ZXJuYWxzCiAKQEAgLTUxNyw2ICs1ODQsMTggQEAKICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QuIEJ1dCB0aGUgZXJyb3IgYnVmZmVyIHNldCBieSBDVVJMT1BUX0VSUk9SQlVGRkVSCiAgcmVtYWlucyBlbXB0eS4gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzU0NAogCisxMS4zIGMtYXJlcyBkZXZpYXRlcyBmcm9tIHN0b2NrIHJlc29sdmVyIG9uIGh0dHA6Ly8xMzQ2NTY5Nzc4CisKKyBXaGVuIHVzaW5nIHRoZSBzb2NrZXQgcmVzb2x2ZXJzLCB0aGF0IFVSTCBiZWNvbWVzOgorCisgICAgICogUmVidWlsdCBVUkwgdG86IGh0dHA6Ly8xMzQ2NTY5Nzc4LworICAgICAqICAgVHJ5aW5nIDgwLjY3LjYuNTAuLi4KKworIGJ1dCB3aXRoIGMtYXJlcyBpdCBpbnN0ZWFkIHNheXMgIkNvdWxkIG5vdCByZXNvbHZlOiAxMzQ2NTY5Nzc4IChEb21haW4gbmFtZQorIG5vdCBmb3VuZCkiCisKKyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9pc3N1ZXMvODkzCisKIAogMTIuIExEQVAgYW5kIE9wZW5MREFQCiAKQEAgLTU0MCw3ICs2MTksNyBAQAogICAgICBodHRwczovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDE2LTAxLzAxMDEuaHRtbAogCiAKLTEzIFRDUC9JUAorMTMuIFRDUC9JUAogCiAxMy4xIC0taW50ZXJmYWNlIGZvciBpcHY2IGJpbmRzIHRvIHVudXNhYmxlIElQIGFkZHJlc3MKIApkaWZmIC0tZ2l0IGEvZG9jcy9MSUNFTlNFLU1JWElORyBiL2RvY3MvTElDRU5TRS1NSVhJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTM2Y2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9MSUNFTlNFLU1JWElORworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0gICAgICAgICBMaWNlbnNlIE1peGluZyB3aXRoIGFwcHMsIGxpYmN1cmwgYW5kIFRoaXJkIFBhcnR5IExpYnJhcmllcwotICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotbGliY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgZmFpciBhbW91bnQgb2YgdmFyaW91cyB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMsCi1saWJyYXJpZXMgdGhhdCBhcmUgd3JpdHRlbiBhbmQgcHJvdmlkZWQgYnkgb3RoZXIgcGFydGllcyB0aGF0IGFyZSBkaXN0cmlidXRlZAotdXNpbmcgdGhlaXIgb3duIGxpY2Vuc2VzLiBFdmVuIGxpYmN1cmwgaXRzZWxmIGNvbnRhaW5zIGNvZGUgdGhhdCBtYXkgY2F1c2UKLXByb2JsZW1zIHRvIHNvbWUuIFRoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZGVzY3JpYmUgd2hhdCBsaWNlbnNlcyBsaWJjdXJsIGFuZAotdGhlIG90aGVyIGxpYnJhcmllcyB1c2UgYW5kIHdoYXQgcG9zc2libGUgZGlsZW1tYXMgbGlua2luZyBhbmQgbWl4aW5nIHRoZW0gYWxsCi1jYW4gbGVhZCB0byBmb3IgZW5kIHVzZXJzLgotCi1JIGFtIG5vdCBhIGxhd3llciBhbmQgdGhpcyBpcyBub3QgbGVnYWwgYWR2aWNlIQotCi1PbmUgY29tbW9uIGRpbGVtbWEgaXMgdGhhdCBHUExbMV0tbGljZW5zZWQgY29kZSBpcyBub3QgYWxsb3dlZCB0byBiZSBsaW5rZWQKLXdpdGggY29kZSBsaWNlbnNlZCB1bmRlciB0aGUgT3JpZ2luYWwgQlNEIGxpY2Vuc2UgKHdpdGggdGhlIGFubm91bmNlbWVudAotY2xhdXNlKS4gWW91IG1heSBzdGlsbCBidWlsZCB5b3VyIG93biBjb3BpZXMgdGhhdCB1c2UgdGhlbSBhbGwsIGJ1dAotZGlzdHJpYnV0aW5nIHRoZW0gYXMgYmluYXJpZXMgd291bGQgYmUgdG8gdmlvbGF0ZSB0aGUgR1BMIGxpY2Vuc2UgLSB1bmxlc3MgeW91Ci1hY2NvbXBhbnkgeW91ciBsaWNlbnNlIHdpdGggYW4gZXhjZXB0aW9uWzJdLiBUaGlzIHBhcnRpY3VsYXIgcHJvYmxlbSB3YXMKLWFkZHJlc3NlZCB3aGVuIHRoZSBNb2RpZmllZCBCU0QgbGljZW5zZSB3YXMgY3JlYXRlZCwgd2hpY2ggZG9lcyBub3QgaGF2ZSB0aGUKLWFubm91bmNlbWVudCBjbGF1c2UgdGhhdCBjb2xsaWRlcyB3aXRoIEdQTC4KLQotbGliY3VybCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sCi0KLSAgICAgICAgVXNlcyBhbiBNSVQgKG9yIE1vZGlmaWVkIEJTRCktc3R5bGUgbGljZW5zZSB0aGF0IGlzIGFzIGxpYmVyYWwgYXMKLSAgICAgICAgcG9zc2libGUuCi0KLU9wZW5TU0wgaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAotCi0gICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIGFuIE9yaWdpbmFsIEJTRC1zdHlsZSBsaWNlbnNlCi0gICAgICAgIHdpdGggYW4gYW5ub3VuY2VtZW50IGNsYXVzZSB0aGF0IG1ha2VzIGl0ICJpbmNvbXBhdGlibGUiIHdpdGggR1BMLiBZb3UKLSAgICAgICAgYXJlIG5vdCBhbGxvd2VkIHRvIHNoaXAgYmluYXJpZXMgdGhhdCBsaW5rIHdpdGggT3BlblNTTCB0aGF0IGluY2x1ZGVzCi0gICAgICAgIEdQTCBjb2RlICh1bmxlc3MgdGhhdCBzcGVjaWZpYyBHUEwgY29kZSBpbmNsdWRlcyBhbiBleGNlcHRpb24gZm9yCi0gICAgICAgIE9wZW5TU0wgLSBhIGhhYml0IHRoYXQgaXMgZ3Jvd2luZyBtb3JlIGFuZCBtb3JlIGNvbW1vbikuIElmIE9wZW5TU0wncwotICAgICAgICBsaWNlbnNpbmcgaXMgYSBwcm9ibGVtIGZvciB5b3UsIGNvbnNpZGVyIHVzaW5nIGFub3RoZXIgVExTIGxpYnJhcnkuCi0KLUdudVRMUyAgaHR0cDovL3d3dy5nbnV0bHMub3JnLwotCi0gICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIHRoZSBMR1BMWzNdIGxpY2Vuc2UuIElmIHRoaXMgaXMKLSAgICAgICAgYSBwcm9ibGVtIGZvciB5b3UsIGNvbnNpZGVyIHVzaW5nIGFub3RoZXIgVExTIGxpYnJhcnkuIEFsc28gbm90ZSB0aGF0Ci0gICAgICAgIEdudVRMUyBpdHNlbGYgZGVwZW5kcyBvbiBhbmQgdXNlcyBvdGhlciBsaWJzIChsaWJnY3J5cHQgYW5kCi0gICAgICAgIGxpYmdwZy1lcnJvcikgYW5kIHRoZXkgdG9vIGFyZSBMR1BMLSBvciBHUEwtbGljZW5zZWQuCi0KLVdvbGZTU0wgICBodHRwczovL3d3dy53b2xmc3NsLmNvbS8KLQotICAgICAgICAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgVXNlcyB0aGUgR1BMWzFdIGxpY2Vuc2Ugb3IgYQotICAgICAgICBwcm9waWV0YXJ5IGxpY2Vuc2UuIElmIHRoaXMgaXMgYSBwcm9ibGVtIGZvciB5b3UsIGNvbnNpZGVyIHVzaW5nCi0gICAgICAgIGFub3RoZXIgVExTIGxpYnJhcnkuCi0KLU5TUyAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUwotCi0gICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBJcyBjb3ZlcmVkIGJ5IHRoZSBNUExbNF0gbGljZW5zZSwKLSAgICAgICAgdGhlIEdQTFsxXSBsaWNlbnNlIGFuZCB0aGUgTEdQTFszXSBsaWNlbnNlLiBZb3UgbWF5IGNob29zZSB0byBsaWNlbnNlCi0gICAgICAgIHRoZSBjb2RlIHVuZGVyIE1QTCB0ZXJtcywgR1BMIHRlcm1zLCBvciBMR1BMIHRlcm1zLiBUaGVzZSBsaWNlbnNlcwotICAgICAgICBncmFudCB5b3UgZGlmZmVyZW50IHBlcm1pc3Npb25zIGFuZCBpbXBvc2UgZGlmZmVyZW50IG9ibGlnYXRpb25zLiBZb3UKLSAgICAgICAgc2hvdWxkIHNlbGVjdCB0aGUgbGljZW5zZSB0aGF0IGJlc3QgbWVldHMgeW91ciBuZWVkcy4KLQotYXhUTFMgICBodHRwOi8vYXh0bHMuc291cmNlZm9yZ2UubmV0LwotCi0gICAgICAgIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIGEgTW9kaWZpZWQgQlNELXN0eWxlIGxpY2Vuc2UuCi0KLW1iZWRUTFMgaHR0cHM6Ly90bHMubWJlZC5vcmcvCi0KLSAgICAgICAgKE1heSBiZSB1c2VkIGZvciBTU0wvVExTIHN1cHBvcnQpIFVzZXMgdGhlIEdQTFsxXSBsaWNlbnNlIG9yIGEKLSAgICAgICAgcHJvcGlldGFyeSBsaWNlbnNlLiBJZiB0aGlzIGlzIGEgcHJvYmxlbSBmb3IgeW91LCBjb25zaWRlciB1c2luZwotICAgICAgICBhbm90aGVyIFRMUyBsaWJyYXJ5LgotCi1Cb3JpbmdTU0wgaHR0cHM6Ly9ib3Jpbmdzc2wuZ29vZ2xlc291cmNlLmNvbS8KLQotICAgICAgICAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgQXMgYW4gT3BlblNTTCBmb3JrLCBpdCBoYXMgdGhlIHNhbWUKLSAgICAgICAgbGljZW5zZSBhcyB0aGF0LgotCi1saWJyZXNzbCBodHRwOi8vd3d3LmxpYnJlc3NsLm9yZy8KLQotICAgICAgICAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgQXMgYW4gT3BlblNTTCBmb3JrLCBpdCBoYXMgdGhlIHNhbWUKLSAgICAgICAgbGljZW5zZSBhcyB0aGF0LgotCi1jLWFyZXMgIGh0dHBzOi8vZGFuaWVsLmhheHguc2UvcHJvamVjdHMvYy1hcmVzL2xpY2Vuc2UuaHRtbAotCi0gICAgICAgIChVc2VkIGZvciBhc3luY2hyb25vdXMgbmFtZSByZXNvbHZlcykgVXNlcyBhbiBNSVQgbGljZW5zZSB0aGF0IGlzIHZlcnkKLSAgICAgICAgbGliZXJhbCBhbmQgaW1wb3NlcyBubyByZXN0cmljdGlvbnMgb24gYW55IG90aGVyIGxpYnJhcnkgb3IgcGFydCB5b3UKLSAgICAgICAgbWF5IGxpbmsgd2l0aC4KLQotemxpYiAgICBodHRwOi8vd3d3LnpsaWIubmV0L3psaWJfbGljZW5zZS5odG1sCi0KLSAgICAgICAgKFVzZWQgZm9yIGNvbXByZXNzZWQgVHJhbnNmZXItRW5jb2Rpbmcgc3VwcG9ydCkgVXNlcyBhbiBNSVQtc3R5bGUKLSAgICAgICAgbGljZW5zZSB0aGF0IHNob3VsZG4ndCBjb2xsaWRlIHdpdGggYW55IG90aGVyIGxpYnJhcnkuCi0KLU1JVCBLZXJiZXJvcyBodHRwOi8vd2ViLm1pdC5lZHUva2VyYmVyb3Mvd3d3L2Rpc3QvCi0KLSAgICAgICAgKE1heSBiZSB1c2VkIGZvciBHU1Mgc3VwcG9ydCkgTUlUIGxpY2Vuc2VkLCB0aGF0IHNob3VsZG4ndCBjb2xsaWRlCi0gICAgICAgIHdpdGggYW55IG90aGVyIHBhcnRzLgotCi1IZWltZGFsIGh0dHA6Ly93d3cuaDVsLm9yZwotCi0gICAgICAgIChNYXkgYmUgdXNlZCBmb3IgR1NTIHN1cHBvcnQpIEhlaW1kYWwgaXMgT3JpZ2luYWwgQlNEIGxpY2Vuc2VkIHdpdGgKLSAgICAgICAgdGhlIGFubm91bmNlbWVudCBjbGF1c2UuCi0KLUdOVSBHU1MgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc3MvCi0KLSAgICAgICAgKE1heSBiZSB1c2VkIGZvciBHU1Mgc3VwcG9ydCkgR05VIEdTUyBpcyBHUEwgbGljZW5zZWQuIE5vdGUgdGhhdCB5b3UKLSAgICAgICAgbWF5IG5vdCBkaXN0cmlidXRlIGJpbmFyeSBjdXJsIHBhY2thZ2VzIHRoYXQgdXNlcyB0aGlzIGlmIHlvdSBidWlsZAotICAgICAgICBjdXJsIHRvIGFsc28gbGluayBhbmQgdXNlIGFueSBPcmlnaW5hbCBCU0QgbGljZW5zZWQgbGlicmFyaWVzIQotCi1saWJpZG4gIGh0dHA6Ly9qb3NlZnNzb24ub3JnL2xpYmlkbi8KLQotICAgICAgICAoVXNlZCBmb3IgSUROQSBzdXBwb3J0KSBVc2VzIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gICAgICAgIExpY2Vuc2UgWzNdLiBMR1BMIGlzIGEgdmFyaWF0aW9uIG9mIEdQTCB3aXRoIHNsaWdodGx5IGxlc3MgYWdncmVzc2l2ZQotICAgICAgICAiY29weWxlZnQiLiBUaGlzIGxpY2Vuc2UgcmVxdWlyZXMgbW9yZSByZXF1aXJlbWVudHMgdG8gYmUgbWV0IHdoZW4KLSAgICAgICAgZGlzdHJpYnV0aW5nIGJpbmFyaWVzLCBzZWUgdGhlIGxpY2Vuc2UgZm9yIGRldGFpbHMuIEFsc28gbm90ZSB0aGF0IGlmCi0gICAgICAgIHlvdSBkaXN0cmlidXRlIGEgYmluYXJ5IHRoYXQgaW5jbHVkZXMgdGhpcyBsaWJyYXJ5LCB5b3UgbXVzdCBhbHNvCi0gICAgICAgIGluY2x1ZGUgdGhlIGZ1bGwgTEdQTCBsaWNlbnNlIHRleHQuIFBsZWFzZSBwcm9wZXJseSBwb2ludCBvdXQgd2hhdAotICAgICAgICBwYXJ0cyBvZiB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSB0aGF0IHRoZSBsaWNlbnNlIGFkZHJlc3Nlcy4KLQotT3BlbkxEQVAgaHR0cDovL3d3dy5vcGVubGRhcC5vcmcvc29mdHdhcmUvcmVsZWFzZS9saWNlbnNlLmh0bWwKLQotICAgICAgICAoVXNlZCBmb3IgTERBUCBzdXBwb3J0KSBVc2VzIGEgTW9kaWZpZWQgQlNELXN0eWxlIGxpY2Vuc2UuIFNpbmNlCi0gICAgICAgIGxpYmN1cmwgdXNlcyBPcGVuTERBUCBhcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHksIEkgaGF2ZSBub3QgaGVhcmQgb2YKLSAgICAgICAgYW55b25lIHRoYXQgc2hpcHMgT3BlbkxEQVAgbGlua2VkIHdpdGggbGliY3VybCBpbiBhbiBhcHAuCi0KLWxpYnNzaDIgaHR0cHM6Ly93d3cubGlic3NoMi5vcmcvCi0KLSAgICAgICAgKFVzZWQgZm9yIHNjcCBhbmQgc2Z0cCBzdXBwb3J0KSBsaWJzc2gyIHVzZXMgYSBNb2RpZmllZCBCU0Qtc3R5bGUKLSAgICAgICAgbGljZW5zZS4KLQotWzFdID0gR1BMIC0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKLVsyXSA9IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLWZhcS5odG1sI0dQTEluY29tcGF0aWJsZUxpYnMgZGV0YWlscyBvbgotICAgICAgaG93IHRvIHdyaXRlIHN1Y2ggYW4gZXhjZXB0aW9uIHRvIHRoZSBHUEwKLVszXSA9IExHUEwgLSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2U6Ci0gICAgICBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbAotWzRdID0gTVBMIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZToKLSAgICAgIGh0dHBzOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KZGlmZiAtLWdpdCBhL2RvY3MvTElDRU5TRS1NSVhJTkcubWQgYi9kb2NzL0xJQ0VOU0UtTUlYSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzZiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL0xJQ0VOU0UtTUlYSU5HLm1kCkBAIC0wLDAgKzEsMTI3IEBACitMaWNlbnNlIE1peGluZworPT09PT09PT09PT09PT0KKworbGliY3VybCBjYW4gYmUgYnVpbHQgdG8gdXNlIGEgZmFpciBhbW91bnQgb2YgdmFyaW91cyB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMsCitsaWJyYXJpZXMgdGhhdCBhcmUgd3JpdHRlbiBhbmQgcHJvdmlkZWQgYnkgb3RoZXIgcGFydGllcyB0aGF0IGFyZSBkaXN0cmlidXRlZAordXNpbmcgdGhlaXIgb3duIGxpY2Vuc2VzLiBFdmVuIGxpYmN1cmwgaXRzZWxmIGNvbnRhaW5zIGNvZGUgdGhhdCBtYXkgY2F1c2UKK3Byb2JsZW1zIHRvIHNvbWUuIFRoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZGVzY3JpYmUgd2hhdCBsaWNlbnNlcyBsaWJjdXJsIGFuZAordGhlIG90aGVyIGxpYnJhcmllcyB1c2UgYW5kIHdoYXQgcG9zc2libGUgZGlsZW1tYXMgbGlua2luZyBhbmQgbWl4aW5nIHRoZW0gYWxsCitjYW4gbGVhZCB0byBmb3IgZW5kIHVzZXJzLgorCitJIGFtIG5vdCBhIGxhd3llciBhbmQgdGhpcyBpcyBub3QgbGVnYWwgYWR2aWNlIQorCitPbmUgY29tbW9uIGRpbGVtbWEgaXMgdGhhdCBbR1BMXShodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sKQorbGljZW5zZWQgY29kZSBpcyBub3QgYWxsb3dlZCB0byBiZSBsaW5rZWQgd2l0aCBjb2RlIGxpY2Vuc2VkIHVuZGVyIHRoZQorW09yaWdpbmFsIEJTRCBsaWNlbnNlXShodHRwczovL3NwZHgub3JnL2xpY2Vuc2VzL0JTRC00LUNsYXVzZS5odG1sKSAod2l0aCB0aGUKK2Fubm91bmNlbWVudCBjbGF1c2UpLiBZb3UgbWF5IHN0aWxsIGJ1aWxkIHlvdXIgb3duIGNvcGllcyB0aGF0IHVzZSB0aGVtIGFsbCwKK2J1dCBkaXN0cmlidXRpbmcgdGhlbSBhcyBiaW5hcmllcyB3b3VsZCBiZSB0byB2aW9sYXRlIHRoZSBHUEwgbGljZW5zZSAtIHVubGVzcworeW91IGFjY29tcGFueSB5b3VyIGxpY2Vuc2Ugd2l0aCBhbgorW2V4Y2VwdGlvbl0oaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtZmFxLmh0bWwjR1BMSW5jb21wYXRpYmxlTGlicykuIFRoaXMKK3BhcnRpY3VsYXIgcHJvYmxlbSB3YXMgYWRkcmVzc2VkIHdoZW4gdGhlIFtNb2RpZmllZCBCU0QKK2xpY2Vuc2VdKGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlKSB3YXMgY3JlYXRlZCwgd2hpY2ggZG9lcworbm90IGhhdmUgdGhlIGFubm91bmNlbWVudCBjbGF1c2UgdGhhdCBjb2xsaWRlcyB3aXRoIEdQTC4KKworIyMgbGliY3VybAorCisgVXNlcyBhbiBbTUlUIHN0eWxlIGxpY2Vuc2VdKGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwpIHRoYXQgaXMKKyB2ZXJ5IGxpYmVyYWwuCisKKyMjIE9wZW5TU0wKKworIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIGFuIE9yaWdpbmFsIEJTRC1zdHlsZSBsaWNlbnNlIHdpdGggYW4KKyBhbm5vdW5jZW1lbnQgY2xhdXNlIHRoYXQgbWFrZXMgaXQgImluY29tcGF0aWJsZSIgd2l0aCBHUEwuIFlvdSBhcmUgbm90CisgYWxsb3dlZCB0byBzaGlwIGJpbmFyaWVzIHRoYXQgbGluayB3aXRoIE9wZW5TU0wgdGhhdCBpbmNsdWRlcyBHUEwgY29kZQorICh1bmxlc3MgdGhhdCBzcGVjaWZpYyBHUEwgY29kZSBpbmNsdWRlcyBhbiBleGNlcHRpb24gZm9yIE9wZW5TU0wgLSBhIGhhYml0CisgdGhhdCBpcyBncm93aW5nIG1vcmUgYW5kIG1vcmUgY29tbW9uKS4gSWYgT3BlblNTTCdzIGxpY2Vuc2luZyBpcyBhIHByb2JsZW0KKyBmb3IgeW91LCBjb25zaWRlciB1c2luZyBhbm90aGVyIFRMUyBsaWJyYXJ5LgorCisjIyBHbnVUTFMKKworIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIHRoZQorIFtMR1BMXShodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCkgbGljZW5zZS4gSWYgdGhpcyBpcyBhIHByb2JsZW0KKyBmb3IgeW91LCBjb25zaWRlciB1c2luZyBhbm90aGVyIFRMUyBsaWJyYXJ5LiBBbHNvIG5vdGUgdGhhdCBHbnVUTFMgaXRzZWxmCisgZGVwZW5kcyBvbiBhbmQgdXNlcyBvdGhlciBsaWJzIChsaWJnY3J5cHQgYW5kIGxpYmdwZy1lcnJvcikgYW5kIHRoZXkgdG9vIGFyZQorIExHUEwtIG9yIEdQTC1saWNlbnNlZC4KKworIyMgV29sZlNTTAorCisgKE1heSBiZSB1c2VkIGZvciBTU0wvVExTIHN1cHBvcnQpIFVzZXMgdGhlIEdQTCBsaWNlbnNlIG9yIGEgcHJvcHJpZXRhcnkKKyBsaWNlbnNlLiBJZiB0aGlzIGlzIGEgcHJvYmxlbSBmb3IgeW91LCBjb25zaWRlciB1c2luZyBhbm90aGVyIFRMUyBsaWJyYXJ5LgorCisjIyBOU1MKKworIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBJcyBjb3ZlcmVkIGJ5IHRoZQorIFtNUExdKGh0dHBzOi8vd3d3Lm1vemlsbGEub3JnL01QTC8pIGxpY2Vuc2UsIHRoZSBHUEwgbGljZW5zZSBhbmQgdGhlIExHUEwKKyBsaWNlbnNlLiBZb3UgbWF5IGNob29zZSB0byBsaWNlbnNlIHRoZSBjb2RlIHVuZGVyIE1QTCB0ZXJtcywgR1BMIHRlcm1zLCBvcgorIExHUEwgdGVybXMuIFRoZXNlIGxpY2Vuc2VzIGdyYW50IHlvdSBkaWZmZXJlbnQgcGVybWlzc2lvbnMgYW5kIGltcG9zZQorIGRpZmZlcmVudCBvYmxpZ2F0aW9ucy4gWW91IHNob3VsZCBzZWxlY3QgdGhlIGxpY2Vuc2UgdGhhdCBiZXN0IG1lZXRzIHlvdXIKKyBuZWVkcy4KKworIyMgYXhUTFMKKworIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIGEgTW9kaWZpZWQgQlNELXN0eWxlIGxpY2Vuc2UuCisKKyMjIG1iZWRUTFMKKworIChNYXkgYmUgdXNlZCBmb3IgU1NML1RMUyBzdXBwb3J0KSBVc2VzIHRoZSBbQXBhY2hlIDIuMAorIGxpY2Vuc2VdKGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQXBhY2hlLTIuMCkgb3IgdGhlIEdQTCBsaWNlbnNlLgorIFlvdSBtYXkgY2hvb3NlIHRvIGxpY2Vuc2UgdGhlIGNvZGUgdW5kZXIgQXBhY2hlIDIuMCB0ZXJtcyBvciBHUEwgdGVybXMuCisgVGhlc2UgbGljZW5zZXMgZ3JhbnQgeW91IGRpZmZlcmVudCBwZXJtaXNzaW9ucyBhbmQgaW1wb3NlIGRpZmZlcmVudAorIG9ibGlnYXRpb25zLiBZb3Ugc2hvdWxkIHNlbGVjdCB0aGUgbGljZW5zZSB0aGF0IGJlc3QgbWVldHMgeW91ciBuZWVkcy4KKworIyMgQm9yaW5nU1NMCisKKyAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgQXMgYW4gT3BlblNTTCBmb3JrLCBpdCBoYXMgdGhlIHNhbWUKKyBsaWNlbnNlIGFzIHRoYXQuCisKKyMjIGxpYnJlc3NsCisKKyAoTWF5IGJlIHVzZWQgZm9yIFNTTC9UTFMgc3VwcG9ydCkgQXMgYW4gT3BlblNTTCBmb3JrLCBpdCBoYXMgdGhlIHNhbWUKKyBsaWNlbnNlIGFzIHRoYXQuCisKKyMjIGMtYXJlcworCisgKFVzZWQgZm9yIGFzeW5jaHJvbm91cyBuYW1lIHJlc29sdmVzKSBVc2VzIGFuIE1JVCBsaWNlbnNlIHRoYXQgaXMgdmVyeQorIGxpYmVyYWwgYW5kIGltcG9zZXMgbm8gcmVzdHJpY3Rpb25zIG9uIGFueSBvdGhlciBsaWJyYXJ5IG9yIHBhcnQgeW91IG1heSBsaW5rCisgd2l0aC4KKworIyMgemxpYgorCisgKFVzZWQgZm9yIGNvbXByZXNzZWQgVHJhbnNmZXItRW5jb2Rpbmcgc3VwcG9ydCkgVXNlcyBhbiBNSVQtc3R5bGUgbGljZW5zZQorIHRoYXQgc2hvdWxkbid0IGNvbGxpZGUgd2l0aCBhbnkgb3RoZXIgbGlicmFyeS4KKworIyMgTUlUIEtlcmJlcm9zCisKKyAoTWF5IGJlIHVzZWQgZm9yIEdTUyBzdXBwb3J0KSBNSVQgbGljZW5zZWQsIHRoYXQgc2hvdWxkbid0IGNvbGxpZGUgd2l0aCBhbnkKKyBvdGhlciBwYXJ0cy4KKworIyMgSGVpbWRhbAorCisgKE1heSBiZSB1c2VkIGZvciBHU1Mgc3VwcG9ydCkgSGVpbWRhbCBpcyBPcmlnaW5hbCBCU0QgbGljZW5zZWQgd2l0aCB0aGUKKyBhbm5vdW5jZW1lbnQgY2xhdXNlLgorCisjIyBHTlUgR1NTCisKKyAoTWF5IGJlIHVzZWQgZm9yIEdTUyBzdXBwb3J0KSBHTlUgR1NTIGlzIEdQTCBsaWNlbnNlZC4gTm90ZSB0aGF0IHlvdSBtYXkgbm90CisgZGlzdHJpYnV0ZSBiaW5hcnkgY3VybCBwYWNrYWdlcyB0aGF0IHVzZXMgdGhpcyBpZiB5b3UgYnVpbGQgY3VybCB0byBhbHNvIGxpbmsKKyBhbmQgdXNlIGFueSBPcmlnaW5hbCBCU0QgbGljZW5zZWQgbGlicmFyaWVzIQorCisjIyBsaWJpZG4KKworIChVc2VkIGZvciBJRE5BIHN1cHBvcnQpIFVzZXMgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBbM10uIExHUEwKKyBpcyBhIHZhcmlhdGlvbiBvZiBHUEwgd2l0aCBzbGlnaHRseSBsZXNzIGFnZ3Jlc3NpdmUgImNvcHlsZWZ0Ii4gVGhpcyBsaWNlbnNlCisgcmVxdWlyZXMgbW9yZSByZXF1aXJlbWVudHMgdG8gYmUgbWV0IHdoZW4gZGlzdHJpYnV0aW5nIGJpbmFyaWVzLCBzZWUgdGhlCisgbGljZW5zZSBmb3IgZGV0YWlscy4gQWxzbyBub3RlIHRoYXQgaWYgeW91IGRpc3RyaWJ1dGUgYSBiaW5hcnkgdGhhdCBpbmNsdWRlcworIHRoaXMgbGlicmFyeSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoZSBmdWxsIExHUEwgbGljZW5zZSB0ZXh0LiBQbGVhc2UKKyBwcm9wZXJseSBwb2ludCBvdXQgd2hhdCBwYXJ0cyBvZiB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSB0aGF0IHRoZSBsaWNlbnNlCisgYWRkcmVzc2VzLgorCisjIyBPcGVuTERBUAorCisgKFVzZWQgZm9yIExEQVAgc3VwcG9ydCkgVXNlcyBhIE1vZGlmaWVkIEJTRC1zdHlsZSBsaWNlbnNlLiBTaW5jZSBsaWJjdXJsIHVzZXMKKyBPcGVuTERBUCBhcyBhIHNoYXJlZCBsaWJyYXJ5IG9ubHksIEkgaGF2ZSBub3QgaGVhcmQgb2YgYW55b25lIHRoYXQgc2hpcHMKKyBPcGVuTERBUCBsaW5rZWQgd2l0aCBsaWJjdXJsIGluIGFuIGFwcC4KKworIyMgbGlic3NoMgorCisgKFVzZWQgZm9yIHNjcCBhbmQgc2Z0cCBzdXBwb3J0KSBsaWJzc2gyIHVzZXMgYSBNb2RpZmllZCBCU0Qtc3R5bGUgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2RvY3MvTUFJTC1FVElRVUVUVEUgYi9kb2NzL01BSUwtRVRJUVVFVFRFCmluZGV4IDc1MDU4MDAuLjRkNDM5YWEgMTAwNjQ0Ci0tLSBhL2RvY3MvTUFJTC1FVElRVUVUVEUKKysrIGIvZG9jcy9NQUlMLUVUSVFVRVRURQpAQCAtNDgsNyArNDgsNyBAQAogICBlYWNoIHBhcnRpY3VsYXIgZ3JvdXAgYW5kIHN1YmN1bHR1cmUgdGhlcmUgd2lsbCBiZSBkaWZmZXJlbmNlcyBpbiB3aGF0IGlzCiAgIGFjY2VwdGFibGUgYW5kIHdoYXQgaXMgY29uc2lkZXJlZCBnb29kIG1hbm5lcnMuCiAKLSAgVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB3aGF0IHdlIGluIHRoZSBjVVJMIHByb2plY3QgY29uc2lkZXJzIHRvIGJlIGdvb2QKKyAgVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB3aGF0IHdlIGluIHRoZSBjdXJsIHByb2plY3QgY29uc2lkZXJzIHRvIGJlIGdvb2QKICAgZXRpcXVldHRlLCBhbmQgcHJpbWFyaWx5IHRoaXMgZm9jdXMgb24gaG93IHRvIGJlaGF2ZSBvbiBhbmQgaG93IHRvIHVzZSBvdXIKICAgbWFpbGluZyBsaXN0cy4KIApAQCAtMTA4LDcgKzEwOCw3IEBACiAgIG9mZi1saXN0LiBUaGUgc3ViamVjdCB3aWxsIGJlIHRha2VuIGNhcmUgb2YgYXMgZ29vZCBhcyBwb3NzaWJsZSB0byBwcmV2ZW50CiAgIHJlcGVhdGVkIG9mZmVuc2VzLCBidXQgcmVzcG9uZGluZyBvbiB0aGUgbGlzdCB0byBzdWNoIG1lc3NhZ2VzIG5ldmVyIGxlYWQgdG8KICAgYW55dGhpbmcgZ29vZCBhbmQgb25seSBwdXRzIHRoZSBsaWdodCBldmVuIG1vcmUgb24gdGhlIG9mZmVuZGVyOiB3aGljaCB3YXMKLSAgdGhlIGVudGlyZSBwdXJwb3NlIG9mIGl0IGdldHRpbmcgdG8gdGhlIGxpc3QgaW4gdGhlIGZpcnN0IHBsYWNlLgorICB0aGUgZW50aXJlIHB1cnBvc2Ugb2YgaXQgZ2V0dGluZyBzZW50IHRvIHRoZSBsaXN0IGluIHRoZSBmaXJzdCBwbGFjZS4KIAogICBEb24ndCBmZWVkIHRoZSB0cm9sbHMhCiAKQEAgLTExOSw3ICsxMTksNyBAQAogICB5b3VyIGVtYWlsIGFkZHJlc3MgYW5kIHBhc3N3b3JkIGFuZCBwcmVzcyB0aGUgdW5zdWJzY3JpYmUgYnV0dG9uLgogCiAgIEFsc28sIHRoaXMgaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGhlYWRlcnMgb2YgZXZlcnkgbWFpbCB0aGF0IGlzIHNlbnQKLSAgb3V0IHRvIGFsbCBjdXJsIHJlbGF0ZWQgbWFpbGluZyBsaXN0cyBhbmQgdGhlcmUncyBmb290ZXIgaW4gZWFjaCBtYWlsIHRoYXQKKyAgb3V0IHRvIGFsbCBjdXJsIHJlbGF0ZWQgbWFpbGluZyBsaXN0cyBhbmQgdGhlcmUncyBhIGZvb3RlciBpbiBlYWNoIG1haWwgdGhhdAogICBsaW5rcyB0byB0aGUgImFkbWluIiBwYWdlIG9uIHdoaWNoIHlvdSBjYW4gdW5zdWJzY3JpYmUgYW5kIGNoYW5nZSBvdGhlcgogICBvcHRpb25zLgogCkBAIC0yMDAsOCArMjAwLDcgQEAKIAogICBUaGlzIGlzIHdoeSB0b3AgcG9zdGluZyBpcyBzbyBiYWQ6CiAKLSAgICAgIEE6IEJlY2F1c2UgaXQgbWVzc2VzIHVwIHRoZSBvcmRlciBpbiB3aGljaCBwZW9wbGUgbm9ybWFsbHkgcmVhZAotICAgICAgICAgdGV4dC4KKyAgICAgIEE6IEJlY2F1c2UgaXQgbWVzc2VzIHVwIHRoZSBvcmRlciBpbiB3aGljaCBwZW9wbGUgbm9ybWFsbHkgcmVhZCB0ZXh0LgogICAgICAgUTogV2h5IGlzIHRvcC1wb3N0aW5nIHN1Y2ggYSBiYWQgdGhpbmc/CiAgICAgICBBOiBUb3AtcG9zdGluZy4KICAgICAgIFE6IFdoYXQgaXMgdGhlIG1vc3QgYW5ub3lpbmcgdGhpbmcgaW4gZS1tYWlsPwpkaWZmIC0tZ2l0IGEvZG9jcy9NQU5VQUwgYi9kb2NzL01BTlVBTAppbmRleCAwOGZkYjU3Li4wZWEzZTYxIDEwMDY0NAotLS0gYS9kb2NzL01BTlVBTAorKysgYi9kb2NzL01BTlVBTApAQCAtODE3LDEyICs4MTcsOCBAQAogICBhbmQgb2ZmZXIgbGRhcDovLyBzdXBwb3J0LgogCiAgIExEQVAgaXMgYSBjb21wbGV4IHRoaW5nIGFuZCB3cml0aW5nIGFuIExEQVAgcXVlcnkgaXMgbm90IGFuIGVhc3kgdGFzay4gSSBkbwotICBhZHZpc2UgeW91IHRvIGRpZyB1cCB0aGUgc3ludGF4IGRlc2NyaXB0aW9uIGZvciB0aGF0IGVsc2V3aGVyZS4gVHdvIHBsYWNlcwotICB0aGF0IG1pZ2h0IHN1aXQgeW91IGFyZToKLQotICBOZXRzY2FwZSdzICJOZXRzY2FwZSBEaXJlY3RvcnkgU0RLIDMuMCBmb3IgQyBQcm9ncmFtbWVyJ3MgR3VpZGUgQ2hhcHRlciAxMDoKLSAgV29ya2luZyB3aXRoIExEQVAgVVJMcyI6Ci0gIGh0dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2RvY3MvbWFudWFscy9kaXJzZGsvY3NkazMwL3VybC5odG0KKyAgYWR2aXNlIHlvdSB0byBkaWcgdXAgdGhlIHN5bnRheCBkZXNjcmlwdGlvbiBmb3IgdGhhdCBlbHNld2hlcmUuIE9uZSBzdWNoCisgIHBsYWNlIG1pZ2h0IGJlOgogCiAgIFJGQyAyMjU1LCAiVGhlIExEQVAgVVJMIEZvcm1hdCIgaHR0cHM6Ly9jdXJsLmhheHguc2UvcmZjL3JmYzIyNTUudHh0CiAKZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUuYW0gYi9kb2NzL01ha2VmaWxlLmFtCmluZGV4IDI4NGU1MzEuLmZkMDQ1ZDIgMTAwNjQ0Ci0tLSBhL2RvY3MvTWFrZWZpbGUuYW0KKysrIGIvZG9jcy9NYWtlZmlsZS5hbQpAQCAtMzMsMTIgKzMzLDEyIEBACiAKIENMRUFORklMRVMgPSAkKEdFTkhUTUxQQUdFUykgJChQREZQQUdFUykKIAotRVhUUkFfRElTVCA9IE1BTlVBTCBCVUdTIENPTlRSSUJVVEUgRkFRIEZFQVRVUkVTIElOVEVSTkFMUyBTU0xDRVJUUyAgICAgXAotIFJFQURNRS53aW4zMiBSRVNPVVJDRVMgVE9ETyBUaGVBcnRPZkh0dHBTY3JpcHRpbmcgVEhBTktTIFZFUlNJT05TICAgICAgXAotIEtOT1dOX0JVR1MgQklORElOR1MgJChtYW5fTUFOUykgJChIVE1MUEFHRVMpIEhJU1RPUlkgSU5TVEFMTCAgICAgICAgICAgXAotICQoUERGUEFHRVMpIExJQ0VOU0UtTUlYSU5HIFJFQURNRS5uZXR3YXJlIElOU1RBTEwuZGV2Y3BwICAgICAgICAgICAgICAgXAotIE1BSUwtRVRJUVVFVFRFIEhUVFAtQ09PS0lFUy5tZCBTRUNVUklUWSBSRUxFQVNFLVBST0NFRFVSRSBTU0wtUFJPQkxFTVMgXAotIEhUVFAyLm1kIFJPQURNQVAubWQgQ09ERV9PRl9DT05EVUNULm1kIENPREVfU1RZTEUubWQgQ0hFQ0tTUkMubWQKK0VYVFJBX0RJU1QgPSBNQU5VQUwgQlVHUyBDT05UUklCVVRFLm1kIEZBUSBGRUFUVVJFUyBJTlRFUk5BTFMubWQgU1NMQ0VSVFMubWQgIFwKKyBSRUFETUUud2luMzIgUkVTT1VSQ0VTIFRPRE8gVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nIFRIQU5LUyBWRVJTSU9OUyBLTk9XTl9CVUdTIFwKKyBCSU5ESU5HUy5tZCAkKG1hbl9NQU5TKSBISVNUT1JZLm1kIElOU1RBTEwgSU5TVEFMTC5tZCBMSUNFTlNFLU1JWElORy5tZCAgICAgICAgIFwKKyBSRUFETUUubmV0d2FyZSBNQUlMLUVUSVFVRVRURSBIVFRQLUNPT0tJRVMubWQgU0VDVVJJVFkubWQgUkVMRUFTRS1QUk9DRURVUkUgIFwKKyBTU0wtUFJPQkxFTVMubWQgSFRUUDIubWQgUk9BRE1BUC5tZCBDT0RFX09GX0NPTkRVQ1QubWQgQ09ERV9TVFlMRS5tZCAgICAgICAgIFwKKyBDSEVDS1NSQy5tZAogCiBNQU4ySFRNTD0gcm9mZml0ICQ8ID4kQAogCmRpZmYgLS1naXQgYS9kb2NzL1JFTEVBU0UtUFJPQ0VEVVJFIGIvZG9jcy9SRUxFQVNFLVBST0NFRFVSRQppbmRleCA0NzkwNzhmLi4xYjU3NDUyIDEwMDY0NAotLS0gYS9kb2NzL1JFTEVBU0UtUFJPQ0VEVVJFCisrKyBiL2RvY3MvUkVMRUFTRS1QUk9DRURVUkUKQEAgLTgzLDEwICs4MywxMCBAQAogQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIGFib3ZlLCBoZXJlIGFyZSBzb21lIHBsYW5uZWQgcmVsZWFzZSBkYXRlcyAoYXQgdGhlCiB0aW1lIG9mIHRoaXMgd3JpdGluZyk6CiAKLS0gTWFyY2ggMjMsIDIwMTYgKHZlcnNpb24gNy40OC4wKQotLSBNYXkgMTgsIDIwMTYKLS0gSnVseSAxMywgMjAxNgotLSBTZXB0ZW1iZXIgNywgMjAxNgorLSBTZXB0ZW1iZXIgNywgMjAxNiAodmVyc2lvbiA3LjUwLjIpCiAtIE5vdmVtYmVyIDIsIDIwMTYKIC0gRGVjZW1iZXIgMjgsIDIwMTYKIC0gRmVicnVhcnkgMjIsIDIwMTcKKy0gQXByaWwgMTksIDIwMTcKKy0gSnVuZSAxNCwgMjAxNworLSBBdWd1c3QgOSwgMjAxNwpkaWZmIC0tZ2l0IGEvZG9jcy9TRUNVUklUWSBiL2RvY3MvU0VDVVJJVFkubWQKc2ltaWxhcml0eSBpbmRleCA4MSUKcmVuYW1lIGZyb20gZG9jcy9TRUNVUklUWQpyZW5hbWUgdG8gZG9jcy9TRUNVUklUWS5tZAppbmRleCAzYzA3ZTBiLi5jODhjYzljIDEwMDY0NAotLS0gYS9kb2NzL1NFQ1VSSVRZCisrKyBiL2RvY3MvU0VDVVJJVFkubWQKQEAgLTEsOSArMSwzIEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAotCiBjdXJsIHNlY3VyaXR5IGZvciBkZXZlbG9wZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTgxLDkgKzc1LDExIEBACiAgIHRvIHRoZSAnZGlzdHJvcycgbWFpbGluZyBsaXN0IHRvIGFsbG93IHRoZW0gdG8gdXNlIHRoZSBmaXggcHJpb3IgdG8gdGhlCiAgIHB1YmxpYyBhbm5vdW5jZW1lbnQuCiAKLS0gQXQgdGhlIGRheSBvZiB0aGUgbmV4dCByZWxlYXNlLCB0aGUgcHJpdmF0ZSBicmFuY2ggaXMgbWVyZ2VkIGludG8gdGhlIG1hc3RlcgotICBicmFuY2ggYW5kIHB1c2hlZC4gT25jZSBwdXNoZWQsIHRoZSBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NpYmxlIHRvIHRoZSBwdWJsaWMKLSAgYW5kIHRoZSBhY3R1YWwgcmVsZWFzZSBzaG91bGQgZm9sbG93IHN1aXQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4KKy0gTm8gbW9yZSB0aGFuIDQ4IGhvdXJzIGJlZm9yZSB0aGUgcmVsZWFzZSwgdGhlIHByaXZhdGUgYnJhbmNoIGlzIG1lcmdlZCBpbnRvCisgIHRoZSBtYXN0ZXIgYnJhbmNoIGFuZCBwdXNoZWQuIE9uY2UgcHVzaGVkLCB0aGUgaW5mb3JtYXRpb24gaXMgYWNjZXNzaWJsZSB0bworICB0aGUgcHVibGljIGFuZCB0aGUgYWN0dWFsIHJlbGVhc2Ugc2hvdWxkIGZvbGxvdyBzdWl0IGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuCisgIFRoZSB0aW1lIGJldHdlZW4gdGhlIHB1c2ggYW5kIHRoZSByZWxlYXNlIGlzIHVzZWQgZm9yIGZpbmFsIHRlc3RzIGFuZAorICByZXZpZXdzLgogCiAtIFRoZSBwcm9qZWN0IHRlYW0gY3JlYXRlcyBhIHJlbGVhc2UgdGhhdCBpbmNsdWRlcyB0aGUgZml4LgogCkBAIC05NCw5ICs5MCwxOSBAQAogLSBUaGUgc2VjdXJpdHkgd2ViIHBhZ2Ugb24gdGhlIHdlYiBzaXRlIHNob3VsZCBnZXQgdGhlIG5ldyB2dWxuZXJhYmlsaXR5CiAgIG1lbnRpb25lZC4KIAorUHJlLW5vdGlmaWNhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQogCitJZiB5b3UgdGhpbmsgeW91IGFyZSBvciBzaG91bGQgYmUgZWxpZ2libGUgZm9yIGEgcHJlLW5vdGlmaWNhdGlvbiBhYm91dAordXBjb21pbmcgc2VjdXJpdHkgYW5ub3VuY2VtZW50cyBmb3IgY3VybCwgd2UgdXJnZSBPUyBkaXN0cm9zIGFuZCBzaW1pbGFyCit2ZW5kb3JzIHRvIHByaW1hcmlseSBqb2luIHRoZSBkaXN0cm9zQG9wZW53YWxsIGxpc3QgYXMgdGhhdCBpcyBvbmUgb2YgdGhlCitwdXJwb3NlcyBvZiB0aGF0IGxpc3QgLSBhbmQgbm90IGp1c3QgZm9yIGN1cmwgb2YgY291cnNlLgogCi1DVVJMLVNFQ1VSSVRZIChhdCBoYXh4IGRvdCBzZSkKK0lmIHlvdSBhcmUgbm90IGEgZGlzdHJvIG9yIG90aGVyd2lzZSBub3Qgc3VpdGFibGUgZm9yIGRpc3Ryb3NAb3BlbndhbGwgYW5kIHlldAord2FudCBwcmUtbm90aWZpY2F0aW9ucyBmcm9tIHVzLCBjb250YWN0IHRoZSBjdXJsIHNlY3VyaXR5IHRlYW0gd2l0aCBhIGRldGFpbGVkCithbmQgY2xlYXIgZXhwbGFuYXRpb24gd2h5IHRoaXMgaXMgdGhlIGNhc2UuCisKK2N1cmwtc2VjdXJpdHkgKGF0IGhheHggZG90IHNlKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdobyBpcyBvbiB0aGlzIGxpc3Q/IFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBjcml0ZXJpYSB5b3UgbXVzdCBtZWV0LCBhbmQgdGhlbiB3ZQpAQCAtMTA2LDUgKzExMiw1IEBACiBvZiB3b3JraW5nLiBZb3UgbXVzdCd2ZSBiZWVuIGFyb3VuZCBmb3IgYSBnb29kIHdoaWxlIGFuZCB5b3Ugc2hvdWxkIGhhdmUgbm8KIHBsYW5zIGluIHZhbmlzaGluZyBpbiB0aGUgbmVhciBmdXR1cmUuCiAKLVdlIGRvIG5vdCBtYWtlIHRoZSBsaXN0IG9mIHBhcnRpcGFudHMgcHVibGljIG1vc3RseSBiZWNhdXNlIGl0IHRlbmRzIHRvIHZhcnkKK1dlIGRvIG5vdCBtYWtlIHRoZSBsaXN0IG9mIHBhcnRpY2lwYW50cyBwdWJsaWMgbW9zdGx5IGJlY2F1c2UgaXQgdGVuZHMgdG8gdmFyeQogc29tZXdoYXQgb3ZlciB0aW1lIGFuZCBhIGxpc3Qgc29tZXdoZXJlIHdpbGwgb25seSByaXNrIGdldHRpbmcgb3V0ZGF0ZWQuCmRpZmYgLS1naXQgYS9kb2NzL1NTTC1QUk9CTEVNUyBiL2RvY3MvU1NMLVBST0JMRU1TLm1kCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRvY3MvU1NMLVBST0JMRU1TCnJlbmFtZSB0byBkb2NzL1NTTC1QUk9CTEVNUy5tZAppbmRleCBlNjM5ODcxLi45MTgwM2UyIDEwMDY0NAotLS0gYS9kb2NzL1NTTC1QUk9CTEVNUworKysgYi9kb2NzL1NTTC1QUk9CTEVNUy5tZApAQCAtNCw3ICs0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogCi1TU0wgcHJvYmxlbXMKKyMgU1NMIHByb2JsZW1zCiAKICAgRmlyc3QsIGxldCdzIGVzdGFibGlzaCB0aGF0IHdlIG9mdGVuIHJlZmVyIHRvIFRMUyBhbmQgU1NMIGludGVyY2hhbmdlYWJseSBhcwogICBTU0wgaGVyZS4gVGhlIGN1cnJlbnQgcHJvdG9jb2wgaXMgY2FsbGVkIFRMUywgaXQgd2FzIGNhbGxlZCBTU0wgYSBsb25nIHRpbWUKQEAgLTE0LDE5ICsxNCwxOSBAQAogICBmYWlsLiBUaGlzIGlzIGEgZG9jdW1lbnQgdGhhdCBhdHRlbXB0cyB0byBkZXRhaWxzIHRoZSBtb3N0IGNvbW1vbiBvbmVzIGFuZAogICBob3cgdG8gbWl0aWdhdGUgdGhlbS4KIAotQ0EgY2VydHMKKyMjIENBIGNlcnRzCiAKICAgQ0EgY2VydHMgYXJlIHVzZWQgdG8gZGlnaXRhbGx5IHZlcmlmeSB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuIFlvdSBuZWVkIGEKICAgImNhIGJ1bmRsZSIgZm9yIHRoaXMuIFNlZSBsb3RzIG9mIG1vcmUgZGV0YWlscyBvbiB0aGlzIGluIHRoZSBTU0xDRVJUUwogICBkb2N1bWVudC4KIAotQ0EgYnVuZGxlIG1pc3NpbmcgaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlcworIyMgQ0EgYnVuZGxlIG1pc3NpbmcgaW50ZXJtZWRpYXRlIGNlcnRpZmljYXRlcwogCiAgIFdoZW4gdXNpbmcgc2FpZCBDQSBidW5kbGUgdG8gdmVyaWZ5IGEgc2VydmVyIGNlcnQsIHlvdSB3aWxsIGV4cGVyaWVuY2UKICAgcHJvYmxlbXMgaWYgeW91ciBDQSBjZXJ0IGRvZXMgbm90IGhhdmUgdGhlIGNlcnRpZmljYXRlcyBmb3IgdGhlCiAgIGludGVybWVkaWF0ZXMgaW4gdGhlIHdob2xlIHRydXN0IGNoYWluLgogCi1Qcm90b2NvbCB2ZXJzaW9uCisjIyBQcm90b2NvbCB2ZXJzaW9uCiAKICAgU29tZSBicm9rZW4gc2VydmVycyBmYWlsIHRvIHN1cHBvcnQgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIHByb3Blcmx5IHRoYXQKICAgU1NMIHNlcnZlcnMgYXJlIHN1cHBvc2VkIHRvIGhhbmRsZS4gVGhpcyBtYXkgY2F1c2UgdGhlIGNvbm5lY3Rpb24gdG8gZmFpbApAQCAtMzgsNyArMzgsNyBAQAogCiAgIEFsbCB2ZXJzaW9ucyBvZiBTU0wgYXJlIGNvbnNpZGVyZWQgaW5zZWN1cmUgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiBVc2UgVExTLgogCi1DaXBoZXJzCisjIyBDaXBoZXJzCiAKICAgQ2xpZW50cyBnaXZlIHNlcnZlcnMgYSBsaXN0IG9mIGNpcGhlcnMgdG8gc2VsZWN0IGZyb20uIElmIHRoZSBsaXN0IGRvZXNuJ3QKICAgaW5jbHVkZSBhbnkgY2lwaGVycyB0aGUgc2VydmVyIHdhbnRzL2NhbiB1c2UsIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZQpAQCAtNjEsNyArNjEsNyBAQAogCiAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1wb3Bvdi10bHMtcHJvaGliaXRpbmctcmM0LTAxCiAKLUFsbG93IEJFQVNUCisjIyBBbGxvdyBCRUFTVAogCiAgIEJFQVNUIGlzIHRoZSBuYW1lIG9mIGEgVExTIDEuMCBhdHRhY2sgdGhhdCBzdXJmYWNlZCAyMDExLiBXaGVuIGFkZGluZyBtZWFucwogICB0byBtaXRpZ2F0ZSB0aGlzIGF0dGFjaywgaXQgdHVybmVkIG91dCB0aGF0IHNvbWUgYnJva2VuIHNlcnZlcnMgb3V0IHRoZXJlIGluCkBAIC03Miw3ICs3Miw3IEBACiAgIGJ1dCBvbiB0aGUgb3RoZXIgaGFuZCBpdCBhbGxvd3MgY3VybCB0byBjb25uZWN0IHRvIHRoYXQga2luZCBvZiBzdHJhbmdlCiAgIHNlcnZlcnMuCiAKLURpc2FibGluZyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrcworIyMgRGlzYWJsaW5nIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzCiAKICAgU29tZSBTU0wgYmFja2VuZHMgbWF5IGRvIGNlcnRpZmljYXRlIHJldm9jYXRpb24gY2hlY2tzIChDUkwsIE9DU1AsIGV0YykKICAgZGVwZW5kaW5nIG9uIHRoZSBPUyBvciBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgLS1zc2wtbm8tcmV2b2tlIG9wdGlvbiB3YXMKZGlmZiAtLWdpdCBhL2RvY3MvU1NMQ0VSVFMgYi9kb2NzL1NTTENFUlRTLm1kCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkb2NzL1NTTENFUlRTCnJlbmFtZSB0byBkb2NzL1NTTENFUlRTLm1kCmRpZmYgLS1naXQgYS9kb2NzL1RIQU5LUyBiL2RvY3MvVEhBTktTCmluZGV4IDBmMWE5NGYuLjJlYmJmNDcgMTAwNjQ0Ci0tLSBhL2RvY3MvVEhBTktTCisrKyBiL2RvY3MvVEhBTktTCkBAIC0yMCw2ICsyMCw3IEBACiBBaml0IERodW1hbGUKIEFraSBLb3NraW5lbgogQWtvcyBQYXN6dG9yeQorQWtzaGF5IFZlcm5la2FyCiBBbGFpbiBEYW50ZW55CiBBbGFuIFBpbnN0ZWluCiBBbGJlcnQgQ2hpbi1BLVlvdW5nCkBAIC0yOCw2ICsyOSw3IEBACiBBbGVqYW5kcm8gQWx2YXJleiBBeWxsb24KIEFsZWtzYW5kYXIgTWlsaXZvamV2aWMKIEFsZWtzZXkgVHVsaW5vdgorQWxlcyBOb3ZhawogQWxlc3NhbmRybyBHaGVkaW5pCiBBbGVzc2FuZHJvIFZlc2VseQogQWxleCBCbGlnaApAQCAtNDcsNiArNDksNyBAQAogQWxleGFuZGVyIExhemljCiBBbGV4YW5kZXIgUGVwcGVyCiBBbGV4YW5kZXIgUGVzbHlhaworQWxleGFuZGVyIFNpbmRpdHNraXkKIEFsZXhhbmRlciBUcmF1ZAogQWxleGFuZGVyIFpodXJhdmxldgogQWxleGV5IEJvcnpvdgpAQCAtNzYsMTAgKzc5LDEyIEBACiBBbmRyZWFzIE9sc3NvbgogQW5kcmVhcyBSaWVrZQogQW5kcmVhcyBTY2h1bGRlaQorQW5kcmVhcyBTdHJlaWNoYXJkdAogQW5kcmVhcyBXdXJmCiBBbmRyZWkgQmVuZWEKIEFuZHJlaSBDaXB1CiBBbmRyZWkgS3VydXNoaW4KK0FuZHJlaSBTZWRvaQogQW5kcmVqIEUgQmFyYW5vdgogQW5kcmV3IEJlbmhhbQogQW5kcmV3IEJpZ2dzCkBAIC0yMTIsNyArMjE3LDkgQEAKIENocmlzIE11bWZvcmQKIENocmlzIFNtb3d0b24KIENocmlzIFlvdW5nCitDaHJpc3RpYW4gRmlsbGlvbgogQ2hyaXN0aWFuIEdyb3Rob2ZmCitDaHJpc3RpYW4gSGVpbWVzCiBDaHJpc3RpYW4gSMOkZ2VsZQogQ2hyaXN0aWFuIEtyYXVzZQogQ2hyaXN0aWFuIEt1cnoKQEAgLTI1NiwxMiArMjYzLDE0IEBACiBEYS1Zb29uIENodW5nCiBEYWcgRWtlbmdyZW4KIERhZ29iZXJ0IE1pY2hlbHNlbgorRGFtYmFldiBBbGV4YW5kZXIKIERhbWlhbiBEaXhvbgogRGFtaWVuIEFkYW50CiBEYW1pZW4gVmllbHBlYXUKIERhbiBCZWNrZXIKIERhbiBDCiBEYW4gQ3Jpc3RpYW4KK0RhbiBEb25haHVlCiBEYW4gRmFuZHJpY2gKIERhbiBMb2NrcwogRGFuIE5lbHNvbgpAQCAtMjcxLDYgKzI4MCw3IEBACiBEYW5pZWwgQmxhY2sKIERhbmllbCBDYXRlcgogRGFuaWVsIEVnZ2VyCitEYW5pZWwgR3VzdGFmc3NvbgogRGFuaWVsIEh3YW5nCiBEYW5pZWwgSm9obnNvbgogRGFuaWVsIEthaG4gR2lsbG1vcgpAQCAtMjg2LDYgKzI5Niw3IEBACiBEYW5pZWwgYXQgdG91Y2h0dW5lcwogRGFycnlsIEhvdXNlCiBEYXJzaGFuIE1vZHkKK0RhcsOtbyBIZXJlw7HDugogRGF2ZSBEcmliaW4KIERhdmUgSGFsYmFra2VuCiBEYXZlIEhhbWlsdG9uCkBAIC0zMDUsNiArMzE2LDcgQEAKIERhdmlkIEh1bGwKIERhdmlkIEogTWV5ZXIKIERhdmlkIEphbWVzCitEYXZpZCBLYWxuaXNjaGtpZXMKIERhdmlkIEtpZXJ6bm93c2tpCiBEYXZpZCBLaW1kb24KIERhdmlkIExhbmcKQEAgLTQ1MCw2ICs0NjIsNyBAQAogR2FicmllbCBTam9iZXJnCiBHYXJyZXR0IEhvbG1zdHJvbQogR2FyeSBNYXh3ZWxsCitHYXVyYXYgTWFsaG90cmEKIEdhdXRhbSBLYWNocm9vCiBHYXV0YW0gTWFuaQogR2F2cmllIFBoaWxpcHNvbgpAQCAtNDg5LDYgKzUwMiw3IEBACiBHcmVnIE9udWZlcgogR3JlZyBQcmF0dAogR3JlZyBaYXZlcnRuaWsKK0dyZWdvcnkgU3pvcmMKIEdyaWdvcnkgRW50aW4KIEd1ZW5vbGUgQmVzY29uCiBHdWVudGVyIEtuYXVmCkBAIC01MDksNiArNTIzLDcgQEAKIEhhbnMtSnVyZ2VuIE1heQogSGFyZGVlcCBTaW5naAogSGFyaXMgT2thbm92aWMKK0hhcm9sZCBTdHVhcnQKIEhhcnNoYWwgUHJhZGhhbgogSGF1a2UgRHVkZW4KIEhlIFFpbgpAQCAtNzExLDYgKzcyNiw3IEBACiBKdXN0aW4gRmxldGNoZXIKIEp1c3RpbiBLYXJuZWdlcwogSnVzdGluIE1hZ2dhcmQKK0rDoW5vcyBGZWtldGUKIErDtnJnIE11ZWxsZXItVG9sawogSsO2cm4gSGFydHJvdGgKIEsuIFIuIFdhbGtlcgpAQCAtODA4LDYgKzgyNCw3IEBACiBMdWtlIERhc2hqcgogTHVvIEppbmdodWEKIEx1b25nIERpbmggRHVuZworTHXhuq10IE5ndXnhu4VuCiBMeW5kb24gSGlsbAogTWFjaWVqIEthcnBpdWsKIE1hY2llaiBQdXppbwpAQCAtODIzLDcgKzg0MCw3IEBACiBNYXJjIERlc2xhdXJpZXJzCiBNYXJjIERvdWdodHkKIE1hcmMgSGVzc2UKLU1hcmMgSG9lcnNrZW4KK01hcmMgSMO2cnNrZW4KIE1hcmMgS2xlaW5lLUJ1ZGRlCiBNYXJjIFJlbmF1bHQKIE1hcmNlbCBSYWFkCkBAIC04MzMsNiArODUwLDcgQEAKIE1hcmNpbiBBZGFtc2tpCiBNYXJjaW4gR3J5c3prYWxpcwogTWFyY2luIEtvbmlja2kKK01hcmNvIERlY2tlbAogTWFyY28gRy4gU2FsdmFnbm8KIE1hcmNvIE1hZ2dpCiBNYXJjdXMgU3VuZGJlcmcKQEAgLTg0Miw5ICs4NjAsMTEgQEAKIE1hcmsgQnV0bGVyCiBNYXJrIERhdmllcwogTWFyayBFaWNoaW4KK01hcmsgSGFtaWx0b24KIE1hcmsgSW5jbGV5CiBNYXJrIEthcnBlbGVzCiBNYXJrIExlbnRjem5lcgorTWFyayBOb3R0aW5naGFtCiBNYXJrIFNhbGlzYnVyeQogTWFyayBTbmVsbGluZwogTWFyayBUdWxseQpAQCAtODU3LDEyICs4NzcsMTMgQEAKIE1hcnRpam4gS29zdGVyCiBNYXJ0aW4gQy4gTWFydGluCiBNYXJ0aW4gRHJhc2FyCitNYXJ0aW4gRnJvZGwKIE1hcnRpbiBIYWdlcgogTWFydGluIEhlZGVuZmFsawogTWFydGluIEphbnNlbgogTWFydGluIExlbWtlCiBNYXJ0aW4gU2tpbm5lcgotTWFydGluIFN0b3Jzam8KK01hcnRpbiBTdG9yc2rDtgogTWFydGluIFZlam7DoXIKIE1hcnR5IEt1aHJ0CiBNYXJ1a28KQEAgLTkzNiw2ICs5NTcsNyBAQAogTWlrZSBQcm90dHMKIE1pa2UgUmV2aQogTWlrbG9zIE5lbWV0aAorTWlsb8WhIExqdW1vdmnEhwogTWlyb3NsYXYgRnJhbmMKIE1pcm9zbGF2IFNwb3VzdGEKIE1pdHogV2FyawpAQCAtOTkwLDYgKzEwMTIsNyBAQAogT2xpdmVyIEt1Y2tlcnR6CiBPbGl2ZXIgU2NoaW5kbGVyCiBPbGl2aWVyIEJlcmdlcgorT2xpdmllciBCcnVuZWwKIE9yYW5nZSBUc2FpCiBPcmVuIFNvdXJvdWpvbgogT3JlbiBUaXJvc2gKQEAgLTEwMTgsNiArMTA0MSw3IEBACiBQYXVsIERvbm9odWUKIFBhdWwgSGFycmluZ3RvbgogUGF1bCBIb3dhcnRoCitQYXVsIEpveWNlCiBQYXVsIE1hcmtzCiBQYXVsIE1hcnF1aXMKIFBhdWwgTW9vcmUKQEAgLTEwODgsMTIgKzExMTIsMTQgQEAKIFJhaW5lciBDYW5hdmFuCiBSYWluZXIgSnVuZwogUmFpbmVyIEtvZW5pZworUmFpbmVyIE3DvGxsZXIKIFJhamVzaCBOYWdhbmF0aGFuCiBSYWprdW1hciBNYW5kYWwKIFJhbGYgUy4gRW5nZWxzY2hhbGwKIFJhbHBoIEJlY2ttYW5uCiBSYWxwaCBNaXRjaGVsbAogUmFtYW5hIE1va2thcGF0aQorUmFuZHkgQXJtc3Ryb25nCiBSYW5keSBNY011cmNoeQogUmF2aSBQcmF0YXAKIFJheSBEYXNzZW4KQEAgLTExMDMsNiArMTEyOSw3IEBACiBSZWluaGFyZCBNYXgKIFJlaW5vdXQgdmFuIFNjaG91d2VuCiBSZW1pIEdhY29nbmUKK1JlbW8gRQogUmVuYXRvIEJvdGVsaG8KIFJlbmF1ZCBDaGFpbGxhdAogUmVuYXVkIER1aGF1dApAQCAtMTEzMSw2ICsxMTU4LDcgQEAKIFJpY2hhcmQgdmFuIGRlbiBCZXJnCiBSaWNrIEpvbmVzCiBSaWNrIFJpY2hhcmRzb24KK1JpZGVyIExpbmRlbgogUm9iIENyaXR0ZW5kZW4KIFJvYiBEYXZpZXMKIFJvYiBKb25lcwpAQCAtMTE2NCw2ICsxMTkyLDcgQEAKIFJvbXVsbyBBLiBDZWNjb24KIFJvbiBQYXJrZXIKIFJvbiBaYXBwCitSb25uaWUgTW9zZQogUm9zaW1pbGRvIGRhIFNpbHZhCiBSb3kgU2hhbgogUnVuZSBLbGV2ZWxhbmQKQEAgLTExNzMsNiArMTIwMiw3IEBACiBSeWFuIENoYW4KIFJ5YW4gTmVsc29uCiBSeWFuIFNjaG1pZHQKK1J5YW4gU2NvdHQKIFLDqW15IEzDqW9uZQogUy4gTW9vbmVzYW15CiBTYWx2YWRvciBEw6F2aWxhCkBAIC0xMjAwLDEyICsxMjMwLDE1IEBACiBTY290dCBEYXZpcwogU2NvdHQgTWNDcmVhcnkKIFNlYW4gQm91ZHJlYXUKK1NlYmFzdGlhbiBNdW5kcnkKIFNlYmFzdGlhbiBQb2hsc2NobWlkdAogU2ViYXN0aWFuIFJhc211c3NlbgogU2VudGhpbCBSYWphIFZlbHUKK1NlcmdlaSBLdXptaW4KIFNlcmdlaSBOaWt1bG92CiBTZXJnZXkgVGF0YXJpbmNldgogU2VyZ2lvIEJhbGxlc3RyZXJvCitTZXJqIEthbGljaGV2CiBTZXNodWJhYnUgUGFzYW0KIFNldGggTW9zCiBTaCBEaWFvCkBAIC0xMjIzLDYgKzEyNTYsNyBAQAogU2ltb24gSC4KIFNpbW9uIEpvc2Vmc3NvbgogU2ltb24gTGl1CitTaW1vbiBXYXJ0YQogU29uZyBNYQogU29uaWEgU3VicmFtYW5pYW4KIFNwYWNlbiBKYXNzZXQKQEAgLTEyNDIsNiArMTI3Niw3IEBACiBTdGVmYW4gVWxyaWNoCiBTdGVpbmFyIEguIEd1bmRlcnNvbgogU3RlcGhhbiBCZXJnbWFubgorU3RlcGhlbiBCcm9rZW5zaGlyZQogU3RlcGhlbiBDb2xseWVyCiBTdGVwaGVuIEtpY2sKIFN0ZXBoZW4gTW9yZQpAQCAtMTMxMiw2ICsxMzQ3LDcgQEAKIFRvYnkgUGV0ZXJzb24KIFRvZGQgQSBPdXNrYQogVG9kZCBLdWxlc3phCitUb2RkIFNob3J0CiBUb2RkIFZpZXJsaW5nCiBUb20gQmVub2lzdAogVG9tIERvbm92YW4KQEAgLTEzMzYsOCArMTM3MiwxMCBAQAogVG9tbXkgVGFtCiBUb24gVm9vbgogVG9uaSBNb3Jlbm8KK1RvbnkgS2VsbWFuCiBUb29uIFZlcndhZXN0CiBUb3IgQXJudHNlbgorVG9yYmVuIERhbm5oYXVlcgogVG9yc3RlbiBGb2VydHNjaAogVG9zaGlvIEt1cmF0b21pCiBUb3NoaXl1a2kgTWFlemF3YQpAQCAtMTM1Myw2ICsxMzkxLDcgQEAKIFVscmljaCBEb2VobmVyCiBVbHJpY2ggVGVsbGUKIFVscmljaCBaYWRvdworVmFsZW50aW4gRGF2aWQKIFZlbmthdCBBa2VsbGEKIFZpY3RvciBTbmV6aGtvCiBWaWpheSBQYW5naGFsCkBAIC0xNDIwLDEyICsxNDU5LDE1IEBACiBlWGVDNjQgb24gZ2l0aHViCiBqdmVhemV5IG9uIGdpdGh1Ygoga3Jlc2hhbm8gb24gZ2l0aHViCitsdWthc3pnbiBvbiBnaXRodWIKIG1hcmMtZ3JvdW5kY3RsIG9uIGdpdGh1YgogbmVleCBvbiBnaXRodWIKIG5rCitub3BqbXAgb24gZ2l0aHViCiBzaWx2ZWphMSBvbiBnaXRodWIKIHN3YWxrYXVzIGF0IHlhaG9vLmNvbQogdG9tbWlua1thdF1wb3N0LnBsCiB2YW5pbGxham9uYXRoYW4gb24gZ2l0aHViCit3bXNjaCBvbiBnaXRodWIKIMWgdGVmYW4gS3JlbWXFiAog0J3QuNC60LjRgtCwINCU0L7RgNC+0YXQuNC9CmRpZmYgLS1naXQgYS9kb2NzL1RIQU5LUy1maWx0ZXIgYi9kb2NzL1RIQU5LUy1maWx0ZXIKaW5kZXggZGVmZDYwNS4uMWM2ZjM5OCAxMDA2NDQKLS0tIGEvZG9jcy9USEFOS1MtZmlsdGVyCisrKyBiL2RvY3MvVEhBTktTLWZpbHRlcgpAQCAtNjgsMyArNjgsNSBAQAogcy9Kb2VybiBIYXJ0cm90aCQvSsO2cm4gSGFydHJvdGgvCiBzL0hvbmdsaSBMYWkgKFBodXNpb24pJC9Ib25nbGkgTGFpLwogcy9naXRodWIgdXNlciAna3Jlc2hhbm8nJC9rcmVzaGFubyBvbiBnaXRodWIvCitzL01hcmMgSG9lcnNrZW4kL01hcmMgSMO2cnNrZW4vCitzL01hcnRpbiBTdG9yc2pvJC9NYXJ0aW4gU3RvcnNqw7YvCmRpZmYgLS1naXQgYS9kb2NzL1RPRE8gYi9kb2NzL1RPRE8KaW5kZXggMzBmMjA4Ny4uOTljNjEwZiAxMDA2NDQKLS0tIGEvZG9jcy9UT0RPCisrKyBiL2RvY3MvVE9ETwpAQCAtNiw3ICs2LDcgQEAKIAogICAgICAgICAgICAgICAgIFRoaW5ncyB0aGF0IGNvdWxkIGJlIG5pY2UgdG8gZG8gaW4gdGhlIGZ1dHVyZQogCi0gVGhpbmdzIHRvIGRvIGluIHByb2plY3QgY1VSTC4gUGxlYXNlIHRlbGwgdXMgd2hhdCB5b3UgdGhpbmssIGNvbnRyaWJ1dGUgYW5kCisgVGhpbmdzIHRvIGRvIGluIHByb2plY3QgY3VybC4gUGxlYXNlIHRlbGwgdXMgd2hhdCB5b3UgdGhpbmssIGNvbnRyaWJ1dGUgYW5kCiAgc2VuZCB1cyBwYXRjaGVzIHRoYXQgaW1wcm92ZSB0aGluZ3MhCiAKICBCZSBhd2FyZSB0aGF0IHRoZXNlIGFyZSB0aGluZ3MgdGhhdCB3ZSBjb3VsZCBkbywgb3IgaGF2ZSBvbmNlIGJlZW4gY29uc2lkZXJlZApAQCAtMjUsMTYgKzI1LDE5IEBACiAgMS43IERldGVjdCB3aGVuIGNhbGxlZCBmcm9tIHdpdGhpbiBjYWxsYmFja3MKICAxLjggQWxsb3cgU1NMIChIVFRQUykgdG8gcHJveHkKICAxLjkgQ2FjaGUgbmVnYXRpdmUgbmFtZSByZXNvbHZlcwotIDEuMTAgU3VwcG9ydCBJRE5BMjAwOAogIDEuMTEgbWluaW1pemUgZGVwZW5kZW5jaWVzIHdpdGggZHluYW1pY2x5IGxvYWRlZCBtb2R1bGVzCiAgMS4xMiBoYXZlIGZvcm0gZnVuY3Rpb25zIHVzZSBDVVJMIGhhbmRsZSBhcmd1bWVudAotIDEuMTMgQWRkIENVUkxPUFRfTUFJTF9DTElFTlQgb3B0aW9uCiAgMS4xNCBUeXBlc2FmZSBjdXJsX2Vhc3lfc2V0b3B0KCkKLSAxLjE1IFRDUCBGYXN0IE9wZW4KKyAxLjE1IE1vbml0b3IgY29ubmVjdGlvbnMgaW4gdGhlIGNvbm5lY3Rpb24gcG9vbAogIDEuMTYgVHJ5IHRvIFVSTCBlbmNvZGUgZ2l2ZW4gVVJMCiAgMS4xNyBBZGQgc3VwcG9ydCBmb3IgSVJJcwogIDEuMTggdHJ5IG5leHQgcHJveHkgaWYgb25lIGRvZXNuJ3Qgd29yawogIDEuMTkgVGltZW91dCBpZGxlIGNvbm5lY3Rpb25zIGZyb20gdGhlIHBvb2wKKyAxLjIwIFNSViBhbmQgVVJJIEROUyByZWNvcmRzCisgMS4yMSBBUEkgZm9yIFVSTCBwYXJzaW5nL3NwbGl0dGluZworIDEuMjMgT2ZmZXIgQVBJIHRvIGZsdXNoIHRoZSBjb25uZWN0aW9uIHBvb2wKKyAxLjI0IFRDUCBGYXN0IE9wZW4gZm9yIHdpbmRvd3MKKyAxLjI1IFJlbW92ZSB0aGUgZ2VuZXJhdGVkIGluY2x1ZGUgZmlsZQogCiAgMi4gbGliY3VybCAtIG11bHRpIGludGVyZmFjZQogIDIuMSBNb3JlIG5vbi1ibG9ja2luZwpAQCAtNjAsMTAgKzYzLDEyIEBACiAgNS4xIEJldHRlciBwZXJzaXN0ZW5jeSBmb3IgSFRUUCAxLjAKICA1LjIgc3VwcG9ydCBGRjMgc3FsaXRlIGNvb2tpZSBmaWxlcwogIDUuMyBSZWFycmFuZ2UgcmVxdWVzdCBoZWFkZXIgb3JkZXIKLSA1LjQgU1BEWQogIDUuNSBhdXRoPSBpbiBVUkxzCiAgNS42IFJlZnVzZSAiZG93bmdyYWRlIiByZWRpcmVjdHMKLSA1LjcgTW9yZSBjb21wcmVzc2lvbnMKKyA1LjcgQnJvdGxpIGNvbXByZXNzaW9uCisgNS44IFFVSUMKKyA1LjkgQWRkIGVhc3kgYXJndW1lbnQgdG8gZm9ybXBvc3QgZnVuY3Rpb25zCisgNS4xMCBMZWF2ZSBzZWN1cmUgY29va2llcyBhbG9uZQogCiAgNi4gVEVMTkVUCiAgNi4xIGRpdGNoIHN0ZGluCkBAIC03NCw2ICs3OSw3IEBACiAgNy4gU01UUAogIDcuMSBQaXBlbGluaW5nCiAgNy4yIEVuaGFuY2VkIGNhcGFiaWxpdHkgc3VwcG9ydAorIDcuMyBBZGQgQ1VSTE9QVF9NQUlMX0NMSUVOVCBvcHRpb24KIAogIDguIFBPUDMKICA4LjEgUGlwZWxpbmluZwpAQCAtMTAzLDYgKzEwOSwxMSBAQAogIDEzLjYgUHJvdmlkZSBjYWxsYmFjayBmb3IgY2VydCB2ZXJpZmljYXRpb24KICAxMy43IGltcHJvdmUgY29uZmlndXJlIC0td2l0aC1zc2wKICAxMy44IFN1cHBvcnQgREFORQorIDEzLjkgU3VwcG9ydCBUTFMgdjEuMworIDEzLjEwIFN1cHBvcnQgU1NMS0VZTE9HRklMRQorIDEzLjExIFN1cHBvcnQgaW50ZXJtZWRpYXRlICYgcm9vdCBwaW5uaW5nIGZvciBQSU5ORURQVUJMSUNLRVkKKyAxMy4xMiBTdXBwb3J0IEhTVFMKKyAxMy4xMyBTdXBwb3J0IEhQS1AKIAogIDE0LiBHbnVUTFMKICAxNC4xIFNTTCBlbmdpbmUgc3R1ZmYKQEAgLTExOCw0NyArMTI5LDU1IEBACiAgMTYuMiBBZGQgUU9QIHN1cHBvcnQgdG8gR1NTQVBJIGF1dGhlbnRpY2F0aW9uCiAgMTYuMyBTdXBwb3J0IGJpbmFyeSBtZXNzYWdlcyAoaS5lLjogbm9uLWJhc2U2NCkKIAotIDE3LiBDb21tYW5kIGxpbmUgdG9vbAotIDE3LjEgc3luYwotIDE3LjIgZ2xvYiBwb3N0cwotIDE3LjMgcHJldmVudCBmaWxlIG92ZXJ3cml0aW5nCi0gMTcuNCBzaW11bHRhbmVvdXMgcGFyYWxsZWwgdHJhbnNmZXJzCi0gMTcuNSBwcm92aWRlIGZvcm1wb3N0IGhlYWRlcnMKLSAxNy42IHdhcm5pbmcgd2hlbiBzZXR0aW5nIGFuIG9wdGlvbgotIDE3Ljcgd2FybmluZyB3aGVuIHNlbmRpbmcgYmluYXJ5IG91dHB1dCB0byB0ZXJtaW5hbAotIDE3Ljggb2ZmZXIgY29sb3ItY29kZWQgSFRUUCBoZWFkZXIgb3V0cHV0Ci0gMTcuOSBDaG9vc2UgdGhlIG5hbWUgb2YgZmlsZSBpbiBicmFjZXMgZm9yIGNvbXBsZXggVVJMcwotIDE3LjEwIGltcHJvdmUgaG93IGN1cmwgd29ya3MgaW4gYSB3aW5kb3dzIGNvbnNvbGUgd2luZG93Ci0gMTcuMTEgLXcgb3V0cHV0IHRvIHN0ZGVycgotIDE3LjEyIGtlZXAgcnVubmluZywgcmVhZCBpbnN0cnVjdGlvbnMgZnJvbSBwaXBlL3NvY2tldAotIDE3LjEzIHN1cHBvcnQgbWV0YWxpbmsgaW4gaHR0cCBoZWFkZXJzCi0gMTcuMTQgLS1mYWlsIHdpdGhvdXQgLS1sb2NhdGlvbiBzaG91bGQgdHJlYXQgM3h4IGFzIGEgZmFpbHVyZQorIDE3LiBTU0ggcHJvdG9jb2xzCisgMTcuMSBNdWx0aXBsZXhpbmcKKyAxNy4yIFNGVFAgcGVyZm9ybWFuY2UKKyAxNy4zIFN1cHBvcnQgYmV0dGVyIHRoYW4gTUQ1IGhvc3RrZXkgaGFzaAogCi0gMTguIEJ1aWxkCi0gMTguMSByb2ZmaXQKKyAxOC4gQ29tbWFuZCBsaW5lIHRvb2wKKyAxOC4xIHN5bmMKKyAxOC4yIGdsb2IgcG9zdHMKKyAxOC4zIHByZXZlbnQgZmlsZSBvdmVyd3JpdGluZworIDE4LjQgc2ltdWx0YW5lb3VzIHBhcmFsbGVsIHRyYW5zZmVycworIDE4LjUgcHJvdmlkZSBmb3JtcG9zdCBoZWFkZXJzCisgMTguNiB3YXJuaW5nIHdoZW4gc2V0dGluZyBhbiBvcHRpb24KKyAxOC43IHdhcm5pbmcgd2hlbiBzZW5kaW5nIGJpbmFyeSBvdXRwdXQgdG8gdGVybWluYWwKKyAxOC44IG9mZmVyIGNvbG9yLWNvZGVkIEhUVFAgaGVhZGVyIG91dHB1dAorIDE4LjkgQ2hvb3NlIHRoZSBuYW1lIG9mIGZpbGUgaW4gYnJhY2VzIGZvciBjb21wbGV4IFVSTHMKKyAxOC4xMCBpbXByb3ZlIGhvdyBjdXJsIHdvcmtzIGluIGEgd2luZG93cyBjb25zb2xlIHdpbmRvdworIDE4LjExIC13IG91dHB1dCB0byBzdGRlcnIKKyAxOC4xMiBrZWVwIHJ1bm5pbmcsIHJlYWQgaW5zdHJ1Y3Rpb25zIGZyb20gcGlwZS9zb2NrZXQKKyAxOC4xMyBzdXBwb3J0IG1ldGFsaW5rIGluIGh0dHAgaGVhZGVycworIDE4LjE0IC0tZmFpbCB3aXRob3V0IC0tbG9jYXRpb24gc2hvdWxkIHRyZWF0IDN4eCBhcyBhIGZhaWx1cmUKKyAxOC4xNSBJbnRyb2R1Y2UgLS1mYWlsLWZhc3QgdG8gZXhpdCBvbiBmaXJzdCB0cmFuc2ZlciBmYWlsCisgMTguMTYgLS1yZXRyeSBzaG91bGQgcmVzdW1lCiAKLSAxOS4gVGVzdCBzdWl0ZQotIDE5LjEgU1NMIHR1bm5lbAotIDE5LjIgbmljZXIgbGFja2luZyBwZXJsIG1lc3NhZ2UKLSAxOS4zIG1vcmUgcHJvdG9jb2xzIHN1cHBvcnRlZAotIDE5LjQgbW9yZSBwbGF0Zm9ybXMgc3VwcG9ydGVkCi0gMTkuNSBBZGQgc3VwcG9ydCBmb3IgY29uY3VycmVudCBjb25uZWN0aW9ucwotIDE5LjYgVXNlIHRoZSBSRkM2MjY1IHRlc3Qgc3VpdGUKKyAxOS4gQnVpbGQKKyAxOS4xIHJvZmZpdAorIDE5LjIgRW5hYmxlIFBJRSBhbmQgUkVMUk8gYnkgZGVmYXVsdAogCi0gMjAuIE5leHQgU09OQU1FIGJ1bXAKLSAyMC4xIGh0dHAtc3R5bGUgSEVBRCBvdXRwdXQgZm9yIEZUUAotIDIwLjIgY29tYmluZSBlcnJvciBjb2RlcwotIDIwLjMgZXh0ZW5kIENVUkxPUFRfU09DS09QVEZVTkNUSU9OIHByb3RvdHlwZQorIDIwLiBUZXN0IHN1aXRlCisgMjAuMSBTU0wgdHVubmVsCisgMjAuMiBuaWNlciBsYWNraW5nIHBlcmwgbWVzc2FnZQorIDIwLjMgbW9yZSBwcm90b2NvbHMgc3VwcG9ydGVkCisgMjAuNCBtb3JlIHBsYXRmb3JtcyBzdXBwb3J0ZWQKKyAyMC41IEFkZCBzdXBwb3J0IGZvciBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgMjAuNiBVc2UgdGhlIFJGQzYyNjUgdGVzdCBzdWl0ZQogCi0gMjEuIE5leHQgbWFqb3IgcmVsZWFzZQotIDIxLjEgY2xlYW51cCByZXR1cm4gY29kZXMKLSAyMS4yIHJlbW92ZSBvYnNvbGV0ZSBkZWZpbmVzCi0gMjEuMyBzaXplX3QKLSAyMS40IHJlbW92ZSBzZXZlcmFsIGZ1bmN0aW9ucwotIDIxLjUgcmVtb3ZlIENVUkxPUFRfRkFJTE9ORVJST1IKLSAyMS42IHJlbW92ZSBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFCi0gMjEuNyByZW1vdmUgcHJvZ3Jlc3MgbWV0ZXIgZnJvbSBsaWJjdXJsCi0gMjEuOCByZW1vdmUgJ2N1cmxfaHR0cHBvc3QnIGZyb20gcHVibGljCisgMjEuIE5leHQgU09OQU1FIGJ1bXAKKyAyMS4xIGh0dHAtc3R5bGUgSEVBRCBvdXRwdXQgZm9yIEZUUAorIDIxLjIgY29tYmluZSBlcnJvciBjb2RlcworIDIxLjMgZXh0ZW5kIENVUkxPUFRfU09DS09QVEZVTkNUSU9OIHByb3RvdHlwZQorCisgMjIuIE5leHQgbWFqb3IgcmVsZWFzZQorIDIyLjEgY2xlYW51cCByZXR1cm4gY29kZXMKKyAyMi4yIHJlbW92ZSBvYnNvbGV0ZSBkZWZpbmVzCisgMjIuMyBzaXplX3QKKyAyMi40IHJlbW92ZSBzZXZlcmFsIGZ1bmN0aW9ucworIDIyLjUgcmVtb3ZlIENVUkxPUFRfRkFJTE9ORVJST1IKKyAyMi42IHJlbW92ZSBDVVJMT1BUX0ROU19VU0VfR0xPQkFMX0NBQ0hFCisgMjIuNyByZW1vdmUgcHJvZ3Jlc3MgbWV0ZXIgZnJvbSBsaWJjdXJsCisgMjIuOCByZW1vdmUgJ2N1cmxfaHR0cHBvc3QnIGZyb20gcHVibGljCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0yMjcsMjMgKzI0NiwxOCBAQAogMS44IEFsbG93IFNTTCAoSFRUUFMpIHRvIHByb3h5CiAKICBUbyBwcmV2ZW50IGxvY2FsIHVzZXJzIGZyb20gc25vb3Bpbmcgb24geW91ciB0cmFmZmljIHRvIHRoZSBwcm94eS4gU3VwcG9ydGVkCi0gYnkgQ2hyb21lIGFscmVhZHk6CisgYnkgRmlyZWZveCBhbmQgQ2hyb21lIGFscmVhZHk6CiAgaHR0cHM6Ly93d3cuY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy9zZWN1cmUtd2ViLXByb3h5CiAKLSAuLi5hbmQgYnkgRmlyZWZveCBzb29uOgotIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODYzNworIFNlZSB0aGlzIHN0YWxlIHdvcmsgaW4gcHJvZ3Jlc3MgYnJhbmNoOgorIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvdHJlZS9IVFRQUy1wcm94eSBiYXNlZCBvbiB0aGlzIFBSOgorIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvcHVsbC8zMDUKIAogMS45IENhY2hlIG5lZ2F0aXZlIG5hbWUgcmVzb2x2ZXMKIAogIEEgbmFtZSByZXNvbHZlIHRoYXQgaGFzIGZhaWxlZCBpcyBsaWtlbHkgdG8gZmFpbCB3aGVuIG1hZGUgYWdhaW4gd2l0aGluIGEKICBzaG9ydCBwZXJpb2Qgb2YgdGltZS4gQ3VycmVudGx5IHdlIG9ubHkgY2FjaGUgcG9zaXRpdmUgcmVzcG9uc2VzLgogCi0xLjEwIFN1cHBvcnQgSUROQTIwMDgKLQotIEludGVybmF0aW9uYWwgRG9tYWluIE5hbWVzIGFyZSBzdXBwb3J0ZWQgaW4gbGliY3VybCBzaW5jZSB5ZWFycyBiYWNrLCBwb3dlcmVkCi0gYnkgbGliaWRuLiBsaWJpZG4gaW1wbGVtZW50cyBJRE5BMjAwMyB3aGljaCBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5IElETkEyMDA4LgotIGxpYmlkbjIgaXMgYW4gZXhpc3RpbmcgbGlicmFyeSBvZmZlcmluZyBzdXBwb3J0IGZvciBJRE5BMjAwOC4KLQogMS4xMSBtaW5pbWl6ZSBkZXBlbmRlbmNpZXMgd2l0aCBkeW5hbWljbHkgbG9hZGVkIG1vZHVsZXMKIAogIFdlIGNhbiBjcmVhdGUgYSBzeXN0ZW0gd2l0aCBsb2FkYWJsZSBtb2R1bGVzL3BsdWctaW5zLCB3aGVyZSB0aGVzZSBtb2R1bGVzCkBAIC0yNjQsMTYgKzI3OCw2IEBACiAgdG8gdXNlIGFuZCBsZXNzIGVycm9yLXByb25lLiBQcm9iYWJseSBlYXNpZXN0IGJ5IHNwbGl0dGluZyBpdCBpbnRvIHNldmVyYWwKICBmdW5jdGlvbiBjYWxscy4KIAotMS4xMyBBZGQgQ1VSTE9QVF9NQUlMX0NMSUVOVCBvcHRpb24KLQotIFJhdGhlciB0aGFuIHVzZSB0aGUgVVJMIHRvIHNwZWNpZnkgdGhlIG1haWwgY2xpZW50IHN0cmluZyB0byBwcmVzZW50IGluIHRoZQotIEhFTE8gYW5kIEVITE8gY29tbWFuZHMsIGxpYmN1cmwgc2hvdWxkIHN1cHBvcnQgYSBuZXcgQ1VSTE9QVCBzcGVjaWZpY2FsbHkgZm9yCi0gc3BlY2lmeWluZyB0aGlzIGRhdGEgYXMgdGhlIFVSTCBpcyBub24tc3RhbmRhcmQgYW5kIHRvIGJlIGhvbmVzdCBhIGJpdCBvZiBhCi0gaGFjayA7LSkKLQotIFBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyB0aHJlYWQgZm9yIG1vcmUgaW5mb3JtYXRpb246Ci0gaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wNS8wMTc4Lmh0bWwKLQogMS4xNCBUeXBlc2FmZSBjdXJsX2Vhc3lfc2V0b3B0KCkKIAogIE9uZSBvZiB0aGUgbW9zdCBjb21tb24gcHJvYmxlbXMgaW4gbGliY3VybCB1c2luZyBhcHBsaWNhdGlvbnMgaXMgdGhlIGxhY2sgb2YKQEAgLTM0Miw2ICszNDYsNTYgQEAKICBpbiB0aGUgcG9vbCksIHdlIHNob3VsZCBpbnRyb2R1Y2UgYSB0aW1lb3V0IHNvIHRoYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlCiAgYmVlbiBpZGxlIGZvciBOIHNlY29uZHMgZ2V0IGNsb3NlZC4KIAorMS4yMCBTUlYgYW5kIFVSSSBETlMgcmVjb3JkcworCisgT2ZmZXIgc3VwcG9ydCBmb3IgcmVzb2x2aW5nIFNSViBhbmQgVVJJIEROUyByZWNvcmRzIGZvciBsaWJjdXJsIHRvIGtub3cgd2hpY2gKKyBzZXJ2ZXIgdG8gY29ubmVjdCB0byBmb3IgdmFyaW91cyBwcm90b2NvbHMgKGluY2x1ZGluZyBIVFRQISkuCisKKzEuMjEgQVBJIGZvciBVUkwgcGFyc2luZy9zcGxpdHRpbmcKKworIGxpYmN1cmwgaGFzIGFsd2F5cyBwYXJzZWQgVVJMcyBpbnRlcm5hbGx5IGFuZCBuZXZlciBleHBvc2VkIGFueSBBUEkgb3IKKyBmZWF0dXJlcyB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gZG8gaXQuIFN0aWxsIG1vc3Qgb3IgbWFueSBhcHBsaWNhdGlvbnMKKyB1c2luZyBsaWJjdXJsIG5lZWQgdGhhdCBhYmlsaXR5LiBJbiBwb2xscyB0byB1c2Vycywgd2UndmUgbGVhcm5lZCB0aGF0IG1hbnkKKyBsaWJjdXJsIHVzZXJzIHdvdWxkIGxpa2UgdG8gc2VlIGFuZCB1c2Ugc3VjaCBhbiBBUEkuCisKKzEuMjMgT2ZmZXIgQVBJIHRvIGZsdXNoIHRoZSBjb25uZWN0aW9uIHBvb2wKKworIFNvbWV0aW1lcyBhcHBsaWNhdGlvbnMgd2FudCB0byBmbHVzaCBhbGwgdGhlIGV4aXN0aW5nIGNvbm5lY3Rpb25zIGtlcHQgYWxpdmUuCisgQW4gQVBJIGNvdWxkIGFsbG93IGEgZm9yY2VkIGZsdXNoIG9yIGp1c3QgYSBmb3JjZWQgbG9vcCB0aGF0IHdvdWxkIHByb3Blcmx5CisgY2xvc2UgYWxsIGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGNsb3NlZCBieSB0aGUgc2VydmVyIGFscmVhZHkuCisKKzEuMjQgVENQIEZhc3QgT3BlbiBmb3Igd2luZG93cworCisgbGliY3VybCBzdXBwb3J0cyB0aGUgQ1VSTE9QVF9UQ1BfRkFTVE9QRU4gb3B0aW9uIHNpbmNlIDcuNDkuMCBmb3IgTGludXggYW5kCisgTWFjIE9TLiBXaW5kb3dzIHN1cHBvcnRzIFRDUCBGYXN0IE9wZW4gc3RhcnRpbmcgd2l0aCBXaW5kb3dzIDEwLCB2ZXJzaW9uIDE2MDcKKyBhbmQgd2Ugc2hvdWxkIGFkZCBzdXBwb3J0IGZvciBpdC4KKworMS4yNSBSZW1vdmUgdGhlIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUKKworIFdoZW4gY3VybCBhbmQgbGliY3VybCBhcmUgYnVpbHQsIG9uZSBvZiB0aGUgcHVibGljIGluY2x1ZGUgZmlsZXMgYXJlCisgZ2VuZXJhdGVkIGFuZCBpcyBwb3B1bGF0ZWQgd2l0aCBhIHNldCBvZiBkZWZpbmVzIHRoYXQgYXJlIGRlcmV2aWQgZnJvbSBzaXplcworIGFuZCBjb25zdGFudHMgZm9yIHRoZSBwYXJ0aWN1bGFyIHRhcmdldCBhcmNoaXRlY3R1cmUgdGhhdCBidWlsZCBpcyBtYWRlLiBGb3IKKyBwbGF0Zm9ybXMgdGhhdCBjYW4gc2VsZWN0IGJldHdlZW4gMzIgYml0IGFuZCA2NCBiaXQgYXQgYnVpbGQgdGltZSwgdGhpcworIGFwcHJvYWNoIG1ha2VzIHRoZSBsaWJjdXJsIGJ1aWxkIG9ubHkgY3JlYXRlIGEgc2V0IG9mIHB1YmxpYyBoZWFkZXJzIHN1aXRhYmxlCisgZm9yIG9uZSBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBhbmQgbm90IGJvdGguIElmIHlvdSBidWlsZCBsaWJjdXJsIGZvciBzdWNoIGEKKyBwbGF0Zm9ybSBhbmQgeW91IHdhbnQgdG8gYWxsb3cgYXBwbGljYXRpb25zIHRvIGdldCBidWlsdCB1c2luZyBlaXRoZXIgMzIvNjQKKyB2ZXJzaW9uLCB5b3UgbXVzdCBnZW5lcmF0ZSB0aGUgbGliY3VybCBoZWFkZXJzIG9uY2UgZm9yIGVhY2ggc2V0dXAgYW5kIHlvdQorIG11c3QgdGhlbiBhZGQgYSByZXBsYWNlbWVudCBjdXJsIGhlYWRlciB0aGF0IHdvdWxkIGl0c2VsZiBzZWxlY3QgdGhlIGNvcnJlY3QKKyAzMiBvciA2NCBiaXQgc3BlY2lmaWMgaGVhZGVyIGFzIG5lY2Vzc2FyeS4KKworIFlvdXIgY3VybC9jdXJsLmggYWx0ZXJuYXRpdmUgY291bGQgdGhlbiBsb29rIGxpa2UgKHJlcGxhY2Ugd2l0aCBzdWl0YWJsZSBDUFAKKyB2YXJpYWJsZSB0byBjaGVjayk6CisKKyAgICAgI2lmZGVmIEFSQ0hfMzJiaXQKKyAgICAgI2luY2x1ZGUgPGN1cmwzMi9jdXJsLmg+CisgICAgICNlbHNlIC8qIEFSQ0hfNjRiaXQgICovCisgICAgICNpbmNsdWRlIDxjdXJsNjQvY3VybC5oPgorICAgICAjZW5kaWYKKworIEEgZml4IHdvdWxkIGVpdGhlciAoQSkgZml4IHRoZSAzMi82NCBzZXR1cCBhdXRvbWF0aWNhbGx5IG9yIGV2ZW4gYmV0dGVyIChCKQorIHdvcmsgYXdheSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlZmluZXMgZnJvbSB0aGUgaGVhZGVycyBzbyB0aGF0IHRoZXkgY2FuCisgYmUgdXNlZCBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgaW5kZXBlbmRlbnRseSBvZiB3aGF0IGxpYmN1cmwgd2FzIGJ1aWx0IGZvci4KKwogCiAyLiBsaWJjdXJsIC0gbXVsdGkgaW50ZXJmYWNlCiAKQEAgLTQ3MywxNCArNTI3LDYgQEAKICBoZWFkZXJzIHVzZSBhIGRlZmF1bHQgdmFsdWUgc28gb25seSBoZWFkZXJzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZCBoYXZlIHRvIGJlCiAgc3BlY2lmaWVkLgogCi01LjQgU1BEWQotCi0gQ2hyb21lIGFuZCBGaXJlZm94IGFscmVhZHkgc3VwcG9ydCBTUERZIGFuZCBsb3RzIG9mIHdlYiBzZXJ2aWNlcyBkby4gVGhlcmUncwotIGEgbGlicmFyeSBmb3IgdXMgdG8gdXNlIGZvciB0aGlzIChzcGR5bGF5KSB0aGF0IGhhcyBhIHNpbWlsYXIgQVBJIGFuZCB0aGUKLSBzYW1lIGF1dGhvciBhcyBuZ2h0dHAyLgotCi0gc3BkeWxheTogaHR0cHM6Ly9naXRodWIuY29tL3RhdHN1aGlyby10L3NwZHlsYXkKLQogNS41IGF1dGg9IGluIFVSTHMKIAogIEFkZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZSBwcmVmZXJyZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHRvIHVzZSBieQpAQCAtNTAwLDcgKzU0Niw3IEBACiAgQ29uc2lkZXIgYSB3YXkgdG8gdGVsbCBjdXJsIHRvIHJlZnVzZSB0byAiZG93bmdyYWRlIiBwcm90b2NvbCB3aXRoIGEgcmVkaXJlY3QKICBhbmQvb3IgcG9zc2libHkgYSBiaXQgdGhhdCByZWZ1c2VzIHJlZGlyZWN0IHRvIGNoYW5nZSBwcm90b2NvbCBjb21wbGV0ZWx5LgogCi01LjcgTW9yZSBjb21wcmVzc2lvbnMKKzUuNyBCcm90bGkgY29tcHJlc3Npb24KIAogIENvbXByZXNzaW9uIGFsZ29yaXRobXMgdGhhdCBwZXJmb3JtIGJldHRlciB0aGFuIGd6aXAgYXJlIGJlaW5nIGNvbnNpZGVyZWQgZm9yCiAgdXNlIGFuZCBpbmNsdXNpb24gaW4gZXhpc3RpbmcgYnJvd3NlcnMuIEZvciBleGFtcGxlICdicm90bGknLiBJZiBzZXJ2ZXJzCkBAIC01MDgsNiArNTU0LDMwIEBACiAgb2YgdGhpcy4gVGhlIGFsZ29yaXRobTogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9icm90bGkgVGhlIEZpcmVmb3ggYnVnOgogIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjU1OQogCis1LjggUVVJQworCisgVGhlIHN0YW5kYXJkaXphdGlvbiBwcm9jZXNzIG9mIFFVSUMgaGFzIGJlZW4gdGFrZW4gdG8gdGhlIElFVEYgYW5kIGNhbiBiZQorIGZvbGxvd2VkIG9uIHRoZSBbSUVURiBRVUlDIE1haWxpbmcKKyBsaXN0XShodHRwczovL3d3dy5pZXRmLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3F1aWMpLiBJJ2QgbGlrZSB1cyB0byBnZXQgb24gdGhlCisgYmFuZHdhZ29uLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIGRvbmUgd2l0aCBhIHNlcGFyYXRlIGxpYnJhcnkvcHJvamVjdCB0bworIGhhbmRsZSB0aGUgYmluYXJ5L2ZyYW1pbmcgbGF5ZXIgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gaG93IEhUVFAvMiBpcworIGltcGxlbWVudGVkLiBUaGlzLCB0byBhbGxvdyBvdGhlciBwcm9qZWN0cyB0byBiZW5lZml0IGZyb20gdGhlIHdvcmsgYW5kIHRvCisgdGh1cyBicm9hZGVuIHRoZSBpbnRlcmVzdCBhbmQgY2hhbmNlIG9mIG90aGVycyB0byBwYXJ0aWNpcGF0ZS4KKworNS45IEFkZCBlYXN5IGFyZ3VtZW50IHRvIGZvcm1wb3N0IGZ1bmN0aW9ucworCisgTWFrZSBzdXJlIHRoZXJlJ3MgYW4gZWFzeSBoYW5kbGUgcGFzc2VkIGluIHRvIGBjdXJsX2Zvcm1hZGQoKWAsCisgYGN1cmxfZm9ybWdldCgpYCBhbmQgYGN1cmxfZm9ybWZyZWUoKWAgYnkgYWRkaW5nIHJlcGxhY2VtZW50IGZ1bmN0aW9ucyBhbmQKKyBkZXByZWNhdGluZyB0aGUgb2xkIG9uZXMuIEFsbG93cyBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgYW5kIGlzIGdlbmVyYWxseSBnb29kCisgQVBJIGh5Z2llbmUuCisKKzUuMTAgTGVhdmUgc2VjdXJlIGNvb2tpZXMgYWxvbmUKKworIE5vbi1zZWN1cmUgb3JpZ2lucyAoSFRUUCBzaXRlcykgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIHNldCBvciBtb2RpZnkKKyBjb29raWVzIHdpdGggdGhlICdzZWN1cmUnIHByb3BlcnR5OgorCisgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtYWxvbmUtMDEKKwogCiA2LiBURUxORVQKIApAQCAtNTQ0LDYgKzYxNCwxNyBAQAogIEFkZCB0aGUgYWJpbGl0eSwgZm9yIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBsaWJjdXJsLCB0byBvYnRhaW4gdGhlIGxpc3Qgb2YKICBjYXBhYmlsaXRpZXMgcmV0dXJuZWQgZnJvbSB0aGUgRUhMTyBjb21tYW5kLgogCis3LjMgQWRkIENVUkxPUFRfTUFJTF9DTElFTlQgb3B0aW9uCisKKyBSYXRoZXIgdGhhbiB1c2UgdGhlIFVSTCB0byBzcGVjaWZ5IHRoZSBtYWlsIGNsaWVudCBzdHJpbmcgdG8gcHJlc2VudCBpbiB0aGUKKyBIRUxPIGFuZCBFSExPIGNvbW1hbmRzLCBsaWJjdXJsIHNob3VsZCBzdXBwb3J0IGEgbmV3IENVUkxPUFQgc3BlY2lmaWNhbGx5IGZvcgorIHNwZWNpZnlpbmcgdGhpcyBkYXRhIGFzIHRoZSBVUkwgaXMgbm9uLXN0YW5kYXJkIGFuZCB0byBiZSBob25lc3QgYSBiaXQgb2YgYQorIGhhY2sgOy0pCisKKyBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgdGhyZWFkIGZvciBtb3JlIGluZm9ybWF0aW9uOgorIGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDUvMDE3OC5odG1sCisKKwogOC4gUE9QMwogCiA4LjEgUGlwZWxpbmluZwpAQCAtNjU4LDYgKzczOSw2MyBAQAogIGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTMtMDMvMDEwMy5odG1sIC4gbGlidW5ib3VuZCBtYXkgYmUgdGhlCiAgY29ycmVjdCBsaWJyYXJ5IHRvIGJhc2UgdGhpcyBkZXZlbG9wbWVudCBvbi4KIAorIEJqw7ZybiBTdGVuYmVyZyB3cm90ZSBhIHNlcGFyYXRlIGluaXRpYWwgdGFrZSBvbiBEQU5FIHRoYXQgd2FzIG5ldmVyCisgY29tcGxldGVkLgorCisxMy45IFN1cHBvcnQgVExTIHYxLjMKKworIFRMUyB2ZXJzaW9uIDEuMyBpcyBhYm91dCB0byBzaGlwIGFuZCBpcyBnZXR0aW5nIGltcGxlbWVudGVkIGJ5IFRMUyBsaWJyYXJpZXMKKyBhcyB3ZSBzcGVhay4gV2Ugc2hvdWxkIHN0YXJ0IHRvIHN1cHBvcnQgdGhlIHN5bWJvbCBhbmQgbWFrZSBzdXJlIGFsbCBiYWNrZW5kcworIGhhbmRsZSBpdCBhY2NvcmRpbmdseSwgdGhlbiBncmFkdWFsbHkgYWRkIHN1cHBvcnQgYXMgdGhlIFRMUyBsaWJyYXJpZXMgYWRkCisgdGhlIGNvcnJlc3BvbmRpbmcgc3VwcG9ydC4gVGhlcmUgbWF5IGJlIGEgbmVlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMKKyB0byBhbGxvdyBsaWJjdXJsIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuZXcgZmVhdHVyZXMgaW4gMS4zLgorCisxMy4xMCBTdXBwb3J0IFNTTEtFWUxPR0ZJTEUKKworIFdoZW4gdXNlZCwgRmlyZWZveCBhbmQgQ2hyb21lIGR1bXBzIHRoZWlyIG1hc3RlciBUTFMga2V5cyB0byB0aGUgZmlsZSBuYW1lCisgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZXMuIFRoaXMgYWxsb3dzIHRvb2xzIGxpa2UgZm9yIGV4YW1wbGUKKyBXaXJlc2hhcmsgdG8gY2FwdHVyZSBhbmQgZGVjaXBoZXIgVExTIHRyYWZmaWMgdG8vZnJvbSB0aG9zZSBjbGllbnRzLiBsaWJjdXJsCisgY291bGQgYmUgbWFkZSB0byBzdXBwb3J0IHRoaXMgbW9yZSB3aWRlbHkgKHByZXN1bWFibHkgdGhpcyBhbHJlYWR5IHdvcmtzIHdoZW4KKyBidWlsdCB3aXRoIE5TUykuIFBldGVyIFd1IG1hZGUgYSBPcGVuU1NMIHByZWxvYWQgdG8gbWFrZSBwb3NzaWJsZSB0aGF0IGNhbiBiZQorIHVzZWQgYXMgaW5zcGlyYXRpb24gYW5kIGd1aWRhbmNlCisgaHR0cHM6Ly9naXQubGVrZW5zdGV5bi5ubC9wZXRlci93aXJlc2hhcmstbm90ZXMvdHJlZS9zcmMvc3Nsa2V5bG9nLmMKKworMTMuMTEgU3VwcG9ydCBpbnRlcm1lZGlhdGUgJiByb290IHBpbm5pbmcgZm9yIFBJTk5FRFBVQkxJQ0tFWQorCisgQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVkgZG9lcyBub3QgY29uc2lkZXIgdGhlIGhhc2hlcyBvZiBpbnRlcm1lZGlhdGUgJiByb290CisgY2VydGlmaWNhdGVzIHdoZW4gY29tcGFyaW5nIHRoZSBwaW5uZWQga2V5cy4gVGhlcmVmb3JlIGl0IGlzIG5vdCBjb21wYXRpYmxlCisgd2l0aCAiSFRUUCBQdWJsaWMgS2V5IFBpbm5pbmciIGFzIHRoZXJlIGFsc28gaW50ZXJtZWRpYXRlIGFuZCByb290IGNlcnRpZmljYXRlcworIGNhbiBiZSBwaW5uZWQuIFRoaXMgaXMgdmVyeSB1c2VmdWwgYXMgaXQgcHJldmVudHMgd2ViYWRtaW5zIGZyb20gImxvY2tpbmcKKyB0aGVtc2VsZiBvdXQgb2YgdGhlaXIgc2VydmVycyIuCisKKyBBZGRpbmcgdGhpcyBmZWF0dXJlIHdvdWxkIG1ha2UgY3VybHMgcGlubmluZyAxMDAlIGNvbXBhdGlibGUgdG8gSFBLUCBhbmQgYWxsb3cKKyBtb3JlIGZsZXhpYmxlIHBpbm5pbmcuCisKKzEzLjEyIFN1cHBvcnQgSFNUUworCisgIkhUVFAgU3RyaWN0IFRyYW5zcG9ydCBTZWN1cml0eSIgaXMgVE9GVSAodHJ1c3Qgb24gZmlyc3QgdXNlKSwgdGltZS1iYXNlZAorIGZlYXR1cmVzIGluZGljYXRlZCBieSBhIEhUVFAgaGVhZGVyIHNlbmQgYnkgdGhlIHdlYnNlcnZlci4gSXQgaXMgd2lkZWx5IHVzZWQKKyBpbiBicm93c2VycyBhbmQgaXQncyBwdXJwb3NlIGlzIHRvIHByZXZlbnQgaW5zZWN1cmUgSFRUUCBjb25uZWN0aW9ucyBhZnRlcgorIGEgcHJldmlvdXMgSFRUUFMgY29ubmVjdGlvbi4gSXQgcHJvdGVjdHMgYWdhaW5zdCBTU0xTdHJpcHBpbmcgYXR0YWNrcy4KKworIERvYzogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvSFRUUF9zdHJpY3RfdHJhbnNwb3J0X3NlY3VyaXR5CisgUkZDIDY3OTc6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2Nzk3CisKKzEzLjEzIFN1cHBvcnQgSFBLUAorCisgIkhUVFAgUHVibGljIEtleSBQaW5uaW5nIiBpcyBUT0ZVICh0cnVzdCBvbiBmaXJzdCB1c2UpLCB0aW1lLWJhc2VkCisgZmVhdHVyZXMgaW5kaWNhdGVkIGJ5IGEgSFRUUCBoZWFkZXIgc2VuZCBieSB0aGUgd2Vic2VydmVyLiBJdCdzIHB1cnBvc2UgaXMKKyB0byBwcmV2ZW50IE1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MgYnkgdHJ1c3RlZCBDQXMgYnkgYWxsb3dpbmcgd2ViYWRtaW5zCisgdG8gc3BlY2lmeSB3aGljaCBDQXMvY2VydGlmaWNhdGVzL3B1YmxpYyBrZXlzIHRvIHRydXN0IHdoZW4gY29ubmVjdGlvbiB0bworIHRoZWlyIHdlYnNpdGVzLgorCisgSXQgY2FuIGJlIGJ1aWxkIGJhc2VkIG9uIFBJTk5FRFBVQkxJQ0tFWS4KKworIFdpa2lwZWRpYTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFRUUF9QdWJsaWNfS2V5X1Bpbm5pbmcKKyBPV0FTUDogaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9DZXJ0aWZpY2F0ZV9hbmRfUHVibGljX0tleV9QaW5uaW5nCisgRG9jOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9TZWN1cml0eS9QdWJsaWNfS2V5X1Bpbm5pbmcKKyBSRkM6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXdlYnNlYy1rZXktcGlubmluZy0yMQorCiAxNC4gR251VExTCiAKIDE0LjEgU1NMIGVuZ2luZSBzdHVmZgpAQCAtNzIyLDkgKzg2MCwzOCBAQAogCiAgIE1hbmRhdG9yeSB0byBzdXBwb3J0IExEQVAgU0FTTCBhdXRoZW50aWNhdGlvbi4KIAotMTcuIENvbW1hbmQgbGluZSB0b29sCiAKLTE3LjEgc3luYworMTcuIFNTSCBwcm90b2NvbHMKKworMTcuMSBNdWx0aXBsZXhpbmcKKworIFNTSCBpcyBhIHBlcmZlY3RseSBmaW5lIG11bHRpcGxleGVkIHByb3RvY29scyB3aGljaCB3b3VsZCBhbGxvdyBsaWJjdXJsIHRvIGRvCisgbXVsdGlwbGUgcGFyYWxsZWwgdHJhbnNmZXJzIGZyb20gdGhlIHNhbWUgaG9zdCB1c2luZyB0aGUgc2FtZSBjb25uZWN0aW9uLAorIG11Y2ggaW4gdGhlIHNhbWUgc3Bpcml0IGFzIEhUVFAvMiBkb2VzLiBsaWJjdXJsIGhvd2V2ZXIgZG9lcyBub3QgdGFrZQorIGFkdmFudGFnZSBvZiB0aGF0IGFiaWxpdHkgYnV0IHdpbGwgaW5zdGVhZCBhbHdheXMgY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gZm9yCisgbmV3IHRyYW5zZmVycyBldmVuIGlmIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMgdG8gdGhlIGhvc3QuCisKKyBUbyBmaXggdGhpcywgbGliY3VybCB3b3VsZCBoYXZlIHRvIGRldGVjdCBhbiBleGlzdGluZyBjb25uZWN0aW9uIGFuZCAiYXR0YWNoIgorIHRoZSBuZXcgdHJhbnNmZXIgdG8gdGhlIGV4aXN0aW5nIG9uZS4KKworMTcuMiBTRlRQIHBlcmZvcm1hbmNlCisKKyBsaWJjdXJsJ3MgU0ZUUCB0cmFuc2ZlciBwZXJmb3JtYW5jZSBpcyBzdWIgcGFyIGFuZCBjYW4gYmUgaW1wcm92ZWQsIG1vc3RseSBieQorIHRoZSBhcHByb2FjaCBtZW50aW9uZWQgaW4gIjEuNiBNb2RpZmllZCBidWZmZXIgc2l6ZSBhcHByb2FjaCIuCisKKzE3LjMgU3VwcG9ydCBiZXR0ZXIgdGhhbiBNRDUgaG9zdGtleSBoYXNoCisKKyBsaWJjdXJsIG9mZmVycyB0aGUgQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENSBvcHRpb24gZm9yIHZlcmlmeWluZyB0aGUKKyBzZXJ2ZXIncyBrZXkuIE1ENSBpcyBnZW5lcmFsbHkgYmVpbmcgZGVwcmVjYXRlZCBzbyB3ZSBzaG91bGQgaW1wbGVtZW50Cisgc3VwcG9ydCBmb3Igc3Ryb25nZXIgaGFzaGluZyBhbGdvcml0aG1zLiBsaWJzc2gyIGl0c2VsZiBpcyB3aGF0IHByb3ZpZGVzIHRoaXMKKyB1bmRlcmx5aW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGl0IHN1cHBvcnRzIGF0IGxlYXN0IFNIQS0xIGFzIGFuIGFsdGVybmF0aXZlLgorIFNIQS0xIGlzIGFsc28gYmVpbmcgZGVwcmVjYXRlZCB0aGVzZSBkYXlzIHNvIHdlIHNob3VsZCBjb25zaWRlciB3b3JraWduIHdpdGgKKyBsaWJzc2gyIHRvIGluc3RlYWQgb2ZmZXIgc3VwcG9ydCBmb3IgU0hBLTI1NiBvciBzaW1pbGFyLgorCisKKzE4LiBDb21tYW5kIGxpbmUgdG9vbAorCisxOC4xIHN5bmMKIAogICJjdXJsIC0tc3luYyBodHRwOi8vZXhhbXBsZS5jb20vZmVlZFsxLTEwMF0ucnNzIiBvcgogICJjdXJsIC0tc3luYyBodHRwOi8vZXhhbXBsZS5uZXQve2luZGV4LGNhbGVuZGFyLGhpc3Rvcnl9Lmh0bWwiCkBAIC03MzMsMjAgKzkwMCwyMCBAQAogIHJlbW90ZSBmaWxlIGlzIG5ld2VyIHRoYW4gdGhlIGxvY2FsIGZpbGUuIEEgTGFzdC1Nb2RpZmllZCBIVFRQIGRhdGUgaGVhZGVyCiAgc2hvdWxkIGFsc28gYmUgdXNlZCB0byBzZXQgdGhlIG1vZCBkYXRlIG9uIHRoZSBkb3dubG9hZGVkIGZpbGUuCiAKLTE3LjIgZ2xvYiBwb3N0cworMTguMiBnbG9iIHBvc3RzCiAKICBHbG9iYmluZyBzdXBwb3J0IGZvciAtZCBhbmQgLUYsIGFzIGluICdjdXJsIC1kICJuYW1lPWZvb1swLTldIiBVUkwnLgogIFRoaXMgaXMgZWFzaWx5IHNjcmlwdGVkIHRob3VnaC4KIAotMTcuMyBwcmV2ZW50IGZpbGUgb3ZlcndyaXRpbmcKKzE4LjMgcHJldmVudCBmaWxlIG92ZXJ3cml0aW5nCiAKLSBBZGQgYW4gb3B0aW9uIHRoYXQgcHJldmVudHMgY1VSTCBmcm9tIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGxvY2FsIGZpbGVzLiBXaGVuCisgQWRkIGFuIG9wdGlvbiB0aGF0IHByZXZlbnRzIGN1cmwgZnJvbSBvdmVyd3JpdGluZyBleGlzdGluZyBsb2NhbCBmaWxlcy4gV2hlbgogIHVzZWQsIGFuZCB0aGVyZSBhbHJlYWR5IGlzIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgdGFyZ2V0IGZpbGUgbmFtZQogIChlaXRoZXIgLU8gb3IgLW8pLCBhIG51bWJlciBzaG91bGQgYmUgYXBwZW5kZWQgKGFuZCBpbmNyZWFzZWQgaWYgYWxyZWFkeQogIGV4aXN0aW5nKS4gU28gdGhhdCBpbmRleC5odG1sIGJlY29tZXMgZmlyc3QgaW5kZXguaHRtbC4xIGFuZCB0aGVuCiAgaW5kZXguaHRtbC4yIGV0Yy4KIAotMTcuNCBzaW11bHRhbmVvdXMgcGFyYWxsZWwgdHJhbnNmZXJzCisxOC40IHNpbXVsdGFuZW91cyBwYXJhbGxlbCB0cmFuc2ZlcnMKIAogIFRoZSBjbGllbnQgY291bGQgYmUgdG9sZCB0byB1c2UgbWF4aW11bSBOIHNpbXVsdGFuZW91cyBwYXJhbGxlbCB0cmFuc2ZlcnMgYW5kCiAgdGhlbiBqdXN0IG1ha2Ugc3VyZSB0aGF0IGhhcHBlbnMuIEl0IHNob3VsZCBvZiBjb3Vyc2Ugbm90IG1ha2UgbW9yZSB0aGFuIG9uZQpAQCAtNzU2LDcgKzkyMyw3IEBACiAgVXNpbmcgdGhlIG11bHRpIGludGVyZmFjZSB3b3VsZCBhbHNvIGFsbG93IHByb3Blcmx5IHVzaW5nIHBhcmFsbGVsIHRyYW5zZmVycwogIHdpdGggSFRUUC8yIGFuZCBzdXBwb3J0aW5nIEhUVFAvMiBzZXJ2ZXIgcHVzaCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAKLTE3LjUgcHJvdmlkZSBmb3JtcG9zdCBoZWFkZXJzCisxOC41IHByb3ZpZGUgZm9ybXBvc3QgaGVhZGVycwogCiAgRXh0ZW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIG11bHRpcGFydCBmb3JtcG9zdGluZy4gSG93IGFib3V0IGxlYXZpbmcKICB0aGUgJzt0eXBlPWZvbycgc3ludGF4IGFzIGl0IGlzIGFuZCBhZGRpbmcgYW4gZXh0cmEgdGFnIChoZWFkZXJzKSB3aGljaApAQCAtNzcwLDI0ICs5MzcsMjQgQEAKICB3aGljaCBzaG91bGQgb3ZlcndyaXRlIHRoZSBwcm9ncmFtIHJlYXNvbmFibGUgZGVmYXVsdHMgKHBsYWluL3RleHQsCiAgOGJpdC4uLikKIAotMTcuNiB3YXJuaW5nIHdoZW4gc2V0dGluZyBhbiBvcHRpb24KKzE4LjYgd2FybmluZyB3aGVuIHNldHRpbmcgYW4gb3B0aW9uCiAKICBEaXNwbGF5IGEgd2FybmluZyB3aGVuIGxpYmN1cmwgcmV0dXJucyBhbiBlcnJvciB3aGVuIHNldHRpbmcgYW4gb3B0aW9uLgogIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZWxsIHdoZW4gc3VwcG9ydCBmb3IgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaGFzbid0IGJlZW4KICBjb21waWxlZCBpbnRvIHRoZSBsaWJyYXJ5LgogCi0xNy43IHdhcm5pbmcgd2hlbiBzZW5kaW5nIGJpbmFyeSBvdXRwdXQgdG8gdGVybWluYWwKKzE4Ljcgd2FybmluZyB3aGVuIHNlbmRpbmcgYmluYXJ5IG91dHB1dCB0byB0ZXJtaW5hbAogCiAgUHJvdmlkZSBhIHdheSB0aGF0IHByb21wdHMgdGhlIHVzZXIgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgYmluYXJ5IGRhdGEgaXMKICBzZW50IHRvIHRoZSB0ZXJtaW5hbCwgbXVjaCBpbiB0aGUgc3R5bGUgJ2xlc3MnIGRvZXMgaXQuCiAKLTE3Ljggb2ZmZXIgY29sb3ItY29kZWQgSFRUUCBoZWFkZXIgb3V0cHV0CisxOC44IG9mZmVyIGNvbG9yLWNvZGVkIEhUVFAgaGVhZGVyIG91dHB1dAogCiAgQnkgb2ZmZXJpbmcgZGlmZmVyZW50IGNvbG9yIG91dHB1dCBvbiB0aGUgaGVhZGVyIG5hbWUgYW5kIHRoZSBoZWFkZXIKICBjb250ZW50cywgdGhleSBjb3VsZCBiZSBtYWRlIG1vcmUgcmVhZGFibGUgYW5kIHRodXMgaGVscCB1c2VycyB3b3JraW5nIG9uCiAgSFRUUCBzZXJ2aWNlcy4KIAotMTcuOSBDaG9vc2UgdGhlIG5hbWUgb2YgZmlsZSBpbiBicmFjZXMgZm9yIGNvbXBsZXggVVJMcworMTguOSBDaG9vc2UgdGhlIG5hbWUgb2YgZmlsZSBpbiBicmFjZXMgZm9yIGNvbXBsZXggVVJMcwogCiAgV2hlbiB1c2luZyBicmFjZXMgdG8gZG93bmxvYWQgYSBsaXN0IG9mIFVSTHMgYW5kIHlvdSB1c2UgY29tcGxpY2F0ZWQgbmFtZXMKICBpbiB0aGUgbGlzdCBvZiBhbHRlcm5hdGl2ZXMsIGl0IGNvdWxkIGJlIGhhbmR5IHRvIGFsbG93IGN1cmwgdG8gdXNlIG90aGVyCkBAIC03OTksMTMgKzk2NiwxMyBAQAogCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvaXNzdWVzLzIyMQogCi0xNy4xMCBpbXByb3ZlIGhvdyBjdXJsIHdvcmtzIGluIGEgd2luZG93cyBjb25zb2xlIHdpbmRvdworMTguMTAgaW1wcm92ZSBob3cgY3VybCB3b3JrcyBpbiBhIHdpbmRvd3MgY29uc29sZSB3aW5kb3cKIAogIElmIHlvdSBwdWxsIHRoZSBzY3JvbGxiYXIgd2hlbiB0cmFuc2ZlcnJpbmcgd2l0aCBjdXJsIGluIGEgV2luZG93cyBjb25zb2xlCiAgd2luZG93LCB0aGUgdHJhbnNmZXIgaXMgaW50ZXJydXB0ZWQgYW5kIGNhbiBnZXQgZGlzY29ubmVjdGVkLiBUaGlzIGNhbgogIHByb2JhYmx5IGJlIGltcHJvdmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9pc3N1ZXMvMzIyCiAKLTE3LjExIC13IG91dHB1dCB0byBzdGRlcnIKKzE4LjExIC13IG91dHB1dCB0byBzdGRlcnIKIAogIC13IGlzIHF1aXRlIHVzZWZ1bCwgYnV0IG5vdCB0byB0aG9zZSBvZiB1cyB3aG8gdXNlIGN1cmwgd2l0aG91dCAtbyBvciAtTwogIChzdWNoIGFzIGZvciBzY3JpcHRpbmcgdGhyb3VnaCBhIGhpZ2hlciBsZXZlbCBsYW5ndWFnZSkuIEl0IHdvdWxkIGJlIG5pY2UgdG8KQEAgLTgxMyw3ICs5ODAsNyBAQAogIGluc3RlYWQuIFByb3Bvc2VkIG5hbWU6IC0td3JpdGUtc3RkZXJyLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2lzc3Vlcy82MTMKIAotMTcuMTIga2VlcCBydW5uaW5nLCByZWFkIGluc3RydWN0aW9ucyBmcm9tIHBpcGUvc29ja2V0CisxOC4xMiBrZWVwIHJ1bm5pbmcsIHJlYWQgaW5zdHJ1Y3Rpb25zIGZyb20gcGlwZS9zb2NrZXQKIAogIFByb3ZpZGUgYW4gb3B0aW9uIHRoYXQgbWFrZXMgY3VybCBub3QgZXhpdCBhZnRlciB0aGUgbGFzdCBVUkwgKG9yIGV2ZW4gd29yawogIHdpdGhvdXQgYSBnaXZlbiBVUkwpLCBhbmQgdGhlbiBtYWtlIGl0IHJlYWQgaW5zdHJ1Y3Rpb25zIHBhc3NlZCBvbiBhIHBpcGUgb3IKQEAgLTgyMSw3ICs5ODgsNyBAQAogIGludm9rZSBjYW4gdGFsayB0byB0aGUgc3RpbGwgcnVubmluZyBpbnN0YW5jZSBhbmQgYXNrIGZvciB0cmFuc2ZlcnMgdG8gZ2V0CiAgZG9uZSwgYW5kIHRodXMgbWFpbnRhaW4gaXRzIGNvbm5lY3Rpb24gcG9vbCwgRE5TIGNhY2hlIGFuZCBtb3JlLgogCi0xNy4xMyBzdXBwb3J0IG1ldGFsaW5rIGluIGh0dHAgaGVhZGVycworMTguMTMgc3VwcG9ydCBtZXRhbGluayBpbiBodHRwIGhlYWRlcnMKIAogIEN1cmwgaGFzIHN1cHBvcnQgZm9yIGRvd25sb2FkaW5nIGEgbWV0YWxpbmsgeG1sIGZpbGUsIHByb2Nlc3NpbmcgaXQsIGFuZCB0aGVuCiAgZG93bmxvYWRpbmcgdGhlIHRhcmdldCBvZiB0aGUgbWV0YWxpbmsuIFRoaXMgaXMgZG9uZSB2aWEgdGhlIC0tbWV0YWxpbmsgb3B0aW9uLgpAQCAtODM0LDcgKzEwMDEsNyBAQAogIFNlZSBhbHNvIGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXdnZXQvMjAxNS0wNi9tc2cwMDAzNC5odG1sIGZvcgogIGFuIGltcGxlbWF0YXRpb24gb2YgdGhpcyBpbiB3Z2V0LgogCi0xNy4xNCAtLWZhaWwgd2l0aG91dCAtLWxvY2F0aW9uIHNob3VsZCB0cmVhdCAzeHggYXMgYSBmYWlsdXJlCisxOC4xNCAtLWZhaWwgd2l0aG91dCAtLWxvY2F0aW9uIHNob3VsZCB0cmVhdCAzeHggYXMgYSBmYWlsdXJlCiAKICBUbyBhbGxvdyBhIGNvbW1hbmQgbGluZSBsaWtlIHRoaXMgdG8gZGV0ZWN0IGEgcmVkaXJlY3QgYW5kIGNvbnNpZGVyIGl0IGEKICBmYWlsdXJlOgpAQCAtODQ1LDM4ICsxMDEyLDY4IEBACiAgd2F5IHRvIGltcGxlbWVudCB0aGlzIGlzIHByb2JhYmx5IHRvIGFkZCB0aGF0IG5ldyBsb2dpYyBpbiB0aGUgY29tbWFuZCBsaW5lCiAgdG9vbCBvbmx5IGFuZCBub3QgaW4gdGhlIHVuZGVybHlpbmcgQ1VSTE9QVF9GQUlMT05FUlJPUiBsb2dpYy4KIAorMTguMTUgSW50cm9kdWNlIC0tZmFpbC1mYXN0IHRvIGV4aXQgb24gZmlyc3QgdHJhbnNmZXIgZmFpbAogCi0xOC4gQnVpbGQKKyBjdXJsIHdpbGwgdHJhbnNmZXIgYWxsIFVSTHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBvbmUgYnkgb25lIGJ1dCBvbmx5CisgcmV0dXJucyB0aGUgZXJyb3IgY29kZSBmb3IgdGhlIGxhc3QgdHJhbnNmZXIuIFRyYW5zZmVyIGZhaWx1cmVzIG9uIHRoZSBmaXJzdAorIG9uZXMgd2lsbCBub3QgYmUgcmV0dXJuZWQgYXMgZXJyb3IgY29kZSBldGMgdG8gdGhlIHNoZWxsLiBBIC0tZmFpbC1mYXN0Cisgb3B0aW9uIHdvdWxkIG1ha2UgY3VybCBleGl0IGFuZCByZXR1cm4gYW4gZXJyb3IgZm9yIHRoZSBmaXJzdCB0cmFuc2ZlciB0aGF0CisgZmFpbHMuCiAKLTE4LjEgcm9mZml0CisxOC4xNiAtLXJldHJ5IHNob3VsZCByZXN1bWUKKworIFdoZW4gLS1yZXRyeSBpcyB1c2VkIGFuZCBjdXJsIGFjdHVhbGx5IHJldHJpZXMgdHJhbnNmZXIsIGl0IHNob3VsZCB1c2UgdGhlCisgYWxyZWFkeSB0cmFuc2ZlcmVkIGRhdGEgYW5kIGRvIGEgcmVzdW1lZCB0cmFuc2ZlciBmb3IgdGhlIHJlc3QgKHdoZW4KKyBwb3NzaWJsZSkgc28gdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gdHJhbnNmZXIgdGhlIHNhbWUgZGF0YSBhZ2FpbiB0aGF0IHdhcworIGFscmVhZHkgdHJhbmZlcmVkIGJlZm9yZSB0aGUgcmV0cnkuCisKKyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC9pc3N1ZXMvMTA4NAorCisKKzE5LiBCdWlsZAorCisxOS4xIHJvZmZpdAogCiAgQ29uc2lkZXIgZXh0ZW5kaW5nICdyb2ZmaXQnIHRvIHByb2R1Y2UgZGVjZW50IEFTQ0lJIG91dHB1dCwgYW5kIHVzZSB0aGF0CiAgaW5zdGVhZCBvZiAoZylucm9mZiB3aGVuIGJ1aWxkaW5nIHNyYy90b29sX2h1Z2VoZWxwLmMKIAotMTkuIFRlc3Qgc3VpdGUKKzE5LjIgRW5hYmxlIFBJRSBhbmQgUkVMUk8gYnkgZGVmYXVsdAogCi0xOS4xIFNTTCB0dW5uZWwKKyBFc3BlY2lhbGx5IHdoZW4gaGF2aW5nIHByb2dyYW1zIHRoYXQgZXhlY3V0ZSBjdXJsIHZpYSB0aGUgY29tbWFuZCBsaW5lLCBQSUUKKyByZW5kZXJzIHRoZSBleHBsb2l0YXRpb24gb2YgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIGEgbG90IG1vcmUKKyBkaWZmaWN1bHQuIFRoaXMgY2FuIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbGVha3MgYmVpbmcKKyByZXF1aXJlZCB0byBjb25kdWN0IGEgc3VjY2Vzc2Z1bCBhdHRhY2suIFJFTFJPLCBvbiB0aGUgb3RoZXIgaGFuZCwgbWFza3MKKyBkaWZmZXJlbnQgYmluYXJ5IHNlY3Rpb25zIGxpa2UgdGhlIEdPVCBhcyByZWFkLW9ubHkgYW5kIHRodXMga2lsbHMgYSBoYW5kZnVsCisgb2YgdGVjaG5pcXVlcyB0aGF0IGNvbWUgaW4gaGFuZHkgd2hlbiBhdHRhY2tlcnMgYXJlIGFibGUgdG8gYXJiaXRyYXJpbHkKKyBvdmVyd3JpdGUgbWVtb3J5LiBBIGZldyB0ZXN0cyBzaG93ZWQgdGhhdCBlbmFibGluZyB0aGVzZSBmZWF0dXJlcyBoYWQgY2xvc2UKKyB0byBubyBpbXBhY3QsIG5laXRoZXIgb24gdGhlIHBlcmZvcm1hbmNlIG5vciBvbiB0aGUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5IG9mCisgY3VybC4KKworCisyMC4gVGVzdCBzdWl0ZQorCisyMC4xIFNTTCB0dW5uZWwKIAogIE1ha2Ugb3VyIG93biB2ZXJzaW9uIG9mIHN0dW5uZWwgZm9yIHNpbXBsZSBwb3J0IGZvcndhcmRpbmcgdG8gZW5hYmxlIEhUVFBTCiAgYW5kIEZUUC1TU0wgdGVzdHMgd2l0aG91dCB0aGUgc3R1bm5lbCBkZXBlbmRlbmN5LCBhbmQgaXQgY291bGQgYWxsb3cgdXMgdG8KICBwcm92aWRlIHRlc3QgdG9vbHMgYnVpbHQgd2l0aCBlaXRoZXIgT3BlblNTTCBvciBHbnVUTFMKIAotMTkuMiBuaWNlciBsYWNraW5nIHBlcmwgbWVzc2FnZQorMjAuMiBuaWNlciBsYWNraW5nIHBlcmwgbWVzc2FnZQogCiAgSWYgcGVybCB3YXNuJ3QgZm91bmQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIGRvbid0IGF0dGVtcHQgdG8gcnVuIHRoZSB0ZXN0cwogIGJ1dCBleHBsYWluIHNvbWV0aGluZyBuaWNlIHdoeSBpdCBkb2Vzbid0LgogCi0xOS4zIG1vcmUgcHJvdG9jb2xzIHN1cHBvcnRlZAorMjAuMyBtb3JlIHByb3RvY29scyBzdXBwb3J0ZWQKIAogIEV4dGVuZCB0aGUgdGVzdCBzdWl0ZSB0byBpbmNsdWRlIG1vcmUgcHJvdG9jb2xzLiBUaGUgdGVsbmV0IGNvdWxkIGp1c3QgZG8gRlRQCiAgb3IgaHR0cCBvcGVyYXRpb25zIChmb3Igd2hpY2ggd2UgaGF2ZSB0ZXN0IHNlcnZlcnMpLgogCi0xOS40IG1vcmUgcGxhdGZvcm1zIHN1cHBvcnRlZAorMjAuNCBtb3JlIHBsYXRmb3JtcyBzdXBwb3J0ZWQKIAogIE1ha2UgdGhlIHRlc3Qgc3VpdGUgd29yayBvbiBtb3JlIHBsYXRmb3Jtcy4gT3BlbkJTRCBhbmQgTWFjIE9TLiBSZW1vdmUKICBmb3JrKClzIGFuZCBpdCBzaG91bGQgYmVjb21lIGV2ZW4gbW9yZSBwb3J0YWJsZS4KIAotMTkuNSBBZGQgc3VwcG9ydCBmb3IgY29uY3VycmVudCBjb25uZWN0aW9ucworMjAuNSBBZGQgc3VwcG9ydCBmb3IgY29uY3VycmVudCBjb25uZWN0aW9ucwogCiAgVGVzdHMgODM2LCA4ODIgYW5kIDkzOCB3ZXJlIGRlc2lnbmVkIHRvIHZlcmlmeSB0aGF0IHNlcGFyYXRlIGNvbm5lY3Rpb25zIGFyZW4ndAogIHVzZWQgd2hlbiB1c2luZyBkaWZmZXJlbnQgbG9naW4gY3JlZGVudGlhbHMgaW4gcHJvdG9jb2xzIHRoYXQgc2hvdWxkbid0IHJlLXVzZQpAQCAtODkwLDcgKzEwODcsNyBAQAogIGFuZCB0aHVzIHRoZSB3YWl0IGZvciBjb25uZWN0aW9ucyBsb29wIGlzIG5ldmVyIGVudGVyZWQgdG8gcmVjZWl2ZSB0aGUgc2Vjb25kCiAgY29ubmVjdGlvbi4KIAotMTkuNiBVc2UgdGhlIFJGQzYyNjUgdGVzdCBzdWl0ZQorMjAuNiBVc2UgdGhlIFJGQzYyNjUgdGVzdCBzdWl0ZQogCiAgQSB0ZXN0IHN1aXRlIG1hZGUgZm9yIEhUVFAgY29va2llcyAoUkZDIDYyNjUpIGJ5IEFkYW0gQmFydGggaXMgYXZhaWxhYmxlIGF0CiAgaHR0cHM6Ly9naXRodWIuY29tL2FiYXJ0aC9odHRwLXN0YXRlL3RyZWUvbWFzdGVyL3Rlc3RzCkBAIC05MDAsMTQgKzEwOTcsMTQgQEAKICBpbmNvcnBvcmF0ZWQgaW50byBvdXIgcmVndWxhciB0ZXN0IHN1aXRlLgogCiAKLTIwLiBOZXh0IFNPTkFNRSBidW1wCisyMS4gTmV4dCBTT05BTUUgYnVtcAogCi0yMC4xIGh0dHAtc3R5bGUgSEVBRCBvdXRwdXQgZm9yIEZUUAorMjEuMSBodHRwLXN0eWxlIEhFQUQgb3V0cHV0IGZvciBGVFAKIAogICN1bmRlZiBDVVJMX0ZUUF9IVFRQU1RZTEVfSEVBRCBpbiBsaWIvZnRwLmMgdG8gcmVtb3ZlIHRoZSBIVFRQLXN0eWxlIGhlYWRlcnMKICBmcm9tIGJlaW5nIG91dHB1dCBpbiBOT0JPRFkgcmVxdWVzdHMgb3ZlciBGVFAKIAotMjAuMiBjb21iaW5lIGVycm9yIGNvZGVzCisyMS4yIGNvbWJpbmUgZXJyb3IgY29kZXMKIAogIENvbWJpbmUgc29tZSBvZiB0aGUgZXJyb3IgY29kZXMgdG8gcmVtb3ZlIGR1cGxpY2F0ZXMuICBUaGUgb3JpZ2luYWwKICBudW1iZXJpbmcgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLCBhbmQgdGhlIG9sZCBpZGVudGlmaWVycyB3b3VsZCBiZQpAQCAtOTMyLDI5ICsxMTI5LDI5IEBACiAKICAgICBDVVJMRV9URlRQX1BFUk0gPT4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQKIAotMjAuMyBleHRlbmQgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04gcHJvdG90eXBlCisyMS4zIGV4dGVuZCBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiBwcm90b3R5cGUKIAogIFRoZSBjdXJyZW50IHByb3RvdHlwZSBvbmx5IHByb3ZpZGVzICdwdXJwb3NlJyB0aGF0IHRlbGxzIHdoYXQgdGhlCiAgY29ubmVjdGlvbi9zb2NrZXQgaXMgZm9yLCBidXQgbm90IGFueSBwcm90b2NvbCBvciBzaW1pbGFyLiBJdCBtYWtlcyBpdCBoYXJkCiAgZm9yIGFwcGxpY2F0aW9ucyB0byBkaWZmZXJlbnRpYXRlIG9uIFRDUCB2cyBVRFAgYW5kIGV2ZW4gSFRUUCB2cyBGVFAgYW5kCiAgc2ltaWxhci4KIAotMjEuIE5leHQgbWFqb3IgcmVsZWFzZQorMjIuIE5leHQgbWFqb3IgcmVsZWFzZQogCi0yMS4xIGNsZWFudXAgcmV0dXJuIGNvZGVzCisyMi4xIGNsZWFudXAgcmV0dXJuIGNvZGVzCiAKICBjdXJsX2Vhc3lfY2xlYW51cCgpIHJldHVybnMgdm9pZCwgYnV0IGN1cmxfbXVsdGlfY2xlYW51cCgpIHJldHVybnMgYQogIENVUkxNY29kZS4gVGhlc2Ugc2hvdWxkIGJlIGNoYW5nZWQgdG8gYmUgdGhlIHNhbWUuCiAKLTIxLjIgcmVtb3ZlIG9ic29sZXRlIGRlZmluZXMKKzIyLjIgcmVtb3ZlIG9ic29sZXRlIGRlZmluZXMKIAogIHJlbW92ZSBvYnNvbGV0ZSBkZWZpbmVzIGZyb20gY3VybC9jdXJsLmgKIAotMjEuMyBzaXplX3QKKzIyLjMgc2l6ZV90CiAKICBtYWtlIHNldmVyYWwgZnVuY3Rpb25zIHVzZSBzaXplX3QgaW5zdGVhZCBvZiBpbnQgaW4gdGhlaXIgQVBJcwogCi0yMS40IHJlbW92ZSBzZXZlcmFsIGZ1bmN0aW9ucworMjIuNCByZW1vdmUgc2V2ZXJhbCBmdW5jdGlvbnMKIAogIHJlbW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwdWJsaWMgQVBJOgogCkBAIC05NzUsMTggKzExNzIsMTggQEAKIAogIGN1cmxfbXVsdGlfc29ja2V0X2FsbAogCi0yMS41IHJlbW92ZSBDVVJMT1BUX0ZBSUxPTkVSUk9SCisyMi41IHJlbW92ZSBDVVJMT1BUX0ZBSUxPTkVSUk9SCiAKICBSZW1vdmUgc3VwcG9ydCBmb3IgQ1VSTE9QVF9GQUlMT05FUlJPUiwgaXQgaGFzIGdvdHRlbiB0b28ga2x1ZGd5IGFuZCB3ZWlyZAogIGludGVybmFsbHkuIExldCB0aGUgYXBwIGp1ZGdlIHN1Y2Nlc3Mgb3Igbm90IGZvciBpdHNlbGYuCiAKLTIxLjYgcmVtb3ZlIENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUKKzIyLjYgcmVtb3ZlIENVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUKIAogIFJlbW92ZSBzdXBwb3J0IGZvciBhIGdsb2JhbCBETlMgY2FjaGUuIEFueXRoaW5nIGdsb2JhbCBpcyBzaWxseSwgYW5kIHdlCiAgYWxyZWFkeSBvZmZlciB0aGUgc2hhcmUgaW50ZXJmYWNlIGZvciB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGJ1dCBkb25lCiAgInJpZ2h0Ii4KIAotMjEuNyByZW1vdmUgcHJvZ3Jlc3MgbWV0ZXIgZnJvbSBsaWJjdXJsCisyMi43IHJlbW92ZSBwcm9ncmVzcyBtZXRlciBmcm9tIGxpYmN1cmwKIAogIFRoZSBpbnRlcm5hbGx5IHByb3ZpZGVkIHByb2dyZXNzIG1ldGVyIG91dHB1dCBkb2Vzbid0IGJlbG9uZyBpbiB0aGUgbGlicmFyeS4KICBCYXNpY2FsbHkgbm8gYXBwbGljYXRpb24gd2FudHMgaXQgKGFwYXJ0IGZyb20gY3VybCkgYnV0IGluc3RlYWQgYXBwbGljYXRpb25zCkBAIC05OTYsNyArMTE5Myw3IEBACiAgdmFyaWFibGUgdHlwZXMgcGFzc2VkIHRvIGl0IGluc3RlYWQgb2YgZG91YmxlcyBzbyB0aGF0IGJpZyBmaWxlcyB3b3JrCiAgY29ycmVjdGx5LgogCi0yMS44IHJlbW92ZSAnY3VybF9odHRwcG9zdCcgZnJvbSBwdWJsaWMKKzIyLjggcmVtb3ZlICdjdXJsX2h0dHBwb3N0JyBmcm9tIHB1YmxpYwogCiAgY3VybF9mb3JtYWRkKCkgd2FzIG1hZGUgdG8gZmlsbCBpbiBhIHB1YmxpYyBzdHJ1Y3QsIGJ1dCB0aGUgZmFjdCB0aGF0IHRoZQogIHN0cnVjdCBpcyBwdWJsaWMgaXMgbmV2ZXIgcmVhbGx5IHVzZWQgYnkgYXBwbGljYXRpb24gZm9yIHRoZWlyIG93biBhZHZhbnRhZ2UKZGlmZiAtLWdpdCBhL2RvY3MvVGhlQXJ0T2ZIdHRwU2NyaXB0aW5nIGIvZG9jcy9UaGVBcnRPZkh0dHBTY3JpcHRpbmcKaW5kZXggMDQ3ZGI4MC4uMGU4MWQxYSAxMDA2NDQKLS0tIGEvZG9jcy9UaGVBcnRPZkh0dHBTY3JpcHRpbmcKKysrIGIvZG9jcy9UaGVBcnRPZkh0dHBTY3JpcHRpbmcKQEAgLTc1NSw0ICs3NTUsNCBAQAogCiAgMTQuMiBTaXRlcwogCi0gaHR0cHM6Ly9jdXJsLmhheHguc2UgaXMgdGhlIGhvbWUgb2YgdGhlIGNVUkwgcHJvamVjdAorIGh0dHBzOi8vY3VybC5oYXh4LnNlIGlzIHRoZSBob21lIG9mIHRoZSBjdXJsIHByb2plY3QKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL01BTlBBR0UubWQgYi9kb2NzL2NtZGxpbmUtb3B0cy9NQU5QQUdFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZjU1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9NQU5QQUdFLm1kCkBAIC0wLDAgKzEsNTMgQEAKKyMgY3VybCBtYW4gcGFnZSBnZW5lcmF0b3IKKworVGhpcyBpcyB0aGUgY3VybCBtYW4gcGFnZSBnZW5lcmF0b3IuIEl0IGdlbmVyYXRlcyBhIHNpbmdsZSBucm9mZiBtYW4gcGFnZQorb3V0cHV0IGZyb20gdGhlIHNldCBvZiBzb3VyY2VzIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgorCitUaGVyZSBpcyBvbmUgc291cmNlIGZpbGUgZm9yIGVhY2ggc3VwcG9ydGVkIGNvbW1hbmQgbGluZSBvcHRpb24uIFRoZSBmb3JtYXQgaXMKK2Rlc2NyaWJlZCBiZWxvdy4KKworIyMgT3B0aW9uIGZpbGVzCisKK0VhY2ggY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBkZXNjcmliZWQgaW4gYSBmaWxlIG5hbWVkIGA8bG9uZyBuYW1lPi5kYCwgd2hlcmUKK29wdGlvbiBuYW1lIGlzIHdyaXR0ZW4gd2l0aG91dCBhbnkgcHJlZml4aW5nIGRhc2hlcy4gTGlrZSB0aGUgZmlsZSBuYW1lIGZvcgordGhlIC12LCAtLXZlcmJvc2Ugb3B0aW9uIGlzIG5hbWVkIGB2ZXJib3NlLmRgLgorCitFYWNoIGZpbGUgaGFzIGEgc2V0IG9mIG1ldGEtZGF0YSBhbmQgYSBib2R5IG9mIHRleHQuCisKKyMjIyBNZXRhLWRhdGEKKworICAgIFNob3J0OiAoc2luZ2xlIGxldHRlciwgd2l0aG91dCBkYXNoKQorICAgIExvbmc6IChsb25nIGZvcm0gbmFtZSwgd2l0aG91dCBkYXNoZXMpCisgICAgQXJnOiAodGhlIGFyZ3VtZW50IHRoZSBvcHRpb24gdGFrZXMpCisgICAgTWFnaWM6IChkZXNjcmlwdGlvbiBvZiAibWFnaWMiIG9wdGlvbnMpCisgICAgVGFnczogKHNwYWNlIHNlcGFyYXRlZCBsaXN0KQorICAgIFByb3RvY29sczogKHNwYWNlIHNlcGFyYXRlZCBsaXN0IGZvciB3aGljaCBwcm90b2NvbHMgdGhpcyBvcHRpb24gd29ya3MpCisgICAgQWRkZWQ6ICh2ZXJzaW9uIG51bWJlciBpbiB3aGljaCB0aGlzIHdhcyBhZGRlZCkKKyAgICBNdXRleGVkOiAoc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9ucyB0aGlzIG92ZXJyaWRlcykKKyAgICBSZXF1aXJlczogKHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRoaXMgb3B0aW9uIHJlcXVpcmVzKQorICAgIFNlZS1hbHNvOiAoc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVsYXRlZCBvcHRpb25zKQorICAgIFJlZGlyZWN0OiAob3B0aW9uIG5hbWUgdG8gdXNlIGluc3RlYWQpCisgICAgSGVscDogKHNob3J0IHRleHQgZm9yIHRoZSAtLWhlbHAgb3V0cHV0IGZvciB0aGlzIG9wdGlvbikKKyAgICAtLS0gKGVuZCBvZiBtZXRhLWRhdGEpCisKKyMjIyBCb2R5CisKK1RoZSBib2R5IG9mIHRoZSBkZXNjcmlwdGlvbi4gT25seSByZWZlciB0byBvcHRpb25zIHdpdGggdGhlaXIgbG9uZyBmb3JtIG9wdGlvbgordmVyc2lvbiwgbGlrZSAtLXZlcmJvc2UuIFRoZSBvdXRwdXQgZ2VuZXJhdG9yIHdpbGwgcmVwbGFjZSBzdWNoIHdpdGggdGhlCitjb3JyZWN0IG1hcmt1cCB0aGF0IHNob3dzIGJvdGggc2hvcnQgYW5kIGxvbmcgdmVyc2lvbi4KKworIyMgSGVhZGVyCisKK2BwYWdlLWhlYWRlcmAgaXMgdGhlIG5yb2ZmIGZvcm1hdHRlZCBmaWxlIHRoYXQgd2lsbCBiZSBvdXRwdXQgYmVmb3JlIHRoZQorZ2VuZXJhdGVkIG9wdGlvbnMgb3V0cHV0IGZvciB0aGUgbWFzdGVyIG1hbiBwYWdlLgorCisjIyBHZW5lcmF0ZQorCitgLi9nZW4ucGwgbWFpbnBhZ2VgCisKK1RoaXMgY29tbWFuZCBvdXRwdXRzIGEgc2luZ2xlIGh1Z2UgbnJvZmYgZmlsZSwgbWVhbnQgdG8gYmVjb21lIGBjdXJsLjFgLiBUaGUKK2Z1bGwgY3VybCBtYW4gcGFnZS4KKworYC4vZ2VuLnBsIGxpc3RoZWxwYAorCitHZW5lcmF0ZXMgYSBmdWxsIGBjdXJsIC0taGVscGAgb3V0cHV0IGZvciBhbGwga25vd24gY29tbWFuZCBsaW5lIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9hbnlhdXRoLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9hbnlhdXRoLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyZDFlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2FueWF1dGguZApAQCAtMCwwICsxLDE3IEBACitMb25nOiBhbnlhdXRoCitIZWxwOiBQaWNrIGFueSBhdXRoZW50aWNhdGlvbiBtZXRob2QKK1Byb3RvY29sczogSFRUUAorU2VlLWFsc286IHByb3h5LWFueWF1dGggYmFzaWMgZGlnZXN0CistLS0KK1RlbGxzIGN1cmwgdG8gZmlndXJlIG91dCBhdXRoZW50aWNhdGlvbiBtZXRob2QgYnkgaXRzZWxmLCBhbmQgdXNlIHRoZSBtb3N0CitzZWN1cmUgb25lIHRoZSByZW1vdGUgc2l0ZSBjbGFpbXMgdG8gc3VwcG9ydC4gVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGRvaW5nIGEKK3JlcXVlc3QgYW5kIGNoZWNraW5nIHRoZSByZXNwb25zZS1oZWFkZXJzLCB0aHVzIHBvc3NpYmx5IGluZHVjaW5nIGFuIGV4dHJhCituZXR3b3JrIHJvdW5kLXRyaXAuIFRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbgorbWV0aG9kLCB3aGljaCB5b3UgY2FuIGRvIHdpdGggLS1iYXNpYywgLS1kaWdlc3QsIC0tbnRsbSwgYW5kIC0tbmVnb3RpYXRlLgorCitVc2luZyAtLWFueWF1dGggaXMgbm90IHJlY29tbWVuZGVkIGlmIHlvdSBkbyB1cGxvYWRzIGZyb20gc3RkaW4sIHNpbmNlIGl0IG1heQorcmVxdWlyZSBkYXRhIHRvIGJlIHNlbnQgdHdpY2UgYW5kIHRoZW4gdGhlIGNsaWVudCBtdXN0IGJlIGFibGUgdG8gcmV3aW5kLiBJZgordGhlIG5lZWQgc2hvdWxkIGFyaXNlIHdoZW4gdXBsb2FkaW5nIGZyb20gc3RkaW4sIHRoZSB1cGxvYWQgb3BlcmF0aW9uIHdpbGwKK2ZhaWwuCisKK1VzZWQgdG9nZXRoZXIgd2l0aCAtLXVzZXIuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9hcHBlbmQuZCBiL2RvY3MvY21kbGluZS1vcHRzL2FwcGVuZC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDFiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9hcHBlbmQuZApAQCAtMCwwICsxLDggQEAKK1Nob3J0OiBhCitMb25nOiBhcHBlbmQKK0hlbHA6IEFwcGVuZCB0byB0YXJnZXQgZmlsZSB3aGVuIHVwbG9hZGluZworUHJvdG9jb2xzOiBGVFAgU0ZUUAorLS0tCitXaGVuIHVzZWQgaW4gYW4gdXBsb2FkLCB0aGlzIG1ha2VzIGN1cmwgYXBwZW5kIHRvIHRoZSB0YXJnZXQgZmlsZSBpbnN0ZWFkIG9mCitvdmVyd3JpdGluZyBpdC4gSWYgdGhlIHJlbW90ZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIE5vdGUKK3RoYXQgdGhpcyBmbGFnIGlzIGlnbm9yZWQgYnkgc29tZSBTRlRQIHNlcnZlcnMgKGluY2x1ZGluZyBPcGVuU1NIKS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Jhc2ljLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9iYXNpYy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZDQyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9iYXNpYy5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IGJhc2ljCitIZWxwOiBVc2UgSFRUUCBCYXNpYyBBdXRoZW50aWNhdGlvbgorU2VlLWFsc286IHByb3h5LWJhc2ljCitQcm90b2NvbHM6IEhUVFAKKy0tLQorVGVsbHMgY3VybCB0byB1c2UgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSByZW1vdGUgaG9zdC4gVGhpcyBpcyB0aGUKK2RlZmF1bHQgYW5kIHRoaXMgb3B0aW9uIGlzIHVzdWFsbHkgcG9pbnRsZXNzLCB1bmxlc3MgeW91IHVzZSBpdCB0byBvdmVycmlkZSBhCitwcmV2aW91c2x5IHNldCBvcHRpb24gdGhhdCBzZXRzIGEgZGlmZmVyZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoc3VjaCBhcworLS1udGxtLCAtLWRpZ2VzdCwgb3IgLS1uZWdvdGlhdGUpLgorCitVc2VkIHRvZ2V0aGVyIHdpdGggLS11c2VyLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvY2FjZXJ0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jYWNlcnQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGUxMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvY2FjZXJ0LmQKQEAgLTAsMCArMSwyOCBAQAorTG9uZzogY2FjZXJ0CitBcmc6IDxDQSBjZXJ0aWZpY2F0ZT4KK0hlbHA6IENBIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QKK1Byb3RvY29sczogVExTCistLS0KK1RlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZmlsZSB0byB2ZXJpZnkgdGhlIHBlZXIuIFRoZSBmaWxlCittYXkgY29udGFpbiBtdWx0aXBsZSBDQSBjZXJ0aWZpY2F0ZXMuIFRoZSBjZXJ0aWZpY2F0ZShzKSBtdXN0IGJlIGluIFBFTQorZm9ybWF0LiBOb3JtYWxseSBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBhIGRlZmF1bHQgZmlsZSBmb3IgdGhpcywgc28gdGhpcyBvcHRpb24KK2lzIHR5cGljYWxseSB1c2VkIHRvIGFsdGVyIHRoYXQgZGVmYXVsdCBmaWxlLgorCitjdXJsIHJlY29nbml6ZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkICdDVVJMX0NBX0JVTkRMRScgaWYgaXQgaXMKK3NldCwgYW5kIHVzZXMgdGhlIGdpdmVuIHBhdGggYXMgYSBwYXRoIHRvIGEgQ0EgY2VydCBidW5kbGUuIFRoaXMgb3B0aW9uCitvdmVycmlkZXMgdGhhdCB2YXJpYWJsZS4KKworVGhlIHdpbmRvd3MgdmVyc2lvbiBvZiBjdXJsIHdpbGwgYXV0b21hdGljYWxseSBsb29rIGZvciBhIENBIGNlcnRzIGZpbGUgbmFtZWQKK1wnY3VybC1jYS1idW5kbGUuY3J0XCcsIGVpdGhlciBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgY3VybC5leGUsIG9yIGluIHRoZQorQ3VycmVudCBXb3JraW5nIERpcmVjdG9yeSwgb3IgaW4gYW55IGZvbGRlciBhbG9uZyB5b3VyIFBBVEguCisKK0lmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCB0aGUgTlNTIFNTTCBsaWJyYXJ5LCB0aGUgTlNTIFBFTSBQS0NTIzExIG1vZHVsZQorKGxpYm5zc3BlbS5zbykgbmVlZHMgdG8gYmUgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB0byB3b3JrIHByb3Blcmx5LgorCisoaU9TIGFuZCBtYWNPUyBvbmx5KSBJZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgU2VjdXJlIFRyYW5zcG9ydCwgdGhlbiB0aGlzCitvcHRpb24gaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgU1NMIGVuZ2luZXMsIGJ1dCBpdAorc2hvdWxkIG5vdCBiZSBzZXQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCwgdGhlbiBjdXJsIHdpbGwgdXNlIHRoZQorY2VydGlmaWNhdGVzIGluIHRoZSBzeXN0ZW0gYW5kIHVzZXIgS2V5Y2hhaW4gdG8gdmVyaWZ5IHRoZSBwZWVyLCB3aGljaCBpcyB0aGUKK3ByZWZlcnJlZCBtZXRob2Qgb2YgdmVyaWZ5aW5nIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUgY2hhaW4uCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2NhcGF0aC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvY2FwYXRoLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2M2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NhcGF0aC5kCkBAIC0wLDAgKzEsMTUgQEAKK0xvbmc6IGNhcGF0aAorQXJnOiA8ZGlyPgorSGVscDogQ0EgZGlyZWN0b3J5IHRvIHZlcmlmeSBwZWVyIGFnYWluc3QKK1Byb3RvY29sczogVExTCistLS0KK1RlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZGlyZWN0b3J5IHRvIHZlcmlmeSB0aGUKK3BlZXIuIE11bHRpcGxlIHBhdGhzIGNhbiBiZSBwcm92aWRlZCBieSBzZXBhcmF0aW5nIHRoZW0gd2l0aCAiOiIgKGUuZy4KK1wmInBhdGgxOnBhdGgyOnBhdGgzIikuIFRoZSBjZXJ0aWZpY2F0ZXMgbXVzdCBiZSBpbiBQRU0gZm9ybWF0LCBhbmQgaWYgY3VybCBpcworYnVpbHQgYWdhaW5zdCBPcGVuU1NMLCB0aGUgZGlyZWN0b3J5IG11c3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCB1c2luZyB0aGUKK2NfcmVoYXNoIHV0aWxpdHkgc3VwcGxpZWQgd2l0aCBPcGVuU1NMLiBVc2luZyAtLWNhcGF0aCBjYW4gYWxsb3cKK09wZW5TU0wtcG93ZXJlZCBjdXJsIHRvIG1ha2UgU1NMLWNvbm5lY3Rpb25zIG11Y2ggbW9yZSBlZmZpY2llbnRseSB0aGFuIHVzaW5nCistLWNhY2VydCBpZiB0aGUgLS1jYWNlcnQgZmlsZSBjb250YWlucyBtYW55IENBIGNlcnRpZmljYXRlcy4KKworSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZGVmYXVsdCBjYXBhdGggdmFsdWUgd2lsbCBiZSBpZ25vcmVkLCBhbmQgaWYgaXQgaXMKK3VzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2NlcnQtc3RhdHVzLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jZXJ0LXN0YXR1cy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYWFhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9jZXJ0LXN0YXR1cy5kCkBAIC0wLDAgKzEsMTMgQEAKK0xvbmc6IGNlcnQtc3RhdHVzCitQcm90b2NvbHM6IFRMUworQWRkZWQ6IDcuNDEuMAorSGVscDogVmVyaWZ5IHRoZSBzdGF0dXMgb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorLS0tCitUZWxscyBjdXJsIHRvIHZlcmlmeSB0aGUgc3RhdHVzIG9mIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgYnkgdXNpbmcgdGhlCitDZXJ0aWZpY2F0ZSBTdGF0dXMgUmVxdWVzdCAoYWthLiBPQ1NQIHN0YXBsaW5nKSBUTFMgZXh0ZW5zaW9uLgorCitJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCB0aGUgc2VydmVyIHNlbmRzIGFuIGludmFsaWQgKGUuZy4gZXhwaXJlZCkKK3Jlc3BvbnNlLCBpZiB0aGUgcmVzcG9uc2Ugc3VnZ2VzdHMgdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGhhcyBiZWVuIHJldm9rZWQsCitvciBubyByZXNwb25zZSBhdCBhbGwgaXMgcmVjZWl2ZWQsIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMuCisKK1RoaXMgaXMgY3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgaW4gdGhlIE9wZW5TU0wsIEdudVRMUyBhbmQgTlNTIGJhY2tlbmRzLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvY2VydC10eXBlLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jZXJ0LXR5cGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRiZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvY2VydC10eXBlLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogY2VydC10eXBlCitQcm90b2NvbHM6IFRMUworQXJnOiA8dHlwZT4KK0hlbHA6IENlcnRpZmljYXRlIGZpbGUgdHlwZSAoREVSL1BFTS9FTkcpCitTZWUtYWxzbzogY2VydCBrZXkga2V5LXR5cGUKKy0tLQorVGVsbHMgY3VybCB3aGF0IGNlcnRpZmljYXRlIHR5cGUgdGhlIHByb3ZpZGVkIGNlcnRpZmljYXRlIGlzIGluLiBQRU0sIERFUiBhbmQKK0VORyBhcmUgcmVjb2duaXplZCB0eXBlcy4gIElmIG5vdCBzcGVjaWZpZWQsIFBFTSBpcyBhc3N1bWVkLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jZXJ0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jZXJ0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkNWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NlcnQuZApAQCAtMCwwICsxLDMyIEBACitTaG9ydDogRQorTG9uZzogY2VydAorQXJnOiA8Y2VydGlmaWNhdGVbOnBhc3N3b3JkXT4KK0hlbHA6IENsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIGFuZCBwYXNzd29yZAorUHJvdG9jb2xzOiBUTFMKK1NlZS1hbHNvOiBjZXJ0LXR5cGUga2V5IGtleS10eXBlCistLS0KK1RlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgd2hlbiBnZXR0aW5nIGEgZmlsZQord2l0aCBIVFRQUywgRlRQUyBvciBhbm90aGVyIFNTTC1iYXNlZCBwcm90b2NvbC4gVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgaW4KK1BLQ1MjMTIgZm9ybWF0IGlmIHVzaW5nIFNlY3VyZSBUcmFuc3BvcnQsIG9yIFBFTSBmb3JtYXQgaWYgdXNpbmcgYW55IG90aGVyCitlbmdpbmUuICBJZiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaXNuJ3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHF1ZXJpZWQgZm9yIG9uCit0aGUgdGVybWluYWwuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBhc3N1bWVzIGEgXCYiY2VydGlmaWNhdGUiIGZpbGUgdGhhdCBpcyB0aGUKK3ByaXZhdGUga2V5IGFuZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGNvbmNhdGVuYXRlZCEgU2VlIC0tY2VydCBhbmQgLS1rZXkgdG8KK3NwZWNpZnkgdGhlbSBpbmRlcGVuZGVudGx5LgorCitJZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgdGhlIE5TUyBTU0wgbGlicmFyeSB0aGVuIHRoaXMgb3B0aW9uIGNhbiB0ZWxsCitjdXJsIHRoZSBuaWNrbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUgdG8gdXNlIHdpdGhpbiB0aGUgTlNTIGRhdGFiYXNlIGRlZmluZWQKK2J5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTU0xfRElSIChvciBieSBkZWZhdWx0IC9ldGMvcGtpL25zc2RiKS4gSWYgdGhlCitOU1MgUEVNIFBLQ1MjMTEgbW9kdWxlIChsaWJuc3NwZW0uc28pIGlzIGF2YWlsYWJsZSB0aGVuIFBFTSBmaWxlcyBtYXkgYmUKK2xvYWRlZC4gSWYgeW91IHdhbnQgdG8gdXNlIGEgZmlsZSBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcGxlYXNlIHByZWNlZGUKK2l0IHdpdGggIi4vIiBwcmVmaXgsIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgbmlja25hbWUuICBJZiB0aGUKK25pY2tuYW1lIGNvbnRhaW5zICI6IiwgaXQgbmVlZHMgdG8gYmUgcHJlY2VkZWQgYnkgIlxcIiBzbyB0aGF0IGl0IGlzIG5vdAorcmVjb2duaXplZCBhcyBwYXNzd29yZCBkZWxpbWl0ZXIuICBJZiB0aGUgbmlja25hbWUgY29udGFpbnMgIlxcIiwgaXQgbmVlZHMgdG8KK2JlIGVzY2FwZWQgYXMgIlxcXFwiIHNvIHRoYXQgaXQgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gZXNjYXBlIGNoYXJhY3Rlci4KKworKGlPUyBhbmQgbWFjT1Mgb25seSkgSWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IFNlY3VyZSBUcmFuc3BvcnQsIHRoZW4gdGhlCitjZXJ0aWZpY2F0ZSBzdHJpbmcgY2FuIGVpdGhlciBiZSB0aGUgbmFtZSBvZiBhIGNlcnRpZmljYXRlL3ByaXZhdGUga2V5IGluIHRoZQorc3lzdGVtIG9yIHVzZXIga2V5Y2hhaW4sIG9yIHRoZSBwYXRoIHRvIGEgUEtDUyMxMi1lbmNvZGVkIGNlcnRpZmljYXRlIGFuZAorcHJpdmF0ZSBrZXkuIElmIHlvdSB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZQorcHJlY2VkZSBpdCB3aXRoICIuLyIgcHJlZml4LCBpbiBvcmRlciB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIG5pY2tuYW1lLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jaXBoZXJzLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jaXBoZXJzLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlNWFjOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NpcGhlcnMuZApAQCAtMCwwICsxLDE2IEBACitMb25nOiBjaXBoZXJzCitBcmc6IDxsaXN0IG9mIGNpcGhlcnM+CitoZWxwOiBTU0wgY2lwaGVycyB0byB1c2UKK1Byb3RvY29sczogVExTCistLS0KK1NwZWNpZmllcyB3aGljaCBjaXBoZXJzIHRvIHVzZSBpbiB0aGUgY29ubmVjdGlvbi4gVGhlIGxpc3Qgb2YgY2lwaGVycyBtdXN0CitzcGVjaWZ5IHZhbGlkIGNpcGhlcnMuIFJlYWQgdXAgb24gU1NMIGNpcGhlciBsaXN0IGRldGFpbHMgb24gdGhpcyBVUkw6CisKKyBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sCisKK05TUyBjaXBoZXJzIGFyZSBkb25lIGRpZmZlcmVudGx5IHRoYW4gT3BlblNTTCBhbmQgR251VExTLiBUaGUgZnVsbCBsaXN0IG9mIE5TUworY2lwaGVycyBpcyBpbiB0aGUgTlNTQ2lwaGVyU3VpdGUgZW50cnkgYXQgdGhpcyBVUkw6CisKKyBodHRwczovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvbW9kX25zcy5naXQvcGxhaW4vZG9jcy9tb2RfbnNzLmh0bWwjRGlyZWN0aXZlcworCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jb21wcmVzc2VkLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jb21wcmVzc2VkLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxMzBjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NvbXByZXNzZWQuZApAQCAtMCwwICsxLDcgQEAKK0xvbmc6IGNvbXByZXNzZWQKK0hlbHA6IFJlcXVlc3QgY29tcHJlc3NlZCByZXNwb25zZQorUHJvdG9jb2xzOiBIVFRQCistLS0KK1JlcXVlc3QgYSBjb21wcmVzc2VkIHJlc3BvbnNlIHVzaW5nIG9uZSBvZiB0aGUgYWxnb3JpdGhtcyBjdXJsIHN1cHBvcnRzLCBhbmQKK3NhdmUgdGhlIHVuY29tcHJlc3NlZCBkb2N1bWVudC4gIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgYW5kIHRoZSBzZXJ2ZXIgc2VuZHMKK2FuIHVuc3VwcG9ydGVkIGVuY29kaW5nLCBjdXJsIHdpbGwgcmVwb3J0IGFuIGVycm9yLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvY29uZmlnLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jb25maWcuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTMyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29uZmlnLmQKQEAgLTAsMCArMSw2MCBAQAorTG9uZzogY29uZmlnCitBcmc6IDxmaWxlPgorSGVscDogUmVhZCBjb25maWcgZnJvbSBhIGZpbGUKK1Nob3J0OiBLCistLS0KK1NwZWNpZnkgd2hpY2ggY29uZmlnIGZpbGUgdG8gcmVhZCBjdXJsIGFyZ3VtZW50cyBmcm9tLiBUaGUgY29uZmlnIGZpbGUgaXMgYQordGV4dCBmaWxlIGluIHdoaWNoIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgY2FuIGJlIHdyaXR0ZW4gd2hpY2ggdGhlbiB3aWxsIGJlCit1c2VkIGFzIGlmIHRoZXkgd2VyZSB3cml0dGVuIG9uIHRoZSBhY3R1YWwgY29tbWFuZCBsaW5lLgorCitPcHRpb25zIGFuZCB0aGVpciBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBzYW1lIGNvbmZpZyBmaWxlIGxpbmUsCitzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSwgY29sb24sIG9yIHRoZSBlcXVhbHMgc2lnbi4gTG9uZyBvcHRpb24gbmFtZXMgY2FuCitvcHRpb25hbGx5IGJlIGdpdmVuIGluIHRoZSBjb25maWcgZmlsZSB3aXRob3V0IHRoZSBpbml0aWFsIGRvdWJsZSBkYXNoZXMgYW5kCitpZiBzbywgdGhlIGNvbG9uIG9yIGVxdWFscyBjaGFyYWN0ZXJzIGNhbiBiZSB1c2VkIGFzIHNlcGFyYXRvcnMuIElmIHRoZSBvcHRpb24KK2lzIHNwZWNpZmllZCB3aXRoIG9uZSBvciB0d28gZGFzaGVzLCB0aGVyZSBjYW4gYmUgbm8gY29sb24gb3IgZXF1YWxzIGNoYXJhY3RlcgorYmV0d2VlbiB0aGUgb3B0aW9uIGFuZCBpdHMgcGFyYW1ldGVyLgorCitJZiB0aGUgcGFyYW1ldGVyIGlzIHRvIGNvbnRhaW4gd2hpdGVzcGFjZSwgdGhlIHBhcmFtZXRlciBtdXN0IGJlIGVuY2xvc2VkCit3aXRoaW4gcXVvdGVzLiBXaXRoaW4gZG91YmxlIHF1b3RlcywgdGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIGFyZQorYXZhaWxhYmxlOiBcXFxcLCBcXCIsIFxcdCwgXFxuLCBcXHIgYW5kIFxcdi4gQSBiYWNrc2xhc2ggcHJlY2VkaW5nIGFueSBvdGhlcgorbGV0dGVyIGlzIGlnbm9yZWQuIElmIHRoZSBmaXJzdCBjb2x1bW4gb2YgYSBjb25maWcgbGluZSBpcyBhICcjJyBjaGFyYWN0ZXIsCit0aGUgcmVzdCBvZiB0aGUgbGluZSB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBjb21tZW50LiBPbmx5IHdyaXRlIG9uZSBvcHRpb24gcGVyCitwaHlzaWNhbCBsaW5lIGluIHRoZSBjb25maWcgZmlsZS4KKworU3BlY2lmeSB0aGUgZmlsZW5hbWUgdG8gLS1jb25maWcgYXMgJy0nIHRvIG1ha2UgY3VybCByZWFkIHRoZSBmaWxlIGZyb20gc3RkaW4uCisKK05vdGUgdGhhdCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYSBVUkwgaW4gdGhlIGNvbmZpZyBmaWxlLCB5b3UgbmVlZCB0byBzcGVjaWZ5CitpdCB1c2luZyB0aGUgLS11cmwgb3B0aW9uLCBhbmQgbm90IGJ5IHNpbXBseSB3cml0aW5nIHRoZSBVUkwgb24gaXRzIG93bgorbGluZS4gU28sIGl0IGNvdWxkIGxvb2sgc2ltaWxhciB0byB0aGlzOgorCit1cmwgPSAiaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy8iCisKK1doZW4gY3VybCBpcyBpbnZva2VkLCBpdCBhbHdheXMgKHVubGVzcyAtLWRpc2FibGUgaXMgdXNlZCkgY2hlY2tzIGZvciBhCitkZWZhdWx0IGNvbmZpZyBmaWxlIGFuZCB1c2VzIGl0IGlmIGZvdW5kLiBUaGUgZGVmYXVsdCBjb25maWcgZmlsZSBpcyBjaGVja2VkCitmb3IgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXMgaW4gdGhpcyBvcmRlcjoKKworMSkgY3VybCB0cmllcyB0byBmaW5kIHRoZSAiaG9tZSBkaXIiOiBJdCBmaXJzdCBjaGVja3MgZm9yIHRoZSBDVVJMX0hPTUUgYW5kCit0aGVuIHRoZSBIT01FIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRmFpbGluZyB0aGF0LCBpdCB1c2VzIGdldHB3dWlkKCkgb24KK1VuaXgtbGlrZSBzeXN0ZW1zICh3aGljaCByZXR1cm5zIHRoZSBob21lIGRpciBnaXZlbiB0aGUgY3VycmVudCB1c2VyIGluIHlvdXIKK3N5c3RlbSkuIE9uIFdpbmRvd3MsIGl0IHRoZW4gY2hlY2tzIGZvciB0aGUgQVBQREFUQSB2YXJpYWJsZSwgb3IgYXMgYSBsYXN0CityZXNvcnQgdGhlICclVVNFUlBST0ZJTEUlXFxBcHBsaWNhdGlvbiBEYXRhJy4KKworMikgT24gd2luZG93cywgaWYgdGhlcmUgaXMgbm8gX2N1cmxyYyBmaWxlIGluIHRoZSBob21lIGRpciwgaXQgY2hlY2tzIGZvciBvbmUKK2luIHRoZSBzYW1lIGRpciB0aGUgY3VybCBleGVjdXRhYmxlIGlzIHBsYWNlZC4gT24gVW5peC1saWtlIHN5c3RlbXMsIGl0IHdpbGwKK3NpbXBseSB0cnkgdG8gbG9hZCAuY3VybHJjIGZyb20gdGhlIGRldGVybWluZWQgaG9tZSBkaXIuCisKKy5uZgorIyAtLS0gRXhhbXBsZSBmaWxlIC0tLQorIyB0aGlzIGlzIGEgY29tbWVudAordXJsID0gImV4YW1wbGUuY29tIgorb3V0cHV0ID0gImN1cmxoZXJlLmh0bWwiCit1c2VyLWFnZW50ID0gInN1cGVyYWdlbnQvMS4wIgorCisjIGFuZCBmZXRjaCBhbm90aGVyIFVSTCB0b28KK3VybCA9ICJleGFtcGxlLmNvbS9kb2NzL21hbnBhZ2UuaHRtbCIKKy1PCityZWZlcmVyID0gImh0dHA6Ly9ub3doZXJlYXRhbGwuZXhhbXBsZS5jb20vIgorIyAtLS0gRW5kIG9mIGV4YW1wbGUgZmlsZSAtLS0KKy5maQorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBsb2FkIG11bHRpcGxlIGNvbmZpZyBmaWxlcy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Nvbm5lY3QtdGltZW91dC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29ubmVjdC10aW1lb3V0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMmQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Nvbm5lY3QtdGltZW91dC5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IGNvbm5lY3QtdGltZW91dAorQXJnOiA8c2Vjb25kcz4KK0hlbHA6IE1heGltdW0gdGltZSBhbGxvd2VkIGZvciBjb25uZWN0aW9uCitTZWUtYWxzbzogbWF4LXRpbWUKKy0tLQorTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgY3VybCdzIGNvbm5lY3Rpb24gdG8gdGFrZS4gIFRoaXMgb25seQorbGltaXRzIHRoZSBjb25uZWN0aW9uIHBoYXNlLCBzbyBpZiBjdXJsIGNvbm5lY3RzIHdpdGhpbiB0aGUgZ2l2ZW4gcGVyaW9kIGl0Cit3aWxsIGNvbnRpbnVlIC0gaWYgbm90IGl0IHdpbGwgZXhpdC4gIFNpbmNlIHZlcnNpb24gNy4zMi4wLCB0aGlzIG9wdGlvbgorYWNjZXB0cyBkZWNpbWFsIHZhbHVlcy4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvY29ubmVjdC10by5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29ubmVjdC10by5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTA1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9jb25uZWN0LXRvLmQKQEAgLTAsMCArMSwxOCBAQAorTG9uZzogY29ubmVjdC10bworQXJnOiA8SE9TVDE6UE9SVDE6SE9TVDI6UE9SVDI+CitIZWxwOiBDb25uZWN0IHRvIGhvc3QKK0FkZGVkOiA3LjQ5LjAKK1NlZS1hbHNvOiByZXNvbHZlIGhlYWRlcgorLS0tCisKK0ZvciBhIHJlcXVlc3QgdG8gdGhlIGdpdmVuIEhPU1Q6UE9SVCBwYWlyLCBjb25uZWN0IHRvCitDT05ORUNULVRPLUhPU1Q6Q09OTkVDVC1UTy1QT1JUIGluc3RlYWQuICBUaGlzIG9wdGlvbiBpcyBzdWl0YWJsZSB0byBkaXJlY3QKK3JlcXVlc3RzIGF0IGEgc3BlY2lmaWMgc2VydmVyLCBlLmcuIGF0IGEgc3BlY2lmaWMgY2x1c3RlciBub2RlIGluIGEgY2x1c3RlciBvZgorc2VydmVycy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCB0byBlc3RhYmxpc2ggdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gSXQKK2RvZXMgTk9UIGFmZmVjdCB0aGUgaG9zdG5hbWUvcG9ydCB0aGF0IGlzIHVzZWQgZm9yIFRMUy9TU0wgKGUuZy4gU05JLAorY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uKSBvciBmb3IgdGhlIGFwcGxpY2F0aW9uIHByb3RvY29scy4gICJob3N0IiBhbmQgInBvcnQiCittYXkgYmUgdGhlIGVtcHR5IHN0cmluZywgbWVhbmluZyAiYW55IGhvc3QvcG9ydCIuICAiY29ubmVjdC10by1ob3N0IiBhbmQKKyJjb25uZWN0LXRvLXBvcnQiIG1heSBhbHNvIGJlIHRoZSBlbXB0eSBzdHJpbmcsIG1lYW5pbmcgInVzZSB0aGUgcmVxdWVzdCdzCitvcmlnaW5hbCBob3N0L3BvcnQiLgorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtYW55IHRpbWVzIHRvIGFkZCBtYW55IGNvbm5lY3QgcnVsZXMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jb250aW51ZS1hdC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29udGludWUtYXQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNmNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29udGludWUtYXQuZApAQCAtMCwwICsxLDE1IEBACitTaG9ydDogQworTG9uZzogY29udGludWUtYXQKK0FyZzogPG9mZnNldD4KK0hlbHA6IFJlc3VtZWQgdHJhbnNmZXIgb2Zmc2V0CitTZWUtYWxzbzogcmFuZ2UKKy0tLQorQ29udGludWUvUmVzdW1lIGEgcHJldmlvdXMgZmlsZSB0cmFuc2ZlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LiBUaGUgZ2l2ZW4gb2Zmc2V0CitpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBza2lwcGVkLCBjb3VudGluZyBmcm9tIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBzb3VyY2UgZmlsZSBiZWZvcmUgaXQgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiAgSWYgdXNlZCB3aXRoCit1cGxvYWRzLCB0aGUgRlRQIHNlcnZlciBjb21tYW5kIFNJWkUgd2lsbCBub3QgYmUgdXNlZCBieSBjdXJsLgorCitVc2UgIi1DIC0iIHRvIHRlbGwgY3VybCB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoZXJlL2hvdyB0byByZXN1bWUgdGhlCit0cmFuc2Zlci4gSXQgdGhlbiB1c2VzIHRoZSBnaXZlbiBvdXRwdXQvaW5wdXQgZmlsZXMgdG8gZmlndXJlIHRoYXQgb3V0LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jb29raWUtamFyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jb29raWUtamFyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3OTc3NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Nvb2tpZS1qYXIuZApAQCAtMCwwICsxLDI0IEBACitTaG9ydDogYworTG9uZzogY29va2llLWphcgorQXJnOiA8ZmlsZW5hbWU+CitQcm90b2NvbHM6IEhUVFAKK0hlbHA6IFdyaXRlIGNvb2tpZXMgdG8gPGZpbGVuYW1lPiBhZnRlciBvcGVyYXRpb24KKy0tLQorU3BlY2lmeSB0byB3aGljaCBmaWxlIHlvdSB3YW50IGN1cmwgdG8gd3JpdGUgYWxsIGNvb2tpZXMgYWZ0ZXIgYSBjb21wbGV0ZWQKK29wZXJhdGlvbi4gQ3VybCB3cml0ZXMgYWxsIGNvb2tpZXMgZnJvbSBpdHMgaW4tbWVtb3J5IGNvb2tpZSBzdG9yYWdlIHRvIHRoZQorZ2l2ZW4gZmlsZSBhdCB0aGUgZW5kIG9mIG9wZXJhdGlvbnMuIElmIG5vIGNvb2tpZXMgYXJlIGtub3duLCBubyBkYXRhIHdpbGwgYmUKK3dyaXR0ZW4uIFRoZSBmaWxlIHdpbGwgYmUgd3JpdHRlbiB1c2luZyB0aGUgTmV0c2NhcGUgY29va2llIGZpbGUgZm9ybWF0LiBJZgoreW91IHNldCB0aGUgZmlsZSBuYW1lIHRvIGEgc2luZ2xlIGRhc2gsICItIiwgdGhlIGNvb2tpZXMgd2lsbCBiZSB3cml0dGVuIHRvCitzdGRvdXQuCisKK1RoaXMgY29tbWFuZCBsaW5lIG9wdGlvbiB3aWxsIGFjdGl2YXRlIHRoZSBjb29raWUgZW5naW5lIHRoYXQgbWFrZXMgY3VybAorcmVjb3JkIGFuZCB1c2UgY29va2llcy4gQW5vdGhlciB3YXkgdG8gYWN0aXZhdGUgaXQgaXMgdG8gdXNlIHRoZSAtLWNvb2tpZQorb3B0aW9uLgorCitJZiB0aGUgY29va2llIGphciBjYW4ndCBiZSBjcmVhdGVkIG9yIHdyaXR0ZW4gdG8sIHRoZSB3aG9sZSBjdXJsIG9wZXJhdGlvbgord29uJ3QgZmFpbCBvciBldmVuIHJlcG9ydCBhbiBlcnJvciBjbGVhcmx5LiBVc2luZyAtLXZlcmJvc2Ugd2lsbCBnZXQgYSB3YXJuaW5nCitkaXNwbGF5ZWQsIGJ1dCB0aGF0IGlzIHRoZSBvbmx5IHZpc2libGUgZmVlZGJhY2sgeW91IGdldCBhYm91dCB0aGlzIHBvc3NpYmx5CitsZXRoYWwgc2l0dWF0aW9uLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IHNwZWNpZmllZCBmaWxlIG5hbWUgd2lsbCBiZQordXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Nvb2tpZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvY29va2llLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzYWRkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Nvb2tpZS5kCkBAIC0wLDAgKzEsMzYgQEAKK1Nob3J0OiBiCitMb25nOiBjb29raWUKK0FyZzogPGRhdGE+CitQcm90b2NvbHM6IEhUVFAKK0hlbHA6IFNlbmQgY29va2llcyBmcm9tIHN0cmluZy9maWxlCistLS0KK1Bhc3MgdGhlIGRhdGEgdG8gdGhlIEhUVFAgc2VydmVyIGluIHRoZSBDb29raWUgaGVhZGVyLiBJdCBpcyBzdXBwb3NlZGx5Cit0aGUgZGF0YSBwcmV2aW91c2x5IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpbiBhICJTZXQtQ29va2llOiIgbGluZS4gIFRoZQorZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCAiTkFNRTE9VkFMVUUxOyBOQU1FMj1WQUxVRTIiLgorCitJZiBubyAnPScgc3ltYm9sIGlzIHVzZWQgaW4gdGhlIGFyZ3VtZW50LCBpdCBpcyBpbnN0ZWFkIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZQordG8gcmVhZCBwcmV2aW91c2x5IHN0b3JlZCBjb29raWUgZnJvbS4gVGhpcyBvcHRpb24gYWxzbyBhY3RpdmF0ZXMgdGhlIGNvb2tpZQorZW5naW5lIHdoaWNoIHdpbGwgbWFrZSBjdXJsIHJlY29yZCBpbmNvbWluZyBjb29raWVzLCB3aGljaCBtYXkgYmUgaGFuZHkgaWYKK3lvdSdyZSB1c2luZyB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIC0tbG9jYXRpb24gb3B0aW9uIG9yIGRvIG11bHRpcGxlIFVSTAordHJhbnNmZXJzIG9uIHRoZSBzYW1lIGludm9rZS4KKworVGhlIGZpbGUgZm9ybWF0IG9mIHRoZSBmaWxlIHRvIHJlYWQgY29va2llcyBmcm9tIHNob3VsZCBiZSBwbGFpbiBIVFRQIGhlYWRlcnMKKyhTZXQtQ29va2llIHN0eWxlKSBvciB0aGUgTmV0c2NhcGUvTW96aWxsYSBjb29raWUgZmlsZSBmb3JtYXQuCisKK1RoZSBmaWxlIHNwZWNpZmllZCB3aXRoIC0tY29va2llIGlzIG9ubHkgdXNlZCBhcyBpbnB1dC4gTm8gY29va2llcyB3aWxsIGJlCit3cml0dGVuIHRvIHRoZSBmaWxlLiBUbyBzdG9yZSBjb29raWVzLCB1c2UgdGhlIC0tY29va2llLWphciBvcHRpb24uCisKK0V4ZXJjaXNlIGNhdXRpb24gaWYgeW91IGFyZSB1c2luZyB0aGlzIG9wdGlvbiBhbmQgbXVsdGlwbGUgdHJhbnNmZXJzIG1heQorb2NjdXIuICBJZiB5b3UgdXNlIHRoZSBOQU1FMT1WQUxVRTE7IGZvcm1hdCwgb3IgaW4gYSBmaWxlIHVzZSB0aGUgU2V0LUNvb2tpZQorZm9ybWF0IGFuZCBkb24ndCBzcGVjaWZ5IGEgZG9tYWluLCB0aGVuIHRoZSBjb29raWUgaXMgc2VudCBmb3IgYW55IGRvbWFpbgorKGV2ZW4gYWZ0ZXIgcmVkaXJlY3RzIGFyZSBmb2xsb3dlZCkgYW5kIGNhbm5vdCBiZSBtb2RpZmllZCBieSBhIHNlcnZlci1zZXQKK2Nvb2tpZS4gSWYgdGhlIGNvb2tpZSBlbmdpbmUgaXMgZW5hYmxlZCBhbmQgYSBzZXJ2ZXIgc2V0cyBhIGNvb2tpZSBvZiB0aGUgc2FtZQorbmFtZSB0aGVuIGJvdGggd2lsbCBiZSBzZW50IG9uIGEgZnV0dXJlIHRyYW5zZmVyIHRvIHRoYXQgc2VydmVyLCBsaWtlbHkgbm90Cit3aGF0IHlvdSBpbnRlbmRlZC4gIFRvIGFkZHJlc3MgdGhlc2UgaXNzdWVzIHNldCBhIGRvbWFpbiBpbiBTZXQtQ29va2llIChkb2luZwordGhhdCB3aWxsIGluY2x1ZGUgc3ViIGRvbWFpbnMpIG9yIHVzZSB0aGUgTmV0c2NhcGUgZm9ybWF0LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisKK1VzZXJzIHZlcnkgb2Z0ZW4gd2FudCB0byBib3RoIHJlYWQgY29va2llcyBmcm9tIGEgZmlsZSBhbmQgd3JpdGUgdXBkYXRlZAorY29va2llcyBiYWNrIHRvIGEgZmlsZSwgc28gdXNpbmcgYm90aCAtLWNvb2tpZSBhbmQgLS1jb29raWUtamFyIGluIHRoZSBzYW1lCitjb21tYW5kIGxpbmUgaXMgY29tbW9uLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvY3JlYXRlLWRpcnMuZCBiL2RvY3MvY21kbGluZS1vcHRzL2NyZWF0ZS1kaXJzLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMjJlNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NyZWF0ZS1kaXJzLmQKQEAgLTAsMCArMSw5IEBACitMb25nOiBjcmVhdGUtZGlycworSGVscDogQ3JlYXRlIG5lY2Vzc2FyeSBsb2NhbCBkaXJlY3RvcnkgaGllcmFyY2h5CistLS0KK1doZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAtLW91dHB1dCBvcHRpb24sIGN1cmwgd2lsbCBjcmVhdGUgdGhlCituZWNlc3NhcnkgbG9jYWwgZGlyZWN0b3J5IGhpZXJhcmNoeSBhcyBuZWVkZWQuIFRoaXMgb3B0aW9uIGNyZWF0ZXMgdGhlIGRpcnMKK21lbnRpb25lZCB3aXRoIHRoZSAtLW91dHB1dCBvcHRpb24sIG5vdGhpbmcgZWxzZS4gSWYgdGhlIC0tb3V0cHV0IGZpbGUgbmFtZQordXNlcyBubyBkaXIgb3IgaWYgdGhlIGRpcnMgaXQgbWVudGlvbnMgYWxyZWFkeSBleGlzdCwgbm8gZGlyIHdpbGwgYmUgY3JlYXRlZC4KKworVG8gY3JlYXRlIHJlbW90ZSBkaXJlY3RvcmllcyB3aGVuIHVzaW5nIEZUUCBvciBTRlRQLCB0cnkgLS1mdHAtY3JlYXRlLWRpcnMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9jcmxmLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9jcmxmLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2OTRiNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2NybGYuZApAQCAtMCwwICsxLDcgQEAKK0xvbmc6IGNybGYKK0hlbHA6IENvbnZlcnQgTEYgdG8gQ1JMRiBpbiB1cGxvYWQKK1Byb3RvY29sczogRlRQIFNNVFAKKy0tLQorQ29udmVydCBMRiB0byBDUkxGIGluIHVwbG9hZC4gVXNlZnVsIGZvciBNVlMgKE9TLzM5MCkuCisKKyhTTVRQIGFkZGVkIGluIDcuNDAuMCkKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2NybGZpbGUuZCBiL2RvY3MvY21kbGluZS1vcHRzL2NybGZpbGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTIxNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvY3JsZmlsZS5kCkBAIC0wLDAgKzEsMTAgQEAKK0xvbmc6IGNyZmlsZQorQXJnOiA8ZmlsZT4KK1Byb3RvY29sczogVExTCitIZWxwOiBHZXQgYSBDUkwgbGlzdCBpbiBQRU0gZm9ybWF0IGZyb20gdGhlIGdpdmVuIGZpbGUKK0FkZGVkOiA3LjE5LjcKKy0tLQorUHJvdmlkZSBhIGZpbGUgdXNpbmcgUEVNIGZvcm1hdCB3aXRoIGEgQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBMaXN0IHRoYXQgbWF5CitzcGVjaWZ5IHBlZXIgY2VydGlmaWNhdGVzIHRoYXQgYXJlIHRvIGJlIGNvbnNpZGVyZWQgcmV2b2tlZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS1hc2NpaS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS1hc2NpaS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjgwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLWFzY2lpLmQKQEAgLTAsMCArMSw1IEBACitMb25nOiBkYXRhLWFzY2lpCitBcmc6IDxkYXRhPgorSGVscDogSFRUUCBQT1NUIEFTQ0lJIGRhdGEKK1Byb3RvY29sczogSFRUUAorUmVkaXJlY3Q6IGRhdGEKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2RhdGEtYmluYXJ5LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLWJpbmFyeS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLWJpbmFyeS5kCkBAIC0wLDAgKzEsMTMgQEAKK0xvbmc6IGRhdGEtYmluYXJ5CitBcmc6IDxkYXRhPgorSGVscDogSFRUUCBQT1NUIGJpbmFyeSBkYXRhCitQcm90b2NvbHM6IEhUVFAKKy0tLQorVGhpcyBwb3N0cyBkYXRhIGV4YWN0bHkgYXMgc3BlY2lmaWVkIHdpdGggbm8gZXh0cmEgcHJvY2Vzc2luZyB3aGF0c29ldmVyLgorCitJZiB5b3Ugc3RhcnQgdGhlIGRhdGEgd2l0aCB0aGUgbGV0dGVyIEAsIHRoZSByZXN0IHNob3VsZCBiZSBhIGZpbGVuYW1lLiAgRGF0YQoraXMgcG9zdGVkIGluIGEgc2ltaWxhciBtYW5uZXIgYXMgLS1kYXRhIGRvZXMsIGV4Y2VwdCB0aGF0IG5ld2xpbmVzIGFuZAorY2FycmlhZ2UgcmV0dXJucyBhcmUgcHJlc2VydmVkIGFuZCBjb252ZXJzaW9ucyBhcmUgbmV2ZXIgZG9uZS4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgb25lcyBmb2xsb3dpbmcgdGhlIGZpcnN0IHdpbGwgYXBwZW5kCitkYXRhIGFzIGRlc2NyaWJlZCBpbiAtLWRhdGEuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLXJhdy5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS1yYXcuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY5YjRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS1yYXcuZApAQCAtMCwwICsxLDkgQEAKK0xvbmc6IGRhdGEtcmF3CitBcmc6IDxkYXRhPgorUHJvdG9jb2xzOiBIVFRQCitIZWxwOiBIVFRQIFBPU1QgZGF0YSwgJ0AnIGFsbG93ZWQKK0FkZGVkOiA3LjQzLjAKK1NlZS1hbHNvOiBkYXRhCistLS0KK1RoaXMgcG9zdHMgZGF0YSBzaW1pbGFybHkgdG8gLS1kYXRhIGJ1dCB3aXRob3V0IHRoZSBzcGVjaWFsCitpbnRlcnByZXRhdGlvbiBvZiB0aGUgQCBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLXVybGVuY29kZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS11cmxlbmNvZGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODczZjMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS11cmxlbmNvZGUuZApAQCAtMCwwICsxLDMzIEBACitMb25nOiBkYXRhLXVybGVuY29kZQorQXJnOiA8ZGF0YT4KK0hlbHA6IEhUVFAgUE9TVCBkYXRhIHVybCBlbmNvZGVkCitQcm90b2NvbHM6IEhUVFAKK1NlZS1hbHNvOiBkYXRhIGRhdGEtcmF3CitBZGRlZDogNy4xOC4wCistLS0KK1RoaXMgcG9zdHMgZGF0YSwgc2ltaWxhciB0byB0aGUgb3RoZXIgLS1kYXRhIG9wdGlvbnMgd2l0aCB0aGUgZXhjZXB0aW9uCit0aGF0IHRoaXMgcGVyZm9ybXMgVVJMLWVuY29kaW5nLgorCitUbyBiZSBDR0ktY29tcGxpYW50LCB0aGUgPGRhdGE+IHBhcnQgc2hvdWxkIGJlZ2luIHdpdGggYSBcZkluYW1lXGZQIGZvbGxvd2VkCitieSBhIHNlcGFyYXRvciBhbmQgYSBjb250ZW50IHNwZWNpZmljYXRpb24uIFRoZSA8ZGF0YT4gcGFydCBjYW4gYmUgcGFzc2VkIHRvCitjdXJsIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN5bnRheGVzOgorLlJTCisuSVAgImNvbnRlbnQiCitUaGlzIHdpbGwgbWFrZSBjdXJsIFVSTC1lbmNvZGUgdGhlIGNvbnRlbnQgYW5kIHBhc3MgdGhhdCBvbi4gSnVzdCBiZSBjYXJlZnVsCitzbyB0aGF0IHRoZSBjb250ZW50IGRvZXNuJ3QgY29udGFpbiBhbnkgPSBvciBAIHN5bWJvbHMsIGFzIHRoYXQgd2lsbCB0aGVuIG1ha2UKK3RoZSBzeW50YXggbWF0Y2ggb25lIG9mIHRoZSBvdGhlciBjYXNlcyBiZWxvdyEKKy5JUCAiPWNvbnRlbnQiCitUaGlzIHdpbGwgbWFrZSBjdXJsIFVSTC1lbmNvZGUgdGhlIGNvbnRlbnQgYW5kIHBhc3MgdGhhdCBvbi4gVGhlIHByZWNlZGluZyA9CitzeW1ib2wgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkYXRhLgorLklQICJuYW1lPWNvbnRlbnQiCitUaGlzIHdpbGwgbWFrZSBjdXJsIFVSTC1lbmNvZGUgdGhlIGNvbnRlbnQgcGFydCBhbmQgcGFzcyB0aGF0IG9uLiBOb3RlIHRoYXQKK3RoZSBuYW1lIHBhcnQgaXMgZXhwZWN0ZWQgdG8gYmUgVVJMLWVuY29kZWQgYWxyZWFkeS4KKy5JUCAiQGZpbGVuYW1lIgorVGhpcyB3aWxsIG1ha2UgY3VybCBsb2FkIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gZmlsZSAoaW5jbHVkaW5nIGFueSBuZXdsaW5lcyksCitVUkwtZW5jb2RlIHRoYXQgZGF0YSBhbmQgcGFzcyBpdCBvbiBpbiB0aGUgUE9TVC4KKy5JUCAibmFtZUBmaWxlbmFtZSIKK1RoaXMgd2lsbCBtYWtlIGN1cmwgbG9hZCBkYXRhIGZyb20gdGhlIGdpdmVuIGZpbGUgKGluY2x1ZGluZyBhbnkgbmV3bGluZXMpLAorVVJMLWVuY29kZSB0aGF0IGRhdGEgYW5kIHBhc3MgaXQgb24gaW4gdGhlIFBPU1QuIFRoZSBuYW1lIHBhcnQgZ2V0cyBhbiBlcXVhbAorc2lnbiBhcHBlbmRlZCwgcmVzdWx0aW5nIGluIFxmSW5hbWU9dXJsZW5jb2RlZC1maWxlLWNvbnRlbnRcZlAuIE5vdGUgdGhhdCB0aGUKK25hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgVVJMLWVuY29kZWQgYWxyZWFkeS4KKy5SRQpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGF0YS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2I0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9kYXRhLmQKQEAgLTAsMCArMSwzMCBAQAorTG9uZzogZGF0YQorU2hvcnQ6IGQKK0FyZzogPGRhdGE+CitIZWxwOiBIVFRQIFBPU1QgZGF0YQorUHJvdG9jb2xzOiBIVFRQCitTZWUtYWxzbzogZGF0YS1iaW5hcnkgZGF0YS11cmxlbmNvZGUgZGF0YS1yYXcKK011dGV4ZWQ6IGZvcm0gaGVhZCB1cGxvYWQKKy0tLQorU2VuZHMgdGhlIHNwZWNpZmllZCBkYXRhIGluIGEgUE9TVCByZXF1ZXN0IHRvIHRoZSBIVFRQIHNlcnZlciwgaW4gdGhlIHNhbWUgd2F5Cit0aGF0IGEgYnJvd3NlciBkb2VzIHdoZW4gYSB1c2VyIGhhcyBmaWxsZWQgaW4gYW4gSFRNTCBmb3JtIGFuZCBwcmVzc2VzIHRoZQorc3VibWl0IGJ1dHRvbi4gVGhpcyB3aWxsIGNhdXNlIGN1cmwgdG8gcGFzcyB0aGUgZGF0YSB0byB0aGUgc2VydmVyIHVzaW5nIHRoZQorY29udGVudC10eXBlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC4gIENvbXBhcmUgdG8gLS1mb3JtLgorCistLWRhdGEtcmF3IGlzIGFsbW9zdCB0aGUgc2FtZSBidXQgZG9lcyBub3QgaGF2ZSBhIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YKK3RoZSBAIGNoYXJhY3Rlci4gVG8gcG9zdCBkYXRhIHB1cmVseSBiaW5hcnksIHlvdSBzaG91bGQgaW5zdGVhZCB1c2UgdGhlCistLWRhdGEtYmluYXJ5IG9wdGlvbi4gIFRvIFVSTC1lbmNvZGUgdGhlIHZhbHVlIG9mIGEgZm9ybSBmaWVsZCB5b3UgbWF5IHVzZQorLS1kYXRhLXVybGVuY29kZS4KKworSWYgYW55IG9mIHRoZXNlIG9wdGlvbnMgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUsIHRoZQorZGF0YSBwaWVjZXMgc3BlY2lmaWVkIHdpbGwgYmUgbWVyZ2VkIHRvZ2V0aGVyIHdpdGggYSBzZXBhcmF0aW5nCismLXN5bWJvbC4gVGh1cywgdXNpbmcgJy1kIG5hbWU9ZGFuaWVsIC1kIHNraWxsPWxvdXN5JyB3b3VsZCBnZW5lcmF0ZSBhIHBvc3QKK2NodW5rIHRoYXQgbG9va3MgbGlrZSBcJiduYW1lPWRhbmllbCZza2lsbD1sb3VzeScuCisKK0lmIHlvdSBzdGFydCB0aGUgZGF0YSB3aXRoIHRoZSBsZXR0ZXIgQCwgdGhlIHJlc3Qgc2hvdWxkIGJlIGEgZmlsZSBuYW1lIHRvCityZWFkIHRoZSBkYXRhIGZyb20sIG9yIC0gaWYgeW91IHdhbnQgY3VybCB0byByZWFkIHRoZSBkYXRhIGZyb20KK3N0ZGluLiBNdWx0aXBsZSBmaWxlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQuIFBvc3RpbmcgZGF0YSBmcm9tIGEgZmlsZSBuYW1lZAorJ2Zvb2Jhcicgd291bGQgdGh1cyBiZSBkb25lIHdpdGggXGZJLS1kYXRhXGZQIEBmb29iYXIuIFdoZW4gLS1kYXRhIGlzIHRvbGQgdG8KK3JlYWQgZnJvbSBhIGZpbGUgbGlrZSB0aGF0LCBjYXJyaWFnZSByZXR1cm5zIGFuZCBuZXdsaW5lcyB3aWxsIGJlIHN0cmlwcGVkCitvdXQuIElmIHlvdSBkb24ndCB3YW50IHRoZSBAIGNoYXJhY3RlciB0byBoYXZlIGEgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiB1c2UKKy0tZGF0YS1yYXcgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2RlbGVnYXRpb24uZCBiL2RvY3MvY21kbGluZS1vcHRzL2RlbGVnYXRpb24uZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhkODIzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGVsZWdhdGlvbi5kCkBAIC0wLDAgKzEsMTYgQEAKK0xvbmc6IGRlbGVnYXRpb24KK0FyZzogPExFVkVMPgorSGVscDogR1NTLUFQSSBkZWxlZ2F0aW9uIHBlcm1pc3Npb24KK1Byb3RvY29sczogR1NTL2tlcmJlcm9zCistLS0KK1NldCBMRVZFTCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hhdCBpdCBpcyBhbGxvd2VkIHRvIGRlbGVnYXRlIHdoZW4gaXQKK2NvbWVzIHRvIHVzZXIgY3JlZGVudGlhbHMuCisuUlMKKy5JUCAibm9uZSIKK0Rvbid0IGFsbG93IGFueSBkZWxlZ2F0aW9uLgorLklQICJwb2xpY3kiCitEZWxlZ2F0ZXMgaWYgYW5kIG9ubHkgaWYgdGhlIE9LLUFTLURFTEVHQVRFIGZsYWcgaXMgc2V0IGluIHRoZSBLZXJiZXJvcworc2VydmljZSB0aWNrZXQsIHdoaWNoIGlzIGEgbWF0dGVyIG9mIHJlYWxtIHBvbGljeS4KKy5JUCAiYWx3YXlzIgorVW5jb25kaXRpb25hbGx5IGFsbG93IHRoZSBzZXJ2ZXIgdG8gZGVsZWdhdGUuCisuUkUKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2RpZ2VzdC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGlnZXN0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2RpZ2VzdC5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IGRpZ2VzdAorSGVscDogVXNlIEhUVFAgRGlnZXN0IEF1dGhlbnRpY2F0aW9uCitQcm90b2NvbHM6IEhUVFAKK011dGV4ZWQ6IGJhc2ljIG50bG0gbmVnb3RpYXRlCitTZWUtYWxzbzogdXNlciBwcm94eS1kaWdlc3QgYW55YXV0aAorLS0tCitFbmFibGVzIEhUVFAgRGlnZXN0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGFuIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSB0aGF0CitwcmV2ZW50cyB0aGUgcGFzc3dvcmQgZnJvbSBiZWluZyBzZW50IG92ZXIgdGhlIHdpcmUgaW4gY2xlYXIgdGV4dC4gVXNlIHRoaXMgaW4KK2NvbWJpbmF0aW9uIHdpdGggdGhlIG5vcm1hbCAtLXVzZXIgb3B0aW9uIHRvIHNldCB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZGlzYWJsZS1lcHJ0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9kaXNhYmxlLWVwcnQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWU1M2MwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZGlzYWJsZS1lcHJ0LmQKQEAgLTAsMCArMSwxOSBAQAorTG9uZzogZGlzYWJsZS1lcHJ0CitIZWxwOiBJbmhpYml0IHVzaW5nIEVQUlQgb3IgTFBSVAorUHJvdG9jb2xzOiBGVFAKKy0tLQorVGVsbCBjdXJsIHRvIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgRVBSVCBhbmQgTFBSVCBjb21tYW5kcyB3aGVuIGRvaW5nIGFjdGl2ZQorRlRQIHRyYW5zZmVycy4gQ3VybCB3aWxsIG5vcm1hbGx5IGFsd2F5cyBmaXJzdCBhdHRlbXB0IHRvIHVzZSBFUFJULCB0aGVuIExQUlQKK2JlZm9yZSB1c2luZyBQT1JULCBidXQgd2l0aCB0aGlzIG9wdGlvbiwgaXQgd2lsbCB1c2UgUE9SVCByaWdodCBhd2F5LiBFUFJUIGFuZAorTFBSVCBhcmUgZXh0ZW5zaW9ucyB0byB0aGUgb3JpZ2luYWwgRlRQIHByb3RvY29sLCBhbmQgbWF5IG5vdCB3b3JrIG9uIGFsbAorc2VydmVycywgYnV0IHRoZXkgZW5hYmxlIG1vcmUgZnVuY3Rpb25hbGl0eSBpbiBhIGJldHRlciB3YXkgdGhhbiB0aGUKK3RyYWRpdGlvbmFsIFBPUlQgY29tbWFuZC4KKworLS1lcHJ0IGNhbiBiZSB1c2VkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIEVQUlQgYWdhaW4gYW5kIC0tbm8tZXBydCBpcyBhbiBhbGlhcworZm9yIC0tZGlzYWJsZS1lcHJ0LgorCitJZiB0aGUgc2VydmVyIGlzIGFjY2Vzc2VkIHVzaW5nIElQdjYsIHRoaXMgb3B0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3QgYXMgRVBSVAoraXMgbmVjZXNzYXJ5IHRoZW4uCisKK0Rpc2FibGluZyBFUFJUIG9ubHkgY2hhbmdlcyB0aGUgYWN0aXZlIGJlaGF2aW9yLiBJZiB5b3Ugd2FudCB0byBzd2l0Y2ggdG8KK3Bhc3NpdmUgbW9kZSB5b3UgbmVlZCB0byBub3QgdXNlIC0tZnRwLXBvcnQgb3IgZm9yY2UgaXQgd2l0aCAtLWZ0cC1wYXN2LgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZG5zLWludGVyZmFjZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZG5zLWludGVyZmFjZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTVhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtaW50ZXJmYWNlLmQKQEAgLTAsMCArMSwxMSBAQAorTG9uZzogZG5zLWludGVyZmFjZQorQXJnOiA8aW50ZXJmYWNlPgorSGVscDogSW50ZXJmYWNlIHRvIHVzZSBmb3IgRE5TIHJlcXVlc3RzCitQcm90b2NvbHM6IEROUworU2VlLWFsc286IGRucy1pcHY0LWFkZHIgZG5zLWlwdjYtYWRkcgorQWRkZWQ6IDcuMzMuMAorUmVxdWlyZXM6IGMtYXJlcworLS0tCitUZWxsIGN1cmwgdG8gc2VuZCBvdXRnb2luZyBETlMgcmVxdWVzdHMgdGhyb3VnaCA8aW50ZXJmYWNlPi4gVGhpcyBvcHRpb24gaXMgYQorY291bnRlcnBhcnQgdG8gLS1pbnRlcmZhY2UgKHdoaWNoIGRvZXMgbm90IGFmZmVjdCBETlMpLiBUaGUgc3VwcGxpZWQgc3RyaW5nCittdXN0IGJlIGFuIGludGVyZmFjZSBuYW1lIChub3QgYW4gYWRkcmVzcykuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtaXB2NC1hZGRyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtaXB2NC1hZGRyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3Yjg1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Rucy1pcHY0LWFkZHIuZApAQCAtMCwwICsxLDExIEBACitMb25nOiBkbnMtaXB2NC1hZGRyCitBcmc6IDxhZGRyZXNzPgorSGVscDogSVB2NCBhZGRyZXNzIHRvIHVzZSBmb3IgRE5TIHJlcXVlc3RzCitQcm90b2NvbHM6IEROUworU2VlLWFsc286IGRucy1pbnRlcmZhY2UgZG5zLWlwdjYtYWRkcgorQWRkZWQ6IDcuMzMuMAorUmVxdWlyZXM6IGMtYXJlcworLS0tCitUZWxsIGN1cmwgdG8gYmluZCB0byA8aXAtYWRkcmVzcz4gd2hlbiBtYWtpbmcgSVB2NCBETlMgcmVxdWVzdHMsIHNvIHRoYXQKK3RoZSBETlMgcmVxdWVzdHMgb3JpZ2luYXRlIGZyb20gdGhpcyBhZGRyZXNzLiBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEKK3NpbmdsZSBJUHY0IGFkZHJlc3MuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtaXB2Ni1hZGRyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtaXB2Ni1hZGRyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxZjAxOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Rucy1pcHY2LWFkZHIuZApAQCAtMCwwICsxLDExIEBACitMb25nOiBkbnMtaXB2Ni1hZGRyCitBcmc6IDxhZGRyZXNzPgorSGVscDogSVB2NiBhZGRyZXNzIHRvIHVzZSBmb3IgRE5TIHJlcXVlc3RzCitQcm90b2NvbHM6IEROUworU2VlLWFsc286IGRucy1pbnRlcmZhY2UgZG5zLWlwdjQtYWRkcgorQWRkZWQ6IDcuMzMuMAorUmVxdWlyZXM6IGMtYXJlcworLS0tCitUZWxsIGN1cmwgdG8gYmluZCB0byA8aXAtYWRkcmVzcz4gd2hlbiBtYWtpbmcgSVB2NiBETlMgcmVxdWVzdHMsIHNvIHRoYXQKK3RoZSBETlMgcmVxdWVzdHMgb3JpZ2luYXRlIGZyb20gdGhpcyBhZGRyZXNzLiBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEKK3NpbmdsZSBJUHY2IGFkZHJlc3MuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kbnMtc2VydmVycy5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZG5zLXNlcnZlcnMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThmZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZG5zLXNlcnZlcnMuZApAQCAtMCwwICsxLDEwIEBACitMb25nOiBkbnMtc2VydmVycworQXJnOiA8YWRkcmVzc2VzPgorSGVscDogRE5TIHNlcnZlciBhZGRycyB0byB1c2UKK1JlcXVpcmVzOiBjLWFyZXMKK0FkZGVkOiA3LjMzLjAKKy0tLQorU2V0IHRoZSBsaXN0IG9mIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIGRlZmF1bHQuCitUaGUgbGlzdCBvZiBJUCBhZGRyZXNzZXMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4gUG9ydCBudW1iZXJzCittYXkgYWxzbyBvcHRpb25hbGx5IGJlIGdpdmVuIGFzIFxmSTo8cG9ydC1udW1iZXI+XGZQIGFmdGVyIGVhY2ggSVAKK2FkZHJlc3MuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9kdW1wLWhlYWRlci5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZHVtcC1oZWFkZXIuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMxMGFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZHVtcC1oZWFkZXIuZApAQCAtMCwwICsxLDE4IEBACitMb25nOiBkdW1wLWhlYWRlcgorU2hvcnQ6IEQKK0FyZzogPGZpbGVuYW1lPgorSGVscDogV3JpdGUgdGhlIHJlY2VpdmVkIGhlYWRlcnMgdG8gPGZpbGVuYW1lPgorUHJvdG9jb2xzOiBIVFRQIEZUUAorU2VlLWFsc286IG91dHB1dAorLS0tCitXcml0ZSB0aGUgcmVjZWl2ZWQgcHJvdG9jb2wgaGVhZGVycyB0byB0aGUgc3BlY2lmaWVkIGZpbGUuCisKK1RoaXMgb3B0aW9uIGlzIGhhbmR5IHRvIHVzZSB3aGVuIHlvdSB3YW50IHRvIHN0b3JlIHRoZSBoZWFkZXJzIHRoYXQgYW4gSFRUUAorc2l0ZSBzZW5kcyB0byB5b3UuIENvb2tpZXMgZnJvbSB0aGUgaGVhZGVycyBjb3VsZCB0aGVuIGJlIHJlYWQgaW4gYSBzZWNvbmQKK2N1cmwgaW52b2NhdGlvbiBieSB1c2luZyB0aGUgLS1jb29raWUgb3B0aW9uISBUaGUgLS1jb29raWUtamFyIG9wdGlvbiBpcyBhCitiZXR0ZXIgd2F5IHRvIHN0b3JlIGNvb2tpZXMuCisKK1doZW4gdXNlZCBpbiBGVFAsIHRoZSBGVFAgc2VydmVyIHJlc3BvbnNlIGxpbmVzIGFyZSBjb25zaWRlcmVkIGJlaW5nICJoZWFkZXJzIgorYW5kIHRodXMgYXJlIHNhdmVkIHRoZXJlLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9lZ2QtZmlsZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZWdkLWZpbGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWU2ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZWdkLWZpbGUuZApAQCAtMCwwICsxLDcgQEAKK0xvbmc6IGVnZC1maWxlCitIZWxwOiBFR0Qgc29ja2V0IHBhdGggZm9yIHJhbmRvbSBkYXRhCitQcm90b2NvbHM6IFRMUworU2VlLWFsc286IHJhbmRvbS1maWxlCistLS0KK1NwZWNpZnkgdGhlIHBhdGggbmFtZSB0byB0aGUgRW50cm9weSBHYXRoZXJpbmcgRGFlbW9uIHNvY2tldC4gVGhlIHNvY2tldCBpcwordXNlZCB0byBzZWVkIHRoZSByYW5kb20gZW5naW5lIGZvciBTU0wgY29ubmVjdGlvbnMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9lbmdpbmUuZCBiL2RvY3MvY21kbGluZS1vcHRzL2VuZ2luZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjdjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9lbmdpbmUuZApAQCAtMCwwICsxLDggQEAKK0xvbmc6IGVuZ2luZQorQXJnOiA8bmFtZT4KK0hlbHA6IENyeXB0byBlbmdpbmUgdG8gdXNlCitQcm90b2NvbHM6IFRMUworLS0tCitTZWxlY3QgdGhlIE9wZW5TU0wgY3J5cHRvIGVuZ2luZSB0byB1c2UgZm9yIGNpcGhlciBvcGVyYXRpb25zLiBVc2UgXGZJLS1lbmdpbmUKK2xpc3RcZlAgdG8gcHJpbnQgYSBsaXN0IG9mIGJ1aWxkLXRpbWUgc3VwcG9ydGVkIGVuZ2luZXMuIE5vdGUgdGhhdCBub3QgYWxsIChvcgorbm9uZSkgb2YgdGhlIGVuZ2luZXMgbWF5IGJlIGF2YWlsYWJsZSBhdCBydW4tdGltZS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Vudmlyb25tZW50LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9lbnZpcm9ubWVudC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODllNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9lbnZpcm9ubWVudC5kCkBAIC0wLDAgKzEsNyBAQAorTG9uZzogZW52aXJvbm1lbnQKK0hlbHA6IFdyaXRlIHJlc3VsdHMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzCitSZXF1aXJlczogUklTQyBPUworLS0tCitTZXRzIGEgcmFuZ2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB1c2luZyB0aGUgbmFtZXMgdGhlIC0td3JpdGUtb3V0IG9wdGlvbgorc3VwcG9ydHMsIHRvIGFsbG93IGVhc2llciBleHRyYWN0aW9uIG9mIHVzZWZ1bCBpbmZvcm1hdGlvbiBhZnRlciBoYXZpbmcgcnVuCitjdXJsLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZXhwZWN0MTAwLXRpbWVvdXQuZCBiL2RvY3MvY21kbGluZS1vcHRzL2V4cGVjdDEwMC10aW1lb3V0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4ZjBiOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2V4cGVjdDEwMC10aW1lb3V0LmQKQEAgLTAsMCArMSwxMSBAQAorTG9uZzogZXhwZWN0MTAwLXRpbWVvdXQKK0FyZzogPHNlY29uZHM+CitIZWxwOiBIb3cgbG9uZyB0byB3YWl0IGZvciAxMDAtY29udGludWUKK1Byb3RvY29sczogSFRUUAorQWRkZWQ6IDcuNDcuMAorU2VlLWFsc286IGNvbm5lY3QtdGltZW91dAorLS0tCitNYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHlvdSBhbGxvdyBjdXJsIHRvIHdhaXQgZm9yIGEgMTAwLWNvbnRpbnVlCityZXNwb25zZSB3aGVuIGN1cmwgZW1pdHMgYW4gRXhwZWN0czogMTAwLWNvbnRpbnVlIGhlYWRlciBpbiBpdHMgcmVxdWVzdC4gQnkKK2RlZmF1bHQgY3VybCB3aWxsIHdhaXQgb25lIHNlY29uZC4gVGhpcyBvcHRpb24gYWNjZXB0cyBkZWNpbWFsIHZhbHVlcyEgV2hlbgorY3VybCBzdG9wcyB3YWl0aW5nLCBpdCB3aWxsIGNvbnRpbnVlIGFzIGlmIHRoZSByZXNwb25zZSBoYXMgYmVlbiByZWNlaXZlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2ZhaWwtZWFybHkuZCBiL2RvY3MvY21kbGluZS1vcHRzL2ZhaWwtZWFybHkuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDg5YjRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZmFpbC1lYXJseS5kCkBAIC0wLDAgKzEsMTggQEAKK0xvbmc6IGZhaWwtZWFybHkKK0hlbHA6IEZhaWwgb24gZmlyc3QgdHJhbnNmZXIgZXJyb3IsIGRvIG5vdCBjb250aW51ZQorQWRkZWQ6IDcuNTIuMAorLS0tCitGYWlsIGFuZCBleGl0IG9uIGZpcnN0IGRldGVjdGVkIGVycm9yLgorCitXaGVuIGN1cmwgaXMgdXNlZCB0byBkbyBtdWx0aXBsZSB0cmFuc2ZlcnMgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgd2lsbAorYXR0ZW1wdCB0byBvcGVyYXRlIG9uIGVhY2ggZ2l2ZW4gVVJMLCBvbmUgYnkgb25lLiBCeSBkZWZhdWx0LCBpdCB3aWxsIGlnbm9yZQorZXJyb3JzIGlmIHRoZXJlIGFyZSBtb3JlIFVSTHMgZ2l2ZW4gYW5kIHRoZSBsYXN0IFVSTCdzIHN1Y2Nlc3Mgd2lsbCBkZXRlcm1pbmUKK3RoZSBlcnJvciBjb2RlIGN1cmwgcmV0dXJucy4gU28gZWFybHkgZmFpbHVyZXMgd2lsbCBiZSAiaGlkZGVuIiBieSBzdWJzZXF1ZW50CitzdWNjZXNzZnVsIHRyYW5zZmVycy4KKworVXNpbmcgdGhpcyBvcHRpb24sIGN1cmwgd2lsbCBpbnN0ZWFkIHJldHVybiBhbiBlcnJvciBvbiB0aGUgZmlyc3QgdHJhbnNmZXJzCit0aGF0IGZhaWxzLCBpbmRlcGVuZGVudCBvbiB0aGUgYW1vdW50IG9mIG1vcmUgVVJMcyB0aGF0IGFyZSBnaXZlbiBvbiB0aGUKK2NvbW1hbmQgbGluZS4gVGhpcyB3YXksIG5vIHRyYW5zZmVyIGZhaWx1cmVzIGdvIHVuZGV0ZWN0ZWQgYnkgc2NyaXB0cyBhbmQKK3NpbWlsYXIuCisKK1RoaXMgb3B0aW9uIHdpbGwgYXBwbHkgZm9yIGFsbCBnaXZlbiBVUkxzIGV2ZW4gaWYgeW91IHVzZSAtLW5leHQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mYWlsLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mYWlsLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2YzU3MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2ZhaWwuZApAQCAtMCwwICsxLDE0IEBACitMb25nOiBmYWlsCitTaG9ydDogZgorUHJvdG9jb2xzOiBIVFRQCitIZWxwOiBGYWlsIHNpbGVudGx5IChubyBvdXRwdXQgYXQgYWxsKSBvbiBIVFRQIGVycm9ycworLS0tCitGYWlsIHNpbGVudGx5IChubyBvdXRwdXQgYXQgYWxsKSBvbiBzZXJ2ZXIgZXJyb3JzLiBUaGlzIGlzIG1vc3RseSBkb25lIHRvCitiZXR0ZXIgZW5hYmxlIHNjcmlwdHMgZXRjIHRvIGJldHRlciBkZWFsIHdpdGggZmFpbGVkIGF0dGVtcHRzLiBJbiBub3JtYWwgY2FzZXMKK3doZW4gYW4gSFRUUCBzZXJ2ZXIgZmFpbHMgdG8gZGVsaXZlciBhIGRvY3VtZW50LCBpdCByZXR1cm5zIGFuIEhUTUwgZG9jdW1lbnQKK3N0YXRpbmcgc28gKHdoaWNoIG9mdGVuIGFsc28gZGVzY3JpYmVzIHdoeSBhbmQgbW9yZSkuIFRoaXMgZmxhZyB3aWxsIHByZXZlbnQKK2N1cmwgZnJvbSBvdXRwdXR0aW5nIHRoYXQgYW5kIHJldHVybiBlcnJvciAyMi4KKworVGhpcyBtZXRob2QgaXMgbm90IGZhaWwtc2FmZSBhbmQgdGhlcmUgYXJlIG9jY2FzaW9ucyB3aGVyZSBub24tc3VjY2Vzc2Z1bAorcmVzcG9uc2UgY29kZXMgd2lsbCBzbGlwIHRocm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBhdXRoZW50aWNhdGlvbiBpcyBpbnZvbHZlZAorKHJlc3BvbnNlIGNvZGVzIDQwMSBhbmQgNDA3KS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2ZhbHNlLXN0YXJ0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mYWxzZS1zdGFydC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YThhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mYWxzZS1zdGFydC5kCkBAIC0wLDAgKzEsMTIgQEAKK0xvbmc6IGZhbHNlLXN0YXJ0CitIZWxwOiBFbmFibGUgVExTIEZhbHNlIFN0YXJ0CitQcm90b2NvbHM6IFRMUworQWRkZWQ6IDcuNDIuMAorLS0tCitUZWxscyBjdXJsIHRvIHVzZSBmYWxzZSBzdGFydCBkdXJpbmcgdGhlIFRMUyBoYW5kc2hha2UuIEZhbHNlIHN0YXJ0IGlzIGEgbW9kZQord2hlcmUgYSBUTFMgY2xpZW50IHdpbGwgc3RhcnQgc2VuZGluZyBhcHBsaWNhdGlvbiBkYXRhIGJlZm9yZSB2ZXJpZnlpbmcgdGhlCitzZXJ2ZXIncyBGaW5pc2hlZCBtZXNzYWdlLCB0aHVzIHNhdmluZyBhIHJvdW5kIHRyaXAgd2hlbiBwZXJmb3JtaW5nIGEgZnVsbAoraGFuZHNoYWtlLgorCitUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGluIHRoZSBOU1MgYW5kIFNlY3VyZSBUcmFuc3BvcnQgKG9uIGlPUyA3LjAKK29yIGxhdGVyLCBvciBPUyBYIDEwLjkgb3IgbGF0ZXIpIGJhY2tlbmRzLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZm9ybS1zdHJpbmcuZCBiL2RvY3MvY21kbGluZS1vcHRzL2Zvcm0tc3RyaW5nLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxODU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Zvcm0tc3RyaW5nLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogZm9ybS1zdHJpbmcKK0hlbHA6IFNwZWNpZnkgSFRUUCBtdWx0aXBhcnQgUE9TVCBkYXRhCitQcm90b2NvbHM6IEhUVFAKK1NlZS1hbHNvOiBmb3JtCistLS0KK1NpbWlsYXIgdG8gLS1mb3JtIGV4Y2VwdCB0aGF0IHRoZSB2YWx1ZSBzdHJpbmcgZm9yIHRoZSBuYW1lZCBwYXJhbWV0ZXIgaXMgdXNlZAorbGl0ZXJhbGx5LiBMZWFkaW5nIFwmJ0AnIGFuZCBcJic8JyBjaGFyYWN0ZXJzLCBhbmQgdGhlIFwmJzt0eXBlPScgc3RyaW5nIGluCit0aGUgdmFsdWUgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmcuIFVzZSB0aGlzIGluIHByZWZlcmVuY2UgdG8gLS1mb3JtXGZQIGlmCit0aGVyZSdzIGFueSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBzdHJpbmcgdmFsdWUgbWF5IGFjY2lkZW50YWxseSB0cmlnZ2VyIHRoZQorXCYnQCcgb3IgXCYnPCcgZmVhdHVyZXMgb2YgLS1mb3JtLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZm9ybS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZm9ybS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YTdkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mb3JtLmQKQEAgLTAsMCArMSw1NCBAQAorTG9uZzogZm9ybQorU2hvcnQ6IEYKK0FyZzogPG5hbWU9Y29udGVudD4KK0hlbHA6IFNwZWNpZnkgSFRUUCBtdWx0aXBhcnQgUE9TVCBkYXRhCitQcm90b2NvbHM6IEhUVFAKK011dGV4ZWQ6IGRhdGEgaGVhZCB1cGxvYWQKKy0tLQorVGhpcyBsZXRzIGN1cmwgZW11bGF0ZSBhIGZpbGxlZC1pbiBmb3JtIGluIHdoaWNoIGEgdXNlciBoYXMgcHJlc3NlZCB0aGUgc3VibWl0CitidXR0b24uIFRoaXMgY2F1c2VzIGN1cmwgdG8gUE9TVCBkYXRhIHVzaW5nIHRoZSBDb250ZW50LVR5cGUKK211bHRpcGFydC9mb3JtLWRhdGEgYWNjb3JkaW5nIHRvIFJGQyAyMzg4LiBUaGlzIGVuYWJsZXMgdXBsb2FkaW5nIG9mIGJpbmFyeQorZmlsZXMgZXRjLiBUbyBmb3JjZSB0aGUgJ2NvbnRlbnQnIHBhcnQgdG8gYmUgYSBmaWxlLCBwcmVmaXggdGhlIGZpbGUgbmFtZSB3aXRoCithbiBAIHNpZ24uIFRvIGp1c3QgZ2V0IHRoZSBjb250ZW50IHBhcnQgZnJvbSBhIGZpbGUsIHByZWZpeCB0aGUgZmlsZSBuYW1lIHdpdGgKK3RoZSBzeW1ib2wgPC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBAIGFuZCA8IGlzIHRoZW4gdGhhdCBAIG1ha2VzIGEgZmlsZSBnZXQKK2F0dGFjaGVkIGluIHRoZSBwb3N0IGFzIGEgZmlsZSB1cGxvYWQsIHdoaWxlIHRoZSA8IG1ha2VzIGEgdGV4dCBmaWVsZCBhbmQganVzdAorZ2V0IHRoZSBjb250ZW50cyBmb3IgdGhhdCB0ZXh0IGZpZWxkIGZyb20gYSBmaWxlLgorCitFeGFtcGxlOiB0byBzZW5kIGFuIGltYWdlIHRvIGEgc2VydmVyLCB3aGVyZSBcJidwcm9maWxlJyBpcyB0aGUgbmFtZSBvZiB0aGUKK2Zvcm0tZmllbGQgdG8gd2hpY2ggcG9ydHJhaXQuanBnIHdpbGwgYmUgdGhlIGlucHV0OgorCisgY3VybCAtRiBwcm9maWxlPUBwb3J0cmFpdC5qcGcgaHR0cHM6Ly9leGFtcGxlLmNvbS91cGxvYWQuY2dpCisKK1RvIHJlYWQgY29udGVudCBmcm9tIHN0ZGluIGluc3RlYWQgb2YgYSBmaWxlLCB1c2UgLSBhcyB0aGUgZmlsZW5hbWUuIFRoaXMgZ29lcworZm9yIGJvdGggQCBhbmQgPCBjb25zdHJ1Y3RzLiBVbmZvcnR1bmF0ZWx5IGl0IGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyB0aGUKK2ZpbGUgZnJvbSBhIG5hbWVkIHBpcGUgb3Igc2ltaWxhciwgYXMgaXQgbmVlZHMgdGhlIGZ1bGwgc2l6ZSBiZWZvcmUgdGhlCit0cmFuc2ZlciBzdGFydHMuCisKK1lvdSBjYW4gYWxzbyB0ZWxsIGN1cmwgd2hhdCBDb250ZW50LVR5cGUgdG8gdXNlIGJ5IHVzaW5nICd0eXBlPScsIGluIGEgbWFubmVyCitzaW1pbGFyIHRvOgorCisgY3VybCAtRiAid2ViPUBpbmRleC5odG1sO3R5cGU9dGV4dC9odG1sIiBleGFtcGxlLmNvbQorCitvcgorCisgY3VybCAtRiAibmFtZT1kYW5pZWw7dHlwZT10ZXh0L2ZvbyIgZXhhbXBsZS5jb20KKworWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgY2hhbmdlIHRoZSBuYW1lIGZpZWxkIG9mIGEgZmlsZSB1cGxvYWQgcGFydCBieSBzZXR0aW5nCitmaWxlbmFtZT0sIGxpa2UgdGhpczoKKworIGN1cmwgLUYgImZpbGU9QGxvY2FsZmlsZTtmaWxlbmFtZT1uYW1laW5wb3N0IiBleGFtcGxlLmNvbQorCitJZiBmaWxlbmFtZS9wYXRoIGNvbnRhaW5zICcsJyBvciAnOycsIGl0IG11c3QgYmUgcXVvdGVkIGJ5IGRvdWJsZS1xdW90ZXMgbGlrZToKKworIGN1cmwgLUYgImZpbGU9QFxcImxvY2FsZmlsZVxcIjtmaWxlbmFtZT1cXCJuYW1laW5wb3N0XFwiIiBleGFtcGxlLmNvbQorCitvcgorCisgY3VybCAtRiAnZmlsZT1AImxvY2FsZmlsZSI7ZmlsZW5hbWU9Im5hbWVpbnBvc3QiJyBleGFtcGxlLmNvbQorCitOb3RlIHRoYXQgaWYgYSBmaWxlbmFtZS9wYXRoIGlzIHF1b3RlZCBieSBkb3VibGUtcXVvdGVzLCBhbnkgZG91YmxlLXF1b3RlCitvciBiYWNrc2xhc2ggd2l0aGluIHRoZSBmaWxlbmFtZSBtdXN0IGJlIGVzY2FwZWQgYnkgYmFja3NsYXNoLgorCitTZWUgZnVydGhlciBleGFtcGxlcyBhbmQgZGV0YWlscyBpbiB0aGUgTUFOVUFMLgorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1hY2NvdW50LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtYWNjb3VudC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxM2M0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtYWNjb3VudC5kCkBAIC0wLDAgKzEsMTAgQEAKK0xvbmc6IGZ0cC1hY2NvdW50CitBcmc6IDxkYXRhPgorSGVscDogQWNjb3VudCBkYXRhIHN0cmluZworUHJvdG9jb2xzOiBGVFAKK0FkZGVkOiA3LjEzLjAKKy0tLQorV2hlbiBhbiBGVFAgc2VydmVyIGFza3MgZm9yICJhY2NvdW50IGRhdGEiIGFmdGVyIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQgaGFzCitiZWVuIHByb3ZpZGVkLCB0aGlzIGRhdGEgaXMgc2VudCBvZmYgdXNpbmcgdGhlIEFDQ1QgY29tbWFuZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIuZCBiL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1hbHRlcm5hdGl2ZS10by11c2VyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4MmJhOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1hbHRlcm5hdGl2ZS10by11c2VyLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogZnRwLWFsdGVybmF0aXZlLXRvLXVzZXIKK0FyZzogPGNvbW1hbmQ+CitIZWxwOiBTdHJpbmcgdG8gcmVwbGFjZSBVU0VSIFtuYW1lXQorUHJvdG9jb2xzOiBGVFAKK0FkZGVkOiA3LjE1LjUKKy0tLQorSWYgYXV0aGVudGljYXRpbmcgd2l0aCB0aGUgVVNFUiBhbmQgUEFTUyBjb21tYW5kcyBmYWlscywgc2VuZCB0aGlzIGNvbW1hbmQuCitXaGVuIGNvbm5lY3RpbmcgdG8gVHVtYmxld2VlZCdzIFNlY3VyZSBUcmFuc3BvcnQgc2VydmVyIG92ZXIgRlRQUyB1c2luZyBhCitjbGllbnQgY2VydGlmaWNhdGUsIHVzaW5nICJTSVRFIEFVVEgiIHdpbGwgdGVsbCB0aGUgc2VydmVyIHRvIHJldHJpZXZlIHRoZQordXNlcm5hbWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtY3JlYXRlLWRpcnMuZCBiL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1jcmVhdGUtZGlycy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtY3JlYXRlLWRpcnMuZApAQCAtMCwwICsxLDggQEAKK0xvbmc6IGZ0cC1jcmVhdGUtZGlycworUHJvdG9jb2xzOiBGVFAgU0ZUUAorSGVscDogQ3JlYXRlIHRoZSByZW1vdGUgZGlycyBpZiBub3QgcHJlc2VudAorU2VlLWFsc286IGNyZWF0ZS1kaXJzCistLS0KK1doZW4gYW4gRlRQIG9yIFNGVFAgVVJML29wZXJhdGlvbiB1c2VzIGEgcGF0aCB0aGF0IGRvZXNuJ3QgY3VycmVudGx5IGV4aXN0IG9uCit0aGUgc2VydmVyLCB0aGUgc3RhbmRhcmQgYmVoYXZpb3Igb2YgY3VybCBpcyB0byBmYWlsLiBVc2luZyB0aGlzIG9wdGlvbiwgY3VybAord2lsbCBpbnN0ZWFkIGF0dGVtcHQgdG8gY3JlYXRlIG1pc3NpbmcgZGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtbWV0aG9kLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtbWV0aG9kLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhYTUyMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1tZXRob2QuZApAQCAtMCwwICsxLDIxIEBACitMb25nOiBmdHAtbWV0aG9kCitBcmc6IDxtZXRob2Q+CitIZWxwOiBDb250cm9sIENXRCB1c2FnZQorUHJvdG9jb2xzOiBGVFAKK0FkZGVkOiA3LjE1LjEKKy0tLQorQ29udHJvbCB3aGF0IG1ldGhvZCBjdXJsIHNob3VsZCB1c2UgdG8gcmVhY2ggYSBmaWxlIG9uIGFuIEZUUChTKQorc2VydmVyLiBUaGUgbWV0aG9kIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZXM6CisuUlMKKy5JUCBtdWx0aWN3ZAorY3VybCBkb2VzIGEgc2luZ2xlIENXRCBvcGVyYXRpb24gZm9yIGVhY2ggcGF0aCBwYXJ0IGluIHRoZSBnaXZlbiBVUkwuIEZvciBkZWVwCitoaWVyYXJjaGllcyB0aGlzIG1lYW5zIHZlcnkgbWFueSBjb21tYW5kcy4gVGhpcyBpcyBob3cgUkZDIDE3Mzggc2F5cyBpdCBzaG91bGQKK2JlIGRvbmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBzbG93ZXN0IGJlaGF2aW9yLgorLklQIG5vY3dkCitjdXJsIGRvZXMgbm8gQ1dEIGF0IGFsbC4gY3VybCB3aWxsIGRvIFNJWkUsIFJFVFIsIFNUT1IgZXRjIGFuZCBnaXZlIGEgZnVsbAorcGF0aCB0byB0aGUgc2VydmVyIGZvciBhbGwgdGhlc2UgY29tbWFuZHMuIFRoaXMgaXMgdGhlIGZhc3Rlc3QgYmVoYXZpb3IuCisuSVAgc2luZ2xlY3dkCitjdXJsIGRvZXMgb25lIENXRCB3aXRoIHRoZSBmdWxsIHRhcmdldCBkaXJlY3RvcnkgYW5kIHRoZW4gb3BlcmF0ZXMgb24gdGhlIGZpbGUKK1wmIm5vcm1hbGx5IiAobGlrZSBpbiB0aGUgbXVsdGljd2QgY2FzZSkuIFRoaXMgaXMgc29tZXdoYXQgbW9yZSBzdGFuZGFyZHMKK2NvbXBsaWFudCB0aGFuICdub2N3ZCcgYnV0IHdpdGhvdXQgdGhlIGZ1bGwgcGVuYWx0eSBvZiAnbXVsdGljd2QnLgorLlJFCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtcGFzdi5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXBhc3YuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDEwM2UyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXBhc3YuZApAQCAtMCwwICsxLDE2IEBACitMb25nOiBmdHAtcGFzdgorSGVscDogVXNlIFBBU1YvRVBTViBpbnN0ZWFkIG9mIFBPUlQKK1Byb3RvY29sczogRlRQCitBZGRlZDogNy4xMS4wCitTZWUtYWxzbzogZGlzYWJsZS1lcHN2CistLS0KK1VzZSBwYXNzaXZlIG1vZGUgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24uIFBhc3NpdmUgaXMgdGhlIGludGVybmFsIGRlZmF1bHQKK2JlaGF2aW9yLCBidXQgdXNpbmcgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYSBwcmV2aW91cyAtLWZ0cC1wb3J0CitvcHRpb24uCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgb25seSB0aGUgZmlyc3Qgb25lIGlzIHVzZWQuIFVuZG9pbmcgYW4KK2VuZm9yY2VkIHBhc3NpdmUgcmVhbGx5IGlzbid0IGRvYWJsZSBidXQgeW91IG11c3QgdGhlbiBpbnN0ZWFkIGVuZm9yY2UgdGhlCitjb3JyZWN0IC0tZnRwLXBvcnQgYWdhaW4uCisKK1Bhc3NpdmUgbW9kZSBtZWFucyB0aGF0IGN1cmwgd2lsbCB0cnkgdGhlIEVQU1YgY29tbWFuZCBmaXJzdCBhbmQgdGhlbiBQQVNWLAordW5sZXNzIC0tZGlzYWJsZS1lcHN2IGlzIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtcG9ydC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXBvcnQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODUyZTkwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXBvcnQuZApAQCAtMCwwICsxLDMyIEBACitMb25nOiBmdHAtcG9ydAorQXJnOiA8YWRkcmVzcz4KK0hlbHA6IFVzZSBQT1JUIGluc3RlYWQgb2YgUEFTVgorU2hvcnQ6IFAKK1Byb3RvY29sczogRlRQCitTZWUtYWxzbzogZnRwLXBhc3YgZGlzYWJsZS1lcHJ0CistLS0KK1JldmVyc2VzIHRoZSBkZWZhdWx0IGluaXRpYXRvci9saXN0ZW5lciByb2xlcyB3aGVuIGNvbm5lY3Rpbmcgd2l0aCBGVFAuIFRoaXMKK29wdGlvbiBtYWtlcyBjdXJsIHVzZSBhY3RpdmUgbW9kZS4gY3VybCB0aGVuIHRlbGxzIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCBiYWNrCit0byB0aGUgY2xpZW50J3Mgc3BlY2lmaWVkIGFkZHJlc3MgYW5kIHBvcnQsIHdoaWxlIHBhc3NpdmUgbW9kZSBhc2tzIHRoZSBzZXJ2ZXIKK3RvIHNldHVwIGFuIElQIGFkZHJlc3MgYW5kIHBvcnQgZm9yIGl0IHRvIGNvbm5lY3QgdG8uIDxhZGRyZXNzPiBzaG91bGQgYmUgb25lCitvZjoKKy5SUworLklQIGludGVyZmFjZQoraS5lICJldGgwIiB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZSdzIElQIGFkZHJlc3MgeW91IHdhbnQgdG8gdXNlIChVbml4IG9ubHkpCisuSVAgIklQIGFkZHJlc3MiCitpLmUgIjE5Mi4xNjguMTAuMSIgdG8gc3BlY2lmeSB0aGUgZXhhY3QgSVAgYWRkcmVzcworLklQICJob3N0IG5hbWUiCitpLmUgIm15Lmhvc3QuZG9tYWluIiB0byBzcGVjaWZ5IHRoZSBtYWNoaW5lCisuSVAgIi0iCittYWtlIGN1cmwgcGljayB0aGUgc2FtZSBJUCBhZGRyZXNzIHRoYXQgaXMgYWxyZWFkeSB1c2VkIGZvciB0aGUgY29udHJvbAorY29ubmVjdGlvbgorLlJFCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gRGlzYWJsZSB0aGUKK3VzZSBvZiBQT1JUIHdpdGggLS1mdHAtcGFzdi4gRGlzYWJsZSB0aGUgYXR0ZW1wdCB0byB1c2UgdGhlIEVQUlQgY29tbWFuZAoraW5zdGVhZCBvZiBQT1JUIGJ5IHVzaW5nIC0tZGlzYWJsZS1lcHJ0LiBFUFJUIGlzIHJlYWxseSBQT1JUKysuCisKK1NpbmNlIDcuMTkuNSwgeW91IGNhbiBhcHBlbmQgXCYiOltzdGFydF0tW2VuZF1cJiIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBhZGRyZXNzLAordG8gdGVsbCBjdXJsIHdoYXQgVENQIHBvcnQgcmFuZ2UgdG8gdXNlLiBUaGF0IG1lYW5zIHlvdSBzcGVjaWZ5IGEgcG9ydCByYW5nZSwKK2Zyb20gYSBsb3dlciB0byBhIGhpZ2hlciBudW1iZXIuIEEgc2luZ2xlIG51bWJlciB3b3JrcyBhcyB3ZWxsLCBidXQgZG8gbm90ZQordGhhdCBpdCBpbmNyZWFzZXMgdGhlIHJpc2sgb2YgZmFpbHVyZSBzaW5jZSB0aGUgcG9ydCBtYXkgbm90IGJlIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1wcmV0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtcHJldC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYzRjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtcHJldC5kCkBAIC0wLDAgKzEsOCBAQAorTG9uZzogZnRwLXByZXQKK0hlbHA6IFNlbmQgUFJFVCBiZWZvcmUgUEFTVgorUHJvdG9jb2xzOiBGVFAKK0FkZGVkOiA3LjIwLjAKKy0tLQorVGVsbCBjdXJsIHRvIHNlbmQgYSBQUkVUIGNvbW1hbmQgYmVmb3JlIFBBU1YgKGFuZCBFUFNWKS4gQ2VydGFpbiBGVFAgc2VydmVycywKK21haW5seSBkcmZ0cGQsIHJlcXVpcmUgdGhpcyBub24tc3RhbmRhcmQgY29tbWFuZCBmb3IgZGlyZWN0b3J5IGxpc3RpbmdzIGFzCit3ZWxsIGFzIHVwIGFuZCBkb3dubG9hZHMgaW4gUEFTViBtb2RlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNraXAtcGFzdi1pcC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNraXAtcGFzdi1pcC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmFiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc2tpcC1wYXN2LWlwLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogZnRwLXNraXAtcGFzdi1pcAorSGVscDogU2tpcCB0aGUgSVAgYWRkcmVzcyBmb3IgUEFTVgorUHJvdG9jb2xzOiBGVFAKK0FkZGVkOiA3LjE0LjIKK1NlZS1hbHNvOiBmdHAtcGFzdgorLS0tCitUZWxsIGN1cmwgdG8gbm90IHVzZSB0aGUgSVAgYWRkcmVzcyB0aGUgc2VydmVyIHN1Z2dlc3RzIGluIGl0cyByZXNwb25zZQordG8gY3VybCdzIFBBU1YgY29tbWFuZCB3aGVuIGN1cmwgY29ubmVjdHMgdGhlIGRhdGEgY29ubmVjdGlvbi4gSW5zdGVhZCBjdXJsCit3aWxsIHJlLXVzZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGl0IGFscmVhZHkgdXNlcyBmb3IgdGhlIGNvbnRyb2wKK2Nvbm5lY3Rpb24uCisKK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgUE9SVCwgRVBSVCBvciBFUFNWIGlzIHVzZWQgaW5zdGVhZCBvZiBQQVNWLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1jY2MtbW9kZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1jY2MtbW9kZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTAyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLWNjYy1tb2RlLmQKQEAgLTAsMCArMSwxMSBAQAorTG9uZzogZnRwLXNzbC1jY2MtbW9kZQorQXJnOiA8YWN0aXZlL3Bhc3NpdmU+CitIZWxwOiBTZXQgQ0NDIG1vZGUKK1Byb3RvY29sczogRlRQCitBZGRlZDogNy4xNi4yCitTZWUtYWxzbzogZnRwLXNzbC1jY2MKKy0tLQorU2V0cyB0aGUgQ0NDIG1vZGUuIFRoZSBwYXNzaXZlIG1vZGUgd2lsbCBub3QgaW5pdGlhdGUgdGhlIHNodXRkb3duLCBidXQKK2luc3RlYWQgd2FpdCBmb3IgdGhlIHNlcnZlciB0byBkbyBpdCwgYW5kIHdpbGwgbm90IHJlcGx5IHRvIHRoZSBzaHV0ZG93biBmcm9tCit0aGUgc2VydmVyLiBUaGUgYWN0aXZlIG1vZGUgaW5pdGlhdGVzIHRoZSBzaHV0ZG93biBhbmQgd2FpdHMgZm9yIGEgcmVwbHkgZnJvbQordGhlIHNlcnZlci4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1zc2wtY2NjLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLWNjYy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWRjNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLWNjYy5kCkBAIC0wLDAgKzEsMTAgQEAKK0xvbmc6IGZ0cC1zc2wtY2NjCitIZWxwOiBTZW5kIENDQyBhZnRlciBhdXRoZW50aWNhdGluZworUHJvdG9jb2xzOiBGVFAKK1NlZS1hbHNvOiBzc2wgZnRwLXNzbC1jY2MtbW9kZQorQWRkZWQ6IDcuMTYuMQorLS0tCitVc2UgQ0NDIChDbGVhciBDb21tYW5kIENoYW5uZWwpIFNodXRzIGRvd24gdGhlIFNTTC9UTFMgbGF5ZXIgYWZ0ZXIKK2F1dGhlbnRpY2F0aW5nLiBUaGUgcmVzdCBvZiB0aGUgY29udHJvbCBjaGFubmVsIGNvbW11bmljYXRpb24gd2lsbCBiZQordW5lbmNyeXB0ZWQuIFRoaXMgYWxsb3dzIE5BVCByb3V0ZXJzIHRvIGZvbGxvdyB0aGUgRlRQIHRyYW5zYWN0aW9uLiBUaGUKK2RlZmF1bHQgbW9kZSBpcyBwYXNzaXZlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1jb250cm9sLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLWNvbnRyb2wuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2E4MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1jb250cm9sLmQKQEAgLTAsMCArMSw4IEBACitMb25nOiBmdHAtc3NsLWNvbnRyb2wKK0hlbHA6IFJlcXVpcmUgU1NML1RMUyBmb3IgRlRQIGxvZ2luLCBjbGVhciBmb3IgdHJhbnNmZXIKK1Byb3RvY29sczogRlRQCitBZGRlZDogNy4xNi4wCistLS0KK1JlcXVpcmUgU1NML1RMUyBmb3IgdGhlIEZUUCBsb2dpbiwgY2xlYXIgZm9yIHRyYW5zZmVyLiAgQWxsb3dzIHNlY3VyZQorYXV0aGVudGljYXRpb24sIGJ1dCBub24tZW5jcnlwdGVkIGRhdGEgdHJhbnNmZXJzIGZvciBlZmZpY2llbmN5LiAgRmFpbHMgdGhlCit0cmFuc2ZlciBpZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBTU0wvVExTLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1yZXFkLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLXJlcWQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgwNDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvZnRwLXNzbC1yZXFkLmQKQEAgLTAsMCArMSwzIEBACitMb25nOiBmdHAtc3NsLXJlcWQKK0hlbHA6IFJlcXVpcmUgU1NML1RMUworUmVkaXJlY3Q6IHNzbC1yZXFkCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9mdHAtc3NsLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlNDhhMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2Z0cC1zc2wuZApAQCAtMCwwICsxLDMgQEAKK0xvbmc6IGZ0cC1zc2wKK0hlbHA6IFRyeSBTU0wvVExTCitSZWRpcmVjdDogc3NsCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9nZW4ucGwgYi9kb2NzL2NtZGxpbmUtb3B0cy9nZW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Q5ZTNjZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2dlbi5wbApAQCAtMCwwICsxLDM3NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK215ICRzb21lX2Rpcj0iLiI7CisKK29wZW5kaXIobXkgJGRoLCAkc29tZV9kaXIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbmRpciAkc29tZV9kaXI6ICQhIjsKK215IEBzID0gZ3JlcCB7IC9cLmQkLyAmJiAtZiAiJHNvbWVfZGlyLyRfIiB9IHJlYWRkaXIoJGRoKTsKK2Nsb3NlZGlyICRkaDsKKworbXkgJW9wdHNob3J0OworbXkgJW9wdGxvbmc7CitteSAlaGVscGxvbmc7CitteSAlYXJnbG9uZzsKK215ICVyZWRpcmxvbmc7CitteSAlcHJvdG9sb25nOworCisjIGdldCB0aGUgbG9uZyBuYW1lIHZlcnNpb24sIHJldHVybiB0aGUgbWFuIHBhZ2Ugc3RyaW5nCitzdWIgbWFucGFnZWlmeSB7CisgICAgbXkgKCRrKT1AXzsKKyAgICBteSAkbDsKKyAgICBpZigkb3B0bG9uZ3ska30gbmUgIiIpIHsKKyAgICAgICAgIyBib3RoIHNob3J0ICsgbG9uZworICAgICAgICAkbCA9ICJcXGZJLSIuJG9wdGxvbmd7JGt9LiIsIC0tJGtcXGZQIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgICMgb25seSBsb25nCisgICAgICAgICRsID0gIlxcZkktLSRrXFxmUCI7CisgICAgfQorICAgIHJldHVybiAkbDsKK30KKworc3ViIHByaW50ZGVzYyB7CisgICAgbXkgQGRlc2MgPSBAXzsKKyAgICBmb3IgbXkgJGQgKEBkZXNjKSB7CisgICAgICAgICMgc2tpcCBsaW5lcyBzdGFydGluZyB3aXRoIHNwYWNlIChleGFtcGxlcykKKyAgICAgICAgaWYoJGQgPX4gL15bXiBdLykgeworICAgICAgICAgICAgZm9yIG15ICRrIChrZXlzICVvcHRsb25nKSB7CisgICAgICAgICAgICAgICAgbXkgJGwgPSBtYW5wYWdlaWZ5KCRrKTsKKyAgICAgICAgICAgICAgICAkZCA9fiBzLy0tJGsoW15hLXowLTlfLV0pLyRsJDEvOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50ICRkOworICAgIH0KK30KKworc3ViIHNlZWFsc28geworICAgIG15KCRzdGFuZGFsb25lLCAkZGF0YSk9QF87CisgICAgaWYoJHN0YW5kYWxvbmUpIHsKKyAgICAgICAgcmV0dXJuIHNwcmludGYKKyAgICAgICAgICAgICIuU0ggXCJTRUUgQUxTT1wiXG4kZGF0YVxuIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiAiU2VlIGFsc28gJGRhdGEuICI7CisgICAgfQorfQorCitzdWIgb3ZlcnJpZGVzIHsKKyAgICBteSAoJHN0YW5kYWxvbmUsICRkYXRhKT1AXzsKKyAgICBpZigkc3RhbmRhbG9uZSkgeworICAgICAgICByZXR1cm4gIi5TSCBcIk9WRVJSSURFU1wiXG4kZGF0YVxuIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiAkZGF0YTsKKyAgICB9Cit9CisKK3N1YiBwcm90b2NvbHMgeworICAgIG15ICgkc3RhbmRhbG9uZSwgJGRhdGEpPUBfOworICAgIGlmKCRzdGFuZGFsb25lKSB7CisgICAgICAgIHJldHVybiAiLlNIIFwiUFJPVE9DT0xTXCJcbiRkYXRhXG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIoJGRhdGEpICI7CisgICAgfQorfQorCitzdWIgYWRkZWQgeworICAgIG15ICgkc3RhbmRhbG9uZSwgJGRhdGEpPUBfOworICAgIGlmKCRzdGFuZGFsb25lKSB7CisgICAgICAgIHJldHVybiAiLlNIIFwiQURERURcIlxuQWRkZWQgaW4gY3VybCB2ZXJzaW9uICRkYXRhXG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuICJBZGRlZCBpbiAkYWRkZWQuICI7CisgICAgfQorfQorCitzdWIgc2luZ2xlIHsKKyAgICBteSAoJGYsICRzdGFuZGFsb25lKT1AXzsKKyAgICBvcGVuKEYsICI8JGYiKSB8fAorICAgICAgICByZXR1cm4gMTsKKyAgICBteSAkc2hvcnQ7CisgICAgbXkgJGxvbmc7CisgICAgbXkgJHRhZ3M7CisgICAgbXkgJGFkZGVkOworICAgIG15ICRwcm90b2NvbHM7CisgICAgbXkgJGFyZzsKKyAgICBteSAkbXV0ZXhlZDsKKyAgICBteSAkcmVxdWlyZXM7CisgICAgbXkgJHJlZGlyZWN0OworICAgIG15ICRzZWVhbHNvOworICAgIG15ICRtYWdpYzsgIyBjbWRsaW5lIHNwZWNpYWwgb3B0aW9uCisgICAgd2hpbGUoPEY+KSB7CisgICAgICAgIGlmKC9eU2hvcnQ6ICooLikvaSkgeworICAgICAgICAgICAgJHNob3J0PSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eTG9uZzogKiguKikvaSkgeworICAgICAgICAgICAgJGxvbmc9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15BZGRlZDogKiguKikvaSkgeworICAgICAgICAgICAgJGFkZGVkPSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eVGFnczogKiguKikvaSkgeworICAgICAgICAgICAgJHRhZ3M9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15Bcmc6ICooLiopL2kpIHsKKyAgICAgICAgICAgICRhcmc9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15NYWdpYzogKiguKikvaSkgeworICAgICAgICAgICAgJG1hZ2ljPSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eTXV0ZXhlZDogKiguKikvaSkgeworICAgICAgICAgICAgJG11dGV4ZWQ9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15Qcm90b2NvbHM6ICooLiopL2kpIHsKKyAgICAgICAgICAgICRwcm90b2NvbHM9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15TZWUtYWxzbzogKiguKikvaSkgeworICAgICAgICAgICAgJHNlZWFsc289JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15SZXF1aXJlczogKiguKikvaSkgeworICAgICAgICAgICAgJHJlcXVpcmVzPSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eUmVkaXJlY3Q6ICooLiopL2kpIHsKKyAgICAgICAgICAgICRyZWRpcmVjdD0kMTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigvXkhlbHA6ICooLiopL2kpIHsKKyAgICAgICAgICAgIDsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigvXi0tLS8pIHsKKyAgICAgICAgICAgIGlmKCEkbG9uZykgeworICAgICAgICAgICAgICAgIHByaW50IFNUREVSUiAiV0FSTjogbm8gJ0xvbmc6JyBpbiAkZlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaG9tcDsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiV0FSTjogdW5yZWNvZ25pemVkIGxpbmUgaW4gJGYsIGlnbm9yaW5nOlxuOickXyc7IgorICAgICAgICB9CisgICAgfQorICAgIG15IEBkZXN0OworICAgIHdoaWxlKDxGPikgeworICAgICAgICBwdXNoIEBkZXNjLCAkXzsKKyAgICB9CisgICAgY2xvc2UoRik7CisgICAgbXkgJG9wdDsKKyAgICBpZihkZWZpbmVkKCRzaG9ydCkgJiYgJGxvbmcpIHsKKyAgICAgICAgJG9wdCA9ICItJHNob3J0LCAtLSRsb25nIjsKKyAgICB9CisgICAgZWxzaWYoJHNob3J0ICYmICEkbG9uZykgeworICAgICAgICAkb3B0ID0gIi0kc2hvcnQiOworICAgIH0KKyAgICBlbHNpZigkbG9uZyAmJiAhJHNob3J0KSB7CisgICAgICAgICRvcHQgPSAiLS0kbG9uZyI7CisgICAgfQorCisgICAgaWYoJGFyZykgeworICAgICAgICAkb3B0IC49ICIgJGFyZyI7CisgICAgfQorCisgICAgaWYoJHN0YW5kYWxvbmUpIHsKKyAgICAgICAgcHJpbnQgIi5USCBjdXJsIDEgXCIzMCBOb3YgMjAxNlwiIFwiY3VybCA3LjUyLjBcIiBcImN1cmwgbWFudWFsXCJcbiI7CisgICAgICAgIHByaW50ICIuU0ggT1BUSU9OXG4iOworICAgICAgICBwcmludCAiY3VybCAkb3B0XG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIi5JUCBcIiRvcHRcIlxuIjsKKyAgICB9CisgICAgaWYoJHJlZGlyZWN0KSB7CisgICAgICAgIG15ICRsID0gbWFucGFnZWlmeSgkcmVkaXJlY3QpOworICAgICAgICBwcmludCAiVXNlICRsIGluc3RlYWQhXG4iOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYoJHByb3RvY29scykgeworICAgICAgICAgICAgcHJpbnQgcHJvdG9jb2xzKCRzdGFuZGFsb25lLCAkcHJvdG9jb2xzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCRzdGFuZGFsb25lKSB7CisgICAgICAgIHByaW50ICIuU0ggREVTQ1JJUFRJT05cbiI7CisgICAgfQorCisgICAgcHJpbnRkZXNjKEBkZXNjKTsKKyAgICB1bmRlZiBAZGVzYzsKKworICAgIG15IEBmb290OworICAgIGlmKCRzZWVhbHNvKSB7CisgICAgICAgIG15IEBtPXNwbGl0KC8gLywgJHNlZWFsc28pOworICAgICAgICBteSAkbXN0cjsKKyAgICAgICAgZm9yIG15ICRrIChAbSkgeworICAgICAgICAgICAgbXkgJGwgPSBtYW5wYWdlaWZ5KCRrKTsKKyAgICAgICAgICAgICRtc3RyIC49IHNwcmludGYgIiVzJGwiLCAkbXN0cj8iIGFuZCAiOiIiOworICAgICAgICB9CisgICAgICAgIHB1c2ggQGZvb3QsIHNlZWFsc28oJHN0YW5kYWxvbmUsICRtc3RyKTsKKyAgICB9CisgICAgaWYoJHJlcXVpcmVzKSB7CisgICAgICAgIG15ICRsID0gbWFucGFnZWlmeSgkbG9uZyk7CisgICAgICAgIHB1c2ggQGZvb3QsICIkbCByZXF1aXJlcyB0aGF0IHRoZSB1bmRlcmx5aW5nIGxpYmN1cmwiLgorICAgICAgICAgICAgIiB3YXMgYnVpbHQgdG8gc3VwcG9ydCAkcmVxdWlyZXMuICI7CisgICAgfQorICAgIGlmKCRtdXRleGVkKSB7CisgICAgICAgIG15IEBtPXNwbGl0KC8gLywgJG11dGV4ZWQpOworICAgICAgICBteSAkbXN0cjsKKyAgICAgICAgZm9yIG15ICRrIChAbSkgeworICAgICAgICAgICAgbXkgJGwgPSBtYW5wYWdlaWZ5KCRrKTsKKyAgICAgICAgICAgICRtc3RyIC49IHNwcmludGYgIiVzJGwiLCAkbXN0cj8iIGFuZCAiOiIiOworICAgICAgICB9CisgICAgICAgIHB1c2ggQGZvb3QsIG92ZXJyaWRlcygkc3RhbmRhbG9uZSwgIlRoaXMgb3B0aW9uIG92ZXJyaWRlcyAkbXN0ci4gIik7CisgICAgfQorICAgIGlmKCRhZGRlZCkgeworICAgICAgICBwdXNoIEBmb290LCBhZGRlZCgkc3RhbmRhbG9uZSwgJGFkZGVkKTsKKyAgICB9CisgICAgaWYoJGZvb3RbMF0pIHsKKyAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgcHJpbnQgQGZvb3Q7CisgICAgICAgIHByaW50ICJcbiI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgZ2V0c2hvcnRsb25nIHsKKyAgICBteSAoJGYpPUBfOworICAgIG9wZW4oRiwgIjwkZiIpOworICAgIG15ICRzaG9ydDsKKyAgICBteSAkbG9uZzsKKyAgICBteSAkaGVscDsKKyAgICBteSAkYXJnOworICAgIG15ICRwcm90b2NvbHM7CisgICAgd2hpbGUoPEY+KSB7CisgICAgICAgIGlmKC9eU2hvcnQ6ICguKS9pKSB7CisgICAgICAgICAgICAkc2hvcnQ9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL15Mb25nOiAoLiopL2kpIHsKKyAgICAgICAgICAgICRsb25nPSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eSGVscDogKC4qKS9pKSB7CisgICAgICAgICAgICAkaGVscD0kMTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigvXkFyZzogKC4qKS9pKSB7CisgICAgICAgICAgICAkYXJnPSQxOworICAgICAgICB9CisgICAgICAgIGVsc2lmKC9eUHJvdG9jb2xzOiAoLiopL2kpIHsKKyAgICAgICAgICAgICRwcm90b2NvbHM9JDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoL14tLS0vKSB7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlKEYpOworICAgIGlmKCRzaG9ydCkgeworICAgICAgICAkb3B0c2hvcnR7JHNob3J0fT0kbG9uZzsKKyAgICB9CisgICAgaWYoJGxvbmcpIHsKKyAgICAgICAgJG9wdGxvbmd7JGxvbmd9PSRzaG9ydDsKKyAgICAgICAgJGhlbHBsb25neyRsb25nfT0kaGVscDsKKyAgICAgICAgJGFyZ2xvbmd7JGxvbmd9PSRhcmc7CisgICAgICAgICRwcm90b2xvbmd7JGxvbmd9PSRwcm90b2NvbHM7CisgICAgfQorfQorCitzdWIgaW5kZXhvcHRpb25zIHsKKyAgZm9yZWFjaCBteSAkZiAoQHMpIHsKKyAgICBnZXRzaG9ydGxvbmcoJGYpOworICB9Cit9CisKK3N1YiBoZWFkZXIgeworICAgIG15ICgkZik9QF87CisgICAgb3BlbihGLCAiPCRmIik7CisgICAgbXkgQGQ7CisgICAgd2hpbGUoPEY+KSB7CisgICAgICAgIHB1c2ggQGQsICRfOworICAgIH0KKyAgICBjbG9zZShGKTsKKyAgICBwcmludGRlc2MoQGQpOworfQorCitzdWIgbGlzdGhlbHAgeworICAgIGZvcmVhY2ggbXkgJGYgKHNvcnQga2V5cyAlaGVscGxvbmcpIHsKKyAgICAgICAgbXkgJGxvbmcgPSAkZjsKKyAgICAgICAgbXkgJHNob3J0ID0gJG9wdGxvbmd7JGxvbmd9OworICAgICAgICBteSAkb3B0OworCisgICAgICAgIGlmKGRlZmluZWQoJHNob3J0KSAmJiAkbG9uZykgeworICAgICAgICAgICAgJG9wdCA9ICItJHNob3J0LCAtLSRsb25nIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkbG9uZyAmJiAhJHNob3J0KSB7CisgICAgICAgICAgICAkb3B0ID0gIiAgICAtLSRsb25nIjsKKyAgICAgICAgfQorCisgICAgICAgIG15ICRhcmcgPSAkYXJnbG9uZ3skbG9uZ307CisgICAgICAgIGlmKCRhcmcpIHsKKyAgICAgICAgICAgICRvcHQgLj0gIiAkYXJnIjsKKyAgICAgICAgfQorCisgICAgICAgIG15ICRsaW5lID0gc3ByaW50ZiAiICUtMTlzICVzXG4iLCAkb3B0LCAkaGVscGxvbmd7JGZ9OworCisgICAgICAgIGlmKGxlbmd0aCgkbGluZSkgPiA3OSkgeworICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXQVJOOiB0aGUgLS0kbG9uZyBsaW5lIGlzIHRvbyBsb25nXG4iOworICAgICAgICB9CisgICAgICAgIHByaW50ICRsaW5lOworICAgIH0KK30KKworc3ViIG1haW5wYWdlIHsKKyAgICAjIHNob3cgdGhlIHBhZ2UgaGVhZGVyCisgICAgaGVhZGVyKCJwYWdlLWhlYWRlciIpOworCisgICAgIyBvdXRwdXQgZG9jcyBmb3IgYWxsIG9wdGlvbnMKKyAgICBmb3JlYWNoIG15ICRmIChzb3J0IEBzKSB7CisgICAgICAgIHNpbmdsZSgkZiwgMCk7CisgICAgfQorfQorCitzdWIgc2hvd29ubHkgeworICAgIG15ICgkZikgPSBAXzsKKyAgICBpZihzaW5nbGUoJGYsIDEpKSB7CisgICAgICAgIHByaW50IFNUREVSUiAiJGY6IGZhaWxlZFxuIjsKKyAgICB9Cit9CisKK3N1YiBzaG93cHJvdG9jb2xzIHsKKyAgICBteSAlcHJvdHM7CisgICAgZm9yZWFjaCBteSAkZiAoa2V5cyAlb3B0bG9uZykgeworICAgICAgICBteSBAcCA9IHNwbGl0KC8gLywgJHByb3RvbG9uZ3skZn0pOworICAgICAgICBmb3IgbXkgJHAgKEBwKSB7CisgICAgICAgICAgICAkcHJvdHN7JHB9Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yKHNvcnQga2V5cyAlcHJvdHMpIHsKKyAgICAgICAgcHJpbnRmICIkXyAoJWQgb3B0aW9ucylcbiIsICRwcm90c3skX307CisgICAgfQorfQorCitzdWIgZ2V0YXJncyB7CisgICAgbXkgJGY7CisgICAgZG8geworICAgICAgICAkZiA9IHNoaWZ0IEBBUkdWOworICAgICAgICBpZigkZiBlcSAibWFpbnBhZ2UiKSB7CisgICAgICAgICAgICBtYWlucGFnZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRmIGVxICJsaXN0aGVscCIpIHsKKyAgICAgICAgICAgIGxpc3RoZWxwKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoJGYgZXEgInNpbmdsZSIpIHsKKyAgICAgICAgICAgIHNob3dvbmx5KHNoaWZ0IEBBUkdWKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkZiBlcSAicHJvdG9zIikgeworICAgICAgICAgICAgc2hvd3Byb3RvY29scygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSB3aGlsZSgkZik7CisKKyAgICBwcmludCAiVXNhZ2U6IGdlbi5wbCA8bWFpbnBhZ2UvbGlzdGhlbHAvc2luZ2xlIEZJTEUvcHJvdG9zPlxuIjsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIGxlYXJuIGFsbCBleGlzdGluZyBvcHRpb25zCitpbmRleG9wdGlvbnMoKTsKKworZ2V0YXJncygpOworCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9nZXQuZCBiL2RvY3MvY21kbGluZS1vcHRzL2dldC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlN2NiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9nZXQuZApAQCAtMCwwICsxLDE1IEBACitMb25nOiBnZXQKK1Nob3J0OiBHCitIZWxwOiBQdXQgdGhlIHBvc3QgZGF0YSBpbiB0aGUgVVJMIGFuZCB1c2UgR0VUCistLS0KK1doZW4gdXNlZCwgdGhpcyBvcHRpb24gd2lsbCBtYWtlIGFsbCBkYXRhIHNwZWNpZmllZCB3aXRoIC0tZGF0YSwgLS1kYXRhLWJpbmFyeQorb3IgLS1kYXRhLXVybGVuY29kZSB0byBiZSB1c2VkIGluIGFuIEhUVFAgR0VUIHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUgUE9TVAorcmVxdWVzdCB0aGF0IG90aGVyd2lzZSB3b3VsZCBiZSB1c2VkLiBUaGUgZGF0YSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwKK3dpdGggYSAnPycgc2VwYXJhdG9yLgorCitJZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggLS1oZWFkLCB0aGUgUE9TVCBkYXRhIHdpbGwgaW5zdGVhZCBiZSBhcHBlbmRlZCB0bwordGhlIFVSTCB3aXRoIGEgSEVBRCByZXF1ZXN0LgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyB1c2VkLiBUaGlzIGlzCitiZWNhdXNlIHVuZG9pbmcgYSBHRVQgZG9lc24ndCBtYWtlIHNlbnNlLCBidXQgeW91IHNob3VsZCB0aGVuIGluc3RlYWQgZW5mb3JjZQordGhlIGFsdGVybmF0aXZlIG1ldGhvZCB5b3UgcHJlZmVyLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvZ2xvYm9mZi5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvZ2xvYm9mZi5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjY1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9nbG9ib2ZmLmQKQEAgLTAsMCArMSw4IEBACitMb25nOiBnbG9ib2ZmCitTaG9ydDogZworSGVscDogRGlzYWJsZSBVUkwgc2VxdWVuY2VzIGFuZCByYW5nZXMgdXNpbmcge30gYW5kIFtdCistLS0KK1RoaXMgb3B0aW9uIHN3aXRjaGVzIG9mZiB0aGUgIlVSTCBnbG9iYmluZyBwYXJzZXIiLiBXaGVuIHlvdSBzZXQgdGhpcyBvcHRpb24sCit5b3UgY2FuIHNwZWNpZnkgVVJMcyB0aGF0IGNvbnRhaW4gdGhlIGxldHRlcnMge31bXSB3aXRob3V0IGhhdmluZyB0aGVtIGJlaW5nCitpbnRlcnByZXRlZCBieSBjdXJsIGl0c2VsZi4gTm90ZSB0aGF0IHRoZXNlIGxldHRlcnMgYXJlIG5vdCBub3JtYWwgbGVnYWwgVVJMCitjb250ZW50cyBidXQgdGhleSBzaG91bGQgYmUgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIFVSSSBzdGFuZGFyZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2hlYWQuZCBiL2RvY3MvY21kbGluZS1vcHRzL2hlYWQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTBhMTAwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvaGVhZC5kCkBAIC0wLDAgKzEsOCBAQAorTG9uZzogaGVhZAorU2hvcnQ6IEkKK0hlbHA6IFNob3cgZG9jdW1lbnQgaW5mbyBvbmx5CitQcm90b2NvbHM6IEhUVFAgRlRQIEZJTEUKKy0tLQorRmV0Y2ggdGhlIGhlYWRlcnMgb25seSEgSFRUUC1zZXJ2ZXJzIGZlYXR1cmUgdGhlIGNvbW1hbmQgSEVBRCB3aGljaCB0aGlzIHVzZXMKK3RvIGdldCBub3RoaW5nIGJ1dCB0aGUgaGVhZGVyIG9mIGEgZG9jdW1lbnQuIFdoZW4gdXNlZCBvbiBhbiBGVFAgb3IgRklMRSBmaWxlLAorY3VybCBkaXNwbGF5cyB0aGUgZmlsZSBzaXplIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9ubHkuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9oZWFkZXIuZCBiL2RvY3MvY21kbGluZS1vcHRzL2hlYWRlci5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjMzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9oZWFkZXIuZApAQCAtMCwwICsxLDM5IEBACitMb25nOiBoZWFkZXIKK1Nob3J0OiBICitBcmc6IDxoZWFkZXI+CitIZWxwOiBQYXNzIGN1c3RvbSBoZWFkZXIgTElORSB0byBzZXJ2ZXIKK1Byb3RvY29sczogSFRUUAorLS0tCisKK0V4dHJhIGhlYWRlciB0byBpbmNsdWRlIGluIHRoZSByZXF1ZXN0IHdoZW4gc2VuZGluZyBIVFRQIHRvIGEgc2VydmVyLiBZb3UgbWF5CitzcGVjaWZ5IGFueSBudW1iZXIgb2YgZXh0cmEgaGVhZGVycy4gTm90ZSB0aGF0IGlmIHlvdSBzaG91bGQgYWRkIGEgY3VzdG9tCitoZWFkZXIgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBvbmUgb2YgdGhlIGludGVybmFsIG9uZXMgY3VybCB3b3VsZCB1c2UsIHlvdXIKK2V4dGVybmFsbHkgc2V0IGhlYWRlciB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgaW50ZXJuYWwgb25lLiBUaGlzIGFsbG93cworeW91IHRvIG1ha2UgZXZlbiB0cmlja2llciBzdHVmZiB0aGFuIGN1cmwgd291bGQgbm9ybWFsbHkgZG8uIFlvdSBzaG91bGQgbm90CityZXBsYWNlIGludGVybmFsbHkgc2V0IGhlYWRlcnMgd2l0aG91dCBrbm93aW5nIHBlcmZlY3RseSB3ZWxsIHdoYXQgeW91J3JlCitkb2luZy4gUmVtb3ZlIGFuIGludGVybmFsIGhlYWRlciBieSBnaXZpbmcgYSByZXBsYWNlbWVudCB3aXRob3V0IGNvbnRlbnQgb24KK3RoZSByaWdodCBzaWRlIG9mIHRoZSBjb2xvbiwgYXMgaW46IC1IIFwmIkhvc3Q6Ii4gSWYgeW91IHNlbmQgdGhlIGN1c3RvbQoraGVhZGVyIHdpdGggbm8tdmFsdWUgdGhlbiBpdHMgaGVhZGVyIG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgc2VtaWNvbG9uLCBzdWNoCithcyBcLUggXCYiWC1DdXN0b20tSGVhZGVyOyIgdG8gc2VuZCAiWC1DdXN0b20tSGVhZGVyOiIuCisKK2N1cmwgd2lsbCBtYWtlIHN1cmUgdGhhdCBlYWNoIGhlYWRlciB5b3UgYWRkL3JlcGxhY2UgaXMgc2VudCB3aXRoIHRoZSBwcm9wZXIKK2VuZC1vZi1saW5lIG1hcmtlciwgeW91IHNob3VsZCB0aHVzIFxmQm5vdFxmUCBhZGQgdGhhdCBhcyBhIHBhcnQgb2YgdGhlIGhlYWRlcgorY29udGVudDogZG8gbm90IGFkZCBuZXdsaW5lcyBvciBjYXJyaWFnZSByZXR1cm5zLCB0aGV5IHdpbGwgb25seSBtZXNzIHRoaW5ncyB1cAorZm9yIHlvdS4KKworU2VlIGFsc28gdGhlIC0tdXNlci1hZ2VudCBhbmQgLS1yZWZlcmVyIG9wdGlvbnMuCisKK1N0YXJ0aW5nIGluIDcuMzcuMCwgeW91IG5lZWQgLS1wcm94eS1oZWFkZXIgdG8gc2VuZCBjdXN0b20gaGVhZGVycyBpbnRlbmRlZAorZm9yIGEgcHJveHkuCisKK0V4YW1wbGU6CisKKyBjdXJsIC1IICJYLUZpcnN0LU5hbWU6IEpvZSIgaHR0cDovL2V4YW1wbGUuY29tLworCitcZkJXQVJOSU5HXGZQOiBoZWFkZXJzIHNldCB3aXRoIHRoaXMgb3B0aW9uIHdpbGwgYmUgc2V0IGluIGFsbCByZXF1ZXN0cyAtIGV2ZW4KK2FmdGVyIHJlZGlyZWN0cyBhcmUgZm9sbG93ZWQsIGxpa2Ugd2hlbiB0b2xkIHdpdGggXGZCLUwsIC0tbG9jYXRpb25cZlAuIFRoaXMKK2NhbiBsZWFkIHRvIHRoZSBoZWFkZXIgYmVpbmcgc2VudCB0byBvdGhlciBob3N0cyB0aGFuIHRoZSBvcmlnaW5hbCBob3N0LCBzbworc2Vuc2l0aXZlIGhlYWRlcnMgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGNvbWJpbmVkIHdpdGggZm9sbG93aW5nCityZWRpcmVjdHMuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIGFkZC9yZXBsYWNlL3JlbW92ZSBtdWx0aXBsZSBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaG9zdHB1Ym1kNS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvaG9zdHB1Ym1kNS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTExNTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9ob3N0cHVibWQ1LmQKQEAgLTAsMCArMSw5IEBACitMb25nOiBob3N0cHVibWQ1CitBcmc6IDxtZDU+CitIZWxwOiBBY2NlcHRhYmxlIE1ENSBoYXNoIG9mIHRoZSBob3N0IHB1YmxpYyBrZXkKK1Byb3RvY29sczogU0ZUUCBTQ1AKK0FkZGVkOiA3LjE3LjEKKy0tLQorUGFzcyBhIHN0cmluZyBjb250YWluaW5nIDMyIGhleGFkZWNpbWFsIGRpZ2l0cy4gVGhlIHN0cmluZyBzaG91bGQKK2JlIHRoZSAxMjggYml0IE1ENSBjaGVja3N1bSBvZiB0aGUgcmVtb3RlIGhvc3QncyBwdWJsaWMga2V5LCBjdXJsIHdpbGwgcmVmdXNlCit0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBob3N0IHVubGVzcyB0aGUgbWQ1c3VtcyBtYXRjaC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2h0dHAxLjAuZCBiL2RvY3MvY21kbGluZS1vcHRzL2h0dHAxLjAuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWJiZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvaHR0cDEuMC5kCkBAIC0wLDAgKzEsMTAgQEAKK1Nob3J0OiAwCitMb25nOiBodHRwMS4wCitUYWdzOiBWZXJzaW9ucworUHJvdG9jb2xzOiBIVFRQCitBZGRlZDoKK011dGV4ZWQ6IGh0dHAxLjEgaHR0cDIKK0hlbHA6IFVzZSBIVFRQIDEuMAorLS0tCitUZWxscyBjdXJsIHRvIHVzZSBIVFRQIHZlcnNpb24gMS4wIGluc3RlYWQgb2YgdXNpbmcgaXRzIGludGVybmFsbHkgcHJlZmVycmVkCitIVFRQIHZlcnNpb24uCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9odHRwMS4xLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9odHRwMS4xLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlNmI1YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2h0dHAxLjEuZApAQCAtMCwwICsxLDggQEAKK0xvbmc6IGh0dHAxLjEKK1RhZ3M6IFZlcnNpb25zCitQcm90b2NvbHM6IEhUVFAKK0FkZGVkOiA3LjMzLjAKK011dGV4ZWQ6IGh0dHAxLjAgaHR0cDIKK0hlbHA6IFVzZSBIVFRQIDEuMQorLS0tCitUZWxscyBjdXJsIHRvIHVzZSBIVFRQIHZlcnNpb24gMS4xLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaHR0cDItcHJpb3Ita25vd2xlZGdlLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9odHRwMi1wcmlvci1rbm93bGVkZ2UuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzkzZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvaHR0cDItcHJpb3Ita25vd2xlZGdlLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogaHR0cDItcHJpb3Ita25vd2xlZGdlCitUYWdzOiBWZXJzaW9ucworUHJvdG9jb2xzOiBIVFRQCitBZGRlZDogNy40OS4wCitNdXRleGVkOiBodHRwMS4xIGh0dHAxLjAgaHR0cDIKK1JlcXVpcmVzOiBIVFRQLzIKK0hlbHA6IFVzZSBIVFRQIDIgd2l0aG91dCBIVFRQLzEuMSBVcGdyYWRlCistLS0KK1RlbGxzIGN1cmwgdG8gaXNzdWUgaXRzIG5vbi1UTFMgSFRUUCByZXF1ZXN0cyB1c2luZyBIVFRQLzIgd2l0aG91dCBIVFRQLzEuMQorVXBncmFkZS4gSXQgcmVxdWlyZXMgcHJpb3Iga25vd2xlZGdlIHRoYXQgdGhlIHNlcnZlciBzdXBwb3J0cyBIVFRQLzIgc3RyYWlnaHQKK2F3YXkuIEhUVFBTIHJlcXVlc3RzIHdpbGwgc3RpbGwgZG8gSFRUUC8yIHRoZSBzdGFuZGFyZCB3YXkgd2l0aCBuZWdvdGlhdGVkCitwcm90b2NvbCB2ZXJzaW9uIGluIHRoZSBUTFMgaGFuZHNoYWtlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaHR0cDIuZCBiL2RvY3MvY21kbGluZS1vcHRzL2h0dHAyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjZmYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2h0dHAyLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogaHR0cDIKK1RhZ3M6IFZlcnNpb25zCitQcm90b2NvbHM6IEhUVFAKK0FkZGVkOiA3LjMzLjAKK011dGV4ZWQ6IGh0dHAxLjEgaHR0cDEuMCBodHRwMi1wcmlvci1rbm93bGVkZ2UKK1JlcXVpcmVzOiBIVFRQLzIKK1NlZS1hbHNvOiBuby1hbHBuCitIZWxwOiBVc2UgSFRUUCAyCistLS0KK1RlbGxzIGN1cmwgdG8gdXNlIEhUVFAgdmVyc2lvbiAyLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaWdub3JlLWNvbnRlbnQtbGVuZ3RoLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9pZ25vcmUtY29udGVudC1sZW5ndGguZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUyNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvaWdub3JlLWNvbnRlbnQtbGVuZ3RoLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogaWdub3JlLWNvbnRlbnQtbGVuZ3RoCitIZWxwOiBJZ25vcmUgdGhlIHNpemUgb2YgdGhlIHJlbW90ZSByZXNvdXJjZQorUHJvdG9jb2xzOiBGVFAgSFRUUAorLS0tCitGb3IgSFRUUCwgSWdub3JlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKK3NlcnZlcnMgcnVubmluZyBBcGFjaGUgMS54LCB3aGljaCB3aWxsIHJlcG9ydCBpbmNvcnJlY3QgQ29udGVudC1MZW5ndGggZm9yCitmaWxlcyBsYXJnZXIgdGhhbiAyIGdpZ2FieXRlcy4KKworRm9yIEZUUCAoc2luY2UgNy40Ni4wKSwgc2tpcCB0aGUgUkVUUiBjb21tYW5kIHRvIGZpZ3VyZSBvdXQgdGhlIHNpemUgYmVmb3JlCitkb3dubG9hZGluZyBhIGZpbGUuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9pbmNsdWRlLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9pbmNsdWRlLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1ZDUxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2luY2x1ZGUuZApAQCAtMCwwICsxLDcgQEAKK0xvbmc6IGluY2x1ZGUKK1Nob3J0OiBpCitIZWxwOiBJbmNsdWRlIHByb3RvY29sIGhlYWRlcnMgaW4gdGhlIG91dHB1dAorU2VlLWFsc286IHZlcmJvc2UKKy0tLQorSW5jbHVkZSB0aGUgSFRUUC1oZWFkZXIgaW4gdGhlIG91dHB1dC4gVGhlIEhUVFAtaGVhZGVyIGluY2x1ZGVzIHRoaW5ncyBsaWtlCitzZXJ2ZXItbmFtZSwgZGF0ZSBvZiB0aGUgZG9jdW1lbnQsIEhUVFAtdmVyc2lvbiBhbmQgbW9yZS4uLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaW5zZWN1cmUuZCBiL2RvY3MvY21kbGluZS1vcHRzL2luc2VjdXJlLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkMGZhOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2luc2VjdXJlLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogaW5zZWN1cmUKK1Nob3J0OiBrCitIZWxwOiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB3aGVuIHVzaW5nIFNTTAorUHJvdG9jb2xzOiBUTFMKKy0tLQorVGhpcyBvcHRpb24gZXhwbGljaXRseSBhbGxvd3MgY3VybCB0byBwZXJmb3JtICJpbnNlY3VyZSIgU1NMIGNvbm5lY3Rpb25zIGFuZAordHJhbnNmZXJzLiBBbGwgU1NMIGNvbm5lY3Rpb25zIGFyZSBhdHRlbXB0ZWQgdG8gYmUgbWFkZSBzZWN1cmUgYnkgdXNpbmcgdGhlIENBCitjZXJ0aWZpY2F0ZSBidW5kbGUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuIFRoaXMgbWFrZXMgYWxsIGNvbm5lY3Rpb25zIGNvbnNpZGVyZWQKK1wmImluc2VjdXJlIiBmYWlsIHVubGVzcyAtLWluc2VjdXJlIGlzIHVzZWQuCisKK1NlZSB0aGlzIG9ubGluZSByZXNvdXJjZSBmb3IgZnVydGhlciBkZXRhaWxzOgorIGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbApkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaW50ZXJmYWNlLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9pbnRlcmZhY2UuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTg0Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvaW50ZXJmYWNlLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogaW50ZXJmYWNlCitBcmc6IDxuYW1lPgorSGVscDogVXNlIG5ldHdvcmsgSU5URVJGQUNFIChvciBhZGRyZXNzKQorU2VlLWFsc286IGRucy1pbnRlcmZhY2UKKy0tLQorCitQZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhIHNwZWNpZmllZCBpbnRlcmZhY2UuIFlvdSBjYW4gZW50ZXIgaW50ZXJmYWNlCituYW1lLCBJUCBhZGRyZXNzIG9yIGhvc3QgbmFtZS4gQW4gZXhhbXBsZSBjb3VsZCBsb29rIGxpa2U6CisKKyBjdXJsIC0taW50ZXJmYWNlIGV0aDA6MSBodHRwczovL3d3dy5leGFtcGxlLmNvbS8KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaXB2NC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvaXB2NC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDBjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9pcHY0LmQKQEAgLTAsMCArMSwxMiBAQAorU2hvcnQ6IDQKK0xvbmc6IGlwdjQKK1RhZ3M6IFZlcnNpb25zCitQcm90b2NvbHM6CitBZGRlZDoKK011dGV4ZWQ6IGlwdjYKK1JlcXVpcmVzOgorU2VlLWFsc286IGh0dHAxLjEgaHR0cDIKK0hlbHA6IFJlc29sdmUgbmFtZXMgdG8gSVB2NCBhZGRyZXNzZXMKKy0tLQorVGhpcyBvcHRpb24gdGVsbHMgY3VybCB0byByZXNvbHZlIG5hbWVzIHRvIElQdjQgYWRkcmVzc2VzIG9ubHksIGFuZCBub3QgZm9yCitleGFtcGxlIHRyeSBJUHY2LgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvaXB2Ni5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvaXB2Ni5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzkyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9pcHY2LmQKQEAgLTAsMCArMSwxMiBAQAorU2hvcnQ6IDYKK0xvbmc6IGlwdjYKK1RhZ3M6IFZlcnNpb25zCitQcm90b2NvbHM6CitBZGRlZDoKK011dGV4ZWQ6IGlwdjYKK1JlcXVpcmVzOgorU2VlLWFsc286IGh0dHAxLjEgaHR0cDIKK0hlbHA6IFJlc29sdmUgbmFtZXMgdG8gSVB2NiBhZGRyZXNzZXMKKy0tLQorVGhpcyBvcHRpb24gdGVsbHMgY3VybCB0byByZXNvbHZlIG5hbWVzIHRvIElQdjYgYWRkcmVzc2VzIG9ubHksIGFuZCBub3QgZm9yCitleGFtcGxlIHRyeSBJUHY0LgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvanVuay1zZXNzaW9uLWNvb2tpZXMuZCBiL2RvY3MvY21kbGluZS1vcHRzL2p1bmstc2Vzc2lvbi1jb29raWVzLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjY2Q5YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2p1bmstc2Vzc2lvbi1jb29raWVzLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzoganVuay1zZXNzaW9uLWNvb2tpZXMKK1Nob3J0OiBqCitIZWxwOiBJZ25vcmUgc2Vzc2lvbiBjb29raWVzIHJlYWQgZnJvbSBmaWxlCitQcm90b2NvbHM6IEhUVFAKK1NlZS1hbHNvOiBjb29raWUgY29va2llLWphcgorLS0tCitXaGVuIGN1cmwgaXMgdG9sZCB0byByZWFkIGNvb2tpZXMgZnJvbSBhIGdpdmVuIGZpbGUsIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSBpdAorZGlzY2FyZCBhbGwgInNlc3Npb24gY29va2llcyIuIFRoaXMgd2lsbCBiYXNpY2FsbHkgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgaWYKK2EgbmV3IHNlc3Npb24gaXMgc3RhcnRlZC4gVHlwaWNhbCBicm93c2VycyBhbHdheXMgZGlzY2FyZCBzZXNzaW9uIGNvb2tpZXMgd2hlbgordGhleSdyZSBjbG9zZWQgZG93bi4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2tlZXBhbGl2ZS10aW1lLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9rZWVwYWxpdmUtdGltZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTZlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9rZWVwYWxpdmUtdGltZS5kCkBAIC0wLDAgKzEsMTMgQEAKK0xvbmc6IGtlZXBhbGl2ZS10aW1lCitBcmc6IDxzZWNvbmRzPgorSGVscDogSW50ZXJ2YWwgdGltZSBmb3Iga2VlcGFsaXZlIHByb2JlcworQWRkZWQ6IDcuMTguMAorLS0tCitUaGlzIG9wdGlvbiBzZXRzIHRoZSB0aW1lIGEgY29ubmVjdGlvbiBuZWVkcyB0byByZW1haW4gaWRsZSBiZWZvcmUgc2VuZGluZwora2VlcGFsaXZlIHByb2JlcyBhbmQgdGhlIHRpbWUgYmV0d2VlbiBpbmRpdmlkdWFsIGtlZXBhbGl2ZSBwcm9iZXMuIEl0IGlzCitjdXJyZW50bHkgZWZmZWN0aXZlIG9uIG9wZXJhdGluZyBzeXN0ZW1zIG9mZmVyaW5nIHRoZSBUQ1BfS0VFUElETEUgYW5kCitUQ1BfS0VFUElOVFZMIHNvY2tldCBvcHRpb25zIChtZWFuaW5nIExpbnV4LCByZWNlbnQgQUlYLCBIUC1VWCBhbmQgbW9yZSkuIFRoaXMKK29wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIC0tbm8ta2VlcGFsaXZlIGlzIHVzZWQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4gSWYKK3Vuc3BlY2lmaWVkLCB0aGUgb3B0aW9uIGRlZmF1bHRzIHRvIDYwIHNlY29uZHMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9rZXktdHlwZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMva2V5LXR5cGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM5YmNkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMva2V5LXR5cGUuZApAQCAtMCwwICsxLDkgQEAKK0xvbmc6IGtleS10eXBlCitBcmc6IDx0eXBlPgorSGVscDogUHJpdmF0ZSBrZXkgZmlsZSB0eXBlIChERVIvUEVNL0VORykKK1Byb3RvY29sczogVExTCistLS0KK1ByaXZhdGUga2V5IGZpbGUgdHlwZS4gU3BlY2lmeSB3aGljaCB0eXBlIHlvdXIgLS1rZXkgcHJvdmlkZWQgcHJpdmF0ZSBrZXkKK2lzLiBERVIsIFBFTSwgYW5kIEVORyBhcmUgc3VwcG9ydGVkLiBJZiBub3Qgc3BlY2lmaWVkLCBQRU0gaXMgYXNzdW1lZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMva2V5LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9rZXkuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY1ODNhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMva2V5LmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzoga2V5CitBcmc6IDxrZXk+CitQcm90b2NvbHM6IFRMUyBTU0gKK0hlbHA6IFByaXZhdGUga2V5IGZpbGUgbmFtZQorLS0tCitQcml2YXRlIGtleSBmaWxlIG5hbWUuIEFsbG93cyB5b3UgdG8gcHJvdmlkZSB5b3VyIHByaXZhdGUga2V5IGluIHRoaXMgc2VwYXJhdGUKK2ZpbGUuIEZvciBTU0gsIGlmIG5vdCBzcGVjaWZpZWQsIGN1cmwgdHJpZXMgdGhlIGZvbGxvd2luZyBjYW5kaWRhdGVzIGluIG9yZGVyOgorJ34vLnNzaC9pZF9yc2EnLCAnfi8uc3NoL2lkX2RzYScsICcuL2lkX3JzYScsICcuL2lkX2RzYScuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2tyYi5kIGIvZG9jcy9jbWRsaW5lLW9wdHMva3JiLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NDdhZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2tyYi5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IGtyYgorQXJnOiA8bGV2ZWw+CitIZWxwOiBFbmFibGUgS2VyYmVyb3Mgd2l0aCBzZWN1cml0eSA8bGV2ZWw+CitQcm90b2NvbHM6IEZUUAorUmVxdWlyZXM6IEtlcmJlcm9zCistLS0KK0VuYWJsZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBhbmQgdXNlLiBUaGUgbGV2ZWwgbXVzdCBiZSBlbnRlcmVkIGFuZCBzaG91bGQKK2JlIG9uZSBvZiAnY2xlYXInLCAnc2FmZScsICdjb25maWRlbnRpYWwnLCBvciAncHJpdmF0ZScuIFNob3VsZCB5b3UgdXNlIGEKK2xldmVsIHRoYXQgaXMgbm90IG9uZSBvZiB0aGVzZSwgJ3ByaXZhdGUnIHdpbGwgaW5zdGVhZCBiZSB1c2VkLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9rcmI0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9rcmI0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliYWI4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2tyYjQuZApAQCAtMCwwICsxLDIgQEAKK0xvbmc6IGtyYjQKK1JlZGlyZWN0OiBrcmIKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2xpYmN1cmwuZCBiL2RvY3MvY21kbGluZS1vcHRzL2xpYmN1cmwuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjEzMmZlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbGliY3VybC5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IGxpYmN1cmwKK0FyZzogPGZpbGU+CitIZWxwOiBEdW1wIGxpYmN1cmwgZXF1aXZhbGVudCBjb2RlIG9mIHRoaXMgY29tbWFuZCBsaW5lCitBZGRlZDogNy4xNi4xCistLS0KK0FwcGVuZCB0aGlzIG9wdGlvbiB0byBhbnkgb3JkaW5hcnkgY3VybCBjb21tYW5kIGxpbmUsIGFuZCB5b3Ugd2lsbCBnZXQgYQorbGliY3VybC11c2luZyBDIHNvdXJjZSBjb2RlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgdGhhdCBkb2VzIHRoZSBlcXVpdmFsZW50CitvZiB3aGF0IHlvdXIgY29tbWFuZC1saW5lIG9wZXJhdGlvbiBkb2VzIQorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IGdpdmVuIGZpbGUgbmFtZSB3aWxsIGJlCit1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbGltaXQtcmF0ZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbGltaXQtcmF0ZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODRhODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9saW1pdC1yYXRlLmQKQEAgLTAsMCArMSwxOCBAQAorTG9uZzogbGltaXQtcmF0ZQorQXJnOiA8c3BlZWQ+CitIZWxwOiBMaW1pdCB0cmFuc2ZlciBzcGVlZCB0byBSQVRFCistLS0KK1NwZWNpZnkgdGhlIG1heGltdW0gdHJhbnNmZXIgcmF0ZSB5b3Ugd2FudCBjdXJsIHRvIHVzZSAtIGZvciBib3RoIGRvd25sb2FkcworYW5kIHVwbG9hZHMuIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaW1pdGVkIHBpcGUgYW5kIHlvdSdkIGxpa2UKK3lvdXIgdHJhbnNmZXIgbm90IHRvIHVzZSB5b3VyIGVudGlyZSBiYW5kd2lkdGguIFRvIG1ha2UgaXQgc2xvd2VyIHRoYW4gaXQKK290aGVyd2lzZSB3b3VsZCBiZS4KKworVGhlIGdpdmVuIHNwZWVkIGlzIG1lYXN1cmVkIGluIGJ5dGVzL3NlY29uZCwgdW5sZXNzIGEgc3VmZml4IGlzIGFwcGVuZGVkLgorQXBwZW5kaW5nICdrJyBvciAnSycgd2lsbCBjb3VudCB0aGUgbnVtYmVyIGFzIGtpbG9ieXRlcywgJ20nIG9yIE0nIG1ha2VzIGl0CittZWdhYnl0ZXMsIHdoaWxlICdnJyBvciAnRycgbWFrZXMgaXQgZ2lnYWJ5dGVzLiBFeGFtcGxlczogMjAwSywgM20gYW5kIDFHLgorCitJZiB5b3UgYWxzbyB1c2UgdGhlIC0tc3BlZWQtbGltaXQgb3B0aW9uLCB0aGF0IG9wdGlvbiB3aWxsIHRha2UgcHJlY2VkZW5jZSBhbmQKK21pZ2h0IGNyaXBwbGUgdGhlIHJhdGUtbGltaXRpbmcgc2xpZ2h0bHksIHRvIGhlbHAga2VlcGluZyB0aGUgc3BlZWQtbGltaXQKK2xvZ2ljIHdvcmtpbmcuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL2xpc3Qtb25seS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbGlzdC1vbmx5LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1NjMwNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2xpc3Qtb25seS5kCkBAIC0wLDAgKzEsMjQgQEAKK0xvbmc6IGxpc3Qtb25seQorU2hvcnQ6IGwKK1Byb3RvY29sczogRlRQIFBPUDMKK0hlbHA6IExpc3Qgb25seSBtb2RlCitBZGRlZDogNy4yMS41CistLS0KKyhGVFApCitXaGVuIGxpc3RpbmcgYW4gRlRQIGRpcmVjdG9yeSwgdGhpcyBzd2l0Y2ggZm9yY2VzIGEgbmFtZS1vbmx5IHZpZXcuIFRoaXMgaXMKK2VzcGVjaWFsbHkgdXNlZnVsIGlmIHRoZSB1c2VyIHdhbnRzIHRvIG1hY2hpbmUtcGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuIEZUUAorZGlyZWN0b3J5IHNpbmNlIHRoZSBub3JtYWwgZGlyZWN0b3J5IHZpZXcgZG9lc24ndCB1c2UgYSBzdGFuZGFyZCBsb29rIG9yCitmb3JtYXQuIFdoZW4gdXNlZCBsaWtlIHRoaXMsIHRoZSBvcHRpb24gY2F1c2VzIGEgTkxTVCBjb21tYW5kIHRvIGJlIHNlbnQgdG8KK3RoZSBzZXJ2ZXIgaW5zdGVhZCBvZiBMSVNULgorCitOb3RlOiBTb21lIEZUUCBzZXJ2ZXJzIGxpc3Qgb25seSBmaWxlcyBpbiB0aGVpciByZXNwb25zZSB0byBOTFNUOyB0aGV5IGRvIG5vdAoraW5jbHVkZSBzdWItZGlyZWN0b3JpZXMgYW5kIHN5bWJvbGljIGxpbmtzLgorCisoUE9QMykKK1doZW4gcmV0cmlldmluZyBhIHNwZWNpZmljIGVtYWlsIGZyb20gUE9QMywgdGhpcyBzd2l0Y2ggZm9yY2VzIGEgTElTVCBjb21tYW5kCit0byBiZSBwZXJmb3JtZWQgaW5zdGVhZCBvZiBSRVRSLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgdGhlIHVzZXIgd2FudHMKK3RvIHNlZSBpZiBhIHNwZWNpZmljIG1lc3NhZ2UgaWQgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIgYW5kIHdoYXQgc2l6ZSBpdCBpcy4KKworTm90ZTogV2hlbiBjb21iaW5lZCB3aXRoIC0tcmVxdWVzdCwgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2VuZCBhbiBVSURMCitjb21tYW5kIGluc3RlYWQsIHNvIHRoZSB1c2VyIG1heSB1c2UgdGhlIGVtYWlsJ3MgdW5pcXVlIGlkZW50aWZpZXIgcmF0aGVyIHRoYW4KK2l0J3MgbWVzc2FnZSBpZCB0byBtYWtlIHRoZSByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbG9jYWwtcG9ydC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbG9jYWwtcG9ydC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmI0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9sb2NhbC1wb3J0LmQKQEAgLTAsMCArMSw5IEBACitMb25nOiBsb2NhbC1wb3J0CitBcmc6IDxudW0vcmFuZ2U+CitIZWxwOiBGb3JjZSB1c2Ugb2YgUkFOR0UgZm9yIGxvY2FsIHBvcnQgbnVtYmVycworQWRkZWQ6IDcuMTUuMgorLS0tCitTZXQgYSBwcmVmZXJyZWQgc2luZ2xlIG51bWJlciBvciByYW5nZSAoRlJPTS1UTykgb2YgbG9jYWwgcG9ydCBudW1iZXJzIHRvIHVzZQorZm9yIHRoZSBjb25uZWN0aW9uKHMpLiAgTm90ZSB0aGF0IHBvcnQgbnVtYmVycyBieSBuYXR1cmUgYXJlIGEgc2NhcmNlIHJlc291cmNlCit0aGF0IHdpbGwgYmUgYnVzeSBhdCB0aW1lcyBzbyBzZXR0aW5nIHRoaXMgcmFuZ2UgdG8gc29tZXRoaW5nIHRvbyBuYXJyb3cgbWlnaHQKK2NhdXNlIHVubmVjZXNzYXJ5IGNvbm5lY3Rpb24gc2V0dXAgZmFpbHVyZXMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9sb2NhdGlvbi10cnVzdGVkLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9sb2NhdGlvbi10cnVzdGVkLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1YTg3MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2xvY2F0aW9uLXRydXN0ZWQuZApAQCAtMCwwICsxLDkgQEAKK0xvbmc6IGxvY2F0aW9uLXRydXN0ZWQKK0hlbHA6IExpa2UgLS1sb2NhdGlvbiwgYW5kIHNlbmQgYXV0aCB0byBvdGhlciBob3N0cworUHJvdG9jb2xzOiBIVFRQCitTZWUtYWxzbzogdXNlcgorLS0tCitMaWtlIC0tbG9jYXRpb24sIGJ1dCB3aWxsIGFsbG93IHNlbmRpbmcgdGhlIG5hbWUgKyBwYXNzd29yZCB0byBhbGwgaG9zdHMgdGhhdAordGhlIHNpdGUgbWF5IHJlZGlyZWN0IHRvLiBUaGlzIG1heSBvciBtYXkgbm90IGludHJvZHVjZSBhIHNlY3VyaXR5IGJyZWFjaCBpZgordGhlIHNpdGUgcmVkaXJlY3RzIHlvdSB0byBhIHNpdGUgdG8gd2hpY2ggeW91J2xsIHNlbmQgeW91ciBhdXRoZW50aWNhdGlvbiBpbmZvCisod2hpY2ggaXMgcGxhaW50ZXh0IGluIHRoZSBjYXNlIG9mIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbG9jYXRpb24uZCBiL2RvY3MvY21kbGluZS1vcHRzL2xvY2F0aW9uLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MGU2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2xvY2F0aW9uLmQKQEAgLTAsMCArMSwyMyBAQAorTG9uZzogbG9jYXRpb24KK1Nob3J0OiBMCitIZWxwOiBGb2xsb3cgcmVkaXJlY3RzCitQcm90b2NvbHM6IEhUVFAKKy0tLQorSWYgdGhlIHNlcnZlciByZXBvcnRzIHRoYXQgdGhlIHJlcXVlc3RlZCBwYWdlIGhhcyBtb3ZlZCB0byBhIGRpZmZlcmVudAorbG9jYXRpb24gKGluZGljYXRlZCB3aXRoIGEgTG9jYXRpb246IGhlYWRlciBhbmQgYSAzWFggcmVzcG9uc2UgY29kZSksIHRoaXMKK29wdGlvbiB3aWxsIG1ha2UgY3VybCByZWRvIHRoZSByZXF1ZXN0IG9uIHRoZSBuZXcgcGxhY2UuIElmIHVzZWQgdG9nZXRoZXIgd2l0aAorLS1pbmNsdWRlIG9yIC0taGVhZCwgaGVhZGVycyBmcm9tIGFsbCByZXF1ZXN0ZWQgcGFnZXMgd2lsbCBiZSBzaG93bi4gV2hlbgorYXV0aGVudGljYXRpb24gaXMgdXNlZCwgY3VybCBvbmx5IHNlbmRzIGl0cyBjcmVkZW50aWFscyB0byB0aGUgaW5pdGlhbAoraG9zdC4gSWYgYSByZWRpcmVjdCB0YWtlcyBjdXJsIHRvIGEgZGlmZmVyZW50IGhvc3QsIGl0IHdvbid0IGJlIGFibGUgdG8KK2ludGVyY2VwdCB0aGUgdXNlcitwYXNzd29yZC4gU2VlIGFsc28gLS1sb2NhdGlvbi10cnVzdGVkIG9uIGhvdyB0byBjaGFuZ2UKK3RoaXMuIFlvdSBjYW4gbGltaXQgdGhlIGFtb3VudCBvZiByZWRpcmVjdHMgdG8gZm9sbG93IGJ5IHVzaW5nIHRoZQorLS1tYXgtcmVkaXJzIG9wdGlvbi4KKworV2hlbiBjdXJsIGZvbGxvd3MgYSByZWRpcmVjdCBhbmQgdGhlIHJlcXVlc3QgaXMgbm90IGEgcGxhaW4gR0VUIChmb3IgZXhhbXBsZQorUE9TVCBvciBQVVQpLCBpdCB3aWxsIGRvIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCB3aXRoIGEgR0VUIGlmIHRoZSBIVFRQIHJlc3BvbnNlCit3YXMgMzAxLCAzMDIsIG9yIDMwMy4gSWYgdGhlIHJlc3BvbnNlIGNvZGUgd2FzIGFueSBvdGhlciAzeHggY29kZSwgY3VybCB3aWxsCityZS1zZW5kIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCB1c2luZyB0aGUgc2FtZSB1bm1vZGlmaWVkIG1ldGhvZC4KKworWW91IGNhbiB0ZWxsIGN1cmwgdG8gbm90IGNoYW5nZSB0aGUgbm9uLUdFVCByZXF1ZXN0IG1ldGhvZCB0byBHRVQgYWZ0ZXIgYSAzMHgKK3Jlc3BvbnNlIGJ5IHVzaW5nIHRoZSBkZWRpY2F0ZWQgb3B0aW9ucyBmb3IgdGhhdDogLS1wb3N0MzAxLCAtLXBvc3QzMDIgYW5kCistLXBvc3QzMDMuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9sb2dpbi1vcHRpb25zLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9sb2dpbi1vcHRpb25zLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyYWYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL2xvZ2luLW9wdGlvbnMuZApAQCAtMCwwICsxLDEzIEBACitMb25nOiBsb2dpbi1vcHRpb25zCitBcmc6IDxvcHRpb25zPgorUHJvdG9jb2xzOiBJTUFQIFBPUDMgU01UUAorQWRkZWQ6IDcuMzQuMAorLS0tCitTcGVjaWZ5IHRoZSBsb2dpbiBvcHRpb25zIHRvIHVzZSBkdXJpbmcgc2VydmVyIGF1dGhlbnRpY2F0aW9uLgorCitZb3UgY2FuIHVzZSB0aGUgbG9naW4gb3B0aW9ucyB0byBzcGVjaWZ5IHByb3RvY29sIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBtYXkKK2JlIHVzZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uLiBBdCBwcmVzZW50IG9ubHkgSU1BUCwgUE9QMyBhbmQgU01UUCBzdXBwb3J0Citsb2dpbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9naW4gb3B0aW9ucyBwbGVhc2Ugc2VlCitSRkMgMjM4NCwgUkZDIDUwOTIgYW5kIElFVEYgZHJhZnQgZHJhZnQtZWFyaGFydC11cmwtc210cC0wMC50eHQKKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1hdXRoLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYWlsLWF1dGguZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGNmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1hdXRoLmQKQEAgLTAsMCArMSwxMCBAQAorTG9uZzogbWFpbC1hdXRoCitBcmc6IDxhZGRyZXNzPgorUHJvdG9jb2xzOiBTTVRQCitIZWxwOiBPcmlnaW5hdG9yIGFkZHJlc3Mgb2YgdGhlIG9yaWdpbmFsIGVtYWlsCitBZGRlZDogNy4yNS4wCitTZWUtYWxzbzogbWFpbC1yY3B0IG1haWwtZnJvbQorLS0tCitTcGVjaWZ5IGEgc2luZ2xlIGFkZHJlc3MuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGF1dGhlbnRpY2F0aW9uCithZGRyZXNzIChpZGVudGl0eSkgb2YgYSBzdWJtaXR0ZWQgbWVzc2FnZSB0aGF0IGlzIGJlaW5nIHJlbGF5ZWQgdG8gYW5vdGhlcgorc2VydmVyLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1mcm9tLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYWlsLWZyb20uZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDkzMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1mcm9tLmQKQEAgLTAsMCArMSw4IEBACitMb25nOiBtYWlsLWZyb20KK0FyZzogPGFkZHJlc3M+CitIZWxwOiBNYWlsIGZyb20gdGhpcyBhZGRyZXNzCitQcm90b2NvbHM6IFNNVFAKK0FkZGVkOiA3LjIwLjAKK1NlZS1hbHNvOiBtYWlsLXJjcHQgbWFpbC1hdXRoCistLS0KK1NwZWNpZnkgYSBzaW5nbGUgYWRkcmVzcyB0aGF0IHRoZSBnaXZlbiBtYWlsIHNob3VsZCBnZXQgc2VudCBmcm9tLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1yY3B0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYWlsLXJjcHQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ3Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWFpbC1yY3B0LmQKQEAgLTAsMCArMSwxOSBAQAorTG9uZzogbWFpbC1yY3B0CitBcmc6IDxhZGRyZXNzPgorSGVscDogTWFpbCBmcm9tIHRoaXMgYWRkcmVzcworUHJvdG9jb2xzOiBTTVRQCitBZGRlZDogNy4yMC4wCistLS0KK1NwZWNpZnkgYSBzaW5nbGUgYWRkcmVzcywgdXNlciBuYW1lIG9yIG1haWxpbmcgbGlzdCBuYW1lLiBSZXBlYXQgdGhpcworb3B0aW9uIHNldmVyYWwgdGltZXMgdG8gc2VuZCB0byBtdWx0aXBsZSByZWNpcGllbnRzLgorCitXaGVuIHBlcmZvcm1pbmcgYSBtYWlsIHRyYW5zZmVyLCB0aGUgcmVjaXBpZW50IHNob3VsZCBzcGVjaWZ5IGEgdmFsaWQgZW1haWwKK2FkZHJlc3MgdG8gc2VuZCB0aGUgbWFpbCB0by4KKworV2hlbiBwZXJmb3JtaW5nIGFuIGFkZHJlc3MgdmVyaWZpY2F0aW9uIChWUkZZIGNvbW1hbmQpLCB0aGUgcmVjaXBpZW50IHNob3VsZCBiZQorc3BlY2lmaWVkIGFzIHRoZSB1c2VyIG5hbWUgb3IgdXNlciBuYW1lIGFuZCBkb21haW4gKGFzIHBlciBTZWN0aW9uIDMuNSBvZgorUkZDNTMyMSkuIChBZGRlZCBpbiA3LjM0LjApCisKK1doZW4gcGVyZm9ybWluZyBhIG1haWxpbmcgbGlzdCBleHBhbmQgKEVYUE4gY29tbWFuZCksIHRoZSByZWNpcGllbnQgc2hvdWxkIGJlCitzcGVjaWZpZWQgdXNpbmcgdGhlIG1haWxpbmcgbGlzdCBuYW1lLCBzdWNoIGFzICJGcmllbmRzIiBvciAiTG9uZG9uLU9mZmljZSIuCisoQWRkZWQgaW4gNy4zNC4wKQpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbWF4LWZpbGVzaXplLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYXgtZmlsZXNpemUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTJlZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWF4LWZpbGVzaXplLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogbWF4LWZpbGVzaXplCitBcmc6IDxieXRlcz4KK0hlbHA6IE1heGltdW0gZmlsZSBzaXplIHRvIGRvd25sb2FkCitTZWUtYWxzbzogbGltaXQtcmF0ZQorLS0tCitTcGVjaWZ5IHRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiBhIGZpbGUgdG8gZG93bmxvYWQuIElmIHRoZSBmaWxlCityZXF1ZXN0ZWQgaXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgdGhlIHRyYW5zZmVyIHdpbGwgbm90IHN0YXJ0IGFuZCBjdXJsIHdpbGwKK3JldHVybiB3aXRoIGV4aXQgY29kZSA2My4KKworXGZCTk9URTpcZlAgVGhlIGZpbGUgc2l6ZSBpcyBub3QgYWx3YXlzIGtub3duIHByaW9yIHRvIGRvd25sb2FkLCBhbmQgZm9yIHN1Y2gKK2ZpbGVzIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZXZlbiBpZiB0aGUgZmlsZSB0cmFuc2ZlciBlbmRzIHVwIGJlaW5nIGxhcmdlcgordGhhbiB0aGlzIGdpdmVuIGxpbWl0LiBUaGlzIGNvbmNlcm5zIGJvdGggRlRQIGFuZCBIVFRQIHRyYW5zZmVycy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL21heC1yZWRpcnMuZCBiL2RvY3MvY21kbGluZS1vcHRzL21heC1yZWRpcnMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGI4MjRiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWF4LXJlZGlycy5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IG1heC1yZWRpcnMKK0FyZzogPG51bT4KK0hlbHA6IE1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyBhbGxvd2VkCitQcm90b2NvbHM6IEhUVFAKKy0tLQorU2V0IG1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0aW9uLWZvbGxvd2luZ3MgYWxsb3dlZC4gV2hlbiAtLWxvY2F0aW9uIGlzIHVzZWQsCitpcyB1c2VkIHRvIHByZXZlbnQgY3VybCBmcm9tIGZvbGxvd2luZyByZWRpcmVjdGlvbnMgXCYiaW4gYWJzdXJkdW0iLiBCeQorZGVmYXVsdCwgdGhlIGxpbWl0IGlzIHNldCB0byA1MCByZWRpcmVjdGlvbnMuIFNldCB0aGlzIG9wdGlvbiB0byAtMSB0byBtYWtlIGl0Cit1bmxpbWl0ZWQuCisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL21heC10aW1lLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYXgtdGltZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjM0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9tYXgtdGltZS5kCkBAIC0wLDAgKzEsMTMgQEAKK0xvbmc6IG1heC10aW1lCitTaG9ydDogbQorQXJnOiA8dGltZT4KK0hlbHA6IE1heGltdW0gdGltZSBhbGxvd2VkIGZvciB0aGUgdHJhbnNmZXIKK1NlZS1hbHNvOiBjb25uZWN0LXRpbWVvdXQKKy0tLQorTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlIHdob2xlIG9wZXJhdGlvbiB0byB0YWtlLiAgVGhpcyBpcwordXNlZnVsIGZvciBwcmV2ZW50aW5nIHlvdXIgYmF0Y2ggam9icyBmcm9tIGhhbmdpbmcgZm9yIGhvdXJzIGR1ZSB0byBzbG93CituZXR3b3JrcyBvciBsaW5rcyBnb2luZyBkb3duLiAgU2luY2UgNy4zMi4wLCB0aGlzIG9wdGlvbiBhY2NlcHRzIGRlY2ltYWwKK3ZhbHVlcywgYnV0IHRoZSBhY3R1YWwgdGltZW91dCB3aWxsIGRlY3JlYXNlIGluIGFjY3VyYWN5IGFzIHRoZSBzcGVjaWZpZWQKK3RpbWVvdXQgaW5jcmVhc2VzIGluIGRlY2ltYWwgcHJlY2lzaW9uLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9tZXRhbGluay5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWV0YWxpbmsuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQ3ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbWV0YWxpbmsuZApAQCAtMCwwICsxLDI3IEBACitMb25nOiBtZXRhbGluaworSGVscDogUHJvY2VzcyBnaXZlbiBVUkxzIGFzIG1ldGFsaW5rIFhNTCBmaWxlCitBZGRlZDogNy4yNy4wCitSZXF1aXJlczogbWV0YWxpbmsKKy0tLQorVGhpcyBvcHRpb24gY2FuIHRlbGwgY3VybCB0byBwYXJzZSBhbmQgcHJvY2VzcyBhIGdpdmVuIFVSSSBhcyBNZXRhbGluayBmaWxlCisoYm90aCB2ZXJzaW9uIDMgYW5kIDQgKFJGQyA1ODU0KSBhcmUgc3VwcG9ydGVkKSBhbmQgbWFrZSB1c2Ugb2YgdGhlIG1pcnJvcnMKK2xpc3RlZCB3aXRoaW4gZm9yIGZhaWxvdmVyIGlmIHRoZXJlIGFyZSBlcnJvcnMgKHN1Y2ggYXMgdGhlIGZpbGUgb3Igc2VydmVyIG5vdAorYmVpbmcgYXZhaWxhYmxlKS4gSXQgd2lsbCBhbHNvIHZlcmlmeSB0aGUgaGFzaCBvZiB0aGUgZmlsZSBhZnRlciB0aGUgZG93bmxvYWQKK2NvbXBsZXRlcy4gVGhlIE1ldGFsaW5rIGZpbGUgaXRzZWxmIGlzIGRvd25sb2FkZWQgYW5kIHByb2Nlc3NlZCBpbiBtZW1vcnkgYW5kCitub3Qgc3RvcmVkIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KKworRXhhbXBsZSB0byB1c2UgYSByZW1vdGUgTWV0YWxpbmsgZmlsZToKKworIGN1cmwgLS1tZXRhbGluayBodHRwOi8vd3d3LmV4YW1wbGUuY29tL2V4YW1wbGUubWV0YWxpbmsKKworVG8gdXNlIGEgTWV0YWxpbmsgZmlsZSBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0sIHVzZSBGSUxFIHByb3RvY29sIChmaWxlOi8vKToKKworIGN1cmwgLS1tZXRhbGluayBmaWxlOi8vZXhhbXBsZS5tZXRhbGluaworCitQbGVhc2Ugbm90ZSB0aGF0IGlmIEZJTEUgcHJvdG9jb2wgaXMgZGlzYWJsZWQsIHRoZXJlIGlzIG5vIHdheSB0byB1c2UgYSBsb2NhbAorTWV0YWxpbmsgZmlsZSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuIEFsc28gbm90ZSB0aGF0IGlmIC0tbWV0YWxpbmsgYW5kCistLWluY2x1ZGUgYXJlIHVzZWQgdG9nZXRoZXIsIC0taW5jbHVkZSB3aWxsIGJlIGlnbm9yZWQuIFRoaXMgaXMgYmVjYXVzZQoraW5jbHVkaW5nIGhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIHdpbGwgYnJlYWsgTWV0YWxpbmsgcGFyc2VyIGFuZCBpZiB0aGUKK2hlYWRlcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBNZXRhbGluayBmaWxlLCBoYXNoIGNoZWNrIHdpbGwKK2ZhaWwuCisKZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25lZ290aWF0ZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbmVnb3RpYXRlLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNmI5MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL25lZ290aWF0ZS5kCkBAIC0wLDAgKzEsMTUgQEAKK0xvbmc6IG5lZ290aWF0ZQorSGVscDogVXNlIEhUVFAgTmVnb3RpYXRlIChTUE5FR08pIGF1dGhlbnRpY2F0aW9uCitQcm90b2NvbHM6IEhUVFAKK1NlZS1hbHNvOiBiYXNpYyBudGxtIGFueWF1dGggcHJveHktbmVnb3RpYXRlCistLS0KK0VuYWJsZXMgTmVnb3RpYXRlIChTUE5FR08pIGF1dGhlbnRpY2F0aW9uLgorCitUaGlzIG9wdGlvbiByZXF1aXJlcyBhIGxpYnJhcnkgYnVpbHQgd2l0aCBHU1MtQVBJIG9yIFNTUEkgc3VwcG9ydC4gVXNlCistLXZlcnNpb24gdG8gc2VlIGlmIHlvdXIgY3VybCBzdXBwb3J0cyBHU1MtQVBJL1NTUEkgb3IgU1BORUdPLgorCitXaGVuIHVzaW5nIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBmYWtlIC0tdXNlciBvcHRpb24gdG8gYWN0aXZhdGUKK3RoZSBhdXRoZW50aWNhdGlvbiBjb2RlIHByb3Blcmx5LiBTZW5kaW5nIGEgJy11IDonIGlzIGVub3VnaCBhcyB0aGUgdXNlciBuYW1lCithbmQgcGFzc3dvcmQgZnJvbSB0aGUgLS11c2VyIG9wdGlvbiBhcmVuJ3QgYWN0dWFsbHkgdXNlZC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25ldHJjLWZpbGUuZCBiL2RvY3MvY21kbGluZS1vcHRzL25ldHJjLWZpbGUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTE4YjRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbmV0cmMtZmlsZS5kCkBAIC0wLDAgKzEsMTIgQEAKK0xvbmc6IG5ldHJjLWZpbGUKK0hlbHA6IFNwZWNpZnkgRklMRSBmb3IgbmV0cmMKK0FyZzogPGZpbGVtYW1lPgorQWRkZWQ6IDcuMjEuNQorTXV0ZXhlZDogbmV0cmMKKy0tLQorVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byAtLW5ldHJjLCBleGNlcHQgdGhhdCB5b3UgcHJvdmlkZSB0aGUgcGF0aCAoYWJzb2x1dGUKK29yIHJlbGF0aXZlKSB0byB0aGUgbmV0cmMgZmlsZSB0aGF0IEN1cmwgc2hvdWxkIHVzZS4gIFlvdSBjYW4gb25seSBzcGVjaWZ5IG9uZQorbmV0cmMgZmlsZSBwZXIgaW52b2NhdGlvbi4gSWYgc2V2ZXJhbCAtLW5ldHJjLWZpbGUgb3B0aW9ucyBhcmUgcHJvdmlkZWQsCit0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgorCitJdCB3aWxsIGFiaWRlIGJ5IC0tbmV0cmMtb3B0aW9uYWwgaWYgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbmV0cmMtb3B0aW9uYWwuZCBiL2RvY3MvY21kbGluZS1vcHRzL25ldHJjLW9wdGlvbmFsLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NTQwMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL25ldHJjLW9wdGlvbmFsLmQKQEAgLTAsMCArMSw3IEBACitMb25nOiBuZXRyYy1vcHRpb25hbAorSGVscDogVXNlIGVpdGhlciAubmV0cmMgb3IgVVJMCitNdXRleGVkOiBuZXRyYworU2VlLWFsc286IG5ldHJjLWZpbGUKKy0tLQorVmVyeSBzaW1pbGFyIHRvIC0tbmV0cmMsIGJ1dCB0aGlzIG9wdGlvbiBtYWtlcyB0aGUgLm5ldHJjIHVzYWdlIFxmQm9wdGlvbmFsXGZQCithbmQgbm90IG1hbmRhdG9yeSBhcyB0aGUgLS1uZXRyYyBvcHRpb24gZG9lcy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25ldHJjLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9uZXRyYy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjI2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9uZXRyYy5kCkBAIC0wLDAgKzEsMTcgQEAKK0xvbmc6IG5ldHJjCitTaG9ydDogbgorSGVscDogTXVzdCByZWFkIC5uZXRyYyBmb3IgdXNlciBuYW1lIGFuZCBwYXNzd29yZAorLS0tCitNYWtlcyBjdXJsIHNjYW4gdGhlIFxmSS5uZXRyY1xmUCAoXGZJX25ldHJjXGZQIG9uIFdpbmRvd3MpIGZpbGUgaW4gdGhlIHVzZXIncworaG9tZSBkaXJlY3RvcnkgZm9yIGxvZ2luIG5hbWUgYW5kIHBhc3N3b3JkLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBGVFAgb24KK1VuaXguIElmIHVzZWQgd2l0aCBIVFRQLCBjdXJsIHdpbGwgZW5hYmxlIHVzZXIgYXV0aGVudGljYXRpb24uIFNlZQorXGZJbmV0cmMoNSlcZlAgXGZJZnRwKDEpXGZQIGZvciBkZXRhaWxzIG9uIHRoZSBmaWxlIGZvcm1hdC4gQ3VybCB3aWxsIG5vdAorY29tcGxhaW4gaWYgdGhhdCBmaWxlIGRvZXNuJ3QgaGF2ZSB0aGUgcmlnaHQgcGVybWlzc2lvbnMgKGl0IHNob3VsZCBub3QgYmUKK2VpdGhlciB3b3JsZC0gb3IgZ3JvdXAtcmVhZGFibGUpLiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIkhPTUUiIGlzIHVzZWQgdG8KK2ZpbmQgdGhlIGhvbWUgZGlyZWN0b3J5LgorCitBIHF1aWNrIGFuZCB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mIGhvdyB0byBzZXR1cCBhIFxmSS5uZXRyY1xmUCB0byBhbGxvdyBjdXJsCit0byBGVFAgdG8gdGhlIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIHdpdGggdXNlciBuYW1lIFwmJ215c2VsZicgYW5kIHBhc3N3b3JkCitcJidzZWNyZXQnIHNob3VsZCBsb29rIHNpbWlsYXIgdG86CisKKy5CICJtYWNoaW5lIGhvc3QuZG9tYWluLmNvbSBsb2dpbiBteXNlbGYgcGFzc3dvcmQgc2VjcmV0IgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbmV4dC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbmV4dC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjhjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9uZXh0LmQKQEAgLTAsMCArMSwyMCBAQAorU2hvcnQ6IDoKK0xvbmc6IG5leHQKK1RhZ3M6CitQcm90b2NvbHM6CitBZGRlZDogNy4zNi4wCitNYWdpYzogZGl2aWRlcgorSGVscDogTWFrZSBuZXh0IFVSTCB1c2UgaXRzIHNlcGFyYXRlIHNldCBvZiBvcHRpb25zCistLS0KK1RlbGxzIGN1cmwgdG8gdXNlIGEgc2VwYXJhdGUgb3BlcmF0aW9uIGZvciB0aGUgZm9sbG93aW5nIFVSTCBhbmQgYXNzb2NpYXRlZAorb3B0aW9ucy4gVGhpcyBhbGxvd3MgeW91IHRvIHNlbmQgc2V2ZXJhbCBVUkwgcmVxdWVzdHMsIGVhY2ggd2l0aCB0aGVpciBvd24KK3NwZWNpZmljIG9wdGlvbnMsIGZvciBleGFtcGxlLCBzdWNoIGFzIGRpZmZlcmVudCB1c2VyIG5hbWVzIG9yIGN1c3RvbSByZXF1ZXN0cworZm9yIGVhY2guCisKKy0tbmV4dCB3aWxsIHJlc2V0IGFsbCBsb2NhbCBvcHRpb25zIGFuZCBvbmx5IGdsb2JhbCBvbmVzIHdpbGwgaGF2ZSB0aGVpcgordmFsdWVzIHN1cnZpdmUgb3ZlciB0byB0aGUgb3BlcmF0aW9uIGZvbGxvd2luZyB0aGUgLS1uZXh0IGluc3RydWN0aW9uLiBHbG9iYWwKK29wdGlvbnMgaW5jbHVkZSAtLXZlcmJvc2UgYW5kIC0tZmFpbC1lYXJseS4KKworRm9yIGV4YW1wbGUsIHlvdSBjYW4gZG8gYm90aCBhIEdFVCBhbmQgYSBQT1NUIGluIGEgc2luZ2xlIGNvbW1hbmQgbGluZToKKworIGN1cmwgd3d3MS5leGFtcGxlLmNvbSAtLW5leHQgLWQgcG9zdHRoaXMgd3d3Mi5leGFtcGxlLmNvbQpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbm8tYWxwbi5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbm8tYWxwbi5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YWJiODMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9uby1hbHBuLmQKQEAgLTAsMCArMSwxMSBAQAorTG9uZzogbm8tYWxwbgorVGFnczogSFRUUC8yCitQcm90b2NvbHM6IEhUVFBTCitBZGRlZDogNy4zNi4wCitTZWUtYWxzbzogbm8tbnBuIGh0dHAyCitSZXF1aXJlczogVExTCitIZWxwOiBEaXNhYmxlIHRoZSBBTFBOIFRMUyBleHRlbnNpb24KKy0tLQorRGlzYWJsZSB0aGUgQUxQTiBUTFMgZXh0ZW5zaW9uLiBBTFBOIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBsaWJjdXJsIHdhcyBidWlsdAord2l0aCBhbiBTU0wgbGlicmFyeSB0aGF0IHN1cHBvcnRzIEFMUE4uIEFMUE4gaXMgdXNlZCBieSBhIGxpYmN1cmwgdGhhdCBzdXBwb3J0cworSFRUUC8yIHRvIG5lZ290aWF0ZSBIVFRQLzIgc3VwcG9ydCB3aXRoIHRoZSBzZXJ2ZXIgZHVyaW5nIGh0dHBzIHNlc3Npb25zLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbm8tYnVmZmVyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9uby1idWZmZXIuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbm8tYnVmZmVyLmQKQEAgLTAsMCArMSwxMSBAQAorTG9uZzogbm8tYnVmZmVyCitTaG9ydDogTgorSGVscDogRGlzYWJsZSBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBzdHJlYW0KKy0tLQorRGlzYWJsZXMgdGhlIGJ1ZmZlcmluZyBvZiB0aGUgb3V0cHV0IHN0cmVhbS4gSW4gbm9ybWFsIHdvcmsgc2l0dWF0aW9ucywgY3VybAord2lsbCB1c2UgYSBzdGFuZGFyZCBidWZmZXJlZCBvdXRwdXQgc3RyZWFtIHRoYXQgd2lsbCBoYXZlIHRoZSBlZmZlY3QgdGhhdCBpdAord2lsbCBvdXRwdXQgdGhlIGRhdGEgaW4gY2h1bmtzLCBub3QgbmVjZXNzYXJpbHkgZXhhY3RseSB3aGVuIHRoZSBkYXRhIGFycml2ZXMuCitVc2luZyB0aGlzIG9wdGlvbiB3aWxsIGRpc2FibGUgdGhhdCBidWZmZXJpbmcuCisKK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBuZWdhdGVkIG9wdGlvbiBuYW1lIGRvY3VtZW50ZWQuIFlvdSBjYW4gdGh1cyB1c2UKKy0tYnVmZmVyIHRvIGVuZm9yY2UgdGhlIGJ1ZmZlcmluZy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25vLWtlZXBhbGl2ZS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbm8ta2VlcGFsaXZlLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViM2Q2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL25vLWtlZXBhbGl2ZS5kCkBAIC0wLDAgKzEsOCBAQAorTG9uZzogbm8ta2VlcGFsaXZlCitIZWxwOiBEaXNhYmxlIFRDUCBrZWVwYWxpdmUgb24gdGhlIGNvbm5lY3Rpb24KKy0tLQorRGlzYWJsZXMgdGhlIHVzZSBvZiBrZWVwYWxpdmUgbWVzc2FnZXMgb24gdGhlIFRDUCBjb25uZWN0aW9uLiBjdXJsIG90aGVyd2lzCitlbmFibGVzIHRoZW0gYnkgZGVmYXVsdC4KKworTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG5lZ2F0ZWQgb3B0aW9uIG5hbWUgZG9jdW1lbnRlZC4gWW91IGNhbiB0aHVzIHVzZQorLS1rZWVwYWxpdmUgdG8gZW5mb3JjZSBrZWVwYWxpdmUuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9uby1ucG4uZCBiL2RvY3MvY21kbGluZS1vcHRzL25vLW5wbi5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGY2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9uby1ucG4uZApAQCAtMCwwICsxLDEyIEBACitMb25nOiBuby1ucG4KK1RhZ3M6IFZlcnNpb25zIEhUVFAvMgorUHJvdG9jb2xzOiBIVFRQUworQWRkZWQ6IDcuMzYuMAorTXV0ZXhlZDoKK1NlZS1hbHNvOiBuby1hbHBuIGh0dHAyCitSZXF1aXJlczogVExTCitIZWxwOiBEaXNhYmxlIHRoZSBOUE4gVExTIGV4dGVuc2lvbgorLS0tCitEaXNhYmxlIHRoZSBOUE4gVExTIGV4dGVuc2lvbi4gTlBOIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBsaWJjdXJsIHdhcyBidWlsdAord2l0aCBhbiBTU0wgbGlicmFyeSB0aGF0IHN1cHBvcnRzIE5QTi4gTlBOIGlzIHVzZWQgYnkgYSBsaWJjdXJsIHRoYXQgc3VwcG9ydHMKK0hUVFAvMiB0byBuZWdvdGlhdGUgSFRUUC8yIHN1cHBvcnQgd2l0aCB0aGUgc2VydmVyIGR1cmluZyBodHRwcyBzZXNzaW9ucy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25vLXNlc3Npb25pZC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbm8tc2Vzc2lvbmlkLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3YTE1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL25vLXNlc3Npb25pZC5kCkBAIC0wLDAgKzEsMTMgQEAKK0xvbmc6IG5vLXNlc3Npb25pZAorSGVscDogRGlzYWJsZSBTU0wgc2Vzc2lvbi1JRCByZXVzaW5nCitQcm90b2NvbHM6IFRMUworQWRkZWQ6IDcuMTYuMAorLS0tCitEaXNhYmxlIGN1cmwncyB1c2Ugb2YgU1NMIHNlc3Npb24tSUQgY2FjaGluZy4gIEJ5IGRlZmF1bHQgYWxsIHRyYW5zZmVycyBhcmUKK2RvbmUgdXNpbmcgdGhlIGNhY2hlLiBOb3RlIHRoYXQgd2hpbGUgbm90aGluZyBzaG91bGQgZXZlciBnZXQgaHVydCBieQorYXR0ZW1wdGluZyB0byByZXVzZSBTU0wgc2Vzc2lvbi1JRHMsIHRoZXJlIHNlZW0gdG8gYmUgYnJva2VuIFNTTAoraW1wbGVtZW50YXRpb25zIGluIHRoZSB3aWxkIHRoYXQgbWF5IHJlcXVpcmUgeW91IHRvIGRpc2FibGUgdGhpcyBpbiBvcmRlciBmb3IKK3lvdSB0byBzdWNjZWVkLgorCitOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbmVnYXRlZCBvcHRpb24gbmFtZSBkb2N1bWVudGVkLiBZb3UgY2FuIHRodXMgdXNlCistLXNlc3Npb25pZCB0byBlbmZvcmNlIHNlc3Npb24tSUQgY2FjaGluZy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL25vcHJveHkuZCBiL2RvY3MvY21kbGluZS1vcHRzL25vcHJveHkuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA2ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvbm9wcm94eS5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IG5vcHJveHkKK0FyZzogPG5vLXByb3h5LWxpc3Q+CitIZWxwOiBMaXN0IG9mIGhvc3RzIHdoaWNoIGRvIG5vdCB1c2UgcHJveHkKK0FkZGVkOiA3LjE5LjQKKy0tLQorQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdHMgd2hpY2ggZG8gbm90IHVzZSBhIHByb3h5LCBpZiBvbmUgaXMgc3BlY2lmaWVkLgorVGhlIG9ubHkgd2lsZGNhcmQgaXMgYSBzaW5nbGUgKiBjaGFyYWN0ZXIsIHdoaWNoIG1hdGNoZXMgYWxsIGhvc3RzLCBhbmQKK2VmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBwcm94eS4gRWFjaCBuYW1lIGluIHRoaXMgbGlzdCBpcyBtYXRjaGVkIGFzIGVpdGhlcgorYSBkb21haW4gd2hpY2ggY29udGFpbnMgdGhlIGhvc3RuYW1lLCBvciB0aGUgaG9zdG5hbWUgaXRzZWxmLiBGb3IgZXhhbXBsZSwKK2xvY2FsLmNvbSB3b3VsZCBtYXRjaCBsb2NhbC5jb20sIGxvY2FsLmNvbTo4MCwgYW5kIHd3dy5sb2NhbC5jb20sIGJ1dCBub3QKK3d3dy5ub3Rsb2NhbC5jb20uCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9udGxtLXdiLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9udGxtLXdiLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5MzM4NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL250bG0td2IuZApAQCAtMCwwICsxLDcgQEAKK0xvbmc6IG50bG0td2IKK0hlbHA6IFVzZSBIVFRQIE5UTE0gYXV0aGVudGljYXRpb24gd2l0aCB3aW5iaW5kCitQcm90b2NvbHM6IEhUVFAKK1NlZS1hbHNvOiBudGxtIHByb3h5LW50bG0KKy0tLQorRW5hYmxlcyBOVExNIG11Y2ggaW4gdGhlIHN0eWxlIC0tbnRsbSBkb2VzLCBidXQgaGFuZCBvdmVyIHRoZSBhdXRoZW50aWNhdGlvbgordG8gdGhlIHNlcGFyYXRlIGJpbmFyeSBudGxtYXV0aCBhcHBsaWNhdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIHdoZW4gbmVlZGVkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvbnRsbS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvbnRsbS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWNkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9udGxtLmQKQEAgLTAsMCArMSwxOCBAQAorTG9uZzogbnRsbQorSGVscDogVXNlIEhUVFAgTlRMTSBhdXRoZW50aWNhdGlvbgorTXV0ZXhlZDogYmFzaWMgbmVnb3RpYXRlZCBkaWdlc3QgYW55YXV0aAorU2VlLWFsc286IHByb3h5LW50bG0KK1Byb3RvY29sczogSFRUUAorUmVxdWlyZXM6IFRMUworLS0tCitFbmFibGVzIE5UTE0gYXV0aGVudGljYXRpb24uIFRoZSBOVExNIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgZGVzaWduZWQgYnkKK01pY3Jvc29mdCBhbmQgaXMgdXNlZCBieSBJSVMgd2ViIHNlcnZlcnMuIEl0IGlzIGEgcHJvcHJpZXRhcnkgcHJvdG9jb2wsCityZXZlcnNlLWVuZ2luZWVyZWQgYnkgY2xldmVyIHBlb3BsZSBhbmQgaW1wbGVtZW50ZWQgaW4gY3VybCBiYXNlZCBvbiB0aGVpcgorZWZmb3J0cy4gVGhpcyBraW5kIG9mIGJlaGF2aW9yIHNob3VsZCBub3QgYmUgZW5kb3JzZWQsIHlvdSBzaG91bGQgZW5jb3VyYWdlCitldmVyeW9uZSB3aG8gdXNlcyBOVExNIHRvIHN3aXRjaCB0byBhIHB1YmxpYyBhbmQgZG9jdW1lbnRlZCBhdXRoZW50aWNhdGlvbgorbWV0aG9kIGluc3RlYWQsIHN1Y2ggYXMgRGlnZXN0LgorCitJZiB5b3Ugd2FudCB0byBlbmFibGUgTlRMTSBmb3IgeW91ciBwcm94eSBhdXRoZW50aWNhdGlvbiwgdGhlbiB1c2UKKy0tcHJveHktbnRsbS4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL29hdXRoMi1iZWFyZXIuZCBiL2RvY3MvY21kbGluZS1vcHRzL29hdXRoMi1iZWFyZXIuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGFkNTMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvb2F1dGgyLWJlYXJlci5kCkBAIC0wLDAgKzEsMTEgQEAKK0xvbmc6IG9hdXRoMi1iZWFyZXIKK0hlbHA6IE9BdXRoIDIgQmVhcmVyIFRva2VuCitQcm90b2NvbHM6IElNQVAgUE9QMyBTTVRQCistLS0KK1NwZWNpZnkgdGhlIEJlYXJlciBUb2tlbiBmb3IgT0FVVEggMi4wIHNlcnZlciBhdXRoZW50aWNhdGlvbi4gVGhlIEJlYXJlciBUb2tlbgoraXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB1c2VyIG5hbWUgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBhcyBwYXJ0IG9mCit0aGUgLS11cmwgb3IgLS11c2VyIG9wdGlvbnMuCisKK1RoZSBCZWFyZXIgVG9rZW4gYW5kIHVzZXIgbmFtZSBhcmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byBSRkMgNjc1MC4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvb3V0cHV0LmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9vdXRwdXQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWY1MmEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvb3V0cHV0LmQKQEAgLTAsMCArMSwzMiBAQAorTG9uZzogb3V0cHV0CitBcmc6IDxmaWxlPgorU2hvcnQ6IG8KK0hlbHA6IFdyaXRlIHRvIGZpbGUgaW5zdGVhZCBvZiBzdGRvdXQKK1NlZS1hbHNvOiByZW1vdGUtbmFtZSByZW1vdGUtbmFtZS1hbGwgcmVtb3RlLWhlYWRlci1uYW1lCistLS0KK1dyaXRlIG91dHB1dCB0byA8ZmlsZT4gaW5zdGVhZCBvZiBzdGRvdXQuIElmIHlvdSBhcmUgdXNpbmcge30gb3IgW10gdG8gZmV0Y2gKK211bHRpcGxlIGRvY3VtZW50cywgeW91IGNhbiB1c2UgJyMnIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGluIHRoZSA8ZmlsZT4KK3NwZWNpZmllci4gVGhhdCB2YXJpYWJsZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGN1cnJlbnQgc3RyaW5nIGZvciB0aGUgVVJMCitiZWluZyBmZXRjaGVkLiBMaWtlIGluOgorCisgY3VybCBodHRwOi8ve29uZSx0d299LmV4YW1wbGUuY29tIC1vICJmaWxlXyMxLnR4dCIKKworb3IgdXNlIHNldmVyYWwgdmFyaWFibGVzIGxpa2U6CisKKyBjdXJsIGh0dHA6Ly97c2l0ZSxob3N0fS5ob3N0WzEtNV0uY29tIC1vICIjMV8jMiIKKworWW91IG1heSB1c2UgdGhpcyBvcHRpb24gYXMgbWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mIFVSTHMgeW91IGhhdmUuIEZvcgorZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgdHdvIFVSTHMgb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLCB5b3UgY2FuIHVzZSBpdCBsaWtlCit0aGlzOgorCisgIGN1cmwgLW8gYWEgZXhhbXBsZS5jb20gLW8gYmIgZXhhbXBsZS5uZXQKKworYW5kIHRoZSBvcmRlciBvZiB0aGUgLW8gb3B0aW9ucyBhbmQgdGhlIFVSTHMgZG9lc24ndCBtYXR0ZXIsIGp1c3QgdGhhdCB0aGUKK2ZpcnN0IC1vIGlzIGZvciB0aGUgZmlyc3QgVVJMIGFuZCBzbyBvbiwgc28gdGhlIGFib3ZlIGNvbW1hbmQgbGluZSBjYW4gYWxzbyBiZQord3JpdHRlbiBhcworCisgIGN1cmwgZXhhbXBsZS5jb20gZXhhbXBsZS5uZXQgLW8gYWEgLW8gYmIKKworU2VlIGFsc28gdGhlIC0tY3JlYXRlLWRpcnMgb3B0aW9uIHRvIGNyZWF0ZSB0aGUgbG9jYWwgZGlyZWN0b3JpZXMKK2R5bmFtaWNhbGx5LiBTcGVjaWZ5aW5nIHRoZSBvdXRwdXQgYXMgJy0nIChhIHNpbmdsZSBkYXNoKSB3aWxsIGZvcmNlIHRoZQorb3V0cHV0IHRvIGJlIGRvbmUgdG8gc3Rkb3V0LgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvcGFnZS1oZWFkZXIgYi9kb2NzL2NtZGxpbmUtb3B0cy9wYWdlLWhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmE5MGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvcGFnZS1oZWFkZXIKQEAgLTAsMCArMSwxMzggQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIGN1cmwgMSAiMzAgTm92IDIwMTQiICJDdXJsIDcuNDAuMCIgIkN1cmwgTWFudWFsIgorLlNIIE5BTUUKK2N1cmwgXC0gdHJhbnNmZXIgYSBVUkwKKy5TSCBTWU5PUFNJUworLkIgY3VybCBbb3B0aW9uc10KKy5JIFtVUkwuLi5dCisuU0ggREVTQ1JJUFRJT04KKy5CIGN1cmwKK2lzIGEgdG9vbCB0byB0cmFuc2ZlciBkYXRhIGZyb20gb3IgdG8gYSBzZXJ2ZXIsIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkCitwcm90b2NvbHMgKERJQ1QsIEZJTEUsIEZUUCwgRlRQUywgR09QSEVSLCBIVFRQLCBIVFRQUywgSU1BUCwgSU1BUFMsIExEQVAsCitMREFQUywgUE9QMywgUE9QM1MsIFJUTVAsIFJUU1AsIFNDUCwgU0ZUUCwgU01CLCBTTUJTLCBTTVRQLCBTTVRQUywgVEVMTkVUCithbmQgVEZUUCkuIFRoZSBjb21tYW5kIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLgorCitjdXJsIG9mZmVycyBhIGJ1c2xvYWQgb2YgdXNlZnVsIHRyaWNrcyBsaWtlIHByb3h5IHN1cHBvcnQsIHVzZXIKK2F1dGhlbnRpY2F0aW9uLCBGVFAgdXBsb2FkLCBIVFRQIHBvc3QsIFNTTCBjb25uZWN0aW9ucywgY29va2llcywgZmlsZSB0cmFuc2ZlcgorcmVzdW1lLCBNZXRhbGluaywgYW5kIG1vcmUuIEFzIHlvdSB3aWxsIHNlZSBiZWxvdywgdGhlIG51bWJlciBvZiBmZWF0dXJlcyB3aWxsCittYWtlIHlvdXIgaGVhZCBzcGluIQorCitjdXJsIGlzIHBvd2VyZWQgYnkgbGliY3VybCBmb3IgYWxsIHRyYW5zZmVyLXJlbGF0ZWQgZmVhdHVyZXMuIFNlZQorXGZJbGliY3VybCgzKVxmUCBmb3IgZGV0YWlscy4KKy5TSCBVUkwKK1RoZSBVUkwgc3ludGF4IGlzIHByb3RvY29sLWRlcGVuZGVudC4gWW91J2xsIGZpbmQgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpbgorUkZDIDM5ODYuCisKK1lvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBVUkxzIG9yIHBhcnRzIG9mIFVSTHMgYnkgd3JpdGluZyBwYXJ0IHNldHMgd2l0aGluCiticmFjZXMgYXMgaW46CisKKyAgaHR0cDovL3NpdGUue29uZSx0d28sdGhyZWV9LmNvbQorCitvciB5b3UgY2FuIGdldCBzZXF1ZW5jZXMgb2YgYWxwaGFudW1lcmljIHNlcmllcyBieSB1c2luZyBbXSBhcyBpbjoKKworICBmdHA6Ly9mdHAuZXhhbXBsZS5jb20vZmlsZVsxLTEwMF0udHh0CisKKyAgZnRwOi8vZnRwLmV4YW1wbGUuY29tL2ZpbGVbMDAxLTEwMF0udHh0ICAgICh3aXRoIGxlYWRpbmcgemVyb3MpCisKKyAgZnRwOi8vZnRwLmV4YW1wbGUuY29tL2ZpbGVbYS16XS50eHQKKworTmVzdGVkIHNlcXVlbmNlcyBhcmUgbm90IHN1cHBvcnRlZCwgYnV0IHlvdSBjYW4gdXNlIHNldmVyYWwgb25lcyBuZXh0IHRvIGVhY2gKK290aGVyOgorCisgIGh0dHA6Ly9leGFtcGxlLmNvbS9hcmNoaXZlWzE5OTYtMTk5OV0vdm9sWzEtNF0vcGFydHthLGIsY30uaHRtbAorCitZb3UgY2FuIHNwZWNpZnkgYW55IGFtb3VudCBvZiBVUkxzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoZXkgd2lsbCBiZSBmZXRjaGVkCitpbiBhIHNlcXVlbnRpYWwgbWFubmVyIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuCisKK1lvdSBjYW4gc3BlY2lmeSBhIHN0ZXAgY291bnRlciBmb3IgdGhlIHJhbmdlcyB0byBnZXQgZXZlcnkgTnRoIG51bWJlciBvcgorbGV0dGVyOgorCisgIGh0dHA6Ly9leGFtcGxlLmNvbS9maWxlWzEtMTAwOjEwXS50eHQKKworICBodHRwOi8vZXhhbXBsZS5jb20vZmlsZVthLXo6Ml0udHh0CisKK1doZW4gdXNpbmcgW10gb3Ige30gc2VxdWVuY2VzIHdoZW4gaW52b2tlZCBmcm9tIGEgY29tbWFuZCBsaW5lIHByb21wdCwgeW91Citwcm9iYWJseSBoYXZlIHRvIHB1dCB0aGUgZnVsbCBVUkwgd2l0aGluIGRvdWJsZSBxdW90ZXMgdG8gYXZvaWQgdGhlIHNoZWxsIGZyb20KK2ludGVyZmVyaW5nIHdpdGggaXQuIFRoaXMgYWxzbyBnb2VzIGZvciBvdGhlciBjaGFyYWN0ZXJzIHRyZWF0ZWQgc3BlY2lhbCwgbGlrZQorZm9yIGV4YW1wbGUgJyYnLCAnPycgYW5kICcqJy4KKworUHJvdmlkZSB0aGUgSVB2NiB6b25lIGluZGV4IGluIHRoZSBVUkwgd2l0aCBhbiBlc2NhcGVkIHBlcmNlbnRhZ2Ugc2lnbiBhbmQgdGhlCitpbnRlcmZhY2UgbmFtZS4gTGlrZSBpbgorCisgIGh0dHA6Ly9bZmU4MDo6MyUyNWV0aDBdLworCitJZiB5b3Ugc3BlY2lmeSBVUkwgd2l0aG91dCBwcm90b2NvbDovLyBwcmVmaXgsIGN1cmwgd2lsbCBhdHRlbXB0IHRvIGd1ZXNzIHdoYXQKK3Byb3RvY29sIHlvdSBtaWdodCB3YW50LiBJdCB3aWxsIHRoZW4gZGVmYXVsdCB0byBIVFRQIGJ1dCB0cnkgb3RoZXIgcHJvdG9jb2xzCitiYXNlZCBvbiBvZnRlbi11c2VkIGhvc3QgbmFtZSBwcmVmaXhlcy4gRm9yIGV4YW1wbGUsIGZvciBob3N0IG5hbWVzIHN0YXJ0aW5nCit3aXRoICJmdHAuIiBjdXJsIHdpbGwgYXNzdW1lIHlvdSB3YW50IHRvIHNwZWFrIEZUUC4KKworY3VybCB3aWxsIGRvIGl0cyBiZXN0IHRvIHVzZSB3aGF0IHlvdSBwYXNzIHRvIGl0IGFzIGEgVVJMLiBJdCBpcyBub3QgdHJ5aW5nIHRvCit2YWxpZGF0ZSBpdCBhcyBhIHN5bnRhY3RpY2FsbHkgY29ycmVjdCBVUkwgYnkgYW55IG1lYW5zIGJ1dCBpcyBpbnN0ZWFkCitcZkJ2ZXJ5XGZQIGxpYmVyYWwgd2l0aCB3aGF0IGl0IGFjY2VwdHMuCisKK2N1cmwgd2lsbCBhdHRlbXB0IHRvIHJlLXVzZSBjb25uZWN0aW9ucyBmb3IgbXVsdGlwbGUgZmlsZSB0cmFuc2ZlcnMsIHNvIHRoYXQKK2dldHRpbmcgbWFueSBmaWxlcyBmcm9tIHRoZSBzYW1lIHNlcnZlciB3aWxsIG5vdCBkbyBtdWx0aXBsZSBjb25uZWN0cyAvCitoYW5kc2hha2VzLiBUaGlzIGltcHJvdmVzIHNwZWVkLiBPZiBjb3Vyc2UgdGhpcyBpcyBvbmx5IGRvbmUgb24gZmlsZXMKK3NwZWNpZmllZCBvbiBhIHNpbmdsZSBjb21tYW5kIGxpbmUgYW5kIGNhbm5vdCBiZSB1c2VkIGJldHdlZW4gc2VwYXJhdGUgY3VybAoraW52b2tlcy4KKy5TSCAiUFJPR1JFU1MgTUVURVIiCitjdXJsIG5vcm1hbGx5IGRpc3BsYXlzIGEgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9wZXJhdGlvbnMsIGluZGljYXRpbmcgdGhlCithbW91bnQgb2YgdHJhbnNmZXJyZWQgZGF0YSwgdHJhbnNmZXIgc3BlZWRzIGFuZCBlc3RpbWF0ZWQgdGltZSBsZWZ0LCBldGMuIFRoZQorcHJvZ3Jlc3MgbWV0ZXIgZGlzcGxheXMgbnVtYmVyIG9mIGJ5dGVzIGFuZCB0aGUgc3BlZWRzIGFyZSBpbiBieXRlcyBwZXIKK3NlY29uZC4gVGhlIHN1ZmZpeGVzIChrLCBNLCBHLCBULCBQKSBhcmUgMTAyNCBiYXNlZC4gRm9yIGV4YW1wbGUgMWsgaXMgMTAyNAorYnl0ZXMuIDFNIGlzIDEwNDg1NzYgYnl0ZXMuCisKK2N1cmwgZGlzcGxheXMgdGhpcyBkYXRhIHRvIHRoZSB0ZXJtaW5hbCBieSBkZWZhdWx0LCBzbyBpZiB5b3UgaW52b2tlIGN1cmwgdG8KK2RvIGFuIG9wZXJhdGlvbiBhbmQgaXQgaXMgYWJvdXQgdG8gd3JpdGUgZGF0YSB0byB0aGUgdGVybWluYWwsIGl0CitcZklkaXNhYmxlc1xmUCB0aGUgcHJvZ3Jlc3MgbWV0ZXIgYXMgb3RoZXJ3aXNlIGl0IHdvdWxkIG1lc3MgdXAgdGhlIG91dHB1dAorbWl4aW5nIHByb2dyZXNzIG1ldGVyIGFuZCByZXNwb25zZSBkYXRhLgorCitJZiB5b3Ugd2FudCBhIHByb2dyZXNzIG1ldGVyIGZvciBIVFRQIFBPU1Qgb3IgUFVUIHJlcXVlc3RzLCB5b3UgbmVlZCB0bworcmVkaXJlY3QgdGhlIHJlc3BvbnNlIG91dHB1dCB0byBhIGZpbGUsIHVzaW5nIHNoZWxsIHJlZGlyZWN0ICg+KSwgLW8gW2ZpbGVdIG9yCitzaW1pbGFyLgorCitJdCBpcyBub3QgdGhlIHNhbWUgY2FzZSBmb3IgRlRQIHVwbG9hZCBhcyB0aGF0IG9wZXJhdGlvbiBkb2VzIG5vdCBzcGl0IG91dAorYW55IHJlc3BvbnNlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLgorCitJZiB5b3UgcHJlZmVyIGEgcHJvZ3Jlc3MgImJhciIgaW5zdGVhZCBvZiB0aGUgcmVndWxhciBtZXRlciwgLS1wcm9ncmVzcy1iYXIgaXMKK3lvdXIgZnJpZW5kLgorLlNIIE9QVElPTlMKK09wdGlvbnMgc3RhcnQgd2l0aCBvbmUgb3IgdHdvIGRhc2hlcy4gTWFueSBvZiB0aGUgb3B0aW9ucyByZXF1aXJlIGFuCithZGRpdGlvbmFsIHZhbHVlIG5leHQgdG8gdGhlbS4KKworVGhlIHNob3J0ICJzaW5nbGUtZGFzaCIgZm9ybSBvZiB0aGUgb3B0aW9ucywgLWQgZm9yIGV4YW1wbGUsIG1heSBiZSB1c2VkIHdpdGgKK29yIHdpdGhvdXQgYSBzcGFjZSBiZXR3ZWVuIGl0IGFuZCBpdHMgdmFsdWUsIGFsdGhvdWdoIGEgc3BhY2UgaXMgYSByZWNvbW1lbmRlZAorc2VwYXJhdG9yLiBUaGUgbG9uZyAiZG91YmxlLWRhc2giIGZvcm0sIC0tZGF0YSBmb3IgZXhhbXBsZSwgcmVxdWlyZXMgYSBzcGFjZQorYmV0d2VlbiBpdCBhbmQgaXRzIHZhbHVlLgorCitTaG9ydCB2ZXJzaW9uIG9wdGlvbnMgdGhhdCBkb24ndCBuZWVkIGFueSBhZGRpdGlvbmFsIHZhbHVlcyBjYW4gYmUgdXNlZAoraW1tZWRpYXRlbHkgbmV4dCB0byBlYWNoIG90aGVyLCBsaWtlIGZvciBleGFtcGxlIHlvdSBjYW4gc3BlY2lmeSBhbGwgdGhlCitvcHRpb25zIC1PLCAtTCBhbmQgLXYgYXQgb25jZSBhcyAtT0x2LgorCitJbiBnZW5lcmFsLCBhbGwgYm9vbGVhbiBvcHRpb25zIGFyZSBlbmFibGVkIHdpdGggLS1cZkJvcHRpb25cZlAgYW5kIHlldCBhZ2FpbgorZGlzYWJsZWQgd2l0aCAtLVxmQm5vLVxmUG9wdGlvbi4gVGhhdCBpcywgeW91IHVzZSB0aGUgZXhhY3Qgc2FtZSBvcHRpb24gbmFtZQorYnV0IHByZWZpeCBpdCB3aXRoICJuby0iLiBIb3dldmVyLCBpbiB0aGlzIGxpc3Qgd2UgbW9zdGx5IG9ubHkgbGlzdCBhbmQgc2hvdwordGhlIC0tb3B0aW9uIHZlcnNpb24gb2YgdGhlbS4gKFRoaXMgY29uY2VwdCB3aXRoIC0tbm8gb3B0aW9ucyB3YXMgYWRkZWQgaW4KKzcuMTkuMC4gUHJldmlvdXNseSBtb3N0IG9wdGlvbnMgd2VyZSB0b2dnbGVkIG9uL29mZiBvbiByZXBlYXRlZCB1c2Ugb2YgdGhlCitzYW1lIGNvbW1hbmQgbGluZSBvcHRpb24uKQpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvcGFzcy5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvcGFzcy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzljYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9wYXNzLmQKQEAgLTAsMCArMSw4IEBACitMb25nOiBwYXNzCitBcmc6IDxwaHJhc2U+CitIZWxwOiBQYXNzIHBocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5CitQcm90b2NvbHM6IFNTSCBUTFMKKy0tLQorUGFzc3BocmFzZSBmb3IgdGhlIHByaXZhdGUga2V5CisKK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZC4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3BhdGgtYXMtaXMuZCBiL2RvY3MvY21kbGluZS1vcHRzL3BhdGgtYXMtaXMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZlMmYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvcGF0aC1hcy1pcy5kCkBAIC0wLDAgKzEsNyBAQAorTG9uZzogcGF0aC1hcy1pcworSGVscDogRG8gbm90IHNxdWFzaCAuLiBzZXF1ZW5jZXMgaW4gVVJMIHBhdGgKK0FkZGVkOiA3LjQyLjAKKy0tLQorVGVsbCBjdXJsIHRvIG5vdCBoYW5kbGUgc2VxdWVuY2VzIG9mIC8uLi8gb3IgLy4vIGluIHRoZSBnaXZlbiBVUkwKK3BhdGguIE5vcm1hbGx5IGN1cmwgd2lsbCBzcXVhc2ggb3IgbWVyZ2UgdGhlbSBhY2NvcmRpbmcgdG8gc3RhbmRhcmRzIGJ1dCB3aXRoCit0aGlzIG9wdGlvbiBzZXQgeW91IHRlbGwgaXQgbm90IHRvIGRvIHRoYXQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9waW5uZWRwdWJrZXkuZCBiL2RvY3MvY21kbGluZS1vcHRzL3Bpbm5lZHB1YmtleS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTdlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9waW5uZWRwdWJrZXkuZApAQCAtMCwwICsxLDI3IEBACitMb25nOiBwaW5uZWRwdWJrZXkKK0FyZzogPGhhc2hlcz4KK0hlbHA6IEZJTEUvSEFTSEVTIFB1YmxpYyBrZXkgdG8gdmVyaWZ5IHBlZXIgYWdhaW5zdAorUHJvdG9jb2xzOiBUTFMKKy0tLQorVGVsbHMgY3VybCB0byB1c2UgdGhlIHNwZWNpZmllZCBwdWJsaWMga2V5IGZpbGUgKG9yIGhhc2hlcykgdG8gdmVyaWZ5IHRoZQorcGVlci4gVGhpcyBjYW4gYmUgYSBwYXRoIHRvIGEgZmlsZSB3aGljaCBjb250YWlucyBhIHNpbmdsZSBwdWJsaWMga2V5IGluIFBFTQorb3IgREVSIGZvcm1hdCwgb3IgYW55IG51bWJlciBvZiBiYXNlNjQgZW5jb2RlZCBzaGEyNTYgaGFzaGVzIHByZWNlZGVkIGJ5CitcJ3NoYTI1Ni8vXCcgYW5kIHNlcGFyYXRlZCBieSBcJztcJworCitXaGVuIG5lZ290aWF0aW5nIGEgVExTIG9yIFNTTCBjb25uZWN0aW9uLCB0aGUgc2VydmVyIHNlbmRzIGEgY2VydGlmaWNhdGUKK2luZGljYXRpbmcgaXRzIGlkZW50aXR5LiBBIHB1YmxpYyBrZXkgaXMgZXh0cmFjdGVkIGZyb20gdGhpcyBjZXJ0aWZpY2F0ZSBhbmQKK2lmIGl0IGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggdGhlIHB1YmxpYyBrZXkgcHJvdmlkZWQgdG8gdGhpcyBvcHRpb24sIGN1cmwgd2lsbAorYWJvcnQgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGFueSBkYXRhLgorCitQRU0vREVSIHN1cHBvcnQ6CisgIDcuMzkuMDogT3BlblNTTCwgR251VExTIGFuZCBHU0tpdAorICA3LjQzLjA6IE5TUyBhbmQgd29sZlNTTC9DeWFTU0wKKyAgNy40Ny4wOiBtYmVkdGxzCisgIDcuNDkuMDogUG9sYXJTU0wKK3NoYTI1NiBzdXBwb3J0OgorICA3LjQ0LjA6IE9wZW5TU0wsIEdudVRMUywgTlNTIGFuZCB3b2xmU1NML0N5YVNTTC4KKyAgNy40Ny4wOiBtYmVkdGxzCisgIDcuNDkuMDogUG9sYXJTU0wKK090aGVyIFNTTCBiYWNrZW5kcyBub3Qgc3VwcG9ydGVkLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAxLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAxLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjYWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3Bvc3QzMDEuZApAQCAtMCwwICsxLDExIEBACitMb25nOiBwb3N0MzAxCitIZWxwOiBEbyBub3Qgc3dpdGNoIHRvIEdFVCBhZnRlciBmb2xsb3dpbmcgYSAzMDEKK1Byb3RvY29sczogSFRUUAorU2VlLWFsc286IHBvc3QzMDIgcG9zdDMwMyBsb2NhdGlvbgorQWRkZWQ6IDcuMTcuMQorLS0tCitUZWxscyBjdXJsIHRvIHJlc3BlY3QgUkZDIDcyMzAvNi40LjIgYW5kIG5vdCBjb252ZXJ0IFBPU1QgcmVxdWVzdHMgaW50byBHRVQKK3JlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAxIHJlZGlyZWN0aW9uLiBUaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cworaW4gd2ViIGJyb3dzZXJzLCBzbyBjdXJsIGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbgorY29uc2lzdGVuY3kuIEhvd2V2ZXIsIGEgc2VydmVyIG1heSByZXF1aXJlIGEgUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyIHN1Y2gKK2EgcmVkaXJlY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHVzaW5nIC0tbG9jYXRpb24uCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNWYwOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3Bvc3QzMDIuZApAQCAtMCwwICsxLDExIEBACitMb25nOiBwb3N0MzAyCitIZWxwOiBEbyBub3Qgc3dpdGNoIHRvIEdFVCBhZnRlciBmb2xsb3dpbmcgYSAzMDIKK1Byb3RvY29sczogSFRUUAorU2VlLWFsc286IHBvc3QzMDEgcG9zdDMwMyBsb2NhdGlvbgorQWRkZWQ6IDcuMTkuMQorLS0tCitUZWxscyBjdXJsIHRvIHJlc3BlY3QgUkZDIDcyMzAvNi40LjIgYW5kIG5vdCBjb252ZXJ0IFBPU1QgcmVxdWVzdHMgaW50byBHRVQKK3JlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAyIHJlZGlyZWN0aW9uLiBUaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cworaW4gd2ViIGJyb3dzZXJzLCBzbyBjdXJsIGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbgorY29uc2lzdGVuY3kuIEhvd2V2ZXIsIGEgc2VydmVyIG1heSByZXF1aXJlIGEgUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyIHN1Y2gKK2EgcmVkaXJlY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHVzaW5nIC0tbG9jYXRpb24uCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAzLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9wb3N0MzAzLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzNmM4MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3Bvc3QzMDMuZApAQCAtMCwwICsxLDExIEBACitMb25nOiBwb3N0MzAzCitIZWxwOiBEbyBub3Qgc3dpdGNoIHRvIEdFVCBhZnRlciBmb2xsb3dpbmcgYSAzMDMKK1Byb3RvY29sczogSFRUUAorU2VlLWFsc286IHBvc3QzMDIgcG9zdDMwMSBsb2NhdGlvbgorQWRkZWQ6IDcuMjYuMAorLS0tCitUZWxscyBjdXJsIHRvIHJlc3BlY3QgUkZDIDcyMzAvNi40LjIgYW5kIG5vdCBjb252ZXJ0IFBPU1QgcmVxdWVzdHMgaW50byBHRVQKK3JlcXVlc3RzIHdoZW4gZm9sbG93aW5nIGEgMzAzIHJlZGlyZWN0aW9uLiBUaGUgbm9uLVJGQyBiZWhhdmlvdXIgaXMgdWJpcXVpdG91cworaW4gd2ViIGJyb3dzZXJzLCBzbyBjdXJsIGRvZXMgdGhlIGNvbnZlcnNpb24gYnkgZGVmYXVsdCB0byBtYWludGFpbgorY29uc2lzdGVuY3kuIEhvd2V2ZXIsIGEgc2VydmVyIG1heSByZXF1aXJlIGEgUE9TVCB0byByZW1haW4gYSBQT1NUIGFmdGVyIHN1Y2gKK2EgcmVkaXJlY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIHVzaW5nIC0tbG9jYXRpb24uCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9wcm9ncmVzcy1iYXIuZCBiL2RvY3MvY21kbGluZS1vcHRzL3Byb2dyZXNzLWJhci5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDY5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm9ncmVzcy1iYXIuZApAQCAtMCwwICsxLDExIEBACitTaG9ydDogIworTG9uZzogcHJvZ3Jlc3MtYmFyCitIZWxwOiBEaXNhYmxlIHRoZSBBTFBOIFRMUyBleHRlbnNpb24KKy0tLQorTWFrZSBjdXJsIGRpc3BsYXkgdHJhbnNmZXIgcHJvZ3Jlc3MgYXMgYSBzaW1wbGUgcHJvZ3Jlc3MgYmFyIGluc3RlYWQgb2YgdGhlCitzdGFuZGFyZCwgbW9yZSBpbmZvcm1hdGlvbmFsLCBtZXRlci4KKworVGhpcyBwcm9ncmVzcyBiYXIgZHJhd3MgYSBzaW5nbGUgbGluZSBvZiAnIycgY2hhcmFjdGVycyBhY3Jvc3MgdGhlIHNjcmVlbiBhbmQKK3Nob3dzIGEgcGVyY2VudGFnZSBpZiB0aGUgdHJhbnNmZXIgc2l6ZSBpcyBrbm93bi4gRm9yIHRyYW5zZmVycyB3aXRob3V0IGEKK2tub3duIHNpemUsIGl0IHdpbGwgaW5zdGVhZCBvdXRwdXQgb25lICcjJyBjaGFyYWN0ZXIgZm9yIGV2ZXJ5IDEwMjQgYnl0ZXMKK3RyYW5zZmVycmVkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvcHJvdG8tZGVmYXVsdC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvcHJvdG8tZGVmYXVsdC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzNiODUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm90by1kZWZhdWx0LmQKQEAgLTAsMCArMSwxOCBAQAorTG9uZzogcHJvdG8tZGVmYXVsdAorSGVscDogVXNlIFBST1RPQ09MIGZvciBhbnkgVVJMIG1pc3NpbmcgYSBzY2hlbWUKK0FyZzogPHByb3RvY29sPgorQWRkZWQ6IDcuNDUuMAorLS0tCitUZWxscyBjdXJsIHRvIHVzZSBcZklwcm90b2NvbFxmUCBmb3IgYW55IFVSTCBtaXNzaW5nIGEgc2NoZW1lIG5hbWUuCisKK0V4YW1wbGU6CisKKyBjdXJsIC0tcHJvdG8tZGVmYXVsdCBodHRwcyBmdHAubW96aWxsYS5vcmcKKworQW4gdW5rbm93biBvciB1bnN1cHBvcnRlZCBwcm90b2NvbCBjYXVzZXMgZXJyb3IKK1xmSUNVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MXGZQICgxKS4KKworVGhpcyBvcHRpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBkZWZhdWx0IHByb3h5IHByb3RvY29sIChodHRwKS4KKworV2l0aG91dCB0aGlzIG9wdGlvbiBjdXJsIHdvdWxkIG1ha2UgYSBndWVzcyBiYXNlZCBvbiB0aGUgaG9zdCwgc2VlIC0tdXJsIGZvcgorZGV0YWlscy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3Byb3RvLXJlZGlyLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm90by1yZWRpci5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZWVlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm90by1yZWRpci5kCkBAIC0wLDAgKzEsMTcgQEAKK0xvbmc6IHByb3RvLXJlZGlyCitBcmc6IDxwcm90b2NvbHM+CitIZWxwOiBFbmFibGUvZGlzYWJsZSBQUk9UT0NPTFMgb24gcmVkaXJlY3QKK0FkZGVkOiA3LjIwLjIKKy0tLQorVGVsbHMgY3VybCB0byBsaW1pdCB3aGF0IHByb3RvY29scyBpdCBtYXkgdXNlIG9uIHJlZGlyZWN0LiBQcm90b2NvbHMgZGVuaWVkIGJ5CistLXByb3RvIGFyZSBub3Qgb3ZlcnJpZGRlbiBieSB0aGlzIG9wdGlvbi4gU2VlIC0tcHJvdG8gZm9yIGhvdyBwcm90b2NvbHMgYXJlCityZXByZXNlbnRlZC4KKworRXhhbXBsZSwgYWxsb3cgb25seSBIVFRQIGFuZCBIVFRQUyBvbiByZWRpcmVjdDoKKworIGN1cmwgLS1wcm90by1yZWRpciAtYWxsLGh0dHAsaHR0cHMgaHR0cDovL2V4YW1wbGUuY29tCisKK0J5IGRlZmF1bHQgY3VybCB3aWxsIGFsbG93IGFsbCBwcm90b2NvbHMgb24gcmVkaXJlY3QgZXhjZXB0IHNldmVyYWwgZGlzYWJsZWQKK2ZvciBzZWN1cml0eSByZWFzb25zOiBTaW5jZSA3LjE5LjQgRklMRSBhbmQgU0NQIGFyZSBkaXNhYmxlZCwgYW5kIHNpbmNlIDcuNDAuMAorU01CIGFuZCBTTUJTIGFyZSBhbHNvIGRpc2FibGVkLiBTcGVjaWZ5aW5nIFxmSWFsbFxmUCBvciBcZkkrYWxsXGZQIGVuYWJsZXMgYWxsCitwcm90b2NvbHMgb24gcmVkaXJlY3QsIGluY2x1ZGluZyB0aG9zZSBkaXNhYmxlZCBmb3Igc2VjdXJpdHkuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9wcm90by5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvcHJvdG8uZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTEzZmRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvcHJvdG8uZApAQCAtMCwwICsxLDQzIEBACitMb25nOiBwcm90bworQXJnOiA8cHJvdG9jb2xzPgorSGVscDogRW5hYmxlL2Rpc2FibGUgUFJPVE9DT0xTCitTZWUtYWxzbzogcHJvdG8tcmVkaXIgcHJvdG8tZGVmYXVsdAorQWRkZWQ6IDcuMjAuMgorLS0tCitUZWxscyBjdXJsIHRvIGxpbWl0IHdoYXQgcHJvdG9jb2xzIGl0IG1heSB1c2UgaW4gdGhlIHRyYW5zZmVyLiBQcm90b2NvbHMgYXJlCitldmFsdWF0ZWQgbGVmdCB0byByaWdodCwgYXJlIGNvbW1hIHNlcGFyYXRlZCwgYW5kIGFyZSBlYWNoIGEgcHJvdG9jb2wgbmFtZSBvcgorJ2FsbCcsIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgemVybyBvciBtb3JlIG1vZGlmaWVycy4gQXZhaWxhYmxlIG1vZGlmaWVycyBhcmU6CisuUlMKKy5UUCAzCisuQiArCitQZXJtaXQgdGhpcyBwcm90b2NvbCBpbiBhZGRpdGlvbiB0byBwcm90b2NvbHMgYWxyZWFkeSBwZXJtaXR0ZWQgKHRoaXMgaXMKK3RoZSBkZWZhdWx0IGlmIG5vIG1vZGlmaWVyIGlzIHVzZWQpLgorLlRQCisuQiAtCitEZW55IHRoaXMgcHJvdG9jb2wsIHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIGFscmVhZHkgcGVybWl0dGVkLgorLlRQCisuQiA9CitQZXJtaXQgb25seSB0aGlzIHByb3RvY29sIChpZ25vcmluZyB0aGUgbGlzdCBhbHJlYWR5IHBlcm1pdHRlZCksIHRob3VnaAorc3ViamVjdCB0byBsYXRlciBtb2RpZmljYXRpb24gYnkgc3Vic2VxdWVudCBlbnRyaWVzIGluIHRoZSBjb21tYSBzZXBhcmF0ZWQKK2xpc3QuCisuUkUKKy5JUAorRm9yIGV4YW1wbGU6CisuUlMKKy5UUCAxNQorLkIgLS1wcm90byAtZnRwcwordXNlcyB0aGUgZGVmYXVsdCBwcm90b2NvbHMsIGJ1dCBkaXNhYmxlcyBmdHBzCisuVFAKKy5CICAtLXByb3RvIC1hbGwsaHR0cHMsK2h0dHAKK29ubHkgZW5hYmxlcyBodHRwIGFuZCBodHRwcworLlRQCisuQiAtLXByb3RvID1odHRwLGh0dHBzCithbHNvIG9ubHkgZW5hYmxlcyBodHRwIGFuZCBodHRwcworLlJFCisKK1Vua25vd24gcHJvdG9jb2xzIHByb2R1Y2UgYSB3YXJuaW5nLiBUaGlzIGFsbG93cyBzY3JpcHRzIHRvIHNhZmVseSByZWx5IG9uCitiZWluZyBhYmxlIHRvIGRpc2FibGUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIHByb3RvY29scywgd2l0aG91dCByZWx5aW5nIHVwb24KK3N1cHBvcnQgZm9yIHRoYXQgcHJvdG9jb2wgYmVpbmcgYnVpbHQgaW50byBjdXJsIHRvIGF2b2lkIGFuIGVycm9yLgorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lCithcyBjb25jYXRlbmF0aW5nIHRoZSBwcm90b2NvbHMgaW50byBvbmUgaW5zdGFuY2Ugb2YgdGhlIG9wdGlvbi4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3Byb3h5LWhlYWRlci5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvcHJveHktaGVhZGVyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmNjk2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3Byb3h5LWhlYWRlci5kCkBAIC0wLDAgKzEsMjAgQEAKK0xvbmc6IHByb3h5LWhlYWRlcgorQXJnOiA8aGVhZGVyPgorSGVscDogUGFzcyBjdXN0b20gaGVhZGVyIExJTkUgdG8gcHJveHkKK1Byb3RvY29sczogSFRUUAorQWRkZWQ6IDcuMzcuMAorLS0tCitFeHRyYSBoZWFkZXIgdG8gaW5jbHVkZSBpbiB0aGUgcmVxdWVzdCB3aGVuIHNlbmRpbmcgSFRUUCB0byBhIHByb3h5LiBZb3UgbWF5CitzcGVjaWZ5IGFueSBudW1iZXIgb2YgZXh0cmEgaGVhZGVycy4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvcHRpb24gdG8gLS1oZWFkZXIKK2J1dCBpcyBmb3IgcHJveHkgY29tbXVuaWNhdGlvbiBvbmx5IGxpa2UgaW4gQ09OTkVDVCByZXF1ZXN0cyB3aGVuIHlvdSB3YW50IGEKK3NlcGFyYXRlIGhlYWRlciBzZW50IHRvIHRoZSBwcm94eSB0byB3aGF0IGlzIHNlbnQgdG8gdGhlIGFjdHVhbCByZW1vdGUgaG9zdC4KKworY3VybCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGVhY2ggaGVhZGVyIHlvdSBhZGQvcmVwbGFjZSBpcyBzZW50IHdpdGggdGhlIHByb3BlcgorZW5kLW9mLWxpbmUgbWFya2VyLCB5b3Ugc2hvdWxkIHRodXMgXGZCbm90XGZQIGFkZCB0aGF0IGFzIGEgcGFydCBvZiB0aGUgaGVhZGVyCitjb250ZW50OiBkbyBub3QgYWRkIG5ld2xpbmVzIG9yIGNhcnJpYWdlIHJldHVybnMsIHRoZXkgd2lsbCBvbmx5IG1lc3MgdGhpbmdzCit1cCBmb3IgeW91LgorCitIZWFkZXJzIHNwZWNpZmllZCB3aXRoIHRoaXMgb3B0aW9uIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHJlcXVlc3RzIHRoYXQgY3VybAora25vd3Mgd2lsbCBub3QgYmUgc2VudCB0byBhIHByb3h5LgorCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQvcmVwbGFjZS9yZW1vdmUgbXVsdGlwbGUgaGVhZGVycy4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3Byb3h5dHVubmVsLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm94eXR1bm5lbC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjhkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9wcm94eXR1bm5lbC5kCkBAIC0wLDAgKzEsOSBAQAorTG9uZzogcHJveHl0dW5uZWwKK0hlbHA6IE9wZXJhdGUgdGhyb3VnaCBhIEhUVFAgcHJveHkgdHVubmVsICh1c2luZyBDT05ORUNUKQorU2VlLWFsc286IHByb3h5CistLS0KK1doZW4gYW4gSFRUUCBwcm94eSBpcyB1c2VkIC0tcHJveHksIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugbm9uLUhUVFAgcHJvdG9jb2xzCit0byBhdHRlbXB0IHRvIHR1bm5lbCB0aHJvdWdoIHRoZSBwcm94eSBpbnN0ZWFkIG9mIG1lcmVseSB1c2luZyBpdCB0byBkbworSFRUUC1saWtlIG9wZXJhdGlvbnMuIFRoZSB0dW5uZWwgYXBwcm9hY2ggaXMgbWFkZSB3aXRoIHRoZSBIVFRQIHByb3h5IENPTk5FQ1QKK3JlcXVlc3QgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIHByb3h5IGFsbG93cyBkaXJlY3QgY29ubmVjdCB0byB0aGUgcmVtb3RlIHBvcnQKK251bWJlciBjdXJsIHdhbnRzIHRvIHR1bm5lbCB0aHJvdWdoIHRvLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvcmVmZXJlci5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvcmVmZXJlci5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWNkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9yZWZlcmVyLmQKQEAgLTAsMCArMSwxMiBAQAorTG9uZzogcmVmZXJlcgorUHJvdG9jb2xzOiBIVFRQCitIZWxwOiBSZWZlcmVyIFVSTAorU2VlLWFsc286IHVzZXItYWdlbnQgaGVhZGVyCistLS0KK1NlbmRzIHRoZSAiUmVmZXJyZXIgUGFnZSIgaW5mb3JtYXRpb24gdG8gdGhlIEhUVFAgc2VydmVyLiBUaGlzIGNhbiBhbHNvIGJlIHNldAord2l0aCB0aGUgLS1oZWFkZXIgZmxhZyBvZiBjb3Vyc2UuICBXaGVuIHVzZWQgd2l0aCAtLWxvY2F0aW9uIHlvdSBjYW4gYXBwZW5kCisiO2F1dG8iIHRvIHRoZSAtLXJlZmVyZXIgVVJMIHRvIG1ha2UgY3VybCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgcHJldmlvdXMgVVJMCit3aGVuIGl0IGZvbGxvd3MgYSBMb2NhdGlvbjogaGVhZGVyLiBUaGUgXCYiO2F1dG8iIHN0cmluZyBjYW4gYmUgdXNlZCBhbG9uZSwKK2V2ZW4gaWYgeW91IGRvbid0IHNldCBhbiBpbml0aWFsIC0tcmVmZXJlci4KKworSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvcmVtb3RlLWhlYWRlci1uYW1lLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9yZW1vdGUtaGVhZGVyLW5hbWUuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFiNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvcmVtb3RlLWhlYWRlci1uYW1lLmQKQEAgLTAsMCArMSwxOSBAQAorTG9uZzogcmVtb3RlLWhlYWRlci1uYW1lCitTaG9ydDogSgorUHJvdG9jb2xzOiBIVFRQCitIZWxwOiBVc2UgdGhlIGhlYWRlci1wcm92aWRlZCBmaWxlbmFtZQorLS0tCitUaGlzIG9wdGlvbiB0ZWxscyB0aGUgLS1yZW1vdGUtbmFtZSBvcHRpb24gdG8gdXNlIHRoZSBzZXJ2ZXItc3BlY2lmaWVkCitDb250ZW50LURpc3Bvc2l0aW9uIGZpbGVuYW1lIGluc3RlYWQgb2YgZXh0cmFjdGluZyBhIGZpbGVuYW1lIGZyb20gdGhlIFVSTC4KKworSWYgdGhlIHNlcnZlciBzcGVjaWZpZXMgYSBmaWxlIG5hbWUgYW5kIGEgZmlsZSB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cworaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYW5kIGFuIGVycm9yIHdpbGwKK29jY3VyLiBJZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3BlY2lmeSBhIGZpbGUgbmFtZSB0aGVuIHRoaXMgb3B0aW9uIGhhcyBubworZWZmZWN0LgorCitUaGVyZSdzIG5vIGF0dGVtcHQgdG8gZGVjb2RlICUtc2VxdWVuY2VzICh5ZXQpIGluIHRoZSBwcm92aWRlZCBmaWxlIG5hbWUsIHNvCit0aGlzIG9wdGlvbiBtYXkgcHJvdmlkZSB5b3Ugd2l0aCByYXRoZXIgdW5leHBlY3RlZCBmaWxlIG5hbWVzLgorCitcZkJXQVJOSU5HXGZQOiBFeGVyY2lzZSBqdWRpY2lvdXMgdXNlIG9mIHRoaXMgb3B0aW9uLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3MuIEEKK3JvZ3VlIHNlcnZlciBjb3VsZCBzZW5kIHlvdSB0aGUgbmFtZSBvZiBhIERMTCBvciBvdGhlciBmaWxlIHRoYXQgY291bGQgcG9zc2libHkKK2JlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IGJ5IFdpbmRvd3Mgb3Igc29tZSB0aGlyZCBwYXJ0eSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3JlbW90ZS1uYW1lLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy9yZW1vdGUtbmFtZS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWQ2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy9yZW1vdGUtbmFtZS5kCkBAIC0wLDAgKzEsMjEgQEAKK0xvbmc6IHJlbW90ZS1uYW1lCitTaG9ydDogTworSGVscDogV3JpdGUgb3V0cHV0IHRvIGEgZmlsZSBuYW1lZCBhcyB0aGUgcmVtb3RlIGZpbGUKKy0tLQorV3JpdGUgb3V0cHV0IHRvIGEgbG9jYWwgZmlsZSBuYW1lZCBsaWtlIHRoZSByZW1vdGUgZmlsZSB3ZSBnZXQuIChPbmx5IHRoZSBmaWxlCitwYXJ0IG9mIHRoZSByZW1vdGUgZmlsZSBpcyB1c2VkLCB0aGUgcGF0aCBpcyBjdXQgb2ZmLikKKworVGhlIGZpbGUgd2lsbCBiZSBzYXZlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gSWYgeW91IHdhbnQgdGhlIGZpbGUKK3NhdmVkIGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeSwgbWFrZSBzdXJlIHlvdSBjaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZworZGlyZWN0b3J5IGJlZm9yZSBpbnZva2luZyBjdXJsIHdpdGggdGhpcyBvcHRpb24uCisKK1RoZSByZW1vdGUgZmlsZSBuYW1lIHRvIHVzZSBmb3Igc2F2aW5nIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBnaXZlbiBVUkwsCitub3RoaW5nIGVsc2UsIGFuZCBpZiBpdCBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBJZiB5b3Ugd2FudCB0aGUKK3NlcnZlciB0byBiZSBhYmxlIHRvIGNob29zZSB0aGUgZmlsZSBuYW1lIHJlZmVyIHRvIC0tcmVtb3RlLWhlYWRlci1uYW1lIHdoaWNoCitjYW4gYmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGlzIG9wdGlvbi4gSWYgdGhlIHNlcnZlciBjaG9vc2VzIGEgZmlsZSBuYW1lIGFuZAordGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuLgorCitUaGVyZSBpcyBubyBVUkwgZGVjb2RpbmcgZG9uZSBvbiB0aGUgZmlsZSBuYW1lLiBJZiBpdCBoYXMgJTIwIG9yIG90aGVyIFVSTAorZW5jb2RlZCBwYXJ0cyBvZiB0aGUgbmFtZSwgdGhleSB3aWxsIGVuZCB1cCBhcy1pcyBhcyBmaWxlIG5hbWUuCisKK1lvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkgdGltZXMgYXMgdGhlIG51bWJlciBvZiBVUkxzIHlvdSBoYXZlLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvc3NsdjIuZCBiL2RvY3MvY21kbGluZS1vcHRzL3NzbHYyLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkMmI4NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3NzbHYyLmQKQEAgLTAsMCArMSwxMyBAQAorU2hvcnQ6IDIKK0xvbmc6IHNzbHYyCitUYWdzOiBWZXJzaW9ucworUHJvdG9jb2xzOiBTU0wKK0FkZGVkOgorTXV0ZXhlZDogc3NsdjMgdGxzdjEgdGxzdjEuMSB0bHN2MS4yCitSZXF1aXJlczogVExTCitTZWUtYWxzbzogaHR0cDEuMSBodHRwMgorSGVscDogVXNlIFNTTHYyCistLS0KK0ZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAyIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBTU0wKK3NlcnZlci4gU29tZXRpbWVzIGN1cmwgaXMgYnVpbHQgd2l0aG91dCBTU0x2MiBzdXBwb3J0LiBTU0x2MiBpcyB3aWRlbHkKK2NvbnNpZGVyZWQgaW5zZWN1cmUgKHNlZSBSRkMgNjE3NikuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy9zc2x2My5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvc3NsdjMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFhZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9jbWRsaW5lLW9wdHMvc3NsdjMuZApAQCAtMCwwICsxLDEzIEBACitTaG9ydDogMworTG9uZzogc3NsdjMKK1RhZ3M6IFZlcnNpb25zCitQcm90b2NvbHM6IFNTTAorQWRkZWQ6CitNdXRleGVkOiBzc2x2MiB0bHN2MSB0bHN2MS4xIHRsc3YxLjIKK1JlcXVpcmVzOiBUTFMKK1NlZS1hbHNvOiBodHRwMS4xIGh0dHAyCitIZWxwOiBVc2UgU1NMdjMKKy0tLQorRm9yY2VzIGN1cmwgdG8gdXNlIFNTTCB2ZXJzaW9uIDMgd2hlbiBuZWdvdGlhdGluZyB3aXRoIGEgcmVtb3RlIFNTTAorc2VydmVyLiBTb21ldGltZXMgY3VybCBpcyBidWlsdCB3aXRob3V0IFNTTHYzIHN1cHBvcnQuIFNTTHYzIGlzIHdpZGVseQorY29uc2lkZXJlZCBpbnNlY3VyZSAoc2VlIFJGQyA3NTY4KS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3Rsc3YxLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy90bHN2MS5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy90bHN2MS5kCkBAIC0wLDAgKzEsMTQgQEAKK1Nob3J0OiAxCitMb25nOiB0bHN2MQorVGFnczogVmVyc2lvbnMKK1Byb3RvY29sczogU1NMCitBZGRlZDoKK011dGV4ZWQ6IHRsc3YxLjEgdGxzdjEuMgorUmVxdWlyZXM6IFRMUworU2VlLWFsc286IGh0dHAxLjEgaHR0cDIKK0hlbHA6IFVzZSBUTFN2MS4wIG9yIGdyZWF0ZXIKKy0tLQorRm9yY2VzIGN1cmwgdG8gdXNlIFRMUyB2ZXJzaW9uIDEueCB3aGVuIG5lZ290aWF0aW5nIHdpdGggYSByZW1vdGUgVExTIHNlcnZlci4KK1lvdSBjYW4gdXNlIG9wdGlvbnMgLS10bHN2MS4wLCAtLXRsc3YxLjEsIC0tdGxzdjEuMiwgYW5kIC0tdGxzdjEuMyB0byBjb250cm9sCit0aGUgVExTIHZlcnNpb24gbW9yZSBwcmVjaXNlbHkgKGlmIHRoZSBTU0wgYmFja2VuZCBpbiB1c2Ugc3VwcG9ydHMgc3VjaCBhCitsZXZlbCBvZiBjb250cm9sKS4KZGlmZiAtLWdpdCBhL2RvY3MvY21kbGluZS1vcHRzL3VzZS1hc2NpaS5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvdXNlLWFzY2lpLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzMDdkYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3VzZS1hc2NpaS5kCkBAIC0wLDAgKzEsOCBAQAorU2hvcnQ6IEIKK0xvbmc6IHVzZS1hc2NpaQorSGVscDogVXNlIEFTQ0lJL3RleHQgdHJhbnNmZXIKK1Byb3RvY29sczogRlRQIExEQVAKKy0tLQorRW5hYmxlIEFTQ0lJIHRyYW5zZmVyLiBGb3IgRlRQLCB0aGlzIGNhbiBhbHNvIGJlIGVuZm9yY2VkIGJ5IHVzaW5nIGFuIFVSTCB0aGF0CitlbmRzIHdpdGggIjt0eXBlPUEiLiBUaGlzIG9wdGlvbiBjYXVzZXMgZGF0YSBzZW50IHRvIHN0ZG91dCB0byBiZSBpbiB0ZXh0IG1vZGUKK2ZvciB3aW4zMiBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvZG9jcy9jbWRsaW5lLW9wdHMvdXNlci1hZ2VudC5kIGIvZG9jcy9jbWRsaW5lLW9wdHMvdXNlci1hZ2VudC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODYxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtZGxpbmUtb3B0cy91c2VyLWFnZW50LmQKQEAgLTAsMCArMSwxMiBAQAorU2hvcnQ6IEEKK0xvbmc6IHVzZXItYWdlbnQKK0FyZzogPG5hbWU+CitIZWxwOiBTZW5kIFVzZXItQWdlbnQgPG5hbWU+IHRvIHNlcnZlcgorUHJvdG9jb2xzOiBIVFRQCistLS0KKworU3BlY2lmeSB0aGUgVXNlci1BZ2VudCBzdHJpbmcgdG8gc2VuZCB0byB0aGUgSFRUUCBzZXJ2ZXIuIFRvIGVuY29kZSBibGFua3MgaW4KK3RoZSBzdHJpbmcsIHN1cnJvdW5kIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGUgbWFya3MuIFRoaXMgY2FuIGFsc28gYmUgc2V0Cit3aXRoIHRoZSAtLWhlYWRlciBvcHRpb24gb2YgY291cnNlLgorCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kb2NzL2NtZGxpbmUtb3B0cy92ZXJib3NlLmQgYi9kb2NzL2NtZGxpbmUtb3B0cy92ZXJib3NlLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzMzUyMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvY21kbGluZS1vcHRzL3ZlcmJvc2UuZApAQCAtMCwwICsxLDE5IEBACitTaG9ydDogdgorTG9uZzogdmVyYm9zZQorTXV0ZXhlZDogdHJhY2UgdHJhY2UtYXNjaWkKK0hlbHA6IE1ha2UgdGhlIG9wZXJhdGlvbiBtb3JlIHRhbGthdGl2ZQorU2VlLWFsc286IGluY2x1ZGUKKy0tLQorTWFrZXMgY3VybCB2ZXJib3NlIGR1cmluZyB0aGUgb3BlcmF0aW9uLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgc2VlaW5nCit3aGF0J3MgZ29pbmcgb24gInVuZGVyIHRoZSBob29kIi4gQSBsaW5lIHN0YXJ0aW5nIHdpdGggJz4nIG1lYW5zICJoZWFkZXIgZGF0YSIKK3NlbnQgYnkgY3VybCwgJzwnIG1lYW5zICJoZWFkZXIgZGF0YSIgcmVjZWl2ZWQgYnkgY3VybCB0aGF0IGlzIGhpZGRlbiBpbgorbm9ybWFsIGNhc2VzLCBhbmQgYSBsaW5lIHN0YXJ0aW5nIHdpdGggJyonIG1lYW5zIGFkZGl0aW9uYWwgaW5mbyBwcm92aWRlZCBieQorY3VybC4KKworSWYgeW91IG9ubHkgd2FudCBIVFRQIGhlYWRlcnMgaW4gdGhlIG91dHB1dCwgLS1pbmNsdWRlIG1pZ2h0IGJlIHRoZSBvcHRpb24KK3lvdSdyZSBsb29raW5nIGZvci4KKworSWYgeW91IHRoaW5rIHRoaXMgb3B0aW9uIHN0aWxsIGRvZXNuJ3QgZ2l2ZSB5b3UgZW5vdWdoIGRldGFpbHMsIGNvbnNpZGVyIHVzaW5nCistLXRyYWNlIG9yIC0tdHJhY2UtYXNjaWkgaW5zdGVhZC4KKworVXNlIC0tc2lsZW50IHRvIG1ha2UgY3VybCByZWFsbHkgcXVpZXQuCmRpZmYgLS1naXQgYS9kb2NzL2N1cmwuMSBiL2RvY3MvY3VybC4xCmluZGV4IGM1NzNmZjkuLjUxNjgwMzEgMTAwNjQ0Ci0tLSBhL2RvY3MvY3VybC4xCisrKyBiL2RvY3MvY3VybC4xCkBAIC0xNzYsOSArMTc2LDkgQEAKIC5JUCAiLTEsIC0tdGxzdjEiCiAoU1NMKQogRm9yY2VzIGN1cmwgdG8gdXNlIFRMUyB2ZXJzaW9uIDEueCB3aGVuIG5lZ290aWF0aW5nIHdpdGggYSByZW1vdGUgVExTIHNlcnZlci4KLVlvdSBjYW4gdXNlIG9wdGlvbnMgXGZJLS10bHN2MS4wXGZQLCBcZkktLXRsc3YxLjFcZlAsIGFuZCBcZkktLXRsc3YxLjJcZlAgdG8KLWNvbnRyb2wgdGhlIFRMUyB2ZXJzaW9uIG1vcmUgcHJlY2lzZWx5IChpZiB0aGUgU1NMIGJhY2tlbmQgaW4gdXNlIHN1cHBvcnRzIHN1Y2gKLWEgbGV2ZWwgb2YgY29udHJvbCkuCitZb3UgY2FuIHVzZSBvcHRpb25zIFxmSS0tdGxzdjEuMFxmUCwgXGZJLS10bHN2MS4xXGZQLCBcZkktLXRsc3YxLjJcZlAsIGFuZAorXGZJLS10bHN2MS4zXGZQIHRvIGNvbnRyb2wgdGhlIFRMUyB2ZXJzaW9uIG1vcmUgcHJlY2lzZWx5IChpZiB0aGUgU1NMIGJhY2tlbmQKK2luIHVzZSBzdXBwb3J0cyBzdWNoIGEgbGV2ZWwgb2YgY29udHJvbCkuCiAuSVAgIi0yLCAtLXNzbHYyIgogKFNTTCkgRm9yY2VzIGN1cmwgdG8gdXNlIFNTTCB2ZXJzaW9uIDIgd2hlbiBuZWdvdGlhdGluZyB3aXRoIGEgcmVtb3RlIFNTTAogc2VydmVyLiBTb21ldGltZXMgY3VybCBpcyBidWlsdCB3aXRob3V0IFNTTHYyIHN1cHBvcnQuIFNTTHYyIGlzIHdpZGVseQpAQCAtMzU2LDcgKzM1Niw3IEBACiBzdHJpcHBlZCBvdXQuIElmIHlvdSBkb24ndCB3YW50IHRoZSBAIGNoYXJhY3RlciB0byBoYXZlIGEgc3BlY2lhbAogaW50ZXJwcmV0YXRpb24gdXNlIFxmSS0tZGF0YS1yYXdcZlAgaW5zdGVhZC4KIC5JUCAiLUQsIC0tZHVtcC1oZWFkZXIgPGZpbGU+IgotV3JpdGUgdGhlIHByb3RvY29sIGhlYWRlcnMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgorV3JpdGUgdGhlIHJlY2VpdmVkIHByb3RvY29sIGhlYWRlcnMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgogCiBUaGlzIG9wdGlvbiBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgaGVhZGVycyB0aGF0IGFuIEhUVFAKIHNpdGUgc2VuZHMgdG8geW91LiBDb29raWVzIGZyb20gdGhlIGhlYWRlcnMgY291bGQgdGhlbiBiZSByZWFkIGluIGEgc2Vjb25kCkBAIC01MjAsNyArNTIwLDcgQEAKIHJlY29nbml6ZWQgYXMgcGFzc3dvcmQgZGVsaW1pdGVyLiAgSWYgdGhlIG5pY2tuYW1lIGNvbnRhaW5zICJcXCIsIGl0IG5lZWRzIHRvCiBiZSBlc2NhcGVkIGFzICJcXFxcIiBzbyB0aGF0IGl0IGlzIG5vdCByZWNvZ25pemVkIGFzIGFuIGVzY2FwZSBjaGFyYWN0ZXIuCiAKLShpT1MgYW5kIE1hYyBPUyBYIG9ubHkpIElmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCBTZWN1cmUgVHJhbnNwb3J0LCB0aGVuIHRoZQorKGlPUyBhbmQgbWFjT1Mgb25seSkgSWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IFNlY3VyZSBUcmFuc3BvcnQsIHRoZW4gdGhlCiBjZXJ0aWZpY2F0ZSBzdHJpbmcgY2FuIGVpdGhlciBiZSB0aGUgbmFtZSBvZiBhIGNlcnRpZmljYXRlL3ByaXZhdGUga2V5IGluIHRoZQogc3lzdGVtIG9yIHVzZXIga2V5Y2hhaW4sIG9yIHRoZSBwYXRoIHRvIGEgUEtDUyMxMi1lbmNvZGVkIGNlcnRpZmljYXRlIGFuZAogcHJpdmF0ZSBrZXkuIElmIHlvdSB3YW50IHRvIHVzZSBhIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHBsZWFzZQpAQCAtNTY5LDYgKzU2OSwxMiBAQAogSWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IHRoZSBOU1MgU1NMIGxpYnJhcnksIHRoZSBOU1MgUEVNIFBLQ1MjMTEgbW9kdWxlCiAobGlibnNzcGVtLnNvKSBuZWVkcyB0byBiZSBhdmFpbGFibGUgZm9yIHRoaXMgb3B0aW9uIHRvIHdvcmsgcHJvcGVybHkuCiAKKyhpT1MgYW5kIG1hY09TIG9ubHkpIElmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCBTZWN1cmUgVHJhbnNwb3J0LCB0aGVuIHRoaXMKK29wdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBTU0wgZW5naW5lcywgYnV0IGl0CitzaG91bGQgbm90IGJlIHNldC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGVuIGN1cmwgd2lsbCB1c2UgdGhlCitjZXJ0aWZpY2F0ZXMgaW4gdGhlIHN5c3RlbSBhbmQgdXNlciBLZXljaGFpbiB0byB2ZXJpZnkgdGhlIHBlZXIsIHdoaWNoIGlzIHRoZQorcHJlZmVycmVkIG1ldGhvZCBvZiB2ZXJpZnlpbmcgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZSBjaGFpbi4KKwogSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkLgogLklQICItLWNhcGF0aCA8Q0EgY2VydGlmaWNhdGUgZGlyZWN0b3J5PiIKIChTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIHRoZSBzcGVjaWZpZWQgY2VydGlmaWNhdGUgZGlyZWN0b3J5IHRvIHZlcmlmeSB0aGUKQEAgLTYxNCw2ICs2MjAsMjMgQEAKIAogVGhpcyBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBpbiB0aGUgT3BlblNTTCwgR251VExTIGFuZCBOU1MgYmFja2VuZHMuCiAoQWRkZWQgaW4gNy40MS4wKQorLklQICItLWZhaWwtZWFybHkiCitGYWlsIGFuZCBleGl0IG9uIGZpcnN0IGRldGVjdGVkIGVycm9yLgorCitXaGVuIGN1cmwgaXMgdXNlZCB0byBkbyBtdWx0aXBsZSB0cmFuc2ZlcnMgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgd2lsbAorYXR0ZW1wdCB0byBvcGVyYXRlIG9uIGVhY2ggZ2l2ZW4gVVJMLCBvbmUgYnkgb25lLiBCeSBkZWZhdWx0LCBpdCB3aWxsIGlnbm9yZQorZXJyb3JzIGlmIHRoZXJlIGFyZSBtb3JlIFVSTHMgZ2l2ZW4gYW5kIHRoZSBsYXN0IFVSTCdzIHN1Y2Nlc3Mgd2lsbCBkZXRlcm1pbmUKK3RoZSBlcnJvciBjb2RlIGN1cmwgcmV0dXJucy4gU28gZWFybHkgZmFpbHVyZXMgd2lsbCBiZSAiaGlkZGVuIiBieSBzdWJzZXF1ZW50CitzdWNjZXNzZnVsIHRyYW5zZmVycy4KKworVXNpbmcgdGhpcyBvcHRpb24sIGN1cmwgd2lsbCBpbnN0ZWFkIHJldHVybiBhbiBlcnJvciBvbiB0aGUgZmlyc3QgdHJhbnNmZXJzCit0aGF0IGZhaWxzLCBpbmRlcGVuZGVudCBvbiB0aGUgYW1vdW50IG9mIG1vcmUgVVJMcyB0aGF0IGFyZSBnaXZlbiBvbiB0aGUKK2NvbW1hbmQgbGluZS4gVGhpcyB3YXksIG5vIHRyYW5zZmVyIGZhaWx1cmVzIGdvIHVuZGV0ZWN0ZWQgYnkgc2NyaXB0cyBhbmQKK3NpbWlsYXIuCisKK1RoaXMgb3B0aW9uIHdpbGwgYXBwbHkgZm9yIGFsbCBnaXZlbiBVUkxzIGV2ZW4gaWYgeW91IHVzZSBcZkktLW5leHRcZlAuCisKKyhBZGRlZCBpbiA3LjUyLjApCiAuSVAgIi0tZmFsc2Utc3RhcnQiCiAKIChTU0wpIFRlbGxzIGN1cmwgdG8gdXNlIGZhbHNlIHN0YXJ0IGR1cmluZyB0aGUgVExTIGhhbmRzaGFrZS4gRmFsc2Ugc3RhcnQgaXMgYQpAQCAtMTAxOCwxMCArMTA0MSw2IEBACiBBcHBlbmRpbmcgJ2snIG9yICdLJyB3aWxsIGNvdW50IHRoZSBudW1iZXIgYXMga2lsb2J5dGVzLCAnbScgb3IgTScgbWFrZXMgaXQKIG1lZ2FieXRlcywgd2hpbGUgJ2cnIG9yICdHJyBtYWtlcyBpdCBnaWdhYnl0ZXMuIEV4YW1wbGVzOiAyMDBLLCAzbSBhbmQgMUcuCiAKLVRoZSBnaXZlbiByYXRlIGlzIHRoZSBhdmVyYWdlIHNwZWVkIGNvdW50ZWQgZHVyaW5nIHRoZSBlbnRpcmUgdHJhbnNmZXIuIEl0Ci1tZWFucyB0aGF0IGN1cmwgbWlnaHQgdXNlIGhpZ2hlciB0cmFuc2ZlciBzcGVlZHMgaW4gc2hvcnQgYnVyc3RzLCBidXQgb3ZlcgotdGltZSBpdCB1c2VzIG5vIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcmF0ZS4KLQogSWYgeW91IGFsc28gdXNlIHRoZSBcZkktWSwgLS1zcGVlZC1saW1pdFxmUCBvcHRpb24sIHRoYXQgb3B0aW9uIHdpbGwgdGFrZQogcHJlY2VkZW5jZSBhbmQgbWlnaHQgY3JpcHBsZSB0aGUgcmF0ZS1saW1pdGluZyBzbGlnaHRseSwgdG8gaGVscCBrZWVwaW5nIHRoZQogc3BlZWQtbGltaXQgbG9naWMgd29ya2luZy4KQEAgLTEyMzcsNyArMTI1NiwxNyBAQAogCiAgIGN1cmwgaHR0cDovL3tzaXRlLGhvc3R9Lmhvc3RbMS01XS5jb20gLW8gIiMxXyMyIgogCi1Zb3UgbWF5IHVzZSB0aGlzIG9wdGlvbiBhcyBtYW55IHRpbWVzIGFzIHRoZSBudW1iZXIgb2YgVVJMcyB5b3UgaGF2ZS4KK1lvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkgdGltZXMgYXMgdGhlIG51bWJlciBvZiBVUkxzIHlvdSBoYXZlLiBGb3IKK2V4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IHR3byBVUkxzIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSwgeW91IGNhbiB1c2UgaXQgbGlrZQordGhpczoKKworICBjdXJsIC1vIGFhIGV4YW1wbGUuY29tIC1vIGJiIGV4YW1wbGUubmV0CisKK2FuZCB0aGUgb3JkZXIgb2YgdGhlIC1vIG9wdGlvbnMgYW5kIHRoZSBVUkxzIGRvZXNuJ3QgbWF0dGVyLCBqdXN0IHRoYXQgdGhlCitmaXJzdCAtbyBpcyBmb3IgdGhlIGZpcnN0IFVSTCBhbmQgc28gb24sIHNvIHRoZSBhYm92ZSBjb21tYW5kIGxpbmUgY2FuIGFsc28gYmUKK3dyaXR0ZW4gYXMKKworICBjdXJsIGV4YW1wbGUuY29tIGV4YW1wbGUubmV0IC1vIGFhIC1vIGJiCiAKIFNlZSBhbHNvIHRoZSBcZkktLWNyZWF0ZS1kaXJzXGZQIG9wdGlvbiB0byBjcmVhdGUgdGhlIGxvY2FsIGRpcmVjdG9yaWVzCiBkeW5hbWljYWxseS4gU3BlY2lmeWluZyB0aGUgb3V0cHV0IGFzICctJyAoYSBzaW5nbGUgZGFzaCkgd2lsbCBmb3JjZSB0aGUKQEAgLTEzNTIsMTAgKzEzODEsOSBAQAogYSByZWRpcmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gdXNpbmcgXGZJLUwsIC0tbG9jYXRpb25cZlAKIChBZGRlZCBpbiA3LjI2LjApCiAuSVAgIi0tcHJvdG8gPHByb3RvY29scz4iCi1UZWxscyBjdXJsIHRvIHVzZSB0aGUgbGlzdGVkIHByb3RvY29scyBmb3IgaXRzIGluaXRpYWwgcmV0cmlldmFsLiBQcm90b2NvbHMKLWFyZSBldmFsdWF0ZWQgbGVmdCB0byByaWdodCwgYXJlIGNvbW1hIHNlcGFyYXRlZCwgYW5kIGFyZSBlYWNoIGEgcHJvdG9jb2wKLW5hbWUgb3IgJ2FsbCcsIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgemVybyBvciBtb3JlIG1vZGlmaWVycy4gQXZhaWxhYmxlCi1tb2RpZmllcnMgYXJlOgorVGVsbHMgY3VybCB0byBsaW1pdCB3aGF0IHByb3RvY29scyBpdCBtYXkgdXNlIGluIHRoZSB0cmFuc2Zlci4gUHJvdG9jb2xzIGFyZQorZXZhbHVhdGVkIGxlZnQgdG8gcmlnaHQsIGFyZSBjb21tYSBzZXBhcmF0ZWQsIGFuZCBhcmUgZWFjaCBhIHByb3RvY29sIG5hbWUgb3IKKydhbGwnLCBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IHplcm8gb3IgbW9yZSBtb2RpZmllcnMuIEF2YWlsYWJsZSBtb2RpZmllcnMgYXJlOgogLlJTCiAuVFAgMwogLkIgKwpAQCAtMTQxMiw4ICsxNDQwLDkgQEAKIAogKEFkZGVkIGluIDcuNDUuMCkKIC5JUCAiLS1wcm90by1yZWRpciA8cHJvdG9jb2xzPiIKLVRlbGxzIGN1cmwgdG8gdXNlIHRoZSBsaXN0ZWQgcHJvdG9jb2xzIG9uIHJlZGlyZWN0LiBTZWUgLS1wcm90byBmb3IgaG93Ci1wcm90b2NvbHMgYXJlIHJlcHJlc2VudGVkLgorVGVsbHMgY3VybCB0byBsaW1pdCB3aGF0IHByb3RvY29scyBpdCBtYXkgdXNlIG9uIHJlZGlyZWN0LiBQcm90b2NvbHMgZGVuaWVkIGJ5CistLXByb3RvIGFyZSBub3Qgb3ZlcnJpZGRlbiBieSB0aGlzIG9wdGlvbi4gU2VlIFxmSS0tcHJvdG9cZlAgZm9yIGhvdyBwcm90b2NvbHMKK2FyZSByZXByZXNlbnRlZC4KIAogRXhhbXBsZToKIApAQCAtMTQzOSw2ICsxNDY4LDMzIEBACiAuSVAgIi0tcHJveHktZGlnZXN0IgogVGVsbHMgY3VybCB0byB1c2UgSFRUUCBEaWdlc3QgYXV0aGVudGljYXRpb24gd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGdpdmVuCiBwcm94eS4gVXNlIFxmSS0tZGlnZXN0XGZQIGZvciBlbmFibGluZyBIVFRQIERpZ2VzdCB3aXRoIGEgcmVtb3RlIGhvc3QuCisuSVAgIi0tcHJveHktY2FjZXJ0IDxDQSBjZXJ0aWZpY2F0ZT4iCisoU1NMKSBTYW1lIGFzIC0tY2FjZXJ0IGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LWNhcGF0aCA8Q0EgY2VydGlmaWNhdGUgZGlyZWN0b3J5PiIKKyhTU0wpIFNhbWUgYXMgLS1jYXBhdGggYnV0IHVzZWQgaW4gSFRUUFMgcHJveHkgY29udGV4dC4KKyhBZGRlZCBpbiA3LjUyLjApCisuSVAgIi0tcHJveHktY2VydCA8Y2VydGlmaWNhdGVbOnBhc3N3b3JkXT4iCisoU1NMKSBTYW1lIGFzIFxmSS0tY2VydFxmUCBidXQgdXNlZCBpbiBIVFRQUyBwcm94eSBjb250ZXh0LgorKEFkZGVkIGluIDcuNTIuMCkKKy5JUCAiLS1wcm94eS1jZXJ0LXR5cGUgPHR5cGU+IgorKFNTTCkgU2FtZSBhcyBcZkktLWNlcnQtdHlwZVxmUCBidXQgdXNlZCBpbiBIVFRQUyBwcm94eSBjb250ZXh0LgorKEFkZGVkIGluIDcuNTIuMCkKKy5JUCAiLS1wcm94eS1jaXBoZXJzIDxsaXN0IG9mIGNpcGhlcnM+IgorKFNTTCkgU2FtZSBhcyBcZkktLWNpcGhlcnNcZlAgYnV0IHVzZWQgaW4gSFRUUFMgcHJveHkgY29udGV4dC4KKyhBZGRlZCBpbiA3LjUyLjApCisuSVAgIi0tcHJveHktY3JsZmlsZSA8ZmlsZT4iCisoSFRUUFMpIFNhbWUgYXMgXGZJLS1jcmxmaWxlXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LWluc2VjdXJlIgorKFNTTCkgU2FtZSBhcyBcZkktLWluc2VjdXJlXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LWtleSA8a2V5PiIKKyhTU0wpIFNhbWUgYXMgXGZJLS1rZXlcZlAgYnV0IHVzZWQgaW4gSFRUUFMgcHJveHkgY29udGV4dC4KKyhBZGRlZCBpbiA3LjUyLjApCisuSVAgIi0tcHJveHkta2V5LXR5cGUgPHR5cGU+IgorKFNTTCkgU2FtZSBhcyBcZkktLWtleS10eXBlXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQogLklQICItLXByb3h5LW5lZ290aWF0ZSIKIFRlbGxzIGN1cmwgdG8gdXNlIEhUVFAgTmVnb3RpYXRlIChTUE5FR08pIGF1dGhlbnRpY2F0aW9uIHdoZW4gY29tbXVuaWNhdGluZwogd2l0aCB0aGUgZ2l2ZW4gcHJveHkuIFVzZSBcZkktLW5lZ290aWF0ZVxmUCBmb3IgZW5hYmxpbmcgSFRUUCBOZWdvdGlhdGUgKFNQTkVHTykKQEAgLTE0NDYsMTEgKzE1MDIsMzUgQEAKIC5JUCAiLS1wcm94eS1udGxtIgogVGVsbHMgY3VybCB0byB1c2UgSFRUUCBOVExNIGF1dGhlbnRpY2F0aW9uIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBnaXZlbgogcHJveHkuIFVzZSBcZkktLW50bG1cZlAgZm9yIGVuYWJsaW5nIE5UTE0gd2l0aCBhIHJlbW90ZSBob3N0LgorLklQICItLXByb3h5LXBhc3MgPHBocmFzZT4iCisoU1NMKSBTYW1lIGFzIFxmSS0tcGFzc1xmUCBidXQgdXNlZCBpbiBIVFRQUyBwcm94eSBjb250ZXh0LgorKEFkZGVkIGluIDcuNTIuMCkKIC5JUCAiLS1wcm94eS1zZXJ2aWNlLW5hbWUgPHNlcnZpY2VuYW1lPiIKIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzZXJ2aWNlIG5hbWUgZm9yIHByb3h5IG5lZ290aWF0aW9uLgogCiBFeGFtcGxlczogLS1wcm94eS1uZWdvdGlhdGUgcHJveHktbmFtZSBcZkktLXByb3h5LXNlcnZpY2UtbmFtZVxmUCBzb2NrZCB3b3VsZCB1c2UKIHNvY2tkL3Byb3h5LW5hbWUuICAoQWRkZWQgaW4gNy40My4wKS4KKy5JUCAiLS1wcm94eS1zc2wtYWxsb3ctYmVhc3QiCisoU1NMKSBTYW1lIGFzIFxmSS0tc3NsLWFsbG93LWJlYXN0XGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LXNzbHYyIgorKFNTTCkgU2FtZSBhcyBcZkktLXNzbHYyXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LXNzbHYzIgorKFNTTCkgU2FtZSBhcyBcZkktLXNzbHYzXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LXRsc2F1dGh0eXBlIDxhdXRodHlwZT4iCitTYW1lIGFzIFxmSS0tdGxzYXV0aHR5cGVcZlAgYnV0IHVzZWQgaW4gSFRUUFMgcHJveHkgY29udGV4dC4KKyhBZGRlZCBpbiA3LjUyLjApCisuSVAgIi0tcHJveHktdGxzcGFzc3dvcmQgPHBhc3N3b3JkPiIKK1NhbWUgYXMgXGZJLS10bHNwYXNzd29yZFxmUCBidXQgdXNlZCBpbiBIVFRQUyBwcm94eSBjb250ZXh0LgorKEFkZGVkIGluIDcuNTIuMCkKKy5JUCAiLS1wcm94eS10bHN1c2VyIDx1c2VyPiIKK1NhbWUgYXMgXGZJLS10bHN1c2VyXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQorLklQICItLXByb3h5LXRsc3YxIgorKFNTTCkgU2FtZSBhcyBcZkktLXRsc3YxXGZQIGJ1dCB1c2VkIGluIEhUVFBTIHByb3h5IGNvbnRleHQuCisoQWRkZWQgaW4gNy41Mi4wKQogLklQICItLXByb3h5MS4wIDxwcm94eWhvc3RbOnBvcnRdPiIKIFVzZSB0aGUgc3BlY2lmaWVkIEhUVFAgMS4wIHByb3h5LiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMKIGFzc3VtZWQgYXQgcG9ydCAxMDgwLgpAQCAtMTYwOCw2ICsxNjg4LDEwIEBACiByZXRyaWVzLiAoQWRkZWQgaW4gNy4xMi4zKQogCiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQuCisuSVAgIi0tcmV0cnktY29ubnJlZnVzZWQiCitJbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgY29uZGl0aW9ucywgY29uc2lkZXIgRUNPTk5SRUZVU0VEIGFzIGEgdHJhbnNpZW50CitlcnJvciB0b28gZm9yIFxmSS0tcmV0cnlcZlAuIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG9nZXRoZXIgd2l0aAorXGZJLS1yZXRyeVxmUC4gKEFkZGVkIGluIDcuNTIuMCkKIC5JUCAiLS1yZXRyeS1kZWxheSA8c2Vjb25kcz4iCiBNYWtlIGN1cmwgc2xlZXAgdGhpcyBhbW91bnQgb2YgdGltZSBiZWZvcmUgZWFjaCByZXRyeSB3aGVuIGEgdHJhbnNmZXIgaGFzCiBmYWlsZWQgd2l0aCBhIHRyYW5zaWVudCBlcnJvciAoaXQgY2hhbmdlcyB0aGUgZGVmYXVsdCBiYWNrb2ZmIHRpbWUgYWxnb3JpdGhtCkBAIC0xNzYyLDYgKzE4NDYsMTEgQEAKIG9yIGV2ZW4KIAogY3VybCAtVCAiaW1nWzEtMTAwMF0ucG5nIiBmdHA6Ly9mdHAuZXhhbXBsZS5jb20vdXBsb2FkLworCitXaGVuIHVwbG9hZGluZyB0byBhbiBTTVRQIHNlcnZlcjogdGhlIHVwbG9hZGVkIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBSRkMgNTMyMgorZm9ybWF0dGVkLiBJdCBoYXMgdG8gZmVhdHVyZSB0aGUgbmVjZXNzYXJ5IHNldCBvZiBoZWFkZXJzIGFuZCBtYWlsIGJvZHkKK2Zvcm1hdHRlZCBjb3JyZWN0bHkgYnkgdGhlIHVzZXIgYXMgY3VybCB3aWxsIG5vdCB0cmFuc2NvZGUgbm9yIGVuY29kZSBpdAorZnVydGhlciBpbiBhbnkgd2F5LgogLklQICItLXRjcC1ub2RlbGF5IgogVHVybiBvbiB0aGUgVENQX05PREVMQVkgb3B0aW9uLiBTZWUgdGhlIFxmSWN1cmxfZWFzeV9zZXRvcHQoMylcZlAgbWFuIHBhZ2UgZm9yCiBkZXRhaWxzIGFib3V0IHRoaXMgb3B0aW9uLiAoQWRkZWQgaW4gNy4xMS4yKQpAQCAtMTgwOCw2ICsxODk3LDEwIEBACiAoU1NMKQogRm9yY2VzIGN1cmwgdG8gdXNlIFRMUyB2ZXJzaW9uIDEuMiB3aGVuIG5lZ290aWF0aW5nIHdpdGggYSByZW1vdGUgVExTIHNlcnZlci4KIChBZGRlZCBpbiA3LjM0LjApCisuSVAgIi0tdGxzdjEuMyIKKyhTU0wpCitGb3JjZXMgY3VybCB0byB1c2UgVExTIHZlcnNpb24gMS4zIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBUTFMgc2VydmVyLgorKEFkZGVkIGluIDcuNTIuMCkKIC5JUCAiLS10ci1lbmNvZGluZyIKIChIVFRQKSBSZXF1ZXN0IGEgY29tcHJlc3NlZCBUcmFuc2Zlci1FbmNvZGluZyByZXNwb25zZSB1c2luZyBvbmUgb2YgdGhlCiBhbGdvcml0aG1zIGN1cmwgc3VwcG9ydHMsIGFuZCB1bmNvbXByZXNzIHRoZSBkYXRhIHdoaWxlIHJlY2VpdmluZyBpdC4KQEAgLTE4MTYsNyArMTkwOSw4IEBACiAuSVAgIi0tdHJhY2UgPGZpbGU+IgogRW5hYmxlcyBhIGZ1bGwgdHJhY2UgZHVtcCBvZiBhbGwgaW5jb21pbmcgYW5kIG91dGdvaW5nIGRhdGEsIGluY2x1ZGluZwogZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24sIHRvIHRoZSBnaXZlbiBvdXRwdXQgZmlsZS4gVXNlICItIiBhcyBmaWxlbmFtZSB0byBoYXZlCi10aGUgb3V0cHV0IHNlbnQgdG8gc3Rkb3V0LgordGhlIG91dHB1dCBzZW50IHRvIHN0ZG91dC4gVXNlICIlIiBhcyBmaWxlbmFtZSB0byBoYXZlIHRoZSBvdXRwdXQgc2VudCB0bworc3RkZXJyLgogCiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgcHJldmlvdXMgdXNlcyBvZiBcZkktdiwgLS12ZXJib3NlXGZQIG9yCiBcZkktLXRyYWNlLWFzY2lpXGZQLgpAQCAtMTk3NCw2ICsyMDY4LDkgQEAKIC5CIHJlbW90ZV9wb3J0CiBUaGUgcmVtb3RlIHBvcnQgbnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRvbmUgY29ubmVjdGlvbiAoQWRkZWQgaW4gNy4yOS4wKQogLlRQCisuQiBzY2hlbWUKK1RoZSBVUkwgc2NoZW1lIChzb21ldGltZXMgY2FsbGVkIHByb3RvY29sKSB0aGF0IHdhcyBlZmZlY3RpdmVseSB1c2VkIChBZGRlZCBpbiA3LjUyLjApCisuVFAKIC5CIHNpemVfZG93bmxvYWQKIFRoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGRvd25sb2FkZWQuCiAuVFAKQEAgLTIyNTIsNyArMjM0OSw3IEBACiAuSVAgNwogRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdC4KIC5JUCA4Ci1GVFAgd2VpcmQgc2VydmVyIHJlcGx5LiBUaGUgc2VydmVyIHNlbnQgZGF0YSBjdXJsIGNvdWxkbid0IHBhcnNlLgorV2VpcmQgc2VydmVyIHJlcGx5LiBUaGUgc2VydmVyIHNlbnQgZGF0YSBjdXJsIGNvdWxkbid0IHBhcnNlLgogLklQIDkKIEZUUCBhY2Nlc3MgZGVuaWVkLiBUaGUgc2VydmVyIGRlbmllZCBsb2dpbiBvciBkZW5pZWQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyCiByZXNvdXJjZSBvciBkaXJlY3RvcnkgeW91IHdhbnRlZCB0byByZWFjaC4gTW9zdCBvZnRlbiB5b3UgdHJpZWQgdG8gY2hhbmdlIHRvIGEKZGlmZiAtLWdpdCBhL2RvY3MvZXhhbXBsZXMvMTAtYXQtYS10aW1lLmMgYi9kb2NzL2V4YW1wbGVzLzEwLWF0LWEtdGltZS5jCmluZGV4IGFhMTg2MmUuLjQ1NTUyOTEgMTAwNjQ0Ci0tLSBhL2RvY3MvZXhhbXBsZXMvMTAtYXQtYS10aW1lLmMKKysrIGIvZG9jcy9leGFtcGxlcy8xMC1hdC1hLXRpbWUuYwpAQCAtODYsNyArODYsNyBAQAogfTsKIAogI2RlZmluZSBNQVggMTAgLyogbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgQ05UIHNpemVvZih1cmxzKS9zaXplb2YoY2hhciopIC8qIHRvdGFsIG51bWJlciBvZiB0cmFuc2ZlcnMgdG8gZG8gKi8KKyNkZWZpbmUgQ05UIHNpemVvZih1cmxzKS9zaXplb2YoY2hhciAqKSAvKiB0b3RhbCBudW1iZXIgb2YgdHJhbnNmZXJzIHRvIGRvICovCiAKIHN0YXRpYyBzaXplX3QgY2IoY2hhciAqZCwgc2l6ZV90IG4sIHNpemVfdCBsLCB2b2lkICpwKQogewpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5uZXR3YXJlIGIvZG9jcy9leGFtcGxlcy9NYWtlZmlsZS5uZXR3YXJlCmluZGV4IDJkODVlNzMuLjlmZTlkYjQgMTAwNjQ0Ci0tLSBhL2RvY3MvZXhhbXBsZXMvTWFrZWZpbGUubmV0d2FyZQorKysgYi9kb2NzL2V4YW1wbGVzL01ha2VmaWxlLm5ldHdhcmUKQEAgLTYwLDcgKzYwLDcgQEAKIFRBUkdFVCAgPSBleGFtcGxlcwogVkVSU0lPTgk9ICQoTElCQ1VSTF9WRVJTSU9OKQogQ09QWVIJPSBDb3B5cmlnaHQgKEMpICQoTElCQ1VSTF9DT1BZUklHSFRfU1RSKQotREVTQ1IJPSBjVVJMICgkKExJQkFSQ0gpKQorREVTQ1IJPSBjdXJsICgkKExJQkFSQ0gpKQogTVRTQUZFCT0gWUVTCiBTVEFDSwk9IDgxOTIKIFNDUkVFTgk9IEV4YW1wbGUgUHJvZ3JhbQpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9hbnlhdXRocHV0LmMgYi9kb2NzL2V4YW1wbGVzL2FueWF1dGhwdXQuYwppbmRleCBiMTM2N2RlLi4xYzlmOTY1IDEwMDY0NAotLS0gYS9kb2NzL2V4YW1wbGVzL2FueWF1dGhwdXQuYworKysgYi9kb2NzL2V4YW1wbGVzL2FueWF1dGhwdXQuYwpAQCAtMTQ3LDEzICsxNDcsMTMgQEAKICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkX2NhbGxiYWNrKTsKIAogICAgIC8qIHdoaWNoIGZpbGUgdG8gdXBsb2FkICovCi0gICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCAodm9pZCopJmhkKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVBRERBVEEsICh2b2lkICopJmhkKTsKIAogICAgIC8qIHNldCB0aGUgaW9jdGwgZnVuY3Rpb24gKi8KICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU9DVExGVU5DVElPTiwgbXlfaW9jdGwpOwogCiAgICAgLyogcGFzcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBpb2N0bCBjYWxsYmFjayBhcyB3ZWxsICovCi0gICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lPQ1RMREFUQSwgKHZvaWQqKSZoZCk7CisgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lPQ1RMREFUQSwgKHZvaWQgKikmaGQpOwogCiAgICAgLyogZW5hYmxlICJ1cGxvYWRpbmciICh3aGljaCBtZWFucyBQVVQgd2hlbiBkb2luZyBIVFRQKSAqLwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKZGlmZiAtLWdpdCBhL2RvY3MvZXhhbXBsZXMvY2FjZXJ0aW5tZW0uYyBiL2RvY3MvZXhhbXBsZXMvY2FjZXJ0aW5tZW0uYwppbmRleCBiYmE4YzcyLi5hY2U1OGU0IDEwMDY0NAotLS0gYS9kb2NzL2V4YW1wbGVzL2NhY2VydGlubWVtLmMKKysrIGIvZG9jcy9leGFtcGxlcy9jYWNlcnRpbm1lbS5jCkBAIC0zNCwxMiArMzQsMTIgQEAKICAgcmV0dXJuIChubWVtYipzaXplKTsKIH0KIAotc3RhdGljIENVUkxjb2RlIHNzbGN0eF9mdW5jdGlvbihDVVJMICogY3VybCwgdm9pZCAqIHNzbGN0eCwgdm9pZCAqIHBhcm0pCitzdGF0aWMgQ1VSTGNvZGUgc3NsY3R4X2Z1bmN0aW9uKENVUkwgKmN1cmwsIHZvaWQgKnNzbGN0eCwgdm9pZCAqcGFybSkKIHsKLSAgWDUwOV9TVE9SRSAqIHN0b3JlOwotICBYNTA5ICogY2VydD1OVUxMOwotICBCSU8gKiBiaW87Ci0gIGNoYXIgKiBteXBlbSA9IC8qIHd3dy5jYWNlcnQub3JnICovCisgIFg1MDlfU1RPUkUgKnN0b3JlOworICBYNTA5ICpjZXJ0PU5VTEw7CisgIEJJTyAqYmlvOworICBjaGFyICpteXBlbSA9IC8qIHd3dy5jYWNlcnQub3JnICovCiAgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIlwKICAgICAiTUlJSFBUQ0NCU1dnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQjVNUkF3RGdZRFZRUUtFd2RTYjI5MFxuIlwKICAgICAiSUVOQk1SNHdIQVlEVlFRTEV4Vm9kSFJ3T2k4dmQzZDNMbU5oWTJWeWRDNXZjbWN4SWpBZ0JnTlZCQU1UR1VOQlxuIlwKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBpbnQgbWFpbih2b2lkKQogewotICBDVVJMICogY2g7CisgIENVUkwgKmNoOwogICBDVVJMY29kZSBydjsKIAogICBydj1jdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL2N1cmx4LmMgYi9kb2NzL2V4YW1wbGVzL2N1cmx4LmMKaW5kZXggMTU1ZGEyMy4uZTBkNzA5OSAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9jdXJseC5jCisrKyBiL2RvY3MvZXhhbXBsZXMvY3VybHguYwpAQCAtMTMzLDE0ICsxMzMsMTQgQEAKIC8qIFRoaXMgaXMgYSBjb250ZXh0IHRoYXQgd2UgcGFzcyB0byBhbGwgY2FsbGJhY2tzICovCiAKIHR5cGVkZWYgc3RydWN0IHNzbGN0eHBhcm1fc3QgewotICB1bnNpZ25lZCBjaGFyICogcDEyZmlsZTsKLSAgY29uc3QgY2hhciAqIHBzdDsKLSAgUEtDUzEyICogcDEyOwotICBFVlBfUEtFWSAqIHBrZXk7Ci0gIFg1MDkgKiB1c2VyY2VydDsKKyAgdW5zaWduZWQgY2hhciAqcDEyZmlsZTsKKyAgY29uc3QgY2hhciAqcHN0OworICBQS0NTMTIgKnAxMjsKKyAgRVZQX1BLRVkgKnBrZXk7CisgIFg1MDkgKnVzZXJjZXJ0OwogICBTVEFDS19PRihYNTA5KSAqIGNhOwotICBDVVJMICogY3VybDsKLSAgQklPICogZXJyb3JiaW87CisgIENVUkwgKmN1cmw7CisgIEJJTyAqZXJyb3JiaW87CiAgIGludCBhY2Nlc3N0eXBlOwogICBpbnQgdmVyYm9zZTsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAgICAgQklPX3ByaW50ZihwLT5lcnJvcmJpbywgImVudGVyaW5nIHNzbF9hcHBfdmVyaWZ5X2NhbGxiYWNrXG4iKTsKIAogICBpZigob2s9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KSkgJiYgY3R4LT5jZXJ0KSB7Ci0gICAgdW5zaWduZWQgY2hhciAqIGFjY2Vzc2luZm87CisgICAgdW5zaWduZWQgY2hhciAqYWNjZXNzaW5mbzsKICAgICBpZihwLT52ZXJib3NlID4gMSkKICAgICAgIFg1MDlfcHJpbnRfZXgocC0+ZXJyb3JiaW8sIGN0eC0+Y2VydCwgMCwgMCk7CiAKQEAgLTIyOCwxMCArMjI4LDEwIEBACiAgICAtIGFuIGFwcGxpY2F0aW9uIHZlcmlmaWNhdGlvbiBjYWxsYmFjayAodGhlIGZ1bmN0aW9uIGFib3ZlKQogKi8KIAotc3RhdGljIENVUkxjb2RlIHNzbGN0eGZ1bihDVVJMICogY3VybCwgdm9pZCAqIHNzbGN0eCwgdm9pZCAqIHBhcm0pCitzdGF0aWMgQ1VSTGNvZGUgc3NsY3R4ZnVuKENVUkwgKmN1cmwsIHZvaWQgKnNzbGN0eCwgdm9pZCAqcGFybSkKIHsKLSAgc3NsY3R4cGFybSAqIHAgPSAoc3NsY3R4cGFybSAqKSBwYXJtOwotICBTU0xfQ1RYICogY3R4ID0gKFNTTF9DVFggKikgc3NsY3R4OworICBzc2xjdHhwYXJtICpwID0gKHNzbGN0eHBhcm0gKikgcGFybTsKKyAgU1NMX0NUWCAqY3R4ID0gKFNTTF9DVFggKikgc3NsY3R4OwogCiAgIGlmKCFTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZShjdHgsIHAtPnVzZXJjZXJ0KSkgewogICAgIEJJT19wcmludGYocC0+ZXJyb3JiaW8sICJTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZSBwcm9ibGVtXG4iKTsKQEAgLTI3MCwyNCArMjcwLDI0IEBACiAgIEJJTyogaW49TlVMTDsKICAgQklPKiBvdXQ9TlVMTDsKIAotICBjaGFyICogb3V0ZmlsZSA9IE5VTEw7Ci0gIGNoYXIgKiBpbmZpbGUgPSBOVUxMOworICBjaGFyICpvdXRmaWxlID0gTlVMTDsKKyAgY2hhciAqaW5maWxlID0gTlVMTDsKIAogICBpbnQgdGFiTGVuZ3RoPTEwMDsKICAgY2hhciAqYmluYXJ5cHRyOwotICBjaGFyKiBtaW1ldHlwZTsKLSAgY2hhciogbWltZXR5cGVhY2NlcHQ9TlVMTDsKLSAgY2hhciogY29udGVudHR5cGU7Ci0gIGNvbnN0IGNoYXIqKiBwcDsKLSAgdW5zaWduZWQgY2hhciogaG9zdHBvcnR1cmwgPSBOVUxMOwotICBCSU8gKiBwMTJiaW87CisgIGNoYXIgKm1pbWV0eXBlOworICBjaGFyICptaW1ldHlwZWFjY2VwdD1OVUxMOworICBjaGFyICpjb250ZW50dHlwZTsKKyAgY29uc3QgY2hhciAqKnBwOworICB1bnNpZ25lZCBjaGFyICpob3N0cG9ydHVybCA9IE5VTEw7CisgIEJJTyAqcDEyYmlvOwogICBjaGFyICoqYXJncyA9IGFyZ3YgKyAxOwotICB1bnNpZ25lZCBjaGFyICogc2VydmVydXJsOworICB1bnNpZ25lZCBjaGFyICpzZXJ2ZXJ1cmw7CiAgIHNzbGN0eHBhcm0gcDsKICAgY2hhciAqcmVzcG9uc2U7CiAKICAgQ1VSTGNvZGUgcmVzOwotICBzdHJ1Y3QgY3VybF9zbGlzdCAqIGhlYWRlcnM9TlVMTDsKKyAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM9TlVMTDsKICAgaW50IGJhZGFyZz0wOwogCiAgIGJpbmFyeXB0ciA9IG1hbGxvYyh0YWJMZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9ldmhpcGVyZmlmby5jIGIvZG9jcy9leGFtcGxlcy9ldmhpcGVyZmlmby5jCmluZGV4IDExOGYxNTIuLjUyZjY4MjggMTAwNjQ0Ci0tLSBhL2RvY3MvZXhhbXBsZXMvZXZoaXBlcmZpZm8uYworKysgYi9kb2NzL2V4YW1wbGVzL2V2aGlwZXJmaWZvLmMKQEAgLTg2LDcgKzg2LDcgQEAKICAgc3RydWN0IGV2X3RpbWVyIHRpbWVyX2V2ZW50OwogICBDVVJMTSAqbXVsdGk7CiAgIGludCBzdGlsbF9ydW5uaW5nOwotICBGSUxFKiBpbnB1dDsKKyAgRklMRSAqaW5wdXQ7CiB9IEdsb2JhbEluZm87CiAKIApAQCAtMjQzLDcgKzI0Myw4IEBACiAKIAogLyogQXNzaWduIGluZm9ybWF0aW9uIHRvIGEgU29ja0luZm8gc3RydWN0dXJlICovCi1zdGF0aWMgdm9pZCBzZXRzb2NrKFNvY2tJbmZvKmYsIGN1cmxfc29ja2V0X3QgcywgQ1VSTCplLCBpbnQgYWN0LCBHbG9iYWxJbmZvKmcpCitzdGF0aWMgdm9pZCBzZXRzb2NrKFNvY2tJbmZvICpmLCBjdXJsX3NvY2tldF90IHMsIENVUkwgKmUsIGludCBhY3QsCisgICAgICAgICAgICAgICAgICAgIEdsb2JhbEluZm8gKmcpCiB7CiAgIHByaW50ZigiJXMgIFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAKZGlmZiAtLWdpdCBhL2RvY3MvZXhhbXBsZXMvZmlsZXVwbG9hZC5jIGIvZG9jcy9leGFtcGxlcy9maWxldXBsb2FkLmMKaW5kZXggMzYzZmFlNi4uNmIwNWM0YyAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9maWxldXBsb2FkLmMKKysrIGIvZG9jcy9leGFtcGxlcy9maWxldXBsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM3LDE2ICszNywxMiBAQAogICBGSUxFICpmZDsKIAogICBmZCA9IGZvcGVuKCJkZWJ1Z2l0IiwgInJiIik7IC8qIG9wZW4gZmlsZSB0byB1cGxvYWQgKi8KLSAgaWYoIWZkKSB7Ci0KKyAgaWYoIWZkKQogICAgIHJldHVybiAxOyAvKiBjYW4ndCBjb250aW51ZSAqLwotICB9CiAKICAgLyogdG8gZ2V0IHRoZSBmaWxlIHNpemUgKi8KLSAgaWYoZnN0YXQoZmlsZW5vKGZkKSwgJmZpbGVfaW5mbykgIT0gMCkgewotCisgIGlmKGZzdGF0KGZpbGVubyhmZCksICZmaWxlX2luZm8pICE9IDApCiAgICAgcmV0dXJuIDE7IC8qIGNhbid0IGNvbnRpbnVlICovCi0gIH0KIAogICBjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKICAgaWYoY3VybCkgewpAQCAtODYsNSArODIsNiBAQAogICAgIC8qIGFsd2F5cyBjbGVhbnVwICovCiAgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CiAgIH0KKyAgZmNsb3NlKGZkKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL2ZvcGVuLmMgYi9kb2NzL2V4YW1wbGVzL2ZvcGVuLmMKaW5kZXggNzFiZTE3OC4uNzQzNTI2NCAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9mb3Blbi5jCisrKyBiL2RvY3MvZXhhbXBsZXMvZm9wZW4uYwpAQCAtODQsNyArODQsNyBAQAogaW50IHVybF9mY2xvc2UoVVJMX0ZJTEUgKmZpbGUpOwogaW50IHVybF9mZW9mKFVSTF9GSUxFICpmaWxlKTsKIHNpemVfdCB1cmxfZnJlYWQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBVUkxfRklMRSAqZmlsZSk7Ci1jaGFyICogdXJsX2ZnZXRzKGNoYXIgKnB0ciwgc2l6ZV90IHNpemUsIFVSTF9GSUxFICpmaWxlKTsKK2NoYXIgKnVybF9mZ2V0cyhjaGFyICpwdHIsIHNpemVfdCBzaXplLCBVUkxfRklMRSAqZmlsZSk7CiB2b2lkIHVybF9yZXdpbmQoVVJMX0ZJTEUgKmZpbGUpOwogCiAvKiB3ZSB1c2UgYSBnbG9iYWwgb25lIGZvciBjb252ZW5pZW5jZSAqLwpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9mdHB1cGxvYWRyZXN1bWUuYyBiL2RvY3MvZXhhbXBsZXMvZnRwdXBsb2FkcmVzdW1lLmMKaW5kZXggNjQxNTYzNC4uOGY3ZjQ1ZCAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9mdHB1cGxvYWRyZXN1bWUuYworKysgYi9kb2NzL2V4YW1wbGVzL2Z0cHVwbG9hZHJlc3VtZS5jCkBAIC0zNiw4ICszNiw4IEBACiAvKiBUaGUgTWluR1cgaGVhZGVycyBhcmUgbWlzc2luZyBhIGZldyBXaW4zMiBmdW5jdGlvbiBkZWZpbml0aW9ucywKICAgIHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGlmIHlvdSB1c2UgVkMrKyAqLwogI2lmIGRlZmluZWQoX19NSU5HVzMyX18pICYmICFkZWZpbmVkKF9fTUlOR1c2NF9fKQotaW50IF9fY2RlY2wgX3Nuc2NhbmYoY29uc3QgY2hhciAqIGlucHV0LCBzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKTsKK2ludCBfX2NkZWNsIF9zbnNjYW5mKGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogI2VuZGlmCiAKIApAQCAtNzcsNyArNzcsNyBAQAogfQogCiAKLWludCB1cGxvYWQoQ1VSTCAqY3VybGhhbmRsZSwgY29uc3QgY2hhciAqIHJlbW90ZXBhdGgsIGNvbnN0IGNoYXIgKiBsb2NhbHBhdGgsCitpbnQgdXBsb2FkKENVUkwgKmN1cmxoYW5kbGUsIGNvbnN0IGNoYXIgKnJlbW90ZXBhdGgsIGNvbnN0IGNoYXIgKmxvY2FscGF0aCwKICAgICAgICAgICAgbG9uZyB0aW1lb3V0LCBsb25nIHRyaWVzKQogewogICBGSUxFICpmOwpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9naGlwZXIuYyBiL2RvY3MvZXhhbXBsZXMvZ2hpcGVyLmMKaW5kZXggNzMxN2E2My4uYzBmYmQ4MiAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9naGlwZXIuYworKysgYi9kb2NzL2V4YW1wbGVzL2doaXBlci5jCkBAIC05NCw3ICs5NCw4IEBACiB9IFNvY2tJbmZvOwogCiAvKiBEaWUgaWYgd2UgZ2V0IGEgYmFkIENVUkxNY29kZSBzb21ld2hlcmUgKi8KLXN0YXRpYyB2b2lkIG1jb2RlX29yX2RpZShjb25zdCBjaGFyICp3aGVyZSwgQ1VSTE1jb2RlIGNvZGUpIHsKK3N0YXRpYyB2b2lkIG1jb2RlX29yX2RpZShjb25zdCBjaGFyICp3aGVyZSwgQ1VSTE1jb2RlIGNvZGUpCit7CiAgIGlmKENVUkxNX09LICE9IGNvZGUpIHsKICAgICBjb25zdCBjaGFyICpzOwogICAgIHN3aXRjaCAoY29kZSkgewpAQCAtMjA2LDcgKzIwNyw4IEBACiB9CiAKIC8qIEFzc2lnbiBpbmZvcm1hdGlvbiB0byBhIFNvY2tJbmZvIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgc2V0c29jayhTb2NrSW5mbypmLCBjdXJsX3NvY2tldF90IHMsIENVUkwqZSwgaW50IGFjdCwgR2xvYmFsSW5mbypnKQorc3RhdGljIHZvaWQgc2V0c29jayhTb2NrSW5mbyAqZiwgY3VybF9zb2NrZXRfdCBzLCBDVVJMICplLCBpbnQgYWN0LAorICAgICAgICAgICAgICAgICAgICBHbG9iYWxJbmZvICpnKQogewogICBHSU9Db25kaXRpb24ga2luZCA9CiAgICAgKGFjdCZDVVJMX1BPTExfSU4/R19JT19JTjowKXwoYWN0JkNVUkxfUE9MTF9PVVQ/R19JT19PVVQ6MCk7CmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL2hpcGVyZmlmby5jIGIvZG9jcy9leGFtcGxlcy9oaXBlcmZpZm8uYwppbmRleCA5OGJjYWZlLi5kY2UwMDljIDEwMDY0NAotLS0gYS9kb2NzL2V4YW1wbGVzL2hpcGVyZmlmby5jCisrKyBiL2RvY3MvZXhhbXBsZXMvaGlwZXJmaWZvLmMKQEAgLTgyLDcgKzgyLDcgQEAKICAgc3RydWN0IGV2ZW50ICp0aW1lcl9ldmVudDsKICAgQ1VSTE0gKm11bHRpOwogICBpbnQgc3RpbGxfcnVubmluZzsKLSAgRklMRSogaW5wdXQ7CisgIEZJTEUgKmlucHV0OwogfSBHbG9iYWxJbmZvOwogCiAKQEAgLTIzMCw3ICsyMzAsOCBAQAogCiAKIC8qIEFzc2lnbiBpbmZvcm1hdGlvbiB0byBhIFNvY2tJbmZvIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgc2V0c29jayhTb2NrSW5mbypmLCBjdXJsX3NvY2tldF90IHMsIENVUkwqZSwgaW50IGFjdCwgR2xvYmFsSW5mbypnKQorc3RhdGljIHZvaWQgc2V0c29jayhTb2NrSW5mbyAqZiwgY3VybF9zb2NrZXRfdCBzLCBDVVJMICplLCBpbnQgYWN0LAorICAgICAgICAgICAgICAgICAgICBHbG9iYWxJbmZvICpnKQogewogICBpbnQga2luZCA9CiAgICAgIChhY3QmQ1VSTF9QT0xMX0lOP0VWX1JFQUQ6MCl8KGFjdCZDVVJMX1BPTExfT1VUP0VWX1dSSVRFOjApfEVWX1BFUlNJU1Q7CmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL2ltYXAtYXBwZW5kLmMgYi9kb2NzL2V4YW1wbGVzL2ltYXAtYXBwZW5kLmMKaW5kZXggM2Y4MzI4OS4uYmJmOWZlNCAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9pbWFwLWFwcGVuZC5jCisrKyBiL2RvY3MvZXhhbXBsZXMvaW1hcC1hcHBlbmQuYwpAQCAtODUsNiArODUsOCBAQAogewogICBDVVJMICpjdXJsOwogICBDVVJMY29kZSByZXMgPSBDVVJMRV9PSzsKKyAgY29uc3QgY2hhciAqKnA7CisgIGxvbmcgaW5maWxlc2l6ZTsKICAgc3RydWN0IHVwbG9hZF9zdGF0dXMgdXBsb2FkX2N0eDsKIAogICB1cGxvYWRfY3R4LmxpbmVzX3JlYWQgPSAwOwpAQCAtMTA3LDYgKzEwOSwxMiBAQAogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgJnVwbG9hZF9jdHgpOwogICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUExPQUQsIDFMKTsKIAorICAgIGluZmlsZXNpemUgPSAwOworICAgIGZvcihwID0gcGF5bG9hZF90ZXh0OyAqcDsgKytwKSB7CisgICAgICBpbmZpbGVzaXplICs9IChsb25nKXN0cmxlbigqcCk7CisgICAgfQorICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCBpbmZpbGVzaXplKTsKKwogICAgIC8qIFBlcmZvcm0gdGhlIGFwcGVuZCAqLwogICAgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOwogCmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL211bHRpLXV2LmMgYi9kb2NzL2V4YW1wbGVzL211bHRpLXV2LmMKaW5kZXggNTE1MjZjOC4uYzAyMjg5NCAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9tdWx0aS11di5jCisrKyBiL2RvY3MvZXhhbXBsZXMvbXVsdGktdXYuYwpAQCAtMjQsMTggKzI0LDEyIEBACiAgKiBtdWx0aV9zb2NrZXQgQVBJIHVzaW5nIGxpYnV2CiAgKiA8L0RFU0M+CiAgKi8KLS8qIEV4YW1wbGUgYXBwbGljYXRpb24gY29kZSB1c2luZyB0aGUgbXVsdGkgc29ja2V0IGludGVyZmFjZSB0byBkb3dubG9hZAotICAgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSwgYnV0IGluc3RlYWQgb2YgdXNpbmcgY3VybF9tdWx0aV9wZXJmb3JtIGFuZAotICAgY3VybF9tdWx0aV93YWl0LCB3aGljaCB1c2VzIHNlbGVjdCgpLCB3ZSB1c2UgbGlidXYuCi0gICBJdCBzdXBwb3J0cyBlcG9sbCwga3F1ZXVlLCBldGMuIG9uIHVuaXhlcyBhbmQgZmFzdCBJTyBjb21wbGV0aW9uIHBvcnRzIG9uCi0gICBXaW5kb3dzLCB3aGljaCBtZWFucywgaXQgc2hvdWxkIGJlIHZlcnkgZmFzdCBvbiBhbGwgcGxhdGZvcm1zLi4KLQotICAgV3JpdHRlbiBieSBDbGVtZW5zIEdydWJlciwgYmFzZWQgb24gYW4gb3V0ZGF0ZWQgZXhhbXBsZSBmcm9tIHV2Ym9vayBhbmQKLSAgIHNvbWUgdGVzdHMgZnJvbSBsaWJ1di4KKy8qIEV4YW1wbGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIG11bHRpIHNvY2tldCBpbnRlcmZhY2UgdG8gZG93bmxvYWQgbXVsdGlwbGUKKyAgIGZpbGVzIGluIHBhcmFsbGVsLCBwb3dlcmVkIGJ5IGxpYnV2LgogCiAgICBSZXF1aXJlcyBsaWJ1diBhbmQgKG9mIGNvdXJzZSkgbGliY3VybC4KIAotICAgU2VlIGh0dHA6Ly9uaWtoaWxtLmdpdGh1Yi5jb20vdXZib29rLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsaWJ1di4KKyAgIFNlZSBodHRwczovL25pa2hpbG0uZ2l0aHViLmNvbS91dmJvb2svIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGxpYnV2LgogKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC03Nyw3ICs3MSw2IEBACiAgIHV2X2Nsb3NlKCh1dl9oYW5kbGVfdCAqKSAmY29udGV4dC0+cG9sbF9oYW5kbGUsIGN1cmxfY2xvc2VfY2IpOwogfQogCi0KIHZvaWQgYWRkX2Rvd25sb2FkKGNvbnN0IGNoYXIgKnVybCwgaW50IG51bSkKIHsKICAgY2hhciBmaWxlbmFtZVs1MF07CkBAIC0xMDIsMjIgKzk1LDI4IEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX211bHRpX2luZm8odm9pZCkKIHsKLSAgaW50IHJ1bm5pbmdfaGFuZGxlczsKICAgY2hhciAqZG9uZV91cmw7CiAgIENVUkxNc2cgKm1lc3NhZ2U7CiAgIGludCBwZW5kaW5nOworICBDVVJMICplYXN5X2hhbmRsZTsKICAgRklMRSAqZmlsZTsKIAogICB3aGlsZSgobWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxfaGFuZGxlLCAmcGVuZGluZykpKSB7CiAgICAgc3dpdGNoKG1lc3NhZ2UtPm1zZykgewogICAgIGNhc2UgQ1VSTE1TR19ET05FOgotICAgICAgY3VybF9lYXN5X2dldGluZm8obWVzc2FnZS0+ZWFzeV9oYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAmZG9uZV91cmwpOwotICAgICAgY3VybF9lYXN5X2dldGluZm8obWVzc2FnZS0+ZWFzeV9oYW5kbGUsIENVUkxJTkZPX1BSSVZBVEUsICZmaWxlKTsKKyAgICAgIC8qIERvIG5vdCB1c2UgbWVzc2FnZSBkYXRhIGFmdGVyIGNhbGxpbmcgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgYW5kCisgICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cCgpLiBBcyBwZXIgY3VybF9tdWx0aV9pbmZvX3JlYWQoKSBkb2NzOgorICAgICAgICAgIldBUk5JTkc6IFRoZSBkYXRhIHRoZSByZXR1cm5lZCBwb2ludGVyIHBvaW50cyB0byB3aWxsIG5vdCBzdXJ2aXZlCisgICAgICAgICBjYWxsaW5nIGN1cmxfbXVsdGlfY2xlYW51cCwgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlIG9yCisgICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cC4iICovCisgICAgICBlYXN5X2hhbmRsZSA9IG1lc3NhZ2UtPmVhc3lfaGFuZGxlOworCisgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhlYXN5X2hhbmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJmRvbmVfdXJsKTsKKyAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGVhc3lfaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmZmlsZSk7CiAgICAgICBwcmludGYoIiVzIERPTkVcbiIsIGRvbmVfdXJsKTsKIAotICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxfaGFuZGxlLCBtZXNzYWdlLT5lYXN5X2hhbmRsZSk7Ci0gICAgICBjdXJsX2Vhc3lfY2xlYW51cChtZXNzYWdlLT5lYXN5X2hhbmRsZSk7CisgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybF9oYW5kbGUsIGVhc3lfaGFuZGxlKTsKKyAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGVhc3lfaGFuZGxlKTsKICAgICAgIGlmKGZpbGUpIHsKICAgICAgICAgZmNsb3NlKGZpbGUpOwogICAgICAgfQpAQCAtMTM1LDkgKzEzNCw2IEBACiAgIGludCBydW5uaW5nX2hhbmRsZXM7CiAgIGludCBmbGFncyA9IDA7CiAgIGN1cmxfY29udGV4dF90ICpjb250ZXh0OwotICBjaGFyICpkb25lX3VybDsKLSAgQ1VSTE1zZyAqbWVzc2FnZTsKLSAgaW50IHBlbmRpbmc7CiAKICAgdXZfdGltZXJfc3RvcCgmdGltZW91dCk7CiAKQEAgLTE0Niw3ICsxNDIsNyBAQAogICBpZihldmVudHMgJiBVVl9XUklUQUJMRSkKICAgICBmbGFncyB8PSBDVVJMX0NTRUxFQ1RfT1VUOwogCi0gIGNvbnRleHQgPSAoY3VybF9jb250ZXh0X3QgKikgcmVxOworICBjb250ZXh0ID0gKGN1cmxfY29udGV4dF90ICopIHJlcS0+ZGF0YTsKIAogICBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oY3VybF9oYW5kbGUsIGNvbnRleHQtPnNvY2tmZCwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnVubmluZ19oYW5kbGVzKTsKQEAgLTE3NCwyMiArMTcwLDIzIEBACiAgICAgICAgICAgICAgICAgICB2b2lkICpzb2NrZXRwKQogewogICBjdXJsX2NvbnRleHRfdCAqY3VybF9jb250ZXh0OwotICBpZihhY3Rpb24gPT0gQ1VSTF9QT0xMX0lOIHx8IGFjdGlvbiA9PSBDVVJMX1BPTExfT1VUKSB7Ci0gICAgaWYoc29ja2V0cCkgewotICAgICAgY3VybF9jb250ZXh0ID0gKGN1cmxfY29udGV4dF90ICopIHNvY2tldHA7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgY3VybF9jb250ZXh0ID0gY3JlYXRlX2N1cmxfY29udGV4dChzKTsKLSAgICB9Ci0gICAgY3VybF9tdWx0aV9hc3NpZ24oY3VybF9oYW5kbGUsIHMsICh2b2lkICopIGN1cmxfY29udGV4dCk7Ci0gIH0KKyAgaW50IGV2ZW50cyA9IDA7CiAKICAgc3dpdGNoKGFjdGlvbikgewogICBjYXNlIENVUkxfUE9MTF9JTjoKLSAgICB1dl9wb2xsX3N0YXJ0KCZjdXJsX2NvbnRleHQtPnBvbGxfaGFuZGxlLCBVVl9SRUFEQUJMRSwgY3VybF9wZXJmb3JtKTsKLSAgICBicmVhazsKICAgY2FzZSBDVVJMX1BPTExfT1VUOgotICAgIHV2X3BvbGxfc3RhcnQoJmN1cmxfY29udGV4dC0+cG9sbF9oYW5kbGUsIFVWX1dSSVRBQkxFLCBjdXJsX3BlcmZvcm0pOworICBjYXNlIENVUkxfUE9MTF9JTk9VVDoKKyAgICBjdXJsX2NvbnRleHQgPSBzb2NrZXRwID8KKyAgICAgIChjdXJsX2NvbnRleHRfdCAqKSBzb2NrZXRwIDogY3JlYXRlX2N1cmxfY29udGV4dChzKTsKKworICAgIGN1cmxfbXVsdGlfYXNzaWduKGN1cmxfaGFuZGxlLCBzLCAodm9pZCAqKSBjdXJsX2NvbnRleHQpOworCisgICAgaWYoYWN0aW9uICE9IENVUkxfUE9MTF9JTikKKyAgICAgIGV2ZW50cyB8PSBVVl9XUklUQUJMRTsKKyAgICBpZihhY3Rpb24gIT0gQ1VSTF9QT0xMX09VVCkKKyAgICAgIGV2ZW50cyB8PSBVVl9SRUFEQUJMRTsKKworICAgIHV2X3BvbGxfc3RhcnQoJmN1cmxfY29udGV4dC0+cG9sbF9oYW5kbGUsIGV2ZW50cywgY3VybF9wZXJmb3JtKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMX1BPTExfUkVNT1ZFOgogICAgIGlmKHNvY2tldHApIHsKQEAgLTIxMyw3ICsyMTAsNyBAQAogICAgIHJldHVybiAwOwogCiAgIGlmKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGluaXQgY1VSTFxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgaW5pdCBjdXJsXG4iKTsKICAgICByZXR1cm4gMTsKICAgfQogCmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL29wZW5zc2x0aHJlYWRsb2NrLmMgYi9kb2NzL2V4YW1wbGVzL29wZW5zc2x0aHJlYWRsb2NrLmMKaW5kZXggZWViYzQyZS4uNmY4NmM3ZiAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9vcGVuc3NsdGhyZWFkbG9jay5jCisrKyBiL2RvY3MvZXhhbXBsZXMvb3BlbnNzbHRocmVhZGxvY2suYwpAQCAtNTIsNyArNTIsNyBAQAogLyogVGhpcyBhcnJheSB3aWxsIHN0b3JlIGFsbCBvZiB0aGUgbXV0ZXhlcyBhdmFpbGFibGUgdG8gT3BlblNTTC4gKi8KIHN0YXRpYyBNVVRFWF9UWVBFICptdXRleF9idWY9IE5VTEw7CiAKLXN0YXRpYyB2b2lkIGxvY2tpbmdfZnVuY3Rpb24oaW50IG1vZGUsIGludCBuLCBjb25zdCBjaGFyICogZmlsZSwgaW50IGxpbmUpCitzdGF0aWMgdm9pZCBsb2NraW5nX2Z1bmN0aW9uKGludCBtb2RlLCBpbnQgbiwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCiB7CiAgIGlmKG1vZGUgJiBDUllQVE9fTE9DSykKICAgICBNVVRFWF9MT0NLKG11dGV4X2J1ZltuXSk7CmRpZmYgLS1naXQgYS9kb2NzL2V4YW1wbGVzL3J0c3AuYyBiL2RvY3MvZXhhbXBsZXMvcnRzcC5jCmluZGV4IDYzYzQ2ZTEuLmJkYWIzOTUgMTAwNjQ0Ci0tLSBhL2RvY3MvZXhhbXBsZXMvcnRzcC5jCisrKyBiL2RvY3MvZXhhbXBsZXMvcnRzcC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAogICBwcmludGYoIlxuUlRTUCByZXF1ZXN0ICVzXG4iLCBWRVJTSU9OX1NUUik7CiAgIHByaW50ZigiICAgIFByb2plY3Qgd2ViIHNpdGU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9ydHNwcmVxdWVzdC9cbiIpOwotICBwcmludGYoIiAgICBSZXF1aXJlcyBjVVJMIFY3LjIwIG9yIGdyZWF0ZXJcblxuIik7CisgIHByaW50ZigiICAgIFJlcXVpcmVzIGN1cmwgVjcuMjAgb3IgZ3JlYXRlclxuXG4iKTsKIAogICAvKiBjaGVjayBjb21tYW5kIGxpbmUgKi8KICAgaWYoKGFyZ2MgIT0gMikgJiYgKGFyZ2MgIT0gMykpIHsKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgIGlmKHJlcyA9PSBDVVJMRV9PSykgewogICAgICAgY3VybF92ZXJzaW9uX2luZm9fZGF0YSAqZGF0YSA9IGN1cmxfdmVyc2lvbl9pbmZvKENVUkxWRVJTSU9OX05PVyk7CiAgICAgICBDVVJMICpjdXJsOwotICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgY1VSTCBWJXMgbG9hZGVkXG4iLCBkYXRhLT52ZXJzaW9uKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgIGN1cmwgViVzIGxvYWRlZFxuIiwgZGF0YS0+dmVyc2lvbik7CiAKICAgICAgIC8qIGluaXRpYWxpemUgdGhpcyBjdXJsIHNlc3Npb24gKi8KICAgICAgIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvZG9jcy9leGFtcGxlcy9zZXNzaW9uaW5mby5jIGIvZG9jcy9leGFtcGxlcy9zZXNzaW9uaW5mby5jCmluZGV4IDExYzg3Y2QuLjAyNGEwZTEgMTAwNjQ0Ci0tLSBhL2RvY3MvZXhhbXBsZXMvc2Vzc2lvbmluZm8uYworKysgYi9kb2NzL2V4YW1wbGVzL3Nlc3Npb25pbmZvLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIDwvREVTQz4KICAqLwogCi0vKiBOb3RlIHRoYXQgdGhpcyBleGFtcGxlIGN1cnJlbnRseSByZXF1aXJlcyBjVVJMIHRvIGJlIGxpbmtlZCBhZ2FpbnN0CisvKiBOb3RlIHRoYXQgdGhpcyBleGFtcGxlIGN1cnJlbnRseSByZXF1aXJlcyBjdXJsIHRvIGJlIGxpbmtlZCBhZ2FpbnN0CiAgICBHbnVUTFMgKGFuZCB0aGlzIHByb2dyYW0gbXVzdCBhbHNvIGJlIGxpbmtlZCBhZ2FpbnN0IC1sZ251dGxzKS4gKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvTWFrZWZpbGUuYW0gYi9kb2NzL2xpYmN1cmwvTWFrZWZpbGUuYW0KaW5kZXggNDlhY2Q5Ny4uMmQ1MWI0NiAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL01ha2VmaWxlLmFtCisrKyBiL2RvY3MvbGliY3VybC9NYWtlZmlsZS5hbQpAQCAtOTAsOCArOTAsOCBAQAogCiBDTEVBTkZJTEVTID0gJChIVE1MUEFHRVMpICQoUERGUEFHRVMpICQoVEVTVFMpIGxpYmN1cmwtc3ltYm9scy4zCiAKLUVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSAkKEhUTUxQQUdFUykgaW5kZXguaHRtbCAkKFBERlBBR0VTKSBBQkkgXAotICBzeW1ib2xzLWluLXZlcnNpb25zIHN5bWJvbHMucGwgbWtzeW1ib2xzbWFucGFnZS5wbAorRVhUUkFfRElTVCA9ICQobWFuX01BTlMpIGluZGV4Lmh0bWwgQUJJIHN5bWJvbHMtaW4tdmVyc2lvbnMgc3ltYm9scy5wbCAgXAorICBta3N5bWJvbHNtYW5wYWdlLnBsCiBNQU4ySFRNTD0gcm9mZml0IC0tbWFuZGlyPS4gJDwgPiRACiAKIFNVRkZJWEVTID0gLjMgLmh0bWwKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfZ2V0aW5mby4zIGIvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9nZXRpbmZvLjMKaW5kZXggOWZmY2QxNC4uZmFiYzdlOSAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9nZXRpbmZvLjMKKysrIGIvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9nZXRpbmZvLjMKQEAgLTEwNCw2ICsxMDQsOSBAQAogLklQIENVUkxJTkZPX1NTTF9WRVJJRllSRVNVTFQKIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiByZXN1bHQuCiBTZWUgXGZJQ1VSTElORk9fU1NMX1ZFUklGWVJFU1VMVCgzKVxmUAorLklQIENVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQKK1Byb3h5IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiByZXN1bHQuCitTZWUgXGZJQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVCgzKVxmUAogLklQIENVUkxJTkZPX1NTTF9FTkdJTkVTCiBBIGxpc3Qgb2YgT3BlblNTTCBjcnlwdG8gZW5naW5lcy4KIFNlZSBcZklDVVJMSU5GT19TU0xfRU5HSU5FUygzKVxmUApAQCAtMTgwLDYgKzE4MywxMiBAQAogLklQIENVUkxJTkZPX1JUU1BfQ1NFUV9SRUNWCiBSVFNQIENTZXEgbGFzdCByZWNlaXZlZC4KIFNlZSBcZklDVVJMSU5GT19SVFNQX0NTRVFfUkVDVigzKVxmUAorLklQIENVUkxJTkZPX1BST1RPQ09MCitUaGUgcHJvdG9jb2wgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24uIChBZGRlZCBpbiA3LjUyLjApCitTZWUgXGZJQ1VSTElORk9fUFJPVE9DT0woMylcZlAKKy5JUCBDVVJMSU5GT19TQ0hFTUUKK1RoZSBzY2hlbWUgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24uIChBZGRlZCBpbiA3LjUyLjApCitTZWUgXGZJQ1VSTElORk9fU0NIRU1FKDMpXGZQCiAuU0ggVElNRVMKIC5uZgogQW4gb3ZlcnZpZXcgb2YgdGhlIHNpeCB0aW1lIHZhbHVlcyBhdmFpbGFibGUgZnJvbSBjdXJsX2Vhc3lfZ2V0aW5mbygpCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NldG9wdC4zIGIvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV9zZXRvcHQuMwppbmRleCA3NWYxY2U0Li41OTBhNDdmIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3NldG9wdC4zCisrKyBiL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfc2V0b3B0LjMKQEAgLTE0NCw2ICsxNDQsOCBAQAogc3RkZXJyIHJlcGxhY2VtZW50IHN0cmVhbS4gU2VlIFxmSUNVUkxPUFRfU1RERVJSKDMpXGZQCiAuSVAgQ1VSTE9QVF9GQUlMT05FUlJPUgogRmFpbCBvbiBIVFRQIDR4eCBlcnJvcnMuIFxmSUNVUkxPUFRfRkFJTE9ORVJST1IoMylcZlAKKy5JUCBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUgorS2VlcCBzZW5kaW5nIG9uIEhUVFAgPj0gMzAwIGVycm9ycy4gXGZJQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IoMylcZlAKIC5TSCBORVRXT1JLIE9QVElPTlMKIC5JUCBDVVJMT1BUX1VSTAogVVJMIHRvIHdvcmsgb24uIFNlZSBcZklDVVJMT1BUX1VSTCgzKVxmUApAQCAtMTU3LDEwICsxNTksMTQgQEAKIERlZmF1bHQgcHJvdG9jb2wuIFNlZSBcZklDVVJMT1BUX0RFRkFVTFRfUFJPVE9DT0woMylcZlAKIC5JUCBDVVJMT1BUX1BST1hZCiBQcm94eSB0byB1c2UuIFNlZSBcZklDVVJMT1BUX1BST1hZKDMpXGZQCisuSVAgQ1VSTE9QVF9TT0NLU19QUk9YWQorU29ja3MgcHJveHkgdG8gdXNlLiBTZWUgXGZJQ1VSTE9QVF9TT0NLU19QUk9YWSgzKVxmUAogLklQIENVUkxPUFRfUFJPWFlQT1JUCiBQcm94eSBwb3J0IHRvIHVzZS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlQT1JUKDMpXGZQCiAuSVAgQ1VSTE9QVF9QUk9YWVRZUEUKIFByb3h5IHR5cGUuIFNlZSBcZklDVVJMT1BUX1BST1hZVFlQRSgzKVxmUAorLklQIENVUkxPUFRfU09DS1NfUFJPWFlUWVBFCitTb2NrcyBwcm94eSB0eXBlLiBTZWUgXGZJQ1VSTE9QVF9TT0NLU19QUk9YWVRZUEUoMylcZlAKIC5JUCBDVVJMT1BUX05PUFJPWFkKIEZpbHRlciBvdXQgaG9zdHMgZnJvbSBwcm94eSB1c2UuIFxmSUNVUkxPUFRfTk9QUk9YWSgzKVxmUAogLklQIENVUkxPUFRfSFRUUFBST1hZVFVOTkVMCkBAIC0yMjYsMTAgKzIzMiwxNiBAQAogSFRUUCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gbWV0aG9kcy4gU2VlIFxmSUNVUkxPUFRfSFRUUEFVVEgoMylcZlAKIC5JUCBDVVJMT1BUX1RMU0FVVEhfVVNFUk5BTUUKIFRMUyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUuIFNlZSBcZklDVVJMT1BUX1RMU0FVVEhfVVNFUk5BTUUoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUKK1Byb3h5IFRMUyBhdXRoZW50aWNhdGlvbiB1c2VyIG5hbWUuIFNlZSBcZklDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUoMylcZlAKIC5JUCBDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQKIFRMUyBhdXRoZW50aWNhdGlvbiBwYXNzd29yZC4gU2VlIFxmSUNVUkxPUFRfVExTQVVUSF9QQVNTV09SRCgzKVxmUAorLklQIENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRAorUHJveHkgVExTIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkLiBTZWUgXGZJQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEKDMpXGZQCiAuSVAgQ1VSTE9QVF9UTFNBVVRIX1RZUEUKIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2RzLiBTZWUgXGZJQ1VSTE9QVF9UTFNBVVRIX1RZUEUoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRQorUHJveHkgVExTIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuIFNlZSBcZklDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRSgzKVxmUAogLklQIENVUkxPUFRfUFJPWFlBVVRICiBIVFRQIHByb3h5IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuIFNlZSBcZklDVVJMT1BUX1BST1hZQVVUSCgzKVxmUAogLklQIENVUkxPUFRfU0FTTF9JUgpAQCAtNDQ1LDE0ICs0NTcsMjQgQEAKIC5TSCBTU0wgYW5kIFNFQ1VSSVRZIE9QVElPTlMKIC5JUCBDVVJMT1BUX1NTTENFUlQKIENsaWVudCBjZXJ0LiBTZWUgXGZJQ1VSTE9QVF9TU0xDRVJUKDMpXGZQCisuSVAgQ1VSTE9QVF9QUk9YWV9TU0xDRVJUCitQcm94eSBjbGllbnQgY2VydC4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMQ0VSVCgzKVxmUAogLklQIENVUkxPUFRfU1NMQ0VSVFRZUEUKIENsaWVudCBjZXJ0IHR5cGUuICBTZWUgXGZJQ1VSTE9QVF9TU0xDRVJUVFlQRSgzKVxmUAorLklQIENVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUKK1Byb3h5IGNsaWVudCBjZXJ0IHR5cGUuICBTZWUgXGZJQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRSgzKVxmUAogLklQIENVUkxPUFRfU1NMS0VZCiBDbGllbnQga2V5LiBTZWUgXGZJQ1VSTE9QVF9TU0xLRVkoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1NTTEtFWQorUHJveHkgY2xpZW50IGtleS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMS0VZKDMpXGZQCiAuSVAgQ1VSTE9QVF9TU0xLRVlUWVBFCiBDbGllbnQga2V5IHR5cGUuIFNlZSBcZklDVVJMT1BUX1NTTEtFWVRZUEUoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUKK1Byb3h5IGNsaWVudCBrZXkgdHlwZS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRSgzKVxmUAogLklQIENVUkxPUFRfS0VZUEFTU1dECiBDbGllbnQga2V5IHBhc3N3b3JkLiBTZWUgXGZJQ1VSTE9QVF9LRVlQQVNTV0QoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRAorUHJveHkgY2xpZW50IGtleSBwYXNzd29yZC4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfS0VZUEFTU1dEKDMpXGZQCiAuSVAgQ1VSTE9QVF9TU0xfRU5BQkxFX0FMUE4KIEVuYWJsZSB1c2Ugb2YgQUxQTi4gU2VlIFxmSUNVUkxPUFRfU1NMX0VOQUJMRV9BTFBOKDMpXGZQCiAuSVAgQ1VSTE9QVF9TU0xfRU5BQkxFX05QTgpAQCAtNDY1LDIwICs0ODcsMzIgQEAKIEVuYWJsZSBUTFMgRmFsc2UgU3RhcnQuIFNlZSBcZklDVVJMT1BUX1NTTF9GQUxTRVNUQVJUKDMpXGZQCiAuSVAgQ1VSTE9QVF9TU0xWRVJTSU9OCiBTU0wgdmVyc2lvbiB0byB1c2UuIFNlZSBcZklDVVJMT1BUX1NTTFZFUlNJT04oMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04KK1Byb3h5IFNTTCB2ZXJzaW9uIHRvIHVzZS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMVkVSU0lPTigzKVxmUAogLklQIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QKIFZlcmlmeSB0aGUgaG9zdCBuYW1lIGluIHRoZSBTU0wgY2VydGlmaWNhdGUuIFNlZSBcZklDVVJMT1BUX1NTTF9WRVJJRllIT1NUKDMpXGZQCisuSVAgQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVAorVmVyaWZ5IHRoZSBob3N0IG5hbWUgaW4gdGhlIHByb3h5IFNTTCBjZXJ0aWZpY2F0ZS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QoMylcZlAKIC5JUCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSCiBWZXJpZnkgdGhlIFNTTCBjZXJ0aWZpY2F0ZS4gU2VlIFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVIoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSCitWZXJpZnkgdGhlIHByb3h5IFNTTCBjZXJ0aWZpY2F0ZS4gU2VlIFxmSUNVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIoMylcZlAKIC5JUCBDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMKIFZlcmlmeSB0aGUgU1NMIGNlcnRpZmljYXRlJ3Mgc3RhdHVzLiBTZWUgXGZJQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTKDMpXGZQCiAuSVAgQ1VSTE9QVF9DQUlORk8KIENBIGNlcnQgYnVuZGxlLiBTZWUgXGZJQ1VSTE9QVF9DQUlORk8oMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX0NBSU5GTworUHJveHkgQ0EgY2VydCBidW5kbGUuIFNlZSBcZklDVVJMT1BUX1BST1hZX0NBSU5GTygzKVxmUAogLklQIENVUkxPUFRfSVNTVUVSQ0VSVAogSXNzdWVyIGNlcnRpZmljYXRlLiBTZWUgXGZJQ1VSTE9QVF9JU1NVRVJDRVJUKDMpXGZQCiAuSVAgQ1VSTE9QVF9DQVBBVEgKIFBhdGggdG8gQ0EgY2VydCBidW5kbGUuIFNlZSBcZklDVVJMT1BUX0NBUEFUSCgzKVxmUAorLklQIENVUkxPUFRfUFJPWFlfQ0FQQVRICitQYXRoIHRvIHByb3h5IENBIGNlcnQgYnVuZGxlLiBTZWUgXGZJQ1VSTE9QVF9QUk9YWV9DQVBBVEgoMylcZlAKIC5JUCBDVVJMT1BUX0NSTEZJTEUKIENlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdC4gU2VlIFxmSUNVUkxPUFRfQ1JMRklMRSgzKVxmUAorLklQIENVUkxPUFRfUFJPWFlfQ1JMRklMRQorUHJveHkgQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBMaXN0LiBTZWUgXGZJQ1VSTE9QVF9QUk9YWV9DUkxGSUxFKDMpXGZQCiAuSVAgQ1VSTE9QVF9DRVJUSU5GTwogRXh0cmFjdCBjZXJ0aWZpY2F0ZSBpbmZvLiBTZWUgXGZJQ1VSTE9QVF9DRVJUSU5GTygzKVxmUAogLklQIENVUkxPUFRfUElOTkVEUFVCTElDS0VZCkBAIC00ODksMTAgKzUyMywxNCBAQAogSWRlbnRpZnkgRUdEIHNvY2tldCBmb3IgZW50cm9weS4gU2VlIFxmSUNVUkxPUFRfRUdEU09DS0VUKDMpXGZQCiAuSVAgQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QKIENpcGhlcnMgdG8gdXNlLiBTZWUgXGZJQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QoMylcZlAKKy5JUCBDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVAorUHJveHkgY2lwaGVycyB0byB1c2UuIFNlZSBcZklDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCgzKVxmUAogLklQIENVUkxPUFRfU1NMX1NFU1NJT05JRF9DQUNIRQogRGlzYWJsZSBTU0wgc2Vzc2lvbi1pZCBjYWNoZS4gU2VlIFxmSUNVUkxPUFRfU1NMX1NFU1NJT05JRF9DQUNIRSgzKVxmUAogLklQIENVUkxPUFRfU1NMX09QVElPTlMKIENvbnRyb2wgU1NMIGJlaGF2aW9yLiBTZWUgXGZJQ1VSTE9QVF9TU0xfT1BUSU9OUygzKVxmUAorLklQIENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMKK0NvbnRyb2wgcHJveHkgU1NMIGJlaGF2aW9yLiBTZWUgXGZJQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUygzKVxmUAogLklQIENVUkxPUFRfS1JCTEVWRUwKIEtlcmJlcm9zIHNlY3VyaXR5IGxldmVsLiBTZWUgXGZJQ1VSTE9QVF9LUkJMRVZFTCgzKVxmUAogLklQIENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04KZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfdW5lc2NhcGUuMyBiL2RvY3MvbGliY3VybC9jdXJsX2Vhc3lfdW5lc2NhcGUuMwppbmRleCAwNmZkNmZjLi41MGNlOTdkIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvY3VybF9lYXN5X3VuZXNjYXBlLjMKKysrIGIvZG9jcy9saWJjdXJsL2N1cmxfZWFzeV91bmVzY2FwZS4zCkBAIC01LDcgKzUsNyBAQAogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogLlwiICoKLS5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogLlwiICoKIC5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00MCw3ICs0MCwxMCBAQAogCiBJZiBcZkJvdXRsZW5ndGhcZlAgaXMgbm9uLU5VTEwsIHRoZSBmdW5jdGlvbiB3aWxsIHdyaXRlIHRoZSBsZW5ndGggb2YgdGhlCiByZXR1cm5lZCBzdHJpbmcgaW4gdGhlIGludGVnZXIgaXQgcG9pbnRzIHRvLiBUaGlzIGFsbG93cyBhbiBlc2NhcGVkIHN0cmluZwotY29udGFpbmluZyAlMDAgdG8gc3RpbGwgZ2V0IHVzZWQgcHJvcGVybHkgYWZ0ZXIgdW5lc2NhcGluZy4KK2NvbnRhaW5pbmcgJTAwIHRvIHN0aWxsIGdldCB1c2VkIHByb3Blcmx5IGFmdGVyIHVuZXNjYXBpbmcuIFNpbmNlIHRoaXMgaXMgYQorcG9pbnRlciB0byBhbiBcZklpbnRcZlAgdHlwZSwgaXQgY2FuIG9ubHkgcmV0dXJuIGEgdmFsdWUgdXAgdG8gSU5UX01BWCBzbyBubworbG9uZ2VyIHN0cmluZyBjYW4gYmUgdW5lc2NhcGVkIGlmIHRoZSBzdHJpbmcgbGVuZ3RoIGlzIHJldHVybmVkIGluIHRoaXMKK3BhcmFtZXRlci4KIAogWW91IG11c3QgXGZJY3VybF9mcmVlKDMpXGZQIHRoZSByZXR1cm5lZCBzdHJpbmcgd2hlbiB5b3UncmUgZG9uZSB3aXRoIGl0LgogLlNIIEFWQUlMQUJJTElUWQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWFkZC4zIGIvZG9jcy9saWJjdXJsL2N1cmxfZm9ybWFkZC4zCmluZGV4IDY5MjM5MTMuLmJmMWIxMWUgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9jdXJsX2Zvcm1hZGQuMworKysgYi9kb2NzL2xpYmN1cmwvY3VybF9mb3JtYWRkLjMKQEAgLTEwNSw2ICsxMDUsOCBAQAogZm9sbG93ZWQgYnkgYSBmaWxlbmFtZSwgY2F1c2VzIHRoYXQgZmlsZSB0byBiZSByZWFkIGFuZCBpdHMgY29udGVudHMgdXNlZAogYXMgZGF0YSBpbiB0aGlzIHBhcnQuIFRoaXMgcGFydCBkb2VzIFxmSW5vdFxmUCBhdXRvbWF0aWNhbGx5IGJlY29tZSBhIGZpbGUKIHVwbG9hZCBwYXJ0IHNpbXBseSBiZWNhdXNlIGl0cyBkYXRhIHdhcyByZWFkIGZyb20gYSBmaWxlLgorCitUaGUgc3BlY2lmaWVkIGZpbGUgbmVlZHMgdG8ga2VwdCBhcm91bmQgdW50aWwgdGhlIGFzc29jaWF0ZWQgdHJhbnNmZXIgaXMgZG9uZS4KIC5JUCBDVVJMRk9STV9GSUxFCiBmb2xsb3dlZCBieSBhIGZpbGVuYW1lLCBtYWtlcyB0aGlzIHBhcnQgYSBmaWxlIHVwbG9hZCBwYXJ0LiBJdCBzZXRzIHRoZQogXGZJZmlsZW5hbWVcZlAgZmllbGQgdG8gdGhlIGJhc2VuYW1lIG9mIHRoZSBwcm92aWRlZCBmaWxlbmFtZSwgaXQgcmVhZHMgdGhlCkBAIC0xMTcsNiArMTE5LDggQEAKIAogVGhlIGdpdmVuIHVwbG9hZCBmaWxlIGhhcyB0byBleGlzdCBpbiBpdHMgZnVsbCBpbiB0aGUgZmlsZSBzeXN0ZW0gYWxyZWFkeSB3aGVuCiB0aGUgdXBsb2FkIHN0YXJ0cywgYXMgbGliY3VybCBuZWVkcyB0byByZWFkIHRoZSBjb3JyZWN0IGZpbGUgc2l6ZSBiZWZvcmVoYW5kLgorCitUaGUgc3BlY2lmaWVkIGZpbGUgbmVlZHMgdG8ga2VwdCBhcm91bmQgdW50aWwgdGhlIGFzc29jaWF0ZWQgdHJhbnNmZXIgaXMgZG9uZS4KIC5JUCBDVVJMRk9STV9DT05URU5UVFlQRQogaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFxmSUNVUkxGT1JNX0ZJTEVcZlAuIEZvbGxvd2VkIGJ5IGEgcG9pbnRlciB0byBhCiBzdHJpbmcgd2hpY2ggcHJvdmlkZXMgdGhlIGNvbnRlbnQtdHlwZSBmb3IgdGhpcyBwYXJ0LCBwb3NzaWJseSBpbnN0ZWFkIG9mIGFuCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfY2xlYW51cC4zIGIvZG9jcy9saWJjdXJsL2N1cmxfZ2xvYmFsX2NsZWFudXAuMwppbmRleCAyZTNmZjAzLi4wNGFiMDQzIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvY3VybF9nbG9iYWxfY2xlYW51cC4zCisrKyBiL2RvY3MvbGliY3VybC9jdXJsX2dsb2JhbF9jbGVhbnVwLjMKQEAgLTQyLDggKzQyLDE0IEBACiAKIFNlZSB0aGUgZGVzY3JpcHRpb24gaW4gXGZJbGliY3VybCgzKVxmUCBvZiBnbG9iYWwgZW52aXJvbm1lbnQgcmVxdWlyZW1lbnRzIGZvcgogZGV0YWlscyBvZiBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCi0KKy5TSCBDQVVUSU9OCitcZkljdXJsX2dsb2JhbF9jbGVhbnVwKDMpXGZQIGRvZXMgbm90IGJsb2NrIHdhaXRpbmcgZm9yIGFueSBsaWJjdXJsLWNyZWF0ZWQKK3RocmVhZHMgdG8gdGVybWluYXRlIChzdWNoIGFzIHRocmVhZHMgdXNlZCBmb3IgbmFtZSByZXNvbHZpbmcpLiBJZiBhIG1vZHVsZQorY29udGFpbmluZyBsaWJjdXJsIGlzIGR5bmFtaWNhbGx5IHVubG9hZGVkIHdoaWxlIGxpYmN1cmwtY3JlYXRlZCB0aHJlYWRzIGFyZQorc3RpbGwgcnVubmluZyB0aGVuIHlvdXIgcHJvZ3JhbSBtYXkgY3Jhc2ggb3Igb3RoZXIgY29ycnVwdGlvbiBtYXkgb2NjdXIuIFdlCityZWNvbW1lbmQgeW91IGRvIG5vdCBydW4gbGliY3VybCBmcm9tIGFueSBtb2R1bGUgdGhhdCBtYXkgYmUgdW5sb2FkZWQKK2R5bmFtaWNhbGx5LiBUaGlzIGJlaGF2aW9yIG1heSBiZSBhZGRyZXNzZWQgaW4gdGhlIGZ1dHVyZS4KIC5TSCAiU0VFIEFMU08iCiAuQlIgY3VybF9nbG9iYWxfaW5pdCAiKDMpLCAiCiAuQlIgbGliY3VybCAiKDMpLCAiCi0KKy5CUiBsaWJjdXJsLXRocmVhZCAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvbGliY3VybC1lcnJvcnMuMyBiL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy4zCmluZGV4IDBhMjFhNzUuLjFiNmUzNGYgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy4zCisrKyBiL2RvY3MvbGliY3VybC9saWJjdXJsLWVycm9ycy4zCkBAIC02MCw5ICs2MCw4IEBACiAuSVAgIkNVUkxFX0NPVUxETlRfQ09OTkVDVCAoNykiCiBGYWlsZWQgdG8gY29ubmVjdCgpIHRvIGhvc3Qgb3IgcHJveHkuCiAuSVAgIkNVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFkgKDgpIgotQWZ0ZXIgY29ubmVjdGluZyB0byBhIEZUUCBzZXJ2ZXIsIGxpYmN1cmwgZXhwZWN0cyB0byBnZXQgYSBjZXJ0YWluIHJlcGx5Ci1iYWNrLiBUaGlzIGVycm9yIGNvZGUgaW1wbGllcyB0aGF0IGl0IGdvdCBhIHN0cmFuZ2Ugb3IgYmFkIHJlcGx5LiBUaGUgZ2l2ZW4KLXJlbW90ZSBzZXJ2ZXIgaXMgcHJvYmFibHkgbm90IGFuIE9LIEZUUCBzZXJ2ZXIuCitUaGUgc2VydmVyIHNlbnQgZGF0YSBsaWJjdXJsIGNvdWxkbid0IHBhcnNlLiBUaGlzIGVycm9yIGNvZGUgaXMgdXNlZCBmb3IgbW9yZQordGhhbiBqdXN0IEZUUCBhbmQgaXMgYWxpYXNlZCBhcyBcZklDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFlcZlAgc2luY2UgNy41MS4wLgogLklQICJDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRCAoOSkiCiBXZSB3ZXJlIGRlbmllZCBhY2Nlc3MgdG8gdGhlIHJlc291cmNlIGdpdmVuIGluIHRoZSBVUkwuICBGb3IgRlRQLCB0aGlzIG9jY3Vycwogd2hpbGUgdHJ5aW5nIHRvIGNoYW5nZSB0byB0aGUgcmVtb3RlIGRpcmVjdG9yeS4KZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX0NPT0tJRUxJU1QuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX0NPT0tJRUxJU1QuMwppbmRleCA5NjFmZDk4Li5iOWY3NWY0IDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMSU5GT19DT09LSUVMSVNULjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTElORk9fQ09PS0lFTElTVC4zCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqKmNvb2tpZXMpOwogLlNIIERFU0NSSVBUSU9OCiBQYXNzIGEgcG9pbnRlciB0byBhICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyB0byByZWNlaXZlIGEgbGlua2VkLWxpc3Qgb2YgYWxsCi1jb29raWVzIGNVUkwga25vd3MgKGV4cGlyZWQgb25lcywgdG9vKS4gRG9uJ3QgZm9yZ2V0IHRvIGNhbGwKK2Nvb2tpZXMgY3VybCBrbm93cyAoZXhwaXJlZCBvbmVzLCB0b28pLiBEb24ndCBmb3JnZXQgdG8gY2FsbAogXGZJY3VybF9zbGlzdF9mcmVlX2FsbCgzKVxmUCBvbiB0aGUgbGlzdCBhZnRlciBpdCBoYXMgYmVlbiB1c2VkLiAgSWYgdGhlcmUgYXJlCiBubyBjb29raWVzIChjb29raWVzIGZvciB0aGUgaGFuZGxlIGhhdmUgbm90IGJlZW4gZW5hYmxlZCBvciBzaW1wbHkgbm9uZSBoYXZlCiBiZWVuIHJlY2VpdmVkKSAnc3RydWN0IGN1cmxfc2xpc3QgKicgd2lsbCBiZSBzZXQgdG8gcG9pbnQgdG8gTlVMTC4KZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX1BST1RPQ09MLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMSU5GT19QUk9UT0NPTC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjExMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMSU5GT19QUk9UT0NPTC4zCkBAIC0wLDAgKzEsNTUgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxJTkZPX1BST1RPQ09MIDMgIjIzIE5vdmVtYmVyIDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9nZXRpbmZvIG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTElORk9fUFJPVE9DT0wgXC0gZ2V0IHRoZSBwcm90b2NvbCB1c2VkIGluIHRoZSBjb25uZWN0aW9uCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X2dldGluZm8oQ1VSTCAqaGFuZGxlLCBDVVJMSU5GT19QUk9UT0NPTCwgbG9uZyAqcCk7CisuU0ggREVTQ1JJUFRJT04KK1Bhc3MgYSBwb2ludGVyIHRvIGEgbG9uZyB0byByZWNlaXZlIHRoZSB2ZXJzaW9uIHVzZWQgaW4gdGhlIGxhc3QgaHR0cCBjb25uZWN0aW9uLgorVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgb25lIG9mIHRoZSBDVVJMUFJPVE9fKiB2YWx1ZXMuCisuU0ggUFJPVE9DT0xTCitBbGwKKy5TSCBFWEFNUExFCisubmYKK0NVUkwgKmN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworaWYoY3VybCkgeworICBDVVJMY29kZSByZXM7CisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vZXhhbXBsZS5jb20iKTsKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcyA9PSBDVVJMRV9PSykgeworICAgIGxvbmcgcHJvdG9jb2w7CisgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUFJPVE9DT0wsICZwcm90b2NvbCk7CisgIH0KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7Cit9CisuZmkKKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuNTIuMAorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSAiKDMpLCAiCisuQlIgY3VybF9lYXN5X2dldGluZm8gIigzKSwgIiBjdXJsX2Vhc3lfc2V0b3B0ICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDg5MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVC4zCkBAIC0wLDAgKzEsNDQgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9nZXRpbmZvIG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVCBcLSBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgcHJveHkgY2VydGlmaWNhdGlvbiB2ZXJpZmljYXRpb24KKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfZ2V0aW5mbyhDVVJMICpoYW5kbGUsIENVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQsIGxvbmcgKnJlc3VsdCk7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgcG9pbnRlciB0byBhIGxvbmcgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0IG9mIHRoZSBjZXJ0aWZpY2F0aW9uCit2ZXJpZmljYXRpb24gdGhhdCB3YXMgcmVxdWVzdGVkICh1c2luZyB0aGUgXGZJQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUigzKVxmUAorb3B0aW9uLgorLlNIIFBST1RPQ09MUworQWxsIHVzaW5nIFRMUworLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuNQorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKy5TSCAiU0VFIEFMU08iCisuQlIgY3VybF9lYXN5X2dldGluZm8gIigzKSwgIiBjdXJsX2Vhc3lfc2V0b3B0ICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX1NDSEVNRS4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTElORk9fU0NIRU1FLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjM2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxJTkZPX1NDSEVNRS4zCkBAIC0wLDAgKzEsNTkgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxJTkZPX1NDSEVNRSAzICIyMyBOb3ZlbWJlciAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfZ2V0aW5mbyBvcHRpb25zIgorLlNIIE5BTUUKK0NVUkxJTkZPX1NDSEVNRSBcLSBnZXQgdGhlIFVSTCBzY2hlbWUgKHNvbWV0aW1lcyBjYWxsZWQgcHJvdG9jb2wpIHVzZWQgaW4gdGhlIGNvbm5lY3Rpb24KKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfZ2V0aW5mbyhDVVJMICpoYW5kbGUsIENVUkxJTkZPX1NDSEVNRSwgbG9uZyAqcCk7CisuU0ggREVTQ1JJUFRJT04KK1Bhc3MgYSBwb2ludGVyIHRvIGEgY2hhciBwb2ludGVyIHRvIHJlY2VpdmUgdGhlIHBvaW50ZXIgdG8gYSB6ZXJvLXRlcm1pbmF0ZWQKK3N0cmluZyBob2xkaW5nIHRoZSBVUkwgc2NoZW1lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBjb25uZWN0aW9uIGRvbmUgd2l0aCB0aGlzCitcZkJjdXJsXGZQIGhhbmRsZS4KKworVGhlIFxmQmlkXGZQIHBvaW50ZXIgd2lsbCBiZSBOVUxMIG9yIHBvaW50aW5nIHRvIHByaXZhdGUgcmVhZC1vbmx5IG1lbW9yeSB5b3UKK01VU1QgTk9UIGZyZWUgb3IgbW9kaWZ5LgorLlNIIFBST1RPQ09MUworQWxsCisuU0ggRVhBTVBMRQorLm5mCitDVVJMICpjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKK2lmKGN1cmwpIHsKKyAgQ1VSTGNvZGUgcmVzOworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cDovL2V4YW1wbGUuY29tIik7CisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMgPT0gQ1VSTEVfT0spIHsKKyAgICBjaGFyICogc2NoZW1lOworICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NDSEVNRSwgJnNjaGVtZSk7CisgIH0KKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7Cit9CisuZmkKKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuNTIuMAorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSAiKDMpLCAiCisuQlIgY3VybF9lYXN5X2dldGluZm8gIigzKSwgIiBjdXJsX2Vhc3lfc2V0b3B0ICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxNT1BUX01BWF9QSVBFTElORV9MRU5HVEguMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxNT1BUX01BWF9QSVBFTElORV9MRU5HVEguMwppbmRleCBjYWMzYzcxLi4xMjA0YTBmIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMTU9QVF9NQVhfUElQRUxJTkVfTEVOR1RILjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE1PUFRfTUFYX1BJUEVMSU5FX0xFTkdUSC4zCkBAIC0yOSw4ICsyOSw4IEBACiBDVVJMTWNvZGUgY3VybF9tdWx0aV9zZXRvcHQoQ1VSTE0gKmhhbmRsZSwgQ1VSTE1PUFRfTUFYX1BJUEVMSU5FX0xFTkdUSCwgbG9uZyBtYXgpOwogLlNIIERFU0NSSVBUSU9OCiBQYXNzIGEgbG9uZy4gVGhlIHNldCBcZkJtYXhcZlAgbnVtYmVyIHdpbGwgYmUgdXNlZCBhcyB0aGUgbWF4aW11bSBhbW91bnQgb2YKLW91dHN0YW5kaW5nIHJlcXVlc3RzIGluIGEgcGlwZWxpbmVkIGNvbm5lY3Rpb24uIE9ubHkgdXNlZCBpZiBwaXBlbGluaW5nIGlzCi1lbmFibGVkLgorb3V0c3RhbmRpbmcgcmVxdWVzdHMgaW4gYW4gSFRUUC8xLjEgcGlwZWxpbmVkIGNvbm5lY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkKK3VzZWQgZm9yIEhUVFAvMS4xIHBpcGVsaW5pbmcsIG5vdCBmb3IgSFRUUC8yIG11bHRpcGxleGluZy4KIAogV2hlbiB0aGlzIGxpbWl0IGlzIHJlYWNoZWQsIGxpYmN1cmwgd2lsbCB1c2UgYW5vdGhlciBjb25uZWN0aW9uIHRvIHRoZSBzYW1lCiBob3N0IChzZWUgXGZJQ1VSTE1PUFRfTUFYX0hPU1RfQ09OTkVDVElPTlMoMylcZlApLCBvciBxdWV1ZSB0aGUgcmVxdWVzdCB1bnRpbApkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE1PUFRfTUFYX1RPVEFMX0NPTk5FQ1RJT05TLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMTU9QVF9NQVhfVE9UQUxfQ09OTkVDVElPTlMuMwppbmRleCA4MzVjMmJkLi5lYTUzYmZmIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMTU9QVF9NQVhfVE9UQUxfQ09OTkVDVElPTlMuMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMTU9QVF9NQVhfVE9UQUxfQ09OTkVDVElPTlMuMwpAQCAtNSw3ICs1LDcgQEAKIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKIC5cIiAqCi0uXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KIC5cIiAqCiAuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzQsNyArMzQsNyBAQAogbGltaXQgc2V0IGJ5IFxmSUNVUkxNT1BUX01BWF9UT1RBTF9DT05ORUNUSU9OUygzKVxmUC4gV2hlbiB0aGUgbGltaXQgaXMKIHJlYWNoZWQsIHRoZSBzZXNzaW9ucyB3aWxsIGJlIHBlbmRpbmcgdW50aWwgdGhlcmUgYXJlIGF2YWlsYWJsZQogY29ubmVjdGlvbnMuIElmIFxmSUNVUkxNT1BUX1BJUEVMSU5JTkcoMylcZlAgaXMgZW5hYmxlZCwgbGliY3VybCB3aWxsIHRyeSB0bwotcGlwZWxpbmUgaWYgdGhlIGhvc3QgaXMgY2FwYWJsZSBvZiBpdC4KK3BpcGVsaW5lIG9yIHVzZSBtdWx0aXBsZXhpbmcgaWYgdGhlIGhvc3QgaXMgY2FwYWJsZSBvZiBpdC4KIC5TSCBERUZBVUxUCiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIGxpbWl0LiBJdCBpcyB0aGVuIHNpbXBseQogY29udHJvbGxlZCBieSB0aGUgbnVtYmVyIG9mIGVhc3kgaGFuZGxlcyBhZGRlZC4KZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxNT1BUX1BJUEVMSU5JTkcuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxNT1BUX1BJUEVMSU5JTkcuMwppbmRleCA0Yzc5YjFiLi4xYTQwNDc2IDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMTU9QVF9QSVBFTElOSU5HLjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE1PUFRfUElQRUxJTklORy4zCkBAIC01LDcgKzUsNyBAQAogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogLlwiICoKLS5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogLlwiICoKIC5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMiwyNCArMjIsMzYgQEAKIC5cIgogLlRIIENVUkxNT1BUX1BJUEVMSU5JTkcgMyAiMTcgSnVuIDIwMTQiICJsaWJjdXJsIDcuMzcuMCIgImN1cmxfbXVsdGlfc2V0b3B0IG9wdGlvbnMiCiAuU0ggTkFNRQotQ1VSTE1PUFRfUElQRUxJTklORyBcLSBlbmFibGUvZGlzYWJsZSBIVFRQIHBpcGVsaW5pbmcKK0NVUkxNT1BUX1BJUEVMSU5JTkcgXC0gZW5hYmxlIEhUVFAgcGlwZWxpbmluZyBhbmQgbXVsdGlwbGV4aW5nCiAuU0ggU1lOT1BTSVMKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAotQ1VSTE1jb2RlIGN1cmxfbXVsdGlfc2V0b3B0KENVUkxNICpoYW5kbGUsIENVUkxNT1BUX1BJUEVMSU5JTkcsIGxvbmcgYml0cyk7CitDVVJMTWNvZGUgY3VybF9tdWx0aV9zZXRvcHQoQ1VSTE0gKmhhbmRsZSwgQ1VSTE1PUFRfUElQRUxJTklORywgbG9uZyBiaXRtYXNrKTsKIC5TSCBERVNDUklQVElPTgotU2V0IHRoZSBcZkJiaXRzXGZQIHBhcmFtZXRlciB0byAxIHRvIG1ha2UgbGliY3VybCB1c2UgSFRUUCBwaXBlbGluaW5nIGZvcgotSFRUUC8xLjEgdHJhbnNmZXJzIGRvbmUgdXNpbmcgdGhpcyBtdWx0aSBoYW5kbGUsIGFzIGZhciBhcyBwb3NzaWJsZS4gVGhpcwotbWVhbnMgdGhhdCBpZiB5b3UgYWRkIGEgc2Vjb25kIHJlcXVlc3QgdGhhdCBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcKLWNvbm5lY3Rpb24sIHRoZSBzZWNvbmQgcmVxdWVzdCB3aWxsIGJlIFwmInBpcGVkIiBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIHJhdGhlcgotdGhhbiBiZWluZyBleGVjdXRlZCBpbiBwYXJhbGxlbC4KK1Bhc3MgaW4gdGhlIFxmQmJpdG1hc2tcZlAgcGFyYW1ldGVyIHRvIGluc3RydWN0IGxpYmN1cmwgdG8gZW5hYmxlIEhUVFAKK3BpcGVsaW5pbmcgYW5kL29yIEhUVFAvMiBtdWx0aXBsZXhpbmcgZm9yIHRoaXMgbXVsdGkgaGFuZGxlLgogCi1XaGVuIHVzaW5nIHBpcGVsaW5pbmcsIHRoZXJlIGFyZSBhbHNvIHNldmVyYWwgb3RoZXIgcmVsYXRlZCBvcHRpb25zIHRoYXQgYXJlCi1pbnRlcmVzdGluZyB0byB0d2VhayBhbmQgYWRqdXN0IHRvIGFsdGVyIGhvdyBsaWJjdXJsIHNwcmVhZHMgb3V0IHJlcXVlc3RzIG9uCi1kaWZmZXJlbnQgY29ubmVjdGlvbnMgb3Igbm90IGV0Yy4KK1doZW4gZW5hYmxlZCwgbGliY3VybCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRob3NlIHByb3RvY29sIGZlYXR1cmVzIHdoZW4gZG9pbmcKK3BhcmFsbGVsIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGhvc3RzLgogCi1TdGFydGluZyBpbiA3LjQzLjAsIHRoZSBcZkJiaXRzXGZQIHBhcmFtZXRlcidzIGJpdCAxIGFsc28gaGFzIGEgbWVhbmluZyBhbmQKLWxpYmN1cmwgaXMgbm93IG9mZmVyaW5nIHN5bWJvbCBuYW1lcyBmb3IgdGhlIGJpdHM6CitGb3IgcGlwZWxpbmluZywgdGhpcyBtZWFucyB0aGF0IGlmIHlvdSBhZGQgYSBzZWNvbmQgcmVxdWVzdCB0aGF0IGNhbiB1c2UgYW4KK2FscmVhZHkgZXhpc3RpbmcgY29ubmVjdGlvbiwgdGhlIHNlY29uZCByZXF1ZXN0IHdpbGwgYmUgXCYicGlwZWQiIG9uIHRoZSBzYW1lCitjb25uZWN0aW9uIHJhdGhlciB0aGFuIGJlaW5nIGV4ZWN1dGVkIGluIHBhcmFsbGVsLgorCitGb3IgbXVsdGlwbGV4aW5nLCB0aGlzIG1lYW5zIHRoYXQgZm9sbG93LXVwIHJlcXVlc3RzIGNhbiByZS11c2UgYW4gZXhpc3RpbmcKK2Nvbm5lY3Rpb24gYW5kIHNlbmQgdGhlIG5ldyByZXF1ZXN0IG11bHRpcGxleGVkIG92ZXIgdGhhdCBhdCB0aGUgc2FtZSB0aW1lIGFzCitvdGhlciB0cmFuc2ZlcnMgYXJlIGFscmVhZHkgdXNpbmcgdGhhdCBzaW5nbGUgY29ubmVjdGlvbi4KKworVGhlcmUgYXJlIHNldmVyYWwgb3RoZXIgcmVsYXRlZCBvcHRpb25zIHRoYXQgYXJlIGludGVyZXN0aW5nIHRvIHR3ZWFrIGFuZAorYWRqdXN0IHRvIGFsdGVyIGhvdyBsaWJjdXJsIHNwcmVhZHMgb3V0IHJlcXVlc3RzIG9uIGRpZmZlcmVudCBjb25uZWN0aW9ucyBvcgorbm90IGV0Yy4KKworQmVmb3JlIDcuNDMuMCwgdGhpcyBvcHRpb24gd2FzIHNldCB0byAxIGFuZCAwIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBIVFRQLzEuMQorcGlwZWxpbmluZy4KKworU3RhcnRpbmcgaW4gNy40My4wLCBcZkJiaXRtYXNrXGZQJ3Mgc2Vjb25kIGJpdCBhbHNvIGhhcyBhIG1lYW5pbmcsIGFuZCB5b3UgY2FuCithc2sgZm9yIHBpcGVsaW5pbmcgYW5kIG11bHRpcGxleGluZyBpbmRlcGVuZGVudGx5IG9mIGVhY2ggb3RoZXIgYnkgdG9nZ2xpbmcKK3RoZSBjb3JyZWN0IGJpdHMuCiAuSVAgQ1VSTFBJUEVfTk9USElORyAoMCkKIERlZmF1bHQsIHdoaWNoIG1lYW5zIGRvaW5nIG5vIGF0dGVtcHRzIGF0IHBpcGVsaW5pbmcgb3IgbXVsdGlwbGV4aW5nLgogLklQIENVUkxQSVBFX0hUVFAxICgxKQpAQCAtNDksNyArNjEsNyBAQAogSWYgdGhpcyBiaXQgaXMgc2V0LCBsaWJjdXJsIHdpbGwgdHJ5IHRvIG11bHRpcGxleCB0aGUgbmV3IHRyYW5zZmVyIG92ZXIgYW4KIGV4aXN0aW5nIGNvbm5lY3Rpb24gaWYgcG9zc2libGUuIFRoaXMgcmVxdWlyZXMgSFRUUC8yLgogLlNIIERFRkFVTFQKLTAgKG9mZikKKzAgKGJvdGggcGlwZWxpbmUgYW5kIG11bHRpcGxleGluZyBhcmUgb2ZmKQogLlNIIFBST1RPQ09MUwogSFRUUChTKQogLlNIIEVYQU1QTEUKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfQ0FJTkZPLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX0NBSU5GTy4zCmluZGV4IGEwNWY1YzAuLjdkYjUwYTggMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfQ0FJTkZPLjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9DQUlORk8uMwpAQCAtNDAsNiArNDAsMTIgQEAKIAogSWYgY3VybCBpcyBidWlsdCBhZ2FpbnN0IHRoZSBOU1MgU1NMIGxpYnJhcnksIHRoZSBOU1MgUEVNIFBLQ1MjMTEgbW9kdWxlCiAobGlibnNzcGVtLnNvKSBuZWVkcyB0byBiZSBhdmFpbGFibGUgZm9yIHRoaXMgb3B0aW9uIHRvIHdvcmsgcHJvcGVybHkuCisKKyhpT1MgYW5kIG1hY09TIG9ubHkpIElmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCBTZWN1cmUgVHJhbnNwb3J0LCB0aGVuIHRoaXMKK29wdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBTU0wgZW5naW5lcywgYnV0IGl0CitzaG91bGQgbm90IGJlIHNldC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGVuIGN1cmwgd2lsbCB1c2UgdGhlCitjZXJ0aWZpY2F0ZXMgaW4gdGhlIHN5c3RlbSBhbmQgdXNlciBLZXljaGFpbiB0byB2ZXJpZnkgdGhlIHBlZXIsIHdoaWNoIGlzIHRoZQorcHJlZmVycmVkIG1ldGhvZCBvZiB2ZXJpZnlpbmcgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZSBjaGFpbi4KIC5TSCBERUZBVUxUCiBCdWlsdC1pbiBzeXN0ZW0gc3BlY2lmaWMKIC5TSCBQUk9UT0NPTFMKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfREVCVUdGVU5DVElPTi4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLjMKaW5kZXggYmYwNzQ5OS4uNTM1YzUzMCAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9ERUJVR0ZVTkNUSU9OLjMKQEAgLTExOSw2ICsxMTksNyBAQAogewogICBjb25zdCBjaGFyICp0ZXh0OwogICAodm9pZCloYW5kbGU7IC8qIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyAqLworICAodm9pZCl1c2VycDsKIAogICBzd2l0Y2ggKHR5cGUpIHsKICAgY2FzZSBDVVJMSU5GT19URVhUOgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9GQUlMT05FUlJPUi4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9GQUlMT05FUlJPUi4zCmluZGV4IDc5NDc0Y2UuLjkzZDhiYTYgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfRkFJTE9ORVJST1IuMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX0ZBSUxPTkVSUk9SLjMKQEAgLTUzLDQgKzUzLDQgQEAKIC5TSCBSRVRVUk4gVkFMVUUKIFJldHVybnMgQ1VSTEVfT0sgaWYgSFRUUCBpcyBlbmFibGVkLCBhbmQgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LgogLlNIICJTRUUgQUxTTyIKLS5CUiBDVVJMT1BUX0hUVFAyMDBBTElBU0VTICIoMyksICIKKy5CUiBDVVJMT1BUX0hUVFAyMDBBTElBU0VTICIoMyksICIgQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3MTI1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SLjMKQEAgLTAsMCArMSw1MiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IgMyAiMjIgU2VwIDIwMTYiICJsaWJjdXJsIDcuNTEuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUiBcLSBrZWVwIHNlbmRpbmcgb24gZWFybHkgSFRUUCByZXNwb25zZSA+PSAzMDAKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcga2VlcF9zZW5kaW5nKTsKKy5TSCBERVNDUklQVElPTgorQSBsb25nIHBhcmFtZXRlciBzZXQgdG8gMSB0ZWxscyB0aGUgbGlicmFyeSB0byBrZWVwIHNlbmRpbmcgdGhlIHJlcXVlc3QgYm9keQoraWYgdGhlIEhUVFAgY29kZSByZXR1cm5lZCBpcyBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiAzMDAuIFRoZSBkZWZhdWx0IGFjdGlvbgord291bGQgYmUgdG8gc3RvcCBzZW5kaW5nIGFuZCBjbG9zZSB0aGUgc3RyZWFtIG9yIGNvbm5lY3Rpb24uCisKK1RoaXMgb3B0aW9uIGlzIHN1aXRhYmxlIGZvciBtYW51YWwgTlRMTSBhdXRoZW50aWNhdGlvbiwgaS5lLiBpZiBhbiBhcHBsaWNhdGlvbgorZG9lcyBub3QgdXNlIFxmSUNVUkxPUFRfSFRUUEFVVEgoMylcZlAsIGJ1dCBpbnN0ZWFkIHNldHMgIkF1dGhvcml6YXRpb246IE5UTE0gLi4uIgoraGVhZGVycyBtYW51YWxseSB1c2luZyBcZklDVVJMT1BUX0hUVFBIRUFERVIoMylcZlAuCisKK01vc3QgYXBwbGljYXRpb25zIGRvIG5vdCBuZWVkIHRoaXMgb3B0aW9uLgorLlNIIERFRkFVTFQKKzAsIHN0b3Agc2VuZGluZyBvbiBlcnJvcgorLlNIIFBST1RPQ09MUworSFRUUAorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0Fsb25nIHdpdGggSFRUUC4gQWRkZWQgaW4gNy41MS4wLgorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiBIVFRQIGlzIGVuYWJsZWQsIGFuZCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfRkFJTE9ORVJST1IgIigzKSwgIiBDVVJMT1BUX0hUVFBIRUFERVIgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRS4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRS4zCmluZGV4IDAzMWYyY2QuLmM5OWZmNjEgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UuMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX01BWF9SRUNWX1NQRUVEX0xBUkdFLjMKQEAgLTMxLDkgKzMxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCBzcGVlZCk7CiAuU0ggREVTQ1JJUFRJT04KIFBhc3MgYSBjdXJsX29mZl90IGFzIHBhcmFtZXRlci4gIElmIGEgZG93bmxvYWQgZXhjZWVkcyB0aGlzIFxmSXNwZWVkXGZQCi0oY291bnRlZCBpbiBieXRlcyBwZXIgc2Vjb25kKSBvbiBjdW11bGF0aXZlIGF2ZXJhZ2UgZHVyaW5nIHRoZSB0cmFuc2ZlciwgdGhlCi10cmFuc2ZlciB3aWxsIHBhdXNlIHRvIGtlZXAgdGhlIGF2ZXJhZ2UgcmF0ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCi1wYXJhbWV0ZXIgdmFsdWUuIERlZmF1bHRzIHRvIHVubGltaXRlZCBzcGVlZC4KKyhjb3VudGVkIGluIGJ5dGVzIHBlciBzZWNvbmQpIHRoZSB0cmFuc2ZlciB3aWxsIHBhdXNlIHRvIGtlZXAgdGhlIHNwZWVkIGxlc3MKK3RoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZS4gRGVmYXVsdHMgdG8gdW5saW1pdGVkIHNwZWVkLgogCiBUaGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdCB0cmFuc2ZlciBzcGVlZHMgZG9uZSB3aXRoIEZJTEU6Ly8gVVJMcy4KIC5TSCBERUZBVUxUCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFLjMKaW5kZXggYzJjNjMzNi4uN2YzZWZlNSAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9NQVhfU0VORF9TUEVFRF9MQVJHRS4zCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UuMwpAQCAtMzEsOSArMzEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IG1heHNwZWVkKTsKIC5TSCBERVNDUklQVElPTgogUGFzcyBhIGN1cmxfb2ZmX3QgYXMgcGFyYW1ldGVyIHdpdGggdGhlIFxmSW1heHNwZWVkXGZQLiAgSWYgYW4gdXBsb2FkIGV4Y2VlZHMKLXRoaXMgc3BlZWQgKGNvdW50ZWQgaW4gYnl0ZXMgcGVyIHNlY29uZCkgb24gY3VtdWxhdGl2ZSBhdmVyYWdlIGR1cmluZyB0aGUKLXRyYW5zZmVyLCB0aGUgdHJhbnNmZXIgd2lsbCBwYXVzZSB0byBrZWVwIHRoZSBhdmVyYWdlIHJhdGUgbGVzcyB0aGFuIG9yIGVxdWFsCi10byB0aGUgcGFyYW1ldGVyIHZhbHVlLiAgRGVmYXVsdHMgdG8gdW5saW1pdGVkIHNwZWVkLgordGhpcyBzcGVlZCAoY291bnRlZCBpbiBieXRlcyBwZXIgc2Vjb25kKSB0aGUgdHJhbnNmZXIgd2lsbCBwYXVzZSB0byBrZWVwIHRoZQorc3BlZWQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuICBEZWZhdWx0cyB0byB1bmxpbWl0ZWQKK3NwZWVkLgogCiBUaGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdCB0cmFuc2ZlciBzcGVlZHMgZG9uZSB3aXRoIEZJTEU6Ly8gVVJMcy4KIC5TSCBERUZBVUxUCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWS4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVkuMwppbmRleCA0ZTY3M2JkLi4zM2QyMDFkIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWS4zCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUElOTkVEUFVCTElDS0VZLjMKQEAgLTUsNyArNSw3IEBACiAuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAuXCIgKgotLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAuXCIgKgogLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKIC5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTkxLDE0ICs5MSwyMyBAQAogLmZpCiAuU0ggQVZBSUxBQklMSVRZCiBQRU0vREVSIHN1cHBvcnQ6CisKICAgNy4zOS4wOiBPcGVuU1NMLCBHbnVUTFMgYW5kIEdTS2l0CisKICAgNy40My4wOiBOU1MgYW5kIHdvbGZTU0wvQ3lhU1NMCisKICAgNy40Ny4wOiBtYmVkdGxzCisKICAgNy40OS4wOiBQb2xhclNTTAorCiBzaGEyNTYgc3VwcG9ydDoKLSAgNy40NC4wOiBPcGVuU1NMLCBHbnVUTFMsIE5TUyBhbmQgd29sZlNTTC9DeWFTU0wuCisKKyAgNy40NC4wOiBPcGVuU1NMLCBHbnVUTFMsIE5TUyBhbmQgd29sZlNTTC9DeWFTU0wKKwogICA3LjQ3LjA6IG1iZWR0bHMKKwogICA3LjQ5LjA6IFBvbGFyU1NMCisKIE90aGVyIFNTTCBiYWNrZW5kcyBub3Qgc3VwcG9ydGVkLgogLlNIIFJFVFVSTiBWQUxVRQogUmV0dXJucyBDVVJMRV9PSyBpZiBUTFMgZW5hYmxlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWS4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWS4zCmluZGV4IGY2OTc1YmIuLjY0Yjc0ZmEgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFkuMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZLjMKQEAgLTUsNyArNSw3IEBACiAuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAuXCIgKgotLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAuXCIgKgogLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKIC5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQxLDggKzQxLDcgQEAKIHByb3h5IGlzIHVzZWQuIFVzZSBzb2NrczQ6Ly8sIHNvY2tzNGE6Ly8sIHNvY2tzNTovLyBvciBzb2NrczVoOi8vICh0aGUgbGFzdAogb25lIHRvIGVuYWJsZSBzb2NrczUgYW5kIGFza2luZyB0aGUgcHJveHkgdG8gZG8gdGhlIHJlc29sdmluZywgYWxzbyBrbm93biBhcwogXGZJQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRVxmUCB0eXBlKSB0byByZXF1ZXN0IHRoZSBzcGVjaWZpYyBTT0NLUyB2ZXJzaW9uIHRvCi1iZSB1c2VkLiBObyBwcm90b2NvbCBzcGVjaWZpZWQsIGh0dHA6Ly8gYW5kIGFsbCBvdGhlcnMgd2lsbCBiZSB0cmVhdGVkIGFzIEhUVFAKLXByb3hpZXMuCitiZSB1c2VkLiBObyBzY2hlbWUgc3BlY2lmaWVkIG9yIGh0dHA6Ly8sIHdpbGwgYmUgdHJlYXRlZCBhcyBIVFRQIHByb3hpZXMuCiAKIFdpdGhvdXQgYSBzY2hlbWUgcHJlZml4LCBcZklDVVJMT1BUX1BST1hZVFlQRSgzKVxmUCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CiB3aGljaCBraW5kIG9mIHByb3h5IHRoZSBzdHJpbmcgaWRlbnRpZmllcy4KQEAgLTc3LDYgKzc2LDkgQEAKIHNjaGVtZS4KIAogU2luY2UgNy4yMS43IHRoZSBwcm94eSBzdHJpbmcgc3VwcG9ydHMgdGhlIHNvY2tzIHByb3RvY29scyBhcyAic2NoZW1lcyIuCisKK1NpbmNlIDcuNTAuMiwgdW5zdXBwb3J0ZWQgc2NoZW1lcyBpbiBwcm94eSBzdHJpbmdzIGNhdXNlIGxpYmN1cmwgdG8gcmV0dXJuCitlcnJvci4KIC5TSCBSRVRVUk4gVkFMVUUKIFJldHVybnMgQ1VSTEVfT0sgaWYgcHJveGllcyBhcmUgc3VwcG9ydGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCiBDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfQ0FJTkZPLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX0NBSU5GTy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDBiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX0NBSU5GTy4zCkBAIC0wLDAgKzEsNjQgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfQ0FJTkZPIDMgIjE2IE5vdiAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfc2V0b3B0IG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTE9QVF9QUk9YWV9DQUlORk8gXC0gcGF0aCB0byBwcm94eSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKSBidW5kbGUKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9QUk9YWV9DQUlORk8sIGNoYXIgKnBhdGgpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZmlsZSBob2xkaW5nIG9uZSBvciBtb3JlCitjZXJ0aWZpY2F0ZXMgdG8gdmVyaWZ5IHRoZSBwZWVyIHdpdGguCisKK0lmIFxmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVIoMylcZlAgaXMgemVybyBhbmQgeW91IGF2b2lkIHZlcmlmeWluZyB0aGUKK3NlcnZlcidzIGNlcnRpZmljYXRlLCBcZklDVVJMT1BUX0NBSU5GTygzKVxmUCBuZWVkIG5vdCBldmVuIGluZGljYXRlIGFuCithY2Nlc3NpYmxlIGZpbGUuCisKK1RoaXMgb3B0aW9uIGlzIGJ5IGRlZmF1bHQgc2V0IHRvIHRoZSBzeXN0ZW0gcGF0aCB3aGVyZSBsaWJjdXJsJ3MgY2FjZXJ0IGJ1bmRsZQoraXMgYXNzdW1lZCB0byBiZSBzdG9yZWQsIGFzIGVzdGFibGlzaGVkIGF0IGJ1aWxkIHRpbWUuCisKK0lmIGN1cmwgaXMgYnVpbHQgYWdhaW5zdCB0aGUgTlNTIFNTTCBsaWJyYXJ5LCB0aGUgTlNTIFBFTSBQS0NTIzExIG1vZHVsZQorKGxpYm5zc3BlbS5zbykgbmVlZHMgdG8gYmUgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB0byB3b3JrIHByb3Blcmx5LgorCisoaU9TIGFuZCBtYWNPUyBvbmx5KSBJZiBjdXJsIGlzIGJ1aWx0IGFnYWluc3QgU2VjdXJlIFRyYW5zcG9ydCwgdGhlbiB0aGlzCitvcHRpb24gaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgU1NMIGVuZ2luZXMsIGJ1dCBpdAorc2hvdWxkIG5vdCBiZSBzZXQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCwgdGhlbiBjdXJsIHdpbGwgdXNlIHRoZQorY2VydGlmaWNhdGVzIGluIHRoZSBzeXN0ZW0gYW5kIHVzZXIgS2V5Y2hhaW4gdG8gdmVyaWZ5IHRoZSBwZWVyLCB3aGljaCBpcyB0aGUKK3ByZWZlcnJlZCBtZXRob2Qgb2YgdmVyaWZ5aW5nIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUgY2hhaW4uCisuU0ggREVGQVVMVAorQnVpbHQtaW4gc3lzdGVtIHNwZWNpZmljCisuU0ggUFJPVE9DT0xTCitBbGwgVExTIGJhc2VkIHByb3RvY29sczogSFRUUFMsIEZUUFMsIElNQVBTLCBQT1AzUywgU01UUFMgZXRjLgorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0ZvciBTU0wgZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnQgY2VydGlmaWNhdGUgZmlsZXMgdGhlIENVUkxPUFRfUFJPWFlfQ0FJTkZPIG9wdGlvbgoraXMgaWdub3JlZC4gUmVmZXIgdG8gaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9zc2wtY29tcGFyZWQuaHRtbAorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfQ0FQQVRIICIoMyksICIKKy5CUiBDVVJMT1BUX1NTTF9WRVJJRllQRUVSICIoMyksICIgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX0NBUEFUSC4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9DQVBBVEguMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWRmYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9DQVBBVEguMwpAQCAtMCwwICsxLDU0IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1BST1hZX0NBUEFUSCAzICIxNiBOb3YgMjAxNiIgImxpYmN1cmwgNy41Mi4wIiAiY3VybF9lYXN5X3NldG9wdCBvcHRpb25zIgorLlNIIE5BTUUKK0NVUkxPUFRfUFJPWFlfQ0FQQVRIIFwtIHNwZWNpZnkgZGlyZWN0b3J5IGhvbGRpbmcgcHJveHkgQ0EgY2VydGlmaWNhdGVzCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfQ0FQQVRILCBjaGFyICpjYXBhdGgpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIGNoYXIgKiB0byBhIHplcm8gdGVybWluYXRlZCBzdHJpbmcgbmFtaW5nIGEgZGlyZWN0b3J5IGhvbGRpbmcgbXVsdGlwbGUKK0NBIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aC4gSWYgbGliY3VybCBpcyBidWlsdCBhZ2FpbnN0IE9wZW5TU0wsCit0aGUgY2VydGlmaWNhdGUgZGlyZWN0b3J5IG11c3QgYmUgcHJlcGFyZWQgdXNpbmcgdGhlIG9wZW5zc2wgY19yZWhhc2ggdXRpbGl0eS4KK1RoaXMgbWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVIoMylcZlAgb3B0aW9uLgorCitUaGUgXGZJQ1VSTE9QVF9DQVBBVEgoMylcZlAgZnVuY3Rpb24gYXBwYXJlbnRseSBkb2VzIG5vdCB3b3JrIGluIFdpbmRvd3MgZHVlCit0byBzb21lIGxpbWl0YXRpb24gaW4gb3BlbnNzbC4KKy5TSCBERUZBVUxUCitOVUxMCisuU0ggUFJPVE9DT0xTCitBbGwgVExTIGJhc2VkIHByb3RvY29sczogSFRUUFMsIEZUUFMsIElNQVBTLCBQT1AzUywgU01UUFMgZXRjLgorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK1RoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgT3BlblNTTCwgR251VExTIGFuZCBQb2xhclNTTCBiYWNrZW5kcy4gVGhlIE5TUworYmFja2VuZCBwcm92aWRlcyB0aGUgb3B0aW9uIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisuU0ggUkVUVVJOIFZBTFVFCitSZXR1cm5zIENVUkxFX09LIGlmIFRMUyBlbmFibGVkLCBhbmQgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfQ0FJTkZPICIoMyksICIKKy5CUiBDVVJMT1BUX1NUREVSUiAiKDMpLCAiIENVUkxPUFRfREVCVUdGVU5DVElPTiAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX0NSTEZJTEUuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfQ1JMRklMRS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMGRjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX0NSTEZJTEUuMwpAQCAtMCwwICsxLDU5IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1BST1hZX0NSTEZJTEUgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX0NSTEZJTEUgXC0gc3BlY2lmeSBhIHByb3h5IENlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdCBmaWxlCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfQ1JMRklMRSwgY2hhciAqZmlsZSk7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgY2hhciAqIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBuYW1pbmcgYSBcZklmaWxlXGZQIHdpdGggdGhlCitjb25jYXRlbmF0aW9uIG9mIENSTCAoaW4gUEVNIGZvcm1hdCkgdG8gdXNlIGluIHRoZSBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHRoYXQKK29jY3VycyBkdXJpbmcgdGhlIFNTTCBleGNoYW5nZS4KKworV2hlbiBjdXJsIGlzIGJ1aWx0IHRvIHVzZSBOU1Mgb3IgR251VExTLCB0aGVyZSBpcyBubyB3YXkgdG8gaW5mbHVlbmNlIHRoZSB1c2UKK29mIENSTCBwYXNzZWQgdG8gaGVscCBpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFdoZW4gbGliY3VybCBpcyBidWlsdCB3aXRoCitPcGVuU1NMIHN1cHBvcnQsIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyBhbmQgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCBhcmUgYm90aAorc2V0LCByZXF1aXJpbmcgQ1JMIGNoZWNrIGFnYWluc3QgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgY2VydGlmaWNhdGUgY2hhaW4gaWYKK2EgQ1JMIGZpbGUgaXMgcGFzc2VkLgorCitUaGlzIG9wdGlvbiBtYWtlcyBzZW5zZSBvbmx5IHdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorXGZJQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUigzKVxmUCBvcHRpb24uCisKK0Egc3BlY2lmaWMgZXJyb3IgY29kZSAoXGZJQ1VSTEVfU1NMX0NSTF9CQURGSUxFXGZQKSBpcyBkZWZpbmVkIHdpdGggdGhlCitvcHRpb24uIEl0IGlzIHJldHVybmVkIHdoZW4gdGhlIFNTTCBleGNoYW5nZSBmYWlscyBiZWNhdXNlIHRoZSBDUkwgZmlsZSBjYW5ub3QKK2JlIGxvYWRlZC4gIEEgZmFpbHVyZSBpbiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZHVlIHRvIGEgcmV2b2NhdGlvbgoraW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIENSTCBkb2VzIG5vdCB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgZXJyb3IuCisuU0ggREVGQVVMVAorTlVMTAorLlNIIFBST1RPQ09MUworQWxsIFRMUy1iYXNlZCBwcm90b2NvbHMKKy5TSCBFWEFNUExFCitUT0RPCisuU0ggUkVUVVJOIFZBTFVFCitSZXR1cm5zIENVUkxFX09LIGlmIHRoZSBvcHRpb24gaXMgc3VwcG9ydGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCitDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiAiKDMpLCAiIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfS0VZUEFTU1dELjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiZDMyOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfS0VZUEFTU1dELjMKQEAgLTAsMCArMSw0NiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX0tFWVBBU1NXRCBcLSBzZXQgcGFzc3BocmFzZSB0byBwcm94eSBwcml2YXRlIGtleQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRCwgY2hhciAqcHdkKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIEl0IHdpbGwgYmUgdXNlZCBhcwordGhlIHBhc3N3b3JkIHJlcXVpcmVkIHRvIHVzZSB0aGUgXGZJQ1VSTE9QVF9TU0xLRVkoMylcZlAgb3IKK1xmSUNVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRSgzKVxmUCBwcml2YXRlIGtleS4gIFlvdSBuZXZlciBuZWVkZWQgYSBwYXNzCitwaHJhc2UgdG8gbG9hZCBhIGNlcnRpZmljYXRlIGJ1dCB5b3UgbmVlZCBvbmUgdG8gbG9hZCB5b3VyIHByaXZhdGUga2V5LgorLlNIIERFRkFVTFQKK05VTEwKKy5TSCBQUk9UT0NPTFMKK0FsbCBUTFMgYmFzZWQgcHJvdG9jb2xzOiBIVFRQUywgRlRQUywgSU1BUFMsIFBPUDNTLCBTTVRQUyBldGMuCisuU0ggRVhBTVBMRQorVE9ETworLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiBUTFMgZW5hYmxlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfU1NMS0VZICIoMyksICIgQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMQ0VSVC4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xDRVJULjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5ZjZlNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMQ0VSVC4zCkBAIC0wLDAgKzEsNTYgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfU1NMQ0VSVCAzICIxNiBOb3YgMjAxNiIgImxpYmN1cmwgNy41Mi4wIiAiY3VybF9lYXN5X3NldG9wdCBvcHRpb25zIgorLlNIIE5BTUUKK0NVUkxPUFRfUFJPWFlfU1NMQ0VSVCBcLSBzZXQgU1NMIHByb3h5IGNsaWVudCBjZXJ0aWZpY2F0ZQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1BST1hZX1NTTENFUlQsIGNoYXIgKmNlcnQpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gVGhlIHN0cmluZyBzaG91bGQgYmUKK3RoZSBmaWxlIG5hbWUgb2YgeW91ciBjbGllbnQgY2VydGlmaWNhdGUuIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiUDEyIiBvbgorU2VjdXJlIFRyYW5zcG9ydCBhbmQgIlBFTSIgb24gb3RoZXIgZW5naW5lcywgYW5kIGNhbiBiZSBjaGFuZ2VkIHdpdGgKK1xmSUNVUkxPUFRfU1NMQ0VSVFRZUEUoMylcZlAuCisKK1dpdGggTlNTIG9yIFNlY3VyZSBUcmFuc3BvcnQsIHRoaXMgY2FuIGFsc28gYmUgdGhlIG5pY2tuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZQoreW91IHdpc2ggdG8gYXV0aGVudGljYXRlIHdpdGggYXMgaXQgaXMgbmFtZWQgaW4gdGhlIHNlY3VyaXR5IGRhdGFiYXNlLiBJZiB5b3UKK3dhbnQgdG8gdXNlIGEgZmlsZSBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcGxlYXNlIHByZWNlZGUgaXQgd2l0aCAiLi8iCitwcmVmaXgsIGluIG9yZGVyIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgbmlja25hbWUuCisKK1doZW4gdXNpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUsIHlvdSBtb3N0IGxpa2VseSBhbHNvIG5lZWQgdG8gcHJvdmlkZSBhCitwcml2YXRlIGtleSB3aXRoIFxmSUNVUkxPUFRfU1NMS0VZKDMpXGZQLgorLlNIIERFRkFVTFQKK05VTEwKKy5TSCBQUk9UT0NPTFMKK0FsbCBUTFMgYmFzZWQgcHJvdG9jb2xzOiBIVFRQUywgRlRQUywgSU1BUFMsIFBPUDNTLCBTTVRQUyBldGMuCisuU0ggRVhBTVBMRQorVE9ETworLlNIIEFWQUlMQUJJTElUWQorSWYgYnVpbHQgVExTIGVuYWJsZWQuCisuU0ggUkVUVVJOIFZBTFVFCitSZXR1cm5zIENVUkxFX09LIGlmIFRMUyBlbmFibGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCitDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xDRVJUVFlQRSAiKDMpLCAiIENVUkxPUFRfU1NMS0VZICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjYzMzBjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRS4zCkBAIC0wLDAgKzEsNDkgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFIFwtIHNwZWNpZnkgdHlwZSBvZiB0aGUgcHJveHkgY2xpZW50IFNTTCBjZXJ0aWZpY2F0ZQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFLCBjaGFyICp0eXBlKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoZSBzdHJpbmcgc2hvdWxkIGJlCit0aGUgZm9ybWF0IG9mIHlvdXIgY2VydGlmaWNhdGUuIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiBhbmQgIkRFUiIsIGV4Y2VwdAord2l0aCBTZWN1cmUgVHJhbnNwb3J0LiBPcGVuU1NMICh2ZXJzaW9ucyAwLjkuMyBhbmQgbGF0ZXIpIGFuZCBTZWN1cmUgVHJhbnNwb3J0Cisob24gaU9TIDUgb3IgbGF0ZXIsIG9yIE9TIFggMTAuNyBvciBsYXRlcikgYWxzbyBzdXBwb3J0ICJQMTIiIGZvcgorUEtDUyMxMi1lbmNvZGVkIGZpbGVzLgorLlNIIERFRkFVTFQKKyJQRU0iCisuU0ggUFJPVE9DT0xTCitBbGwgVExTIGJhc2VkIHByb3RvY29sczogSFRUUFMsIEZUUFMsIElNQVBTLCBQT1AzUywgU01UUFMgZXRjLgorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0lmIGJ1aWx0IFRMUyBlbmFibGVkLgorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiBUTFMgaXMgc3VwcG9ydGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCitDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xDRVJUICIoMyksICIgQ1VSTE9QVF9TU0xLRVkgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xLRVkuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMS0VZLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVjNzM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMS0VZLjMKQEAgLTAsMCArMSw1MSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9QUk9YWV9TU0xLRVkgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTEtFWSBcLSBzcGVjaWZ5IHByaXZhdGUga2V5ZmlsZSBmb3IgVExTIGFuZCBTU0wgcHJveHkgY2xpZW50IGNlcnQKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9QUk9YWV9TU0xLRVksIGNoYXIgKmtleWZpbGUpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIHBvaW50ZXIgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGFzIHBhcmFtZXRlci4gVGhlIHN0cmluZyBzaG91bGQgYmUKK3RoZSBmaWxlIG5hbWUgb2YgeW91ciBwcml2YXRlIGtleS4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzICJQRU0iIGFuZCBjYW4gYmUKK2NoYW5nZWQgd2l0aCBcZklDVVJMT1BUX1NTTEtFWVRZUEUoMylcZlAuCisKKyhpT1MgYW5kIE1hYyBPUyBYIG9ubHkpIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgY3VybCB3YXMgYnVpbHQgYWdhaW5zdAorU2VjdXJlIFRyYW5zcG9ydC4gU2VjdXJlIFRyYW5zcG9ydCBleHBlY3RzIHRoZSBwcml2YXRlIGtleSB0byBiZSBhbHJlYWR5CitwcmVzZW50IGluIHRoZSBrZXljaGFpbiBvciBQS0NTIzEyIGZpbGUgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGUuCisuU0ggREVGQVVMVAorTlVMTAorLlNIIFBST1RPQ09MUworQWxsIFRMUyBiYXNlZCBwcm90b2NvbHM6IEhUVFBTLCBGVFBTLCBJTUFQUywgUE9QM1MsIFNNVFBTIGV0Yy4KKy5TSCBFWEFNUExFCitUT0RPCisuU0ggQVZBSUxBQklMSVRZCitJZiBidWlsdCBUTFMgZW5hYmxlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgQ1VSTEVfT0sgaWYgVExTIGlzIHN1cHBvcnRlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfU1NMS0VZVFlQRSAiKDMpLCAiIENVUkxPUFRfU1NMQ0VSVCAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUuMwpAQCAtMCwwICsxLDUxIEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUgXC0gc2V0IHR5cGUgb2YgdGhlIHByb3h5IHByaXZhdGUga2V5IGZpbGUKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFLCBjaGFyICp0eXBlKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoZSBzdHJpbmcgc2hvdWxkIGJlCit0aGUgZm9ybWF0IG9mIHlvdXIgcHJpdmF0ZSBrZXkuIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSAiUEVNIiwgIkRFUiIgYW5kICJFTkciLgorCitUaGUgZm9ybWF0ICJFTkciIGVuYWJsZXMgeW91IHRvIGxvYWQgdGhlIHByaXZhdGUga2V5IGZyb20gYSBjcnlwdG8gZW5naW5lLiBJbgordGhpcyBjYXNlIFxmSUNVUkxPUFRfU1NMS0VZKDMpXGZQIGlzIHVzZWQgYXMgYW4gaWRlbnRpZmllciBwYXNzZWQgdG8gdGhlCitlbmdpbmUuIFlvdSBoYXZlIHRvIHNldCB0aGUgY3J5cHRvIGVuZ2luZSB3aXRoIFxmSUNVUkxPUFRfU1NMRU5HSU5FKDMpXGZQLgorXCYiREVSIiBmb3JtYXQga2V5IGZpbGUgY3VycmVudGx5IGRvZXMgbm90IHdvcmsgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBPcGVuU1NMLgorLlNIIERFRkFVTFQKKyJQRU0iCisuU0ggUFJPVE9DT0xTCitBbGwgVExTIGJhc2VkIHByb3RvY29sczogSFRUUFMsIEZUUFMsIElNQVBTLCBQT1AzUywgU01UUFMgZXRjLgorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0lmIGJ1aWx0IFRMUyBlbmFibGVkLgorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiBUTFMgaXMgc3VwcG9ydGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCitDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xLRVkgIigzKSwgIiBDVVJMT1BUX1NTTENFUlQgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1NTTFZFUlNJT04uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTkxYmU5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OLjMKQEAgLTAsMCArMSw4MSBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OIDMgIjE2IE5vdiAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfc2V0b3B0IG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OIFwtIHNldCBwcm94eSBwcmVmZXJyZWQgVExTL1NTTCB2ZXJzaW9uCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfU1NMVkVSU0lPTiwgbG9uZyB2ZXJzaW9uKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBsb25nIGFzIHBhcmFtZXRlciB0byBjb250cm9sIHdoaWNoIHZlcnNpb24gb2YgU1NML1RMUyB0byBhdHRlbXB0IHRvCit1c2UuCisKK1VzZSBvbmUgb2YgdGhlIGF2YWlsYWJsZSBkZWZpbmVzIGZvciB0aGlzIHB1cnBvc2UuIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6CisuUlMKKy5JUCBDVVJMX1NTTFZFUlNJT05fREVGQVVMVAorVGhlIGRlZmF1bHQgYWN0aW9uLiBUaGlzIHdpbGwgYXR0ZW1wdCB0byBmaWd1cmUgb3V0IHRoZSByZW1vdGUgU1NMIHByb3RvY29sCit2ZXJzaW9uLgorLklQIENVUkxfU1NMVkVSU0lPTl9UTFN2MQorVExTdjEueAorLklQIENVUkxfU1NMVkVSU0lPTl9TU0x2MgorU1NMdjIKKy5JUCBDVVJMX1NTTFZFUlNJT05fU1NMdjMKK1NTTHYzCisuSVAgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAKK1RMU3YxLjAgKEFkZGVkIGluIDcuMzQuMCkKKy5JUCBDVVJMX1NTTFZFUlNJT05fVExTdjFfMQorVExTdjEuMSAoQWRkZWQgaW4gNy4zNC4wKQorLklQIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yCitUTFN2MS4yIChBZGRlZCBpbiA3LjM0LjApCisuSVAgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMKK1RMU3YxLjMgKEFkZGVkIGluIDcuNTIuMCkKKy5SRQorLlNIIERFRkFVTFQKK0NVUkxfU1NMVkVSU0lPTl9ERUZBVUxUCisuU0ggUFJPVE9DT0xTCitBbGwgVExTIGJhc2VkIHByb3RvY29sczogSFRUUFMsIEZUUFMsIElNQVBTLCBQT1AzUywgU01UUFMgZXRjLgorLlNIIEVYQU1QTEUKKy5uZgorQ1VSTCAqY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CitpZihjdXJsKSB7CisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsICJodHRwczovL2V4YW1wbGUuY29tIik7CisKKyAgLyogYXNrIGxpYmN1cmwgdG8gdXNlIFRMUyB2ZXJzaW9uIDEuMCBvciBsYXRlciAqLworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPWFlfU1NMVkVSU0lPTiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxKTsKKworICAvKiBQZXJmb3JtIHRoZSByZXF1ZXN0ICovCisgIGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworfQorLmZpCisuU0ggQVZBSUxBQklMSVRZCitTU0x2MiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IHNpbmNlIDcuMTguMS4gT3RoZXIgU1NMIHZlcnNpb25zIGF2YWlsYWJpbGl0eSBtYXkKK3ZhcnkgZGVwZW5kaW5nIG9uIHdoaWNoIGJhY2tlbmQgbGliY3VybCBoYXMgYmVlbiBidWlsdCB0byB1c2UuCisKK1NTTHYzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgc2luY2UgNy4zOS4wLgorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9VU0VfU1NMICIoMyksICIgQ1VSTE9QVF9IVFRQX1ZFUlNJT04gIigzKSwgIgorLkJSIENVUkxPUFRfSVBSRVNPTFZFICIoMykgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX0NJUEhFUl9MSVNULjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3Mjk1MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX0NJUEhFUl9MSVNULjMKQEAgLTAsMCArMSw2NiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCBcLSBzcGVjaWZ5IGNpcGhlcnMgdG8gdXNlIGZvciBwcm94eSBUTFMKKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QsIGNoYXIgKmxpc3QpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIGNoYXIgKiwgcG9pbnRpbmcgdG8gYSB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5nIGhvbGRpbmcgdGhlIGxpc3Qgb2YKK2NpcGhlcnMgdG8gdXNlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uIFRoZSBsaXN0IG11c3QgYmUgc3ludGFjdGljYWxseSBjb3JyZWN0LAoraXQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgY2lwaGVyIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IGNvbG9ucy4gQ29tbWFzIG9yCitzcGFjZXMgYXJlIGFsc28gYWNjZXB0YWJsZSBzZXBhcmF0b3JzIGJ1dCBjb2xvbnMgYXJlIG5vcm1hbGx5IHVzZWQsIFwmISwgXCYtCithbmQgXCYrIGNhbiBiZSB1c2VkIGFzIG9wZXJhdG9ycy4KKworRm9yIE9wZW5TU0wgYW5kIEdudVRMUyB2YWxpZCBleGFtcGxlcyBvZiBjaXBoZXIgbGlzdHMgaW5jbHVkZSAnUkM0LVNIQScsCitcJ1NIQTErREVTXCcsICdUTFN2MScgYW5kICdERUZBVUxUJy4gVGhlIGRlZmF1bHQgbGlzdCBpcyBub3JtYWxseSBzZXQgd2hlbiB5b3UKK2NvbXBpbGUgT3BlblNTTC4KKworWW91J2xsIGZpbmQgbW9yZSBkZXRhaWxzIGFib3V0IGNpcGhlciBsaXN0cyBvbiB0aGlzIFVSTDoKKworIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwKKworRm9yIE5TUywgdmFsaWQgZXhhbXBsZXMgb2YgY2lwaGVyIGxpc3RzIGluY2x1ZGUgJ3JzYV9yYzRfMTI4X21kNScsCitcJ3JzYV9hZXNfMTI4X3NoYVwnLCBldGMuIFdpdGggTlNTIHlvdSBkb24ndCBhZGQvcmVtb3ZlIGNpcGhlcnMuIElmIG9uZSB1c2VzCit0aGlzIG9wdGlvbiB0aGVuIGFsbCBrbm93biBjaXBoZXJzIGFyZSBkaXNhYmxlZCBhbmQgb25seSB0aG9zZSBwYXNzZWQgaW4gYXJlCitlbmFibGVkLgorCitZb3UnbGwgZmluZCBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIE5TUyBjaXBoZXIgbGlzdHMgb24gdGhpcyBVUkw6CisKKyBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9tb2RfbnNzLmdpdC9wbGFpbi9kb2NzL21vZF9uc3MuaHRtbCNEaXJlY3RpdmVzCisuU0ggREVGQVVMVAorTlVMTCwgdXNlIGludGVybmFsIGRlZmF1bHQKKy5TSCBQUk9UT0NPTFMKK0FsbCBUTFMgYmFzZWQgcHJvdG9jb2xzOiBIVFRQUywgRlRQUywgSU1BUFMsIFBPUDNTLCBTTVRQUyBldGMuCisuU0ggRVhBTVBMRQorVE9ETworLlNIIEFWQUlMQUJJTElUWQorSWYgYnVpbHQgVExTIGVuYWJsZWQuCisuU0ggUkVUVVJOIFZBTFVFCitSZXR1cm5zIENVUkxFX09LIGlmIFRMUyBpcyBzdXBwb3J0ZWQsIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdCwgb3IKK0NVUkxFX09VVF9PRl9NRU1PUlkgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBoZWFwIHNwYWNlLgorLlNIICJTRUUgQUxTTyIKKy5CUiBDVVJMT1BUX1NTTFZFUlNJT04gIigzKSwgIiBDVVJMT1BUX1VTRV9TU0wgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUy4zIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDAyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TLjMKQEAgLTAsMCArMSw2MiBAQAorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisuXCIgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKy5cIiAqCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisuXCIgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKy5cIiAqCisuXCIgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKy5cIiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworLlwiICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisuXCIgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLlwiICoKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiCisuVEggQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUyAzICIxNiBOb3YgMjAxNiIgImxpYmN1cmwgNy41Mi4wIiAiY3VybF9lYXN5X3NldG9wdCBvcHRpb25zIgorLlNIIE5BTUUKK0NVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMgXC0gc2V0IHByb3h5IFNTTCBiZWhhdmlvciBvcHRpb25zCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMsIGxvbmcgYml0bWFzayk7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgbG9uZyB3aXRoIGEgYml0bWFzayB0byB0ZWxsIGxpYmN1cmwgYWJvdXQgc3BlY2lmaWMgU1NMIGJlaGF2aW9ycy4KKworXGZJQ1VSTFNTTE9QVF9BTExPV19CRUFTVFxmUCB0ZWxscyBsaWJjdXJsIHRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhbnkKK3dvcmthcm91bmRzIGZvciBhIHNlY3VyaXR5IGZsYXcgaW4gdGhlIFNTTDMgYW5kIFRMUzEuMCBwcm90b2NvbHMuICBJZiB0aGlzCitvcHRpb24gaXNuJ3QgdXNlZCBvciB0aGlzIGJpdCBpcyBzZXQgdG8gMCwgdGhlIFNTTCBsYXllciBsaWJjdXJsIHVzZXMgbWF5IHVzZSBhCit3b3JrLWFyb3VuZCBmb3IgdGhpcyBmbGF3IGFsdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMKK3dpdGggc29tZSAob2xkZXIpIFNTTCBpbXBsZW1lbnRhdGlvbnMuIFdBUk5JTkc6IGF2b2lkaW5nIHRoaXMgd29yay1hcm91bmQKK2xlc3NlbnMgdGhlIHNlY3VyaXR5LCBhbmQgYnkgc2V0dGluZyB0aGlzIG9wdGlvbiB0byAxIHlvdSBhc2sgZm9yIGV4YWN0bHkgdGhhdC4KK1RoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBEYXJ3aW5TU0wsIE5TUyBhbmQgT3BlblNTTC4KKworQWRkZWQgaW4gNy40NC4wOgorCitcZklDVVJMU1NMT1BUX05PX1JFVk9LRVxmUCB0ZWxscyBsaWJjdXJsIHRvIGRpc2FibGUgY2VydGlmaWNhdGUgcmV2b2NhdGlvbgorY2hlY2tzIGZvciB0aG9zZSBTU0wgYmFja2VuZHMgd2hlcmUgc3VjaCBiZWhhdmlvciBpcyBwcmVzZW50LiBcZkJDdXJyZW50bHkgdGhpcworb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBXaW5TU0wgKHRoZSBuYXRpdmUgV2luZG93cyBTU0wgbGlicmFyeSksIHdpdGggYW4KK2V4Y2VwdGlvbiBpbiB0aGUgY2FzZSBvZiBXaW5kb3dzJyBVbnRydXN0ZWQgUHVibGlzaGVycyBibGFja2xpc3Qgd2hpY2ggaXQgc2VlbXMKK2Nhbid0IGJlIGJ5cGFzc2VkLlxmUCBUaGlzIG9wdGlvbiBtYXkgaGF2ZSBicm9hZGVyIHN1cHBvcnQgdG8gYWNjb21tb2RhdGUgb3RoZXIKK1NTTCBiYWNrZW5kcyBpbiB0aGUgZnV0dXJlLgoraHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9zc2wtY29tcGFyZWQuaHRtbAorCisKKy5TSCBERUZBVUxUCiswCisuU0ggUFJPVE9DT0xTCitBbGwgVExTLWJhc2VkIHByb3RvY29scworLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgQ1VSTEVfT0sgaWYgdGhlIG9wdGlvbiBpcyBzdXBwb3J0ZWQsIGFuZCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfU1NMVkVSU0lPTiAiKDMpLCAiIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNUICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzIwMjdhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVC4zCkBAIC0wLDAgKzEsODggQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NUIFwtIHZlcmlmeSB0aGUgcHJveHkgY2VydGlmaWNhdGUncyBuYW1lIGFnYWluc3QgaG9zdAorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NULCBsb25nIHZlcmlmeSk7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIgc3BlY2lmeWluZyB3aGF0IHRvIFxmSXZlcmlmeVxmUC4KKworVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIGxpYmN1cmwgdmVyaWZpZXMgdGhhdCB0aGUgc2VydmVyIGNlcnQgaXMgZm9yCit0aGUgc2VydmVyIGl0IGlzIGtub3duIGFzLgorCitXaGVuIG5lZ290aWF0aW5nIFRMUyBhbmQgU1NMIGNvbm5lY3Rpb25zLCB0aGUgc2VydmVyIHNlbmRzIGEgY2VydGlmaWNhdGUKK2luZGljYXRpbmcgaXRzIGlkZW50aXR5LgorCitXaGVuIFxmSUNVUkxPUFRfU1NMX1ZFUklGWUhPU1QoMylcZlAgaXMgMiwgdGhhdCBjZXJ0aWZpY2F0ZSBtdXN0IGluZGljYXRlIHRoYXQKK3RoZSBzZXJ2ZXIgaXMgdGhlIHNlcnZlciB0byB3aGljaCB5b3UgbWVhbnQgdG8gY29ubmVjdCwgb3IgdGhlIGNvbm5lY3Rpb24KK2ZhaWxzLiBTaW1wbHkgcHV0LCBpdCBtZWFucyBpdCBoYXMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGluIHRoZSBjZXJ0aWZpY2F0ZSBhcworaXMgaW4gdGhlIFVSTCB5b3Ugb3BlcmF0ZSBhZ2FpbnN0LgorCitDdXJsIGNvbnNpZGVycyB0aGUgc2VydmVyIHRoZSBpbnRlbmRlZCBvbmUgd2hlbiB0aGUgQ29tbW9uIE5hbWUgZmllbGQgb3IgYQorU3ViamVjdCBBbHRlcm5hdGUgTmFtZSBmaWVsZCBpbiB0aGUgY2VydGlmaWNhdGUgbWF0Y2hlcyB0aGUgaG9zdCBuYW1lIGluIHRoZQorVVJMIHRvIHdoaWNoIHlvdSB0b2xkIEN1cmwgdG8gY29ubmVjdC4KKworV2hlbiB0aGUgXGZJdmVyaWZ5XGZQIHZhbHVlIGlzIDEsIFxmSWN1cmxfZWFzeV9zZXRvcHRcZlAgd2lsbCByZXR1cm4gYW4gZXJyb3IKK2FuZCB0aGUgb3B0aW9uIHZhbHVlIHdpbGwgbm90IGJlIGNoYW5nZWQuICBJdCB3YXMgcHJldmlvdXNseSAoaW4gNy4yOC4wIGFuZAorZWFybGllcikgYSBkZWJ1ZyBvcHRpb24gb2Ygc29tZSBzb3J0cywgYnV0IGl0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgZHVlIHRvCitmcmVxdWVudGx5IGxlYWRpbmcgdG8gcHJvZ3JhbW1lciBtaXN0YWtlcy4gRnV0dXJlIHZlcnNpb25zIHdpbGwgc3RvcCByZXR1cm5pbmcKK2FuIGVycm9yIGZvciAxIGFuZCBqdXN0IHRyZWF0IDEgYW5kIDIgdGhlIHNhbWUuCisKK1doZW4gdGhlIFxmSXZlcmlmeVxmUCB2YWx1ZSBpcyAwLCB0aGUgY29ubmVjdGlvbiBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHRoZQorbmFtZXMgaW4gdGhlIGNlcnRpZmljYXRlLiBVc2UgdGhhdCBhYmlsaXR5IHdpdGggY2F1dGlvbiEKKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzIDIuCisKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIGNoZWNraW5nIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSdzIGNsYWltZWQgaWRlbnRpdHkuCitUaGUgc2VydmVyIGNvdWxkIGJlIGx5aW5nLiAgVG8gY29udHJvbCBseWluZywgc2VlCitcZklDVVJMT1BUX1NTTF9WRVJJRllQRUVSKDMpXGZQLiAgSWYgbGliY3VybCBpcyBidWlsdCBhZ2FpbnN0IE5TUyBhbmQKK1xmSUNVUkxPUFRfU1NMX1ZFUklGWVBFRVIoMylcZlAgaXMgemVybywgXGZJQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCgzKVxmUCBpcworYWxzbyBzZXQgdG8gemVybyBhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4uCisuU0ggREVGQVVMVAorMgorLlNIIFBST1RPQ09MUworQWxsIFRMUyBiYXNlZCBwcm90b2NvbHM6IEhUVFBTLCBGVFBTLCBJTUFQUywgUE9QM1MsIFNNVFBTIGV0Yy4KKy5TSCBFWEFNUExFCisubmYKK0NVUkwgKmN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOworaWYoY3VybCkgeworICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly9leGFtcGxlLmNvbSIpOworCisgIC8qIFNldCB0aGUgZGVmYXVsdCB2YWx1ZTogc3RyaWN0IG5hbWUgY2hlY2sgcGxlYXNlICovCisgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgMkwpOworCisgIGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworfQorLmZpCisuU0ggQVZBSUxBQklMSVRZCitJZiBidWlsdCBUTFMgZW5hYmxlZC4KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgQ1VSTEVfT0sgaWYgVExTIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKworSWYgMSBpcyBzZXQgYXMgYXJndW1lbnQsIFxmSUNVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVFxmUCBpcyByZXR1cm5lZC4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiAiKDMpLCAiIENVUkxPUFRfQ0FJTkZPICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5MDJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZUEVFUi4zCkBAIC0wLDAgKzEsODIgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSIFwtIHZlcmlmeSB0aGUgcHJveHkgcGVlcidzIFNTTCBjZXJ0aWZpY2F0ZQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSLCBsb25nIHZlcmlmeSk7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgbG9uZyBhcyBwYXJhbWV0ZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisKK1RoaXMgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciBjdXJsIHZlcmlmaWVzIHRoZSBhdXRoZW50aWNpdHkgb2YgdGhlIHBlZXIncworY2VydGlmaWNhdGUuIEEgdmFsdWUgb2YgMSBtZWFucyBjdXJsIHZlcmlmaWVzOyAwICh6ZXJvKSBtZWFucyBpdCBkb2Vzbid0LgorCitXaGVuIG5lZ290aWF0aW5nIGEgVExTIG9yIFNTTCBjb25uZWN0aW9uLCB0aGUgc2VydmVyIHNlbmRzIGEgY2VydGlmaWNhdGUKK2luZGljYXRpbmcgaXRzIGlkZW50aXR5LiAgQ3VybCB2ZXJpZmllcyB3aGV0aGVyIHRoZSBjZXJ0aWZpY2F0ZSBpcyBhdXRoZW50aWMsCitpLmUuIHRoYXQgeW91IGNhbiB0cnVzdCB0aGF0IHRoZSBzZXJ2ZXIgaXMgd2hvIHRoZSBjZXJ0aWZpY2F0ZSBzYXlzIGl0IGlzLgorVGhpcyB0cnVzdCBpcyBiYXNlZCBvbiBhIGNoYWluIG9mIGRpZ2l0YWwgc2lnbmF0dXJlcywgcm9vdGVkIGluIGNlcnRpZmljYXRpb24KK2F1dGhvcml0eSAoQ0EpIGNlcnRpZmljYXRlcyB5b3Ugc3VwcGx5LiAgY3VybCB1c2VzIGEgZGVmYXVsdCBidW5kbGUgb2YgQ0EKK2NlcnRpZmljYXRlcyAodGhlIHBhdGggZm9yIHRoYXQgaXMgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lKSBhbmQgeW91IGNhbgorc3BlY2lmeSBhbHRlcm5hdGUgY2VydGlmaWNhdGVzIHdpdGggdGhlIFxmSUNVUkxPUFRfQ0FJTkZPKDMpXGZQIG9wdGlvbiBvciB0aGUKK1xmSUNVUkxPUFRfQ0FQQVRIKDMpXGZQIG9wdGlvbi4KKworV2hlbiBcZklDVVJMT1BUX1NTTF9WRVJJRllQRUVSKDMpXGZQIGlzIGVuYWJsZWQsIGFuZCB0aGUgdmVyaWZpY2F0aW9uIGZhaWxzIHRvCitwcm92ZSB0aGF0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBhdXRoZW50aWMsIHRoZSBjb25uZWN0aW9uIGZhaWxzLiAgV2hlbiB0aGUKK29wdGlvbiBpcyB6ZXJvLCB0aGUgcGVlciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gc3VjY2VlZHMgcmVnYXJkbGVzcy4KKworQXV0aGVudGljYXRpbmcgdGhlIGNlcnRpZmljYXRlIGlzIG5vdCBlbm91Z2ggdG8gYmUgc3VyZSBhYm91dCB0aGUgc2VydmVyLiBZb3UKK3R5cGljYWxseSBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlcnZlciBpcyB0aGUgc2VydmVyIHlvdSBtZWFuIHRvIGJlCit0YWxraW5nIHRvLiAgVXNlIFxmSUNVUkxPUFRfU1NMX1ZFUklGWUhPU1QoMylcZlAgZm9yIHRoYXQuIFRoZSBjaGVjayB0aGF0IHRoZQoraG9zdCBuYW1lIGluIHRoZSBjZXJ0aWZpY2F0ZSBpcyB2YWxpZCBmb3IgdGhlIGhvc3QgbmFtZSB5b3UncmUgY29ubmVjdGluZyB0bworaXMgZG9uZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBcZklDVVJMT1BUX1NTTF9WRVJJRllQRUVSKDMpXGZQIG9wdGlvbi4KKworV0FSTklORzogZGlzYWJsaW5nIHZlcmlmaWNhdGlvbiBvZiB0aGUgY2VydGlmaWNhdGUgYWxsb3dzIGJhZCBndXlzIHRvCittYW4taW4tdGhlLW1pZGRsZSB0aGUgY29tbXVuaWNhdGlvbiB3aXRob3V0IHlvdSBrbm93aW5nIGl0LiBEaXNhYmxpbmcKK3ZlcmlmaWNhdGlvbiBtYWtlcyB0aGUgY29tbXVuaWNhdGlvbiBpbnNlY3VyZS4gSnVzdCBoYXZpbmcgZW5jcnlwdGlvbiBvbiBhCit0cmFuc2ZlciBpcyBub3QgZW5vdWdoIGFzIHlvdSBjYW5ub3QgYmUgc3VyZSB0aGF0IHlvdSBhcmUgY29tbXVuaWNhdGluZyB3aXRoCit0aGUgY29ycmVjdCBlbmQtcG9pbnQuCisuU0ggREVGQVVMVAorQnkgZGVmYXVsdCwgY3VybCBhc3N1bWVzIGEgdmFsdWUgb2YgMS4KKy5TSCBQUk9UT0NPTFMKK0FsbCBUTFMgYmFzZWQgcHJvdG9jb2xzOiBIVFRQUywgRlRQUywgSU1BUFMsIFBPUDNTLCBTTVRQUyBldGMuCisuU0ggRVhBTVBMRQorLm5mCitDVVJMICpjdXJsID0gY3VybF9lYXN5X2luaXQoKTsKK2lmKGN1cmwpIHsKKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgImh0dHBzOi8vZXhhbXBsZS5jb20iKTsKKworICAvKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWU6IHN0cmljdCBjZXJ0aWZpY2F0ZSBjaGVjayBwbGVhc2UgKi8KKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSLCAxTCk7CisKKyAgY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7Cit9CisuZmkKKy5TSCBBVkFJTEFCSUxJVFkKK0lmIGJ1aWx0IFRMUyBlbmFibGVkLgorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIENVUkxFX1VOS05PV05fT1BUSU9OIGlmIG5vdC4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODI0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQuMwpAQCAtMCwwICsxLDQ4IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQgXC0gcGFzc3dvcmQgdG8gdXNlIGZvciBwcm94eSBUTFMgYXV0aGVudGljYXRpb24KKy5TSCBTWU5PUFNJUworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCitDVVJMY29kZSBjdXJsX2Vhc3lfc2V0b3B0KENVUkwgKmhhbmRsZSwgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JELCBjaGFyICpwd2QpOworLlNIIERFU0NSSVBUSU9OCitUT0RPOiBNYWtlIHRoaXMgdGV4dCBzcGVjaWZpYyB0byBIVFRQUyBwcm94eS4gKEFkZGVkIGluIDcuWFhYKQorUGFzcyBhIGNoYXIgKiBhcyBwYXJhbWV0ZXIsIHdoaWNoIHNob3VsZCBwb2ludCB0byB0aGUgemVybyB0ZXJtaW5hdGVkIHBhc3N3b3JkCit0byB1c2UgZm9yIHRoZSBUTFMgYXV0aGVudGljYXRpb24gbWV0aG9kIHNwZWNpZmllZCB3aXRoIHRoZQorXGZJQ1VSTE9QVF9UTFNBVVRIX1RZUEUoMylcZlAgb3B0aW9uLiBSZXF1aXJlcyB0aGF0IHRoZQorXGZJQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FKDMpXGZQIG9wdGlvbiBhbHNvIGJlIHNldC4KKy5TSCBERUZBVUxUCitOVUxMCisuU0ggUFJPVE9DT0xTCitBbGwgVExTLWJhc2VkIHByb3RvY29scworLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0FkZGVkIGluIDcuMjEuNAorLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfVExTQVVUSF9UWVBFICIoMyksICIgQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOGE0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRS4zCkBAIC0wLDAgKzEsNTMgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFIDMgIjE2IE5vdiAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfc2V0b3B0IG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEUgXC0gc2V0IHByb3h5IFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2RzCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFLCBjaGFyICp0eXBlKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBwb2ludGVyIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBhcyBwYXJhbWV0ZXIuIFRoZSBzdHJpbmcKK3Nob3VsZCBiZSB0aGUgbWV0aG9kIG9mIHRoZSBUTFMgYXV0aGVudGljYXRpb24uIFN1cHBvcnRlZCBtZXRob2QgaXMgIlNSUCIuCisKKy5JUCBTUlAKK1RMUy1TUlAgYXV0aGVudGljYXRpb24uIFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQgYXV0aGVudGljYXRpb24gZm9yIFRMUyBpcworZGVmaW5lZCBpbiBSRkM1MDU0IGFuZCBwcm92aWRlcyBtdXR1YWwgYXV0aGVudGljYXRpb24gaWYgYm90aCBzaWRlcyBoYXZlIGEKK3NoYXJlZCBzZWNyZXQuIFRvIHVzZSBUTFMtU1JQLCB5b3UgbXVzdCBhbHNvIHNldCB0aGUKK1xmSUNVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSgzKVxmUCBhbmQgXGZJQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEKDMpXGZQCitvcHRpb25zLgorLlNIIERFRkFVTFQKK2JsYW5rCisuU0ggUFJPVE9DT0xTCitBbGwgVExTLWJhc2VkIHByb3RvY29scworLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK1lvdSBuZWVkIHRvIGJ1aWxkIGxpYmN1cmwgd2l0aCBHbnVUTFMgb3IgT3BlblNTTCB3aXRoIFRMUy1TUlAgc3VwcG9ydCBmb3IgdGhpcwordG8gd29yay4KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgQ1VSTEVfT0sgaWYgdGhlIG9wdGlvbiBpcyBzdXBwb3J0ZWQsIGFuZCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRSAiKDMpLCAiIENVUkxPUFRfVExTQVVUSF9QQVNTV09SRCAiKDMpLCAiCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUuMyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDRlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUuMwpAQCAtMCwwICsxLDQ2IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUgMyAiMTYgTm92IDIwMTYiICJsaWJjdXJsIDcuNTIuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKKy5TSCBOQU1FCitDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUgXC0gdXNlciBuYW1lIHRvIHVzZSBmb3IgcHJveHkgVExTIGF1dGhlbnRpY2F0aW9uCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRSwgY2hhciAqdXNlcik7CisuU0ggREVTQ1JJUFRJT04KK1RPRE86IE1ha2UgdGhpcyB0ZXh0IHNwZWNpZmljIHRvIEhUVFBTIHByb3h5LiAoQWRkZWQgaW4gNy5YWFgpCitQYXNzIGEgY2hhciAqIGFzIHBhcmFtZXRlciwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIHRoZSB6ZXJvIHRlcm1pbmF0ZWQgdXNlcm5hbWUKK3RvIHVzZSBmb3IgdGhlIFRMUyBhdXRoZW50aWNhdGlvbiBtZXRob2Qgc3BlY2lmaWVkIHdpdGggdGhlCitcZklDVVJMT1BUX1RMU0FVVEhfVFlQRSgzKVxmUCBvcHRpb24uIFJlcXVpcmVzIHRoYXQgdGhlCitcZklDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQoMylcZlAgb3B0aW9uIGFsc28gYmUgc2V0LgorLlNIIERFRkFVTFQKK05VTEwKKy5TSCBQUk9UT0NPTFMKK0FsbCBUTFMtYmFzZWQgcHJvdG9jb2xzCisuU0ggRVhBTVBMRQorVE9ETworLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSyBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZCwgQ1VSTEVfVU5LTk9XTl9PUFRJT04gaWYgbm90LCBvcgorQ1VSTEVfT1VUX09GX01FTU9SWSBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IGhlYXAgc3BhY2UuCisuU0ggIlNFRSBBTFNPIgorLkJSIENVUkxPUFRfVExTQVVUSF9UWVBFICIoMyksICIgQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEICIoMyksICIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1JFRElSX1BST1RPQ09MUy4zCmluZGV4IDhiZDc2ZjYuLjNhNWMzZmMgMTAwNjQ0Ci0tLSBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfUkVESVJfUFJPVE9DT0xTLjMKKysrIGIvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMuMwpAQCAtMzQsNiArMzQsOSBAQAogbGltaXQgc3BlY2lmaWMgdHJhbnNmZXJzIHRvIG9ubHkgYmUgYWxsb3dlZCB0byB1c2UgYSBzdWJzZXQgb2YgcHJvdG9jb2xzIGluCiByZWRpcmVjdGlvbnMuCiAKK1Byb3RvY29scyBkZW5pZWQgYnkgXGZJQ1VSTE9QVF9QUk9UT0NPTFMoMylcZlAgYXJlIG5vdCBvdmVycmlkZGVuIGJ5IHRoaXMKK29wdGlvbi4KKwogQnkgZGVmYXVsdCBsaWJjdXJsIHdpbGwgYWxsb3cgYWxsIHByb3RvY29scyBvbiByZWRpcmVjdCBleGNlcHQgc2V2ZXJhbCBkaXNhYmxlZAogZm9yIHNlY3VyaXR5IHJlYXNvbnM6IFNpbmNlIDcuMTkuNCBGSUxFIGFuZCBTQ1AgYXJlIGRpc2FibGVkLCBhbmQgc2luY2UgNy40MC4wCiBTTUIgYW5kIFNNQlMgYXJlIGFsc28gZGlzYWJsZWQuIFxmSUNVUkxQUk9UT19BTExcZlAgZW5hYmxlcyBhbGwgcHJvdG9jb2xzIG9uCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NPQ0tTX1BST1hZLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NPQ0tTX1BST1hZLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkM2Q0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfU09DS1NfUFJPWFkuMwpAQCAtMCwwICsxLDg4IEBACisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKy5cIiAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorLlwiICoKKy5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKy5cIiAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKy5cIiAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorLlwiICoKKy5cIiAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorLlwiICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisuXCIgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorLlwiICoKKy5cIiAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKy5cIiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisuXCIgKgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIKKy5USCBDVVJMT1BUX1NPQ0tTX1BST1hZIDMgIjE2IE5vdiAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfc2V0b3B0IG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTE9QVF9TT0NLU19QUk9YWSBcLSBzZXQgc29ja3MgcHJveHkgdG8gdXNlCisuU0ggU1lOT1BTSVMKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworQ1VSTGNvZGUgY3VybF9lYXN5X3NldG9wdChDVVJMICpoYW5kbGUsIENVUkxPUFRfU09DS1NfUFJPWFksIGNoYXIgKnByb3h5KTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1NldCB0aGUgXGZJcHJveHlcZlAgdG8gdXNlIGZvciB0aGUgdXBjb21pbmcgcmVxdWVzdC4gVGhlIHBhcmFtZXRlciBzaG91bGQgYmUgYQorY2hhciAqIHRvIGEgemVybyB0ZXJtaW5hdGVkIHN0cmluZyBob2xkaW5nIHRoZSBob3N0IG5hbWUgb3IgZG90dGVkIG51bWVyaWNhbAorSVAgYWRkcmVzcy4gQSBudW1lcmljYWwgSVB2NiBhZGRyZXNzIG11c3QgYmUgd3JpdHRlbiB3aXRoaW4gW2JyYWNrZXRzXS4KKworVG8gc3BlY2lmeSBwb3J0IG51bWJlciBpbiB0aGlzIHN0cmluZywgYXBwZW5kIDpbcG9ydF0gdG8gdGhlIGVuZCBvZiB0aGUgaG9zdAorbmFtZS4gVGhlIHByb3h5J3MgcG9ydCBudW1iZXIgbWF5IG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIHNlcGFyYXRlCitvcHRpb24gXGZJQ1VSTE9QVF9QUk9YWVBPUlQoMylcZlAuIElmIG5vdCBzcGVjaWZpZWQsIGxpYmN1cmwgd2lsbCBkZWZhdWx0IHRvCit1c2luZyBwb3J0IDEwODAgZm9yIHByb3hpZXMuCisKK1RoZSBwcm94eSBzdHJpbmcgbWF5IGJlIHByZWZpeGVkIHdpdGggW3NjaGVtZV06Ly8gdG8gc3BlY2lmeSB3aGljaCBraW5kIG9mCitwcm94eSBpcyB1c2VkLiBVc2Ugc29ja3M0Oi8vLCBzb2NrczRhOi8vLCBzb2NrczU6Ly8gb3Igc29ja3M1aDovLyAodGhlIGxhc3QKK29uZSB0byBlbmFibGUgc29ja3M1IGFuZCBhc2tpbmcgdGhlIHByb3h5IHRvIGRvIHRoZSByZXNvbHZpbmcsIGFsc28ga25vd24gYXMKK1xmSUNVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUVcZlAgdHlwZSkgdG8gcmVxdWVzdCB0aGUgc3BlY2lmaWMgU09DS1MgdmVyc2lvbiB0bworYmUgdXNlZC4gTm8gc2NoZW1lIHNwZWNpZmllZCBvciBodHRwOi8vLCB3aWxsIGJlIHRyZWF0ZWQgYXMgSFRUUCBwcm94aWVzLgorCitXaXRob3V0IGEgc2NoZW1lIHByZWZpeCwgXGZJQ1VSTE9QVF9QUk9YWVRZUEUoMylcZlAgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQord2hpY2gga2luZCBvZiBwcm94eSB0aGUgc3RyaW5nIGlkZW50aWZpZXMuCisKK1doZW4geW91IHRlbGwgdGhlIGxpYnJhcnkgdG8gdXNlIGEgSFRUUCBwcm94eSwgbGliY3VybCB3aWxsIHRyYW5zcGFyZW50bHkKK2NvbnZlcnQgb3BlcmF0aW9ucyB0byBIVFRQIGV2ZW4gaWYgeW91IHNwZWNpZnkgYW4gRlRQIFVSTCBldGMuIFRoaXMgbWF5IGhhdmUKK2FuIGltcGFjdCBvbiB3aGF0IG90aGVyIGZlYXR1cmVzIG9mIHRoZSBsaWJyYXJ5IHlvdSBjYW4gdXNlLCBzdWNoIGFzCitcZklDVVJMT1BUX1FVT1RFKDMpXGZQIGFuZCBzaW1pbGFyIEZUUCBzcGVjaWZpY3MgdGhhdCBkb24ndCB3b3JrIHVubGVzcyB5b3UKK3R1bm5lbCB0aHJvdWdoIHRoZSBIVFRQIHByb3h5LiBTdWNoIHR1bm5lbGluZyBpcyBhY3RpdmF0ZWQgd2l0aAorXGZJQ1VSTE9QVF9IVFRQUFJPWFlUVU5ORUwoMylcZlAuCisKK2xpYmN1cmwgcmVzcGVjdHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBcZkJodHRwX3Byb3h5XGZQLCBcZkJmdHBfcHJveHlcZlAsCitcZkJhbGxfcHJveHlcZlAgZXRjLCBpZiBhbnkgb2YgdGhvc2UgYXJlIHNldC4gVGhlIFxmSUNVUkxPUFRfUFJPWFkoMylcZlAKK29wdGlvbiBkb2VzIGhvd2V2ZXIgb3ZlcnJpZGUgYW55IHBvc3NpYmx5IHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKK1NldHRpbmcgdGhlIHByb3h5IHN0cmluZyB0byAiIiAoYW4gZW1wdHkgc3RyaW5nKSB3aWxsIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUKK3VzZSBvZiBhIHByb3h5LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBmb3IgaXQuCisKK0EgcHJveHkgaG9zdCBzdHJpbmcgY2FuIGFsc28gaW5jbHVkZSBwcm90b2NvbCBzY2hlbWUgKGh0dHA6Ly8pIGFuZCBlbWJlZGRlZAordXNlciArIHBhc3N3b3JkLgorLlNIIERFRkFVTFQKK0RlZmF1bHQgaXMgTlVMTCwgbWVhbmluZyBubyBwcm94eSBpcyB1c2VkLgorCitXaGVuIHlvdSBzZXQgYSBob3N0IG5hbWUgdG8gdXNlLCBkbyBub3QgYXNzdW1lIHRoYXQgdGhlcmUncyBhbnkgcGFydGljdWxhcgorc2luZ2xlIHBvcnQgbnVtYmVyIHVzZWQgd2lkZWx5IGZvciBwcm94aWVzLiBTcGVjaWZ5IGl0IQorLlNIIFBST1RPQ09MUworQWxsIGV4Y2VwdCBmaWxlOi8vLiBOb3RlIHRoYXQgc29tZSBwcm90b2NvbHMgZG9uJ3QgZG8gdmVyeSB3ZWxsIG92ZXIgcHJveHkuCisuU0ggRVhBTVBMRQorVE9ETworLlNIIEFWQUlMQUJJTElUWQorU2luY2UgNy4xNC4xIHRoZSBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBjYW4gaW5jbHVkZSB0aGUgcHJvdG9jb2wKK3NjaGVtZS4KKworU2luY2UgNy4yMS43IHRoZSBwcm94eSBzdHJpbmcgc3VwcG9ydHMgdGhlIHNvY2tzIHByb3RvY29scyBhcyAic2NoZW1lcyIuCisKK1NpbmNlIDcuNTAuMiwgdW5zdXBwb3J0ZWQgc2NoZW1lcyBpbiBwcm94eSBzdHJpbmdzIGNhdXNlIGxpYmN1cmwgdG8gcmV0dXJuCitlcnJvci4KKy5TSCBSRVRVUk4gVkFMVUUKK1JldHVybnMgQ1VSTEVfT0sgaWYgcHJveGllcyBhcmUgc3VwcG9ydGVkLCBDVVJMRV9VTktOT1dOX09QVElPTiBpZiBub3QsIG9yCitDVVJMRV9PVVRfT0ZfTUVNT1JZIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgaGVhcCBzcGFjZS4KKy5TSCAiU0VFIEFMU08iCisuQlIgQ1VSTE9QVF9QUk9YWVBPUlQgIigzKSwgIiBDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCAiKDMpLCAiCisuQlIgQ1VSTE9QVF9QUk9YWVRZUEUgIigzKSIKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfU09DS1NfUFJPWFlUWVBFLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NPQ0tTX1BST1hZVFlQRS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDAyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NPQ0tTX1BST1hZVFlQRS4zCkBAIC0wLDAgKzEsNTUgQEAKKy5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworLlwiICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKy5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisuXCIgKgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKy5cIiAqCisuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworLlwiICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisuXCIgKgorLlwiICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisuXCIgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy5cIiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisuXCIgKgorLlwiICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorLlwiICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy5cIiAqCisuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy5cIgorLlRIIENVUkxPUFRfU09DS1NfUFJPWFlUWVBFIDMgIjE2IE5vdiAyMDE2IiAibGliY3VybCA3LjUyLjAiICJjdXJsX2Vhc3lfc2V0b3B0IG9wdGlvbnMiCisuU0ggTkFNRQorQ1VSTE9QVF9TT0NLU19QUk9YWVRZUEUgXC0gc29ja3MgcHJveHkgcHJvdG9jb2wgdHlwZQorLlNIIFNZTk9QU0lTCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKK0NVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1NPQ0tTX1BST1hZVFlQRSwgbG9uZyB0eXBlKTsKKy5TSCBERVNDUklQVElPTgorVE9ETzogTWFrZSB0aGlzIHRleHQgc3BlY2lmaWMgdG8gSFRUUFMgcHJveHkuIChBZGRlZCBpbiA3LlhYWCkKK1Bhc3MgYSBsb25nIHdpdGggdGhpcyBvcHRpb24gdG8gc2V0IHR5cGUgb2YgdGhlIHByb3h5LiBBdmFpbGFibGUgb3B0aW9ucyBmb3IKK3RoaXMgYXJlIFxmSUNVUkxQUk9YWV9IVFRQXGZQLCBcZklDVVJMUFJPWFlfSFRUUF8xXzBcZlAKK1xmSUNVUkxQUk9YWV9TT0NLUzRcZlAsIFxmSUNVUkxQUk9YWV9TT0NLUzVcZlAsIFxmSUNVUkxQUk9YWV9TT0NLUzRBXGZQIGFuZAorXGZJQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRVxmUC4gVGhlIEhUVFAgdHlwZSBpcyBkZWZhdWx0LgorCitJZiB5b3Ugc2V0IFxmSUNVUkxPUFRfUFJPWFlUWVBFKDMpXGZQIHRvIFxmSUNVUkxQUk9YWV9IVFRQXzFfMFxmUCwgaXQgd2lsbAorb25seSBhZmZlY3QgaG93IGxpYmN1cmwgc3BlYWtzIHRvIGEgcHJveHkgd2hlbiBDT05ORUNUIGlzIHVzZWQuIFRoZSBIVFRQCit2ZXJzaW9uIHVzZWQgZm9yICJyZWd1bGFyIiBIVFRQIHJlcXVlc3RzIGlzIGluc3RlYWQgY29udHJvbGxlZCB3aXRoCitcZklDVVJMT1BUX0hUVFBfVkVSU0lPTigzKVxmUC4KKworT2Z0ZW4gaXQgaXMgbW9yZSBjb252ZW5pZW50IHRvIHNwZWNpZnkgdGhlIHByb3h5IHR5cGUgd2l0aCB0aGUgc2NoZW1lIHBhcnQgb2YKK3RoZSBcZklDVVJMT1BUX1BST1hZKDMpXGZQIHN0cmluZy4KKy5TSCBERUZBVUxUCitDVVJMUFJPWFlfSFRUUAorLlNIIFBST1RPQ09MUworTW9zdAorLlNIIEVYQU1QTEUKK1RPRE8KKy5TSCBBVkFJTEFCSUxJVFkKK0Fsd2F5cworLlNIIFJFVFVSTiBWQUxVRQorUmV0dXJucyBDVVJMRV9PSworLlNIICJTRUUgQUxTTyIKKy5CUiBDVVJMT1BUX1BST1hZICIoMyksICIgQ1VSTE9QVF9QUk9YWVBPUlQgIigzKSwgIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9TU0xWRVJTSU9OLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NTTFZFUlNJT04uMwppbmRleCAyZjQwZTQ2Li43N2RmY2Q0IDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NTTFZFUlNJT04uMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1NTTFZFUlNJT04uMwpAQCAtNDgsNiArNDgsOCBAQAogVExTdjEuMSAoQWRkZWQgaW4gNy4zNC4wKQogLklQIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yCiBUTFN2MS4yIChBZGRlZCBpbiA3LjM0LjApCisuSVAgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzMKK1RMU3YxLjMgKEFkZGVkIGluIDcuNTIuMCkKIC5SRQogLlNIIERFRkFVTFQKIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUCmRpZmYgLS1naXQgYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1RDUF9OT0RFTEFZLjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1RDUF9OT0RFTEFZLjMKaW5kZXggZWZiMjU4Ni4uYmQxOWZiYSAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9UQ1BfTk9ERUxBWS4zCisrKyBiL2RvY3MvbGliY3VybC9vcHRzL0NVUkxPUFRfVENQX05PREVMQVkuMwpAQCAtNSw3ICs1LDcgQEAKIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKIC5cIiAqCi0uXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KIC5cIiAqCiAuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjAsNyArMjAsNyBAQAogLlwiICoKIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiCi0uVEggQ1VSTE9QVF9UQ1BfTk9ERUxBWSAzICIxOSBKdW4gMjAxNCIgImxpYmN1cmwgNy4zNy4wIiAiY3VybF9lYXN5X3NldG9wdCBvcHRpb25zIgorLlRIIENVUkxPUFRfVENQX05PREVMQVkgMyAiMzAgSnVuIDIwMTYiICJsaWJjdXJsIDcuNTAuMCIgImN1cmxfZWFzeV9zZXRvcHQgb3B0aW9ucyIKIC5TSCBOQU1FCiBDVVJMT1BUX1RDUF9OT0RFTEFZIFwtIHNldCB0aGUgVENQX05PREVMQVkgb3B0aW9uCiAuU0ggU1lOT1BTSVMKQEAgLTI5LDggKzI5LDggQEAKIENVUkxjb2RlIGN1cmxfZWFzeV9zZXRvcHQoQ1VSTCAqaGFuZGxlLCBDVVJMT1BUX1RDUF9OT0RFTEFZLCBsb25nIG5vZGVsYXkpOwogLlNIIERFU0NSSVBUSU9OCiBQYXNzIGEgbG9uZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBpcyB0byBiZSBzZXQgb3IgY2xlYXJlZAotKDEgPSBzZXQsIDAgPSBjbGVhcikuIFRoZSBvcHRpb24gaXMgY2xlYXJlZCBieSBkZWZhdWx0LiBUaGlzIHdpbGwgaGF2ZSBubwotZWZmZWN0IGFmdGVyIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLgorKDEgPSBzZXQsIDAgPSBjbGVhcikuIFRoZSBvcHRpb24gaXMgc2V0IGJ5IGRlZmF1bHQuIFRoaXMgd2lsbCBoYXZlIG5vIGVmZmVjdAorYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAKIFNldHRpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNhYmxlIFRDUCdzIE5hZ2xlIGFsZ29yaXRobS4gVGhlIHB1cnBvc2Ugb2YgdGhpcwogYWxnb3JpdGhtIGlzIHRvIHRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHNtYWxsIHBhY2tldHMgb24gdGhlIG5ldHdvcmsKQEAgLTQzLDEzICs0MywxMyBAQAogYW1vdW50cyBvZiBkYXRhIGF0IGEgdGltZSwgYW5kIGNhbiBjb250cmlidXRlIHRvIGNvbmdlc3Rpb24gb24gdGhlIG5ldHdvcmsgaWYKIG92ZXJkb25lLgogLlNIIERFRkFVTFQKLTAKKzEKIC5TSCBQUk9UT0NPTFMKIEFsbAogLlNIIEVYQU1QTEUKIFRPRE8KIC5TSCBBVkFJTEFCSUxJVFkKLUFsd2F5cworQWx3YXlzLiBUaGUgZGVmYXVsdCB3YXMgY2hhbmdlZCB0byAxIGZyb20gMCBpbiA3LjUwLjIuCiAuU0ggUkVUVVJOIFZBTFVFCiBSZXR1cm5zIENVUkxFX09LCiAuU0ggIlNFRSBBTFNPIgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvQ1VSTE9QVF9VTklYX1NPQ0tFVF9QQVRILjMgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1VOSVhfU09DS0VUX1BBVEguMwppbmRleCAyOTljM2NjLi5lZDJiOTFiIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1VOSVhfU09DS0VUX1BBVEguMworKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9DVVJMT1BUX1VOSVhfU09DS0VUX1BBVEguMwpAQCAtNSw3ICs1LDcgQEAKIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAuXCIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKIC5cIiAqCi0uXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorLlwiICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KIC5cIiAqCiAuXCIgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogLlwiICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzMsOSArMzMsOSBAQAogZW1wdHkgc3RyaW5nIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIGF0IHNvbWUgcG9pbnQsIGl0IHdpbGwgbm90IGRpc2FibGUgdXNlIG9mCiBVbml4IGRvbWFpbiBzb2NrZXRzLgogCi1XaGVuIGVuYWJsZWQsIGNVUkwgd2lsbCBjb25uZWN0IHRvIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgaW5zdGVhZCBvZgorV2hlbiBlbmFibGVkLCBjdXJsIHdpbGwgY29ubmVjdCB0byB0aGUgVW5peCBkb21haW4gc29ja2V0IGluc3RlYWQgb2YKIGVzdGFibGlzaGluZyBhIFRDUCBjb25uZWN0aW9uIHRvIGEgaG9zdC4gU2luY2Ugbm8gVENQIGNvbm5lY3Rpb24gaXMgY3JlYXRlZCwKLWNVUkwgZG9lcyBub3QgbmVlZCB0byByZXNvbHZlIHRoZSBETlMgaG9zdG5hbWUgaW4gdGhlIFVSTC4KK2N1cmwgZG9lcyBub3QgbmVlZCB0byByZXNvbHZlIHRoZSBETlMgaG9zdG5hbWUgaW4gdGhlIFVSTC4KIAogVGhlIG1heGltdW0gcGF0aCBsZW5ndGggb24gQ3lnd2luLCBMaW51eCBhbmQgU29sYXJpcyBpcyAxMDcuIE9uIG90aGVyIHBsYXRmb3JtcwogaXQgbWlnaHQgYmUgZXZlbiBsZXNzLgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJjdXJsL29wdHMvTWFrZWZpbGUuYW0gYi9kb2NzL2xpYmN1cmwvb3B0cy9NYWtlZmlsZS5hbQppbmRleCBhM2ZjMDY0Li4xZWY0ZjJiIDEwMDY0NAotLS0gYS9kb2NzL2xpYmN1cmwvb3B0cy9NYWtlZmlsZS5hbQorKysgYi9kb2NzL2xpYmN1cmwvb3B0cy9NYWtlZmlsZS5hbQpAQCAtNDksNiArNDksNyBAQAogIENVUkxJTkZPX1BSSU1BUllfSVAuMyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxJTkZPX1BSSU1BUllfUE9SVC4zICAgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxJTkZPX1BSSVZBVEUuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIENVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQuMyAgICAgICAgICAgICAgXAogIENVUkxJTkZPX1BST1hZQVVUSF9BVkFJTC4zICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxJTkZPX1JFRElSRUNUX0NPVU5ULjMgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxJTkZPX1JFRElSRUNUX1RJTUUuMyAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTcwLDYgKzE3MSw3IEBACiAgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLjMgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9JUFJFU09MVkUuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9JU1NVRVJDRVJULjMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IuMyAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9LRVlQQVNTV0QuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9LUkJMRVZFTC4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9MT0NBTFBPUlQuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMjIsNiArMjI0LDI0IEBACiAgQ1VSTE9QVF9QUk9YWVVTRVJQV0QuMyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9QUk9YWV9TRVJWSUNFX05BTUUuMyAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFLjMgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9DQUlORk8uMyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9DQVBBVEguMyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLjMgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0QuMyAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xDRVJULjMgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRS4zICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xLRVkuMyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFLjMgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xWRVJTSU9OLjMgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QuMyAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUy4zICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVC4zICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZUEVFUi4zICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JELjMgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEUuMyAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FLjMgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9TT0NLU19QUk9YWS4zICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgQ1VSTE9QVF9TT0NLU19QUk9YWVRZUEUuMyAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9QVVQuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9RVU9URS4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgQ1VSTE9QVF9SQU5ET01fRklMRS4zICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC00NTcsNiArNDc3LDcgQEAKICBDVVJMT1BUX0lPQ1RMRlVOQ1RJT04uaHRtbCAgICAgICAgICAgICAgICAgICAgIFwKICBDVVJMT1BUX0lQUkVTT0xWRS5odG1sICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBDVVJMT1BUX0lTU1VFUkNFUlQuaHRtbCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUi5odG1sICAgICAgICAgICAgIFwKICBDVVJMT1BUX0tFWVBBU1NXRC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBDVVJMT1BUX0tSQkxFVkVMLmh0bWwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBDVVJMT1BUX0xPQ0FMUE9SVC5odG1sICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTc0NCw2ICs3NjUsNyBAQAogIENVUkxPUFRfSU9DVExGVU5DVElPTi5wZGYgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxPUFRfSVBSRVNPTFZFLnBkZiAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxPUFRfSVNTVUVSQ0VSVC5wZGYgICAgICAgICAgICAgICAgICAgICAgICAgXAorIENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SLnBkZiAgICAgICAgICAgICAgXAogIENVUkxPUFRfS0VZUEFTU1dELnBkZiAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxPUFRfS1JCTEVWRUwucGRmICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIENVUkxPUFRfTE9DQUxQT1JULnBkZiAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODg2LDcgKzkwOCw3IEBACiAKIENMRUFORklMRVMgPSAkKEhUTUxQQUdFUykgJChQREZQQUdFUykKIAotRVhUUkFfRElTVCA9ICQobWFuX01BTlMpICQoSFRNTFBBR0VTKSAkKFBERlBBR0VTKQorRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCiBNQU4ySFRNTD0gcm9mZml0IC0tbWFuZGlyPS4gJDwgPiRACiAKIFNVRkZJWEVTID0gLjMgLmh0bWwKZGlmZiAtLWdpdCBhL2RvY3MvbGliY3VybC9zeW1ib2xzLWluLXZlcnNpb25zIGIvZG9jcy9saWJjdXJsL3N5bWJvbHMtaW4tdmVyc2lvbnMKaW5kZXggZDA1YTQ2OS4uMDgzMTc3NSAxMDA2NDQKLS0tIGEvZG9jcy9saWJjdXJsL3N5bWJvbHMtaW4tdmVyc2lvbnMKKysrIGIvZG9jcy9saWJjdXJsL3N5bWJvbHMtaW4tdmVyc2lvbnMKQEAgLTE0MCw2ICsxNDAsNyBAQAogQ1VSTEVfVVJMX01BTEZPUk1BVCAgICAgICAgICAgICA3LjEKIENVUkxFX1VSTF9NQUxGT1JNQVRfVVNFUiAgICAgICAgNy4xICAgICAgICAgICA3LjE3LjAKIENVUkxFX1VTRV9TU0xfRkFJTEVEICAgICAgICAgICAgNy4xNy4wCitDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFkgICAgICAgIDcuNTEuMAogQ1VSTEVfV1JJVEVfRVJST1IgICAgICAgICAgICAgICA3LjEKIENVUkxGSUxFVFlQRV9ERVZJQ0VfQkxPQ0sgICAgICAgNy4yMS4wCiBDVVJMRklMRVRZUEVfREVWSUNFX0NIQVIgICAgICAgIDcuMjEuMApAQCAtMjM4LDcgKzIzOSw5IEBACiBDVVJMSU5GT19QUklNQVJZX0lQICAgICAgICAgICAgIDcuMTkuMAogQ1VSTElORk9fUFJJTUFSWV9QT1JUICAgICAgICAgICA3LjIxLjAKIENVUkxJTkZPX1BSSVZBVEUgICAgICAgICAgICAgICAgNy4xMC4zCitDVVJMSU5GT19QUk9UT0NPTCAgICAgICAgICAgICAgIDcuNTIuMAogQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMICAgICAgICA3LjEwLjgKK0NVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQgNy41Mi4wCiBDVVJMSU5GT19SRURJUkVDVF9DT1VOVCAgICAgICAgIDcuOS43CiBDVVJMSU5GT19SRURJUkVDVF9USU1FICAgICAgICAgIDcuOS43CiBDVVJMSU5GT19SRURJUkVDVF9VUkwgICAgICAgICAgIDcuMTguMgpAQCAtMjQ4LDYgKzI1MSw3IEBACiBDVVJMSU5GT19SVFNQX0NTRVFfUkVDViAgICAgICAgIDcuMjAuMAogQ1VSTElORk9fUlRTUF9TRVJWRVJfQ1NFUSAgICAgICA3LjIwLjAKIENVUkxJTkZPX1JUU1BfU0VTU0lPTl9JRCAgICAgICAgNy4yMC4wCitDVVJMSU5GT19TQ0hFTUUgICAgICAgICAgICAgICAgIDcuNTIuMAogQ1VSTElORk9fU0laRV9ET1dOTE9BRCAgICAgICAgICA3LjQuMQogQ1VSTElORk9fU0laRV9VUExPQUQgICAgICAgICAgICA3LjQuMQogQ1VSTElORk9fU0xJU1QgICAgICAgICAgICAgICAgICA3LjEyLjMKQEAgLTQxMCw2ICs0MTQsNyBAQAogQ1VSTE9QVF9JUFJFU09MVkUgICAgICAgICAgICAgICA3LjEwLjgKIENVUkxPUFRfSVNTVUVSQ0VSVCAgICAgICAgICAgICAgNy4xOS4wCiBDVVJMT1BUX0tFWVBBU1NXRCAgICAgICAgICAgICAgIDcuMTcuMAorQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IgICA3LjUxLjAKIENVUkxPUFRfS1JCNExFVkVMICAgICAgICAgICAgICAgNy4zICAgICAgICAgICA3LjE3LjAKIENVUkxPUFRfS1JCTEVWRUwgICAgICAgICAgICAgICAgNy4xNi40CiBDVVJMT1BUX0xPQ0FMUE9SVCAgICAgICAgICAgICAgIDcuMTUuMgpAQCAtNDY2LDcgKzQ3MSwyMyBAQAogQ1VSTE9QVF9QUk9YWVRZUEUgICAgICAgICAgICAgICA3LjEwCiBDVVJMT1BUX1BST1hZVVNFUk5BTUUgICAgICAgICAgIDcuMTkuMQogQ1VSTE9QVF9QUk9YWVVTRVJQV0QgICAgICAgICAgICA3LjEKK0NVUkxPUFRfUFJPWFlfQ0FJTkZPICAgICAgICAgICAgNy41Mi4wCitDVVJMT1BUX1BST1hZX0NBUEFUSCAgICAgICAgICAgIDcuNTIuMAorQ1VSTE9QVF9QUk9YWV9DUkxGSUxFICAgICAgICAgICA3LjUyLjAKK0NVUkxPUFRfUFJPWFlfS0VZUEFTU1dEICAgICAgICAgNy41Mi4wCiBDVVJMT1BUX1BST1hZX1NFUlZJQ0VfTkFNRSAgICAgIDcuNDMuMAorQ1VSTE9QVF9QUk9YWV9TU0xDRVJUICAgICAgICAgICA3LjUyLjAKK0NVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUgICAgICAgNy41Mi4wCitDVVJMT1BUX1BST1hZX1NTTEtFWSAgICAgICAgICAgIDcuNTIuMAorQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFICAgICAgICA3LjUyLjAKK0NVUkxPUFRfUFJPWFlfU1NMVkVSU0lPTiAgICAgICAgNy41Mi4wCitDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCAgIDcuNTIuMAorQ1VSTE9QVF9QUk9YWV9TU0xfT1BUSU9OUyAgICAgICA3LjUyLjAKK0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QgICAgNy41Mi4wCitDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllQRUVSICAgIDcuNTIuMAorQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEICA3LjUyLjAKK0NVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFICAgICAgNy41Mi4wCitDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUgIDcuNTIuMAogQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFICAgICA3LjE4LjAKIENVUkxPUFRfUFVUICAgICAgICAgICAgICAgICAgICAgNy4xCiBDVVJMT1BUX1FVT1RFICAgICAgICAgICAgICAgICAgIDcuMQpAQCAtNDk2LDYgKzUxNyw4IEBACiBDVVJMT1BUX1NPQ0tPUFRGVU5DVElPTiAgICAgICAgIDcuMTYuMAogQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX05FQyAgICAgICA3LjE5LjQKIENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFICAgNy4xOS40ICAgICAgICA3LjQ5LjAKK0NVUkxPUFRfU09DS1NfUFJPWFkgICAgICAgICAgICAgNy41Mi4wCitDVVJMT1BUX1NPQ0tTX1BST1hZVFlQRSAgICAgICAgIDcuNTIuMAogQ1VSTE9QVF9TT1VSQ0VfSE9TVCAgICAgICAgICAgICA3LjEyLjEgICAgICAgIC0gICAgICAgICAgIDcuMTUuNQogQ1VSTE9QVF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA3LjEyLjEgICAgICAgIC0gICAgICAgICAgIDcuMTUuNQogQ1VSTE9QVF9TT1VSQ0VfUE9SVCAgICAgICAgICAgICA3LjEyLjEgICAgICAgIC0gICAgICAgICAgIDcuMTUuNQpAQCAtNjA5LDYgKzYzMiw3IEBACiBDVVJMUFJPVE9fVEZUUCAgICAgICAgICAgICAgICAgIDcuMTkuNAogQ1VSTFBST1hZX0hUVFAgICAgICAgICAgICAgICAgICA3LjEwCiBDVVJMUFJPWFlfSFRUUF8xXzAgICAgICAgICAgICAgIDcuMTkuNAorQ1VSTFBST1hZX0hUVFBTICAgICAgICAgICAgICAgICA3LjUyLjAKIENVUkxQUk9YWV9TT0NLUzQgICAgICAgICAgICAgICAgNy4xMAogQ1VSTFBST1hZX1NPQ0tTNEEgICAgICAgICAgICAgICA3LjE4LjAKIENVUkxQUk9YWV9TT0NLUzUgICAgICAgICAgICAgICAgNy4xMApAQCAtNzYzLDYgKzc4Nyw3IEBACiBDVVJMX1NPQ0tPUFRfQUxSRUFEWV9DT05ORUNURUQgIDcuMjEuNQogQ1VSTF9TT0NLT1BUX0VSUk9SICAgICAgICAgICAgICA3LjIxLjUKIENVUkxfU09DS09QVF9PSyAgICAgICAgICAgICAgICAgNy4yMS41CitDVVJMX1NUUklDVEVSICAgICAgICAgICAgICAgICAgIDcuNTAuMgogQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgICAgICAgICA3LjkuMgogQ1VSTF9TU0xWRVJTSU9OX1NTTHYyICAgICAgICAgICA3LjkuMgogQ1VSTF9TU0xWRVJTSU9OX1NTTHYzICAgICAgICAgICA3LjkuMgpAQCAtNzcwLDYgKzc5NSw3IEBACiBDVVJMX1NTTFZFUlNJT05fVExTdjFfMCAgICAgICAgIDcuMzQuMAogQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgICAgICAgICA3LjM0LjAKIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yICAgICAgICAgNy4zNC4wCitDVVJMX1NTTFZFUlNJT05fVExTdjFfMyAgICAgICAgIDcuNTIuMAogQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFICAgICAgICA3LjkuNwogQ1VSTF9USU1FQ09ORF9JRlVOTU9EU0lOQ0UgICAgICA3LjkuNwogQ1VSTF9USU1FQ09ORF9MQVNUTU9EICAgICAgICAgICA3LjkuNwpkaWZmIC0tZ2l0IGEvZG9jcy9tay1jYS1idW5kbGUuMSBiL2RvY3MvbWstY2EtYnVuZGxlLjEKaW5kZXggMDE3YmI4Mi4uYzhmNTE3NyAxMDA2NDQKLS0tIGEvZG9jcy9tay1jYS1idW5kbGUuMQorKysgYi9kb2NzL21rLWNhLWJ1bmRsZS4xCkBAIC01LDcgKzUsNyBAQAogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogLlwiICoKLS5cIiAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogLlwiICoKIC5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMCwxOCArMjAsMTggQEAKIC5cIiAqCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIgotLlRIIG1rLWNhLWJ1bmRsZSAxICI1IEphbiAyMDEzIiAidmVyc2lvbiAxLjIwIiAibWstY2EtYnVuZGxlIG1hbnVhbCIKKy5USCBtay1jYS1idW5kbGUgMSAiMjQgT2N0IDIwMTYiICJ2ZXJzaW9uIDEuMjciICJtay1jYS1idW5kbGUgbWFudWFsIgogLlNIIE5BTUUKIG1rLWNhLWJ1bmRsZSBcLSBjb252ZXJ0IG1vemlsbGEncyBjZXJ0ZGF0YS50eHQgdG8gUEVNIGZvcm1hdAogLlNIIFNZTk9QU0lTCi1tay1jYS1idW5kbGUgW2JpbG5wcXN0dXZdCittay1jYS1idW5kbGUgW29wdGlvbnNdCiAuSSBbb3V0cHV0ZmlsZV0KIC5TSCBERVNDUklQVElPTgogVGhlIG1rLWNhLWJ1bmRsZSB0b29sIGRvd25sb2FkcyB0aGUgY2VydGRhdGEudHh0IGZpbGUgZnJvbSBNb3ppbGxhJ3Mgc291cmNlCi10cmVlIG92ZXIgSFRUUCwgdGhlbiBwYXJzZXMgY2VydGRhdGEudHh0IGFuZCBleHRyYWN0cyBjZXJ0aWZpY2F0ZXMKLWludG8gUEVNIGZvcm1hdC4gIEJ5IGRlZmF1bHQsIG9ubHkgQ0Egcm9vdCBjZXJ0aWZpY2F0ZXMgdHJ1c3RlZCB0byBpc3N1ZSBTU0wKLXNlcnZlciBhdXRoZW50aWNhdGlvbiBjZXJ0aWZpY2F0ZXMgYXJlIGV4dHJhY3RlZC4gVGhlc2UgYXJlIHRoZW4gcHJvY2Vzc2VkIHdpdGgKLXRoZSBPcGVuU1NMIGNvbW1hbmRsaW5lIHRvb2wgdG8gcHJvZHVjZSB0aGUgZmluYWwgY2EtYnVuZGxlIGZpbGUuCit0cmVlIG92ZXIgSFRUUFMsIHRoZW4gcGFyc2VzIGNlcnRkYXRhLnR4dCBhbmQgZXh0cmFjdHMgY2VydGlmaWNhdGVzIGludG8gUEVNCitmb3JtYXQuIEJ5IGRlZmF1bHQsIG9ubHkgQ0Egcm9vdCBjZXJ0aWZpY2F0ZXMgdHJ1c3RlZCB0byBpc3N1ZSBTU0wgc2VydmVyCithdXRoZW50aWNhdGlvbiBjZXJ0aWZpY2F0ZXMgYXJlIGV4dHJhY3RlZC4gVGhlc2UgYXJlIHRoZW4gcHJvY2Vzc2VkIHdpdGggdGhlCitPcGVuU1NMIGNvbW1hbmRsaW5lIHRvb2wgdG8gcHJvZHVjZSB0aGUgZmluYWwgY2EtYnVuZGxlIGZpbGUuCiAKIFRoZSBkZWZhdWx0IFxmSW91dHB1dGZpbGVcZlAgbmFtZSBpcyBcZkJjYS1idW5kbGUuY3J0XGZQLiBCeSBzZXR0aW5nIGl0IHRvICctJwogKGEgc2luZ2xlIGRhc2gpIHlvdSB3aWxsIGdldCB0aGUgb3V0cHV0IHNlbnQgdG8gU1RET1VUIGluc3RlYWQgb2YgYSBmaWxlLgpAQCAtNTEsOCArNTEsMTcgQEAKIGZvcmNlIHJlYnVpbGQgZXZlbiBpZiBjZXJ0ZGF0YS50eHQgaXMgY3VycmVudCAoQWRkZWQgaW4gdmVyc2lvbiAxLjE3KQogLklQIC1pCiBwcmludCB2ZXJzaW9uIGluZm8gYWJvdXQgdXNlZCBtb2R1bGVzCisuSVAgLWsKK0FsbG93IGluc2VjdXJlIGRhdGEgdHJhbnNmZXIuIEJ5IGRlZmF1bHQgKHNpbmNlIDEuMjcpIHRoaXMgY29tbWFuZCB3aWxsIGZhaWwKK2lmIHRoZSBIVFRQUyB0cmFuc2ZlciBmYWlscy4gVGhpcyBvdmVycmlkZXMgdGhhdCBkZWNpc2lvbiAoYW5kIG9wZW5zIGZvcgorbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcykuCiAuSVAgLWwKIHByaW50IGxpY2Vuc2UgaW5mbyBhYm91dCBjZXJ0ZGF0YS50eHQKKy5JUCAtbQorKEFkZGVkIGluIDEuMjYpIEluY2x1ZGUgbWV0YSBkYXRhIGNvbW1lbnRzIGluIHRoZSBvdXRwdXQuIFRoZSBtZXRhIGRhdGEgaXMKK3NwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY2VydGlmaWNhdGUgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIG9yaWdpbmFsCitmaWxlIGFzIGNvbW1lbnRzIGFuZCB1c2luZyB0aGlzIG9wdGlvbiB3aWxsIG1ha2UgdGhvc2UgY29tbWVudHMgZ2V0IHBhc3NlZCBvbgordG8gdGhlIG91dHB1dCBmaWxlLiBUaGUgbWV0YSBkYXRhIGlzIG5vdCBwYXJzZWQgaW4gYW55IHdheSBieSBtay1jYS1idW5kbGUuCiAuSVAgLW4KIG5vIGRvd25sb2FkIG9mIGNlcnRkYXRhLnR4dCAodG8gdXNlIGV4aXN0aW5nKQogLklQICItcCBbcHVycG9zZXNdOltsZXZlbHNdIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9SRUFETUUgYi9pbmNsdWRlL1JFQURNRQppbmRleCAzZTUyYTFkLi42ZWI3M2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL1JFQURNRQorKysgYi9pbmNsdWRlL1JFQURNRQpAQCAtMzcsNyArMzcsNyBAQAogICBhbHNvIGRpc3RyaWJ1dGUgYWxvbmcgd2l0aCBpdCB0aGUgZ2VuZXJhdGVkIGN1cmwvY3VybGJ1aWxkLmggd2hpY2ggaGFzIGJlZW4KICAgdXNlZCB0byBjb21waWxlIGl0LiBPdGhlcndpc2UgdGhlIGxpYnJhcnkgd2lsbCBiZSBvZiBubyB1c2UgZm9yIHRoZSB1c2VycyBvZgogICB0aGUgbGlicmFyeSB0aGF0IHlvdSBoYXZlIGJ1aWx0LiBJdCBpcyBfeW91cl8gcmVzcG9uc2liaWxpdHkgdG8gcHJvdmlkZSB0aGlzCi0gIGZpbGUuIE5vIG9uZSBhdCB0aGUgY1VSTCBwcm9qZWN0IGNhbiBrbm93IGhvdyB5b3UgaGF2ZSBidWlsdCB0aGUgbGlicmFyeS4KKyAgZmlsZS4gTm8gb25lIGF0IHRoZSBjdXJsIHByb2plY3QgY2FuIGtub3cgaG93IHlvdSBoYXZlIGJ1aWx0IHRoZSBsaWJyYXJ5LgogCiAqIEZpbGUgY3VybC9jdXJsYnVpbGQuaCBpbmNsdWRlcyBwbGF0Zm9ybSBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbnQgaW5mbywKICAgYW5kIG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IGFueW9uZS4gQ29uZmlndXJlIHNjcmlwdCBnZW5lcmF0ZXMgaXQgZm9yIHlvdS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3VybC9jdXJsLmggYi9pbmNsdWRlL2N1cmwvY3VybC5oCmluZGV4IDdmZDZkMWYuLmRmMjkxNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3VybC9jdXJsLmgKKysrIGIvaW5jbHVkZS9jdXJsL2N1cmwuaApAQCAtMzAsNiArMzAsMTAgQEAKICAqICAgaHR0cHM6Ly9jb29sLmhheHguc2UvbWFpbG1hbi9saXN0aW5mby9jdXJsLWxpYnJhcnkvCiAgKi8KIAorI2lmZGVmIENVUkxfTk9fT0xESUVTCisjZGVmaW5lIENVUkxfU1RSSUNURVIKKyNlbmRpZgorCiAjaW5jbHVkZSAiY3VybHZlci5oIiAgICAgICAgIC8qIGxpYmN1cmwgdmVyc2lvbiBkZWZpbmVzICAgKi8KICNpbmNsdWRlICJjdXJsYnVpbGQuaCIgICAgICAgLyogbGliY3VybCBidWlsZCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgImN1cmxydWxlcy5oIiAgICAgICAvKiBsaWJjdXJsIHJ1bGVzIGVuZm9yY2VtZW50ICovCkBAIC0xMzksNyArMTQzLDcgQEAKICAgY2hhciAqYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYWxsb2NhdGVkIGJ1ZmZlciBjb250ZW50cyAqLwogICBsb25nIGJ1ZmZlcmxlbmd0aDsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlciBmaWVsZCAqLwogICBjaGFyICpjb250ZW50dHlwZTsgICAgICAgICAgICAgICAgLyogQ29udGVudC1UeXBlICovCi0gIHN0cnVjdCBjdXJsX3NsaXN0KiBjb250ZW50aGVhZGVyOyAvKiBsaXN0IG9mIGV4dHJhIGhlYWRlcnMgZm9yIHRoaXMgZm9ybSAqLworICBzdHJ1Y3QgY3VybF9zbGlzdCAqY29udGVudGhlYWRlcjsgLyogbGlzdCBvZiBleHRyYSBoZWFkZXJzIGZvciB0aGlzIGZvcm0gKi8KICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKm1vcmU7ICAgICAgIC8qIGlmIG9uZSBmaWVsZCBuYW1lIGhhcyBtb3JlIHRoYW4gb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGlzIGxpbmsgc2hvdWxkIGxpbmsgdG8gZm9sbG93aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyAqLwpAQCAtMjY2LDcgKzI3MCw3IEBACiAgIHVuc2lnbmVkIGludCBmbGFnczsKIAogICAvKiB1c2VkIGludGVybmFsbHkgKi8KLSAgY2hhciAqIGJfZGF0YTsKKyAgY2hhciAqYl9kYXRhOwogICBzaXplX3QgYl9zaXplOwogICBzaXplX3QgYl91c2VkOwogfTsKQEAgLTQzMSw3ICs0MzUsNyBAQAogICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFksICAgLyogNSAqLwogICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCwgICAgLyogNiAqLwogICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QsICAgICAgICAgLyogNyAqLwotICBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZLCAgLyogOCAqLworICBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFksICAgICAgLyogOCAqLwogICBDVVJMRV9SRU1PVEVfQUNDRVNTX0RFTklFRCwgICAgLyogOSBhIHNlcnZpY2Ugd2FzIGRlbmllZCBieSB0aGUgc2VydmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gbGFjayBvZiBhY2Nlc3MgLSB3aGVuIGxvZ2luIGZhaWxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCByZXR1cm5lZC4gKi8KQEAgLTU2Miw2ICs1NjYsNyBAQAogCiAvKiAgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIG5hbWVzICovCiAjZGVmaW5lIENVUkxPUFRfRU5DT0RJTkcgQ1VSTE9QVF9BQ0NFUFRfRU5DT0RJTkcKKyNkZWZpbmUgQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFkKIAogLyogVGhlIGZvbGxvd2luZyB3ZXJlIGFkZGVkIGluIDcuMjEuNSwgQXByaWwgMjAxMSAqLwogI2RlZmluZSBDVVJMRV9VTktOT1dOX1RFTE5FVF9PUFRJT04gQ1VSTEVfVU5LTk9XTl9PUFRJT04KQEAgLTYzNSw2ICs2NDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVCBIVFRQLzEuMSAqLwogICBDVVJMUFJPWFlfSFRUUF8xXzAgPSAxLCAgIC8qIGFkZGVkIGluIDcuMTkuNCwgZm9yY2UgdG8gdXNlIENPTk5FQ1QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQLzEuMCAgKi8KKyAgQ1VSTFBST1hZX0hUVFBTID0gMiwgLyogYWRkZWQgaW4gVEJEICovCiAgIENVUkxQUk9YWV9TT0NLUzQgPSA0LCAvKiBzdXBwb3J0IGFkZGVkIGluIDcuMTUuMiwgZW51bSBleGlzdGVkIGFscmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDcuMTAgKi8KICAgQ1VSTFBST1hZX1NPQ0tTNSA9IDUsIC8qIGFkZGVkIGluIDcuMTAgKi8KQEAgLTEyMDEsNyArMTIwNyw4IEBACiAgIENJTklUKFNIQVJFLCBPQkpFQ1RQT0lOVCwgMTAwKSwKIAogICAvKiBpbmRpY2F0ZXMgdHlwZSBvZiBwcm94eS4gYWNjZXB0ZWQgdmFsdWVzIGFyZSBDVVJMUFJPWFlfSFRUUCAoZGVmYXVsdCksCi0gICAgIENVUkxQUk9YWV9TT0NLUzQsIENVUkxQUk9YWV9TT0NLUzRBIGFuZCBDVVJMUFJPWFlfU09DS1M1LiAqLworICAgICBDVVJMUFJPWFlfSFRUUFMsIENVUkxQUk9YWV9TT0NLUzQsIENVUkxQUk9YWV9TT0NLUzRBIGFuZAorICAgICBDVVJMUFJPWFlfU09DS1M1LiAqLwogICBDSU5JVChQUk9YWVRZUEUsIExPTkcsIDEwMSksCiAKICAgLyogU2V0IHRoZSBBY2NlcHQtRW5jb2Rpbmcgc3RyaW5nLiBVc2UgdGhpcyB0byB0ZWxsIGEgc2VydmVyIHlvdSB3b3VsZCBsaWtlCkBAIC0xNjk1LDYgKzE3MDIsNzQgQEAKICAgLyogU2V0IFRDUCBGYXN0IE9wZW4gKi8KICAgQ0lOSVQoVENQX0ZBU1RPUEVOLCBMT05HLCAyNDQpLAogCisgIC8qIENvbnRpbnVlIHRvIHNlbmQgZGF0YSBpZiB0aGUgc2VydmVyIHJlc3BvbmRzIGVhcmx5IHdpdGggYW4KKyAgICogSFRUUCBzdGF0dXMgY29kZSA+PSAzMDAgKi8KKyAgQ0lOSVQoS0VFUF9TRU5ESU5HX09OX0VSUk9SLCBMT05HLCAyNDUpLAorCisgIC8qIFRoZSBDQXBhdGggb3IgQ0FmaWxlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHByb3h5IGNlcnRpZmljYXRlCisgICAgIHRoaXMgb3B0aW9uIGlzIHVzZWQgb25seSBpZiBQUk9YWV9TU0xfVkVSSUZZUEVFUiBpcyB0cnVlICovCisgIENJTklUKFBST1hZX0NBSU5GTywgU1RSSU5HUE9JTlQsIDI0NiksCisKKyAgLyogVGhlIENBcGF0aCBkaXJlY3RvcnkgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcHJveHkgY2VydGlmaWNhdGUKKyAgICAgdGhpcyBvcHRpb24gaXMgdXNlZCBvbmx5IGlmIFBST1hZX1NTTF9WRVJJRllQRUVSIGlzIHRydWUgKi8KKyAgQ0lOSVQoUFJPWFlfQ0FQQVRILCBTVFJJTkdQT0lOVCwgMjQ3KSwKKworICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgcHJveHkgaW4gc3NsIGhhbmRzaGFrZSwKKyAgICAgc2V0IDEgdG8gdmVyaWZ5LiAqLworICBDSU5JVChQUk9YWV9TU0xfVkVSSUZZUEVFUiwgTE9ORywgMjQ4KSwKKworICAvKiBTZXQgaWYgd2Ugc2hvdWxkIHZlcmlmeSB0aGUgQ29tbW9uIG5hbWUgZnJvbSB0aGUgcHJveHkgY2VydGlmaWNhdGUgaW4gc3NsCisgICAqIGhhbmRzaGFrZSwgc2V0IDEgdG8gY2hlY2sgZXhpc3RlbmNlLCAyIHRvIGVuc3VyZSB0aGF0IGl0IG1hdGNoZXMKKyAgICogdGhlIHByb3ZpZGVkIGhvc3RuYW1lLiAqLworICBDSU5JVChQUk9YWV9TU0xfVkVSSUZZSE9TVCwgTE9ORywgMjQ5KSwKKworICAvKiBXaGF0IHZlcnNpb24gdG8gc3BlY2lmaWNhbGx5IHRyeSB0byB1c2UgZm9yIHByb3h5LgorICAgICBTZWUgQ1VSTF9TU0xWRVJTSU9OIGRlZmluZXMgYmVsb3cuICovCisgIENJTklUKFBST1hZX1NTTFZFUlNJT04sIExPTkcsIDI1MCksCisKKyAgLyogU2V0IGEgdXNlcm5hbWUgZm9yIGF1dGhlbnRpY2F0ZWQgVExTIGZvciBwcm94eSAqLworICBDSU5JVChQUk9YWV9UTFNBVVRIX1VTRVJOQU1FLCBTVFJJTkdQT0lOVCwgMjUxKSwKKworICAvKiBTZXQgYSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRlZCBUTFMgZm9yIHByb3h5ICovCisgIENJTklUKFBST1hZX1RMU0FVVEhfUEFTU1dPUkQsIFNUUklOR1BPSU5ULCAyNTIpLAorCisgIC8qIFNldCBhdXRoZW50aWNhdGlvbiB0eXBlIGZvciBhdXRoZW50aWNhdGVkIFRMUyBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfVExTQVVUSF9UWVBFLCBTVFJJTkdQT0lOVCwgMjUzKSwKKworICAvKiBuYW1lIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1jZXJ0aWZpY2F0ZSBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfU1NMQ0VSVCwgU1RSSU5HUE9JTlQsIDI1NCksCisKKyAgLyogdHlwZSBvZiB0aGUgZmlsZSBrZWVwaW5nIHlvdXIgU1NMLWNlcnRpZmljYXRlICgiREVSIiwgIlBFTSIsICJFTkciKSBmb3IKKyAgICAgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfU1NMQ0VSVFRZUEUsIFNUUklOR1BPSU5ULCAyNTUpLAorCisgIC8qIG5hbWUgb2YgdGhlIGZpbGUga2VlcGluZyB5b3VyIHByaXZhdGUgU1NMLWtleSBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfU1NMS0VZLCBTVFJJTkdQT0lOVCwgMjU2KSwKKworICAvKiB0eXBlIG9mIHRoZSBmaWxlIGtlZXBpbmcgeW91ciBwcml2YXRlIFNTTC1rZXkgKCJERVIiLCAiUEVNIiwgIkVORyIpIGZvcgorICAgICBwcm94eSAqLworICBDSU5JVChQUk9YWV9TU0xLRVlUWVBFLCBTVFJJTkdQT0lOVCwgMjU3KSwKKworICAvKiBwYXNzd29yZCBmb3IgdGhlIFNTTCBwcml2YXRlIGtleSBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfS0VZUEFTU1dELCBTVFJJTkdQT0lOVCwgMjU4KSwKKworICAvKiBTcGVjaWZ5IHdoaWNoIFNTTCBjaXBoZXJzIHRvIHVzZSBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfU1NMX0NJUEhFUl9MSVNULCBTVFJJTkdQT0lOVCwgMjU5KSwKKworICAvKiBDUkwgZmlsZSBmb3IgcHJveHkgKi8KKyAgQ0lOSVQoUFJPWFlfQ1JMRklMRSwgU1RSSU5HUE9JTlQsIDI2MCksCisKKyAgLyogRW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgU1NMIGZlYXR1cmVzIHdpdGggYSBiaXRtYXNrIGZvciBwcm94eSwgc2VlCisgICAgIENVUkxTU0xPUFRfKiAqLworICBDSU5JVChQUk9YWV9TU0xfT1BUSU9OUywgTE9ORywgMjYxKSwKKworICAvKiBOYW1lIG9mIHNvY2tzIHByb3h5IHRvIHVzZS4gKi8KKyAgQ0lOSVQoU09DS1NfUFJPWFksIFNUUklOR1BPSU5ULCAyNjIpLAorCisgIC8qIGluZGljYXRlcyB0eXBlIG9mIHByb3h5LiBhY2NlcHRlZCB2YWx1ZXMgYXJlIENVUkxQUk9YWV9TT0NLUzQsCisgICAgIENVUkxQUk9YWV9TT0NLUzRBIGFuZCBDVVJMUFJPWFlfU09DS1M1LiAqLworICBDSU5JVChTT0NLU19QUk9YWVRZUEUsIExPTkcsIDI2MyksCisKICAgQ1VSTE9QVF9MQVNURU5UUlkgLyogdGhlIGxhc3QgdW51c2VkICovCiB9IENVUkxvcHRpb247CiAKQEAgLTE3OTYsNiArMTg3MSw3IEBACiAgIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wLAogICBDVVJMX1NTTFZFUlNJT05fVExTdjFfMSwKICAgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIsCisgIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zLAogCiAgIENVUkxfU1NMVkVSU0lPTl9MQVNUIC8qIG5ldmVyIHVzZSwga2VlcCBsYXN0ICovCiB9OwpAQCAtMjIwMCw5ICsyMjc2LDEyIEBACiAgIENVUkxJTkZPX0FDVElWRVNPQ0tFVCAgICAgPSBDVVJMSU5GT19TT0NLRVQgKyA0NCwKICAgQ1VSTElORk9fVExTX1NTTF9QVFIgICAgICA9IENVUkxJTkZPX1NMSVNUICArIDQ1LAogICBDVVJMSU5GT19IVFRQX1ZFUlNJT04gICAgID0gQ1VSTElORk9fTE9ORyAgICsgNDYsCisgIENVUkxJTkZPX1BST1hZX1NTTF9WRVJJRllSRVNVTFQgPSBDVVJMSU5GT19MT05HICsgNDcsCisgIENVUkxJTkZPX1BST1RPQ09MICAgICAgICAgPSBDVVJMSU5GT19MT05HICAgKyA0OCwKKyAgQ1VSTElORk9fU0NIRU1FICAgICAgICAgICA9IENVUkxJTkZPX1NUUklORyArIDQ5LAogICAvKiBGaWxsIGluIG5ldyBlbnRyaWVzIGJlbG93IGhlcmUhICovCiAKLSAgQ1VSTElORk9fTEFTVE9ORSAgICAgICAgICA9IDQ2CisgIENVUkxJTkZPX0xBU1RPTkUgICAgICAgICAgPSA0OQogfSBDVVJMSU5GTzsKIAogLyogQ1VSTElORk9fUkVTUE9OU0VfQ09ERSBpcyB0aGUgbmV3IG5hbWUgZm9yIHRoZSBvcHRpb24gcHJldmlvdXNseSBrbm93biBhcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaCBiL2luY2x1ZGUvY3VybC9jdXJsdmVyLmgKaW5kZXggODE1NjNmMi4uMTBmMDdkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jdXJsL2N1cmx2ZXIuaAorKysgYi9pbmNsdWRlL2N1cmwvY3VybHZlci5oCkBAIC0zMCwxMyArMzAsMTMgQEAKIAogLyogVGhpcyBpcyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYmN1cmwgcGFja2FnZSBmcm9tIHdoaWNoIHRoaXMgaGVhZGVyCiAgICBmaWxlIG9yaWdpbnM6ICovCi0jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiNy41MC4xLURFViIKKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OICI3LjUyLjAtREVWIgogCiAvKiBUaGUgbnVtZXJpYyB2ZXJzaW9uIG51bWJlciBpcyBhbHNvIGF2YWlsYWJsZSAiaW4gcGFydHMiIGJ5IHVzaW5nIHRoZXNlCiAgICBkZWZpbmVzOiAqLwogI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUFKT1IgNwotI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgNTAKLSNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX1BBVENIIDEKKyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01JTk9SIDUyCisjZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAwCiAKIC8qIFRoaXMgaXMgdGhlIG51bWVyaWMgdmVyc2lvbiBvZiB0aGUgbGliY3VybCB2ZXJzaW9uIG51bWJlciwgbWVhbnQgZm9yIGVhc2llcgogICAgcGFyc2luZyBhbmQgY29tcGFyaW9ucyBieSBwcm9ncmFtcy4gVGhlIExJQkNVUkxfVkVSU0lPTl9OVU0gZGVmaW5lIHdpbGwKQEAgLTU3LDcgKzU3LDcgQEAKICAgIENVUkxfVkVSU0lPTl9CSVRTKCkgbWFjcm8gc2luY2UgY3VybCdzIG93biBjb25maWd1cmUgc2NyaXB0IGdyZXBzIGZvciBpdAogICAgYW5kIG5lZWRzIGl0IHRvIGNvbnRhaW4gdGhlIGZ1bGwgbnVtYmVyLgogKi8KLSNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX05VTSAweDA3MzIwMQorI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTlVNIDB4MDczNDAwCiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBkYXRlIGFuZCB0aW1lIHdoZW4gdGhlIGZ1bGwgc291cmNlIHBhY2thZ2Ugd2FzIGNyZWF0ZWQuIFRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jdXJsL2Vhc3kuaCBiL2luY2x1ZGUvY3VybC9lYXN5LmgKaW5kZXggYWZjNzY2Yy4uNzUyYzUwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jdXJsL2Vhc3kuaAorKysgYi9pbmNsdWRlL2N1cmwvZWFzeS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDgsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01OCw3ICs1OCw3IEBACiAgKiBjdXJsX2Vhc3lfZHVwaGFuZGxlKCkgZm9yIGVhY2ggbmV3IHRocmVhZCB0byBhdm9pZCBhIHNlcmllcyBvZiBpZGVudGljYWwKICAqIGN1cmxfZWFzeV9zZXRvcHQoKSBpbnZva2VzIGluIGV2ZXJ5IHRocmVhZC4KICAqLwotQ1VSTF9FWFRFUk4gQ1VSTCogY3VybF9lYXN5X2R1cGhhbmRsZShDVVJMICpjdXJsKTsKK0NVUkxfRVhURVJOIENVUkwgKmN1cmxfZWFzeV9kdXBoYW5kbGUoQ1VSTCAqY3VybCk7CiAKIC8qCiAgKiBOQU1FIGN1cmxfZWFzeV9yZXNldCgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oIGIvaW5jbHVkZS9jdXJsL3R5cGVjaGVjay1nY2MuaAppbmRleCA2ZWM4YmNmLi5kMjBjMTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2N1cmwvdHlwZWNoZWNrLWdjYy5oCisrKyBiL2luY2x1ZGUvY3VybC90eXBlY2hlY2stZ2NjLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF9vZmZfdCBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfc3RyaW5nLAogICAgICAgICAgICAgICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgIgotICAgICAgICAgICAgICAic3RyaW5nIChjaGFyKiBvciBjaGFyW10pIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIKKyAgICAgICAgICAgICAgInN0cmluZyAoJ2NoYXIgKicgb3IgY2hhcltdKSBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iCiAgICkKIF9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX3dyaXRlX2NhbGxiYWNrLAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgY3VybF93cml0ZV9jYWxsYmFjayBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQpAQCAtMTgyLDI0ICsxODIsMjUgQEAKICAgICAgICAgICAgICAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICIKICAgICAgICAgICAgICAgImNoYXIgYnVmZmVyIG9mIENVUkxfRVJST1JfU0laRSBhcyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfRklMRSwKLSAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIEZJTEUqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnRklMRSAqJyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfcG9zdGZpZWxkcywKLSAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhIHZvaWQqIG9yIGNoYXIqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCisgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAndm9pZCAqJyBvciAnY2hhciAqJyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfY3VybF9odHRwb3N0LAotICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgc3RydWN0IGN1cmxfaHR0cHBvc3QqIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiIpCisgICAgICAgICAgICAgICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSAnc3RydWN0IGN1cmxfaHR0cHBvc3QgKicgIgorICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKIF9DVVJMX1dBUk5JTkcoX2N1cmxfZWFzeV9zZXRvcHRfZXJyX2N1cmxfc2xpc3QsCi0gICJjdXJsX2Vhc3lfc2V0b3B0IGV4cGVjdHMgYSBzdHJ1Y3QgY3VybF9zbGlzdCogYXJndW1lbnQgZm9yIHRoaXMgb3B0aW9uIikKKyAgImN1cmxfZWFzeV9zZXRvcHQgZXhwZWN0cyBhICdzdHJ1Y3QgY3VybF9zbGlzdCAqJyBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X3NldG9wdF9lcnJfQ1VSTFNILAogICAiY3VybF9lYXN5X3NldG9wdCBleHBlY3RzIGEgQ1VSTFNIKiBhcmd1bWVudCBmb3IgdGhpcyBvcHRpb24iKQogCiBfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfc3RyaW5nLAotICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gY2hhciAqIGZvciB0aGlzIGluZm8iKQorICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gJ2NoYXIgKicgZm9yIHRoaXMgaW5mbyIpCiBfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfbG9uZywKICAgImN1cmxfZWFzeV9nZXRpbmZvIGV4cGVjdHMgYSBwb2ludGVyIHRvIGxvbmcgZm9yIHRoaXMgaW5mbyIpCiBfQ1VSTF9XQVJOSU5HKF9jdXJsX2Vhc3lfZ2V0aW5mb19lcnJfZG91YmxlLAogICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gZG91YmxlIGZvciB0aGlzIGluZm8iKQogX0NVUkxfV0FSTklORyhfY3VybF9lYXN5X2dldGluZm9fZXJyX2N1cmxfc2xpc3QsCi0gICJjdXJsX2Vhc3lfZ2V0aW5mbyBleHBlY3RzIGEgcG9pbnRlciB0byBzdHJ1Y3QgY3VybF9zbGlzdCAqIGZvciB0aGlzIGluZm8iKQorICAiY3VybF9lYXN5X2dldGluZm8gZXhwZWN0cyBhIHBvaW50ZXIgdG8gJ3N0cnVjdCBjdXJsX3NsaXN0IConIGZvciB0aGlzIGluZm8iKQogCiAvKiBncm91cHMgb2YgY3VybF9lYXN5X3NldG9wcyBvcHRpb25zIHRoYXQgdGFrZSB0aGUgc2FtZSB0eXBlIG9mIGFyZ3VtZW50ICovCiAKQEAgLTM2Myw3ICszNjQsNyBAQAogCiAvKiBYWFg6IHNob3VsZCBldmFsdWF0ZSB0byB0cnVlIGlmZiBleHByIGlzIGEgcG9pbnRlciAqLwogI2RlZmluZSBfY3VybF9pc19hbnlfcHRyKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoc2l6ZW9mKGV4cHIpID09IHNpemVvZih2b2lkKikpCisgIChzaXplb2YoZXhwcikgPT0gc2l6ZW9mKHZvaWQgKikpCiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgTlVMTCAqLwogLyogWFhYOiBtdXN0IG5vdCBldmFsdWF0ZSBleHByLCBzbyB0aGlzIGNoZWNrIGlzIG5vdCBhY2N1cmF0ZSAqLwpAQCAtNDU1LDEyICs0NTYsMTIgQEAKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNCkgfHwgICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNSkgfHwgICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9yZWFkX2NhbGxiYWNrNikpCi10eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazEpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKLXR5cGVkZWYgc2l6ZV90IChfY3VybF9yZWFkX2NhbGxiYWNrMikoY2hhciAqLCBzaXplX3QsIHNpemVfdCwgY29uc3Qgdm9pZCopOwotdHlwZWRlZiBzaXplX3QgKF9jdXJsX3JlYWRfY2FsbGJhY2szKShjaGFyICosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7Ci10eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazQpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKLXR5cGVkZWYgc2l6ZV90IChfY3VybF9yZWFkX2NhbGxiYWNrNSkodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgY29uc3Qgdm9pZCopOwotdHlwZWRlZiBzaXplX3QgKF9jdXJsX3JlYWRfY2FsbGJhY2s2KSh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazEpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQgKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazIpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazMpKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazQpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQgKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazUpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKik7Cit0eXBlZGVmIHNpemVfdCAoX2N1cmxfcmVhZF9jYWxsYmFjazYpKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX3dyaXRlX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwogI2RlZmluZSBfY3VybF9pc193cml0ZV9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDczLDE0ICs0NzQsMTQgQEAKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazQpIHx8ICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazUpIHx8ICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF93cml0ZV9jYWxsYmFjazYpKQotdHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCopOwordHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrMSkoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIHR5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazIpKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKik7Ci10eXBlZGVmIHNpemVfdCAoX2N1cmxfd3JpdGVfY2FsbGJhY2szKShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7Ci10eXBlZGVmIHNpemVfdCAoX2N1cmxfd3JpdGVfY2FsbGJhY2s0KShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCB2b2lkKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICopOwordHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrMykoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazQpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQgKik7CiB0eXBlZGVmIHNpemVfdCAoX2N1cmxfd3JpdGVfY2FsbGJhY2s1KShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCopOwotdHlwZWRlZiBzaXplX3QgKF9jdXJsX3dyaXRlX2NhbGxiYWNrNikoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqKTsKK3R5cGVkZWYgc2l6ZV90IChfY3VybF93cml0ZV9jYWxsYmFjazYpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiAKIC8qIGV2YWx1YXRlcyB0byB0cnVlIGlmIGV4cHIgaXMgb2YgdHlwZSBjdXJsX2lvY3RsX2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwogI2RlZmluZSBfY3VybF9pc19pb2N0bF9jYihleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDkwLDEwICs0OTEsMTAgQEAKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazIpIHx8ICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazMpIHx8ICAgICAgICAgICAgICAgIFwKICAgIF9jdXJsX2NhbGxiYWNrX2NvbXBhdGlibGUoKGV4cHIpLCBfY3VybF9pb2N0bF9jYWxsYmFjazQpKQotdHlwZWRlZiBjdXJsaW9lcnIgKF9jdXJsX2lvY3RsX2NhbGxiYWNrMSkoQ1VSTCAqLCBpbnQsIHZvaWQqKTsKLXR5cGVkZWYgY3VybGlvZXJyIChfY3VybF9pb2N0bF9jYWxsYmFjazIpKENVUkwgKiwgaW50LCBjb25zdCB2b2lkKik7Ci10eXBlZGVmIGN1cmxpb2VyciAoX2N1cmxfaW9jdGxfY2FsbGJhY2szKShDVVJMICosIGN1cmxpb2NtZCwgdm9pZCopOwotdHlwZWRlZiBjdXJsaW9lcnIgKF9jdXJsX2lvY3RsX2NhbGxiYWNrNCkoQ1VSTCAqLCBjdXJsaW9jbWQsIGNvbnN0IHZvaWQqKTsKK3R5cGVkZWYgY3VybGlvZXJyIChfY3VybF9pb2N0bF9jYWxsYmFjazEpKENVUkwgKiwgaW50LCB2b2lkICopOwordHlwZWRlZiBjdXJsaW9lcnIgKF9jdXJsX2lvY3RsX2NhbGxiYWNrMikoQ1VSTCAqLCBpbnQsIGNvbnN0IHZvaWQgKik7Cit0eXBlZGVmIGN1cmxpb2VyciAoX2N1cmxfaW9jdGxfY2FsbGJhY2szKShDVVJMICosIGN1cmxpb2NtZCwgdm9pZCAqKTsKK3R5cGVkZWYgY3VybGlvZXJyIChfY3VybF9pb2N0bF9jYWxsYmFjazQpKENVUkwgKiwgY3VybGlvY21kLCBjb25zdCB2b2lkICopOwogCiAvKiBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiBleHByIGlzIG9mIHR5cGUgY3VybF9zb2Nrb3B0X2NhbGxiYWNrIG9yICJzaW1pbGFyIiAqLwogI2RlZmluZSBfY3VybF9pc19zb2Nrb3B0X2NiKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbGliL0NNYWtlTGlzdHMudHh0IGIvbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IDQ5YTM0MDkuLmViMmRlNmQgMTAwNjQ0Ci0tLSBhL2xpYi9DTWFrZUxpc3RzLnR4dAorKysgYi9saWIvQ01ha2VMaXN0cy50eHQKQEAgLTg3LDYgKzg3LDExIEBACiAKIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQl9OQU1FfSBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgQlVJTERJTkdfTElCQ1VSTCkKIAoraWYoSElERVNfQ1VSTF9QUklWQVRFX1NZTUJPTFMpCisgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtMSUJfTkFNRX0gQVBQRU5EIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgIkNVUkxfSElEREVOX1NZTUJPTFMiKQorICBzZXRfcHJvcGVydHkoVEFSR0VUICR7TElCX05BTUV9IEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICR7Q1VSTF9DRkxBR19TWU1CT0xTX0hJREV9KQorZW5kaWYoKQorCiAjIFJlbW92ZSB0aGUgImxpYiIgcHJlZml4IHNpbmNlIHRoZSBsaWJyYXJ5IGlzIGFscmVhZHkgbmFtZWQgImxpYmN1cmwiLgogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgUFJFRklYICIiKQogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCX05BTUV9IFBST1BFUlRJRVMgSU1QT1JUX1BSRUZJWCAiIikKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5pbmMgYi9saWIvTWFrZWZpbGUuaW5jCmluZGV4IDBlZDk5OGMuLjE5ZjU4MDAgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5pbmMKKysrIGIvbGliL01ha2VmaWxlLmluYwpAQCAtNDAsMzEgKzQwLDMxIEBACiBMSUJfQ0ZJTEVTID0gZmlsZS5jIHRpbWV2YWwuYyBiYXNlNjQuYyBob3N0aXAuYyBwcm9ncmVzcy5jIGZvcm1kYXRhLmMgICBcCiAgIGNvb2tpZS5jIGh0dHAuYyBzZW5kZi5jIGZ0cC5jIHVybC5jIGRpY3QuYyBpZjJpcC5jIHNwZWVkY2hlY2suYyAgICAgICBcCiAgIGxkYXAuYyB2ZXJzaW9uLmMgZ2V0ZW52LmMgZXNjYXBlLmMgbXByaW50Zi5jIHRlbG5ldC5jIG5ldHJjLmMgICAgICAgICBcCi0gIGdldGluZm8uYyB0cmFuc2Zlci5jIHN0cmVxdWFsLmMgZWFzeS5jIHNlY3VyaXR5LmMgY3VybF9mbm1hdGNoLmMgICAgICBcCisgIGdldGluZm8uYyB0cmFuc2Zlci5jIHN0cmNhc2UuYyBlYXN5LmMgc2VjdXJpdHkuYyBjdXJsX2ZubWF0Y2guYyAgICAgICBcCiAgIGZpbGVpbmZvLmMgZnRwbGlzdHBhcnNlci5jIHdpbGRjYXJkLmMga3JiNS5jIG1lbWRlYnVnLmMgaHR0cF9jaHVua3MuYyBcCiAgIHN0cnRvay5jIGNvbm5lY3QuYyBsbGlzdC5jIGhhc2guYyBtdWx0aS5jIGNvbnRlbnRfZW5jb2RpbmcuYyBzaGFyZS5jICBcCiAgIGh0dHBfZGlnZXN0LmMgbWQ0LmMgbWQ1LmMgaHR0cF9uZWdvdGlhdGUuYyBpbmV0X3B0b24uYyBzdHJ0b29mZnQuYyAgICBcCiAgIHN0cmVycm9yLmMgYW1pZ2Fvcy5jIGhvc3Rhc3luLmMgaG9zdGlwNC5jIGhvc3RpcDYuYyBob3N0c3luLmMgICAgICAgICBcCiAgIGluZXRfbnRvcC5jIHBhcnNlZGF0ZS5jIHNlbGVjdC5jIHRmdHAuYyBzcGxheS5jIHN0cmR1cC5jIHNvY2tzLmMgICAgICBcCi0gIHNzaC5jIHJhd3N0ci5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgICAgICAgICAgICBcCisgIHNzaC5jIGN1cmxfYWRkcmluZm8uYyBzb2Nrc19nc3NhcGkuYyBzb2Nrc19zc3BpLmMgICAgICAgICAgICBcCiAgIGN1cmxfc3NwaS5jIHNsaXN0LmMgbm9uYmxvY2suYyBjdXJsX21lbXJjaHIuYyBpbWFwLmMgcG9wMy5jIHNtdHAuYyAgICBcCiAgIHBpbmdwb25nLmMgcnRzcC5jIGN1cmxfdGhyZWFkcy5jIHdhcm5sZXNzLmMgaG1hYy5jIGN1cmxfcnRtcC5jICAgICAgICBcCiAgIG9wZW5sZGFwLmMgY3VybF9nZXRob3N0bmFtZS5jIGdvcGhlci5jIGlkbl93aW4zMi5jICAgICAgICAgICAgICAgICAgICBcCiAgIGh0dHBfcHJveHkuYyBub24tYXNjaWkuYyBhc3luLWFyZXMuYyBhc3luLXRocmVhZC5jIGN1cmxfZ3NzYXBpLmMgICAgICBcCi0gIGh0dHBfbnRsbS5jIGN1cmxfbnRsbV93Yi5jIGN1cmxfbnRsbV9jb3JlLmMgY3VybF9zYXNsLmMgICAgICAgICAgICAgICBcCisgIGh0dHBfbnRsbS5jIGN1cmxfbnRsbV93Yi5jIGN1cmxfbnRsbV9jb3JlLmMgY3VybF9zYXNsLmMgcmFuZC5jICAgICAgICBcCiAgIGN1cmxfbXVsdGlieXRlLmMgaG9zdGNoZWNrLmMgY29ubmNhY2hlLmMgcGlwZWxpbmUuYyBkb3Rkb3QuYyAgICAgICAgICBcCiAgIHg1MDlhc24xLmMgaHR0cDIuYyBzbWIuYyBjdXJsX2VuZGlhbi5jIGN1cmxfZGVzLmMgc3lzdGVtX3dpbjMyLmMKIAogTElCX0hGSUxFUyA9IGFycGFfdGVsbmV0LmggbmV0cmMuaCBmaWxlLmggdGltZXZhbC5oIGhvc3RpcC5oIHByb2dyZXNzLmggXAogICBmb3JtZGF0YS5oIGNvb2tpZS5oIGh0dHAuaCBzZW5kZi5oIGZ0cC5oIHVybC5oIGRpY3QuaCBpZjJpcC5oICAgICAgICAgXAogICBzcGVlZGNoZWNrLmggdXJsZGF0YS5oIGN1cmxfbGRhcC5oIGVzY2FwZS5oIHRlbG5ldC5oIGdldGluZm8uaCAgICAgICAgXAotICBzdHJlcXVhbC5oIGN1cmxfc2VjLmggbWVtZGVidWcuaCBodHRwX2NodW5rcy5oIGN1cmxfZm5tYXRjaC5oICAgICAgICAgXAorICBzdHJjYXNlLmggY3VybF9zZWMuaCBtZW1kZWJ1Zy5oIGh0dHBfY2h1bmtzLmggY3VybF9mbm1hdGNoLmggICAgICAgICAgXAogICB3aWxkY2FyZC5oIGZpbGVpbmZvLmggZnRwbGlzdHBhcnNlci5oIHN0cnRvay5oIGNvbm5lY3QuaCBsbGlzdC5oICAgICAgXAogICBoYXNoLmggY29udGVudF9lbmNvZGluZy5oIHNoYXJlLmggY3VybF9tZDQuaCBjdXJsX21kNS5oIGh0dHBfZGlnZXN0LmggXAogICBodHRwX25lZ290aWF0ZS5oIGluZXRfcHRvbi5oIGFtaWdhb3MuaCBzdHJ0b29mZnQuaCBzdHJlcnJvci5oICAgICAgICAgXAogICBpbmV0X250b3AuaCBjdXJseC5oIGN1cmxfbWVtb3J5LmggY3VybF9zZXR1cC5oIHRyYW5zZmVyLmggc2VsZWN0LmggICAgXAogICBlYXN5aWYuaCBtdWx0aWlmLmggcGFyc2VkYXRlLmggdGZ0cC5oIHNvY2thZGRyLmggc3BsYXkuaCBzdHJkdXAuaCAgICAgXAotICBzb2Nrcy5oIHNzaC5oIGN1cmxfYmFzZTY0LmggcmF3c3RyLmggY3VybF9hZGRyaW5mby5oIGN1cmxfc3NwaS5oICAgICAgXAorICBzb2Nrcy5oIHNzaC5oIGN1cmxfYmFzZTY0LmggY3VybF9hZGRyaW5mby5oIGN1cmxfc3NwaS5oICAgICAgXAogICBzbGlzdC5oIG5vbmJsb2NrLmggY3VybF9tZW1yY2hyLmggaW1hcC5oIHBvcDMuaCBzbXRwLmggcGluZ3BvbmcuaCAgICAgXAogICBydHNwLmggY3VybF90aHJlYWRzLmggd2Fybmxlc3MuaCBjdXJsX2htYWMuaCBjdXJsX3J0bXAuaCAgICAgICAgICAgICAgXAogICBjdXJsX2dldGhvc3RuYW1lLmggZ29waGVyLmggaHR0cF9wcm94eS5oIG5vbi1hc2NpaS5oIGFzeW4uaCAgICAgICAgICAgXApAQCAtNzIsNyArNzIsNyBAQAogICBjdXJsX3Nhc2wuaCBjdXJsX211bHRpYnl0ZS5oIGhvc3RjaGVjay5oIGNvbm5jYWNoZS5oICAgICAgICAgICAgICAgICAgXAogICBjdXJsX3NldHVwX29uY2UuaCBtdWx0aWhhbmRsZS5oIHNldHVwLXZtcy5oIHBpcGVsaW5lLmggZG90ZG90LmggICAgICAgXAogICB4NTA5YXNuMS5oIGh0dHAyLmggc2lncGlwZS5oIHNtYi5oIGN1cmxfZW5kaWFuLmggY3VybF9kZXMuaCAgICAgICAgICAgXAotICBjdXJsX3ByaW50Zi5oIHN5c3RlbV93aW4zMi5oCisgIGN1cmxfcHJpbnRmLmggc3lzdGVtX3dpbjMyLmggcmFuZC5oCiAKIExJQl9SQ0ZJTEVTID0gbGliY3VybC5yYwogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUubmV0d2FyZSBiL2xpYi9NYWtlZmlsZS5uZXR3YXJlCmluZGV4IGVlN2U4N2MuLmY2ODlhMzYgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5uZXR3YXJlCisrKyBiL2xpYi9NYWtlZmlsZS5uZXR3YXJlCkBAIC04Nyw3ICs4Nyw3IEBACiBUQVJHRVQgID0gbGliY3VybAogVkVSU0lPTgk9ICQoTElCQ1VSTF9WRVJTSU9OKQogQ09QWVIJPSBDb3B5cmlnaHQgKEMpICQoTElCQ1VSTF9DT1BZUklHSFRfU1RSKQotREVTQ1IJPSBjVVJMIGxpYmN1cmwgJChMSUJDVVJMX1ZFUlNJT05fU1RSKSAoJChMSUJBUkNIKSkgLSBodHRwczovL2N1cmwuaGF4eC5zZQorREVTQ1IJPSBjdXJsIGxpYmN1cmwgJChMSUJDVVJMX1ZFUlNJT05fU1RSKSAoJChMSUJBUkNIKSkgLSBodHRwczovL2N1cmwuaGF4eC5zZQogTVRTQUZFCT0gWUVTCiBTVEFDSwk9IDY0MDAwCiBTQ1JFRU4JPSBub25lCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudmM2IGIvbGliL01ha2VmaWxlLnZjNgppbmRleCBlNzgzZTNhLi5kMDI4NDI4IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUudmM2CisrKyBiL2xpYi9NYWtlZmlsZS52YzYKQEAgLTYwMSw3ICs2MDEsOCBAQAogCSQoRElST0JKKVxwb2xhcnNzbF90aHJlYWRsb2NrLm9iaiBcDQogCSQoRElST0JKKVxwb3AzLm9iaiBcDQogCSQoRElST0JKKVxwcm9ncmVzcy5vYmogXA0KLQkkKERJUk9CSilccmF3c3RyLm9iaiBcDQorCSQoRElST0JKKVxzdHJjYXNlLm9iaiBcDQorCSQoRElST0JKKVxyYW5kLm9iaiBcDQogCSQoRElST0JKKVxydHNwLm9iaiBcDQogCSQoRElST0JKKVxzY2hhbm5lbC5vYmogXA0KIAkkKERJUk9CSilcc2VjdXJpdHkub2JqIFwNCkBAIC02MzMsNyArNjM0LDYgQEAKIAkkKERJUk9CSilcdnRscy5vYmogXA0KIAkkKERJUk9CSilcb3BlbnNzbC5vYmogXA0KIAkkKERJUk9CSilcc3RyZHVwLm9iaiBcDQotCSQoRElST0JKKVxzdHJlcXVhbC5vYmogXA0KIAkkKERJUk9CSilcc3RyZXJyb3Iub2JqIFwNCiAJJChESVJPQkopXHN0cnRvay5vYmogXA0KIAkkKERJUk9CSilcc3RydG9vZmZ0Lm9iaiBcDQpkaWZmIC0tZ2l0IGEvbGliL2FtaWdhb3MuYyBiL2xpYi9hbWlnYW9zLmMKaW5kZXggNTU5MWQyMi4uNGY1NWIzMCAxMDA2NDQKLS0tIGEvbGliL2FtaWdhb3MuYworKysgYi9saWIvYW1pZ2Fvcy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgIH0KIAogICBpZihTb2NrZXRCYXNlVGFncyhTQlRNX1NFVFZBTChTQlRDX0VSUk5PUFRSKHNpemVvZihlcnJubykpKSwgKFVMT05HKSAmZXJybm8sCi0gICAgICAgICAgICAgICAgICAgIFNCVE1fU0VUVkFMKFNCVENfTE9HVEFHUFRSKSwgKFVMT05HKSAiY1VSTCIsCisgICAgICAgICAgICAgICAgICAgIFNCVE1fU0VUVkFMKFNCVENfTE9HVEFHUFRSKSwgKFVMT05HKSAiY3VybCIsCiAgICAgICAgICAgICAgICAgICAgIFRBR19ET05FKSkgewogICAgIF9fcmVxdWVzdCgiU29ja2V0QmFzZVRhZ3MgRVJST1IiKTsKICAgICByZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9saWIvYXN5bi10aHJlYWQuYyBiL2xpYi9hc3luLXRocmVhZC5jCmluZGV4IDdjY2UwMWEuLmRhNDQ0ZjAgMTAwNjQ0Ci0tLSBhL2xpYi9hc3luLXRocmVhZC5jCisrKyBiL2xpYi9hc3luLXRocmVhZC5jCkBAIC0xNTUsOCArMTU1LDggQEAKICAgY3VybF9tdXRleF90ICogbXR4OwogICBpbnQgZG9uZTsKIAotICBjaGFyICogaG9zdG5hbWU7ICAgICAgICAvKiBob3N0bmFtZSB0byByZXNvbHZlLCBDdXJsX2FzeW5jLmhvc3RuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSAqLworICBjaGFyICpob3N0bmFtZTsgICAgICAgIC8qIGhvc3RuYW1lIHRvIHJlc29sdmUsIEN1cmxfYXN5bmMuaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGUgKi8KICAgaW50IHBvcnQ7CiAgIGludCBzb2NrX2Vycm9yOwogICBDdXJsX2FkZHJpbmZvICpyZXM7CkBAIC0xNjksNyArMTY5LDcgQEAKIHN0cnVjdCB0aHJlYWRfZGF0YSB7CiAgIGN1cmxfdGhyZWFkX3QgdGhyZWFkX2huZDsKICAgdW5zaWduZWQgaW50IHBvbGxfaW50ZXJ2YWw7Ci0gIGxvbmcgaW50ZXJ2YWxfZW5kOworICB0aW1lX3QgaW50ZXJ2YWxfZW5kOwogICBzdHJ1Y3QgdGhyZWFkX3N5bmNfZGF0YSB0c2Q7CiB9OwogCkBAIC0yMDAsNyArMjAwLDcgQEAKIC8qIEluaXRpYWxpemUgcmVzb2x2ZXIgdGhyZWFkIHN5bmNocm9uaXphdGlvbiBkYXRhICovCiBzdGF0aWMKIGludCBpbml0X3RocmVhZF9zeW5jX2RhdGEoc3RydWN0IHRocmVhZF9kYXRhICogdGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cykKIHsKQEAgLTM4Miw3ICszODIsNyBAQAogICBzdHJ1Y3QgdGhyZWFkX2RhdGEgKnRkID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2RhdGEpKTsKICAgaW50IGVyciA9IFJFU09MVkVSX0VOT01FTTsKIAotICBjb25uLT5hc3luYy5vc19zcGVjaWZpYyA9ICh2b2lkKikgdGQ7CisgIGNvbm4tPmFzeW5jLm9zX3NwZWNpZmljID0gKHZvaWQgKil0ZDsKICAgaWYoIXRkKQogICAgIGdvdG8gZXJyX2V4aXQ7CiAKQEAgLTUyNSw3ICs1MjUsNyBAQAogICB9CiAgIGVsc2UgewogICAgIC8qIHBvbGwgZm9yIG5hbWUgbG9va3VwIGRvbmUgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIHVwIHRvIDI1MG1zICovCi0gICAgbG9uZyBlbGFwc2VkID0gQ3VybF90dmRpZmYoQ3VybF90dm5vdygpLCBkYXRhLT5wcm9ncmVzcy50X3N0YXJ0c2luZ2xlKTsKKyAgICB0aW1lX3QgZWxhcHNlZCA9IEN1cmxfdHZkaWZmKEN1cmxfdHZub3coKSwgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZSk7CiAgICAgaWYoZWxhcHNlZCA8IDApCiAgICAgICBlbGFwc2VkID0gMDsKIApkaWZmIC0tZ2l0IGEvbGliL2Jhc2U2NC5jIGIvbGliL2Jhc2U2NC5jCmluZGV4IGFkMjU0NTkuLjIwNGEyMjcgMTAwNjQ0Ci0tLSBhL2xpYi9iYXNlNjQuYworKysgYi9saWIvYmFzZTY0LmMKQEAgLTE5MCw2ICsxOTAsMTEgQEAKICAgaWYoIWluc2l6ZSkKICAgICBpbnNpemUgPSBzdHJsZW4oaW5kYXRhKTsKIAorI2lmIFNJWkVPRl9TSVpFX1QgPT0gNAorICBpZihpbnNpemUgPiBVSU5UX01BWC80KQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworI2VuZGlmCisKICAgYmFzZTY0ZGF0YSA9IG91dHB1dCA9IG1hbGxvYyhpbnNpemUgKiA0IC8gMyArIDQpOwogICBpZighb3V0cHV0KQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpkaWZmIC0tZ2l0IGEvbGliL2NoZWNrc3JjLnBsIGIvbGliL2NoZWNrc3JjLnBsCmluZGV4IGYzMTA4M2EuLjQ3OWE1ZGIgMTAwNzU1Ci0tLSBhL2xpYi9jaGVja3NyYy5wbAorKysgYi9saWIvY2hlY2tzcmMucGwKQEAgLTU1LDcgKzU1LDkgQEAKICAgICAnQ09QWVJJR0hUJyAgICAgICAgPT4gJ2ZpbGUgbWlzc2luZyBhIGNvcHlyaWdodCBzdGF0ZW1lbnQnLAogICAgICdCQURDT01NQU5EJyAgICAgICA9PiAnYmFkICFjaGVja3NyYyEgaW5zdHJ1Y3Rpb24nLAogICAgICdVTlVTRURJR05PUkUnICAgICA9PiAnYSB3YXJuaW5nIGlnbm9yZSB3YXMgbm90IHVzZWQnLAotICAgICdPUEVOQ09NTUVOVCcgICAgICA9PiAnZmlsZSBlbmRlZCB3aXRoIGEgLyogY29tbWVudCBzdGlsbCAib3BlbiInCisgICAgJ09QRU5DT01NRU5UJyAgICAgID0+ICdmaWxlIGVuZGVkIHdpdGggYSAvKiBjb21tZW50IHN0aWxsICJvcGVuIicsCisgICAgJ0FTVEVSSVNLU1BBQ0UnICAgID0+ICdwb2ludGVyIGRlY2xhcmVkIHdpdGggc3BhY2UgYWZ0ZXIgYXN0ZXJpc2snLAorICAgICdBU1RFUklTS05PU1BBQ0UnICA9PiAncG9pbnRlciBkZWNsYXJlZCB3aXRob3V0IHNwYWNlIGJlZm9yZSBhc3RlcmlzaycKICAgICApOwogCiBzdWIgcmVhZHdoaXRlbGlzdCB7CkBAIC00MjMsNiArNDI1LDcgQEAKICAgICAgICAgIyBzY2FuIGZvciB1c2Ugb2YgYmFubmVkIGZ1bmN0aW9ucwogICAgICAgICBpZigkbCA9fiAvXiguKlxXKQogICAgICAgICAgICAgICAgICAgIChnZXRzfAorCSAgICAgICAgICAgIHN0cnRva3wKICAgICAgICAgICAgICAgICAgICAgdj9zcHJpbnRmfAogICAgICAgICAgICAgICAgICAgICAoc3RyfF9tYnN8X3Rjc3xfd2NzKW4/Y2F0fAogICAgICAgICAgICAgICAgICAgICBMb2FkTGlicmFyeShFeCk/KEF8Vyk/KQpAQCAtNDcwLDYgKzQ3MywzMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgIyBjaGVjayBmb3IgJ2NoYXIgKiBuYW1lJworICAgICAgICBpZigoJGwgPX4gLyheLiooY2hhcnxpbnR8bG9uZ3x2b2lkfGN1cmxfc2xpc3R8Q1VSTHxDVVJMTXxDVVJMTXNnfGN1cmxfaHR0cHBvc3QpICooXCorKSkgKFx3KykvKSAmJiAoJDQgbmUgImNvbnN0IikpIHsKKyAgICAgICAgICAgIGNoZWNrd2FybigiQVNURVJJU0tOT1NQQUNFIiwKKyAgICAgICAgICAgICAgICAgICAgICAkbGluZSwgbGVuZ3RoKCQxKSwgJGZpbGUsICRvbCwKKyAgICAgICAgICAgICAgICAgICAgICAibm8gc3BhY2UgYWZ0ZXIgZGVjbGFyYXRpdmUgYXN0ZXJpc2siKTsKKyAgICAgICAgfQorICAgICAgICAjIGNoZWNrIGZvciAnY2hhcionCisgICAgICAgIGlmKCgkbCA9fiAvKF4uKihjaGFyfGludHxsb25nfHZvaWR8Y3VybF9zbGlzdHxDVVJMfENVUkxNfENVUkxNc2d8Y3VybF9odHRwcG9zdHxzb2NrYWRkcl9pbnxGSUxFKVwqKS8pKSB7CisgICAgICAgICAgICBjaGVja3dhcm4oIkFTVEVSSVNLTk9TUEFDRSIsCisgICAgICAgICAgICAgICAgICAgICAgJGxpbmUsIGxlbmd0aCgkMSktMSwgJGZpbGUsICRvbCwKKyAgICAgICAgICAgICAgICAgICAgICAibm8gc3BhY2UgYmVmb3JlIGFzdGVyaXNrIik7CisgICAgICAgIH0KKworICAgICAgICAjIGNoZWNrIGZvciAndm9pZCBmdW5jKCkgeycsIGJ1dCBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgYnkgcmVxdWlyaW5nCisgICAgICAgICMgYm90aCBhbiBvcGVuIGFuZCBjbG9zZWQgcGFyZW50aGVzZXMgYmVmb3JlIHRoZSBvcGVuIGJyYWNlCisgICAgICAgIGlmKCRsID1+IC9eKChcdykuKil7XHovKSB7CisgICAgICAgICAgICBteSAkayA9ICQxOworICAgICAgICAgICAgJGsgPX4gcy9jb25zdCAqLy87CisgICAgICAgICAgICAkayA9fiBzL3N0YXRpYyAqLy87CisgICAgICAgICAgICBpZigkayA9fiAvXCguKlwpLykgeworICAgICAgICAgICAgICAgIGNoZWNrd2FybigiQlJBQ0VQT1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSwgbGVuZ3RoKCRsKS0xLCAkZmlsZSwgJG9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmdseSBwbGFjZWQgb3BlbiBicmFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICRsaW5lKys7CiAgICAgICAgICRwcmV2bCA9ICRvbDsKICAgICB9CmRpZmYgLS1naXQgYS9saWIvY29uZmlnLXN5bWJpYW4uaCBiL2xpYi9jb25maWctc3ltYmlhbi5oCmluZGV4IDI2MDNhNDYuLjkyOTgzZDIgMTAwNjQ0Ci0tLSBhL2xpYi9jb25maWctc3ltYmlhbi5oCisrKyBiL2xpYi9jb25maWctc3ltYmlhbi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02NzYsNyArNjc2LDcgQEAKIC8qI2RlZmluZSBSQU5ET01fRklMRSAiL2Rldi91cmFuZG9tIiovCiAKICNkZWZpbmUgUkVDVl9UWVBFX0FSRzEgaW50Ci0jZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIHZvaWQqCisjZGVmaW5lIFJFQ1ZfVFlQRV9BUkcyIHZvaWQgKgogI2RlZmluZSBSRUNWX1RZUEVfQVJHMyBzaXplX3QKICNkZWZpbmUgUkVDVl9UWVBFX0FSRzQgaW50CiAjZGVmaW5lIFJFQ1ZfVFlQRV9SRVRWIHNzaXplX3QKQEAgLTY5Miw3ICs2OTIsNyBAQAogCiAjZGVmaW5lIFNFTkRfVFlQRV9BUkcxIGludAogI2RlZmluZSBTRU5EX1FVQUxfQVJHMiBjb25zdAotI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkKgorI2RlZmluZSBTRU5EX1RZUEVfQVJHMiB2b2lkICoKICNkZWZpbmUgU0VORF9UWVBFX0FSRzMgc2l6ZV90CiAjZGVmaW5lIFNFTkRfVFlQRV9BUkc0IGludAogI2RlZmluZSBTRU5EX1RZUEVfUkVUViBzc2l6ZV90CmRpZmYgLS1naXQgYS9saWIvY29ubmNhY2hlLmMgYi9saWIvY29ubmNhY2hlLmMKaW5kZXggMzJhNzAzMC4uZDhlZjlhNSAxMDA2NDQKLS0tIGEvbGliL2Nvbm5jYWNoZS5jCisrKyBiL2xpYi9jb25uY2FjaGUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCiAjaW5jbHVkZSAiY29ubmNhY2hlLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTEzMyw4ICsxMzIsMTAgQEAKIHsKICAgY29uc3QgY2hhciAqaG9zdG5hbWU7CiAKLSAgaWYoY29ubi0+Yml0cy5wcm94eSkKLSAgICBob3N0bmFtZSA9IGNvbm4tPnByb3h5Lm5hbWU7CisgIGlmKGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKKyAgICBob3N0bmFtZSA9IGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZTsKKyAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKKyAgICBob3N0bmFtZSA9IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOwogICBlbHNlIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KQogICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CiAgIGVsc2UKZGlmZiAtLWdpdCBhL2xpYi9jb25uZWN0LmMgYi9saWIvY29ubmVjdC5jCmluZGV4IDAwNDdmOWEuLmM3OGQzZGEgMTAwNjQ0Ci0tLSBhL2xpYi9jb25uZWN0LmMKKysrIGIvbGliL2Nvbm5lY3QuYwpAQCAtMTc5LDEyICsxNzksMTIgQEAKICAqCiAgKiBAdW5pdHRlc3Q6IDEzMDMKICAqLwotbG9uZyBDdXJsX3RpbWVsZWZ0KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vd3AsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBkdXJpbmdjb25uZWN0KQordGltZV90IEN1cmxfdGltZWxlZnQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3dwLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCBkdXJpbmdjb25uZWN0KQogewogICBpbnQgdGltZW91dF9zZXQgPSAwOwotICBsb25nIHRpbWVvdXRfbXMgPSBkdXJpbmdjb25uZWN0P0RFRkFVTFRfQ09OTkVDVF9USU1FT1VUOjA7CisgIHRpbWVfdCB0aW1lb3V0X21zID0gZHVyaW5nY29ubmVjdD9ERUZBVUxUX0NPTk5FQ1RfVElNRU9VVDowOwogICBzdHJ1Y3QgdGltZXZhbCBub3c7CiAKICAgLyogaWYgYSB0aW1lb3V0IGlzIHNldCwgdXNlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIG9uZSAqLwpAQCAtNjAxLDI2ICs2MDEsMjggQEAKIHsKICAgbWVtY3B5KGNvbm4tPmRhdGEtPmluZm8uY29ubl9wcmltYXJ5X2lwLCBjb25uLT5wcmltYXJ5X2lwLCBNQVhfSVBBRFJfTEVOKTsKICAgbWVtY3B5KGNvbm4tPmRhdGEtPmluZm8uY29ubl9sb2NhbF9pcCwgY29ubi0+bG9jYWxfaXAsIE1BWF9JUEFEUl9MRU4pOworICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fc2NoZW1lID0gY29ubi0+aGFuZGxlci0+c2NoZW1lOworICBjb25uLT5kYXRhLT5pbmZvLmNvbm5fcHJvdG9jb2wgPSBjb25uLT5oYW5kbGVyLT5wcm90b2NvbDsKICAgY29ubi0+ZGF0YS0+aW5mby5jb25uX3ByaW1hcnlfcG9ydCA9IGNvbm4tPnByaW1hcnlfcG9ydDsKICAgY29ubi0+ZGF0YS0+aW5mby5jb25uX2xvY2FsX3BvcnQgPSBjb25uLT5sb2NhbF9wb3J0OwogfQogCiAvKiByZXRyaWV2ZXMgaXAgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIGEgc29ja2FkZHIgc3RydWN0dXJlICovCi1zdGF0aWMgYm9vbCBnZXRhZGRyZXNzaW5mbyhzdHJ1Y3Qgc29ja2FkZHIqIHNhLCBjaGFyKiBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyogcG9ydCkKK3N0YXRpYyBib29sIGdldGFkZHJlc3NpbmZvKHN0cnVjdCBzb2NrYWRkciAqc2EsIGNoYXIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICpwb3J0KQogewogICB1bnNpZ25lZCBzaG9ydCB1c19wb3J0OwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNpID0gTlVMTDsKKyAgc3RydWN0IHNvY2thZGRyX2luICpzaSA9IE5VTEw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgc3RydWN0IHNvY2thZGRyX2luNiogc2k2ID0gTlVMTDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiAqc2k2ID0gTlVMTDsKICNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9TWVNfVU5fSCkgJiYgZGVmaW5lZChBRl9VTklYKQotICBzdHJ1Y3Qgc29ja2FkZHJfdW4qIHN1ID0gTlVMTDsKKyAgc3RydWN0IHNvY2thZGRyX3VuICpzdSA9IE5VTEw7CiAjZW5kaWYKIAogICBzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKICAgICBjYXNlIEFGX0lORVQ6Ci0gICAgICBzaSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSh2b2lkKikgc2E7CisgICAgICBzaSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKSBzYTsKICAgICAgIGlmKEN1cmxfaW5ldF9udG9wKHNhLT5zYV9mYW1pbHksICZzaS0+c2luX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLCBNQVhfSVBBRFJfTEVOKSkgewogICAgICAgICB1c19wb3J0ID0gbnRvaHMoc2ktPnNpbl9wb3J0KTsKQEAgLTYzMCw3ICs2MzIsNyBAQAogICAgICAgYnJlYWs7CiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgc2k2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSh2b2lkKikgc2E7CisgICAgICBzaTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopIHNhOwogICAgICAgaWYoQ3VybF9pbmV0X250b3Aoc2EtPnNhX2ZhbWlseSwgJnNpNi0+c2luNl9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwgTUFYX0lQQURSX0xFTikpIHsKICAgICAgICAgdXNfcG9ydCA9IG50b2hzKHNpNi0+c2luNl9wb3J0KTsKQEAgLTcyMiw3ICs3MjQsNyBAQAogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIGxvbmcgYWxsb3c7CisgIHRpbWVfdCBhbGxvdzsKICAgaW50IGVycm9yID0gMDsKICAgc3RydWN0IHRpbWV2YWwgbm93OwogICBpbnQgcmM7CkBAIC03NjIsNyArNzY0LDcgQEAKICNlbmRpZgogCiAgICAgLyogY2hlY2sgc29ja2V0IGZvciBjb25uZWN0ICovCi0gICAgcmMgPSBDdXJsX3NvY2tldF9yZWFkeShDVVJMX1NPQ0tFVF9CQUQsIGNvbm4tPnRlbXBzb2NrW2ldLCAwKTsKKyAgICByYyA9IFNPQ0tFVF9XUklUQUJMRShjb25uLT50ZW1wc29ja1tpXSwgMCk7CiAKICAgICBpZihyYyA9PSAwKSB7IC8qIG5vIGNvbm5lY3Rpb24geWV0ICovCiAgICAgICBlcnJvciA9IDA7CkBAIC04NDMsNyArODQ1LDcgQEAKICAgaWYocmVzdWx0KSB7CiAgICAgLyogbm8gbW9yZSBhZGRyZXNzZXMgdG8gdHJ5ICovCiAKLSAgICBjb25zdCBjaGFyKiBob3N0bmFtZTsKKyAgICBjb25zdCBjaGFyICpob3N0bmFtZTsKIAogICAgIC8qIGlmIHRoZSBmaXJzdCBhZGRyZXNzIGZhbWlseSBydW5zIG91dCBvZiBhZGRyZXNzZXMgdG8gdHJ5IGJlZm9yZQogICAgICAgIHRoZSBoYXBweSBleWViYWxsIHRpbWVvdXQsIGdvIGFoZWFkIGFuZCB0cnkgdGhlIG5leHQgZmFtaWx5IG5vdyAqLwpAQCAtODUzLDggKzg1NSwxMCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmKGNvbm4tPmJpdHMucHJveHkpCi0gICAgICBob3N0bmFtZSA9IGNvbm4tPnByb3h5Lm5hbWU7CisgICAgaWYoY29ubi0+Yml0cy5zb2Nrc3Byb3h5KQorICAgICAgaG9zdG5hbWUgPSBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWU7CisgICAgZWxzZSBpZihjb25uLT5iaXRzLmh0dHBwcm94eSkKKyAgICAgIGhvc3RuYW1lID0gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWU7CiAgICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CiAgICAgZWxzZQpAQCAtMTE1Myw3ICsxMTU3LDcgQEAKICAgc3RydWN0IHRpbWV2YWwgYmVmb3JlID0gQ3VybF90dm5vdygpOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAKLSAgbG9uZyB0aW1lb3V0X21zID0gQ3VybF90aW1lbGVmdChkYXRhLCAmYmVmb3JlLCBUUlVFKTsKKyAgdGltZV90IHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsICZiZWZvcmUsIFRSVUUpOwogCiAgIGlmKHRpbWVvdXRfbXMgPCAwKSB7CiAgICAgLyogYSBwcmVjYXV0aW9uLCBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRpbWUgYWxyZWFkeSBpcyB1cCAqLwpAQCAtMTM2OCwyNSArMTM3MiwyNiBAQAogCiB9CiAKLSNpZmRlZiBDVVJMREVCVUcKIC8qCi0gKiBDdXJsX2Nvbm5jb250cm9sKCkgaXMgdXNlZCB0byBzZXQgdGhlIGNvbm4tPmJpdHMuY2xvc2UgYml0IG9uIG9yIG9mZi4gSXQKLSAqIE1VU1QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbm5jbG9zZSgpIG9yIGNvbm5rZWVwKCkgbWFjcm9zIHdpdGggYSBzdGF0ZWQKLSAqIHJlYXNvbi4gVGhlIHJlYXNvbiBpcyBvbmx5IHNob3duIGluIGRlYnVnIGJ1aWxkcyBidXQgaGVscHMgdG8gZmlndXJlIG91dAotICogZGVjaXNpb24gcGF0aHMgd2hlbiBjb25uZWN0aW9ucyBhcmUgb3IgYXJlbid0IHJlLXVzZWQgYXMgZXhwZWN0ZWQuCisgKiBDdXJsX2Nvbm5jb250cm9sKCkgbWFya3Mgc3RyZWFtcyBvciBjb25uZWN0aW9uIGZvciBjbG9zdXJlLgogICovCi12b2lkIEN1cmxfY29ubmNvbnRyb2woc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIGNsb3NlaXQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKQotewotI2lmIGRlZmluZWQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKLSAgKHZvaWQpIHJlYXNvbjsKK3ZvaWQgQ3VybF9jb25uY29udHJvbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgaW50IGN0cmwgLyogc2VlIGRlZmluZXMgaW4gaGVhZGVyICovCisjaWZkZWYgREVCVUdCVUlMRAorICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgY2hhciAqcmVhc29uCiAjZW5kaWYKLSAgaWYoY2xvc2VpdCAhPSBjb25uLT5iaXRzLmNsb3NlKSB7Ci0gICAgaW5mb2YoY29ubi0+ZGF0YSwgIk1hcmtlZCBmb3IgWyVzXTogJXNcbiIsIGNsb3NlaXQ/ImNsb3N1cmUiOiJrZWVwIGFsaXZlIiwKLSAgICAgICAgICByZWFzb24pOwotCisgICkKK3sKKyAgLyogY2xvc2UgaWYgYSBjb25uZWN0aW9uLCBvciBhIHN0cmVhbSB0aGF0IGlzbid0IG11bHRpcGxleGVkICovCisgIGJvb2wgY2xvc2VpdCA9IChjdHJsID09IENPTk5DVFJMX0NPTk5FQ1RJT04pIHx8CisgICAgKChjdHJsID09IENPTk5DVFJMX1NUUkVBTSkgJiYgIShjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1RSRUFNKSk7CisgIGlmKChjdHJsID09IENPTk5DVFJMX1NUUkVBTSkgJiYKKyAgICAgKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TVFJFQU0pKQorICAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiS2lsbCBzdHJlYW06ICVzXG4iLCByZWFzb24pKTsKKyAgZWxzZSBpZihjbG9zZWl0ICE9IGNvbm4tPmJpdHMuY2xvc2UpIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIk1hcmtlZCBmb3IgWyVzXTogJXNcbiIsCisgICAgICAgICAgICAgICAgIGNsb3NlaXQ/ImNsb3N1cmUiOiJrZWVwIGFsaXZlIiwgcmVhc29uKSk7CiAgICAgY29ubi0+Yml0cy5jbG9zZSA9IGNsb3NlaXQ7IC8qIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBzb3VyY2UgY29kZSB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBhc3NpZ24gdGhpcyBiaXQgKi8KICAgfQogfQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY29ubmVjdC5oIGIvbGliL2Nvbm5lY3QuaAppbmRleCA2ZDYwZTBkLi41ZTQ4ZWI2IDEwMDY0NAotLS0gYS9saWIvY29ubmVjdC5oCisrKyBiL2xpYi9jb25uZWN0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM1LDkgKzM1LDkgQEAKIAogLyogZ2VuZXJpYyBmdW5jdGlvbiB0aGF0IHJldHVybnMgaG93IG11Y2ggdGltZSB0aGVyZSdzIGxlZnQgdG8gcnVuLCBhY2NvcmRpbmcKICAgIHRvIHRoZSB0aW1lb3V0cyBzZXQgKi8KLWxvbmcgQ3VybF90aW1lbGVmdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpub3dwLAotICAgICAgICAgICAgICAgICAgIGJvb2wgZHVyaW5nY29ubmVjdCk7Cit0aW1lX3QgQ3VybF90aW1lbGVmdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKm5vd3AsCisgICAgICAgICAgICAgICAgICAgICBib29sIGR1cmluZ2Nvbm5lY3QpOwogCiAjZGVmaW5lIERFRkFVTFRfQ09OTkVDVF9USU1FT1VUIDMwMDAwMCAvKiBtaWxsaXNlY29uZHMgPT0gZml2ZSBtaW51dGVzICovCiAjZGVmaW5lIEhBUFBZX0VZRUJBTExTX1RJTUVPVVQgICAgIDIwMCAvKiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuCkBAIC0xMDQsMjEgKzEwNCwzNyBAQAogCiB2b2lkIEN1cmxfdGNwbm9kZWxheShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3Qgc29ja2ZkKTsKIAotI2lmZGVmIENVUkxERUJVRwogLyoKLSAqIEN1cmxfY29ubmNsb3NlKCkgc2V0cyB0aGUgYml0LmNsb3NlIGJpdCB0byBUUlVFIHdpdGggYW4gZXhwbGFuYXRpb24uCi0gKiBOb3RoaW5nIGVsc2UuCisgKiBDdXJsX2Nvbm5jb250cm9sKCkgbWFya3MgdGhlIGVuZCBvZiBhIGNvbm5lY3Rpb24vc3RyZWFtLiBUaGUgJ2Nsb3NlaXQnCisgKiBhcmd1bWVudCBzcGVjaWZpZXMgaWYgaXQgaXMgdGhlIGVuZCBvZiBhIGNvbm5lY3Rpb24gb3IgYSBzdHJlYW0uCisgKgorICogRm9yIHN0cmVhbS1iYXNlZCBwcm90b2NvbHMgKHN1Y2ggYXMgSFRUUC8yKSwgYSBzdHJlYW0gY2xvc2Ugd2lsbCBub3QgY2F1c2UKKyAqIGEgY29ubmVjdGlvbiBjbG9zZS4gT3RoZXIgcHJvdG9jb2xzIHdpbGwgY2xvc2UgdGhlIGNvbm5lY3Rpb24gZm9yIGJvdGgKKyAqIGNhc2VzLgorICoKKyAqIEl0IHNldHMgdGhlIGJpdC5jbG9zZSBiaXQgdG8gVFJVRSAod2l0aCBhbiBleHBsYW5hdGlvbiBmb3IgZGVidWcgYnVpbGRzKSwKKyAqIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2lsbCBjbG9zZS4KICAqLworCisjZGVmaW5lIENPTk5DVFJMX0tFRVAgMCAvKiB1bmRvIGEgbWFya2VkIGNsb3N1cmUgKi8KKyNkZWZpbmUgQ09OTkNUUkxfQ09OTkVDVElPTiAxCisjZGVmaW5lIENPTk5DVFJMX1NUUkVBTSAyCisKIHZvaWQgQ3VybF9jb25uY29udHJvbChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjbG9zZWl0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbik7Ci0jZGVmaW5lIGNvbm5jbG9zZSh4LHkpIEN1cmxfY29ubmNvbnRyb2woeCxUUlVFLCB5KQotI2RlZmluZSBjb25ua2VlcCh4LHkpIEN1cmxfY29ubmNvbnRyb2woeCwgRkFMU0UsIHkpCisgICAgICAgICAgICAgICAgICAgICAgaW50IGNsb3NlaXQKKyNpZmRlZiBERUJVR0JVSUxECisgICAgICAgICAgICAgICAgICAgICAgLCBjb25zdCBjaGFyICpyZWFzb24KKyNlbmRpZgorICApOworCisjaWZkZWYgREVCVUdCVUlMRAorI2RlZmluZSBzdHJlYW1jbG9zZSh4LHkpIEN1cmxfY29ubmNvbnRyb2woeCwgQ09OTkNUUkxfU1RSRUFNLCB5KQorI2RlZmluZSBjb25uY2xvc2UoeCx5KSBDdXJsX2Nvbm5jb250cm9sKHgsIENPTk5DVFJMX0NPTk5FQ1RJT04sIHkpCisjZGVmaW5lIGNvbm5rZWVwKHgseSkgQ3VybF9jb25uY29udHJvbCh4LCBDT05OQ1RSTF9LRUVQLCB5KQogI2Vsc2UgLyogaWYgIUNVUkxERUJVRyAqLwotCi0jZGVmaW5lIGNvbm5jbG9zZSh4LHkpICh4KS0+Yml0cy5jbG9zZSA9IFRSVUUKLSNkZWZpbmUgY29ubmtlZXAoeCx5KSAoeCktPmJpdHMuY2xvc2UgPSBGQUxTRQotCisjZGVmaW5lIHN0cmVhbWNsb3NlKHgseSkgQ3VybF9jb25uY29udHJvbCh4LCBDT05OQ1RSTF9TVFJFQU0pCisjZGVmaW5lIGNvbm5jbG9zZSh4LHkpIEN1cmxfY29ubmNvbnRyb2woeCwgQ09OTkNUUkxfQ09OTkVDVElPTikKKyNkZWZpbmUgY29ubmtlZXAoeCx5KSBDdXJsX2Nvbm5jb250cm9sKHgsIENPTk5DVFJMX0tFRVApCiAjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX0NPTk5FQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvbnRlbnRfZW5jb2RpbmcuYyBiL2xpYi9jb250ZW50X2VuY29kaW5nLmMKaW5kZXggZmEzNmFjYS4uNWE1ODI0ZCAxMDA2NDQKLS0tIGEvbGliL2NvbnRlbnRfZW5jb2RpbmcuYworKysgYi9saWIvY29udGVudF9lbmNvZGluZy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJjb250ZW50X2VuY29kaW5nLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKLQogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKIC8qIENvbW1lbnQgdGhpcyBvdXQgaWYgemxpYiBpcyBhbHdheXMgZ29pbmcgdG8gYmUgYXQgbGVhc3QgdmVyLiAxLjIuMC40CkBAIC0zNzEsMTIgKzM3MSw5IEBACiAgIHsKICAgICAvKiBOZWVkIG1vcmUgZ3ppcCBoZWFkZXIgZGF0YSBzdGF0ZSAqLwogICAgIHNzaXplX3QgaGxlbjsKLSAgICB1bnNpZ25lZCBjaGFyICpvbGRibG9jayA9IHotPm5leHRfaW47Ci0KICAgICB6LT5hdmFpbF9pbiArPSAodUludClucmVhZDsKLSAgICB6LT5uZXh0X2luID0gcmVhbGxvYyh6LT5uZXh0X2luLCB6LT5hdmFpbF9pbik7CisgICAgei0+bmV4dF9pbiA9IEN1cmxfc2FmZXJlYWxsb2Moei0+bmV4dF9pbiwgei0+YXZhaWxfaW4pOwogICAgIGlmKHotPm5leHRfaW4gPT0gTlVMTCkgewotICAgICAgZnJlZShvbGRibG9jayk7CiAgICAgICByZXR1cm4gZXhpdF96bGliKHosICZrLT56bGliX2luaXQsIENVUkxFX09VVF9PRl9NRU1PUlkpOwogICAgIH0KICAgICAvKiBBcHBlbmQgdGhlIG5ldyBibG9jayBvZiBkYXRhIHRvIHRoZSBwcmV2aW91cyBvbmUgKi8KZGlmZiAtLWdpdCBhL2xpYi9jb29raWUuYyBiL2xpYi9jb29raWUuYwppbmRleCBiMDZhMTM5Li4zMTIzODUxIDEwMDY0NAotLS0gYS9saWIvY29va2llLmMKKysrIGIvbGliL2Nvb2tpZS5jCkBAIC04OSwxMyArODksMTIgQEAKIAogI2luY2x1ZGUgInVybGRhdGEuaCIKICNpbmNsdWRlICJjb29raWUuaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgogI2luY2x1ZGUgInN0cnRvay5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAic2xpc3QuaCIKICNpbmNsdWRlICJzaGFyZS5oIgogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJjdXJsX21lbXJjaHIuaCIKICNpbmNsdWRlICJpbmV0X3B0b24uaCIKIApAQCAtMTI1LDcgKzEyNCw3IEBACiAgIGlmKGhvc3RuYW1lX2xlbiA8IGNvb2tpZV9kb21haW5fbGVuKQogICAgIHJldHVybiBGQUxTRTsKIAotICBpZighQ3VybF9yYXdfZXF1YWwoY29va2VfZG9tYWluLCBob3N0bmFtZStob3N0bmFtZV9sZW4tY29va2llX2RvbWFpbl9sZW4pKQorICBpZighc3RyY2FzZWNvbXBhcmUoY29va2VfZG9tYWluLCBob3N0bmFtZStob3N0bmFtZV9sZW4tY29va2llX2RvbWFpbl9sZW4pKQogICAgIHJldHVybiBGQUxTRTsKIAogICAvKiBBIGxlYWQgY2hhciBvZiBjb29raWVfZG9tYWluIGlzIG5vdCAnLicuCkBAIC0xNDYsMTIgKzE0NSwxMiBAQAogICogbWF0Y2hpbmcgY29va2llIHBhdGggYW5kIHVybCBwYXRoCiAgKiBSRkM2MjY1IDUuMS40IFBhdGhzIGFuZCBQYXRoLU1hdGNoCiAgKi8KLXN0YXRpYyBib29sIHBhdGhtYXRjaChjb25zdCBjaGFyKiBjb29raWVfcGF0aCwgY29uc3QgY2hhciogcmVxdWVzdF91cmkpCitzdGF0aWMgYm9vbCBwYXRobWF0Y2goY29uc3QgY2hhciAqY29va2llX3BhdGgsIGNvbnN0IGNoYXIgKnJlcXVlc3RfdXJpKQogewogICBzaXplX3QgY29va2llX3BhdGhfbGVuOwogICBzaXplX3QgdXJpX3BhdGhfbGVuOwotICBjaGFyKiB1cmlfcGF0aCA9IE5VTEw7Ci0gIGNoYXIqIHBvczsKKyAgY2hhciAqdXJpX3BhdGggPSBOVUxMOworICBjaGFyICpwb3M7CiAgIGJvb2wgcmV0ID0gRkFMU0U7CiAKICAgLyogY29va2llX3BhdGggbXVzdCBub3QgaGF2ZSBsYXN0ICcvJyBzZXBhcmF0b3IuIGV4OiAvc2FtcGxlICovCkBAIC00NjgsOSArNDY3LDkgQEAKICAgICAgICAgICAvKiB0aGlzIHdhcyBhICI8bmFtZT49IiB3aXRoIG5vIGNvbnRlbnQsIGFuZCB3ZSBtdXN0IGFsbG93CiAgICAgICAgICAgICAgJ3NlY3VyZScgYW5kICdodHRwb25seScgc3BlY2lmaWVkIHRoaXMgd2VpcmRseSAqLwogICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKCJzZWN1cmUiLCBuYW1lKSkKKyAgICAgICAgICBpZihzdHJjYXNlY29tcGFyZSgic2VjdXJlIiwgbmFtZSkpCiAgICAgICAgICAgICBjby0+c2VjdXJlID0gVFJVRTsKLSAgICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJodHRwb25seSIsIG5hbWUpKQorICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoImh0dHBvbmx5IiwgbmFtZSkpCiAgICAgICAgICAgICBjby0+aHR0cG9ubHkgPSBUUlVFOwogICAgICAgICAgIGVsc2UgaWYoc2VwKQogICAgICAgICAgICAgLyogdGhlcmUgd2FzIGEgJz0nIHNvIHdlJ3JlIG5vdCBkb25lIHBhcnNpbmcgdGhpcyBmaWVsZCAqLwpAQCAtNDc4LDcgKzQ3Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYoZG9uZSkKICAgICAgICAgICA7Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoInBhdGgiLCBuYW1lKSkgeworICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJwYXRoIiwgbmFtZSkpIHsKICAgICAgICAgICBzdHJzdG9yZSgmY28tPnBhdGgsIHdoYXRwdHIpOwogICAgICAgICAgIGlmKCFjby0+cGF0aCkgewogICAgICAgICAgICAgYmFkY29va2llID0gVFJVRTsgLyogb3V0IG9mIG1lbW9yeSBiYWQgKi8KQEAgLTQ5MCw3ICs0ODksNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoImRvbWFpbiIsIG5hbWUpKSB7CisgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoImRvbWFpbiIsIG5hbWUpKSB7CiAgICAgICAgICAgYm9vbCBpc19pcDsKICAgICAgICAgICBjb25zdCBjaGFyICpkb3RwOwogCkBAIC01MjgsMTQgKzUyNywxNCBAQAogICAgICAgICAgICAgICAgICAgd2hhdHB0cik7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoInZlcnNpb24iLCBuYW1lKSkgeworICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJ2ZXJzaW9uIiwgbmFtZSkpIHsKICAgICAgICAgICBzdHJzdG9yZSgmY28tPnZlcnNpb24sIHdoYXRwdHIpOwogICAgICAgICAgIGlmKCFjby0+dmVyc2lvbikgewogICAgICAgICAgICAgYmFkY29va2llID0gVFJVRTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJtYXgtYWdlIiwgbmFtZSkpIHsKKyAgICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSgibWF4LWFnZSIsIG5hbWUpKSB7CiAgICAgICAgICAgLyogRGVmaW5lZCBpbiBSRkMyMTA5OgogCiAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgTWF4LUFnZSBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgbGlmZXRpbWUgb2YgdGhlCkBAIC01NTEsNyArNTUwLDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKCJleHBpcmVzIiwgbmFtZSkpIHsKKyAgICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSgiZXhwaXJlcyIsIG5hbWUpKSB7CiAgICAgICAgICAgc3Ryc3RvcmUoJmNvLT5leHBpcmVzdHIsIHdoYXRwdHIpOwogICAgICAgICAgIGlmKCFjby0+ZXhwaXJlc3RyKSB7CiAgICAgICAgICAgICBiYWRjb29raWUgPSBUUlVFOwpAQCAtNzEyLDcgKzcxMSw3IEBACiAgICAgICAgICAgIEFzIGZhciBhcyBJIGNhbiBzZWUsIGl0IGlzIHNldCB0byB0cnVlIHdoZW4gdGhlIGNvb2tpZSBzYXlzCiAgICAgICAgICAgIC5kb21haW4uY29tIGFuZCB0byBmYWxzZSB3aGVuIHRoZSBkb21haW4gaXMgY29tcGxldGUgd3d3LmRvbWFpbi5jb20KICAgICAgICAgKi8KLSAgICAgICAgY28tPnRhaWxtYXRjaCA9IEN1cmxfcmF3X2VxdWFsKHB0ciwgIlRSVUUiKT9UUlVFOkZBTFNFOworICAgICAgICBjby0+dGFpbG1hdGNoID0gc3RyY2FzZWNvbXBhcmUocHRyLCAiVFJVRSIpP1RSVUU6RkFMU0U7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAyOgogICAgICAgICAvKiBJdCB0dXJucyBvdXQsIHRoYXQgc29tZXRpbWVzIHRoZSBmaWxlIGZvcm1hdCBhbGxvd3MgdGhlIHBhdGgKQEAgLTc0MSw3ICs3NDAsNyBAQAogICAgICAgICBmaWVsZHMrKzsgLyogYWRkIGEgZmllbGQgYW5kIGZhbGwgZG93biB0byBzZWN1cmUgKi8KICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8KICAgICAgIGNhc2UgMzoKLSAgICAgICAgY28tPnNlY3VyZSA9IEN1cmxfcmF3X2VxdWFsKHB0ciwgIlRSVUUiKT9UUlVFOkZBTFNFOworICAgICAgICBjby0+c2VjdXJlID0gc3RyY2FzZWNvbXBhcmUocHRyLCAiVFJVRSIpP1RSVUU6RkFMU0U7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSA0OgogICAgICAgICBjby0+ZXhwaXJlcyA9IGN1cmx4X3N0cnRvb2ZmdChwdHIsIE5VTEwsIDEwKTsKQEAgLTgxMiwxMSArODExLDEyIEBACiAgIGNsaXN0ID0gYy0+Y29va2llczsKICAgcmVwbGFjZV9vbGQgPSBGQUxTRTsKICAgd2hpbGUoY2xpc3QpIHsKLSAgICBpZihDdXJsX3Jhd19lcXVhbChjbGlzdC0+bmFtZSwgY28tPm5hbWUpKSB7CisgICAgaWYoc3RyY2FzZWNvbXBhcmUoY2xpc3QtPm5hbWUsIGNvLT5uYW1lKSkgewogICAgICAgLyogdGhlIG5hbWVzIGFyZSBpZGVudGljYWwgKi8KIAogICAgICAgaWYoY2xpc3QtPmRvbWFpbiAmJiBjby0+ZG9tYWluKSB7Ci0gICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNsaXN0LT5kb21haW4sIGNvLT5kb21haW4pKQorICAgICAgICBpZihzdHJjYXNlY29tcGFyZShjbGlzdC0+ZG9tYWluLCBjby0+ZG9tYWluKSAmJgorICAgICAgICAgIChjbGlzdC0+dGFpbG1hdGNoID09IGNvLT50YWlsbWF0Y2gpKQogICAgICAgICAgIC8qIFRoZSBkb21haW5zIGFyZSBpZGVudGljYWwgKi8KICAgICAgICAgICByZXBsYWNlX29sZD1UUlVFOwogICAgICAgfQpAQCAtODI3LDcgKzgyNyw3IEBACiAgICAgICAgIC8qIHRoZSBkb21haW5zIHdlcmUgaWRlbnRpY2FsICovCiAKICAgICAgICAgaWYoY2xpc3QtPnNwYXRoICYmIGNvLT5zcGF0aCkgewotICAgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNsaXN0LT5zcGF0aCwgY28tPnNwYXRoKSkgeworICAgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKGNsaXN0LT5zcGF0aCwgY28tPnNwYXRoKSkgewogICAgICAgICAgICAgcmVwbGFjZV9vbGQgPSBUUlVFOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCkBAIC05MDEsNiArOTAxLDM1IEBACiAgIHJldHVybiBjbzsKIH0KIAorLyoKKyAqIGdldF9saW5lKCkgbWFrZXMgc3VyZSB0byBvbmx5IHJldHVybiBjb21wbGV0ZSB3aG9sZSBsaW5lcyB0aGF0IGZpdCBpbiAnbGVuJworICogYnl0ZXMgYW5kIGVuZCB3aXRoIGEgbmV3bGluZS4KKyAqLworc3RhdGljIGNoYXIgKmdldF9saW5lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgRklMRSAqaW5wdXQpCit7CisgIGJvb2wgcGFydGlhbCA9IEZBTFNFOworICB3aGlsZSgxKSB7CisgICAgY2hhciAqYiA9IGZnZXRzKGJ1ZiwgbGVuLCBpbnB1dCk7CisgICAgaWYoYikgeworICAgICAgc2l6ZV90IHJsZW4gPSBzdHJsZW4oYik7CisgICAgICBpZihybGVuICYmIChiW3JsZW4tMV0gPT0gJ1xuJykpIHsKKyAgICAgICAgaWYocGFydGlhbCkgeworICAgICAgICAgIHBhcnRpYWwgPSBGQUxTRTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgLyogcmVhZCBhIHBhcnRpYWwsIGRpc2NhcmQgdGhlIG5leHQgcGllY2UgdGhhdCBlbmRzIHdpdGggbmV3bGluZSAqLworICAgICAgICBwYXJ0aWFsID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQ3VybF9jb29raWVfaW5pdCgpCkBAIC05MzcsNyArOTY2LDcgQEAKICAgfQogICBjLT5ydW5uaW5nID0gRkFMU0U7IC8qIHRoaXMgaXMgbm90IHJ1bm5pbmcsIHRoaXMgaXMgaW5pdCAqLwogCi0gIGlmKGZpbGUgJiYgc3RyZXF1YWwoZmlsZSwgIi0iKSkgeworICBpZihmaWxlICYmICFzdHJjbXAoZmlsZSwgIi0iKSkgewogICAgIGZwID0gc3RkaW47CiAgICAgZnJvbWZpbGU9RkFMU0U7CiAgIH0KQEAgLTk1Nyw3ICs5ODYsNyBAQAogICAgIGxpbmUgPSBtYWxsb2MoTUFYX0NPT0tJRV9MSU5FKTsKICAgICBpZighbGluZSkKICAgICAgIGdvdG8gZmFpbDsKLSAgICB3aGlsZShmZ2V0cyhsaW5lLCBNQVhfQ09PS0lFX0xJTkUsIGZwKSkgeworICAgIHdoaWxlKGdldF9saW5lKGxpbmUsIE1BWF9DT09LSUVfTElORSwgZnApKSB7CiAgICAgICBpZihjaGVja3ByZWZpeCgiU2V0LUNvb2tpZToiLCBsaW5lKSkgewogICAgICAgICAvKiBUaGlzIGlzIGEgY29va2llIGxpbmUsIGdldCBpdCEgKi8KICAgICAgICAgbGluZXB0cj0mbGluZVsxMV07CkBAIC0xMDIyLDYgKzEwNTEsNDAgQEAKICAgcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQ0xPTkUoZmllbGQpICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoc3JjLT5maWVsZCkgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGR1cC0+ZmllbGQgPSBzdHJkdXAoc3JjLT5maWVsZCk7ICAgXAorICAgICAgaWYoIWR1cC0+ZmllbGQpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gZmFpbDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlKDApCisKK3N0YXRpYyBzdHJ1Y3QgQ29va2llICpkdXBfY29va2llKHN0cnVjdCBDb29raWUgKnNyYykKK3sKKyAgc3RydWN0IENvb2tpZSAqZHVwID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgQ29va2llKSwgMSk7CisgIGlmKGR1cCkgeworICAgIENMT05FKGV4cGlyZXN0cik7CisgICAgQ0xPTkUoZG9tYWluKTsKKyAgICBDTE9ORShwYXRoKTsKKyAgICBDTE9ORShzcGF0aCk7CisgICAgQ0xPTkUobmFtZSk7CisgICAgQ0xPTkUodmFsdWUpOworICAgIENMT05FKG1heGFnZSk7CisgICAgQ0xPTkUodmVyc2lvbik7CisgICAgZHVwLT5leHBpcmVzID0gc3JjLT5leHBpcmVzOworICAgIGR1cC0+dGFpbG1hdGNoID0gc3JjLT50YWlsbWF0Y2g7CisgICAgZHVwLT5zZWN1cmUgPSBzcmMtPnNlY3VyZTsKKyAgICBkdXAtPmxpdmVjb29raWUgPSBzcmMtPmxpdmVjb29raWU7CisgICAgZHVwLT5odHRwb25seSA9IHNyYy0+aHR0cG9ubHk7CisgIH0KKyAgcmV0dXJuIGR1cDsKKworICBmYWlsOgorICBmcmVlY29va2llKGR1cCk7CisgIHJldHVybiBOVUxMOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBDdXJsX2Nvb2tpZV9nZXRsaXN0KCkKQEAgLTEwNjYsNyArMTEyOSw3IEBACiAgICAgICAvKiBub3cgY2hlY2sgaWYgdGhlIGRvbWFpbiBpcyBjb3JyZWN0ICovCiAgICAgICBpZighY28tPmRvbWFpbiB8fAogICAgICAgICAgKGNvLT50YWlsbWF0Y2ggJiYgIWlzX2lwICYmIHRhaWxtYXRjaChjby0+ZG9tYWluLCBob3N0KSkgfHwKLSAgICAgICAgICgoIWNvLT50YWlsbWF0Y2ggfHwgaXNfaXApICYmIEN1cmxfcmF3X2VxdWFsKGhvc3QsIGNvLT5kb21haW4pKSApIHsKKyAgICAgICAgICgoIWNvLT50YWlsbWF0Y2ggfHwgaXNfaXApICYmIHN0cmNhc2Vjb21wYXJlKGhvc3QsIGNvLT5kb21haW4pKSApIHsKICAgICAgICAgLyogdGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGhvc3QgbWF0Y2hlcyB0aGUgZG9tYWluIHN0dWZmIGluIHRoZQogICAgICAgICAgICBjb29raWUgZGF0YSAqLwogCkBAIC0xMDc3LDExICsxMTQwLDggQEAKICAgICAgICAgICAvKiBhbmQgbm93LCB3ZSBrbm93IHRoaXMgaXMgYSBtYXRjaCBhbmQgd2Ugc2hvdWxkIGNyZWF0ZSBhbgogICAgICAgICAgICAgIGVudHJ5IGZvciB0aGUgcmV0dXJuLWxpbmtlZC1saXN0ICovCiAKLSAgICAgICAgICBuZXdjbyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IENvb2tpZSkpOworICAgICAgICAgIG5ld2NvID0gZHVwX2Nvb2tpZShjbyk7CiAgICAgICAgICAgaWYobmV3Y28pIHsKLSAgICAgICAgICAgIC8qIGZpcnN0LCBjb3B5IHRoZSB3aG9sZSBzb3VyY2UgY29va2llOiAqLwotICAgICAgICAgICAgbWVtY3B5KG5ld2NvLCBjbywgc2l6ZW9mKHN0cnVjdCBDb29raWUpKTsKLQogICAgICAgICAgICAgLyogdGhlbiBtb2RpZnkgb3VyIG5leHQgKi8KICAgICAgICAgICAgIG5ld2NvLT5uZXh0ID0gbWFpbmNvOwogCkBAIC0xMDkzLDEyICsxMTUzLDcgQEAKICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZhaWw6CiAgICAgICAgICAgICAvKiBmYWlsdXJlLCBjbGVhciB1cCB0aGUgYWxsb2NhdGVkIGNoYWluIGFuZCByZXR1cm4gTlVMTCAqLwotICAgICAgICAgICAgd2hpbGUobWFpbmNvKSB7Ci0gICAgICAgICAgICAgIGNvID0gbWFpbmNvLT5uZXh0OwotICAgICAgICAgICAgICBmcmVlKG1haW5jbyk7Ci0gICAgICAgICAgICAgIG1haW5jbyA9IGNvOwotICAgICAgICAgICAgfQotCisgICAgICAgICAgICBDdXJsX2Nvb2tpZV9mcmVlbGlzdChtYWluY28pOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTUwLDcgKzEyMDUsNyBAQAogdm9pZCBDdXJsX2Nvb2tpZV9jbGVhcmFsbChzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llcykKIHsKICAgaWYoY29va2llcykgewotICAgIEN1cmxfY29va2llX2ZyZWVsaXN0KGNvb2tpZXMtPmNvb2tpZXMsIFRSVUUpOworICAgIEN1cmxfY29va2llX2ZyZWVsaXN0KGNvb2tpZXMtPmNvb2tpZXMpOwogICAgIGNvb2tpZXMtPmNvb2tpZXMgPSBOVUxMOwogICAgIGNvb2tpZXMtPm51bWNvb2tpZXMgPSAwOwogICB9CkBAIC0xMTYyLDIxICsxMjE3LDE0IEBACiAgKgogICogRnJlZSBhIGxpc3Qgb2YgY29va2llcyBwcmV2aW91c2x5IHJldHVybmVkIGJ5IEN1cmxfY29va2llX2dldGxpc3QoKTsKICAqCi0gKiBUaGUgJ2Nvb2tpZXN0b28nIGFyZ3VtZW50IHRlbGxzIHRoaXMgZnVuY3Rpb24gd2hldGhlciB0byBqdXN0IGZyZWUgdGhlCi0gKiBsaXN0IG9yIGFjdHVhbGx5IGFsc28gZnJlZSBhbGwgY29va2llcyB3aXRoaW4gdGhlIGxpc3QgYXMgd2VsbC4KLSAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBDdXJsX2Nvb2tpZV9mcmVlbGlzdChzdHJ1Y3QgQ29va2llICpjbywgYm9vbCBjb29raWVzdG9vKQordm9pZCBDdXJsX2Nvb2tpZV9mcmVlbGlzdChzdHJ1Y3QgQ29va2llICpjbykKIHsKICAgc3RydWN0IENvb2tpZSAqbmV4dDsKICAgd2hpbGUoY28pIHsKICAgICBuZXh0ID0gY28tPm5leHQ7Ci0gICAgaWYoY29va2llc3RvbykKLSAgICAgIGZyZWVjb29raWUoY28pOwotICAgIGVsc2UKLSAgICAgIGZyZWUoY28pOyAvKiB3ZSBvbmx5IGZyZWUgdGhlIHN0cnVjdCBzaW5jZSB0aGUgIm1lbWJlcnMiIGFyZSBhbGwganVzdAotICAgICAgICAgICAgICAgICAgIHBvaW50ZWQgb3V0IGluIHRoZSBtYWluIGNvb2tpZSBsaXN0ISAqLworICAgIGZyZWVjb29raWUoY28pOwogICAgIGNvID0gbmV4dDsKICAgfQogfQpAQCAtMTIzMSw3ICsxMjc5LDcgQEAKIHsKICAgaWYoYykgewogICAgIGZyZWUoYy0+ZmlsZW5hbWUpOwotICAgIEN1cmxfY29va2llX2ZyZWVsaXN0KGMtPmNvb2tpZXMsIFRSVUUpOworICAgIEN1cmxfY29va2llX2ZyZWVsaXN0KGMtPmNvb2tpZXMpOwogICAgIGZyZWUoYyk7IC8qIGZyZWUgdGhlIGJhc2Ugc3RydWN0IGFzIHdlbGwgKi8KICAgfQogfQpAQCAtMTI4OSw3ICsxMzM3LDcgQEAKICAgLyogYXQgZmlyc3QsIHJlbW92ZSBleHBpcmVkIGNvb2tpZXMgKi8KICAgcmVtb3ZlX2V4cGlyZWQoYyk7CiAKLSAgaWYoc3RyZXF1YWwoIi0iLCBkdW1waGVyZSkpIHsKKyAgaWYoIXN0cmNtcCgiLSIsIGR1bXBoZXJlKSkgewogICAgIC8qIHVzZSBzdGRvdXQgKi8KICAgICBvdXQgPSBzdGRvdXQ7CiAgICAgdXNlX3N0ZG91dD1UUlVFOwpkaWZmIC0tZ2l0IGEvbGliL2Nvb2tpZS5oIGIvbGliL2Nvb2tpZS5oCmluZGV4IGNkN2M1NGEuLmE5YTQ1NzggMTAwNjQ0Ci0tLSBhL2xpYi9jb29raWUuaAorKysgYi9saWIvY29va2llLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTgyLDcgKzgyLDcgQEAKIAogc3RydWN0IENvb2tpZSAqQ3VybF9jb29raWVfZ2V0bGlzdChzdHJ1Y3QgQ29va2llSW5mbyAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgYm9vbCk7Ci12b2lkIEN1cmxfY29va2llX2ZyZWVsaXN0KHN0cnVjdCBDb29raWUgKmNvb2tpZXMsIGJvb2wgY29va2llc3Rvbyk7Cit2b2lkIEN1cmxfY29va2llX2ZyZWVsaXN0KHN0cnVjdCBDb29raWUgKmNvb2tpZXMpOwogdm9pZCBDdXJsX2Nvb2tpZV9jbGVhcmFsbChzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llcyk7CiB2b2lkIEN1cmxfY29va2llX2NsZWFyc2VzcyhzdHJ1Y3QgQ29va2llSW5mbyAqY29va2llcyk7CiAKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2NvbmZpZy5oLmNtYWtlIGIvbGliL2N1cmxfY29uZmlnLmguY21ha2UKaW5kZXggNjVhNDE0Yi4uMzNjMTVjYiAxMDA2NDQKLS0tIGEvbGliL2N1cmxfY29uZmlnLmguY21ha2UKKysrIGIvbGliL2N1cmxfY29uZmlnLmguY21ha2UKQEAgLTY3LDcgKzY3LDcgQEAKICNjbWFrZWRlZmluZSBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTIDEKIAogLyogdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlICovCi0jY21ha2VkZWZpbmUgQ1VSTF9FWFRFUk5fU1lNQk9MIDEKKyNjbWFrZWRlZmluZSBDVVJMX0VYVEVSTl9TWU1CT0wgJHtDVVJMX0VYVEVSTl9TWU1CT0x9CiAvKiBFbnN1cmUgdXNpbmcgQ1VSTF9FWFRFUk5fU1lNQk9MIGlzIHBvc3NpYmxlICovCiAjaWZuZGVmIENVUkxfRVhURVJOX1NZTUJPTAogI2RlZmluZSBDVVJMX0VYVEVSTl9TWU1CT0wKQEAgLTkwNiw2ICs5MDYsOSBAQAogLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQT1NJWCB0aHJlYWRlZCBETlMgbG9va3VwICovCiAjY21ha2VkZWZpbmUgVVNFX1RIUkVBRFNfUE9TSVggMQogCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFdJTjMyIHRocmVhZGVkIEROUyBsb29rdXAgKi8KKyNjbWFrZWRlZmluZSBVU0VfVEhSRUFEU19XSU4zMiAxCisKIC8qIERlZmluZSB0byBkaXNhYmxlIG5vbi1ibG9ja2luZyBzb2NrZXRzLiAqLwogI2NtYWtlZGVmaW5lIFVTRV9CTE9DS0lOR19TT0NLRVRTIDEKIApAQCAtOTMzLDExICs5MzYsMTMgQEAKIC8qIGlmIE9wZW5TU0wgaXMgaW4gdXNlICovCiAjY21ha2VkZWZpbmUgVVNFX09QRU5TU0wgMQogCisvKiB0byBlbmFibGUgTkdIVFRQMiAgKi8KKyNjbWFrZWRlZmluZSBVU0VfTkdIVFRQMiAxCisKIC8qIGlmIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGVuYWJsZWQgICovCiAjY21ha2VkZWZpbmUgVVNFX1VOSVhfU09DS0VUUwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgV2luZG93cyB0YXJnZXQgd2l0aG91dCBsYXJnZSBmaWxlCi0gICBzdXBwb3J0LiAqLworLyogRGVmaW5lIHRvIDEgaWYgeW91IGFyZSBidWlsZGluZyBhIFdpbmRvd3MgdGFyZ2V0IHdpdGggbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLwogI2NtYWtlZGVmaW5lIFVTRV9XSU4zMl9MQVJHRV9GSUxFUyAxCiAKIC8qIHRvIGVuYWJsZSBTU1BJIHN1cHBvcnQgKi8KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2VuZGlhbi5jIGIvbGliL2N1cmxfZW5kaWFuLmMKaW5kZXggNzZkZWNhNi4uYzJkMjFkZSAxMDA2NDQKLS0tIGEvbGliL2N1cmxfZW5kaWFuLmMKKysrIGIvbGliL2N1cmxfZW5kaWFuLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM3LDcgKzM3LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyLgogICovCi11bnNpZ25lZCBzaG9ydCBDdXJsX3JlYWQxNl9sZSh1bnNpZ25lZCBjaGFyICpidWYpCit1bnNpZ25lZCBzaG9ydCBDdXJsX3JlYWQxNl9sZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHJldHVybiAodW5zaWduZWQgc2hvcnQpKCgodW5zaWduZWQgc2hvcnQpYnVmWzBdKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpYnVmWzFdIDw8IDgpKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyLgogICovCi11bnNpZ25lZCBpbnQgQ3VybF9yZWFkMzJfbGUodW5zaWduZWQgY2hhciAqYnVmKQordW5zaWduZWQgaW50IEN1cmxfcmVhZDMyX2xlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKICAgcmV0dXJuICgodW5zaWduZWQgaW50KWJ1ZlswXSkgfCAoKHVuc2lnbmVkIGludClidWZbMV0gPDwgOCkgfAogICAgICAgICAgKCh1bnNpZ25lZCBpbnQpYnVmWzJdIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KWJ1ZlszXSA8PCAyNCk7CkBAIC03Nyw3ICs3Nyw3IEBACiAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyLgogICovCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdMT05HKQotdW5zaWduZWQgbG9uZyBsb25nIEN1cmxfcmVhZDY0X2xlKHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3Vuc2lnbmVkIGxvbmcgbG9uZyBDdXJsX3JlYWQ2NF9sZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcgbG9uZylidWZbMF0pIHwKICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKWJ1ZlsxXSA8PCA4KSB8CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylidWZbN10gPDwgNTYpOwogfQogI2Vsc2UKLXVuc2lnbmVkIF9faW50NjQgQ3VybF9yZWFkNjRfbGUodW5zaWduZWQgY2hhciAqYnVmKQordW5zaWduZWQgX19pbnQ2NCBDdXJsX3JlYWQ2NF9sZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHJldHVybiAoKHVuc2lnbmVkIF9faW50NjQpYnVmWzBdKSB8ICgodW5zaWduZWQgX19pbnQ2NClidWZbMV0gPDwgOCkgfAogICAgICAgICAgKCh1bnNpZ25lZCBfX2ludDY0KWJ1ZlsyXSA8PCAxNikgfCAoKHVuc2lnbmVkIF9faW50NjQpYnVmWzNdIDw8IDI0KSB8CkBAIC0xMTMsNyArMTEzLDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyLgogICovCi11bnNpZ25lZCBzaG9ydCBDdXJsX3JlYWQxNl9iZSh1bnNpZ25lZCBjaGFyICpidWYpCit1bnNpZ25lZCBzaG9ydCBDdXJsX3JlYWQxNl9iZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCiB7CiAgIHJldHVybiAodW5zaWduZWQgc2hvcnQpKCgodW5zaWduZWQgc2hvcnQpYnVmWzBdIDw8IDgpIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydClidWZbMV0pKTsKQEAgLTEzMiw3ICsxMzIsNyBAQAogICoKICAqIFJldHVybnMgdGhlIGludGVnZXIuCiAgKi8KLXVuc2lnbmVkIGludCBDdXJsX3JlYWQzMl9iZSh1bnNpZ25lZCBjaGFyICpidWYpCit1bnNpZ25lZCBpbnQgQ3VybF9yZWFkMzJfYmUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQogewogICByZXR1cm4gKCh1bnNpZ25lZCBpbnQpYnVmWzBdIDw8IDI0KSB8ICgodW5zaWduZWQgaW50KWJ1ZlsxXSA8PCAxNikgfAogICAgICAgICAgKCh1bnNpZ25lZCBpbnQpYnVmWzJdIDw8IDgpIHwgKCh1bnNpZ25lZCBpbnQpYnVmWzNdKTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogICogUmV0dXJucyB0aGUgaW50ZWdlci4KICAqLwogI2lmIGRlZmluZWQoSEFWRV9MT05HTE9ORykKLXVuc2lnbmVkIGxvbmcgbG9uZyBDdXJsX3JlYWQ2NF9iZSh1bnNpZ25lZCBjaGFyICpidWYpCit1bnNpZ25lZCBsb25nIGxvbmcgQ3VybF9yZWFkNjRfYmUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQogewogICByZXR1cm4gKCh1bnNpZ25lZCBsb25nIGxvbmcpYnVmWzBdIDw8IDU2KSB8CiAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylidWZbMV0gPDwgNDgpIHwKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpYnVmWzddKTsKIH0KICNlbHNlCi11bnNpZ25lZCBfX2ludDY0IEN1cmxfcmVhZDY0X2JlKHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3Vuc2lnbmVkIF9faW50NjQgQ3VybF9yZWFkNjRfYmUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKQogewogICByZXR1cm4gKCh1bnNpZ25lZCBfX2ludDY0KWJ1ZlswXSA8PCA1NikgfCAoKHVuc2lnbmVkIF9faW50NjQpYnVmWzFdIDw8IDQ4KSB8CiAgICAgICAgICAoKHVuc2lnbmVkIF9faW50NjQpYnVmWzJdIDw8IDQwKSB8ICgodW5zaWduZWQgX19pbnQ2NClidWZbM10gPDwgMzIpIHwKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2VuZGlhbi5oIGIvbGliL2N1cmxfZW5kaWFuLmgKaW5kZXggZGY4Mzk4Yy4uOGEyYjA3YSAxMDA2NDQKLS0tIGEvbGliL2N1cmxfZW5kaWFuLmgKKysrIGIvbGliL2N1cmxfZW5kaWFuLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIzLDMyICsyMywzMiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29udmVydHMgYSAxNi1iaXQgaW50ZWdlciBmcm9tIGxpdHRsZSBlbmRpYW4gKi8KLXVuc2lnbmVkIHNob3J0IEN1cmxfcmVhZDE2X2xlKHVuc2lnbmVkIGNoYXIgKmJ1Zik7Cit1bnNpZ25lZCBzaG9ydCBDdXJsX3JlYWQxNl9sZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpOwogCiAvKiBDb252ZXJ0cyBhIDMyLWJpdCBpbnRlZ2VyIGZyb20gbGl0dGxlIGVuZGlhbiAqLwotdW5zaWduZWQgaW50IEN1cmxfcmVhZDMyX2xlKHVuc2lnbmVkIGNoYXIgKmJ1Zik7Cit1bnNpZ25lZCBpbnQgQ3VybF9yZWFkMzJfbGUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKIAogI2lmIChDVVJMX1NJWkVPRl9DVVJMX09GRl9UID4gNCkKIC8qIENvbnZlcnRzIGEgNjQtYml0IGludGVnZXIgZnJvbSBsaXR0bGUgZW5kaWFuICovCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdMT05HKQotdW5zaWduZWQgbG9uZyBsb25nIEN1cmxfcmVhZDY0X2xlKHVuc2lnbmVkIGNoYXIgKmJ1Zik7Cit1bnNpZ25lZCBsb25nIGxvbmcgQ3VybF9yZWFkNjRfbGUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKICNlbHNlCi11bnNpZ25lZCBfX2ludDY0IEN1cmxfcmVhZDY0X2xlKHVuc2lnbmVkIGNoYXIgKmJ1Zik7Cit1bnNpZ25lZCBfX2ludDY0IEN1cmxfcmVhZDY0X2xlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAjZW5kaWYKICNlbmRpZgogCiAvKiBDb252ZXJ0cyBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYmlnIGVuZGlhbiAqLwotdW5zaWduZWQgc2hvcnQgQ3VybF9yZWFkMTZfYmUodW5zaWduZWQgY2hhciAqYnVmKTsKK3Vuc2lnbmVkIHNob3J0IEN1cmxfcmVhZDE2X2JlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAKIC8qIENvbnZlcnRzIGEgMzItYml0IGludGVnZXIgZnJvbSBiaWcgZW5kaWFuICovCi11bnNpZ25lZCBpbnQgQ3VybF9yZWFkMzJfYmUodW5zaWduZWQgY2hhciAqYnVmKTsKK3Vuc2lnbmVkIGludCBDdXJsX3JlYWQzMl9iZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpOwogCiAjaWYgKENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgPiA0KQogLyogQ29udmVydHMgYSA2NC1iaXQgaW50ZWdlciBmcm9tIGJpZyBlbmRpYW4gKi8KICNpZiBkZWZpbmVkKEhBVkVfTE9OR0xPTkcpCi11bnNpZ25lZCBsb25nIGxvbmcgQ3VybF9yZWFkNjRfYmUodW5zaWduZWQgY2hhciAqYnVmKTsKK3Vuc2lnbmVkIGxvbmcgbG9uZyBDdXJsX3JlYWQ2NF9iZShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpOwogI2Vsc2UKLXVuc2lnbmVkIF9faW50NjQgQ3VybF9yZWFkNjRfYmUodW5zaWduZWQgY2hhciAqYnVmKTsKK3Vuc2lnbmVkIF9faW50NjQgQ3VybF9yZWFkNjRfYmUoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMgYi9saWIvY3VybF9nZXRob3N0bmFtZS5jCmluZGV4IDI1OTFmZDguLjgzMzdjNzIgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX2dldGhvc3RuYW1lLmMKKysrIGIvbGliL2N1cmxfZ2V0aG9zdG5hbWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDgsOCArNDgsOCBAQAogICogRm9yIGxpYmN1cmwgc3RhdGljIGxpYnJhcnkgcmVsZWFzZSBidWlsZHMgbm8gb3ZlcnJpZGluZyB0YWtlcyBwbGFjZS4KICAqLwogCi1pbnQgQ3VybF9nZXRob3N0bmFtZShjaGFyICpuYW1lLCBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgbmFtZWxlbikgewotCitpbnQgQ3VybF9nZXRob3N0bmFtZShjaGFyICpuYW1lLCBHRVRIT1NUTkFNRV9UWVBFX0FSRzIgbmFtZWxlbikKK3sKICNpZm5kZWYgSEFWRV9HRVRIT1NUTkFNRQogCiAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIGFuZCByZXR1cm4gZmFpbHVyZSB3aGVuIHVuYXZhaWxhYmxlICovCkBAIC01OSw3ICs1OSw3IEBACiAKICNlbHNlCiAgIGludCBlcnI7Ci0gIGNoYXIqIGRvdDsKKyAgY2hhciAqZG90OwogCiAjaWZkZWYgREVCVUdCVUlMRAogCmRpZmYgLS1naXQgYS9saWIvY3VybF9nc3NhcGkuYyBiL2xpYi9jdXJsX2dzc2FwaS5jCmluZGV4IGJmN2M3NjYuLjgzZjNmYTAgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX2dzc2FwaS5jCisrKyBiL2xpYi9jdXJsX2dzc2FwaS5jCkBAIC05NCw3ICs5NCw3IEBACiAgICAgaWYoR1NTX0xPR19CVUZGRVJfTEVOID4gbGVuICsgc3RhdHVzX3N0cmluZy5sZW5ndGggKyAzKSB7CiAgICAgICBsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBHU1NfTE9HX0JVRkZFUl9MRU4gLSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIiUuKnMuICIsIChpbnQpc3RhdHVzX3N0cmluZy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKXN0YXR1c19zdHJpbmcudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopc3RhdHVzX3N0cmluZy52YWx1ZSk7CiAgICAgfQogICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZzdGF0dXNfc3RyaW5nKTsKICAgfSB3aGlsZSghR1NTX0VSUk9SKG1hal9zdGF0KSAmJiBtc2dfY3R4ICE9IDApOwpkaWZmIC0tZ2l0IGEvbGliL2N1cmxfaG1hYy5oIGIvbGliL2N1cmxfaG1hYy5oCmluZGV4IDQxNzAzYjQuLjc1NmRjOWUgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX2htYWMuaAorKysgYi9saWIvY3VybF9obWFjLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDExICsyNCwxMSBAQAogCiAjaWZuZGVmIENVUkxfRElTQUJMRV9DUllQVE9fQVVUSAogCi10eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oaW5pdF9mdW5jKSh2b2lkICogY29udGV4dCk7Ci10eXBlZGVmIHZvaWQgICAgKCogSE1BQ19odXBkYXRlX2Z1bmMpKHZvaWQgKiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKK3R5cGVkZWYgdm9pZCAgICAoKiBITUFDX2hpbml0X2Z1bmMpKHZvaWQgKmNvbnRleHQpOwordHlwZWRlZiB2b2lkICAgICgqIEhNQUNfaHVwZGF0ZV9mdW5jKSh2b2lkICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKLXR5cGVkZWYgdm9pZCAgICAoKiBITUFDX2hmaW5hbF9mdW5jKSh1bnNpZ25lZCBjaGFyICogcmVzdWx0LCB2b2lkICogY29udGV4dCk7Cit0eXBlZGVmIHZvaWQgICAgKCogSE1BQ19oZmluYWxfZnVuYykodW5zaWduZWQgY2hhciAqcmVzdWx0LCB2b2lkICpjb250ZXh0KTsKIAogCiAvKiBQZXItaGFzaCBmdW5jdGlvbiBITUFDIHBhcmFtZXRlcnMuICovCkBAIC00NiwyMSArNDYsMjEgQEAKIC8qIEhNQUMgY29tcHV0YXRpb24gY29udGV4dC4gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBITUFDX3BhcmFtcyAqICAgaG1hY19oYXNoOyAgICAgIC8qIEhhc2ggZnVuY3Rpb24gZGVmaW5pdGlvbi4gKi8KLSAgdm9pZCAqICAgICAgICAgICAgICAgIGhtYWNfaGFzaGN0eHQxOyAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgMS4gKi8KLSAgdm9pZCAqICAgICAgICAgICAgICAgIGhtYWNfaGFzaGN0eHQyOyAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgMi4gKi8KKyAgY29uc3QgSE1BQ19wYXJhbXMgKmhtYWNfaGFzaDsgLyogSGFzaCBmdW5jdGlvbiBkZWZpbml0aW9uLiAqLworICB2b2lkICpobWFjX2hhc2hjdHh0MTsgICAgICAgICAvKiBIYXNoIGZ1bmN0aW9uIGNvbnRleHQgMS4gKi8KKyAgdm9pZCAqaG1hY19oYXNoY3R4dDI7ICAgICAgICAgLyogSGFzaCBmdW5jdGlvbiBjb250ZXh0IDIuICovCiB9IEhNQUNfY29udGV4dDsKIAogCiAvKiBQcm90b3R5cGVzLiAqLwogCi1ITUFDX2NvbnRleHQgKiBDdXJsX0hNQUNfaW5pdChjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoga2V5LAorSE1BQ19jb250ZXh0ICogQ3VybF9ITUFDX2luaXQoY29uc3QgSE1BQ19wYXJhbXMgKmhhc2hwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKTsKLWludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwKK2ludCBDdXJsX0hNQUNfdXBkYXRlKEhNQUNfY29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKLWludCBDdXJsX0hNQUNfZmluYWwoSE1BQ19jb250ZXh0ICogY29udGV4dCwgdW5zaWduZWQgY2hhciAqIHJlc3VsdCk7CitpbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX250bG1fY29yZS5jIGIvbGliL2N1cmxfbnRsbV9jb3JlLmMKaW5kZXggZjNmYjAxMy4uODEyYTA3MyAxMDA2NDQKLS0tIGEvbGliL2N1cmxfbnRsbV9jb3JlLmMKKysrIGIvbGliL2N1cmxfbnRsbV9jb3JlLmMKQEAgLTc2LDYgKzc2LDExIEBACiAjICBkZWZpbmUgTUQ1X0RJR0VTVF9MRU5HVEggMTYKICMgIGRlZmluZSBNRDRfRElHRVNUX0xFTkdUSCAxNgogCisjZWxpZiBkZWZpbmVkKFVTRV9NQkVEVExTKQorCisjICBpbmNsdWRlIDxtYmVkdGxzL2Rlcy5oPgorIyAgaW5jbHVkZSA8bWJlZHRscy9tZDQuaD4KKwogI2VsaWYgZGVmaW5lZChVU0VfTlNTKQogCiAjICBpbmNsdWRlIDxuc3MuaD4KQEAgLTEwMCw3ICsxMDUsNyBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJjdXJsX250bG1fY29yZS5oIgogI2luY2x1ZGUgImN1cmxfbWQ1LmgiCiAjaW5jbHVkZSAiY3VybF9obWFjLmgiCkBAIC0xODgsNiArMTkzLDI2IEBACiAgIGdjcnlfY2lwaGVyX3NldGtleSgqZGVzLCBrZXksIHNpemVvZihrZXkpKTsKIH0KIAorI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKKworc3RhdGljIGJvb2wgZW5jcnlwdF9kZXMoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleV81NikKK3sKKyAgbWJlZHRsc19kZXNfY29udGV4dCBjdHg7CisgIGNoYXIga2V5WzhdOworCisgIC8qIEV4cGFuZCB0aGUgNTYtYml0IGtleSB0byA2NC1iaXRzICovCisgIGV4dGVuZF9rZXlfNTZfdG9fNjQoa2V5XzU2LCBrZXkpOworCisgIC8qIFNldCB0aGUga2V5IHBhcml0eSB0byBvZGQgKi8KKyAgbWJlZHRsc19kZXNfa2V5X3NldF9wYXJpdHkoKHVuc2lnbmVkIGNoYXIgKikga2V5KTsKKworICAvKiBQZXJmb3JtIHRoZSBlbmNyeXB0aW9uICovCisgIG1iZWR0bHNfZGVzX2luaXQoJmN0eCk7CisgIG1iZWR0bHNfZGVzX3NldGtleV9lbmMoJmN0eCwgKHVuc2lnbmVkIGNoYXIgKikga2V5KTsKKyAgcmV0dXJuIG1iZWR0bHNfZGVzX2NyeXB0X2VjYigmY3R4LCBpbiwgb3V0KSA9PSAwOworfQorCiAjZWxpZiBkZWZpbmVkKFVTRV9OU1MpCiAKIC8qCkBAIC00MDAsOCArNDI1LDggQEAKICAgc2V0dXBfZGVzX2tleShrZXlzICsgMTQsICZkZXMpOwogICBnY3J5X2NpcGhlcl9lbmNyeXB0KGRlcywgcmVzdWx0cyArIDE2LCA4LCBwbGFpbnRleHQsIDgpOwogICBnY3J5X2NpcGhlcl9jbG9zZShkZXMpOwotI2VsaWYgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9EQVJXSU5TU0wpIHx8IGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSBcCi0gIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKKyNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpIHx8IGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfREFSV0lOU1NMKSBcCisgIHx8IGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCiAgIGVuY3J5cHRfZGVzKHBsYWludGV4dCwgcmVzdWx0cywga2V5cyk7CiAgIGVuY3J5cHRfZGVzKHBsYWludGV4dCwgcmVzdWx0cyArIDgsIGtleXMgKyA3KTsKICAgZW5jcnlwdF9kZXMocGxhaW50ZXh0LCByZXN1bHRzICsgMTYsIGtleXMgKyAxNCk7CkBAIC00NjQsOCArNDg5LDggQEAKICAgICBzZXR1cF9kZXNfa2V5KHB3ICsgNywgJmRlcyk7CiAgICAgZ2NyeV9jaXBoZXJfZW5jcnlwdChkZXMsIGxtYnVmZmVyICsgOCwgOCwgbWFnaWMsIDgpOwogICAgIGdjcnlfY2lwaGVyX2Nsb3NlKGRlcyk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9OU1MpIHx8IGRlZmluZWQoVVNFX0RBUldJTlNTTCkgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIFwKLSAgfHwgZGVmaW5lZChVU0VfV0lOMzJfQ1JZUFRPKQorI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBkZWZpbmVkKFVTRV9EQVJXSU5TU0wpIFwKKyAgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pIHx8IGRlZmluZWQoVVNFX1dJTjMyX0NSWVBUTykKICAgICBlbmNyeXB0X2RlcyhtYWdpYywgbG1idWZmZXIsIHB3KTsKICAgICBlbmNyeXB0X2RlcyhtYWdpYywgbG1idWZmZXIgKyA4LCBwdyArIDcpOwogI2VuZGlmCkBAIC01NDMsNiArNTY4LDggQEAKICAgICBnY3J5X21kX3dyaXRlKE1ENHB3LCBwdywgMiAqIGxlbik7CiAgICAgbWVtY3B5IChudGJ1ZmZlciwgZ2NyeV9tZF9yZWFkIChNRDRwdywgMCksIE1ENF9ESUdFU1RfTEVOR1RIKTsKICAgICBnY3J5X21kX2Nsb3NlKE1ENHB3KTsKKyNlbGlmIGRlZmluZWQoVVNFX01CRURUTFMpCisgICAgbWJlZHRsc19tZDQocHcsIDIgKiBsZW4sIG50YnVmZmVyKTsKICNlbGlmIGRlZmluZWQoVVNFX05TUykgfHwgZGVmaW5lZChVU0VfT1M0MDBDUllQVE8pCiAgICAgQ3VybF9tZDRpdChudGJ1ZmZlciwgcHcsIDIgKiBsZW4pOwogI2VsaWYgZGVmaW5lZChVU0VfREFSV0lOU1NMKQpkaWZmIC0tZ2l0IGEvbGliL2N1cmxfbnRsbV93Yi5jIGIvbGliL2N1cmxfbnRsbV93Yi5jCmluZGV4IGFmZGVhMTYuLjQ2OTlkOGYgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX250bG1fd2IuYworKysgYi9saWIvY3VybF9udGxtX3diLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJjdXJsX250bG1fd2IuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJzdHJlcnJvci5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTI5MywxMSArMjk0LDEwIEBACiAgICAgICBidWZbbGVuX291dCAtIDFdID0gJ1wwJzsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBuZXdidWYgPSByZWFsbG9jKGJ1ZiwgbGVuX291dCArIE5UTE1fQlVGU0laRSk7Ci0gICAgaWYoIW5ld2J1ZikgewotICAgICAgZnJlZShidWYpOworICAgIG5ld2J1ZiA9IEN1cmxfc2FmZXJlYWxsb2MoYnVmLCBsZW5fb3V0ICsgTlRMTV9CVUZTSVpFKTsKKyAgICBpZighbmV3YnVmKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgfQorCiAgICAgYnVmID0gbmV3YnVmOwogICB9CiAKQEAgLTM0OSw3ICszNDksNyBAQAogCiAgIGlmKHByb3h5KSB7CiAgICAgYWxsb2N1c2VycHdkID0gJmNvbm4tPmFsbG9jcHRyLnByb3h5dXNlcnB3ZDsKLSAgICB1c2VycCA9IGNvbm4tPnByb3h5dXNlcjsKKyAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKICAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBhdXRocCA9ICZjb25uLT5kYXRhLT5zdGF0ZS5hdXRocHJveHk7CiAgIH0KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3Nhc2wuYyBiL2xpYi9jdXJsX3Nhc2wuYwppbmRleCAzNWU5ZmVhLi44MDdmNWRlIDEwMDY0NAotLS0gYS9saWIvY3VybF9zYXNsLmMKKysrIGIvbGliL2N1cmxfc2FzbC5jCkBAIC00Miw4ICs0Miw2IEBACiAjaW5jbHVkZSAiY3VybF9zYXNsLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJzdHJ0b2suaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiIC8qIGluY2x1ZGVkIGZvciBDdXJsX2NvbnZlcnRfLi4uIHByb3RvdHlwZXMgKi8KIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KQEAgLTE1OSw3ICsxNTcsNyBAQAogICAgIHNhc2wtPnByZWZtZWNoID0gU0FTTF9BVVRIX05PTkU7CiAgIH0KIAotICBpZihzdHJuZXF1YWwodmFsdWUsICIqIiwgbGVuKSkKKyAgaWYoIXN0cm5jbXAodmFsdWUsICIqIiwgbGVuKSkKICAgICBzYXNsLT5wcmVmbWVjaCA9IFNBU0xfQVVUSF9ERUZBVUxUOwogICBlbHNlIHsKICAgICBtZWNoYml0ID0gQ3VybF9zYXNsX2RlY29kZV9tZWNoKHZhbHVlLCBsZW4sICZtZWNobGVuKTsKQEAgLTI2NCwxMCArMjYyLDEzIEBACiAgIHNpemVfdCBsZW4gPSAwOwogICBzYXNsc3RhdGUgc3RhdGUxID0gU0FTTF9TVE9QOwogICBzYXNsc3RhdGUgc3RhdGUyID0gU0FTTF9GSU5BTDsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBsb25nIGludCBwb3J0ID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CiAjaWYgZGVmaW5lZChVU0VfS0VSQkVST1M1KQotICBjb25zdCBjaGFyKiBzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU0VSVklDRV9OQU1FXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TRVJWSUNFX05BTUVdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhc2wtPnBhcmFtcy0+c2VydmljZTsKKyAgY29uc3QgY2hhciAqc2VydmljZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NFUlZJQ0VfTkFNRV0gPworICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NFUlZJQ0VfTkFNRV0gOgorICAgIHNhc2wtPnBhcmFtcy0+c2VydmljZTsKICNlbmRpZgogCiAgIHNhc2wtPmZvcmNlX2lyID0gZm9yY2VfaXI7ICAgIC8qIExhdGNoIGZvciBmdXR1cmUgdXNlICovCkBAIC0yODgsNyArMjg5LDggQEAKICAgfQogICBlbHNlIGlmKGNvbm4tPmJpdHMudXNlcl9wYXNzd2QpIHsKICNpZiBkZWZpbmVkKFVTRV9LRVJCRVJPUzUpCi0gICAgaWYoZW5hYmxlZG1lY2hzICYgU0FTTF9NRUNIX0dTU0FQSSkgeworICAgIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfR1NTQVBJKSAmJiBDdXJsX2F1dGhfaXNfZ3NzYXBpX3N1cHBvcnRlZCgpICYmCisgICAgICAgQ3VybF9hdXRoX3VzZXJfY29udGFpbnNfZG9tYWluKGNvbm4tPnVzZXIpKSB7CiAgICAgICBzYXNsLT5tdXR1YWxfYXV0aCA9IEZBTFNFOyAvKiBUT0RPOiBDYWxjdWxhdGUgbXV0dWFsIGF1dGhlbnRpY2F0aW9uICovCiAgICAgICBtZWNoID0gU0FTTF9NRUNIX1NUUklOR19HU1NBUEk7CiAgICAgICBzdGF0ZTEgPSBTQVNMX0dTU0FQSTsKQEAgLTMwOCw3ICszMTAsOCBAQAogICAgIGVsc2UKICNlbmRpZgogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKLSAgICBpZihlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfRElHRVNUX01ENSkgeworICAgIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfRElHRVNUX01ENSkgJiYKKyAgICAgICBDdXJsX2F1dGhfaXNfZGlnZXN0X3N1cHBvcnRlZCgpKSB7CiAgICAgICBtZWNoID0gU0FTTF9NRUNIX1NUUklOR19ESUdFU1RfTUQ1OwogICAgICAgc3RhdGUxID0gU0FTTF9ESUdFU1RNRDU7CiAgICAgICBzYXNsLT5hdXRodXNlZCA9IFNBU0xfTUVDSF9ESUdFU1RfTUQ1OwpAQCAtMzIxLDcgKzMyNCw3IEBACiAgICAgZWxzZQogI2VuZGlmCiAjaWZkZWYgVVNFX05UTE0KLSAgICBpZihlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfTlRMTSkgeworICAgIGlmKChlbmFibGVkbWVjaHMgJiBTQVNMX01FQ0hfTlRMTSkgJiYgQ3VybF9hdXRoX2lzX250bG1fc3VwcG9ydGVkKCkpIHsKICAgICAgIG1lY2ggPSBTQVNMX01FQ0hfU1RSSU5HX05UTE07CiAgICAgICBzdGF0ZTEgPSBTQVNMX05UTE07CiAgICAgICBzdGF0ZTIgPSBTQVNMX05UTE1fVFlQRTJNU0c7CkBAIC0zNDEsOCArMzQ0LDggQEAKIAogICAgICAgaWYoZm9yY2VfaXIgfHwgZGF0YS0+c2V0LnNhc2xfaXIpCiAgICAgICAgIHJlc3VsdCA9IEN1cmxfYXV0aF9jcmVhdGVfb2F1dGhfYmVhcmVyX21lc3NhZ2UoZGF0YSwgY29ubi0+dXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzcCwgJmxlbik7CiAgICAgfQpAQCAtNDA4LDYgKzQxMSw5IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzYXNsc3RhdGUgbmV3c3RhdGUgPSBTQVNMX0ZJTkFMOwogICBjaGFyICpyZXNwID0gTlVMTDsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBsb25nIGludCBwb3J0ID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIKQogICBjaGFyICpzZXJ2ZXJkYXRhOwogICBjaGFyICpjaGxnID0gTlVMTDsKQEAgLTU0Miw4ICs1NDgsOCBAQAogICAgIC8qIENyZWF0ZSB0aGUgYXV0aG9yaXNhdGlvbiBtZXNzYWdlICovCiAgICAgaWYoc2FzbC0+YXV0aHVzZWQgPT0gU0FTTF9NRUNIX09BVVRIQkVBUkVSKSB7CiAgICAgICByZXN1bHQgPSBDdXJsX2F1dGhfY3JlYXRlX29hdXRoX2JlYXJlcl9tZXNzYWdlKGRhdGEsIGNvbm4tPnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPm9hdXRoX2JlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3AsICZsZW4pOwogCmRpZmYgLS1naXQgYS9saWIvY3VybF9zZWMuaCBiL2xpYi9jdXJsX3NlYy5oCmluZGV4IDNmOTRlMTQuLjA3M2E5ODEgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX3NlYy5oCisrKyBiL2xpYi9jdXJsX3NlYy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMCw4ICszMCw4IEBACiAgIHZvaWQgKCplbmQpKHZvaWQgKik7CiAgIGludCAoKmNoZWNrX3Byb3QpKHZvaWQgKiwgaW50KTsKICAgaW50ICgqb3ZlcmhlYWQpKHZvaWQgKiwgaW50LCBpbnQpOwotICBpbnQgKCplbmNvZGUpKHZvaWQgKiwgY29uc3Qgdm9pZCosIGludCwgaW50LCB2b2lkKiopOwotICBpbnQgKCpkZWNvZGUpKHZvaWQgKiwgdm9pZCosIGludCwgaW50LCBzdHJ1Y3QgY29ubmVjdGRhdGEgKik7CisgIGludCAoKmVuY29kZSkodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgaW50LCB2b2lkICoqKTsKKyAgaW50ICgqZGVjb2RlKSh2b2lkICosIHZvaWQgKiwgaW50LCBpbnQsIHN0cnVjdCBjb25uZWN0ZGF0YSAqKTsKIH07CiAKICNkZWZpbmUgQVVUSF9PSyAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3NldHVwLmggYi9saWIvY3VybF9zZXR1cC5oCmluZGV4IDNmZTAwZGMuLmQyNjc5MTkgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJsX3NldHVwLmgKKysrIGIvbGliL2N1cmxfc2V0dXAuaApAQCAtNDQwLDggKzQ0MCw4IEBACiAKICMgIGlmZGVmIF9fbWluaXgKICAgICAgLyogTWluaXggMyB2ZXJzaW9ucyB1cCB0byBhdCBsZWFzdCAzLjEuMyBhcmUgbWlzc2luZyB0aGVzZSBwcm90b3R5cGVzICovCi0gICAgIGV4dGVybiBjaGFyICogc3RydG9rX3IoY2hhciAqcywgY29uc3QgY2hhciAqZGVsaW0sIGNoYXIgKipsYXN0KTsKLSAgICAgZXh0ZXJuIHN0cnVjdCB0bSAqIGdtdGltZV9yKGNvbnN0IHRpbWVfdCAqIGNvbnN0IHRpbWVwLCBzdHJ1Y3QgdG0gKnRtcCk7CisgICAgIGV4dGVybiBjaGFyICpzdHJ0b2tfcihjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAqKmxhc3QpOworICAgICBleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgc3RydWN0IHRtICp0bXApOwogIyAgZW5kaWYKIAogIyAgZGVmaW5lIERJUl9DSEFSICAgICAgIi8iCkBAIC01NzIsMTAgKzU3Miw5IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0xJQklETikgJiYgZGVmaW5lZChIQVZFX1RMRF9IKQotLyogVGhlIGxpYiB3YXMgcHJlc2VudCBhbmQgdGhlIHRsZC5oIGhlYWRlciAod2hpY2ggaXMgbWlzc2luZyBpbiBsaWJpZG4gMC4zLlgKLSAgIGJ1dCB3ZSBvbmx5IHdvcmsgd2l0aCBsaWJpZG4gMC40LjEgb3IgbGF0ZXIpICovCi0jZGVmaW5lIFVTRV9MSUJJRE4KKyNpZiBkZWZpbmVkKEhBVkVfTElCSUROMikgJiYgZGVmaW5lZChIQVZFX0lETjJfSCkKKy8qIFRoZSBsaWIgYW5kIGhlYWRlciBhcmUgcHJlc2VudCAqLworI2RlZmluZSBVU0VfTElCSUROMgogI2VuZGlmCiAKICNkZWZpbmUgTElCSUROX1JFUVVJUkVEX1ZFUlNJT04gIjAuNC4xIgpAQCAtNjA2LDYgKzYwNSwxMyBAQAogICAgIGRlZmluZWQoVVNFX09TNDAwQ1JZUFRPKSB8fCBkZWZpbmVkKFVTRV9XSU4zMl9DUllQVE8pCiAKICNkZWZpbmUgVVNFX05UTE0KKworI2VsaWYgZGVmaW5lZChVU0VfTUJFRFRMUykKKyMgIGluY2x1ZGUgPG1iZWR0bHMvbWQ0Lmg+CisjICBpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCisjZGVmaW5lIFVTRV9OVExNCisjICBlbmRpZgorCiAjZW5kaWYKICNlbmRpZgogCkBAIC03MTQsNCArNzIwLDE0IEBACiAjICBlbmRpZgogI2VuZGlmIC8qIERPTlRfVVNFX1JFQ1ZfQkVGT1JFX1NFTkRfV09SS0FST1VORFMgKi8KIAorLyogRGV0ZWN0IFdpbmRvd3MgQXBwIGVudmlyb25tZW50IHdoaWNoIGhhcyBhIHJlc3RyaWN0ZWQgYWNjZXNzCisgKiB0byB0aGUgV2luMzIgQVBJcy4gKi8KKyMgaWYgZGVmaW5lZChfV0lOMzJfV0lOTlQpICYmIChfV0lOMzJfV0lOTlQgPj0gMHgwNjAyKQorIyAgaW5jbHVkZSA8d2luYXBpZmFtaWx5Lmg+CisjICBpZiBXSU5BUElfRkFNSUxZX1BBUlRJVElPTihXSU5BUElfUEFSVElUSU9OX0FQUCkgJiYgXAorICAgICAhV0lOQVBJX0ZBTUlMWV9QQVJUSVRJT04oV0lOQVBJX1BBUlRJVElPTl9ERVNLVE9QKQorIyAgICBkZWZpbmUgQ1VSTF9XSU5ET1dTX0FQUAorIyAgZW5kaWYKKyMgZW5kaWYKKwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3NzcGkuYyBiL2xpYi9jdXJsX3NzcGkuYwppbmRleCBlZTNmMWIxLi4xMWE3MTIwIDEwMDY0NAotLS0gYS9saWIvY3VybF9zc3BpLmMKKysrIGIvbGliL2N1cmxfc3NwaS5jCkBAIC02NCw2ICs2NCwxMiBAQAogICoKICAqIE9uY2UgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBleGVjdXRlZCwgV2luZG93cyBTU1BJIGZ1bmN0aW9ucyBjYW4gYmUKICAqIGNhbGxlZCB0aHJvdWdoIHRoZSBTZWN1cml0eSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSBkaXNwYXRjaCB0YWJsZS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIE5vbmUuCisgKgorICogUmV0dXJucyBDVVJMRV9PSyBvbiBzdWNjZXNzLgogICovCiBDVVJMY29kZSBDdXJsX3NzcGlfZ2xvYmFsX2luaXQodm9pZCkKIHsKQEAgLTEwMiw4ICsxMDgsMTEgQEAKICAqIEN1cmxfc3NwaV9nbG9iYWxfY2xlYW51cCgpCiAgKgogICogVGhpcyBkZWluaXRpYWxpemVzIHRoZSBTZWN1cml0eSBTZXJ2aWNlIFByb3ZpZGVyIEludGVyZmFjZSBmcm9tIGxpYmN1cmwuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBOb25lLgogICovCi0KIHZvaWQgQ3VybF9zc3BpX2dsb2JhbF9jbGVhbnVwKHZvaWQpCiB7CiAgIGlmKHNfaFNlY0RsbCkgewpAQCAtMjA1LDYgKzIxNCwxNSBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKKy8qCisgKiBDdXJsX3NzcGlfZnJlZV9pZGVudGl0eSgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGZyZWUgdGhlIGNvbnRlbnRzIG9mIGEgU1NQSSBpZGVudGlmaWVyIHN0cnVjdHVyZS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGlkZW50aXR5IFtpbi9vdXRdIC0gVGhlIGlkZW50aXR5IHN0cnVjdHVyZS4KKyAqLwogdm9pZCBDdXJsX3NzcGlfZnJlZV9pZGVudGl0eShTRUNfV0lOTlRfQVVUSF9JREVOVElUWSAqaWRlbnRpdHkpCiB7CiAgIGlmKGlkZW50aXR5KSB7CmRpZmYgLS1naXQgYS9saWIvY3VybF90aHJlYWRzLmMgYi9saWIvY3VybF90aHJlYWRzLmMKaW5kZXggYzk4ZDhiYi4uZDg4MjY5OCAxMDA2NDQKLS0tIGEvbGliL2N1cmxfdGhyZWFkcy5jCisrKyBiL2xpYi9jdXJsX3RocmVhZHMuYwpAQCAtNTksNyArNTksNyBAQAogICByZXR1cm4gMDsKIH0KIAotY3VybF90aHJlYWRfdCBDdXJsX3RocmVhZF9jcmVhdGUodW5zaWduZWQgaW50ICgqZnVuYykgKHZvaWQqKSwgdm9pZCAqYXJnKQorY3VybF90aHJlYWRfdCBDdXJsX3RocmVhZF9jcmVhdGUodW5zaWduZWQgaW50ICgqZnVuYykgKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKICAgY3VybF90aHJlYWRfdCB0ID0gbWFsbG9jKHNpemVvZihwdGhyZWFkX3QpKTsKICAgc3RydWN0IGN1cmxfYWN0dWFsX2NhbGwgKmFjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3VybF9hY3R1YWxfY2FsbCkpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICNlbGlmIGRlZmluZWQoVVNFX1RIUkVBRFNfV0lOMzIpCiAKLWN1cmxfdGhyZWFkX3QgQ3VybF90aHJlYWRfY3JlYXRlKHVuc2lnbmVkIGludCAoQ1VSTF9TVERDQUxMICpmdW5jKSAodm9pZCopLAorY3VybF90aHJlYWRfdCBDdXJsX3RocmVhZF9jcmVhdGUodW5zaWduZWQgaW50IChDVVJMX1NURENBTEwgKmZ1bmMpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQogewogI2lmZGVmIF9XSU4zMl9XQ0UKZGlmZiAtLWdpdCBhL2xpYi9jdXJsX3RocmVhZHMuaCBiL2xpYi9jdXJsX3RocmVhZHMuaAppbmRleCA4Y2JhYzYzLi4wNzc4ZGQ1IDEwMDY0NAotLS0gYS9saWIvY3VybF90aHJlYWRzLmgKKysrIGIvbGliL2N1cmxfdGhyZWFkcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MCw3ICs1MCw3IEBACiAKICNpZiBkZWZpbmVkKFVTRV9USFJFQURTX1BPU0lYKSB8fCBkZWZpbmVkKFVTRV9USFJFQURTX1dJTjMyKQogCi1jdXJsX3RocmVhZF90IEN1cmxfdGhyZWFkX2NyZWF0ZSh1bnNpZ25lZCBpbnQgKENVUkxfU1REQ0FMTCAqZnVuYykgKHZvaWQqKSwKK2N1cmxfdGhyZWFkX3QgQ3VybF90aHJlYWRfY3JlYXRlKHVuc2lnbmVkIGludCAoQ1VSTF9TVERDQUxMICpmdW5jKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CiAKIHZvaWQgQ3VybF90aHJlYWRfZGVzdHJveShjdXJsX3RocmVhZF90IGhuZCk7CmRpZmYgLS1naXQgYS9saWIvY3VybHguaCBiL2xpYi9jdXJseC5oCmluZGV4IDQ0OGEzNGYuLjYxNjhkYzEgMTAwNjQ0Ci0tLSBhL2xpYi9jdXJseC5oCisrKyBiL2xpYi9jdXJseC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNCw4ICszNCw4IEBACiAgICBmdW5jdGlvbnMgd2hpbGUgdGhleSBzdGlsbCBhcmUgb2ZmZXJlZCBwdWJsaWNseS4gVGhleSB3aWxsIGJlIG1hZGUgbGlicmFyeS0KICAgIHByaXZhdGUgb25lIGRheSAqLwogCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKLS8qICJzdHJlcXVhbC5oIiBwcm92aWRlcyB0aGUgc3RyZXF1YWwgcHJvdG9zICovCisjaW5jbHVkZSAic3RyY2FzZS5oIgorLyogInN0cmNhc2UuaCIgcHJvdmlkZXMgdGhlIHN0cmNhc2Vjb21wYXJlIHByb3RvcyAqLwogCiAjaW5jbHVkZSAic3RydG9vZmZ0LmgiCiAvKiAic3RydG9vZmZ0LmgiIHByb3ZpZGVzIHRoaXMgZnVuY3Rpb246IGN1cmx4X3N0cnRvb2ZmdCgpLCByZXR1cm5zIGEKQEAgLTY3LDE1ICs2NywxMiBAQAogICAgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIGxpYmN1cmwgb2ZmaWNpYWwgQVBJOgogICAgY3VybHhfZ2V0ZW52CiAgICBjdXJseF9tcHJpbnRmIChhbmQgaXRzIHZhcmlhdGlvbnMpCi0gICBjdXJseF9zdHJlcXVhbAotICAgY3VybHhfc3RybmVxdWFsCisgICBjdXJseF9zdHJjYXNlY29tcGFyZQorICAgY3VybHhfc3RybmNhc2Vjb21wYXJlCiAKICovCiAKICNkZWZpbmUgY3VybHhfZ2V0ZW52IGN1cmxfZ2V0ZW52Ci0jZGVmaW5lIGN1cmx4X3N0cmVxdWFsIGN1cmxfc3RyZXF1YWwKLSNkZWZpbmUgY3VybHhfc3RybmVxdWFsIGN1cmxfc3RybmVxdWFsCi0jZGVmaW5lIGN1cmx4X3Jhd19lcXVhbCBDdXJsX3Jhd19lcXVhbAogI2RlZmluZSBjdXJseF9tdnNucHJpbnRmIGN1cmxfbXZzbnByaW50ZgogI2RlZmluZSBjdXJseF9tc25wcmludGYgY3VybF9tc25wcmludGYKICNkZWZpbmUgY3VybHhfbWFwcmludGYgY3VybF9tYXByaW50ZgpkaWZmIC0tZ2l0IGEvbGliL2RpY3QuYyBiL2xpYi9kaWN0LmMKaW5kZXggYTdiNTk2NS4uNjlkZWZjNCAxMDA2NDQKLS0tIGEvbGliL2RpY3QuYworKysgYi9saWIvZGljdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MiwxMSArNTIsMTAgQEAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KICNpbmNsdWRlICJ0cmFuc2Zlci5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0KKyNpbmNsdWRlICJlc2NhcGUuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCiAjaW5jbHVkZSAiZGljdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKQEAgLTk2LDEyICs5NSwxMiBAQAogICBjaGFyICpuZXdwOwogICBjaGFyICpkaWN0cDsKICAgY2hhciAqcHRyOwotICBpbnQgbGVuOworICBzaXplX3QgbGVuOwogICBjaGFyIGNoOwogICBpbnQgb2xlbj0wOwogCi0gIG5ld3AgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgaW5wdXRidWZmLCAwLCAmbGVuKTsKLSAgaWYoIW5ld3ApCisgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIGlucHV0YnVmZiwgMCwgJm5ld3AsICZsZW4sIEZBTFNFKTsKKyAgaWYoIW5ld3AgfHwgcmVzdWx0KQogICAgIHJldHVybiBOVUxMOwogCiAgIGRpY3RwID0gbWFsbG9jKCgoc2l6ZV90KWxlbikqMiArIDEpOyAvKiBhZGQgb25lIGZvciB0ZXJtaW5hdGluZyB6ZXJvICovCkBAIC0xNDUsOSArMTQ0LDkgQEAKICAgICAvKiBBVVRIIGlzIG1pc3NpbmcgKi8KICAgfQogCi0gIGlmKEN1cmxfcmF3X25lcXVhbChwYXRoLCBESUNUX01BVENILCBzaXplb2YoRElDVF9NQVRDSCktMSkgfHwKLSAgICAgIEN1cmxfcmF3X25lcXVhbChwYXRoLCBESUNUX01BVENIMiwgc2l6ZW9mKERJQ1RfTUFUQ0gyKS0xKSB8fAotICAgICAgQ3VybF9yYXdfbmVxdWFsKHBhdGgsIERJQ1RfTUFUQ0gzLCBzaXplb2YoRElDVF9NQVRDSDMpLTEpKSB7CisgIGlmKHN0cm5jYXNlY29tcGFyZShwYXRoLCBESUNUX01BVENILCBzaXplb2YoRElDVF9NQVRDSCktMSkgfHwKKyAgICAgc3RybmNhc2Vjb21wYXJlKHBhdGgsIERJQ1RfTUFUQ0gyLCBzaXplb2YoRElDVF9NQVRDSDIpLTEpIHx8CisgICAgIHN0cm5jYXNlY29tcGFyZShwYXRoLCBESUNUX01BVENIMywgc2l6ZW9mKERJQ1RfTUFUQ0gzKS0xKSkgewogCiAgICAgd29yZCA9IHN0cmNocihwYXRoLCAnOicpOwogICAgIGlmKHdvcmQpIHsKQEAgLTIwMyw5ICsyMDIsOSBAQAogICAgIEN1cmxfc2V0dXBfdHJhbnNmZXIoY29ubiwgRklSU1RTT0NLRVQsIC0xLCBGQUxTRSwgYnl0ZWNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgLTEsIE5VTEwpOyAvKiBubyB1cGxvYWQgKi8KICAgfQotICBlbHNlIGlmKEN1cmxfcmF3X25lcXVhbChwYXRoLCBESUNUX0RFRklORSwgc2l6ZW9mKERJQ1RfREVGSU5FKS0xKSB8fAotICAgICAgICAgICBDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9ERUZJTkUyLCBzaXplb2YoRElDVF9ERUZJTkUyKS0xKSB8fAotICAgICAgICAgICBDdXJsX3Jhd19uZXF1YWwocGF0aCwgRElDVF9ERUZJTkUzLCBzaXplb2YoRElDVF9ERUZJTkUzKS0xKSkgeworICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShwYXRoLCBESUNUX0RFRklORSwgc2l6ZW9mKERJQ1RfREVGSU5FKS0xKSB8fAorICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShwYXRoLCBESUNUX0RFRklORTIsIHNpemVvZihESUNUX0RFRklORTIpLTEpIHx8CisgICAgICAgICAgc3RybmNhc2Vjb21wYXJlKHBhdGgsIERJQ1RfREVGSU5FMywgc2l6ZW9mKERJQ1RfREVGSU5FMyktMSkpIHsKIAogICAgIHdvcmQgPSBzdHJjaHIocGF0aCwgJzonKTsKICAgICBpZih3b3JkKSB7CmRpZmYgLS1naXQgYS9saWIvZWFzeS5jIGIvbGliL2Vhc3kuYwppbmRleCBkYzcxMzlmLi4xMjQyMzY5IDEwMDY0NAotLS0gYS9saWIvZWFzeS5jCisrKyBiL2xpYi9lYXN5LmMKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgogCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKICNpbmNsdWRlICJ1cmxkYXRhLmgiCiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSAidHJhbnNmZXIuaCIKQEAgLTE0NCwyOCArMTQzLDYgQEAKICAgcmV0dXJuIENVUkxFX09LOwogfQogCi0jaWZkZWYgVVNFX0xJQklETgotLyoKLSAqIEluaXRpYWxpc2UgdXNlIG9mIElETkEgbGlicmFyeS4KLSAqIEl0IGZhbGxzIGJhY2sgdG8gQVNDSUkgaWYgJENIQVJTRVQgaXNuJ3QgZGVmaW5lZC4gVGhpcyBkb2Vzbid0IHdvcmsgZm9yCi0gKiBpZG5hX3RvX2FzY2lpX2x6KCkuCi0gKi8KLXN0YXRpYyB2b2lkIGlkbmFfaW5pdCAodm9pZCkKLXsKLSNpZmRlZiBXSU4zMgotICBjaGFyIGJ1Zls2MF07Ci0gIFVJTlQgY3AgPSBHZXRBQ1AoKTsKLQotICBpZighZ2V0ZW52KCJDSEFSU0VUIikgJiYgY3AgPiAwKSB7Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkNIQVJTRVQ9Y3AldSIsIGNwKTsKLSAgICBwdXRlbnYoYnVmKTsKLSAgfQotI2Vsc2UKLSAgLyogdG8gZG8/ICovCi0jZW5kaWYKLX0KLSNlbmRpZiAgLyogVVNFX0xJQklETiAqLwotCiAvKiB0cnVlIGdsb2JhbHMgLS0gZm9yIGN1cmxfZ2xvYmFsX2luaXQoKSBhbmQgY3VybF9nbG9iYWxfY2xlYW51cCgpICovCiBzdGF0aWMgdW5zaWduZWQgaW50ICBpbml0aWFsaXplZDsKIHN0YXRpYyBsb25nICAgICAgICAgIGluaXRfZmxhZ3M7CkBAIC0yMTcsNyArMTk0LDcgQEAKICNlbmRpZgogCiAvKioKLSAqIGN1cmxfZ2xvYmFsX2luaXQoKSBnbG9iYWxseSBpbml0aWFsaXplcyBjVVJMIGdpdmVuIGEgYml0d2lzZSBzZXQgb2YgdGhlCisgKiBjdXJsX2dsb2JhbF9pbml0KCkgZ2xvYmFsbHkgaW5pdGlhbGl6ZXMgY3VybCBnaXZlbiBhIGJpdHdpc2Ugc2V0IG9mIHRoZQogICogZGlmZmVyZW50IGZlYXR1cmVzIG9mIHdoYXQgdG8gaW5pdGlhbGl6ZS4KICAqLwogc3RhdGljIENVUkxjb2RlIGdsb2JhbF9pbml0KGxvbmcgZmxhZ3MsIGJvb2wgbWVtb3J5ZnVuY3MpCkBAIC0yNjIsMTAgKzIzOSw2IEBACiAgIH0KICNlbmRpZgogCi0jaWZkZWYgVVNFX0xJQklETgotICBpZG5hX2luaXQoKTsKLSNlbmRpZgotCiAgIGlmKEN1cmxfcmVzb2x2ZXJfZ2xvYmFsX2luaXQoKSkgewogICAgIERFQlVHRihmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiByZXNvbHZlcl9nbG9iYWxfaW5pdCBmYWlsZWRcbiIpKTsKICAgICByZXR1cm4gQ1VSTEVfRkFJTEVEX0lOSVQ7CkBAIC0yOTIsNyArMjY1LDcgQEAKIAogCiAvKioKLSAqIGN1cmxfZ2xvYmFsX2luaXQoKSBnbG9iYWxseSBpbml0aWFsaXplcyBjVVJMIGdpdmVuIGEgYml0d2lzZSBzZXQgb2YgdGhlCisgKiBjdXJsX2dsb2JhbF9pbml0KCkgZ2xvYmFsbHkgaW5pdGlhbGl6ZXMgY3VybCBnaXZlbiBhIGJpdHdpc2Ugc2V0IG9mIHRoZQogICogZGlmZmVyZW50IGZlYXR1cmVzIG9mIHdoYXQgdG8gaW5pdGlhbGl6ZS4KICAqLwogQ1VSTGNvZGUgY3VybF9nbG9iYWxfaW5pdChsb25nIGZsYWdzKQpAQCAtMzAxLDcgKzI3NCw3IEBACiB9CiAKIC8qCi0gKiBjdXJsX2dsb2JhbF9pbml0X21lbSgpIGdsb2JhbGx5IGluaXRpYWxpemVzIGNVUkwgYW5kIGFsc28gcmVnaXN0ZXJzIHRoZQorICogY3VybF9nbG9iYWxfaW5pdF9tZW0oKSBnbG9iYWxseSBpbml0aWFsaXplcyBjdXJsIGFuZCBhbHNvIHJlZ2lzdGVycyB0aGUKICAqIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZXMuCiAgKi8KIENVUkxjb2RlIGN1cmxfZ2xvYmFsX2luaXRfbWVtKGxvbmcgZmxhZ3MsIGN1cmxfbWFsbG9jX2NhbGxiYWNrIG0sCkBAIC0zMzMsNyArMzA2LDcgQEAKIH0KIAogLyoqCi0gKiBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgZ2xvYmFsbHkgY2xlYW51cHMgY1VSTCwgdXNlcyB0aGUgdmFsdWUgb2YKKyAqIGN1cmxfZ2xvYmFsX2NsZWFudXAoKSBnbG9iYWxseSBjbGVhbnVwcyBjdXJsLCB1c2VzIHRoZSB2YWx1ZSBvZgogICogImluaXRfZmxhZ3MiIHRvIGRldGVybWluZSB3aGF0IG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgYW5kIHdoYXQgZG9lc24ndC4KICAqLwogdm9pZCBjdXJsX2dsb2JhbF9jbGVhbnVwKHZvaWQpCkBAIC05NTQsNiArOTI3LDggQEAKIAogICBDdXJsX2NvbnZlcnRfc2V0dXAob3V0Y3VybCk7CiAKKyAgQ3VybF9pbml0aW5mbyhvdXRjdXJsKTsKKwogICBvdXRjdXJsLT5tYWdpYyA9IENVUkxFQVNZX01BR0lDX05VTUJFUjsKIAogICAvKiB3ZSByZWFjaCB0aGlzIHBvaW50IGFuZCB0aHVzIHdlIGFyZSBPSyAqLwpAQCAtOTk1LDYgKzk3MCw5IEBACiAgIC8qIHplcm8gb3V0IFByb2dyZXNzIGRhdGE6ICovCiAgIG1lbXNldCgmZGF0YS0+cHJvZ3Jlc3MsIDAsIHNpemVvZihzdHJ1Y3QgUHJvZ3Jlc3MpKTsKIAorICAvKiB6ZXJvIG91dCBQdXJlSW5mbyBkYXRhOiAqLworICBDdXJsX2luaXRpbmZvKGRhdGEpOworCiAgIGRhdGEtPnByb2dyZXNzLmZsYWdzIHw9IFBHUlNfSElERTsKICAgZGF0YS0+c3RhdGUuY3VycmVudF9zcGVlZCA9IC0xOyAvKiBpbml0IHRvIG5lZ2F0aXZlID09IGltcG9zc2libGUgKi8KIH0KQEAgLTEwNDQsNyArMTAyMiw3IEBACiAgIGlmKCFyZXN1bHQgJiYKICAgICAgKChuZXdzdGF0ZSYoS0VFUF9SRUNWX1BBVVNFfEtFRVBfU0VORF9QQVVTRSkpICE9CiAgICAgICAoS0VFUF9SRUNWX1BBVVNFfEtFRVBfU0VORF9QQVVTRSkpICkKLSAgICBDdXJsX2V4cGlyZShkYXRhLCAxKTsgLyogZ2V0IHRoaXMgaGFuZGxlIGdvaW5nIGFnYWluICovCisgICAgQ3VybF9leHBpcmUoZGF0YSwgMCk7IC8qIGdldCB0aGlzIGhhbmRsZSBnb2luZyBhZ2FpbiAqLwogCiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9saWIvZXNjYXBlLmMgYi9saWIvZXNjYXBlLmMKaW5kZXggMDQyMzBiNC4uOWZiOGQzZSAxMDA2NDQKLS0tIGEvbGliL2VzY2FwZS5jCisrKyBiL2xpYi9lc2NhcGUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIndhcm5sZXNzLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgpAQCAtNzgsMTUgKzc5LDIxIEBACiBjaGFyICpjdXJsX2Vhc3lfZXNjYXBlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlubGVuZ3RoKQogewotICBzaXplX3QgYWxsb2MgPSAoaW5sZW5ndGg/KHNpemVfdClpbmxlbmd0aDpzdHJsZW4oc3RyaW5nKSkrMTsKKyAgc2l6ZV90IGFsbG9jOwogICBjaGFyICpuczsKICAgY2hhciAqdGVzdGluZ19wdHIgPSBOVUxMOwogICB1bnNpZ25lZCBjaGFyIGluOyAvKiB3ZSBuZWVkIHRvIHRyZWF0IHRoZSBjaGFyYWN0ZXJzIHVuc2lnbmVkICovCi0gIHNpemVfdCBuZXdsZW4gPSBhbGxvYzsKKyAgc2l6ZV90IG5ld2xlbjsKICAgc2l6ZV90IHN0cmluZGV4PTA7CiAgIHNpemVfdCBsZW5ndGg7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAorICBpZihpbmxlbmd0aCA8IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgYWxsb2MgPSAoaW5sZW5ndGg/KHNpemVfdClpbmxlbmd0aDpzdHJsZW4oc3RyaW5nKSkrMTsKKyAgbmV3bGVuID0gYWxsb2M7CisKICAgbnMgPSBtYWxsb2MoYWxsb2MpOwogICBpZighbnMpCiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMDMsMTEgKzExMCw5IEBACiAgICAgICBuZXdsZW4gKz0gMjsgLyogdGhlIHNpemUgZ3Jvd3Mgd2l0aCB0d28sIHNpbmNlIHRoaXMnbGwgYmVjb21lIGEgJVhYICovCiAgICAgICBpZihuZXdsZW4gPiBhbGxvYykgewogICAgICAgICBhbGxvYyAqPSAyOwotICAgICAgICB0ZXN0aW5nX3B0ciA9IHJlYWxsb2MobnMsIGFsbG9jKTsKLSAgICAgICAgaWYoIXRlc3RpbmdfcHRyKSB7Ci0gICAgICAgICAgZnJlZShucyk7CisgICAgICAgIHRlc3RpbmdfcHRyID0gQ3VybF9zYWZlcmVhbGxvYyhucywgYWxsb2MpOworICAgICAgICBpZighdGVzdGluZ19wdHIpCiAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgbnMgPSB0ZXN0aW5nX3B0cjsKICAgICAgICAgfQpAQCAtMjExLDE0ICsyMTYsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLCBpbnQgKm9sZW4pCiB7CiAgIGNoYXIgKnN0ciA9IE5VTEw7Ci0gIHNpemVfdCBpbnB1dGxlbiA9IGxlbmd0aDsKLSAgc2l6ZV90IG91dHB1dGxlbjsKLSAgQ1VSTGNvZGUgcmVzID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgc3RyaW5nLCBpbnB1dGxlbiwgJnN0ciwgJm91dHB1dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOwotICBpZihyZXMpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmKG9sZW4pCi0gICAgKm9sZW4gPSBjdXJseF91enRvc2kob3V0cHV0bGVuKTsKKyAgaWYobGVuZ3RoID49IDApIHsKKyAgICBzaXplX3QgaW5wdXRsZW4gPSBsZW5ndGg7CisgICAgc2l6ZV90IG91dHB1dGxlbjsKKyAgICBDVVJMY29kZSByZXMgPSBDdXJsX3VybGRlY29kZShkYXRhLCBzdHJpbmcsIGlucHV0bGVuLCAmc3RyLCAmb3V0cHV0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgICBpZihyZXMpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmKG9sZW4pIHsKKyAgICAgIGlmKG91dHB1dGxlbiA8PSAoc2l6ZV90KSBJTlRfTUFYKQorICAgICAgICAqb2xlbiA9IGN1cmx4X3V6dG9zaShvdXRwdXRsZW4pOworICAgICAgZWxzZQorICAgICAgICAvKiB0b28gbGFyZ2UgdG8gcmV0dXJuIGluIGFuIGludCwgZmFpbCEgKi8KKyAgICAgICAgQ3VybF9zYWZlZnJlZShzdHIpOworICAgIH0KKyAgfQogICByZXR1cm4gc3RyOwogfQogCmRpZmYgLS1naXQgYS9saWIvZmlsZS5jIGIvbGliL2ZpbGUuYwppbmRleCBiNTM0ZWMxLi4zZGJjMGYyIDEwMDY0NAotLS0gYS9saWIvZmlsZS5jCisrKyBiL2xpYi9maWxlLmMKQEAgLTE5MCwxNCArMTkwLDE1IEBACiAgIHN0cnVjdCBGSUxFUFJPVE8gKmZpbGUgPSBkYXRhLT5yZXEucHJvdG9wOwogICBpbnQgZmQ7CiAjaWZkZWYgRE9TX0ZJTEVTWVNURU0KLSAgaW50IGk7CisgIHNpemVfdCBpOwogICBjaGFyICphY3R1YWxfcGF0aDsKICNlbmRpZgotICBpbnQgcmVhbF9wYXRoX2xlbjsKKyAgc2l6ZV90IHJlYWxfcGF0aF9sZW47CiAKLSAgcmVhbF9wYXRoID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIGRhdGEtPnN0YXRlLnBhdGgsIDAsICZyZWFsX3BhdGhfbGVuKTsKLSAgaWYoIXJlYWxfcGF0aCkKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgZGF0YS0+c3RhdGUucGF0aCwgMCwgJnJlYWxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlYWxfcGF0aF9sZW4sIEZBTFNFKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CiAKICNpZmRlZiBET1NfRklMRVNZU1RFTQogICAvKiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgc2xhc2gsIGFuZCB0aGVyZSdzCkBAIC0zMTIsNyArMzEzLDcgQEAKICAgY3VybF9vZmZfdCBieXRlY291bnQgPSAwOwogICBzdHJ1Y3QgdGltZXZhbCBub3cgPSBDdXJsX3R2bm93KCk7CiAgIHN0cnVjdF9zdGF0IGZpbGVfc3RhdDsKLSAgY29uc3QgY2hhciogYnVmMjsKKyAgY29uc3QgY2hhciAqYnVmMjsKIAogICAvKgogICAgKiBTaW5jZSBGSUxFOiBkb2Vzbid0IGRvIHRoZSBmdWxsIGluaXQsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGV4dHJhCmRpZmYgLS1naXQgYS9saWIvZm9ybWRhdGEuYyBiL2xpYi9mb3JtZGF0YS5jCmluZGV4IDY3Mzc1OWQuLjJhZWY1ZmEgMTAwNjQ0Ci0tLSBhL2xpYi9mb3JtZGF0YS5jCisrKyBiL2xpYi9mb3JtZGF0YS5jCkBAIC0zMyw5ICszMywxMCBAQAogI2luY2x1ZGUgInVybGRhdGEuaCIgLyogZm9yIHN0cnVjdCBDdXJsX2Vhc3kgKi8KICNpbmNsdWRlICJmb3JtZGF0YS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAicmFuZC5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTgwLDcgKzgxLDcgQEAKICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcmxlbmd0aCwKICAgICAgICAgICAgIGNoYXIgKmNvbnRlbnR0eXBlLAogICAgICAgICAgICAgbG9uZyBmbGFncywKLSAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBjb250ZW50SGVhZGVyLAorICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmNvbnRlbnRIZWFkZXIsCiAgICAgICAgICAgICBjaGFyICpzaG93ZmlsZW5hbWUsIGNoYXIgKnVzZXJwLAogICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKnBhcmVudF9wb3N0LAogICAgICAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QgKipodHRwcG9zdCwKQEAgLTIwMSw5ICsyMDIsOSBAQAogICBpZihmaWxlbmFtZSkgeyAvKiBpbiBjYXNlIGEgTlVMTCB3YXMgcGFzc2VkIGluICovCiAgICAgZm9yKGk9MDsgaTxzaXplb2YoY3R0cykvc2l6ZW9mKGN0dHNbMF0pOyBpKyspIHsKICAgICAgIGlmKHN0cmxlbihmaWxlbmFtZSkgPj0gc3RybGVuKGN0dHNbaV0uZXh0ZW5zaW9uKSkgewotICAgICAgICBpZihzdHJlcXVhbChmaWxlbmFtZSArCi0gICAgICAgICAgICAgICAgICAgIHN0cmxlbihmaWxlbmFtZSkgLSBzdHJsZW4oY3R0c1tpXS5leHRlbnNpb24pLAotICAgICAgICAgICAgICAgICAgICBjdHRzW2ldLmV4dGVuc2lvbikpIHsKKyAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoZmlsZW5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZmlsZW5hbWUpIC0gc3RybGVuKGN0dHNbaV0uZXh0ZW5zaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3R0c1tpXS5leHRlbnNpb24pKSB7CiAgICAgICAgICAgY29udGVudHR5cGUgPSBjdHRzW2ldLnR5cGU7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU0Nyw5ICs1NDgsOSBAQAogICAgICAgewogICAgICAgICAvKiB0aGlzICJjYXN0IGluY3JlYXNlcyByZXF1aXJlZCBhbGlnbm1lbnQgb2YgdGFyZ2V0IHR5cGUiIGJ1dAogICAgICAgICAgICB3ZSBjb25zaWRlciBpdCBPSyBhbnl3YXkgKi8KLSAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIGxpc3QgPSBhcnJheV9zdGF0ZT8KLSAgICAgICAgICAoc3RydWN0IGN1cmxfc2xpc3QqKSh2b2lkKilhcnJheV92YWx1ZToKLSAgICAgICAgICB2YV9hcmcocGFyYW1zLCBzdHJ1Y3QgY3VybF9zbGlzdCopOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqbGlzdCA9IGFycmF5X3N0YXRlPworICAgICAgICAgIChzdHJ1Y3QgY3VybF9zbGlzdCAqKSh2b2lkICopYXJyYXlfdmFsdWU6CisgICAgICAgICAgdmFfYXJnKHBhcmFtcywgc3RydWN0IGN1cmxfc2xpc3QgKik7CiAKICAgICAgICAgaWYoY3VycmVudF9mb3JtLT5jb250ZW50aGVhZGVyKQogICAgICAgICAgIHJldHVybl92YWx1ZSA9IENVUkxfRk9STUFERF9PUFRJT05fVFdJQ0U7CkBAIC03NjEsOCArNzYyLDggQEAKICAqIGFuZCBDRC9EVkQgaW1hZ2VzIHNob3VsZCBiZSBlaXRoZXIgYSBTVFJFQU1fTEYgZm9ybWF0IG9yIGEgZml4ZWQgZm9ybWF0LgogICoKICAqLwotY3VybF9vZmZfdCBWbXNSZWFsRmlsZVNpemUoY29uc3QgY2hhciAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Rfc3RhdCAqIHN0YXRfYnVmKQorY3VybF9vZmZfdCBWbXNSZWFsRmlsZVNpemUoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdF9zdGF0ICpzdGF0X2J1ZikKIHsKICAgY2hhciBidWZmZXJbODE5Ml07CiAgIGN1cmxfb2ZmX3QgY291bnQ7CkBAIC03OTEsOCArNzkyLDggQEAKICAqICBpZiBub3QgdG8gY2FsbCBhIHJvdXRpbmUgdG8gZ2V0IHRoZSBjb3JyZWN0IHNpemUuCiAgKgogICovCi1zdGF0aWMgY3VybF9vZmZfdCBWbXNTcGVjaWFsU2l6ZShjb25zdCBjaGFyICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdF9zdGF0ICogc3RhdF9idWYpCitzdGF0aWMgY3VybF9vZmZfdCBWbXNTcGVjaWFsU2l6ZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0X3N0YXQgKnN0YXRfYnVmKQogewogICBzd2l0Y2goc3RhdF9idWYtPnN0X2ZhYl9yZm0pIHsKICAgY2FzZSBGQUIkQ19WQVI6CkBAIC04NDUsMTYgKzg0NiwyMyBAQAogICAgICAgZ290byBlcnJvcjsKICAgICB9CiAjZW5kaWYKKyAgICBpZih0eXBlICE9IEZPUk1fREFUQU1FTSkgeworICAgICAgbmV3Zm9ybS0+bGluZSA9IG1hbGxvYygoc2l6ZV90KWxlbmd0aCsxKTsKKyAgICAgIGlmKCFuZXdmb3JtLT5saW5lKSB7CisgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgICBhbGxvYzIgPSBuZXdmb3JtLT5saW5lOworICAgICAgbWVtY3B5KG5ld2Zvcm0tPmxpbmUsIGxpbmUsIChzaXplX3QpbGVuZ3RoKTsKIAotICAgIG5ld2Zvcm0tPmxpbmUgPSBtYWxsb2MoKHNpemVfdClsZW5ndGgrMSk7Ci0gICAgaWYoIW5ld2Zvcm0tPmxpbmUpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICBnb3RvIGVycm9yOworICAgICAgLyogemVybyB0ZXJtaW5hdGUgZm9yIGVhc2llciBkZWJ1Z2dpbmcgKi8KKyAgICAgIG5ld2Zvcm0tPmxpbmVbKHNpemVfdClsZW5ndGhdPTA7CiAgICAgfQotICAgIGFsbG9jMiA9IG5ld2Zvcm0tPmxpbmU7Ci0gICAgbWVtY3B5KG5ld2Zvcm0tPmxpbmUsIGxpbmUsIChzaXplX3QpbGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgIG5ld2Zvcm0tPmxpbmUgPSAoY2hhciAqKWxpbmU7CisgICAgICB0eXBlID0gRk9STV9EQVRBOyAvKiBpbiBhbGwgb3RoZXIgYXNwZWN0cyB0aGlzIGlzIGp1c3QgRk9STV9EQVRBICovCisgICAgfQogICAgIG5ld2Zvcm0tPmxlbmd0aCA9IChzaXplX3QpbGVuZ3RoOwotICAgIG5ld2Zvcm0tPmxpbmVbKHNpemVfdClsZW5ndGhdPTA7IC8qIHplcm8gdGVybWluYXRlIGZvciBlYXNpZXIgZGVidWdnaW5nICovCiAgIH0KICAgZWxzZQogICAgIC8qIEZvciBjYWxsYmFja3MgYW5kIGZpbGVzIHdlIGRvbid0IGhhdmUgYW55IGFjdHVhbCBkYXRhIHNvIHdlIGp1c3Qga2VlcCBhCkBAIC04NjMsMTMgKzg3MSw2IEBACiAKICAgbmV3Zm9ybS0+dHlwZSA9IHR5cGU7CiAKLSAgaWYoKmZvcm1wKSB7Ci0gICAgKCpmb3JtcCktPm5leHQgPSBuZXdmb3JtOwotICAgICpmb3JtcCA9IG5ld2Zvcm07Ci0gIH0KLSAgZWxzZQotICAgICpmb3JtcCA9IG5ld2Zvcm07Ci0KICAgaWYoc2l6ZSkgewogICAgIGlmKHR5cGUgIT0gRk9STV9GSUxFKQogICAgICAgLyogZm9yIHN0YXRpYyBjb250ZW50IGFzIHdlbGwgYXMgY2FsbGJhY2sgZGF0YSB3ZSBhZGQgdGhlIHNpemUgZ2l2ZW4KQEAgLTg3OCw3ICs4NzksNyBAQAogICAgIGVsc2UgewogICAgICAgLyogU2luY2UgdGhpcyBpcyBhIGZpbGUgdG8gYmUgdXBsb2FkZWQgaGVyZSwgYWRkIHRoZSBzaXplIG9mIHRoZSBhY3R1YWwKICAgICAgICAgIGZpbGUgKi8KLSAgICAgIGlmKCFzdHJlcXVhbCgiLSIsIG5ld2Zvcm0tPmxpbmUpKSB7CisgICAgICBpZihzdHJjbXAoIi0iLCBuZXdmb3JtLT5saW5lKSkgewogICAgICAgICBzdHJ1Y3Rfc3RhdCBmaWxlOwogICAgICAgICBpZighc3RhdChuZXdmb3JtLT5saW5lLCAmZmlsZSkgJiYgIVNfSVNESVIoZmlsZS5zdF9tb2RlKSkKICAgICAgICAgICAqc2l6ZSArPSBmaWxlc2l6ZShuZXdmb3JtLT5saW5lLCBmaWxlKTsKQEAgLTg4OSw2ICs4OTAsMTQgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKworICBpZigqZm9ybXApIHsKKyAgICAoKmZvcm1wKS0+bmV4dCA9IG5ld2Zvcm07CisgICAgKmZvcm1wID0gbmV3Zm9ybTsKKyAgfQorICBlbHNlCisgICAgKmZvcm1wID0gbmV3Zm9ybTsKKwogICByZXR1cm4gQ1VSTEVfT0s7CiAgIGVycm9yOgogICBpZihuZXdmb3JtKQpAQCAtOTA2LDEzICs5MTUsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0gIGNoYXIgc1s0MDk2XTsKKyAgY2hhciAqczsKKyAgQ1VSTGNvZGUgcmVzdWx0OwogICB2YV9saXN0IGFwOwogICB2YV9zdGFydChhcCwgZm10KTsKLSAgdnNucHJpbnRmKHMsIHNpemVvZihzKSwgZm10LCBhcCk7CisgIHMgPSBjdXJsX212YXByaW50ZihmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKIAotICByZXR1cm4gQWRkRm9ybURhdGEoZm9ybXAsIEZPUk1fREFUQSwgcywgMCwgc2l6ZSk7CisgIGlmKCFzKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHJlc3VsdCA9IEFkZEZvcm1EYXRhKGZvcm1wLCBGT1JNX0RBVEFNRU0sIHMsIDAsIHNpemUpOworICBpZihyZXN1bHQpCisgICAgZnJlZShzKTsKKworICByZXR1cm4gcmVzdWx0OwogfQogCiAvKgpAQCAtMTE1MCw3ICsxMTY3LDcgQEAKICAgY3VybF9vZmZfdCBzaXplID0gMDsgLyogc3VwcG9ydCBwb3RlbnRpYWxseSBFTk9STU9VUyBmb3JtcG9zdHMgKi8KICAgY2hhciAqYm91bmRhcnk7CiAgIGNoYXIgKmZpbGVib3VuZGFyeSA9IE5VTEw7Ci0gIHN0cnVjdCBjdXJsX3NsaXN0KiBjdXJMaXN0OworICBzdHJ1Y3QgY3VybF9zbGlzdCAqY3VyTGlzdDsKIAogICAqZmluYWxmb3JtID0gTlVMTDsgLyogZGVmYXVsdCBmb3JtIGlzIGVtcHR5ICovCiAKQEAgLTEyODksNyArMTMwNiw3IEBACiAgICAgICAgIC8qIHdlIHNob3VsZCBpbmNsdWRlIHRoZSBjb250ZW50cyBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSAqLwogICAgICAgICBGSUxFICpmaWxlcmVhZDsKIAotICAgICAgICBmaWxlcmVhZCA9IHN0cmVxdWFsKCItIiwgZmlsZS0+Y29udGVudHMpPworICAgICAgICBmaWxlcmVhZCA9ICFzdHJjbXAoIi0iLCBmaWxlLT5jb250ZW50cyk/CiAgICAgICAgICAgc3RkaW46Zm9wZW4oZmlsZS0+Y29udGVudHMsICJyYiIpOyAvKiBiaW5hcnkgcmVhZCBmb3Igd2luMzIgICovCiAKICAgICAgICAgLyoKQEAgLTE0MTAsNyArMTQyNyw4IEBACiAgICAqCiAgICAqLwogIyBkZWZpbmUgZm9wZW5fcmVhZCB2bXNmb3BlbnJlYWQKLXN0YXRpYyBGSUxFICogdm1zZm9wZW5yZWFkKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm1vZGUpIHsKK3N0YXRpYyBGSUxFICogdm1zZm9wZW5yZWFkKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CiAgIHN0cnVjdF9zdGF0IHN0YXRidWY7CiAgIGludCByZXN1bHQ7CiAKQEAgLTE1NTMsOCArMTU3MSwxMiBAQAogewogICAvKiAyNCBkYXNoZXMgYW5kIDE2IGhleGFkZWNpbWFsIGRpZ2l0cyBtYWtlcyA2NCBiaXQgKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQogICAgICBjb21iaW5hdGlvbnMgKi8KLSAgcmV0dXJuIGFwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwOHglMDh4IiwKLSAgICAgICAgICAgICAgICAgQ3VybF9yYW5kKGRhdGEpLCBDdXJsX3JhbmQoZGF0YSkpOworICB1bnNpZ25lZCBpbnQgcm5kWzJdOworICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgJnJuZFswXSwgMik7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gYXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTA4eCUwOHgiLCBybmRbMF0sIHJuZFsxXSk7CiB9CiAKICNlbHNlICAvKiBDVVJMX0RJU0FCTEVfSFRUUCAqLwpkaWZmIC0tZ2l0IGEvbGliL2Zvcm1kYXRhLmggYi9saWIvZm9ybWRhdGEuaAppbmRleCA2ZWI3YzZjLi42OTYyOWY2IDEwMDY0NAotLS0gYS9saWIvZm9ybWRhdGEuaAorKysgYi9saWIvZm9ybWRhdGEuaApAQCAtMjMsNiArMjMsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogZW51bSBmb3JtdHlwZSB7CisgIEZPUk1fREFUQU1FTSwgLyogYWxyZWFkeSBhbGxvY2F0ZWQgRk9STV9EQVRBIG1lbW9yeSAqLwogICBGT1JNX0RBVEEsICAgIC8qIGZvcm0gbWV0YWRhdGEgKGNvbnZlcnQgdG8gbmV0d29yayBlbmNvZGluZyBpZiBuZWNlc3NhcnkpICovCiAgIEZPUk1fQ09OVEVOVCwgLyogZm9ybSBjb250ZW50ICAobmV2ZXIgY29udmVydCkgKi8KICAgRk9STV9DQUxMQkFDSywgLyogJ2xpbmUnIHBvaW50cyB0byB0aGUgY3VzdG9tIHBvaW50ZXIgd2UgcGFzcyB0byB0aGUgY2FsbGJhY2sKQEAgLTY0LDcgKzY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG5hbWUgd2lsbCBiZSB1c2VkICovCiAgIGJvb2wgc2hvd2ZpbGVuYW1lX2FsbG9jOwogICBjaGFyICp1c2VycDsgICAgICAgIC8qIHBvaW50ZXIgZm9yIHRoZSByZWFkIGNhbGxiYWNrICovCi0gIHN0cnVjdCBjdXJsX3NsaXN0KiBjb250ZW50aGVhZGVyOworICBzdHJ1Y3QgY3VybF9zbGlzdCAqY29udGVudGhlYWRlcjsKICAgc3RydWN0IEZvcm1JbmZvICptb3JlOwogfSBGb3JtSW5mbzsKIApkaWZmIC0tZ2l0IGEvbGliL2Z0cC5jIGIvbGliL2Z0cC5jCmluZGV4IDhhZjY1MzEuLjFlNjFmYzUgMTAwNjQ0Ci0tLSBhL2xpYi9mdHAuYworKysgYi9saWIvZnRwLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNpbmNsdWRlICJmdHBsaXN0cGFyc2VyLmgiCiAjaW5jbHVkZSAiY3VybF9zZWMuaCIKICNpbmNsdWRlICJzdHJ0b29mZnQuaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKQEAgLTcyLDcgKzcyLDcgQEAKICNpbmNsdWRlICJzb2NrYWRkci5oIiAvKiByZXF1aXJlZCBmb3IgQ3VybF9zb2NrYWRkcl9zdG9yYWdlICovCiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInVybC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJzcGVlZGNoZWNrLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJodHRwX3Byb3h5LmgiCkBAIC0zODQsMTAgKzM4NCwxMCBAQAogICogQ3VybF9wZ3JzVGltZSguLi4sIFRJTUVSX1NUQVJUQUNDRVBUKTsKICAqCiAgKi8KLXN0YXRpYyBsb25nIGZ0cF90aW1lbGVmdF9hY2NlcHQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3N0YXRpYyB0aW1lX3QgZnRwX3RpbWVsZWZ0X2FjY2VwdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewotICBsb25nIHRpbWVvdXRfbXMgPSBERUZBVUxUX0FDQ0VQVF9USU1FT1VUOwotICBsb25nIG90aGVyOworICB0aW1lX3QgdGltZW91dF9tcyA9IERFRkFVTFRfQUNDRVBUX1RJTUVPVVQ7CisgIHRpbWVfdCBvdGhlcjsKICAgc3RydWN0IHRpbWV2YWwgbm93OwogCiAgIGlmKGRhdGEtPnNldC5hY2NlcHR0aW1lb3V0ID4gMCkKQEAgLTQzMCw3ICs0MzAsNyBAQAogICBzdHJ1Y3QgZnRwX2Nvbm4gKmZ0cGMgPSAmY29ubi0+cHJvdG8uZnRwYzsKICAgc3RydWN0IHBpbmdwb25nICpwcCA9ICZmdHBjLT5wcDsKICAgaW50IHJlc3VsdDsKLSAgbG9uZyB0aW1lb3V0X21zOworICB0aW1lX3QgdGltZW91dF9tczsKICAgc3NpemVfdCBucmVhZDsKICAgaW50IGZ0cGNvZGU7CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQAogICAgICAgaWYoZnRwY29kZS8xMDAgPiAzKQogICAgICAgICByZXR1cm4gQ1VSTEVfRlRQX0FDQ0VQVF9GQUlMRUQ7CiAKLSAgICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgICAgcmV0dXJuIENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgICB9CiAKICAgICBicmVhazsKQEAgLTQ5OSw3ICs0OTksNyBAQAogICBzdHJ1Y3QgRlRQICpmdHAgPSBkYXRhLT5yZXEucHJvdG9wOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKIAotICBpZihjb25uLT5zc2xbU0VDT05EQVJZU09DS0VUXS51c2UpIHsKKyAgaWYoY29ubi0+Yml0cy5mdHBfdXNlX2RhdGFfc3NsKSB7CiAgICAgLyogc2luY2Ugd2Ugb25seSBoYXZlIGEgcGxhaW50ZXh0IFRDUCBjb25uZWN0aW9uIGhlcmUsIHdlIG11c3Qgbm93CiAgICAgICogZG8gdGhlIFRMUyBzdHVmZiAqLwogICAgIGluZm9mKGRhdGEsICJEb2luZyB0aGUgU1NML1RMUyBoYW5kc2hha2Ugb24gdGhlIGRhdGEgc3RyZWFtXG4iKTsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogc3RhdGljIENVUkxjb2RlIEFsbG93U2VydmVyQ29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgKmNvbm5lY3RlZCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZV90IHRpbWVvdXRfbXM7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCiAgICpjb25uZWN0ZWQgPSBGQUxTRTsKQEAgLTY4Nyw4ICs2ODcsOCBAQAogICAgKiBsaW5lIGluIGEgcmVzcG9uc2Ugb3IgY29udGludWUgcmVhZGluZy4gICovCiAKICAgY3VybF9zb2NrZXRfdCBzb2NrZmQgPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgbG9uZyB0aW1lb3V0OyAgICAgICAgICAgICAgLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KLSAgbG9uZyBpbnRlcnZhbF9tczsKKyAgdGltZV90IHRpbWVvdXQ7ICAgICAgICAgICAgICAvKiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqLworICB0aW1lX3QgaW50ZXJ2YWxfbXM7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CkBAIC03NDAsOCArNzQwLDggQEAKICAgICAgICAqIHdhaXQgZm9yIG1vcmUgZGF0YSBhbnl3YXkuCiAgICAgICAgKi8KICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBzd2l0Y2ggKEN1cmxfc29ja2V0X3JlYWR5KHNvY2tmZCwgQ1VSTF9TT0NLRVRfQkFELCBpbnRlcnZhbF9tcykpIHsKKyAgICBlbHNlIGlmKCFDdXJsX3NzbF9kYXRhX3BlbmRpbmcoY29ubiwgRklSU1RTT0NLRVQpKSB7CisgICAgICBzd2l0Y2ggKFNPQ0tFVF9SRUFEQUJMRShzb2NrZmQsIGludGVydmFsX21zKSkgewogICAgICAgY2FzZSAtMTogLyogc2VsZWN0KCkgZXJyb3IsIHN0b3AgcmVhZGluZyAqLwogICAgICAgICBmYWlsZihkYXRhLCAiRlRQIHJlc3BvbnNlIGFib3J0ZWQgZHVlIHRvIHNlbGVjdC9wb2xsIGVycm9yOiAlZCIsCiAgICAgICAgICAgICAgIFNPQ0tFUlJOTyk7CkBAIC05MTEsNyArOTExLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICBzb2Nrc1sxXSA9IGNvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXTsKLSAgICAgIGJpdHMgfD0gR0VUU09DS19XUklURVNPQ0soMSk7CisgICAgICBiaXRzIHw9IEdFVFNPQ0tfV1JJVEVTT0NLKDEpIHwgR0VUU09DS19SRUFEU09DSygxKTsKICAgICB9CiAKICAgICByZXR1cm4gYml0czsKQEAgLTE4MzUsNyArMTgzNSw3IEBACiAgIGlmKGNvbm4tPmJpdHMuaXB2NikgewogICAgIC8qIFdlIGNhbid0IGRpc2FibGUgRVBTViB3aGVuIGRvaW5nIElQdjYsIHNvIHRoaXMgaXMgaW5zdGVhZCBhIGZhaWwgKi8KICAgICBmYWlsZihjb25uLT5kYXRhLCAiRmFpbGVkIEVQU1YgYXR0ZW1wdCwgZXhpdGluZ1xuIik7Ci0gICAgcmV0dXJuIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgcmV0dXJuIENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgfQogCiAgIGluZm9mKGNvbm4tPmRhdGEsICJGYWlsZWQgRVBTViBhdHRlbXB0LiBEaXNhYmxpbmcgRVBTVlxuIik7CkBAIC0xODUwLDg0ICsxODUwLDYgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLyoKLSAqIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBtYWdpYyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb25jZSB0aGUgVENQIGNvbm5lY3Rpb24KLSAqIHRvIHRoZSBwcm94eSBoYXMgY29tcGxldGVkLgotICovCi1zdGF0aWMgQ1VSTGNvZGUgcHJveHlfbWFnaWMoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5ld2hvc3QsIHVuc2lnbmVkIHNob3J0IG5ld3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbWFnaWNkb25lKQotewotICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLSAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0KLSNpZiBkZWZpbmVkKENVUkxfRElTQUJMRV9QUk9YWSkKLSAgKHZvaWQpIG5ld2hvc3Q7Ci0gICh2b2lkKSBuZXdwb3J0OwotI2VuZGlmCi0KLSAgKm1hZ2ljZG9uZSA9IEZBTFNFOwotCi0gIHN3aXRjaChjb25uLT5wcm94eXR5cGUpIHsKLSAgY2FzZSBDVVJMUFJPWFlfU09DS1M1OgotICBjYXNlIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUU6Ci0gICAgcmVzdWx0ID0gQ3VybF9TT0NLUzUoY29ubi0+cHJveHl1c2VyLCBjb25uLT5wcm94eXBhc3N3ZCwgbmV3aG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwb3J0LCBTRUNPTkRBUllTT0NLRVQsIGNvbm4pOwotICAgICptYWdpY2RvbmUgPSBUUlVFOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxQUk9YWV9TT0NLUzQ6Ci0gICAgcmVzdWx0ID0gQ3VybF9TT0NLUzQoY29ubi0+cHJveHl1c2VyLCBuZXdob3N0LCBuZXdwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ09OREFSWVNPQ0tFVCwgY29ubiwgRkFMU0UpOwotICAgICptYWdpY2RvbmUgPSBUUlVFOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxQUk9YWV9TT0NLUzRBOgotICAgIHJlc3VsdCA9IEN1cmxfU09DS1M0KGNvbm4tPnByb3h5dXNlciwgbmV3aG9zdCwgbmV3cG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTRUNPTkRBUllTT0NLRVQsIGNvbm4sIFRSVUUpOwotICAgICptYWdpY2RvbmUgPSBUUlVFOwotICAgIGJyZWFrOwotICBjYXNlIENVUkxQUk9YWV9IVFRQOgotICBjYXNlIENVUkxQUk9YWV9IVFRQXzFfMDoKLSAgICAvKiBkbyBub3RoaW5nIGhlcmUuIGhhbmRsZWQgbGF0ZXIuICovCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgZmFpbGYoZGF0YSwgInVua25vd24gcHJveHl0eXBlIG9wdGlvbiBnaXZlbiIpOwotICAgIHJlc3VsdCA9IENVUkxFX0NPVUxETlRfQ09OTkVDVDsKLSAgICBicmVhazsKLSAgfQotCi0gIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmIGNvbm4tPmJpdHMuaHR0cHByb3h5KSB7Ci0gICAgLyogQkxPQ0tJTkcgKi8KLSAgICAvKiBXZSB3YW50ICJzZWFtbGVzcyIgRlRQIG9wZXJhdGlvbnMgdGhyb3VnaCBIVFRQIHByb3h5IHR1bm5lbCAqLwotCi0gICAgLyogQ3VybF9wcm94eUNPTk5FQ1QgaXMgYmFzZWQgb24gYSBwb2ludGVyIHRvIGEgc3RydWN0IEhUVFAgYXQgdGhlCi0gICAgICogbWVtYmVyIGNvbm4tPnByb3RvLmh0dHA7IHdlIHdhbnQgRlRQIHRocm91Z2ggSFRUUCBhbmQgd2UgaGF2ZSB0bwotICAgICAqIGNoYW5nZSB0aGUgbWVtYmVyIHRlbXBvcmFyaWx5IGZvciBjb25uZWN0aW5nIHRvIHRoZSBIVFRQIHByb3h5LiBBZnRlcgotICAgICAqIEN1cmxfcHJveHlDT05ORUNUIHdlIGhhdmUgdG8gc2V0IGJhY2sgdGhlIG1lbWJlciB0byB0aGUgb3JpZ2luYWwKLSAgICAgKiBzdHJ1Y3QgRlRQIHBvaW50ZXIKLSAgICAgKi8KLSAgICBzdHJ1Y3QgSFRUUCBodHRwX3Byb3h5OwotICAgIHN0cnVjdCBGVFAgKmZ0cF9zYXZlID0gZGF0YS0+cmVxLnByb3RvcDsKLSAgICBtZW1zZXQoJmh0dHBfcHJveHksIDAsIHNpemVvZihodHRwX3Byb3h5KSk7Ci0gICAgZGF0YS0+cmVxLnByb3RvcCA9ICZodHRwX3Byb3h5OwotCi0gICAgcmVzdWx0ID0gQ3VybF9wcm94eUNPTk5FQ1QoY29ubiwgU0VDT05EQVJZU09DS0VULCBuZXdob3N0LCBuZXdwb3J0LCBUUlVFKTsKLQotICAgIGRhdGEtPnJlcS5wcm90b3AgPSBmdHBfc2F2ZTsKLQotICAgIGlmKHJlc3VsdCkKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZihjb25uLT50dW5uZWxfc3RhdGVbU0VDT05EQVJZU09DS0VUXSAhPSBUVU5ORUxfQ09NUExFVEUpIHsKLSAgICAgIC8qIHRoZSBDT05ORUNUIHByb2NlZHVyZSBpcyBub3QgY29tcGxldGUsIHRoZSB0dW5uZWwgaXMgbm90IHlldCB1cCAqLwotICAgICAgc3RhdGUoY29ubiwgRlRQX1NUT1ApOyAvKiB0aGlzIHBoYXNlIGlzIGNvbXBsZXRlZCAqLwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgKm1hZ2ljZG9uZSA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQogCiBzdGF0aWMgY2hhciAqY29udHJvbF9hZGRyZXNzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKQEAgLTE5MzUsMTEgKzE4NTcsNyBAQAogICAgICBJZiBhIHByb3h5IHR1bm5lbCBpcyB1c2VkLCByZXR1cm5zIHRoZSBvcmlnaW5hbCBob3N0IG5hbWUgaW5zdGVhZCwgYmVjYXVzZQogICAgICB0aGUgZWZmZWN0aXZlIGNvbnRyb2wgY29ubmVjdGlvbiBhZGRyZXNzIGlzIHRoZSBwcm94eSBhZGRyZXNzLAogICAgICBub3QgdGhlIGZ0cCBob3N0LiAqLwotICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSB8fAotICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNSB8fAotICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNV9IT1NUTkFNRSB8fAotICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNCB8fAotICAgICBjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX1NPQ0tTNEEpCisgIGlmKGNvbm4tPmJpdHMudHVubmVsX3Byb3h5IHx8IGNvbm4tPmJpdHMuc29ja3Nwcm94eSkKICAgICByZXR1cm4gY29ubi0+aG9zdC5uYW1lOwogCiAgIHJldHVybiBjb25uLT5pcF9hZGRyX3N0cjsKQEAgLTIwNjMsNyArMTk4MSw5IEBACiAgICAgICogaGVyZS4gV2UgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGEgZm9ybWVyIGhvc3QgbG9va3VwIHRoYXQgbWlnaHQndmUKICAgICAgKiBleHBpcmVkIG5vdywgaW5zdGVhZCB3ZSByZW1ha2UgdGhlIGxvb2t1cCBoZXJlIGFuZCBub3chCiAgICAgICovCi0gICAgcmMgPSBDdXJsX3Jlc29sdihjb25uLCBjb25uLT5wcm94eS5uYW1lLCAoaW50KWNvbm4tPnBvcnQsICZhZGRyKTsKKyAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdF9uYW1lID0gY29ubi0+Yml0cy5zb2Nrc3Byb3h5ID8KKyAgICAgIGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZSA6IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOworICAgIHJjID0gQ3VybF9yZXNvbHYoY29ubiwgaG9zdF9uYW1lLCAoaW50KWNvbm4tPnBvcnQsICZhZGRyKTsKICAgICBpZihyYyA9PSBDVVJMUkVTT0xWX1BFTkRJTkcpCiAgICAgICAvKiBCTE9DS0lORywgaWdub3JlcyB0aGUgcmV0dXJuIGNvZGUgYnV0ICdhZGRyJyB3aWxsIGJlIE5VTEwgaW4KICAgICAgICAgIGNhc2Ugb2YgZmFpbHVyZSAqLwpAQCAtMjA3Myw4ICsxOTkzLDcgQEAKICAgICAgICh1bnNpZ25lZCBzaG9ydCljb25uLT5wb3J0OyAvKiB3ZSBjb25uZWN0IHRvIHRoZSBwcm94eSdzIHBvcnQgKi8KIAogICAgIGlmKCFhZGRyKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiQ2FuJ3QgcmVzb2x2ZSBwcm94eSBob3N0ICVzOiVodSIsCi0gICAgICAgICAgICBjb25uLT5wcm94eS5uYW1lLCBjb25uZWN0cG9ydCk7CisgICAgICBmYWlsZihkYXRhLCAiQ2FuJ3QgcmVzb2x2ZSBwcm94eSBob3N0ICVzOiVodSIsIGhvc3RfbmFtZSwgY29ubmVjdHBvcnQpOwogICAgICAgcmV0dXJuIENVUkxFX0ZUUF9DQU5UX0dFVF9IT1NUOwogICAgIH0KICAgfQpAQCAtMjExNSw2ICsyMDM0LDEwIEBACiAgICAgLyogdGhpcyBqdXN0IGR1bXBzIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgc2Vjb25kIGNvbm5lY3Rpb24gKi8KICAgICBmdHBfcGFzdl92ZXJib3NlKGNvbm4sIGFkZHItPmFkZHIsIGZ0cGMtPm5ld2hvc3QsIGNvbm5lY3Rwb3J0KTsKIAorICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNlY29uZGFyeWhvc3RuYW1lKTsKKyAgY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWUgPSBzdHJkdXAoZnRwYy0+bmV3aG9zdCk7CisgIGNvbm4tPnNlY29uZGFyeV9wb3J0ID0gZnRwYy0+bmV3cG9ydDsKKwogICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgYWRkcik7IC8qIHdlJ3JlIGRvbmUgdXNpbmcgdGhpcyBhZGRyZXNzICovCiAgIGNvbm4tPmJpdHMuZG9fbW9yZSA9IFRSVUU7CiAgIHN0YXRlKGNvbm4sIEZUUF9TVE9QKTsgLyogdGhpcyBwaGFzZSBpcyBjb21wbGV0ZWQgKi8KQEAgLTI3NDIsNyArMjY2NSw3IEBACiAgICAgICBlbHNlIGlmKGZ0cGNvZGUgIT0gMjIwKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJHb3QgYSAlMDNkIGZ0cC1zZXJ2ZXIgcmVzcG9uc2Ugd2hlbiAyMjAgd2FzIGV4cGVjdGVkIiwKICAgICAgICAgICAgICAgZnRwY29kZSk7Ci0gICAgICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgICAgICByZXR1cm4gQ1VSTEVfV0VJUkRfU0VSVkVSX1JFUExZOwogICAgICAgfQogCiAgICAgICAvKiBXZSBoYXZlIHJlY2VpdmVkIGEgMjIwIHJlc3BvbnNlIGZpbmUsIG5vdyB3ZSBwcm9jZWVkLiAqLwpAQCAtMjc2Myw3ICsyNjg2LDEwIEBACiAgICAgICB9CiAjZW5kaWYKIAotICAgICAgaWYoZGF0YS0+c2V0LnVzZV9zc2wgJiYgIWNvbm4tPnNzbFtGSVJTVFNPQ0tFVF0udXNlKSB7CisgICAgICBpZihkYXRhLT5zZXQudXNlX3NzbCAmJgorICAgICAgICAgKCFjb25uLT5zc2xbRklSU1RTT0NLRVRdLnVzZSB8fAorICAgICAgICAgIChjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdICYmCisgICAgICAgICAgICFjb25uLT5wcm94eV9zc2xbRklSU1RTT0NLRVRdLnVzZSkpKSB7CiAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgYSBTU0wvVExTIGNvbm5lY3Rpb24geWV0LCBidXQgRlRQUyBpcwogICAgICAgICAgICByZXF1ZXN0ZWQuIFRyeSBhIEZUUFMgY29ubmVjdGlvbiBub3cgKi8KIApAQCAtMjgwOCw3ICsyNzM0LDcgQEAKICAgICAgICAgLyogQ3VybF9zc2xfY29ubmVjdCBpcyBCTE9DS0lORyAqLwogICAgICAgICByZXN1bHQgPSBDdXJsX3NzbF9jb25uZWN0KGNvbm4sIEZJUlNUU09DS0VUKTsKICAgICAgICAgaWYoIXJlc3VsdCkgewotICAgICAgICAgIGNvbm4tPnNzbFtTRUNPTkRBUllTT0NLRVRdLnVzZSA9IEZBTFNFOyAvKiBjbGVhci10ZXh0IGRhdGEgKi8KKyAgICAgICAgICBjb25uLT5iaXRzLmZ0cF91c2VfZGF0YV9zc2wgPSBGQUxTRTsgLyogY2xlYXItdGV4dCBkYXRhICovCiAgICAgICAgICAgcmVzdWx0ID0gZnRwX3N0YXRlX3VzZXIoY29ubik7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTI4NTAsNyArMjc3Niw3IEBACiAgICAgY2FzZSBGVFBfUFJPVDoKICAgICAgIGlmKGZ0cGNvZGUvMTAwID09IDIpCiAgICAgICAgIC8qIFdlIGhhdmUgZW5hYmxlZCBTU0wgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24hICovCi0gICAgICAgIGNvbm4tPnNzbFtTRUNPTkRBUllTT0NLRVRdLnVzZSA9CisgICAgICAgIGNvbm4tPmJpdHMuZnRwX3VzZV9kYXRhX3NzbCA9CiAgICAgICAgICAgKGRhdGEtPnNldC51c2Vfc3NsICE9IENVUkxVU0VTU0xfQ09OVFJPTCkgPyBUUlVFIDogRkFMU0U7CiAgICAgICAvKiBGVFAgc2VydmVycyB0eXBpY2FsbHkgcmVzcG9uZHMgd2l0aCA1MDAgaWYgdGhleSBkZWNpZGUgdG8gcmVqZWN0CiAgICAgICAgICBvdXIgJ1AnIHJlcXVlc3QgKi8KQEAgLTI5OTksNyArMjkyNSw3IEBACiAKICAgICAgICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwgc2VydmVycyBoZXJlLiAqLwogCi0gICAgICAgIGlmKHN0cmVxdWFsKG9zLCAiT1MvNDAwIikpIHsKKyAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUob3MsICJPUy80MDAiKSkgewogICAgICAgICAgIC8qIEZvcmNlIE9TNDAwIG5hbWUgZm9ybWF0IDEuICovCiAgICAgICAgICAgcmVzdWx0ID0gQ3VybF9wcF9zZW5kZigmZnRwYy0+cHAsICIlcyIsICJTSVRFIE5BTUVGTVQgMSIpOwogICAgICAgICAgIGlmKHJlc3VsdCkgewpAQCAtMzE2NSw3ICszMDkxLDcgQEAKICAgc3RydWN0IGZ0cF9jb25uICpmdHBjID0gJmNvbm4tPnByb3RvLmZ0cGM7CiAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcHBfc3RhdGVtYWNoKCZmdHBjLT5wcCwgRkFMU0UpOwogCi0gIC8qIENoZWNrIGZvciB0aGUgc3RhdGUgb3V0c2lkZSBvZiB0aGUgQ3VybF9zb2NrZXRfcmVhZHkoKSByZXR1cm4gY29kZSBjaGVja3MKKyAgLyogQ2hlY2sgZm9yIHRoZSBzdGF0ZSBvdXRzaWRlIG9mIHRoZSBDdXJsX3NvY2tldF9jaGVjaygpIHJldHVybiBjb2RlIGNoZWNrcwogICAgICBzaW5jZSBhdCB0aW1lcyB3ZSBhcmUgaW4gZmFjdCBhbHJlYWR5IGluIHRoaXMgc3RhdGUgd2hlbiB0aGlzIGZ1bmN0aW9uCiAgICAgIGdldHMgY2FsbGVkLiAqLwogICAqZG9uZSA9IChmdHBjLT5zdGF0ZSA9PSBGVFBfU1RPUCkgPyBUUlVFIDogRkFMU0U7CkBAIC0zMjUwLDggKzMxNzYsNyBAQAogICBzc2l6ZV90IG5yZWFkOwogICBpbnQgZnRwY29kZTsKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7Ci0gIGJvb2wgd2FzX2N0bF92YWxpZCA9IGZ0cGMtPmN0bF92YWxpZDsKLSAgY2hhciAqcGF0aDsKKyAgY2hhciAqcGF0aCA9IE5VTEw7CiAgIGNvbnN0IGNoYXIgKnBhdGhfdG9fdXNlID0gZGF0YS0+c3RhdGUucGF0aDsKIAogICBpZighZnRwKQpAQCAtMzI3NCwxMCArMzE5OSw5IEBACiAgICAgLyogdGhlIGNvbm5lY3Rpb24gc3RheXMgYWxpdmUgZmluZSBldmVuIHRob3VnaCB0aGlzIGhhcHBlbmVkICovCiAgICAgLyogZmFsbC10aHJvdWdoICovCiAgIGNhc2UgQ1VSTEVfT0s6IC8qIGRvZXNuJ3QgYWZmZWN0IHRoZSBjb250cm9sIGNvbm5lY3Rpb24ncyBzdGF0dXMgKi8KLSAgICBpZighcHJlbWF0dXJlKSB7Ci0gICAgICBmdHBjLT5jdGxfdmFsaWQgPSB3YXNfY3RsX3ZhbGlkOworICAgIGlmKCFwcmVtYXR1cmUpCiAgICAgICBicmVhazsKLSAgICB9CisKICAgICAvKiB1bnRpbCB3ZSBjb3BlIGJldHRlciB3aXRoIHByZW1hdHVyZWx5IGVuZGVkIHJlcXVlc3RzLCBsZXQgdGhlbQogICAgICAqIGZhbGxiYWNrIGFzIGlmIGluIGNvbXBsZXRlIGZhaWx1cmUgKi8KICAgZGVmYXVsdDogICAgICAgLyogYnkgZGVmYXVsdCwgYW4gZXJyb3IgbWVhbnMgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcwpAQCAtMzMwMCwxMyArMzIyNCwxMiBAQAogICAgIGZ0cGMtPmtub3duX2ZpbGVzaXplID0gLTE7CiAgIH0KIAotICAvKiBnZXQgdGhlICJyYXciIHBhdGggKi8KLSAgcGF0aCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwYXRoX3RvX3VzZSwgMCwgTlVMTCk7Ci0gIGlmKCFwYXRoKSB7Ci0gICAgLyogb3V0IG9mIG1lbW9yeSwgYnV0IHdlIGNhbiBsaW1wIGFsb25nIGFueXdheSAoYW5kIHNob3VsZCB0cnkgdG8KLSAgICAgKiBzaW5jZSB3ZSBtYXkgYWxyZWFkeSBiZSBpbiB0aGUgb3V0IG9mIG1lbW9yeSBjbGVhbnVwIHBhdGgpICovCi0gICAgaWYoIXJlc3VsdCkKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGlmKCFyZXN1bHQpCisgICAgLyogZ2V0IHRoZSAicmF3IiBwYXRoICovCisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgcGF0aF90b191c2UsIDAsICZwYXRoLCBOVUxMLCBGQUxTRSk7CisgIGlmKHJlc3VsdCkgeworICAgIC8qIFdlIGNhbiBsaW1wIGFsb25nIGFueXdheSAoYW5kIHNob3VsZCB0cnkgdG8gc2luY2Ugd2UgbWF5IGFscmVhZHkgYmUgaW4KKyAgICAgKiB0aGUgZXJyb3IgcGF0aCkgKi8KICAgICBmdHBjLT5jdGxfdmFsaWQgPSBGQUxTRTsgLyogbWFyayBjb250cm9sIGNvbm5lY3Rpb24gYXMgYmFkICovCiAgICAgY29ubmNsb3NlKGNvbm4sICJGVFA6IG91dCBvZiBtZW1vcnkhIik7IC8qIG1hcmsgZm9yIGNvbm5lY3Rpb24gY2xvc3VyZSAqLwogICAgIGZ0cGMtPnByZXZwYXRoID0gTlVMTDsgLyogbm8gcGF0aCByZW1lbWJlcmluZyAqLwpAQCAtMzY2OSwxMCArMzU5Miw2IEBACiAgICAgLyogUmVhZHkgdG8gZG8gbW9yZT8gKi8KICAgICBpZihjb25uZWN0ZWQpIHsKICAgICAgIERFQlVHRihpbmZvZihkYXRhLCAiRE8tTU9SRSBjb25uZWN0ZWQgcGhhc2Ugc3RhcnRzXG4iKSk7Ci0gICAgICBpZihjb25uLT5iaXRzLnByb3h5KSB7Ci0gICAgICAgIGluZm9mKGRhdGEsICJDb25uZWN0aW9uIHRvIHByb3h5IGNvbmZpcm1lZFxuIik7Ci0gICAgICAgIHJlc3VsdCA9IHByb3h5X21hZ2ljKGNvbm4sIGZ0cGMtPm5ld2hvc3QsIGZ0cGMtPm5ld3BvcnQsICZjb25uZWN0ZWQpOwotICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgIGlmKHJlc3VsdCAmJiAoZnRwYy0+Y291bnQxID09IDApKSB7CkBAIC0zNjg0LDYgKzM2MDMsMTggQEAKICAgICB9CiAgIH0KIAorICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubiwgU0VDT05EQVJZU09DS0VUKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CisKKyAgaWYoQ09OTkVDVF9TRUNPTkRBUllTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgcmV0dXJuIHJlc3VsdDsKKworICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgorICAgICBjb25uLT50dW5uZWxfc3RhdGVbU0VDT05EQVJZU09DS0VUXSAhPSBUVU5ORUxfQ09NUExFVEUpCisgICAgcmV0dXJuIHJlc3VsdDsKKworCiAgIGlmKGZ0cGMtPnN0YXRlKSB7CiAgICAgLyogYWxyZWFkeSBpbiBhIHN0YXRlIHNvIHNraXAgdGhlIGludGlhbCBjb21tYW5kcy4KICAgICAgICBUaGV5IGFyZSBvbmx5IGRvbmUgdG8ga2lja3N0YXJ0IHRoZSBkb19tb3JlIHN0YXRlICovCkBAIC00MDkzLDggKzQwMjQsNyBAQAogfQogCiAKLUNVUkxjb2RlIEN1cmxfZnRwc2VuZGYoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK0NVUkxjb2RlIEN1cmxfZnRwc2VuZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKmNtZCkKIHsKICAgc3NpemVfdCBieXRlc193cml0dGVuOwogI2RlZmluZSBTQlVGX1NJWkUgMTAyNApAQCAtNDEwNiwxMCArNDAzNiw5IEBACiAgIGVudW0gcHJvdGVjdGlvbl9sZXZlbCBkYXRhX3NlYyA9IGNvbm4tPmRhdGFfcHJvdDsKICNlbmRpZgogCi0gIHZhX2xpc3QgYXA7Ci0gIHZhX3N0YXJ0KGFwLCBmbXQpOwotICB3cml0ZV9sZW4gPSB2c25wcmludGYocywgU0JVRl9TSVpFLTMsIGZtdCwgYXApOwotICB2YV9lbmQoYXApOworICB3cml0ZV9sZW4gPSBzdHJsZW4oY21kKTsKKyAgaWYod3JpdGVfbGVuID4gKHNpemVvZihzKSAtMykpCisgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKIAogICBzdHJjcHkoJnNbd3JpdGVfbGVuXSwgIlxyXG4iKTsgLyogYXBwZW5kIGEgdHJhaWxpbmcgQ1JMRiAqLwogICB3cml0ZV9sZW4gKz0yOwpAQCAtNDI1MSw4ICs0MTgwLDggQEAKICAgY29uc3QgY2hhciAqY3VyX3BvczsKICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogCi0gIGN1cl9wb3MgPSBwYXRoX3RvX3VzZTsgLyogY3VycmVudCBwb3NpdGlvbiBpbiBwYXRoLiBwb2ludCBhdCB0aGUgYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXh0IHBhdGggY29tcG9uZW50ICovCisgIGN1cl9wb3MgPSBwYXRoX3RvX3VzZTsgLyogY3VycmVudCBwb3NpdGlvbiBpbiBwYXRoLiBwb2ludCBhdCB0aGUgYmVnaW4gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IHBhdGggY29tcG9uZW50ICovCiAKICAgZnRwYy0+Y3RsX3ZhbGlkID0gRkFMU0U7CiAgIGZ0cGMtPmN3ZGZhaWwgPSBGQUxTRTsKQEAgLTQyOTEsNiArNDIyMCw3IEBACiAgICAgc2xhc2hfcG9zPXN0cnJjaHIoY3VyX3BvcywgJy8nKTsKICAgICBpZihzbGFzaF9wb3MgfHwgISpjdXJfcG9zKSB7CiAgICAgICBzaXplX3QgZGlybGVuID0gc2xhc2hfcG9zLWN1cl9wb3M7CisgICAgICBDVVJMY29kZSByZXN1bHQ7CiAKICAgICAgIGZ0cGMtPmRpcnMgPSBjYWxsb2MoMSwgc2l6ZW9mKGZ0cGMtPmRpcnNbMF0pKTsKICAgICAgIGlmKCFmdHBjLT5kaXJzKQpAQCAtNDI5OSwxMiArNDIyOSwxMyBAQAogICAgICAgaWYoIWRpcmxlbikKICAgICAgICAgZGlybGVuKys7CiAKLSAgICAgIGZ0cGMtPmRpcnNbMF0gPSBjdXJsX2Vhc3lfdW5lc2NhcGUoY29ubi0+ZGF0YSwgc2xhc2hfcG9zID8gY3VyX3BvcyA6ICIvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2hfcG9zID8gY3VybHhfdXp0b3NpKGRpcmxlbikgOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgIGlmKCFmdHBjLT5kaXJzWzBdKSB7CisgICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBzbGFzaF9wb3MgPyBjdXJfcG9zIDogIi8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2hfcG9zID8gZGlybGVuIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBjLT5kaXJzWzBdLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KICAgICAgIGZ0cGMtPmRpcmRlcHRoID0gMTsgLyogd2UgY29uc2lkZXIgaXQgdG8gYmUgYSBzaW5nbGUgZGlyICovCiAgICAgICBmaWxlbmFtZSA9IHNsYXNoX3BvcyA/IHNsYXNoX3BvcysxIDogY3VyX3BvczsgLyogcmVzdCBpcyBmaWxlIG5hbWUgKi8KQEAgLTQzMjIsNyArNDI1Myw3IEBACiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAgIC8qIHdlIGhhdmUgYSBzcGVjaWFsIGNhc2UgZm9yIGxpc3RpbmcgdGhlIHJvb3QgZGlyIG9ubHkgKi8KLSAgICBpZihzdHJlcXVhbChwYXRoX3RvX3VzZSwgIi8iKSkgeworICAgIGlmKCFzdHJjbXAocGF0aF90b191c2UsICIvIikpIHsKICAgICAgIGN1cl9wb3MrKzsgLyogbWFrZSBpdCBwb2ludCB0byB0aGUgemVybyBieXRlICovCiAgICAgICBmdHBjLT5kaXJzWzBdID0gc3RyZHVwKCIvIik7CiAgICAgICBmdHBjLT5kaXJkZXB0aCsrOwpAQCAtNDMzOSwxOCArNDI3MCwxNSBAQAogICAgICAgICAgIC8qIHdlIHNraXAgZW1wdHkgcGF0aCBjb21wb25lbnRzLCBsaWtlICJ4Ly95IiBzaW5jZSB0aGUgRlRQIGNvbW1hbmQKICAgICAgICAgICAgICBDV0QgcmVxdWlyZXMgYSBwYXJhbWV0ZXIgYW5kIGEgbm9uLWV4aXN0ZW50IHBhcmFtZXRlciBhKSBkb2Vzbid0CiAgICAgICAgICAgICAgd29yayBvbiBtYW55IHNlcnZlcnMgYW5kIGIpIGhhcyBubyBlZmZlY3Qgb24gdGhlIG90aGVycy4gKi8KLSAgICAgICAgICBpbnQgbGVuID0gY3VybHhfc3p0b3NpKHNsYXNoX3BvcyAtIGN1cl9wb3MgKyBhYnNvbHV0ZV9kaXIpOwotICAgICAgICAgIGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdID0KLSAgICAgICAgICAgIGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBjdXJfcG9zIC0gYWJzb2x1dGVfZGlyLCBsZW4sIE5VTEwpOwotICAgICAgICAgIGlmKCFmdHBjLT5kaXJzW2Z0cGMtPmRpcmRlcHRoXSkgeyAvKiBydW4gb3V0IG9mIG1lbW9yeSAuLi4gKi8KLSAgICAgICAgICAgIGZhaWxmKGRhdGEsICJubyBtZW1vcnkiKTsKLSAgICAgICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmKGlzQmFkRnRwU3RyaW5nKGZ0cGMtPmRpcnNbZnRwYy0+ZGlyZGVwdGhdKSkgeworICAgICAgICAgIHNpemVfdCBsZW4gPSBzbGFzaF9wb3MgLSBjdXJfcG9zICsgYWJzb2x1dGVfZGlyOworICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9CisgICAgICAgICAgICBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBjdXJfcG9zIC0gYWJzb2x1dGVfZGlyLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKKyAgICAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgICAgIGZyZWUoZnRwYy0+ZGlyc1tmdHBjLT5kaXJkZXB0aF0pOwogICAgICAgICAgICAgZnJlZWRpcnMoZnRwYyk7Ci0gICAgICAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNDM4NiwxNSArNDMxNCwxMiBAQAogICB9IC8qIHN3aXRjaCAqLwogCiAgIGlmKGZpbGVuYW1lICYmICpmaWxlbmFtZSkgewotICAgIGZ0cGMtPmZpbGUgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoY29ubi0+ZGF0YSwgZmlsZW5hbWUsIDAsIE5VTEwpOwotICAgIGlmKE5VTEwgPT0gZnRwYy0+ZmlsZSkgeworICAgIENVUkxjb2RlIHJlc3VsdCA9CisgICAgICBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBmaWxlbmFtZSwgMCwgICZmdHBjLT5maWxlLCBOVUxMLCBUUlVFKTsKKworICAgIGlmKHJlc3VsdCkgewogICAgICAgZnJlZWRpcnMoZnRwYyk7Ci0gICAgICBmYWlsZihkYXRhLCAibm8gbWVtb3J5Iik7Ci0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICB9Ci0gICAgaWYoaXNCYWRGdHBTdHJpbmcoZnRwYy0+ZmlsZSkpIHsKLSAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgcmV0dXJuIENVUkxFX1VSTF9NQUxGT1JNQVQ7CisgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgfQogICBlbHNlCkBAIC00NDEyLDE2ICs0MzM3LDE4IEBACiAgIGlmKGZ0cGMtPnByZXZwYXRoKSB7CiAgICAgLyogcHJldnBhdGggaXMgInJhdyIgc28gd2UgY29udmVydCB0aGUgaW5wdXQgcGF0aCBiZWZvcmUgd2UgY29tcGFyZSB0aGUKICAgICAgICBzdHJpbmdzICovCi0gICAgaW50IGRsZW47Ci0gICAgY2hhciAqcGF0aCA9IGN1cmxfZWFzeV91bmVzY2FwZShjb25uLT5kYXRhLCBkYXRhLT5zdGF0ZS5wYXRoLCAwLCAmZGxlbik7Ci0gICAgaWYoIXBhdGgpIHsKKyAgICBzaXplX3QgZGxlbjsKKyAgICBjaGFyICpwYXRoOworICAgIENVUkxjb2RlIHJlc3VsdCA9CisgICAgICBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBkYXRhLT5zdGF0ZS5wYXRoLCAwLCAmcGF0aCwgJmRsZW4sIEZBTFNFKTsKKyAgICBpZihyZXN1bHQpIHsKICAgICAgIGZyZWVkaXJzKGZ0cGMpOwotICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGRsZW4gLT0gZnRwYy0+ZmlsZT9jdXJseF91enRvc2koc3RybGVuKGZ0cGMtPmZpbGUpKTowOwotICAgIGlmKChkbGVuID09IGN1cmx4X3V6dG9zaShzdHJsZW4oZnRwYy0+cHJldnBhdGgpKSkgJiYKLSAgICAgICBzdHJuZXF1YWwocGF0aCwgZnRwYy0+cHJldnBhdGgsIGRsZW4pKSB7CisgICAgZGxlbiAtPSBmdHBjLT5maWxlP3N0cmxlbihmdHBjLT5maWxlKTowOworICAgIGlmKChkbGVuID09IHN0cmxlbihmdHBjLT5wcmV2cGF0aCkpICYmCisgICAgICAgIXN0cm5jbXAocGF0aCwgZnRwYy0+cHJldnBhdGgsIGRsZW4pKSB7CiAgICAgICBpbmZvZihkYXRhLCAiUmVxdWVzdCBoYXMgc2FtZSBwYXRoIGFzIHByZXZpb3VzIHRyYW5zZmVyXG4iKTsKICAgICAgIGZ0cGMtPmN3ZGRvbmUgPSBUUlVFOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYi9mdHAuaCBiL2xpYi9mdHAuaAppbmRleCAyZWQ1YjQzLi4zYmJmMjYyIDEwMDY0NAotLS0gYS9saWIvZnRwLmgKKysrIGIvbGliL2Z0cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMSw3ICszMSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IEN1cmxfaGFuZGxlciBDdXJsX2hhbmRsZXJfZnRwczsKICNlbmRpZgogCi1DVVJMY29kZSBDdXJsX2Z0cHNlbmRmKHN0cnVjdCBjb25uZWN0ZGF0YSAqLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitDVVJMY29kZSBDdXJsX2Z0cHNlbmQoc3RydWN0IGNvbm5lY3RkYXRhICosIGNvbnN0IGNoYXIgKmNtZCk7CiBDVVJMY29kZSBDdXJsX0dldEZUUFJlc3BvbnNlKHNzaXplX3QgKm5yZWFkLCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZnRwY29kZSk7CiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX0ZUUCAqLwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgIGZ0cHN0YXRlIHN0YXRlX3NhdmVkOyAvKiB0cmFuc2ZlciB0eXBlIHNhdmVkIHRvIGJlIHJlbG9hZGVkIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgKi8KICAgY3VybF9vZmZfdCByZXRyX3NpemVfc2F2ZWQ7IC8qIFNpemUgb2YgcmV0cmlldmVkIGZpbGUgc2F2ZWQgKi8KLSAgY2hhciAqIHNlcnZlcl9vczsgICAgIC8qIFRoZSB0YXJnZXQgc2VydmVyIG9wZXJhdGluZyBzeXN0ZW0uICovCisgIGNoYXIgKnNlcnZlcl9vczsgICAgIC8qIFRoZSB0YXJnZXQgc2VydmVyIG9wZXJhdGluZyBzeXN0ZW0uICovCiAgIGN1cmxfb2ZmX3Qga25vd25fZmlsZXNpemU7IC8qIGZpbGUgc2l6ZSBpcyBkaWZmZXJlbnQgZnJvbSAtMSwgaWYgd2lsZGNhcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElTVCBwYXJzaW5nIHdhcyBkb25lIGFuZCB3Y19zdGF0ZW1hY2ggc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ICovCmRpZmYgLS1naXQgYS9saWIvZnRwbGlzdHBhcnNlci5jIGIvbGliL2Z0cGxpc3RwYXJzZXIuYwppbmRleCBhYmJmNzZlLi43NDdkYmJhIDEwMDY0NAotLS0gYS9saWIvZnRwbGlzdHBhcnNlci5jCisrKyBiL2xpYi9mdHBsaXN0cGFyc2VyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJmaWxlaW5mby5oIgogI2luY2x1ZGUgImxsaXN0LmgiCiAjaW5jbHVkZSAic3RydG9vZmZ0LmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCiAjaW5jbHVkZSAiZnRwLmgiCiAjaW5jbHVkZSAiZnRwbGlzdHBhcnNlci5oIgogI2luY2x1ZGUgImN1cmxfZm5tYXRjaC5oIgpkaWZmIC0tZ2l0IGEvbGliL2dldGVudi5jIGIvbGliL2dldGVudi5jCmluZGV4IDUwYmI3OWYuLjg5ZDE4MWQgMTAwNjQ0Ci0tLSBhL2xpYi9nZXRlbnYuYworKysgYi9saWIvZ2V0ZW52LmMKQEAgLTMwLDcgKzMwLDggQEAKIHN0YXRpYwogY2hhciAqR2V0RW52KGNvbnN0IGNoYXIgKnZhcmlhYmxlKQogewotI2lmZGVmIF9XSU4zMl9XQ0UKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoQ1VSTF9XSU5ET1dTX0FQUCkKKyAgKHZvaWQpdmFyaWFibGU7CiAgIHJldHVybiBOVUxMOwogI2Vsc2UKICNpZmRlZiBXSU4zMgpkaWZmIC0tZ2l0IGEvbGliL2dldGluZm8uYyBiL2xpYi9nZXRpbmZvLmMKaW5kZXggMjYyY2Q5My4uNDQ1OWE0OCAxMDA2NDQKLS0tIGEvbGliL2dldGluZm8uYworKysgYi9saWIvZ2V0aW5mby5jCkBAIC0zNiw4ICszNiwxMSBAQAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKIC8qCi0gKiBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBpbiB0aGUgYmVnaW5uaW5nIG9mIGEgcGVyZm9ybSgpIHNlc3Npb24KLSAqIGFuZCBzaG91bGQgcmVzZXQgYWxsIHNlc3Npb24taW5mbyB2YXJpYWJsZXMKKyAqIEluaXRpYWxpemUgc3RhdGlzdGljYWwgYW5kIGluZm9ybWF0aW9uYWwgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBjdXJsX2Vhc3lfcmVzZXQsIGN1cmxfZWFzeV9kdXBoYW5kbGUgYW5kIGF0IHRoZQorICogYmVnaW5uaW5nIG9mIGEgcGVyZm9ybSBzZXNzaW9uLiBJdCBtdXN0IHJlc2V0IHRoZSBzZXNzaW9uLWluZm8gdmFyaWFibGVzLAorICogaW4gcGFydGljdWxhciBhbGwgdmFyaWFibGVzIGluIHN0cnVjdCBQdXJlSW5mby4KICAqLwogQ1VSTGNvZGUgQ3VybF9pbml0aW5mbyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogewpAQCAtNTgsMjMgKzYxLDMyIEBACiAgIGluZm8tPmZpbGV0aW1lID0gLTE7IC8qIC0xIGlzIGFuIGlsbGVnYWwgdGltZSBhbmQgdGh1cyBtZWFucyB1bmtub3duICovCiAgIGluZm8tPnRpbWVjb25kID0gRkFMU0U7CiAKKyAgaW5mby0+aGVhZGVyX3NpemUgPSAwOworICBpbmZvLT5yZXF1ZXN0X3NpemUgPSAwOworICBpbmZvLT5wcm94eWF1dGhhdmFpbCA9IDA7CisgIGluZm8tPmh0dHBhdXRoYXZhaWwgPSAwOworICBpbmZvLT5udW1jb25uZWN0cyA9IDA7CisKICAgZnJlZShpbmZvLT5jb250ZW50dHlwZSk7CiAgIGluZm8tPmNvbnRlbnR0eXBlID0gTlVMTDsKIAotICBpbmZvLT5oZWFkZXJfc2l6ZSA9IDA7Ci0gIGluZm8tPnJlcXVlc3Rfc2l6ZSA9IDA7Ci0gIGluZm8tPm51bWNvbm5lY3RzID0gMDsKKyAgZnJlZShpbmZvLT53b3VsZHJlZGlyZWN0KTsKKyAgaW5mby0+d291bGRyZWRpcmVjdCA9IE5VTEw7CiAKICAgaW5mby0+Y29ubl9wcmltYXJ5X2lwWzBdID0gJ1wwJzsKICAgaW5mby0+Y29ubl9sb2NhbF9pcFswXSA9ICdcMCc7CiAgIGluZm8tPmNvbm5fcHJpbWFyeV9wb3J0ID0gMDsKICAgaW5mby0+Y29ubl9sb2NhbF9wb3J0ID0gMDsKIAorI2lmZGVmIFVTRV9TU0wKKyAgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyhkYXRhKTsKKyNlbmRpZgorCiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAogc3RhdGljIENVUkxjb2RlIGdldGluZm9fY2hhcihzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBDVVJMSU5GTyBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcGFyYW1fY2hhcnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipwYXJhbV9jaGFycCkKIHsKICAgc3dpdGNoKGluZm8pIHsKICAgY2FzZSBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMOgpAQCAtMTExLDYgKzEyMyw5IEBACiAgIGNhc2UgQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lEOgogICAgICpwYXJhbV9jaGFycCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1JUU1BfU0VTU0lPTl9JRF07CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTElORk9fU0NIRU1FOgorICAgICpwYXJhbV9jaGFycCA9IGRhdGEtPmluZm8uY29ubl9zY2hlbWU7CisgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gQ1VSTEVfVU5LTk9XTl9PUFRJT047CkBAIC0xNDgsNiArMTYzLDkgQEAKICAgY2FzZSBDVVJMSU5GT19TU0xfVkVSSUZZUkVTVUxUOgogICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19QUk9YWV9TU0xfVkVSSUZZUkVTVUxUOgorICAgICpwYXJhbV9sb25ncCA9IGRhdGEtPnNldC5wcm94eV9zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyAgICBicmVhazsKICAgY2FzZSBDVVJMSU5GT19SRURJUkVDVF9DT1VOVDoKICAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5zZXQuZm9sbG93bG9jYXRpb247CiAgICAgYnJlYWs7CkBAIC0yMTQsNiArMjMyLDkgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBicmVhazsKKyAgY2FzZSBDVVJMSU5GT19QUk9UT0NPTDoKKyAgICAqcGFyYW1fbG9uZ3AgPSBkYXRhLT5pbmZvLmNvbm5fcHJvdG9jb2w7CisgICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKICAgICByZXR1cm4gQ1VSTEVfVU5LTk9XTl9PUFRJT047CkBAIC0zNzAsNyArMzkxLDcgQEAKICAgdmFfbGlzdCBhcmc7CiAgIGxvbmcgKnBhcmFtX2xvbmdwID0gTlVMTDsKICAgZG91YmxlICpwYXJhbV9kb3VibGVwID0gTlVMTDsKLSAgY2hhciAqKnBhcmFtX2NoYXJwID0gTlVMTDsKKyAgY29uc3QgY2hhciAqKnBhcmFtX2NoYXJwID0gTlVMTDsKICAgc3RydWN0IGN1cmxfc2xpc3QgKipwYXJhbV9zbGlzdHAgPSBOVUxMOwogICBjdXJsX3NvY2tldF90ICpwYXJhbV9zb2NrZXRwID0gTlVMTDsKICAgaW50IHR5cGU7CkBAIC0zODQsNyArNDA1LDcgQEAKICAgdHlwZSA9IENVUkxJTkZPX1RZUEVNQVNLICYgKGludClpbmZvOwogICBzd2l0Y2godHlwZSkgewogICBjYXNlIENVUkxJTkZPX1NUUklORzoKLSAgICBwYXJhbV9jaGFycCA9IHZhX2FyZyhhcmcsIGNoYXIgKiopOworICAgIHBhcmFtX2NoYXJwID0gdmFfYXJnKGFyZywgY29uc3QgY2hhciAqKik7CiAgICAgaWYocGFyYW1fY2hhcnApCiAgICAgICByZXN1bHQgPSBnZXRpbmZvX2NoYXIoZGF0YSwgaW5mbywgcGFyYW1fY2hhcnApOwogICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliL2dvcGhlci5jIGIvbGliL2dvcGhlci5jCmluZGV4IGYxZWZiNjAuLmEwNzNkMGIgMTAwNjQ0Ci0tLSBhL2xpYi9nb3BoZXIuYworKysgYi9saWIvZ29waGVyLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI4LDEzICsyOCwxMSBAQAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogI2luY2x1ZGUgInRyYW5zZmVyLmgiCiAjaW5jbHVkZSAic2VuZGYuaCIKLQogI2luY2x1ZGUgInByb2dyZXNzLmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKICNpbmNsdWRlICJnb3BoZXIuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKICNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJlc2NhcGUuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlIHNob3VsZCBiZTogKi8KQEAgLTgzLDcgKzgxLDcgQEAKICAgY2hhciAqc2VsOwogICBjaGFyICpzZWxfb3JnID0gTlVMTDsKICAgc3NpemVfdCBhbW91bnQsIGs7Ci0gIGludCBsZW47CisgIHNpemVfdCBsZW47CiAKICAgKmRvbmUgPSBUUlVFOyAvKiB1bmNvbmRpdGlvbmFsbHkgKi8KIApAQCAtMTA3LDcgKzEwNSw3IEBACiAgICAgICAgIG5ld3BbaV0gPSAnXHgwOSc7CiAKICAgICAvKiAuLi4gYW5kIGZpbmFsbHkgdW5lc2NhcGUgKi8KLSAgICBzZWwgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoZGF0YSwgbmV3cCwgMCwgJmxlbik7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgbmV3cCwgMCwgJnNlbCwgJmxlbiwgRkFMU0UpOwogICAgIGlmKCFzZWwpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICBzZWxfb3JnID0gc2VsOwpAQCAtMTIxLDIwICsxMTksMTcgQEAKICAgICByZXN1bHQgPSBDdXJsX3dyaXRlKGNvbm4sIHNvY2tmZCwgc2VsLCBrLCAmYW1vdW50KTsKICAgICBpZighcmVzdWx0KSB7IC8qIFdoaWNoIG1heSBub3QgaGF2ZSB3cml0dGVuIGl0IGFsbCEgKi8KICAgICAgIHJlc3VsdCA9IEN1cmxfY2xpZW50X3dyaXRlKGNvbm4sIENMSUVOVFdSSVRFX0hFQURFUiwgc2VsLCBhbW91bnQpOwotICAgICAgaWYocmVzdWx0KSB7Ci0gICAgICAgIGZyZWUoc2VsX29yZyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9CisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGJyZWFrOworCiAgICAgICBrIC09IGFtb3VudDsKICAgICAgIHNlbCArPSBhbW91bnQ7CiAgICAgICBpZihrIDwgMSkKICAgICAgICAgYnJlYWs7IC8qIGJ1dCBpdCBkaWQgd3JpdGUgaXQgYWxsICovCiAgICAgfQotICAgIGVsc2UgewotICAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCBzZW5kaW5nIEdvcGhlciByZXF1ZXN0Iik7Ci0gICAgICBmcmVlKHNlbF9vcmcpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CisKICAgICAvKiBEb24ndCBidXN5bG9vcC4gVGhlIGVudGlyZSBsb29wIHRoaW5nIGlzIGEgd29yay1hcm91bmQgYXMgaXQgY2F1c2VzIGEKICAgICAgICBCTE9DS0lORyBiZWhhdmlvciB3aGljaCBpcyBhIE5PLU5PLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByYXRoZXIgYmUKICAgICAgICBzcGxpdCB1cCBpbiBhIGRvIGFuZCBhIGRvaW5nIHBpZWNlIHdoZXJlIHRoZSBwaWVjZXMgdGhhdCBhcmVuJ3QKQEAgLTE0NCwxNCArMTM5LDE4IEBACiAgICAgICAgV2FpdCBhIHdoaWxlIGZvciB0aGUgc29ja2V0IHRvIGJlIHdyaXRhYmxlLiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0CiAgICAgICAgYWNrbm93bGVkZ2UgdGhlIHRpbWVvdXQuCiAgICAgKi8KLSAgICBDdXJsX3NvY2tldF9yZWFkeShDVVJMX1NPQ0tFVF9CQUQsIHNvY2tmZCwgMTAwKTsKKyAgICBpZihTT0NLRVRfV1JJVEFCTEUoc29ja2ZkLCAxMDApIDwgMCkgeworICAgICAgcmVzdWx0ID0gQ1VSTEVfU0VORF9FUlJPUjsKKyAgICAgIGJyZWFrOworICAgIH0KICAgfQogCiAgIGZyZWUoc2VsX29yZyk7CiAKLSAgLyogV2UgY2FuIHVzZSBDdXJsX3NlbmRmIHRvIHNlbmQgdGhlIHRlcm1pbmFsIFxyXG4gcmVsYXRpdmVseSBzYWZlbHkgYW5kCi0gICAgIHNhdmUgYWxsb2NpbmcgYW5vdGhlciBzdHJpbmcvZG9pbmcgYW5vdGhlciBfd3JpdGUgbG9vcC4gKi8KLSAgcmVzdWx0ID0gQ3VybF9zZW5kZihzb2NrZmQsIGNvbm4sICJcclxuIik7CisgIGlmKCFyZXN1bHQpCisgICAgLyogV2UgY2FuIHVzZSBDdXJsX3NlbmRmIHRvIHNlbmQgdGhlIHRlcm1pbmFsIFxyXG4gcmVsYXRpdmVseSBzYWZlbHkgYW5kCisgICAgICAgc2F2ZSBhbGxvY2luZyBhbm90aGVyIHN0cmluZy9kb2luZyBhbm90aGVyIF93cml0ZSBsb29wLiAqLworICAgIHJlc3VsdCA9IEN1cmxfc2VuZGYoc29ja2ZkLCBjb25uLCAiXHJcbiIpOwogICBpZihyZXN1bHQpIHsKICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHNlbmRpbmcgR29waGVyIHJlcXVlc3QiKTsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbGliL2hhc2guYyBiL2xpYi9oYXNoLmMKaW5kZXggOTM3MzgxYi4uNzJhN2E5YiAxMDA2NDQKLS0tIGEvbGliL2hhc2guYworKysgYi9saWIvaGFzaC5jCkBAIC0yOTEsOSArMjkxLDkgQEAKICAgfQogfQogCi1zaXplX3QgQ3VybF9oYXNoX3N0cih2b2lkKiBrZXksIHNpemVfdCBrZXlfbGVuZ3RoLCBzaXplX3Qgc2xvdHNfbnVtKQorc2l6ZV90IEN1cmxfaGFzaF9zdHIodm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSkKIHsKLSAgY29uc3QgY2hhcioga2V5X3N0ciA9IChjb25zdCBjaGFyICopIGtleTsKKyAgY29uc3QgY2hhciAqa2V5X3N0ciA9IChjb25zdCBjaGFyICopIGtleTsKICAgY29uc3QgY2hhciAqZW5kID0ga2V5X3N0ciArIGtleV9sZW5ndGg7CiAgIHVuc2lnbmVkIGxvbmcgaCA9IDUzODE7CiAKZGlmZiAtLWdpdCBhL2xpYi9oYXNoLmggYi9saWIvaGFzaC5oCmluZGV4IDU3YTE3ZjAuLmE1YTZjYWMgMTAwNjQ0Ci0tLSBhL2xpYi9oYXNoLmgKKysrIGIvbGliL2hhc2guaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjksMTYgKzI5LDE2IEBACiAjaW5jbHVkZSAibGxpc3QuaCIKIAogLyogSGFzaCBmdW5jdGlvbiBwcm90b3R5cGUgKi8KLXR5cGVkZWYgc2l6ZV90ICgqaGFzaF9mdW5jdGlvbikgKHZvaWQqIGtleSwKK3R5cGVkZWYgc2l6ZV90ICgqaGFzaF9mdW5jdGlvbikgKHZvaWQgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNsb3RzX251bSk7CiAKIC8qCiAgICBDb21wYXJhdG9yIGZ1bmN0aW9uIHByb3RvdHlwZS4gQ29tcGFyZXMgdHdvIGtleXMuCiAqLwotdHlwZWRlZiBzaXplX3QgKCpjb21wX2Z1bmN0aW9uKSAodm9pZCoga2V5MSwKK3R5cGVkZWYgc2l6ZV90ICgqY29tcF9mdW5jdGlvbikgKHZvaWQgKmtleTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5MV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKmtleTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICprZXkyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleTJfbGVuKTsKIAogdHlwZWRlZiB2b2lkICgqY3VybF9oYXNoX2R0b3IpKHZvaWQgKik7CkBAIC03Niw3ICs3Niw3IEBACiAKIHZvaWQgKkN1cmxfaGFzaF9hZGQoc3RydWN0IGN1cmxfaGFzaCAqaCwgdm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbiwgdm9pZCAqcCk7CiBpbnQgQ3VybF9oYXNoX2RlbGV0ZShzdHJ1Y3QgY3VybF9oYXNoICpoLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKTsKLXZvaWQgKkN1cmxfaGFzaF9waWNrKHN0cnVjdCBjdXJsX2hhc2ggKiwgdm9pZCAqIGtleSwgc2l6ZV90IGtleV9sZW4pOwordm9pZCAqQ3VybF9oYXNoX3BpY2soc3RydWN0IGN1cmxfaGFzaCAqLCB2b2lkICprZXksIHNpemVfdCBrZXlfbGVuKTsKIHZvaWQgQ3VybF9oYXNoX2FwcGx5KHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2IpKHZvaWQgKnVzZXIsIHZvaWQgKnB0cikpOwogaW50IEN1cmxfaGFzaF9jb3VudChzdHJ1Y3QgY3VybF9oYXNoICpoKTsKQEAgLTg0LDEwICs4NCw5IEBACiB2b2lkIEN1cmxfaGFzaF9jbGVhbihzdHJ1Y3QgY3VybF9oYXNoICpoKTsKIHZvaWQgQ3VybF9oYXNoX2NsZWFuX3dpdGhfY3JpdGVyaXVtKHN0cnVjdCBjdXJsX2hhc2ggKmgsIHZvaWQgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKikpOwotc2l6ZV90IEN1cmxfaGFzaF9zdHIodm9pZCoga2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSk7Ci1zaXplX3QgQ3VybF9zdHJfa2V5X2NvbXBhcmUodm9pZCprMSwgc2l6ZV90IGtleTFfbGVuLCB2b2lkKmsyLAorc2l6ZV90IEN1cmxfaGFzaF9zdHIodm9pZCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwgc2l6ZV90IHNsb3RzX251bSk7CitzaXplX3QgQ3VybF9zdHJfa2V5X2NvbXBhcmUodm9pZCAqazEsIHNpemVfdCBrZXkxX2xlbiwgdm9pZCAqazIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleTJfbGVuKTsKLQogdm9pZCBDdXJsX2hhc2hfc3RhcnRfaXRlcmF0ZShzdHJ1Y3QgY3VybF9oYXNoICpoYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3VybF9oYXNoX2l0ZXJhdG9yICppdGVyKTsKIHN0cnVjdCBjdXJsX2hhc2hfZWxlbWVudCAqCmRpZmYgLS1naXQgYS9saWIvaG1hYy5jIGIvbGliL2htYWMuYwppbmRleCAzZGY0NzE1Li5kYWU5NTA1IDEwMDY0NAotLS0gYS9saWIvaG1hYy5jCisrKyBiL2xpYi9obWFjLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogCiBITUFDX2NvbnRleHQgKgogQ3VybF9ITUFDX2luaXQoY29uc3QgSE1BQ19wYXJhbXMgKiBoYXNocGFyYW1zLAotICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGtleSwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7CiAgIHNpemVfdCBpOwotICBITUFDX2NvbnRleHQgKiBjdHh0OwotICB1bnNpZ25lZCBjaGFyICogaGtleTsKKyAgSE1BQ19jb250ZXh0ICpjdHh0OworICB1bnNpZ25lZCBjaGFyICpoa2V5OwogICB1bnNpZ25lZCBjaGFyIGI7CiAKICAgLyogQ3JlYXRlIEhNQUMgY29udGV4dC4gKi8KQEAgLTEwMSw3ICsxMDEsNyBAQAogfQogCiBpbnQgQ3VybF9ITUFDX3VwZGF0ZShITUFDX2NvbnRleHQgKiBjdHh0LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKICAgLyogVXBkYXRlIGZpcnN0IGhhc2ggY2FsY3VsYXRpb24uICovCkBAIC0xMTAsNyArMTEwLDcgQEAKIH0KIAogCi1pbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqIGN0eHQsIHVuc2lnbmVkIGNoYXIgKiByZXN1bHQpCitpbnQgQ3VybF9ITUFDX2ZpbmFsKEhNQUNfY29udGV4dCAqY3R4dCwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQogewogICBjb25zdCBITUFDX3BhcmFtcyAqIGhhc2hwYXJhbXMgPSBjdHh0LT5obWFjX2hhc2g7CiAKZGlmZiAtLWdpdCBhL2xpYi9ob3N0Y2hlY2suYyBiL2xpYi9ob3N0Y2hlY2suYwppbmRleCA0ZGI5ZTZiLi5mNTQ1MjU0IDEwMDY0NAotLS0gYS9saWIvaG9zdGNoZWNrLmMKKysrIGIvbGliL2hvc3RjaGVjay5jCkBAIC0zMCw3ICszMCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImhvc3RjaGVjay5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJpbmV0X3B0b24uaCIKIAogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgcGF0dGVybl93aWxkY2FyZCA9IHN0cmNocihwYXR0ZXJuLCAnKicpOwogICBpZihwYXR0ZXJuX3dpbGRjYXJkID09IE5VTEwpCi0gICAgcmV0dXJuIEN1cmxfcmF3X2VxdWFsKHBhdHRlcm4sIGhvc3RuYW1lKSA/CisgICAgcmV0dXJuIHN0cmNhc2Vjb21wYXJlKHBhdHRlcm4sIGhvc3RuYW1lKSA/CiAgICAgICBDVVJMX0hPU1RfTUFUQ0ggOiBDVVJMX0hPU1RfTk9NQVRDSDsKIAogICAvKiBkZXRlY3QgSVAgYWRkcmVzcyBhcyBob3N0bmFtZSBhbmQgZmFpbCB0aGUgbWF0Y2ggaWYgc28gKi8KQEAgLTk0LDE2ICs5NCwxNiBAQAogICBwYXR0ZXJuX2xhYmVsX2VuZCA9IHN0cmNocihwYXR0ZXJuLCAnLicpOwogICBpZihwYXR0ZXJuX2xhYmVsX2VuZCA9PSBOVUxMIHx8IHN0cmNocihwYXR0ZXJuX2xhYmVsX2VuZCsxLCAnLicpID09IE5VTEwgfHwKICAgICAgcGF0dGVybl93aWxkY2FyZCA+IHBhdHRlcm5fbGFiZWxfZW5kIHx8Ci0gICAgIEN1cmxfcmF3X25lcXVhbChwYXR0ZXJuLCAieG4tLSIsIDQpKSB7CisgICAgIHN0cm5jYXNlY29tcGFyZShwYXR0ZXJuLCAieG4tLSIsIDQpKSB7CiAgICAgd2lsZGNhcmRfZW5hYmxlZCA9IDA7CiAgIH0KICAgaWYoIXdpbGRjYXJkX2VuYWJsZWQpCi0gICAgcmV0dXJuIEN1cmxfcmF3X2VxdWFsKHBhdHRlcm4sIGhvc3RuYW1lKSA/CisgICAgcmV0dXJuIHN0cmNhc2Vjb21wYXJlKHBhdHRlcm4sIGhvc3RuYW1lKSA/CiAgICAgICBDVVJMX0hPU1RfTUFUQ0ggOiBDVVJMX0hPU1RfTk9NQVRDSDsKIAogICBob3N0bmFtZV9sYWJlbF9lbmQgPSBzdHJjaHIoaG9zdG5hbWUsICcuJyk7CiAgIGlmKGhvc3RuYW1lX2xhYmVsX2VuZCA9PSBOVUxMIHx8Ci0gICAgICFDdXJsX3Jhd19lcXVhbChwYXR0ZXJuX2xhYmVsX2VuZCwgaG9zdG5hbWVfbGFiZWxfZW5kKSkKKyAgICAgIXN0cmNhc2Vjb21wYXJlKHBhdHRlcm5fbGFiZWxfZW5kLCBob3N0bmFtZV9sYWJlbF9lbmQpKQogICAgIHJldHVybiBDVVJMX0hPU1RfTk9NQVRDSDsKIAogICAvKiBUaGUgd2lsZGNhcmQgbXVzdCBtYXRjaCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBzbyB0aGUgbGVmdC1tb3N0CkBAIC0xMTQsOCArMTE0LDggQEAKIAogICBwcmVmaXhsZW4gPSBwYXR0ZXJuX3dpbGRjYXJkIC0gcGF0dGVybjsKICAgc3VmZml4bGVuID0gcGF0dGVybl9sYWJlbF9lbmQgLSAocGF0dGVybl93aWxkY2FyZCsxKTsKLSAgcmV0dXJuIEN1cmxfcmF3X25lcXVhbChwYXR0ZXJuLCBob3N0bmFtZSwgcHJlZml4bGVuKSAmJgotICAgIEN1cmxfcmF3X25lcXVhbChwYXR0ZXJuX3dpbGRjYXJkKzEsIGhvc3RuYW1lX2xhYmVsX2VuZCAtIHN1ZmZpeGxlbiwKKyAgcmV0dXJuIHN0cm5jYXNlY29tcGFyZShwYXR0ZXJuLCBob3N0bmFtZSwgcHJlZml4bGVuKSAmJgorICAgIHN0cm5jYXNlY29tcGFyZShwYXR0ZXJuX3dpbGRjYXJkKzEsIGhvc3RuYW1lX2xhYmVsX2VuZCAtIHN1ZmZpeGxlbiwKICAgICAgICAgICAgICAgICAgICAgc3VmZml4bGVuKSA/CiAgICAgQ1VSTF9IT1NUX01BVENIIDogQ1VSTF9IT1NUX05PTUFUQ0g7CiB9CmRpZmYgLS1naXQgYS9saWIvaG9zdGlwLmMgYi9saWIvaG9zdGlwLmMKaW5kZXggZjJkOTg0MS4uNDY0ZmE0ZSAxMDA2NDQKLS0tIGEvbGliL2hvc3RpcC5jCisrKyBiL2xpYi9ob3N0aXAuYwpAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXRtcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0bXMpCiB7CiAjaWZkZWYgVVNFX0FMQVJNX1RJTUVPVVQKICNpZmRlZiBIQVZFX1NJR0FDVElPTgpAQCAtNjAzLDExICs2MDMsMTQgQEAKICAgICAvKiBVU0VfQUxBUk1fVElNRU9VVCBkZWZpbmVkLCBidXQgbm8gdGltZW91dCBhY3R1YWxseSByZXF1ZXN0ZWQgKi8KICAgICByZXR1cm4gQ3VybF9yZXNvbHYoY29ubiwgaG9zdG5hbWUsIHBvcnQsIGVudHJ5KTsKIAotICBpZih0aW1lb3V0IDwgMTAwMCkKKyAgaWYodGltZW91dCA8IDEwMDApIHsKICAgICAvKiBUaGUgYWxhcm0oKSBmdW5jdGlvbiBvbmx5IHByb3ZpZGVzIGludGVnZXIgc2Vjb25kIHJlc29sdXRpb24sIHNvIGlmCiAgICAgICAgd2Ugd2FudCB0byB3YWl0IGxlc3MgdGhhbiBvbmUgc2Vjb25kIHdlIG11c3QgYmFpbCBvdXQgYWxyZWFkeSBub3cuICovCisgICAgZmFpbGYoZGF0YSwKKyAgICAgICAgInJlbWFpbmluZyB0aW1lb3V0IG9mICVsZCB0b28gc21hbGwgdG8gcmVzb2x2ZSB2aWEgU0lHQUxSTSBtZXRob2QiLAorICAgICAgICB0aW1lb3V0KTsKICAgICByZXR1cm4gQ1VSTFJFU09MVl9USU1FRE9VVDsKLQorICB9CiAgIC8qIFRoaXMgYWxsb3dzIHVzIHRvIHRpbWUtb3V0IGZyb20gdGhlIG5hbWUgcmVzb2x2ZXIsIGFzIHRoZSB0aW1lb3V0CiAgICAgIHdpbGwgZ2VuZXJhdGUgYSBzaWduYWwgYW5kIHdlIHdpbGwgc2lnbG9uZ2ptcCgpIGZyb20gdGhhdCBoZXJlLgogICAgICBUaGlzIHRlY2huaXF1ZSBoYXMgcHJvYmxlbXMgKHNlZSBhbGFybWZ1bmMpLgpkaWZmIC0tZ2l0IGEvbGliL2hvc3RpcC5oIGIvbGliL2hvc3RpcC5oCmluZGV4IDkwOThlZTMuLjA5MjRkNTQgMTAwNjQ0Ci0tLSBhL2xpYi9ob3N0aXAuaAorKysgYi9saWIvaG9zdGlwLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcG9ydCwgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICoqZG5zZW50cnkpOwogaW50IEN1cmxfcmVzb2x2X3RpbWVvdXQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LCBzdHJ1Y3QgQ3VybF9kbnNfZW50cnkgKipkbnNlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dG1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfdCB0aW1lb3V0bXMpOwogCiAjaWZkZWYgQ1VSTFJFU19JUFY2CiAvKgpAQCAtMTQzLDcgKzE0Myw3IEBACiAjZW5kaWYKIAogLyogSVB2NCB0aHJlYWRzYWZlIHJlc29sdmUgZnVuY3Rpb24gdXNlZCBmb3Igc3luY2ggYW5kIGFzeW5jaCBidWlsZHMgKi8KLUN1cmxfYWRkcmluZm8gKkN1cmxfaXB2NF9yZXNvbHZlX3IoY29uc3QgY2hhciAqIGhvc3RuYW1lLCBpbnQgcG9ydCk7CitDdXJsX2FkZHJpbmZvICpDdXJsX2lwdjRfcmVzb2x2ZV9yKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBpbnQgcG9ydCk7CiAKIENVUkxjb2RlIEN1cmxfYXN5bmNfcmVzb2x2ZWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpwcm90b2NvbF9jb25uZWN0KTsKZGlmZiAtLWdpdCBhL2xpYi9ob3N0aXA0LmMgYi9saWIvaG9zdGlwNC5jCmluZGV4IDE1ODk1ZDcuLmU0NTkzMjggMTAwNjQ0Ci0tLSBhL2xpYi9ob3N0aXA0LmMKKysrIGIvbGliL2hvc3RpcDQuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAgICAgICogZ2V0aG9zdGJ5bmFtZSgpIGlzIHRoZSBwcmVmZXJyZWQgb25lLgogICAgICAqLwogICBlbHNlIHsKLSAgICBoID0gZ2V0aG9zdGJ5bmFtZSgodm9pZCopaG9zdG5hbWUpOworICAgIGggPSBnZXRob3N0YnluYW1lKCh2b2lkICopaG9zdG5hbWUpOwogI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk9fVEhSRUFEU0FGRSB8fCBIQVZFX0dFVEhPU1RCWU5BTUVfUiAqLwogICB9CiAKZGlmZiAtLWdpdCBhL2xpYi9odHRwLmMgYi9saWIvaHR0cC5jCmluZGV4IDM3OGQ4ZjcuLjM2MzE3ZjUgMTAwNjQ0Ci0tLSBhL2xpYi9odHRwLmMKKysrIGIvbGliL2h0dHAuYwpAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAiY3VybF9iYXNlNjQuaCIKICNpbmNsdWRlICJjb29raWUuaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgogI2luY2x1ZGUgInZhdXRoL3ZhdXRoLmgiCiAjaW5jbHVkZSAidnRscy92dGxzLmgiCiAjaW5jbHVkZSAiaHR0cF9kaWdlc3QuaCIKQEAgLTY4LDcgKzY3LDcgQEAKICNpbmNsdWRlICJwYXJzZWRhdGUuaCIgLyogZm9yIHRoZSB3ZWVrIGRheSBhbmQgbW9udGggbmFtZXMgKi8KICNpbmNsdWRlICJzdHJ0b29mZnQuaCIKICNpbmNsdWRlICJtdWx0aWlmLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgImNvbnRlbnRfZW5jb2RpbmcuaCIKICNpbmNsdWRlICJodHRwX3Byb3h5LmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKQEAgLTc3LDYgKzc2LDcgQEAKICNpbmNsdWRlICJwaXBlbGluZS5oIgogI2luY2x1ZGUgImh0dHAyLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInN0cmR1cC5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTE4Miw3ICsxODIsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIAogICBmb3IoaGVhZCA9IGRhdGEtPnNldC5oZWFkZXJzO2hlYWQ7IGhlYWQ9aGVhZC0+bmV4dCkgewotICAgIGlmKEN1cmxfcmF3X25lcXVhbChoZWFkLT5kYXRhLCB0aGlzaGVhZGVyLCB0aGlzbGVuKSkKKyAgICBpZihzdHJuY2FzZWNvbXBhcmUoaGVhZC0+ZGF0YSwgdGhpc2hlYWRlciwgdGhpc2xlbikpCiAgICAgICByZXR1cm4gaGVhZC0+ZGF0YTsKICAgfQogCkBAIC0yMDgsNyArMjA4LDcgQEAKICAgZm9yKGhlYWQgPSAoY29ubi0+Yml0cy5wcm94eSAmJiBkYXRhLT5zZXQuc2VwX2hlYWRlcnMpID8KICAgICAgICAgZGF0YS0+c2V0LnByb3h5aGVhZGVycyA6IGRhdGEtPnNldC5oZWFkZXJzOwogICAgICAgaGVhZDsgaGVhZD1oZWFkLT5uZXh0KSB7Ci0gICAgaWYoQ3VybF9yYXdfbmVxdWFsKGhlYWQtPmRhdGEsIHRoaXNoZWFkZXIsIHRoaXNsZW4pKQorICAgIGlmKHN0cm5jYXNlY29tcGFyZShoZWFkLT5kYXRhLCB0aGlzaGVhZGVyLCB0aGlzbGVuKSkKICAgICAgIHJldHVybiBoZWFkLT5kYXRhOwogICB9CiAKQEAgLTI4OCw4ICsyODgsOCBAQAogCiAgIGlmKHByb3h5KSB7CiAgICAgdXNlcnAgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOwotICAgIHVzZXIgPSBjb25uLT5wcm94eXVzZXI7Ci0gICAgcHdkID0gY29ubi0+cHJveHlwYXNzd2Q7CisgICAgdXNlciA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBwd2QgPSBjb25uLT5odHRwX3Byb3h5LnBhc3N3ZDsKICAgfQogICBlbHNlIHsKICAgICB1c2VycCA9ICZjb25uLT5hbGxvY3B0ci51c2VycHdkOwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAjZW5kaWYKIAogICAgIC8qIFRoaXMgaXMgbm90IE5UTE0gb3IgbWFueSBieXRlcyBsZWZ0IHRvIHNlbmQ6IGNsb3NlICovCi0gICAgY29ubmNsb3NlKGNvbm4sICJNaWQtYXV0aCBIVFRQIGFuZCBtdWNoIGRhdGEgbGVmdCB0byBzZW5kIik7CisgICAgc3RyZWFtY2xvc2UoY29ubiwgIk1pZC1hdXRoIEhUVFAgYW5kIG11Y2ggZGF0YSBsZWZ0IHRvIHNlbmQiKTsKICAgICBkYXRhLT5yZXEuc2l6ZSA9IDA7IC8qIGRvbid0IGRvd25sb2FkIGFueSBtb3JlIHRoYW4gMCBieXRlcyAqLwogCiAgICAgLyogVGhlcmUgc3RpbGwgaXMgZGF0YSBsZWZ0IHRvIHNlbmQsIGJ1dCB0aGlzIGNvbm5lY3Rpb24gaXMgbWFya2VkIGZvcgpAQCAtNjQyLDcgKzY0Miw3IEBACiAgIGlmKGF1dGgpIHsKICAgICBpbmZvZihkYXRhLCAiJXMgYXV0aCB1c2luZyAlcyB3aXRoIHVzZXIgJyVzJ1xuIiwKICAgICAgICAgICBwcm94eSA/ICJQcm94eSIgOiAiU2VydmVyIiwgYXV0aCwKLSAgICAgICAgICBwcm94eSA/IChjb25uLT5wcm94eXVzZXIgPyBjb25uLT5wcm94eXVzZXIgOiAiIikgOgorICAgICAgICAgIHByb3h5ID8gKGNvbm4tPmh0dHBfcHJveHkudXNlciA/IGNvbm4tPmh0dHBfcHJveHkudXNlciA6ICIiKSA6CiAgICAgICAgICAgICAgICAgICAoY29ubi0+dXNlciA/IGNvbm4tPnVzZXIgOiAiIikpOwogICAgIGF1dGhzdGF0dXMtPm11bHRpID0gKCFhdXRoc3RhdHVzLT5kb25lKSA/IFRSVUUgOiBGQUxTRTsKICAgfQpAQCAtNzI2LDcgKzcyNiw3IEBACiAgICAgIGNvbm4tPmJpdHMubmV0cmMgfHwKICAgICAgIWRhdGEtPnN0YXRlLmZpcnN0X2hvc3QgfHwKICAgICAgZGF0YS0+c2V0Lmh0dHBfZGlzYWJsZV9ob3N0bmFtZV9jaGVja19iZWZvcmVfYXV0aGVudGljYXRpb24gfHwKLSAgICAgQ3VybF9yYXdfZXF1YWwoZGF0YS0+c3RhdGUuZmlyc3RfaG9zdCwgY29ubi0+aG9zdC5uYW1lKSkgeworICAgICBzdHJjYXNlY29tcGFyZShkYXRhLT5zdGF0ZS5maXJzdF9ob3N0LCBjb25uLT5ob3N0Lm5hbWUpKSB7CiAgICAgcmVzdWx0ID0gb3V0cHV0X2F1dGhfaGVhZGVycyhjb25uLCBhdXRoaG9zdCwgcmVxdWVzdCwgcGF0aCwgRkFMU0UpOwogICB9CiAgIGVsc2UKQEAgLTc4NCwyMyArNzg0LDI3IEBACiAgIHdoaWxlKCphdXRoKSB7CiAjaWZkZWYgVVNFX1NQTkVHTwogICAgIGlmKGNoZWNrcHJlZml4KCJOZWdvdGlhdGUiLCBhdXRoKSkgewotICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9ORUdPVElBVEU7Ci0gICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfTkVHT1RJQVRFOworICAgICAgaWYoKGF1dGhwLT5hdmFpbCAmIENVUkxBVVRIX05FR09USUFURSkgfHwKKyAgICAgICAgIEN1cmxfYXV0aF9pc19zcG5lZ29fc3VwcG9ydGVkKCkpIHsKKyAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9ORUdPVElBVEU7CisgICAgICAgIGF1dGhwLT5hdmFpbCB8PSBDVVJMQVVUSF9ORUdPVElBVEU7CiAKLSAgICAgIGlmKGF1dGhwLT5waWNrZWQgPT0gQ1VSTEFVVEhfTkVHT1RJQVRFKSB7Ci0gICAgICAgIGlmKG5lZ2RhdGEtPnN0YXRlID09IEdTU19BVVRIU0VOVCB8fCBuZWdkYXRhLT5zdGF0ZSA9PSBHU1NfQVVUSE5PTkUpIHsKLSAgICAgICAgICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX2lucHV0X25lZ290aWF0ZShjb25uLCBwcm94eSwgYXV0aCk7Ci0gICAgICAgICAgaWYoIXJlc3VsdCkgewotICAgICAgICAgICAgREVCVUdBU1NFUlQoIWRhdGEtPnJlcS5uZXd1cmwpOwotICAgICAgICAgICAgZGF0YS0+cmVxLm5ld3VybCA9IHN0cmR1cChkYXRhLT5jaGFuZ2UudXJsKTsKLSAgICAgICAgICAgIGlmKCFkYXRhLT5yZXEubmV3dXJsKQotICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gRkFMU0U7Ci0gICAgICAgICAgICAvKiB3ZSByZWNlaXZlZCBhIEdTUyBhdXRoIHRva2VuIGFuZCB3ZSBkZWFsdCB3aXRoIGl0IGZpbmUgKi8KLSAgICAgICAgICAgIG5lZ2RhdGEtPnN0YXRlID0gR1NTX0FVVEhSRUNWOworICAgICAgICBpZihhdXRocC0+cGlja2VkID09IENVUkxBVVRIX05FR09USUFURSkgeworICAgICAgICAgIGlmKG5lZ2RhdGEtPnN0YXRlID09IEdTU19BVVRIU0VOVCB8fAorICAgICAgICAgICAgIG5lZ2RhdGEtPnN0YXRlID09IEdTU19BVVRITk9ORSkgeworICAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9pbnB1dF9uZWdvdGlhdGUoY29ubiwgcHJveHksIGF1dGgpOworICAgICAgICAgICAgaWYoIXJlc3VsdCkgeworICAgICAgICAgICAgICBERUJVR0FTU0VSVCghZGF0YS0+cmVxLm5ld3VybCk7CisgICAgICAgICAgICAgIGRhdGEtPnJlcS5uZXd1cmwgPSBzdHJkdXAoZGF0YS0+Y2hhbmdlLnVybCk7CisgICAgICAgICAgICAgIGlmKCFkYXRhLT5yZXEubmV3dXJsKQorICAgICAgICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgICAgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IEZBTFNFOworICAgICAgICAgICAgICAvKiB3ZSByZWNlaXZlZCBhIEdTUyBhdXRoIHRva2VuIGFuZCB3ZSBkZWFsdCB3aXRoIGl0IGZpbmUgKi8KKyAgICAgICAgICAgICAgbmVnZGF0YS0+c3RhdGUgPSBHU1NfQVVUSFJFQ1Y7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gVFJVRTsKICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtODA5LDM5ICs4MTMsNDQgQEAKICNpZmRlZiBVU0VfTlRMTQogICAgICAgLyogTlRMTSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBTU0wgY3J5cHRvIGxpYnMgKi8KICAgICAgIGlmKGNoZWNrcHJlZml4KCJOVExNIiwgYXV0aCkpIHsKLSAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9OVExNOwotICAgICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfTlRMTTsKLSAgICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNIHx8Ci0gICAgICAgICAgIGF1dGhwLT5waWNrZWQgPT0gQ1VSTEFVVEhfTlRMTV9XQikgewotICAgICAgICAgIC8qIE5UTE0gYXV0aGVudGljYXRpb24gaXMgcGlja2VkIGFuZCBhY3RpdmF0ZWQgKi8KLSAgICAgICAgICBDVVJMY29kZSByZXN1bHQgPSBDdXJsX2lucHV0X250bG0oY29ubiwgcHJveHksIGF1dGgpOwotICAgICAgICAgIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIGRhdGEtPnN0YXRlLmF1dGhwcm9ibGVtID0gRkFMU0U7Ci0jaWZkZWYgTlRMTV9XQl9FTkFCTEVECi0gICAgICAgICAgICBpZihhdXRocC0+cGlja2VkID09IENVUkxBVVRIX05UTE1fV0IpIHsKLSAgICAgICAgICAgICAgKmF2YWlscCAmPSB+Q1VSTEFVVEhfTlRMTTsKLSAgICAgICAgICAgICAgYXV0aHAtPmF2YWlsICY9IH5DVVJMQVVUSF9OVExNOwotICAgICAgICAgICAgICAqYXZhaWxwIHw9IENVUkxBVVRIX05UTE1fV0I7Ci0gICAgICAgICAgICAgIGF1dGhwLT5hdmFpbCB8PSBDVVJMQVVUSF9OVExNX1dCOworICAgICAgICBpZigoYXV0aHAtPmF2YWlsICYgQ1VSTEFVVEhfTlRMTSkgfHwKKyAgICAgICAgICAgKGF1dGhwLT5hdmFpbCAmIENVUkxBVVRIX05UTE1fV0IpIHx8CisgICAgICAgICAgIEN1cmxfYXV0aF9pc19udGxtX3N1cHBvcnRlZCgpKSB7CisgICAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9OVExNOworICAgICAgICAgIGF1dGhwLT5hdmFpbCB8PSBDVVJMQVVUSF9OVExNOwogCi0gICAgICAgICAgICAgIC8qIEdldCB0aGUgY2hhbGxlbmdlLW1lc3NhZ2Ugd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8KLSAgICAgICAgICAgICAgICogbnRsbV9hdXRoIGZvciBnZW5lcmF0aW5nIHRoZSB0eXBlIDMgbWVzc2FnZSBsYXRlciAqLwotICAgICAgICAgICAgICB3aGlsZSgqYXV0aCAmJiBJU1NQQUNFKCphdXRoKSkKLSAgICAgICAgICAgICAgICBhdXRoKys7Ci0gICAgICAgICAgICAgIGlmKGNoZWNrcHJlZml4KCJOVExNIiwgYXV0aCkpIHsKLSAgICAgICAgICAgICAgICBhdXRoICs9IHN0cmxlbigiTlRMTSIpOworICAgICAgICAgIGlmKGF1dGhwLT5waWNrZWQgPT0gQ1VSTEFVVEhfTlRMTSB8fAorICAgICAgICAgICAgIGF1dGhwLT5waWNrZWQgPT0gQ1VSTEFVVEhfTlRMTV9XQikgeworICAgICAgICAgICAgLyogTlRMTSBhdXRoZW50aWNhdGlvbiBpcyBwaWNrZWQgYW5kIGFjdGl2YXRlZCAqLworICAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ3VybF9pbnB1dF9udGxtKGNvbm4sIHByb3h5LCBhdXRoKTsKKyAgICAgICAgICAgIGlmKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBGQUxTRTsKKyNpZmRlZiBOVExNX1dCX0VOQUJMRUQKKyAgICAgICAgICAgICAgaWYoYXV0aHAtPnBpY2tlZCA9PSBDVVJMQVVUSF9OVExNX1dCKSB7CisgICAgICAgICAgICAgICAgKmF2YWlscCAmPSB+Q1VSTEFVVEhfTlRMTTsKKyAgICAgICAgICAgICAgICBhdXRocC0+YXZhaWwgJj0gfkNVUkxBVVRIX05UTE07CisgICAgICAgICAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9OVExNX1dCOworICAgICAgICAgICAgICAgIGF1dGhwLT5hdmFpbCB8PSBDVVJMQVVUSF9OVExNX1dCOworCisgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBjaGFsbGVuZ2UtbWVzc2FnZSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAqIG50bG1fYXV0aCBmb3IgZ2VuZXJhdGluZyB0aGUgdHlwZSAzIG1lc3NhZ2UgbGF0ZXIgKi8KICAgICAgICAgICAgICAgICB3aGlsZSgqYXV0aCAmJiBJU1NQQUNFKCphdXRoKSkKICAgICAgICAgICAgICAgICAgIGF1dGgrKzsKLSAgICAgICAgICAgICAgICBpZigqYXV0aCkKLSAgICAgICAgICAgICAgICAgIGlmKChjb25uLT5jaGFsbGVuZ2VfaGVhZGVyID0gc3RyZHVwKGF1dGgpKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgICBpZihjaGVja3ByZWZpeCgiTlRMTSIsIGF1dGgpKSB7CisgICAgICAgICAgICAgICAgICBhdXRoICs9IHN0cmxlbigiTlRMTSIpOworICAgICAgICAgICAgICAgICAgd2hpbGUoKmF1dGggJiYgSVNTUEFDRSgqYXV0aCkpCisgICAgICAgICAgICAgICAgICAgIGF1dGgrKzsKKyAgICAgICAgICAgICAgICAgIGlmKCphdXRoKQorICAgICAgICAgICAgICAgICAgICBpZigoY29ubi0+Y2hhbGxlbmdlX2hlYWRlciA9IHN0cmR1cChhdXRoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluZm9mKGRhdGEsICJBdXRoZW50aWNhdGlvbiBwcm9ibGVtLiBJZ25vcmluZyB0aGlzLlxuIik7Ci0gICAgICAgICAgICBkYXRhLT5zdGF0ZS5hdXRocHJvYmxlbSA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgaW5mb2YoZGF0YSwgIkF1dGhlbnRpY2F0aW9uIHByb2JsZW0uIElnbm9yaW5nIHRoaXMuXG4iKTsKKyAgICAgICAgICAgICAgZGF0YS0+c3RhdGUuYXV0aHByb2JsZW0gPSBUUlVFOworICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpAQCAtODQ5LDE4ICs4NTgsMTggQEAKICNlbmRpZgogI2lmbmRlZiBDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEgKICAgICAgICAgaWYoY2hlY2twcmVmaXgoIkRpZ2VzdCIsIGF1dGgpKSB7Ci0gICAgICAgICAgaWYoKGF1dGhwLT5hdmFpbCAmIENVUkxBVVRIX0RJR0VTVCkgIT0gMCkgeworICAgICAgICAgIGlmKChhdXRocC0+YXZhaWwgJiBDVVJMQVVUSF9ESUdFU1QpICE9IDApCiAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSWdub3JpbmcgZHVwbGljYXRlIGRpZ2VzdCBhdXRoIGhlYWRlci5cbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICBlbHNlIGlmKEN1cmxfYXV0aF9pc19kaWdlc3Rfc3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIENVUkxjb2RlIHJlc3VsdDsKKwogICAgICAgICAgICAgKmF2YWlscCB8PSBDVVJMQVVUSF9ESUdFU1Q7CiAgICAgICAgICAgICBhdXRocC0+YXZhaWwgfD0gQ1VSTEFVVEhfRElHRVNUOwogCiAgICAgICAgICAgICAvKiBXZSBjYWxsIHRoaXMgZnVuY3Rpb24gb24gaW5wdXQgRGlnZXN0IGhlYWRlcnMgZXZlbiBpZiBEaWdlc3QKICAgICAgICAgICAgICAqIGF1dGhlbnRpY2F0aW9uIGlzbid0IGFjdGl2YXRlZCB5ZXQsIGFzIHdlIG5lZWQgdG8gc3RvcmUgdGhlCi0gICAgICAgICAgICAgKiBpbmNvbWluZyBkYXRhIGZyb20gdGhpcyBoZWFkZXIgaW4gY2FzZSB3ZSBhcmUgZ29ubmEgdXNlCi0gICAgICAgICAgICAgKiBEaWdlc3QuICovCisgICAgICAgICAgICAgKiBpbmNvbWluZyBkYXRhIGZyb20gdGhpcyBoZWFkZXIgaW4gY2FzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgKiBEaWdlc3QgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfaW5wdXRfZGlnZXN0KGNvbm4sIHByb3h5LCBhdXRoKTsKICAgICAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiQXV0aGVudGljYXRpb24gcHJvYmxlbS4gSWdub3JpbmcgdGhpcy5cbiIpOwpAQCAtMTA5MCw3ICsxMDk5LDkgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgaWYoKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpICYmIGNvbm4tPmh0dHB2ZXJzaW9uICE9IDIwKSB7CisgIGlmKChjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMIHx8CisgICAgIGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUykKKyAgICAgJiYgY29ubi0+aHR0cHZlcnNpb24gIT0gMjApIHsKICAgICAvKiBXZSBuZXZlciBzZW5kIG1vcmUgdGhhbiBDVVJMX01BWF9XUklURV9TSVpFIGJ5dGVzIGluIG9uZSBzaW5nbGUgY2h1bmsKICAgICAgICB3aGVuIHdlIHNwZWFrIEhUVFBTLCBhcyBpZiBvbmx5IGEgZnJhY3Rpb24gb2YgaXQgaXMgc2VudCBub3csIHRoaXMgZGF0YQogICAgICAgIG5lZWRzIHRvIGZpdCBpbnRvIHRoZSBub3JtYWwgcmVhZC1jYWxsYmFjayBidWZmZXIgbGF0ZXIgb24gYW5kIHRoYXQKQEAgLTEyNDcsMTQgKzEyNTgsMTMgQEAKIAogICAgIGlmKGluLT5idWZmZXIpCiAgICAgICAvKiB3ZSBoYXZlIGEgYnVmZmVyLCBlbmxhcmdlIHRoZSBleGlzdGluZyBvbmUgKi8KLSAgICAgIG5ld19yYiA9IHJlYWxsb2MoaW4tPmJ1ZmZlciwgbmV3X3NpemUpOworICAgICAgbmV3X3JiID0gQ3VybF9zYWZlcmVhbGxvYyhpbi0+YnVmZmVyLCBuZXdfc2l6ZSk7CiAgICAgZWxzZQogICAgICAgLyogY3JlYXRlIGEgbmV3IGJ1ZmZlciAqLwogICAgICAgbmV3X3JiID0gbWFsbG9jKG5ld19zaXplKTsKIAogICAgIGlmKCFuZXdfcmIpIHsKICAgICAgIC8qIElmIHdlIGZhaWxlZCwgd2UgY2xlYW51cCB0aGUgd2hvbGUgYnVmZmVyIGFuZCByZXR1cm4gZXJyb3IgKi8KLSAgICAgIEN1cmxfc2FmZWZyZWUoaW4tPmJ1ZmZlcik7CiAgICAgICBmcmVlKGluKTsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIH0KQEAgLTEyOTYsNyArMTMwNiw3IEBACiAgIGNvbnN0IGNoYXIgKnN0YXJ0OwogICBjb25zdCBjaGFyICplbmQ7CiAKLSAgaWYoIUN1cmxfcmF3X25lcXVhbChoZWFkZXJsaW5lLCBoZWFkZXIsIGhsZW4pKQorICBpZighc3RybmNhc2Vjb21wYXJlKGhlYWRlcmxpbmUsIGhlYWRlciwgaGxlbikpCiAgICAgcmV0dXJuIEZBTFNFOyAvKiBkb2Vzbid0IHN0YXJ0IHdpdGggaGVhZGVyICovCiAKICAgLyogcGFzcyB0aGUgaGVhZGVyICovCkBAIC0xMzIyLDcgKzEzMzIsNyBAQAogCiAgIC8qIGZpbmQgdGhlIGNvbnRlbnQgc3RyaW5nIGluIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCiAgIGZvcig7bGVuPj1jbGVuO2xlbi0tLCBzdGFydCsrKSB7Ci0gICAgaWYoQ3VybF9yYXdfbmVxdWFsKHN0YXJ0LCBjb250ZW50LCBjbGVuKSkKKyAgICBpZihzdHJuY2FzZWNvbXBhcmUoc3RhcnQsIGNvbnRlbnQsIGNsZW4pKQogICAgICAgcmV0dXJuIFRSVUU7IC8qIG1hdGNoISAqLwogICB9CiAKQEAgLTEzNDIsMTAgKzEzNTIsMTMgQEAKICAgY29ubmtlZXAoY29ubiwgIkhUVFAgZGVmYXVsdCIpOwogCiAgIC8qIHRoZSBDT05ORUNUIHByb2NlZHVyZSBtaWdodCBub3QgaGF2ZSBiZWVuIGNvbXBsZXRlZCAqLwotICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubik7CisgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uLCBGSVJTVFNPQ0tFVCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCisgIGlmKENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgcmV0dXJuIENVUkxFX09LOyAvKiB3YWl0IGZvciBIVFRQUyBwcm94eSBTU0wgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUgKi8KKwogICBpZihjb25uLT50dW5uZWxfc3RhdGVbRklSU1RTT0NLRVRdID09IFRVTk5FTF9DT05ORUNUKQogICAgIC8qIG5vdGhpbmcgZWxzZSB0byBkbyBleGNlcHQgd2FpdCByaWdodCBub3cgLSB3ZSdyZSBub3QgZG9uZSBoZXJlLiAqLwogICAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTEzODgsNTAgKzE0MDEsMTYgQEAKIAogICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfREFSV0lOU1NMKSB8fCBkZWZpbmVkKFVTRV9QT0xBUlNTTCkgfHwgZGVmaW5lZChVU0VfTlNTKSB8fCBcCi0gICAgZGVmaW5lZChVU0VfTUJFRFRMUykKLS8qIFRoaXMgZnVuY3Rpb24gaXMgZm9yIE9wZW5TU0wsIEdudVRMUywgZGFyd2luc3NsLCBzY2hhbm5lbCBhbmQgcG9sYXJzc2wgb25seS4KLSAgIEl0IHNob3VsZCBiZSBtYWRlIHRvIHF1ZXJ5IHRoZSBnZW5lcmljIFNTTCBsYXllciBpbnN0ZWFkLiAqLwogc3RhdGljIGludCBodHRwc19nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90ICpzb2NrcywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpCiB7Ci0gIGlmKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9TU0wpIHsKLSAgICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOwotCi0gICAgaWYoIW51bXNvY2tzKQotICAgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7Ci0KLSAgICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgewotICAgICAgLyogd3JpdGUgbW9kZSAqLwotICAgICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKLSAgICAgIHJldHVybiBHRVRTT0NLX1dSSVRFU09DSygwKTsKLSAgICB9Ci0gICAgZWxzZSBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfcmVhZGluZykgewotICAgICAgLyogcmVhZCBtb2RlICovCi0gICAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwotICAgICAgcmV0dXJuIEdFVFNPQ0tfUkVBRFNPQ0soMCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIENVUkxFX09LOwotfQotI2Vsc2UKLSNpZmRlZiBVU0VfU1NMCi1zdGF0aWMgaW50IGh0dHBzX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgKnNvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKLXsKLSAgKHZvaWQpY29ubjsKLSAgKHZvaWQpc29ja3M7Ci0gICh2b2lkKW51bXNvY2tzOworICBpZihjb25uLT5oYW5kbGVyLT5mbGFncyAmIFBST1RPUFRfU1NMKQorICAgIHJldHVybiBDdXJsX3NzbF9nZXRzb2NrKGNvbm4sIHNvY2tzLCBudW1zb2Nrcyk7CiAgIHJldHVybiBHRVRTT0NLX0JMQU5LOwogfQogI2VuZGlmIC8qIFVTRV9TU0wgKi8KLSNlbmRpZiAvKiBVU0VfT1BFTlNTTCB8fCBVU0VfR05VVExTIHx8IFVTRV9TQ0hBTk5FTCAqLwogCiAvKgogICogQ3VybF9odHRwX2RvbmUoKSBnZXRzIGNhbGxlZCBhZnRlciBhIHNpbmdsZSBIVFRQIHJlcXVlc3QgaGFzIGJlZW4KQEAgLTE0NDMsOSArMTQyMiw4IEBACiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgSFRUUCAqaHR0cCA9IGRhdGEtPnJlcS5wcm90b3A7Ci0jaWZkZWYgVVNFX05HSFRUUDIKLSAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7Ci0jZW5kaWYKKworICBpbmZvZihkYXRhLCAiQ3VybF9odHRwX2RvbmU6IGNhbGxlZCBwcmVtYXR1cmUgPT0gJWRcbiIsIHByZW1hdHVyZSk7CiAKICAgQ3VybF91bmVuY29kZV9jbGVhbnVwKGNvbm4pOwogCkBAIC0xNDU4LDcgKzE0MzYsNyBAQAogICAgICAqIERvIG5vdCBjbG9zZSBDT05ORUNUX09OTFkgY29ubmVjdGlvbnMuICovCiAgICAgaWYoKGRhdGEtPnJlcS5odHRwY29kZSAhPSA0MDEpICYmIChkYXRhLT5yZXEuaHR0cGNvZGUgIT0gNDA3KSAmJgogICAgICAgICFkYXRhLT5zZXQuY29ubmVjdF9vbmx5KQotICAgICAgY29ubmNsb3NlKGNvbm4sICJOZWdvdGlhdGUgdHJhbnNmZXIgY29tcGxldGVkIik7CisgICAgICBzdHJlYW1jbG9zZShjb25uLCAiTmVnb3RpYXRlIHRyYW5zZmVyIGNvbXBsZXRlZCIpOwogICAgIEN1cmxfY2xlYW51cF9uZWdvdGlhdGUoZGF0YSk7CiAgIH0KICNlbmRpZgpAQCAtMTQ3NSwyNyArMTQ1Myw3IEBACiAgICAgaHR0cC0+c2VuZF9idWZmZXIgPSBOVUxMOyAvKiBjbGVhciB0aGUgcG9pbnRlciAqLwogICB9CiAKLSNpZmRlZiBVU0VfTkdIVFRQMgotICBpZihodHRwLT5oZWFkZXJfcmVjdmJ1ZikgewotICAgIERFQlVHRihpbmZvZihkYXRhLCAiZnJlZSBoZWFkZXJfcmVjdmJ1ZiEhXG4iKSk7Ci0gICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoaHR0cC0+aGVhZGVyX3JlY3ZidWYpOwotICAgIGh0dHAtPmhlYWRlcl9yZWN2YnVmID0gTlVMTDsgLyogY2xlYXIgdGhlIHBvaW50ZXIgKi8KLSAgICBDdXJsX2FkZF9idWZmZXJfZnJlZShodHRwLT50cmFpbGVyX3JlY3ZidWYpOwotICAgIGh0dHAtPnRyYWlsZXJfcmVjdmJ1ZiA9IE5VTEw7IC8qIGNsZWFyIHRoZSBwb2ludGVyICovCi0gICAgaWYoaHR0cC0+cHVzaF9oZWFkZXJzKSB7Ci0gICAgICAvKiBpZiB0aGV5IHdlcmVuJ3QgdXNlZCBhbmQgdGhlbiBmcmVlZCBiZWZvcmUgKi8KLSAgICAgIGZvcig7IGh0dHAtPnB1c2hfaGVhZGVyc191c2VkID4gMDsgLS1odHRwLT5wdXNoX2hlYWRlcnNfdXNlZCkgewotICAgICAgICBmcmVlKGh0dHAtPnB1c2hfaGVhZGVyc1todHRwLT5wdXNoX2hlYWRlcnNfdXNlZCAtIDFdKTsKLSAgICAgIH0KLSAgICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzKTsKLSAgICAgIGh0dHAtPnB1c2hfaGVhZGVycyA9IE5VTEw7Ci0gICAgfQotICB9Ci0gIGlmKGh0dHAtPnN0cmVhbV9pZCkgewotICAgIG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShodHRwYy0+aDIsIGh0dHAtPnN0cmVhbV9pZCwgMCk7Ci0gICAgaHR0cC0+c3RyZWFtX2lkID0gMDsKLSAgfQotI2VuZGlmCisgIEN1cmxfaHR0cDJfZG9uZShjb25uLCBwcmVtYXR1cmUpOwogCiAgIGlmKEhUVFBSRVFfUE9TVF9GT1JNID09IGRhdGEtPnNldC5odHRwcmVxKSB7CiAgICAgZGF0YS0+cmVxLmJ5dGVjb3VudCA9IGh0dHAtPnJlYWRieXRlY291bnQgKyBodHRwLT53cml0ZWJ5dGVjb3VudDsKQEAgLTE2NjAsNiArMTYxOCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbjogKi8KICAgICAgICAgICAgICAgICAgIGNoZWNrcHJlZml4KCJDb25uZWN0aW9uIiwgaGVhZGVycy0+ZGF0YSkpCiAgICAgICAgICAgICA7CisgICAgICAgICAgZWxzZSBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmCisgICAgICAgICAgICAgICAgICBjaGVja3ByZWZpeCgiVHJhbnNmZXItRW5jb2Rpbmc6IiwgaGVhZGVycy0+ZGF0YSkpCisgICAgICAgICAgICAvKiBIVFRQLzIgZG9lc24ndCBzdXBwb3J0IGNodW5rZWQgcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIDsKICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfYWRkX2J1ZmZlcmYocmVxX2J1ZmZlciwgIiVzXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMtPmRhdGEpOwpAQCAtMTk0Niw0NyArMTkwOCw0MiBAQAogICB9CiAjZW5kaWYKIAotICBpZihjb25uLT5odHRwdmVyc2lvbiA9PSAyMCkKLSAgICAvKiBJbiBIVFRQMiBmb3JiaWRzIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkICovCi0gICAgcHRyID0gTlVMTDsKKyAgcHRyID0gQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIlRyYW5zZmVyLUVuY29kaW5nOiIpOworICBpZihwdHIpIHsKKyAgICAvKiBTb21lIGtpbmQgb2YgVEUgaXMgcmVxdWVzdGVkLCBjaGVjayBpZiAnY2h1bmtlZCcgaXMgY2hvc2VuICovCisgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPQorICAgICAgQ3VybF9jb21wYXJlaGVhZGVyKHB0ciwgIlRyYW5zZmVyLUVuY29kaW5nOiIsICJjaHVua2VkIik7CisgIH0KICAgZWxzZSB7Ci0gICAgcHRyID0gQ3VybF9jaGVja2hlYWRlcnMoY29ubiwgIlRyYW5zZmVyLUVuY29kaW5nOiIpOwotICAgIGlmKHB0cikgewotICAgICAgLyogU29tZSBraW5kIG9mIFRFIGlzIHJlcXVlc3RlZCwgY2hlY2sgaWYgJ2NodW5rZWQnIGlzIGNob3NlbiAqLwotICAgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPQotICAgICAgICBDdXJsX2NvbXBhcmVoZWFkZXIocHRyLCAiVHJhbnNmZXItRW5jb2Rpbmc6IiwgImNodW5rZWQiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBpZigoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wmUFJPVE9fRkFNSUxZX0hUVFApICYmCi0gICAgICAgICBkYXRhLT5zZXQudXBsb2FkICYmCi0gICAgICAgICAoZGF0YS0+c3RhdGUuaW5maWxlc2l6ZSA9PSAtMSkpIHsKLSAgICAgICAgaWYoY29ubi0+Yml0cy5hdXRobmVnKQotICAgICAgICAgIC8qIGRvbid0IGVuYWJsZSBjaHVua2VkIGR1cmluZyBhdXRoIG5lZyAqLwotICAgICAgICAgIDsKLSAgICAgICAgZWxzZSBpZih1c2VfaHR0cF8xXzFwbHVzKGRhdGEsIGNvbm4pKSB7Ci0gICAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCi0gICAgICAgICAgZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGZhaWxmKGRhdGEsICJDaHVua3kgdXBsb2FkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFRUUCAxLjAiKTsKLSAgICAgICAgICByZXR1cm4gQ1VSTEVfVVBMT0FEX0ZBSUxFRDsKLSAgICAgICAgfQorICAgIGlmKChjb25uLT5oYW5kbGVyLT5wcm90b2NvbCZQUk9UT19GQU1JTFlfSFRUUCkgJiYKKyAgICAgICBkYXRhLT5zZXQudXBsb2FkICYmCisgICAgICAgKGRhdGEtPnN0YXRlLmluZmlsZXNpemUgPT0gLTEpKSB7CisgICAgICBpZihjb25uLT5iaXRzLmF1dGhuZWcpCisgICAgICAgIC8qIGRvbid0IGVuYWJsZSBjaHVua2VkIGR1cmluZyBhdXRoIG5lZyAqLworICAgICAgICA7CisgICAgICBlbHNlIGlmKHVzZV9odHRwXzFfMXBsdXMoZGF0YSwgY29ubikpIHsKKyAgICAgICAgLyogSFRUUCwgdXBsb2FkLCB1bmtub3duIGZpbGUgc2l6ZSBhbmQgbm90IEhUVFAgMS4wICovCisgICAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gVFJVRTsKICAgICAgIH0KICAgICAgIGVsc2UgewotICAgICAgICAvKiBlbHNlLCBubyBjaHVua3kgdXBsb2FkICovCi0gICAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gRkFMU0U7CisgICAgICAgIGZhaWxmKGRhdGEsICJDaHVua3kgdXBsb2FkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSFRUUCAxLjAiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1VQTE9BRF9GQUlMRUQ7CiAgICAgICB9Ci0KLSAgICAgIGlmKGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KQotICAgICAgICB0ZSA9ICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG4iOwogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGVsc2UsIG5vIGNodW5reSB1cGxvYWQgKi8KKyAgICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gRkFMU0U7CisgICAgfQorCisgICAgaWYoZGF0YS0+cmVxLnVwbG9hZF9jaHVua3kpCisgICAgICB0ZSA9ICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG4iOwogICB9CiAKICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5ob3N0KTsKIAogICBwdHIgPSBDdXJsX2NoZWNraGVhZGVycyhjb25uLCAiSG9zdDoiKTsKICAgaWYocHRyICYmICghZGF0YS0+c3RhdGUudGhpc19pc19hX2ZvbGxvdyB8fAotICAgICAgICAgICAgIEN1cmxfcmF3X2VxdWFsKGRhdGEtPnN0YXRlLmZpcnN0X2hvc3QsIGNvbm4tPmhvc3QubmFtZSkpKSB7CisgICAgICAgICAgICAgc3RyY2FzZWNvbXBhcmUoZGF0YS0+c3RhdGUuZmlyc3RfaG9zdCwgY29ubi0+aG9zdC5uYW1lKSkpIHsKICNpZiAhZGVmaW5lZChDVVJMX0RJU0FCTEVfQ09PS0lFUykKICAgICAvKiBJZiB3ZSBoYXZlIGEgZ2l2ZW4gY3VzdG9tIEhvc3Q6IGhlYWRlciwgd2UgZXh0cmFjdCB0aGUgaG9zdCBuYW1lIGluCiAgICAgICAgb3JkZXIgdG8gcG9zc2libHkgdXNlIGl0IGZvciBjb29raWUgcmVhc29ucyBsYXRlciBvbi4gV2Ugb25seSBhbGxvdyB0aGUKQEAgLTIzMDUsNiArMjI2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAiJXMiIC8qIFRFOiAqLwogICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBhY2NlcHQtZW5jb2RpbmcgKi8KICAgICAgICAgICAgICAgICAgICAgICIlcyIgLyogcmVmZXJlciAqLworICAgICAgICAgICAgICAgICAgICAgIiVzIiAvKiBQcm94eS1Db25uZWN0aW9uICovCiAgICAgICAgICAgICAgICAgICAgICAiJXMiLC8qIHRyYW5zZmVyLWVuY29kaW5nICovCiAKICAgICAgICAgICAgICAgICAgICAgIGZ0cF90eXBlY29kZSwKQEAgLTIzMjcsNiArMjI4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIuYWNjZXB0X2VuY29kaW5nOiIiLAogICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPmNoYW5nZS5yZWZlcmVyICYmIGNvbm4tPmFsbG9jcHRyLnJlZik/CiAgICAgICAgICAgICAgICAgICAgICBjb25uLT5hbGxvY3B0ci5yZWY6IiIgLyogUmVmZXJlcjogPGRhdGE+ICovLAorICAgICAgICAgICAgICAgICAgICAgKGNvbm4tPmJpdHMuaHR0cHByb3h5ICYmCisgICAgICAgICAgICAgICAgICAgICAgIWNvbm4tPmJpdHMudHVubmVsX3Byb3h5ICYmCisgICAgICAgICAgICAgICAgICAgICAgIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlByb3h5LUNvbm5lY3Rpb246IikpPworICAgICAgICAgICAgICAgICAgICAgIlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIjoiIiwKICAgICAgICAgICAgICAgICAgICAgIHRlCiAgICAgICApOwogCkBAIC0yMzkyLDcgKzIzNTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNvID0gY28tPm5leHQ7IC8qIG5leHQgY29va2llIHBsZWFzZSAqLwogICAgICAgfQotICAgICAgQ3VybF9jb29raWVfZnJlZWxpc3Qoc3RvcmUsIEZBTFNFKTsgLyogZnJlZSB0aGUgY29va2llIGxpc3QgKi8KKyAgICAgIEN1cmxfY29va2llX2ZyZWVsaXN0KHN0b3JlKTsKICAgICB9CiAgICAgaWYoYWRkY29va2llcyAmJiAhcmVzdWx0KSB7CiAgICAgICBpZighY291bnQpCkBAIC0yNzY4LDYgKzI3MzAsMTEgQEAKICAgICB9CiAgIH0KIAorICBpZigoY29ubi0+aHR0cHZlcnNpb24gPT0gMjApICYmIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5KQorICAgIC8qIHVwbG9hZF9jaHVua3kgd2FzIHNldCBhYm92ZSB0byBzZXQgdXAgdGhlIHJlcXVlc3QgaW4gYSBjaHVua3kgZmFzaGlvbiwKKyAgICAgICBidXQgaXMgZGlzYWJsZWQgaGVyZSBhZ2FpbiB0byBhdm9pZCB0aGF0IHRoZSBjaHVua2VkIGVuY29kZWQgdmVyc2lvbiBpcworICAgICAgIGFjdHVhbGx5IHVzZWQgd2hlbiBzZW5kaW5nIHRoZSByZXF1ZXN0IGJvZHkgb3ZlciBoMiAqLworICAgIGRhdGEtPnJlcS51cGxvYWRfY2h1bmt5ID0gRkFMU0U7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMwNDAsMTkgKzMwMDcsMTkgQEAKICNlbmRpZiAvKiBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgKi8KIAogICAgICAgaWYoMTAwIDw9IGstPmh0dHBjb2RlICYmIDE5OSA+PSBrLT5odHRwY29kZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBXZSBoYXZlIG1hZGUgYSBIVFRQIFBVVCBvciBQT1NUIGFuZCB0aGlzIGlzIDEuMS1saW5nbwotICAgICAgICAgKiB0aGF0IHRlbGxzIHVzIHRoYXQgdGhlIHNlcnZlciBpcyBPSyB3aXRoIHRoaXMgYW5kIHJlYWR5Ci0gICAgICAgICAqIHRvIHJlY2VpdmUgdGhlIGRhdGEuCi0gICAgICAgICAqIEhvd2V2ZXIsIHdlJ2xsIGdldCBtb3JlIGhlYWRlcnMgbm93IHNvIHdlIG11c3QgZ2V0Ci0gICAgICAgICAqIGJhY2sgaW50byB0aGUgaGVhZGVyLXBhcnNpbmcgc3RhdGUhCi0gICAgICAgICAqLwotICAgICAgICBrLT5oZWFkZXIgPSBUUlVFOwotICAgICAgICBrLT5oZWFkZXJsaW5lID0gMDsgLyogcmVzdGFydCB0aGUgaGVhZGVyIGxpbmUgY291bnRlciAqLwotCiAgICAgICAgIC8qICJBIHVzZXIgYWdlbnQgTUFZIGlnbm9yZSB1bmV4cGVjdGVkIDF4eCBzdGF0dXMgcmVzcG9uc2VzLiIgKi8KICAgICAgICAgc3dpdGNoKGstPmh0dHBjb2RlKSB7CiAgICAgICAgIGNhc2UgMTAwOgorICAgICAgICAgIC8qCisgICAgICAgICAgICogV2UgaGF2ZSBtYWRlIGEgSFRUUCBQVVQgb3IgUE9TVCBhbmQgdGhpcyBpcyAxLjEtbGluZ28KKyAgICAgICAgICAgKiB0aGF0IHRlbGxzIHVzIHRoYXQgdGhlIHNlcnZlciBpcyBPSyB3aXRoIHRoaXMgYW5kIHJlYWR5CisgICAgICAgICAgICogdG8gcmVjZWl2ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgKiBIb3dldmVyLCB3ZSdsbCBnZXQgbW9yZSBoZWFkZXJzIG5vdyBzbyB3ZSBtdXN0IGdldAorICAgICAgICAgICAqIGJhY2sgaW50byB0aGUgaGVhZGVyLXBhcnNpbmcgc3RhdGUhCisgICAgICAgICAgICovCisgICAgICAgICAgay0+aGVhZGVyID0gVFJVRTsKKyAgICAgICAgICBrLT5oZWFkZXJsaW5lID0gMDsgLyogcmVzdGFydCB0aGUgaGVhZGVyIGxpbmUgY291bnRlciAqLworCiAgICAgICAgICAgLyogaWYgd2UgZGlkIHdhaXQgZm9yIHRoaXMgZG8gZW5hYmxlIHdyaXRlIG5vdyEgKi8KICAgICAgICAgICBpZihrLT5leHAxMDAgPiBFWFAxMDBfU0VORF9EQVRBKSB7CiAgICAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfU0VORF9EQVRBOwpAQCAtMzA2Miw5ICszMDI5LDE0IEBACiAgICAgICAgIGNhc2UgMTAxOgogICAgICAgICAgIC8qIFN3aXRjaGluZyBQcm90b2NvbHMgKi8KICAgICAgICAgICBpZihrLT51cGdyMTAxID09IFVQR1IxMDFfUkVRVUVTVEVEKSB7CisgICAgICAgICAgICAvKiBTd2l0Y2hpbmcgdG8gSFRUUC8yICovCiAgICAgICAgICAgICBpbmZvZihkYXRhLCAiUmVjZWl2ZWQgMTAxXG4iKTsKICAgICAgICAgICAgIGstPnVwZ3IxMDEgPSBVUEdSMTAxX1JFQ0VJVkVEOwogCisgICAgICAgICAgICAvKiB3ZSdsbCBnZXQgbW9yZSBoZWFkZXJzIChIVFRQLzIgcmVzcG9uc2UpICovCisgICAgICAgICAgICBrLT5oZWFkZXIgPSBUUlVFOworICAgICAgICAgICAgay0+aGVhZGVybGluZSA9IDA7IC8qIHJlc3RhcnQgdGhlIGhlYWRlciBsaW5lIGNvdW50ZXIgKi8KKwogICAgICAgICAgICAgLyogc3dpdGNoIHRvIGh0dHAyIG5vdy4gVGhlIGJ5dGVzIGFmdGVyIHJlc3BvbnNlIGhlYWRlcnMKICAgICAgICAgICAgICAgIGFyZSBhbHNvIHByb2Nlc3NlZCBoZXJlLCBvdGhlcndpc2UgdGhleSBhcmUgbG9zdC4gKi8KICAgICAgICAgICAgIHJlc3VsdCA9IEN1cmxfaHR0cDJfc3dpdGNoZWQoY29ubiwgay0+c3RyLCAqbnJlYWQpOwpAQCAtMzA3Miw4ICszMDQ0LDE2IEBACiAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAqbnJlYWQgPSAwOwogICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFN3aXRjaGluZyB0byBhbm90aGVyIHByb3RvY29sIChlLmcuIFdlYlNvY2tldCkgKi8KKyAgICAgICAgICAgIGstPmhlYWRlciA9IEZBTFNFOyAvKiBubyBtb3JlIGhlYWRlciB0byBwYXJzZSEgKi8KKyAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgLyogdGhlIHN0YXR1cyBjb2RlIDF4eCBpbmRpY2F0ZXMgYSBwcm92aXNpb25hbCByZXNwb25zZSwgc28KKyAgICAgICAgICAgICB3ZSdsbCBnZXQgYW5vdGhlciBzZXQgb2YgaGVhZGVycyAqLworICAgICAgICAgIGstPmhlYWRlciA9IFRSVUU7CisgICAgICAgICAgay0+aGVhZGVybGluZSA9IDA7IC8qIHJlc3RhcnQgdGhlIGhlYWRlciBsaW5lIGNvdW50ZXIgKi8KICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQpAQCAtMzA5MSw3ICszMDcxLDcgQEAKICAgICAgICAgICAgICBzaWduYWwgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuICovCiAgICAgICAgICAgaW5mb2YoZGF0YSwgIm5vIGNodW5rLCBubyBjbG9zZSwgbm8gc2l6ZS4gQXNzdW1lIGNsb3NlIHRvICIKICAgICAgICAgICAgICAgICAic2lnbmFsIGVuZFxuIik7Ci0gICAgICAgICAgY29ubmNsb3NlKGNvbm4sICJIVFRQOiBObyBlbmQtb2YtbWVzc2FnZSBpbmRpY2F0b3IiKTsKKyAgICAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiSFRUUDogTm8gZW5kLW9mLW1lc3NhZ2UgaW5kaWNhdG9yIik7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtMzE3MSwxMiArMzE1MSwyMSBAQAogICAgICAgICAgICAgICogY29ubmVjdGlvbiBmb3IgY2xvc3VyZSBhZnRlciB3ZSd2ZSByZWFkIHRoZSBlbnRpcmUgcmVzcG9uc2UuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmKCFrLT51cGxvYWRfZG9uZSkgewotICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSFRUUCBlcnJvciBiZWZvcmUgZW5kIG9mIHNlbmQsIHN0b3Agc2VuZGluZ1xuIik7Ci0gICAgICAgICAgICAgIGNvbm5jbG9zZShjb25uLCAiU3RvcCBzZW5kaW5nIGRhdGEgYmVmb3JlIGV2ZXJ5dGhpbmcgc2VudCIpOwotICAgICAgICAgICAgICBrLT51cGxvYWRfZG9uZSA9IFRSVUU7Ci0gICAgICAgICAgICAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiBkb24ndCBzZW5kICovCi0gICAgICAgICAgICAgIGlmKGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikKLSAgICAgICAgICAgICAgICBrLT5leHAxMDAgPSBFWFAxMDBfRkFJTEVEOworICAgICAgICAgICAgICBpZihkYXRhLT5zZXQuaHR0cF9rZWVwX3NlbmRpbmdfb25fZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBpbmZvZihkYXRhLCAiSFRUUCBlcnJvciBiZWZvcmUgZW5kIG9mIHNlbmQsIGtlZXAgc2VuZGluZ1xuIik7CisgICAgICAgICAgICAgICAgaWYoay0+ZXhwMTAwID4gRVhQMTAwX1NFTkRfREFUQSkgeworICAgICAgICAgICAgICAgICAgay0+ZXhwMTAwID0gRVhQMTAwX1NFTkRfREFUQTsKKyAgICAgICAgICAgICAgICAgIGstPmtlZXBvbiB8PSBLRUVQX1NFTkQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGluZm9mKGRhdGEsICJIVFRQIGVycm9yIGJlZm9yZSBlbmQgb2Ygc2VuZCwgc3RvcCBzZW5kaW5nXG4iKTsKKyAgICAgICAgICAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiU3RvcCBzZW5kaW5nIGRhdGEgYmVmb3JlIGV2ZXJ5dGhpbmcgc2VudCIpOworICAgICAgICAgICAgICAgIGstPnVwbG9hZF9kb25lID0gVFJVRTsKKyAgICAgICAgICAgICAgICBrLT5rZWVwb24gJj0gfktFRVBfU0VORDsgLyogZG9uJ3Qgc2VuZCAqLworICAgICAgICAgICAgICAgIGlmKGRhdGEtPnN0YXRlLmV4cGVjdDEwMGhlYWRlcikKKyAgICAgICAgICAgICAgICAgIGstPmV4cDEwMCA9IEVYUDEwMF9GQUlMRUQ7CisgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zNDc2LDcgKzM0NjUsNyBAQAogICAgICAgICAvKiBOZWdhdGl2ZSBDb250ZW50LUxlbmd0aCBpcyByZWFsbHkgb2RkLCBhbmQgd2Uga25vdyBpdAogICAgICAgICAgICBoYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gb2xkZXIgQXBhY2hlIHNlcnZlcnMgc2VuZCBsYXJnZQogICAgICAgICAgICBmaWxlcyAqLwotICAgICAgICBjb25uY2xvc2UoY29ubiwgIm5lZ2F0aXZlIGNvbnRlbnQtbGVuZ3RoIik7CisgICAgICAgIHN0cmVhbWNsb3NlKGNvbm4sICJuZWdhdGl2ZSBjb250ZW50LWxlbmd0aCIpOwogICAgICAgICBpbmZvZihkYXRhLCAiTmVnYXRpdmUgY29udGVudC1sZW5ndGg6ICUiIENVUkxfRk9STUFUX0NVUkxfT0ZGX1QKICAgICAgICAgICAgICAgIiwgY2xvc2luZyBhZnRlciB0cmFuc2ZlclxuIiwgY29udGVudGxlbmd0aCk7CiAgICAgICB9CkBAIC0zNTQ5LDcgKzM1MzgsNyBAQAogICAgICAgICogdGhlIGNvbm5lY3Rpb24gd2lsbCBjbG9zZSB3aGVuIHRoaXMgcmVxdWVzdCBoYXMgYmVlbgogICAgICAgICogc2VydmVkLgogICAgICAgICovCi0gICAgICBjb25uY2xvc2UoY29ubiwgIkNvbm5lY3Rpb246IGNsb3NlIHVzZWQiKTsKKyAgICAgIHN0cmVhbWNsb3NlKGNvbm4sICJDb25uZWN0aW9uOiBjbG9zZSB1c2VkIik7CiAgICAgfQogICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoIlRyYW5zZmVyLUVuY29kaW5nOiIsIGstPnApKSB7CiAgICAgICAvKiBPbmUgb3IgbW9yZSBlbmNvZGluZ3MuIFdlIGNoZWNrIGZvciBjaHVua2VkIGFuZC9vciBhIGNvbXByZXNzaW9uCmRpZmYgLS1naXQgYS9saWIvaHR0cC5oIGIvbGliL2h0dHAuaAppbmRleCA2NTI5MDA1Li45ZmI2NjljIDEwMDY0NAotLS0gYS9saWIvaHR0cC5oCisrKyBiL2xpYi9odHRwLmgKQEAgLTE2OCw2ICsxNjgsNyBAQAogICBjb25zdCB1aW50OF90ICpwYXVzZWRhdGE7IC8qIHBvaW50ZXIgdG8gZGF0YSByZWNlaXZlZCBpbiBvbl9kYXRhX2NodW5rICovCiAgIHNpemVfdCBwYXVzZWxlbjsgLyogdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGRhdGEgKi8KICAgYm9vbCBjbG9zZWQ7IC8qIFRSVUUgb24gSFRUUDIgc3RyZWFtIGNsb3NlICovCisgIGJvb2wgY2xvc2VfaGFuZGxlZDsgLyogVFJVRSBpZiBzdHJlYW0gY2xvc3VyZSBpcyBoYW5kbGVkIGJ5IGxpYmN1cmwgKi8KICAgdWludDMyX3QgZXJyb3JfY29kZTsgLyogSFRUUC8yIGVycm9yIGNvZGUgKi8KIAogICBjaGFyICptZW07ICAgICAvKiBwb2ludHMgdG8gYSBidWZmZXIgaW4gbWVtb3J5IHRvIHN0b3JlIHJlY2VpdmVkIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2xpYi9odHRwMi5jIGIvbGliL2h0dHAyLmMKaW5kZXggZWZjMDgyZC4uMmVmMTczMSAxMDA2NDQKLS0tIGEvbGliL2h0dHAyLmMKKysrIGIvbGliL2h0dHAyLmMKQEAgLTI5LDEzICsyOSwxMyBAQAogI2luY2x1ZGUgImh0dHAuaCIKICNpbmNsdWRlICJzZW5kZi5oIgogI2luY2x1ZGUgImN1cmxfYmFzZTY0LmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJjb25uY2FjaGUuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAic3RydG9vZmZ0LmgiCi0KKyNpbmNsdWRlICJzdHJkdXAuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC01OSw2ICs1OSw4IEBACiAjZGVmaW5lIG5naHR0cDJfc2Vzc2lvbl9jYWxsYmFja3Nfc2V0X2Vycm9yX2NhbGxiYWNrKHgseSkKICNlbmRpZgogCisjZGVmaW5lIEhUVFAyX0hVR0VfV0lORE9XX1NJWkUgKDEgPDwgMzApCisKIC8qCiAgKiBDdXJsX2h0dHAyX2luaXRfc3RhdGUoKSBpcyBjYWxsZWQgd2hlbiB0aGUgZWFzeSBoYW5kbGUgaXMgY3JlYXRlZCBhbmQKICAqIGFsbG93cyBmb3IgSFRUUC8yIHNwZWNpZmljIGluaXQgb2Ygc3RhdGUuCkBAIC05Miw4ICs5NCw5IEBACiAgICAgIGJlY2F1c2Ugb2YgcmVuZWdvdGlhdGlvbi4gKi8KICAgc29ja1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogCi0gIGlmKG5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoYy0+aDIpKQotICAgIGJpdG1hcCB8PSBHRVRTT0NLX1JFQURTT0NLKEZJUlNUU09DS0VUKTsKKyAgLyogaW4gYSBIVFRQLzIgY29ubmVjdGlvbiB3ZSBjYW4gYmFzaWNhbGx5IGFsd2F5cyBnZXQgYSBmcmFtZSBzbyB3ZSBzaG91bGQKKyAgICAgYWx3YXlzIGJlIHJlYWR5IGZvciBvbmUgKi8KKyAgYml0bWFwIHw9IEdFVFNPQ0tfUkVBRFNPQ0soRklSU1RTT0NLRVQpOwogCiAgIGlmKG5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKGMtPmgyKSkKICAgICBiaXRtYXAgfD0gR0VUU09DS19XUklURVNPQ0soRklSU1RTT0NLRVQpOwpAQCAtMTUwLDYgKzE1Myw3IEBACiAgIGh0dHAtPnBhdXNlbGVuID0gMDsKICAgaHR0cC0+ZXJyb3JfY29kZSA9IE5HSFRUUDJfTk9fRVJST1I7CiAgIGh0dHAtPmNsb3NlZCA9IEZBTFNFOworICBodHRwLT5jbG9zZV9oYW5kbGVkID0gRkFMU0U7CiAgIGh0dHAtPm1lbSA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKICAgaHR0cC0+bGVuID0gQlVGU0laRTsKICAgaHR0cC0+bWVtbGVuID0gMDsKQEAgLTE4NCw3ICsxODgsNyBAQAogICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwogICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KICAgQ1VSTFBST1RPX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLwotICBQUk9UT1BUX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisgIFBST1RPUFRfU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KIH07CiAKIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgQ3VybF9oYW5kbGVyX2h0dHAyX3NzbCA9IHsKQEAgLTIwNCw3ICsyMDgsNyBAQAogICBaRVJPX05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWR3cml0ZSAqLwogICBQT1JUX0hUVFAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZnBvcnQgKi8KICAgQ1VSTFBST1RPX0hUVFBTLCAgICAgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLwotICBQUk9UT1BUX1NTTCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisgIFBST1RPUFRfU1NMIHwgUFJPVE9QVF9TVFJFQU0gICAgICAgICAgLyogZmxhZ3MgKi8KIH07CiAKIC8qCkBAIC0yMjEsNyArMjI1LDggQEAKIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTQwI3BhZ2UtNzcKIG5naHR0cDJfZXJyb3JfY29kZSBlbnVtcyBhcmUgaWRlbnRpY2FsLgogKi8KLWNvbnN0IGNoYXIgKkN1cmxfaHR0cDJfc3RyZXJyb3IodWludDMyX3QgZXJyKSB7Citjb25zdCBjaGFyICpDdXJsX2h0dHAyX3N0cmVycm9yKHVpbnQzMl90IGVycikKK3sKICNpZm5kZWYgTkdIVFRQMl9IQVNfSFRUUDJfU1RSRVJST1IKICAgY29uc3QgY2hhciAqc3RyW10gPSB7CiAgICAgIk5PX0VSUk9SIiwgICAgICAgICAgICAgLyogMHgwICovCkBAIC0zMTcsNyArMzIyLDcgQEAKICAgICAgdGhlIG1pZGRsZSBvZiBoZWFkZXIsIGl0IGNvdWxkIGJlIG1hdGNoZWQgaW4gbWlkZGxlIG9mIHRoZSB2YWx1ZSwKICAgICAgdGhpcyBpcyBiZWNhdXNlIHdlIGRvIHByZWZpeCBtYXRjaC4qLwogICBpZighaCB8fCAhR09PRF9FQVNZX0hBTkRMRShoLT5kYXRhKSB8fCAhaGVhZGVyIHx8ICFoZWFkZXJbMF0gfHwKLSAgICAgQ3VybF9yYXdfZXF1YWwoaGVhZGVyLCAiOiIpIHx8IHN0cmNocihoZWFkZXIgKyAxLCAnOicpKQorICAgICAhc3RyY21wKGhlYWRlciwgIjoiKSB8fCBzdHJjaHIoaGVhZGVyICsgMSwgJzonKSkKICAgICByZXR1cm4gTlVMTDsKICAgZWxzZSB7CiAgICAgc3RydWN0IEhUVFAgKnN0cmVhbSA9IGgtPmRhdGEtPnJlcS5wcm90b3A7CkBAIC00ODgsOCArNDkzLDExIEBACiAgIH0KIAogICBzdHJlYW0gPSBkYXRhX3MtPnJlcS5wcm90b3A7Ci0gIGlmKCFzdHJlYW0pCisgIGlmKCFzdHJlYW0pIHsKKyAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwgIk5vIHByb3RvIHBvaW50ZXIgZm9yIHN0cmVhbTogJXhcbiIsCisgICAgICAgICAgICAgICAgIHN0cmVhbV9pZCkpOwogICAgIHJldHVybiBOR0hUVFAyX0VSUl9DQUxMQkFDS19GQUlMVVJFOworICB9CiAKICAgREVCVUdGKGluZm9mKGRhdGFfcywgIm9uX2ZyYW1lX3JlY3YoKSBoZWFkZXIgJXggc3RyZWFtICV4XG4iLAogICAgICAgICAgICAgICAgZnJhbWUtPmhkLnR5cGUsIHN0cmVhbV9pZCkpOwpAQCAtNTQ3LDcgKzU1NSw3IEBACiAKICAgICAgIC8qIGlmIHdlIHJlY2VpdmUgZGF0YSBmb3IgYW5vdGhlciBoYW5kbGUsIHdha2UgdGhhdCB1cCAqLwogICAgICAgaWYoY29ubl9zLT5kYXRhICE9IGRhdGFfcykKLSAgICAgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAxKTsKKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAwKTsKICAgICB9CiAgICAgYnJlYWs7CiAgIGNhc2UgTkdIVFRQMl9QVVNIX1BST01JU0U6CkBAIC02MjEsOCArNjI5LDcgQEAKIAogICAvKiBpZiB3ZSByZWNlaXZlIGRhdGEgZm9yIGFub3RoZXIgaGFuZGxlLCB3YWtlIHRoYXQgdXAgKi8KICAgaWYoY29ubi0+ZGF0YSAhPSBkYXRhX3MpCi0gICAgQ3VybF9leHBpcmUoZGF0YV9zLCAxKTsgLyogVE9ETzogZml4IHNvIHRoYXQgdGhpcyBjYW4gYmUgc2V0IHRvIDAgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHk/ICovCisgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAwKTsKIAogICBERUJVR0YoaW5mb2YoZGF0YV9zLCAiJXp1IGRhdGEgcmVjZWl2ZWQgZm9yIHN0cmVhbSAldSAiCiAgICAgICAgICAgICAgICAiKCV6dSBsZWZ0IGluIGJ1ZmZlciAlcCwgdG90YWwgJXp1KVxuIiwKQEAgLTgzNywxMCArODQ0LDkgQEAKICAgICAgICAgICAgIHN0cmVhbS0+cHVzaF9oZWFkZXJzX2FsbG9jKSB7CiAgICAgICBjaGFyICoqaGVhZHA7CiAgICAgICBzdHJlYW0tPnB1c2hfaGVhZGVyc19hbGxvYyAqPSAyOwotICAgICAgaGVhZHAgPSByZWFsbG9jKHN0cmVhbS0+cHVzaF9oZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cHVzaF9oZWFkZXJzX2FsbG9jICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgaGVhZHAgPSBDdXJsX3NhZmVyZWFsbG9jKHN0cmVhbS0+cHVzaF9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cHVzaF9oZWFkZXJzX2FsbG9jICogc2l6ZW9mKGNoYXIgKikpOwogICAgICAgaWYoIWhlYWRwKSB7Ci0gICAgICAgIGZyZWUoc3RyZWFtLT5wdXNoX2hlYWRlcnMpOwogICAgICAgICBzdHJlYW0tPnB1c2hfaGVhZGVycyA9IE5VTEw7CiAgICAgICAgIHJldHVybiBOR0hUVFAyX0VSUl9URU1QT1JBTF9DQUxMQkFDS19GQUlMVVJFOwogICAgICAgfQpAQCAtODgzLDcgKzg4OSw3IEBACiAgICAgQ3VybF9hZGRfYnVmZmVyKHN0cmVhbS0+aGVhZGVyX3JlY3ZidWYsICIgXHJcbiIsIDMpOwogICAgIC8qIGlmIHdlIHJlY2VpdmUgZGF0YSBmb3IgYW5vdGhlciBoYW5kbGUsIHdha2UgdGhhdCB1cCAqLwogICAgIGlmKGNvbm4tPmRhdGEgIT0gZGF0YV9zKQotICAgICAgQ3VybF9leHBpcmUoZGF0YV9zLCAxKTsKKyAgICAgIEN1cmxfZXhwaXJlKGRhdGFfcywgMCk7CiAKICAgICBERUJVR0YoaW5mb2YoZGF0YV9zLCAiaDIgc3RhdHVzOiBIVFRQLzIgJTAzZCAoZWFzeSAlcClcbiIsCiAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RhdHVzX2NvZGUsIGRhdGFfcykpOwpAQCAtODk5LDcgKzkwNSw3IEBACiAgIEN1cmxfYWRkX2J1ZmZlcihzdHJlYW0tPmhlYWRlcl9yZWN2YnVmLCAiXHJcbiIsIDIpOwogICAvKiBpZiB3ZSByZWNlaXZlIGRhdGEgZm9yIGFub3RoZXIgaGFuZGxlLCB3YWtlIHRoYXQgdXAgKi8KICAgaWYoY29ubi0+ZGF0YSAhPSBkYXRhX3MpCi0gICAgQ3VybF9leHBpcmUoZGF0YV9zLCAxKTsKKyAgICBDdXJsX2V4cGlyZShkYXRhX3MsIDApOwogCiAgIERFQlVHRihpbmZvZihkYXRhX3MsICJoMiBoZWFkZXI6ICUuKnM6ICUuKnNcbiIsIG5hbWVsZW4sIG5hbWUsIHZhbHVlbGVuLAogICAgICAgICAgICAgICAgdmFsdWUpKTsKQEAgLTk0MSwxMSArOTQ3LDEyIEBACiAgICAgbWVtY3B5KGJ1Ziwgc3RyZWFtLT51cGxvYWRfbWVtLCBucmVhZCk7CiAgICAgc3RyZWFtLT51cGxvYWRfbWVtICs9IG5yZWFkOwogICAgIHN0cmVhbS0+dXBsb2FkX2xlbiAtPSBucmVhZDsKLSAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0IC09IG5yZWFkOworICAgIGlmKGRhdGFfcy0+c3RhdGUuaW5maWxlc2l6ZSAhPSAtMSkKKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgLT0gbnJlYWQ7CiAgIH0KIAogICBpZihzdHJlYW0tPnVwbG9hZF9sZWZ0ID09IDApCi0gICAgKmRhdGFfZmxhZ3MgPSAxOworICAgICpkYXRhX2ZsYWdzID0gTkdIVFRQMl9EQVRBX0ZMQUdfRU9GOwogICBlbHNlIGlmKG5yZWFkID09IDApCiAgICAgcmV0dXJuIE5HSFRUUDJfRVJSX0RFRkVSUkVEOwogCkBAIC05NjEsNyArOTY4LDcgQEAKICAqLwogc3RhdGljIG5naHR0cDJfc2V0dGluZ3NfZW50cnkgc2V0dGluZ3NbXSA9IHsKICAgeyBOR0hUVFAyX1NFVFRJTkdTX01BWF9DT05DVVJSRU5UX1NUUkVBTVMsIDEwMCB9LAotICB7IE5HSFRUUDJfU0VUVElOR1NfSU5JVElBTF9XSU5ET1dfU0laRSwgTkdIVFRQMl9JTklUSUFMX1dJTkRPV19TSVpFIH0sCisgIHsgTkdIVFRQMl9TRVRUSU5HU19JTklUSUFMX1dJTkRPV19TSVpFLCBIVFRQMl9IVUdFX1dJTkRPV19TSVpFIH0sCiB9OwogCiAjZGVmaW5lIEgyX0JVRlNJWkUgMzI3NjgKQEAgLTk3OSw2ICs5ODYsNDMgQEAKIH0KICNlbmRpZgogCit2b2lkIEN1cmxfaHR0cDJfZG9uZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJlbWF0dXJlKQoreworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEhUVFAgKmh0dHAgPSBkYXRhLT5yZXEucHJvdG9wOworICBzdHJ1Y3QgaHR0cF9jb25uICpodHRwYyA9ICZjb25uLT5wcm90by5odHRwYzsKKworICBpZihodHRwLT5oZWFkZXJfcmVjdmJ1ZikgeworICAgIERFQlVHRihpbmZvZihkYXRhLCAiZnJlZSBoZWFkZXJfcmVjdmJ1ZiEhXG4iKSk7CisgICAgQ3VybF9hZGRfYnVmZmVyX2ZyZWUoaHR0cC0+aGVhZGVyX3JlY3ZidWYpOworICAgIGh0dHAtPmhlYWRlcl9yZWN2YnVmID0gTlVMTDsgLyogY2xlYXIgdGhlIHBvaW50ZXIgKi8KKyAgICBDdXJsX2FkZF9idWZmZXJfZnJlZShodHRwLT50cmFpbGVyX3JlY3ZidWYpOworICAgIGh0dHAtPnRyYWlsZXJfcmVjdmJ1ZiA9IE5VTEw7IC8qIGNsZWFyIHRoZSBwb2ludGVyICovCisgICAgaWYoaHR0cC0+cHVzaF9oZWFkZXJzKSB7CisgICAgICAvKiBpZiB0aGV5IHdlcmVuJ3QgdXNlZCBhbmQgdGhlbiBmcmVlZCBiZWZvcmUgKi8KKyAgICAgIGZvcig7IGh0dHAtPnB1c2hfaGVhZGVyc191c2VkID4gMDsgLS1odHRwLT5wdXNoX2hlYWRlcnNfdXNlZCkgeworICAgICAgICBmcmVlKGh0dHAtPnB1c2hfaGVhZGVyc1todHRwLT5wdXNoX2hlYWRlcnNfdXNlZCAtIDFdKTsKKyAgICAgIH0KKyAgICAgIGZyZWUoaHR0cC0+cHVzaF9oZWFkZXJzKTsKKyAgICAgIGh0dHAtPnB1c2hfaGVhZGVycyA9IE5VTEw7CisgICAgfQorICB9CisKKyAgaWYocHJlbWF0dXJlKSB7CisgICAgLyogUlNUX1NUUkVBTSAqLworICAgIG5naHR0cDJfc3VibWl0X3JzdF9zdHJlYW0oaHR0cGMtPmgyLCBOR0hUVFAyX0ZMQUdfTk9ORSwgaHR0cC0+c3RyZWFtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdIVFRQMl9TVFJFQU1fQ0xPU0VEKTsKKyAgICBpZihodHRwLT5zdHJlYW1faWQgPT0gaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCkgeworICAgICAgaW5mb2YoZGF0YSwgInN0b3BwZWQgdGhlIHBhdXNlIHN0cmVhbSFcbiIpOworICAgICAgaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCA9IDA7CisgICAgfQorICB9CisgIGlmKGh0dHAtPnN0cmVhbV9pZCkgeworICAgIG5naHR0cDJfc2Vzc2lvbl9zZXRfc3RyZWFtX3VzZXJfZGF0YShodHRwYy0+aDIsIGh0dHAtPnN0cmVhbV9pZCwgMCk7CisgICAgaHR0cC0+c3RyZWFtX2lkID0gMDsKKyAgfQorfQorCiAvKgogICogSW5pdGlhbGl6ZSBuZ2h0dHAyIGZvciBhIEN1cmwgY29ubmVjdGlvbgogICovCkBAIC0xMDkxLDkgKzExMzUsMTAgQEAKIC8qCiAgKiBSZXR1cm5zIG5vbnplcm8gaWYgY3VycmVudCBIVFRQLzIgc2Vzc2lvbiBzaG91bGQgYmUgY2xvc2VkLgogICovCi1zdGF0aWMgaW50IHNob3VsZF9jbG9zZV9zZXNzaW9uKHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjKSB7CitzdGF0aWMgaW50IHNob3VsZF9jbG9zZV9zZXNzaW9uKHN0cnVjdCBodHRwX2Nvbm4gKmh0dHBjKQorewogICByZXR1cm4gaHR0cGMtPmRyYWluX3RvdGFsID09IDAgJiYgIW5naHR0cDJfc2Vzc2lvbl93YW50X3JlYWQoaHR0cGMtPmgyKSAmJgotICAgICAgICAgIW5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKGh0dHBjLT5oMik7CisgICAgIW5naHR0cDJfc2Vzc2lvbl93YW50X3dyaXRlKGh0dHBjLT5oMik7CiB9CiAKIHN0YXRpYyBpbnQgaDJfc2Vzc2lvbl9zZW5kKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCkBAIC0xMTA3LDcgKzExNTIsOCBAQAogICovCiBzdGF0aWMgaW50IGgyX3Byb2Nlc3NfcGVuZGluZ19pbnB1dChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMY29kZSAqZXJyKQorewogICBzc2l6ZV90IG5yZWFkOwogICBjaGFyICppbmJ1ZjsKICAgc3NpemVfdCBydjsKQEAgLTExNTUsOSArMTIwMSw0MSBAQAogICByZXR1cm4gMDsKIH0KIAorLyoKKyAqIENhbGxlZCBmcm9tIHRyYW5zZmVyLmM6ZG9uZV9zZW5kaW5nIHdoZW4gd2Ugc3RvcCB1cGxvYWRpbmcuCisgKi8KK0NVUkxjb2RlIEN1cmxfaHR0cDJfZG9uZV9zZW5kaW5nKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKK3sKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisKKyAgaWYoKGNvbm4tPmhhbmRsZXIgPT0gJkN1cmxfaGFuZGxlcl9odHRwMl9zc2wpIHx8CisgICAgIChjb25uLT5oYW5kbGVyID09ICZDdXJsX2hhbmRsZXJfaHR0cDIpKSB7CisgICAgLyogbWFrZSBzdXJlIHRoaXMgaXMgb25seSBhdHRlbXB0ZWQgZm9yIEhUVFAvMiB0cmFuc2ZlcnMgKi8KKworICAgIHN0cnVjdCBIVFRQICpzdHJlYW0gPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOworCisgICAgaWYoc3RyZWFtLT51cGxvYWRfbGVmdCkgeworICAgICAgLyogSWYgdGhlIHN0cmVhbSBzdGlsbCB0aGlua3MgdGhlcmUncyBkYXRhIGxlZnQgdG8gdXBsb2FkLiAqLworICAgICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7CisgICAgICBuZ2h0dHAyX3Nlc3Npb24gKmgyID0gaHR0cGMtPmgyOworCisgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsgLyogRE9ORSEgKi8KKworICAgICAgLyogcmVzdW1lIHNlbmRpbmcgaGVyZSB0byB0cmlnZ2VyIHRoZSBjYWxsYmFjayB0byBnZXQgY2FsbGVkIGFnYWluIHNvCisgICAgICAgICB0aGF0IGl0IGNhbiBzaWduYWwgRU9GIHRvIG5naHR0cDIgKi8KKyAgICAgICh2b2lkKW5naHR0cDJfc2Vzc2lvbl9yZXN1bWVfZGF0YShoMiwgc3RyZWFtLT5zdHJlYW1faWQpOworCisgICAgICAodm9pZCloMl9wcm9jZXNzX3BlbmRpbmdfaW5wdXQoY29ubi0+ZGF0YSwgaHR0cGMsICZyZXN1bHQpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisKIHN0YXRpYyBzc2l6ZV90IGh0dHAyX2hhbmRsZV9zdHJlYW1fY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgSFRUUCAqc3RyZWFtLCBDVVJMY29kZSAqZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBIVFRQICpzdHJlYW0sIENVUkxjb2RlICplcnIpCit7CiAgIGNoYXIgKnRyYWlsZXJfcG9zLCAqdHJhaWxlcl9lbmQ7CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IGh0dHBfY29ubiAqaHR0cGMgPSAmY29ubi0+cHJvdG8uaHR0cGM7CkBAIC0xMTc4LDggKzEyNTYsNyBAQAogCiAgIERFQlVHQVNTRVJUKGRhdGEtPnN0YXRlLmRyYWluID09IDApOwogCi0gIC8qIFJlc2V0IHRvIEZBTFNFIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiByZWFkd3JpdGVfZGF0YQotICAgZnVuY3Rpb24uICovCisgIC8qIFJlc2V0IHRvIEZBTFNFIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiByZWFkd3JpdGVfZGF0YSBmdW5jdGlvbi4gKi8KICAgc3RyZWFtLT5jbG9zZWQgPSBGQUxTRTsKICAgaWYoc3RyZWFtLT5lcnJvcl9jb2RlICE9IE5HSFRUUDJfTk9fRVJST1IpIHsKICAgICBmYWlsZihkYXRhLCAiSFRUUC8yIHN0cmVhbSAldSB3YXMgbm90IGNsb3NlZCBjbGVhbmx5OiAlcyAoZXJyICVkKSIsCkBAIC0xMjE2LDYgKzEyOTMsOCBAQAogICAgIH0KICAgfQogCisgIHN0cmVhbS0+Y2xvc2VfaGFuZGxlZCA9IFRSVUU7CisKICAgREVCVUdGKGluZm9mKGRhdGEsICJodHRwMl9yZWN2IHJldHVybnMgMCwgaHR0cDJfaGFuZGxlX3N0cmVhbV9jbG9zZVxuIikpOwogICByZXR1cm4gMDsKIH0KQEAgLTEyNjgsMTAgKzEzNDcsNiBAQAogICByZXR1cm4gbmdodHRwMl9zZXNzaW9uX3NlbmQoaDIpOwogfQogCi0vKgotICogSWYgdGhlIHJlYWQgd291bGQgYmxvY2sgKEVXT1VMREJMT0NLKSB3ZSByZXR1cm4gLTEuIE90aGVyd2lzZSB3ZSByZXR1cm4KLSAqIGEgcmVndWxhciBDVVJMY29kZSB2YWx1ZS4KLSAqLwogc3RhdGljIHNzaXplX3QgaHR0cDJfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmVycikKIHsKQEAgLTEzODIsNiArMTQ1Nyw4IEBACiAgICAgICAgc29ja2V0IGlzIG5vdCByZWFkLiAgQnV0IGl0IHNlZW1zIHRoYXQgdXN1YWxseSBzdHJlYW1zIGFyZQogICAgICAgIG5vdGlmaWVkIHdpdGggaXRzIGRyYWluIHByb3BlcnR5LCBhbmQgc29ja2V0IGlzIHJlYWQgYWdhaW4KICAgICAgICBxdWlja2x5LiAqLworICAgIERFQlVHRihpbmZvZihkYXRhLCAic3RyZWFtICV4IGlzIHBhdXNlZCwgcGF1c2UgaWQ6ICV4XG4iLAorICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbV9pZCwgaHR0cGMtPnBhdXNlX3N0cmVhbV9pZCkpOwogICAgICplcnIgPSBDVVJMRV9BR0FJTjsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTE0OTcsNyArMTU3NCw3MiBAQAogI2RlZmluZSBIRUFERVJfT1ZFUkZMT1coeCkgXAogICAoeC5uYW1lbGVuID4gKHVpbnQxNl90KS0xIHx8IHgudmFsdWVsZW4gPiAodWludDE2X3QpLTEgLSB4Lm5hbWVsZW4pCiAKLS8qIHJldHVybiBudW1iZXIgb2YgcmVjZWl2ZWQgKGRlY3J5cHRlZCkgYnl0ZXMgKi8KKy8qCisgKiBDaGVjayBoZWFkZXIgbWVtb3J5IGZvciB0aGUgdG9rZW4gInRyYWlsZXJzIi4KKyAqIFBhcnNlIHRoZSB0b2tlbnMgYXMgc2VwYXJhdGVkIGJ5IGNvbW1hIGFuZCBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UuCisgKiBSZXR1cm5zIFRSVUUgaWYgZm91bmQgb3IgRkFMU0UgaWYgbm90LgorICovCitzdGF0aWMgYm9vbCBjb250YWluc190cmFpbGVycyhjb25zdCBjaGFyICpwLCBzaXplX3QgbGVuKQoreworICBjb25zdCBjaGFyICplbmQgPSBwICsgbGVuOworICBmb3IoOzspIHsKKyAgICBmb3IoOyBwICE9IGVuZCAmJiAoKnAgPT0gJyAnIHx8ICpwID09ICdcdCcpOyArK3ApCisgICAgICA7CisgICAgaWYocCA9PSBlbmQgfHwgKHNpemVfdCkoZW5kIC0gcCkgPCBzaXplb2YoInRyYWlsZXJzIikgLSAxKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmKHN0cm5jYXNlY29tcGFyZSgidHJhaWxlcnMiLCBwLCBzaXplb2YoInRyYWlsZXJzIikgLSAxKSkgeworICAgICAgcCArPSBzaXplb2YoInRyYWlsZXJzIikgLSAxOworICAgICAgZm9yKDsgcCAhPSBlbmQgJiYgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnKTsgKytwKQorICAgICAgICA7CisgICAgICBpZihwID09IGVuZCB8fCAqcCA9PSAnLCcpCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICAvKiBza2lwIHRvIG5leHQgdG9rZW4gKi8KKyAgICBmb3IoOyBwICE9IGVuZCAmJiAqcCAhPSAnLCc7ICsrcCkKKyAgICAgIDsKKyAgICBpZihwID09IGVuZCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICArK3A7CisgIH0KK30KKwordHlwZWRlZiBlbnVtIHsKKyAgLyogU2VuZCBoZWFkZXIgdG8gc2VydmVyICovCisgIEhFQURFUklOU1RfRk9SV0FSRCwKKyAgLyogRG9uJ3Qgc2VuZCBoZWFkZXIgdG8gc2VydmVyICovCisgIEhFQURFUklOU1RfSUdOT1JFLAorICAvKiBEaXNjYXJkIGhlYWRlciwgYW5kIHJlcGxhY2UgaXQgd2l0aCAidGU6IHRyYWlsZXJzIiAqLworICBIRUFERVJJTlNUX1RFX1RSQUlMRVJTCit9IGhlYWRlcl9pbnN0cnVjdGlvbjsKKworLyogRGVjaWRlcyBob3cgdG8gdHJlYXQgZ2l2ZW4gaGVhZGVyIGZpZWxkLiAqLworc3RhdGljIGhlYWRlcl9pbnN0cnVjdGlvbiBpbnNwZWN0X2hlYWRlcihjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbikgeworICBzd2l0Y2gobmFtZWxlbikgeworICBjYXNlIDI6CisgICAgaWYoIXN0cm5jYXNlY29tcGFyZSgidGUiLCBuYW1lLCBuYW1lbGVuKSkKKyAgICAgIHJldHVybiBIRUFERVJJTlNUX0ZPUldBUkQ7CisKKyAgICByZXR1cm4gY29udGFpbnNfdHJhaWxlcnModmFsdWUsIHZhbHVlbGVuKSA/CisgICAgICAgICAgIEhFQURFUklOU1RfVEVfVFJBSUxFUlMgOiBIRUFERVJJTlNUX0lHTk9SRTsKKyAgY2FzZSA3OgorICAgIHJldHVybiBzdHJuY2FzZWNvbXBhcmUoInVwZ3JhZGUiLCBuYW1lLCBuYW1lbGVuKSA/CisgICAgICAgICAgIEhFQURFUklOU1RfSUdOT1JFIDogSEVBREVSSU5TVF9GT1JXQVJEOworICBjYXNlIDEwOgorICAgIHJldHVybiAoc3RybmNhc2Vjb21wYXJlKCJjb25uZWN0aW9uIiwgbmFtZSwgbmFtZWxlbikgfHwKKyAgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZSgia2VlcC1hbGl2ZSIsIG5hbWUsIG5hbWVsZW4pKSA/CisgICAgICAgICAgIEhFQURFUklOU1RfSUdOT1JFIDogSEVBREVSSU5TVF9GT1JXQVJEOworICBjYXNlIDE2OgorICAgIHJldHVybiBzdHJuY2FzZWNvbXBhcmUoInByb3h5LWNvbm5lY3Rpb24iLCBuYW1lLCBuYW1lbGVuKSA/CisgICAgICAgICAgIEhFQURFUklOU1RfSUdOT1JFIDogSEVBREVSSU5TVF9GT1JXQVJEOworICBjYXNlIDE3OgorICAgIHJldHVybiBzdHJuY2FzZWNvbXBhcmUoInRyYW5zZmVyLWVuY29kaW5nIiwgbmFtZSwgbmFtZWxlbikgPworICAgICAgICAgICBIRUFERVJJTlNUX0lHTk9SRSA6IEhFQURFUklOU1RfRk9SV0FSRDsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gSEVBREVSSU5TVF9GT1JXQVJEOworICB9Cit9CisKIHN0YXRpYyBzc2l6ZV90IGh0dHAyX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7CkBAIC0xNTEzLDcgKzE2NTUsNyBAQAogICBzaXplX3QgbmhlYWRlcjsKICAgc2l6ZV90IGk7CiAgIHNpemVfdCBhdXRob3JpdHlfaWR4OwotICBjaGFyICpoZGJ1ZiA9IChjaGFyKiltZW07CisgIGNoYXIgKmhkYnVmID0gKGNoYXIgKiltZW07CiAgIGNoYXIgKmVuZCwgKmxpbmVfZW5kOwogICBuZ2h0dHAyX2RhdGFfcHJvdmlkZXIgZGF0YV9wcmQ7CiAgIGludDMyX3Qgc3RyZWFtX2lkOwpAQCAtMTUyNSw2ICsxNjY3LDE0IEBACiAgIERFQlVHRihpbmZvZihjb25uLT5kYXRhLCAiaHR0cDJfc2VuZCBsZW49JXp1XG4iLCBsZW4pKTsKIAogICBpZihzdHJlYW0tPnN0cmVhbV9pZCAhPSAtMSkgeworICAgIGlmKHN0cmVhbS0+Y2xvc2VfaGFuZGxlZCkgeworICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgInN0cmVhbSAlZCBjbG9zZWRcbiIsIHN0cmVhbS0+c3RyZWFtX2lkKTsKKyAgICAgICplcnIgPSBDVVJMRV9IVFRQMl9TVFJFQU07CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYoc3RyZWFtLT5jbG9zZWQpIHsKKyAgICAgIHJldHVybiBodHRwMl9oYW5kbGVfc3RyZWFtX2Nsb3NlKGNvbm4sIGNvbm4tPmRhdGEsIHN0cmVhbSwgZXJyKTsKKyAgICB9CiAgICAgLyogSWYgc3RyZWFtX2lkICE9IC0xLCB3ZSBoYXZlIGRpc3BhdGNoZWQgcmVxdWVzdCBIRUFERVJTLCBhbmQgbm93CiAgICAgICAgYXJlIGdvaW5nIHRvIHNlbmQgb3Igc2VuZGluZyByZXF1ZXN0IGJvZHkgaW4gREFUQSBmcmFtZSAqLwogICAgIHN0cmVhbS0+dXBsb2FkX21lbSA9IG1lbTsKQEAgLTE2NDMsNyArMTc5Myw2IEBACiAgIGkgPSAzOwogICB3aGlsZShpIDwgbmhlYWRlcikgewogICAgIHNpemVfdCBobGVuOwotICAgIGludCBza2lwID0gMDsKIAogICAgIGhkYnVmID0gbGluZV9lbmQgKyAyOwogCkBAIC0xNjYxLDEyICsxODEwLDcgQEAKICAgICAgIGdvdG8gZmFpbDsKICAgICBobGVuID0gZW5kIC0gaGRidWY7CiAKLSAgICBpZihobGVuID09IDEwICYmIEN1cmxfcmF3X25lcXVhbCgiY29ubmVjdGlvbiIsIGhkYnVmLCAxMCkpIHsKLSAgICAgIC8qIHNraXAgQ29ubmVjdGlvbjogaGVhZGVycyEgKi8KLSAgICAgIHNraXAgPSAxOwotICAgICAgLS1uaGVhZGVyOwotICAgIH0KLSAgICBlbHNlIGlmKGhsZW4gPT0gNCAmJiBDdXJsX3Jhd19uZXF1YWwoImhvc3QiLCBoZGJ1ZiwgNCkpIHsKKyAgICBpZihobGVuID09IDQgJiYgc3RybmNhc2Vjb21wYXJlKCJob3N0IiwgaGRidWYsIDQpKSB7CiAgICAgICBhdXRob3JpdHlfaWR4ID0gaTsKICAgICAgIG52YVtpXS5uYW1lID0gKHVuc2lnbmVkIGNoYXIgKikiOmF1dGhvcml0eSI7CiAgICAgICBudmFbaV0ubmFtZWxlbiA9IHN0cmxlbigoY2hhciAqKW52YVtpXS5uYW1lKTsKQEAgLTE2NzksMzggKzE4MjMsMjggQEAKICAgICB3aGlsZSgqaGRidWYgPT0gJyAnIHx8ICpoZGJ1ZiA9PSAnXHQnKQogICAgICAgKytoZGJ1ZjsKICAgICBlbmQgPSBsaW5lX2VuZDsKLSAgICBpZighc2tpcCkgeworCisgICAgc3dpdGNoKGluc3BlY3RfaGVhZGVyKChjb25zdCBjaGFyICopbnZhW2ldLm5hbWUsIG52YVtpXS5uYW1lbGVuLCBoZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gaGRidWYpKSB7CisgICAgY2FzZSBIRUFERVJJTlNUX0lHTk9SRToKKyAgICAgIC8qIHNraXAgaGVhZGVyIGZpZWxkcyBwcm9oaWJpdGVkIGJ5IEhUVFAvMiBzcGVjaWZpY2F0aW9uLiAqLworICAgICAgLS1uaGVhZGVyOworICAgICAgY29udGludWU7CisgICAgY2FzZSBIRUFERVJJTlNUX1RFX1RSQUlMRVJTOgorICAgICAgbnZhW2ldLnZhbHVlID0gKHVpbnQ4X3QqKSJ0cmFpbGVycyI7CisgICAgICBudmFbaV0udmFsdWVsZW4gPSBzaXplb2YoInRyYWlsZXJzIikgLSAxOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKICAgICAgIG52YVtpXS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopaGRidWY7CiAgICAgICBudmFbaV0udmFsdWVsZW4gPSAoc2l6ZV90KShlbmQgLSBoZGJ1Zik7Ci0gICAgICBudmFbaV0uZmxhZ3MgPSBOR0hUVFAyX05WX0ZMQUdfTk9ORTsKLSAgICAgIGlmKEhFQURFUl9PVkVSRkxPVyhudmFbaV0pKSB7Ci0gICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgc2VuZGluZyBIVFRQIHJlcXVlc3Q6IEhlYWRlciBvdmVyZmxvdyIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICB9Ci0gICAgICAvKiBJbnNwZWN0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCBhbmQgcmV0cmlldmUgdGhlIHJlcXVlc3QKLSAgICAgICAgIGVudGl0eSBsZW5ndGggc28gdGhhdCB3ZSBjYW4gc2V0IEVORF9TVFJFQU0gdG8gdGhlIGxhc3QgREFUQQotICAgICAgICAgZnJhbWUuICovCi0gICAgICBpZihudmFbaV0ubmFtZWxlbiA9PSAxNCAmJgotICAgICAgICAgQ3VybF9yYXdfbmVxdWFsKCJjb250ZW50LWxlbmd0aCIsIChjaGFyKiludmFbaV0ubmFtZSwgMTQpKSB7Ci0gICAgICAgIHNpemVfdCBqOwotICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ID0gMDsKLSAgICAgICAgaWYoIW52YVtpXS52YWx1ZWxlbikKLSAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIGZvcihqID0gMDsgaiA8IG52YVtpXS52YWx1ZWxlbjsgKytqKSB7Ci0gICAgICAgICAgaWYobnZhW2ldLnZhbHVlW2pdIDwgJzAnIHx8IG52YVtpXS52YWx1ZVtqXSA+ICc5JykKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICBpZihzdHJlYW0tPnVwbG9hZF9sZWZ0ID49IENVUkxfT0ZGX1RfTUFYIC8gMTApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgc3RyZWFtLT51cGxvYWRfbGVmdCAqPSAxMDsKLSAgICAgICAgICBzdHJlYW0tPnVwbG9hZF9sZWZ0ICs9IG52YVtpXS52YWx1ZVtqXSAtICcwJzsKLSAgICAgICAgfQotICAgICAgICBERUJVR0YoaW5mb2YoY29ubi0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0IGNvbnRlbnQtbGVuZ3RoPSUiCi0gICAgICAgICAgICAgICAgICAgICBDVVJMX0ZPUk1BVF9DVVJMX09GRl9UCi0gICAgICAgICAgICAgICAgICAgICAiXG4iLCBzdHJlYW0tPnVwbG9hZF9sZWZ0KSk7Ci0gICAgICB9Ci0gICAgICArK2k7CiAgICAgfQorCisgICAgbnZhW2ldLmZsYWdzID0gTkdIVFRQMl9OVl9GTEFHX05PTkU7CisgICAgaWYoSEVBREVSX09WRVJGTE9XKG52YVtpXSkpIHsKKyAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJGYWlsZWQgc2VuZGluZyBIVFRQIHJlcXVlc3Q6IEhlYWRlciBvdmVyZmxvdyIpOworICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICArK2k7CiAgIH0KIAogICAvKiA6YXV0aG9yaXR5IG11c3QgY29tZSBiZWZvcmUgbm9uLXBzZXVkbyBoZWFkZXIgZmllbGRzICovCkBAIC0xNzM2LDYgKzE4NzAsMTAgQEAKICAgICAgIGlmKG52YVtpXS52YWx1ZWxlbiA+IG1heF9hY2MgLSBhY2MpCiAgICAgICAgIGJyZWFrOwogICAgICAgYWNjICs9IG52YVtpXS52YWx1ZWxlbjsKKworICAgICAgREVCVUdGKGluZm9mKGNvbm4tPmRhdGEsICJoMiBoZWFkZXI6ICUuKnM6JS4qc1xuIiwKKyAgICAgICAgICAgICAgICAgICBudmFbaV0ubmFtZWxlbiwgbnZhW2ldLm5hbWUsCisgICAgICAgICAgICAgICAgICAgbnZhW2ldLnZhbHVlbGVuLCBudmFbaV0udmFsdWUpKTsKICAgICB9CiAKICAgICBpZihpICE9IG5oZWFkZXIpIHsKQEAgLTE3NTEsNiArMTg4OSwxMiBAQAogICBjYXNlIEhUVFBSRVFfUE9TVDoKICAgY2FzZSBIVFRQUkVRX1BPU1RfRk9STToKICAgY2FzZSBIVFRQUkVRX1BVVDoKKyAgICBpZihjb25uLT5kYXRhLT5zdGF0ZS5pbmZpbGVzaXplICE9IC0xKQorICAgICAgc3RyZWFtLT51cGxvYWRfbGVmdCA9IGNvbm4tPmRhdGEtPnN0YXRlLmluZmlsZXNpemU7CisgICAgZWxzZQorICAgICAgLyogZGF0YSBzZW5kaW5nIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZGF0YSBhbW91bnQgdXAgZnJvbnQgKi8KKyAgICAgIHN0cmVhbS0+dXBsb2FkX2xlZnQgPSAtMTsgLyogdW5rbm93biwgYnV0IG5vdCB6ZXJvICovCisKICAgICBkYXRhX3ByZC5yZWFkX2NhbGxiYWNrID0gZGF0YV9zb3VyY2VfcmVhZF9jYWxsYmFjazsKICAgICBkYXRhX3ByZC5zb3VyY2UucHRyID0gTlVMTDsKICAgICBzdHJlYW1faWQgPSBuZ2h0dHAyX3N1Ym1pdF9yZXF1ZXN0KGgyLCAmcHJpX3NwZWMsIG52YSwgbmhlYWRlciwKQEAgLTE4NTAsMTAgKzE5OTQsNiBAQAogICBpbmZvZihjb25uLT5kYXRhLCAiQ29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIChIVFRQLzIgY29uZmlybWVkKVxuIik7CiAgIEN1cmxfbXVsdGlfY29ubmNoYW5nZWQoY29ubi0+ZGF0YS0+bXVsdGkpOwogCi0gIC8qIHN3aXRjaCBvbiBUQ1BfTk9ERUxBWSBhcyB3ZSBuZWVkIHRvIHNlbmQgb2ZmIHBhY2tldHMgd2l0aG91dCBkZWxheSBmb3IKLSAgICAgbWF4aW11bSB0aHJvdWdocHV0ICovCi0gIEN1cmxfdGNwbm9kZWxheShjb25uLCBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXSk7Ci0KICAgcmV0dXJuIENVUkxFX09LOwogfQogCkBAIC0xODk1LDcgKzIwMzUsOCBAQAogICBlbHNlIHsKICAgICAvKiBzdHJlYW0gSUQgaXMgdW5rbm93biBhdCB0aGlzIHBvaW50ICovCiAgICAgc3RyZWFtLT5zdHJlYW1faWQgPSAtMTsKLSAgICBydiA9IG5naHR0cDJfc3VibWl0X3NldHRpbmdzKGh0dHBjLT5oMiwgTkdIVFRQMl9GTEFHX05PTkUsIE5VTEwsIDApOworICAgIHJ2ID0gbmdodHRwMl9zdWJtaXRfc2V0dGluZ3MoaHR0cGMtPmgyLCBOR0hUVFAyX0ZMQUdfTk9ORSwgc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0dGluZ3MpIC8gc2l6ZW9mKHNldHRpbmdzWzBdKSk7CiAgICAgaWYocnYgIT0gMCkgewogICAgICAgZmFpbGYoZGF0YSwgIm5naHR0cDJfc3VibWl0X3NldHRpbmdzKCkgZmFpbGVkOiAlcyglZCkiLAogICAgICAgICAgICAgbmdodHRwMl9zdHJlcnJvcihydiksIHJ2KTsKQEAgLTE5MDMsNiArMjA0NCwxNCBAQAogICAgIH0KICAgfQogCisgIHJ2ID0gbmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZShodHRwYy0+aDIsIE5HSFRUUDJfRkxBR19OT05FLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUDJfSFVHRV9XSU5ET1dfU0laRSk7CisgIGlmKHJ2ICE9IDApIHsKKyAgICBmYWlsZihkYXRhLCAibmdodHRwMl9zZXNzaW9uX3NldF9sb2NhbF93aW5kb3dfc2l6ZSgpIGZhaWxlZDogJXMoJWQpIiwKKyAgICAgICAgICBuZ2h0dHAyX3N0cmVycm9yKHJ2KSwgcnYpOworICAgIHJldHVybiBDVVJMRV9IVFRQMjsKKyAgfQorCiAgIC8qIHdlIGFyZSBnb2luZyB0byBjb3B5IG1lbSB0byBodHRwYy0+aW5idWYuICBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlCiAgICAgIG1lbSBpcyBwYXJ0IG9mIGJ1ZmZlciBwb2ludGVkIGJ5IHN0cmVhbS0+bWVtLCBhbmQgY2FsbGJhY2tzCiAgICAgIGNhbGxlZCBieSBuZ2h0dHAyX3Nlc3Npb25fbWVtX3JlY3YoKSB3aWxsIHdyaXRlIHN0cmVhbSBzcGVjaWZpYwpAQCAtMTkxOCw3ICsyMDY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgIiBhZnRlciB1cGdyYWRlOiBsZW49JXp1XG4iLAogICAgICAgICBucmVhZCk7CiAKLSAgbWVtY3B5KGh0dHBjLT5pbmJ1ZiwgbWVtLCBucmVhZCk7CisgIGlmKG5yZWFkKQorICAgIG1lbWNweShodHRwYy0+aW5idWYsIG1lbSwgbnJlYWQpOwogICBodHRwYy0+aW5idWZsZW4gPSBucmVhZDsKIAogICBucHJvYyA9IG5naHR0cDJfc2Vzc2lvbl9tZW1fcmVjdihodHRwYy0+aDIsIChjb25zdCB1aW50OF90ICopaHR0cGMtPmluYnVmLApkaWZmIC0tZ2l0IGEvbGliL2h0dHAyLmggYi9saWIvaHR0cDIuaAppbmRleCBiZWRiZWJmLi44OTE3NTM1IDEwMDY0NAotLS0gYS9saWIvaHR0cDIuaAorKysgYi9saWIvaHR0cDIuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNTEsNiArNTEsOCBAQAogLyogY2FsbGVkIGZyb20gQ3VybF9odHRwX3NldHVwX2Nvbm4gKi8KIHZvaWQgQ3VybF9odHRwMl9zZXR1cF9jb25uKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiB2b2lkIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwordm9pZCBDdXJsX2h0dHAyX2RvbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBib29sIHByZW1hdHVyZSk7CitDVVJMY29kZSBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2Vsc2UgLyogVVNFX05HSFRUUDIgKi8KICNkZWZpbmUgQ3VybF9odHRwMl9pbml0KHgpIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCiAjZGVmaW5lIEN1cmxfaHR0cDJfc2VuZF9yZXF1ZXN0KHgpIENVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MCkBAIC02MSw2ICs2Myw4IEBACiAjZGVmaW5lIEN1cmxfaHR0cDJfc2V0dXBfcmVxKHgpCiAjZGVmaW5lIEN1cmxfaHR0cDJfaW5pdF9zdGF0ZSh4KQogI2RlZmluZSBDdXJsX2h0dHAyX2luaXRfdXNlcnNldCh4KQorI2RlZmluZSBDdXJsX2h0dHAyX2RvbmUoeCx5KQorI2RlZmluZSBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyh4KQogI2VuZGlmCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9IVFRQMl9IICovCmRpZmYgLS1naXQgYS9saWIvaHR0cF9kaWdlc3QuYyBiL2xpYi9odHRwX2RpZ2VzdC5jCmluZGV4IDk3MjMwZTcuLjkxYjg4YTMgMTAwNjQ0Ci0tLSBhL2xpYi9odHRwX2RpZ2VzdC5jCisrKyBiL2xpYi9odHRwX2RpZ2VzdC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaWYgIWRlZmluZWQoQ1VSTF9ESVNBQkxFX0hUVFApICYmICFkZWZpbmVkKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkKIAogI2luY2x1ZGUgInVybGRhdGEuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAidmF1dGgvdmF1dGguaCIKICNpbmNsdWRlICJodHRwX2RpZ2VzdC5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwpAQCAtOTUsOCArOTUsOCBAQAogICBpZihwcm94eSkgewogICAgIGRpZ2VzdCA9ICZkYXRhLT5zdGF0ZS5wcm94eWRpZ2VzdDsKICAgICBhbGxvY3VzZXJwd2QgPSAmY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOwotICAgIHVzZXJwID0gY29ubi0+cHJveHl1c2VyOwotICAgIHBhc3N3ZHAgPSBjb25uLT5wcm94eXBhc3N3ZDsKKyAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgYXV0aHAgPSAmZGF0YS0+c3RhdGUuYXV0aHByb3h5OwogICB9CiAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvbGliL2h0dHBfbmVnb3RpYXRlLmMgYi9saWIvaHR0cF9uZWdvdGlhdGUuYwppbmRleCBjMzlkNmYzLi41MTM3NWU4IDEwMDY0NAotLS0gYS9saWIvaHR0cF9uZWdvdGlhdGUuYworKysgYi9saWIvaHR0cF9uZWdvdGlhdGUuYwpAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCiAjaW5jbHVkZSAiaHR0cF9uZWdvdGlhdGUuaCIKICNpbmNsdWRlICJ2YXV0aC92YXV0aC5oIgogCkBAIC0zOCw2ICszNyw3IEBACiBDVVJMY29kZSBDdXJsX2lucHV0X25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZWFkZXIpCiB7CisgIENVUkxjb2RlIHJlc3VsdDsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHNpemVfdCBsZW47CiAKQEAgLTUxLDExICs1MSwxMSBAQAogICBzdHJ1Y3QgbmVnb3RpYXRlZGF0YSAqbmVnX2N0eDsKIAogICBpZihwcm94eSkgewotICAgIHVzZXJwID0gY29ubi0+cHJveHl1c2VyOwotICAgIHBhc3N3ZHAgPSBjb25uLT5wcm94eXBhc3N3ZDsKKyAgICB1c2VycCA9IGNvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBwYXNzd2RwID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CiAgICAgc2VydmljZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRV0gPwogICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV9TRVJWSUNFX05BTUVdIDogIkhUVFAiOwotICAgIGhvc3QgPSBjb25uLT5wcm94eS5uYW1lOworICAgIGhvc3QgPSBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZTsKICAgICBuZWdfY3R4ID0gJmRhdGEtPnN0YXRlLnByb3h5bmVnOwogICB9CiAgIGVsc2UgewpAQCAtOTAsOCArOTAsMTMgQEAKICAgfQogCiAgIC8qIEluaXRpbGlzZSB0aGUgc2VjdXJpdHkgY29udGV4dCBhbmQgZGVjb2RlIG91ciBjaGFsbGVuZ2UgKi8KLSAgcmV0dXJuIEN1cmxfYXV0aF9kZWNvZGVfc3BuZWdvX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsIHNlcnZpY2UsIGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwgbmVnX2N0eCk7CisgIHJlc3VsdCA9IEN1cmxfYXV0aF9kZWNvZGVfc3BuZWdvX21lc3NhZ2UoZGF0YSwgdXNlcnAsIHBhc3N3ZHAsIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwgaGVhZGVyLCBuZWdfY3R4KTsKKworICBpZihyZXN1bHQpCisgICAgQ3VybF9hdXRoX3NwbmVnb19jbGVhbnVwKG5lZ19jdHgpOworCisgIHJldHVybiByZXN1bHQ7CiB9CiAKIENVUkxjb2RlIEN1cmxfb3V0cHV0X25lZ290aWF0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGJvb2wgcHJveHkpCmRpZmYgLS1naXQgYS9saWIvaHR0cF9udGxtLmMgYi9saWIvaHR0cF9udGxtLmMKaW5kZXggOTM1ZGYyNS4uMjFjNzdjZCAxMDA2NDQKLS0tIGEvbGliL2h0dHBfbnRsbS5jCisrKyBiL2xpYi9odHRwX250bG0uYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgImh0dHBfbnRsbS5oIgogI2luY2x1ZGUgImN1cmxfbnRsbV93Yi5oIgogI2luY2x1ZGUgInZhdXRoL3ZhdXRoLmgiCkBAIC0xMzYsOCArMTM2LDggQEAKIAogICBpZihwcm94eSkgewogICAgIGFsbG9jdXNlcnB3ZCA9ICZjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2Q7Ci0gICAgdXNlcnAgPSBjb25uLT5wcm94eXVzZXI7Ci0gICAgcGFzc3dkcCA9IGNvbm4tPnByb3h5cGFzc3dkOworICAgIHVzZXJwID0gY29ubi0+aHR0cF9wcm94eS51c2VyOworICAgIHBhc3N3ZHAgPSBjb25uLT5odHRwX3Byb3h5LnBhc3N3ZDsKICAgICBudGxtID0gJmNvbm4tPnByb3h5bnRsbTsKICAgICBhdXRocCA9ICZjb25uLT5kYXRhLT5zdGF0ZS5hdXRocHJveHk7CiAgIH0KZGlmZiAtLWdpdCBhL2xpYi9odHRwX3Byb3h5LmMgYi9saWIvaHR0cF9wcm94eS5jCmluZGV4IGM2YjA1ZTMuLmJiZTJlOGUgMTAwNjQ0Ci0tLSBhL2xpYi9odHRwX3Byb3h5LmMKKysrIGIvbGliL2h0dHBfcHJveHkuYwpAQCAtMzEsMTkgKzMxLDU0IEBACiAjaW5jbHVkZSAiaHR0cC5oIgogI2luY2x1ZGUgInVybC5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIgogI2luY2x1ZGUgImN1cmx4LmgiCisjaW5jbHVkZSAidnRscy92dGxzLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAotQ1VSTGNvZGUgQ3VybF9wcm94eV9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKKy8qCisgKiBQZXJmb3JtIFNTTCBpbml0aWFsaXphdGlvbiBmb3IgSFRUUFMgcHJveHkuICBTZXRzCisgKiBwcm94eV9zc2xfY29ubmVjdGVkIGNvbm5lY3Rpb24gYml0IHdoZW4gY29tcGxldGUuICBDYW4gYmUKKyAqIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KKyAqLworc3RhdGljIENVUkxjb2RlIGh0dHBzX3Byb3h5X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogeworI2lmZGVmIFVTRV9TU0wKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CisgIERFQlVHQVNTRVJUKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUyk7CisgIGlmKCFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkgeworICAgIC8qIHBlcmZvcm0gU1NMIGluaXRpYWxpemF0aW9uIGZvciB0aGlzIHNvY2tldCAqLworICAgIHJlc3VsdCA9CisgICAgICBDdXJsX3NzbF9jb25uZWN0X25vbmJsb2NraW5nKGNvbm4sIHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtzb2NraW5kZXhdKTsKKyAgICBpZihyZXN1bHQpCisgICAgICBjb25uLT5iaXRzLmNsb3NlID0gVFJVRTsgLyogYSBmYWlsZWQgY29ubmVjdGlvbiBpcyBtYXJrZWQgZm9yIGNsb3N1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IChiYWQpIHJlLXVzZSBvciBzaW1pbGFyICovCisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICh2b2lkKSBjb25uOworICAodm9pZCkgc29ja2luZGV4OworICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCit9CisKK0NVUkxjb2RlIEN1cmxfcHJveHlfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCit7CisgIGlmKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUykgeworICAgIGNvbnN0IENVUkxjb2RlIHJlc3VsdCA9IGh0dHBzX3Byb3h5X2Nvbm5lY3QoY29ubiwgc29ja2luZGV4KTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmKCFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSkKKyAgICAgIHJldHVybiByZXN1bHQ7IC8qIHdhaXQgZm9yIEhUVFBTIHByb3h5IFNTTCBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZSAqLworICB9CisKICAgaWYoY29ubi0+Yml0cy50dW5uZWxfcHJveHkgJiYgY29ubi0+Yml0cy5odHRwcHJveHkpIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCiAgICAgLyogZm9yIFtwcm90b2NvbF0gdHVubmVsZWQgdGhyb3VnaCBIVFRQIHByb3h5ICovCkBAIC02OSwxNSArMTA0LDIwIEBACiAgICAgbWVtc2V0KCZodHRwX3Byb3h5LCAwLCBzaXplb2YoaHR0cF9wcm94eSkpOwogICAgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSAmaHR0cF9wcm94eTsKICAgICBjb25ua2VlcChjb25uLCAiSFRUUCBwcm94eSBDT05ORUNUIik7Ci0gICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCisgICAgaWYoc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCkKKyAgICAgIGhvc3RuYW1lID0gY29ubi0+c2Vjb25kYXJ5aG9zdG5hbWU7CisgICAgZWxzZSBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCkKICAgICAgIGhvc3RuYW1lID0gY29ubi0+Y29ubl90b19ob3N0Lm5hbWU7CiAgICAgZWxzZQogICAgICAgaG9zdG5hbWUgPSBjb25uLT5ob3N0Lm5hbWU7Ci0gICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX3BvcnQpCisKKyAgICBpZihzb2NraW5kZXggPT0gU0VDT05EQVJZU09DS0VUKQorICAgICAgcmVtb3RlX3BvcnQgPSBjb25uLT5zZWNvbmRhcnlfcG9ydDsKKyAgICBlbHNlIGlmKGNvbm4tPmJpdHMuY29ubl90b19wb3J0KQogICAgICAgcmVtb3RlX3BvcnQgPSBjb25uLT5jb25uX3RvX3BvcnQ7CiAgICAgZWxzZQogICAgICAgcmVtb3RlX3BvcnQgPSBjb25uLT5yZW1vdGVfcG9ydDsKLSAgICByZXN1bHQgPSBDdXJsX3Byb3h5Q09OTkVDVChjb25uLCBGSVJTVFNPQ0tFVCwgaG9zdG5hbWUsCisgICAgcmVzdWx0ID0gQ3VybF9wcm94eUNPTk5FQ1QoY29ubiwgc29ja2luZGV4LCBob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfcG9ydCwgRkFMU0UpOwogICAgIGNvbm4tPmRhdGEtPnJlcS5wcm90b3AgPSBwcm90X3NhdmU7CiAgICAgaWYoQ1VSTEVfT0sgIT0gcmVzdWx0KQpAQCAtMTE0LDcgKzE1NCw3IEBACiAgIGN1cmxfb2ZmX3QgY2w9MDsKICAgYm9vbCBjbG9zZUNvbm5lY3Rpb24gPSBGQUxTRTsKICAgYm9vbCBjaHVua2VkX2VuY29kaW5nID0gRkFMU0U7Ci0gIGxvbmcgY2hlY2s7CisgIHRpbWVfdCBjaGVjazsKIAogI2RlZmluZSBTRUxFQ1RfT0sgICAgICAwCiAjZGVmaW5lIFNFTEVDVF9FUlJPUiAgIDEKQEAgLTE2MCw4ICsyMDAsOSBAQAogCiAgICAgICBpZighcmVzdWx0KSB7CiAgICAgICAgIGNoYXIgKmhvc3Q9KGNoYXIgKikiIjsKKyAgICAgICAgY29uc3QgY2hhciAqcHJveHljb25uPSIiOwogICAgICAgICBjb25zdCBjaGFyICp1c2VyYWdlbnQ9IiI7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmh0dHAgPSAoY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQXzFfMCkgPworICAgICAgICBjb25zdCBjaGFyICpodHRwID0gKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQXzFfMCkgPwogICAgICAgICAgICIxLjAiIDogIjEuMSI7CiAgICAgICAgIGJvb2wgaXB2Nl9pcCA9IGNvbm4tPmJpdHMuaXB2Nl9pcDsKICAgICAgICAgY2hhciAqaG9zdGhlYWRlcjsKQEAgLTE4NSw2ICsyMjYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmKCFDdXJsX2NoZWNrUHJveHloZWFkZXJzKGNvbm4sICJQcm94eS1Db25uZWN0aW9uOiIpKQorICAgICAgICAgIHByb3h5Y29ubiA9ICJQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlXHJcbiI7CisKICAgICAgICAgaWYoIUN1cmxfY2hlY2tQcm94eWhlYWRlcnMoY29ubiwgIlVzZXItQWdlbnQ6IikgJiYKICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfVVNFUkFHRU5UXSkKICAgICAgICAgICB1c2VyYWdlbnQgPSBjb25uLT5hbGxvY3B0ci51YWdlbnQ7CkBAIC0xOTQsMTMgKzIzOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNPTk5FQ1QgJXMgSFRUUC8lc1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICAvKiBIb3N0OiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAgLyogUHJveHktQXV0aG9yaXphdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgLyogVXNlci1BZ2VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAgLyogVXNlci1BZ2VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgLyogUHJveHktQ29ubmVjdGlvbiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGhlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+YWxsb2NwdHIucHJveHl1c2VycHdkOiIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJhZ2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Y29ubik7CiAKICAgICAgICAgaWYoaG9zdCAmJiAqaG9zdCkKICAgICAgICAgICBmcmVlKGhvc3QpOwpAQCAtMjM5LDcgKzI4NSw3IEBACiAgICAgfQogCiAgICAgaWYoIWJsb2NraW5nKSB7Ci0gICAgICBpZigwID09IEN1cmxfc29ja2V0X3JlYWR5KHR1bm5lbHNvY2tldCwgQ1VSTF9TT0NLRVRfQkFELCAwKSkKKyAgICAgIGlmKDAgPT0gU09DS0VUX1JFQURBQkxFKHR1bm5lbHNvY2tldCwgMCkpCiAgICAgICAgIC8qIHJldHVybiBzbyB3ZSdsbCBiZSBjYWxsZWQgYWdhaW4gcG9sbGluZy1zdHlsZSAqLwogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICBlbHNlIHsKQEAgLTI3NCw4ICszMjAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogbG9vcCBldmVyeSBzZWNvbmQgYXQgbGVhc3QsIGxlc3MgaWYgdGhlIHRpbWVvdXQgaXMgbmVhciAqLwotICAgICAgICBzd2l0Y2ggKEN1cmxfc29ja2V0X3JlYWR5KHR1bm5lbHNvY2tldCwgQ1VSTF9TT0NLRVRfQkFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPDEwMDBMP2NoZWNrOjEwMDApKSB7CisgICAgICAgIHN3aXRjaCAoU09DS0VUX1JFQURBQkxFKHR1bm5lbHNvY2tldCwgY2hlY2s8MTAwMEw/Y2hlY2s6MTAwMCkpIHsKICAgICAgICAgY2FzZSAtMTogLyogc2VsZWN0KCkgZXJyb3IsIHN0b3AgcmVhZGluZyAqLwogICAgICAgICAgIGVycm9yID0gU0VMRUNUX0VSUk9SOwogICAgICAgICAgIGZhaWxmKGRhdGEsICJQcm94eSBDT05ORUNUIGFib3J0ZWQgZHVlIHRvIHNlbGVjdC9wb2xsIGVycm9yIik7CkBAIC01NjgsNyArNjEzLDcgQEAKICAgICAgIGZyZWUoZGF0YS0+cmVxLm5ld3VybCk7CiAgICAgICBkYXRhLT5yZXEubmV3dXJsID0gTlVMTDsKICAgICAgIC8qIGZhaWx1cmUsIGNsb3NlIHRoaXMgY29ubmVjdGlvbiB0byBhdm9pZCByZS11c2UgKi8KLSAgICAgIGNvbm5jbG9zZShjb25uLCAicHJveHkgQ09OTkVDVCBmYWlsdXJlIik7CisgICAgICBzdHJlYW1jbG9zZShjb25uLCAicHJveHkgQ09OTkVDVCBmYWlsdXJlIik7CiAgICAgICBDdXJsX2Nsb3Nlc29ja2V0KGNvbm4sIGNvbm4tPnNvY2tbc29ja2luZGV4XSk7CiAgICAgICBjb25uLT5zb2NrW3NvY2tpbmRleF0gPSBDVVJMX1NPQ0tFVF9CQUQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGliL2h0dHBfcHJveHkuaCBiL2xpYi9odHRwX3Byb3h5LmgKaW5kZXggZmQwNDMzMC4uZDFmNWE3YyAxMDA2NDQKLS0tIGEvbGliL2h0dHBfcHJveHkuaAorKysgYi9saWIvaHR0cF9wcm94eS5oCkBAIC0zMiwxMSArMzIsMTEgQEAKIC8qIERlZmF1bHQgcHJveHkgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KICNkZWZpbmUgUFJPWFlfVElNRU9VVCAoMzYwMCoxMDAwKQogCi1DVVJMY29kZSBDdXJsX3Byb3h5X2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKTsKK0NVUkxjb2RlIEN1cmxfcHJveHlfY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpOwogCiAjZWxzZQogI2RlZmluZSBDdXJsX3Byb3h5Q09OTkVDVCh4LHkseix3LHYpIENVUkxFX05PVF9CVUlMVF9JTgotI2RlZmluZSBDdXJsX3Byb3h5X2Nvbm5lY3QoeCkgQ1VSTEVfT0sKKyNkZWZpbmUgQ3VybF9wcm94eV9jb25uZWN0KHgseSkgQ1VSTEVfT0sKICNlbmRpZgogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfSFRUUF9QUk9YWV9IICovCmRpZmYgLS1naXQgYS9saWIvaWYyaXAuYyBiL2xpYi9pZjJpcC5jCmluZGV4IDJmOTJiMmQuLmQ4NzY2MTUgMTAwNjQ0Ci0tLSBhL2xpYi9pZjJpcC5jCisrKyBiL2xpYi9pZjJpcC5jCkBAIC01MSw3ICs1MSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgImluZXRfbnRvcC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgImlmMmlwLmgiCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTY4LDcgKzY4LDcgQEAKICNlbHNlCiAgIGlmKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICogc2E2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKSBzYTsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogYiA9IHNhNi0+c2luNl9hZGRyLnM2X2FkZHI7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYiA9IHNhNi0+c2luNl9hZGRyLnM2X2FkZHI7CiAgICAgdW5zaWduZWQgc2hvcnQgdyA9ICh1bnNpZ25lZCBzaG9ydCkgKChiWzBdIDw8IDgpIHwgYlsxXSk7CiAKICAgICBzd2l0Y2godyAmIDB4RkZDMCkgewpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICAgaWYoZ2V0aWZhZGRycygmaGVhZCkgPj0gMCkgewogICAgIGZvcihpZmFjZT1oZWFkOyBpZmFjZSAhPSBOVUxMOyBpZmFjZT1pZmFjZS0+aWZhX25leHQpIHsKLSAgICAgIGlmKGN1cmxfc3RyZXF1YWwoaWZhY2UtPmlmYV9uYW1lLCBpbnRlcmYpKSB7CisgICAgICBpZihzdHJjYXNlY29tcGFyZShpZmFjZS0+aWZhX25hbWUsIGludGVyZikpIHsKICAgICAgICAgcmVzdWx0ID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICBmb3IoaWZhY2UgPSBoZWFkOyBpZmFjZSAhPSBOVUxMOyBpZmFjZT1pZmFjZS0+aWZhX25leHQpIHsKICAgICAgIGlmKGlmYWNlLT5pZmFfYWRkciAhPSBOVUxMKSB7CiAgICAgICAgIGlmKGlmYWNlLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IGFmKSB7Ci0gICAgICAgICAgaWYoY3VybF9zdHJlcXVhbChpZmFjZS0+aWZhX25hbWUsIGludGVyZikpIHsKKyAgICAgICAgICBpZihzdHJjYXNlY29tcGFyZShpZmFjZS0+aWZhX25hbWUsIGludGVyZikpIHsKICAgICAgICAgICAgIHZvaWQgKmFkZHI7CiAgICAgICAgICAgICBjaGFyICppcDsKICAgICAgICAgICAgIGNoYXIgc2NvcGVbMTJdID0gIiI7CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZigocmVzID09IElGMklQX05PVF9GT1VORCkgJiYKLSAgICAgICAgICAgICAgICBjdXJsX3N0cmVxdWFsKGlmYWNlLT5pZmFfbmFtZSwgaW50ZXJmKSkgeworICAgICAgICAgICAgICAgIHN0cmNhc2Vjb21wYXJlKGlmYWNlLT5pZmFfbmFtZSwgaW50ZXJmKSkgewogICAgICAgICAgIHJlcyA9IElGMklQX0FGX05PVF9TVVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAgIH0KZGlmZiAtLWdpdCBhL2xpYi9pbWFwLmMgYi9saWIvaW1hcC5jCmluZGV4IDEyM2VhM2IuLjc4ZGM2ZmEgMTAwNjQ0Ci0tLSBhL2xpYi9pbWFwLmMKKysrIGIvbGliL2ltYXAuYwpAQCAtNjgsMTYgKzY4LDE1IEBACiAjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KICNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgImltYXAuaCIKLQogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJzdHJlcnJvci5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAiY3VybF9zYXNsLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKIApAQCAtMTA4LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbml0cmVzcCk7CiBzdGF0aWMgQ1VSTGNvZGUgaW1hcF9jb250aW51ZV9hdXRoZW50aWNhdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlc3ApOwotc3RhdGljIHZvaWQgaW1hcF9nZXRfbWVzc2FnZShjaGFyICpidWZmZXIsIGNoYXIqKiBvdXRwdHIpOworc3RhdGljIHZvaWQgaW1hcF9nZXRfbWVzc2FnZShjaGFyICpidWZmZXIsIGNoYXIgKipvdXRwdHIpOwogCiAvKgogICogSU1BUCBwcm90b2NvbCBoYW5kbGVyLgpAQCAtMjcxLDcgKzI3MCw3IEBACiAKICAgLyogRG9lcyB0aGUgY29tbWFuZCBuYW1lIG1hdGNoIGFuZCBpcyBpdCBmb2xsb3dlZCBieSBhIHNwYWNlIGNoYXJhY3RlciBvciBhdAogICAgICB0aGUgZW5kIG9mIGxpbmU/ICovCi0gIGlmKGxpbmUgKyBjbWRfbGVuIDw9IGVuZCAmJiBDdXJsX3Jhd19uZXF1YWwobGluZSwgY21kLCBjbWRfbGVuKSAmJgorICBpZihsaW5lICsgY21kX2xlbiA8PSBlbmQgJiYgc3RybmNhc2Vjb21wYXJlKGxpbmUsIGNtZCwgY21kX2xlbikgJiYKICAgICAgKGxpbmVbY21kX2xlbl0gPT0gJyAnIHx8IGxpbmUgKyBjbWRfbGVuICsgMiA9PSBlbmQpKQogICAgIHJldHVybiBUUlVFOwogCkBAIC0zOTEsMTAgKzM5MCwxMCBAQAogICoKICAqIEdldHMgdGhlIGF1dGhlbnRpY2F0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgcmVzcG9uc2UgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBpbWFwX2dldF9tZXNzYWdlKGNoYXIgKmJ1ZmZlciwgY2hhcioqIG91dHB0cikKK3N0YXRpYyB2b2lkIGltYXBfZ2V0X21lc3NhZ2UoY2hhciAqYnVmZmVyLCBjaGFyICoqb3V0cHRyKQogewogICBzaXplX3QgbGVuID0gMDsKLSAgY2hhciogbWVzc2FnZSA9IE5VTEw7CisgIGNoYXIgKm1lc3NhZ2UgPSBOVUxMOwogCiAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlICovCiAgIGZvcihtZXNzYWdlID0gYnVmZmVyICsgMjsgKm1lc3NhZ2UgPT0gJyAnIHx8ICptZXNzYWdlID09ICdcdCc7IG1lc3NhZ2UrKykKQEAgLTg0Niw3ICs4NDUsNyBAQAogCiAgIGlmKGltYXBjb2RlICE9ICdPJykgewogICAgIGZhaWxmKGRhdGEsICJHb3QgdW5leHBlY3RlZCBpbWFwLXNlcnZlciByZXNwb25zZSIpOwotICAgIHJlc3VsdCA9IENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk7IC8qIFRPRE86IGZpeCB0aGlzIGNvZGUgKi8KKyAgICByZXN1bHQgPSBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CiAgIH0KICAgZWxzZQogICAgIHJlc3VsdCA9IGltYXBfcGVyZm9ybV9jYXBhYmlsaXR5KGNvbm4pOwpAQCAtMTE3OSw3ICsxMTc4LDcgQEAKICAgZWxzZSB7CiAgICAgLyogV2UgZG9uJ3Qga25vdyBob3cgdG8gcGFyc2UgdGhpcyBsaW5lICovCiAgICAgZmFpbGYocHAtPmNvbm4tPmRhdGEsICJGYWlsZWQgdG8gcGFyc2UgRkVUQ0ggcmVzcG9uc2UuIik7Ci0gICAgcmVzdWx0ID0gQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWTsgLyogVE9ETzogZml4IHRoaXMgY29kZSAqLworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgfQogCiAgIC8qIEVuZCBvZiBETyBwaGFzZSAqLwpAQCAtMTE5OCw3ICsxMTk3LDcgQEAKICAgKHZvaWQpaW5zdGF0ZTsgLyogTm8gdXNlIGZvciB0aGlzIHlldCAqLwogCiAgIGlmKGltYXBjb2RlICE9ICdPJykKLSAgICByZXN1bHQgPSBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOyAvKiBUT0RPOiBGaXggZXJyb3IgY29kZSAqLworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgZWxzZQogICAgIC8qIEVuZCBvZiBET05FIHBoYXNlICovCiAgICAgc3RhdGUoY29ubiwgSU1BUF9TVE9QKTsKQEAgLTEyNzUsNyArMTI3NCw3IEBACiAKICAgICAvKiBXYXMgdGhlcmUgYW4gZXJyb3IgcGFyc2luZyB0aGUgcmVzcG9uc2UgbGluZT8gKi8KICAgICBpZihpbWFwY29kZSA9PSAtMSkKLSAgICAgIHJldHVybiBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgICAgcmV0dXJuIENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKIAogICAgIGlmKCFpbWFwY29kZSkKICAgICAgIGJyZWFrOwpAQCAtMTkzNSw3ICsxOTM0LDcgQEAKICAgICB3aGlsZSgqcHRyICYmICpwdHIgIT0gJzsnKQogICAgICAgcHRyKys7CiAKLSAgICBpZihzdHJuZXF1YWwoa2V5LCAiQVVUSD0iLCA1KSkKKyAgICBpZihzdHJuY2FzZWNvbXBhcmUoa2V5LCAiQVVUSD0iLCA1KSkKICAgICAgIHJlc3VsdCA9IEN1cmxfc2FzbF9wYXJzZV91cmxfYXV0aF9vcHRpb24oJmltYXBjLT5zYXNsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgcHRyIC0gdmFsdWUpOwogICAgIGVsc2UKQEAgLTIwMzEsMjggKzIwMzAsMjggQEAKICAgICAgICBQQVJUSUFMKSBzdHJpcHBpbmcgb2YgdGhlIHRyYWlsaW5nIHNsYXNoIGNoYXJhY3RlciBpZiBpdCBpcyBwcmVzZW50LgogCiAgICAgICAgTm90ZTogVW5rbm93biBwYXJhbWV0ZXJzIHRyaWdnZXIgYSBVUkxfTUFMRk9STUFUIGVycm9yLiAqLwotICAgIGlmKEN1cmxfcmF3X2VxdWFsKG5hbWUsICJVSURWQUxJRElUWSIpICYmICFpbWFwLT51aWR2YWxpZGl0eSkgeworICAgIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJVSURWQUxJRElUWSIpICYmICFpbWFwLT51aWR2YWxpZGl0eSkgewogICAgICAgaWYodmFsdWVsZW4gPiAwICYmIHZhbHVlW3ZhbHVlbGVuIC0gMV0gPT0gJy8nKQogICAgICAgICB2YWx1ZVt2YWx1ZWxlbiAtIDFdID0gJ1wwJzsKIAogICAgICAgaW1hcC0+dWlkdmFsaWRpdHkgPSB2YWx1ZTsKICAgICAgIHZhbHVlID0gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbChuYW1lLCAiVUlEIikgJiYgIWltYXAtPnVpZCkgeworICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUobmFtZSwgIlVJRCIpICYmICFpbWFwLT51aWQpIHsKICAgICAgIGlmKHZhbHVlbGVuID4gMCAmJiB2YWx1ZVt2YWx1ZWxlbiAtIDFdID09ICcvJykKICAgICAgICAgdmFsdWVbdmFsdWVsZW4gLSAxXSA9ICdcMCc7CiAKICAgICAgIGltYXAtPnVpZCA9IHZhbHVlOwogICAgICAgdmFsdWUgPSBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKG5hbWUsICJTRUNUSU9OIikgJiYgIWltYXAtPnNlY3Rpb24pIHsKKyAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKG5hbWUsICJTRUNUSU9OIikgJiYgIWltYXAtPnNlY3Rpb24pIHsKICAgICAgIGlmKHZhbHVlbGVuID4gMCAmJiB2YWx1ZVt2YWx1ZWxlbiAtIDFdID09ICcvJykKICAgICAgICAgdmFsdWVbdmFsdWVsZW4gLSAxXSA9ICdcMCc7CiAKICAgICAgIGltYXAtPnNlY3Rpb24gPSB2YWx1ZTsKICAgICAgIHZhbHVlID0gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbChuYW1lLCAiUEFSVElBTCIpICYmICFpbWFwLT5wYXJ0aWFsKSB7CisgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZShuYW1lLCAiUEFSVElBTCIpICYmICFpbWFwLT5wYXJ0aWFsKSB7CiAgICAgICBpZih2YWx1ZWxlbiA+IDAgJiYgdmFsdWVbdmFsdWVsZW4gLSAxXSA9PSAnLycpCiAgICAgICAgIHZhbHVlW3ZhbHVlbGVuIC0gMV0gPSAnXDAnOwogCmRpZmYgLS1naXQgYS9saWIvaW5ldF9udG9wLmMgYi9saWIvaW5ldF9udG9wLmMKaW5kZXggNDE2MDA1Yy4uMzgzMTFlMyAxMDA2NDQKLS0tIGEvbGliL2luZXRfbnRvcC5jCisrKyBiL2xpYi9pbmV0X250b3AuYwpAQCAtMTg0LDEwICsxODQsMTAgQEAKIHsKICAgc3dpdGNoIChhZikgewogICBjYXNlIEFGX0lORVQ6Ci0gICAgcmV0dXJuIGluZXRfbnRvcDQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNyYywgYnVmLCBzaXplKTsKKyAgICByZXR1cm4gaW5ldF9udG9wNCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXNyYywgYnVmLCBzaXplKTsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBjYXNlIEFGX0lORVQ2OgotICAgIHJldHVybiBpbmV0X250b3A2KChjb25zdCB1bnNpZ25lZCBjaGFyKilzcmMsIGJ1Ziwgc2l6ZSk7CisgICAgcmV0dXJuIGluZXRfbnRvcDYoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzcmMsIGJ1Ziwgc2l6ZSk7CiAjZW5kaWYKICAgZGVmYXVsdDoKICAgICBTRVRfRVJSTk8oRUFGTk9TVVBQT1JUKTsKZGlmZiAtLWdpdCBhL2xpYi9rcmI1LmMgYi9saWIva3JiNS5jCmluZGV4IDg3Y2U4ZWUuLjA2N2IwYTUgMTAwNjQ0Ci0tLSBhL2xpYi9rcmI1LmMKKysrIGIvbGliL2tyYjUuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgIC8qIE5PVEUgdGhhdCB0aGUgY2FzdCBpcyBzYWZlLCBuZWl0aGVyIG9mIHRoZSBrcmI1LCBnbnUgZ3NzIGFuZCBoZWltZGFsCiAgICAqIGxpYnJhcmllcyBtb2RpZnkgdGhlIGlucHV0IGJ1ZmZlciBpbiBnc3Nfc2VhbCgpCiAgICAqLwotICBkZWMudmFsdWUgPSAodm9pZCopZnJvbTsKKyAgZGVjLnZhbHVlID0gKHZvaWQgKilmcm9tOwogICBkZWMubGVuZ3RoID0gbGVuZ3RoOwogICBtYWogPSBnc3Nfc2VhbCgmbWluLCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgbGV2ZWwgPT0gUFJPVF9QUklWQVRFLApAQCAtMTgyLDcgKzE4Miw3IEBACiAgIGZvcig7OykgewogICAgIC8qIHRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSByZXBlYXRlZCBoZXJlLCBidXQgY2FuJ3QgaGVscCBpdCAqLwogICAgIGlmKHNlcnZpY2UgPT0gc3J2X2hvc3QpIHsKLSAgICAgIHJlc3VsdCA9IEN1cmxfZnRwc2VuZGYoY29ubiwgIkFVVEggR1NTQVBJIik7CisgICAgICByZXN1bHQgPSBDdXJsX2Z0cHNlbmQoY29ubiwgIkFVVEggR1NTQVBJIik7CiAgICAgICBpZihyZXN1bHQpCiAgICAgICAgIHJldHVybiAtMjsKIApAQCAtMjQzLDE2ICsyNDMsMjIgQEAKICAgICAgIH0KIAogICAgICAgaWYob3V0cHV0X2J1ZmZlci5sZW5ndGggIT0gMCkgeworICAgICAgICBjaGFyICpjbWQ7CisKICAgICAgICAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsIChjaGFyICopb3V0cHV0X2J1ZmZlci52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWZmZXIubGVuZ3RoLCAmcCwgJmJhc2U2NF9zeik7CiAgICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAgIEN1cmxfaW5mb2YoZGF0YSwgImJhc2U2NC1lbmNvZGluZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzdWx0KSk7Ci0gICAgICAgICAgcmV0ID0gQVVUSF9DT05USU5VRTsKKyAgICAgICAgICByZXQgPSBBVVRIX0VSUk9SOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcmVzdWx0ID0gQ3VybF9mdHBzZW5kZihjb25uLCAiQURBVCAlcyIsIHApOworICAgICAgICBjbWQgPSBhcHJpbnRmKCJBREFUICVzIiwgcCk7CisgICAgICAgIGlmKGNtZCkKKyAgICAgICAgICByZXN1bHQgPSBDdXJsX2Z0cHNlbmQoY29ubiwgY21kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgICAgICAgZnJlZShwKTsKIApkaWZmIC0tZ2l0IGEvbGliL2xkYXAuYyBiL2xpYi9sZGFwLmMKaW5kZXggYTE2NDYyNy4uYTM2NmUwYyAxMDA2NDQKLS0tIGEvbGliL2xkYXAuYworKysgYi9saWIvbGRhcC5jCkBAIC02OSwxMiArNjksMTEgQEAKICNpbmNsdWRlICJlc2NhcGUuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgInRyYW5zZmVyLmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAic3RydG9rLmgiCiAjaW5jbHVkZSAiY3VybF9sZGFwLmgiCiAjaW5jbHVkZSAiY3VybF9tdWx0aWJ5dGUuaCIKICNpbmNsdWRlICJjdXJsX2Jhc2U2NC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMjcyLDcgKzI3MSw3IEBACiAgICAgbGRhcF9zZXRfb3B0aW9uKHNlcnZlciwgTERBUF9PUFRfU1NMLCBMREFQX09QVF9PTik7CiAjZWxzZQogICAgIGludCBsZGFwX29wdGlvbjsKLSAgICBjaGFyKiBsZGFwX2NhID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV07CisgICAgY2hhciAqbGRhcF9jYSA9IGNvbm4tPnNzbF9jb25maWcuQ0FmaWxlOwogI2lmIGRlZmluZWQoQ1VSTF9IQVNfTk9WRUxMX0xEQVBTREspCiAgICAgcmMgPSBsZGFwc3NsX2NsaWVudF9pbml0KE5VTEwsIE5VTEwpOwogICAgIGlmKHJjICE9IExEQVBfU1VDQ0VTUykgewpAQCAtMjgwLDExICsyNzksMTEgQEAKICAgICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKICAgICAgIGdvdG8gcXVpdDsKICAgICB9Ci0gICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYoY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyKSB7CiAgICAgICAvKiBOb3ZlbGwgU0RLIHN1cHBvcnRzIERFUiBvciBCQVNFNjQgZmlsZXMuICovCiAgICAgICBpbnQgY2VydF90eXBlID0gTERBUFNTTF9DRVJUX0ZJTEVUWVBFX0I2NDsKLSAgICAgIGlmKChkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdKSAmJgotICAgICAgICAgKEN1cmxfcmF3X2VxdWFsKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0sICJERVIiKSkpCisgICAgICBpZigoZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUpICYmCisgICAgICAgICAoc3RyY2FzZWNvbXBhcmUoZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUsICJERVIiKSkpCiAgICAgICAgIGNlcnRfdHlwZSA9IExEQVBTU0xfQ0VSVF9GSUxFVFlQRV9ERVI7CiAgICAgICBpZighbGRhcF9jYSkgewogICAgICAgICBmYWlsZihkYXRhLCAiTERBUCBsb2NhbDogRVJST1IgJXMgQ0EgY2VydCBub3Qgc2V0ISIsCkBAIC0zMjIsMTAgKzMyMSwxMCBAQAogICAgICAgZ290byBxdWl0OwogICAgIH0KICNlbGlmIGRlZmluZWQoTERBUF9PUFRfWF9UTFMpCi0gICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYoY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlwZWVyKSB7CiAgICAgICAvKiBPcGVuTERBUCBTREsgc3VwcG9ydHMgQkFTRTY0IGZpbGVzLiAqLwotICAgICAgaWYoKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pICYmCi0gICAgICAgICAoIUN1cmxfcmF3X2VxdWFsKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0sICJQRU0iKSkpIHsKKyAgICAgIGlmKChkYXRhLT5zZXQuc3NsLmNlcnRfdHlwZSkgJiYKKyAgICAgICAgICghc3RyY2FzZWNvbXBhcmUoZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUsICJQRU0iKSkpIHsKICAgICAgICAgZmFpbGYoZGF0YSwgIkxEQVAgbG9jYWw6IEVSUk9SIE9wZW5MREFQIG9ubHkgc3VwcG9ydHMgUEVNIGNlcnQtdHlwZSEiKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwogICAgICAgICBnb3RvIHF1aXQ7CkBAIC03MDgsMTYgKzcwNywxNiBAQAogICovCiBzdGF0aWMgaW50IHN0cjJzY29wZSAoY29uc3QgY2hhciAqcCkKIHsKLSAgaWYoc3RyZXF1YWwocCwgIm9uZSIpKQotICAgICByZXR1cm4gTERBUF9TQ09QRV9PTkVMRVZFTDsKLSAgaWYoc3RyZXF1YWwocCwgIm9uZXRyZWUiKSkKLSAgICAgcmV0dXJuIExEQVBfU0NPUEVfT05FTEVWRUw7Ci0gIGlmKHN0cmVxdWFsKHAsICJiYXNlIikpCi0gICAgIHJldHVybiBMREFQX1NDT1BFX0JBU0U7Ci0gIGlmKHN0cmVxdWFsKHAsICJzdWIiKSkKLSAgICAgcmV0dXJuIExEQVBfU0NPUEVfU1VCVFJFRTsKLSAgaWYoc3RyZXF1YWwocCwgInN1YnRyZWUiKSkKLSAgICAgcmV0dXJuIExEQVBfU0NPUEVfU1VCVFJFRTsKKyAgaWYoc3RyY2FzZWNvbXBhcmUocCwgIm9uZSIpKQorICAgIHJldHVybiBMREFQX1NDT1BFX09ORUxFVkVMOworICBpZihzdHJjYXNlY29tcGFyZShwLCAib25ldHJlZSIpKQorICAgIHJldHVybiBMREFQX1NDT1BFX09ORUxFVkVMOworICBpZihzdHJjYXNlY29tcGFyZShwLCAiYmFzZSIpKQorICAgIHJldHVybiBMREFQX1NDT1BFX0JBU0U7CisgIGlmKHN0cmNhc2Vjb21wYXJlKHAsICJzdWIiKSkKKyAgICByZXR1cm4gTERBUF9TQ09QRV9TVUJUUkVFOworICBpZihzdHJjYXNlY29tcGFyZShwLCAic3VidHJlZSIpKQorICAgIHJldHVybiBMREFQX1NDT1BFX1NVQlRSRUU7CiAgIHJldHVybiAoLTEpOwogfQogCkBAIC03NjcsNyArNzY2LDcgQEAKICAqCiAgKiBEZWZpbmVkIGluIFJGQzQ1MTYgc2VjdGlvbiAyLgogICovCi1zdGF0aWMgaW50IF9sZGFwX3VybF9wYXJzZTIgKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgTERBUFVSTERlc2MgKmx1ZHApCitzdGF0aWMgaW50IF9sZGFwX3VybF9wYXJzZTIoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBMREFQVVJMRGVzYyAqbHVkcCkKIHsKICAgaW50IHJjID0gTERBUF9TVUNDRVNTOwogICBjaGFyICpwYXRoOwpAQCAtNzc2LDkgKzc3NSw5IEBACiAgIHNpemVfdCBpOwogCiAgIGlmKCFjb25uLT5kYXRhIHx8Ci0gICAgICAhY29ubi0+ZGF0YS0+c3RhdGUucGF0aCB8fAotICAgICAgY29ubi0+ZGF0YS0+c3RhdGUucGF0aFswXSAhPSAnLycgfHwKLSAgICAgICFjaGVja3ByZWZpeCgiTERBUCIsIGNvbm4tPmRhdGEtPmNoYW5nZS51cmwpKQorICAgICAhY29ubi0+ZGF0YS0+c3RhdGUucGF0aCB8fAorICAgICBjb25uLT5kYXRhLT5zdGF0ZS5wYXRoWzBdICE9ICcvJyB8fAorICAgICAhY2hlY2twcmVmaXgoIkxEQVAiLCBjb25uLT5kYXRhLT5jaGFuZ2UudXJsKSkKICAgICByZXR1cm4gTERBUF9JTlZBTElEX1NZTlRBWDsKIAogICBsdWRwLT5sdWRfc2NvcGUgPSBMREFQX1NDT1BFX0JBU0U7CkBAIC03OTgsMTIgKzc5NywxMyBAQAogICBpZigqcCkgewogICAgIGNoYXIgKmRuID0gcDsKICAgICBjaGFyICp1bmVzY2FwZWQ7CisgICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgICAgTERBUF9UUkFDRSAoKCJETiAnJXMnXG4iLCBkbikpOwogCiAgICAgLyogVW5lc2NhcGUgdGhlIEROICovCi0gICAgdW5lc2NhcGVkID0gY3VybF9lYXN5X3VuZXNjYXBlKGNvbm4tPmRhdGEsIGRuLCAwLCBOVUxMKTsKLSAgICBpZighdW5lc2NhcGVkKSB7CisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoY29ubi0+ZGF0YSwgZG4sIDAsICZ1bmVzY2FwZWQsIE5VTEwsIEZBTFNFKTsKKyAgICBpZihyZXN1bHQpIHsKICAgICAgIHJjID0gTERBUF9OT19NRU1PUlk7CiAKICAgICAgIGdvdG8gcXVpdDsKQEAgLTg2MiwxMiArODYyLDE0IEBACiAKICAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICBjaGFyICp1bmVzY2FwZWQ7CisgICAgICBDVVJMY29kZSByZXN1bHQ7CiAKICAgICAgIExEQVBfVFJBQ0UgKCgiYXR0clslZF0gJyVzJ1xuIiwgaSwgYXR0cmlidXRlc1tpXSkpOwogCiAgICAgICAvKiBVbmVzY2FwZSB0aGUgYXR0cmlidXRlICovCi0gICAgICB1bmVzY2FwZWQgPSBjdXJsX2Vhc3lfdW5lc2NhcGUoY29ubi0+ZGF0YSwgYXR0cmlidXRlc1tpXSwgMCwgTlVMTCk7Ci0gICAgICBpZighdW5lc2NhcGVkKSB7CisgICAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShjb25uLT5kYXRhLCBhdHRyaWJ1dGVzW2ldLCAwLCAmdW5lc2NhcGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpOworICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIGZyZWUoYXR0cmlidXRlcyk7CiAKICAgICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKQEAgLTkzMCwxMiArOTMyLDEzIEBACiAgIGlmKCpwKSB7CiAgICAgY2hhciAqZmlsdGVyID0gcDsKICAgICBjaGFyICp1bmVzY2FwZWQ7CisgICAgQ1VSTGNvZGUgcmVzdWx0OwogCiAgICAgTERBUF9UUkFDRSAoKCJmaWx0ZXIgJyVzJ1xuIiwgZmlsdGVyKSk7CiAKICAgICAvKiBVbmVzY2FwZSB0aGUgZmlsdGVyICovCi0gICAgdW5lc2NhcGVkID0gY3VybF9lYXN5X3VuZXNjYXBlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgTlVMTCk7Ci0gICAgaWYoIXVuZXNjYXBlZCkgeworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGNvbm4tPmRhdGEsIGZpbHRlciwgMCwgJnVuZXNjYXBlZCwgTlVMTCwgRkFMU0UpOworICAgIGlmKHJlc3VsdCkgewogICAgICAgcmMgPSBMREFQX05PX01FTU9SWTsKIAogICAgICAgZ290byBxdWl0OwpAQCAtOTcxLDggKzk3NCw4IEBACiAgIHJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfbGRhcF91cmxfcGFyc2UgKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMREFQVVJMRGVzYyAqKmx1ZHBwKQorc3RhdGljIGludCBfbGRhcF91cmxfcGFyc2UoY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTERBUFVSTERlc2MgKipsdWRwcCkKIHsKICAgTERBUFVSTERlc2MgKmx1ZHAgPSBjYWxsb2MoMSwgc2l6ZW9mKCpsdWRwKSk7CiAgIGludCByYzsKQEAgLTk4MSw3ICs5ODQsNyBAQAogICBpZighbHVkcCkKICAgICAgcmV0dXJuIExEQVBfTk9fTUVNT1JZOwogCi0gIHJjID0gX2xkYXBfdXJsX3BhcnNlMiAoY29ubiwgbHVkcCk7CisgIHJjID0gX2xkYXBfdXJsX3BhcnNlMihjb25uLCBsdWRwKTsKICAgaWYocmMgIT0gTERBUF9TVUNDRVNTKSB7CiAgICAgX2xkYXBfZnJlZV91cmxkZXNjKGx1ZHApOwogICAgIGx1ZHAgPSBOVUxMOwpAQCAtOTkwLDcgKzk5Myw3IEBACiAgIHJldHVybiAocmMpOwogfQogCi1zdGF0aWMgdm9pZCBfbGRhcF9mcmVlX3VybGRlc2MgKExEQVBVUkxEZXNjICpsdWRwKQorc3RhdGljIHZvaWQgX2xkYXBfZnJlZV91cmxkZXNjKExEQVBVUkxEZXNjICpsdWRwKQogewogICBzaXplX3QgaTsKIApkaWZmIC0tZ2l0IGEvbGliL2xpYmN1cmwucmMgYi9saWIvbGliY3VybC5yYwppbmRleCA1MGIzNjVkLi5jMWVmYmFkIDEwMDY0NAotLS0gYS9saWIvbGliY3VybC5yYworKysgYi9saWIvbGliY3VybC5yYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDA5LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgIEJFR0lOCiAgICAgQkxPQ0sgIjA0MDkwNGIwIgogICAgIEJFR0lOCi0gICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAgICAgICJUaGUgY1VSTCBsaWJyYXJ5LCBodHRwczovL2N1cmwuaGF4eC5zZS9cMCIKKyAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICAgICAgIlRoZSBjdXJsIGxpYnJhcnksIGh0dHBzOi8vY3VybC5oYXh4LnNlL1wwIgogICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICAibGliY3VybCBTaGFyZWQgTGlicmFyeVwwIgogICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgICAgICBMSUJDVVJMX1ZFUlNJT04gIlwwIgogICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICAgICAibGliY3VybFwwIgogICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliY3VybC5kbGxcMCIKLSAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICAgICAgIlRoZSBjVVJMIGxpYnJhcnlcMCIKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICAgICAgIlRoZSBjdXJsIGxpYnJhcnlcMCIKICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICAgTElCQ1VSTF9WRVJTSU9OICJcMCIKICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICAgIqkgIiBMSUJDVVJMX0NPUFlSSUdIVCAiXDAiCiAgICAgICBWQUxVRSAiTGljZW5zZSIsICAgICAgICAgICJodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sXDAiCmRpZmYgLS1naXQgYS9saWIvbWQ1LmMgYi9saWIvbWQ1LmMKaW5kZXggODRhZGI5OS4uN2ExY2FjOSAxMDA2NDQKLS0tIGEvbGliL21kNS5jCisrKyBiL2xpYi9tZDUuYwpAQCAtNDUsNyArNDUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBNRDVfVXBkYXRlKE1ENV9DVFggKiBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbnB1dExlbikKIHsKICAgbWQ1X3VwZGF0ZShjdHgsIGlucHV0TGVuLCBpbnB1dCk7CkBAIC03MSw3ICs3MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIE1ENV9VcGRhdGUoTUQ1X0NUWCAqIGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlucHV0TGVuKQogewogICBnY3J5X21kX3dyaXRlKCpjdHgsIGlucHV0LCBpbnB1dExlbik7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgQ0NfTUQ1X0ZpbmFsKGRpZ2VzdCwgY3R4KTsKIH0KIAotI2VsaWYgZGVmaW5lZChfV0lOMzIpCisjZWxpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoQ1VSTF9XSU5ET1dTX0FQUCkKIAogI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKZGlmZiAtLWdpdCBhL2xpYi9tZW1kZWJ1Zy5jIGIvbGliL21lbWRlYnVnLmMKaW5kZXggY2NiZjQ2MS4uMTVlODY2MSAxMDA2NDQKLS0tIGEvbGliL21lbWRlYnVnLmMKKysrIGIvbGliL21lbWRlYnVnLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAgdW5pb24gewogICAgIGN1cmxfb2ZmX3QgbzsKICAgICBkb3VibGUgZDsKLSAgICB2b2lkICogcDsKKyAgICB2b2lkICpwOwogICB9IG1lbVsxXTsKICAgLyogSSdtIGhvcGluZyB0aGlzIGlzIHRoZSB0aGluZyB3aXRoIHRoZSBzdHJpY3Rlc3QgYWxpZ25tZW50CiAgICAqIHJlcXVpcmVtZW50cy4gIFRoYXQgYWxzbyBtZWFucyB3ZSB3YXN0ZSBzb21lIHNwYWNlIDotKCAqLwpkaWZmIC0tZ2l0IGEvbGliL21rLWNhLWJ1bmRsZS5wbCBiL2xpYi9tay1jYS1idW5kbGUucGwKaW5kZXggNWExNDM1Yy4uOTU3NGYxZCAxMDA3NTUKLS0tIGEvbGliL21rLWNhLWJ1bmRsZS5wbAorKysgYi9saWIvbWstY2EtYnVuZGxlLnBsCkBAIC02LDcgKzYsNyBAQAogIyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAjICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAjICoKLSMgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorIyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAjICoKICMgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogIyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMwLDExICszMCwxMSBAQAogIyBkZXBlbmRlbmN5IGlzIHRoZSBPcGVuU1NMIGNvbW1hbmRsaW5lIHRvb2wgZm9yIG9wdGlvbmFsIHRleHQgbGlzdGluZy4KICMgSGFja2VkIGJ5IEd1ZW50ZXIgS25hdWYuCiAjCit1c2UgRW5jb2RlOwogdXNlIEdldG9wdDo6U3RkOwogdXNlIE1JTUU6OkJhc2U2NDsKLXVzZSBMV1A6OlVzZXJBZ2VudDsKIHVzZSBzdHJpY3Q7Ci11c2UgdmFycyBxdygkb3B0X2IgJG9wdF9kICRvcHRfZiAkb3B0X2ggJG9wdF9pICRvcHRfbCAkb3B0X24gJG9wdF9wICRvcHRfcSAkb3B0X3MgJG9wdF90ICRvcHRfdSAkb3B0X3YgJG9wdF93KTsKK3VzZSB2YXJzIHF3KCRvcHRfYiAkb3B0X2QgJG9wdF9mICRvcHRfaCAkb3B0X2kgJG9wdF9rICRvcHRfbCAkb3B0X20gJG9wdF9uICRvcHRfcCAkb3B0X3EgJG9wdF9zICRvcHRfdCAkb3B0X3UgJG9wdF92ICRvcHRfdyk7CiB1c2UgTGlzdDo6VXRpbDsKIHVzZSBUZXh0OjpXcmFwOwogbXkgJE1PRF9TSEEgPSAiRGlnZXN0OjpTSEEiOwpAQCAtNDMsMTggKzQzLDE5IEBACiAgICRNT0RfU0hBID0gIkRpZ2VzdDo6U0hBOjpQdXJlUGVybCI7CiAgIGV2YWwgInJlcXVpcmUgJE1PRF9TSEEiOwogfQorZXZhbCAicmVxdWlyZSBMV1A6OlVzZXJBZ2VudCI7CiAKIG15ICV1cmxzID0gKAogICAnbnNzJyA9PgotICAgICdodHRwOi8vaGcubW96aWxsYS5vcmcvcHJvamVjdHMvbnNzL3Jhdy1maWxlL3RpcC9saWIvY2tmdy9idWlsdGlucy9jZXJ0ZGF0YS50eHQnLAorICAgICdodHRwczovL2hnLm1vemlsbGEub3JnL3Byb2plY3RzL25zcy9yYXctZmlsZS90aXAvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKICAgJ2NlbnRyYWwnID0+Ci0gICAgJ2h0dHA6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKKyAgICAnaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKICAgJ2F1cm9yYScgPT4KLSAgICAnaHR0cDovL2hnLm1vemlsbGEub3JnL3JlbGVhc2VzL21vemlsbGEtYXVyb3JhL3Jhdy1maWxlL2RlZmF1bHQvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dCcsCisgICAgJ2h0dHBzOi8vaGcubW96aWxsYS5vcmcvcmVsZWFzZXMvbW96aWxsYS1hdXJvcmEvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKICAgJ2JldGEnID0+Ci0gICAgJ2h0dHA6Ly9oZy5tb3ppbGxhLm9yZy9yZWxlYXNlcy9tb3ppbGxhLWJldGEvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKKyAgICAnaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9yZWxlYXNlcy9tb3ppbGxhLWJldGEvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKICAgJ3JlbGVhc2UnID0+Ci0gICAgJ2h0dHA6Ly9oZy5tb3ppbGxhLm9yZy9yZWxlYXNlcy9tb3ppbGxhLXJlbGVhc2UvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKKyAgICAnaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9yZWxlYXNlcy9tb3ppbGxhLXJlbGVhc2UvcmF3LWZpbGUvZGVmYXVsdC9zZWN1cml0eS9uc3MvbGliL2NrZncvYnVpbHRpbnMvY2VydGRhdGEudHh0JywKICk7CiAKICRvcHRfZCA9ICdyZWxlYXNlJzsKQEAgLTYyLDcgKzYzLDcgQEAKICMgSWYgdGhlIE9wZW5TU0wgY29tbWFuZGxpbmUgaXMgbm90IGluIHNlYXJjaCBwYXRoIHlvdSBjYW4gY29uZmlndXJlIGl0IGhlcmUhCiBteSAkb3BlbnNzbCA9ICdvcGVuc3NsJzsKIAotbXkgJHZlcnNpb24gPSAnMS4yNSc7CitteSAkdmVyc2lvbiA9ICcxLjI3JzsKIAogJG9wdF93ID0gNzY7ICMgZGVmYXVsdCBiYXNlNjQgZW5jb2RlZCBsaW5lcyBsZW5ndGgKIApAQCAtMTA5LDcgKzExMCw3IEBACiAKICQwID1+IHNALiooL3xcXClAQDsKICRHZXRvcHQ6OlN0ZDo6U1RBTkRBUkRfSEVMUF9WRVJTSU9OID0gMTsKLWdldG9wdHMoJ2JkOmZoaWxucDpxczp0dXZ3OicpOworZ2V0b3B0cygnYmQ6Zmhpa2xtbnA6cXM6dHV2dzonKTsKIAogaWYoIWRlZmluZWQoJG9wdF9kKSkgewogICAgICMgdG8gbWFrZSBwbGFpbiAiLWQiIHVzZSBub3QgY2F1c2Ugd2FybmluZ3MsIGFuZCBhY3R1YWxseSBzdGlsbCB3b3JrCkBAIC0xMTcsNyArMTE4LDE2IEBACiB9CiAKICMgVXNlIHByZWRlZmluZWQgVVJMIG9yIGVsc2UgY3VzdG9tIFVSTCBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgotbXkgJHVybCA9ICggZGVmaW5lZCggJHVybHN7JG9wdF9kfSApICkgPyAkdXJsc3skb3B0X2R9IDogJG9wdF9kOworbXkgJHVybDsKK2lmKGRlZmluZWQoJHVybHN7JG9wdF9kfSkpIHsKKyAgJHVybCA9ICR1cmxzeyRvcHRfZH07CisgIGlmKCEkb3B0X2sgJiYgJHVybCAhfiAvXmh0dHBzOlwvXC8vaSkgeworICAgIGRpZSAiVGhlIFVSTCBmb3IgJyRvcHRfZCcgaXMgbm90IEhUVFBTLiBVc2UgLWsgdG8gb3ZlcnJpZGUgKGluc2VjdXJlKS5cbiI7CisgIH0KK30KK2Vsc2UgeworICAkdXJsID0gJG9wdF9kOworfQogCiBteSAkY3VybCA9IGBjdXJsIC1WYDsKIApAQCAtMTI4LDggKzEzOCw4IEBACiAgIHByaW50ICJPcGVyYXRpbmcgU3lzdGVtIE5hbWUgICAgICAgICAgICA6ICReT1xuIjsKICAgcHJpbnQgIkdldG9wdDo6U3RkLnBtIFZlcnNpb24gICAgICAgICAgIDogJHtHZXRvcHQ6OlN0ZDo6VkVSU0lPTn1cbiI7CiAgIHByaW50ICJNSU1FOjpCYXNlNjQucG0gVmVyc2lvbiAgICAgICAgICA6ICR7TUlNRTo6QmFzZTY0OjpWRVJTSU9OfVxuIjsKLSAgcHJpbnQgIkxXUDo6VXNlckFnZW50LnBtIFZlcnNpb24gICAgICAgIDogJHtMV1A6OlVzZXJBZ2VudDo6VkVSU0lPTn1cbiI7Ci0gIHByaW50ICJMV1AucG0gVmVyc2lvbiAgICAgICAgICAgICAgICAgICA6ICR7TFdQOjpWRVJTSU9OfVxuIjsKKyAgcHJpbnQgIkxXUDo6VXNlckFnZW50LnBtIFZlcnNpb24gICAgICAgIDogJHtMV1A6OlVzZXJBZ2VudDo6VkVSU0lPTn1cbiIgaWYoJExXUDo6VXNlckFnZW50OjpWRVJTSU9OKTsKKyAgcHJpbnQgIkxXUC5wbSBWZXJzaW9uICAgICAgICAgICAgICAgICAgIDogJHtMV1A6OlZFUlNJT059XG4iIGlmKCRMV1A6OlZFUlNJT04pOwogICBwcmludCAiRGlnZXN0OjpTSEEucG0gVmVyc2lvbiAgICAgICAgICAgOiAke0RpZ2VzdDo6U0hBOjpWRVJTSU9OfVxuIiBpZiAoJERpZ2VzdDo6U0hBOjpWRVJTSU9OKTsKICAgcHJpbnQgIkRpZ2VzdDo6U0hBOjpQdXJlUGVybC5wbSBWZXJzaW9uIDogJHtEaWdlc3Q6OlNIQTo6UHVyZVBlcmw6OlZFUlNJT059XG4iIGlmICgkRGlnZXN0OjpTSEE6OlB1cmVQZXJsOjpWRVJTSU9OKTsKICAgcHJpbnQgKCI9IiB4IDc4IC4gIlxuIik7CkBAIC0xMzksNyArMTQ5LDcgQEAKICAgaWYgKCAkb3B0X2QgPX4gbS9ecmlzayQvaSApIHsgIyBMb25nIEZvcm0gV2FybmluZyBhbmQgRXhpdAogICAgIHByaW50ICJXYXJuaW5nOiBVc2Ugb2YgdGhpcyBzY3JpcHQgbWF5IHBvc2Ugc29tZSByaXNrOlxuIjsKICAgICBwcmludCAiXG4iOwotICAgIHByaW50ICIgIDEpIFVzaW5nIGh0dHAgaXMgc3ViamVjdCB0byBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2sgb2YgY2VydGRhdGEgY29udGVudFxuIjsKKyAgICBwcmludCAiICAxKSBJZiB5b3UgdXNlIEhUVFAgVVJMcyB0aGV5IGFyZSBzdWJqZWN0IHRvIGEgbWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrXG4iOwogICAgIHByaW50ICIgIDIpIERlZmF1bHQgdG8gJ3JlbGVhc2UnLCBidXQgbW9yZSByZWNlbnQgdXBkYXRlcyBtYXkgYmUgZm91bmQgaW4gb3RoZXIgdHJlZXNcbiI7CiAgICAgcHJpbnQgIiAgMykgY2VydGRhdGEudHh0IGZpbGUgZm9ybWF0IG1heSBjaGFuZ2UsIGxhZyB0aW1lIHRvIHVwZGF0ZSB0aGlzIHNjcmlwdFxuIjsKICAgICBwcmludCAiICA0KSBHZW5lcmFsbHkgdW53aXNlIHRvIGJsaW5kbHkgdHJ1c3QgQ0FzIHdpdGhvdXQgbWFudWFsIHJldmlldyAmIHZlcmlmaWNhdGlvblxuIjsKQEAgLTE1MywxNCArMTYzLDE2IEBACiB9CiAKIHN1YiBIRUxQX01FU1NBR0UoKSB7Ci0gIHByaW50ICJVc2FnZTpcdCR7MH0gWy1iXSBbLWQ8Y2VydGRhdGE+XSBbLWZdIFstaV0gWy1sXSBbLW5dIFstcDxwdXJwb3NlczpsZXZlbHM+XSBbLXFdIFstczxhbGdvcml0aG1zPl0gWy10XSBbLXVdIFstdl0gWy13PGw+XSBbPG91dHB1dGZpbGU+XVxuIjsKKyAgcHJpbnQgIlVzYWdlOlx0JHswfSBbLWJdIFstZDxjZXJ0ZGF0YT5dIFstZl0gWy1pXSBbLWtdIFstbF0gWy1uXSBbLXA8cHVycG9zZXM6bGV2ZWxzPl0gWy1xXSBbLXM8YWxnb3JpdGhtcz5dIFstdF0gWy11XSBbLXZdIFstdzxsPl0gWzxvdXRwdXRmaWxlPl1cbiI7CiAgIHByaW50ICJcdC1iXHRiYWNrdXAgYW4gZXhpc3RpbmcgdmVyc2lvbiBvZiBjYS1idW5kbGUuY3J0XG4iOwogICBwcmludCAiXHQtZFx0c3BlY2lmeSBNb3ppbGxhIHRyZWUgdG8gcHVsbCBjZXJ0ZGF0YS50eHQgb3IgY3VzdG9tIFVSTFxuIjsKICAgcHJpbnQgIlx0XHQgIFZhbGlkIG5hbWVzIGFyZTpcbiI7CiAgIHByaW50ICJcdFx0ICAgICIsIGpvaW4oICIsICIsIG1hcCB7ICggJF8gPX4gbS8kb3B0X2QvICkgPyAiJF8gKGRlZmF1bHQpIiA6ICIkXyIgfSBzb3J0IGtleXMgJXVybHMgKSwgIlxuIjsKICAgcHJpbnQgIlx0LWZcdGZvcmNlIHJlYnVpbGQgZXZlbiBpZiBjZXJ0ZGF0YS50eHQgaXMgY3VycmVudFxuIjsKICAgcHJpbnQgIlx0LWlcdHByaW50IHZlcnNpb24gaW5mbyBhYm91dCB1c2VkIG1vZHVsZXNcbiI7CisgIHByaW50ICJcdC1rXHRhbGxvdyBVUkxzIG90aGVyIHRoYW4gSFRUUFMsIGVuYWJsZSBIVFRQIGZhbGxiYWNrIChpbnNlY3VyZSlcbiI7CiAgIHByaW50ICJcdC1sXHRwcmludCBsaWNlbnNlIGluZm8gYWJvdXQgY2VydGRhdGEudHh0XG4iOworICBwcmludCAiXHQtbVx0aW5jbHVkZSBtZXRhIGRhdGEgaW4gb3V0cHV0XG4iOwogICBwcmludCAiXHQtblx0bm8gZG93bmxvYWQgb2YgY2VydGRhdGEudHh0ICh0byB1c2UgZXhpc3RpbmcpXG4iOwogICBwcmludCB3cmFwKCJcdCIsIlx0XHQiLCAiLXBcdGxpc3Qgb2YgTW96aWxsYSB0cnVzdCBwdXJwb3NlcyBhbmQgbGV2ZWxzIGZvciBjZXJ0aWZpY2F0ZXMgdG8gaW5jbHVkZSBpbiBvdXRwdXQuIFRha2VzIHRoZSBmb3JtIG9mIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHVycG9zZXMsIGEgY29sb24sIGFuZCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxldmVscy4gKGRlZmF1bHQ6ICRkZWZhdWx0X21vemlsbGFfdHJ1c3RfcHVycG9zZXM6JGRlZmF1bHRfbW96aWxsYV90cnVzdF9sZXZlbHMpIiksICJcbiI7CiAgIHByaW50ICJcdFx0ICBWYWxpZCBwdXJwb3NlcyBhcmU6XG4iOwpAQCAtMjI0LDMzICsyMzYsMzQgQEAKICAgcmV0dXJuIEB2YWx1ZXM7CiB9CiAKLXN1YiBzaGExIHsKK3N1YiBzaGEyNTYgewogICBteSAkcmVzdWx0OwogICBpZiAoJERpZ2VzdDo6U0hBOjpWRVJTSU9OIHx8ICREaWdlc3Q6OlNIQTo6UHVyZVBlcmw6OlZFUlNJT04pIHsKICAgICBvcGVuKEZJTEUsICRfWzBdKSBvciBkaWUgIkNhbid0IG9wZW4gJyRfWzBdJzogJCEiOwogICAgIGJpbm1vZGUoRklMRSk7Ci0gICAgJHJlc3VsdCA9ICRNT0RfU0hBLT5uZXcoMSktPmFkZGZpbGUoKkZJTEUpLT5oZXhkaWdlc3Q7CisgICAgJHJlc3VsdCA9ICRNT0RfU0hBLT5uZXcoMjU2KS0+YWRkZmlsZSgqRklMRSktPmhleGRpZ2VzdDsKICAgICBjbG9zZShGSUxFKTsKICAgfSBlbHNlIHsKICAgICAjIFVzZSBPcGVuU1NMIGNvbW1hbmQgaWYgUGVybCBEaWdlc3Q6OlNIQSBtb2R1bGVzIG5vdCBhdmFpbGFibGUKLSAgICAkcmVzdWx0ID0gKHNwbGl0KC8gfFxyfFxuLyxgJG9wZW5zc2wgZGdzdCAtc2hhMSAkX1swXWApKVsxXTsKKyAgICAkcmVzdWx0ID0gYCIkb3BlbnNzbCIgZGdzdCAtciAtc2hhMjU2ICIkX1swXSJgOworICAgICRyZXN1bHQgPX4gcy9eKFswLTlhLWZdezY0fSkgLisvJDEvaXM7CiAgIH0KICAgcmV0dXJuICRyZXN1bHQ7CiB9CiAKIAotc3ViIG9sZHNoYTEgewotICBteSAkc2hhMSA9ICIiOworc3ViIG9sZGhhc2ggeworICBteSAkaGFzaCA9ICIiOwogICBvcGVuKEMsICI8JF9bMF0iKSB8fCByZXR1cm4gMDsKICAgd2hpbGUoPEM+KSB7CiAgICAgY2hvbXA7Ci0gICAgaWYoJF8gPX4gL15cI1wjIFNIQTE6ICguKikvKSB7Ci0gICAgICAkc2hhMSA9ICQxOworICAgIGlmKCRfID1+IC9eXCNcIyBTSEEyNTY6ICguKikvKSB7CisgICAgICAkaGFzaCA9ICQxOwogICAgICAgbGFzdDsKICAgICB9CiAgIH0KICAgY2xvc2UoQyk7Ci0gIHJldHVybiAkc2hhMTsKKyAgcmV0dXJuICRoYXNoOwogfQogCiBpZiAoICRvcHRfcCAhfiBtLzovICkgewpAQCAtMjgyLDM5ICsyOTUsNzIgQEAKIG15ICRyZXNwOwogbXkgJGZldGNoZWQ7CiAKLW15ICRvbGRzaGExID0gb2xkc2hhMSgkY3J0KTsKK215ICRvbGRoYXNoID0gb2xkaGFzaCgkY3J0KTsKIAotcmVwb3J0ICJTSEExIG9mIG9sZCBmaWxlOiAkb2xkc2hhMSI7CityZXBvcnQgIlNIQTI1NiBvZiBvbGQgZmlsZTogJG9sZGhhc2giOwogCi1yZXBvcnQgIkRvd25sb2FkaW5nICckdHh0JyAuLi4iOworaWYoISRvcHRfbikgeworICByZXBvcnQgIkRvd25sb2FkaW5nICR0eHQgLi4uIjsKIAotaWYoJGN1cmwgJiYgISRvcHRfbikgewotICBteSAkaHR0cHMgPSAkdXJsOwotICAkaHR0cHMgPX4gcy9eaHR0cDovaHR0cHM6LzsKLSAgcmVwb3J0ICJHZXQgY2VydGRhdGEgb3ZlciBIVFRQUyB3aXRoIGN1cmwhIjsKLSAgbXkgJHF1aWV0ID0gJG9wdF9xID8gIi1zIiA6ICIiOwotICBteSBAb3V0ID0gYGN1cmwgLXcgJXtyZXNwb25zZV9jb2RlfSAkcXVpZXQgLU8gJGh0dHBzYDsKLSAgaWYoQG91dCAmJiAkb3V0WzBdID09IDIwMCkgewotICAgICRmZXRjaGVkID0gMTsKLSAgfSBlbHNlIHsKLSAgICByZXBvcnQgIkZhaWxlZCBkb3dubG9hZGluZyBIVFRQUyB3aXRoIGN1cmwsIHRyeWluZyBIVFRQIHdpdGggTFdQIjsKKyAgIyBJZiB3ZSBoYXZlIGFuIEhUVFBTIFVSTCB0aGVuIHVzZSBjdXJsCisgIGlmKCR1cmwgPX4gL15odHRwczpcL1wvL2kpIHsKKyAgICBpZigkY3VybCkgeworICAgICAgaWYoJGN1cmwgPX4gL15Qcm90b2NvbHM6LiogaHR0cHMoIHwkKS9tKSB7CisgICAgICAgIHJlcG9ydCAiR2V0IGNlcnRkYXRhIHdpdGggY3VybCEiOworICAgICAgICBteSAkcHJvdG8gPSAhJG9wdF9rID8gIi0tcHJvdG8gPWh0dHBzIiA6ICIiOworICAgICAgICBteSAkcXVpZXQgPSAkb3B0X3EgPyAiLXMiIDogIiI7CisgICAgICAgIG15IEBvdXQgPSBgY3VybCAtdyAle3Jlc3BvbnNlX2NvZGV9ICRwcm90byAkcXVpZXQgLW8gIiR0eHQiICIkdXJsImA7CisgICAgICAgIGlmKEBvdXQgJiYgJG91dFswXSA9PSAyMDApIHsKKyAgICAgICAgICAkZmV0Y2hlZCA9IDE7CisgICAgICAgICAgcmVwb3J0ICJEb3dubG9hZGVkICR0eHQiOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHJlcG9ydCAiRmFpbGVkIGRvd25sb2FkaW5nIHZpYSBIVFRQUyB3aXRoIGN1cmwiOworICAgICAgICAgIGlmKC1lICR0eHQgJiYgIXVubGluaygkdHh0KSkgeworICAgICAgICAgICAgcmVwb3J0ICJGYWlsZWQgdG8gcmVtb3ZlICckdHh0JzogJCEiOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHJlcG9ydCAiY3VybCBsYWNrcyBodHRwcyBzdXBwb3J0IjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZXBvcnQgImN1cmwgbm90IGZvdW5kIjsKKyAgICB9CiAgIH0KLX0KIAotdW5sZXNzICgkZmV0Y2hlZCB8fCAoJG9wdF9uIGFuZCAtZSAkdHh0KSkgewotICBteSAkdWEgID0gbmV3IExXUDo6VXNlckFnZW50KGFnZW50ID0+ICIkMC8kdmVyc2lvbiIpOwotICAkdWEtPmVudl9wcm94eSgpOwotICAkcmVzcCA9ICR1YS0+bWlycm9yKCR1cmwsICR0eHQpOwotICBpZiAoJHJlc3AgJiYgJHJlc3AtPmNvZGUgZXEgJzMwNCcpIHsKLSAgICByZXBvcnQgIk5vdCBtb2RpZmllZCI7Ci0gICAgZXhpdCAwIGlmIC1lICRjcnQgJiYgISRvcHRfZjsKLSAgfSBlbHNlIHsKKyAgIyBJZiBub3RoaW5nIHdhcyBmZXRjaGVkIHRoZW4gdXNlIExXUAorICBpZighJGZldGNoZWQpIHsKKyAgICBpZigkdXJsID1+IC9eaHR0cHM6XC9cLy9pKSB7CisgICAgICByZXBvcnQgIkZhbGxpbmcgYmFjayB0byBIVFRQIjsKKyAgICAgICR1cmwgPX4gcy9eaHR0cHM6XC9cLy9odHRwOlwvXC8vaTsKKyAgICB9CisgICAgaWYoISRvcHRfaykgeworICAgICAgcmVwb3J0ICJVUkxzIG90aGVyIHRoYW4gSFRUUFMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHRvIGVuYWJsZSB1c2UgLWsiOworICAgICAgZXhpdCAxOworICAgIH0KKyAgICByZXBvcnQgIkdldCBjZXJ0ZGF0YSB3aXRoIExXUCEiOworICAgIGlmKCFkZWZpbmVkKCR7TFdQOjpVc2VyQWdlbnQ6OlZFUlNJT059KSkgeworICAgICAgcmVwb3J0ICJMV1AgaXMgbm90IGF2YWlsYWJsZSAoTFdQOjpVc2VyQWdlbnQgbm90IGZvdW5kKSI7CisgICAgICBleGl0IDE7CisgICAgfQorICAgIG15ICR1YSAgPSBuZXcgTFdQOjpVc2VyQWdlbnQoYWdlbnQgPT4gIiQwLyR2ZXJzaW9uIik7CisgICAgJHVhLT5lbnZfcHJveHkoKTsKKyAgICAkcmVzcCA9ICR1YS0+bWlycm9yKCR1cmwsICR0eHQpOworICAgIGlmKCRyZXNwICYmICRyZXNwLT5jb2RlIGVxICczMDQnKSB7CisgICAgICByZXBvcnQgIk5vdCBtb2RpZmllZCI7CisgICAgICBleGl0IDAgaWYgLWUgJGNydCAmJiAhJG9wdF9mOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICRmZXRjaGVkID0gMTsKLSAgfQotICBpZiggISRyZXNwIHx8ICRyZXNwLT5jb2RlICF+IC9eKD86MjAwfDMwNCkkLyApIHsKKyAgICAgIHJlcG9ydCAiRG93bmxvYWRlZCAkdHh0IjsKKyAgICB9CisgICAgaWYoISRyZXNwIHx8ICRyZXNwLT5jb2RlICF+IC9eKD86MjAwfDMwNCkkLykgewogICAgICAgcmVwb3J0ICJVbmFibGUgdG8gZG93bmxvYWQgbGF0ZXN0IGRhdGE6ICIKICAgICAgICAgLiAoJHJlc3A/ICRyZXNwLT5jb2RlIC4gJyAtICcgLiAkcmVzcC0+bWVzc2FnZSA6ICJMV1AgZmFpbGVkIik7CiAgICAgICBleGl0IDEgaWYgLWUgJGNydCB8fCAhIC1yICR0eHQ7CisgICAgfQogICB9CiB9CiAKQEAgLTMyNywxNCArMzczLDE0IEBACiB9CiAKICMgZ2V0IHRoZSBoYXNoIGZyb20gdGhlIGRvd25sb2FkIGZpbGUKLW15ICRuZXdzaGExPSBzaGExKCR0eHQpOworbXkgJG5ld2hhc2g9IHNoYTI1NigkdHh0KTsKIAotaWYoISRvcHRfZiAmJiAkb2xkc2hhMSBlcSAkbmV3c2hhMSkgeworaWYoISRvcHRfZiAmJiAkb2xkaGFzaCBlcSAkbmV3aGFzaCkgewogICAgIHJlcG9ydCAiRG93bmxvYWRlZCBmaWxlIGlkZW50aWNhbCB0byBwcmV2aW91cyBydW5cJ3Mgc291cmNlIGZpbGUuIEV4aXRpbmciOwogICAgIGV4aXQ7CiB9CiAKLXJlcG9ydCAiU0hBMSBvZiBuZXcgZmlsZTogJG5ld3NoYTEiOworcmVwb3J0ICJTSEEyNTYgb2YgbmV3IGZpbGU6ICRuZXdoYXNoIjsKIAogbXkgJGN1cnJlbnRkYXRlID0gc2NhbGFyIGdtdGltZSgkZmlsZWRhdGUpOwogCkBAIC0zNDgsNyArMzk0LDcgQEAKICMjCiAjIyBCdW5kbGUgb2YgQ0EgUm9vdCBDZXJ0aWZpY2F0ZXMKICMjCi0jIyBDZXJ0aWZpY2F0ZSBkYXRhIGZyb20gTW96aWxsYSAke2RhdGVzcmN9OiAke2N1cnJlbnRkYXRlfQorIyMgQ2VydGlmaWNhdGUgZGF0YSBmcm9tIE1vemlsbGEgJHtkYXRlc3JjfTogJHtjdXJyZW50ZGF0ZX0gR01UCiAjIwogIyMgVGhpcyBpcyBhIGJ1bmRsZSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMgb2YgcHVibGljIENlcnRpZmljYXRlIEF1dGhvcml0aWVzCiAjIyAoQ0EpLiBUaGVzZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJvb3QgY2VydGlmaWNhdGVzCkBAIC0zNjEsNyArNDA3LDcgQEAKICMjIEp1c3QgY29uZmlndXJlIHRoaXMgZmlsZSBhcyB0aGUgU1NMQ0FDZXJ0aWZpY2F0ZUZpbGUuCiAjIwogIyMgQ29udmVyc2lvbiBkb25lIHdpdGggbWstY2EtYnVuZGxlLnBsIHZlcnNpb24gJHZlcnNpb24uCi0jIyBTSEExOiAkbmV3c2hhMQorIyMgU0hBMjU2OiAkbmV3aGFzaAogIyMKIAogRU9UCkBAIC0zNzEsNiArNDE3LDcgQEAKIG15ICRjZXJ0bnVtID0gMDsKIG15ICRza2lwbnVtID0gMDsKIG15ICRzdGFydF9vZl9jZXJ0ID0gMDsKK215IEBwcmVjZXJ0OwogCiBvcGVuKFRYVCwiJHR4dCIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiAkdHh0OiAkIVxuIjsKIHdoaWxlICg8VFhUPikgewpAQCAtMzgzLDExICs0MzAsMTUgQEAKICAgICAgIGxhc3QgaWYgKC9cKlwqXCpcKlwqIEVORCBMSUNFTlNFIEJMT0NLIFwqXCpcKlwqXCovKTsKICAgICB9CiAgIH0KLSAgbmV4dCBpZiAvXiN8XlxzKiQvOwotICBjaG9tcDsKLSAgaWYgKC9eQ1ZTX0lEXHMrXCIoLiopXCIvKSB7Ci0gICAgcHJpbnQgQ1JUICIjICQxXG4iOworICBlbHNpZigvXiMgKElzc3VlcnxTZXJpYWwgTnVtYmVyfFN1YmplY3R8Tm90IFZhbGlkIEJlZm9yZXxOb3QgVmFsaWQgQWZ0ZXIgfEZpbmdlcnByaW50IFwoTUQ1XCl8RmluZ2VycHJpbnQgXChTSEExXCkpOi8pIHsKKyAgICAgIHB1c2ggQHByZWNlcnQsICRfOworICAgICAgbmV4dDsKICAgfQorICBlbHNpZigvXiN8XlxzKiQvKSB7CisgICAgICB1bmRlZiBAcHJlY2VydDsKKyAgICAgIG5leHQ7CisgIH0KKyAgY2hvbXA7CiAKICAgIyB0aGlzIGlzIGEgbWF0Y2ggZm9yIHRoZSBzdGFydCBvZiBhIGNlcnRpZmljYXRlCiAgIGlmICgvXkNLQV9DTEFTUyBDS19PQkpFQ1RfQ0xBU1MgQ0tPX0NFUlRJRklDQVRFLykgewpAQCAtNDM2LDggKzQ4Nyw4IEBACiAgICAgICAgICAgICAgIC4gJGVuY29kZWQKICAgICAgICAgICAgICAgLiAiLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLVxuIjsKICAgICAgIHByaW50IENSVCAiXG4kY2FuYW1lXG4iOwotCi0gICAgICBteSAkbWF4U3RyaW5nTGVuZ3RoID0gbGVuZ3RoKCRjYW5hbWUpOworICAgICAgcHJpbnQgQ1JUIEBwcmVjZXJ0IGlmKCRvcHRfbSk7CisgICAgICBteSAkbWF4U3RyaW5nTGVuZ3RoID0gbGVuZ3RoKGRlY29kZSgnVVRGLTgnLCAkY2FuYW1lLCBFbmNvZGU6OkZCX0NST0FLKSk7CiAgICAgICBpZiAoJG9wdF90KSB7CiAgICAgICAgIGZvcmVhY2ggbXkgJGtleSAoa2V5cyAldHJ1c3RfcHVycG9zZXNfYnlfbGV2ZWwpIHsKICAgICAgICAgICAgbXkgJHN0cmluZyA9ICRrZXkgLiAiOiAiIC4gam9pbigiLCAiLCBAeyR0cnVzdF9wdXJwb3Nlc19ieV9sZXZlbHska2V5fX0pOwpAQCAtNDc5LDcgKzUzMCw5IEBACiAgICAgICAkY2VydG51bSArKzsKICAgICAgICRzdGFydF9vZl9jZXJ0ID0gMDsKICAgICB9CisgICAgdW5kZWYgQHByZWNlcnQ7CiAgIH0KKwogfQogY2xvc2UoVFhUKSBvciBkaWUgIkNvdWxkbid0IGNsb3NlICR0eHQ6ICQhXG4iOwogY2xvc2UoQ1JUKSBvciBkaWUgIkNvdWxkbid0IGNsb3NlICRjcnQufjogJCFcbiI7CkBAIC00OTUsNSArNTQ4LDcgQEAKICAgICB9CiAgICAgcmVuYW1lICIkY3J0Ln4iLCAkY3J0IG9yIGRpZSAiRmFpbGVkIHRvIHJlbmFtZSAkY3J0Ln4gdG8gJGNydDogJCFcbiI7CiB9Ci11bmxpbmsgJHR4dCBpZiAoJG9wdF91KTsKK2lmKCRvcHRfdSAmJiAtZSAkdHh0ICYmICF1bmxpbmsoJHR4dCkpIHsKKyAgcmVwb3J0ICJGYWlsZWQgdG8gcmVtb3ZlICR0eHQ6ICQhXG4iOworfQogcmVwb3J0ICJEb25lICgkY2VydG51bSBDQSBjZXJ0cyBwcm9jZXNzZWQsICRza2lwbnVtIHNraXBwZWQpLiI7CmRpZmYgLS1naXQgYS9saWIvbWstY2EtYnVuZGxlLnZicyBiL2xpYi9tay1jYS1idW5kbGUudmJzCmluZGV4IGIwZDk0MjcuLmE5Yjk4M2UgMTAwNzU1Ci0tLSBhL2xpYi9tay1jYS1idW5kbGUudmJzCisrKyBiL2xpYi9tay1jYS1idW5kbGUudmJzCkBAIC0yNiwyMCArMjYsMzYgQEAKICcqIEhhY2tlZCBieSBHdWVudGVyIEtuYXVmDQogJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KIE9wdGlvbiBFeHBsaWNpdA0KLUNvbnN0IG15VmVyc2lvbiA9ICIwLjMuOSINCitDb25zdCBteVZlcnNpb24gPSAiMC40LjAiDQogDQotQ29uc3QgbXlVcmwgPSAiaHR0cDovL2hnLm1vemlsbGEub3JnL3JlbGVhc2VzL21vemlsbGEtcmVsZWFzZS9yYXctZmlsZS9kZWZhdWx0L3NlY3VyaXR5L25zcy9saWIvY2tmdy9idWlsdGlucy9jZXJ0ZGF0YS50eHQiDQotQ29uc3QgbXlPcGVuc3NsID0gIm9wZW5zc2wuZXhlIg0KK0NvbnN0IG15VXJsID0gImh0dHBzOi8vaGcubW96aWxsYS5vcmcvcmVsZWFzZXMvbW96aWxsYS1yZWxlYXNlL3Jhdy1maWxlL2RlZmF1bHQvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dCINCiANCi1Db25zdCBteUNkU2F2RiA9IEZBTFNFICAgICAgICcgRmxhZzogc2F2ZSBkb3dubG9hZGVkIGRhdGEgdG8gZmlsZSBjZXJ0ZGF0YS50eHQNCitDb25zdCBteU9wZW5TU0wgPSAib3BlbnNzbC5leGUiDQorRGltIG15VXNlT3BlblNTTA0KK215VXNlT3BlblNTTCA9IFRSVUUgICAgICAgICAgJyBGbGFnOiBUUlVFIHRvIHVzZSBPcGVuU1NMLiBJZiBUUlVFIGFuZCBpcyBub3QNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZm91bmQgdGhlbiBhIHdhcm5pbmcgaXMgc2hvd24gYmVmb3JlIGNvbnRpbnVpbmcuDQorDQorQ29uc3QgbXlDZFNhdkYgPSBUUlVFICAgICAgICAnIEZsYWc6IHNhdmUgZG93bmxvYWRlZCBkYXRhIHRvIGZpbGUgY2VydGRhdGEudHh0DQogQ29uc3QgbXlDYUJha0YgPSBUUlVFICAgICAgICAnIEZsYWc6IGJhY2t1cCBleGlzdGluZyBjYS1idW5kbGUgY2VydGlmaWNhdGUNCiBDb25zdCBteUFza0xpRiA9IFRSVUUgICAgICAgICcgRmxhZzogZGlzcGxheSBjZXJ0ZGF0YS50eHQgbGljZW5zZSBhZ3JlZW1lbnQNCi1Db25zdCBteUFza1RpRiA9IFRSVUUgICAgICAgICcgRmxhZzogYXNrIHRvIGluY2x1ZGUgY2VydGlmaWNhdGUgdGV4dCBpbmZvDQogQ29uc3QgbXlXcmFwTGUgPSA3NiAgICAgICAgICAnIERlZmF1bHQgbGVuZ3RoIG9mIGJhc2U2NCBvdXRwdXQgbGluZXMNCiANCisnIGNlcnQgaW5mbyBjb2RlIGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aXRoIGFueSByZWNlbnQgb3BlbnNzbCwgbGVhdmUgZGlzYWJsZWQuDQorJyBBbHNvOiB3ZSB3YW50IG91ciBjZXJ0aWZpY2F0ZSBvdXRwdXQgYnkgZGVmYXVsdCB0byBiZSBhcyBzaW1pbGFyIGFzIHBvc3NpYmxlDQorJyB0byBtay1jYS1idW5kbGUucGwgYW5kIHNldHRpbmcgdGhpcyBUUlVFIGNoYW5nZXMgdGhlIGJhc2U2NCB3aWR0aCB0bw0KKycgT3BlblNTTCdzIGJ1aWx0LWluIGRlZmF1bHQgd2lkdGgsIHdoaWNoIGlzIG5vdCB0aGUgc2FtZSBhcyBtay1jYS1idW5kbGUucGwuDQorQ29uc3QgbXlBc2tUaUYgPSBGQUxTRSAgICAgICAnIEZsYWc6IGFzayB0byBpbmNsdWRlIGNlcnRpZmljYXRlIHRleHQgaW5mbw0KKw0KKycNCiAnKioqKioqKioqKioqKioqKioqKiBOb3RoaW5nIHRvIGNvbmZpZ3VyZSBiZWxvdyEgKioqKioqKioqKioqKioqKioqKg0KKycNCitDb25zdCBhZFR5cGVCaW5hcnkgPSAxDQorQ29uc3QgYWRUeXBlVGV4dCA9IDINCitDb25zdCBhZFNhdmVDcmVhdGVOb3RFeGlzdCA9IDENCitDb25zdCBhZFNhdmVDcmVhdGVPdmVyV3JpdGUgPSAyDQogRGltIG9ialNoZWxsLCBvYmpOZXR3b3JrLCBvYmpGU08sIG9iakh0dHANCi1EaW0gbXlCYXNlLCBteVNlbGYsIG15RmgsIG15VG1wRmgsIG15Q2REYXRhLCBteUNkRmlsZSwgbXlDYUZpbGUsIG15VG1wTmFtZSwgbXlCYWtOdW0sIG15T3B0VHh0LCBpDQorRGltIG15QmFzZSwgbXlTZWxmLCBteVN0cmVhbSwgbXlUbXBGaCwgbXlDZERhdGEsIG15Q2RGaWxlDQorRGltIG15Q2FGaWxlLCBteVRtcE5hbWUsIG15QmFrTnVtLCBteU9wdFR4dCwgaQ0KIFNldCBvYmpOZXR3b3JrID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldTY3JpcHQuTmV0d29yayIpDQogU2V0IG9ialNoZWxsID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldTY3JpcHQuU2hlbGwiKQ0KIFNldCBvYmpGU08gPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QiKQ0KQEAgLTQ3LDE0ICs2Myw2MCBAQAogSWYgb2JqSHR0cCBJcyBOb3RoaW5nIFRoZW4gU2V0IG9iakh0dHAgPSBXU2NyaXB0LkNyZWF0ZU9iamVjdCgiV2luSHR0cC5XaW5IdHRwUmVxdWVzdCIpDQogbXlCYXNlID0gTGVmdChXU2NyaXB0LlNjcmlwdEZ1bGxOYW1lLCBJbnN0clJldihXU2NyaXB0LlNjcmlwdEZ1bGxOYW1lLCAiXCIpKQ0KIG15U2VsZiA9IExlZnQoV1NjcmlwdC5TY3JpcHROYW1lLCBJbnN0clJldihXU2NyaXB0LlNjcmlwdE5hbWUsICIuIikgLSAxKSAmICIgIiAmIG15VmVyc2lvbg0KKw0KIG15Q2RGaWxlID0gTWlkKG15VXJsLCBJbnN0clJldihteVVybCwgIi8iKSArIDEpDQogbXlDYUZpbGUgPSAiY2EtYnVuZGxlLmNydCINCi1teVRtcE5hbWUgPSBJbnB1dEJveCgiRW50ZXIgb3V0cHV0IGZpbGVuYW1lOiIsIG15U2VsZiwgbXlDYUZpbGUpDQotSWYgTm90IChteVRtcE5hbWUgPSAiIikgVGhlbg0KLSAgbXlDYUZpbGUgPSBteVRtcE5hbWUNCitteVRtcE5hbWUgPSBJbnB1dEJveCgiSXQgd2lsbCB0YWtlIGEgbWludXRlIHRvIGRvd25sb2FkIGFuZCBwYXJzZSB0aGUgIiAmIF8NCisgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUgZGF0YS4iICYgXw0KKyAgICAgICAgICAgICAgICAgICAgIHZiTGYgJiB2YkxmICYgXw0KKyAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgdGhlIG91dHB1dCBmaWxlbmFtZToiLCBteVNlbGYsIG15Q2FGaWxlKQ0KK0lmIChteVRtcE5hbWUgPSAiIikgVGhlbg0KKyAgV1NjcmlwdC5RdWl0IDENCiBFbmQgSWYNCi0nIExldHMgaWdub3JlIFNTTCBpbnZhbGlkIGNlcnQgZXJyb3JzDQotb2JqSHR0cC5PcHRpb24oNCkgPSAyNTYgKyA1MTIgKyA0MDk2ICsgODE5Mg0KK215Q2FGaWxlID0gbXlUbXBOYW1lDQorSWYgKG15Q2RGaWxlID0gIiIpIFRoZW4NCisgIE1zZ0JveCgiVVJMIGRvZXMgbm90IGNvbnRhaW4gZmlsZW5hbWUhIiksIHZiQ3JpdGljYWwsIG15U2VsZg0KKyAgV1NjcmlwdC5RdWl0IDENCitFbmQgSWYNCisNCisnIERvbid0IHVzZSBPcGVuU1NMIGlmIGl0J3Mgbm90IHByZXNlbnQuDQorSWYgKG15VXNlT3BlblNTTCA9IFRSVUUpIFRoZW4NCisgIERpbSBlcnJudW0NCisNCisgIE9uIEVycm9yIFJlc3VtZSBOZXh0DQorICBDYWxsIG9ialNoZWxsLlJ1bigiIiIiICYgbXlPcGVuU1NMICYgIiIiIHZlcnNpb24iLCAwLCBUUlVFKQ0KKyAgZXJybnVtID0gRXJyLk51bWJlcg0KKyAgT24gRXJyb3IgR29UbyAwDQorDQorICBJZiBOb3QgKGVycm51bSA9IDApIFRoZW4NCisgICAgbXlVc2VPcGVuU1NMID0gRkFMU0UNCisgICAgTXNnQm94KCJPcGVuU1NMIHdhcyBub3QgZm91bmQgc28gdGhlIGNlcnRpZmljYXRlIGJ1bmRsZSB3aWxsIG5vdCAiICYgXw0KKyAgICAgICAgICAgImluY2x1ZGUgdGhlIFNIQTI1NiBoYXNoIG9mIHRoZSByYXcgY2VydGlmaWNhdGUgZGF0YSBmaWxlICIgJiBfDQorICAgICAgICAgICAidGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2VydGlmaWNhdGVzIGluIHRoZSBidW5kbGUuICIgJiBfDQorICAgICAgICAgICB2YkxmICYgdmJMZiAmIF8NCisgICAgICAgICAgICJUaGlzIGRvZXMgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgY2VydGlmaWNhdGUgb3V0cHV0LCAiICYgXw0KKyAgICAgICAgICAgInNvIHRoaXMgc2NyaXB0IHdpbGwgY29udGludWUuIiAmIF8NCisgICAgICAgICAgIHZiTGYgJiB2YkxmICYgXw0KKyAgICAgICAgICAgIklmIHlvdSB3YW50IHRvIHNldCBhIGN1c3RvbSBsb2NhdGlvbiBmb3IgT3BlblNTTCBvciBkaXNhYmxlICIgJiBfDQorICAgICAgICAgICAidGhpcyBtZXNzYWdlIHRoZW4gZWRpdCB0aGUgdmFyaWFibGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgIiAmIF8NCisgICAgICAgICAgICJzY3JpcHQuIiksIHZiSW5mb3JtYXRpb24sIG15U2VsZg0KKyAgRW5kIElmDQorRW5kIElmDQorDQorSWYgKG15QXNrVGlGID0gVFJVRSkgQW5kIChteVVzZU9wZW5TU0wgPSBUUlVFKSBUaGVuDQorICBJZiAoNiA9IG9ialNoZWxsLlBvcFVwKCJEbyB5b3Ugd2FudCB0byBpbmNsdWRlIHRleHQgaW5mb3JtYXRpb24gYWJvdXQgIiAmIF8NCisgICAgICAgICAgICAgICAgICAgICAgICAgImVhY2ggY2VydGlmaWNhdGU/IiAmIHZiTGYgJiBfDQorICAgICAgICAgICAgICAgICAgICAgICAgICIoUmVxdWlyZXMgT3BlblNTTC5leGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICIgJiBfDQorICAgICAgICAgICAgICAgICAgICAgICAgICJvciBzZWFyY2ggcGF0aCkiLCwgXw0KKyAgICAgICAgICBteVNlbGYsIHZiUXVlc3Rpb24gKyB2Ylllc05vICsgdmJEZWZhdWx0QnV0dG9uMikpIFRoZW4NCisgICAgbXlPcHRUeHQgPSBUUlVFDQorICBFbHNlDQorICAgIG15T3B0VHh0ID0gRkFMU0UNCisgIEVuZCBJZg0KK0VuZCBJZg0KKw0KKycgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIGlnbm9yZSBTU0wgaW52YWxpZCBjZXJ0IGVycm9ycw0KKycgb2JqSHR0cC5PcHRpb24oNCkgPSAyNTYgKyA1MTIgKyA0MDk2ICsgODE5Mg0KIG9iakh0dHAuU2V0VGltZW91dHMgMCwgNTAwMCwgMTAwMDAsIDEwMDAwDQogb2JqSHR0cC5PcGVuICJHRVQiLCBteVVybCwgRkFMU0UNCiBvYmpIdHRwLnNldFJlcXVlc3RIZWFkZXIgIlVzZXItQWdlbnQiLCBXU2NyaXB0LlNjcmlwdE5hbWUgJiAiLyIgJiBteVZlcnNpb24NCkBAIC02MywxNSArMTI1LDEzIEBACiAgIE1zZ0JveCgiRmFpbGVkIHRvIGRvd25sb2FkICciICYgbXlDZEZpbGUgJiAiJzogIiAmIG9iakh0dHAuU3RhdHVzICYgIiAtICIgJiBvYmpIdHRwLlN0YXR1c1RleHQpLCB2YkNyaXRpY2FsLCBteVNlbGYNCiAgIFdTY3JpcHQuUXVpdCAxDQogRW5kIElmDQotJyBDb252ZXJ0IGRhdGEgZnJvbSBSZXNwb25zZUJvZHkgaW5zdGVhZCBvZiB1c2luZyBSZXNwb25zZVRleHQgYmVjYXVzZSBvZiBVVEYtOA0KLW15Q2REYXRhID0gQ29udmVydEJpbmFyeURhdGEob2JqSHR0cC5SZXNwb25zZUJvZHkpDQotU2V0IG9iakh0dHAgPSBOb3RoaW5nDQogJyBXcml0ZSByZWNlaXZlZCBkYXRhIHRvIGZpbGUgaWYgZW5hYmxlZA0KIElmIChteUNkU2F2RiA9IFRSVUUpIFRoZW4NCi0gIFNldCBteUZoID0gb2JqRlNPLk9wZW5UZXh0RmlsZShteUNkRmlsZSwgMiwgVFJVRSkNCi0gIG15RmguV3JpdGUgbXlDZERhdGENCi0gIG15RmguQ2xvc2UNCisgIENhbGwgU2F2ZUJpbmFyeURhdGEobXlDZEZpbGUsIG9iakh0dHAuUmVzcG9uc2VCb2R5KQ0KIEVuZCBJZg0KKycgQ29udmVydCBkYXRhIGZyb20gUmVzcG9uc2VCb2R5IGluc3RlYWQgb2YgdXNpbmcgUmVzcG9uc2VUZXh0IGJlY2F1c2Ugb2YgVVRGLTgNCitteUNkRGF0YSA9IENvbnZlcnRCaW5hcnlUb1VURjgob2JqSHR0cC5SZXNwb25zZUJvZHkpDQorU2V0IG9iakh0dHAgPSBOb3RoaW5nDQogJyBCYWNrdXAgZXhpdHNpbmcgY2EtYnVuZGxlIGNlcnRpZmljYXRlIGZpbGUNCiBJZiAobXlDYUJha0YgPSBUUlVFKSBUaGVuDQogICBJZiBvYmpGU08uRmlsZUV4aXN0cyhteUNhRmlsZSkgVGhlbg0KQEAgLTg2LDE1ICsxNDYsNyBAQAogICAgIG15VG1wRmguTW92ZSBteUJha0ZpbGUNCiAgIEVuZCBJZg0KIEVuZCBJZg0KLUlmIChteUFza1RpRiA9IFRSVUUpIFRoZW4NCi0gIElmICg2ID0gb2JqU2hlbGwuUG9wVXAoIkRvIHlvdSB3YW50IHRvIGluY2x1ZGUgdGV4dCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGNlcnRpZmljYXRlPyIgJiB2YkxmICYgXw0KLSAgICAgICAgICAiKHJlcXVpcmVzIE9wZW5TU0wgY29tbWFuZGxpbmUgaW4gY3VycmVudCBkaXJlY3Rvcnkgb3IgaW4gc2VhcmNoIHBhdGgpIiwsIF8NCi0gICAgICAgICAgbXlTZWxmLCB2YlF1ZXN0aW9uICsgdmJZZXNObyArIHZiRGVmYXVsdEJ1dHRvbjIpKSBUaGVuDQotICAgIG15T3B0VHh0ID0gVFJVRQ0KLSAgRWxzZQ0KLSAgICBteU9wdFR4dCA9IEZBTFNFDQotICBFbmQgSWYNCi1FbmQgSWYNCisNCiAnIFByb2Nlc3MgdGhlIHJlY2VpdmVkIGRhdGENCiBEaW0gbXlMaW5lcywgbXlQYXR0ZXJuLCBteUluc2lkZUNlcnQsIG15SW5zaWRlTGljZW5zZSwgbXlMaWNlbnNlVGV4dCwgbXlOdW1DZXJ0cywgbXlOdW1Ta2lwcGVkDQogRGltIG15TGFiZWwsIG15T2N0ZXRzLCBteURhdGEsIG15UGVtLCBteVJldiwgbXlVbnRydXN0ZWQsIGoNCkBAIC0xMDIsMjMgKzE1NCwzMyBAQAogbXlOdW1DZXJ0cyA9IDANCiBteURhdGEgPSAiIg0KIG15TGluZXMgPSBTcGxpdChteUNkRGF0YSwgdmJMZiwgLTEpDQotU2V0IG15RmggPSBvYmpGU08uT3BlblRleHRGaWxlKG15Q2FGaWxlLCAyLCBUUlVFKQ0KLW15RmguV3JpdGUgIiMjIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyAiICYgbXlDYUZpbGUgJiAiIC0tIEJ1bmRsZSBvZiBDQSBSb290IENlcnRpZmljYXRlcyIgJiB2YkxmDQotbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KLW15RmguV3JpdGUgIiMjIENvbnZlcnRlZCBhdDogIiAmIE5vdyAmIHZiTGYNCi1teUZoLldyaXRlICIjIyIgJiB2YkxmDQotbXlGaC5Xcml0ZSAiIyMgVGhpcyBpcyBhIGJ1bmRsZSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMgb2YgcHVibGljIENlcnRpZmljYXRlIEF1dGhvcml0aWVzIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyAoQ0EpLiBUaGVzZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gTW96aWxsYSdzIHJvb3QgY2VydGlmaWNhdGVzIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyBmaWxlIChjZXJ0ZGF0YS50eHQpLiAgVGhpcyBmaWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW96aWxsYSBzb3VyY2UgdHJlZToiICYgdmJMZg0KLW15RmguV3JpdGUgIiMjICcvbW96aWxsYS9zb3VyY2Uvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dCciICYgdmJMZg0KLW15RmguV3JpdGUgIiMjIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyBJdCBjb250YWlucyB0aGUgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQgYW5kIHRoZXJlZm9yZSIgJiB2YkxmDQotbXlGaC5Xcml0ZSAiIyMgY2FuIGJlIGRpcmVjdGx5IHVzZWQgd2l0aCBjdXJsIC8gbGliY3VybCAvIHBocF9jdXJsLCBvciB3aXRoIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyBhbiBBcGFjaGUrbW9kX3NzbCB3ZWJzZXJ2ZXIgZm9yIFNTTCBjbGllbnQgYXV0aGVudGljYXRpb24uIiAmIHZiTGYNCi1teUZoLldyaXRlICIjIyBKdXN0IGNvbmZpZ3VyZSB0aGlzIGZpbGUgYXMgdGhlIFNTTENBQ2VydGlmaWNhdGVGaWxlLiIgJiB2YkxmDQotbXlGaC5Xcml0ZSAiIyMiICYgdmJMZg0KLW15RmguV3JpdGUgdmJMZg0KK1NldCBteVN0cmVhbSA9IENyZWF0ZU9iamVjdCgiQURPREIuU3RyZWFtIikNCitteVN0cmVhbS5PcGVuDQorbXlTdHJlYW0uVHlwZSA9IGFkVHlwZVRleHQNCitteVN0cmVhbS5DaGFyc2V0ID0gInV0Zi04Ig0KK215U3RyZWFtLldyaXRlVGV4dCAiIyMiICYgdmJMZiAmIF8NCisgICIjIyBCdW5kbGUgb2YgQ0EgUm9vdCBDZXJ0aWZpY2F0ZXMiICYgdmJMZiAmIF8NCisgICIjIyIgJiB2YkxmICYgXw0KKyAgIiMjIENlcnRpZmljYXRlIGRhdGEgZnJvbSBNb3ppbGxhIGFzIG9mOiAiICYgXw0KKyAgICBDb252ZXJ0RGF0ZVRvU3RyaW5nKExvY2FsRGF0ZVRvVVRDKE5vdykpICYgIiBHTVQiICYgdmJMZiAmIF8NCisgICIjIyIgJiB2YkxmICYgXw0KKyAgIiMjIFRoaXMgaXMgYSBidW5kbGUgb2YgWC41MDkgY2VydGlmaWNhdGVzIG9mIHB1YmxpYyBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyIgJiB2YkxmICYgXw0KKyAgIiMjIChDQSkuIFRoZXNlIHdlcmUgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSBNb3ppbGxhJ3Mgcm9vdCBjZXJ0aWZpY2F0ZXMiICYgdmJMZiAmIF8NCisgICIjIyBmaWxlIChjZXJ0ZGF0YS50eHQpLiAgVGhpcyBmaWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW96aWxsYSBzb3VyY2UgdHJlZToiICYgdmJMZiAmIF8NCisgICIjIyAiICYgbXlVcmwgJiB2YkxmICYgXw0KKyAgIiMjIiAmIHZiTGYgJiBfDQorICAiIyMgSXQgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0IGFuZCB0aGVyZWZvcmUiICYgdmJMZiAmIF8NCisgICIjIyBjYW4gYmUgZGlyZWN0bHkgdXNlZCB3aXRoIGN1cmwgLyBsaWJjdXJsIC8gcGhwX2N1cmwsIG9yIHdpdGgiICYgdmJMZiAmIF8NCisgICIjIyBhbiBBcGFjaGUrbW9kX3NzbCB3ZWJzZXJ2ZXIgZm9yIFNTTCBjbGllbnQgYXV0aGVudGljYXRpb24uIiAmIHZiTGYgJiBfDQorICAiIyMgSnVzdCBjb25maWd1cmUgdGhpcyBmaWxlIGFzIHRoZSBTU0xDQUNlcnRpZmljYXRlRmlsZS4iICYgdmJMZiAmIF8NCisgICIjIyIgJiB2YkxmICYgXw0KKyAgIiMjIENvbnZlcnNpb24gZG9uZSB3aXRoIG1rLWNhLWJ1bmRsZS52YnMgdmVyc2lvbiAiICYgbXlWZXJzaW9uICYgIi4iICYgdmJMZg0KK0lmIChteUNkU2F2RiA9IFRSVUUpIEFuZCAobXlVc2VPcGVuU1NMID0gVFJVRSkgVGhlbg0KKyAgbXlTdHJlYW0uV3JpdGVUZXh0ICIjIyBTSEEyNTY6ICIgJiBGaWxlU0hBMjU2KG15Q2RGaWxlKSAmIHZiTGYNCitFbmQgSWYNCitteVN0cmVhbS5Xcml0ZVRleHQgIiMjIiAmIHZiTGYgJiB2YkxmDQorDQorbXlTdHJlYW0uV3JpdGVUZXh0IHZiTGYNCiBGb3IgaSA9IDAgVG8gVUJvdW5kKG15TGluZXMpDQogICBJZiBJbnN0clJldihteUxpbmVzKGkpLCAiQ0tBX0xBQkVMICIpIFRoZW4NCiAgICAgbXlQYXR0ZXJuID0gIl5DS0FfTEFCRUxccytbQS1aMC05XStccysiIiguKz8pIiIiDQpAQCAtMTM2LDEzICsxOTgsMTMgQEAKICAgICAgIElmIChteVVudHJ1c3RlZCA9IFRSVUUpIFRoZW4NCiAgICAgICAgIG15TnVtU2tpcHBlZCA9IG15TnVtU2tpcHBlZCArIDENCiAgICAgICBFbHNlDQotICAgICAgICBteUZoLldyaXRlIG15TGFiZWwgJiB2YkxmDQotICAgICAgICBteUZoLldyaXRlIFN0cmluZyhMZW4obXlMYWJlbCksICI9IikgJiB2YkxmDQorICAgICAgICBteVN0cmVhbS5Xcml0ZVRleHQgbXlMYWJlbCAmIHZiTGYNCisgICAgICAgIG15U3RyZWFtLldyaXRlVGV4dCBTdHJpbmcoTGVuKG15TGFiZWwpLCAiPSIpICYgdmJMZg0KICAgICAgICAgbXlQZW0gPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIiAmIHZiTGYgJiBfDQogICAgICAgICAgICAgICAgIEJhc2U2NEVuY29kZShteURhdGEpICYgdmJMZiAmIF8NCiAgICAgICAgICAgICAgICAgIi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0iICYgdmJMZg0KICAgICAgICAgSWYgKG15T3B0VHh0ID0gRkFMU0UpIFRoZW4NCi0gICAgICAgICAgbXlGaC5Xcml0ZSBteVBlbSAmIHZiTGYNCisgICAgICAgICAgbXlTdHJlYW0uV3JpdGVUZXh0IG15UGVtICYgdmJMZg0KICAgICAgICAgRWxzZQ0KICAgICAgICAgICBEaW0gbXlDbWQsIG15UnZhbCwgbXlUbXBJbiwgbXlUbXBPdXQNCiAgICAgICAgICAgbXlUbXBJbiA9IG9iakZTTy5HZXRTcGVjaWFsRm9sZGVyKDIpLlBhdGggJiAiXCIgJiBvYmpGU08uR2V0VGVtcE5hbWUNCkBAIC0xNTAsOCArMjEyLDggQEAKICAgICAgICAgICBTZXQgbXlUbXBGaCA9IG9iakZTTy5PcGVuVGV4dEZpbGUobXlUbXBJbiwgMiwgVFJVRSkNCiAgICAgICAgICAgbXlUbXBGaC5Xcml0ZSBteVBlbQ0KICAgICAgICAgICBteVRtcEZoLkNsb3NlDQotICAgICAgICAgIG15Q21kID0gbXlPcGVuc3NsICYgIiB4NTA5IC1tZDUgLWZpbmdlcnByaW50IC10ZXh0IC1pbmZvcm0gUEVNIiAmIF8NCi0gICAgICAgICAgICAgICAgICAiIC1pbiAiICYgbXlUbXBJbiAmICIgLW91dCAiICYgbXlUbXBPdXQNCisgICAgICAgICAgbXlDbWQgPSAiIiIiICYgbXlPcGVuU1NMICYgIiIiIHg1MDkgLW1kNSAtZmluZ2VycHJpbnQgLXRleHQgIiAmIF8NCisgICAgICAgICAgICAgICAgICAiLWluZm9ybSBQRU0gLWluICIgJiBteVRtcEluICYgIiAtb3V0ICIgJiBteVRtcE91dA0KICAgICAgICAgICBteVJ2YWwgPSBvYmpTaGVsbC5SdW4gKG15Q21kLCAwLCBUUlVFKQ0KICAgICAgICAgICBvYmpGU08uRGVsZXRlRmlsZSBteVRtcEluLCBUUlVFDQogICAgICAgICAgIElmIE5vdCAobXlSdmFsID0gMCkgVGhlbg0KQEAgLTE2MCw3ICsyMjIsNyBAQAogICAgICAgICAgICAgV1NjcmlwdC5RdWl0IDMNCiAgICAgICAgICAgRW5kIElmDQogICAgICAgICAgIFNldCBteVRtcEZoID0gb2JqRlNPLk9wZW5UZXh0RmlsZShteVRtcE91dCwgMSkNCi0gICAgICAgICAgbXlGaC5Xcml0ZSBteVRtcEZoLlJlYWRBbGwgJiB2YkxmDQorICAgICAgICAgIG15U3RyZWFtLldyaXRlVGV4dCBteVRtcEZoLlJlYWRBbGwgJiB2YkxmDQogICAgICAgICAgIG15VG1wRmguQ2xvc2UNCiAgICAgICAgICAgb2JqRlNPLkRlbGV0ZUZpbGUgbXlUbXBPdXQsIFRSVUUNCiAgICAgICAgIEVuZCBJZg0KQEAgLTE3Niw3ICsyMzgsNyBAQAogICBJZiBJbnN0clJldihteUxpbmVzKGkpLCAiQ1ZTX0lEICIpIFRoZW4NCiAgICAgbXlQYXR0ZXJuID0gIl5DVlNfSURccysiIiguKz8pIiIiDQogICAgIG15UmV2ID0gUmVnRXhwckZpcnN0KG15UGF0dGVybiwgbXlMaW5lcyhpKSkNCi0gICAgbXlGaC5Xcml0ZSAiIyAiICYgbXlSZXYgJiB2YkxmICYgdmJMZg0KKyAgICBteVN0cmVhbS5Xcml0ZVRleHQgIiMgIiAmIG15UmV2ICYgdmJMZiAmIHZiTGYNCiAgIEVuZCBJZg0KICAgSWYgSW5zdHJSZXYobXlMaW5lcyhpKSwgIkNLQV9WQUxVRSBNVUxUSUxJTkVfT0NUQUwiKSBUaGVuDQogICAgIG15SW5zaWRlQ2VydCA9IFRSVUUNCkBAIC0xODcsNyArMjQ5LDcgQEAKICAgICBteUluc2lkZUxpY2Vuc2UgPSBUUlVFDQogICBFbmQgSWYNCiAgIElmIChteUluc2lkZUxpY2Vuc2UgPSBUUlVFKSBUaGVuDQotICAgIG15RmguV3JpdGUgbXlMaW5lcyhpKSAmIHZiTGYNCisgICAgbXlTdHJlYW0uV3JpdGVUZXh0IG15TGluZXMoaSkgJiB2YkxmDQogICAgIG15TGljZW5zZVRleHQgPSBteUxpY2Vuc2VUZXh0ICYgTWlkKG15TGluZXMoaSksIDIpICYgdmJMZg0KICAgRW5kIElmDQogICBJZiBJbnN0clJldihteUxpbmVzKGkpLCAiKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKioiKSBUaGVuDQpAQCAtMTk2LDI4ICsyNTgsNTQgQEAKICAgICAgIElmIE5vdCAoNiA9IG9ialNoZWxsLlBvcFVwKG15TGljZW5zZVRleHQgJiB2YkxmICYgXw0KICAgICAgICAgICAgICAgIkRvIHlvdSBhZ3JlZSB0byB0aGUgbGljZW5zZSBzaG93biBhYm92ZSAocmVxdWlyZWQgdG8gcHJvY2VlZCkgPyIsLCBfDQogICAgICAgICAgICAgICBteVNlbGYsIHZiUXVlc3Rpb24gKyB2Ylllc05vICsgdmJEZWZhdWx0QnV0dG9uMSkpIFRoZW4NCi0gICAgICAgIG15RmguQ2xvc2UNCisgICAgICAgIG15U3RyZWFtLkNsb3NlDQogICAgICAgICBvYmpGU08uRGVsZXRlRmlsZSBteUNhRmlsZSwgVFJVRQ0KICAgICAgICAgV1NjcmlwdC5RdWl0IDINCiAgICAgICBFbmQgSWYNCiAgICAgRW5kIElmDQogICBFbmQgSWYNCiBOZXh0DQotbXlGaC5DbG9zZQ0KKw0KKycgVG8gc3RvcCB0aGUgVVRGLTggQk9NIGZyb20gYmVpbmcgd3JpdHRlbiB0aGUgc3RyZWFtIGhhcyB0byBiZSBjb3BpZWQgYW5kDQorJyB0aGVuIHNhdmVkIGFzIGJpbmFyeS4NCitEaW0gbXlDb3B5DQorU2V0IG15Q29weSA9IENyZWF0ZU9iamVjdCgiQURPREIuU3RyZWFtIikNCitteUNvcHkuVHlwZSA9IGFkVHlwZUJpbmFyeQ0KK215Q29weS5PcGVuDQorbXlTdHJlYW0uUG9zaXRpb24gPSAzICcgU2tpcCBVVEYtOCBCT00NCitteVN0cmVhbS5Db3B5VG8gbXlDb3B5DQorbXlDb3B5LlNhdmVUb0ZpbGUgbXlDYUZpbGUsIGFkU2F2ZUNyZWF0ZU92ZXJXcml0ZQ0KK215Q29weS5DbG9zZQ0KK215U3RyZWFtLkNsb3NlDQorU2V0IG15Q29weSA9IE5vdGhpbmcNCitTZXQgbXlTdHJlYW0gPSBOb3RoaW5nDQorDQorJyBEb25lDQogb2JqU2hlbGwuUG9wVXAgIkRvbmUgKCIgJiBteU51bUNlcnRzICYgIiBDQSBjZXJ0cyBwcm9jZXNzZWQsICIgJiBteU51bVNraXBwZWQgJiBfDQogICAgICAgICAgICAgICAgIiB1bnRydXN0ZWQgc2tpcHBlZCkuIiwgMjAsIG15U2VsZiwgdmJJbmZvcm1hdGlvbg0KIFdTY3JpcHQuUXVpdCAwDQogDQotRnVuY3Rpb24gQ29udmVydEJpbmFyeURhdGEoYXJyQnl0ZXMpDQorRnVuY3Rpb24gQ29udmVydEJpbmFyeVRvVVRGOChhcnJCeXRlcykNCiAgIERpbSBvYmpTdHJlYW0NCiAgIFNldCBvYmpTdHJlYW0gPSBDcmVhdGVPYmplY3QoIkFET0RCLlN0cmVhbSIpDQogICBvYmpTdHJlYW0uT3Blbg0KLSAgb2JqU3RyZWFtLlR5cGUgPSAxDQorICBvYmpTdHJlYW0uVHlwZSA9IGFkVHlwZUJpbmFyeQ0KICAgb2JqU3RyZWFtLldyaXRlIGFyckJ5dGVzDQogICBvYmpTdHJlYW0uUG9zaXRpb24gPSAwDQotICBvYmpTdHJlYW0uVHlwZSA9IDINCi0gIG9ialN0cmVhbS5DaGFyc2V0ID0gImFzY2lpIg0KLSAgQ29udmVydEJpbmFyeURhdGEgPSBvYmpTdHJlYW0uUmVhZFRleHQNCisgIG9ialN0cmVhbS5UeXBlID0gYWRUeXBlVGV4dA0KKyAgb2JqU3RyZWFtLkNoYXJzZXQgPSAidXRmLTgiDQorICBDb252ZXJ0QmluYXJ5VG9VVEY4ID0gb2JqU3RyZWFtLlJlYWRUZXh0DQorICBTZXQgb2JqU3RyZWFtID0gTm90aGluZw0KK0VuZCBGdW5jdGlvbg0KKw0KK0Z1bmN0aW9uIFNhdmVCaW5hcnlEYXRhKGZpbGVuYW1lLCBkYXRhKQ0KKyAgRGltIG9ialN0cmVhbQ0KKyAgU2V0IG9ialN0cmVhbSA9IENyZWF0ZU9iamVjdCgiQURPREIuU3RyZWFtIikNCisgIG9ialN0cmVhbS5UeXBlID0gYWRUeXBlQmluYXJ5DQorICBvYmpTdHJlYW0uT3Blbg0KKyAgb2JqU3RyZWFtLldyaXRlIGRhdGENCisgIG9ialN0cmVhbS5TYXZlVG9GaWxlIGZpbGVuYW1lLCBhZFNhdmVDcmVhdGVPdmVyV3JpdGUNCisgIG9ialN0cmVhbS5DbG9zZQ0KICAgU2V0IG9ialN0cmVhbSA9IE5vdGhpbmcNCiBFbmQgRnVuY3Rpb24NCiANCkBAIC0yODMsNCArMzcxLDYxIEBACiAgIElmIE9uZUNoYXIgPSAiIiBUaGVuIE15QVNDID0gMCBFbHNlIE15QVNDID0gQXNjKE9uZUNoYXIpDQogRW5kIEZ1bmN0aW9uDQogDQorJyBSZXR1cm4gdGhlIGRhdGUgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHBlcmwgdG8gbWF0Y2ggbWstY2EtYnVuZGxlLnBsIG91dHB1dDoNCisnIFdlZCBTZXAgIDcgMDM6MTI6MDUgMjAxNg0KK0Z1bmN0aW9uIENvbnZlcnREYXRlVG9TdHJpbmcoaW5wdXQpDQorICBEaW0gb3V0cHV0DQorICBvdXRwdXQgPSBXZWVrRGF5TmFtZShXZWVrRGF5KGlucHV0KSwgVFJVRSkgJiAiICIgJiBfDQorICAgICAgICAgICBNb250aE5hbWUoTW9udGgoaW5wdXQpLCBUUlVFKSAmICIgIg0KKyAgSWYgKExlbihEYXkoaW5wdXQpKSA9IDEpIFRoZW4NCisgICAgb3V0cHV0ID0gb3V0cHV0ICYgIiAiDQorICBFbmQgSWYNCisgIG91dHB1dCA9IG91dHB1dCAmIF8NCisgICAgICAgICAgIERheShpbnB1dCkgJiAiICIgJiBfDQorICAgICAgICAgICBGb3JtYXREYXRlVGltZShpbnB1dCwgdmJTaG9ydFRpbWUpICYgIjoiDQorICBJZiAoTGVuKFNlY29uZChpbnB1dCkpID0gMSkgVGhlbg0KKyAgICBvdXRwdXQgPSBvdXRwdXQgJiAiMCINCisgIEVuZCBJZg0KKyAgb3V0cHV0ID0gb3V0cHV0ICYgXw0KKyAgICAgICAgICAgU2Vjb25kKGlucHV0KSAmICIgIiAmIF8NCisgICAgICAgICAgIFllYXIoaW5wdXQpDQorICBDb252ZXJ0RGF0ZVRvU3RyaW5nID0gb3V0cHV0DQorRW5kIEZ1bmN0aW9uDQogDQorJyBDb252ZXJ0IGxvY2FsIERhdGUgdG8gVVRDLiBNaWNyb3NvZnQgc2F5czoNCisnIFVzZSBXaW4zMl9Db21wdXRlclN5c3RlbSBDdXJyZW50VGltZVpvbmUgcHJvcGVydHksIGJlY2F1c2UgaXQgYXV0b21hdGljYWxseQ0KKycgYWRqdXN0cyB0aGUgVGltZSBab25lIGJpYXMgZm9yIGRheWxpZ2h0IHNhdmluZyB0aW1lOyBXaW4zMl9UaW1lIFpvbmUgQmlhcw0KKycgcHJvcGVydHkgZG9lcyBub3QuDQorJyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY5NjAxNS5hc3B4DQorRnVuY3Rpb24gTG9jYWxEYXRlVG9VVEMobG9jYWxkYXRlKQ0KKyAgRGltIGl0ZW0sIG9mZnNldA0KKyAgRm9yIEVhY2ggaXRlbSBJbiBHZXRPYmplY3QoIndpbm1nbXRzOiIpLkluc3RhbmNlc09mKCJXaW4zMl9Db21wdXRlclN5c3RlbSIpDQorICAgIG9mZnNldCA9IGl0ZW0uQ3VycmVudFRpbWVab25lICcgdGhlIG9mZnNldCBpbiBtaW51dGVzDQorICBOZXh0DQorICBJZiAob2Zmc2V0IDwgMCkgVGhlbg0KKyAgICBMb2NhbERhdGVUb1VUQyA9IERhdGVBZGQoIm4iLCAgQUJTKG9mZnNldCksIGxvY2FsZGF0ZSkNCisgIEVsc2UNCisgICAgTG9jYWxEYXRlVG9VVEMgPSBEYXRlQWRkKCJuIiwgLUFCUyhvZmZzZXQpLCBsb2NhbGRhdGUpDQorICBFbmQgSWYNCisgICdvYmpTaGVsbC5Qb3BVcCBMb2NhbERhdGVUb1VUQw0KK0VuZCBGdW5jdGlvbg0KKw0KK0Z1bmN0aW9uIEZpbGVTSEEyNTYoZmlsZW5hbWUpDQorICBEaW0gY21kLCBydmFsLCB0bXBPdXQsIHRtcEZoDQorICBpZiAobXlVc2VPcGVuU1NMID0gVFJVRSkgVGhlbg0KKyAgICB0bXBPdXQgPSBvYmpGU08uR2V0U3BlY2lhbEZvbGRlcigyKS5QYXRoICYgIlwiICYgb2JqRlNPLkdldFRlbXBOYW1lDQorICAgIGNtZCA9ICIiIiIgJiBteU9wZW5TU0wgJiAiIiIgZGdzdCAtciAtc2hhMjU2IC1vdXQgIiIiICYgdG1wT3V0ICYgIiIiICIiIiAmIGZpbGVuYW1lICYgIiIiIg0KKyAgICBydmFsID0gb2JqU2hlbGwuUnVuKGNtZCwgMCwgVFJVRSkNCisgICAgSWYgTm90IChydmFsID0gMCkgVGhlbg0KKyAgICAgIE1zZ0JveCgiRmFpbGVkIHRvIGdldCBzaGEyNTYgb2YgIiIiICYgZmlsZW5hbWUgJiAiIiIgd2l0aCBPcGVuU1NMIGNvbW1hbmRsaW5lISIpLCB2YkNyaXRpY2FsLCBteVNlbGYNCisgICAgICBvYmpGU08uRGVsZXRlRmlsZSB0bXBPdXQsIFRSVUUNCisgICAgICBXU2NyaXB0LlF1aXQgMw0KKyAgICBFbmQgSWYNCisgICAgU2V0IHRtcEZoID0gb2JqRlNPLk9wZW5UZXh0RmlsZSh0bXBPdXQsIDEpDQorICAgIEZpbGVTSEEyNTYgPSBSZWdFeHByRmlyc3QoIl4oWzAtOWEtZl17NjR9KSAuKyIsIHRtcEZoLlJlYWRBbGwpDQorICAgIHRtcEZoLkNsb3NlDQorICAgIG9iakZTTy5EZWxldGVGaWxlIHRtcE91dCwgVFJVRQ0KKyAgRWxzZQ0KKyAgICBGaWxlU0hBMjU2ID0gIiINCisgIEVuZCBJZg0KK0VuZCBGdW5jdGlvbg0KZGlmZiAtLWdpdCBhL2xpYi9tcHJpbnRmLmMgYi9saWIvbXByaW50Zi5jCmluZGV4IDczZjg1NGIuLmUxYWQ1MzcgMTAwNjQ0Ci0tLSBhL2xpYi9tcHJpbnRmLmMKKysrIGIvbGliL21wcmludGYuYwpAQCAtMjI3LDEwICsyMjcsMTIgQEAKICAqIENyZWF0ZSBhbiBpbmRleCB3aXRoIHRoZSB0eXBlIG9mIGVhY2ggcGFyYW1ldGVyIGVudHJ5IGFuZCBpdHMKICAqIHZhbHVlIChtYXkgdmFyeSBpbiBzaXplKQogICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBsb25nIGRwcmludGZfUGFzczEoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9zdGFja190ICp2dG8sIGNoYXIgKiplbmRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJnbGlzdCkKK3N0YXRpYyBpbnQgZHByaW50Zl9QYXNzMShjb25zdCBjaGFyICpmb3JtYXQsIHZhX3N0YWNrX3QgKnZ0bywgY2hhciAqKmVuZHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ2xpc3QpCiB7CiAgIGNoYXIgKmZtdCA9IChjaGFyICopZm9ybWF0OwogICBpbnQgcGFyYW1fbnVtID0gMDsKQEAgLTMwMSw3ICszMDMsNiBAQAogICAgICAgICAgIGZsYWdzIHw9IEZMQUdTX0FMVDsKICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgZmxhZ3MgfD0gRkxBR1NfUFJFQzsKICAgICAgICAgICBpZignKicgPT0gKmZtdCkgewogICAgICAgICAgICAgLyogVGhlIHByZWNpc2lvbiBpcyBwaWNrZWQgZnJvbSBhIHNwZWNpZmllZCBwYXJhbWV0ZXIgKi8KIApAQCAtMzkzLDYgKzM5NCwxMCBAQAogCiAgICAgICBpID0gdGhpc19wYXJhbSAtIDE7CiAKKyAgICAgIGlmKChpIDwgMCkgfHwgKGkgPj0gTUFYX1BBUkFNRVRFUlMpKQorICAgICAgICAvKiBvdXQgb2YgYWxsb3dlZCByYW5nZSAqLworICAgICAgICByZXR1cm4gMTsKKwogICAgICAgc3dpdGNoICgqZm10KSB7CiAgICAgICBjYXNlICdTJzoKICAgICAgICAgZmxhZ3MgfD0gRkxBR1NfQUxUOwpAQCAtNTQ5LDcgKzU1NCw3IEBACiAgICAgfQogICB9CiAKLSAgcmV0dXJuIG1heF9wYXJhbTsKKyAgcmV0dXJuIDA7CiAKIH0KIApAQCAtNTg3LDcgKzU5Miw4IEBACiAgIGNoYXIgKndvcmtlbmQgPSAmd29ya1tzaXplb2Yod29yaykgLSAyXTsKIAogICAvKiBEbyB0aGUgYWN0dWFsICUtY29kZSBwYXJzaW5nICovCi0gIGRwcmludGZfUGFzczEoZm9ybWF0LCB2dG8sIGVuZHBvcywgYXBfc2F2ZSk7CisgIGlmKGRwcmludGZfUGFzczEoZm9ybWF0LCB2dG8sIGVuZHBvcywgYXBfc2F2ZSkpCisgICAgcmV0dXJuIC0xOwogCiAgIGVuZCA9ICZlbmRwb3NbMF07IC8qIHRoZSBpbml0aWFsIGVuZC1wb3NpdGlvbiBmcm9tIHRoZSBsaXN0IGRwcmludGZfUGFzczEoKQogICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGZvciB1cyAqLwpAQCAtOTkyLDcgKzk5OCw3IEBACiAgIGluZm8ubWF4ID0gbWF4bGVuZ3RoOwogCiAgIHJldGNvZGUgPSBkcHJpbnRmX2Zvcm1hdGYoJmluZm8sIGFkZGJ5dGVyLCBmb3JtYXQsIGFwX3NhdmUpOwotICBpZihpbmZvLm1heCkgeworICBpZigocmV0Y29kZSAhPSAtMSkgJiYgaW5mby5tYXgpIHsKICAgICAvKiB3ZSB0ZXJtaW5hdGUgdGhpcyB3aXRoIGEgemVybyBieXRlICovCiAgICAgaWYoaW5mby5tYXggPT0gaW5mby5sZW5ndGgpCiAgICAgICAvKiB3ZSdyZSBhdCBtYXhpbXVtLCBzY3JhcCB0aGUgbGFzdCBsZXR0ZXIgKi8KQEAgLTEwMjksMTYgKzEwMzUsMTkgQEAKICAgICBpbmZvcC0+bGVuID0wOwogICB9CiAgIGVsc2UgaWYoaW5mb3AtPmxlbisxID49IGluZm9wLT5hbGxvYykgewotICAgIGNoYXIgKm5ld3B0cjsKKyAgICBjaGFyICpuZXdwdHIgPSBOVUxMOworICAgIHNpemVfdCBuZXdzaXplID0gaW5mb3AtPmFsbG9jKjI7CiAKLSAgICBuZXdwdHIgPSByZWFsbG9jKGluZm9wLT5idWZmZXIsIGluZm9wLT5hbGxvYyoyKTsKKyAgICAvKiBkZXRlY3Qgd3JhcC1hcm91bmQgb3Igb3RoZXIgb3ZlcmZsb3cgcHJvYmxlbXMgKi8KKyAgICBpZihuZXdzaXplID4gaW5mb3AtPmFsbG9jKQorICAgICAgbmV3cHRyID0gcmVhbGxvYyhpbmZvcC0+YnVmZmVyLCBuZXdzaXplKTsKIAogICAgIGlmKCFuZXdwdHIpIHsKICAgICAgIGluZm9wLT5mYWlsID0gMTsKICAgICAgIHJldHVybiAtMTsgLyogZmFpbCAqLwogICAgIH0KICAgICBpbmZvcC0+YnVmZmVyID0gbmV3cHRyOwotICAgIGluZm9wLT5hbGxvYyAqPSAyOworICAgIGluZm9wLT5hbGxvYyA9IG5ld3NpemU7CiAgIH0KIAogICBpbmZvcC0+YnVmZmVyWyBpbmZvcC0+bGVuIF0gPSBvdXRjOwpkaWZmIC0tZ2l0IGEvbGliL211bHRpLmMgYi9saWIvbXVsdGkuYwppbmRleCA4YmI5MzY2Li45NTBiNjAwIDEwMDY0NAotLS0gYS9saWIvbXVsdGkuYworKysgYi9saWIvbXVsdGkuYwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgIm11bHRpaGFuZGxlLmgiCiAjaW5jbHVkZSAicGlwZWxpbmUuaCIKICNpbmNsdWRlICJzaWdwaXBlLmgiCisjaW5jbHVkZSAidnRscy92dGxzLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKQEAgLTQ0Miw3ICs0NDQsNyBAQAogICAgICBzb2NrZXRzIHRoYXQgdGltZS1vdXQgb3IgaGF2ZSBhY3Rpb25zIHdpbGwgYmUgZGVhbHQgd2l0aC4gU2luY2UgdGhpcwogICAgICBoYW5kbGUgaGFzIG5vIGFjdGlvbiB5ZXQsIHdlIG1ha2Ugc3VyZSBpdCB0aW1lcyBvdXQgdG8gZ2V0IHRoaW5ncyB0bwogICAgICBoYXBwZW4uICovCi0gIEN1cmxfZXhwaXJlKGRhdGEsIDEpOworICBDdXJsX2V4cGlyZShkYXRhLCAwKTsKIAogICAvKiBpbmNyZWFzZSB0aGUgbm9kZS1jb3VudGVyICovCiAgIG11bHRpLT5udW1fZWFzeSsrOwpAQCAtNDYyLDYgKzQ2NCwxNCBAQAogICAgICBoYW5kbGUgaXMgYWRkZWQgKi8KICAgbWVtc2V0KCZtdWx0aS0+dGltZXJfbGFzdGNhbGwsIDAsIHNpemVvZihtdWx0aS0+dGltZXJfbGFzdGNhbGwpKTsKIAorICAvKiBUaGUgY2xvc3VyZSBoYW5kbGUgb25seSBldmVyIGhhcyBkZWZhdWx0IHRpbWVvdXRzIHNldC4gVG8gaW1wcm92ZSB0aGUKKyAgICAgc3RhdGUgc29tZXdoYXQgd2UgY2xvbmUgdGhlIHRpbWVvdXRzIGZyb20gZWFjaCBhZGRlZCBoYW5kbGUgc28gdGhhdCB0aGUKKyAgICAgY2xvc3VyZSBoYW5kbGUgYWx3YXlzIGhhcyB0aGUgc2FtZSB0aW1lb3V0cyBhcyB0aGUgbW9zdCByZWNlbnRseSBhZGRlZAorICAgICBlYXN5IGhhbmRsZS4gKi8KKyAgbXVsdGktPmNsb3N1cmVfaGFuZGxlLT5zZXQudGltZW91dCA9IGRhdGEtPnNldC50aW1lb3V0OworICBtdWx0aS0+Y2xvc3VyZV9oYW5kbGUtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dCA9CisgICAgZGF0YS0+c2V0LnNlcnZlcl9yZXNwb25zZV90aW1lb3V0OworCiAgIHVwZGF0ZV90aW1lcihtdWx0aSk7CiAgIHJldHVybiBDVVJMTV9PSzsKIH0KQEAgLTU2OSwxMiArNTc5LDEyIEBACiAgICAgICByZXN1bHQgPSBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwogICB9CiAKLSAgaWYoKCFwcmVtYXR1cmUgJiYKLSAgICAgIGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZSAhPSAwICYmCi0gICAgICAhZGF0YS0+c2V0LnJldXNlX2ZvcmJpZCAmJgotICAgICAgIWNvbm4tPmJpdHMuY2xvc2UpKSB7CisgIGlmKGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZSAhPSAwICYmCisgICAgICFkYXRhLT5zZXQucmV1c2VfZm9yYmlkICYmCisgICAgICFjb25uLT5iaXRzLmNsb3NlKSB7CiAgICAgLyogU3RvcCBpZiBwaXBlbGluZSBpcyBub3QgZW1wdHkgYW5kIHdlIGRvIG5vdCBoYXZlIHRvIGNsb3NlCiAgICAgICAgY29ubmVjdGlvbi4gKi8KKyAgICBkYXRhLT5lYXN5X2Nvbm4gPSBOVUxMOwogICAgIERFQlVHRihpbmZvZihkYXRhLCAiQ29ubmVjdGlvbiBzdGlsbCBpbiB1c2UsIG5vIG1vcmUgbXVsdGlfZG9uZSBub3chXG4iKSk7CiAgICAgcmV0dXJuIENVUkxFX09LOwogICB9CkBAIC02ODUsNyArNjk1LDcgQEAKICAgICAvKiBJZiB0aGUgaGFuZGxlIGlzIGluIGEgcGlwZWxpbmUgYW5kIGhhcyBzdGFydGVkIHNlbmRpbmcgb2ZmIGl0cwogICAgICAgIHJlcXVlc3QgYnV0IG5vdCByZWNlaXZlZCBpdHMgcmVzcG9uc2UgeWV0LCB3ZSBuZWVkIHRvIGNsb3NlCiAgICAgICAgY29ubmVjdGlvbi4gKi8KLSAgICBjb25uY2xvc2UoZGF0YS0+ZWFzeV9jb25uLCAiUmVtb3ZlZCB3aXRoIHBhcnRpYWwgcmVzcG9uc2UiKTsKKyAgICBzdHJlYW1jbG9zZShkYXRhLT5lYXN5X2Nvbm4sICJSZW1vdmVkIHdpdGggcGFydGlhbCByZXNwb25zZSIpOwogICAgIC8qIFNldCBjb25uZWN0aW9uIG93bmVyIHNvIHRoYXQgdGhlIERPTkUgZnVuY3Rpb24gY2xvc2VzIGl0LiAgV2UgY2FuCiAgICAgICAgc2FmZWx5IGRvIHRoaXMgaGVyZSBzaW5jZSBjb25uZWN0aW9uIGlzIGtpbGxlZC4gKi8KICAgICBkYXRhLT5lYXN5X2Nvbm4tPmRhdGEgPSBlYXN5OwpAQCAtNjk1LDcgKzcwNSw3IEBACiAgIC8qIFRoZSB0aW1lciBtdXN0IGJlIHNodXQgZG93biBiZWZvcmUgZGF0YS0+bXVsdGkgaXMgc2V0IHRvIE5VTEwsCiAgICAgIGVsc2UgdGhlIHRpbWVub2RlIHdpbGwgcmVtYWluIGluIHRoZSBzcGxheSB0cmVlIGFmdGVyCiAgICAgIGN1cmxfZWFzeV9jbGVhbnVwIGlzIGNhbGxlZC4gKi8KLSAgQ3VybF9leHBpcmUoZGF0YSwgMCk7CisgIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOwogCiAgIGlmKGRhdGEtPmRucy5ob3N0Y2FjaGV0eXBlID09IEhDQUNIRV9NVUxUSSkgewogICAgIC8qIHN0b3AgdXNpbmcgdGhlIG11bHRpIGhhbmRsZSdzIEROUyBjYWNoZSAqLwpAQCAtODAzLDYgKzgxMywxMSBAQAogICBpZighbnVtc29ja3MpCiAgICAgcmV0dXJuIEdFVFNPQ0tfQkxBTks7CiAKKyNpZmRlZiBVU0VfU1NMCisgIGlmKENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKCkpCisgICAgcmV0dXJuIEN1cmxfc3NsX2dldHNvY2soY29ubiwgc29jaywgbnVtc29ja3MpOworI2VuZGlmCisKICAgZm9yKGk9MDsgaTwyOyBpKyspIHsKICAgICBpZihjb25uLT50ZW1wc29ja1tpXSAhPSBDVVJMX1NPQ0tFVF9CQUQpIHsKICAgICAgIHNvY2tbc10gPSBjb25uLT50ZW1wc29ja1tpXTsKQEAgLTEyOTEsMTQgKzEzMDYsMTYgQEAKICAgQ1VSTE1jb2RlIHJjOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3RydWN0IFNpbmdsZVJlcXVlc3QgKms7Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZV90IHRpbWVvdXRfbXM7CiAgIGludCBjb250cm9sOwogCiAgIGlmKCFHT09EX0VBU1lfSEFORExFKGRhdGEpKQogICAgIHJldHVybiBDVVJMTV9CQURfRUFTWV9IQU5ETEU7CiAKICAgZG8gewotICAgIGJvb2wgZGlzY29ubmVjdF9jb25uID0gRkFMU0U7CisgICAgLyogQSAic3RyZWFtIiBoZXJlIGlzIGEgbG9naWNhbCBzdHJlYW0gaWYgdGhlIHByb3RvY29sIGNhbiBoYW5kbGUgdGhhdAorICAgICAgIChIVFRQLzIpLCBvciB0aGUgZnVsbCBjb25uZWN0aW9uIGZvciBvbGRlciBwcm90b2NvbHMgKi8KKyAgICBib29sIHN0cmVhbV9lcnJvciA9IEZBTFNFOwogICAgIHJjID0gQ1VSTE1fT0s7CiAKICAgICAvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgcGlwZSBicmVha3MsIGkuZS4sIHRoZSBjb25uZWN0aW9uCkBAIC0xMzc2LDggKzEzOTMsOCBAQAogCiAgICAgICAgIC8qIEZvcmNlIGNvbm5lY3Rpb24gY2xvc2VkIGlmIHRoZSBjb25uZWN0aW9uIGhhcyBpbmRlZWQgYmVlbiB1c2VkICovCiAgICAgICAgIGlmKGRhdGEtPm1zdGF0ZSA+IENVUkxNX1NUQVRFX0RPKSB7Ci0gICAgICAgICAgY29ubmNsb3NlKGRhdGEtPmVhc3lfY29ubiwgIkRpc2Nvbm5lY3RlZCB3aXRoIHBlbmRpbmcgZGF0YSIpOwotICAgICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICAgICAgc3RyZWFtY2xvc2UoZGF0YS0+ZWFzeV9jb25uLCAiRGlzY29ubmVjdGVkIHdpdGggcGVuZGluZyBkYXRhIik7CisgICAgICAgICAgc3RyZWFtX2Vycm9yID0gVFJVRTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBDVVJMRV9PUEVSQVRJT05fVElNRURPVVQ7CiAgICAgICAgICh2b2lkKW11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBUUlVFKTsKQEAgLTE0MjYsNyArMTQ0Myw3IEBACiAgICAgICAgIC8qIEFkZCB0aGlzIGhhbmRsZSB0byB0aGUgc2VuZCBvciBwZW5kIHBpcGVsaW5lICovCiAgICAgICAgIHJlc3VsdCA9IEN1cmxfYWRkX2hhbmRsZV90b19waXBlbGluZShkYXRhLCBkYXRhLT5lYXN5X2Nvbm4pOwogICAgICAgICBpZihyZXN1bHQpCi0gICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICBzdHJlYW1fZXJyb3IgPSBUUlVFOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZihhc3luYykKICAgICAgICAgICAgIC8qIFdlJ3JlIG5vdyB3YWl0aW5nIGZvciBhbiBhc3luY2hyb25vdXMgbmFtZSBsb29rdXAgKi8KQEAgLTE1MTgsNyArMTUzNSw3IEBACiAKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCi0gICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTE1MzcsNyArMTU1NCw5IEBACiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfQ09OTkVDVCk7CiAgICAgICB9CiAgICAgICBlbHNlIGlmKCFyZXN1bHQpIHsKLSAgICAgICAgaWYoZGF0YS0+ZWFzeV9jb25uLT50dW5uZWxfc3RhdGVbRklSU1RTT0NLRVRdID09IFRVTk5FTF9DT01QTEVURSkgeworICAgICAgICBpZigoZGF0YS0+ZWFzeV9jb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSAhPSBDVVJMUFJPWFlfSFRUUFMgfHwKKyAgICAgICAgICAgZGF0YS0+ZWFzeV9jb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKSAmJgorICAgICAgICAgICAoZGF0YS0+ZWFzeV9jb25uLT50dW5uZWxfc3RhdGVbRklSU1RTT0NLRVRdICE9IFRVTk5FTF9DT05ORUNUKSkgewogICAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwogICAgICAgICAgIC8qIGluaXRpYXRlIHByb3RvY29sIGNvbm5lY3QgcGhhc2UgKi8KICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1NFTkRQUk9UT0NPTk5FQ1QpOwpAQCAtMTU1MCw2ICsxNTY5LDE0IEBACiAgICAgICAvKiBhd2FpdGluZyBhIGNvbXBsZXRpb24gb2YgYW4gYXN5bmNoIFRDUCBjb25uZWN0ICovCiAgICAgICByZXN1bHQgPSBDdXJsX2lzX2Nvbm5lY3RlZChkYXRhLT5lYXN5X2Nvbm4sIEZJUlNUU09DS0VULCAmY29ubmVjdGVkKTsKICAgICAgIGlmKGNvbm5lY3RlZCAmJiAhcmVzdWx0KSB7CisjaWZuZGVmIENVUkxfRElTQUJMRV9IVFRQCisgICAgICAgIGlmKChkYXRhLT5lYXN5X2Nvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUyAmJgorICAgICAgICAgICAgIWRhdGEtPmVhc3lfY29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW0ZJUlNUU09DS0VUXSkgfHwKKyAgICAgICAgICAgIChkYXRhLT5lYXN5X2Nvbm4tPnR1bm5lbF9zdGF0ZVtGSVJTVFNPQ0tFVF0gPT0gVFVOTkVMX0NPTk5FQ1QpKSB7CisgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwogICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIGRhdGEtPmVhc3lfY29ubi0+Yml0cy50dW5uZWxfcHJveHk/CiAgICAgICAgICAgICAgICAgICAgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVDoKQEAgLTE1NTgsNyArMTU4NSw3IEBACiAgICAgICBlbHNlIGlmKHJlc3VsdCkgewogICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCiAgICAgICAgIC8qIEp1c3QgYnJlYWssIHRoZSBjbGVhbmluZyB1cCBpcyBoYW5kbGVkIGFsbCBpbiBvbmUgcGxhY2UgKi8KLSAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgc3RyZWFtX2Vycm9yID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTE1NzgsNyArMTYwNSw3IEBACiAgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CiAgICAgICAgIG11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBUUlVFKTsKLSAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgc3RyZWFtX2Vycm9yID0gVFJVRTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC0xNTk1LDcgKzE2MjIsNyBAQAogICAgICAgICAvKiBmYWlsdXJlIGRldGVjdGVkICovCiAgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOwogICAgICAgICBtdWx0aV9kb25lKCZkYXRhLT5lYXN5X2Nvbm4sIHJlc3VsdCwgVFJVRSk7Ci0gICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMTY3MCw3ICsxNjk3LDcgQEAKICAgICAgICAgICBpZihkcmMpIHsKICAgICAgICAgICAgIC8qIGEgZmFpbHVyZSBoZXJlIHByZXR0eSBtdWNoIGltcGxpZXMgYW4gb3V0IG9mIG1lbW9yeSAqLwogICAgICAgICAgICAgcmVzdWx0ID0gZHJjOwotICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHJ5ID0gKG5ld3VybCk/VFJVRTpGQUxTRTsKQEAgLTE3MDMsNyArMTczMCw3IEBACiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyogSGF2ZSBlcnJvciBoYW5kbGVyIGRpc2Nvbm5lY3QgY29ubiBpZiB3ZSBjYW4ndCByZXRyeSAqLwotICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICAgICAgICBmcmVlKG5ld3VybCk7CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzEyLDcgKzE3MzksNyBAQAogICAgICAgICAgIEN1cmxfcG9zdHRyYW5zZmVyKGRhdGEpOwogICAgICAgICAgIGlmKGRhdGEtPmVhc3lfY29ubikKICAgICAgICAgICAgIG11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICBzdHJlYW1fZXJyb3IgPSBUUlVFOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTE3MzQsNyArMTc2MSw3IEBACiAgICAgICAgIC8qIGZhaWx1cmUgZGV0ZWN0ZWQgKi8KICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7CiAgICAgICAgIG11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgIGRpc2Nvbm5lY3RfY29ubiA9IFRSVUU7CisgICAgICAgIHN0cmVhbV9lcnJvciA9IFRSVUU7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMTc2Myw3ICsxNzkwLDcgQEAKICAgICAgICAgLyogZmFpbHVyZSBkZXRlY3RlZCAqLwogICAgICAgICBDdXJsX3Bvc3R0cmFuc2ZlcihkYXRhKTsKICAgICAgICAgbXVsdGlfZG9uZSgmZGF0YS0+ZWFzeV9jb25uLCByZXN1bHQsIEZBTFNFKTsKLSAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgc3RyZWFtX2Vycm9yID0gVFJVRTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC0xODAwLDkgKzE4MjcsMTcgQEAKICAgICAgICAgcmVzdWx0ID0gQ3VybF9zcGVlZGNoZWNrKGRhdGEsIG5vdyk7CiAKICAgICAgIGlmKCggKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA9PSAwKSB8fAotICAgICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA8IGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCkpICAmJgorICAgICAgICAgICAoQ3VybF9wZ3JzTGltaXRXYWl0VGltZShkYXRhLT5wcm9ncmVzcy51cGxvYWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudWxfbGltaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm1heF9zZW5kX3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy51bF9saW1pdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93KSA8PSAwKSkgICYmCiAgICAgICAgICAoIChkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQgPT0gMCkgfHwKLSAgICAgICAgICAgKGRhdGEtPnByb2dyZXNzLmRsc3BlZWQgPCBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQpKSkKKyAgICAgICAgICAgKEN1cmxfcGdyc0xpbWl0V2FpdFRpbWUoZGF0YS0+cHJvZ3Jlc3MuZG93bmxvYWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93KSA8PSAwKSkpCiAgICAgICAgIG11bHRpc3RhdGUoZGF0YSwgQ1VSTE1fU1RBVEVfUEVSRk9STSk7CiAgICAgICBicmVhazsKIApAQCAtMTgxMCw0MSArMTg0NSwzOCBAQAogICAgIHsKICAgICAgIGNoYXIgKm5ld3VybCA9IE5VTEw7CiAgICAgICBib29sIHJldHJ5ID0gRkFMU0U7CisgICAgICBib29sIGNvbWViYWNrID0gRkFMU0U7CiAKICAgICAgIC8qIGNoZWNrIGlmIG92ZXIgc2VuZCBzcGVlZCAqLwotICAgICAgaWYoKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA+IDApICYmCi0gICAgICAgICAoZGF0YS0+cHJvZ3Jlc3MudWxzcGVlZCA+IGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCkpIHsKLSAgICAgICAgaW50IGJ1ZmZlcnNpemU7Ci0KLSAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9UT09GQVNUKTsKLQotICAgICAgICAvKiBjYWxjdWxhdGUgdXBsb2FkIHJhdGUtbGltaXRhdGlvbiB0aW1lb3V0LiAqLwotICAgICAgICBidWZmZXJzaXplID0gKGludCkoZGF0YS0+c2V0LmJ1ZmZlcl9zaXplID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5idWZmZXJfc2l6ZSA6IEJVRlNJWkUpOwotICAgICAgICB0aW1lb3V0X21zID0gQ3VybF9zbGVlcF90aW1lKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy51bHNwZWVkLCBidWZmZXJzaXplKTsKLSAgICAgICAgQ3VybF9leHBpcmVfbGF0ZXN0KGRhdGEsIHRpbWVvdXRfbXMpOwotICAgICAgICBicmVhazsKKyAgICAgIGlmKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA+IDApIHsKKyAgICAgICAgdGltZW91dF9tcyA9IEN1cmxfcGdyc0xpbWl0V2FpdFRpbWUoZGF0YS0+cHJvZ3Jlc3MudXBsb2FkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsX2xpbWl0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MudWxfbGltaXRfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdyk7CisgICAgICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9UT09GQVNUKTsKKyAgICAgICAgICBDdXJsX2V4cGlyZV9sYXRlc3QoZGF0YSwgdGltZW91dF9tcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgLyogY2hlY2sgaWYgb3ZlciByZWN2IHNwZWVkICovCi0gICAgICBpZigoZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkID4gMCkgJiYKLSAgICAgICAgIChkYXRhLT5wcm9ncmVzcy5kbHNwZWVkID4gZGF0YS0+c2V0Lm1heF9yZWN2X3NwZWVkKSkgewotICAgICAgICBpbnQgYnVmZmVyc2l6ZTsKLQotICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX1RPT0ZBU1QpOwotCi0gICAgICAgIC8qIENhbGN1bGF0ZSBkb3dubG9hZCByYXRlLWxpbWl0YXRpb24gdGltZW91dC4gKi8KLSAgICAgICAgYnVmZmVyc2l6ZSA9IChpbnQpKGRhdGEtPnNldC5idWZmZXJfc2l6ZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuYnVmZmVyX3NpemUgOiBCVUZTSVpFKTsKLSAgICAgICAgdGltZW91dF9tcyA9IEN1cmxfc2xlZXBfdGltZShkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MuZGxzcGVlZCwgYnVmZmVyc2l6ZSk7Ci0gICAgICAgIEN1cmxfZXhwaXJlX2xhdGVzdChkYXRhLCB0aW1lb3V0X21zKTsKLSAgICAgICAgYnJlYWs7CisgICAgICBpZihkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQgPiAwKSB7CisgICAgICAgIHRpbWVvdXRfbXMgPSBDdXJsX3BncnNMaW1pdFdhaXRUaW1lKGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLmRsX2xpbWl0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5tYXhfcmVjdl9zcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdyk7CisgICAgICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7CisgICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCBDVVJMTV9TVEFURV9UT09GQVNUKTsKKyAgICAgICAgICBDdXJsX2V4cGlyZV9sYXRlc3QoZGF0YSwgdGltZW91dF9tcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgLyogcmVhZC93cml0ZSBkYXRhIGlmIGl0IGlzIHJlYWR5IHRvIGRvIHNvICovCi0gICAgICByZXN1bHQgPSBDdXJsX3JlYWR3cml0ZShkYXRhLT5lYXN5X2Nvbm4sIGRhdGEsICZkb25lKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfcmVhZHdyaXRlKGRhdGEtPmVhc3lfY29ubiwgZGF0YSwgJmRvbmUsICZjb21lYmFjayk7CiAKICAgICAgIGsgPSAmZGF0YS0+cmVxOwogCkBAIC0xODg0LDEwICsxOTE2LDEwIEBACiAKICAgICAgICAgaWYoIShkYXRhLT5lYXN5X2Nvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9EVUFMKSAmJgogICAgICAgICAgICByZXN1bHQgIT0gQ1VSTEVfSFRUUDJfU1RSRUFNKQotICAgICAgICAgIGNvbm5jbG9zZShkYXRhLT5lYXN5X2Nvbm4sICJUcmFuc2ZlciByZXR1cm5lZCBlcnJvciIpOworICAgICAgICAgIHN0cmVhbWNsb3NlKGRhdGEtPmVhc3lfY29ubiwgIlRyYW5zZmVyIHJldHVybmVkIGVycm9yIik7CiAKICAgICAgICAgQ3VybF9wb3N0dHJhbnNmZXIoZGF0YSk7Ci0gICAgICAgIG11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBGQUxTRSk7CisgICAgICAgIG11bHRpX2RvbmUoJmRhdGEtPmVhc3lfY29ubiwgcmVzdWx0LCBUUlVFKTsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoZG9uZSkgewogICAgICAgICBmb2xsb3d0eXBlIGZvbGxvdz1GT0xMT1dfTk9ORTsKQEAgLTE5MDAsNyArMTkzMiw3IEBACiAKICAgICAgICAgLyogZXhwaXJlIHRoZSBuZXcgcmVjZWl2aW5nIHBpcGVsaW5lIGhlYWQgKi8KICAgICAgICAgaWYoZGF0YS0+ZWFzeV9jb25uLT5yZWN2X3BpcGUtPmhlYWQpCi0gICAgICAgICAgQ3VybF9leHBpcmVfbGF0ZXN0KGRhdGEtPmVhc3lfY29ubi0+cmVjdl9waXBlLT5oZWFkLT5wdHIsIDEpOworICAgICAgICAgIEN1cmxfZXhwaXJlX2xhdGVzdChkYXRhLT5lYXN5X2Nvbm4tPnJlY3ZfcGlwZS0+aGVhZC0+cHRyLCAwKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB3ZSBjYW4gbW92ZSBwZW5kaW5nIHJlcXVlc3RzIHRvIHNlbmQgcGlwZSAqLwogICAgICAgICBDdXJsX211bHRpX3Byb2Nlc3NfcGVuZGluZ19oYW5kbGVzKG11bHRpKTsKQEAgLTE5NDMsMTMgKzE5NzUsMTUgQEAKICAgICAgICAgICAgIGlmKCFyZXN1bHQpCiAgICAgICAgICAgICAgIG5ld3VybCA9IE5VTEw7IC8qIGFsbG9jYXRpb24gd2FzIGhhbmRlZCBvdmVyIEN1cmxfZm9sbG93KCkgKi8KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZGlzY29ubmVjdF9jb25uID0gVFJVRTsKKyAgICAgICAgICAgICAgc3RyZWFtX2Vycm9yID0gVFJVRTsKICAgICAgICAgICB9CiAKICAgICAgICAgICBtdWx0aXN0YXRlKGRhdGEsIENVUkxNX1NUQVRFX0RPTkUpOwogICAgICAgICAgIHJjID0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOwogICAgICAgICB9CiAgICAgICB9CisgICAgICBlbHNlIGlmKGNvbWViYWNrKQorICAgICAgICByYyA9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STTsKIAogICAgICAgZnJlZShuZXd1cmwpOwogICAgICAgYnJlYWs7CkBAIC0yMDA4LDcgKzIwNDIsNyBAQAogICAgICAgICAgdGhhdCBjb3VsZCBiZSBmcmVlZCBhbnl0aW1lICovCiAgICAgICBkYXRhLT5lYXN5X2Nvbm4gPSBOVUxMOwogCi0gICAgICBDdXJsX2V4cGlyZShkYXRhLCAwKTsgLyogc3RvcCBhbGwgdGltZXJzICovCisgICAgICBDdXJsX2V4cGlyZV9jbGVhcihkYXRhKTsgLyogc3RvcCBhbGwgdGltZXJzICovCiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1VSTE1fU1RBVEVfTVNHU0VOVDoKQEAgLTIwNDIsNyArMjA3Niw3IEBACiAgICAgICAgICAgQ3VybF9yZW1vdmVIYW5kbGVGcm9tUGlwZWxpbmUoZGF0YSwgZGF0YS0+ZWFzeV9jb25uLT5zZW5kX3BpcGUpOwogICAgICAgICAgIEN1cmxfcmVtb3ZlSGFuZGxlRnJvbVBpcGVsaW5lKGRhdGEsIGRhdGEtPmVhc3lfY29ubi0+cmVjdl9waXBlKTsKIAotICAgICAgICAgIGlmKGRpc2Nvbm5lY3RfY29ubikgeworICAgICAgICAgIGlmKHN0cmVhbV9lcnJvcikgewogICAgICAgICAgICAgLyogRG9uJ3QgYXR0ZW1wdCB0byBzZW5kIGRhdGEgb3ZlciBhIGNvbm5lY3Rpb24gdGhhdCB0aW1lZCBvdXQgKi8KICAgICAgICAgICAgIGJvb2wgZGVhZF9jb25uZWN0aW9uID0gcmVzdWx0ID09IENVUkxFX09QRVJBVElPTl9USU1FRE9VVDsKICAgICAgICAgICAgIC8qIGRpc2Nvbm5lY3QgcHJvcGVybHkgKi8KQEAgLTIwNjYsNyArMjEwMCw3IEBACiAgICAgICAgIC8qIGFib3J0ZWQgZHVlIHRvIHByb2dyZXNzIGNhbGxiYWNrIHJldHVybiBjb2RlIG11c3QgY2xvc2UgdGhlCiAgICAgICAgICAgIGNvbm5lY3Rpb24gKi8KICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKLSAgICAgICAgY29ubmNsb3NlKGRhdGEtPmVhc3lfY29ubiwgIkFib3J0ZWQgYnkgY2FsbGJhY2siKTsKKyAgICAgICAgc3RyZWFtY2xvc2UoZGF0YS0+ZWFzeV9jb25uLCAiQWJvcnRlZCBieSBjYWxsYmFjayIpOwogCiAgICAgICAgIC8qIGlmIG5vdCB5ZXQgaW4gRE9ORSBzdGF0ZSwgZ28gdGhlcmUsIG90aGVyd2lzZSBDT01QTEVURUQgKi8KICAgICAgICAgbXVsdGlzdGF0ZShkYXRhLCAoZGF0YS0+bXN0YXRlIDwgQ1VSTE1fU1RBVEVfRE9ORSk/CkBAIC0yMTYwLDYgKzIxOTQsNyBAQAogICAgIGNvbm4tPmRhdGEtPmVhc3lfY29ubiA9IE5VTEw7IC8qIGNsZWFyIHRoZSBlYXN5IGhhbmRsZSdzIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyICovCiAgICAgLyogVGhpcyB3aWxsIHJlbW92ZSB0aGUgY29ubmVjdGlvbiBmcm9tIHRoZSBjYWNoZSAqLworICAgIGNvbm5jbG9zZShjb25uLCAia2lsbCBhbGwiKTsKICAgICAodm9pZClDdXJsX2Rpc2Nvbm5lY3QoY29ubiwgRkFMU0UpOwogICAgIHNpZ3BpcGVfcmVzdG9yZSgmcGlwZV9zdCk7CiAKQEAgLTI0NjcsNyArMjUwMiw3IEBACiAgICAgIHRpbWVvdXQgaW4gKnR2ICovCiAgIGZvcihlID0gbGlzdC0+aGVhZDsgZTspIHsKICAgICBzdHJ1Y3QgY3VybF9sbGlzdF9lbGVtZW50ICpuID0gZS0+bmV4dDsKLSAgICBsb25nIGRpZmYgPSBjdXJseF90dmRpZmYoKihzdHJ1Y3QgdGltZXZhbCAqKWUtPnB0ciwgbm93KTsKKyAgICB0aW1lX3QgZGlmZiA9IGN1cmx4X3R2ZGlmZigqKHN0cnVjdCB0aW1ldmFsICopZS0+cHRyLCBub3cpOwogICAgIGlmKGRpZmYgPD0gMCkKICAgICAgIC8qIHJlbW92ZSBvdXRkYXRlZCBlbnRyeSAqLwogICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobGlzdCwgZSwgTlVMTCk7CkBAIC0yNzQ1LDcgKzI3ODAsNyBAQAogCiAgICAgaWYoQ3VybF9zcGxheWNvbXBhcmVrZXlzKG11bHRpLT50aW1ldHJlZS0+a2V5LCBub3cpID4gMCkgewogICAgICAgLyogc29tZSB0aW1lIGxlZnQgYmVmb3JlIGV4cGlyYXRpb24gKi8KLSAgICAgICp0aW1lb3V0X21zID0gY3VybHhfdHZkaWZmKG11bHRpLT50aW1ldHJlZS0+a2V5LCBub3cpOworICAgICAgKnRpbWVvdXRfbXMgPSAobG9uZyljdXJseF90dmRpZmYobXVsdGktPnRpbWV0cmVlLT5rZXksIG5vdyk7CiAgICAgICBpZighKnRpbWVvdXRfbXMpCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNpbmNlIHdlIG9ubHkgcHJvdmlkZSBtaWxsaXNlY29uZCByZXNvbHV0aW9uIG9uIHRoZSByZXR1cm5lZCB2YWx1ZQpAQCAtMjg1Miw3ICsyODg3LDcgQEAKICAgICAvKiBmaW5kIHRoZSBjb3JyZWN0IHNwb3QgaW4gdGhlIGxpc3QgKi8KICAgICBmb3IoZSA9IHRpbWVvdXRsaXN0LT5oZWFkOyBlOyBlID0gZS0+bmV4dCkgewogICAgICAgc3RydWN0IHRpbWV2YWwgKmNoZWNrdGltZSA9IGUtPnB0cjsKLSAgICAgIGxvbmcgZGlmZiA9IGN1cmx4X3R2ZGlmZigqY2hlY2t0aW1lLCAqdGltZWR1cCk7CisgICAgICB0aW1lX3QgZGlmZiA9IGN1cmx4X3R2ZGlmZigqY2hlY2t0aW1lLCAqdGltZWR1cCk7CiAgICAgICBpZihkaWZmID4gMCkKICAgICAgICAgYnJlYWs7CiAgICAgICBwcmV2ID0gZTsKQEAgLTI4NzYsOTIgKzI5MTEsNTkgQEAKICAqIGdpdmVuIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIG5vdyB0byB1c2UgdG8gc2V0IHRoZSAnYWN0IGJlZm9yZQogICogdGhpcyctdGltZSBmb3IgdGhlIHRyYW5zZmVyLCB0byBiZSBleHRyYWN0ZWQgYnkgY3VybF9tdWx0aV90aW1lb3V0KCkKICAqCi0gKiBOb3RlIHRoYXQgdGhlIHRpbWVvdXQgd2lsbCBiZSBhZGRlZCB0byBhIHF1ZXVlIG9mIHRpbWVvdXRzIGlmIGl0IGRlZmluZXMgYQotICogbW9tZW50IGluIHRpbWUgdGhhdCBpcyBsYXRlciB0aGFuIHRoZSBjdXJyZW50IGhlYWQgb2YgcXVldWUuCi0gKgotICogUGFzcyB6ZXJvIHRvIGNsZWFyIGFsbCB0aW1lb3V0IHZhbHVlcyBmb3IgdGhpcyBoYW5kbGUuCi0qLwotdm9pZCBDdXJsX2V4cGlyZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBsb25nIG1pbGxpKQorICogVGhlIHRpbWVvdXQgd2lsbCBiZSBhZGRlZCB0byBhIHF1ZXVlIG9mIHRpbWVvdXRzIGlmIGl0IGRlZmluZXMgYSBtb21lbnQgaW4KKyAqIHRpbWUgdGhhdCBpcyBsYXRlciB0aGFuIHRoZSBjdXJyZW50IGhlYWQgb2YgcXVldWUuCisgKi8KK3ZvaWQgQ3VybF9leHBpcmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgdGltZV90IG1pbGxpKQogewogICBzdHJ1Y3QgQ3VybF9tdWx0aSAqbXVsdGkgPSBkYXRhLT5tdWx0aTsKICAgc3RydWN0IHRpbWV2YWwgKm5vd3AgPSAmZGF0YS0+c3RhdGUuZXhwaXJldGltZTsKICAgaW50IHJjOworICBzdHJ1Y3QgdGltZXZhbCBzZXQ7CiAKICAgLyogdGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIHdoaWxlIHRoZXJlIGlzIHN0aWxsIGFuIGFzc29jaWF0ZWQgbXVsdGkgc3RydWN0CiAgICAgIHJlbWFpbmluZyEgKi8KICAgaWYoIW11bHRpKQogICAgIHJldHVybjsKIAotICBpZighbWlsbGkpIHsKLSAgICAvKiBObyB0aW1lb3V0LCBjbGVhciB0aGUgdGltZSBkYXRhLiAqLwotICAgIGlmKG5vd3AtPnR2X3NlYyB8fCBub3dwLT50dl91c2VjKSB7Ci0gICAgICAvKiBTaW5jZSB0aGlzIGlzIGFuIGNsZWFyZWQgdGltZSwgd2UgbXVzdCByZW1vdmUgdGhlIHByZXZpb3VzIGVudHJ5IGZyb20KLSAgICAgICAgIHRoZSBzcGxheSB0cmVlICovCi0gICAgICBzdHJ1Y3QgY3VybF9sbGlzdCAqbGlzdCA9IGRhdGEtPnN0YXRlLnRpbWVvdXRsaXN0OworICBzZXQgPSBDdXJsX3R2bm93KCk7CisgIHNldC50dl9zZWMgKz0gKGxvbmcpKG1pbGxpLzEwMDApOworICBzZXQudHZfdXNlYyArPSAobWlsbGklMTAwMCkqMTAwMDsKIAotICAgICAgcmMgPSBDdXJsX3NwbGF5cmVtb3ZlYnlhZGRyKG11bHRpLT50aW1ldHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+c3RhdGUudGltZW5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11bHRpLT50aW1ldHJlZSk7Ci0gICAgICBpZihyYykKLSAgICAgICAgaW5mb2YoZGF0YSwgIkludGVybmFsIGVycm9yIGNsZWFyaW5nIHNwbGF5IG5vZGUgPSAlZFxuIiwgcmMpOwotCi0gICAgICAvKiBmbHVzaCB0aGUgdGltZW91dCBsaXN0IHRvbyAqLwotICAgICAgd2hpbGUobGlzdC0+c2l6ZSA+IDApCi0gICAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKGxpc3QsIGxpc3QtPnRhaWwsIE5VTEwpOwotCi0jaWZkZWYgREVCVUdCVUlMRAotICAgICAgaW5mb2YoZGF0YSwgIkV4cGlyZSBjbGVhcmVkXG4iKTsKLSNlbmRpZgotICAgICAgbm93cC0+dHZfc2VjID0gMDsKLSAgICAgIG5vd3AtPnR2X3VzZWMgPSAwOwotICAgIH0KKyAgaWYoc2V0LnR2X3VzZWMgPj0gMTAwMDAwMCkgeworICAgIHNldC50dl9zZWMrKzsKKyAgICBzZXQudHZfdXNlYyAtPSAxMDAwMDAwOwogICB9Ci0gIGVsc2UgewotICAgIHN0cnVjdCB0aW1ldmFsIHNldDsKIAotICAgIHNldCA9IEN1cmxfdHZub3coKTsKLSAgICBzZXQudHZfc2VjICs9IG1pbGxpLzEwMDA7Ci0gICAgc2V0LnR2X3VzZWMgKz0gKG1pbGxpJTEwMDApKjEwMDA7Ci0KLSAgICBpZihzZXQudHZfdXNlYyA+PSAxMDAwMDAwKSB7Ci0gICAgICBzZXQudHZfc2VjKys7Ci0gICAgICBzZXQudHZfdXNlYyAtPSAxMDAwMDAwOworICBpZihub3dwLT50dl9zZWMgfHwgbm93cC0+dHZfdXNlYykgeworICAgIC8qIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RydWN0IGlzIGFkZGVkIGFzIGEgbm9kZSBpbiB0aGUgc3BsYXkgdHJlZS4KKyAgICAgICBDb21wYXJlIGlmIHRoZSBuZXcgdGltZSBpcyBlYXJsaWVyLCBhbmQgb25seSByZW1vdmUtb2xkL2FkZC1uZXcgaWYgaXQKKyAgICAgICBpcy4gKi8KKyAgICB0aW1lX3QgZGlmZiA9IGN1cmx4X3R2ZGlmZihzZXQsICpub3dwKTsKKyAgICBpZihkaWZmID4gMCkgeworICAgICAgLyogdGhlIG5ldyBleHBpcmUgdGltZSB3YXMgbGF0ZXIgc28ganVzdCBhZGQgaXQgdG8gdGhlIHF1ZXVlCisgICAgICAgICBhbmQgZ2V0IG91dCAqLworICAgICAgbXVsdGlfYWRkdGltZW91dChkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgJnNldCk7CisgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYobm93cC0+dHZfc2VjIHx8IG5vd3AtPnR2X3VzZWMpIHsKLSAgICAgIC8qIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RydWN0IGlzIGFkZGVkIGFzIGEgbm9kZSBpbiB0aGUgc3BsYXkgdHJlZS4KLSAgICAgICAgIENvbXBhcmUgaWYgdGhlIG5ldyB0aW1lIGlzIGVhcmxpZXIsIGFuZCBvbmx5IHJlbW92ZS1vbGQvYWRkLW5ldyBpZiBpdAotICAgICAgICAgaXMuICovCi0gICAgICBsb25nIGRpZmYgPSBjdXJseF90dmRpZmYoc2V0LCAqbm93cCk7Ci0gICAgICBpZihkaWZmID4gMCkgewotICAgICAgICAvKiB0aGUgbmV3IGV4cGlyZSB0aW1lIHdhcyBsYXRlciBzbyBqdXN0IGFkZCBpdCB0byB0aGUgcXVldWUKLSAgICAgICAgICAgYW5kIGdldCBvdXQgKi8KLSAgICAgICAgbXVsdGlfYWRkdGltZW91dChkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgJnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KKyAgICAvKiB0aGUgbmV3IHRpbWUgaXMgbmV3ZXIgdGhhbiB0aGUgcHJlc2VudGx5IHNldCBvbmUsIHNvIGFkZCB0aGUgY3VycmVudAorICAgICAgIHRvIHRoZSBxdWV1ZSBhbmQgdXBkYXRlIHRoZSBoZWFkICovCisgICAgbXVsdGlfYWRkdGltZW91dChkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgbm93cCk7CiAKLSAgICAgIC8qIHRoZSBuZXcgdGltZSBpcyBuZXdlciB0aGFuIHRoZSBwcmVzZW50bHkgc2V0IG9uZSwgc28gYWRkIHRoZSBjdXJyZW50Ci0gICAgICAgICB0byB0aGUgcXVldWUgYW5kIHVwZGF0ZSB0aGUgaGVhZCAqLwotICAgICAgbXVsdGlfYWRkdGltZW91dChkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdCwgbm93cCk7Ci0KLSAgICAgIC8qIFNpbmNlIHRoaXMgaXMgYW4gdXBkYXRlZCB0aW1lLCB3ZSBtdXN0IHJlbW92ZSB0aGUgcHJldmlvdXMgZW50cnkgZnJvbQotICAgICAgICAgdGhlIHNwbGF5IHRyZWUgZmlyc3QgYW5kIHRoZW4gcmUtYWRkIHRoZSBuZXcgdmFsdWUgKi8KLSAgICAgIHJjID0gQ3VybF9zcGxheXJlbW92ZWJ5YWRkcihtdWx0aS0+dGltZXRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnN0YXRlLnRpbWVub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtdWx0aS0+dGltZXRyZWUpOwotICAgICAgaWYocmMpCi0gICAgICAgIGluZm9mKGRhdGEsICJJbnRlcm5hbCBlcnJvciByZW1vdmluZyBzcGxheSBub2RlID0gJWRcbiIsIHJjKTsKLSAgICB9Ci0KLSAgICAqbm93cCA9IHNldDsKLSAgICBkYXRhLT5zdGF0ZS50aW1lbm9kZS5wYXlsb2FkID0gZGF0YTsKLSAgICBtdWx0aS0+dGltZXRyZWUgPSBDdXJsX3NwbGF5aW5zZXJ0KCpub3dwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGktPnRpbWV0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnN0YXRlLnRpbWVub2RlKTsKKyAgICAvKiBTaW5jZSB0aGlzIGlzIGFuIHVwZGF0ZWQgdGltZSwgd2UgbXVzdCByZW1vdmUgdGhlIHByZXZpb3VzIGVudHJ5IGZyb20KKyAgICAgICB0aGUgc3BsYXkgdHJlZSBmaXJzdCBhbmQgdGhlbiByZS1hZGQgdGhlIG5ldyB2YWx1ZSAqLworICAgIHJjID0gQ3VybF9zcGxheXJlbW92ZWJ5YWRkcihtdWx0aS0+dGltZXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5zdGF0ZS50aW1lbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11bHRpLT50aW1ldHJlZSk7CisgICAgaWYocmMpCisgICAgICBpbmZvZihkYXRhLCAiSW50ZXJuYWwgZXJyb3IgcmVtb3Zpbmcgc3BsYXkgbm9kZSA9ICVkXG4iLCByYyk7CiAgIH0KLSNpZiAwCi0gIEN1cmxfc3BsYXlwcmludChtdWx0aS0+dGltZXRyZWUsIDAsIFRSVUUpOwotI2VuZGlmCisKKyAgKm5vd3AgPSBzZXQ7CisgIGRhdGEtPnN0YXRlLnRpbWVub2RlLnBheWxvYWQgPSBkYXRhOworICBtdWx0aS0+dGltZXRyZWUgPSBDdXJsX3NwbGF5aW5zZXJ0KCpub3dwLCBtdWx0aS0+dGltZXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPnN0YXRlLnRpbWVub2RlKTsKIH0KIAogLyoKQEAgLTI5NzUsMTQgKzI5NzcsMTQgQEAKICAqIHRpbWUtb3V0IHBlcmlvZCB0byBleHBpcmUuCiAgKgogICovCi12b2lkIEN1cmxfZXhwaXJlX2xhdGVzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBsb25nIG1pbGxpKQordm9pZCBDdXJsX2V4cGlyZV9sYXRlc3Qoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgdGltZV90IG1pbGxpKQogewogICBzdHJ1Y3QgdGltZXZhbCAqZXhwaXJlID0gJmRhdGEtPnN0YXRlLmV4cGlyZXRpbWU7CiAKICAgc3RydWN0IHRpbWV2YWwgc2V0OwogCiAgIHNldCA9IEN1cmxfdHZub3coKTsKLSAgc2V0LnR2X3NlYyArPSBtaWxsaSAvIDEwMDA7CisgIHNldC50dl9zZWMgKz0gKGxvbmcpKG1pbGxpIC8gMTAwMCk7CiAgIHNldC50dl91c2VjICs9IChtaWxsaSAlIDEwMDApICogMTAwMDsKIAogICBpZihzZXQudHZfdXNlYyA+PSAxMDAwMDAwKSB7CkBAIC0yOTk0LDcgKzI5OTYsNyBAQAogICAgIC8qIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RydWN0IGlzIGFkZGVkIGFzIGEgbm9kZSBpbiB0aGUgc3BsYXkgdHJlZS4KICAgICAgICBDb21wYXJlIGlmIHRoZSBuZXcgdGltZSBpcyBlYXJsaWVyLCBhbmQgb25seSByZW1vdmUtb2xkL2FkZC1uZXcgaWYgaXQKICAgICAgICAgIGlzLiAqLwotICAgIGxvbmcgZGlmZiA9IGN1cmx4X3R2ZGlmZihzZXQsICpleHBpcmUpOworICAgIHRpbWVfdCBkaWZmID0gY3VybHhfdHZkaWZmKHNldCwgKmV4cGlyZSk7CiAgICAgaWYoZGlmZiA+IDApCiAgICAgICAvKiB0aGUgbmV3IGV4cGlyZSB0aW1lIHdhcyBsYXRlciB0aGFuIHRoZSB0b3AgdGltZSwgc28ganVzdCBza2lwIHRoaXMgKi8KICAgICAgIHJldHVybjsKQEAgLTMwMDQsNiArMzAwNiw0OSBAQAogICBDdXJsX2V4cGlyZShkYXRhLCBtaWxsaSk7CiB9CiAKKworLyoKKyAqIEN1cmxfZXhwaXJlX2NsZWFyKCkKKyAqCisgKiBDbGVhciBBTEwgdGltZW91dCB2YWx1ZXMgZm9yIHRoaXMgaGFuZGxlLgorICovCit2b2lkIEN1cmxfZXhwaXJlX2NsZWFyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCit7CisgIHN0cnVjdCBDdXJsX211bHRpICptdWx0aSA9IGRhdGEtPm11bHRpOworICBzdHJ1Y3QgdGltZXZhbCAqbm93cCA9ICZkYXRhLT5zdGF0ZS5leHBpcmV0aW1lOworICBpbnQgcmM7CisKKyAgLyogdGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIHdoaWxlIHRoZXJlIGlzIHN0aWxsIGFuIGFzc29jaWF0ZWQgbXVsdGkgc3RydWN0CisgICAgIHJlbWFpbmluZyEgKi8KKyAgaWYoIW11bHRpKQorICAgIHJldHVybjsKKworICBpZihub3dwLT50dl9zZWMgfHwgbm93cC0+dHZfdXNlYykgeworICAgIC8qIFNpbmNlIHRoaXMgaXMgYW4gY2xlYXJlZCB0aW1lLCB3ZSBtdXN0IHJlbW92ZSB0aGUgcHJldmlvdXMgZW50cnkgZnJvbQorICAgICAgIHRoZSBzcGxheSB0cmVlICovCisgICAgc3RydWN0IGN1cmxfbGxpc3QgKmxpc3QgPSBkYXRhLT5zdGF0ZS50aW1lb3V0bGlzdDsKKworICAgIHJjID0gQ3VybF9zcGxheXJlbW92ZWJ5YWRkcihtdWx0aS0+dGltZXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5zdGF0ZS50aW1lbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm11bHRpLT50aW1ldHJlZSk7CisgICAgaWYocmMpCisgICAgICBpbmZvZihkYXRhLCAiSW50ZXJuYWwgZXJyb3IgY2xlYXJpbmcgc3BsYXkgbm9kZSA9ICVkXG4iLCByYyk7CisKKyAgICAvKiBmbHVzaCB0aGUgdGltZW91dCBsaXN0IHRvbyAqLworICAgIHdoaWxlKGxpc3QtPnNpemUgPiAwKQorICAgICAgQ3VybF9sbGlzdF9yZW1vdmUobGlzdCwgbGlzdC0+dGFpbCwgTlVMTCk7CisKKyNpZmRlZiBERUJVR0JVSUxECisgICAgaW5mb2YoZGF0YSwgIkV4cGlyZSBjbGVhcmVkXG4iKTsKKyNlbmRpZgorICAgIG5vd3AtPnR2X3NlYyA9IDA7CisgICAgbm93cC0+dHZfdXNlYyA9IDA7CisgIH0KK30KKworCisKKwogQ1VSTE1jb2RlIGN1cmxfbXVsdGlfYXNzaWduKHN0cnVjdCBDdXJsX211bHRpICptdWx0aSwgY3VybF9zb2NrZXRfdCBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhc2hwKQogewpAQCAtMzA2NCw3ICszMTA5LDcgQEAKICAgICAgIEN1cmxfbGxpc3RfcmVtb3ZlKG11bHRpLT5wZW5kaW5nLCBlLCBOVUxMKTsKIAogICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZSB3aWxsIGJlIHByb2Nlc3NlZCBzb29uaXNoLiAqLwotICAgICAgQ3VybF9leHBpcmVfbGF0ZXN0KGRhdGEsIDEpOworICAgICAgQ3VybF9leHBpcmVfbGF0ZXN0KGRhdGEsIDApOwogICAgIH0KIAogICAgIGUgPSBuZXh0OyAvKiBvcGVyYXRlIG9uIG5leHQgaGFuZGxlICovCmRpZmYgLS1naXQgYS9saWIvbXVsdGloYW5kbGUuaCBiL2xpYi9tdWx0aWhhbmRsZS5oCmluZGV4IGM1NmI2YWUuLjBiNzhkZTkgMTAwNjQ0Ci0tLSBhL2xpYi9tdWx0aWhhbmRsZS5oCisrKyBiL2xpYi9tdWx0aWhhbmRsZS5oCkBAIC0zOCw3ICszOCw5IEBACiAgIENVUkxNX1NUQVRFX0NPTk5FQ1QsICAgICAgLyogMiAtIHJlc29sdmUvY29ubmVjdCBoYXMgYmVlbiBzZW50IG9mZiAqLwogICBDVVJMTV9TVEFURV9XQUlUUkVTT0xWRSwgIC8qIDMgLSBhd2FpdGluZyB0aGUgcmVzb2x2ZSB0byBmaW5hbGl6ZSAqLwogICBDVVJMTV9TVEFURV9XQUlUQ09OTkVDVCwgIC8qIDQgLSBhd2FpdGluZyB0aGUgVENQIGNvbm5lY3QgdG8gZmluYWxpemUgKi8KLSAgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVCwgLyogNSAtIGF3YWl0aW5nIHByb3h5IENPTk5FQ1QgdG8gZmluYWxpemUgKi8KKyAgQ1VSTE1fU1RBVEVfV0FJVFBST1hZQ09OTkVDVCwgLyogNSAtIGF3YWl0aW5nIEhUVFBTIHByb3h5IFNTTCBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjb21wbGV0ZSBhbmQvb3IgcHJveHkgQ09OTkVDVCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSAqLwogICBDVVJMTV9TVEFURV9TRU5EUFJPVE9DT05ORUNULCAvKiA2IC0gaW5pdGlhdGUgcHJvdG9jb2wgY29ubmVjdCBwcm9jZWR1cmUgKi8KICAgQ1VSTE1fU1RBVEVfUFJPVE9DT05ORUNULCAvKiA3IC0gY29tcGxldGluZyB0aGUgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSAqLwpkaWZmIC0tZ2l0IGEvbGliL211bHRpaWYuaCBiL2xpYi9tdWx0aWlmLmgKaW5kZXggZmQyZGY1NS4uZTVkZTFmYyAxMDA2NDQKLS0tIGEvbGliL211bHRpaWYuaAorKysgYi9saWIvbXVsdGlpZi5oCkBAIC0yNSw4ICsyNSw5IEBACiAvKgogICogUHJvdG90eXBlcyBmb3IgbGlicmFyeS13aWRlIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBtdWx0aS5jCiAgKi8KLXZvaWQgQ3VybF9leHBpcmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgbG9uZyBtaWxsaSk7Ci12b2lkIEN1cmxfZXhwaXJlX2xhdGVzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBsb25nIG1pbGxpKTsKK3ZvaWQgQ3VybF9leHBpcmUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgdGltZV90IG1pbGxpKTsKK3ZvaWQgQ3VybF9leHBpcmVfY2xlYXIoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7Cit2b2lkIEN1cmxfZXhwaXJlX2xhdGVzdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB0aW1lX3QgbWlsbGkpOwogYm9vbCBDdXJsX3BpcGVsaW5lX3dhbnRlZChjb25zdCBzdHJ1Y3QgQ3VybF9tdWx0aSogbXVsdGksIGludCBiaXRzKTsKIHZvaWQgQ3VybF9tdWx0aV9oYW5kbGVQaXBlQnJlYWsoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2xpYi9uZXRyYy5jIGIvbGliL25ldHJjLmMKaW5kZXggNDZmNDI3YS4uOTk2NzExZCAxMDA2NDQKLS0tIGEvbGliL25ldHJjLmMKKysrIGIvbGliL25ldHJjLmMKQEAgLTI4LDEwICsyOCw4IEBACiAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KICNpbmNsdWRlICJuZXRyYy5oIgotCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKICNpbmNsdWRlICJzdHJ0b2suaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgpAQCAtMTMwLDIwICsxMjgsMjAgQEAKIAogICAgICAgICBzd2l0Y2goc3RhdGUpIHsKICAgICAgICAgY2FzZSBOT1RISU5HOgotICAgICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKCJtYWNoaW5lIiwgdG9rKSkgeworICAgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJtYWNoaW5lIiwgdG9rKSkgewogICAgICAgICAgICAgLyogdGhlIG5leHQgdG9rIGlzIHRoZSBtYWNoaW5lIG5hbWUsIHRoaXMgaXMgaW4gaXRzZWxmIHRoZQogICAgICAgICAgICAgICAgZGVsaW1pdGVyIHRoYXQgc3RhcnRzIHRoZSBzdHVmZiBlbnRlcmVkIGZvciB0aGlzIG1hY2hpbmUsCiAgICAgICAgICAgICAgICBhZnRlciB0aGlzIHdlIG5lZWQgdG8gc2VhcmNoIGZvciAnbG9naW4nIGFuZAogICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJy4gKi8KICAgICAgICAgICAgIHN0YXRlPUhPU1RGT1VORDsKICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgiZGVmYXVsdCIsIHRvaykpIHsKKyAgICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJkZWZhdWx0IiwgdG9rKSkgewogICAgICAgICAgICAgc3RhdGU9SE9TVFZBTElEOwogICAgICAgICAgICAgcmV0Y29kZT0wOyAvKiB3ZSBkaWQgZmluZCBvdXIgaG9zdCAqLwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIT1NURk9VTkQ6Ci0gICAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoaG9zdCwgdG9rKSkgeworICAgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKGhvc3QsIHRvaykpIHsKICAgICAgICAgICAgIC8qIGFuZCB5ZXMsIHRoaXMgaXMgb3VyIGhvc3QhICovCiAgICAgICAgICAgICBzdGF0ZT1IT1NUVkFMSUQ7CiAgICAgICAgICAgICByZXRjb2RlPTA7IC8qIHdlIGRpZCBmaW5kIG91ciBob3N0ICovCkBAIC0xNTYsNyArMTU0LDcgQEAKICAgICAgICAgICAvKiB3ZSBhcmUgbm93IHBhcnNpbmcgc3ViLWtleXdvcmRzIGNvbmNlcm5pbmcgIm91ciIgaG9zdCAqLwogICAgICAgICAgIGlmKHN0YXRlX2xvZ2luKSB7CiAgICAgICAgICAgICBpZihzcGVjaWZpY19sb2dpbikgewotICAgICAgICAgICAgICBzdGF0ZV9vdXJfbG9naW4gPSBDdXJsX3Jhd19lcXVhbCgqbG9naW5wLCB0b2spOworICAgICAgICAgICAgICBzdGF0ZV9vdXJfbG9naW4gPSBzdHJjYXNlY29tcGFyZSgqbG9naW5wLCB0b2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgIGZyZWUoKmxvZ2lucCk7CkBAIC0xNzksMTEgKzE3NywxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGVfcGFzc3dvcmQ9MDsKICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgibG9naW4iLCB0b2spKQorICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoImxvZ2luIiwgdG9rKSkKICAgICAgICAgICAgIHN0YXRlX2xvZ2luPTE7Ci0gICAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgicGFzc3dvcmQiLCB0b2spKQorICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoInBhc3N3b3JkIiwgdG9rKSkKICAgICAgICAgICAgIHN0YXRlX3Bhc3N3b3JkPTE7Ci0gICAgICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCgibWFjaGluZSIsIHRvaykpIHsKKyAgICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKCJtYWNoaW5lIiwgdG9rKSkgewogICAgICAgICAgICAgLyogb2ssIHRoZXJlJ3MgbWFjaGluZSBoZXJlIGdvID0+ICovCiAgICAgICAgICAgICBzdGF0ZSA9IEhPU1RGT1VORDsKICAgICAgICAgICAgIHN0YXRlX291cl9sb2dpbiA9IEZBTFNFOwpkaWZmIC0tZ2l0IGEvbGliL25vbi1hc2NpaS5jIGIvbGliL25vbi1hc2NpaS5jCmluZGV4IGVkMTQ2MTguLjJmNWRlNGMgMTAwNjQ0Ci0tLSBhL2xpYi9ub24tYXNjaWkuYworKysgYi9saWIvbm9uLWFzY2lpLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNCwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgIC8qIGNhbGwgaWNvbnYgKi8KICAgICBpbnB1dF9wdHIgPSBvdXRwdXRfcHRyID0gYnVmZmVyOwogICAgIGluX2J5dGVzID0gb3V0X2J5dGVzID0gbGVuZ3RoOwotICAgIHJjID0gaWNvbnYoZGF0YS0+b3V0Ym91bmRfY2QsIChjb25zdCBjaGFyKiopJmlucHV0X3B0ciwgJmluX2J5dGVzLAorICAgIHJjID0gaWNvbnYoZGF0YS0+b3V0Ym91bmRfY2QsIChjb25zdCBjaGFyICoqKSZpbnB1dF9wdHIsICZpbl9ieXRlcywKICAgICAgICAgICAgICAgICZvdXRwdXRfcHRyLCAmb3V0X2J5dGVzKTsKICAgICBpZigocmMgPT0gSUNPTlZfRVJST1IpIHx8IChpbl9ieXRlcyAhPSAwKSkgewogICAgICAgZXJyb3IgPSBFUlJOTzsKZGlmZiAtLWdpdCBhL2xpYi9wYXJzZWRhdGUuYyBiL2xpYi9wYXJzZWRhdGUuYwppbmRleCA3YWFkNWMyLi45NDNmNTQ3IDEwMDY0NAotLS0gYS9saWIvcGFyc2VkYXRlLmMKKysrIGIvbGliL3BhcnNlZGF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC04MCw3ICs4MCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgInBhcnNlZGF0ZS5oIgogCkBAIC0yMTEsNyArMjExLDcgQEAKICAgZWxzZQogICAgIHdoYXQgPSAmQ3VybF93a2RheVswXTsKICAgZm9yKGk9MDsgaTw3OyBpKyspIHsKLSAgICBpZihDdXJsX3Jhd19lcXVhbChjaGVjaywgd2hhdFswXSkpIHsKKyAgICBpZihzdHJjYXNlY29tcGFyZShjaGVjaywgd2hhdFswXSkpIHsKICAgICAgIGZvdW5kPVRSVUU7CiAgICAgICBicmVhazsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAKIAogICB3aGF0ID0gJkN1cmxfbW9udGhbMF07CiAgIGZvcihpPTA7IGk8MTI7IGkrKykgewotICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNoZWNrLCB3aGF0WzBdKSkgeworICAgIGlmKHN0cmNhc2Vjb21wYXJlKGNoZWNrLCB3aGF0WzBdKSkgewogICAgICAgZm91bmQ9VFJVRTsKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAgIHdoYXQgPSB0ejsKICAgZm9yKGk9MDsgaTwgc2l6ZW9mKHR6KS9zaXplb2YodHpbMF0pOyBpKyspIHsKLSAgICBpZihDdXJsX3Jhd19lcXVhbChjaGVjaywgd2hhdC0+bmFtZSkpIHsKKyAgICBpZihzdHJjYXNlY29tcGFyZShjaGVjaywgd2hhdC0+bmFtZSkpIHsKICAgICAgIGZvdW5kPVRSVUU7CiAgICAgICBicmVhazsKICAgICB9CkBAIC0zODYsMTUgKzM4NiwxNyBAQAogICAgICAgLyogYSBkaWdpdCAqLwogICAgICAgaW50IHZhbDsKICAgICAgIGNoYXIgKmVuZDsKKyAgICAgIGludCBsZW49MDsKICAgICAgIGlmKChzZWNudW0gPT0gLTEpICYmCi0gICAgICAgICAoMyA9PSBzc2NhbmYoZGF0ZSwgIiUwMmQ6JTAyZDolMDJkIiwgJmhvdXJudW0sICZtaW5udW0sICZzZWNudW0pKSkgeworICAgICAgICAgKDMgPT0gc3NjYW5mKGRhdGUsICIlMDJkOiUwMmQ6JTAyZCVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAmaG91cm51bSwgJm1pbm51bSwgJnNlY251bSwgJmxlbikpKSB7CiAgICAgICAgIC8qIHRpbWUgc3RhbXAhICovCi0gICAgICAgIGRhdGUgKz0gODsKKyAgICAgICAgZGF0ZSArPSBsZW47CiAgICAgICB9CiAgICAgICBlbHNlIGlmKChzZWNudW0gPT0gLTEpICYmCi0gICAgICAgICAgICAgICgyID09IHNzY2FuZihkYXRlLCAiJTAyZDolMDJkIiwgJmhvdXJudW0sICZtaW5udW0pKSkgeworICAgICAgICAgICAgICAoMiA9PSBzc2NhbmYoZGF0ZSwgIiUwMmQ6JTAyZCVuIiwgJmhvdXJudW0sICZtaW5udW0sICZsZW4pKSkgewogICAgICAgICAvKiB0aW1lIHN0YW1wIHdpdGhvdXQgc2Vjb25kcyAqLwotICAgICAgICBkYXRlICs9IDU7CisgICAgICAgIGRhdGUgKz0gbGVuOwogICAgICAgICBzZWNudW0gPSAwOwogICAgICAgfQogICAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9saWIvcGluZ3BvbmcuYyBiL2xpYi9waW5ncG9uZy5jCmluZGV4IDkyZmY4NGIuLjdhOTkzNTcgMTAwNjQ0Ci0tLSBhL2xpYi9waW5ncG9uZy5jCisrKyBiL2xpYi9waW5ncG9uZy5jCkBAIC00NCwxMiArNDQsMTIgQEAKIAogLyogUmV0dXJucyB0aW1lb3V0IGluIG1zLiAwIG9yIG5lZ2F0aXZlIG51bWJlciBtZWFucyB0aGUgdGltZW91dCBoYXMgYWxyZWFkeQogICAgdHJpZ2dlcmVkICovCi1sb25nIEN1cmxfcHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgcGluZ3BvbmcgKnBwKQordGltZV90IEN1cmxfcHBfc3RhdGVfdGltZW91dChzdHJ1Y3QgcGluZ3BvbmcgKnBwKQogewogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSBwcC0+Y29ubjsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YT1jb25uLT5kYXRhOwotICBsb25nIHRpbWVvdXRfbXM7IC8qIGluIG1pbGxpc2Vjb25kcyAqLwotICBsb25nIHRpbWVvdXQyX21zOyAvKiBpbiBtaWxsaXNlY29uZHMgKi8KKyAgdGltZV90IHRpbWVvdXRfbXM7IC8qIGluIG1pbGxpc2Vjb25kcyAqLworICB0aW1lX3QgdGltZW91dDJfbXM7IC8qIGluIG1pbGxpc2Vjb25kcyAqLwogICBsb25nIHJlc3BvbnNlX3RpbWU9IChkYXRhLT5zZXQuc2VydmVyX3Jlc3BvbnNlX3RpbWVvdXQpPwogICAgIGRhdGEtPnNldC5zZXJ2ZXJfcmVzcG9uc2VfdGltZW91dDogcHAtPnJlc3BvbnNlX3RpbWU7CiAKQEAgLTgzLDggKzgzLDggQEAKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uID0gcHAtPmNvbm47CiAgIGN1cmxfc29ja2V0X3Qgc29jayA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOwogICBpbnQgcmM7Ci0gIGxvbmcgaW50ZXJ2YWxfbXM7Ci0gIGxvbmcgdGltZW91dF9tcyA9IEN1cmxfcHBfc3RhdGVfdGltZW91dChwcCk7CisgIHRpbWVfdCBpbnRlcnZhbF9tczsKKyAgdGltZV90IHRpbWVvdXRfbXMgPSBDdXJsX3BwX3N0YXRlX3RpbWVvdXQocHApOwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhPWNvbm4tPmRhdGE7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogCkBAIC0xMDEsMTQgKzEwMSwxNyBAQAogICBlbHNlCiAgICAgaW50ZXJ2YWxfbXMgPSAwOyAvKiBpbW1lZGlhdGUgKi8KIAotICBpZihDdXJsX3BwX21vcmVkYXRhKHBwKSkKKyAgaWYoQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbm4sIEZJUlNUU09DS0VUKSkKKyAgICByYyA9IDE7CisgIGVsc2UgaWYoQ3VybF9wcF9tb3JlZGF0YShwcCkpCiAgICAgLyogV2UgYXJlIHJlY2VpdmluZyBhbmQgdGhlcmUgaXMgZGF0YSBpbiB0aGUgY2FjaGUgc28ganVzdCByZWFkIGl0ICovCiAgICAgcmMgPSAxOwogICBlbHNlIGlmKCFwcC0+c2VuZGxlZnQgJiYgQ3VybF9zc2xfZGF0YV9wZW5kaW5nKGNvbm4sIEZJUlNUU09DS0VUKSkKICAgICAvKiBXZSBhcmUgcmVjZWl2aW5nIGFuZCB0aGVyZSBpcyBkYXRhIHJlYWR5IGluIHRoZSBTU0wgbGlicmFyeSAqLwogICAgIHJjID0gMTsKICAgZWxzZQotICAgIHJjID0gQ3VybF9zb2NrZXRfcmVhZHkocHAtPnNlbmRsZWZ0P0NVUkxfU09DS0VUX0JBRDpzb2NrLCAvKiByZWFkaW5nICovCisgICAgcmMgPSBDdXJsX3NvY2tldF9jaGVjayhwcC0+c2VuZGxlZnQ/Q1VSTF9TT0NLRVRfQkFEOnNvY2ssIC8qIHJlYWRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwLT5zZW5kbGVmdD9zb2NrOkNVUkxfU09DS0VUX0JBRCwgLyogd3JpdGluZyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxfbXMpOwogCmRpZmYgLS1naXQgYS9saWIvcGluZ3BvbmcuaCBiL2xpYi9waW5ncG9uZy5oCmluZGV4IDJmNjQ5ZDUuLjUwMDEwMGEgMTAwNjQ0Ci0tLSBhL2xpYi9waW5ncG9uZy5oCisrKyBiL2xpYi9waW5ncG9uZy5oCkBAIC04OCw3ICs4OCw3IEBACiAKIC8qIFJldHVybnMgdGltZW91dCBpbiBtcy4gMCBvciBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdGhlIHRpbWVvdXQgaGFzIGFscmVhZHkKICAgIHRyaWdnZXJlZCAqLwotbG9uZyBDdXJsX3BwX3N0YXRlX3RpbWVvdXQoc3RydWN0IHBpbmdwb25nICpwcCk7Cit0aW1lX3QgQ3VybF9wcF9zdGF0ZV90aW1lb3V0KHN0cnVjdCBwaW5ncG9uZyAqcHApOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbGliL3BpcGVsaW5lLmMgYi9saWIvcGlwZWxpbmUuYwppbmRleCAwZmY4MmYwLi40MGE1ZTgyIDEwMDY0NAotLS0gYS9saWIvcGlwZWxpbmUuYworKysgYi9saWIvcGlwZWxpbmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMywgTGludXMgTmllbHNlbiBGZWx0emluZywgPGxpbnVzQGhheHguc2U+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInBpcGVsaW5lLmgiCiAjaW5jbHVkZSAic2VuZGYuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBzaG91bGQgYmU6ICovCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgaWYocGlwZWxpbmUgPT0gY29ubi0+c2VuZF9waXBlICYmIHNlbmRoZWFkICE9IGNvbm4tPnNlbmRfcGlwZS0+aGVhZCkgewogICAgIC8qIHRoaXMgaXMgYSBuZXcgb25lIGFzIGhlYWQsIGV4cGlyZSBpdCAqLwogICAgIEN1cmxfcGlwZWxpbmVfbGVhdmVfd3JpdGUoY29ubik7IC8qIG5vdCBpbiB1c2UgeWV0ICovCi0gICAgQ3VybF9leHBpcmUoY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHIsIDEpOworICAgIEN1cmxfZXhwaXJlKGNvbm4tPnNlbmRfcGlwZS0+aGVhZC0+cHRyLCAwKTsKICAgfQogCiAjaWYgMCAvKiBlbmFibGUgZm9yIHBpcGVsaW5lIGRlYnVnZ2luZyAqLwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgIGluZm9mKGNvbm4tPmRhdGEsICIlcCBpcyBhdCBzZW5kIHBpcGUgaGVhZCBCIVxuIiwKICAgICAgICAgICAgICAgKHZvaWQgKiljb25uLT5zZW5kX3BpcGUtPmhlYWQtPnB0cik7CiAjZW5kaWYKLSAgICAgICAgQ3VybF9leHBpcmUoY29ubi0+c2VuZF9waXBlLT5oZWFkLT5wdHIsIDEpOworICAgICAgICBDdXJsX2V4cGlyZShjb25uLT5zZW5kX3BpcGUtPmhlYWQtPnB0ciwgMCk7CiAgICAgICB9CiAKICAgICAgIC8qIFRoZSByZWNlaXZlcidzIGxpc3QgaXMgbm90IHJlYWxseSBpbnRlcmVzdGluZyBoZXJlIHNpbmNlIGVpdGhlciB0aGlzCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgc3RydWN0IHNpdGVfYmxhY2tsaXN0X2VudHJ5ICpzaXRlOwogCiAgICAgICAgIHNpdGUgPSBjdXJyLT5wdHI7Ci0gICAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKHNpdGUtPmhvc3RuYW1lLCBjb25uLT5ob3N0Lm5hbWUpICYmCisgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKHNpdGUtPmhvc3RuYW1lLCBjb25uLT5ob3N0Lm5hbWUpICYmCiAgICAgICAgICAgIHNpdGUtPnBvcnQgPT0gY29ubi0+cmVtb3RlX3BvcnQpIHsKICAgICAgICAgICBpbmZvZihoYW5kbGUsICJTaXRlICVzOiVkIGlzIHBpcGVsaW5lIGJsYWNrbGlzdGVkXG4iLAogICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAgICAgICAgIGNoYXIgKmJsX3NlcnZlcl9uYW1lOwogCiAgICAgICAgIGJsX3NlcnZlcl9uYW1lID0gY3Vyci0+cHRyOwotICAgICAgICBpZihDdXJsX3Jhd19uZXF1YWwoYmxfc2VydmVyX25hbWUsIHNlcnZlcl9uYW1lLAorICAgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoYmxfc2VydmVyX25hbWUsIHNlcnZlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGJsX3NlcnZlcl9uYW1lKSkpIHsKICAgICAgICAgICBpbmZvZihoYW5kbGUsICJTZXJ2ZXIgJXMgaXMgYmxhY2tsaXN0ZWRcbiIsIHNlcnZlcl9uYW1lKTsKICAgICAgICAgICByZXR1cm4gVFJVRTsKZGlmZiAtLWdpdCBhL2xpYi9wb3AzLmMgYi9saWIvcG9wMy5jCmluZGV4IDU5MWU4NzcuLjliYjY5MWMgMTAwNjQ0Ci0tLSBhL2xpYi9wb3AzLmMKKysrIGIvbGliL3BvcDMuYwpAQCAtNzAsMTYgKzcwLDE0IEBACiAjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KICNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgInBvcDMuaCIKLQogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJzdHJlcnJvci5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKICNpbmNsdWRlICJjdXJsX3Nhc2wuaCIKICNpbmNsdWRlICJjdXJsX21kNS5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCkBAIC0xMDYsNyArMTA0LDcgQEAKIHN0YXRpYyBDVVJMY29kZSBwb3AzX3BlcmZvcm1fYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKm1lY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJlc3ApOwogc3RhdGljIENVUkxjb2RlIHBvcDNfY29udGludWVfYXV0aChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNvbnN0IGNoYXIgKnJlc3ApOwotc3RhdGljIHZvaWQgcG9wM19nZXRfbWVzc2FnZShjaGFyICpidWZmZXIsIGNoYXIqKiBvdXRwdHIpOworc3RhdGljIHZvaWQgcG9wM19nZXRfbWVzc2FnZShjaGFyICpidWZmZXIsIGNoYXIgKipvdXRwdHIpOwogCiAvKgogICogUE9QMyBwcm90b2NvbCBoYW5kbGVyLgpAQCAtMjkyLDEwICsyOTAsMTAgQEAKICAqCiAgKiBHZXRzIHRoZSBhdXRoZW50aWNhdGlvbiBtZXNzYWdlIGZyb20gdGhlIHJlc3BvbnNlIGJ1ZmZlci4KICAqLwotc3RhdGljIHZvaWQgcG9wM19nZXRfbWVzc2FnZShjaGFyICpidWZmZXIsIGNoYXIqKiBvdXRwdHIpCitzdGF0aWMgdm9pZCBwb3AzX2dldF9tZXNzYWdlKGNoYXIgKmJ1ZmZlciwgY2hhciAqKm91dHB0cikKIHsKICAgc2l6ZV90IGxlbiA9IDA7Ci0gIGNoYXIqIG1lc3NhZ2UgPSBOVUxMOworICBjaGFyICptZXNzYWdlID0gTlVMTDsKIAogICAvKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSAqLwogICBmb3IobWVzc2FnZSA9IGJ1ZmZlciArIDI7ICptZXNzYWdlID09ICcgJyB8fCAqbWVzc2FnZSA9PSAnXHQnOyBtZXNzYWdlKyspCkBAIC02NjMsNyArNjYxLDcgQEAKIAogICBpZihwb3AzY29kZSAhPSAnKycpIHsKICAgICBmYWlsZihkYXRhLCAiR290IHVuZXhwZWN0ZWQgcG9wMy1zZXJ2ZXIgcmVzcG9uc2UiKTsKLSAgICByZXN1bHQgPSBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgfQogICBlbHNlIHsKICAgICAvKiBEb2VzIHRoZSBzZXJ2ZXIgc3VwcG9ydCBBUE9QIGF1dGhlbnRpY2F0aW9uPyAqLwpAQCAtMTQxMiwxMSArMTQxMCwxMSBAQAogICAgIHdoaWxlKCpwdHIgJiYgKnB0ciAhPSAnOycpCiAgICAgICBwdHIrKzsKIAotICAgIGlmKHN0cm5lcXVhbChrZXksICJBVVRIPSIsIDUpKSB7CisgICAgaWYoc3RybmNhc2Vjb21wYXJlKGtleSwgIkFVVEg9IiwgNSkpIHsKICAgICAgIHJlc3VsdCA9IEN1cmxfc2FzbF9wYXJzZV91cmxfYXV0aF9vcHRpb24oJnBvcDNjLT5zYXNsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgcHRyIC0gdmFsdWUpOwogCi0gICAgICBpZihyZXN1bHQgJiYgc3RybmVxdWFsKHZhbHVlLCAiK0FQT1AiLCBwdHIgLSB2YWx1ZSkpIHsKKyAgICAgIGlmKHJlc3VsdCAmJiBzdHJuY2FzZWNvbXBhcmUodmFsdWUsICIrQVBPUCIsIHB0ciAtIHZhbHVlKSkgewogICAgICAgICBwb3AzYy0+cHJlZnR5cGUgPSBQT1AzX1RZUEVfQVBPUDsKICAgICAgICAgcG9wM2MtPnNhc2wucHJlZm1lY2ggPSBTQVNMX0FVVEhfTk9ORTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT0s7CkBAIC0xNTc0LDcgKzE1NzIsNyBAQAogICAgICAgaWYocHJldikgewogICAgICAgICAvKiBJZiB0aGUgcGFydGlhbCBtYXRjaCB3YXMgdGhlIENSTEYgYW5kIGRvdCB0aGVuIG9ubHkgd3JpdGUgdGhlIENSTEYKICAgICAgICAgICAgYXMgdGhlIHNlcnZlciB3b3VsZCBoYXZlIGluc2VydGVkIHRoZSBkb3QgKi8KLSAgICAgICAgcmVzdWx0ID0gQ3VybF9jbGllbnRfd3JpdGUoY29ubiwgQ0xJRU5UV1JJVEVfQk9EWSwgKGNoYXIqKVBPUDNfRU9CLAorICAgICAgICByZXN1bHQgPSBDdXJsX2NsaWVudF93cml0ZShjb25uLCBDTElFTlRXUklURV9CT0RZLCAoY2hhciAqKVBPUDNfRU9CLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcF9kb3QgPyBwcmV2IC0gMSA6IHByZXYpOwogCiAgICAgICAgIGlmKHJlc3VsdCkKZGlmZiAtLWdpdCBhL2xpYi9wcm9ncmVzcy5jIGIvbGliL3Byb2dyZXNzLmMKaW5kZXggNzYwY2ExYy4uNjA2MjdiMiAxMDA2NDQKLS0tIGEvbGliL3Byb2dyZXNzLmMKKysrIGIvbGliL3Byb2dyZXNzLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIxNiwxOCArMjE2LDk1IEBACiB7CiAgIGRhdGEtPnByb2dyZXNzLnNwZWVkZXJfYyA9IDA7IC8qIHJlc2V0IHRoZSBwcm9ncmVzcyBtZXRlciBkaXNwbGF5ICovCiAgIGRhdGEtPnByb2dyZXNzLnN0YXJ0ID0gQ3VybF90dm5vdygpOworICBkYXRhLT5wcm9ncmVzcy51bF9saW1pdF9zdGFydC50dl9zZWMgPSAwOworICBkYXRhLT5wcm9ncmVzcy51bF9saW1pdF9zdGFydC50dl91c2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc3RhcnQudHZfc2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc3RhcnQudHZfdXNlYyA9IDA7CiAgIC8qIGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBISURFIGFuZCBIRUFERVJTX09VVCAqLwogICBkYXRhLT5wcm9ncmVzcy5mbGFncyAmPSBQR1JTX0hJREV8UEdSU19IRUFERVJTX09VVDsKIH0KIAorLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgc3BlZWQgbGltaXRzLCBjYWxjdWxhdGluZyBob3cgbXVjaCBtaWxsaXNlY29uZHMgd2UKKyAqIG5lZWQgdG8gd2FpdCB1bnRpbCB3ZSdyZSBiYWNrIHVuZGVyIHRoZSBzcGVlZCBsaW1pdCwgaWYgbmVlZGVkLgorICoKKyAqIFRoZSB3YXkgaXQgd29ya3MgaXMgYnkgaGF2aW5nIGEgInN0YXJ0aW5nIHBvaW50IiAodGltZSAmIGFtb3VudCBvZiBkYXRhCisgKiB0cmFuc2ZlcmVkIGJ5IHRoZW4pIHVzZWQgaW4gdGhlIHNwZWVkIGNvbXB1dGF0aW9uLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlCisgKiBzdGFydCBvZiB0aGUgdHJhbnNmZXIuCisgKiBUaGlzIHN0YXJ0aW5nIHBvaW50IGlzIHJlZ3VsYXJseSBtb3ZlZCBhcyB0cmFuc2ZlciBnb2VzIG9uLCB0byBrZWVwIGdldHRpbmcKKyAqIGFjY3VyYXRlIHZhbHVlcyAoaW5zdGVhZCBvZiBhdmVyYWdlIG92ZXIgdGhlIGVudGlyZSB0cmFuZmVyKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjdXJyZW50IGFtb3VudCBvZiBkYXRhIHRyYW5zZmVyZWQsIHRoZSBhbW91bnQgYXQgdGhlCisgKiBzdGFydGluZyBwb2ludCwgdGhlIGxpbWl0IChpbiBieXRlcy9zKSwgdGhlIHRpbWUgb2YgdGhlIHN0YXJ0aW5nIHBvaW50IGFuZAorICogdGhlIGN1cnJlbnQgdGltZS4KKyAqCisgKiBSZXR1cm5zIC0xIGlmIG5vIHdhaXRpbmcgaXMgbmVlZGVkIChub3QgZW5vdWdoIGRhdGEgdHJhbnNmZXJlZCBzaW5jZQorICogc3RhcnRpbmcgcG9pbnQgeWV0KSwgMCB3aGVuIG5vIHdhaXRpbmcgaXMgbmVlZGVkIGJ1dCB0aGUgc3RhcnRpbmcgcG9pbnQKKyAqIHNob3VsZCBiZSByZXNldCAodG8gY3VycmVudCksIG9yIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdG8gZ2V0CisgKiBiYWNrIHVuZGVyIHRoZSBzcGVlZCBsaW1pdC4KKyAqLworbG9uZyBDdXJsX3BncnNMaW1pdFdhaXRUaW1lKGN1cmxfb2ZmX3QgY3Vyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IHN0YXJ0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJsX29mZl90IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdykKK3sKKyAgY3VybF9vZmZfdCBzaXplID0gY3Vyc2l6ZSAtIHN0YXJ0c2l6ZTsKKyAgdGltZV90IG1pbmltdW07CisgIHRpbWVfdCBhY3R1YWw7CisKKyAgLyogd2UgZG9uJ3QgaGF2ZSBhIHN0YXJ0aW5nIHBvaW50IHlldCAtLSByZXR1cm4gMCBzbyBpdCBnZXRzIChyZSlzZXQgKi8KKyAgaWYoc3RhcnQudHZfc2VjID09IDAgJiYgc3RhcnQudHZfdXNlYyA9PSAwKQorICAgIHJldHVybiAwOworCisgIC8qIG5vdCBlbm91Z2ggZGF0YSB5ZXQgKi8KKyAgaWYoc2l6ZSA8IGxpbWl0KQorICAgIHJldHVybiAtMTsKKworICBtaW5pbXVtID0gKHRpbWVfdCkgKENVUkxfT0ZGX1RfQygxMDAwKSAqIHNpemUgLyBsaW1pdCk7CisgIGFjdHVhbCA9IEN1cmxfdHZkaWZmKG5vdywgc3RhcnQpOworCisgIGlmKGFjdHVhbCA8IG1pbmltdW0pCisgICAgLyogdGhpcyBpcyBhIGNvbnZlcnNpb24gb24gc29tZSBzeXN0ZW1zICg2NGJpdCB0aW1lX3QgPT4gMzJiaXQgbG9uZykgKi8KKyAgICByZXR1cm4gKGxvbmcpKG1pbmltdW0gLSBhY3R1YWwpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgQ3VybF9wZ3JzU2V0RG93bmxvYWRDb3VudGVyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGN1cmxfb2ZmX3Qgc2l6ZSkKIHsKKyAgc3RydWN0IHRpbWV2YWwgbm93ID0gQ3VybF90dm5vdygpOworCiAgIGRhdGEtPnByb2dyZXNzLmRvd25sb2FkZWQgPSBzaXplOworCisgIC8qIGRvd25sb2FkIHNwZWVkIGxpbWl0ICovCisgIGlmKChkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQgPiAwKSAmJgorICAgICAoQ3VybF9wZ3JzTGltaXRXYWl0VGltZShkYXRhLT5wcm9ncmVzcy5kb3dubG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy5kbF9saW1pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubWF4X3JlY3Zfc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLmRsX2xpbWl0X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cpID09IDApKSB7CisgICAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc3RhcnQgPSBub3c7CisgICAgZGF0YS0+cHJvZ3Jlc3MuZGxfbGltaXRfc2l6ZSA9IHNpemU7CisgIH0KIH0KIAogdm9pZCBDdXJsX3BncnNTZXRVcGxvYWRDb3VudGVyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGN1cmxfb2ZmX3Qgc2l6ZSkKIHsKKyAgc3RydWN0IHRpbWV2YWwgbm93ID0gQ3VybF90dm5vdygpOworCiAgIGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkID0gc2l6ZTsKKworICAvKiB1cGxvYWQgc3BlZWQgbGltaXQgKi8KKyAgaWYoKGRhdGEtPnNldC5tYXhfc2VuZF9zcGVlZCA+IDApICYmCisgICAgIChDdXJsX3BncnNMaW1pdFdhaXRUaW1lKGRhdGEtPnByb2dyZXNzLnVwbG9hZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5wcm9ncmVzcy51bF9saW1pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQubWF4X3NlbmRfc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnByb2dyZXNzLnVsX2xpbWl0X3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cpID09IDApKSB7CisgICAgZGF0YS0+cHJvZ3Jlc3MudWxfbGltaXRfc3RhcnQgPSBub3c7CisgICAgZGF0YS0+cHJvZ3Jlc3MudWxfbGltaXRfc2l6ZSA9IHNpemU7CisgIH0KIH0KIAogdm9pZCBDdXJsX3BncnNTZXREb3dubG9hZFNpemUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgY3VybF9vZmZfdCBzaXplKQpAQCAtMjg0LDkgKzM2MSw3IEBACiAgIG5vdyA9IEN1cmxfdHZub3coKTsgLyogd2hhdCB0aW1lIGlzIGl0ICovCiAKICAgLyogVGhlIHRpbWUgc3BlbnQgc28gZmFyIChmcm9tIHRoZSBzdGFydCkgKi8KLSAgZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50ID0KLSAgICAoZG91YmxlKShub3cudHZfc2VjIC0gZGF0YS0+cHJvZ3Jlc3Muc3RhcnQudHZfc2VjKSArCi0gICAgKGRvdWJsZSkobm93LnR2X3VzZWMgLSBkYXRhLT5wcm9ncmVzcy5zdGFydC50dl91c2VjKS8xMDAwMDAwLjA7CisgIGRhdGEtPnByb2dyZXNzLnRpbWVzcGVudCA9IGN1cmx4X3R2ZGlmZl9zZWNzKG5vdywgZGF0YS0+cHJvZ3Jlc3Muc3RhcnQpOwogICB0aW1lc3BlbnQgPSAoY3VybF9vZmZfdClkYXRhLT5wcm9ncmVzcy50aW1lc3BlbnQ7CiAKICAgLyogVGhlIGF2ZXJhZ2UgZG93bmxvYWQgc3BlZWQgdGhpcyBmYXIgKi8KQEAgLTMwMCw3ICszNzUsNyBAQAogICAgICAoZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50PjA/ZGF0YS0+cHJvZ3Jlc3MudGltZXNwZW50OjEpKTsKIAogICAvKiBDYWxjdWxhdGlvbnMgZG9uZSBhdCBtb3N0IG9uY2UgYSBzZWNvbmQsIHVubGVzcyBlbmQgaXMgcmVhY2hlZCAqLwotICBpZihkYXRhLT5wcm9ncmVzcy5sYXN0c2hvdyAhPSAobG9uZylub3cudHZfc2VjKSB7CisgIGlmKGRhdGEtPnByb2dyZXNzLmxhc3RzaG93ICE9IG5vdy50dl9zZWMpIHsKICAgICBzaG93bm93ID0gVFJVRTsKIAogICAgIGRhdGEtPnByb2dyZXNzLmxhc3RzaG93ID0gbm93LnR2X3NlYzsKQEAgLTMyNyw3ICs0MDIsNyBAQAogCiAgICAgLyogZmlyc3Qgb2YgYWxsLCB3ZSBkb24ndCBkbyB0aGlzIGlmIHRoZXJlJ3Mgbm8gY291bnRlZCBzZWNvbmRzIHlldCAqLwogICAgIGlmKGNvdW50aW5kZXgpIHsKLSAgICAgIGxvbmcgc3Bhbl9tczsKKyAgICAgIHRpbWVfdCBzcGFuX21zOwogCiAgICAgICAvKiBHZXQgdGhlIGluZGV4IHBvc2l0aW9uIHRvIGNvbXBhcmUgd2l0aCB0aGUgJ25vd2luZGV4JyBwb3NpdGlvbi4KICAgICAgICAgIEdldCB0aGUgb2xkZXN0IGVudHJ5IHBvc3NpYmxlLiBXaGlsZSB3ZSBoYXZlIGxlc3MgdGhhbiBDVVJSX1RJTUUKZGlmZiAtLWdpdCBhL2xpYi9wcm9ncmVzcy5oIGIvbGliL3Byb2dyZXNzLmgKaW5kZXggYTc3YjdjZS4uMTU1ZmYwNCAxMDA2NDQKLS0tIGEvbGliL3Byb2dyZXNzLmgKKysrIGIvbGliL3Byb2dyZXNzLmgKQEAgLTQ5LDcgKzQ5LDExIEBACiBpbnQgQ3VybF9wZ3JzVXBkYXRlKHN0cnVjdCBjb25uZWN0ZGF0YSAqKTsKIHZvaWQgQ3VybF9wZ3JzUmVzZXRUaW1lc1NpemVzKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpOwogdm9pZCBDdXJsX3BncnNUaW1lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHRpbWVyaWQgdGltZXIpOwotCitsb25nIEN1cmxfcGdyc0xpbWl0V2FpdFRpbWUoY3VybF9vZmZfdCBjdXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3Qgc3RhcnRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfb2ZmX3QgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93KTsKIAogLyogRG9uJ3Qgc2hvdyBwcm9ncmVzcyBmb3Igc2l6ZXMgc21hbGxlciB0aGFuOiAqLwogI2RlZmluZSBMRUFTVF9TSVpFX1BST0dSRVNTIEJVRlNJWkUKZGlmZiAtLWdpdCBhL2xpYi9yYW5kLmMgYi9saWIvcmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzE2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcmFuZC5jCkBAIC0wLDAgKzEsMTMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjdXJsX3NldHVwLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAidnRscy92dGxzLmgiCisjaW5jbHVkZSAic2VuZGYuaCIKKyNpbmNsdWRlICJyYW5kLmgiCisKKy8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KKyNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworc3RhdGljIENVUkxjb2RlIHJhbmRpdChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCB1bnNpZ25lZCBpbnQgKnJuZCkKK3sKKyAgdW5zaWduZWQgaW50IHI7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOworICBzdGF0aWMgdW5zaWduZWQgaW50IHJhbmRzZWVkOworICBzdGF0aWMgYm9vbCBzZWVkZWQgPSBGQUxTRTsKKworI2lmZGVmIENVUkxERUJVRworICBjaGFyICpmb3JjZV9lbnRyb3B5ID0gZ2V0ZW52KCJDVVJMX0VOVFJPUFkiKTsKKyAgaWYoZm9yY2VfZW50cm9weSkgeworICAgIGlmKCFzZWVkZWQpIHsKKyAgICAgIHNpemVfdCBlbGVuID0gc3RybGVuKGZvcmNlX2VudHJvcHkpOworICAgICAgc2l6ZV90IGNsZW4gPSBzaXplb2YocmFuZHNlZWQpOworICAgICAgc2l6ZV90IG1pbiA9IGVsZW4gPCBjbGVuID8gZWxlbiA6IGNsZW47CisgICAgICBtZW1jcHkoKGNoYXIgKikmcmFuZHNlZWQsIGZvcmNlX2VudHJvcHksIG1pbik7CisgICAgICBzZWVkZWQgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgICByYW5kc2VlZCsrOworICAgICpybmQgPSByYW5kc2VlZDsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KKyNlbmRpZgorCisgIC8qIGRhdGEgbWF5IGJlIE5VTEwhICovCisgIHJlc3VsdCA9IEN1cmxfc3NsX3JhbmRvbShkYXRhLCAodW5zaWduZWQgY2hhciAqKSZybmQsIHNpemVvZihybmQpKTsKKyAgaWYocmVzdWx0ICE9IENVUkxFX05PVF9CVUlMVF9JTikKKyAgICAvKiBvbmx5IGlmIHRoZXJlIGlzIG5vIHJhbmRvbSBmdW50aW9uIGluIHRoZSBUTFMgYmFja2VuZCBkbyB0aGUgbm9uIGNyeXB0bworICAgICAgIHZlcnNpb24sIG90aGVyd2lzZSByZXR1cm4gcmVzdWx0ICovCisgICAgcmV0dXJuIHJlc3VsdDsKKworICAvKiAtLS0tIG5vbi1jcnlwdG9ncmFwaGljIHZlcnNpb24gZm9sbG93aW5nIC0tLS0gKi8KKworI2lmZGVmIFJBTkRPTV9GSUxFCisgIGlmKCFzZWVkZWQpIHsKKyAgICAvKiBpZiB0aGVyZSdzIGEgcmFuZG9tIGZpbGUgdG8gcmVhZCBhIHNlZWQgZnJvbSwgdXNlIGl0ICovCisgICAgaW50IGZkID0gb3BlbihSQU5ET01fRklMRSwgT19SRE9OTFkpOworICAgIGlmKGZkID4gLTEpIHsKKyAgICAgIC8qIHJlYWQgcmFuZG9tIGRhdGEgaW50byB0aGUgcmFuZHNlZWQgdmFyaWFibGUgKi8KKyAgICAgIHNzaXplX3QgbnJlYWQgPSByZWFkKGZkLCAmcmFuZHNlZWQsIHNpemVvZihyYW5kc2VlZCkpOworICAgICAgaWYobnJlYWQgPT0gc2l6ZW9mKHJhbmRzZWVkKSkKKyAgICAgICAgc2VlZGVkID0gVFJVRTsKKyAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGlmKCFzZWVkZWQpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCBub3cgPSBjdXJseF90dm5vdygpOworICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBVc2luZyB3ZWFrIHJhbmRvbSBzZWVkXG4iKTsKKyAgICByYW5kc2VlZCArPSAodW5zaWduZWQgaW50KW5vdy50dl91c2VjICsgKHVuc2lnbmVkIGludClub3cudHZfc2VjOworICAgIHJhbmRzZWVkID0gcmFuZHNlZWQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7CisgICAgcmFuZHNlZWQgPSByYW5kc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKyAgICByYW5kc2VlZCA9IHJhbmRzZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1OworICAgIHNlZWRlZCA9IFRSVUU7CisgIH0KKworICAvKiBSZXR1cm4gYW4gdW5zaWduZWQgMzItYml0IHBzZXVkby1yYW5kb20gbnVtYmVyLiAqLworICByID0gcmFuZHNlZWQgPSByYW5kc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKyAgKnJuZCA9IChyIDw8IDE2KSB8ICgociA+PiAxNikgJiAweEZGRkYpOworICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8qCisgKiBDdXJsX3JhbmQoKSBzdG9yZXMgJ251bScgbnVtYmVyIG9mIHJhbmRvbSB1bnNpZ25lZCBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyCisgKiAncm5kcHRyJyBwb2ludHMgdG8uCisgKgorICogSWYgbGliY3VybCBpcyBidWlsdCB3aXRob3V0IFRMUyBzdXBwb3J0IG9yIHdpdGggYSBUTFMgYmFja2VuZCB0aGF0IGxhY2tzIGEKKyAqIHByb3BlciByYW5kb20gQVBJIChHc2tpdCwgUG9sYXJTU0wgb3IgbWJlZFRMUyksIHRoaXMgZnVuY3Rpb24gd2lsbCB1c2UKKyAqICJ3ZWFrIiByYW5kb20uCisgKgorICogV2hlbiBidWlsdCAqd2l0aCogVExTIHN1cHBvcnQgYW5kIGEgYmFja2VuZCB0aGF0IG9mZmVycyBzdHJvbmcgcmFuZG9tLCBpdAorICogd2lsbCByZXR1cm4gZXJyb3IgaWYgaXQgY2Fubm90IHByb3ZpZGUgc3Ryb25nIHJhbmRvbSB2YWx1ZXMuCisgKgorICogTk9URTogJ2RhdGEnIG1heSBiZSBwYXNzZWQgaW4gYXMgTlVMTCB3aGVuIGNvbWluZyBmcm9tIGV4dGVybmFsIEFQSSB3aXRob3V0CisgKiBlYXN5IGhhbmRsZSEKKyAqCisgKi8KKworQ1VSTGNvZGUgQ3VybF9yYW5kKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHVuc2lnbmVkIGludCAqcm5kcHRyLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW0pCit7CisgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgYXNzZXJ0KG51bSA+IDApOworCisgIGZvcihpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgcmVzdWx0ID0gcmFuZGl0KGRhdGEsIHJuZHB0cisrKTsKKyAgICBpZihyZXN1bHQpCisgICAgICByZXR1cm4gcmVzdWx0OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWIvcmFuZC5oIGIvbGliL3JhbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjg5ODYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3JhbmQuaApAQCAtMCwwICsxLDQzIEBACisjaWZuZGVmIEhFQURFUl9DVVJMX1JBTkRfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9SQU5EX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KKyAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kb2NzL2NvcHlyaWdodC5odG1sLgorICoKKyAqIFlvdSBtYXkgb3B0IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ09QWUlORyBmaWxlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEN1cmxfcmFuZCgpIHN0b3JlcyAnbnVtJyBudW1iZXIgb2YgcmFuZG9tIHVuc2lnbmVkIGludGVnZXJzIGluIHRoZSBidWZmZXIKKyAqICdybmQnIHBvaW50cyB0by4KKyAqCisgKiBJZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgVExTIHN1cHBvcnQgb3Igd2l0aCBhIFRMUyBiYWNrZW5kIHRoYXQgbGFja3MgYQorICogcHJvcGVyIHJhbmRvbSBBUEkgKEdza2l0LCBQb2xhclNTTCBvciBtYmVkVExTKSwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQorICogIndlYWsiIHJhbmRvbS4KKyAqCisgKiBXaGVuIGJ1aWx0ICp3aXRoKiBUTFMgc3VwcG9ydCBhbmQgYSBiYWNrZW5kIHRoYXQgb2ZmZXJzIHN0cm9uZyByYW5kb20sIGl0CisgKiB3aWxsIHJldHVybiBlcnJvciBpZiBpdCBjYW5ub3QgcHJvdmlkZSBzdHJvbmcgcmFuZG9tIHZhbHVlcy4KKyAqCisgKiBOT1RFOiAnZGF0YScgbWF5IGJlIHBhc3NlZCBpbiBhcyBOVUxMIHdoZW4gY29taW5nIGZyb20gZXh0ZXJuYWwgQVBJIHdpdGhvdXQKKyAqIGVhc3kgaGFuZGxlIQorICoKKyAqLworQ1VSTGNvZGUgQ3VybF9yYW5kKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHVuc2lnbmVkIGludCAqcm5kLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW0pOworCisjZW5kaWYgLyogSEVBREVSX0NVUkxfUkFORF9IICovCmRpZmYgLS1naXQgYS9saWIvcnRzcC5jIGIvbGliL3J0c3AuYwppbmRleCAyNzk1NWJjLi41ZGEzM2Q0IDEwMDY0NAotLS0gYS9saWIvcnRzcC5jCisrKyBiL2xpYi9ydHNwLmMKQEAgLTMzLDkgKzMzLDEwIEBACiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJydHNwLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzdHJkdXAuaCIKIC8qIFRoZSBsYXN0IDMgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoaXMgb3JkZXIgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC0xNDcsNyArMTQ4LDcgQEAKICAgaW50IHN2YWw7CiAgIGJvb2wgcmV0X3ZhbCA9IFRSVUU7CiAKLSAgc3ZhbCA9IEN1cmxfc29ja2V0X3JlYWR5KGNoZWNrLT5zb2NrW0ZJUlNUU09DS0VUXSwgQ1VSTF9TT0NLRVRfQkFELCAwKTsKKyAgc3ZhbCA9IFNPQ0tFVF9SRUFEQUJMRShjaGVjay0+c29ja1tGSVJTVFNPQ0tFVF0sIDApOwogICBpZihzdmFsID09IDApIHsKICAgICAvKiB0aW1lb3V0ICovCiAgICAgcmV0X3ZhbCA9IEZBTFNFOwpAQCAtNjE0LDkgKzYxNSw5IEBACiAKICAgaWYocnRzcGMtPnJ0cF9idWYpIHsKICAgICAvKiBUaGVyZSB3YXMgc29tZSBsZWZ0b3ZlciBkYXRhIHRoZSBsYXN0IHRpbWUuIE1lcmdlIGJ1ZmZlcnMgKi8KLSAgICBjaGFyICpuZXdwdHIgPSByZWFsbG9jKHJ0c3BjLT5ydHBfYnVmLCBydHNwYy0+cnRwX2J1ZnNpemUgKyAqbnJlYWQpOworICAgIGNoYXIgKm5ld3B0ciA9IEN1cmxfc2FmZXJlYWxsb2MocnRzcGMtPnJ0cF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydHNwYy0+cnRwX2J1ZnNpemUgKyAqbnJlYWQpOwogICAgIGlmKCFuZXdwdHIpIHsKLSAgICAgIEN1cmxfc2FmZWZyZWUocnRzcGMtPnJ0cF9idWYpOwogICAgICAgcnRzcGMtPnJ0cF9idWYgPSBOVUxMOwogICAgICAgcnRzcGMtPnJ0cF9idWZzaXplID0gMDsKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtNzk2LDE5ICs3OTcsMTUgQEAKICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAvKiBJZiB0aGUgU2Vzc2lvbiBJRCBpcyBub3Qgc2V0LCBhbmQgd2UgZmluZCBpdCBpbiBhIHJlc3BvbnNlLCB0aGVuCi0gICAgICAgICBzZXQgaXQgKi8KLQotICAgICAgLyogVGhlIHNlc3Npb24gSUQgY2FuIGJlIGFuIGFscGhhbnVtZXJpYyBvciBhICdzYWZlJyBjaGFyYWN0ZXIKKyAgICAgIC8qIElmIHRoZSBTZXNzaW9uIElEIGlzIG5vdCBzZXQsIGFuZCB3ZSBmaW5kIGl0IGluIGEgcmVzcG9uc2UsIHRoZW4gc2V0CisgICAgICAgKiBpdC4KICAgICAgICAqCi0gICAgICAgKiBSRkMgMjMyNiAxNS4xIEJhc2UgU3ludGF4OgotICAgICAgICogc2FmZSA9ICAiXCQiIHwgIi0iIHwgIl8iIHwgIi4iIHwgIisiCi0gICAgICAgKiAqLworICAgICAgICogQWxsb3cgYW55IG5vbiB3aGl0ZXNwYWNlIGNvbnRlbnQsIHVwIHRvIHRoZSBmaWVsZCBzZXBlcmF0b3Igb3IgZW5kIG9mCisgICAgICAgKiBsaW5lLiBSRkMgMjMyNiBpc24ndCAxMDAlIGNsZWFyIG9uIHRoZSBzZXNzaW9uIElEIGFuZCBmb3IgZXhhbXBsZQorICAgICAgICogZ3N0cmVhbWVyIGRvZXMgdXJsLWVuY29kZWQgc2Vzc2lvbiBJRCdzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqLwogICAgICAgY2hhciAqZW5kID0gc3RhcnQ7Ci0gICAgICB3aGlsZSgqZW5kICYmCi0gICAgICAgICAgICAoSVNBTE5VTSgqZW5kKSB8fCAqZW5kID09ICctJyB8fCAqZW5kID09ICdfJyB8fCAqZW5kID09ICcuJyB8fAotICAgICAgICAgICAgICplbmQgPT0gJysnIHx8Ci0gICAgICAgICAgICAgKCplbmQgPT0gJ1xcJyAmJiAqKGVuZCArIDEpICYmICooZW5kICsgMSkgPT0gJyQnICYmICgrK2VuZCwgMSkpKSkKKyAgICAgIHdoaWxlKCplbmQgJiYgKmVuZCAhPSAnOycgJiYgIUlTU1BBQ0UoKmVuZCkpCiAgICAgICAgIGVuZCsrOwogCiAgICAgICAvKiBDb3B5IHRoZSBpZCBzdWJzdHJpbmcgaW50byBhIG5ldyBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2xpYi9zZWN1cml0eS5jIGIvbGliL3NlY3VyaXR5LmMKaW5kZXggYTBiY2FlYS4uNGE4ZjQ0NCAxMDA2NDQKLS0tIGEvbGliL3NlY3VyaXR5LmMKKysrIGIvbGliL3NlY3VyaXR5LmMKQEAgLTYwLDkgKzYwLDkgQEAKICNpbmNsdWRlICJjdXJsX3NlYy5oIgogI2luY2x1ZGUgImZ0cC5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCi0KKyNpbmNsdWRlICJzdHJkdXAuaCIKIC8qIFRoZSBsYXN0ICNpbmNsdWRlIGZpbGUgc2hvdWxkIGJlOiAqLwogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKQEAgLTg4LDcgKzg4LDggQEAKIAogLyogQ29udmVydCBhIHByb3RvY29sIHxsZXZlbHwgdG8gaXRzIGNoYXIgcmVwcmVzZW50YXRpb24uCiAgICBXZSB0YWtlIGFuIGludCB0byBjYXRjaCBwcm9ncmFtbWluZyBtaXN0YWtlcy4gKi8KLXN0YXRpYyBjaGFyIGxldmVsX3RvX2NoYXIoaW50IGxldmVsKSB7CitzdGF0aWMgY2hhciBsZXZlbF90b19jaGFyKGludCBsZXZlbCkKK3sKICAgc3dpdGNoKGxldmVsKSB7CiAgIGNhc2UgUFJPVF9DTEVBUjoKICAgICByZXR1cm4gJ0MnOwpAQCAtMTIyLDcgKzEyMyw3IEBACiAgIHZzbnByaW50ZihwcmludF9idWZmZXIsIHNpemVvZihwcmludF9idWZmZXIpLCBtZXNzYWdlLCBhcmdzKTsKICAgdmFfZW5kKGFyZ3MpOwogCi0gIGlmKEN1cmxfZnRwc2VuZGYoY29ubiwgcHJpbnRfYnVmZmVyKSkgeworICBpZihDdXJsX2Z0cHNlbmQoY29ubiwgcHJpbnRfYnVmZmVyKSkgewogICAgIGZ0cF9jb2RlID0gLTE7CiAgIH0KICAgZWxzZSB7CkBAIC0xOTIsMTUgKzE5MywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3JiNWJ1ZmZlciAqYnVmKQogewogICBpbnQgbGVuOwotICB2b2lkKiB0bXA7CisgIHZvaWQgKnRtcCA9IE5VTEw7CiAgIENVUkxjb2RlIHJlc3VsdDsKIAogICByZXN1bHQgPSBzb2NrZXRfcmVhZChmZCwgJmxlbiwgc2l6ZW9mKGxlbikpOwogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAotICBsZW4gPSBudG9obChsZW4pOwotICB0bXAgPSByZWFsbG9jKGJ1Zi0+ZGF0YSwgbGVuKTsKKyAgaWYobGVuKSB7CisgICAgLyogb25seSByZWFsbG9jIGlmIHRoZXJlIHdhcyBhIGxlbmd0aCAqLworICAgIGxlbiA9IG50b2hsKGxlbik7CisgICAgdG1wID0gQ3VybF9zYWZlcmVhbGxvYyhidWYtPmRhdGEsIGxlbik7CisgIH0KICAgaWYodG1wID09IE5VTEwpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKQEAgLTIxOSw3ICsyMjMsNyBAQAogewogICBpZihidWYtPnNpemUgLSBidWYtPmluZGV4IDwgbGVuKQogICAgIGxlbiA9IGJ1Zi0+c2l6ZSAtIGJ1Zi0+aW5kZXg7Ci0gIG1lbWNweShkYXRhLCAoY2hhciopYnVmLT5kYXRhICsgYnVmLT5pbmRleCwgbGVuKTsKKyAgbWVtY3B5KGRhdGEsIChjaGFyICopYnVmLT5kYXRhICsgYnVmLT5pbmRleCwgbGVuKTsKICAgYnVmLT5pbmRleCArPSBsZW47CiAgIHJldHVybiBsZW47CiB9CkBAIC0yODgsNyArMjkyLDcgQEAKICAgICAgIHByb3RfbGV2ZWwgPSBjb25uLT5jb21tYW5kX3Byb3Q7CiAgIH0KICAgYnl0ZXMgPSBjb25uLT5tZWNoLT5lbmNvZGUoY29ubi0+YXBwX2RhdGEsIGZyb20sIGxlbmd0aCwgcHJvdF9sZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKikmYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopJmJ1ZmZlcik7CiAgIGlmKCFidWZmZXIgfHwgYnl0ZXMgPD0gMCkKICAgICByZXR1cm47IC8qIGVycm9yICovCiAKQEAgLTQwOCw3ICs0MTIsNyBAQAogc3RhdGljIGludCBzZWNfc2V0X3Byb3RlY3Rpb25fbGV2ZWwoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogewogICBpbnQgY29kZTsKLSAgY2hhciogcGJzejsKKyAgY2hhciAqcGJzejsKICAgc3RhdGljIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZSA9IDEgPDwgMjA7IC8qIDEwNDg1NzYgKi8KICAgZW51bSBwcm90ZWN0aW9uX2xldmVsIGxldmVsID0gY29ubi0+cmVxdWVzdF9kYXRhX3Byb3Q7CiAKZGlmZiAtLWdpdCBhL2xpYi9zZWxlY3QuYyBiL2xpYi9zZWxlY3QuYwppbmRleCBhYmY1NWQ4Li4wM2FmNjQ1IDEwMDY0NAotLS0gYS9saWIvc2VsZWN0LmMKKysrIGIvbGliL3NlbGVjdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC01MSwxNSArNTEsMTQgQEAKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogCiAvKiBDb252ZW5pZW5jZSBsb2NhbCBtYWNyb3MgKi8KLQotI2RlZmluZSBlbGFwc2VkX21zICAoaW50KWN1cmx4X3R2ZGlmZihjdXJseF90dm5vdygpLCBpbml0aWFsX3R2KQorI2RlZmluZSBFTEFQU0VEX01TKCkgIChpbnQpY3VybHhfdHZkaWZmKGN1cmx4X3R2bm93KCksIGluaXRpYWxfdHYpCiAKIGludCBDdXJsX2Fja19laW50ciA9IDA7Ci0jZGVmaW5lIGVycm9yX25vdF9FSU5UUiAoQ3VybF9hY2tfZWludHIgfHwgZXJyb3IgIT0gRUlOVFIpCisjZGVmaW5lIEVSUk9SX05PVF9FSU5UUihlcnJvcikgKEN1cmxfYWNrX2VpbnRyIHx8IGVycm9yICE9IEVJTlRSKQogCiAvKgogICogSW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3Igd2FpdGluZyBhIHNwZWNpZmljIGFtb3VudCBvZiBtcwotICogaW4gQ3VybF9zb2NrZXRfcmVhZHkoKSBhbmQgQ3VybF9wb2xsKCkgd2hlbiBubyBmaWxlIGRlc2NyaXB0b3IKKyAqIGluIEN1cmxfc29ja2V0X2NoZWNrKCkgYW5kIEN1cmxfcG9sbCgpIHdoZW4gbm8gZmlsZSBkZXNjcmlwdG9yCiAgKiBpcyBwcm92aWRlZCB0byB3YWl0IG9uLCBqdXN0IGJlaW5nIHVzZWQgdG8gZGVsYXkgZXhlY3V0aW9uLgogICogV2luU29jayBzZWxlY3QoKSBhbmQgcG9sbCgpIHRpbWVvdXQgbWVjaGFuaXNtcyBuZWVkIGEgdmFsaWQKICAqIHNvY2tldCBkZXNjcmlwdG9yIGluIGEgbm90IG51bGwgZmlsZSBkZXNjcmlwdG9yIHNldCB0byB3b3JrLgpAQCAtMTA5LDkgKzEwOCw5IEBACiAgICAgaWYociAhPSAtMSkKICAgICAgIGJyZWFrOwogICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIGVycm9yX25vdF9FSU5UUikKKyAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQogICAgICAgYnJlYWs7Ci0gICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBlbGFwc2VkX21zOworICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpOwogICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkgewogICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwogICAgICAgYnJlYWs7CkBAIC0xNDYsNyArMTQ1LDcgQEAKIGludCBDdXJsX3NvY2tldF9jaGVjayhjdXJsX3NvY2tldF90IHJlYWRmZDAsIC8qIHR3byBzb2NrZXRzIHRvIHJlYWQgZnJvbSAqLwogICAgICAgICAgICAgICAgICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkMSwKICAgICAgICAgICAgICAgICAgICAgICBjdXJsX3NvY2tldF90IHdyaXRlZmQsIC8qIHNvY2tldCB0byB3cml0ZSB0byAqLwotICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dF9tcykgICAgICAgLyogbWlsbGlzZWNvbmRzIHRvIHdhaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICB0aW1lX3QgdGltZW91dF9tcykgICAgIC8qIG1pbGxpc2Vjb25kcyB0byB3YWl0ICovCiB7CiAjaWZkZWYgSEFWRV9QT0xMX0ZJTkUKICAgc3RydWN0IHBvbGxmZCBwZmRbM107CkBAIC0xNjUsNiArMTY0LDEyIEBACiAgIGludCByOwogICBpbnQgcmV0OwogCisjaWYgU0laRU9GX0xPTkcgIT0gU0laRU9GX0lOVAorICAvKiB3cmFwLWFyb3VuZCBwcmVjYXV0aW9uICovCisgIGlmKHRpbWVvdXRfbXMgPj0gSU5UX01BWCkKKyAgICB0aW1lb3V0X21zID0gSU5UX01BWDsKKyNlbmRpZgorCiAgIGlmKChyZWFkZmQwID09IENVUkxfU09DS0VUX0JBRCkgJiYgKHJlYWRmZDEgPT0gQ1VSTF9TT0NLRVRfQkFEKSAmJgogICAgICAod3JpdGVmZCA9PSBDVVJMX1NPQ0tFVF9CQUQpKSB7CiAgICAgLyogbm8gc29ja2V0cywganVzdCB3YWl0ICovCkBAIC0yMTMsMTAgKzIxOCwxMCBAQAogICAgIGlmKHIgIT0gLTEpCiAgICAgICBicmVhazsKICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBlcnJvcl9ub3RfRUlOVFIpCisgICAgaWYoZXJyb3IgJiYgRVJST1JfTk9UX0VJTlRSKGVycm9yKSkKICAgICAgIGJyZWFrOwogICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIGVsYXBzZWRfbXMpOworICAgICAgcGVuZGluZ19tcyA9IChpbnQpKHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCkpOwogICAgICAgaWYocGVuZGluZ19tcyA8PSAwKSB7CiAgICAgICAgIHIgPSAwOyAgLyogU2ltdWxhdGUgYSAiY2FsbCB0aW1lZCBvdXQiIGNhc2UgKi8KICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTAgKzMzMywxMCBAQAogICAgIGlmKHIgIT0gLTEpCiAgICAgICBicmVhazsKICAgICBlcnJvciA9IFNPQ0tFUlJOTzsKLSAgICBpZihlcnJvciAmJiBlcnJvcl9ub3RfRUlOVFIpCisgICAgaWYoZXJyb3IgJiYgRVJST1JfTk9UX0VJTlRSKGVycm9yKSkKICAgICAgIGJyZWFrOwogICAgIGlmKHRpbWVvdXRfbXMgPiAwKSB7Ci0gICAgICBwZW5kaW5nX21zID0gdGltZW91dF9tcyAtIGVsYXBzZWRfbXM7CisgICAgICBwZW5kaW5nX21zID0gKGludCkodGltZW91dF9tcyAtIEVMQVBTRURfTVMoKSk7CiAgICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKICAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwogICAgICAgICBicmVhazsKQEAgLTQzNCwxMCArNDM5LDEwIEBACiAgICAgaWYociAhPSAtMSkKICAgICAgIGJyZWFrOwogICAgIGVycm9yID0gU09DS0VSUk5POwotICAgIGlmKGVycm9yICYmIGVycm9yX25vdF9FSU5UUikKKyAgICBpZihlcnJvciAmJiBFUlJPUl9OT1RfRUlOVFIoZXJyb3IpKQogICAgICAgYnJlYWs7CiAgICAgaWYodGltZW91dF9tcyA+IDApIHsKLSAgICAgIHBlbmRpbmdfbXMgPSB0aW1lb3V0X21zIC0gZWxhcHNlZF9tczsKKyAgICAgIHBlbmRpbmdfbXMgPSAoaW50KSh0aW1lb3V0X21zIC0gRUxBUFNFRF9NUygpKTsKICAgICAgIGlmKHBlbmRpbmdfbXMgPD0gMCkgewogICAgICAgICByID0gMDsgIC8qIFNpbXVsYXRlIGEgImNhbGwgdGltZWQgb3V0IiBjYXNlICovCiAgICAgICAgIGJyZWFrOwpAQCAtNTIxLDEwICs1MjYsMTAgQEAKICAgICBpZihyICE9IC0xKQogICAgICAgYnJlYWs7CiAgICAgZXJyb3IgPSBTT0NLRVJSTk87Ci0gICAgaWYoZXJyb3IgJiYgZXJyb3Jfbm90X0VJTlRSKQorICAgIGlmKGVycm9yICYmIEVSUk9SX05PVF9FSU5UUihlcnJvcikpCiAgICAgICBicmVhazsKICAgICBpZih0aW1lb3V0X21zID4gMCkgewotICAgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBlbGFwc2VkX21zOworICAgICAgcGVuZGluZ19tcyA9IHRpbWVvdXRfbXMgLSBFTEFQU0VEX01TKCk7CiAgICAgICBpZihwZW5kaW5nX21zIDw9IDApIHsKICAgICAgICAgciA9IDA7ICAvKiBTaW11bGF0ZSBhICJjYWxsIHRpbWVkIG91dCIgY2FzZSAqLwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2xpYi9zZWxlY3QuaCBiL2xpYi9zZWxlY3QuaAppbmRleCA2OTViYjY5Li5lMjQ3YmQ5IDEwMDY0NAotLS0gYS9saWIvc2VsZWN0LmgKKysrIGIvbGliL3NlbGVjdC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03MywxMSArNzMsMTIgQEAKIAogaW50IEN1cmxfc29ja2V0X2NoZWNrKGN1cmxfc29ja2V0X3QgcmVhZGZkLCBjdXJsX3NvY2tldF90IHJlYWRmZDIsCiAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCB3cml0ZWZkLAotICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dF9tcyk7CisgICAgICAgICAgICAgICAgICAgICAgdGltZV90IHRpbWVvdXRfbXMpOwogCi0vKiBwcm92aWRlIHRoZSBmb3JtZXIgQVBJIGludGVybmFsbHkgKi8KLSNkZWZpbmUgQ3VybF9zb2NrZXRfcmVhZHkoeCx5LHopIFwKLSAgQ3VybF9zb2NrZXRfY2hlY2soeCwgQ1VSTF9TT0NLRVRfQkFELCB5LCB6KQorI2RlZmluZSBTT0NLRVRfUkVBREFCTEUoeCx6KSBcCisgIEN1cmxfc29ja2V0X2NoZWNrKHgsIENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB6KQorI2RlZmluZSBTT0NLRVRfV1JJVEFCTEUoeCx6KSBcCisgIEN1cmxfc29ja2V0X2NoZWNrKENVUkxfU09DS0VUX0JBRCwgQ1VSTF9TT0NLRVRfQkFELCB4LCB6KQogCiBpbnQgQ3VybF9wb2xsKHN0cnVjdCBwb2xsZmQgdWZkc1tdLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXRfbXMpOwogCmRpZmYgLS1naXQgYS9saWIvc2VuZGYuYyBiL2xpYi9zZW5kZi5jCmluZGV4IDIxMDE3OTcuLjRmNTUyZTggMTAwNjQ0Ci0tLSBhL2xpYi9zZW5kZi5jCisrKyBiL2xpYi9zZW5kZi5jCkBAIC00ODgsNyArNDg4LDcgQEAKICAqLwogQ1VSTGNvZGUgQ3VybF9jbGllbnRfY2hvcF93cml0ZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpkaWZmIC0tZ2l0IGEvbGliL3NldHVwLW9zNDAwLmggYi9saWIvc2V0dXAtb3M0MDAuaAppbmRleCBlMzJiNzJmLi5hM2MyYTdiIDEwMDY0NAotLS0gYS9saWIvc2V0dXAtb3M0MDAuaAorKysgYi9saWIvc2V0dXAtb3M0MDAuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDEsMTggKzQxLDE4IEBACiAjaW5jbHVkZSA8cXNvYXN5bmMuaD4KICNpbmNsdWRlIDxnc3NhcGkuaD4KIAotZXh0ZXJuIGludCAgICAgIEN1cmxfZ2V0YWRkcmluZm9fYShjb25zdCBjaGFyICogbm9kZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzZXJ2bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICogaGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqICogcmVzKTsKK2V4dGVybiBpbnQgQ3VybF9nZXRhZGRyaW5mb19hKGNvbnN0IGNoYXIgKm5vZGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvICoqcmVzKTsKICNkZWZpbmUgZ2V0YWRkcmluZm8gICAgICAgICAgICAgQ3VybF9nZXRhZGRyaW5mb19hCiAKIAotZXh0ZXJuIGludCAgICAgIEN1cmxfZ2V0bmFtZWluZm9fYShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBzYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrbGVuX3Qgc2FsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBub2RlbmFtZSwgY3VybF9zb2NrbGVuX3Qgbm9kZW5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBzZXJ2bmFtZSwgY3VybF9zb2NrbGVuX3Qgc2Vydm5hbWVsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CitleHRlcm4gaW50IEN1cmxfZ2V0bmFtZWluZm9fYShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrbGVuX3Qgc2FsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpub2RlbmFtZSwgY3VybF9zb2NrbGVuX3Qgbm9kZW5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzZXJ2bmFtZSwgY3VybF9zb2NrbGVuX3Qgc2Vydm5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogI2RlZmluZSBnZXRuYW1laW5mbyAgICAgICAgICAgICBDdXJsX2dldG5hbWVpbmZvX2EKIAogCkBAIC03OSw3ICs3OSw3IEBACiAKIGV4dGVybiBpbnQgICAgICBDdXJsX2dza19hdHRyaWJ1dGVfc2V0X2J1ZmZlcl9hKGdza19oYW5kbGUgbXlfZ3NrX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTS19CVUZfSUQgYnVmSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZlNpemUpOwogI2RlZmluZSBnc2tfYXR0cmlidXRlX3NldF9idWZmZXIgICAgICAgIEN1cmxfZ3NrX2F0dHJpYnV0ZV9zZXRfYnVmZmVyX2EKIApAQCAtOTUsMjkgKzk1LDI5IEBACiAKIGV4dGVybiBpbnQgICAgICBDdXJsX2dza19hdHRyaWJ1dGVfc2V0X2NhbGxiYWNrKGdza19oYW5kbGUgbXlfZ3NrX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTS19DQUxMQkFDS19JRCBjYWxsQmFja0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGNhbGxCYWNrQXJlYVB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsQmFja0FyZWFQdHIpOwogI2RlZmluZSBnc2tfYXR0cmlidXRlX3NldF9jYWxsYmFjayAgICAgIEN1cmxfZ3NrX2F0dHJpYnV0ZV9zZXRfY2FsbGJhY2sKIAogZXh0ZXJuIGludCAgICAgIEN1cmxfZ3NrX2F0dHJpYnV0ZV9nZXRfYnVmZmVyX2EoZ3NrX2hhbmRsZSBteV9nc2tfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NLX0JVRl9JRCBidWZJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiAqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGJ1ZlNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYnVmU2l6ZSk7CiAjZGVmaW5lIGdza19hdHRyaWJ1dGVfZ2V0X2J1ZmZlciAgICAgICAgQ3VybF9nc2tfYXR0cmlidXRlX2dldF9idWZmZXJfYQogCiBleHRlcm4gaW50ICAgICAgQ3VybF9nc2tfYXR0cmlidXRlX2dldF9lbnVtKGdza19oYW5kbGUgbXlfZ3NrX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NLX0VOVU1fSUQgZW51bUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU0tfRU5VTV9WQUxVRSAqIGVudW1WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTS19FTlVNX1ZBTFVFICplbnVtVmFsdWUpOwogI2RlZmluZSBnc2tfYXR0cmlidXRlX2dldF9lbnVtICBDdXJsX2dza19hdHRyaWJ1dGVfZ2V0X2VudW0KIAogZXh0ZXJuIGludCAgICAgIEN1cmxfZ3NrX2F0dHJpYnV0ZV9nZXRfbnVtZXJpY192YWx1ZShnc2tfaGFuZGxlIG15X2dza19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTS19OVU1fSUQgbnVtSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIG51bVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1WYWx1ZSk7CiAjZGVmaW5lIGdza19hdHRyaWJ1dGVfZ2V0X251bWVyaWNfdmFsdWUgQ3VybF9nc2tfYXR0cmlidXRlX2dldF9udW1lcmljX3ZhbHVlCiAKIGV4dGVybiBpbnQgICAgICBDdXJsX2dza19hdHRyaWJ1dGVfZ2V0X2NlcnRfaW5mbyhnc2tfaGFuZGxlIG15X2dza19oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU0tfQ0VSVF9JRCBjZXJ0SUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnc2tfY2VydF9kYXRhX2VsZW0gKiAqIGNlcnREYXRhRWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGNlcnREYXRhRWxlbWVudENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdza19jZXJ0X2RhdGFfZWxlbSAqKmNlcnREYXRhRWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY2VydERhdGFFbGVtZW50Q291bnQpOwogI2RlZmluZSBnc2tfYXR0cmlidXRlX2dldF9jZXJ0X2luZm8gICAgIEN1cmxfZ3NrX2F0dHJpYnV0ZV9nZXRfY2VydF9pbmZvCiAKIGV4dGVybiBpbnQgICAgICBDdXJsX2dza19zZWN1cmVfc29jX21pc2MoZ3NrX2hhbmRsZSBteV9zZXNzaW9uX2hhbmRsZSwKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAjZGVmaW5lIGdza19zZWN1cmVfc29jX21pc2MgICAgIEN1cmxfZ3NrX3NlY3VyZV9zb2NfbWlzYwogCiBleHRlcm4gaW50ICAgICAgQ3VybF9nc2tfc2VjdXJlX3NvY19yZWFkKGdza19oYW5kbGUgbXlfc2Vzc2lvbl9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiByZWFkQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVhZEJ1ZlNpemUsIGludCAqIGFtdFJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZWFkQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVhZEJ1ZlNpemUsIGludCAqYW10UmVhZCk7CiAjZGVmaW5lIGdza19zZWN1cmVfc29jX3JlYWQgICAgIEN1cmxfZ3NrX3NlY3VyZV9zb2NfcmVhZAogCiBleHRlcm4gaW50ICAgICAgQ3VybF9nc2tfc2VjdXJlX3NvY193cml0ZShnc2tfaGFuZGxlIG15X3Nlc3Npb25faGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHdyaXRlQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdyaXRlQnVmU2l6ZSwgaW50ICogYW10V3JpdHRlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp3cml0ZUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cml0ZUJ1ZlNpemUsIGludCAqYW10V3JpdHRlbik7CiAjZGVmaW5lIGdza19zZWN1cmVfc29jX3dyaXRlICAgIEN1cmxfZ3NrX3NlY3VyZV9zb2Nfd3JpdGUKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKiAgICAgQ3VybF9nc2tfc3RyZXJyb3JfYShpbnQgZ3NrX3JldHVybl92YWx1ZSk7CkBAIC0yMDIsMTAgKzIwMiwxMCBAQAogCiBleHRlcm4gaW50IEN1cmxfb3M0MDBfY29ubmVjdChpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqIGRlc3RhZGRyLCBpbnQgYWRkcmxlbik7CiBleHRlcm4gaW50IEN1cmxfb3M0MDBfYmluZChpbnQgc2QsIHN0cnVjdCBzb2NrYWRkciAqIGxvY2FsYWRkciwgaW50IGFkZHJsZW4pOwotZXh0ZXJuIGludCBDdXJsX29zNDAwX3NlbmR0byhpbnQgc2QsIGNoYXIgKiBidWZmZXIsIGludCBidWZsZW4sIGludCBmbGFncywKLSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGRzdGFkZHIsIGludCBhZGRybGVuKTsKLWV4dGVybiBpbnQgQ3VybF9vczQwMF9yZWN2ZnJvbShpbnQgc2QsIGNoYXIgKiBidWZmZXIsIGludCBidWZsZW4sIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogZnJvbWFkZHIsIGludCAqIGFkZHJsZW4pOworZXh0ZXJuIGludCBDdXJsX29zNDAwX3NlbmR0byhpbnQgc2QsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkc3RhZGRyLCBpbnQgYWRkcmxlbik7CitleHRlcm4gaW50IEN1cmxfb3M0MDBfcmVjdmZyb20oaW50IHNkLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4sIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb21hZGRyLCBpbnQgKmFkZHJsZW4pOwogCiAjZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgICAgIEN1cmxfb3M0MDBfY29ubmVjdAogI2RlZmluZSBiaW5kICAgICAgICAgICAgICAgICAgICBDdXJsX29zNDAwX2JpbmQKZGlmZiAtLWdpdCBhL2xpYi9zZXR1cC12bXMuaCBiL2xpYi9zZXR1cC12bXMuaAppbmRleCA0Yjc4ZTBiLi42YzQ1NGFlIDEwMDY0NAotLS0gYS9saWIvc2V0dXAtdm1zLmgKKysrIGIvbGliL3NldHVwLXZtcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00MSw3ICs0MSw3IEBACiAjICAgZW5kaWYKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotICAgIGNoYXIgKiBkZWNjJGdldGVudihjb25zdCBjaGFyICogX19uYW1lKTsKK2NoYXIgKmRlY2MkZ2V0ZW52KGNvbnN0IGNoYXIgKl9fbmFtZSk7CiAjaW5jbHVkZSA8cHdkLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTc5LDIzICs3OSwyNCBAQAogIyAgIGlmIF9fSU5JVElBTF9QT0lOVEVSX1NJWkUgPT0gMzIKIC8qIFRyYW5zbGF0ZSB0aGUgcGF0aCwgYnV0IG9ubHkgaWYgdGhlIHBhdGggaXMgYSBWTVMgZmlsZSBzcGVjaWZpY2F0aW9uICovCiAvKiBUaGUgdHJhbnNsYXRpb24gaXMgdXN1YWxseSBvbmx5IG5lZWRlZCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgVk1TICovCi1zdGF0aWMgY2hhciAqIHZtc190cmFuc2xhdGVfcGF0aChjb25zdCBjaGFyICogcGF0aCkgewotY2hhciAqIHVuaXhfcGF0aDsKLWNoYXIgKiB0ZXN0X3N0cjsKK3N0YXRpYyBjaGFyICp2bXNfdHJhbnNsYXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgY2hhciAqdW5peF9wYXRoOworICBjaGFyICp0ZXN0X3N0cjsKIAotICAgIC8qIFNlZSBpZiB0aGUgcmVzdWx0IGlzIGluIFZNUyBmb3JtYXQsIGlmIG5vdCwgd2UgYXJlIGRvbmUgKi8KLSAgICAvKiBBc3N1bWUgdGhhdCB0aGlzIGlzIGEgUEFUSCwgbm90IGp1c3Qgc29tZSBkYXRhICovCi0gICAgdGVzdF9zdHIgPSBzdHJwYnJrKHBhdGgsICI6WzxeIik7Ci0gICAgaWYodGVzdF9zdHIgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIChjaGFyICopcGF0aDsKLSAgICB9CisgIC8qIFNlZSBpZiB0aGUgcmVzdWx0IGlzIGluIFZNUyBmb3JtYXQsIGlmIG5vdCwgd2UgYXJlIGRvbmUgKi8KKyAgLyogQXNzdW1lIHRoYXQgdGhpcyBpcyBhIFBBVEgsIG5vdCBqdXN0IHNvbWUgZGF0YSAqLworICB0ZXN0X3N0ciA9IHN0cnBicmsocGF0aCwgIjpbPF4iKTsKKyAgaWYodGVzdF9zdHIgPT0gTlVMTCkgeworICAgIHJldHVybiAoY2hhciAqKXBhdGg7CisgIH0KIAotICAgIHVuaXhfcGF0aCA9IGRlY2MkdHJhbnNsYXRlX3ZtcyhwYXRoKTsKKyAgdW5peF9wYXRoID0gZGVjYyR0cmFuc2xhdGVfdm1zKHBhdGgpOwogCi0gICAgaWYoKGludCl1bml4X3BhdGggPD0gMCkgewotICAgICAgLyogV2UgY2FuIG5vdCB0cmFuc2xhdGUgaXQsIHNvIHJldHVybiB0aGUgb3JpZ2luYWwgc3RyaW5nICovCi0gICAgICByZXR1cm4gKGNoYXIgKilwYXRoOwotICAgIH0KKyAgaWYoKGludCl1bml4X3BhdGggPD0gMCkgeworICAgIC8qIFdlIGNhbiBub3QgdHJhbnNsYXRlIGl0LCBzbyByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZyAqLworICAgIHJldHVybiAoY2hhciAqKXBhdGg7CisgIH0KIH0KICMgICBlbHNlCiAgICAgLyogVk1TIHRyYW5zbGF0ZSBwYXRoIGlzIGFjdHVhbGx5IG5vdCBuZWVkZWQgb24gdGhlIGN1cnJlbnQgNjQgYml0ICovCkBAIC0xMTEsNzQgKzExMiw3NCBAQAogIyAgIGVuZGlmCiAjZW5kaWYKIAotc3RhdGljIGNoYXIgKiB2bXNfZ2V0ZW52KGNvbnN0IGNoYXIgKiBlbnZ2YXIpIHsKK3N0YXRpYyBjaGFyICp2bXNfZ2V0ZW52KGNvbnN0IGNoYXIgKmVudnZhcikKK3sKKyAgY2hhciAqcmVzdWx0OworICBjaGFyICp2bXNfcGF0aDsKIAotY2hhciAqIHJlc3VsdDsKLWNoYXIgKiB2bXNfcGF0aDsKLQotICAgIC8qIGZpcnN0IHVzZSB0aGUgREVDQyBnZXRlbnYoKSBmdW5jdGlvbiAqLwotICAgIHJlc3VsdCA9IGRlY2MkZ2V0ZW52KGVudnZhcik7Ci0gICAgaWYocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgdm1zX3BhdGggPSByZXN1bHQ7Ci0gICAgcmVzdWx0ID0gdm1zX3RyYW5zbGF0ZV9wYXRoKHZtc19wYXRoKTsKLQotICAgIC8qIG5vdGUgdGhhdCBpZiB5b3UgYmFja3BvcnQgdGhpcyB0byB1c2UgVkFYIEMgUlRMLCB0aGF0IHRoZSBWQVggQyBSVEwgKi8KLSAgICAvKiBtYXkgZG8gYSBtYWxsb2MoMjA0OCkgZm9yIGVhY2ggY2FsbCB0byBnZXRlbnYoKSwgc28geW91IHdpbGwgbmVlZCAgICovCi0gICAgLyogdG8gYWRkIGEgZnJlZSh2bXNfcGF0aCkgKi8KLSAgICAvKiBEbyBub3QgZG8gYSBmcmVlKCkgZm9yIERFQyBDIFJUTCBidWlsZHMsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciAqLwotICAgIC8qIFZNUyA1LjUtMiBhbmQgbGF0ZXIsIGV2ZW4gaWYgdXNpbmcgR0NDICovCi0KKyAgLyogZmlyc3QgdXNlIHRoZSBERUNDIGdldGVudigpIGZ1bmN0aW9uICovCisgIHJlc3VsdCA9IGRlY2MkZ2V0ZW52KGVudnZhcik7CisgIGlmKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHZtc19wYXRoID0gcmVzdWx0OworICByZXN1bHQgPSB2bXNfdHJhbnNsYXRlX3BhdGgodm1zX3BhdGgpOworCisgIC8qIG5vdGUgdGhhdCBpZiB5b3UgYmFja3BvcnQgdGhpcyB0byB1c2UgVkFYIEMgUlRMLCB0aGF0IHRoZSBWQVggQyBSVEwgKi8KKyAgLyogbWF5IGRvIGEgbWFsbG9jKDIwNDgpIGZvciBlYWNoIGNhbGwgdG8gZ2V0ZW52KCksIHNvIHlvdSB3aWxsIG5lZWQgICAqLworICAvKiB0byBhZGQgYSBmcmVlKHZtc19wYXRoKSAqLworICAvKiBEbyBub3QgZG8gYSBmcmVlKCkgZm9yIERFQyBDIFJUTCBidWlsZHMsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciAqLworICAvKiBWTVMgNS41LTIgYW5kIGxhdGVyLCBldmVuIGlmIHVzaW5nIEdDQyAqLworCisgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBwYXNzd2Qgdm1zX3Bhc3N3ZF9jYWNoZTsKIAotc3RhdGljIHN0cnVjdCBwYXNzd2QgKiB2bXNfZ2V0cHd1aWQodWlkX3QgdWlkKSB7Ci0KLXN0cnVjdCBwYXNzd2QgKiBteV9wYXNzd2Q7CitzdGF0aWMgc3RydWN0IHBhc3N3ZCAqIHZtc19nZXRwd3VpZCh1aWRfdCB1aWQpCit7CisgIHN0cnVjdCBwYXNzd2QgKiBteV9wYXNzd2Q7CiAKIC8qIEhhY2sgbmVlZGVkIHRvIHN1cHBvcnQgNjQgYml0IGJ1aWxkcywgZGVjY19nZXRwd25hbSBpcyAzMiBiaXQgb25seSAqLwogI2lmZGVmIF9fREVDQwogIyAgIGlmIF9fSU5JVElBTF9QT0lOVEVSX1NJWkUKLV9fY2hhcl9wdHIzMiB1bml4X3BhdGg7CisgIF9fY2hhcl9wdHIzMiB1bml4X3BhdGg7CiAjICAgZWxzZQotY2hhciAqIHVuaXhfcGF0aDsKKyAgY2hhciAqdW5peF9wYXRoOwogIyAgIGVuZGlmCiAjZWxzZQotY2hhciAqIHVuaXhfcGF0aDsKKyAgY2hhciAqdW5peF9wYXRoOwogI2VuZGlmCiAKLSAgICBteV9wYXNzd2QgPSBkZWNjX2dldHB3dWlkKHVpZCk7Ci0gICAgaWYobXlfcGFzc3dkID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBteV9wYXNzd2Q7Ci0gICAgfQorICBteV9wYXNzd2QgPSBkZWNjX2dldHB3dWlkKHVpZCk7CisgIGlmKG15X3Bhc3N3ZCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIG15X3Bhc3N3ZDsKKyAgfQogCi0gICAgdW5peF9wYXRoID0gdm1zX3RyYW5zbGF0ZV9wYXRoKG15X3Bhc3N3ZC0+cHdfZGlyKTsKKyAgdW5peF9wYXRoID0gdm1zX3RyYW5zbGF0ZV9wYXRoKG15X3Bhc3N3ZC0+cHdfZGlyKTsKIAotICAgIGlmKChsb25nKXVuaXhfcGF0aCA8PSAwKSB7Ci0gICAgICAvKiBXZSBjYW4gbm90IHRyYW5zbGF0ZSBpdCwgc28gcmV0dXJuIHRoZSBvcmlnaW5hbCBzdHJpbmcgKi8KLSAgICAgIHJldHVybiBteV9wYXNzd2Q7Ci0gICAgfQorICBpZigobG9uZyl1bml4X3BhdGggPD0gMCkgeworICAgIC8qIFdlIGNhbiBub3QgdHJhbnNsYXRlIGl0LCBzbyByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZyAqLworICAgIHJldHVybiBteV9wYXNzd2Q7CisgIH0KIAotICAgIC8qIElmIG5vIGNoYW5nZXMgbmVlZGVkIGp1c3QgcmV0dXJuIGl0ICovCi0gICAgaWYodW5peF9wYXRoID09IG15X3Bhc3N3ZC0+cHdfZGlyKSB7Ci0gICAgICByZXR1cm4gbXlfcGFzc3dkOwotICAgIH0KKyAgLyogSWYgbm8gY2hhbmdlcyBuZWVkZWQganVzdCByZXR1cm4gaXQgKi8KKyAgaWYodW5peF9wYXRoID09IG15X3Bhc3N3ZC0+cHdfZGlyKSB7CisgICAgcmV0dXJuIG15X3Bhc3N3ZDsKKyAgfQogCi0gICAgLyogTmVlZCB0byBjb3B5IHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgKi8KLSAgICAvKiBTaW5jZSBjdXJsIGlzIG9ubHkgdXNpbmcgcHdfZGlyLCBubyBuZWVkIHRvIGZpeCB1cCAqCi0gICAgLyogdGhlIHB3X3NoZWxsIHdoZW4gcnVubmluZyB1bmRlciBCYXNoICovCi0gICAgdm1zX3Bhc3N3ZF9jYWNoZS5wd19uYW1lID0gbXlfcGFzc3dkLT5wd19uYW1lOwotICAgIHZtc19wYXNzd2RfY2FjaGUucHdfdWlkID0gbXlfcGFzc3dkLT5wd191aWQ7Ci0gICAgdm1zX3Bhc3N3ZF9jYWNoZS5wd19naWQgPSBteV9wYXNzd2QtPnB3X3VpZDsKLSAgICB2bXNfcGFzc3dkX2NhY2hlLnB3X2RpciA9IHVuaXhfcGF0aDsKLSAgICB2bXNfcGFzc3dkX2NhY2hlLnB3X3NoZWxsID0gbXlfcGFzc3dkLT5wd19zaGVsbDsKKyAgLyogTmVlZCB0byBjb3B5IHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgKi8KKyAgLyogU2luY2UgY3VybCBpcyBvbmx5IHVzaW5nIHB3X2Rpciwgbm8gbmVlZCB0byBmaXggdXAgKi8KKyAgLyogdGhlIHB3X3NoZWxsIHdoZW4gcnVubmluZyB1bmRlciBCYXNoICovCisgIHZtc19wYXNzd2RfY2FjaGUucHdfbmFtZSA9IG15X3Bhc3N3ZC0+cHdfbmFtZTsKKyAgdm1zX3Bhc3N3ZF9jYWNoZS5wd191aWQgPSBteV9wYXNzd2QtPnB3X3VpZDsKKyAgdm1zX3Bhc3N3ZF9jYWNoZS5wd19naWQgPSBteV9wYXNzd2QtPnB3X3VpZDsKKyAgdm1zX3Bhc3N3ZF9jYWNoZS5wd19kaXIgPSB1bml4X3BhdGg7CisgIHZtc19wYXNzd2RfY2FjaGUucHdfc2hlbGwgPSBteV9wYXNzd2QtPnB3X3NoZWxsOwogCi0gICAgcmV0dXJuICZ2bXNfcGFzc3dkX2NhY2hlOworICByZXR1cm4gJnZtc19wYXNzd2RfY2FjaGU7CiB9CiAKICNpZmRlZiBfX0RFQ0MKZGlmZiAtLWdpdCBhL2xpYi9zbWIuYyBiL2xpYi9zbWIuYwppbmRleCA1NmEzOGMyLi5mMTk3ZmUxIDEwMDY0NAotLS0gYS9saWIvc21iLmMKKysrIGIvbGliL3NtYi5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDE0LCBCaWxsIE5hZ2VsIDx3bmFnZWxAdHljb2ludC5jb20+LCBFeGFjcSBUZWNobm9sb2dpZXMKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzA4LDggKzMwOCw4IEBACiAgIGlmKHNtYmMtPmdvdCA8IHNpemVvZih1bnNpZ25lZCBpbnQpKQogICAgIHJldHVybiBDVVJMRV9PSzsKIAotICBuYnRfc2l6ZSA9IEN1cmxfcmVhZDE2X2JlKCh1bnNpZ25lZCBjaGFyICopKGJ1ZiArIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKSArCi0gICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCk7CisgIG5idF9zaXplID0gQ3VybF9yZWFkMTZfYmUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikoYnVmICsKKyAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgc2hvcnQpKSkgKyBzaXplb2YodW5zaWduZWQgaW50KTsKICAgaWYoc21iYy0+Z290IDwgbmJ0X3NpemUpCiAgICAgcmV0dXJuIENVUkxFX09LOwogCkBAIC0zMjAsNyArMzIwLDcgQEAKICAgICBpZihuYnRfc2l6ZSA+PSBtc2dfc2l6ZSArIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpIHsKICAgICAgIC8qIEFkZCB0aGUgYnl0ZSBjb3VudCAqLwogICAgICAgbXNnX3NpemUgKz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSArCi0gICAgICAgICAgICAgICAgICBDdXJsX3JlYWQxNl9sZSgodW5zaWduZWQgY2hhciAqKSZidWZbbXNnX3NpemVdKTsKKyAgICAgICAgICAgICAgICAgIEN1cmxfcmVhZDE2X2xlKChjb25zdCB1bnNpZ25lZCBjaGFyICopJmJ1Zlttc2dfc2l6ZV0pOwogICAgICAgaWYobmJ0X3NpemUgPCBtc2dfc2l6ZSkKICAgICAgICAgcmV0dXJuIENVUkxFX1JFQURfRVJST1I7CiAgICAgfQpAQCAtNjczLDcgKzY3Myw3IEBACiAKICAgc3dpdGNoKHNtYmMtPnN0YXRlKSB7CiAgIGNhc2UgU01CX05FR09USUFURToKLSAgICBpZihoLT5zdGF0dXMpIHsKKyAgICBpZihoLT5zdGF0dXMgfHwgc21iYy0+Z290IDwgc2l6ZW9mKCpucnNwKSArIHNpemVvZihzbWJjLT5jaGFsbGVuZ2UpIC0gMSkgewogICAgICAgY29ubmNsb3NlKGNvbm4sICJTTUI6IG5lZ290aWF0aW9uIGZhaWxlZCIpOwogICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICB9CkBAIC03MTIsNiArNzEyLDcgQEAKIHsKICAgc3RydWN0IHNtYl9yZXF1ZXN0ICpyZXEgPSBjb25uLT5kYXRhLT5yZXEucHJvdG9wOwogICBzdHJ1Y3Qgc21iX2hlYWRlciAqaDsKKyAgc3RydWN0IHNtYl9jb25uICpzbWJjID0gJmNvbm4tPnByb3RvLnNtYmM7CiAgIGVudW0gc21iX3JlcV9zdGF0ZSBuZXh0X3N0YXRlID0gU01CX0RPTkU7CiAgIHVuc2lnbmVkIHNob3J0IGxlbjsKICAgdW5zaWduZWQgc2hvcnQgb2ZmOwpAQCAtNzU0LDcgKzc1NSw3IEBACiAgICAgYnJlYWs7CiAKICAgY2FzZSBTTUJfT1BFTjoKLSAgICBpZihoLT5zdGF0dXMpIHsKKyAgICBpZihoLT5zdGF0dXMgfHwgc21iYy0+Z290IDwgc2l6ZW9mKHN0cnVjdCBzbWJfbnRfY3JlYXRlX3Jlc3BvbnNlKSkgewogICAgICAgcmVxLT5yZXN1bHQgPSBDVVJMRV9SRU1PVEVfRklMRV9OT1RfRk9VTkQ7CiAgICAgICBuZXh0X3N0YXRlID0gU01CX1RSRUVfRElTQ09OTkVDVDsKICAgICAgIGJyZWFrOwpAQCAtNzc1LDE3ICs3NzYsMTYgQEAKICAgICBicmVhazsKIAogICBjYXNlIFNNQl9ET1dOTE9BRDoKLSAgICBpZihoLT5zdGF0dXMpIHsKKyAgICBpZihoLT5zdGF0dXMgfHwgc21iYy0+Z290IDwgc2l6ZW9mKHN0cnVjdCBzbWJfaGVhZGVyKSArIDE0KSB7CiAgICAgICByZXEtPnJlc3VsdCA9IENVUkxFX1JFQ1ZfRVJST1I7CiAgICAgICBuZXh0X3N0YXRlID0gU01CX0NMT1NFOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGxlbiA9IEN1cmxfcmVhZDE2X2xlKCgodW5zaWduZWQgY2hhciAqKSBtc2cpICsKKyAgICBsZW4gPSBDdXJsX3JlYWQxNl9sZSgoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbXNnKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzbWJfaGVhZGVyKSArIDExKTsKLSAgICBvZmYgPSBDdXJsX3JlYWQxNl9sZSgoKHVuc2lnbmVkIGNoYXIgKikgbXNnKSArCisgICAgb2ZmID0gQ3VybF9yZWFkMTZfbGUoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1zZykgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc21iX2hlYWRlcikgKyAxMyk7CiAgICAgaWYobGVuID4gMCkgewotICAgICAgc3RydWN0IHNtYl9jb25uICpzbWJjID0gJmNvbm4tPnByb3RvLnNtYmM7CiAgICAgICBpZihvZmYgKyBzaXplb2YodW5zaWduZWQgaW50KSArIGxlbiA+IHNtYmMtPmdvdCkgewogICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiSW52YWxpZCBpbnB1dCBwYWNrZXQiKTsKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfUkVDVl9FUlJPUjsKQEAgLTgwNywxMiArODA3LDEyIEBACiAgICAgYnJlYWs7CiAKICAgY2FzZSBTTUJfVVBMT0FEOgotICAgIGlmKGgtPnN0YXR1cykgeworICAgIGlmKGgtPnN0YXR1cyB8fCBzbWJjLT5nb3QgPCBzaXplb2Yoc3RydWN0IHNtYl9oZWFkZXIpICsgNikgewogICAgICAgcmVxLT5yZXN1bHQgPSBDVVJMRV9VUExPQURfRkFJTEVEOwogICAgICAgbmV4dF9zdGF0ZSA9IFNNQl9DTE9TRTsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBsZW4gPSBDdXJsX3JlYWQxNl9sZSgoKHVuc2lnbmVkIGNoYXIgKikgbXNnKSArCisgICAgbGVuID0gQ3VybF9yZWFkMTZfbGUoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1zZykgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc21iX2hlYWRlcikgKyA1KTsKICAgICBjb25uLT5kYXRhLT5yZXEuYnl0ZWNvdW50ICs9IGxlbjsKICAgICBjb25uLT5kYXRhLT5yZXEub2Zmc2V0ICs9IGxlbjsKZGlmZiAtLWdpdCBhL2xpYi9zbXRwLmMgYi9saWIvc210cC5jCmluZGV4IGQyMDNiNTMuLmZmOGU4MGQgMTAwNjQ0Ci0tLSBhL2xpYi9zbXRwLmMKKysrIGIvbGliL3NtdHAuYwpAQCAtNjksMTYgKzY5LDE0IEBACiAjaW5jbHVkZSAiaHR0cC5oIiAvKiBmb3IgSFRUUCBwcm94eSB0dW5uZWwgc3R1ZmYgKi8KICNpbmNsdWRlICJzb2Nrcy5oIgogI2luY2x1ZGUgInNtdHAuaCIKLQogI2luY2x1ZGUgInN0cnRvb2ZmdC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJzdHJlcnJvci5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKICNpbmNsdWRlICJjdXJsX2dldGhvc3RuYW1lLmgiCiAjaW5jbHVkZSAiY3VybF9zYXNsLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKQEAgLTEwNSw3ICsxMDMsNyBAQAogc3RhdGljIENVUkxjb2RlIHNtdHBfcGVyZm9ybV9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqbWVjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbml0cmVzcCk7CiBzdGF0aWMgQ1VSTGNvZGUgc210cF9jb250aW51ZV9hdXRoKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgY29uc3QgY2hhciAqcmVzcCk7Ci1zdGF0aWMgdm9pZCBzbXRwX2dldF9tZXNzYWdlKGNoYXIgKmJ1ZmZlciwgY2hhcioqIG91dHB0cik7CitzdGF0aWMgdm9pZCBzbXRwX2dldF9tZXNzYWdlKGNoYXIgKmJ1ZmZlciwgY2hhciAqKm91dHB0cik7CiAKIC8qCiAgKiBTTVRQIHByb3RvY29sIGhhbmRsZXIuCkBAIC0yODAsMTAgKzI3OCwxMCBAQAogICoKICAqIEdldHMgdGhlIGF1dGhlbnRpY2F0aW9uIG1lc3NhZ2UgZnJvbSB0aGUgcmVzcG9uc2UgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBzbXRwX2dldF9tZXNzYWdlKGNoYXIgKmJ1ZmZlciwgY2hhcioqIG91dHB0cikKK3N0YXRpYyB2b2lkIHNtdHBfZ2V0X21lc3NhZ2UoY2hhciAqYnVmZmVyLCBjaGFyICoqb3V0cHRyKQogewogICBzaXplX3QgbGVuID0gMDsKLSAgY2hhciogbWVzc2FnZSA9IE5VTEw7CisgIGNoYXIgKm1lc3NhZ2UgPSBOVUxMOwogCiAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlICovCiAgIGZvcihtZXNzYWdlID0gYnVmZmVyICsgNDsgKm1lc3NhZ2UgPT0gJyAnIHx8ICptZXNzYWdlID09ICdcdCc7IG1lc3NhZ2UrKykKQEAgLTY3NCw3ICs2NzIsNyBAQAogCiAgIGlmKHNtdHBjb2RlLzEwMCAhPSAyKSB7CiAgICAgZmFpbGYoZGF0YSwgIkdvdCB1bmV4cGVjdGVkIHNtdHAtc2VydmVyIHJlc3BvbnNlOiAlZCIsIHNtdHBjb2RlKTsKLSAgICByZXN1bHQgPSBDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZOworICAgIHJlc3VsdCA9IENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWTsKICAgfQogICBlbHNlCiAgICAgcmVzdWx0ID0gc210cF9wZXJmb3JtX2VobG8oY29ubik7CkBAIC0xNTEyLDcgKzE1MTAsNyBAQAogICAgIHdoaWxlKCpwdHIgJiYgKnB0ciAhPSAnOycpCiAgICAgICBwdHIrKzsKIAotICAgIGlmKHN0cm5lcXVhbChrZXksICJBVVRIPSIsIDUpKQorICAgIGlmKHN0cm5jYXNlY29tcGFyZShrZXksICJBVVRIPSIsIDUpKQogICAgICAgcmVzdWx0ID0gQ3VybF9zYXNsX3BhcnNlX3VybF9hdXRoX29wdGlvbigmc210cGMtPnNhc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBwdHIgLSB2YWx1ZSk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvbGliL3NvY2tzLmMgYi9saWIvc29ja3MuYwppbmRleCBmY2NiMTZkLi43NzRmYjIwIDEwMDY0NAotLS0gYS9saWIvc29ja3MuYworKysgYi9saWIvc29ja3MuYwpAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAidGltZXZhbC5oIgpAQCAtNTgsNyArNTcsNyBAQAogICBzc2l6ZV90IG5yZWFkOwogICBzc2l6ZV90IGFsbHJlYWQgPSAwOwogICBpbnQgcmVzdWx0OwotICBsb25nIHRpbWVsZWZ0OworICB0aW1lX3QgdGltZWxlZnQ7CiAgICpuID0gMDsKICAgZm9yKDs7KSB7CiAgICAgdGltZWxlZnQgPSBDdXJsX3RpbWVsZWZ0KGNvbm4tPmRhdGEsIE5VTEwsIFRSVUUpOwpAQCAtNjcsNyArNjYsNyBAQAogICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmKEN1cmxfc29ja2V0X3JlYWR5KHNvY2tmZCwgQ1VSTF9TT0NLRVRfQkFELCB0aW1lbGVmdCkgPD0gMCkgeworICAgIGlmKFNPQ0tFVF9SRUFEQUJMRShzb2NrZmQsIHRpbWVsZWZ0KSA8PSAwKSB7CiAgICAgICByZXN1bHQgPSB+Q1VSTEVfT0s7CiAgICAgICBicmVhazsKICAgICB9CkBAIC0xMTAsOSArMTA5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCByZW1vdGVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBib29sIHByb3RvY29sNGEpCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7CisgIGNvbnN0IGJvb2wgcHJvdG9jb2w0YSA9CisgICAgKGNvbm4tPnNvY2tzX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfU09DS1M0QSkgPyBUUlVFIDogRkFMU0U7CiAjZGVmaW5lIFNPQ0tTNFJFUUxFTiAyNjIKICAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVtTT0NLUzRSRVFMRU5dOyAvKiByb29tIGZvciBTT0NLUzQgcmVxdWVzdCBpbmNsLiB1c2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKi8KQEAgLTEyNyw2ICsxMjcsMTAgQEAKICAgICByZXR1cm4gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogICB9CiAKKyAgaWYoY29ubi0+Yml0cy5odHRwcHJveHkpCisgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNCVzOiBjb25uZWN0aW5nIHRvIEhUVFAgcHJveHkgJXMgcG9ydCAlZFxuIiwKKyAgICAgICAgICBwcm90b2NvbDRhID8gImEiIDogIiIsIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisKICAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgRkFMU0UpOwogCiAgIGluZm9mKGRhdGEsICJTT0NLUzQgY29tbXVuaWNhdGlvbiB0byAlczolZFxuIiwgaG9zdG5hbWUsIHJlbW90ZV9wb3J0KTsKQEAgLTE3MCwyNCArMTc0LDI2IEBACiAgICAgICBocD1kbnMtPmFkZHI7CiAgICAgaWYoaHApIHsKICAgICAgIGNoYXIgYnVmWzY0XTsKLSAgICAgIHVuc2lnbmVkIHNob3J0IGlwWzRdOwogICAgICAgQ3VybF9wcmludGFibGVfYWRkcmVzcyhocCwgYnVmLCBzaXplb2YoYnVmKSk7CiAKLSAgICAgIGlmKDQgPT0gc3NjYW5mKGJ1ZiwgIiVodS4laHUuJWh1LiVodSIsCi0gICAgICAgICAgICAgICAgICAgICAmaXBbMF0sICZpcFsxXSwgJmlwWzJdLCAmaXBbM10pKSB7Ci0gICAgICAgIC8qIFNldCBEU1RJUCAqLwotICAgICAgICBzb2Nrc3JlcVs0XSA9ICh1bnNpZ25lZCBjaGFyKWlwWzBdOwotICAgICAgICBzb2Nrc3JlcVs1XSA9ICh1bnNpZ25lZCBjaGFyKWlwWzFdOwotICAgICAgICBzb2Nrc3JlcVs2XSA9ICh1bnNpZ25lZCBjaGFyKWlwWzJdOwotICAgICAgICBzb2Nrc3JlcVs3XSA9ICh1bnNpZ25lZCBjaGFyKWlwWzNdOworICAgICAgaWYoaHAtPmFpX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHJfaW47CisKKyAgICAgICAgc2FkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilocC0+YWlfYWRkcjsKKyAgICAgICAgc29ja3NyZXFbNF0gPSAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcilbMF07CisgICAgICAgIHNvY2tzcmVxWzVdID0gKCh1bnNpZ25lZCBjaGFyICopJnNhZGRyX2luLT5zaW5fYWRkci5zX2FkZHIpWzFdOworICAgICAgICBzb2Nrc3JlcVs2XSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVsyXTsKKyAgICAgICAgc29ja3NyZXFbN10gPSAoKHVuc2lnbmVkIGNoYXIgKikmc2FkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcilbM107CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCBjb25uZWN0IHRvIElQdjQgJXMgKGxvY2FsbHkgcmVzb2x2ZWQpXG4iLCBidWYpOwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSB7CiAgICAgICAgIGhwID0gTlVMTDsgLyogZmFpbCEgKi8KIAotICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNCBjb25uZWN0IHRvICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKKyAgICAgICAgZmFpbGYoZGF0YSwgIlNPQ0tTNCBjb25uZWN0aW9uIHRvICVzIG5vdCBzdXBwb3J0ZWRcbiIsIGJ1Zik7CisgICAgICB9CiAKICAgICAgIEN1cmxfcmVzb2x2X3VubG9jayhkYXRhLCBkbnMpOyAvKiBub3QgdXNlZCBhbnltb3JlIGZyb20gbm93IG9uICovCi0KICAgICB9CiAgICAgaWYoIWhwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIHRvIHJlc29sdmUgXCIlc1wiIGZvciBTT0NLUzQgY29ubmVjdC4iLApAQCAtMjE4LDcgKzIyNCw3IEBACiAgICAgc3NpemVfdCB3cml0dGVuOwogICAgIHNzaXplX3QgaG9zdG5hbWVsZW4gPSAwOwogICAgIGludCBwYWNrZXRzaXplID0gOSArCi0gICAgICAoaW50KXN0cmxlbigoY2hhciopc29ja3NyZXEgKyA4KTsgLyogc2l6ZSBpbmNsdWRpbmcgTlVMICovCisgICAgICAoaW50KXN0cmxlbigoY2hhciAqKXNvY2tzcmVxICsgOCk7IC8qIHNpemUgaW5jbHVkaW5nIE5VTCAqLwogCiAgICAgLyogSWYgU09DS1M0YSwgc2V0IHNwZWNpYWwgaW52YWxpZCBJUCBhZGRyZXNzIDAuMC4wLnggKi8KICAgICBpZihwcm90b2NvbDRhKSB7CkBAIC0yMjksNyArMjM1LDcgQEAKICAgICAgIC8qIElmIHN0aWxsIGVub3VnaCByb29tIGluIGJ1ZmZlciwgYWxzbyBhcHBlbmQgaG9zdG5hbWUgKi8KICAgICAgIGhvc3RuYW1lbGVuID0gKHNzaXplX3Qpc3RybGVuKGhvc3RuYW1lKSArIDE7IC8qIGxlbmd0aCBpbmNsdWRpbmcgTlVMICovCiAgICAgICBpZihwYWNrZXRzaXplICsgaG9zdG5hbWVsZW4gPD0gU09DS1M0UkVRTEVOKQotICAgICAgICBzdHJjcHkoKGNoYXIqKXNvY2tzcmVxICsgcGFja2V0c2l6ZSwgaG9zdG5hbWUpOworICAgICAgICBzdHJjcHkoKGNoYXIgKilzb2Nrc3JlcSArIHBhY2tldHNpemUsIGhvc3RuYW1lKTsKICAgICAgIGVsc2UKICAgICAgICAgaG9zdG5hbWVsZW4gPSAwOyAvKiBGbGFnOiBob3N0bmFtZSBkaWQgbm90IGZpdCBpbiBidWZmZXIgKi8KICAgICB9CkBAIC0zNzUsMTEgKzM4MSwxNiBAQAogICBDVVJMY29kZSBjb2RlOwogICBjdXJsX3NvY2tldF90IHNvY2sgPSBjb25uLT5zb2NrW3NvY2tpbmRleF07CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwotICBsb25nIHRpbWVvdXQ7Ci0gIGJvb2wgc29ja3M1X3Jlc29sdmVfbG9jYWwgPSAoY29ubi0+cHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUpP1RSVUU6RkFMU0U7CisgIHRpbWVfdCB0aW1lb3V0OworICBib29sIHNvY2tzNV9yZXNvbHZlX2xvY2FsID0KKyAgICAoY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUpID8gVFJVRSA6IEZBTFNFOwogICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKTsKICAgc3NpemVfdCBsZW4gPSAwOwogCisgIGlmKGNvbm4tPmJpdHMuaHR0cHByb3h5KQorICAgIGluZm9mKGNvbm4tPmRhdGEsICJTT0NLUzU6IGNvbm5lY3RpbmcgdG8gSFRUUCBwcm94eSAlcyBwb3J0ICVkXG4iLAorICAgICAgICAgIGhvc3RuYW1lLCByZW1vdGVfcG9ydCk7CisKICAgLyogUkZDMTkyOCBjaGFwdGVyIDUgc3BlY2lmaWVzIG1heCAyNTUgY2hhcnMgZm9yIGRvbWFpbiBuYW1lIGluIHBhY2tldCAqLwogICBpZighc29ja3M1X3Jlc29sdmVfbG9jYWwgJiYgaG9zdG5hbWVfbGVuID4gMjU1KSB7CiAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIlNPQ0tTNTogc2VydmVyIHJlc29sdmluZyBkaXNhYmxlZCBmb3IgaG9zdG5hbWVzIG9mICIKQEAgLTM5OSw3ICs0MTAsNyBAQAogICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBUUlVFKTsKIAogICAvKiB3YWl0IHVudGlsIHNvY2tldCBnZXRzIGNvbm5lY3RlZCAqLwotICByZXN1bHQgPSBDdXJsX3NvY2tldF9yZWFkeShDVVJMX1NPQ0tFVF9CQUQsIHNvY2ssIHRpbWVvdXQpOworICByZXN1bHQgPSBTT0NLRVRfV1JJVEFCTEUoc29jaywgdGltZW91dCk7CiAKICAgaWYoLTEgPT0gcmVzdWx0KSB7CiAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNPQ0tTNTogbm8gY29ubmVjdGlvbiBoZXJlIik7CkBAIC00MjksNiArNDQwLDggQEAKIAogICAodm9pZCljdXJseF9ub25ibG9jayhzb2NrLCBGQUxTRSk7CiAKKyAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb21tdW5pY2F0aW9uIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcmVtb3RlX3BvcnQpOworCiAgIGNvZGUgPSBDdXJsX3dyaXRlX3BsYWluKGNvbm4sIHNvY2ssIChjaGFyICopc29ja3NyZXEsICgyICsgKGludClzb2Nrc3JlcVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuKTsKICAgaWYoY29kZSB8fCAod3JpdHRlbiAhPSAoMiArIChpbnQpc29ja3NyZXFbMV0pKSkgewpAQCAtNDM4LDcgKzQ1MSw3IEBACiAKICAgKHZvaWQpY3VybHhfbm9uYmxvY2soc29jaywgVFJVRSk7CiAKLSAgcmVzdWx0ID0gQ3VybF9zb2NrZXRfcmVhZHkoc29jaywgQ1VSTF9TT0NLRVRfQkFELCB0aW1lb3V0KTsKKyAgcmVzdWx0ID0gU09DS0VUX1JFQURBQkxFKHNvY2ssIHRpbWVvdXQpOwogCiAgIGlmKC0xID09IHJlc3VsdCkgewogICAgIGZhaWxmKGNvbm4tPmRhdGEsICJTT0NLUzUgbm90aGluZyB0byByZWFkIik7CkBAIC01OTQsMzQgKzYwNyw0MSBAQAogICAgIGlmKGRucykKICAgICAgIGhwPWRucy0+YWRkcjsKICAgICBpZihocCkgewotICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzYWRkcl9pbjsKLSNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2FkZHJfaW42OwotI2VuZGlmCiAgICAgICBpbnQgaTsKKyAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgIEN1cmxfcHJpbnRhYmxlX2FkZHJlc3MoaHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAgICAgICBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzYWRkcl9pbjsKICAgICAgICAgc29ja3NyZXFbbGVuKytdID0gMTsgLyogQVRZUDogSVB2NCA9IDEgKi8KIAotICAgICAgICBzYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSh2b2lkKilocC0+YWlfYWRkcjsKKyAgICAgICAgc2FkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilocC0+YWlfYWRkcjsKICAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgICAgc29ja3NyZXFbbGVuKytdID0gKCh1bnNpZ25lZCBjaGFyKikmc2FkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcilbaV07Ci0gICAgICAgICAgaW5mb2YoZGF0YSwgIiVkXG4iLCBzb2Nrc3JlcVtsZW4tMV0pOworICAgICAgICAgIHNvY2tzcmVxW2xlbisrXSA9ICgodW5zaWduZWQgY2hhciAqKSZzYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyKVtpXTsKICAgICAgICAgfQorCisgICAgICAgIGluZm9mKGRhdGEsICJTT0NLUzUgY29ubmVjdCB0byBJUHY0ICVzIChsb2NhbGx5IHJlc29sdmVkKVxuIiwgYnVmKTsKICAgICAgIH0KICNpZmRlZiBFTkFCTEVfSVBWNgogICAgICAgZWxzZSBpZihocC0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyX2luNjsKICAgICAgICAgc29ja3NyZXFbbGVuKytdID0gNDsgLyogQVRZUDogSVB2NiA9IDQgKi8KIAotICAgICAgICBzYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiopKHZvaWQqKWhwLT5haV9hZGRyOworICAgICAgICBzYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopaHAtPmFpX2FkZHI7CiAgICAgICAgIGZvcihpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPSAoKHVuc2lnbmVkIGNoYXIqKSZzYWRkcl9pbjYtPnNpbjZfYWRkci5zNl9hZGRyKVtpXTsKKyAgICAgICAgICBzb2Nrc3JlcVtsZW4rK10gPQorICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopJnNhZGRyX2luNi0+c2luNl9hZGRyLnM2X2FkZHIpW2ldOwogICAgICAgICB9CisKKyAgICAgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNSBjb25uZWN0IHRvIElQdjYgJXMgKGxvY2FsbHkgcmVzb2x2ZWQpXG4iLCBidWYpOwogICAgICAgfQogI2VuZGlmCi0gICAgICBlbHNlCisgICAgICBlbHNlIHsKICAgICAgICAgaHAgPSBOVUxMOyAvKiBmYWlsISAqLwogCisgICAgICAgIGZhaWxmKGRhdGEsICJTT0NLUzUgY29ubmVjdGlvbiB0byAlcyBub3Qgc3VwcG9ydGVkXG4iLCBidWYpOworICAgICAgfQorCiAgICAgICBDdXJsX3Jlc29sdl91bmxvY2soZGF0YSwgZG5zKTsgLyogbm90IHVzZWQgYW55bW9yZSBmcm9tIG5vdyBvbiAqLwogICAgIH0KICAgICBpZighaHApIHsKQEAgLTY2OCwzOSArNjg4LDYgQEAKICAgICAgICAgICAiU09DS1M1IHJlcGx5IGhhcyB3cm9uZyB2ZXJzaW9uLCB2ZXJzaW9uIHNob3VsZCBiZSA1LiIpOwogICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CiAgIH0KLSAgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBBbnl0aGluZyBiZXNpZGVzIDAgaXMgYW4gZXJyb3IgKi8KLSAgICBpZihzb2Nrc3JlcVszXSA9PSAxKSB7Ci0gICAgICBmYWlsZihkYXRhLAotICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgfQotICAgIGVsc2UgaWYoc29ja3NyZXFbM10gPT0gMykgewotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzUgY29ubmVjdGlvbiB0byAlczolZC4gKCVkKSIsCi0gICAgICAgICAgICBob3N0bmFtZSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgfQotICAgIGVsc2UgaWYoc29ja3NyZXFbM10gPT0gNCkgewotICAgICAgZmFpbGYoZGF0YSwKLSAgICAgICAgICAgICJDYW4ndCBjb21wbGV0ZSBTT0NLUzUgY29ubmVjdGlvbiB0byAlMDJ4JTAyeDolMDJ4JTAyeDoiCi0gICAgICAgICAgICAiJTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JWQuICglZCkiLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzddLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzldLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTBdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxMV0sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxMl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzEzXSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTVdLAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxN10sCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxOF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE5XSwKLSAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs5XSksCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7Ci0gICAgfQotICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7Ci0gIH0KIAogICAvKiBGaXg6IGluIGdlbmVyYWwsIHJldHVybmVkIEJORC5BRERSIGlzIHZhcmlhYmxlIGxlbmd0aCBwYXJhbWV0ZXIgYnkgUkZDCiAgICAgIDE5MjgsIHNvIHRoZSByZXBseSBwYWNrZXQgc2hvdWxkIGJlIHJlYWQgdW50aWwgdGhlIGVuZCB0byBhdm9pZCBlcnJvcnMgYXQKQEAgLTczNSwxMCArNzIyLDkgQEAKICAgICAvKiBkZWNyeXB0X2dzc2FwaV9ibG9ja3JlYWQgYWxyZWFkeSByZWFkIHRoZSB3aG9sZSBwYWNrZXQgKi8KICNlbmRpZgogICAgIGlmKGxlbiA+IDEwKSB7Ci0gICAgICBsZW4gLT0gMTA7CiAgICAgICByZXN1bHQgPSBDdXJsX2Jsb2NrcmVhZF9hbGwoY29ubiwgc29jaywgKGNoYXIgKikmc29ja3NyZXFbMTBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgJmFjdHVhbHJlYWQpOwotICAgICAgaWYocmVzdWx0IHx8IChsZW4gIT0gYWN0dWFscmVhZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLSAxMCwgJmFjdHVhbHJlYWQpOworICAgICAgaWYocmVzdWx0IHx8ICgobGVuIC0gMTApICE9IGFjdHVhbHJlYWQpKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgdG8gcmVjZWl2ZSBTT0NLUzUgY29ubmVjdCByZXF1ZXN0IGFjay4iKTsKICAgICAgICAgcmV0dXJuIENVUkxFX0NPVUxETlRfQ09OTkVDVDsKICAgICAgIH0KQEAgLTc0Nyw2ICs3MzMsNDkgQEAKICAgfQogI2VuZGlmCiAKKyAgaWYoc29ja3NyZXFbMV0gIT0gMCkgeyAvKiBBbnl0aGluZyBiZXNpZGVzIDAgaXMgYW4gZXJyb3IgKi8KKyAgICBpZihzb2Nrc3JlcVszXSA9PSAxKSB7CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICVkLiVkLiVkLiVkOiVkLiAoJWQpIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs1XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzZdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs3XSwKKyAgICAgICAgICAgICgoKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOF0gPDwgOCkgfAorICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzldKSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICB9CisgICAgZWxzZSBpZihzb2Nrc3JlcVszXSA9PSAzKSB7CisgICAgICB1bnNpZ25lZCBjaGFyIHBvcnRfdXBwZXIgPSAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVtsZW4gLSAyXTsKKyAgICAgIHNvY2tzcmVxW2xlbiAtIDJdID0gMDsKKyAgICAgIGZhaWxmKGRhdGEsCisgICAgICAgICAgICAiQ2FuJ3QgY29tcGxldGUgU09DS1M1IGNvbm5lY3Rpb24gdG8gJXM6JWQuICglZCkiLAorICAgICAgICAgICAgKGNoYXIgKikmc29ja3NyZXFbNV0sCisgICAgICAgICAgICAoKHBvcnRfdXBwZXIgPDwgOCkgfAorICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxW2xlbiAtIDFdKSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzFdKTsKKyAgICAgIHNvY2tzcmVxW2xlbiAtIDJdID0gcG9ydF91cHBlcjsKKyAgICB9CisgICAgZWxzZSBpZihzb2Nrc3JlcVszXSA9PSA0KSB7CisgICAgICBmYWlsZihkYXRhLAorICAgICAgICAgICAgIkNhbid0IGNvbXBsZXRlIFNPQ0tTNSBjb25uZWN0aW9uIHRvICUwMnglMDJ4OiUwMnglMDJ4OiIKKyAgICAgICAgICAgICIlMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolZC4gKCVkKSIsCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs0XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbNV0sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs2XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbN10sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVs4XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbOV0sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxMF0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzExXSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzEyXSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTNdLAorICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTRdLCAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxNV0sCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxNl0sICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE3XSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzE4XSwgKHVuc2lnbmVkIGNoYXIpc29ja3NyZXFbMTldLAorICAgICAgICAgICAgKCgodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsyMF0gPDwgOCkgfAorICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNvY2tzcmVxWzIxXSksCisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzb2Nrc3JlcVsxXSk7CisgICAgfQorICAgIHJldHVybiBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgIH0KKyAgZWxzZSB7CisgICAgaW5mb2YoZGF0YSwgIlNPQ0tTNSByZXF1ZXN0IGdyYW50ZWQuXG4iKTsKKyAgfQorCiAgICh2b2lkKWN1cmx4X25vbmJsb2NrKHNvY2ssIFRSVUUpOwogICByZXR1cm4gQ1VSTEVfT0s7IC8qIFByb3h5IHdhcyBzdWNjZXNzZnVsISAqLwogfQpkaWZmIC0tZ2l0IGEvbGliL3NvY2tzLmggYi9saWIvc29ja3MuaAppbmRleCBhNDRhZGE2Li4zNDg3MDdlIDEwMDY0NAotLS0gYS9saWIvc29ja3MuaAorKysgYi9saWIvc29ja3MuaApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgImN1cmxfc2V0dXAuaCIKIAogI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQotI2RlZmluZSBDdXJsX1NPQ0tTNChhLGIsYyxkLGUsZikgQ1VSTEVfTk9UX0JVSUxUX0lOCisjZGVmaW5lIEN1cmxfU09DS1M0KGEsYixjLGQsZSkgQ1VSTEVfTk9UX0JVSUxUX0lOCiAjZGVmaW5lIEN1cmxfU09DS1M1KGEsYixjLGQsZSxmKSBDVVJMRV9OT1RfQlVJTFRfSU4KICNlbHNlCiAvKgpAQCAtNDksOCArNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcm90b2NvbDRhKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubik7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGxvZ3MgaW4gdG8gYSBTT0NLUzUgcHJveHkgYW5kIHNlbmRzIHRoZSBzcGVjaWZpY3MgdG8gdGhlCmRpZmYgLS1naXQgYS9saWIvc29ja3NfZ3NzYXBpLmMgYi9saWIvc29ja3NfZ3NzYXBpLmMKaW5kZXggMzY5MjQ1YS4uMzJkNjcyNSAxMDA2NDQKLS0tIGEvbGliL3NvY2tzX2dzc2FwaS5jCisrKyBiL2xpYi9zb2Nrc19nc3NhcGkuYwpAQCAtNDYsNyArNDYsNyBAQAogc3RhdGljIGludCBjaGVja19nc3NfZXJyKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgT01fdWludDMyIG1ham9yX3N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICBPTV91aW50MzIgbWlub3Jfc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQogewogICBpZihHU1NfRVJST1IobWFqb3Jfc3RhdHVzKSkgewogICAgIE9NX3VpbnQzMiBtYWpfc3RhdCwgbWluX3N0YXQ7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnX2N0eCwgJnN0YXR1c19zdHJpbmcpOwogICAgICAgaWYobWFqX3N0YXQgPT0gR1NTX1NfQ09NUExFVEUpIHsKICAgICAgICAgaWYoc2l6ZW9mKGJ1ZikgPiBsZW4gKyBzdGF0dXNfc3RyaW5nLmxlbmd0aCArIDEpIHsKLSAgICAgICAgICBzdHJjcHkoYnVmK2xlbiwgKGNoYXIqKSBzdGF0dXNfc3RyaW5nLnZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkoYnVmK2xlbiwgKGNoYXIgKikgc3RhdHVzX3N0cmluZy52YWx1ZSk7CiAgICAgICAgICAgbGVuICs9IHN0YXR1c19zdHJpbmcubGVuZ3RoOwogICAgICAgICB9CiAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZzdGF0dXNfc3RyaW5nKTsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dfY3R4LCAmc3RhdHVzX3N0cmluZyk7CiAgICAgICBpZihtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSkgewogICAgICAgICBpZihzaXplb2YoYnVmKSA+IGxlbiArIHN0YXR1c19zdHJpbmcubGVuZ3RoKQotICAgICAgICAgIHN0cmNweShidWYrbGVuLCAoY2hhciopIHN0YXR1c19zdHJpbmcudmFsdWUpOworICAgICAgICAgIHN0cmNweShidWYrbGVuLCAoY2hhciAqKSBzdGF0dXNfc3RyaW5nLnZhbHVlKTsKICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5fc3RhdCwgJnN0YXR1c19zdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTEyMyw2ICsxMjMsNyBAQAogICB1bnNpZ25lZCBjaGFyIHNvY2tzcmVxWzRdOyAvKiByb29tIGZvciBHU1MtQVBJIGV4Y2hhbmdlIGhlYWRlciBvbmx5ICovCiAgIGNvbnN0IGNoYXIgKnNlcnZpY2VwdHIgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV9TRVJWSUNFX05BTUVdID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZX1NFUlZJQ0VfTkFNRV0gOiAicmNtZCI7CisgIGNvbnN0IHNpemVfdCBzZXJ2aWNlcHRyX2xlbmd0aCA9IHN0cmxlbihzZXJ2aWNlcHRyKTsKIAogICAvKiAgIEdTUy1BUEkgcmVxdWVzdCBsb29rcyBsaWtlCiAgICAqICstLS0tKy0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTM0LDIyICsxMzUsMjMgQEAKIAogICAvKiBwcmVwYXJlIHNlcnZpY2UgbmFtZSAqLwogICBpZihzdHJjaHIoc2VydmljZXB0ciwgJy8nKSkgewotICAgIHNlcnZpY2UudmFsdWUgPSBtYWxsb2Moc3RybGVuKHNlcnZpY2VwdHIpKTsKKyAgICBzZXJ2aWNlLmxlbmd0aCA9IHNlcnZpY2VwdHJfbGVuZ3RoOworICAgIHNlcnZpY2UudmFsdWUgPSBtYWxsb2Moc2VydmljZS5sZW5ndGgpOwogICAgIGlmKCFzZXJ2aWNlLnZhbHVlKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7Ci0gICAgc2VydmljZS5sZW5ndGggPSBzdHJsZW4oc2VydmljZXB0cik7CiAgICAgbWVtY3B5KHNlcnZpY2UudmFsdWUsIHNlcnZpY2VwdHIsIHNlcnZpY2UubGVuZ3RoKTsKIAogICAgIGdzc19tYWpvcl9zdGF0dXMgPSBnc3NfaW1wb3J0X25hbWUoJmdzc19taW5vcl9zdGF0dXMsICZzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdzc19PSUQpIEdTU19DX05VTExfT0lELCAmc2VydmVyKTsKICAgfQogICBlbHNlIHsKLSAgICBzZXJ2aWNlLnZhbHVlID0gbWFsbG9jKHN0cmxlbihzZXJ2aWNlcHRyKSArc3RybGVuKGNvbm4tPnByb3h5Lm5hbWUpKzIpOworICAgIHNlcnZpY2UudmFsdWUgPSBtYWxsb2Moc2VydmljZXB0cl9sZW5ndGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZSkrMik7CiAgICAgaWYoIXNlcnZpY2UudmFsdWUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICBzZXJ2aWNlLmxlbmd0aCA9IHN0cmxlbihzZXJ2aWNlcHRyKSArc3RybGVuKGNvbm4tPnByb3h5Lm5hbWUpKzE7CisgICAgc2VydmljZS5sZW5ndGggPSBzZXJ2aWNlcHRyX2xlbmd0aCArIHN0cmxlbihjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWUpKzE7CiAgICAgc25wcmludGYoc2VydmljZS52YWx1ZSwgc2VydmljZS5sZW5ndGgrMSwgIiVzQCVzIiwKLSAgICAgICAgICAgICBzZXJ2aWNlcHRyLCBjb25uLT5wcm94eS5uYW1lKTsKKyAgICAgICAgICAgICBzZXJ2aWNlcHRyLCBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWUpOwogCiAgICAgZ3NzX21ham9yX3N0YXR1cyA9IGdzc19pbXBvcnRfbmFtZSgmZ3NzX21pbm9yX3N0YXR1cywgJnNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgJnNlcnZlcik7CmRpZmYgLS1naXQgYS9saWIvc29ja3Nfc3NwaS5jIGIvbGliL3NvY2tzX3NzcGkuYwppbmRleCA2MDUzNDkwLi5lZGM3M2FkIDEwMDY0NAotLS0gYS9saWIvc29ja3Nfc3NwaS5jCisrKyBiL2xpYi9zb2Nrc19zc3BpLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqLwogc3RhdGljIGludCBjaGVja19zc3BpX2VycihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1VSSVRZX1NUQVRVUyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKIHsKICAgaWYoc3RhdHVzICE9IFNFQ19FX09LICYmCiAgICAgIHN0YXR1cyAhPSBTRUNfSV9DT01QTEVURV9BTkRfQ09OVElOVUUgJiYKQEAgLTg2LDYgKzg2LDcgQEAKICAgdW5zaWduZWQgY2hhciBzb2Nrc3JlcVs0XTsgLyogcm9vbSBmb3IgR1NTLUFQSSBleGNoYW5nZSBoZWFkZXIgb25seSAqLwogICBjb25zdCBjaGFyICpzZXJ2aWNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlfU0VSVklDRV9OQU1FXSA/CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV9TRVJWSUNFX05BTUVdICA6ICJyY21kIjsKKyAgY29uc3Qgc2l6ZV90IHNlcnZpY2VfbGVuZ3RoID0gc3RybGVuKHNlcnZpY2UpOwogCiAgIC8qICAgR1NTLUFQSSByZXF1ZXN0IGxvb2tzIGxpa2UKICAgICogKy0tLS0rLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMDIsMTEgKzEwMywxMyBAQAogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgIH0KICAgZWxzZSB7Ci0gICAgc2VydmljZV9uYW1lID0gbWFsbG9jKHN0cmxlbihzZXJ2aWNlKSArIHN0cmxlbihjb25uLT5wcm94eS5uYW1lKSArIDIpOworICAgIHNlcnZpY2VfbmFtZSA9IG1hbGxvYyhzZXJ2aWNlX2xlbmd0aCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWUpICsgMik7CiAgICAgaWYoIXNlcnZpY2VfbmFtZSkKICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgIHNucHJpbnRmKHNlcnZpY2VfbmFtZSwgc3RybGVuKHNlcnZpY2UpICtzdHJsZW4oY29ubi0+cHJveHkubmFtZSkrMiwKLSAgICAgICAgICAgICAiJXMvJXMiLCBzZXJ2aWNlLCBjb25uLT5wcm94eS5uYW1lKTsKKyAgICBzbnByaW50ZihzZXJ2aWNlX25hbWUsIHNlcnZpY2VfbGVuZ3RoICsKKyAgICAgICAgICAgICBzdHJsZW4oY29ubi0+c29ja3NfcHJveHkuaG9zdC5uYW1lKSsyLCAiJXMvJXMiLAorICAgICAgICAgICAgIHNlcnZpY2UsIGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QubmFtZSk7CiAgIH0KIAogICBpbnB1dF9kZXNjLmNCdWZmZXJzID0gMTsKZGlmZiAtLWdpdCBhL2xpYi9zcGVlZGNoZWNrLmMgYi9saWIvc3BlZWRjaGVjay5jCmluZGV4IDEzYzM0YWYuLmJjMTVkOTcgMTAwNjQ0Ci0tLSBhL2xpYi9zcGVlZGNoZWNrLmMKKysrIGIvbGliL3NwZWVkY2hlY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDAsOCArNDAsOCBAQAogICAgICBkYXRhLT5zZXQubG93X3NwZWVkX3RpbWUgJiYKICAgICAgKEN1cmxfdHZsb25nKGRhdGEtPnN0YXRlLmtlZXBzX3NwZWVkKSAhPSAwKSAmJgogICAgICAoZGF0YS0+cHJvZ3Jlc3MuY3VycmVudF9zcGVlZCA8IGRhdGEtPnNldC5sb3dfc3BlZWRfbGltaXQpKSB7Ci0gICAgbG9uZyBob3dsb25nID0gQ3VybF90dmRpZmYobm93LCBkYXRhLT5zdGF0ZS5rZWVwc19zcGVlZCk7Ci0gICAgbG9uZyBuZXh0Y2hlY2sgPSAoZGF0YS0+c2V0Lmxvd19zcGVlZF90aW1lICogMTAwMCkgLSBob3dsb25nOworICAgIHRpbWVfdCBob3dsb25nID0gQ3VybF90dmRpZmYobm93LCBkYXRhLT5zdGF0ZS5rZWVwc19zcGVlZCk7CisgICAgdGltZV90IG5leHRjaGVjayA9IChkYXRhLT5zZXQubG93X3NwZWVkX3RpbWUgKiAxMDAwKSAtIGhvd2xvbmc7CiAKICAgICAvKiBXZSBhcmUgbm93IGJlbG93IHRoZSAibG93IHNwZWVkIGxpbWl0Ii4gSWYgd2UgYXJlIGJlbG93IGl0CiAgICAgICAgZm9yICJsb3cgc3BlZWQgdGltZSIgc2Vjb25kcyB3ZSBjb25zaWRlciB0aGF0IGVub3VnaCByZWFzb24KZGlmZiAtLWdpdCBhL2xpYi9zc2guYyBiL2xpYi9zc2guYwppbmRleCA3YmMzMTM2Li4wNGNhMzljIDEwMDY0NAotLS0gYS9saWIvc3NoLmMKKysrIGIvbGliL3NzaC5jCkBAIC03MSw4ICs3MSw4IEBACiAjaW5jbHVkZSAidXJsLmgiCiAjaW5jbHVkZSAic3BlZWRjaGVjay5oIgogI2luY2x1ZGUgImdldGluZm8uaCIKLQotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyZHVwLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInZ0bHMvdnRscy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJzdHJlcnJvci5oIgpAQCAtNDE2LDEyICs0MTYsMTIgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGNoYXIgKnJlYWxfcGF0aCA9IE5VTEw7CiAgIGNoYXIgKndvcmtpbmdfcGF0aDsKLSAgaW50IHdvcmtpbmdfcGF0aF9sZW47Ci0KLSAgd29ya2luZ19wYXRoID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIGRhdGEtPnN0YXRlLnBhdGgsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd29ya2luZ19wYXRoX2xlbik7Ci0gIGlmKCF3b3JraW5nX3BhdGgpCi0gICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIHNpemVfdCB3b3JraW5nX3BhdGhfbGVuOworICBDVVJMY29kZSByZXN1bHQgPQorICAgIEN1cmxfdXJsZGVjb2RlKGRhdGEsIGRhdGEtPnN0YXRlLnBhdGgsIDAsICZ3b3JraW5nX3BhdGgsCisgICAgICAgICAgICAgICAgICAgJndvcmtpbmdfcGF0aF9sZW4sIEZBTFNFKTsKKyAgaWYocmVzdWx0KQorICAgIHJldHVybiByZXN1bHQ7CiAKICAgLyogQ2hlY2sgZm9yIC9+LywgaW5kaWNhdGluZyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5ICovCiAgIGlmKGNvbm4tPmhhbmRsZXItPnByb3RvY29sICYgQ1VSTFBST1RPX1NDUCkgewpAQCAtNjc2LDcgKzY3Niw3IEBACiAgICAqIGFnYWluc3QgYSBrbm93biBmaW5nZXJwcmludCwgaWYgYXZhaWxhYmxlLgogICAgKi8KICAgaWYocHVia2V5X21kNSAmJiBzdHJsZW4ocHVia2V5X21kNSkgPT0gMzIpIHsKLSAgICBpZighZmluZ2VycHJpbnQgfHwgIXN0cmVxdWFsKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKKyAgICBpZighZmluZ2VycHJpbnQgfHwgIXN0cmNhc2Vjb21wYXJlKG1kNWJ1ZmZlciwgcHVia2V5X21kNSkpIHsKICAgICAgIGlmKGZpbmdlcnByaW50KQogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgIkRlbmllZCBlc3RhYmxpc2hpbmcgc3NoIHNlc3Npb246IG1pc21hdGNoIG1kNSBmaW5nZXJwcmludC4gIgpAQCAtODc0LDcgKzg3NCw3IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBzc2hjLT5wYXNzcGhyYXNlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF07CisgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2Q7CiAgICAgICAgIGlmKCFzc2hjLT5wYXNzcGhyYXNlKQogICAgICAgICAgIHNzaGMtPnBhc3NwaHJhc2UgPSAiIjsKIApAQCAtMTIzMyw3ICsxMjMzLDcgQEAKICAgICAgICAgc3NoYy0+YWNjZXB0ZmFpbCA9IFRSVUU7CiAgICAgICB9CiAKLSAgICAgIGlmKGN1cmxfc3RyZXF1YWwoInB3ZCIsIGNtZCkpIHsKKyAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKCJwd2QiLCBjbWQpKSB7CiAgICAgICAgIC8qIG91dHB1dCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyByZXF1ZXN0ZWQgKi8KICAgICAgICAgY2hhciAqdG1wID0gYXByaW50ZigiMjU3IFwiJXNcIiBpcyBjdXJyZW50IGRpcmVjdG9yeS5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Z0cF9zY3AtPnBhdGgpOwpAQCAtMTI5Nyw5ICsxMjk3LDkgQEAKICAgICAgICAgICogT3BlblNTSCdzIHNmdHAgcHJvZ3JhbSBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbGlic3NoMgogICAgICAgICAgKiBmdW5jdGlvbnMuCiAgICAgICAgICAqLwotICAgICAgICBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJjaGdycCAiLCA2KSB8fAotICAgICAgICAgICBjdXJsX3N0cm5lcXVhbChjbWQsICJjaG1vZCAiLCA2KSB8fAotICAgICAgICAgICBjdXJsX3N0cm5lcXVhbChjbWQsICJjaG93biAiLCA2KSApIHsKKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImNoZ3JwICIsIDYpIHx8CisgICAgICAgICAgIHN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCAiLCA2KSB8fAorICAgICAgICAgICBzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24gIiwgNikgKSB7CiAgICAgICAgICAgLyogYXR0cmlidXRlIGNoYW5nZSAqLwogCiAgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgY29udGFpbnMgdGhlIG1vZGUgdG8gc2V0ICovCkBAIC0xMzIxLDggKzEzMjEsOCBAQAogICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1NUQVQpOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAibG4gIiwgMykgfHwKLSAgICAgICAgICAgICAgICBjdXJsX3N0cm5lcXVhbChjbWQsICJzeW1saW5rICIsIDgpKSB7CisgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgImxuICIsIDMpIHx8CisgICAgICAgICAgICAgICAgc3RybmNhc2Vjb21wYXJlKGNtZCwgInN5bWxpbmsgIiwgOCkpIHsKICAgICAgICAgICAvKiBzeW1ib2xpYyBsaW5raW5nICovCiAgICAgICAgICAgLyogc3NoYy0+cXVvdGVfcGF0aDEgaXMgdGhlIHNvdXJjZSAqLwogICAgICAgICAgIC8qIGdldCB0aGUgZGVzdGluYXRpb24gKi8KQEAgLTEzNDIsMTIgKzEzNDIsMTIgQEAKICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9TWU1MSU5LKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGN1cmxfc3RybmVxdWFsKGNtZCwgIm1rZGlyICIsIDYpKSB7CisgICAgICAgIGVsc2UgaWYoc3RybmNhc2Vjb21wYXJlKGNtZCwgIm1rZGlyICIsIDYpKSB7CiAgICAgICAgICAgLyogY3JlYXRlIGRpciAqLwogICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX01LRElSKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGN1cmxfc3RybmVxdWFsKGNtZCwgInJlbmFtZSAiLCA3KSkgeworICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJyZW5hbWUgIiwgNykpIHsKICAgICAgICAgICAvKiByZW5hbWUgZmlsZSAqLwogICAgICAgICAgIC8qIGZpcnN0IHBhcmFtIGlzIHRoZSBzb3VyY2UgcGF0aCAqLwogICAgICAgICAgIC8qIHNlY29uZCBwYXJhbSBpcyB0aGUgZGVzdC4gcGF0aCAqLwpAQCAtMTM2NiwxNyArMTM2NiwxNyBAQAogICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1JFTkFNRSk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJybWRpciAiLCA2KSkgeworICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybWRpciAiLCA2KSkgewogICAgICAgICAgIC8qIGRlbGV0ZSBkaXIgKi8KICAgICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9RVU9URV9STURJUik7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJybSAiLCAzKSkgeworICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJybSAiLCAzKSkgewogICAgICAgICAgIHN0YXRlKGNvbm4sIFNTSF9TRlRQX1FVT1RFX1VOTElOSyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNpZmRlZiBIQVNfU1RBVFZGU19TVVBQT1JUCi0gICAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAic3RhdHZmcyAiLCA4KSkgeworICAgICAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZShjbWQsICJzdGF0dmZzICIsIDgpKSB7CiAgICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NGVFBfUVVPVEVfU1RBVFZGUyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE0MzEsNyArMTQzMSw3IEBACiAgICAgICAgIHNzaGMtPmFjY2VwdGZhaWwgPSBUUlVFOwogICAgICAgfQogCi0gICAgICBpZighY3VybF9zdHJuZXF1YWwoY21kLCAiY2htb2QiLCA1KSkgeworICAgICAgaWYoIXN0cm5jYXNlY29tcGFyZShjbWQsICJjaG1vZCIsIDUpKSB7CiAgICAgICAgIC8qIFNpbmNlIGNob3duIGFuZCBjaGdycCBvbmx5IHNldCBvd25lciBPUiBncm91cCBidXQgbGlic3NoMiB3YW50cyB0bwogICAgICAgICAgKiBzZXQgdGhlbSBib3RoIGF0IG9uY2UsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBjdXJyZW50IG93bmVyc2hpcAogICAgICAgICAgKiBmaXJzdC4gIFRoaXMgdGFrZXMgYW4gZXh0cmEgcHJvdG9jb2wgcm91bmQgdHJpcC4KQEAgLTE0NTcsNyArMTQ1Nyw3IEBACiAgICAgICB9CiAKICAgICAgIC8qIE5vdyBzZXQgdGhlIG5ldyBhdHRyaWJ1dGVzLi4uICovCi0gICAgICBpZihjdXJsX3N0cm5lcXVhbChjbWQsICJjaGdycCIsIDUpKSB7CisgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hncnAiLCA1KSkgewogICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5naWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CiAgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOwogICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy5naWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKQEAgLTE0NzEsNyArMTQ3MSw3IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAiY2htb2QiLCA1KSkgeworICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2htb2QiLCA1KSkgewogICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5wZXJtaXNzaW9ucyA9IHN0cnRvdWwoc3NoYy0+cXVvdGVfcGF0aDEsIE5VTEwsIDgpOwogICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy5mbGFncyA9IExJQlNTSDJfU0ZUUF9BVFRSX1BFUk1JU1NJT05TOwogICAgICAgICAvKiBwZXJtaXNzaW9ucyBhcmUgb2N0YWwgKi8KQEAgLTE0ODYsNyArMTQ4Niw3IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGVsc2UgaWYoY3VybF9zdHJuZXF1YWwoY21kLCAiY2hvd24iLCA1KSkgeworICAgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoY21kLCAiY2hvd24iLCA1KSkgewogICAgICAgICBzc2hjLT5xdW90ZV9hdHRycy51aWQgPSBzdHJ0b3VsKHNzaGMtPnF1b3RlX3BhdGgxLCBOVUxMLCAxMCk7CiAgICAgICAgIHNzaGMtPnF1b3RlX2F0dHJzLmZsYWdzID0gTElCU1NIMl9TRlRQX0FUVFJfVUlER0lEOwogICAgICAgICBpZihzc2hjLT5xdW90ZV9hdHRycy51aWQgPT0gMCAmJiAhSVNESUdJVChzc2hjLT5xdW90ZV9wYXRoMVswXSkgJiYKQEAgLTE4OTUsNyArMTg5NSw3IEBACiAgICAgICAgIC8qIHNpbmNlIHdlIGRvbid0IHJlYWxseSB3YWl0IGZvciBhbnl0aGluZyBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRoZQogICAgICAgICAgICBzdGF0ZSBtYWNoaW5lIHRvIG1vdmUgb24gYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB3ZSBzZXQgYSB2ZXJ5IHNob3J0CiAgICAgICAgICAgIHRpbWVvdXQgaGVyZSAqLwotICAgICAgICBDdXJsX2V4cGlyZShkYXRhLCAxKTsKKyAgICAgICAgQ3VybF9leHBpcmUoZGF0YSwgMCk7CiAKICAgICAgICAgc3RhdGUoY29ubiwgU1NIX1NUT1ApOwogICAgICAgfQpAQCAtMjExMiw5ICsyMTEyLDEwIEBACiAKICAgICAgIC8qIGdldCByb29tIGZvciB0aGUgZmlsZW5hbWUgYW5kIGV4dHJhIG91dHB1dCAqLwogICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbiArPSA0ICsgc3NoYy0+cmVhZGRpcl9sZW47Ci0gICAgICBuZXdfcmVhZGRpcl9saW5lID0gcmVhbGxvYyhzc2hjLT5yZWFkZGlyX2xpbmUsIHNzaGMtPnJlYWRkaXJfdG90YWxMZW4pOworICAgICAgbmV3X3JlYWRkaXJfbGluZSA9IEN1cmxfc2FmZXJlYWxsb2Moc3NoYy0+cmVhZGRpcl9saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoYy0+cmVhZGRpcl90b3RhbExlbik7CiAgICAgICBpZighbmV3X3JlYWRkaXJfbGluZSkgewotICAgICAgICBDdXJsX3NhZmVmcmVlKHNzaGMtPnJlYWRkaXJfbGluZSk7CisgICAgICAgIHNzaGMtPnJlYWRkaXJfbGluZSA9IE5VTEw7CiAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9maWxlbmFtZSk7CiAgICAgICAgIEN1cmxfc2FmZWZyZWUoc3NoYy0+cmVhZGRpcl9sb25nZW50cnkpOwogICAgICAgICBzdGF0ZShjb25uLCBTU0hfU0ZUUF9DTE9TRSk7CkBAIC0yODYwLDcgKzI4NjEsNyBAQAogICAgICAgaWYoTElCU1NIMl9TRVNTSU9OX0JMT0NLX09VVEJPVU5EICYgZGlyKQogICAgICAgICBmZF93cml0ZSA9IHNvY2s7CiAgICAgICAvKiB3YWl0IGZvciB0aGUgc29ja2V0IHRvIGJlY29tZSByZWFkeSAqLwotICAgICAgQ3VybF9zb2NrZXRfcmVhZHkoZmRfcmVhZCwgZmRfd3JpdGUsCisgICAgICBDdXJsX3NvY2tldF9jaGVjayhmZF9yZWFkLCBDVVJMX1NPQ0tFVF9CQUQsIGZkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdD4xMDAwPzEwMDA6bGVmdCk7IC8qIGlnbm9yZSByZXN1bHQgKi8KICAgICB9CiAjZW5kaWYKQEAgLTMxMDksNyArMzExMCw2IEBACiAKIH0KIAotLyogcmV0dXJuIG51bWJlciBvZiByZWNlaXZlZCAoZGVjcnlwdGVkKSBieXRlcyAqLwogc3RhdGljIHNzaXplX3Qgc2NwX3NlbmQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBDVVJMY29kZSAqZXJyKQogewpAQCAtMzEzNCwxMCArMzEzNCw2IEBACiAgIHJldHVybiBud3JpdGU7CiB9CiAKLS8qCi0gKiBJZiB0aGUgcmVhZCB3b3VsZCBibG9jayAoRVdPVUxEQkxPQ0spIHdlIHJldHVybiAtMS4gT3RoZXJ3aXNlIHdlIHJldHVybgotICogYSByZWd1bGFyIENVUkxjb2RlIHZhbHVlLgotICovCiBzdGF0aWMgc3NpemVfdCBzY3BfcmVjdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICptZW0sIHNpemVfdCBsZW4sIENVUkxjb2RlICplcnIpCiB7CmRpZmYgLS1naXQgYS9saWIvcmF3c3RyLmMgYi9saWIvc3RyY2FzZS5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGxpYi9yYXdzdHIuYwpyZW5hbWUgdG8gbGliL3N0cmNhc2UuYwppbmRleCA1NjY1ZWJkLi5jY2JhYWMxIDEwMDY0NAotLS0gYS9saWIvcmF3c3RyLmMKKysrIGIvbGliL3N0cmNhc2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjIsNyArMjIsOSBAQAogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgogCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKIC8qIFBvcnRhYmxlLCBjb25zaXN0ZW50IHRvdXBwZXIgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgdG91cHBlcigpIGJlY2F1c2UKICAgIGl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KQEAgLTk5LDkgKzEwMSwxMSBAQAogICoKICAqIFRoZSBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIGNvbXBhcmluZyBhLXogY2FzZSBpbnNlbnNpdGl2ZWx5IGV2ZW4gZm9yCiAgKiBub24tYXNjaWkuCisgKgorICogQHVuaXR0ZXN0OiAxMzAxCiAgKi8KIAotaW50IEN1cmxfcmF3X2VxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQpCitpbnQgQ3VybF9zdHJjYXNlY29tcGFyZShjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kKQogewogICB3aGlsZSgqZmlyc3QgJiYgKnNlY29uZCkgewogICAgIGlmKEN1cmxfcmF3X3RvdXBwZXIoKmZpcnN0KSAhPSBDdXJsX3Jhd190b3VwcGVyKCpzZWNvbmQpKQpAQCAtMTE2LDcgKzEyMCwyMCBAQAogICByZXR1cm4gKEN1cmxfcmF3X3RvdXBwZXIoKmZpcnN0KSA9PSBDdXJsX3Jhd190b3VwcGVyKCpzZWNvbmQpKTsKIH0KIAotaW50IEN1cmxfcmF3X25lcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzaXplX3QgbWF4KQoraW50IEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kKQoreworICBpZihmaXJzdCAmJiBzZWNvbmQpCisgICAgLyogYm90aCBwb2ludGVycyBwb2ludCB0byBzb21ldGhpbmcgdGhlbiBjb21wYXJlIHRoZW0gKi8KKyAgICByZXR1cm4gQ3VybF9zdHJjYXNlY29tcGFyZShmaXJzdCwgc2Vjb25kKTsKKyAgZWxzZQorICAgIC8qIGlmIGJvdGggcG9pbnRlcnMgYXJlIE5VTEwgdGhlbiB0cmVhdCB0aGVtIGFzIGVxdWFsICovCisgICAgcmV0dXJuIChOVUxMID09IGZpcnN0ICYmIE5VTEwgPT0gc2Vjb25kKTsKK30KKworLyoKKyAqIEB1bml0dGVzdDogMTMwMQorICovCitpbnQgQ3VybF9zdHJuY2FzZWNvbXBhcmUoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCwgc2l6ZV90IG1heCkKIHsKICAgd2hpbGUoKmZpcnN0ICYmICpzZWNvbmQgJiYgbWF4KSB7CiAgICAgaWYoQ3VybF9yYXdfdG91cHBlcigqZmlyc3QpICE9IEN1cmxfcmF3X3RvdXBwZXIoKnNlY29uZCkpIHsKQEAgLTE0NiwzICsxNjMsMTQgQEAKICAgICAqZGVzdCsrID0gQ3VybF9yYXdfdG91cHBlcigqc3JjKTsKICAgfSB3aGlsZSgqc3JjKysgJiYgLS1uKTsKIH0KKworLyogLS0tIHB1YmxpYyBmdW5jdGlvbnMgLS0tICovCisKK2ludCBjdXJsX3N0cmVxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQpCit7CisgIHJldHVybiBDdXJsX3N0cmNhc2Vjb21wYXJlKGZpcnN0LCBzZWNvbmQpOworfQoraW50IGN1cmxfc3RybmVxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHNpemVfdCBtYXgpCit7CisgIHJldHVybiBDdXJsX3N0cm5jYXNlY29tcGFyZShmaXJzdCwgc2Vjb25kLCBtYXgpOworfQpkaWZmIC0tZ2l0IGEvbGliL3Jhd3N0ci5oIGIvbGliL3N0cmNhc2UuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBsaWIvcmF3c3RyLmgKcmVuYW1lIHRvIGxpYi9zdHJjYXNlLmgKaW5kZXggNGFmMDBmMS4uZWEyYWJjOCAxMDA2NDQKLS0tIGEvbGliL3Jhd3N0ci5oCisrKyBiL2xpYi9zdHJjYXNlLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIEhFQURFUl9DVVJMX1JBV1NUUl9ICi0jZGVmaW5lIEhFQURFUl9DVVJMX1JBV1NUUl9ICisjaWZuZGVmIEhFQURFUl9DVVJMX1NUUkNBU0VfSAorI2RlZmluZSBIRUFERVJfQ1VSTF9TVFJDQVNFX0gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAqICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNSwyMyArMjUsMjcgQEAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KIAogLyoKLSAqIEN1cmxfcmF3X2VxdWFsKCkgaXMgZm9yIGRvaW5nICJyYXciIGNhc2UgaW5zZW5zaXRpdmUgc3RyaW5ncy4gVGhpcyBpcyBtZWFudAotICogdG8gYmUgbG9jYWxlIGluZGVwZW5kZW50IGFuZCBvbmx5IGNvbXBhcmUgc3RyaW5ncyB3ZSBrbm93IGFyZSBzYWZlIGZvcgotICogdGhpcy4KKyAqIE9ubHkgInJhdyIgY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmdzLiBUaGlzIGlzIG1lYW50IHRvIGJlIGxvY2FsZSBpbmRlcGVuZGVudAorICogYW5kIG9ubHkgY29tcGFyZSBzdHJpbmdzIHdlIGtub3cgYXJlIHNhZmUgZm9yIHRoaXMuCiAgKgogICogVGhlIGZ1bmN0aW9uIGlzIGNhcGFibGUgb2YgY29tcGFyaW5nIGEteiBjYXNlIGluc2Vuc2l0aXZlbHkgZXZlbiBmb3IKICAqIG5vbi1hc2NpaS4KICAqLwotaW50IEN1cmxfcmF3X2VxdWFsKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQpOwotaW50IEN1cmxfcmF3X25lcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzaXplX3QgbWF4KTsKKworI2RlZmluZSBzdHJjYXNlY29tcGFyZShhLGIpIEN1cmxfc3RyY2FzZWNvbXBhcmUoYSxiKQorI2RlZmluZSBzdHJuY2FzZWNvbXBhcmUoYSxiLGMpIEN1cmxfc3RybmNhc2Vjb21wYXJlKGEsYixjKQorCitpbnQgQ3VybF9zdHJjYXNlY29tcGFyZShjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kKTsKK2ludCBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCk7CitpbnQgQ3VybF9zdHJuY2FzZWNvbXBhcmUoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCwgc2l6ZV90IG1heCk7CiAKIGNoYXIgQ3VybF9yYXdfdG91cHBlcihjaGFyIGluKTsKIAogLyogY2hlY2twcmVmaXgoKSBpcyBhIHNob3J0ZXIgdmVyc2lvbiBvZiB0aGUgYWJvdmUsIHVzZWQgd2hlbiB0aGUgZmlyc3QKICAgIGFyZ3VtZW50IGlzIHplcm8tYnl0ZSB0ZXJtaW5hdGVkICovCi0jZGVmaW5lIGNoZWNrcHJlZml4KGEsYikgICAgQ3VybF9yYXdfbmVxdWFsKGEsYixzdHJsZW4oYSkpCisjZGVmaW5lIGNoZWNrcHJlZml4KGEsYikgICAgY3VybF9zdHJuZXF1YWwoYSxiLHN0cmxlbihhKSkKIAogdm9pZCBDdXJsX3N0cm50b3VwcGVyKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pOworY2hhciBDdXJsX3Jhd190b3VwcGVyKGNoYXIgaW4pOwogCi0jZW5kaWYgLyogSEVBREVSX0NVUkxfUkFXU1RSX0ggKi8KLQorI2VuZGlmIC8qIEhFQURFUl9DVVJMX1NUUkNBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3N0cmR1cC5jIGIvbGliL3N0cmR1cC5jCmluZGV4IDIzZjU1NGUuLjEzNmI2OTMgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJkdXAuYworKysgYi9saWIvc3RyZHVwLmMKQEAgLTY1LDkgKzY1LDkgQEAKICAqIFJldHVybnMgdGhlIG5ldyBwb2ludGVyIG9yIE5VTEwgb24gZmFpbHVyZS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotY2hhciAqQ3VybF9tZW1kdXAoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuZ3RoKQordm9pZCAqQ3VybF9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuZ3RoKQogewotICBjaGFyICpidWZmZXIgPSBtYWxsb2MobGVuZ3RoKTsKKyAgdm9pZCAqYnVmZmVyID0gbWFsbG9jKGxlbmd0aCk7CiAgIGlmKCFidWZmZXIpCiAgICAgcmV0dXJuIE5VTEw7IC8qIGZhaWwgKi8KIApAQCAtNzUsMyArNzUsMjYgQEAKIAogICByZXR1cm4gYnVmZmVyOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ3VybF9zYWZlcmVhbGxvYyhwdHIsIHNpemUpCisgKgorICogRG9lcyBhIG5vcm1hbCByZWFsbG9jKCksIGJ1dCB3aWxsIGZyZWUgdGhlIGRhdGEgcG9pbnRlciBpZiB0aGUgcmVhbGxvYworICogZmFpbHMuIElmICdzaXplJyBpcyB6ZXJvLCBpdCB3aWxsIGZyZWUgdGhlIGRhdGEgYW5kIHJldHVybiBhIGZhaWx1cmUuCisgKgorICogVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyBwcm92aWRlZCBhbmQgdXNlZCB0byBoZWxwIHVzIGF2b2lkIGEgY29tbW9uCisgKiBtaXN0YWtlIHBhdHRlcm4gd2hlbiB3ZSBjb3VsZCBwYXNzIGluIGEgemVybywgY2F0Y2ggdGhlIE5VTEwgcmV0dXJuIGFuZCBlbmQKKyAqIHVwIGZyZWUnaW5nIHRoZSBtZW1vcnkgdHdpY2UuCisgKgorICogUmV0dXJucyB0aGUgbmV3IHBvaW50ZXIgb3IgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkICpDdXJsX3NhZmVyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKmRhdGFwID0gcmVhbGxvYyhwdHIsIHNpemUpOworICBpZihzaXplICYmICFkYXRhcCkKKyAgICAvKiBvbmx5IGZyZWUgJ3B0cicgaWYgc2l6ZSB3YXMgbm9uLXplcm8gKi8KKyAgICBmcmVlKHB0cik7CisgIHJldHVybiBkYXRhcDsKK30KZGlmZiAtLWdpdCBhL2xpYi9zdHJkdXAuaCBiL2xpYi9zdHJkdXAuaAppbmRleCA0YzQ4Y2E0Li5hZTNkNWQwIDEwMDY0NAotLS0gYS9saWIvc3RyZHVwLmgKKysrIGIvbGliL3N0cmR1cC5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEhBVkVfU1RSRFVQCiBleHRlcm4gY2hhciAqY3VybHhfc3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CiAjZW5kaWYKLWNoYXIgKkN1cmxfbWVtZHVwKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGJ1ZmZlcl9sZW5ndGgpOwordm9pZCAqQ3VybF9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgYnVmZmVyX2xlbmd0aCk7Cit2b2lkICpDdXJsX3NhZmVyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwogCiAjZW5kaWYgLyogSEVBREVSX0NVUkxfU1RSRFVQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9zdHJlcXVhbC5jIGIvbGliL3N0cmVxdWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYzM3ODQuLjAwMDAwMDAKLS0tIGEvbGliL3N0cmVxdWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCi0gKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEzLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCi0gKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KLSAqCi0gKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJjdXJsX3NldHVwLmgiCi0KLSNpZmRlZiBIQVZFX1NUUklOR1NfSAotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKLQotLyoKLSAqIEB1bml0dGVzdDogMTMwMQotICovCi1pbnQgY3VybF9zdHJlcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kKQotewotI2lmIGRlZmluZWQoSEFWRV9TVFJDQVNFQ01QKQotICByZXR1cm4gIShzdHJjYXNlY21wKShmaXJzdCwgc2Vjb25kKTsKLSNlbGlmIGRlZmluZWQoSEFWRV9TVFJDTVBJKQotICByZXR1cm4gIShzdHJjbXBpKShmaXJzdCwgc2Vjb25kKTsKLSNlbGlmIGRlZmluZWQoSEFWRV9TVFJJQ01QKQotICByZXR1cm4gIShzdHJpY21wKShmaXJzdCwgc2Vjb25kKTsKLSNlbHNlCi0gIHdoaWxlKCpmaXJzdCAmJiAqc2Vjb25kKSB7Ci0gICAgaWYodG91cHBlcigqZmlyc3QpICE9IHRvdXBwZXIoKnNlY29uZCkpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmaXJzdCsrOwotICAgIHNlY29uZCsrOwotICB9Ci0gIHJldHVybiB0b3VwcGVyKCpmaXJzdCkgPT0gdG91cHBlcigqc2Vjb25kKTsKLSNlbmRpZgotfQotCi0vKgotICogQHVuaXR0ZXN0OiAxMzAxCi0gKi8KLWludCBjdXJsX3N0cm5lcXVhbChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzaXplX3QgbWF4KQotewotI2lmIGRlZmluZWQoSEFWRV9TVFJOQ0FTRUNNUCkKLSAgcmV0dXJuICFzdHJuY2FzZWNtcChmaXJzdCwgc2Vjb25kLCBtYXgpOwotI2VsaWYgZGVmaW5lZChIQVZFX1NUUk5DTVBJKQotICByZXR1cm4gIXN0cm5jbXBpKGZpcnN0LCBzZWNvbmQsIG1heCk7Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1RSTklDTVApCi0gIHJldHVybiAhc3RybmljbXAoZmlyc3QsIHNlY29uZCwgbWF4KTsKLSNlbHNlCi0gIHdoaWxlKCpmaXJzdCAmJiAqc2Vjb25kICYmIG1heCkgewotICAgIGlmKHRvdXBwZXIoKmZpcnN0KSAhPSB0b3VwcGVyKCpzZWNvbmQpKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbWF4LS07Ci0gICAgZmlyc3QrKzsKLSAgICBzZWNvbmQrKzsKLSAgfQotICBpZigwID09IG1heCkKLSAgICByZXR1cm4gMTsgLyogdGhleSBhcmUgZXF1YWwgdGhpcyBmYXIgKi8KLQotICByZXR1cm4gdG91cHBlcigqZmlyc3QpID09IHRvdXBwZXIoKnNlY29uZCk7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2xpYi9zdHJlcnJvci5jIGIvbGliL3N0cmVycm9yLmMKaW5kZXggMGUyNjhkNS4uZGI1MGM3ZCAxMDA2NDQKLS0tIGEvbGliL3N0cmVycm9yLmMKKysrIGIvbGliL3N0cmVycm9yLmMKQEAgLTM1LDggKzM1LDggQEAKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogCi0jaWZkZWYgVVNFX0xJQklETgotI2luY2x1ZGUgPGlkbmEuaD4KKyNpZmRlZiBVU0VfTElCSUROMgorI2luY2x1ZGUgPGlkbjIuaD4KICNlbmRpZgogCiAjaWZkZWYgVVNFX1dJTkRPV1NfU1NQSQpAQCAtNzksOCArNzksOCBAQAogICBjYXNlIENVUkxFX0NPVUxETlRfQ09OTkVDVDoKICAgICByZXR1cm4gIkNvdWxkbid0IGNvbm5lY3QgdG8gc2VydmVyIjsKIAotICBjYXNlIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFk6Ci0gICAgcmV0dXJuICJGVFA6IHdlaXJkIHNlcnZlciByZXBseSI7CisgIGNhc2UgQ1VSTEVfV0VJUkRfU0VSVkVSX1JFUExZOgorICAgIHJldHVybiAiV2VpcmQgc2VydmVyIHJlcGx5IjsKIAogICBjYXNlIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEOgogICAgIHJldHVybiAiQWNjZXNzIGRlbmllZCB0byByZW1vdGUgcmVzb3VyY2UiOwpAQCAtNDI3LDcgKzQyNyw3IEBACiAKICNpZmRlZiBVU0VfV0lOU09DSwogCi0vKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgbW9zdCAvIGFsbCAoPykgV2luc29jayBlcnJvcnMgY1VSTCBpcyBhYmxlIHRvIHByb2R1Y2UuCisvKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgbW9zdCAvIGFsbCAoPykgV2luc29jayBlcnJvcnMgY3VybCBpcyBhYmxlIHRvIHByb2R1Y2UuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICoKIGdldF93aW5zb2NrX2Vycm9yIChpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCkBAIC03MjYsODMgKzcyNiw2IEBACiAgIHJldHVybiBidWY7CiB9CiAKLSNpZmRlZiBVU0VfTElCSUROCi0vKgotICogUmV0dXJuIGVycm9yLXN0cmluZyBmb3IgbGliaWRuIHN0YXR1cyBhcyByZXR1cm5lZCBmcm9tIGlkbmFfdG9fYXNjaWlfbHooKS4KLSAqLwotY29uc3QgY2hhciAqQ3VybF9pZG5fc3RyZXJyb3IgKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGVycikKLXsKLSNpZmRlZiBIQVZFX0lETkFfU1RSRVJST1IKLSAgKHZvaWQpY29ubjsKLSAgcmV0dXJuIGlkbmFfc3RyZXJyb3IoKElkbmFfcmMpIGVycik7Ci0jZWxzZQotICBjb25zdCBjaGFyICpzdHI7Ci0gIGNoYXIgKmJ1ZjsKLSAgc2l6ZV90IG1heDsKLQotICBERUJVR0FTU0VSVChjb25uKTsKLQotICBidWYgPSBjb25uLT5zeXNlcnJfYnVmOwotICBtYXggPSBzaXplb2YoY29ubi0+c3lzZXJyX2J1ZiktMTsKLSAgKmJ1ZiA9ICdcMCc7Ci0KLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwotICBzd2l0Y2ggKChJZG5hX3JjKWVycikgewotICAgIGNhc2UgSUROQV9TVUNDRVNTOgotICAgICAgc3RyID0gIk5vIGVycm9yIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSUROQV9TVFJJTkdQUkVQX0VSUk9SOgotICAgICAgc3RyID0gIkVycm9yIGluIHN0cmluZyBwcmVwYXJhdGlvbiI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElETkFfUFVOWUNPREVfRVJST1I6Ci0gICAgICBzdHIgPSAiRXJyb3IgaW4gUHVueWNvZGUgb3BlcmF0aW9uIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSUROQV9DT05UQUlOU19OT05fTERIOgotICAgICAgc3RyID0gIklsbGVnYWwgQVNDSUkgY2hhcmFjdGVycyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElETkFfQ09OVEFJTlNfTUlOVVM6Ci0gICAgICBzdHIgPSAiQ29udGFpbnMgbWludXMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE5BX0lOVkFMSURfTEVOR1RIOgotICAgICAgc3RyID0gIkludmFsaWQgb3V0cHV0IGxlbmd0aCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElETkFfTk9fQUNFX1BSRUZJWDoKLSAgICAgIHN0ciA9ICJObyBBQ0UgcHJlZml4IChcInhuLS1cIikiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE5BX1JPVU5EVFJJUF9WRVJJRllfRVJST1I6Ci0gICAgICBzdHIgPSAiUm91bmQgdHJpcCB2ZXJpZnkgZXJyb3IiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE5BX0NPTlRBSU5TX0FDRV9QUkVGSVg6Ci0gICAgICBzdHIgPSAiQWxyZWFkeSBoYXZlIEFDRSBwcmVmaXggKFwieG4tLVwiKSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElETkFfSUNPTlZfRVJST1I6Ci0gICAgICBzdHIgPSAiTG9jYWxlIGNvbnZlcnNpb24gZmFpbGVkIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSUROQV9NQUxMT0NfRVJST1I6Ci0gICAgICBzdHIgPSAiQWxsb2NhdGlvbiBmYWlsZWQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE5BX0RMT1BFTl9FUlJPUjoKLSAgICAgIHN0ciA9ICJkbG9wZW4oKSBlcnJvciI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgc25wcmludGYoYnVmLCBtYXgsICJlcnJvciAlZCIsIGVycik7Ci0gICAgICBzdHIgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gIH0KLSNlbHNlCi0gIGlmKChJZG5hX3JjKWVyciA9PSBJRE5BX1NVQ0NFU1MpCi0gICAgc3RyID0gIk5vIGVycm9yIjsKLSAgZWxzZQotICAgIHN0ciA9ICJFcnJvciI7Ci0jZW5kaWYKLSAgaWYoc3RyKQotICAgIHN0cm5jcHkoYnVmLCBzdHIsIG1heCk7Ci0gIGJ1ZlttYXhdID0gJ1wwJzsKLSAgcmV0dXJuIChidWYpOwotI2VuZGlmCi19Ci0jZW5kaWYgIC8qIFVTRV9MSUJJRE4gKi8KLQogI2lmZGVmIFVTRV9XSU5ET1dTX1NTUEkKIGNvbnN0IGNoYXIgKkN1cmxfc3NwaV9zdHJlcnJvciAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgZXJyKQogewpkaWZmIC0tZ2l0IGEvbGliL3N0cmVycm9yLmggYi9saWIvc3RyZXJyb3IuaAppbmRleCBhZThjOTZiLi42MjcyNzNlIDEwMDY0NAotLS0gYS9saWIvc3RyZXJyb3IuaAorKysgYi9saWIvc3RyZXJyb3IuaApAQCAtNyw3ICs3LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDEyLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjYsNyArMjYsNyBAQAogCiBjb25zdCBjaGFyICpDdXJsX3N0cmVycm9yIChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBlcnIpOwogCi0jaWZkZWYgVVNFX0xJQklETgorI2lmZGVmIFVTRV9MSUJJRE4yCiBjb25zdCBjaGFyICpDdXJsX2lkbl9zdHJlcnJvciAoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgZXJyKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9saWIvc3RydG9vZmZ0LmMgYi9saWIvc3RydG9vZmZ0LmMKaW5kZXggNmQ1ZDJkNS4uYjg1NGJmNCAxMDA2NDQKLS0tIGEvbGliL3N0cnRvb2ZmdC5jCisrKyBiL2xpYi9zdHJ0b29mZnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgdmFsdWUgPSBjIC0gJ2EnICsgMTA7CiAgIH0KICNlbHNlCi0gIGNvbnN0IGNoYXIgKiBjcDsKKyAgY29uc3QgY2hhciAqY3A7CiAgIGludCB2YWx1ZTsKIAogICBjcCA9IG1lbWNocih2YWxjaGFycywgYywgMTAgKyAyNiArIDI2KTsKZGlmZiAtLWdpdCBhL2xpYi9zeXN0ZW1fd2luMzIuYyBiL2xpYi9zeXN0ZW1fd2luMzIuYwppbmRleCBkNmE5OThiLi43ODczNzU5IDEwMDY0NAotLS0gYS9saWIvc3lzdGVtX3dpbjMyLmMKKysrIGIvbGliL3N5c3RlbV93aW4zMi5jCkBAIC04Myw3ICs4MywzOSBAQAogewogICBib29sIG1hdGNoZWQgPSBGQUxTRTsKIAotI2lmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkgfHwgIWRlZmluZWQoX1dJTjMyX1dJTk5UX1dJTjJLKSB8fCBcCisjaWYgZGVmaW5lZChDVVJMX1dJTkRPV1NfQVBQKQorICAvKiBXZSBoYXZlIG5vIHdheSB0byBkZXRlcm1pbmUgdGhlIFdpbmRvd3MgdmVyc2lvbiBmcm9tIFdpbmRvd3MgYXBwcywKKyAgICAgc28gbGV0J3MgYXNzdW1lIHdlJ3JlIHJ1bm5pbmcgb24gdGhlIHRhcmdldCBXaW5kb3dzIHZlcnNpb24uICovCisgIGNvbnN0IFdPUkQgZnVsbFZlcnNpb24gPSBNQUtFV09SRChtaW5vclZlcnNpb24sIG1ham9yVmVyc2lvbik7CisgIGNvbnN0IFdPUkQgdGFyZ2V0VmVyc2lvbiA9IChXT1JEKV9XSU4zMl9XSU5OVDsKKworICBzd2l0Y2goY29uZGl0aW9uKSB7CisgIGNhc2UgVkVSU0lPTl9MRVNTX1RIQU46CisgICAgbWF0Y2hlZCA9IHRhcmdldFZlcnNpb24gPCBmdWxsVmVyc2lvbjsKKyAgICBicmVhazsKKworICBjYXNlIFZFUlNJT05fTEVTU19USEFOX0VRVUFMOgorICAgIG1hdGNoZWQgPSB0YXJnZXRWZXJzaW9uIDw9IGZ1bGxWZXJzaW9uOworICAgIGJyZWFrOworCisgIGNhc2UgVkVSU0lPTl9FUVVBTDoKKyAgICBtYXRjaGVkID0gdGFyZ2V0VmVyc2lvbiA9PSBmdWxsVmVyc2lvbjsKKyAgICBicmVhazsKKworICBjYXNlIFZFUlNJT05fR1JFQVRFUl9USEFOX0VRVUFMOgorICAgIG1hdGNoZWQgPSB0YXJnZXRWZXJzaW9uID49IGZ1bGxWZXJzaW9uOworICAgIGJyZWFrOworCisgIGNhc2UgVkVSU0lPTl9HUkVBVEVSX1RIQU46CisgICAgbWF0Y2hlZCA9IHRhcmdldFZlcnNpb24gPiBmdWxsVmVyc2lvbjsKKyAgICBicmVhazsKKyAgfQorCisgIGlmKG1hdGNoZWQgJiYgKHBsYXRmb3JtID09IFBMQVRGT1JNX1dJTkRPV1MpKSB7CisgICAgLyogd2UncmUgYWx3YXlzIHJ1bm5pbmcgb24gUExBVEZPUk1fV0lOTlQgKi8KKyAgICBtYXRjaGVkID0gRkFMU0U7CisgIH0KKyNlbGlmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkgfHwgIWRlZmluZWQoX1dJTjMyX1dJTk5UX1dJTjJLKSB8fCBcCiAgICAgKF9XSU4zMl9XSU5OVCA8IF9XSU4zMl9XSU5OVF9XSU4ySykKICAgT1NWRVJTSU9OSU5GTyBvc3ZlcjsKIApAQCAtMTI4LDcgKzE2MCw3IEBACiAgICAgfQogCiAgICAgLyogVmVyaWZ5IHRoZSBwbGF0Zm9ybSBpZGVudGlmaWVyIChpZiBuZWNlc3NhcnkpICovCi0gICAgaWYobWF0Y2hlZCAmJiBwbGF0Zm9ybSAhPSBQTEFURk9STV9ET05UX0NBUkUpIHsKKyAgICBpZihtYXRjaGVkKSB7CiAgICAgICBzd2l0Y2gocGxhdGZvcm0pIHsKICAgICAgIGNhc2UgUExBVEZPUk1fV0lORE9XUzoKICAgICAgICAgaWYob3N2ZXIuZHdQbGF0Zm9ybUlkICE9IFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTKQpAQCAtMTM4LDYgKzE3MCw5IEBACiAgICAgICBjYXNlIFBMQVRGT1JNX1dJTk5UOgogICAgICAgICBpZihvc3Zlci5kd1BsYXRmb3JtSWQgIT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UKQogICAgICAgICAgIG1hdGNoZWQgPSBGQUxTRTsKKworICAgICAgZGVmYXVsdDogLyogbGlrZSBwbGF0Zm9ybSA9PSBQTEFURk9STV9ET05UX0NBUkUgKi8KKyAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9saWIvdGVsbmV0LmMgYi9saWIvdGVsbmV0LmMKaW5kZXggY2M3MDVjZi4uZGRmM2QzYiAxMDA2NDQKLS0tIGEvbGliL3RlbG5ldC5jCisrKyBiL2xpYi90ZWxuZXQuYwpAQCAtNTgsOCArNTgsNyBAQAogCiAjaW5jbHVkZSAiYXJwYV90ZWxuZXQuaCIKICNpbmNsdWRlICJzZWxlY3QuaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCkBAIC04NDYsNyArODQ1LDcgQEAKICAgICAgICAgICAgICAgb3B0aW9uX2tleXdvcmQsIG9wdGlvbl9hcmcpID09IDIpIHsKIAogICAgICAgLyogVGVybWluYWwgdHlwZSAqLwotICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJUVFlQRSIpKSB7CisgICAgICBpZihzdHJjYXNlY29tcGFyZShvcHRpb25fa2V5d29yZCwgIlRUWVBFIikpIHsKICAgICAgICAgc3RybmNweSh0bi0+c3Vib3B0X3R0eXBlLCBvcHRpb25fYXJnLCAzMSk7CiAgICAgICAgIHRuLT5zdWJvcHRfdHR5cGVbMzFdID0gMDsgLyogU3RyaW5nIHRlcm1pbmF0aW9uICovCiAgICAgICAgIHRuLT51c19wcmVmZXJyZWRbQ1VSTF9URUxPUFRfVFRZUEVdID0gQ1VSTF9ZRVM7CkBAIC04NTQsNyArODUzLDcgQEAKICAgICAgIH0KIAogICAgICAgLyogRGlzcGxheSB2YXJpYWJsZSAqLwotICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJYRElTUExPQyIpKSB7CisgICAgICBpZihzdHJjYXNlY29tcGFyZShvcHRpb25fa2V5d29yZCwgIlhESVNQTE9DIikpIHsKICAgICAgICAgc3RybmNweSh0bi0+c3Vib3B0X3hkaXNwbG9jLCBvcHRpb25fYXJnLCAxMjcpOwogICAgICAgICB0bi0+c3Vib3B0X3hkaXNwbG9jWzEyN10gPSAwOyAvKiBTdHJpbmcgdGVybWluYXRpb24gKi8KICAgICAgICAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9YRElTUExPQ10gPSBDVVJMX1lFUzsKQEAgLTg2Miw3ICs4NjEsNyBAQAogICAgICAgfQogCiAgICAgICAvKiBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJORVdfRU5WIikpIHsKKyAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKG9wdGlvbl9rZXl3b3JkLCAiTkVXX0VOViIpKSB7CiAgICAgICAgIGJlZyA9IGN1cmxfc2xpc3RfYXBwZW5kKHRuLT50ZWxuZXRfdmFycywgb3B0aW9uX2FyZyk7CiAgICAgICAgIGlmKCFiZWcpIHsKICAgICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwpAQCAtODc0LDcgKzg3Myw3IEBACiAgICAgICB9CiAKICAgICAgICAgICAvKiBXaW5kb3cgU2l6ZSAqLwotICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJXUyIpKSB7CisgICAgICBpZihzdHJjYXNlY29tcGFyZShvcHRpb25fa2V5d29yZCwgIldTIikpIHsKICAgICAgICAgaWYoc3NjYW5mKG9wdGlvbl9hcmcsICIlaHUlKlt4WF0laHUiLAogICAgICAgICAgICAgICAgICAgJnRuLT5zdWJvcHRfd3N4LCAmdG4tPnN1Ym9wdF93c3kpID09IDIpCiAgICAgICAgICAgdG4tPnVzX3ByZWZlcnJlZFtDVVJMX1RFTE9QVF9OQVdTXSA9IENVUkxfWUVTOwpAQCAtODg3LDcgKzg4Niw3IEBACiAgICAgICB9CiAKICAgICAgIC8qIFRvIHRha2UgY2FyZSBvciBub3Qgb2YgdGhlIDh0aCBiaXQgaW4gZGF0YSBleGNoYW5nZSAqLwotICAgICAgaWYoQ3VybF9yYXdfZXF1YWwob3B0aW9uX2tleXdvcmQsICJCSU5BUlkiKSkgeworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUob3B0aW9uX2tleXdvcmQsICJCSU5BUlkiKSkgewogICAgICAgICBiaW5hcnlfb3B0aW9uPWF0b2kob3B0aW9uX2FyZyk7CiAgICAgICAgIGlmKGJpbmFyeV9vcHRpb24hPTEpIHsKICAgICAgICAgICB0bi0+dXNfcHJlZmVycmVkW0NVUkxfVEVMT1BUX0JJTkFSWV0gPSBDVVJMX05POwpAQCAtMTAwNSw3ICsxMDA0LDcgQEAKICAgc3NpemVfdCBieXRlc193cml0dGVuOwogICBpbnQgZXJyOwogICB1bnNpZ25lZCBzaG9ydCB4LCB5OwotICB1bnNpZ25lZCBjaGFyKnVjMSwgKnVjMjsKKyAgdW5zaWduZWQgY2hhciAqdWMxLCAqdWMyOwogCiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3QgVEVMTkVUICp0biA9IChzdHJ1Y3QgVEVMTkVUICopZGF0YS0+cmVxLnByb3RvcDsKQEAgLTEwMjEsOCArMTAyMCw4IEBACiAgICAgLyogV2luZG93IHNpemUgbXVzdCBiZSBzZW50IGFjY29yZGluZyB0byB0aGUgJ25ldHdvcmsgb3JkZXInICovCiAgICAgeD1odG9ucyh0bi0+c3Vib3B0X3dzeCk7CiAgICAgeT1odG9ucyh0bi0+c3Vib3B0X3dzeSk7Ci0gICAgdWMxID0gKHVuc2lnbmVkIGNoYXIqKSZ4OwotICAgIHVjMiA9ICh1bnNpZ25lZCBjaGFyKikmeTsKKyAgICB1YzEgPSAodW5zaWduZWQgY2hhciAqKSZ4OworICAgIHVjMiA9ICh1bnNpZ25lZCBjaGFyICopJnk7CiAgICAgQ1VSTF9TQl9BQ0NVTSh0biwgdWMxWzBdKTsKICAgICBDVVJMX1NCX0FDQ1VNKHRuLCB1YzFbMV0pOwogICAgIENVUkxfU0JfQUNDVU0odG4sIHVjMlswXSk7CmRpZmYgLS1naXQgYS9saWIvdGZ0cC5jIGIvbGliL3RmdHAuYwppbmRleCBkN2ZmOTRmLi5kZTk5YzZlIDEwMDY0NAotLS0gYS9saWIvdGZ0cC5jCisrKyBiL2xpYi90ZnRwLmMKQEAgLTU1LDkgKzU1LDEwIEBACiAjaW5jbHVkZSAic29ja2FkZHIuaCIgLyogcmVxdWlyZWQgZm9yIEN1cmxfc29ja2FkZHJfc3RvcmFnZSAqLwogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJ1cmwuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAic3BlZWRjaGVjay5oIgogI2luY2x1ZGUgInNlbGVjdC5oIgorI2luY2x1ZGUgImVzY2FwZS5oIgogCiAvKiBUaGUgbGFzdCAzICNpbmNsdWRlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGlzIG9yZGVyICovCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTE5OCw3ICsxOTksNyBAQAogc3RhdGljIENVUkxjb2RlIHRmdHBfc2V0X3RpbWVvdXRzKHRmdHBfc3RhdGVfZGF0YV90ICpzdGF0ZSkKIHsKICAgdGltZV90IG1heHRpbWUsIHRpbWVvdXQ7Ci0gIGxvbmcgdGltZW91dF9tczsKKyAgdGltZV90IHRpbWVvdXRfbXM7CiAgIGJvb2wgc3RhcnQgPSAoc3RhdGUtPnN0YXRlID09IFRGVFBfU1RBVEVfU1RBUlQpID8gVFJVRSA6IEZBTFNFOwogCiAgIHRpbWUoJnN0YXRlLT5zdGFydF90aW1lKTsKQEAgLTQ4NCwxMCArNDg1LDEwIEBACiAgICAgLyogQXMgUkZDMzYxNyBkZXNjcmliZXMgdGhlIHNlcGFyYXRvciBzbGFzaCBpcyBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUKICAgICAgICBmaWxlIG5hbWUgc28gd2Ugc2tpcCB0aGUgYWx3YXlzLXByZXNlbnQgZmlyc3QgbGV0dGVyIG9mIHRoZSBwYXRoCiAgICAgICAgc3RyaW5nLiAqLwotICAgIGZpbGVuYW1lID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsICZzdGF0ZS0+Y29ubi0+ZGF0YS0+c3RhdGUucGF0aFsxXSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZighZmlsZW5hbWUpCi0gICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCAmc3RhdGUtPmNvbm4tPmRhdGEtPnN0YXRlLnBhdGhbMV0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCBOVUxMLCBGQUxTRSk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIHNucHJpbnRmKChjaGFyICopc3RhdGUtPnNwYWNrZXQuZGF0YSsyLAogICAgICAgICAgICAgIHN0YXRlLT5ibGtzaXplLApAQCAtNzA1LDYgKzcwNiw3IEBACiAgIGludCByYmxvY2s7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqayA9ICZkYXRhLT5yZXE7CisgIGludCBjYjsgLyogQnl0ZXMgY3VycmVudGx5IHJlYWQgKi8KIAogICBzd2l0Y2goZXZlbnQpIHsKIApAQCAtNzYyLDkgKzc2NCwyMCBAQAogICAgICAgcmV0dXJuIENVUkxFX09LOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEN1cmxfZmlsbHJlYWRidWZmZXIoc3RhdGUtPmNvbm4sIHN0YXRlLT5ibGtzaXplLCAmc3RhdGUtPnNieXRlcyk7Ci0gICAgaWYocmVzdWx0KQotICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAvKiBURlRQIGNvbnNpZGVycyBkYXRhIGJsb2NrIHNpemUgPCA1MTIgYnl0ZXMgYXMgYW4gZW5kIG9mIHNlc3Npb24uIFNvCisgICAgICogaW4gc29tZSBjYXNlcyB3ZSBtdXN0IHdhaXQgZm9yIGFkZGl0aW9uYWwgZGF0YSB0byBidWlsZCBmdWxsICg1MTIgYnl0ZXMpCisgICAgICogZGF0YSBibG9jay4KKyAgICAgKiAqLworICAgIHN0YXRlLT5zYnl0ZXMgPSAwOworICAgIHN0YXRlLT5jb25uLT5kYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlID0gKGNoYXIgKilzdGF0ZS0+c3BhY2tldC5kYXRhKzQ7CisgICAgZG8geworICAgICAgcmVzdWx0ID0gQ3VybF9maWxscmVhZGJ1ZmZlcihzdGF0ZS0+Y29ubiwgc3RhdGUtPmJsa3NpemUgLSBzdGF0ZS0+c2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2IpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgc3RhdGUtPnNieXRlcyArPSBjYjsKKyAgICAgIHN0YXRlLT5jb25uLT5kYXRhLT5yZXEudXBsb2FkX2Zyb21oZXJlICs9IGNiOworICAgIH0gd2hpbGUoc3RhdGUtPnNieXRlcyA8IHN0YXRlLT5ibGtzaXplICYmIGNiICE9IDApOwogCiAgICAgc2J5dGVzID0gc2VuZHRvKHN0YXRlLT5zb2NrZmQsICh2b2lkICopIHN0YXRlLT5zcGFja2V0LmRhdGEsCiAgICAgICAgICAgICAgICAgICAgIDQgKyBzdGF0ZS0+c2J5dGVzLCBTRU5EXzRUSF9BUkcsCkBAIC0xMjIxLDcgKzEyMzQsNyBAQAogICB9CiAgIGVsc2UgewogICAgIC8qIG5vIHRpbWVvdXRzIHRvIGhhbmRsZSwgY2hlY2sgb3VyIHNvY2tldCAqLwotICAgIHJjID0gQ3VybF9zb2NrZXRfcmVhZHkoc3RhdGUtPnNvY2tmZCwgQ1VSTF9TT0NLRVRfQkFELCAwKTsKKyAgICByYyA9IFNPQ0tFVF9SRUFEQUJMRShzdGF0ZS0+c29ja2ZkLCAwKTsKIAogICAgIGlmKHJjID09IC0xKSB7CiAgICAgICAvKiBiYWlsIG91dCAqLwpAQCAtMTM0Myw3ICsxMzU2LDcgQEAKIHN0YXRpYyBDVVJMY29kZSB0ZnRwX3NldHVwX2Nvbm5lY3Rpb24oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubikKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGNoYXIgKiB0eXBlOworICBjaGFyICp0eXBlOwogICBjaGFyIGNvbW1hbmQ7CiAKICAgY29ubi0+c29ja3R5cGUgPSBTT0NLX0RHUkFNOyAgIC8qIFVEUCBkYXRhZ3JhbSBiYXNlZCAqLwpkaWZmIC0tZ2l0IGEvbGliL3RpbWV2YWwuYyBiL2xpYi90aW1ldmFsLmMKaW5kZXggNjI5ZjFjOC4uZjNiMjA3YSAxMDA2NDQKLS0tIGEvbGliL3RpbWV2YWwuYworKysgYi9saWIvdGltZXZhbC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICAqIFJldHVybnM6IHRoZSB0aW1lIGRpZmZlcmVuY2UgaW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gRm9yIGxhcmdlIGRpZmZzIGl0CiAgKiByZXR1cm5zIDB4N2ZmZmZmZmYgb24gMzJiaXQgdGltZV90IHN5c3RlbXMuCiAgKi8KLWxvbmcgY3VybHhfdHZkaWZmKHN0cnVjdCB0aW1ldmFsIG5ld2VyLCBzdHJ1Y3QgdGltZXZhbCBvbGRlcikKK3RpbWVfdCBjdXJseF90dmRpZmYoc3RydWN0IHRpbWV2YWwgbmV3ZXIsIHN0cnVjdCB0aW1ldmFsIG9sZGVyKQogewogI2lmIFNJWkVPRl9USU1FX1QgPCA4CiAgIC8qIGZvciAzMmJpdCB0aW1lX3Qgc3lzdGVtcywgYWRkIGEgcHJlY2F1dGlvbiB0byBhdm9pZCBvdmVyZmxvdyBmb3IgcmVhbGx5CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICByZXR1cm4gMHg3ZmZmZmZmZjsKICNlbmRpZgogICByZXR1cm4gKG5ld2VyLnR2X3NlYy1vbGRlci50dl9zZWMpKjEwMDArCi0gICAgKGxvbmcpKG5ld2VyLnR2X3VzZWMtb2xkZXIudHZfdXNlYykvMTAwMDsKKyAgICAodGltZV90KShuZXdlci50dl91c2VjLW9sZGVyLnR2X3VzZWMpLzEwMDA7CiB9CiAKIC8qCkBAIC0xNDQsNyArMTQ0LDcgQEAKIH0KIAogLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZ2l2ZW4gaW5wdXQgdGltZXZhbCBzdHJ1Y3QgKi8KLWxvbmcgQ3VybF90dmxvbmcoc3RydWN0IHRpbWV2YWwgdDEpCit0aW1lX3QgQ3VybF90dmxvbmcoc3RydWN0IHRpbWV2YWwgdDEpCiB7CiAgIHJldHVybiB0MS50dl9zZWM7CiB9CmRpZmYgLS1naXQgYS9saWIvdGltZXZhbC5oIGIvbGliL3RpbWV2YWwuaAppbmRleCA1MGMzMWEyLi4wOWY4YjNhIDEwMDY0NAotLS0gYS9saWIvdGltZXZhbC5oCisrKyBiL2xpYi90aW1ldmFsLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAwNywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTM3LDcgKzM3LDcgQEAKICAqCiAgKiBSZXR1cm5zOiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCiAgKi8KLWxvbmcgY3VybHhfdHZkaWZmKHN0cnVjdCB0aW1ldmFsIHQxLCBzdHJ1Y3QgdGltZXZhbCB0Mik7Cit0aW1lX3QgY3VybHhfdHZkaWZmKHN0cnVjdCB0aW1ldmFsIHQxLCBzdHJ1Y3QgdGltZXZhbCB0Mik7CiAKIC8qCiAgKiBTYW1lIGFzIGN1cmx4X3R2ZGlmZiBidXQgd2l0aCBmdWxsIHVzZWMgcmVzb2x1dGlvbi4KQEAgLTQ2LDcgKzQ2LDcgQEAKICAqLwogZG91YmxlIGN1cmx4X3R2ZGlmZl9zZWNzKHN0cnVjdCB0aW1ldmFsIHQxLCBzdHJ1Y3QgdGltZXZhbCB0Mik7CiAKLWxvbmcgQ3VybF90dmxvbmcoc3RydWN0IHRpbWV2YWwgdDEpOwordGltZV90IEN1cmxfdHZsb25nKHN0cnVjdCB0aW1ldmFsIHQxKTsKIAogLyogVGhlc2UgdHdvIGRlZmluZXMgYmVsb3cgZXhpc3QgdG8gcHJvdmlkZSB0aGUgb2xkZXIgQVBJIGZvciBsaWJyYXJ5CiAgICBpbnRlcm5hbHMgb25seS4gKi8KZGlmZiAtLWdpdCBhL2xpYi90cmFuc2Zlci5jIGIvbGliL3RyYW5zZmVyLmMKaW5kZXggZjU5ODdmZS4uMDUyZWNjMSAxMDA2NDQKLS0tIGEvbGliL3RyYW5zZmVyLmMKKysrIGIvbGliL3RyYW5zZmVyLmMKQEAgLTIxLDEwICsyMSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiY3VybF9zZXR1cC5oIgotCiAjaW5jbHVkZSAic3RydG9vZmZ0LmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKIAogI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgpAQCAtNzUsNiArNzIsNyBAQAogI2luY2x1ZGUgIm11bHRpaWYuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiCisjaW5jbHVkZSAiaHR0cDIuaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCkBAIC0zODQsMTEgKzM4MiwxNSBAQAogICogR28gYWhlYWQgYW5kIGRvIGEgcmVhZCBpZiB3ZSBoYXZlIGEgcmVhZGFibGUgc29ja2V0IG9yIGlmCiAgKiB0aGUgc3RyZWFtIHdhcyByZXdvdW5kIChpbiB3aGljaCBjYXNlIHdlIGhhdmUgZGF0YSBpbiBhCiAgKiBidWZmZXIpCisgKgorICogcmV0dXJuICcqY29tZWJhY2snIFRSVUUgaWYgd2UgZGlkbid0IHByb3Blcmx5IGRyYWluIHRoZSBzb2NrZXQgc28gdGhpcworICogZnVuY3Rpb24gc2hvdWxkIGdldCBjYWxsZWQgYWdhaW4gd2l0aG91dCBzZWxlY3QoKSBvciBzaW1pbGFyIGluIGJldHdlZW4hCiAgKi8KIHN0YXRpYyBDVVJMY29kZSByZWFkd3JpdGVfZGF0YShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgU2luZ2xlUmVxdWVzdCAqaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRpZHdoYXQsIGJvb2wgKmRvbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkaWR3aGF0LCBib29sICpkb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmNvbWViYWNrKQogewogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKICAgc3NpemVfdCBucmVhZDsgLyogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KQEAgLTM5OCw2ICs0MDAsNyBAQAogICBpbnQgbWF4bG9vcHMgPSAxMDA7CiAKICAgKmRvbmUgPSBGQUxTRTsKKyAgKmNvbWViYWNrID0gRkFMU0U7CiAKICAgLyogVGhpcyBpcyB3aGVyZSB3ZSBsb29wIHVudGlsIHdlIGhhdmUgcmVhZCBldmVyeXRoaW5nIHRoZXJlIGlzIHRvCiAgICAgIHJlYWQgb3Igd2UgZ2V0IGEgQ1VSTEVfQUdBSU4gKi8KQEAgLTUyOSw2ICs1MzIsMTMgQEAKICAgICAgICBpcyBub24taGVhZGVycy4gKi8KICAgICBpZihrLT5zdHIgJiYgIWstPmhlYWRlciAmJiAobnJlYWQgPiAwIHx8IGlzX2VtcHR5X2RhdGEpKSB7CiAKKyAgICAgIGlmKGRhdGEtPnNldC5vcHRfbm9fYm9keSkgeworICAgICAgICAvKiBkYXRhIGFycml2ZXMgYWx0aG91Z2ggd2Ugd2FudCBub25lLCBiYWlsIG91dCAqLworICAgICAgICBzdHJlYW1jbG9zZShjb25uLCAiaWdub3JpbmcgYm9keSIpOworICAgICAgICAqZG9uZSA9IFRSVUU7CisgICAgICAgIHJldHVybiBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFk7CisgICAgICB9CisKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX0hUVFAKICAgICAgIGlmKDAgPT0gay0+Ym9keXdyaXRlcyAmJiAhaXNfZW1wdHlfZGF0YSkgewogICAgICAgICAvKiBUaGVzZSBjaGVja3MgYXJlIG9ubHkgbWFkZSB0aGUgZmlyc3QgdGltZSB3ZSBhcmUgYWJvdXQgdG8KQEAgLTgwNCw2ICs4MTQsMTIgQEAKIAogICB9IHdoaWxlKGRhdGFfcGVuZGluZyhjb25uKSAmJiBtYXhsb29wcy0tKTsKIAorICBpZihtYXhsb29wcyA8PSAwKSB7CisgICAgLyogd2UgbWFyayBpdCBhcyByZWFkLWFnYWluLXBsZWFzZSAqLworICAgIGNvbm4tPmNzZWxlY3RfYml0cyA9IENVUkxfQ1NFTEVDVF9JTjsKKyAgICAqY29tZWJhY2sgPSBUUlVFOworICB9CisKICAgaWYoKChrLT5rZWVwb24gJiAoS0VFUF9SRUNWfEtFRVBfU0VORCkpID09IEtFRVBfU0VORCkgJiYKICAgICAgY29ubi0+Yml0cy5jbG9zZSkgewogICAgIC8qIFdoZW4gd2UndmUgcmVhZCB0aGUgZW50aXJlIHRoaW5nIGFuZCB0aGUgY2xvc2UgYml0IGlzIHNldCwgdGhlIHNlcnZlcgpAQCAtODIxLDYgKzgzNyw4IEBACiB7CiAgIGstPmtlZXBvbiAmPSB+S0VFUF9TRU5EOyAvKiB3ZSdyZSBkb25lIHdyaXRpbmcgKi8KIAorICBDdXJsX2h0dHAyX2RvbmVfc2VuZGluZyhjb25uKTsKKwogICBpZihjb25uLT5iaXRzLnJld2luZGFmdGVyc2VuZCkgewogICAgIENVUkxjb2RlIHJlc3VsdCA9IEN1cmxfcmVhZHJld2luZChjb25uKTsKICAgICBpZihyZXN1bHQpCkBAIC0xMDI5LDEwICsxMDQ3LDE0IEBACiAvKgogICogQ3VybF9yZWFkd3JpdGUoKSBpcyB0aGUgbG93LWxldmVsIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGRhdGEgaXMgdG8KICAqIGJlIHJlYWQgYW5kIHdyaXR0ZW4gdG8vZnJvbSB0aGUgY29ubmVjdGlvbi4KKyAqCisgKiByZXR1cm4gJypjb21lYmFjaycgVFJVRSBpZiB3ZSBkaWRuJ3QgcHJvcGVybHkgZHJhaW4gdGhlIHNvY2tldCBzbyB0aGlzCisgKiBmdW5jdGlvbiBzaG91bGQgZ2V0IGNhbGxlZCBhZ2FpbiB3aXRob3V0IHNlbGVjdCgpIG9yIHNpbWlsYXIgaW4gYmV0d2VlbiEKICAqLwogQ1VSTGNvZGUgQ3VybF9yZWFkd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29tZWJhY2spCiB7CiAgIHN0cnVjdCBTaW5nbGVSZXF1ZXN0ICprID0gJmRhdGEtPnJlcTsKICAgQ1VSTGNvZGUgcmVzdWx0OwpAQCAtMTA2NCw3ICsxMDg2LDcgQEAKIAogICBpZighc2VsZWN0X3JlcykgLyogQ2FsbCBmb3Igc2VsZWN0KCkvcG9sbCgpIG9ubHksIGlmIHJlYWQvd3JpdGUvZXJyb3IKICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyBpcyBub3Qga25vd24uICovCi0gICAgc2VsZWN0X3JlcyA9IEN1cmxfc29ja2V0X3JlYWR5KGZkX3JlYWQsIGZkX3dyaXRlLCAwKTsKKyAgICBzZWxlY3RfcmVzID0gQ3VybF9zb2NrZXRfY2hlY2soZmRfcmVhZCwgQ1VSTF9TT0NLRVRfQkFELCBmZF93cml0ZSwgMCk7CiAKICAgaWYoc2VsZWN0X3JlcyA9PSBDVVJMX0NTRUxFQ1RfRVJSKSB7CiAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIHJldHVybmVkIGVycm9yIik7CkBAIC0xMDc3LDcgKzEwOTksNyBAQAogICBpZigoay0+a2VlcG9uICYgS0VFUF9SRUNWKSAmJgogICAgICAoKHNlbGVjdF9yZXMgJiBDVVJMX0NTRUxFQ1RfSU4pIHx8IGNvbm4tPmJpdHMuc3RyZWFtX3dhc19yZXdvdW5kKSkgewogCi0gICAgcmVzdWx0ID0gcmVhZHdyaXRlX2RhdGEoZGF0YSwgY29ubiwgaywgJmRpZHdoYXQsIGRvbmUpOworICAgIHJlc3VsdCA9IHJlYWR3cml0ZV9kYXRhKGRhdGEsIGNvbm4sIGssICZkaWR3aGF0LCBkb25lLCBjb21lYmFjayk7CiAgICAgaWYocmVzdWx0IHx8ICpkb25lKQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpAQCAtMTExNSw3ICsxMTM3LDcgQEAKIAogICAgICAgKi8KIAotICAgICAgbG9uZyBtcyA9IEN1cmxfdHZkaWZmKGstPm5vdywgay0+c3RhcnQxMDApOworICAgICAgdGltZV90IG1zID0gQ3VybF90dmRpZmYoay0+bm93LCBrLT5zdGFydDEwMCk7CiAgICAgICBpZihtcyA+PSBkYXRhLT5zZXQuZXhwZWN0XzEwMF90aW1lb3V0KSB7CiAgICAgICAgIC8qIHdlJ3ZlIHdhaXRlZCBsb25nIGVub3VnaCwgY29udGludWUgYW55d2F5ICovCiAgICAgICAgIGstPmV4cDEwMCA9IEVYUDEwMF9TRU5EX0RBVEE7CkBAIC0xMjQ5LDYwICsxMjcxLDYgQEAKICAgcmV0dXJuIGJpdG1hcDsKIH0KIAotLyoKLSAqIERldGVybWluZSBvcHRpbXVtIHNsZWVwIHRpbWUgYmFzZWQgb24gY29uZmlndXJlZCByYXRlLCBjdXJyZW50IHJhdGUsCi0gKiBhbmQgcGFja2V0IHNpemUuCi0gKiBSZXR1cm5zIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KLSAqCi0gKiBUaGUgYmFzaWMgaWRlYSBpcyB0byBhZGp1c3QgdGhlIGRlc2lyZWQgcmF0ZSB1cC9kb3duIGluIHRoaXMgbWV0aG9kCi0gKiBiYXNlZCBvbiB3aGV0aGVyIHdlIGFyZSBydW5uaW5nIHRvbyBzbG93IG9yIHRvbyBmYXN0LiAgVGhlbiwgY2FsY3VsYXRlCi0gKiBob3cgbWFueSBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIG5leHQgcGFja2V0IHRvIGFjaGlldmUgdGhpcyBuZXcKLSAqIHJhdGUuCi0gKi8KLWxvbmcgQ3VybF9zbGVlcF90aW1lKGN1cmxfb2ZmX3QgcmF0ZV9icHMsIGN1cmxfb2ZmX3QgY3VyX3JhdGVfYnBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGt0X3NpemUpCi17Ci0gIGN1cmxfb2ZmX3QgbWluX3NsZWVwID0gMDsKLSAgY3VybF9vZmZfdCBydiA9IDA7Ci0KLSAgaWYocmF0ZV9icHMgPT0gMCkKLSAgICByZXR1cm4gMDsKLQotICAvKiBJZiBydW5uaW5nIGZhc3RlciB0aGFuIGFib3V0IC4xJSBvZiB0aGUgZGVzaXJlZCBzcGVlZCwgc2xvdwotICAgKiB1cyBkb3duIGEgYml0LiAgVXNlIHNoaWZ0IGluc3RlYWQgb2YgZGl2aXNpb24gYXMgdGhlIDAuMSUKLSAgICogY3V0b2ZmIGlzIGFyYml0cmFyeSBhbnl3YXkuCi0gICAqLwotICBpZihjdXJfcmF0ZV9icHMgPiAocmF0ZV9icHMgKyAocmF0ZV9icHMgPj4gMTApKSkgewotICAgIC8qIHJ1bm5pbmcgdG9vIGZhc3QsIGRlY3JlYXNlIHRhcmdldCByYXRlIGJ5IDEvNjR0aCBvZiByYXRlICovCi0gICAgcmF0ZV9icHMgLT0gcmF0ZV9icHMgPj4gNjsKLSAgICBtaW5fc2xlZXAgPSAxOwotICB9Ci0gIGVsc2UgaWYoY3VyX3JhdGVfYnBzIDwgKHJhdGVfYnBzIC0gKHJhdGVfYnBzID4+IDEwKSkpIHsKLSAgICAvKiBydW5uaW5nIHRvbyBzbG93LCBpbmNyZWFzZSB0YXJnZXQgcmF0ZSBieSAxLzY0dGggb2YgcmF0ZSAqLwotICAgIHJhdGVfYnBzICs9IHJhdGVfYnBzID4+IDY7Ci0gIH0KLQotICAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHdlIGRvCi0gICAqIHRoZSBuZXh0IHBhY2tldCBhdCB0aGUgYWRqdXN0ZWQgcmF0ZS4gIFdlIHNob3VsZCB3YWl0Ci0gICAqIGxvbmdlciB3aGVuIHVzaW5nIGxhcmdlciBwYWNrZXRzLCBmb3IgaW5zdGFuY2UuCi0gICAqLwotICBydiA9ICgoY3VybF9vZmZfdCkocGt0X3NpemUgKiAxMDAwKSAvIHJhdGVfYnBzKTsKLQotICAvKiBDYXRjaCByb3VuZGluZyBlcnJvcnMgYW5kIGFsd2F5cyBzbG93IGRvd24gYXQgbGVhc3QgMW1zIGlmCi0gICAqIHdlIGFyZSBydW5uaW5nIHRvbyBmYXN0LgotICAgKi8KLSAgaWYocnYgPCBtaW5fc2xlZXApCi0gICAgcnYgPSBtaW5fc2xlZXA7Ci0KLSAgLyogQm91bmQgdmFsdWUgdG8gZml0IGluICdsb25nJyBvbiAzMi1iaXQgcGxhdGZvcm0uICBUaGF0J3MKLSAgICogcGxlbnR5IGxvbmcgZW5vdWdoIGFueXdheSEKLSAgICovCi0gIGlmKHJ2ID4gMHg3ZmZmZmZmZikKLSAgICBydiA9IDB4N2ZmZmZmZmY7Ci0KLSAgcmV0dXJuIChsb25nKXJ2OwotfQotCiAvKiBDdXJsX2luaXRfQ09OTkVDVCgpIGdldHMgY2FsbGVkIGVhY2ggdGltZSB0aGUgaGFuZGxlIHN3aXRjaGVzIHRvIENPTk5FQ1QKICAgIHdoaWNoIG1lYW5zIHRoaXMgZ2V0cyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzdWJzZXF1ZW50IHJlZGlyZWN0IGV0YyAqLwogdm9pZCBDdXJsX2luaXRfQ09OTkVDVChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQpAQCAtMTMyOCw3ICsxMjk2LDcgQEAKICAgLyogSW5pdCB0aGUgU1NMIHNlc3Npb24gSUQgY2FjaGUgaGVyZS4gV2UgZG8gaXQgaGVyZSBzaW5jZSB3ZSB3YW50IHRvIGRvIGl0CiAgICAgIGFmdGVyIHRoZSAqX3NldG9wdCgpIGNhbGxzICh0aGF0IGNvdWxkIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlKSBidXQKICAgICAgYmVmb3JlIGFueSB0cmFuc2ZlciB0YWtlcyBwbGFjZS4gKi8KLSAgcmVzdWx0ID0gQ3VybF9zc2xfaW5pdHNlc3Npb25zKGRhdGEsIGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9ucyk7CisgIHJlc3VsdCA9IEN1cmxfc3NsX2luaXRzZXNzaW9ucyhkYXRhLCBkYXRhLT5zZXQuZ2VuZXJhbF9zc2wubWF4X3NzbF9zZXNzaW9ucyk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xODc1LDEzICsxODQzLDEyIEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAgIGlmKChkYXRhLT5yZXEuYnl0ZWNvdW50ICsgZGF0YS0+cmVxLmhlYWRlcmJ5dGVjb3VudCA9PSAwKSAmJgotICAgICAgY29ubi0+Yml0cy5yZXVzZSAmJgotICAgICAgIWRhdGEtPnNldC5vcHRfbm9fYm9keSAmJgotICAgICAgKGRhdGEtPnNldC5ydHNwcmVxICE9IFJUU1BSRVFfUkVDRUlWRSkpIHsKLSAgICAvKiBXZSBnb3Qgbm8gZGF0YSwgd2UgYXR0ZW1wdGVkIHRvIHJlLXVzZSBhIGNvbm5lY3Rpb24gYW5kIHlldCB3ZSB3YW50IGEKLSAgICAgICAiYm9keSIuIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBsZWZ0IGFsaXZlIHdoZW4gd2Ugd2VyZQotICAgICAgIGRvbmUgdXNpbmcgaXQgYmVmb3JlLCBidXQgdGhhdCB3YXMgY2xvc2VkIHdoZW4gd2Ugd2FudGVkIHRvIHJlYWQgZnJvbQotICAgICAgIGl0IGFnYWluLiBCYWQgbHVjay4gUmV0cnkgdGhlIHNhbWUgcmVxdWVzdCBvbiBhIGZyZXNoIGNvbm5lY3QhICovCisgICAgIGNvbm4tPmJpdHMucmV1c2UgJiYKKyAgICAgKGRhdGEtPnNldC5ydHNwcmVxICE9IFJUU1BSRVFfUkVDRUlWRSkpIHsKKyAgICAvKiBXZSBkaWRuJ3QgZ2V0IGEgc2luZ2xlIGJ5dGUgd2hlbiB3ZSBhdHRlbXB0ZWQgdG8gcmUtdXNlIGEKKyAgICAgICBjb25uZWN0aW9uLiBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgY29ubmVjdGlvbiB3YXMgbGVmdCBhbGl2ZSB3aGVuIHdlCisgICAgICAgd2VyZSBkb25lIHVzaW5nIGl0IGJlZm9yZSwgYnV0IHRoYXQgd2FzIGNsb3NlZCB3aGVuIHdlIHdhbnRlZCB0byB1c2UgaXQKKyAgICAgICBhZ2Fpbi4gQmFkIGx1Y2suIFJldHJ5IHRoZSBzYW1lIHJlcXVlc3Qgb24gYSBmcmVzaCBjb25uZWN0ISAqLwogICAgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdFxuIik7CiAgICAgKnVybCA9IHN0cmR1cChjb25uLT5kYXRhLT5jaGFuZ2UudXJsKTsKICAgICBpZighKnVybCkKZGlmZiAtLWdpdCBhL2xpYi90cmFuc2Zlci5oIGIvbGliL3RyYW5zZmVyLmgKaW5kZXggMGUyNTNlMy4uNTE4OTY3MiAxMDA2NDQKLS0tIGEvbGliL3RyYW5zZmVyLmgKKysrIGIvbGliL3RyYW5zZmVyLmgKQEAgLTQwLDEwICs0MCw5IEBACiAKIENVUkxjb2RlIEN1cmxfZm9sbG93KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGNoYXIgKm5ld3VybCwKICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3R5cGUgdHlwZSk7Ci0KLQogQ1VSTGNvZGUgQ3VybF9yZWFkd3JpdGUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgYm9vbCAqZG9uZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBib29sICpkb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqY29tZWJhY2spOwogaW50IEN1cmxfc2luZ2xlX2dldHNvY2soY29uc3Qgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtc29ja3MpOwpAQCAtNjUsOCArNjQsNSBAQAogICAgICAgICAgICAgICAgY3VybF9vZmZfdCAqd3JpdGVjb3VudHAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuICovCiApOwogCi1sb25nIEN1cmxfc2xlZXBfdGltZShjdXJsX29mZl90IHJhdGVfYnBzLCBjdXJsX29mZl90IGN1cl9yYXRlX2JwcywKLSAgICAgICAgICAgICAgICAgICAgIGludCBwa3Rfc2l6ZSk7Ci0KICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9UUkFOU0ZFUl9IICovCiAKZGlmZiAtLWdpdCBhL2xpYi91cmwuYyBiL2xpYi91cmwuYwppbmRleCBlNTQ3ZTVjLi41ZGVlN2E3IDEwMDY0NAotLS0gYS9saWIvdXJsLmMKKysrIGIvbGliL3VybC5jCkBAIC01OSwyNCArNTksMTMgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNlbmRpZgogCi0jaWZkZWYgVVNFX0xJQklETgotI2luY2x1ZGUgPGlkbmEuaD4KLSNpbmNsdWRlIDx0bGQuaD4KLSNpbmNsdWRlIDxzdHJpbmdwcmVwLmg+Ci0jaWZkZWYgSEFWRV9JRE5fRlJFRV9ICi0jaW5jbHVkZSA8aWRuLWZyZWUuaD4KLSNlbHNlCi0vKiBwcm90b3R5cGUgZnJvbSBpZG4tZnJlZS5oLCBub3QgcHJvdmlkZWQgYnkgbGliaWRuIDAuNC41J3MgbWFrZSBpbnN0YWxsISAqLwotdm9pZCBpZG5fZnJlZSAodm9pZCAqcHRyKTsKLSNlbmRpZgotI2lmbmRlZiBIQVZFX0lETl9GUkVFCi0vKiBpZiBpZG5fZnJlZSgpIHdhcyBub3QgZm91bmQgaW4gdGhpcyB2ZXJzaW9uIG9mIGxpYmlkbiB1c2UgZnJlZSgpIGluc3RlYWQgKi8KLSNkZWZpbmUgaWRuX2ZyZWUoeCkgKGZyZWUpKHgpCi0jZW5kaWYKKyNpZmRlZiBVU0VfTElCSUROMgorI2luY2x1ZGUgPGlkbjIuaD4KKwogI2VsaWYgZGVmaW5lZChVU0VfV0lOMzJfSUROKQogLyogcHJvdG90eXBlIGZvciBjdXJsX3dpbjMyX2lkbl90b19hc2NpaSgpICovCiBib29sIGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpKGNvbnN0IGNoYXIgKmluLCBjaGFyICoqb3V0KTsKLSNlbmRpZiAgLyogVVNFX0xJQklETiAqLworI2VuZGlmICAvKiBVU0VfTElCSUROMiAqLwogCiAjaW5jbHVkZSAidXJsZGF0YS5oIgogI2luY2x1ZGUgIm5ldHJjLmgiCkBAIC04OCw3ICs3Nyw3IEBACiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgImNvb2tpZS5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInN0cmVycm9yLmgiCiAjaW5jbHVkZSAiZXNjYXBlLmgiCiAjaW5jbHVkZSAic3RydG9rLmgiCkBAIC0xMDAsMTAgKzg5LDEwIEBACiAjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgImVhc3lpZi5oIgogI2luY2x1ZGUgInNwZWVkY2hlY2suaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgIm5vbi1hc2NpaS5oIgogI2luY2x1ZGUgImluZXRfcHRvbi5oIgorI2luY2x1ZGUgImdldGluZm8uaCIKIAogLyogQW5kIG5vdyBmb3IgdGhlIHByb3RvY29scyAqLwogI2luY2x1ZGUgImZ0cC5oIgpAQCAtNDA1LDcgKzM5NCw3IEBACiAgIGlmKCFkYXRhKQogICAgIHJldHVybiBDVVJMRV9PSzsKIAotICBDdXJsX2V4cGlyZShkYXRhLCAwKTsgLyogc2h1dCBvZmYgdGltZXJzICovCisgIEN1cmxfZXhwaXJlX2NsZWFyKGRhdGEpOyAvKiBzaHV0IG9mZiB0aW1lcnMgKi8KIAogICBtID0gZGF0YS0+bXVsdGk7CiAKQEAgLTUzNyw3ICs1MjYsNyBAQAogICBzZXQtPmRuc19jYWNoZV90aW1lb3V0ID0gNjA7IC8qIFRpbWVvdXQgZXZlcnkgNjAgc2Vjb25kcyBieSBkZWZhdWx0ICovCiAKICAgLyogU2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIFNTTCBzZXNzaW9uIElEIGNhY2hlICovCi0gIHNldC0+c3NsLm1heF9zc2xfc2Vzc2lvbnMgPSA1OworICBzZXQtPmdlbmVyYWxfc3NsLm1heF9zc2xfc2Vzc2lvbnMgPSA1OwogCiAgIHNldC0+cHJveHlwb3J0ID0gQ1VSTF9ERUZBVUxUX1BST1hZX1BPUlQ7IC8qIGZyb20gdXJsLmggKi8KICAgc2V0LT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfSFRUUDsgLyogZGVmYXVsdHMgdG8gSFRUUCBwcm94eSAqLwpAQCAtNTUxLDE0ICs1NDAsMTYgQEAKICAgICogbGliY3VybCA3LjEwIGludHJvZHVjZWQgU1NMIHZlcmlmaWNhdGlvbiAqYnkgZGVmYXVsdCohIFRoaXMgbmVlZHMgdG8gYmUKICAgICogc3dpdGNoZWQgb2ZmIHVubGVzcyB3YW50ZWQuCiAgICAqLwotICBzZXQtPnNzbC52ZXJpZnlwZWVyID0gVFJVRTsKLSAgc2V0LT5zc2wudmVyaWZ5aG9zdCA9IFRSVUU7CisgIHNldC0+c3NsLnByaW1hcnkudmVyaWZ5cGVlciA9IFRSVUU7CisgIHNldC0+c3NsLnByaW1hcnkudmVyaWZ5aG9zdCA9IFRSVUU7CiAjaWZkZWYgVVNFX1RMU19TUlAKICAgc2V0LT5zc2wuYXV0aHR5cGUgPSBDVVJMX1RMU0FVVEhfTk9ORTsKICNlbmRpZgogICBzZXQtPnNzaF9hdXRoX3R5cGVzID0gQ1VSTFNTSF9BVVRIX0RFRkFVTFQ7IC8qIGRlZmF1bHRzIHRvIGFueSBhdXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICovCi0gIHNldC0+c3NsLnNlc3Npb25pZCA9IFRSVUU7IC8qIHNlc3Npb24gSUQgY2FjaGluZyBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyAgc2V0LT5nZW5lcmFsX3NzbC5zZXNzaW9uaWQgPSBUUlVFOyAvKiBzZXNzaW9uIElEIGNhY2hpbmcgZW5hYmxlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgKi8KKyAgc2V0LT5wcm94eV9zc2wgPSBzZXQtPnNzbDsKIAogICBzZXQtPm5ld19maWxlX3Blcm1zID0gMDY0NDsgICAgLyogRGVmYXVsdCBwZXJtaXNzaW9ucyAqLwogICBzZXQtPm5ld19kaXJlY3RvcnlfcGVybXMgPSAwNzU1OyAvKiBEZWZhdWx0IHBlcm1pc3Npb25zICovCkBAIC01ODEsMTQgKzU3MiwxNyBAQAogCiAgIC8qIFRoaXMgaXMgb3VyIHByZWZlcnJlZCBDQSBjZXJ0IGJ1bmRsZS9wYXRoIHNpbmNlIGluc3RhbGwgdGltZSAqLwogI2lmIGRlZmluZWQoQ1VSTF9DQV9CVU5ETEUpCi0gIHJlc3VsdCA9IHNldHN0cm9wdCgmc2V0LT5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdLCBDVVJMX0NBX0JVTkRMRSk7CisgIHJlc3VsdCA9IHNldHN0cm9wdCgmc2V0LT5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR10sIENVUkxfQ0FfQlVORExFKTsKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENVUkxfQ0FfUEFUSCkKLSAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZzZXQtPnN0cltTVFJJTkdfU1NMX0NBUEFUSF0sIENVUkxfQ0FfUEFUSCk7CisgIHJlc3VsdCA9IHNldHN0cm9wdCgmc2V0LT5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR10sIENVUkxfQ0FfUEFUSCk7CiAgIGlmKHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0OworCisgIHJlc3VsdCA9IHNldHN0cm9wdCgmc2V0LT5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgQ1VSTF9DQV9QQVRIKTsKICNlbmRpZgogCiAgIHNldC0+d2lsZGNhcmRtYXRjaCAgPSBGQUxTRTsKQEAgLTYwMiw2ICs1OTYsNyBAQAogICBzZXQtPnRjcF9rZWVwaW50dmwgPSA2MDsKICAgc2V0LT50Y3Bfa2VlcGlkbGUgPSA2MDsKICAgc2V0LT50Y3BfZmFzdG9wZW4gPSBGQUxTRTsKKyAgc2V0LT50Y3Bfbm9kZWxheSA9IFRSVUU7CiAKICAgc2V0LT5zc2xfZW5hYmxlX25wbiA9IFRSVUU7CiAgIHNldC0+c3NsX2VuYWJsZV9hbHBuID0gVFJVRTsKQEAgLTY1Nyw2ICs2NTIsOCBAQAogCiAgICAgQ3VybF9jb252ZXJ0X2luaXQoZGF0YSk7CiAKKyAgICBDdXJsX2luaXRpbmZvKGRhdGEpOworCiAgICAgLyogbW9zdCByZWNlbnQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGRlZmluZWQgKi8KICAgICBkYXRhLT5zdGF0ZS5sYXN0Y29ubmVjdCA9IE5VTEw7CiAKQEAgLTcwNSw3ICs3MDIsMTIgQEAKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVDoKICAgICAvKiBzZXQgYSBsaXN0IG9mIGNpcGhlciB3ZSB3YW50IHRvIHVzZSBpbiB0aGUgU1NMIGNvbm5lY3Rpb24gKi8KLSAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVJfTElTVF0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1Q6CisgICAgLyogc2V0IGEgbGlzdCBvZiBjaXBoZXIgd2Ugd2FudCB0byB1c2UgaW4gdGhlIFNTTCBjb25uZWN0aW9uIGZvciBwcm94eSAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKIApAQCAtNzgxLDYgKzc4MywxMCBAQAogICAgICAqLwogICAgIGRhdGEtPnNldC5odHRwX2ZhaWxfb25fZXJyb3IgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUjoKKyAgICBkYXRhLT5zZXQuaHR0cF9rZWVwX3NlbmRpbmdfb25fZXJyb3IgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfVVBMT0FEOgogICBjYXNlIENVUkxPUFRfUFVUOgogICAgIC8qCkBAIC05MDcsNyArOTEzLDE4IEBACiAgICAgICogaW1wbGVtZW50YXRpb25zIGFyZSBsYW1lLgogICAgICAqLwogI2lmZGVmIFVTRV9TU0wKLSAgICBkYXRhLT5zZXQuc3NsLnZlcnNpb24gPSB2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJzaW9uID0gdmFfYXJnKHBhcmFtLCBsb25nKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gQ1VSTEVfVU5LTk9XTl9PUFRJT047CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT046CisgICAgLyoKKyAgICAgKiBTZXQgZXhwbGljaXQgU1NMIHZlcnNpb24gdG8gdHJ5IHRvIGNvbm5lY3Qgd2l0aCBmb3IgcHJveHksIGFzIHNvbWUgU1NMCisgICAgICogaW1wbGVtZW50YXRpb25zIGFyZSBsYW1lLgorICAgICAqLworI2lmZGVmIFVTRV9TU0wKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyc2lvbiA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CiAjZWxzZQogICAgIHJlc3VsdCA9IENVUkxFX1VOS05PV05fT1BUSU9OOwogI2VuZGlmCkBAIC0xMDE0LDcgKzEwMzEsNyBAQAogICAgICAgICAgIChkYXRhLT5zZXQucG9zdGZpZWxkc2l6ZSA+IChjdXJsX29mZl90KSgoc2l6ZV90KS0xKSkpKQogICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKiBwOworICAgICAgICBjaGFyICpwOwogCiAgICAgICAgICh2b2lkKSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NPUFlQT1NURklFTERTXSwgTlVMTCk7CiAKQEAgLTEyMjUsMjMgKzEyNDIsMjMgQEAKICAgICBpZihhcmdwdHIgPT0gTlVMTCkKICAgICAgIGJyZWFrOwogCi0gICAgaWYoQ3VybF9yYXdfZXF1YWwoYXJncHRyLCAiQUxMIikpIHsKKyAgICBpZihzdHJjYXNlY29tcGFyZShhcmdwdHIsICJBTEwiKSkgewogICAgICAgLyogY2xlYXIgYWxsIGNvb2tpZXMgKi8KICAgICAgIEN1cmxfc2hhcmVfbG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUsIENVUkxfTE9DS19BQ0NFU1NfU0lOR0xFKTsKICAgICAgIEN1cmxfY29va2llX2NsZWFyYWxsKGRhdGEtPmNvb2tpZXMpOwogICAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFKTsKICAgICB9Ci0gICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbChhcmdwdHIsICJTRVNTIikpIHsKKyAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFyZ3B0ciwgIlNFU1MiKSkgewogICAgICAgLyogY2xlYXIgc2Vzc2lvbiBjb29raWVzICovCiAgICAgICBDdXJsX3NoYXJlX2xvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfQ09PS0lFLCBDVVJMX0xPQ0tfQUNDRVNTX1NJTkdMRSk7CiAgICAgICBDdXJsX2Nvb2tpZV9jbGVhcnNlc3MoZGF0YS0+Y29va2llcyk7CiAgICAgICBDdXJsX3NoYXJlX3VubG9jayhkYXRhLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOwogICAgIH0KLSAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKGFyZ3B0ciwgIkZMVVNIIikpIHsKKyAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFyZ3B0ciwgIkZMVVNIIikpIHsKICAgICAgIC8qIGZsdXNoIGNvb2tpZXMgdG8gZmlsZSwgdGFrZXMgY2FyZSBvZiB0aGUgbG9ja2luZyAqLwogICAgICAgQ3VybF9mbHVzaF9jb29raWVzKGRhdGEsIDApOwogICAgIH0KLSAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKGFyZ3B0ciwgIlJFTE9BRCIpKSB7CisgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZShhcmdwdHIsICJSRUxPQUQiKSkgewogICAgICAgLyogcmVsb2FkIGNvb2tpZXMgZnJvbSBmaWxlICovCiAgICAgICBDdXJsX2Nvb2tpZV9sb2FkZmlsZXMoZGF0YSk7CiAgICAgICBicmVhazsKQEAgLTE0NDEsMTggKzE0NTgsMzAgQEAKIAogICBjYXNlIENVUkxPUFRfUFJPWFk6CiAgICAgLyoKLSAgICAgKiBTZXQgcHJveHkgc2VydmVyOnBvcnQgdG8gdXNlIGFzIEhUVFAgcHJveHkuCisgICAgICogU2V0IHByb3h5IHNlcnZlcjpwb3J0IHRvIHVzZSBhcyBwcm94eS4KICAgICAgKgotICAgICAqIElmIHRoZSBwcm94eSBpcyBzZXQgdG8gIiIgd2UgZXhwbGljaXRseSBzYXkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHVzZSBhCi0gICAgICogcHJveHkgKGV2ZW4gdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzYXlpbmcgc28pLgorICAgICAqIElmIHRoZSBwcm94eSBpcyBzZXQgdG8gIiIgKGFuZCBDVVJMT1BUX1NPQ0tTX1BST1hZIGlzIHNldCB0byAiIiBvciBOVUxMKQorICAgICAqIHdlIGV4cGxpY2l0bHkgc2F5IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB1c2UgYSBwcm94eQorICAgICAqIChldmVuIHRob3VnaCB0aGVyZSBtaWdodCBiZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2F5aW5nIHNvKS4KICAgICAgKgogICAgICAqIFNldHRpbmcgaXQgdG8gTlVMTCwgbWVhbnMgbm8gcHJveHkgYnV0IGFsbG93cyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICogdG8gZGVjaWRlIGZvciB1cy4KKyAgICAgKiB0byBkZWNpZGUgZm9yIHVzIChpZiBDVVJMT1BUX1NPQ0tTX1BST1hZIHNldHRpbmcgaXQgdG8gTlVMTCkuCiAgICAgICovCiAgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAgICAgYnJlYWs7CiAKKyAgY2FzZSBDVVJMT1BUX1NPQ0tTX1BST1hZOgorICAgIC8qCisgICAgICogU2V0IHByb3h5IHNlcnZlcjpwb3J0IHRvIHVzZSBhcyBTT0NLUyBwcm94eS4KKyAgICAgKgorICAgICAqIElmIHRoZSBwcm94eSBpcyBzZXQgdG8gIiIgb3IgTlVMTCB3ZSBleHBsaWNpdGx5IHNheSB0aGF0IHdlIGRvbid0IHdhbnQKKyAgICAgKiB0byB1c2UgdGhlIHNvY2tzIHByb3h5LgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU09DS1NfUFJPWFldLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworCiAgIGNhc2UgQ1VSTE9QVF9QUk9YWVRZUEU6CiAgICAgLyoKICAgICAgKiBTZXQgcHJveHkgdHlwZS4gSFRUUC9IVFRQXzFfMC9TT0NLUzQvU09DS1M0YS9TT0NLUzUvU09DS1M1X0hPU1ROQU1FCkBAIC0xNDYwLDYgKzE0ODksMTMgQEAKICAgICBkYXRhLT5zZXQucHJveHl0eXBlID0gKGN1cmxfcHJveHl0eXBlKXZhX2FyZyhwYXJhbSwgbG9uZyk7CiAgICAgYnJlYWs7CiAKKyAgY2FzZSBDVVJMT1BUX1NPQ0tTX1BST1hZVFlQRToKKyAgICAvKgorICAgICAqIFNldCBwcm94eSB0eXBlLiBTT0NLUzQvU09DS1M0YS9TT0NLUzUvU09DS1M1X0hPU1ROQU1FCisgICAgICovCisgICAgZGF0YS0+c2V0LnNvY2tzX3Byb3h5dHlwZSA9IChjdXJsX3Byb3h5dHlwZSl2YV9hcmcocGFyYW0sIGxvbmcpOworICAgIGJyZWFrOworCiAgIGNhc2UgQ1VSTE9QVF9QUk9YWV9UUkFOU0ZFUl9NT0RFOgogICAgIC8qCiAgICAgICogc2V0IHRyYW5zZmVyIG1vZGUgKDt0eXBlPTxhfGk+KSB3aGVuIGRvaW5nIEZUUCB2aWEgYW4gSFRUUCBwcm94eQpAQCAtMTkxNywzNSArMTk1Myw3MCBAQAogICAgIC8qCiAgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlCiAgICAgICovCi0gICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xDRVJUOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSBuYW1lIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlIGZvciBwcm94eQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9QUk9YWV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9TU0xDRVJUVFlQRToKICAgICAvKgogICAgICAqIFN0cmluZyB0aGF0IGhvbGRzIGZpbGUgdHlwZSBvZiB0aGUgU1NMIGNlcnRpZmljYXRlIHRvIHVzZQogICAgICAqLwotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFXSwKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV9PUklHXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFOgorICAgIC8qCisgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgZmlsZSB0eXBlIG9mIHRoZSBTU0wgY2VydGlmaWNhdGUgdG8gdXNlIGZvciBwcm94eQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTEtFWToKICAgICAvKgogICAgICAqIFN0cmluZyB0aGF0IGhvbGRzIGZpbGUgbmFtZSBvZiB0aGUgU1NMIGtleSB0byB1c2UKICAgICAgKi8KLSAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xLRVk6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyBmaWxlIG5hbWUgb2YgdGhlIFNTTCBrZXkgdG8gdXNlIGZvciBwcm94eQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX1NTTEtFWVRZUEU6CiAgICAgLyoKICAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyBmaWxlIHR5cGUgb2YgdGhlIFNTTCBrZXkgdG8gdXNlCiAgICAgICovCi0gICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV9PUklHXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEU6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyBmaWxlIHR5cGUgb2YgdGhlIFNTTCBrZXkgdG8gdXNlIGZvciBwcm94eQorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1RZUEVfUFJPWFldLAogICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfS0VZUEFTU1dEOgogICAgIC8qCiAgICAgICogU3RyaW5nIHRoYXQgaG9sZHMgdGhlIFNTTCBvciBTU0ggcHJpdmF0ZSBrZXkgcGFzc3dvcmQuCiAgICAgICovCi0gICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSwKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9LRVlQQVNTV0Q6CisgICAgLyoKKyAgICAgKiBTdHJpbmcgdGhhdCBob2xkcyB0aGUgU1NMIHByaXZhdGUga2V5IHBhc3N3b3JkIGZvciBwcm94eS4KKyAgICAgKi8KKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RfUFJPWFldLAogICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfU1NMRU5HSU5FOgpAQCAtMjAwOCw3ICsyMDc5LDE1IEBACiAgICAgLyoKICAgICAgKiBFbmFibGUgcGVlciBTU0wgdmVyaWZ5aW5nLgogICAgICAqLwotICAgIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlciA9ICgwICE9IHZhX2FyZyhwYXJhbSwgbG9uZykpID8gVFJVRSA6IEZBTFNFOworICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlwZWVyID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVI6CisgICAgLyoKKyAgICAgKiBFbmFibGUgcGVlciBTU0wgdmVyaWZ5aW5nIGZvciBwcm94eS4KKyAgICAgKi8KKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5cGVlciA9CisgICAgICAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKT9UUlVFOkZBTFNFOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfU1NMX1ZFUklGWUhPU1Q6CiAgICAgLyoKQEAgLTIwMjYsNyArMjEwNSwyNSBAQAogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICB9CiAKLSAgICBkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QgPSAoMCAhPSBhcmcpID8gVFJVRSA6IEZBTFNFOworICAgIGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJpZnlob3N0ID0gKDAgIT0gYXJnKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NUOgorICAgIC8qCisgICAgICogRW5hYmxlIHZlcmlmaWNhdGlvbiBvZiB0aGUgaG9zdCBuYW1lIGluIHRoZSBwZWVyIGNlcnRpZmljYXRlIGZvciBwcm94eQorICAgICAqLworICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisKKyAgICAvKiBPYnZpb3VzbHkgcGVvcGxlIGFyZSBub3QgcmVhZGluZyBkb2N1bWVudGF0aW9uIGFuZCB0b28gbWFueSB0aG91Z2h0CisgICAgICAgdGhpcyBhcmd1bWVudCB0b29rIGEgYm9vbGVhbiB3aGVuIGl0IHdhc24ndCBhbmQgbWlzdXNlZCBpdC4gV2UgdGh1cyBiYW4KKyAgICAgICAxIGFzIGEgc2Vuc2libGUgaW5wdXQgYW5kIHdlIHdhcm4gYWJvdXQgaXRzIHVzZS4gVGhlbiB3ZSBvbmx5IGhhdmUgdGhlCisgICAgICAgMiBhY3Rpb24gaW50ZXJuYWxseSBzdG9yZWQgYXMgVFJVRS4gKi8KKworICAgIGlmKDEgPT0gYXJnKSB7CisgICAgICBmYWlsZihkYXRhLCAiQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBubyBsb25nZXIgc3VwcG9ydHMgMSBhcyB2YWx1ZSEiKTsKKyAgICAgIHJldHVybiBDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQ7CisgICAgfQorCisgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnZlcmlmeWhvc3QgPSAoMCAhPSBhcmcpP1RSVUU6RkFMU0U7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTOgogICAgIC8qCkBAIC0yMDM3LDcgKzIxMzQsOCBAQAogICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlzdGF0dXMgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5c3RhdHVzID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIDogRkFMU0U7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OOgogI2lmZGVmIGhhdmVfY3VybHNzbF9zc2xfY3R4CkBAIC0yMDkzLDcgKzIxOTEsMTUgQEAKICAgICAvKgogICAgICAqIFNldCBDQSBpbmZvIGZvciBTU0wgY29ubmVjdGlvbi4gU3BlY2lmeSBmaWxlIG5hbWUgb2YgdGhlIENBIGNlcnRpZmljYXRlCiAgICAgICovCi0gICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR10sCisgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9DQUlORk86CisgICAgLyoKKyAgICAgKiBTZXQgQ0EgaW5mbyBTU0wgY29ubmVjdGlvbiBmb3IgcHJveHkuIFNwZWNpZnkgZmlsZSBuYW1lIG9mIHRoZQorICAgICAqIENBIGNlcnRpZmljYXRlCisgICAgICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICAgICBicmVhazsKICAgY2FzZSBDVVJMT1BUX0NBUEFUSDoKQEAgLTIxMDMsNyArMjIwOSwxNiBAQAogICAgICAqIGNlcnRpZmljYXRlcyB3aGljaCBoYXZlIGJlZW4gcHJlcGFyZWQgdXNpbmcgb3BlbnNzbCBjX3JlaGFzaCB1dGlsaXR5LgogICAgICAqLwogICAgIC8qIFRoaXMgZG9lcyBub3Qgd29yayBvbiB3aW5kb3dzLiAqLwotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlfQ0FQQVRIOgorICAgIC8qCisgICAgICogU2V0IENBIHBhdGggaW5mbyBmb3IgU1NMIGNvbm5lY3Rpb24gcHJveHkuIFNwZWNpZnkgZGlyZWN0b3J5IG5hbWUgb2YgdGhlCisgICAgICogQ0EgY2VydGlmaWNhdGVzIHdoaWNoIGhhdmUgYmVlbiBwcmVwYXJlZCB1c2luZyBvcGVuc3NsIGNfcmVoYXNoIHV0aWxpdHkuCisgICAgICovCisgICAgLyogVGhpcyBkb2VzIG5vdCB3b3JrIG9uIHdpbmRvd3MuICovCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKICNlbHNlCiAgICAgcmVzdWx0ID0gQ1VSTEVfTk9UX0JVSUxUX0lOOwpAQCAtMjExNCw3ICsyMjI5LDE1IEBACiAgICAgICogU2V0IENSTCBmaWxlIGluZm8gZm9yIFNTTCBjb25uZWN0aW9uLiBTcGVjaWZ5IGZpbGUgbmFtZSBvZiB0aGUgQ1JMCiAgICAgICogdG8gY2hlY2sgY2VydGlmaWNhdGVzIHJldm9jYXRpb24KICAgICAgKi8KLSAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSwKKyAgICByZXN1bHQgPSBzZXRzdHJvcHQoJmRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFX09SSUddLAorICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOworICAgIGJyZWFrOworICBjYXNlIENVUkxPUFRfUFJPWFlfQ1JMRklMRToKKyAgICAvKgorICAgICAqIFNldCBDUkwgZmlsZSBpbmZvIGZvciBTU0wgY29ubmVjdGlvbiBmb3IgcHJveHkuIFNwZWNpZnkgZmlsZSBuYW1lIG9mIHRoZQorICAgICAqIENSTCB0byBjaGVjayBjZXJ0aWZpY2F0ZXMgcmV2b2NhdGlvbgorICAgICAqLworICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldLAogICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwogICAgIGJyZWFrOwogICBjYXNlIENVUkxPUFRfSVNTVUVSQ0VSVDoKQEAgLTIxMjIsNyArMjI0NSw3IEBACiAgICAgICogU2V0IElzc3VlciBjZXJ0aWZpY2F0ZSBmaWxlCiAgICAgICogdG8gY2hlY2sgY2VydGlmaWNhdGVzIGlzc3VlcgogICAgICAqLwotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRdLAorICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfT1JJR10sCiAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9URUxORVRPUFRJT05TOgpAQCAtMjIwMyw3ICsyMzI2LDcgQEAKICAgICAgIH0KICNlbmRpZiAgIC8qIENVUkxfRElTQUJMRV9IVFRQICovCiAgICAgICBpZihkYXRhLT5zaGFyZS0+c3Nsc2Vzc2lvbikgewotICAgICAgICBkYXRhLT5zZXQuc3NsLm1heF9zc2xfc2Vzc2lvbnMgPSBkYXRhLT5zaGFyZS0+bWF4X3NzbF9zZXNzaW9uczsKKyAgICAgICAgZGF0YS0+c2V0LmdlbmVyYWxfc3NsLm1heF9zc2xfc2Vzc2lvbnMgPSBkYXRhLT5zaGFyZS0+bWF4X3NzbF9zZXNzaW9uczsKICAgICAgICAgZGF0YS0+c3RhdGUuc2Vzc2lvbiA9IGRhdGEtPnNoYXJlLT5zc2xzZXNzaW9uOwogICAgICAgfQogICAgICAgQ3VybF9zaGFyZV91bmxvY2soZGF0YSwgQ1VSTF9MT0NLX0RBVEFfU0hBUkUpOwpAQCAtMjIzOCw4ICsyMzYxLDE0IEBACiAKICAgY2FzZSBDVVJMT1BUX1NTTF9PUFRJT05TOgogICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7Ci0gICAgZGF0YS0+c2V0LnNzbF9lbmFibGVfYmVhc3QgPSAhIShhcmcgJiBDVVJMU1NMT1BUX0FMTE9XX0JFQVNUKTsKLSAgICBkYXRhLT5zZXQuc3NsX25vX3Jldm9rZSA9ICEhKGFyZyAmIENVUkxTU0xPUFRfTk9fUkVWT0tFKTsKKyAgICBkYXRhLT5zZXQuc3NsLmVuYWJsZV9iZWFzdCA9IGFyZyZDVVJMU1NMT1BUX0FMTE9XX0JFQVNUP1RSVUU6RkFMU0U7CisgICAgZGF0YS0+c2V0LnNzbC5ub19yZXZva2UgPSAhIShhcmcgJiBDVVJMU1NMT1BUX05PX1JFVk9LRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TOgorICAgIGFyZyA9IHZhX2FyZyhwYXJhbSwgbG9uZyk7CisgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5lbmFibGVfYmVhc3QgPSBhcmcmQ1VSTFNTTE9QVF9BTExPV19CRUFTVD9UUlVFOkZBTFNFOworICAgIGRhdGEtPnNldC5wcm94eV9zc2wubm9fcmV2b2tlID0gISEoYXJnICYgQ1VSTFNTTE9QVF9OT19SRVZPS0UpOwogICAgIGJyZWFrOwogCiAjZW5kaWYKQEAgLTIzMzUsNyArMjQ2NCw4IEBACiAgICAgYnJlYWs7CiAKICAgY2FzZSBDVVJMT1BUX1NTTF9TRVNTSU9OSURfQ0FDSEU6Ci0gICAgZGF0YS0+c2V0LnNzbC5zZXNzaW9uaWQgPSAoMCAhPSB2YV9hcmcocGFyYW0sIGxvbmcpKSA/IFRSVUUgOiBGQUxTRTsKKyAgICBkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkID0gKDAgIT0gdmFfYXJnKHBhcmFtLCBsb25nKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIDogRkFMU0U7CiAgICAgYnJlYWs7CiAKICNpZmRlZiBVU0VfTElCU1NIMgpAQCAtMjYwMiwyMyArMjczMiw0MyBAQAogICAgIGJyZWFrOwogI2lmZGVmIFVTRV9UTFNfU1JQCiAgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FOgotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX09SSUddLAogICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVdICYmICFkYXRhLT5zZXQuc3NsLmF1dGh0eXBlKQorICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJR10gJiYgIWRhdGEtPnNldC5zc2wuYXV0aHR5cGUpCiAgICAgICBkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsgLyogZGVmYXVsdCB0byBTUlAgKi8KICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUU6CisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSAmJgorICAgICAgICFkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlKQorICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9TUlA7IC8qIGRlZmF1bHQgdG8gU1JQICovCisgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JEOgotICAgIHJlc3VsdCA9IHNldHN0cm9wdCgmZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9QQVNTV09SRF0sCisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEX09SSUddLAogICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcocGFyYW0sIGNoYXIgKikpOwotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVdICYmICFkYXRhLT5zZXQuc3NsLmF1dGh0eXBlKQorICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfT1JJR10gJiYgIWRhdGEtPnNldC5zc2wuYXV0aHR5cGUpCiAgICAgICBkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsgLyogZGVmYXVsdCB0byBTUlAgKi8KICAgICBicmVhazsKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQ6CisgICAgcmVzdWx0ID0gc2V0c3Ryb3B0KCZkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1BBU1NXT1JEX1BST1hZXSwKKyAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKHBhcmFtLCBjaGFyICopKTsKKyAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FX1BST1hZXSAmJgorICAgICAgICFkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlKQorICAgICAgZGF0YS0+c2V0LnByb3h5X3NzbC5hdXRodHlwZSA9IENVUkxfVExTQVVUSF9TUlA7IC8qIGRlZmF1bHQgdG8gU1JQICovCisgICAgYnJlYWs7CiAgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1RZUEU6Ci0gICAgaWYoc3RybmVxdWFsKChjaGFyICopdmFfYXJnKHBhcmFtLCBjaGFyICopLCAiU1JQIiwgc3RybGVuKCJTUlAiKSkpCisgICAgaWYoc3RybmNhc2Vjb21wYXJlKChjaGFyICopdmFfYXJnKHBhcmFtLCBjaGFyICopLCAiU1JQIiwgc3RybGVuKCJTUlAiKSkpCiAgICAgICBkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsKICAgICBlbHNlCiAgICAgICBkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX05PTkU7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1RZUEU6CisgICAgaWYoc3RybmNhc2Vjb21wYXJlKChjaGFyICopdmFfYXJnKHBhcmFtLCBjaGFyICopLCAiU1JQIiwgc3RybGVuKCJTUlAiKSkpCisgICAgICBkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX1NSUDsKKyAgICBlbHNlCisgICAgICBkYXRhLT5zZXQucHJveHlfc3NsLmF1dGh0eXBlID0gQ1VSTF9UTFNBVVRIX05PTkU7CisgICAgYnJlYWs7CiAjZW5kaWYKICAgY2FzZSBDVVJMT1BUX0ROU19TRVJWRVJTOgogICAgIHJlc3VsdCA9IEN1cmxfc2V0X2Ruc19zZXJ2ZXJzKGRhdGEsIHZhX2FyZyhwYXJhbSwgY2hhciAqKSk7CkBAIC0yNzc1LDggKzI5MjUsMTAgQEAKICAgQ3VybF9zYWZlZnJlZShjb25uLT5wYXNzd2QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPm9hdXRoX2JlYXJlcik7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+b3B0aW9ucyk7Ci0gIEN1cmxfc2FmZWZyZWUoY29ubi0+cHJveHl1c2VyKTsKLSAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eXBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS51c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5zb2Nrc19wcm94eS51c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShjb25uLT5odHRwX3Byb3h5LnBhc3N3ZCk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+c29ja3NfcHJveHkucGFzc3dkKTsKICAgQ3VybF9zYWZlZnJlZShjb25uLT5hbGxvY3B0ci5wcm94eXVzZXJwd2QpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmFsbG9jcHRyLnVhZ2VudCk7CiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+YWxsb2NwdHIudXNlcnB3ZCk7CkBAIC0yNzkwLDcgKzI5NDIsOSBAQAogICBDdXJsX3NhZmVmcmVlKGNvbm4tPnRyYWlsZXIpOwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPmhvc3QucmF3YWxsb2MpOyAvKiBob3N0IG5hbWUgYnVmZmVyICovCiAgIEN1cmxfc2FmZWZyZWUoY29ubi0+Y29ubl90b19ob3N0LnJhd2FsbG9jKTsgLyogaG9zdCBuYW1lIGJ1ZmZlciAqLwotICBDdXJsX3NhZmVmcmVlKGNvbm4tPnByb3h5LnJhd2FsbG9jKTsgLyogcHJveHkgbmFtZSBidWZmZXIgKi8KKyAgQ3VybF9zYWZlZnJlZShjb25uLT5zZWNvbmRhcnlob3N0bmFtZSk7CisgIEN1cmxfc2FmZWZyZWUoY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKTsgLyogaHR0cCBwcm94eSBuYW1lIGJ1ZmZlciAqLworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QucmF3YWxsb2MpOyAvKiBzb2NrcyBwcm94eSBuYW1lIGJ1ZmZlciAqLwogICBDdXJsX3NhZmVmcmVlKGNvbm4tPm1hc3Rlcl9idWZmZXIpOwogCiAgIGNvbm5fcmVzZXRfYWxsX3Bvc3Rwb25lZF9kYXRhKGNvbm4pOwpAQCAtMjgwMiw3ICsyOTU2LDEyIEBACiAgIGNvbm4tPnJlY3ZfcGlwZSA9IE5VTEw7CiAKICAgQ3VybF9zYWZlZnJlZShjb25uLT5sb2NhbGRldik7Ci0gIEN1cmxfZnJlZV9zc2xfY29uZmlnKCZjb25uLT5zc2xfY29uZmlnKTsKKyAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmY29ubi0+c3NsX2NvbmZpZyk7CisgIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoJmNvbm4tPnByb3h5X3NzbF9jb25maWcpOworCisjaWZkZWYgVVNFX1VOSVhfU09DS0VUUworICBDdXJsX3NhZmVmcmVlKGNvbm4tPnVuaXhfZG9tYWluX3NvY2tldCk7CisjZW5kaWYKIAogICBmcmVlKGNvbm4pOyAvKiBmcmVlIGFsbCB0aGUgY29ubmVjdGlvbiBvcmllbnRlZCBkYXRhICovCiB9CkBAIC0yODI5LDYgKzI5ODgsMTcgQEAKICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgIH0KIAorICAvKgorICAgKiBJZiB0aGlzIGNvbm5lY3Rpb24gaXNuJ3QgbWFya2VkIHRvIGZvcmNlLWNsb3NlLCBsZWF2ZSBpdCBvcGVuIGlmIHRoZXJlCisgICAqIGFyZSBvdGhlciB1c2VycyBvZiBpdAorICAgKi8KKyAgaWYoIWNvbm4tPmJpdHMuY2xvc2UgJiYKKyAgICAgKGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZSkpIHsKKyAgICBERUJVR0YoaW5mb2YoZGF0YSwgIkN1cmxfZGlzY29ubmVjdCwgdXNlY291bnRlcjogJWRcbiIsCisgICAgICAgICAgICAgICAgIGNvbm4tPnNlbmRfcGlwZS0+c2l6ZSArIGNvbm4tPnJlY3ZfcGlwZS0+c2l6ZSkpOworICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQorCiAgIGlmKGNvbm4tPmRuc19lbnRyeSAhPSBOVUxMKSB7CiAgICAgQ3VybF9yZXNvbHZfdW5sb2NrKGRhdGEsIGNvbm4tPmRuc19lbnRyeSk7CiAgICAgY29ubi0+ZG5zX2VudHJ5ID0gTlVMTDsKQEAgLTI4NTIsNiArMzAyMiw4IEBACiAgIGZyZWVfZml4ZWRfaG9zdG5hbWUoJmNvbm4tPmhvc3QpOwogICBmcmVlX2ZpeGVkX2hvc3RuYW1lKCZjb25uLT5jb25uX3RvX2hvc3QpOwogICBmcmVlX2ZpeGVkX2hvc3RuYW1lKCZjb25uLT5wcm94eSk7CisgIGZyZWVfZml4ZWRfaG9zdG5hbWUoJmNvbm4tPmh0dHBfcHJveHkuaG9zdCk7CisgIGZyZWVfZml4ZWRfaG9zdG5hbWUoJmNvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwogCiAgIEN1cmxfc3NsX2Nsb3NlKGNvbm4sIEZJUlNUU09DS0VUKTsKIApAQCAtMjg3Niw3ICszMDQ4LDcgQEAKICAgaW50IHN2YWw7CiAgIGJvb2wgcmV0X3ZhbCA9IFRSVUU7CiAKLSAgc3ZhbCA9IEN1cmxfc29ja2V0X3JlYWR5KHNvY2ssIENVUkxfU09DS0VUX0JBRCwgMCk7CisgIHN2YWwgPSBTT0NLRVRfUkVBREFCTEUoc29jaywgMCk7CiAgIGlmKHN2YWwgPT0gMCkKICAgICAvKiB0aW1lb3V0ICovCiAgICAgcmV0X3ZhbCA9IEZBTFNFOwpAQCAtMjg5Miw3ICszMDY0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubikKIHsKICAgLyogSWYgYSBIVFRQIHByb3RvY29sIGFuZCBwaXBlbGluaW5nIGlzIGVuYWJsZWQgKi8KLSAgaWYoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBQUk9UT19GQU1JTFlfSFRUUCkgeworICBpZigoY29ubi0+aGFuZGxlci0+cHJvdG9jb2wgJiBQUk9UT19GQU1JTFlfSFRUUCkgJiYKKyAgICAgKCFjb25uLT5iaXRzLnByb3RvY29ubnN0YXJ0IHx8ICFjb25uLT5iaXRzLmNsb3NlKSkgewogCiAgICAgaWYoQ3VybF9waXBlbGluZV93YW50ZWQoaGFuZGxlLT5tdWx0aSwgQ1VSTFBJUEVfSFRUUDEpICYmCiAgICAgICAgKGhhbmRsZS0+c2V0Lmh0dHB2ZXJzaW9uICE9IENVUkxfSFRUUF9WRVJTSU9OXzFfMCkgJiYKQEAgLTMwMDksOCArMzE4Miw4IEBACiAgIHN0cnVjdCBjdXJsX2hhc2hfaXRlcmF0b3IgaXRlcjsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VycjsKICAgc3RydWN0IGN1cmxfaGFzaF9lbGVtZW50ICpoZTsKLSAgbG9uZyBoaWdoc2NvcmU9LTE7Ci0gIGxvbmcgc2NvcmU7CisgIHRpbWVfdCBoaWdoc2NvcmU9LTE7CisgIHRpbWVfdCBzY29yZTsKICAgc3RydWN0IHRpbWV2YWwgbm93OwogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm5fY2FuZGlkYXRlID0gTlVMTDsKICAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZTsKQEAgLTMwNDcsNiArMzIyMCwyMSBAQAogICByZXR1cm4gY29ubl9jYW5kaWRhdGU7CiB9CiAKK3N0YXRpYyBib29sCitwcm94eV9pbmZvX21hdGNoZXMoY29uc3Qgc3RydWN0IHByb3h5X2luZm8qIGRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHByb3h5X2luZm8qIG5lZWRsZSkKK3sKKyAgaWYoKGRhdGEtPnByb3h5dHlwZSA9PSBuZWVkbGUtPnByb3h5dHlwZSkgJiYKKyAgICAgKGRhdGEtPnBvcnQgPT0gbmVlZGxlLT5wb3J0KSAmJgorICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+aG9zdC5uYW1lLCBuZWVkbGUtPmhvc3QubmFtZSkgJiYKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPnVzZXIsIG5lZWRsZS0+dXNlcikgJiYKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPnBhc3N3ZCwgbmVlZGxlLT5wYXNzd2QpKQorICAgIHJldHVybiBUUlVFOworCisgIHJldHVybiBGQUxTRTsKK30KKworCiAvKgogICogVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgY29ubmVjdGlvbiBpbiB0aGUgY29ubmVjdGlvbgogICogYnVuZGxlIHRoYXQgaGFzIGJlZW4gdW51c2VkIGZvciB0aGUgbG9uZ2VzdCB0aW1lLgpAQCAtMzA1OSw4ICszMjQ3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RidW5kbGUgKmJ1bmRsZSkKIHsKICAgc3RydWN0IGN1cmxfbGxpc3RfZWxlbWVudCAqY3VycjsKLSAgbG9uZyBoaWdoc2NvcmU9LTE7Ci0gIGxvbmcgc2NvcmU7CisgIHRpbWVfdCBoaWdoc2NvcmU9LTE7CisgIHRpbWVfdCBzY29yZTsKICAgc3RydWN0IHRpbWV2YWwgbm93OwogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm5fY2FuZGlkYXRlID0gTlVMTDsKICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uOwpAQCAtMzE0Miw3ICszMzMwLDcgQEAKIHN0YXRpYyB2b2lkIHBydW5lX2RlYWRfY29ubmVjdGlvbnMoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKIHsKICAgc3RydWN0IHRpbWV2YWwgbm93ID0gQ3VybF90dm5vdygpOwotICBsb25nIGVsYXBzZWQgPSBDdXJsX3R2ZGlmZihub3csIGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUtPmxhc3RfY2xlYW51cCk7CisgIHRpbWVfdCBlbGFwc2VkID0gQ3VybF90dmRpZmYobm93LCBkYXRhLT5zdGF0ZS5jb25uX2NhY2hlLT5sYXN0X2NsZWFudXApOwogCiAgIGlmKGVsYXBzZWQgPj0gMTAwMEwpIHsKICAgICBDdXJsX2Nvbm5jYWNoZV9mb3JlYWNoKGRhdGEtPnN0YXRlLmNvbm5fY2FjaGUsIGRhdGEsCkBAIC0zMjY3LDYgKzM0NTUsOCBAQAogICAgICAgcGlwZUxlbiA9IGNoZWNrLT5zZW5kX3BpcGUtPnNpemUgKyBjaGVjay0+cmVjdl9waXBlLT5zaXplOwogCiAgICAgICBpZihjYW5QaXBlbGluZSkgeworICAgICAgICBpZihjaGVjay0+Yml0cy5wcm90b2Nvbm5zdGFydCAmJiBjaGVjay0+Yml0cy5jbG9zZSkKKyAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZighY2hlY2stPmJpdHMubXVsdGlwbGV4KSB7CiAgICAgICAgICAgLyogSWYgbm90IG11bHRpcGxleGluZywgbWFrZSBzdXJlIHRoZSBwaXBlIGhhcyBvbmx5IEdFVCByZXF1ZXN0cyAqLwpAQCAtMzMxOSw2ICszNTA5LDE3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAorI2lmZGVmIFVTRV9VTklYX1NPQ0tFVFMKKyAgICAgIGlmKG5lZWRsZS0+dW5peF9kb21haW5fc29ja2V0KSB7CisgICAgICAgIGlmKCFjaGVjay0+dW5peF9kb21haW5fc29ja2V0KQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZihzdHJjbXAobmVlZGxlLT51bml4X2RvbWFpbl9zb2NrZXQsIGNoZWNrLT51bml4X2RvbWFpbl9zb2NrZXQpKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgZWxzZSBpZihjaGVjay0+dW5peF9kb21haW5fc29ja2V0KQorICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorCiAgICAgICBpZigobmVlZGxlLT5oYW5kbGVyLT5mbGFncyZQUk9UT1BUX1NTTCkgIT0KICAgICAgICAgIChjaGVjay0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpKQogICAgICAgICAvKiBkb24ndCBkbyBtaXhlZCBTU0wgYW5kIG5vbi1TU0wgY29ubmVjdGlvbnMgKi8KQEAgLTMzMjcsMjMgKzM1MjgsMTIgQEAKICAgICAgICAgICAvKiBleGNlcHQgcHJvdG9jb2xzIHRoYXQgaGF2ZSBiZWVuIHVwZ3JhZGVkIHZpYSBUTFMgKi8KICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgaWYobmVlZGxlLT5oYW5kbGVyLT5mbGFncyZQUk9UT1BUX1NTTCkgewotICAgICAgICBpZigoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyICE9IGNoZWNrLT52ZXJpZnlwZWVyKSB8fAotICAgICAgICAgICAoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0ICE9IGNoZWNrLT52ZXJpZnlob3N0KSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYobmVlZGxlLT5iaXRzLnByb3h5ICE9IGNoZWNrLT5iaXRzLnByb3h5KQotICAgICAgICAvKiBkb24ndCBkbyBtaXhlZCBwcm94eSBhbmQgbm9uLXByb3h5IGNvbm5lY3Rpb25zICovCisgICAgICBpZihuZWVkbGUtPmJpdHMuaHR0cHByb3h5ICE9IGNoZWNrLT5iaXRzLmh0dHBwcm94eSB8fAorICAgICAgICAgbmVlZGxlLT5iaXRzLnNvY2tzcHJveHkgIT0gY2hlY2stPmJpdHMuc29ja3Nwcm94eSkKICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGlmKG5lZWRsZS0+Yml0cy5wcm94eSAmJgotICAgICAgICAgKG5lZWRsZS0+cHJveHl0eXBlICE9IGNoZWNrLT5wcm94eXR5cGUgfHwKLSAgICAgICAgICBuZWVkbGUtPmJpdHMuaHR0cHByb3h5ICE9IGNoZWNrLT5iaXRzLmh0dHBwcm94eSB8fAotICAgICAgICAgIG5lZWRsZS0+Yml0cy50dW5uZWxfcHJveHkgIT0gY2hlY2stPmJpdHMudHVubmVsX3Byb3h5IHx8Ci0gICAgICAgICAgIUN1cmxfcmF3X2VxdWFsKG5lZWRsZS0+cHJveHkubmFtZSwgY2hlY2stPnByb3h5Lm5hbWUpIHx8Ci0gICAgICAgICAgbmVlZGxlLT5wb3J0ICE9IGNoZWNrLT5wb3J0KSkKLSAgICAgICAgLyogZG9uJ3QgbWl4IGNvbm5lY3Rpb25zIHRoYXQgdXNlIGRpZmZlcmVudCBwcm94aWVzICovCisgICAgICBpZihuZWVkbGUtPmJpdHMuc29ja3Nwcm94eSAmJiAhcHJveHlfaW5mb19tYXRjaGVzKCZuZWVkbGUtPnNvY2tzX3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2stPnNvY2tzX3Byb3h5KSkKICAgICAgICAgY29udGludWU7CiAKICAgICAgIGlmKG5lZWRsZS0+Yml0cy5jb25uX3RvX2hvc3QgIT0gY2hlY2stPmJpdHMuY29ubl90b19ob3N0KQpAQCAtMzM1Niw2ICszNTQ2LDMzIEBACiAgICAgICAgICAqIGNvbm5lY3Rpb25zIHRoYXQgZG9uJ3QgdXNlIHRoaXMgZmVhdHVyZSAqLwogICAgICAgICBjb250aW51ZTsKIAorICAgICAgaWYobmVlZGxlLT5iaXRzLmh0dHBwcm94eSkgeworICAgICAgICBpZighcHJveHlfaW5mb19tYXRjaGVzKCZuZWVkbGUtPmh0dHBfcHJveHksICZjaGVjay0+aHR0cF9wcm94eSkpCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYobmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSAhPSBjaGVjay0+Yml0cy50dW5uZWxfcHJveHkpCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYobmVlZGxlLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMpIHsKKyAgICAgICAgICAvKiB1c2UgaHR0cHMgcHJveHkgKi8KKyAgICAgICAgICBpZihuZWVkbGUtPmhhbmRsZXItPmZsYWdzJlBST1RPUFRfU1NMKSB7CisgICAgICAgICAgICAvKiB1c2UgZG91YmxlIGxheWVyIHNzbCAqLworICAgICAgICAgICAgaWYoIUN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKCZuZWVkbGUtPnByb3h5X3NzbF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5wcm94eV9zc2xfY29uZmlnKSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZihjaGVjay0+cHJveHlfc3NsW0ZJUlNUU09DS0VUXS5zdGF0ZSAhPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYoIUN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKCZuZWVkbGUtPnNzbF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrLT5zc2xfY29uZmlnKSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZihjaGVjay0+c3NsW0ZJUlNUU09DS0VUXS5zdGF0ZSAhPSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSkKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKICAgICAgIGlmKCFjYW5QaXBlbGluZSAmJiBjaGVjay0+aW51c2UpCiAgICAgICAgIC8qIHRoaXMgcmVxdWVzdCBjYW4ndCBiZSBwaXBlbGluZWQgYnV0IHRoZSBjaGVja2VkIGNvbm5lY3Rpb24gaXMKICAgICAgICAgICAgYWxyZWFkeSBpbiB1c2Ugc28gd2Ugc2tpcCBpdCAqLwpAQCAtMzM3NSwzNSArMzU5MiwzNSBAQAogICAgICAgICAqLwogICAgICAgICBpZigoY2hlY2stPmxvY2FscG9ydCAhPSBuZWVkbGUtPmxvY2FscG9ydCkgfHwKICAgICAgICAgICAgKGNoZWNrLT5sb2NhbHBvcnRyYW5nZSAhPSBuZWVkbGUtPmxvY2FscG9ydHJhbmdlKSB8fAotICAgICAgICAgICAhY2hlY2stPmxvY2FsZGV2IHx8Ci0gICAgICAgICAgICFuZWVkbGUtPmxvY2FsZGV2IHx8Ci0gICAgICAgICAgIHN0cmNtcChjaGVjay0+bG9jYWxkZXYsIG5lZWRsZS0+bG9jYWxkZXYpKQorICAgICAgICAgICAobmVlZGxlLT5sb2NhbGRldiAmJgorICAgICAgICAgICAgKCFjaGVjay0+bG9jYWxkZXYgfHwgc3RyY21wKGNoZWNrLT5sb2NhbGRldiwgbmVlZGxlLT5sb2NhbGRldikpKSkKICAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAogICAgICAgaWYoIShuZWVkbGUtPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9DUkVEU1BFUlJFUVVFU1QpKSB7CiAgICAgICAgIC8qIFRoaXMgcHJvdG9jb2wgcmVxdWlyZXMgY3JlZGVudGlhbHMgcGVyIGNvbm5lY3Rpb24sCiAgICAgICAgICAgIHNvIHZlcmlmeSB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBzYW1lIG5hbWUgYW5kIHBhc3N3b3JkIGFzIHdlbGwgKi8KLSAgICAgICAgaWYoIXN0cmVxdWFsKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8Ci0gICAgICAgICAgICFzdHJlcXVhbChuZWVkbGUtPnBhc3N3ZCwgY2hlY2stPnBhc3N3ZCkpIHsKKyAgICAgICAgaWYoc3RyY21wKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8CisgICAgICAgICAgIHN0cmNtcChuZWVkbGUtPnBhc3N3ZCwgY2hlY2stPnBhc3N3ZCkpIHsKICAgICAgICAgICAvKiBvbmUgb2YgdGhlbSB3YXMgZGlmZmVyZW50ICovCiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgaWYoIW5lZWRsZS0+Yml0cy5odHRwcHJveHkgfHwgKG5lZWRsZS0+aGFuZGxlci0+ZmxhZ3MmUFJPVE9QVF9TU0wpIHx8Ci0gICAgICAgICAobmVlZGxlLT5iaXRzLmh0dHBwcm94eSAmJiBuZWVkbGUtPmJpdHMudHVubmVsX3Byb3h5KSkgeworICAgICAgICAgbmVlZGxlLT5iaXRzLnR1bm5lbF9wcm94eSkgewogICAgICAgICAvKiBUaGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gZG9lcyBub3QgdXNlIGEgSFRUUCBwcm94eSBvciBpdCB1c2VzIFNTTCBvcgotICAgICAgICAgICBpdCBpcyBhIG5vbi1TU0wgcHJvdG9jb2wgdHVubmVsZWQgb3ZlciB0aGUgc2FtZSBIVFRQIHByb3h5IG5hbWUgYW5kCi0gICAgICAgICAgIHBvcnQgbnVtYmVyICovCi0gICAgICAgIGlmKChDdXJsX3Jhd19lcXVhbChuZWVkbGUtPmhhbmRsZXItPnNjaGVtZSwgY2hlY2stPmhhbmRsZXItPnNjaGVtZSkgfHwKKyAgICAgICAgICAgaXQgaXMgYSBub24tU1NMIHByb3RvY29sIHR1bm5lbGVkIG9yIGl0IGlzIGEgbm9uLVNTTCBwcm90b2NvbCB3aGljaAorICAgICAgICAgICBpcyBhbGxvd2VkIHRvIGJlIHVwZ3JhZGVkIHZpYSBUTFMgKi8KKworICAgICAgICBpZigoc3RyY2FzZWNvbXBhcmUobmVlZGxlLT5oYW5kbGVyLT5zY2hlbWUsIGNoZWNrLT5oYW5kbGVyLT5zY2hlbWUpIHx8CiAgICAgICAgICAgICAoZ2V0X3Byb3RvY29sX2ZhbWlseShjaGVjay0+aGFuZGxlci0+cHJvdG9jb2wpID09CiAgICAgICAgICAgICAgbmVlZGxlLT5oYW5kbGVyLT5wcm90b2NvbCAmJiBjaGVjay0+dGxzX3VwZ3JhZGVkKSkgJiYKLSAgICAgICAgICAgKCFuZWVkbGUtPmJpdHMuY29ubl90b19ob3N0IHx8IEN1cmxfcmF3X2VxdWFsKAorICAgICAgICAgICAoIW5lZWRsZS0+Yml0cy5jb25uX3RvX2hvc3QgfHwgc3RyY2FzZWNvbXBhcmUoCiAgICAgICAgICAgICBuZWVkbGUtPmNvbm5fdG9faG9zdC5uYW1lLCBjaGVjay0+Y29ubl90b19ob3N0Lm5hbWUpKSAmJgogICAgICAgICAgICAoIW5lZWRsZS0+Yml0cy5jb25uX3RvX3BvcnQgfHwKICAgICAgICAgICAgICBuZWVkbGUtPmNvbm5fdG9fcG9ydCA9PSBjaGVjay0+Y29ubl90b19wb3J0KSAmJgotICAgICAgICAgICBDdXJsX3Jhd19lcXVhbChuZWVkbGUtPmhvc3QubmFtZSwgY2hlY2stPmhvc3QubmFtZSkgJiYKKyAgICAgICAgICAgc3RyY2FzZWNvbXBhcmUobmVlZGxlLT5ob3N0Lm5hbWUsIGNoZWNrLT5ob3N0Lm5hbWUpICYmCiAgICAgICAgICAgIG5lZWRsZS0+cmVtb3RlX3BvcnQgPT0gY2hlY2stPnJlbW90ZV9wb3J0KSB7CiAgICAgICAgICAgLyogVGhlIHNjaGVtZXMgbWF0Y2ggb3IgdGhlIHRoZSBwcm90b2NvbCBmYW1pbHkgaXMgdGhlIHNhbWUgYW5kIHRoZQogICAgICAgICAgICAgIHByZXZpb3VzIGNvbm5lY3Rpb24gd2FzIFRMUyB1cGdyYWRlZCwgYW5kIHRoZSBob3N0bmFtZSBhbmQgaG9zdApAQCAtMzQ0NSw4ICszNjYyLDggQEAKICAgICAgICAgICAgcG9zc2libGUuIChFc3BlY2lhbGx5IHdlIG11c3Qgbm90IHJldXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gaWYKICAgICAgICAgICAgcGFydHdheSB0aHJvdWdoIGEgaGFuZHNoYWtlISkgKi8KICAgICAgICAgaWYod2FudE5UTE1odHRwKSB7Ci0gICAgICAgICAgaWYoIXN0cmVxdWFsKG5lZWRsZS0+dXNlciwgY2hlY2stPnVzZXIpIHx8Ci0gICAgICAgICAgICAgIXN0cmVxdWFsKG5lZWRsZS0+cGFzc3dkLCBjaGVjay0+cGFzc3dkKSkKKyAgICAgICAgICBpZihzdHJjbXAobmVlZGxlLT51c2VyLCBjaGVjay0+dXNlcikgfHwKKyAgICAgICAgICAgICBzdHJjbXAobmVlZGxlLT5wYXNzd2QsIGNoZWNrLT5wYXNzd2QpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZihjaGVjay0+bnRsbS5zdGF0ZSAhPSBOVExNU1RBVEVfTk9ORSkgewpAQCAtMzQ1NiwxMiArMzY3MywxMyBAQAogCiAgICAgICAgIC8qIFNhbWUgZm9yIFByb3h5IE5UTE0gYXV0aGVudGljYXRpb24gKi8KICAgICAgICAgaWYod2FudFByb3h5TlRMTWh0dHApIHsKLSAgICAgICAgICAvKiBCb3RoIGNoZWNrLT5wcm94eXVzZXIgYW5kIGNoZWNrLT5wcm94eXBhc3N3ZCBjYW4gYmUgTlVMTCAqLwotICAgICAgICAgIGlmKCFjaGVjay0+cHJveHl1c2VyIHx8ICFjaGVjay0+cHJveHlwYXNzd2QpCisgICAgICAgICAgLyogQm90aCBjaGVjay0+aHR0cF9wcm94eS51c2VyIGFuZCBjaGVjay0+aHR0cF9wcm94eS5wYXNzd2QgY2FuIGJlCisgICAgICAgICAgICogTlVMTCAqLworICAgICAgICAgIGlmKCFjaGVjay0+aHR0cF9wcm94eS51c2VyIHx8ICFjaGVjay0+aHR0cF9wcm94eS5wYXNzd2QpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgIGlmKCFzdHJlcXVhbChuZWVkbGUtPnByb3h5dXNlciwgY2hlY2stPnByb3h5dXNlcikgfHwKLSAgICAgICAgICAgICAhc3RyZXF1YWwobmVlZGxlLT5wcm94eXBhc3N3ZCwgY2hlY2stPnByb3h5cGFzc3dkKSkKKyAgICAgICAgICBpZihzdHJjbXAobmVlZGxlLT5odHRwX3Byb3h5LnVzZXIsIGNoZWNrLT5odHRwX3Byb3h5LnVzZXIpIHx8CisgICAgICAgICAgICAgc3RyY21wKG5lZWRsZS0+aHR0cF9wcm94eS5wYXNzd2QsIGNoZWNrLT5odHRwX3Byb3h5LnBhc3N3ZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKGNoZWNrLT5wcm94eW50bG0uc3RhdGUgIT0gTlRMTVNUQVRFX05PTkUpIHsKQEAgLTM1NjUsNTEgKzM3ODMsNDggQEAKICAgIE5vdGU6IHRoaXMgZnVuY3Rpb24ncyBzdWItZnVuY3Rpb25zIGNhbGwgZmFpbGYoKQogCiAqLwotQ1VSTGNvZGUgQ3VybF9jb25uZWN0ZWRfcHJveHkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKK0NVUkxjb2RlIEN1cmxfY29ubmVjdGVkX3Byb3h5KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKIHsKLSAgaWYoIWNvbm4tPmJpdHMucHJveHkgfHwgc29ja2luZGV4KQotICAgIC8qIHRoaXMgbWFnaWMgb25seSB3b3JrcyBmb3IgdGhlIHByaW1hcnkgc29ja2V0IGFzIHRoZSBzZWNvbmRhcnkgaXMgdXNlZAotICAgICAgIGZvciBGVFAgb25seSBhbmQgaXQgaGFzIEZUUCBzcGVjaWZpYyBtYWdpYyBpbiBmdHAuYyAqLwotICAgIHJldHVybiBDVVJMRV9PSzsKKyAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAKLSAgc3dpdGNoKGNvbm4tPnByb3h5dHlwZSkgeworICBpZihjb25uLT5iaXRzLnNvY2tzcHJveHkpIHsKICNpZm5kZWYgQ1VSTF9ESVNBQkxFX1BST1hZCi0gIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNToKLSAgY2FzZSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FOgotICAgIHJldHVybiBDdXJsX1NPQ0tTNShjb25uLT5wcm94eXVzZXIsIGNvbm4tPnByb3h5cGFzc3dkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA/IGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lIDoKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9fcG9ydCA/IGNvbm4tPmNvbm5fdG9fcG9ydCA6Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwgY29ubik7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3QgPSBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5jb25uX3RvX2hvc3QubmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXggPT0gU0VDT05EQVJZU09DS0VUID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNlY29uZGFyeWhvc3RuYW1lIDogY29ubi0+aG9zdC5uYW1lOworICAgIGNvbnN0IGludCBwb3J0ID0gY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgPyBjb25uLT5jb25uX3RvX3BvcnQgOgorICAgICAgICAgICAgICAgICAgICAgY29ubi0+Yml0cy5odHRwcHJveHkgPworICAgICAgICAgICAgICAgICAgICAgKGludCljb25uLT5odHRwX3Byb3h5LnBvcnQgOgorICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4ID09IFNFQ09OREFSWVNPQ0tFVCA/CisgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c2Vjb25kYXJ5X3BvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKKyAgICBjb25uLT5iaXRzLnNvY2tzcHJveHlfY29ubmVjdGluZyA9IFRSVUU7CisgICAgc3dpdGNoKGNvbm4tPnNvY2tzX3Byb3h5LnByb3h5dHlwZSkgeworICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNToKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUU6CisgICAgICByZXN1bHQgPSBDdXJsX1NPQ0tTNShjb25uLT5zb2Nrc19wcm94eS51c2VyLCBjb25uLT5zb2Nrc19wcm94eS5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgc29ja2luZGV4LCBjb25uKTsKKyAgICAgIGJyZWFrOwogCi0gIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNDoKLSAgICByZXR1cm4gQ3VybF9TT0NLUzQoY29ubi0+cHJveHl1c2VyLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA/IGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lIDoKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5iaXRzLmNvbm5fdG9fcG9ydCA/IGNvbm4tPmNvbm5fdG9fcG9ydCA6Ci0gICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnJlbW90ZV9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICBGSVJTVFNPQ0tFVCwgY29ubiwgRkFMU0UpOworICAgIGNhc2UgQ1VSTFBST1hZX1NPQ0tTNDoKKyAgICBjYXNlIENVUkxQUk9YWV9TT0NLUzRBOgorICAgICAgcmVzdWx0ID0gQ3VybF9TT0NLUzQoY29ubi0+c29ja3NfcHJveHkudXNlciwgaG9zdCwgcG9ydCwgc29ja2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubik7CisgICAgICBicmVhazsKIAotICBjYXNlIENVUkxQUk9YWV9TT0NLUzRBOgotICAgIHJldHVybiBDdXJsX1NPQ0tTNChjb25uLT5wcm94eXVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19ob3N0ID8gY29ubi0+Y29ubl90b19ob3N0Lm5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmJpdHMuY29ubl90b19wb3J0ID8gY29ubi0+Y29ubl90b19wb3J0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+cmVtb3RlX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgIEZJUlNUU09DS0VULCBjb25uLCBUUlVFKTsKLQorICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihjb25uLT5kYXRhLCAidW5rbm93biBwcm94eXR5cGUgb3B0aW9uIGdpdmVuIik7CisgICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX0NPTk5FQ1Q7CisgICAgfSAvKiBzd2l0Y2ggcHJveHl0eXBlICovCisgICAgY29ubi0+Yml0cy5zb2Nrc3Byb3h5X2Nvbm5lY3RpbmcgPSBGQUxTRTsKKyNlbHNlCisgICh2b2lkKXNvY2tpbmRleDsKICNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfUFJPWFkgKi8KLSAgY2FzZSBDVVJMUFJPWFlfSFRUUDoKLSAgY2FzZSBDVVJMUFJPWFlfSFRUUF8xXzA6Ci0gICAgLyogZG8gbm90aGluZyBoZXJlLiBoYW5kbGVkIGxhdGVyLiAqLwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9IC8qIHN3aXRjaCBwcm94eXR5cGUgKi8KKyAgfQogCi0gIHJldHVybiBDVVJMRV9PSzsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKQEAgLTM2MjAsNyArMzgzNSw5IEBACiB7CiAgIGlmKGNvbm4tPmRhdGEtPnNldC52ZXJib3NlKQogICAgIGluZm9mKGNvbm4tPmRhdGEsICJDb25uZWN0ZWQgdG8gJXMgKCVzKSBwb3J0ICVsZCAoIyVsZClcbiIsCi0gICAgICAgICAgY29ubi0+Yml0cy5wcm94eSA/IGNvbm4tPnByb3h5LmRpc3BuYW1lIDogY29ubi0+aG9zdC5kaXNwbmFtZSwKKyAgICAgICAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPyBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyAgICAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWUsCiAgICAgICAgICAgY29ubi0+aXBfYWRkcl9zdHIsIGNvbm4tPnBvcnQsIGNvbm4tPmNvbm5lY3Rpb25faWQpOwogfQogI2VuZGlmCkBAIC0zNzEwLDEwICszOTI3LDE0IEBACiAKICAgaWYoIWNvbm4tPmJpdHMucHJvdG9jb25uc3RhcnQpIHsKIAotICAgIHJlc3VsdCA9IEN1cmxfcHJveHlfY29ubmVjdChjb25uKTsKKyAgICByZXN1bHQgPSBDdXJsX3Byb3h5X2Nvbm5lY3QoY29ubiwgRklSU1RTT0NLRVQpOwogICAgIGlmKHJlc3VsdCkKICAgICAgIHJldHVybiByZXN1bHQ7CiAKKyAgICBpZihDT05ORUNUX0ZJUlNUU09DS0VUX1BST1hZX1NTTCgpKQorICAgICAgLyogd2FpdCBmb3IgSFRUUFMgcHJveHkgU1NMIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlICovCisgICAgICByZXR1cm4gQ1VSTEVfT0s7CisKICAgICBpZihjb25uLT5iaXRzLnR1bm5lbF9wcm94eSAmJiBjb25uLT5iaXRzLmh0dHBwcm94eSAmJgogICAgICAgIChjb25uLT50dW5uZWxfc3RhdGVbRklSU1RTT0NLRVRdICE9IFRVTk5FTF9DT01QTEVURSkpCiAgICAgICAvKiB3aGVuIHVzaW5nIGFuIEhUVFAgdHVubmVsIHByb3h5LCBhd2FpdCBjb21wbGV0ZSB0dW5uZWwgZXN0YWJsaXNobWVudApAQCAtMzc0Myw3ICszOTY0LDcgQEAKICAqLwogc3RhdGljIGJvb2wgaXNfQVNDSUlfbmFtZShjb25zdCBjaGFyICpob3N0bmFtZSkKIHsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqY2ggPSAoY29uc3QgdW5zaWduZWQgY2hhciopaG9zdG5hbWU7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilob3N0bmFtZTsKIAogICB3aGlsZSgqY2gpIHsKICAgICBpZigqY2grKyAmIDB4ODApCkBAIC0zNzUyLDU4ICszOTczLDE1IEBACiAgIHJldHVybiBUUlVFOwogfQogCi0jaWZkZWYgVVNFX0xJQklETgotLyoKLSAqIENoZWNrIGlmIGNoYXJhY3RlcnMgaW4gaG9zdG5hbWUgaXMgYWxsb3dlZCBpbiBUb3AgTGV2ZWwgRG9tYWluLgotICovCi1zdGF0aWMgYm9vbCB0bGRfY2hlY2tfbmFtZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWNlX2hvc3RuYW1lKQotewotICBzaXplX3QgZXJyX3BvczsKLSAgY2hhciAqdWNfbmFtZSA9IE5VTEw7Ci0gIGludCByYzsKLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwotICBjb25zdCBjaGFyICp0bGRfZXJybXNnID0gIjxubyBtc2c+IjsKLSNlbHNlCi0gICh2b2lkKWRhdGE7Ci0jZW5kaWYKLQotICAvKiBDb252ZXJ0IChhbmQgZG93bmNhc2UpIEFDRS1uYW1lIGJhY2sgaW50byBsb2NhbGUncyBjaGFyYWN0ZXIgc2V0ICovCi0gIHJjID0gaWRuYV90b191bmljb2RlX2x6bHooYWNlX2hvc3RuYW1lLCAmdWNfbmFtZSwgMCk7Ci0gIGlmKHJjICE9IElETkFfU1VDQ0VTUykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogV2FybmluZzogZXJyX3BvcyByZWNlaXZlcyAidGhlIGRlY29kZWQgY2hhcmFjdGVyIG9mZnNldCByYXRoZXIgdGhhbiB0aGUKLSAgICAgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLiIgQW5kIGFzIG9mIGxpYmlkbiAxLjMyIHRoYXQgY2hhcmFjdGVyIG9mZnNldAotICAgICBpcyBmb3IgVVRGLTgsIGV2ZW4gaWYgdGhlIHBhc3NlZCBpbiBzdHJpbmcgaXMgYW5vdGhlciBsb2NhbGUuICovCi0gIHJjID0gdGxkX2NoZWNrX2x6KHVjX25hbWUsICZlcnJfcG9zLCBOVUxMKTsKLSNpZm5kZWYgQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUwotI2lmZGVmIEhBVkVfVExEX1NUUkVSUk9SCi0gIGlmKHJjICE9IFRMRF9TVUNDRVNTKQotICAgIHRsZF9lcnJtc2cgPSB0bGRfc3RyZXJyb3IoKFRsZF9yYylyYyk7Ci0jZW5kaWYKLSAgaWYocmMgIT0gVExEX1NVQ0NFU1MpCi0gICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IFRMRCBjaGVjayBmb3IgJXMgZmFpbGVkOyAlc1xuIiwKLSAgICAgICAgICB1Y19uYW1lLCB0bGRfZXJybXNnKTsKLSNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTICovCi0gIGlmKHVjX25hbWUpCi0gICAgIGlkbl9mcmVlKHVjX25hbWUpOwotICBpZihyYyAhPSBUTERfU1VDQ0VTUykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5kaWYKLQogLyoKICAqIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBJRE4gY29udmVyc2lvbiBvZiBob3N0bmFtZQogICovCi1zdGF0aWMgdm9pZCBmaXhfaG9zdG5hbWUoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKK3N0YXRpYyB2b2lkIGZpeF9ob3N0bmFtZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIHN0cnVjdCBob3N0bmFtZSAqaG9zdCkKIHsKICAgc2l6ZV90IGxlbjsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAKLSNpZm5kZWYgVVNFX0xJQklETgorI2lmbmRlZiBVU0VfTElCSUROMgogICAodm9pZClkYXRhOwogICAodm9pZCljb25uOwogI2VsaWYgZGVmaW5lZChDVVJMX0RJU0FCTEVfVkVSQk9TRV9TVFJJTkdTKQpAQCAtMzgyMSwyNSArMzk5OSwxOCBAQAogCiAgIC8qIENoZWNrIG5hbWUgZm9yIG5vbi1BU0NJSSBhbmQgY29udmVydCBob3N0bmFtZSB0byBBQ0UgZm9ybSBpZiB3ZSBjYW4gKi8KICAgaWYoIWlzX0FTQ0lJX25hbWUoaG9zdC0+bmFtZSkpIHsKLSNpZmRlZiBVU0VfTElCSUROCi0gICAgaWYoc3RyaW5ncHJlcF9jaGVja192ZXJzaW9uKExJQklETl9SRVFVSVJFRF9WRVJTSU9OKSkgeworI2lmZGVmIFVTRV9MSUJJRE4yCisgICAgaWYoaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTikpIHsKICAgICAgIGNoYXIgKmFjZV9ob3N0bmFtZSA9IE5VTEw7Ci0KLSAgICAgIGludCByYyA9IGlkbmFfdG9fYXNjaWlfbHooaG9zdC0+bmFtZSwgJmFjZV9ob3N0bmFtZSwgMCk7Ci0gICAgICBpbmZvZihkYXRhLCAiSW5wdXQgZG9tYWluIGVuY29kZWQgYXMgYCVzJ1xuIiwKLSAgICAgICAgICAgIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSk7Ci0gICAgICBpZihyYyA9PSBJRE5BX1NVQ0NFU1MpIHsKLSAgICAgICAgLyogdGxkX2NoZWNrX25hbWUoKSBkaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIGhvc3QgbmFtZSBjb250YWlucwotICAgICAgICAgICAiaWxsZWdhbCIgY2hhcmFjdGVycyBmb3IgdGhpcyBUTEQgKi8KLSAgICAgICAgKHZvaWQpdGxkX2NoZWNrX25hbWUoZGF0YSwgYWNlX2hvc3RuYW1lKTsKLQotICAgICAgICBob3N0LT5lbmNhbGxvYyA9IGFjZV9ob3N0bmFtZTsKKyAgICAgIGludCByYyA9IGlkbjJfbG9va3VwX3VsKChjb25zdCBjaGFyICopaG9zdC0+bmFtZSwgJmFjZV9ob3N0bmFtZSwgMCk7CisgICAgICBpZihyYyA9PSBJRE4yX09LKSB7CisgICAgICAgIGhvc3QtPmVuY2FsbG9jID0gKGNoYXIgKilhY2VfaG9zdG5hbWU7CiAgICAgICAgIC8qIGNoYW5nZSB0aGUgbmFtZSBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBlbmNvZGVkIGhvc3RuYW1lICovCiAgICAgICAgIGhvc3QtPm5hbWUgPSBob3N0LT5lbmNhbGxvYzsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgaW5mb2YoZGF0YSwgIkZhaWxlZCB0byBjb252ZXJ0ICVzIHRvIEFDRTsgJXNcbiIsIGhvc3QtPm5hbWUsCi0gICAgICAgICAgICAgIEN1cmxfaWRuX3N0cmVycm9yKGNvbm4sIHJjKSk7CisgICAgICAgICAgICAgIGlkbjJfc3RyZXJyb3IocmMpKTsKICAgICB9CiAjZWxpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pCiAgICAgY2hhciAqYWNlX2hvc3RuYW1lID0gTlVMTDsKQEAgLTM4NjIsOSArNDAzMyw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZyZWVfZml4ZWRfaG9zdG5hbWUoc3RydWN0IGhvc3RuYW1lICpob3N0KQogewotI2lmIGRlZmluZWQoVVNFX0xJQklETikKKyNpZiBkZWZpbmVkKFVTRV9MSUJJRE4yKQogICBpZihob3N0LT5lbmNhbGxvYykgewotICAgIGlkbl9mcmVlKGhvc3QtPmVuY2FsbG9jKTsgLyogbXVzdCBiZSBmcmVlZCB3aXRoIGlkbl9mcmVlKCkgc2luY2UgdGhpcyB3YXMKKyAgICBpZG4yX2ZyZWUoaG9zdC0+ZW5jYWxsb2MpOyAvKiBtdXN0IGJlIGZyZWVkIHdpdGggaWRuMl9mcmVlKCkgc2luY2UgdGhpcyB3YXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBieSBsaWJpZG4gKi8KICAgICBob3N0LT5lbmNhbGxvYyA9IE5VTEw7CiAgIH0KQEAgLTM5MjIsMTIgKzQwOTMsMTQgQEAKICAgY29ubi0+ZGF0YSA9IGRhdGE7IC8qIFNldHVwIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoaXMgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBDdXJsX2Vhc3kgKi8KIAotICBjb25uLT5wcm94eXR5cGUgPSBkYXRhLT5zZXQucHJveHl0eXBlOyAvKiB0eXBlICovCisgIGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID0gZGF0YS0+c2V0LnByb3h5dHlwZTsKKyAgY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlID0gZGF0YS0+c2V0LnNvY2tzX3Byb3h5dHlwZTsKIAogI2lmZGVmIENVUkxfRElTQUJMRV9QUk9YWQogCiAgIGNvbm4tPmJpdHMucHJveHkgPSBGQUxTRTsKICAgY29ubi0+Yml0cy5odHRwcHJveHkgPSBGQUxTRTsKKyAgY29ubi0+Yml0cy5zb2Nrc3Byb3h5ID0gRkFMU0U7CiAgIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgPSBGQUxTRTsKICAgY29ubi0+Yml0cy50dW5uZWxfcHJveHkgPSBGQUxTRTsKIApAQCAtMzkzOCwxMSArNDExMSwyMCBAQAogICBjb25uLT5iaXRzLnByb3h5ID0gKGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZXSAmJgogICAgICAgICAgICAgICAgICAgICAgICpkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWV0pID8gVFJVRSA6IEZBTFNFOwogICBjb25uLT5iaXRzLmh0dHBwcm94eSA9IChjb25uLT5iaXRzLnByb3h5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUF8xXzApKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgOiBGQUxTRTsKLSAgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCA9IChkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVVTRVJOQU1FXSkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQXzFfMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBTKSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSA6IEZBTFNFOworICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPSAoY29ubi0+Yml0cy5wcm94eSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvbm4tPmJpdHMuaHR0cHByb3h5KSA/IFRSVUUgOiBGQUxTRTsKKworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TT0NLU19QUk9YWV0gJiYgKmRhdGEtPnNldC5zdHJbU1RSSU5HX1NPQ0tTX1BST1hZXSkgeworICAgIGNvbm4tPmJpdHMucHJveHkgPSBUUlVFOworICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eSA9IFRSVUU7CisgIH0KKworICBjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkID0KKyAgICAoZGF0YS0+c2V0LnN0cltTVFJJTkdfUFJPWFlVU0VSTkFNRV0pID8gVFJVRSA6IEZBTFNFOwogICBjb25uLT5iaXRzLnR1bm5lbF9wcm94eSA9IGRhdGEtPnNldC50dW5uZWxfdGhydV9odHRwcHJveHk7CiAKICNlbmRpZiAvKiBDVVJMX0RJU0FCTEVfUFJPWFkgKi8KQEAgLTM5NTEsOCArNDEzMywxMCBAQAogICBjb25uLT5iaXRzLmZ0cF91c2VfZXBzdiA9IGRhdGEtPnNldC5mdHBfdXNlX2Vwc3Y7CiAgIGNvbm4tPmJpdHMuZnRwX3VzZV9lcHJ0ID0gZGF0YS0+c2V0LmZ0cF91c2VfZXBydDsKIAotICBjb25uLT52ZXJpZnlwZWVyID0gZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyOwotICBjb25uLT52ZXJpZnlob3N0ID0gZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0OworICBjb25uLT5zc2xfY29uZmlnLnZlcmlmeXBlZXIgPSBkYXRhLT5zZXQuc3NsLnByaW1hcnkudmVyaWZ5cGVlcjsKKyAgY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0ID0gZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnZlcmlmeWhvc3Q7CisgIGNvbm4tPnByb3h5X3NzbF9jb25maWcudmVyaWZ5cGVlciA9IGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS52ZXJpZnlwZWVyOworICBjb25uLT5wcm94eV9zc2xfY29uZmlnLnZlcmlmeWhvc3QgPSBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkudmVyaWZ5aG9zdDsKIAogICBjb25uLT5pcF92ZXJzaW9uID0gZGF0YS0+c2V0LmlwdmVyOwogCkBAIC00MDIyLDcgKzQyMDYsNyBAQAogICAgICB2YXJpYWJsZXMgYmFzZWQgb24gdGhlIFVSTC4gTm93IHRoYXQgdGhlIGhhbmRsZXIgbWF5IGJlIGNoYW5nZWQgbGF0ZXIKICAgICAgd2hlbiB0aGUgcHJvdG9jb2wgc3BlY2lmaWMgc2V0dXAgZnVuY3Rpb24gaXMgY2FsbGVkLiAqLwogICBmb3IocHAgPSBwcm90b2NvbHM7IChwID0gKnBwKSAhPSBOVUxMOyBwcCsrKSB7Ci0gICAgaWYoQ3VybF9yYXdfZXF1YWwocC0+c2NoZW1lLCBwcm90b3N0cikpIHsKKyAgICBpZihzdHJjYXNlY29tcGFyZShwLT5zY2hlbWUsIHByb3Rvc3RyKSkgewogICAgICAgLyogUHJvdG9jb2wgZm91bmQgaW4gdGFibGUuIENoZWNrIGlmIGFsbG93ZWQgKi8KICAgICAgIGlmKCEoZGF0YS0+c2V0LmFsbG93ZWRfcHJvdG9jb2xzICYgcC0+cHJvdG9jb2wpKQogICAgICAgICAvKiBub3BlLCBnZXQgb3V0ICovCkBAIC00MDkxLDcgKzQyNzUsNyBAQAogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICBpZigoMiA9PSBzc2NhbmYoZGF0YS0+Y2hhbmdlLnVybCwgIiUxNVteOl06JVteXG5dIiwKICAgICAgICAgICAgICAgICAgIHByb3RvYnVmLCBwYXRoKSkgJiYKLSAgICAgQ3VybF9yYXdfZXF1YWwocHJvdG9idWYsICJmaWxlIikpIHsKKyAgICAgc3RyY2FzZWNvbXBhcmUocHJvdG9idWYsICJmaWxlIikpIHsKICAgICBpZihwYXRoWzBdID09ICcvJyAmJiBwYXRoWzFdID09ICcvJykgewogICAgICAgLyogQWxsb3cgb21pdHRlZCBob3N0bmFtZSAoZS5nLiBmaWxlOi88cGF0aD4pLiAgVGhpcyBpcyBub3Qgc3RyaWN0bHkKICAgICAgICAqIHNwZWFraW5nIGEgdmFsaWQgZmlsZTogVVJMIGJ5IFJGQyAxNzM4LCBidXQgdHJlYXRpbmcgZmlsZTovPHBhdGg+IGFzCkBAIC00MTA4LDMzICs0MjkyLDM4IEBACiAgICAgICogdGhlIFVSTCBwcm90b2NvbHMgc3BlY2lmaWVkIGluIFJGQyAxNzM4CiAgICAgICovCiAgICAgaWYocGF0aFswXSAhPSAnLycpIHsKLSAgICAgIC8qIHRoZSBVUkwgaW5jbHVkZWQgYSBob3N0IG5hbWUsIHdlIGlnbm9yZSBob3N0IG5hbWVzIGluIGZpbGU6Ly8gVVJMcwotICAgICAgICAgYXMgdGhlIHN0YW5kYXJkcyBkb24ndCBkZWZpbmUgd2hhdCB0byBkbyB3aXRoIHRoZW0gKi8KLSAgICAgIGNoYXIgKnB0cj1zdHJjaHIocGF0aCwgJy8nKTsKLSAgICAgIGlmKHB0cikgewotICAgICAgICAvKiB0aGVyZSB3YXMgYSBzbGFzaCBwcmVzZW50Ci0KLSAgICAgICAgICAgUkZDMTczOCAoc2VjdGlvbiAzLjEsIHBhZ2UgNSkgc2F5czoKLQotICAgICAgICAgICBUaGUgcmVzdCBvZiB0aGUgbG9jYXRvciBjb25zaXN0cyBvZiBkYXRhIHNwZWNpZmljIHRvIHRoZSBzY2hlbWUsCi0gICAgICAgICAgIGFuZCBpcyBrbm93biBhcyB0aGUgInVybC1wYXRoIi4gSXQgc3VwcGxpZXMgdGhlIGRldGFpbHMgb2YgaG93IHRoZQotICAgICAgICAgICBzcGVjaWZpZWQgcmVzb3VyY2UgY2FuIGJlIGFjY2Vzc2VkLiBOb3RlIHRoYXQgdGhlICIvIiBiZXR3ZWVuIHRoZQotICAgICAgICAgICBob3N0IChvciBwb3J0KSBhbmQgdGhlIHVybC1wYXRoIGlzIE5PVCBwYXJ0IG9mIHRoZSB1cmwtcGF0aC4KLQotICAgICAgICAgICBBcyBtb3N0IGFnZW50cyB1c2UgZmlsZTovL2xvY2FsaG9zdC9mb28gdG8gZ2V0ICcvZm9vJyBhbHRob3VnaCB0aGUKLSAgICAgICAgICAgc2xhc2ggcHJlY2VkaW5nIGZvbyBpcyBhIHNlcGFyYXRvciBhbmQgbm90IGEgc2xhc2ggZm9yIHRoZSBwYXRoLAotICAgICAgICAgICBhIFVSTCBhcyBmaWxlOi8vbG9jYWxob3N0Ly9mb28gbXVzdCBiZSB2YWxpZCBhcyB3ZWxsLCB0byByZWZlciB0bwotICAgICAgICAgICB0aGUgc2FtZSBmaWxlIHdpdGggYW4gYWJzb2x1dGUgcGF0aC4KLSAgICAgICAgKi8KLQotICAgICAgICBpZihwdHJbMV0gJiYgKCcvJyA9PSBwdHJbMV0pKQotICAgICAgICAgIC8qIGlmIHRoZXJlIHdhcyB0d28gc2xhc2hlcywgd2Ugc2tpcCB0aGUgZmlyc3Qgb25lIGFzIHRoYXQgaXMgdGhlbgotICAgICAgICAgICAgIHVzZWQgdHJ1bHkgYXMgYSBzZXBhcmF0b3IgKi8KLSAgICAgICAgICBwdHIrKzsKLQotICAgICAgICAvKiBUaGlzIGNhbm5vdCBiZSBtYWRlIHdpdGggc3RyY3B5LCBhcyB0aGUgbWVtb3J5IGNodW5rcyBvdmVybGFwISAqLwotICAgICAgICBtZW1tb3ZlKHBhdGgsIHB0ciwgc3RybGVuKHB0cikrMSk7CisgICAgICAvKiB0aGUgVVJMIGluY2x1ZGVzIGEgaG9zdCBuYW1lLCBpdCBtdXN0IG1hdGNoICJsb2NhbGhvc3QiIG9yCisgICAgICAgICAiMTI3LjAuMC4xIiB0byBiZSB2YWxpZCAqLworICAgICAgY2hhciAqcHRyOworICAgICAgaWYoIWNoZWNrcHJlZml4KCJsb2NhbGhvc3QvIiwgcGF0aCkgJiYKKyAgICAgICAgICFjaGVja3ByZWZpeCgiMTI3LjAuMC4xLyIsIHBhdGgpKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJWYWxpZCBob3N0IG5hbWUgd2l0aCBzbGFzaCBtaXNzaW5nIGluIFVSTCIpOworICAgICAgICByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVDsKICAgICAgIH0KKyAgICAgIHB0ciA9ICZwYXRoWzldOyAvKiBub3cgcG9pbnRzIHRvIHRoZSBzbGFzaCBhZnRlciB0aGUgaG9zdCAqLworCisgICAgICAvKiB0aGVyZSB3YXMgYSBob3N0IG5hbWUgYW5kIHNsYXNoIHByZXNlbnQKKworICAgICAgICAgUkZDMTczOCAoc2VjdGlvbiAzLjEsIHBhZ2UgNSkgc2F5czoKKworICAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGxvY2F0b3IgY29uc2lzdHMgb2YgZGF0YSBzcGVjaWZpYyB0byB0aGUgc2NoZW1lLAorICAgICAgICAgYW5kIGlzIGtub3duIGFzIHRoZSAidXJsLXBhdGgiLiBJdCBzdXBwbGllcyB0aGUgZGV0YWlscyBvZiBob3cgdGhlCisgICAgICAgICBzcGVjaWZpZWQgcmVzb3VyY2UgY2FuIGJlIGFjY2Vzc2VkLiBOb3RlIHRoYXQgdGhlICIvIiBiZXR3ZWVuIHRoZQorICAgICAgICAgaG9zdCAob3IgcG9ydCkgYW5kIHRoZSB1cmwtcGF0aCBpcyBOT1QgcGFydCBvZiB0aGUgdXJsLXBhdGguCisKKyAgICAgICAgIEFzIG1vc3QgYWdlbnRzIHVzZSBmaWxlOi8vbG9jYWxob3N0L2ZvbyB0byBnZXQgJy9mb28nIGFsdGhvdWdoIHRoZQorICAgICAgICAgc2xhc2ggcHJlY2VkaW5nIGZvbyBpcyBhIHNlcGFyYXRvciBhbmQgbm90IGEgc2xhc2ggZm9yIHRoZSBwYXRoLAorICAgICAgICAgYSBVUkwgYXMgZmlsZTovL2xvY2FsaG9zdC8vZm9vIG11c3QgYmUgdmFsaWQgYXMgd2VsbCwgdG8gcmVmZXIgdG8KKyAgICAgICAgIHRoZSBzYW1lIGZpbGUgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgKi8KKworICAgICAgaWYoJy8nID09IHB0clsxXSkKKyAgICAgICAgLyogaWYgdGhlcmUgd2FzIHR3byBzbGFzaGVzLCB3ZSBza2lwIHRoZSBmaXJzdCBvbmUgYXMgdGhhdCBpcyB0aGVuCisgICAgICAgICAgIHVzZWQgdHJ1bHkgYXMgYSBzZXBhcmF0b3IgKi8KKyAgICAgICAgcHRyKys7CisKKyAgICAgIC8qIFRoaXMgY2Fubm90IGJlIG1hZGUgd2l0aCBzdHJjcHksIGFzIHRoZSBtZW1vcnkgY2h1bmtzIG92ZXJsYXAhICovCisgICAgICBtZW1tb3ZlKHBhdGgsIHB0ciwgc3RybGVuKHB0cikrMSk7CiAgICAgfQogCiAgICAgcHJvdG9wID0gImZpbGUiOyAvKiBwcm90b2NvbCBzdHJpbmcgKi8KQEAgLTQxNDUsNyArNDMzNCw3IEBACiAgICAgcGF0aFswXT0wOwogCiAgICAgcmMgPSBzc2NhbmYoZGF0YS0+Y2hhbmdlLnVybCwKLSAgICAgICAgICAgICAgICAiJTE1W15cbjpdOiUzWy9dJVteXG4vP10lW15cbl0iLAorICAgICAgICAgICAgICAgICIlMTVbXlxuOl06JTNbL10lW15cbi8/I10lW15cbl0iLAogICAgICAgICAgICAgICAgIHByb3RvYnVmLCBzbGFzaGJ1ZiwgY29ubi0+aG9zdC5uYW1lLCBwYXRoKTsKICAgICBpZigyID09IHJjKSB7CiAgICAgICBmYWlsZihkYXRhLCAiQmFkIFVSTCIpOwpAQCAtNDE1Nyw3ICs0MzQ2LDcgQEAKICAgICAgICAqIFRoZSBVUkwgd2FzIGJhZGx5IGZvcm1hdHRlZCwgbGV0J3MgdHJ5IHRoZSBicm93c2VyLXN0eWxlIF93aXRob3V0XwogICAgICAgICogcHJvdG9jb2wgc3BlY2lmaWVkIGxpa2UgJ2h0dHA6Ly8nLgogICAgICAgICovCi0gICAgICByYyA9IHNzY2FuZihkYXRhLT5jaGFuZ2UudXJsLCAiJVteXG4vP10lW15cbl0iLCBjb25uLT5ob3N0Lm5hbWUsIHBhdGgpOworICAgICAgcmMgPSBzc2NhbmYoZGF0YS0+Y2hhbmdlLnVybCwgIiVbXlxuLz8jXSVbXlxuXSIsIGNvbm4tPmhvc3QubmFtZSwgcGF0aCk7CiAgICAgICBpZigxID4gcmMpIHsKICAgICAgICAgLyoKICAgICAgICAgICogV2UgY291bGRuJ3QgZXZlbiBnZXQgdGhpcyBmb3JtYXQuCkBAIC00MjYyLDEwICs0NDUxLDEwIEBACiAgIH0KIAogICAvKiBJZiB0aGUgVVJMIGlzIG1hbGZvcm1hdHRlZCAobWlzc2luZyBhICcvJyBhZnRlciBob3N0bmFtZSBiZWZvcmUgcGF0aCkgd2UKLSAgICogaW5zZXJ0IGEgc2xhc2ggaGVyZS4gVGhlIG9ubHkgbGV0dGVyIGV4Y2VwdCAnLycgd2UgYWNjZXB0IHRvIHN0YXJ0IGEgcGF0aAotICAgKiBpcyAnPycuCisgICAqIGluc2VydCBhIHNsYXNoIGhlcmUuIFRoZSBvbmx5IGxldHRlcnMgZXhjZXB0ICcvJyB0aGF0IGNhbiBzdGFydCBhIHBhdGggaXMKKyAgICogJz8nIGFuZCAnIycgLSBhcyBjb250cm9sbGVkIGJ5IHRoZSB0d28gc3NjYW5mKCkgcGF0dGVybnMgYWJvdmUuCiAgICAqLwotICBpZihwYXRoWzBdID09ICc/JykgeworICBpZihwYXRoWzBdICE9ICcvJykgewogICAgIC8qIFdlIG5lZWQgdGhpcyBmdW5jdGlvbiB0byBkZWFsIHdpdGggb3ZlcmxhcHBpbmcgbWVtb3J5IGFyZWFzLiBXZSBrbm93CiAgICAgICAgdGhhdCB0aGUgbWVtb3J5IGFyZWEgJ3BhdGgnIHBvaW50cyB0byBpcyAndXJsbGVuJyBieXRlcyBiaWcgYW5kIHRoYXQKICAgICAgICBpcyBiaWdnZXIgdGhhbiB0aGUgcGF0aC4gVXNlICsxIHRvIG1vdmUgdGhlIHplcm8gYnl0ZSB0b28uICovCkBAIC00NTE2LDcgKzQ3MDUsNyBAQAogKiBDaGVja3MgaWYgdGhlIGhvc3QgaXMgaW4gdGhlIG5vcHJveHkgbGlzdC4gcmV0dXJucyB0cnVlIGlmIGl0IG1hdGNoZXMKICogYW5kIHRoZXJlZm9yZSB0aGUgcHJveHkgc2hvdWxkIE5PVCBiZSB1c2VkLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBib29sIGNoZWNrX25vcHJveHkoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogbm9fcHJveHkpCitzdGF0aWMgYm9vbCBjaGVja19ub3Byb3h5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm5vX3Byb3h5KQogewogICAvKiBub19wcm94eT1kb21haW4xLmRvbSxob3N0LmRvbWFpbjIuZG9tCiAgICAqICAgKGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdHMgd2hpY2ggc2hvdWxkCkBAIC00NTI1LDEzICs0NzE0LDEzIEBACiAgICAqLwogICBzaXplX3QgdG9rX3N0YXJ0OwogICBzaXplX3QgdG9rX2VuZDsKLSAgY29uc3QgY2hhciogc2VwYXJhdG9yID0gIiwgIjsKKyAgY29uc3QgY2hhciAqc2VwYXJhdG9yID0gIiwgIjsKICAgc2l6ZV90IG5vX3Byb3h5X2xlbjsKICAgc2l6ZV90IG5hbWVsZW47CiAgIGNoYXIgKmVuZHB0cjsKIAogICBpZihub19wcm94eSAmJiBub19wcm94eVswXSkgewotICAgIGlmKEN1cmxfcmF3X2VxdWFsKCIqIiwgbm9fcHJveHkpKSB7CisgICAgaWYoc3RyY2FzZWNvbXBhcmUoIioiLCBub19wcm94eSkpIHsKICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KIApAQCAtNDU2OSw3ICs0NzU4LDcgQEAKICAgICAgIGlmKCh0b2tfZW5kIC0gdG9rX3N0YXJ0KSA8PSBuYW1lbGVuKSB7CiAgICAgICAgIC8qIE1hdGNoIHRoZSBsYXN0IHBhcnQgb2YgdGhlIG5hbWUgdG8gdGhlIGRvbWFpbiB3ZSBhcmUgY2hlY2tpbmcuICovCiAgICAgICAgIGNvbnN0IGNoYXIgKmNoZWNrbiA9IG5hbWUgKyBuYW1lbGVuIC0gKHRva19lbmQgLSB0b2tfc3RhcnQpOwotICAgICAgICBpZihDdXJsX3Jhd19uZXF1YWwobm9fcHJveHkgKyB0b2tfc3RhcnQsIGNoZWNrbiwKKyAgICAgICAgaWYoc3RybmNhc2Vjb21wYXJlKG5vX3Byb3h5ICsgdG9rX3N0YXJ0LCBjaGVja24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tfZW5kIC0gdG9rX3N0YXJ0KSkgewogICAgICAgICAgIGlmKCh0b2tfZW5kIC0gdG9rX3N0YXJ0KSA9PSBuYW1lbGVuIHx8ICooY2hlY2tuIC0gMSkgPT0gJy4nKSB7CiAgICAgICAgICAgICAvKiBXZSBlaXRoZXIgaGF2ZSBhbiBleGFjdCBtYXRjaCwgb3IgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpcyBhIC4KQEAgLTQ2NDgsNyArNDgzNyw3IEBACiAgICAgICogVGhpcyBjYW4gY2F1c2UgJ2ludGVybmFsJyBodHRwL2Z0cCByZXF1ZXN0cyB0byBiZQogICAgICAqIGFyYml0cmFyaWx5IHJlZGlyZWN0ZWQgYnkgYW55IGV4dGVybmFsIGF0dGFja2VyLgogICAgICAqLwotICAgIGlmKCFwcm94ICYmICFDdXJsX3Jhd19lcXVhbCgiaHR0cF9wcm94eSIsIHByb3h5X2VudikpIHsKKyAgICBpZighcHJveCAmJiAhc3RyY2FzZWNvbXBhcmUoImh0dHBfcHJveHkiLCBwcm94eV9lbnYpKSB7CiAgICAgICAvKiBUaGVyZSB3YXMgbm8gbG93ZXJjYXNlIHZhcmlhYmxlLCB0cnkgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uOiAqLwogICAgICAgQ3VybF9zdHJudG91cHBlcihwcm94eV9lbnYsIHByb3h5X2Vudiwgc2l6ZW9mKHByb3h5X2VudikpOwogICAgICAgcHJveD1jdXJsX2dldGVudihwcm94eV9lbnYpOwpAQCAtNDY3OSw3ICs0ODY4LDggQEAKICAqIHRoYXQgbWF5IGV4aXN0IHJlZ2lzdGVyZWQgdG8gdGhlIHNhbWUgcHJveHkgaG9zdC4KICAqLwogc3RhdGljIENVUkxjb2RlIHBhcnNlX3Byb3h5KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjaGFyICpwcm94eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGNoYXIgKnByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfcHJveHl0eXBlIHByb3h5dHlwZSkKIHsKICAgY2hhciAqcHJveF9wb3J0bm87CiAgIGNoYXIgKmVuZG9mcHJvdDsKQEAgLTQ2ODgsNiArNDg3OCwxMCBAQAogICBjaGFyICpwcm94eXB0cjsKICAgY2hhciAqcG9ydHB0cjsKICAgY2hhciAqYXRzaWduOworICBsb25nIHBvcnQgPSAtMTsKKyAgY2hhciAqcHJveHl1c2VyID0gTlVMTDsKKyAgY2hhciAqcHJveHlwYXNzd2QgPSBOVUxMOworICBib29sIHNvY2tzdHlwZTsKIAogICAvKiBXZSBkbyB0aGUgcHJveHkgaG9zdCBzdHJpbmcgcGFyc2luZyBoZXJlLiBXZSB3YW50IHRoZSBob3N0IG5hbWUgYW5kIHRoZQogICAgKiBwb3J0IG5hbWUuIEFjY2VwdCBhIHByb3RvY29sOi8vIHByZWZpeApAQCAtNDY5Nyw2NCArNDg5MSw0MSBAQAogICBlbmRvZnByb3QgPSBzdHJzdHIocHJveHksICI6Ly8iKTsKICAgaWYoZW5kb2Zwcm90KSB7CiAgICAgcHJveHlwdHIgPSBlbmRvZnByb3QrMzsKLSAgICBpZihjaGVja3ByZWZpeCgic29ja3M1aCIsIHByb3h5KSkKLSAgICAgIGNvbm4tPnByb3h5dHlwZSA9IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUU7CisgICAgaWYoY2hlY2twcmVmaXgoImh0dHBzIiwgcHJveHkpKQorICAgICAgcHJveHl0eXBlID0gQ1VSTFBST1hZX0hUVFBTOworICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNvY2tzNWgiLCBwcm94eSkpCisgICAgICBwcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FOwogICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNvY2tzNSIsIHByb3h5KSkKLSAgICAgIGNvbm4tPnByb3h5dHlwZSA9IENVUkxQUk9YWV9TT0NLUzU7CisgICAgICBwcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M1OwogICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNvY2tzNGEiLCBwcm94eSkpCi0gICAgICBjb25uLT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0QTsKKyAgICAgIHByb3h5dHlwZSA9IENVUkxQUk9YWV9TT0NLUzRBOwogICAgIGVsc2UgaWYoY2hlY2twcmVmaXgoInNvY2tzNCIsIHByb3h5KSB8fCBjaGVja3ByZWZpeCgic29ja3MiLCBwcm94eSkpCi0gICAgICBjb25uLT5wcm94eXR5cGUgPSBDVVJMUFJPWFlfU09DS1M0OwotICAgIC8qIEFueSBvdGhlciB4eHg6Ly8gOiBjaGFuZ2UgdG8gaHR0cCBwcm94eSAqLworICAgICAgcHJveHl0eXBlID0gQ1VSTFBST1hZX1NPQ0tTNDsKKyAgICBlbHNlIGlmKGNoZWNrcHJlZml4KCJodHRwOiIsIHByb3h5KSkKKyAgICAgIDsgLyogbGVhdmUgaXQgYXMgSFRUUCBvciBIVFRQLzEuMCAqLworICAgIGVsc2UgeworICAgICAgLyogQW55IG90aGVyIHh4eDovLyByZWplY3QhICovCisgICAgICBmYWlsZihkYXRhLCAiVW5zdXBwb3J0ZWQgcHJveHkgc2NoZW1lIGZvciBcJyVzXCciLCBwcm94eSk7CisgICAgICByZXR1cm4gQ1VSTEVfQ09VTEROVF9DT05ORUNUOworICAgIH0KICAgfQogICBlbHNlCiAgICAgcHJveHlwdHIgPSBwcm94eTsgLyogTm8geHh4Oi8vIGhlYWQ6IEl0J3MgYSBIVFRQIHByb3h5ICovCiAKKyAgc29ja3N0eXBlID0gcHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUgfHwKKyAgICAgICAgICAgICAgcHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzUgfHwKKyAgICAgICAgICAgICAgcHJveHl0eXBlID09IENVUkxQUk9YWV9TT0NLUzRBIHx8CisgICAgICAgICAgICAgIHByb3h5dHlwZSA9PSBDVVJMUFJPWFlfU09DS1M0OworCiAgIC8qIElzIHRoZXJlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGdpdmVuIGluIHRoaXMgcHJveHkgdXJsPyAqLwogICBhdHNpZ24gPSBzdHJjaHIocHJveHlwdHIsICdAJyk7CiAgIGlmKGF0c2lnbikgewotICAgIGNoYXIgKnByb3h5dXNlciA9IE5VTEw7Ci0gICAgY2hhciAqcHJveHlwYXNzd2QgPSBOVUxMOwogICAgIENVUkxjb2RlIHJlc3VsdCA9CiAgICAgICBwYXJzZV9sb2dpbl9kZXRhaWxzKHByb3h5cHRyLCBhdHNpZ24gLSBwcm94eXB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3h5dXNlciwgJnByb3h5cGFzc3dkLCBOVUxMKTsKLSAgICBpZighcmVzdWx0KSB7Ci0gICAgICAvKiBmb3VuZCB1c2VyIGFuZCBwYXNzd29yZCwgcmlwIHRoZW0gb3V0LiAgbm90ZSB0aGF0IHdlIGFyZQotICAgICAgICAgdW5lc2NhcGluZyB0aGVtLCBhcyB0aGVyZSBpcyBvdGhlcndpc2Ugbm8gd2F5IHRvIGhhdmUgYQotICAgICAgICAgdXNlcm5hbWUgb3IgcGFzc3dvcmQgd2l0aCByZXNlcnZlZCBjaGFyYWN0ZXJzIGxpa2UgJzonIGluCi0gICAgICAgICB0aGVtLiAqLwotICAgICAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eXVzZXIpOwotICAgICAgaWYocHJveHl1c2VyICYmIHN0cmxlbihwcm94eXVzZXIpIDwgTUFYX0NVUkxfVVNFUl9MRU5HVEgpCi0gICAgICAgIGNvbm4tPnByb3h5dXNlciA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwcm94eXVzZXIsIDAsIE5VTEwpOwotICAgICAgZWxzZQotICAgICAgICBjb25uLT5wcm94eXVzZXIgPSBzdHJkdXAoIiIpOwotCi0gICAgICBpZighY29ubi0+cHJveHl1c2VyKQotICAgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICAgICAgZWxzZSB7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+cHJveHlwYXNzd2QpOwotICAgICAgICBpZihwcm94eXBhc3N3ZCAmJiBzdHJsZW4ocHJveHlwYXNzd2QpIDwgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIKQotICAgICAgICAgIGNvbm4tPnByb3h5cGFzc3dkID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHByb3h5cGFzc3dkLCAwLCBOVUxMKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbm4tPnByb3h5cGFzc3dkID0gc3RyZHVwKCIiKTsKLQotICAgICAgICBpZighY29ubi0+cHJveHlwYXNzd2QpCi0gICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKLSAgICAgIH0KLQotICAgICAgaWYoIXJlc3VsdCkgewotICAgICAgICBjb25uLT5iaXRzLnByb3h5X3VzZXJfcGFzc3dkID0gVFJVRTsgLyogZW5hYmxlIGl0ICovCi0gICAgICAgIGF0c2lnbisrOyAvKiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgQC1sZXR0ZXIgKi8KLQotICAgICAgICBwcm94eXB0ciA9IGF0c2lnbjsgLyogbm93IHVzZSB0aGlzIGluc3RlYWQgKi8KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmcmVlKHByb3h5dXNlcik7Ci0gICAgZnJlZShwcm94eXBhc3N3ZCk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm94eXVzZXIsICZwcm94eXBhc3N3ZCwgTlVMTCk7CiAgICAgaWYocmVzdWx0KQogICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBwcm94eXB0ciA9IGF0c2lnbiArIDE7CiAgIH0KIAogICAvKiBzdGFydCBzY2FubmluZyBmb3IgcG9ydCBudW1iZXIgYXQgdGhpcyBwb2ludCAqLwpAQCAtNDc5MSw3ICs0OTYyLDcgQEAKICAgcHJveF9wb3J0bm8gPSBzdHJjaHIocG9ydHB0ciwgJzonKTsKICAgaWYocHJveF9wb3J0bm8pIHsKICAgICBjaGFyICplbmRwID0gTlVMTDsKLSAgICBsb25nIHBvcnQgPSAwOworCiAgICAgKnByb3hfcG9ydG5vID0gMHgwOyAvKiBjdXQgb2ZmIG51bWJlciBmcm9tIGhvc3QgbmFtZSAqLwogICAgIHByb3hfcG9ydG5vICsrOwogICAgIC8qIG5vdyBzZXQgdGhlIGxvY2FsIHBvcnQgbnVtYmVyICovCkBAIC00ODI1LDE1ICs0OTk2LDUzIEBACiAgICAgaWYoZGF0YS0+c2V0LnByb3h5cG9ydCkKICAgICAgIC8qIE5vbmUgZ2l2ZW4gaW4gdGhlIHByb3h5IHN0cmluZywgdGhlbiBnZXQgdGhlIGRlZmF1bHQgb25lIGlmIGl0IGlzCiAgICAgICAgICBnaXZlbiAqLwotICAgICAgY29ubi0+cG9ydCA9IGRhdGEtPnNldC5wcm94eXBvcnQ7CisgICAgICBwb3J0ID0gZGF0YS0+c2V0LnByb3h5cG9ydDsKICAgfQogCi0gIC8qIG5vdywgY2xvbmUgdGhlIGNsZWFuZWQgcHJveHkgaG9zdCBuYW1lICovCi0gIGNvbm4tPnByb3h5LnJhd2FsbG9jID0gc3RyZHVwKHByb3h5cHRyKTsKLSAgY29ubi0+cHJveHkubmFtZSA9IGNvbm4tPnByb3h5LnJhd2FsbG9jOworICBpZigqcHJveHlwdHIpIHsKKyAgICBzdHJ1Y3QgcHJveHlfaW5mbyAqcHJveHlpbmZvID0KKyAgICAgIHNvY2tzdHlwZSA/ICZjb25uLT5zb2Nrc19wcm94eSA6ICZjb25uLT5odHRwX3Byb3h5OworICAgIHByb3h5aW5mby0+cHJveHl0eXBlID0gcHJveHl0eXBlOwogCi0gIGlmKCFjb25uLT5wcm94eS5yYXdhbGxvYykKLSAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICBpZihwcm94eXVzZXIpIHsKKyAgICAgIC8qIGZvdW5kIHVzZXIgYW5kIHBhc3N3b3JkLCByaXAgdGhlbSBvdXQuICBub3RlIHRoYXQgd2UgYXJlIHVuZXNjYXBpbmcKKyAgICAgICAgIHRoZW0sIGFzIHRoZXJlIGlzIG90aGVyd2lzZSBubyB3YXkgdG8gaGF2ZSBhIHVzZXJuYW1lIG9yIHBhc3N3b3JkCisgICAgICAgICB3aXRoIHJlc2VydmVkIGNoYXJhY3RlcnMgbGlrZSAnOicgaW4gdGhlbS4gKi8KKyAgICAgIEN1cmxfc2FmZWZyZWUocHJveHlpbmZvLT51c2VyKTsKKyAgICAgIHByb3h5aW5mby0+dXNlciA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwcm94eXVzZXIsIDAsIE5VTEwpOworCisgICAgICBpZighcHJveHlpbmZvLT51c2VyKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgQ3VybF9zYWZlZnJlZShwcm94eWluZm8tPnBhc3N3ZCk7CisgICAgICBpZihwcm94eXBhc3N3ZCAmJiBzdHJsZW4ocHJveHlwYXNzd2QpIDwgTUFYX0NVUkxfUEFTU1dPUkRfTEVOR1RIKQorICAgICAgICBwcm94eWluZm8tPnBhc3N3ZCA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwcm94eXBhc3N3ZCwgMCwgTlVMTCk7CisgICAgICBlbHNlCisgICAgICAgIHByb3h5aW5mby0+cGFzc3dkID0gc3RyZHVwKCIiKTsKKworICAgICAgaWYoIXByb3h5aW5mby0+cGFzc3dkKQorICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKworICAgICAgY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCA9IFRSVUU7IC8qIGVuYWJsZSBpdCAqLworICAgIH0KKworICAgIGlmKHBvcnQgPj0gMCkgeworICAgICAgcHJveHlpbmZvLT5wb3J0ID0gcG9ydDsKKyAgICAgIGlmKGNvbm4tPnBvcnQgPCAwIHx8IHNvY2tzdHlwZSB8fCAhY29ubi0+c29ja3NfcHJveHkuaG9zdC5yYXdhbGxvYykKKyAgICAgICAgY29ubi0+cG9ydCA9IHBvcnQ7CisgICAgfQorCisgICAgLyogbm93LCBjbG9uZSB0aGUgY2xlYW5lZCBwcm94eSBob3N0IG5hbWUgKi8KKyAgICBDdXJsX3NhZmVmcmVlKHByb3h5aW5mby0+aG9zdC5yYXdhbGxvYyk7CisgICAgcHJveHlpbmZvLT5ob3N0LnJhd2FsbG9jID0gc3RyZHVwKHByb3h5cHRyKTsKKyAgICBwcm94eWluZm8tPmhvc3QubmFtZSA9IHByb3h5aW5mby0+aG9zdC5yYXdhbGxvYzsKKworICAgIGlmKCFwcm94eWluZm8tPmhvc3QucmF3YWxsb2MpCisgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgfQorCisgIEN1cmxfc2FmZWZyZWUocHJveHl1c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShwcm94eXBhc3N3ZCk7CiAKICAgcmV0dXJuIENVUkxFX09LOwogfQpAQCAtNDg0Niw2ICs1MDU1LDcgQEAKIHsKICAgY2hhciBwcm94eXVzZXJbTUFYX0NVUkxfVVNFUl9MRU5HVEhdPSIiOwogICBjaGFyIHByb3h5cGFzc3dkW01BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSF09IiI7CisgIENVUkxjb2RlIHJlc3VsdDsKIAogICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19QUk9YWVVTRVJOQU1FXSAhPSBOVUxMKSB7CiAgICAgc3RybmNweShwcm94eXVzZXIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX1BST1hZVVNFUk5BTUVdLApAQCAtNDg1OCwxNSArNTA2OCwxMiBAQAogICAgIHByb3h5cGFzc3dkW01BWF9DVVJMX1BBU1NXT1JEX0xFTkdUSC0xXSA9ICdcMCc7IC8qVG8gYmUgb24gc2FmZSBzaWRlKi8KICAgfQogCi0gIGNvbm4tPnByb3h5dXNlciA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBwcm94eXVzZXIsIDAsIE5VTEwpOwotICBpZighY29ubi0+cHJveHl1c2VyKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gIGNvbm4tPnByb3h5cGFzc3dkID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHByb3h5cGFzc3dkLCAwLCBOVUxMKTsKLSAgaWYoIWNvbm4tPnByb3h5cGFzc3dkKQotICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotCi0gIHJldHVybiBDVVJMRV9PSzsKKyAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgcHJveHl1c2VyLCAwLCAmY29ubi0+aHR0cF9wcm94eS51c2VyLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSk7CisgIGlmKCFyZXN1bHQpCisgICAgcmVzdWx0ID0gQ3VybF91cmxkZWNvZGUoZGF0YSwgcHJveHlwYXNzd2QsIDAsICZjb25uLT5odHRwX3Byb3h5LnBhc3N3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBGQUxTRSk7CisgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYgLyogQ1VSTF9ESVNBQkxFX1BST1hZICovCiAKQEAgLTQ5NDAsOSArNTE0Nyw4IEBACiAgICAgY29ubi0+Yml0cy51c2VyX3Bhc3N3ZCA9IFRSVUU7IC8qIGVuYWJsZSB1c2VyK3Bhc3N3b3JkICovCiAKICAgICAvKiBEZWNvZGUgdGhlIHVzZXIgKi8KLSAgICBuZXduYW1lID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHVzZXJwLCAwLCBOVUxMKTsKLSAgICBpZighbmV3bmFtZSkgewotICAgICAgcmVzdWx0ID0gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCB1c2VycCwgMCwgJm5ld25hbWUsIE5VTEwsIEZBTFNFKTsKKyAgICBpZihyZXN1bHQpIHsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNDk1Miw5ICs1MTU4LDkgQEAKIAogICBpZihwYXNzd2RwKSB7CiAgICAgLyogV2UgaGF2ZSBhIHBhc3N3b3JkIGluIHRoZSBVUkwgc28gZGVjb2RlIGl0ICovCi0gICAgY2hhciAqbmV3cGFzc3dkID0gY3VybF9lYXN5X3VuZXNjYXBlKGRhdGEsIHBhc3N3ZHAsIDAsIE5VTEwpOwotICAgIGlmKCFuZXdwYXNzd2QpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgY2hhciAqbmV3cGFzc3dkOworICAgIHJlc3VsdCA9IEN1cmxfdXJsZGVjb2RlKGRhdGEsIHBhc3N3ZHAsIDAsICZuZXdwYXNzd2QsIE5VTEwsIEZBTFNFKTsKKyAgICBpZihyZXN1bHQpIHsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNDk2NCw5ICs1MTcwLDkgQEAKIAogICBpZihvcHRpb25zcCkgewogICAgIC8qIFdlIGhhdmUgYW4gb3B0aW9ucyBsaXN0IGluIHRoZSBVUkwgc28gZGVjb2RlIGl0ICovCi0gICAgY2hhciAqbmV3b3B0aW9ucyA9IGN1cmxfZWFzeV91bmVzY2FwZShkYXRhLCBvcHRpb25zcCwgMCwgTlVMTCk7Ci0gICAgaWYoIW5ld29wdGlvbnMpIHsKLSAgICAgIHJlc3VsdCA9IENVUkxFX09VVF9PRl9NRU1PUlk7CisgICAgY2hhciAqbmV3b3B0aW9uczsKKyAgICByZXN1bHQgPSBDdXJsX3VybGRlY29kZShkYXRhLCBvcHRpb25zcCwgMCwgJm5ld29wdGlvbnMsIE5VTEwsIEZBTFNFKTsKKyAgICBpZihyZXN1bHQpIHsKICAgICAgIGdvdG8gb3V0OwogICAgIH0KIApAQCAtNTQ1Nyw3ICs1NjYzLDggQEAKICAgICBpZighaG9zdG5hbWVfdG9fbWF0Y2gpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICBob3N0bmFtZV90b19tYXRjaF9sZW4gPSBzdHJsZW4oaG9zdG5hbWVfdG9fbWF0Y2gpOwotICAgIGhvc3RfbWF0Y2ggPSBjdXJsX3N0cm5lcXVhbChwdHIsIGhvc3RuYW1lX3RvX21hdGNoLCBob3N0bmFtZV90b19tYXRjaF9sZW4pOworICAgIGhvc3RfbWF0Y2ggPSBzdHJuY2FzZWNvbXBhcmUocHRyLCBob3N0bmFtZV90b19tYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lX3RvX21hdGNoX2xlbik7CiAgICAgZnJlZShob3N0bmFtZV90b19tYXRjaCk7CiAgICAgcHRyICs9IGhvc3RuYW1lX3RvX21hdGNoX2xlbjsKIApAQCAtNTU1MSw3ICs1NzU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphc3luYykKIHsKICAgQ1VSTGNvZGUgcmVzdWx0PUNVUkxFX09LOwotICBsb25nIHRpbWVvdXRfbXMgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOworICB0aW1lX3QgdGltZW91dF9tcyA9IEN1cmxfdGltZWxlZnQoZGF0YSwgTlVMTCwgVFJVRSk7CiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICogUmVzb2x2ZSB0aGUgbmFtZSBvZiB0aGUgc2VydmVyIG9yIHByb3h5CkBAIC01NTY4LDExICs1Nzc1LDExIEBACiAgICAgc3RydWN0IEN1cmxfZG5zX2VudHJ5ICpob3N0YWRkcjsKIAogI2lmZGVmIFVTRV9VTklYX1NPQ0tFVFMKLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19VTklYX1NPQ0tFVF9QQVRIXSkgeworICAgIGlmKGNvbm4tPnVuaXhfZG9tYWluX3NvY2tldCkgewogICAgICAgLyogVW5peCBkb21haW4gc29ja2V0cyBhcmUgbG9jYWwuIFRoZSBob3N0IGdldHMgaWdub3JlZCwganVzdCB1c2UgdGhlCiAgICAgICAgKiBzcGVjaWZpZWQgZG9tYWluIHNvY2tldCBhZGRyZXNzLiBEbyBub3QgY2FjaGUgIkROUyBlbnRyaWVzIi4gVGhlcmUgaXMKICAgICAgICAqIG5vIEROUyBpbnZvbHZlZCBhbmQgd2UgYWxyZWFkeSBoYXZlIHRoZSBmaWxlc3lzdGVtIHBhdGggYXZhaWxhYmxlICovCi0gICAgICBjb25zdCBjaGFyICpwYXRoID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVU5JWF9TT0NLRVRfUEFUSF07CisgICAgICBjb25zdCBjaGFyICpwYXRoID0gY29ubi0+dW5peF9kb21haW5fc29ja2V0OwogCiAgICAgICBob3N0YWRkciA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IEN1cmxfZG5zX2VudHJ5KSk7CiAgICAgICBpZighaG9zdGFkZHIpCkBAIC01NTkzLDcgKzU4MDAsNyBAQAogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICBpZighY29ubi0+cHJveHkubmFtZSB8fCAhKmNvbm4tPnByb3h5Lm5hbWUpIHsKKyAgICBpZighY29ubi0+Yml0cy5wcm94eSkgewogICAgICAgc3RydWN0IGhvc3RuYW1lICpjb25uaG9zdDsKICAgICAgIGlmKGNvbm4tPmJpdHMuY29ubl90b19ob3N0KQogICAgICAgICBjb25uaG9zdCA9ICZjb25uLT5jb25uX3RvX2hvc3Q7CkBAIC01NjI1LDggKzU4MzIsMTEgQEAKICAgICBlbHNlIHsKICAgICAgIC8qIFRoaXMgaXMgYSBwcm94eSB0aGF0IGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gKi8KIAorICAgICAgc3RydWN0IGhvc3RuYW1lICogY29uc3QgaG9zdCA9IGNvbm4tPmJpdHMuc29ja3Nwcm94eSA/CisgICAgICAgICZjb25uLT5zb2Nrc19wcm94eS5ob3N0IDogJmNvbm4tPmh0dHBfcHJveHkuaG9zdDsKKwogICAgICAgLyogcmVzb2x2ZSBwcm94eSAqLwotICAgICAgcmMgPSBDdXJsX3Jlc29sdl90aW1lb3V0KGNvbm4sIGNvbm4tPnByb3h5Lm5hbWUsIChpbnQpY29ubi0+cG9ydCwKKyAgICAgIHJjID0gQ3VybF9yZXNvbHZfdGltZW91dChjb25uLCBob3N0LT5uYW1lLCAoaW50KWNvbm4tPnBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RhZGRyLCB0aW1lb3V0X21zKTsKIAogICAgICAgaWYocmMgPT0gQ1VSTFJFU09MVl9QRU5ESU5HKQpAQCAtNTYzNiw3ICs1ODQ2LDcgQEAKICAgICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOwogCiAgICAgICBlbHNlIGlmKCFob3N0YWRkcikgewotICAgICAgICBmYWlsZihkYXRhLCAiQ291bGRuJ3QgcmVzb2x2ZSBwcm94eSAnJXMnIiwgY29ubi0+cHJveHkuZGlzcG5hbWUpOworICAgICAgICBmYWlsZihkYXRhLCAiQ291bGRuJ3QgcmVzb2x2ZSBwcm94eSAnJXMnIiwgaG9zdC0+ZGlzcG5hbWUpOwogICAgICAgICByZXN1bHQgPSBDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFk7CiAgICAgICAgIC8qIGRvbid0IHJldHVybiB5ZXQsIHdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIHRpbWVvdXQgZmlyc3QgKi8KICAgICAgIH0KQEAgLTU2NTYsMTIgKzU4NjYsMTggQEAKIHN0YXRpYyB2b2lkIHJldXNlX2Nvbm4oc3RydWN0IGNvbm5lY3RkYXRhICpvbGRfY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uKQogeworICBmcmVlX2ZpeGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+aHR0cF9wcm94eS5ob3N0KTsKKyAgZnJlZV9maXhlZF9ob3N0bmFtZSgmb2xkX2Nvbm4tPnNvY2tzX3Byb3h5Lmhvc3QpOwogICBmcmVlX2ZpeGVkX2hvc3RuYW1lKCZvbGRfY29ubi0+cHJveHkpOworCisgIGZyZWUob2xkX2Nvbm4tPmh0dHBfcHJveHkuaG9zdC5yYXdhbGxvYyk7CisgIGZyZWUob2xkX2Nvbm4tPnNvY2tzX3Byb3h5Lmhvc3QucmF3YWxsb2MpOwogICBmcmVlKG9sZF9jb25uLT5wcm94eS5yYXdhbGxvYyk7CiAKICAgLyogZnJlZSB0aGUgU1NMIGNvbmZpZyBzdHJ1Y3QgZnJvbSB0aGlzIGNvbm5lY3Rpb24gc3RydWN0IGFzIHRoaXMgd2FzCiAgICAgIGFsbG9jYXRlZCBpbiB2YWluIGFuZCBpcyB0YXJnZXRlZCBmb3IgZGVzdHJ1Y3Rpb24gKi8KLSAgQ3VybF9mcmVlX3NzbF9jb25maWcoJm9sZF9jb25uLT5zc2xfY29uZmlnKTsKKyAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmb2xkX2Nvbm4tPnNzbF9jb25maWcpOworICBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKCZvbGRfY29ubi0+cHJveHlfc3NsX2NvbmZpZyk7CiAKICAgY29ubi0+ZGF0YSA9IG9sZF9jb25uLT5kYXRhOwogCkBAIC01NjgxLDEyICs1ODk3LDE4IEBACiAgIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgPSBvbGRfY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZDsKICAgaWYoY29ubi0+Yml0cy5wcm94eV91c2VyX3Bhc3N3ZCkgewogICAgIC8qIHVzZSB0aGUgbmV3IHByb3h5IHVzZXIgbmFtZSBhbmQgcHJveHkgcGFzc3dvcmQgdGhvdWdoICovCi0gICAgQ3VybF9zYWZlZnJlZShjb25uLT5wcm94eXVzZXIpOwotICAgIEN1cmxfc2FmZWZyZWUoY29ubi0+cHJveHlwYXNzd2QpOwotICAgIGNvbm4tPnByb3h5dXNlciA9IG9sZF9jb25uLT5wcm94eXVzZXI7Ci0gICAgY29ubi0+cHJveHlwYXNzd2QgPSBvbGRfY29ubi0+cHJveHlwYXNzd2Q7Ci0gICAgb2xkX2Nvbm4tPnByb3h5dXNlciA9IE5VTEw7Ci0gICAgb2xkX2Nvbm4tPnByb3h5cGFzc3dkID0gTlVMTDsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkudXNlcik7CisgICAgQ3VybF9zYWZlZnJlZShjb25uLT5zb2Nrc19wcm94eS51c2VyKTsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPmh0dHBfcHJveHkucGFzc3dkKTsKKyAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7CisgICAgY29ubi0+aHR0cF9wcm94eS51c2VyID0gb2xkX2Nvbm4tPmh0dHBfcHJveHkudXNlcjsKKyAgICBjb25uLT5zb2Nrc19wcm94eS51c2VyID0gb2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnVzZXI7CisgICAgY29ubi0+aHR0cF9wcm94eS5wYXNzd2QgPSBvbGRfY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CisgICAgY29ubi0+c29ja3NfcHJveHkucGFzc3dkID0gb2xkX2Nvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZDsKKyAgICBvbGRfY29ubi0+aHR0cF9wcm94eS51c2VyID0gTlVMTDsKKyAgICBvbGRfY29ubi0+c29ja3NfcHJveHkudXNlciA9IE5VTEw7CisgICAgb2xkX2Nvbm4tPmh0dHBfcHJveHkucGFzc3dkID0gTlVMTDsKKyAgICBvbGRfY29ubi0+c29ja3NfcHJveHkucGFzc3dkID0gTlVMTDsKICAgfQogCiAgIC8qIGhvc3QgY2FuIGNoYW5nZSwgd2hlbiBkb2luZyBrZWVwYWxpdmUgd2l0aCBhIHByb3h5IG9yIGlmIHRoZSBjYXNlIGlzCkBAIC01NzEyLDggKzU5MzQsMTAgQEAKIAogICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT51c2VyKTsKICAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+cGFzc3dkKTsKLSAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+cHJveHl1c2VyKTsKLSAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+cHJveHlwYXNzd2QpOworICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5odHRwX3Byb3h5LnVzZXIpOworICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5zb2Nrc19wcm94eS51c2VyKTsKKyAgQ3VybF9zYWZlZnJlZShvbGRfY29ubi0+aHR0cF9wcm94eS5wYXNzd2QpOworICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5zb2Nrc19wcm94eS5wYXNzd2QpOwogICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT5sb2NhbGRldik7CiAKICAgQ3VybF9sbGlzdF9kZXN0cm95KG9sZF9jb25uLT5zZW5kX3BpcGUsIE5VTEwpOwpAQCAtNTcyMyw2ICs1OTQ3LDEwIEBACiAgIG9sZF9jb25uLT5yZWN2X3BpcGUgPSBOVUxMOwogCiAgIEN1cmxfc2FmZWZyZWUob2xkX2Nvbm4tPm1hc3Rlcl9idWZmZXIpOworCisjaWZkZWYgVVNFX1VOSVhfU09DS0VUUworICBDdXJsX3NhZmVmcmVlKG9sZF9jb25uLT51bml4X2RvbWFpbl9zb2NrZXQpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtNTc1NCw2ICs1OTgyLDcgQEAKICAgY2hhciAqb3B0aW9ucyA9IE5VTEw7CiAgIGJvb2wgcmV1c2U7CiAgIGNoYXIgKnByb3h5ID0gTlVMTDsKKyAgY2hhciAqc29ja3Nwcm94eSA9IE5VTEw7CiAgIGJvb2wgcHJvdF9taXNzaW5nID0gRkFMU0U7CiAgIGJvb2wgY29ubmVjdGlvbnNfYXZhaWxhYmxlID0gVFJVRTsKICAgYm9vbCBmb3JjZV9yZXVzZSA9IEZBTFNFOwpAQCAtNTkyMCwxOCArNjE0OSwzNSBAQAogICAgIH0KICAgfQogCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NPQ0tTX1BST1hZXSkgeworICAgIHNvY2tzcHJveHkgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfU09DS1NfUFJPWFldKTsKKyAgICAvKiBpZiBnbG9iYWwgc29ja3MgcHJveHkgaXMgc2V0LCB0aGlzIGlzIGl0ICovCisgICAgaWYoTlVMTCA9PSBzb2Nrc3Byb3h5KSB7CisgICAgICBmYWlsZihkYXRhLCAibWVtb3J5IHNob3J0YWdlIik7CisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZ290byBvdXQ7CisgICAgfQorICB9CisKICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfTk9QUk9YWV0gJiYKICAgICAgY2hlY2tfbm9wcm94eShjb25uLT5ob3N0Lm5hbWUsIGRhdGEtPnNldC5zdHJbU1RSSU5HX05PUFJPWFldKSkgewotICAgIGZyZWUocHJveHkpOyAgLyogcHJveHkgaXMgaW4gZXhjZXB0aW9uIGxpc3QgKi8KLSAgICBwcm94eSA9IE5VTEw7CisgICAgQ3VybF9zYWZlZnJlZShwcm94eSk7CisgICAgQ3VybF9zYWZlZnJlZShzb2Nrc3Byb3h5KTsKICAgfQotICBlbHNlIGlmKCFwcm94eSkKKyAgZWxzZSBpZighcHJveHkgJiYgIXNvY2tzcHJveHkpCiAgICAgcHJveHkgPSBkZXRlY3RfcHJveHkoY29ubik7CiAKICNpZmRlZiBVU0VfVU5JWF9TT0NLRVRTCi0gIGlmKHByb3h5ICYmIGRhdGEtPnNldC5zdHJbU1RSSU5HX1VOSVhfU09DS0VUX1BBVEhdKSB7Ci0gICAgZnJlZShwcm94eSk7ICAvKiBVbml4IGRvbWFpbiBzb2NrZXRzIGNhbm5vdCBiZSBwcm94aWVkLCBzbyBkaXNhYmxlIGl0ICovCi0gICAgcHJveHkgPSBOVUxMOworICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19VTklYX1NPQ0tFVF9QQVRIXSkgeworICAgIGlmKHByb3h5KSB7CisgICAgICBmcmVlKHByb3h5KTsgLyogVW5peCBkb21haW4gc29ja2V0cyBjYW5ub3QgYmUgcHJveGllZCwgc28gZGlzYWJsZSBpdCAqLworICAgICAgcHJveHkgPSBOVUxMOworICAgIH0KKyAgICBjb25uLT51bml4X2RvbWFpbl9zb2NrZXQgPSBzdHJkdXAoZGF0YS0+c2V0LnN0cltTVFJJTkdfVU5JWF9TT0NLRVRfUEFUSF0pOworICAgIGlmKGNvbm4tPnVuaXhfZG9tYWluX3NvY2tldCA9PSBOVUxMKSB7CisgICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgICAgZ290byBvdXQ7CisgICAgfQogICB9CiAjZW5kaWYKIApAQCAtNTk0MCwyMyArNjE4NiwzNiBAQAogICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgZG9lc24ndCB3b3JrIHdpdGggbmV0d29yayAqLwogICAgIHByb3h5ID0gTlVMTDsKICAgfQorICBpZihzb2Nrc3Byb3h5ICYmICghKnNvY2tzcHJveHkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGNvbm4tPmhhbmRsZXItPmZsYWdzICYgUFJPVE9QVF9OT05FVFdPUkspKSkgeworICAgIGZyZWUoc29ja3Nwcm94eSk7ICAvKiBEb24ndCBib3RoZXIgd2l0aCBhbiBlbXB0eSBzb2NrcyBwcm94eSBzdHJpbmcgb3IgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3RvY29sIGRvZXNuJ3Qgd29yayB3aXRoIG5ldHdvcmsgKi8KKyAgICBzb2Nrc3Byb3h5ID0gTlVMTDsKKyAgfQogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBJZiB0aGlzIGlzIHN1cHBvc2VkIHRvIHVzZSBhIHByb3h5LCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHByb3h5IGhvc3QKICAgICogbmFtZSwgcHJveHkgdHlwZSBhbmQgcG9ydCBudW1iZXIsIHNvIHRoYXQgd2UgY2FuIHJlLXVzZSBhbiBleGlzdGluZwogICAgKiBjb25uZWN0aW9uIHRoYXQgbWF5IGV4aXN0IHJlZ2lzdGVyZWQgdG8gdGhlIHNhbWUgcHJveHkgaG9zdC4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICBpZihwcm94eSkgewotICAgIHJlc3VsdCA9IHBhcnNlX3Byb3h5KGRhdGEsIGNvbm4sIHByb3h5KTsKKyAgaWYocHJveHkgfHwgc29ja3Nwcm94eSkgeworICAgIGlmKHByb3h5KSB7CisgICAgICByZXN1bHQgPSBwYXJzZV9wcm94eShkYXRhLCBjb25uLCBwcm94eSwgY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUpOworICAgICAgQ3VybF9zYWZlZnJlZShwcm94eSk7IC8qIHBhcnNlX3Byb3h5IGNvcGllcyB0aGUgcHJveHkgc3RyaW5nICovCisgICAgICBpZihyZXN1bHQpCisgICAgICAgIGdvdG8gb3V0OworICAgIH0KIAotICAgIGZyZWUocHJveHkpOyAvKiBwYXJzZV9wcm94eSBjb3BpZXMgdGhlIHByb3h5IHN0cmluZyAqLwotICAgIHByb3h5ID0gTlVMTDsKKyAgICBpZihzb2Nrc3Byb3h5KSB7CisgICAgICByZXN1bHQgPSBwYXJzZV9wcm94eShkYXRhLCBjb25uLCBzb2Nrc3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+c29ja3NfcHJveHkucHJveHl0eXBlKTsKKyAgICAgIC8qIHBhcnNlX3Byb3h5IGNvcGllcyB0aGUgc29ja3MgcHJveHkgc3RyaW5nICovCisgICAgICBDdXJsX3NhZmVmcmVlKHNvY2tzcHJveHkpOworICAgICAgaWYocmVzdWx0KQorICAgICAgICBnb3RvIG91dDsKKyAgICB9CiAKLSAgICBpZihyZXN1bHQpCi0gICAgICBnb3RvIG91dDsKLQotICAgIGlmKChjb25uLT5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFApIHx8Ci0gICAgICAgKGNvbm4tPnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUF8xXzApKSB7CisgICAgaWYoY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKSB7CiAjaWZkZWYgQ1VSTF9ESVNBQkxFX0hUVFAKICAgICAgIC8qIGFza2luZyBmb3IgYSBIVFRQIHByb3h5IGlzIGEgYml0IGZ1bm55IHdoZW4gSFRUUCBpcyBkaXNhYmxlZC4uLiAqLwogICAgICAgcmVzdWx0ID0gQ1VSTEVfVU5TVVBQT1JURURfUFJPVE9DT0w7CkBAIC01OTc1LDEyICs2MjM0LDM0IEBACiAgICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA9IEZBTFNFOyAvKiBub3QgYSBIVFRQIHByb3h5ICovCiAgICAgICBjb25uLT5iaXRzLnR1bm5lbF9wcm94eSA9IEZBTFNFOyAvKiBubyB0dW5uZWxpbmcgaWYgbm90IEhUVFAgKi8KICAgICB9Ci0gICAgY29ubi0+Yml0cy5wcm94eSA9IFRSVUU7CisKKyAgICBpZihjb25uLT5zb2Nrc19wcm94eS5ob3N0LnJhd2FsbG9jKSB7CisgICAgICBpZighY29ubi0+aHR0cF9wcm94eS5ob3N0LnJhd2FsbG9jKSB7CisgICAgICAgIC8qIG9uY2UgYSBzb2NrcyBwcm94eSAqLworICAgICAgICBpZighY29ubi0+c29ja3NfcHJveHkudXNlcikgeworICAgICAgICAgIGNvbm4tPnNvY2tzX3Byb3h5LnVzZXIgPSBjb25uLT5odHRwX3Byb3h5LnVzZXI7CisgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS51c2VyID0gTlVMTDsKKyAgICAgICAgICBDdXJsX3NhZmVmcmVlKGNvbm4tPnNvY2tzX3Byb3h5LnBhc3N3ZCk7CisgICAgICAgICAgY29ubi0+c29ja3NfcHJveHkucGFzc3dkID0gY29ubi0+aHR0cF9wcm94eS5wYXNzd2Q7CisgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5wYXNzd2QgPSBOVUxMOworICAgICAgICB9CisgICAgICB9CisgICAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPSBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPSBGQUxTRTsgLyogbm90IGEgc29ja3MgcHJveHkgKi8KICAgfQogICBlbHNlIHsKKyAgICBjb25uLT5iaXRzLnNvY2tzcHJveHkgPSBGQUxTRTsKKyAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA9IEZBTFNFOworICB9CisgIGNvbm4tPmJpdHMucHJveHkgPSBjb25uLT5iaXRzLmh0dHBwcm94eSB8fCBjb25uLT5iaXRzLnNvY2tzcHJveHk7CisKKyAgaWYoIWNvbm4tPmJpdHMucHJveHkpIHsKICAgICAvKiB3ZSBhcmVuJ3QgdXNpbmcgdGhlIHByb3h5IGFmdGVyIGFsbC4uLiAqLwogICAgIGNvbm4tPmJpdHMucHJveHkgPSBGQUxTRTsKICAgICBjb25uLT5iaXRzLmh0dHBwcm94eSA9IEZBTFNFOworICAgIGNvbm4tPmJpdHMuc29ja3Nwcm94eSA9IEZBTFNFOwogICAgIGNvbm4tPmJpdHMucHJveHlfdXNlcl9wYXNzd2QgPSBGQUxTRTsKICAgICBjb25uLT5iaXRzLnR1bm5lbF9wcm94eSA9IEZBTFNFOwogICB9CkBAIC02MDIxLDE4ICs2MzAyLDE4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAqIElETi1maXggdGhlIGhvc3RuYW1lcwogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgZml4X2hvc3RuYW1lKGRhdGEsIGNvbm4sICZjb25uLT5ob3N0KTsKKyAgZml4X2hvc3RuYW1lKGNvbm4sICZjb25uLT5ob3N0KTsKICAgaWYoY29ubi0+Yml0cy5jb25uX3RvX2hvc3QpCi0gICAgZml4X2hvc3RuYW1lKGRhdGEsIGNvbm4sICZjb25uLT5jb25uX3RvX2hvc3QpOworICAgIGZpeF9ob3N0bmFtZShjb25uLCAmY29ubi0+Y29ubl90b19ob3N0KTsKICAgaWYoY29ubi0+cHJveHkubmFtZSAmJiAqY29ubi0+cHJveHkubmFtZSkKLSAgICBmaXhfaG9zdG5hbWUoZGF0YSwgY29ubiwgJmNvbm4tPnByb3h5KTsKKyAgICBmaXhfaG9zdG5hbWUoY29ubiwgJmNvbm4tPnByb3h5KTsKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKiBDaGVjayB3aGV0aGVyIHRoZSBob3N0IGFuZCB0aGUgImNvbm5lY3QgdG8gaG9zdCIgYXJlIGVxdWFsLgogICAgKiBEbyB0aGlzIGFmdGVyIHRoZSBob3N0bmFtZXMgaGF2ZSBiZWVuIElETi1maXhlZCAuCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICBpZihjb25uLT5iaXRzLmNvbm5fdG9faG9zdCAmJgotICAgICAgQ3VybF9yYXdfZXF1YWwoY29ubi0+Y29ubl90b19ob3N0Lm5hbWUsIGNvbm4tPmhvc3QubmFtZSkpIHsKKyAgICAgc3RyY2FzZWNvbXBhcmUoY29ubi0+Y29ubl90b19ob3N0Lm5hbWUsIGNvbm4tPmhvc3QubmFtZSkpIHsKICAgICBjb25uLT5iaXRzLmNvbm5fdG9faG9zdCA9IEZBTFNFOwogICB9CiAKQEAgLTYxMTYsMjAgKzYzOTcsNTEgQEAKICAgICAgdGhhdCB3aWxsIGJlIGZyZWVkIGFzIHBhcnQgb2YgdGhlIEN1cmxfZWFzeSBzdHJ1Y3QsIGJ1dCBhbGwgY2xvbmVkCiAgICAgIGNvcGllcyB3aWxsIGJlIHNlcGFyYXRlbHkgYWxsb2NhdGVkLgogICAqLwotICBkYXRhLT5zZXQuc3NsLkNBcGF0aCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdOwotICBkYXRhLT5zZXQuc3NsLkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdOwotICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV07Ci0gIGRhdGEtPnNldC5zc2wuaXNzdWVyY2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXTsKLSAgZGF0YS0+c2V0LnNzbC5yYW5kb21fZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9SQU5ET01fRklMRV07Ci0gIGRhdGEtPnNldC5zc2wuZWdkc29ja2V0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0VHRFNPQ0tFVF07Ci0gIGRhdGEtPnNldC5zc2wuY2lwaGVyX2xpc3QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RdOwotICBkYXRhLT5zZXQuc3NsLmNsaWVudGNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBcGF0aCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhfT1JJR107CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQXBhdGggPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LkNBZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVfT1JJR107CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5DQWZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wcmltYXJ5LnJhbmRvbV9maWxlID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdOworICBkYXRhLT5zZXQuc3NsLnByaW1hcnkuZWdkc29ja2V0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0VHRFNPQ0tFVF07CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5lZ2Rzb2NrZXQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNpcGhlcl9saXN0ID0KKyAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0lQSEVSX0xJU1RfT1JJR107CisgIGRhdGEtPnNldC5wcm94eV9zc2wucHJpbWFyeS5jaXBoZXJfbGlzdCA9CisgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUX1BST1hZXTsKKworICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV9PUklHXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5DUkxmaWxlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFldOworICBkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF9PUklHXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5pc3N1ZXJjZXJ0ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRfUFJPWFldOworICBkYXRhLT5zZXQuc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5jZXJ0X3R5cGUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVfT1JJR107CisgIGRhdGEtPnNldC5wcm94eV9zc2wuY2VydF90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5rZXkgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfT1JJR107CisgIGRhdGEtPnNldC5wcm94eV9zc2wua2V5ID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5rZXlfdHlwZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9UWVBFX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV90eXBlID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1RZUEVfUFJPWFldOworICBkYXRhLT5zZXQuc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLmtleV9wYXNzd2QgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEX1BST1hZXTsKKyAgZGF0YS0+c2V0LnNzbC5wcmltYXJ5LmNsaWVudGNlcnQgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX09SSUddOworICBkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnkuY2xpZW50Y2VydCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfUFJPWFldOwogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGRhdGEtPnNldC5zc2wudXNlcm5hbWUgPSBkYXRhLT5zZXQuc3RyW1NUUklOR19UTFNBVVRIX1VTRVJOQU1FXTsKLSAgZGF0YS0+c2V0LnNzbC5wYXNzd29yZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRdOworICBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV9PUklHXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC51c2VybmFtZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfVVNFUk5BTUVfUFJPWFldOworICBkYXRhLT5zZXQuc3NsLnBhc3N3b3JkID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfVExTQVVUSF9QQVNTV09SRF9PUklHXTsKKyAgZGF0YS0+c2V0LnByb3h5X3NzbC5wYXNzd29yZCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkRfUFJPWFldOwogI2VuZGlmCiAKLSAgaWYoIUN1cmxfY2xvbmVfc3NsX2NvbmZpZygmZGF0YS0+c2V0LnNzbCwgJmNvbm4tPnNzbF9jb25maWcpKSB7CisgIGlmKCFDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZygmZGF0YS0+c2V0LnNzbC5wcmltYXJ5LAorICAgICAmY29ubi0+c3NsX2NvbmZpZykpIHsKKyAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOworICAgIGdvdG8gb3V0OworICB9CisKKyAgaWYoIUN1cmxfY2xvbmVfcHJpbWFyeV9zc2xfY29uZmlnKCZkYXRhLT5zZXQucHJveHlfc3NsLnByaW1hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cHJveHlfc3NsX2NvbmZpZykpIHsKICAgICByZXN1bHQgPSBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgIGdvdG8gb3V0OwogICB9CkBAIC02MTg2LDcgKzY0OTgsOSBAQAogICAgIGluZm9mKGRhdGEsICJSZS11c2luZyBleGlzdGluZyBjb25uZWN0aW9uISAoIyVsZCkgd2l0aCAlcyAlc1xuIiwKICAgICAgICAgICBjb25uLT5jb25uZWN0aW9uX2lkLAogICAgICAgICAgIGNvbm4tPmJpdHMucHJveHk/InByb3h5IjoiaG9zdCIsCi0gICAgICAgICAgY29ubi0+cHJveHkubmFtZT9jb25uLT5wcm94eS5kaXNwbmFtZTpjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICBjb25uLT5zb2Nrc19wcm94eS5ob3N0Lm5hbWUgPyBjb25uLT5zb2Nrc19wcm94eS5ob3N0LmRpc3BuYW1lIDoKKyAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lKTsKICAgfQogICBlbHNlIHsKICAgICAvKiBXZSBoYXZlIGRlY2lkZWQgdGhhdCB3ZSB3YW50IGEgbmV3IGNvbm5lY3Rpb24uIEhvd2V2ZXIsIHdlIG1heSBub3QKQEAgLTYzMTcsNiArNjYzMSw3IEBACiAgIGZyZWUob3B0aW9ucyk7CiAgIGZyZWUocGFzc3dkKTsKICAgZnJlZSh1c2VyKTsKKyAgZnJlZShzb2Nrc3Byb3h5KTsKICAgZnJlZShwcm94eSk7CiAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9saWIvdXJsLmggYi9saWIvdXJsLmgKaW5kZXggOTBkOWRiMy4uYzEyNTRmNSAxMDA2NDQKLS0tIGEvbGliL3VybC5oCisrKyBiL2xpYi91cmwuaApAQCAtNzYsNSArNzYsMTYgQEAKIHZvaWQgQ3VybF92ZXJib3NlY29ubmVjdChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pOwogI2VuZGlmCiAKKyNkZWZpbmUgQ09OTkVDVF9QUk9YWV9TU0woKVwKKyAgKGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlID09IENVUkxQUk9YWV9IVFRQUyAmJlwKKyAgIWNvbm4tPmJpdHMucHJveHlfc3NsX2Nvbm5lY3RlZFtzb2NraW5kZXhdKQorCisjZGVmaW5lIENPTk5FQ1RfRklSU1RTT0NLRVRfUFJPWFlfU1NMKClcCisgIChjb25uLT5odHRwX3Byb3h5LnByb3h5dHlwZSA9PSBDVVJMUFJPWFlfSFRUUFMgJiZcCisgICFjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbRklSU1RTT0NLRVRdKQorCisjZGVmaW5lIENPTk5FQ1RfU0VDT05EQVJZU09DS0VUX1BST1hZX1NTTCgpXAorICAoY29ubi0+aHR0cF9wcm94eS5wcm94eXR5cGUgPT0gQ1VSTFBST1hZX0hUVFBTICYmXAorICAhY29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW1NFQ09OREFSWVNPQ0tFVF0pCiAKICNlbmRpZiAvKiBIRUFERVJfQ1VSTF9VUkxfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL3VybGRhdGEuaCBiL2xpYi91cmxkYXRhLmgKaW5kZXggM2NmN2VkOS4uMDVmNjAwMyAxMDA2NDQKLS0tIGEvbGliL3VybGRhdGEuaAorKysgYi9saWIvdXJsZGF0YS5oCkBAIC0zMTYsNiArMzE2LDggQEAKICNlbGlmIGRlZmluZWQoVVNFX0dTS0lUKQogICBnc2tfaGFuZGxlIGhhbmRsZTsKICAgaW50IGlvY3BvcnQ7CisgIGludCBsb2NhbGZkOworICBpbnQgcmVtb3RlZmQ7CiAjZWxpZiBkZWZpbmVkKFVTRV9BWFRMUykKICAgU1NMX0NUWCogc3NsX2N0eDsKICAgU1NMKiAgICAgc3NsOwpAQCAtMzMwLDYgKzMzMiw3IEBACiAgIENVUkxjb2RlIHJlY3ZfdW5yZWNvdmVyYWJsZV9lcnI7IC8qIHNjaGFubmVsX3JlY3YgaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyICovCiAgIGJvb2wgcmVjdl9zc3BpX2Nsb3NlX25vdGlmeTsgLyogdHJ1ZSBpZiBjb25uZWN0aW9uIGNsb3NlZCBieSBjbG9zZV9ub3RpZnkgKi8KICAgYm9vbCByZWN2X2Nvbm5lY3Rpb25fY2xvc2VkOyAvKiB0cnVlIGlmIGNvbm5lY3Rpb24gY2xvc2VkLCByZWdhcmRsZXNzIGhvdyAqLworICBib29sIHVzZV9hbHBuOyAvKiB0cnVlIGlmIEFMUE4gaXMgdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uICovCiAjZWxpZiBkZWZpbmVkKFVTRV9EQVJXSU5TU0wpCiAgIFNTTENvbnRleHRSZWYgc3NsX2N0eDsKICAgY3VybF9zb2NrZXRfdCBzc2xfc29ja2ZkOwpAQCAtMzQwLDI4ICszNDMsMzggQEAKICNlbmRpZgogfTsKIAotc3RydWN0IHNzbF9jb25maWdfZGF0YSB7CitzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnIHsKICAgbG9uZyB2ZXJzaW9uOyAgICAgICAgICAvKiB3aGF0IHZlcnNpb24gdGhlIGNsaWVudCB3YW50cyB0byB1c2UgKi8KLSAgbG9uZyBjZXJ0dmVyaWZ5cmVzdWx0OyAvKiByZXN1bHQgZnJvbSB0aGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uICovCi0KICAgYm9vbCB2ZXJpZnlwZWVyOyAgICAgICAvKiBzZXQgVFJVRSBpZiB0aGlzIGlzIGRlc2lyZWQgKi8KICAgYm9vbCB2ZXJpZnlob3N0OyAgICAgICAvKiBzZXQgVFJVRSBpZiBDTi9TQU4gbXVzdCBtYXRjaCBob3N0bmFtZSAqLwogICBib29sIHZlcmlmeXN0YXR1czsgICAgIC8qIHNldCBUUlVFIGlmIGNlcnRpZmljYXRlIHN0YXR1cyBtdXN0IGJlIGNoZWNrZWQgKi8KICAgY2hhciAqQ0FwYXRoOyAgICAgICAgICAvKiBjZXJ0aWZpY2F0ZSBkaXIgKGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzKSAqLwogICBjaGFyICpDQWZpbGU7ICAgICAgICAgIC8qIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKi8KLSAgY29uc3QgY2hhciAqQ1JMZmlsZTsgICAvKiBDUkwgdG8gY2hlY2sgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiAqLwotICBjb25zdCBjaGFyICppc3N1ZXJjZXJ0Oy8qIG9wdGlvbmFsIGlzc3VlciBjZXJ0aWZpY2F0ZSBmaWxlbmFtZSAqLwogICBjaGFyICpjbGllbnRjZXJ0OwogICBjaGFyICpyYW5kb21fZmlsZTsgICAgIC8qIHBhdGggdG8gZmlsZSBjb250YWluaW5nICJyYW5kb20iIGRhdGEgKi8KICAgY2hhciAqZWdkc29ja2V0OyAgICAgICAvKiBwYXRoIHRvIGZpbGUgY29udGFpbmluZyB0aGUgRUdEIGRhZW1vbiBzb2NrZXQgKi8KICAgY2hhciAqY2lwaGVyX2xpc3Q7ICAgICAvKiBsaXN0IG9mIGNpcGhlcnMgdG8gdXNlICovCi0gIHNpemVfdCBtYXhfc3NsX3Nlc3Npb25zOyAvKiBTU0wgc2Vzc2lvbiBpZCBjYWNoZSBzaXplICovCit9OworCitzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHsKKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBwcmltYXJ5OworICBib29sIGVuYWJsZV9iZWFzdDsgLyogZXNwZWNpYWxseSBhbGxvdyB0aGlzIGZsYXcgZm9yIGludGVyb3BlcmFiaWxpdHkncworICAgICAgICAgICAgICAgICAgICAgICAgc2FrZSovCisgIGJvb2wgbm9fcmV2b2tlOyAgICAvKiBkaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrcyAqLworICBsb25nIGNlcnR2ZXJpZnlyZXN1bHQ7IC8qIHJlc3VsdCBmcm9tIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gKi8KKyAgY2hhciAqQ1JMZmlsZTsgICAvKiBDUkwgdG8gY2hlY2sgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiAqLworICBjaGFyICppc3N1ZXJjZXJ0Oy8qIG9wdGlvbmFsIGlzc3VlciBjZXJ0aWZpY2F0ZSBmaWxlbmFtZSAqLwogICBjdXJsX3NzbF9jdHhfY2FsbGJhY2sgZnNzbGN0eDsgLyogZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBzc2wgY3R4ICovCiAgIHZvaWQgKmZzc2xjdHhwOyAgICAgICAgLyogcGFyYW1ldGVyIGZvciBjYWxsIGJhY2sgKi8KLSAgYm9vbCBzZXNzaW9uaWQ7ICAgICAgICAvKiBjYWNoZSBzZXNzaW9uIElEcyBvciBub3QgKi8KICAgYm9vbCBjZXJ0aW5mbzsgICAgICAgICAvKiBnYXRoZXIgbG90cyBvZiBjZXJ0aWZpY2F0ZSBpbmZvICovCiAgIGJvb2wgZmFsc2VzdGFydDsKIAorICBjaGFyICpjZXJ0OyAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCisgIGNoYXIgKmNlcnRfdHlwZTsgLyogZm9ybWF0IGZvciBjZXJ0aWZpY2F0ZSAoZGVmYXVsdDogUEVNKSovCisgIGNoYXIgKmtleTsgLyogcHJpdmF0ZSBrZXkgZmlsZSBuYW1lICovCisgIGNoYXIgKmtleV90eXBlOyAvKiBmb3JtYXQgZm9yIHByaXZhdGUga2V5IChkZWZhdWx0OiBQRU0pICovCisgIGNoYXIgKmtleV9wYXNzd2Q7IC8qIHBsYWluIHRleHQgcHJpdmF0ZSBrZXkgcGFzc3dvcmQgKi8KKwogI2lmZGVmIFVTRV9UTFNfU1JQCiAgIGNoYXIgKnVzZXJuYW1lOyAvKiBUTFMgdXNlcm5hbWUgKGZvciwgZS5nLiwgU1JQKSAqLwogICBjaGFyICpwYXNzd29yZDsgLyogVExTIHBhc3N3b3JkIChmb3IsIGUuZy4sIFNSUCkgKi8KQEAgLTM2OSwxNiArMzgyLDIyIEBACiAjZW5kaWYKIH07CiAKK3N0cnVjdCBzc2xfZ2VuZXJhbF9jb25maWcgeworICBib29sIHNlc3Npb25pZDsgLyogY2FjaGUgc2Vzc2lvbiBJRHMgb3Igbm90ICovCisgIHNpemVfdCBtYXhfc3NsX3Nlc3Npb25zOyAvKiBTU0wgc2Vzc2lvbiBpZCBjYWNoZSBzaXplICovCit9OworCiAvKiBpbmZvcm1hdGlvbiBzdG9yZWQgYWJvdXQgb25lIHNpbmdsZSBTU0wgc2Vzc2lvbiAqLwogc3RydWN0IGN1cmxfc3NsX3Nlc3Npb24gewogICBjaGFyICpuYW1lOyAgICAgICAvKiBob3N0IG5hbWUgZm9yIHdoaWNoIHRoaXMgSUQgd2FzIHVzZWQgKi8KICAgY2hhciAqY29ubl90b19ob3N0OyAvKiBob3N0IG5hbWUgZm9yIHRoZSBjb25uZWN0aW9uIChtYXkgYmUgTlVMTCkgKi8KKyAgY29uc3QgY2hhciAqc2NoZW1lOyAvKiBwcm90b2NvbCBzY2hlbWUgdXNlZCAqLwogICB2b2lkICpzZXNzaW9uaWQ7ICAvKiBhcyByZXR1cm5lZCBmcm9tIHRoZSBTU0wgbGF5ZXIgKi8KICAgc2l6ZV90IGlkc2l6ZTsgICAgLyogaWYga25vd24sIG90aGVyd2lzZSAwICovCiAgIGxvbmcgYWdlOyAgICAgICAgIC8qIGp1c3QgYSBudW1iZXIsIHRoZSBoaWdoZXIgdGhlIG1vcmUgcmVjZW50ICovCiAgIGludCByZW1vdGVfcG9ydDsgIC8qIHJlbW90ZSBwb3J0ICovCiAgIGludCBjb25uX3RvX3BvcnQ7IC8qIHJlbW90ZSBwb3J0IGZvciB0aGUgY29ubmVjdGlvbiAobWF5IGJlIC0xKSAqLwotICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHNzbF9jb25maWc7IC8qIHNldHVwIGZvciB0aGlzIHNlc3Npb24gKi8KKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyBzc2xfY29uZmlnOyAvKiBzZXR1cCBmb3IgdGhpcyBzZXNzaW9uICovCiB9OwogCiAvKiBTdHJ1Y3QgdXNlZCBmb3IgRGlnZXN0IGNoYWxsZW5nZS1yZXNwb25zZSBhdXRoZW50aWNhdGlvbiAqLwpAQCAtNDQ5LDcgKzQ2OCw3IEBACiAjZWxzZQogICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgIHVuc2lnbmVkIGNoYXIgbm9uY2VbOF07Ci0gIHZvaWQqIHRhcmdldF9pbmZvOyAvKiBUYXJnZXRJbmZvIHJlY2VpdmVkIGluIHRoZSBudGxtIHR5cGUtMiBtZXNzYWdlICovCisgIHZvaWQgKnRhcmdldF9pbmZvOyAvKiBUYXJnZXRJbmZvIHJlY2VpdmVkIGluIHRoZSBudGxtIHR5cGUtMiBtZXNzYWdlICovCiAgIHVuc2lnbmVkIGludCB0YXJnZXRfaW5mb19sZW47CiAjZW5kaWYKIH07CkBAIC00OTUsNiArNTE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3ZlcnJpZGVzIHRoZSBwb3J0IGluIHRoZSBVUkwgKHJlbW90ZSBwb3J0KSAqLwogICBib29sIHByb3h5OyAvKiBpZiBzZXQsIHRoaXMgdHJhbnNmZXIgaXMgZG9uZSB0aHJvdWdoIGEgcHJveHkgLSBhbnkgdHlwZSAqLwogICBib29sIGh0dHBwcm94eTsgICAgLyogaWYgc2V0LCB0aGlzIHRyYW5zZmVyIGlzIGRvbmUgdGhyb3VnaCBhIGh0dHAgcHJveHkgKi8KKyAgYm9vbCBzb2Nrc3Byb3h5OyAgIC8qIGlmIHNldCwgdGhpcyB0cmFuc2ZlciBpcyBkb25lIHRocm91Z2ggYSBzb2NrcyBwcm94eSAqLwogICBib29sIHVzZXJfcGFzc3dkOyAgICAvKiBkbyB3ZSB1c2UgdXNlcitwYXNzd29yZCBmb3IgdGhpcyBjb25uZWN0aW9uPyAqLwogICBib29sIHByb3h5X3VzZXJfcGFzc3dkOyAvKiB1c2VyK3Bhc3N3b3JkIGZvciB0aGUgcHJveHk/ICovCiAgIGJvb2wgaXB2Nl9pcDsgLyogd2UgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBzaXRlIHNwZWNpZmllZCB3aXRoIHB1cmUgSVB2NgpAQCAtNTI5LDYgKzU0OSw3IEBACiAgIGJvb2wgZnRwX3VzZV9lcHJ0OyAgLyogQXMgc2V0IHdpdGggQ1VSTE9QVF9GVFBfVVNFX0VQUlQsIGJ1dCBpZiB3ZSBmaW5kIG91dAogICAgICAgICAgICAgICAgICAgICAgICAgIEVQUlQgZG9lc24ndCB3b3JrIHdlIGRpc2FibGUgaXQgZm9yIHRoZSBmb3J0aGNvbWluZwogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICovCisgIGJvb2wgZnRwX3VzZV9kYXRhX3NzbDsgLyogRW5hYmxlZCBTU0wgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gKi8KICAgYm9vbCBuZXRyYzsgICAgICAgICAvKiBuYW1lK3Bhc3N3b3JkIHByb3ZpZGVkIGJ5IG5ldHJjICovCiAgIGJvb2wgdXNlcnB3ZF9pbl91cmw7IC8qIG5hbWUrcGFzc3dvcmQgZm91bmQgaW4gdXJsICovCiAgIGJvb2wgc3RyZWFtX3dhc19yZXdvdW5kOyAvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHdhcyByZXdvdW5kIGFmdGVyIGEKQEAgLTU0NSw2ICs1NjYsOSBAQAogICBib29sIHRjcF9mYXN0b3BlbjsgLyogdXNlIFRDUCBGYXN0IE9wZW4gKi8KICAgYm9vbCB0bHNfZW5hYmxlX25wbjsgIC8qIFRMUyBOUE4gZXh0ZW5zaW9uPyAqLwogICBib29sIHRsc19lbmFibGVfYWxwbjsgLyogVExTIEFMUE4gZXh0ZW5zaW9uPyAqLworICBib29sIHByb3h5X3NzbF9jb25uZWN0ZWRbMl07IC8qIFRSVUUgd2hlbiBTU0wgaW5pdGlhbGl6YXRpb24gZm9yIEhUVFBTIHByb3h5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29tcGxldGUgKi8KKyAgYm9vbCBzb2Nrc3Byb3h5X2Nvbm5lY3Rpbmc7IC8qIGNvbm5lY3RpbmcgdGhyb3VnaCBhIHNvY2tzIHByb3h5ICovCiB9OwogCiBzdHJ1Y3QgaG9zdG5hbWUgewpAQCAtNzMwLDcgKzc1NCw3IEBACiAgKi8KIAogc3RydWN0IEN1cmxfaGFuZGxlciB7Ci0gIGNvbnN0IGNoYXIgKiBzY2hlbWU7ICAgICAgICAvKiBVUkwgc2NoZW1lIG5hbWUuICovCisgIGNvbnN0IGNoYXIgKnNjaGVtZTsgICAgICAgIC8qIFVSTCBzY2hlbWUgbmFtZS4gKi8KIAogICAvKiBDb21wbGVtZW50IHRvIHNldHVwX2Nvbm5lY3Rpb25faW50ZXJuYWxzKCkuICovCiAgIENVUkxjb2RlICgqc2V0dXBfY29ubmVjdGlvbikoc3RydWN0IGNvbm5lY3RkYXRhICopOwpAQCAtODE3LDYgKzg0MSw3IEBACiAjZGVmaW5lIFBST1RPUFRfQ1JFRFNQRVJSRVFVRVNUICgxPDw3KSAvKiByZXF1aXJlcyBsb2dpbiBjcmVkZW50aWFscyBwZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgaW5zdGVhZCBvZiBwZXIgY29ubmVjdGlvbiAqLwogI2RlZmluZSBQUk9UT1BUX0FMUE5fTlBOICgxPDw4KSAvKiBzZXQgQUxQTiBhbmQvb3IgTlBOIGZvciB0aGlzICovCisjZGVmaW5lIFBST1RPUFRfU1RSRUFNICgxPDw5KSAvKiBhIHByb3RvY29sIHdpdGggaW5kaXZpZHVhbCBsb2dpY2FsIHN0cmVhbXMgKi8KIAogLyogcmV0dXJuIHRoZSBjb3VudCBvZiBieXRlcyBzZW50LCBvciAtMSBvbiBlcnJvciAqLwogdHlwZWRlZiBzc2l6ZV90IChDdXJsX3NlbmQpKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgLyogY29ubmVjdGlvbiBkYXRhICovCkBAIC04NDYsNiArODcxLDE0IEBACiB9OwogI2VuZGlmIC8qIFVTRV9SRUNWX0JFRk9SRV9TRU5EX1dPUktBUk9VTkQgKi8KIAorc3RydWN0IHByb3h5X2luZm8geworICBzdHJ1Y3QgaG9zdG5hbWUgaG9zdDsKKyAgbG9uZyBwb3J0OworICBjdXJsX3Byb3h5dHlwZSBwcm94eXR5cGU7IC8qIHdoYXQga2luZCBvZiBwcm94eSB0aGF0IGlzIGluIHVzZSAqLworICBjaGFyICp1c2VyOyAgICAvKiBwcm94eSB1c2VyIG5hbWUgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KKyAgY2hhciAqcGFzc3dkOyAgLyogcHJveHkgcGFzc3dvcmQgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KK307CisKIC8qCiAgKiBUaGUgY29ubmVjdGRhdGEgc3RydWN0IGNvbnRhaW5zIGFsbCBmaWVsZHMgYW5kIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBiZQogICogdW5pcXVlIGZvciBhbiBlbnRpcmUgY29ubmVjdGlvbi4KQEAgLTg5NSwxNCArOTI4LDIwIEBACiAgIGludCBzb2NrdHlwZTsgIC8qIFNPQ0tfU1RSRUFNIG9yIFNPQ0tfREdSQU0gKi8KIAogICBzdHJ1Y3QgaG9zdG5hbWUgaG9zdDsKKyAgY2hhciAqc2Vjb25kYXJ5aG9zdG5hbWU7IC8qIHNlY29uZGFyeSBzb2NrZXQgaG9zdCBuYW1lIChmdHApICovCiAgIHN0cnVjdCBob3N0bmFtZSBjb25uX3RvX2hvc3Q7IC8qIHRoZSBob3N0IHRvIGNvbm5lY3QgdG8uIHZhbGlkIG9ubHkgaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cy5jb25uX3RvX2hvc3QgaXMgc2V0ICovCiAgIHN0cnVjdCBob3N0bmFtZSBwcm94eTsKIAorICBzdHJ1Y3QgcHJveHlfaW5mbyBzb2Nrc19wcm94eTsKKyAgc3RydWN0IHByb3h5X2luZm8gaHR0cF9wcm94eTsKKwogICBsb25nIHBvcnQ7ICAgICAgIC8qIHdoaWNoIHBvcnQgdG8gdXNlIGxvY2FsbHkgKi8KICAgaW50IHJlbW90ZV9wb3J0OyAvKiB0aGUgcmVtb3RlIHBvcnQsIG5vdCB0aGUgcHJveHkgcG9ydCEgKi8KICAgaW50IGNvbm5fdG9fcG9ydDsgLyogdGhlIHJlbW90ZSBwb3J0IHRvIGNvbm5lY3QgdG8uIHZhbGlkIG9ubHkgaWYKICAgICAgICAgICAgICAgICAgICAgICAgYml0cy5jb25uX3RvX3BvcnQgaXMgc2V0ICovCisgIHVuc2lnbmVkIHNob3J0IHNlY29uZGFyeV9wb3J0OyAvKiBzZWNvbmRhcnkgc29ja2V0IHJlbW90ZSBwb3J0IHRvIGNvbm5lY3QgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdHApICovCiAKICAgLyogJ3ByaW1hcnlfaXAnIGFuZCAncHJpbWFyeV9wb3J0JyBnZXQgZmlsbGVkIHdpdGggcGVlcidzIG51bWVyaWNhbAogICAgICBpcCBhZGRyZXNzIGFuZCBwb3J0IG51bWJlciB3aGVuZXZlciBhbiBvdXRnb2luZyBjb25uZWN0aW9uIGlzCkBAIC05MjcsMTAgKzk2Niw2IEBACiAKICAgY2hhciAqb2F1dGhfYmVhcmVyOyAvKiBiZWFyZXIgdG9rZW4gZm9yIE9BdXRoIDIuMCwgYWxsb2NhdGVkICovCiAKLSAgY2hhciAqcHJveHl1c2VyOyAgICAvKiBwcm94eSB1c2VyIG5hbWUgc3RyaW5nLCBhbGxvY2F0ZWQgKi8KLSAgY2hhciAqcHJveHlwYXNzd2Q7ICAvKiBwcm94eSBwYXNzd29yZCBzdHJpbmcsIGFsbG9jYXRlZCAqLwotICBjdXJsX3Byb3h5dHlwZSBwcm94eXR5cGU7IC8qIHdoYXQga2luZCBvZiBwcm94eSB0aGF0IGlzIGluIHVzZSAqLwotCiAgIGludCBodHRwdmVyc2lvbjsgICAgICAgIC8qIHRoZSBIVFRQIHZlcnNpb24qMTAgcmVwb3J0ZWQgYnkgdGhlIHNlcnZlciAqLwogICBpbnQgcnRzcHZlcnNpb247ICAgICAgICAvKiB0aGUgUlRTUCB2ZXJzaW9uKjEwIHJlcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgKi8KIApAQCAtOTQ4LDcgKzk4Myw5IEBACiAgIHN0cnVjdCBwb3N0cG9uZWRfZGF0YSBwb3N0cG9uZWRbMl07IC8qIHR3byBidWZmZXJzIGZvciB0d28gc29ja2V0cyAqLwogI2VuZGlmIC8qIFVTRV9SRUNWX0JFRk9SRV9TRU5EX1dPUktBUk9VTkQgKi8KICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgc3NsWzJdOyAvKiB0aGlzIGlzIGZvciBzc2wtc3R1ZmYgKi8KLSAgc3RydWN0IHNzbF9jb25maWdfZGF0YSBzc2xfY29uZmlnOworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSBwcm94eV9zc2xbMl07IC8qIHRoaXMgaXMgZm9yIHByb3h5IHNzbC1zdHVmZiAqLworICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnIHNzbF9jb25maWc7CisgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgcHJveHlfc3NsX2NvbmZpZzsKICAgYm9vbCB0bHNfdXBncmFkZWQ7CiAKICAgc3RydWN0IENvbm5lY3RCaXRzIGJpdHM7ICAgIC8qIHZhcmlvdXMgc3RhdGUtZmxhZ3MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwpAQCAtOTU5LDggKzk5Niw4IEBACiAgIHN0cnVjdCB0aW1ldmFsIGNvbm5lY3R0aW1lOwogICAvKiBUaGUgdHdvIGZpZWxkcyBiZWxvdyBnZXQgc2V0IGluIEN1cmxfY29ubmVjdGhvc3QgKi8KICAgaW50IG51bV9hZGRyOyAvKiBudW1iZXIgb2YgYWRkcmVzc2VzIHRvIHRyeSB0byBjb25uZWN0IHRvICovCi0gIGxvbmcgdGltZW91dG1zX3Blcl9hZGRyOyAvKiBob3cgbG9uZyB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzcGVuZCBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gZWFjaCBJUCBhZGRyZXNzICovCisgIHRpbWVfdCB0aW1lb3V0bXNfcGVyX2FkZHI7IC8qIGhvdyBsb25nIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNwZW5kIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeWluZyB0byBjb25uZWN0IHRvIGVhY2ggSVAgYWRkcmVzcyAqLwogCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmhhbmRsZXI7IC8qIENvbm5lY3Rpb24ncyBwcm90b2NvbCBoYW5kbGVyICovCiAgIGNvbnN0IHN0cnVjdCBDdXJsX2hhbmRsZXIgKmdpdmVuOyAgIC8qIFRoZSBwcm90b2NvbCBmaXJzdCBnaXZlbiAqLwpAQCAtMTAxNyw3ICsxMDU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBvbiB0aGlzIHBpcGVsaW5lICovCiAgIHN0cnVjdCBjdXJsX2xsaXN0ICpyZWN2X3BpcGU7IC8qIExpc3Qgb2YgaGFuZGxlcyB3YWl0aW5nIHRvIHJlYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgcmVzcG9uc2VzIG9uIHRoaXMgcGlwZWxpbmUgKi8KLSAgY2hhciogbWFzdGVyX2J1ZmZlcjsgLyogVGhlIG1hc3RlciBidWZmZXIgYWxsb2NhdGVkIG9uLWRlbWFuZDsKKyAgY2hhciAqbWFzdGVyX2J1ZmZlcjsgLyogVGhlIG1hc3RlciBidWZmZXIgYWxsb2NhdGVkIG9uLWRlbWFuZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgcGlwZWxpbmluZy4gKi8KICAgc2l6ZV90IHJlYWRfcG9zOyAvKiBDdXJyZW50IHJlYWQgcG9zaXRpb24gaW4gdGhlIG1hc3RlciBidWZmZXIgKi8KICAgc2l6ZV90IGJ1Zl9sZW47IC8qIExlbmd0aCBvZiB0aGUgYnVmZmVyPz8gKi8KQEAgLTEwMzgsOCArMTA3NSw4IEBACiAgIC8qIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBTYW1iYSdzIHdpbmJpbmQgZGFlbW9uIGhlbHBlciBudGxtX2F1dGggKi8KICAgY3VybF9zb2NrZXRfdCBudGxtX2F1dGhfaGxwcl9zb2NrZXQ7CiAgIHBpZF90IG50bG1fYXV0aF9obHByX3BpZDsKLSAgY2hhciogY2hhbGxlbmdlX2hlYWRlcjsKLSAgY2hhciogcmVzcG9uc2VfaGVhZGVyOworICBjaGFyICpjaGFsbGVuZ2VfaGVhZGVyOworICBjaGFyICpyZXNwb25zZV9oZWFkZXI7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xMDc1LDkgKzExMTIsNiBAQAogICBpbnQgc29ja3M1X2dzc2FwaV9lbmN0eXBlOwogI2VuZGlmCiAKLSAgYm9vbCB2ZXJpZnlwZWVyOwotICBib29sIHZlcmlmeWhvc3Q7Ci0KICAgLyogV2hlbiB0aGlzIGNvbm5lY3Rpb24gaXMgY3JlYXRlZCwgc3RvcmUgdGhlIGNvbmRpdGlvbnMgZm9yIHRoZSBsb2NhbCBlbmQKICAgICAgYmluZC4gVGhpcyBpcyBzdG9yZWQgYmVmb3JlIHRoZSBhY3R1YWwgYmluZCBhbmQgYmVmb3JlIGFueSBjb25uZWN0aW9uIGlzCiAgICAgIG1hZGUgYW5kIHdpbGwgc2VydmUgdGhlIHB1cnBvc2Ugb2YgYmVpbmcgdXNlZCBmb3IgY29tcGFyaXNvbiByZWFzb25zIHNvCkBAIC0xMDk2LDE1ICsxMTMwLDIwIEBACiAgIHN0cnVjdCBjb25uZWN0YnVuZGxlICpidW5kbGU7IC8qIFRoZSBidW5kbGUgd2UgYXJlIG1lbWJlciBvZiAqLwogCiAgIGludCBuZWducG47IC8qIEFQTE4gb3IgTlBOIFRMUyBuZWdvdGlhdGVkIHByb3RvY29sLCBDVVJMX0hUVFBfVkVSU0lPTiogKi8KKworI2lmZGVmIFVTRV9VTklYX1NPQ0tFVFMKKyAgY2hhciAqdW5peF9kb21haW5fc29ja2V0OworI2VuZGlmCiB9OwogCiAvKiBUaGUgZW5kIG9mIGNvbm5lY3RkYXRhLiAqLwogCiAvKgogICogU3RydWN0IHRvIGtlZXAgc3RhdGlzdGljYWwgYW5kIGluZm9ybWF0aW9uYWwgZGF0YS4KKyAqIEFsbCB2YXJpYWJsZXMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBiZSBpbml0aWFsaXplZC9yZXNldCBpbiBDdXJsX2luaXRpbmZvKCkuCiAgKi8KIHN0cnVjdCBQdXJlSW5mbyB7Ci0gIGludCBodHRwY29kZTsgIC8qIFJlY2VudCBIVFRQLCBGVFAsIG9yIFJUU1AgcmVzcG9uc2UgY29kZSAqLworICBpbnQgaHR0cGNvZGU7ICAvKiBSZWNlbnQgSFRUUCwgRlRQLCBSVFNQIG9yIFNNVFAgcmVzcG9uc2UgY29kZSAqLwogICBpbnQgaHR0cHByb3h5Y29kZTsgLyogcmVzcG9uc2UgY29kZSBmcm9tIHByb3h5IHdoZW4gcmVjZWl2ZWQgc2VwYXJhdGUgKi8KICAgaW50IGh0dHB2ZXJzaW9uOyAvKiB0aGUgaHR0cCB2ZXJzaW9uIG51bWJlciBYLlkgPSBYKjEwK1kgKi8KICAgbG9uZyBmaWxldGltZTsgLyogSWYgcmVxdWVzdGVkLCB0aGlzIGlzIG1pZ2h0IGdldCBzZXQuIFNldCB0byAtMSBpZiB0aGUgdGltZQpAQCAtMTEzNSw2ICsxMTc0LDkgQEAKICAgY2hhciBjb25uX2xvY2FsX2lwW01BWF9JUEFEUl9MRU5dOwogICBsb25nIGNvbm5fbG9jYWxfcG9ydDsKIAorICBjb25zdCBjaGFyICpjb25uX3NjaGVtZTsKKyAgdW5zaWduZWQgaW50IGNvbm5fcHJvdG9jb2w7CisKICAgc3RydWN0IGN1cmxfY2VydGluZm8gY2VydHM7IC8qIGluZm8gYWJvdXQgdGhlIGNlcnRzLCBvbmx5IHBvcHVsYXRlZCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBidWlsZHMuIEFza2VkIGZvciB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMT1BUX0NFUlRJTkZPIC8gQ1VSTElORk9fQ0VSVElORk8gKi8KQEAgLTExNDIsOCArMTE4NCw4IEBACiAKIAogc3RydWN0IFByb2dyZXNzIHsKLSAgbG9uZyBsYXN0c2hvdzsgLyogdGltZSgpIG9mIHRoZSBsYXN0IGRpc3BsYXllZCBwcm9ncmVzcyBtZXRlciBvciBOVUxMIHRvCi0gICAgICAgICAgICAgICAgICAgIGZvcmNlIHJlZHJhdyBhdCBuZXh0IGNhbGwgKi8KKyAgdGltZV90IGxhc3RzaG93OyAvKiB0aW1lKCkgb2YgdGhlIGxhc3QgZGlzcGxheWVkIHByb2dyZXNzIG1ldGVyIG9yIE5VTEwgdG8KKyAgICAgICAgICAgICAgICAgICAgICBmb3JjZSByZWRyYXcgYXQgbmV4dCBjYWxsICovCiAgIGN1cmxfb2ZmX3Qgc2l6ZV9kbDsgLyogdG90YWwgZXhwZWN0ZWQgc2l6ZSAqLwogICBjdXJsX29mZl90IHNpemVfdWw7IC8qIHRvdGFsIGV4cGVjdGVkIHNpemUgKi8KICAgY3VybF9vZmZfdCBkb3dubG9hZGVkOyAvKiB0cmFuc2ZlcnJlZCBzbyBmYXIgKi8KQEAgLTExNzEsNiArMTIxMywxNCBAQAogICBzdHJ1Y3QgdGltZXZhbCB0X3N0YXJ0c2luZ2xlOwogICBzdHJ1Y3QgdGltZXZhbCB0X3N0YXJ0b3A7CiAgIHN0cnVjdCB0aW1ldmFsIHRfYWNjZXB0ZGF0YTsKKworICAvKiB1cGxvYWQgc3BlZWQgbGltaXQgKi8KKyAgc3RydWN0IHRpbWV2YWwgdWxfbGltaXRfc3RhcnQ7CisgIGN1cmxfb2ZmX3QgdWxfbGltaXRfc2l6ZTsKKyAgLyogZG93bmxvYWQgc3BlZWQgbGltaXQgKi8KKyAgc3RydWN0IHRpbWV2YWwgZGxfbGltaXRfc3RhcnQ7CisgIGN1cmxfb2ZmX3QgZGxfbGltaXRfc2l6ZTsKKwogI2RlZmluZSBDVVJSX1RJTUUgKDUrMSkgLyogNiBlbnRyaWVzIGZvciA1IHNlY29uZHMgKi8KIAogICBjdXJsX29mZl90IHNwZWVkZXJbIENVUlJfVElNRSBdOwpAQCAtMTM5MCw4ICsxNDQwLDEwIEBACiBzdHJ1Y3QgQ3VybF9tdWx0aTsgICAgLyogZGVjbGFyZWQgYW5kIHVzZWQgb25seSBpbiBtdWx0aS5jICovCiAKIGVudW0gZHVwc3RyaW5nIHsKLSAgU1RSSU5HX0NFUlQsICAgICAgICAgICAgLyogY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgbmFtZSAqLwotICBTVFJJTkdfQ0VSVF9UWVBFLCAgICAgICAvKiBmb3JtYXQgZm9yIGNlcnRpZmljYXRlIChkZWZhdWx0OiBQRU0pKi8KKyAgU1RSSU5HX0NFUlRfT1JJRywgICAgICAgLyogY2xpZW50IGNlcnRpZmljYXRlIGZpbGUgbmFtZSAqLworICBTVFJJTkdfQ0VSVF9QUk9YWSwgICAgICAvKiBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBuYW1lICovCisgIFNUUklOR19DRVJUX1RZUEVfT1JJRywgIC8qIGZvcm1hdCBmb3IgY2VydGlmaWNhdGUgKGRlZmF1bHQ6IFBFTSkqLworICBTVFJJTkdfQ0VSVF9UWVBFX1BST1hZLCAvKiBmb3JtYXQgZm9yIGNlcnRpZmljYXRlIChkZWZhdWx0OiBQRU0pKi8KICAgU1RSSU5HX0NPT0tJRSwgICAgICAgICAgLyogSFRUUCBjb29raWUgc3RyaW5nIHRvIHNlbmQgKi8KICAgU1RSSU5HX0NPT0tJRUpBUiwgICAgICAgLyogZHVtcCBhbGwgY29va2llcyB0byB0aGlzIGZpbGUgKi8KICAgU1RSSU5HX0NVU1RPTVJFUVVFU1QsICAgLyogSFRUUC9GVFAvUlRTUCByZXF1ZXN0L21ldGhvZCB0byB1c2UgKi8KQEAgLTE0MDEsMjUgKzE0NTMsMzQgQEAKICAgU1RSSU5HX0ZUUF9BQ0NPVU5ULCAgICAgLyogZnRwIGFjY291bnQgZGF0YSAqLwogICBTVFJJTkdfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVIsIC8qIGNvbW1hbmQgdG8gc2VuZCBpZiBVU0VSL1BBU1MgZmFpbHMgKi8KICAgU1RSSU5HX0ZUUFBPUlQsICAgICAgICAgLyogcG9ydCB0byBzZW5kIHdpdGggdGhlIEZUUCBQT1JUIGNvbW1hbmQgKi8KLSAgU1RSSU5HX0tFWSwgICAgICAgICAgICAgLyogcHJpdmF0ZSBrZXkgZmlsZSBuYW1lICovCi0gIFNUUklOR19LRVlfUEFTU1dELCAgICAgIC8qIHBsYWluIHRleHQgcHJpdmF0ZSBrZXkgcGFzc3dvcmQgKi8KLSAgU1RSSU5HX0tFWV9UWVBFLCAgICAgICAgLyogZm9ybWF0IGZvciBwcml2YXRlIGtleSAoZGVmYXVsdDogUEVNKSAqLworICBTVFJJTkdfS0VZX09SSUcsICAgICAgICAvKiBwcml2YXRlIGtleSBmaWxlIG5hbWUgKi8KKyAgU1RSSU5HX0tFWV9QUk9YWSwgICAgICAgLyogcHJpdmF0ZSBrZXkgZmlsZSBuYW1lICovCisgIFNUUklOR19LRVlfUEFTU1dEX09SSUcsIC8qIHBsYWluIHRleHQgcHJpdmF0ZSBrZXkgcGFzc3dvcmQgKi8KKyAgU1RSSU5HX0tFWV9QQVNTV0RfUFJPWFksIC8qIHBsYWluIHRleHQgcHJpdmF0ZSBrZXkgcGFzc3dvcmQgKi8KKyAgU1RSSU5HX0tFWV9UWVBFX09SSUcsICAgLyogZm9ybWF0IGZvciBwcml2YXRlIGtleSAoZGVmYXVsdDogUEVNKSAqLworICBTVFJJTkdfS0VZX1RZUEVfUFJPWFksICAvKiBmb3JtYXQgZm9yIHByaXZhdGUga2V5IChkZWZhdWx0OiBQRU0pICovCiAgIFNUUklOR19LUkJfTEVWRUwsICAgICAgIC8qIGtyYiBzZWN1cml0eSBsZXZlbCAqLwogICBTVFJJTkdfTkVUUkNfRklMRSwgICAgICAvKiBpZiBub3QgTlVMTCwgdXNlIHRoaXMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZmluZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSE9NRS8ubmV0cmMgKi8KICAgU1RSSU5HX1BST1hZLCAgICAgICAgICAgLyogcHJveHkgdG8gdXNlICovCisgIFNUUklOR19TT0NLU19QUk9YWSwgICAgIC8qIHNvY2tzIHByb3h5IHRvIHVzZSAqLwogICBTVFJJTkdfU0VUX1JBTkdFLCAgICAgICAvKiByYW5nZSwgaWYgdXNlZCAqLwogICBTVFJJTkdfU0VUX1JFRkVSRVIsICAgICAvKiBjdXN0b20gc3RyaW5nIGZvciB0aGUgSFRUUCByZWZlcmVyIGZpZWxkICovCiAgIFNUUklOR19TRVRfVVJMLCAgICAgICAgIC8qIHdoYXQgb3JpZ2luYWwgVVJMIHRvIHdvcmsgb24gKi8KLSAgU1RSSU5HX1NTTF9DQVBBVEgsICAgICAgLyogQ0EgZGlyZWN0b3J5IG5hbWUgKGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzKSAqLwotICBTVFJJTkdfU1NMX0NBRklMRSwgICAgICAvKiBjZXJ0aWZpY2F0ZSBmaWxlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKi8KKyAgU1RSSU5HX1NTTF9DQVBBVEhfT1JJRywgLyogQ0EgZGlyZWN0b3J5IG5hbWUgKGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzKSAqLworICBTVFJJTkdfU1NMX0NBUEFUSF9QUk9YWSwgLyogQ0EgZGlyZWN0b3J5IG5hbWUgKGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzKSAqLworICBTVFJJTkdfU1NMX0NBRklMRV9PUklHLCAvKiBjZXJ0aWZpY2F0ZSBmaWxlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKi8KKyAgU1RSSU5HX1NTTF9DQUZJTEVfUFJPWFksIC8qIGNlcnRpZmljYXRlIGZpbGUgdG8gdmVyaWZ5IHBlZXIgYWdhaW5zdCAqLwogICBTVFJJTkdfU1NMX1BJTk5FRFBVQkxJQ0tFWSwgLyogcHVibGljIGtleSBmaWxlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgKi8KLSAgU1RSSU5HX1NTTF9DSVBIRVJfTElTVCwgLyogbGlzdCBvZiBjaXBoZXJzIHRvIHVzZSAqLworICBTVFJJTkdfU1NMX0NJUEhFUl9MSVNUX09SSUcsIC8qIGxpc3Qgb2YgY2lwaGVycyB0byB1c2UgKi8KKyAgU1RSSU5HX1NTTF9DSVBIRVJfTElTVF9QUk9YWSwgLyogbGlzdCBvZiBjaXBoZXJzIHRvIHVzZSAqLwogICBTVFJJTkdfU1NMX0VHRFNPQ0tFVCwgICAvKiBwYXRoIHRvIGZpbGUgY29udGFpbmluZyB0aGUgRUdEIGRhZW1vbiBzb2NrZXQgKi8KICAgU1RSSU5HX1NTTF9SQU5ET01fRklMRSwgLyogcGF0aCB0byBmaWxlIGNvbnRhaW5pbmcgInJhbmRvbSIgZGF0YSAqLwogICBTVFJJTkdfVVNFUkFHRU5ULCAgICAgICAvKiBVc2VyLUFnZW50IHN0cmluZyAqLwotICBTVFJJTkdfU1NMX0NSTEZJTEUsICAgICAvKiBjcmwgZmlsZSB0byBjaGVjayBjZXJ0aWZpY2F0ZSAqLwotICBTVFJJTkdfU1NMX0lTU1VFUkNFUlQsICAvKiBpc3N1ZXIgY2VydCBmaWxlIHRvIGNoZWNrIGNlcnRpZmljYXRlICovCisgIFNUUklOR19TU0xfQ1JMRklMRV9PUklHLCAvKiBjcmwgZmlsZSB0byBjaGVjayBjZXJ0aWZpY2F0ZSAqLworICBTVFJJTkdfU1NMX0NSTEZJTEVfUFJPWFksIC8qIGNybCBmaWxlIHRvIGNoZWNrIGNlcnRpZmljYXRlICovCisgIFNUUklOR19TU0xfSVNTVUVSQ0VSVF9PUklHLCAvKiBpc3N1ZXIgY2VydCBmaWxlIHRvIGNoZWNrIGNlcnRpZmljYXRlICovCisgIFNUUklOR19TU0xfSVNTVUVSQ0VSVF9QUk9YWSwgLyogaXNzdWVyIGNlcnQgZmlsZSB0byBjaGVjayBjZXJ0aWZpY2F0ZSAqLwogICBTVFJJTkdfVVNFUk5BTUUsICAgICAgICAvKiA8dXNlcm5hbWU+LCBpZiB1c2VkICovCiAgIFNUUklOR19QQVNTV09SRCwgICAgICAgIC8qIDxwYXNzd29yZD4sIGlmIHVzZWQgKi8KICAgU1RSSU5HX09QVElPTlMsICAgICAgICAgLyogPG9wdGlvbnM+LCBpZiB1c2VkICovCkBAIC0xNDQ3LDggKzE1MDgsMTAgQEAKICAgU1RSSU5HX01BSUxfQVVUSCwKIAogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIFNUUklOR19UTFNBVVRIX1VTRVJOQU1FLCAgICAgIC8qIFRMUyBhdXRoIDx1c2VybmFtZT4gKi8KLSAgU1RSSU5HX1RMU0FVVEhfUEFTU1dPUkQsICAgICAgLyogVExTIGF1dGggPHBhc3N3b3JkPiAqLworICBTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV9PUklHLCAgLyogVExTIGF1dGggPHVzZXJuYW1lPiAqLworICBTVFJJTkdfVExTQVVUSF9VU0VSTkFNRV9QUk9YWSwgLyogVExTIGF1dGggPHVzZXJuYW1lPiAqLworICBTVFJJTkdfVExTQVVUSF9QQVNTV09SRF9PUklHLCAgLyogVExTIGF1dGggPHBhc3N3b3JkPiAqLworICBTVFJJTkdfVExTQVVUSF9QQVNTV09SRF9QUk9YWSwgLyogVExTIGF1dGggPHBhc3N3b3JkPiAqLwogI2VuZGlmCiAgIFNUUklOR19CRUFSRVIsICAgICAgICAgICAgICAgIC8qIDxiZWFyZXI+LCBpZiB1c2VkICovCiAjaWZkZWYgVVNFX1VOSVhfU09DS0VUUwpAQCAtMTUxMiwxMCArMTU3NSwxMCBAQAogICBjdXJsX29wZW5zb2NrZXRfY2FsbGJhY2sgZm9wZW5zb2NrZXQ7IC8qIGZ1bmN0aW9uIGZvciBjaGVja2luZy90cmFuc2xhdGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZGRyZXNzIGFuZCBvcGVuaW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldCAqLwotICB2b2lkKiBvcGVuc29ja2V0X2NsaWVudDsKKyAgdm9pZCAqb3BlbnNvY2tldF9jbGllbnQ7CiAgIGN1cmxfY2xvc2Vzb2NrZXRfY2FsbGJhY2sgZmNsb3Nlc29ja2V0OyAvKiBmdW5jdGlvbiBmb3IgY2xvc2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldCAqLwotICB2b2lkKiBjbG9zZXNvY2tldF9jbGllbnQ7CisgIHZvaWQgKmNsb3Nlc29ja2V0X2NsaWVudDsKIAogICB2b2lkICpzZWVrX2NsaWVudDsgICAgLyogcG9pbnRlciB0byBwYXNzIHRvIHRoZSBzZWVrIGNhbGxiYWNrICovCiAgIC8qIHRoZSAzIGN1cmxfY29udl9jYWxsYmFjayBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgb24gbm9uLUFTQ0lJIGhvc3RzICovCkBAIC0xNTY2LDcgKzE2MjksMTAgQEAKICAgbG9uZyBodHRwdmVyc2lvbjsgLyogd2hlbiBub24temVybywgYSBzcGVjaWZpYyBIVFRQIHZlcnNpb24gcmVxdWVzdGVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgaW4gdGhlIGxpYnJhcnkncyByZXF1ZXN0KHMpICovCiAgIHN0cnVjdCBzc2xfY29uZmlnX2RhdGEgc3NsOyAgLyogdXNlciBkZWZpbmVkIFNTTCBzdHVmZiAqLworICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhIHByb3h5X3NzbDsgIC8qIHVzZXIgZGVmaW5lZCBTU0wgc3R1ZmYgZm9yIHByb3h5ICovCisgIHN0cnVjdCBzc2xfZ2VuZXJhbF9jb25maWcgZ2VuZXJhbF9zc2w7IC8qIGdlbmVyYWwgdXNlciBkZWZpbmVkIFNTTCBzdHVmZiAqLwogICBjdXJsX3Byb3h5dHlwZSBwcm94eXR5cGU7IC8qIHdoYXQga2luZCBvZiBwcm94eSB0aGF0IGlzIGluIHVzZSAqLworICBjdXJsX3Byb3h5dHlwZSBzb2Nrc19wcm94eXR5cGU7IC8qIHdoYXQga2luZCBvZiBzb2NrcyBwcm94eSB0aGF0IGlzIGluIHVzZSAqLwogICBsb25nIGRuc19jYWNoZV90aW1lb3V0OyAvKiBETlMgY2FjaGUgdGltZW91dCAqLwogICBsb25nIGJ1ZmZlcl9zaXplOyAgICAgIC8qIHNpemUgb2YgcmVjZWl2ZSBidWZmZXIgdG8gdXNlICovCiAgIHZvaWQgKnByaXZhdGVfZGF0YTsgLyogYXBwbGljYXRpb24tcHJpdmF0ZSBkYXRhICovCkBAIC0xNjAwLDYgKzE2NjYsNyBAQAogICBib29sIGZ0cF91c2VfcG9ydDsgICAgIC8qIHVzZSB0aGUgRlRQIFBPUlQgY29tbWFuZCAqLwogICBib29sIGhpZGVfcHJvZ3Jlc3M7ICAgIC8qIGRvbid0IHVzZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgKi8KICAgYm9vbCBodHRwX2ZhaWxfb25fZXJyb3I7ICAvKiBmYWlsIG9uIEhUVFAgZXJyb3IgY29kZXMgPj0gNDAwICovCisgIGJvb2wgaHR0cF9rZWVwX3NlbmRpbmdfb25fZXJyb3I7IC8qIGZvciBIVFRQIHN0YXR1cyBjb2RlcyA+PSAzMDAgKi8KICAgYm9vbCBodHRwX2ZvbGxvd19sb2NhdGlvbjsgLyogZm9sbG93IEhUVFAgcmVkaXJlY3RzICovCiAgIGJvb2wgaHR0cF90cmFuc2Zlcl9lbmNvZGluZzsgLyogcmVxdWVzdCBjb21wcmVzc2VkIEhUVFAgdHJhbnNmZXItZW5jb2RpbmcgKi8KICAgYm9vbCBodHRwX2Rpc2FibGVfaG9zdG5hbWVfY2hlY2tfYmVmb3JlX2F1dGhlbnRpY2F0aW9uOwpAQCAtMTYyOSw5ICsxNjk2LDYgQEAKICAgYm9vbCBmdHBfc2tpcF9pcDsgICAgICAvKiBza2lwIHRoZSBJUCBhZGRyZXNzIHRoZSBGVFAgc2VydmVyIHBhc3NlcyBvbiB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzICovCiAgIGJvb2wgY29ubmVjdF9vbmx5OyAgICAgLyogbWFrZSBjb25uZWN0aW9uLCBsZXQgYXBwbGljYXRpb24gdXNlIHRoZSBzb2NrZXQgKi8KLSAgYm9vbCBzc2xfZW5hYmxlX2JlYXN0OyAvKiBlc3BlY2lhbGx5IGFsbG93IHRoaXMgZmxhdyBmb3IgaW50ZXJvcGVyYWJpbGl0eSdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FrZSovCi0gIGJvb2wgc3NsX25vX3Jldm9rZTsgICAgLyogZGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBjaGVja3MgKi8KICAgbG9uZyBzc2hfYXV0aF90eXBlczsgICAvKiBhbGxvd2VkIFNTSCBhdXRoIHR5cGVzICovCiAgIGJvb2wgaHR0cF90ZV9za2lwOyAgICAgLyogcGFzcyB0aGUgcmF3IGJvZHkgZGF0YSB0byB0aGUgdXNlciwgZXZlbiB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXItZW5jb2RlZCAoY2h1bmtlZCwgY29tcHJlc3NlZCkgKi8KZGlmZiAtLWdpdCBhL2xpYi92YXV0aC9jbGVhcnRleHQuYyBiL2xpYi92YXV0aC9jbGVhcnRleHQuYwppbmRleCA0ZTkwNmJjLi5hNzYxYWU3IDEwMDY0NAotLS0gYS9saWIvdmF1dGgvY2xlYXJ0ZXh0LmMKKysrIGIvbGliL3ZhdXRoL2NsZWFydGV4dC5jCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiY3VybF9tZDUuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgInN0cnRvay5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCiAjaW5jbHVkZSAic2VuZGYuaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogCkBAIC02OCwxNiArNjYsMjcgQEAKICAgY2hhciAqcGxhaW5hdXRoOwogICBzaXplX3QgdWxlbjsKICAgc2l6ZV90IHBsZW47CisgIHNpemVfdCBwbGFpbmxlbjsKIAorICAqb3V0bGVuID0gMDsKKyAgKm91dHB0ciA9IE5VTEw7CiAgIHVsZW4gPSBzdHJsZW4odXNlcnApOwogICBwbGVuID0gc3RybGVuKHBhc3N3ZHApOwogCi0gIHBsYWluYXV0aCA9IG1hbGxvYygyICogdWxlbiArIHBsZW4gKyAyKTsKLSAgaWYoIXBsYWluYXV0aCkgewotICAgICpvdXRsZW4gPSAwOwotICAgICpvdXRwdHIgPSBOVUxMOworICAvKiBDb21wdXRlIGJpbmFyeSBtZXNzYWdlIGxlbmd0aCwgY2hlY2tpbmcgZm9yIG92ZXJmbG93cy4gKi8KKyAgcGxhaW5sZW4gPSAyICogdWxlbjsKKyAgaWYocGxhaW5sZW4gPCB1bGVuKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwotICB9CisgIHBsYWlubGVuICs9IHBsZW47CisgIGlmKHBsYWlubGVuIDwgcGxlbikKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKKyAgcGxhaW5sZW4gKz0gMjsKKyAgaWYocGxhaW5sZW4gPCAyKQorICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOworCisgIHBsYWluYXV0aCA9IG1hbGxvYyhwbGFpbmxlbik7CisgIGlmKCFwbGFpbmF1dGgpCisgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogQ2FsY3VsYXRlIHRoZSByZXBseSAqLwogICBtZW1jcHkocGxhaW5hdXRoLCB1c2VycCwgdWxlbik7CkBAIC04Nyw4ICs5Niw3IEBACiAgIG1lbWNweShwbGFpbmF1dGggKyAyICogdWxlbiArIDIsIHBhc3N3ZHAsIHBsZW4pOwogCiAgIC8qIEJhc2U2NCBlbmNvZGUgdGhlIHJlcGx5ICovCi0gIHJlc3VsdCA9IEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCBwbGFpbmF1dGgsIDIgKiB1bGVuICsgcGxlbiArIDIsIG91dHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxlbik7CisgIHJlc3VsdCA9IEN1cmxfYmFzZTY0X2VuY29kZShkYXRhLCBwbGFpbmF1dGgsIHBsYWlubGVuLCBvdXRwdHIsIG91dGxlbik7CiAgIGZyZWUocGxhaW5hdXRoKTsKIAogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbGliL3ZhdXRoL2RpZ2VzdC5jIGIvbGliL3ZhdXRoL2RpZ2VzdC5jCmluZGV4IDI2ZWE3YjUuLjdkOTIwMGEgMTAwNjQ0Ci0tLSBhL2xpYi92YXV0aC9kaWdlc3QuYworKysgYi9saWIvdmF1dGgvZGlnZXN0LmMKQEAgLTM3LDkgKzM3LDEwIEBACiAjaW5jbHVkZSAidnRscy92dGxzLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJzdHJ0b2suaCIKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAibm9uLWFzY2lpLmgiIC8qIGluY2x1ZGVkIGZvciBDdXJsX2NvbnZlcnRfLi4uIHByb3RvdHlwZXMgKi8KICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgorI2luY2x1ZGUgInJhbmQuaCIKIAogLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZXMgc2hvdWxkIGJlOiAqLwogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC01OSw3ICs2MCw3IEBACiAgICB3aGF0IHVsdGltYXRlbHkgZ29lcyBvdmVyIHRoZSBuZXR3b3JrLgogKi8KICNkZWZpbmUgQ1VSTF9PVVRQVVRfRElHRVNUX0NPTlYoYSwgYikgXAotICByZXN1bHQgPSBDdXJsX2NvbnZlcnRfdG9fbmV0d29yayhhLCAoY2hhciAqKWIsIHN0cmxlbigoY29uc3QgY2hhciopYikpOyBcCisgIHJlc3VsdCA9IEN1cmxfY29udmVydF90b19uZXR3b3JrKGEsIChjaGFyICopYiwgc3RybGVuKChjb25zdCBjaGFyICopYikpOyBcCiAgIGlmKHJlc3VsdCkgeyBcCiAgICAgZnJlZShiKTsgXAogICAgIHJldHVybiByZXN1bHQ7IFwKQEAgLTIxNywxMSArMjE4LDExIEBACiAKICAgdG9rZW4gPSBzdHJ0b2tfcih0bXAsICIsIiwgJnRva19idWYpOwogICB3aGlsZSh0b2tlbiAhPSBOVUxMKSB7Ci0gICAgaWYoQ3VybF9yYXdfZXF1YWwodG9rZW4sIERJR0VTVF9RT1BfVkFMVUVfU1RSSU5HX0FVVEgpKQorICAgIGlmKHN0cmNhc2Vjb21wYXJlKHRva2VuLCBESUdFU1RfUU9QX1ZBTFVFX1NUUklOR19BVVRIKSkKICAgICAgICp2YWx1ZSB8PSBESUdFU1RfUU9QX1ZBTFVFX0FVVEg7Ci0gICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCh0b2tlbiwgRElHRVNUX1FPUF9WQUxVRV9TVFJJTkdfQVVUSF9JTlQpKQorICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUodG9rZW4sIERJR0VTVF9RT1BfVkFMVUVfU1RSSU5HX0FVVEhfSU5UKSkKICAgICAgICp2YWx1ZSB8PSBESUdFU1RfUU9QX1ZBTFVFX0FVVEhfSU5UOwotICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodG9rZW4sIERJR0VTVF9RT1BfVkFMVUVfU1RSSU5HX0FVVEhfQ09ORikpCisgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSh0b2tlbiwgRElHRVNUX1FPUF9WQUxVRV9TVFJJTkdfQVVUSF9DT05GKSkKICAgICAgICp2YWx1ZSB8PSBESUdFU1RfUU9QX1ZBTFVFX0FVVEhfQ09ORjsKIAogICAgIHRva2VuID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmdG9rX2J1Zik7CkBAIC0zMDYsNiArMzA3LDIwIEBACiB9CiAKIC8qCisgKiBDdXJsX2F1dGhfaXNfZGlnZXN0X3N1cHBvcnRlZCgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGV2YWx1YXRlIGlmIERJR0VTVCBpcyBzdXBwb3J0ZWQuCisgKgorICogUGFyYW1ldGVyczogTm9uZQorICoKKyAqIFJldHVybnMgVFJVRSBhcyBESUdFU1QgYXMgaGFuZGxlZCBieSBsaWJjdXJsLgorICovCitib29sIEN1cmxfYXV0aF9pc19kaWdlc3Rfc3VwcG9ydGVkKHZvaWQpCit7CisgIHJldHVybiBUUlVFOworfQorCisvKgogICogQ3VybF9hdXRoX2NyZWF0ZV9kaWdlc3RfbWQ1X21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBhbHJlYWR5IGVuY29kZWQgRElHRVNULU1ENSByZXNwb25zZSBtZXNzYWdlCkBAIC0zNzMsMTAgKzM4OCw5IEBACiAgICAgcmV0dXJuIENVUkxFX0JBRF9DT05URU5UX0VOQ09ESU5HOwogCiAgIC8qIEdlbmVyYXRlIDE2IGJ5dGVzIG9mIHJhbmRvbSBkYXRhICovCi0gIGVudHJvcHlbMF0gPSBDdXJsX3JhbmQoZGF0YSk7Ci0gIGVudHJvcHlbMV0gPSBDdXJsX3JhbmQoZGF0YSk7Ci0gIGVudHJvcHlbMl0gPSBDdXJsX3JhbmQoZGF0YSk7Ci0gIGVudHJvcHlbM10gPSBDdXJsX3JhbmQoZGF0YSk7CisgIHJlc3VsdCA9IEN1cmxfcmFuZChkYXRhLCAmZW50cm9weVswXSwgNCk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OwogCiAgIC8qIENvbnZlcnQgdGhlIHJhbmRvbSBkYXRhIGludG8gYSAzMiBieXRlIGhleCBzdHJpbmcgKi8KICAgc25wcmludGYoY25vbmNlLCBzaXplb2YoY25vbmNlKSwgIiUwOHglMDh4JTA4eCUwOHgiLApAQCAtNTI0LDMxICs1MzgsMzEgQEAKIAogICAgIC8qIEV4dHJhY3QgYSB2YWx1ZT1jb250ZW50IHBhaXIgKi8KICAgICBpZihDdXJsX2F1dGhfZGlnZXN0X2dldF9wYWlyKGNobGcsIHZhbHVlLCBjb250ZW50LCAmY2hsZykpIHsKLSAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKHZhbHVlLCAibm9uY2UiKSkgeworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUodmFsdWUsICJub25jZSIpKSB7CiAgICAgICAgIGZyZWUoZGlnZXN0LT5ub25jZSk7CiAgICAgICAgIGRpZ2VzdC0+bm9uY2UgPSBzdHJkdXAoY29udGVudCk7CiAgICAgICAgIGlmKCFkaWdlc3QtPm5vbmNlKQogICAgICAgICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICAgICAgfQotICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCh2YWx1ZSwgInN0YWxlIikpIHsKLSAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoY29udGVudCwgInRydWUiKSkgeworICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSh2YWx1ZSwgInN0YWxlIikpIHsKKyAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoY29udGVudCwgInRydWUiKSkgewogICAgICAgICAgIGRpZ2VzdC0+c3RhbGUgPSBUUlVFOwogICAgICAgICAgIGRpZ2VzdC0+bmMgPSAxOyAvKiB3ZSBtYWtlIGEgbmV3IG5vbmNlIG5vdyAqLwogICAgICAgICB9CiAgICAgICB9Ci0gICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKHZhbHVlLCAicmVhbG0iKSkgeworICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSh2YWx1ZSwgInJlYWxtIikpIHsKICAgICAgICAgZnJlZShkaWdlc3QtPnJlYWxtKTsKICAgICAgICAgZGlnZXN0LT5yZWFsbSA9IHN0cmR1cChjb250ZW50KTsKICAgICAgICAgaWYoIWRpZ2VzdC0+cmVhbG0pCiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAgICAgICB9Ci0gICAgICBlbHNlIGlmKEN1cmxfcmF3X2VxdWFsKHZhbHVlLCAib3BhcXVlIikpIHsKKyAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUodmFsdWUsICJvcGFxdWUiKSkgewogICAgICAgICBmcmVlKGRpZ2VzdC0+b3BhcXVlKTsKICAgICAgICAgZGlnZXN0LT5vcGFxdWUgPSBzdHJkdXAoY29udGVudCk7CiAgICAgICAgIGlmKCFkaWdlc3QtPm9wYXF1ZSkKICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgIH0KLSAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodmFsdWUsICJxb3AiKSkgeworICAgICAgZWxzZSBpZihzdHJjYXNlY29tcGFyZSh2YWx1ZSwgInFvcCIpKSB7CiAgICAgICAgIGNoYXIgKnRva19idWY7CiAgICAgICAgIC8qIFRva2VuaXplIHRoZSBsaXN0IGFuZCBjaG9vc2UgYXV0aCBpZiBwb3NzaWJsZSwgdXNlIGEgdGVtcG9yYXJ5CiAgICAgICAgICAgIGNsb25lIG9mIHRoZSBidWZmZXIgc2luY2Ugc3RydG9rX3IoKSBydWlucyBpdCAqLwpAQCAtNTU4LDEwICs1NzIsMTAgQEAKIAogICAgICAgICB0b2tlbiA9IHN0cnRva19yKHRtcCwgIiwiLCAmdG9rX2J1Zik7CiAgICAgICAgIHdoaWxlKHRva2VuICE9IE5VTEwpIHsKLSAgICAgICAgICBpZihDdXJsX3Jhd19lcXVhbCh0b2tlbiwgRElHRVNUX1FPUF9WQUxVRV9TVFJJTkdfQVVUSCkpIHsKKyAgICAgICAgICBpZihzdHJjYXNlY29tcGFyZSh0b2tlbiwgRElHRVNUX1FPUF9WQUxVRV9TVFJJTkdfQVVUSCkpIHsKICAgICAgICAgICAgIGZvdW5kQXV0aCA9IFRSVUU7CiAgICAgICAgICAgfQotICAgICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwodG9rZW4sIERJR0VTVF9RT1BfVkFMVUVfU1RSSU5HX0FVVEhfSU5UKSkgeworICAgICAgICAgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUodG9rZW4sIERJR0VTVF9RT1BfVkFMVUVfU1RSSU5HX0FVVEhfSU5UKSkgewogICAgICAgICAgICAgZm91bmRBdXRoSW50ID0gVFJVRTsKICAgICAgICAgICB9CiAgICAgICAgICAgdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCAiLCIsICZ0b2tfYnVmKTsKQEAgLTU4MywxNSArNTk3LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgICAgICAgfQogICAgICAgfQotICAgICAgZWxzZSBpZihDdXJsX3Jhd19lcXVhbCh2YWx1ZSwgImFsZ29yaXRobSIpKSB7CisgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKHZhbHVlLCAiYWxnb3JpdGhtIikpIHsKICAgICAgICAgZnJlZShkaWdlc3QtPmFsZ29yaXRobSk7CiAgICAgICAgIGRpZ2VzdC0+YWxnb3JpdGhtID0gc3RyZHVwKGNvbnRlbnQpOwogICAgICAgICBpZighZGlnZXN0LT5hbGdvcml0aG0pCiAgICAgICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKLSAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoY29udGVudCwgIk1ENS1zZXNzIikpCisgICAgICAgIGlmKHN0cmNhc2Vjb21wYXJlKGNvbnRlbnQsICJNRDUtc2VzcyIpKQogICAgICAgICAgIGRpZ2VzdC0+YWxnbyA9IENVUkxESUdFU1RBTEdPX01ENVNFU1M7Ci0gICAgICAgIGVsc2UgaWYoQ3VybF9yYXdfZXF1YWwoY29udGVudCwgIk1ENSIpKQorICAgICAgICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGNvbnRlbnQsICJNRDUiKSkKICAgICAgICAgICBkaWdlc3QtPmFsZ28gPSBDVVJMRElHRVNUQUxHT19NRDU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0NPTlRFTlRfRU5DT0RJTkc7CkBAIC02NzAsOSArNjg0LDEyIEBACiAgICAgZGlnZXN0LT5uYyA9IDE7CiAKICAgaWYoIWRpZ2VzdC0+Y25vbmNlKSB7CisgICAgdW5zaWduZWQgaW50IHJuZFs0XTsKKyAgICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgJnJuZFswXSwgNCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBzbnByaW50Zihjbm9uY2VidWYsIHNpemVvZihjbm9uY2VidWYpLCAiJTA4eCUwOHglMDh4JTA4eCIsCi0gICAgICAgICAgICAgQ3VybF9yYW5kKGRhdGEpLCBDdXJsX3JhbmQoZGF0YSksCi0gICAgICAgICAgICAgQ3VybF9yYW5kKGRhdGEpLCBDdXJsX3JhbmQoZGF0YSkpOworICAgICAgICAgICAgIHJuZFswXSwgcm5kWzFdLCBybmRbMl0sIHJuZFszXSk7CiAKICAgICByZXN1bHQgPSBDdXJsX2Jhc2U2NF9lbmNvZGUoZGF0YSwgY25vbmNlYnVmLCBzdHJsZW4oY25vbmNlYnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNub25jZSwgJmNub25jZV9zeik7CkBAIC03MzAsNyArNzQ3LDcgQEAKIAogICBtZDV0aGlzID0gKHVuc2lnbmVkIGNoYXIgKikgYXByaW50ZigiJXM6JXMiLCByZXF1ZXN0LCB1cmlwYXRoKTsKIAotICBpZihkaWdlc3QtPnFvcCAmJiBDdXJsX3Jhd19lcXVhbChkaWdlc3QtPnFvcCwgImF1dGgtaW50IikpIHsKKyAgaWYoZGlnZXN0LT5xb3AgJiYgc3RyY2FzZWNvbXBhcmUoZGlnZXN0LT5xb3AsICJhdXRoLWludCIpKSB7CiAgICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBhdXRoLWludCBmb3IgUFVUIG9yIFBPU1QgYXQgdGhlIG1vbWVudC4KICAgICAgICBUT0RPOiByZXBsYWNlIG1kNSBvZiBlbXB0eSBzdHJpbmcgd2l0aCBlbnRpdHktYm9keSBmb3IgUFVUL1BPU1QgKi8KICAgICB1bnNpZ25lZCBjaGFyICptZDV0aGlzMiA9ICh1bnNpZ25lZCBjaGFyICopCkBAIC04MDYsNyArODIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0LT5xb3AsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfZGlnZXN0KTsKIAotICAgIGlmKEN1cmxfcmF3X2VxdWFsKGRpZ2VzdC0+cW9wLCAiYXV0aCIpKQorICAgIGlmKHN0cmNhc2Vjb21wYXJlKGRpZ2VzdC0+cW9wLCAiYXV0aCIpKQogICAgICAgZGlnZXN0LT5uYysrOyAvKiBUaGUgbmMgKGZyb20gUkZDKSBoYXMgdG8gYmUgYSA4IGhleCBkaWdpdCBudW1iZXIgMAogICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWQgd2hpY2ggdGVsbHMgdG8gdGhlIHNlcnZlciBob3cgbWFueSB0aW1lcyB5b3UgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBzYW1lIG5vbmNlIGluIHRoZSBxb3A9YXV0aCBtb2RlICovCmRpZmYgLS1naXQgYS9saWIvdmF1dGgvZGlnZXN0X3NzcGkuYyBiL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCmluZGV4IDZhNzMxNWUuLmI5Y2ViMTIgMTAwNjQ0Ci0tLSBhL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCisrKyBiL2xpYi92YXV0aC9kaWdlc3Rfc3NwaS5jCkBAIC0zNywxMyArMzcsMzQgQEAKICNpbmNsdWRlICJjdXJsX211bHRpYnl0ZS5oIgogI2luY2x1ZGUgInNlbmRmLmgiCiAjaW5jbHVkZSAic3RyZHVwLmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogCiAvKiBUaGUgbGFzdCAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmU6ICovCiAjaW5jbHVkZSAiY3VybF9tZW1vcnkuaCIKICNpbmNsdWRlICJtZW1kZWJ1Zy5oIgogCiAvKgorKiBDdXJsX2F1dGhfaXNfZGlnZXN0X3N1cHBvcnRlZCgpCisqCisqIFRoaXMgaXMgdXNlZCB0byBldmFsdWF0ZSBpZiBESUdFU1QgaXMgc3VwcG9ydGVkLgorKgorKiBQYXJhbWV0ZXJzOiBOb25lCisqCisqIFJldHVybnMgVFJVRSBpZiBESUdFU1QgaXMgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgU1NQSS4KKyovCitib29sIEN1cmxfYXV0aF9pc19kaWdlc3Rfc3VwcG9ydGVkKHZvaWQpCit7CisgIFBTZWNQa2dJbmZvIFNlY3VyaXR5UGFja2FnZTsKKyAgU0VDVVJJVFlfU1RBVFVTIHN0YXR1czsKKworICAvKiBRdWVyeSB0aGUgc2VjdXJpdHkgcGFja2FnZSBmb3IgRGlnZXN0ICovCisgIHN0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFRDSEFSICopIFRFWFQoU1BfTkFNRV9ESUdFU1QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOworCisgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyoKICAqIEN1cmxfYXV0aF9jcmVhdGVfZGlnZXN0X21kNV9tZXNzYWdlKCkKICAqCiAgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYWxyZWFkeSBlbmNvZGVkIERJR0VTVC1NRDUgcmVzcG9uc2UgbWVzc2FnZQpAQCAtMjU2LDcgKzI3Nyw3IEBACiAKICAgICAgIC8qIEV4dHJhY3QgYSB2YWx1ZT1jb250ZW50IHBhaXIgKi8KICAgICAgIGlmKEN1cmxfYXV0aF9kaWdlc3RfZ2V0X3BhaXIoY2hsZywgdmFsdWUsIGNvbnRlbnQsICZjaGxnKSkgewotICAgICAgICBpZihDdXJsX3Jhd19lcXVhbCh2YWx1ZSwgInJlYWxtIikpIHsKKyAgICAgICAgaWYoc3RyY2FzZWNvbXBhcmUodmFsdWUsICJyZWFsbSIpKSB7CiAKICAgICAgICAgICAvKiBTZXR1cCBpZGVudGl0eSdzIGRvbWFpbiBhbmQgbGVuZ3RoICovCiAgICAgICAgICAgZG9tYWluLnRjaGFyX3B0ciA9IEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKChjaGFyICopIGNvbnRlbnQpOwpAQCAtMzkzLDcgKzQxNCw3IEBACiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAgIC8qIFBvcHVsYXRlIG91ciBpZGVudGl0eSBkb21haW4gKi8KLSAgICBpZihDdXJsX292ZXJyaWRlX3NzcGlfaHR0cF9yZWFsbSgoY29uc3QgY2hhciopIGRpZ2VzdC0+aW5wdXRfdG9rZW4sCisgICAgaWYoQ3VybF9vdmVycmlkZV9zc3BpX2h0dHBfcmVhbG0oKGNvbnN0IGNoYXIgKikgZGlnZXN0LT5pbnB1dF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWRlbnRpdHkpKQogICAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKZGlmZiAtLWdpdCBhL2xpYi92YXV0aC9rcmI1X2dzc2FwaS5jIGIvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKaW5kZXggMzFjOGM3ZC4uYzc1NGZhZSAxMDA2NDQKLS0tIGEvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKKysrIGIvbGliL3ZhdXRoL2tyYjVfZ3NzYXBpLmMKQEAgLTQyLDYgKzQyLDIwIEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogLyoKKyAqIEN1cmxfYXV0aF9pc19nc3NhcGlfc3VwcG9ydGVkKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZXZhbHVhdGUgaWYgR1NTQVBJIChLZXJiZXJvcyBWNSkgaXMgc3VwcG9ydGVkLgorICoKKyAqIFBhcmFtZXRlcnM6IE5vbmUKKyAqCisgKiBSZXR1cm5zIFRSVUUgaWYgS2VyYmVyb3MgVjUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBHU1MtQVBJIGxpYnJhcnkuCisgKi8KK2Jvb2wgQ3VybF9hdXRoX2lzX2dzc2FwaV9zdXBwb3J0ZWQodm9pZCkKK3sKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCiAgKiBDdXJsX2F1dGhfY3JlYXRlX2dzc2FwaV91c2VyX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBhbHJlYWR5IGVuY29kZWQgR1NTQVBJIChLZXJiZXJvcyBWNSkgdXNlciB0b2tlbgpkaWZmIC0tZ2l0IGEvbGliL3ZhdXRoL2tyYjVfc3NwaS5jIGIvbGliL3ZhdXRoL2tyYjVfc3NwaS5jCmluZGV4IDA4Nzc0ZjYuLjE1MTc5NGUgMTAwNjQ0Ci0tLSBhL2xpYi92YXV0aC9rcmI1X3NzcGkuYworKysgYi9saWIvdmF1dGgva3JiNV9zc3BpLmMKQEAgLTQwLDYgKzQwLDI4IEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogLyoKKyAqIEN1cmxfYXV0aF9pc19nc3NhcGlfc3VwcG9ydGVkKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZXZhbHVhdGUgaWYgR1NTQVBJIChLZXJiZXJvcyBWNSkgaXMgc3VwcG9ydGVkLgorICoKKyAqIFBhcmFtZXRlcnM6IE5vbmUKKyAqCisgKiBSZXR1cm5zIFRSVUUgaWYgS2VyYmVyb3MgVjUgaXMgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgU1NQSS4KKyAqLworYm9vbCBDdXJsX2F1dGhfaXNfZ3NzYXBpX3N1cHBvcnRlZCh2b2lkKQoreworICBQU2VjUGtnSW5mbyBTZWN1cml0eVBhY2thZ2U7CisgIFNFQ1VSSVRZX1NUQVRVUyBzdGF0dXM7CisKKyAgLyogUXVlcnkgdGhlIHNlY3VyaXR5IHBhY2thZ2UgZm9yIEtlcmJlcm9zICovCisgIHN0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFRDSEFSICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVYVChTUF9OQU1FX0tFUkJFUk9TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKKworICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qCiAgKiBDdXJsX2F1dGhfY3JlYXRlX2dzc2FwaV91c2VyX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhbiBhbHJlYWR5IGVuY29kZWQgR1NTQVBJIChLZXJiZXJvcyBWNSkgdXNlciB0b2tlbgpkaWZmIC0tZ2l0IGEvbGliL3ZhdXRoL250bG0uYyBiL2xpYi92YXV0aC9udGxtLmMKaW5kZXggYzg1ZmU0Mi4uYjRkMzQ1ZCAxMDA2NDQKLS0tIGEvbGliL3ZhdXRoL250bG0uYworKysgYi9saWIvdmF1dGgvbnRsbS5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiY3VybF9nZXRob3N0bmFtZS5oIgogI2luY2x1ZGUgImN1cmxfbXVsdGlieXRlLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKLQorI2luY2x1ZGUgInJhbmQuaCIKICNpbmNsdWRlICJ2dGxzL3Z0bHMuaCIKIAogI2lmZGVmIFVTRV9OU1MKQEAgLTIxNyw2ICsyMTcsMjAgQEAKICovCiAKIC8qCisgKiBDdXJsX2F1dGhfaXNfbnRsbV9zdXBwb3J0ZWQoKQorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBldmFsdWF0ZSBpZiBOVExNIGlzIHN1cHBvcnRlZC4KKyAqCisgKiBQYXJhbWV0ZXJzOiBOb25lCisgKgorICogUmV0dXJucyBUUlVFIGFzIE5UTE0gYXMgaGFuZGxlZCBieSBsaWJjdXJsLgorICovCitib29sIEN1cmxfYXV0aF9pc19udGxtX3N1cHBvcnRlZCh2b2lkKQoreworICByZXR1cm4gVFJVRTsKK30KKworLyoKICAqIEN1cmxfYXV0aF9kZWNvZGVfbnRsbV90eXBlMl9tZXNzYWdlKCkKICAqCiAgKiBUaGlzIGlzIHVzZWQgdG8gZGVjb2RlIGFuIGFscmVhZHkgZW5jb2RlZCBOVExNIHR5cGUtMiBtZXNzYWdlLiBUaGUgbWVzc2FnZQpAQCAtNTQ0LDggKzU1OCw5IEBACiAgICAgdW5zaWduZWQgaW50IGVudHJvcHlbMl07CiAgICAgdW5zaWduZWQgY2hhciBudGxtdjJoYXNoWzB4MThdOwogCi0gICAgZW50cm9weVswXSA9IEN1cmxfcmFuZChkYXRhKTsKLSAgICBlbnRyb3B5WzFdID0gQ3VybF9yYW5kKGRhdGEpOworICAgIHJlc3VsdCA9IEN1cmxfcmFuZChkYXRhLCAmZW50cm9weVswXSwgMik7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIHJlc3VsdCA9IEN1cmxfbnRsbV9jb3JlX21rX250X2hhc2goZGF0YSwgcGFzc3dkcCwgbnRidWZmZXIpOwogICAgIGlmKHJlc3VsdCkKQEAgLTU4NCw4ICs1OTksOSBAQAogICAgIHVuc2lnbmVkIGludCBlbnRyb3B5WzJdOwogCiAgICAgLyogTmVlZCB0byBjcmVhdGUgOCBieXRlcyByYW5kb20gZGF0YSAqLwotICAgIGVudHJvcHlbMF0gPSBDdXJsX3JhbmQoZGF0YSk7Ci0gICAgZW50cm9weVsxXSA9IEN1cmxfcmFuZChkYXRhKTsKKyAgICByZXN1bHQgPSBDdXJsX3JhbmQoZGF0YSwgJmVudHJvcHlbMF0sIDIpOworICAgIGlmKHJlc3VsdCkKKyAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvKiA4IGJ5dGVzIHJhbmRvbSBkYXRhIGFzIGNoYWxsZW5nZSBpbiBsbXJlc3AgKi8KICAgICBtZW1jcHkobG1yZXNwLCBlbnRyb3B5LCA4KTsKZGlmZiAtLWdpdCBhL2xpYi92YXV0aC9udGxtX3NzcGkuYyBiL2xpYi92YXV0aC9udGxtX3NzcGkuYwppbmRleCA5ODJhOWQzLi5jMzMwNTE3IDEwMDY0NAotLS0gYS9saWIvdmF1dGgvbnRsbV9zc3BpLmMKKysrIGIvbGliL3ZhdXRoL250bG1fc3NwaS5jCkBAIC0zOCw2ICszOCwyNyBAQAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKIC8qCisgKiBDdXJsX2F1dGhfaXNfbnRsbV9zdXBwb3J0ZWQoKQorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBldmFsdWF0ZSBpZiBOVExNIGlzIHN1cHBvcnRlZC4KKyAqCisgKiBQYXJhbWV0ZXJzOiBOb25lCisgKgorICogUmV0dXJucyBUUlVFIGlmIE5UTE0gaXMgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgU1NQSS4KKyAqLworYm9vbCBDdXJsX2F1dGhfaXNfbnRsbV9zdXBwb3J0ZWQodm9pZCkKK3sKKyAgUFNlY1BrZ0luZm8gU2VjdXJpdHlQYWNrYWdlOworICBTRUNVUklUWV9TVEFUVVMgc3RhdHVzOworCisgIC8qIFF1ZXJ5IHRoZSBzZWN1cml0eSBwYWNrYWdlIGZvciBOVExNICovCisgIHN0YXR1cyA9IHNfcFNlY0ZuLT5RdWVyeVNlY3VyaXR5UGFja2FnZUluZm8oKFRDSEFSICopIFRFWFQoU1BfTkFNRV9OVExNKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU2VjdXJpdHlQYWNrYWdlKTsKKworICByZXR1cm4gKHN0YXR1cyA9PSBTRUNfRV9PSyA/IFRSVUUgOiBGQUxTRSk7Cit9CisKKy8qCiAgKiBDdXJsX2F1dGhfY3JlYXRlX250bG1fdHlwZTFfbWVzc2FnZSgpCiAgKgogICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIGFscmVhZHkgZW5jb2RlZCBOVExNIHR5cGUtMSBtZXNzYWdlIHJlYWR5IGZvcgpkaWZmIC0tZ2l0IGEvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYyBiL2xpYi92YXV0aC9zcG5lZ29fZ3NzYXBpLmMKaW5kZXggYjI1NmVlNi4uODg0MGRiOCAxMDA2NDQKLS0tIGEvbGliL3ZhdXRoL3NwbmVnb19nc3NhcGkuYworKysgYi9saWIvdmF1dGgvc3BuZWdvX2dzc2FwaS5jCkBAIC00MSw2ICs0MSwyMCBAQAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKIC8qCisgKiBDdXJsX2F1dGhfaXNfc3BuZWdvX3N1cHBvcnRlZCgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGV2YWx1YXRlIGlmIFNQTkVHTyAoTmVnb3RpYXRlKSBpcyBzdXBwb3J0ZWQuCisgKgorICogUGFyYW1ldGVyczogTm9uZQorICoKKyAqIFJldHVybnMgVFJVRSBpZiBOZWdvdGlhdGUgc3VwcG9ydGVkIGJ5IHRoZSBHU1MtQVBJIGxpYnJhcnkuCisgKi8KK2Jvb2wgQ3VybF9hdXRoX2lzX3NwbmVnb19zdXBwb3J0ZWQodm9pZCkKK3sKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCiAgKiBDdXJsX2F1dGhfZGVjb2RlX3NwbmVnb19tZXNzYWdlKCkKICAqCiAgKiBUaGlzIGlzIHVzZWQgdG8gZGVjb2RlIGFuIGFscmVhZHkgZW5jb2RlZCBTUE5FR08gKE5lZ290aWF0ZSkgY2hhbGxlbmdlCmRpZmYgLS1naXQgYS9saWIvdmF1dGgvc3BuZWdvX3NzcGkuYyBiL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCmluZGV4IGI2MTc2ZWMuLjVmYTk1ZTIgMTAwNjQ0Ci0tLSBhL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCisrKyBiL2xpYi92YXV0aC9zcG5lZ29fc3NwaS5jCkBAIC00MCw2ICs0MCwyOCBAQAogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKIC8qCisgKiBDdXJsX2F1dGhfaXNfc3BuZWdvX3N1cHBvcnRlZCgpCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGV2YWx1YXRlIGlmIFNQTkVHTyAoTmVnb3RpYXRlKSBpcyBzdXBwb3J0ZWQuCisgKgorICogUGFyYW1ldGVyczogTm9uZQorICoKKyAqIFJldHVybnMgVFJVRSBpZiBOZWdvdGlhdGUgaXMgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgU1NQSS4KKyAqLworYm9vbCBDdXJsX2F1dGhfaXNfc3BuZWdvX3N1cHBvcnRlZCh2b2lkKQoreworICBQU2VjUGtnSW5mbyBTZWN1cml0eVBhY2thZ2U7CisgIFNFQ1VSSVRZX1NUQVRVUyBzdGF0dXM7CisKKyAgLyogUXVlcnkgdGhlIHNlY3VyaXR5IHBhY2thZ2UgZm9yIE5lZ290aWF0ZSAqLworICBzdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlTZWN1cml0eVBhY2thZ2VJbmZvKChUQ0hBUiAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoU1BfTkFNRV9ORUdPVElBVEUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTZWN1cml0eVBhY2thZ2UpOworCisgIHJldHVybiAoc3RhdHVzID09IFNFQ19FX09LID8gVFJVRSA6IEZBTFNFKTsKK30KKworLyoKICAqIEN1cmxfYXV0aF9kZWNvZGVfc3BuZWdvX21lc3NhZ2UoKQogICoKICAqIFRoaXMgaXMgdXNlZCB0byBkZWNvZGUgYW4gYWxyZWFkeSBlbmNvZGVkIFNQTkVHTyAoTmVnb3RpYXRlKSBjaGFsbGVuZ2UKQEAgLTI0MiwxNSArMjY0LDE3IEBACiAKICAgLyogQmFzZTY0IGVuY29kZSB0aGUgYWxyZWFkeSBnZW5lcmF0ZWQgcmVzcG9uc2UgKi8KICAgcmVzdWx0ID0gQ3VybF9iYXNlNjRfZW5jb2RlKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciopIG5lZ28tPm91dHB1dF90b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIG5lZ28tPm91dHB1dF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ28tPm91dHB1dF90b2tlbl9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdHIsIG91dGxlbik7CiAKICAgaWYocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQ7CiAKLSAgaWYoISpvdXRwdHIgfHwgISpvdXRsZW4pCisgIGlmKCEqb3V0cHRyIHx8ICEqb3V0bGVuKSB7CisgICAgZnJlZSgqb3V0cHRyKTsKICAgICByZXR1cm4gQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQ7CisgIH0KIAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CmRpZmYgLS1naXQgYS9saWIvdmF1dGgvdmF1dGguYyBiL2xpYi92YXV0aC92YXV0aC5jCmluZGV4IDcwMmUyZDQuLmI5OTVmMzQgMTAwNjQ0Ci0tLSBhL2xpYi92YXV0aC92YXV0aC5jCisrKyBiL2xpYi92YXV0aC92YXV0aC5jCkBAIC0xMDQsMyArMTA0LDQ0IEBACiB9CiAjZW5kaWYgLyogVVNFX1dJTkRPV1NfU1NQSSAqLwogCisvKgorKiBDdXJsX2F1dGhfdXNlcl9jb250YWluc19kb21haW4oKQorKgorKiBUaGlzIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgc3BlY2lmaWVkIHVzZXIgY29udGFpbnMgYSBXaW5kb3dzIGRvbWFpbiBuYW1lIGFzCisqIGZvbGxvd3M6CisqCisqIFVzZXJcRG9tYWluIChEb3duLWxldmVsIExvZ29uIE5hbWUpCisqIFVzZXIvRG9tYWluIChjdXJsIERvd24tbGV2ZWwgZm9ybWF0IC0gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBjb2RlKQorKiBVc2VyQERvbWFpbiAoVXNlciBQcmluY2lwYWwgTmFtZSkKKyoKKyogTm90ZTogVGhlIHVzZXIgbmFtZSBtYXkgYmUgZW1wdHkgd2hlbiB1c2luZyBhIEdTUy1BUEkgbGlicmFyeSBvciBXaW5kb3dzIFNTUEkKKyogYXMgdGhlIHVzZXIgYW5kIGRvbWFpbiBhcmUgZWl0aGVyIG9idGFpbmVkIGZyb20gdGhlIGNyZWRpZW50YWxzIGNhY2hlIHdoZW4KKyogdXNpbmcgR1NTLUFQSSBvciB2aWEgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcidzIGNyZWRpZW50YWxzIHdoZW4gdXNpbmcKKyogV2luZG93cyBTU1BJLgorKgorKiBQYXJhbWV0ZXJzOgorKgorKiB1c2VyICBbaW5dIC0gVGhlIHVzZXIgbmFtZS4KKyoKKyogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSBGQUxTRS4KKyovCitib29sIEN1cmxfYXV0aF91c2VyX2NvbnRhaW5zX2RvbWFpbihjb25zdCBjaGFyICp1c2VyKQoreworICBib29sIHZhbGlkID0gRkFMU0U7CisKKyAgaWYodXNlciAmJiAqdXNlcikgeworICAgIC8qIENoZWNrIHdlIGhhdmUgYSBkb21haW4gbmFtZSBvciBVUE4gcHJlc2VudCAqLworICAgIGNoYXIgKnAgPSBzdHJwYnJrKHVzZXIsICJcXC9AIik7CisKKyAgICB2YWxpZCA9IChwICE9IE5VTEwgJiYgcCA+IHVzZXIgJiYgcCA8IHVzZXIgKyBzdHJsZW4odXNlcikgLSAxID8gVFJVRSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKTsKKyAgfQorI2lmIGRlZmluZWQoSEFWRV9HU1NBUEkpIHx8IGRlZmluZWQoVVNFX1dJTkRPV1NfU1NQSSkKKyAgZWxzZQorICAgIC8qIFVzZXIgYW5kIGRvbWFpbiBhcmUgb2J0YWluZWQgZnJvbSB0aGUgR1NTLUFQSSBjcmVkaWVudGlhbHMgY2FjaGUgb3IgdGhlCisgICAgICAgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyIGZyb20gV2luZG93cyAqLworICAgIHZhbGlkID0gVFJVRTsKKyNlbmRpZgorCisgIHJldHVybiB2YWxpZDsKK30KZGlmZiAtLWdpdCBhL2xpYi92YXV0aC92YXV0aC5oIGIvbGliL3ZhdXRoL3ZhdXRoLmgKaW5kZXggMzg4MDZlZS4uOWQ2MTIyOCAxMDA2NDQKLS0tIGEvbGliL3ZhdXRoL3ZhdXRoLmgKKysrIGIvbGliL3ZhdXRoL3ZhdXRoLmgKQEAgLTU1LDYgKzU1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYWxtKTsKICNlbmRpZgogCisvKiBUaGlzIGlzIHVzZWQgdG8gdGVzdCBpZiB0aGUgdXNlciBjb250YWlucyBhIFdpbmRvd3MgZG9tYWluIG5hbWUgKi8KK2Jvb2wgQ3VybF9hdXRoX3VzZXJfY29udGFpbnNfZG9tYWluKGNvbnN0IGNoYXIgKnVzZXIpOworCiAvKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBiYXNlNjQgZW5jb2RlZCBQTEFJTiBjbGVhcnRleHQgbWVzc2FnZSAqLwogQ1VSTGNvZGUgQ3VybF9hdXRoX2NyZWF0ZV9wbGFpbl9tZXNzYWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNlcnAsCkBAIC04Myw2ICs4Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGFzc3dkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHRyLCBzaXplX3QgKm91dGxlbik7CiAKKy8qIFRoaXMgaXMgdXNlZCB0byBldmFsdWF0ZSBpZiBESUdFU1QgaXMgc3VwcG9ydGVkICovCitib29sIEN1cmxfYXV0aF9pc19kaWdlc3Rfc3VwcG9ydGVkKHZvaWQpOworCiAvKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBiYXNlNjQgZW5jb2RlZCBESUdFU1QtTUQ1IHJlc3BvbnNlIG1lc3NhZ2UgKi8KIENVUkxjb2RlIEN1cmxfYXV0aF9jcmVhdGVfZGlnZXN0X21kNV9tZXNzYWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjaGxnNjQsCkBAIC0xMDksNiArMTE1LDkgQEAKICNlbmRpZiAvKiAhQ1VSTF9ESVNBQkxFX0NSWVBUT19BVVRIICovCiAKICNpZiBkZWZpbmVkKFVTRV9OVExNKQorLyogVGhpcyBpcyB1c2VkIHRvIGV2YWx1YXRlIGlmIE5UTE0gaXMgc3VwcG9ydGVkICovCitib29sIEN1cmxfYXV0aF9pc19udGxtX3N1cHBvcnRlZCh2b2lkKTsKKwogLyogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgYmFzZTY0IGVuY29kZWQgTlRMTSB0eXBlLTEgbWVzc2FnZSAqLwogQ1VSTGNvZGUgQ3VybF9hdXRoX2NyZWF0ZV9udGxtX3R5cGUxX21lc3NhZ2UoY29uc3QgY2hhciAqdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXNzd2RwLApAQCAtMTQwLDYgKzE0OSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlYXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKm91dHB0ciwgc2l6ZV90ICpvdXRsZW4pOwogI2lmIGRlZmluZWQoVVNFX0tFUkJFUk9TNSkKKy8qIFRoaXMgaXMgdXNlZCB0byBldmFsdWF0ZSBpZiBHU1NBUEkgKEtlcmJlcm9zIFY1KSBpcyBzdXBwb3J0ZWQgKi8KK2Jvb2wgQ3VybF9hdXRoX2lzX2dzc2FwaV9zdXBwb3J0ZWQodm9pZCk7CisKIC8qIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIGJhc2U2NCBlbmNvZGVkIEdTU0FQSSAoS2VyYmVyb3MgVjUpIHVzZXIgdG9rZW4KICAgIG1lc3NhZ2UgKi8KIENVUkxjb2RlIEN1cmxfYXV0aF9jcmVhdGVfZ3NzYXBpX3VzZXJfbWVzc2FnZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLApAQCAtMTY1LDYgKzE3Nyw5IEBACiAjZW5kaWYgLyogVVNFX0tFUkJFUk9TNSAqLwogCiAjaWYgZGVmaW5lZChVU0VfU1BORUdPKQorLyogVGhpcyBpcyB1c2VkIHRvIGV2YWx1YXRlIGlmIFNQTkVHTyAoTmVnb3RpYXRlKSBpcyBzdXBwb3J0ZWQgKi8KK2Jvb2wgQ3VybF9hdXRoX2lzX3NwbmVnb19zdXBwb3J0ZWQodm9pZCk7CisKIC8qIFRoaXMgaXMgdXNlZCB0byBkZWNvZGUgYSBiYXNlNjQgZW5jb2RlZCBTUE5FR08gKE5lZ290aWF0ZSkgY2hhbGxlbmdlCiAgICBtZXNzYWdlICovCiBDVVJMY29kZSBDdXJsX2F1dGhfZGVjb2RlX3NwbmVnb19tZXNzYWdlKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCmRpZmYgLS1naXQgYS9saWIvdmVyc2lvbi5jIGIvbGliL3ZlcnNpb24uYwppbmRleCAxMjkyNDQ1Li5hNDM0YTYyIDEwMDY0NAotLS0gYS9saWIvdmVyc2lvbi5jCisrKyBiL2xpYi92ZXJzaW9uLmMKQEAgLTM2LDggKzM2LDggQEAKICMgIGluY2x1ZGUgPGFyZXMuaD4KICNlbmRpZgogCi0jaWZkZWYgVVNFX0xJQklETgotI2luY2x1ZGUgPHN0cmluZ3ByZXAuaD4KKyNpZmRlZiBVU0VfTElCSUROMgorI2luY2x1ZGUgPGlkbjIuaD4KICNlbmRpZgogCiAjaWZkZWYgVVNFX0xJQlBTTApAQCAtMTExLDkgKzExMSw5IEBACiAgIGxlZnQgLT0gbGVuOwogICBwdHIgKz0gbGVuOwogI2VuZGlmCi0jaWZkZWYgVVNFX0xJQklETgotICBpZihzdHJpbmdwcmVwX2NoZWNrX3ZlcnNpb24oTElCSUROX1JFUVVJUkVEX1ZFUlNJT04pKSB7Ci0gICAgbGVuID0gc25wcmludGYocHRyLCBsZWZ0LCAiIGxpYmlkbi8lcyIsIHN0cmluZ3ByZXBfY2hlY2tfdmVyc2lvbihOVUxMKSk7CisjaWZkZWYgVVNFX0xJQklETjIKKyAgaWYoaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTikpIHsKKyAgICBsZW4gPSBzbnByaW50ZihwdHIsIGxlZnQsICIgbGliaWRuMi8lcyIsIGlkbjJfY2hlY2tfdmVyc2lvbihOVUxMKSk7CiAgICAgbGVmdCAtPSBsZW47CiAgICAgcHRyICs9IGxlbjsKICAgfQpAQCAtMzY1LDEwICszNjUsMTAgQEAKICAgICB2ZXJzaW9uX2luZm8uYXJlc19udW0gPSBhcmVzbnVtOwogICB9CiAjZW5kaWYKLSNpZmRlZiBVU0VfTElCSUROCisjaWZkZWYgVVNFX0xJQklETjIKICAgLyogVGhpcyByZXR1cm5zIGEgdmVyc2lvbiBzdHJpbmcgaWYgd2UgdXNlIHRoZSBnaXZlbiB2ZXJzaW9uIG9yIGxhdGVyLAogICAgICBvdGhlcndpc2UgaXQgcmV0dXJucyBOVUxMICovCi0gIHZlcnNpb25faW5mby5saWJpZG4gPSBzdHJpbmdwcmVwX2NoZWNrX3ZlcnNpb24oTElCSUROX1JFUVVJUkVEX1ZFUlNJT04pOworICB2ZXJzaW9uX2luZm8ubGliaWRuID0gaWRuMl9jaGVja192ZXJzaW9uKElETjJfVkVSU0lPTik7CiAgIGlmKHZlcnNpb25faW5mby5saWJpZG4pCiAgICAgdmVyc2lvbl9pbmZvLmZlYXR1cmVzIHw9IENVUkxfVkVSU0lPTl9JRE47CiAjZWxpZiBkZWZpbmVkKFVTRV9XSU4zMl9JRE4pCmRpZmYgLS1naXQgYS9saWIvdnRscy9heHRscy5jIGIvbGliL3Z0bHMvYXh0bHMuYwppbmRleCBiNmM2OWFkLi44YTUwMjlmIDEwMDY0NAotLS0gYS9saWIvdnRscy9heHRscy5jCisrKyBiL2xpYi92dGxzL2F4dGxzLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAgIC8qIGF4VExTIG9ubHkgc3VwcG9ydHMgVExTdjEgKi8KICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgYW4gZXhwbGljaXQgU1NML1RMUyB2ZXJzaW9uICovCi0gIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgc3dpdGNoKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKICAgICBicmVhazsKQEAgLTE4MywxNyArMTgzLDE3IEBACiAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCA9IE5VTEw7CiAKICAgLyogTG9hZCB0aGUgdHJ1c3RlZCBDQSBjZXJ0IGJ1bmRsZSBmaWxlICovCi0gIGlmKGRhdGEtPnNldC5zc2wuQ0FmaWxlKSB7Ci0gICAgaWYoc3NsX29ial9sb2FkKHNzbF9jdHgsIFNTTF9PQkpfWDUwOV9DQUNFUlQsIGRhdGEtPnNldC5zc2wuQ0FmaWxlLCBOVUxMKQotICAgICAgICE9IFNTTF9PSykgeworICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSkgeworICAgIGlmKHNzbF9vYmpfbG9hZChzc2xfY3R4LCBTU0xfT0JKX1g1MDlfQ0FDRVJULAorICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwgTlVMTCkgIT0gU1NMX09LKSB7CiAgICAgICBpbmZvZihkYXRhLCAiZXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgXG4iLAotICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5DQWZpbGUpOwotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSk7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICAgIH0KICAgICB9CiAgICAgZWxzZQotICAgICAgaW5mb2YoZGF0YSwgImZvdW5kIGNlcnRpZmljYXRlcyBpbiAlc1xuIiwgZGF0YS0+c2V0LnNzbC5DQWZpbGUpOworICAgICAgaW5mb2YoZGF0YSwgImZvdW5kIGNlcnRpZmljYXRlcyBpbiAlc1xuIiwgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpOwogICB9CiAKICAgLyogZ3Rscy5jIHRhc2tzIHdlJ3JlIHNraXBwaW5nIGZvciBub3c6CkBAIC0yMDUsMTUgKzIwNSwxNSBAQAogICAgKi8KIAogICAvKiBMb2FkIGNsaWVudCBjZXJ0aWZpY2F0ZSAqLwotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSkgeworICBpZihTU0xfU0VUX09QVElPTihjZXJ0KSkgewogICAgIGk9MDsKICAgICAvKiBJbnN0ZWFkIG9mIHRyeWluZyB0byBhbmFseXplIGNlcnQgdHlwZSBoZXJlLCBsZXQgYXhUTFMgdHJ5IHRoZW0gYWxsLiAqLwogICAgIHdoaWxlKGNlcnRfdHlwZXNbaV0gIT0gMCkgewogICAgICAgc3NsX2Zjbl9yZXR1cm4gPSBzc2xfb2JqX2xvYWQoc3NsX2N0eCwgY2VydF90eXBlc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLCBOVUxMKTsKICAgICAgIGlmKHNzbF9mY25fcmV0dXJuID09IFNTTF9PSykgewogICAgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHJlYWQgY2VydCBmaWxlICVzIFxuIiwKLSAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOworICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihjZXJ0KSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaSsrOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgICAgLyogVHJpZWQgYWxsIGNlcnQgdHlwZXMsIG5vbmUgd29ya2VkLiAqLwogICAgIGlmKGNlcnRfdHlwZXNbaV0gPT0gMCkgewogICAgICAgZmFpbGYoZGF0YSwgIiVzIGlzIG5vdCB4NTA5IG9yIHBrY3MxMiBmb3JtYXQiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOworICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCkpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKICAgICB9CiAgIH0KQEAgLTIyOSwxNSArMjI5LDE1IEBACiAgIC8qIExvYWQgY2xpZW50IGtleS4KICAgICAgSWYgYSBwa2NzMTIgZmlsZSBzdWNjZXNzZnVsbHkgbG9hZGVkIGEgY2VydCwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KICAgICAgYmVjYXVzZSB0aGUga2V5IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiAqLwotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldICYmIGNlcnRfdHlwZXNbaV0gIT0gU1NMX09CSl9QS0NTMTIpIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSAmJiBjZXJ0X3R5cGVzW2ldICE9IFNTTF9PQkpfUEtDUzEyKSB7CiAgICAgaT0wOwogICAgIC8qIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGFuYWx5emUga2V5IHR5cGUgaGVyZSwgbGV0IGF4VExTIHRyeSB0aGVtIGFsbC4gKi8KICAgICB3aGlsZShrZXlfdHlwZXNbaV0gIT0gMCkgewogICAgICAgc3NsX2Zjbl9yZXR1cm4gPSBzc2xfb2JqX2xvYWQoc3NsX2N0eCwga2V5X3R5cGVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpLCBOVUxMKTsKICAgICAgIGlmKHNzbF9mY25fcmV0dXJuID09IFNTTF9PSykgewogICAgICAgICBpbmZvZihkYXRhLCAic3VjY2Vzc2Z1bGx5IHJlYWQga2V5IGZpbGUgJXMgXG4iLAotICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldKTsKKyAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5KSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaSsrOwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgLyogVHJpZWQgYWxsIGtleSB0eXBlcywgbm9uZSB3b3JrZWQuICovCiAgICAgaWYoa2V5X3R5cGVzW2ldID09IDApIHsKICAgICAgIGZhaWxmKGRhdGEsICJGYWlsdXJlOiAlcyBpcyBub3QgYSBzdXBwb3J0ZWQga2V5IGZpbGUiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSk7CisgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpKTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICB9CiAgIH0KQEAgLTI1NiwxMyArMjU2LDE0IEBACiAgICAqIDIpIHNldHRpbmcgdXAgY2FsbGJhY2tzLiAgdGhlc2Ugc2VlbSBnbnV0bHMgc3BlY2lmaWMKICAgICovCiAKLSAgaWYoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpIHsKKyAgaWYoZGF0YS0+c2V0LmdlbmVyYWxfc3NsLnNlc3Npb25pZCkgewogICAgIGNvbnN0IHVpbnQ4X3QgKnNzbF9zZXNzaW9uaWQ7CiAgICAgc2l6ZV90IHNzbF9pZHNpemU7CiAKICAgICAvKiBJbiBheFRMUywgaGFuZHNoYWtpbmcgaGFwcGVucyBpbnNpZGUgc3NsX2NsaWVudF9uZXcuICovCiAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAodm9pZCAqKikgJnNzbF9zZXNzaW9uaWQsICZzc2xfaWRzaXplKSkgeworICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgKHZvaWQgKiopICZzc2xfc2Vzc2lvbmlkLCAmc3NsX2lkc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tpbmRleCkpIHsKICAgICAgIC8qIHdlIGdvdCBhIHNlc3Npb24gaWQsIHVzZSBpdCEgKi8KICAgICAgIGluZm9mIChkYXRhLCAiU1NMIHJlLXVzaW5nIHNlc3Npb24gSURcbiIpOwogICAgICAgc3NsID0gc3NsX2NsaWVudF9uZXcoc3NsX2N0eCwgY29ubi0+c29ja1tzb2NraW5kZXhdLApAQCAtMjkxLDEzICsyOTIsMTcgQEAKICAgY29uc3QgY2hhciAqZG5zX2FsdG5hbWU7CiAgIGludDhfdCBmb3VuZF9zdWJqZWN0X2FsdF9uYW1lcyA9IDA7CiAgIGludDhfdCBmb3VuZF9zdWJqZWN0X2FsdF9uYW1lX21hdGNoaW5nX2Nvbm4gPSAwOworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOwogCiAgIC8qIEhlcmUsIGd0bHMuYyBnZXRzIHRoZSBwZWVyIGNlcnRpZmljYXRlcyBhbmQgZmFpbHMgb3V0IGRlcGVuZGluZyBvbgogICAgKiBzZXR0aW5ncyBpbiAiZGF0YS4iICBheFRMUyBhcGkgZG9lc24ndCBoYXZlIGdldCBjZXJ0IGNoYWluIGZjbiwgc28gb21pdD8KICAgICovCiAKICAgLyogVmVyaWZ5IHNlcnZlcidzIGNlcnRpZmljYXRlICovCi0gIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICBpZihzc2xfdmVyaWZ5X2NlcnQoc3NsKSAhPSBTU0xfT0spIHsKICAgICAgIEN1cmxfYXh0bHNfY2xvc2UoY29ubiwgc29ja2luZGV4KTsKICAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgY2VydCB2ZXJpZnkgZmFpbGVkIik7CkBAIC0zMjgsOCArMzMzLDggQEAKICAgICBmb3VuZF9zdWJqZWN0X2FsdF9uYW1lcyA9IDE7CiAKICAgICBpbmZvZihkYXRhLCAiXHRDb21wYXJpbmcgc3ViamVjdCBhbHQgbmFtZSBETlMgd2l0aCBob3N0bmFtZTogJXMgPC0+ICVzXG4iLAotICAgICAgICAgIGRuc19hbHRuYW1lLCBjb25uLT5ob3N0Lm5hbWUpOwotICAgIGlmKEN1cmxfY2VydF9ob3N0Y2hlY2soZG5zX2FsdG5hbWUsIGNvbm4tPmhvc3QubmFtZSkpIHsKKyAgICAgICAgICBkbnNfYWx0bmFtZSwgaG9zdG5hbWUpOworICAgIGlmKEN1cmxfY2VydF9ob3N0Y2hlY2soZG5zX2FsdG5hbWUsIGhvc3RuYW1lKSkgewogICAgICAgZm91bmRfc3ViamVjdF9hbHRfbmFtZV9tYXRjaGluZ19jb25uID0gMTsKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNywyMyArMzQyLDIxIEBACiAKICAgLyogUkZDMjgxOCBjaGVja3MgKi8KICAgaWYoZm91bmRfc3ViamVjdF9hbHRfbmFtZXMgJiYgIWZvdW5kX3N1YmplY3RfYWx0X25hbWVfbWF0Y2hpbmdfY29ubikgewotICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCkgeworICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewogICAgICAgLyogQnJlYWsgY29ubmVjdGlvbiAhICovCiAgICAgICBDdXJsX2F4dGxzX2Nsb3NlKGNvbm4sIHNvY2tpbmRleCk7Ci0gICAgICBmYWlsZihkYXRhLCAiXHRzdWJqZWN0QWx0TmFtZShzKSBkbyBub3QgbWF0Y2ggJXNcbiIsCi0gICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgIGZhaWxmKGRhdGEsICJcdHN1YmplY3RBbHROYW1lKHMpIGRvIG5vdCBtYXRjaCAlc1xuIiwgZGlzcG5hbWUpOwogICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICB9CiAgICAgZWxzZQotICAgICAgaW5mb2YoZGF0YSwgIlx0c3ViamVjdEFsdE5hbWUocykgZG8gbm90IG1hdGNoICVzXG4iLAotICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgICBpbmZvZihkYXRhLCAiXHRzdWJqZWN0QWx0TmFtZShzKSBkbyBub3QgbWF0Y2ggJXNcbiIsIGRpc3BuYW1lKTsKICAgfQogICBlbHNlIGlmKGZvdW5kX3N1YmplY3RfYWx0X25hbWVzID09IDApIHsKICAgICAvKiBQZXIgUkZDMjgxOCwgd2hlbiBubyBTdWJqZWN0IEFsdCBOYW1lcyB3ZXJlIGF2YWlsYWJsZSwgZXhhbWluZSB0aGUgcGVlcgogICAgICAgIENOIGFzIGEgbGVnYWN5IGZhbGxiYWNrICovCiAgICAgcGVlcl9DTiA9IHNzbF9nZXRfY2VydF9kbihzc2wsIFNTTF9YNTA5X0NFUlRfQ09NTU9OX05BTUUpOwogICAgIGlmKHBlZXJfQ04gPT0gTlVMTCkgewotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKICAgICAgICAgQ3VybF9heHRsc19jbG9zZShjb25uLCBzb2NraW5kZXgpOwogICAgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIG9idGFpbiBjb21tb24gbmFtZSBmcm9tIHBlZXIgY2VydGlmaWNhdGUiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKQEAgLTM2MiwxNyArMzY1LDE3IEBACiAgICAgICAgIGluZm9mKGRhdGEsICJ1bmFibGUgdG8gb2J0YWluIGNvbW1vbiBuYW1lIGZyb20gcGVlciBjZXJ0aWZpY2F0ZSIpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgIGlmKCFDdXJsX2NlcnRfaG9zdGNoZWNrKChjb25zdCBjaGFyICopcGVlcl9DTiwgY29ubi0+aG9zdC5uYW1lKSkgewotICAgICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QpIHsKKyAgICAgIGlmKCFDdXJsX2NlcnRfaG9zdGNoZWNrKChjb25zdCBjaGFyICopcGVlcl9DTiwgaG9zdG5hbWUpKSB7CisgICAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewogICAgICAgICAgIC8qIEJyZWFrIGNvbm5lY3Rpb24gISAqLwogICAgICAgICAgIEN1cmxfYXh0bHNfY2xvc2UoY29ubiwgc29ja2luZGV4KTsKICAgICAgICAgICBmYWlsZihkYXRhLCAiXHRjb21tb24gbmFtZSBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIHBlZXJfQ04sIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICAgICAgICAgIHBlZXJfQ04sIGRpc3BuYW1lKTsKICAgICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICBpbmZvZihkYXRhLCAiXHRjb21tb24gbmFtZSBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIHBlZXJfQ04sIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICAgICAgICAgIHBlZXJfQ04sIGRpc3BuYW1lKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTM4MywxMiArMzg2LDEyIEBACiAgIGNvbm4tPnNlbmRbc29ja2luZGV4XSA9IGF4dGxzX3NlbmQ7CiAKICAgLyogUHV0IG91ciBmcmVzaGx5IG1pbnRlZCBTU0wgc2Vzc2lvbiBpbiBjYWNoZSAqLwotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgY29uc3QgdWludDhfdCAqc3NsX3Nlc3Npb25pZCA9IHNzbF9nZXRfc2Vzc2lvbl9pZF9zaXplKHNzbCk7CiAgICAgc2l6ZV90IHNzbF9pZHNpemUgPSBzc2xfZ2V0X3Nlc3Npb25faWQoc3NsKTsKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZihDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgKHZvaWQgKikgc3NsX3Nlc3Npb25pZCwgc3NsX2lkc2l6ZSkKLSAgICAgICAhPSBDVVJMRV9PSykKKyAgICBpZihDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgKHZvaWQgKikgc3NsX3Nlc3Npb25pZCwgc3NsX2lkc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KSAhPSBDVVJMRV9PSykKICAgICAgIGluZm9mIChkYXRhLCAiZmFpbGVkIHRvIGFkZCBzZXNzaW9uIHRvIGNhY2hlXG4iKTsKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICB9CkBAIC01NzksOCArNTgyLDcgQEAKICAgKi8KIAogICBpZihjb25uc3NsLT5zc2wpIHsKLSAgICBpbnQgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOworICAgIGludCB3aGF0ID0gU09DS0VUX1JFQURBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOwogICAgIGlmKHdoYXQgPiAwKSB7CiAgICAgICAvKiBTb21ldGhpbmcgdG8gcmVhZCwgbGV0J3MgZG8gaXQgYW5kIGhvcGUgdGhhdCBpdCBpcyB0aGUgY2xvc2UKICAgICAgICAgIG5vdGlmeSBhbGVydCBmcm9tIHRoZSBzZXJ2ZXIuICBidWYgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IGJ5CmRpZmYgLS1naXQgYS9saWIvdnRscy9jeWFzc2wuYyBiL2xpYi92dGxzL2N5YXNzbC5jCmluZGV4IDc5OTRiM2UuLjU1NzA3NjAgMTAwNjQ0Ci0tLSBhL2xpYi92dGxzL2N5YXNzbC5jCisrKyBiL2xpYi92dGxzL2N5YXNzbC5jCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAicGFyc2VkYXRlLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwogI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ4NTA5YXNuMS5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAKQEAgLTExOCw5ICsxMTgsOSBAQAogewogICBpZighdHlwZSB8fCAhdHlwZVswXSkKICAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKLSAgaWYoQ3VybF9yYXdfZXF1YWwodHlwZSwgIlBFTSIpKQorICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCiAgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07Ci0gIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJERVIiKSkKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIkRFUiIpKQogICAgIHJldHVybiBTU0xfRklMRVRZUEVfQVNOMTsKICAgcmV0dXJuIC0xOwogfQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gdXNlIGFuIGV4cGxpY2l0IFNTTC9UTFMgdmVyc2lvbiAqLwotICBzd2l0Y2goZGF0YS0+c2V0LnNzbC52ZXJzaW9uKSB7CisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CiAjaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDMwMDMwMDAgLyogPj0gMy4zLjAgKi8KQEAgLTE3NCwxMiArMTc0LDE1IEBACiAgICAgcmVxX21ldGhvZCA9IFRMU3YxXzJfY2xpZW50X21ldGhvZCgpOwogICAgIHVzZV9zbmkoVFJVRSk7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6CisgICAgZmFpbGYoZGF0YSwgIkN5YVNTTDogVExTIDEuMyBpcyBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CiAjaWZkZWYgV09MRlNTTF9BTExPV19TU0xWMwogICAgIHJlcV9tZXRob2QgPSBTU0x2M19jbGllbnRfbWV0aG9kKCk7CiAgICAgdXNlX3NuaShGQUxTRSk7CiAjZWxzZQotICAgIGZhaWxmKGRhdGEsICJObyBzdXBwb3J0IGZvciBTU0x2MyIpOworICAgIGZhaWxmKGRhdGEsICJDeWFTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOwogICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CiAjZW5kaWYKICAgICBicmVhazsKQEAgLTIwNSw3ICsyMDgsNyBAQAogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogICB9CiAKLSAgc3dpdGNoKGRhdGEtPnNldC5zc2wudmVyc2lvbikgeworICBzd2l0Y2goU1NMX0NPTk5fQ09ORklHKHZlcnNpb24pKSB7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgogI2lmIExJQkNZQVNTTF9WRVJTSU9OX0hFWCA+IDB4MDMwMDQwMDYgLyogPiAzLjQuNiAqLwpAQCAtMjI4LDE4ICsyMzEsMTggQEAKIAogI2lmbmRlZiBOT19GSUxFU1lTVEVNCiAgIC8qIGxvYWQgdHJ1c3RlZCBjYWNlcnQgKi8KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0pIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKICAgICBpZigxICE9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGNvbnNzbC0+Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXSkpIHsKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICAgICAgLyogRmFpbCBpZiB3ZSBpbnNpc3Qgb24gc3VjY2Vzc2Z1bGx5IHZlcmlmeWluZyB0aGUgc2VydmVyLiAqLwogICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLAotICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXT8KLSAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV06ICJub25lIiwKLSAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0/Ci0gICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdIDogIm5vbmUiKTsKKyAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSk/CisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOiAibm9uZSIsCisgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpPworICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSA6ICJub25lIik7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTI1NiwyNSArMjU5LDI1IEBACiAgICAgaW5mb2YoZGF0YSwKICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4iCiAgICAgICAgICAgIiAgQ0FwYXRoOiAlc1xuIiwKLSAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSA/IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdOgorICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpID8gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk6CiAgICAgICAgICAgIm5vbmUiLAotICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdID8gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF06CisgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkgPyBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKToKICAgICAgICAgICAibm9uZSIpOwogICB9CiAKICAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlLCBhbmQgcHJpdmF0ZSBrZXkgKi8KLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0gJiYgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSkgewotICAgIGludCBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFXSk7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGNlcnQpICYmIFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKKyAgICBpbnQgZmlsZV90eXBlID0gZG9fZmlsZV90eXBlKFNTTF9TRVRfT1BUSU9OKGNlcnRfdHlwZSkpOwogCi0gICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjb25zc2wtPmN0eCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0sCisgICAgaWYoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjb25zc2wtPmN0eCwgU1NMX1NFVF9PUFRJT04oY2VydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90eXBlKSAhPSAxKSB7CiAgICAgICBmYWlsZihkYXRhLCAidW5hYmxlIHRvIHVzZSBjbGllbnQgY2VydGlmaWNhdGUgKG5vIGtleSBvciB3cm9uZyBwYXNzIgogICAgICAgICAgICAgIiBwaHJhc2U/KSIpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KIAotICAgIGZpbGVfdHlwZSA9IGRvX2ZpbGVfdHlwZShkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV0pOwotICAgIGlmKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjb25zc2wtPmN0eCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwKKyAgICBmaWxlX3R5cGUgPSBkb19maWxlX3R5cGUoU1NMX1NFVF9PUFRJT04oa2V5X3R5cGUpKTsKKyAgICBpZihTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoY29uc3NsLT5jdHgsIFNTTF9TRVRfT1BUSU9OKGtleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3R5cGUpICE9IDEpIHsKICAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgdG8gc2V0IHByaXZhdGUga2V5Iik7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC0yODcsNyArMjkwLDggQEAKICAgICogYW55d2F5LiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIHJlc3VsdCBvZiB0aGUgdmVyaWZpY2F0aW9uIGlzIGNoZWNrZWQgd2l0aAogICAgKiBTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoKSBiZWxvdy4gKi8KICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGNvbnNzbC0+Y3R4LAotICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyP1NTTF9WRVJJRllfUEVFUjpTU0xfVkVSSUZZX05PTkUsCisgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik/U1NMX1ZFUklGWV9QRUVSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfTk9ORSwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAjaWZkZWYgSEFWRV9TTkkKQEAgLTI5NiwxMyArMzAwLDE1IEBACiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CiAjZW5kaWYKLSAgICBzaXplX3QgaG9zdG5hbWVfbGVuID0gc3RybGVuKGNvbm4tPmhvc3QubmFtZSk7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgICBjb25uLT5ob3N0Lm5hbWU7CisgICAgc2l6ZV90IGhvc3RuYW1lX2xlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAgICAgaWYoKGhvc3RuYW1lX2xlbiA8IFVTSFJUX01BWCkgJiYKLSAgICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyNCkpICYmCisgICAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZhZGRyNCkpICYmCiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcjYpKSAmJgorICAgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmFkZHI2KSkgJiYKICNlbmRpZgotICAgICAgIChDeWFTU0xfQ1RYX1VzZVNOSShjb25zc2wtPmN0eCwgQ1lBU1NMX1NOSV9IT1NUX05BTUUsIGNvbm4tPmhvc3QubmFtZSwKKyAgICAgICAoQ3lhU1NMX0NUWF9Vc2VTTkkoY29uc3NsLT5jdHgsIENZQVNTTF9TTklfSE9TVF9OQU1FLCBob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0KWhvc3RuYW1lX2xlbikgIT0gMSkpIHsKICAgICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gY29uZmlndXJlIHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgIgogICAgICAgICAgICAgIlRMUyBleHRlbnNpb25cbiIpOwpAQCAtMzMxLDcgKzMzNyw3IEBACiAgICAgfQogICB9CiAjaWZkZWYgTk9fRklMRVNZU1RFTQotICBlbHNlIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICBlbHNlIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgIGZhaWxmKGRhdGEsICJTU0w6IENlcnRpZmljYXRlcyBjb3VsZG4ndCBiZSBsb2FkZWQgYmVjYXVzZSBDeWFTU0wgd2FzIGJ1aWx0IgogICAgICAgICAgICIgd2l0aCBcIm5vIGZpbGVzeXN0ZW1cIi4gRWl0aGVyIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24iCiAgICAgICAgICAgIiAoaW5zZWN1cmUpIG9yIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gd2l0aCBsaWJjdXJsIHlvdSIKQEAgLTM3NywxMSArMzgzLDExIEBACiAjZW5kaWYgLyogSEFWRV9BTFBOICovCiAKICAgLyogQ2hlY2sgaWYgdGhlcmUncyBhIGNhY2hlZCBJRCB3ZSBjYW4vc2hvdWxkIHVzZSBoZXJlISAqLwotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgdm9pZCAqc3NsX3Nlc3Npb25pZCA9IE5VTEw7CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMKSkgeworICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwsIHNvY2tpbmRleCkpIHsKICAgICAgIC8qIHdlIGdvdCBhIHNlc3Npb24gaWQsIHVzZSBpdCEgKi8KICAgICAgIGlmKCFTU0xfc2V0X3Nlc3Npb24oY29uc3NsLT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7CiAgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CkBAIC00MTQsMTMgKzQyMCwxNyBAQAogICBpbnQgcmV0ID0gLTE7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSogY29uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOwogCiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGN5YXNzbF9yZWN2OwogICBjb25uLT5zZW5kW3NvY2tpbmRleF0gPSBjeWFzc2xfc2VuZDsKIAogICAvKiBFbmFibGUgUkZDMjgxOCBjaGVja3MgKi8KLSAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7Ci0gICAgcmV0ID0gQ3lhU1NMX2NoZWNrX2RvbWFpbl9uYW1lKGNvbnNzbC0+aGFuZGxlLCBjb25uLT5ob3N0Lm5hbWUpOworICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKKyAgICByZXQgPSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoY29uc3NsLT5oYW5kbGUsIGhvc3RuYW1lKTsKICAgICBpZihyZXQgPT0gU1NMX0ZBSUxVUkUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKICAgfQpAQCAtNDQ0LDMxICs0NTQsMzEgQEAKICAgICBlbHNlIGlmKERPTUFJTl9OQU1FX01JU01BVENIID09IGRldGFpbCkgewogI2lmIDEKICAgICAgIGZhaWxmKGRhdGEsICJcdHN1YmplY3QgYWx0IG5hbWUocykgb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICAgICAgZGlzcG5hbWUpOwogICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICNlbHNlCiAgICAgICAvKiBXaGVuIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKSBpcyB1c2VkIGFuZCB5b3UgZGVzaXJlIHRvIGNvbnRpbnVlCi0gICAgICAgKiBvbiBhIERPTUFJTl9OQU1FX01JU01BVENILCBpLmUuICdkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QgPT0gMCcsCisgICAgICAgKiBvbiBhIERPTUFJTl9OQU1FX01JU01BVENILCBpLmUuICdjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QgPT0gMCcsCiAgICAgICAgKiBDeWFTU0wgdmVyc2lvbiAyLjQuMCB3aWxsIGZhaWwgd2l0aCBhbiBJTkNPTVBMRVRFX0RBVEEgZXJyb3IuIFRoZSBvbmx5CiAgICAgICAgKiB3YXkgdG8gZG8gdGhpcyBpcyBjdXJyZW50bHkgdG8gc3dpdGNoIHRoZSBDeWFTU0xfY2hlY2tfZG9tYWluX25hbWUoKQotICAgICAgICogaW4gYW5kIG91dCBiYXNlZCBvbiB0aGUgJ2RhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCcgdmFsdWUuICovCi0gICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QpIHsKKyAgICAgICAqIGluIGFuZCBvdXQgYmFzZWQgb24gdGhlICdjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QnIHZhbHVlLiAqLworICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsCiAgICAgICAgICAgICAgICJcdHN1YmplY3QgYWx0IG5hbWUocykgb3IgY29tbW9uIG5hbWUgZG8gbm90IG1hdGNoIFwiJXNcIlxuIiwKLSAgICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgICAgICAgICAgIGRpc3BuYW1lKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICBpbmZvZihkYXRhLAogICAgICAgICAgICAgICAiXHRzdWJqZWN0IGFsdCBuYW1lKHMpIGFuZC9vciBjb21tb24gbmFtZSBkbyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICAgICAgZGlzcG5hbWUpOwogICAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgICB9CiAjZW5kaWYKICAgICB9CiAjaWYgTElCQ1lBU1NMX1ZFUlNJT05fSEVYID49IDB4MDIwMDcwMDAgLyogMi43LjAgKi8KICAgICBlbHNlIGlmKEFTTl9OT19TSUdORVJfRSA9PSBkZXRhaWwpIHsKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJcdENBIHNpZ25lciBub3QgYXZhaWxhYmxlIGZvciB2ZXJpZmljYXRpb25cbiIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgICAgfQpAQCAtNTA5LDcgKzUxOSw4IEBACiAgICAgfQogCiAgICAgbWVtc2V0KCZ4NTA5X3BhcnNlZCwgMCwgc2l6ZW9mIHg1MDlfcGFyc2VkKTsKLSAgICBDdXJsX3BhcnNlWDUwOSgmeDUwOV9wYXJzZWQsIHg1MDlfZGVyLCB4NTA5X2RlciArIHg1MDlfZGVyX2xlbik7CisgICAgaWYoQ3VybF9wYXJzZVg1MDkoJng1MDlfcGFyc2VkLCB4NTA5X2RlciwgeDUwOV9kZXIgKyB4NTA5X2Rlcl9sZW4pKQorICAgICAgcmV0dXJuIENVUkxFX1NTTF9QSU5ORURQVUJLRVlOT1RNQVRDSDsKIAogICAgIHB1YmtleSA9ICZ4NTA5X3BhcnNlZC5zdWJqZWN0UHVibGljS2V5SW5mbzsKICAgICBpZighcHVia2V5LT5oZWFkZXIgfHwgcHVia2V5LT5lbmQgPD0gcHVia2V5LT5oZWFkZXIpIHsKQEAgLTU4Myw3ICs1OTQsNyBAQAogCiAgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CiAKLSAgaWYoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpIHsKKyAgaWYoZGF0YS0+c2V0LmdlbmVyYWxfc3NsLnNlc3Npb25pZCkgewogICAgIGJvb2wgaW5jYWNoZTsKICAgICBTU0xfU0VTU0lPTiAqb3VyX3NzbF9zZXNzaW9uaWQ7CiAgICAgdm9pZCAqb2xkX3NzbF9zZXNzaW9uaWQgPSBOVUxMOwpAQCAtNTkxLDcgKzYwMiw4IEBACiAgICAgb3VyX3NzbF9zZXNzaW9uaWQgPSBTU0xfZ2V0X3Nlc3Npb24oY29ubnNzbC0+aGFuZGxlKTsKIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGluY2FjaGUgPSAhKEN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwpKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpKTsKICAgICBpZihpbmNhY2hlKSB7CiAgICAgICBpZihvbGRfc3NsX3Nlc3Npb25pZCAhPSBvdXJfc3NsX3Nlc3Npb25pZCkgewogICAgICAgICBpbmZvZihkYXRhLCAib2xkIFNTTCBzZXNzaW9uIElEIGlzIHN0YWxlLCByZW1vdmluZ1xuIik7CkBAIC02MDIsNyArNjE0LDcgQEAKIAogICAgIGlmKCFpbmNhY2hlKSB7CiAgICAgICByZXN1bHQgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB1bmtub3duIHNpemUgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogdW5rbm93biBzaXplICovLCBzb2NraW5kZXgpOwogICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CiAgICAgICAgIGZhaWxmKGRhdGEsICJmYWlsZWQgdG8gc3RvcmUgc3NsIHNlc3Npb24iKTsKQEAgLTgwMyw3ICs4MTUsOCBAQAogICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc9PQogICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpkaWZmIC0tZ2l0IGEvbGliL3Z0bHMvZGFyd2luc3NsLmMgYi9saWIvdnRscy9kYXJ3aW5zc2wuYwppbmRleCBlYmI5ZTMwLi4wNjAyY2RiIDEwMDY0NAotLS0gYS9saWIvdnRscy9kYXJ3aW5zc2wuYworKysgYi9saWIvdnRscy9kYXJ3aW5zc2wuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKICAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTQsIE5pY2sgWml0em1hbm4sIDxuaWNrem1hbkBnbWFpbC5jb20+LgotICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiAgIGRvIHsKICAgICBsZW5ndGggPSB3cml0ZShzb2NrLAotICAgICAgICAgICAgICAgICAgIChjaGFyKilkYXRhUHRyICsgYnl0ZXNTZW50LAorICAgICAgICAgICAgICAgICAgIChjaGFyICopZGF0YVB0ciArIGJ5dGVzU2VudCwKICAgICAgICAgICAgICAgICAgICBkYXRhTGVuIC0gYnl0ZXNTZW50KTsKICAgfSB3aGlsZSgobGVuZ3RoID4gMCkgJiYKICAgICAgICAgICAgKCAoYnl0ZXNTZW50ICs9IGxlbmd0aCkgPCBkYXRhTGVuKSApOwpAQCAtMjE5LDcgKzIxOSw4IEBACiAgIHJldHVybiBvcnRuOwogfQogCi1DRl9JTkxJTkUgY29uc3QgY2hhciAqU1NMQ2lwaGVyTmFtZUZvck51bWJlcihTU0xDaXBoZXJTdWl0ZSBjaXBoZXIpIHsKK0NGX0lOTElORSBjb25zdCBjaGFyICpTU0xDaXBoZXJOYW1lRm9yTnVtYmVyKFNTTENpcGhlclN1aXRlIGNpcGhlcikKK3sKICAgc3dpdGNoIChjaXBoZXIpIHsKICAgICAvKiBTU0wgdmVyc2lvbiAzLjAgKi8KICAgICBjYXNlIFNTTF9SU0FfV0lUSF9OVUxMX01ENToKQEAgLTM2NCw3ICszNjUsOCBAQAogICByZXR1cm4gIlNTTF9OVUxMX1dJVEhfTlVMTF9OVUxMIjsKIH0KIAotQ0ZfSU5MSU5FIGNvbnN0IGNoYXIgKlRMU0NpcGhlck5hbWVGb3JOdW1iZXIoU1NMQ2lwaGVyU3VpdGUgY2lwaGVyKSB7CitDRl9JTkxJTkUgY29uc3QgY2hhciAqVExTQ2lwaGVyTmFtZUZvck51bWJlcihTU0xDaXBoZXJTdWl0ZSBjaXBoZXIpCit7CiAgIHN3aXRjaChjaXBoZXIpIHsKICAgICAvKiBUTFMgMS4wIHdpdGggQUVTIChSRkMgMzI2OCkgKi8KICAgICBjYXNlIFRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEE6CkBAIC04ODMsMTQgKzg4NSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNJZGVudGl0eVJlZiAqb3V0X2NlcnRfYW5kX2tleSkKIHsKICAgT1NTdGF0dXMgc3RhdHVzID0gZXJyU2VjSXRlbU5vdEZvdW5kOworICBDRkFycmF5UmVmIGtleXNfbGlzdDsKKyAgQ0ZJbmRleCBrZXlzX2xpc3RfY291bnQ7CisgIENGSW5kZXggaTsKKyAgQ0ZTdHJpbmdSZWYgY29tbW9uX25hbWU7CiAKICNpZiBDVVJMX0JVSUxEX01BQ18xMF83IHx8IENVUkxfQlVJTERfSU9TCiAgIC8qIFNlY0l0ZW1Db3B5TWF0Y2hpbmcoKSB3YXMgaW50cm9kdWNlZCBpbiBpT1MgYW5kIFNub3cgTGVvcGFyZC4KICAgICAga1NlY0NsYXNzSWRlbnRpdHkgd2FzIGludHJvZHVjZWQgaW4gTGlvbi4gSWYgYm90aCBleGlzdCwgbGV0J3MgdXNlIHRoZW0KICAgICAgdG8gZmluZCB0aGUgY2VydGlmaWNhdGUuICovCiAgIGlmKFNlY0l0ZW1Db3B5TWF0Y2hpbmcgIT0gTlVMTCAmJiBrU2VjQ2xhc3NJZGVudGl0eSAhPSBOVUxMKSB7Ci0gICAgQ0ZUeXBlUmVmIGtleXNbNF07Ci0gICAgQ0ZUeXBlUmVmIHZhbHVlc1s0XTsKKyAgICBDRlR5cGVSZWYga2V5c1s1XTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzWzVdOwogICAgIENGRGljdGlvbmFyeVJlZiBxdWVyeV9kaWN0OwogICAgIENGU3RyaW5nUmVmIGxhYmVsX2NmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCBsYWJlbCwKICAgICAgIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CkBAIC05MDAsMjcgKzkwNiw1OSBAQAogICAgIGtleXNbMF0gPSBrU2VjQ2xhc3M7CiAgICAgdmFsdWVzWzFdID0ga0NGQm9vbGVhblRydWU7ICAgIC8qIHdlIHdhbnQgYSByZWZlcmVuY2UgKi8KICAgICBrZXlzWzFdID0ga1NlY1JldHVyblJlZjsKLSAgICB2YWx1ZXNbMl0gPSBrU2VjTWF0Y2hMaW1pdE9uZTsgLyogb25lIGlzIGVub3VnaCwgdGhhbmtzICovCisgICAgdmFsdWVzWzJdID0ga1NlY01hdGNoTGltaXRBbGw7IC8qIGtTZWNNYXRjaExpbWl0T25lIHdvdWxkIGJlIGJldHRlciBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbGFiZWwgbWF0Y2hpbmcgYmVsb3cgd29ya2VkIGNvcnJlY3RseSAqLwogICAgIGtleXNbMl0gPSBrU2VjTWF0Y2hMaW1pdDsKICAgICAvKiBpZGVudGl0eSBzZWFyY2hlcyBuZWVkIGEgU2VjUG9saWN5UmVmIGluIG9yZGVyIHRvIHdvcmsgKi8KLSAgICB2YWx1ZXNbM10gPSBTZWNQb2xpY3lDcmVhdGVTU0woZmFsc2UsIGxhYmVsX2NmKTsKKyAgICB2YWx1ZXNbM10gPSBTZWNQb2xpY3lDcmVhdGVTU0woZmFsc2UsIE5VTEwpOwogICAgIGtleXNbM10gPSBrU2VjTWF0Y2hQb2xpY3k7CisgICAgLyogbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlIChkb2Vzbid0IHdvcmsgaW4gbWFjT1MgMTAuMTIuMSkgKi8KKyAgICB2YWx1ZXNbNF0gPSBsYWJlbF9jZjsKKyAgICBrZXlzWzRdID0ga1NlY0F0dHJMYWJlbDsKICAgICBxdWVyeV9kaWN0ID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKE5VTEwsIChjb25zdCB2b2lkICoqKWtleXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICoqKXZhbHVlcywgNEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZDb3B5U3RyaW5nRGljdGlvbmFyeUtleUNhbGxCYWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKiopdmFsdWVzLCA1TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZDb3B5U3RyaW5nRGljdGlvbmFyeUtleUNhbGxCYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKICAgICBDRlJlbGVhc2UodmFsdWVzWzNdKTsKLSAgICBDRlJlbGVhc2UobGFiZWxfY2YpOwogCiAgICAgLyogRG8gd2UgaGF2ZSBhIG1hdGNoPyAqLwotICAgIHN0YXR1cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcocXVlcnlfZGljdCwgKENGVHlwZVJlZiAqKW91dF9jZXJ0X2FuZF9rZXkpOworICAgIHN0YXR1cyA9IFNlY0l0ZW1Db3B5TWF0Y2hpbmcocXVlcnlfZGljdCwgKENGVHlwZVJlZiAqKSAma2V5c19saXN0KTsKKworICAgIC8qIEJlY2F1c2Uga1NlY0F0dHJMYWJlbCBtYXRjaGluZyBkb2Vzbid0IHdvcmsgd2l0aCBrU2VjQ2xhc3NJZGVudGl0eSwKKyAgICAgKiB3ZSBuZWVkIHRvIGZpbmQgdGhlIGNvcnJlY3QgaWRlbnRpdHkgb3Vyc2VsdmVzICovCisgICAgaWYoc3RhdHVzID09IG5vRXJyKSB7CisgICAgICBrZXlzX2xpc3RfY291bnQgPSBDRkFycmF5R2V0Q291bnQoa2V5c19saXN0KTsKKyAgICAgICpvdXRfY2VydF9hbmRfa2V5ID0gTlVMTDsKKyAgICAgIGZvcihpPTA7IGk8a2V5c19saXN0X2NvdW50OyBpKyspIHsKKyAgICAgICAgT1NTdGF0dXMgZXJyID0gbm9FcnI7CisgICAgICAgIFNlY0NlcnRpZmljYXRlUmVmIGNlcnQgPSBOVUxMOworICAgICAgICAqb3V0X2NlcnRfYW5kX2tleSA9CisgICAgICAgICAgKFNlY0lkZW50aXR5UmVmKSBDRkFycmF5R2V0VmFsdWVBdEluZGV4KGtleXNfbGlzdCwgaSk7CisgICAgICAgIGVyciA9IFNlY0lkZW50aXR5Q29weUNlcnRpZmljYXRlKCpvdXRfY2VydF9hbmRfa2V5LCAmY2VydCk7CisgICAgICAgIGlmKGVyciA9PSBub0VycikgeworICAgICAgICAgIFNlY0NlcnRpZmljYXRlQ29weUNvbW1vbk5hbWUoY2VydCwgJmNvbW1vbl9uYW1lKTsKKyAgICAgICAgICBpZihDRlN0cmluZ0NvbXBhcmUoY29tbW9uX25hbWUsIGxhYmVsX2NmLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgQ0ZSZWxlYXNlKGNlcnQpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKGNvbW1vbl9uYW1lKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IG5vRXJyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIENGUmVsZWFzZShjb21tb25fbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgKm91dF9jZXJ0X2FuZF9rZXkgPSBOVUxMOworICAgICAgICBzdGF0dXMgPSAxOworICAgICAgICBDRlJlbGVhc2UoY2VydCk7CisgICAgICB9CisgICAgfQorCiAgICAgQ0ZSZWxlYXNlKHF1ZXJ5X2RpY3QpOworICAgIENGUmVsZWFzZShsYWJlbF9jZik7CiAgIH0KICAgZWxzZSB7CiAjaWYgQ1VSTF9TVVBQT1JUX01BQ18xMF82CiAgICAgLyogT24gTGVvcGFyZCBhbmQgU25vdyBMZW9wYXJkLCBmYWxsIGJhY2sgdG8gU2VjS2V5Y2hhaW5TZWFyY2guICovCiAgICAgc3RhdHVzID0gQ29weUlkZW50aXR5V2l0aExhYmVsT2xkU2Nob29sKGxhYmVsLCBvdXRfY2VydF9hbmRfa2V5KTsKLSNlbmRpZiAvKiBDVVJMX1NVUFBPUlRfTUFDXzEwXzcgKi8KKyNlbmRpZiAvKiBDVVJMX1NVUFBPUlRfTUFDXzEwXzYgKi8KICAgfQogI2VsaWYgQ1VSTF9TVVBQT1JUX01BQ18xMF82CiAgIC8qIEZvciBkZXZlbG9wZXJzIGJ1aWxkaW5nIG9uIG9sZGVyIGNhdHMsIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byBmYWxsIGJhY2sKQEAgLTk1NSw3ICs5OTMsNyBAQAogCiAgICAgLyogSGVyZSB3ZSBnbzogKi8KICAgICBzdGF0dXMgPSBTZWNQS0NTMTJJbXBvcnQocGtjc19kYXRhLCBvcHRpb25zLCAmaXRlbXMpOwotICAgIGlmKHN0YXR1cyA9PSBub0VyciAmJiBpdGVtcyAmJiBDRkFycmF5R2V0Q291bnQoaXRlbXMpKSB7CisgICAgaWYoc3RhdHVzID09IGVyclNlY1N1Y2Nlc3MgJiYgaXRlbXMgJiYgQ0ZBcnJheUdldENvdW50KGl0ZW1zKSkgewogICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGlkZW50aXR5X2FuZF90cnVzdCA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoaXRlbXMsIDBMKTsKICAgICAgIGNvbnN0IHZvaWQgKnRlbXBfaWRlbnRpdHkgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShpZGVudGl0eV9hbmRfdHJ1c3QsCiAgICAgICAgIGtTZWNJbXBvcnRJdGVtSWRlbnRpdHkpOwpAQCAtMTAwMiw2ICsxMDQwLDEyIEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBjdXJsX3NvY2tldF90IHNvY2tmZCA9IGNvbm4tPnNvY2tbc29ja2luZGV4XTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGJvb2wgdmVyaWZ5cGVlciA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKTsKKyAgY2hhciAqIGNvbnN0IHNzbF9jZXJ0ID0gU1NMX1NFVF9PUFRJT04oY2VydCk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOwogI2Vsc2UKQEAgLTEwNTIsNDAgKzEwOTYsNDYgQEAKICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIGJlZW4gdG9sZCB0byB1c2UgYW4gZXhwbGljaXQgU1NML1RMUyB2ZXJzaW9uICovCiAjaWYgQ1VSTF9CVUlMRF9NQUNfMTBfOCB8fCBDVVJMX0JVSUxEX0lPUwogICBpZihTU0xTZXRQcm90b2NvbFZlcnNpb25NYXggIT0gTlVMTCkgewotICAgIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxKTsKLSAgICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGNvbm5zc2wtPnNzbF9jdHgsIGtUTFNQcm90b2NvbDEyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTEpOwotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6Ci0gICAgICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrU1NMUHJvdG9jb2wzKTsKLSAgICAgICAgaWYoZXJyICE9IG5vRXJyKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoY29ubnNzbC0+c3NsX2N0eCwga1NTTFByb3RvY29sMyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6Ci0gICAgICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrU1NMUHJvdG9jb2wyKTsKLSAgICAgICAgaWYoZXJyICE9IG5vRXJyKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoY29ubnNzbC0+c3NsX2N0eCwga1NTTFByb3RvY29sMik7CisgICAgc3dpdGNoKGNvbm4tPnNzbF9jb25maWcudmVyc2lvbikgeworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMSk7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxKTsKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChjb25uc3NsLT5zc2xfY3R4LCBrVExTUHJvdG9jb2wxKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTEpOworICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGNvbm5zc2wtPnNzbF9jdHgsIGtUTFNQcm90b2NvbDExKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1RMU1Byb3RvY29sMTIpOworICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uTWF4KGNvbm5zc2wtPnNzbF9jdHgsIGtUTFNQcm90b2NvbDEyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6CisgICAgICBmYWlsZihkYXRhLCAiRGFyd2luU1NMOiBUTFMgMS4zIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CisgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25NaW4oY29ubnNzbC0+c3NsX2N0eCwga1NTTFByb3RvY29sMyk7CisgICAgICBpZihlcnIgIT0gbm9FcnIpIHsKKyAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOworICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgICB9CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25NYXgoY29ubnNzbC0+c3NsX2N0eCwga1NTTFByb3RvY29sMyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKKyAgICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbk1pbihjb25uc3NsLT5zc2xfY3R4LCBrU1NMUHJvdG9jb2wyKTsKKyAgICAgIGlmKGVyciAhPSBub0VycikgeworICAgICAgICBmYWlsZihkYXRhLCAiWW91ciB2ZXJzaW9uIG9mIHRoZSBPUyBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CisgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAgIH0KKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbk1heChjb25uc3NsLT5zc2xfY3R4LCBrU1NMUHJvdG9jb2wyKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KICAgfQogICBlbHNlIHsKQEAgLTEwOTMsODIgKzExNDMsMzcgQEAKICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU1NMUHJvdG9jb2xBbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgc3dpdGNoIChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wOgotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8xOgotICAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKLSAgICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChjb25uc3NsLT5zc2xfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgotICAgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgaWYoZXJyICE9IG5vRXJyKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MyIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgotICAgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgaWYoZXJyICE9IG5vRXJyKSB7Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwotICAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgIC8qIENVUkxfU1VQUE9SVF9NQUNfMTBfOCAqLwotICB9Ci0jZWxzZQotICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsIGtTU0xQcm90b2NvbEFsbCwgZmFsc2UpOwotICBzd2l0Y2goZGF0YS0+c2V0LnNzbC52ZXJzaW9uKSB7Ci0gICAgZGVmYXVsdDoKKyAgICBzd2l0Y2ggKGNvbm4tPnNzbF9jb25maWcudmVyc2lvbikgewogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChjb25uc3NsLT5zc2xfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzA6CiAgICAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUTFNQcm90b2NvbDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKLSAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgVExTdjEuMSIpOwotICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6Ci0gICAgICBmYWlsZihkYXRhLCAiWW91ciB2ZXJzaW9uIG9mIHRoZSBPUyBkb2VzIG5vdCBzdXBwb3J0IFRMU3YxLjIiKTsKLSAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKLSAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMiwKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgaWYoZXJyICE9IG5vRXJyKSB7Ci0gICAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKLSAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgfQogICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyAgICAgICh2b2lkKVNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1RMU1Byb3RvY29sMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIGZhaWxmKGRhdGEsICJEYXJ3aW5TU0w6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MzoKICAgICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NTTFByb3RvY29sMywKQEAgLTExNzgsMzYgKzExODMsOTEgQEAKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgICAgfQogICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjI6CisgICAgICBlcnIgPSBTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTU0xQcm90b2NvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgaWYoZXJyICE9IG5vRXJyKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKKyAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgICAgfQorI2VuZGlmICAvKiBDVVJMX1NVUFBPUlRfTUFDXzEwXzggKi8KKyAgfQorI2Vsc2UKKyAgKHZvaWQpU1NMU2V0UHJvdG9jb2xWZXJzaW9uRW5hYmxlZChjb25uc3NsLT5zc2xfY3R4LCBrU1NMUHJvdG9jb2xBbGwsIGZhbHNlKTsKKyAgc3dpdGNoKGNvbm4tPnNzbF9jb25maWcudmVyc2lvbikgeworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgorICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKKyAgICAodm9pZClTU0xTZXRQcm90b2NvbFZlcnNpb25FbmFibGVkKGNvbm5zc2wtPnNzbF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVExTUHJvdG9jb2wxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzE6CisgICAgZmFpbGYoZGF0YSwgIllvdXIgdmVyc2lvbiBvZiB0aGUgT1MgZG9lcyBub3Qgc3VwcG9ydCBUTFN2MS4xIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgorICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgVExTdjEuMiIpOworICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICBmYWlsZihkYXRhLCAiWW91ciB2ZXJzaW9uIG9mIHRoZSBPUyBkb2VzIG5vdCBzdXBwb3J0IFRMU3YxLjMiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgorICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTU0xQcm90b2NvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICBpZihlcnIgIT0gbm9FcnIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjIiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgorICAgIGVyciA9IFNTTFNldFByb3RvY29sVmVyc2lvbkVuYWJsZWQoY29ubnNzbC0+c3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTU0xQcm90b2NvbDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICBpZihlcnIgIT0gbm9FcnIpIHsKKyAgICAgIGZhaWxmKGRhdGEsICJZb3VyIHZlcnNpb24gb2YgdGhlIE9TIGRvZXMgbm90IHN1cHBvcnQgU1NMdjMiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF84IHx8IENVUkxfQlVJTERfSU9TICovCiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSkgeworICBpZihTU0xfU0VUX09QVElPTihrZXkpKSB7CiAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IFNTTDogQ1VSTE9QVF9TU0xLRVkgaXMgaWdub3JlZCBieSBTZWN1cmUgIgotICAgICAgICAgICAgICAgICJUcmFuc3BvcnQuIFRoZSBwcml2YXRlIGtleSBtdXN0IGJlIGluIHRoZSBLZXljaGFpbi5cbiIpOworICAgICAgICAgICJUcmFuc3BvcnQuIFRoZSBwcml2YXRlIGtleSBtdXN0IGJlIGluIHRoZSBLZXljaGFpbi5cbiIpOwogICB9CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pIHsKKyAgaWYoc3NsX2NlcnQpIHsKICAgICBTZWNJZGVudGl0eVJlZiBjZXJ0X2FuZF9rZXkgPSBOVUxMOwotICAgIGJvb2wgaXNfY2VydF9maWxlID0gaXNfZmlsZShkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSk7CisgICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jZXJ0KTsKIAogICAgIC8qIFVzZXIgd2FudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydC4gTG9vayBmb3IgaXQ6CiAgICAgICAgSWYgd2UgZGV0ZWN0IHRoYXQgdGhpcyBpcyBhIGZpbGUgb24gZGlzaywgdGhlbiBsZXQncyBsb2FkIGl0LgogICAgICAgIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gdXNlIGFuIGlkZW50aXR5IGxvYWRlZAogICAgICAgIGZyb20gdGhlIEtleWNoYWluLiAqLwogICAgIGlmKGlzX2NlcnRfZmlsZSkgewotICAgICAgaWYoIWRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pCisgICAgICBpZighU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSkKICAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IFNTTDogQ2VydGlmaWNhdGUgdHlwZSBub3Qgc2V0LCBhc3N1bWluZyAiCiAgICAgICAgICAgICAgICAgICAgICJQS0NTIzEyIGZvcm1hdC5cbiIpOwotICAgICAgZWxzZSBpZihzdHJuY21wKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0sICJQMTIiLAotICAgICAgICBzdHJsZW4oZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFXSkpICE9IDApCisgICAgICBlbHNlIGlmKHN0cm5jbXAoU1NMX1NFVF9PUFRJT04oY2VydF90eXBlKSwgIlAxMiIsCisgICAgICAgIHN0cmxlbihTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKSkgIT0gMCkKICAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IFNTTDogVGhlIFNlY3VyaXR5IGZyYW1ld29yayBvbmx5IHN1cHBvcnRzICIKICAgICAgICAgICAgICAgICAgICAgImxvYWRpbmcgaWRlbnRpdGllcyB0aGF0IGFyZSBpbiBQS0NTIzEyIGZvcm1hdC5cbiIpOwogCi0gICAgICBlcnIgPSBDb3B5SWRlbnRpdHlGcm9tUEtDUzEyRmlsZShkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKLSAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0sICZjZXJ0X2FuZF9rZXkpOworICAgICAgZXJyID0gQ29weUlkZW50aXR5RnJvbVBLQ1MxMkZpbGUoc3NsX2NlcnQsCisgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpLCAmY2VydF9hbmRfa2V5KTsKICAgICB9CiAgICAgZWxzZQotICAgICAgZXJyID0gQ29weUlkZW50aXR5V2l0aExhYmVsKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLCAmY2VydF9hbmRfa2V5KTsKKyAgICAgIGVyciA9IENvcHlJZGVudGl0eVdpdGhMYWJlbChzc2xfY2VydCwgJmNlcnRfYW5kX2tleSk7CiAKICAgICBpZihlcnIgPT0gbm9FcnIpIHsKICAgICAgIFNlY0NlcnRpZmljYXRlUmVmIGNlcnQgPSBOVUxMOwpAQCAtMTI0NiwyNyArMTMwNiwyNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgIHN3aXRjaChlcnIpIHsKLSAgICAgICAgY2FzZSBlcnJTZWNBdXRoRmFpbGVkOiBjYXNlIC0yNTI2NDogLyogZXJyU2VjUGtjczEyVmVyaWZ5RmFpbHVyZSAqLwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IEluY29ycmVjdCBwYXNzd29yZCBmb3IgdGhlIGNlcnRpZmljYXRlIFwiJXNcIiAiCi0gICAgICAgICAgICAgICAgICAgICAgImFuZCBpdHMgcHJpdmF0ZSBrZXkuIiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIC0yNjI3NTogLyogZXJyU2VjRGVjb2RlICovIGNhc2UgLTI1MjU3OiAvKiBlcnJTZWNVbmtub3duRm9ybWF0ICovCi0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogQ291bGRuJ3QgbWFrZSBzZW5zZSBvZiB0aGUgZGF0YSBpbiB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSBcIiVzXCIgYW5kIGl0cyBwcml2YXRlIGtleS4iLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAtMjUyNjA6IC8qIGVyclNlY1Bhc3NwaHJhc2VSZXF1aXJlZCAqLwotICAgICAgICAgIGZhaWxmKGRhdGEsICJTU0wgVGhlIGNlcnRpZmljYXRlIFwiJXNcIiByZXF1aXJlcyBhIHBhc3N3b3JkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGVyclNlY0l0ZW1Ob3RGb3VuZDoKLSAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDYW4ndCBmaW5kIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgYW5kIGl0cyBwcml2YXRlICIKLSAgICAgICAgICAgICAgICAgICAgICAia2V5IGluIHRoZSBLZXljaGFpbi4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogQ2FuJ3QgbG9hZCB0aGUgY2VydGlmaWNhdGUgXCIlc1wiIGFuZCBpdHMgcHJpdmF0ZSAiCi0gICAgICAgICAgICAgICAgICAgICAgImtleTogT1NTdGF0dXMgJWQiLCBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwgZXJyKTsKLSAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgZXJyU2VjQXV0aEZhaWxlZDogY2FzZSAtMjUyNjQ6IC8qIGVyclNlY1BrY3MxMlZlcmlmeUZhaWx1cmUgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogSW5jb3JyZWN0IHBhc3N3b3JkIGZvciB0aGUgY2VydGlmaWNhdGUgXCIlc1wiICIKKyAgICAgICAgICAgICAgICAgICAgImFuZCBpdHMgcHJpdmF0ZSBrZXkuIiwgc3NsX2NlcnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgLTI2Mjc1OiAvKiBlcnJTZWNEZWNvZGUgKi8gY2FzZSAtMjUyNTc6IC8qIGVyclNlY1Vua25vd25Gb3JtYXQgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTDogQ291bGRuJ3QgbWFrZSBzZW5zZSBvZiB0aGUgZGF0YSBpbiB0aGUgIgorICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUgXCIlc1wiIGFuZCBpdHMgcHJpdmF0ZSBrZXkuIiwKKyAgICAgICAgICAgICAgICAgICAgc3NsX2NlcnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgLTI1MjYwOiAvKiBlcnJTZWNQYXNzcGhyYXNlUmVxdWlyZWQgKi8KKyAgICAgICAgZmFpbGYoZGF0YSwgIlNTTCBUaGUgY2VydGlmaWNhdGUgXCIlc1wiIHJlcXVpcmVzIGEgcGFzc3dvcmQuIiwKKyAgICAgICAgICAgICAgICAgICAgc3NsX2NlcnQpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgZXJyU2VjSXRlbU5vdEZvdW5kOgorICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDYW4ndCBmaW5kIHRoZSBjZXJ0aWZpY2F0ZSBcIiVzXCIgYW5kIGl0cyBwcml2YXRlICIKKyAgICAgICAgICAgICAgICAgICAgImtleSBpbiB0aGUgS2V5Y2hhaW4uIiwgc3NsX2NlcnQpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IENhbid0IGxvYWQgdGhlIGNlcnRpZmljYXRlIFwiJXNcIiBhbmQgaXRzIHByaXZhdGUgIgorICAgICAgICAgICAgICAgICAgICAia2V5OiBPU1N0YXR1cyAlZCIsIHNzbF9jZXJ0LCBlcnIpOworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgfQpAQCAtMTI5Nyw4ICsxMzU3LDcgQEAKICNlbHNlCiAgIGlmKFNTTFNldFNlc3Npb25PcHRpb24gIT0gTlVMTCkgewogI2VuZGlmIC8qIENVUkxfQlVJTERfTUFDICovCi0gICAgYm9vbCBicmVha19vbl9hdXRoID0gIWRhdGEtPnNldC5zc2wudmVyaWZ5cGVlciB8fAotICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV07CisgICAgYm9vbCBicmVha19vbl9hdXRoID0gIWNvbm4tPnNzbF9jb25maWcudmVyaWZ5cGVlciB8fCBzc2xfY2FmaWxlOwogICAgIGVyciA9IFNTTFNldFNlc3Npb25PcHRpb24oY29ubnNzbC0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTU0xTZXNzaW9uT3B0aW9uQnJlYWtPblNlcnZlckF1dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha19vbl9hdXRoKTsKQEAgLTEzMTAsNyArMTM2OSw3IEBACiAgIGVsc2UgewogI2lmIENVUkxfU1VQUE9SVF9NQUNfMTBfOAogICAgIGVyciA9IFNTTFNldEVuYWJsZUNlcnRWZXJpZnkoY29ubnNzbC0+c3NsX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcj90cnVlOmZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNzbF9jb25maWcudmVyaWZ5cGVlcj90cnVlOmZhbHNlKTsKICAgICBpZihlcnIgIT0gbm9FcnIpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTFNldEVuYWJsZUNlcnRWZXJpZnkoKSBmYWlsZWQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTEzMTksMjIgKzEzNzgsMjEgQEAKICAgfQogI2Vsc2UKICAgZXJyID0gU1NMU2V0RW5hYmxlQ2VydFZlcmlmeShjb25uc3NsLT5zc2xfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcj90cnVlOmZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5zc2xfY29uZmlnLnZlcmlmeXBlZXI/dHJ1ZTpmYWxzZSk7CiAgIGlmKGVyciAhPSBub0VycikgewogICAgIGZhaWxmKGRhdGEsICJTU0w6IFNTTFNldEVuYWJsZUNlcnRWZXJpZnkoKSBmYWlsZWQ6IE9TU3RhdHVzICVkIiwgZXJyKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KICNlbmRpZiAvKiBDVVJMX0JVSUxEX01BQ18xMF82IHx8IENVUkxfQlVJTERfSU9TICovCiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0pIHsKLSAgICBib29sIGlzX2NlcnRfZmlsZSA9IGlzX2ZpbGUoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0pOworICBpZihzc2xfY2FmaWxlKSB7CisgICAgYm9vbCBpc19jZXJ0X2ZpbGUgPSBpc19maWxlKHNzbF9jYWZpbGUpOwogCiAgICAgaWYoIWlzX2NlcnRfZmlsZSkgewotICAgICAgZmFpbGYoZGF0YSwgIlNTTDogY2FuJ3QgbG9hZCBDQSBjZXJ0aWZpY2F0ZSBmaWxlICVzIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdKTsKKyAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNhbid0IGxvYWQgQ0EgY2VydGlmaWNhdGUgZmlsZSAlcyIsIHNzbF9jYWZpbGUpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICB9Ci0gICAgaWYoIWRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgIGlmKCF2ZXJpZnlwZWVyKSB7CiAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDQSBjZXJ0aWZpY2F0ZSBzZXQsIGJ1dCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gIgogICAgICAgICAgICAgImlzIGRpc2FibGVkIik7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC0xMzQ0LDIyICsxNDAyLDIyIEBACiAgIC8qIENvbmZpZ3VyZSBob3N0bmFtZSBjaGVjay4gU05JIGlzIHVzZWQgaWYgYXZhaWxhYmxlLgogICAgKiBCb3RoIGhvc3RuYW1lIGNoZWNrIGFuZCBTTkkgcmVxdWlyZSBTU0xTZXRQZWVyRG9tYWluTmFtZSgpLgogICAgKiBBbHNvOiB0aGUgdmVyaWZ5aG9zdCBzZXR0aW5nIGluZmx1ZW5jZXMgU05JIHVzYWdlICovCi0gIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCkgewotICAgIGVyciA9IFNTTFNldFBlZXJEb21haW5OYW1lKGNvbm5zc2wtPnNzbF9jdHgsIGNvbm4tPmhvc3QubmFtZSwKLSAgICBzdHJsZW4oY29ubi0+aG9zdC5uYW1lKSk7CisgIGlmKGNvbm4tPnNzbF9jb25maWcudmVyaWZ5aG9zdCkgeworICAgIGVyciA9IFNTTFNldFBlZXJEb21haW5OYW1lKGNvbm5zc2wtPnNzbF9jdHgsIGhvc3RuYW1lLAorICAgIHN0cmxlbihob3N0bmFtZSkpOwogCiAgICAgaWYoZXJyICE9IG5vRXJyKSB7CiAgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogU1NMOiBTU0xTZXRQZWVyRG9tYWluTmFtZSgpIGZhaWxlZDogT1NTdGF0dXMgJWRcbiIsCiAgICAgICAgICAgICBlcnIpOwogICAgIH0KIAotICAgIGlmKChDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkKKyAgICBpZigoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZhZGRyKSkKICAgI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgfHwgKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkKKyAgICB8fCAoQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcikpCiAgICNlbmRpZgogICAgICAgICkgewotICAgICAgICAgaW5mb2YoZGF0YSwgIldBUk5JTkc6IHVzaW5nIElQIGFkZHJlc3MsIFNOSSBpcyBiZWluZyBkaXNhYmxlZCBieSAiCi0gICAgICAgICAidGhlIE9TLlxuIik7CisgICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogdXNpbmcgSVAgYWRkcmVzcywgU05JIGlzIGJlaW5nIGRpc2FibGVkIGJ5ICIKKyAgICAgICAgICAgICJ0aGUgT1MuXG4iKTsKICAgICB9CiAgIH0KIApAQCAtMTM4Miw3ICsxNDQwLDcgQEAKICAgICAgICAgcnVubmluZyBpbiBhbiBhZmZlY3RlZCB2ZXJzaW9uIG9mIE9TIFguICovCiAgICAgICBpZihkYXJ3aW52ZXJfbWFqID09IDEyICYmIGRhcndpbnZlcl9taW4gPD0gMyAmJgogICAgICAgICAgYWxsX2NpcGhlcnNbaV0gPj0gMHhDMDAxICYmIGFsbF9jaXBoZXJzW2ldIDw9IDB4QzAzMikgewotICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGludWU7CiAgICAgICB9CiAjZW5kaWYgLyogQ1VSTF9CVUlMRF9NQUMgKi8KICAgICAgIHN3aXRjaChhbGxfY2lwaGVyc1tpXSkgewpAQCAtMTQzOCw2ICsxNDk2LDE2IEBACiAgICAgICAgIC8qIERpc2FibGUgSURFQTogKi8KICAgICAgICAgY2FzZSBTU0xfUlNBX1dJVEhfSURFQV9DQkNfU0hBOgogICAgICAgICBjYXNlIFNTTF9SU0FfV0lUSF9JREVBX0NCQ19NRDU6CisgICAgICAgIC8qIERpc2FibGUgUkM0OiAqLworICAgICAgICBjYXNlIFNTTF9SU0FfV0lUSF9SQzRfMTI4X01ENToKKyAgICAgICAgY2FzZSBTU0xfUlNBX1dJVEhfUkM0XzEyOF9TSEE6CisgICAgICAgIGNhc2UgMHhDMDAyOiAvKiBUTFNfRUNESF9FQ0RTQV9XSVRIX1JDNF8xMjhfU0hBICovCisgICAgICAgIGNhc2UgMHhDMDA3OiAvKiBUTFNfRUNESEVfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSovCisgICAgICAgIGNhc2UgMHhDMDBDOiAvKiBUTFNfRUNESF9SU0FfV0lUSF9SQzRfMTI4X1NIQSAqLworICAgICAgICBjYXNlIDB4QzAxMTogLyogVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBICovCisgICAgICAgIGNhc2UgMHgwMDhBOiAvKiBUTFNfUFNLX1dJVEhfUkM0XzEyOF9TSEEgKi8KKyAgICAgICAgY2FzZSAweDAwOEU6IC8qIFRMU19ESEVfUFNLX1dJVEhfUkM0XzEyOF9TSEEgKi8KKyAgICAgICAgY2FzZSAweDAwOTI6IC8qIFRMU19SU0FfUFNLX1dJVEhfUkM0XzEyOF9TSEEgKi8KICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogLyogZW5hYmxlIGV2ZXJ5dGhpbmcgZWxzZSAqLwogICAgICAgICAgIGFsbG93ZWRfY2lwaGVyc1thbGxvd2VkX2NpcGhlcnNfY291bnQrK10gPSBhbGxfY2lwaGVyc1tpXTsKQEAgLTE0NjQsMjEgKzE1MzIsMjIgQEAKICAgLyogV2Ugd2FudCB0byBlbmFibGUgMS9uLTEgd2hlbiB1c2luZyBhIENCQyBjaXBoZXIgdW5sZXNzIHRoZSB1c2VyCiAgICAgIHNwZWNpZmljYWxseSBkb2Vzbid0IHdhbnQgdXMgZG9pbmcgdGhhdDogKi8KICAgaWYoU1NMU2V0U2Vzc2lvbk9wdGlvbiAhPSBOVUxMKSB7CisgICAgLyogVE9ETyBzL2RhdGEtPnNldC5zc2wuZW5hYmxlX2JlYXN0L1NTTF9TRVRfT1BUSU9OKGVuYWJsZV9iZWFzdCkvZyAqLwogICAgIFNTTFNldFNlc3Npb25PcHRpb24oY29ubnNzbC0+c3NsX2N0eCwga1NTTFNlc3Npb25PcHRpb25TZW5kT25lQnl0ZVJlY29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAhZGF0YS0+c2V0LnNzbF9lbmFibGVfYmVhc3QpOworICAgICAgICAgICAgICAgICAgICAgICFkYXRhLT5zZXQuc3NsLmVuYWJsZV9iZWFzdCk7CiAgICAgU1NMU2V0U2Vzc2lvbk9wdGlvbihjb25uc3NsLT5zc2xfY3R4LCBrU1NMU2Vzc2lvbk9wdGlvbkZhbHNlU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5mYWxzZXN0YXJ0KTsgLyogZmFsc2Ugc3RhcnQgc3VwcG9ydCAqLwogICB9CiAjZW5kaWYgLyogQ1VSTF9CVUlMRF9NQUNfMTBfOSB8fCBDVVJMX0JVSUxEX0lPU183ICovCiAKICAgLyogQ2hlY2sgaWYgdGhlcmUncyBhIGNhY2hlZCBJRCB3ZSBjYW4vc2hvdWxkIHVzZSBoZXJlISAqLwotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgY2hhciAqc3NsX3Nlc3Npb25pZDsKICAgICBzaXplX3Qgc3NsX3Nlc3Npb25pZF9sZW47CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKICAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICh2b2lkICoqKSZzc2xfc2Vzc2lvbmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbF9zZXNzaW9uaWRfbGVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNzbF9zZXNzaW9uaWRfbGVuLCBzb2NraW5kZXgpKSB7CiAgICAgICAvKiB3ZSBnb3QgYSBzZXNzaW9uIGlkLCB1c2UgaXQhICovCiAgICAgICBlcnIgPSBTU0xTZXRQZWVySUQoY29ubnNzbC0+c3NsX2N0eCwgc3NsX3Nlc3Npb25pZCwgc3NsX3Nlc3Npb25pZF9sZW4pOwogICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKQEAgLTE0OTQsOSArMTU2Myw4IEBACiAgICAgZWxzZSB7CiAgICAgICBDVVJMY29kZSByZXN1bHQ7CiAgICAgICBzc2xfc2Vzc2lvbmlkID0KLSAgICAgICAgYXByaW50ZigiJXM6JWQ6JWQ6JXM6JWh1IiwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0sCi0gICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyLCBkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QsCi0gICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCk7CisgICAgICAgIGFwcmludGYoIiVzOiVkOiVkOiVzOiVodSIsIHNzbF9jYWZpbGUsCisgICAgICAgICAgICAgICAgdmVyaWZ5cGVlciwgU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpLCBob3N0bmFtZSwgcG9ydCk7CiAgICAgICBzc2xfc2Vzc2lvbmlkX2xlbiA9IHN0cmxlbihzc2xfc2Vzc2lvbmlkKTsKIAogICAgICAgZXJyID0gU1NMU2V0UGVlcklEKGNvbm5zc2wtPnNzbF9jdHgsIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKQEAgLTE1MDYsNyArMTU3NCw4IEBACiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KIAotICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIHNzbF9zZXNzaW9uaWQsIHNzbF9zZXNzaW9uaWRfbGVuKTsKKyAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBzc2xfc2Vzc2lvbmlkLCBzc2xfc2Vzc2lvbmlkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpOwogICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIHN0b3JlIHNzbCBzZXNzaW9uIik7CkBAIC0xODMyLDYgKzE5MDEsOCBAQAogICBPU1N0YXR1cyBlcnI7CiAgIFNTTENpcGhlclN1aXRlIGNpcGhlcjsKICAgU1NMUHJvdG9jb2wgcHJvdG9jb2wgPSAwOworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CiAKICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMiA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlCiAgICAgICAgICAgICAgIHx8IHNzbF9jb25uZWN0XzJfcmVhZGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlCkBAIC0xODUwLDggKzE5MjEsOCBAQAogICAgICAgLyogVGhlIGJlbG93IGlzIGVyclNTTFNlcnZlckF1dGhDb21wbGV0ZWQ7IGl0J3Mgbm90IGRlZmluZWQgaW4KICAgICAgICAgTGVvcGFyZCdzIGhlYWRlcnMgKi8KICAgICAgIGNhc2UgLTk4NDE6Ci0gICAgICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdKSB7Ci0gICAgICAgICAgaW50IHJlcyA9IHZlcmlmeV9jZXJ0KGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdLCBkYXRhLAorICAgICAgICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSkgeworICAgICAgICAgIGludCByZXMgPSB2ZXJpZnlfY2VydChTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSwgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubnNzbC0+c3NsX2N0eCk7CiAgICAgICAgICAgaWYocmVzICE9IENVUkxFX09LKQogICAgICAgICAgICAgcmV0dXJuIHJlczsKQEAgLTE5MjAsNyArMTk5MSw3IEBACiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIFNTTCBwcm90b2NvbCBlcnJvciBpbiBjb25uZWN0aW9uIHRvICVzOiVkIiwKLSAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBlcnIpOworICAgICAgICAgICAgICBob3N0bmFtZSwgZXJyKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KICAgfQpAQCAtMjE0MCw3ICsyMjExLDggQEAKICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09CiAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtMjI2Miw4ICsyMzM0LDcgQEAKIAogICByYyA9IDA7CiAKLSAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOworICB3aGF0ID0gU09DS0VUX1JFQURBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOwogCiAgIGZvcig7OykgewogICAgIGlmKHdoYXQgPCAwKSB7CkBAIC0yMjkxLDcgKzIzNjIsNyBAQAogICAgIGlmKG5yZWFkIDw9IDApCiAgICAgICBicmVhazsKIAotICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShjb25uLT5zb2NrW3NvY2tpbmRleF0sIENVUkxfU09DS0VUX0JBRCwgMCk7CisgICAgd2hhdCA9IFNPQ0tFVF9SRUFEQUJMRShjb25uLT5zb2NrW3NvY2tpbmRleF0sIDApOwogICB9CiAKICAgcmV0dXJuIHJjOwpAQCAtMjM4MCw3ICsyNDUxLDggQEAKICAgKHZvaWQpQ0NfTUQ1KHRtcCwgKENDX0xPTkcpdG1wbGVuLCBtZDVzdW0pOwogfQogCi1ib29sIEN1cmxfZGFyd2luc3NsX2ZhbHNlX3N0YXJ0KHZvaWQpIHsKK2Jvb2wgQ3VybF9kYXJ3aW5zc2xfZmFsc2Vfc3RhcnQodm9pZCkKK3sKICNpZiBDVVJMX0JVSUxEX01BQ18xMF85IHx8IENVUkxfQlVJTERfSU9TXzcKICAgaWYoU1NMU2V0U2Vzc2lvbk9wdGlvbiAhPSBOVUxMKQogICAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvbGliL3Z0bHMvZ3NraXQuYyBiL2xpYi92dGxzL2dza2l0LmMKaW5kZXggNTVhNTVlZi4uNmNhYzk1NyAxMDA2NDQKLS0tIGEvbGliL3Z0bHMvZ3NraXQuYworKysgYi9saWIvdnRscy9nc2tpdC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAidnRscy5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIgLyogZm9yIHRoZSBjb25uZWN0IHRpbWVvdXQgKi8KICNpbmNsdWRlICJzZWxlY3QuaCIKLSNpbmNsdWRlICJzdHJlcXVhbC5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ4NTA5YXNuMS5oIgogI2luY2x1ZGUgImN1cmxfcHJpbnRmLmgiCiAKQEAgLTgxLDYgKzgxLDEwIEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogCisvKiBEaXJlY3Rpb25zLiAqLworI2RlZmluZSBTT1NfUkVBRCAgICAgICAgMHgwMQorI2RlZmluZSBTT1NfV1JJVEUgICAgICAgMHgwMgorCiAvKiBTU0wgdmVyc2lvbiBmbGFncy4gKi8KICNkZWZpbmUgQ1VSTF9HU0tQUk9UT19TU0xWMiAgICAgMAogI2RlZmluZSBDVVJMX0dTS1BST1RPX1NTTFYyX01BU0sgICAgICAgICgxIDw8IENVUkxfR1NLUFJPVE9fU1NMVjIpCkBAIC0yODksMTAgKzI5MywxMSBAQAogfQogCiAKLXN0YXRpYyBDVVJMY29kZSBzZXRfY2lwaGVycyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorc3RhdGljIENVUkxjb2RlIHNldF9jaXBoZXJzKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2tfaGFuZGxlIGgsIHVuc2lnbmVkIGludCAqcHJvdG9mbGFncykKIHsKLSAgY29uc3QgY2hhciAqY2lwaGVybGlzdCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVJfTElTVF07CisgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOworICBjb25zdCBjaGFyICpjaXBoZXJsaXN0ID0gU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KTsKICAgY29uc3QgY2hhciAqY2xwOwogICBjb25zdCBnc2tpdF9jaXBoZXIgKmN0cDsKICAgaW50IGk7CkBAIC0zNDAsNyArMzQ1LDcgQEAKICAgICAgIGJyZWFrOwogICAgIC8qIFNlYXJjaCB0aGUgY2lwaGVyIGluIG91ciB0YWJsZS4gKi8KICAgICBmb3IoY3RwID0gY2lwaGVydGFibGU7IGN0cC0+bmFtZTsgY3RwKyspCi0gICAgICBpZihzdHJuZXF1YWwoY3RwLT5uYW1lLCBjbHAsIGwpICYmICFjdHAtPm5hbWVbbF0pCisgICAgICBpZihzdHJuY2FzZWNvbXBhcmUoY3RwLT5uYW1lLCBjbHAsIGwpICYmICFjdHAtPm5hbWVbbF0pCiAgICAgICAgIGJyZWFrOwogICAgIGlmKCFjdHAtPm5hbWUpIHsKICAgICAgIGZhaWxmKGRhdGEsICJVbmtub3duIGNpcGhlciAlLipzIiwgbCwgY2xwKTsKQEAgLTUwMCwxNyArNTA1LDE5NSBAQAogICBjb25uc3NsLT5pb2Nwb3J0ID0gLTE7CiB9CiAKKy8qIFNTTCBvdmVyIFNTTAorICogUHJvYmxlbXM6CisgKiAxKSBHU0tpdCBjYW4gb25seSBwZXJmb3JtIFNTTCBvbiBhbiBBRl9JTkVUIG9yIEFGX0lORVQ2IHN0cmVhbSBzb2NrZXQuIFRvCisgKiAgICBwaXBlIGFuIFNTTCBzdHJlYW0gaW50byBhbm90aGVyLCBpdCBpcyB0aGVyZWZvcmUgbmVlZGVkIHRvIGhhdmUgYSBwYWlyCisgKiAgICBvZiBzdWNoIGNvbW11bmljYXRpbmcgc29ja2V0cyBhbmQgaGFuZGxlIHRoZSBwaXBlbGluaW5nIGV4cGxpY2l0bHkuCisgKiAyKSBPUy80MDAgc29ja2V0cGFpcigpIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIGRvbWFpbiBBRl9VTklYLCB0aHVzIGNhbm5vdAorICogICAgYmUgdXNlZCB0byBwcm9kdWNlIHRoZSBwaXBlbGluZS4KKyAqIFRoZSBzb2x1dGlvbiBpcyB0byBzaW11bGF0ZSBzb2NrZXRwYWlyKCkgZm9yIEFGX0lORVQgd2l0aCBsb3ctbGV2ZWwgQVBJCisgKiAgICBsaXN0ZW4oKSwgYmluZCgpIGFuZCBjb25uZWN0KCkuCisgKi8KIAotc3RhdGljIHZvaWQgY2xvc2Vfb25lKHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEpCitzdGF0aWMgaW50CitpbmV0c29ja2V0cGFpcihpbnQgc3ZbMl0pCiB7Ci0gIGlmKGNvbm4tPmhhbmRsZSkgewotICAgIGdza2l0X3N0YXR1cyhkYXRhLCBnc2tfc2VjdXJlX3NvY19jbG9zZSgmY29ubi0+aGFuZGxlKSwKLSAgICAgICAgICAgICAgImdza19zZWN1cmVfc29jX2Nsb3NlKCkiLCAwKTsKLSAgICBjb25uLT5oYW5kbGUgPSAoZ3NrX2hhbmRsZSkgTlVMTDsKKyAgaW50IGxmZDsgICAgICAvKiBMaXN0ZW5pbmcgc29ja2V0LiAqLworICBpbnQgc2ZkOyAgICAgIC8qIFNlcnZlciBzb2NrZXQuICovCisgIGludCBjZmQ7ICAgICAgLyogQ2xpZW50IHNvY2tldC4gKi8KKyAgaW50IGxlbjsKKyAgc3RydWN0IHNvY2thZGRyX2luIGFkZHIxOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjI7CisKKyAgLyogQ3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgb24gYSBsb2NhbCBkeW5hbWljIHBvcnQuICovCisgIGxmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgIGlmKGxmZCA8IDApCisgICAgcmV0dXJuIC0xOworICBtZW1zZXQoKGNoYXIgKikgJmFkZHIxLCAwLCBzaXplb2YgYWRkcjEpOworICBhZGRyMS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgYWRkcjEuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgYWRkcjEuc2luX3BvcnQgPSAwOworICBpZihiaW5kKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsIHNpemVvZiBhZGRyMSkgfHwKKyAgICAgbGlzdGVuKGxmZCwgMikgPCAwKSB7CisgICAgY2xvc2UobGZkKTsKKyAgICByZXR1cm4gLTE7CiAgIH0KLSAgaWYoY29ubi0+aW9jcG9ydCA+PSAwKQotICAgIGNsb3NlX2FzeW5jX2hhbmRzaGFrZShjb25uKTsKKworICAvKiBHZXQgdGhlIGFsbG9jYXRlZCBwb3J0LiAqLworICBsZW4gPSBzaXplb2YgYWRkcjE7CisgIGlmKGdldHNvY2tuYW1lKGxmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkcjEsICZsZW4pIDwgMCkgeworICAgIGNsb3NlKGxmZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogQ3JlYXRlIHRoZSBjbGllbnQgc29ja2V0LiAqLworICBjZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworICBpZihjZmQgPCAwKSB7CisgICAgY2xvc2UobGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBSZXF1ZXN0IHVuYmxvY2tpbmcgY29ubmVjdGlvbiB0byB0aGUgbGlzdGVuaW5nIHNvY2tldC4gKi8KKyAgY3VybHhfbm9uYmxvY2soY2ZkLCBUUlVFKTsKKyAgaWYoY29ubmVjdChjZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIxLCBzaXplb2YgYWRkcjEpIDwgMCAmJgorICAgICBlcnJubyAhPSBFSU5QUk9HUkVTUykgeworICAgIGNsb3NlKGxmZCk7CisgICAgY2xvc2UoY2ZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvKiBHZXQgdGhlIGNsaWVudCBkeW5hbWljIHBvcnQgZm9yIGludHJ1c2lvbiBjaGVjayBiZWxvdy4gKi8KKyAgbGVuID0gc2l6ZW9mIGFkZHIyOworICBpZihnZXRzb2NrbmFtZShjZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIyLCAmbGVuKSA8IDApIHsKKyAgICBjbG9zZShsZmQpOworICAgIGNsb3NlKGNmZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLyogQWNjZXB0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIGFuZCBnZXQgdGhlIHNlcnZlciBzb2NrZXQuICovCisgIGN1cmx4X25vbmJsb2NrKGxmZCwgVFJVRSk7CisgIGZvcig7OykgeworICAgIGxlbiA9IHNpemVvZiBhZGRyMTsKKyAgICBzZmQgPSBhY2NlcHQobGZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyMSwgJmxlbik7CisgICAgaWYoc2ZkIDwgMCkgeworICAgICAgY2xvc2UobGZkKTsKKyAgICAgIGNsb3NlKGNmZCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHBvc3NpYmxlIGludHJ1c2lvbiBmcm9tIGFuIGV4dGVybmFsIHByb2Nlc3MuICovCisgICAgaWYoYWRkcjEuc2luX2FkZHIuc19hZGRyID09IGFkZHIyLnNpbl9hZGRyLnNfYWRkciAmJgorICAgICAgIGFkZHIxLnNpbl9wb3J0ID09IGFkZHIyLnNpbl9wb3J0KQorICAgICAgYnJlYWs7CisKKyAgICAvKiBJbnRydXNpb246IHJlamVjdCBpbmNvbWluZyBjb25uZWN0aW9uLiAqLworICAgIGNsb3NlKHNmZCk7CisgIH0KKworICAvKiBEb25lLCByZXR1cm4gc29ja2V0cyBhbmQgc3VjY2VlZC4gKi8KKyAgY2xvc2UobGZkKTsKKyAgY3VybHhfbm9uYmxvY2soY2ZkLCBGQUxTRSk7CisgIHN2WzBdID0gY2ZkOworICBzdlsxXSA9IHNmZDsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlwZV9zc2xvdmVyc3NsKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb25zKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5wcm94eXNzbCA9ICZjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XTsKKyAgZmRfc2V0IGZkc19yZWFkOworICBmZF9zZXQgZmRzX3dyaXRlOworICBpbnQgbjsKKyAgaW50IG07CisgIGludCBpOworICBpbnQgcmV0ID0gMDsKKyAgc3RydWN0IHRpbWV2YWwgdHYgPSB7MCwgMH07CisgIGNoYXIgYnVmW0NVUkxfTUFYX1dSSVRFX1NJWkVdOworCisgIGlmKCFjb25uc3NsLT51c2UgfHwgIWNvbm5wcm94eXNzbC0+dXNlKQorICAgIHJldHVybiAwOyAgIC8qIE5vIFNTTCBvdmVyIFNTTDogT0suICovCisKKyAgRkRfWkVSTygmZmRzX3JlYWQpOworICBGRF9aRVJPKCZmZHNfd3JpdGUpOworICBuID0gLTE7CisgIGlmKGRpcmVjdGlvbnMgJiBTT1NfUkVBRCkgeworICAgIEZEX1NFVChjb25uc3NsLT5yZW1vdGVmZCwgJmZkc193cml0ZSk7CisgICAgbiA9IGNvbm5zc2wtPnJlbW90ZWZkOworICB9CisgIGlmKGRpcmVjdGlvbnMgJiBTT1NfV1JJVEUpIHsKKyAgICBGRF9TRVQoY29ubnNzbC0+cmVtb3RlZmQsICZmZHNfcmVhZCk7CisgICAgbiA9IGNvbm5zc2wtPnJlbW90ZWZkOworICAgIEZEX1NFVChjb25uLT5zb2NrW3NvY2tpbmRleF0sICZmZHNfd3JpdGUpOworICAgIGlmKG4gPCBjb25uLT5zb2NrW3NvY2tpbmRleF0pCisgICAgICBuID0gY29ubi0+c29ja1tzb2NraW5kZXhdOworICB9CisgIGkgPSBzZWxlY3QobiArIDEsICZmZHNfcmVhZCwgJmZkc193cml0ZSwgTlVMTCwgJnR2KTsKKyAgaWYoaSA8IDApCisgICAgcmV0dXJuIC0xOyAgLyogU2VsZWN0IGVycm9yLiAqLworCisgIGlmKEZEX0lTU0VUKGNvbm5zc2wtPnJlbW90ZWZkLCAmZmRzX3dyaXRlKSkgeworICAgIC8qIFRyeSBnZXR0aW5nIGRhdGEgZnJvbSBIVFRQUyBwcm94eSBhbmQgcGlwZSBpdCB1cHN0cmVhbS4gKi8KKyAgICBuID0gMDsKKyAgICBpID0gZ3NrX3NlY3VyZV9zb2NfcmVhZChjb25ucHJveHlzc2wtPmhhbmRsZSwgYnVmLCBzaXplb2YgYnVmLCAmbik7CisgICAgc3dpdGNoKGkpIHsKKyAgICBjYXNlIEdTS19PSzoKKyAgICAgIGlmKG4pIHsKKyAgICAgICAgaSA9IHdyaXRlKGNvbm5zc2wtPnJlbW90ZWZkLCBidWYsIG4pOworICAgICAgICBpZihpIDwgMCkKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldCA9IDE7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEdTS19PUzQwMF9FUlJPUl9USU1FRF9PVVQ6CisgICAgY2FzZSBHU0tfV09VTERfQkxPQ0s6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgfQorCisgIGlmKEZEX0lTU0VUKGNvbm5zc2wtPnJlbW90ZWZkLCAmZmRzX3JlYWQpICYmCisgICAgIEZEX0lTU0VUKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgJmZkc193cml0ZSkpIHsKKyAgICAvKiBQaXBlIGRhdGEgdG8gSFRUUFMgcHJveHkuICovCisgICAgbiA9IHJlYWQoY29ubnNzbC0+cmVtb3RlZmQsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisgICAgaWYobiA8IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYobikgeworICAgICAgaSA9IGdza19zZWN1cmVfc29jX3dyaXRlKGNvbm5wcm94eXNzbC0+aGFuZGxlLCBidWYsIG4sICZtKTsKKyAgICAgIGlmKGkgIT0gR1NLX09LIHx8IG4gIT0gbSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmV0ID0gMTsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmV0OyAgLyogT0sgKi8KK30KKworCitzdGF0aWMgdm9pZCBjbG9zZV9vbmUoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBpZihjb25uc3NsLT5oYW5kbGUpIHsKKyAgICBnc2tpdF9zdGF0dXMoY29ubi0+ZGF0YSwgZ3NrX3NlY3VyZV9zb2NfY2xvc2UoJmNvbm5zc2wtPmhhbmRsZSksCisgICAgICAgICAgICAgICJnc2tfc2VjdXJlX3NvY19jbG9zZSgpIiwgMCk7CisgICAgLyogTGFzdCBjaGFuY2UgdG8gZHJhaW4gb3V0cHV0LiAqLworICAgIHdoaWxlKHBpcGVfc3Nsb3ZlcnNzbChjb25uLCBzb2NraW5kZXgsIFNPU19XUklURSkgPiAwKQorICAgICAgOworICAgIGNvbm5zc2wtPmhhbmRsZSA9IChnc2tfaGFuZGxlKSBOVUxMOworICAgIGlmKGNvbm5zc2wtPmxvY2FsZmQgPj0gMCkgeworICAgICAgY2xvc2UoY29ubnNzbC0+bG9jYWxmZCk7CisgICAgICBjb25uc3NsLT5sb2NhbGZkID0gLTE7CisgICAgfQorICAgIGlmKGNvbm5zc2wtPnJlbW90ZWZkID49IDApIHsKKyAgICAgIGNsb3NlKGNvbm5zc2wtPnJlbW90ZWZkKTsKKyAgICAgIGNvbm5zc2wtPnJlbW90ZWZkID0gLTE7CisgICAgfQorICB9CisgIGlmKGNvbm5zc2wtPmlvY3BvcnQgPj0gMCkKKyAgICBjbG9zZV9hc3luY19oYW5kc2hha2UoY29ubnNzbCk7CiB9CiAKIApAQCAtNTE4LDEzICs3MDEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgQ1VSTGNvZGUgKmN1cmxjb2RlKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgQ1VSTGNvZGUgY2M7CisgIENVUkxjb2RlIGNjID0gQ1VSTEVfU0VORF9FUlJPUjsKICAgaW50IHdyaXR0ZW47CiAKLSAgY2MgPSBnc2tpdF9zdGF0dXMoZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgZ3NrX3NlY3VyZV9zb2Nfd3JpdGUoY29ubi0+c3NsW3NvY2tpbmRleF0uaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtZW0sIChpbnQpIGxlbiwgJndyaXR0ZW4pLAotICAgICAgICAgICAgICAgICAgICAiZ3NrX3NlY3VyZV9zb2Nfd3JpdGUoKSIsIENVUkxFX1NFTkRfRVJST1IpOworICBpZihwaXBlX3NzbG92ZXJzc2woY29ubiwgc29ja2luZGV4LCBTT1NfV1JJVEUpID49IDApIHsKKyAgICBjYyA9IGdza2l0X3N0YXR1cyhkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIGdza19zZWN1cmVfc29jX3dyaXRlKGNvbm4tPnNzbFtzb2NraW5kZXhdLmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtZW0sIChpbnQpIGxlbiwgJndyaXR0ZW4pLAorICAgICAgICAgICAgICAgICAgICAgICJnc2tfc2VjdXJlX3NvY193cml0ZSgpIiwgQ1VSTEVfU0VORF9FUlJPUik7CisgICAgaWYoY2MgPT0gQ1VSTEVfT0spCisgICAgICBpZihwaXBlX3NzbG92ZXJzc2woY29ubiwgc29ja2luZGV4LCBTT1NfV1JJVEUpIDwgMCkKKyAgICAgICAgY2MgPSBDVVJMRV9TRU5EX0VSUk9SOworICB9CiAgIGlmKGNjICE9IENVUkxFX09LKSB7CiAgICAgKmN1cmxjb2RlID0gY2M7CiAgICAgd3JpdHRlbiA9IC0xOwpAQCAtNTM5LDE1ICs3MjcsMjMgQEAKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGludCBidWZmc2l6ZTsKICAgaW50IG5yZWFkOwotICBDVVJMY29kZSBjYzsKKyAgQ1VSTGNvZGUgY2MgPSBDVVJMRV9SRUNWX0VSUk9SOwogCi0gIGJ1ZmZzaXplID0gYnVmZmVyc2l6ZSA+IChzaXplX3QpIElOVF9NQVg/IElOVF9NQVg6IChpbnQpIGJ1ZmZlcnNpemU7Ci0gIGNjID0gZ3NraXRfc3RhdHVzKGRhdGEsIGdza19zZWN1cmVfc29jX3JlYWQoY29ubi0+c3NsW251bV0uaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmZnNpemUsICZucmVhZCksCi0gICAgICAgICAgICAgICAgICAgICJnc2tfc2VjdXJlX3NvY19yZWFkKCkiLCBDVVJMRV9SRUNWX0VSUk9SKTsKLSAgaWYoY2MgIT0gQ1VSTEVfT0spIHsKKyAgaWYocGlwZV9zc2xvdmVyc3NsKGNvbm4sIG51bSwgU09TX1JFQUQpID49IDApIHsKKyAgICBidWZmc2l6ZSA9IGJ1ZmZlcnNpemUgPiAoc2l6ZV90KSBJTlRfTUFYPyBJTlRfTUFYOiAoaW50KSBidWZmZXJzaXplOworICAgIGNjID0gZ3NraXRfc3RhdHVzKGRhdGEsIGdza19zZWN1cmVfc29jX3JlYWQoY29ubi0+c3NsW251bV0uaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZmc2l6ZSwgJm5yZWFkKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZ3NrX3NlY3VyZV9zb2NfcmVhZCgpIiwgQ1VSTEVfUkVDVl9FUlJPUik7CisgIH0KKyAgc3dpdGNoKGNjKSB7CisgIGNhc2UgQ1VSTEVfT0s6CisgICAgYnJlYWs7CisgIGNhc2UgQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUOgorICAgIGNjID0gQ1VSTEVfQUdBSU47CisgIGRlZmF1bHQ6CiAgICAgKmN1cmxjb2RlID0gY2M7CiAgICAgbnJlYWQgPSAtMTsKKyAgICBicmVhazsKICAgfQogICByZXR1cm4gKHNzaXplX3QpIG5yZWFkOwogfQpAQCAtNTYwLDE4ICs3NTYsMjYgQEAKICAgZ3NrX2hhbmRsZSBlbnZpcjsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBpbnQgcmM7Ci0gIGNoYXIgKmtleXJpbmdmaWxlOwotICBjaGFyICprZXlyaW5ncHdkOwotICBjaGFyICprZXlyaW5nbGFiZWw7Ci0gIGNoYXIgKnNuaTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGtleXJpbmdmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBrZXlyaW5ncHdkID0gU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBrZXlyaW5nbGFiZWwgPSBTU0xfU0VUX09QVElPTihjZXJ0KTsKKyAgY29uc3QgbG9uZyBpbnQgc3NsX3ZlcnNpb24gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CisgIGNvbnN0IGJvb2wgdmVyaWZ5cGVlciA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCk/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOgorICAgIGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgY2hhciAqc25pOwogICB1bnNpZ25lZCBpbnQgcHJvdG9mbGFnczsKICAgbG9uZyB0aW1lb3V0OwogICBRc29fT3ZlcmxhcHBlZElPX3QgY29tbWFyZWE7CisgIGludCBzb2NrcGFpclsyXTsKKyAgc3RhdGljIGNvbnN0IGludCBzb2J1ZnNpemUgPSBDVVJMX01BWF9XUklURV9TSVpFOwogCiAgIC8qIENyZWF0ZSBTU0wgZW52aXJvbm1lbnQsIHN0YXJ0IChwcmVmZXJhYmx5IGFzeW5jaHJvbm91cykgaGFuZHNoYWtlLiAqLwogCiAgIGNvbm5zc2wtPmhhbmRsZSA9IChnc2tfaGFuZGxlKSBOVUxMOwogICBjb25uc3NsLT5pb2Nwb3J0ID0gLTE7CisgIGNvbm5zc2wtPmxvY2FsZmQgPSAtMTsKKyAgY29ubnNzbC0+cmVtb3RlZmQgPSAtMTsKIAogICAvKiBHU0tpdCBzdXBwb3J0cyB0d28gd2F5cyBvZiBzcGVjaWZ5aW5nIGFuIFNTTCBjb250ZXh0OiBlaXRoZXIgYnkKICAgICogIGFwcGxpY2F0aW9uIGlkZW50aWZpZXIgKHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBkZWZpbmVkIGF0IHRoZSBzeXN0ZW0KQEAgLTU4Niw5ICs3OTAsNiBAQAogICAgKiAgYXBwbGljYXRpb24gaWRlbnRpZmllciBtb2RlIGlzIHRyaWVkIGZpcnN0LCBhcyByZWNvbW1lbmRlZCBpbiBJQk0gZG9jLgogICAgKi8KIAotICBrZXlyaW5nZmlsZSA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQUZJTEVdOwotICBrZXlyaW5ncHdkID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF07Ci0gIGtleXJpbmdsYWJlbCA9IGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdOwogICBlbnZpciA9IChnc2tfaGFuZGxlKSBOVUxMOwogCiAgIGlmKGtleXJpbmdsYWJlbCAmJiAqa2V5cmluZ2xhYmVsICYmICFrZXlyaW5ncHdkICYmCkBAIC02MTMsMTkgKzgxNCwzNiBAQAogICBpZihyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAvKiBFc3RhYmxpc2ggYSBwaXBlbGluaW5nIHNvY2tldCBwYWlyIGZvciBTU0wgb3ZlciBTU0wuICovCisgIGlmKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnVzZSkgeworICAgIGlmKGluZXRzb2NrZXRwYWlyKHNvY2twYWlyKSkKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICBjb25uc3NsLT5sb2NhbGZkID0gc29ja3BhaXJbMF07CisgICAgY29ubnNzbC0+cmVtb3RlZmQgPSBzb2NrcGFpclsxXTsKKyAgICBzZXRzb2Nrb3B0KGNvbm5zc2wtPmxvY2FsZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKKyAgICAgICAgICAgICAgICh2b2lkICopIHNvYnVmc2l6ZSwgc2l6ZW9mIHNvYnVmc2l6ZSk7CisgICAgc2V0c29ja29wdChjb25uc3NsLT5yZW1vdGVmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAorICAgICAgICAgICAgICAgKHZvaWQgKikgc29idWZzaXplLCBzaXplb2Ygc29idWZzaXplKTsKKyAgICBzZXRzb2Nrb3B0KGNvbm5zc2wtPmxvY2FsZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwKKyAgICAgICAgICAgICAgICh2b2lkICopIHNvYnVmc2l6ZSwgc2l6ZW9mIHNvYnVmc2l6ZSk7CisgICAgc2V0c29ja29wdChjb25uc3NsLT5yZW1vdGVmZCwgU09MX1NPQ0tFVCwgU09fU05EQlVGLAorICAgICAgICAgICAgICAgKHZvaWQgKikgc29idWZzaXplLCBzaXplb2Ygc29idWZzaXplKTsKKyAgICBjdXJseF9ub25ibG9jayhjb25uc3NsLT5sb2NhbGZkLCBUUlVFKTsKKyAgICBjdXJseF9ub25ibG9jayhjb25uc3NsLT5yZW1vdGVmZCwgVFJVRSk7CisgIH0KKwogICAvKiBEZXRlcm1pbmUgd2hpY2ggU1NML1RMUyB2ZXJzaW9uIHNob3VsZCBiZSBlbmFibGVkLiAqLwotICBwcm90b2ZsYWdzID0gQ1VSTF9HU0tQUk9UT19UTFNWMTBfTUFTSyB8IENVUkxfR1NLUFJPVE9fVExTVjExX01BU0sgfAotICAgICAgICAgICAgICAgQ1VSTF9HU0tQUk9UT19UTFNWMTJfTUFTSzsKLSAgc25pID0gY29ubi0+aG9zdC5uYW1lOwotICBzd2l0Y2ggKGRhdGEtPnNldC5zc2wudmVyc2lvbikgeworICBzbmkgPSBob3N0bmFtZTsKKyAgc3dpdGNoIChzc2xfdmVyc2lvbikgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKICAgICBwcm90b2ZsYWdzID0gQ1VSTF9HU0tQUk9UT19TU0xWMl9NQVNLOwotICAgIHNuaSA9IChjaGFyICopIE5VTEw7CisgICAgc25pID0gTlVMTDsKICAgICBicmVhazsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CiAgICAgcHJvdG9mbGFncyA9IENVUkxfR1NLUFJPVE9fU1NMVjNfTUFTSzsKLSAgICBzbmkgPSAoY2hhciAqKSBOVUxMOworICAgIHNuaSA9IE5VTEw7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQ6CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgogICAgIHByb3RvZmxhZ3MgPSBDVVJMX0dTS1BST1RPX1RMU1YxMF9NQVNLIHwKICAgICAgICAgICAgICAgICAgQ1VSTF9HU0tQUk9UT19UTFNWMTFfTUFTSyB8IENVUkxfR1NLUFJPVE9fVExTVjEyX01BU0s7CkBAIC02MzksNiArODU3LDEyIEBACiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CiAgICAgcHJvdG9mbGFncyA9IENVUkxfR1NLUFJPVE9fVExTVjEyX01BU0s7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6CisgICAgZmFpbGYoZGF0YSwgIkdTS2l0OiBUTFMgMS4zIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworICBkZWZhdWx0OgorICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKICAgLyogUHJvY2VzcyBTTkkuIElnbm9yZSBpZiBub3Qgc3VwcG9ydGVkIChvbiBPUzQwMCA8IFY3UjEpLiAqLwpAQCAtNjYxLDkgKzg4NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVvdXQgKyA5OTkpIC8gMTAwMCk7CiAgIH0KICAgaWYoIXJlc3VsdCkKLSAgICByZXN1bHQgPSBzZXRfbnVtZXJpYyhkYXRhLCBjb25uc3NsLT5oYW5kbGUsIEdTS19GRCwgY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgICByZXN1bHQgPSBzZXRfbnVtZXJpYyhkYXRhLCBjb25uc3NsLT5oYW5kbGUsIEdTS19PUzQwMF9SRUFEX1RJTUVPVVQsIDEpOwogICBpZighcmVzdWx0KQotICAgIHJlc3VsdCA9IHNldF9jaXBoZXJzKGRhdGEsIGNvbm5zc2wtPmhhbmRsZSwgJnByb3RvZmxhZ3MpOworICAgIHJlc3VsdCA9IHNldF9udW1lcmljKGRhdGEsIGNvbm5zc2wtPmhhbmRsZSwgR1NLX0ZELCBjb25uc3NsLT5sb2NhbGZkID49IDA/CisgICAgICAgICAgICAgICAgICAgICAgICAgY29ubnNzbC0+bG9jYWxmZDogY29ubi0+c29ja1tzb2NraW5kZXhdKTsKKyAgaWYoIXJlc3VsdCkKKyAgICByZXN1bHQgPSBzZXRfY2lwaGVycyhjb25uLCBjb25uc3NsLT5oYW5kbGUsICZwcm90b2ZsYWdzKTsKICAgaWYoIXByb3RvZmxhZ3MpIHsKICAgICBmYWlsZihkYXRhLCAiTm8gU1NMIHByb3RvY29sL2NpcGhlciBjb21iaW5hdGlvbiBlbmFibGVkIik7CiAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NJUEhFUjsKQEAgLTcwNiw3ICs5MzMsNyBAQAogICB9CiAgIGlmKCFyZXN1bHQpCiAgICAgcmVzdWx0ID0gc2V0X2VudW0oZGF0YSwgY29ubnNzbC0+aGFuZGxlLCBHU0tfU0VSVkVSX0FVVEhfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXI/IEdTS19TRVJWRVJfQVVUSF9GVUxMOgorICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeXBlZXI/IEdTS19TRVJWRVJfQVVUSF9GVUxMOgogICAgICAgICAgICAgICAgICAgICAgIEdTS19TRVJWRVJfQVVUSF9QQVNTVEhSVSwgRkFMU0UpOwogCiAgIGlmKCFyZXN1bHQpIHsKQEAgLTczMCw2ICs5NTcsMTAgQEAKICAgICBlbHNlIGlmKGVycm5vICE9IEVOT0JVRlMpCiAgICAgICByZXN1bHQgPSBnc2tpdF9zdGF0dXMoZGF0YSwgR1NLX0VSUk9SX0lPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJRc29DcmVhdGVJT0NvbXBsZXRpb25Qb3J0KCkiLCAwKTsKKyAgICBlbHNlIGlmKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnVzZSkgeworICAgICAgLyogQ2Fubm90IHBpcGVsaW5lIHdoaWxlIGhhbmRzaGFraW5nIHN5bmNocm9ub3VzbHkuICovCisgICAgICByZXN1bHQgPSBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAvKiBObyBtb3JlIGNvbXBsZXRpb24gcG9ydCBhdmFpbGFibGUuIFVzZSBzeW5jaHJvbm91cyBJTy4gKi8KICAgICAgIHJlc3VsdCA9IGdza2l0X3N0YXR1cyhkYXRhLCBnc2tfc2VjdXJlX3NvY19pbml0KGNvbm5zc2wtPmhhbmRsZSksCkBAIC03NDIsNyArOTczLDcgQEAKICAgfQogCiAgIC8qIEVycm9yOiByb2xsYmFjay4gKi8KLSAgY2xvc2Vfb25lKGNvbm5zc2wsIGRhdGEpOworICBjbG9zZV9vbmUoY29ubnNzbCwgY29ubiwgc29ja2luZGV4KTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODcwLDkgKzExMDEsOCBAQAogICAgIGN1cmxfWDUwOWNlcnRpZmljYXRlIHg1MDk7CiAgICAgY3VybF9hc24xRWxlbWVudCAqcDsKIAotICAgIGlmKCFjZXJ0KQorICAgIGlmKEN1cmxfcGFyc2VYNTA5KCZ4NTA5LCBjZXJ0LCBjZXJ0ZW5kKSkKICAgICAgIHJldHVybiBDVVJMRV9TU0xfUElOTkVEUFVCS0VZTk9UTUFUQ0g7Ci0gICAgQ3VybF9wYXJzZVg1MDkoJng1MDksIGNlcnQsIGNlcnRlbmQpOwogICAgIHAgPSAmeDUwOS5zdWJqZWN0UHVibGljS2V5SW5mbzsKICAgICByZXN1bHQgPSBDdXJsX3Bpbl9wZWVyX3B1YmtleShkYXRhLCBwdHIsIHAtPmhlYWRlciwgcC0+ZW5kIC0gcC0+aGVhZGVyKTsKICAgICBpZihyZXN1bHQpIHsKQEAgLTkxMyw2ICsxMTQzLDExIEBACiAgICAgICByZXN1bHQgPSBnc2tpdF9jb25uZWN0X3N0ZXAxKGNvbm4sIHNvY2tpbmRleCk7CiAgIH0KIAorICAvKiBIYW5kbGUgaGFuZHNoYWtlIHBpcGVsaW5pbmcuICovCisgIGlmKCFyZXN1bHQpCisgICAgaWYocGlwZV9zc2xvdmVyc3NsKGNvbm4sIHNvY2tpbmRleCwgU09TX1JFQUQgfCBTT1NfV1JJVEUpIDwgMCkKKyAgICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOworCiAgIC8qIFN0ZXAgMjogY2hlY2sgaWYgaGFuZHNoYWtlIGlzIG92ZXIuICovCiAgIGlmKCFyZXN1bHQgJiYgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8yKSB7CiAgICAgLyogY2hlY2sgYWxsb3dlZCB0aW1lIGxlZnQgKi8KQEAgLTkyNywxMiArMTE2MiwxNyBAQAogICAgICAgcmVzdWx0ID0gZ3NraXRfY29ubmVjdF9zdGVwMihjb25uLCBzb2NraW5kZXgsIG5vbmJsb2NraW5nKTsKICAgfQogCisgIC8qIEhhbmRsZSBoYW5kc2hha2UgcGlwZWxpbmluZy4gKi8KKyAgaWYoIXJlc3VsdCkKKyAgICBpZihwaXBlX3NzbG92ZXJzc2woY29ubiwgc29ja2luZGV4LCBTT1NfUkVBRCB8IFNPU19XUklURSkgPCAwKQorICAgICAgcmVzdWx0ID0gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisKICAgLyogU3RlcCAzOiBnYXRoZXIgY2VydGlmaWNhdGUgaW5mbywgdmVyaWZ5IGhvc3QuICovCiAgIGlmKCFyZXN1bHQgJiYgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9PSBzc2xfY29ubmVjdF8zKQogICAgIHJlc3VsdCA9IGdza2l0X2Nvbm5lY3Rfc3RlcDMoY29ubiwgc29ja2luZGV4KTsKIAogICBpZihyZXN1bHQpCi0gICAgY2xvc2Vfb25lKGNvbm5zc2wsIGRhdGEpOworICAgIGNsb3NlX29uZShjb25uc3NsLCBjb25uLCBzb2NraW5kZXgpOwogICBlbHNlIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfZG9uZSkgewogICAgIGNvbm5zc2wtPnN0YXRlID0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGU7CiAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzE7CkBAIC05NzYsMTEgKzEyMTYsOCBAQAogCiB2b2lkIEN1cmxfZ3NraXRfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewotICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0KLSAgaWYoY29ubnNzbC0+dXNlKQotICAgIGNsb3NlX29uZShjb25uc3NsLCBkYXRhKTsKKyAgY2xvc2Vfb25lKCZjb25uLT5zc2xbc29ja2luZGV4XSwgY29ubiwgc29ja2luZGV4KTsKKyAgY2xvc2Vfb25lKCZjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XSwgY29ubiwgc29ja2luZGV4KTsKIH0KIAogCkBAIC05OTksMTAgKzEyMzYsMTAgQEAKICAgaWYoZGF0YS0+c2V0LmZ0cF9jY2MgIT0gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFKQogICAgIHJldHVybiAwOwogCi0gIGNsb3NlX29uZShjb25uc3NsLCBkYXRhKTsKKyAgY2xvc2Vfb25lKGNvbm5zc2wsIGNvbm4sIHNvY2tpbmRleCk7CiAgIHJjID0gMDsKLSAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOworICB3aGF0ID0gU09DS0VUX1JFQURBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0hVVERPV05fVElNRU9VVCk7CiAKICAgZm9yKDs7KSB7CiAgICAgaWYod2hhdCA8IDApIHsKQEAgLTEwMzEsNyArMTI2OCw3IEBACiAgICAgaWYobnJlYWQgPD0gMCkKICAgICAgIGJyZWFrOwogCi0gICAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KGNvbm4tPnNvY2tbc29ja2luZGV4XSwgQ1VSTF9TT0NLRVRfQkFELCAwKTsKKyAgICB3aGF0ID0gU09DS0VUX1JFQURBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwgMCk7CiAgIH0KIAogICByZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9saWIvdnRscy9nc2tpdC5oIGIvbGliL3Z0bHMvZ3NraXQuaAppbmRleCA0MTQ4M2NiLi5lMjU4YTI5IDEwMDY0NAotLS0gYS9saWIvdnRscy9nc2tpdC5oCisrKyBiL2xpYi92dGxzL2dza2l0LmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTY0LDcgKzY0LDcgQEAKICNkZWZpbmUgY3VybHNzbF92ZXJzaW9uIEN1cmxfZ3NraXRfdmVyc2lvbgogI2RlZmluZSBjdXJsc3NsX2NoZWNrX2N4bih4KSBDdXJsX2dza2l0X2NoZWNrX2N4bih4KQogI2RlZmluZSBjdXJsc3NsX2RhdGFfcGVuZGluZyh4LHkpIDAKLSNkZWZpbmUgY3VybHNzbF9yYW5kb20oeCx5LHopIC0xCisjZGVmaW5lIGN1cmxzc2xfcmFuZG9tKHgseSx6KSAoeD14LCB5PXksIHo9eiwgQ1VSTEVfTk9UX0JVSUxUX0lOKQogCiAjZW5kaWYgLyogVVNFX0dTS0lUICovCiAKZGlmZiAtLWdpdCBhL2xpYi92dGxzL2d0bHMuYyBiL2xpYi92dGxzL2d0bHMuYwppbmRleCAxYzNlNmIxLi41MjQ5ZGQ0IDEwMDY0NAotLS0gYS9saWIvdnRscy9ndGxzLmMKKysrIGIvbGliL3Z0bHMvZ3Rscy5jCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAicGFyc2VkYXRlLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwogI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ3YXJubGVzcy5oIgogI2luY2x1ZGUgIng1MDlhc24xLmgiCiAjaW5jbHVkZSAiY3VybF9wcmludGYuaCIKQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgR05VVExTX1BPSU5URVJfVE9fSU5UX0NBU1QocCkgKChpbnQpIChsb25nKSAocCkpCiAjZW5kaWYKICNpZm5kZWYgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QKLSNkZWZpbmUgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QoaSkgKCh2b2lkKikgKGxvbmcpIChpKSkKKyNkZWZpbmUgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QoaSkgKCh2b2lkICopIChsb25nKSAoaSkpCiAjZW5kaWYKIAogLyogRW5hYmxlIEdudVRMUyBkZWJ1Z2dpbmcgYnkgZGVmaW5pbmcgR1RMU0RFQlVHICovCkBAIC0xNzEsNiArMTcxLDE2IEBACiAgIHJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IEN1cmxfZ3Rsc19wdXNoX3NzbCh2b2lkICpzLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisgIHJldHVybiBnbnV0bHNfcmVjb3JkX3NlbmQoKGdudXRsc19zZXNzaW9uX3QpIHMsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgQ3VybF9ndGxzX3B1bGxfc3NsKHZvaWQgKnMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyAgcmV0dXJuIGdudXRsc19yZWNvcmRfcmVjdigoZ251dGxzX3Nlc3Npb25fdCkgcywgYnVmLCBsZW4pOworfQorCiAvKiBDdXJsX2d0bHNfaW5pdCgpCiAgKgogICogR2xvYmFsIEdudVRMUyBpbml0LCBjYWxsZWQgZnJvbSBDdXJsX3NzbF9pbml0KCkuIFRoaXMgY2FsbHMgZnVuY3Rpb25zIHRoYXQKQEAgLTI1MSw3ICsyNjEsOCBAQAogICByZXR1cm4gbG9hZGVkX2ZpbGU7CiB9CiAKLXN0YXRpYyB2b2lkIHVubG9hZF9maWxlKGdudXRsc19kYXR1bV90IGRhdGEpIHsKK3N0YXRpYyB2b2lkIHVubG9hZF9maWxlKGdudXRsc19kYXR1bV90IGRhdGEpCit7CiAgIGZyZWUoZGF0YS5kYXRhKTsKIH0KIApAQCAtMjg5LDcgKzMwMCw3IEBACiAgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZz09CiAgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKIAotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KHJlYWRmZCwgd3JpdGVmZCwKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXM/dGltZW91dF9tczoxMDAwKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CkBAIC0zNTYsOSArMzY3LDkgQEAKIHsKICAgaWYoIXR5cGUgfHwgIXR5cGVbMF0pCiAgICAgcmV0dXJuIEdOVVRMU19YNTA5X0ZNVF9QRU07Ci0gIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJQRU0iKSkKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlBFTSIpKQogICAgIHJldHVybiBHTlVUTFNfWDUwOV9GTVRfUEVNOwotICBpZihDdXJsX3Jhd19lcXVhbCh0eXBlLCAiREVSIikpCisgIGlmKHN0cmNhc2Vjb21wYXJlKHR5cGUsICJERVIiKSkKICAgICByZXR1cm4gR05VVExTX1g1MDlfRk1UX0RFUjsKICAgcmV0dXJuIC0xOwogfQpAQCAtMzcxLDYgKzM4Miw5IEBACiAgIGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbjsKICAgaW50IHJjOwogICBib29sIHNuaSA9IFRSVUU7IC8qIGRlZmF1bHQgaXMgU05JIGVuYWJsZWQgKi8KKyAgdm9pZCAqdHJhbnNwb3J0X3B0ciA9IE5VTEw7CisgIGdudXRsc19wdXNoX2Z1bmMgZ251dGxzX3RyYW5zcG9ydF9wdXNoID0gTlVMTDsKKyAgZ251dGxzX3B1bGxfZnVuYyBnbnV0bHNfdHJhbnNwb3J0X3B1bGwgPSBOVUxMOwogI2lmZGVmIEVOQUJMRV9JUFY2CiAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOwogI2Vsc2UKQEAgLTM5NywxMCArNDExLDEzIEBACiAgICByZXF1ZXN0ZWQgaW4gdGhlIHByaW9yaXR5IHN0cmluZywgc28gdHJlYXQgaXQgc3BlY2lhbGx5CiAgKi8KICNkZWZpbmUgR05VVExTX1NSUCAiK1NSUCIKLSAgY29uc3QgY2hhciogcHJpb3JpdHlsaXN0OworICBjb25zdCBjaGFyICpwcmlvcml0eWxpc3Q7CiAgIGNvbnN0IGNoYXIgKmVyciA9IE5VTEw7CiAjZW5kaWYKIAorICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisKICAgaWYoY29ubi0+c3NsW3NvY2tpbmRleF0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpCiAgICAgLyogdG8gbWFrZSB1cyB0b2xlcmFudCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgdGhlCiAgICAgICAgc2FtZSBjb25uZWN0aW9uICovCkBAIC00MDksMTIgKzQyNiwxMSBAQAogICBpZighZ3Rsc19pbml0ZWQpCiAgICAgQ3VybF9ndGxzX2luaXQoKTsKIAotICAvKiBHbnVUTFMgb25seSBzdXBwb3J0cyBTU0x2MyBhbmQgVExTdjEgKi8KLSAgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MikgeworICBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbikgPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7CiAgICAgZmFpbGYoZGF0YSwgIkdudVRMUyBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9Ci0gIGVsc2UgaWYoZGF0YS0+c2V0LnNzbC52ZXJzaW9uID09IENVUkxfU1NMVkVSU0lPTl9TU0x2MykKKyAgZWxzZSBpZihTU0xfQ09OTl9DT05GSUcodmVyc2lvbikgPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYzKQogICAgIHNuaSA9IEZBTFNFOyAvKiBTU0x2MyBoYXMgbm8gU05JICovCiAKICAgLyogYWxsb2NhdGUgYSBjcmVkIHN0cnVjdCAqLwpAQCAtNDI1LDggKzQ0MSw4IEBACiAgIH0KIAogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgewotICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgZGF0YS0+c2V0LnNzbC51c2VybmFtZSk7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQKSB7CisgICAgaW5mb2YoZGF0YSwgIlVzaW5nIFRMUy1TUlAgdXNlcm5hbWU6ICVzXG4iLCBTU0xfU0VUX09QVElPTih1c2VybmFtZSkpOwogCiAgICAgcmMgPSBnbnV0bHNfc3JwX2FsbG9jYXRlX2NsaWVudF9jcmVkZW50aWFscygKICAgICAgICAgICAgJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNycF9jbGllbnRfY3JlZCk7CkBAIC00MzgsOCArNDU0LDggQEAKIAogICAgIHJjID0gZ251dGxzX3NycF9zZXRfY2xpZW50X2NyZWRlbnRpYWxzKGNvbm4tPnNzbFtzb2NraW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNycF9jbGllbnRfY3JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wucGFzc3dvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihwYXNzd29yZCkpOwogICAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICAgIGZhaWxmKGRhdGEsICJnbnV0bHNfc3JwX3NldF9jbGllbnRfY3JlZCgpIGZhaWxlZDogJXMiLAogICAgICAgICAgICAgZ251dGxzX3N0cmVycm9yKHJjKSk7CkBAIC00NDgsNjQgKzQ2NCw2NCBAQAogICB9CiAjZW5kaWYKIAotICBpZihkYXRhLT5zZXQuc3NsLkNBZmlsZSkgeworICBpZihTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSkgewogICAgIC8qIHNldCB0aGUgdHJ1c3RlZCBDQSBjZXJ0IGJ1bmRsZSBmaWxlICovCiAgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfZmxhZ3MoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfVkVSSUZZX0FMTE9XX1g1MDlfVjFfQ0FfQ1JUKTsKIAogICAgIHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3RydXN0X2ZpbGUoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ0FmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKICAgICBpZihyYyA8IDApIHsKICAgICAgIGluZm9mKGRhdGEsICJlcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAoJXMpXG4iLAotICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC5DQWZpbGUsIGdudXRsc19zdHJlcnJvcihyYykpOwotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKQorICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSksIGdudXRsc19zdHJlcnJvcihyYykpOworICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIH0KICAgICBlbHNlCi0gICAgICBpbmZvZihkYXRhLCAiZm91bmQgJWQgY2VydGlmaWNhdGVzIGluICVzXG4iLAotICAgICAgICAgICAgcmMsIGRhdGEtPnNldC5zc2wuQ0FmaWxlKTsKKyAgICAgIGluZm9mKGRhdGEsICJmb3VuZCAlZCBjZXJ0aWZpY2F0ZXMgaW4gJXNcbiIsIHJjLAorICAgICAgICAgICAgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpOwogICB9CiAKICNpZmRlZiBIQVNfQ0FQQVRICi0gIGlmKGRhdGEtPnNldC5zc2wuQ0FwYXRoKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpKSB7CiAgICAgLyogc2V0IHRoZSB0cnVzdGVkIENBIGNlcnQgZGlyZWN0b3J5ICovCiAgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKGNvbm4tPnNzbFtzb2NraW5kZXhdLmNyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLkNBcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19YNTA5X0ZNVF9QRU0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1g1MDlfRk1UX1BFTSk7CiAgICAgaWYocmMgPCAwKSB7CiAgICAgICBpbmZvZihkYXRhLCAiZXJyb3IgcmVhZGluZyBjYSBjZXJ0IGZpbGUgJXMgKCVzKVxuIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ0FmaWxlLCBnbnV0bHNfc3RyZXJyb3IocmMpKTsKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikKKyAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpLCBnbnV0bHNfc3RyZXJyb3IocmMpKTsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICB9CiAgICAgZWxzZQogICAgICAgaW5mb2YoZGF0YSwgImZvdW5kICVkIGNlcnRpZmljYXRlcyBpbiAlc1xuIiwKLSAgICAgICAgICAgIHJjLCBkYXRhLT5zZXQuc3NsLkNBcGF0aCk7CisgICAgICAgICAgICByYywgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpOwogICB9CiAjZW5kaWYKIAogI2lmZGVmIENVUkxfQ0FfRkFMTEJBQ0sKICAgLyogdXNlIHN5c3RlbSBjYSBjZXJ0aWZpY2F0ZSBzdG9yZSBhcyBmYWxsYmFjayAqLwotICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIgJiYKLSAgICAgIShkYXRhLT5zZXQuc3NsLkNBZmlsZSB8fCBkYXRhLT5zZXQuc3NsLkNBcGF0aCkpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpICYmCisgICAgICEoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgfHwgU1NMX0NPTk5fQ09ORklHKENBcGF0aCkpKSB7CiAgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdChjb25uLT5zc2xbc29ja2luZGV4XS5jcmVkKTsKICAgfQogI2VuZGlmCiAKLSAgaWYoZGF0YS0+c2V0LnNzbC5DUkxmaWxlKSB7CisgIGlmKFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKSB7CiAgICAgLyogc2V0IHRoZSBDUkwgbGlzdCBmaWxlICovCiAgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfY3JsX2ZpbGUoY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3NsLkNSTGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1g1MDlfRk1UX1BFTSk7CiAgICAgaWYocmMgPCAwKSB7CiAgICAgICBmYWlsZihkYXRhLCAiZXJyb3IgcmVhZGluZyBjcmwgZmlsZSAlcyAoJXMpIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSwgZ251dGxzX3N0cmVycm9yKHJjKSk7CisgICAgICAgICAgICBTU0xfU0VUX09QVElPTihDUkxmaWxlKSwgZ251dGxzX3N0cmVycm9yKHJjKSk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NSTF9CQURGSUxFOwogICAgIH0KICAgICBlbHNlCiAgICAgICBpbmZvZihkYXRhLCAiZm91bmQgJWQgQ1JMIGluICVzXG4iLAotICAgICAgICAgICAgcmMsIGRhdGEtPnNldC5zc2wuQ1JMZmlsZSk7CisgICAgICAgICAgICByYywgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSkpOwogICB9CiAKICAgLyogSW5pdGlhbGl6ZSBUTFMgc2Vzc2lvbiBhcyBhIGNsaWVudCAqLwpAQCAtNTE4LDEzICs1MzQsMTMgQEAKICAgLyogY29udmVuaWVudCBhc3NpZ24gKi8KICAgc2Vzc2lvbiA9IGNvbm4tPnNzbFtzb2NraW5kZXhdLnNlc3Npb247CiAKLSAgaWYoKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpICYmCisgIGlmKCgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcikpICYmCiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICAgKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGNvbm4tPmhvc3QubmFtZSwgJmFkZHIpKSAmJgorICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNlbmRpZgogICAgICBzbmkgJiYKLSAgICAgKGdudXRsc19zZXJ2ZXJfbmFtZV9zZXQoc2Vzc2lvbiwgR05VVExTX05BTUVfRE5TLCBjb25uLT5ob3N0Lm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihjb25uLT5ob3N0Lm5hbWUpKSA8IDApKQorICAgICAoZ251dGxzX3NlcnZlcl9uYW1lX3NldChzZXNzaW9uLCBHTlVUTFNfTkFNRV9ETlMsIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oaG9zdG5hbWUpKSA8IDApKQogICAgIGluZm9mKGRhdGEsICJXQVJOSU5HOiBmYWlsZWQgdG8gY29uZmlndXJlIHNlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSkgIgogICAgICAgICAgICJUTFMgZXh0ZW5zaW9uXG4iKTsKIApAQCAtNTQ1LDEzICs1NjEsMTMgQEAKICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAKLSAgaWYoZGF0YS0+c2V0LnNzbC5jaXBoZXJfbGlzdCAhPSBOVUxMKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdCkgIT0gTlVMTCkgewogICAgIGZhaWxmKGRhdGEsICJjYW4ndCBwYXNzIGEgY3VzdG9tIGNpcGhlciBsaXN0IHRvIG9sZGVyIEdudVRMUyIKICAgICAgICAgICAiIHZlcnNpb25zIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKLSAgc3dpdGNoIChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgc3dpdGNoIChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikgewogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgogICAgICAgcHJvdG9jb2xfcHJpb3JpdHlbMF0gPSBHTlVUTFNfU1NMMzsKICAgICAgIGJyZWFrOwpAQCAtNTY5LDEyICs1ODUsMTYgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzI6CiAgICAgICBwcm90b2NvbF9wcmlvcml0eVswXSA9IEdOVVRMU19UTFMxXzI7Ci0gICAgYnJlYWs7Ci0gICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIGZhaWxmKGRhdGEsICJHbnVUTFM6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKICAgICAgIGZhaWxmKGRhdGEsICJHbnVUTFMgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwotICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KICAgcmMgPSBnbnV0bHNfcHJvdG9jb2xfc2V0X3ByaW9yaXR5KHNlc3Npb24sIHByb3RvY29sX3ByaW9yaXR5KTsKICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewpAQCAtNTg2LDcgKzYwNiw3IEBACiAgIC8qIEVuc3VyZSArU1JQIGNvbWVzIGF0IHRoZSAqZW5kKiBvZiBhbGwgcmVsZXZhbnQgc3RyaW5ncyBzbyB0aGF0IGl0IGNhbiBiZQogICAgKiByZW1vdmVkIGlmIGEgcnVuLXRpbWUgZXJyb3IgaW5kaWNhdGVzIHRoYXQgU1JQIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcwogICAgKiBHbnVUTFMgdmVyc2lvbiAqLwotICBzd2l0Y2ggKGRhdGEtPnNldC5zc2wudmVyc2lvbikgeworICBzd2l0Y2ggKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSkgewogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgogICAgICAgcHJpb3JpdHlsaXN0ID0gR05VVExTX0NJUEhFUlMgIjotVkVSUy1UTFMtQUxMOitWRVJTLVNTTDMuMCI7CiAgICAgICBzbmkgPSBmYWxzZTsKQEAgLTYwNywxMSArNjI3LDE1IEBACiAgICAgICBwcmlvcml0eWxpc3QgPSBHTlVUTFNfQ0lQSEVSUyAiOi1WRVJTLVNTTDMuMDotVkVSUy1UTFMtQUxMOiIKICAgICAgICAgICAgICAgICAgICAgICIrVkVSUy1UTFMxLjI6IiBHTlVUTFNfU1JQOwogICAgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICAgIGZhaWxmKGRhdGEsICJHbnVUTFM6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKLSAgICBkZWZhdWx0OgogICAgICAgZmFpbGYoZGF0YSwgIkdudVRMUyBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQogICByYyA9IGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KHNlc3Npb24sIHByaW9yaXR5bGlzdCwgJmVycik7CiAgIGlmKChyYyA9PSBHTlVUTFNfRV9JTlZBTElEX1JFUVVFU1QpICYmIGVycikgewpAQCAtNjYxLDggKzY4NSw4IEBACiAgIH0KICNlbmRpZgogCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdKSB7Ci0gICAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkpIHsKKyAgICBpZihTU0xfU0VUX09QVElPTihrZXlfcGFzc3dkKSkgewogI2lmIEhBVkVfR05VVExTX0NFUlRJRklDQVRFX1NFVF9YNTA5X0tFWV9GSUxFMgogICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN1cHBvcnRlZF9rZXlfZW5jcnlwdGlvbl9hbGdvcml0aG1zID0KICAgICAgICAgR05VVExTX1BLQ1NfVVNFX1BLQ1MxMl8zREVTIHwgR05VVExTX1BLQ1NfVVNFX1BLQ1MxMl9BUkNGT1VSIHwKQEAgLTY3MSwxMSArNjk1LDExIEBACiAgICAgICAgIEdOVVRMU19QS0NTX1VTRV9QQkVTMl9BRVNfMjU2OwogICAgICAgcmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfa2V5X2ZpbGUyKAogICAgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5jcmVkLAotICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKLSAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSA/Ci0gICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0gOiBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKLSAgICAgICAgICAgZG9fZmlsZV90eXBlKGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0pLAotICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSwKKyAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSkgPworICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpIDogU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgIGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKSwKKyAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCksCiAgICAgICAgICAgIHN1cHBvcnRlZF9rZXlfZW5jcnlwdGlvbl9hbGdvcml0aG1zKTsKICAgICAgIGlmKHJjICE9IEdOVVRMU19FX1NVQ0NFU1MpIHsKICAgICAgICAgZmFpbGYoZGF0YSwKQEAgLTY4OSwxNSArNzEzLDE0IEBACiAjZW5kaWYKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZSgKKyAgICAgIGlmKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmlsZSgKICAgICAgICAgICAgY29ubi0+c3NsW3NvY2tpbmRleF0uY3JlZCwKLSAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0sCi0gICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0gPwotICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldIDogZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0sCi0gICAgICAgICAgIGRvX2ZpbGVfdHlwZShkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUX1RZUEVdKSApOwotICAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewotICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3IgcmVhZGluZyBYLjUwOSBrZXkgb3IgY2VydGlmaWNhdGUgZmlsZTogJXMiLAotICAgICAgICAgICAgICBnbnV0bHNfc3RyZXJyb3IocmMpKTsKKyAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSkgPworICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXkpIDogU1NMX1NFVF9PUFRJT04oY2VydCksCisgICAgICAgICAgIGRvX2ZpbGVfdHlwZShTU0xfU0VUX09QVElPTihjZXJ0X3R5cGUpKSApICE9CisgICAgICAgICBHTlVUTFNfRV9TVUNDRVNTKSB7CisgICAgICAgIGZhaWxmKGRhdGEsICJlcnJvciByZWFkaW5nIFguNTA5IGtleSBvciBjZXJ0aWZpY2F0ZSBmaWxlIik7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KICAgICB9CkBAIC03MDUsNyArNzI4LDcgQEAKIAogI2lmZGVmIFVTRV9UTFNfU1JQCiAgIC8qIHB1dCB0aGUgY3JlZGVudGlhbHMgdG8gdGhlIGN1cnJlbnQgc2Vzc2lvbiAqLwotICBpZihkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlApIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oYXV0aHR5cGUpID09IENVUkxfVExTQVVUSF9TUlApIHsKICAgICByYyA9IGdudXRsc19jcmVkZW50aWFsc19zZXQoc2Vzc2lvbiwgR05VVExTX0NSRF9TUlAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPnNzbFtzb2NraW5kZXhdLnNycF9jbGllbnRfY3JlZCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewpAQCAtNzI0LDE5ICs3NDcsMzAgQEAKICAgICB9CiAgIH0KIAotICAvKiBzZXQgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIChmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBzb2NrZXQpICovCi0gIGdudXRsc190cmFuc3BvcnRfc2V0X3B0cihzZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX0lOVF9UT19QT0lOVEVSX0NBU1QoY29ubi0+c29ja1tzb2NraW5kZXhdKSk7CisgIGlmKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnVzZSkgeworICAgIHRyYW5zcG9ydF9wdHIgPSBjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS5zZXNzaW9uOworICAgIGdudXRsc190cmFuc3BvcnRfcHVzaCA9IEN1cmxfZ3Rsc19wdXNoX3NzbDsKKyAgICBnbnV0bHNfdHJhbnNwb3J0X3B1bGwgPSBDdXJsX2d0bHNfcHVsbF9zc2w7CisgIH0KKyAgZWxzZSB7CisgICAgLyogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgc29ja2V0ICovCisgICAgdHJhbnNwb3J0X3B0ciA9IEdOVVRMU19JTlRfVE9fUE9JTlRFUl9DQVNUKGNvbm4tPnNvY2tbc29ja2luZGV4XSk7CisgICAgZ251dGxzX3RyYW5zcG9ydF9wdXNoID0gQ3VybF9ndGxzX3B1c2g7CisgICAgZ251dGxzX3RyYW5zcG9ydF9wdWxsID0gQ3VybF9ndGxzX3B1bGw7CisgIH0KKworICAvKiBzZXQgdGhlIGNvbm5lY3Rpb24gaGFuZGxlICovCisgIGdudXRsc190cmFuc3BvcnRfc2V0X3B0cihzZXNzaW9uLCB0cmFuc3BvcnRfcHRyKTsKIAogICAvKiByZWdpc3RlciBjYWxsYmFjayBmdW5jdGlvbnMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhLiAqLwotICBnbnV0bHNfdHJhbnNwb3J0X3NldF9wdXNoX2Z1bmN0aW9uKHNlc3Npb24sIEN1cmxfZ3Rsc19wdXNoKTsKLSAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihzZXNzaW9uLCBDdXJsX2d0bHNfcHVsbCk7CisgIGdudXRsc190cmFuc3BvcnRfc2V0X3B1c2hfZnVuY3Rpb24oc2Vzc2lvbiwgZ251dGxzX3RyYW5zcG9ydF9wdXNoKTsKKyAgZ251dGxzX3RyYW5zcG9ydF9zZXRfcHVsbF9mdW5jdGlvbihzZXNzaW9uLCBnbnV0bHNfdHJhbnNwb3J0X3B1bGwpOwogCiAgIC8qIGxvd2F0IG11c3QgYmUgc2V0IHRvIHplcm8gd2hlbiB1c2luZyBjdXN0b20gcHVzaCBhbmQgcHVsbCBmdW5jdGlvbnMuICovCiAgIGdudXRsc190cmFuc3BvcnRfc2V0X2xvd2F0KHNlc3Npb24sIDApOwogCiAjaWZkZWYgSEFTX09DU1AKLSAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlzdGF0dXMpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICByYyA9IGdudXRsc19vY3NwX3N0YXR1c19yZXF1ZXN0X2VuYWJsZV9jbGllbnQoc2Vzc2lvbiwgTlVMTCwgMCwgTlVMTCk7CiAgICAgaWYocmMgIT0gR05VVExTX0VfU1VDQ0VTUykgewogICAgICAgZmFpbGYoZGF0YSwgImdudXRsc19vY3NwX3N0YXR1c19yZXF1ZXN0X2VuYWJsZV9jbGllbnQoKSBmYWlsZWQ6ICVkIiwgcmMpOwpAQCAtNzQ3LDEyICs3ODEsMTIgQEAKIAogICAvKiBUaGlzIG1pZ2h0IGJlIGEgcmVjb25uZWN0LCBzbyB3ZSBjaGVjayBmb3IgYSBzZXNzaW9uIElEIGluIHRoZSBjYWNoZQogICAgICB0byBzcGVlZCB1cCB0aGluZ3MgKi8KLSAgaWYoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpIHsKKyAgaWYoZGF0YS0+c2V0LmdlbmVyYWxfc3NsLnNlc3Npb25pZCkgewogICAgIHZvaWQgKnNzbF9zZXNzaW9uaWQ7CiAgICAgc2l6ZV90IHNzbF9pZHNpemU7CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCAmc3NsX2lkc2l6ZSkpIHsKKyAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCAmc3NsX2lkc2l6ZSwgc29ja2luZGV4KSkgewogICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLwogICAgICAgZ251dGxzX3Nlc3Npb25fc2V0X2RhdGEoc2Vzc2lvbiwgc3NsX3Nlc3Npb25pZCwgc3NsX2lkc2l6ZSk7CiAKQEAgLTg0Nyw4ICs4ODEsOSBAQAogICBnbnV0bHNfZGF0dW1fdCBwcm90bzsKICNlbmRpZgogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9PSzsKLQogICBnbnV0bHNfcHJvdG9jb2xfdCB2ZXJzaW9uID0gZ251dGxzX3Byb3RvY29sX2dldF92ZXJzaW9uKHNlc3Npb24pOworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CiAKICAgLyogdGhlIG5hbWUgb2YgdGhlIGNpcGhlciBzdWl0ZSB1c2VkLCBlLmcuIEVDREhFX1JTQV9BRVNfMjU2X0dDTV9TSEEzODQuICovCiAgIHB0ciA9IGdudXRsc19jaXBoZXJfc3VpdGVfZ2V0X25hbWUoZ251dGxzX2t4X2dldChzZXNzaW9uKSwKQEAgLTg2NiwxMyArOTAxLDEzIEBACiAKICAgY2hhaW5wID0gZ251dGxzX2NlcnRpZmljYXRlX2dldF9wZWVycyhzZXNzaW9uLCAmY2VydF9saXN0X3NpemUpOwogICBpZighY2hhaW5wKSB7Ci0gICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyIHx8Ci0gICAgICAgZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0IHx8Ci0gICAgICAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0KSB7CisgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpIHx8CisgICAgICAgU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpIHx8CisgICAgICAgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIHsKICNpZmRlZiBVU0VfVExTX1NSUAotICAgICAgaWYoZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQCi0gICAgICAgICAmJiBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lICE9IE5VTEwKLSAgICAgICAgICYmICFkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIKKyAgICAgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQCisgICAgICAgICAmJiBTU0xfU0VUX09QVElPTih1c2VybmFtZSkgIT0gTlVMTAorICAgICAgICAgJiYgIVNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKQogICAgICAgICAgJiYgZ251dGxzX2NpcGhlcl9nZXQoc2Vzc2lvbikpIHsKICAgICAgICAgLyogbm8gcGVlciBjZXJ0LCBidXQgYXV0aCBpcyBvayBpZiB3ZSBoYXZlIFNSUCB1c2VyIGFuZCBjaXBoZXIgYW5kIG5vCiAgICAgICAgICAgIHBlZXIgdmVyaWZ5ICovCkBAIC05MDUsNyArOTQwLDcgQEAKICAgICB9CiAgIH0KIAotICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgLyogVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byB2ZXJpZnkgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZSBhbmQgcmV0dXJuIGl0cwogICAgICAgIHN0YXR1cyAodHJ1c3RlZCwgaW52YWxpZCBldGMuKS4gVGhlIHZhbHVlIG9mIHN0YXR1cyBzaG91bGQgYmUgb25lIG9yCiAgICAgICAgbW9yZSBvZiB0aGUgZ251dGxzX2NlcnRpZmljYXRlX3N0YXR1c190IGVudW1lcmF0ZWQgZWxlbWVudHMgYml0d2lzZQpAQCAtOTIxLDEwICs5NTYsMTEgQEAKIAogICAgIC8qIHZlcmlmeV9zdGF0dXMgaXMgYSBiaXRtYXNrIG9mIGdudXRsc19jZXJ0aWZpY2F0ZV9zdGF0dXMgYml0cyAqLwogICAgIGlmKHZlcmlmeV9zdGF0dXMgJiBHTlVUTFNfQ0VSVF9JTlZBTElEKSB7Ci0gICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQuIENBZmlsZTogJXMgIgotICAgICAgICAgICAgICAiQ1JMZmlsZTogJXMiLCBkYXRhLT5zZXQuc3NsLkNBZmlsZT9kYXRhLT5zZXQuc3NsLkNBZmlsZToibm9uZSIsCi0gICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuQ1JMZmlsZT9kYXRhLT5zZXQuc3NsLkNSTGZpbGU6Im5vbmUiKTsKKyAgICAgICAgICAgICAgIkNSTGZpbGU6ICVzIiwgU1NMX0NPTk5fQ09ORklHKENBZmlsZSkgPyBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKToKKyAgICAgICAgICAgICAgIm5vbmUiLAorICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihDUkxmaWxlKT9TU0xfU0VUX09QVElPTihDUkxmaWxlKToibm9uZSIpOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVDsKICAgICAgIH0KICAgICAgIGVsc2UKQEAgLTkzNyw3ICs5NzMsNyBAQAogICAgIGluZm9mKGRhdGEsICJcdCBzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIFNLSVBQRURcbiIpOwogCiAjaWZkZWYgSEFTX09DU1AKLSAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlzdGF0dXMpIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpIHsKICAgICBpZihnbnV0bHNfb2NzcF9zdGF0dXNfcmVxdWVzdF9pc19jaGVja2VkKHNlc3Npb24sIDApID09IDApIHsKICAgICAgIGdudXRsc19kYXR1bV90IHN0YXR1c19yZXF1ZXN0OwogICAgICAgZ251dGxzX29jc3BfcmVzcF90IG9jc3BfcmVzcDsKQEAgLTEwNDksMjEgKzEwODUsMjEgQEAKICAgICAgICBnbnV0bHNfeDUwOV9jcnRfdCBmb3JtYXQgKi8KICAgICBnbnV0bHNfeDUwOV9jcnRfaW1wb3J0KHg1MDlfY2VydCwgY2hhaW5wLCBHTlVUTFNfWDUwOV9GTVRfREVSKTsKIAotICBpZihkYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQpIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpIHsKICAgICBnbnV0bHNfeDUwOV9jcnRfaW5pdCgmeDUwOV9pc3N1ZXIpOwotICAgIGlzc3VlcnAgPSBsb2FkX2ZpbGUoZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0KTsKKyAgICBpc3N1ZXJwID0gbG9hZF9maWxlKFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKICAgICBnbnV0bHNfeDUwOV9jcnRfaW1wb3J0KHg1MDlfaXNzdWVyLCAmaXNzdWVycCwgR05VVExTX1g1MDlfRk1UX1BFTSk7CiAgICAgcmMgPSBnbnV0bHNfeDUwOV9jcnRfY2hlY2tfaXNzdWVyKHg1MDlfY2VydCwgeDUwOV9pc3N1ZXIpOwogICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9pc3N1ZXIpOwogICAgIHVubG9hZF9maWxlKGlzc3VlcnApOwogICAgIGlmKHJjIDw9IDApIHsKICAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgY2VydGlmaWNhdGUgaXNzdWVyIGNoZWNrIGZhaWxlZCAoSXNzdWVyQ2VydDogJXMpIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zc2wuaXNzdWVyY2VydD9kYXRhLT5zZXQuc3NsLmlzc3VlcmNlcnQ6Im5vbmUiKTsKKyAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpP1NTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpOiJub25lIik7CiAgICAgICBnbnV0bHNfeDUwOV9jcnRfZGVpbml0KHg1MDlfY2VydCk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUjsKICAgICB9CiAgICAgaW5mb2YoZGF0YSwgIlx0IHNlcnZlciBjZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgT0sgKElzc3VlciBDZXJ0OiAlcylcbiIsCi0gICAgICAgICAgZGF0YS0+c2V0LnNzbC5pc3N1ZXJjZXJ0P2RhdGEtPnNldC5zc2wuaXNzdWVyY2VydDoibm9uZSIpOworICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpP1NTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpOiJub25lIik7CiAgIH0KIAogICBzaXplPXNpemVvZihjZXJ0YnVmKTsKQEAgLTEwODIsNyArMTExOCw3IEBACiAgICAgIGluIFJGQzI4MTggKEhUVFBTKSwgd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IHdpbGRjYXJkcywgYW5kIHRoZSBzdWJqZWN0CiAgICAgIGFsdGVybmF0aXZlIG5hbWUgUEtJWCBleHRlbnNpb24uIFJldHVybnMgbm9uIHplcm8gb24gc3VjY2VzcywgYW5kIHplcm8gb24KICAgICAgZmFpbHVyZS4gKi8KLSAgcmMgPSBnbnV0bHNfeDUwOV9jcnRfY2hlY2tfaG9zdG5hbWUoeDUwOV9jZXJ0LCBjb25uLT5ob3N0Lm5hbWUpOworICByYyA9IGdudXRsc194NTA5X2NydF9jaGVja19ob3N0bmFtZSh4NTA5X2NlcnQsIGhvc3RuYW1lKTsKICNpZiBHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPCAweDAzMDMwNgogICAvKiBCZWZvcmUgMy4zLjYsIGdudXRsc194NTA5X2NydF9jaGVja19ob3N0bmFtZSgpIGRpZG4ndCBjaGVjayBJUAogICAgICBhZGRyZXNzZXMuICovCkBAIC0xMDk4LDEwICsxMTM0LDEwIEBACiAgICAgaW50IGk7CiAgICAgaW50IHJldCA9IDA7CiAKLSAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsIGFkZHJidWYpID4gMCkKKyAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgYWRkcmJ1ZikgPiAwKQogICAgICAgYWRkcmxlbiA9IDQ7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBlbHNlIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBjb25uLT5ob3N0Lm5hbWUsIGFkZHJidWYpID4gMCkKKyAgICBlbHNlIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgYWRkcmJ1ZikgPiAwKQogICAgICAgYWRkcmxlbiA9IDE2OwogI2VuZGlmCiAKQEAgLTExMjYsMTUgKzExNjIsMTggQEAKICAgfQogI2VuZGlmCiAgIGlmKCFyYykgewotICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCkgeworICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICAgIGNvbm4tPmh0dHBfcHJveHkuaG9zdC5kaXNwbmFtZSA6IGNvbm4tPmhvc3QuZGlzcG5hbWU7CisKKyAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5aG9zdCkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAoJXMpIGRvZXMgbm90IG1hdGNoICIKLSAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBjZXJ0YnVmLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBjZXJ0YnVmLCBkaXNwbmFtZSk7CiAgICAgICBnbnV0bHNfeDUwOV9jcnRfZGVpbml0KHg1MDlfY2VydCk7CiAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICAgIH0KICAgICBlbHNlCiAgICAgICBpbmZvZihkYXRhLCAiXHQgY29tbW9uIG5hbWU6ICVzIChkb2VzIG5vdCBtYXRjaCAnJXMnKVxuIiwKLSAgICAgICAgICAgIGNlcnRidWYsIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICAgICAgY2VydGJ1ZiwgZGlzcG5hbWUpOwogICB9CiAgIGVsc2UKICAgICBpbmZvZihkYXRhLCAiXHQgY29tbW9uIG5hbWU6ICVzIChtYXRjaGVkKVxuIiwgY2VydGJ1Zik7CkBAIC0xMTQzLDcgKzExODIsNyBAQAogICBjZXJ0Y2xvY2sgPSBnbnV0bHNfeDUwOV9jcnRfZ2V0X2V4cGlyYXRpb25fdGltZSh4NTA5X2NlcnQpOwogCiAgIGlmKGNlcnRjbG9jayA9PSAodGltZV90KS0xKSB7Ci0gICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICBmYWlsZihkYXRhLCAic2VydmVyIGNlcnQgZXhwaXJhdGlvbiBkYXRlIHZlcmlmeSBmYWlsZWQiKTsKICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTExNTMsNyArMTE5Miw3IEBACiAgIH0KICAgZWxzZSB7CiAgICAgaWYoY2VydGNsb2NrIDwgdGltZShOVUxMKSkgewotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0aWZpY2F0ZSBleHBpcmF0aW9uIGRhdGUgaGFzIHBhc3NlZC4iKTsKICAgICAgICAgZ251dGxzX3g1MDlfY3J0X2RlaW5pdCh4NTA5X2NlcnQpOwogICAgICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwpAQCAtMTE2OCw3ICsxMjA3LDcgQEAKICAgY2VydGNsb2NrID0gZ251dGxzX3g1MDlfY3J0X2dldF9hY3RpdmF0aW9uX3RpbWUoeDUwOV9jZXJ0KTsKIAogICBpZihjZXJ0Y2xvY2sgPT0gKHRpbWVfdCktMSkgewotICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkgewogICAgICAgZmFpbGYoZGF0YSwgInNlcnZlciBjZXJ0IGFjdGl2YXRpb24gZGF0ZSB2ZXJpZnkgZmFpbGVkIik7CiAgICAgICBnbnV0bHNfeDUwOV9jcnRfZGVpbml0KHg1MDlfY2VydCk7CiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC0xMTc4LDcgKzEyMTcsNyBAQAogICB9CiAgIGVsc2UgewogICAgIGlmKGNlcnRjbG9jayA+IHRpbWUoTlVMTCkpIHsKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgICAgIGZhaWxmKGRhdGEsICJzZXJ2ZXIgY2VydGlmaWNhdGUgbm90IGFjdGl2YXRlZCB5ZXQuIik7CiAgICAgICAgIGdudXRsc194NTA5X2NydF9kZWluaXQoeDUwOV9jZXJ0KTsKICAgICAgICAgcmV0dXJuIENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKQEAgLTEyNzAsNyArMTMwOSw3IEBACiAgIGNvbm4tPnJlY3Zbc29ja2luZGV4XSA9IGd0bHNfcmVjdjsKICAgY29ubi0+c2VuZFtzb2NraW5kZXhdID0gZ3Rsc19zZW5kOwogCi0gIGlmKGNvbm4tPnNzbF9jb25maWcuc2Vzc2lvbmlkKSB7CisgIGlmKGRhdGEtPnNldC5nZW5lcmFsX3NzbC5zZXNzaW9uaWQpIHsKICAgICAvKiB3ZSBhbHdheXMgdW5jb25kaXRpb25hbGx5IGdldCB0aGUgc2Vzc2lvbiBpZCBoZXJlLCBhcyBldmVuIGlmIHdlCiAgICAgICAgYWxyZWFkeSBnb3QgaXQgZnJvbSB0aGUgY2FjaGUgYW5kIGFza2VkIHRvIHVzZSBpdCBpbiB0aGUgY29ubmVjdGlvbiwgaXQKICAgICAgICBtaWdodCd2ZSBiZWVuIHJlamVjdGVkIGFuZCB0aGVuIGEgbmV3IG9uZSBpcyBpbiB1c2Ugbm93IGFuZCB3ZSBuZWVkIHRvCkBAIC0xMjg5LDcgKzEzMjgsOCBAQAogICAgICAgZ251dGxzX3Nlc3Npb25fZ2V0X2RhdGEoc2Vzc2lvbiwgY29ubmVjdF9zZXNzaW9uaWQsICZjb25uZWN0X2lkc2l6ZSk7CiAKICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgICAgaW5jYWNoZSA9ICEoQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZzc2xfc2Vzc2lvbmlkLCBOVUxMKSk7CisgICAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KSk7CiAgICAgICBpZihpbmNhY2hlKSB7CiAgICAgICAgIC8qIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGluIHRoZSBjYWNoZSwgc28gaW5zdGVhZCBvZiByaXNraW5nIHRoYXQgdGhlCiAgICAgICAgICAgIHByZXZpb3VzIG9uZSB3YXMgcmVqZWN0ZWQsIHdlIGp1c3Qga2lsbCB0aGF0IGFuZCBzdG9yZSB0aGUgbmV3ICovCkBAIC0xMjk3LDcgKzEzMzcsOCBAQAogICAgICAgfQogCiAgICAgICAvKiBzdG9yZSB0aGlzIHNlc3Npb24gaWQgKi8KLSAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBjb25uZWN0X3Nlc3Npb25pZCwgY29ubmVjdF9pZHNpemUpOworICAgICAgcmVzdWx0ID0gQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKGNvbm4sIGNvbm5lY3Rfc2Vzc2lvbmlkLCBjb25uZWN0X2lkc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpOwogICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICBmcmVlKGNvbm5lY3Rfc2Vzc2lvbmlkKTsKQEAgLTEzNzksNiArMTQyMCwyMCBAQAogICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKK2Jvb2wgQ3VybF9ndGxzX2RhdGFfcGVuZGluZyhjb25zdCBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBjb25uaW5kZXgpCit7CisgIGJvb2wgcmVzID0gRkFMU0U7CisgIGlmKGNvbm4tPnNzbFtjb25uaW5kZXhdLnNlc3Npb24gJiYKKyAgICAgMCAhPSBnbnV0bHNfcmVjb3JkX2NoZWNrX3BlbmRpbmcoY29ubi0+c3NsW2Nvbm5pbmRleF0uc2Vzc2lvbikpCisgICAgcmVzID0gVFJVRTsKKworICBpZihjb25uLT5wcm94eV9zc2xbY29ubmluZGV4XS5zZXNzaW9uICYmCisgICAgIDAgIT0gZ251dGxzX3JlY29yZF9jaGVja19wZW5kaW5nKGNvbm4tPnByb3h5X3NzbFtjb25uaW5kZXhdLnNlc3Npb24pKQorICAgIHJlcyA9IFRSVUU7CisKKyAgcmV0dXJuIHJlczsKK30KKwogc3RhdGljIHNzaXplX3QgZ3Rsc19zZW5kKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm1lbSwKQEAgLTEzOTgsMjkgKzE0NTMsMjkgQEAKICAgcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBjbG9zZV9vbmUoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAotICAgICAgICAgICAgICAgICAgICAgIGludCBpZHgpCitzdGF0aWMgdm9pZCBjbG9zZV9vbmUoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKnNzbCkKIHsKLSAgaWYoY29ubi0+c3NsW2lkeF0uc2Vzc2lvbikgewotICAgIGdudXRsc19ieWUoY29ubi0+c3NsW2lkeF0uc2Vzc2lvbiwgR05VVExTX1NIVVRfUkRXUik7Ci0gICAgZ251dGxzX2RlaW5pdChjb25uLT5zc2xbaWR4XS5zZXNzaW9uKTsKLSAgICBjb25uLT5zc2xbaWR4XS5zZXNzaW9uID0gTlVMTDsKKyAgaWYoc3NsLT5zZXNzaW9uKSB7CisgICAgZ251dGxzX2J5ZShzc2wtPnNlc3Npb24sIEdOVVRMU19TSFVUX1JEV1IpOworICAgIGdudXRsc19kZWluaXQoc3NsLT5zZXNzaW9uKTsKKyAgICBzc2wtPnNlc3Npb24gPSBOVUxMOwogICB9Ci0gIGlmKGNvbm4tPnNzbFtpZHhdLmNyZWQpIHsKLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhjb25uLT5zc2xbaWR4XS5jcmVkKTsKLSAgICBjb25uLT5zc2xbaWR4XS5jcmVkID0gTlVMTDsKKyAgaWYoc3NsLT5jcmVkKSB7CisgICAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoc3NsLT5jcmVkKTsKKyAgICBzc2wtPmNyZWQgPSBOVUxMOwogICB9CiAjaWZkZWYgVVNFX1RMU19TUlAKLSAgaWYoY29ubi0+c3NsW2lkeF0uc3JwX2NsaWVudF9jcmVkKSB7Ci0gICAgZ251dGxzX3NycF9mcmVlX2NsaWVudF9jcmVkZW50aWFscyhjb25uLT5zc2xbaWR4XS5zcnBfY2xpZW50X2NyZWQpOwotICAgIGNvbm4tPnNzbFtpZHhdLnNycF9jbGllbnRfY3JlZCA9IE5VTEw7CisgIGlmKHNzbC0+c3JwX2NsaWVudF9jcmVkKSB7CisgICAgZ251dGxzX3NycF9mcmVlX2NsaWVudF9jcmVkZW50aWFscyhzc2wtPnNycF9jbGllbnRfY3JlZCk7CisgICAgc3NsLT5zcnBfY2xpZW50X2NyZWQgPSBOVUxMOwogICB9CiAjZW5kaWYKIH0KIAogdm9pZCBDdXJsX2d0bHNfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewotICBjbG9zZV9vbmUoY29ubiwgc29ja2luZGV4KTsKKyAgY2xvc2Vfb25lKCZjb25uLT5zc2xbc29ja2luZGV4XSk7CisgIGNsb3NlX29uZSgmY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0pOwogfQogCiAvKgpAQCAtMTQ0NSw4ICsxNTAwLDggQEAKIAogICBpZihjb25uLT5zc2xbc29ja2luZGV4XS5zZXNzaW9uKSB7CiAgICAgd2hpbGUoIWRvbmUpIHsKLSAgICAgIGludCB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkoY29ubi0+c29ja1tzb2NraW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMX1NPQ0tFVF9CQUQsIFNTTF9TSFVURE9XTl9USU1FT1VUKTsKKyAgICAgIGludCB3aGF0ID0gU09DS0VUX1JFQURBQkxFKGNvbm4tPnNvY2tbc29ja2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TSFVURE9XTl9USU1FT1VUKTsKICAgICAgIGlmKHdoYXQgPiAwKSB7CiAgICAgICAgIC8qIFNvbWV0aGluZyB0byByZWFkLCBsZXQncyBkbyBpdCBhbmQgaG9wZSB0aGF0IGl0IGlzIHRoZSBjbG9zZQogICAgICAgICAgICBub3RpZnkgYWxlcnQgZnJvbSB0aGUgc2VydmVyICovCkBAIC0xNDg2LDggKzE1NDEsOCBAQAogICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhjb25uLT5zc2xbc29ja2luZGV4XS5jcmVkKTsKIAogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUAotICAgICAmJiBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lICE9IE5VTEwpCisgIGlmKFNTTF9TRVRfT1BUSU9OKGF1dGh0eXBlKSA9PSBDVVJMX1RMU0FVVEhfU1JQCisgICAgICYmIFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKSAhPSBOVUxMKQogICAgIGdudXRsc19zcnBfZnJlZV9jbGllbnRfY3JlZGVudGlhbHMoY29ubi0+c3NsW3NvY2tpbmRleF0uc3JwX2NsaWVudF9jcmVkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9saWIvdnRscy9ndGxzLmggYi9saWIvdnRscy9ndGxzLmgKaW5kZXggZTBhOTVhNy4uZTNkNTg1MyAxMDA2NDQKLS0tIGEvbGliL3Z0bHMvZ3Rscy5oCisrKyBiL2xpYi92dGxzL2d0bHMuaApAQCAtMzQsNiArMzQsOCBAQAogQ1VSTGNvZGUgQ3VybF9ndGxzX2Nvbm5lY3Rfbm9uYmxvY2tpbmcoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpOworYm9vbCBDdXJsX2d0bHNfZGF0YV9wZW5kaW5nKGNvbnN0IHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmluZGV4KTsKIAogIC8qIGNsb3NlIGEgU1NMIGNvbm5lY3Rpb24gKi8KIHZvaWQgQ3VybF9ndGxzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCk7CkBAIC04MSw3ICs4Myw3IEBACiAjZGVmaW5lIGN1cmxzc2xfZW5naW5lc19saXN0KHgpICgodm9pZCl4LCAoc3RydWN0IGN1cmxfc2xpc3QgKilOVUxMKQogI2RlZmluZSBjdXJsc3NsX3ZlcnNpb24gQ3VybF9ndGxzX3ZlcnNpb24KICNkZWZpbmUgY3VybHNzbF9jaGVja19jeG4oeCkgKCh2b2lkKXgsIC0xKQotI2RlZmluZSBjdXJsc3NsX2RhdGFfcGVuZGluZyh4LHkpICgodm9pZCl4LCAodm9pZCl5LCAwKQorI2RlZmluZSBjdXJsc3NsX2RhdGFfcGVuZGluZyh4LHkpIEN1cmxfZ3Rsc19kYXRhX3BlbmRpbmcoeCx5KQogI2RlZmluZSBjdXJsc3NsX3JhbmRvbSh4LHkseikgQ3VybF9ndGxzX3JhbmRvbSh4LHkseikKICNkZWZpbmUgY3VybHNzbF9tZDVzdW0oYSxiLGMsZCkgQ3VybF9ndGxzX21kNXN1bShhLGIsYyxkKQogI2RlZmluZSBjdXJsc3NsX3NoYTI1NnN1bShhLGIsYyxkKSBDdXJsX2d0bHNfc2hhMjU2c3VtKGEsYixjLGQpCmRpZmYgLS1naXQgYS9saWIvdnRscy9tYmVkdGxzLmMgYi9saWIvdnRscy9tYmVkdGxzLmMKaW5kZXggYTFlN2QyMy4uYzQyOGEyMSAxMDA2NDQKLS0tIGEvbGliL3Z0bHMvbWJlZHRscy5jCisrKyBiL2xpYi92dGxzL21iZWR0bHMuYwpAQCAtMzEsMTEgKzMxLDE1IEBACiAKICNpZmRlZiBVU0VfTUJFRFRMUwogCisjaW5jbHVkZSA8bWJlZHRscy92ZXJzaW9uLmg+CisjaWYgTUJFRFRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAyMDQwMDAwCisjaW5jbHVkZSA8bWJlZHRscy9uZXRfc29ja2V0cy5oPgorI2Vsc2UKICNpbmNsdWRlIDxtYmVkdGxzL25ldC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bWJlZHRscy9zc2wuaD4KICNpbmNsdWRlIDxtYmVkdGxzL2NlcnRzLmg+CiAjaW5jbHVkZSA8bWJlZHRscy94NTA5Lmg+Ci0jaW5jbHVkZSA8bWJlZHRscy92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxtYmVkdGxzL2Vycm9yLmg+CiAjaW5jbHVkZSA8bWJlZHRscy9lbnRyb3B5Lmg+CkBAIC01MCw3ICs1NCw2IEBACiAjaW5jbHVkZSAicGFyc2VkYXRlLmgiCiAjaW5jbHVkZSAiY29ubmVjdC5oIiAvKiBmb3IgdGhlIGNvbm5lY3QgdGltZW91dCAqLwogI2luY2x1ZGUgInNlbGVjdC5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgogI2luY2x1ZGUgInBvbGFyc3NsX3RocmVhZGxvY2suaCIKIAogLyogVGhlIGxhc3QgMyAjaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW4gdGhpcyBvcmRlciAqLwpAQCAtMTYwLDEzICsxNjMsMjEgQEAKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhKiBjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOworICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NhZmlsZSA9IFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpOworICBjb25zdCBib29sIHZlcmlmeXBlZXIgPSBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcik7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CisgIGNoYXIgKiBjb25zdCBzc2xfY2VydCA9IFNTTF9TRVRfT1BUSU9OKGNlcnQpOworICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NybGZpbGUgPSBTU0xfU0VUX09QVElPTihDUkxmaWxlKTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBsb25nIGludCBwb3J0ID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CiAKICAgaW50IHJldCA9IC0xOwogICBjaGFyIGVycm9yYnVmWzEyOF07CiAgIGVycm9yYnVmWzBdPTA7CiAKICAgLyogbWJlZFRMUyBvbmx5IHN1cHBvcnRzIFNTTHYzIGFuZCBUTFN2MSAqLwotICBpZihkYXRhLT5zZXQuc3NsLnZlcnNpb24gPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKICAgICBmYWlsZihkYXRhLCAibWJlZFRMUyBkb2VzIG5vdCBzdXBwb3J0IFNTTHYyIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CkBAIC0yMDIsMzQgKzIxMywzMiBAQAogICAvKiBMb2FkIHRoZSB0cnVzdGVkIENBICovCiAgIG1iZWR0bHNfeDUwOV9jcnRfaW5pdCgmY29ubnNzbC0+Y2FjZXJ0KTsKIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSkgewotICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgmY29ubnNzbC0+Y2FjZXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSk7CisgIGlmKHNzbF9jYWZpbGUpIHsKKyAgICByZXQgPSBtYmVkdGxzX3g1MDlfY3J0X3BhcnNlX2ZpbGUoJmNvbm5zc2wtPmNhY2VydCwgc3NsX2NhZmlsZSk7CiAKICAgICBpZihyZXQ8MCkgewogI2lmZGVmIE1CRURUTFNfRVJST1JfQwogICAgICAgbWJlZHRsc19zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKICNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KICAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAtIG1iZWRUTFM6ICgtMHglMDRYKSAlcyIsCi0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwgLXJldCwgZXJyb3JidWYpOworICAgICAgICAgICAgc3NsX2NhZmlsZSwgLXJldCwgZXJyb3JidWYpOwogCi0gICAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpCisgICAgICBpZih2ZXJpZnlwZWVyKQogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIH0KICAgfQogCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdKSB7Ci0gICAgcmV0ID0gbWJlZHRsc194NTA5X2NydF9wYXJzZV9wYXRoKCZjb25uc3NsLT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdKTsKKyAgaWYoc3NsX2NhcGF0aCkgeworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfcGF0aCgmY29ubnNzbC0+Y2FjZXJ0LCBzc2xfY2FwYXRoKTsKIAogICAgIGlmKHJldDwwKSB7CiAjaWZkZWYgTUJFRFRMU19FUlJPUl9DCiAgICAgICBtYmVkdGxzX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwogI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLwogICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgY2EgY2VydCBwYXRoICVzIC0gbWJlZFRMUzogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdLCAtcmV0LCBlcnJvcmJ1Zik7CisgICAgICAgICAgICBzc2xfY2FwYXRoLCAtcmV0LCBlcnJvcmJ1Zik7CiAKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikKKyAgICAgIGlmKHZlcmlmeXBlZXIpCiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEU7CiAgICAgfQogICB9CkBAIC0yMzcsMTYgKzI0NiwxNSBAQAogICAvKiBMb2FkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgKi8KICAgbWJlZHRsc194NTA5X2NydF9pbml0KCZjb25uc3NsLT5jbGljZXJ0KTsKIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSkgewotICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgmY29ubnNzbC0+Y2xpY2VydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOworICBpZihzc2xfY2VydCkgeworICAgIHJldCA9IG1iZWR0bHNfeDUwOV9jcnRfcGFyc2VfZmlsZSgmY29ubnNzbC0+Y2xpY2VydCwgc3NsX2NlcnQpOwogCiAgICAgaWYocmV0KSB7CiAjaWZkZWYgTUJFRFRMU19FUlJPUl9DCiAgICAgICBtYmVkdGxzX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwogI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLwogICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgY2xpZW50IGNlcnQgZmlsZSAlcyAtIG1iZWRUTFM6ICgtMHglMDRYKSAlcyIsCi0gICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwgLXJldCwgZXJyb3JidWYpOworICAgICAgICAgICAgc3NsX2NlcnQsIC1yZXQsIGVycm9yYnVmKTsKIAogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKICAgICB9CkBAIC0yNTUsOSArMjYzLDkgQEAKICAgLyogTG9hZCB0aGUgY2xpZW50IHByaXZhdGUga2V5ICovCiAgIG1iZWR0bHNfcGtfaW5pdCgmY29ubnNzbC0+cGspOwogCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pIHsKLSAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoJmNvbm5zc2wtPnBrLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSk7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGtleSkpIHsKKyAgICByZXQgPSBtYmVkdGxzX3BrX3BhcnNlX2tleWZpbGUoJmNvbm5zc2wtPnBrLCBTU0xfU0VUX09QVElPTihrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXlfcGFzc3dkKSk7CiAgICAgaWYocmV0ID09IDAgJiYgIW1iZWR0bHNfcGtfY2FuX2RvKCZjb25uc3NsLT5waywgTUJFRFRMU19QS19SU0EpKQogICAgICAgcmV0ID0gTUJFRFRMU19FUlJfUEtfVFlQRV9NSVNNQVRDSDsKIApAQCAtMjY2LDcgKzI3NCw3IEBACiAgICAgICBtYmVkdGxzX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwogI2VuZGlmIC8qIE1CRURUTFNfRVJST1JfQyAqLwogICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgcHJpdmF0ZSBrZXkgJXMgLSBtYmVkVExTOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwgLXJldCwgZXJyb3JidWYpOworICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5KSwgLXJldCwgZXJyb3JidWYpOwogCiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwogICAgIH0KQEAgLTI3NSwyMyArMjgzLDIxIEBACiAgIC8qIExvYWQgdGhlIENSTCAqLwogICBtYmVkdGxzX3g1MDlfY3JsX2luaXQoJmNvbm5zc2wtPmNybCk7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdKSB7Ci0gICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCZjb25uc3NsLT5jcmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSk7CisgIGlmKHNzbF9jcmxmaWxlKSB7CisgICAgcmV0ID0gbWJlZHRsc194NTA5X2NybF9wYXJzZV9maWxlKCZjb25uc3NsLT5jcmwsIHNzbF9jcmxmaWxlKTsKIAogICAgIGlmKHJldCkgewogI2lmZGVmIE1CRURUTFNfRVJST1JfQwogICAgICAgbWJlZHRsc19zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKICNlbmRpZiAvKiBNQkVEVExTX0VSUk9SX0MgKi8KICAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIENSTCBmaWxlICVzIC0gbWJlZFRMUzogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSwgLXJldCwgZXJyb3JidWYpOworICAgICAgICAgICAgc3NsX2NybGZpbGUsIC1yZXQsIGVycm9yYnVmKTsKIAogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKICAgICB9CiAgIH0KIAotICBpbmZvZihkYXRhLCAibWJlZFRMUzogQ29ubmVjdGluZyB0byAlczolZFxuIiwKLSAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCk7CisgIGluZm9mKGRhdGEsICJtYmVkVExTOiBDb25uZWN0aW5nIHRvICVzOiVkXG4iLCBob3N0bmFtZSwgcG9ydCk7CiAKICAgbWJlZHRsc19zc2xfY29uZmlnX2luaXQoJmNvbm5zc2wtPmNvbmZpZyk7CiAKQEAgLTMxMyw3ICszMTksNyBAQAogICBtYmVkdGxzX3NzbF9jb25mX2NlcnRfcHJvZmlsZSgmY29ubnNzbC0+Y29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc194NTA5X2NydF9wcm9maWxlX2ZyKTsKIAotICBzd2l0Y2goZGF0YS0+c2V0LnNzbC52ZXJzaW9uKSB7CisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CiAgICAgbWJlZHRsc19zc2xfY29uZl9taW5fdmVyc2lvbigmY29ubnNzbC0+Y29uZmlnLCBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzMsCkBAIC0zNDgsOCArMzU0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzMpOwogICAgIGluZm9mKGRhdGEsICJtYmVkVExTOiBTZXQgU1NMIHZlcnNpb24gdG8gVExTIDEuMlxuIik7CiAgICAgYnJlYWs7CisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6CisgICAgZmFpbGYoZGF0YSwgIm1iZWRUTFM6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIGRlZmF1bHQ6Ci0gICAgZmFpbGYoZGF0YSwgIm1iZWRUTFM6IFVuc3VwcG9ydGVkIFNTTCBwcm90b2NvbCB2ZXJzaW9uIik7CisgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KIApAQCAtMzY2LDExICszNzUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfbGlzdF9jaXBoZXJzdWl0ZXMoKSk7CiAKICAgLyogQ2hlY2sgaWYgdGhlcmUncyBhIGNhY2hlZCBJRCB3ZSBjYW4vc2hvdWxkIHVzZSBoZXJlISAqLwotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgdm9pZCAqb2xkX3Nlc3Npb24gPSBOVUxMOwogCiAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3Nlc3Npb24sIE5VTEwpKSB7CisgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3Nlc3Npb24sIE5VTEwsIHNvY2tpbmRleCkpIHsKICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3NldF9zZXNzaW9uKCZjb25uc3NsLT5zc2wsIG9sZF9zZXNzaW9uKTsKICAgICAgIGlmKHJldCkgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwpAQCAtMzg2LDExICszOTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubnNzbC0+Y2FjZXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uc3NsLT5jcmwpOwogCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSkgewogICAgIG1iZWR0bHNfc3NsX2NvbmZfb3duX2NlcnQoJmNvbm5zc2wtPmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uc3NsLT5jbGljZXJ0LCAmY29ubnNzbC0+cGspOwogICB9Ci0gIGlmKG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgmY29ubnNzbC0+c3NsLCBjb25uLT5ob3N0Lm5hbWUpKSB7CisgIGlmKG1iZWR0bHNfc3NsX3NldF9ob3N0bmFtZSgmY29ubnNzbC0+c3NsLCBob3N0bmFtZSkpIHsKICAgICAvKiBtYmVkdGxzX3NzbF9zZXRfaG9zdG5hbWUoKSBzZXRzIHRoZSBuYW1lIHRvIHVzZSBpbiBDTi9TQU4gY2hlY2tzICphbmQqCiAgICAgICAgdGhlIG5hbWUgdG8gc2V0IGluIHRoZSBTTkkgZXh0ZW5zaW9uLiBTbyBldmVuIGlmIGN1cmwgY29ubmVjdHMgdG8gYQogICAgICAgIGhvc3Qgc3BlY2lmaWVkIGFzIGFuIElQIGFkZHJlc3MsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkLiAqLwpAQCAtNDIwLDcgKzQyOSwxNSBAQAogI2VuZGlmCiAKICNpZmRlZiBNQkVEVExTX0RFQlVHCisgIC8qIEluIG9yZGVyIHRvIG1ha2UgdGhhdCB3b3JrIGluIG1iZWR0bHMgTUJFRFRMU19ERUJVR19DIG11c3QgYmUgZGVmaW5lZC4gKi8KICAgbWJlZHRsc19zc2xfY29uZl9kYmcoJmNvbm5zc2wtPmNvbmZpZywgbWJlZF9kZWJ1ZywgZGF0YSk7CisgIC8qIC0gMCBObyBkZWJ1ZworICAgKiAtIDEgRXJyb3IKKyAgICogLSAyIFN0YXRlIGNoYW5nZQorICAgKiAtIDMgSW5mb3JtYXRpb25hbAorICAgKiAtIDQgVmVyYm9zZQorICAgKi8KKyAgbWJlZHRsc19kZWJ1Z19zZXRfdGhyZXNob2xkKDQpOwogI2VuZGlmCiAKICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0XzI7CkBAIC00MzgsNyArNDU1LDcgQEAKICAgY29uc3QgbWJlZHRsc194NTA5X2NydCAqcGVlcmNlcnQ7CiAKICNpZmRlZiBIQVNfQUxQTgotICBjb25zdCBjaGFyKiBuZXh0X3Byb3RvY29sOworICBjb25zdCBjaGFyICpuZXh0X3Byb3RvY29sOwogI2VuZGlmCiAKICAgY2hhciBlcnJvcmJ1ZlsxMjhdOwpAQCAtNDcyLDcgKzQ4OSw3IEBACiAKICAgcmV0ID0gbWJlZHRsc19zc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCk7CiAKLSAgaWYocmV0ICYmIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICBpZihyZXQgJiYgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgaWYocmV0ICYgTUJFRFRMU19YNTA5X0JBRENFUlRfRVhQSVJFRCkKICAgICAgIGZhaWxmKGRhdGEsICJDZXJ0IHZlcmlmeSBmYWlsZWQ6IEJBRENFUlRfRVhQSVJFRCIpOwogCkBAIC01OTksNyArNjE2LDcgQEAKIAogICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8zID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwogCi0gIGlmKGNvbm4tPnNzbF9jb25maWcuc2Vzc2lvbmlkKSB7CisgIGlmKGRhdGEtPnNldC5nZW5lcmFsX3NzbC5zZXNzaW9uaWQpIHsKICAgICBpbnQgcmV0OwogICAgIG1iZWR0bHNfc3NsX3Nlc3Npb24gKm91cl9zc2xfc2Vzc2lvbmlkOwogICAgIHZvaWQgKm9sZF9zc2xfc2Vzc2lvbmlkID0gTlVMTDsKQEAgLTYxOCwxMCArNjM1LDEwIEBACiAKICAgICAvKiBJZiB0aGVyZSdzIGFscmVhZHkgYSBtYXRjaGluZyBzZXNzaW9uIGluIHRoZSBjYWNoZSwgZGVsZXRlIGl0ICovCiAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwpKQorICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLCBzb2NraW5kZXgpKQogICAgICAgQ3VybF9zc2xfZGVsc2Vzc2lvbmlkKGNvbm4sIG9sZF9zc2xfc2Vzc2lvbmlkKTsKIAotICAgIHJldGNvZGUgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsIDApOworICAgIHJldGNvZGUgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgb3VyX3NzbF9zZXNzaW9uaWQsIDAsIHNvY2tpbmRleCk7CiAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICBpZihyZXRjb2RlKSB7CiAgICAgICBmcmVlKG91cl9zc2xfc2Vzc2lvbmlkKTsKQEAgLTc2NSw3ICs3ODIsOCBAQAogICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc9PQogICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsIG5vbmJsb2NraW5nID8gMCA6IHRpbWVvdXRfbXMpOworICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nID8gMCA6IHRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CmRpZmYgLS1naXQgYS9saWIvdnRscy9uc3MuYyBiL2xpYi92dGxzL25zcy5jCmluZGV4IGFkMzNmMjUuLjkxYjhlMDUgMTAwNjQ0Ci0tLSBhL2xpYi92dGxzL25zcy5jCisrKyBiL2xpYi92dGxzL25zcy5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiZm9ybWRhdGEuaCIgLyogZm9yIHRoZSBib3VuZGFyeSBmdW5jdGlvbiAqLwogI2luY2x1ZGUgInVybC5oIiAvKiBmb3IgdGhlIHNzbCBjb25maWcgY2hlY2sgZnVuY3Rpb24gKi8KICNpbmNsdWRlICJjb25uZWN0LmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCiAjaW5jbHVkZSAidnRscy5oIgogI2luY2x1ZGUgImxsaXN0LmgiCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8b2NzcC5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAid2Fybmxlc3MuaCIKICNpbmNsdWRlICJ4NTA5YXNuMS5oIgogCkBAIC03OCwxMyArNzgsMTIgQEAKICNkZWZpbmUgU0xPVFNJWkUgMTMKIAogUFJGaWxlRGVzYyAqUFJfSW1wb3J0VENQU29ja2V0KFBSSW50MzIgb3NmZCk7Ci0KLVBSTG9jayAqIG5zc19pbml0bG9jayA9IE5VTEw7Ci1QUkxvY2sgKiBuc3NfY3JsbG9jayA9IE5VTEw7Ci1zdHJ1Y3QgY3VybF9sbGlzdCAqbnNzX2NybF9saXN0ID0gTlVMTDsKLU5TU0luaXRDb250ZXh0ICogbnNzX2NvbnRleHQgPSBOVUxMOwotCi12b2xhdGlsZSBpbnQgaW5pdGlhbGl6ZWQgPSAwOworc3RhdGljIFBSTG9jayAqbnNzX2luaXRsb2NrID0gTlVMTDsKK3N0YXRpYyBQUkxvY2sgKm5zc19jcmxsb2NrID0gTlVMTDsKK3N0YXRpYyBQUkxvY2sgKm5zc19maW5kc2xvdF9sb2NrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY3VybF9sbGlzdCAqbnNzX2NybF9saXN0ID0gTlVMTDsKK3N0YXRpYyBOU1NJbml0Q29udGV4dCAqbnNzX2NvbnRleHQgPSBOVUxMOworc3RhdGljIHZvbGF0aWxlIGludCBpbml0aWFsaXplZCA9IDA7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgY29uc3QgY2hhciAqbmFtZTsKQEAgLTE1MCw3ICsxNDksNyBAQAogICB7ImVjZGhfcnNhXzNkZXNfc2hhIiwgICAgICAgICAgVExTX0VDREhfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQX0sCiAgIHsiZWNkaF9yc2FfYWVzXzEyOF9zaGEiLCAgICAgICBUTFNfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEF9LAogICB7ImVjZGhfcnNhX2Flc18yNTZfc2hhIiwgICAgICAgVExTX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBfSwKLSAgeyJlY2hkZV9yc2FfbnVsbCIsICAgICAgICAgICAgIFRMU19FQ0RIRV9SU0FfV0lUSF9OVUxMX1NIQX0sCisgIHsiZWNkaGVfcnNhX251bGwiLCAgICAgICAgICAgICBUTFNfRUNESEVfUlNBX1dJVEhfTlVMTF9TSEF9LAogICB7ImVjZGhlX3JzYV9yYzRfMTI4X3NoYSIsICAgICAgVExTX0VDREhFX1JTQV9XSVRIX1JDNF8xMjhfU0hBfSwKICAgeyJlY2RoZV9yc2FfM2Rlc19zaGEiLCAgICAgICAgIFRMU19FQ0RIRV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBfSwKICAgeyJlY2RoZV9yc2FfYWVzXzEyOF9zaGEiLCAgICAgIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEF9LApAQCAtMTgwLDE2ICsxNzksMzUgQEAKICAgeyJlY2RoZV9yc2FfYWVzXzEyOF9nY21fc2hhXzI1NiIsICAgVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1Nn0sCiAgIHsiZWNkaF9yc2FfYWVzXzEyOF9nY21fc2hhXzI1NiIsICAgIFRMU19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1Nn0sCiAjZW5kaWYKKyNpZmRlZiBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CisgIC8qIGNpcGhlciBzdWl0ZXMgdXNpbmcgU0hBMzg0ICovCisgIHsicnNhX2Flc18yNTZfZ2NtX3NoYV8zODQiLCAgICAgICAgIFRMU19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODR9LAorICB7ImRoZV9yc2FfYWVzXzI1Nl9nY21fc2hhXzM4NCIsICAgICBUTFNfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NH0sCisgIHsiZGhlX2Rzc19hZXNfMjU2X2djbV9zaGFfMzg0IiwgICAgIFRMU19ESEVfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0fSwKKyAgeyJlY2RoZV9lY2RzYV9hZXNfMjU2X3NoYV8zODQiLCAgICAgVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBMzg0fSwKKyAgeyJlY2RoZV9yc2FfYWVzXzI1Nl9zaGFfMzg0IiwgICAgICAgVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfQ0JDX1NIQTM4NH0sCisgIHsiZWNkaGVfZWNkc2FfYWVzXzI1Nl9nY21fc2hhXzM4NCIsIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NH0sCisgIHsiZWNkaGVfcnNhX2Flc18yNTZfZ2NtX3NoYV8zODQiLCAgIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODR9LAorI2VuZGlmCisjaWZkZWYgVExTX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKKyAgLyogY2hhY2hhMjAtcG9seTEzMDUgY2lwaGVyIHN1aXRlcyAqLworIHsiZWNkaGVfcnNhX2NoYWNoYTIwX3BvbHkxMzA1X3NoYV8yNTYiLAorICAgICBUTFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2fSwKKyB7ImVjZGhlX2VjZHNhX2NoYWNoYTIwX3BvbHkxMzA1X3NoYV8yNTYiLAorICAgICBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAorIHsiZGhlX3JzYV9jaGFjaGEyMF9wb2x5MTMwNV9zaGFfMjU2IiwKKyAgICAgVExTX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTZ9LAorI2VuZGlmCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciogcGVtX2xpYnJhcnkgPSAibGlibnNzcGVtLnNvIjsKLVNFQ01PRE1vZHVsZSogbW9kID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpwZW1fbGlicmFyeSA9ICJsaWJuc3NwZW0uc28iOworc3RhdGljIFNFQ01PRE1vZHVsZSAqbW9kID0gTlVMTDsKIAogLyogTlNQUiBJL08gbGF5ZXIgd2UgdXNlIHRvIGRldGVjdCBibG9ja2luZyBkaXJlY3Rpb24gZHVyaW5nIFNTTCBoYW5kc2hha2UgKi8KIHN0YXRpYyBQUkRlc2NJZGVudGl0eSBuc3ByX2lvX2lkZW50aXR5ID0gUFJfSU5WQUxJRF9JT19MQVlFUjsKIHN0YXRpYyBQUklPTWV0aG9kcyBuc3ByX2lvX21ldGhvZHM7CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBuc3NfZXJyb3JfdG9fbmFtZShQUkVycm9yQ29kZSBjb2RlKQorc3RhdGljIGNvbnN0IGNoYXIgKm5zc19lcnJvcl90b19uYW1lKFBSRXJyb3JDb2RlIGNvZGUpCiB7CiAgIGNvbnN0IGNoYXIgKm5hbWUgPSBQUl9FcnJvclRvTmFtZShjb2RlKTsKICAgaWYobmFtZSkKQEAgLTI0Myw3ICsyNjEsNyBAQAogICAgIGZvdW5kID0gUFJfRkFMU0U7CiAKICAgICBmb3IoaT0wOyBpPE5VTV9PRl9DSVBIRVJTOyBpKyspIHsKLSAgICAgIGlmKEN1cmxfcmF3X2VxdWFsKGNpcGhlciwgY2lwaGVybGlzdFtpXS5uYW1lKSkgeworICAgICAgaWYoc3RyY2FzZWNvbXBhcmUoY2lwaGVyLCBjaXBoZXJsaXN0W2ldLm5hbWUpKSB7CiAgICAgICAgIGNpcGhlcl9zdGF0ZVtpXSA9IFBSX1RSVUU7CiAgICAgICAgIGZvdW5kID0gUFJfVFJVRTsKICAgICAgICAgYnJlYWs7CkBAIC0zMTksOSArMzM3LDggQEAKICAqIHNob3VsZCBiZSBsYXRlciBkZWFsbG9jYXRlZCB1c2luZyBmcmVlKCkuICBJZiB0aGUgT09NIGZhaWx1cmUgb2NjdXJzLCB3ZQogICogcmV0dXJuIE5VTEwsIHRvby4KICAqLwotc3RhdGljIGNoYXIqIGR1cF9uaWNrbmFtZShzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLCBlbnVtIGR1cHN0cmluZyBjZXJ0X2tpbmQpCitzdGF0aWMgY2hhciAqZHVwX25pY2tuYW1lKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgY29uc3QgY2hhciAqc3RyID0gZGF0YS0+c2V0LnN0cltjZXJ0X2tpbmRdOwogICBjb25zdCBjaGFyICpuOwogCiAgIGlmKCFpc19maWxlKHN0cikpCkBAIC0zNDAsNiArMzU3LDE5IEBACiAgIHJldHVybiBOVUxMOwogfQogCisvKiBMb2NrL3VubG9jayB3cmFwcGVyIGZvciBQSzExX0ZpbmRTbG90QnlOYW1lKCkgdG8gd29yayBhcm91bmQgcmFjZSBjb25kaXRpb24KKyAqIGluIG5zc1Nsb3RfSXNUb2tlblByZXNlbnQoKSBjYXVzaW5nIHNwdXJpb3VzIFNFQ19FUlJPUl9OT19UT0tFTi4gIEZvciBtb3JlCisgKiBkZXRhaWxzLCBnbyB0byA8aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy8xMjk3Mzk3Pi4KKyAqLworc3RhdGljIFBLMTFTbG90SW5mbyogbnNzX2ZpbmRfc2xvdF9ieV9uYW1lKGNvbnN0IGNoYXIgKnNsb3RfbmFtZSkKK3sKKyAgUEsxMVNsb3RJbmZvICpzbG90OworICBQUl9Mb2NrKG5zc19pbml0bG9jayk7CisgIHNsb3QgPSBQSzExX0ZpbmRTbG90QnlOYW1lKHNsb3RfbmFtZSk7CisgIFBSX1VubG9jayhuc3NfaW5pdGxvY2spOworICByZXR1cm4gc2xvdDsKK30KKwogLyogQ2FsbCBQSzExX0NyZWF0ZUdlbmVyaWNPYmplY3QoKSB3aXRoIHRoZSBnaXZlbiBvYmpfY2xhc3MgYW5kIGZpbGVuYW1lLiAgSWYKICAqIHRoZSBjYWxsIHN1Y2NlZWRzLCBhcHBlbmQgdGhlIG9iamVjdCBoYW5kbGUgdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyBzbyB0aGF0CiAgKiB0aGUgb2JqZWN0IGNhbiBiZSBkZXN0cm95ZWQgaW4gQ3VybF9uc3NfY2xvc2UoKS4gKi8KQEAgLTM2Miw3ICszOTIsNyBAQAogICBpZighc2xvdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gIHNsb3QgPSBQSzExX0ZpbmRTbG90QnlOYW1lKHNsb3RfbmFtZSk7CisgIHNsb3QgPSBuc3NfZmluZF9zbG90X2J5X25hbWUoc2xvdF9uYW1lKTsKICAgZnJlZShzbG90X25hbWUpOwogICBpZighc2xvdCkKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDgzLDcgKzUxMyw3IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIENVUkxjb2RlIG5zc19sb2FkX2NybChjb25zdCBjaGFyKiBjcmxmaWxlbmFtZSkKK3N0YXRpYyBDVVJMY29kZSBuc3NfbG9hZF9jcmwoY29uc3QgY2hhciAqY3JsZmlsZW5hbWUpCiB7CiAgIFBSRmlsZURlc2MgKmluZmlsZTsKICAgUFJGaWxlSW5mbyAgaW5mbzsKQEAgLTUwOSw3ICs1MzksNyBAQAogICAgIGdvdG8gZmFpbDsKIAogICAvKiBwbGFjZSBhIHRyYWlsaW5nIHplcm8gcmlnaHQgYWZ0ZXIgdGhlIHZpc2libGUgZGF0YSAqLwotICBib2R5ID0gKGNoYXIqKWZpbGVkYXRhLmRhdGE7CisgIGJvZHkgPSAoY2hhciAqKWZpbGVkYXRhLmRhdGE7CiAgIGJvZHlbLS1maWxlZGF0YS5sZW5dID0gJ1wwJzsKIAogICBib2R5ID0gc3Ryc3RyKGJvZHksICItLS0tLUJFR0lOIik7CkBAIC01NTQsNiArNTg0LDcgQEAKICAgU0VDU3RhdHVzIHN0YXR1czsKICAgQ1VSTGNvZGUgcmVzdWx0OwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqc3NsID0gY29ubi0+c3NsOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIAogICAodm9pZClzb2NraW5kZXg7IC8qIHVudXNlZCAqLwogCkBAIC01NjMsNyArNTk0LDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKLSAgc2xvdCA9IFBLMTFfRmluZFNsb3RCeU5hbWUoIlBFTSBUb2tlbiAjMSIpOworICBzbG90ID0gbnNzX2ZpbmRfc2xvdF9ieV9uYW1lKCJQRU0gVG9rZW4gIzEiKTsKICAgaWYoIXNsb3QpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKIApAQCAtNTcxLDggKzYwMiw3IEBACiAgIFNFQ01PRF9XYWl0Rm9yQW55VG9rZW5FdmVudChtb2QsIDAsIDApOwogICBQSzExX0lzUHJlc2VudChzbG90KTsKIAotICBzdGF0dXMgPSBQSzExX0F1dGhlbnRpY2F0ZShzbG90LCBQUl9UUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5kYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSk7CisgIHN0YXR1cyA9IFBLMTFfQXV0aGVudGljYXRlKHNsb3QsIFBSX1RSVUUsIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKICAgUEsxMV9GcmVlU2xvdChzbG90KTsKIAogICByZXR1cm4gKFNFQ1N1Y2Nlc3MgPT0gc3RhdHVzKSA/IENVUkxFX09LIDogQ1VSTEVfU1NMX0NFUlRQUk9CTEVNOwpAQCAtNjMzLDcgKzY2Myw3IEBACiAgIHJldHVybiBDVVJMRV9PSzsKIH0KIAotc3RhdGljIGNoYXIgKiBuc3NfZ2V0X3Bhc3N3b3JkKFBLMTFTbG90SW5mbyAqIHNsb3QsIFBSQm9vbCByZXRyeSwgdm9pZCAqYXJnKQorc3RhdGljIGNoYXIgKm5zc19nZXRfcGFzc3dvcmQoUEsxMVNsb3RJbmZvICpzbG90LCBQUkJvb2wgcmV0cnksIHZvaWQgKmFyZykKIHsKICAgKHZvaWQpc2xvdDsgLyogdW51c2VkICovCiAKQEAgLTY1MSw3ICs2ODEsNyBAQAogICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4gPSAoc3RydWN0IGNvbm5lY3RkYXRhICopYXJnOwogCiAjaWZkZWYgU1NMX0VOQUJMRV9PQ1NQX1NUQVBMSU5HCi0gIGlmKGNvbm4tPmRhdGEtPnNldC5zc2wudmVyaWZ5c3RhdHVzKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlzdGF0dXMpKSB7CiAgICAgU0VDU3RhdHVzIGNhY2hlUmVzdWx0OwogCiAgICAgY29uc3QgU0VDSXRlbUFycmF5ICpjc2EgPSBTU0xfUGVlclN0YXBsZWRPQ1NQUmVzcG9uc2VzKGZkKTsKQEAgLTY3Nyw3ICs3MDcsNyBAQAogICB9CiAjZW5kaWYKIAotICBpZighY29ubi0+ZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgIGlmKCFTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICBpbmZvZihjb25uLT5kYXRhLCAic2tpcHBpbmcgU1NMIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uXG4iKTsKICAgICByZXR1cm4gU0VDU3VjY2VzczsKICAgfQpAQCAtNzAzLDYgKzczMywxMSBAQAogICBpZihTU0xfR2V0TmV4dFByb3RvKHNvY2ssICZzdGF0ZSwgYnVmLCAmYnVmbGVuLCBidWZsZW5tYXgpID09IFNFQ1N1Y2Nlc3MpIHsKIAogICAgIHN3aXRjaChzdGF0ZSkgeworI2lmIE5TU1ZFUk5VTSA+PSAweDAzMWEwMCAvKiAzLjI2LjAgKi8KKyAgICAvKiB1c2VkIGJ5IE5TUyBpbnRlcm5hbGx5IHRvIGltcGxlbWVudCAwLVJUVCAqLworICAgIGNhc2UgU1NMX05FWFRfUFJPVE9fRUFSTFlfVkFMVUU6CisgICAgICAvKiBmYWxsIHRocm91Z2ghICovCisjZW5kaWYKICAgICBjYXNlIFNTTF9ORVhUX1BST1RPX05PX1NVUFBPUlQ6CiAgICAgY2FzZSBTU0xfTkVYVF9QUk9UT19OT19PVkVSTEFQOgogICAgICAgaW5mb2YoY29ubi0+ZGF0YSwgIkFMUE4vTlBOLCBzZXJ2ZXIgZGlkIG5vdCBhZ3JlZSB0byBhIHByb3RvY29sXG4iKTsKQEAgLTg5Nyw5ICs5MzIsMTIgQEAKICAgQ0VSVENlcnRpZmljYXRlICpjZXJ0OwogCiAgIC8qIHJlbWVtYmVyIHRoZSBjZXJ0IHZlcmlmaWNhdGlvbiByZXN1bHQgKi8KLSAgZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ID0gZXJyOworICBpZihTU0xfSVNfUFJPWFkoKSkKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQgPSBlcnI7CisgIGVsc2UKKyAgICBkYXRhLT5zZXQuc3NsLmNlcnR2ZXJpZnlyZXN1bHQgPSBlcnI7CiAKLSAgaWYoZXJyID09IFNTTF9FUlJPUl9CQURfQ0VSVF9ET01BSU4gJiYgIWRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCkKKyAgaWYoZXJyID09IFNTTF9FUlJPUl9CQURfQ0VSVF9ET01BSU4gJiYgIVNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkKICAgICAvKiB3ZSBhcmUgYXNrZWQgbm90IHRvIHZlcmlmeSB0aGUgaG9zdCBuYW1lICovCiAgICAgcmV0dXJuIFNFQ1N1Y2Nlc3M7CiAKQEAgLTEwMDQsMTYgKzEwNDIsMTYgQEAKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAoc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKilhcmc7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uc3NsLT5kYXRhOwogICBjb25zdCBjaGFyICpuaWNrbmFtZSA9IGNvbm5zc2wtPmNsaWVudF9uaWNrbmFtZTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgcGVtX3Nsb3RuYW1lW10gPSAiUEVNIFRva2VuICMxIjsKIAogICBpZihjb25uc3NsLT5vYmpfY2xpY2VydCkgewogICAgIC8qIHVzZSB0aGUgY2VydC9rZXkgcHJvdmlkZWQgYnkgUEVNIHJlYWRlciAqLwotICAgIHN0YXRpYyBjb25zdCBjaGFyIHBlbV9zbG90bmFtZVtdID0gIlBFTSBUb2tlbiAjMSI7CiAgICAgU0VDSXRlbSBjZXJ0X2RlciA9IHsgMCwgTlVMTCwgMCB9OwogICAgIHZvaWQgKnByb3RvX3dpbiA9IFNTTF9SZXZlYWxQaW5Bcmcoc29jayk7CiAgICAgc3RydWN0IENFUlRDZXJ0aWZpY2F0ZVN0ciAqY2VydDsKICAgICBzdHJ1Y3QgU0VDS0VZUHJpdmF0ZUtleVN0ciAqa2V5OwogCi0gICAgUEsxMVNsb3RJbmZvICpzbG90ID0gUEsxMV9GaW5kU2xvdEJ5TmFtZShwZW1fc2xvdG5hbWUpOworICAgIFBLMTFTbG90SW5mbyAqc2xvdCA9IG5zc19maW5kX3Nsb3RfYnlfbmFtZShwZW1fc2xvdG5hbWUpOwogICAgIGlmKE5VTEwgPT0gc2xvdCkgewogICAgICAgZmFpbGYoZGF0YSwgIk5TUzogUEsxMSBzbG90IG5vdCBmb3VuZDogJXMiLCBwZW1fc2xvdG5hbWUpOwogICAgICAgcmV0dXJuIFNFQ0ZhaWx1cmU7CkBAIC0xMDY5LDYgKzExMDcsMTIgQEAKICAgaWYoTlVMTCA9PSBuaWNrbmFtZSkKICAgICBuaWNrbmFtZSA9ICJbdW5rbm93bl0iOwogCisgIGlmKCFzdHJuY21wKG5pY2tuYW1lLCBwZW1fc2xvdG5hbWUsIHNpemVvZihwZW1fc2xvdG5hbWUpIC0gMVUpKSB7CisgICAgZmFpbGYoZGF0YSwgIk5TUzogcmVmdXNpbmcgcHJldmlvdXNseSBsb2FkZWQgY2VydGlmaWNhdGUgZnJvbSBmaWxlOiAlcyIsCisgICAgICAgICAgbmlja25hbWUpOworICAgIHJldHVybiBTRUNGYWlsdXJlOworICB9CisKICAgaWYoTlVMTCA9PSAqcFJldEtleSkgewogICAgIGZhaWxmKGRhdGEsICJOU1M6IHByaXZhdGUga2V5IG5vdCBmb3VuZCBmb3IgY2VydGlmaWNhdGU6ICVzIiwgbmlja25hbWUpOwogICAgIHJldHVybiBTRUNGYWlsdXJlOwpAQCAtMTI0Myw2ICsxMjg3LDcgQEAKICAgICBQUl9Jbml0KFBSX1VTRVJfVEhSRUFELCBQUl9QUklPUklUWV9OT1JNQUwsIDI1Nik7CiAgICAgbnNzX2luaXRsb2NrID0gUFJfTmV3TG9jaygpOwogICAgIG5zc19jcmxsb2NrID0gUFJfTmV3TG9jaygpOworICAgIG5zc19maW5kc2xvdF9sb2NrID0gUFJfTmV3TG9jaygpOwogICB9CiAKICAgLyogV2Ugd2lsbCBhY3R1YWxseSBpbml0aWFsaXplIE5TUyBsYXRlciAqLwpAQCAtMTI5Nyw2ICsxMzQyLDcgQEAKIAogICBQUl9EZXN0cm95TG9jayhuc3NfaW5pdGxvY2spOwogICBQUl9EZXN0cm95TG9jayhuc3NfY3JsbG9jayk7CisgIFBSX0Rlc3Ryb3lMb2NrKG5zc19maW5kc2xvdF9sb2NrKTsKICAgbnNzX2luaXRsb2NrID0gTlVMTDsKIAogICBpbml0aWFsaXplZCA9IDA7CkBAIC0xMzI4LDM4ICsxMzc0LDU3IEBACiAgIHJldHVybiAtMTsgIC8qIGNvbm5lY3Rpb24gc3RhdHVzIHVua25vd24gKi8KIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gU1NMIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICovCi12b2lkIEN1cmxfbnNzX2Nsb3NlKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IHNvY2tpbmRleCkKK3N0YXRpYyB2b2lkIG5zc19jbG9zZShzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCkKIHsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIC8qIGJlZm9yZSB0aGUgY2xlYW51cCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgdXNpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgKi8KKyAgY29uc3QgYm9vbCBjbGllbnRfY2VydCA9IChjb25uc3NsLT5jbGllbnRfbmlja25hbWUgIT0gTlVMTCkKKyAgICB8fCAoY29ubnNzbC0+b2JqX2NsaWNlcnQgIT0gTlVMTCk7CisKKyAgZnJlZShjb25uc3NsLT5jbGllbnRfbmlja25hbWUpOworICBjb25uc3NsLT5jbGllbnRfbmlja25hbWUgPSBOVUxMOworCisgIC8qIGRlc3Ryb3kgYWxsIE5TUyBvYmplY3RzIGluIG9yZGVyIHRvIGF2b2lkIGZhaWx1cmUgb2YgTlNTIHNodXRkb3duICovCisgIEN1cmxfbGxpc3RfZGVzdHJveShjb25uc3NsLT5vYmpfbGlzdCwgTlVMTCk7CisgIGNvbm5zc2wtPm9ial9saXN0ID0gTlVMTDsKKyAgY29ubnNzbC0+b2JqX2NsaWNlcnQgPSBOVUxMOwogCiAgIGlmKGNvbm5zc2wtPmhhbmRsZSkgewotICAgIC8qIE5TUyBjbG9zZXMgdGhlIHNvY2tldCB3ZSBwcmV2aW91c2x5IGhhbmRlZCB0byBpdCwgc28gd2UgbXVzdCBtYXJrIGl0Ci0gICAgICAgYXMgY2xvc2VkIHRvIGF2b2lkIGRvdWJsZSBjbG9zZSAqLwotICAgIGZha2Vfc2Nsb3NlKGNvbm4tPnNvY2tbc29ja2luZGV4XSk7Ci0gICAgY29ubi0+c29ja1tzb2NraW5kZXhdID0gQ1VSTF9TT0NLRVRfQkFEOwotCi0gICAgaWYoKGNvbm5zc2wtPmNsaWVudF9uaWNrbmFtZSAhPSBOVUxMKSB8fCAoY29ubnNzbC0+b2JqX2NsaWNlcnQgIT0gTlVMTCkpCisgICAgaWYoY2xpZW50X2NlcnQpCiAgICAgICAvKiBBIHNlcnZlciBtaWdodCByZXF1aXJlIGRpZmZlcmVudCBhdXRoZW50aWNhdGlvbiBiYXNlZCBvbiB0aGUKICAgICAgICAqIHBhcnRpY3VsYXIgcGF0aCBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gIFRvIHN1cHBvcnQgdGhpcwogICAgICAgICogc2NlbmFyaW8sIHdlIG11c3QgZW5zdXJlIHRoYXQgYSBjb25uZWN0aW9uIHdpbGwgbmV2ZXIgcmV1c2UgdGhlCiAgICAgICAgKiBhdXRoZW50aWNhdGlvbiBkYXRhIGZyb20gYSBwcmV2aW91cyBjb25uZWN0aW9uLiAqLwogICAgICAgU1NMX0ludmFsaWRhdGVTZXNzaW9uKGNvbm5zc2wtPmhhbmRsZSk7CiAKLSAgICBmcmVlKGNvbm5zc2wtPmNsaWVudF9uaWNrbmFtZSk7Ci0gICAgY29ubnNzbC0+Y2xpZW50X25pY2tuYW1lID0gTlVMTDsKLSAgICAvKiBkZXN0cm95IGFsbCBOU1Mgb2JqZWN0cyBpbiBvcmRlciB0byBhdm9pZCBmYWlsdXJlIG9mIE5TUyBzaHV0ZG93biAqLwotICAgIEN1cmxfbGxpc3RfZGVzdHJveShjb25uc3NsLT5vYmpfbGlzdCwgTlVMTCk7Ci0gICAgY29ubnNzbC0+b2JqX2xpc3QgPSBOVUxMOwotICAgIGNvbm5zc2wtPm9ial9jbGljZXJ0ID0gTlVMTDsKLQogICAgIFBSX0Nsb3NlKGNvbm5zc2wtPmhhbmRsZSk7CiAgICAgY29ubnNzbC0+aGFuZGxlID0gTlVMTDsKICAgfQogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBTU0wgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgKi8KK3ZvaWQgQ3VybF9uc3NfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2xfcHJveHkgPSAmY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF07CisKKyAgaWYoY29ubnNzbC0+aGFuZGxlIHx8IGNvbm5zc2xfcHJveHktPmhhbmRsZSkgeworICAgIC8qIE5TUyBjbG9zZXMgdGhlIHNvY2tldCB3ZSBwcmV2aW91c2x5IGhhbmRlZCB0byBpdCwgc28gd2UgbXVzdCBtYXJrIGl0CisgICAgICAgYXMgY2xvc2VkIHRvIGF2b2lkIGRvdWJsZSBjbG9zZSAqLworICAgIGZha2Vfc2Nsb3NlKGNvbm4tPnNvY2tbc29ja2luZGV4XSk7CisgICAgY29ubi0+c29ja1tzb2NraW5kZXhdID0gQ1VSTF9TT0NLRVRfQkFEOworICB9CisKKyAgaWYoY29ubnNzbC0+aGFuZGxlKQorICAgIC8qIG5zc19jbG9zZShjb25uc3NsKSB3aWxsIHRyYW5zaXRpdmVseSBjbG9zZSBhbHNvIGNvbm5zc2xfcHJveHktPmhhbmRsZQorICAgICAgIGlmIGJvdGggYXJlIHVzZWQuIENsZWFyIGl0IHRvIGF2b2lkIGEgZG91YmxlIGNsb3NlIGxlYWRpbmcgdG8gY3Jhc2guICovCisgICAgY29ubnNzbF9wcm94eS0+aGFuZGxlID0gTlVMTDsKKworICBuc3NfY2xvc2UoY29ubnNzbCk7CisgIG5zc19jbG9zZShjb25uc3NsX3Byb3h5KTsKK30KKwogLyogcmV0dXJuIHRydWUgaWYgTlNTIGNhbiBwcm92aWRlIGVycm9yIGNvZGUgKGFuZCBwb3NzaWJseSBtc2cpIGZvciB0aGUKICAgIGVycm9yICovCiBzdGF0aWMgYm9vbCBpc19uc3NfZXJyb3IoQ1VSTGNvZGUgZXJyKQpAQCAtMTM5OCw4ICsxNDYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKIHsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7Ci0gIGNvbnN0IGNoYXIgKmNhZmlsZSA9IGRhdGEtPnNldC5zc2wuQ0FmaWxlOwotICBjb25zdCBjaGFyICpjYXBhdGggPSBkYXRhLT5zZXQuc3NsLkNBcGF0aDsKKyAgY29uc3QgY2hhciAqY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKmNhcGF0aCA9IFNTTF9DT05OX0NPTkZJRyhDQXBhdGgpOwogCiAgIGlmKGNhZmlsZSkgewogICAgIENVUkxjb2RlIHJlc3VsdCA9IG5zc19sb2FkX2NlcnQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLCBjYWZpbGUsIFBSX1RSVUUpOwpAQCAtMTQ0NywxMyArMTUxMiwyMiBAQAogfQogCiBzdGF0aWMgQ1VSTGNvZGUgbnNzX2luaXRfc3NsdmVyKFNTTFZlcnNpb25SYW5nZSAqc3NsdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4pCiB7Ci0gIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKLSAgZGVmYXVsdDoKKyAgc3dpdGNoIChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKKyAgICAvKiBtYXAgQ1VSTF9TU0xWRVJTSU9OX0RFRkFVTFQgdG8gTlNTIGRlZmF1bHQgKi8KKyAgICBpZihTU0xfVmVyc2lvblJhbmdlR2V0RGVmYXVsdChzc2xfdmFyaWFudF9zdHJlYW0sIHNzbHZlcikgIT0gU0VDU3VjY2VzcykKKyAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKKyAgICAvKiAuLi4gYnV0IG1ha2Ugc3VyZSB3ZSB1c2UgYXQgbGVhc3QgVExTdjEuMCBhY2NvcmRpbmcgdG8gbGliY3VybCBBUEkgKi8KKyAgICBpZihzc2x2ZXItPm1pbiA8IFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMCkKKyAgICAgIHNzbHZlci0+bWluID0gU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wOworICAgIHJldHVybiBDVVJMRV9PSzsKKwogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKICAgICBzc2x2ZXItPm1pbiA9IFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMDsKKyAgICAvKiBUT0RPOiBzZXQgc3NsdmVyLT5tYXggdG8gU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8zIG9uY2Ugc3RhYmxlICovCiAjaWZkZWYgU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8yCiAgICAgc3NsdmVyLT5tYXggPSBTU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzI7CiAjZWxpZiBkZWZpbmVkIFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMQpAQCAtMTQ5Myw2ICsxNTY3LDE4IEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogI2VuZGlmCiAgICAgYnJlYWs7CisKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyNpZmRlZiBTU0xfTElCUkFSWV9WRVJTSU9OX1RMU18xXzMKKyAgICBzc2x2ZXItPm1pbiA9IFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMzsKKyAgICBzc2x2ZXItPm1heCA9IFNTTF9MSUJSQVJZX1ZFUlNJT05fVExTXzFfMzsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisjZW5kaWYKKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKICAgZmFpbGYoZGF0YSwgIlRMUyBtaW5vciB2ZXJzaW9uIGNhbm5vdCBiZSBzZXQiKTsKQEAgLTE1NTAsNiArMTYzNiw3IEBACiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKICAgQ1VSTGNvZGUgcmVzdWx0OworICBib29sIHNlY29uZF9sYXllciA9IEZBTFNFOwogCiAgIFNTTFZlcnNpb25SYW5nZSBzc2x2ZXIgPSB7CiAgICAgU1NMX0xJQlJBUllfVkVSU0lPTl9UTFNfMV8wLCAgLyogbWluICovCkBAIC0xNjA4LDE4ICsxNjk1LDE4IEBACiAgICAgZ290byBlcnJvcjsKIAogICAvKiBkbyBub3QgdXNlIFNTTCBjYWNoZSBpZiBkaXNhYmxlZCBvciB3ZSBhcmUgbm90IGdvaW5nIHRvIHZlcmlmeSBwZWVyICovCi0gIHNzbF9ub19jYWNoZSA9IChjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCAmJiBkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpID8KLSAgICBQUl9GQUxTRSA6IFBSX1RSVUU7CisgIHNzbF9ub19jYWNoZSA9IChkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkCisgICAgICAgICAgICAgICAgICAmJiBTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpID8gUFJfRkFMU0UgOiBQUl9UUlVFOwogICBpZihTU0xfT3B0aW9uU2V0KG1vZGVsLCBTU0xfTk9fQ0FDSEUsIHNzbF9ub19jYWNoZSkgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwogCiAgIC8qIGVuYWJsZS9kaXNhYmxlIHRoZSByZXF1ZXN0ZWQgU1NMIHZlcnNpb24ocykgKi8KLSAgaWYobnNzX2luaXRfc3NsdmVyKCZzc2x2ZXIsIGRhdGEpICE9IENVUkxFX09LKQorICBpZihuc3NfaW5pdF9zc2x2ZXIoJnNzbHZlciwgZGF0YSwgY29ubikgIT0gQ1VSTEVfT0spCiAgICAgZ290byBlcnJvcjsKICAgaWYoU1NMX1ZlcnNpb25SYW5nZVNldChtb2RlbCwgJnNzbHZlcikgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwogCi0gIHNzbF9jYmNfcmFuZG9tX2l2ID0gIWRhdGEtPnNldC5zc2xfZW5hYmxlX2JlYXN0OworICBzc2xfY2JjX3JhbmRvbV9pdiA9ICFTU0xfU0VUX09QVElPTihlbmFibGVfYmVhc3QpOwogI2lmZGVmIFNTTF9DQkNfUkFORE9NX0lWCiAgIC8qIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza3MgdG8gYWxsb3cgdGhlIHByb3RvY29sIHZ1bG5lcmFiaWxpdHksIHdlCiAgICAgIHVzZSB0aGUgd29yay1hcm91bmQgKi8KQEAgLTE2MzEsMTQgKzE3MTgsMTQgQEAKICAgICBpbmZvZihkYXRhLCAid2FybmluZzogc3VwcG9ydCBmb3IgU1NMX0NCQ19SQU5ET01fSVYgbm90IGNvbXBpbGVkIGluXG4iKTsKICNlbmRpZgogCi0gIGlmKGRhdGEtPnNldC5zc2wuY2lwaGVyX2xpc3QpIHsKLSAgICBpZihzZXRfY2lwaGVycyhkYXRhLCBtb2RlbCwgZGF0YS0+c2V0LnNzbC5jaXBoZXJfbGlzdCkgIT0gU0VDU3VjY2VzcykgeworICBpZihTU0xfQ09OTl9DT05GSUcoY2lwaGVyX2xpc3QpKSB7CisgICAgaWYoc2V0X2NpcGhlcnMoZGF0YSwgbW9kZWwsIFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdCkpICE9IFNFQ1N1Y2Nlc3MpIHsKICAgICAgIHJlc3VsdCA9IENVUkxFX1NTTF9DSVBIRVI7CiAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgfQogCi0gIGlmKCFkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIgJiYgZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KQorICBpZighU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpICYmIFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkKICAgICBpbmZvZihkYXRhLCAid2FybmluZzogaWdub3JpbmcgdmFsdWUgb2Ygc3NsLnZlcmlmeWhvc3RcbiIpOwogCiAgIC8qIGJ5cGFzcyB0aGUgZGVmYXVsdCBTU0xfQXV0aENlcnRpZmljYXRlKCkgaG9vayBpbiBjYXNlIHdlIGRvIG5vdCB3YW50IHRvCkBAIC0xNjQ2LDE0ICsxNzMzLDE5IEBACiAgIGlmKFNTTF9BdXRoQ2VydGlmaWNhdGVIb29rKG1vZGVsLCBuc3NfYXV0aF9jZXJ0X2hvb2ssIGNvbm4pICE9IFNFQ1N1Y2Nlc3MpCiAgICAgZ290byBlcnJvcjsKIAotICBkYXRhLT5zZXQuc3NsLmNlcnR2ZXJpZnlyZXN1bHQ9MDsgLyogbm90IGNoZWNrZWQgeWV0ICovCisgIC8qIG5vdCBjaGVja2VkIHlldCAqLworICBpZihTU0xfSVNfUFJPWFkoKSkKKyAgICBkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQgPSAwOworICBlbHNlCisgICAgZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ID0gMDsKKwogICBpZihTU0xfQmFkQ2VydEhvb2sobW9kZWwsIEJhZENlcnRIYW5kbGVyLCBjb25uKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgaWYoU1NMX0hhbmRzaGFrZUNhbGxiYWNrKG1vZGVsLCBIYW5kc2hha2VDYWxsYmFjaywgY29ubikgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwogCi0gIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICBjb25zdCBDVVJMY29kZSBydiA9IG5zc19sb2FkX2NhX2NlcnRpZmljYXRlcyhjb25uLCBzb2NraW5kZXgpOwogICAgIGlmKHJ2KSB7CiAgICAgICByZXN1bHQgPSBydjsKQEAgLTE2NjEsMjQgKzE3NTMsMjQgQEAKICAgICB9CiAgIH0KIAotICBpZihkYXRhLT5zZXQuc3NsLkNSTGZpbGUpIHsKLSAgICBjb25zdCBDVVJMY29kZSBydiA9IG5zc19sb2FkX2NybChkYXRhLT5zZXQuc3NsLkNSTGZpbGUpOworICBpZihTU0xfU0VUX09QVElPTihDUkxmaWxlKSkgeworICAgIGNvbnN0IENVUkxjb2RlIHJ2ID0gbnNzX2xvYWRfY3JsKFNTTF9TRVRfT1BUSU9OKENSTGZpbGUpKTsKICAgICBpZihydikgewogICAgICAgcmVzdWx0ID0gcnY7CiAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbmZvZihkYXRhLCAiICBDUkxmaWxlOiAlc1xuIiwgZGF0YS0+c2V0LnNzbC5DUkxmaWxlKTsKKyAgICBpbmZvZihkYXRhLCAiICBDUkxmaWxlOiAlc1xuIiwgU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSkpOwogICB9CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pIHsKLSAgICBjaGFyICpuaWNrbmFtZSA9IGR1cF9uaWNrbmFtZShkYXRhLCBTVFJJTkdfQ0VSVCk7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGNlcnQpKSB7CisgICAgY2hhciAqbmlja25hbWUgPSBkdXBfbmlja25hbWUoZGF0YSwgU1NMX1NFVF9PUFRJT04oY2VydCkpOwogICAgIGlmKG5pY2tuYW1lKSB7CiAgICAgICAvKiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSBsaWJuc3NwZW0uc28gdG8gcmVhZCB0aGUgY2xpZW50IGNlcnQgKi8KICAgICAgIGNvbm5zc2wtPm9ial9jbGljZXJ0ID0gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICBDVVJMY29kZSBydiA9IGNlcnRfc3R1ZmYoY29ubiwgc29ja2luZGV4LCBkYXRhLT5zZXQuc3RyW1NUUklOR19DRVJUXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldKTsKKyAgICAgIENVUkxjb2RlIHJ2ID0gY2VydF9zdHVmZihjb25uLCBzb2NraW5kZXgsIFNTTF9TRVRfT1BUSU9OKGNlcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSkpOwogICAgICAgaWYocnYpIHsKICAgICAgICAgLyogZmFpbGYoKSBpcyBhbHJlYWR5IGRvbmUgaW4gY2VydF9zdHVmZigpICovCiAgICAgICAgIHJlc3VsdCA9IHJ2OwpAQCAtMTY5OCwxNSArMTc5MCwyNCBAQAogICAgIGdvdG8gZXJyb3I7CiAgIH0KIAotICAvKiB3cmFwIE9TIGZpbGUgZGVzY3JpcHRvciBieSBOU1BSJ3MgZmlsZSBkZXNjcmlwdG9yIGFic3RyYWN0aW9uICovCi0gIG5zcHJfaW8gPSBQUl9JbXBvcnRUQ1BTb2NrZXQoc29ja2ZkKTsKLSAgaWYoIW5zcHJfaW8pCi0gICAgZ290byBlcnJvcjsKKyAgaWYoY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0udXNlKSB7CisgICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0uc3RhdGUpOworICAgIERFQlVHQVNTRVJUKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLmhhbmRsZSAhPSBOVUxMKTsKKyAgICBuc3ByX2lvID0gY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0uaGFuZGxlOworICAgIHNlY29uZF9sYXllciA9IFRSVUU7CisgIH0KKyAgZWxzZSB7CisgICAgLyogd3JhcCBPUyBmaWxlIGRlc2NyaXB0b3IgYnkgTlNQUidzIGZpbGUgZGVzY3JpcHRvciBhYnN0cmFjdGlvbiAqLworICAgIG5zcHJfaW8gPSBQUl9JbXBvcnRUQ1BTb2NrZXQoc29ja2ZkKTsKKyAgICBpZighbnNwcl9pbykKKyAgICAgIGdvdG8gZXJyb3I7CisgIH0KIAogICAvKiBjcmVhdGUgb3VyIG93biBOU1BSIEkvTyBsYXllciAqLwogICBuc3ByX2lvX3N0dWIgPSBQUl9DcmVhdGVJT0xheWVyU3R1Yihuc3ByX2lvX2lkZW50aXR5LCAmbnNwcl9pb19tZXRob2RzKTsKICAgaWYoIW5zcHJfaW9fc3R1YikgewotICAgIFBSX0Nsb3NlKG5zcHJfaW8pOworICAgIGlmKCFzZWNvbmRfbGF5ZXIpCisgICAgICBQUl9DbG9zZShuc3ByX2lvKTsKICAgICBnb3RvIGVycm9yOwogICB9CiAKQEAgLTE3MTUsNyArMTgxNiw4IEBACiAKICAgLyogcHVzaCBvdXIgbmV3IGxheWVyIHRvIHRoZSBOU1BSIEkvTyBzdGFjayAqLwogICBpZihQUl9QdXNoSU9MYXllcihuc3ByX2lvLCBQUl9UT1BfSU9fTEFZRVIsIG5zcHJfaW9fc3R1YikgIT0gUFJfU1VDQ0VTUykgewotICAgIFBSX0Nsb3NlKG5zcHJfaW8pOworICAgIGlmKCFzZWNvbmRfbGF5ZXIpCisgICAgICBQUl9DbG9zZShuc3ByX2lvKTsKICAgICBQUl9DbG9zZShuc3ByX2lvX3N0dWIpOwogICAgIGdvdG8gZXJyb3I7CiAgIH0KQEAgLTE3MjMsNyArMTgyNSw4IEBACiAgIC8qIGltcG9ydCBvdXIgbW9kZWwgc29ja2V0IG9udG8gdGhlIGN1cnJlbnQgSS9PIHN0YWNrICovCiAgIGNvbm5zc2wtPmhhbmRsZSA9IFNTTF9JbXBvcnRGRChtb2RlbCwgbnNwcl9pbyk7CiAgIGlmKCFjb25uc3NsLT5oYW5kbGUpIHsKLSAgICBQUl9DbG9zZShuc3ByX2lvKTsKKyAgICBpZighc2Vjb25kX2xheWVyKQorICAgICAgUFJfQ2xvc2UobnNwcl9pbyk7CiAgICAgZ290byBlcnJvcjsKICAgfQogCkBAIC0xNzMxLDEyICsxODM0LDEyIEBACiAgIG1vZGVsID0gTlVMTDsKIAogICAvKiBUaGlzIGlzIHRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdGhlIGNlcnQgdGhhdCB3ZSdyZSB1c2luZyAqLwotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSkgewotICAgIFNTTF9TZXRQS0NTMTFQaW5BcmcoY29ubnNzbC0+aGFuZGxlLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSk7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKSB7CisgICAgU1NMX1NldFBLQ1MxMVBpbkFyZyhjb25uc3NsLT5oYW5kbGUsIFNTTF9TRVRfT1BUSU9OKGtleV9wYXNzd2QpKTsKICAgfQogCiAjaWZkZWYgU1NMX0VOQUJMRV9PQ1NQX1NUQVBMSU5HCi0gIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5c3RhdHVzKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlzdGF0dXMpKSB7CiAgICAgaWYoU1NMX09wdGlvblNldChjb25uc3NsLT5oYW5kbGUsIFNTTF9FTkFCTEVfT0NTUF9TVEFQTElORywgUFJfVFJVRSkKICAgICAgICAgIT0gU0VDU3VjY2VzcykKICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNzk2LDExICsxODk5LDE0IEBACiAgICAgZ290byBlcnJvcjsKIAogICAvKiBwcm9wYWdhdGUgaG9zdG5hbWUgdG8gdGhlIFRMUyBsYXllciAqLwotICBpZihTU0xfU2V0VVJMKGNvbm5zc2wtPmhhbmRsZSwgY29ubi0+aG9zdC5uYW1lKSAhPSBTRUNTdWNjZXNzKQorICBpZihTU0xfU2V0VVJMKGNvbm5zc2wtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKSAhPSBTRUNTdWNjZXNzKQogICAgIGdvdG8gZXJyb3I7CiAKICAgLyogcHJldmVudCBOU1MgZnJvbSByZS11c2luZyB0aGUgc2Vzc2lvbiBmb3IgYSBkaWZmZXJlbnQgaG9zdG5hbWUgKi8KLSAgaWYoU1NMX1NldFNvY2tQZWVySUQoY29ubnNzbC0+aGFuZGxlLCBjb25uLT5ob3N0Lm5hbWUpICE9IFNFQ1N1Y2Nlc3MpCisgIGlmKFNTTF9TZXRTb2NrUGVlcklEKGNvbm5zc2wtPmhhbmRsZSwgU1NMX0lTX1BST1hZKCkgPworICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6IGNvbm4tPmhvc3QubmFtZSkKKyAgICAgIT0gU0VDU3VjY2VzcykKICAgICBnb3RvIGVycm9yOwogCiAgIHJldHVybiBDVVJMRV9PSzsKQEAgLTE4MTgsNiArMTkyNCw4IEBACiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBDVVJMY29kZSByZXN1bHQgPSBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgUFJVaW50MzIgdGltZW91dDsKKyAgbG9uZyAqIGNvbnN0IGNlcnR2ZXJpZnlyZXN1bHQgPSBTU0xfSVNfUFJPWFkoKSA/CisgICAgJmRhdGEtPnNldC5wcm94eV9zc2wuY2VydHZlcmlmeXJlc3VsdCA6ICZkYXRhLT5zZXQuc3NsLmNlcnR2ZXJpZnlyZXN1bHQ7CiAKICAgLyogY2hlY2sgdGltZW91dCBzaXR1YXRpb24gKi8KICAgY29uc3QgbG9uZyB0aW1lX2xlZnQgPSBDdXJsX3RpbWVsZWZ0KGRhdGEsIE5VTEwsIFRSVUUpOwpAQCAtMTgzMyw5ICsxOTQxLDkgQEAKICAgICBpZihQUl9HZXRFcnJvcigpID09IFBSX1dPVUxEX0JMT0NLX0VSUk9SKQogICAgICAgLyogYmxvY2tpbmcgZGlyZWN0aW9uIGlzIHVwZGF0ZWQgYnkgbnNzX3VwZGF0ZV9jb25uZWN0aW5nX3N0YXRlKCkgKi8KICAgICAgIHJldHVybiBDVVJMRV9BR0FJTjsKLSAgICBlbHNlIGlmKGNvbm4tPmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdCA9PSBTU0xfRVJST1JfQkFEX0NFUlRfRE9NQUlOKQorICAgIGVsc2UgaWYoKmNlcnR2ZXJpZnlyZXN1bHQgPT0gU1NMX0VSUk9SX0JBRF9DRVJUX0RPTUFJTikKICAgICAgIHJlc3VsdCA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKLSAgICBlbHNlIGlmKGNvbm4tPmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdCE9MCkKKyAgICBlbHNlIGlmKCpjZXJ0dmVyaWZ5cmVzdWx0ICE9IDApCiAgICAgICByZXN1bHQgPSBDVVJMRV9TU0xfQ0FDRVJUOwogICAgIGdvdG8gZXJyb3I7CiAgIH0KQEAgLTE4NDQsMTEgKzE5NTIsMTEgQEAKICAgaWYocmVzdWx0KQogICAgIGdvdG8gZXJyb3I7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0lTU1VFUkNFUlRdKSB7CisgIGlmKFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKSB7CiAgICAgU0VDU3RhdHVzIHJldCA9IFNFQ0ZhaWx1cmU7Ci0gICAgY2hhciAqbmlja25hbWUgPSBkdXBfbmlja25hbWUoZGF0YSwgU1RSSU5HX1NTTF9JU1NVRVJDRVJUKTsKKyAgICBjaGFyICpuaWNrbmFtZSA9IGR1cF9uaWNrbmFtZShkYXRhLCBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSk7CiAgICAgaWYobmlja25hbWUpIHsKLSAgICAgIC8qIHdlIHN1cHBvcnQgb25seSBuaWNrbmFtZXMgaW4gY2FzZSBvZiBTVFJJTkdfU1NMX0lTU1VFUkNFUlQgZm9yIG5vdyAqLworICAgICAgLyogd2Ugc3VwcG9ydCBvbmx5IG5pY2tuYW1lcyBpbiBjYXNlIG9mIGlzc3VlcmNlcnQgZm9yIG5vdyAqLwogICAgICAgcmV0ID0gY2hlY2tfaXNzdWVyX2NlcnQoY29ubnNzbC0+aGFuZGxlLCBuaWNrbmFtZSk7CiAgICAgICBmcmVlKG5pY2tuYW1lKTsKICAgICB9CkBAIC0xODgyLDggKzE5OTAsMTEgQEAKICAgY29uc3QgYm9vbCBibG9ja2luZyA9IChkb25lID09IE5VTEwpOwogICBDVVJMY29kZSByZXN1bHQ7CiAKLSAgaWYoY29ubnNzbC0+c3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpCisgIGlmKGNvbm5zc2wtPnN0YXRlID09IHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlKSB7CisgICAgaWYoIWJsb2NraW5nKQorICAgICAgKmRvbmUgPSBUUlVFOwogICAgIHJldHVybiBDVVJMRV9PSzsKKyAgfQogCiAgIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMSkgewogICAgIHJlc3VsdCA9IG5zc19zZXR1cF9jb25uZWN0KGNvbm4sIHNvY2tpbmRleCk7CkBAIC0yMDcwLDcgKzIxODEsOCBAQAogI2VuZGlmCiB9CiAKLWJvb2wgQ3VybF9uc3NfZmFsc2Vfc3RhcnQodm9pZCkgeworYm9vbCBDdXJsX25zc19mYWxzZV9zdGFydCh2b2lkKQorewogI2lmIE5TU1ZFUk5VTSA+PSAweDAzMGYwNCAvKiAzLjE1LjQgKi8KICAgcmV0dXJuIFRSVUU7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbGliL3Z0bHMvb3BlbnNzbC5jIGIvbGliL3Z0bHMvb3BlbnNzbC5jCmluZGV4IDMwMjdjYTMuLmFmNGFmZTggMTAwNjQ0Ci0tLSBhL2xpYi92dGxzL29wZW5zc2wuYworKysgYi9saWIvdnRscy9vcGVuc3NsLmMKQEAgLTQ2LDEwICs0Niw5IEBACiAjaW5jbHVkZSAib3BlbnNzbC5oIgogI2luY2x1ZGUgImNvbm5lY3QuaCIKICNpbmNsdWRlICJzbGlzdC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCiAjaW5jbHVkZSAic2VsZWN0LmgiCiAjaW5jbHVkZSAidnRscy5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJob3N0Y2hlY2suaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogCkBAIC05NSwxMSArOTQsNiBAQAogCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMDAwMEwpCiAjZGVmaW5lIEhBVkVfRVJSX1JFTU9WRV9USFJFQURfU1RBVEUgMQotI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDRMKSAmJiBcCi0gICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotLyogT3BlblNTTCAxLjEuMCBkZXByZWNhdGVzIHRoZSBmdW5jdGlvbiAqLwotI2RlZmluZSBIQVZFX0VSUl9SRU1PVkVfVEhSRUFEX1NUQVRFX0RFUFJFQ0FURUQgMQotI2VuZGlmCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEhBVkVfU1NMVjJfQ0xJRU5UX01FVEhPRCkgfHwgXApAQCAtMTEwLDExICsxMDQsMjggQEAKIAogI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAmJiAvKiBPcGVuU1NMIDEuMS4wKyAqLyBcCiAgICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotI2RlZmluZSBTU0xlYXlfYWRkX3NzbF9hbGdvcml0aG1zKCkgU1NMX2xpYnJhcnlfaW5pdCgpCiAjZGVmaW5lIFNTTEVBWV9WRVJTSU9OX05VTUJFUiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCiAjZGVmaW5lIEhBVkVfWDUwOV9HRVQwX0VYVEVOU0lPTlMgMSAvKiBhZGRlZCBpbiAxLjEuMCAtcHJlMSAqLwogI2RlZmluZSBIQVZFX09QQVFVRV9FVlBfUEtFWSAxIC8qIHNpbmNlIDEuMS4wIC1wcmUzICovCiAjZGVmaW5lIEhBVkVfT1BBUVVFX1JTQV9EU0FfREggMSAvKiBzaW5jZSAxLjEuMCAtcHJlNSAqLworI2RlZmluZSBDT05TVF9FWFRTIGNvbnN0CisjZGVmaW5lIENPTlNUX0FTTjFfQklUX1NUUklORyBjb25zdAorI2RlZmluZSBIQVZFX0VSUl9SRU1PVkVfVEhSRUFEX1NUQVRFX0RFUFJFQ0FURUQgMQorI2Vsc2UKKy8qIEZvciBPcGVuU1NMIGJlZm9yZSAxLjEuMCAqLworI2RlZmluZSBBU04xX1NUUklOR19nZXQwX2RhdGEoeCkgQVNOMV9TVFJJTkdfZGF0YSh4KQorI2RlZmluZSBYNTA5X2dldDBfbm90QmVmb3JlKHgpIFg1MDlfZ2V0X25vdEJlZm9yZSh4KQorI2RlZmluZSBYNTA5X2dldDBfbm90QWZ0ZXIoeCkgWDUwOV9nZXRfbm90QWZ0ZXIoeCkKKyNkZWZpbmUgQ09OU1RfRVhUUyAvKiBub3BlICovCisjZGVmaW5lIENPTlNUX0FTTjFfQklUX1NUUklORyAvKiBub3BlICovCisjaWZkZWYgTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIKK3N0YXRpYyB1bnNpZ25lZCBsb25nIE9wZW5TU0xfdmVyc2lvbl9udW0odm9pZCkKK3sKKyAgcmV0dXJuIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSOworfQorI2Vsc2UKKyNkZWZpbmUgT3BlblNTTF92ZXJzaW9uX251bSgpIFNTTGVheSgpCisjZW5kaWYKICNlbmRpZgogCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMjAwZkwpICYmIC8qIDEuMC4yIG9yIGxhdGVyICovIFwKQEAgLTE2NSwzOSArMTc2LDM0IEBACiB9CiAKIC8qCi0gKiByYW5kX2Vub3VnaCgpIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIFRSVUUgaWYgd2UgaGF2ZSBzZWVkZWQgdGhlIHJhbmRvbQotICogZW5naW5lIHByb3Blcmx5LiBXZSB1c2Ugc29tZSBwcmVwcm9jZXNzb3IgbWFnaWMgdG8gcHJvdmlkZSBhIHNlZWRfZW5vdWdoKCkKLSAqIG1hY3JvIHRvIHVzZSwganVzdCB0byBwcmV2ZW50IGEgY29tcGlsZXIgd2FybmluZyBvbiB0aGlzIGZ1bmN0aW9uIGlmIHdlCi0gKiBwYXNzIGluIGFuIGFyZ3VtZW50IHRoYXQgaXMgbmV2ZXIgdXNlZC4KKyAqIHJhbmRfZW5vdWdoKCkgcmV0dXJucyBUUlVFIGlmIHdlIGhhdmUgc2VlZGVkIHRoZSByYW5kb20gZW5naW5lIHByb3Blcmx5LgogICovCi0KLSNpZmRlZiBIQVZFX1JBTkRfU1RBVFVTCi0jZGVmaW5lIHNlZWRfZW5vdWdoKHgpIHJhbmRfZW5vdWdoKCkKIHN0YXRpYyBib29sIHJhbmRfZW5vdWdoKHZvaWQpCiB7CiAgIHJldHVybiAoMCAhPSBSQU5EX3N0YXR1cygpKSA/IFRSVUUgOiBGQUxTRTsKIH0KLSNlbHNlCi0jZGVmaW5lIHNlZWRfZW5vdWdoKHgpIHJhbmRfZW5vdWdoKHgpCi1zdGF0aWMgYm9vbCByYW5kX2Vub3VnaChpbnQgbnJlYWQpCi17Ci0gIC8qIHRoaXMgaXMgYSB2ZXJ5IHNpbGx5IGRlY2lzaW9uIHRvIG1ha2UgKi8KLSAgcmV0dXJuIChucmVhZCA+IDUwMCkgPyBUUlVFIDogRkFMU0U7Ci19Ci0jZW5kaWYKIAotc3RhdGljIGludCBvc3NsX3NlZWQoc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKK3N0YXRpYyBDVVJMY29kZSBDdXJsX29zc2xfc2VlZChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQogeworICAvKiB3ZSBoYXZlIHRoZSAiU1NMIGlzIHNlZWRlZCIgYm9vbGVhbiBzdGF0aWMgdG8gcHJldmVudCBtdWx0aXBsZQorICAgICB0aW1lLWNvbnN1bWluZyBzZWVkaW5ncyBpbiB2YWluICovCisgIHN0YXRpYyBib29sIHNzbF9zZWVkZWQgPSBGQUxTRTsKICAgY2hhciAqYnVmID0gZGF0YS0+c3RhdGUuYnVmZmVyOyAvKiBwb2ludCB0byB0aGUgYmlnIGJ1ZmZlciAqLwogICBpbnQgbnJlYWQ9MDsKIAotICAvKiBROiBzaG91bGQgd2UgYWRkIHN1cHBvcnQgZm9yIGEgcmFuZG9tIGZpbGUgbmFtZSBhcyBhIGxpYmN1cmwgb3B0aW9uPwotICAgICBBOiBZZXMsIGl0IGlzIGhlcmUgKi8KKyAgaWYoc3NsX3NlZWRlZCkKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisKKyAgaWYocmFuZF9lbm91Z2goKSkgeworICAgIC8qIE9wZW5TU0wgMS4xLjArIHdpbGwgcmV0dXJuIGhlcmUgKi8KKyAgICBzc2xfc2VlZGVkID0gVFJVRTsKKyAgICByZXR1cm4gQ1VSTEVfT0s7CisgIH0KIAogI2lmbmRlZiBSQU5ET01fRklMRQogICAvKiBpZiBSQU5ET01fRklMRSBpc24ndCBkZWZpbmVkLCB3ZSBvbmx5IHBlcmZvcm0gdGhpcyBpZiBhbiBvcHRpb24gdGVsbHMKICAgICAgdXMgdG8hICovCi0gIGlmKGRhdGEtPnNldC5zc2wucmFuZG9tX2ZpbGUpCisgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9SQU5ET01fRklMRV0pCiAjZGVmaW5lIFJBTkRPTV9GSUxFICIiIC8qIGRvZXNuJ3QgbWF0dGVyIHdvbid0IGJlIHVzZWQgKi8KICNlbmRpZgogICB7CkBAIC0yMDYsNyArMjEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX1JBTkRPTV9GSUxFXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFORE9NX0ZJTEUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkRfTE9BRF9MRU5HVEgpOwotICAgIGlmKHNlZWRfZW5vdWdoKG5yZWFkKSkKKyAgICBpZihyYW5kX2Vub3VnaCgpKQogICAgICAgcmV0dXJuIG5yZWFkOwogICB9CiAKQEAgLTIyNiw3ICsyMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfRUdEU09DS0VUXTpFR0RfU09DS0VUKTsKICAgICBpZigtMSAhPSByZXQpIHsKICAgICAgIG5yZWFkICs9IHJldDsKLSAgICAgIGlmKHNlZWRfZW5vdWdoKG5yZWFkKSkKKyAgICAgIGlmKHJhbmRfZW5vdWdoKCkpCiAgICAgICAgIHJldHVybiBucmVhZDsKICAgICB9CiAgIH0KQEAgLTIzNyw5ICsyNDMsMTAgQEAKICAgZG8gewogICAgIHVuc2lnbmVkIGNoYXIgcmFuZGJbNjRdOwogICAgIGludCBsZW4gPSBzaXplb2YocmFuZGIpOwotICAgIFJBTkRfYnl0ZXMocmFuZGIsIGxlbik7CisgICAgaWYoIVJBTkRfYnl0ZXMocmFuZGIsIGxlbikpCisgICAgICBicmVhazsKICAgICBSQU5EX2FkZChyYW5kYiwgbGVuLCAobGVuID4+IDEpKTsKLSAgfSB3aGlsZSghUkFORF9zdGF0dXMoKSk7CisgIH0gd2hpbGUoIXJhbmRfZW5vdWdoKCkpOwogCiAgIC8qIGdlbmVyYXRlcyBhIGRlZmF1bHQgcGF0aCBmb3IgdGhlIHJhbmRvbSBzZWVkIGZpbGUgKi8KICAgYnVmWzBdPTA7IC8qIGJsYW5rIGl0IGZpcnN0ICovCkBAIC0yNDcsMjUgKzI1NCwxMiBAQAogICBpZihidWZbMF0pIHsKICAgICAvKiB3ZSBnb3QgYSBmaWxlIG5hbWUgdG8gdHJ5ICovCiAgICAgbnJlYWQgKz0gUkFORF9sb2FkX2ZpbGUoYnVmLCBSQU5EX0xPQURfTEVOR1RIKTsKLSAgICBpZihzZWVkX2Vub3VnaChucmVhZCkpCisgICAgaWYocmFuZF9lbm91Z2goKSkKICAgICAgIHJldHVybiBucmVhZDsKICAgfQogCiAgIGluZm9mKGRhdGEsICJsaWJjdXJsIGlzIG5vdyB1c2luZyBhIHdlYWsgcmFuZG9tIHNlZWQhXG4iKTsKLSAgcmV0dXJuIG5yZWFkOwotfQotCi1zdGF0aWMgdm9pZCBDdXJsX29zc2xfc2VlZChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQotewotICAvKiB3ZSBoYXZlIHRoZSAiU1NMIGlzIHNlZWRlZCIgYm9vbGVhbiBzdGF0aWMgdG8gcHJldmVudCBtdWx0aXBsZQotICAgICB0aW1lLWNvbnN1bWluZyBzZWVkaW5ncyBpbiB2YWluICovCi0gIHN0YXRpYyBib29sIHNzbF9zZWVkZWQgPSBGQUxTRTsKLQotICBpZighc3NsX3NlZWRlZCB8fCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfUkFORE9NX0ZJTEVdIHx8Ci0gICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9FR0RTT0NLRVRdKSB7Ci0gICAgb3NzbF9zZWVkKGRhdGEpOwotICAgIHNzbF9zZWVkZWQgPSBUUlVFOwotICB9CisgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsgLyogY29uZnVzaW5nIGVycm9yIGNvZGUgKi8KIH0KIAogI2lmbmRlZiBTU0xfRklMRVRZUEVfRU5HSU5FCkBAIC0yNzgsMTMgKzI3MiwxMyBAQAogewogICBpZighdHlwZSB8fCAhdHlwZVswXSkKICAgICByZXR1cm4gU1NMX0ZJTEVUWVBFX1BFTTsKLSAgaWYoQ3VybF9yYXdfZXF1YWwodHlwZSwgIlBFTSIpKQorICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiUEVNIikpCiAgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9QRU07Ci0gIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJERVIiKSkKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIkRFUiIpKQogICAgIHJldHVybiBTU0xfRklMRVRZUEVfQVNOMTsKLSAgaWYoQ3VybF9yYXdfZXF1YWwodHlwZSwgIkVORyIpKQorICBpZihzdHJjYXNlY29tcGFyZSh0eXBlLCAiRU5HIikpCiAgICAgcmV0dXJuIFNTTF9GSUxFVFlQRV9FTkdJTkU7Ci0gIGlmKEN1cmxfcmF3X2VxdWFsKHR5cGUsICJQMTIiKSkKKyAgaWYoc3RyY2FzZWNvbXBhcmUodHlwZSwgIlAxMiIpKQogICAgIHJldHVybiBTU0xfRklMRVRZUEVfUEtDUzEyOwogICByZXR1cm4gLTE7CiB9CkBAIC0zMDEsNyArMjk1LDcgQEAKICAgc3dpdGNoKFVJX2dldF9zdHJpbmdfdHlwZSh1aXMpKSB7CiAgIGNhc2UgVUlUX1BST01QVDoKICAgY2FzZSBVSVRfVkVSSUZZOgotICAgIHBhc3N3b3JkID0gKGNvbnN0IGNoYXIqKVVJX2dldDBfdXNlcl9kYXRhKHVpKTsKKyAgICBwYXNzd29yZCA9IChjb25zdCBjaGFyICopVUlfZ2V0MF91c2VyX2RhdGEodWkpOwogICAgIGlmKHBhc3N3b3JkICYmIChVSV9nZXRfaW5wdXRfZmxhZ3ModWlzKSAmIFVJX0lOUFVUX0ZMQUdfREVGQVVMVF9QV0QpKSB7CiAgICAgICBVSV9zZXRfcmVzdWx0KHVpLCB1aXMsIHBhc3N3b3JkKTsKICAgICAgIHJldHVybiAxOwpAQCAtMzM3LDcgKzMzMSw4IEBACiAgICAgICAgICAgICAgICBjaGFyICpjZXJ0X2ZpbGUsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjZXJ0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICprZXlfZmlsZSwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV90eXBlKQorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5X3R5cGUsCisgICAgICAgICAgICAgICBjaGFyICprZXlfcGFzc3dkKQogewogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKIApAQCAtMzQ4LDEwICszNDMsOSBAQAogICAgIFg1MDkgKng1MDk7CiAgICAgaW50IGNlcnRfZG9uZSA9IDA7CiAKLSAgICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSkgeworICAgIGlmKGtleV9wYXNzd2QpIHsKICAgICAgIC8qIHNldCB0aGUgcGFzc3dvcmQgaW4gdGhlIGNhbGxiYWNrIHVzZXJkYXRhICovCi0gICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSk7CisgICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShjdHgsIGtleV9wYXNzd2QpOwogICAgICAgLyogU2V0IHBhc3N3ZCBjYWxsYmFjazogKi8KICAgICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKGN0eCwgcGFzc3dkX2NhbGxiYWNrKTsKICAgICB9CkBAIC00NjIsNyArNDU2LDcgQEAKIAogICAgICAgUEtDUzEyX1BCRV9hZGQoKTsKIAotICAgICAgaWYoIVBLQ1MxMl9wYXJzZShwMTIsIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV9QQVNTV0RdLCAmcHJpLCAmeDUwOSwKKyAgICAgIGlmKCFQS0NTMTJfcGFyc2UocDEyLCBrZXlfcGFzc3dkLCAmcHJpLCAmeDUwOSwKICAgICAgICAgICAgICAgICAgICAgICAgJmNhKSkgewogICAgICAgICBmYWlsZihkYXRhLAogICAgICAgICAgICAgICAiY291bGQgbm90IHBhcnNlIFBLQ1MxMiBmaWxlLCBjaGVjayBwYXNzd29yZCwgIiBPU1NMX1BBQ0tBR0UKQEAgLTU2MCw3ICs1NTQsNyBAQAogICAgICAgICBFVlBfUEtFWSAqcHJpdl9rZXkgPSBOVUxMOwogICAgICAgICBpZihkYXRhLT5zdGF0ZS5lbmdpbmUpIHsKICAgICAgICAgICBVSV9NRVRIT0QgKnVpX21ldGhvZCA9Ci0gICAgICAgICAgICBVSV9jcmVhdGVfbWV0aG9kKChjaGFyICopImNVUkwgdXNlciBpbnRlcmZhY2UiKTsKKyAgICAgICAgICAgIFVJX2NyZWF0ZV9tZXRob2QoKGNoYXIgKikiY3VybCB1c2VyIGludGVyZmFjZSIpOwogICAgICAgICAgIGlmKCF1aV9tZXRob2QpIHsKICAgICAgICAgICAgIGZhaWxmKGRhdGEsICJ1bmFibGUgZG8gY3JlYXRlICIgT1NTTF9QQUNLQUdFCiAgICAgICAgICAgICAgICAgICAiIHVzZXItaW50ZXJmYWNlIG1ldGhvZCIpOwpAQCAtNTc0LDcgKzU2OCw3IEBACiAgICAgICAgICAgcHJpdl9rZXkgPSAoRVZQX1BLRVkgKikKICAgICAgICAgICAgIEVOR0lORV9sb2FkX3ByaXZhdGVfa2V5KGRhdGEtPnN0YXRlLmVuZ2luZSwga2V5X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aV9tZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfUEFTU1dEXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfcGFzc3dkKTsKICAgICAgICAgICBVSV9kZXN0cm95X21ldGhvZCh1aV9tZXRob2QpOwogICAgICAgICAgIGlmKCFwcml2X2tleSkgewogICAgICAgICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCB0byBsb2FkIHByaXZhdGUga2V5IGZyb20gY3J5cHRvIGVuZ2luZSIpOwpAQCAtNzExLDYgKzcwNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZfTUZMQUdTX0RFRkFVTFRfU0VDVElPTnwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GX01GTEFHU19JR05PUkVfTUlTU0lOR19GSUxFKTsKIAorI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAxMDAwMDBMKSAmJiBcCisgICAgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisgIC8qIE9wZW5TU0wgMS4xLjArIHRha2VzIGNhcmUgb2YgaW5pdGlhbGl6YXRpb24gaXRzZWxmICovCisjZWxzZQogICAvKiBMZXRzIGdldCBuaWNlIGVycm9yIG1lc3NhZ2VzICovCiAgIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKIApAQCAtNzE5LDYgKzcxNyw3IEBACiAgICAgcmV0dXJuIDA7CiAKICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsKKyNlbmRpZgogCiAgIHJldHVybiAxOwogfQpAQCAtNzI2LDYgKzcyNSwxMSBAQAogLyogR2xvYmFsIGNsZWFudXAgKi8KIHZvaWQgQ3VybF9vc3NsX2NsZWFudXAodm9pZCkKIHsKKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTCkgJiYgXAorICAgICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQorICAvKiBPcGVuU1NMIDEuMSBkZXByZWNhdGVzIGFsbCB0aGVzZSBjbGVhbnVwIGZ1bmN0aW9ucyBhbmQKKyAgICAgdHVybnMgdGhlbSBpbnRvIG5vLW9wcyBpbiBPcGVuU1NMIDEuMCBjb21wYXRpYmlsaXR5IG1vZGUgKi8KKyNlbHNlCiAgIC8qIEZyZWUgY2lwaGVycyBhbmQgZGlnZXN0cyBsaXN0cyAqLwogICBFVlBfY2xlYW51cCgpOwogCkBAIC03MzQsMTggKzczOCwxMSBAQAogICBFTkdJTkVfY2xlYW51cCgpOwogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0NSWVBUT19DTEVBTlVQX0FMTF9FWF9EQVRBCi0gIC8qIEZyZWUgT3BlblNTTCBleF9kYXRhIHRhYmxlICovCi0gIENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhKCk7Ci0jZW5kaWYKLQogICAvKiBGcmVlIE9wZW5TU0wgZXJyb3Igc3RyaW5ncyAqLwogICBFUlJfZnJlZV9zdHJpbmdzKCk7CiAKICAgLyogRnJlZSB0aHJlYWQgbG9jYWwgZXJyb3Igc3RhdGUsIGRlc3Ryb3lpbmcgaGFzaCB1cG9uIHplcm8gcmVmY291bnQgKi8KLSNpZmRlZiBIQVZFX0VSUl9SRU1PVkVfVEhSRUFEX1NUQVRFX0RFUFJFQ0FURUQKLQotI2VsaWYgZGVmaW5lZChIQVZFX0VSUl9SRU1PVkVfVEhSRUFEX1NUQVRFKQorI2lmZGVmIEhBVkVfRVJSX1JFTU9WRV9USFJFQURfU1RBVEUKICAgRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CiAjZWxzZQogICBFUlJfcmVtb3ZlX3N0YXRlKDApOwpAQCAtNzU3LDYgKzc1NCw3IEBACiAjaWZkZWYgSEFWRV9TU0xfQ09NUF9GUkVFX0NPTVBSRVNTSU9OX01FVEhPRFMKICAgU1NMX0NPTVBfZnJlZV9jb21wcmVzc2lvbl9tZXRob2RzKCk7CiAjZW5kaWYKKyNlbmRpZgogfQogCiAvKgpAQCAtOTAxLDEzICs4OTksOCBAQAogfQogCiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIFNTTCBjb25uZWN0aW9uIGlzIGNsb3NlZC4KLSAqLwotdm9pZCBDdXJsX29zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQorc3RhdGljIHZvaWQgb3NzbF9jbG9zZShzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCkKIHsKLSAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07Ci0KICAgaWYoY29ubnNzbC0+aGFuZGxlKSB7CiAgICAgKHZvaWQpU1NMX3NodXRkb3duKGNvbm5zc2wtPmhhbmRsZSk7CiAgICAgU1NMX3NldF9jb25uZWN0X3N0YXRlKGNvbm5zc2wtPmhhbmRsZSk7CkBAIC05MjIsNiArOTE1LDE1IEBACiB9CiAKIC8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIFNTTCBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAqLwordm9pZCBDdXJsX29zc2xfY2xvc2Uoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBvc3NsX2Nsb3NlKCZjb25uLT5zc2xbc29ja2luZGV4XSk7CisgIG9zc2xfY2xvc2UoJmNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdKTsKK30KKworLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNodXQgZG93biB0aGUgU1NMIGxheWVyIGJ1dCBrZWVwIHRoZQogICogc29ja2V0IG9wZW4gKENDQyAtIENsZWFyIENvbW1hbmQgQ2hhbm5lbCkKICAqLwpAQCAtOTQ5LDggKzk1MSw4IEBACiAgIGlmKGNvbm5zc2wtPmhhbmRsZSkgewogICAgIGJ1ZmZzaXplID0gKGludClzaXplb2YoYnVmKTsKICAgICB3aGlsZSghZG9uZSkgewotICAgICAgaW50IHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShjb25uLT5zb2NrW3NvY2tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxfU09DS0VUX0JBRCwgU1NMX1NIVVRET1dOX1RJTUVPVVQpOworICAgICAgaW50IHdoYXQgPSBTT0NLRVRfUkVBREFCTEUoY29ubi0+c29ja1tzb2NraW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NIVVRET1dOX1RJTUVPVVQpOwogICAgICAgaWYod2hhdCA+IDApIHsKICAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CiAKQEAgLTEwNDMsNiArMTA0NSwxNCBAQAogI2Vsc2UKICAgKHZvaWQpZGF0YTsKICNlbmRpZgorI2lmICFkZWZpbmVkKEhBVkVfRVJSX1JFTU9WRV9USFJFQURfU1RBVEVfREVQUkVDQVRFRCkgJiYgXAorICBkZWZpbmVkKEhBVkVfRVJSX1JFTU9WRV9USFJFQURfU1RBVEUpCisgIC8qIE9wZW5TU0wgMS4wLjEgYW5kIDEuMC4yIGJ1aWxkIGFuIGVycm9yIHF1ZXVlIHRoYXQgaXMgc3RvcmVkIHBlci10aHJlYWQKKyAgICAgc28gd2UgbmVlZCB0byBjbGVhbiBpdCBoZXJlIGluIGNhc2UgdGhlIHRocmVhZCB3aWxsIGJlIGtpbGxlZC4gQWxsIE9wZW5TU0wKKyAgICAgY29kZSBzaG91bGQgZXh0cmFjdCB0aGUgZXJyb3IgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgZXJyb3Igc28gY2xlYXJpbmcKKyAgICAgdGhpcyBxdWV1ZSBoZXJlIHNob3VsZCBiZSBoYXJtbGVzcyBhdCB3b3JzdC4gKi8KKyAgRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCk7CisjZW5kaWYKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0xMDgzLDE2ICsxMDkzLDIxIEBACiAjZW5kaWYKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIGJvb2wgZE5TTmFtZSA9IEZBTFNFOyAvKiBpZiBhIGROU05hbWUgZmllbGQgZXhpc3RzIGluIHRoZSBjZXJ0ICovCisgIGJvb2wgaVBBZGRyZXNzID0gRkFMU0U7IC8qIGlmIGEgaVBBZGRyZXNzIGZpZWxkIGV4aXN0cyBpbiB0aGUgY2VydCAqLworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBkaXNwbmFtZSA9IFNTTF9JU19QUk9YWSgpID8KKyAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWUgOiBjb25uLT5ob3N0LmRpc3BuYW1lOwogCiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgaWYoY29ubi0+Yml0cy5pcHY2X2lwICYmCi0gICAgIEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkgeworICAgICBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyKSkgewogICAgIHRhcmdldCA9IEdFTl9JUEFERDsKICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAgIH0KICAgZWxzZQogI2VuZGlmCi0gICAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpIHsKKyAgICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpKSB7CiAgICAgICB0YXJnZXQgPSBHRU5fSVBBREQ7CiAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKICAgICB9CkBAIC0xMTE1LDE1ICsxMTMwLDE1IEBACiAgICAgICAvKiBnZXQgYSBoYW5kbGUgdG8gYWx0ZXJuYXRpdmUgbmFtZSBudW1iZXIgaSAqLwogICAgICAgY29uc3QgR0VORVJBTF9OQU1FICpjaGVjayA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShhbHRuYW1lcywgaSk7CiAKLSAgICAgIC8qIElmIGEgc3ViamVjdEFsdE5hbWUgZXh0ZW5zaW9uIG9mIHR5cGUgZE5TTmFtZSBpcyBwcmVzZW50LCB0aGF0IE1VU1QKLSAgICAgICAgIGJlIHVzZWQgYXMgdGhlIGlkZW50aXR5LiAvIFJGQzI4MTggc2VjdGlvbiAzLjEgKi8KICAgICAgIGlmKGNoZWNrLT50eXBlID09IEdFTl9ETlMpCiAgICAgICAgIGROU05hbWUgPSBUUlVFOworICAgICAgZWxzZSBpZihjaGVjay0+dHlwZSA9PSBHRU5fSVBBREQpCisgICAgICAgIGlQQWRkcmVzcyA9IFRSVUU7CiAKICAgICAgIC8qIG9ubHkgY2hlY2sgYWx0ZXJuYXRpdmVzIG9mIHRoZSBzYW1lIHR5cGUgdGhlIHRhcmdldCBpcyAqLwogICAgICAgaWYoY2hlY2stPnR5cGUgPT0gdGFyZ2V0KSB7CiAgICAgICAgIC8qIGdldCBkYXRhIGFuZCBsZW5ndGggKi8KLSAgICAgICAgY29uc3QgY2hhciAqYWx0cHRyID0gKGNoYXIgKilBU04xX1NUUklOR19kYXRhKGNoZWNrLT5kLmlhNSk7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsdHB0ciA9IChjaGFyICopQVNOMV9TVFJJTkdfZ2V0MF9kYXRhKGNoZWNrLT5kLmlhNSk7CiAgICAgICAgIHNpemVfdCBhbHRsZW4gPSAoc2l6ZV90KSBBU04xX1NUUklOR19sZW5ndGgoY2hlY2stPmQuaWE1KTsKIAogICAgICAgICBzd2l0Y2godGFyZ2V0KSB7CkBAIC0xMTQxLDExICsxMTU2LDExIEBACiAgICAgICAgICAgaWYoKGFsdGxlbiA9PSBzdHJsZW4oYWx0cHRyKSkgJiYKICAgICAgICAgICAgICAvKiBpZiB0aGlzIGlzbid0IHRydWUsIHRoZXJlIHdhcyBhbiBlbWJlZGRlZCB6ZXJvIGluIHRoZSBuYW1lCiAgICAgICAgICAgICAgICAgc3RyaW5nIGFuZCB3ZSBjYW5ub3QgbWF0Y2ggaXQuICovCi0gICAgICAgICAgICAgQ3VybF9jZXJ0X2hvc3RjaGVjayhhbHRwdHIsIGNvbm4tPmhvc3QubmFtZSkpIHsKKyAgICAgICAgICAgICBDdXJsX2NlcnRfaG9zdGNoZWNrKGFsdHB0ciwgaG9zdG5hbWUpKSB7CiAgICAgICAgICAgICBkbnNtYXRjaGVkID0gVFJVRTsKICAgICAgICAgICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgICAgICAgICAiIHN1YmplY3RBbHROYW1lOiBob3N0IFwiJXNcIiBtYXRjaGVkIGNlcnQncyBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICBjb25uLT5ob3N0LmRpc3BuYW1lLCBhbHRwdHIpOworICAgICAgICAgICAgICAgICAgZGlzcG5hbWUsIGFsdHB0cik7CiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwogCkBAIC0xMTU2LDcgKzExNzEsNyBAQAogICAgICAgICAgICAgaXBtYXRjaGVkID0gVFJVRTsKICAgICAgICAgICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgICAgICAgICAiIHN1YmplY3RBbHROYW1lOiBob3N0IFwiJXNcIiBtYXRjaGVkIGNlcnQncyBJUCBhZGRyZXNzIVxuIiwKLSAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QuZGlzcG5hbWUpOworICAgICAgICAgICAgICAgICAgZGlzcG5hbWUpOwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE2NCwyMSArMTE3OSwxNyBAQAogICAgIH0KICAgICBHRU5FUkFMX05BTUVTX2ZyZWUoYWx0bmFtZXMpOwogCi0gICAgaWYoZG5zbWF0Y2hlZCB8fCAoIWROU05hbWUgJiYgaXBtYXRjaGVkKSkgewotICAgICAgLyogY291bnQgYXMgYSBtYXRjaCBpZiB0aGUgZG5zbmFtZSBtYXRjaGVkIG9yIGlmIHRoZXJlIHdhcyBubyBkbnNuYW1lCi0gICAgICAgICBmaWVsZHMgYXQgYWxsIEFORCB0aGVyZSB3YXMgYW4gSVAgZmllbGQgbWF0Y2ggKi8KKyAgICBpZihkbnNtYXRjaGVkIHx8IGlwbWF0Y2hlZCkKICAgICAgIG1hdGNoZWQgPSBUUlVFOwotICAgIH0KICAgfQogCiAgIGlmKG1hdGNoZWQpCiAgICAgLyogYW4gYWx0ZXJuYXRpdmUgbmFtZSBtYXRjaGVkICovCiAgICAgOwotICBlbHNlIGlmKGROU05hbWUpIHsKLSAgICAvKiBhbiBkTlNOYW1lIGZpZWxkIGV4aXN0ZWQsIGJ1dCBkaWRuJ3QgbWF0Y2ggYW5kIHRoZW4gd2UgTVVTVCBmYWlsICovCi0gICAgaW5mb2YoZGF0YSwgIiBzdWJqZWN0QWx0TmFtZSBkb2VzIG5vdCBtYXRjaCAlc1xuIiwgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgIGVsc2UgaWYoZE5TTmFtZSB8fCBpUEFkZHJlc3MpIHsKKyAgICBpbmZvZihkYXRhLCAiIHN1YmplY3RBbHROYW1lIGRvZXMgbm90IG1hdGNoICVzXG4iLCBkaXNwbmFtZSk7CiAgICAgZmFpbGYoZGF0YSwgIlNTTDogbm8gYWx0ZXJuYXRpdmUgY2VydGlmaWNhdGUgc3ViamVjdCBuYW1lIG1hdGNoZXMgIgotICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICAidGFyZ2V0IGhvc3QgbmFtZSAnJXMnIiwgZGlzcG5hbWUpOwogICAgIHJlc3VsdCA9IENVUkxFX1BFRVJfRkFJTEVEX1ZFUklGSUNBVElPTjsKICAgfQogICBlbHNlIHsKQEAgLTEyMTUsNyArMTIyNiw3IEBACiAgICAgICAgICAgaWYoaiA+PSAwKSB7CiAgICAgICAgICAgICBwZWVyX0NOID0gT1BFTlNTTF9tYWxsb2MoaisxKTsKICAgICAgICAgICAgIGlmKHBlZXJfQ04pIHsKLSAgICAgICAgICAgICAgbWVtY3B5KHBlZXJfQ04sIEFTTjFfU1RSSU5HX2RhdGEodG1wKSwgaik7CisgICAgICAgICAgICAgIG1lbWNweShwZWVyX0NOLCBBU04xX1NUUklOR19nZXQwX2RhdGEodG1wKSwgaik7CiAgICAgICAgICAgICAgIHBlZXJfQ05bal0gPSAnXDAnOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KQEAgLTEyNTIsOSArMTI2Myw5IEBACiAgICAgICAgICAgICAiU1NMOiB1bmFibGUgdG8gb2J0YWluIGNvbW1vbiBuYW1lIGZyb20gcGVlciBjZXJ0aWZpY2F0ZSIpOwogICAgICAgcmVzdWx0ID0gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICAgIH0KLSAgICBlbHNlIGlmKCFDdXJsX2NlcnRfaG9zdGNoZWNrKChjb25zdCBjaGFyICopcGVlcl9DTiwgY29ubi0+aG9zdC5uYW1lKSkgeworICAgIGVsc2UgaWYoIUN1cmxfY2VydF9ob3N0Y2hlY2soKGNvbnN0IGNoYXIgKilwZWVyX0NOLCBob3N0bmFtZSkpIHsKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAnJXMnIGRvZXMgbm90IG1hdGNoICIKLSAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBwZWVyX0NOLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBwZWVyX0NOLCBkaXNwbmFtZSk7CiAgICAgICByZXN1bHQgPSBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTUyOSw2ICsxNTQwLDExIEBACiAgICAgdmVyc3RyID0gIlRMU3YxLjIiOwogICAgIGJyZWFrOwogI2VuZGlmCisjaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgY2FzZSBUTFMxXzNfVkVSU0lPTjoKKyAgICB2ZXJzdHIgPSAiVExTdjEuMyI7CisgICAgYnJlYWs7CisjZW5kaWYKICAgY2FzZSAwOgogICAgIGJyZWFrOwogICBkZWZhdWx0OgpAQCAtMTU1MSw3ICsxNTY3LDcgQEAKICAgICBlbHNlCiAgICAgICB0bHNfcnRfbmFtZSA9ICIiOwogCi0gICAgbXNnX3R5cGUgPSAqKGNoYXIqKWJ1ZjsKKyAgICBtc2dfdHlwZSA9ICooY2hhciAqKWJ1ZjsKICAgICBtc2dfbmFtZSA9IHNzbF9tc2dfdHlwZShzc2xfdmVyLCBtc2dfdHlwZSk7CiAKICAgICB0eHRfbGVuID0gc25wcmludGYoc3NsX2J1Ziwgc2l6ZW9mKHNzbF9idWYpLCAiJXMgKCVzKSwgJXMsICVzICglZCk6XG4iLApAQCAtMTY1Nyw2ICsxNjczLDEwIEBACiAgICAgcmV0dXJuICIiOwogCiAgIHN3aXRjaChTU0xfdmVyc2lvbihzc2wpKSB7CisjaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgY2FzZSBUTFMxXzNfVkVSU0lPTjoKKyAgICByZXR1cm4gIlRMU3YxLjMiOworI2VuZGlmCiAjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDBGTAogICBjYXNlIFRMUzFfMl9WRVJTSU9OOgogICAgIHJldHVybiAiVExTdjEuMiI7CkBAIC0xNjkxLDIzICsxNzExLDM5IEBACiAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CiAjZW5kaWYKICNlbmRpZgorICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KKyAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKKyAgY29uc3QgbG9uZyBpbnQgc3NsX3ZlcnNpb24gPSBTU0xfQ09OTl9DT05GSUcodmVyc2lvbik7CisjaWZkZWYgVVNFX1RMU19TUlAKKyAgY29uc3QgZW51bSBDVVJMX1RMU0FVVEggc3NsX2F1dGh0eXBlID0gU1NMX1NFVF9PUFRJT04oYXV0aHR5cGUpOworI2VuZGlmCisgIGNoYXIgKiBjb25zdCBzc2xfY2VydCA9IFNTTF9TRVRfT1BUSU9OKGNlcnQpOworICBjb25zdCBjaGFyICogY29uc3Qgc3NsX2NlcnRfdHlwZSA9IFNTTF9TRVRfT1BUSU9OKGNlcnRfdHlwZSk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FmaWxlID0gU1NMX0NPTk5fQ09ORklHKENBZmlsZSk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBzc2xfY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CisgIGNvbnN0IGJvb2wgdmVyaWZ5cGVlciA9IFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKTsKKyAgY29uc3QgY2hhciAqIGNvbnN0IHNzbF9jcmxmaWxlID0gU1NMX1NFVF9PUFRJT04oQ1JMZmlsZSk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKIAogICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8xID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwogCiAgIC8qIE1ha2UgZnVubnkgc3R1ZmYgdG8gZ2V0IHJhbmRvbSBpbnB1dCAqLwotICBDdXJsX29zc2xfc2VlZChkYXRhKTsKKyAgcmVzdWx0ID0gQ3VybF9vc3NsX3NlZWQoZGF0YSk7CisgIGlmKHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0OwogCi0gIGRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdCA9ICFYNTA5X1ZfT0s7CisgICpjZXJ0dmVyaWZ5cmVzdWx0ID0gIVg1MDlfVl9PSzsKIAogICAvKiBjaGVjayB0byBzZWUgaWYgd2UndmUgYmVlbiB0b2xkIHRvIHVzZSBhbiBleHBsaWNpdCBTU0wvVExTIHZlcnNpb24gKi8KIAotICBzd2l0Y2goZGF0YS0+c2V0LnNzbC52ZXJzaW9uKSB7Ci0gIGRlZmF1bHQ6CisgIHN3aXRjaChzc2xfdmVyc2lvbikgewogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MToKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKICAgICAvKiBpdCB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIgd2l0aCB0aGUgY29udGV4dCBvcHRpb25zICovCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDEwMDAwMEwpICYmIFwKICAgICAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKQEAgLTE3MjMsNyArMTc1OSw3IEBACiAgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKICNlbHNlCiAjaWZkZWYgVVNFX1RMU19TUlAKLSAgICBpZihkYXRhLT5zZXQuc3NsLmF1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlApCisgICAgaWYoc3NsX2F1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlApCiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAjZW5kaWYKICAgICByZXFfbWV0aG9kID0gU1NMdjJfY2xpZW50X21ldGhvZCgpOwpAQCAtMTczNiwxMyArMTc3MiwxNiBAQAogICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CiAjZWxzZQogI2lmZGVmIFVTRV9UTFNfU1JQCi0gICAgaWYoZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQKQorICAgIGlmKHNzbF9hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQKQogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogI2VuZGlmCiAgICAgcmVxX21ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKICAgICB1c2Vfc25pKEZBTFNFKTsKICAgICBicmVhazsKICNlbmRpZgorICBkZWZhdWx0OgorICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CisgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKICAgaWYoY29ubnNzbC0+Y3R4KQpAQCAtMTgyMSwxNCArMTg2MCwxNCBAQAogI2lmZGVmIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMKICAgLyogdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrIHRvIGFsbG93IHRoZSBwcm90b2NvbCB2dWxuZXJhYmlsaXR5IHdlCiAgICAgIHVzZSB0aGUgd29yay1hcm91bmQgKi8KLSAgaWYoIWNvbm4tPmRhdGEtPnNldC5zc2xfZW5hYmxlX2JlYXN0KQorICBpZighU1NMX1NFVF9PUFRJT04oZW5hYmxlX2JlYXN0KSkKICAgICBjdHhfb3B0aW9ucyAmPSB+U1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzsKICNlbmRpZgogCi0gIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKKyAgc3dpdGNoKHNzbF92ZXJzaW9uKSB7CiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYzOgogI2lmZGVmIFVTRV9UTFNfU1JQCi0gICAgaWYoZGF0YS0+c2V0LnNzbC5hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQKSB7CisgICAgaWYoc3NsX2F1dGh0eXBlID09IENVUkxfVExTQVVUSF9TUlApIHsKICAgICAgIGluZm9mKGRhdGEsICJTZXQgdmVyc2lvbiBUTFN2MS54IGZvciBTUlAgYXV0aG9yaXNhdGlvblxuIik7CiAgICAgfQogI2VuZGlmCkBAIC0xODM3LDYgKzE4NzYsOSBAQAogI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyNpZmRlZiBUTFMxXzNfVkVSU0lPTgorICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworI2VuZGlmCiAjZW5kaWYKICAgICBicmVhazsKIApAQCAtMTg1MiwzOCArMTg5NCw3NSBAQAogI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyNpZmRlZiBUTFMxXzNfVkVSU0lPTgorICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworI2VuZGlmCiAjZW5kaWYKICAgICBicmVhazsKIAotI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMToKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDEwMEZMCiAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOwogICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7CiAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7CisjaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMzsKKyNlbmRpZgogICAgIGJyZWFrOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCBPU1NMX1BBQ0tBR0UgIiB3YXMgYnVpbHQgd2l0aG91dCBUTFMgMS4xIHN1cHBvcnQiKTsKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOworI2VuZGlmCiAKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjoKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDEwMEZMCiAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOwogICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19TU0x2MzsKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjE7CiAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisjaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMzsKKyNlbmRpZgogICAgIGJyZWFrOworI2Vsc2UKKyAgICBmYWlsZihkYXRhLCBPU1NMX1BBQ0tBR0UgIiB3YXMgYnVpbHQgd2l0aG91dCBUTFMgMS4yIHN1cHBvcnQiKTsKKyAgICByZXR1cm4gQ1VSTEVfTk9UX0JVSUxUX0lOOwogI2VuZGlmCiAKLSNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCisgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzM6CisjaWZkZWYgVExTMV8zX1ZFUlNJT04KKyAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjb25uc3NsLT5jdHgsIFRMUzFfM19WRVJTSU9OKTsKKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7CisgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOworICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MTsKKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKKyAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyAgICBicmVhazsKKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgT1NTTF9QQUNLQUdFICIgd2FzIGJ1aWx0IHdpdGhvdXQgVExTIDEuMyBzdXBwb3J0Iik7CisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgorCiAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyOgorI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7CiAgICAgY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOwogI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwRkwKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMTsKICAgICBjdHhfb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKyNpZmRlZiBUTFMxXzNfVkVSU0lPTgorICAgIGN0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8zOworI2VuZGlmCiAjZW5kaWYKICAgICBicmVhazsKKyNlbHNlCisgICAgZmFpbGYoZGF0YSwgT1NTTF9QQUNLQUdFICIgd2FzIGJ1aWx0IHdpdGhvdXQgU1NMdjIgc3VwcG9ydCIpOworICAgIHJldHVybiBDVVJMRV9OT1RfQlVJTFRfSU47CiAjZW5kaWYKIAogICBkZWZhdWx0OgotICAgIGZhaWxmKGRhdGEsICJVbnN1cHBvcnRlZCBTU0wgcHJvdG9jb2wgdmVyc2lvbiIpOworICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICB9CiAKQEAgLTE5MjIsMTkgKzIwMDEsMTYgQEAKICAgfQogI2VuZGlmCiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0gfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF9UWVBFXSkgewotICAgIGlmKCFjZXJ0X3N0dWZmKGNvbm4sCi0gICAgICAgICAgICAgICAgICAgY29ubnNzbC0+Y3R4LAotICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRdLAotICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0NFUlRfVFlQRV0sCi0gICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZXSwKLSAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVlfVFlQRV0pKSB7CisgIGlmKHNzbF9jZXJ0IHx8IHNzbF9jZXJ0X3R5cGUpIHsKKyAgICBpZighY2VydF9zdHVmZihjb25uLCBjb25uc3NsLT5jdHgsIHNzbF9jZXJ0LCBzc2xfY2VydF90eXBlLAorICAgICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSksIFNTTF9TRVRfT1BUSU9OKGtleV90eXBlKSwKKyAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihrZXlfcGFzc3dkKSkpIHsKICAgICAgIC8qIGZhaWxmKCkgaXMgYWxyZWFkeSBkb25lIGluIGNlcnRfc3R1ZmYoKSAqLwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKICAgICB9CiAgIH0KIAotICBjaXBoZXJzID0gZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NJUEhFUl9MSVNUXTsKKyAgY2lwaGVycyA9IFNTTF9DT05OX0NPTkZJRyhjaXBoZXJfbGlzdCk7CiAgIGlmKCFjaXBoZXJzKQogICAgIGNpcGhlcnMgPSAoY2hhciAqKURFRkFVTFRfQ0lQSEVSX1NFTEVDVElPTjsKICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGNvbm5zc2wtPmN0eCwgY2lwaGVycykpIHsKQEAgLTE5NDQsMTggKzIwMjAsMjAgQEAKICAgaW5mb2YoZGF0YSwgIkNpcGhlciBzZWxlY3Rpb246ICVzXG4iLCBjaXBoZXJzKTsKIAogI2lmZGVmIFVTRV9UTFNfU1JQCi0gIGlmKGRhdGEtPnNldC5zc2wuYXV0aHR5cGUgPT0gQ1VSTF9UTFNBVVRIX1NSUCkgewotICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgZGF0YS0+c2V0LnNzbC51c2VybmFtZSk7CisgIGlmKHNzbF9hdXRodHlwZSA9PSBDVVJMX1RMU0FVVEhfU1JQKSB7CisgICAgY2hhciAqIGNvbnN0IHNzbF91c2VybmFtZSA9IFNTTF9TRVRfT1BUSU9OKHVzZXJuYW1lKTsKIAotICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWUoY29ubnNzbC0+Y3R4LCBkYXRhLT5zZXQuc3NsLnVzZXJuYW1lKSkgeworICAgIGluZm9mKGRhdGEsICJVc2luZyBUTFMtU1JQIHVzZXJuYW1lOiAlc1xuIiwgc3NsX3VzZXJuYW1lKTsKKworICAgIGlmKCFTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWUoY29ubnNzbC0+Y3R4LCBzc2xfdXNlcm5hbWUpKSB7CiAgICAgICBmYWlsZihkYXRhLCAiVW5hYmxlIHRvIHNldCBTUlAgdXNlciBuYW1lIik7CiAgICAgICByZXR1cm4gQ1VSTEVfQkFEX0ZVTkNUSU9OX0FSR1VNRU5UOwogICAgIH0KLSAgICBpZighU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkKGNvbm5zc2wtPmN0eCwgZGF0YS0+c2V0LnNzbC5wYXNzd29yZCkpIHsKKyAgICBpZighU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkKGNvbm5zc2wtPmN0eCwgU1NMX1NFVF9PUFRJT04ocGFzc3dvcmQpKSkgewogICAgICAgZmFpbGYoZGF0YSwgImZhaWxlZCBzZXR0aW5nIFNSUCBwYXNzd29yZCIpOwogICAgICAgcmV0dXJuIENVUkxFX0JBRF9GVU5DVElPTl9BUkdVTUVOVDsKICAgICB9Ci0gICAgaWYoIWRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DSVBIRVJfTElTVF0pIHsKKyAgICBpZighU1NMX0NPTk5fQ09ORklHKGNpcGhlcl9saXN0KSkgewogICAgICAgaW5mb2YoZGF0YSwgIlNldHRpbmcgY2lwaGVyIGxpc3QgU1JQXG4iKTsKIAogICAgICAgaWYoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGNvbm5zc2wtPmN0eCwgIlNSUCIpKSB7CkBAIC0xOTY1LDIwICsyMDQzLDE3IEBACiAgICAgfQogICB9CiAjZW5kaWYKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0gfHwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0pIHsKKworICBpZihzc2xfY2FmaWxlIHx8IHNzbF9jYXBhdGgpIHsKICAgICAvKiB0ZWxsIFNTTCB3aGVyZSB0byBmaW5kIENBIGNlcnRpZmljYXRlcyB0aGF0IGFyZSB1c2VkIHRvIHZlcmlmeQogICAgICAgIHRoZSBzZXJ2ZXJzIGNlcnRpZmljYXRlLiAqLwotICAgIGlmKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjb25uc3NsLT5jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdKSkgewotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGNvbm5zc2wtPmN0eCwgc3NsX2NhZmlsZSwgc3NsX2NhcGF0aCkpIHsKKyAgICAgIGlmKHZlcmlmeXBlZXIpIHsKICAgICAgICAgLyogRmFpbCBpZiB3ZSBpbnNpc3Qgb24gc3VjY2Vzc2Z1bGx5IHZlcmlmeWluZyB0aGUgc2VydmVyLiAqLwogICAgICAgICBmYWlsZihkYXRhLCAiZXJyb3Igc2V0dGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZnkgbG9jYXRpb25zOlxuIgogICAgICAgICAgICAgICAiICBDQWZpbGU6ICVzXG4gIENBcGF0aDogJXMiLAotICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXT8KLSAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV06ICJub25lIiwKLSAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0/Ci0gICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdIDogIm5vbmUiKTsKKyAgICAgICAgICAgICAgc3NsX2NhZmlsZSA/IHNzbF9jYWZpbGUgOiAibm9uZSIsCisgICAgICAgICAgICAgIHNzbF9jYXBhdGggPyBzc2xfY2FwYXRoIDogIm5vbmUiKTsKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICAgIH0KICAgICAgIGVsc2UgewpAQCAtMTk5NSwyOSArMjA3MCwyNSBAQAogICAgIGluZm9mKGRhdGEsCiAgICAgICAgICAgIiAgQ0FmaWxlOiAlc1xuIgogICAgICAgICAgICIgIENBcGF0aDogJXNcbiIsCi0gICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0gPyBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXToKLSAgICAgICAgICAibm9uZSIsCi0gICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBUEFUSF0gPyBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXToKLSAgICAgICAgICAibm9uZSIpOworICAgICAgICAgIHNzbF9jYWZpbGUgPyBzc2xfY2FmaWxlIDogIm5vbmUiLAorICAgICAgICAgIHNzbF9jYXBhdGggPyBzc2xfY2FwYXRoIDogIm5vbmUiKTsKICAgfQogI2lmZGVmIENVUkxfQ0FfRkFMTEJBQ0sKLSAgZWxzZSBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgZWxzZSBpZih2ZXJpZnlwZWVyKSB7CiAgICAgLyogdmVyZnlpbmcgdGhlIHBlZXIgd2l0aG91dCBhbnkgQ0EgY2VydGlmaWNhdGVzIHdvbid0CiAgICAgICAgd29yayBzbyB1c2Ugb3BlbnNzbCdzIGJ1aWx0IGluIGRlZmF1bHQgYXMgZmFsbGJhY2sgKi8KICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjb25uc3NsLT5jdHgpOwogICB9CiAjZW5kaWYKIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0pIHsKKyAgaWYoc3NsX2NybGZpbGUpIHsKICAgICAvKiB0ZWxsIFNTTCB3aGVyZSB0byBmaW5kIENSTCBmaWxlIHRoYXQgaXMgdXNlZCB0byBjaGVjayBjZXJ0aWZpY2F0ZQogICAgICAqIHJldm9jYXRpb24gKi8KICAgICBsb29rdXA9WDUwOV9TVE9SRV9hZGRfbG9va3VwKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY29ubnNzbC0+Y3R4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfTE9PS1VQX2ZpbGUoKSk7CiAgICAgaWYoIWxvb2t1cCB8fAotICAgICAgICghWDUwOV9sb2FkX2NybF9maWxlKGxvb2t1cCwgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKSkgKSB7Ci0gICAgICBmYWlsZihkYXRhLCAiZXJyb3IgbG9hZGluZyBDUkwgZmlsZTogJXMiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdKTsKKyAgICAgICAoIVg1MDlfbG9hZF9jcmxfZmlsZShsb29rdXAsIHNzbF9jcmxmaWxlLCBYNTA5X0ZJTEVUWVBFX1BFTSkpICkgeworICAgICAgZmFpbGYoZGF0YSwgImVycm9yIGxvYWRpbmcgQ1JMIGZpbGU6ICVzIiwgc3NsX2NybGZpbGUpOwogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DUkxfQkFERklMRTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMDI2LDkgKzIwOTcsNyBAQAogICAgICAgWDUwOV9TVE9SRV9zZXRfZmxhZ3MoU1NMX0NUWF9nZXRfY2VydF9zdG9yZShjb25uc3NsLT5jdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOwogICAgIH0KLSAgICBpbmZvZihkYXRhLAotICAgICAgICAgICIgIENSTGZpbGU6ICVzXG4iLCBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ1JMRklMRV0gPwotICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXTogIm5vbmUiKTsKKyAgICBpbmZvZihkYXRhLCAiICBDUkxmaWxlOiAlc1xuIiwgc3NsX2NybGZpbGUpOwogICB9CiAKICAgLyogVHJ5IGJ1aWxkaW5nIGEgY2hhaW4gdXNpbmcgaXNzdWVycyBpbiB0aGUgdHJ1c3RlZCBzdG9yZSBmaXJzdCB0byBhdm9pZApAQCAtMjAzOSw3ICsyMTA4LDcgQEAKICAgaHR0cHM6Ly9ydC5vcGVuc3NsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTM2MjEmdXNlcj1ndWVzdCZwYXNzPWd1ZXN0CiAgICovCiAjaWYgZGVmaW5lZChYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUKSAmJiAhZGVmaW5lZChYNTA5X1ZfRkxBR19OT19BTFRfQ0hBSU5TKQotICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgaWYodmVyaWZ5cGVlcikgewogICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoY29ubnNzbC0+Y3R4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUKTsKICAgfQpAQCAtMjA1MCw4ICsyMTE5LDcgQEAKICAgICogYW55d2F5LiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhlIHJlc3VsdCBvZiB0aGUgdmVyaWZpY2F0aW9uIGlzIGNoZWNrZWQgd2l0aAogICAgKiBTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoKSBiZWxvdy4gKi8KICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGNvbm5zc2wtPmN0eCwKLSAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcj9TU0xfVkVSSUZZX1BFRVI6U1NMX1ZFUklGWV9OT05FLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICB2ZXJpZnlwZWVyID8gU1NMX1ZFUklGWV9QRUVSIDogU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKIAogICAvKiBnaXZlIGFwcGxpY2F0aW9uIGEgY2hhbmNlIHRvIGludGVyZmVyZSB3aXRoIFNTTCBzZXQgdXAuICovCiAgIGlmKGRhdGEtPnNldC5zc2wuZnNzbGN0eCkgewpAQCAtMjA3NCwzMSArMjE0MiwzMCBAQAogCiAjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODA4ZkwpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiBcCiAgICAgIWRlZmluZWQoT1BFTlNTTF9OT19PQ1NQKQotICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXN0YXR1cykKKyAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXN0YXR1cykpCiAgICAgU1NMX3NldF90bHNleHRfc3RhdHVzX3R5cGUoY29ubnNzbC0+aGFuZGxlLCBUTFNFWFRfU1RBVFVTVFlQRV9vY3NwKTsKICNlbmRpZgogCiAgIFNTTF9zZXRfY29ubmVjdF9zdGF0ZShjb25uc3NsLT5oYW5kbGUpOwogCiAgIGNvbm5zc2wtPnNlcnZlcl9jZXJ0ID0gMHgwOwotCiAjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQotICBpZigoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKSkgJiYKKyAgaWYoKDAgPT0gQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgaG9zdG5hbWUsICZhZGRyKSkgJiYKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgICAoMCA9PSBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpICYmCisgICAgICgwID09IEN1cmxfaW5ldF9wdG9uKEFGX0lORVQ2LCBob3N0bmFtZSwgJmFkZHIpKSAmJgogI2VuZGlmCiAgICAgIHNuaSAmJgotICAgICAhU1NMX3NldF90bHNleHRfaG9zdF9uYW1lKGNvbm5zc2wtPmhhbmRsZSwgY29ubi0+aG9zdC5uYW1lKSkKKyAgICAgIVNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShjb25uc3NsLT5oYW5kbGUsIGhvc3RuYW1lKSkKICAgICBpbmZvZihkYXRhLCAiV0FSTklORzogZmFpbGVkIHRvIGNvbmZpZ3VyZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpICIKICAgICAgICAgICAiVExTIGV4dGVuc2lvblxuIik7CiAjZW5kaWYKIAogICAvKiBDaGVjayBpZiB0aGVyZSdzIGEgY2FjaGVkIElEIHdlIGNhbi9zaG91bGQgdXNlIGhlcmUhICovCi0gIGlmKGNvbm4tPnNzbF9jb25maWcuc2Vzc2lvbmlkKSB7CisgIGlmKGRhdGEtPnNldC5nZW5lcmFsX3NzbC5zZXNzaW9uaWQpIHsKICAgICB2b2lkICpzc2xfc2Vzc2lvbmlkID0gTlVMTDsKIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJnNzbF9zZXNzaW9uaWQsIE5VTEwpKSB7CisgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmc3NsX3Nlc3Npb25pZCwgTlVMTCwgc29ja2luZGV4KSkgewogICAgICAgLyogd2UgZ290IGEgc2Vzc2lvbiBpZCwgdXNlIGl0ISAqLwogICAgICAgaWYoIVNTTF9zZXRfc2Vzc2lvbihjb25uc3NsLT5oYW5kbGUsIHNzbF9zZXNzaW9uaWQpKSB7CiAgICAgICAgIEN1cmxfc3NsX3Nlc3Npb25pZF91bmxvY2soY29ubik7CkBAIC0yMTEyLDggKzIxNzksMTYgQEAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICB9CiAKLSAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXJzICovCi0gIGlmKCFTU0xfc2V0X2ZkKGNvbm5zc2wtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgIGlmKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLnVzZSkgeworICAgIEJJTyAqY29uc3QgYmlvID0gQklPX25ldyhCSU9fZl9zc2woKSk7CisgICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgPT0gY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0uc3RhdGUpOworICAgIERFQlVHQVNTRVJUKGNvbm4tPnByb3h5X3NzbFtzb2NraW5kZXhdLmhhbmRsZSAhPSBOVUxMKTsKKyAgICBERUJVR0FTU0VSVChiaW8gIT0gTlVMTCk7CisgICAgQklPX3NldF9zc2woYmlvLCBjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS5oYW5kbGUsIEZBTFNFKTsKKyAgICBTU0xfc2V0X2Jpbyhjb25uc3NsLT5oYW5kbGUsIGJpbywgYmlvKTsKKyAgfQorICBlbHNlIGlmKCFTU0xfc2V0X2ZkKGNvbm5zc2wtPmhhbmRsZSwgKGludClzb2NrZmQpKSB7CisgICAgLyogcGFzcyB0aGUgcmF3IHNvY2tldCBpbnRvIHRoZSBTU0wgbGF5ZXJzICovCiAgICAgZmFpbGYoZGF0YSwgIlNTTDogU1NMX3NldF9mZCBmYWlsZWQ6ICVzIiwKICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTIxMjksOSArMjIwNCwxMSBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgaW50IGVycjsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGxvbmcgKiBjb25zdCBjZXJ0dmVyaWZ5cmVzdWx0ID0gU1NMX0lTX1BST1hZKCkgPworICAgICZkYXRhLT5zZXQucHJveHlfc3NsLmNlcnR2ZXJpZnlyZXN1bHQgOiAmZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0OwogICBERUJVR0FTU0VSVChzc2xfY29ubmVjdF8yID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUKLSAgICAgICAgICAgICB8fCBzc2xfY29ubmVjdF8yX3JlYWRpbmcgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZQotICAgICAgICAgICAgIHx8IHNzbF9jb25uZWN0XzJfd3JpdGluZyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKKyAgICAgICAgICAgICAgfHwgc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUKKyAgICAgICAgICAgICAgfHwgc3NsX2Nvbm5lY3RfMl93cml0aW5nID09IGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUpOwogCiAgIEVSUl9jbGVhcl9lcnJvcigpOwogCkBAIC0yMTc4LDYgKzIyNTUsNyBAQAogCiAgICAgICAgIGxlcnIgPSBTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoY29ubnNzbC0+aGFuZGxlKTsKICAgICAgICAgaWYobGVyciAhPSBYNTA5X1ZfT0spIHsKKyAgICAgICAgICAqY2VydHZlcmlmeXJlc3VsdCA9IGxlcnI7CiAgICAgICAgICAgc25wcmludGYoZXJyb3JfYnVmZmVyLCBzaXplb2YoZXJyb3JfYnVmZmVyKSwKICAgICAgICAgICAgICAgICAgICAiU1NMIGNlcnRpZmljYXRlIHByb2JsZW06ICVzIiwKICAgICAgICAgICAgICAgICAgICBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhsZXJyKSk7CkBAIC0yMTk5LDggKzIyNzcsMTEgQEAKICAgICAgICAqIHRoZSBTT19FUlJPUiBpcyBhbHNvIGxvc3QuCiAgICAgICAgKi8KICAgICAgIGlmKENVUkxFX1NTTF9DT05ORUNUX0VSUk9SID09IHJlc3VsdCAmJiBlcnJkZXRhaWwgPT0gMCkgeworICAgICAgICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CisgICAgICAgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOiBjb25uLT5ob3N0Lm5hbWU7CisgICAgICAgIGNvbnN0IGxvbmcgaW50IHBvcnQgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPnBvcnQgOiBjb25uLT5yZW1vdGVfcG9ydDsKICAgICAgICAgZmFpbGYoZGF0YSwgIlVua25vd24gU1NMIHByb3RvY29sIGVycm9yIGluIGNvbm5lY3Rpb24gdG8gJXM6JWxkICIsCi0gICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworICAgICAgICAgICAgICBob3N0bmFtZSwgcG9ydCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9CiAKQEAgLTIyMjQsNyArMjMwNSw3IEBACiAgICAgICogbmVnb3RpYXRlZAogICAgICAqLwogICAgIGlmKGNvbm4tPmJpdHMudGxzX2VuYWJsZV9hbHBuKSB7Ci0gICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuZWdfcHJvdG9jb2w7CisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZWdfcHJvdG9jb2w7CiAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChjb25uc3NsLT5oYW5kbGUsICZuZWdfcHJvdG9jb2wsICZsZW4pOwogICAgICAgaWYobGVuICE9IDApIHsKQEAgLTIzMDksNyArMjM5MCw3IEBACiAKIHN0YXRpYyBpbnQgWDUwOVYzX2V4dChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgIGludCBjZXJ0bnVtLAotICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0cykKKyAgICAgICAgICAgICAgICAgICAgICBDT05TVF9FWFRTIFNUQUNLX09GKFg1MDlfRVhURU5TSU9OKSAqZXh0cykKIHsKICAgaW50IGk7CiAgIHNpemVfdCBqOwpAQCAtMjM5MSw3ICsyNDcyLDcgQEAKICAgICBFVlBfUEtFWSAqcHVia2V5PU5VTEw7CiAgICAgaW50IGo7CiAgICAgY2hhciAqcHRyOwotICAgIEFTTjFfQklUX1NUUklORyAqcHNpZyA9IE5VTEw7CisgICAgQ09OU1RfQVNOMV9CSVRfU1RSSU5HIEFTTjFfQklUX1NUUklORyAqcHNpZyA9IE5VTEw7CiAKICAgICBYNTA5X05BTUVfcHJpbnRfZXgobWVtLCBYNTA5X2dldF9zdWJqZWN0X25hbWUoeCksIDAsIFhOX0ZMQUdfT05FTElORSk7CiAgICAgcHVzaF9jZXJ0aW5mbygiU3ViamVjdCIsIGkpOwpAQCAtMjQxMSw3ICsyNDkyLDcgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9YNTA5X0dFVDBfU0lHTkFUVVJFKSAmJiBkZWZpbmVkKEhBVkVfWDUwOV9HRVQwX0VYVEVOU0lPTlMpCiAgICAgewotICAgICAgWDUwOV9BTEdPUiAqcGFsZyA9IE5VTEw7CisgICAgICBjb25zdCBYNTA5X0FMR09SICpwYWxnID0gTlVMTDsKICAgICAgIEFTTjFfU1RSSU5HICphID0gQVNOMV9TVFJJTkdfbmV3KCk7CiAgICAgICBpZihhKSB7CiAgICAgICAgIFg1MDlfZ2V0MF9zaWduYXR1cmUoJnBzaWcsICZwYWxnLCB4KTsKQEAgLTI0NDIsMTAgKzI1MjMsMTAgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0X25vdEJlZm9yZSh4KSk7CisgICAgQVNOMV9USU1FX3ByaW50KG1lbSwgWDUwOV9nZXQwX25vdEJlZm9yZSh4KSk7CiAgICAgcHVzaF9jZXJ0aW5mbygiU3RhcnQgZGF0ZSIsIGkpOwogCi0gICAgQVNOMV9USU1FX3ByaW50KG1lbSwgWDUwOV9nZXRfbm90QWZ0ZXIoeCkpOworICAgIEFTTjFfVElNRV9wcmludChtZW0sIFg1MDlfZ2V0MF9ub3RBZnRlcih4KSk7CiAgICAgcHVzaF9jZXJ0aW5mbygiRXhwaXJlIGRhdGUiLCBpKTsKIAogICAgIHB1YmtleSA9IFg1MDlfZ2V0X3B1YmtleSh4KTsKQEAgLTI2MjksNyArMjcxMCw3IEBACiAgICAgICBicmVhazsgLyogZmFpbGVkICovCiAKICAgICAvKiBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9idWZmZXIuaHRtbCAqLwotICAgIGJ1ZmYxID0gdGVtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbjEpOworICAgIGJ1ZmYxID0gdGVtcCA9IG1hbGxvYyhsZW4xKTsKICAgICBpZighYnVmZjEpCiAgICAgICBicmVhazsgLyogZmFpbGVkICovCiAKQEAgLTI2NTIsNyArMjczMyw3IEBACiAKICAgLyogaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9jcnlwdG8vYnVmZmVyLmh0bWwgKi8KICAgaWYoYnVmZjEpCi0gICAgT1BFTlNTTF9mcmVlKGJ1ZmYxKTsKKyAgICBmcmVlKGJ1ZmYxKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjY3Nyw2ICsyNzU4LDggQEAKICAgRklMRSAqZnA7CiAgIGNoYXIgKmJ1ZmZlciA9IGRhdGEtPnN0YXRlLmJ1ZmZlcjsKICAgY29uc3QgY2hhciAqcHRyOworICBsb25nICogY29uc3QgY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9JU19QUk9YWSgpID8KKyAgICAmZGF0YS0+c2V0LnByb3h5X3NzbC5jZXJ0dmVyaWZ5cmVzdWx0IDogJmRhdGEtPnNldC5zc2wuY2VydHZlcmlmeXJlc3VsdDsKICAgQklPICptZW0gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKIAogICBpZihkYXRhLT5zZXQuc3NsLmNlcnRpbmZvKQpAQCAtMjY5MiwyNSArMjc3NSwyNSBAQAogICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047CiAgIH0KIAotICBpbmZvZihkYXRhLCAiU2VydmVyIGNlcnRpZmljYXRlOlxuIik7CisgIGluZm9mKGRhdGEsICIlcyBjZXJ0aWZpY2F0ZTpcbiIsIFNTTF9JU19QUk9YWSgpID8gIlByb3h5IiA6ICJTZXJ2ZXIiKTsKIAogICByYyA9IHg1MDlfbmFtZV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjb25uc3NsLT5zZXJ2ZXJfY2VydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBCVUZTSVpFKTsKICAgaW5mb2YoZGF0YSwgIiBzdWJqZWN0OiAlc1xuIiwgcmM/IltOT05FXSI6YnVmZmVyKTsKIAotICBBU04xX1RJTUVfcHJpbnQobWVtLCBYNTA5X2dldF9ub3RCZWZvcmUoY29ubnNzbC0+c2VydmVyX2NlcnQpKTsKKyAgQVNOMV9USU1FX3ByaW50KG1lbSwgWDUwOV9nZXQwX25vdEJlZm9yZShjb25uc3NsLT5zZXJ2ZXJfY2VydCkpOwogICBsZW4gPSBCSU9fZ2V0X21lbV9kYXRhKG1lbSwgKGNoYXIgKiopICZwdHIpOwogICBpbmZvZihkYXRhLCAiIHN0YXJ0IGRhdGU6ICUuKnNcbiIsIGxlbiwgcHRyKTsKICAgcmMgPSBCSU9fcmVzZXQobWVtKTsKIAotICBBU04xX1RJTUVfcHJpbnQobWVtLCBYNTA5X2dldF9ub3RBZnRlcihjb25uc3NsLT5zZXJ2ZXJfY2VydCkpOworICBBU04xX1RJTUVfcHJpbnQobWVtLCBYNTA5X2dldDBfbm90QWZ0ZXIoY29ubnNzbC0+c2VydmVyX2NlcnQpKTsKICAgbGVuID0gQklPX2dldF9tZW1fZGF0YShtZW0sIChjaGFyICoqKSAmcHRyKTsKICAgaW5mb2YoZGF0YSwgIiBleHBpcmUgZGF0ZTogJS4qc1xuIiwgbGVuLCBwdHIpOwogICByYyA9IEJJT19yZXNldChtZW0pOwogCiAgIEJJT19mcmVlKG1lbSk7CiAKLSAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkgewogICAgIHJlc3VsdCA9IHZlcmlmeWhvc3QoY29ubiwgY29ubnNzbC0+c2VydmVyX2NlcnQpOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgWDUwOV9mcmVlKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KTsKQEAgLTI3MzMsMTIgKzI4MTYsMTIgQEAKICAgICAgICBkZWFsbG9jYXRpbmcgdGhlIGNlcnRpZmljYXRlLiAqLwogCiAgICAgLyogZS5nLiBtYXRjaCBpc3N1ZXIgbmFtZSB3aXRoIHByb3ZpZGVkIGlzc3VlciBjZXJ0aWZpY2F0ZSAqLwotICAgIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSkgewotICAgICAgZnAgPSBmb3BlbihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0sIEZPUEVOX1JFQURURVhUKTsKKyAgICBpZihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSkgeworICAgICAgZnAgPSBmb3BlbihTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSwgRk9QRU5fUkVBRFRFWFQpOwogICAgICAgaWYoIWZwKSB7CiAgICAgICAgIGlmKHN0cmljdCkKICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBVbmFibGUgdG8gb3BlbiBpc3N1ZXIgY2VydCAoJXMpIiwKLSAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pOworICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKICAgICAgICAgWDUwOV9mcmVlKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KTsKICAgICAgICAgY29ubnNzbC0+c2VydmVyX2NlcnQgPSBOVUxMOwogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0lTU1VFUl9FUlJPUjsKQEAgLTI3NDgsNyArMjgzMSw3IEBACiAgICAgICBpZighaXNzdWVyKSB7CiAgICAgICAgIGlmKHN0cmljdCkKICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBVbmFibGUgdG8gcmVhZCBpc3N1ZXIgY2VydCAoJXMpIiwKLSAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfSVNTVUVSQ0VSVF0pOworICAgICAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGlzc3VlcmNlcnQpKTsKICAgICAgICAgWDUwOV9mcmVlKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KTsKICAgICAgICAgWDUwOV9mcmVlKGlzc3Vlcik7CiAgICAgICAgIGZjbG9zZShmcCk7CkBAIC0yNzYwLDcgKzI4NDMsNyBAQAogICAgICAgaWYoWDUwOV9jaGVja19pc3N1ZWQoaXNzdWVyLCBjb25uc3NsLT5zZXJ2ZXJfY2VydCkgIT0gWDUwOV9WX09LKSB7CiAgICAgICAgIGlmKHN0cmljdCkKICAgICAgICAgICBmYWlsZihkYXRhLCAiU1NMOiBDZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgZmFpbGVkICglcykiLAotICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSk7CisgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oaXNzdWVyY2VydCkpOwogICAgICAgICBYNTA5X2ZyZWUoY29ubnNzbC0+c2VydmVyX2NlcnQpOwogICAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKICAgICAgICAgY29ubnNzbC0+c2VydmVyX2NlcnQgPSBOVUxMOwpAQCAtMjc2OCwxNSArMjg1MSwxNCBAQAogICAgICAgfQogCiAgICAgICBpbmZvZihkYXRhLCAiIFNTTCBjZXJ0aWZpY2F0ZSBpc3N1ZXIgY2hlY2sgb2sgKCVzKVxuIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9JU1NVRVJDRVJUXSk7CisgICAgICAgICAgICBTU0xfU0VUX09QVElPTihpc3N1ZXJjZXJ0KSk7CiAgICAgICBYNTA5X2ZyZWUoaXNzdWVyKTsKICAgICB9CiAKLSAgICBsZXJyID0gZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ID0KLSAgICAgIFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdChjb25uc3NsLT5oYW5kbGUpOworICAgIGxlcnIgPSAqY2VydHZlcmlmeXJlc3VsdCA9IFNTTF9nZXRfdmVyaWZ5X3Jlc3VsdChjb25uc3NsLT5oYW5kbGUpOwogCi0gICAgaWYoZGF0YS0+c2V0LnNzbC5jZXJ0dmVyaWZ5cmVzdWx0ICE9IFg1MDlfVl9PSykgewotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKSB7CisgICAgaWYoKmNlcnR2ZXJpZnlyZXN1bHQgIT0gWDUwOV9WX09LKSB7CisgICAgICBpZihTU0xfQ09OTl9DT05GSUcodmVyaWZ5cGVlcikpIHsKICAgICAgICAgLyogV2UgcHJvYmFibHkgbmV2ZXIgcmVhY2ggdGhpcywgYmVjYXVzZSBTU0xfY29ubmVjdCgpIHdpbGwgZmFpbAogICAgICAgICAgICBhbmQgd2UgcmV0dXJuIGVhcmxpZXIgaWYgdmVyaWZ5cGVlciBpcyBzZXQ/ICovCiAgICAgICAgIGlmKHN0cmljdCkKQEAgLTI3OTUsNyArMjg3Nyw3IEBACiAKICNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MDhmTCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmIFwKICAgICAhZGVmaW5lZChPUEVOU1NMX05PX09DU1ApCi0gIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5c3RhdHVzKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlzdGF0dXMpKSB7CiAgICAgcmVzdWx0ID0gdmVyaWZ5c3RhdHVzKGNvbm4sIGNvbm5zc2wpOwogICAgIGlmKHJlc3VsdCkgewogICAgICAgWDUwOV9mcmVlKGNvbm5zc2wtPnNlcnZlcl9jZXJ0KTsKQEAgLTI4MzEsNyArMjkxMyw3IEBACiAKICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKIAotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgYm9vbCBpbmNhY2hlOwogICAgIFNTTF9TRVNTSU9OICpvdXJfc3NsX3Nlc3Npb25pZDsKICAgICB2b2lkICpvbGRfc3NsX3Nlc3Npb25pZCA9IE5VTEw7CkBAIC0yODQzLDcgKzI5MjUsOCBAQAogICAgICAgICByZWdhcmRsZXNzIG9mIGl0cyBzdGF0ZS4gKi8KIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGluY2FjaGUgPSAhKEN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwpKTsKKyAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zc2xfc2Vzc2lvbmlkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NraW5kZXgpKTsKICAgICBpZihpbmNhY2hlKSB7CiAgICAgICBpZihvbGRfc3NsX3Nlc3Npb25pZCAhPSBvdXJfc3NsX3Nlc3Npb25pZCkgewogICAgICAgICBpbmZvZihkYXRhLCAib2xkIFNTTCBzZXNzaW9uIElEIGlzIHN0YWxlLCByZW1vdmluZ1xuIik7CkBAIC0yODU0LDcgKzI5MzcsNyBAQAogCiAgICAgaWYoIWluY2FjaGUpIHsKICAgICAgIHJlc3VsdCA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiB1bmtub3duIHNpemUgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHVua25vd24gc2l6ZSAqLywgc29ja2luZGV4KTsKICAgICAgIGlmKHJlc3VsdCkgewogICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAiZmFpbGVkIHRvIHN0b3JlIHNzbCBzZXNzaW9uIik7CkBAIC0yODc4LDggKzI5NjEsOCBAQAogICAgKiBvcGVyYXRpb25zLgogICAgKi8KIAotICByZXN1bHQgPSBzZXJ2ZXJjZXJ0KGNvbm4sIGNvbm5zc2wsCi0gICAgICAgICAgICAgICAgICAgICAgKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlciB8fCBkYXRhLT5zZXQuc3NsLnZlcmlmeWhvc3QpKTsKKyAgcmVzdWx0ID0gc2VydmVyY2VydChjb25uLCBjb25uc3NsLCAoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlob3N0KSkpOwogCiAgIGlmKCFyZXN1bHQpCiAgICAgY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSA9IHNzbF9jb25uZWN0X2RvbmU7CkBAIC0yODk5LDcgKzI5ODIsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICBsb25nIHRpbWVvdXRfbXM7CisgIHRpbWVfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC0yOTQ1LDcgKzMwMjgsOCBAQAogICAgICAgY3VybF9zb2NrZXRfdCByZWFkZmQgPSBzc2xfY29ubmVjdF8yX3JlYWRpbmc9PQogICAgICAgICBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlP3NvY2tmZDpDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsIG5vbmJsb2NraW5nPzA6dGltZW91dF9tcyk7CisgICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfY2hlY2socmVhZGZkLCBDVVJMX1NPQ0tFVF9CQUQsIHdyaXRlZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtMzAyNiw3ICszMTEwLDEwIEBACiB7CiAgIGlmKGNvbm4tPnNzbFtjb25uaW5kZXhdLmhhbmRsZSkKICAgICAvKiBTU0wgaXMgaW4gdXNlICovCi0gICAgcmV0dXJuICgwICE9IFNTTF9wZW5kaW5nKGNvbm4tPnNzbFtjb25uaW5kZXhdLmhhbmRsZSkpID8gVFJVRSA6IEZBTFNFOworICAgIHJldHVybiAoMCAhPSBTU0xfcGVuZGluZyhjb25uLT5zc2xbY29ubmluZGV4XS5oYW5kbGUpIHx8CisgICAgICAgICAgIChjb25uLT5wcm94eV9zc2xbY29ubmluZGV4XS5oYW5kbGUgJiYKKyAgICAgICAgICAgIDAgIT0gU1NMX3BlbmRpbmcoY29ubi0+cHJveHlfc3NsW2Nvbm5pbmRleF0uaGFuZGxlKSkpID8KKyAgICAgICAgICAgVFJVRSA6IEZBTFNFOwogICBlbHNlCiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtMzA3MSw4ICszMTU4LDE4IEBACiAgICAgICAvKiAgQSBmYWlsdXJlIGluIHRoZSBTU0wgbGlicmFyeSBvY2N1cnJlZCwgdXN1YWxseSBhIHByb3RvY29sIGVycm9yLgogICAgICAgICAgIFRoZSBPcGVuU1NMIGVycm9yIHF1ZXVlIGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGVycm9yLiAqLwogICAgICAgc3NsZXJyb3IgPSBFUlJfZ2V0X2Vycm9yKCk7Ci0gICAgICBmYWlsZihjb25uLT5kYXRhLCAiU1NMX3dyaXRlKCkgZXJyb3I6ICVzIiwKLSAgICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpKTsKKyAgICAgIGlmKEVSUl9HRVRfTElCKHNzbGVycm9yKSA9PSBFUlJfTElCX1NTTCAmJgorICAgICAgICAgRVJSX0dFVF9SRUFTT04oc3NsZXJyb3IpID09IFNTTF9SX0JJT19OT1RfU0VUICYmCisgICAgICAgICBjb25uLT5zc2xbc29ja2luZGV4XS5zdGF0ZSA9PSBzc2xfY29ubmVjdGlvbl9jb21wbGV0ZSAmJgorICAgICAgICAgY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0uc3RhdGUgPT0gc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUpIHsKKyAgICAgICAgY2hhciB2ZXJbMTIwXTsKKyAgICAgICAgQ3VybF9vc3NsX3ZlcnNpb24odmVyLCAxMjApOworICAgICAgICBmYWlsZihjb25uLT5kYXRhLCAiRXJyb3I6ICVzIGRvZXMgbm90IHN1cHBvcnQgZG91YmxlIFNTTCB0dW5uZWxpbmcuIiwKKyAgICAgICAgICAgICAgdmVyKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZmFpbGYoY29ubi0+ZGF0YSwgIlNTTF93cml0ZSgpIGVycm9yOiAlcyIsCisgICAgICAgICAgICAgIG9zc2xfc3RyZXJyb3Ioc3NsZXJyb3IsIGVycm9yX2J1ZmZlciwgc2l6ZW9mKGVycm9yX2J1ZmZlcikpKTsKICAgICAgICpjdXJsY29kZSA9IENVUkxFX1NFTkRfRVJST1I7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMzE0Miw3ICszMjM5LDcgQEAKICAgdW5zaWduZWQgbG9uZyBzc2xlYXlfdmFsdWU7CiAgIHN1YlsyXT0nXDAnOwogICBzdWJbMV09J1wwJzsKLSAgc3NsZWF5X3ZhbHVlPVNTTGVheSgpOworICBzc2xlYXlfdmFsdWU9T3BlblNTTF92ZXJzaW9uX251bSgpOwogICBpZihzc2xlYXlfdmFsdWUgPCAweDkwNjAwMCkgewogICAgIHNzbGVheV92YWx1ZT1TU0xFQVlfVkVSU0lPTl9OVU1CRVI7CiAgICAgc3ViWzBdPSdcMCc7CkBAIC0zMTc3LDcgKzMyNzQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpCiB7CiAgIGlmKGRhdGEpIHsKLSAgICBDdXJsX29zc2xfc2VlZChkYXRhKTsgLyogSW5pdGlhdGUgdGhlIHNlZWQgaWYgbm90IGFscmVhZHkgZG9uZSAqLworICAgIGlmKEN1cmxfb3NzbF9zZWVkKGRhdGEpKSAvKiBJbml0aWF0ZSB0aGUgc2VlZCBpZiBub3QgYWxyZWFkeSBkb25lICovCisgICAgICByZXR1cm4gMTsgLyogY291bGRuJ3Qgc2VlZCBmb3Igc29tZSByZWFzb24gKi8KKyAgfQorICBlbHNlIHsKKyAgICBpZighcmFuZF9lbm91Z2goKSkKKyAgICAgIHJldHVybiAxOwogICB9CiAgIFJBTkRfYnl0ZXMoZW50cm9weSwgY3VybHhfdXp0b3NpKGxlbmd0aCkpOwogICByZXR1cm4gMDsgLyogMCBhcyBpbiBubyBwcm9ibGVtICovCmRpZmYgLS1naXQgYS9saWIvdnRscy9wb2xhcnNzbC5jIGIvbGliL3Z0bHMvcG9sYXJzc2wuYwppbmRleCBkMzNmNTQ4Li5mMmY5NzNjIDEwMDY0NAotLS0gYS9saWIvdnRscy9wb2xhcnNzbC5jCisrKyBiL2xpYi92dGxzL3BvbGFyc3NsLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlICJwYXJzZWRhdGUuaCIKICNpbmNsdWRlICJjb25uZWN0LmgiIC8qIGZvciB0aGUgY29ubmVjdCB0aW1lb3V0ICovCiAjaW5jbHVkZSAic2VsZWN0LmgiCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogI2luY2x1ZGUgInBvbGFyc3NsX3RocmVhZGxvY2suaCIKICNpbmNsdWRlICJjdXJsX3ByaW50Zi5oIgogI2luY2x1ZGUgImN1cmxfbWVtb3J5LmgiCkBAIC03NSw2ICs3NSwxMSBAQAogI2RlZmluZSBUSFJFQURJTkdfU1VQUE9SVAogI2VuZGlmCiAKKyNpZm5kZWYgUE9MQVJTU0xfRVJST1JfQworI2RlZmluZSBlcnJvcl9zdHJlcnJvcih4LHkseikKKyNlbmRpZiAvKiBQT0xBUlNTTF9FUlJPUl9DICovCisKKwogI2lmIGRlZmluZWQoVEhSRUFESU5HX1NVUFBPUlQpCiBzdGF0aWMgZW50cm9weV9jb250ZXh0IGVudHJvcHk7CiAKQEAgLTk2LDEzICsxMDEsMTMgQEAKIC8qIHN0YXJ0IG9mIGVudHJvcHlfZnVuY19tdXRleCgpICovCiBzdGF0aWMgaW50IGVudHJvcHlfZnVuY19tdXRleCh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHNpemVfdCBsZW4pCiB7Ci0gICAgaW50IHJldDsKLSAgICAvKiBsb2NrIDEgPSBlbnRyb3B5X2Z1bmNfbXV0ZXgoKSAqLwotICAgIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMSk7Ci0gICAgcmV0ID0gZW50cm9weV9mdW5jKGRhdGEsIG91dHB1dCwgbGVuKTsKLSAgICBDdXJsX3BvbGFyc3NsdGhyZWFkbG9ja191bmxvY2tfZnVuY3Rpb24oMSk7CisgIGludCByZXQ7CisgIC8qIGxvY2sgMSA9IGVudHJvcHlfZnVuY19tdXRleCgpICovCisgIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX2xvY2tfZnVuY3Rpb24oMSk7CisgIHJldCA9IGVudHJvcHlfZnVuYyhkYXRhLCBvdXRwdXQsIGxlbik7CisgIEN1cmxfcG9sYXJzc2x0aHJlYWRsb2NrX3VubG9ja19mdW5jdGlvbigxKTsKIAotICAgIHJldHVybiByZXQ7CisgIHJldHVybiByZXQ7CiB9CiAvKiBlbmQgb2YgZW50cm9weV9mdW5jX211dGV4KCkgKi8KIApAQCAtMTM4LDg0ICsxNDMsNzAgQEAKIAogc3RhdGljIENVUkxjb2RlCiBwb2xhcnNzbF9jb25uZWN0X3N0ZXAxKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCiB7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwogICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSogY29ubnNzbCA9ICZjb25uLT5zc2xbc29ja2luZGV4XTsKLQotICBib29sIHNuaSA9IFRSVUU7IC8qIGRlZmF1bHQgaXMgU05JIGVuYWJsZWQgKi8KKyAgY29uc3QgY2hhciAqY2FwYXRoID0gU1NMX0NPTk5fQ09ORklHKENBcGF0aCk7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKKyAgY29uc3QgbG9uZyBpbnQgcG9ydCA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+cG9ydCA6IGNvbm4tPnJlbW90ZV9wb3J0OwogICBpbnQgcmV0ID0gLTE7Ci0jaWZkZWYgRU5BQkxFX0lQVjYKLSAgc3RydWN0IGluNl9hZGRyIGFkZHI7Ci0jZWxzZQotICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwotI2VuZGlmCiAgIGNoYXIgZXJyb3JidWZbMTI4XTsKICAgZXJyb3JidWZbMF09MDsKIAogICAvKiBQb2xhclNTTCBvbmx5IHN1cHBvcnRzIFNTTHYzIGFuZCBUTFN2MSAqLwotICBpZihkYXRhLT5zZXQuc3NsLnZlcnNpb24gPT0gQ1VSTF9TU0xWRVJTSU9OX1NTTHYyKSB7CisgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJzaW9uKSA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjIpIHsKICAgICBmYWlsZihkYXRhLCAiUG9sYXJTU0wgZG9lcyBub3Qgc3VwcG9ydCBTU0x2MiIpOwogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgfQotICBlbHNlIGlmKGRhdGEtPnNldC5zc2wudmVyc2lvbiA9PSBDVVJMX1NTTFZFUlNJT05fU1NMdjMpCi0gICAgc25pID0gRkFMU0U7IC8qIFNTTHYzIGhhcyBubyBTTkkgKi8KIAogI2lmZGVmIFRIUkVBRElOR19TVVBQT1JUCiAgIGVudHJvcHlfaW5pdF9tdXRleCgmZW50cm9weSk7CiAKICAgaWYoKHJldCA9IGN0cl9kcmJnX2luaXQoJmNvbm5zc2wtPmN0cl9kcmJnLCBlbnRyb3B5X2Z1bmNfbXV0ZXgsICZlbnRyb3B5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKSkgIT0gMCkgewotI2lmZGVmIFBPTEFSU1NMX0VSUk9SX0MKLSAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0jZW5kaWYgLyogUE9MQVJTU0xfRVJST1JfQyAqLwotICAgICBmYWlsZihkYXRhLCAiRmFpbGVkIC0gUG9sYXJTU0w6IGN0cl9kcmJnX2luaXQgcmV0dXJuZWQgKC0weCUwNFgpICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJldCwgZXJyb3JidWYpOworICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOworICAgIGZhaWxmKGRhdGEsICJGYWlsZWQgLSBQb2xhclNTTDogY3RyX2RyYmdfaW5pdCByZXR1cm5lZCAoLTB4JTA0WCkgJXNcbiIsCisgICAgICAgICAgLXJldCwgZXJyb3JidWYpOwogICB9CiAjZWxzZQogICBlbnRyb3B5X2luaXQoJmNvbm5zc2wtPmVudHJvcHkpOwogCiAgIGlmKChyZXQgPSBjdHJfZHJiZ19pbml0KCZjb25uc3NsLT5jdHJfZHJiZywgZW50cm9weV9mdW5jLCAmY29ubnNzbC0+ZW50cm9weSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCkpICE9IDApIHsKLSNpZmRlZiBQT0xBUlNTTF9FUlJPUl9DCi0gICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotI2VuZGlmIC8qIFBPTEFSU1NMX0VSUk9SX0MgKi8KLSAgICAgZmFpbGYoZGF0YSwgIkZhaWxlZCAtIFBvbGFyU1NMOiBjdHJfZHJiZ19pbml0IHJldHVybmVkICgtMHglMDRYKSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKKyAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKKyAgICBmYWlsZihkYXRhLCAiRmFpbGVkIC0gUG9sYXJTU0w6IGN0cl9kcmJnX2luaXQgcmV0dXJuZWQgKC0weCUwNFgpICVzXG4iLAorICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKICAgfQogI2VuZGlmIC8qIFRIUkVBRElOR19TVVBQT1JUICovCiAKICAgLyogTG9hZCB0aGUgdHJ1c3RlZCBDQSAqLwogICBtZW1zZXQoJmNvbm5zc2wtPmNhY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0pIHsKKyAgaWYoU1NMX0NPTk5fQ09ORklHKENBZmlsZSkpIHsKICAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZjb25uc3NsLT5jYWNlcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FGSUxFXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQ09OTl9DT05GSUcoQ0FmaWxlKSk7CiAKICAgICBpZihyZXQ8MCkgewotI2lmZGVmIFBPTEFSU1NMX0VSUk9SX0MKICAgICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotI2VuZGlmIC8qIFBPTEFSU1NMX0VSUk9SX0MgKi8KICAgICAgIGZhaWxmKGRhdGEsICJFcnJvciByZWFkaW5nIGNhIGNlcnQgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NBRklMRV0sIC1yZXQsIGVycm9yYnVmKTsKKyAgICAgICAgICAgIFNTTF9DT05OX0NPTkZJRyhDQWZpbGUpLCAtcmV0LCBlcnJvcmJ1Zik7CiAKLSAgICAgIGlmKGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikKKyAgICAgIGlmKFNTTF9DT05OX0NPTkZJRyh2ZXJpZnlwZWVyKSkKICAgICAgICAgcmV0dXJuIENVUkxFX1NTTF9DQUNFUlRfQkFERklMRTsKICAgICB9CiAgIH0KIAotICBpZihkYXRhLT5zZXQuc3RyW1NUUklOR19TU0xfQ0FQQVRIXSkgewotICAgIHJldCA9IHg1MDlfY3J0X3BhcnNlX3BhdGgoJmNvbm5zc2wtPmNhY2VydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdKTsKKyAgaWYoY2FwYXRoKSB7CisgICAgcmV0ID0geDUwOV9jcnRfcGFyc2VfcGF0aCgmY29ubnNzbC0+Y2FjZXJ0LCBjYXBhdGgpOwogCiAgICAgaWYocmV0PDApIHsKLSNpZmRlZiBQT0xBUlNTTF9FUlJPUl9DCiAgICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSNlbmRpZiAvKiBQT0xBUlNTTF9FUlJPUl9DICovCiAgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBjYSBjZXJ0IHBhdGggJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DQVBBVEhdLCAtcmV0LCBlcnJvcmJ1Zik7CisgICAgICAgICAgICBjYXBhdGgsIC1yZXQsIGVycm9yYnVmKTsKIAotICAgICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlwZWVyKQorICAgICAgaWYoU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKQogICAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NBQ0VSVF9CQURGSUxFOwogICAgIH0KICAgfQpAQCAtMjIzLDI3ICsyMTQsMjUgQEAKICAgLyogTG9hZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlICovCiAgIG1lbXNldCgmY29ubnNzbC0+Y2xpY2VydCwgMCwgc2l6ZW9mKHg1MDlfY3J0KSk7CiAKLSAgaWYoZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oY2VydCkpIHsKICAgICByZXQgPSB4NTA5X2NydF9wYXJzZV9maWxlKCZjb25uc3NsLT5jbGljZXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oY2VydCkpOwogCiAgICAgaWYocmV0KSB7Ci0jaWZkZWYgUE9MQVJTU0xfRVJST1JfQwogICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0jZW5kaWYgLyogUE9MQVJTU0xfRVJST1JfQyAqLwogICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgY2xpZW50IGNlcnQgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfQ0VSVF0sIC1yZXQsIGVycm9yYnVmKTsKKyAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGNlcnQpLCAtcmV0LCBlcnJvcmJ1Zik7CiAKICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ0VSVFBST0JMRU07CiAgICAgfQogICB9CiAKICAgLyogTG9hZCB0aGUgY2xpZW50IHByaXZhdGUga2V5ICovCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0pIHsKKyAgaWYoU1NMX1NFVF9PUFRJT04oa2V5KSkgewogICAgIHBrX2NvbnRleHQgcGs7CiAgICAgcGtfaW5pdCgmcGspOwotICAgIHJldCA9IHBrX3BhcnNlX2tleWZpbGUoJnBrLCBkYXRhLT5zZXQuc3RyW1NUUklOR19LRVldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfS0VZX1BBU1NXRF0pOworICAgIHJldCA9IHBrX3BhcnNlX2tleWZpbGUoJnBrLCBTU0xfU0VUX09QVElPTihrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX1NFVF9PUFRJT04oa2V5X3Bhc3N3ZCkpOwogICAgIGlmKHJldCA9PSAwICYmICFwa19jYW5fZG8oJnBrLCBQT0xBUlNTTF9QS19SU0EpKQogICAgICAgcmV0ID0gUE9MQVJTU0xfRVJSX1BLX1RZUEVfTUlTTUFUQ0g7CiAgICAgaWYocmV0ID09IDApCkBAIC0yNTMsMTEgKzI0Miw5IEBACiAgICAgcGtfZnJlZSgmcGspOwogCiAgICAgaWYocmV0KSB7Ci0jaWZkZWYgUE9MQVJTU0xfRVJST1JfQwogICAgICAgZXJyb3Jfc3RyZXJyb3IocmV0LCBlcnJvcmJ1Ziwgc2l6ZW9mKGVycm9yYnVmKSk7Ci0jZW5kaWYgLyogUE9MQVJTU0xfRVJST1JfQyAqLwogICAgICAgZmFpbGYoZGF0YSwgIkVycm9yIHJlYWRpbmcgcHJpdmF0ZSBrZXkgJXMgLSBQb2xhclNTTDogKC0weCUwNFgpICVzIiwKLSAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX0tFWV0sIC1yZXQsIGVycm9yYnVmKTsKKyAgICAgICAgICAgIFNTTF9TRVRfT1BUSU9OKGtleSksIC1yZXQsIGVycm9yYnVmKTsKIAogICAgICAgcmV0dXJuIENVUkxFX1NTTF9DRVJUUFJPQkxFTTsKICAgICB9CkBAIC0yNjYsMzEgKzI1MywyNyBAQAogICAvKiBMb2FkIHRoZSBDUkwgKi8KICAgbWVtc2V0KCZjb25uc3NsLT5jcmwsIDAsIHNpemVvZih4NTA5X2NybCkpOwogCi0gIGlmKGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSkgeworICBpZihTU0xfU0VUX09QVElPTihDUkxmaWxlKSkgewogICAgIHJldCA9IHg1MDlfY3JsX3BhcnNlX2ZpbGUoJmNvbm5zc2wtPmNybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNldC5zdHJbU1RSSU5HX1NTTF9DUkxGSUxFXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfU0VUX09QVElPTihDUkxmaWxlKSk7CiAKICAgICBpZihyZXQpIHsKLSNpZmRlZiBQT0xBUlNTTF9FUlJPUl9DCiAgICAgICBlcnJvcl9zdHJlcnJvcihyZXQsIGVycm9yYnVmLCBzaXplb2YoZXJyb3JidWYpKTsKLSNlbmRpZiAvKiBQT0xBUlNTTF9FUlJPUl9DICovCiAgICAgICBmYWlsZihkYXRhLCAiRXJyb3IgcmVhZGluZyBDUkwgZmlsZSAlcyAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAotICAgICAgICAgICAgZGF0YS0+c2V0LnN0cltTVFJJTkdfU1NMX0NSTEZJTEVdLCAtcmV0LCBlcnJvcmJ1Zik7CisgICAgICAgICAgICBTU0xfU0VUX09QVElPTihDUkxmaWxlKSwgLXJldCwgZXJyb3JidWYpOwogCiAgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NSTF9CQURGSUxFOwogICAgIH0KICAgfQogCi0gIGluZm9mKGRhdGEsICJQb2xhclNTTDogQ29ubmVjdGluZyB0byAlczolZFxuIiwKLSAgICAgICAgY29ubi0+aG9zdC5uYW1lLCBjb25uLT5yZW1vdGVfcG9ydCk7CisgIGluZm9mKGRhdGEsICJQb2xhclNTTDogQ29ubmVjdGluZyB0byAlczolZFxuIiwgaG9zdG5hbWUsIHBvcnQpOwogCiAgIGlmKHNzbF9pbml0KCZjb25uc3NsLT5zc2wpKSB7CiAgICAgZmFpbGYoZGF0YSwgIlBvbGFyU1NMOiBzc2xfaW5pdCBmYWlsZWQiKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KIAotICBzd2l0Y2goZGF0YS0+c2V0LnNzbC52ZXJzaW9uKSB7Ci0gIGRlZmF1bHQ6CisgIHN3aXRjaChTU0xfQ09OTl9DT05GSUcodmVyc2lvbikpIHsKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fREVGQVVMVDoKICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjE6CiAgICAgc3NsX3NldF9taW5fdmVyc2lvbigmY29ubnNzbC0+c3NsLCBTU0xfTUFKT1JfVkVSU0lPTl8zLApAQCAtMzI0LDYgKzMwNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU1NMX01JTk9SX1ZFUlNJT05fMyk7CiAgICAgaW5mb2YoZGF0YSwgIlBvbGFyU1NMOiBGb3JjZWQgbWluLiBTU0wgVmVyc2lvbiB0byBiZSBUTFMgMS4yXG4iKTsKICAgICBicmVhazsKKyAgY2FzZSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzoKKyAgICBmYWlsZihkYXRhLCAiUG9sYXJTU0w6IFRMUyAxLjMgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CisgIGRlZmF1bHQ6CisgICAgZmFpbGYoZGF0YSwgIlVucmVjb2duaXplZCBwYXJhbWV0ZXIgcGFzc2VkIHZpYSBDVVJMT1BUX1NTTFZFUlNJT04iKTsKKyAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgIH0KIAogICBzc2xfc2V0X2VuZHBvaW50KCZjb25uc3NsLT5zc2wsIFNTTF9JU19DTElFTlQpOwpAQCAtMzM4LDMwICszMjcsMzEgQEAKICAgc3NsX3NldF9jaXBoZXJzdWl0ZXMoJmNvbm5zc2wtPnNzbCwgc3NsX2xpc3RfY2lwaGVyc3VpdGVzKCkpOwogCiAgIC8qIENoZWNrIGlmIHRoZXJlJ3MgYSBjYWNoZWQgSUQgd2UgY2FuL3Nob3VsZCB1c2UgaGVyZSEgKi8KLSAgaWYoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpIHsKKyAgaWYoZGF0YS0+c2V0LmdlbmVyYWxfc3NsLnNlc3Npb25pZCkgewogICAgIHZvaWQgKm9sZF9zZXNzaW9uID0gTlVMTDsKIAogICAgIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKGNvbm4pOwotICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMKSkgeworICAgIGlmKCFDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgJm9sZF9zZXNzaW9uLCBOVUxMLCBzb2NraW5kZXgpKSB7CiAgICAgICByZXQgPSBzc2xfc2V0X3Nlc3Npb24oJmNvbm5zc2wtPnNzbCwgb2xkX3Nlc3Npb24pOwotICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgIGlmKHJldCkgeworICAgICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgICAgICBmYWlsZihkYXRhLCAic3NsX3NldF9zZXNzaW9uIHJldHVybmVkIC0weCV4IiwgLXJldCk7CiAgICAgICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKICAgICAgIH0KICAgICAgIGluZm9mKGRhdGEsICJQb2xhclNTTCByZS11c2luZyBzZXNzaW9uXG4iKTsKICAgICB9CisgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgfQogCiAgIHNzbF9zZXRfY2FfY2hhaW4oJmNvbm5zc2wtPnNzbCwKICAgICAgICAgICAgICAgICAgICAmY29ubnNzbC0+Y2FjZXJ0LAogICAgICAgICAgICAgICAgICAgICZjb25uc3NsLT5jcmwsCi0gICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7CiAKICAgc3NsX3NldF9vd25fY2VydF9yc2EoJmNvbm5zc2wtPnNzbCwKICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm5zc2wtPmNsaWNlcnQsICZjb25uc3NsLT5yc2EpOwogCi0gIGlmKHNzbF9zZXRfaG9zdG5hbWUoJmNvbm5zc2wtPnNzbCwgY29ubi0+aG9zdC5uYW1lKSkgeworICBpZihzc2xfc2V0X2hvc3RuYW1lKCZjb25uc3NsLT5zc2wsIGhvc3RuYW1lKSkgewogICAgIC8qIHNzbF9zZXRfaG9zdG5hbWUoKSBzZXRzIHRoZSBuYW1lIHRvIHVzZSBpbiBDTi9TQU4gY2hlY2tzICphbmQqIHRoZSBuYW1lCiAgICAgICAgdG8gc2V0IGluIHRoZSBTTkkgZXh0ZW5zaW9uLiBTbyBldmVuIGlmIGN1cmwgY29ubmVjdHMgdG8gYSBob3N0CiAgICAgICAgc3BlY2lmaWVkIGFzIGFuIElQIGFkZHJlc3MsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkLiAqLwpAQCAtMzcxLDcgKzM2MSw3IEBACiAKICNpZmRlZiBIQVNfQUxQTgogICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbikgewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b2NvbHNbM107CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnByb3RvY29sc1szXTsKICAgICBpbnQgY3VyID0gMDsKIAogI2lmZGVmIFVTRV9OR0hUVFAyCkBAIC00MDEsNyArMzkxLDcgQEAKIAogc3RhdGljIENVUkxjb2RlCiBwb2xhcnNzbF9jb25uZWN0X3N0ZXAyKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpCiB7CiAgIGludCByZXQ7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtNDI5LDkgKzQxOSw3IEBACiAgICAgcmV0dXJuIENVUkxFX09LOwogCiAgIGRlZmF1bHQ6Ci0jaWZkZWYgUE9MQVJTU0xfRVJST1JfQwogICAgIGVycm9yX3N0cmVycm9yKHJldCwgZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpOwotI2VuZGlmIC8qIFBPTEFSU1NMX0VSUk9SX0MgKi8KICAgICBmYWlsZihkYXRhLCAic3NsX2hhbmRzaGFrZSByZXR1cm5lZCAtIFBvbGFyU1NMOiAoLTB4JTA0WCkgJXMiLAogICAgICAgICAgIC1yZXQsIGVycm9yYnVmKTsKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC00NDIsNyArNDMwLDcgQEAKIAogICByZXQgPSBzc2xfZ2V0X3ZlcmlmeV9yZXN1bHQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLnNzbCk7CiAKLSAgaWYocmV0ICYmIGRhdGEtPnNldC5zc2wudmVyaWZ5cGVlcikgeworICBpZihyZXQgJiYgU1NMX0NPTk5fQ09ORklHKHZlcmlmeXBlZXIpKSB7CiAgICAgaWYocmV0ICYgQkFEQ0VSVF9FWFBJUkVEKQogICAgICAgZmFpbGYoZGF0YSwgIkNlcnQgdmVyaWZ5IGZhaWxlZDogQkFEQ0VSVF9FWFBJUkVEIik7CiAKQEAgLTUzOCw5ICs1MjYsOSBAQAogICAgICAgfQogICAgICAgZWxzZQogI2VuZGlmCi0gICAgICBpZighc3RybmNtcChuZXh0X3Byb3RvY29sLCBBTFBOX0hUVFBfMV8xLCBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpIHsKLSAgICAgICAgY29ubi0+bmVnbnBuID0gQ1VSTF9IVFRQX1ZFUlNJT05fMV8xOwotICAgICAgfQorICAgICAgICBpZighc3RybmNtcChuZXh0X3Byb3RvY29sLCBBTFBOX0hUVFBfMV8xLCBBTFBOX0hUVFBfMV8xX0xFTkdUSCkpIHsKKyAgICAgICAgICBjb25uLT5uZWducG4gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzE7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgaW5mb2YoZGF0YSwgIkFMUE4sIHNlcnZlciBkaWQgbm90IGFncmVlIHRvIGEgcHJvdG9jb2xcbiIpOwpAQCAtNTU1LDcgKzU0Myw3IEBACiAKIHN0YXRpYyBDVVJMY29kZQogcG9sYXJzc2xfY29ubmVjdF9zdGVwMyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBDVVJMY29kZSByZXRjb2RlID0gQ1VSTEVfT0s7CiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwpAQCAtNTYzLDcgKzU1MSw3IEBACiAKICAgREVCVUdBU1NFUlQoc3NsX2Nvbm5lY3RfMyA9PSBjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlKTsKIAotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgaW50IHJldDsKICAgICBzc2xfc2Vzc2lvbiAqb3VyX3NzbF9zZXNzaW9uaWQ7CiAgICAgdm9pZCAqb2xkX3NzbF9zZXNzaW9uaWQgPSBOVUxMOwpAQCAtNTgyLDEwICs1NzAsMTAgQEAKIAogICAgIC8qIElmIHRoZXJlJ3MgYWxyZWFkeSBhIG1hdGNoaW5nIHNlc3Npb24gaW4gdGhlIGNhY2hlLCBkZWxldGUgaXQgKi8KICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpZighQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICZvbGRfc3NsX3Nlc3Npb25pZCwgTlVMTCkpCisgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAmb2xkX3NzbF9zZXNzaW9uaWQsIE5VTEwsIHNvY2tpbmRleCkpCiAgICAgICBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoY29ubiwgb2xkX3NzbF9zZXNzaW9uaWQpOwogCi0gICAgcmV0Y29kZSA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwgMCk7CisgICAgcmV0Y29kZSA9IEN1cmxfc3NsX2FkZHNlc3Npb25pZChjb25uLCBvdXJfc3NsX3Nlc3Npb25pZCwgMCwgc29ja2luZGV4KTsKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfdW5sb2NrKGNvbm4pOwogICAgIGlmKHJldGNvZGUpIHsKICAgICAgIGZyZWUob3VyX3NzbF9zZXNzaW9uaWQpOwpAQCAtNzI3LDcgKzcxNSw4IEBACiAgICAgICBjdXJsX3NvY2tldF90IHJlYWRmZCA9IHNzbF9jb25uZWN0XzJfcmVhZGluZz09CiAgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGU/c29ja2ZkOkNVUkxfU09DS0VUX0JBRDsKIAotICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X3JlYWR5KHJlYWRmZCwgd3JpdGVmZCwgbm9uYmxvY2tpbmc/MDp0aW1lb3V0X21zKTsKKyAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9jaGVjayhyZWFkZmQsIENVUkxfU09DS0VUX0JBRCwgd3JpdGVmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25ibG9ja2luZz8wOnRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTCBzb2NrZXQsIGVycm5vOiAlZCIsIFNPQ0tFUlJOTyk7CkBAIC03ODYsOCArNzc1LDggQEAKIAogQ1VSTGNvZGUKIEN1cmxfcG9sYXJzc2xfY29ubmVjdF9ub25ibG9ja2luZyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpkb25lKQogewogICByZXR1cm4gcG9sYXJzc2xfY29ubmVjdF9jb21tb24oY29ubiwgc29ja2luZGV4LCBUUlVFLCBkb25lKTsKIH0KQEAgLTc5NSw3ICs3ODQsNyBAQAogCiBDVVJMY29kZQogQ3VybF9wb2xhcnNzbF9jb25uZWN0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKLSAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBDVVJMY29kZSByZXN1bHQ7CiAgIGJvb2wgZG9uZSA9IEZBTFNFOwpkaWZmIC0tZ2l0IGEvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jIGIvbGliL3Z0bHMvcG9sYXJzc2xfdGhyZWFkbG9jay5jCmluZGV4IDNiMGViZjguLmIxZWI3YjcgMTAwNjQ0Ci0tLSBhL2xpYi92dGxzL3BvbGFyc3NsX3RocmVhZGxvY2suYworKysgYi9saWIvdnRscy9wb2xhcnNzbF90aHJlYWRsb2NrLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgSG9pLUhvIENoYW4sIDxob2loby5jaGFuQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaApAQCAtNTIsNyArNTIsNyBAQAogICBpbnQgaTsKICAgaW50IHJldDsKIAotICBtdXRleF9idWYgPSBtYWxsb2MoTlVNVCAqIHNpemVvZihQT0xBUlNTTF9NVVRFWF9UKSk7CisgIG11dGV4X2J1ZiA9IGNhbGxvYyhOVU1UICogc2l6ZW9mKFBPTEFSU1NMX01VVEVYX1QpLCAxKTsKICAgaWYoIW11dGV4X2J1ZikKICAgICByZXR1cm4gMDsgICAgIC8qIGVycm9yLCBubyBudW1iZXIgb2YgdGhyZWFkcyBkZWZpbmVkICovCiAKZGlmZiAtLWdpdCBhL2xpYi92dGxzL3NjaGFubmVsLmMgYi9saWIvdnRscy9zY2hhbm5lbC5jCmluZGV4IGY5OTFlYzkuLmE3Mjc1M2UgMTAwNjQ0Ci0tLSBhL2xpYi92dGxzL3NjaGFubmVsLmMKKysrIGIvbGliL3Z0bHMvc2NoYW5uZWwuYwpAQCAtMTIzLDE2ICsxMjMsMzAgQEAKICNlbmRpZgogICBUQ0hBUiAqaG9zdF9uYW1lOwogICBDVVJMY29kZSByZXN1bHQ7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKIAogICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IFNTTC9UTFMgY29ubmVjdGlvbiB3aXRoICVzIHBvcnQgJWh1IChzdGVwIDEvMylcbiIsCi0gICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworICAgICAgICBob3N0bmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworCisjaWZkZWYgSEFTX0FMUE4KKyAgLyogQUxQTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBXaW5kb3dzIDguMSAvIFNlcnZlciAyMDEyIFIyIGFuZCBhYm92ZS4KKyAgICAgQWxzbyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgc3VwcG9ydGVkIGZvciBXaW5lLCBzZWUgY3VybCBidWcgIzk4My4gKi8KKyAgY29ubnNzbC0+dXNlX2FscG4gPSBjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbiAmJgorICAgICAgICAgICAgICAgICAgICAgICFHZXRQcm9jQWRkcmVzcyhHZXRNb2R1bGVIYW5kbGVBKCJudGRsbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2luZV9nZXRfdmVyc2lvbiIpICYmCisgICAgICAgICAgICAgICAgICAgICAgQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKDYsIDMsIFBMQVRGT1JNX1dJTk5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0dSRUFURVJfVEhBTl9FUVVBTCk7CisjZWxzZQorICBjb25uc3NsLT51c2VfYWxwbiA9IGZhbHNlOworI2VuZGlmCiAKICAgY29ubnNzbC0+Y3JlZCA9IE5VTEw7CiAKICAgLyogY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHJlLXVzYWJsZSBjcmVkZW50aWFsIGhhbmRsZSAqLwotICBpZihjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkgeworICBpZihkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKSB7CiAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX2xvY2soY29ubik7Ci0gICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAodm9pZCAqKikmb2xkX2NyZWQsIE5VTEwpKSB7CisgICAgaWYoIUN1cmxfc3NsX2dldHNlc3Npb25pZChjb25uLCAodm9pZCAqKikmb2xkX2NyZWQsIE5VTEwsIHNvY2tpbmRleCkpIHsKICAgICAgIGNvbm5zc2wtPmNyZWQgPSBvbGRfY3JlZDsKICAgICAgIGluZm9mKGRhdGEsICJzY2hhbm5lbDogcmUtdXNpbmcgZXhpc3RpbmcgY3JlZGVudGlhbCBoYW5kbGVcbiIpOwogCkBAIC0xNDksNyArMTYzLDcgQEAKICAgICBtZW1zZXQoJnNjaGFubmVsX2NyZWQsIDAsIHNpemVvZihzY2hhbm5lbF9jcmVkKSk7CiAgICAgc2NoYW5uZWxfY3JlZC5kd1ZlcnNpb24gPSBTQ0hBTk5FTF9DUkVEX1ZFUlNJT047CiAKLSAgICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpIHsKKyAgICBpZihjb25uLT5zc2xfY29uZmlnLnZlcmlmeXBlZXIpIHsKICNpZmRlZiBfV0lOMzJfV0NFCiAgICAgICAvKiBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIG9uIENFIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHJpZ2h0OyB3ZSdsbAogICAgICAgICAgZG8gaXQgZm9sbG93aW5nIGEgbW9yZSBtYW51YWwgcHJvY2Vzcy4gKi8KQEAgLTE1OCwxMyArMTcyLDE0IEBACiAgICAgICAgIFNDSF9DUkVEX0lHTk9SRV9SRVZPQ0FUSU9OX09GRkxJTkU7CiAjZWxzZQogICAgICAgc2NoYW5uZWxfY3JlZC5kd0ZsYWdzID0gU0NIX0NSRURfQVVUT19DUkVEX1ZBTElEQVRJT047Ci0gICAgICBpZihkYXRhLT5zZXQuc3NsX25vX3Jldm9rZSkKKyAgICAgIC8qIFRPRE8gcy9kYXRhLT5zZXQuc3NsLm5vX3Jldm9rZS9TU0xfU0VUX09QVElPTihub19yZXZva2UpL2cgKi8KKyAgICAgIGlmKGRhdGEtPnNldC5zc2wubm9fcmV2b2tlKQogICAgICAgICBzY2hhbm5lbF9jcmVkLmR3RmxhZ3MgfD0gU0NIX0NSRURfSUdOT1JFX05PX1JFVk9DQVRJT05fQ0hFQ0sgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NIX0NSRURfSUdOT1JFX1JFVk9DQVRJT05fT0ZGTElORTsKICAgICAgIGVsc2UKICAgICAgICAgc2NoYW5uZWxfY3JlZC5kd0ZsYWdzIHw9IFNDSF9DUkVEX1JFVk9DQVRJT05fQ0hFQ0tfQ0hBSU47CiAjZW5kaWYKLSAgICAgIGlmKGRhdGEtPnNldC5zc2xfbm9fcmV2b2tlKQorICAgICAgaWYoZGF0YS0+c2V0LnNzbC5ub19yZXZva2UpCiAgICAgICAgIGluZm9mKGRhdGEsICJzY2hhbm5lbDogZGlzYWJsZWQgc2VydmVyIGNlcnRpZmljYXRlIHJldm9jYXRpb24gIgogICAgICAgICAgICAgICAgICAgICAiY2hlY2tzXG4iKTsKICAgICAgIGVsc2UKQEAgLTE3NywxNSArMTkyLDE0IEBACiAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IGRpc2FibGVkIHNlcnZlciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrc1xuIik7CiAgICAgfQogCi0gICAgaWYoIWRhdGEtPnNldC5zc2wudmVyaWZ5aG9zdCkgeworICAgIGlmKCFjb25uLT5zc2xfY29uZmlnLnZlcmlmeWhvc3QpIHsKICAgICAgIHNjaGFubmVsX2NyZWQuZHdGbGFncyB8PSBTQ0hfQ1JFRF9OT19TRVJWRVJOQU1FX0NIRUNLOwogICAgICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiB2ZXJpZnlob3N0IHNldHRpbmcgcHJldmVudHMgU2NoYW5uZWwgZnJvbSAiCiAgICAgICAgICAgICAiY29tcGFyaW5nIHRoZSBzdXBwbGllZCB0YXJnZXQgbmFtZSB3aXRoIHRoZSBzdWJqZWN0ICIKICAgICAgICAgICAgICJuYW1lcyBpbiBzZXJ2ZXIgY2VydGlmaWNhdGVzLiBBbHNvIGRpc2FibGVzIFNOSS5cbiIpOwogICAgIH0KIAotICAgIHN3aXRjaChkYXRhLT5zZXQuc3NsLnZlcnNpb24pIHsKLSAgICBkZWZhdWx0OgorICAgIHN3aXRjaChjb25uLT5zc2xfY29uZmlnLnZlcnNpb24pIHsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9ERUZBVUxUOgogICAgIGNhc2UgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOgogICAgICAgc2NoYW5uZWxfY3JlZC5ncmJpdEVuYWJsZWRQcm90b2NvbHMgPSBTUF9QUk9UX1RMUzFfMF9DTElFTlQgfApAQCAtMjAxLDEyICsyMTUsMTggQEAKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yOgogICAgICAgc2NoYW5uZWxfY3JlZC5ncmJpdEVuYWJsZWRQcm90b2NvbHMgPSBTUF9QUk9UX1RMUzFfMl9DTElFTlQ7CiAgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zOgorICAgICAgZmFpbGYoZGF0YSwgIlNjaGFubmVsOiBUTFMgMS4zIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CiAgICAgY2FzZSBDVVJMX1NTTFZFUlNJT05fU1NMdjM6CiAgICAgICBzY2hhbm5lbF9jcmVkLmdyYml0RW5hYmxlZFByb3RvY29scyA9IFNQX1BST1RfU1NMM19DTElFTlQ7CiAgICAgICBicmVhazsKICAgICBjYXNlIENVUkxfU1NMVkVSU0lPTl9TU0x2MjoKICAgICAgIHNjaGFubmVsX2NyZWQuZ3JiaXRFbmFibGVkUHJvdG9jb2xzID0gU1BfUFJPVF9TU0wyX0NMSUVOVDsKICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBmYWlsZihkYXRhLCAiVW5yZWNvZ25pemVkIHBhcmFtZXRlciBwYXNzZWQgdmlhIENVUkxPUFRfU1NMVkVSU0lPTiIpOworICAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlLXVzYWJsZSBjcmVkZW50aWFsIGhhbmRsZSAqLwpAQCAtMjQxLDMyICsyNjEsMjkgQEAKICAgfQogCiAgIC8qIFdhcm4gaWYgU05JIGlzIGRpc2FibGVkIGR1ZSB0byB1c2Ugb2YgYW4gSVAgYWRkcmVzcyAqLwotICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBjb25uLT5ob3N0Lm5hbWUsICZhZGRyKQorICBpZihDdXJsX2luZXRfcHRvbihBRl9JTkVULCBob3N0bmFtZSwgJmFkZHIpCiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICAgfHwgQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGNvbm4tPmhvc3QubmFtZSwgJmFkZHI2KQorICAgICB8fCBDdXJsX2luZXRfcHRvbihBRl9JTkVUNiwgaG9zdG5hbWUsICZhZGRyNikKICNlbmRpZgogICAgICkgewogICAgIGluZm9mKGRhdGEsICJzY2hhbm5lbDogdXNpbmcgSVAgYWRkcmVzcywgU05JIGlzIG5vdCBzdXBwb3J0ZWQgYnkgT1MuXG4iKTsKICAgfQogCiAjaWZkZWYgSEFTX0FMUE4KLSAgLyogQUxQTiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBXaW5kb3dzIDguMSAvIFNlcnZlciAyMDEyIFIyIGFuZCBhYm92ZSAqLwotICBpZihjb25uLT5iaXRzLnRsc19lbmFibGVfYWxwbiAmJgotICAgICBDdXJsX3ZlcmlmeV93aW5kb3dzX3ZlcnNpb24oNiwgMywgUExBVEZPUk1fV0lOTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OX0dSRUFURVJfVEhBTl9FUVVBTCkpIHsKKyAgaWYoY29ubnNzbC0+dXNlX2FscG4pIHsKICAgICBpbnQgY3VyID0gMDsKICAgICBpbnQgbGlzdF9zdGFydF9pbmRleCA9IDA7Ci0gICAgdW5zaWduZWQgaW50KiBleHRlbnNpb25fbGVuID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgKmV4dGVuc2lvbl9sZW4gPSBOVUxMOwogICAgIHVuc2lnbmVkIHNob3J0KiBsaXN0X2xlbiA9IE5VTEw7CiAKICAgICAvKiBUaGUgZmlyc3QgZm91ciBieXRlcyB3aWxsIGJlIGFuIHVuc2lnbmVkIGludCBpbmRpY2F0aW5nIG51bWJlcgogICAgICAgIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIHJlc3Qgb2YgdGhlIHRoZSBidWZmZXIuICovCi0gICAgZXh0ZW5zaW9uX2xlbiA9ICh1bnNpZ25lZCBpbnQqKSgmYWxwbl9idWZmZXJbY3VyXSk7CisgICAgZXh0ZW5zaW9uX2xlbiA9ICh1bnNpZ25lZCBpbnQgKikoJmFscG5fYnVmZmVyW2N1cl0pOwogICAgIGN1ciArPSBzaXplb2YodW5zaWduZWQgaW50KTsKIAogICAgIC8qIFRoZSBuZXh0IGZvdXIgYnl0ZXMgYXJlIGFuIGluZGljYXRvciB0aGF0IHRoaXMgYnVmZmVyIHdpbGwgY29udGFpbgogICAgICAgIEFMUE4gZGF0YSwgYXMgb3Bwb3NlZCB0byBOUE4sIGZvciBleGFtcGxlLiAqLwotICAgICoodW5zaWduZWQgaW50KikmYWxwbl9idWZmZXJbY3VyXSA9CisgICAgKih1bnNpZ25lZCBpbnQgKikmYWxwbl9idWZmZXJbY3VyXSA9CiAgICAgICBTZWNBcHBsaWNhdGlvblByb3RvY29sTmVnb3RpYXRpb25FeHRfQUxQTjsKICAgICBjdXIgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAKQEAgLTMyNCwxNSArMzQxLDIxIEBACiAgIH0KICAgbWVtc2V0KGNvbm5zc2wtPmN0eHQsIDAsIHNpemVvZihzdHJ1Y3QgY3VybF9zY2hhbm5lbF9jdHh0KSk7CiAKLSAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoY29ubi0+aG9zdC5uYW1lKTsKKyAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOwogICBpZighaG9zdF9uYW1lKQogICAgIHJldHVybiBDVVJMRV9PVVRfT0ZfTUVNT1JZOwogCi0gIC8qIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzc1OTI0LmFzcHggKi8KKyAgLyogU2NoYW5uZWwgSW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dDoKKyAgICAgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNzU5MjQuYXNweAogCisgICAgIEF0IHRoZSBtb21lbnQgd2UgZG9uJ3QgcGFzcyBpbmJ1ZiB1bmxlc3Mgd2UncmUgdXNpbmcgQUxQTiBzaW5jZSB3ZSBvbmx5CisgICAgIHVzZSBpdCBmb3IgdGhhdCwgYW5kIFdpbmUgKGZvciB3aGljaCB3ZSBjdXJyZW50bHkgZGlzYWJsZSBBTFBOKSBpcyBnaXZpbmcKKyAgICAgdXMgcHJvYmxlbXMgd2l0aCBpbmJ1ZiByZWdhcmRsZXNzLiBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2lzc3Vlcy85ODMKKyAgKi8KICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+SW5pdGlhbGl6ZVNlY3VyaXR5Q29udGV4dCgKLSAgICAmY29ubnNzbC0+Y3JlZC0+Y3JlZF9oYW5kbGUsIE5VTEwsIGhvc3RfbmFtZSwKLSAgICBjb25uc3NsLT5yZXFfZmxhZ3MsIDAsIDAsICZpbmJ1Zl9kZXNjLCAwLCAmY29ubnNzbC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCisgICAgJmNvbm5zc2wtPmNyZWQtPmNyZWRfaGFuZGxlLCBOVUxMLCBob3N0X25hbWUsIGNvbm5zc2wtPnJlcV9mbGFncywgMCwgMCwKKyAgICAoY29ubnNzbC0+dXNlX2FscG4gPyAmaW5idWZfZGVzYyA6IE5VTEwpLAorICAgIDAsICZjb25uc3NsLT5jdHh0LT5jdHh0X2hhbmRsZSwKICAgICAmb3V0YnVmX2Rlc2MsICZjb25uc3NsLT5yZXRfZmxhZ3MsICZjb25uc3NsLT5jdHh0LT50aW1lX3N0YW1wKTsKIAogICBDdXJsX3VuaWNvZGVmcmVlKGhvc3RfbmFtZSk7CkBAIC0zOTEsMTEgKzQxNCwxMyBAQAogICBUQ0hBUiAqaG9zdF9uYW1lOwogICBDVVJMY29kZSByZXN1bHQ7CiAgIGJvb2wgZG9yZWFkOworICBjb25zdCBjaGFyICogY29uc3QgaG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDoKKyAgICBjb25uLT5ob3N0Lm5hbWU7CiAKICAgZG9yZWFkID0gKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgIT0gc3NsX2Nvbm5lY3RfMl93cml0aW5nKSA/IFRSVUUgOiBGQUxTRTsKIAogICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IFNTTC9UTFMgY29ubmVjdGlvbiB3aXRoICVzIHBvcnQgJWh1IChzdGVwIDIvMylcbiIsCi0gICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworICAgICAgICBob3N0bmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOwogCiAgIGlmKCFjb25uc3NsLT5jcmVkIHx8ICFjb25uc3NsLT5jdHh0KQogICAgIHJldHVybiBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUjsKQEAgLTQ5MSw3ICs1MTYsNyBAQAogICAgIG1lbWNweShpbmJ1ZlswXS5wdkJ1ZmZlciwgY29ubnNzbC0+ZW5jZGF0YV9idWZmZXIsCiAgICAgICAgICAgIGNvbm5zc2wtPmVuY2RhdGFfb2Zmc2V0KTsKIAotICAgIGhvc3RfbmFtZSA9IEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKGNvbm4tPmhvc3QubmFtZSk7CisgICAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOwogICAgIGlmKCFob3N0X25hbWUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtNjA4LDcgKzYzMyw3IEBACiAjaWZkZWYgX1dJTjMyX1dDRQogICAvKiBXaW5kb3dzIENFIGRvZXNuJ3QgZG8gYW55IHNlcnZlciBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLgogICAgICBXZSBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LiAqLwotICBpZihkYXRhLT5zZXQuc3NsLnZlcmlmeXBlZXIpCisgIGlmKGNvbm4tPnNzbF9jb25maWcudmVyaWZ5cGVlcikKICAgICByZXR1cm4gdmVyaWZ5X2NlcnRpZmljYXRlKGNvbm4sIHNvY2tpbmRleCk7CiAjZW5kaWYKIApAQCAtNjIzLDYgKzY0OCw4IEBACiAgIHN0cnVjdCBzc2xfY29ubmVjdF9kYXRhICpjb25uc3NsID0gJmNvbm4tPnNzbFtzb2NraW5kZXhdOwogICBTRUNVUklUWV9TVEFUVVMgc3NwaV9zdGF0dXMgPSBTRUNfRV9PSzsKICAgQ0VSVF9DT05URVhUICpjY2VydF9jb250ZXh0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgY29ubi0+aG9zdC5uYW1lOwogI2lmZGVmIEhBU19BTFBOCiAgIFNlY1BrZ0NvbnRleHRfQXBwbGljYXRpb25Qcm90b2NvbCBhbHBuX3Jlc3VsdDsKICNlbmRpZgpAQCAtNjMwLDcgKzY1Nyw3IEBACiAgIERFQlVHQVNTRVJUKHNzbF9jb25uZWN0XzMgPT0gY29ubnNzbC0+Y29ubmVjdGluZ19zdGF0ZSk7CiAKICAgaW5mb2YoZGF0YSwgInNjaGFubmVsOiBTU0wvVExTIGNvbm5lY3Rpb24gd2l0aCAlcyBwb3J0ICVodSAoc3RlcCAzLzMpXG4iLAotICAgICAgICBjb25uLT5ob3N0Lm5hbWUsIGNvbm4tPnJlbW90ZV9wb3J0KTsKKyAgICAgICAgaG9zdG5hbWUsIGNvbm4tPnJlbW90ZV9wb3J0KTsKIAogICBpZighY29ubnNzbC0+Y3JlZCkKICAgICByZXR1cm4gQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1I7CkBAIC02NTEsMTAgKzY3OCw3IEBACiAgIH0KIAogI2lmZGVmIEhBU19BTFBOCi0gIC8qIEFMUE4gaXMgb25seSBzdXBwb3J0ZWQgb24gV2luZG93cyA4LjEgLyBTZXJ2ZXIgMjAxMiBSMiBhbmQgYWJvdmUgKi8KLSAgaWYoY29ubi0+Yml0cy50bHNfZW5hYmxlX2FscG4gJiYKLSAgICAgQ3VybF92ZXJpZnlfd2luZG93c192ZXJzaW9uKDYsIDMsIFBMQVRGT1JNX1dJTk5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVSU0lPTl9HUkVBVEVSX1RIQU5fRVFVQUwpKSB7CisgIGlmKGNvbm5zc2wtPnVzZV9hbHBuKSB7CiAgICAgc3NwaV9zdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmY29ubnNzbC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCiAgICAgICBTRUNQS0dfQVRUUl9BUFBMSUNBVElPTl9QUk9UT0NPTCwgJmFscG5fcmVzdWx0KTsKIApAQCAtNjg5LDEyICs3MTMsMTMgQEAKICNlbmRpZgogCiAgIC8qIHNhdmUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBkYXRhIGZvciBwb3NzaWJsZSByZS11c2UgKi8KLSAgaWYoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpIHsKKyAgaWYoZGF0YS0+c2V0LmdlbmVyYWxfc3NsLnNlc3Npb25pZCkgewogICAgIGJvb2wgaW5jYWNoZTsKICAgICBzdHJ1Y3QgY3VybF9zY2hhbm5lbF9jcmVkICpvbGRfY3JlZCA9IE5VTEw7CiAKICAgICBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jayhjb25uKTsKLSAgICBpbmNhY2hlID0gIShDdXJsX3NzbF9nZXRzZXNzaW9uaWQoY29ubiwgKHZvaWQgKiopJm9sZF9jcmVkLCBOVUxMKSk7CisgICAgaW5jYWNoZSA9ICEoQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKGNvbm4sICh2b2lkICoqKSZvbGRfY3JlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2luZGV4KSk7CiAgICAgaWYoaW5jYWNoZSkgewogICAgICAgaWYob2xkX2NyZWQgIT0gY29ubnNzbC0+Y3JlZCkgewogICAgICAgICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IG9sZCBjcmVkZW50aWFsIGhhbmRsZSBpcyBzdGFsZSwgcmVtb3ZpbmdcbiIpOwpAQCAtNzA1LDcgKzczMCw4IEBACiAgICAgfQogICAgIGlmKCFpbmNhY2hlKSB7CiAgICAgICByZXN1bHQgPSBDdXJsX3NzbF9hZGRzZXNzaW9uaWQoY29ubiwgKHZvaWQgKiljb25uc3NsLT5jcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgY3VybF9zY2hhbm5lbF9jcmVkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBjdXJsX3NjaGFubmVsX2NyZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tpbmRleCk7CiAgICAgICBpZihyZXN1bHQpIHsKICAgICAgICAgQ3VybF9zc2xfc2Vzc2lvbmlkX3VubG9jayhjb25uKTsKICAgICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBmYWlsZWQgdG8gc3RvcmUgY3JlZGVudGlhbCBoYW5kbGUiKTsKQEAgLTc1Nyw3ICs3ODMsNyBAQAogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CiAgIGN1cmxfc29ja2V0X3Qgc29ja2ZkID0gY29ubi0+c29ja1tzb2NraW5kZXhdOwotICBsb25nIHRpbWVvdXRfbXM7CisgIHRpbWVfdCB0aW1lb3V0X21zOwogICBpbnQgd2hhdDsKIAogICAvKiBjaGVjayBpZiB0aGUgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkICovCkBAIC04MDMsNyArODI5LDggQEAKICAgICAgIGN1cmxfc29ja2V0X3QgcmVhZGZkID0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nID09CiAgICAgICAgIGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPyBzb2NrZmQgOiBDVVJMX1NPQ0tFVF9CQUQ7CiAKLSAgICAgIHdoYXQgPSBDdXJsX3NvY2tldF9yZWFkeShyZWFkZmQsIHdyaXRlZmQsIG5vbmJsb2NraW5nID8gMCA6IHRpbWVvdXRfbXMpOworICAgICAgd2hhdCA9IEN1cmxfc29ja2V0X2NoZWNrKHJlYWRmZCwgQ1VSTF9TT0NLRVRfQkFELCB3cml0ZWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NraW5nID8gMCA6IHRpbWVvdXRfbXMpOwogICAgICAgaWYod2hhdCA8IDApIHsKICAgICAgICAgLyogZmF0YWwgZXJyb3IgKi8KICAgICAgICAgZmFpbGYoZGF0YSwgInNlbGVjdC9wb2xsIG9uIFNTTC9UTFMgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtOTQ0LDcgKzk3MSw3IEBACiAgICAgLyogc2VuZCBlbnRpcmUgbWVzc2FnZSBvciBmYWlsICovCiAgICAgd2hpbGUobGVuID4gKHNpemVfdCl3cml0dGVuKSB7CiAgICAgICBzc2l6ZV90IHRoaXNfd3JpdGU7Ci0gICAgICBsb25nIHRpbWVsZWZ0OworICAgICAgdGltZV90IHRpbWVsZWZ0OwogICAgICAgaW50IHdoYXQ7CiAKICAgICAgIHRoaXNfd3JpdGUgPSAwOwpAQCAtOTU5LDggKzk4Niw3IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogCi0gICAgICB3aGF0ID0gQ3VybF9zb2NrZXRfcmVhZHkoQ1VSTF9TT0NLRVRfQkFELCBjb25uLT5zb2NrW3NvY2tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxlZnQpOworICAgICAgd2hhdCA9IFNPQ0tFVF9XUklUQUJMRShjb25uLT5zb2NrW3NvY2tpbmRleF0sIHRpbWVsZWZ0KTsKICAgICAgIGlmKHdoYXQgPCAwKSB7CiAgICAgICAgIC8qIGZhdGFsIGVycm9yICovCiAgICAgICAgIGZhaWxmKGNvbm4tPmRhdGEsICJzZWxlY3QvcG9sbCBvbiBTU0wgc29ja2V0LCBlcnJubzogJWQiLCBTT0NLRVJSTk8pOwpAQCAtMTM2NCw5ICsxMzkwLDExIEBACiAgICAqLwogICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgc3RydWN0IHNzbF9jb25uZWN0X2RhdGEgKmNvbm5zc2wgPSAmY29ubi0+c3NsW3NvY2tpbmRleF07CisgIGNvbnN0IGNoYXIgKiBjb25zdCBob3N0bmFtZSA9IFNTTF9JU19QUk9YWSgpID8gY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKIAogICBpbmZvZihkYXRhLCAic2NoYW5uZWw6IHNodXR0aW5nIGRvd24gU1NML1RMUyBjb25uZWN0aW9uIHdpdGggJXMgcG9ydCAlaHVcbiIsCi0gICAgICAgIGNvbm4tPmhvc3QubmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOworICAgICAgICBob3N0bmFtZSwgY29ubi0+cmVtb3RlX3BvcnQpOwogCiAgIGlmKGNvbm5zc2wtPmNyZWQgJiYgY29ubnNzbC0+Y3R4dCkgewogICAgIFNlY0J1ZmZlckRlc2MgQnVmZkRlc2M7CkBAIC0xMzg4LDcgKzE0MTYsNyBAQAogICAgICAgZmFpbGYoZGF0YSwgInNjaGFubmVsOiBBcHBseUNvbnRyb2xUb2tlbiBmYWlsdXJlOiAlcyIsCiAgICAgICAgICAgICBDdXJsX3NzcGlfc3RyZXJyb3IoY29ubiwgc3NwaV9zdGF0dXMpKTsKIAotICAgIGhvc3RfbmFtZSA9IEN1cmxfY29udmVydF9VVEY4X3RvX3RjaGFyKGNvbm4tPmhvc3QubmFtZSk7CisgICAgaG9zdF9uYW1lID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoaG9zdG5hbWUpOwogICAgIGlmKCFob3N0X25hbWUpCiAgICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIApAQCAtMTUxMyw2ICsxNTQxLDkgQEAKICAgQ1VSTGNvZGUgcmVzdWx0ID0gQ1VSTEVfT0s7CiAgIENFUlRfQ09OVEVYVCAqcENlcnRDb250ZXh0U2VydmVyID0gTlVMTDsKICAgY29uc3QgQ0VSVF9DSEFJTl9DT05URVhUICpwQ2hhaW5Db250ZXh0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGNvbm5faG9zdG5hbWUgPSBTU0xfSVNfUFJPWFkoKSA/CisgICAgY29ubi0+aHR0cF9wcm94eS5ob3N0Lm5hbWUgOgorICAgIGNvbm4tPmhvc3QubmFtZTsKIAogICBzdGF0dXMgPSBzX3BTZWNGbi0+UXVlcnlDb250ZXh0QXR0cmlidXRlcygmY29ubnNzbC0+Y3R4dC0+Y3R4dF9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1BLR19BVFRSX1JFTU9URV9DRVJUX0NPTlRFWFQsCkBAIC0xNTM0LDcgKzE1NjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydENvbnRleHRTZXJ2ZXItPmhDZXJ0U3RvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDaGFpblBhcmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLT5zZXQuc3NsX25vX3Jldm9rZSA/IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0YS0+c2V0LnNzbC5ub19yZXZva2UgPyAwIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRfQ0hBSU5fUkVWT0NBVElPTl9DSEVDS19DSEFJTiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQ2hhaW5Db250ZXh0KSkgewpAQCAtMTU3MCwxNCArMTYwMSwxNCBAQAogICB9CiAKICAgaWYocmVzdWx0ID09IENVUkxFX09LKSB7Ci0gICAgaWYoZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KSB7CisgICAgaWYoY29ubi0+c3NsX2NvbmZpZy52ZXJpZnlob3N0KSB7CiAgICAgICBUQ0hBUiBjZXJ0X2hvc3RuYW1lX2J1ZmZbMTI4XTsKICAgICAgIHhjaGFycF91IGhvc3RuYW1lOwogICAgICAgeGNoYXJwX3UgY2VydF9ob3N0bmFtZTsKICAgICAgIERXT1JEIGxlbjsKIAogICAgICAgY2VydF9ob3N0bmFtZS5jb25zdF90Y2hhcl9wdHIgPSBjZXJ0X2hvc3RuYW1lX2J1ZmY7Ci0gICAgICBob3N0bmFtZS50Y2hhcl9wdHIgPSBDdXJsX2NvbnZlcnRfVVRGOF90b190Y2hhcihjb25uLT5ob3N0Lm5hbWUpOworICAgICAgaG9zdG5hbWUudGNoYXJfcHRyID0gQ3VybF9jb252ZXJ0X1VURjhfdG9fdGNoYXIoY29ubl9ob3N0bmFtZSk7CiAKICAgICAgIC8qIFRPRE86IEZpeCB0aGlzIGZvciBjZXJ0aWZpY2F0ZXMgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGl2ZSBuYW1lcy4KICAgICAgIFJpZ2h0IG5vdyB3ZSdyZSBvbmx5IGFza2luZyBmb3IgdGhlIGZpcnN0IHByZWZlcnJlZCBhbHRlcm5hdGl2ZSBuYW1lLgpAQCAtMTU5NSw3ICsxNjI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCk7CiAgICAgICBpZihsZW4gPiAwICYmICpjZXJ0X2hvc3RuYW1lLnRjaGFyX3B0ciA9PSAnKicpIHsKICAgICAgICAgLyogdGhpcyBpcyBhIHdpbGRjYXJkIGNlcnQuICB0cnkgbWF0Y2hpbmcgdGhlIGxhc3QgbGVuIC0gMSBjaGFycyAqLwotICAgICAgICBpbnQgaG9zdG5hbWVfbGVuID0gc3RybGVuKGNvbm4tPmhvc3QubmFtZSk7CisgICAgICAgIGludCBob3N0bmFtZV9sZW4gPSBzdHJsZW4oY29ubl9ob3N0bmFtZSk7CiAgICAgICAgIGNlcnRfaG9zdG5hbWUudGNoYXJfcHRyKys7CiAgICAgICAgIGlmKF90Y3NpY21wKGNlcnRfaG9zdG5hbWUuY29uc3RfdGNoYXJfcHRyLAogICAgICAgICAgICAgICAgICAgICBob3N0bmFtZS5jb25zdF90Y2hhcl9wdHIgKyBob3N0bmFtZV9sZW4gLSBsZW4gKyAyKSAhPSAwKQpAQCAtMTYxMCw3ICsxNjQxLDcgQEAKICAgICAgICAgX2NlcnRfaG9zdG5hbWUgPSBDdXJsX2NvbnZlcnRfdGNoYXJfdG9fVVRGOChjZXJ0X2hvc3RuYW1lLnRjaGFyX3B0cik7CiAgICAgICAgIGZhaWxmKGRhdGEsICJzY2hhbm5lbDogQ2VydEdldE5hbWVTdHJpbmcoKSBjZXJ0aWZpY2F0ZSBob3N0bmFtZSAiCiAgICAgICAgICAgICAgICIoJXMpIGRpZCBub3QgbWF0Y2ggY29ubmVjdGlvbiAoJXMpIiwKLSAgICAgICAgICAgICAgX2NlcnRfaG9zdG5hbWUsIGNvbm4tPmhvc3QubmFtZSk7CisgICAgICAgICAgICAgIF9jZXJ0X2hvc3RuYW1lLCBjb25uX2hvc3RuYW1lKTsKICAgICAgICAgQ3VybF91bmljb2RlZnJlZShfY2VydF9ob3N0bmFtZSk7CiAgICAgICB9CiAgICAgICBDdXJsX3VuaWNvZGVmcmVlKGhvc3RuYW1lLnRjaGFyX3B0cik7CmRpZmYgLS1naXQgYS9saWIvdnRscy92dGxzLmMgYi9saWIvdnRscy92dGxzLmMKaW5kZXggMzg2Mzc3Ny4uZThmZDNjZiAxMDA2NDQKLS0tIGEvbGliL3Z0bHMvdnRscy5jCisrKyBiL2xpYi92dGxzL3Z0bHMuYwpAQCAtNjEsMTAgKzYxLDExIEBACiAjaW5jbHVkZSAidnRscy5oIiAvKiBnZW5lcmljIFNTTCBwcm90b3MgZXRjICovCiAjaW5jbHVkZSAic2xpc3QuaCIKICNpbmNsdWRlICJzZW5kZi5oIgotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKICNpbmNsdWRlICJ1cmwuaCIKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAibXVsdGlpZi5oIgogI2luY2x1ZGUgInRpbWV2YWwuaCIKICNpbmNsdWRlICJjdXJsX21kNS5oIgogI2luY2x1ZGUgIndhcm5sZXNzLmgiCkBAIC04MCw5NiArODEsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLT5zaGFyZS0+c3BlY2lmaWVyICYgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxPDxDVVJMX0xPQ0tfREFUQV9TU0xfU0VTU0lPTikpKQogCi1zdGF0aWMgYm9vbCBzYWZlX3N0cmVxdWFsKGNoYXIqIHN0cjEsIGNoYXIqIHN0cjIpCi17Ci0gIGlmKHN0cjEgJiYgc3RyMikKLSAgICAvKiBib3RoIHBvaW50ZXJzIHBvaW50IHRvIHNvbWV0aGluZyB0aGVuIGNvbXBhcmUgdGhlbSAqLwotICAgIHJldHVybiAoMCAhPSBDdXJsX3Jhd19lcXVhbChzdHIxLCBzdHIyKSkgPyBUUlVFIDogRkFMU0U7Ci0gIGVsc2UKLSAgICAvKiBpZiBib3RoIHBvaW50ZXJzIGFyZSBOVUxMIHRoZW4gdHJlYXQgdGhlbSBhcyBlcXVhbCAqLwotICAgIHJldHVybiAoIXN0cjEgJiYgIXN0cjIpID8gVFJVRSA6IEZBTFNFOwotfQorI2RlZmluZSBDTE9ORV9TVFJJTkcodmFyKSAgICAgICAgICAgICAgICAgICAgXAorICBpZihzb3VyY2UtPnZhcikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3QtPnZhciA9IHN0cmR1cChzb3VyY2UtPnZhcik7ICAgICAgICAgXAorICAgIGlmKCFkZXN0LT52YXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3QtPnZhciA9IE5VTEw7CiAKIGJvb2wKLUN1cmxfc3NsX2NvbmZpZ19tYXRjaGVzKHN0cnVjdCBzc2xfY29uZmlnX2RhdGEqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBuZWVkbGUpCitDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyogbmVlZGxlKQogewogICBpZigoZGF0YS0+dmVyc2lvbiA9PSBuZWVkbGUtPnZlcnNpb24pICYmCiAgICAgIChkYXRhLT52ZXJpZnlwZWVyID09IG5lZWRsZS0+dmVyaWZ5cGVlcikgJiYKICAgICAgKGRhdGEtPnZlcmlmeWhvc3QgPT0gbmVlZGxlLT52ZXJpZnlob3N0KSAmJgotICAgICBzYWZlX3N0cmVxdWFsKGRhdGEtPkNBcGF0aCwgbmVlZGxlLT5DQXBhdGgpICYmCi0gICAgIHNhZmVfc3RyZXF1YWwoZGF0YS0+Q0FmaWxlLCBuZWVkbGUtPkNBZmlsZSkgJiYKLSAgICAgc2FmZV9zdHJlcXVhbChkYXRhLT5jbGllbnRjZXJ0LCBuZWVkbGUtPmNsaWVudGNlcnQpICYmCi0gICAgIHNhZmVfc3RyZXF1YWwoZGF0YS0+cmFuZG9tX2ZpbGUsIG5lZWRsZS0+cmFuZG9tX2ZpbGUpICYmCi0gICAgIHNhZmVfc3RyZXF1YWwoZGF0YS0+ZWdkc29ja2V0LCBuZWVkbGUtPmVnZHNvY2tldCkgJiYKLSAgICAgc2FmZV9zdHJlcXVhbChkYXRhLT5jaXBoZXJfbGlzdCwgbmVlZGxlLT5jaXBoZXJfbGlzdCkpCisgICAgIEN1cmxfc2FmZV9zdHJjYXNlY29tcGFyZShkYXRhLT5DQXBhdGgsIG5lZWRsZS0+Q0FwYXRoKSAmJgorICAgICBDdXJsX3NhZmVfc3RyY2FzZWNvbXBhcmUoZGF0YS0+Q0FmaWxlLCBuZWVkbGUtPkNBZmlsZSkgJiYKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNsaWVudGNlcnQsIG5lZWRsZS0+Y2xpZW50Y2VydCkgJiYKKyAgICAgQ3VybF9zYWZlX3N0cmNhc2Vjb21wYXJlKGRhdGEtPmNpcGhlcl9saXN0LCBuZWVkbGUtPmNpcGhlcl9saXN0KSkKICAgICByZXR1cm4gVFJVRTsKIAogICByZXR1cm4gRkFMU0U7CiB9CiAKIGJvb2wKLUN1cmxfY2xvbmVfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSAqZGVzdCkKK0N1cmxfY2xvbmVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKmRlc3QpCiB7Ci0gIGRlc3QtPnNlc3Npb25pZCA9IHNvdXJjZS0+c2Vzc2lvbmlkOwogICBkZXN0LT52ZXJpZnlob3N0ID0gc291cmNlLT52ZXJpZnlob3N0OwogICBkZXN0LT52ZXJpZnlwZWVyID0gc291cmNlLT52ZXJpZnlwZWVyOwogICBkZXN0LT52ZXJzaW9uID0gc291cmNlLT52ZXJzaW9uOwogCi0gIGlmKHNvdXJjZS0+Q0FmaWxlKSB7Ci0gICAgZGVzdC0+Q0FmaWxlID0gc3RyZHVwKHNvdXJjZS0+Q0FmaWxlKTsKLSAgICBpZighZGVzdC0+Q0FmaWxlKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGVsc2UKLSAgICBkZXN0LT5DQWZpbGUgPSBOVUxMOwotCi0gIGlmKHNvdXJjZS0+Q0FwYXRoKSB7Ci0gICAgZGVzdC0+Q0FwYXRoID0gc3RyZHVwKHNvdXJjZS0+Q0FwYXRoKTsKLSAgICBpZighZGVzdC0+Q0FwYXRoKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGVsc2UKLSAgICBkZXN0LT5DQXBhdGggPSBOVUxMOwotCi0gIGlmKHNvdXJjZS0+Y2lwaGVyX2xpc3QpIHsKLSAgICBkZXN0LT5jaXBoZXJfbGlzdCA9IHN0cmR1cChzb3VyY2UtPmNpcGhlcl9saXN0KTsKLSAgICBpZighZGVzdC0+Y2lwaGVyX2xpc3QpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZWxzZQotICAgIGRlc3QtPmNpcGhlcl9saXN0ID0gTlVMTDsKLQotICBpZihzb3VyY2UtPmVnZHNvY2tldCkgewotICAgIGRlc3QtPmVnZHNvY2tldCA9IHN0cmR1cChzb3VyY2UtPmVnZHNvY2tldCk7Ci0gICAgaWYoIWRlc3QtPmVnZHNvY2tldCkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBlbHNlCi0gICAgZGVzdC0+ZWdkc29ja2V0ID0gTlVMTDsKLQotICBpZihzb3VyY2UtPnJhbmRvbV9maWxlKSB7Ci0gICAgZGVzdC0+cmFuZG9tX2ZpbGUgPSBzdHJkdXAoc291cmNlLT5yYW5kb21fZmlsZSk7Ci0gICAgaWYoIWRlc3QtPnJhbmRvbV9maWxlKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGVsc2UKLSAgICBkZXN0LT5yYW5kb21fZmlsZSA9IE5VTEw7Ci0KLSAgaWYoc291cmNlLT5jbGllbnRjZXJ0KSB7Ci0gICAgZGVzdC0+Y2xpZW50Y2VydCA9IHN0cmR1cChzb3VyY2UtPmNsaWVudGNlcnQpOwotICAgIGlmKCFkZXN0LT5jbGllbnRjZXJ0KQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGRlc3QtPnNlc3Npb25pZCA9IEZBTFNFOwotICB9Ci0gIGVsc2UKLSAgICBkZXN0LT5jbGllbnRjZXJ0ID0gTlVMTDsKLQorICBDTE9ORV9TVFJJTkcoQ0FmaWxlKTsKKyAgQ0xPTkVfU1RSSU5HKENBcGF0aCk7CisgIENMT05FX1NUUklORyhjaXBoZXJfbGlzdCk7CisgIENMT05FX1NUUklORyhlZ2Rzb2NrZXQpOworICBDTE9ORV9TVFJJTkcocmFuZG9tX2ZpbGUpOworICBDTE9ORV9TVFJJTkcoY2xpZW50Y2VydCk7CiAgIHJldHVybiBUUlVFOwogfQogCi12b2lkIEN1cmxfZnJlZV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfY29uZmlnX2RhdGEqIHNzbGMpCit2b2lkIEN1cmxfZnJlZV9wcmltYXJ5X3NzbF9jb25maWcoc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyogc3NsYykKIHsKICAgQ3VybF9zYWZlZnJlZShzc2xjLT5DQWZpbGUpOwogICBDdXJsX3NhZmVmcmVlKHNzbGMtPkNBcGF0aCk7CkBAIC0xNzksNzcgKzEzMyw2IEBACiAgIEN1cmxfc2FmZWZyZWUoc3NsYy0+Y2xpZW50Y2VydCk7CiB9CiAKLQotLyoKLSAqIEN1cmxfcmFuZCgpIHJldHVybnMgYSByYW5kb20gdW5zaWduZWQgaW50ZWdlciwgMzJiaXQuCi0gKgotICogVGhpcyBub24tU1NMIGZ1bmN0aW9uIGlzIHB1dCBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGZpbGUgaXMgdGhlIG9ubHkgb25lCi0gKiB3aXRoIGtub3dsZWRnZSBvZiB3aGF0IHRoZSB1bmRlcmx5aW5nIFNTTCBsaWJyYXJpZXMgcHJvdmlkZSBpbiB0ZXJtcyBvZgotICogcmFuZG9taXplcnMuCi0gKgotICogTk9URTogJ2RhdGEnIG1heSBiZSBwYXNzZWQgaW4gYXMgTlVMTCB3aGVuIGNvbWluZyBmcm9tIGV4dGVybmFsIEFQSSB3aXRob3V0Ci0gKiBlYXN5IGhhbmRsZSEKLSAqCi0gKi8KLQotdW5zaWduZWQgaW50IEN1cmxfcmFuZChzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKQotewotICB1bnNpZ25lZCBpbnQgciA9IDA7Ci0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmFuZHNlZWQ7Ci0gIHN0YXRpYyBib29sIHNlZWRlZCA9IEZBTFNFOwotCi0jaWZkZWYgQ1VSTERFQlVHCi0gIGNoYXIgKmZvcmNlX2VudHJvcHkgPSBnZXRlbnYoIkNVUkxfRU5UUk9QWSIpOwotICBpZihmb3JjZV9lbnRyb3B5KSB7Ci0gICAgaWYoIXNlZWRlZCkgewotICAgICAgc2l6ZV90IGVsZW4gPSBzdHJsZW4oZm9yY2VfZW50cm9weSk7Ci0gICAgICBzaXplX3QgY2xlbiA9IHNpemVvZihyYW5kc2VlZCk7Ci0gICAgICBzaXplX3QgbWluID0gZWxlbiA8IGNsZW4gPyBlbGVuIDogY2xlbjsKLSAgICAgIG1lbWNweSgoY2hhciAqKSZyYW5kc2VlZCwgZm9yY2VfZW50cm9weSwgbWluKTsKLSAgICAgIHNlZWRlZCA9IFRSVUU7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgIHJhbmRzZWVkKys7Ci0gICAgcmV0dXJuIHJhbmRzZWVkOwotICB9Ci0jZW5kaWYKLQotICAvKiBkYXRhIG1heSBiZSBOVUxMISAqLwotICBpZighQ3VybF9zc2xfcmFuZG9tKGRhdGEsICh1bnNpZ25lZCBjaGFyICopJnIsIHNpemVvZihyKSkpCi0gICAgcmV0dXJuIHI7Ci0KLSAgLyogSWYgQ3VybF9zc2xfcmFuZG9tKCkgcmV0dXJucyBub24temVybyBpdCBjb3VsZG4ndCBvZmZlciByYW5kb21uZXNzIGFuZCB3ZQotICAgICBpbnN0ZWFkIHBlcmZvcm0gYSAiYmVzdCBlZmZvcnQiICovCi0KLSNpZmRlZiBSQU5ET01fRklMRQotICBpZighc2VlZGVkKSB7Ci0gICAgLyogaWYgdGhlcmUncyBhIHJhbmRvbSBmaWxlIHRvIHJlYWQgYSBzZWVkIGZyb20sIHVzZSBpdCAqLwotICAgIGludCBmZCA9IG9wZW4oUkFORE9NX0ZJTEUsIE9fUkRPTkxZKTsKLSAgICBpZihmZCA+IC0xKSB7Ci0gICAgICAvKiByZWFkIHJhbmRvbSBkYXRhIGludG8gdGhlIHJhbmRzZWVkIHZhcmlhYmxlICovCi0gICAgICBzc2l6ZV90IG5yZWFkID0gcmVhZChmZCwgJnJhbmRzZWVkLCBzaXplb2YocmFuZHNlZWQpKTsKLSAgICAgIGlmKG5yZWFkID09IHNpemVvZihyYW5kc2VlZCkpCi0gICAgICAgIHNlZWRlZCA9IFRSVUU7Ci0gICAgICBjbG9zZShmZCk7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICBpZighc2VlZGVkKSB7Ci0gICAgc3RydWN0IHRpbWV2YWwgbm93ID0gY3VybHhfdHZub3coKTsKLSAgICBpbmZvZihkYXRhLCAiV0FSTklORzogVXNpbmcgd2VhayByYW5kb20gc2VlZFxuIik7Ci0gICAgcmFuZHNlZWQgKz0gKHVuc2lnbmVkIGludClub3cudHZfdXNlYyArICh1bnNpZ25lZCBpbnQpbm93LnR2X3NlYzsKLSAgICByYW5kc2VlZCA9IHJhbmRzZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1OwotICAgIHJhbmRzZWVkID0gcmFuZHNlZWQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7Ci0gICAgcmFuZHNlZWQgPSByYW5kc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKLSAgICBzZWVkZWQgPSBUUlVFOwotICB9Ci0KLSAgLyogUmV0dXJuIGFuIHVuc2lnbmVkIDMyLWJpdCBwc2V1ZG8tcmFuZG9tIG51bWJlci4gKi8KLSAgciA9IHJhbmRzZWVkID0gcmFuZHNlZWQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7Ci0gIHJldHVybiAociA8PCAxNikgfCAoKHIgPj4gMTYpICYgMHhGRkZGKTsKLX0KLQogaW50IEN1cmxfc3NsX2JhY2tlbmQodm9pZCkKIHsKICAgcmV0dXJuIChpbnQpQ1VSTF9TU0xfQkFDS0VORDsKQEAgLTI5MCwxOSArMTczLDQyIEBACiBzdGF0aWMgYm9vbCBzc2xfcHJlZnNfY2hlY2soc3RydWN0IEN1cmxfZWFzeSAqZGF0YSkKIHsKICAgLyogY2hlY2sgZm9yIENVUkxPUFRfU1NMVkVSU0lPTiBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZSAqLwotICBpZigoZGF0YS0+c2V0LnNzbC52ZXJzaW9uIDwgMCkKLSAgICAgfHwgKGRhdGEtPnNldC5zc2wudmVyc2lvbiA+PSBDVVJMX1NTTFZFUlNJT05fTEFTVCkpIHsKKyAgaWYoKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJzaW9uIDwgMCkKKyAgICAgfHwgKGRhdGEtPnNldC5zc2wucHJpbWFyeS52ZXJzaW9uID49IENVUkxfU1NMVkVSU0lPTl9MQVNUKSkgewogICAgIGZhaWxmKGRhdGEsICJVbnJlY29nbml6ZWQgcGFyYW1ldGVyIHZhbHVlIHBhc3NlZCB2aWEgQ1VSTE9QVF9TU0xWRVJTSU9OIik7CiAgICAgcmV0dXJuIEZBTFNFOwogICB9CiAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgQ1VSTGNvZGUKK3NzbF9jb25uZWN0X2luaXRfcHJveHkoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQoreworICBERUJVR0FTU0VSVChjb25uLT5iaXRzLnByb3h5X3NzbF9jb25uZWN0ZWRbc29ja2luZGV4XSk7CisgIGlmKHNzbF9jb25uZWN0aW9uX2NvbXBsZXRlID09IGNvbm4tPnNzbFtzb2NraW5kZXhdLnN0YXRlICYmCisgICAgICFjb25uLT5wcm94eV9zc2xbc29ja2luZGV4XS51c2UpIHsKKyNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IGRlZmluZWQoVVNFX05TUykgfHwgIFwKKyAgZGVmaW5lZChVU0VfR1NLSVQpCisgICAgY29ubi0+cHJveHlfc3NsW3NvY2tpbmRleF0gPSBjb25uLT5zc2xbc29ja2luZGV4XTsKKyAgICBtZW1zZXQoJmNvbm4tPnNzbFtzb2NraW5kZXhdLCAwLCBzaXplb2YoY29ubi0+c3NsW3NvY2tpbmRleF0pKTsKKyNlbHNlCisgICAgcmV0dXJuIENVUkxFX05PVF9CVUlMVF9JTjsKKyNlbmRpZgorICB9CisgIHJldHVybiBDVVJMRV9PSzsKK30KKwogQ1VSTGNvZGUKIEN1cmxfc3NsX2Nvbm5lY3Qoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBpbnQgc29ja2luZGV4KQogewogICBDVVJMY29kZSByZXN1bHQ7CiAKKyAgaWYoY29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW3NvY2tpbmRleF0pIHsKKyAgICByZXN1bHQgPSBzc2xfY29ubmVjdF9pbml0X3Byb3h5KGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCiAgIGlmKCFzc2xfcHJlZnNfY2hlY2soY29ubi0+ZGF0YSkpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwogCkBAIC0zMjMsNiArMjI5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmRvbmUpCiB7CiAgIENVUkxjb2RlIHJlc3VsdDsKKyAgaWYoY29ubi0+Yml0cy5wcm94eV9zc2xfY29ubmVjdGVkW3NvY2tpbmRleF0pIHsKKyAgICByZXN1bHQgPSBzc2xfY29ubmVjdF9pbml0X3Byb3h5KGNvbm4sIHNvY2tpbmRleCk7CisgICAgaWYocmVzdWx0KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQogCiAgIGlmKCFzc2xfcHJlZnNfY2hlY2soY29ubi0+ZGF0YSkpCiAgICAgcmV0dXJuIENVUkxFX1NTTF9DT05ORUNUX0VSUk9SOwpAQCAtMzY1LDcgKzI3Niw4IEBACiAgKi8KIGJvb2wgQ3VybF9zc2xfZ2V0c2Vzc2lvbmlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzc2xfc2Vzc2lvbmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHNpemUpIC8qIHNldCAwIGlmIHVua25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWRzaXplLCAvKiBzZXQgMCBpZiB1bmtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2luZGV4KQogewogICBzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbiAqY2hlY2s7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEgPSBjb25uLT5kYXRhOwpAQCAtMzczLDExICsyODUsMTggQEAKICAgbG9uZyAqZ2VuZXJhbF9hZ2U7CiAgIGJvb2wgbm9fbWF0Y2ggPSBUUlVFOwogCisgIGNvbnN0IGJvb2wgaXNQcm94eSA9IENPTk5FQ1RfUFJPWFlfU1NMKCk7CisgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKiBjb25zdCBzc2xfY29uZmlnID0gaXNQcm94eSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPnByb3h5X3NzbF9jb25maWcgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uLT5zc2xfY29uZmlnOworICBjb25zdCBjaGFyICogY29uc3QgbmFtZSA9IGlzUHJveHkgPyBjb25uLT5odHRwX3Byb3h5Lmhvc3QubmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4tPmhvc3QubmFtZTsKKyAgaW50IHBvcnQgPSBpc1Byb3h5ID8gKGludCljb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CiAgICpzc2xfc2Vzc2lvbmlkID0gTlVMTDsKIAotICBERUJVR0FTU0VSVChjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCk7CisgIERFQlVHQVNTRVJUKGRhdGEtPnNldC5nZW5lcmFsX3NzbC5zZXNzaW9uaWQpOwogCi0gIGlmKCFjb25uLT5zc2xfY29uZmlnLnNlc3Npb25pZCkKKyAgaWYoIWRhdGEtPnNldC5nZW5lcmFsX3NzbC5zZXNzaW9uaWQpCiAgICAgLyogc2Vzc2lvbiBJRCByZS11c2UgaXMgZGlzYWJsZWQgKi8KICAgICByZXR1cm4gVFJVRTsKIApAQCAtMzg3LDIwICszMDYsMjEgQEAKICAgZWxzZQogICAgIGdlbmVyYWxfYWdlID0gJmRhdGEtPnN0YXRlLnNlc3Npb25hZ2U7CiAKLSAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c2V0LnNzbC5tYXhfc3NsX3Nlc3Npb25zOyBpKyspIHsKKyAgZm9yKGkgPSAwOyBpIDwgZGF0YS0+c2V0LmdlbmVyYWxfc3NsLm1heF9zc2xfc2Vzc2lvbnM7IGkrKykgewogICAgIGNoZWNrID0gJmRhdGEtPnN0YXRlLnNlc3Npb25baV07CiAgICAgaWYoIWNoZWNrLT5zZXNzaW9uaWQpCiAgICAgICAvKiBub3Qgc2Vzc2lvbiBJRCBtZWFucyBibGFuayBlbnRyeSAqLwogICAgICAgY29udGludWU7Ci0gICAgaWYoQ3VybF9yYXdfZXF1YWwoY29ubi0+aG9zdC5uYW1lLCBjaGVjay0+bmFtZSkgJiYKKyAgICBpZihzdHJjYXNlY29tcGFyZShuYW1lLCBjaGVjay0+bmFtZSkgJiYKICAgICAgICAoKCFjb25uLT5iaXRzLmNvbm5fdG9faG9zdCAmJiAhY2hlY2stPmNvbm5fdG9faG9zdCkgfHwKLSAgICAgICAgIChjb25uLT5iaXRzLmNvbm5fdG9faG9zdCAmJiBjaGVjay0+Y29ubl90b19ob3N0ICYmCi0gICAgICAgICAgIEN1cmxfcmF3X2VxdWFsKGNvbm4tPmNvbm5fdG9faG9zdC5uYW1lLCBjaGVjay0+Y29ubl90b19ob3N0KSkpICYmCisgICAgICAgIChjb25uLT5iaXRzLmNvbm5fdG9faG9zdCAmJiBjaGVjay0+Y29ubl90b19ob3N0ICYmCisgICAgICAgICBzdHJjYXNlY29tcGFyZShjb25uLT5jb25uX3RvX2hvc3QubmFtZSwgY2hlY2stPmNvbm5fdG9faG9zdCkpKSAmJgogICAgICAgICgoIWNvbm4tPmJpdHMuY29ubl90b19wb3J0ICYmIGNoZWNrLT5jb25uX3RvX3BvcnQgPT0gLTEpIHx8Ci0gICAgICAgICAoY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgJiYgY2hlY2stPmNvbm5fdG9fcG9ydCAhPSAtMSAmJgotICAgICAgICAgICBjb25uLT5jb25uX3RvX3BvcnQgPT0gY2hlY2stPmNvbm5fdG9fcG9ydCkpICYmCi0gICAgICAgKGNvbm4tPnJlbW90ZV9wb3J0ID09IGNoZWNrLT5yZW1vdGVfcG9ydCkgJiYKLSAgICAgICBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcygmY29ubi0+c3NsX2NvbmZpZywgJmNoZWNrLT5zc2xfY29uZmlnKSkgeworICAgICAgICAoY29ubi0+Yml0cy5jb25uX3RvX3BvcnQgJiYgY2hlY2stPmNvbm5fdG9fcG9ydCAhPSAtMSAmJgorICAgICAgICAgY29ubi0+Y29ubl90b19wb3J0ID09IGNoZWNrLT5jb25uX3RvX3BvcnQpKSAmJgorICAgICAgIChwb3J0ID09IGNoZWNrLT5yZW1vdGVfcG9ydCkgJiYKKyAgICAgICBzdHJjYXNlY29tcGFyZShjb25uLT5oYW5kbGVyLT5zY2hlbWUsIGNoZWNrLT5zY2hlbWUpICYmCisgICAgICAgQ3VybF9zc2xfY29uZmlnX21hdGNoZXMoc3NsX2NvbmZpZywgJmNoZWNrLT5zc2xfY29uZmlnKSkgewogICAgICAgLyogeWVzLCB3ZSBoYXZlIGEgc2Vzc2lvbiBJRCEgKi8KICAgICAgICgqZ2VuZXJhbF9hZ2UpKys7ICAgICAgICAgIC8qIGluY3JlYXNlIGdlbmVyYWwgYWdlICovCiAgICAgICBjaGVjay0+YWdlID0gKmdlbmVyYWxfYWdlOyAvKiBzZXQgdGhpcyBhcyB1c2VkIGluIHRoaXMgYWdlICovCkBAIC00MjksNyArMzQ5LDcgQEAKICAgICBzZXNzaW9uLT5zZXNzaW9uaWQgPSBOVUxMOwogICAgIHNlc3Npb24tPmFnZSA9IDA7IC8qIGZyZXNoICovCiAKLSAgICBDdXJsX2ZyZWVfc3NsX2NvbmZpZygmc2Vzc2lvbi0+c3NsX2NvbmZpZyk7CisgICAgQ3VybF9mcmVlX3ByaW1hcnlfc3NsX2NvbmZpZygmc2Vzc2lvbi0+c3NsX2NvbmZpZyk7CiAKICAgICBDdXJsX3NhZmVmcmVlKHNlc3Npb24tPm5hbWUpOwogICAgIEN1cmxfc2FmZWZyZWUoc2Vzc2lvbi0+Y29ubl90b19ob3N0KTsKQEAgLTQ0NCw3ICszNjQsNyBAQAogICBzaXplX3QgaTsKICAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YT1jb25uLT5kYXRhOwogCi0gIGZvcihpID0gMDsgaSA8IGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9uczsgaSsrKSB7CisgIGZvcihpID0gMDsgaSA8IGRhdGEtPnNldC5nZW5lcmFsX3NzbC5tYXhfc3NsX3Nlc3Npb25zOyBpKyspIHsKICAgICBzdHJ1Y3QgY3VybF9zc2xfc2Vzc2lvbiAqY2hlY2sgPSAmZGF0YS0+c3RhdGUuc2Vzc2lvbltpXTsKIAogICAgIGlmKGNoZWNrLT5zZXNzaW9uaWQgPT0gc3NsX3Nlc3Npb25pZCkgewpAQCAtNDYyLDcgKzM4Miw4IEBACiAgKi8KIENVUkxjb2RlIEN1cmxfc3NsX2FkZHNlc3Npb25pZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3NsX3Nlc3Npb25pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaWRzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCkKIHsKICAgc2l6ZV90IGk7CiAgIHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGE9Y29ubi0+ZGF0YTsgLyogdGhlIG1vdGhlciBvZiBhbGwgc3RydWN0cyAqLwpAQCAtNDcyLDEwICszOTMsMTQgQEAKICAgY2hhciAqY2xvbmVfY29ubl90b19ob3N0OwogICBpbnQgY29ubl90b19wb3J0OwogICBsb25nICpnZW5lcmFsX2FnZTsKKyAgY29uc3QgYm9vbCBpc1Byb3h5ID0gQ09OTkVDVF9QUk9YWV9TU0woKTsKKyAgc3RydWN0IHNzbF9wcmltYXJ5X2NvbmZpZyAqIGNvbnN0IHNzbF9jb25maWcgPSBpc1Byb3h5ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubi0+cHJveHlfc3NsX2NvbmZpZyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm4tPnNzbF9jb25maWc7CiAKLSAgREVCVUdBU1NFUlQoY29ubi0+c3NsX2NvbmZpZy5zZXNzaW9uaWQpOworICBERUJVR0FTU0VSVChkYXRhLT5zZXQuZ2VuZXJhbF9zc2wuc2Vzc2lvbmlkKTsKIAotICBjbG9uZV9ob3N0ID0gc3RyZHVwKGNvbm4tPmhvc3QubmFtZSk7CisgIGNsb25lX2hvc3QgPSBzdHJkdXAoaXNQcm94eSA/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lIDogY29ubi0+aG9zdC5uYW1lKTsKICAgaWYoIWNsb25lX2hvc3QpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7IC8qIGJhaWwgb3V0ICovCiAKQEAgLTUwNiwxNCArNDMxLDE0IEBACiAgIH0KIAogICAvKiBmaW5kIGFuIGVtcHR5IHNsb3QgZm9yIHVzLCBvciBmaW5kIHRoZSBvbGRlc3QgKi8KLSAgZm9yKGkgPSAxOyAoaSA8IGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9ucykgJiYKKyAgZm9yKGkgPSAxOyAoaSA8IGRhdGEtPnNldC5nZW5lcmFsX3NzbC5tYXhfc3NsX3Nlc3Npb25zKSAmJgogICAgICAgICBkYXRhLT5zdGF0ZS5zZXNzaW9uW2ldLnNlc3Npb25pZDsgaSsrKSB7CiAgICAgaWYoZGF0YS0+c3RhdGUuc2Vzc2lvbltpXS5hZ2UgPCBvbGRlc3RfYWdlKSB7CiAgICAgICBvbGRlc3RfYWdlID0gZGF0YS0+c3RhdGUuc2Vzc2lvbltpXS5hZ2U7CiAgICAgICBzdG9yZSA9ICZkYXRhLT5zdGF0ZS5zZXNzaW9uW2ldOwogICAgIH0KICAgfQotICBpZihpID09IGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9ucykKKyAgaWYoaSA9PSBkYXRhLT5zZXQuZ2VuZXJhbF9zc2wubWF4X3NzbF9zZXNzaW9ucykKICAgICAvKiBjYWNoZSBpcyBmdWxsLCB3ZSBtdXN0ICJraWxsIiB0aGUgb2xkZXN0IGVudHJ5ISAqLwogICAgIEN1cmxfc3NsX2tpbGxfc2Vzc2lvbihzdG9yZSk7CiAgIGVsc2UKQEAgLTUyOSw5ICs0NTQsMTEgQEAKICAgc3RvcmUtPm5hbWUgPSBjbG9uZV9ob3N0OyAgICAgICAgICAgICAgIC8qIGNsb25lIGhvc3QgbmFtZSAqLwogICBzdG9yZS0+Y29ubl90b19ob3N0ID0gY2xvbmVfY29ubl90b19ob3N0OyAvKiBjbG9uZSBjb25uZWN0IHRvIGhvc3QgbmFtZSAqLwogICBzdG9yZS0+Y29ubl90b19wb3J0ID0gY29ubl90b19wb3J0OyAvKiBjb25uZWN0IHRvIHBvcnQgbnVtYmVyICovCi0gIHN0b3JlLT5yZW1vdGVfcG9ydCA9IGNvbm4tPnJlbW90ZV9wb3J0OyAvKiBwb3J0IG51bWJlciAqLworICAvKiBwb3J0IG51bWJlciAqLworICBzdG9yZS0+cmVtb3RlX3BvcnQgPSBpc1Byb3h5ID8gKGludCljb25uLT5wb3J0IDogY29ubi0+cmVtb3RlX3BvcnQ7CisgIHN0b3JlLT5zY2hlbWUgPSBjb25uLT5oYW5kbGVyLT5zY2hlbWU7CiAKLSAgaWYoIUN1cmxfY2xvbmVfc3NsX2NvbmZpZygmY29ubi0+c3NsX2NvbmZpZywgJnN0b3JlLT5zc2xfY29uZmlnKSkgeworICBpZighQ3VybF9jbG9uZV9wcmltYXJ5X3NzbF9jb25maWcoc3NsX2NvbmZpZywgJnN0b3JlLT5zc2xfY29uZmlnKSkgewogICAgIHN0b3JlLT5zZXNzaW9uaWQgPSBOVUxMOyAvKiBsZXQgY2FsbGVyIGZyZWUgc2Vzc2lvbmlkICovCiAgICAgZnJlZShjbG9uZV9ob3N0KTsKICAgICBmcmVlKGNsb25lX2Nvbm5fdG9faG9zdCk7CkBAIC01NDcsNyArNDc0LDcgQEAKICAgc2l6ZV90IGk7CiAgIC8qIGtpbGwgdGhlIHNlc3Npb24gSUQgY2FjaGUgaWYgbm90IHNoYXJlZCAqLwogICBpZihkYXRhLT5zdGF0ZS5zZXNzaW9uICYmICFTU0xTRVNTSU9OX1NIQVJFRChkYXRhKSkgewotICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9uczsgaSsrKQorICAgIGZvcihpID0gMDsgaSA8IGRhdGEtPnNldC5nZW5lcmFsX3NzbC5tYXhfc3NsX3Nlc3Npb25zOyBpKyspCiAgICAgICAvKiB0aGUgc2luZ2xlLWtpbGxlciBmdW5jdGlvbiBoYW5kbGVzIGVtcHR5IHRhYmxlIHNsb3RzICovCiAgICAgICBDdXJsX3NzbF9raWxsX3Nlc3Npb24oJmRhdGEtPnN0YXRlLnNlc3Npb25baV0pOwogCkBAIC01NTgsNiArNDg1LDQzIEBACiAgIGN1cmxzc2xfY2xvc2VfYWxsKGRhdGEpOwogfQogCisjaWYgZGVmaW5lZChVU0VfU1NMRUFZKSB8fCBkZWZpbmVkKFVTRV9HTlVUTFMpIHx8IGRlZmluZWQoVVNFX1NDSEFOTkVMKSB8fCBcCisgICAgZGVmaW5lZChVU0VfREFSV0lOU1NMKSB8fCBkZWZpbmVkKFVTRV9OU1MpCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBPcGVuU1NMLCBHbnVUTFMsIGRhcndpbnNzbCwgYW5kIHNjaGFubmVsIG9ubHkuICovCitpbnQgQ3VybF9zc2xfZ2V0c29jayhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGN1cmxfc29ja2V0X3QgKnNvY2tzLAorICAgICAgICAgICAgICAgICAgICAgaW50IG51bXNvY2tzKQoreworICBzdHJ1Y3Qgc3NsX2Nvbm5lY3RfZGF0YSAqY29ubnNzbCA9ICZjb25uLT5zc2xbRklSU1RTT0NLRVRdOworCisgIGlmKCFudW1zb2NrcykKKyAgICByZXR1cm4gR0VUU09DS19CTEFOSzsKKworICBpZihjb25uc3NsLT5jb25uZWN0aW5nX3N0YXRlID09IHNzbF9jb25uZWN0XzJfd3JpdGluZykgeworICAgIC8qIHdyaXRlIG1vZGUgKi8KKyAgICBzb2Nrc1swXSA9IGNvbm4tPnNvY2tbRklSU1RTT0NLRVRdOworICAgIHJldHVybiBHRVRTT0NLX1dSSVRFU09DSygwKTsKKyAgfQorICBlbHNlIGlmKGNvbm5zc2wtPmNvbm5lY3Rpbmdfc3RhdGUgPT0gc3NsX2Nvbm5lY3RfMl9yZWFkaW5nKSB7CisgICAgLyogcmVhZCBtb2RlICovCisgICAgc29ja3NbMF0gPSBjb25uLT5zb2NrW0ZJUlNUU09DS0VUXTsKKyAgICByZXR1cm4gR0VUU09DS19SRUFEU09DSygwKTsKKyAgfQorCisgIHJldHVybiBHRVRTT0NLX0JMQU5LOworfQorI2Vsc2UKK2ludCBDdXJsX3NzbF9nZXRzb2NrKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRfdCAqc29ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2NrcykKK3sKKyAgKHZvaWQpY29ubjsKKyAgKHZvaWQpc29ja3M7CisgICh2b2lkKW51bXNvY2tzOworICByZXR1cm4gR0VUU09DS19CTEFOSzsKK30KKy8qIFVTRV9TU0xFQVkgfHwgVVNFX0dOVVRMUyB8fCBVU0VfU0NIQU5ORUwgfHwgVVNFX0RBUldJTlNTTCB8fCBVU0VfTlNTICovCisjZW5kaWYKKwogdm9pZCBDdXJsX3NzbF9jbG9zZShzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sIGludCBzb2NraW5kZXgpCiB7CiAgIERFQlVHQVNTRVJUKChzb2NraW5kZXggPD0gMSkgJiYgKHNvY2tpbmRleCA+PSAtMSkpOwpAQCAtNjE1LDcgKzU3OSw3IEBACiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CiAKICAgLyogc3RvcmUgdGhlIGluZm8gaW4gdGhlIFNTTCBzZWN0aW9uICovCi0gIGRhdGEtPnNldC5zc2wubWF4X3NzbF9zZXNzaW9ucyA9IGFtb3VudDsKKyAgZGF0YS0+c2V0LmdlbmVyYWxfc3NsLm1heF9zc2xfc2Vzc2lvbnMgPSBhbW91bnQ7CiAgIGRhdGEtPnN0YXRlLnNlc3Npb24gPSBzZXNzaW9uOwogICBkYXRhLT5zdGF0ZS5zZXNzaW9uYWdlID0gMTsgLyogdGhpcyBpcyBicmFuZCBuZXcgKi8KICAgcmV0dXJuIENVUkxFX09LOwpAQCAtNjkxLDkgKzY1NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWx1ZWxlbikKIHsKLSAgc3RydWN0IGN1cmxfY2VydGluZm8gKiBjaSA9ICZkYXRhLT5pbmZvLmNlcnRzOwotICBjaGFyICogb3V0cHV0OwotICBzdHJ1Y3QgY3VybF9zbGlzdCAqIG5sOworICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqY2kgPSAmZGF0YS0+aW5mby5jZXJ0czsKKyAgY2hhciAqb3V0cHV0OworICBzdHJ1Y3QgY3VybF9zbGlzdCAqbmw7CiAgIENVUkxjb2RlIHJlc3VsdCA9IENVUkxFX09LOwogICBzaXplX3QgbGFiZWxsZW4gPSBzdHJsZW4obGFiZWwpOwogICBzaXplX3Qgb3V0bGVuID0gbGFiZWxsZW4gKyAxICsgdmFsdWVsZW4gKyAxOyAvKiBsYWJlbDp2YWx1ZVwwICovCkBAIC03MzYsMTEgKzcwMCwxNiBAQAogICByZXR1cm4gQ3VybF9zc2xfcHVzaF9jZXJ0aW5mb19sZW4oZGF0YSwgY2VydG51bSwgbGFiZWwsIHZhbHVlLCB2YWx1ZWxlbik7CiB9CiAKLWludCBDdXJsX3NzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHksCi0gICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKQorQ1VSTGNvZGUgQ3VybF9zc2xfcmFuZG9tKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKQogewotICByZXR1cm4gY3VybHNzbF9yYW5kb20oZGF0YSwgZW50cm9weSwgbGVuZ3RoKTsKKyAgaW50IHJjID0gY3VybHNzbF9yYW5kb20oZGF0YSwgZW50cm9weSwgbGVuZ3RoKTsKKyAgaWYocmMpIHsKKyAgICBmYWlsZihkYXRhLCAiUFJORyBzZWVkaW5nIGZhaWxlZCIpOworICAgIHJldHVybiBDVVJMRV9GQUlMRURfSU5JVDsgLyogcG9zc2libHkgd2VpcmQgcmV0dXJuIGNvZGUgKi8KKyAgfQorICByZXR1cm4gQ1VSTEVfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9saWIvdnRscy92dGxzLmggYi9saWIvdnRscy92dGxzLmgKaW5kZXggYTQxZWNjMy4uMmFhYmVkYSAxMDA2NDQKLS0tIGEvbGliL3Z0bHMvdnRscy5oCisrKyBiL2xpYi92dGxzL3Z0bHMuaApAQCAtNTAsMTMgKzUwLDI0IEBACiAjZGVmaW5lIEFMUE5fSFRUUF8xXzFfTEVOR1RIIDgKICNkZWZpbmUgQUxQTl9IVFRQXzFfMSAiaHR0cC8xLjEiCiAKLWJvb2wgQ3VybF9zc2xfY29uZmlnX21hdGNoZXMoc3RydWN0IHNzbF9jb25maWdfZGF0YSogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNzbF9jb25maWdfZGF0YSogbmVlZGxlKTsKLWJvb2wgQ3VybF9jbG9uZV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfY29uZmlnX2RhdGEqIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc2xfY29uZmlnX2RhdGEqIGRlc3QpOwotdm9pZCBDdXJsX2ZyZWVfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX2NvbmZpZ19kYXRhKiBzc2xjKTsKKy8qIHNldCBvZiBoZWxwZXIgbWFjcm9zIGZvciB0aGUgYmFja2VuZHMgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IGZpZWxkcy4gRm9yIHRoZQorICAgcHJveHkgb3IgZm9yIHRoZSByZW1vdGUgaG9zdCAtIHRvIHByb3Blcmx5IHN1cHBvcnQgSFRUUFMgcHJveHkgKi8KIAotdW5zaWduZWQgaW50IEN1cmxfcmFuZChzdHJ1Y3QgQ3VybF9lYXN5ICopOworI2RlZmluZSBTU0xfSVNfUFJPWFkoKSAoQ1VSTFBST1hZX0hUVFBTID09IGNvbm4tPmh0dHBfcHJveHkucHJveHl0eXBlICYmIFwKKyAgc3NsX2Nvbm5lY3Rpb25fY29tcGxldGUgIT0gY29ubi0+cHJveHlfc3NsW2Nvbm4tPnNvY2tbU0VDT05EQVJZU09DS0VUXSA9PSBcCisgIENVUkxfU09DS0VUX0JBRCA/IEZJUlNUU09DS0VUIDogU0VDT05EQVJZU09DS0VUXS5zdGF0ZSkKKyNkZWZpbmUgU1NMX1NFVF9PUFRJT04odmFyKSAoU1NMX0lTX1BST1hZKCkgPyBkYXRhLT5zZXQucHJveHlfc3NsLnZhciA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2V0LnNzbC52YXIpCisjZGVmaW5lIFNTTF9DT05OX0NPTkZJRyh2YXIpIChTU0xfSVNfUFJPWFkoKSA/ICAgICAgICAgIFwKKyAgY29ubi0+cHJveHlfc3NsX2NvbmZpZy52YXIgOiBjb25uLT5zc2xfY29uZmlnLnZhcikKKworYm9vbCBDdXJsX3NzbF9jb25maWdfbWF0Y2hlcyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnKiBuZWVkbGUpOworYm9vbCBDdXJsX2Nsb25lX3ByaW1hcnlfc3NsX2NvbmZpZyhzdHJ1Y3Qgc3NsX3ByaW1hcnlfY29uZmlnICpzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcgKmRlc3QpOwordm9pZCBDdXJsX2ZyZWVfcHJpbWFyeV9zc2xfY29uZmlnKHN0cnVjdCBzc2xfcHJpbWFyeV9jb25maWcqIHNzbGMpOworaW50IEN1cmxfc3NsX2dldHNvY2soc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCBjdXJsX3NvY2tldF90ICpzb2NrcywKKyAgICAgICAgICAgICAgICAgICAgIGludCBudW1zb2Nrcyk7CiAKIGludCBDdXJsX3NzbF9iYWNrZW5kKHZvaWQpOwogCkBAIC04NywxMiArOTgsMTIgQEAKIC8qIENlcnRpZmljYXRlIGluZm9ybWF0aW9uIGxpc3QgaGFuZGxpbmcuICovCiAKIHZvaWQgQ3VybF9zc2xfZnJlZV9jZXJ0aW5mbyhzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhKTsKLUNVUkxjb2RlIEN1cmxfc3NsX2luaXRfY2VydGluZm8oc3RydWN0IEN1cmxfZWFzeSAqIGRhdGEsIGludCBudW0pOwotQ1VSTGNvZGUgQ3VybF9zc2xfcHVzaF9jZXJ0aW5mb19sZW4oc3RydWN0IEN1cmxfZWFzeSAqIGRhdGEsIGludCBjZXJ0bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGxhYmVsLCBjb25zdCBjaGFyICogdmFsdWUsCitDVVJMY29kZSBDdXJsX3NzbF9pbml0X2NlcnRpbmZvKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBudW0pOworQ1VSTGNvZGUgQ3VybF9zc2xfcHVzaF9jZXJ0aW5mb19sZW4oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IGNlcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFsdWVsZW4pOwotQ1VSTGNvZGUgQ3VybF9zc2xfcHVzaF9jZXJ0aW5mbyhzdHJ1Y3QgQ3VybF9lYXN5ICogZGF0YSwgaW50IGNlcnRudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBsYWJlbCwgY29uc3QgY2hhciAqIHZhbHVlKTsKK0NVUkxjb2RlIEN1cmxfc3NsX3B1c2hfY2VydGluZm8oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgaW50IGNlcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBjaGFyICp2YWx1ZSk7CiAKIC8qIEZ1bmN0aW9ucyB0byBiZSB1c2VkIGJ5IFNTTCBsaWJyYXJ5IGFkYXB0YXRpb24gZnVuY3Rpb25zICovCiAKQEAgLTExNiw3ICsxMjcsOCBAQAogICovCiBib29sIEN1cmxfc3NsX2dldHNlc3Npb25pZChzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqc3NsX3Nlc3Npb25pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWRzaXplKTsgLyogc2V0IDAgaWYgdW5rbm93biAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHNpemUsIC8qIHNldCAwIGlmIHVua25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NraW5kZXgpOwogLyogYWRkIGEgbmV3IHNlc3Npb24gSUQKICAqIFNlc3Npb25pZCBtdXRleCBtdXN0IGJlIGxvY2tlZCAoc2VlIEN1cmxfc3NsX3Nlc3Npb25pZF9sb2NrKS4KICAqIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IGl0IGhhcyBwcm9wZXJseSBzaGFyZWQgb3duZXJzaGlwIG9mIHRoaXMgc2Vzc2lvbmlkCkBAIC0xMjQsNyArMTM2LDggQEAKICAqLwogQ1VSTGNvZGUgQ3VybF9zc2xfYWRkc2Vzc2lvbmlkKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzc2xfc2Vzc2lvbmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpZHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tpbmRleCk7CiAvKiBLaWxsIGEgc2luZ2xlIHNlc3Npb24gSUQgZW50cnkgaW4gdGhlIGNhY2hlCiAgKiBTZXNzaW9uaWQgbXV0ZXggbXVzdCBiZSBsb2NrZWQgKHNlZSBDdXJsX3NzbF9zZXNzaW9uaWRfbG9jaykuCiAgKiBUaGlzIHdpbGwgY2FsbCBlbmdpbmUtc3BlY2lmaWMgY3VybHNzbF9zZXNzaW9uX2ZyZWUgZnVuY3Rpb24sIHdoaWNoIG11c3QKQEAgLTE0MCwxMCArMTUzLDkgQEAKICAqLwogdm9pZCBDdXJsX3NzbF9kZWxzZXNzaW9uaWQoc3RydWN0IGNvbm5lY3RkYXRhICpjb25uLCB2b2lkICpzc2xfc2Vzc2lvbmlkKTsKIAotLyogZ2V0IE4gcmFuZG9tIGJ5dGVzIGludG8gdGhlIGJ1ZmZlciwgcmV0dXJuIDAgaWYgYSBmaW5kIHJhbmRvbSBpcyBmaWxsZWQKLSAgIGluICovCi1pbnQgQ3VybF9zc2xfcmFuZG9tKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CisvKiBnZXQgTiByYW5kb20gYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCitDVVJMY29kZSBDdXJsX3NzbF9yYW5kb20oc3RydWN0IEN1cmxfZWFzeSAqZGF0YSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpOwogQ1VSTGNvZGUgQ3VybF9zc2xfbWQ1c3VtKHVuc2lnbmVkIGNoYXIgKnRtcCwgLyogaW5wdXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdG1wbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1kNXN1bSwgLyogb3V0cHV0ICovCmRpZmYgLS1naXQgYS9saWIveDUwOWFzbjEuYyBiL2xpYi94NTA5YXNuMS5jCmluZGV4IGUxN2JjZDkuLmFjZDk4ZTQgMTAwNjQ0Ci0tLSBhL2xpYi94NTA5YXNuMS5jCisrKyBiL2xpYi94NTA5YXNuMS5jCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KICNpbmNsdWRlICJ1cmxkYXRhLmgiCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAjaW5jbHVkZSAiaG9zdGNoZWNrLmgiCiAjaW5jbHVkZSAidnRscy92dGxzLmgiCiAjaW5jbHVkZSAic2VuZGYuaCIKQEAgLTQwLDYgKzQwLDkgQEAKICNpbmNsdWRlICJjdXJsX21lbW9yeS5oIgogI2luY2x1ZGUgIm1lbWRlYnVnLmgiCiAKKy8qIEZvciBvdmVyZmxvdyBjaGVja3MuICovCisjZGVmaW5lIENVUkxfU0laRV9UX01BWCAgICAgICAgICgoc2l6ZV90KS0xKQorCiAKIC8qIEFTTi4xIE9JRHMuICovCiBzdGF0aWMgY29uc3QgY2hhciAgICAgICBjbk9JRFtdID0gIjIuNS40LjMiOyAgICAvKiBDb21tb24gbmFtZS4gKi8KQEAgLTEwNSw4ICsxMDgsOCBAQAogICovCiAKIAotY29uc3QgY2hhciAqIEN1cmxfZ2V0QVNOMUVsZW1lbnQoY3VybF9hc24xRWxlbWVudCAqIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogYmVnLCBjb25zdCBjaGFyICogZW5kKQorY29uc3QgY2hhciAqQ3VybF9nZXRBU04xRWxlbWVudChjdXJsX2FzbjFFbGVtZW50ICplbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCkKIHsKICAgdW5zaWduZWQgY2hhciBiOwogICB1bnNpZ25lZCBsb25nIGxlbjsKQEAgLTExNiw4ICsxMTksOCBAQAogICAgICBlbmRpbmcgYXQgYGVuZCcuCiAgICAgIFJldHVybnMgYSBwb2ludGVyIGluIHNvdXJjZSBzdHJpbmcgYWZ0ZXIgdGhlIHBhcnNlZCBlbGVtZW50LCBvciBOVUxMCiAgICAgIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KLQotICBpZihiZWcgPj0gZW5kIHx8ICEqYmVnKQorICBpZighYmVnIHx8ICFlbmQgfHwgYmVnID49IGVuZCB8fCAhKmJlZyB8fAorICAgICAoc2l6ZV90KShlbmQgLSBiZWcpID4gQ1VSTF9BU04xX01BWCkKICAgICByZXR1cm4gKGNvbnN0IGNoYXIgKikgTlVMTDsKIAogICAvKiBQcm9jZXNzIGhlYWRlciBieXRlLiAqLwpAQCAtMTUyLDcgKzE1NSw3IEBACiAgICAgZWxlbS0+ZW5kID0gYmVnOwogICAgIHJldHVybiBiZWcgKyAxOwogICB9Ci0gIGVsc2UgaWYoYmVnICsgYiA+IGVuZCkKKyAgZWxzZSBpZigodW5zaWduZWQpYiA+IChzaXplX3QpKGVuZCAtIGJlZykpCiAgICAgcmV0dXJuIChjb25zdCBjaGFyICopIE5VTEw7IC8qIERvZXMgbm90IGZpdCBpbiBzb3VyY2UuICovCiAgIGVsc2UgewogICAgIC8qIEdldCBsb25nIGxlbmd0aC4gKi8KQEAgLTE2MywyOCArMTY2LDI4IEBACiAgICAgICBsZW4gPSAobGVuIDw8IDgpIHwgKHVuc2lnbmVkIGNoYXIpICpiZWcrKzsKICAgICB9IHdoaWxlKC0tYik7CiAgIH0KLSAgaWYoKHVuc2lnbmVkIGxvbmcpIChlbmQgLSBiZWcpIDwgbGVuKQorICBpZihsZW4gPiAoc2l6ZV90KShlbmQgLSBiZWcpKQogICAgIHJldHVybiAoY29uc3QgY2hhciAqKSBOVUxMOyAgLyogRWxlbWVudCBkYXRhIGRvZXMgbm90IGZpdCBpbiBzb3VyY2UuICovCiAgIGVsZW0tPmJlZyA9IGJlZzsKICAgZWxlbS0+ZW5kID0gYmVnICsgbGVuOwogICByZXR1cm4gZWxlbS0+ZW5kOwogfQogCi1zdGF0aWMgY29uc3QgY3VybF9PSUQgKiBzZWFyY2hPSUQoY29uc3QgY2hhciAqIG9pZCkKK3N0YXRpYyBjb25zdCBjdXJsX09JRCAqIHNlYXJjaE9JRChjb25zdCBjaGFyICpvaWQpCiB7Ci0gIGNvbnN0IGN1cmxfT0lEICogb3A7CisgIGNvbnN0IGN1cmxfT0lEICpvcDsKIAogICAvKiBTZWFyY2ggdGhlIG51bGwgdGVybWluYXRlZCBPSUQgb3IgT0lEIGlkZW50aWZpZXIgaW4gbG9jYWwgdGFibGUuCiAgICAgIFJldHVybiB0aGUgdGFibGUgZW50cnkgcG9pbnRlciBvciBOVUxMIGlmIG5vdCBmb3VuZC4gKi8KIAogICBmb3Iob3AgPSBPSUR0YWJsZTsgb3AtPm51bW9pZDsgb3ArKykKLSAgICBpZighc3RyY21wKG9wLT5udW1vaWQsIG9pZCkgfHwgY3VybF9zdHJlcXVhbChvcC0+dGV4dG9pZCwgb2lkKSkKKyAgICBpZighc3RyY21wKG9wLT5udW1vaWQsIG9pZCkgfHwgc3RyY2FzZWNvbXBhcmUob3AtPnRleHRvaWQsIG9pZCkpCiAgICAgICByZXR1cm4gb3A7CiAKICAgcmV0dXJuIChjb25zdCBjdXJsX09JRCAqKSBOVUxMOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGJvb2wyc3RyKGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpCitzdGF0aWMgY29uc3QgY2hhciAqYm9vbDJzdHIoY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpCiB7CiAgIC8qIENvbnZlcnQgYW4gQVNOLjEgQm9vbGVhbiB2YWx1ZSBpbnRvIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCiAgICAgIFJldHVybiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBpZiBzb3VyY2UgaXMgbm90IGFuCkBAIC0xOTUsMjIgKzE5OCwyNCBAQAogICByZXR1cm4gc3RyZHVwKCpiZWc/ICJUUlVFIjogIkZBTFNFIik7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogb2N0ZXQyc3RyKGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpCitzdGF0aWMgY29uc3QgY2hhciAqb2N0ZXQyc3RyKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICBzaXplX3QgbiA9IGVuZCAtIGJlZzsKLSAgY2hhciAqIGJ1ZjsKKyAgY2hhciAqYnVmID0gTlVMTDsKIAogICAvKiBDb252ZXJ0IGFuIEFTTi4xIG9jdGV0IHN0cmluZyB0byBhIHByaW50YWJsZSBzdHJpbmcuCiAgICAgIFJldHVybiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnMuICovCiAKLSAgYnVmID0gbWFsbG9jKDMgKiBuICsgMSk7Ci0gIGlmKGJ1ZikKLSAgICBmb3IobiA9IDA7IGJlZyA8IGVuZDsgbiArPSAzKQotICAgICAgc25wcmludGYoYnVmICsgbiwgNCwgIiUwMng6IiwgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIGJlZysrKTsKKyAgaWYobiA8PSAoQ1VSTF9TSVpFX1RfTUFYIC0gMSkgLyAzKSB7CisgICAgYnVmID0gbWFsbG9jKDMgKiBuICsgMSk7CisgICAgaWYoYnVmKQorICAgICAgZm9yKG4gPSAwOyBiZWcgPCBlbmQ7IG4gKz0gMykKKyAgICAgICAgc25wcmludGYoYnVmICsgbiwgNCwgIiUwMng6IiwgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIGJlZysrKTsKKyAgfQogICByZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGJpdDJzdHIoY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK3N0YXRpYyBjb25zdCBjaGFyICpiaXQyc3RyKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICAvKiBDb252ZXJ0IGFuIEFTTi4xIGJpdCBzdHJpbmcgdG8gYSBwcmludGFibGUgc3RyaW5nLgogICAgICBSZXR1cm4gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJzLiAqLwpAQCAtMjIwLDcgKzIyNSw3IEBACiAgIHJldHVybiBvY3RldDJzdHIoYmVnLCBlbmQpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGludDJzdHIoY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK3N0YXRpYyBjb25zdCBjaGFyICppbnQyc3RyKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICBsb25nIHZhbCA9IDA7CiAgIHNpemVfdCBuID0gZW5kIC0gYmVnOwpAQCAtMjQ2LDE0ICsyNTEsMTQgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXV0Zjhhc24xc3RyKGNoYXIgKiAqIHRvLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqIGZyb20sIGNvbnN0IGNoYXIgKiBlbmQpCit1dGY4YXNuMXN0cihjaGFyICoqdG8sIGludCB0eXBlLCBjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICplbmQpCiB7CiAgIHNpemVfdCBpbmxlbmd0aCA9IGVuZCAtIGZyb207CiAgIGludCBzaXplID0gMTsKICAgc2l6ZV90IG91dGxlbmd0aDsKICAgaW50IGNoYXJzaXplOwogICB1bnNpZ25lZCBpbnQgd2M7Ci0gIGNoYXIgKiBidWY7CisgIGNoYXIgKmJ1ZjsKIAogICAvKiBQZXJmb3JtIGEgbGF6eSBjb252ZXJzaW9uIGZyb20gYW4gQVNOLjEgdHlwZWQgc3RyaW5nIHRvIFVURjguIEFsbG9jYXRlIHRoZQogICAgICBkZXN0aW5hdGlvbiBidWZmZXIgZHluYW1pY2FsbHkuIFRoZSBhbGxvY2F0aW9uIHNpemUgd2lsbCBub3JtYWxseSBiZSB0b28KQEAgLTI4Miw2ICsyODcsOCBAQAogCiAgIGlmKGlubGVuZ3RoICUgc2l6ZSkKICAgICByZXR1cm4gLTE7ICAvKiBMZW5ndGggaW5jb25zaXN0ZW50IHdpdGggY2hhcmFjdGVyIHNpemUuICovCisgIGlmKGlubGVuZ3RoIC8gc2l6ZSA+IChDVVJMX1NJWkVfVF9NQVggLSAxKSAvIDQpCisgICAgcmV0dXJuIC0xOyAgLyogVG9vIGJpZy4gKi8KICAgYnVmID0gbWFsbG9jKDQgKiAoaW5sZW5ndGggLyBzaXplKSArIDEpOwogICBpZighYnVmKQogICAgIHJldHVybiAtMTsgIC8qIE5vdCBlbm91Z2ggbWVtb3J5LiAqLwpAQCAtMzM1LDkgKzM0Miw5IEBACiAgIHJldHVybiBvdXRsZW5ndGg7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogc3RyaW5nMnN0cihpbnQgdHlwZSwgY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJpbmcyc3RyKGludCB0eXBlLCBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCkKIHsKLSAgY2hhciAqIGJ1ZjsKKyAgY2hhciAqYnVmOwogCiAgIC8qIENvbnZlcnQgYW4gQVNOLjEgU3RyaW5nIGludG8gaXRzIFVURi04IHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgICAgUmV0dXJuIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KQEAgLTM0Nyw3ICszNTQsNyBAQAogICByZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgaW50IGVuY29kZVVpbnQoY2hhciAqIGJ1ZiwgaW50IG4sIHVuc2lnbmVkIGludCB4KQorc3RhdGljIGludCBlbmNvZGVVaW50KGNoYXIgKmJ1ZiwgaW50IG4sIHVuc2lnbmVkIGludCB4KQogewogICBpbnQgaSA9IDA7CiAgIHVuc2lnbmVkIGludCB5ID0geCAvIDEwOwpAQCAtMzY3LDcgKzM3NCw3IEBACiAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IGVuY29kZU9JRChjaGFyICogYnVmLCBpbnQgbiwgY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK3N0YXRpYyBpbnQgZW5jb2RlT0lEKGNoYXIgKmJ1ZiwgaW50IG4sIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewogICBpbnQgaSA9IDA7CiAgIHVuc2lnbmVkIGludCB4OwpAQCAtNDA2LDkgKzQxMyw5IEBACiAgIHJldHVybiBpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIE9JRDJzdHIoY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCwgYm9vbCBzeW1ib2xpYykKK3N0YXRpYyBjb25zdCBjaGFyICpPSUQyc3RyKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kLCBib29sIHN5bWJvbGljKQogewotICBjaGFyICogYnVmID0gKGNoYXIgKikgTlVMTDsKKyAgY2hhciAqYnVmID0gKGNoYXIgKikgTlVMTDsKICAgY29uc3QgY3VybF9PSUQgKiBvcDsKICAgaW50IG47CiAKQEAgLTQzNiwxNCArNDQzLDE0IEBACiAgIHJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogR1RpbWUyc3RyKGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpCitzdGF0aWMgY29uc3QgY2hhciAqR1RpbWUyc3RyKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKQogewotICBjb25zdCBjaGFyICogdHpwOwotICBjb25zdCBjaGFyICogZnJhY3A7CisgIGNvbnN0IGNoYXIgKnR6cDsKKyAgY29uc3QgY2hhciAqZnJhY3A7CiAgIGNoYXIgc2VjMSwgc2VjMjsKICAgc2l6ZV90IGZyYWNsOwogICBzaXplX3QgdHpsOwotICBjb25zdCBjaGFyICogc2VwID0gIiI7CisgIGNvbnN0IGNoYXIgKnNlcCA9ICIiOwogCiAgIC8qIENvbnZlcnQgYW4gQVNOLjEgR2VuZXJhbGl6ZWQgdGltZSB0byBhIHByaW50YWJsZSBzdHJpbmcuCiAgICAgIFJldHVybiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZywgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnMuICovCkBAIC00OTksMTEgKzUwNiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICBzZXAsIHR6bCwgdHpwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBVVGltZTJzdHIoY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK3N0YXRpYyBjb25zdCBjaGFyICpVVGltZTJzdHIoY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpCiB7Ci0gIGNvbnN0IGNoYXIgKiB0enA7CisgIGNvbnN0IGNoYXIgKnR6cDsKICAgc2l6ZV90IHR6bDsKLSAgY29uc3QgY2hhciAqIHNlYzsKKyAgY29uc3QgY2hhciAqc2VjOwogCiAgIC8qIENvbnZlcnQgYW4gQVNOLjEgVVRDIHRpbWUgdG8gYSBwcmludGFibGUgc3RyaW5nLgogICAgICBSZXR1cm4gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJzLiAqLwpAQCAtNTM4LDcgKzU0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHR6bCwgdHpwKTsKIH0KIAotY29uc3QgY2hhciAqIEN1cmxfQVNOMXRvc3RyKGN1cmxfYXNuMUVsZW1lbnQgKiBlbGVtLCBpbnQgdHlwZSkKK2NvbnN0IGNoYXIgKkN1cmxfQVNOMXRvc3RyKGN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKQogewogICAvKiBDb252ZXJ0IGFuIEFTTi4xIGVsZW1lbnQgdG8gYSBwcmludGFibGUgc3RyaW5nLgogICAgICBSZXR1cm4gdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJzLiAqLwpAQCAtNTgxLDE3ICs1ODgsMTcgQEAKICAgcmV0dXJuIChjb25zdCBjaGFyICopIE5VTEw7ICAgLyogVW5zdXBwb3J0ZWQuICovCiB9CiAKLXN0YXRpYyBzc2l6ZV90IGVuY29kZUROKGNoYXIgKiBidWYsIHNpemVfdCBuLCBjdXJsX2FzbjFFbGVtZW50ICogZG4pCitzdGF0aWMgc3NpemVfdCBlbmNvZGVETihjaGFyICpidWYsIHNpemVfdCBuLCBjdXJsX2FzbjFFbGVtZW50ICpkbikKIHsKICAgY3VybF9hc24xRWxlbWVudCByZG47CiAgIGN1cmxfYXNuMUVsZW1lbnQgYXR2OwogICBjdXJsX2FzbjFFbGVtZW50IG9pZDsKICAgY3VybF9hc24xRWxlbWVudCB2YWx1ZTsKICAgc2l6ZV90IGwgPSAwOwotICBjb25zdCBjaGFyICogcDE7Ci0gIGNvbnN0IGNoYXIgKiBwMjsKLSAgY29uc3QgY2hhciAqIHAzOwotICBjb25zdCBjaGFyICogc3RyOworICBjb25zdCBjaGFyICpwMTsKKyAgY29uc3QgY2hhciAqcDI7CisgIGNvbnN0IGNoYXIgKnAzOworICBjb25zdCBjaGFyICpzdHI7CiAKICAgLyogQVNDSUkgZW5jb2RlIGRpc3Rpbmd1aXNoZWQgbmFtZSBhdCBgZG4nIGludG8gdGhlIGBuJy1ieXRlIGJ1ZmZlciBhdCBgYnVmJy4KICAgICAgUmV0dXJuIHRoZSB0b3RhbCBzdHJpbmcgbGVuZ3RoLCBldmVuIGlmIGxhcmdlciB0aGFuIGBuJy4gKi8KQEAgLTY0Nyw5ICs2NTQsOSBAQAogICByZXR1cm4gbDsKIH0KIAotY29uc3QgY2hhciAqIEN1cmxfRE50b3N0cihjdXJsX2FzbjFFbGVtZW50ICogZG4pCitjb25zdCBjaGFyICpDdXJsX0ROdG9zdHIoY3VybF9hc24xRWxlbWVudCAqZG4pCiB7Ci0gIGNoYXIgKiBidWYgPSAoY2hhciAqKSBOVUxMOworICBjaGFyICpidWYgPSAoY2hhciAqKSBOVUxMOwogICBzc2l6ZV90IG4gPSBlbmNvZGVETihidWYsIDAsIGRuKTsKIAogICAvKiBDb252ZXJ0IGFuIEFTTi4xIGRpc3Rpbmd1aXNoZWQgbmFtZSBpbnRvIGEgcHJpbnRhYmxlIHN0cmluZy4KQEAgLTY2OSwxMiArNjc2LDEyIEBACiAgKiBYNTA5IHBhcnNlci4KICAqLwogCi12b2lkIEN1cmxfcGFyc2VYNTA5KGN1cmxfWDUwOWNlcnRpZmljYXRlICogY2VydCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCkKK2ludCBDdXJsX3BhcnNlWDUwOShjdXJsX1g1MDljZXJ0aWZpY2F0ZSAqY2VydCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCkKIHsKICAgY3VybF9hc24xRWxlbWVudCBlbGVtOwogICBjdXJsX2FzbjFFbGVtZW50IHRic0NlcnRpZmljYXRlOwotICBjb25zdCBjaGFyICogY2NwOworICBjb25zdCBjaGFyICpjY3A7CiAgIHN0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRWZXJzaW9uID0gMDsgIC8qIHYxLiAqLwogCiAgIC8qIEFTTi4xIHBhcnNlIGFuIFg1MDkgY2VydGlmaWNhdGUgaW50byBzdHJ1Y3R1cmUgc3ViZmllbGRzLgpAQCAtNjg2LDcgKzY5Myw4IEBACiAgIGNlcnQtPmNlcnRpZmljYXRlLmVuZCA9IGVuZDsKIAogICAvKiBHZXQgdGhlIHNlcXVlbmNlIGNvbnRlbnQuICovCi0gIEN1cmxfZ2V0QVNOMUVsZW1lbnQoJmVsZW0sIGJlZywgZW5kKTsKKyAgaWYoIUN1cmxfZ2V0QVNOMUVsZW1lbnQoJmVsZW0sIGJlZywgZW5kKSkKKyAgICByZXR1cm4gLTE7ICAvKiBJbnZhbGlkIGJvdW5kcy9zaXplLiAqLwogICBiZWcgPSBlbGVtLmJlZzsKICAgZW5kID0gZWxlbS5lbmQ7CiAKQEAgLTc0OSw5ICs3NTcsMTAgQEAKICAgfQogICBpZihlbGVtLnRhZyA9PSAzKQogICAgIEN1cmxfZ2V0QVNOMUVsZW1lbnQoJmNlcnQtPmV4dGVuc2lvbnMsIGVsZW0uYmVnLCBlbGVtLmVuZCk7CisgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc2l6ZV90IGNvcHlTdWJzdHJpbmcoY2hhciAqIHRvLCBjb25zdCBjaGFyICogZnJvbSkKK3N0YXRpYyBzaXplX3QgY29weVN1YnN0cmluZyhjaGFyICp0bywgY29uc3QgY2hhciAqZnJvbSkKIHsKICAgc2l6ZV90IGk7CiAKQEAgLTc2OCw4ICs3NzcsOCBAQAogICByZXR1cm4gaTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKiBkdW1wQWxnbyhjdXJsX2FzbjFFbGVtZW50ICogcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpCitzdGF0aWMgY29uc3QgY2hhciAqZHVtcEFsZ28oY3VybF9hc24xRWxlbWVudCAqcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpCiB7CiAgIGN1cmxfYXNuMUVsZW1lbnQgb2lkOwogCkBAIC03ODQsMTAgKzc5MywxMCBAQAogICByZXR1cm4gT0lEMnN0cihvaWQuYmVnLCBvaWQuZW5kLCBUUlVFKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fcHVia2V5X2ZpZWxkKHN0cnVjdCBDdXJsX2Vhc3kgKiBkYXRhLCBpbnQgY2VydG51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogbGFiZWwsIGN1cmxfYXNuMUVsZW1lbnQgKiBlbGVtKQorc3RhdGljIHZvaWQgZG9fcHVia2V5X2ZpZWxkKHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjZXJ0bnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjdXJsX2FzbjFFbGVtZW50ICplbGVtKQogewotICBjb25zdCBjaGFyICogb3V0cHV0OworICBjb25zdCBjaGFyICpvdXRwdXQ7CiAKICAgLyogR2VuZXJhdGUgYSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiByZWNvcmQgZm9yIHRoZSBwdWJsaWMga2V5LiAqLwogCkBAIC04MDEsMTQgKzgxMCwxNCBAQAogICB9CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3B1YmtleShzdHJ1Y3QgQ3VybF9lYXN5ICogZGF0YSwgaW50IGNlcnRudW0sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGFsZ28sIGN1cmxfYXNuMUVsZW1lbnQgKiBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICBjdXJsX2FzbjFFbGVtZW50ICogcHVia2V5KQorc3RhdGljIHZvaWQgZG9fcHVia2V5KHN0cnVjdCBDdXJsX2Vhc3kgKmRhdGEsIGludCBjZXJ0bnVtLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFsZ28sIGN1cmxfYXNuMUVsZW1lbnQgKnBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgIGN1cmxfYXNuMUVsZW1lbnQgKnB1YmtleSkKIHsKICAgY3VybF9hc24xRWxlbWVudCBlbGVtOwogICBjdXJsX2FzbjFFbGVtZW50IHBrOwotICBjb25zdCBjaGFyICogcDsKLSAgY29uc3QgY2hhciAqIHE7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnE7CiAgIHVuc2lnbmVkIGxvbmcgbGVuOwogICB1bnNpZ25lZCBpbnQgaTsKIApAQCAtODE3LDcgKzgyNiw3IEBACiAgIC8qIEdldCB0aGUgcHVibGljIGtleSAoc2luZ2xlIGVsZW1lbnQpLiAqLwogICBDdXJsX2dldEFTTjFFbGVtZW50KCZwaywgcHVia2V5LT5iZWcgKyAxLCBwdWJrZXktPmVuZCk7CiAKLSAgaWYoY3VybF9zdHJlcXVhbChhbGdvLCAicnNhRW5jcnlwdGlvbiIpKSB7CisgIGlmKHN0cmNhc2Vjb21wYXJlKGFsZ28sICJyc2FFbmNyeXB0aW9uIikpIHsKICAgICBwID0gQ3VybF9nZXRBU04xRWxlbWVudCgmZWxlbSwgcGsuYmVnLCBway5lbmQpOwogICAgIC8qIENvbXB1dGUga2V5IGxlbmd0aC4gKi8KICAgICBmb3IocSA9IGVsZW0uYmVnOyAhKnEgJiYgcSA8IGVsZW0uZW5kOyBxKyspCkBAIC04NDIsNyArODUxLDcgQEAKICAgICBDdXJsX2dldEFTTjFFbGVtZW50KCZlbGVtLCBwLCBway5lbmQpOwogICAgIGRvX3B1YmtleV9maWVsZChkYXRhLCBjZXJ0bnVtLCAicnNhKGUpIiwgJmVsZW0pOwogICB9Ci0gIGVsc2UgaWYoY3VybF9zdHJlcXVhbChhbGdvLCAiZHNhIikpIHsKKyAgZWxzZSBpZihzdHJjYXNlY29tcGFyZShhbGdvLCAiZHNhIikpIHsKICAgICBwID0gQ3VybF9nZXRBU04xRWxlbWVudCgmZWxlbSwgcGFyYW0tPmJlZywgcGFyYW0tPmVuZCk7CiAgICAgZG9fcHVia2V5X2ZpZWxkKGRhdGEsIGNlcnRudW0sICJkc2EocCkiLCAmZWxlbSk7CiAgICAgcCA9IEN1cmxfZ2V0QVNOMUVsZW1lbnQoJmVsZW0sIHAsIHBhcmFtLT5lbmQpOwpAQCAtODUxLDcgKzg2MCw3IEBACiAgICAgZG9fcHVia2V5X2ZpZWxkKGRhdGEsIGNlcnRudW0sICJkc2EoZykiLCAmZWxlbSk7CiAgICAgZG9fcHVia2V5X2ZpZWxkKGRhdGEsIGNlcnRudW0sICJkc2EocHViX2tleSkiLCAmcGspOwogICB9Ci0gIGVsc2UgaWYoY3VybF9zdHJlcXVhbChhbGdvLCAiZGhwdWJsaWNudW1iZXIiKSkgeworICBlbHNlIGlmKHN0cmNhc2Vjb21wYXJlKGFsZ28sICJkaHB1YmxpY251bWJlciIpKSB7CiAgICAgcCA9IEN1cmxfZ2V0QVNOMUVsZW1lbnQoJmVsZW0sIHBhcmFtLT5iZWcsIHBhcmFtLT5lbmQpOwogICAgIGRvX3B1YmtleV9maWVsZChkYXRhLCBjZXJ0bnVtLCAiZGgocCkiLCAmZWxlbSk7CiAgICAgQ3VybF9nZXRBU04xRWxlbWVudCgmZWxlbSwgcGFyYW0tPmJlZywgcGFyYW0tPmVuZCk7CkBAIC04NTksMjQgKzg2OCwyNCBAQAogICAgIGRvX3B1YmtleV9maWVsZChkYXRhLCBjZXJ0bnVtLCAiZGgocHViX2tleSkiLCAmcGspOwogICB9CiAjaWYgMCAvKiBQYXRlbnQtZW5jdW1iZXJlZC4gKi8KLSAgZWxzZSBpZihjdXJsX3N0cmVxdWFsKGFsZ28sICJlY1B1YmxpY0tleSIpKSB7CisgIGVsc2UgaWYoc3RyY2FzZWNvbXBhcmUoYWxnbywgImVjUHVibGljS2V5IikpIHsKICAgICAvKiBMZWZ0IFRPRE8uICovCiAgIH0KICNlbmRpZgogfQogCi1DVVJMY29kZSBDdXJsX2V4dHJhY3RfY2VydGluZm8oc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwKK0NVUkxjb2RlIEN1cmxfZXh0cmFjdF9jZXJ0aW5mbyhzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmQpCiB7CiAgIGN1cmxfWDUwOWNlcnRpZmljYXRlIGNlcnQ7Ci0gIHN0cnVjdCBDdXJsX2Vhc3kgKiBkYXRhID0gY29ubi0+ZGF0YTsKKyAgc3RydWN0IEN1cmxfZWFzeSAqZGF0YSA9IGNvbm4tPmRhdGE7CiAgIGN1cmxfYXNuMUVsZW1lbnQgcGFyYW07Ci0gIGNvbnN0IGNoYXIgKiBjY3A7Ci0gIGNoYXIgKiBjcDE7CisgIGNvbnN0IGNoYXIgKmNjcDsKKyAgY2hhciAqY3AxOwogICBzaXplX3QgY2wxOwotICBjaGFyICogY3AyOworICBjaGFyICpjcDI7CiAgIENVUkxjb2RlIHJlc3VsdDsKICAgdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwogICBzaXplX3QgaTsKQEAgLTg4OSw3ICs4OTgsOCBAQAogICAvKiBQcmVwYXJlIHRoZSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBmb3IgY3VybF9lYXN5X2dldGluZm8oKS4gKi8KIAogICAvKiBFeHRyYWN0IHRoZSBjZXJ0aWZpY2F0ZSBBU04uMSBlbGVtZW50cy4gKi8KLSAgQ3VybF9wYXJzZVg1MDkoJmNlcnQsIGJlZywgZW5kKTsKKyAgaWYoQ3VybF9wYXJzZVg1MDkoJmNlcnQsIGJlZywgZW5kKSkKKyAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKIAogICAvKiBTdWJqZWN0LiAqLwogICBjY3AgPSBDdXJsX0ROdG9zdHIoJmNlcnQuc3ViamVjdCk7CkBAIC0xMDI5LDEyICsxMDM5LDEyIEBACiAKICNpZiBkZWZpbmVkKFVTRV9HU0tJVCkKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjaGVja09JRChjb25zdCBjaGFyICogYmVnLCBjb25zdCBjaGFyICogZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogb2lkKQorc3RhdGljIGNvbnN0IGNoYXIgKmNoZWNrT0lEKGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9pZCkKIHsKICAgY3VybF9hc24xRWxlbWVudCBlOwotICBjb25zdCBjaGFyICogY2NwOwotICBjb25zdCBjaGFyICogcDsKKyAgY29uc3QgY2hhciAqY2NwOworICBjb25zdCBjaGFyICpwOwogICBib29sIG1hdGNoZWQ7CiAKICAgLyogQ2hlY2sgaWYgZmlyc3QgQVNOLjEgZWxlbWVudCBhdCBgYmVnJyBpcyB0aGUgZ2l2ZW4gT0lELgpAQCAtMTA1MywyMSArMTA2MywyNiBAQAogICByZXR1cm4gbWF0Y2hlZD8gY2NwOiAoY29uc3QgY2hhciAqKSBOVUxMOwogfQogCi1DVVJMY29kZSBDdXJsX3ZlcmlmeWhvc3Qoc3RydWN0IGNvbm5lY3RkYXRhICogY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogYmVnLCBjb25zdCBjaGFyICogZW5kKQorQ1VSTGNvZGUgQ3VybF92ZXJpZnlob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCkKIHsKLSAgc3RydWN0IEN1cmxfZWFzeSAqIGRhdGEgPSBjb25uLT5kYXRhOworICBzdHJ1Y3QgQ3VybF9lYXN5ICpkYXRhID0gY29ubi0+ZGF0YTsKICAgY3VybF9YNTA5Y2VydGlmaWNhdGUgY2VydDsKICAgY3VybF9hc24xRWxlbWVudCBkbjsKICAgY3VybF9hc24xRWxlbWVudCBlbGVtOwogICBjdXJsX2FzbjFFbGVtZW50IGV4dDsKICAgY3VybF9hc24xRWxlbWVudCBuYW1lOwotICBjb25zdCBjaGFyICogcDsKLSAgY29uc3QgY2hhciAqIHE7Ci0gIGNoYXIgKiBkbnNuYW1lOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpxOworICBjaGFyICpkbnNuYW1lOwogICBpbnQgbWF0Y2hlZCA9IC0xOwogICBzaXplX3QgYWRkcmxlbiA9IChzaXplX3QpIC0xOwogICBzc2l6ZV90IGxlbjsKKyAgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RuYW1lID0gU1NMX0lTX1BST1hZKCk/IGNvbm4tPmh0dHBfcHJveHkuaG9zdC5uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5uYW1lOworICBjb25zdCBjaGFyICogY29uc3QgZGlzcG5hbWUgPSBTU0xfSVNfUFJPWFkoKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLT5odHRwX3Byb3h5Lmhvc3QuZGlzcG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubi0+aG9zdC5kaXNwbmFtZTsKICNpZmRlZiBFTkFCTEVfSVBWNgogICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKICNlbHNlCkBAIC0xMDc3LDIwICsxMDkyLDE5IEBACiAgIC8qIFZlcmlmeSB0aGF0IGNvbm5lY3Rpb24gc2VydmVyIG1hdGNoZXMgaW5mbyBpbiBYNTA5IGNlcnRpZmljYXRlIGF0CiAgICAgIGBiZWcnLi5gZW5kJy4gKi8KIAotICBpZighZGF0YS0+c2V0LnNzbC52ZXJpZnlob3N0KQorICBpZighU1NMX0NPTk5fQ09ORklHKHZlcmlmeWhvc3QpKQogICAgIHJldHVybiBDVVJMRV9PSzsKIAotICBpZighYmVnKQorICBpZihDdXJsX3BhcnNlWDUwOSgmY2VydCwgYmVnLCBlbmQpKQogICAgIHJldHVybiBDVVJMRV9QRUVSX0ZBSUxFRF9WRVJJRklDQVRJT047Ci0gIEN1cmxfcGFyc2VYNTA5KCZjZXJ0LCBiZWcsIGVuZCk7CiAKICAgLyogR2V0IHRoZSBzZXJ2ZXIgSVAgYWRkcmVzcy4gKi8KICNpZmRlZiBFTkFCTEVfSVBWNgotICBpZihjb25uLT5iaXRzLmlwdjZfaXAgJiYgQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGNvbm4tPmhvc3QubmFtZSwgJmFkZHIpKQorICBpZihjb25uLT5iaXRzLmlwdjZfaXAgJiYgQ3VybF9pbmV0X3B0b24oQUZfSU5FVDYsIGhvc3RuYW1lLCAmYWRkcikpCiAgICAgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogICBlbHNlCiAjZW5kaWYKLSAgaWYoQ3VybF9pbmV0X3B0b24oQUZfSU5FVCwgY29ubi0+aG9zdC5uYW1lLCAmYWRkcikpCisgIGlmKEN1cmxfaW5ldF9wdG9uKEFGX0lORVQsIGhvc3RuYW1lLCAmYWRkcikpCiAgICAgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAKICAgLyogUHJvY2VzcyBleHRlbnNpb25zLiAqLwpAQCAtMTExMyw3ICsxMTI3LDcgQEAKICAgICAgICAgICBsZW4gPSB1dGY4YXNuMXN0cigmZG5zbmFtZSwgQ1VSTF9BU04xX0lBNV9TVFJJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5iZWcsIG5hbWUuZW5kKTsKICAgICAgICAgICBpZihsZW4gPiAwICYmIChzaXplX3QpbGVuID09IHN0cmxlbihkbnNuYW1lKSkKLSAgICAgICAgICAgIG1hdGNoZWQgPSBDdXJsX2NlcnRfaG9zdGNoZWNrKGRuc25hbWUsIGNvbm4tPmhvc3QubmFtZSk7CisgICAgICAgICAgICBtYXRjaGVkID0gQ3VybF9jZXJ0X2hvc3RjaGVjayhkbnNuYW1lLCBob3N0bmFtZSk7CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWF0Y2hlZCA9IDA7CiAgICAgICAgICAgZnJlZShkbnNuYW1lKTsKQEAgLTExMzEsMTIgKzExNDUsMTIgQEAKICAgc3dpdGNoIChtYXRjaGVkKSB7CiAgIGNhc2UgMToKICAgICAvKiBhbiBhbHRlcm5hdGl2ZSBuYW1lIG1hdGNoZWQgdGhlIHNlcnZlciBob3N0bmFtZSAqLwotICAgIGluZm9mKGRhdGEsICJcdCBzdWJqZWN0QWx0TmFtZTogJXMgbWF0Y2hlZFxuIiwgY29ubi0+aG9zdC5kaXNwbmFtZSk7CisgICAgaW5mb2YoZGF0YSwgIlx0IHN1YmplY3RBbHROYW1lOiAlcyBtYXRjaGVkXG4iLCBkaXNwbmFtZSk7CiAgICAgcmV0dXJuIENVUkxFX09LOwogICBjYXNlIDA6CiAgICAgLyogYW4gYWx0ZXJuYXRpdmUgbmFtZSBmaWVsZCBleGlzdGVkLCBidXQgZGlkbid0IG1hdGNoIGFuZCB0aGVuCiAgICAgICAgd2UgTVVTVCBmYWlsICovCi0gICAgaW5mb2YoZGF0YSwgIlx0IHN1YmplY3RBbHROYW1lIGRvZXMgbm90IG1hdGNoICVzXG4iLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICBpbmZvZihkYXRhLCAiXHQgc3ViamVjdEFsdE5hbWUgZG9lcyBub3QgbWF0Y2ggJXNcbiIsIGRpc3BuYW1lKTsKICAgICByZXR1cm4gQ1VSTEVfUEVFUl9GQUlMRURfVkVSSUZJQ0FUSU9OOwogICB9CiAKQEAgLTExNjgsMTQgKzExODIsMTQgQEAKICAgICB9CiAgICAgaWYoc3RybGVuKGRuc25hbWUpICE9IChzaXplX3QpIGxlbikgICAgICAgICAvKiBOdWwgYnl0ZSBpbiBzdHJpbmcgPyAqLwogICAgICAgZmFpbGYoZGF0YSwgIlNTTDogaWxsZWdhbCBjZXJ0IG5hbWUgZmllbGQiKTsKLSAgICBlbHNlIGlmKEN1cmxfY2VydF9ob3N0Y2hlY2soKGNvbnN0IGNoYXIgKikgZG5zbmFtZSwgY29ubi0+aG9zdC5uYW1lKSkgeworICAgIGVsc2UgaWYoQ3VybF9jZXJ0X2hvc3RjaGVjaygoY29uc3QgY2hhciAqKSBkbnNuYW1lLCBob3N0bmFtZSkpIHsKICAgICAgIGluZm9mKGRhdGEsICJcdCBjb21tb24gbmFtZTogJXMgKG1hdGNoZWQpXG4iLCBkbnNuYW1lKTsKICAgICAgIGZyZWUoZG5zbmFtZSk7CiAgICAgICByZXR1cm4gQ1VSTEVfT0s7CiAgICAgfQogICAgIGVsc2UKICAgICAgIGZhaWxmKGRhdGEsICJTU0w6IGNlcnRpZmljYXRlIHN1YmplY3QgbmFtZSAnJXMnIGRvZXMgbm90IG1hdGNoICIKLSAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBkbnNuYW1lLCBjb25uLT5ob3N0LmRpc3BuYW1lKTsKKyAgICAgICAgICAgICJ0YXJnZXQgaG9zdCBuYW1lICclcyciLCBkbnNuYW1lLCBkaXNwbmFtZSk7CiAgICAgZnJlZShkbnNuYW1lKTsKICAgfQogCmRpZmYgLS1naXQgYS9saWIveDUwOWFzbjEuaCBiL2xpYi94NTA5YXNuMS5oCmluZGV4IDBmMmI5MzAuLmNlNDAyOTcgMTAwNjQ0Ci0tLSBhL2xpYi94NTA5YXNuMS5oCisrKyBiL2xpYi94NTA5YXNuMS5oCkBAIC04LDcgKzgsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zNCw2ICszNCw5IEBACiAgKiBDb25zdGFudHMuCiAgKi8KIAorLyogTGFyZ2VzdCBzdXBwb3J0ZWQgQVNOLjEgc3RydWN0dXJlLiAqLworI2RlZmluZSBDVVJMX0FTTjFfTUFYICAgICAgICAgICAgICAgICAgICgoc2l6ZV90KSAweDQwMDAwKSAgICAgIC8qIDI1NksgKi8KKwogLyogQVNOLjEgY2xhc3Nlcy4gKi8KICNkZWZpbmUgQ1VSTF9BU04xX1VOSVZFUlNBTCAgICAgICAgICAgICAwCiAjZGVmaW5lIENVUkxfQVNOMV9BUFBMSUNBVElPTiAgICAgICAgICAgMQpAQCAtMTE3LDE2ICsxMjAsMTUgQEAKICAqIFByb3RvdHlwZXMuCiAgKi8KIAotY29uc3QgY2hhciAqIEN1cmxfZ2V0QVNOMUVsZW1lbnQoY3VybF9hc24xRWxlbWVudCAqIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogYmVnLCBjb25zdCBjaGFyICogZW5kKTsKLWNvbnN0IGNoYXIgKiBDdXJsX0FTTjF0b3N0cihjdXJsX2FzbjFFbGVtZW50ICogZWxlbSwgaW50IHR5cGUpOwotY29uc3QgY2hhciAqIEN1cmxfRE50b3N0cihjdXJsX2FzbjFFbGVtZW50ICogZG4pOwotdm9pZCBDdXJsX3BhcnNlWDUwOShjdXJsX1g1MDljZXJ0aWZpY2F0ZSAqIGNlcnQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpOwotQ1VSTGNvZGUgQ3VybF9leHRyYWN0X2NlcnRpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sIGludCBjZXJ0bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBiZWcsIGNvbnN0IGNoYXIgKiBlbmQpOwotQ1VSTGNvZGUgQ3VybF92ZXJpZnlob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqIGNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGJlZywgY29uc3QgY2hhciAqIGVuZCk7Ci0KK2NvbnN0IGNoYXIgKkN1cmxfZ2V0QVNOMUVsZW1lbnQoY3VybF9hc24xRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJlZywgY29uc3QgY2hhciAqZW5kKTsKK2NvbnN0IGNoYXIgKkN1cmxfQVNOMXRvc3RyKGN1cmxfYXNuMUVsZW1lbnQgKmVsZW0sIGludCB0eXBlKTsKK2NvbnN0IGNoYXIgKkN1cmxfRE50b3N0cihjdXJsX2FzbjFFbGVtZW50ICpkbik7CitpbnQgQ3VybF9wYXJzZVg1MDkoY3VybF9YNTA5Y2VydGlmaWNhdGUgKmNlcnQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpOworQ1VSTGNvZGUgQ3VybF9leHRyYWN0X2NlcnRpbmZvKHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwgaW50IGNlcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVnLCBjb25zdCBjaGFyICplbmQpOworQ1VSTGNvZGUgQ3VybF92ZXJpZnlob3N0KHN0cnVjdCBjb25uZWN0ZGF0YSAqY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZWcsIGNvbnN0IGNoYXIgKmVuZCk7CiAjZW5kaWYgLyogVVNFX0dTS0lUIG9yIFVTRV9OU1Mgb3IgVVNFX0dOVVRMUyBvciBVU0VfQ1lBU1NMIG9yIFVTRV9TQ0hBTk5FTCAqLwogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1g1MDlBU04xX0ggKi8KZGlmZiAtLWdpdCBhL200L2N1cmwtY29tcGlsZXJzLm00IGIvbTQvY3VybC1jb21waWxlcnMubTQKaW5kZXggNmVjZDMyMy4uMzIxOWJhZiAxMDA2NDQKLS0tIGEvbTQvY3VybC1jb21waWxlcnMubTQKKysrIGIvbTQvY3VybC1jb21waWxlcnMubTQKQEAgLTY0LDcgKzY0LDcgQEAKICoqKgogKioqIFdoYXRldmVyIHNldHRpbmdzIGFyZSBwcmVzZW50IGluIENGTEFHUyB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgcnVuLgogKioqCi0qKiogSWYgeW91IHdpc2ggdG8gaGVscCB0aGUgY1VSTCBwcm9qZWN0IHRvIGJldHRlciBzdXBwb3J0IHlvdXIgY29tcGlsZXIKKyoqKiBJZiB5b3Ugd2lzaCB0byBoZWxwIHRoZSBjdXJsIHByb2plY3QgdG8gYmV0dGVyIHN1cHBvcnQgeW91ciBjb21waWxlcgogKioqIHlvdSBjYW4gcmVwb3J0IHRoaXMgYW5kIHRoZSByZXF1aXJlZCBpbmZvIG9uIHRoZSBsaWJjdXJsIGRldmVsb3BtZW50CiAqKiogbWFpbGluZyBsaXN0OiBodHRwczovL2Nvb2wuaGF4eC5zZS9tYWlsbWFuL2xpc3RpbmZvL2N1cmwtbGlicmFyeS8KICoqKgpkaWZmIC0tZ2l0IGEvbTQvY3VybC1mdW5jdGlvbnMubTQgYi9tNC9jdXJsLWZ1bmN0aW9ucy5tNAppbmRleCBlZTdhMjUyLi5kZGU3ZmUyIDEwMDY0NAotLS0gYS9tNC9jdXJsLWZ1bmN0aW9ucy5tNAorKysgYi9tNC9jdXJsLWZ1bmN0aW9ucy5tNApAQCAtNSw3ICs1LDcgQEAKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAjCi0jIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTMsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisjIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAjCiAjIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAjIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ3MzksMTIgKzQ3MzksMTUgQEAKICAgdHN0X2FsbG93X3BvbGw9InVua25vd24iCiAgICMKICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbltbMTIzNDU2Nzg5XV0uKnxkYXJ3aW4xMC4qfGRhcndpbjExLip8ZGFyd2luMTIuKnxpbnRlcml4KikKKyAgICBkYXJ3aW4qfGludGVyaXgqKQogICAgICAgZG5sIHBvbGwoKSBkb2VzIG5vdCB3b3JrIG9uIHRoZXNlIHBsYXRmb3JtcwogICAgICAgZG5sIEludGVyaXg6ICJkb2VzIHByb3ZpZGUgcG9sbCgpLCBidXQgdGhlIGltcGxlbWVudGluZyBkZXZlbG9wZXIgbXVzdAogICAgICAgZG5sIGhhdmUgYmVlbiBpbiBhIGJhZCBtb29kLCBiZWNhdXNlIHBvbGwoKSBvbmx5IHdvcmtzIG9uIHRoZSAvcHJvYwogICAgICAgZG5sIGZpbGVzeXN0ZW0gaGVyZSIKKyAgICAgIGRubCBtYWNPUzogcG9sbCgpIGZpcnN0IGRpZG4ndCBleGlzdCwgdGhlbiB3YXMgYnJva2VuIHVudGlsIGZpeGVkIGluIDEwLjkKKyAgICAgIGRubCBvbmx5IHRvIGJyZWFrIGFnYWluIGluIDEwLjEyLgogICAgICAgY3VybF9kaXNhbGxvd19wb2xsPSJ5ZXMiCisgICAgICB0c3RfY29tcGlfcG9sbD0ibm8iCiAgICAgICA7OwogICBlc2FjCiAgICMKQEAgLTQ4MDMsMTEgKzQ4MDYsMjcgQEAKICAgICAgIEFDX0xBTkdfUFJPR1JBTShbWwogICAgICAgICAkY3VybF9pbmNsdWRlc19zdGRsaWIKICAgICAgICAgJGN1cmxfaW5jbHVkZXNfcG9sbAorICAgICAgICAkY3VybF9pbmNsdWRlc190aW1lCiAgICAgICBdXSxbWworICAgICAgICAvKiBkZXRlY3QgdGhlIG9yaWdpbmFsIHBvbGwoKSBicmVha2FnZSAqLwogICAgICAgICBpZigwICE9IHBvbGwoMCwgMCwgMTApKQogICAgICAgICAgIGV4aXQoMSk7IC8qIGZhaWwgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8qIGRldGVjdCB0aGUgMTAuMTIgcG9sbCgpIGJyZWFrYWdlICovCisgICAgICAgICAgc3RydWN0IHRpbWV2YWwgYmVmb3JlLCBhZnRlcjsKKyAgICAgICAgICBpbnQgcmM7CisgICAgICAgICAgc2l6ZV90IHVzOworCisgICAgICAgICAgZ2V0dGltZW9mZGF5KCZiZWZvcmUsIE5VTEwpOworICAgICAgICAgIHJjID0gcG9sbChOVUxMLCAwLCA1MDApOworICAgICAgICAgIGdldHRpbWVvZmRheSgmYWZ0ZXIsIE5VTEwpOworCisgICAgICAgICAgdXMgPSAoYWZ0ZXIudHZfc2VjIC0gYmVmb3JlLnR2X3NlYykgKiAxMDAwMDAwICsKKyAgICAgICAgICAgIChhZnRlci50dl91c2VjIC0gYmVmb3JlLnR2X3VzZWMpOworCisgICAgICAgICAgaWYodXMgPCA0MDAwMDApCisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAgICAgICBdXSkKICAgICBdLFsKICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCmRpZmYgLS1naXQgYS9tYWtldGd6IGIvbWFrZXRnegppbmRleCBhZWRlNmQwLi44ZDExN2U2IDEwMDc1NQotLS0gYS9tYWtldGd6CisrKyBiL21ha2V0Z3oKQEAgLTMxLDYgKzMxLDExIEBACiAgIGV4aXQKIGZpCiAKK2lmIFsgInhvbmx5IiA9ICJ4JDIiIF07IHRoZW4KKyAgICBlY2hvICJTZXR1cCB2ZXJzaW9uIG51bWJlciBvbmx5ISIKKyAgICBvbmx5PTEKK2ZpCisKIGxpYnZlcnNpb249IiR2ZXJzaW9uIgogCiAjIHdlIG1ha2UgY3VybCB0aGUgc2FtZSB2ZXJzaW9uIGFzIGxpYmN1cmwKQEAgLTQwLDI1ICs0NSw1MCBAQAogbWlub3I9YGVjaG8gJGxpYnZlcnNpb24gfGN1dCAtZC4gLWYyIHwgc2VkIC1lICJzL1teMC05XS8vZyJgCiBwYXRjaD1gZWNobyAkbGlidmVyc2lvbiB8Y3V0IC1kLiAtZjMgfCBjdXQgLWQtIC1mMSB8IHNlZCAtZSAicy9bXjAtOV0vL2ciYAogCitpZiB0ZXN0IC16ICIkcGF0Y2giOyB0aGVuCisgICAgZWNobyAiaW52YWxpZCB2ZXJzaW9uIG51bWJlcj8gbmVlZHMgdG8gYmUgei55LnoiCisgICAgZXhpdAorZmkKKwogbnVtZXJpYz1gcGVybCAtZSAncHJpbnRmKCIlMDJ4JTAyeCUwMnhcbiIsICciJG1ham9yLCAkbWlub3IsICRwYXRjaCk7ImAKIAogSEVBREVSPWluY2x1ZGUvY3VybC9jdXJsdmVyLmgKIENIRUFERVI9c3JjL3Rvb2xfdmVyc2lvbi5oCitQTElTVD1saWIvbGliY3VybC5wbGlzdAorCitpZiB0ZXN0IC16ICIkb25seSI7IHRoZW4KKyAgICBleHQ9Ii5kaXN0IgorICAgICMgd2hlbiBub3Qgc2V0dGluZyB1cCB2ZXJzaW9uIG51bWJlcnMgbG9jYWxseQorICAgIGZvciBhIGluICRIRUFERVIgJENIRUFERVIgJFBMSVNUOyBkbworICAgICAgICBjcCAkYSAiJGEkZXh0IgorICAgIGRvbmUKKyAgICBIRUFERVI9IiRIRUFERVIkZXh0IgorICAgIENIRUFERVI9IiRDSEVBREVSJGV4dCIKKyAgICBQTElTVD0iJFBMSVNUJGV4dCIKK2ZpCiAKICMgcmVxdWlyZXMgYSBkYXRlIGNvbW1hbmQgdGhhdCBrbm93cyAtdSBmb3IgVVRDIHRpbWUgem9uZQogZGF0ZXN0YW1wPWBMQ19USU1FPUMgZGF0ZSAtdWAKIAogIyBSZXBsYWNlIHZlcnNpb24gbnVtYmVyIGluIGhlYWRlciBmaWxlOgotc2VkIC1lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAuKi8jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiJyRsaWJ2ZXJzaW9uJyIvZycgXAorc2VkIC1pIC1lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAuKi8jZGVmaW5lIExJQkNVUkxfVkVSU0lPTiAiJyRsaWJ2ZXJzaW9uJyIvZycgXAogICAgIC1lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9OVU0gLiovI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTlVNIDB4JyRudW1lcmljJy9nJyBcCiAgICAgLWUgJ3MvXiNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01BSk9SIC4qLyNkZWZpbmUgTElCQ1VSTF9WRVJTSU9OX01BSk9SICckbWFqb3InL2cnIFwKICAgICAtZSAncy9eI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgLiovI2RlZmluZSBMSUJDVVJMX1ZFUlNJT05fTUlOT1IgJyRtaW5vcicvZycgXAogICAgIC1lICdzL14jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAuKi8jZGVmaW5lIExJQkNVUkxfVkVSU0lPTl9QQVRDSCAnJHBhdGNoJy9nJyBcCiAgICAgLWUgInMvXiNkZWZpbmUgTElCQ1VSTF9USU1FU1RBTVAgLiovI2RlZmluZSBMSUJDVVJMX1RJTUVTVEFNUCBcIiRkYXRlc3RhbXBcIi9nIiBcCi0gJEhFQURFUiA+JEhFQURFUi5kaXN0CisgJEhFQURFUgogCiAjIFJlcGxhY2UgdmVyc2lvbiBudW1iZXIgaW4gaGVhZGVyIGZpbGU6Ci1zZWQgJ3MvI2RlZmluZSBDVVJMX1ZFUlNJT04gLiovI2RlZmluZSBDVVJMX1ZFUlNJT04gIickY3VybHZlcnNpb24nIi9nJyAkQ0hFQURFUiA+JENIRUFERVIuZGlzdAorc2VkIC1pICdzLyNkZWZpbmUgQ1VSTF9WRVJTSU9OIC4qLyNkZWZpbmUgQ1VSTF9WRVJTSU9OICInJGN1cmx2ZXJzaW9uJyIvZycgJENIRUFERVIKKworIyBSZXBsYWNlIHZlcnNpb24gbnVtYmVyIGluIHBsaXN0IGZpbGU6CitzZWQgLWkgInMvN1wuMTJcLjMvJGxpYnZlcnNpb24vZyIgJFBMSVNUCisKK2lmIHRlc3QgLW4gIiRvbmx5IjsgdGhlbgorICAgICMgZG9uZSEKKyAgICBleGl0OworZmkKIAogIyBHZW5lcmF0ZSBWQzcsIFZDOCwgVkM5LCBWQzEwLCBWQzExLCBWQzEyIGFuZCBWQzE0IHZlcnNpb25zIGZyb20gdGhlIFZDNgogIyBNYWtlZmlsZSB2ZXJzaW9ucwpAQCAtNjgsMTAgKzk4LDYgQEAKICAgbXYgbGliL01ha2VmaWxlLiR2ZXIgbGliL01ha2VmaWxlLiR2ZXIuZGlzdAogZG9uZQogCi0jIFJlcGxhY2UgdmVyc2lvbiBudW1iZXIgaW4gcGxpc3QgZmlsZToKLVBMSVNUPWxpYi9saWJjdXJsLnBsaXN0Ci1zZWQgInMvN1wuMTJcLjMvJGxpYnZlcnNpb24vZyIgJFBMSVNUID4gJFBMSVNULmRpc3QKLQogZWNobyAiY3VybCB2ZXJzaW9uICRjdXJsdmVyc2lvbiIKIGVjaG8gImxpYmN1cmwgdmVyc2lvbiAkbGlidmVyc2lvbiIKIGVjaG8gImxpYmN1cmwgbnVtZXJpY2FsICRudW1lcmljIgpAQCAtMTE1LDE2ICsxNDEsNyBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCi0jIE1ha2Ugc3VyZSB3ZSBoYXZlIHVwZGF0ZWQgSFRNTCB2ZXJzaW9ucyBvZiBhbGwgbWFuIHBhZ2VzOgotIwotZWNobyAibWFrZSBodG1sIgotbWFrZSAtcyBodG1sCi0KLSMgQW5kIHRoZSBQREYgdmVyc2lvbnMKLWVjaG8gIm1ha2UgcGRmIgotbWFrZSAtcyBwZGYKLQotIyBBbmQgdGhlIElERSBmaWxlcworIyBVcGRhdGUgdGhlIElERSBmaWxlcwogZWNobyAibWFrZSB2Yy1pZGUiCiBtYWtlIC1zIHZjLWlkZQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9BSVgvUlBNL1JFQURNRSBiL3BhY2thZ2VzL0FJWC9SUE0vUkVBRE1FCmluZGV4IDc5MGJlYjguLjUxNjE1YWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0FJWC9SUE0vUkVBRE1FCisrKyBiL3BhY2thZ2VzL0FJWC9SUE0vUkVBRE1FCkBAIC0yOSw1ICsyOSw1IEBACiBMYXN0bHksIHRoZSBzcGVjIGZpbGUgZXhwZWN0cyB0aGUgQ3VybCBzb3VyY2UgZGlzdHJpYnV0aW9uIGZpbGUgdG8gYmUKIGluIC50YXIuYnoyIGZvcm1hdC4KIAotVGhlIG5pZnR5IGNVUkwgaGVhZGVyIG9mIHRoaXMgUkVBRE1FIGlzIGEgcmlwb2ZmIG9mIHRoZSB2bXMvcmVhZG1lIGZpbGUuCitUaGUgbmlmdHkgY3VybCBoZWFkZXIgb2YgdGhpcyBSRUFETUUgaXMgYSByaXBvZmYgb2YgdGhlIHZtcy9yZWFkbWUgZmlsZS4KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRE9TL2NvbW1vbi5kaiBiL3BhY2thZ2VzL0RPUy9jb21tb24uZGoKaW5kZXggODViNjExYy4uZTA2OWNlNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRE9TL2NvbW1vbi5kagorKysgYi9wYWNrYWdlcy9ET1MvY29tbW9uLmRqCkBAIC0xLDcgKzEsNyBAQAogIwogIyBDb21tb24gZGVmaW5lcyBmb3IgY3VybCAoZGpncHAvV2F0dC0zMikKICMKLSMgQXNzdW1lcyB5b3UndmUgdW5wYWNrZWQgY1VSTCB3aXRoIGxvbmctZmlsZSBuYW1lcworIyBBc3N1bWVzIHlvdSd2ZSB1bnBhY2tlZCBjdXJsIHdpdGggbG9uZy1maWxlIG5hbWVzCiAjIEkuZSB1c2UgInNldCBMRk49eSIgYmVmb3JlIHVudGFyaW5nIG9uIFdpbjl4L1hQLgogIyBSZXF1aXJlcyBzZWQsIHlhY2MsIHJtIGFuZCB0aGUgdXN1YWwgc3R1ZmYuCiAjCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9PUzQwMC9SRUFETUUuT1M0MDAgYi9wYWNrYWdlcy9PUzQwMC9SRUFETUUuT1M0MDAKaW5kZXggMjRjZjM5ZS4uZTcwOWY0MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvT1M0MDAvUkVBRE1FLk9TNDAwCisrKyBiL3BhY2thZ2VzL09TNDAwL1JFQURNRS5PUzQwMApAQCAtNzYsMTYgKzc2LDE2IEBACiAgICAgICAgIENVUkxPUFRfRE5TX1NFUlZFUlMKICAgICAgICAgQ1VSTE9QVF9FR0RTT0NLRVQKICAgICAgICAgQ1VSTE9QVF9FTkNPRElORworICAgICAgICBDVVJMT1BUX0ZUUFBPUlQKICAgICAgICAgQ1VSTE9QVF9GVFBfQUNDT1VOVAogICAgICAgICBDVVJMT1BUX0ZUUF9BTFRFUk5BVElWRV9UT19VU0VSCi0gICAgICAgIENVUkxPUFRfRlRQUE9SVAogICAgICAgICBDVVJMT1BUX0lOVEVSRkFDRQogICAgICAgICBDVVJMT1BUX0lTU1VFUkNFUlQKICAgICAgICAgQ1VSTE9QVF9LRVlQQVNTV0QKICAgICAgICAgQ1VSTE9QVF9LUkJMRVZFTAogICAgICAgICBDVVJMT1BUX0xPR0lOX09QVElPTlMKLSAgICAgICAgQ1VSTE9QVF9NQUlMX0ZST00KICAgICAgICAgQ1VSTE9QVF9NQUlMX0FVVEgKKyAgICAgICAgQ1VSTE9QVF9NQUlMX0ZST00KICAgICAgICAgQ1VSTE9QVF9ORVRSQ19GSUxFCiAgICAgICAgIENVUkxPUFRfTk9QUk9YWQogICAgICAgICBDVVJMT1BUX1BBU1NXT1JECkBAIC05NCw3ICs5NCwxOSBAQAogICAgICAgICBDVVJMT1BUX1BST1hZUEFTU1dPUkQKICAgICAgICAgQ1VSTE9QVF9QUk9YWVVTRVJOQU1FCiAgICAgICAgIENVUkxPUFRfUFJPWFlVU0VSUFdECisgICAgICAgIENVUkxPUFRfUFJPWFlfQ0FJTkZPCisgICAgICAgIENVUkxPUFRfUFJPWFlfQ0FQQVRICisgICAgICAgIENVUkxPUFRfUFJPWFlfQ1JMRklMRQorICAgICAgICBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRAogICAgICAgICBDVVJMT1BUX1BST1hZX1NFUlZJQ0VfTkFNRQorICAgICAgICBDVVJMT1BUX1BST1hZX1NTTENFUlQKKyAgICAgICAgQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRQorICAgICAgICBDVVJMT1BUX1BST1hZX1NTTEtFWQorICAgICAgICBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUKKyAgICAgICAgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QKKyAgICAgICAgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JECisgICAgICAgIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFCisgICAgICAgIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRQogICAgICAgICBDVVJMT1BUX1JBTkRPTV9GSUxFCiAgICAgICAgIENVUkxPUFRfUkFOR0UKICAgICAgICAgQ1VSTE9QVF9SRUZFUkVSCkBAIC0xMDMsMTYgKzExNSwxNyBAQAogICAgICAgICBDVVJMT1BUX1JUU1BfVFJBTlNQT1JUCiAgICAgICAgIENVUkxPUFRfU0VSVklDRV9OQU1FCiAgICAgICAgIENVUkxPUFRfU09DS1M1X0dTU0FQSV9TRVJWSUNFCisgICAgICAgIENVUkxPUFRfU09DS1NfUFJPWFkKICAgICAgICAgQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENQogICAgICAgICBDVVJMT1BUX1NTSF9LTk9XTkhPU1RTCiAgICAgICAgIENVUkxPUFRfU1NIX1BSSVZBVEVfS0VZRklMRQogICAgICAgICBDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRQogICAgICAgICBDVVJMT1BUX1NTTENFUlQKICAgICAgICAgQ1VSTE9QVF9TU0xDRVJUVFlQRQotICAgICAgICBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVAogICAgICAgICBDVVJMT1BUX1NTTEVOR0lORQogICAgICAgICBDVVJMT1BUX1NTTEtFWQogICAgICAgICBDVVJMT1BUX1NTTEtFWVRZUEUKKyAgICAgICAgQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QKICAgICAgICAgQ1VSTE9QVF9UTFNBVVRIX1BBU1NXT1JECiAgICAgICAgIENVUkxPUFRfVExTQVVUSF9UWVBFCiAgICAgICAgIENVUkxPUFRfVExTQVVUSF9VU0VSTkFNRQpAQCAtMTYwLDYgKzE3Myw3IEBACiAgICAgICAgIENVUkxJTkZPX1BSSU1BUllfSVAKICAgICAgICAgQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lECiAgICAgICAgIENVUkxJTkZPX0xPQ0FMX0lQCisgICAgICAgIENVUkxJTkZPX1NDSEVNRQogICBMaWtld2lzZSwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBmb2xsb3dlZCBieSBhIHN0cnVjdCBjdXJsX3NsaXN0ICogKiBhbmQgYQogQ0NTSUQuCiAgICAgICAgIENVUkxJTkZPX1NTTF9FTkdJTkVTCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9PUzQwMC9jY3NpZGN1cmwuYyBiL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5jCmluZGV4IDNiMDhiZWYuLjYwODI0NDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5jCisrKyBiL3BhY2thZ2VzL09TNDAwL2Njc2lkY3VybC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02MTUsNyArNjE1LDcgQEAKICAgc3RydWN0IGN1cmxfY2VydGluZm8gKiBjaXBmOwogICBzdHJ1Y3QgY3VybF9jZXJ0aW5mbyAqIGNpcHQ7CiAKLSAgLyogV0FSTklORzogdW5saWtlIGN1cmxfZWFzeV9nZXRfaW5mbygpLCB0aGUgc3RyaW5ncyByZXR1cm5lZCBieSB0aGlzCisgIC8qIFdBUk5JTkc6IHVubGlrZSBjdXJsX2Vhc3lfZ2V0aW5mbygpLCB0aGUgc3RyaW5ncyByZXR1cm5lZCBieSB0aGlzCiAgICAgIHByb2NlZHVyZSBoYXZlIHRvIGJlIGZyZWUnZWQuICovCiAKICAgZGF0YSA9IChzdHJ1Y3QgQ3VybF9lYXN5ICopIGN1cmw7CkBAIC0xMTQ3LDE2ICsxMTQ3LDE2IEBACiAgIGNhc2UgQ1VSTE9QVF9ETlNfU0VSVkVSUzoKICAgY2FzZSBDVVJMT1BUX0VHRFNPQ0tFVDoKICAgY2FzZSBDVVJMT1BUX0VOQ09ESU5HOgorICBjYXNlIENVUkxPUFRfRlRQUE9SVDoKICAgY2FzZSBDVVJMT1BUX0ZUUF9BQ0NPVU5UOgogICBjYXNlIENVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVI6Ci0gIGNhc2UgQ1VSTE9QVF9GVFBQT1JUOgogICBjYXNlIENVUkxPUFRfSU5URVJGQUNFOgogICBjYXNlIENVUkxPUFRfSVNTVUVSQ0VSVDoKICAgY2FzZSBDVVJMT1BUX0tFWVBBU1NXRDoKICAgY2FzZSBDVVJMT1BUX0tSQkxFVkVMOgogICBjYXNlIENVUkxPUFRfTE9HSU5fT1BUSU9OUzoKLSAgY2FzZSBDVVJMT1BUX01BSUxfRlJPTToKICAgY2FzZSBDVVJMT1BUX01BSUxfQVVUSDoKKyAgY2FzZSBDVVJMT1BUX01BSUxfRlJPTToKICAgY2FzZSBDVVJMT1BUX05FVFJDX0ZJTEU6CiAgIGNhc2UgQ1VSTE9QVF9OT1BST1hZOgogICBjYXNlIENVUkxPUFRfUEFTU1dPUkQ6CkBAIC0xMTY1LDcgKzExNjUsMTkgQEAKICAgY2FzZSBDVVJMT1BUX1BST1hZUEFTU1dPUkQ6CiAgIGNhc2UgQ1VSTE9QVF9QUk9YWVVTRVJOQU1FOgogICBjYXNlIENVUkxPUFRfUFJPWFlVU0VSUFdEOgorICBjYXNlIENVUkxPUFRfUFJPWFlfQ0FJTkZPOgorICBjYXNlIENVUkxPUFRfUFJPWFlfQ0FQQVRIOgorICBjYXNlIENVUkxPUFRfUFJPWFlfQ1JMRklMRToKKyAgY2FzZSBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRDoKICAgY2FzZSBDVVJMT1BUX1BST1hZX1NFUlZJQ0VfTkFNRToKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTENFUlQ6CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRToKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWToKKyAgY2FzZSBDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEU6CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1Q6CisgIGNhc2UgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEOgorICBjYXNlIENVUkxPUFRfUFJPWFlfVExTQVVUSF9UWVBFOgorICBjYXNlIENVUkxPUFRfUFJPWFlfVExTQVVUSF9VU0VSTkFNRToKICAgY2FzZSBDVVJMT1BUX1JBTkRPTV9GSUxFOgogICBjYXNlIENVUkxPUFRfUkFOR0U6CiAgIGNhc2UgQ1VSTE9QVF9SRUZFUkVSOgpAQCAtMTE3NCwxNiArMTE4NiwxNyBAQAogICBjYXNlIENVUkxPUFRfUlRTUF9UUkFOU1BPUlQ6CiAgIGNhc2UgQ1VSTE9QVF9TRVJWSUNFX05BTUU6CiAgIGNhc2UgQ1VSTE9QVF9TT0NLUzVfR1NTQVBJX1NFUlZJQ0U6CisgIGNhc2UgQ1VSTE9QVF9TT0NLU19QUk9YWToKICAgY2FzZSBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1OgogICBjYXNlIENVUkxPUFRfU1NIX0tOT1dOSE9TVFM6CiAgIGNhc2UgQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFOgogICBjYXNlIENVUkxPUFRfU1NIX1BVQkxJQ19LRVlGSUxFOgogICBjYXNlIENVUkxPUFRfU1NMQ0VSVDoKICAgY2FzZSBDVVJMT1BUX1NTTENFUlRUWVBFOgotICBjYXNlIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNUOgogICBjYXNlIENVUkxPUFRfU1NMRU5HSU5FOgogICBjYXNlIENVUkxPUFRfU1NMS0VZOgogICBjYXNlIENVUkxPUFRfU1NMS0VZVFlQRToKKyAgY2FzZSBDVVJMT1BUX1NTTF9DSVBIRVJfTElTVDoKICAgY2FzZSBDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQ6CiAgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1RZUEU6CiAgIGNhc2UgQ1VSTE9QVF9UTFNBVVRIX1VTRVJOQU1FOgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvT1M0MDAvY3VybC5pbmMuaW4gYi9wYWNrYWdlcy9PUzQwMC9jdXJsLmluYy5pbgppbmRleCAxZThhOTNkLi5jMGIwMzMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9PUzQwMC9jdXJsLmluYy5pbgorKysgYi9wYWNrYWdlcy9PUzQwMC9jdXJsLmluYy5pbgpAQCAtMjU4LDYgKzI1OCw4IEBACiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNQogICAgICBkIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8yLi4uCiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNgorICAgICBkIENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNwogICAgICAgKgogICAgICBkIENVUkxfVExTQVVUSF9OT05FLi4uCiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMApAQCAtMzY5LDYgKzM3MSw4IEBACiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgNgogICAgICBkICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QuLi4KICAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA3CisgICAgIGQgIENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDgKICAgICAgZCAgQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWS4uLgogICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDgKICAgICAgZCAgQ1VSTEVfUkVNT1RFX0FDQ0VTU19ERU5JRUQuLi4KQEAgLTY1Myw2ICs2NTcsOCBAQAogICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAKICAgICAgZCAgQ1VSTFBST1hZX0hUVFBfMV8wLi4uCiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMQorICAgICBkICBDVVJMUFJPWFlfSFRUUFMuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAyCiAgICAgIGQgIENVUkxQUk9YWV9TT0NLUzQuLi4KICAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICA0CiAgICAgIGQgIENVUkxQUk9YWV9TT0NLUzUuLi4KQEAgLTEyNTIsNiArMTI1OCw0NCBAQAogICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjQzCiAgICAgIGQgIENVUkxPUFRfVENQX0ZBU1RPUEVOLi4uCiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAyNDQKKyAgICAgZCAgQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDI0NQorICAgICBkICBDVVJMT1BUX1BST1hZX0NBSU5GTy4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjQ2CisgICAgIGQgIENVUkxPUFRfUFJPWFlfQ0FQQVRILi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAyNDcKKyAgICAgZCAgQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZUEVFUi4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDAwMjQ4CisgICAgIGQgIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDI0OQorICAgICBkICBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04uLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAwMDI1MAorICAgICBkICBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVVNFUk5BTUUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI1MQorICAgICBkICBDVVJMT1BUX1BST1hZX1RMU0FVVEhfUEFTU1dPUkQuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI1MgorICAgICBkICBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjUzCisgICAgIGQgIENVUkxPUFRfUFJPWFlfU1NMQ0VSVC4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjU0CisgICAgIGQgIENVUkxPUFRfUFJPWFlfU1NMQ0VSVFRZUEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI1NQorICAgICBkICBDVVJMT1BUX1BST1hZX1NTTEtFWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjU2CisgICAgIGQgIENVUkxPUFRfUFJPWFlfU1NMS0VZVFlQRS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjU3CisgICAgIGQgIENVUkxPUFRfUFJPWFlfS0VZUEFTU1dELi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMTAyNTgKKyAgICAgZCAgQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI1OQorICAgICBkICBDVVJMT1BUX1BST1hZX0NSTEZJTEUuLi4KKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICAxMDI2MAorICAgICBkICBDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAyNjEKKyAgICAgZCAgQ1VSTE9QVF9TT0NLU19QUk9YWS4uLgorICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIDEwMjYyCisgICAgIGQgIENVUkxPUFRfU09DS1NfUFJPWFlUWVBFLi4uCisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgMDAyNjMKICAgICAgICoKICAgICAgIC9pZiBub3QgZGVmaW5lZChDVVJMX05PX09MRElFUykKICAgICAgZCAgQ1VSTE9QVF9GSUxFICAgYyAgICAgICAgICAgICAgICAgICAxMDAwMQpAQCAtMTQzOCw2ICsxNDgyLDEyIEBACiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDQwMDAyRCcKICAgICAgZCAgQ1VSTElORk9fSFRUUF9WRVJTSU9OLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyArIDQ2CiAgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAyRScKKyAgICAgZCAgQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyArIDQ3CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAyRicKKyAgICAgZCAgQ1VSTElORk9fUFJPVE9DT0wuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fTE9ORyArIDQ4CisgICAgIGQgICAgICAgICAgICAgICAgIGMgICAgICAgICAgICAgICAgICAgWCcwMDIwMDAzMCcKKyAgICAgZCAgQ1VSTElORk9fU0NIRU1FLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTElORk9fU1RSSU5HICsgNDkKKyAgICAgZCAgICAgICAgICAgICAgICAgYyAgICAgICAgICAgICAgICAgICBYJzAwMTAwMDMxJwogICAgICAgKgogICAgICBkICBDVVJMSU5GT19IVFRQX0NPREUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbGQgLi4uUkVTUE9OU0VfQ09ERQogICAgICBkICAgICAgICAgICAgICAgICBjICAgICAgICAgICAgICAgICAgIFgnMDAyMDAwMDInCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2N1cmwubW1wIGIvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9jdXJsLm1tcAppbmRleCAyODQ5OGNlLi40YjMwNGEzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2N1cmwubW1wCisrKyBiL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvY3VybC5tbXAKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gY1VSTCBuZXR3b3JrIHJldHJpZXZhbCBjbGllbnQKKy8vIGN1cmwgbmV0d29yayByZXRyaWV2YWwgY2xpZW50CiAvLwogCiBUQVJHRVQgICAgICAgIGN1cmwuZXhlCkBAIC00OSw3ICs0OSw3IEBACiAKIFNPVVJDRVBBVEggIC4uLy4uLy4uL2xpYgogU09VUkNFIFwKLSAgICByYXdzdHIuYyBub25ibG9jay5jCisgICAgc3RyY2FzZS5jIG5vbmJsb2NrLmMKIAogVVNFUklOQ0xVREUgLi4vLi4vLi4vc3JjIC4uLy4uLy4uL2xpYiAuLi8uLi8uLi9pbmNsdWRlL2N1cmwKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9saWJjdXJsLm1tcCBiL3BhY2thZ2VzL1N5bWJpYW4vZ3JvdXAvbGliY3VybC5tbXAKaW5kZXggZjc0YjE5Yi4uNjM4OGJiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3ltYmlhbi9ncm91cC9saWJjdXJsLm1tcAorKysgYi9wYWNrYWdlcy9TeW1iaWFuL2dyb3VwL2xpYmN1cmwubW1wCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIGxpYmN1cmwuZGxsIGNVUkwgbmV0d29yayByZXRyaWV2YWwgY2xpZW50IGxpYnJhcnkKKy8vIGxpYmN1cmwuZGxsIGN1cmwgbmV0d29yayByZXRyaWV2YWwgY2xpZW50IGxpYnJhcnkKIC8vCiAKIC8vIEJ1aWxkLXRpbWUgb3B0aW9ucyAodW5jb21tZW50IHRoZXNlIHRvIGVuYWJsZSkKQEAgLTMxLDcgKzMxLDcgQEAKICAgaHR0cF9uZWdvdGlhdGUuYyBpbmV0X3B0b24uYyBzdHJ0b29mZnQuYyBzdHJlcnJvci5jIGFtaWdhb3MuYyAgICAgICAgXAogICBob3N0YXN5bi5jIGhvc3RpcDQuYyBob3N0aXA2LmMgaG9zdHN5bi5jIGluZXRfbnRvcC5jIHBhcnNlZGF0ZS5jICAgICBcCiAgIHNlbGVjdC5jIHZ0bHMvZ3Rscy5jIHZ0bHMvdnRscy5jIHRmdHAuYyBzcGxheS5jIHN0cmR1cC5jIHNvY2tzLmMgICAgIFwKLSAgc3NoLmMgdnRscy9uc3MuYyByYXdzdHIuYyBjdXJsX2FkZHJpbmZvLmMgc29ja3NfZ3NzYXBpLmMgICAgICAgICAgICAgXAorICBzc2guYyB2dGxzL25zcy5jIHN0cmNhc2UuYyBjdXJsX2FkZHJpbmZvLmMgc29ja3NfZ3NzYXBpLmMgICAgICAgICAgICAgXAogICBzb2Nrc19zc3BpLmMgY3VybF9zc3BpLmMgc2xpc3QuYyBub25ibG9jay5jIGN1cmxfbWVtcmNoci5jIGltYXAuYyAgICBcCiAgIHBvcDMuYyBzbXRwLmMgcGluZ3BvbmcuYyBydHNwLmMgY3VybF90aHJlYWRzLmMgd2Fybmxlc3MuYyBobWFjLmMgICAgIFwKICAgdnRscy9wb2xhcnNzbC5jIGN1cmxfcnRtcC5jIG9wZW5sZGFwLmMgY3VybF9nZXRob3N0bmFtZS5jIGdvcGhlci5jICAgXApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvV2luMzIvY3lnd2luL1JFQURNRSBiL3BhY2thZ2VzL1dpbjMyL2N5Z3dpbi9SRUFETUUKaW5kZXggYTA4MTFkZS4uNjBiYjVlMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvV2luMzIvY3lnd2luL1JFQURNRQorKysgYi9wYWNrYWdlcy9XaW4zMi9jeWd3aW4vUkVBRE1FCkBAIC0xMiw3ICsxMiw3IEBACiAgIC0gQ3lnd2luCiAgIC0gT3BlblNTTCAwLjkuNmItMisgKCopCiAKLSAgKCopIGNVUkwgY2FuIGJlIGJ1aWx0IHdpdGhvdXQgU1NMIHN1cHBvcnQsIHNlZSBiZWxvdyBmb3IgZGV0YWlscworICAoKikgY3VybCBjYW4gYmUgYnVpbHQgd2l0aG91dCBTU0wgc3VwcG9ydCwgc2VlIGJlbG93IGZvciBkZXRhaWxzCiAKIAogQ2Fub25pY2FsIEhvbWVwYWdlIGFuZCBEb3dubG9hZHM6CkBAIC00MSw3ICs0MSw3IEBACiAgICgqKikgTGliVG9vbCAxLjQuMiBoYWQgYSBidWcgcmVsYXRlZCB0byBjeWd3aW4ncyB1c2Ugb2YgIi5leGUiIGV4dGVuc2lvbnMsCiAgICAgICBzdWNoIHRoYXQgIm1ha2UgaW5zdGFsbCIgYmxldyB1cCBhdCBjdXJsLmV4ZS4gU2VlIHRoaXMgVVJMIGZvciBkZXRhaWxzOgogICAgICAgICAgaHR0cDovL21haWwuZ251Lm9yZy9waXBlcm1haWwvbGlidG9vbC8yMDAxLVNlcHRlbWJlci8wMDU1NDkuaHRtbAotICAgICAgVGhlIGNvcHkgb2YgbHRtYWluLnNoIHRoYXQgaXMgZGlzdHJpYnV0ZWQgd2l0aCBjVVJMIGluY2x1ZGVzIHRoaXMgcGF0Y2guCisgICAgICBUaGUgY29weSBvZiBsdG1haW4uc2ggdGhhdCBpcyBkaXN0cmlidXRlZCB3aXRoIGN1cmwgaW5jbHVkZXMgdGhpcyBwYXRjaC4KIAogICBBcyBvZiBjdXJsIDcuOS4xLCB0aGUgb2ZmaWNpYWwgc291cmNlIGNvbXBpbGVzICh1bmRlciBDeWd3aW4pIGFuZCB0ZXN0cwogICAgIDEwMCUgY2xlYW5seSBPT1RCIChPdXQgT2YgVGhlIEJveCkKQEAgLTEwMCw5ICsxMDAsOSBAQAogICByZXF1aXJlczogY3lnd2luIG9wZW5zc2wKIAogICBAIGN1cmwtZGV2ZWwKLSAgc2Rlc2M6ICIobGliKWNVUkwgaGVhZGVycywgc3RhdGljIGxpYnJhcmllcywgZGV2ZWxvcGVyIGRvY3MgYW5kIHNhbXBsZXMiCisgIHNkZXNjOiAiKGxpYiljdXJsIGhlYWRlcnMsIHN0YXRpYyBsaWJyYXJpZXMsIGRldmVsb3BlciBkb2NzIGFuZCBzYW1wbGVzIgogICBsZGVzYzogImN1cmwtZGV2ZWwgaXMgdGhlIGRldmVsb3Blci1vcmllbnRlZCAobm9uLXJ1bi10aW1lKSBwYXJ0cwotICBvZiB0aGUgY1VSTCBwYWNrYWdlLiBJdCBpbmNsdWRlcyBoZWFkZXIgZmlsZXMsIHN0YXRpYyBsaWJyYXJpZXMsCisgIG9mIHRoZSBjdXJsIHBhY2thZ2UuIEl0IGluY2x1ZGVzIGhlYWRlciBmaWxlcywgc3RhdGljIGxpYnJhcmllcywKICAgZXhhbXBsZSBzb3VyY2UgY29kZSBzbmlwcGV0cywgYW5kIHRoZSBsaWJjdXJsIG1hbiBwYWdlcy4iCiAgIGNhdGVnb3J5OiBXZWIgTGlicyBEZXZlbAogICByZXF1aXJlczogY3lnd2luIG9wZW5zc2wgY3VybApAQCAtMTEwLDUgKzExMCw1IEBACiAKIEN5Z3dpbiBwb3J0IG1haW50YWluZWQgYnk6CiAgIEtldmluIFJvdGggPGtwcm90aCBAIHVzZXJzIC4gc291cmNlZm9yZ2UgLiBuZXQ+Ci0gIFF1ZXN0aW9ucyBhYm91dCBjVVJMIHNob3VsZCBiZSBkaXJlY3RlZCB0byBjdXJsLXVzZXJzQGNvb2wuaGF4eC5zZS4KKyAgUXVlc3Rpb25zIGFib3V0IGN1cmwgc2hvdWxkIGJlIGRpcmVjdGVkIHRvIGN1cmwtdXNlcnNAY29vbC5oYXh4LnNlLgogICBRdWVzdGlvbnMgYWJvdXQgdGhpcyBjeWd3aW4gcGFja2FnZSBnbyB0byBjeWd3aW5AY3lnd2luLmNvbS4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLmggYi9wYWNrYWdlcy92bXMvY3VybG1zZy5oCmluZGV4IDJjYjMyZWMuLjQyNGEzODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLmgKKysrIGIvcGFja2FnZXMvdm1zL2N1cmxtc2cuaApAQCAtNTcsNyArNTcsOCBAQAogI2RlZmluZSBDVVJMX0NPVUxETlRfUkVTT0xWRV9QUk9YWSAyNTE3NTY1OTQKICNkZWZpbmUgQ1VSTF9DT1VMRE5UX1JFU09MVkVfSE9TVCAyNTE3NTY2MDIKICNkZWZpbmUgQ1VSTF9DT1VMRE5UX0NPTk5FQ1QgMjUxNzU2NjEwCi0jZGVmaW5lIENVUkxfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSAyNTE3NTY2MTgKKyNkZWZpbmUgQ1VSTF9XRUlSRF9TRVJWRVJfUkVQTFkgMjUxNzU2NjE4CisjZGVmaW5lIENVUkxfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSBDVVJMX1dFSVJEX1NFUlZFUl9SRVBMWQogI2RlZmluZSBDVVJMX0ZUUF9BQ0NFU1NfREVOSUVEIDI1MTc1NjYyNgogI2RlZmluZSBDVVJMX09CU09MRVRFMTAgMjUxNzU2NjM0CiAjZGVmaW5lIENVUkxfRlRQX1dFSVJEX1BBU1NfUkVQTFkgMjUxNzU2NjQyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy92bXMvY3VybG1zZy5tc2cgYi9wYWNrYWdlcy92bXMvY3VybG1zZy5tc2cKaW5kZXggN2ZkNDQ4My4uNDkyNjU3YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvdm1zL2N1cmxtc2cubXNnCisrKyBiL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLm1zZwpAQCAtMzAsNyArMzAsNyBAQAogQ09VTEROVF9SRVNPTFZFX1BST1hZCTxjb3VsZCBub3QgcmVzb2x2ZSBwcm94eT4KIENPVUxETlRfUkVTT0xWRV9IT1NUCTxjb3VsZCBub3QgcmVzb2x2ZSBob3N0PgogQ09VTEROVF9DT05ORUNUCQk8Y291bGQgbm90IGNvbm5lY3Q+Ci1GVFBfV0VJUkRfU0VSVkVSX1JFUExZCTxGVFAgd2VpcmQgc2VydmVyIHJlcGx5PgorV0VJUkRfU0VSVkVSX1JFUExZCTx3ZWlyZCBzZXJ2ZXIgcmVwbHk+CiBGVFBfQUNDRVNTX0RFTklFRAk8RlRQIGFjY2VzcyBkZW5pZWQ+CiBPQlNPTEVURTEwCQk8b2Jzb2xldGUgZXJyb3IgY29kZT4KIEZUUF9XRUlSRF9QQVNTX1JFUExZCTxGVFAgd2VpcmQgUEFTUyByZXBseT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLnNkbCBiL3BhY2thZ2VzL3Ztcy9jdXJsbXNnLnNkbAppbmRleCBlMTkyYzA3Li5kYjViYWFkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy92bXMvY3VybG1zZy5zZGwKKysrIGIvcGFja2FnZXMvdm1zL2N1cmxtc2cuc2RsCkBAIC0zNCw2ICszNCw3IEBACiAgICAgICAgLCJDT1VMRE5UX1JFU09MVkVfUFJPWFkiIEVRVUFMUyAlWDBGMDE4MDMyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCiAgICAgICAgLCJDT1VMRE5UX1JFU09MVkVfSE9TVCIgRVFVQUxTICVYMEYwMTgwM0EgUFJFRklYICJDVVJMIiBUQUcgIiIKICAgICAgICAsIkNPVUxETlRfQ09OTkVDVCIgRVFVQUxTICVYMEYwMTgwNDIgIFBSRUZJWCAiQ1VSTCIgVEFHICIiCisgICAgICAgLCJXRUlSRF9TRVJWRVJfUkVQTFkiIEVRVUFMUyAlWDBGMDE4MDRBIFBSRUZJWCAiQ1VSTCIgVEFHICIiCiAgICAgICAgLCJGVFBfV0VJUkRfU0VSVkVSX1JFUExZIiBFUVVBTFMgJVgwRjAxODA0QSBQUkVGSVggIkNVUkwiIFRBRyAiIgogICAgICAgICwiRlRQX0FDQ0VTU19ERU5JRUQiIEVRVUFMUyAlWDBGMDE4MDUyIFBSRUZJWCAiQ1VSTCIgVEFHICIiCiAgICAgICAgLCJPQlNPTEVURTEwIiAgIEVRVUFMUyAlWDBGMDE4MDVBICAgICBQUkVGSVggIkNVUkwiIFRBRyAiIgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvdm1zL2N1cmxtc2dfdm1zLmggYi9wYWNrYWdlcy92bXMvY3VybG1zZ192bXMuaAppbmRleCAzYWVmOWNmLi5iN2ZmN2EwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy92bXMvY3VybG1zZ192bXMuaAorKysgYi9wYWNrYWdlcy92bXMvY3VybG1zZ192bXMuaApAQCAtNTksNyArNTksNyBAQAogCUNVUkxfQ09VTEROVF9SRVNPTFZFX1BST1hZLAogCUNVUkxfQ09VTEROVF9SRVNPTFZFX0hPU1QsCiAJQ1VSTF9DT1VMRE5UX0NPTk5FQ1QsCi0JQ1VSTF9GVFBfV0VJUkRfU0VSVkVSX1JFUExZLAorCUNVUkxfV0VJUkRfU0VSVkVSX1JFUExZLAogCUNVUkxfRlRQX0FDQ0VTU19ERU5JRUQsCiAJQ1VSTF9PQlNPTEVURTEwLAogCUNVUkxfRlRQX1dFSVJEX1BBU1NfUkVQTFksCmRpZmYgLS1naXQgYS9wYWNrYWdlcy92bXMvZ252X2xpbmtfY3VybC5jb20gYi9wYWNrYWdlcy92bXMvZ252X2xpbmtfY3VybC5jb20KaW5kZXggYjdlNjA4My4uYWRkNGJlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvdm1zL2dudl9saW5rX2N1cmwuY29tCisrKyBiL3BhY2thZ2VzL3Ztcy9nbnZfbGlua19jdXJsLmNvbQpAQCAtNDE2LDcgKzQxNiw3IEBACiAgICAgICAgICAgIFsuc3JjXWN1cmwtdG9vbF91cmxnbG9iLm8sIFsuc3JjXWN1cmwtdG9vbF91dGlsLm8sIC0KICAgICAgICAgICAgWy5zcmNdY3VybC10b29sX3Ztcy5vLCBbLnNyY11jdXJsLXRvb2xfd3JpdGVlbnYubywgLQogICAgICAgICAgICBbLnNyY11jdXJsLXRvb2xfd3JpdGVvdXQubywgWy5zcmNdY3VybC10b29sX3hhdHRyLm8sIC0KLSAgICAgICAgICAgWy5zcmNdY3VybC1zdHJ0b29mZnQubywgWy5zcmNdY3VybC1zdHJkdXAubywgWy5zcmNdY3VybC1yYXdzdHIubywgLQorICAgICAgICAgICBbLnNyY11jdXJsLXN0cnRvb2ZmdC5vLCBbLnNyY11jdXJsLXN0cmR1cC5vLCBbLnNyY11jdXJsLXN0cmNhc2UubywgLQogICAgICAgICAgICBbLnNyY11jdXJsLW5vbmJsb2NrLm8sIGdudl9wYWNrYWdlc192bXM6Y3VybG1zZy5vYmosLQogICAgICAgICAgICBzeXMkaW5wdXQ6L29wdAogZ252JGxpYmN1cmwvc2hhcmUKQEAgLTQyOCw3ICs0MjgsNyBAQAogJCAgIGN1cmxfbWFpbiA9ICJbLnBhY2thZ2VzLnZtcy4nJ2FyY2hfbmFtZSdddG9vbF9tYWluLm9iaiIKICQgICBjdXJsX3NyYyA9ICJbLnBhY2thZ2VzLnZtcy4nJ2FyY2hfbmFtZSddY3VybHNyYy5vbGIiCiAkICAgY3VybF9saWIgPSAiWy5wYWNrYWdlcy52bXMuJydhcmNoX25hbWUnXWN1cmxsaWIub2xiIgotJCAgIHJhd3N0ciA9ICJyYXdzdHIiCiskICAgc3RyY2FzZSA9ICJzdHJjYXNlIgogJCAgIG5vbmJsb2NrID0gIm5vbmJsb2NrIgogJCAgIHdhcm5sZXNzID0gIndhcm5sZXNzIgogJCEKQEAgLTQzNiw3ICs0MzYsNyBAQAogJCEKICQgICBpZiAoYXJjaF9uYW1lIC5uZXMuICJWQVgiKSAuYW5kLiAocGFyc2Vfc3R5bGUgLmVxcy4gIkVYVEVOREVEIikKICQgICB0aGVuCi0kICAgICAgIHJhd3N0ciA9ICIiInJhd3N0ciIiIgorJCAgICAgICBzdHJjYXNlID0gIiIic3RyY2FzZSIiIgogJCAgICAgICBub25ibG9jayA9ICIiIm5vbmJsb2NrIiIiCiAkICAgICAgIHdhcm5sZXNzID0gIiIid2Fybmxlc3MiIiIKICQgICBlbmRpZgpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAkICAgICAgIGxpbmsnbGRlYnVnJy9leGU9J2N1cmxfZXhlJy9kc2Y9J2N1cmxfZHNmJyAtCiAgICAgICAgICAgICdjdXJsX21haW4nLCdjdXJsX3NyYycvbGliLCAtCiAgICAgICAgICAgICdjdXJsX2xpYicvbGlicmFyeS9pbmNsdWRlPS0KLSAgICAgICAgICAgKCdyYXdzdHInLCdub25ibG9jaycsJ3dhcm5sZXNzJyksLQorICAgICAgICAgICAoJ3N0cmNhc2UnLCdub25ibG9jaycsJ3dhcm5sZXNzJyksLQogICAgICAgICAgICBnbnZfcGFja2FnZXNfdm1zOmN1cmxtc2cub2JqLC0KICAgICAgICAgICAgc3lzJGlucHV0Oi9vcHQKIGdudiRsaWJjdXJsL3NoYXJlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy92bXMvcmVhZG1lIGIvcGFja2FnZXMvdm1zL3JlYWRtZQppbmRleCAxYjI0NTgwLi41ZjExNmE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy92bXMvcmVhZG1lCisrKyBiL3BhY2thZ2VzL3Ztcy9yZWFkbWUKQEAgLTgzLDEzICs4MywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbGliY3VybCBzaGFyZWQgaW1hZ2UgYW5kIHRvIHNldCB1cCB0aGUgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsIG5hbWVzLgogCi1jdXJsbXNnLmggICAgICAgICAgICAgICBDIGhlYWRlciBkZWZpbmluZyBjVVJMIHN0YXR1cyBjb2RlIG1hY3Jvcy4KK2N1cmxtc2cuaCAgICAgICAgICAgICAgIEMgaGVhZGVyIGRlZmluaW5nIGN1cmwgc3RhdHVzIGNvZGUgbWFjcm9zLgogCiBjdXJsbXNnLm1zZyAgICAgICAgICAgICBFcnJvciBtZXNzYWdlIHNvdXJjZSBmb3IgY3VybG1zZy5oIGFuZCBjdXJsbXNnLnNkbC4KIAotY3VybG1zZy5zZGwgICAgICAgICAgICAgU0RMIHNvdXJjZSBkZWZpbmluZyBjVVJMIHN0YXR1cyBjb2RlIGNvbnN0YW50cy4KK2N1cmxtc2cuc2RsICAgICAgICAgICAgIFNETCBzb3VyY2UgZGVmaW5pbmcgY3VybCBzdGF0dXMgY29kZSBjb25zdGFudHMuCiAKLWN1cmxtc2dfdm1zLmggICAgICAgICAgIE1hcHBpbmcgb2YgY1VSTCBzdGF0dXMgY29kZXMgdG8gVk1TLWZvcm0gY29kZXMuCitjdXJsbXNnX3Ztcy5oICAgICAgICAgICBNYXBwaW5nIG9mIGN1cmwgc3RhdHVzIGNvZGVzIHRvIFZNUy1mb3JtIGNvZGVzLgogCiBnZW5lcmF0ZV9jb25maWdfdm1zX2hfY3VybC5jb20KICAgICAgICAgICAgICAgICAgICAgICAgIERDTCBwcm9jZWR1cmUgdG8gZ2VuZXJhdGUgdGhlIGN1cmwgc3BlY2lmaWMKQEAgLTExNSw5ICsxMTUsOSBAQAogbWFjcm8zMl9leGFjdGNhc2UucGF0Y2ggVGhlIHBhdGNoIGZpbGUgbmVlZGVkIHRvIG1vZGlmeSBWQVggTWFjcm8zMiB0byBiZQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzZW5zaXRpdmUgYW5kIGNhc2UgcHJlc2VydmluZy4KIAotTWFrZWZpbGUuYW0gICAgICAgICAgICAgY1VSTCBraXQgZmlsZSBsaXN0IGZvciB0aGlzIGRpcmVjdG9yeS4KK01ha2VmaWxlLmFtICAgICAgICAgICAgIGN1cmwga2l0IGZpbGUgbGlzdCBmb3IgdGhpcyBkaXJlY3RvcnkuCiAKLU1ha2VmaWxlLmluICAgICAgICAgICAgIGNVUkwga2l0IG1ha2VmaWxlIHNvdXJjZSBmb3IgdGhpcyBkaXJlY3RvcnkuCitNYWtlZmlsZS5pbiAgICAgICAgICAgICBjdXJsIGtpdCBtYWtlZmlsZSBzb3VyY2UgZm9yIHRoaXMgZGlyZWN0b3J5LgogCiBtYWtlX2dudl9jdXJsX2luc3RhbGwuc2gKICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdCB0byBkbyBhIG1ha2UgaW5zdGFsbCB1c2luZyBHTlYgYWZ0ZXIgcnVubmluZwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvdm1zL3Ztc19lY29fbGV2ZWwuaCBiL3BhY2thZ2VzL3Ztcy92bXNfZWNvX2xldmVsLmgKaW5kZXggNDM1MzQwNy4uMzU0ODc1YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvdm1zL3Ztc19lY29fbGV2ZWwuaAorKysgYi9wYWNrYWdlcy92bXMvdm1zX2Vjb19sZXZlbC5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBmb3IgZWFjaCBFQ08gdGhhdCBpcyBraXQgKi8KLS8qIGZvciBhIHNwZWNpZmljIGNVUkwgeC55LXogcmVsZWFzZS4gKi8KKy8qIGZvciBhIHNwZWNpZmljIGN1cmwgeC55LXogcmVsZWFzZS4gKi8KIC8qIFdoZW4gYW55IHBhcnQgb2YgeC55LXogaXMgaW5jcmVtZW50ZWQsIHRoZSBFQ08gc2hvdWxkIGJlIHNldCBiYWNrIHRvIDAgKi8KIAogI2lmbmRlZiBfVk1TX0VDT19MRVZFTF9ICmRpZmYgLS1naXQgYS9wcm9qZWN0cy9SRUFETUUgYi9wcm9qZWN0cy9SRUFETUUKaW5kZXggZjYzMTQzNy4uZmVlNzMwNCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvUkVBRE1FCisrKyBiL3Byb2plY3RzL1JFQURNRQpAQCAtNCw3ICs0LDcgQEAKICAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byBjb21waWxlLCBidWlsZCBhbmQgaW5zdGFsbCBjdXJsIGFuZCBsaWJjdXJsCiAgICBmcm9tIHNvdXJjZXMgdXNpbmcgYW4gSURFIGJhc2VkIGRldmVsb3BtZW50IHRvb2wgc3VjaCBhcyBWaXN1YWwgU3R1ZGlvLgogCi0gICBQcm9qZWN0IGZpbGVzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBWaXN1YWwgQysrIHY2LjAgdG8gdjEyLjAuIFRoZQorICAgUHJvamVjdCBmaWxlcyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgVmlzdWFsIEMrKyB2Ni4wIHRvIHYxNC4wLiBUaGUKICAgIGZvbGxvd2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlIGhhcyBiZWVuIHVzZWQgdG8gY2F0ZXIgZm9yIHRoaXM6CiAKICAgIHNvbWVkaXJlY3RvcnlcCkBAIC0xNjAsMTcgKzE2MCwzIEBACiAgICBzdXBwb3J0IHRoZSBsZWdhY3kgaGFuZHNoYWtlcyBhbmQgYWxnb3JpdGhtcyB1c2VkIGJ5IHRob3NlIHZlcnNpb25zLiBJZgogICAgeW91IHdpbGwgYmUgdXNpbmcgY3VybCBpbiBvbmUgb2YgdGhvc2UgZWFybGllciB2ZXJzaW9ucyBvZiBXaW5kb3dzIHlvdQogICAgc2hvdWxkIGNob29zZSBhbm90aGVyIFNTTCBiYWNrZW5kIHN1Y2ggYXMgT3BlblNTTC4KLQotVE9ETwotPT09PQotCi0gICBUaGVzZSBwcm9qZWN0IGZpbGVzIGFyZSBhIHJlY2VudCBhZGRpdGlvbiB0byB0aGUgY3VybCBzb3VyY2UgY29kZSBhbmQgYXMgc3VjaAotICAgYXJlIG5vdCAxMDAlIGNvbXBsZXRlLiBUaGlzIGlzIGEgbGlzdCBvZiB0aGluZ3MgdGhhdCBhcmUgc3RpbGwgdG9kbzoKLQotICAgKiBTdXBwb3J0IHpsaWIKLSAgICogVXNlIG9mIHN0YXRpYyBydW50aW1lIGxpYnJhcmllcwotICAgKiBBZGQgdGhlIFRlc3QgU3VpdGUgY29tcG9uZW50cwotICAgKiBTdXBwb3J0IGZvciBvdGhlciBkZXZlbG9wbWVudCBJREVzCi0gICAqIEFkZCBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhpcmQtcGFydHkgRExMcwotCi0gICBBbnkgYWRkaXRpb25hbCBoZWxwIHdvdWxkIGJlIGFwcHJlY2lhdGVkIDstKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Byb2plY3RzL2dlbmVyYXRlLmJhdCBiL3Byb2plY3RzL2dlbmVyYXRlLmJhdAppbmRleCA4MjA5YTVkLi5mYmUzYTkyIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9nZW5lcmF0ZS5iYXQKKysrIGIvcHJvamVjdHMvZ2VuZXJhdGUuYmF0CkBAIC0yNjQsMTkgKzI2NCwxOCBAQAogICAgICAgZm9yIC9mICJkZWxpbXM9IiAlJXIgaW4gKCdkaXIgL2IgLi5cc3JjXCoucmMnKSBkbyBjYWxsIDplbGVtZW50ICUxIHNyYyAiJSVyIiAlMwogICAgICkgZWxzZSBpZiAiIXZhciEiID09ICJDVVJMX1NSQ19YX0NfRklMRVMiICgKICAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJzdHJ0b29mZnQuYyIgJTMKLSAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJyYXdzdHIuYyIgJTMKICAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJub25ibG9jay5jIiAlMwogICAgICAgY2FsbCA6ZWxlbWVudCAlMSBsaWIgIndhcm5sZXNzLmMiICUzCiAgICAgKSBlbHNlIGlmICIhdmFyISIgPT0gIkNVUkxfU1JDX1hfSF9GSUxFUyIgKAogICAgICAgY2FsbCA6ZWxlbWVudCAlMSBsaWIgImNvbmZpZy13aW4zMi5oIiAlMwogICAgICAgY2FsbCA6ZWxlbWVudCAlMSBsaWIgImN1cmxfc2V0dXAuaCIgJTMKICAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJzdHJ0b29mZnQuaCIgJTMKLSAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJyYXdzdHIuaCIgJTMKICAgICAgIGNhbGwgOmVsZW1lbnQgJTEgbGliICJub25ibG9jay5oIiAlMwogICAgICAgY2FsbCA6ZWxlbWVudCAlMSBsaWIgIndhcm5sZXNzLmgiICUzCiAgICAgKSBlbHNlIGlmICIhdmFyISIgPT0gIkNVUkxfTElCX0NfRklMRVMiICgKICAgICAgIGZvciAvZiAiZGVsaW1zPSIgJSVjIGluICgnZGlyIC9iIC4uXGxpYlwqLmMnKSBkbyBjYWxsIDplbGVtZW50ICUxIGxpYiAiJSVjIiAlMwogICAgICkgZWxzZSBpZiAiIXZhciEiID09ICJDVVJMX0xJQl9IX0ZJTEVTIiAoCisgICAgICBmb3IgL2YgImRlbGltcz0iICUlaCBpbiAoJ2RpciAvYiAuLlxpbmNsdWRlXGN1cmxcKi5oJykgZG8gY2FsbCA6ZWxlbWVudCAlMSBpbmNsdWRlXGN1cmwgIiUlaCIgJTMKICAgICAgIGZvciAvZiAiZGVsaW1zPSIgJSVoIGluICgnZGlyIC9iIC4uXGxpYlwqLmgnKSBkbyBjYWxsIDplbGVtZW50ICUxIGxpYiAiJSVoIiAlMwogICAgICkgZWxzZSBpZiAiIXZhciEiID09ICJDVVJMX0xJQl9SQ19GSUxFUyIgKAogICAgICAgZm9yIC9mICJkZWxpbXM9IiAlJXIgaW4gKCdkaXIgL2IgLi5cbGliXCoucmMnKSBkbyBjYWxsIDplbGVtZW50ICUxIGxpYiAiJSVyIiAlMwpkaWZmIC0tZ2l0IGEvc3JjL0NNYWtlTGlzdHMudHh0IGIvc3JjL0NNYWtlTGlzdHMudHh0CmluZGV4IGNmY2VmYjMuLjliYmViNjAgMTAwNjQ0Ci0tLSBhL3NyYy9DTWFrZUxpc3RzLnR4dAorKysgYi9zcmMvQ01ha2VMaXN0cy50eHQKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgJHtDVVJMX0ZJTEVTfQogICApCiAKLXNvdXJjZV9ncm91cCgiY1VSTFggc291cmNlIGZpbGVzIiBGSUxFUyAke0NVUkxYX0NGSUxFU30pCi1zb3VyY2VfZ3JvdXAoImNVUkwgc291cmNlIGZpbGVzIiBGSUxFUyAke0NVUkxfQ0ZJTEVTfSkKLXNvdXJjZV9ncm91cCgiY1VSTCBoZWFkZXIgZmlsZXMiIEZJTEVTICR7Q1VSTF9IRklMRVN9KQorc291cmNlX2dyb3VwKCJjdXJsWCBzb3VyY2UgZmlsZXMiIEZJTEVTICR7Q1VSTFhfQ0ZJTEVTfSkKK3NvdXJjZV9ncm91cCgiY3VybCBzb3VyY2UgZmlsZXMiIEZJTEVTICR7Q1VSTF9DRklMRVN9KQorc291cmNlX2dyb3VwKCJjdXJsIGhlYWRlciBmaWxlcyIgRklMRVMgJHtDVVJMX0hGSUxFU30pCiAKIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICR7Q1VSTF9TT1VSQ0VfRElSfS9saWIgICAgICAgICMgVG8gYmUgYWJsZSB0byByZWFjaCAiY3VybF9zZXR1cF9vbmNlLmgiCkBAIC02MSw3ICs2MSw3IEBACiAgICR7Q1VSTF9TT1VSQ0VfRElSfS9zcmMgICAgICAgICMgVG8gYmUgYWJsZSB0byByZWFjaCAidG9vbF9odWdlaGVscC5oIgogICApCiAKLSNCdWlsZCBjVVJMIGV4ZWN1dGFibGUKKyNCdWlsZCBjdXJsIGV4ZWN1dGFibGUKIHRhcmdldF9saW5rX2xpYnJhcmllcyggJHtFWEVfTkFNRX0gbGliY3VybCAke0NVUkxfTElCU30pCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuV2F0Y29tIGIvc3JjL01ha2VmaWxlLldhdGNvbQppbmRleCBmMWRkYzI5Li4yNWNkM2JmIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuV2F0Y29tCisrKyBiL3NyYy9NYWtlZmlsZS5XYXRjb20KQEAgLTIyLDcgKzIyLDcgQEAKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIwotIyAgV2F0Y29tIC8gT3BlbldhdGNvbSAvIFdpbjMyIG1ha2VmaWxlIGZvciBjVVJMLgorIyAgV2F0Y29tIC8gT3BlbldhdGNvbSAvIFdpbjMyIG1ha2VmaWxlIGZvciBjdXJsLgogIwogCiAuRVJBU0UKQEAgLTE1Niw3ICsxNTYsNyBAQAogRElSUyA9ICQoT0JKX0RJUikKIAogYWxsOiB0b29sX2h1Z2VoZWxwLmMgJChESVJTKSAkKFRBUkdFVFMpIC5TWU1CT0xJQwotCUBlY2hvIFdlbGNvbWUgdG8gY1VSTAorCUBlY2hvIFdlbGNvbWUgdG8gY3VybAogCiBjbGVhbjogLlNZTUJPTElDCiAJLXJtIC1mICQoT0JKUykKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbmMgYi9zcmMvTWFrZWZpbGUuaW5jCmluZGV4IDFhYTE1M2MuLjIxOTZmZmEgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5pbmMKKysrIGIvc3JjL01ha2VmaWxlLmluYwpAQCAtMTEsMTQgKzExLDEyIEBACiAjIHRoZSBvZmZpY2lhbCBBUEksIGJ1dCB3ZSByZS11c2UgdGhlIGNvZGUgaGVyZSB0byBhdm9pZCBkdXBsaWNhdGlvbi4KIENVUkxYX0NGSUxFUyA9IFwKIAkuLi9saWIvc3RydG9vZmZ0LmMgXAotCS4uL2xpYi9yYXdzdHIuYyBcCiAJLi4vbGliL25vbmJsb2NrLmMgXAogCS4uL2xpYi93YXJubGVzcy5jCiAKIENVUkxYX0hGSUxFUyA9IFwKIAkuLi9saWIvY3VybF9zZXR1cC5oIFwKIAkuLi9saWIvc3RydG9vZmZ0LmggXAotCS4uL2xpYi9yYXdzdHIuaCBcCiAJLi4vbGliL25vbmJsb2NrLmggXAogCS4uL2xpYi93YXJubGVzcy5oCiAKZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5uZXR3YXJlIGIvc3JjL01ha2VmaWxlLm5ldHdhcmUKaW5kZXggM2U0ZjY1NC4uYTkyN2RhNSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLm5ldHdhcmUKKysrIGIvc3JjL01ha2VmaWxlLm5ldHdhcmUKQEAgLTEwMiw3ICsxMDIsNyBAQAogVEFSR0VUICA9IGN1cmwKIFZFUlNJT04JPSAkKExJQkNVUkxfVkVSU0lPTikKIENPUFlSCT0gQ29weXJpZ2h0IChDKSAkKExJQkNVUkxfQ09QWVJJR0hUX1NUUikKLURFU0NSCT0gY1VSTCAkKExJQkNVUkxfVkVSU0lPTl9TVFIpICgkKExJQkFSQ0gpKSAtIGh0dHBzOi8vY3VybC5oYXh4LnNlCitERVNDUgk9IGN1cmwgJChMSUJDVVJMX1ZFUlNJT05fU1RSKSAoJChMSUJBUkNIKSkgLSBodHRwczovL2N1cmwuaGF4eC5zZQogTVRTQUZFCT0gWUVTCiBTVEFDSwk9IDY0MDAwCiBTQ1JFRU4JPSAkKFRBUkdFVCkgY29tbWFuZGxpbmUgdXRpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLnZjNiBiL3NyYy9NYWtlZmlsZS52YzYKaW5kZXggZmY4MmE0ZC4uODU4MjhjZSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLnZjNgorKysgYi9zcmMvTWFrZWZpbGUudmM2CkBAIC0xNDIsNyArMTQyLDcgQEAKIA0KIFJFTEVBU0VfT0JKUz0gXA0KIAlub25ibG9ja3Iub2JqIFwNCi0JcmF3c3Ryci5vYmogXA0KKwlzdHJjYXNlci5vYmogXA0KIAlzdHJ0b29mZnRyLm9iaiBcDQogCXdhcm5sZXNzLm9iaiBcDQogCXNsaXN0X3djLm9iaiBcDQpAQCAtMTg4LDcgKzE4OCw3IEBACiANCiBERUJVR19PQkpTPSBcDQogCW5vbmJsb2NrZC5vYmogXA0KLQlyYXdzdHJkLm9iaiBcDQorCXN0cmNhc2VkLm9iaiBcDQogCXN0cnRvb2ZmdGQub2JqIFwNCiAJd2Fybmxlc3NkLm9iaiBcDQogCXNsaXN0X3djZC5vYmogXA0KQEAgLTM2Myw4ICszNjMsOCBAQAogIyMgUmVsZWFzZQ0KIG5vbmJsb2Nrci5vYmo6IC4uL2xpYi9ub25ibG9jay5jDQogCSQoQ0NSKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvbm9uYmxvY2suYw0KLXJhd3N0cnIub2JqOiAuLi9saWIvcmF3c3RyLmMNCi0JJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9yYXdzdHIuYw0KK3N0cmNhc2VyLm9iajogLi4vbGliL3N0cmNhc2UuYw0KKwkkKENDUikgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3N0cmNhc2UuYw0KIHN0cnRvb2ZmdHIub2JqOiAuLi9saWIvc3RydG9vZmZ0LmMNCiAJJChDQ1IpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9zdHJ0b29mZnQuYw0KIHdhcm5sZXNzLm9iajogLi4vbGliL3dhcm5sZXNzLmMNCkBAIC00NTMsOCArNDUzLDggQEAKICMjIERlYnVnDQogbm9uYmxvY2tkLm9iajogLi4vbGliL25vbmJsb2NrLmMNCiAJJChDQ0QpICQoQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9ub25ibG9jay5jDQotcmF3c3RyZC5vYmo6IC4uL2xpYi9yYXdzdHIuYw0KLQkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3Jhd3N0ci5jDQorc3RyY2FzZWQub2JqOiAuLi9saWIvc3RyY2FzZS5jDQorCSQoQ0NEKSAkKENGTEFHUykgL0ZvIiRAIiAuLi9saWIvc3RyY2FzZS5jDQogc3RydG9vZmZ0ZC5vYmo6IC4uL2xpYi9zdHJ0b29mZnQuYw0KIAkkKENDRCkgJChDRkxBR1MpIC9GbyIkQCIgLi4vbGliL3N0cnRvb2ZmdC5jDQogd2Fybmxlc3NkLm9iajogLi4vbGliL3dhcm5sZXNzLmMNCmRpZmYgLS1naXQgYS9zcmMvY3VybC5yYyBiL3NyYy9jdXJsLnJjCmluZGV4IDMwYWU0NDQuLjNhMmMzYTAgMTAwNjQ0Ci0tLSBhL3NyYy9jdXJsLnJjCisrKyBiL3NyYy9jdXJsLnJjCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMDksIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC00NCwxMiArNDQsMTIgQEAKICAgQkVHSU4KICAgICBCTE9DSyAiMDQwOTA0YjAiCiAgICAgQkVHSU4KLSAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICAgICAgImNVUkwsIGh0dHBzOi8vY3VybC5oYXh4LnNlL1wwIgotICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICAiVGhlIGNVUkwgZXhlY3V0YWJsZVwwIgorICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgICAgICAiY3VybCwgaHR0cHM6Ly9jdXJsLmhheHguc2UvXDAiCisgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgICJUaGUgY3VybCBleGVjdXRhYmxlXDAiCiAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAgICAgIENVUkxfVkVSU0lPTiAiXDAiCiAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgICAgICJjdXJsXDAiCiAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJjdXJsLmV4ZVwwIgotICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgICAgICAiVGhlIGNVUkwgZXhlY3V0YWJsZVwwIgorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgICAgICAiVGhlIGN1cmwgZXhlY3V0YWJsZVwwIgogICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgICBDVVJMX1ZFUlNJT04gIlwwIgogICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgICAiqSAiIENVUkxfQ09QWVJJR0hUICJcMCIKICAgICAgIFZBTFVFICJMaWNlbnNlIiwgICAgICAgICAgImh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWxcMCIKZGlmZiAtLWdpdCBhL3NyYy9tYWNvcy9NQUNJTlNUQUxMLlRYVCBiL3NyYy9tYWNvcy9NQUNJTlNUQUxMLlRYVAppbmRleCAxODM5ZWYyLi5jZTRkMWRjIDEwMDY0NAotLS0gYS9zcmMvbWFjb3MvTUFDSU5TVEFMTC5UWFQKKysrIGIvc3JjL21hY29zL01BQ0lOU1RBTEwuVFhUCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9tYWtlZmlsZS5hbWlnYSBiL3NyYy9tYWtlZmlsZS5hbWlnYQppbmRleCAyNTQ0OWE2Li45ZjM3NDhiIDEwMDY0NAotLS0gYS9zcmMvbWFrZWZpbGUuYW1pZ2EKKysrIGIvc3JjL21ha2VmaWxlLmFtaWdhCkBAIC0xLDUgKzEsNSBAQAogIwotIyAkVkVSOiBjVVJMIE1ha2VmaWxlIGZvciBBbWlnYU9TIC4uLgorIyAkVkVSOiBjdXJsIE1ha2VmaWxlIGZvciBBbWlnYU9TIC4uLgogIwogCiAjIGNoYW5nZSB0aGUgZm9sbG93IHRvIHdoZXJlIHlvdSBoYXZlIHRoZSBBbWlUQ1AgU0RLIHY0LjMgaW5jbHVkZXM6CkBAIC0xOSwxMiArMTksMTIgQEAKIE9CSlMgPSAkKENVUkxfQ0ZJTEVTOi5jPS5vKSAkKENVUkxYX0NGSUxFUzouYz0ubykKIAogYWxsOgl0b29sX2h1Z2VoZWxwLmMgJChPQkpTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjVVJMICQoT0JKUykgJChMSUJTKSAtV2wsLU1hcCxjVVJMLm1hcCwtLWNyZWYKKwkkKENDKSAkKENGTEFHUykgLW8gY3VybCAkKE9CSlMpICQoTElCUykgLVdsLC1NYXAsY3VybC5tYXAsLS1jcmVmCiAKIHRvb2xfaHVnZWhlbHAuYzogJChSRUFETUUpICQoTUFOUEFHRSkgIG1raGVscC5wbAogCXJtIC1mIHRvb2xfaHVnZWhlbHAuYwogCS9iaW4vbnJvZmYgLW1hbiAkKE1BTlBBR0UpIHwgL2Jpbi9wZXJsICQoTUtIRUxQKSAtYyAkKFJFQURNRSkgPiB0b29sX2h1Z2VoZWxwLmMKIAogaW5zdGFsbDoKLQkkKElOU1RBTEwpIC1jIGNVUkwgL2MvY1VSTAorCSQoSU5TVEFMTCkgLWMgY3VybCAvYy9jdXJsCiAKZGlmZiAtLWdpdCBhL3NyYy9tYWtlZmlsZS5kaiBiL3NyYy9tYWtlZmlsZS5kagppbmRleCA2YTZjOGY5Li5jM2JiYzIzIDEwMDY0NAotLS0gYS9zcmMvbWFrZWZpbGUuZGoKKysrIGIvc3JjL21ha2VmaWxlLmRqCkBAIC01OSw3ICs1OSw3IEBACiBPQkpFQ1RTICs9ICQoYWRkcHJlZml4ICQoT0JKX0RJUikvLCAkKENTT1VSQ0VTOi5jPS5vKSkKIAogYWxsOiAkKE9CSl9ESVIpICQoUFJPR1JBTSkKLQlAZWNobyBXZWxjb21lIHRvIGNVUkwKKwlAZWNobyBXZWxjb21lIHRvIGN1cmwKIAogJChQUk9HUkFNKTogJChPQkpFQ1RTKSAuLi9saWIvbGliY3VybC5hCiAJJChDQykgLW8gJEAgJF4gJChMREZMQUdTKSAkKEVYX0xJQlMpCmRpZmYgLS1naXQgYS9zcmMvdG9vbF9jYl9kYmcuYyBiL3NyYy90b29sX2NiX2RiZy5jCmluZGV4IDk3YTVjOTIuLjIyMWVhZTYgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX2NiX2RiZy5jCisrKyBiL3NyYy90b29sX2NiX2RiZy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC03Myw5ICs3Myw5IEBACiAKICAgaWYoIWNvbmZpZy0+dHJhY2Vfc3RyZWFtKSB7CiAgICAgLyogb3BlbiBmb3IgYXBwZW5kICovCi0gICAgaWYoY3VybHhfc3RyZXF1YWwoIi0iLCBjb25maWctPnRyYWNlX2R1bXApKQorICAgIGlmKCFzdHJjbXAoIi0iLCBjb25maWctPnRyYWNlX2R1bXApKQogICAgICAgY29uZmlnLT50cmFjZV9zdHJlYW0gPSBzdGRvdXQ7Ci0gICAgZWxzZSBpZihjdXJseF9zdHJlcXVhbCgiJSIsIGNvbmZpZy0+dHJhY2VfZHVtcCkpCisgICAgZWxzZSBpZighc3RyY21wKCIlIiwgY29uZmlnLT50cmFjZV9kdW1wKSkKICAgICAgIC8qIE9rLCB0aGlzIGlzIHNvbWV3aGF0IGhhY2tpc2ggYnV0IHdlIGRvIGl0IHVuZG9jdW1lbnRlZCBmb3Igbm93ICovCiAgICAgICBjb25maWctPnRyYWNlX3N0cmVhbSA9IGNvbmZpZy0+ZXJyb3JzOyAgLyogYWthIHN0ZGVyciAqLwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfY2JfaGRyLmMgYi9zcmMvdG9vbF9jYl9oZHIuYwppbmRleCBmN2Q4MzU1Li4zODkxYjA3IDEwMDY0NAotLS0gYS9zcmMvdG9vbF9jYl9oZHIuYworKysgYi9zcmMvdG9vbF9jYl9oZHIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNyArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJ0b29sX3NldHVwLmgiCiAKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKICNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgogLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCkBAIC00Nyw3ICs0Nyw3IEBACiAgIHN0cnVjdCBPdXRTdHJ1Y3QgKmhlYWRzID0gaGRyY2JkYXRhLT5oZWFkczsKICAgY29uc3QgY2hhciAqc3RyID0gcHRyOwogICBjb25zdCBzaXplX3QgY2IgPSBzaXplICogbm1lbWI7Ci0gIGNvbnN0IGNoYXIgKmVuZCA9IChjaGFyKilwdHIgKyBjYjsKKyAgY29uc3QgY2hhciAqZW5kID0gKGNoYXIgKilwdHIgKyBjYjsKICAgY2hhciAqdXJsID0gTlVMTDsKIAogICAvKgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfY2ZnYWJsZS5jIGIvc3JjL3Rvb2xfY2ZnYWJsZS5jCmluZGV4IDhiNjBhOTEuLjVkMzhmYjMgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX2NmZ2FibGUuYworKysgYi9zcmMvdG9vbF9jZmdhYmxlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQxLDYgKzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTFBST1RPX1NNQlMpOwogICBjb25maWctPnByb3RvX3JlZGlyX3ByZXNlbnQgPSBGQUxTRTsKICAgY29uZmlnLT5wcm90b19kZWZhdWx0ID0gTlVMTDsKKyAgY29uZmlnLT50Y3Bfbm9kZWxheSA9IFRSVUU7IC8qIGVuYWJsZWQgYnkgZGVmYXVsdCAqLwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2NvbmZpZ19maWVsZHMoc3RydWN0IE9wZXJhdGlvbkNvbmZpZyAqY29uZmlnKQpAQCAtNjcsNiArNjgsOSBAQAogICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+dGxzX3VzZXJuYW1lKTsKICAgQ3VybF9zYWZlZnJlZShjb25maWctPnRsc19wYXNzd29yZCk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT50bHNfYXV0aHR5cGUpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHlfdGxzX3VzZXJuYW1lKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5X3Rsc19wYXNzd29yZCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wcm94eV90bHNfYXV0aHR5cGUpOwogICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHl1c2VycHdkKTsKICAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5KTsKIApAQCAtOTgsMTUgKzEwMiwyNCBAQAogICBjb25maWctPnVybF9vdXQgPSBOVUxMOwogCiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jaXBoZXJfbGlzdCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wcm94eV9jaXBoZXJfbGlzdCk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jZXJ0KTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5X2NlcnQpOwogICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+Y2VydF90eXBlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5X2NlcnRfdHlwZSk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jYWNlcnQpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHlfY2FjZXJ0KTsKICAgQ3VybF9zYWZlZnJlZShjb25maWctPmNhcGF0aCk7CisgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wcm94eV9jYXBhdGgpOwogICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+Y3JsZmlsZSk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5waW5uZWRwdWJrZXkpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHlfY3JsZmlsZSk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5rZXkpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHlfa2V5KTsKICAgQ3VybF9zYWZlZnJlZShjb25maWctPmtleV90eXBlKTsKKyAgQ3VybF9zYWZlZnJlZShjb25maWctPnByb3h5X2tleV90eXBlKTsKICAgQ3VybF9zYWZlZnJlZShjb25maWctPmtleV9wYXNzd2QpOworICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+cHJveHlfa2V5X3Bhc3N3ZCk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5wdWJrZXkpOwogICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+aG9zdHB1Ym1kNSk7CiAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5lbmdpbmUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfY2ZnYWJsZS5oIGIvc3JjL3Rvb2xfY2ZnYWJsZS5oCmluZGV4IGFhOThmY2UuLjY1ODlkODggMTAwNjQ0Ci0tLSBhL3NyYy90b29sX2NmZ2FibGUuaAorKysgYi9zcmMvdG9vbF9jZmdhYmxlLmgKQEAgLTc4LDYgKzc4LDkgQEAKICAgY2hhciAqdGxzX3VzZXJuYW1lOwogICBjaGFyICp0bHNfcGFzc3dvcmQ7CiAgIGNoYXIgKnRsc19hdXRodHlwZTsKKyAgY2hhciAqcHJveHlfdGxzX3VzZXJuYW1lOworICBjaGFyICpwcm94eV90bHNfcGFzc3dvcmQ7CisgIGNoYXIgKnByb3h5X3Rsc19hdXRodHlwZTsKICAgY2hhciAqcHJveHl1c2VycHdkOwogICBjaGFyICpwcm94eTsKICAgaW50IHByb3h5dmVyOyAgICAgICAgICAgICAvKiBzZXQgdG8gQ1VSTFBST1hZX0hUVFAqIGRlZmluZSAqLwpAQCAtMTA2LDE1ICsxMDksMjQgQEAKICAgc3RydWN0IGdldG91dCAqdXJsX2dldDsgICAvKiBwb2ludCB0byB0aGUgbm9kZSB0byBmaWxsIGluIFVSTCAqLwogICBzdHJ1Y3QgZ2V0b3V0ICp1cmxfb3V0OyAgIC8qIHBvaW50IHRvIHRoZSBub2RlIHRvIGZpbGwgaW4gb3V0ZmlsZSAqLwogICBjaGFyICpjaXBoZXJfbGlzdDsKKyAgY2hhciAqcHJveHlfY2lwaGVyX2xpc3Q7CiAgIGNoYXIgKmNlcnQ7CisgIGNoYXIgKnByb3h5X2NlcnQ7CiAgIGNoYXIgKmNlcnRfdHlwZTsKKyAgY2hhciAqcHJveHlfY2VydF90eXBlOwogICBjaGFyICpjYWNlcnQ7CisgIGNoYXIgKnByb3h5X2NhY2VydDsKICAgY2hhciAqY2FwYXRoOworICBjaGFyICpwcm94eV9jYXBhdGg7CiAgIGNoYXIgKmNybGZpbGU7CisgIGNoYXIgKnByb3h5X2NybGZpbGU7CiAgIGNoYXIgKnBpbm5lZHB1YmtleTsKICAgY2hhciAqa2V5OworICBjaGFyICpwcm94eV9rZXk7CiAgIGNoYXIgKmtleV90eXBlOworICBjaGFyICpwcm94eV9rZXlfdHlwZTsKICAgY2hhciAqa2V5X3Bhc3N3ZDsKKyAgY2hhciAqcHJveHlfa2V5X3Bhc3N3ZDsKICAgY2hhciAqcHVia2V5OwogICBjaGFyICpob3N0cHVibWQ1OwogICBjaGFyICplbmdpbmU7CkBAIC0xMjcsNiArMTM5LDggQEAKICAgYm9vbCBnbG9ib2ZmOwogICBib29sIHVzZV9odHRwZ2V0OwogICBib29sIGluc2VjdXJlX29rOyAgICAgICAgIC8qIHNldCBUUlVFIHRvIGFsbG93IGluc2VjdXJlIFNTTCBjb25uZWN0cyAqLworICBib29sIHByb3h5X2luc2VjdXJlX29rOyAgIC8qIHNldCBUUlVFIHRvIGFsbG93IGluc2VjdXJlIFNTTCBjb25uZWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm94eSAqLwogICBib29sIHZlcmlmeXN0YXR1czsKICAgYm9vbCBjcmVhdGVfZGlyczsKICAgYm9vbCBmdHBfY3JlYXRlX2RpcnM7CkBAIC0xNDIsNiArMTU2LDcgQEAKICAgc3RydWN0IGN1cmxfc2xpc3QgKnBvc3RxdW90ZTsKICAgc3RydWN0IGN1cmxfc2xpc3QgKnByZXF1b3RlOwogICBsb25nIHNzbF92ZXJzaW9uOworICBsb25nIHByb3h5X3NzbF92ZXJzaW9uOwogICBsb25nIGlwX3ZlcnNpb247CiAgIGN1cmxfVGltZUNvbmQgdGltZWNvbmQ7CiAgIHRpbWVfdCBjb25kdGltZTsKQEAgLTE3Niw2ICsxOTEsNyBAQAogICBib29sIHRjcF9ub2RlbGF5OwogICBib29sIHRjcF9mYXN0b3BlbjsKICAgbG9uZyByZXFfcmV0cnk7ICAgICAgICAgICAvKiBudW1iZXIgb2YgcmV0cmllcyAqLworICBib29sIHJldHJ5X2Nvbm5yZWZ1c2VkOyAgIC8qIHNldCBjb25uZWN0aW9uIHJlZnVzZWQgYXMgYSB0cmFuc2llbnQgZXJyb3IgKi8KICAgbG9uZyByZXRyeV9kZWxheTsgICAgICAgICAvKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKGluIHNlY29uZHMpICovCiAgIGxvbmcgcmV0cnlfbWF4dGltZTsgICAgICAgLyogbWF4aW11bSB0aW1lIHRvIGtlZXAgcmV0cnlpbmcgKi8KIApAQCAtMjAxLDcgKzIxNywxMCBAQAogICBib29sIHhhdHRyOyAgICAgICAgICAgICAgIC8qIHN0b3JlIG1ldGFkYXRhIGluIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KICAgbG9uZyBnc3NhcGlfZGVsZWdhdGlvbjsKICAgYm9vbCBzc2xfYWxsb3dfYmVhc3Q7ICAgICAvKiBhbGxvdyB0aGlzIFNTTCB2dWxuZXJhYmlsaXR5ICovCisgIGJvb2wgcHJveHlfc3NsX2FsbG93X2JlYXN0OyAvKiBhbGxvdyB0aGlzIFNTTCB2dWxuZXJhYmlsaXR5IGZvciBwcm94eSovCisKICAgYm9vbCBzc2xfbm9fcmV2b2tlOyAgICAgICAvKiBkaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrcyAqLworICAvKmJvb2wgcHJveHlfc3NsX25vX3Jldm9rZTsgKi8KIAogICBib29sIHVzZV9tZXRhbGluazsgICAgICAgIC8qIHByb2Nlc3MgZ2l2ZW4gVVJMcyBhcyBtZXRhbGluayBYTUwgZmlsZSAqLwogICBtZXRhbGlua2ZpbGUgKm1ldGFsaW5rZmlsZV9saXN0OyAvKiBwb2ludCB0byB0aGUgZmlyc3Qgbm9kZSAqLwpAQCAtMjM4LDcgKzI1Nyw3IEBACiAgIGJvb2wgdHJhY2V0aW1lOyAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSB0aW1lc3RhbXA/ICovCiAgIGludCBwcm9ncmVzc21vZGU7ICAgICAgICAgICAgICAgLyogQ1VSTF9QUk9HUkVTU19CQVIgLyBDVVJMX1BST0dSRVNTX1NUQVRTICovCiAgIGNoYXIgKmxpYmN1cmw7ICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGxpYmN1cmwgY29kZSB0byB0aGlzIGZpbGUgbmFtZSAqLwotCisgIGJvb2wgZmFpbF9lYXJseTsgICAgICAgICAgICAgICAgLyogZXhpdCBvbiBmaXJzdCB0cmFuc2ZlciBlcnJvciAqLwogICBzdHJ1Y3QgT3BlcmF0aW9uQ29uZmlnICpmaXJzdDsKICAgc3RydWN0IE9wZXJhdGlvbkNvbmZpZyAqY3VycmVudDsKICAgc3RydWN0IE9wZXJhdGlvbkNvbmZpZyAqbGFzdDsgICAvKiBBbHdheXMgbGFzdCBpbiB0aGUgc3RydWN0ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbF9kaXJoaWUuYyBiL3NyYy90b29sX2RpcmhpZS5jCmluZGV4IGI2NWRiNDEuLjIzYmIyY2IgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX2RpcmhpZS5jCisrKyBiL3NyYy90b29sX2RpcmhpZS5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC05MSw2ICs5MSwxNCBAQAogICogIHNob3VsZCBjcmVhdGUgYWxsIHRoZSBkaXIqIGF1dG9tYWdpY2FsbHkKICAqLwogCisjaWZkZWYgV0lOMzIKKy8qIHN5c3RlbXMgdGhhdCBtYXkgdXNlIGVpdGhlciBvciB3aGVuIHNwZWNpZnlpbmcgYSBwYXRoICovCisjZGVmaW5lIFBBVEhfREVMSU1JVEVSUyAiXFwvIgorI2Vsc2UKKyNkZWZpbmUgUEFUSF9ERUxJTUlURVJTIERJUl9DSEFSCisjZW5kaWYKKworCiBDVVJMY29kZSBjcmVhdGVfZGlyX2hpZXJhcmNoeShjb25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICplcnJvcnMpCiB7CiAgIGNoYXIgKnRlbXBkaXI7CkBAIC0xMTIsMTAgKzEyMCwxMiBAQAogICB9CiAgIGRpcmJ1aWxkdXBbMF0gPSAnXDAnOwogCi0gIHRlbXBkaXIgPSBzdHJ0b2sob3V0ZHVwLCBESVJfQ0hBUik7CisgIC8qIEFsbG93IHN0cnRvaygpIGhlcmUgc2luY2UgdGhpcyBpc24ndCB1c2VkIHRocmVhZGVkICovCisgIC8qICFjaGVja3NyYyEgZGlzYWJsZSBCQU5ORURGVU5DIDIgKi8KKyAgdGVtcGRpciA9IHN0cnRvayhvdXRkdXAsIFBBVEhfREVMSU1JVEVSUyk7CiAKICAgd2hpbGUodGVtcGRpciAhPSBOVUxMKSB7Ci0gICAgdGVtcGRpcjIgPSBzdHJ0b2soTlVMTCwgRElSX0NIQVIpOworICAgIHRlbXBkaXIyID0gc3RydG9rKE5VTEwsIFBBVEhfREVMSU1JVEVSUyk7CiAgICAgLyogc2luY2Ugc3RydG9rIHJldHVybnMgYSB0b2tlbiBmb3IgdGhlIGxhc3Qgd29yZCBldmVuCiAgICAgICAgaWYgbm90IGVuZGluZyB3aXRoIERJUl9DSEFSLCB3ZSBuZWVkIHRvIHBydW5lIGl0ICovCiAgICAgaWYodGVtcGRpcjIgIT0gTlVMTCkgewpAQCAtMTIzLDcgKzEzMyw4IEBACiAgICAgICBpZihkbGVuKQogICAgICAgICBzbnByaW50ZigmZGlyYnVpbGR1cFtkbGVuXSwgb3V0bGVuIC0gZGxlbiwgIiVzJXMiLCBESVJfQ0hBUiwgdGVtcGRpcik7CiAgICAgICBlbHNlIHsKLSAgICAgICAgaWYoMCAhPSBzdHJuY21wKG91dGR1cCwgRElSX0NIQVIsIDEpKQorICAgICAgICBpZihvdXRkdXAgPT0gdGVtcGRpcikKKyAgICAgICAgICAvKiB0aGUgb3V0cHV0IHN0cmluZyBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzZXBhcmF0b3IgKi8KICAgICAgICAgICBzdHJjcHkoZGlyYnVpbGR1cCwgdGVtcGRpcik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBzbnByaW50ZihkaXJidWlsZHVwLCBvdXRsZW4sICIlcyVzIiwgRElSX0NIQVIsIHRlbXBkaXIpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfZG9zd2luLmMgYi9zcmMvdG9vbF9kb3N3aW4uYwppbmRleCBhZWQ2NTdhLi5lYjNiMjljIDEwMDY0NAotLS0gYS9zcmMvdG9vbF9kb3N3aW4uYworKysgYi9zcmMvdG9vbF9kb3N3aW4uYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNjE1LDcgKzYxNSw3IEBACiBjaGFyICoqX19jcnQwX2dsb2JfZnVuY3Rpb24oY2hhciAqYXJnKQogewogICAodm9pZClhcmc7Ci0gIHJldHVybiAoY2hhcioqKTA7CisgIHJldHVybiAoY2hhciAqKikwOwogfQogCiAjZW5kaWYgLyogTVNET1MgJiYgKF9fREpHUFBfXyB8fCBfX0dPMzJfXykgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29sX2Zvcm1wYXJzZS5jIGIvc3JjL3Rvb2xfZm9ybXBhcnNlLmMKaW5kZXggZGUzMGM1Mi4uODgzNTJmYiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfZm9ybXBhcnNlLmMKKysrIGIvc3JjL3Rvb2xfZm9ybXBhcnNlLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAidG9vbF9zZXR1cC5oIgogCi0jaW5jbHVkZSAicmF3c3RyLmgiCisjaW5jbHVkZSAic3RyY2FzZS5oIgogCiAjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKIC8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfZ2V0cGFyYW0uYyBiL3NyYy90b29sX2dldHBhcmFtLmMKaW5kZXggZDYwZTA0Yy4uM2QyNTRlMSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfZ2V0cGFyYW0uYworKysgYi9zcmMvdG9vbF9nZXRwYXJhbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInRvb2xfc2V0dXAuaCIKIAotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKIAogI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCiAvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KQEAgLTEyNSw2ICsxMjUsNyBAQAogICB7IiRlIiwgInByb3h5LWRpZ2VzdCIsICAgICAgICAgICAgIEZBTFNFfSwKICAgeyIkZiIsICJwcm94eS1iYXNpYyIsICAgICAgICAgICAgICBGQUxTRX0sCiAgIHsiJGciLCAicmV0cnkiLCAgICAgICAgICAgICAgICAgICAgVFJVRX0sCisgIHsiJFYiLCAicmV0cnktY29ubnJlZnVzZWQiLCAgICAgICAgRkFMU0V9LAogICB7IiRoIiwgInJldHJ5LWRlbGF5IiwgICAgICAgICAgICAgIFRSVUV9LAogICB7IiRpIiwgInJldHJ5LW1heC10aW1lIiwgICAgICAgICAgIFRSVUV9LAogICB7IiRrIiwgInByb3h5LW5lZ290aWF0ZSIsICAgICAgICAgIEZBTFNFfSwKQEAgLTE5MCw2ICsxOTEsNyBAQAogICB7IjEwIiwgICJ0bHN2MS4wIiwgICAgICAgICAgICAgICAgIEZBTFNFfSwKICAgeyIxMSIsICAidGxzdjEuMSIsICAgICAgICAgICAgICAgICBGQUxTRX0sCiAgIHsiMTIiLCAgInRsc3YxLjIiLCAgICAgICAgICAgICAgICAgRkFMU0V9LAorICB7IjEzIiwgICJ0bHN2MS4zIiwgICAgICAgICAgICAgICAgIEZBTFNFfSwKICAgeyIyIiwgICJzc2x2MiIsICAgICAgICAgICAgICAgICAgICBGQUxTRX0sCiAgIHsiMyIsICAic3NsdjMiLCAgICAgICAgICAgICAgICAgICAgRkFMU0V9LAogICB7IjQiLCAgImlwdjQiLCAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKQEAgLTIyOCw3ICsyMzAsMjYgQEAKICAgeyJFciIsICJmYWxzZS1zdGFydCIsICAgICAgICAgICAgICBGQUxTRX0sCiAgIHsiRXMiLCAic3NsLW5vLXJldm9rZSIsICAgICAgICAgICAgRkFMU0V9LAogICB7IkV0IiwgInRjcC1mYXN0b3BlbiIsICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJFdSIsICJwcm94eS10bHN1c2VyIiwgICAgICAgICAgICBUUlVFfSwKKyAgeyJFdiIsICJwcm94eS10bHNwYXNzd29yZCIsICAgICAgICBUUlVFfSwKKyAgeyJFdyIsICJwcm94eS10bHNhdXRodHlwZSIsICAgICAgICBUUlVFfSwKKyAgeyJFeCIsICJwcm94eS1jZXJ0IiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJFeSIsICJwcm94eS1jZXJ0LXR5cGUiLCAgICAgICAgICBUUlVFfSwKKyAgeyJFeiIsICJwcm94eS1rZXkiLCAgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJFMCIsICJwcm94eS1rZXktdHlwZSIsICAgICAgICAgICBUUlVFfSwKKyAgeyJFMSIsICJwcm94eS1wYXNzIiwgICAgICAgICAgICAgICBUUlVFfSwKKyAgeyJFMiIsICJwcm94eS1jaXBoZXJzIiwgICAgICAgICAgICBUUlVFfSwKKyAgeyJFMyIsICJwcm94eS1jcmxmaWxlIiwgICAgICAgICAgICBUUlVFfSwKKyAgeyJFNCIsICJwcm94eS1zc2wtYWxsb3ctYmVhc3QiLCAgICBGQUxTRX0sCisgIHsiRTUiLCAibG9naW4tb3B0aW9ucyIsICAgICAgICAgICAgVFJVRX0sCisgIHsiRTYiLCAicHJveHktY2FjZXJ0IiwgICAgICAgICAgICAgVFJVRX0sCisgIHsiRTciLCAicHJveHktY2FwYXRoIiwgICAgICAgICAgICAgVFJVRX0sCisgIHsiRTgiLCAicHJveHktaW5zZWN1cmUiLCAgICAgICAgICAgRkFMU0V9LAorICB7IkU5IiwgInByb3h5LXRsc3YxIiwgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJFQSIsICJwcm94eS1zc2x2MiIsICAgICAgICAgICAgICBGQUxTRX0sCisgIHsiRUIiLCAicHJveHktc3NsdjMiLCAgICAgICAgICAgICAgRkFMU0V9LAogICB7ImYiLCAgImZhaWwiLCAgICAgICAgICAgICAgICAgICAgIEZBTFNFfSwKKyAgeyJmYSIsICJmYWlsLWVhcmx5IiwgICAgICAgICAgICAgICBGQUxTRX0sCiAgIHsiRiIsICAiZm9ybSIsICAgICAgICAgICAgICAgICAgICAgVFJVRX0sCiAgIHsiRnMiLCAiZm9ybS1zdHJpbmciLCAgICAgICAgICAgICAgVFJVRX0sCiAgIHsiZyIsICAiZ2xvYm9mZiIsICAgICAgICAgICAgICAgICAgRkFMU0V9LApAQCAtMzAxLDkgKzMyMiwxMiBAQAogICBpZihwYXJhbV9sZW5ndGggPT0gMCkKICAgICByZXR1cm47CiAKLSAgLyogbmV4dCBsZXNzIHRyaXZpYWw6IGNlcnRfcGFyYW1ldGVyIGNvbnRhaW5zIG5vIGNvbG9uIG5vciBiYWNrc2xhc2g7IHRoaXMKKyAgLyogbmV4dCBsZXNzIHRyaXZpYWw6IGNlcnRfcGFyYW1ldGVyIHN0YXJ0cyAncGtjczExOicgYW5kIHRodXMKKyAgICogbG9va3MgbGlrZSBhIFJGQzc1MTIgUEtDUyMxMSBVUkkgd2hpY2ggY2FuIGJlIHVzZWQgYXMtaXMuCisgICAqIEFsc28gaWYgY2VydF9wYXJhbWV0ZXIgY29udGFpbnMgbm8gY29sb24gbm9yIGJhY2tzbGFzaCwgdGhpcwogICAgKiBtZWFucyBubyBwYXNzcGhyYXNlIHdhcyBnaXZlbiBhbmQgbm8gY2hhcmFjdGVycyBlc2NhcGVkICovCi0gIGlmKCFzdHJwYnJrKGNlcnRfcGFyYW1ldGVyLCAiOlxcIikpIHsKKyAgaWYoIXN0cm5jbXAoY2VydF9wYXJhbWV0ZXIsICJwa2NzMTE6IiwgNykgfHwKKyAgICAgIXN0cnBicmsoY2VydF9wYXJhbWV0ZXIsICI6XFwiKSkgewogICAgICpjZXJ0bmFtZSA9IHN0cmR1cChjZXJ0X3BhcmFtZXRlcik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0zNzgsNiArNDAyLDIwIEBACiAgICpjZXJ0bmFtZV9wbGFjZSA9ICdcMCc7CiB9CiAKK3N0YXRpYyB2b2lkCitHZXRGaWxlQW5kUGFzc3dvcmQoY2hhciAqbmV4dGFyZywgY2hhciAqKmZpbGUsIGNoYXIgKipwYXNzd29yZCkKK3sKKyAgY2hhciAqY2VydG5hbWUsICpwYXNzcGhyYXNlOworICBwYXJzZV9jZXJ0X3BhcmFtZXRlcihuZXh0YXJnLCAmY2VydG5hbWUsICZwYXNzcGhyYXNlKTsKKyAgQ3VybF9zYWZlZnJlZSgqZmlsZSk7CisgICpmaWxlID0gY2VydG5hbWU7CisgIGlmKHBhc3NwaHJhc2UpIHsKKyAgICBDdXJsX3NhZmVmcmVlKCpwYXNzd29yZCk7CisgICAgKnBhc3N3b3JkID0gcGFzc3BocmFzZTsKKyAgfQorICBjbGVhbmFyZyhuZXh0YXJnKTsKK30KKwogUGFyYW1ldGVyRXJyb3IgZ2V0cGFyYW1ldGVyKGNoYXIgKmZsYWcsICAgIC8qIGYgb3IgLWxvbmctZmxhZyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5leHRhcmcsIC8qIE5VTEwgaWYgdW5zZXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICp1c2VkYXJnLCAvKiBzZXQgdG8gVFJVRSBpZiB0aGUgYXJnCkBAIC00MTMsMTAgKzQ1MSwxMCBAQAogICAgIH0KIAogICAgIGZvcihqID0gMDsgaiA8IHNpemVvZihhbGlhc2VzKS9zaXplb2YoYWxpYXNlc1swXSk7IGorKykgewotICAgICAgaWYoY3VybHhfc3RybmVxdWFsKGFsaWFzZXNbal0ubG5hbWUsIHdvcmQsIGZuYW0pKSB7CisgICAgICBpZihjdXJsX3N0cm5lcXVhbChhbGlhc2VzW2pdLmxuYW1lLCB3b3JkLCBmbmFtKSkgewogICAgICAgICBsb25nb3B0ID0gVFJVRTsKICAgICAgICAgbnVtaGl0cysrOwotICAgICAgICBpZihjdXJseF9yYXdfZXF1YWwoYWxpYXNlc1tqXS5sbmFtZSwgd29yZCkpIHsKKyAgICAgICAgaWYoY3VybF9zdHJlcXVhbChhbGlhc2VzW2pdLmxuYW1lLCB3b3JkKSkgewogICAgICAgICAgIHBhcnNlID0gYWxpYXNlc1tqXS5sZXR0ZXI7CiAgICAgICAgICAgaGl0ID0gajsKICAgICAgICAgICBudW1oaXRzID0gMTsgLyogYSBzaW5nbGUgdW5pcXVlIGhpdCAqLwpAQCAtNzg5LDYgKzgyNyw5IEBACiAgICAgICAgIGlmKGVycikKICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ1YnOiAvKiAtLXJldHJ5LWNvbm5yZWZ1c2VkICovCisgICAgICAgIGNvbmZpZy0+cmV0cnlfY29ubnJlZnVzZWQgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAnaCc6IC8qIC0tcmV0cnktZGVsYXkgKi8KICAgICAgICAgZXJyID0gc3RyMnVudW0oJmNvbmZpZy0+cmV0cnlfZGVsYXksIG5leHRhcmcpOwogICAgICAgICBpZihlcnIpCkBAIC0xMDU4LDYgKzEwOTksMTAgQEAKICAgICAgICAgLyogVExTIHZlcnNpb24gMS4yICovCiAgICAgICAgIGNvbmZpZy0+c3NsX3ZlcnNpb24gPSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMjsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICczJzoKKyAgICAgICAgLyogVExTIHZlcnNpb24gMS4zICovCisgICAgICAgIGNvbmZpZy0+c3NsX3ZlcnNpb24gPSBDVVJMX1NTTFZFUlNJT05fVExTdjFfMzsKKyAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBicmVhazsKICAgICBjYXNlICcyJzoKQEAgLTExMDYsNyArMTE1MSw3IEBACiAgICAgICBicmVhazsKICAgICBjYXNlICdDJzoKICAgICAgIC8qIFRoaXMgbWFrZXMgdXMgY29udGludWUgYW4gZnRwIHRyYW5zZmVyIGF0IGdpdmVuIHBvc2l0aW9uICovCi0gICAgICBpZighY3VybHhfc3RyZXF1YWwobmV4dGFyZywgIi0iKSkgeworICAgICAgaWYoc3RyY21wKG5leHRhcmcsICItIikpIHsKICAgICAgICAgZXJyID0gc3RyMm9mZnNldCgmY29uZmlnLT5yZXN1bWVfZnJvbSwgbmV4dGFyZyk7CiAgICAgICAgIGlmKGVycikKICAgICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTE1MCw3ICsxMTk1LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZignQCcgPT0gaXNfZmlsZSkgewogICAgICAgICAgIC8qIGEgJ0AnIGxldHRlciwgaXQgbWVhbnMgdGhhdCBhIGZpbGUgbmFtZSBvciAtIChzdGRpbikgZm9sbG93cyAqLwotICAgICAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItIiwgcCkpIHsKKyAgICAgICAgICBpZighc3RyY21wKCItIiwgcCkpIHsKICAgICAgICAgICAgIGZpbGUgPSBzdGRpbjsKICAgICAgICAgICAgIHNldF9iaW5tb2RlKHN0ZGluKTsKICAgICAgICAgICB9CkBAIC0xMjE1LDcgKzEyNjAsNyBAQAogICAgICAgICAgICBvciAtIChzdGRpbikgZm9sbG93cyAqLwogICAgICAgICBuZXh0YXJnKys7IC8qIHBhc3MgdGhlIEAgKi8KIAotICAgICAgICBpZihjdXJseF9zdHJlcXVhbCgiLSIsIG5leHRhcmcpKSB7CisgICAgICAgIGlmKCFzdHJjbXAoIi0iLCBuZXh0YXJnKSkgewogICAgICAgICAgIGZpbGUgPSBzdGRpbjsKICAgICAgICAgICBpZihzdWJsZXR0ZXIgPT0gJ2InKSAvKiBmb3JjZWQgZGF0YS1iaW5hcnkgKi8KICAgICAgICAgICAgIHNldF9iaW5tb2RlKHN0ZGluKTsKQEAgLTEzMjEsNiArMTM2Niw5IEBACiAgICAgYnJlYWs7CiAgICAgY2FzZSAnRSc6CiAgICAgICBzd2l0Y2goc3VibGV0dGVyKSB7CisgICAgICBjYXNlICdcMCc6IC8qIGNlcnRpZmljYXRlIGZpbGUgKi8KKyAgICAgICAgR2V0RmlsZUFuZFBhc3N3b3JkKG5leHRhcmcsICZjb25maWctPmNlcnQsICZjb25maWctPmtleV9wYXNzd2QpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgJ2EnOiAvKiBDQSBpbmZvIFBFTSBmaWxlICovCiAgICAgICAgIC8qIENBIGluZm8gUEVNIGZpbGUgKi8KICAgICAgICAgR2V0U3RyKCZjb25maWctPmNhY2VydCwgbmV4dGFyZyk7CkBAIC0xMzQwLDcgKzEzODgsNyBAQAogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgJ2YnOiAvKiBjcnlwdG8gZW5naW5lICovCiAgICAgICAgIEdldFN0cigmY29uZmlnLT5lbmdpbmUsIG5leHRhcmcpOwotICAgICAgICBpZihjb25maWctPmVuZ2luZSAmJiBjdXJseF9yYXdfZXF1YWwoY29uZmlnLT5lbmdpbmUsICJsaXN0IikpCisgICAgICAgIGlmKGNvbmZpZy0+ZW5naW5lICYmIGN1cmxfc3RyZXF1YWwoY29uZmlnLT5lbmdpbmUsICJsaXN0IikpCiAgICAgICAgICAgcmV0dXJuIFBBUkFNX0VOR0lORVNfUkVRVUVTVEVEOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgJ2cnOiAvKiBDQSBpbmZvIFBFTSBmaWxlICovCkBAIC0xMzc0LDcgKzE0MjIsNyBAQAogICAgICAgY2FzZSAnbSc6IC8qIFRMUyBhdXRoZW50aWNhdGlvbiB0eXBlICovCiAgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9UTFNBVVRIX1NSUCkgewogICAgICAgICAgIEdldFN0cigmY29uZmlnLT50bHNfYXV0aHR5cGUsIG5leHRhcmcpOwotICAgICAgICAgIGlmKCFzdHJlcXVhbChjb25maWctPnRsc19hdXRodHlwZSwgIlNSUCIpKQorICAgICAgICAgIGlmKCFjdXJsX3N0cmVxdWFsKGNvbmZpZy0+dGxzX2F1dGh0eXBlLCAiU1JQIikpCiAgICAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsgLyogb25seSBzdXBwb3J0IFRMUy1TUlAgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0xNDExLDIzICsxNDU5LDExMiBAQAogICAgICAgICBjb25maWctPnRjcF9mYXN0b3BlbiA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBkZWZhdWx0OiAvKiBjZXJ0aWZpY2F0ZSBmaWxlICovCi0gICAgICB7Ci0gICAgICAgIGNoYXIgKmNlcnRuYW1lLCAqcGFzc3BocmFzZTsKLSAgICAgICAgcGFyc2VfY2VydF9wYXJhbWV0ZXIobmV4dGFyZywgJmNlcnRuYW1lLCAmcGFzc3BocmFzZSk7Ci0gICAgICAgIEN1cmxfc2FmZWZyZWUoY29uZmlnLT5jZXJ0KTsKLSAgICAgICAgY29uZmlnLT5jZXJ0ID0gY2VydG5hbWU7Ci0gICAgICAgIGlmKHBhc3NwaHJhc2UpIHsKLSAgICAgICAgICBDdXJsX3NhZmVmcmVlKGNvbmZpZy0+a2V5X3Bhc3N3ZCk7Ci0gICAgICAgICAgY29uZmlnLT5rZXlfcGFzc3dkID0gcGFzc3BocmFzZTsKKyAgICAgIGNhc2UgJ3UnOiAvKiBUTFMgdXNlcm5hbWUgZm9yIHByb3h5ICovCisgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9UTFNBVVRIX1NSUCkKKyAgICAgICAgICBHZXRTdHIoJmNvbmZpZy0+cHJveHlfdGxzX3VzZXJuYW1lLCBuZXh0YXJnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBQQVJBTV9MSUJDVVJMX0RPRVNOVF9TVVBQT1JUOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndic6IC8qIFRMUyBwYXNzd29yZCBmb3IgcHJveHkgKi8KKyAgICAgICAgaWYoY3VybGluZm8tPmZlYXR1cmVzICYgQ1VSTF9WRVJTSU9OX1RMU0FVVEhfU1JQKQorICAgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eV90bHNfcGFzc3dvcmQsIG5leHRhcmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd3JzogLyogVExTIGF1dGhlbnRpY2F0aW9uIHR5cGUgZm9yIHByb3h5ICovCisgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9UTFNBVVRIX1NSUCkgeworICAgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eV90bHNfYXV0aHR5cGUsIG5leHRhcmcpOworICAgICAgICAgIGlmKCFjdXJsX3N0cmVxdWFsKGNvbmZpZy0+cHJveHlfdGxzX2F1dGh0eXBlLCAiU1JQIikpCisgICAgICAgICAgICByZXR1cm4gUEFSQU1fTElCQ1VSTF9ET0VTTlRfU1VQUE9SVDsgLyogb25seSBzdXBwb3J0IFRMUy1TUlAgKi8KICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIFBBUkFNX0xJQkNVUkxfRE9FU05UX1NVUFBPUlQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd4JzogLyogY2VydGlmaWNhdGUgZmlsZSBmb3IgcHJveHkgKi8KKyAgICAgICAgR2V0RmlsZUFuZFBhc3N3b3JkKG5leHRhcmcsICZjb25maWctPnByb3h5X2NlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnLT5wcm94eV9rZXlfcGFzc3dkKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJ3knOiAvKiBjZXJ0IGZpbGUgdHlwZSBmb3IgcHJveHkgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnByb3h5X2NlcnRfdHlwZSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd6JzogLyogcHJpdmF0ZSBrZXkgZmlsZSBmb3IgcHJveHkgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnByb3h5X2tleSwgbmV4dGFyZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICcwJzogLyogcHJpdmF0ZSBrZXkgZmlsZSB0eXBlIGZvciBwcm94eSAqLworICAgICAgICBHZXRTdHIoJmNvbmZpZy0+cHJveHlfa2V5X3R5cGUsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnMSc6IC8qIHByaXZhdGUga2V5IHBhc3NwaHJhc2UgZm9yIHByb3h5ICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eV9rZXlfcGFzc3dkLCBuZXh0YXJnKTsKICAgICAgICAgY2xlYW5hcmcobmV4dGFyZyk7Ci0gICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICcyJzogLyogY2lwaGVycyBmb3IgcHJveHkgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnByb3h5X2NpcGhlcl9saXN0LCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJzMnOiAvKiBDUkwgaW5mbyBQRU0gZmlsZSBmb3IgcHJveHkgKi8KKyAgICAgICAgLyogQ1JMIGZpbGUgKi8KKyAgICAgICAgR2V0U3RyKCZjb25maWctPnByb3h5X2NybGZpbGUsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnNCc6IC8qIG5vIGVtcHR5IFNTTCBmcmFnbWVudHMgZm9yIHByb3h5ICovCisgICAgICAgIGlmKGN1cmxpbmZvLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9TU0wpCisgICAgICAgICAgY29uZmlnLT5wcm94eV9zc2xfYWxsb3dfYmVhc3QgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICc1JzogLyogLS1sb2dpbi1vcHRpb25zICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5sb2dpbl9vcHRpb25zLCBuZXh0YXJnKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJzYnOiAvKiBDQSBpbmZvIFBFTSBmaWxlIGZvciBwcm94eSAqLworICAgICAgICAvKiBDQSBpbmZvIFBFTSBmaWxlICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eV9jYWNlcnQsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnNyc6IC8qIENBIGluZm8gUEVNIGZpbGUgZm9yIHByb3h5ICovCisgICAgICAgIC8qIENBIGNlcnQgZGlyZWN0b3J5ICovCisgICAgICAgIEdldFN0cigmY29uZmlnLT5wcm94eV9jYXBhdGgsIG5leHRhcmcpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnOCc6IC8qIGFsbG93IGluc2VjdXJlIFNTTCBjb25uZWN0cyBmb3IgcHJveHkgKi8KKyAgICAgICAgY29uZmlnLT5wcm94eV9pbnNlY3VyZV9vayA9IHRvZ2dsZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgJzknOgorICAgICAgICAvKiBUTFMgdmVyc2lvbiAxIGZvciBwcm94eSAqLworICAgICAgICBjb25maWctPnByb3h5X3NzbF92ZXJzaW9uID0gQ1VSTF9TU0xWRVJTSU9OX1RMU3YxOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAnQSc6CisgICAgICAgIC8qIFNTTCB2ZXJzaW9uIDIgZm9yIHByb3h5ICovCisgICAgICAgIGNvbmZpZy0+cHJveHlfc3NsX3ZlcnNpb24gPSBDVVJMX1NTTFZFUlNJT05fU1NMdjI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdCJzoKKyAgICAgICAgLyogU1NMIHZlcnNpb24gMyBmb3IgcHJveHkgKi8KKyAgICAgICAgY29uZmlnLT5wcm94eV9zc2xfdmVyc2lvbiA9IENVUkxfU1NMVkVSU0lPTl9TU0x2MzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6IC8qIHVua25vd24gZmxhZyAqLworICAgICAgICByZXR1cm4gUEFSQU1fT1BUSU9OX1VOS05PV047CiAgICAgICB9CiAgICAgICBicmVhazsKICAgICBjYXNlICdmJzoKLSAgICAgIC8qIGZhaWwgaGFyZCBvbiBlcnJvcnMgICovCi0gICAgICBjb25maWctPmZhaWxvbmVycm9yID0gdG9nZ2xlOworICAgICAgc3dpdGNoKHN1YmxldHRlcikgeworICAgICAgY2FzZSAnYSc6IC8qIC0tZmFpbC1lYXJseSAqLworICAgICAgICBnbG9iYWwtPmZhaWxfZWFybHkgPSB0b2dnbGU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogZmFpbCBoYXJkIG9uIGVycm9ycyAgKi8KKyAgICAgICAgY29uZmlnLT5mYWlsb25lcnJvciA9IHRvZ2dsZTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ0YnOgogICAgICAgLyogImZvcm0gZGF0YSIgc2ltdWxhdGlvbiwgdGhpcyBpcyBhIGxpdHRsZSBhZHZhbmNlZCBzbyBsZXRzIGRvIG91ciBiZXN0CkBAIC0xNzY3LDcgKzE5MDQsNyBAQAogICAgICAgICBGSUxFICpmaWxlOwogICAgICAgICBjb25zdCBjaGFyICpmbmFtZTsKICAgICAgICAgbmV4dGFyZysrOyAvKiBwYXNzIHRoZSBAICovCi0gICAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItIiwgbmV4dGFyZykpIHsKKyAgICAgICAgaWYoIXN0cmNtcCgiLSIsIG5leHRhcmcpKSB7CiAgICAgICAgICAgZm5hbWUgPSAiPHN0ZGluPiI7CiAgICAgICAgICAgZmlsZSA9IHN0ZGluOwogICAgICAgICB9CkBAIC0xODc3LDcgKzIwMTQsNyBAQAogICAgICAgYm9vbCBwYXNzYXJnOwogICAgICAgY2hhciAqZmxhZyA9IGFyZ3ZbaV07CiAKLSAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKCItLSIsIGFyZ3ZbaV0pKQorICAgICAgaWYoIXN0cmNtcCgiLS0iLCBhcmd2W2ldKSkKICAgICAgICAgLyogVGhpcyBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgZmxhZ3MgYW5kIHRodXMgZW5hYmxlcyB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIChVUkwpIGFyZ3VtZW50IHRvIHN0YXJ0IHdpdGggLS4gKi8KICAgICAgICAgc3RpbGxmbGFncyA9IEZBTFNFOwpAQCAtMTkzMyw3ICsyMDcwLDcgQEAKICAgICAgcmVzdWx0ICE9IFBBUkFNX0VOR0lORVNfUkVRVUVTVEVEKSB7CiAgICAgY29uc3QgY2hhciAqcmVhc29uID0gcGFyYW0ydGV4dChyZXN1bHQpOwogCi0gICAgaWYob3JpZ19vcHQgJiYgIWN1cmx4X3N0cmVxdWFsKCI6Iiwgb3JpZ19vcHQpKQorICAgIGlmKG9yaWdfb3B0ICYmIHN0cmNtcCgiOiIsIG9yaWdfb3B0KSkKICAgICAgIGhlbHBmKGNvbmZpZy0+ZXJyb3JzLCAib3B0aW9uICVzOiAlc1xuIiwgb3JpZ19vcHQsIHJlYXNvbik7CiAgICAgZWxzZQogICAgICAgaGVscGYoY29uZmlnLT5lcnJvcnMsICIlc1xuIiwgcmVhc29uKTsKZGlmZiAtLWdpdCBhL3NyYy90b29sX2dldHBhc3MuaCBiL3NyYy90b29sX2dldHBhc3MuaAppbmRleCA5NWRkNzc5Li5mNjM5NTk2IDEwMDY0NAotLS0gYS9zcmMvdG9vbF9nZXRwYXNzLmgKKysrIGIvc3JjL3Rvb2xfZ2V0cGFzcy5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTIsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMCw3ICszMCw3IEBACiAvKgogICogUmV0dXJuaW5nIE5VTEwgd2lsbCBhYm9ydCB0aGUgY29udGludWVkIG9wZXJhdGlvbiEKICAqLwotY2hhciogZ2V0cGFzc19yKGNvbnN0IGNoYXIgKnByb21wdCwgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmbGVuKTsKK2NoYXIgKmdldHBhc3Nfcihjb25zdCBjaGFyICpwcm9tcHQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zmxlbik7CiAjZW5kaWYKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfR0VUUEFTU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbF9oZWxwLmMgYi9zcmMvdG9vbF9oZWxwLmMKaW5kZXggZmI0MjhjOS4uMzlhNTE3OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfaGVscC5jCisrKyBiL3NyYy90b29sX2hlbHAuYwpAQCAtNzgsNyArNzgsNyBAQAogICAiICAgICAtLWRucy1pbnRlcmZhY2UgIEludGVyZmFjZSB0byB1c2UgZm9yIEROUyByZXF1ZXN0cyIsCiAgICIgICAgIC0tZG5zLWlwdjQtYWRkciAgSVB2NCBhZGRyZXNzIHRvIHVzZSBmb3IgRE5TIHJlcXVlc3RzLCBkb3Qgbm90YXRpb24iLAogICAiICAgICAtLWRucy1pcHY2LWFkZHIgIElQdjYgYWRkcmVzcyB0byB1c2UgZm9yIEROUyByZXF1ZXN0cywgZG90IG5vdGF0aW9uIiwKLSAgIiAtRCwgLS1kdW1wLWhlYWRlciBGSUxFICBXcml0ZSB0aGUgaGVhZGVycyB0byBGSUxFIiwKKyAgIiAtRCwgLS1kdW1wLWhlYWRlciBGSUxFICBXcml0ZSB0aGUgcmVjZWl2ZWQgaGVhZGVycyB0byBGSUxFIiwKICAgIiAgICAgLS1lZ2QtZmlsZSBGSUxFICBFR0Qgc29ja2V0IHBhdGggZm9yIHJhbmRvbSBkYXRhIChTU0wpIiwKICAgIiAgICAgLS1lbmdpbmUgRU5HSU5FICBDcnlwdG8gZW5naW5lICh1c2UgXCItLWVuZ2luZSBsaXN0XCIgZm9yIGxpc3QpIChTU0wpIiwKICNpZmRlZiBVU0VfRU5WSVJPTk1FTlQKQEAgLTg2LDYgKzg2LDcgQEAKICNlbmRpZgogICAiICAgICAtLWV4cGVjdDEwMC10aW1lb3V0IFNFQ09ORFMgSG93IGxvbmcgdG8gd2FpdCBmb3IgMTAwLWNvbnRpbnVlIChIKSIsCiAgICIgLWYsIC0tZmFpbCAgICAgICAgICBGYWlsIHNpbGVudGx5IChubyBvdXRwdXQgYXQgYWxsKSBvbiBIVFRQIGVycm9ycyAoSCkiLAorICAiICAgICAtLWZhaWwtZWFybHkgICAgRmFpbCBvbiBmaXJzdCB0cmFuc2ZlciBlcnJvciwgZG8gbm90IGNvbnRpbnVlIiwKICAgIiAgICAgLS1mYWxzZS1zdGFydCAgIEVuYWJsZSBUTFMgRmFsc2UgU3RhcnQuIiwKICAgIiAtRiwgLS1mb3JtIENPTlRFTlQgIFNwZWNpZnkgSFRUUCBtdWx0aXBhcnQgUE9TVCBkYXRhIChIKSIsCiAgICIgICAgIC0tZm9ybS1zdHJpbmcgU1RSSU5HICBTcGVjaWZ5IEhUVFAgbXVsdGlwYXJ0IFBPU1QgZGF0YSAoSCkiLApAQCAtMTc1LDEwICsxNzYsMzYgQEAKICAgIiAgICAgLS1wcm94eS1hbnlhdXRoICBQaWNrIFwiYW55XCIgcHJveHkgYXV0aGVudGljYXRpb24gbWV0aG9kIChIKSIsCiAgICIgICAgIC0tcHJveHktYmFzaWMgICBVc2UgQmFzaWMgYXV0aGVudGljYXRpb24gb24gdGhlIHByb3h5IChIKSIsCiAgICIgICAgIC0tcHJveHktZGlnZXN0ICBVc2UgRGlnZXN0IGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBwcm94eSAoSCkiLAorICAiICAgICAtLXByb3h5LWNhY2VydCBGSUxFICIKKyAgIkNBIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBwZWVyIGFnYWluc3QgZm9yIHByb3h5IChTU0wpIiwKKyAgIiAgICAgLS1wcm94eS1jYXBhdGggRElSICIKKyAgIkNBIGRpcmVjdG9yeSB0byB2ZXJpZnkgcGVlciBhZ2FpbnN0IGZvciBwcm94eSAoU1NMKSIsCisgICIgICAgIC0tcHJveHktY2VydCBDRVJUWzpQQVNTV0RdICIKKyAgIkNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlIGFuZCBwYXNzd29yZCBmb3IgcHJveHkgKFNTTCkiLAorICAiICAgICAtLXByb3h5LWNlcnQtdHlwZSBUWVBFICIKKyAgIkNlcnRpZmljYXRlIGZpbGUgdHlwZSAoREVSL1BFTS9FTkcpIGZvciBwcm94eSAoU1NMKSIsCisgICIgICAgIC0tcHJveHktY2lwaGVycyBMSVNUIFNTTCBjaXBoZXJzIHRvIHVzZSBmb3IgcHJveHkgKFNTTCkiLAorICAiICAgICAtLXByb3h5LWNybGZpbGUgRklMRSAiCisgICJHZXQgYSBDUkwgbGlzdCBpbiBQRU0gZm9ybWF0IGZyb20gdGhlIGdpdmVuIGZpbGUgZm9yIHByb3h5IiwKKyAgIiAgICAgLS1wcm94eS1pbnNlY3VyZSAiCisgICJBbGxvdyBjb25uZWN0aW9ucyB0byBTU0wgc2l0ZXMgd2l0aG91dCBjZXJ0cyBmb3IgcHJveHkgKEgpIiwKKyAgIiAgICAgLS1wcm94eS1rZXkgS0VZIFByaXZhdGUga2V5IGZpbGUgbmFtZSBmb3IgcHJveHkgKFNTTCkiLAorICAiICAgICAtLXByb3h5LWtleS10eXBlIFRZUEUgIgorICAiUHJpdmF0ZSBrZXkgZmlsZSB0eXBlIGZvciBwcm94eSAoREVSL1BFTS9FTkcpIChTU0wpIiwKICAgIiAgICAgLS1wcm94eS1uZWdvdGlhdGUgICIKICAgIlVzZSBIVFRQIE5lZ290aWF0ZSAoU1BORUdPKSBhdXRoZW50aWNhdGlvbiBvbiB0aGUgcHJveHkgKEgpIiwKICAgIiAgICAgLS1wcm94eS1udGxtICAgIFVzZSBOVExNIGF1dGhlbnRpY2F0aW9uIG9uIHRoZSBwcm94eSAoSCkiLAogICAiICAgICAtLXByb3h5LWhlYWRlciBMSU5FIFBhc3MgY3VzdG9tIGhlYWRlciBMSU5FIHRvIHByb3h5IChIKSIsCisgICIgICAgIC0tcHJveHktcGFzcyBQQVNTIFBhc3MgcGhyYXNlIGZvciB0aGUgcHJpdmF0ZSBrZXkgZm9yIHByb3h5IChTU0wpIiwKKyAgIiAgICAgLS1wcm94eS1zc2wtYWxsb3ctYmVhc3QgIgorICAiQWxsb3cgc2VjdXJpdHkgZmxhdyB0byBpbXByb3ZlIGludGVyb3AgZm9yIHByb3h5IChTU0wpIiwKKyAgIiAgICAgLS1wcm94eS1zc2x2MiAgIFVzZSBTU0x2MiBmb3IgcHJveHkgKFNTTCkiLAorICAiICAgICAtLXByb3h5LXNzbHYzICAgVXNlIFNTTHYzIGZvciBwcm94eSAoU1NMKSIsCisgICIgICAgIC0tcHJveHktdGxzdjEgICBVc2UgVExTdjEgZm9yIHByb3h5IChTU0wpIiwKKyAgIiAgICAgLS1wcm94eS10bHN1c2VyIFVTRVIgVExTIHVzZXJuYW1lIGZvciBwcm94eSIsCisgICIgICAgIC0tcHJveHktdGxzcGFzc3dvcmQgU1RSSU5HIFRMUyBwYXNzd29yZCBmb3IgcHJveHkiLAorICAiICAgICAtLXByb3h5LXRsc2F1dGh0eXBlIFNUUklORyAiCisgICJUTFMgYXV0aGVudGljYXRpb24gdHlwZSBmb3IgcHJveHkgKGRlZmF1bHQgU1JQKSIsCiAgICIgICAgIC0tcHJveHktc2VydmljZS1uYW1lIE5BTUUgIFNQTkVHTyBwcm94eSBzZXJ2aWNlIG5hbWUiLAogICAiICAgICAtLXNlcnZpY2UtbmFtZSBOQU1FICBTUE5FR08gc2VydmljZSBuYW1lIiwKICAgIiAtVSwgLS1wcm94eS11c2VyIFVTRVJbOlBBU1NXT1JEXSAgUHJveHkgdXNlciBhbmQgcGFzc3dvcmQiLApAQCAtMTk4LDYgKzIyNSw3IEBACiAgICIgICAgIC0tcmVzb2x2ZSBIT1NUOlBPUlQ6QUREUkVTUyAgRm9yY2UgcmVzb2x2ZSBvZiBIT1NUOlBPUlQgdG8gQUREUkVTUyIsCiAgICIgICAgIC0tcmV0cnkgTlVNICAgIgogICAiUmV0cnkgcmVxdWVzdCBOVU0gdGltZXMgaWYgdHJhbnNpZW50IHByb2JsZW1zIG9jY3VyIiwKKyAgIiAgICAgLS1yZXRyeS1jb25ucmVmdXNlZCAgUmV0cnkgb24gY29ubmVjdGlvbiByZWZ1c2VkICh1c2Ugd2l0aCAtLXJldHJ5KSIsCiAgICIgICAgIC0tcmV0cnktZGVsYXkgU0VDT05EUyAgV2FpdCBTRUNPTkRTIGJldHdlZW4gcmV0cmllcyIsCiAgICIgICAgIC0tcmV0cnktbWF4LXRpbWUgU0VDT05EUyAgUmV0cnkgb25seSB3aXRoaW4gdGhpcyBwZXJpb2QiLAogICAiICAgICAtLXNhc2wtaXIgICAgICAgRW5hYmxlIGluaXRpYWwgcmVzcG9uc2UgaW4gU0FTTCBhdXRoZW50aWNhdGlvbiIsCkBAIC0yMzIsNiArMjYwLDcgQEAKICAgIiAgICAgLS10bHN2MS4wICAgICAgIFVzZSBUTFN2MS4wIChTU0wpIiwKICAgIiAgICAgLS10bHN2MS4xICAgICAgIFVzZSBUTFN2MS4xIChTU0wpIiwKICAgIiAgICAgLS10bHN2MS4yICAgICAgIFVzZSBUTFN2MS4yIChTU0wpIiwKKyAgIiAgICAgLS10bHN2MS4zICAgICAgIFVzZSBUTFN2MS4zIChTU0wpIiwKICAgIiAgICAgLS10cmFjZSBGSUxFICAgIFdyaXRlIGEgZGVidWcgdHJhY2UgdG8gRklMRSIsCiAgICIgICAgIC0tdHJhY2UtYXNjaWkgRklMRSAgTGlrZSAtLXRyYWNlLCBidXQgd2l0aG91dCBoZXggb3V0cHV0IiwKICAgIiAgICAgLS10cmFjZS10aW1lICAgIEFkZCB0aW1lIHN0YW1wcyB0byB0cmFjZS92ZXJib3NlIG91dHB1dCIsCmRpZmYgLS1naXQgYS9zcmMvdG9vbF9oZWxwZXJzLmMgYi9zcmMvdG9vbF9oZWxwZXJzLmMKaW5kZXggZmVmMTQ1OS4uYjVhNjE5YiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfaGVscGVycy5jCisrKyBiL3NyYy90b29sX2hlbHBlcnMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNyArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJ0b29sX3NldHVwLmgiCiAKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKICNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgogLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAibWVtZGVidWcuaCIgLyoga2VlcCB0aGlzIGFzIExBU1QgaW5jbHVkZSAqLwogCiAvKgotKiogSGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyb20gbW9yZSB0aGEgb25lIHNvdXJjZSBmaWxlLgorKiogSGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyb20gbW9yZSB0aGFuIG9uZSBzb3VyY2UgZmlsZS4KICovCiAKIGNvbnN0IGNoYXIgKnBhcmFtMnRleHQoaW50IHJlcykKZGlmZiAtLWdpdCBhL3NyYy90b29sX2xpYmluZm8uYyBiL3NyYy90b29sX2xpYmluZm8uYwppbmRleCA1ZGI4NTQ4Li5kMmJmN2ZiIDEwMDY0NAotLS0gYS9zcmMvdG9vbF9saWJpbmZvLmMKKysrIGIvc3JjL3Rvb2xfbGliaW5mby5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMSw3ICsyMSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInRvb2xfc2V0dXAuaCIKIAotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKIAogI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCiAvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KQEAgLTg5LDcgKzg5LDcgQEAKICAgaWYoY3VybGluZm8tPnByb3RvY29scykgewogICAgIGZvcihwcm90byA9IGN1cmxpbmZvLT5wcm90b2NvbHM7ICpwcm90bzsgcHJvdG8rKykgewogICAgICAgZm9yKHAgPSBwb3NzaWJseV9idWlsdF9pbjsgcC0+cHJvdG9fbmFtZTsgcCsrKSB7Ci0gICAgICAgIGlmKGN1cmx4X3Jhd19lcXVhbCgqcHJvdG8sIHAtPnByb3RvX25hbWUpKSB7CisgICAgICAgIGlmKGN1cmxfc3RyZXF1YWwoKnByb3RvLCBwLT5wcm90b19uYW1lKSkgewogICAgICAgICAgIGJ1aWx0X2luX3Byb3RvcyB8PSBwLT5wcm90b19wYXR0ZXJuOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvdG9vbF9tZXRhbGluay5jIGIvc3JjL3Rvb2xfbWV0YWxpbmsuYwppbmRleCA5YTY0NjVlLi5mNDE3MzU2IDEwMDY0NAotLS0gYS9zcmMvdG9vbF9tZXRhbGluay5jCisrKyBiL3NyYy90b29sX21ldGFsaW5rLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI0LDYgKzI0LDcgQEAKICNpZmRlZiBVU0VfTUVUQUxJTksKIAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAKICNpZmRlZiBIQVZFX0ZDTlRMX0gKICMgIGluY2x1ZGUgPGZjbnRsLmg+CkBAIC05Miw4ICs5Myw2IEBACiAjICBlcnJvciAiQ2FuJ3QgY29tcGlsZSBNRVRBTElOSyBzdXBwb3J0IHdpdGhvdXQgYSBjcnlwdG8gbGlicmFyeS4iCiAjZW5kaWYKIAotI2luY2x1ZGUgInJhd3N0ci5oIgotCiAjZGVmaW5lIEVOQUJMRV9DVVJMWF9QUklOVEYKIC8qIHVzZSBvdXIgb3duIHByaW50ZigpIGZ1bmN0aW9ucyAqLwogI2luY2x1ZGUgImN1cmx4LmgiCkBAIC01NjMsMTggKzU2MiwxMyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBoZXhfdG9fdWludChjb25zdCBjaGFyICpzKQogewotICBpbnQgdlsyXTsKLSAgaW50IGk7Ci0gIGZvcihpID0gMDsgaSA8IDI7ICsraSkgewotICAgIHZbaV0gPSBDdXJsX3Jhd190b3VwcGVyKHNbaV0pOwotICAgIGlmKCcwJyA8PSB2W2ldICYmIHZbaV0gPD0gJzknKSB7Ci0gICAgICB2W2ldIC09ICcwJzsKLSAgICB9Ci0gICAgZWxzZSBpZignQScgPD0gdltpXSAmJiB2W2ldIDw9ICdaJykgewotICAgICAgdltpXSAtPSAnQSctMTA7Ci0gICAgfQotICB9Ci0gIHJldHVybiAodW5zaWduZWQgY2hhcikoKHZbMF0gPDwgNCkgfCB2WzFdKTsKKyAgY2hhciBidWZbM107CisgIHVuc2lnbmVkIGxvbmcgdmFsOworICBidWZbMF0gPSBzWzBdOworICBidWZbMV0gPSBzWzFdOworICBidWZbMl0gPSAwOworICB2YWwgPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpOworICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpKHZhbCYweGZmKTsKIH0KIAogLyoKQEAgLTc0Nyw3ICs3NDEsNyBAQAogICAgICAgICArK2RpZ2VzdF9hbGlhcykgewogICAgICAgbWV0YWxpbmtfY2hlY2tzdW1fdCAqKnA7CiAgICAgICBmb3IocCA9IGZpbGVpbmZvLT5jaGVja3N1bXM7ICpwOyArK3ApIHsKLSAgICAgICAgaWYoQ3VybF9yYXdfZXF1YWwoZGlnZXN0X2FsaWFzLT5hbGlhc19uYW1lLCAoKnApLT50eXBlKSAmJgorICAgICAgICBpZihjdXJsX3N0cmVxdWFsKGRpZ2VzdF9hbGlhcy0+YWxpYXNfbmFtZSwgKCpwKS0+dHlwZSkgJiYKICAgICAgICAgICAgY2hlY2tfaGV4X2RpZ2VzdCgoKnApLT5oYXNoLCBkaWdlc3RfYWxpYXMtPmRpZ2VzdF9kZWYpKSB7CiAgICAgICAgICAgZi0+Y2hlY2tzdW0gPQogICAgICAgICAgICAgbmV3X21ldGFsaW5rX2NoZWNrc3VtX2Zyb21faGV4X2RpZ2VzdChkaWdlc3RfYWxpYXMtPmRpZ2VzdF9kZWYsCkBAIC03NzcsMTAgKzc3MSwxMCBAQAogICAgICAgICAgbWV0YWluZm8gZmlsZSBVUkwgbWF5IGJlIGFwcGVhcmVkIGluIGZpbGVpbmZvLT5tZXRhdXJscy4KICAgICAgICovCiAgICAgICBpZigoKnApLT50eXBlID09IE5VTEwgfHwKLSAgICAgICAgIEN1cmxfcmF3X2VxdWFsKCgqcCktPnR5cGUsICJodHRwIikgfHwKLSAgICAgICAgIEN1cmxfcmF3X2VxdWFsKCgqcCktPnR5cGUsICJodHRwcyIpIHx8Ci0gICAgICAgICBDdXJsX3Jhd19lcXVhbCgoKnApLT50eXBlLCAiZnRwIikgfHwKLSAgICAgICAgIEN1cmxfcmF3X2VxdWFsKCgqcCktPnR5cGUsICJmdHBzIikpIHsKKyAgICAgICAgIGN1cmxfc3RyZXF1YWwoKCpwKS0+dHlwZSwgImh0dHAiKSB8fAorICAgICAgICAgY3VybF9zdHJlcXVhbCgoKnApLT50eXBlLCAiaHR0cHMiKSB8fAorICAgICAgICAgY3VybF9zdHJlcXVhbCgoKnApLT50eXBlLCAiZnRwIikgfHwKKyAgICAgICAgIGN1cmxfc3RyZXF1YWwoKCpwKS0+dHlwZSwgImZ0cHMiKSkgewogICAgICAgICByZXMgPSBuZXdfbWV0YWxpbmtfcmVzb3VyY2UoKCpwKS0+dXJsKTsKICAgICAgICAgdGFpbC0+bmV4dCA9IHJlczsKICAgICAgICAgdGFpbCA9IHJlczsKQEAgLTkwNiw3ICs5MDAsNyBAQAogICBpZighKnB0cikgewogICAgIHJldHVybiAwOwogICB9Ci0gIHJldHVybiBDdXJsX3Jhd19uZXF1YWwocHRyLCBtZWRpYV90eXBlLCBtZWRpYV90eXBlX2xlbikgJiYKKyAgcmV0dXJuIGN1cmxfc3RybmVxdWFsKHB0ciwgbWVkaWFfdHlwZSwgbWVkaWFfdHlwZV9sZW4pICYmCiAgICAgKCoocHRyK21lZGlhX3R5cGVfbGVuKSA9PSAnXDAnIHx8ICoocHRyK21lZGlhX3R5cGVfbGVuKSA9PSAnICcgfHwKICAgICAgKihwdHIrbWVkaWFfdHlwZV9sZW4pID09ICdcdCcgfHwgKihwdHIrbWVkaWFfdHlwZV9sZW4pID09ICc7Jyk7CiB9CmRpZmYgLS1naXQgYS9zcmMvdG9vbF9vcGVyYXRlLmMgYi9zcmMvdG9vbF9vcGVyYXRlLmMKaW5kZXggMmI1M2M5YS4uOTRkODdmZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfb3BlcmF0ZS5jCisrKyBiL3NyYy90b29sX29wZXJhdGUuYwpAQCAtNDMsNyArNDMsNyBAQAogIyAgaW5jbHVkZSA8ZmFiZGVmLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKIAogI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCiAvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KQEAgLTE0Myw4ICsxNDMsOCBAQAogICogYW5kIENEL0RWRCBpbWFnZXMgc2hvdWxkIGJlIGVpdGhlciBhIFNUUkVBTV9MRiBmb3JtYXQgb3IgYSBmaXhlZCBmb3JtYXQuCiAgKgogICovCi1zdGF0aWMgY3VybF9vZmZfdCB2bXNfcmVhbGZpbGVzaXplKGNvbnN0IGNoYXIgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Rfc3RhdCAqIHN0YXRfYnVmKQorc3RhdGljIGN1cmxfb2ZmX3Qgdm1zX3JlYWxmaWxlc2l6ZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Rfc3RhdCAqc3RhdF9idWYpCiB7CiAgIGNoYXIgYnVmZmVyWzgxOTJdOwogICBjdXJsX29mZl90IGNvdW50OwpAQCAtMTc0LDggKzE3NCw4IEBACiAgKiAgaWYgbm90IHRvIGNhbGwgYSByb3V0aW5lIHRvIGdldCB0aGUgY29ycmVjdCBzaXplLgogICoKICAqLwotc3RhdGljIGN1cmxfb2ZmX3QgVm1zU3BlY2lhbFNpemUoY29uc3QgY2hhciAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Rfc3RhdCAqIHN0YXRfYnVmKQorc3RhdGljIGN1cmxfb2ZmX3QgVm1zU3BlY2lhbFNpemUoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdF9zdGF0ICpzdGF0X2J1ZikKIHsKICAgc3dpdGNoKHN0YXRfYnVmLT5zdF9mYWJfcmZtKSB7CiAgIGNhc2UgRkFCJENfVkFSOgpAQCAtMzIxLDcgKzMyMSw3IEBACiAgIC8qIFNpbmdsZSBoZWFkZXIgZmlsZSBmb3IgYWxsIFVSTHMgKi8KICAgaWYoY29uZmlnLT5oZWFkZXJmaWxlKSB7CiAgICAgLyogb3BlbiBmaWxlIGZvciBvdXRwdXQ6ICovCi0gICAgaWYoIWN1cmx4X3N0cmVxdWFsKGNvbmZpZy0+aGVhZGVyZmlsZSwgIi0iKSkgeworICAgIGlmKHN0cmNtcChjb25maWctPmhlYWRlcmZpbGUsICItIikpIHsKICAgICAgIEZJTEUgKm5ld2ZpbGUgPSBmb3Blbihjb25maWctPmhlYWRlcmZpbGUsICJ3YiIpOwogICAgICAgaWYoIW5ld2ZpbGUpIHsKICAgICAgICAgd2FybmYoY29uZmlnLT5nbG9iYWwsICJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgY29uZmlnLT5oZWFkZXJmaWxlKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgICAgICB1cmxudW0gPSAxOyAvKiB3aXRob3V0IGdsb2JiaW5nLCB0aGlzIGlzIGEgc2luZ2xlIFVSTCAqLwogCiAgICAgICAvKiBpZiBtdWx0aXBsZSBmaWxlcyBleHRyYWN0ZWQgdG8gc3Rkb3V0LCBpbnNlcnQgc2VwYXJhdG9ycyEgKi8KLSAgICAgIHNlcGFyYXRvcj0gKCghb3V0ZmlsZXMgfHwgY3VybHhfc3RyZXF1YWwob3V0ZmlsZXMsICItIikpICYmIHVybG51bSA+IDEpOworICAgICAgc2VwYXJhdG9yPSAoKCFvdXRmaWxlcyB8fCAhc3RyY21wKG91dGZpbGVzLCAiLSIpKSAmJiB1cmxudW0gPiAxKTsKIAogICAgICAgLyogSGVyZSdzIGxvb3BpbmcgYXJvdW5kIGVhY2ggZ2xvYmJlZCBVUkwgKi8KICAgICAgIGZvcihsaSA9IDAgOyBsaSA8IHVybG51bTsgbGkrKykgewpAQCAtNTM0LDcgKzUzNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZigoKHVybG5vZGUtPmZsYWdzJkdFVE9VVF9VU0VSRU1PVEUpIHx8Ci0gICAgICAgICAgICAob3V0ZmlsZSAmJiAhY3VybHhfc3RyZXF1YWwoIi0iLCBvdXRmaWxlKSkpICYmCisgICAgICAgICAgICAob3V0ZmlsZSAmJiBzdHJjbXAoIi0iLCBvdXRmaWxlKSkpICYmCiAgICAgICAgICAgIChtZXRhbGluayB8fCAhY29uZmlnLT51c2VfbWV0YWxpbmspKSB7CiAKICAgICAgICAgICAvKgpAQCAtNzE1LDcgKzcxNSw3IEBACiAgICAgICAgICAgREVCVUdBU1NFUlQoaW5mZCA9PSBTVERJTl9GSUxFTk8pOwogCiAgICAgICAgICAgc2V0X2Jpbm1vZGUoc3RkaW4pOwotICAgICAgICAgIGlmKGN1cmx4X3N0cmVxdWFsKHVwbG9hZGZpbGUsICIuIikpIHsKKyAgICAgICAgICBpZighc3RyY21wKHVwbG9hZGZpbGUsICIuIikpIHsKICAgICAgICAgICAgIGlmKGN1cmx4X25vbmJsb2NrKChjdXJsX3NvY2tldF90KWluZmQsIFRSVUUpIDwgMCkKICAgICAgICAgICAgICAgd2FybmYoY29uZmlnLT5nbG9iYWwsCiAgICAgICAgICAgICAgICAgICAgICJmY250bCBmYWlsZWQgb24gZmQ9JWQ6ICVzXG4iLCBpbmZkLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNzkyLDE0ICs3OTIsMTUgQEAKICAgICAgICAgICBzZXRfYmlubW9kZShzdGRvdXQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYoY29uZmlnLT50Y3Bfbm9kZWxheSkKLSAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UQ1BfTk9ERUxBWSwgMUwpOworICAgICAgICBpZighY29uZmlnLT50Y3Bfbm9kZWxheSkKKyAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9UQ1BfTk9ERUxBWSwgMEwpOwogCiAgICAgICAgIGlmKGNvbmZpZy0+dGNwX2Zhc3RvcGVuKQogICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1RDUF9GQVNUT1BFTiwgMUwpOwogCiAgICAgICAgIC8qIHdoZXJlIHRvIHN0b3JlICovCiAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgJm91dHMpOworICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSwgJm91dHMpOwogICAgICAgICBpZihtZXRhbGluayB8fCAhY29uZmlnLT51c2VfbWV0YWxpbmspCiAgICAgICAgICAgLyogd2hhdCBjYWxsIHRvIHdyaXRlICovCiAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgdG9vbF93cml0ZV9jYik7CkBAIC04NjgsOCArODY5LDkgQEAKIAogICAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuMTAgKi8KICAgICAgICAgICBpZihjb25maWctPnNvY2tzcHJveHkpIHsKLSAgICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWSwgY29uZmlnLT5zb2Nrc3Byb3h5KTsKLSAgICAgICAgICAgIG15X3NldG9wdF9lbnVtKGN1cmwsIENVUkxPUFRfUFJPWFlUWVBFLCAobG9uZyljb25maWctPnNvY2tzdmVyKTsKKyAgICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9TT0NLU19QUk9YWSwgY29uZmlnLT5zb2Nrc3Byb3h5KTsKKyAgICAgICAgICAgIG15X3NldG9wdF9lbnVtKGN1cmwsIENVUkxPUFRfU09DS1NfUFJPWFlUWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpY29uZmlnLT5zb2Nrc3Zlcik7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgLyogbmV3IGluIGxpYmN1cmwgNy4xMC42ICovCkBAIC05OTksNiArMTAwMSw3IEBACiAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUkVTVU1FX0ZST01fTEFSR0UsIENVUkxfT0ZGX1RfQygwKSk7CiAKICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX0tFWVBBU1NXRCwgY29uZmlnLT5rZXlfcGFzc3dkKTsKKyAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX0tFWVBBU1NXRCwgY29uZmlnLT5wcm94eV9rZXlfcGFzc3dkKTsKIAogICAgICAgICBpZihidWlsdF9pbl9wcm90b3MgJiAoQ1VSTFBST1RPX1NDUHxDVVJMUFJPVE9fU0ZUUCkpIHsKIApAQCAtMTAxNiw2ICsxMDE5LDggQEAKIAogICAgICAgICBpZihjb25maWctPmNhY2VydCkKICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ0FJTkZPLCBjb25maWctPmNhY2VydCk7CisgICAgICAgIGlmKGNvbmZpZy0+cHJveHlfY2FjZXJ0KQorICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWV9DQUlORk8sIGNvbmZpZy0+cHJveHlfY2FjZXJ0KTsKICAgICAgICAgaWYoY29uZmlnLT5jYXBhdGgpIHsKICAgICAgICAgICByZXN1bHQgPSByZXNfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX0NBUEFUSCwgY29uZmlnLT5jYXBhdGgpOwogICAgICAgICAgIGlmKHJlc3VsdCA9PSBDVVJMRV9OT1RfQlVJTFRfSU4pIHsKQEAgLTEwMjYsMTcgKzEwMzEsMzIgQEAKICAgICAgICAgICBlbHNlIGlmKHJlc3VsdCkKICAgICAgICAgICAgIGdvdG8gc2hvd19lcnJvcjsKICAgICAgICAgfQorICAgICAgICBpZihjb25maWctPnByb3h5X2NhcGF0aCkKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUFJPWFlfQ0FQQVRILCBjb25maWctPnByb3h5X2NhcGF0aCk7CisgICAgICAgIGVsc2UgaWYoY29uZmlnLT5jYXBhdGgpIC8qIENVUkxPUFRfUFJPWFlfQ0FQQVRIIGRlZmF1bHQgaXMgY2FwYXRoICovCisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX0NBUEFUSCwgY29uZmlnLT5jYXBhdGgpOworCiAgICAgICAgIGlmKGNvbmZpZy0+Y3JsZmlsZSkKICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfQ1JMRklMRSwgY29uZmlnLT5jcmxmaWxlKTsKKyAgICAgICAgaWYoY29uZmlnLT5wcm94eV9jcmxmaWxlKQorICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLCBjb25maWctPnByb3h5X2NybGZpbGUpOworICAgICAgICBlbHNlIGlmKGNvbmZpZy0+Y3JsZmlsZSkgLyogQ1VSTE9QVF9QUk9YWV9DUkxGSUxFIGRlZmF1bHQgaXMgY3JsZmlsZSAqLworICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWV9DUkxGSUxFLCBjb25maWctPmNybGZpbGUpOwogCiAgICAgICAgIGlmKGNvbmZpZy0+cGlubmVkcHVia2V5KQogICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QSU5ORURQVUJMSUNLRVksIGNvbmZpZy0+cGlubmVkcHVia2V5KTsKIAogICAgICAgICBpZihjdXJsaW5mby0+ZmVhdHVyZXMgJiBDVVJMX1ZFUlNJT05fU1NMKSB7CiAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTTENFUlQsIGNvbmZpZy0+Y2VydCk7CisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX1NTTENFUlQsIGNvbmZpZy0+cHJveHlfY2VydCk7CiAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTTENFUlRUWVBFLCBjb25maWctPmNlcnRfdHlwZSk7CisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX1NTTENFUlRUWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5wcm94eV9jZXJ0X3R5cGUpOwogICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9TU0xLRVksIGNvbmZpZy0+a2V5KTsKKyAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUFJPWFlfU1NMS0VZLCBjb25maWctPnByb3h5X2tleSk7CiAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1NTTEtFWVRZUEUsIGNvbmZpZy0+a2V5X3R5cGUpOworICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWV9TU0xLRVlUWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5wcm94eV9rZXlfdHlwZSk7CiAKICAgICAgICAgICBpZihjb25maWctPmluc2VjdXJlX29rKSB7CiAgICAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMEwpOwpAQCAtMTA0Nyw2ICsxMDY3LDEzIEBACiAgICAgICAgICAgICAvKiBsaWJjdXJsIGRlZmF1bHQgaXMgc3RyaWN0IHZlcmlmeWhvc3QgLT4gMkwgICAqLwogICAgICAgICAgICAgLyogbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDJMKTsgKi8KICAgICAgICAgICB9CisgICAgICAgICAgaWYoY29uZmlnLT5wcm94eV9pbnNlY3VyZV9vaykgeworICAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIDBMKTsKKyAgICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZX1NTTF9WRVJJRllIT1NULCAwTCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbXlfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIDFMKTsKKyAgICAgICAgICB9CiAKICAgICAgICAgICBpZihjb25maWctPnZlcmlmeXN0YXR1cykKICAgICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllTVEFUVVMsIDFMKTsKQEAgLTEwNTUsNiArMTA4Miw4IEBACiAgICAgICAgICAgICBteV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9TU0xfRkFMU0VTVEFSVCwgMUwpOwogCiAgICAgICAgICAgbXlfc2V0b3B0X2VudW0oY3VybCwgQ1VSTE9QVF9TU0xWRVJTSU9OLCBjb25maWctPnNzbF92ZXJzaW9uKTsKKyAgICAgICAgICBteV9zZXRvcHRfZW51bShjdXJsLCBDVVJMT1BUX1BST1hZX1NTTFZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5wcm94eV9zc2xfdmVyc2lvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYoY29uZmlnLT5wYXRoX2FzX2lzKQogICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1BBVEhfQVNfSVMsIDFMKTsKQEAgLTExNTYsNiArMTE4NSwxMCBAQAogICAgICAgICBpZihjb25maWctPmNpcGhlcl9saXN0KQogICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QsIGNvbmZpZy0+Y2lwaGVyX2xpc3QpOwogCisgICAgICAgIGlmKGNvbmZpZy0+cHJveHlfY2lwaGVyX2xpc3QpCisgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX1NTTF9DSVBIRVJfTElTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+cHJveHlfY2lwaGVyX2xpc3QpOworCiAgICAgICAgIC8qIG5ldyBpbiBsaWJjdXJsIDcuOS4yOiAqLwogICAgICAgICBpZihjb25maWctPmRpc2FibGVfZXBzdikKICAgICAgICAgICAvKiBkaXNhYmxlIGl0ICovCkBAIC0xMTc3LDcgKzEyMTAsNiBAQAogICAgICAgICAgIHJlc3VsdCA9IHJlc19zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfU1NMRU5HSU5FLCBjb25maWctPmVuZ2luZSk7CiAgICAgICAgICAgaWYocmVzdWx0KQogICAgICAgICAgICAgZ290byBzaG93X2Vycm9yOwotICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTEVOR0lORV9ERUZBVUxULCAxTCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBuZXcgaW4gY3VybCA3LjEwLjcsIGV4dGVuZGVkIGluIDcuMTkuNC4gTW9kaWZpZWQgdG8gdXNlCkBAIC0xMzI1LDYgKzEzNTcsMTUgQEAKICAgICAgICAgICBpZihjb25maWctPnRsc19hdXRodHlwZSkKICAgICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9UTFNBVVRIX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+dGxzX2F1dGh0eXBlKTsKKyAgICAgICAgICBpZihjb25maWctPnByb3h5X3Rsc191c2VybmFtZSkKKyAgICAgICAgICAgIG15X3NldG9wdF9zdHIoY3VybCwgQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPnByb3h5X3Rsc191c2VybmFtZSk7CisgICAgICAgICAgaWYoY29uZmlnLT5wcm94eV90bHNfcGFzc3dvcmQpCisgICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfUFJPWFlfVExTQVVUSF9QQVNTV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5wcm94eV90bHNfcGFzc3dvcmQpOworICAgICAgICAgIGlmKGNvbmZpZy0+cHJveHlfdGxzX2F1dGh0eXBlKQorICAgICAgICAgICAgbXlfc2V0b3B0X3N0cihjdXJsLCBDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5wcm94eV90bHNfYXV0aHR5cGUpOwogICAgICAgICB9CiAKICAgICAgICAgLyogbmV3IGluIDcuMjIuMCAqLwpAQCAtMTM0MCw2ICsxMzgxLDEwIEBACiAgICAgICAgICAgICBteV9zZXRvcHRfYml0bWFzayhjdXJsLCBDVVJMT1BUX1NTTF9PUFRJT05TLCBtYXNrKTsKICAgICAgICAgfQogCisgICAgICAgIGlmKGNvbmZpZy0+cHJveHlfc3NsX2FsbG93X2JlYXN0KQorICAgICAgICAgIG15X3NldG9wdChjdXJsLCBDVVJMT1BUX1BST1hZX1NTTF9PUFRJT05TLAorICAgICAgICAgICAgICAgICAgICAobG9uZylDVVJMU1NMT1BUX0FMTE9XX0JFQVNUKTsKKwogICAgICAgICBpZihjb25maWctPm1haWxfYXV0aCkKICAgICAgICAgICBteV9zZXRvcHRfc3RyKGN1cmwsIENVUkxPUFRfTUFJTF9BVVRILCBjb25maWctPm1haWxfYXV0aCk7CiAKQEAgLTE0NDEsNiArMTQ4Niw3IEBACiAgICAgICAgICAgICBlbnVtIHsKICAgICAgICAgICAgICAgUkVUUllfTk8sCiAgICAgICAgICAgICAgIFJFVFJZX1RJTUVPVVQsCisgICAgICAgICAgICAgIFJFVFJZX0NPTk5SRUZVU0VELAogICAgICAgICAgICAgICBSRVRSWV9IVFRQLAogICAgICAgICAgICAgICBSRVRSWV9GVFAsCiAgICAgICAgICAgICAgIFJFVFJZX0xBU1QgLyogbm90IHVzZWQgKi8KQEAgLTE0NTIsNiArMTQ5OCwxMyBAQAogICAgICAgICAgICAgICAgKENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVCA9PSByZXN1bHQpKQogICAgICAgICAgICAgICAvKiByZXRyeSB0aW1lb3V0IGFsd2F5cyAqLwogICAgICAgICAgICAgICByZXRyeSA9IFJFVFJZX1RJTUVPVVQ7CisgICAgICAgICAgICBlbHNlIGlmKGNvbmZpZy0+cmV0cnlfY29ubnJlZnVzZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgKENVUkxFX0NPVUxETlRfQ09OTkVDVCA9PSByZXN1bHQpKSB7CisgICAgICAgICAgICAgIGxvbmcgb3NlcnJubzsKKyAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fT1NfRVJSTk8sICZvc2Vycm5vKTsKKyAgICAgICAgICAgICAgaWYoRUNPTk5SRUZVU0VEID09IG9zZXJybm8pCisgICAgICAgICAgICAgICAgcmV0cnkgPSBSRVRSWV9DT05OUkVGVVNFRDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYoKENVUkxFX09LID09IHJlc3VsdCkgfHwKICAgICAgICAgICAgICAgICAgICAgKGNvbmZpZy0+ZmFpbG9uZXJyb3IgJiYKICAgICAgICAgICAgICAgICAgICAgIChDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SID09IHJlc3VsdCkpKSB7CkBAIC0xNDk5LDcgKzE1NTIsMTEgQEAKIAogICAgICAgICAgICAgaWYocmV0cnkpIHsKICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtW109ewotICAgICAgICAgICAgICAgIE5VTEwsICJ0aW1lb3V0IiwgIkhUVFAgZXJyb3IiLCAiRlRQIGVycm9yIgorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgInRpbWVvdXQiLAorICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIHJlZnVzZWQiLAorICAgICAgICAgICAgICAgICJIVFRQIGVycm9yIiwKKyAgICAgICAgICAgICAgICAiRlRQIGVycm9yIgogICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgIHdhcm5mKGNvbmZpZy0+Z2xvYmFsLCAiVHJhbnNpZW50IHByb2JsZW06ICVzICIKQEAgLTE1NTksNyArMTYxNiw3IEBACiAgICAgICAgICAgICAgIGNoYXIgKmVmZmVjdGl2ZV91cmwgPSBOVUxMOwogICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmZWZmZWN0aXZlX3VybCk7CiAgICAgICAgICAgICAgIGlmKGVmZmVjdGl2ZV91cmwgJiYKLSAgICAgICAgICAgICAgICAgY3VybHhfc3RybmVxdWFsKGVmZmVjdGl2ZV91cmwsICJodHRwIiwgNCkpIHsKKyAgICAgICAgICAgICAgICAgY3VybF9zdHJuZXF1YWwoZWZmZWN0aXZlX3VybCwgImh0dHAiLCA0KSkgewogICAgICAgICAgICAgICAgIC8qIFRoaXMgd2FzIEhUVFAoUykgKi8KICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcG9uc2UpOwogICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlICE9IDIwMCAmJiByZXNwb25zZSAhPSAyMDYpIHsKQEAgLTE3OTMsOSArMTg1MCw5IEBACiAgICAgdXJsbm9kZS0+ZmxhZ3MgPSAwOwogCiAgICAgLyoKLSAgICAqKiBCYWlsIG91dCB1cG9uIGNyaXRpY2FsIGVycm9ycworICAgICoqIEJhaWwgb3V0IHVwb24gY3JpdGljYWwgZXJyb3JzIG9yIC0tZmFpbC1lYXJseQogICAgICovCi0gICAgaWYoaXNfZmF0YWxfZXJyb3IocmVzdWx0KSkKKyAgICBpZihpc19mYXRhbF9lcnJvcihyZXN1bHQpIHx8IChyZXN1bHQgJiYgZ2xvYmFsLT5mYWlsX2Vhcmx5KSkKICAgICAgIGdvdG8gcXVpdF9jdXJsOwogCiAgIH0gLyogZm9yLWxvb3AgdGhyb3VnaCBhbGwgVVJMcyAqLwpAQCAtMTg0Miw4ICsxODk5LDggQEAKIAogICAvKiBQYXJzZSAuY3VybHJjIGlmIG5lY2Vzc2FyeSAqLwogICBpZigoYXJnYyA9PSAxKSB8fAotICAgICAoIWN1cmx4X3N0cmVxdWFsKGFyZ3ZbMV0sICItcSIpICYmCi0gICAgICAhY3VybHhfc3RyZXF1YWwoYXJndlsxXSwgIi0tZGlzYWJsZSIpKSkgeworICAgICAoIWN1cmxfc3RyZXF1YWwoYXJndlsxXSwgIi1xIikgJiYKKyAgICAgICFjdXJsX3N0cmVxdWFsKGFyZ3ZbMV0sICItLWRpc2FibGUiKSkpIHsKICAgICBwYXJzZWNvbmZpZyhOVUxMLCBjb25maWcpOyAvKiBpZ25vcmUgcG9zc2libGUgZmFpbHVyZSAqLwogCiAgICAgLyogSWYgd2UgaGFkIG5vIGFyZ3VtZW50cyB0aGVuIG1ha2Ugc3VyZSBhIHVybCB3YXMgc3BlY2lmaWVkIGluIC5jdXJscmMgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29sX29wZXJobHAuYyBiL3NyYy90b29sX29wZXJobHAuYwppbmRleCBiNDNkYzk1Li4yMWI1ZmZlIDEwMDY0NAotLS0gYS9zcmMvdG9vbF9vcGVyaGxwLmMKKysrIGIvc3JjL3Rvb2xfb3BlcmhscC5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTQsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE0LCAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0yMSw3ICsyMSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgInRvb2xfc2V0dXAuaCIKIAotI2luY2x1ZGUgInJhd3N0ci5oIgorI2luY2x1ZGUgInN0cmNhc2UuaCIKIAogI2RlZmluZSBFTkFCTEVfQ1VSTFhfUFJJTlRGCiAvKiB1c2Ugb3VyIG93biBwcmludGYoKSBmdW5jdGlvbnMgKi8KQEAgLTYzLDggKzYzLDggQEAKIAogYm9vbCBzdGRpbl91cGxvYWQoY29uc3QgY2hhciAqdXBsb2FkZmlsZSkKIHsKLSAgcmV0dXJuIChjdXJseF9zdHJlcXVhbCh1cGxvYWRmaWxlLCAiLSIpIHx8Ci0gICAgICAgICAgY3VybHhfc3RyZXF1YWwodXBsb2FkZmlsZSwgIi4iKSkgPyBUUlVFIDogRkFMU0U7CisgIHJldHVybiAoIXN0cmNtcCh1cGxvYWRmaWxlLCAiLSIpIHx8CisgICAgICAgICAgIXN0cmNtcCh1cGxvYWRmaWxlLCAiLiIpKSA/IFRSVUUgOiBGQUxTRTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90b29sX3BhcmFtaGxwLmMgYi9zcmMvdG9vbF9wYXJhbWhscC5jCmluZGV4IGYyZTY4ZGEuLjdkZTQ5MDUgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX3BhcmFtaGxwLmMKKysrIGIvc3JjL3Rvb2xfcGFyYW1obHAuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE1LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMjEsNyArMjEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJ0b29sX3NldHVwLmgiCiAKLSNpbmNsdWRlICJyYXdzdHIuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKICNkZWZpbmUgRU5BQkxFX0NVUkxYX1BSSU5URgogLyogdXNlIG91ciBvd24gcHJpbnRmKCkgZnVuY3Rpb25zICovCkBAIC0yODQsNiArMjg0LDggQEAKICAgaWYoIWJ1ZmZlcikKICAgICByZXR1cm4gMTsKIAorICAvKiBBbGxvdyBzdHJ0b2soKSBoZXJlIHNpbmNlIHRoaXMgaXNuJ3QgdXNlZCB0aHJlYWRlZCAqLworICAvKiAhY2hlY2tzcmMhIGRpc2FibGUgQkFOTkVERlVOQyAyICovCiAgIGZvcih0b2tlbiA9IHN0cnRvayhidWZmZXIsIHNlcCk7CiAgICAgICB0b2tlbjsKICAgICAgIHRva2VuID0gc3RydG9rKE5VTEwsIHNlcCkpIHsKQEAgLTMxMCw3ICszMTIsNyBAQAogICAgIH0KIAogICAgIGZvcihwcD1wcm90b3M7IHBwLT5uYW1lOyBwcCsrKSB7Ci0gICAgICBpZihjdXJseF9yYXdfZXF1YWwodG9rZW4sIHBwLT5uYW1lKSkgeworICAgICAgaWYoY3VybF9zdHJlcXVhbCh0b2tlbiwgcHAtPm5hbWUpKSB7CiAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAgICAgIGNhc2UgZGVueToKICAgICAgICAgICAqdmFsICY9IH4ocHAtPmJpdCk7CkBAIC0zNTMsNyArMzU1LDcgQEAKICAgaWYoIXN0cikKICAgICByZXR1cm4gUEFSQU1fUkVRVUlSRVNfUEFSQU1FVEVSOwogICBmb3IocHAgPSBjdXJsaW5mby0+cHJvdG9jb2xzOyAqcHA7IHBwKyspIHsKLSAgICBpZihjdXJseF9yYXdfZXF1YWwoKnBwLCBzdHIpKQorICAgIGlmKGN1cmxfc3RyZXF1YWwoKnBwLCBzdHIpKQogICAgICAgcmV0dXJuIFBBUkFNX09LOwogICB9CiAgIHJldHVybiBQQVJBTV9MSUJDVVJMX1VOU1VQUE9SVEVEX1BST1RPQ09MOwpAQCAtNDY0LDExICs0NjYsMTEgQEAKIAogaW50IGZ0cGZpbGVtZXRob2Qoc3RydWN0IE9wZXJhdGlvbkNvbmZpZyAqY29uZmlnLCBjb25zdCBjaGFyICpzdHIpCiB7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgic2luZ2xlY3dkIiwgc3RyKSkKKyAgaWYoY3VybF9zdHJlcXVhbCgic2luZ2xlY3dkIiwgc3RyKSkKICAgICByZXR1cm4gQ1VSTEZUUE1FVEhPRF9TSU5HTEVDV0Q7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgibm9jd2QiLCBzdHIpKQorICBpZihjdXJsX3N0cmVxdWFsKCJub2N3ZCIsIHN0cikpCiAgICAgcmV0dXJuIENVUkxGVFBNRVRIT0RfTk9DV0Q7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgibXVsdGljd2QiLCBzdHIpKQorICBpZihjdXJsX3N0cmVxdWFsKCJtdWx0aWN3ZCIsIHN0cikpCiAgICAgcmV0dXJuIENVUkxGVFBNRVRIT0RfTVVMVElDV0Q7CiAKICAgd2FybmYoY29uZmlnLT5nbG9iYWwsICJ1bnJlY29nbml6ZWQgZnRwIGZpbGUgbWV0aG9kICclcycsIHVzaW5nIGRlZmF1bHRcbiIsCkBAIC00NzksOSArNDgxLDkgQEAKIAogaW50IGZ0cGNjY21ldGhvZChzdHJ1Y3QgT3BlcmF0aW9uQ29uZmlnICpjb25maWcsIGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgaWYoY3VybHhfcmF3X2VxdWFsKCJwYXNzaXZlIiwgc3RyKSkKKyAgaWYoY3VybF9zdHJlcXVhbCgicGFzc2l2ZSIsIHN0cikpCiAgICAgcmV0dXJuIENVUkxGVFBTU0xfQ0NDX1BBU1NJVkU7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgiYWN0aXZlIiwgc3RyKSkKKyAgaWYoY3VybF9zdHJlcXVhbCgiYWN0aXZlIiwgc3RyKSkKICAgICByZXR1cm4gQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFOwogCiAgIHdhcm5mKGNvbmZpZy0+Z2xvYmFsLCAidW5yZWNvZ25pemVkIGZ0cCBDQ0MgbWV0aG9kICclcycsIHVzaW5nIGRlZmF1bHRcbiIsCkBAIC00OTIsMTEgKzQ5NCwxMSBAQAogCiBsb25nIGRlbGVnYXRpb24oc3RydWN0IE9wZXJhdGlvbkNvbmZpZyAqY29uZmlnLCBjaGFyICpzdHIpCiB7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgibm9uZSIsIHN0cikpCisgIGlmKGN1cmxfc3RyZXF1YWwoIm5vbmUiLCBzdHIpKQogICAgIHJldHVybiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fTk9ORTsKLSAgaWYoY3VybHhfcmF3X2VxdWFsKCJwb2xpY3kiLCBzdHIpKQorICBpZihjdXJsX3N0cmVxdWFsKCJwb2xpY3kiLCBzdHIpKQogICAgIHJldHVybiBDVVJMR1NTQVBJX0RFTEVHQVRJT05fUE9MSUNZX0ZMQUc7Ci0gIGlmKGN1cmx4X3Jhd19lcXVhbCgiYWx3YXlzIiwgc3RyKSkKKyAgaWYoY3VybF9zdHJlcXVhbCgiYWx3YXlzIiwgc3RyKSkKICAgICByZXR1cm4gQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUc7CiAKICAgd2FybmYoY29uZmlnLT5nbG9iYWwsICJ1bnJlY29nbml6ZWQgZGVsZWdhdGlvbiBtZXRob2QgJyVzJywgdXNpbmcgbm9uZVxuIiwKZGlmZiAtLWdpdCBhL3NyYy90b29sX3NldG9wdC5jIGIvc3JjL3Rvb2xfc2V0b3B0LmMKaW5kZXggNjkwY2UxNC4uYWQzZDMwNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xfc2V0b3B0LmMKKysrIGIvc3JjL3Rvb2xfc2V0b3B0LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTQ1LDYgKzQ1LDE1IEBACiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxQUk9YWVtdID0gewogICBOVihDVVJMUFJPWFlfSFRUUCksCiAgIE5WKENVUkxQUk9YWV9IVFRQXzFfMCksCisgIE5WKENVUkxQUk9YWV9IVFRQUyksCisgIE5WKENVUkxQUk9YWV9TT0NLUzQpLAorICBOVihDVVJMUFJPWFlfU09DS1M1KSwKKyAgTlYoQ1VSTFBST1hZX1NPQ0tTNEEpLAorICBOVihDVVJMUFJPWFlfU09DS1M1X0hPU1ROQU1FKSwKKyAgTlZFTkQsCit9OworCitjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfU09DS1NfUFJPWFlbXSA9IHsKICAgTlYoQ1VSTFBST1hZX1NPQ0tTNCksCiAgIE5WKENVUkxQUk9YWV9TT0NLUzUpLAogICBOVihDVVJMUFJPWFlfU09DS1M0QSksCkBAIC04Myw2ICs5Miw3IEBACiAgIE5WKENVUkxfU1NMVkVSU0lPTl9UTFN2MV8wKSwKICAgTlYoQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEpLAogICBOVihDVVJMX1NTTFZFUlNJT05fVExTdjFfMiksCisgIE5WKENVUkxfU1NMVkVSU0lPTl9UTFN2MV8zKSwKICAgTlZFTkQsCiB9OwogCkBAIC0xNTcsNiArMTY3LDkgQEAKICAgTlYxKENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDEpLAogICBOVjEoQ1VSTE9QVF9TU0xfRU5BQkxFX05QTiwgMSksCiAgIE5WMShDVVJMT1BUX1NTTF9FTkFCTEVfQUxQTiwgMSksCisgIE5WMShDVVJMT1BUX1RDUF9OT0RFTEFZLCAxKSwKKyAgTlYxKENVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVIsIDEpLAorICBOVjEoQ1VSTE9QVF9QUk9YWV9TU0xfVkVSSUZZSE9TVCwgMSksCiAgIE5WRU5ECiB9OwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbF9zZXRvcHQuaCBiL3NyYy90b29sX3NldG9wdC5oCmluZGV4IDdjZDM4NzUuLmZlY2YyNGYgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX3NldG9wdC5oCisrKyBiL3NyYy90b29sX3NldG9wdC5oCkBAIC00Nyw2ICs0Nyw3IEBACiB9IE5hbWVWYWx1ZVVuc2lnbmVkOwogCiBleHRlcm4gY29uc3QgTmFtZVZhbHVlIHNldG9wdF9udl9DVVJMUFJPWFlbXTsKK2V4dGVybiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfU09DS1NfUFJPWFlbXTsKIGV4dGVybiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfSFRUUF9WRVJTSU9OW107CiBleHRlcm4gY29uc3QgTmFtZVZhbHVlIHNldG9wdF9udl9DVVJMX1NTTFZFUlNJT05bXTsKIGV4dGVybiBjb25zdCBOYW1lVmFsdWUgc2V0b3B0X252X0NVUkxfVElNRUNPTkRbXTsKQEAgLTYxLDYgKzYyLDcgQEAKICNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfSFRUUF9WRVJTSU9OIHNldG9wdF9udl9DVVJMX0hUVFBfVkVSU0lPTgogI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9IVFRQQVVUSCBzZXRvcHRfbnZfQ1VSTEFVVEgKICNkZWZpbmUgc2V0b3B0X252X0NVUkxPUFRfU1NMVkVSU0lPTiBzZXRvcHRfbnZfQ1VSTF9TU0xWRVJTSU9OCisjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX1BST1hZX1NTTFZFUlNJT04gc2V0b3B0X252X0NVUkxfU1NMVkVSU0lPTgogI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9USU1FQ09ORElUSU9OIHNldG9wdF9udl9DVVJMX1RJTUVDT05ECiAjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX0ZUUF9TU0xfQ0NDIHNldG9wdF9udl9DVVJMRlRQU1NMX0NDQwogI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9VU0VfU1NMIHNldG9wdF9udl9DVVJMVVNFU1NMCkBAIC02OSw2ICs3MSw3IEBACiAjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX1BST1RPQ09MUyBzZXRvcHRfbnZfQ1VSTFBST1RPCiAjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX1JFRElSX1BST1RPQ09MUyBzZXRvcHRfbnZfQ1VSTFBST1RPCiAjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX1BST1hZVFlQRSBzZXRvcHRfbnZfQ1VSTFBST1hZCisjZGVmaW5lIHNldG9wdF9udl9DVVJMT1BUX1NPQ0tTX1BST1hZVFlQRSBzZXRvcHRfbnZfQ1VSTF9TT0NLU19QUk9YWQogI2RlZmluZSBzZXRvcHRfbnZfQ1VSTE9QVF9QUk9YWUFVVEggc2V0b3B0X252X0NVUkxBVVRICiAKIC8qIEludGVyY2VwdCBzZXRvcHQgY2FsbHMgZm9yIC0tbGliY3VybCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xfdXJsZ2xvYi5jIGIvc3JjL3Rvb2xfdXJsZ2xvYi5jCmluZGV4IGEzNTdiOGIuLmU2OGUzMGUgMTAwNjQ0Ci0tLSBhL3NyYy90b29sX3VybGdsb2IuYworKysgYi9zcmMvdG9vbF91cmxnbG9iLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgcGF0LT5jb250ZW50LlNldC5wdHJfcyA9IDA7CiAgIHBhdC0+Z2xvYmluZGV4ID0gLTE7CiAKLSAgcGF0LT5jb250ZW50LlNldC5lbGVtZW50cyA9IG1hbGxvYyhzaXplb2YoY2hhciopKTsKKyAgcGF0LT5jb250ZW50LlNldC5lbGVtZW50cyA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSk7CiAKICAgaWYoIXBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMpCiAgICAgcmV0dXJuIEdMT0JFUlJPUigib3V0IG9mIG1lbW9yeSIsIDAsIENVUkxFX09VVF9PRl9NRU1PUlkpOwpAQCAtMTE4LDE0ICsxMTgsMTQgQEAKICAgICAgICpidWYgPSAnXDAnOwogICAgICAgaWYocGF0LT5jb250ZW50LlNldC5lbGVtZW50cykgewogICAgICAgICBjaGFyICoqbmV3X2FyciA9IHJlYWxsb2MocGF0LT5jb250ZW50LlNldC5lbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXQtPmNvbnRlbnQuU2V0LnNpemUgKyAxKSAqIHNpemVvZihjaGFyKikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdC0+Y29udGVudC5TZXQuc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIgKikpOwogICAgICAgICBpZighbmV3X2FycikKICAgICAgICAgICByZXR1cm4gR0xPQkVSUk9SKCJvdXQgb2YgbWVtb3J5IiwgMCwgQ1VSTEVfT1VUX09GX01FTU9SWSk7CiAKICAgICAgICAgcGF0LT5jb250ZW50LlNldC5lbGVtZW50cyA9IG5ld19hcnI7CiAgICAgICB9CiAgICAgICBlbHNlCi0gICAgICAgIHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIqKSk7CisgICAgICAgIHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMgPSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikpOwogCiAgICAgICBpZighcGF0LT5jb250ZW50LlNldC5lbGVtZW50cykKICAgICAgICAgcmV0dXJuIEdMT0JFUlJPUigib3V0IG9mIG1lbW9yeSIsIDAsIENVUkxFX09VVF9PRl9NRU1PUlkpOwpAQCAtMTg4LDMyICsxODgsMzkgQEAKICAgICAvKiBjaGFyYWN0ZXIgcmFuZ2UgZGV0ZWN0ZWQgKi8KICAgICBjaGFyIG1pbl9jOwogICAgIGNoYXIgbWF4X2M7CisgICAgY2hhciBlbmRfYzsKICAgICBpbnQgc3RlcD0xOwogCiAgICAgcGF0LT50eXBlID0gVVBUQ2hhclJhbmdlOwogCi0gICAgcmMgPSBzc2NhbmYocGF0dGVybiwgIiVjLSVjIiwgJm1pbl9jLCAmbWF4X2MpOworICAgIHJjID0gc3NjYW5mKHBhdHRlcm4sICIlYy0lYyVjIiwgJm1pbl9jLCAmbWF4X2MsICZlbmRfYyk7CiAKLSAgICBpZigocmMgPT0gMikgJiYgKHBhdHRlcm5bM10gPT0gJzonKSkgewotICAgICAgY2hhciAqZW5kcDsKLSAgICAgIHVuc2lnbmVkIGxvbmcgbHN0ZXA7Ci0gICAgICBlcnJubyA9IDA7Ci0gICAgICBsc3RlcCA9IHN0cnRvdWwoJnBhdHRlcm5bNF0sICZlbmRwLCAxMCk7Ci0gICAgICBpZihlcnJubyB8fCAoKmVuZHAgIT0gJ10nKSkKLSAgICAgICAgc3RlcCA9IC0xOwotICAgICAgZWxzZSB7Ci0gICAgICAgIHBhdHRlcm4gPSBlbmRwKzE7Ci0gICAgICAgIHN0ZXAgPSAoaW50KWxzdGVwOwotICAgICAgICBpZihzdGVwID4gKG1heF9jIC0gbWluX2MpKQorICAgIGlmKHJjID09IDMpIHsKKyAgICAgIGlmKGVuZF9jID09ICc6JykgeworICAgICAgICBjaGFyICplbmRwOworICAgICAgICB1bnNpZ25lZCBsb25nIGxzdGVwOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGxzdGVwID0gc3RydG91bCgmcGF0dGVybls0XSwgJmVuZHAsIDEwKTsKKyAgICAgICAgaWYoZXJybm8gfHwgJnBhdHRlcm5bNF0gPT0gZW5kcCB8fCAqZW5kcCAhPSAnXScpCiAgICAgICAgICAgc3RlcCA9IC0xOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBwYXR0ZXJuID0gZW5kcCsxOworICAgICAgICAgIHN0ZXAgPSAoaW50KWxzdGVwOworICAgICAgICAgIGlmKHN0ZXAgPiAobWF4X2MgLSBtaW5fYykpCisgICAgICAgICAgICBzdGVwID0gLTE7CisgICAgICAgIH0KICAgICAgIH0KKyAgICAgIGVsc2UgaWYoZW5kX2MgIT0gJ10nKQorICAgICAgICAvKiB0aGVuIHRoaXMgaXMgd3JvbmcgKi8KKyAgICAgICAgcmMgPSAwOworICAgICAgZWxzZQorICAgICAgICAvKiBlbmRfYyA9PSAnXScgKi8KKyAgICAgICAgcGF0dGVybiArPSA0OwogICAgIH0KLSAgICBlbHNlCi0gICAgICBwYXR0ZXJuICs9IDQ7CiAKICAgICAqcG9zcCArPSAocGF0dGVybiAtICpwYXR0ZXJucCk7CiAKLSAgICBpZigocmMgIT0gMikgfHwgKG1pbl9jID49IG1heF9jKSB8fCAoKG1heF9jIC0gbWluX2MpID4gKCd6JyAtICdhJykpIHx8CisgICAgaWYoKHJjICE9IDMpIHx8IChtaW5fYyA+PSBtYXhfYykgfHwgKChtYXhfYyAtIG1pbl9jKSA+ICgneicgLSAnYScpKSB8fAogICAgICAgIChzdGVwIDw9IDApICkKICAgICAgIC8qIHRoZSBwYXR0ZXJuIGlzIG5vdCB3ZWxsLWZvcm1lZCAqLwogICAgICAgcmV0dXJuIEdMT0JFUlJPUigiYmFkIHJhbmdlIiwgKnBvc3AsIENVUkxFX1VSTF9NQUxGT1JNQVQpOwpAQCAtMjU3LDYgKzI2NCwxMiBAQAogICAgICAgICBlbmRwID0gTlVMTDsKICAgICAgIGVsc2UgewogICAgICAgICBwYXR0ZXJuID0gZW5kcCsxOworICAgICAgICB3aGlsZSgqcGF0dGVybiAmJiBJU0JMQU5LKCpwYXR0ZXJuKSkKKyAgICAgICAgICBwYXR0ZXJuKys7CisgICAgICAgIGlmKCFJU0RJR0lUKCpwYXR0ZXJuKSkgeworICAgICAgICAgIGVuZHAgPSBOVUxMOworICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIG1heF9uID0gc3RydG91bChwYXR0ZXJuLCAmZW5kcCwgMTApOwogICAgICAgICBpZihlcnJubyB8fCAoKmVuZHAgPT0gJzonKSkgewpAQCAtMjc3LDYgKzI5MCw3IEBACiAgICAgICB9CiAgICAgfQogCisgICAgZmFpbDoKICAgICAqcG9zcCArPSAocGF0dGVybiAtICpwYXR0ZXJucCk7CiAKICAgICBpZighZW5kcCB8fCAobWluX24gPiBtYXhfbikgfHwgKHN0ZXBfbiA+IChtYXhfbiAtIG1pbl9uKSkgfHwgIXN0ZXBfbikKQEAgLTQwNyw3ICs0MjEsNyBAQAogICByZXR1cm4gcmVzOwogfQogCi1DVVJMY29kZSBnbG9iX3VybChVUkxHbG9iKiogZ2xvYiwgY2hhciogdXJsLCB1bnNpZ25lZCBsb25nICp1cmxudW0sCitDVVJMY29kZSBnbG9iX3VybChVUkxHbG9iICoqZ2xvYiwgY2hhciAqdXJsLCB1bnNpZ25lZCBsb25nICp1cmxudW0sCiAgICAgICAgICAgICAgICAgICBGSUxFICplcnJvcikKIHsKICAgLyoKQEAgLTQyNCw2ICs0MzgsNyBAQAogICBnbG9iX2J1ZmZlciA9IG1hbGxvYyhzdHJsZW4odXJsKSArIDEpOwogICBpZighZ2xvYl9idWZmZXIpCiAgICAgcmV0dXJuIENVUkxFX09VVF9PRl9NRU1PUlk7CisgIGdsb2JfYnVmZmVyWzBdPTA7CiAKICAgZ2xvYl9leHBhbmQgPSBjYWxsb2MoMSwgc2l6ZW9mKFVSTEdsb2IpKTsKICAgaWYoIWdsb2JfZXhwYW5kKSB7CkBAIC01NDEsMjAgKzU1NiwyNSBAQAogICAgIHN3aXRjaChwYXQtPnR5cGUpIHsKICAgICBjYXNlIFVQVFNldDoKICAgICAgIGlmKHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHMpIHsKLSAgICAgICAgbGVuID0gc3RybGVuKHBhdC0+Y29udGVudC5TZXQuZWxlbWVudHNbcGF0LT5jb250ZW50LlNldC5wdHJfc10pOwogICAgICAgICBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzIiwKICAgICAgICAgICAgICAgICAgcGF0LT5jb250ZW50LlNldC5lbGVtZW50c1twYXQtPmNvbnRlbnQuU2V0LnB0cl9zXSk7CisgICAgICAgIGxlbiA9IHN0cmxlbihidWYpOwogICAgICAgICBidWYgKz0gbGVuOwogICAgICAgICBidWZsZW4gLT0gbGVuOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgY2FzZSBVUFRDaGFyUmFuZ2U6Ci0gICAgICAqYnVmKysgPSBwYXQtPmNvbnRlbnQuQ2hhclJhbmdlLnB0cl9jOworICAgICAgaWYoYnVmbGVuKSB7CisgICAgICAgICpidWYrKyA9IHBhdC0+Y29udGVudC5DaGFyUmFuZ2UucHRyX2M7CisgICAgICAgICpidWYgPSAnXDAnOworICAgICAgICBidWZsZW4tLTsKKyAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgVVBUTnVtUmFuZ2U6Ci0gICAgICBsZW4gPSBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiUwKmxkIiwKLSAgICAgICAgICAgICAgICAgICAgIHBhdC0+Y29udGVudC5OdW1SYW5nZS5wYWRsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuTnVtUmFuZ2UucHRyX24pOworICAgICAgc25wcmludGYoYnVmLCBidWZsZW4sICIlMCpsZCIsCisgICAgICAgICAgICAgICBwYXQtPmNvbnRlbnQuTnVtUmFuZ2UucGFkbGVuZ3RoLAorICAgICAgICAgICAgICAgcGF0LT5jb250ZW50Lk51bVJhbmdlLnB0cl9uKTsKKyAgICAgIGxlbiA9IHN0cmxlbihidWYpOwogICAgICAgYnVmICs9IGxlbjsKICAgICAgIGJ1ZmxlbiAtPSBsZW47CiAgICAgICBicmVhazsKQEAgLTU2Myw3ICs1ODMsNiBAQAogICAgICAgcmV0dXJuIENVUkxFX0ZBSUxFRF9JTklUOwogICAgIH0KICAgfQotICAqYnVmID0gJ1wwJzsKIAogICAqZ2xvYmJlZCA9IHN0cmR1cChnbG9iLT5nbG9iX2J1ZmZlcik7CiAgIGlmKCEqZ2xvYmJlZCkKZGlmZiAtLWdpdCBhL3NyYy90b29sX3VybGdsb2IuaCBiL3NyYy90b29sX3VybGdsb2IuaAppbmRleCBjM2JlOTQ4Li44MmQ5ZDQ2IDEwMDY0NAotLS0gYS9zcmMvdG9vbF91cmxnbG9iLmgKKysrIGIvc3JjL3Rvb2xfdXJsZ2xvYi5oCkBAIC03LDcgKzcsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC02OCw5ICs2OCw5IEBACiAgIHNpemVfdCBwb3M7ICAgICAgICAvKiBjb2x1bW4gcG9zaXRpb24gb2YgZXJyb3Igb3IgMCAqLwogfSBVUkxHbG9iOwogCi1DVVJMY29kZSBnbG9iX3VybChVUkxHbG9iKiosIGNoYXIqLCB1bnNpZ25lZCBsb25nICosIEZJTEUgKik7CitDVVJMY29kZSBnbG9iX3VybChVUkxHbG9iKiosIGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqLCBGSUxFICopOwogQ1VSTGNvZGUgZ2xvYl9uZXh0X3VybChjaGFyICoqLCBVUkxHbG9iICopOwotQ1VSTGNvZGUgZ2xvYl9tYXRjaF91cmwoY2hhciAqKiwgY2hhciosIFVSTEdsb2IgKik7CitDVVJMY29kZSBnbG9iX21hdGNoX3VybChjaGFyICoqLCBjaGFyICosIFVSTEdsb2IgKik7CiB2b2lkIGdsb2JfY2xlYW51cChVUkxHbG9iKiBnbG9iKTsKIAogI2VuZGlmIC8qIEhFQURFUl9DVVJMX1RPT0xfVVJMR0xPQl9IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbF93cml0ZWVudi5jIGIvc3JjL3Rvb2xfd3JpdGVlbnYuYwppbmRleCBjMWJmY2JlLi4xOTg4NDdlIDEwMDY0NAotLS0gYS9zcmMvdG9vbF93cml0ZWVudi5jCisrKyBiL3NyYy90b29sX3dyaXRlZW52LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdAogewotICBjb25zdCBjaGFyICogbmFtZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKICAgQ1VSTElORk8gaWQ7CiAgIGVudW0gewogICAgIHdyaXRlZW52X05PTkUsCkBAIC01OSw3ICs1OSw3IEBACiAgIHtOVUxMLCAwLCB3cml0ZWVudl9OT05FfQogIH07CiAKLXN0YXRpYyB2b2lkIGludGVybmFsU2V0RW52KGNvbnN0IGNoYXIgKiBuYW1lLCBjaGFyICogdmFsdWUpCitzdGF0aWMgdm9pZCBpbnRlcm5hbFNldEVudihjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKIHsKICAgLyogQWRkIHlvdXIgT1Mtc3BlY2lmaWMgY29kZSBoZXJlLiAqLwogI2lmZGVmIF9fcmlzY29zX18KZGlmZiAtLWdpdCBhL3NyYy90b29sX3dyaXRlb3V0LmMgYi9zcmMvdG9vbF93cml0ZW91dC5jCmluZGV4IDZlOTRhZmUuLjM3MzdkZjggMTAwNjQ0Ci0tLSBhL3NyYy90b29sX3dyaXRlb3V0LmMKKysrIGIvc3JjL3Rvb2xfd3JpdGVvdXQuYwpAQCAtNTIsMTIgKzUyLDE0IEBACiAgIFZBUl9GVFBfRU5UUllfUEFUSCwKICAgVkFSX1JFRElSRUNUX1VSTCwKICAgVkFSX1NTTF9WRVJJRllfUkVTVUxULAorICBWQVJfUFJPWFlfU1NMX1ZFUklGWV9SRVNVTFQsCiAgIFZBUl9FRkZFQ1RJVkVfRklMRU5BTUUsCiAgIFZBUl9QUklNQVJZX0lQLAogICBWQVJfUFJJTUFSWV9QT1JULAogICBWQVJfTE9DQUxfSVAsCiAgIFZBUl9MT0NBTF9QT1JULAogICBWQVJfSFRUUF9WRVJTSU9OLAorICBWQVJfU0NIRU1FLAogICBWQVJfTlVNX09GX1ZBUlMgLyogbXVzdCBiZSB0aGUgbGFzdCAqLwogfSByZXBsYWNlaWQ7CiAKQEAgLTkxLDEyICs5MywxNCBAQAogICB7ImZ0cF9lbnRyeV9wYXRoIiwgVkFSX0ZUUF9FTlRSWV9QQVRIfSwKICAgeyJyZWRpcmVjdF91cmwiLCBWQVJfUkVESVJFQ1RfVVJMfSwKICAgeyJzc2xfdmVyaWZ5X3Jlc3VsdCIsIFZBUl9TU0xfVkVSSUZZX1JFU1VMVH0sCisgIHsicHJveHlfc3NsX3ZlcmlmeV9yZXN1bHQiLCBWQVJfUFJPWFlfU1NMX1ZFUklGWV9SRVNVTFR9LAogICB7ImZpbGVuYW1lX2VmZmVjdGl2ZSIsIFZBUl9FRkZFQ1RJVkVfRklMRU5BTUV9LAogICB7InJlbW90ZV9pcCIsIFZBUl9QUklNQVJZX0lQfSwKICAgeyJyZW1vdGVfcG9ydCIsIFZBUl9QUklNQVJZX1BPUlR9LAogICB7ImxvY2FsX2lwIiwgVkFSX0xPQ0FMX0lQfSwKICAgeyJsb2NhbF9wb3J0IiwgVkFSX0xPQ0FMX1BPUlR9LAogICB7Imh0dHBfdmVyc2lvbiIsIFZBUl9IVFRQX1ZFUlNJT059LAorICB7InNjaGVtZSIsIFZBUl9TQ0hFTUV9LAogICB7TlVMTCwgVkFSX05PTkV9CiB9OwogCkBAIC0xNzAsNDEgKzE3NCw0MSBAQAogICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CiAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUkVESVJFQ1RfVElNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG91YmxlaW5mbykpCi0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuM2YiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS42ZiIsIGRvdWJsZWluZm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIFZBUl9UT1RBTF9USU1FOgogICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CiAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fVE9UQUxfVElNRSwgJmRvdWJsZWluZm8pKQotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjNmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuNmYiLCBkb3VibGVpbmZvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBWQVJfTkFNRUxPT0tVUF9USU1FOgogICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CiAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjZmIiwgZG91YmxlaW5mbyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgVkFSX0NPTk5FQ1RfVElNRToKICAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQogICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX0NPTk5FQ1RfVElNRSwgJmRvdWJsZWluZm8pKQotICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjNmIiwgZG91YmxlaW5mbyk7CisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuNmYiLCBkb3VibGVpbmZvKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBWQVJfQVBQQ09OTkVDVF9USU1FOgogICAgICAgICAgICAgICAgIGlmKENVUkxFX09LID09CiAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjZmIiwgZG91YmxlaW5mbyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgVkFSX1BSRVRSQU5TRkVSX1RJTUU6CiAgICAgICAgICAgICAgICAgaWYoQ1VSTEVfT0sgPT0KICAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3VibGVpbmZvKSkKLSAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS4zZiIsIGRvdWJsZWluZm8pOworICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlLjZmIiwgZG91YmxlaW5mbyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgVkFSX1NUQVJUVFJBTlNGRVJfVElNRToKICAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQogICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NUQVJUVFJBTlNGRVJfVElNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG91YmxlaW5mbykpCi0gICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiUuM2YiLCBkb3VibGVpbmZvKTsKKyAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJS42ZiIsIGRvdWJsZWluZm8pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIFZBUl9TSVpFX1VQTE9BRDoKICAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQpAQCAtMjUyLDYgKzI1NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb25naW5mbykpCiAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVsZCIsIGxvbmdpbmZvKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBWQVJfUFJPWFlfU1NMX1ZFUklGWV9SRVNVTFQ6CisgICAgICAgICAgICAgICAgaWYoQ1VSTEVfT0sgPT0KKyAgICAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19QUk9YWV9TU0xfVkVSSUZZUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb25naW5mbykpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVsZCIsIGxvbmdpbmZvKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBWQVJfRUZGRUNUSVZFX0ZJTEVOQU1FOgogICAgICAgICAgICAgICAgIGlmKG91dHMtPmZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyIsIG91dHMtPmZpbGVuYW1lKTsKQEAgLTMwMCw2ICszMTAsMTIgQEAKICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RyZWFtLCB2ZXJzaW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVkFSX1NDSEVNRToKKyAgICAgICAgICAgICAgICBpZihDVVJMRV9PSyA9PQorICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1NDSEVNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5ncCkpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVzIiwgc3RyaW5ncCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JFQURNRSBiL3Rlc3RzL1JFQURNRQppbmRleCBhZThmZjI1Li44ZjUyNjg4IDEwMDY0NAotLS0gYS90ZXN0cy9SRUFETUUKKysrIGIvdGVzdHMvUkVBRE1FCkBAIC00LDcgKzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAKLVRoZSBjVVJMIFRlc3QgU3VpdGUKK1RoZSBjdXJsIFRlc3QgU3VpdGUKIAogIDEuIFJ1bm5pbmcKICAgMS4xIFJlcXVpcmVzIHRvIHJ1bgpAQCAtNDMsNiArNDMsNyBAQAogICBkaWZmICh3aGVuIGEgdGVzdCBmYWlscywgYSBkaWZmIGlzIHNob3duKQogICBzdHVubmVsIChmb3IgSFRUUFMgYW5kIEZUUFMgdGVzdHMpCiAgIE9wZW5TU0ggb3IgU3VuU1NIIChmb3IgU0NQLCBTRlRQIGFuZCBTT0NLUzQvNSB0ZXN0cykKKyAgbmdodHRweCAoZm9yIEhUVFAvMiB0ZXN0cykKIAogIDEuMiBQb3J0IG51bWJlcnMgdXNlZCBieSB0ZXN0IHNlcnZlcnMKIApAQCAtMTYzLDcgKzE2NCw3IEBACiAKICAxLjggTG9ncwogCi0gIEFsbCBsb2dzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGxvZ3MvIHN1YmRpcmVjdG9yeSAoaXQgaXMgZW1wdGllZCBmaXJzdCBpbiB0aGUKKyAgQWxsIGxvZ3MgYXJlIGdlbmVyYXRlZCBpbiB0aGUgbG9nLyBzdWJkaXJlY3RvcnkgKGl0IGlzIGVtcHRpZWQgZmlyc3QgaW4gdGhlCiAgIHJ1bnRlc3RzLnBsIHNjcmlwdCkuIFVzZSBydW50ZXN0cy5wbCAtayB0byBmb3JjZSBpdCB0byBrZWVwIHRoZSB0ZW1wb3JhcnkKICAgZmlsZXMgYWZ0ZXIgdGhlIHRlc3QgcnVuIHNpbmNlIHN1Y2Nlc3NmdWwgcnVucyB3aWxsIGNsZWFuIGl0IHVwIG90aGVyd2lzZS4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9NYWtlZmlsZS5pbmMgYi90ZXN0cy9kYXRhL01ha2VmaWxlLmluYwppbmRleCA5YzUwNjczLi5iOGIxOGU1IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL01ha2VmaWxlLmluYworKysgYi90ZXN0cy9kYXRhL01ha2VmaWxlLmluYwpAQCAtNDQsNyArNDQsNyBAQAogdGVzdDE5MCB0ZXN0MTkxIHRlc3QxOTIgdGVzdDE5MyB0ZXN0MTk0IHRlc3QxOTUgdGVzdDE5NiB0ZXN0MTk3IHRlc3QxOTggXAogdGVzdDE5OSB0ZXN0MjAwIHRlc3QyMDEgdGVzdDIwMiB0ZXN0MjAzIHRlc3QyMDQgdGVzdDIwNSB0ZXN0MjA2IHRlc3QyMDcgXAogdGVzdDIwOCB0ZXN0MjA5IHRlc3QyMTAgdGVzdDIxMSB0ZXN0MjEyIHRlc3QyMTMgdGVzdDIxNCB0ZXN0MjE1IHRlc3QyMTYgXAotdGVzdDIxNyB0ZXN0MjE4ICAgICAgICAgdGVzdDIyMCB0ZXN0MjIxIHRlc3QyMjIgdGVzdDIyMyB0ZXN0MjI0IHRlc3QyMjUgXAordGVzdDIxNyB0ZXN0MjE4IHRlc3QyMTkgdGVzdDIyMCB0ZXN0MjIxIHRlc3QyMjIgdGVzdDIyMyB0ZXN0MjI0IHRlc3QyMjUgXAogdGVzdDIyNiB0ZXN0MjI3IHRlc3QyMjggdGVzdDIyOSAgICAgICAgIHRlc3QyMzEgICAgICAgICB0ZXN0MjMzIHRlc3QyMzQgXAogdGVzdDIzNSB0ZXN0MjM2IHRlc3QyMzcgdGVzdDIzOCB0ZXN0MjM5IHRlc3QyNDAgdGVzdDI0MSB0ZXN0MjQyIHRlc3QyNDMgXAogICAgICAgICB0ZXN0MjQ1IHRlc3QyNDYgdGVzdDI0NyB0ZXN0MjQ4IHRlc3QyNDkgdGVzdDI1MCB0ZXN0MjUxIHRlc3QyNTIgXApAQCAtMTIwLDE0ICsxMjAsMTYgQEAKIHRlc3QxMTIwIHRlc3QxMTIxIHRlc3QxMTIyIHRlc3QxMTIzIHRlc3QxMTI0IHRlc3QxMTI1IHRlc3QxMTI2IHRlc3QxMTI3IFwKIHRlc3QxMTI4IHRlc3QxMTI5IHRlc3QxMTMwIHRlc3QxMTMxIHRlc3QxMTMyIHRlc3QxMTMzIHRlc3QxMTM0IHRlc3QxMTM1IFwKIHRlc3QxMTM2IHRlc3QxMTM3IHRlc3QxMTM4IHRlc3QxMTM5IHRlc3QxMTQwIHRlc3QxMTQxIHRlc3QxMTQyIHRlc3QxMTQzIFwKLVwKK3Rlc3QxMTQ0IFwKIHRlc3QxMjAwIHRlc3QxMjAxIHRlc3QxMjAyIHRlc3QxMjAzIHRlc3QxMjA0IHRlc3QxMjA1IHRlc3QxMjA2IHRlc3QxMjA3IFwKIHRlc3QxMjA4IHRlc3QxMjA5IHRlc3QxMjEwIHRlc3QxMjExIHRlc3QxMjEyIHRlc3QxMjEzIHRlc3QxMjE0IHRlc3QxMjE1IFwKIHRlc3QxMjE2IHRlc3QxMjE3IHRlc3QxMjE4IHRlc3QxMjE5IFwKIHRlc3QxMjIwIHRlc3QxMjIxIHRlc3QxMjIyIHRlc3QxMjIzIHRlc3QxMjI0IHRlc3QxMjI1IHRlc3QxMjI2IHRlc3QxMjI3IFwKIHRlc3QxMjI4IHRlc3QxMjI5IHRlc3QxMjMwIHRlc3QxMjMxIHRlc3QxMjMyIHRlc3QxMjMzIHRlc3QxMjM0IHRlc3QxMjM1IFwKIHRlc3QxMjM2IHRlc3QxMjM3IHRlc3QxMjM4IHRlc3QxMjM5IHRlc3QxMjQwIHRlc3QxMjQxIHRlc3QxMjQyIHRlc3QxMjQzIFwKLXRlc3QxMjQ0IFwKK3Rlc3QxMjQ0IHRlc3QxMjQ1IHRlc3QxMjQ2IHRlc3QxMjQ3IFwKK1wKK3Rlc3QxMjgwIFwKIFwKIHRlc3QxMzAwIHRlc3QxMzAxIHRlc3QxMzAyIHRlc3QxMzAzIHRlc3QxMzA0IHRlc3QxMzA1IHRlc3QxMzA2IHRlc3QxMzA3IFwKIHRlc3QxMzA4IHRlc3QxMzA5IHRlc3QxMzEwIHRlc3QxMzExIHRlc3QxMzEyIHRlc3QxMzEzIHRlc3QxMzE0IHRlc3QxMzE1IFwKQEAgLTE1Niw5ICsxNTgsMTAgQEAKIFwKIHRlc3QxNTIwIFwKIFwKLXRlc3QxNTI1IHRlc3QxNTI2IHRlc3QxNTI3IHRlc3QxNTI4IHRlc3QxNTI5IHRlc3QxNTMwIHRlc3QxNTMxIFwKK3Rlc3QxNTI1IHRlc3QxNTI2IHRlc3QxNTI3IHRlc3QxNTI4IHRlc3QxNTI5IHRlc3QxNTMwIHRlc3QxNTMxIHRlc3QxNTMyIFwKK3Rlc3QxNTMzIHRlc3QxNTM0IFwKIFwKLXRlc3QxNjAwIHRlc3QxNjAxIHRlc3QxNjAyIHRlc3QxNjAzIHRlc3QxNjA0IFwKK3Rlc3QxNjAwIHRlc3QxNjAxIHRlc3QxNjAyIHRlc3QxNjAzIHRlc3QxNjA0IHRlc3QxNjA1IFwKIFwKIHRlc3QxNzAwIHRlc3QxNzAxIHRlc3QxNzAyIFwKIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEwMDEgYi90ZXN0cy9kYXRhL3Rlc3QxMDAxCmluZGV4IDYwZTY4YTguLjkxYjEzMjAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEwMDEKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTAwMQpAQCAtODksNiArODksNyBAQAogQ29udGVudC1SYW5nZTogYnl0ZXMgMi00LzUNCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMA0KIA0KIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAwMSBIVFRQLzEuMQ0KQEAgLTk2LDYgKzk3LDcgQEAKIEF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iYXVzZXIiLCByZWFsbT0idGVzdHJlYWxtIiwgbm9uY2U9IjEwNTM2MDQxNDQiLCB1cmk9Ii8xMDAxIiwgcmVzcG9uc2U9IjZhZjRkODljOTUyZjRkZDRjYzIxNWE2ODc4ZGM0OTlkIg0KIENvbnRlbnQtUmFuZ2U6IGJ5dGVzIDItNC81DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDMNCiBFeHBlY3Q6IDEwMC1jb250aW51ZQ0KIA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEwMDIgYi90ZXN0cy9kYXRhL3Rlc3QxMDAyCmluZGV4IDgzYjg3YjkuLjgzY2NlNmUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEwMDIKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTAwMgpAQCAtODgsNiArODgsNyBAQAogQ29udGVudC1SYW5nZTogYnl0ZXMgMi00LzUNCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMS1DVlMgT3BlblNTTC8wLjkuNmIgaXB2NiB6bGliLzEuMS40IEdTUyBsaWJpZG4vMC40LjYNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMA0KIA0KIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTAwMi51cGxvYWQxIEhUVFAvMS4xDQpAQCAtOTUsNiArOTYsNyBAQAogQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJhdXNlciIsIHJlYWxtPSJ0ZXN0cmVhbG0iLCBub25jZT0iMTA1MzYwNDE0NCIsIHVyaT0iLzEwMDIudXBsb2FkMSIsIHJlc3BvbnNlPSIxOThhYTliNmFjYjRiMGM3MWQwMmExOTdhNWU0MWY1NCINCiBDb250ZW50LVJhbmdlOiBieXRlcyAyLTQvNQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiAzDQogRXhwZWN0OiAxMDAtY29udGludWUNCiANCkBAIC0xMDUsNiArMTA3LDcgQEAKIENvbnRlbnQtUmFuZ2U6IGJ5dGVzIDItNC81DQogVXNlci1BZ2VudDogY3VybC83LjE2LjENCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMw0KIEV4cGVjdDogMTAwLWNvbnRpbnVlDQogDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTAwOCBiL3Rlc3RzL2RhdGEvdGVzdDEwMDgKaW5kZXggMWRhYzM5NS4uYmNjNTAzZSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTAwOAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDA4CkBAIC0xMTQsMTAgKzExNCwxMiBAQAogQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4xMDA4OiVIVFRQUE9SVCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjEwMDg6JUhUVFBQT1JUDQogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjEwMDg6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMTAwODolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIC9wYXRoLzEwMDgwMDAyIEhUVFAvMS4xDQogVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMDIxIGIvdGVzdHMvZGF0YS90ZXN0MTAyMQppbmRleCAzYmQ2NGJkLi4zYWM5ZTEyIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMDIxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEwMjEKQEAgLTExOSwxNCArMTE5LDE3IEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjEwMjE6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMTAyMTolSFRUUFBPUlQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4xMDIxOiVIVFRQUE9SVCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjEwMjE6JUhUVFBQT1JUDQogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjEwMjE6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMTAyMTolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIC9wYXRoLzEwMjEwMDAyIEhUVFAvMS4xDQogVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMDM0IGIvdGVzdHMvZGF0YS90ZXN0MTAzNAppbmRleCBmMTQyNjg0Li5jNDc1NzQwIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMDM0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEwMzQKQEAgLTU1LDYgKzU1LDcgQEAKIEdFVCBodHRwOi8vaW52YWxpZC11dGY4LeKQLmxvY2FsL3BhZ2UvMTAzNCBIVFRQLzEuMQ0KIEhvc3Q6IGludmFsaWQtdXRmOC3ikC5sb2NhbA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEwMzUgYi90ZXN0cy9kYXRhL3Rlc3QxMDM1CmluZGV4IGUxYzJhZjYuLjIwYjQzNGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEwMzUKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTAzNQpAQCAtNTIsNiArNTIsNyBAQAogR0VUIGh0dHA6Ly90b28tbG9uZy1JRE4tbmFtZS1j/HJsLXL8bGVzLWxhLWxhLWxhLWRlZS1kYS1mbG9vYnktbm9vYnkubG9jYWwvcGFnZS8xMDM1IEhUVFAvMS4xDQogSG9zdDogdG9vLWxvbmctSUROLW5hbWUtY/xybC1y/Gxlcy1sYS1sYS1sYS1kZWUtZGEtZmxvb2J5LW5vb2J5LmxvY2FsDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTA1OSBiL3Rlc3RzL2RhdGEvdGVzdDEwNTkKaW5kZXggZWU0ZTZhNy4uNjgyMGVhNiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTA1OQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDU5CkBAIC01MSw2ICs1MSw3IEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIHRlc3QtbnVtYmVyOjEwNTkgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LW51bWJlcjoxMDU5DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEwNjAgYi90ZXN0cy9kYXRhL3Rlc3QxMDYwCmluZGV4IDEwOTQ3OTIuLmU0YWVhNjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEwNjAKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTA2MApAQCAtODg3LDEwICs4ODcsMTIgQEAKIDxwcm90b2NvbD4KIENPTk5FQ1QgdGVzdC5yZW1vdGUuaGF4eC5zZS4xMDYwOjg5OTAgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlLjEwNjA6ODk5MA0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBDT05ORUNUIHRlc3QucmVtb3RlLmhheHguc2UuMTA2MDo4OTkwIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuaGF4eC5zZS4xMDYwOjg5OTANCiBQcm94eS1BdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9InNpbGx5IiwgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1IiwgdXJpPSJ0ZXN0LnJlbW90ZS5oYXh4LnNlLjEwNjA6ODk5MCIsIHJlc3BvbnNlPSJlMWZiZWQzOWMyNmY0ZWZlMjg0YWRjMGU1NzZmZjYzOCINCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIC9wYXRoLzEwNjAwMDAyIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuaGF4eC5zZS4xMDYwOjg5OTANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMDYxIGIvdGVzdHMvZGF0YS90ZXN0MTA2MQppbmRleCA0ZjUzYTg3Li5hNTVhMjcyIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMDYxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEwNjEKQEAgLTg5MiwxMCArODkyLDEyIEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIHRlc3QucmVtb3RlLmhheHguc2UuMTA2MTo4OTkwIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuaGF4eC5zZS4xMDYxOjg5OTANCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlLjEwNjE6ODk5MCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTA2MTo4OTkwDQogUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJzaWxseSIsIHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSIsIHVyaT0idGVzdC5yZW1vdGUuaGF4eC5zZS4xMDYxOjg5OTAiLCByZXNwb25zZT0iNGUyMzQ0OWZhOTMyMjQ4MzQyOTllNzI4MmE3MDQ3MmMiDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCAvcGF0aC8xMDYxMDAwMiBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTA2MTo4OTkwDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTA3NyBiL3Rlc3RzL2RhdGEvdGVzdDEwNzcKaW5kZXggZTcxZDc1Ni4uYTNjOTAyNCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTA3NworKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDc3CkBAIC0zMCw2ICszMCw3IEBACiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4NCiBDb250ZW50LUxlbmd0aDogOQ0KIEZ1bm55LWhlYWQ6IHllc3llcw0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBjb250ZW50cwogPC9kYXRhMj4KQEAgLTYyLDEwICs2MywxMiBAQAogR0VUIGZ0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dlL3dhbnQvdGhhdC9wYWdlLzEwNzcgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBmdHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS8xMDc3MDAwMiBIVFRQLzEuMA0KIEhvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTA3OCBiL3Rlc3RzL2RhdGEvdGVzdDEwNzgKaW5kZXggZjA0YmFkMy4uYTliYjc3MSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTA3OAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDc4CkBAIC01Niw2ICs1Niw3IEBACiA8cHJveHk+CiBDT05ORUNUICVIT1NUSVAuMTA3ODolSFRUUFBPUlQgSFRUUC8xLjANCiBIb3N0OiAlSE9TVElQLjEwNzg6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJveHk+CiA8cHJvdG9jb2w+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMDg3IGIvdGVzdHMvZGF0YS90ZXN0MTA4NwppbmRleCAxZmIxM2NiLi5kMjI4OTc2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMDg3CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEwODcKQEAgLTkyLDE1ICs5MiwxOCBAQAogR0VUIGh0dHA6Ly9maXJzdC5ob3N0Lml0LmlzL3dlL3dhbnQvdGhhdC9wYWdlLzEwODcxMDAwIEhUVFAvMS4xDQogSG9zdDogZmlyc3QuaG9zdC5pdC5pcw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8xMDg3MTAwMCBIVFRQLzEuMQ0KIEhvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCiBBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9nb3RvLnNlY29uZC5ob3N0Lm5vdy8xMDg3MTAwMiBIVFRQLzEuMQ0KIEhvc3Q6IGdvdG8uc2Vjb25kLmhvc3Qubm93DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTA4OCBiL3Rlc3RzL2RhdGEvdGVzdDEwODgKaW5kZXggOTgwMWZmZi4uYTgwN2NlOSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTA4OAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDg4CkBAIC05MywxNiArOTMsMTkgQEAKIEdFVCBodHRwOi8vZmlyc3QuaG9zdC5pdC5pcy93ZS93YW50L3RoYXQvcGFnZS8xMDg4MTAwMCBIVFRQLzEuMQ0KIEhvc3Q6IGZpcnN0Lmhvc3QuaXQuaXMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBHRVQgaHR0cDovL2ZpcnN0Lmhvc3QuaXQuaXMvd2Uvd2FudC90aGF0L3BhZ2UvMTA4ODEwMDAgSFRUUC8xLjENCiBIb3N0OiBmaXJzdC5ob3N0Lml0LmlzDQogQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMTA4ODEwMDIgSFRUUC8xLjENCiBIb3N0OiBnb3RvLnNlY29uZC5ob3N0Lm5vdw0KIEF1dGhvcml6YXRpb246IEJhc2ljIGFXRnRPbTE1YzJWc1pnPT0NCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMDkyIGIvdGVzdHMvZGF0YS90ZXN0MTA5MgppbmRleCBjZTg0M2YwLi5hZGVmNDMyIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMDkyCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEwOTIKQEAgLTQ5LDYgKzQ5LDcgQEAKIEdFVCBmdHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS8xMDkyO3R5cGU9aSBIVFRQLzEuMQ0KIEhvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTA5NyBiL3Rlc3RzL2RhdGEvdGVzdDEwOTcKaW5kZXggODFlYTg1NS4uM2I3MzNhNSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTA5NworKysgYi90ZXN0cy9kYXRhL3Rlc3QxMDk3CkBAIC02Nyw2ICs2Nyw3IEBACiBIb3N0OiB0ZXN0LmEuZ2FsYXh5LmZhci5mYXIuYXdheS4xMDk3OiVIVFRQUE9SVA0KIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTkuNS1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTkuNS1DVlMgT3BlblNTTC8wLjkuOGcgemxpYi8xLjIuMy4zIGMtYXJlcy8xLjYuMS1DVlMgbGliaWRuLzEuMTIgbGlic3NoMi8xLjAuMV9DVlMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogUE9TVCAvMTA5NyBIVFRQLzEuMQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xOS41LUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xOS41LUNWUyBPcGVuU1NMLzAuOS44ZyB6bGliLzEuMi4zLjMgYy1hcmVzLzEuNi4xLUNWUyBsaWJpZG4vMS4xMiBsaWJzc2gyLzEuMC4xX0NWUw0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEwOTggYi90ZXN0cy9kYXRhL3Rlc3QxMDk4CmluZGV4IDcwYTZmMzkuLjk4MDU2NDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEwOTgKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTA5OApAQCAtNDksMTAgKzQ5LDEyIEBACiBHRVQgZnRwOi8vZnRwLXNpdGUvbW9vLzEwOTggSFRUUC8xLjENCiBIb3N0OiBmdHAtc2l0ZToyMQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBmdHA6Ly9mdHAtc2l0ZS9tb28vMTA5OCBIVFRQLzEuMQ0KIEhvc3Q6IGZ0cC1zaXRlOjIxDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDxzdGRvdXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMTA0IGIvdGVzdHMvZGF0YS90ZXN0MTEwNAppbmRleCA0ZGY4MWExLi4yMWVmZTNjIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMTA0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDExMDQKQEAgLTcyLDEwICs3MiwxMiBAQAogR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzExMDQgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC9kYXRhLzExMDQwMDAyIEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb29raWU6IHRlc3QyPXRydWUNCiANCiA8L3Byb3RvY29sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTEwNiBiL3Rlc3RzL2RhdGEvdGVzdDExMDYKaW5kZXggYTJhZGJiYi4uMGM2YmVjMSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTEwNgorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMTA2CkBAIC01MCw2ICs1MCw3IEBACiBHRVQgZnRwOi8vJUhPU1RJUDoyMzQ1Ni8xMTA2IEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDoyMzQ1Ng0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDExMzUgYi90ZXN0cy9kYXRhL3Rlc3QxMTM1CmluZGV4IDk2MGFhZGUuLmY3YzZhN2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDExMzUKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTEzNQpAQCAtNTgsNyArNTgsNyBAQAogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X3BlcmZvcm0oQ1VSTCAqY3VybCk7CiBDVVJMX0VYVEVSTiB2b2lkIGN1cmxfZWFzeV9jbGVhbnVwKENVUkwgKmN1cmwpOwogQ1VSTF9FWFRFUk4gQ1VSTGNvZGUgY3VybF9lYXN5X2dldGluZm8oQ1VSTCAqY3VybCwgQ1VSTElORk8gaW5mbywgLi4uKTsKLUNVUkxfRVhURVJOIENVUkwqIGN1cmxfZWFzeV9kdXBoYW5kbGUoQ1VSTCAqY3VybCk7CitDVVJMX0VYVEVSTiBDVVJMICpjdXJsX2Vhc3lfZHVwaGFuZGxlKENVUkwgKmN1cmwpOwogQ1VSTF9FWFRFUk4gdm9pZCBjdXJsX2Vhc3lfcmVzZXQoQ1VSTCAqY3VybCk7CiBDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfcmVjdihDVVJMICpjdXJsLCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZsZW4sCiBDVVJMX0VYVEVSTiBDVVJMY29kZSBjdXJsX2Vhc3lfc2VuZChDVVJMICpjdXJsLCBjb25zdCB2b2lkICpidWZmZXIsCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMTQxIGIvdGVzdHMvZGF0YS90ZXN0MTE0MQppbmRleCBiMGZmMDM4Li45YzQxZDM5IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMTQxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDExNDEKQEAgLTU4LDEwICs1OCwxMiBAQAogR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93YW50LzExNDEgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZm9vLmV4YW1wbGUuY29tL3dhbnQvMTE0MTAwMDEgSFRUUC8xLjENCiBIb3N0OiBmb28uZXhhbXBsZS5jb20NCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMTQyIGIvdGVzdHMvZGF0YS90ZXN0MTE0MgppbmRleCAwZWNmYmQzLi43NmM2YmRmIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMTQyCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDExNDIKQEAgLTUzLDYgKzUzLDcgQEAKIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC8xMTQyIEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogIyAzLCBDVVJMRV9VUkxfTUFMRk9STUFUIGZvciB0aGUgZm91ciBzbGFzaGVzCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMTQ0IGIvdGVzdHMvZGF0YS90ZXN0MTE0NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI5MDkzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTE0NApAQCAtMCwwICsxLDY5IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgSEVBRAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitObyBoZWFkZXJzIGF0IGFsbCwganVzdCBkYXRhIHN3c2Nsb3NlCisKK0xldCdzIGdldAorCithIGxpdHRsZQorCitzbyB0aGF0CisKK3dlCisKK2hhdmUKKworc29tZQorCit0ZXN0CisKK2RhdGEgdG8KKwordmVyaWZ5Cis8L2RhdGE+CisjIG1ha2Ugc3VyZSBubyBkYXRhIGlzIHdyaXR0ZW4KKzxkYXRhY2hlY2sgbm9uZXdsaW5lPSJ5ZXMiPgorCis8L2RhdGFjaGVjaz4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+CisgPG5hbWU+CitIVFRQIEhFQUQsIHJlY2VpdmUgbm8gaGVhZGVycyBvbmx5IGJvZHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistSSBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTE0NAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHN0cmlwPgorXlVzZXItQWdlbnQ6LioKKzwvc3RyaXA+Cis8cHJvdG9jb2w+CitIRUFEIC8xMTQ0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorOAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjEzIGIvdGVzdHMvZGF0YS90ZXN0MTIxMwppbmRleCBiYzE0NmIwLi40ZjIyZjBkIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMjEzCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEyMTMKQEAgLTQ2LDYgKzQ2LDcgQEAKIEdFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLjEyMTMvIEhUVFAvMS4xDQogSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tLjEyMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjE0IGIvdGVzdHMvZGF0YS90ZXN0MTIxNAppbmRleCBlNzAzZjdhLi4zZWViM2UzIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMjE0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEyMTQKQEAgLTQ2LDYgKzQ2LDcgQEAKIEdFVCBodHRwOi8vd2Uud2FudC50aGF0LnNpdGUuY29tLjEyMTQvP21vbz1mb28gSFRUUC8xLjENCiBIb3N0OiB3ZS53YW50LnRoYXQuc2l0ZS5jb20uMTIxNA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEyMTUgYi90ZXN0cy9kYXRhL3Rlc3QxMjE1CmluZGV4IGUyMjU5MWMuLmY4YzUyYTkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEyMTUKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTIxNQpAQCAtOTIsMTIgKzkyLDE0IEBACiBBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQogVXNlci1BZ2VudDogY3VybC83LjMwLjAtREVWDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMjE1IEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCiBBdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMzAuMC1ERVYNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjE2IGIvdGVzdHMvZGF0YS90ZXN0MTIxNgppbmRleCA2ZTQ1YWM2Li41YmVkYTc5IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMjE2CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEyMTYKQEAgLTUwLDExICs1MCwxMyBAQAogR0VUIGh0dHA6Ly9leGFtcGxlLmZha2UvYy8xMjE2IEhUVFAvMS4xDQogSG9zdDogZXhhbXBsZS5mYWtlDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29va2llOiBtb28yPWluZGVlZDsgbW9vMz1pbmRlZWQNCiANCiBHRVQgaHR0cDovL2JleGFtcGxlLmZha2UvYy8xMjE2IEhUVFAvMS4xDQogSG9zdDogYmV4YW1wbGUuZmFrZQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEyMTggYi90ZXN0cy9kYXRhL3Rlc3QxMjE4CmluZGV4IDljMmZjMDMuLmUzZjFmNmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEyMTgKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTIxOApAQCAtNDMsMTUgKzQzLDE4IEBACiBHRVQgaHR0cDovL2V4YW1wbGUuZmFrZS9jLzEyMTggSFRUUC8xLjENCiBIb3N0OiBleGFtcGxlLmZha2UNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBHRVQgaHR0cDovL2V4YW1wbGUuZmFrZS9jLzEyMTggSFRUUC8xLjENCiBIb3N0OiBleGFtcGxlLmZha2UNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb29raWU6IGJ1Zz1maXhlZA0KIA0KIEdFVCBodHRwOi8vYmV4YW1wbGUuZmFrZS9jLzEyMTggSFRUUC8xLjENCiBIb3N0OiBiZXhhbXBsZS5mYWtlDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTIyOCBiL3Rlc3RzL2RhdGEvdGVzdDEyMjgKaW5kZXggZDBhZjUxNy4uYTdlNTZhNyAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTIyOAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjI4CkBAIC00MiwxMCArNDIsMTIgQEAKIEdFVCBodHRwOi8vZXhhbXBsZS5mYWtlL2hvZ2UvMTIyOCBIVFRQLzEuMQ0KIEhvc3Q6IGV4YW1wbGUuZmFrZQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZXhhbXBsZS5mYWtlL2hvZ2VnZS8gSFRUUC8xLjENCiBIb3N0OiBleGFtcGxlLmZha2UNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb29raWU6IHBhdGgxPXJvb3QNCiANCiA8L3Byb3RvY29sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTIzMCBiL3Rlc3RzL2RhdGEvdGVzdDEyMzAKaW5kZXggOGNlNGM0ZS4uM2MxZDNkNCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTIzMAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjMwCkBAIC02OSw2ICs2OSw3IEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIFsxMjM0OjEyMzQ6MTIzNDo6NGNlXTolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiBbMTIzNDoxMjM0OjEyMzQ6OjRjZV06JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCAvd2FudGVkL3BhZ2UvMTIzMCBIVFRQLzEuMQ0KIEhvc3Q6IFsxMjM0OjEyMzQ6MTIzNDo6NGNlXTolSFRUUFBPUlQNCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjMyIGIvdGVzdHMvZGF0YS90ZXN0MTIzMgppbmRleCAxYzViYzIwLi5lYWQ0MzM2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMjMyCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEyMzIKQEAgLTUzLDEwICs1MywxMiBAQAogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlLjEyMzI6ODk5MC9oZWovYnV0LzEyMzI/c3R1cGlkPW1lLy4uLzEyMzIgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlLjEyMzI6ODk5MA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vdGVzdC5yZW1vdGUuaGF4eC5zZS4xMjMyOjg5OTAvaGVqL2J1dC8xMjMyMDAwMSBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTIzMjo4OTkwDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTI0MSBiL3Rlc3RzL2RhdGEvdGVzdDEyNDEKaW5kZXggNWExMjczMi4uYWFhNTY4OCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTI0MQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjQxCkBAIC01MiwxMCArNTIsMTIgQEAKIEdFVCBodHRwOi8vdGVzdC5yZW1vdGUuaGF4eC5zZS4xMjQxOjg5OTAvLi4vLi4vaGVqL2J1dC93aG8vLi4vMTI0MT9zdHVwaWQ9bWUvLi4vMTI0MSBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTI0MTo4OTkwDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlLjEyNDE6ODk5MC8uLi8uLi9oZWovYnV0L3doby8uLi8xMjQxMDAwMSBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTI0MTo4OTkwDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTI0NCBiL3Rlc3RzL2RhdGEvdGVzdDEyNDQKaW5kZXggNzkxMmI0ZS4uZDA3NjlhZCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTI0NAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjQ0CkBAIC01NCw2ICs1NCw3IEBACiBHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzEyNDQgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEyNDUgYi90ZXN0cy9kYXRhL3Rlc3QxMjQ1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDY1NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjQ1CkBAIC0wLDAgKzEsNjMgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorRlRQCitIVFRQCitIVFRQIEdFVAorLS1wcm90bworLS1wcm90by1yZWRpcgorZm9sbG93bG9jYXRpb24KKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhPgorSFRUUC8xLjEgMzAxIE9LIHN3c2Nsb3NlDQorRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQNCitTZXJ2ZXI6IHRlc3Qtc2VydmVyL2Zha2UNCitDb250ZW50LUxlbmd0aDogMA0KK0xvY2F0aW9uOiBmdHA6Ly8xMjcuMC4wLjE6ODk5Mi8xMjQ1DQorQ29ubmVjdGlvbjogY2xvc2UNCisNCis8L2RhdGE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2Z0cAoraHR0cAorPC9zZXJ2ZXI+Cis8bmFtZT4KKy0tcHJvdG8gZGVueSBtdXN0IG92ZXJyaWRlIC0tcHJvdG8tcmVkaXIgYWxsb3cKKzwvbmFtZT4KKzxjb21tYW5kPgorLS1sb2NhdGlvbiAtLXByb3RvICthbGwsLWZ0cCAtLXByb3RvLXJlZGlyIC1hbGwsK2Z0cCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTI0NQorPC9jb21tYW5kPgorIyBUaGUgZGF0YSBzZWN0aW9uIGRvZXNuJ3QgZG8gdmFyaWFibGUgc3Vic3RpdHV0aW9uLCBzbyB3ZSBtdXN0IGFzc2VydCB0aGlzCis8cHJlY2hlY2s+CitwZXJsIC1lICJwcmludCAnVGVzdCByZXF1aXJlcyBkZWZhdWx0IHRlc3Qgc2VydmVyIGhvc3QgYW5kIHBvcnQnIGlmICggJyVIT1NUSVAnIG5lICcxMjcuMC4wLjEnIHx8ICclRlRQUE9SVCcgbmUgJzg5OTInICk7IgorPC9wcmVjaGVjaz4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIC8xMjQ1IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+CisjIDEgLSBQcm90b2NvbCBmdHAgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZCBpbiBsaWJjdXJsCis8ZXJyb3Jjb2RlPgorMQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjQ2IGIvdGVzdHMvZGF0YS90ZXN0MTI0NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTY1OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTI0NgpAQCAtMCwwICsxLDY0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKyMgdmVyaWZ5IFVSTCB3aXRoIGhvc3RuYW1lIGVuZGluZyBpbiBwb3VuZCBzaWduCis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorSFRUUCBwcm94eQorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGE+CitIVFRQLzEuMSAyMDAgT0sKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorCistZm9vLQorPC9kYXRhPgorCis8ZGF0YTE+CitIVFRQLzEuMSAyMDAgT0sKK0NvbnRlbnQtTGVuZ3RoOiA3CitDb25uZWN0aW9uOiBjbG9zZQorCistY29vbC0KKzwvZGF0YTE+Cis8L3JlcGx5PgorCisjCisjIENsaWVudC1zaWRlCis8Y2xpZW50PgorPHNlcnZlcj4KK2h0dHAKKzwvc2VydmVyPgorIDxuYW1lPgorVVJMIHdpdGggJyMnIGF0IGVuZCBvZiBob3N0IG5hbWUgaW5zdGVhZCBvZiAnLycKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLXByb3h5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVCBodHRwOi8vdGVzdC5yZW1vdGUuaGF4eC5zZS4xMjQ2OiVIVFRQUE9SVCNAMTI3LjAuMC4xL3RyaWNrZWQuaHRtbCBuby1zY2hlbWUtdXJsLmNvbS4xMjQ2OiVIVFRQUE9SVCNAMTI3LjEyNy4xMjcuMTI3L2FnYWluLmh0bWwKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90IgorPHZlcmlmeT4KKzxzdHJpcD4KK15Vc2VyLUFnZW50Oi4qCis8L3N0cmlwPgorPHByb3RvY29sPgorR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlLjEyNDY6JUhUVFBQT1JULyBIVFRQLzEuMQ0KK0hvc3Q6IHRlc3QucmVtb3RlLmhheHguc2UuMTI0NjolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCisNCitHRVQgaHR0cDovL25vLXNjaGVtZS11cmwuY29tLjEyNDY6JUhUVFBQT1JULyBIVFRQLzEuMQ0KK0hvc3Q6IG5vLXNjaGVtZS11cmwuY29tLjEyNDY6JUhUVFBQT1JUDQorQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEyNDcgYi90ZXN0cy9kYXRhL3Rlc3QxMjQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzVjY2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMjQ3CkBAIC0wLDAgKzEsMzggQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorLS1mYWlsLWVhcmx5Cis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KKzwvZGF0YT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+CisgPG5hbWU+CistLWZhaWwtZWFybHkKKyA8L25hbWU+CisgPGNvbW1hbmQ+CistLWZhaWwtZWFybHkgaDEyMzQ6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMjQ3IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8xMjQ3Cis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+CisjIFByb3RvY29sICJoMTIzNCIgbm90IHN1cHBvcnRlZCBvciBkaXNhYmxlZCBpbiBsaWJjdXJsCis8ZXJyb3Jjb2RlPgorMQorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMjgwIGIvdGVzdHMvZGF0YS90ZXN0MTI4MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWMxZTJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTI4MApAQCAtMCwwICsxLDU4IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK2dsb2JiaW5nCis8L2tleXdvcmRzPgorPC9pbmZvPgorCisjCisjIFNlcnZlci1zaWRlCis8cmVwbHk+Cis8ZGF0YT4KK0hUVFAvMS4xIDIwMCBPSworRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKK0NvbnRlbnQtTGVuZ3RoOiA2CitDb25uZWN0aW9uOiBjbG9zZQorCitieXRlcworPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyA8bmFtZT4KK3NpbXBsZSBbYS1kXSBnbG9iYmluZworIDwvbmFtZT4KKyA8Y29tbWFuZD4KK2h0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC9bYS1kXS8xMjgwCis8L2NvbW1hbmQ+Cis8L2NsaWVudD4KKworIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8c3RyaXA+CiteVXNlci1BZ2VudDouKgorPC9zdHJpcD4KKzxwcm90b2NvbD4KK0dFVCAvYS8xMjgwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvYi8xMjgwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvYy8xMjgwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KK0dFVCAvZC8xMjgwIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMzAxIGIvdGVzdHMvZGF0YS90ZXN0MTMwMQppbmRleCA0YjZmYWM4Li44NTA2YzAwIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMzAxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEzMDEKQEAgLTIsNyArMiw3IEBACiA8aW5mbz4KIDxrZXl3b3Jkcz4KIHVuaXR0ZXN0Ci1jdXJsX3N0cmVxdWFsCitjdXJsX3N0cmNhc2Vjb21wYXJlCiA8L2tleXdvcmRzPgogPC9pbmZvPgogCkBAIC0xNiw3ICsxNiw3IEBACiB1bml0dGVzdAogPC9mZWF0dXJlcz4KICA8bmFtZT4KLWN1cmxfc3RyZXF1YWwgdW5pdCB0ZXN0cworY3VybF9zdHJjYXNlY29tcGFyZSB1bml0IHRlc3RzCiAgPC9uYW1lPgogPHRvb2w+CiB1bml0MTMwMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTMxNCBiL3Rlc3RzL2RhdGEvdGVzdDEzMTQKaW5kZXggMTFlMTI4YS4uMDc4YWRhNiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTMxNAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMzE0CkBAIC02NywxMCArNjcsMTIgQEAKIEdFVCBodHRwOi8vZmlyc3RwbGFjZS5leGFtcGxlLmNvbS93YW50LzEzMTQgSFRUUC8xLjENCiBIb3N0OiBmaXJzdHBsYWNlLmV4YW1wbGUuY29tDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9zb21ld2hlcmUuZXhhbXBsZS5jb20vcmVwbHkvMTMxNCBIVFRQLzEuMQ0KIEhvc3Q6IHNvbWV3aGVyZS5leGFtcGxlLmNvbQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEzMTkgYi90ZXN0cy9kYXRhL3Rlc3QxMzE5CmluZGV4IGE5N2RhOWMuLjA1MjBiMWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEzMTkKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTMxOQpAQCAtNzksNiArNzksNyBAQAogQ09OTkVDVCBwb3AuMTMxOTolUE9QM1BPUlQgSFRUUC8xLjENCiBIb3N0OiBwb3AuMTMxOTolUE9QM1BPUlQNCiBVc2VyLUFnZW50OiBjdXJsLzcuMjQuMC1ERVYgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMjQuMC1ERVYgT3BlblNTTC8xLjAuMGUgemxpYi8xLjIuMy40IGMtYXJlcy8xLjcuNi1ERVYgbGliaWRuLzEuMjMgbGlic3NoMi8xLjQuMF9ERVYgbGlicnRtcC8yLjJlDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJveHk+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDEzMjAgYi90ZXN0cy9kYXRhL3Rlc3QxMzIwCmluZGV4IDYwOWY0YzIuLjdhMTVmODAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDEzMjAKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTMyMApAQCAtNjYsNiArNjYsNyBAQAogQ09OTkVDVCBzbXRwLjEzMjA6JVNNVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogc210cC4xMzIwOiVTTVRQUE9SVA0KIFVzZXItQWdlbnQ6IGN1cmwvNy4yNC4wLURFViAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4yNC4wLURFViBPcGVuU1NMLzEuMC4wZSB6bGliLzEuMi4zLjQgYy1hcmVzLzEuNy42LURFViBsaWJpZG4vMS4yMyBsaWJzc2gyLzEuNC4wX0RFViBsaWJydG1wLzIuMmUNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm94eT4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTMyMSBiL3Rlc3RzL2RhdGEvdGVzdDEzMjEKaW5kZXggYjVhZDI3Ny4uMjY2ZmQ4OCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTMyMQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxMzIxCkBAIC03NSw2ICs3NSw3IEBACiBDT05ORUNUIGltYXAuMTMyMTolSU1BUFBPUlQgSFRUUC8xLjENCiBIb3N0OiBpbWFwLjEzMjE6JUlNQVBQT1JUDQogVXNlci1BZ2VudDogY3VybC83LjI0LjAtREVWIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjI0LjAtREVWIE9wZW5TU0wvMS4wLjBlIHpsaWIvMS4yLjMuNCBjLWFyZXMvMS43LjYtREVWIGxpYmlkbi8xLjIzIGxpYnNzaDIvMS40LjBfREVWIGxpYnJ0bXAvMi4yZQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3h5PgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxMzMxIGIvdGVzdHMvZGF0YS90ZXN0MTMzMQppbmRleCA4MzdlZjhkLi4zMjk5ZGY0IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxMzMxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDEzMzEKQEAgLTc1LDExICs3NSwxMyBAQAogR0VUIGh0dHA6Ly96LnguY29tLzEzMzEgSFRUUC8xLjENCiBIb3N0OiB6LnguY29tDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly96LnguY29tLzEzMzEgSFRUUC8xLjENCiBIb3N0OiB6LnguY29tDQogUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgYlhsdVlXMWxPbTE1Y0dGemMzZHZjbVE9DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29va2llOiBwcm94eWNvb2tpZT13ZWlyZG8NCiANCiA8L3Byb3RvY29sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQwMCBiL3Rlc3RzL2RhdGEvdGVzdDE0MDAKaW5kZXggMGVlNzM3MC4uODM4ZmU2MyAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQwMAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDAwCkBAIC03Nyw2ICs3Nyw3IEBACiAgICAgIHRoZW0geW91cnNlbGYuCiAKICAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgogICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNDAxIGIvdGVzdHMvZGF0YS90ZXN0MTQwMQppbmRleCA2MDJiMDlhLi4xZTJiNGE3IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNDAxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE0MDEKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgdGhlbSB5b3Vyc2VsZi4KIAogICBDVVJMT1BUX1dSSVRFREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfSU5URVJMRUFWRURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgogICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCiAgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgogICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE0MDIgYi90ZXN0cy9kYXRhL3Rlc3QxNDAyCmluZGV4IDBjMjE5OWUuLjA3YzNmNDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE0MDIKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTQwMgpAQCAtODQsNiArODQsNyBAQAogICAgICB0aGVtIHlvdXJzZWxmLgogCiAgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfV1JJVEVGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKICAgQ1VSTE9QVF9SRUFEREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfUkVBREZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQwMyBiL3Rlc3RzL2RhdGEvdGVzdDE0MDMKaW5kZXggOThmMjM4Zi4uMTgxNjdiNCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQwMworKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDAzCkBAIC03OSw2ICs3OSw3IEBACiAgICAgIHRoZW0geW91cnNlbGYuCiAKICAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgogICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNDA0IGIvdGVzdHMvZGF0YS90ZXN0MTQwNAppbmRleCBhMTU5ZTQ5Li42ZjUzY2E4IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNDA0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE0MDQKQEAgLTEzMyw2ICsxMzMsNyBAQAogICAgICB0aGVtIHlvdXJzZWxmLgogCiAgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfV1JJVEVGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKICAgQ1VSTE9QVF9SRUFEREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfUkVBREZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQwNSBiL3Rlc3RzL2RhdGEvdGVzdDE0MDUKaW5kZXggZjIyMzk1NC4uNGU4ZDQ2ZCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQwNQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDA1CkBAIC05Myw2ICs5Myw3IEBACiAgICAgIHRoZW0geW91cnNlbGYuCiAKICAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgogICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNDA2IGIvdGVzdHMvZGF0YS90ZXN0MTQwNgppbmRleCBjN2U0Y2Q0Li4wY2NiMDhhIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNDA2CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE0MDYKQEAgLTg4LDYgKzg4LDcgQEAKICAgICAgdGhlbSB5b3Vyc2VsZi4KIAogICBDVVJMT1BUX1dSSVRFREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCisgIENVUkxPUFRfSU5URVJMRUFWRURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgogICBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCiAgIENVUkxPUFRfUkVBRERBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgogICBDVVJMT1BUX1JFQURGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE0MDcgYi90ZXN0cy9kYXRhL3Rlc3QxNDA3CmluZGV4IDhmOGNiMmEuLjk4MWU0ZTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE0MDcKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTQwNwpAQCAtNjgsNiArNjgsNyBAQAogICAgICB0aGVtIHlvdXJzZWxmLgogCiAgIENVUkxPUFRfV1JJVEVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKKyAgQ1VSTE9QVF9JTlRFUkxFQVZFREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfV1JJVEVGVU5DVElPTiBzZXQgdG8gYSBmdW5jdGlvbnBvaW50ZXIKICAgQ1VSTE9QVF9SRUFEREFUQSBzZXQgdG8gYSBvYmplY3Rwb2ludGVyCiAgIENVUkxPUFRfUkVBREZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQxNSBiL3Rlc3RzL2RhdGEvdGVzdDE0MTUKaW5kZXggMzdjZmIwNy4uNTYwNDQwNCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQxNQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDE1CkBAIC01Nyw2ICs1Nyw3IEBACiBHRVQgaHR0cDovL2V4YW1wbGUuY29tL3dlL3dhbnQvMTQxNSBIVFRQLzEuMQ0KIEhvc3Q6IGV4YW1wbGUuY29tDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQyMCBiL3Rlc3RzL2RhdGEvdGVzdDE0MjAKaW5kZXggN2E4NjgwNi4uYTIwZjg5OCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQyMAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDIwCkBAIC03Myw2ICs3Myw3IEBACiAgICAgIHRoZW0geW91cnNlbGYuCiAKICAgQ1VSTE9QVF9XUklURURBVEEgc2V0IHRvIGEgb2JqZWN0cG9pbnRlcgorICBDVVJMT1BUX0lOVEVSTEVBVkVEQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9XUklURUZVTkNUSU9OIHNldCB0byBhIGZ1bmN0aW9ucG9pbnRlcgogICBDVVJMT1BUX1JFQUREQVRBIHNldCB0byBhIG9iamVjdHBvaW50ZXIKICAgQ1VSTE9QVF9SRUFERlVOQ1RJT04gc2V0IHRvIGEgZnVuY3Rpb25wb2ludGVyCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNDIxIGIvdGVzdHMvZGF0YS90ZXN0MTQyMQppbmRleCA4ODljOTM4Li42YzU5YjIxIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNDIxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE0MjEKQEAgLTU5LDEwICs1OSwxMiBAQAogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5oYXh4LnNlLjE0MjE6ODk5MC8gSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlLjE0MjE6ODk5MA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZGlmZmVyZW50LnJlbW90ZS5oYXh4LnNlLjE0MjE6ODk5MC8gSFRUUC8xLjENCiBIb3N0OiBkaWZmZXJlbnQucmVtb3RlLmhheHguc2UuMTQyMTo4OTkwDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogW0RJU0NPTk5FQ1RdCiA8L3Byb3RvY29sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTQyOCBiL3Rlc3RzL2RhdGEvdGVzdDE0MjgKaW5kZXggNjBmYjhhOS4uNTkwNDFlYyAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTQyOAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNDI4CkBAIC02NCw2ICs2NCw3IEBACiBDT05ORUNUIHRlc3QuMTQyODolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LjE0Mjg6JUhUVFBQT1JUDQogVXNlci1BZ2VudDogY3VybC83LjEwLjctcHJlMiAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC43LXByZTIgT3BlblNTTC8wLjkuN2EgemxpYi8xLjEuMw0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBoZWFkZXItdHlwZTogcHJveHkNCiANCiA8L3Byb3h5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTUwOSBiL3Rlc3RzL2RhdGEvdGVzdDE1MDkKaW5kZXggMThlYjA3Zi4uYjRiZmM2NiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTUwOQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNTA5CkBAIC03NCw2ICs3NCw3IEBACiA8cHJveHk+CiBDT05ORUNUIHRoZS5vbGQubW9vLjE1MDk6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGhlLm9sZC5tb28uMTUwOTolSFRUUFBPUlQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm94eT4KIDxwcm90b2NvbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE1MjUgYi90ZXN0cy9kYXRhL3Rlc3QxNTI1CmluZGV4IGQ4ZjY4ODMuLjA1NjBkNWMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE1MjUKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTUyNQpAQCAtNTgsNiArNTgsNyBAQAogPHByb3h5PgogQ09OTkVDVCB0aGUub2xkLm1vby4xNTI1OiVIVFRQUE9SVCBIVFRQLzEuMQ0KIEhvc3Q6IHRoZS5vbGQubW9vLjE1MjU6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIFVzZXItQWdlbnQ6IEh0dHAgQWdlbnQNCiANCiA8L3Byb3h5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTUyNiBiL3Rlc3RzL2RhdGEvdGVzdDE1MjYKaW5kZXggOWY1ZDA5ZS4uYWExMTFjOCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTUyNgorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNTI2CkBAIC01OCw2ICs1OCw3IEBACiA8cHJveHk+CiBDT05ORUNUIHRoZS5vbGQubW9vLjE1MjY6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGhlLm9sZC5tb28uMTUyNjolSFRUUFBPUlQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogVXNlci1BZ2VudDogUHJveHkgQWdlbnQNCiANCiA8L3Byb3h5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTUyNyBiL3Rlc3RzL2RhdGEvdGVzdDE1MjcKaW5kZXggNjlhZTZlNC4uZThkNTI3OSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTUyNworKysgYi90ZXN0cy9kYXRhL3Rlc3QxNTI3CkBAIC01Nyw2ICs1Nyw3IEBACiA8cHJveHk+CiBDT05ORUNUIHRoZS5vbGQubW9vLjE1Mjc6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogdGhlLm9sZC5tb28uMTUyNzolSFRUUFBPUlQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogVXNlci1BZ2VudDogSHR0cCBBZ2VudA0KIEV4cGVjdDogMTAwLWNvbnRpbnVlDQogDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTUyOCBiL3Rlc3RzL2RhdGEvdGVzdDE1MjgKaW5kZXggZTYwZjYwMC4uODc2ODA2YSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTUyOAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNTI4CkBAIC01MSw2ICs1MSw3IEBACiBHRVQgaHR0cDovL3RoZS5vbGQubW9vOiVIVFRQUE9SVC8xNTI4IEhUVFAvMS4xDQogSG9zdDogdGhlLm9sZC5tb286JUhUVFBQT1JUDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogVXNlci1BZ2VudDogSHR0cCBBZ2VudA0KIFByb3h5LVVzZXItQWdlbnQ6IEh0dHAgQWdlbnQyDQogDQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTUzMiBiL3Rlc3RzL2RhdGEvdGVzdDE1MzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyYWZjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE1MzIKQEAgLTAsMCArMSw0OSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+CitIVFRQCitIVFRQIEdFVAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBTZXJ2ZXItc2lkZQorPHJlcGx5PgorPGRhdGEgbm9jaGVjaz0ieWVzIj4KK0hUVFAvMS4wIDIwMCBPSyBzd3NjbG9zZQ0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWIxNTMyCis8L3Rvb2w+Cis8bmFtZT4KK1Rlc3QgQ1VSTElORk9fUkVTUE9OU0VfQ09ERQorPC9uYW1lPgorPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTUzMgorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC8xNTMyIEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNTMzIGIvdGVzdHMvZGF0YS90ZXN0MTUzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjUxODE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTUzMwpAQCAtMCwwICsxLDc0IEBACis8dGVzdGNhc2U+Cis8aW5mbz4KKzxrZXl3b3Jkcz4KK0hUVFAKK0hUVFAgUE9TVAorQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxzZXJ2ZXJjbWQ+CithdXRoX3JlcXVpcmVkCis8L3NlcnZlcmNtZD4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMSA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZA0KK0RhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UDQorU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlDQorQ29udGVudC1MZW5ndGg6IDE1DQorCitFYXJseSBSZXNwb25zZQorPC9kYXRhPgorPC9yZXBseT4KKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgoraHR0cAorPC9zZXJ2ZXI+Cis8dG9vbD4KK2xpYjE1MzMKKzwvdG9vbD4KKzxuYW1lPgorSFRUUCB3aXRoIENVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SIGFuZCBhbiBlYXJseSBlcnJvciByZXNwb25zZQorPC9uYW1lPgorPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTUzMworPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCisjIFRFU1RfRVJSX1NVQ0NFU1MgaXMgZXJyb3Jjb2RlIDEyMAorPHZlcmlmeT4KKzxlcnJvcmNvZGU+CisxMjAKKzwvZXJyb3Jjb2RlPgorPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KK1BPU1QgLzE1MzMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzE1MzMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK1BPU1QgLzE1MzMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK2FhYVBPU1QgLzE1MzMgSFRUUC8xLjENCitIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KK0FjY2VwdDogKi8qDQorQ29udGVudC1MZW5ndGg6IDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KKw0KK2FhYQorPC9wcm90b2NvbD4KKzwvdmVyaWZ5PgorPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE1MzQgYi90ZXN0cy9kYXRhL3Rlc3QxNTM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2QyZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNTM0CkBAIC0wLDAgKzEsNTAgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorSFRUUAorSFRUUCBHRVQKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzxkYXRhIG5vY2hlY2s9InllcyI+CitIVFRQLzEuMCAyMDAgT0sgc3dzY2xvc2UNCitMYXN0LU1vZGlmaWVkOiBUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjMwIEdNVA0KK0NvbnRlbnQtTGVuZ3RoOiAwDQorDQorPC9kYXRhPgorPC9yZXBseT4KKworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+CitodHRwCis8L3NlcnZlcj4KKyMgdG9vbCBpcyB3aGF0IHRvIHVzZSBpbnN0ZWFkIG9mICdjdXJsJworPHRvb2w+CitsaWIxNTM0Cis8L3Rvb2w+Cis8bmFtZT4KK1Rlc3QgQ1VSTElORk9fUkVTUE9OU0VfQ09ERQorPC9uYW1lPgorPGNvbW1hbmQ+CitodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvMTUzNAorPC9jb21tYW5kPgorPC9jbGllbnQ+CisKKyMKKyMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCis8dmVyaWZ5PgorPHByb3RvY29sPgorR0VUIC8xNTM0IEhUVFAvMS4xDQorSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCitBY2NlcHQ6ICovKg0KKw0KKzwvcHJvdG9jb2w+Cis8ZXJyb3Jjb2RlPgorMAorPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNiBiL3Rlc3RzL2RhdGEvdGVzdDE2CmluZGV4IDlkOWE5Y2MuLjE1ZjRjN2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE2CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE2CkBAIC00NSw2ICs0NSw3IEBACiBIb3N0OiB3ZS53YW50LnRoYXQuc2l0ZS5jb20NCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBabUZyWlVCMWMyVnlPbXh2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXZiMjl2YjI5dmIyOXVadz09DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTYwNSBiL3Rlc3RzL2RhdGEvdGVzdDE2MDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllZjY2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE2MDUKQEAgLTAsMCArMSwyNSBAQAorPHRlc3RjYXNlPgorPGluZm8+Cis8a2V5d29yZHM+Cit1bml0dGVzdAorPC9rZXl3b3Jkcz4KKzwvaW5mbz4KKworIworIyBDbGllbnQtc2lkZQorPGNsaWVudD4KKzxzZXJ2ZXI+Citub25lCis8L3NlcnZlcj4KKzxmZWF0dXJlcz4KK3VuaXR0ZXN0Cis8L2ZlYXR1cmVzPgorIDxuYW1lPgorVGVzdCBuZWdhdGl2ZSBkYXRhIGxlbmd0aHMgYXMgaW5wdXQgdG8gbGliY3VybCBmdW5jdGlvbnMKKyA8L25hbWU+Cis8dG9vbD4KK3VuaXQxNjA1Cis8L3Rvb2w+Cis8L2NsaWVudD4KKworPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE2MSBiL3Rlc3RzL2RhdGEvdGVzdDE2MQppbmRleCAwNDU4MzU5Li45MWEzMzg4IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNjEKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTYxCkBAIC0zMiw4ICszMiw4IEBACiAKICMgVmVyaWZ5IGRhdGEgYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gInNob3QiCiA8dmVyaWZ5PgotIyBUaGlzIGdldHMgUVVJVCBzZW50IGJlY2F1c2UgQ1VSTEVfUEFSVElBTF9GSUxFIGRvZXMgTk9UIG1hcmsgdGhlIGNvbnRyb2wKLSMgY29ubmVjdGlvbiBhcyBiYWQKKyMgVGhpcyBkb2Vzbid0IHNlbmQgUVVJVCBiZWNhdXNlIG9mIGtub3duIGJ1ZzoKKyMgIjcuOCBQcmVtYXR1cmUgdHJhbnNmZXIgZW5kIGJ1dCBoZWFsdGh5IGNvbnRyb2wgY2hhbm5lbCIKIDxwcm90b2NvbD4KIFVTRVIgYW5vbnltb3VzDQogUEFTUyBmdHBAZXhhbXBsZS5jb20NCkBAIC00Miw4ICs0Miw4IEBACiBUWVBFIEkNCiBTSVpFIDE2MQ0KIFJFVFIgMTYxDQotUVVJVA0KIDwvcHJvdG9jb2w+CisjIENVUkxFX1BBUlRJQUxfRklMRSA9IDE4CiA8ZXJyb3Jjb2RlPgogMTgKIDwvZXJyb3Jjb2RlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTYyIGIvdGVzdHMvZGF0YS90ZXN0MTYyCmluZGV4IGNjNGM4MmQuLmVlMmY0MGEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE2MgorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNjIKQEAgLTUxLDYgKzUxLDcgQEAKIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuOC4xLXByZTMgKHNwYXJjLXN1bi1zb2xhcmlzMi43KSBsaWJjdXJsIDcuOC4xLXByZTMgKE9wZW5TU0wgMC45LjZhKSAoa3JiNCBlbmFibGVkKQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8ZXJyb3Jjb2RlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTY1IGIvdGVzdHMvZGF0YS90ZXN0MTY1CmluZGV4IGI0NzVmZGUuLjZmYzBhZDIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE2NQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNjUKQEAgLTMxLDEzICszMSwxNCBAQAogaWRuCiA8L2ZlYXR1cmVzPgogPHNldGVudj4KLUNIQVJTRVQ9SVNPODg1OS0xCitDSEFSU0VUPVVURi04CitMQU5HPWVuX1VTLlVURi04CiA8L3NldGVudj4KICA8bmFtZT4KIEhUVFAgb3ZlciBwcm94eSB3aXRoIElETiBob3N0IG5hbWUKICA8L25hbWU+CiAgPGNvbW1hbmQ+Ci1odHRwOi8vd3d3LuXk9i5zZS9wYWdlLzE2NSAteCAlSE9TVElQOiVIVFRQUE9SVAoraHR0cDovL3d3dy7DpcOkw7Yuc2UvcGFnZS8xNjUgLXggJUhPU1RJUDolSFRUUFBPUlQgaHR0cDovL3d3dy5ncm/Dn2UuZGUvcGFnZS8xNjUKIDwvY29tbWFuZD4KIDwvY2xpZW50PgogCkBAIC01MSw2ICs1MiwxMiBAQAogR0VUIGh0dHA6Ly93d3cueG4tLTRjYWI2Yy5zZS9wYWdlLzE2NSBIVFRQLzEuMQ0KIEhvc3Q6IHd3dy54bi0tNGNhYjZjLnNlDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQorDQorR0VUIGh0dHA6Ly93d3cueG4tLWdyb2UteG5hLmRlL3BhZ2UvMTY1IEhUVFAvMS4xDQorSG9zdDogd3d3LnhuLS1ncm9lLXhuYS5kZQ0KK0FjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE2NyBiL3Rlc3RzL2RhdGEvdGVzdDE2NwppbmRleCA3NmY5ZTVjLi4wYjE0OTk2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNjcKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTY3CkBAIC02NSw2ICs2NSw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBabTl2T21KaGNnPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMC1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMC1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNCBjLWFyZXMvMS4yLjAgbGliaWRuLzAuNC4zDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9kYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbS8xNjcgSFRUUC8xLjENCiBIb3N0OiBkYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbQ0KQEAgLTcyLDYgKzczLDcgQEAKIEF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iZGlnZXN0IiwgcmVhbG09IndlaXJkb3JlYWxtIiwgbm9uY2U9IjEyMzQ1IiwgdXJpPSIvMTY3IiwgcmVzcG9uc2U9IjEzYzdjMDJhMjUyY2JlMWM0NmQ4NjY5ODk4YTNiZTI2Ig0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGMtYXJlcy8xLjIuMCBsaWJpZG4vMC40LjMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNjggYi90ZXN0cy9kYXRhL3Rlc3QxNjgKaW5kZXggMGY0ZTAyNS4uMjBlMGI2ZCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTY4CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE2OApAQCAtNzgsMTIgKzc4LDE0IEBACiBIb3N0OiBkYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGMtYXJlcy8xLjIuMCBsaWJpZG4vMC40LjMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBHRVQgaHR0cDovL2RhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tLzE2OCBIVFRQLzEuMQ0KIEhvc3Q6IGRhdGEuZnJvbS5zZXJ2ZXIucmVxdWlyaW5nLmRpZ2VzdC5ob2hvaG8uY29tDQogUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJmb28iLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9Ii8xNjgiLCByZXNwb25zZT0iZmI4NjA4ZTAwYWQ5MjM5YTNkZWRiMTRiYzg1NzU5NzYiDQogVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQgYy1hcmVzLzEuMi4wIGxpYmlkbi8wLjQuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY4IEhUVFAvMS4xDQogSG9zdDogZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20NCkBAIC05MSw2ICs5Myw3IEBACiBBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImRpZ2VzdCIsIHJlYWxtPSJyZWFsbXdlaXJkbyIsIG5vbmNlPSIxMjM0NTYiLCB1cmk9Ii8xNjgiLCByZXNwb25zZT0iY2E4N2YyZDc2OGEyMzFlMmQ2MzdhNTU2OThkNWM0MTYiDQogVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC4zDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTY5IGIvdGVzdHMvZGF0YS90ZXN0MTY5CmluZGV4IGJlNWI0YzYuLjczY2E5YmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE2OQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxNjkKQEAgLTEwOCwxOCArMTA4LDIxIEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQogVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBHU1MgbGliaWRuLzAuNC4zDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9kYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbS8xNjkgSFRUUC8xLjENCiBIb3N0OiBkYXRhLmZyb20uc2VydmVyLnJlcXVpcmluZy5kaWdlc3QuaG9ob2hvLmNvbQ0KIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFDZUFKNEFXQUFBQUFBQUFBRDJBQUFBQ0FBSUFQWUFBQUFJQUFnQS9nQUFBQUFBQUFBQUFBQUFCb0tCQUw5TE5XNStua3lIWlJteUZhTC9MSjR4TWpNME1qSXpOR1VDeWhnUTlodzZlV0FUMTNFYkRhMEJBUUFBQUFBQUFBQ0FQdFhlc1owQk1USXpOREl5TXpRQUFBQUFBZ0FFQUVNQVF3QUJBQklBUlFCTUFFa0FVd0JCQUVJQVJRQlVBRWdBQkFBWUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFNQUxBQmxBR3dBYVFCekFHRUFZZ0JsQUhRQWFBQXVBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBQUFBQUFBQUFBQWRHVnpkSFZ6WlhKamRYSnNhRzl6ZEE9PQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20vMTY5IEhUVFAvMS4xDQogSG9zdDogZGF0YS5mcm9tLnNlcnZlci5yZXF1aXJpbmcuZGlnZXN0LmhvaG9oby5jb20NCiBBdXRob3JpemF0aW9uOiBEaWdlc3QgdXNlcm5hbWU9ImRpZ2VzdCIsIHJlYWxtPSJyIGUgYSBsIG0iLCBub25jZT0iYWJjZGVmIiwgdXJpPSIvMTY5IiwgcmVzcG9uc2U9Ijk1ZDQ4NTkxOTg1YTAzYzRiNDljYjk2MmFhN2JkM2U2Ig0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4wLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQgR1NTIGxpYmlkbi8wLjQuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE3MCBiL3Rlc3RzL2RhdGEvdGVzdDE3MAppbmRleCA0OGEyNjNmLi44Y2U3Nzc0IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxNzAKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTcwCkBAIC00MCw2ICs0MCw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQogVXNlci1BZ2VudDogY3VybC83LjEyLjAtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjAtQ1ZTIE9wZW5TU0wvMC45LjZiIGlwdjYgemxpYi8xLjEuNCBsaWJpZG4vMC40LjMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMA0KIA0KIDwvcHJvdG9jb2w+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNzEgYi90ZXN0cy9kYXRhL3Rlc3QxNzEKaW5kZXggM2I5ZjdiYS4uMDllNDhiNyAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTcxCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE3MQpAQCAtNDQsNiArNDQsNyBAQAogR0VUIGh0dHA6Ly96LnguY29tLzE3MSBIVFRQLzEuMQ0KIEhvc3Q6IHoueC5jb20NCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPGZpbGUgbmFtZT0ibG9nL2phcjE3MSIgbW9kZT0idGV4dCI+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxNzkgYi90ZXN0cy9kYXRhL3Rlc3QxNzkKaW5kZXggMWNkNWJhZC4uZjhmNzgxMSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MTc5CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE3OQpAQCAtNDksNiArNDksNyBAQAogR0VUIGh0dHA6Ly9zdXBlcnRyb29wZXIuZmFrZS9jLzE3OSBIVFRQLzEuMQ0KIEhvc3Q6IHN1cGVydHJvb3Blci5mYWtlDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29va2llOiBtb28yPWluZGVlZA0KIA0KIDwvcHJvdG9jb2w+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QxODAwIGIvdGVzdHMvZGF0YS90ZXN0MTgwMAppbmRleCA5NmE2YzE0Li4wYTJiYjFmIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxODAwCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDE4MDAKQEAgLTQ4LDcgKzQ4LDcgQEAKIEFjY2VwdDogKi8qDQogQ29ubmVjdGlvbjogVXBncmFkZSwgSFRUUDItU2V0dGluZ3MNCiBVcGdyYWRlOiAlSDJDVkVSDQotSFRUUDItU2V0dGluZ3M6IEFBTUFBQUJrQUFRQUFQX18NCitIVFRQMi1TZXR0aW5nczogQUFNQUFBQmtBQVJBQUFBQQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE4MDEgYi90ZXN0cy9kYXRhL3Rlc3QxODAxCmluZGV4IDE2ZWUxMmQuLjllMTkwMGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE4MDEKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTgwMQpAQCAtNTgsNyArNTgsNyBAQAogQWNjZXB0OiAqLyoNCiBDb25uZWN0aW9uOiBVcGdyYWRlLCBIVFRQMi1TZXR0aW5ncw0KIFVwZ3JhZGU6ICVIMkNWRVINCi1IVFRQMi1TZXR0aW5nczogQUFNQUFBQmtBQVFBQVBfXw0KK0hUVFAyLVNldHRpbmdzOiBBQU1BQUFCa0FBUkFBQUFBDQogDQogPC9wcm90b2NvbD4KICMgQ1VSTEVfSFRUUDI6IFNlbmQgZmFpbHVyZTogQnJva2VuIHBpcGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDE4MyBiL3Rlc3RzL2RhdGEvdGVzdDE4MwppbmRleCBiNDQ3MTA5Li5mMzRkYzBjIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QxODMKKysrIGIvdGVzdHMvZGF0YS90ZXN0MTgzCkBAIC00MiwxMSArNDIsMTMgQEAKIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4yLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGxpYmlkbi8wLjQuNg0KIEhvc3Q6IGRlYXRoc3Rhci5hbm90aGVyLmdhbGF4eQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vYS5nYWxheHkuZmFyLmZhci5hd2F5LzE4MyBIVFRQLzEuMQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4yLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGxpYmlkbi8wLjQuNgogSG9zdDogYS5nYWxheHkuZmFyLmZhci5hd2F5DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTg0IGIvdGVzdHMvZGF0YS90ZXN0MTg0CmluZGV4IDljYWRjODIuLjhiMDlkZGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE4NAorKysgYi90ZXN0cy9kYXRhL3Rlc3QxODQKQEAgLTYyLDEwICs2MiwxMiBAQAogSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4yLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGxpYmlkbi8wLjQuNg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8veWV0LmFub3RoZXIuaG9zdC8xODQgSFRUUC8xLjENCiBIb3N0OiB5ZXQuYW5vdGhlci5ob3N0DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MTg1IGIvdGVzdHMvZGF0YS90ZXN0MTg1CmluZGV4IGRiZWY2ZTcuLjI5OGRkNDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDE4NQorKysgYi90ZXN0cy9kYXRhL3Rlc3QxODUKQEAgLTYyLDEwICs2MiwxMiBAQAogSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4yLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40IGxpYmlkbi8wLjQuNg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZGVhdGhzdGFyLmFub3RoZXIuZ2FsYXh5L2dvL3dlc3QvMTg1IEhUVFAvMS4xDQogSG9zdDogYW5vdGhlci52aXNpdG9yLnN0YXkuYS53aGlsZS5zdGF5LmZvcmVlZWVlZXZlcg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIwNDUgYi90ZXN0cy9kYXRhL3Rlc3QyMDQ1CmluZGV4IDMxOTBmODAuLjE1NjQ3ZDMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDIwNDUKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjA0NQpAQCAtMTksNyArMTksNyBAQAogdGhhdCBieSByZXBseWluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGJvdGggcHJvdG9jb2xzIGNhbiB1bmRlcnN0YW5kLiBPdXIgRlRQCiBzZXJ2ZXIgYWxsb3dzIGEgY3VzdG9tIHdlbGNvbWUgbWVzc2FnZSwgc28gd2UgdXNlIHRoYXQgZmVhdHVyZSB0byBtYWtlIGFuIEhUVFAKIHJlcGx5IHRoYXQgY29udGFpbnMgYW4gRlRQIHJlcGx5ICh0aGluayBwb2x5Z2xvdCkuIEluIHRoZSBjYXNlIG9mIEZUUCB3ZSBleHBlY3QKLWN1cmwgd2lsbCByZXR1cm4gQ1VSTEVfRlRQX1dFSVJEX1NFUlZFUl9SRVBMWSBzbyB3ZSB0ZXN0IGZvciB0aGF0IHJldHVybiBjb2RlLgorY3VybCB3aWxsIHJldHVybiBDVVJMRV9XRUlSRF9TRVJWRVJfUkVQTFkgc28gd2UgdGVzdCBmb3IgdGhhdCByZXR1cm4gY29kZS4KIC0tPgogPHNlcnZlcmNtZD4KIFJFUExZIHdlbGNvbWUgSFRUUC8xLjEgMjAwIE9LXHJcbkNvbnRlbnQtTGVuZ3RoOiAyMVxyXG5cclxuNTAwIFdlaXJkIEZUUCBSZXBseQpAQCAtNDYsNyArNDYsNyBAQAogIwogIyBWZXJpZnkgZGF0YSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKIDx2ZXJpZnk+Ci0jIENVUkxFX0ZUUF9XRUlSRF9TRVJWRVJfUkVQTFkgaXMgZXJyb3IgY29kZSA4CisjIENVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWSBpcyBlcnJvciBjb2RlIDgKIDxlcnJvcmNvZGU+CiA4CiA8L2Vycm9yY29kZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIwNDcgYi90ZXN0cy9kYXRhL3Rlc3QyMDQ3CmluZGV4IGE4Y2NhMmYuLjQ0MjI5NzggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDIwNDcKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjA0NwpAQCAtNjMsMTAgKzYzLDEyIEBACiBHRVQgaHR0cDovL3huLS00Y2FiNmMuc2UvMjA0NyBIVFRQLzEuMQ0KIEhvc3Q6IHhuLS00Y2FiNmMuc2UNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBHRVQgaHR0cDovL3huLS00Y2FiNmMuc2UvMjA0NzAwMDEgSFRUUC8xLjENCiBIb3N0OiB4bi0tNGNhYjZjLnNlDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MjA0OCBiL3Rlc3RzL2RhdGEvdGVzdDIwNDgKaW5kZXggZWIyYjFkZi4uNzg3ZjU4NCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjA0OAorKysgYi90ZXN0cy9kYXRhL3Rlc3QyMDQ4CkBAIC0yNiw3ICsyNiw3IEBACiBwaW5uZWRwdWJrZXkgbm8tbWF0Y2ggbXVzdCBmYWlsIGV2ZW4gd2hlbiBpbnNlY3VyZQogPC9uYW1lPgogPGNvbW1hbmQ+Ci0tLWluc2VjdXJlIC0tY2FjZXJ0ICVTUkNESVIvY2VydHMvRWRlbEN1cmxSb290LWNhLmNydCAtLXBpbm5lZHB1YmtleSAlU1JDRElSL2NlcnRzL1NlcnZlci1sb2NhbGhvc3Qubm4tc3YucHViLmRlciBodHRwczovL2xvY2FsaG9zdDolSFRUUFNQT1JULzIwMzQKKy0taW5zZWN1cmUgLS1jYWNlcnQgJVNSQ0RJUi9jZXJ0cy9FZGVsQ3VybFJvb3QtY2EuY3J0IC0tcGlubmVkcHVia2V5ICVTUkNESVIvY2VydHMvU2VydmVyLWxvY2FsaG9zdC5ubi1zdi5wdWIuZGVyIGh0dHBzOi8vbG9jYWxob3N0OiVIVFRQU1BPUlQvMjA0OAogPC9jb21tYW5kPgogPC9jbGllbnQ+CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIwNTAgYi90ZXN0cy9kYXRhL3Rlc3QyMDUwCmluZGV4IDgwNWU4NzIuLjgxZWY3OWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDIwNTAKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjA1MApAQCAtNjQsNiArNjQsNyBAQAogPHByb3h5PgogQ09OTkVDVCBjb25uZWN0LmV4YW1wbGUuY29tLjIwNTA6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogY29ubmVjdC5leGFtcGxlLmNvbS4yMDUwOiVIVFRQUE9SVA0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3h5PgogPHByb3RvY29sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MjA2IGIvdGVzdHMvZGF0YS90ZXN0MjA2CmluZGV4IGVmYmM1NmUuLjVmMGM4ODUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDIwNgorKysgYi90ZXN0cy9kYXRhL3Rlc3QyMDYKQEAgLTkwLDEwICs5MCwxMiBAQAogPHByb3RvY29sPgogQ09OTkVDVCB0ZXN0LnJlbW90ZS5oYXh4LnNlLjIwNjo4OTkwIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuaGF4eC5zZS4yMDY6ODk5MA0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBDT05ORUNUIHRlc3QucmVtb3RlLmhheHguc2UuMjA2Ojg5OTAgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5oYXh4LnNlLjIwNjo4OTkwDQogUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJzaWxseSIsIHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSIsIHVyaT0idGVzdC5yZW1vdGUuaGF4eC5zZS4yMDY6ODk5MCIsIHJlc3BvbnNlPSIwMDNlMzZkZWNiNGRiZjYzNjZiM2VjYjliODdjMjRlYyINCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIC9wYXRoLzIwNjAwMDIgSFRUUC8xLjENCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIwOCBiL3Rlc3RzL2RhdGEvdGVzdDIwOAppbmRleCBmYjRjMGVhLi5hZmIyNTY2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyMDgKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjA4CkBAIC01Nyw2ICs1Nyw3IEBACiBIb3N0OiBob3N0LmNvbToyMQ0KIEF1dGhvcml6YXRpb246IEJhc2ljIFpHRnVhV1ZzT20xNWMyVmpjbVYwDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDc4DQogRXhwZWN0OiAxMDAtY29udGludWUNCiANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyMDkgYi90ZXN0cy9kYXRhL3Rlc3QyMDkKaW5kZXggZjg2ODU0MS4uOTYxZWJhMSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjA5CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDIwOQpAQCAtMTA0LDEwICsxMDQsMTIgQEAKIENPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMjA5OiVIVFRQUE9SVCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjIwOTolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIENPTk5FQ1QgdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMjA5OiVIVFRQUE9SVCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjIwOTolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIC9wYXRoLzIwOTAwMDIgSFRUUC8xLjENCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIxMyBiL3Rlc3RzL2RhdGEvdGVzdDIxMwppbmRleCA3Y2VlZDk4Li5lZGJiNmE2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyMTMKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjEzCkBAIC0xMDQsMTAgKzEwNCwxMiBAQAogQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yMTM6JUhUVFBQT1JUIEhUVFAvMS4wDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMjEzOiVIVFRQUE9SVA0KIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogQ09OTkVDVCB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yMTM6JUhUVFBQT1JUIEhUVFAvMS4wDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20uMjEzOiVIVFRQUE9SVA0KIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFDZUFKNEFXQUFBQUFBQUFBRDJBQUFBQ0FBSUFQWUFBQUFJQUFnQS9nQUFBQUFBQUFBQUFBQUFCb0tCQUw5TE5XNStua3lIWlJteUZhTC9MSjR4TWpNME1qSXpOR1VDeWhnUTlodzZlV0FUMTNFYkRhMEJBUUFBQUFBQUFBQ0FQdFhlc1owQk1USXpOREl5TXpRQUFBQUFBZ0FFQUVNQVF3QUJBQklBUlFCTUFFa0FVd0JCQUVJQVJRQlVBRWdBQkFBWUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFNQUxBQmxBR3dBYVFCekFHRUFZZ0JsQUhRQWFBQXVBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBQUFBQUFBQUFBQWRHVnpkSFZ6WlhKamRYSnNhRzl6ZEE9PQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBQT1NUIC9wYXRoLzIxMzAwMDIgSFRUUC8xLjENCiBVc2VyLUFnZW50OiBjdXJsLzcuMTIuMy1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTIuMy1DVlMgT3BlblNTTC8wLjkuNmIgemxpYi8xLjEuNA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIxNyBiL3Rlc3RzL2RhdGEvdGVzdDIxNwppbmRleCAwZTBjMGFkLi5mMTBkZjU2IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyMTcKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjE3CkBAIC00NCw2ICs0NCw3IEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjIxNzolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yMTc6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiAjIENVUkxFX1JFQ1ZfRVJST1IKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIxOSBiL3Rlc3RzL2RhdGEvdGVzdDIxOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTNmMGYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjE5CkBAIC0wLDAgKzEsMzcgQEAKKzx0ZXN0Y2FzZT4KKzxpbmZvPgorPGtleXdvcmRzPgorcHJveHkKKzwva2V5d29yZHM+Cis8L2luZm8+CisKKyMKKyMgU2VydmVyLXNpZGUKKzxyZXBseT4KKzwvcmVwbHk+CisKKyMKKyMgQ2xpZW50LXNpZGUKKzxjbGllbnQ+Cis8c2VydmVyPgorbm9uZQorPC9zZXJ2ZXI+Cis8ZmVhdHVyZXM+CitodHRwCis8L2ZlYXR1cmVzPgorIDxuYW1lPgordHJ5IHVzaW5nIHByb3h5IHdpdGggdW5zdXBwb3J0ZWQgc2NoZW1lCisgPC9uYW1lPgorIDxjb21tYW5kPgorLXggZm9vOi8vJUhPU1RJUDolSFRUUFBPUlQvMjE5IGh0dHA6Ly8lSE9TVElQOiVIVFRQUE9SVC8yMTkKKzwvY29tbWFuZD4KKzwvY2xpZW50PgorCisjCisjIFZlcmlmeSBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiAic2hvdCIKKzx2ZXJpZnk+Cis8ZXJyb3Jjb2RlPgorNworPC9lcnJvcmNvZGU+Cis8L3ZlcmlmeT4KKzwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyMzMgYi90ZXN0cy9kYXRhL3Rlc3QyMzMKaW5kZXggOTk2ODU1ZC4uYjYzMWU1MiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjMzCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDIzMwpAQCAtODEsMTEgKzgxLDEzIEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQogQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vZ290by5zZWNvbmQuaG9zdC5ub3cvMjMzMDAwMiBIVFRQLzEuMQ0KIEhvc3Q6IGdvdG8uc2Vjb25kLmhvc3Qubm93DQogUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgZEdWemRHbHVaenAwYUdseg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIzNCBiL3Rlc3RzL2RhdGEvdGVzdDIzNAppbmRleCBmN2RhMmI5Li4xZDJlMDViIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyMzQKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjM0CkBAIC04MywxMiArODMsMTQgQEAKIFByb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIGRHVnpkR2x1WnpwMGFHbHoNCiBBdXRob3JpemF0aW9uOiBCYXNpYyBhV0Z0T20xNWMyVnNaZz09DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9nb3RvLnNlY29uZC5ob3N0Lm5vdy8yMzQwMDAyIEhUVFAvMS4xDQogSG9zdDogZ290by5zZWNvbmQuaG9zdC5ub3cNCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBkR1Z6ZEdsdVp6cDBhR2x6DQogQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDIzOSBiL3Rlc3RzL2RhdGEvdGVzdDIzOQppbmRleCAyNzVjODFiLi42YjkyZjA3IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyMzkKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjM5CkBAIC04Myw2ICs4Myw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiAwDQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCkBAIC05MSw2ICs5Miw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDYNCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI0MyBiL3Rlc3RzL2RhdGEvdGVzdDI0MwppbmRleCBiYzA5Mjg2Li4zNDk2MDU1IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyNDMKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjQzCkBAIC0xMDMsNiArMTAzLDcgQEAKIEhvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiA2DQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCkBAIC0xMTEsNiArMTEyLDcgQEAKIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFCQUFBQUJvSUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDANCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KQEAgLTExOSw2ICsxMjEsNyBAQAogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUNlQUo0QVdBQUFBQUFBQUFEMkFBQUFDQUFJQVBZQUFBQUlBQWdBL2dBQUFBQUFBQUFBQUFBQUJvS0JBTDlMTlc1K25reUhaUm15RmFML0xKNHhNak0wTWpJek5HVUN5aGdROWh3NmVXQVQxM0ViRGEwQkFRQUFBQUFBQUFDQVB0WGVzWjBCTVRJek5ESXlNelFBQUFBQUFnQUVBRU1BUXdBQkFCSUFSUUJNQUVrQVV3QkJBRUlBUlFCVUFFZ0FCQUFZQUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQU1BTEFCbEFHd0FhUUJ6QUdFQVlnQmxBSFFBYUFBdUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFBQUFBQUFBQUFBZEdWemRIVnpaWEpqZFhKc2FHOXpkQT09DQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiA2DQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyNTYgYi90ZXN0cy9kYXRhL3Rlc3QyNTYKaW5kZXggMGFjZDlkYi4uMmI5NmVjZiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjU2CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDI1NgpAQCAtNTEsNiArNTEsNyBAQAogUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgWkdGdWFXVnNPbk4wWlc1aVpYSm4NCiBSYW5nZTogYnl0ZXM9NzgtDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MjU3IGIvdGVzdHMvZGF0YS90ZXN0MjU3CmluZGV4IDQ1ZGNiZDUuLjUwMjQ0OGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDI1NworKysgYi90ZXN0cy9kYXRhL3Rlc3QyNTcKQEAgLTkyLDE3ICs5MiwyMCBAQAogQXV0aG9yaXphdGlvbjogQmFzaWMgZFhObGNqRTZjR0Z6YzNka01RPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTQuMC1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTQuMC1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly9hbm90aGVyb25lLmNvbS8yNTcwMDAyIEhUVFAvMS4xDQogSG9zdDogYW5vdGhlcm9uZS5jb20NCiBBdXRob3JpemF0aW9uOiBCYXNpYyBkWE5sY2pJNmNHRnpjM2RrTWc9PQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xNC4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xNC4wLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMKIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vYXRoaXJkLmNvbS8yNTcwMDAzIEhUVFAvMS4xDQogSG9zdDogYXRoaXJkLmNvbQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xNC4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xNC4wLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMKIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI1OCBiL3Rlc3RzL2RhdGEvdGVzdDI1OAppbmRleCA4MmM2NzMxLi45OGMzNDAxIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyNTgKKysrIGIvdGVzdHMvZGF0YS90ZXN0MjU4CkBAIC0yMCw2ICsyMCw3IEBACiBEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAogU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCiBQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIKK1Byb3h5LUNvbm5lY3Rpb246IGNsb3NlCiBDb250ZW50LUxlbmd0aDogMAogCiA8L2RhdGE+CkBAIC0zNiw2ICszNyw3IEBACiBEYXRlOiBUaHUsIDA5IE5vdiAyMDEwIDE0OjQ5OjAwIEdNVAogU2VydmVyOiB0ZXN0LXNlcnZlci9mYWtlCiBQcm94eS1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIKK1Byb3h5LUNvbm5lY3Rpb246IGNsb3NlCiBDb250ZW50LUxlbmd0aDogMAogCiBIVFRQLzEuMSAyMDAgQSBPSw0KQEAgLTgxLDYgKzgzLDcgQEAKIEhvc3Q6IHJlbW90ZWhvc3Q6NTQzMjENCiBVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiA0MDkNCiBDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCiANCkBAIC0xMDYsNiArMTA5LDcgQEAKIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC40IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQogUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJ1dXVzZXIiLCByZWFsbT0ibWFueSBzZWNyZXRzIiwgbm9uY2U9IjkxMSIsIHVyaT0iL3dlL3dhbnQvMjU4IiwgcmVzcG9uc2U9IjI1MDE2NTRjYTM5MWYwYjVjOGMxMmExZGE3N2UzNGNkIg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiA0MDkNCiBDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCiANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyNTkgYi90ZXN0cy9kYXRhL3Rlc3QyNTkKaW5kZXggNzViMWY1My4uOTUzMjg4NyAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjU5CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDI1OQpAQCAtNzksNiArNzksNyBAQAogSG9zdDogcmVtb3RlaG9zdDo1NDMyMQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC40IChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjQgT3BlblNTTC8wLjkuN2EgaXB2NiB6bGliLzEuMS4zDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDQwOQ0KIEV4cGVjdDogMTAwLWNvbnRpbnVlDQogQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tN2M2MzNkNWMyN2NlDQpAQCAtMTA1LDYgKzEwNiw3IEBACiBVc2VyLUFnZW50OiBjdXJsLzcuMTAuNCAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMC40IE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KIFByb3h5LUF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0idXV1c2VyIiwgcmVhbG09Im1hbnkgc2VjcmV0cyIsIG5vbmNlPSI5MTEiLCB1cmk9Ii93ZS93YW50LzI1OSIsIHJlc3BvbnNlPSJiNDc5OTk0ZDEzZTYwZjNhYTE5MmE2N2M1ODkyZGRjNSINCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogNDA5DQogRXhwZWN0OiAxMDAtY29udGludWUNCiBDb250ZW50LVR5cGU6IG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03YzYzM2Q1YzI3Y2UNCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyNjMgYi90ZXN0cy9kYXRhL3Rlc3QyNjMKaW5kZXggZGYwYmEwMy4uNTA4ODE0MSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjYzCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDI2MwpAQCAtNDcsNiArNDcsNyBAQAogR0VUIGh0dHA6Ly92ZXJ5dmVyeXJlbW90ZXNpdGUuY29tLzI2MyBIVFRQLzEuMQ0KIEhvc3Q6IHZlcnl2ZXJ5cmVtb3Rlc2l0ZS5jb20NCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3QyNjQgYi90ZXN0cy9kYXRhL3Rlc3QyNjQKaW5kZXggMTE3NGNhNS4uZjRkMTcxYSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0MjY0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDI2NApAQCAtNDIsNiArNDIsNyBAQAogSG9zdDogd2Uud2FudC50aGF0LnNpdGUuY29tDQogUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgWm1GclpUcDFjMlZ5DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0MjY1IGIvdGVzdHMvZGF0YS90ZXN0MjY1CmluZGV4IDc5YWIxODMuLjFhMTYyYjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDI2NQorKysgYi90ZXN0cy9kYXRhL3Rlc3QyNjUKQEAgLTEwNywxMCArMTA3LDEyIEBACiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjI2NTolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yNjU6JUhUVFBQT1JUDQogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjI2NTolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yNjU6JUhUVFBQT1JUDQogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQURBQUFBR0FBWUFFQUFBQUNlQUo0QVdBQUFBQUFBQUFEMkFBQUFDQUFJQVBZQUFBQUlBQWdBL2dBQUFBQUFBQUFBQUFBQUJvS0JBTDlMTlc1K25reUhaUm15RmFML0xKNHhNak0wTWpJek5HVUN5aGdROWh3NmVXQVQxM0ViRGEwQkFRQUFBQUFBQUFDQVB0WGVzWjBCTVRJek5ESXlNelFBQUFBQUFnQUVBRU1BUXdBQkFCSUFSUUJNQUVrQVV3QkJBRUlBUlFCVUFFZ0FCQUFZQUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQU1BTEFCbEFHd0FhUUJ6QUdFQVlnQmxBSFFBYUFBdUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFBQUFBQUFBQUFBZEdWemRIVnpaWEpqZFhKc2FHOXpkQT09DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIFBPU1QgL3BhdGgvMjY1MDAwMiBIVFRQLzEuMQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMi4zLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMi4zLUNWUyBPcGVuU1NMLzAuOS42YiB6bGliLzEuMS40DQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0Mjc1IGIvdGVzdHMvZGF0YS90ZXN0Mjc1CmluZGV4IDYwMDA0NTQuLjgwMmM0YmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDI3NQorKysgYi90ZXN0cy9kYXRhL3Rlc3QyNzUKQEAgLTY5LDYgKzY5LDcgQEAKIEhvc3Q6IHJlbW90ZXNpdGUuY29tLjI3NTolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBlVzkxWVhKbE9ubHZkWEp6Wld4bQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm94eT4KIDxwcm90b2NvbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI3OCBiL3Rlc3RzL2RhdGEvdGVzdDI3OAppbmRleCBlNmYxZWY3Li4zMTEyMjY0IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyNzgKKysrIGIvdGVzdHMvZGF0YS90ZXN0Mjc4CkBAIC00Miw2ICs0Miw3IEBACiBIb3N0OiB3ZS53YW50LnRoYXQuc2l0ZS5jb20NCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBabUZyWlRvPQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI3OSBiL3Rlc3RzL2RhdGEvdGVzdDI3OQppbmRleCA1MDA1ZGFhLi40N2Y4YjY4IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyNzkKKysrIGIvdGVzdHMvZGF0YS90ZXN0Mjc5CkBAIC00Myw2ICs0Myw3IEBACiBIb3N0OiB3ZS53YW50LnRoYXQuc2l0ZS5jb20NCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBabUZyWlRvPQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI4NyBiL3Rlc3RzL2RhdGEvdGVzdDI4NwppbmRleCA1MjY0NDZmLi42NzcyZTIyIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyODcKKysrIGIvdGVzdHMvZGF0YS90ZXN0Mjg3CkBAIC0zNyw2ICszNyw3IEBACiA8cHJvdG9jb2w+CiBDT05ORUNUIHRlc3QucmVtb3RlLmV4YW1wbGUuY29tLjI4NzolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS4yODc6JUhUVFBQT1JUDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIFVzZXItQWdlbnQ6IGxvb3Nlci8yMDA3DQogDQogPC9wcm90b2NvbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDI5OSBiL3Rlc3RzL2RhdGEvdGVzdDI5OQppbmRleCBhN2I3NzU1Li40ZGFhZWE0IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3QyOTkKKysrIGIvdGVzdHMvZGF0YS90ZXN0Mjk5CkBAIC00Niw2ICs0Niw3IEBACiBIb3N0OiBob3N0LmNvbToyMQ0KIEF1dGhvcml6YXRpb246IEJhc2ljIGJXbGphR0ZzT21GNVltRmlkSFU9DQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NDMgYi90ZXN0cy9kYXRhL3Rlc3Q0MwppbmRleCBkYzBkZDVmLi5lNTUzNWJiIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q0MworKysgYi90ZXN0cy9kYXRhL3Rlc3Q0MwpAQCAtNjcsMTAgKzY3LDEyIEBACiBHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUL3dhbnQvNDMgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2FudC9kYXRhLzQzMDAwMi50eHQ/Y29vbHNpdGU9eWVzIEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q1IGIvdGVzdHMvZGF0YS90ZXN0NQppbmRleCAxMzMxNDU3Li5iNjJmMWExIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDUKQEAgLTQzLDYgKzQzLDcgQEAKIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvd2Uvd2FudC90aGF0L3BhZ2UvNSBIVFRQLzEuMQ0KIEhvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NTAzIGIvdGVzdHMvZGF0YS90ZXN0NTAzCmluZGV4IGYwMmJhYzYuLmU4ZGMyMWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDUwMworKysgYi90ZXN0cy9kYXRhL3Rlc3Q1MDMKQEAgLTcyLDYgKzcyLDcgQEAKIENPTk5FQ1QgbWFjaGluZS41MDM6JUhUVFBQT1JUIEhUVFAvMS4xDQogSG9zdDogbWFjaGluZS41MDM6JUhUVFBQT1JUDQogUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgZEdWemREcHBibWM9DQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJveHk+CiA8cHJvdG9jb2w+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q1MDYgYi90ZXN0cy9kYXRhL3Rlc3Q1MDYKaW5kZXggZjE5MzlmZS4uOTZlNjkwYiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NTA2CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDUwNgpAQCAtNDEsMTAgKzQxLDEyIEBACiBGdW5ueS1oZWFkOiB5ZXN5ZXMKIFNldC1Db29raWU6IHRlc3Q0PW92ZXJ3cml0dGVuNDsgZG9tYWluPWhvc3QuZm9vLmNvbTsgZXhwaXJlcz1TYXQgTWF5IDUgR01UIDExOjU2OjI3IDIwMzUKIFNldC1Db29raWU6IHRlc3QxPW92ZXJ3cml0dGVuMTsgZG9tYWluPWZvby5jb207IGV4cGlyZXM9VGh1IE1hciAzIEdNVCAxMTo1NjoyNyAyMDMzCitTZXQtQ29va2llOiB0ZXN0Nj1zaXg7IGRvbWFpbj0ud3d3Lmhvc3QuZm9vLmNvbTsgZXhwaXJlcz1UaHUgTWFyIDMgR01UIDExOjU2OjI3IDIwMzMKK1NldC1Db29raWU6IHRlc3Q2PXNpeF9tb3JlOyBleHBpcmVzPVRodSBNYXIgMyBHTVQgMTE6NTY6MjcgMjAzMwogQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKLUNvbnRlbnQtTGVuZ3RoOiAzMgorQ29udGVudC1MZW5ndGg6IDczCiAKLXJ1biAzOiBvdmVyd3JpdGUgY29va2llIDEgYW5kIDQKK3J1biAzOiBvdmVyd3JpdGUgY29va2llIDEgYW5kIDQsIHNldCBjb29raWUgNiB3aXRoIGFuZCB3aXRob3V0IHRhaWxtYXRjaAogPC9kYXRhMz4KIDwvcmVwbHk+CiAKQEAgLTE2NiwyNCArMTY4LDI4IEBACiB1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDYxCiBsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDYyCiB1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDYzCi1ydW4gMzogb3ZlcndyaXRlIGNvb2tpZSAxIGFuZCA0Ci1sb2NrOiAgIGRucyAgICBbUGlncyBpbiBzcGFjZV06IDY0Ci11bmxvY2s6IGRucyAgICBbUGlncyBpbiBzcGFjZV06IDY1Ci1DTEVBTlVQCitsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDY0Cit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDY1CiBsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDY2CiB1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDY3Ci1sb2NrOiAgIHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDY4Ci11bmxvY2s6IHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDY5CitydW4gMzogb3ZlcndyaXRlIGNvb2tpZSAxIGFuZCA0LCBzZXQgY29va2llIDYgd2l0aCBhbmQgd2l0aG91dCB0YWlsbWF0Y2gKK2xvY2s6ICAgZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNjgKK3VubG9jazogZG5zICAgIFtQaWdzIGluIHNwYWNlXTogNjkKK0NMRUFOVVAKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNzAKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNzEKK2xvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzIKK3VubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzMKIENVUkxPUFRfU0hBUkUKLWxvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzAKLXVubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzEKK2xvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzQKK3VubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzUKIENVUkxPUFRfQ09PS0lFTElTVCBBTEwKLWxvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNzIKLXVubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNzMKK2xvY2s6ICAgY29va2llIFtQaWdzIGluIHNwYWNlXTogNzYKK3VubG9jazogY29va2llIFtQaWdzIGluIHNwYWNlXTogNzcKIENVUkxPUFRfQ09PS0lFSkFSCiBDVVJMT1BUX0NPT0tJRUxJU1QgUkVMT0FECi1sb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc0Ci11bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc1Citsb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc4Cit1bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc5CiBsb2FkZWQgY29va2llczoKIC0tLS0tLS0tLS0tLS0tLS0tCiAgIC5ob3N0LmZvby5jb20JVFJVRQkvCUZBTFNFCTE4OTYyNjM3ODcJaW5qZWN0ZWQJeWVzCkBAIC0xOTIsMTkgKzE5OCwyMSBAQAogICAuZm9vLmNvbQlUUlVFCS8JRkFMU0UJMTg5NjI2Mzc4Nwl0ZXN0Mwl0aHJlZQogICAuaG9zdC5mb28uY29tCVRSVUUJLwlGQUxTRQkyMDYxOTc4OTg3CXRlc3Q0CW92ZXJ3cml0dGVuNAogICAuaG9zdC5mb28uY29tCVRSVUUJLwlGQUxTRQkxODk2MjYzNzg3CXRlc3Q1CWZpdmUKKyAgLnd3dy5ob3N0LmZvby5jb20JVFJVRQkvCUZBTFNFCTE5OTM0NjM3ODcJdGVzdDYJc2l4CisgIHd3dy5ob3N0LmZvby5jb20JRkFMU0UJLwlGQUxTRQkxOTkzNDYzNzg3CXRlc3Q2CXNpeF9tb3JlCiAtLS0tLS0tLS0tLS0tLS0tLQogdHJ5IFNIQVJFX0NMRUFOVVAuLi4KLWxvY2s6ICAgc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzYKLXVubG9jazogc2hhcmUgIFtQaWdzIGluIHNwYWNlXTogNzcKLVNIQVJFX0NMRUFOVVAgZmFpbGVkLCBjb3JyZWN0Ci1DTEVBTlVQCi1sb2NrOiAgIGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc4Ci11bmxvY2s6IGNvb2tpZSBbUGlncyBpbiBzcGFjZV06IDc5CiBsb2NrOiAgIHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDgwCiB1bmxvY2s6IHNoYXJlICBbUGlncyBpbiBzcGFjZV06IDgxCitTSEFSRV9DTEVBTlVQIGZhaWxlZCwgY29ycmVjdAorQ0xFQU5VUAorbG9jazogICBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA4MgordW5sb2NrOiBjb29raWUgW1BpZ3MgaW4gc3BhY2VdOiA4MworbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4NAordW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4NQogU0hBUkVfQ0xFQU5VUAotbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4MgotdW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4MworbG9jazogICBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4NgordW5sb2NrOiBzaGFyZSAgW1BpZ3MgaW4gc3BhY2VdOiA4NwogR0xPQkFMX0NMRUFOVVAKIDwvc3Rkb3V0PgogPHN0ZGVycj4KQEAgLTIyMSw2ICsyMjksOCBAQAogLmZvby5jb20JVFJVRQkvCUZBTFNFCTE4OTYyNjM3ODcJdGVzdDMJdGhyZWUKIC5ob3N0LmZvby5jb20JVFJVRQkvCUZBTFNFCTIwNjE5Nzg5ODcJdGVzdDQJb3ZlcndyaXR0ZW40CiAuaG9zdC5mb28uY29tCVRSVUUJLwlGQUxTRQkxODk2MjYzNzg3CXRlc3Q1CWZpdmUKKy53d3cuaG9zdC5mb28uY29tCVRSVUUJLwlGQUxTRQkxOTkzNDYzNzg3CXRlc3Q2CXNpeAord3d3Lmhvc3QuZm9vLmNvbQlGQUxTRQkvCUZBTFNFCTE5OTM0NjM3ODcJdGVzdDYJc2l4X21vcmUKIDwvZmlsZT4KIDwvdmVyaWZ5PgogPC90ZXN0Y2FzZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDUxNyBiL3Rlc3RzL2RhdGEvdGVzdDUxNwppbmRleCBjODFhNDVlLi41MTM2MzRmIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1MTcKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTE3CkBAIC0xMTYsNiArMTE2LDEyIEBACiA4MTogMjAxMTEzMjMgMTI6MzQ6NTYgPT4gLTEKIDgyOiAyMDExMDYyMyAxMjozNDo3OSA9PiAtMQogODM6IFdlZCwgMzEgRGVjIDIwMDggMjM6NTk6NjAgR01UID0+IDEyMzA3NjgwMDAKKzg0OiAyMDExMDYyMyAxMjozID0+IDEzMDg4MzA1ODAKKzg1OiAyMDExMDYyMyAxOjMgPT4gMTMwODc5MDk4MAorODY6IDIwMTEwNjIzIDE6MzAgPT4gMTMwODc5MjYwMAorODc6IDIwMTEwNjIzIDEyOjEyOjMgPT4gMTMwODgzMTEyMworODg6IDIwMTEwNjIzIDAxOjEyOjMgPT4gMTMwODc5MTUyMworODk6IDIwMTEwNjIzIDAxOjk5OjMwID0+IC0xCiA8L3N0ZG91dD4KIAogIyBUaGlzIHRlc3QgY2FzZSBwcmV2aW91c2x5IHRlc3RlZCBhbiBvdmVyZmxvdyBjYXNlICgiMjA5NCBOb3YgNiA9PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NTIzIGIvdGVzdHMvZGF0YS90ZXN0NTIzCmluZGV4IGQwMjFhZTMuLjlhYmUwZWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDUyMworKysgYi90ZXN0cy9kYXRhL3Rlc3Q1MjMKQEAgLTU0LDYgKzU0LDcgQEAKIEhvc3Q6IHd3dy5leGFtcGxlLmNvbToxOTk5OQ0KIEF1dGhvcml6YXRpb246IEJhc2ljIGVIaDRPbmw1ZVE9PQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8c3Rkb3V0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NTQwIGIvdGVzdHMvZGF0YS90ZXN0NTQwCmluZGV4IDE5YTEzZjEuLjhkZWNhZWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDU0MAorKysgYi90ZXN0cy9kYXRhL3Rlc3Q1NDAKQEAgLTc4LDE2ICs3OCwxOSBAQAogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU0MCBIVFRQLzEuMQ0KIEhvc3Q6IGN1c3RvbS5zZXQuaG9zdC5uYW1lDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU0MCBIVFRQLzEuMQ0KIEhvc3Q6IGN1c3RvbS5zZXQuaG9zdC5uYW1lDQogUHJveHktQXV0aG9yaXphdGlvbjogRGlnZXN0IHVzZXJuYW1lPSJzaWxseSIsIHJlYWxtPSJ3ZWlyZG9yZWFsbSIsIG5vbmNlPSIxMjM0NSIsIHVyaT0iL3BhdGgvNTQwIiwgcmVzcG9uc2U9ImNhNTA3ZGNmMTg5MTk2YjZhNTM3NGQzMjMzMDQyMjYxIg0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20vcGF0aC81NDAgSFRUUC8xLjENCiBIb3N0OiBjdXN0b20uc2V0Lmhvc3QubmFtZQ0KIFByb3h5LUF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0ic2lsbHkiLCByZWFsbT0id2VpcmRvcmVhbG0iLCBub25jZT0iMTIzNDUiLCB1cmk9Ii9wYXRoLzU0MCIsIHJlc3BvbnNlPSJjYTUwN2RjZjE4OTE5NmI2YTUzNzRkMzIzMzA0MjI2MSINCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q1NDcgYi90ZXN0cy9kYXRhL3Rlc3Q1NDcKaW5kZXggN2NmM2U5MS4uY2VlMjJjNiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NTQ3CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDU0NwpAQCAtMTA2LDYgKzEwNiw3IEBACiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMzYNCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KQEAgLTExNSw2ICsxMTYsNyBAQAogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMA0KIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQogDQpAQCAtMTIzLDYgKzEyNSw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDM2DQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q1NDggYi90ZXN0cy9kYXRhL3Rlc3Q1NDgKaW5kZXggZTlkMjI2Mi4uMzRjZjVlMiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NTQ4CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDU0OApAQCAtMTA2LDYgKzEwNiw3IEBACiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMzYNCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KQEAgLTExNSw2ICsxMTYsNyBAQAogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMA0KIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQogDQpAQCAtMTIzLDYgKzEyNSw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUNBQUlBUFlBQUFBSUFBZ0EvZ0FBQUFBQUFBQUFBQUFBQm9LQkFMOUxOVzUrbmt5SFpSbXlGYUwvTEo0eE1qTTBNakl6TkdVQ3loZ1E5aHc2ZVdBVDEzRWJEYTBCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFkR1Z6ZEhWelpYSmpkWEpzYUc5emRBPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDM2DQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q1NDkgYi90ZXN0cy9kYXRhL3Rlc3Q1NDkKaW5kZXggNTk5MjVjZS4uYTI0OGVkYiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NTQ5CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDU0OQpAQCAtNTUsNiArNTUsNyBAQAogR0VUIGZ0cDovL3d3dy5leGFtcGxlLmNvbS9tb28vNTQ5O3R5cGU9aSBIVFRQLzEuMQ0KIEhvc3Q6IHd3dy5leGFtcGxlLmNvbToyMQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8c3Rkb3V0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NTUwIGIvdGVzdHMvZGF0YS90ZXN0NTUwCmluZGV4IDlhNzE3ZWUuLmE2MDlhYTIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDU1MAorKysgYi90ZXN0cy9kYXRhL3Rlc3Q1NTAKQEAgLTU1LDYgKzU1LDcgQEAKIEdFVCBmdHA6Ly93d3cuZXhhbXBsZS5jb20vbW9vLzU1MDt0eXBlPWEgSFRUUC8xLjENCiBIb3N0OiB3d3cuZXhhbXBsZS5jb206MjENCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPHN0ZG91dD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU1MSBiL3Rlc3RzL2RhdGEvdGVzdDU1MQppbmRleCA2ZGQwMTMzLi5lZDZhZWUyIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1NTEKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTUxCkBAIC04MSw2ICs4MSw3IEBACiBQT1NUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU1MSBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogQ29udGVudC1MZW5ndGg6IDM2DQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCkBAIC04OSw2ICs5MCw3IEBACiBIb3N0OiB0ZXN0LnJlbW90ZS5leGFtcGxlLmNvbQ0KIFByb3h5LUF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iczFsbHkiLCByZWFsbT0ic29tZXRoaW5nIGZ1biB0byByZWFkIiwgbm9uY2U9IkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLCB1cmk9Ii9wYXRoLzU1MSIsIHJlc3BvbnNlPSIzMzI1MjQwNzI2ZmJkYWYxZTYxZjNhMGRkNDBiOTMwYyINCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMzYNCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU1MiBiL3Rlc3RzL2RhdGEvdGVzdDU1MgppbmRleCBjMjBlMjA0Li5iNDRjYTM0IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1NTIKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU1NSBiL3Rlc3RzL2RhdGEvdGVzdDU1NQppbmRleCA2YzA5ZTNjLi4wZjNiYjA3IDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1NTUKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTU1CkBAIC0xMTUsNiArMTE1LDcgQEAKIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiAzNg0KIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQogDQpAQCAtMTI0LDYgKzEyNSw3IEBACiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFCb0lJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9DQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIENvbnRlbnQtTGVuZ3RoOiAwDQogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQNCiANCkBAIC0xMzIsNiArMTM0LDcgQEAKIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFDZUFKNEFXQUFBQUFBQUFBRDJBQUFBQ0FBSUFQWUFBQUFJQUFnQS9nQUFBQUFBQUFBQUFBQUFCb0tCQUw5TE5XNStua3lIWlJteUZhTC9MSjR4TWpNME1qSXpOR1VDeWhnUTlodzZlV0FUMTNFYkRhMEJBUUFBQUFBQUFBQ0FQdFhlc1owQk1USXpOREl5TXpRQUFBQUFBZ0FFQUVNQVF3QUJBQklBUlFCTUFFa0FVd0JCQUVJQVJRQlVBRWdBQkFBWUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFNQUxBQmxBR3dBYVFCekFHRUFZZ0JsQUhRQWFBQXVBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBQUFBQUFBQUFBQWRHVnpkSFZ6WlhKamRYSnNhRzl6ZEE9PQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiBDb250ZW50LUxlbmd0aDogMzYNCiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZA0KIA0KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU1OCBiL3Rlc3RzL2RhdGEvdGVzdDU1OAppbmRleCBhMWFjN2Q0Li4yNzQ1N2ZmIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1NTgKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTU4CkBAIC00MSw4ICs0MSw4IEBACiBNRU0gbGliNTU4LmM6IG1hbGxvYygpCiBNRU0gbGliNTU4LmM6IGZyZWUoKQogTUVNIGVzY2FwZS5jOiBtYWxsb2MoKQotTUVNIGVzY2FwZS5jOiByZWFsbG9jKCkKLU1FTSBlc2NhcGUuYzogcmVhbGxvYygpCitNRU0gc3RyZHVwLmM6IHJlYWxsb2MoKQorTUVNIHN0cmR1cC5jOiByZWFsbG9jKCkKIE1FTSBlc2NhcGUuYzogZnJlZSgpCiA8L2ZpbGU+CiA8c3RyaXBmaWxlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0NTYxIGIvdGVzdHMvZGF0YS90ZXN0NTYxCmluZGV4IDkwNWU3NTYuLmE2MTg4ZWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDU2MQorKysgYi90ZXN0cy9kYXRhL3Rlc3Q1NjEKQEAgLTU2LDYgKzU2LDcgQEAKIEdFVCBmdHA6Ly93d3cuZXhhbXBsZS5jb20vbW9vLzU2MTt0eXBlPWkgSFRUUC8xLjENCiBIb3N0OiB3d3cuZXhhbXBsZS5jb206MjENCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPHN0ZG91dD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU2MyBiL3Rlc3RzL2RhdGEvdGVzdDU2MwppbmRleCBlNGMwMGY1Li43ODUxNTIzIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1NjMKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTYzCkBAIC01MCw2ICs1MCw3IEBACiBHRVQgRlRQOi8vJUhPU1RJUDolRlRQUE9SVC81NjM7dHlwZT1BIEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolRlRQUE9SVA0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDU5MCBiL3Rlc3RzL2RhdGEvdGVzdDU5MAppbmRleCAzMzQxNzc2Li41NWVhNGYwIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q1OTAKKysrIGIvdGVzdHMvZGF0YS90ZXN0NTkwCkBAIC0xMDQsMTggKzEwNCwyMSBAQAogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTMuMi1DVlMgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTMuMi1DVlMgT3BlblNTTC8wLjkuN2UgemxpYi8xLjIuMiBsaWJpZG4vMC41LjEzDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogR0VUIGh0dHA6Ly90ZXN0LnJlbW90ZS5leGFtcGxlLmNvbS9wYXRoLzU5MCBIVFRQLzEuMQ0KIEhvc3Q6IHRlc3QucmVtb3RlLmV4YW1wbGUuY29tDQogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMy4yLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMy4yLUNWUyBPcGVuU1NMLzAuOS43ZSB6bGliLzEuMi4yIGxpYmlkbi8wLjUuMTMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiBHRVQgaHR0cDovL3Rlc3QucmVtb3RlLmV4YW1wbGUuY29tL3BhdGgvNTkwIEhUVFAvMS4xDQogSG9zdDogdGVzdC5yZW1vdGUuZXhhbXBsZS5jb20NCiBQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBREFBQUFHQUFZQUVBQUFBQ2VBSjRBV0FBQUFBQUFBQUQyQUFBQUFnQUNBUFlBQUFBSUFBZ0ErQUFBQUFBQUFBQUFBQUFBQm9LQkFCM0hyNlNEbjNORE5rZ2ViYmFQODhFeE1qTTBNakl6TkZJVzRON2FZVDQ0YkFJZzFqdDJibFVCQVFBQUFBQUFBQUNBUHRYZXNaMEJNVEl6TkRJeU16UUFBQUFBQWdBRUFFTUFRd0FCQUJJQVJRQk1BRWtBVXdCQkFFSUFSUUJVQUVnQUJBQVlBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBTUFMQUJsQUd3QWFRQnpBR0VBWWdCbEFIUUFhQUF1QUdNQVl3QXVBR2tBWXdCbEFHUUFaUUIyQUM0QWJnQjFBQUFBQUFBQUFBQUFiV1ZqZFhKc2FHOXpkQT09DQogVXNlci1BZ2VudDogY3VybC83LjEzLjItQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEzLjItQ1ZTIE9wZW5TU0wvMC45LjdlIHpsaWIvMS4yLjIgbGliaWRuLzAuNS4xMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDYzIGIvdGVzdHMvZGF0YS90ZXN0NjMKaW5kZXggMmE5NjQ0OS4uY2NjMTlkZCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NjMKKysrIGIvdGVzdHMvZGF0YS90ZXN0NjMKQEAgLTQ1LDYgKzQ1LDcgQEAKIEhvc3Q6IHdlLndhbnQudGhhdC5zaXRlLmNvbQ0KIFByb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIFptRnJaVHAxYzJWeQ0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDc5IGIvdGVzdHMvZGF0YS90ZXN0NzkKaW5kZXggNTVmYzI0NS4uYjI1NjZlMiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0NzkKKysrIGIvdGVzdHMvZGF0YS90ZXN0NzkKQEAgLTQ4LDYgKzQ4LDcgQEAKIEdFVCBmdHA6Ly8lSE9TVElQOiVIVFRQUE9SVC93ZS93YW50L3RoYXQvcGFnZS83OSBIVFRQLzEuMQ0KIEhvc3Q6ICVIT1NUSVA6JUhUVFBQT1JUDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0ODAgYi90ZXN0cy9kYXRhL3Rlc3Q4MAppbmRleCA4YTYzNWI0Li4xNDdhNmFhIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q4MAorKysgYi90ZXN0cy9kYXRhL3Rlc3Q4MApAQCAtNjgsNiArNjgsNyBAQAogSG9zdDogdGVzdC44MDolSFRUUFBPUlQNCiBQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyBlVzkxWVhKbE9ubHZkWEp6Wld4bQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm94eT4KIDxwcm90b2NvbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDgxIGIvdGVzdHMvZGF0YS90ZXN0ODEKaW5kZXggNTNhZmZhMC4uZGMwNTRkMiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0ODEKKysrIGIvdGVzdHMvZGF0YS90ZXN0ODEKQEAgLTg5LDEyICs4OSwxNCBAQAogUHJveHktQXV0aG9yaXphdGlvbjogTlRMTSBUbFJNVFZOVFVBQUJBQUFBQm9JSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIEdFVCBodHRwOi8vJUhPU1RJUDolSFRUUFBPUlQvODEgSFRUUC8xLjENCiBIb3N0OiAlSE9TVElQOiVIVFRQUE9SVA0KIFByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRUFBQUFDZUFKNEFXQUFBQUFBQUFBRDJBQUFBQ0FBSUFQWUFBQUFJQUFnQS9nQUFBQUFBQUFBQUFBQUFCb0tCQUw5TE5XNStua3lIWlJteUZhTC9MSjR4TWpNME1qSXpOR1VDeWhnUTlodzZlV0FUMTNFYkRhMEJBUUFBQUFBQUFBQ0FQdFhlc1owQk1USXpOREl5TXpRQUFBQUFBZ0FFQUVNQVF3QUJBQklBUlFCTUFFa0FVd0JCQUVJQVJRQlVBRWdBQkFBWUFHTUFZd0F1QUdrQVl3QmxBR1FBWlFCMkFDNEFiZ0IxQUFNQUxBQmxBR3dBYVFCekFHRUFZZ0JsQUhRQWFBQXVBR01BWXdBdUFHa0FZd0JsQUdRQVpRQjJBQzRBYmdCMUFBQUFBQUFBQUFBQWRHVnpkSFZ6WlhKamRYSnNhRzl6ZEE9PQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDgyIGIvdGVzdHMvZGF0YS90ZXN0ODIKaW5kZXggZGUzZmNiYS4uOGI1OGY3NSAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0ODIKKysrIGIvdGVzdHMvZGF0YS90ZXN0ODIKQEAgLTQ5LDYgKzQ5LDcgQEAKIFByb3h5LUF1dGhvcml6YXRpb246IEJhc2ljIGRHVnpkSFZ6WlhJNmRHVnpkSEJoYzNNPQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC42LXByZTEgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNi1wcmUxIE9wZW5TU0wvMC45LjdhIGlwdjYgemxpYi8xLjEuMw0KIEFjY2VwdDogKi8qDQorUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZQ0KIA0KIDwvcHJvdG9jb2w+CiA8L3ZlcmlmeT4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDgzIGIvdGVzdHMvZGF0YS90ZXN0ODMKaW5kZXggNGZlOGJhMy4uMTIwYmNjNiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0ODMKKysrIGIvdGVzdHMvZGF0YS90ZXN0ODMKQEAgLTY0LDYgKzY0LDcgQEAKIENPTk5FQ1QgdGVzdC44MzolSFRUUFBPUlQgSFRUUC8xLjENCiBIb3N0OiB0ZXN0LjgzOiVIVFRQUE9SVA0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm94eT4KIDxwcm90b2NvbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvdGVzdDg0IGIvdGVzdHMvZGF0YS90ZXN0ODQKaW5kZXggY2Y2NjdkNi4uNjI5ZGFlMiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0ODQKKysrIGIvdGVzdHMvZGF0YS90ZXN0ODQKQEAgLTQ3LDYgKzQ3LDcgQEAKIEF1dGhvcml6YXRpb246IEJhc2ljIGFXRnRPbTE1YzJWc1pnPT0NCiBVc2VyLUFnZW50OiBjdXJsLzcuMTAuNy1wcmUyIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEwLjctcHJlMiBPcGVuU1NMLzAuOS43YSB6bGliLzEuMS4zDQogQWNjZXB0OiAqLyoNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0ODUgYi90ZXN0cy9kYXRhL3Rlc3Q4NQppbmRleCBhMTEzNjNmLi5jYjVlNmUwIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q4NQorKysgYi90ZXN0cy9kYXRhL3Rlc3Q4NQpAQCAtNTEsNiArNTEsNyBAQAogQXV0aG9yaXphdGlvbjogQmFzaWMgYVdGdE9tMTVjMlZzWmc9PQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q4NjQgYi90ZXN0cy9kYXRhL3Rlc3Q4NjQKaW5kZXggOWFkOThmNy4uZWJkZWJkNiAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YS90ZXN0ODY0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDg2NApAQCAtMTEsNyArMTEsNyBAQAogPHJlcGx5PgogPHNlcnZlcmNtZD4KIENBUEEgQVBPUAotUkVQTFkgd2VsY29tZSArT0sgY1VSTCBQT1AzIHNlcnZlciByZWFkeSB0byBzZXJ2ZSA8MTk3Mi45ODc2NTQzMjFcQGN1cmw+CitSRVBMWSB3ZWxjb21lICtPSyBjdXJsIFBPUDMgc2VydmVyIHJlYWR5IHRvIHNlcnZlIDwxOTcyLjk4NzY1NDMyMVxAY3VybD4KIDwvc2VydmVyY21kPgogPGRhdGE+CiBGcm9tOiBtZUBzb21ld2hlcmUNCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q5MyBiL3Rlc3RzL2RhdGEvdGVzdDkzCmluZGV4IDk0OGQyOWMuLjEzODcyNDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDkzCisrKyBiL3Rlc3RzL2RhdGEvdGVzdDkzCkBAIC00Myw2ICs0Myw3IEBACiBHRVQgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JULzkzIEhUVFAvMS4xDQogSG9zdDogJUhPU1RJUDolSFRUUFBPUlQNCiBBY2NlcHQ6ICovKg0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3RvY29sPgogPC92ZXJpZnk+CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhL3Rlc3Q5NCBiL3Rlc3RzL2RhdGEvdGVzdDk0CmluZGV4IDk0Yzg5NGMuLjJmM2Y0ODIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2RhdGEvdGVzdDk0CisrKyBiL3Rlc3RzL2RhdGEvdGVzdDk0CkBAIC01MSw2ICs1MSw3IEBACiBDT05ORUNUIHRlc3QuYW55dGhpbmcucmVhbGx5LmNvbTo5NCBIVFRQLzEuMA0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMS4wLUNWUyAoaTY4Ni1wYy1saW51eC1nbnUpIGxpYmN1cmwvNy4xMS4wLUNWUyBPcGVuU1NMLzAuOS42YiBpcHY2IHpsaWIvMS4xLjQNCiBIb3N0OiB0ZXN0LmFueXRoaW5nLnJlYWxseS5jb206OTQNCitQcm94eS1Db25uZWN0aW9uOiBLZWVwLUFsaXZlDQogDQogPC9wcm90b2NvbD4KIDwvdmVyaWZ5PgpkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS90ZXN0OTUgYi90ZXN0cy9kYXRhL3Rlc3Q5NQppbmRleCAyYjNlMmMyLi4xY2Q4OGFjIDEwMDY0NAotLS0gYS90ZXN0cy9kYXRhL3Rlc3Q5NQorKysgYi90ZXN0cy9kYXRhL3Rlc3Q5NQpAQCAtNjQsNiArNjQsNyBAQAogQ09OTkVDVCB0ZXN0Ljk1OiVIVFRQUE9SVCBIVFRQLzEuMQ0KIFVzZXItQWdlbnQ6IGN1cmwvNy4xMC43LXByZTIgKGk2ODYtcGMtbGludXgtZ251KSBsaWJjdXJsLzcuMTAuNy1wcmUyIE9wZW5TU0wvMC45LjdhIHpsaWIvMS4xLjMNCiBIb3N0OiB0ZXN0Ljk1OiVIVFRQUE9SVA0KK1Byb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmUNCiANCiA8L3Byb3h5PgogPHByb3RvY29sIG5vbmV3bGluZT0ieWVzIj4KZGlmZiAtLWdpdCBhL3Rlc3RzL2Z0cHNlcnZlci5wbCBiL3Rlc3RzL2Z0cHNlcnZlci5wbAppbmRleCAwMWE3ZGY4Li4wODEyOThmIDEwMDc1NQotLS0gYS90ZXN0cy9mdHBzZXJ2ZXIucGwKKysrIGIvdGVzdHMvZnRwc2VydmVyLnBsCkBAIC02MDksNyArNjA5LDcgQEAKICAgICAgICAgICAgICcgICAvIF9ffCB8IHwgfCB8XykgfCB8ICAgICcuIlxyXG4iLAogICAgICAgICAgICAgJyAgfCAoX198IHxffCB8ICBfIHt8IHxfX18gJy4iXHJcbiIsCiAgICAgICAgICAgICAnICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wnLiJcclxuIiwKLSAgICAgICAgICAgICcrT0sgY1VSTCBQT1AzIHNlcnZlciByZWFkeSB0byBzZXJ2ZSAnLiJcclxuIikKKyAgICAgICAgICAgICcrT0sgY3VybCBQT1AzIHNlcnZlciByZWFkeSB0byBzZXJ2ZSAnLiJcclxuIikKICAgICAgICAgKTsKICAgICB9CiAgICAgZWxzaWYoJHByb3RvIGVxICdpbWFwJykgewpAQCAtNjQzLDcgKzY0Myw3IEBACiAgICAgICAgICAgICAnICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAnLiJcclxuIiwKICAgICAgICAgICAgICcgIHwgKF9ffCB8X3wgfCAgXyB7fCB8X19fICcuIlxyXG4iLAogICAgICAgICAgICAgJyAgIFxfX198XF9fXy98X3wgXF9cX19fX198Jy4iXHJcbiIsCi0gICAgICAgICAgICAnKiBPSyBjVVJMIElNQVAgc2VydmVyIHJlYWR5IHRvIHNlcnZlJy4iXHJcbiIpCisgICAgICAgICAgICAnKiBPSyBjdXJsIElNQVAgc2VydmVyIHJlYWR5IHRvIHNlcnZlJy4iXHJcbiIpCiAgICAgICAgICk7CiAgICAgfQogICAgIGVsc2lmKCRwcm90byBlcSAnc210cCcpIHsKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiB9CiAKIHN1YiBRVUlUX3NtdHAgewotICAgIHNlbmRjb250cm9sICIyMjEgY1VSTCAkc210cF90eXBlIHNlcnZlciBzaWduaW5nIG9mZlxyXG4iOworICAgIHNlbmRjb250cm9sICIyMjEgY3VybCAkc210cF90eXBlIHNlcnZlciBzaWduaW5nIG9mZlxyXG4iOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogfQogCiBzdWIgTE9HT1VUX2ltYXAgewotICAgIHNlbmRjb250cm9sICIqIEJZRSBjVVJMIElNQVAgc2VydmVyIHNpZ25pbmcgb2ZmXHJcbiI7CisgICAgc2VuZGNvbnRyb2wgIiogQllFIGN1cmwgSU1BUCBzZXJ2ZXIgc2lnbmluZyBvZmZcclxuIjsKICAgICBzZW5kY29udHJvbCAiJGNtZGlkIE9LIExPR09VVCBjb21wbGV0ZWRcclxuIjsKIAogICAgIHJldHVybiAwOwpAQCAtMTk0MSw3ICsxOTQxLDcgQEAKICAgICAgICAgQGRlbGV0ZWQgPSAoKTsKICAgICB9CiAKLSAgICBzZW5kY29udHJvbCAiK09LIGNVUkwgUE9QMyBzZXJ2ZXIgc2lnbmluZyBvZmZcclxuIjsKKyAgICBzZW5kY29udHJvbCAiK09LIGN1cmwgUE9QMyBzZXJ2ZXIgc2lnbmluZyBvZmZcclxuIjsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL2xpYnRlc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggY2M5ZDdlMS4uYTc0NDljMyAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi90ZXN0cy9saWJ0ZXN0L0NNYWtlTGlzdHMudHh0CkBAIC00Myw2ICs0MywxMCBAQAogICAjIGxpYnJhcnkgYXQgKHRlc3RzKS9saWJ0ZXN0Ly5saWJzL2xpYmhvc3RuYW1lLnNvCiAgIHNldF90YXJnZXRfcHJvcGVydGllcyhob3N0bmFtZSBQUk9QRVJUSUVTCiAgICAgICBMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9Ly5saWJzKQorICBpZihISURFU19DVVJMX1BSSVZBVEVfU1lNQk9MUykKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIGhvc3RuYW1lIEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TICJDVVJMX0hJRERFTl9TWU1CT0xTIikKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIGhvc3RuYW1lIEFQUEVORCBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTICR7Q1VSTF9DRkxBR19TWU1CT0xTX0hJREV9KQorICBlbmRpZigpCiBlbmRpZigpCiAKICMgIyBmaWxlcyB1c2VkIG9ubHkgaW4gc29tZSBsaWJjdXJsIHRlc3QgcHJvZ3JhbXMKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvTWFrZWZpbGUuaW5jIGIvdGVzdHMvbGlidGVzdC9NYWtlZmlsZS5pbmMKaW5kZXggN2FlNjZkNy4uYzFkYzJmNSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9NYWtlZmlsZS5pbmMKKysrIGIvdGVzdHMvbGlidGVzdC9NYWtlZmlsZS5pbmMKQEAgLTIzLDcgKzIzLDggQEAKICBsaWIxNTAwIGxpYjE1MDEgbGliMTUwMiBsaWIxNTAzIGxpYjE1MDQgbGliMTUwNSBsaWIxNTA2IGxpYjE1MDcgbGliMTUwOCBcCiAgbGliMTUwOSBsaWIxNTEwIGxpYjE1MTEgbGliMTUxMiBsaWIxNTEzIGxpYjE1MTQgbGliMTUxNSAgICAgICAgIGxpYjE1MTcgXAogIGxpYjE1MjAgXAotIGxpYjE1MjUgbGliMTUyNiBsaWIxNTI3IGxpYjE1MjggbGliMTUyOSBsaWIxNTMwIGxpYjE1MzEgXAorIGxpYjE1MjUgbGliMTUyNiBsaWIxNTI3IGxpYjE1MjggbGliMTUyOSBsaWIxNTMwIGxpYjE1MzEgbGliMTUzMiBsaWIxNTMzIFwKKyBsaWIxNTM0IFwKICBsaWIxOTAwIFwKICBsaWIyMDMzCiAKQEAgLTM5MSw2ICszOTIsMTggQEAKIGxpYjE1MzFfTERBREQgPSAkKFRFU1RVVElMX0xJQlMpCiBsaWIxNTMxX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUIxNTMxCiAKK2xpYjE1MzJfU09VUkNFUyA9IGxpYjE1MzIuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjE1MzJfTERBREQgPSAkKFRFU1RVVElMX0xJQlMpCitsaWIxNTMyX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUIxNTMyCisKK2xpYjE1MzNfU09VUkNFUyA9IGxpYjE1MzMuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjE1MzNfTERBREQgPSAkKFRFU1RVVElMX0xJQlMpCitsaWIxNTMzX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUIxNTMzCisKK2xpYjE1MzRfU09VUkNFUyA9IGxpYjE1MzQuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKK2xpYjE1MzRfTERBREQgPSAkKFRFU1RVVElMX0xJQlMpCitsaWIxNTM0X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURMSUIxNTM0CisKIGxpYjE5MDBfU09VUkNFUyA9IGxpYjE5MDAuYyAkKFNVUFBPUlRGSUxFUykgJChURVNUVVRJTCkgJChXQVJOTEVTUykKIGxpYjE5MDBfTERBREQgPSAkKFRFU1RVVElMX0xJQlMpCiBsaWIxOTAwX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliMTUwMC5jIGIvdGVzdHMvbGlidGVzdC9saWIxNTAwLmMKaW5kZXggZjNjNDk1OC4uNzNkMjNhMSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWIxNTAwLmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWIxNTAwLmMKQEAgLTI5LDggKzI5LDggQEAKIAogaW50IHRlc3QoY2hhciAqVVJMKQogewotICBDVVJMKiBjdXJscyA9IE5VTEw7Ci0gIENVUkxNKiBtdWx0aSA9IE5VTEw7CisgIENVUkwgKmN1cmxzID0gTlVMTDsKKyAgQ1VSTE0gKm11bHRpID0gTlVMTDsKICAgaW50IHN0aWxsX3J1bm5pbmc7CiAgIGludCBpID0gVEVTVF9FUlJfRkFJTFVSRTsKICAgaW50IHJlcyA9IDA7CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjE1MDIuYyBiL3Rlc3RzL2xpYnRlc3QvbGliMTUwMi5jCmluZGV4IGU0ZTFhMTYuLmJkNTU1Y2IgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliMTUwMi5jCisrKyBiL3Rlc3RzL2xpYnRlc3QvbGliMTUwMi5jCkBAIC00MSw4ICs0MSw4IEBACiAKIGludCB0ZXN0KGNoYXIgKlVSTCkKIHsKLSAgQ1VSTCogZWFzeSA9IE5VTEw7Ci0gIENVUkxNKiBtdWx0aSA9IE5VTEw7CisgIENVUkwgKmVhc3kgPSBOVUxMOworICBDVVJMTSAqbXVsdGkgPSBOVUxMOwogICBpbnQgc3RpbGxfcnVubmluZzsKICAgaW50IHJlcyA9IDA7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliMTUwNy5jIGIvdGVzdHMvbGlidGVzdC9saWIxNTA3LmMKaW5kZXggNWE3OTk0ZS4uN2FiMzA1NyAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWIxNTA3LmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWIxNTA3LmMKQEAgLTY4LDcgKzY4LDcgQEAKICAgIENVUkxNICptY3VybCA9IE5VTEw7CiAgICBpbnQgc3RpbGxfcnVubmluZyA9IDE7CiAgICBzdHJ1Y3QgdGltZXZhbCBtcF9zdGFydDsKLSAgIHN0cnVjdCBjdXJsX3NsaXN0KiByY3B0X2xpc3QgPSBOVUxMOworICAgc3RydWN0IGN1cmxfc2xpc3QgKnJjcHRfbGlzdCA9IE5VTEw7CiAKICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfREVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliMTUxMS5jIGIvdGVzdHMvbGlidGVzdC9saWIxNTExLmMKaW5kZXggYmVjMzE2Ny4uZTE4NDBlNyAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWIxNTExLmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWIxNTExLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI2LDcgKzI2LDcgQEAKIGludCB0ZXN0KGNoYXIgKlVSTCkKIHsKICAgbG9uZyB1bm1ldDsKLSAgQ1VSTCogY3VybCA9IE5VTEw7CisgIENVUkwgKmN1cmwgPSBOVUxMOwogICBpbnQgcmVzID0gMDsKIAogICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC9saWIxNTE1LmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjE1MTUuYwppbmRleCAyZmQxOWJiLi5hZWFmNmIyIDEwMDY0NAotLS0gYS90ZXN0cy9saWJ0ZXN0L2xpYjE1MTUuYworKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjE1MTUuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIGludCB0ZXN0KGNoYXIgKlVSTCkKIHsKLSAgQ1VSTE0qIG11bHRpID0gTlVMTDsKKyAgQ1VSTE0gKm11bHRpID0gTlVMTDsKICAgaW50IHJlcyA9IDA7CiAgIGNoYXIgKmFkZHJlc3MgPSBsaWJ0ZXN0X2FyZzI7CiAgIGNoYXIgKnBvcnQgPSBsaWJ0ZXN0X2FyZzM7CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjE1MzIuYyBiL3Rlc3RzL2xpYnRlc3QvbGliMTUzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2ZmMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjE1MzIuYwpAQCAtMCwwICsxLDgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfICAgXyBfX19fICBfCisgKiAgUHJvamVjdCAgICAgICAgICAgICAgICAgICAgIF9fX3wgfCB8IHwgIF8gXHwgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gX198IHwgfCB8IHxfKSB8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbC4KKyAqCisgKiBZb3UgbWF5IG9wdCB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENPUFlJTkcgZmlsZS4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGVzdC5oIgorCisjaW5jbHVkZSAibWVtZGVidWcuaCIKKworLyogVGVzdCBDVVJMSU5GT19SRVNQT05TRV9DT0RFICovCisKK2ludCB0ZXN0KGNoYXIgKlVSTCkKK3sKKyAgQ1VSTCAqY3VybDsKKyAgbG9uZyBodHRwY29kZTsKKyAgaW50IHJlcyA9IENVUkxFX09LOworCisgIGdsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyAgZWFzeV9pbml0KGN1cmwpOworCisgIGVhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBVUkwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGN1cmxfZWFzeV9wZXJmb3JtKCkgZmFpbGVkIHdpdGggY29kZSAlZCAoJXMpXG4iLAorICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCByZXMsIGN1cmxfZWFzeV9zdHJlcnJvcihyZXMpKTsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCisgIHJlcyA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwY29kZSk7CisgIGlmKHJlcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X2dldGluZm8oKSBmYWlsZWQgd2l0aCBjb2RlICVkICglcylcbiIsCisgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHJlcywgY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIGlmKGh0dHBjb2RlICE9IDIwMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgdW5leHBlY3RlZCByZXNwb25zZSBjb2RlICVsZFxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgaHR0cGNvZGUpOworICAgIHJlcyA9IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICAvKiBUZXN0IGZvciBhIHJlZ3Jlc3Npb24gb2YgZ2l0aHViIGJ1ZyAxMDE3IChyZXNwb25zZSBjb2RlIGRvZXMgbm90IHJlc2V0KSAqLworICBjdXJsX2Vhc3lfcmVzZXQoY3VybCk7CisKKyAgcmVzID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmh0dHBjb2RlKTsKKyAgaWYocmVzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX2Vhc3lfZ2V0aW5mbygpIGZhaWxlZCB3aXRoIGNvZGUgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgcmVzLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgaWYoaHR0cGNvZGUgIT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X3Jlc2V0IGZhaWxlZCB0byB6ZXJvIHRoZSByZXNwb25zZSBjb2RlXG4iCisgICAgICAgICAgICAicG9zc2libGUgcmVncmVzc2lvbiBvZiBnaXRodWIgYnVnIDEwMTdcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgcmVzID0gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUjsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCit0ZXN0X2NsZWFudXA6CisgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjE1MzMuYyBiL3Rlc3RzL2xpYnRlc3QvbGliMTUzMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDAzZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjE1MzMuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhpcyB0ZXN0IHNlbmRzIGRhdGEgd2l0aCBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUi4KKyAqIFRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhbiBlYXJseSBlcnJvciByZXNwb25zZS4KKyAqIFRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwgaWYgdGhlIGNvbm5lY3Rpb24gY2FuIGJlIHJldXNlZCBmb3IgdGhlIG5leHQgcmVxdWVzdCwKKyAqIGJlY2F1c2UgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gc2VudCBjb21wbGV0ZWx5IHRvIHRoZSBzZXJ2ZXIuCisgKi8KKworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKK3N0cnVjdCBjYl9kYXRhIHsKKyAgQ1VSTCAqZWFzeV9oYW5kbGU7CisgIGludCByZXNwb25zZV9yZWNlaXZlZDsKKyAgaW50IHBhdXNlZDsKKyAgc2l6ZV90IHJlbWFpbmluZ19ieXRlczsKK307CisKKworc3RhdGljIHZvaWQgcmVzZXRfZGF0YShzdHJ1Y3QgY2JfZGF0YSAqZGF0YSwgQ1VSTCAqY3VybCkKK3sKKyAgZGF0YS0+ZWFzeV9oYW5kbGUgPSBjdXJsOworICBkYXRhLT5yZXNwb25zZV9yZWNlaXZlZCA9IDA7CisgIGRhdGEtPnBhdXNlZCA9IDA7CisgIGRhdGEtPnJlbWFpbmluZ19ieXRlcyA9IDM7Cit9CisKKworc3RhdGljIHNpemVfdCByZWFkX2NhbGxiYWNrKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpCit7CisgIHN0cnVjdCBjYl9kYXRhICpkYXRhID0gKHN0cnVjdCBjYl9kYXRhICopdXNlcmRhdGE7CisKKyAgLyogd2FpdCB1bnRpbCB0aGUgc2VydmVyIGhhcyBzZW50IGFsbCByZXNwb25zZSBoZWFkZXJzICovCisgIGlmKGRhdGEtPnJlc3BvbnNlX3JlY2VpdmVkKSB7CisgICAgc2l6ZV90IHRvdGFsc2l6ZSA9IG5pdGVtcyAqIHNpemU7CisKKyAgICBzaXplX3QgYnl0ZXNfdG9fc2VuZCA9IGRhdGEtPnJlbWFpbmluZ19ieXRlczsKKyAgICBpZihieXRlc190b19zZW5kID4gdG90YWxzaXplKSB7CisgICAgICBieXRlc190b19zZW5kID0gdG90YWxzaXplOworICAgIH0KKworICAgIG1lbXNldChwdHIsICdhJywgYnl0ZXNfdG9fc2VuZCk7CisgICAgZGF0YS0+cmVtYWluaW5nX2J5dGVzIC09IGJ5dGVzX3RvX3NlbmQ7CisKKyAgICByZXR1cm4gYnl0ZXNfdG9fc2VuZDsKKyAgfQorICBlbHNlIHsKKyAgICBkYXRhLT5wYXVzZWQgPSAxOworICAgIHJldHVybiBDVVJMX1JFQURGVU5DX1BBVVNFOworICB9Cit9CisKKworc3RhdGljIHNpemVfdCB3cml0ZV9jYWxsYmFjayhjaGFyICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKQoreworICBzdHJ1Y3QgY2JfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgY2JfZGF0YSAqKXVzZXJkYXRhOworICBzaXplX3QgdG90YWxzaXplID0gbm1lbWIgKiBzaXplOworCisgIC8qIHVudXNlZCBwYXJhbWV0ZXIgKi8KKyAgKHZvaWQpcHRyOworCisgIC8qIGFsbCByZXNwb25zZSBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZCAqLworICBkYXRhLT5yZXNwb25zZV9yZWNlaXZlZCA9IDE7CisKKyAgaWYoZGF0YS0+cGF1c2VkKSB7CisgICAgLyogY29udGludWUgdG8gc2VuZCByZXF1ZXN0IGJvZHkgZGF0YSAqLworICAgIGRhdGEtPnBhdXNlZCA9IDA7CisgICAgY3VybF9lYXN5X3BhdXNlKGRhdGEtPmVhc3lfaGFuZGxlLCBDVVJMUEFVU0VfQ09OVCk7CisgIH0KKworICByZXR1cm4gdG90YWxzaXplOworfQorCisKK3N0YXRpYyBpbnQgcGVyZm9ybV9hbmRfY2hlY2tfY29ubmVjdGlvbnMoQ1VSTCAqY3VybCwgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXhwZWN0ZWRfY29ubmVjdGlvbnMpCit7CisgIENVUkxjb2RlIHJlczsKKyAgbG9uZyBjb25uZWN0aW9ucyA9IDA7CisKKyAgcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisgIGlmKHJlcyAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X3BlcmZvcm0oKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19OVU1fQ09OTkVDVFMsICZjb25uZWN0aW9ucyk7CisgIGlmKHJlcyAhPSBDVVJMRV9PSykgeworICAgIGZwcmludGYoc3RkZXJyLCAiY3VybF9lYXN5X2dldGluZm8oKSBmYWlsZWRcbiIpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHBlY3RlZDogJWxkIGNvbm5lY3Rpb25zOyBhY3R1YWw6ICVsZCBjb25uZWN0aW9uc1xuIiwKKyAgICAgICAgICBkZXNjcmlwdGlvbiwgZXhwZWN0ZWRfY29ubmVjdGlvbnMsIGNvbm5lY3Rpb25zKTsKKworICBpZihjb25uZWN0aW9ucyAhPSBleHBlY3RlZF9jb25uZWN0aW9ucykgeworICAgIHJldHVybiBURVNUX0VSUl9GQUlMVVJFOworICB9CisKKyAgcmV0dXJuIFRFU1RfRVJSX1NVQ0NFU1M7Cit9CisKKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBzdHJ1Y3QgY2JfZGF0YSBkYXRhOworICBDVVJMICpjdXJsID0gTlVMTDsKKyAgQ1VSTGNvZGUgcmVzID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisKKyAgaWYoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpICE9IENVUkxFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2dsb2JhbF9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICByZXR1cm4gVEVTVF9FUlJfTUFKT1JfQkFEOworICB9CisKKyAgaWYoKGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpKSA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJjdXJsX2Vhc3lfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOworICAgIHJldHVybiBURVNUX0VSUl9NQUpPUl9CQUQ7CisgIH0KKworICByZXNldF9kYXRhKCZkYXRhLCBjdXJsKTsKKworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1NULCAxTCk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRSwKKyAgICAgICAgICAgICAgKGN1cmxfb2ZmX3QpZGF0YS5yZW1haW5pbmdfYnl0ZXMpOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJlYWRfY2FsbGJhY2spOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQUREQVRBLCAmZGF0YSk7CisgIHRlc3Rfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfY2FsbGJhY2spOworICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgJmRhdGEpOworCisgIHJlcyA9IHBlcmZvcm1fYW5kX2NoZWNrX2Nvbm5lY3Rpb25zKGN1cmwsCisgICAgIkZpcnN0IHJlcXVlc3Qgd2l0aG91dCBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUiIsIDEpOworICBpZihyZXMgIT0gVEVTVF9FUlJfU1VDQ0VTUykgeworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKKyAgcmVzZXRfZGF0YSgmZGF0YSwgY3VybCk7CisKKyAgcmVzID0gcGVyZm9ybV9hbmRfY2hlY2tfY29ubmVjdGlvbnMoY3VybCwKKyAgICAiU2Vjb25kIHJlcXVlc3Qgd2l0aG91dCBDVVJMT1BUX0tFRVBfU0VORElOR19PTl9FUlJPUiIsIDEpOworICBpZihyZXMgIT0gVEVTVF9FUlJfU1VDQ0VTUykgeworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKKyAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IsIDFMKTsKKworICByZXNldF9kYXRhKCZkYXRhLCBjdXJsKTsKKworICByZXMgPSBwZXJmb3JtX2FuZF9jaGVja19jb25uZWN0aW9ucyhjdXJsLAorICAgICJGaXJzdCByZXF1ZXN0IHdpdGggQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IiLCAxKTsKKyAgaWYocmVzICE9IFRFU1RfRVJSX1NVQ0NFU1MpIHsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCisgIHJlc2V0X2RhdGEoJmRhdGEsIGN1cmwpOworCisgIHJlcyA9IHBlcmZvcm1fYW5kX2NoZWNrX2Nvbm5lY3Rpb25zKGN1cmwsCisgICAgIlNlY29uZCByZXF1ZXN0IHdpdGggQ1VSTE9QVF9LRUVQX1NFTkRJTkdfT05fRVJST1IiLCAwKTsKKyAgaWYocmVzICE9IFRFU1RfRVJSX1NVQ0NFU1MpIHsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCisgIHJlcyA9IFRFU1RfRVJSX1NVQ0NFU1M7CisKK3Rlc3RfY2xlYW51cDoKKworICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisKKyAgcmV0dXJuIChpbnQpcmVzOworfQorCmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjE1MzQuYyBiL3Rlc3RzL2xpYnRlc3QvbGliMTUzNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZTcyYWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjE1MzQuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXworICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIF9ffCB8IHwgfCB8XykgfCB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vY3VybC5oYXh4LnNlL2RvY3MvY29weXJpZ2h0Lmh0bWwuCisgKgorICogWW91IG1heSBvcHQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDT1BZSU5HIGZpbGUuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRlc3QuaCIKKworI2luY2x1ZGUgIm1lbWRlYnVnLmgiCisKKy8qIFRlc3QgQ1VSTElORk9fRklMRVRJTUUgKi8KKworaW50IHRlc3QoY2hhciAqVVJMKQoreworICBDVVJMICpjdXJsLCAqZHVwZSA9IE5VTEw7CisgIGxvbmcgZmlsZXRpbWU7CisgIGludCByZXMgPSBDVVJMRV9PSzsKKworICBnbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworCisgIGVhc3lfaW5pdChjdXJsKTsKKworICAvKiBUZXN0IHRoYXQgYSBmaWxldGltZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBvbiBjdXJsX2Vhc3lfaW5pdC4KKyAgKi8KKworICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19GSUxFVElNRSwgJmZpbGV0aW1lKTsKKyAgaWYocmVzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX2Vhc3lfZ2V0aW5mbygpIGZhaWxlZCB3aXRoIGNvZGUgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgcmVzLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgaWYoZmlsZXRpbWUgIT0gLTEpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGZpbGV0aW1lIGluaXQgZmFpbGVkOyBleHBlY3RlZCAtMSBidXQgaXMgJWxkXG4iLAorICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBmaWxldGltZSk7CisgICAgcmVzID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICBlYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgVVJMKTsKKyAgZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFVElNRSwgMUwpOworCisgIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOworICBpZihyZXMpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGN1cmxfZWFzeV9wZXJmb3JtKCkgZmFpbGVkIHdpdGggY29kZSAlZCAoJXMpXG4iLAorICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCByZXMsIGN1cmxfZWFzeV9zdHJlcnJvcihyZXMpKTsKKyAgICBnb3RvIHRlc3RfY2xlYW51cDsKKyAgfQorCisgIC8qIFRlc3QgdGhhdCBhIGZpbGV0aW1lIGlzIHByb3Blcmx5IHNldCBhZnRlciByZWNlaXZpbmcgYW4gSFRUUCByZXNvdXJjZS4KKyAgKi8KKworICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsLCBDVVJMSU5GT19GSUxFVElNRSwgJmZpbGV0aW1lKTsKKyAgaWYocmVzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX2Vhc3lfZ2V0aW5mbygpIGZhaWxlZCB3aXRoIGNvZGUgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgcmVzLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgaWYoZmlsZXRpbWUgIT0gMzApIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGZpbGV0aW1lIG9mIGh0dHAgcmVzb3VyY2UgaXMgaW5jb3JyZWN0OyAiCisgICAgICAgICAgICAiZXhwZWN0ZWQgMzAgYnV0IGlzICVsZFxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZmlsZXRpbWUpOworICAgIHJlcyA9IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICAvKiBUZXN0IHRoYXQgYSBmaWxldGltZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBvbiBjdXJsX2Vhc3lfZHVwaGFuZGxlLgorICAqLworCisgIGR1cGUgPSBjdXJsX2Vhc3lfZHVwaGFuZGxlKGN1cmwpOworICBpZighZHVwZSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X2R1cGhhbmRsZSgpIGZhaWxlZFxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgcmVzID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworICByZXMgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhkdXBlLCBDVVJMSU5GT19GSUxFVElNRSwgJmZpbGV0aW1lKTsKKyAgaWYocmVzKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBjdXJsX2Vhc3lfZ2V0aW5mbygpIGZhaWxlZCB3aXRoIGNvZGUgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgcmVzLCBjdXJsX2Vhc3lfc3RyZXJyb3IocmVzKSk7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKyAgaWYoZmlsZXRpbWUgIT0gLTEpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGZpbGV0aW1lIGluaXQgZmFpbGVkOyBleHBlY3RlZCAtMSBidXQgaXMgJWxkXG4iLAorICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBmaWxldGltZSk7CisgICAgcmVzID0gQ1VSTEVfRkFJTEVEX0lOSVQ7CisgICAgZ290byB0ZXN0X2NsZWFudXA7CisgIH0KKworCisgIC8qIFRlc3QgdGhhdCBhIGZpbGV0aW1lIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIG9uIGN1cmxfZWFzeV9yZXNldC4KKyAgKi8KKworICBjdXJsX2Vhc3lfcmVzZXQoY3VybCk7CisKKyAgcmVzID0gY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fRklMRVRJTUUsICZmaWxldGltZSk7CisgIGlmKHJlcykgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQgY3VybF9lYXN5X2dldGluZm8oKSBmYWlsZWQgd2l0aCBjb2RlICVkICglcylcbiIsCisgICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHJlcywgY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisgIGlmKGZpbGV0aW1lICE9IC0xKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczolZCBmaWxldGltZSBpbml0IGZhaWxlZDsgZXhwZWN0ZWQgLTEgYnV0IGlzICVsZFxuIiwKKyAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgZmlsZXRpbWUpOworICAgIHJlcyA9IENVUkxFX0ZBSUxFRF9JTklUOworICAgIGdvdG8gdGVzdF9jbGVhbnVwOworICB9CisKK3Rlc3RfY2xlYW51cDoKKyAgY3VybF9lYXN5X2NsZWFudXAoY3VybCk7CisgIGN1cmxfZWFzeV9jbGVhbnVwKGR1cGUpOworICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjUwNy5jIGIvdGVzdHMvbGlidGVzdC9saWI1MDcuYwppbmRleCA3NDg3OTkyLi5lYmU4OTdhIDEwMDY0NAotLS0gYS90ZXN0cy9saWJ0ZXN0L2xpYjUwNy5jCisrKyBiL3Rlc3RzL2xpYnRlc3QvbGliNTA3LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTI5LDggKzI5LDggQEAKIAogaW50IHRlc3QoY2hhciAqVVJMKQogewotICBDVVJMKiBjdXJscyA9IE5VTEw7Ci0gIENVUkxNKiBtdWx0aSA9IE5VTEw7CisgIENVUkwgKmN1cmxzID0gTlVMTDsKKyAgQ1VSTE0gKm11bHRpID0gTlVMTDsKICAgaW50IHN0aWxsX3J1bm5pbmc7CiAgIGludCBpID0gLTE7CiAgIGludCByZXMgPSAwOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC9saWI1MTcuYyBiL3Rlc3RzL2xpYnRlc3QvbGliNTE3LmMKaW5kZXggMmY2OGViZC4uMjIxNjJmZiAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWI1MTcuYworKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjUxNy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTEsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0xMTYsNiArMTE2LDEyIEBACiAgICIyMDExMTMyMyAxMjozNDo1NiIsCiAgICIyMDExMDYyMyAxMjozNDo3OSIsCiAgICJXZWQsIDMxIERlYyAyMDA4IDIzOjU5OjYwIEdNVCIsIC8qIGxlYXAgc2Vjb25kICovCisgICIyMDExMDYyMyAxMjozIiwKKyAgIjIwMTEwNjIzIDE6MyIsCisgICIyMDExMDYyMyAxOjMwIiwKKyAgIjIwMTEwNjIzIDEyOjEyOjMiLAorICAiMjAxMTA2MjMgMDE6MTI6MyIsCisgICIyMDExMDYyMyAwMTo5OTozMCIsCiAgIE5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliNTM5LmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjUzOS5jCmluZGV4IDlmMGY4ZmEuLmVjNGVhNTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliNTM5LmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWI1MzkuYwpAQCAtNDIsNyArNDIsNyBAQAogICAgfQogCiAgICAvKgotICAgICogQmVnaW4gd2l0aCBjVVJMIHNldCB0byB1c2UgYSBzaW5nbGUgQ1dEIHRvIHRoZSBVUkwncyBkaXJlY3RvcnkuCisgICAgKiBCZWdpbiB3aXRoIGN1cmwgc2V0IHRvIHVzZSBhIHNpbmdsZSBDV0QgdG8gdGhlIFVSTCdzIGRpcmVjdG9yeS4KICAgICAqLwogICAgdGVzdF9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIFVSTCk7CiAgICB0ZXN0X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgIC8qCiAgICAgKiBDaGFuZ2UgdGhlIEZUUF9GSUxFTUVUSE9EIG9wdGlvbiB0byB1c2UgZnVsbCBwYXRocyByYXRoZXIgdGhhbiBhIENXRAogICAgICogY29tbWFuZC4gIEFsdGVyIHRoZSBVUkwncyBwYXRoIGEgYml0LCBhcHBlbmRpbmcgYSAiLi8iLiAgVXNlIGFuIGlubm9jdW91cwotICAgICogUVVPVEUgY29tbWFuZCwgYWZ0ZXIgd2hpY2ggY1VSTCB3aWxsIENXRCB0byBmdHBfY29ubi0+ZW50cnlwYXRoIGFuZCB0aGVuCisgICAgKiBRVU9URSBjb21tYW5kLCBhZnRlciB3aGljaCBjdXJsIHdpbGwgQ1dEIHRvIGZ0cF9jb25uLT5lbnRyeXBhdGggYW5kIHRoZW4KICAgICAqIChvbiB0aGUgbmV4dCBjYWxsIHRvIGZ0cF9zdGF0ZW1hY2hfYWN0KSBmaW5kIGEgbm9uLXplcm8gZnRwY29ubi0+ZGlyZGVwdGgKICAgICAqIGV2ZW4gdGhvdWdoIG5vIGRpcmVjdG9yaWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ0cGNvbm4tPmRpcnMgYXJyYXkgKGFmdGVyIGEKICAgICAqIGNhbGwgdG8gZnJlZWRpcnMpLgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC9saWI1NDAuYyBiL3Rlc3RzL2xpYnRlc3QvbGliNTQwLmMKaW5kZXggOWIzYjVhNC4uZjVkODljNCAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWI1NDAuYworKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjU0MC5jCkBAIC00OCw3ICs0OCw3IEBACiAKIENVUkwgKmVoW05VTV9IQU5ETEVTXTsKIAotc3RhdGljIGludCBpbml0KGludCBudW0sIENVUkxNICpjbSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB1c2VycHdkLAorc3RhdGljIGludCBpbml0KGludCBudW0sIENVUkxNICpjbSwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICp1c2VycHdkLAogICAgICAgICAgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzKQogewogICBpbnQgcmVzID0gMDsKQEAgLTk5LDcgKzk5LDcgQEAKICAgcmV0dXJuIHJlczsgLyogZmFpbHVyZSAqLwogfQogCi1zdGF0aWMgaW50IGxvb3AoaW50IG51bSwgQ1VSTE0gKmNtLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHVzZXJwd2QsCitzdGF0aWMgaW50IGxvb3AoaW50IG51bSwgQ1VSTE0gKmNtLCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKnVzZXJwd2QsCiAgICAgICAgICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnMpCiB7CiAgIENVUkxNc2cgKm1zZzsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliNTQzLmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjU0My5jCmluZGV4IDhmZWMwNTIuLjkwYWVkMjEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliNTQzLmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWI1NDMuYwpAQCAtNDMsNyArNDMsNyBAQAogCiAgIGFzaXplID0gKGludClzaXplb2YoYSk7CiAKLSAgcyA9IGN1cmxfZWFzeV9lc2NhcGUoZWFzeSwgKGNoYXIqKWEsIGFzaXplKTsKKyAgcyA9IGN1cmxfZWFzeV9lc2NhcGUoZWFzeSwgKGNoYXIgKilhLCBhc2l6ZSk7CiAKICAgaWYocykKICAgICBwcmludGYoIiVzXG4iLCBzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliNTUyLmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjU1Mi5jCmluZGV4IDlmZTRhNzEuLjk0YzkzMjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliNTUyLmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWI1NTIuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiB9CiAKIAotc3RhdGljIGN1cmxpb2VyciBpb2N0bF9jYWxsYmFjayhDVVJMICogaGFuZGxlLCBpbnQgY21kLCB2b2lkICpjbGllbnRwKQorc3RhdGljIGN1cmxpb2VyciBpb2N0bF9jYWxsYmFjayhDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApCiB7CiAgICh2b2lkKWNsaWVudHA7CiAgIGlmKGNtZCA9PSBDVVJMSU9DTURfUkVTVEFSVFJFQUQpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliNTU3LmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjU1Ny5jCmluZGV4IDViZGI4YWIuLjY4M2NhMDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliNTU3LmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWI1NTcuYwpAQCAtMTQyMiwxMSArMTQyMiwxMTUgQEAKICAgcmV0dXJuIGVycm9yczsKIH0KIAorc3RhdGljIGludCB0ZXN0X3dlaXJkX2FyZ3VtZW50cyh2b2lkKQoreworICBpbnQgZXJyb3JzID0gMDsKKyAgY2hhciBidWZbMjU2XTsKKyAgaW50IHJjOworCisgIC8qIE1BWF9QQVJBTUVURVJTIGlzIDEyOCwgdHJ5IGV4YWN0IDEyOCEgKi8KKyAgcmMgPSBjdXJsX21zbnByaW50ZihidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDggKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDEwICovCisgICAgICAgICAgICAgICAgICAgICAgIiVkJWQlZCVkJWQlZCVkJWQlZCVkIiAvKiAxMCAxMSAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkIiAgICAgLyogOCAqLworICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCAyICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgMyAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCA1ICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgNiAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCA4ICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgOSAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDEwICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgMTEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsgLyogOCAqLworCisgIGlmKHJjICE9IDEyOCkgeworICAgIHByaW50ZigiY3VybF9tcHJpbnRmKCkgcmV0dXJuZWQgJWQgYW5kIG5vdCAxMjghXG4iLCByYyk7CisgICAgZXJyb3JzKys7CisgIH0KKworICBlcnJvcnMgKz0gc3RyaW5nX2NoZWNrKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSIgLyogMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSIgLyogMTAgMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiAvKiAxMCAyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiIC8qIDEwIDMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSIgLyogMTAgNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiAvKiAxMCA1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiIC8qIDEwIDYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSIgLyogMTAgNyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiAvKiAxMCA4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiIC8qIDEwIDkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSIgLyogMTAgMTAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiAvKiAxMCAxMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2NyIgICAvKiA4ICovCisgICAgKTsKKworICAvKiBNQVhfUEFSQU1FVEVSUyBpcyAxMjgsIHRyeSBtb3JlISAqLworICBidWZbMF0gPSAwOworICByYyA9IGN1cmxfbXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgIiVkJWQlZCVkJWQlZCVkJWQlZCVkIiAvKiAxMCAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgMSAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgMiAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgMyAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgNCAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgNSAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgNiAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgNyAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgOCAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgOSAqLworICAgICAgICAgICAgICAgICAgICAgICIlZCVkJWQlZCVkJWQlZCVkJWQlZCIgLyogMTAgMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiJWQlZCVkJWQlZCVkJWQlZCVkJWQiIC8qIDEwIDExICovCisgICAgICAgICAgICAgICAgICAgICAgIiVkJWQlZCVkJWQlZCVkJWQlZCIgICAvKiA5ICovCisgICAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgMSAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCAzICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgNCAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCA2ICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgNyAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIC8qIDEwIDggKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCA5ICovCisgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgLyogMTAgMTAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAvKiAxMCAxMSAqLworICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgpOyAgIC8qIDkgKi8KKworICBpZihyYyAhPSAtMSkgeworICAgIHByaW50ZigiY3VybF9tcHJpbnRmKCkgcmV0dXJuZWQgJWQgYW5kIG5vdCAtMSFcbiIsIHJjKTsKKyAgICBlcnJvcnMrKzsKKyAgfQorCisgIGVycm9ycyArPSBzdHJpbmdfY2hlY2soYnVmLCAiIik7CisKKyAgaWYoZXJyb3JzKQorICAgIHByaW50ZigiU29tZSBjdXJsX21wcmludGYoKSB3ZWlyZCBhcmd1bWVudHMgdGVzdHMgZmFpbGVkIVxuIik7CisKKyAgcmV0dXJuIGVycm9yczsKK30KKworCiBpbnQgdGVzdChjaGFyICpVUkwpCiB7CiAgIGludCBlcnJvcnMgPSAwOwogICAodm9pZClVUkw7IC8qIG5vdCB1c2VkICovCiAKKyAgZXJyb3JzICs9IHRlc3Rfd2VpcmRfYXJndW1lbnRzKCk7CisKICAgZXJyb3JzICs9IHRlc3RfdW5zaWduZWRfc2hvcnRfZm9ybWF0dGluZygpOwogCiAgIGVycm9ycyArPSB0ZXN0X3NpZ25lZF9zaG9ydF9mb3JtYXR0aW5nKCk7CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYjU3MS5jIGIvdGVzdHMvbGlidGVzdC9saWI1NzEuYwppbmRleCBhZDZjMzY2Li4zMjY0OGFkIDEwMDY0NAotLS0gYS90ZXN0cy9saWJ0ZXN0L2xpYjU3MS5jCisrKyBiL3Rlc3RzL2xpYnRlc3QvbGliNTcxLmMKQEAgLTUwLDcgKzUwLDggQEAKIAogc3RhdGljIGludCBydHBfcGFja2V0X2NvdW50ID0gMDsKIAotc3RhdGljIHNpemVfdCBydHBfd3JpdGUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJlYW0pIHsKK3N0YXRpYyBzaXplX3QgcnRwX3dyaXRlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyZWFtKQorewogICBjaGFyICpkYXRhID0gKGNoYXIgKilwdHI7CiAgIGludCBjaGFubmVsID0gUlRQX1BLVF9DSEFOTkVMKGRhdGEpOwogICBpbnQgbWVzc2FnZV9zaXplOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC9saWI1ODIuYyBiL3Rlc3RzL2xpYnRlc3QvbGliNTgyLmMKaW5kZXggNDQ0YjQxNi4uZWVjMDQ1NSAxMDA2NDQKLS0tIGEvdGVzdHMvbGlidGVzdC9saWI1ODIuYworKysgYi90ZXN0cy9saWJ0ZXN0L2xpYjU4Mi5jCkBAIC0xNDUsMTAgKzE0NSwxMCBAQAogLyoqCiAgKiBDaGVjayBmb3IgY3VybCBjb21wbGV0aW9uLgogICovCi1zdGF0aWMgaW50IGNoZWNrRm9yQ29tcGxldGlvbihDVVJMTSogY3VybCwgaW50KiBzdWNjZXNzKQorc3RhdGljIGludCBjaGVja0ZvckNvbXBsZXRpb24oQ1VSTE0gKmN1cmwsIGludCAqc3VjY2VzcykKIHsKICAgaW50IG51bU1lc3NhZ2VzOwotICBDVVJMTXNnKiBtZXNzYWdlOworICBDVVJMTXNnICptZXNzYWdlOwogICBpbnQgcmVzdWx0ID0gMDsKICAgKnN1Y2Nlc3MgPSAwOwogICB3aGlsZSgobWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmwsICZudW1NZXNzYWdlcykpICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGliNTgzLmMgYi90ZXN0cy9saWJ0ZXN0L2xpYjU4My5jCmluZGV4IDlhZjQ4ZDIuLjViMTFmYWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvbGliNTgzLmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWI1ODMuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtMzMsOCArMzMsOCBAQAogaW50IHRlc3QoY2hhciAqVVJMKQogewogICBpbnQgc3RpbGxSdW5uaW5nOwotICBDVVJMTSogbXVsdGlIYW5kbGUgPSBOVUxMOwotICBDVVJMKiBjdXJsID0gTlVMTDsKKyAgQ1VSTE0gKm11bHRpSGFuZGxlID0gTlVMTDsKKyAgQ1VSTCAqY3VybCA9IE5VTEw7CiAgIGludCByZXMgPSAwOwogCiAgIGdsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L2xpYmF1dGhyZXRyeS5jIGIvdGVzdHMvbGlidGVzdC9saWJhdXRocmV0cnkuYwppbmRleCA5OTRmOWRlLi4wNjVhNzlkIDEwMDY0NAotLS0gYS90ZXN0cy9saWJ0ZXN0L2xpYmF1dGhyZXRyeS5jCisrKyBiL3Rlc3RzL2xpYnRlc3QvbGliYXV0aHJldHJ5LmMKQEAgLTI1LDcgKzI1LDYgQEAKICAqLwogCiAjaW5jbHVkZSAidGVzdC5oIgotI2luY2x1ZGUgInN0cmVxdWFsLmgiCiAjaW5jbHVkZSAibWVtZGVidWcuaCIKIAogc3RhdGljIENVUkxjb2RlIHNlbmRfcmVxdWVzdChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsIGludCBzZXEsCkBAIC0zMyw3ICszMiw3IEBACiB7CiAgIENVUkxjb2RlIHJlczsKICAgc2l6ZV90IGxlbiA9IHN0cmxlbih1cmwpICsgNCArIDE7Ci0gIGNoYXIqIGZ1bGxfdXJsID0gbWFsbG9jKGxlbik7CisgIGNoYXIgKmZ1bGxfdXJsID0gbWFsbG9jKGxlbik7CiAgIGlmKCFmdWxsX3VybCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGZ1bGwgdXJsXG4iKTsKICAgICByZXR1cm4gQ1VSTEVfT1VUX09GX01FTU9SWTsKQEAgLTcyLDExICs3MSwxMSBAQAogewogICBpZighYXJnKQogICAgIHJldHVybiBDVVJMQVVUSF9OT05FOwotICBpZihzdHJlcXVhbChhcmcsICJiYXNpYyIpKQorICBpZihjdXJsX3N0cmVxdWFsKGFyZywgImJhc2ljIikpCiAgICAgcmV0dXJuIENVUkxBVVRIX0JBU0lDOwotICBpZihzdHJlcXVhbChhcmcsICJkaWdlc3QiKSkKKyAgaWYoY3VybF9zdHJlcXVhbChhcmcsICJkaWdlc3QiKSkKICAgICByZXR1cm4gQ1VSTEFVVEhfRElHRVNUOwotICBpZihzdHJlcXVhbChhcmcsICJudGxtIikpCisgIGlmKGN1cmxfc3RyZXF1YWwoYXJnLCAibnRsbSIpKQogICAgIHJldHVybiBDVVJMQVVUSF9OVExNOwogICByZXR1cm4gQ1VSTEFVVEhfTk9ORTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QvbGlibnRsbWNvbm5lY3QuYyBiL3Rlc3RzL2xpYnRlc3QvbGlibnRsbWNvbm5lY3QuYwppbmRleCA3MzYyMjJkLi40MGE4MzdjIDEwMDY0NAotLS0gYS90ZXN0cy9saWJ0ZXN0L2xpYm50bG1jb25uZWN0LmMKKysrIGIvdGVzdHMvbGlidGVzdC9saWJudGxtY29ubmVjdC5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgY3VybF9zb2NrZXRfdCBzb2NrZXRzW01BWF9FQVNZX0hBTkRMRVNdOwogc3RhdGljIGludCByZXMgPSAwOwogCi1zdGF0aWMgc2l6ZV90IGNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3N0YXRpYyBzaXplX3QgY2FsbGJhY2soY2hhciAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpkYXRhKQogewogICBzc2l6ZV90IGlkeCA9ICgoQ1VSTCAqKikgZGF0YSkgLSBlYXN5OwogICBjdXJsX3NvY2tldF90IHNvY2s7CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgaW50IG51bV9oYW5kbGVzID0gMDsKICAgZW51bSBIYW5kbGVTdGF0ZSBzdGF0ZSA9IFJlYWR5Rm9yTmV3SGFuZGxlOwogICBzaXplX3QgdXJsbGVuID0gc3RybGVuKHVybCkgKyA0ICsgMTsKLSAgY2hhciogZnVsbF91cmwgPSBtYWxsb2ModXJsbGVuKTsKKyAgY2hhciAqZnVsbF91cmwgPSBtYWxsb2ModXJsbGVuKTsKIAogICBzdGFydF90ZXN0X3RpbWluZygpOwogCmRpZmYgLS1naXQgYS90ZXN0cy9saWJ0ZXN0L3Rlc3QuaCBiL3Rlc3RzL2xpYnRlc3QvdGVzdC5oCmluZGV4IDk2NDc2NTguLjlmZDMzYWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYnRlc3QvdGVzdC5oCisrKyBiL3Rlc3RzL2xpYnRlc3QvdGVzdC5oCkBAIC0xMTIsNyArMTEyLDcgQEAKICoqIGxhYmVsICd0ZXN0X2NsZWFudXAnIGlzIHBlcmZvcm1lZC4KICoqCiAqKiBFdmVyeSBlYXN5XyogYW5kIG11bHRpXyogbWFjcm9zIGhhdmUgYSByZXNfZWFzeV8qIGFuZCByZXNfbXVsdGlfKiBtYWNybwotKiogY291bnRlcnBhcnQgdGhhdCBvcGVyYXRlcyBpbiB0aGEgc2FtZSB3YXkgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgbm8KKyoqIGNvdW50ZXJwYXJ0IHRoYXQgb3BlcmF0ZXMgaW4gdGhlIHNhbWUgd2F5IHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IG5vCiAqKiBqdW1wIHRha2VzIHBsYWNlIGluIGNhc2Ugb2YgZmFpbHVyZS4gcmVzX2Vhc3lfKiBhbmQgcmVzX211bHRpXyogbWFjcm9zCiAqKiBzaG91bGQgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgY2hlY2tpbmcgaWYgJ3JlcycgdmFyaWFibGUgaGFzIGJlZW4KICoqIHNldC4KZGlmZiAtLWdpdCBhL3Rlc3RzL3BhdGhoZWxwLnBtIGIvdGVzdHMvcGF0aGhlbHAucG0KaW5kZXggMzkxZWY2Yy4uMTBhODdhYSAxMDA2NDQKLS0tIGEvdGVzdHMvcGF0aGhlbHAucG0KKysrIGIvdGVzdHMvcGF0aGhlbHAucG0KQEAgLTIwLDcgKzIwLDcgQEAKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0jIFRoaXMgUGVybCBwYWNrYWdlIGhlbHBzIHdpdGggcGF0aCB0cmFuc2Zvcm1pbmcgd2hlbiBydW5uaW5nIGNVUkwgdGVzdHMgb24KKyMgVGhpcyBQZXJsIHBhY2thZ2UgaGVscHMgd2l0aCBwYXRoIHRyYW5zZm9ybWluZyB3aGVuIHJ1bm5pbmcgY3VybCB0ZXN0cyBvbgogIyBXaW4zMiBwbGF0Zm9ybSB3aXRoIE1zeXMgb3IgQ3lnd2luLgogIyBUaHJlZSBtYWluIGZ1bmN0aW9ucyAnc3lzX25hdGl2ZV9hYnNfcGF0aCcsICdzeXNfbmF0aXZlX3BhdGgnIGFuZAogIyAnYnVpbGRfc3lzX2Fic19wYXRoJyBhdXRvZGV0ZWN0IGZvcm1hdCBvZiBnaXZlbiBwYXRobmFtZXMuIEZvbGxvd2luZyBmb3JtYXRzCmRpZmYgLS1naXQgYS90ZXN0cy9zZXJ2ZXIvTWFrZWZpbGUuaW5jIGIvdGVzdHMvc2VydmVyL01ha2VmaWxlLmluYwppbmRleCA2ZTgxZGZkLi5jM2VhNjY0IDEwMDY0NAotLS0gYS90ZXN0cy9zZXJ2ZXIvTWFrZWZpbGUuaW5jCisrKyBiL3Rlc3RzL3NlcnZlci9NYWtlZmlsZS5pbmMKQEAgLTMsNyArMyw2IEBACiBDVVJMWF9TUkNTID0gXAogIC4uLy4uL2xpYi9tcHJpbnRmLmMgXAogIC4uLy4uL2xpYi9ub25ibG9jay5jIFwKLSAuLi8uLi9saWIvc3RyZXF1YWwuYyBcCiAgLi4vLi4vbGliL3N0cnRvb2ZmdC5jIFwKICAuLi8uLi9saWIvdGltZXZhbC5jIFwKICAuLi8uLi9saWIvd2Fybmxlc3MuYwpAQCAtMTEsNyArMTAsNiBAQAogQ1VSTFhfSERSUyA9IFwKICAuLi8uLi9saWIvY3VybHguaCBcCiAgLi4vLi4vbGliL25vbmJsb2NrLmggXAotIC4uLy4uL2xpYi9zdHJlcXVhbC5oIFwKICAuLi8uLi9saWIvc3RydG9vZmZ0LmggXAogIC4uLy4uL2xpYi90aW1ldmFsLmggXAogIC4uLy4uL2xpYi93YXJubGVzcy5oCmRpZmYgLS1naXQgYS90ZXN0cy9zZXJ2ZXIvcnRzcGQuYyBiL3Rlc3RzL3NlcnZlci9ydHNwZC5jCmluZGV4IDkxZWY2YzYuLmU3NTllODggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NlcnZlci9ydHNwZC5jCisrKyBiL3Rlc3RzL3NlcnZlci9ydHNwZC5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAogY29uc3QgY2hhciAqc2VydmVybG9nZmlsZSA9IERFRkFVTFRfTE9HRklMRTsKIAotI2RlZmluZSBSVFNQRFZFUlNJT04gImNVUkwgdGVzdCBzdWl0ZSBSVFNQIHNlcnZlci8wLjEiCisjZGVmaW5lIFJUU1BEVkVSU0lPTiAiY3VybCB0ZXN0IHN1aXRlIFJUU1Agc2VydmVyLzAuMSIKIAogI2RlZmluZSBSRVFVRVNUX0RVTVAgICJsb2cvc2VydmVyLmlucHV0IgogI2RlZmluZSBSRVNQT05TRV9EVU1QICJsb2cvc2VydmVyLnJlc3BvbnNlIgpAQCAtNTkwLDcgKzU5MCw3IEBACiAgICAgaWYoZ290X2V4aXRfc2lnbmFsKQogICAgICAgcmV0dXJuIDE7IC8qIGRvbmUgKi8KIAotICAgIGlmKChyZXEtPmNsPT0wKSAmJiBjdXJseF9zdHJuZXF1YWwoIkNvbnRlbnQtTGVuZ3RoOiIsIGxpbmUsIDE1KSkgeworICAgIGlmKChyZXEtPmNsPT0wKSAmJiBzdHJuY2FzZWNvbXBhcmUoIkNvbnRlbnQtTGVuZ3RoOiIsIGxpbmUsIDE1KSkgewogICAgICAgLyogSWYgd2UgZG9uJ3QgaWdub3JlIGNvbnRlbnQtbGVuZ3RoLCB3ZSByZWFkIGl0IGFuZCB3ZSByZWFkIHRoZSB3aG9sZQogICAgICAgICAgcmVxdWVzdCBpbmNsdWRpbmcgdGhlIGJvZHkgYmVmb3JlIHdlIHJldHVybi4gSWYgd2UndmUgYmVlbiB0b2xkIHRvCiAgICAgICAgICBpZ25vcmUgdGhlIGNvbnRlbnQtbGVuZ3RoLCB3ZSB3aWxsIHJldHVybiBhcyBzb29uIGFzIGFsbCBoZWFkZXJzCkBAIC02MTYsNyArNjE2LDcgQEAKICAgICAgICAgbG9nbXNnKCIuLi4gYnV0IHdpbGwgYWJvcnQgYWZ0ZXIgJXp1IGJ5dGVzIiwgcmVxLT5jbCk7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgZWxzZSBpZihjdXJseF9zdHJuZXF1YWwoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiwgbGluZSwKKyAgICBlbHNlIGlmKHN0cm5jYXNlY29tcGFyZSgiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiLCBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKSkpIHsKICAgICAgIC8qIGNodW5rZWQgZGF0YSBjb21pbmcgaW4gKi8KICAgICAgIGNodW5rZWQgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2VydmVyL3N3cy5jIGIvdGVzdHMvc2VydmVyL3N3cy5jCmluZGV4IDI3Yzg2ZTAuLmFmMDkwNGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NlcnZlci9zd3MuYworKysgYi90ZXN0cy9zZXJ2ZXIvc3dzLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiBjb25zdCBjaGFyICpzZXJ2ZXJsb2dmaWxlID0gREVGQVVMVF9MT0dGSUxFOwogCi0jZGVmaW5lIFNXU1ZFUlNJT04gImNVUkwgdGVzdCBzdWl0ZSBIVFRQIHNlcnZlci8wLjEiCisjZGVmaW5lIFNXU1ZFUlNJT04gImN1cmwgdGVzdCBzdWl0ZSBIVFRQIHNlcnZlci8wLjEiCiAKICNkZWZpbmUgUkVRVUVTVF9EVU1QICAibG9nL3NlcnZlci5pbnB1dCIKICNkZWZpbmUgUkVTUE9OU0VfRFVNUCAibG9nL3NlcnZlci5yZXNwb25zZSIKQEAgLTY5Nyw3ICs2OTcsNyBAQAogICAgIGlmKGdvdF9leGl0X3NpZ25hbCkKICAgICAgIHJldHVybiAxOyAvKiBkb25lICovCiAKLSAgICBpZigocmVxLT5jbD09MCkgJiYgY3VybHhfc3RybmVxdWFsKCJDb250ZW50LUxlbmd0aDoiLCBsaW5lLCAxNSkpIHsKKyAgICBpZigocmVxLT5jbD09MCkgJiYgc3RybmNhc2Vjb21wYXJlKCJDb250ZW50LUxlbmd0aDoiLCBsaW5lLCAxNSkpIHsKICAgICAgIC8qIElmIHdlIGRvbid0IGlnbm9yZSBjb250ZW50LWxlbmd0aCwgd2UgcmVhZCBpdCBhbmQgd2UgcmVhZCB0aGUgd2hvbGUKICAgICAgICAgIHJlcXVlc3QgaW5jbHVkaW5nIHRoZSBib2R5IGJlZm9yZSB3ZSByZXR1cm4uIElmIHdlJ3ZlIGJlZW4gdG9sZCB0bwogICAgICAgICAgaWdub3JlIHRoZSBjb250ZW50LWxlbmd0aCwgd2Ugd2lsbCByZXR1cm4gYXMgc29vbiBhcyBhbGwgaGVhZGVycwpAQCAtNzIzLDcgKzcyMyw3IEBACiAgICAgICAgIGxvZ21zZygiLi4uIGJ1dCB3aWxsIGFib3J0IGFmdGVyICV6dSBieXRlcyIsIHJlcS0+Y2wpOwogICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVsc2UgaWYoY3VybHhfc3RybmVxdWFsKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGxpbmUsCisgICAgZWxzZSBpZihzdHJuY2FzZWNvbXBhcmUoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiwgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIikpKSB7CiAgICAgICAvKiBjaHVua2VkIGRhdGEgY29taW5nIGluICovCiAgICAgICBjaHVua2VkID0gVFJVRTsKQEAgLTIyMzEsOSArMjIzMSw5IEBACiAgICAgLyogQ2xlYXIgb3V0IGNsb3NlZCBzb2NrZXRzICovCiAgICAgZm9yKHNvY2tldF9pZHggPSBudW1fc29ja2V0cyAtIDE7IHNvY2tldF9pZHggPj0gMTsgLS1zb2NrZXRfaWR4KSB7CiAgICAgICBpZihDVVJMX1NPQ0tFVF9CQUQgPT0gYWxsX3NvY2tldHNbc29ja2V0X2lkeF0pIHsKLSAgICAgICAgY2hhciogZHN0ID0gKGNoYXIgKikgKGFsbF9zb2NrZXRzICsgc29ja2V0X2lkeCk7Ci0gICAgICAgIGNoYXIqIHNyYyA9IChjaGFyICopIChhbGxfc29ja2V0cyArIHNvY2tldF9pZHggKyAxKTsKLSAgICAgICAgY2hhciogZW5kID0gKGNoYXIgKikgKGFsbF9zb2NrZXRzICsgbnVtX3NvY2tldHMpOworICAgICAgICBjaGFyICpkc3QgPSAoY2hhciAqKSAoYWxsX3NvY2tldHMgKyBzb2NrZXRfaWR4KTsKKyAgICAgICAgY2hhciAqc3JjID0gKGNoYXIgKikgKGFsbF9zb2NrZXRzICsgc29ja2V0X2lkeCArIDEpOworICAgICAgICBjaGFyICplbmQgPSAoY2hhciAqKSAoYWxsX3NvY2tldHMgKyBudW1fc29ja2V0cyk7CiAgICAgICAgIG1lbW1vdmUoZHN0LCBzcmMsIGVuZCAtIHNyYyk7CiAgICAgICAgIG51bV9zb2NrZXRzIC09IDE7CiAgICAgICB9CmRpZmYgLS1naXQgYS90ZXN0cy9zZXJ2ZXIvdGZ0cGQuYyBiL3Rlc3RzL3NlcnZlci90ZnRwZC5jCmluZGV4IGFmYzA4ODQuLjhhNGVkMGIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NlcnZlci90ZnRwZC5jCisrKyBiL3Rlc3RzL3NlcnZlci90ZnRwZC5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDIwMTYgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEwNDAsMTAgKzEwNDAsMTAgQEAKICNpZmRlZiBVU0VfV0lOU09DSwogICByZWN2dGltZW91dCA9IHNpemVvZihyZWN2dGltZW91dGJhayk7CiAgIGdldHNvY2tvcHQocGVlciwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sCi0gICAgICAgICAgICAgKGNoYXIqKSZyZWN2dGltZW91dGJhaywgKGludCopJnJlY3Z0aW1lb3V0KTsKKyAgICAgICAgICAgICAoY2hhciAqKSZyZWN2dGltZW91dGJhaywgKGludCAqKSZyZWN2dGltZW91dCk7CiAgIHJlY3Z0aW1lb3V0ID0gVElNRU9VVCoxMDAwOwogICBzZXRzb2Nrb3B0KHBlZXIsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLAotICAgICAgICAgICAgIChjb25zdCBjaGFyKikmcmVjdnRpbWVvdXQsIHNpemVvZihyZWN2dGltZW91dCkpOworICAgICAgICAgICAgIChjb25zdCBjaGFyICopJnJlY3Z0aW1lb3V0LCBzaXplb2YocmVjdnRpbWVvdXQpKTsKICNlbmRpZgogCiAgIGlmKHRwLT50aF9vcGNvZGUgPT0gb3Bjb2RlX1dSUSkKQEAgLTEwNTQsNyArMTA1NCw3IEBACiAjaWZkZWYgVVNFX1dJTlNPQ0sKICAgcmVjdnRpbWVvdXQgPSByZWN2dGltZW91dGJhazsKICAgc2V0c29ja29wdChwZWVyLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywKLSAgICAgICAgICAgICAoY29uc3QgY2hhciopJnJlY3Z0aW1lb3V0LCBzaXplb2YocmVjdnRpbWVvdXQpKTsKKyAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSZyZWN2dGltZW91dCwgc2l6ZW9mKHJlY3Z0aW1lb3V0KSk7CiAjZW5kaWYKIAogICByZXR1cm4gMDsKQEAgLTEyMzIsMTkgKzEyMzIsMTcgQEAKIHsKICAgaW50IHNpemU7CiAgIHNzaXplX3QgbjsKLSAgLyogVGhpcyBpcyB2b2xhdGlsZSB0byBsaXZlIHRocm91Z2ggYSBzaWdsb25nam1wICovCisgIC8qIFRoZXNlIGFyZSB2b2xhdGlsZSB0byBsaXZlIHRocm91Z2ggYSBzaWdsb25nam1wICovCiAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHNlbmRibG9jazsgLyogYmxvY2sgY291bnQgKi8KLSAgc3RydWN0IHRmdHBoZHIgKnNkcDsgICAgICAvKiBkYXRhIGJ1ZmZlciAqLwotICBzdHJ1Y3QgdGZ0cGhkciAqc2FwOyAgICAgIC8qIGFjayBidWZmZXIgKi8KKyAgc3RydWN0IHRmdHBoZHIgKiB2b2xhdGlsZSBzZHAgPSByX2luaXQoKTsgLyogZGF0YSBidWZmZXIgKi8KKyAgc3RydWN0IHRmdHBoZHIgKiBjb25zdCBzYXAgPSAmYWNrYnVmLmhkcjsgLyogYWNrIGJ1ZmZlciAqLwogCiAgIHNlbmRibG9jayA9IDE7CiAjaWYgZGVmaW5lZChIQVZFX0FMQVJNKSAmJiBkZWZpbmVkKFNJR0FMUk0pCiAgIG15c2lnbmFsKFNJR0FMUk0sIHRpbWVyKTsKICNlbmRpZgotICBzZHAgPSByX2luaXQoKTsKLSAgc2FwID0gJmFja2J1Zi5oZHI7CiAgIGRvIHsKLSAgICBzaXplID0gcmVhZGl0KHRlc3QsICZzZHAsIHBmLT5mX2NvbnZlcnQpOworICAgIHNpemUgPSByZWFkaXQodGVzdCwgKHN0cnVjdCB0ZnRwaGRyICoqKSZzZHAsIHBmLT5mX2NvbnZlcnQpOwogICAgIGlmKHNpemUgPCAwKSB7CiAgICAgICBuYWsoZXJybm8gKyAxMDApOwogICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2VydmVyL3V0aWwuYyBiL3Rlc3RzL3NlcnZlci91dGlsLmMKaW5kZXggZDk5MzM2My4uZTY1NDcwNyAxMDA2NDQKLS0tIGEvdGVzdHMvc2VydmVyL3V0aWwuYworKysgYi90ZXN0cy9zZXJ2ZXIvdXRpbC5jCkBAIC0zMDUsMyArMzA1LDg3IEBACiAgICAgbG9nbXNnKCJFcnJvciByZW1vdmluZyBsb2NrIGZpbGUgJXMgZXJyb3I6ICVkICVzIiwKICAgICAgICAgICAgZmlsZW5hbWUsIGVycm9yLCBzdHJlcnJvcihlcnJvcikpOwogfQorCisKKy8qIFBvcnRhYmxlLCBjb25zaXN0ZW50IHRvdXBwZXIgKHJlbWVtYmVyIEVCQ0RJQykuIERvIG5vdCB1c2UgdG91cHBlcigpIGJlY2F1c2UKKyAgIGl0cyBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS4gKi8KK3N0YXRpYyBjaGFyIHJhd190b3VwcGVyKGNoYXIgaW4pCit7CisjaWYgIWRlZmluZWQoQ1VSTF9ET0VTX0NPTlZFUlNJT05TKQorICBpZihpbiA+PSAnYScgJiYgaW4gPD0gJ3onKQorICAgIHJldHVybiAoY2hhcikoJ0EnICsgaW4gLSAnYScpOworI2Vsc2UKKyAgc3dpdGNoIChpbikgeworICBjYXNlICdhJzoKKyAgICByZXR1cm4gJ0EnOworICBjYXNlICdiJzoKKyAgICByZXR1cm4gJ0InOworICBjYXNlICdjJzoKKyAgICByZXR1cm4gJ0MnOworICBjYXNlICdkJzoKKyAgICByZXR1cm4gJ0QnOworICBjYXNlICdlJzoKKyAgICByZXR1cm4gJ0UnOworICBjYXNlICdmJzoKKyAgICByZXR1cm4gJ0YnOworICBjYXNlICdnJzoKKyAgICByZXR1cm4gJ0cnOworICBjYXNlICdoJzoKKyAgICByZXR1cm4gJ0gnOworICBjYXNlICdpJzoKKyAgICByZXR1cm4gJ0knOworICBjYXNlICdqJzoKKyAgICByZXR1cm4gJ0onOworICBjYXNlICdrJzoKKyAgICByZXR1cm4gJ0snOworICBjYXNlICdsJzoKKyAgICByZXR1cm4gJ0wnOworICBjYXNlICdtJzoKKyAgICByZXR1cm4gJ00nOworICBjYXNlICduJzoKKyAgICByZXR1cm4gJ04nOworICBjYXNlICdvJzoKKyAgICByZXR1cm4gJ08nOworICBjYXNlICdwJzoKKyAgICByZXR1cm4gJ1AnOworICBjYXNlICdxJzoKKyAgICByZXR1cm4gJ1EnOworICBjYXNlICdyJzoKKyAgICByZXR1cm4gJ1InOworICBjYXNlICdzJzoKKyAgICByZXR1cm4gJ1MnOworICBjYXNlICd0JzoKKyAgICByZXR1cm4gJ1QnOworICBjYXNlICd1JzoKKyAgICByZXR1cm4gJ1UnOworICBjYXNlICd2JzoKKyAgICByZXR1cm4gJ1YnOworICBjYXNlICd3JzoKKyAgICByZXR1cm4gJ1cnOworICBjYXNlICd4JzoKKyAgICByZXR1cm4gJ1gnOworICBjYXNlICd5JzoKKyAgICByZXR1cm4gJ1knOworICBjYXNlICd6JzoKKyAgICByZXR1cm4gJ1onOworICB9CisjZW5kaWYKKworICByZXR1cm4gaW47Cit9CisKK2ludCBzdHJuY2FzZWNvbXBhcmUoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCwgc2l6ZV90IG1heCkKK3sKKyAgd2hpbGUoKmZpcnN0ICYmICpzZWNvbmQgJiYgbWF4KSB7CisgICAgaWYocmF3X3RvdXBwZXIoKmZpcnN0KSAhPSByYXdfdG91cHBlcigqc2Vjb25kKSkgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIG1heC0tOworICAgIGZpcnN0Kys7CisgICAgc2Vjb25kKys7CisgIH0KKyAgaWYoMCA9PSBtYXgpCisgICAgcmV0dXJuIDE7IC8qIHRoZXkgYXJlIGVxdWFsIHRoaXMgZmFyICovCisKKyAgcmV0dXJuIHJhd190b3VwcGVyKCpmaXJzdCkgPT0gcmF3X3RvdXBwZXIoKnNlY29uZCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zZXJ2ZXIvdXRpbC5oIGIvdGVzdHMvc2VydmVyL3V0aWwuaAppbmRleCAyYTE5YTYxLi5jOTBmY2RmIDEwMDY0NAotLS0gYS90ZXN0cy9zZXJ2ZXIvdXRpbC5oCisrKyBiL3Rlc3RzL3NlcnZlci91dGlsLmgKQEAgLTcsNyArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTYzLDQgKzYzLDYgQEAKIAogdm9pZCBjbGVhcl9hZHZpc29yX3JlYWRfbG9jayhjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAKK2ludCBzdHJuY2FzZWNvbXBhcmUoY29uc3QgY2hhciAqZmlyc3QsIGNvbnN0IGNoYXIgKnNlY29uZCwgc2l6ZV90IG1heCk7CisKICNlbmRpZiAgLyogSEVBREVSX0NVUkxfU0VSVkVSX1VUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvdGVzdGN1cmwuMSBiL3Rlc3RzL3Rlc3RjdXJsLjEKaW5kZXggNTA5ZjVkYy4uZWUwN2Q2NCAxMDA2NDQKLS0tIGEvdGVzdHMvdGVzdGN1cmwuMQorKysgYi90ZXN0cy90ZXN0Y3VybC4xCkBAIC01LDcgKzUsNyBAQAogLlwiICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KIC5cIiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAogLlwiICoKLS5cIiAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTAsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCisuXCIgKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDE2LCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgogLlwiICoKIC5cIiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCiAuXCIgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gVGhlIHRlcm1zCkBAIC0zMiw3ICszMiw3IEBACiBtYWlsZWQgdG8gY3VybC1hdXRvY29tcGlsZUBoYXh4LnNlIHRvIGJlIGRlYWx0IHdpdGggYXV0b21hdGljYWxseSAobWFrZSBzdXJlCiB0aGUgc3ViamVjdCBpbmNsdWRlcyB0aGUgd29yZCAiYXV0b2J1aWxkIiBhcyB0aGUgbWFpbCBnZXRzIHNpbGVudGx5IGRpc2NhcmRlZAogb3RoZXJ3aXNlKS4gIFRoZSBtb3N0IGN1cnJlbnQgYnVpbGQgc3RhdHVzICh3aXRoIGEgcmVhc29uYWJsZSBiYWNrbG9nKSB3aWxsIGJlCi1wdWJsaXNoZWQgb24gdGhlIGN1cmwgc2l0ZSwgYXQgaHR0cHM6Ly9jdXJsLmhheHguc2UvYXV0by8KK3B1Ymxpc2hlZCBvbiB0aGUgY3VybCBzaXRlLCBhdCBodHRwczovL2N1cmwuaGF4eC5zZS9kZXYvYnVpbGRzLmh0bWwKIAogXGZJb3B0aW9uc1xmUCBtYXkgYmUgb21pdHRlZC4gU2VlIFxmSS0tc2V0dXBcZlAgZm9yIHdoYXQgaGFwcGVucyB0aGVuLgogCkBAIC03OCwxMyArNzgsMTMgQEAKIFwmJ2JvcmxhbmQnIGFuZCAnbmV0d2FyZScuCiAuU0ggIklOSVRJQUwgU0VUVVAiCiBGaXJzdCB5b3UgbWFrZSBhIGNoZWNrb3V0IGZyb20gZ2l0IChvciB5b3Ugd3JpdGUgYSBzY3JpcHQgdGhhdCBkb3dubG9hZHMgZGFpbHkKLXNuYXBzaG90cyBhdXRvbWF0aWNhbGx5LCBmaW5kIGluc3BpcmF0aW9uIGF0Ci1odHRwczovL2N1cmwuaGF4eC5zZS9hdXRvL2F1dG9jdXJsLnR4dCk6CitzbmFwc2hvdHMgYXV0b21hdGljYWxseSwgZmluZCBpbnNwaXJhdGlvbiBpbgoraHR0cHM6Ly9jdXJsLmhheHguc2UvZGV2L2F1dG9jdXJsLnR4dCApOgogCiAubmYKICAgJCBta2RpciBkYWlseS1jdXJsCiAgICQgY2QgZGFpbHktY3VybAotICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXRodWIuY29tL2N1cmwvY3VybC5naXQKKyAgJCBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2N1cmwvY3VybC5naXQKIC5maQogCiBXaXRoIHRoZSBjdXJsIHNvdXJjZXMgY2hlY2tlZCBvdXQsIG9yIGRvd25sb2FkZWQsIHlvdSBjYW4gc3RhcnQgdGVzdGluZyByaWdodApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL3VuaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggZTY2Njc5OC4uMTQ1ODlkNiAxMDA2NDQKLS0tIGEvdGVzdHMvdW5pdC9DTWFrZUxpc3RzLnR4dAorKysgYi90ZXN0cy91bml0L0NNYWtlTGlzdHMudHh0CkBAIC00MCw3ICs0MCwxNSBAQAogICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtfdGVzdG5hbWV9CiAgICAgICBQUk9QRVJUSUVTIENPTVBJTEVfREVGSU5JVElPTlMgIlVOSVRURVNUUyIpCiAKLSAgYWRkX3Rlc3QoTkFNRSAke190ZXN0bmFtZX0KLSAgICAgICAgICAgQ09NTUFORCAke190ZXN0bmFtZX0gImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIKLSAgICAgICAgICAgKQorICBpZihISURFU19DVVJMX1BSSVZBVEVfU1lNQk9MUykKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtfdGVzdG5hbWV9CisJICBQUk9QRVJUSUVTCisJCUVYQ0xVREVfRlJPTV9BTEwgVFJVRQorCQlFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRCBUUlVFCisJKQorICBlbHNlKCkKKyAgICBhZGRfdGVzdChOQU1FICR7X3Rlc3RuYW1lfQorICAgICAgICAgICAgIENPTU1BTkQgJHtfdGVzdG5hbWV9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iCisgICAgKQorICBlbmRpZigpCiBlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvTWFrZWZpbGUuYW0gYi90ZXN0cy91bml0L01ha2VmaWxlLmFtCmluZGV4IGQ0OTg3ZDYuLjcwNzVmOGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3VuaXQvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvdW5pdC9NYWtlZmlsZS5hbQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvdGVzdHMvbGlidGVzdAogZW5kaWYKIAotRVhUUkFfRElTVCA9IE1ha2VmaWxlLmluYworRVhUUkFfRElTVCA9IE1ha2VmaWxlLmluYyBDTWFrZUxpc3RzLnR4dAogCiAjIFByZXZlbnQgTElCUyBmcm9tIGJlaW5nIHVzZWQgZm9yIGFsbCBsaW5rIHRhcmdldHMKIExJQlMgPSAkKEJMQU5LX0FUX01BS0VUSU1FKQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC9NYWtlZmlsZS5pbmMgYi90ZXN0cy91bml0L01ha2VmaWxlLmluYwppbmRleCBjNWExNTIzLi5lN2RiOTZmIDEwMDY0NAotLS0gYS90ZXN0cy91bml0L01ha2VmaWxlLmluYworKysgYi90ZXN0cy91bml0L01ha2VmaWxlLmluYwpAQCAtNyw3ICs3LDcgQEAKICMgVGhlc2UgYXJlIGFsbCB1bml0IHRlc3QgcHJvZ3JhbXMKIFVOSVRQUk9HUyA9IHVuaXQxMzAwIHVuaXQxMzAxIHVuaXQxMzAyIHVuaXQxMzAzIHVuaXQxMzA0IHVuaXQxMzA1IHVuaXQxMzA3CVwKICB1bml0MTMwOCB1bml0MTMwOSB1bml0MTMzMCB1bml0MTM5NCB1bml0MTM5NSB1bml0MTM5NiB1bml0MTM5NyB1bml0MTM5OAlcCi0gdW5pdDE2MDAgdW5pdDE2MDEgdW5pdDE2MDIgdW5pdDE2MDMgdW5pdDE2MDQKKyB1bml0MTYwMCB1bml0MTYwMSB1bml0MTYwMiB1bml0MTYwMyB1bml0MTYwNCB1bml0MTYwNQogCiB1bml0MTMwMF9TT1VSQ0VTID0gdW5pdDEzMDAuYyAkKFVOSVRGSUxFUykKIHVuaXQxMzAwX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKQEAgLTcyLDMgKzcyLDUgQEAKIHVuaXQxNjA0X1NPVVJDRVMgPSB1bml0MTYwNC5jICQoVU5JVEZJTEVTKQogdW5pdDE2MDRfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAkKExJQk1FVEFMSU5LX0NQUEZMQUdTKQogCit1bml0MTYwNV9TT1VSQ0VTID0gdW5pdDE2MDUuYyAkKFVOSVRGSUxFUykKK3VuaXQxNjA1X0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdW5pdDEzMDEuYyBiL3Rlc3RzL3VuaXQvdW5pdDEzMDEuYwppbmRleCA5MjgwNzZlLi5hYTg2MTAxIDEwMDY0NAotLS0gYS90ZXN0cy91bml0L3VuaXQxMzAxLmMKKysrIGIvdGVzdHMvdW5pdC91bml0MTMwMS5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgImN1cmxjaGVjay5oIgogCi0jaW5jbHVkZSAic3RyZXF1YWwuaCIKKyNpbmNsdWRlICJzdHJjYXNlLmgiCiAKIHN0YXRpYyBDVVJMY29kZSB1bml0X3NldHVwKHZvaWQpIHtyZXR1cm4gQ1VSTEVfT0s7fQogc3RhdGljIHZvaWQgdW5pdF9zdG9wKHZvaWQpIHt9CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3VuaXQxMzAzLmMgYi90ZXN0cy91bml0L3VuaXQxMzAzLmMKaW5kZXggYTRiZDU5OC4uYzM5ZTE0NyAxMDA2NDQKLS0tIGEvdGVzdHMvdW5pdC91bml0MTMwMy5jCisrKyBiL3Rlc3RzL3VuaXQvdW5pdDEzMDMuYwpAQCAtNjksMTIgKzY5LDEyIEBACiB9OwogCiBVTklUVEVTVF9TVEFSVAoreworICBzdHJ1Y3QgdGltZXZhbCBub3c7CisgIGxvbmcgdGltZW91dDsKKyAgdW5zaWduZWQgaW50IGk7CiAKLXN0cnVjdCB0aW1ldmFsIG5vdzsKLWxvbmcgdGltZW91dDsKLXVuc2lnbmVkIGludCBpOwotCi1jb25zdCBzdHJ1Y3QgdGltZXRlc3QgcnVuW10gPSB7CisgIGNvbnN0IHN0cnVjdCB0aW1ldGVzdCBydW5bXSA9IHsKICAgLyogYm90aCB0aW1lb3V0cyBzZXQsIG5vdCBjb25uZWN0aW5nICovCiAgIHtCQVNFICsgNCwgMCwgICAgICAxMDAwMCwgODAwMCwgRkFMU0UsIDYwMDAsICI2IHNlY29uZHMgc2hvdWxkIGJlIGxlZnQifSwKICAge0JBU0UgKyA0LCA5OTAwMDAsIDEwMDAwLCA4MDAwLCBGQUxTRSwgNTAxMCwgIjUwMTAgbXMgc2hvdWxkIGJlIGxlZnQifSwKQEAgLTEyNiwyMSArMTI2LDIwIEBACiAgIC8qIGJvdGggdGltZW91dHMgc2V0LCBjb25uZWN0aW5nLCBjb25uZWN0IHRpbWVvdXQgdGhlIGxvbmdlciBvbmUgKi8KICAge0JBU0UgKyA0LCAwLCAgICAgIDEwMDAwLCAxMjAwMCwgVFJVRSwgNjAwMCwgIjYgc2Vjb25kcyBzaG91bGQgYmUgbGVmdCJ9LAogCi19OworICB9OwogCi0vKiB0aGlzIGlzIHRoZSBwcmV0ZW5kZWQgc3RhcnQgdGltZSBvZiB0aGUgdHJhbnNmZXIgKi8KLWRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUudHZfc2VjID0gQkFTRTsKLWRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUudHZfdXNlYyA9IDA7Ci1kYXRhLT5wcm9ncmVzcy50X3N0YXJ0b3AudHZfc2VjID0gQkFTRTsKLWRhdGEtPnByb2dyZXNzLnRfc3RhcnRvcC50dl91c2VjID0gMDsKKyAgLyogdGhpcyBpcyB0aGUgcHJldGVuZGVkIHN0YXJ0IHRpbWUgb2YgdGhlIHRyYW5zZmVyICovCisgIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRzaW5nbGUudHZfc2VjID0gQkFTRTsKKyAgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydHNpbmdsZS50dl91c2VjID0gMDsKKyAgZGF0YS0+cHJvZ3Jlc3MudF9zdGFydG9wLnR2X3NlYyA9IEJBU0U7CisgIGRhdGEtPnByb2dyZXNzLnRfc3RhcnRvcC50dl91c2VjID0gMDsKIAotZm9yKGk9MDsgaSA8IHNpemVvZihydW4pL3NpemVvZihydW5bMF0pOyBpKyspIHsKLSAgTk9XKHJ1bltpXS5ub3dfcywgcnVuW2ldLm5vd191cyk7Ci0gIFRJTUVPVVRTKHJ1bltpXS50aW1lb3V0X21zLCBydW5baV0uY29ubmVjdHRpbWVvdXRfbXMpOwotICB0aW1lb3V0ID0gIEN1cmxfdGltZWxlZnQoZGF0YSwgJm5vdywgcnVuW2ldLmNvbm5lY3RpbmcpOwotICBpZih0aW1lb3V0ICE9IHJ1bltpXS5yZXN1bHQpCi0gICAgZmFpbChydW5baV0uY29tbWVudCk7CisgIGZvcihpPTA7IGkgPCBzaXplb2YocnVuKS9zaXplb2YocnVuWzBdKTsgaSsrKSB7CisgICAgTk9XKHJ1bltpXS5ub3dfcywgcnVuW2ldLm5vd191cyk7CisgICAgVElNRU9VVFMocnVuW2ldLnRpbWVvdXRfbXMsIHJ1bltpXS5jb25uZWN0dGltZW91dF9tcyk7CisgICAgdGltZW91dCA9ICBDdXJsX3RpbWVsZWZ0KGRhdGEsICZub3csIHJ1bltpXS5jb25uZWN0aW5nKTsKKyAgICBpZih0aW1lb3V0ICE9IHJ1bltpXS5yZXN1bHQpCisgICAgICBmYWlsKHJ1bltpXS5jb21tZW50KTsKKyAgfQogfQotCi0KIFVOSVRURVNUX1NUT1AKZGlmZiAtLWdpdCBhL3Rlc3RzL3VuaXQvdW5pdDEzMDQuYyBiL3Rlc3RzL3VuaXQvdW5pdDEzMDQuYwppbmRleCAxMWJiYTM5Li44MzM3NWY1IDEwMDY0NAotLS0gYS90ZXN0cy91bml0L3VuaXQxMzA0LmMKKysrIGIvdGVzdHMvdW5pdC91bml0MTMwNC5jCkBAIC00OCw3ICs0OCw3IEBACiBVTklUVEVTVF9TVEFSVAogICBpbnQgcmVzdWx0OwogCi0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBmaWxlbmFtZTEgPSAibG9nL25ldHJjMTMwNCI7CisgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmlsZW5hbWUxID0gImxvZy9uZXRyYzEzMDQiOwogICBtZW1jcHkoZmlsZW5hbWUsIGZpbGVuYW1lMSwgc3RybGVuKGZpbGVuYW1lMSkpOwogCiAgIC8qCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3VuaXQxMzA4LmMgYi90ZXN0cy91bml0L3VuaXQxMzA4LmMKaW5kZXggOTY4YmNmZi4uNWMxYTAwOCAxMDA2NDQKLS0tIGEvdGVzdHMvdW5pdC91bml0MTMwOC5jCisrKyBiL3Rlc3RzL3VuaXQvdW5pdDEzMDguYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX3xcX19fL3xffCBcX1xfX19fX3wKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDExLCBEYW5pZWwgU3RlbmJlcmcsIDxkYW5pZWxAaGF4eC5zZT4sIGV0IGFsLgorICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxNiwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAogICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uIFRoZSB0ZXJtcwpAQCAtNDIsOCArNDIsOCBAQAogCiBVTklUVEVTVF9TVEFSVAogICBpbnQgcmM7Ci0gIHN0cnVjdCBjdXJsX2h0dHBwb3N0KiBwb3N0ID0gTlVMTDsKLSAgc3RydWN0IGN1cmxfaHR0cHBvc3QqIGxhc3QgPSBOVUxMOworICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqcG9zdCA9IE5VTEw7CisgIHN0cnVjdCBjdXJsX2h0dHBwb3N0ICpsYXN0ID0gTlVMTDsKICAgc2l6ZV90IHRvdGFsX3NpemUgPSAwOwogICBjaGFyIGJ1ZmZlcltdID0gInRlc3QgYnVmZmVyIjsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC91bml0MTYwMi5jIGIvdGVzdHMvdW5pdC91bml0MTYwMi5jCmluZGV4IGM2N2MwYTUuLjVmMWVlOWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3VuaXQvdW5pdDE2MDIuYworKysgYi90ZXN0cy91bml0L3VuaXQxNjAyLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIHZvaWQgbXlkdG9yKHZvaWQgKnApCiB7Ci0gIGludCAqcHRyID0gKGludCopcDsKKyAgaW50ICpwdHIgPSAoaW50ICopcDsKICAgZnJlZShwdHIpOwogfQogCmRpZmYgLS1naXQgYS90ZXN0cy91bml0L3VuaXQxNjA0LmMgYi90ZXN0cy91bml0L3VuaXQxNjA0LmMKaW5kZXggMjQyYmUwMC4uNWYxZWE5NSAxMDA2NDQKLS0tIGEvdGVzdHMvdW5pdC91bml0MTYwNC5jCisrKyBiL3Rlc3RzL3VuaXQvdW5pdDE2MDQuYwpAQCAtNDIsNyArNDIsOCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU4zMikKIAotc3RhdGljIGNoYXIgKmdldGZsYWdzdHIoaW50IGZsYWdzKSB7CitzdGF0aWMgY2hhciAqZ2V0ZmxhZ3N0cihpbnQgZmxhZ3MpCit7CiAgIGNoYXIgKmJ1ZiA9IG1hbGxvYygyNTYpOwogICBmYWlsX3VubGVzcyhidWYsICJvdXQgb2YgbWVtb3J5Iik7CiAgIHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMsJXMsJXMsJXMiLApAQCAtNTMsNyArNTQsOCBAQAogICByZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgY2hhciAqZ2V0Y3VybGNvZGVzdHIoaW50IGNjKSB7CitzdGF0aWMgY2hhciAqZ2V0Y3VybGNvZGVzdHIoaW50IGNjKQorewogICBjaGFyICpidWYgPSBtYWxsb2MoMjU2KTsKICAgZmFpbF91bmxlc3MoYnVmLCAib3V0IG9mIG1lbW9yeSIpOwogICBzbnByaW50ZihidWYsIDI1NiwgIiVzICglZCkiLApkaWZmIC0tZ2l0IGEvbGliL3N0cmVxdWFsLmggYi90ZXN0cy91bml0L3VuaXQxNjA1LmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gbGliL3N0cmVxdWFsLmgKcmVuYW1lIHRvIHRlc3RzL3VuaXQvdW5pdDE2MDUuYwppbmRleCBmZjU2ZGY1Li5jODA3Y2IzIDEwMDY0NAotLS0gYS9saWIvc3RyZXF1YWwuaAorKysgYi90ZXN0cy91bml0L3VuaXQxNjA1LmMKQEAgLTEsNSArMSwzIEBACi0jaWZuZGVmIEhFQURFUl9DVVJMX1NUUkVRVUFMX0gKLSNkZWZpbmUgSEVBREVSX0NVUkxfU1RSRVFVQUxfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF8gX19fXyAgXwogICogIFByb2plY3QgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwKQEAgLTcsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXwogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk4IC0gMjAxMywgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LCBldCBhbC4KKyAqIENvcHlyaWdodCAoQykgMTk5OCAtIDIwMTYsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPiwgZXQgYWwuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKICAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgdGVybXMKQEAgLTIxLDExICsxOSwzMSBAQAogICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN1cmxjaGVjay5oIgogCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSAibGxpc3QuaCIKIAotI2RlZmluZSBzdHJlcXVhbChhLGIpIGN1cmxfc3RyZXF1YWwoYSxiKQotI2RlZmluZSBzdHJuZXF1YWwoYSxiLGMpIGN1cmxfc3RybmVxdWFsKGEsYixjKQorc3RhdGljIENVUkxjb2RlIHVuaXRfc2V0dXAodm9pZCkKK3sKKyAgcmV0dXJuIENVUkxFX09LOworfQogCi0jZW5kaWYgLyogSEVBREVSX0NVUkxfU1RSRVFVQUxfSCAqLworc3RhdGljIHZvaWQgdW5pdF9zdG9wKHZvaWQpCit7CiAKK30KKworVU5JVFRFU1RfU1RBUlQKKyAgQ1VSTCAqZWFzeSA9IGN1cmxfZWFzeV9pbml0KCk7CisgIGludCBsZW47CisgIGNoYXIgKmVzYzsKKworICBlc2MgPSBjdXJsX2Vhc3lfZXNjYXBlKGVhc3ksICIiLCAtMSk7CisgIGZhaWxfdW5sZXNzKGVzYyA9PSBOVUxMLCAibmVnYXRpdmUgc3RyaW5nIGxlbmd0aCBjYW4ndCB3b3JrIik7CisKKyAgZXNjID0gY3VybF9lYXN5X3VuZXNjYXBlKGVhc3ksICIlNDElNDElNDElNDEiLCAtMSwgJmxlbik7CisgIGZhaWxfdW5sZXNzKGVzYyA9PSBOVUxMLCAibmVnYXRpdmUgc3RyaW5nIGxlbmd0aCBjYW4ndCB3b3JrIik7CisKKyAgY3VybF9lYXN5X2NsZWFudXAoZWFzeSk7CisKK1VOSVRURVNUX1NUT1AKZGlmZiAtLWdpdCBhL3dpbmJ1aWxkL01ha2VmaWxlLnZjIGIvd2luYnVpbGQvTWFrZWZpbGUudmMKaW5kZXggNGY5MGU0YS4uOWVmN2MxNCAxMDA2NDQKLS0tIGEvd2luYnVpbGQvTWFrZWZpbGUudmMKKysrIGIvd2luYnVpbGQvTWFrZWZpbGUudmMKQEAgLTIxLDkgKzIxLDExIEBACiAhTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJpZXMgY2FuIGJlIGZldGNoZWQgYXQgaHR0cDovL3BlY2wyLnBocC5uZXQvZG93bmxvYWRzL3BocC13aW5kb3dzLWJ1aWxkcy8KICFNRVNTQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuY29tcHJlc3MgdGhlbSBpbnRvIHRoZSBkZXBzIGZvbGRlci4KICFNRVNTQUdFICAgV0lUSF9TU0w9PGRsbCBvciBzdGF0aWM+ICAgICAtIEVuYWJsZSBPcGVuU1NMIHN1cHBvcnQsIERMTCBvciBzdGF0aWMKKyFNRVNTQUdFICAgV0lUSF9OR0hUVFAyPTxkbGwgb3Igc3RhdGljPiAtIEVuYWJsZSBIVFRQLzIgc3VwcG9ydCwgRExMIG9yIHN0YXRpYwogIU1FU1NBR0UgICBXSVRIX0NBUkVTPTxkbGwgb3Igc3RhdGljPiAgIC0gRW5hYmxlIGMtYXJlcyBzdXBwb3J0LCBETEwgb3Igc3RhdGljCiAhTUVTU0FHRSAgIFdJVEhfWkxJQj08ZGxsIG9yIHN0YXRpYz4gICAgLSBFbmFibGUgemxpYiBzdXBwb3J0LCBETEwgb3Igc3RhdGljCiAhTUVTU0FHRSAgIFdJVEhfU1NIMj08ZGxsIG9yIHN0YXRpYz4gICAgLSBFbmFibGUgbGliU1NIMiBzdXBwb3J0LCBETEwgb3Igc3RhdGljCishTUVTU0FHRSAgIFdJVEhfTUJFRFRMUz08ZGxsIG9yIHN0YXRpYz4gLSBFbmFibGUgbWJlZFRMUyBzdXBwb3J0LCBETEwgb3Igc3RhdGljCiAhTUVTU0FHRSAgIEVOQUJMRV9JRE49PHllcyBvciBubz4gICAgICAgLSBFbmFibGUgdXNlIG9mIFdpbmRvd3MgSUROIEFQSXMsIGRlZmF1bHRzIHRvIHllcwogIU1FU1NBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZXMgV2luZG93cyBWaXN0YSBvciBsYXRlciwgb3IgaW5zdGFsbGF0aW9uIGZyb206CiAhTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL2VuLXVzL2Rvd25sb2FkL2RldGFpbHMuYXNweD9pZD03MzQKQEAgLTU0LDcgKzU2LDEwIEBACiAhRU5ESUYKIAogIyBkZWZhdWx0IG9wdGlvbnMKKwogIUlGTkRFRiBNQUNISU5FCisjIE5vdGU6IG5tYWtlIG1hZ2ljYWxseSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBQUk9DRVNTT1JfQVJDSElURUNUVVJFIGZyb20gIkFNRDY0IgorIyB0byAieDg2IiB3aGVuIGJ1aWxkaW5nIGluIGEgMzIgYml0IGJ1aWxkIGVudmlyb25tZW50IG9uIGEgNjQgYml0IG1hY2hpbmUuCiAhSUYgIiQoUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRSkiPT0iQU1ENjQiCiBNQUNISU5FID0geDY0CiAhRUxTRQpAQCAtODcsNyArOTIsNyBAQAogIUVORElGCiAKICFJRk5ERUYgRU5BQkxFX1dJTlNTTAotIUlGREVGIFdJVEhfU1NMCishSUYgREVGSU5FRChXSVRIX1NTTCkgfHwgREVGSU5FRChXSVRIX01CRURUTFMpCiBVU0VfV0lOU1NMID0gZmFsc2UKICFFTFNFCiBVU0VfV0lOU1NMID0gJChVU0VfU1NQSSkKQEAgLTEwOCw2ICsxMTMsMzQgQEAKIFNTTCAgICAgPSBzdGF0aWMKICFFTkRJRgogCishSUYgIiQoRU5BQkxFX05HSFRUUDIpIj09InllcyIKKyMgY29tcGF0aWJpbGl0eSBiaXQsIFdJVEhfTkdIVFRQMiBpcyB0aGUgY29ycmVjdCBmbGFnCitXSVRIX05HSFRUUDIgPSBkbGwKK1VTRV9OR0hUVFAyICA9IHRydWUKK05HSFRUUDIgICAgICA9IGRsbAorIUVMU0VJRiAiJChXSVRIX05HSFRUUDIpIj09ImRsbCIKK1VTRV9OR0hUVFAyID0gdHJ1ZQorTkdIVFRQMiAgICAgPSBkbGwKKyFFTFNFSUYgIiQoV0lUSF9OR0hUVFAyKSI9PSJzdGF0aWMiCitVU0VfTkdIVFRQMiA9IHRydWUKK05HSFRUUDIgICAgID0gc3RhdGljCishRU5ESUYKKworIUlGTkRFRiBVU0VfTkdIVFRQMgorVVNFX05HSFRUUDIgPSBmYWxzZQorIUVORElGCisKKyFJRiAiJChXSVRIX01CRURUTFMpIj09ImRsbCIgfHwgIiQoV0lUSF9NQkVEVExTKSI9PSJzdGF0aWMiCitVU0VfTUJFRFRMUyA9IHRydWUKK01CRURUTFMgICAgID0gJChXSVRIX01CRURUTFMpCishRU5ESUYKKworIUlGICggIiQoVVNFX1NTTCkiPT0idHJ1ZSIgJiYgIiQoVVNFX1dJTlNTTCkiPT0idHJ1ZSIgKSBcCisgfHwgKCAiJChVU0VfU1NMKSI9PSJ0cnVlIiAmJiAiJChVU0VfTUJFRFRMUykiPT0idHJ1ZSIgKSBcCisgfHwgKCAiJChVU0VfTUJFRFRMUykiPT0idHJ1ZSIgJiYgIiQoVVNFX1dJTlNTTCkiPT0idHJ1ZSIgKQorIUVSUk9SIFNTTCwgTUJFRFRMUyBhbmQgV0lOU1NMIGFyZSBtdXR1YWwgZXhjbHVzaXZlIG9wdGlvbnMuCishRU5ESUYKKwogIUlGICIkKFdJVEhfQ0FSRVMpIj09ImRsbCIKIFVTRV9DQVJFUyA9IHRydWUKIENBUkVTICAgICA9IGRsbApAQCAtMTUwLDYgKzE4MywxMCBAQAogQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLXNzbC0kKFNTTCkKICFFTkRJRgogCishSUYgIiQoVVNFX01CRURUTFMpIj09InRydWUiCitDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktbWJlZHRscy0kKE1CRURUTFMpCishRU5ESUYKKwogIUlGICIkKFVTRV9DQVJFUykiPT0idHJ1ZSIKIENPTkZJR19OQU1FX0xJQiA9ICQoQ09ORklHX05BTUVfTElCKS1jYXJlcy0kKENBUkVTKQogIUVORElGCkBAIC0xNzQsNiArMjExLDEwIEBACiBDT05GSUdfTkFNRV9MSUIgPSAkKENPTkZJR19OQU1FX0xJQiktd2luc3NsCiAhRU5ESUYKIAorIUlGICIkKFVTRV9OR0hUVFAyKSI9PSJ0cnVlIgorQ09ORklHX05BTUVfTElCID0gJChDT05GSUdfTkFNRV9MSUIpLW5naHR0cDItJChOR0hUVFAyKQorIUVORElGCisKICFNRVNTQUdFIGNvbmZpZ3VyYXRpb24gbmFtZTogJChDT05GSUdfTkFNRV9MSUIpCiAKIEJVSUxEX0RJUj0uLi9idWlsZHMvJChDT05GSUdfTkFNRV9MSUIpCkBAIC0xOTcsMTAgKzIzOCwxNCBAQAogCiAJQFNFVCBDT05GSUdfTkFNRV9MSUI9JChDT05GSUdfTkFNRV9MSUIpCiAJQFNFVCBNQUNISU5FPSQoTUFDSElORSkKKwlAU0VUIFVTRV9OR0hUVFAyPSQoVVNFX05HSFRUUDIpCiAJQFNFVCBVU0VfSUROPSQoVVNFX0lETikKIAlAU0VUIFVTRV9JUFY2PSQoVVNFX0lQVjYpCiAJQFNFVCBVU0VfU1NQST0kKFVTRV9TU1BJKQogCUBTRVQgVVNFX1dJTlNTTD0kKFVTRV9XSU5TU0wpCisjIGNvbXBhdGliaWxpdHkgYml0CisJQFNFVCBXSVRIX05HSFRUUDI9JChXSVRIX05HSFRUUDIpCisKIAlAJChNQUtFKSAvTk9MT0dPIC9GIE1ha2VmaWxlQnVpbGQudmMKIAogY29weV9mcm9tX2xpYjoKZGlmZiAtLWdpdCBhL3dpbmJ1aWxkL01ha2VmaWxlQnVpbGQudmMgYi93aW5idWlsZC9NYWtlZmlsZUJ1aWxkLnZjCmluZGV4IDYyYTU3MTkuLjkzNTE0NDAgMTAwNjQ0Ci0tLSBhL3dpbmJ1aWxkL01ha2VmaWxlQnVpbGQudmMKKysrIGIvd2luYnVpbGQvTWFrZWZpbGVCdWlsZC52YwpAQCAtNDcsMTMgKzQ3LDE5IEBACiBXSU5CVUlMRF9ESVI9YGNkYA0KIFpJUCAgICAgICAgPSB6aXAuZXhlDQogDQorIyBBbGxvdyBjaGFuZ2luZyBDIGNvbXBpbGVyIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDQyAoZGVmYXVsdCBjbC5leGUpDQorIyBUaGlzIGNvbW1hbmQgbWFjcm8gaXMgbm90IHNldCBieSBkZWZhdWx0OiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zOTMzNzQyLmFzcHgNCishSWYgIiQoQ0MpIiA9PSAiIg0KK0NDID0gY2wuZXhlDQorIUVuZGlmDQorDQogIUlGICIkKFZDKSI9PSI2Ig0KLUNDX05PREVCVUcgID0gY2wuZXhlIC9PMiAvRE5ERUJVRw0KLUNDX0RFQlVHICAgID0gY2wuZXhlIC9PZCAvR20gL1ppIC9EX0RFQlVHIC9HWg0KK0NDX05PREVCVUcgID0gJChDQykgL08yIC9ETkRFQlVHDQorQ0NfREVCVUcgICAgPSAkKENDKSAvT2QgL0dtIC9aaSAvRF9ERUJVRyAvR1oNCiBDRkxBR1MgICAgID0gL0kuIC9JLi4vbGliIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvR1ggL0RXSU4zMiAvWVggL0ZEIC9jIC9EQlVJTERJTkdfTElCQ1VSTA0KICFFTFNFDQotQ0NfTk9ERUJVRyAgPSBjbC5leGUgL08yIC9ETkRFQlVHDQotQ0NfREVCVUcgICAgPSBjbC5leGUgL09kIC9EX0RFQlVHIC9SVEMxIC9aNyAvTERkIC9XMw0KK0NDX05PREVCVUcgID0gJChDQykgL08yIC9ETkRFQlVHDQorQ0NfREVCVUcgICAgPSAkKENDKSAvT2QgL0RfREVCVUcgL1JUQzEgL1o3IC9MRGQgL1czDQogQ0ZMQUdTICAgICAgPSAvSS4gL0kgLi4vbGliIC9JLi4vaW5jbHVkZSAvbm9sb2dvIC9XMyAvRUhzYyAvRFdJTjMyIC9GRCAvYyAvREJVSUxESU5HX0xJQkNVUkwNCiAhRU5ESUYNCiANCkBAIC0xMTcsOCArMTIzLDIyIEBACiBTU0wgICAgICAgICAgPSBzdGF0aWMNCiAhRU5ESUYNCiANCishSUZOREVGIFVTRV9OR0hUVFAyDQorVVNFX05HSFRUUDIgID0gZmFsc2UNCishRU5ESUYNCisNCiAhSUZERUYgVVNFX1NTTA0KIFNTTF9DRkxBR1MgICA9IC9EVVNFX09QRU5TU0wgL0kiJChERVZFTF9JTkNMVURFKS9vcGVuc3NsIg0KKw0KKyFJRiAiJChVU0VfTkdIVFRQMikiPT0ieWVzIg0KK1VTRV9OR0hUVFAyICA9IHRydWUNCishRU5ESUYNCisNCishSUYgIiQoVVNFX05HSFRUUDIpIj09InRydWUiDQorU1NMX0NGTEFHUyAgID0gJChTU0xfQ0ZMQUdTKSAvRFVTRV9OR0hUVFAyDQorU1NMX0xJQlMgICAgID0gJChTU0xfTElCUykgbmdodHRwMi5saWINCishRU5ESUYNCisNCiAhRU5ESUYNCiANCiAhSUYgIiQoV0lUSF9DQVJFUykiPT0iZGxsIg0KQEAgLTI2OCwyMCArMjg4LDE0IEBACiANCiAhSUYgIiQoREVCVUcpIj09InllcyINCiBSQ19GTEFHUyA9IC9kREVCVUdCVUlMRD0xIC9GbyAkQCAkKExJQkNVUkxfU1JDX0RJUilcbGliY3VybC5yYw0KLUNDICAgICAgICAgICAgICA9ICQoQ0NfREVCVUcpICQoUlRMSUJfREVCVUcpDQotDQotQ1VSTF9DQyAgICAgICAgID0gJChDQykNCitDVVJMX0NDICAgICAgID0gJChDQ19ERUJVRykgJChSVExJQl9ERUJVRykNCiBDVVJMX1JDX0ZMQUdTID0gL2kuLi9pbmNsdWRlIC9kREVCVUdCVUlMRD0xIC9GbyAkQCAkKENVUkxfU1JDX0RJUilcY3VybC5yYw0KICFFTFNFDQogUkNfRkxBR1MgPSAvZERFQlVHQlVJTEQ9MCAvRm8gJEAgJChMSUJDVVJMX1NSQ19ESVIpXGxpYmN1cmwucmMNCi1DQyAgICAgICAgICAgICAgPSAkKENDX05PREVCVUcpICQoUlRMSUIpDQotDQotQ1VSTF9DQyAgICAgICAgID0gJChDQykNCitDVVJMX0NDICAgICAgID0gJChDQ19OT0RFQlVHKSAkKFJUTElCKQ0KIENVUkxfUkNfRkxBR1MgPSAvaS4uL2luY2x1ZGUgL2RERUJVR0JVSUxEPTAgL0ZvICRAICQoQ1VSTF9TUkNfRElSKVxjdXJsLnJjDQogIUVORElGDQogDQotQ1VSTF9DQyA9ICQoQ1VSTF9DQykgJChDVVJMX0NGTEFHUykNCi0NCiAhSUYgIiQoQVNfRExMKSIgPT0gInRydWUiDQogDQogTE5LICAgICAgID0gJChMTktETEwpICQoV0lOX0xJQlMpIC9vdXQ6JChMSUJfRElST0JKKVwkKFRBUkdFVCkNCkBAIC0zMDksNyArMzIzLDcgQEAKIFBEQiAgICAgID0gJChQREJfTkFNRV9TVEFUSUMpDQogIUVORElGDQogTE5LICAgICAgPSAkKExOS0xJQikgJChXSU5fTElCUykgL291dDokKExJQl9ESVJPQkopXCQoVEFSR0VUKQ0KLUNDICAgICAgID0gJChDQykgJChDRkxBR1NfTElCQ1VSTF9TVEFUSUMpDQorQ1VSTF9DQyAgPSAkKENVUkxfQ0MpICQoQ0ZMQUdTX0xJQkNVUkxfU1RBVElDKQ0KIA0KICMgQVNfRExMDQogIUVORElGDQpAQCAtNDAzLDYgKzQxNyw3IEBACiANCiAkKFRBUkdFVCk6ICQoTElCX09CSlMpICQoTElCX0RJUk9CSikgJChESVNURElSKQ0KIAlAZWNobyBVc2luZyBTU0w6ICQoVVNFX1NTTCkNCisJQGVjaG8gVXNpbmcgTkdIVFRQMjogJChVU0VfTkdIVFRQMikNCiAJQGVjaG8gVXNpbmcgYy1hcmVzOiAkKFVTRV9DQVJFUykNCiAJQGVjaG8gVXNpbmcgU1NIMjogJChVU0VfU1NIMikNCiAJQGVjaG8gVXNpbmcgWkxJQjogJChVU0VfWkxJQikNCkBAIC00NDksMTMgKzQ2NCwxMyBAQAogLlNVRkZJWEVTOiAuYyAub2JqIC5yZXMNCiANCiB7JChMSUJDVVJMX1NSQ19ESVIpXH0uY3skKExJQl9ESVJPQkopXH0ub2JqOg0KLQkkKENDKSAkKENGTEFHUykgL0ZvIiRAIiAgJDwNCisJJChDVVJMX0NDKSAkKENGTEFHUykgL0ZvIiRAIiAgJDwNCiANCiB7JChMSUJDVVJMX1NSQ19ESVIpXHZhdXRoXH0uY3skKExJQl9ESVJPQkopXHZhdXRoXH0ub2JqOg0KLQkkKENDKSAkKENGTEFHUykgL0ZvIiRAIiAgJDwNCisJJChDVVJMX0NDKSAkKENGTEFHUykgL0ZvIiRAIiAgJDwNCiANCiB7JChMSUJDVVJMX1NSQ19ESVIpXHZ0bHNcfS5jeyQoTElCX0RJUk9CSilcdnRsc1x9Lm9iajoNCi0JJChDQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQorCSQoQ1VSTF9DQykgJChDRkxBR1MpIC9GbyIkQCIgICQ8DQogDQogJChMSUJfRElST0JKKVxsaWJjdXJsLnJlczogJChMSUJDVVJMX1NSQ19ESVIpXGxpYmN1cmwucmMNCiAJcmMgJChSQ19GTEFHUykNCkBAIC00ODEsNyArNDk2LDYgQEAKIA0KIENVUkxfRlJPTV9MSUJDVVJMPSQoQ1VSTF9ESVJPQkopXHRvb2xfaHVnZWhlbHAub2JqIFwNCiAgJChDVVJMX0RJUk9CSilcbm9uYmxvY2sub2JqIFwNCi0gJChDVVJMX0RJUk9CSilccmF3c3RyLm9iaiBcDQogICQoQ1VSTF9ESVJPQkopXHN0cnRvb2ZmdC5vYmogXA0KICAkKENVUkxfRElST0JKKVx3YXJubGVzcy5vYmoNCiAgDQpAQCAtNDkwLDE0ICs1MDQsMTIgQEAKIAkkKE1BTklGRVNUVE9PTCkNCiANCiB7JChDVVJMX1NSQ19ESVIpXH0uY3skKENVUkxfRElST0JKKVx9Lm9iajoNCi0JJChDQykgJChDVVJMX0NGTEFHUykgL0ZvIiRAIiAgJDwNCisJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiICAkPA0KIA0KICQoQ1VSTF9ESVJPQkopXHRvb2xfaHVnZWhlbHAub2JqOiAkKENVUkxfU1JDX0RJUilcdG9vbF9odWdlaGVscC5jDQogCSQoQ1VSTF9DQykgJChDVVJMX0NGTEFHUykgL1ptMjAwIC9GbyIkQCIgJChDVVJMX1NSQ19ESVIpXHRvb2xfaHVnZWhlbHAuYw0KICQoQ1VSTF9ESVJPQkopXG5vbmJsb2NrLm9iajogLi4vbGliL25vbmJsb2NrLmMNCiAJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9ub25ibG9jay5jDQotJChDVVJMX0RJUk9CSilccmF3c3RyLm9iajogLi4vbGliL3Jhd3N0ci5jDQotCSQoQ1VSTF9DQykgJChDVVJMX0NGTEFHUykgL0ZvIiRAIiAuLi9saWIvcmF3c3RyLmMNCiAkKENVUkxfRElST0JKKVxzdHJ0b29mZnQub2JqOiAuLi9saWIvc3RydG9vZmZ0LmMNCiAJJChDVVJMX0NDKSAkKENVUkxfQ0ZMQUdTKSAvRm8iJEAiIC4uL2xpYi9zdHJ0b29mZnQuYw0KICQoQ1VSTF9ESVJPQkopXHdhcm5sZXNzLm9iajogLi4vbGliL3dhcm5sZXNzLmMNCg==