ZGlmZiAtLWdpdCBhL3dtX2hvb2tzL21zdmN3YXJuaW5nLmggYi93bV9ob29rcy9tc3Zjd2FybmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzk4YzMKLS0tIC9kZXYvbnVsbAorKysgYi93bV9ob29rcy9tc3Zjd2FybmluZy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIFJlYWxWTkMgTHRkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgIAorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQyNDQgKSAvLyBsb3NzIG9mIGRhdGEgZS5nLiBpbnQgdG8gY2hhcgorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDgwMCApIC8vIGZvcmNpbmcgYm9vbCAndHJ1ZScgb3IgJ2ZhbHNlJwpkaWZmIC0tZ2l0IGEvd21faG9va3MvcmVzb3VyY2UuaCBiL3dtX2hvb2tzL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4ZjY0NgotLS0gL2Rldi9udWxsCisrKyBiL3dtX2hvb2tzL3Jlc291cmNlLmgKQEAgLTAsMCArMSwxNSBAQAorLy97e05PX0RFUEVOREVOQ0lFU319CisvLyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgorLy8gVXNlZCBieSB3bV9ob29rcy5yYworLy8KKworLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKKy8vIAorI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKyNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDEwMQorI2RlZmluZSBfQVBTX05FWFRfQ09NTUFORF9WQUxVRSAgICAgICAgIDQwMDAxCisjZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAwMAorI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3dtX2hvb2tzL3dtX2hvb2tzLmN4eCBiL3dtX2hvb2tzL3dtX2hvb2tzLmN4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvd21faG9va3Mvd21faG9va3MuY3h4CkBAIC0wLDAgKzEsNDYyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBSZWFsVk5DIEx0ZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKy8vIC09LSB3bV9ob29rcy5jeHgKKy8vCisvLyBXaW5kb3cgTWVzc2FnZSBIb29rcyBEeW5hbWljIExpbmsgbGlicmFyeQorCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA0MDAKKyNpbmNsdWRlIDx0Y2hhci5oPgorCisjaW5jbHVkZSA8d21faG9va3Mvd21faG9va3MuaD4KKworVUlOVCBXTV9IS19QaW5nVGhyZWFkID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKF9UKCJSRkIuV01fSG9va3MuUGluZ1RocmVhZCIpKTsKKworVUlOVCBXTV9IS19XaW5kb3dDaGFuZ2VkID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKF9UKCJSRkIuV01fSG9va3MuV2luZG93Q2hhbmdlZCIpKTsKK1VJTlQgV01fSG9va3NfV2luZG93Q2hhbmdlZCgpIHsKKyAgcmV0dXJuIFdNX0hLX1dpbmRvd0NoYW5nZWQ7Cit9CisKK1VJTlQgV01fSEtfV2luZG93Q2xpZW50QXJlYUNoYW5nZWQgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoX1QoIlJGQi5XTV9Ib29rcy5XaW5kb3dDbGllbnRBcmVhQ2hhbmdlZCIpKTsKK1VJTlQgV01fSG9va3NfV2luZG93Q2xpZW50QXJlYUNoYW5nZWQoKSB7CisgIHJldHVybiBXTV9IS19XaW5kb3dDbGllbnRBcmVhQ2hhbmdlZDsKK30KKworVUlOVCBXTV9IS19XaW5kb3dCb3JkZXJDaGFuZ2VkID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKF9UKCJSRkIuV01fSG9va3MuV2luZG93Qm9yZGVyQ2hhbmdlZCIpKTsKK1VJTlQgV01fSG9va3NfV2luZG93Qm9yZGVyQ2hhbmdlZCgpIHsKKyAgcmV0dXJuIFdNX0hLX1dpbmRvd0JvcmRlckNoYW5nZWQ7Cit9CisKK1VJTlQgV01fSEtfUmVjdGFuZ2xlQ2hhbmdlZCA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZShfVCgiUkZCLldNX0hvb2tzLlJlY3RhbmdsZUNoYW5nZWQiKSk7CitVSU5UIFdNX0hvb2tzX1JlY3RhbmdsZUNoYW5nZWQoKSB7CisgIHJldHVybiBXTV9IS19SZWN0YW5nbGVDaGFuZ2VkOworfQorCitVSU5UIFdNX0hLX0N1cnNvckNoYW5nZWQgPSBSZWdpc3RlcldpbmRvd01lc3NhZ2UoX1QoIlJGQi5XTV9Ib29rcy5DdXJzb3JDaGFuZ2VkIikpOworVUlOVCBXTV9Ib29rc19DdXJzb3JDaGFuZ2VkKCkgeworICByZXR1cm4gV01fSEtfQ3Vyc29yQ2hhbmdlZDsKK30KKworI2lmZGVmIF9ERUJVRworVUlOVCBXTV9IS19EaWFnbm9zdGljID0gUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKF9UKCJSRkIuV01fSG9va3MuRGlhZ25vc3RpYyIpKTsKK1VJTlQgV01fSG9va3NfRGlhZ25vc3RpYygpIHsKKyAgcmV0dXJuIFdNX0hLX0RpYWdub3N0aWM7Cit9CisjZW5kaWYKKworQVRPTSBBVE9NX1BvcHVwX1NlbGVjdGlvbiA9IEdsb2JhbEFkZEF0b20oX1QoIlJGQi5XTV9Ib29rcy5Qb3B1cFNlbGVjdGlvbkF0b20iKSk7CisKKy8vCisvLyAtPS0gRExMIGVudHJ5IHBvaW50CisvLworCitISU5TVEFOQ0UgZGxsX2luc3RhbmNlID0gMDsKKworQk9PTCBXSU5BUEkgRGxsTWFpbihIQU5ETEUgaW5zdGFuY2UsIFVMT05HIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKSB7CisgIHN3aXRjaCAocmVhc29uKSB7CisgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgIGRsbF9pbnN0YW5jZSA9IChISU5TVEFOQ0UpaW5zdGFuY2U7CisgICAgcmV0dXJuIFRSVUU7CisgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgorICAgIHJldHVybiBUUlVFOworICBjYXNlIERMTF9USFJFQURfREVUQUNIOgorICAgIFdNX0hvb2tzX1JlbW92ZShHZXRDdXJyZW50VGhyZWFkSWQoKSk7CisgICAgcmV0dXJuIFRSVUU7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIFRSVUU7CisgIH07Cit9CisKKy8vCisvLyAtPS0gRGlzcGxheSB1cGRhdGUgaG9va3MKKy8vCisKKyNwcmFnbWEgZGF0YV9zZWcoIi5XTV9Ib29rc19TaGFyZWQiKQorRFdPUkQgaG9va19vd25lciA9IDA7CitEV09SRCBob29rX3RhcmdldCA9IDA7CitISE9PSyBob29rX0NhbGxXbmRQcm9jID0gMDsKK0hIT09LIGhvb2tfQ2FsbFduZFByb2NSZXQgPSAwOworSEhPT0sgaG9va19HZXRNZXNzYWdlID0gMDsKK0hIT09LIGhvb2tfRGlhbG9nTWVzc2FnZSA9IDA7CitCT09MIGVuYWJsZV9jdXJzb3Jfc2hhcGUgPSBGQUxTRTsKK0hDVVJTT1IgY3Vyc29yID0gMDsKKyNpZmRlZiBfREVCVUcKK1VJTlQgZGlhZ25vc3RpY19taW49MTsKK1VJTlQgZGlhZ25vc3RpY19tYXg9MDsKKyNlbmRpZgorI3ByYWdtYSBkYXRhX3NlZygpCisKKyNpZmRlZiBfREVCVUcKK0RMTEVYUE9SVCB2b2lkIFdNX0hvb2tzX1NldERpYWdub3N0aWNSYW5nZShVSU5UIG1pbiwgVUlOVCBtYXgpIHsKKyAgZGlhZ25vc3RpY19taW4gPSBtaW47IGRpYWdub3N0aWNfbWF4PW1heDsKK30KKyNlbmRpZgorCitib29sIE5vdGlmeUhvb2tPd25lcihVSU5UIGV2ZW50LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSB7CisgIGlmIChob29rX293bmVyKSB7CisgICAgcmV0dXJuIFBvc3RUaHJlYWRNZXNzYWdlKGhvb2tfb3duZXIsIGV2ZW50LCB3UGFyYW0sIGxQYXJhbSkhPTA7CisgICAgLyoKKyAgICBpZiAobGFzdF9ldmVudCkKKyAgICAgIHJldHVybiBQb3N0VGhyZWFkTWVzc2FnZShob29rX293bmVyLCBsYXN0X2V2ZW50LCBsYXN0X3dQYXJhbSwgbGFzdF9sUGFyYW0pOworICAgIGxhc3RfZXZlbnQgPSBldmVudDsKKyAgICBsYXN0X3dQYXJhbSA9IHdQYXJhbTsKKyAgICBsYXN0X2xQYXJhbSA9IGxQYXJhbTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICAqLworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOb3RpZnlXaW5kb3coSFdORCBod25kLCBVSU5UIG1zZykgeworICByZXR1cm4gTm90aWZ5SG9va093bmVyKFdNX0hLX1dpbmRvd0NoYW5nZWQsIG1zZywgKExQQVJBTSlod25kKTsKK30KK2Jvb2wgTm90aWZ5V2luZG93Qm9yZGVyKEhXTkQgaHduZCwgVUlOVCBtc2cpIHsKKyAgcmV0dXJuIE5vdGlmeUhvb2tPd25lcihXTV9IS19XaW5kb3dCb3JkZXJDaGFuZ2VkLCBtc2csIChMUEFSQU0paHduZCk7Cit9Citib29sIE5vdGlmeVdpbmRvd0NsaWVudEFyZWEoSFdORCBod25kLCBVSU5UIG1zZykgeworICByZXR1cm4gTm90aWZ5SG9va093bmVyKFdNX0hLX1dpbmRvd0NsaWVudEFyZWFDaGFuZ2VkLCBtc2csIChMUEFSQU0paHduZCk7Cit9Citib29sIE5vdGlmeVJlY3RhbmdsZShSRUNUKiByZWN0KSB7CisgIFdQQVJBTSB3ID0gTUFLRUxPTkcoKFNIT1JUKXJlY3QtPmxlZnQsIChTSE9SVClyZWN0LT50b3ApOworICBMUEFSQU0gbCA9IE1BS0VMT05HKChTSE9SVClyZWN0LT5yaWdodCwgKFNIT1JUKXJlY3QtPmJvdHRvbSk7CisgIHJldHVybiBOb3RpZnlIb29rT3duZXIoV01fSEtfUmVjdGFuZ2xlQ2hhbmdlZCwgdywgbCk7Cit9Citib29sIE5vdGlmeUN1cnNvcihIQ1VSU09SIGN1cnNvcikgeworICByZXR1cm4gTm90aWZ5SG9va093bmVyKFdNX0hLX0N1cnNvckNoYW5nZWQsIDAsIChMUEFSQU0pY3Vyc29yKTsKK30KKwordm9pZCBQcm9jZXNzV2luZG93TWVzc2FnZShVSU5UIG1zZywgSFdORCB3bmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIHsKKyNpZmRlZiBfREVCVUcKKyAgaWYgKChtc2cgPj0gZGlhZ25vc3RpY19taW4pICYmIChtc2cgPD0gZGlhZ25vc3RpY19tYXgpKQorICAgIFBvc3RUaHJlYWRNZXNzYWdlKGhvb2tfb3duZXIsIFdNX0hLX0RpYWdub3N0aWMsIG1zZywgKExQQVJBTSl3bmQpOworI2VuZGlmCisgIGlmICghSXNXaW5kb3dWaXNpYmxlKHduZCkpIHJldHVybjsKKyAgc3dpdGNoIChtc2cpIHsKKworICAgIC8vIC09LSBCb3JkZXIgdXBkYXRlIGV2ZW50cworCWNhc2UgV01fTkNQQUlOVDoKKwljYXNlIFdNX05DQUNUSVZBVEU6CisgICAgTm90aWZ5V2luZG93Qm9yZGVyKHduZCwgbXNnKTsKKwkJYnJlYWs7CisKKyAgICAvLyAtPS0gQ2xpZW50IGFyZWEgdXBkYXRlIGV2ZW50cworCWNhc2UgQk1fU0VUQ0hFQ0s6CisJY2FzZSBCTV9TRVRTVEFURToKKwljYXNlIEVNX1NFVFNFTDoKKwljYXNlIFdNX0NIQVI6CisJY2FzZSBXTV9FTkFCTEU6CisJY2FzZSBXTV9LRVlVUDoKKwljYXNlIFdNX0xCVVRUT05VUDoKKwljYXNlIFdNX01CVVRUT05VUDoKKwljYXNlIFdNX1BBTEVUVEVDSEFOR0VEOgorCWNhc2UgV01fUkJVVFRPTlVQOgorCWNhc2UgV01fU1lTQ09MT1JDSEFOR0U6CisJY2FzZSBXTV9TRVRURVhUOgorICBjYXNlIFdNX1NFVEZPQ1VTOgorCS8vY2FzZSBXTV9USU1FUjoKKyAgICBOb3RpZnlXaW5kb3dDbGllbnRBcmVhKHduZCwgbXNnKTsKKyAgICBicmVhazsKKwljYXNlIFdNX0hTQ1JPTEw6CisJY2FzZSBXTV9WU0NST0xMOgorCQlpZiAoKChpbnQpIExPV09SRCh3UGFyYW0pID09IFNCX1RIVU1CVFJBQ0spIHx8ICgoaW50KSBMT1dPUkQod1BhcmFtKSA9PSBTQl9FTkRTQ1JPTEwpKQorCQkJTm90aWZ5V2luZG93KHduZCwgbXNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOgorICBjYXNlIFdNX0RFU1RST1k6CisgICAgeworICAgICAgUkVDVCB3cmVjdDsKKyAgICAgIGlmIChHZXRXaW5kb3dSZWN0KHduZCwgJndyZWN0KSkgeworICAgICAgICBOb3RpZnlSZWN0YW5nbGUoJndyZWN0KTsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKwljYXNlIFdNX1BBSU5UOgorICAgIC8vICoqKiBjb3VsZCBpbXByb3ZlIHRoaXMKKyAgICBOb3RpZnlXaW5kb3dDbGllbnRBcmVhKHduZCwgbXNnKTsKKyAgICBicmVhazsKKworICAgIC8vIEhhbmRsZSBwb3AtdXAgbWVudXMgYXBwZWFyaW5nCisgIGNhc2UgNDgyOgorICAgIE5vdGlmeVdpbmRvdyh3bmQsIDQ4Mik7CisgICAgYnJlYWs7CisKKyAgICAvLyBIYW5kbGUgcG9wLXVwIG1lbnVzIGhhdmluZyBpdGVtcyBzZWxlY3RlZAorCWNhc2UgNDg1OgorCQl7CisJCQlIQU5ETEUgcHJvcCA9IEdldFByb3Aod25kLCAoTFBDVFNUUikgTUFLRUxPTkcoQVRPTV9Qb3B1cF9TZWxlY3Rpb24sIDApKTsKKyAgICAgIGlmIChwcm9wICE9IChIQU5ETEUpIHdQYXJhbSkgeworICAgICAgICBOb3RpZnlXaW5kb3cod25kLCA0ODUpOworCQkJCVNldFByb3Aod25kLAorCQkJCQkoTFBDVFNUUikgTUFLRUxPTkcoQVRPTV9Qb3B1cF9TZWxlY3Rpb24sIDApLAorCQkJCQkoSEFORExFKSB3UGFyYW0pOworCQkJfQorCQl9CisJCWJyZWFrOworCisgIGNhc2UgV01fTkNNT1VTRU1PVkU6CisgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgIGlmIChlbmFibGVfY3Vyc29yX3NoYXBlKSB7CisgICAgICBIQ1VSU09SIG5ld19jdXJzb3IgPSBHZXRDdXJzb3IoKTsKKyAgICAgIGlmIChuZXdfY3Vyc29yICE9IGN1cnNvcikgeworICAgICAgICBjdXJzb3IgPSBuZXdfY3Vyc29yOworICAgICAgICBOb3RpZnlDdXJzb3IoY3Vyc29yKTsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgICAvKiAqKioKKwkJaWYgKHByZl91c2VfR2V0VXBkYXRlUmVjdCkKKwkJeworCQkJSFJHTiByZWdpb247CisJCQlyZWdpb24gPSBDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApOworCisJCQkvLyBHZXQgdGhlIGFmZmVjdGVkIHJlZ2lvbgorCQkJaWYgKEdldFVwZGF0ZVJnbihoV25kLCByZWdpb24sIEZBTFNFKSAhPSBFUlJPUikKKwkJCXsKKwkJCQlpbnQgYnVmZnNpemU7CisJCQkJVUlOVCB4OworCQkJCVJHTkRBVEEgKmJ1ZmY7CisJCQkJUE9JTlQgVG9wTGVmdDsKKworCQkJCS8vIEdldCB0aGUgdG9wLWxlZnQgcG9pbnQgb2YgdGhlIGNsaWVudCBhcmVhCisJCQkJVG9wTGVmdC54ID0gMDsKKwkJCQlUb3BMZWZ0LnkgPSAwOworCQkJCWlmICghQ2xpZW50VG9TY3JlZW4oaFduZCwgJlRvcExlZnQpKQorCQkJCQlicmVhazsKKworCQkJCS8vIEdldCB0aGUgc2l6ZSBvZiBidWZmZXIgcmVxdWlyZWQKKwkJCQlidWZmc2l6ZSA9IEdldFJlZ2lvbkRhdGEocmVnaW9uLCAwLCAwKTsKKwkJCQlpZiAoYnVmZnNpemUgIT0gMCkKKwkJCQl7CisJCQkJCWJ1ZmYgPSAoUkdOREFUQSAqKSBuZXcgQllURSBbYnVmZnNpemVdOworCQkJCQlpZiAoYnVmZiA9PSBOVUxMKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLy8gTm93IGdldCB0aGUgcmVnaW9uIGRhdGEKKwkJCQkJaWYoR2V0UmVnaW9uRGF0YShyZWdpb24sIGJ1ZmZzaXplLCBidWZmKSkKKwkJCQkJeworCQkJCQkJZm9yICh4PTA7IHg8KGJ1ZmYtPnJkaC5uQ291bnQpOyB4KyspCisJCQkJCQl7CisJCQkJCQkJLy8gT2J0YWluIHRoZSByZWN0YW5nbGVzIGZyb20gdGhlIGxpc3QKKwkJCQkJCQlSRUNUICp1cmVjdCA9IChSRUNUICopICgoKEJZVEUgKikgYnVmZikgKyBzaXplb2YoUkdOREFUQUhFQURFUikgKyAoeCAqIHNpemVvZihSRUNUKSkpOworCQkJCQkJCVNlbmREZWZlcnJlZFVwZGF0ZVJlY3QoCisJCQkJCQkJCWhXbmQsCisJCQkJCQkJCShTSE9SVCkgKFRvcExlZnQueCArIHVyZWN0LT5sZWZ0KSwKKwkJCQkJCQkJKFNIT1JUKSAoVG9wTGVmdC55ICsgdXJlY3QtPnRvcCksCisJCQkJCQkJCShTSE9SVCkgKFRvcExlZnQueCArIHVyZWN0LT5yaWdodCksCisJCQkJCQkJCShTSE9SVCkgKFRvcExlZnQueSArIHVyZWN0LT5ib3R0b20pCisJCQkJCQkJCSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlkZWxldGUgW10gYnVmZjsKKwkJCQl9CisJCQl9CisKKwkJCS8vIE5vdyBmcmVlIHRoZSByZWdpb24KKwkJCWlmIChyZWdpb24gIT0gTlVMTCkKKwkJCQlEZWxldGVPYmplY3QocmVnaW9uKTsKKwkJfQorICAgICovCisgIH07Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgSG9va0NhbGxXbmRQcm9jKGludCBuQ29kZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgeworICBpZiAobkNvZGUgPT0gSENfQUNUSU9OKSB7CisgICAgQ1dQU1RSVUNUKiBpbmZvID0gKENXUFNUUlVDVCopIGxQYXJhbTsKKyAgICBQcm9jZXNzV2luZG93TWVzc2FnZShpbmZvLT5tZXNzYWdlLCBpbmZvLT5od25kLCBpbmZvLT53UGFyYW0sIGluZm8tPmxQYXJhbSk7CisgIH0KKyAgcmV0dXJuIENhbGxOZXh0SG9va0V4KGhvb2tfQ2FsbFduZFByb2MsIG5Db2RlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgSG9va0NhbGxXbmRQcm9jUmV0KGludCBuQ29kZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgeworICBpZiAobkNvZGUgPT0gSENfQUNUSU9OKSB7CisgICAgQ1dQUkVUU1RSVUNUKiBpbmZvID0gKENXUFJFVFNUUlVDVCopIGxQYXJhbTsKKyAgICBQcm9jZXNzV2luZG93TWVzc2FnZShpbmZvLT5tZXNzYWdlLCBpbmZvLT5od25kLCBpbmZvLT53UGFyYW0sIGluZm8tPmxQYXJhbSk7CisgIH0KKyAgcmV0dXJuIENhbGxOZXh0SG9va0V4KGhvb2tfQ2FsbFduZFByb2NSZXQsIG5Db2RlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgSG9va0dldE1lc3NhZ2UoaW50IG5Db2RlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSB7CisgIGlmIChuQ29kZSA9PSBIQ19BQ1RJT04pIHsKKyAgICBpZiAod1BhcmFtICYgUE1fUkVNT1ZFKSB7CisgICAgICBNU0cqIG1zZyA9IChNU0cqKSBsUGFyYW07CisgICAgICBQcm9jZXNzV2luZG93TWVzc2FnZShtc2ctPm1lc3NhZ2UsIG1zZy0+aHduZCwgbXNnLT53UGFyYW0sIG1zZy0+bFBhcmFtKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIENhbGxOZXh0SG9va0V4KGhvb2tfR2V0TWVzc2FnZSwgbkNvZGUsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBIb29rRGlhbG9nTWVzc2FnZShpbnQgbkNvZGUsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIHsKKyAgaWYgKG5Db2RlID09IEhDX0FDVElPTikgeworICAgIE1TRyogbXNnID0gKE1TRyopIGxQYXJhbTsKKyAgICBQcm9jZXNzV2luZG93TWVzc2FnZShtc2ctPm1lc3NhZ2UsIG1zZy0+aHduZCwgbXNnLT53UGFyYW0sIG1zZy0+bFBhcmFtKTsKKyAgfQorICByZXR1cm4gQ2FsbE5leHRIb29rRXgoaG9va19EaWFsb2dNZXNzYWdlLCBuQ29kZSwgd1BhcmFtLCBsUGFyYW0pOworfQorCisvLyAtIFdNX0hvb2tzX0luc3RhbGwKKworQk9PTCBXTV9Ib29rc19JbnN0YWxsKERXT1JEIG93bmVyLCBEV09SRCB0aHJlYWQpIHsKKyAgLy8gLSBBcmUgdGhlcmUgYWxyZWFkeSBob29rcyBzZXQ/CisgIGlmIChob29rX293bmVyKSB7CisgICAgaWYgKCFQb3N0VGhyZWFkTWVzc2FnZShob29rX293bmVyLCBXTV9IS19QaW5nVGhyZWFkLCAwLCAwKSkgeworICAgICAgV01fSG9va3NfUmVtb3ZlKGhvb2tfb3duZXIpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisKKyAgLy8gLSBJbml0aWFsaXNlIHRoZSBob29rcworICBob29rX293bmVyID0gb3duZXI7CisgIGhvb2tfdGFyZ2V0ID0gdGhyZWFkOworCisgIGhvb2tfQ2FsbFduZFByb2MgPSBTZXRXaW5kb3dzSG9va0V4KFdIX0NBTExXTkRQUk9DLCBIb29rQ2FsbFduZFByb2MsIGRsbF9pbnN0YW5jZSwgdGhyZWFkKTsKKyAgLy9ob29rX0NhbGxXbmRQcm9jUmV0ID0gU2V0V2luZG93c0hvb2tFeChXSF9DQUxMV05EUFJPQ1JFVCwgSG9va0NhbGxXbmRQcm9jUmV0LCBkbGxfaW5zdGFuY2UsIHRocmVhZCk7CisgIGhvb2tfR2V0TWVzc2FnZSA9IFNldFdpbmRvd3NIb29rRXgoV0hfR0VUTUVTU0FHRSwgSG9va0dldE1lc3NhZ2UsIGRsbF9pbnN0YW5jZSwgdGhyZWFkKTsKKyAgaG9va19EaWFsb2dNZXNzYWdlID0gU2V0V2luZG93c0hvb2tFeChXSF9TWVNNU0dGSUxURVIsIEhvb2tEaWFsb2dNZXNzYWdlLCBkbGxfaW5zdGFuY2UsIHRocmVhZCk7CisKKyAgaWYgKCFob29rX0NhbGxXbmRQcm9jIC8qfHwgIWhvb2tfQ2FsbFduZFByb2NSZXQqLyB8fCAhaG9va19HZXRNZXNzYWdlIHx8ICFob29rX0RpYWxvZ01lc3NhZ2UpIHsKKyAgICBXTV9Ib29rc19SZW1vdmUob3duZXIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvLyAtIFdNX0hvb2tzX1JlbW92ZQorCitCT09MIFdNX0hvb2tzX1JlbW92ZShEV09SRCBvd25lcikgeworICBpZiAob3duZXIgIT0gaG9va19vd25lcikgcmV0dXJuIEZBTFNFOworICBpZiAoaG9va19DYWxsV25kUHJvYykgeworICAgIFVuaG9va1dpbmRvd3NIb29rRXgoaG9va19DYWxsV25kUHJvYyk7CisgICAgaG9va19DYWxsV25kUHJvYyA9IDA7CisgIH0KKyAgaWYgKGhvb2tfQ2FsbFduZFByb2NSZXQpIHsKKyAgICBVbmhvb2tXaW5kb3dzSG9va0V4KGhvb2tfQ2FsbFduZFByb2NSZXQpOworICAgIGhvb2tfQ2FsbFduZFByb2NSZXQgPSAwOworICB9CisgIGlmIChob29rX0dldE1lc3NhZ2UpIHsKKyAgICBVbmhvb2tXaW5kb3dzSG9va0V4KGhvb2tfR2V0TWVzc2FnZSk7CisgICAgaG9va19HZXRNZXNzYWdlID0gMDsKKyAgfQorICBpZiAoaG9va19EaWFsb2dNZXNzYWdlKSB7CisgICAgVW5ob29rV2luZG93c0hvb2tFeChob29rX0RpYWxvZ01lc3NhZ2UpOworICAgIGhvb2tfRGlhbG9nTWVzc2FnZSA9IDA7CisgIH0KKyAgaG9va19vd25lciA9IDA7CisgIGhvb2tfdGFyZ2V0ID0gMDsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8vCisvLyAtPS0gVXNlciBpbnB1dCBob29rcworLy8KKworI3ByYWdtYSBkYXRhX3NlZygiLldNX0hvb2tzX1NoYXJlZCIpCitISE9PSyBob29rX2tleWJvYXJkID0gMDsKK0hIT09LIGhvb2tfcG9pbnRlciA9IDA7Citib29sIGVuYWJsZV9yZWFsX3B0ciA9IHRydWU7Citib29sIGVuYWJsZV9zeW50aF9wdHIgPSB0cnVlOworYm9vbCBlbmFibGVfcmVhbF9rYmQgPSB0cnVlOworYm9vbCBlbmFibGVfc3ludGhfa2JkID0gdHJ1ZTsKKyNwcmFnbWEgZGF0YV9zZWcoKQorCisjaWZkZWYgV0hfS0VZQk9BUkRfTEwKK0xSRVNVTFQgQ0FMTEJBQ0sgSG9va0tleWJvYXJkSG9vayhpbnQgbkNvZGUsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIHsKKyAgaWYgKG5Db2RlID49IDApIHsKKyAgICBLQkRMTEhPT0tTVFJVQ1QqIGluZm8gPSAoS0JETExIT09LU1RSVUNUKikgbFBhcmFtOworICAgIGJvb2wgcmVhbF9ldmVudCA9IChpbmZvLT5mbGFncyAmIExMS0hGX0lOSkVDVEVEKSA9PSAwOworICAgIGlmICgocmVhbF9ldmVudCAmJiAhZW5hYmxlX3JlYWxfa2JkKSB8fAorICAgICAgKCFyZWFsX2V2ZW50ICYmICFlbmFibGVfc3ludGhfa2JkKSkgeworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiBDYWxsTmV4dEhvb2tFeChob29rX2tleWJvYXJkLCBuQ29kZSwgd1BhcmFtLCBsUGFyYW0pOworfQorCitMUkVTVUxUIENBTExCQUNLIEhvb2tQb2ludGVySG9vayhpbnQgbkNvZGUsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIHsKKyAgaWYgKG5Db2RlID49IDApIHsKKyAgICBNU0xMSE9PS1NUUlVDVCogaW5mbyA9IChNU0xMSE9PS1NUUlVDVCopIGxQYXJhbTsKKyAgICBib29sIHJlYWxfZXZlbnQgPSAoaW5mby0+ZmxhZ3MgJiBMTE1IRl9JTkpFQ1RFRCkgPT0gMDsKKyAgICBpZiAoKHJlYWxfZXZlbnQgJiYgIWVuYWJsZV9yZWFsX3B0cikgfHwKKyAgICAgICghcmVhbF9ldmVudCAmJiAhZW5hYmxlX3N5bnRoX3B0cikpIHsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gQ2FsbE5leHRIb29rRXgoaG9va19rZXlib2FyZCwgbkNvZGUsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworYm9vbCBSZWZyZXNoSW5wdXRIb29rcygpIHsKKyAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgYm9vbCBzZXRfcHRyX2hvb2sgPSAhZW5hYmxlX3JlYWxfcHRyIHx8ICFlbmFibGVfc3ludGhfcHRyOworICBib29sIHNldF9rYmRfaG9vayA9ICFlbmFibGVfcmVhbF9rYmQgfHwgIWVuYWJsZV9zeW50aF9rYmQ7CisgIGlmIChob29rX2tleWJvYXJkICYmICFzZXRfa2JkX2hvb2spIHsKKyAgICBVbmhvb2tXaW5kb3dzSG9va0V4KGhvb2tfa2V5Ym9hcmQpOworICAgIGhvb2tfa2V5Ym9hcmQgPSAwOworICB9CisgIGlmIChob29rX3BvaW50ZXIgJiYgIXNldF9wdHJfaG9vaykgeworICAgIFVuaG9va1dpbmRvd3NIb29rRXgoaG9va19wb2ludGVyKTsKKyAgICBob29rX3BvaW50ZXIgPSAwOworICB9CisgIGlmICghaG9va19rZXlib2FyZCAmJiBzZXRfa2JkX2hvb2spIHsKKyAgICBob29rX2tleWJvYXJkID0gU2V0V2luZG93c0hvb2tFeChXSF9LRVlCT0FSRF9MTCwgSG9va0tleWJvYXJkSG9vaywgZGxsX2luc3RhbmNlLCAwKTsKKyAgICBpZiAoIWhvb2tfa2V5Ym9hcmQpIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgfQorICBpZiAoIWhvb2tfcG9pbnRlciAmJiBzZXRfcHRyX2hvb2spIHsKKyAgICBob29rX3BvaW50ZXIgPSBTZXRXaW5kb3dzSG9va0V4KFdIX01PVVNFX0xMLCBIb29rUG9pbnRlckhvb2ssIGRsbF9pbnN0YW5jZSwgMCk7CisgICAgaWYgKCFob29rX3BvaW50ZXIpIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgfQorICByZXR1cm4gc3VjY2VzczsKK30KKyNlbHNlCisjcHJhZ21hIG1lc3NhZ2UoIldBUk5JTkc6IGxvdy1sZXZlbCBtb3VzZSBhbmQga2V5Ym9hcmQgaG9va3Mgbm90IHN1cHBvcnRlZCIpCisjZW5kaWYKKworLy8gLSBXTV9Ib29rc19FbmFibGVSZWFsSW5wdXRzCisKK0JPT0wgV01fSG9va3NfRW5hYmxlUmVhbElucHV0cyhCT09MIHBvaW50ZXIsIEJPT0wga2V5Ym9hcmQpIHsKKyNpZmRlZiBXSF9LRVlCT0FSRF9MTAorICBlbmFibGVfcmVhbF9wdHIgPSBwb2ludGVyIT0wOworICBlbmFibGVfcmVhbF9rYmQgPSBrZXlib2FyZCE9MDsKKyAgcmV0dXJuIFJlZnJlc2hJbnB1dEhvb2tzKCk7CisjZWxzZQorICByZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworLy8gLSBXTV9Ib29rc19FbmFibGVTeW50aElucHV0cworCitCT09MIFdNX0hvb2tzX0VuYWJsZVN5bnRoSW5wdXRzKEJPT0wgcG9pbnRlciwgQk9PTCBrZXlib2FyZCkgeworI2lmZGVmIFdIX0tFWUJPQVJEX0xMCisgIGVuYWJsZV9zeW50aF9wdHIgPSBwb2ludGVyIT0wOworICBlbmFibGVfc3ludGhfa2JkID0ga2V5Ym9hcmQhPTA7CisgIHJldHVybiBSZWZyZXNoSW5wdXRIb29rcygpOworI2Vsc2UKKyAgcmV0dXJuIEZBTFNFOworI2VuZGlmCit9CisKKy8vIC0gV01fSG9va3NfRW5hYmxlQ3Vyc29yU2hhcGUKKworQk9PTCBXTV9Ib29rc19FbmFibGVDdXJzb3JTaGFwZShCT09MIGVuYWJsZSkgeworICBlbmFibGVfY3Vyc29yX3NoYXBlID0gZW5hYmxlOworICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS93bV9ob29rcy93bV9ob29rcy5kZWYgYi93bV9ob29rcy93bV9ob29rcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxOThhYgotLS0gL2Rldi9udWxsCisrKyBiL3dtX2hvb2tzL3dtX2hvb2tzLmRlZgpAQCAtMCwwICsxLDUgQEAKK0xJQlJBUlkgICAgICAid21faG9va3MiCitERVNDUklQVElPTiAgJ1dpbmRvdyBNZXNzYWdlIEhvb2tzIER5bmFtaWMgTGluayBMaWJyYXJ5JworCitTRUNUSU9OUworCS5XTV9Ib29rc19TaGFyZWQgcmVhZCB3cml0ZSBzaGFyZWQKZGlmZiAtLWdpdCBhL3dtX2hvb2tzL3dtX2hvb2tzLmRzcCBiL3dtX2hvb2tzL3dtX2hvb2tzLmRzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzVjMWZkCi0tLSAvZGV2L251bGwKKysrIGIvd21faG9va3Mvd21faG9va3MuZHNwCkBAIC0wLDAgKzEsMTQ5IEBACisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IndtX2hvb2tzIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXdtX2hvb2tzIC0gV2luMzIgRGVidWcgVW5pY29kZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJ3bV9ob29rcy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIndtX2hvb2tzLm1hayIgQ0ZHPSJ3bV9ob29rcyAtIFdpbjMyIERlYnVnIFVuaWNvZGUiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAid21faG9va3MgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ3bV9ob29rcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ3bV9ob29rcyAtIFdpbjMyIERlYnVnIFVuaWNvZGUiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIiIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAid21faG9va3MgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLi4vUmVsZWFzZSIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldNX0hPT0tTX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvSSAiLi4iIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9VU1JETEwiIC9EICJXTV9IT09LU19FWFBPUlRTIiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4ODA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndtX2hvb2tzIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uL0RlYnVnIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldNX0hPT0tTX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uIiAvRkkibXN2Y3dhcm5pbmcuaCIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX1VTUkRMTCIgL0QgIldNX0hPT0tTX0VYUE9SVFMiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDgwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4ODA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcHJvZmlsZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAid21faG9va3MgLSBXaW4zMiBEZWJ1ZyBVbmljb2RlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAid21faG9va3NfX19XaW4zMl9EZWJ1Z19Vbmljb2RlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAid21faG9va3NfX19XaW4zMl9EZWJ1Z19Vbmljb2RlIgorIyBQUk9QIEJBU0UgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4uXERlYnVnX1VuaWNvZGUiCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiRGVidWdfVW5pY29kZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uIiAvRkkibXN2Y3dhcm5pbmcuaCIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX1VTUkRMTCIgL0QgIldNX0hPT0tTX0VYUE9SVFMiIC9EICJXSU4zMiIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLiIgL0ZJIm1zdmN3YXJuaW5nLmgiIC9EICJfV0lORE9XUyIgL0QgIl9VU1JETEwiIC9EICJXTV9IT09LU19FWFBPUlRTIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfVU5JQ09ERSIgL0QgIlVOSUNPREUiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4ODA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg4MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAid21faG9va3MgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJ3bV9ob29rcyAtIFdpbjMyIERlYnVnIgorIyBOYW1lICJ3bV9ob29rcyAtIFdpbjMyIERlYnVnIFVuaWNvZGUiCisjIEJlZ2luIEdyb3VwICJTb3VyY2UgRmlsZXMiCisKKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS5cd21faG9va3MuY3h4CisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx3bV9ob29rcy5kZWYKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uXHdtX2hvb2tzLnJjCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyIKKworIyBQUk9QIERlZmF1bHRfRmlsdGVyICJoO2hwcDtoeHg7aG07aW5sIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Llx3bV9ob29rcy5oCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgR3JvdXAKKyMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIgorCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSIKKyMgRW5kIEdyb3VwCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL3dtX2hvb2tzL3dtX2hvb2tzLmggYi93bV9ob29rcy93bV9ob29rcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZmY0YmUKLS0tIC9kZXYvbnVsbAorKysgYi93bV9ob29rcy93bV9ob29rcy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBSZWFsVk5DIEx0ZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKy8vIC09LSB3bV9ob29rcy5oCisvLworLy8gV2luZG93IE1lc3NhZ2UgSG9va3MgRHluYW1pYyBMaW5rIGxpYnJhcnkKKy8vCisvLyBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IHRoZSBXTUhvb2tzIGNsYXNzIGluIHJmYl93aW4zMiB0byBob29rIHRoZQorLy8gd2luZG93cyBvbiB0aGUgZGVza3RvcCBhbmQgcmVjZWl2ZSBub3RpZmljYXRpb25zIG9mIGNoYW5nZXMgaW4gdGhlaXIKKy8vIHN0YXRlLgorCisjaWZuZGVmIF9fV01fSE9PS1NfSF9fCisjZGVmaW5lIF9fV01fSE9PS1NfSF9fCisKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2RlZmluZSBETExFWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisKK2V4dGVybiAiQyIKK3sKKyAgLy8KKyAgLy8gLT0tIERpc3BsYXkgaG9vayBtZXNzYWdlIHR5cGVzCisgIC8vCisKKyAgRExMRVhQT1JUIFVJTlQgV01fSG9va3NfV2luZG93Q2hhbmdlZCgpOworICBETExFWFBPUlQgVUlOVCBXTV9Ib29rc19XaW5kb3dCb3JkZXJDaGFuZ2VkKCk7CisgIERMTEVYUE9SVCBVSU5UIFdNX0hvb2tzX1dpbmRvd0NsaWVudEFyZWFDaGFuZ2VkKCk7CisgIERMTEVYUE9SVCBVSU5UIFdNX0hvb2tzX1JlY3RhbmdsZUNoYW5nZWQoKTsKKyAgRExMRVhQT1JUIFVJTlQgV01fSG9va3NfQ3Vyc29yQ2hhbmdlZCgpOworCisgIC8vCisgIC8vIC09LSBEaXNwbGF5IHVwZGF0ZSBob29rcworICAvLworCisgIC8vIC0gV01fSG9va3NfSW5zdGFsbAorICAvLyBBZGQgdGhlIGN1cnJlbnQgdGhyZWFkIHRvIHRoZSBsaXN0IG9mIHRocmVhZHMgdGhhdCB3aWxsIHJlY2VpdmUKKyAgLy8gbm90aWZpY2F0aW9ucyBvZiBjaGFuZ2VzIHRvIHRoZSBkaXNwbGF5LgorICAvLyBJZiB0aHJlYWQgaXMgTlVMTCB0aGVuIHRoZSBlbnRpcmUgZGlzcGxheSB3aWxsIGJlIGhvb2tlZC4KKyAgLy8gSWYgdGhyZWFkIGlzICFOVUxMIGFuZCB0aGVuIHRoZSBzcGVjaWZpZWQKKyAgLy8gdGhyZWFkIHdpbGwgYmUgaG9va2VkLgorICAvLyBFYWNoIHRocmVhZCBtYXkgb25seSByZWdpc3RlciBvbmUgaG9vayBhdCBhIHRpbWUuCisgIC8vIFRoZSBjYWxsIHdpbGwgZmFpbCAocmV0dXJuIEZBTFNFKSBpZiB0aGUgdGhyZWFkIGFscmVhZHkgaGFzIGhvb2tzCisgIC8vIHNldCwgb3IgaWYgdGhlIGhvb2tzIGNhbm5vdCBiZSBzZXQsIG9yIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJzLgorCisgIERMTEVYUE9SVCBCT09MIFdNX0hvb2tzX0luc3RhbGwoRFdPUkQgb3duZXIsIERXT1JEIHRocmVhZCk7CisKKyAgLy8gLSBXTV9Ib29rc19SZW1vdmUKKyAgLy8gUmVtb3ZlcyBhbnkgaG9vayBzZXQgYnkgdGhlIGN1cnJlbnQgdGhyZWFkLgorICAvLyBUaGUgcmV0dXJuIGluZGljYXRlcyB3aGV0aGVyIGFueXRoaW5nIHdlbnQgd3JvbmcgcmVtb3ZpbmcgdGhlIGhvb2tzLAorICAvLyB0aGF0IG1pZ2h0IGNhdXNlIHByb2JsZW1zIGxhdGVyLgorCisgIERMTEVYUE9SVCBCT09MIFdNX0hvb2tzX1JlbW92ZShEV09SRCBvd25lcik7CisKKyAgLy8KKyAgLy8gLT0tIFVzZXIgaW5wdXQgaG9va3MKKyAgLy8KKworICAvLyAtIFdNX0hvb2tzX0VuYWJsZVJlYWxJbnB1dHMKKyAgLy8gSWYgVFJVRSBpcyBwYXNzZWQsIHRoZW4gInJlYWwiIGlucHV0IGlzIGVuYWJsZWQsIG90aGVyd2lzZSBpdCBpcyBkaXNhYmxlZC4KKworICBETExFWFBPUlQgQk9PTCBXTV9Ib29rc19FbmFibGVSZWFsSW5wdXRzKEJPT0wgcG9pbnRlciwgQk9PTCBrZXlib2FyZCk7CisKKyAgLy8gLSBXTV9Ib29rc19FbmFibGVTeW50aElucHV0cworICAvLyBJZiBUUlVFIGlzIHBhc3NlZCwgdGhlbiBzeW50aGV0aWMgaW5wdXRzIGFyZSBlbmFibGVkLCBvdGhlcndpc2UgZGlzYWJsZWQuCisKKyAgRExMRVhQT1JUIEJPT0wgV01fSG9va3NfRW5hYmxlU3ludGhJbnB1dHMoQk9PTCBwb2ludGVyLCBCT09MIGtleWJvYXJkKTsKKworICAvLworICAvLyAtPS0gQ3Vyc29yIHNoYXBlIGhvb2tpbmcKKyAgLy8KKworICAvLyAtIFdNX0hvb2tzX0VuYWJsZUN1cnNvclNoYXBlCisgIC8vIElmIFRSVUUgaXMgcGFzc2VkLCB0aGVuIGhvb2tzIHdpbGwgcHJvZHVjZSBub3RpZmljYXRpb25zIHdoZW4gY3Vyc29yIHNoYXBlCisgIC8vIGNoYW5nZXMuCisKKyAgRExMRVhQT1JUIEJPT0wgV01fSG9va3NfRW5hYmxlQ3Vyc29yU2hhcGUoQk9PTCBlbmFibGUpOworCisjaWZkZWYgX0RFQlVHCisgIC8vIC0gV01fSG9va3NfU2V0RGlhZ25vc3RpY1JhbmdlCisgIC8vIFNlbGVjdCBhIHJhbmdlIG9mIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSByZXBvcnRlZCB3aGlsZSBob29rcyBhcmUgYWN0aXZlCisgIERMTEVYUE9SVCB2b2lkIFdNX0hvb2tzX1NldERpYWdub3N0aWNSYW5nZShVSU5UIG1pbiwgVUlOVCBtYXgpOworICBETExFWFBPUlQgVUlOVCBXTV9Ib29rc19EaWFnbm9zdGljKCk7CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gX19XTV9IT09LU19IX18KZGlmZiAtLWdpdCBhL3dtX2hvb2tzL3dtX2hvb2tzLnJjIGIvd21faG9va3Mvd21faG9va3MucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkMjgyYgotLS0gL2Rldi9udWxsCisrKyBiL3dtX2hvb2tzL3dtX2hvb2tzLnJjCkBAIC0wLDAgKzEsMTA5IEBACisvL01pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCisvLworI2luY2x1ZGUgInJlc291cmNlLmgiCisKKyNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KKy8vCisjaW5jbHVkZSAiYWZ4cmVzLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gRW5nbGlzaCAoVS5LLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VORykKKyNpZmRlZiBfV0lOMzIKK0xBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VLCisjcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQorI2VuZGlmIC8vX1dJTjMyCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICAicmVzb3VyY2UuaFwwIgorRU5ECisKKzIgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUgCitCRUdJTgorICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgorICAgICJcMCIKK0VORAorCiszIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFIAorQkVHSU4KKyAgICAiXHJcbiIKKyAgICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworCisjaWZuZGVmIF9NQUMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gNCwwLDAsMjYKKyBQUk9EVUNUVkVSU0lPTiA0LDAsMCwyNgorIEZJTEVGTEFHU01BU0sgMHgzZkwKKyNpZmRlZiBfREVCVUcKKyBGSUxFRkxBR1MgMHgxTAorI2Vsc2UKKyBGSUxFRkxBR1MgMHgwTAorI2VuZGlmCisgRklMRU9TIDB4NDAwMDRMCisgRklMRVRZUEUgMHgyTAorIEZJTEVTVUJUWVBFIDB4MEwKK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwODA5MDRiMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJSZWFsVk5DIEx0ZC5cMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiVk5DIFNlcnZlciBmb3IgV2luMzIgSG9va2luZyBETExcMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICI0LjBcMCIKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiV01Ib29rcyA0LjBcMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSBSZWFsVk5DIEx0ZC4gMjAwMi0yMDA0XDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlJlYWxWTkNcMCIKKyAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgIndtX2hvb2tzLmRsbFwwIgorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJWTkMgU2VydmVyIDQuMFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjQuMFwwIgorICAgICAgICAgICAgVkFMVUUgIlNwZWNpYWxCdWlsZCIsICJcMCIKKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4ODA5LCAxMjAwCisgICAgRU5ECitFTkQKKworI2VuZGlmICAgIC8vICFfTUFDCisKKyNlbmRpZiAgICAvLyBFbmdsaXNoIChVLksuKSByZXNvdXJjZXMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisvLworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKKwo=