From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Sandro Mani To: git-commits@fedoraproject.org Subject: [rpms/tesseract] f44: Backport fixes for CVE-2026-{88047-88054} Date: Mon, 21 Sep 2026 08:47:23 GMT Message-ID: <178998044322.1.15943825087214899492.rpms-tesseract-8f15530a402e@fedoraproject.org> List-ID: X-Git-Repo: rpms/tesseract X-Git-Branch: f44 X-Git-Rev: 8f15530a402eca6406382064c9279d1b2f668a78 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvdGVzc2VyYWN0CkJy YW5jaCA6IGY0NApDb21taXQgOiA4ZjE1NTMwYTQwMmVjYTY0MDYzODIwNjRjOTI3OWQxYjJmNjY4 YTc4CkF1dGhvciA6IFNhbmRybyBNYW5pIDxtYW5pc2FuZHJvQGdtYWlsLmNvbT4KRGF0ZSAgIDog MjAyNi0wOS0yMVQxMDo0NjoyNSswMjowMApTdGF0cyAgOiArMjAzNC8tNSBpbiAxMCBmaWxlKHMp ClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvdGVzc2VyYWN0L2Mv OGYxNTUzMGE0MDJlY2E2NDA2MzgyMDY0YzkyNzlkMWIyZjY2OGE3OD9icmFuY2g9ZjQ0CgpMb2c6 CkJhY2twb3J0IGZpeGVzIGZvciBDVkUtMjAyNi17ODgwNDctODgwNTR9CgotLS0KZGlmZiAtLWdp dCBhLzEwM2RjMTM0ZWIzNjQxMWRkYzY4MzNlYzIwYWEyYzc2Nzk1YmQwZmYucGF0Y2ggYi8xMDNk YzEzNGViMzY0MTFkZGM2ODMzZWMyMGFhMmM3Njc5NWJkMGZmLnBhdGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMWIyZWEKLS0tIC9kZXYvbnVsbAorKysgYi8xMDNkYzEz NGViMzY0MTFkZGM2ODMzZWMyMGFhMmM3Njc5NWJkMGZmLnBhdGNoCkBAIC0wLDAgKzEsMTc5IEBA CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFt IHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMvTWFr ZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4xOTI0NDg3NzMgKzAyMDAKKysrKyB0ZXNzZXJh Y3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuMTk3OTAzMzYzICsw MjAwCitAQCAtMTE1OCw2ICsxMTU4LDcgQEAgaWYgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKyBj aGVja19QUk9HUkFNUyArPSBlcXVhdGlvbmRldGVjdF90ZXN0CisgZW5kaWYgIyAhRElTQUJMRURf TEVHQUNZX0VOR0lORQorIGNoZWNrX1BST0dSQU1TICs9IGZpbGVpb190ZXN0CisrY2hlY2tfUFJP R1JBTVMgKz0gZnVsbHljb25uZWN0ZWRfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IGhlYXBfdGVz dAorIGNoZWNrX1BST0dSQU1TICs9IGltYWdlZGF0YV90ZXN0CisgaWYgIURJU0FCTEVEX0xFR0FD WV9FTkdJTkUKK0BAIC0xMjkwLDYgKzEyOTEsMTAgQEAgZmlsZWlvX3Rlc3RfU09VUkNFUyA9IHVu aXR0ZXN0L2ZpbGVpb190ZQorIGZpbGVpb190ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBG TEFHUykKKyBmaWxlaW9fdGVzdF9MREFERCA9ICQoVFJBSU5JTkdfTElCUykKKyAKKytmdWxseWNv bm5lY3RlZF90ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9mdWxseWNvbm5lY3RlZF90ZXN0LmNjCisr ZnVsbHljb25uZWN0ZWRfdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisrZnVs bHljb25uZWN0ZWRfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQorKworIGhlYXBfdGVzdF9TT1VS Q0VTID0gdW5pdHRlc3QvaGVhcF90ZXN0LmNjCisgaGVhcF90ZXN0X0NQUEZMQUdTID0gJCh1bml0 dGVzdF9DUFBGTEFHUykKKyBoZWFwX3Rlc3RfTERBREQgPSAkKFRFU1NfTElCUykKK2RpZmYgLXJ1 cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2xzdG0vZnVsbHljb25uZWN0 ZWQuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2xzdG0vZnVsbHljb25uZWN0ZWQuY3BwCist LS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3RtL2Z1bGx5Y29ubmVjdGVkLmNwcAkyMDI2LTA3LTI0 IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2xz dG0vZnVsbHljb25uZWN0ZWQuY3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuMTk4NTEyMzcyICswMjAw CitAQCAtMTIxLDcgKzEyMSwxNiBAQCBib29sIEZ1bGx5Q29ubmVjdGVkOjpTZXJpYWxpemUoVEZp bGUgKmZwCisgCisgLy8gUmVhZHMgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gUmV0dXJucyBmYWxzZSBp biBjYXNlIG9mIGVycm9yLgorIGJvb2wgRnVsbHlDb25uZWN0ZWQ6OkRlU2VyaWFsaXplKFRGaWxl ICpmcCkgeworLSAgcmV0dXJuIHdlaWdodHNfLkRlU2VyaWFsaXplKElzVHJhaW5pbmcoKSwgZnAp OworKyAgaWYgKCF3ZWlnaHRzXy5EZVNlcmlhbGl6ZShJc1RyYWluaW5nKCksIGZwKSkgeworKyAg ICByZXR1cm4gZmFsc2U7CisrICB9CisrICAvLyBUaGUgd2VpZ2h0IG1hdHJpeCBtdXN0IG1hdGNo IHRoZSBkZWNsYXJlZCBzaXplcyAodGhlIHNlY29uZCBkaW1lbnNpb24KKysgIC8vIGluY2x1ZGVz IHRoZSBiaWFzIGNvbHVtbik7IG90aGVyd2lzZSBGb3J3YXJkIHdvdWxkIHJlYWQgb3Igd3JpdGUK KysgIC8vIG91dHNpZGUgdGhlIHNjcmF0Y2ggYnVmZmVycyBzaXplZCBmcm9tIG5pXyBhbmQgbm9f LgorKyAgaWYgKHdlaWdodHNfLkRpbTEoKSAhPSBub18gfHwgd2VpZ2h0c18uRGltMigpICE9IG5p XyArIDEpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKyAgcmV0dXJuIHRydWU7CisgfQor IAorIC8vIFJ1bnMgZm9yd2FyZCBwcm9wYWdhdGlvbiBvZiBhY3RpdmF0aW9ucyBvbiB0aGUgaW5w dXQgbGluZS4KK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3Jj L2xzdG0vd2VpZ2h0bWF0cml4LmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvbHN0bS93ZWlnaHRt YXRyaXguaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvbHN0bS93ZWlnaHRtYXRyaXguaAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2xzdG0vd2VpZ2h0bWF0cml4LmgJMjAyNi0wOS0yMSAxMDoyODoxMC4xOTg4MTkwNTYgKzAy MDAKK0BAIC0xMDcsNiArMTA3LDEzIEBAIHB1YmxpYzoKKyAgIGludCBOdW1PdXRwdXRzKCkgY29u c3QgeworICAgICByZXR1cm4gaW50X21vZGVfID8gd2lfLmRpbTEoKSA6IHdmXy5kaW0xKCk7Cisg ICB9CisrICAvLyBUaGUgZGltZW5zaW9ucyBvZiB0aGUgYWN0aXZlIHdlaWdodCBtYXRyaXggKHdp XyBpbiBpbnQgbW9kZSwgZWxzZSB3Zl8pLgorKyAgaW50IERpbTEoKSBjb25zdCB7CisrICAgIHJl dHVybiBpbnRfbW9kZV8gPyB3aV8uZGltMSgpIDogd2ZfLmRpbTEoKTsKKysgIH0KKysgIGludCBE aW0yKCkgY29uc3QgeworKyAgICByZXR1cm4gaW50X21vZGVfID8gd2lfLmRpbTIoKSA6IHdmXy5k aW0yKCk7CisrICB9CisgICAvLyBQcm92aWRlcyBvbmUgc2V0IG9mIHdlaWdodHMuIE9ubHkgdXNl ZCBieSBwZWVwIHdlaWdodCBtYXhwb29sLgorICAgY29uc3QgVEZsb2F0ICpHZXRXZWlnaHRzKGlu dCBpbmRleCkgY29uc3QgeworICAgICByZXR1cm4gd2ZfW2luZGV4XTsKK2RpZmYgLXJ1cE4gLS1u by1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvZnVsbHljb25uZWN0ZWRfdGVz dC5jYyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L2Z1bGx5Y29ubmVjdGVkX3Rlc3QuY2MK Ky0tLSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvZnVsbHljb25uZWN0ZWRfdGVzdC5jYwkxOTcw LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv dW5pdHRlc3QvZnVsbHljb25uZWN0ZWRfdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjE5OTE5 OTE0OCArMDIwMAorQEAgLTAsMCArMSwxMTUgQEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6 ICAgICAgICBmdWxseWNvbm5lY3RlZF90ZXN0LmNjCisrLy8gRGVzY3JpcHRpb246IFRlc3RzIHRo YXQgYSBGdWxseUNvbm5lY3RlZCAoc29mdG1heCkgbmV0d29yayBsYXllciB3aXRoCisrLy8gICAg ICAgICAgICAgIHdlaWdodC1tYXRyaXggZGltZW5zaW9ucyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUg ZGVjbGFyZWQKKysvLyAgICAgICAgICAgICAgbmkvbm8gaXMgcmVqZWN0ZWQgYXQgbG9hZC4gV2l0 aG91dCB0aGUgY2hlY2ssCisrLy8gICAgICAgICAgICAgIE1hdHJpeERvdFZlY3RvciB3cml0ZXMg dy5kaW0xKCkgcmVzdWx0cyBpbnRvIGEgc2NyYXRjaAorKy8vICAgICAgICAgICAgICBidWZmZXIg c2l6ZWQgZnJvbSBub18gYW5kIHJlYWRzIHcuZGltMigpLTEgaW5wdXRzIGZyb20KKysvLyAgICAg ICAgICAgICAgYSBidWZmZXIgc2l6ZWQgZnJvbSBuaV8gKGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0 ZS9yZWFkKQorKy8vICAgICAgICAgICAgICBvbiB0aGUgZmlyc3QgcmVjb2duaXRpb24gc3RlcC4K KysvLworKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg KHRoZSAiTGljZW5zZSIpOworKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKysvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD RU5TRS0yLjAKKysvLworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrI2luY2x1ZGUgImluY2x1ZGVfZ3Vu aXQuaCIKKysKKysjaW5jbHVkZSAibmV0d29yay5oIiAvLyBmb3IgTmV0d29yaywgTmV0d29ya1R5 cGUKKysjaW5jbHVkZSAibmV0d29ya2lvLmgiCisrI2luY2x1ZGUgIm5ldHdvcmtzY3JhdGNoLmgi CisrI2luY2x1ZGUgInNlcmlhbGlzLmgiIC8vIGZvciBURmlsZQorKworKyNpbmNsdWRlIDxjc3Rk aW50PgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNlIHRlc3NlcmFjdCB7CisrbmFt ZXNwYWNlIHsKKysKKysvLyBBcHBlbmRzIHJhdyBsaXR0bGUtZW5kaWFuIHZhbHVlcyB0byBhIGJ5 dGUgYnVmZmVyLgorK2NsYXNzIEJ5dGVXcml0ZXIgeworK3B1YmxpYzoKKysgIHZvaWQgUHV0VTgo dWludDMyX3QgdikgeyBkYXRhXy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4odiAmIDB4RkYp KTsgfQorKyAgdm9pZCBQdXRVMzIodWludDMyX3QgdikgeworKyAgICBmb3IgKGludCBpID0gMDsg aSA8IDQ7ICsraSkgeworKyAgICAgIGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigo diA+PiAoOCAqIGkpKSAmIDB4RkYpKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBQdXRTMzIoaW50 MzJfdCB2KSB7IFB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odikpOyB9CisrICBjb25zdCBz dGQ6OnZlY3RvcjxjaGFyPiAmZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9CisrCisrcHJp dmF0ZToKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGRhdGFfOworK307CisrCisrdm9pZCBQdXREb3Vi bGVMRShCeXRlV3JpdGVyICp3LCBkb3VibGUgZCkgeworKyAgdW5pb24geworKyAgICBkb3VibGUg ZDsKKysgICAgdWludDY0X3QgdTsKKysgIH0gY29udjsKKysgIGNvbnYuZCA9IGQ7CisrICB3LT5Q dXRVMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbnYudSAmIDB4RkZGRkZGRkYpKTsKKysgIHct PlB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29udi51ID4+IDMyKSk7CisrfQorKworKy8v IEJ1aWxkcyBhIHNlcmlhbGl6ZWQgTlRfU09GVE1BWCBuZXR3b3JrOiBoZWFkZXIgd2l0aCB0aGUg Z2l2ZW4gbmkvbm8sCisrLy8gdGhlbiBhIGZsb2F0LW1vZGUgV2VpZ2h0TWF0cml4IHdpdGggdGhl IGdpdmVuIChjb3JydXB0KSBkaW1lbnNpb25zLgorKy8vIFRoZSBtYXRyaXggaXMgc3RvcmVkIGFz IGRvdWJsZXMgb24gZGlzayAoc2VlIFdlaWdodE1hdHJpeDo6RGVTZXJpYWxpemUpLgorK3N0ZDo6 dmVjdG9yPGNoYXI+IE1ha2VTb2Z0bWF4TmV0d29yayhpbnQgbmksIGludCBubywgaW50MzJfdCBk aW0xLCBpbnQzMl90IGRpbTIpIHsKKysgIEJ5dGVXcml0ZXIgdzsKKysgIHcuUHV0VTgoc3RhdGlj X2Nhc3Q8dWludDMyX3Q+KE5UX1NPRlRNQVgpKTsKKysgIHcuUHV0VTgoMCk7IC8vIHRyYWluaW5n OiBUU19ESVNBQkxFRAorKyAgdy5QdXRVOCgwKTsgLy8gbmVlZHNfdG9fYmFja3Byb3AKKysgIHcu UHV0VTMyKDApOyAvLyBuZXR3b3JrX2ZsYWdzCisrICB3LlB1dFUzMihzdGF0aWNfY2FzdDx1aW50 MzJfdD4obmkpKTsKKysgIHcuUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihubykpOworKyAg dy5QdXRVMzIoMCk7IC8vIG51bV93ZWlnaHRzIChub3QgY3Jvc3MtY2hlY2tlZCwga2VwdCBjb25z aXN0ZW50IGFueXdheSkKKysgIHcuUHV0VTMyKDApOyAvLyBuYW1lIChlbXB0eSBzdHJpbmcpCisr ICAvLyBXZWlnaHRNYXRyaXg6OkRlU2VyaWFsaXplOgorKyAgdy5QdXRVOCgxMjgpOyAvLyBtb2Rl OiBrRG91YmxlRmxhZywgZmxvYXQgbW9kZQorKyAgdy5QdXRTMzIoZGltMSk7CisrICB3LlB1dFMz MihkaW0yKTsKKysgIFB1dERvdWJsZUxFKCZ3LCAwLjApOyAvLyBlbXB0eV8gY2VsbAorKyAgZm9y IChpbnQzMl90IGkgPSAwOyBpIDwgZGltMSAqIGRpbTI7ICsraSkgeworKyAgICBQdXREb3VibGVM RSgmdywgMC4wKTsgLy8gd2VpZ2h0IGRhdGEKKysgIH0KKysgIHJldHVybiB3LmRhdGEoKTsKKyt9 CisrCisrLy8gQSBGdWxseUNvbm5lY3RlZCBsYXllciB3aG9zZSB3ZWlnaHQgbWF0cml4IGRvZXMg bm90IG1hdGNoIHRoZSBkZWNsYXJlZAorKy8vIHNpemVzIG11c3QgYmUgcmVqZWN0ZWQgYnkgQ3Jl YXRlRnJvbUZpbGU7IG9uIHVucGF0Y2hlZCBjb2RlIHRoZSB0ZXN0CisrLy8gcmVhY2hlcyBGb3J3 YXJkLCB3aGVyZSBNYXRyaXhEb3RWZWN0b3IgcGVyZm9ybXMgdGhlIG91dC1vZi1ib3VuZHMKKysv LyB3cml0ZSB0aGlzIHJlZ3Jlc3Npb24gdGVzdCBndWFyZHMgYWdhaW5zdC4KKytURVNUKEZ1bGx5 Y29ubmVjdGVkVGVzdCwgUmVqZWN0c1dlaWdodE1hdHJpeERpbWVuc2lvbk1pc21hdGNoKSB7Cisr ICAvLyBuaV89bm9fPTEgYnV0IGRpbTE9MyAoT09CIHdyaXRlIG9mIDMgcmVzdWx0cyBpbnRvIGEg MS1yZXN1bHQgYnVmZmVyKQorKyAgLy8gYW5kIGRpbTI9NSAoT09CIHJlYWQgb2YgNCBpbnB1dHMg ZnJvbSBhIDEtaW5wdXQgYnVmZmVyKS4KKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFr ZVNvZnRtYXhOZXR3b3JrKDEsIDEsIDMsIDUpOworKyAgVEZpbGUgZnA7CisrICBBU1NFUlRfVFJV RShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBOZXR3b3JrICpuZXQg PSBOZXR3b3JrOjpDcmVhdGVGcm9tRmlsZSgmZnApOworKyAgaWYgKG5ldCA9PSBudWxscHRyKSB7 CisrICAgIHJldHVybjsgLy8gRml4ZWQ6IHRoZSBtaXNtYXRjaGVkIGxheWVyIGlzIHJlamVjdGVk IGF0IGxvYWQuCisrICB9CisrICBOZXR3b3JrSU8gaW5wdXQ7CisrICBpbnB1dC5SZXNpemUyZChm YWxzZSwgLyp3aWR0aD0qLzEsIC8qbnVtX2ZlYXR1cmVzPSovMSk7CisrICBOZXR3b3JrU2NyYXRj aCBzY3JhdGNoOworKyAgTmV0d29ya0lPIG91dHB1dDsKKysgIG5ldC0+Rm9yd2FyZChmYWxzZSwg aW5wdXQsIG51bGxwdHIsICZzY3JhdGNoLCAmb3V0cHV0KTsKKysgIGRlbGV0ZSBuZXQ7CisrICBG QUlMKCkgPDwgImNyYWZ0ZWQgRnVsbHlDb25uZWN0ZWQgbGF5ZXIgd2l0aCBtaXNtYXRjaGVkIHdl aWdodCBtYXRyaXggd2FzIGFjY2VwdGVkIjsKKyt9CisrCisrLy8gQ29uc2lzdGVudCBkaW1lbnNp b25zIG11c3Qgc3RpbGwgYmUgYWNjZXB0ZWQuCisrVEVTVChGdWxseWNvbm5lY3RlZFRlc3QsIEFj Y2VwdHNNYXRjaGluZ0RpbWVuc2lvbnMpIHsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0g TWFrZVNvZnRtYXhOZXR3b3JrKDEsIDIsIDIsIDIpOworKyAgVEZpbGUgZnA7CisrICBBU1NFUlRf VFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBOZXR3b3JrICpu ZXQgPSBOZXR3b3JrOjpDcmVhdGVGcm9tRmlsZSgmZnApOworKyAgQVNTRVJUX05FKG5ldCwgbnVs bHB0cik7CisrICBkZWxldGUgbmV0OworK30KKysKKyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFt ZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAtLWdpdCBhLzFiZGE1MDc5YjFjOGE3ZTI1ZjUyMzQ4Njgz NzQyNjkwM2QyOWNlODQucGF0Y2ggYi8xYmRhNTA3OWIxYzhhN2UyNWY1MjM0ODY4Mzc0MjY5MDNk MjljZTg0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDUzYmYK LS0tIC9kZXYvbnVsbAorKysgYi8xYmRhNTA3OWIxYzhhN2UyNWY1MjM0ODY4Mzc0MjY5MDNkMjlj ZTg0LnBhdGNoCkBAIC0wLDAgKzEsMTcxIEBACitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2Ug dGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFtIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUu YW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0JMjAyNi0wNy0yNCAyMDoyNzowMi4w MDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYt MDktMjEgMTA6Mjg6MTAuMTUwNDc5MzY5ICswMjAwCitAQCAtMTE4Miw2ICsxMTgyLDcgQEAgY2hl Y2tfUFJPR1JBTVMgKz0gbWFzdGVydHJhaW5lcl90ZXN0CisgZW5kaWYgIyAhRElTQUJMRURfTEVH QUNZX0VOR0lORQorIGNoZWNrX1BST0dSQU1TICs9IG1hdHJpeF90ZXN0CisgY2hlY2tfUFJPR1JB TVMgKz0gbmV0d29ya2lvX3Rlc3QKKytjaGVja19QUk9HUkFNUyArPSBub3JtcHJvdG9fdGVzdAor IGlmIEVOQUJMRV9UUkFJTklORworIGNoZWNrX1BST0dSQU1TICs9IG5vcm1zdHJuZ3NfdGVzdAor IGVuZGlmICMgRU5BQkxFX1RSQUlOSU5HCitAQCAtMTM3Niw2ICsxMzc3LDEwIEBAIG5ldHdvcmtp b190ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9uZXR3b3IKKyBuZXR3b3JraW9fdGVzdF9DUFBGTEFH UyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisgbmV0d29ya2lvX3Rlc3RfTERBREQgPSAkKFRFU1Nf TElCUykKKyAKKytub3JtcHJvdG9fdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3Qvbm9ybXByb3RvX3Rl c3QuY2MKKytub3JtcHJvdG9fdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisr bm9ybXByb3RvX3Rlc3RfTERBREQgPSAkKFRFU1NfTElCUykKKysKKyBub3Jtc3RybmdzX3Rlc3Rf U09VUkNFUyA9IHVuaXR0ZXN0L25vcm1zdHJuZ3NfdGVzdC5jYworIG5vcm1zdHJuZ3NfdGVzdF9D UFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisgbm9ybXN0cm5nc190ZXN0X0xEQUREID0g JChUUkFJTklOR19MSUJTKSAkKElDVV9JMThOX0xJQlMpICQoSUNVX1VDX0xJQlMpCitkaWZmIC1y dXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9ub3JtbWF0 Y2guY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L25vcm1tYXRjaC5jcHAKKy0t LSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L25vcm1tYXRjaC5jcHAJMjAyNi0wNy0yNCAy MDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFz c2lmeS9ub3JtbWF0Y2guY3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuMTUxMDA0MzY1ICswMjAwCitA QCAtMjgsNiArMjgsNyBAQAorIAorICNpbmNsdWRlIDxjbWF0aD4KKyAjaW5jbHVkZSA8Y3N0ZGlv PgorKyNpbmNsdWRlIDxpb21hbmlwPiAvLyBmb3Igc3RkOjpzZXR3CisgI2luY2x1ZGUgPHNzdHJl YW0+IC8vIGZvciBzdGQ6OmlzdHJpbmdzdHJlYW0KKyAKKyBuYW1lc3BhY2UgdGVzc2VyYWN0IHsK K0BAIC0xOTAsNyArMTkxLDEwIEBAIE5PUk1fUFJPVE9TICpDbGFzc2lmeTo6UmVhZE5vcm1Qcm90 b3MoVEYKKyAgIHdoaWxlIChmcC0+RkdldHMobGluZSwga01heExpbmVTaXplKSAhPSBudWxscHRy KSB7CisgICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzdHJlYW0obGluZSk7CisgICAgIHN0cmVhbS5p bWJ1ZShzdGQ6OmxvY2FsZTo6Y2xhc3NpYygpKTsKKy0gICAgc3RyZWFtID4+IHVuaWNoYXIgPj4g TnVtUHJvdG9zOworKyAgICAvLyB1bmljaGFyIGhvbGRzIGF0IG1vc3QgMiAqIFVOSUNIQVJfTEVO IGNoYXJhY3RlcnM7IHRoZSB3aWR0aCBsaW1pdAorKyAgICAvLyAod2lkdGggLSAxIGNoYXJhY3Rl cnMgZm9yIGNoYXIqIGV4dHJhY3Rpb24pIGtlZXBzIHRoZSBleHRyYWN0aW9uCisrICAgIC8vIGZy b20gb3ZlcmZsb3dpbmcgdGhlIGJ1ZmZlciBvbiBvdmVybG9uZyBsaW5lcy4KKysgICAgc3RyZWFt ID4+IHN0ZDo6c2V0dygyICogVU5JQ0hBUl9MRU4gKyAxKSA+PiB1bmljaGFyID4+IE51bVByb3Rv czsKKyAgICAgaWYgKHN0cmVhbS5mYWlsKCkpIHsKKyAgICAgICBjb250aW51ZTsKKyAgICAgfQor ZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9DTWFr ZUxpc3RzLnR4dCB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L0NNYWtlTGlzdHMudHh0Cist LS0gdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L0NNYWtlTGlzdHMudHh0CTIwMjYtMDctMjQgMjA6 Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC9D TWFrZUxpc3RzLnR4dAkyMDI2LTA5LTIxIDEwOjI4OjEwLjE1MTI3MTQyMyArMDIwMAorQEAgLTU5 LDYgKzU5LDcgQEAgc2V0KExFR0FDWV9URVNUUworICAgICBpbmRleG1hcGJpZGlfdGVzdC5jYwor ICAgICBpbnRmZWF0dXJlbWFwX3Rlc3QuY2MKKyAgICAgbWFzdGVydHJhaW5lcl90ZXN0LmNjCisr ICAgIG5vcm1wcm90b190ZXN0LmNjCisgICAgIG9zZF90ZXN0LmNjCisgICAgIHBhcmFtc19tb2Rl bF90ZXN0LmNjCisgICAgIHNoYXBldGFibGVfdGVzdC5jYworZGlmZiAtcnVwTiAtLW5vLWRlcmVm ZXJlbmNlIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9ub3JtcHJvdG9fdGVzdC5jYyB0ZXNzZXJh Y3QtNS41LjMtbmV3L3VuaXR0ZXN0L25vcm1wcm90b190ZXN0LmNjCistLS0gdGVzc2VyYWN0LTUu NS4zL3VuaXR0ZXN0L25vcm1wcm90b190ZXN0LmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC9ub3JtcHJvdG9fdGVz dC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjE1MTQ3MDA1NCArMDIwMAorQEAgLTAsMCArMSwxMTEg QEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAgICAgICBub3JtcHJvdG9fdGVzdC5jYwor Ky8vIERlc2NyaXB0aW9uOiBUZXN0cyB0aGF0IENsYXNzaWZ5OjpSZWFkTm9ybVByb3RvcyBoYW5k bGVzIGEgbm9ybXByb3RvCisrLy8gICAgICAgICAgICAgIGxpbmUgd2hvc2UgZmlyc3QgKHVuaWNo YXIpIHRva2VuIGV4Y2VlZHMgdGhlCisrLy8gICAgICAgICAgICAgIHVuaWNoYXJbMiAqIFVOSUNI QVJfTEVOICsgMV0gc3RhY2sgYnVmZmVyLiBUaGUKKysvLyAgICAgICAgICAgICAgaXN0cmVhbSBl eHRyYWN0aW9uIGhhcyBubyBpbnRyaW5zaWMgbGVuZ3RoIGxpbWl0LCBzbyBhCisrLy8gICAgICAg ICAgICAgIGNyYWZ0ZWQgTk9STVBST1RPIGNvbXBvbmVudCBpbiBhIC50cmFpbmVkZGF0YSBmaWxl CisrLy8gICAgICAgICAgICAgIGNvdWxkIG92ZXJmbG93IHRoZSBzdGFjayBidWZmZXIgZHVyaW5n IGxlZ2FjeSBlbmdpbmUKKysvLyAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uCisrLy8KKysv LyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp Y2Vuc2UiKTsKKysvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh bmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM aWNlbnNlIGF0CisrLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w CisrLy8KKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNpbmNsdWRlICJpbmNsdWRlX2d1bml0LmgiCisr CisrI2luY2x1ZGUgImNsYXNzaWZ5LmgiCisrI2luY2x1ZGUgInNlcmlhbGlzLmgiIC8vIGZvciBU RmlsZQorKworKyNpbmNsdWRlIDxjc3RkaW8+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1 ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8dmVjdG9yPgorKworK25hbWVzcGFjZSB0ZXNzZXJhY3Qg eworK25hbWVzcGFjZSB7CisrCisrLy8gTWluaW1hbCB1bmljaGFyc2V0IChzcGFjZSBhbmQgJ2En KS4KKytjb25zdCBjaGFyIGtNaW5VbmljaGFyc2V0W10gPQorKyAgICAiMlxuIgorKyAgICAiTlVM TCAxIDAsMjU1LDAsMjU1LDAsMCwwLDAsMCwwIExhdGluIDIgMCAyXG4iCisrICAgICJhIDEgMCwy NTUsMCwyNTUsMCwwLDAsMCwwLDAgTGF0aW4gMiAwIDJcbiI7CisrCisrLy8gQnVpbGRzIGEgbm9y bXByb3RvIGNvbXBvbmVudDogYSBzYW1wbGUtc2l6ZSBsaW5lICg1KSwgZml2ZSBwYXJhbWV0ZXIK KysvLyBkZXNjcmlwdGlvbiBsaW5lcywgdGhlbiB0aGUgZ2l2ZW4gcmF3IHByb3RvIGxpbmVzLgor K3N0ZDo6dmVjdG9yPGNoYXI+IE1ha2VOb3JtcHJvdG8oY29uc3Qgc3RkOjpzdHJpbmcgJmxpbmVz KSB7CisrICBzdGQ6OnN0cmluZyBkYXRhID0gIjVcbiI7CisrICBmb3IgKGludCBpID0gMDsgaSA8 IDU7ICsraSkgeworKyAgICBkYXRhICs9ICJlIGUgMCAxXG4iOworKyAgfQorKyAgZGF0YSArPSBs aW5lczsKKysgIHJldHVybiBzdGQ6OnZlY3RvcjxjaGFyPihkYXRhLmJlZ2luKCksIGRhdGEuZW5k KCkpOworK30KKysKKytjbGFzcyBOb3JtcHJvdG9UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg eworK3Byb3RlY3RlZDoKKysgIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisrICAgIHRtcGxfID0g Ii90bXAvdGVzc19ub3JtcHJvdG9fdGVzdF9YWFhYWFgiOworKyAgICBjaGFyICpkaXIgPSBta2R0 ZW1wKHRtcGxfLmRhdGEoKSk7CisrICAgIEFTU0VSVF9ORShkaXIsIG51bGxwdHIpOworKyAgICBk aXJfID0gZGlyOworKyAgICBzdGQ6OnN0cmluZyB1Y19wYXRoID0gZGlyXyArICIvZW5nLnVuaWNo YXJzZXQiOworKyAgICBGSUxFICpmID0gZm9wZW4odWNfcGF0aC5jX3N0cigpLCAidyIpOworKyAg ICBBU1NFUlRfTkUoZiwgbnVsbHB0cik7CisrICAgIEFTU0VSVF9FUShmd3JpdGUoa01pblVuaWNo YXJzZXQsIDEsIHNpemVvZihrTWluVW5pY2hhcnNldCkgLSAxLCBmKSwKKysgICAgICAgICAgICAg IHNpemVvZihrTWluVW5pY2hhcnNldCkgLSAxKTsKKysgICAgZmNsb3NlKGYpOworKyAgICAvLyBM b2FkIHRoZSBtaW5pbWFsIHVuaWNoYXJzZXQgaW50byB0aGUgY2xhc3NpZmllcidzIGluaGVyaXRl ZAorKyAgICAvLyB1bmljaGFyc2V0IG1lbWJlci4KKysgICAgQVNTRVJUX1RSVUUoY2xhc3NpZmll cl8udW5pY2hhcnNldC5sb2FkX2Zyb21fZmlsZSh1Y19wYXRoLmNfc3RyKCkpKTsKKysgIH0KKysg IHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7CisrICAgIHN0ZDo6cmVtb3ZlKChkaXJfICsgIi9l bmcudW5pY2hhcnNldCIpLmNfc3RyKCkpOworKyAgICBybWRpcihkaXJfLmNfc3RyKCkpOworKyAg fQorKyAgc3RkOjpzdHJpbmcgZGlyXzsKKysgIHN0ZDo6c3RyaW5nIHRtcGxfOworKyAgQ2xhc3Np ZnkgY2xhc3NpZmllcl87CisrfTsKKysKKysvLyBBIDk5LWNoYXJhY3RlciBmaXJzdCB0b2tlbiAo dGhlIG1heGltdW0gRkdldHMgY2FuIHJldHVybikgb3ZlcmZsb3dzCisrLy8gdW5pY2hhclsyICog VU5JQ0hBUl9MRU4gKyAxXSBvbiB1bnBhdGNoZWQgY29kZTsgdGhlIHdpZHRoLWxpbWl0ZWQKKysv LyBleHRyYWN0aW9uIG11c3QgcmVqZWN0IHRoZSBsaW5lIGluc3RlYWQuCisrVEVTVF9GKE5vcm1w cm90b1Rlc3QsIFRvbGVyYXRlc092ZXJsb25nVW5pY2hhclRva2VuKSB7CisrICBzdGQ6OnZlY3Rv cjxjaGFyPiBieXRlcyA9IE1ha2VOb3JtcHJvdG8oc3RkOjpzdHJpbmcoOTksICdBJykgKyAiXG4i KTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3BlbihieXRlcy5kYXRhKCksIGJ5 dGVzLnNpemUoKSkpOworKyAgY2xhc3NpZmllcl8uTm9ybVByb3RvcyA9IGNsYXNzaWZpZXJfLlJl YWROb3JtUHJvdG9zKCZmcCk7CisrICBBU1NFUlRfTkUoY2xhc3NpZmllcl8uTm9ybVByb3Rvcywg bnVsbHB0cik7CisrICBjbGFzc2lmaWVyXy5GcmVlTm9ybVByb3RvcygpOworKyAgRVhQRUNUX0VR KGNsYXNzaWZpZXJfLk5vcm1Qcm90b3MsIG51bGxwdHIpOworK30KKysKKysvLyBBIHRva2VuIG9m IGV4YWN0bHkgMiAqIFVOSUNIQVJfTEVOIGNoYXJhY3RlcnMgaXMgdGhlIG1heGltdW0gbGVnaXRp bWF0ZQorKy8vIHNpemU7IGl0IG11c3Qgbm90IGJlIHRydW5jYXRlZCBvciByZWplY3RlZCBieSB0 aGUgd2lkdGggbGltaXQuCisrVEVTVF9GKE5vcm1wcm90b1Rlc3QsIFRvbGVyYXRlc01heExlblVu aWNoYXJUb2tlbikgeworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXMgPSBNYWtlTm9ybXByb3Rv KHN0ZDo6c3RyaW5nKDIgKiBVTklDSEFSX0xFTiwgJ0EnKSArICIgMFxuIik7CisrICBURmlsZSBm cDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsK KysgIGNsYXNzaWZpZXJfLk5vcm1Qcm90b3MgPSBjbGFzc2lmaWVyXy5SZWFkTm9ybVByb3Rvcygm ZnApOworKyAgQVNTRVJUX05FKGNsYXNzaWZpZXJfLk5vcm1Qcm90b3MsIG51bGxwdHIpOworKyAg Y2xhc3NpZmllcl8uRnJlZU5vcm1Qcm90b3MoKTsKKysgIEVYUEVDVF9FUShjbGFzc2lmaWVyXy5O b3JtUHJvdG9zLCBudWxscHRyKTsKKyt9CisrCisrLy8gQSB3ZWxsLWZvcm1lZCBub3JtcHJvdG8g Y29tcG9uZW50IG11c3Qgc3RpbGwgcGFyc2UuCisrVEVTVF9GKE5vcm1wcm90b1Rlc3QsIFJlYWRz VmFsaWROb3JtcHJvdG9zKSB7CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VOb3Jt cHJvdG8oImEgMFxuIik7CisrICBURmlsZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0 ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKKysgIGNsYXNzaWZpZXJfLk5vcm1Qcm90b3MgPSBj bGFzc2lmaWVyXy5SZWFkTm9ybVByb3RvcygmZnApOworKyAgQVNTRVJUX05FKGNsYXNzaWZpZXJf Lk5vcm1Qcm90b3MsIG51bGxwdHIpOworKyAgY2xhc3NpZmllcl8uRnJlZU5vcm1Qcm90b3MoKTsK KysgIEVYUEVDVF9FUShjbGFzc2lmaWVyXy5Ob3JtUHJvdG9zLCBudWxscHRyKTsKKyt9CisrCisr fSAvLyBuYW1lc3BhY2UKKyt9IC8vIG5hbWVzcGFjZSB0ZXNzZXJhY3QKCmRpZmYgLS1naXQgYS8y ZDA0ZDY0MGRiMmU4YzdlM2JhYjIzNjlkNTk5MzQzYjVhOGI4NDQzLnBhdGNoIGIvMmQwNGQ2NDBk YjJlOGM3ZTNiYWIyMzY5ZDU5OTM0M2I1YThiODQ0My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi45NDRkNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvMmQwNGQ2NDBkYjJl OGM3ZTNiYWIyMzY5ZDU5OTM0M2I1YThiODQ0My5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorZGlm ZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9NYWtlZmlsZS5hbSB0ZXNz ZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCistLS0gdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxl LmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuMzgyMzA3MzEyICswMjAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy9NYWtlZmlsZS5hbQkyMDI2LTA5LTIxIDEwOjI4OjEwLjM4NzYwNjUxNyArMDIwMAor QEAgLTEyMjUsNiArMTIyNSw3IEBAIGNoZWNrX1BST0dSQU1TICs9IHRmaWxlX3Rlc3QKKyBpZiBF TkFCTEVfVFJBSU5JTkcKKyBjaGVja19QUk9HUkFNUyArPSB1bmljaGFyX3Rlc3QKKyBjaGVja19Q Uk9HUkFNUyArPSB1bmljaGFyY29tcHJlc3NfdGVzdAorK2NoZWNrX1BST0dSQU1TICs9IHVuaWNo YXJzZXRfbG9hZF90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0gdW5pY2hhcnNldF90ZXN0CisgY2hl Y2tfUFJPR1JBTVMgKz0gdmFsaWRhdGVfZ3JhcGhlbWVfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9 IHZhbGlkYXRlX2luZGljX3Rlc3QKK0BAIC0xNTE4LDYgKzE1MTksMTAgQEAgdW5pY2hhcmNvbXBy ZXNzX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0LworIHVuaWNoYXJjb21wcmVzc190ZXN0X0NQUEZM QUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyB1bmljaGFyY29tcHJlc3NfdGVzdF9MREFERCA9 ICQoVFJBSU5JTkdfTElCUykgJChJQ1VfVUNfTElCUykKKyAKKyt1bmljaGFyc2V0X2xvYWRfdGVz dF9TT1VSQ0VTID0gdW5pdHRlc3QvdW5pY2hhcnNldF9sb2FkX3Rlc3QuY2MKKyt1bmljaGFyc2V0 X2xvYWRfdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisrdW5pY2hhcnNldF9s b2FkX3Rlc3RfTERBREQgPSAkKFRFU1NfTElCUykKKysKKyB1bmljaGFyc2V0X3Rlc3RfU09VUkNF UyA9IHVuaXR0ZXN0L3VuaWNoYXJzZXRfdGVzdC5jYworIHVuaWNoYXJzZXRfdGVzdF9DUFBGTEFH UyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisgdW5pY2hhcnNldF90ZXN0X0xEQUREID0gJChUUkFJ TklOR19MSUJTKSAkKElDVV9VQ19MSUJTKQorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRl c3NlcmFjdC01LjUuMy9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuY3BwIHRlc3NlcmFjdC01LjUuMy1u ZXcvc3JjL2NjdXRpbC91bmljaGFyc2V0LmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1 dGlsL3VuaWNoYXJzZXQuY3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisr KysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuY3BwCTIwMjYtMDkt MjEgMTA6Mjg6MTAuMzg4MjI3NzU5ICswMjAwCitAQCAtNzkxLDYgKzc5MSw5IEBAIGJvb2wgVU5J Q0hBUlNFVDo6bG9hZF92aWFfZmdldHMoCisgICAgICAgc3NjYW5mKGJ1ZmZlciwgIiVkIiwgJnVu aWNoYXJzZXRfc2l6ZSkgIT0gMSkgeworICAgICByZXR1cm4gZmFsc2U7CisgICB9CisrICBpZiAo dW5pY2hhcnNldF9zaXplIDw9IDApIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorICAgZm9y IChVTklDSEFSX0lEIGlkID0gMDsgaWQgPCB1bmljaGFyc2V0X3NpemU7ICsraWQpIHsKKyAgICAg Y2hhciB1bmljaGFyWzI1Nl07CisgICAgIHVuc2lnbmVkIGludCBwcm9wZXJ0aWVzOworQEAgLTg4 NCw2ICs4ODcsMTUgQEAgYm9vbCBVTklDSEFSU0VUOjpsb2FkX3ZpYV9mZ2V0cygKKyAgICAgfSBl bHNlIHsKKyAgICAgICB0aGlzLT51bmljaGFyX2luc2VydF9iYWNrd2FyZHNfY29tcGF0aWJsZSh1 bmljaGFyKTsKKyAgICAgfQorKyAgICAvLyBBIGR1cGxpY2F0ZSBvciBlbXB0eSByZXByZXNlbnRh dGlvbiBtYWtlcyB0aGUgaW5zZXJ0IGEgbm8tb3AsCisrICAgIC8vIGRlc3luY2hyb25pemluZyBp ZCBmcm9tIHRoZSB1bmljaGFycyB2ZWN0b3I7IHRoZSBzZXRfKiBjYWxscyBhbmQKKysgICAgLy8g dW5pY2hhcnNbaWRdIGJlbG93IHdvdWxkIHRoZW4gd3JpdGUgb3V0IG9mIGJvdW5kcy4gVGhlIGZp bGUgaXMKKysgICAgLy8gbWFsZm9ybWVkLCBzbyByZWplY3QgaXQuCisrICAgIGlmIChzaXplKCkg IT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpZCkgKyAxKSB7CisrICAgICAgZnByaW50ZihzdGRlcnIs ICIlczolZCB1bmljaGFyICVkIGhhcyBhIGR1cGxpY2F0ZSBvciBlbXB0eSByZXByZXNlbnRhdGlv blxuIiwKKysgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgaWQpOworKyAgICAgIHJl dHVybiBmYWxzZTsKKysgICAgfQorIAorICAgICB0aGlzLT5zZXRfaXNhbHBoYShpZCwgcHJvcGVy dGllcyAmIElTQUxQSEFfTUFTSyk7CisgICAgIHRoaXMtPnNldF9pc2xvd2VyKGlkLCBwcm9wZXJ0 aWVzICYgSVNMT1dFUl9NQVNLKTsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJh Y3QtNS41LjMvdW5pdHRlc3QvdW5pY2hhcnNldF9sb2FkX3Rlc3QuY2MgdGVzc2VyYWN0LTUuNS4z LW5ldy91bml0dGVzdC91bmljaGFyc2V0X2xvYWRfdGVzdC5jYworLS0tIHRlc3NlcmFjdC01LjUu My91bml0dGVzdC91bmljaGFyc2V0X2xvYWRfdGVzdC5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvdW5pY2hhcnNl dF9sb2FkX3Rlc3QuY2MJMjAyNi0wOS0yMSAxMDoyODoxMC4zODg1OTQzOTQgKzAyMDAKK0BAIC0w LDAgKzEsNjQgQEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAgICAgICB1bmljaGFyc2V0 X2xvYWRfdGVzdC5jYworKy8vIERlc2NyaXB0aW9uOiBUZXN0cyB0aGF0IFVOSUNIQVJTRVQ6Omxv YWRfdmlhX2ZnZXRzIHJlamVjdHMgdW5pY2hhcnNldAorKy8vICAgICAgICAgICAgICBmaWxlcyB3 aG9zZSBpbnNlcnRpb25zIGRlc3luY2hyb25pemUgdGhlIGlkIGxvb3AgaW5kZXgKKysvLyAgICAg ICAgICAgICAgZnJvbSB0aGUgdW5pY2hhcnMgdmVjdG9yIChkdXBsaWNhdGUgb3IgZW1wdHkKKysv LyAgICAgICAgICAgICAgcmVwcmVzZW50YXRpb25zKSwgd2hpY2ggd291bGQgbWFrZSB0aGUgc3Vi c2VxdWVudCBzZXRfKgorKy8vICAgICAgICAgICAgICBjYWxscyB3cml0ZSBvdXQgb2YgYm91bmRz LCBhbmQgbm9uLXBvc2l0aXZlIHNpemUgY291bnRzLgorKy8vCisrLy8gTGljZW5zZWQgdW5kZXIg dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisrLy8geW91 IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLgorKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vIGh0 dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKysKKysjaW5jbHVkZSAiaW5jbHVkZV9ndW5pdC5oIgorKworKyNpbmNsdWRlICJzZXJp YWxpcy5oIiAvLyBmb3IgVEZpbGUKKysjaW5jbHVkZSAidW5pY2hhcnNldC5oIgorKworKyNpbmNs dWRlIDxjc3RyaW5nPgorKworK25hbWVzcGFjZSB0ZXNzZXJhY3QgeworK25hbWVzcGFjZSB7Cisr CisrLy8gTG9hZHMgdGhlIGdpdmVuIHVuaWNoYXJzZXQgdGV4dCB2aWEgdGhlIFRGaWxlLWJhc2Vk IGxvYWRlci4KKytib29sIExvYWRVbmljaGFyc2V0KGNvbnN0IGNoYXIgKnRleHQsIFVOSUNIQVJT RVQgKnVuaWNoYXJzZXQpIHsKKysgIFRGaWxlIGZwOworKyAgaWYgKCFmcC5PcGVuKHRleHQsIHN0 ZDo6c3RybGVuKHRleHQpKSkgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrICByZXR1cm4g dW5pY2hhcnNldC0+bG9hZF9mcm9tX2ZpbGUoJmZwLCBmYWxzZSk7CisrfQorKworKy8vIEEgZHVw bGljYXRlIHJlcHJlc2VudGF0aW9uIG1ha2VzIHRoZSBzZWNvbmQgaW5zZXJ0IGEgbm8tb3AsIHNv IG9uCisrLy8gdW5wYXRjaGVkIGNvZGUgdGhlIHNldF8qIGNhbGxzIGZvciB0aGUgcmVtYWluaW5n IGxpbmVzIHdyaXRlIHBhc3QKKysvLyB0aGUgZW5kIG9mIHRoZSB1bmljaGFycyB2ZWN0b3IgKEFT YW4gY29udGFpbmVyLW92ZXJmbG93KS4KKytURVNUKFVuaWNoYXJzZXRMb2FkVGVzdCwgUmVqZWN0 c0R1cGxpY2F0ZVJlcHJlc2VudGF0aW9uKSB7CisrICBjb25zdCBjaGFyICp0ZXh0ID0gIjNcbkEg MCBMYXRpblxuQSAwIExhdGluXG5CIDAgTGF0aW5cbiI7CisrICBVTklDSEFSU0VUIHVuaWNoYXJz ZXQ7CisrICBFWFBFQ1RfRkFMU0UoTG9hZFVuaWNoYXJzZXQodGV4dCwgJnVuaWNoYXJzZXQpKTsK Kyt9CisrCisrLy8gQSBub24tcG9zaXRpdmUgc2l6ZSBjb3VudCBtdXN0IGJlIHJlamVjdGVkOyBv biB1bnBhdGNoZWQgY29kZSBhCisrLy8gemVybyBvciBuZWdhdGl2ZSBjb3VudCBsb2FkcyBhbiBl bXB0eSB1bmljaGFyc2V0IHN1Y2Nlc3NmdWxseS4KKytURVNUKFVuaWNoYXJzZXRMb2FkVGVzdCwg UmVqZWN0c05vblBvc2l0aXZlQ291bnQpIHsKKysgIGNvbnN0IGNoYXIgKnRleHRzW10gPSB7IjBc biIsICItMVxuIn07CisrICBmb3IgKGNvbnN0IGNoYXIgKnRleHQgOiB0ZXh0cykgeworKyAgICBV TklDSEFSU0VUIHVuaWNoYXJzZXQ7CisrICAgIEVYUEVDVF9GQUxTRShMb2FkVW5pY2hhcnNldCh0 ZXh0LCAmdW5pY2hhcnNldCkpOworKyAgfQorK30KKysKKysvLyBBIHZhbGlkIHVuaWNoYXJzZXQg bXVzdCBzdGlsbCBiZSBhY2NlcHRlZC4KKytURVNUKFVuaWNoYXJzZXRMb2FkVGVzdCwgQWNjZXB0 c1ZhbGlkVW5pY2hhcnNldCkgeworKyAgY29uc3QgY2hhciAqdGV4dCA9ICIzXG5BIDAgTGF0aW5c bkIgMCBMYXRpblxuQyAwIExhdGluXG4iOworKyAgVU5JQ0hBUlNFVCB1bmljaGFyc2V0OworKyAg QVNTRVJUX1RSVUUoTG9hZFVuaWNoYXJzZXQodGV4dCwgJnVuaWNoYXJzZXQpKTsKKysgIEVYUEVD VF9FUSh1bmljaGFyc2V0LnNpemUoKSwgM3UpOworKyAgRVhQRUNUX1NUUkVRKHVuaWNoYXJzZXQu aWRfdG9fdW5pY2hhcigxKSwgIkIiKTsKKyt9CisrCisrfSAvLyBuYW1lc3BhY2UKKyt9IC8vIG5h bWVzcGFjZSB0ZXNzZXJhY3QKCmRpZmYgLS1naXQgYS81NTI3NzEyMzZiMGQ4MGNiZGIwYzdkZDg1 NjEyMGZhMjFhNDY3MmU1LnBhdGNoIGIvNTUyNzcxMjM2YjBkODBjYmRiMGM3ZGQ4NTYxMjBmYTIx YTQ2NzJlNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTBhZDkz Ci0tLSAvZGV2L251bGwKKysrIGIvNTUyNzcxMjM2YjBkODBjYmRiMGM3ZGQ4NTYxMjBmYTIxYTQ2 NzJlNS5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNl IHRlc3NlcmFjdC01LjUuMy9NYWtlZmlsZS5hbSB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxl LmFtCistLS0gdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAu NDkwMzM0ODc5ICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9NYWtlZmlsZS5hbQkyMDI2 LTA5LTIxIDEwOjI4OjEwLjUwMDU0NDAwNCArMDIwMAorQEAgLTExOTksNiArMTE5OSw3IEBAIGlm IEVOQUJMRV9UUkFJTklORworIGNoZWNrX1BST0dSQU1TICs9IHBhbmdvX2ZvbnRfaW5mb190ZXN0 CisgZW5kaWYgIyBFTkFCTEVfVFJBSU5JTkcKKyBjaGVja19QUk9HUkFNUyArPSBwYXJhZ3JhcGhz X3Rlc3QKKytjaGVja19QUk9HUkFNUyArPSBwbHVtYmluZ190ZXN0CisgaWYgIURJU0FCTEVEX0xF R0FDWV9FTkdJTkUKKyBjaGVja19QUk9HUkFNUyArPSBwYXJhbXNfbW9kZWxfdGVzdAorIGVuZGlm ICMgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKK0BAIC0xNDM0LDYgKzE0MzUsMTAgQEAgcGFyYWdy YXBoc190ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9wYXJhZworIHBhcmFncmFwaHNfdGVzdF9DUFBG TEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisgcGFyYWdyYXBoc190ZXN0X0xEQUREID0gJChU RVNTX0xJQlMpCisgCisrcGx1bWJpbmdfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvcGx1bWJpbmdf dGVzdC5jYworK3BsdW1iaW5nX3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQor K3BsdW1iaW5nX3Rlc3RfTERBREQgPSAkKFRFU1NfTElCUykKKysKKyBpZiAhRElTQUJMRURfTEVH QUNZX0VOR0lORQorIHBhcmFtc19tb2RlbF90ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9wYXJhbXNf bW9kZWxfdGVzdC5jYworIHBhcmFtc19tb2RlbF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9D UFBGTEFHUykKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3Jj L2NjbWFpbi90ZXNzZWRpdC5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2NtYWluL3Rlc3Nl ZGl0LmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2NtYWluL3Rlc3NlZGl0LmNwcAkyMDI2 LTA5LTIxIDEwOjI4OjEwLjQ5MDg0NzY0MSArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2NjbWFpbi90ZXNzZWRpdC5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC41MDA5MjAxNzIgKzAy MDAKK0BAIC0xNjksNyArMTY5LDEyIEBAIGJvb2wgVGVzc2VyYWN0Ojppbml0X3Rlc3NlcmFjdF9s YW5nX2RhdGEKKyAjZW5kaWYgLy8gbmRlZiBESVNBQkxFRF9MRUdBQ1lfRU5HSU5FCisgICAgIGlm IChtZ3ItPklzQ29tcG9uZW50QXZhaWxhYmxlKFRFU1NEQVRBX0xTVE0pKSB7CisgICAgICAgbHN0 bV9yZWNvZ25pemVyXyA9IG5ldyBMU1RNUmVjb2duaXplcihsYW5ndWFnZV9kYXRhX3BhdGhfcHJl Zml4LmNfc3RyKCkpOworLSAgICAgIEFTU0VSVF9IT1NUKGxzdG1fcmVjb2duaXplcl8tPkxvYWQo dGhpcy0+cGFyYW1zKCksIGxzdG1fdXNlX21hdHJpeCA/IGxhbmd1YWdlIDogIiIsIG1ncikpOwor KyAgICAgIGlmICghbHN0bV9yZWNvZ25pemVyXy0+TG9hZCh0aGlzLT5wYXJhbXMoKSwgbHN0bV91 c2VfbWF0cml4ID8gbGFuZ3VhZ2UgOiAiIiwgbWdyKSkgeworKyAgICAgICAgZGVsZXRlIGxzdG1f cmVjb2duaXplcl87CisrICAgICAgICBsc3RtX3JlY29nbml6ZXJfID0gbnVsbHB0cjsKKysgICAg ICAgIHRwcmludGYoIkVycm9yOiBGYWlsZWQgdG8gbG9hZCB0aGUgTFNUTSBtb2RlbCBmcm9tICVz XG4iLCB0ZXNzZGF0YV9wYXRoLmNfc3RyKCkpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg ICAgIH0KKyAgICAgfSBlbHNlIHsKKyAjaWZkZWYgRElTQUJMRURfTEVHQUNZX0VOR0lORQorICAg ICAgIC8vIFRoZSBsZWdhY3kgZW5naW5lIGlzIGNvbXBpbGVkIG91dCwgc28gd2UgY2Fubm90IGZh bGwgYmFjayB0byBpdC4KK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41 LjMvc3JjL2xzdG0vcGx1bWJpbmcuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2xzdG0vcGx1 bWJpbmcuY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3RtL3BsdW1iaW5nLmNwcAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2xzdG0vcGx1bWJpbmcuY3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuNTAxMTMzMjMzICswMjAw CitAQCAtMjI2LDYgKzIyNiwxMiBAQCBib29sIFBsdW1iaW5nOjpEZVNlcmlhbGl6ZShURmlsZSAq ZnApIHsKKyAgIGlmIChzaXplID4gMTAwMDApIHsKKyAgICAgcmV0dXJuIGZhbHNlOworICAgfQor KyAgLy8gUmVqZWN0IGVtcHR5IHN0YWNrczogWFNjYWxlRmFjdG9yLCBDYWNoZVhTY2FsZUZhY3Rv ciBhbmQgb3RoZXIgbWV0aG9kcworKyAgLy8gdW5jb25kaXRpb25hbGx5IGRlcmVmZXJlbmNlIHN0 YWNrX1swXSBkdXJpbmcgbmV0d29yayBpbml0aWFsaXphdGlvbi4KKysgIC8vIEEgU2VyaWVzIG5l ZWRzIGF0IGxlYXN0IHR3byBuZXR3b3JrcyAoc2VlIFNlcmllczo6Rm9yd2FyZCkuCisrICBpZiAo c2l6ZSA9PSAwIHx8ICh0eXBlKCkgPT0gTlRfU0VSSUVTICYmIHNpemUgPT0gMSkpIHsKKysgICAg cmV0dXJuIGZhbHNlOworKyAgfQorICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemU7ICsr aSkgeworICAgICBOZXR3b3JrICpuZXR3b3JrID0gQ3JlYXRlRnJvbUZpbGUoZnApOworICAgICBp ZiAobmV0d29yayA9PSBudWxscHRyKSB7CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVz c2VyYWN0LTUuNS4zL3VuaXR0ZXN0L3BsdW1iaW5nX3Rlc3QuY2MgdGVzc2VyYWN0LTUuNS4zLW5l dy91bml0dGVzdC9wbHVtYmluZ190ZXN0LmNjCistLS0gdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0 L3BsdW1iaW5nX3Rlc3QuY2MJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr KyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L3BsdW1iaW5nX3Rlc3QuY2MJMjAyNi0wOS0y MSAxMDoyODoxMC41MDEzNDc2NTUgKzAyMDAKK0BAIC0wLDAgKzEsMTY1IEBACisrLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKysvLyBGaWxlOiAgICAgICAgcGx1bWJpbmdfdGVzdC5jYworKy8vIERlc2NyaXB0aW9u OiBUZXN0cyB0aGF0IGEgY29ycnVwdCBURVNTREFUQV9MU1RNIGNvbXBvbmVudCBpbiBhCisrLy8g ICAgICAgICAgICAgIC50cmFpbmVkZGF0YSBmaWxlIGlzIHJlamVjdGVkIHdpdGhvdXQgY3Jhc2hp bmcuIEEKKysvLyAgICAgICAgICAgICAgcGx1bWJpbmcgbGF5ZXIgKFNlcmllcy9QYXJhbGxlbC9S ZXZlcnNlZCkgd2l0aCBhbgorKy8vICAgICAgICAgICAgICBlbXB0eSBvciB1bmRlcnNpemVkIG5l dHdvcmsgc3RhY2sgd291bGQgbWFrZQorKy8vICAgICAgICAgICAgICBYU2NhbGVGYWN0b3IvQ2Fj aGVYU2NhbGVGYWN0b3IgZGVyZWZlcmVuY2Ugc3RhY2tfWzBdCisrLy8gICAgICAgICAgICAgIGR1 cmluZyBlbmdpbmUgaW5pdGlhbGl6YXRpb24uCisrLy8KKysvLyBMaWNlbnNlZCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKysvLyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu CisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworKworKyNpbmNsdWRlICJpbmNsdWRlX2d1bml0LmgiCisrCisrI2luY2x1ZGUgPHRlc3NlcmFj dC9iYXNlYXBpLmg+CisrCisrI2luY2x1ZGUgIm5ldHdvcmsuaCIgICAgICAgIC8vIGZvciBOZXR3 b3JrVHlwZQorKyNpbmNsdWRlICJ0ZXNzZGF0YW1hbmFnZXIuaCIgLy8gZm9yIFRlc3NkYXRhTWFu YWdlciwgVEVTU0RBVEFfTFNUTQorKworKyNpbmNsdWRlIDxjc3RkaW50PgorKyNpbmNsdWRlIDxj c3RkaW8+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1 ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8dmVjdG9yPgorKworK25hbWVzcGFjZSB0ZXNzZXJhY3Qg eworK25hbWVzcGFjZSB7CisrCisrLy8gTWluaW1hbCB1bmljaGFyc2V0IHdpdGggdGhlIHNwZWNp YWwgY29kZXMgKHNwYWNlLCBKb2luZWQsIEJyb2tlbikgdGhhdAorKy8vIFVOSUNIQVJTRVQ6Omxv YWRfZnJvbV9maWxlIGV4cGVjdHMsIGFzIGVtYmVkZGVkIGluIHRoZSBURVNTREFUQV9MU1RNCisr Ly8gY29tcG9uZW50IGJ5IExTVE1SZWNvZ25pemVyOjpTZXJpYWxpemUuCisrY29uc3QgY2hhciBr TWluVW5pY2hhcnNldFtdID0KKysgICAgIjNcbiIKKysgICAgIk5VTEwgMCBOVUxMIDBcbiIKKysg ICAgIkpvaW5lZCA3IDAsNjksMTg4LDI1NSw0ODYsMTIxOCwwLDMwLDQ4NiwxMTg4IExhdGluIDI2 IDAgOTggSm9pbmVkXG4iCisrICAgICJ8QnJva2VufDB8MSBmIDAsNjksMTg2LDI1NSw4OTIsMjEz OCwwLDgwLDg5MiwyMDU4IENvbW1vbiA4NCAxMCA4NCB8QnJva2VufDB8MVxuIjsKKysKKysvLyBB cHBlbmRzIHJhdyBsaXR0bGUtZW5kaWFuIHZhbHVlcyB0byBhIGJ5dGUgYnVmZmVyLgorK2NsYXNz IEJ5dGVXcml0ZXIgeworK3B1YmxpYzoKKysgIHZvaWQgUHV0VTgodWludDMyX3QgdikgeyBkYXRh Xy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4odiAmIDB4RkYpKTsgfQorKyAgdm9pZCBQdXRV MzIodWludDMyX3QgdikgeworKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgeworKyAg ICAgIGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigodiA+PiAoOCAqIGkpKSAmIDB4 RkYpKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBQdXRTMzIoaW50MzJfdCB2KSB7IFB1dFUzMihz dGF0aWNfY2FzdDx1aW50MzJfdD4odikpOyB9CisrICB2b2lkIFB1dFN0cmluZyhjb25zdCBjaGFy ICpzKSB7CisrICAgIFB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RkOjpzdHJsZW4ocykp KTsKKysgICAgZGF0YV8uaW5zZXJ0KGRhdGFfLmVuZCgpLCBzLCBzICsgc3RkOjpzdHJsZW4ocykp OworKyAgfQorKyAgdm9pZCBQdXRSYXcoY29uc3QgY2hhciAqcykgeyBkYXRhXy5pbnNlcnQoZGF0 YV8uZW5kKCksIHMsIHMgKyBzdGQ6OnN0cmxlbihzKSk7IH0KKysgIGNvbnN0IHN0ZDo6dmVjdG9y PGNoYXI+ICZkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KKysKKytwcml2YXRlOgorKyAg c3RkOjp2ZWN0b3I8Y2hhcj4gZGF0YV87CisrfTsKKysKKysvLyBTZXJpYWxpemVkIG5ldHdvcmsg aGVhZGVyIGFzIHdyaXR0ZW4gYnkgTmV0d29yazo6U2VyaWFsaXplOgorKy8vICAgaW50OCB0eXBl LCBpbnQ4IHRyYWluaW5nLCBpbnQ4IG5lZWRzX3RvX2JhY2twcm9wLCBpbnQzMiBuZXR3b3JrX2Zs YWdzLAorKy8vICAgaW50MzIgbmksIGludDMyIG5vLCBpbnQzMiBudW1fd2VpZ2h0cywgc3RyaW5n IG5hbWUuCisrdm9pZCBBcHBlbmROZXR3b3JrSGVhZGVyKEJ5dGVXcml0ZXIgKncsIE5ldHdvcmtU eXBlIHR5cGUpIHsKKysgIHctPlB1dFU4KHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSk7Cisr ICB3LT5QdXRVOCgwKTsgLy8gdHJhaW5pbmc6IFRTX0RJU0FCTEVECisrICB3LT5QdXRVOCgwKTsg Ly8gbmVlZHNfdG9fYmFja3Byb3AKKysgIHctPlB1dFUzMigwKTsgLy8gbmV0d29ya19mbGFncwor KyAgdy0+UHV0VTMyKDApOyAvLyBuaQorKyAgdy0+UHV0VTMyKDApOyAvLyBubworKyAgdy0+UHV0 VTMyKDApOyAvLyBudW1fd2VpZ2h0cworKyAgdy0+UHV0U3RyaW5nKCIiKTsgLy8gbmFtZQorK30K KysKKysvLyBBIG1pbmltYWwgdmFsaWQgY2hpbGQgbmV0d29yayAoTlRfSU5QVVQgd2l0aCBhIDF4 MXgxeDEgc2hhcGUpLgorK3ZvaWQgQXBwZW5kSW5wdXRDaGlsZChCeXRlV3JpdGVyICp3KSB7Cisr ICBBcHBlbmROZXR3b3JrSGVhZGVyKHcsIE5UX0lOUFVUKTsKKysgIHctPlB1dFMzMigxKTsgLy8g YmF0Y2gKKysgIHctPlB1dFMzMigxKTsgLy8gaGVpZ2h0CisrICB3LT5QdXRTMzIoMSk7IC8vIHdp ZHRoCisrICB3LT5QdXRTMzIoMSk7IC8vIGRlcHRoCisrICB3LT5QdXRTMzIoMCk7IC8vIGxvc3Mg dHlwZQorK30KKysKKysvLyBCdWlsZHMgYSBURVNTREFUQV9MU1RNIGNvbXBvbmVudCB3aG9zZSB0 b3AtbGV2ZWwgbmV0d29yayBpcyBhIHBsdW1iaW5nCisrLy8gbGF5ZXIgb2YgdGhlIGdpdmVuIHR5 cGUgd2l0aCB0aGUgZ2l2ZW4gKGNvcnJ1cHQpIHN0YWNrIHNpemUsIGZvbGxvd2VkIGJ5CisrLy8g dGhlIHJlbWFpbmluZyBmaWVsZHMgb2YgTFNUTVJlY29nbml6ZXI6OkRlU2VyaWFsaXplLgorK3N0 ZDo6dmVjdG9yPGNoYXI+IE1ha2VMc3RtQ29tcG9uZW50KE5ldHdvcmtUeXBlIHR5cGUsIHVpbnQz Ml90IHN0YWNrX3NpemUpIHsKKysgIEJ5dGVXcml0ZXIgdzsKKysgIEFwcGVuZE5ldHdvcmtIZWFk ZXIoJncsIHR5cGUpOworKyAgdy5QdXRVMzIoc3RhY2tfc2l6ZSk7IC8vIFBsdW1iaW5nOjpEZVNl cmlhbGl6ZSByZWFkcyB0aGlzIGFzIHVpbnQzMgorKyAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8 IHN0YWNrX3NpemU7ICsraSkgeworKyAgICBBcHBlbmRJbnB1dENoaWxkKCZ3KTsKKysgIH0KKysg IHcuUHV0UmF3KGtNaW5VbmljaGFyc2V0KTsgLy8gdW5pY2hhcnNldCAocmF3IHRleHQsIG5vIHJl Y29kZXIvdW5pY2hhcnNldCBjb21wb25lbnRzKQorKyAgdy5QdXRTdHJpbmcoIiIpOyAgICAgICAg ICAgICAvLyBuZXR3b3JrX3N0cl8KKysgIHcuUHV0UzMyKDApOyAgICAgICAgICAgICAgICAgLy8g dHJhaW5pbmdfZmxhZ3NfCisrICB3LlB1dFMzMigwKTsgICAgICAgICAgICAgICAgIC8vIHRyYWlu aW5nX2l0ZXJhdGlvbl8KKysgIHcuUHV0UzMyKDApOyAgICAgICAgICAgICAgICAgLy8gc2FtcGxl X2l0ZXJhdGlvbl8KKysgIHcuUHV0UzMyKDApOyAgICAgICAgICAgICAgICAgLy8gbnVsbF9jaGFy XworKyAgdy5QdXRVMzIoMCk7ICAgICAgICAgICAgICAgICAvLyBhZGFtX2JldGFfIChmbG9hdCAw LjApCisrICB3LlB1dFUzMigwKTsgICAgICAgICAgICAgICAgIC8vIGxlYXJuaW5nX3JhdGVfIChm bG9hdCAwLjApCisrICB3LlB1dFUzMigwKTsgICAgICAgICAgICAgICAgIC8vIG1vbWVudHVtXyAo ZmxvYXQgMC4wKQorKyAgcmV0dXJuIHcuZGF0YSgpOworK30KKysKKysvLyBXcml0ZXMgYSB0cmFp bmVkZGF0YSBmaWxlIHdpdGggdGhlIGdpdmVuIChjb3JydXB0KSBMU1RNIGNvbXBvbmVudCB0bwor Ky8vIGRpci9lbmcudHJhaW5lZGRhdGEuCisrYm9vbCBXcml0ZUNvcnJ1cHRUcmFpbmVkZGF0YShj b25zdCBzdGQ6OnN0cmluZyAmZGlyLCBjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiAmbHN0bSkgewor KyAgVGVzc2RhdGFNYW5hZ2VyIG1ncjsKKysgIG1nci5PdmVyd3JpdGVFbnRyeShURVNTREFUQV9M U1RNLCBsc3RtLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50Pihsc3RtLnNpemUoKSkpOworKyAgcmV0 dXJuIG1nci5TYXZlRmlsZSgoZGlyICsgIi9lbmcudHJhaW5lZGRhdGEiKS5jX3N0cigpLCBudWxs cHRyKTsKKyt9CisrCisrY2xhc3MgUGx1bWJpbmdUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qg eworK3Byb3RlY3RlZDoKKysgIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisrICAgIHRtcGxfID0g Ii90bXAvdGVzc19wbHVtYmluZ190ZXN0X1hYWFhYWCI7CisrICAgIGNoYXIgKmRpciA9IG1rZHRl bXAodG1wbF8uZGF0YSgpKTsKKysgICAgQVNTRVJUX05FKGRpciwgbnVsbHB0cik7CisrICAgIGRp cl8gPSBkaXI7CisrICB9CisrICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgeworKyAgICBzdGQ6 OnJlbW92ZSgoZGlyXyArICIvZW5nLnRyYWluZWRkYXRhIikuY19zdHIoKSk7CisrICAgIHJtZGly KGRpcl8uY19zdHIoKSk7CisrICB9CisrICAvLyBFeHBlY3RzIHRoZSBMU1RNIGVuZ2luZSB0byBy ZWplY3QgdGhlIGNvcnJ1cHRlZCB0cmFpbmVkZGF0YQorKyAgLy8gZ3JhY2VmdWxseSAoaW5pdCBm YWlsdXJlKSBpbnN0ZWFkIG9mIGNyYXNoaW5nLgorKyAgdm9pZCBFeHBlY3RJbml0RmFpbHMoY29u c3Qgc3RkOjp2ZWN0b3I8Y2hhcj4gJmxzdG0pIHsKKysgICAgQVNTRVJUX1RSVUUoV3JpdGVDb3Jy dXB0VHJhaW5lZGRhdGEoZGlyXywgbHN0bSkpOworKyAgICB0ZXNzZXJhY3Q6OlRlc3NCYXNlQVBJ IGFwaTsKKysgICAgRVhQRUNUX0VRKGFwaS5Jbml0KGRpcl8uY19zdHIoKSwgImVuZyIsIHRlc3Nl cmFjdDo6T0VNX0xTVE1fT05MWSksIC0xKTsKKysgIH0KKysgIHN0ZDo6c3RyaW5nIGRpcl87Cisr ICBzdGQ6OnN0cmluZyB0bXBsXzsKKyt9OworKworKy8vIEVtcHR5IE5UX1NFUklFUyBzdGFjazog U2VyaWVzOjpDYWNoZVhTY2FsZUZhY3RvciB3b3VsZCBkZXJlZmVyZW5jZQorKy8vIHN0YWNrX1sw XSBvbiB0aGUgZW1wdHkgdmVjdG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKytURVNUX0YoUGx1 bWJpbmdUZXN0LCBSZWplY3RzRW1wdHlTZXJpZXNTdGFjaykgeworKyAgRXhwZWN0SW5pdEZhaWxz KE1ha2VMc3RtQ29tcG9uZW50KE5UX1NFUklFUywgMCkpOworK30KKysKKysvLyBFbXB0eSBOVF9Q QVJBTExFTCBzdGFjazogUGx1bWJpbmc6OlhTY2FsZUZhY3RvciB3b3VsZCBkZXJlZmVyZW5jZQor Ky8vIHN0YWNrX1swXSBvbiB0aGUgZW1wdHkgdmVjdG9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4K KytURVNUX0YoUGx1bWJpbmdUZXN0LCBSZWplY3RzRW1wdHlQYXJhbGxlbFN0YWNrKSB7CisrICBF eHBlY3RJbml0RmFpbHMoTWFrZUxzdG1Db21wb25lbnQoTlRfUEFSQUxMRUwsIDApKTsKKyt9Cisr CisrLy8gRW1wdHkgTlRfWFJFVkVSU0VEIHN0YWNrOiBzYW1lIGNyYXNoIGFzIHRoZSBwYXJhbGxl bCBjYXNlLgorK1RFU1RfRihQbHVtYmluZ1Rlc3QsIFJlamVjdHNFbXB0eVJldmVyc2VkU3RhY2sp IHsKKysgIEV4cGVjdEluaXRGYWlscyhNYWtlTHN0bUNvbXBvbmVudChOVF9YUkVWRVJTRUQsIDAp KTsKKyt9CisrCisrLy8gQSBTZXJpZXMgd2l0aCBhIHNpbmdsZSBuZXR3b3JrOiBTZXJpZXM6OkZv cndhcmQgcmVxdWlyZXMgYXQgbGVhc3QgdHdvCisrLy8gbmV0d29ya3MsIHNvIHN1Y2ggYSBtb2Rl bCBjYW4gbmV2ZXIgd29yay4KKytURVNUX0YoUGx1bWJpbmdUZXN0LCBSZWplY3RzU2luZ2xlTmV0 d29ya1NlcmllcykgeworKyAgRXhwZWN0SW5pdEZhaWxzKE1ha2VMc3RtQ29tcG9uZW50KE5UX1NF UklFUywgMSkpOworK30KKysKKyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFtZXNwYWNlIHRlc3Nl cmFjdAoKZGlmZiAtLWdpdCBhLzU2ZTA5Y2ExMmU3NTE2MjNmZTc5NmNlMTU1NGNlNzA0YmZmZDJl ZjAucGF0Y2ggYi81NmUwOWNhMTJlNzUxNjIzZmU3OTZjZTE1NTRjZTcwNGJmZmQyZWYwLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjY0YjEKLS0tIC9kZXYvbnVs bAorKysgYi81NmUwOWNhMTJlNzUxNjIzZmU3OTZjZTE1NTRjZTcwNGJmZmQyZWYwLnBhdGNoCkBA IC0wLDAgKzEsMTQxIEBACitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUu NS4zL01ha2VmaWxlLmFtIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0KKy0tLSB0ZXNz ZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4zMzU0NzM2NTcgKzAy MDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6 MTAuMzQwOTkwMTA2ICswMjAwCitAQCAtMTE1OSw2ICsxMTU5LDcgQEAgY2hlY2tfUFJPR1JBTVMg Kz0gZXF1YXRpb25kZXRlY3RfdGVzdAorIGVuZGlmICMgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUK KyBjaGVja19QUk9HUkFNUyArPSBmaWxlaW9fdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IGZ1bGx5 Y29ubmVjdGVkX3Rlc3QKKytjaGVja19QUk9HUkFNUyArPSBnZW5lcmljdmVjdG9yX3Rlc3QKKyBj aGVja19QUk9HUkFNUyArPSBoZWFwX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSBpbWFnZWRhdGFf dGVzdAorIGlmICFESVNBQkxFRF9MRUdBQ1lfRU5HSU5FCitAQCAtMTI5Nyw2ICsxMjk4LDEwIEBA IGZ1bGx5Y29ubmVjdGVkX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2YKKyBmdWxseWNvbm5lY3Rl ZF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBmdWxseWNvbm5lY3RlZF90 ZXN0X0xEQUREID0gJChURVNTX0xJQlMpCisgCisrZ2VuZXJpY3ZlY3Rvcl90ZXN0X1NPVVJDRVMg PSB1bml0dGVzdC9nZW5lcmljdmVjdG9yX3Rlc3QuY2MKKytnZW5lcmljdmVjdG9yX3Rlc3RfQ1BQ RkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorK2dlbmVyaWN2ZWN0b3JfdGVzdF9MREFERCA9 ICQoVEVTU19MSUJTKQorKworIGhlYXBfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvaGVhcF90ZXN0 LmNjCisgaGVhcF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBoZWFwX3Rl c3RfTERBREQgPSAkKFRFU1NfTElCUykKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNz ZXJhY3QtNS41LjMvc3JjL2NjdXRpbC9nZW5lcmljdmVjdG9yLmggdGVzc2VyYWN0LTUuNS4zLW5l dy9zcmMvY2N1dGlsL2dlbmVyaWN2ZWN0b3IuaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1 dGlsL2dlbmVyaWN2ZWN0b3IuaAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAor KysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjdXRpbC9nZW5lcmljdmVjdG9yLmgJMjAyNi0w OS0yMSAxMDoyODoxMC4zNDE2NDg4MzggKzAyMDAKK0BAIC02NTQsMTAgKzY1NCwyMCBAQCBib29s IEdlbmVyaWNWZWN0b3I8VD46OnJlYWQoVEZpbGUgKmYsIGNvCisgICBpZiAoZi0+RlJlYWRFbmRp YW4oJnJlc2VydmVkLCBzaXplb2YocmVzZXJ2ZWQpLCAxKSAhPSAxKSB7CisgICAgIHJldHVybiBm YWxzZTsKKyAgIH0KKysgIC8vIEFyYml0cmFyaWx5IGxpbWl0IHRoZSBudW1iZXIgb2YgZWxlbWVu dHMgdG8gcHJvdGVjdCBhZ2FpbnN0IGJhZCBkYXRhLgorKyAgY29uc3QgdWludDMyX3QgbGltaXQg PSA1MDAwMDAwMDsKKysgIGlmIChyZXNlcnZlZCA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+ KHJlc2VydmVkKSA+IGxpbWl0KSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKyAgIHJlc2Vy dmUocmVzZXJ2ZWQpOworICAgaWYgKGYtPkZSZWFkRW5kaWFuKCZzaXplX3VzZWRfLCBzaXplb2Yo c2l6ZV91c2VkXyksIDEpICE9IDEpIHsKKyAgICAgcmV0dXJuIGZhbHNlOworICAgfQorKyAgLy8g c2l6ZV91c2VkXyBpcyBhbiBpbmRlcGVuZGVudCBmaWxlIGZpZWxkOyB3aXRob3V0IHRoaXMgY2hl Y2sgdGhlIHJlYWRzCisrICAvLyBiZWxvdyBsYW5kIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVy IHNpemVkIGZyb20gcmVzZXJ2ZWQuCisrICBpZiAoc2l6ZV91c2VkXyA8IDAgfHwgc2l6ZV91c2Vk XyA+IHJlc2VydmVkKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKyAgIGlmIChjYiAhPSBu dWxscHRyKSB7CisgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZV91c2VkXzsgKytpKSB7Cisg ICAgICAgaWYgKCFjYihmLCBkYXRhXyArIGkpKSB7CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVu Y2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2dlbmVyaWN2ZWN0b3JfdGVzdC5jYyB0ZXNzZXJh Y3QtNS41LjMtbmV3L3VuaXR0ZXN0L2dlbmVyaWN2ZWN0b3JfdGVzdC5jYworLS0tIHRlc3NlcmFj dC01LjUuMy91bml0dGVzdC9nZW5lcmljdmVjdG9yX3Rlc3QuY2MJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L2dlbmVy aWN2ZWN0b3JfdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjM0MjAxMzQ4NCArMDIwMAorQEAg LTAsMCArMSw5MSBAQAorKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrLy8gRmlsZTogICAgICAgIGdlbmVyaWN2 ZWN0b3JfdGVzdC5jYworKy8vIERlc2NyaXB0aW9uOiBUZXN0cyB0aGF0IHRoZSBjYWxsYmFjayBm b3JtIG9mIEdlbmVyaWNWZWN0b3I6OnJlYWQKKysvLyAgICAgICAgICAgICAgcmVqZWN0cyB2ZWN0 b3JzIHdob3NlIHNpemVfdXNlZF8gZXhjZWVkcyByZXNlcnZlZCAob3IKKysvLyAgICAgICAgICAg ICAgd2hvc2UgY291bnRzIGFyZSBuZWdhdGl2ZSkuIHJlc2VydmVkIHNpemVzIHRoZSBidWZmZXIK KysvLyAgICAgICAgICAgICAgd2hpbGUgc2l6ZV91c2VkXyBpcyBhbiBpbmRlcGVuZGVudCBmaWxl IGZpZWxkIGRyaXZpbmcKKysvLyAgICAgICAgICAgICAgdGhlIGVsZW1lbnQgbG9vcCwgc28gYSBj cmFmdGVkIC50cmFpbmVkZGF0YSAoZS5nLiB0aGUKKysvLyAgICAgICAgICAgICAgZm9udGluZm8g dGFibGUgb2YgYSB2ZXJzaW9uID49IDQgaW50dGVtcCBjb21wb25lbnQpCisrLy8gICAgICAgICAg ICAgIHBlcmZvcm1zIGEgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIGR1cmluZyBsZWdhY3kKKysv LyAgICAgICAgICAgICAgZW5naW5lIGluaXRpYWxpemF0aW9uLgorKy8vCisrLy8gTGljZW5zZWQg dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisr Ly8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo ZSBMaWNlbnNlLgorKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor Ky8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KKysKKysjaW5jbHVkZSAiaW5jbHVkZV9ndW5pdC5oIgorKworKyNpbmNsdWRl ICJnZW5lcmljdmVjdG9yLmgiCisrI2luY2x1ZGUgInNlcmlhbGlzLmgiIC8vIGZvciBURmlsZQor KworKyNpbmNsdWRlIDxjc3RkaW50PgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNl IHRlc3NlcmFjdCB7CisrbmFtZXNwYWNlIHsKKysKKysvLyBBcHBlbmRzIHJhdyBsaXR0bGUtZW5k aWFuIHZhbHVlcyB0byBhIGJ5dGUgYnVmZmVyLgorK2NsYXNzIEJ5dGVXcml0ZXIgeworK3B1Ymxp YzoKKysgIHZvaWQgUHV0UzMyKGludDMyX3QgdikgeworKyAgICB1aW50MzJfdCB1ID0gc3RhdGlj X2Nhc3Q8dWludDMyX3Q+KHYpOworKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewor KyAgICAgIGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigodSA+PiAoOCAqIGkpKSAm IDB4RkYpKTsKKysgICAgfQorKyAgfQorKyAgY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4gJmRhdGEo KSBjb25zdCB7IHJldHVybiBkYXRhXzsgfQorKworK3ByaXZhdGU6CisrICBzdGQ6OnZlY3Rvcjxj aGFyPiBkYXRhXzsKKyt9OworKworKy8vIEEgc2VyaWFsaXplZCB2ZWN0b3IgaGVhZGVyIChyZXNl cnZlZCwgc2l6ZV91c2VkXykgZm9sbG93ZWQgYnkgdGhlCisrLy8gZ2l2ZW4gbnVtYmVyIG9mIGlu dDMyIGVsZW1lbnRzLgorK3N0ZDo6dmVjdG9yPGNoYXI+IE1ha2VWZWN0b3IoaW50MzJfdCByZXNl cnZlZCwgaW50MzJfdCBzaXplX3VzZWQsIGludDMyX3QgbnVtX2VsZW1lbnRzKSB7CisrICBCeXRl V3JpdGVyIHc7CisrICB3LlB1dFMzMihyZXNlcnZlZCk7CisrICB3LlB1dFMzMihzaXplX3VzZWQp OworKyAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzOyArK2kpIHsKKysgICAg dy5QdXRTMzIoaSk7CisrICB9CisrICByZXR1cm4gdy5kYXRhKCk7CisrfQorKworKy8vIHJlc2Vy dmVkPTQgYnV0IHNpemVfdXNlZF89MHgxMDAwMDogb24gdW5wYXRjaGVkIGNvZGUgdGhlIGNhbGxi YWNrCisrLy8gbG9vcCB3cml0ZXMgNjU1MzYgaW50cyBwYXN0IHRoZSA0LWludCBidWZmZXIgKGhl YXAgb3V0LW9mLWJvdW5kcworKy8vIHdyaXRlKS4KKytURVNUKEdlbmVyaWNWZWN0b3JUZXN0LCBS ZWplY3RzU2l6ZVVzZWRCZXlvbmRSZXNlcnZlZCkgeworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0 ZXMgPSBNYWtlVmVjdG9yKDQsIDB4MTAwMDAsIDB4MTAwMDApOworKyAgVEZpbGUgZnA7CisrICBB U1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBHZW5l cmljVmVjdG9yPGludD4gdjsKKysgIEVYUEVDVF9GQUxTRSh2LnJlYWQoJmZwLCBbXShURmlsZSAq ZiwgaW50ICpwKSB7IHJldHVybiBmLT5EZVNlcmlhbGl6ZShwKTsgfSkpOworK30KKysKKysvLyBO ZWdhdGl2ZSBjb3VudHMgbXVzdCBiZSByZWplY3RlZDsgb24gdW5wYXRjaGVkIGNvZGUgdGhlIHJl YWQKKysvLyAic3VjY2VlZHMiIGFuZCBsZWF2ZXMgc2l6ZV91c2VkXyBuZWdhdGl2ZS4KKytURVNU KEdlbmVyaWNWZWN0b3JUZXN0LCBSZWplY3RzTmVnYXRpdmVDb3VudHMpIHsKKysgIHN0ZDo6dmVj dG9yPGNoYXI+IGJ5dGVzID0gTWFrZVZlY3RvcigtMSwgLTEsIDApOworKyAgVEZpbGUgZnA7Cisr ICBBU1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBH ZW5lcmljVmVjdG9yPGludD4gdjsKKysgIEVYUEVDVF9GQUxTRSh2LnJlYWQoJmZwLCBbXShURmls ZSAqZiwgaW50ICpwKSB7IHJldHVybiBmLT5EZVNlcmlhbGl6ZShwKTsgfSkpOworK30KKysKKysv LyBBIGNvbnNpc3RlbnQgdmVjdG9yIG11c3Qgc3RpbGwgYmUgYWNjZXB0ZWQuCisrVEVTVChHZW5l cmljVmVjdG9yVGVzdCwgQWNjZXB0c0NvbnNpc3RlbnRWZWN0b3IpIHsKKysgIHN0ZDo6dmVjdG9y PGNoYXI+IGJ5dGVzID0gTWFrZVZlY3Rvcig0LCAyLCAyKTsKKysgIFRGaWxlIGZwOworKyAgQVNT RVJUX1RSVUUoZnAuT3BlbihieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgR2VuZXJp Y1ZlY3RvcjxpbnQ+IHY7CisrICBBU1NFUlRfVFJVRSh2LnJlYWQoJmZwLCBbXShURmlsZSAqZiwg aW50ICpwKSB7IHJldHVybiBmLT5EZVNlcmlhbGl6ZShwKTsgfSkpOworKyAgRVhQRUNUX0VRKHYu c2l6ZSgpLCAyKTsKKysgIEVYUEVDVF9FUSh2WzBdLCAwKTsKKysgIEVYUEVDVF9FUSh2WzFdLCAx KTsKKyt9CisrCisrfSAvLyBuYW1lc3BhY2UKKyt9IC8vIG5hbWVzcGFjZSB0ZXNzZXJhY3QKCmRp ZmYgLS1naXQgYS84YjA1NzQ2ODBmM2IyMmYyNDZhZGU2YTRjOGUzMDI5MTA0MjU1YzYzLnBhdGNo IGIvOGIwNTc0NjgwZjNiMjJmMjQ2YWRlNmE0YzhlMzAyOTEwNDI1NWM2My5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVkZWE5Ci0tLSAvZGV2L251bGwKKysrIGIv OGIwNTc0NjgwZjNiMjJmMjQ2YWRlNmE0YzhlMzAyOTEwNDI1NWM2My5wYXRjaApAQCAtMCwwICsx LDc2MCBAQAorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9NYWtl ZmlsZS5hbSB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCistLS0gdGVzc2VyYWN0LTUu NS4zL01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDI4NjgxMTMzICswMjAwCisrKysg dGVzc2VyYWN0LTUuNS4zLW5ldy9NYWtlZmlsZS5hbQkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzNjUw MzUwOSArMDIwMAorQEAgLTExNjUsNiArMTE2NSw3IEBAIGNoZWNrX1BST0dSQU1TICs9IGltYWdl ZGF0YV90ZXN0CisgaWYgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKyBjaGVja19QUk9HUkFNUyAr PSBpbmRleG1hcGJpZGlfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IGludGZlYXR1cmVtYXBfdGVz dAorK2NoZWNrX1BST0dSQU1TICs9IGludHByb3RvX3Rlc3QKKyBlbmRpZiAjICFESVNBQkxFRF9M RUdBQ1lfRU5HSU5FCisgY2hlY2tfUFJPR1JBTVMgKz0gaW50c2ltZG1hdHJpeF90ZXN0CisgY2hl Y2tfUFJPR1JBTVMgKz0gbGFuZ19tb2RlbF90ZXN0CitAQCAtMTMyMyw2ICsxMzI0LDEyIEBAIGlu dGZlYXR1cmVtYXBfdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3QKKyBpbnRmZWF0dXJlbWFwX3Rl c3RfTERBREQgPSAkKFRSQUlOSU5HX0xJQlMpCisgZW5kaWYgIyAhRElTQUJMRURfTEVHQUNZX0VO R0lORQorIAorK2lmICFESVNBQkxFRF9MRUdBQ1lfRU5HSU5FCisraW50cHJvdG9fdGVzdF9TT1VS Q0VTID0gdW5pdHRlc3QvaW50cHJvdG9fdGVzdC5jYworK2ludHByb3RvX3Rlc3RfQ1BQRkxBR1Mg PSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorK2ludHByb3RvX3Rlc3RfTERBREQgPSAkKFRFU1NfTElC UykKKytlbmRpZiAjICFESVNBQkxFRF9MRUdBQ1lfRU5HSU5FCisrCisgaW50c2ltZG1hdHJpeF90 ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9pbnRzaW1kbWF0cml4X3Rlc3QuY2MKKyBpbnRzaW1kbWF0 cml4X3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIGlmIEhBVkVfQVZYMgor ZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2NtYWluL3Rl c3NlZGl0LmNwcCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY21haW4vdGVzc2VkaXQuY3BwCist LS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9jY21haW4vdGVzc2VkaXQuY3BwCTIwMjYtMDctMjQgMjA6 Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2NtYWlu L3Rlc3NlZGl0LmNwcAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzNjg0MjU3NCArMDIwMAorQEAgLTQx OCw3ICs0MTgsOSBAQCBpbnQgVGVzc2VyYWN0Ojppbml0X3Rlc3NlcmFjdF9pbnRlcm5hbChjCisg ICAvLyBJZiBvbmx5IExTVE0gd2lsbCBiZSB1c2VkLCBza2lwIGxvYWRpbmcgVGVzc2VyYWN0IGNs YXNzaWZpZXIncworICAgLy8gcHJlLXRyYWluZWQgdGVtcGxhdGVzIGFuZCBkaWN0aW9uYXJ5Lgor ICAgYm9vbCBpbml0X3Rlc3NlcmFjdCA9IHRlc3NlZGl0X29jcl9lbmdpbmVfbW9kZSAhPSBPRU1f TFNUTV9PTkxZOworLSAgcHJvZ3JhbV9lZGl0dXAodGV4dGJhc2UsIGluaXRfdGVzc2VyYWN0ID8g bWdyIDogbnVsbHB0ciwgaW5pdF90ZXNzZXJhY3QgPyBtZ3IgOiBudWxscHRyKTsKKysgIGlmICgh cHJvZ3JhbV9lZGl0dXAodGV4dGJhc2UsIGluaXRfdGVzc2VyYWN0ID8gbWdyIDogbnVsbHB0ciwg aW5pdF90ZXNzZXJhY3QgPyBtZ3IgOiBudWxscHRyKSkgeworKyAgICByZXR1cm4gLTE7CisrICB9 CisgICByZXR1cm4gMDsgLy8gTm9ybWFsIGV4aXQKKyB9CisgCitkaWZmIC1ydXBOIC0tbm8tZGVy ZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3N0cnVjdC9ibGFtZXIuaCB0ZXNzZXJhY3Qt NS41LjMtbmV3L3NyYy9jY3N0cnVjdC9ibGFtZXIuaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMv Y2NzdHJ1Y3QvYmxhbWVyLmgJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysr KyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3N0cnVjdC9ibGFtZXIuaAkyMDI2LTA5LTIxIDEw OjI4OjEwLjQzNDUwMDQ2NyArMDIwMAorQEAgLTIzMiw2ICsyMzIsNyBAQCBzdHJ1Y3QgQmxhbWVy QnVuZGxlIHsKKyAgICAgICBsYXR0aWNlX3NpemVfID0gb3RoZXIubGF0dGljZV9zaXplXzsKKyAg ICAgfSBlbHNlIHsKKyAgICAgICBsYXR0aWNlX2RhdGFfID0gbnVsbHB0cjsKKysgICAgICBsYXR0 aWNlX3NpemVfID0gMDsKKyAgICAgfQorICAgfQorICAgY29uc3QgY2hhciAqSW5jb3JyZWN0UmVh c29uKCkgY29uc3Q7CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4z L3NyYy9jY3V0aWwvY2xzdC5oIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjdXRpbC9jbHN0LmgK Ky0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NjdXRpbC9jbHN0LmgJMjAyNi0wNy0yNCAyMDoyNzow Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0aWwvY2xz dC5oCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDM0OTMyOTY2ICswMjAwCitAQCAtMTQ2LDYgKzE0Niwx MyBAQCBwdWJsaWM6CisgICBwdWJsaWM6CisgICAgIEl0ZXJhdG9yKCkgeyAvLyBjb25zdHJ1Y3Rv cgorICAgICAgIGxpc3QgPSBudWxscHRyOworKyAgICAgIHByZXYgPSBudWxscHRyOworKyAgICAg IGN1cnJlbnQgPSBudWxscHRyOworKyAgICAgIG5leHQgPSBudWxscHRyOworKyAgICAgIGN5Y2xl X3B0ID0gbnVsbHB0cjsgLy8gYXdhaXQgZXhwbGljaXQgc2V0CisrICAgICAgc3RhcnRlZF9jeWNs aW5nID0gZmFsc2U7CisrICAgICAgZXhfY3VycmVudF93YXNfbGFzdCA9IGZhbHNlOworKyAgICAg IGV4X2N1cnJlbnRfd2FzX2N5Y2xlX3B0ID0gZmFsc2U7CisgICAgIH0gLy8gdW5hc3NpZ25lZCBs aXN0CisgCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0 ZXNzZXJhY3QtNS41LjMvc3JjL2NjdXRpbC9lbHN0LmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMv Y2N1dGlsL2Vsc3QuaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1dGlsL2Vsc3QuaAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2NjdXRpbC9lbHN0LmgJMjAyNi0wOS0yMSAxMDoyODoxMC40MzUzNDkzNDcgKzAyMDAKK0BA IC0yMDksNiArMjA5LDEzIEBAIHB1YmxpYzoKKyAgIHB1YmxpYzoKKyAgICAgSXRlcmF0b3IoKSB7 IC8vIGNvbnN0cnVjdG9yCisgICAgICAgbGlzdCA9IG51bGxwdHI7CisrICAgICAgcHJldiA9IG51 bGxwdHI7CisrICAgICAgY3VycmVudCA9IG51bGxwdHI7CisrICAgICAgbmV4dCA9IG51bGxwdHI7 CisrICAgICAgY3ljbGVfcHQgPSBudWxscHRyOyAvLyBhd2FpdCBleHBsaWNpdCBzZXQKKysgICAg ICBzdGFydGVkX2N5Y2xpbmcgPSBmYWxzZTsKKysgICAgICBleF9jdXJyZW50X3dhc19sYXN0ID0g ZmFsc2U7CisrICAgICAgZXhfY3VycmVudF93YXNfY3ljbGVfcHQgPSBmYWxzZTsKKyAgICAgfSAv LyB1bmFzc2lnbmVkIGxpc3QKKyAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgRUxJU1RfSVRFUkFUT1I6OkVMSVNUX0lURVJBVE9SCitkaWZmIC1ydXBO IC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwva2RwYWlyLmggdGVz c2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGlsL2tkcGFpci5oCistLS0gdGVzc2VyYWN0LTUuNS4z L3NyYy9jY3V0aWwva2RwYWlyLmgJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAK KysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0aWwva2RwYWlyLmgJMjAyNi0wOS0yMSAx MDoyODoxMC40MzU1OTE1MzIgKzAyMDAKK0BAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBLRFBhaXJE ZWMgOiBwdWJsaWMgS0RQYWlyPEtleSwgRGEKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5LCB0eXBl bmFtZSBEYXRhPgorIGNsYXNzIEtEUHRyUGFpciB7CisgcHVibGljOgorLSAgS0RQdHJQYWlyKCkg OiBkYXRhXyhudWxscHRyKSB7fQorKyAgS0RQdHJQYWlyKCkgOiBkYXRhXyhudWxscHRyKSwga2V5 X3t9IHt9CisgICBLRFB0clBhaXIoS2V5IGssIERhdGEgKmQpIDogZGF0YV8oZCksIGtleV8oaykg e30KKyAgIC8vIENvcHkgY29uc3RydWN0b3Igc3RlYWxzIHRoZSBwb2ludGVyIGZyb20gc3JjIGFu ZCBudWxscyBpdCBpbiBzcmMsIHRoZXJlYnkKKyAgIC8vIG1vdmluZyB0aGUgKHNpbmdsZSkgb3du ZXJzaGlwIG9mIHRoZSBkYXRhLgorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFj dC01LjUuMy9zcmMvY2xhc3NpZnkvYWRhcHRpdmUuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3Jj L2NsYXNzaWZ5L2FkYXB0aXZlLmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkv YWRhcHRpdmUuY3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVz c2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvYWRhcHRpdmUuY3BwCTIwMjYtMDktMjEgMTA6 Mjg6MTAuNDM3MTExNzIyICswMjAwCitAQCAtNjcsMTAgKzY3LDYgQEAgQURBUFRfQ0xBU1NfU1RS VUNUOjpBREFQVF9DTEFTU19TVFJVQ1QoKQorICAgVGVtcFByb3RvcyhOSUxfTElTVCkgeworICAg emVyb19hbGxfYml0cyhQZXJtUHJvdG9zLCBXb3Jkc0luVmVjdG9yT2ZTaXplKE1BWF9OVU1fUFJP VE9TKSk7CisgICB6ZXJvX2FsbF9iaXRzKFBlcm1Db25maWdzLCBXb3Jkc0luVmVjdG9yT2ZTaXpl KE1BWF9OVU1fQ09ORklHUykpOworLQorLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfTlVNX0NP TkZJR1M7IGkrKykgeworLSAgICBUZW1wQ29uZmlnRm9yKHRoaXMsIGkpID0gbnVsbHB0cjsKKy0g IH0KKyB9CisgCisgQURBUFRfQ0xBU1NfU1RSVUNUOjp+QURBUFRfQ0xBU1NfU1RSVUNUKCkgewor QEAgLTkyLDI1ICs4OCwyNCBAQCBBREFQVF9DTEFTU19TVFJVQ1Q6On5BREFQVF9DTEFTU19TVFJV Q1QoCisgCisgLy8vIENvbnN0cnVjdG9yIGZvciBhZGFwdGVkIHRlbXBsYXRlcy4KKyAvLy8gQWRk IGFuIGVtcHR5IGNsYXNzIGZvciBlYWNoIGNoYXIgaW4gdW5pY2hhcnNldCB0byB0aGUgbmV3bHkg Y3JlYXRlZCB0ZW1wbGF0ZXMuCistQURBUFRfVEVNUExBVEVTX1NUUlVDVDo6QURBUFRfVEVNUExB VEVTX1NUUlVDVChVTklDSEFSU0VUICZ1bmljaGFyc2V0KSB7CistICBUZW1wbGF0ZXMgPSBuZXcg SU5UX1RFTVBMQVRFU19TVFJVQ1Q7CistICBOdW1QZXJtQ2xhc3NlcyA9IDA7CistICBOdW1Ob25F bXB0eUNsYXNzZXMgPSAwOworLQorLSAgLyogSW5zZXJ0IGFuIGVtcHR5IGNsYXNzIGZvciBlYWNo IHVuaWNoYXIgaWQgaW4gdW5pY2hhcnNldCAqLworLSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IE1BWF9OVU1fQ0xBU1NFUzsgaSsrKSB7CistICAgIENsYXNzW2ldID0gbnVsbHB0cjsKKy0gICAg aWYgKGkgPCB1bmljaGFyc2V0LnNpemUoKSkgeworLSAgICAgIEFkZEFkYXB0ZWRDbGFzcyh0aGlz LCBuZXcgQURBUFRfQ0xBU1NfU1RSVUNULCBpKTsKKy0gICAgfQorK0FEQVBUX1RFTVBMQVRFU19T VFJVQ1Q6OkFEQVBUX1RFTVBMQVRFU19TVFJVQ1QoVU5JQ0hBUlNFVCAmdW5pY2hhcnNldCkgOgor KyAgVGVtcGxhdGVzKG5ldyBJTlRfVEVNUExBVEVTX1NUUlVDVCksIE51bU5vbkVtcHR5Q2xhc3Nl cygwKSwgTnVtUGVybUNsYXNzZXMoMCkgeworKyAgLy8gSW5zZXJ0IGFuIGVtcHR5IGNsYXNzIGZv ciBlYWNoIHVuaWNoYXIgaWQgaW4gdW5pY2hhcnNldC4KKysgIC8vIENsYXNzIGlzIHZhbHVlLWlu aXRpYWxpemVkIHRvIG51bGxwdHIgaW4tY2xhc3MuCisrICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgdW5pY2hhcnNldC5zaXplKCk7IGkrKykgeworKyAgICBBZGRBZGFwdGVkQ2xhc3ModGhpcywg bmV3IEFEQVBUX0NMQVNTX1NUUlVDVCwgaSk7CisgICB9CisgfQorIAorIEFEQVBUX1RFTVBMQVRF U19TVFJVQ1Q6On5BREFQVF9URU1QTEFURVNfU1RSVUNUKCkgeworLSAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IChUZW1wbGF0ZXMpLT5OdW1DbGFzc2VzOyBpKyspIHsKKy0gICAgZGVsZXRlIENs YXNzW2ldOworKyAgaWYgKFRlbXBsYXRlcyAhPSBudWxscHRyKSB7CisrICAgIC8vIE51bUNsYXNz ZXMgY29tZXMgZnJvbSBhbiB1bnRydXN0ZWQgZmlsZSwgc28gbmV2ZXIgdHJ1c3QgaXQgdG8gYm91 bmQKKysgICAgLy8gdGhlIGxvb3Agb3ZlciB0aGUgZml4ZWQtc2l6ZSBDbGFzc1tdIGFycmF5Lgor KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKFRlbXBsYXRlcyktPk51bUNsYXNzZXMgJiYg aSA8IE1BWF9OVU1fQ0xBU1NFUzsgaSsrKSB7CisrICAgICAgZGVsZXRlIENsYXNzW2ldOworKyAg ICB9CisrICAgIGRlbGV0ZSBUZW1wbGF0ZXM7CisgICB9CistICBkZWxldGUgVGVtcGxhdGVzOwor IH0KKyAKKyAvLyBSZXR1cm5zIEZvbnRpbmZvSWQgb2YgdGhlIGdpdmVuIGNvbmZpZyBvZiB0aGUg Z2l2ZW4gYWRhcHRlZCBjbGFzcy4KK0BAIC0xODAsMjMgKzE3NSwzMiBAQCB2b2lkIENsYXNzaWZ5 OjpQcmludEFkYXB0ZWRUZW1wbGF0ZXMoRklMCisgICogQG5vdGUgR2xvYmFsczogbm9uZQorICAq LworIEFEQVBUX0NMQVNTX1NUUlVDVCAqUmVhZEFkYXB0ZWRDbGFzcyhURmlsZSAqZnApIHsKKy0g IGludCBOdW1UZW1wUHJvdG9zOworLSAgaW50IE51bUNvbmZpZ3M7CisrICBpbnQgTnVtVGVtcFBy b3RvcyA9IDA7CisrICBpbnQgTnVtQ29uZmlncyA9IDA7CisgICBpbnQgaTsKKyAgIEFEQVBUX0NM QVNTX1NUUlVDVCAqQ2xhc3M7CisgCistICAvKiBmaXJzdCByZWFkIGhpZ2ggbGV2ZWwgYWRhcHRl ZCBjbGFzcyBzdHJ1Y3R1cmUgKi8KKysgIC8vIGZpcnN0IHJlYWQgaGlnaCBsZXZlbCBhZGFwdGVk IGNsYXNzIHN0cnVjdHVyZQorICAgQ2xhc3MgPSBuZXcgQURBUFRfQ0xBU1NfU1RSVUNUOworICAg ZnAtPkZSZWFkKENsYXNzLCBzaXplb2YoQURBUFRfQ0xBU1NfU1RSVUNUKSwgMSk7CisgCistICAv KiB0aGVuIHJlYWQgaW4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBwZXJtYW5lbnQgcHJvdG9zIGFu ZCBjb25maWdzICovCisrICAvLyB0aGVuIHJlYWQgaW4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBw ZXJtYW5lbnQgcHJvdG9zIGFuZCBjb25maWdzCisgICBDbGFzcy0+UGVybVByb3RvcyA9IE5ld0Jp dFZlY3RvcihNQVhfTlVNX1BST1RPUyk7CisgICBDbGFzcy0+UGVybUNvbmZpZ3MgPSBOZXdCaXRW ZWN0b3IoTUFYX05VTV9DT05GSUdTKTsKKyAgIGZwLT5GUmVhZChDbGFzcy0+UGVybVByb3Rvcywg c2l6ZW9mKHVpbnQzMl90KSwgV29yZHNJblZlY3Rvck9mU2l6ZShNQVhfTlVNX1BST1RPUykpOwor ICAgZnAtPkZSZWFkKENsYXNzLT5QZXJtQ29uZmlncywgc2l6ZW9mKHVpbnQzMl90KSwgV29yZHNJ blZlY3Rvck9mU2l6ZShNQVhfTlVNX0NPTkZJR1MpKTsKKyAKKy0gIC8qIHRoZW4gcmVhZCBpbiB0 aGUgbGlzdCBvZiB0ZW1wb3JhcnkgcHJvdG9zICovCisrICAvLyB0aGVuIHJlYWQgaW4gdGhlIGxp c3Qgb2YgdGVtcG9yYXJ5IHByb3RvcworICAgZnAtPkZSZWFkKCZOdW1UZW1wUHJvdG9zLCBzaXpl b2YoaW50KSwgMSk7CisrICBpZiAoTnVtVGVtcFByb3RvcyA8IDAgfHwgTnVtVGVtcFByb3RvcyA+ IE1BWF9OVU1fUFJPVE9TKSB7CisrICAgIHRwcmludGYoIkJhZCByZWFkIG9mIGFkYXB0ZWQgY2xh c3MhXG4iKTsKKysgICAgLy8gUmVzZXQgZmlsZS1zb3VyY2VkIHBvaW50ZXJzIHNvIHRoZSBkZXN0 cnVjdG9yIGRvZXMgbm90IGRlbGV0ZSB0aGVtLgorKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX05V TV9DT05GSUdTOyBpKyspIHsKKysgICAgICBDbGFzcy0+Q29uZmlnW2ldLlRlbXAgPSBudWxscHRy OworKyAgICB9CisrICAgIGRlbGV0ZSBDbGFzczsKKysgICAgcmV0dXJuIG51bGxwdHI7CisrICB9 CisgICBDbGFzcy0+VGVtcFByb3RvcyA9IE5JTF9MSVNUOworICAgZm9yIChpID0gMDsgaSA8IE51 bVRlbXBQcm90b3M7IGkrKykgeworICAgICBhdXRvIFRlbXBQcm90byA9IG5ldyBURU1QX1BST1RP X1NUUlVDVDsKK0BAIC0yMDQsOCArMjA4LDIwIEBAIEFEQVBUX0NMQVNTX1NUUlVDVCAqUmVhZEFk YXB0ZWRDbGFzcyhURmkKKyAgICAgQ2xhc3MtPlRlbXBQcm90b3MgPSBwdXNoX2xhc3QoQ2xhc3Mt PlRlbXBQcm90b3MsIFRlbXBQcm90byk7CisgICB9CisgCistICAvKiB0aGVuIHJlYWQgaW4gdGhl IGFkYXB0ZWQgY29uZmlncyAqLworKyAgLy8gdGhlbiByZWFkIGluIHRoZSBhZGFwdGVkIGNvbmZp Z3MKKyAgIGZwLT5GUmVhZCgmTnVtQ29uZmlncywgc2l6ZW9mKGludCksIDEpOworKyAgLy8gTnVt Q29uZmlncyBpcyB1c2VkIGFzIGEgbG9vcCBib3VuZCB0aGF0IHdyaXRlcyBpbnRvIHRoZSBmaXhl ZC1zaXplCisrICAvLyBDb25maWdbXSBhcnJheSwgc28gcmVqZWN0IGEgY29ycnVwdCBvciBtYWxp Y2lvdXMgZmlsZSBpbnN0ZWFkIG9mCisrICAvLyB3cml0aW5nIG91dCBvZiBib3VuZHMuCisrICBp ZiAoTnVtQ29uZmlncyA8IDAgfHwgTnVtQ29uZmlncyA+IE1BWF9OVU1fQ09ORklHUykgeworKyAg ICB0cHJpbnRmKCJCYWQgcmVhZCBvZiBhZGFwdGVkIGNsYXNzIVxuIik7CisrICAgIC8vIFJlc2V0 IGZpbGUtc291cmNlZCBwb2ludGVycyBzbyB0aGUgZGVzdHJ1Y3RvciBkb2VzIG5vdCBkZWxldGUg dGhlbS4KKysgICAgZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fQ09ORklHUzsgaSsrKSB7CisrICAg ICAgQ2xhc3MtPkNvbmZpZ1tpXS5UZW1wID0gbnVsbHB0cjsKKysgICAgfQorKyAgICBkZWxldGUg Q2xhc3M7CisrICAgIHJldHVybiBudWxscHRyOworKyAgfQorICAgZm9yIChpID0gMDsgaSA8IE51 bUNvbmZpZ3M7IGkrKykgeworICAgICBpZiAodGVzdF9iaXQoQ2xhc3MtPlBlcm1Db25maWdzLCBp KSkgeworICAgICAgIENsYXNzLT5Db25maWdbaV0uUGVybSA9IFJlYWRQZXJtQ29uZmlnKGZwKTsK K0BAIC0yMzEsMTggKzI0NywzNSBAQCBBREFQVF9DTEFTU19TVFJVQ1QgKlJlYWRBZGFwdGVkQ2xh c3MoVEZpCisgQURBUFRfVEVNUExBVEVTX1NUUlVDVCAqQ2xhc3NpZnk6OlJlYWRBZGFwdGVkVGVt cGxhdGVzKFRGaWxlICpmcCkgeworICAgYXV0byBUZW1wbGF0ZXMgPSBuZXcgQURBUFRfVEVNUExB VEVTX1NUUlVDVDsKKyAKKy0gIC8qIGZpcnN0IHJlYWQgdGhlIGhpZ2ggbGV2ZWwgYWRhcHRpdmUg dGVtcGxhdGUgc3RydWN0ICovCistICBmcC0+RlJlYWQoVGVtcGxhdGVzLCBzaXplb2YoQURBUFRf VEVNUExBVEVTX1NUUlVDVCksIDEpOworKyAgLy8gZmlyc3QgcmVhZCBpbiB0aGUgaGlnaCBsZXZl bCBhZGFwdGl2ZSB0ZW1wbGF0ZSBzdHJ1Y3QKKysgIGlmIChmcC0+RlJlYWQoVGVtcGxhdGVzLCBz aXplb2YoQURBUFRfVEVNUExBVEVTX1NUUlVDVCksIDEpICE9IDEpIHsKKysgICAgdHByaW50Zigi QmFkIHJlYWQgb2YgYWRhcHRlZCB0ZW1wbGF0ZXMhXG4iKTsKKysgICAgZGVsZXRlIFRlbXBsYXRl czsKKysgICAgcmV0dXJuIG51bGxwdHI7CisrICB9CisrICAvLyBUaGUgQ2xhc3NbXSBhcnJheSB3 YXMganVzdCBmaWxsZWQgd2l0aCBwb2ludGVycyByZWFkIGZyb20gdGhlIGZpbGU7CisrICAvLyB0 aG9zZSBhcmUgbm90IHZhbGlkIGFsbG9jYXRpb25zLCBzbyByZXNldCBpdCBiZWZvcmUgc3Rvcmlu ZyByZWFsIG9uZXMuCisrICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTUFYX05VTV9DTEFTU0VT OyBpKyspIHsKKysgICAgVGVtcGxhdGVzLT5DbGFzc1tpXSA9IG51bGxwdHI7CisrICB9CisgCist ICAvKiB0aGVuIHJlYWQgaW4gdGhlIGJhc2ljIGludGVnZXIgdGVtcGxhdGVzICovCisrICAvLyB0 aGVuIHJlYWQgaW4gdGhlIGJhc2ljIGludGVnZXIgdGVtcGxhdGVzCisgICBUZW1wbGF0ZXMtPlRl bXBsYXRlcyA9IFJlYWRJbnRUZW1wbGF0ZXMoZnApOworKyAgaWYgKFRlbXBsYXRlcy0+VGVtcGxh dGVzID09IG51bGxwdHIpIHsKKysgICAgZGVsZXRlIFRlbXBsYXRlczsKKysgICAgcmV0dXJuIG51 bGxwdHI7CisrICB9CisgCistICAvKiB0aGVuIHJlYWQgaW4gdGhlIGFkYXB0aXZlIGluZm8gZm9y IGVhY2ggY2xhc3MgKi8KKysgIC8vIHRoZW4gcmVhZCBpbiB0aGUgYWRhcHRpdmUgaW5mbyBmb3Ig ZWFjaCBjbGFzcworICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IChUZW1wbGF0ZXMtPlRlbXBs YXRlcyktPk51bUNsYXNzZXM7IGkrKykgeworICAgICBUZW1wbGF0ZXMtPkNsYXNzW2ldID0gUmVh ZEFkYXB0ZWRDbGFzcyhmcCk7CisrICAgIGlmIChUZW1wbGF0ZXMtPkNsYXNzW2ldID09IG51bGxw dHIpIHsKKysgICAgICB0cHJpbnRmKCJCYWQgcmVhZCBvZiBhZGFwdGVkIHRlbXBsYXRlcyAoY2xh c3MgJXUpIVxuIiwgaSk7CisrICAgICAgZGVsZXRlIFRlbXBsYXRlczsKKysgICAgICByZXR1cm4g bnVsbHB0cjsKKysgICAgfQorICAgfQorICAgcmV0dXJuIChUZW1wbGF0ZXMpOworLQorIH0gLyog UmVhZEFkYXB0ZWRUZW1wbGF0ZXMgKi8KKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitkaWZm IC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9hZGFw dGl2ZS5oIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2FkYXB0aXZlLmgKKy0tLSB0 ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2FkYXB0aXZlLmgJMjAyNi0wNy0yNCAyMDoyNzow Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9h ZGFwdGl2ZS5oCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDM3MzM5MzkwICswMjAwCitAQCAtMjAsNiAr MjAsNyBAQAorICNpbmNsdWRlICJpbnRwcm90by5oIgorICNpbmNsdWRlICJvbGRsaXN0LmgiCisg CisrI2luY2x1ZGUgPGFycmF5PgorICNpbmNsdWRlIDxjc3RkaW8+CisgCisgbmFtZXNwYWNlIHRl c3NlcmFjdCB7CitAQCAtNjEsMTggKzYyLDE4IEBAIHN0cnVjdCBBREFQVF9DTEFTU19TVFJVQ1Qg eworICAgQklUX1ZFQ1RPUiBQZXJtUHJvdG9zOworICAgQklUX1ZFQ1RPUiBQZXJtQ29uZmlnczsK KyAgIExJU1QgVGVtcFByb3RvczsKKy0gIEFEQVBURURfQ09ORklHIENvbmZpZ1tNQVhfTlVNX0NP TkZJR1NdOworKyAgc3RkOjphcnJheTxBREFQVEVEX0NPTkZJRywgTUFYX05VTV9DT05GSUdTPiBD b25maWd7fTsKKyB9OworIAorIGNsYXNzIEFEQVBUX1RFTVBMQVRFU19TVFJVQ1QgeworIHB1Ymxp YzoKKy0gIEFEQVBUX1RFTVBMQVRFU19TVFJVQ1QoKSA9IGRlZmF1bHQ7CisrICBBREFQVF9URU1Q TEFURVNfU1RSVUNUKCkgOiBUZW1wbGF0ZXMobnVsbHB0ciksIE51bU5vbkVtcHR5Q2xhc3Nlcygw KSwgTnVtUGVybUNsYXNzZXMoMCkge30KKyAgIEFEQVBUX1RFTVBMQVRFU19TVFJVQ1QoVU5JQ0hB UlNFVCAmdW5pY2hhcnNldCk7CisgICB+QURBUFRfVEVNUExBVEVTX1NUUlVDVCgpOworICAgSU5U X1RFTVBMQVRFU19TVFJVQ1QgKlRlbXBsYXRlczsKKyAgIGludCBOdW1Ob25FbXB0eUNsYXNzZXM7 CisgICB1aW50OF90IE51bVBlcm1DbGFzc2VzOworLSAgQURBUFRfQ0xBU1NfU1RSVUNUICpDbGFz c1tNQVhfTlVNX0NMQVNTRVNdOworKyAgc3RkOjphcnJheTxBREFQVF9DTEFTU19TVFJVQ1QgKiwg TUFYX05VTV9DTEFTU0VTPiBDbGFzc3t9OworIH07CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lm eS9hZGFwdG1hdGNoLmNwcCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9hZGFwdG1h dGNoLmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvYWRhcHRtYXRjaC5jcHAJ MjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMt bmV3L3NyYy9jbGFzc2lmeS9hZGFwdG1hdGNoLmNwcAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzNzYx NjMxOCArMDIwMAorQEAgLTUyNCw5ICs1MjQsOSBAQCB2b2lkIENsYXNzaWZ5OjpFbmRBZGFwdGl2 ZUNsYXNzaWZpZXIoKSB7CisgICogICAgICBjbGFzc2lmeV91c2VfcHJlX2FkYXB0ZWRfdGVtcGxh dGVzCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyB1c2Ugb2YgcHJlLWFk YXB0ZWQgdGVtcGxhdGVzCisgICovCistdm9pZCBDbGFzc2lmeTo6SW5pdEFkYXB0aXZlQ2xhc3Np ZmllcihUZXNzZGF0YU1hbmFnZXIgKm1ncikgeworK2Jvb2wgQ2xhc3NpZnk6OkluaXRBZGFwdGl2 ZUNsYXNzaWZpZXIoVGVzc2RhdGFNYW5hZ2VyICptZ3IpIHsKKyAgIGlmICghQ0xBU1NJRllfRU5B QkxFX0FEQVBUSVZFX01BVENIRVJfT1ZFUlJJREUpIHsKKy0gICAgcmV0dXJuOworKyAgICByZXR1 cm4gdHJ1ZTsKKyAgIH0KKyAgIGlmIChBbGxQcm90b3NPbiAhPSBudWxscHRyKSB7CisgICAgIEVu ZEFkYXB0aXZlQ2xhc3NpZmllcigpOyAvLyBEb24ndCBsZWFrIHdpdGggbXVsdGlwbGUgaW5pdHMu CitAQCAtNTM4LDYgKzUzOCwxMSBAQCB2b2lkIENsYXNzaWZ5OjpJbml0QWRhcHRpdmVDbGFzc2lm aWVyKFRlCisgICAgIFRGaWxlIGZwOworICAgICBBU1NFUlRfSE9TVChtZ3ItPkdldENvbXBvbmVu dChURVNTREFUQV9JTlRURU1QLCAmZnApKTsKKyAgICAgUHJlVHJhaW5lZFRlbXBsYXRlcyA9IFJl YWRJbnRUZW1wbGF0ZXMoJmZwKTsKKysgICAgaWYgKFByZVRyYWluZWRUZW1wbGF0ZXMgPT0gbnVs bHB0cikgeworKyAgICAgIHRwcmludGYoIkVycm9yOiBpbnZhbGlkIGludHRlbXAgY29tcG9uZW50 IGluIHRyYWluZWRkYXRhLCAiCisrICAgICAgICAgICAgICAiY2Fubm90IGluaXRpYWxpemUgdGhl IGxlZ2FjeSBlbmdpbmUuXG4iKTsKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyAKKyAg ICAgaWYgKG1nci0+R2V0Q29tcG9uZW50KFRFU1NEQVRBX1NIQVBFX1RBQkxFLCAmZnApKSB7Cisg ICAgICAgc2hhcGVfdGFibGVfID0gbmV3IFNoYXBlVGFibGUodW5pY2hhcnNldCk7CitAQCAtNTgw LDE3ICs1ODUsMjMgQEAgdm9pZCBDbGFzc2lmeTo6SW5pdEFkYXB0aXZlQ2xhc3NpZmllcihUZQor ICAgICAgIHRwcmludGYoIlxuUmVhZGluZyBwcmUtYWRhcHRlZCB0ZW1wbGF0ZXMgZnJvbSAlcyAu Li5cbiIsIEZpbGVuYW1lLmNfc3RyKCkpOworICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAg IEFkYXB0ZWRUZW1wbGF0ZXMgPSBSZWFkQWRhcHRlZFRlbXBsYXRlcygmZnApOworLSAgICAgIHRw cmludGYoIlxuIik7CistICAgICAgUHJpbnRBZGFwdGVkVGVtcGxhdGVzKHN0ZG91dCwgQWRhcHRl ZFRlbXBsYXRlcyk7CisrICAgICAgaWYgKEFkYXB0ZWRUZW1wbGF0ZXMgPT0gbnVsbHB0cikgewor KyAgICAgICAgdHByaW50ZigiRXJyb3I6IGludmFsaWQgcHJlLWFkYXB0ZWQgdGVtcGxhdGVzIGlu ICVzLCBpZ25vcmluZy5cbiIsIEZpbGVuYW1lLmNfc3RyKCkpOworKyAgICAgICAgQWRhcHRlZFRl bXBsYXRlcyA9IG5ldyBBREFQVF9URU1QTEFURVNfU1RSVUNUKHVuaWNoYXJzZXQpOworKyAgICAg IH0gZWxzZSB7CisrICAgICAgICB0cHJpbnRmKCJcbiIpOworKyAgICAgICAgUHJpbnRBZGFwdGVk VGVtcGxhdGVzKHN0ZG91dCwgQWRhcHRlZFRlbXBsYXRlcyk7CisgCistICAgICAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IEFkYXB0ZWRUZW1wbGF0ZXMtPlRlbXBsYXRlcy0+TnVtQ2xhc3Nlczsg aSsrKSB7CistICAgICAgICBCYXNlbGluZUN1dG9mZnNbaV0gPSBDaGFyTm9ybUN1dG9mZnNbaV07 CisrICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRhcHRlZFRlbXBsYXRlcy0+VGVt cGxhdGVzLT5OdW1DbGFzc2VzOyBpKyspIHsKKysgICAgICAgICAgQmFzZWxpbmVDdXRvZmZzW2ld ID0gQ2hhck5vcm1DdXRvZmZzW2ldOworKyAgICAgICAgfQorICAgICAgIH0KKyAgICAgfQorICAg fSBlbHNlIHsKKyAgICAgZGVsZXRlIEFkYXB0ZWRUZW1wbGF0ZXM7CisgICAgIEFkYXB0ZWRUZW1w bGF0ZXMgPSBuZXcgQURBUFRfVEVNUExBVEVTX1NUUlVDVCh1bmljaGFyc2V0KTsKKyAgIH0KKysg IHJldHVybiB0cnVlOworIH0gLyogSW5pdEFkYXB0aXZlQ2xhc3NpZmllciAqLworIAorIHZvaWQg Q2xhc3NpZnk6OlJlc2V0QWRhcHRpdmVDbGFzc2lmaWVySW50ZXJuYWwoKSB7CitAQCAtMTI0MCw4 ICsxMjUxLDggQEAgVU5JQ0hBUl9JRCAqQ2xhc3NpZnk6OkJhc2VsaW5lQ2xhc3NpZmllcgorICAg fQorIAorICAgTWFzdGVyTWF0Y2hlcihUZW1wbGF0ZXMtPlRlbXBsYXRlcywgaW50X2ZlYXR1cmVz LnNpemUoKSwgJmludF9mZWF0dXJlc1swXSwgQ2hhck5vcm1BcnJheSwKKy0gICAgICAgICAgICAg ICAgVGVtcGxhdGVzLT5DbGFzcywgbWF0Y2hlcl9kZWJ1Z19mbGFncywgMCwgQmxvYi0+Ym91bmRp bmdfYm94KCksIFJlc3VsdHMtPkNQUmVzdWx0cywKKy0gICAgICAgICAgICAgICAgUmVzdWx0cyk7 CisrICAgICAgICAgICAgICAgIFRlbXBsYXRlcy0+Q2xhc3MuZGF0YSgpLCBtYXRjaGVyX2RlYnVn X2ZsYWdzLCAwLCBCbG9iLT5ib3VuZGluZ19ib3goKSwKKysgICAgICAgICAgICAgICAgUmVzdWx0 cy0+Q1BSZXN1bHRzLCBSZXN1bHRzKTsKKyAKKyAgIGRlbGV0ZVtdIENoYXJOb3JtQXJyYXk7Cisg ICBDTEFTU19JRCBDbGFzc0lkID0gUmVzdWx0cy0+YmVzdF91bmljaGFyX2lkOworZGlmZiAtcnVw TiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvY2xhc3NpZnku aCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9jbGFzc2lmeS5oCistLS0gdGVzc2Vy YWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9jbGFzc2lmeS5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAw MDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvY2xhc3Np ZnkuaAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzODA1MDQ2MiArMDIwMAorQEAgLTE2NCw3ICsxNjQs NyBAQCBwdWJsaWM6CisgICAvLyBwcm92aWRlZCB0byBleHBsaWNpdGx5IGNsYXJpZnkgdGhlIGNo YXJhY3RlciBzZWdtZW50YXRpb24uCisgICB2b2lkIExlYXJuUGllY2VzKGNvbnN0IGNoYXIgKmZv bnRuYW1lLCBpbnQgc3RhcnQsIGludCBsZW5ndGgsIGZsb2F0IHRocmVzaG9sZCwKKyAgICAgICAg ICAgICAgICAgICAgQ2hhclNlZ21lbnRhdGlvblR5cGUgc2VnbWVudGF0aW9uLCBjb25zdCBjaGFy ICpjb3JyZWN0X3RleHQsIFdFUkRfUkVTICp3b3JkKTsKKy0gIHZvaWQgSW5pdEFkYXB0aXZlQ2xh c3NpZmllcihUZXNzZGF0YU1hbmFnZXIgKm1ncik7CisrICBib29sIEluaXRBZGFwdGl2ZUNsYXNz aWZpZXIoVGVzc2RhdGFNYW5hZ2VyICptZ3IpOworICAgdm9pZCBJbml0QWRhcHRlZENsYXNzKFRC TE9CICpCbG9iLCBDTEFTU19JRCBDbGFzc0lkLCBpbnQgRm9udGluZm9JZCwgQURBUFRfQ0xBU1Nf U1RSVUNUICpDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBBREFQVF9URU1QTEFURVNf U1RSVUNUICpUZW1wbGF0ZXMpOworICAgdm9pZCBBbWJpZ0NsYXNzaWZpZXIoY29uc3Qgc3RkOjp2 ZWN0b3I8SU5UX0ZFQVRVUkVfU1RSVUNUPiAmaW50X2ZlYXR1cmVzLAorZGlmZiAtcnVwTiAtLW5v LWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvY2x1c3Rlci5oIHRlc3Nl cmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2NsdXN0ZXIuaAorLS0tIHRlc3NlcmFjdC01LjUu My9zcmMvY2xhc3NpZnkvY2x1c3Rlci5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICsw MjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvY2x1c3Rlci5oCTIwMjYt MDktMjEgMTA6Mjg6MTAuNDM1NzY1OTc0ICswMjAwCitAQCAtMzIsNyArMzIsNyBAQCBjb25zdGV4 cHIgaW50IE1BWEJVQ0tFVFMgPSAzOTsKKyAgICAgICAgICAgVHlwZXMKKyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKyBzdHJ1Y3QgQ0xVU1RFUiB7CistICBDTFVTVEVSKHNpemVfdCBuKSA6IE1lYW4obikgewor KyAgQ0xVU1RFUihzaXplX3QgbikgOiBMZWZ0KG51bGxwdHIpLCBSaWdodChudWxscHRyKSwgTWVh bihuKSB7CisgICB9CisgCisgICB+Q0xVU1RFUigpIHsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVy ZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2ZlYXRkZWZzLmggdGVzc2VyYWN0LTUu NS4zLW5ldy9zcmMvY2xhc3NpZnkvZmVhdGRlZnMuaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMv Y2xhc3NpZnkvZmVhdGRlZnMuaAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAor KysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2ZlYXRkZWZzLmgJMjAyNi0wOS0y MSAxMDoyODoxMC40MzU5MzIwMzkgKzAyMDAKK0BAIC00Nyw5ICs0Nyw4IEBAIHVzaW5nIEZFQVRV UkVfREVGUyA9IEZFQVRVUkVfREVGU19TVFJVQ1QKKyBzdHJ1Y3QgQ0hBUl9ERVNDX1NUUlVDVCB7 CisgICAvLy8gQWxsb2NhdGUgYSBuZXcgY2hhcmFjdGVyIGRlc2NyaXB0aW9uLCBpbml0aWFsaXpl IGl0cworICAgLy8vIGZlYXR1cmUgc2V0cyB0byBiZSBlbXB0eSwgYW5kIHJldHVybiBpdC4KKy0g IENIQVJfREVTQ19TVFJVQ1QoY29uc3QgRkVBVFVSRV9ERUZTX1NUUlVDVCAmRmVhdHVyZURlZnMp IHsKKy0gICAgTnVtRmVhdHVyZVNldHMgPSBGZWF0dXJlRGVmcy5OdW1GZWF0dXJlVHlwZXM7Cist ICB9CisrICBDSEFSX0RFU0NfU1RSVUNUKGNvbnN0IEZFQVRVUkVfREVGU19TVFJVQ1QgJkZlYXR1 cmVEZWZzKQorKyAgICAgIDogTnVtRmVhdHVyZVNldHMoRmVhdHVyZURlZnMuTnVtRmVhdHVyZVR5 cGVzKSwgRmVhdHVyZVNldHN7fSB7fQorIAorICAgLy8vIFJlbGVhc2UgdGhlIG1lbW9yeSBjb25z dW1lZCBieSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcgorICAgLy8vIGRlc2NyaXB0aW9uIGFuZCBh bGwgb2YgdGhlIGZlYXR1cmVzIGluIHRoYXQgZGVzY3JpcHRpb24uCitkaWZmIC1ydXBOIC0tbm8t ZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9pbnRwcm90by5jcHAgdGVz c2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvaW50cHJvdG8uY3BwCistLS0gdGVzc2VyYWN0 LTUuNS4zL3NyYy9jbGFzc2lmeS9pbnRwcm90by5jcHAJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAw MDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9pbnRwcm90 by5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC40MzkyNTM2MjEgKzAyMDAKK0BAIC0yODYsMTEgKzI4 NiwxMCBAQCBpbnQgQWRkSW50UHJvdG8oSU5UX0NMQVNTX1NUUlVDVCAqQ2xhc3MpCisgICAgIENs YXNzLT5Qcm90b0xlbmd0aHMucmVzaXplKE1heE51bUludFByb3Rvc0luKENsYXNzKSk7CisgICB9 CisgCistICAvKiBpbml0aWFsaXplIHByb3RvIHNvIGl0cyBsZW5ndGggaXMgemVybyBhbmQgaXQg aXNuJ3QgaW4gYW55IGNvbmZpZ3MgKi8KKysgIC8vIGluaXRpYWxpemUgcHJvdG8gc28gaXRzIGxl bmd0aCBpcyB6ZXJvIGFuZCBpdCBpc24ndCBpbiBhbnkgY29uZmlncworICAgQ2xhc3MtPlByb3Rv TGVuZ3Roc1tJbmRleF0gPSAwOworICAgYXV0byBQcm90byA9IFByb3RvRm9yUHJvdG9JZChDbGFz cywgSW5kZXgpOworLSAgZm9yICh1aW50MzJfdCAqV29yZCA9IFByb3RvLT5Db25maWdzOyBXb3Jk IDwgUHJvdG8tPkNvbmZpZ3MgKyBXRVJEU19QRVJfQ09ORklHX1ZFQzsgKldvcmQrKyA9IDApIHsK Ky0gIH0KKysgIFByb3RvLT5Db25maWdzLmZpbGwoMCk7CisgCisgICByZXR1cm4gKEluZGV4KTsK KyB9CitAQCAtNTgzLDM4ICs1ODIsMzYgQEAgSU5UX0NMQVNTX1NUUlVDVDo6SU5UX0NMQVNTX1NU UlVDVChpbnQgTQorICAgYXNzZXJ0KE51bVByb3RvU2V0cyA8PSBNQVhfTlVNX1BST1RPX1NFVFMp OworIAorICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Qcm90b1NldHM7IGkrKykgeworLSAgICAv KiBhbGxvY2F0ZSBzcGFjZSBmb3IgYSBwcm90byBzZXQsIGluc3RhbGwgaW4gY2xhc3MsIGFuZCBp bml0aWFsaXplICovCisrICAgIC8vIGFsbG9jYXRlIHNwYWNlIGZvciBhIHByb3RvIHNldCwgaW5z dGFsbCBpbiBjbGFzcywgYW5kIGluaXRpYWxpemUKKyAgICAgYXV0byBQcm90b1NldCA9IG5ldyBQ Uk9UT19TRVRfU1RSVUNUOworICAgICBtZW1zZXQoUHJvdG9TZXQsIDAsIHNpemVvZigqUHJvdG9T ZXQpKTsKKyAgICAgUHJvdG9TZXRzW2ldID0gUHJvdG9TZXQ7CisgCistICAgIC8qIGFsbG9jYXRl IHNwYWNlIGZvciB0aGUgcHJvdG8gbGVuZ3RocyBhbmQgaW5zdGFsbCBpbiBjbGFzcyAqLworKyAg ICAvLyBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHByb3RvIGxlbmd0aHMgYW5kIGluc3RhbGwgaW4g Y2xhc3MKKyAgIH0KKy0gIG1lbXNldChDb25maWdMZW5ndGhzLCAwLCBzaXplb2YoQ29uZmlnTGVu Z3RocykpOworIH0KKyAKKyBJTlRfQ0xBU1NfU1RSVUNUOjp+SU5UX0NMQVNTX1NUUlVDVCgpIHsK Ky0gIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtUHJvdG9TZXRzOyBpKyspIHsKKysgIC8vIE51bVBy b3RvU2V0cyBjb21lcyBmcm9tIGFuIHVudHJ1c3RlZCBmaWxlLCBzbyBuZXZlciB0cnVzdCBpdCB0 byBib3VuZAorKyAgLy8gdGhlIGxvb3Agb3ZlciB0aGUgZml4ZWQtc2l6ZSBQcm90b1NldHNbXSBh cnJheS4KKysgIGZvciAoaW50IGkgPSAwOyBpIDwgTnVtUHJvdG9TZXRzICYmIGkgPCBNQVhfTlVN X1BST1RPX1NFVFM7IGkrKykgeworICAgICBkZWxldGUgUHJvdG9TZXRzW2ldOworICAgfQorIH0K KyAKKyAvLy8gVGhpcyBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgYSBuZXcgc2V0IG9mIGludGVnZXIg dGVtcGxhdGVzCisgLy8vIGluaXRpYWxpemVkIHRvIGhvbGQgMCBjbGFzc2VzLgorLUlOVF9URU1Q TEFURVNfU1RSVUNUOjpJTlRfVEVNUExBVEVTX1NUUlVDVCgpIHsKKy0gIE51bUNsYXNzZXMgPSAw OworLSAgTnVtQ2xhc3NQcnVuZXJzID0gMDsKKy0KKy0gIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY X05VTV9DTEFTU0VTOyBpKyspIHsKKy0gICAgQ2xhc3NGb3JDbGFzc0lkKHRoaXMsIGkpID0gbnVs bHB0cjsKKy0gIH0KKytJTlRfVEVNUExBVEVTX1NUUlVDVDo6SU5UX1RFTVBMQVRFU19TVFJVQ1Qo KSA6IE51bUNsYXNzZXMoMCksIE51bUNsYXNzUHJ1bmVycygwKSB7CisrICAvLyBDbGFzcyBhbmQg Q2xhc3NQcnVuZXJzIGFyZSB2YWx1ZS1pbml0aWFsaXplZCB0byBudWxscHRyIGluLWNsYXNzLgor IH0KKyAKKyBJTlRfVEVNUExBVEVTX1NUUlVDVDo6fklOVF9URU1QTEFURVNfU1RSVUNUKCkgewor LSAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUNsYXNzZXM7IGkrKykgeworKyAgLy8gVGhl IGNvdW50cyBjb21lIGZyb20gYW4gdW50cnVzdGVkIGZpbGUsIHNvIG5ldmVyIHRydXN0IHRoZW0g dG8gYm91bmQKKysgIC8vIHRoZSBsb29wcyBvdmVyIHRoZSBmaXhlZC1zaXplIGFycmF5cy4KKysg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1DbGFzc2VzICYmIGkgPCBNQVhfTlVNX0NMQVNT RVM7IGkrKykgeworICAgICBkZWxldGUgQ2xhc3NbaV07CisgICB9CistICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgTnVtQ2xhc3NQcnVuZXJzOyBpKyspIHsKKysgIGZvciAodW5zaWduZWQgaSA9 IDA7IGkgPCBOdW1DbGFzc1BydW5lcnMgJiYgaSA8IE1BWF9OVU1fQ0xBU1NfUFJVTkVSUzsgaSsr KSB7CisgICAgIGRlbGV0ZSBDbGFzc1BydW5lcnNbaV07CisgICB9CisgfQorQEAgLTY2Niw2ICs2 NjMsMjAgQEAgSU5UX1RFTVBMQVRFU19TVFJVQ1QgKkNsYXNzaWZ5OjpSZWFkSW50VAorICAgICBU ZW1wbGF0ZXMtPk51bUNsYXNzZXMgPSB2ZXJzaW9uX2lkOworICAgfQorIAorKyAgLy8gVGhlIGNv dW50cyByZWFkIGZyb20gdGhlIGZpbGUgYXJlIHVzZWQgYXMgbG9vcCBib3VuZHMgdGhhdCB3cml0 ZSBpbnRvCisrICAvLyBmaXhlZC1zaXplIGFycmF5cyAoQ2xhc3NbXSwgQ2xhc3NQcnVuZXJzW10s IFRlbXBDbGFzc1BydW5lcltdIGFuZAorKyAgLy8gSW5kZXhGb3JbXSksIHNvIHJlamVjdCBhIGNv cnJ1cHQgb3IgbWFsaWNpb3VzIGZpbGUgaW5zdGVhZCBvZiB3cml0aW5nCisrICAvLyBvdXQgb2Yg Ym91bmRzLgorKyAgaWYgKHVuaWNoYXJzZXRfc2l6ZSA+IE1BWF9OVU1fQ0xBU1NFUyB8fAorKyAg ICAgIFRlbXBsYXRlcy0+TnVtQ2xhc3NQcnVuZXJzID4gTUFYX05VTV9DTEFTU19QUlVORVJTIHx8 CisrICAgICAgVGVtcGxhdGVzLT5OdW1DbGFzc2VzID4gTUFYX05VTV9DTEFTU0VTKSB7CisrICAg IHRwcmludGYoIkVycm9yOiBpbnZhbGlkIGNvdW50cyBpbiBpbnR0ZW1wOiB1bmljaGFyc2V0X3Np emU9JXUsIE51bUNsYXNzUHJ1bmVycz0ldSwgIgorKyAgICAgICAgICAgICJOdW1DbGFzc2VzPSV1 XG4iLAorKyAgICAgICAgICAgIHVuaWNoYXJzZXRfc2l6ZSwgVGVtcGxhdGVzLT5OdW1DbGFzc1By dW5lcnMsIFRlbXBsYXRlcy0+TnVtQ2xhc3Nlcyk7CisrICAgIGRlbGV0ZSBUZW1wbGF0ZXM7Cisr ICAgIHJldHVybiBudWxscHRyOworKyAgfQorKworICAgaWYgKHZlcnNpb25faWQgPCAzKSB7Cisg ICAgIE1heE51bUNvbmZpZ3MgPSBPTERfTUFYX05VTV9DT05GSUdTOworICAgICBXZXJkc1BlckNv bmZpZ1ZlYyA9IE9MRF9XRVJEU19QRVJfQ09ORklHX1ZFQzsKK0BAIC03MDUsNiArNzE2LDE2IEBA IElOVF9URU1QTEFURVNfU1RSVUNUICpDbGFzc2lmeTo6UmVhZEludFQKKyAgICAgICAgIG1heF9j bGFzc19pZCA9IENsYXNzSWRGb3JbaV07CisgICAgICAgfQorICAgICB9CisrICAgIC8vIENsYXNz IGlkcyBpbmRleCBDbGFzc1tdIGFuZCAoZGl2aWRlZCBieSBDTEFTU0VTX1BFUl9DUCkgQ2xhc3NQ cnVuZXJzW10sCisrICAgIC8vIHNvIHJlamVjdCBhIGNvcnJ1cHQgb3IgbWFsaWNpb3VzIGZpbGUg aW5zdGVhZCBvZiB3cml0aW5nIG91dCBvZiBib3VuZHMuCisrICAgIGlmIChtYXhfY2xhc3NfaWQg Pj0gTUFYX05VTV9DTEFTU0VTKSB7CisrICAgICAgdHByaW50ZigiRXJyb3I6IGNsYXNzIGlkICV1 IGluIGludHRlbXAgZXhjZWVkcyBNQVhfTlVNX0NMQVNTRVNcbiIsIG1heF9jbGFzc19pZCk7Cisr ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFRlbXBsYXRlcy0+TnVtQ2xhc3NQcnVuZXJz OyBpKyspIHsKKysgICAgICAgIGRlbGV0ZSBUZW1wQ2xhc3NQcnVuZXJbaV07CisrICAgICAgfQor KyAgICAgIGRlbGV0ZSBUZW1wbGF0ZXM7CisrICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgIH0K KyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gQ1BydW5lcklkRm9yKG1heF9jbGFzc19pZCk7IGkr KykgeworICAgICAgIFRlbXBsYXRlcy0+Q2xhc3NQcnVuZXJzW2ldID0gbmV3IENMQVNTX1BSVU5F Ul9TVFJVQ1Q7CisgICAgICAgbWVtc2V0KFRlbXBsYXRlcy0+Q2xhc3NQcnVuZXJzW2ldLCAwLCBz aXplb2YoQ0xBU1NfUFJVTkVSX1NUUlVDVCkpOworQEAgLTc3NCw4ICs3OTUsMjAgQEAgSU5UX1RF TVBMQVRFU19TVFJVQ1QgKkNsYXNzaWZ5OjpSZWFkSW50VAorICAgICAgIH0KKyAgICAgfQorICAg ICB1bnNpZ25lZCBudW1fY29uZmlncyA9IHZlcnNpb25faWQgPCA0ID8gTWF4TnVtQ29uZmlncyA6 IENsYXNzLT5OdW1Db25maWdzOworLSAgICBBU1NFUlRfSE9TVChudW1fY29uZmlncyA8PSBNYXhO dW1Db25maWdzKTsKKy0gICAgaWYgKGZwLT5GUmVhZEVuZGlhbihDbGFzcy0+Q29uZmlnTGVuZ3Ro cywgc2l6ZW9mKHVpbnQxNl90KSwgbnVtX2NvbmZpZ3MpICE9IG51bV9jb25maWdzKSB7CisrICAg IC8vIENsYXNzLT5OdW1Qcm90b1NldHMgaXMgdXNlZCBhcyBhIGxvb3AgYm91bmQgdGhhdCB3cml0 ZXMgaW50byB0aGUKKysgICAgLy8gZml4ZWQtc2l6ZSBQcm90b1NldHNbXSBhcnJheSwgc28gcmVq ZWN0IGEgY29ycnVwdCBvciBtYWxpY2lvdXMgZmlsZQorKyAgICAvLyBpbnN0ZWFkIG9mIHdyaXRp bmcgb3V0IG9mIGJvdW5kcy4KKysgICAgaWYgKENsYXNzLT5OdW1Qcm90b3MgPiBNQVhfTlVNX1BS T1RPUyB8fCBDbGFzcy0+TnVtUHJvdG9TZXRzID4gTUFYX05VTV9QUk9UT19TRVRTIHx8CisrICAg ICAgICBudW1fY29uZmlncyA+IE1heE51bUNvbmZpZ3MpIHsKKysgICAgICB0cHJpbnRmKCJFcnJv cjogaW52YWxpZCBjb3VudHMgZm9yIGNsYXNzICV1IGluIGludHRlbXA6IE51bVByb3Rvcz0ldSwg TnVtUHJvdG9TZXRzPSV1LCAiCisrICAgICAgICAgICAgICAiTnVtQ29uZmlncz0ldVxuIiwKKysg ICAgICAgICAgICAgIGksIENsYXNzLT5OdW1Qcm90b3MsIENsYXNzLT5OdW1Qcm90b1NldHMsIENs YXNzLT5OdW1Db25maWdzKTsKKysgICAgICBDbGFzcy0+TnVtUHJvdG9TZXRzID0gMDsgLy8gbm8g cHJvdG8gc2V0cyBhbGxvY2F0ZWQgeWV0OyBrZWVwIGRlc3RydWN0b3Igc2FmZQorKyAgICAgIGRl bGV0ZSBDbGFzczsKKysgICAgICBkZWxldGUgVGVtcGxhdGVzOworKyAgICAgIHJldHVybiBudWxs cHRyOworKyAgICB9CisrICAgIGlmIChmcC0+RlJlYWRFbmRpYW4oQ2xhc3MtPkNvbmZpZ0xlbmd0 aHMuZGF0YSgpLCBzaXplb2YodWludDE2X3QpLCBudW1fY29uZmlncykgIT0gbnVtX2NvbmZpZ3Mp IHsKKyAgICAgICB0cHJpbnRmKCJCYWQgcmVhZCBvZiBpbnR0ZW1wIVxuIik7CisgICAgIH0KKyAg ICAgaWYgKHZlcnNpb25faWQgPCAyKSB7CitAQCAtODA5LDggKzg0Miw5IEBAIElOVF9URU1QTEFU RVNfU1RSVUNUICpDbGFzc2lmeTo6UmVhZEludFQKKyAgICAgICAgICAgICBmcC0+RlJlYWQoJlBy b3RvU2V0LT5Qcm90b3NbeF0uQW5nbGUsIHNpemVvZihQcm90b1NldC0+UHJvdG9zW3hdLkFuZ2xl KSwgMSkgIT0gMSkgeworICAgICAgICAgICB0cHJpbnRmKCJCYWQgcmVhZCBvZiBpbnR0ZW1wIVxu Iik7CisgICAgICAgICB9CistICAgICAgICBpZiAoZnAtPkZSZWFkRW5kaWFuKCZQcm90b1NldC0+ UHJvdG9zW3hdLkNvbmZpZ3MsIHNpemVvZihQcm90b1NldC0+UHJvdG9zW3hdLkNvbmZpZ3NbMF0p LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZXJkc1BlckNvbmZpZ1ZlYykgIT0gV2Vy ZHNQZXJDb25maWdWZWMpIHsKKysgICAgICAgIGlmIChmcC0+RlJlYWRFbmRpYW4oUHJvdG9TZXQt PlByb3Rvc1t4XS5Db25maWdzLmRhdGEoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKFByb3RvU2V0LT5Qcm90b3NbeF0uQ29uZmlnc1swXSksIFdlcmRzUGVyQ29uZmlnVmVj KSAhPQorKyAgICAgICAgICAgIFdlcmRzUGVyQ29uZmlnVmVjKSB7CisgICAgICAgICAgIHRwcmlu dGYoIkJhZCByZWFkIG9mIGludHRlbXAhXG4iKTsKKyAgICAgICAgIH0KKyAgICAgICB9CitkaWZm IC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9pbnRw cm90by5oIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2ludHByb3RvLmgKKy0tLSB0 ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2ludHByb3RvLmgJMjAyNi0wNy0yNCAyMDoyNzow Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9p bnRwcm90by5oCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDM5NzA5Nzg0ICswMjAwCitAQCAtODAsMTQg KzgwLDE0IEBAIHN0cnVjdCBJTlRfUFJPVE9fU1RSVUNUIHsKKyAgIHVpbnQ4X3QgQjsKKyAgIGlu dDhfdCBDOworICAgdWludDhfdCBBbmdsZTsKKy0gIHVpbnQzMl90IENvbmZpZ3NbV0VSRFNfUEVS X0NPTkZJR19WRUNdOworKyAgc3RkOjphcnJheTx1aW50MzJfdCwgV0VSRFNfUEVSX0NPTkZJR19W RUM+IENvbmZpZ3N7fTsKKyB9OworIAorIHR5cGVkZWYgdWludDMyX3QgUFJPVE9fUFJVTkVSW05V TV9QUF9QQVJBTVNdW05VTV9QUF9CVUNLRVRTXVtXRVJEU19QRVJfUFBfVkVDVE9SXTsKKyAKKyBz dHJ1Y3QgUFJPVE9fU0VUX1NUUlVDVCB7CisgICBQUk9UT19QUlVORVIgUHJvdG9QcnVuZXI7Cist ICBJTlRfUFJPVE9fU1RSVUNUIFByb3Rvc1tQUk9UT1NfUEVSX1BST1RPX1NFVF07CisrICBzdGQ6 OmFycmF5PElOVF9QUk9UT19TVFJVQ1QsIFBST1RPU19QRVJfUFJPVE9fU0VUPiBQcm90b3N7fTsK KyB9OworIAorIHR5cGVkZWYgdWludDMyX3QgQ09ORklHX1BSVU5FUltOVU1fUFBfUEFSQU1TXVtO VU1fUFBfQlVDS0VUU11bNF07CitAQCAtOTksOSArOTksOSBAQCBzdHJ1Y3QgSU5UX0NMQVNTX1NU UlVDVCB7CisgICB1aW50MTZfdCBOdW1Qcm90b3MgPSAwOworICAgdWludDhfdCBOdW1Qcm90b1Nl dHMgPSAwOworICAgdWludDhfdCBOdW1Db25maWdzID0gMDsKKy0gIFBST1RPX1NFVF9TVFJVQ1Qg KlByb3RvU2V0c1tNQVhfTlVNX1BST1RPX1NFVFNdOworKyAgc3RkOjphcnJheTxQUk9UT19TRVRf U1RSVUNUICosIE1BWF9OVU1fUFJPVE9fU0VUUz4gUHJvdG9TZXRze307CisgICBzdGQ6OnZlY3Rv cjx1aW50OF90PiBQcm90b0xlbmd0aHM7CistICB1aW50MTZfdCBDb25maWdMZW5ndGhzW01BWF9O VU1fQ09ORklHU107CisrICBzdGQ6OmFycmF5PHVpbnQxNl90LCBNQVhfTlVNX0NPTkZJR1M+IENv bmZpZ0xlbmd0aHN7fTsKKyAgIGludCBmb250X3NldF9pZCA9IDA7IC8vIEZvbnRTZXQgaWQsIHNl ZSBhYm92ZQorIH07CisgCitAQCAtMTEwLDggKzExMCw4IEBAIHN0cnVjdCBURVNTX0FQSSBJTlRf VEVNUExBVEVTX1NUUlVDVCB7CisgICB+SU5UX1RFTVBMQVRFU19TVFJVQ1QoKTsKKyAgIHVuc2ln bmVkIE51bUNsYXNzZXM7CisgICB1bnNpZ25lZCBOdW1DbGFzc1BydW5lcnM7CistICBJTlRfQ0xB U1NfU1RSVUNUICpDbGFzc1tNQVhfTlVNX0NMQVNTRVNdOworLSAgQ0xBU1NfUFJVTkVSX1NUUlVD VCAqQ2xhc3NQcnVuZXJzW01BWF9OVU1fQ0xBU1NfUFJVTkVSU107CisrICBzdGQ6OmFycmF5PElO VF9DTEFTU19TVFJVQ1QgKiwgTUFYX05VTV9DTEFTU0VTPiBDbGFzc3t9OworKyAgc3RkOjphcnJh eTxDTEFTU19QUlVORVJfU1RSVUNUICosIE1BWF9OVU1fQ0xBU1NfUFJVTkVSUz4gQ2xhc3NQcnVu ZXJze307CisgfTsKKyAKKyAvKiBkZWZpbml0aW9ucyBvZiBpbnRlZ2VyIGZlYXR1cmVzKi8KK2Rp ZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL3dvcmRyZWMvdGZh Y2UuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL3dvcmRyZWMvdGZhY2UuY3BwCistLS0gdGVz c2VyYWN0LTUuNS4zL3NyYy93b3JkcmVjL3RmYWNlLmNwcAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAw MDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL3dvcmRyZWMvdGZhY2Uu Y3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDQwMDE5NjQzICswMjAwCitAQCAtMzYsMTQgKzM2LDE2 IEBAIG5hbWVzcGFjZSB0ZXNzZXJhY3QgeworICAqIGluaXRfcGVybXV0ZSBkZXRlcm1pbmVzIHdo ZXRoZXIgdG8gaW5pdGlhbGl6ZSB0aGUgcGVybXV0ZSBmdW5jdGlvbnMKKyAgKiBhbmQgRGF3ZyBt b2RlbHMuCisgICovCistdm9pZCBXb3JkcmVjOjpwcm9ncmFtX2VkaXR1cChjb25zdCBzdGQ6OnN0 cmluZyAmdGV4dGJhc2UsIFRlc3NkYXRhTWFuYWdlciAqaW5pdF9jbGFzc2lmaWVyLAorK2Jvb2wg V29yZHJlYzo6cHJvZ3JhbV9lZGl0dXAoY29uc3Qgc3RkOjpzdHJpbmcgJnRleHRiYXNlLCBUZXNz ZGF0YU1hbmFnZXIgKmluaXRfY2xhc3NpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRlc3NkYXRhTWFuYWdlciAqaW5pdF9kaWN0KSB7CisgICBpZiAoIXRleHRiYXNlLmVtcHR5 KCkpIHsKKyAgICAgaW1hZ2VmaWxlID0gdGV4dGJhc2U7CisgICB9CisgI2lmbmRlZiBESVNBQkxF RF9MRUdBQ1lfRU5HSU5FCisgICBJbml0RmVhdHVyZURlZnMoJmZlYXR1cmVfZGVmc18pOworLSAg SW5pdEFkYXB0aXZlQ2xhc3NpZmllcihpbml0X2NsYXNzaWZpZXIpOworKyAgaWYgKCFJbml0QWRh cHRpdmVDbGFzc2lmaWVyKGluaXRfY2xhc3NpZmllcikpIHsKKysgICAgcmV0dXJuIGZhbHNlOwor KyAgfQorICAgaWYgKGluaXRfZGljdCkgeworICAgICBnZXREaWN0KCkuU2V0dXBGb3JMb2FkKERp Y3Q6Okdsb2JhbERhd2dDYWNoZSgpKTsKKyAgICAgZ2V0RGljdCgpLkxvYWQobGFuZywgaW5pdF9k aWN0KTsKK0BAIC01MSw2ICs1Myw3IEBAIHZvaWQgV29yZHJlYzo6cHJvZ3JhbV9lZGl0dXAoY29u c3Qgc3RkOjoKKyAgIH0KKyAgIHBhc3MyX29rX3NwbGl0ID0gY2hvcF9va19zcGxpdDsKKyAjZW5k aWYgLy8gbmRlZiBESVNBQkxFRF9MRUdBQ1lfRU5HSU5FCisrICByZXR1cm4gdHJ1ZTsKKyB9Cisg CisgLyoqCitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy93 b3JkcmVjL3dvcmRyZWMuaCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy93b3JkcmVjL3dvcmRyZWMu aAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvd29yZHJlYy93b3JkcmVjLmgJMjAyNi0wNy0yNCAy MDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy93b3Jk cmVjL3dvcmRyZWMuaAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQ0MDI0Mjk5MiArMDIwMAorQEAgLTUw LDcgKzUwLDcgQEAgcHVibGljOgorICAgdmlydHVhbCB+V29yZHJlYygpID0gZGVmYXVsdDsKKyAK KyAgIC8vIHRmYWNlLmNwcAorLSAgdm9pZCBwcm9ncmFtX2VkaXR1cChjb25zdCBzdGQ6OnN0cmlu ZyAmdGV4dGJhc2UsIFRlc3NkYXRhTWFuYWdlciAqaW5pdF9jbGFzc2lmaWVyLAorKyAgYm9vbCBw cm9ncmFtX2VkaXR1cChjb25zdCBzdGQ6OnN0cmluZyAmdGV4dGJhc2UsIFRlc3NkYXRhTWFuYWdl ciAqaW5pdF9jbGFzc2lmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICBUZXNzZGF0YU1hbmFn ZXIgKmluaXRfZGljdCk7CisgICB2b2lkIHByb2dyYW1fZWRpdGRvd24oKTsKKyAgIGludCBlbmRf cmVjb2coKTsKK0BAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgorICAgfQorIAorICAgLy8gdGZh Y2UuY3BwCistICB2b2lkIHByb2dyYW1fZWRpdHVwKGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXh0YmFz ZSwgVGVzc2RhdGFNYW5hZ2VyICppbml0X2NsYXNzaWZpZXIsCisrICBib29sIHByb2dyYW1fZWRp dHVwKGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXh0YmFzZSwgVGVzc2RhdGFNYW5hZ2VyICppbml0X2Ns YXNzaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFRlc3NkYXRhTWFuYWdlciAqaW5pdF9k aWN0KTsKKyAgIHZvaWQgY2NfcmVjb2coV0VSRF9SRVMgKndvcmQpOworICAgdm9pZCBwcm9ncmFt X2VkaXRkb3duKCk7CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4z L3VuaXR0ZXN0L0NNYWtlTGlzdHMudHh0IHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvQ01h a2VMaXN0cy50eHQKKy0tLSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvQ01ha2VMaXN0cy50eHQJ MjAyNi0wOS0yMSAxMDoyODoxMC4xOTMzNjI2MjkgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMt bmV3L3VuaXR0ZXN0L0NNYWtlTGlzdHMudHh0CTIwMjYtMDktMjEgMTA6Mjg6MTAuNDQwNDgwNTIz ICswMjAwCitAQCAtNTgsNiArNTgsNyBAQCBzZXQoTEVHQUNZX1RFU1RTCisgICAgIGVxdWF0aW9u ZGV0ZWN0X3Rlc3QuY2MKKyAgICAgaW5kZXhtYXBiaWRpX3Rlc3QuY2MKKyAgICAgaW50ZmVhdHVy ZW1hcF90ZXN0LmNjCisrICAgIGludHByb3RvX3Rlc3QuY2MKKyAgICAgbWFzdGVydHJhaW5lcl90 ZXN0LmNjCisgICAgIG5vcm1wcm90b190ZXN0LmNjCisgICAgIG9zZF90ZXN0LmNjCitkaWZmIC1y dXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2ludHByb3RvX3Rl c3QuY2MgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC9pbnRwcm90b190ZXN0LmNjCistLS0g dGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2ludHByb3RvX3Rlc3QuY2MJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L2lu dHByb3RvX3Rlc3QuY2MJMjAyNi0wOS0yMSAxMDoyODoxMC40NDA3NDc1MDEgKzAyMDAKK0BAIC0w LDAgKzEsMTI0IEBACisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysvLyBGaWxlOiAgICAgICAgaW50cHJvdG9f dGVzdC5jYworKy8vIERlc2NyaXB0aW9uOiBUZXN0cyB0aGF0IGEgY29ycnVwdCBURVNTREFUQV9J TlRURU1QIGNvbXBvbmVudCBpbiBhCisrLy8gICAgICAgICAgICAgIC50cmFpbmVkZGF0YSBmaWxl IGlzIHJlamVjdGVkIHdpdGhvdXQgbWVtb3J5IGNvcnJ1cHRpb24uCisrLy8gICAgICAgICAgICAg IFRoZSBjb3VudCBmaWVsZHMgKE51bUNsYXNzUHJ1bmVycywgTnVtQ2xhc3NlcywKKysvLyAgICAg ICAgICAgICAgTnVtUHJvdG9TZXRzKSBhcmUgcmVhZCBmcm9tIHRoZSB1bnRydXN0ZWQgZmlsZSBh bmQgdXNlZAorKy8vICAgICAgICAgICAgICBhcyBsb29wIGJvdW5kcyB0aGF0IHdyaXRlIGludG8g Zml4ZWQtc2l6ZSBhcnJheXMgaW4KKysvLyAgICAgICAgICAgICAgQ2xhc3NpZnk6OlJlYWRJbnRU ZW1wbGF0ZXMsIHNvIHRoZXkgbXVzdCBiZSB2YWxpZGF0ZWQKKysvLyAgICAgICAgICAgICAgYmVm b3JlIHVzZS4KKysvLworKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFp biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrI2luY2x1ZGUgImlu Y2x1ZGVfZ3VuaXQuaCIKKysKKysjaW5jbHVkZSA8dGVzc2VyYWN0L2Jhc2VhcGkuaD4KKysKKysj aW5jbHVkZSAiaW50cHJvdG8uaCIgICAgIC8vIGZvciBNQVhfTlVNX0NMQVNTX1BSVU5FUlMsIE1B WF9OVU1fQ0xBU1NFUworKyNpbmNsdWRlICJ0ZXNzZGF0YW1hbmFnZXIuaCIKKysKKysjaW5jbHVk ZSA8Y3N0ZGludD4KKysjaW5jbHVkZSA8Y3N0ZGlvPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNp bmNsdWRlIDxzdHJpbmc+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysKKytuYW1lc3BhY2UgdGVzc2Vy YWN0IHsKKytuYW1lc3BhY2UgeworKworKy8vIE1pbmltYWwgbGVnYWN5IHVuaWNoYXJzZXQgY29t cG9uZW50ICh0d28gY2hhcmFjdGVyczogc3BhY2UgYW5kICdhJykuCisrY29uc3QgY2hhciBrTWlu VW5pY2hhcnNldFtdID0KKysgICAgIjJcbiIKKysgICAgIk5VTEwgMSAwLDI1NSwwLDI1NSwwLDAs MCwwLDAsMCBMYXRpbiAyIDAgMlxuIgorKyAgICAiYSAxIDAsMjU1LDAsMjU1LDAsMCwwLDAsMCww IExhdGluIDIgMCAyXG4iOworKworKy8vIEJ1aWxkcyBhbiBpbnR0ZW1wIGNvbXBvbmVudCBpbiB0 aGUgY3VycmVudCAodmVyc2lvbiAtNSkgb24tZGlzayBsYXlvdXQsCisrLy8gYXMgd3JpdHRlbiBi eSBDbGFzc2lmeTo6V3JpdGVJbnRUZW1wbGF0ZXM6CisrLy8gICB1aW50MzIgdW5pY2hhcnNldF9z aXplLCBpbnQzMiB2ZXJzaW9uX2lkLCB1aW50MzIgTnVtQ2xhc3NQcnVuZXJzLAorKy8vICAgdWlu dDMyIE51bUNsYXNzZXMsIHRoZW4gcGVyIGNsYXNzOiB1aW50MTYgTnVtUHJvdG9zLCB1aW50OCBO dW1Qcm90b1NldHMsCisrLy8gICB1aW50OCBOdW1Db25maWdzLgorK3N0ZDo6dmVjdG9yPGNoYXI+ IE1ha2VJbnR0ZW1wKGludDMyX3QgdmVyc2lvbl9pZCwgdWludDMyX3QgbnVtX2NsYXNzX3BydW5l cnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtX2NsYXNzZXMs IHVpbnQzMl90IHVuaWNoYXJzZXRfc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90IG51bV9wcm90b19zZXRzID0gMCkgeworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gZGF0 YTsKKysgIGF1dG8gYXBwZW5kID0gWyZkYXRhXShjb25zdCB2b2lkICpwLCBzaXplX3Qgbikgewor KyAgICBjb25zdCBjaGFyICpiID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAqPihwKTsKKysgICAg ZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgYiwgYiArIG4pOworKyAgfTsKKysgIGFwcGVuZCgmdW5p Y2hhcnNldF9zaXplLCBzaXplb2YodW5pY2hhcnNldF9zaXplKSk7CisrICBhcHBlbmQoJnZlcnNp b25faWQsIHNpemVvZih2ZXJzaW9uX2lkKSk7CisrICBhcHBlbmQoJm51bV9jbGFzc19wcnVuZXJz LCBzaXplb2YobnVtX2NsYXNzX3BydW5lcnMpKTsKKysgIGFwcGVuZCgmbnVtX2NsYXNzZXMsIHNp emVvZihudW1fY2xhc3NlcykpOworKyAgZm9yICh1aW50MzJfdCBjID0gMDsgYyA8IG51bV9jbGFz c2VzICYmIGMgPCBNQVhfTlVNX0NMQVNTRVM7ICsrYykgeworKyAgICB1aW50MTZfdCBudW1fcHJv dG9zID0gMDsKKysgICAgdWludDhfdCBudW1fY29uZmlncyA9IDA7CisrICAgIGFwcGVuZCgmbnVt X3Byb3Rvcywgc2l6ZW9mKG51bV9wcm90b3MpKTsKKysgICAgYXBwZW5kKCZudW1fcHJvdG9fc2V0 cywgc2l6ZW9mKG51bV9wcm90b19zZXRzKSk7CisrICAgIGFwcGVuZCgmbnVtX2NvbmZpZ3MsIHNp emVvZihudW1fY29uZmlncykpOworKyAgfQorKyAgcmV0dXJuIGRhdGE7CisrfQorKworKy8vIFdy aXRlcyBhIHRyYWluZWRkYXRhIGZpbGUgd2l0aCBhIG1pbmltYWwgdW5pY2hhcnNldCBhbmQgdGhl IGdpdmVuCisrLy8gKGNvcnJ1cHQpIGludHRlbXAgY29tcG9uZW50IHRvIGRpci9lbmcudHJhaW5l ZGRhdGEuCisrYm9vbCBXcml0ZUNvcnJ1cHRUcmFpbmVkZGF0YShjb25zdCBzdGQ6OnN0cmluZyAm ZGlyLCBjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiAmaW50dGVtcCkgeworKyAgVGVzc2RhdGFNYW5h Z2VyIG1ncjsKKysgIG1nci5PdmVyd3JpdGVFbnRyeShURVNTREFUQV9VTklDSEFSU0VULCBrTWlu VW5pY2hhcnNldCwgc2l6ZW9mKGtNaW5VbmljaGFyc2V0KSAtIDEpOworKyAgbWdyLk92ZXJ3cml0 ZUVudHJ5KFRFU1NEQVRBX0lOVFRFTVAsIGludHRlbXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+ KGludHRlbXAuc2l6ZSgpKSk7CisrICByZXR1cm4gbWdyLlNhdmVGaWxlKChkaXIgKyAiL2VuZy50 cmFpbmVkZGF0YSIpLmNfc3RyKCksIG51bGxwdHIpOworK30KKysKKytjbGFzcyBJbnRwcm90b1Rl c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CisrcHJvdGVjdGVkOgorKyAgdm9pZCBTZXRVcCgp IG92ZXJyaWRlIHsKKysgICAgdG1wbF8gPSAiL3RtcC90ZXNzX2ludHByb3RvX3Rlc3RfWFhYWFhY IjsKKysgICAgY2hhciAqZGlyID0gbWtkdGVtcCh0bXBsXy5kYXRhKCkpOworKyAgICBBU1NFUlRf TkUoZGlyLCBudWxscHRyKTsKKysgICAgZGlyXyA9IGRpcjsKKysgIH0KKysgIHZvaWQgVGVhckRv d24oKSBvdmVycmlkZSB7CisrICAgIHN0ZDo6cmVtb3ZlKChkaXJfICsgIi9lbmcudHJhaW5lZGRh dGEiKS5jX3N0cigpKTsKKysgICAgcm1kaXIoZGlyXy5jX3N0cigpKTsKKysgIH0KKysgIC8vIEV4 cGVjdHMgdGhlIGxlZ2FjeSBlbmdpbmUgdG8gcmVqZWN0IHRoZSBjb3JydXB0ZWQgdHJhaW5lZGRh dGEKKysgIC8vIGdyYWNlZnVsbHkgKGluaXQgZmFpbHVyZSkgaW5zdGVhZCBvZiBjb3JydXB0aW5n IG1lbW9yeS4KKysgIHZvaWQgRXhwZWN0SW5pdEZhaWxzKGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+ ICZpbnR0ZW1wKSB7CisrICAgIEFTU0VSVF9UUlVFKFdyaXRlQ29ycnVwdFRyYWluZWRkYXRhKGRp cl8sIGludHRlbXApKTsKKysgICAgdGVzc2VyYWN0OjpUZXNzQmFzZUFQSSBhcGk7CisrICAgIEVY UEVDVF9FUShhcGkuSW5pdChkaXJfLmNfc3RyKCksICJlbmciLCB0ZXNzZXJhY3Q6Ok9FTV9URVNT RVJBQ1RfT05MWSksIC0xKTsKKysgIH0KKysgIHN0ZDo6c3RyaW5nIGRpcl87CisrICBzdGQ6OnN0 cmluZyB0bXBsXzsKKyt9OworKworKy8vIE51bUNsYXNzUHJ1bmVycyBleGNlZWRzIE1BWF9OVU1f Q0xBU1NfUFJVTkVSUzogdGhlIHBydW5lci1yZWFkIGxvb3Agd291bGQKKysvLyB3cml0ZSBwYXN0 IHRoZSBlbmQgb2YgSU5UX1RFTVBMQVRFU19TVFJVQ1Q6OkNsYXNzUHJ1bmVyc1tdLgorK1RFU1Rf RihJbnRwcm90b1Rlc3QsIFJlamVjdHNUb29NYW55Q2xhc3NQcnVuZXJzKSB7CisrICBFeHBlY3RJ bml0RmFpbHMoTWFrZUludHRlbXAoLTUsIE1BWF9OVU1fQ0xBU1NfUFJVTkVSUyArIDEsIDAsIDEp KTsKKyt9CisrCisrLy8gTnVtQ2xhc3NlcyBleGNlZWRzIE1BWF9OVU1fQ0xBU1NFUzogdGhlIGNs YXNzLXJlYWQgbG9vcCB3b3VsZCB3cml0ZSBwYXN0CisrLy8gdGhlIGVuZCBvZiBJTlRfVEVNUExB VEVTX1NUUlVDVDo6Q2xhc3NbXS4KKytURVNUX0YoSW50cHJvdG9UZXN0LCBSZWplY3RzVG9vTWFu eUNsYXNzZXMpIHsKKysgIEV4cGVjdEluaXRGYWlscyhNYWtlSW50dGVtcCgtNSwgMCwgTUFYX05V TV9DTEFTU0VTICsgMSwgMSkpOworK30KKysKKysvLyBBIGNsYXNzIHdpdGggTnVtUHJvdG9TZXRz ID4gTUFYX05VTV9QUk9UT19TRVRTOiB0aGUgcHJvdG8tc2V0IGxvb3Agd291bGQKKysvLyB3cml0 ZSBwYXN0IHRoZSBlbmQgb2YgSU5UX0NMQVNTX1NUUlVDVDo6UHJvdG9TZXRzW10uCisrVEVTVF9G KEludHByb3RvVGVzdCwgUmVqZWN0c1Rvb01hbnlQcm90b1NldHMpIHsKKysgIEV4cGVjdEluaXRG YWlscyhNYWtlSW50dGVtcCgtNSwgMCwgMSwgMSwgTUFYX05VTV9QUk9UT19TRVRTICsgMSkpOwor K30KKysKKysvLyB1bmljaGFyc2V0X3NpemUgZXhjZWVkcyBNQVhfTlVNX0NMQVNTRVM6IHRoZSB2 ZXJzaW9uIDwgMiBjbGFzcy1pZC1pbmRleAorKy8vIHJlYWQgd291bGQgd3JpdGUgcGFzdCB0aGUg ZW5kIG9mIEluZGV4Rm9yW10uCisrVEVTVF9GKEludHByb3RvVGVzdCwgUmVqZWN0c1Rvb0xhcmdl VW5pY2hhcnNldFNpemUpIHsKKysgIEV4cGVjdEluaXRGYWlscyhNYWtlSW50dGVtcCgtMSwgMCwg MCwgTUFYX05VTV9DTEFTU0VTICsgMSkpOworK30KKysKKyt9IC8vIG5hbWVzcGFjZQorK30gLy8g bmFtZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAtLWdpdCBhL2I0OTRhYzE4OTI1ZjlkOWFmZjllZjU4 MTU0NzVkZTk5NDNhYjE5YmYucGF0Y2ggYi9iNDk0YWMxODkyNWY5ZDlhZmY5ZWY1ODE1NDc1ZGU5 OTQzYWIxOWJmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGNk NzkKLS0tIC9kZXYvbnVsbAorKysgYi9iNDk0YWMxODkyNWY5ZDlhZmY5ZWY1ODE1NDc1ZGU5OTQz YWIxOWJmLnBhdGNoCkBAIC0wLDAgKzEsMjU4IEBACitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVu Y2UgdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFtIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZp bGUuYW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODox MC4yMzg0NTI4OTMgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIw MjYtMDktMjEgMTA6Mjg6MTAuMjQzODc0MTMwICswMjAwCitAQCAtMTE3MSw2ICsxMTcxLDcgQEAg Y2hlY2tfUFJPR1JBTVMgKz0gbGF5b3V0X3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSBsaWdhdHVy ZV90YWJsZV90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0gbGlubHNxX3Rlc3QKKyBjaGVja19QUk9H UkFNUyArPSBsaXN0X3Rlc3QKKytjaGVja19QUk9HUkFNUyArPSBsc3RtX2xheWVyX3Rlc3QKKyBp ZiBFTkFCTEVfVFJBSU5JTkcKKyBjaGVja19QUk9HUkFNUyArPSBsc3RtX3JlY29kZV90ZXN0Cisg Y2hlY2tfUFJPR1JBTVMgKz0gbHN0bV9zcXVhc2hlZF90ZXN0CitAQCAtMTM1Miw2ICsxMzUzLDEw IEBAIGxvYWRsYW5nX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2xvYWRsYW4KKyBsb2FkbGFuZ190 ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBsb2FkbGFuZ190ZXN0X0xEQURE ID0gJChURVNTX0xJQlMpICQoTEVQVE9OSUNBX0xJQlMpCisgCisrbHN0bV9sYXllcl90ZXN0X1NP VVJDRVMgPSB1bml0dGVzdC9sc3RtX2xheWVyX3Rlc3QuY2MKKytsc3RtX2xheWVyX3Rlc3RfQ1BQ RkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorK2xzdG1fbGF5ZXJfdGVzdF9MREFERCA9ICQo VEVTU19MSUJTKQorKworIGxzdG1fcmVjb2RlX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2xzdG1f cmVjb2RlX3Rlc3QuY2MKKyBsc3RtX3JlY29kZV90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9D UFBGTEFHUykKKyBsc3RtX3JlY29kZV90ZXN0X0xEQUREID0gJChUUkFJTklOR19MSUJTKQorZGlm ZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvbHN0bS9sc3RtLmNw cCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9sc3RtL2xzdG0uY3BwCistLS0gdGVzc2VyYWN0LTUu NS4zL3NyYy9sc3RtL2xzdG0uY3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAw CisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvbHN0bS9sc3RtLmNwcAkyMDI2LTA5LTIxIDEw OjI4OjEwLjI0NDQ3OTc1MiArMDIwMAorQEAgLTI3NCwxMiArMjc0LDMyIEBAIGJvb2wgTFNUTTo6 RGVTZXJpYWxpemUoVEZpbGUgKmZwKSB7CisgICAgICAgaXNfMmRfID0gbmFfIC0gbmZfID09IG5p XyArIDIgKiBuc187CisgICAgIH0KKyAgIH0KKysgIC8vIFRoZSBkZXNlcmlhbGl6ZWQgZGltZW5z aW9ucyBtdXN0IGJlIG11dHVhbGx5IGNvbnNpc3RlbnQ6IHRoZSBmb3J3YXJkCisrICAvLyBwYXNz IHNpemVzIGl0cyBidWZmZXJzIGZyb20gbmFfLCBub18gYW5kIG5zXyB3aGlsZSB0aGUgZ2F0ZSBt YXRyaWNlcworKyAgLy8gZHJpdmUgdGhlaXIgb3duIGRpbWVuc2lvbnMuCisrICBpZiAobmFfICE9 IG5pXyArIG5mXyArIChpc18yZF8gPyAyIDogMSkgKiBuc18pIHsKKysgICAgcmV0dXJuIGZhbHNl OworKyAgfQorKyAgZm9yIChpbnQgdyA9IDA7IHcgPCBXVF9DT1VOVDsgKyt3KSB7CisrICAgIGlm ICh3ID09IEdGUyAmJiAhSXMyRCgpKSB7CisrICAgICAgY29udGludWU7CisrICAgIH0KKysgICAg aWYgKGdhdGVfd2VpZ2h0c19bd10uRGltMSgpICE9IG5zXyB8fCBnYXRlX3dlaWdodHNfW3ddLkRp bTIoKSAhPSBuYV8gKyAxKSB7CisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICB9Cisr ICBpZiAoKHR5cGVfID09IE5UX0xTVE0gfHwgdHlwZV8gPT0gTlRfTFNUTV9TVU1NQVJZKSAmJiBu c18gIT0gbm9fKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKyAgIGRlbGV0ZSBzb2Z0bWF4 XzsKKyAgIGlmICh0eXBlXyA9PSBOVF9MU1RNX1NPRlRNQVggfHwgdHlwZV8gPT0gTlRfTFNUTV9T T0ZUTUFYX0VOQ09ERUQpIHsKKyAgICAgc29mdG1heF8gPSBzdGF0aWNfY2FzdDxGdWxseUNvbm5l Y3RlZCAqPihOZXR3b3JrOjpDcmVhdGVGcm9tRmlsZShmcCkpOworICAgICBpZiAoc29mdG1heF8g PT0gbnVsbHB0cikgeworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorKyAgICBpZiAoc29m dG1heF8tPk51bUlucHV0cygpICE9IG5zXyB8fCBzb2Z0bWF4Xy0+TnVtT3V0cHV0cygpICE9IG5v XykgeworKyAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorICAgfSBlbHNlIHsKKyAgICAgc29m dG1heF8gPSBudWxscHRyOworICAgfQorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3Nl cmFjdC01LjUuMy9zcmMvbHN0bS9uZXR3b3JraW8uY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3Jj L2xzdG0vbmV0d29ya2lvLmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvbHN0bS9uZXR3b3Jr aW8uY3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0 LTUuNS4zLW5ldy9zcmMvbHN0bS9uZXR3b3JraW8uY3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuMjQ0 NTk1NDU0ICswMjAwCitAQCAtNjQxLDYgKzY0MSw3IEBAIHZvaWQgTmV0d29ya0lPOjpBZGRUaW1l U3RlcChpbnQgdCwgVEZsb2EKKyAKKyAvLyBBZGRzIHBhcnQgb2YgYSBzaW5nbGUgdGltZXN0ZXAg dG8gZmxvYXRzLgorIHZvaWQgTmV0d29ya0lPOjpBZGRUaW1lU3RlcFBhcnQoaW50IHQsIGludCBv ZmZzZXQsIGludCBudW1fZmVhdHVyZXMsIGZsb2F0ICppbm91dCkgY29uc3QgeworKyAgQVNTRVJU X0hPU1Qob2Zmc2V0ICsgbnVtX2ZlYXR1cmVzIDw9IE51bUZlYXR1cmVzKCkpOworICAgaWYgKGlu dF9tb2RlXykgeworICAgICBjb25zdCBpbnQ4X3QgKmxpbmUgPSBpX1t0XSArIG9mZnNldDsKKyAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZmVhdHVyZXM7ICsraSkgeworQEAgLTY2Miw2ICs2 NjMsNyBAQCB2b2lkIE5ldHdvcmtJTzo6V3JpdGVUaW1lU3RlcChpbnQgdCwgY29uCisgLy8gV3Jp dGVzIGEgc2luZ2xlIHRpbWVzdGVwIGZyb20gZmxvYXRzIGluIHRoZSByYW5nZSBbLTEsIDFdIHdy aXRpbmcgb25seQorIC8vIG51bV9mZWF0dXJlcyBlbGVtZW50cyBvZiBpbnB1dCB0byAoKnRoaXMp W3RdLCBzdGFydGluZyBhdCBvZmZzZXQuCisgdm9pZCBOZXR3b3JrSU86OldyaXRlVGltZVN0ZXBQ YXJ0KGludCB0LCBpbnQgb2Zmc2V0LCBpbnQgbnVtX2ZlYXR1cmVzLCBjb25zdCBURmxvYXQgKmlu cHV0KSB7CisrICBBU1NFUlRfSE9TVChvZmZzZXQgKyBudW1fZmVhdHVyZXMgPD0gTnVtRmVhdHVy ZXMoKSk7CisgICBpZiAoaW50X21vZGVfKSB7CisgICAgIGludDhfdCAqbGluZSA9IGlfW3RdICsg b2Zmc2V0OworICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9mZWF0dXJlczsgKytpKSB7Citk aWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2xzdG1f bGF5ZXJfdGVzdC5jYyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L2xzdG1fbGF5ZXJfdGVz dC5jYworLS0tIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9sc3RtX2xheWVyX3Rlc3QuY2MJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3 L3VuaXR0ZXN0L2xzdG1fbGF5ZXJfdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjI0NTQzODMw NyArMDIwMAorQEAgLTAsMCArMSwxNzcgQEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAg ICAgICBsc3RtX2xheWVyX3Rlc3QuY2MKKysvLyBEZXNjcmlwdGlvbjogVGVzdHMgdGhhdCBhbiBO VF9MU1RNIG5ldHdvcmsgbGF5ZXIgd2l0aCBtdXR1YWxseQorKy8vICAgICAgICAgICAgICBpbmNv bnNpc3RlbnQgZGVzZXJpYWxpemVkIGRpbWVuc2lvbnMgaXMgcmVqZWN0ZWQgYXQKKysvLyAgICAg ICAgICAgICAgbG9hZC4gVGhlIGZvcndhcmQgcGFzcyBzaXplcyBpdHMgYnVmZmVycyBmcm9tIG5h Xywgbm9fCisrLy8gICAgICAgICAgICAgIGFuZCBuc18gd2hpbGUgdGhlIGdhdGUgd2VpZ2h0IG1h dHJpY2VzIGRyaXZlIHRoZWlyIG93bgorKy8vICAgICAgICAgICAgICBkaW1lbnNpb25zLCBzbyBh IGNyYWZ0ZWQgLnRyYWluZWRkYXRhIHBlcmZvcm1zIGhlYXAKKysvLyAgICAgICAgICAgICAgb3V0 LW9mLWJvdW5kcyB3cml0ZXMvcmVhZHMgZHVyaW5nIHRoZSBmaXJzdAorKy8vICAgICAgICAgICAg ICByZWNvZ25pdGlvbiBzdGVwIChlLmcuIFdyaXRlVGltZVN0ZXBQYXJ0IHdyaXRpbmcgbnNfCisr Ly8gICAgICAgICAgICAgIGZsb2F0cyBpbnRvIGEgc291cmNlXyBidWZmZXIgc2l6ZWQgZnJvbSBu YV8pLgorKy8vCisrLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7CisrLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKy8vIFlvdSBtYXkgb2J0YWluIGEg Y29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNl cy9MSUNFTlNFLTIuMAorKy8vCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysjaW5jbHVkZSAiaW5jbHVk ZV9ndW5pdC5oIgorKworKyNpbmNsdWRlICJuZXR3b3JrLmgiIC8vIGZvciBOZXR3b3JrLCBOZXR3 b3JrVHlwZQorKyNpbmNsdWRlICJuZXR3b3JraW8uaCIKKysjaW5jbHVkZSAibmV0d29ya3NjcmF0 Y2guaCIKKysjaW5jbHVkZSAic2VyaWFsaXMuaCIgLy8gZm9yIFRGaWxlCisrI2luY2x1ZGUgInN0 cmlkZW1hcC5oIgorKworKyNpbmNsdWRlIDxjc3RkaW50PgorKyNpbmNsdWRlIDx1dGlsaXR5Pgor KyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNlIHRlc3NlcmFjdCB7CisrbmFtZXNwYWNl IHsKKysKKysvLyBBcHBlbmRzIHJhdyBsaXR0bGUtZW5kaWFuIHZhbHVlcyB0byBhIGJ5dGUgYnVm ZmVyLgorK2NsYXNzIEJ5dGVXcml0ZXIgeworK3B1YmxpYzoKKysgIHZvaWQgUHV0VTgodWludDMy X3QgdikgeyBkYXRhXy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4odiAmIDB4RkYpKTsgfQor KyAgdm9pZCBQdXRVMzIodWludDMyX3QgdikgeworKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 ICsraSkgeworKyAgICAgIGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigodiA+PiAo OCAqIGkpKSAmIDB4RkYpKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBQdXRTMzIoaW50MzJfdCB2 KSB7IFB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odikpOyB9CisrICBjb25zdCBzdGQ6OnZl Y3RvcjxjaGFyPiAmZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9CisrCisrcHJpdmF0ZToK KysgIHN0ZDo6dmVjdG9yPGNoYXI+IGRhdGFfOworK307CisrCisrdm9pZCBQdXREb3VibGVMRShC eXRlV3JpdGVyICp3LCBkb3VibGUgZCkgeworKyAgdW5pb24geworKyAgICBkb3VibGUgZDsKKysg ICAgdWludDY0X3QgdTsKKysgIH0gY29udjsKKysgIGNvbnYuZCA9IGQ7CisrICB3LT5QdXRVMzIo c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbnYudSAmIDB4RkZGRkZGRkYpKTsKKysgIHctPlB1dFUz MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29udi51ID4+IDMyKSk7CisrfQorKworKy8vIEEgc2Vy aWFsaXplZCBmbG9hdC1tb2RlIFdlaWdodE1hdHJpeCB3aXRoIHRoZSBnaXZlbiBkaW1lbnNpb25z LAorKy8vIGFsbCB3ZWlnaHQgZGF0YSB6ZXJvZWQuCisrdm9pZCBQdXRHYXRlTWF0cml4KEJ5dGVX cml0ZXIgKncsIGludDMyX3QgZGltMSwgaW50MzJfdCBkaW0yKSB7CisrICB3LT5QdXRVOCgxMjgp OyAvLyBtb2RlOiBrRG91YmxlRmxhZywgZmxvYXQgbW9kZQorKyAgdy0+UHV0UzMyKGRpbTEpOwor KyAgdy0+UHV0UzMyKGRpbTIpOworKyAgUHV0RG91YmxlTEUodywgMC4wKTsgLy8gZW1wdHlfIGNl bGwKKysgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGRpbTEgKiBkaW0yOyArK2kpIHsKKysgICAg UHV0RG91YmxlTEUodywgMC4wKTsKKysgIH0KKyt9CisrCisrLy8gQSBzZXJpYWxpemVkIDEtRCBO VF9MU1RNIG5ldHdvcms6IGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuaS9ubywgbmFfLAorKy8vIHRo ZW4gdGhlIGZvdXIgZ2F0ZXMgQ0ksIEdJLCBHRjEsIEdPIChHRlMgaXMgbm90IHNlcmlhbGl6ZWQg Zm9yIDEtRCkuCisrc3RkOjp2ZWN0b3I8Y2hhcj4gTWFrZUxzdG1OZXR3b3JrKGludCBuaSwgaW50 IG5vLCBpbnQzMl90IG5hLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBpbnQzMl90IGdhdGVfZGltMVs0XSwgY29uc3QgaW50MzJfdCBnYXRlX2RpbTJbNF0pIHsKKysg IEJ5dGVXcml0ZXIgdzsKKysgIHcuUHV0VTgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KE5UX0xTVE0p KTsKKysgIHcuUHV0VTgoMCk7IC8vIHRyYWluaW5nOiBUU19ESVNBQkxFRAorKyAgdy5QdXRVOCgw KTsgLy8gbmVlZHNfdG9fYmFja3Byb3AKKysgIHcuUHV0VTMyKDApOyAvLyBuZXR3b3JrX2ZsYWdz CisrICB3LlB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4obmkpKTsKKysgIHcuUHV0VTMyKHN0 YXRpY19jYXN0PHVpbnQzMl90PihubykpOworKyAgdy5QdXRVMzIoMCk7IC8vIG51bV93ZWlnaHRz CisrICB3LlB1dFUzMigwKTsgLy8gbmFtZSAoZW1wdHkgc3RyaW5nKQorKyAgdy5QdXRTMzIobmEp OworKyAgZm9yIChpbnQgZyA9IDA7IGcgPCA0OyArK2cpIHsKKysgICAgUHV0R2F0ZU1hdHJpeCgm dywgZ2F0ZV9kaW0xW2ddLCBnYXRlX2RpbTJbZ10pOworKyAgfQorKyAgcmV0dXJuIHcuZGF0YSgp OworK30KKysKKysvLyBCdWlsZHMgdGhlIGlucHV0IGEgc3RhbmRhbG9uZSBMU1RNIGxheWVyIHdv dWxkIHJlY2VpdmU6IG9uZSByb3cgb2YKKysvLyB0aGUgZ2l2ZW4gd2lkdGggd2l0aCBuaSBmZWF0 dXJlcy4KKytOZXR3b3JrSU8gTWFrZUlucHV0KGludCBuaSwgaW50IHdpZHRoKSB7CisrICBTdHJp ZGVNYXAgc3RyaWRlX21hcDsKKysgIHN0cmlkZV9tYXAuU2V0U3RyaWRlKHt7MSwgd2lkdGh9fSk7 CisrICBOZXR3b3JrSU8gaW5wdXQ7CisrICBpbnB1dC5SZXNpemVUb01hcChmYWxzZSwgc3RyaWRl X21hcCwgbmkpOworKyAgcmV0dXJuIGlucHV0OworK30KKysKKysvLyBSdW5zIEZvcndhcmQgb24g dGhlIGxvYWRlZCBuZXR3b3JrOyBvbiB1bnBhdGNoZWQgY29kZSB0aGUgb3V0LW9mLQorKy8vIGJv dW5kcyBhY2Nlc3MgdGhpcyByZWdyZXNzaW9uIHRlc3QgZ3VhcmRzIGFnYWluc3QgZmlyZXMgaGVy ZS4KKyt2b2lkIFJ1bkZvcndhcmQoTmV0d29yayAqbmV0LCBpbnQgbmksIGludCB3aWR0aCkgewor KyAgTmV0d29ya0lPIGlucHV0ID0gTWFrZUlucHV0KG5pLCB3aWR0aCk7CisrICBOZXR3b3JrU2Ny YXRjaCBzY3JhdGNoOworKyAgTmV0d29ya0lPIG91dHB1dDsKKysgIG5ldC0+Rm9yd2FyZChmYWxz ZSwgaW5wdXQsIG51bGxwdHIsICZzY3JhdGNoLCAmb3V0cHV0KTsKKysgIGRlbGV0ZSBuZXQ7Cisr fQorKworKy8vIG5hXyBtdXN0IGVxdWFsIG5pXyArIG5mXyArIG5zXyBmb3IgYSAxLUQgTFNUTTsg aGVyZSBuYV89MiBidXQgdGhlCisrLy8gQ0kgbWF0cml4IG1ha2VzIG5zXz02NCwgc28gdGhlIGxh eWVyIG11c3QgYmUgcmVqZWN0ZWQuIE9uIHVucGF0Y2hlZAorKy8vIGNvZGUgRm9yd2FyZCB3cml0 ZXMgNjQgZmxvYXRzIGF0IG9mZnNldCBuaV89MSBpbnRvIGEgc291cmNlXyBidWZmZXIKKysvLyBz aXplZCBmb3IgbmFfPTIgKGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSkuCisrVEVTVChMc3RtTGF5 ZXJUZXN0LCBSZWplY3RzSW5jb25zaXN0ZW50TmEpIHsKKysgIGNvbnN0IGludDMyX3QgZGltMVs0 XSA9IHs2NCwgNjQsIDY0LCA2NH07CisrICBjb25zdCBpbnQzMl90IGRpbTJbNF0gPSB7MywgMywg MywgM307CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VMc3RtTmV0d29yaygxLCAx LCAyLCBkaW0xLCBkaW0yKTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3Blbihi eXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgTmV0d29yayAqbmV0ID0gTmV0d29yazo6 Q3JlYXRlRnJvbUZpbGUoJmZwKTsKKysgIGlmIChuZXQgPT0gbnVsbHB0cikgeworKyAgICByZXR1 cm47IC8vIEZpeGVkOiB0aGUgaW5jb25zaXN0ZW50IGxheWVyIGlzIHJlamVjdGVkIGF0IGxvYWQu CisrICB9CisrICBSdW5Gb3J3YXJkKG5ldCwgMSwgMik7CisrICBGQUlMKCkgPDwgImNyYWZ0ZWQg TFNUTSBsYXllciB3aXRoIGluY29uc2lzdGVudCBuYV8gd2FzIGFjY2VwdGVkIjsKKyt9CisrCisr Ly8gQWxsIGdhdGUgbWF0cmljZXMgbXVzdCBoYXZlIGRpbTEgPT0gbnNfOyBoZXJlIHRoZSBHSSBt YXRyaXggaGFzCisrLy8gZGltMT05IHdoaWxlIG5zXz01LiBPbiB1bnBhdGNoZWQgY29kZSB0aGUg R0kgZ2F0ZSBkb3QgcHJvZHVjdCB3cml0ZXMKKysvLyA5IHJlc3VsdHMgaW50byBhIHRlbXAgbGlu ZSBzaXplZCBmb3IgNSAoaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlKS4KKytURVNUKExzdG1MYXll clRlc3QsIFJlamVjdHNHYXRlRGltMU1pc21hdGNoKSB7CisrICBjb25zdCBpbnQzMl90IGRpbTFb NF0gPSB7NSwgOSwgNSwgNX07CisrICBjb25zdCBpbnQzMl90IGRpbTJbNF0gPSB7NywgNywgNywg N307CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VMc3RtTmV0d29yaygxLCA1LCA2 LCBkaW0xLCBkaW0yKTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3BlbihieXRl cy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgTmV0d29yayAqbmV0ID0gTmV0d29yazo6Q3Jl YXRlRnJvbUZpbGUoJmZwKTsKKysgIGlmIChuZXQgPT0gbnVsbHB0cikgeworKyAgICByZXR1cm47 IC8vIEZpeGVkOiB0aGUgaW5jb25zaXN0ZW50IGxheWVyIGlzIHJlamVjdGVkIGF0IGxvYWQuCisr ICB9CisrICBSdW5Gb3J3YXJkKG5ldCwgMSwgMik7CisrICBGQUlMKCkgPDwgImNyYWZ0ZWQgTFNU TSBsYXllciB3aXRoIGluY29uc2lzdGVudCBnYXRlIGRpbTEgd2FzIGFjY2VwdGVkIjsKKyt9Cisr CisrLy8gQWxsIGdhdGUgbWF0cmljZXMgbXVzdCBoYXZlIGRpbTIgPT0gbmFfICsgMTsgaGVyZSB0 aGUgR0kgbWF0cml4IGhhcworKy8vIGRpbTI9OSB3aGlsZSBuYV89Ni4gT24gdW5wYXRjaGVkIGNv ZGUgdGhlIEdJIGdhdGUgZG90IHByb2R1Y3QgcmVhZHMKKysvLyA4IGlucHV0cyBmcm9tIGEgYnVm ZmVyIHNpemVkIGZvciA2IChoZWFwIG91dC1vZi1ib3VuZHMgcmVhZCkuCisrVEVTVChMc3RtTGF5 ZXJUZXN0LCBSZWplY3RzR2F0ZURpbTJNaXNtYXRjaCkgeworKyAgY29uc3QgaW50MzJfdCBkaW0x WzRdID0gezUsIDUsIDUsIDV9OworKyAgY29uc3QgaW50MzJfdCBkaW0yWzRdID0gezcsIDksIDcs IDd9OworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXMgPSBNYWtlTHN0bU5ldHdvcmsoMSwgNSwg NiwgZGltMSwgZGltMik7CisrICBURmlsZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0 ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKKysgIE5ldHdvcmsgKm5ldCA9IE5ldHdvcms6OkNy ZWF0ZUZyb21GaWxlKCZmcCk7CisrICBpZiAobmV0ID09IG51bGxwdHIpIHsKKysgICAgcmV0dXJu OyAvLyBGaXhlZDogdGhlIGluY29uc2lzdGVudCBsYXllciBpcyByZWplY3RlZCBhdCBsb2FkLgor KyAgfQorKyAgUnVuRm9yd2FyZChuZXQsIDEsIDIpOworKyAgRkFJTCgpIDw8ICJjcmFmdGVkIExT VE0gbGF5ZXIgd2l0aCBpbmNvbnNpc3RlbnQgZ2F0ZSBkaW0yIHdhcyBhY2NlcHRlZCI7CisrfQor KworKy8vIEEgZnVsbHkgY29uc2lzdGVudCAxLUQgTFNUTSBsYXllciBtdXN0IHN0aWxsIGJlIGFj Y2VwdGVkIGFuZCB1c2FibGUuCisrVEVTVChMc3RtTGF5ZXJUZXN0LCBBY2NlcHRzQ29uc2lzdGVu dExheWVyKSB7CisrICBjb25zdCBpbnQzMl90IGRpbTFbNF0gPSB7NSwgNSwgNSwgNX07CisrICBj b25zdCBpbnQzMl90IGRpbTJbNF0gPSB7NywgNywgNywgN307CisrICBzdGQ6OnZlY3RvcjxjaGFy PiBieXRlcyA9IE1ha2VMc3RtTmV0d29yaygxLCA1LCA2LCBkaW0xLCBkaW0yKTsKKysgIFRGaWxl IGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3BlbihieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkp OworKyAgTmV0d29yayAqbmV0ID0gTmV0d29yazo6Q3JlYXRlRnJvbUZpbGUoJmZwKTsKKysgIEFT U0VSVF9ORShuZXQsIG51bGxwdHIpOworKyAgUnVuRm9yd2FyZChuZXQsIDEsIDIpOworK30KKysK Kyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFtZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAtLWdpdCBh L2M5NGE1NTMyZWUwNGRiNWE0OTE5NTQyODMyZmQ5NGNhZWU1ZWE1OGYucGF0Y2ggYi9jOTRhNTUz MmVlMDRkYjVhNDkxOTU0MjgzMmZkOTRjYWVlNWVhNThmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmQ2MWUzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9jOTRhNTUzMmVl MDRkYjVhNDkxOTU0MjgzMmZkOTRjYWVlNWVhNThmLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitk aWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFtIHRl c3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZp bGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4yODUyMDQ2NjcgKzAyMDAKKysrKyB0ZXNzZXJhY3Qt NS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuMjkxMzA0OTg0ICswMjAw CitAQCAtMTIwMyw2ICsxMjAzLDcgQEAgZW5kaWYgIyAhRElTQUJMRURfTEVHQUNZX0VOR0lORQor IGNoZWNrX1BST0dSQU1TICs9IHByb2dyZXNzX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSBxcnNl cXVlbmNlX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSByZWNvZGViZWFtX3Rlc3QKKytjaGVja19Q Uk9HUkFNUyArPSByZWNvZGVyX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSByZWN0X3Rlc3QKKyBj aGVja19QUk9HUkFNUyArPSByZXN1bHRpdGVyYXRvcl90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0g c2NhbnV0aWxzX3Rlc3QKK0BAIC0xNDM5LDYgKzE0NDAsMTAgQEAgcmVjb2RlYmVhbV90ZXN0X1NP VVJDRVMgPSB1bml0dGVzdC9yZWNvZAorIHJlY29kZWJlYW1fdGVzdF9DUFBGTEFHUyA9ICQodW5p dHRlc3RfQ1BQRkxBR1MpCisgcmVjb2RlYmVhbV90ZXN0X0xEQUREID0gJChUUkFJTklOR19MSUJT KSAkKElDVV9JMThOX0xJQlMpICQoSUNVX1VDX0xJQlMpCisgCisrcmVjb2Rlcl90ZXN0X1NPVVJD RVMgPSB1bml0dGVzdC9yZWNvZGVyX3Rlc3QuY2MKKytyZWNvZGVyX3Rlc3RfQ1BQRkxBR1MgPSAk KHVuaXR0ZXN0X0NQUEZMQUdTKQorK3JlY29kZXJfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQor KworIHJlY3RfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvcmVjdF90ZXN0LmNjCisgcmVjdF90ZXN0 X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyByZWN0X3Rlc3RfTERBREQgPSAkKFRF U1NfTElCUykKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3Jj L2NjdXRpbC91bmljaGFyY29tcHJlc3MuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjdXRp bC91bmljaGFyY29tcHJlc3MuY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwvdW5p Y2hhcmNvbXByZXNzLmNwcAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysr IHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjdXRpbC91bmljaGFyY29tcHJlc3MuY3BwCTIwMjYt MDktMjEgMTA6Mjg6MTAuMjkxODg5OTg4ICswMjAwCitAQCAtNDAwLDYgKzQwMCw3IEBAIHZvaWQg VW5pY2hhckNvbXByZXNzOjpTZXR1cERlY29kZXIoKSB7CisgICBmb3IgKHVuc2lnbmVkIGMgPSAw OyBjIDwgZW5jb2Rlcl8uc2l6ZSgpOyArK2MpIHsKKyAgICAgY29uc3QgUmVjb2RlZENoYXJJRCAm Y29kZSA9IGVuY29kZXJfW2NdOworICAgICBkZWNvZGVyX1tjb2RlXSA9IGM7CisrICAgIEFTU0VS VF9IT1NUKGNvZGUoMCkgPj0gMCAmJiBjb2RlKDApIDwgY29kZV9yYW5nZV8pOworICAgICBpc192 YWxpZF9zdGFydF9bY29kZSgwKV0gPSB0cnVlOworICAgICBSZWNvZGVkQ2hhcklEIHByZWZpeCA9 IGNvZGU7CisgICAgIHVpbnQzMl90IGxlbiA9IGNvZGUubGVuZ3RoKCk7CitkaWZmIC1ydXBOIC0t bm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwvdW5pY2hhcmNvbXByZXNz LmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGlsL3VuaWNoYXJjb21wcmVzcy5oCistLS0g dGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwvdW5pY2hhcmNvbXByZXNzLmgJMjAyNi0wNy0yNCAy MDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0 aWwvdW5pY2hhcmNvbXByZXNzLmgJMjAyNi0wOS0yMSAxMDoyODoxMC4yOTIyMTI0NzggKzAyMDAK K0BAIC04NCw3ICs4NCwxNyBAQCBwdWJsaWM6CisgICAgIGlmIChsZW5ndGhfID4ga01heENvZGVM ZW4pIHsKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKy0gICAgcmV0dXJuIGZwLT5EZVNl cmlhbGl6ZSgmY29kZV9bMF0sIGxlbmd0aF8pOworKyAgICBpZiAoIWZwLT5EZVNlcmlhbGl6ZSgm Y29kZV9bMF0sIGxlbmd0aF8pKSB7CisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg IC8vIENvZGUgdmFsdWVzIGluZGV4IGFycmF5cyBzaXplZCBmcm9tIHRoZSBtYXhpbXVtIGNvZGU7 IHJlamVjdCB2YWx1ZXMKKysgICAgLy8gdGhhdCBhcmUgb3V0IG9mIHRoZSBzYW5lIHJhbmdlIGZv ciBhIHJlY29kZWQgYWxwaGFiZXQuCisrICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5n dGhfOyArK2kpIHsKKysgICAgICBpZiAoY29kZV9baV0gPCAwIHx8IGNvZGVfW2ldID49IHN0YXRp Y19jYXN0PGludDMyX3Q+KFVJTlQxNl9NQVgpKSB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiB0cnVlOworICAgfQorICAgYm9vbCBvcGVyYXRv cj09KGNvbnN0IFJlY29kZWRDaGFySUQgJm90aGVyKSBjb25zdCB7CisgICAgIGlmIChsZW5ndGhf ICE9IG90aGVyLmxlbmd0aF8pIHsKK0BAIC0xOTAsNiArMjAwLDcgQEAgcHVibGljOgorICAgaW50 IERlY29kZVVuaWNoYXIoY29uc3QgUmVjb2RlZENoYXJJRCAmY29kZSkgY29uc3Q7CisgICAvLyBS ZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGNvZGUgaXMgYSB2YWxpZCBzdGFydCBvciBzaW5nbGUg Y29kZS4KKyAgIGJvb2wgSXNWYWxpZEZpcnN0Q29kZShpbnQgY29kZSkgY29uc3QgeworKyAgICBB U1NFUlRfSE9TVChjb2RlID49IDAgJiYgY29kZSA8IGNvZGVfcmFuZ2VfKTsKKyAgICAgcmV0dXJu IGlzX3ZhbGlkX3N0YXJ0X1tjb2RlXTsKKyAgIH0KKyAgIC8vIFJldHVybnMgYSBsaXN0IG9mIHZh bGlkIG5vbi1maW5hbCBuZXh0IGNvZGVzIGZvciBhIGdpdmVuIHByZWZpeCBjb2RlLAorZGlmZiAt cnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9yZWNvZGVyX3Rl c3QuY2MgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC9yZWNvZGVyX3Rlc3QuY2MKKy0tLSB0 ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvcmVjb2Rlcl90ZXN0LmNjCTE5NzAtMDEtMDEgMDE6MDA6 MDAuMDAwMDAwMDAwICswMTAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC9yZWNv ZGVyX3Rlc3QuY2MJMjAyNi0wOS0yMSAxMDoyODoxMC4yOTI0OTIyNDIgKzAyMDAKK0BAIC0wLDAg KzEsOTEgQEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAgICAgICByZWNvZGVyX3Rlc3Qu Y2MKKysvLyBEZXNjcmlwdGlvbjogVGVzdHMgdGhhdCBhIFVuaWNoYXJDb21wcmVzcyAoTFNUTSBy ZWNvZGVyKSB3aXRoIGNvZGUKKysvLyAgICAgICAgICAgICAgdmFsdWVzIG91dHNpZGUgdGhlIHNh bmUgcmFuZ2UgaXMgcmVqZWN0ZWQgYXQgbG9hZC4KKysvLyAgICAgICAgICAgICAgTmVnYXRpdmUg Y29kZSB2YWx1ZXMgbGVhdmUgY29kZV9yYW5nZV8gYXQgemVybywgc28KKysvLyAgICAgICAgICAg ICAgU2V0dXBEZWNvZGVyIHdyaXRlcyBpc192YWxpZF9zdGFydF9bY29kZSgwKV0gb3V0IG9mCisr Ly8gICAgICAgICAgICAgIGJvdW5kcyBvbiBhIHNpemUtMCB2ZWN0b3I8Ym9vbD47IGh1Z2UgY29k ZSB2YWx1ZXMgd3JhcAorKy8vICAgICAgICAgICAgICBjb2RlX3JhbmdlXyBhbmQgbWFrZSByZXNp emUoKSB0aHJvdy4KKysvLworKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9i dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcv bGljZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrI2luY2x1ZGUg ImluY2x1ZGVfZ3VuaXQuaCIKKysKKysjaW5jbHVkZSAic2VyaWFsaXMuaCIgLy8gZm9yIFRGaWxl CisrI2luY2x1ZGUgInVuaWNoYXJjb21wcmVzcy5oIgorKworKyNpbmNsdWRlIDxjc3RkaW50Pgor KyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNlIHRlc3NlcmFjdCB7CisrbmFtZXNwYWNl IHsKKysKKysvLyBBcHBlbmRzIHJhdyBsaXR0bGUtZW5kaWFuIHZhbHVlcyB0byBhIGJ5dGUgYnVm ZmVyLgorK2NsYXNzIEJ5dGVXcml0ZXIgeworK3B1YmxpYzoKKysgIHZvaWQgUHV0VTgodWludDMy X3QgdikgeyBkYXRhXy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4odiAmIDB4RkYpKTsgfQor KyAgdm9pZCBQdXRVMzIodWludDMyX3QgdikgeworKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 ICsraSkgeworKyAgICAgIGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPigodiA+PiAo OCAqIGkpKSAmIDB4RkYpKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBQdXRTMzIoaW50MzJfdCB2 KSB7IFB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odikpOyB9CisrICBjb25zdCBzdGQ6OnZl Y3RvcjxjaGFyPiAmZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9CisrCisrcHJpdmF0ZToK KysgIHN0ZDo6dmVjdG9yPGNoYXI+IGRhdGFfOworK307CisrCisrLy8gQSBzZXJpYWxpemVkIFVu aWNoYXJDb21wcmVzcyB3aXRoIG9uZSBsZW5ndGgtMSBSZWNvZGVkQ2hhcklEIHBlcgorKy8vIGdp dmVuIGNvZGUgdmFsdWUgKHNlbGYtbm9ybWFsaXppbmcpLgorK3N0ZDo6dmVjdG9yPGNoYXI+IE1h a2VSZWNvZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPGludDMyX3Q+ICZjb2RlcykgeworKyAgQnl0ZVdy aXRlciB3OworKyAgdy5QdXRVMzIoY29kZXMuc2l6ZSgpKTsKKysgIGZvciAoaW50MzJfdCBjb2Rl IDogY29kZXMpIHsKKysgICAgdy5QdXRVOCgxKTsgLy8gc2VsZl9ub3JtYWxpemVkXworKyAgICB3 LlB1dFUzMigxKTsgLy8gbGVuZ3RoXworKyAgICB3LlB1dFMzMihjb2RlKTsgLy8gY29kZV9bMF0K KysgIH0KKysgIHJldHVybiB3LmRhdGEoKTsKKyt9CisrCisrLy8gQSByZWNvZGVyIGNvZGUgb2Yg LTEga2VlcHMgY29kZV9yYW5nZV8gYXQgMCwgc28gb24gdW5wYXRjaGVkIGNvZGUKKysvLyBTZXR1 cERlY29kZXIgcGVyZm9ybXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpbnRvIHRoZSBzaXplLTAK KysvLyBpc192YWxpZF9zdGFydF8gdmVjdG9yPGJvb2w+LgorK1RFU1QoUmVjb2RlclRlc3QsIFJl amVjdHNOZWdhdGl2ZUNvZGUpIHsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFrZVJl Y29kZXIoey0xfSk7CisrICBURmlsZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMu ZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKKysgIFVuaWNoYXJDb21wcmVzcyByZWNvZGVyOworKyAg RVhQRUNUX0ZBTFNFKHJlY29kZXIuRGVTZXJpYWxpemUoJmZwKSk7CisrfQorKworKy8vIEEgcmVj b2RlciBjb2RlIG9mIElOVDMyX01BWCB3cmFwcyBjb2RlX3JhbmdlXyB0byBhIG5lZ2F0aXZlIHZh bHVlLAorKy8vIHNvIG9uIHVucGF0Y2hlZCBjb2RlIFNldHVwRGVjb2RlcidzIHJlc2l6ZSgpIHRo cm93cy4KKytURVNUKFJlY29kZXJUZXN0LCBSZWplY3RzSHVnZUNvZGUpIHsKKysgIHN0ZDo6dmVj dG9yPGNoYXI+IGJ5dGVzID0gTWFrZVJlY29kZXIoe0lOVDMyX01BWH0pOworKyAgVEZpbGUgZnA7 CisrICBBU1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7Cisr ICBVbmljaGFyQ29tcHJlc3MgcmVjb2RlcjsKKysgIEVYUEVDVF9GQUxTRShyZWNvZGVyLkRlU2Vy aWFsaXplKCZmcCkpOworK30KKysKKysvLyBBIHZhbGlkIHJlY29kZXIgbXVzdCBzdGlsbCBiZSBh Y2NlcHRlZCBhbmQgdXNhYmxlLgorK1RFU1QoUmVjb2RlclRlc3QsIEFjY2VwdHNWYWxpZENvZGVz KSB7CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VSZWNvZGVyKHswLCAxfSk7Cisr ICBURmlsZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5z aXplKCkpKTsKKysgIFVuaWNoYXJDb21wcmVzcyByZWNvZGVyOworKyAgQVNTRVJUX1RSVUUocmVj b2Rlci5EZVNlcmlhbGl6ZSgmZnApKTsKKysgIEVYUEVDVF9FUShyZWNvZGVyLmNvZGVfcmFuZ2Uo KSwgMik7CisrICBFWFBFQ1RfVFJVRShyZWNvZGVyLklzVmFsaWRGaXJzdENvZGUoMCkpOworKyAg RVhQRUNUX1RSVUUocmVjb2Rlci5Jc1ZhbGlkRmlyc3RDb2RlKDEpKTsKKyt9CisrCisrfSAvLyBu YW1lc3BhY2UKKyt9IC8vIG5hbWVzcGFjZSB0ZXNzZXJhY3QKCmRpZmYgLS1naXQgYS90ZXNzZXJh Y3Quc3BlYyBiL3Rlc3NlcmFjdC5zcGVjCmluZGV4IGNkNDhkMWQuLjFjODNiZmEgMTAwNjQ0Ci0t LSBhL3Rlc3NlcmFjdC5zcGVjCisrKyBiL3Rlc3NlcmFjdC5zcGVjCkBAIC04LDcgKzgsNyBAQAog CiBOYW1lOiAgICAgICAgICB0ZXNzZXJhY3QKIFZlcnNpb246ICAgICAgIDUuNS4zCi1SZWxlYXNl OiAgICAgICAxJXs/ZGlzdH0KK1JlbGVhc2U6ICAgICAgIDIlez9kaXN0fQogU3VtbWFyeTogICAg ICAgUmF3IE9DUiBFbmdpbmUKIAogTGljZW5zZTogICAgICAgQXBhY2hlLTIuMApAQCAtMTgsNiAr MTgsMjIgQEAgU291cmNlMDogICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3Iv dGVzc2VyYWN0L2FyY2hpdmUvJXt2ZXJzaW9ufSV7P3AKICMgRml4IGxpYnJhcnkgbmFtZSBjYXNl CiAjIEJ1aWxkIHRyYWluaW5nIGxpYnMgc3RhdGljYWxseQogUGF0Y2gxOiAgICAgICAgdGVzc2Vy YWN0X2NtYWtlLnBhdGNoCisjIEJhY2twb3J0IGZpeCBmb3IgQ1ZFLTIwMjYtODgwNDcKK1BhdGNo MjogICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXNzZXJhY3Qtb2NyL3Rlc3NlcmFjdC9jb21t aXQvMWJkYTUwNzliMWM4YTdlMjVmNTIzNDg2ODM3NDI2OTAzZDI5Y2U4NC5wYXRjaAorIyBCYWNr cG9ydCBmaXggZm9yIENWRS0yMDI2LTg4MDQ4CitQYXRjaDM6ICAgICAgICBodHRwczovL2dpdGh1 Yi5jb20vdGVzc2VyYWN0LW9jci90ZXNzZXJhY3QvY29tbWl0LzEwM2RjMTM0ZWIzNjQxMWRkYzY4 MzNlYzIwYWEyYzc2Nzk1YmQwZmYucGF0Y2gKKyMgQmFja3BvcnQgZml4IGZvciBDVkUtMjAyNi04 ODA0OQorUGF0Y2g0OiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3IvdGVz c2VyYWN0L2NvbW1pdC9iNDk0YWMxODkyNWY5ZDlhZmY5ZWY1ODE1NDc1ZGU5OTQzYWIxOWJmLnBh dGNoCisjIEJhY2twb3J0IGZpeCBmb3IgQ1ZFLTIwMjYtODgwNTAKK1BhdGNoNTogICAgICAgIGh0 dHBzOi8vZ2l0aHViLmNvbS90ZXNzZXJhY3Qtb2NyL3Rlc3NlcmFjdC9jb21taXQvYzk0YTU1MzJl ZTA0ZGI1YTQ5MTk1NDI4MzJmZDk0Y2FlZTVlYTU4Zi5wYXRjaAorIyBCYWNrcG9ydCBmaXggZm9y IENWRS0yMDI2LTg4MDUxCitQYXRjaDY6ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVzc2Vy YWN0LW9jci90ZXNzZXJhY3QvY29tbWl0LzU2ZTA5Y2ExMmU3NTE2MjNmZTc5NmNlMTU1NGNlNzA0 YmZmZDJlZjAucGF0Y2gKKyMgQmFja3BvcnQgZml4IGZvciBDVkUtMjAyNi04ODA1MgorUGF0Y2g3 OiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3IvdGVzc2VyYWN0L2NvbW1p dC8yZDA0ZDY0MGRiMmU4YzdlM2JhYjIzNjlkNTk5MzQzYjVhOGI4NDQzLnBhdGNoCisjIEJhY2tw b3J0IGZpeCBmb3IgQ1ZFLTIwMjYtODgwNTMKK1BhdGNoODogICAgICAgIGh0dHBzOi8vZ2l0aHVi LmNvbS90ZXNzZXJhY3Qtb2NyL3Rlc3NlcmFjdC9jb21taXQvOGIwNTc0NjgwZjNiMjJmMjQ2YWRl NmE0YzhlMzAyOTEwNDI1NWM2My5wYXRjaAorIyBCYWNrcG9ydCBmaXggZm9yIENWRS0yMDI2LTg4 MDU0CitQYXRjaDk6ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVzc2VyYWN0LW9jci90ZXNz ZXJhY3QvY29tbWl0LzU1Mjc3MTIzNmIwZDgwY2JkYjBjN2RkODU2MTIwZmEyMWE0NjcyZTUucGF0 Y2gKIAogCiBCdWlsZFJlcXVpcmVzOiBjbWFrZQpAQCAtMjc1LDYgKzI5MSw5IEBAIGNwIC1hIGRv Yy8qLjUgJXtidWlsZHJvb3R9JXtfbWFuZGlyfS9tYW41LwogCiAKICVjaGFuZ2Vsb2cKKyogTW9u IFNlcCAyMSAyMDI2IFNhbmRybyBNYW5pIDxtYW5pc2FuZHJvQGdtYWlsLmNvbT4gLSA1LjUuMy0y CistIEJhY2twb3J0IGZpeGVzIGZvciBDVkUtMjAyNi17ODgwNDctODgwNTR9CisKICogV2VkIEp1 bCAyOSAyMDI2IFNhbmRybyBNYW5pIDxtYW5pc2FuZHJvQGdtYWlsLmNvbT4gLSA1LjUuMy0xCiAt IFVwZGF0ZSB0byA1LjUuMwogCgpkaWZmIC0tZ2l0IGEvdGVzc2VyYWN0X2NtYWtlLnBhdGNoIGIv dGVzc2VyYWN0X2NtYWtlLnBhdGNoCmluZGV4IDY0YTkxOTQuLjNlZjkzY2UgMTAwNjQ0Ci0tLSBh L3Rlc3NlcmFjdF9jbWFrZS5wYXRjaAorKysgYi90ZXNzZXJhY3RfY21ha2UucGF0Y2gKQEAgLTEs NiArMSw2IEBACi1kaWZmIC1ydXBOIHRlc3NlcmFjdC01LjUuMy9DTWFrZUxpc3RzLnR4dCB0ZXNz ZXJhY3QtNS41LjMtbmV3L0NNYWtlTGlzdHMudHh0CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVu Y2UgdGVzc2VyYWN0LTUuNS4zL0NNYWtlTGlzdHMudHh0IHRlc3NlcmFjdC01LjUuMy1uZXcvQ01h a2VMaXN0cy50eHQKIC0tLSB0ZXNzZXJhY3QtNS41LjMvQ01ha2VMaXN0cy50eHQJMjAyNi0wNy0y NCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L0NNYWtl TGlzdHMudHh0CTIwMjYtMDctMjkgMDk6NDY6MTkuNDcxNDU2NTgzICswMjAwCisrKysgdGVzc2Vy YWN0LTUuNS4zLW5ldy9DTWFrZUxpc3RzLnR4dAkyMDI2LTA5LTIxIDEwOjI4OjEwLjEwNjQzMDE2 NiArMDIwMAogQEAgLTM3OSw3ICszNzksNyBAQCBlbHNlaWYoVU5JWCkKICAgICAgc2V0KExJQl9w dGhyZWFkIHB0aHJlYWQpCiAgICBlbmRpZigpCkBAIC00Niw5ICs0Niw5IEBAIGRpZmYgLXJ1cE4g dGVzc2VyYWN0LTUuNS4zL0NNYWtlTGlzdHMudHh0IHRlc3NlcmFjdC01LjUuMy1uZXcvQ01ha2VM aXN0cy50eHQKICBlbmRpZigpCiAgCiAgIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWRpZmYgLXJ1 cE4gdGVzc2VyYWN0LTUuNS4zL3NyYy90cmFpbmluZy9DTWFrZUxpc3RzLnR4dCB0ZXNzZXJhY3Qt NS41LjMtbmV3L3NyYy90cmFpbmluZy9DTWFrZUxpc3RzLnR4dAorZGlmZiAtcnVwTiAtLW5vLWRl cmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvdHJhaW5pbmcvQ01ha2VMaXN0cy50eHQgdGVz c2VyYWN0LTUuNS4zLW5ldy9zcmMvdHJhaW5pbmcvQ01ha2VMaXN0cy50eHQKIC0tLSB0ZXNzZXJh Y3QtNS41LjMvc3JjL3RyYWluaW5nL0NNYWtlTGlzdHMudHh0CTIwMjYtMDctMjQgMjA6Mjc6MDIu MDAwMDAwMDAwICswMjAwCi0rKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvdHJhaW5pbmcvQ01h a2VMaXN0cy50eHQJMjAyNi0wNy0yOSAwOTo1Njo1Ni4xMzcwMjE3ODcgKzAyMDAKKysrKyB0ZXNz ZXJhY3QtNS41LjMtbmV3L3NyYy90cmFpbmluZy9DTWFrZUxpc3RzLnR4dAkyMDI2LTA5LTIxIDEw OjI4OjEwLjEwNjg0MDY1MCArMDIwMAogQEAgLTEwNyw3ICsxMDcsNyBAQCBpZihOT1QgRElTQUJM RURfTEVHQUNZX0VOR0lORSkKICAgICAgY29tbW9uL3RyYWluaW5nc2FtcGxlc2V0LmgpCiAgZW5k aWYoKQo=