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] rawhide: Backport fixes for CVE-2026-{88047-88054} Date: Mon, 21 Sep 2026 08:46:38 GMT Message-ID: <178998039824.1.7417959204380313727.rpms-tesseract-8f15530a402e@fedoraproject.org> List-ID: X-Git-Repo: rpms/tesseract X-Git-Branch: rawhide X-Git-Rev: 8f15530a402eca6406382064c9279d1b2f668a78 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvdGVzc2VyYWN0CkJy YW5jaCA6IHJhd2hpZGUKQ29tbWl0IDogOGYxNTUzMGE0MDJlY2E2NDA2MzgyMDY0YzkyNzlkMWIy ZjY2OGE3OApBdXRob3IgOiBTYW5kcm8gTWFuaSA8bWFuaXNhbmRyb0BnbWFpbC5jb20+CkRhdGUg ICA6IDIwMjYtMDktMjFUMTA6NDY6MjUrMDI6MDAKU3RhdHMgIDogKzIwMzQvLTUgaW4gMTAgZmls ZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL3Rlc3NlcmFj dC9jLzhmMTU1MzBhNDAyZWNhNjQwNjM4MjA2NGM5Mjc5ZDFiMmY2NjhhNzg/YnJhbmNoPXJhd2hp ZGUKCkxvZzoKQmFja3BvcnQgZml4ZXMgZm9yIENWRS0yMDI2LXs4ODA0Ny04ODA1NH0KCi0tLQpk aWZmIC0tZ2l0IGEvMTAzZGMxMzRlYjM2NDExZGRjNjgzM2VjMjBhYTJjNzY3OTViZDBmZi5wYXRj aCBiLzEwM2RjMTM0ZWIzNjQxMWRkYzY4MzNlYzIwYWEyYzc2Nzk1YmQwZmYucGF0Y2gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExYjJlYQotLS0gL2Rldi9udWxsCisrKyBi LzEwM2RjMTM0ZWIzNjQxMWRkYzY4MzNlYzIwYWEyYzc2Nzk1YmQwZmYucGF0Y2gKQEAgLTAsMCAr MSwxNzkgQEAKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvTWFr ZWZpbGUuYW0gdGVzc2VyYWN0LTUuNS4zLW5ldy9NYWtlZmlsZS5hbQorLS0tIHRlc3NlcmFjdC01 LjUuMy9NYWtlZmlsZS5hbQkyMDI2LTA5LTIxIDEwOjI4OjEwLjE5MjQ0ODc3MyArMDIwMAorKysr IHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4xOTc5 MDMzNjMgKzAyMDAKK0BAIC0xMTU4LDYgKzExNTgsNyBAQCBpZiAhRElTQUJMRURfTEVHQUNZX0VO R0lORQorIGNoZWNrX1BST0dSQU1TICs9IGVxdWF0aW9uZGV0ZWN0X3Rlc3QKKyBlbmRpZiAjICFE SVNBQkxFRF9MRUdBQ1lfRU5HSU5FCisgY2hlY2tfUFJPR1JBTVMgKz0gZmlsZWlvX3Rlc3QKKytj aGVja19QUk9HUkFNUyArPSBmdWxseWNvbm5lY3RlZF90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0g aGVhcF90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0gaW1hZ2VkYXRhX3Rlc3QKKyBpZiAhRElTQUJM RURfTEVHQUNZX0VOR0lORQorQEAgLTEyOTAsNiArMTI5MSwxMCBAQCBmaWxlaW9fdGVzdF9TT1VS Q0VTID0gdW5pdHRlc3QvZmlsZWlvX3RlCisgZmlsZWlvX3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0 ZXN0X0NQUEZMQUdTKQorIGZpbGVpb190ZXN0X0xEQUREID0gJChUUkFJTklOR19MSUJTKQorIAor K2Z1bGx5Y29ubmVjdGVkX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2Z1bGx5Y29ubmVjdGVkX3Rl c3QuY2MKKytmdWxseWNvbm5lY3RlZF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFH UykKKytmdWxseWNvbm5lY3RlZF90ZXN0X0xEQUREID0gJChURVNTX0xJQlMpCisrCisgaGVhcF90 ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9oZWFwX3Rlc3QuY2MKKyBoZWFwX3Rlc3RfQ1BQRkxBR1Mg PSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIGhlYXBfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQor ZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvbHN0bS9mdWxs eWNvbm5lY3RlZC5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvbHN0bS9mdWxseWNvbm5lY3Rl ZC5jcHAKKy0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2xzdG0vZnVsbHljb25uZWN0ZWQuY3BwCTIw MjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5l dy9zcmMvbHN0bS9mdWxseWNvbm5lY3RlZC5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC4xOTg1MTIz NzIgKzAyMDAKK0BAIC0xMjEsNyArMTIxLDE2IEBAIGJvb2wgRnVsbHlDb25uZWN0ZWQ6OlNlcmlh bGl6ZShURmlsZSAqZnAKKyAKKyAvLyBSZWFkcyBmcm9tIHRoZSBnaXZlbiBmaWxlLiBSZXR1cm5z IGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCisgYm9vbCBGdWxseUNvbm5lY3RlZDo6RGVTZXJpYWxp emUoVEZpbGUgKmZwKSB7CistICByZXR1cm4gd2VpZ2h0c18uRGVTZXJpYWxpemUoSXNUcmFpbmlu ZygpLCBmcCk7CisrICBpZiAoIXdlaWdodHNfLkRlU2VyaWFsaXplKElzVHJhaW5pbmcoKSwgZnAp KSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysgIC8vIFRoZSB3ZWlnaHQgbWF0cml4IG11 c3QgbWF0Y2ggdGhlIGRlY2xhcmVkIHNpemVzICh0aGUgc2Vjb25kIGRpbWVuc2lvbgorKyAgLy8g aW5jbHVkZXMgdGhlIGJpYXMgY29sdW1uKTsgb3RoZXJ3aXNlIEZvcndhcmQgd291bGQgcmVhZCBv ciB3cml0ZQorKyAgLy8gb3V0c2lkZSB0aGUgc2NyYXRjaCBidWZmZXJzIHNpemVkIGZyb20gbmlf IGFuZCBub18uCisrICBpZiAod2VpZ2h0c18uRGltMSgpICE9IG5vXyB8fCB3ZWlnaHRzXy5EaW0y KCkgIT0gbmlfICsgMSkgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrICByZXR1cm4gdHJ1 ZTsKKyB9CisgCisgLy8gUnVucyBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIGFjdGl2YXRpb25zIG9u IHRoZSBpbnB1dCBsaW5lLgorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01 LjUuMy9zcmMvbHN0bS93ZWlnaHRtYXRyaXguaCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9sc3Rt L3dlaWdodG1hdHJpeC5oCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3RtL3dlaWdodG1hdHJp eC5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy9zcmMvbHN0bS93ZWlnaHRtYXRyaXguaAkyMDI2LTA5LTIxIDEwOjI4OjEwLjE5ODgx OTA1NiArMDIwMAorQEAgLTEwNyw2ICsxMDcsMTMgQEAgcHVibGljOgorICAgaW50IE51bU91dHB1 dHMoKSBjb25zdCB7CisgICAgIHJldHVybiBpbnRfbW9kZV8gPyB3aV8uZGltMSgpIDogd2ZfLmRp bTEoKTsKKyAgIH0KKysgIC8vIFRoZSBkaW1lbnNpb25zIG9mIHRoZSBhY3RpdmUgd2VpZ2h0IG1h dHJpeCAod2lfIGluIGludCBtb2RlLCBlbHNlIHdmXykuCisrICBpbnQgRGltMSgpIGNvbnN0IHsK KysgICAgcmV0dXJuIGludF9tb2RlXyA/IHdpXy5kaW0xKCkgOiB3Zl8uZGltMSgpOworKyAgfQor KyAgaW50IERpbTIoKSBjb25zdCB7CisrICAgIHJldHVybiBpbnRfbW9kZV8gPyB3aV8uZGltMigp IDogd2ZfLmRpbTIoKTsKKysgIH0KKyAgIC8vIFByb3ZpZGVzIG9uZSBzZXQgb2Ygd2VpZ2h0cy4g T25seSB1c2VkIGJ5IHBlZXAgd2VpZ2h0IG1heHBvb2wuCisgICBjb25zdCBURmxvYXQgKkdldFdl aWdodHMoaW50IGluZGV4KSBjb25zdCB7CisgICAgIHJldHVybiB3Zl9baW5kZXhdOworZGlmZiAt cnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9mdWxseWNvbm5l Y3RlZF90ZXN0LmNjIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvZnVsbHljb25uZWN0ZWRf dGVzdC5jYworLS0tIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9mdWxseWNvbm5lY3RlZF90ZXN0 LmNjCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy91bml0dGVzdC9mdWxseWNvbm5lY3RlZF90ZXN0LmNjCTIwMjYtMDktMjEgMTA6Mjg6 MTAuMTk5MTk5MTQ4ICswMjAwCitAQCAtMCwwICsxLDExNSBAQAorKy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr Ly8gRmlsZTogICAgICAgIGZ1bGx5Y29ubmVjdGVkX3Rlc3QuY2MKKysvLyBEZXNjcmlwdGlvbjog VGVzdHMgdGhhdCBhIEZ1bGx5Q29ubmVjdGVkIChzb2Z0bWF4KSBuZXR3b3JrIGxheWVyIHdpdGgK KysvLyAgICAgICAgICAgICAgd2VpZ2h0LW1hdHJpeCBkaW1lbnNpb25zIHRoYXQgZG8gbm90IG1h dGNoIHRoZSBkZWNsYXJlZAorKy8vICAgICAgICAgICAgICBuaS9ubyBpcyByZWplY3RlZCBhdCBs b2FkLiBXaXRob3V0IHRoZSBjaGVjaywKKysvLyAgICAgICAgICAgICAgTWF0cml4RG90VmVjdG9y IHdyaXRlcyB3LmRpbTEoKSByZXN1bHRzIGludG8gYSBzY3JhdGNoCisrLy8gICAgICAgICAgICAg IGJ1ZmZlciBzaXplZCBmcm9tIG5vXyBhbmQgcmVhZHMgdy5kaW0yKCktMSBpbnB1dHMgZnJvbQor Ky8vICAgICAgICAgICAgICBhIGJ1ZmZlciBzaXplZCBmcm9tIG5pXyAoaGVhcCBvdXQtb2YtYm91 bmRzIHdyaXRlL3JlYWQpCisrLy8gICAgICAgICAgICAgIG9uIHRoZSBmaXJzdCByZWNvZ25pdGlv biBzdGVwLgorKy8vCisrLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisrLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKy8vIFlvdSBtYXkgb2J0YWlu IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl bnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysjaW5jbHVkZSAiaW5j bHVkZV9ndW5pdC5oIgorKworKyNpbmNsdWRlICJuZXR3b3JrLmgiIC8vIGZvciBOZXR3b3JrLCBO ZXR3b3JrVHlwZQorKyNpbmNsdWRlICJuZXR3b3JraW8uaCIKKysjaW5jbHVkZSAibmV0d29ya3Nj cmF0Y2guaCIKKysjaW5jbHVkZSAic2VyaWFsaXMuaCIgLy8gZm9yIFRGaWxlCisrCisrI2luY2x1 ZGUgPGNzdGRpbnQ+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysKKytuYW1lc3BhY2UgdGVzc2VyYWN0 IHsKKytuYW1lc3BhY2UgeworKworKy8vIEFwcGVuZHMgcmF3IGxpdHRsZS1lbmRpYW4gdmFsdWVz IHRvIGEgYnl0ZSBidWZmZXIuCisrY2xhc3MgQnl0ZVdyaXRlciB7CisrcHVibGljOgorKyAgdm9p ZCBQdXRVOCh1aW50MzJfdCB2KSB7IGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPih2 ICYgMHhGRikpOyB9CisrICB2b2lkIFB1dFUzMih1aW50MzJfdCB2KSB7CisrICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgKytpKSB7CisrICAgICAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0 PGNoYXI+KCh2ID4+ICg4ICogaSkpICYgMHhGRikpOworKyAgICB9CisrICB9CisrICB2b2lkIFB1 dFMzMihpbnQzMl90IHYpIHsgUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2KSk7IH0KKysg IGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+ICZkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0K KysKKytwcml2YXRlOgorKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gZGF0YV87CisrfTsKKysKKyt2b2lk IFB1dERvdWJsZUxFKEJ5dGVXcml0ZXIgKncsIGRvdWJsZSBkKSB7CisrICB1bmlvbiB7CisrICAg IGRvdWJsZSBkOworKyAgICB1aW50NjRfdCB1OworKyAgfSBjb252OworKyAgY29udi5kID0gZDsK KysgIHctPlB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29udi51ICYgMHhGRkZGRkZGRikp OworKyAgdy0+UHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb252LnUgPj4gMzIpKTsKKyt9 CisrCisrLy8gQnVpbGRzIGEgc2VyaWFsaXplZCBOVF9TT0ZUTUFYIG5ldHdvcms6IGhlYWRlciB3 aXRoIHRoZSBnaXZlbiBuaS9ubywKKysvLyB0aGVuIGEgZmxvYXQtbW9kZSBXZWlnaHRNYXRyaXgg d2l0aCB0aGUgZ2l2ZW4gKGNvcnJ1cHQpIGRpbWVuc2lvbnMuCisrLy8gVGhlIG1hdHJpeCBpcyBz dG9yZWQgYXMgZG91YmxlcyBvbiBkaXNrIChzZWUgV2VpZ2h0TWF0cml4OjpEZVNlcmlhbGl6ZSku Cisrc3RkOjp2ZWN0b3I8Y2hhcj4gTWFrZVNvZnRtYXhOZXR3b3JrKGludCBuaSwgaW50IG5vLCBp bnQzMl90IGRpbTEsIGludDMyX3QgZGltMikgeworKyAgQnl0ZVdyaXRlciB3OworKyAgdy5QdXRV OChzdGF0aWNfY2FzdDx1aW50MzJfdD4oTlRfU09GVE1BWCkpOworKyAgdy5QdXRVOCgwKTsgLy8g dHJhaW5pbmc6IFRTX0RJU0FCTEVECisrICB3LlB1dFU4KDApOyAvLyBuZWVkc190b19iYWNrcHJv cAorKyAgdy5QdXRVMzIoMCk7IC8vIG5ldHdvcmtfZmxhZ3MKKysgIHcuUHV0VTMyKHN0YXRpY19j YXN0PHVpbnQzMl90PihuaSkpOworKyAgdy5QdXRVMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG5v KSk7CisrICB3LlB1dFUzMigwKTsgLy8gbnVtX3dlaWdodHMgKG5vdCBjcm9zcy1jaGVja2VkLCBr ZXB0IGNvbnNpc3RlbnQgYW55d2F5KQorKyAgdy5QdXRVMzIoMCk7IC8vIG5hbWUgKGVtcHR5IHN0 cmluZykKKysgIC8vIFdlaWdodE1hdHJpeDo6RGVTZXJpYWxpemU6CisrICB3LlB1dFU4KDEyOCk7 IC8vIG1vZGU6IGtEb3VibGVGbGFnLCBmbG9hdCBtb2RlCisrICB3LlB1dFMzMihkaW0xKTsKKysg IHcuUHV0UzMyKGRpbTIpOworKyAgUHV0RG91YmxlTEUoJncsIDAuMCk7IC8vIGVtcHR5XyBjZWxs CisrICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBkaW0xICogZGltMjsgKytpKSB7CisrICAgIFB1 dERvdWJsZUxFKCZ3LCAwLjApOyAvLyB3ZWlnaHQgZGF0YQorKyAgfQorKyAgcmV0dXJuIHcuZGF0 YSgpOworK30KKysKKysvLyBBIEZ1bGx5Q29ubmVjdGVkIGxheWVyIHdob3NlIHdlaWdodCBtYXRy aXggZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkCisrLy8gc2l6ZXMgbXVzdCBiZSByZWplY3Rl ZCBieSBDcmVhdGVGcm9tRmlsZTsgb24gdW5wYXRjaGVkIGNvZGUgdGhlIHRlc3QKKysvLyByZWFj aGVzIEZvcndhcmQsIHdoZXJlIE1hdHJpeERvdFZlY3RvciBwZXJmb3JtcyB0aGUgb3V0LW9mLWJv dW5kcworKy8vIHdyaXRlIHRoaXMgcmVncmVzc2lvbiB0ZXN0IGd1YXJkcyBhZ2FpbnN0LgorK1RF U1QoRnVsbHljb25uZWN0ZWRUZXN0LCBSZWplY3RzV2VpZ2h0TWF0cml4RGltZW5zaW9uTWlzbWF0 Y2gpIHsKKysgIC8vIG5pXz1ub189MSBidXQgZGltMT0zIChPT0Igd3JpdGUgb2YgMyByZXN1bHRz IGludG8gYSAxLXJlc3VsdCBidWZmZXIpCisrICAvLyBhbmQgZGltMj01IChPT0IgcmVhZCBvZiA0 IGlucHV0cyBmcm9tIGEgMS1pbnB1dCBidWZmZXIpLgorKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0 ZXMgPSBNYWtlU29mdG1heE5ldHdvcmsoMSwgMSwgMywgNSk7CisrICBURmlsZSBmcDsKKysgIEFT U0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKKysgIE5ldHdv cmsgKm5ldCA9IE5ldHdvcms6OkNyZWF0ZUZyb21GaWxlKCZmcCk7CisrICBpZiAobmV0ID09IG51 bGxwdHIpIHsKKysgICAgcmV0dXJuOyAvLyBGaXhlZDogdGhlIG1pc21hdGNoZWQgbGF5ZXIgaXMg cmVqZWN0ZWQgYXQgbG9hZC4KKysgIH0KKysgIE5ldHdvcmtJTyBpbnB1dDsKKysgIGlucHV0LlJl c2l6ZTJkKGZhbHNlLCAvKndpZHRoPSovMSwgLypudW1fZmVhdHVyZXM9Ki8xKTsKKysgIE5ldHdv cmtTY3JhdGNoIHNjcmF0Y2g7CisrICBOZXR3b3JrSU8gb3V0cHV0OworKyAgbmV0LT5Gb3J3YXJk KGZhbHNlLCBpbnB1dCwgbnVsbHB0ciwgJnNjcmF0Y2gsICZvdXRwdXQpOworKyAgZGVsZXRlIG5l dDsKKysgIEZBSUwoKSA8PCAiY3JhZnRlZCBGdWxseUNvbm5lY3RlZCBsYXllciB3aXRoIG1pc21h dGNoZWQgd2VpZ2h0IG1hdHJpeCB3YXMgYWNjZXB0ZWQiOworK30KKysKKysvLyBDb25zaXN0ZW50 IGRpbWVuc2lvbnMgbXVzdCBzdGlsbCBiZSBhY2NlcHRlZC4KKytURVNUKEZ1bGx5Y29ubmVjdGVk VGVzdCwgQWNjZXB0c01hdGNoaW5nRGltZW5zaW9ucykgeworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4g Ynl0ZXMgPSBNYWtlU29mdG1heE5ldHdvcmsoMSwgMiwgMiwgMik7CisrICBURmlsZSBmcDsKKysg IEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKKysgIE5l dHdvcmsgKm5ldCA9IE5ldHdvcms6OkNyZWF0ZUZyb21GaWxlKCZmcCk7CisrICBBU1NFUlRfTkUo bmV0LCBudWxscHRyKTsKKysgIGRlbGV0ZSBuZXQ7CisrfQorKworK30gLy8gbmFtZXNwYWNlCisr fSAvLyBuYW1lc3BhY2UgdGVzc2VyYWN0CgpkaWZmIC0tZ2l0IGEvMWJkYTUwNzliMWM4YTdlMjVm NTIzNDg2ODM3NDI2OTAzZDI5Y2U4NC5wYXRjaCBiLzFiZGE1MDc5YjFjOGE3ZTI1ZjUyMzQ4Njgz NzQyNjkwM2QyOWNlODQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MjcwNTNiZgotLS0gL2Rldi9udWxsCisrKyBiLzFiZGE1MDc5YjFjOGE3ZTI1ZjUyMzQ4NjgzNzQy NjkwM2QyOWNlODQucGF0Y2gKQEAgLTAsMCArMSwxNzEgQEAKK2RpZmYgLXJ1cE4gLS1uby1kZXJl ZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0gdGVzc2VyYWN0LTUuNS4zLW5ldy9N YWtlZmlsZS5hbQorLS0tIHRlc3NlcmFjdC01LjUuMy9NYWtlZmlsZS5hbQkyMDI2LTA3LTI0IDIw OjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUu YW0JMjAyNi0wOS0yMSAxMDoyODoxMC4xNTA0NzkzNjkgKzAyMDAKK0BAIC0xMTgyLDYgKzExODIs NyBAQCBjaGVja19QUk9HUkFNUyArPSBtYXN0ZXJ0cmFpbmVyX3Rlc3QKKyBlbmRpZiAjICFESVNB QkxFRF9MRUdBQ1lfRU5HSU5FCisgY2hlY2tfUFJPR1JBTVMgKz0gbWF0cml4X3Rlc3QKKyBjaGVj a19QUk9HUkFNUyArPSBuZXR3b3JraW9fdGVzdAorK2NoZWNrX1BST0dSQU1TICs9IG5vcm1wcm90 b190ZXN0CisgaWYgRU5BQkxFX1RSQUlOSU5HCisgY2hlY2tfUFJPR1JBTVMgKz0gbm9ybXN0cm5n c190ZXN0CisgZW5kaWYgIyBFTkFCTEVfVFJBSU5JTkcKK0BAIC0xMzc2LDYgKzEzNzcsMTAgQEAg bmV0d29ya2lvX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L25ldHdvcgorIG5ldHdvcmtpb190ZXN0 X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBuZXR3b3JraW9fdGVzdF9MREFERCA9 ICQoVEVTU19MSUJTKQorIAorK25vcm1wcm90b190ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9ub3Jt cHJvdG9fdGVzdC5jYworK25vcm1wcm90b190ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBG TEFHUykKKytub3JtcHJvdG9fdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQorKworIG5vcm1zdHJu Z3NfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3Qvbm9ybXN0cm5nc190ZXN0LmNjCisgbm9ybXN0cm5n c190ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBub3Jtc3RybmdzX3Rlc3Rf TERBREQgPSAkKFRSQUlOSU5HX0xJQlMpICQoSUNVX0kxOE5fTElCUykgJChJQ1VfVUNfTElCUykK K2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5 L25vcm1tYXRjaC5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvbm9ybW1hdGNo LmNwcAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvbm9ybW1hdGNoLmNwcAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2NsYXNzaWZ5L25vcm1tYXRjaC5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC4xNTEwMDQzNjUg KzAyMDAKK0BAIC0yOCw2ICsyOCw3IEBACisgCisgI2luY2x1ZGUgPGNtYXRoPgorICNpbmNsdWRl IDxjc3RkaW8+CisrI2luY2x1ZGUgPGlvbWFuaXA+IC8vIGZvciBzdGQ6OnNldHcKKyAjaW5jbHVk ZSA8c3N0cmVhbT4gLy8gZm9yIHN0ZDo6aXN0cmluZ3N0cmVhbQorIAorIG5hbWVzcGFjZSB0ZXNz ZXJhY3QgeworQEAgLTE5MCw3ICsxOTEsMTAgQEAgTk9STV9QUk9UT1MgKkNsYXNzaWZ5OjpSZWFk Tm9ybVByb3RvcyhURgorICAgd2hpbGUgKGZwLT5GR2V0cyhsaW5lLCBrTWF4TGluZVNpemUpICE9 IG51bGxwdHIpIHsKKyAgICAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cmVhbShsaW5lKTsKKyAgICAg c3RyZWFtLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworLSAgICBzdHJlYW0gPj4gdW5p Y2hhciA+PiBOdW1Qcm90b3M7CisrICAgIC8vIHVuaWNoYXIgaG9sZHMgYXQgbW9zdCAyICogVU5J Q0hBUl9MRU4gY2hhcmFjdGVyczsgdGhlIHdpZHRoIGxpbWl0CisrICAgIC8vICh3aWR0aCAtIDEg Y2hhcmFjdGVycyBmb3IgY2hhciogZXh0cmFjdGlvbikga2VlcHMgdGhlIGV4dHJhY3Rpb24KKysg ICAgLy8gZnJvbSBvdmVyZmxvd2luZyB0aGUgYnVmZmVyIG9uIG92ZXJsb25nIGxpbmVzLgorKyAg ICBzdHJlYW0gPj4gc3RkOjpzZXR3KDIgKiBVTklDSEFSX0xFTiArIDEpID4+IHVuaWNoYXIgPj4g TnVtUHJvdG9zOworICAgICBpZiAoc3RyZWFtLmZhaWwoKSkgeworICAgICAgIGNvbnRpbnVlOwor ICAgICB9CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0 ZXN0L0NNYWtlTGlzdHMudHh0IHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvQ01ha2VMaXN0 cy50eHQKKy0tLSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvQ01ha2VMaXN0cy50eHQJMjAyNi0w Ny0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3Vu aXR0ZXN0L0NNYWtlTGlzdHMudHh0CTIwMjYtMDktMjEgMTA6Mjg6MTAuMTUxMjcxNDIzICswMjAw CitAQCAtNTksNiArNTksNyBAQCBzZXQoTEVHQUNZX1RFU1RTCisgICAgIGluZGV4bWFwYmlkaV90 ZXN0LmNjCisgICAgIGludGZlYXR1cmVtYXBfdGVzdC5jYworICAgICBtYXN0ZXJ0cmFpbmVyX3Rl c3QuY2MKKysgICAgbm9ybXByb3RvX3Rlc3QuY2MKKyAgICAgb3NkX3Rlc3QuY2MKKyAgICAgcGFy YW1zX21vZGVsX3Rlc3QuY2MKKyAgICAgc2hhcGV0YWJsZV90ZXN0LmNjCitkaWZmIC1ydXBOIC0t bm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L25vcm1wcm90b190ZXN0LmNj IHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3Qvbm9ybXByb3RvX3Rlc3QuY2MKKy0tLSB0ZXNz ZXJhY3QtNS41LjMvdW5pdHRlc3Qvbm9ybXByb3RvX3Rlc3QuY2MJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L25vcm1w cm90b190ZXN0LmNjCTIwMjYtMDktMjEgMTA6Mjg6MTAuMTUxNDcwMDU0ICswMjAwCitAQCAtMCww ICsxLDExMSBAQAorKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrLy8gRmlsZTogICAgICAgIG5vcm1wcm90b190 ZXN0LmNjCisrLy8gRGVzY3JpcHRpb246IFRlc3RzIHRoYXQgQ2xhc3NpZnk6OlJlYWROb3JtUHJv dG9zIGhhbmRsZXMgYSBub3JtcHJvdG8KKysvLyAgICAgICAgICAgICAgbGluZSB3aG9zZSBmaXJz dCAodW5pY2hhcikgdG9rZW4gZXhjZWVkcyB0aGUKKysvLyAgICAgICAgICAgICAgdW5pY2hhclsy ICogVU5JQ0hBUl9MRU4gKyAxXSBzdGFjayBidWZmZXIuIFRoZQorKy8vICAgICAgICAgICAgICBp c3RyZWFtIGV4dHJhY3Rpb24gaGFzIG5vIGludHJpbnNpYyBsZW5ndGggbGltaXQsIHNvIGEKKysv LyAgICAgICAgICAgICAgY3JhZnRlZCBOT1JNUFJPVE8gY29tcG9uZW50IGluIGEgLnRyYWluZWRk YXRhIGZpbGUKKysvLyAgICAgICAgICAgICAgY291bGQgb3ZlcmZsb3cgdGhlIHN0YWNrIGJ1ZmZl ciBkdXJpbmcgbGVnYWN5IGVuZ2luZQorKy8vICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbi4K KysvLworKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg KHRoZSAiTGljZW5zZSIpOworKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKysvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD RU5TRS0yLjAKKysvLworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrI2luY2x1ZGUgImluY2x1ZGVfZ3Vu aXQuaCIKKysKKysjaW5jbHVkZSAiY2xhc3NpZnkuaCIKKysjaW5jbHVkZSAic2VyaWFsaXMuaCIg Ly8gZm9yIFRGaWxlCisrCisrI2luY2x1ZGUgPGNzdGRpbz4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4K KysjaW5jbHVkZSA8c3RyaW5nPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNlIHRl c3NlcmFjdCB7CisrbmFtZXNwYWNlIHsKKysKKysvLyBNaW5pbWFsIHVuaWNoYXJzZXQgKHNwYWNl IGFuZCAnYScpLgorK2NvbnN0IGNoYXIga01pblVuaWNoYXJzZXRbXSA9CisrICAgICIyXG4iCisr ICAgICJOVUxMIDEgMCwyNTUsMCwyNTUsMCwwLDAsMCwwLDAgTGF0aW4gMiAwIDJcbiIKKysgICAg ImEgMSAwLDI1NSwwLDI1NSwwLDAsMCwwLDAsMCBMYXRpbiAyIDAgMlxuIjsKKysKKysvLyBCdWls ZHMgYSBub3JtcHJvdG8gY29tcG9uZW50OiBhIHNhbXBsZS1zaXplIGxpbmUgKDUpLCBmaXZlIHBh cmFtZXRlcgorKy8vIGRlc2NyaXB0aW9uIGxpbmVzLCB0aGVuIHRoZSBnaXZlbiByYXcgcHJvdG8g bGluZXMuCisrc3RkOjp2ZWN0b3I8Y2hhcj4gTWFrZU5vcm1wcm90byhjb25zdCBzdGQ6OnN0cmlu ZyAmbGluZXMpIHsKKysgIHN0ZDo6c3RyaW5nIGRhdGEgPSAiNVxuIjsKKysgIGZvciAoaW50IGkg PSAwOyBpIDwgNTsgKytpKSB7CisrICAgIGRhdGEgKz0gImUgZSAwIDFcbiI7CisrICB9CisrICBk YXRhICs9IGxpbmVzOworKyAgcmV0dXJuIHN0ZDo6dmVjdG9yPGNoYXI+KGRhdGEuYmVnaW4oKSwg ZGF0YS5lbmQoKSk7CisrfQorKworK2NsYXNzIE5vcm1wcm90b1Rlc3QgOiBwdWJsaWMgdGVzdGlu Zzo6VGVzdCB7CisrcHJvdGVjdGVkOgorKyAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKysgICAg dG1wbF8gPSAiL3RtcC90ZXNzX25vcm1wcm90b190ZXN0X1hYWFhYWCI7CisrICAgIGNoYXIgKmRp ciA9IG1rZHRlbXAodG1wbF8uZGF0YSgpKTsKKysgICAgQVNTRVJUX05FKGRpciwgbnVsbHB0cik7 CisrICAgIGRpcl8gPSBkaXI7CisrICAgIHN0ZDo6c3RyaW5nIHVjX3BhdGggPSBkaXJfICsgIi9l bmcudW5pY2hhcnNldCI7CisrICAgIEZJTEUgKmYgPSBmb3Blbih1Y19wYXRoLmNfc3RyKCksICJ3 Iik7CisrICAgIEFTU0VSVF9ORShmLCBudWxscHRyKTsKKysgICAgQVNTRVJUX0VRKGZ3cml0ZShr TWluVW5pY2hhcnNldCwgMSwgc2l6ZW9mKGtNaW5VbmljaGFyc2V0KSAtIDEsIGYpLAorKyAgICAg ICAgICAgICAgc2l6ZW9mKGtNaW5VbmljaGFyc2V0KSAtIDEpOworKyAgICBmY2xvc2UoZik7Cisr ICAgIC8vIExvYWQgdGhlIG1pbmltYWwgdW5pY2hhcnNldCBpbnRvIHRoZSBjbGFzc2lmaWVyJ3Mg aW5oZXJpdGVkCisrICAgIC8vIHVuaWNoYXJzZXQgbWVtYmVyLgorKyAgICBBU1NFUlRfVFJVRShj bGFzc2lmaWVyXy51bmljaGFyc2V0LmxvYWRfZnJvbV9maWxlKHVjX3BhdGguY19zdHIoKSkpOwor KyAgfQorKyAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKysgICAgc3RkOjpyZW1vdmUoKGRp cl8gKyAiL2VuZy51bmljaGFyc2V0IikuY19zdHIoKSk7CisrICAgIHJtZGlyKGRpcl8uY19zdHIo KSk7CisrICB9CisrICBzdGQ6OnN0cmluZyBkaXJfOworKyAgc3RkOjpzdHJpbmcgdG1wbF87Cisr ICBDbGFzc2lmeSBjbGFzc2lmaWVyXzsKKyt9OworKworKy8vIEEgOTktY2hhcmFjdGVyIGZpcnN0 IHRva2VuICh0aGUgbWF4aW11bSBGR2V0cyBjYW4gcmV0dXJuKSBvdmVyZmxvd3MKKysvLyB1bmlj aGFyWzIgKiBVTklDSEFSX0xFTiArIDFdIG9uIHVucGF0Y2hlZCBjb2RlOyB0aGUgd2lkdGgtbGlt aXRlZAorKy8vIGV4dHJhY3Rpb24gbXVzdCByZWplY3QgdGhlIGxpbmUgaW5zdGVhZC4KKytURVNU X0YoTm9ybXByb3RvVGVzdCwgVG9sZXJhdGVzT3ZlcmxvbmdVbmljaGFyVG9rZW4pIHsKKysgIHN0 ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFrZU5vcm1wcm90byhzdGQ6OnN0cmluZyg5OSwgJ0En KSArICJcbiIpOworKyAgVEZpbGUgZnA7CisrICBBU1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRh dGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBjbGFzc2lmaWVyXy5Ob3JtUHJvdG9zID0gY2xhc3Np Zmllcl8uUmVhZE5vcm1Qcm90b3MoJmZwKTsKKysgIEFTU0VSVF9ORShjbGFzc2lmaWVyXy5Ob3Jt UHJvdG9zLCBudWxscHRyKTsKKysgIGNsYXNzaWZpZXJfLkZyZWVOb3JtUHJvdG9zKCk7CisrICBF WFBFQ1RfRVEoY2xhc3NpZmllcl8uTm9ybVByb3RvcywgbnVsbHB0cik7CisrfQorKworKy8vIEEg dG9rZW4gb2YgZXhhY3RseSAyICogVU5JQ0hBUl9MRU4gY2hhcmFjdGVycyBpcyB0aGUgbWF4aW11 bSBsZWdpdGltYXRlCisrLy8gc2l6ZTsgaXQgbXVzdCBub3QgYmUgdHJ1bmNhdGVkIG9yIHJlamVj dGVkIGJ5IHRoZSB3aWR0aCBsaW1pdC4KKytURVNUX0YoTm9ybXByb3RvVGVzdCwgVG9sZXJhdGVz TWF4TGVuVW5pY2hhclRva2VuKSB7CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VO b3JtcHJvdG8oc3RkOjpzdHJpbmcoMiAqIFVOSUNIQVJfTEVOLCAnQScpICsgIiAwXG4iKTsKKysg IFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3BlbihieXRlcy5kYXRhKCksIGJ5dGVzLnNp emUoKSkpOworKyAgY2xhc3NpZmllcl8uTm9ybVByb3RvcyA9IGNsYXNzaWZpZXJfLlJlYWROb3Jt UHJvdG9zKCZmcCk7CisrICBBU1NFUlRfTkUoY2xhc3NpZmllcl8uTm9ybVByb3RvcywgbnVsbHB0 cik7CisrICBjbGFzc2lmaWVyXy5GcmVlTm9ybVByb3RvcygpOworKyAgRVhQRUNUX0VRKGNsYXNz aWZpZXJfLk5vcm1Qcm90b3MsIG51bGxwdHIpOworK30KKysKKysvLyBBIHdlbGwtZm9ybWVkIG5v cm1wcm90byBjb21wb25lbnQgbXVzdCBzdGlsbCBwYXJzZS4KKytURVNUX0YoTm9ybXByb3RvVGVz dCwgUmVhZHNWYWxpZE5vcm1wcm90b3MpIHsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0g TWFrZU5vcm1wcm90bygiYSAwXG4iKTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAu T3BlbihieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgY2xhc3NpZmllcl8uTm9ybVBy b3RvcyA9IGNsYXNzaWZpZXJfLlJlYWROb3JtUHJvdG9zKCZmcCk7CisrICBBU1NFUlRfTkUoY2xh c3NpZmllcl8uTm9ybVByb3RvcywgbnVsbHB0cik7CisrICBjbGFzc2lmaWVyXy5GcmVlTm9ybVBy b3RvcygpOworKyAgRVhQRUNUX0VRKGNsYXNzaWZpZXJfLk5vcm1Qcm90b3MsIG51bGxwdHIpOwor K30KKysKKyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFtZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAt LWdpdCBhLzJkMDRkNjQwZGIyZThjN2UzYmFiMjM2OWQ1OTkzNDNiNWE4Yjg0NDMucGF0Y2ggYi8y ZDA0ZDY0MGRiMmU4YzdlM2JhYjIzNjlkNTk5MzQzYjVhOGI4NDQzLnBhdGNoCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NGQ2NjYKLS0tIC9kZXYvbnVsbAorKysgYi8yZDA0 ZDY0MGRiMmU4YzdlM2JhYjIzNjlkNTk5MzQzYjVhOGI4NDQzLnBhdGNoCkBAIC0wLDAgKzEsMTE5 IEBACitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxl LmFtIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMv TWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4zODIzMDczMTIgKzAyMDAKKysrKyB0ZXNz ZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuMzg3NjA2NTE3 ICswMjAwCitAQCAtMTIyNSw2ICsxMjI1LDcgQEAgY2hlY2tfUFJPR1JBTVMgKz0gdGZpbGVfdGVz dAorIGlmIEVOQUJMRV9UUkFJTklORworIGNoZWNrX1BST0dSQU1TICs9IHVuaWNoYXJfdGVzdAor IGNoZWNrX1BST0dSQU1TICs9IHVuaWNoYXJjb21wcmVzc190ZXN0CisrY2hlY2tfUFJPR1JBTVMg Kz0gdW5pY2hhcnNldF9sb2FkX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSB1bmljaGFyc2V0X3Rl c3QKKyBjaGVja19QUk9HUkFNUyArPSB2YWxpZGF0ZV9ncmFwaGVtZV90ZXN0CisgY2hlY2tfUFJP R1JBTVMgKz0gdmFsaWRhdGVfaW5kaWNfdGVzdAorQEAgLTE1MTgsNiArMTUxOSwxMCBAQCB1bmlj aGFyY29tcHJlc3NfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvCisgdW5pY2hhcmNvbXByZXNzX3Rl c3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIHVuaWNoYXJjb21wcmVzc190ZXN0 X0xEQUREID0gJChUUkFJTklOR19MSUJTKSAkKElDVV9VQ19MSUJTKQorIAorK3VuaWNoYXJzZXRf bG9hZF90ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC91bmljaGFyc2V0X2xvYWRfdGVzdC5jYworK3Vu aWNoYXJzZXRfbG9hZF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyt1bmlj aGFyc2V0X2xvYWRfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQorKworIHVuaWNoYXJzZXRfdGVz dF9TT1VSQ0VTID0gdW5pdHRlc3QvdW5pY2hhcnNldF90ZXN0LmNjCisgdW5pY2hhcnNldF90ZXN0 X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyB1bmljaGFyc2V0X3Rlc3RfTERBREQg PSAkKFRSQUlOSU5HX0xJQlMpICQoSUNVX1VDX0xJQlMpCitkaWZmIC1ydXBOIC0tbm8tZGVyZWZl cmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwvdW5pY2hhcnNldC5jcHAgdGVzc2VyYWN0 LTUuNS4zLW5ldy9zcmMvY2N1dGlsL3VuaWNoYXJzZXQuY3BwCistLS0gdGVzc2VyYWN0LTUuNS4z L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5jcHAJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAg KzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0aWwvdW5pY2hhcnNldC5jcHAJ MjAyNi0wOS0yMSAxMDoyODoxMC4zODgyMjc3NTkgKzAyMDAKK0BAIC03OTEsNiArNzkxLDkgQEAg Ym9vbCBVTklDSEFSU0VUOjpsb2FkX3ZpYV9mZ2V0cygKKyAgICAgICBzc2NhbmYoYnVmZmVyLCAi JWQiLCAmdW5pY2hhcnNldF9zaXplKSAhPSAxKSB7CisgICAgIHJldHVybiBmYWxzZTsKKyAgIH0K KysgIGlmICh1bmljaGFyc2V0X3NpemUgPD0gMCkgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9 CisgICBmb3IgKFVOSUNIQVJfSUQgaWQgPSAwOyBpZCA8IHVuaWNoYXJzZXRfc2l6ZTsgKytpZCkg eworICAgICBjaGFyIHVuaWNoYXJbMjU2XTsKKyAgICAgdW5zaWduZWQgaW50IHByb3BlcnRpZXM7 CitAQCAtODg0LDYgKzg4NywxNSBAQCBib29sIFVOSUNIQVJTRVQ6OmxvYWRfdmlhX2ZnZXRzKAor ICAgICB9IGVsc2UgeworICAgICAgIHRoaXMtPnVuaWNoYXJfaW5zZXJ0X2JhY2t3YXJkc19jb21w YXRpYmxlKHVuaWNoYXIpOworICAgICB9CisrICAgIC8vIEEgZHVwbGljYXRlIG9yIGVtcHR5IHJl cHJlc2VudGF0aW9uIG1ha2VzIHRoZSBpbnNlcnQgYSBuby1vcCwKKysgICAgLy8gZGVzeW5jaHJv bml6aW5nIGlkIGZyb20gdGhlIHVuaWNoYXJzIHZlY3RvcjsgdGhlIHNldF8qIGNhbGxzIGFuZAor KyAgICAvLyB1bmljaGFyc1tpZF0gYmVsb3cgd291bGQgdGhlbiB3cml0ZSBvdXQgb2YgYm91bmRz LiBUaGUgZmlsZSBpcworKyAgICAvLyBtYWxmb3JtZWQsIHNvIHJlamVjdCBpdC4KKysgICAgaWYg KHNpemUoKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGlkKSArIDEpIHsKKysgICAgICBmcHJpbnRm KHN0ZGVyciwgIiVzOiVkIHVuaWNoYXIgJWQgaGFzIGEgZHVwbGljYXRlIG9yIGVtcHR5IHJlcHJl c2VudGF0aW9uXG4iLAorKyAgICAgICAgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBpZCk7Cisr ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisgCisgICAgIHRoaXMtPnNldF9pc2FscGhhKGlk LCBwcm9wZXJ0aWVzICYgSVNBTFBIQV9NQVNLKTsKKyAgICAgdGhpcy0+c2V0X2lzbG93ZXIoaWQs IHByb3BlcnRpZXMgJiBJU0xPV0VSX01BU0spOworZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNl IHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC91bmljaGFyc2V0X2xvYWRfdGVzdC5jYyB0ZXNzZXJh Y3QtNS41LjMtbmV3L3VuaXR0ZXN0L3VuaWNoYXJzZXRfbG9hZF90ZXN0LmNjCistLS0gdGVzc2Vy YWN0LTUuNS4zL3VuaXR0ZXN0L3VuaWNoYXJzZXRfbG9hZF90ZXN0LmNjCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0dGVzdC91 bmljaGFyc2V0X2xvYWRfdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjM4ODU5NDM5NCArMDIw MAorQEAgLTAsMCArMSw2NCBAQAorKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrLy8gRmlsZTogICAgICAgIHVu aWNoYXJzZXRfbG9hZF90ZXN0LmNjCisrLy8gRGVzY3JpcHRpb246IFRlc3RzIHRoYXQgVU5JQ0hB UlNFVDo6bG9hZF92aWFfZmdldHMgcmVqZWN0cyB1bmljaGFyc2V0CisrLy8gICAgICAgICAgICAg IGZpbGVzIHdob3NlIGluc2VydGlvbnMgZGVzeW5jaHJvbml6ZSB0aGUgaWQgbG9vcCBpbmRleAor Ky8vICAgICAgICAgICAgICBmcm9tIHRoZSB1bmljaGFycyB2ZWN0b3IgKGR1cGxpY2F0ZSBvciBl bXB0eQorKy8vICAgICAgICAgICAgICByZXByZXNlbnRhdGlvbnMpLCB3aGljaCB3b3VsZCBtYWtl IHRoZSBzdWJzZXF1ZW50IHNldF8qCisrLy8gICAgICAgICAgICAgIGNhbGxzIHdyaXRlIG91dCBv ZiBib3VuZHMsIGFuZCBub24tcG9zaXRpdmUgc2l6ZSBjb3VudHMuCisrLy8KKysvLyBMaWNlbnNl ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK KysvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0 CisrLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrLy8KKysv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLworKworKyNpbmNsdWRlICJpbmNsdWRlX2d1bml0LmgiCisrCisrI2luY2x1 ZGUgInNlcmlhbGlzLmgiIC8vIGZvciBURmlsZQorKyNpbmNsdWRlICJ1bmljaGFyc2V0LmgiCisr CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrCisrbmFtZXNwYWNlIHRlc3NlcmFjdCB7CisrbmFtZXNw YWNlIHsKKysKKysvLyBMb2FkcyB0aGUgZ2l2ZW4gdW5pY2hhcnNldCB0ZXh0IHZpYSB0aGUgVEZp bGUtYmFzZWQgbG9hZGVyLgorK2Jvb2wgTG9hZFVuaWNoYXJzZXQoY29uc3QgY2hhciAqdGV4dCwg VU5JQ0hBUlNFVCAqdW5pY2hhcnNldCkgeworKyAgVEZpbGUgZnA7CisrICBpZiAoIWZwLk9wZW4o dGV4dCwgc3RkOjpzdHJsZW4odGV4dCkpKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysg IHJldHVybiB1bmljaGFyc2V0LT5sb2FkX2Zyb21fZmlsZSgmZnAsIGZhbHNlKTsKKyt9CisrCisr Ly8gQSBkdXBsaWNhdGUgcmVwcmVzZW50YXRpb24gbWFrZXMgdGhlIHNlY29uZCBpbnNlcnQgYSBu by1vcCwgc28gb24KKysvLyB1bnBhdGNoZWQgY29kZSB0aGUgc2V0XyogY2FsbHMgZm9yIHRoZSBy ZW1haW5pbmcgbGluZXMgd3JpdGUgcGFzdAorKy8vIHRoZSBlbmQgb2YgdGhlIHVuaWNoYXJzIHZl Y3RvciAoQVNhbiBjb250YWluZXItb3ZlcmZsb3cpLgorK1RFU1QoVW5pY2hhcnNldExvYWRUZXN0 LCBSZWplY3RzRHVwbGljYXRlUmVwcmVzZW50YXRpb24pIHsKKysgIGNvbnN0IGNoYXIgKnRleHQg PSAiM1xuQSAwIExhdGluXG5BIDAgTGF0aW5cbkIgMCBMYXRpblxuIjsKKysgIFVOSUNIQVJTRVQg dW5pY2hhcnNldDsKKysgIEVYUEVDVF9GQUxTRShMb2FkVW5pY2hhcnNldCh0ZXh0LCAmdW5pY2hh cnNldCkpOworK30KKysKKysvLyBBIG5vbi1wb3NpdGl2ZSBzaXplIGNvdW50IG11c3QgYmUgcmVq ZWN0ZWQ7IG9uIHVucGF0Y2hlZCBjb2RlIGEKKysvLyB6ZXJvIG9yIG5lZ2F0aXZlIGNvdW50IGxv YWRzIGFuIGVtcHR5IHVuaWNoYXJzZXQgc3VjY2Vzc2Z1bGx5LgorK1RFU1QoVW5pY2hhcnNldExv YWRUZXN0LCBSZWplY3RzTm9uUG9zaXRpdmVDb3VudCkgeworKyAgY29uc3QgY2hhciAqdGV4dHNb XSA9IHsiMFxuIiwgIi0xXG4ifTsKKysgIGZvciAoY29uc3QgY2hhciAqdGV4dCA6IHRleHRzKSB7 CisrICAgIFVOSUNIQVJTRVQgdW5pY2hhcnNldDsKKysgICAgRVhQRUNUX0ZBTFNFKExvYWRVbmlj aGFyc2V0KHRleHQsICZ1bmljaGFyc2V0KSk7CisrICB9CisrfQorKworKy8vIEEgdmFsaWQgdW5p Y2hhcnNldCBtdXN0IHN0aWxsIGJlIGFjY2VwdGVkLgorK1RFU1QoVW5pY2hhcnNldExvYWRUZXN0 LCBBY2NlcHRzVmFsaWRVbmljaGFyc2V0KSB7CisrICBjb25zdCBjaGFyICp0ZXh0ID0gIjNcbkEg MCBMYXRpblxuQiAwIExhdGluXG5DIDAgTGF0aW5cbiI7CisrICBVTklDSEFSU0VUIHVuaWNoYXJz ZXQ7CisrICBBU1NFUlRfVFJVRShMb2FkVW5pY2hhcnNldCh0ZXh0LCAmdW5pY2hhcnNldCkpOwor KyAgRVhQRUNUX0VRKHVuaWNoYXJzZXQuc2l6ZSgpLCAzdSk7CisrICBFWFBFQ1RfU1RSRVEodW5p Y2hhcnNldC5pZF90b191bmljaGFyKDEpLCAiQiIpOworK30KKysKKyt9IC8vIG5hbWVzcGFjZQor K30gLy8gbmFtZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAtLWdpdCBhLzU1Mjc3MTIzNmIwZDgwY2Jk YjBjN2RkODU2MTIwZmEyMWE0NjcyZTUucGF0Y2ggYi81NTI3NzEyMzZiMGQ4MGNiZGIwYzdkZDg1 NjEyMGZhMjFhNDY3MmU1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmZlMGFkOTMKLS0tIC9kZXYvbnVsbAorKysgYi81NTI3NzEyMzZiMGQ4MGNiZGIwYzdkZDg1NjEy MGZhMjFhNDY3MmU1LnBhdGNoCkBAIC0wLDAgKzEsMjI0IEBACitkaWZmIC1ydXBOIC0tbm8tZGVy ZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL01ha2VmaWxlLmFtIHRlc3NlcmFjdC01LjUuMy1uZXcv TWFrZWZpbGUuYW0KKy0tLSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAx MDoyODoxMC40OTAzMzQ4NzkgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxl LmFtCTIwMjYtMDktMjEgMTA6Mjg6MTAuNTAwNTQ0MDA0ICswMjAwCitAQCAtMTE5OSw2ICsxMTk5 LDcgQEAgaWYgRU5BQkxFX1RSQUlOSU5HCisgY2hlY2tfUFJPR1JBTVMgKz0gcGFuZ29fZm9udF9p bmZvX3Rlc3QKKyBlbmRpZiAjIEVOQUJMRV9UUkFJTklORworIGNoZWNrX1BST0dSQU1TICs9IHBh cmFncmFwaHNfdGVzdAorK2NoZWNrX1BST0dSQU1TICs9IHBsdW1iaW5nX3Rlc3QKKyBpZiAhRElT QUJMRURfTEVHQUNZX0VOR0lORQorIGNoZWNrX1BST0dSQU1TICs9IHBhcmFtc19tb2RlbF90ZXN0 CisgZW5kaWYgIyAhRElTQUJMRURfTEVHQUNZX0VOR0lORQorQEAgLTE0MzQsNiArMTQzNSwxMCBA QCBwYXJhZ3JhcGhzX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L3BhcmFnCisgcGFyYWdyYXBoc190 ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyBwYXJhZ3JhcGhzX3Rlc3RfTERB REQgPSAkKFRFU1NfTElCUykKKyAKKytwbHVtYmluZ190ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9w bHVtYmluZ190ZXN0LmNjCisrcGx1bWJpbmdfdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQ RkxBR1MpCisrcGx1bWJpbmdfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQorKworIGlmICFESVNB QkxFRF9MRUdBQ1lfRU5HSU5FCisgcGFyYW1zX21vZGVsX3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0 L3BhcmFtc19tb2RlbF90ZXN0LmNjCisgcGFyYW1zX21vZGVsX3Rlc3RfQ1BQRkxBR1MgPSAkKHVu aXR0ZXN0X0NQUEZMQUdTKQorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01 LjUuMy9zcmMvY2NtYWluL3Rlc3NlZGl0LmNwcCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY21h aW4vdGVzc2VkaXQuY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9jY21haW4vdGVzc2VkaXQu Y3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDkwODQ3NjQxICswMjAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy9zcmMvY2NtYWluL3Rlc3NlZGl0LmNwcAkyMDI2LTA5LTIxIDEwOjI4OjEwLjUwMDky MDE3MiArMDIwMAorQEAgLTE2OSw3ICsxNjksMTIgQEAgYm9vbCBUZXNzZXJhY3Q6OmluaXRfdGVz c2VyYWN0X2xhbmdfZGF0YQorICNlbmRpZiAvLyBuZGVmIERJU0FCTEVEX0xFR0FDWV9FTkdJTkUK KyAgICAgaWYgKG1nci0+SXNDb21wb25lbnRBdmFpbGFibGUoVEVTU0RBVEFfTFNUTSkpIHsKKyAg ICAgICBsc3RtX3JlY29nbml6ZXJfID0gbmV3IExTVE1SZWNvZ25pemVyKGxhbmd1YWdlX2RhdGFf cGF0aF9wcmVmaXguY19zdHIoKSk7CistICAgICAgQVNTRVJUX0hPU1QobHN0bV9yZWNvZ25pemVy Xy0+TG9hZCh0aGlzLT5wYXJhbXMoKSwgbHN0bV91c2VfbWF0cml4ID8gbGFuZ3VhZ2UgOiAiIiwg bWdyKSk7CisrICAgICAgaWYgKCFsc3RtX3JlY29nbml6ZXJfLT5Mb2FkKHRoaXMtPnBhcmFtcygp LCBsc3RtX3VzZV9tYXRyaXggPyBsYW5ndWFnZSA6ICIiLCBtZ3IpKSB7CisrICAgICAgICBkZWxl dGUgbHN0bV9yZWNvZ25pemVyXzsKKysgICAgICAgIGxzdG1fcmVjb2duaXplcl8gPSBudWxscHRy OworKyAgICAgICAgdHByaW50ZigiRXJyb3I6IEZhaWxlZCB0byBsb2FkIHRoZSBMU1RNIG1vZGVs IGZyb20gJXNcbiIsIHRlc3NkYXRhX3BhdGguY19zdHIoKSk7CisrICAgICAgICByZXR1cm4gZmFs c2U7CisrICAgICAgfQorICAgICB9IGVsc2UgeworICNpZmRlZiBESVNBQkxFRF9MRUdBQ1lfRU5H SU5FCisgICAgICAgLy8gVGhlIGxlZ2FjeSBlbmdpbmUgaXMgY29tcGlsZWQgb3V0LCBzbyB3ZSBj YW5ub3QgZmFsbCBiYWNrIHRvIGl0LgorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3Nl cmFjdC01LjUuMy9zcmMvbHN0bS9wbHVtYmluZy5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMv bHN0bS9wbHVtYmluZy5jcHAKKy0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2xzdG0vcGx1bWJpbmcu Y3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy9zcmMvbHN0bS9wbHVtYmluZy5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC41MDExMzMy MzMgKzAyMDAKK0BAIC0yMjYsNiArMjI2LDEyIEBAIGJvb2wgUGx1bWJpbmc6OkRlU2VyaWFsaXpl KFRGaWxlICpmcCkgeworICAgaWYgKHNpemUgPiAxMDAwMCkgeworICAgICByZXR1cm4gZmFsc2U7 CisgICB9CisrICAvLyBSZWplY3QgZW1wdHkgc3RhY2tzOiBYU2NhbGVGYWN0b3IsIENhY2hlWFNj YWxlRmFjdG9yIGFuZCBvdGhlciBtZXRob2RzCisrICAvLyB1bmNvbmRpdGlvbmFsbHkgZGVyZWZl cmVuY2Ugc3RhY2tfWzBdIGR1cmluZyBuZXR3b3JrIGluaXRpYWxpemF0aW9uLgorKyAgLy8gQSBT ZXJpZXMgbmVlZHMgYXQgbGVhc3QgdHdvIG5ldHdvcmtzIChzZWUgU2VyaWVzOjpGb3J3YXJkKS4K KysgIGlmIChzaXplID09IDAgfHwgKHR5cGUoKSA9PSBOVF9TRVJJRVMgJiYgc2l6ZSA9PSAxKSkg eworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg c2l6ZTsgKytpKSB7CisgICAgIE5ldHdvcmsgKm5ldHdvcmsgPSBDcmVhdGVGcm9tRmlsZShmcCk7 CisgICAgIGlmIChuZXR3b3JrID09IG51bGxwdHIpIHsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVy ZW5jZSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvcGx1bWJpbmdfdGVzdC5jYyB0ZXNzZXJhY3Qt NS41LjMtbmV3L3VuaXR0ZXN0L3BsdW1iaW5nX3Rlc3QuY2MKKy0tLSB0ZXNzZXJhY3QtNS41LjMv dW5pdHRlc3QvcGx1bWJpbmdfdGVzdC5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvcGx1bWJpbmdfdGVzdC5jYwky MDI2LTA5LTIxIDEwOjI4OjEwLjUwMTM0NzY1NSArMDIwMAorQEAgLTAsMCArMSwxNjUgQEAKKysv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAgICAgICBwbHVtYmluZ190ZXN0LmNjCisrLy8gRGVz Y3JpcHRpb246IFRlc3RzIHRoYXQgYSBjb3JydXB0IFRFU1NEQVRBX0xTVE0gY29tcG9uZW50IGlu IGEKKysvLyAgICAgICAgICAgICAgLnRyYWluZWRkYXRhIGZpbGUgaXMgcmVqZWN0ZWQgd2l0aG91 dCBjcmFzaGluZy4gQQorKy8vICAgICAgICAgICAgICBwbHVtYmluZyBsYXllciAoU2VyaWVzL1Bh cmFsbGVsL1JldmVyc2VkKSB3aXRoIGFuCisrLy8gICAgICAgICAgICAgIGVtcHR5IG9yIHVuZGVy c2l6ZWQgbmV0d29yayBzdGFjayB3b3VsZCBtYWtlCisrLy8gICAgICAgICAgICAgIFhTY2FsZUZh Y3Rvci9DYWNoZVhTY2FsZUZhY3RvciBkZXJlZmVyZW5jZSBzdGFja19bMF0KKysvLyAgICAgICAg ICAgICAgZHVyaW5nIGVuZ2luZSBpbml0aWFsaXphdGlvbi4KKysvLworKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKy8v IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg TGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysv LyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCisrCisrI2luY2x1ZGUgImluY2x1ZGVfZ3VuaXQuaCIKKysKKysjaW5jbHVkZSA8 dGVzc2VyYWN0L2Jhc2VhcGkuaD4KKysKKysjaW5jbHVkZSAibmV0d29yay5oIiAgICAgICAgLy8g Zm9yIE5ldHdvcmtUeXBlCisrI2luY2x1ZGUgInRlc3NkYXRhbWFuYWdlci5oIiAvLyBmb3IgVGVz c2RhdGFNYW5hZ2VyLCBURVNTREFUQV9MU1RNCisrCisrI2luY2x1ZGUgPGNzdGRpbnQ+CisrI2lu Y2x1ZGUgPGNzdGRpbz4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4K KysjaW5jbHVkZSA8c3RyaW5nPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrbmFtZXNwYWNlIHRl c3NlcmFjdCB7CisrbmFtZXNwYWNlIHsKKysKKysvLyBNaW5pbWFsIHVuaWNoYXJzZXQgd2l0aCB0 aGUgc3BlY2lhbCBjb2RlcyAoc3BhY2UsIEpvaW5lZCwgQnJva2VuKSB0aGF0CisrLy8gVU5JQ0hB UlNFVDo6bG9hZF9mcm9tX2ZpbGUgZXhwZWN0cywgYXMgZW1iZWRkZWQgaW4gdGhlIFRFU1NEQVRB X0xTVE0KKysvLyBjb21wb25lbnQgYnkgTFNUTVJlY29nbml6ZXI6OlNlcmlhbGl6ZS4KKytjb25z dCBjaGFyIGtNaW5VbmljaGFyc2V0W10gPQorKyAgICAiM1xuIgorKyAgICAiTlVMTCAwIE5VTEwg MFxuIgorKyAgICAiSm9pbmVkIDcgMCw2OSwxODgsMjU1LDQ4NiwxMjE4LDAsMzAsNDg2LDExODgg TGF0aW4gMjYgMCA5OCBKb2luZWRcbiIKKysgICAgInxCcm9rZW58MHwxIGYgMCw2OSwxODYsMjU1 LDg5MiwyMTM4LDAsODAsODkyLDIwNTggQ29tbW9uIDg0IDEwIDg0IHxCcm9rZW58MHwxXG4iOwor KworKy8vIEFwcGVuZHMgcmF3IGxpdHRsZS1lbmRpYW4gdmFsdWVzIHRvIGEgYnl0ZSBidWZmZXIu CisrY2xhc3MgQnl0ZVdyaXRlciB7CisrcHVibGljOgorKyAgdm9pZCBQdXRVOCh1aW50MzJfdCB2 KSB7IGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPih2ICYgMHhGRikpOyB9CisrICB2 b2lkIFB1dFUzMih1aW50MzJfdCB2KSB7CisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp KSB7CisrICAgICAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KCh2ID4+ICg4ICog aSkpICYgMHhGRikpOworKyAgICB9CisrICB9CisrICB2b2lkIFB1dFMzMihpbnQzMl90IHYpIHsg UHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2KSk7IH0KKysgIHZvaWQgUHV0U3RyaW5nKGNv bnN0IGNoYXIgKnMpIHsKKysgICAgUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGQ6OnN0 cmxlbihzKSkpOworKyAgICBkYXRhXy5pbnNlcnQoZGF0YV8uZW5kKCksIHMsIHMgKyBzdGQ6OnN0 cmxlbihzKSk7CisrICB9CisrICB2b2lkIFB1dFJhdyhjb25zdCBjaGFyICpzKSB7IGRhdGFfLmlu c2VydChkYXRhXy5lbmQoKSwgcywgcyArIHN0ZDo6c3RybGVuKHMpKTsgfQorKyAgY29uc3Qgc3Rk Ojp2ZWN0b3I8Y2hhcj4gJmRhdGEoKSBjb25zdCB7IHJldHVybiBkYXRhXzsgfQorKworK3ByaXZh dGU6CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBkYXRhXzsKKyt9OworKworKy8vIFNlcmlhbGl6ZWQg bmV0d29yayBoZWFkZXIgYXMgd3JpdHRlbiBieSBOZXR3b3JrOjpTZXJpYWxpemU6CisrLy8gICBp bnQ4IHR5cGUsIGludDggdHJhaW5pbmcsIGludDggbmVlZHNfdG9fYmFja3Byb3AsIGludDMyIG5l dHdvcmtfZmxhZ3MsCisrLy8gICBpbnQzMiBuaSwgaW50MzIgbm8sIGludDMyIG51bV93ZWlnaHRz LCBzdHJpbmcgbmFtZS4KKyt2b2lkIEFwcGVuZE5ldHdvcmtIZWFkZXIoQnl0ZVdyaXRlciAqdywg TmV0d29ya1R5cGUgdHlwZSkgeworKyAgdy0+UHV0VTgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5 cGUpKTsKKysgIHctPlB1dFU4KDApOyAvLyB0cmFpbmluZzogVFNfRElTQUJMRUQKKysgIHctPlB1 dFU4KDApOyAvLyBuZWVkc190b19iYWNrcHJvcAorKyAgdy0+UHV0VTMyKDApOyAvLyBuZXR3b3Jr X2ZsYWdzCisrICB3LT5QdXRVMzIoMCk7IC8vIG5pCisrICB3LT5QdXRVMzIoMCk7IC8vIG5vCisr ICB3LT5QdXRVMzIoMCk7IC8vIG51bV93ZWlnaHRzCisrICB3LT5QdXRTdHJpbmcoIiIpOyAvLyBu YW1lCisrfQorKworKy8vIEEgbWluaW1hbCB2YWxpZCBjaGlsZCBuZXR3b3JrIChOVF9JTlBVVCB3 aXRoIGEgMXgxeDF4MSBzaGFwZSkuCisrdm9pZCBBcHBlbmRJbnB1dENoaWxkKEJ5dGVXcml0ZXIg KncpIHsKKysgIEFwcGVuZE5ldHdvcmtIZWFkZXIodywgTlRfSU5QVVQpOworKyAgdy0+UHV0UzMy KDEpOyAvLyBiYXRjaAorKyAgdy0+UHV0UzMyKDEpOyAvLyBoZWlnaHQKKysgIHctPlB1dFMzMigx KTsgLy8gd2lkdGgKKysgIHctPlB1dFMzMigxKTsgLy8gZGVwdGgKKysgIHctPlB1dFMzMigwKTsg Ly8gbG9zcyB0eXBlCisrfQorKworKy8vIEJ1aWxkcyBhIFRFU1NEQVRBX0xTVE0gY29tcG9uZW50 IHdob3NlIHRvcC1sZXZlbCBuZXR3b3JrIGlzIGEgcGx1bWJpbmcKKysvLyBsYXllciBvZiB0aGUg Z2l2ZW4gdHlwZSB3aXRoIHRoZSBnaXZlbiAoY29ycnVwdCkgc3RhY2sgc2l6ZSwgZm9sbG93ZWQg YnkKKysvLyB0aGUgcmVtYWluaW5nIGZpZWxkcyBvZiBMU1RNUmVjb2duaXplcjo6RGVTZXJpYWxp emUuCisrc3RkOjp2ZWN0b3I8Y2hhcj4gTWFrZUxzdG1Db21wb25lbnQoTmV0d29ya1R5cGUgdHlw ZSwgdWludDMyX3Qgc3RhY2tfc2l6ZSkgeworKyAgQnl0ZVdyaXRlciB3OworKyAgQXBwZW5kTmV0 d29ya0hlYWRlcigmdywgdHlwZSk7CisrICB3LlB1dFUzMihzdGFja19zaXplKTsgLy8gUGx1bWJp bmc6OkRlU2VyaWFsaXplIHJlYWRzIHRoaXMgYXMgdWludDMyCisrICBmb3IgKHVpbnQzMl90IGkg PSAwOyBpIDwgc3RhY2tfc2l6ZTsgKytpKSB7CisrICAgIEFwcGVuZElucHV0Q2hpbGQoJncpOwor KyAgfQorKyAgdy5QdXRSYXcoa01pblVuaWNoYXJzZXQpOyAvLyB1bmljaGFyc2V0IChyYXcgdGV4 dCwgbm8gcmVjb2Rlci91bmljaGFyc2V0IGNvbXBvbmVudHMpCisrICB3LlB1dFN0cmluZygiIik7 ICAgICAgICAgICAgIC8vIG5ldHdvcmtfc3RyXworKyAgdy5QdXRTMzIoMCk7ICAgICAgICAgICAg ICAgICAvLyB0cmFpbmluZ19mbGFnc18KKysgIHcuUHV0UzMyKDApOyAgICAgICAgICAgICAgICAg Ly8gdHJhaW5pbmdfaXRlcmF0aW9uXworKyAgdy5QdXRTMzIoMCk7ICAgICAgICAgICAgICAgICAv LyBzYW1wbGVfaXRlcmF0aW9uXworKyAgdy5QdXRTMzIoMCk7ICAgICAgICAgICAgICAgICAvLyBu dWxsX2NoYXJfCisrICB3LlB1dFUzMigwKTsgICAgICAgICAgICAgICAgIC8vIGFkYW1fYmV0YV8g KGZsb2F0IDAuMCkKKysgIHcuUHV0VTMyKDApOyAgICAgICAgICAgICAgICAgLy8gbGVhcm5pbmdf cmF0ZV8gKGZsb2F0IDAuMCkKKysgIHcuUHV0VTMyKDApOyAgICAgICAgICAgICAgICAgLy8gbW9t ZW50dW1fIChmbG9hdCAwLjApCisrICByZXR1cm4gdy5kYXRhKCk7CisrfQorKworKy8vIFdyaXRl cyBhIHRyYWluZWRkYXRhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gKGNvcnJ1cHQpIExTVE0gY29tcG9u ZW50IHRvCisrLy8gZGlyL2VuZy50cmFpbmVkZGF0YS4KKytib29sIFdyaXRlQ29ycnVwdFRyYWlu ZWRkYXRhKGNvbnN0IHN0ZDo6c3RyaW5nICZkaXIsIGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+ICZs c3RtKSB7CisrICBUZXNzZGF0YU1hbmFnZXIgbWdyOworKyAgbWdyLk92ZXJ3cml0ZUVudHJ5KFRF U1NEQVRBX0xTVE0sIGxzdG0uZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGxzdG0uc2l6ZSgpKSk7 CisrICByZXR1cm4gbWdyLlNhdmVGaWxlKChkaXIgKyAiL2VuZy50cmFpbmVkZGF0YSIpLmNfc3Ry KCksIG51bGxwdHIpOworK30KKysKKytjbGFzcyBQbHVtYmluZ1Rlc3QgOiBwdWJsaWMgdGVzdGlu Zzo6VGVzdCB7CisrcHJvdGVjdGVkOgorKyAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKKysgICAg dG1wbF8gPSAiL3RtcC90ZXNzX3BsdW1iaW5nX3Rlc3RfWFhYWFhYIjsKKysgICAgY2hhciAqZGly ID0gbWtkdGVtcCh0bXBsXy5kYXRhKCkpOworKyAgICBBU1NFUlRfTkUoZGlyLCBudWxscHRyKTsK KysgICAgZGlyXyA9IGRpcjsKKysgIH0KKysgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7Cisr ICAgIHN0ZDo6cmVtb3ZlKChkaXJfICsgIi9lbmcudHJhaW5lZGRhdGEiKS5jX3N0cigpKTsKKysg ICAgcm1kaXIoZGlyXy5jX3N0cigpKTsKKysgIH0KKysgIC8vIEV4cGVjdHMgdGhlIExTVE0gZW5n aW5lIHRvIHJlamVjdCB0aGUgY29ycnVwdGVkIHRyYWluZWRkYXRhCisrICAvLyBncmFjZWZ1bGx5 IChpbml0IGZhaWx1cmUpIGluc3RlYWQgb2YgY3Jhc2hpbmcuCisrICB2b2lkIEV4cGVjdEluaXRG YWlscyhjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiAmbHN0bSkgeworKyAgICBBU1NFUlRfVFJVRShX cml0ZUNvcnJ1cHRUcmFpbmVkZGF0YShkaXJfLCBsc3RtKSk7CisrICAgIHRlc3NlcmFjdDo6VGVz c0Jhc2VBUEkgYXBpOworKyAgICBFWFBFQ1RfRVEoYXBpLkluaXQoZGlyXy5jX3N0cigpLCAiZW5n IiwgdGVzc2VyYWN0OjpPRU1fTFNUTV9PTkxZKSwgLTEpOworKyAgfQorKyAgc3RkOjpzdHJpbmcg ZGlyXzsKKysgIHN0ZDo6c3RyaW5nIHRtcGxfOworK307CisrCisrLy8gRW1wdHkgTlRfU0VSSUVT IHN0YWNrOiBTZXJpZXM6OkNhY2hlWFNjYWxlRmFjdG9yIHdvdWxkIGRlcmVmZXJlbmNlCisrLy8g c3RhY2tfWzBdIG9uIHRoZSBlbXB0eSB2ZWN0b3IgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorK1RF U1RfRihQbHVtYmluZ1Rlc3QsIFJlamVjdHNFbXB0eVNlcmllc1N0YWNrKSB7CisrICBFeHBlY3RJ bml0RmFpbHMoTWFrZUxzdG1Db21wb25lbnQoTlRfU0VSSUVTLCAwKSk7CisrfQorKworKy8vIEVt cHR5IE5UX1BBUkFMTEVMIHN0YWNrOiBQbHVtYmluZzo6WFNjYWxlRmFjdG9yIHdvdWxkIGRlcmVm ZXJlbmNlCisrLy8gc3RhY2tfWzBdIG9uIHRoZSBlbXB0eSB2ZWN0b3IgZHVyaW5nIGluaXRpYWxp emF0aW9uLgorK1RFU1RfRihQbHVtYmluZ1Rlc3QsIFJlamVjdHNFbXB0eVBhcmFsbGVsU3RhY2sp IHsKKysgIEV4cGVjdEluaXRGYWlscyhNYWtlTHN0bUNvbXBvbmVudChOVF9QQVJBTExFTCwgMCkp OworK30KKysKKysvLyBFbXB0eSBOVF9YUkVWRVJTRUQgc3RhY2s6IHNhbWUgY3Jhc2ggYXMgdGhl IHBhcmFsbGVsIGNhc2UuCisrVEVTVF9GKFBsdW1iaW5nVGVzdCwgUmVqZWN0c0VtcHR5UmV2ZXJz ZWRTdGFjaykgeworKyAgRXhwZWN0SW5pdEZhaWxzKE1ha2VMc3RtQ29tcG9uZW50KE5UX1hSRVZF UlNFRCwgMCkpOworK30KKysKKysvLyBBIFNlcmllcyB3aXRoIGEgc2luZ2xlIG5ldHdvcms6IFNl cmllczo6Rm9yd2FyZCByZXF1aXJlcyBhdCBsZWFzdCB0d28KKysvLyBuZXR3b3Jrcywgc28gc3Vj aCBhIG1vZGVsIGNhbiBuZXZlciB3b3JrLgorK1RFU1RfRihQbHVtYmluZ1Rlc3QsIFJlamVjdHNT aW5nbGVOZXR3b3JrU2VyaWVzKSB7CisrICBFeHBlY3RJbml0RmFpbHMoTWFrZUxzdG1Db21wb25l bnQoTlRfU0VSSUVTLCAxKSk7CisrfQorKworK30gLy8gbmFtZXNwYWNlCisrfSAvLyBuYW1lc3Bh Y2UgdGVzc2VyYWN0CgpkaWZmIC0tZ2l0IGEvNTZlMDljYTEyZTc1MTYyM2ZlNzk2Y2UxNTU0Y2U3 MDRiZmZkMmVmMC5wYXRjaCBiLzU2ZTA5Y2ExMmU3NTE2MjNmZTc5NmNlMTU1NGNlNzA0YmZmZDJl ZjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2NjRiMQotLS0g L2Rldi9udWxsCisrKyBiLzU2ZTA5Y2ExMmU3NTE2MjNmZTc5NmNlMTU1NGNlNzA0YmZmZDJlZjAu cGF0Y2gKQEAgLTAsMCArMSwxNDEgQEAKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNz ZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0gdGVzc2VyYWN0LTUuNS4zLW5ldy9NYWtlZmlsZS5hbQor LS0tIHRlc3NlcmFjdC01LjUuMy9NYWtlZmlsZS5hbQkyMDI2LTA5LTIxIDEwOjI4OjEwLjMzNTQ3 MzY1NyArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0JMjAyNi0wOS0y MSAxMDoyODoxMC4zNDA5OTAxMDYgKzAyMDAKK0BAIC0xMTU5LDYgKzExNTksNyBAQCBjaGVja19Q Uk9HUkFNUyArPSBlcXVhdGlvbmRldGVjdF90ZXN0CisgZW5kaWYgIyAhRElTQUJMRURfTEVHQUNZ X0VOR0lORQorIGNoZWNrX1BST0dSQU1TICs9IGZpbGVpb190ZXN0CisgY2hlY2tfUFJPR1JBTVMg Kz0gZnVsbHljb25uZWN0ZWRfdGVzdAorK2NoZWNrX1BST0dSQU1TICs9IGdlbmVyaWN2ZWN0b3Jf dGVzdAorIGNoZWNrX1BST0dSQU1TICs9IGhlYXBfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IGlt YWdlZGF0YV90ZXN0CisgaWYgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKK0BAIC0xMjk3LDYgKzEy OTgsMTAgQEAgZnVsbHljb25uZWN0ZWRfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvZgorIGZ1bGx5 Y29ubmVjdGVkX3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIGZ1bGx5Y29u bmVjdGVkX3Rlc3RfTERBREQgPSAkKFRFU1NfTElCUykKKyAKKytnZW5lcmljdmVjdG9yX3Rlc3Rf U09VUkNFUyA9IHVuaXR0ZXN0L2dlbmVyaWN2ZWN0b3JfdGVzdC5jYworK2dlbmVyaWN2ZWN0b3Jf dGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisrZ2VuZXJpY3ZlY3Rvcl90ZXN0 X0xEQUREID0gJChURVNTX0xJQlMpCisrCisgaGVhcF90ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9o ZWFwX3Rlc3QuY2MKKyBoZWFwX3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQor IGhlYXBfdGVzdF9MREFERCA9ICQoVEVTU19MSUJTKQorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJl bmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1dGlsL2dlbmVyaWN2ZWN0b3IuaCB0ZXNzZXJhY3Qt NS41LjMtbmV3L3NyYy9jY3V0aWwvZ2VuZXJpY3ZlY3Rvci5oCistLS0gdGVzc2VyYWN0LTUuNS4z L3NyYy9jY3V0aWwvZ2VuZXJpY3ZlY3Rvci5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAw ICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGlsL2dlbmVyaWN2ZWN0b3Iu aAkyMDI2LTA5LTIxIDEwOjI4OjEwLjM0MTY0ODgzOCArMDIwMAorQEAgLTY1NCwxMCArNjU0LDIw IEBAIGJvb2wgR2VuZXJpY1ZlY3RvcjxUPjo6cmVhZChURmlsZSAqZiwgY28KKyAgIGlmIChmLT5G UmVhZEVuZGlhbigmcmVzZXJ2ZWQsIHNpemVvZihyZXNlcnZlZCksIDEpICE9IDEpIHsKKyAgICAg cmV0dXJuIGZhbHNlOworICAgfQorKyAgLy8gQXJiaXRyYXJpbHkgbGltaXQgdGhlIG51bWJlciBv ZiBlbGVtZW50cyB0byBwcm90ZWN0IGFnYWluc3QgYmFkIGRhdGEuCisrICBjb25zdCB1aW50MzJf dCBsaW1pdCA9IDUwMDAwMDAwOworKyAgaWYgKHJlc2VydmVkIDwgMCB8fCBzdGF0aWNfY2FzdDx1 aW50MzJfdD4ocmVzZXJ2ZWQpID4gbGltaXQpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQor ICAgcmVzZXJ2ZShyZXNlcnZlZCk7CisgICBpZiAoZi0+RlJlYWRFbmRpYW4oJnNpemVfdXNlZF8s IHNpemVvZihzaXplX3VzZWRfKSwgMSkgIT0gMSkgeworICAgICByZXR1cm4gZmFsc2U7CisgICB9 CisrICAvLyBzaXplX3VzZWRfIGlzIGFuIGluZGVwZW5kZW50IGZpbGUgZmllbGQ7IHdpdGhvdXQg dGhpcyBjaGVjayB0aGUgcmVhZHMKKysgIC8vIGJlbG93IGxhbmQgcGFzdCB0aGUgZW5kIG9mIHRo ZSBidWZmZXIgc2l6ZWQgZnJvbSByZXNlcnZlZC4KKysgIGlmIChzaXplX3VzZWRfIDwgMCB8fCBz aXplX3VzZWRfID4gcmVzZXJ2ZWQpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorICAgaWYg KGNiICE9IG51bGxwdHIpIHsKKyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplX3VzZWRfOyAr K2kpIHsKKyAgICAgICBpZiAoIWNiKGYsIGRhdGFfICsgaSkpIHsKK2RpZmYgLXJ1cE4gLS1uby1k ZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvZ2VuZXJpY3ZlY3Rvcl90ZXN0LmNj IHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvZ2VuZXJpY3ZlY3Rvcl90ZXN0LmNjCistLS0g dGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2dlbmVyaWN2ZWN0b3JfdGVzdC5jYwkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRl c3QvZ2VuZXJpY3ZlY3Rvcl90ZXN0LmNjCTIwMjYtMDktMjEgMTA6Mjg6MTAuMzQyMDEzNDg0ICsw MjAwCitAQCAtMCwwICsxLDkxIEBACisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysvLyBGaWxlOiAgICAgICAg Z2VuZXJpY3ZlY3Rvcl90ZXN0LmNjCisrLy8gRGVzY3JpcHRpb246IFRlc3RzIHRoYXQgdGhlIGNh bGxiYWNrIGZvcm0gb2YgR2VuZXJpY1ZlY3Rvcjo6cmVhZAorKy8vICAgICAgICAgICAgICByZWpl Y3RzIHZlY3RvcnMgd2hvc2Ugc2l6ZV91c2VkXyBleGNlZWRzIHJlc2VydmVkIChvcgorKy8vICAg ICAgICAgICAgICB3aG9zZSBjb3VudHMgYXJlIG5lZ2F0aXZlKS4gcmVzZXJ2ZWQgc2l6ZXMgdGhl IGJ1ZmZlcgorKy8vICAgICAgICAgICAgICB3aGlsZSBzaXplX3VzZWRfIGlzIGFuIGluZGVwZW5k ZW50IGZpbGUgZmllbGQgZHJpdmluZworKy8vICAgICAgICAgICAgICB0aGUgZWxlbWVudCBsb29w LCBzbyBhIGNyYWZ0ZWQgLnRyYWluZWRkYXRhIChlLmcuIHRoZQorKy8vICAgICAgICAgICAgICBm b250aW5mbyB0YWJsZSBvZiBhIHZlcnNpb24gPj0gNCBpbnR0ZW1wIGNvbXBvbmVudCkKKysvLyAg ICAgICAgICAgICAgcGVyZm9ybXMgYSBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgZHVyaW5nIGxl Z2FjeQorKy8vICAgICAgICAgICAgICBlbmdpbmUgaW5pdGlhbGl6YXRpb24uCisrLy8KKysvLyBM aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu c2UiKTsKKysvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl IHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl bnNlIGF0CisrLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisr Ly8KKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworKworKyNpbmNsdWRlICJpbmNsdWRlX2d1bml0LmgiCisrCisr I2luY2x1ZGUgImdlbmVyaWN2ZWN0b3IuaCIKKysjaW5jbHVkZSAic2VyaWFsaXMuaCIgLy8gZm9y IFRGaWxlCisrCisrI2luY2x1ZGUgPGNzdGRpbnQ+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysKKytu YW1lc3BhY2UgdGVzc2VyYWN0IHsKKytuYW1lc3BhY2UgeworKworKy8vIEFwcGVuZHMgcmF3IGxp dHRsZS1lbmRpYW4gdmFsdWVzIHRvIGEgYnl0ZSBidWZmZXIuCisrY2xhc3MgQnl0ZVdyaXRlciB7 CisrcHVibGljOgorKyAgdm9pZCBQdXRTMzIoaW50MzJfdCB2KSB7CisrICAgIHVpbnQzMl90IHUg PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odik7CisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg KytpKSB7CisrICAgICAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KCh1ID4+ICg4 ICogaSkpICYgMHhGRikpOworKyAgICB9CisrICB9CisrICBjb25zdCBzdGQ6OnZlY3RvcjxjaGFy PiAmZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9CisrCisrcHJpdmF0ZToKKysgIHN0ZDo6 dmVjdG9yPGNoYXI+IGRhdGFfOworK307CisrCisrLy8gQSBzZXJpYWxpemVkIHZlY3RvciBoZWFk ZXIgKHJlc2VydmVkLCBzaXplX3VzZWRfKSBmb2xsb3dlZCBieSB0aGUKKysvLyBnaXZlbiBudW1i ZXIgb2YgaW50MzIgZWxlbWVudHMuCisrc3RkOjp2ZWN0b3I8Y2hhcj4gTWFrZVZlY3RvcihpbnQz Ml90IHJlc2VydmVkLCBpbnQzMl90IHNpemVfdXNlZCwgaW50MzJfdCBudW1fZWxlbWVudHMpIHsK KysgIEJ5dGVXcml0ZXIgdzsKKysgIHcuUHV0UzMyKHJlc2VydmVkKTsKKysgIHcuUHV0UzMyKHNp emVfdXNlZCk7CisrICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBudW1fZWxlbWVudHM7ICsraSkg eworKyAgICB3LlB1dFMzMihpKTsKKysgIH0KKysgIHJldHVybiB3LmRhdGEoKTsKKyt9CisrCisr Ly8gcmVzZXJ2ZWQ9NCBidXQgc2l6ZV91c2VkXz0weDEwMDAwOiBvbiB1bnBhdGNoZWQgY29kZSB0 aGUgY2FsbGJhY2sKKysvLyBsb29wIHdyaXRlcyA2NTUzNiBpbnRzIHBhc3QgdGhlIDQtaW50IGJ1 ZmZlciAoaGVhcCBvdXQtb2YtYm91bmRzCisrLy8gd3JpdGUpLgorK1RFU1QoR2VuZXJpY1ZlY3Rv clRlc3QsIFJlamVjdHNTaXplVXNlZEJleW9uZFJlc2VydmVkKSB7CisrICBzdGQ6OnZlY3Rvcjxj aGFyPiBieXRlcyA9IE1ha2VWZWN0b3IoNCwgMHgxMDAwMCwgMHgxMDAwMCk7CisrICBURmlsZSBm cDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsK KysgIEdlbmVyaWNWZWN0b3I8aW50PiB2OworKyAgRVhQRUNUX0ZBTFNFKHYucmVhZCgmZnAsIFtd KFRGaWxlICpmLCBpbnQgKnApIHsgcmV0dXJuIGYtPkRlU2VyaWFsaXplKHApOyB9KSk7CisrfQor KworKy8vIE5lZ2F0aXZlIGNvdW50cyBtdXN0IGJlIHJlamVjdGVkOyBvbiB1bnBhdGNoZWQgY29k ZSB0aGUgcmVhZAorKy8vICJzdWNjZWVkcyIgYW5kIGxlYXZlcyBzaXplX3VzZWRfIG5lZ2F0aXZl LgorK1RFU1QoR2VuZXJpY1ZlY3RvclRlc3QsIFJlamVjdHNOZWdhdGl2ZUNvdW50cykgeworKyAg c3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXMgPSBNYWtlVmVjdG9yKC0xLCAtMSwgMCk7CisrICBURmls ZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkp KTsKKysgIEdlbmVyaWNWZWN0b3I8aW50PiB2OworKyAgRVhQRUNUX0ZBTFNFKHYucmVhZCgmZnAs IFtdKFRGaWxlICpmLCBpbnQgKnApIHsgcmV0dXJuIGYtPkRlU2VyaWFsaXplKHApOyB9KSk7Cisr fQorKworKy8vIEEgY29uc2lzdGVudCB2ZWN0b3IgbXVzdCBzdGlsbCBiZSBhY2NlcHRlZC4KKytU RVNUKEdlbmVyaWNWZWN0b3JUZXN0LCBBY2NlcHRzQ29uc2lzdGVudFZlY3RvcikgeworKyAgc3Rk Ojp2ZWN0b3I8Y2hhcj4gYnl0ZXMgPSBNYWtlVmVjdG9yKDQsIDIsIDIpOworKyAgVEZpbGUgZnA7 CisrICBBU1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7Cisr ICBHZW5lcmljVmVjdG9yPGludD4gdjsKKysgIEFTU0VSVF9UUlVFKHYucmVhZCgmZnAsIFtdKFRG aWxlICpmLCBpbnQgKnApIHsgcmV0dXJuIGYtPkRlU2VyaWFsaXplKHApOyB9KSk7CisrICBFWFBF Q1RfRVEodi5zaXplKCksIDIpOworKyAgRVhQRUNUX0VRKHZbMF0sIDApOworKyAgRVhQRUNUX0VR KHZbMV0sIDEpOworK30KKysKKyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFtZXNwYWNlIHRlc3Nl cmFjdAoKZGlmZiAtLWdpdCBhLzhiMDU3NDY4MGYzYjIyZjI0NmFkZTZhNGM4ZTMwMjkxMDQyNTVj NjMucGF0Y2ggYi84YjA1NzQ2ODBmM2IyMmYyNDZhZGU2YTRjOGUzMDI5MTA0MjU1YzYzLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWRlYTkKLS0tIC9kZXYvbnVs bAorKysgYi84YjA1NzQ2ODBmM2IyMmYyNDZhZGU2YTRjOGUzMDI5MTA0MjU1YzYzLnBhdGNoCkBA IC0wLDAgKzEsNzYwIEBACitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUu NS4zL01ha2VmaWxlLmFtIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0KKy0tLSB0ZXNz ZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC40Mjg2ODExMzMgKzAy MDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L01ha2VmaWxlLmFtCTIwMjYtMDktMjEgMTA6Mjg6 MTAuNDM2NTAzNTA5ICswMjAwCitAQCAtMTE2NSw2ICsxMTY1LDcgQEAgY2hlY2tfUFJPR1JBTVMg Kz0gaW1hZ2VkYXRhX3Rlc3QKKyBpZiAhRElTQUJMRURfTEVHQUNZX0VOR0lORQorIGNoZWNrX1BS T0dSQU1TICs9IGluZGV4bWFwYmlkaV90ZXN0CisgY2hlY2tfUFJPR1JBTVMgKz0gaW50ZmVhdHVy ZW1hcF90ZXN0CisrY2hlY2tfUFJPR1JBTVMgKz0gaW50cHJvdG9fdGVzdAorIGVuZGlmICMgIURJ U0FCTEVEX0xFR0FDWV9FTkdJTkUKKyBjaGVja19QUk9HUkFNUyArPSBpbnRzaW1kbWF0cml4X3Rl c3QKKyBjaGVja19QUk9HUkFNUyArPSBsYW5nX21vZGVsX3Rlc3QKK0BAIC0xMzIzLDYgKzEzMjQs MTIgQEAgaW50ZmVhdHVyZW1hcF90ZXN0X0NQUEZMQUdTID0gJCh1bml0dGVzdAorIGludGZlYXR1 cmVtYXBfdGVzdF9MREFERCA9ICQoVFJBSU5JTkdfTElCUykKKyBlbmRpZiAjICFESVNBQkxFRF9M RUdBQ1lfRU5HSU5FCisgCisraWYgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKytpbnRwcm90b190 ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9pbnRwcm90b190ZXN0LmNjCisraW50cHJvdG9fdGVzdF9D UFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisraW50cHJvdG9fdGVzdF9MREFERCA9ICQo VEVTU19MSUJTKQorK2VuZGlmICMgIURJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKysKKyBpbnRzaW1k bWF0cml4X3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2ludHNpbWRtYXRyaXhfdGVzdC5jYworIGlu dHNpbWRtYXRyaXhfdGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisgaWYgSEFW RV9BVlgyCitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9j Y21haW4vdGVzc2VkaXQuY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjbWFpbi90ZXNzZWRp dC5jcHAKKy0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NjbWFpbi90ZXNzZWRpdC5jcHAJMjAyNi0w Ny0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3Ny Yy9jY21haW4vdGVzc2VkaXQuY3BwCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDM2ODQyNTc0ICswMjAw CitAQCAtNDE4LDcgKzQxOCw5IEBAIGludCBUZXNzZXJhY3Q6OmluaXRfdGVzc2VyYWN0X2ludGVy bmFsKGMKKyAgIC8vIElmIG9ubHkgTFNUTSB3aWxsIGJlIHVzZWQsIHNraXAgbG9hZGluZyBUZXNz ZXJhY3QgY2xhc3NpZmllcidzCisgICAvLyBwcmUtdHJhaW5lZCB0ZW1wbGF0ZXMgYW5kIGRpY3Rp b25hcnkuCisgICBib29sIGluaXRfdGVzc2VyYWN0ID0gdGVzc2VkaXRfb2NyX2VuZ2luZV9tb2Rl ICE9IE9FTV9MU1RNX09OTFk7CistICBwcm9ncmFtX2VkaXR1cCh0ZXh0YmFzZSwgaW5pdF90ZXNz ZXJhY3QgPyBtZ3IgOiBudWxscHRyLCBpbml0X3Rlc3NlcmFjdCA/IG1nciA6IG51bGxwdHIpOwor KyAgaWYgKCFwcm9ncmFtX2VkaXR1cCh0ZXh0YmFzZSwgaW5pdF90ZXNzZXJhY3QgPyBtZ3IgOiBu dWxscHRyLCBpbml0X3Rlc3NlcmFjdCA/IG1nciA6IG51bGxwdHIpKSB7CisrICAgIHJldHVybiAt MTsKKysgIH0KKyAgIHJldHVybiAwOyAvLyBOb3JtYWwgZXhpdAorIH0KKyAKK2RpZmYgLXJ1cE4g LS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2Njc3RydWN0L2JsYW1lci5oIHRl c3NlcmFjdC01LjUuMy1uZXcvc3JjL2Njc3RydWN0L2JsYW1lci5oCistLS0gdGVzc2VyYWN0LTUu NS4zL3NyYy9jY3N0cnVjdC9ibGFtZXIuaAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCAr MDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2Njc3RydWN0L2JsYW1lci5oCTIwMjYt MDktMjEgMTA6Mjg6MTAuNDM0NTAwNDY3ICswMjAwCitAQCAtMjMyLDYgKzIzMiw3IEBAIHN0cnVj dCBCbGFtZXJCdW5kbGUgeworICAgICAgIGxhdHRpY2Vfc2l6ZV8gPSBvdGhlci5sYXR0aWNlX3Np emVfOworICAgICB9IGVsc2UgeworICAgICAgIGxhdHRpY2VfZGF0YV8gPSBudWxscHRyOworKyAg ICAgIGxhdHRpY2Vfc2l6ZV8gPSAwOworICAgICB9CisgICB9CisgICBjb25zdCBjaGFyICpJbmNv cnJlY3RSZWFzb24oKSBjb25zdDsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJh Y3QtNS41LjMvc3JjL2NjdXRpbC9jbHN0LmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGls L2Nsc3QuaAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1dGlsL2Nsc3QuaAkyMDI2LTA3LTI0 IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2Nj dXRpbC9jbHN0LmgJMjAyNi0wOS0yMSAxMDoyODoxMC40MzQ5MzI5NjYgKzAyMDAKK0BAIC0xNDYs NiArMTQ2LDEzIEBAIHB1YmxpYzoKKyAgIHB1YmxpYzoKKyAgICAgSXRlcmF0b3IoKSB7IC8vIGNv bnN0cnVjdG9yCisgICAgICAgbGlzdCA9IG51bGxwdHI7CisrICAgICAgcHJldiA9IG51bGxwdHI7 CisrICAgICAgY3VycmVudCA9IG51bGxwdHI7CisrICAgICAgbmV4dCA9IG51bGxwdHI7CisrICAg ICAgY3ljbGVfcHQgPSBudWxscHRyOyAvLyBhd2FpdCBleHBsaWNpdCBzZXQKKysgICAgICBzdGFy dGVkX2N5Y2xpbmcgPSBmYWxzZTsKKysgICAgICBleF9jdXJyZW50X3dhc19sYXN0ID0gZmFsc2U7 CisrICAgICAgZXhfY3VycmVudF93YXNfY3ljbGVfcHQgPSBmYWxzZTsKKyAgICAgfSAvLyB1bmFz c2lnbmVkIGxpc3QKKyAKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorZGlmZiAtcnVwTiAtLW5vLWRlcmVm ZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2N1dGlsL2Vsc3QuaCB0ZXNzZXJhY3QtNS41LjMt bmV3L3NyYy9jY3V0aWwvZWxzdC5oCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9jY3V0aWwvZWxz dC5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUu NS4zLW5ldy9zcmMvY2N1dGlsL2Vsc3QuaAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzNTM0OTM0NyAr MDIwMAorQEAgLTIwOSw2ICsyMDksMTMgQEAgcHVibGljOgorICAgcHVibGljOgorICAgICBJdGVy YXRvcigpIHsgLy8gY29uc3RydWN0b3IKKyAgICAgICBsaXN0ID0gbnVsbHB0cjsKKysgICAgICBw cmV2ID0gbnVsbHB0cjsKKysgICAgICBjdXJyZW50ID0gbnVsbHB0cjsKKysgICAgICBuZXh0ID0g bnVsbHB0cjsKKysgICAgICBjeWNsZV9wdCA9IG51bGxwdHI7IC8vIGF3YWl0IGV4cGxpY2l0IHNl dAorKyAgICAgIHN0YXJ0ZWRfY3ljbGluZyA9IGZhbHNlOworKyAgICAgIGV4X2N1cnJlbnRfd2Fz X2xhc3QgPSBmYWxzZTsKKysgICAgICBleF9jdXJyZW50X3dhc19jeWNsZV9wdCA9IGZhbHNlOwor ICAgICB9IC8vIHVuYXNzaWduZWQgbGlzdAorICAgICAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICAg ICAgICAgICAgICAgICAgICAgICAgICBFTElTVF9JVEVSQVRPUjo6RUxJU1RfSVRFUkFUT1IKK2Rp ZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NjdXRpbC9rZHBh aXIuaCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0aWwva2RwYWlyLmgKKy0tLSB0ZXNzZXJh Y3QtNS41LjMvc3JjL2NjdXRpbC9rZHBhaXIuaAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAw MCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NjdXRpbC9rZHBhaXIuaAkyMDI2 LTA5LTIxIDEwOjI4OjEwLjQzNTU5MTUzMiArMDIwMAorQEAgLTk5LDcgKzk5LDcgQEAgc3RydWN0 IEtEUGFpckRlYyA6IHB1YmxpYyBLRFBhaXI8S2V5LCBEYQorIHRlbXBsYXRlIDx0eXBlbmFtZSBL ZXksIHR5cGVuYW1lIERhdGE+CisgY2xhc3MgS0RQdHJQYWlyIHsKKyBwdWJsaWM6CistICBLRFB0 clBhaXIoKSA6IGRhdGFfKG51bGxwdHIpIHt9CisrICBLRFB0clBhaXIoKSA6IGRhdGFfKG51bGxw dHIpLCBrZXlfe30ge30KKyAgIEtEUHRyUGFpcihLZXkgaywgRGF0YSAqZCkgOiBkYXRhXyhkKSwg a2V5XyhrKSB7fQorICAgLy8gQ29weSBjb25zdHJ1Y3RvciBzdGVhbHMgdGhlIHBvaW50ZXIgZnJv bSBzcmMgYW5kIG51bGxzIGl0IGluIHNyYywgdGhlcmVieQorICAgLy8gbW92aW5nIHRoZSAoc2lu Z2xlKSBvd25lcnNoaXAgb2YgdGhlIGRhdGEuCitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2Ug dGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9hZGFwdGl2ZS5jcHAgdGVzc2VyYWN0LTUuNS4z LW5ldy9zcmMvY2xhc3NpZnkvYWRhcHRpdmUuY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9j bGFzc2lmeS9hZGFwdGl2ZS5jcHAJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAK KysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9hZGFwdGl2ZS5jcHAJMjAyNi0w OS0yMSAxMDoyODoxMC40MzcxMTE3MjIgKzAyMDAKK0BAIC02NywxMCArNjcsNiBAQCBBREFQVF9D TEFTU19TVFJVQ1Q6OkFEQVBUX0NMQVNTX1NUUlVDVCgpCisgICBUZW1wUHJvdG9zKE5JTF9MSVNU KSB7CisgICB6ZXJvX2FsbF9iaXRzKFBlcm1Qcm90b3MsIFdvcmRzSW5WZWN0b3JPZlNpemUoTUFY X05VTV9QUk9UT1MpKTsKKyAgIHplcm9fYWxsX2JpdHMoUGVybUNvbmZpZ3MsIFdvcmRzSW5WZWN0 b3JPZlNpemUoTUFYX05VTV9DT05GSUdTKSk7CistCistICBmb3IgKGludCBpID0gMDsgaSA8IE1B WF9OVU1fQ09ORklHUzsgaSsrKSB7CistICAgIFRlbXBDb25maWdGb3IodGhpcywgaSkgPSBudWxs cHRyOworLSAgfQorIH0KKyAKKyBBREFQVF9DTEFTU19TVFJVQ1Q6On5BREFQVF9DTEFTU19TVFJV Q1QoKSB7CitAQCAtOTIsMjUgKzg4LDI0IEBAIEFEQVBUX0NMQVNTX1NUUlVDVDo6fkFEQVBUX0NM QVNTX1NUUlVDVCgKKyAKKyAvLy8gQ29uc3RydWN0b3IgZm9yIGFkYXB0ZWQgdGVtcGxhdGVzLgor IC8vLyBBZGQgYW4gZW1wdHkgY2xhc3MgZm9yIGVhY2ggY2hhciBpbiB1bmljaGFyc2V0IHRvIHRo ZSBuZXdseSBjcmVhdGVkIHRlbXBsYXRlcy4KKy1BREFQVF9URU1QTEFURVNfU1RSVUNUOjpBREFQ VF9URU1QTEFURVNfU1RSVUNUKFVOSUNIQVJTRVQgJnVuaWNoYXJzZXQpIHsKKy0gIFRlbXBsYXRl cyA9IG5ldyBJTlRfVEVNUExBVEVTX1NUUlVDVDsKKy0gIE51bVBlcm1DbGFzc2VzID0gMDsKKy0g IE51bU5vbkVtcHR5Q2xhc3NlcyA9IDA7CistCistICAvKiBJbnNlcnQgYW4gZW1wdHkgY2xhc3Mg Zm9yIGVhY2ggdW5pY2hhciBpZCBpbiB1bmljaGFyc2V0ICovCistICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgTUFYX05VTV9DTEFTU0VTOyBpKyspIHsKKy0gICAgQ2xhc3NbaV0gPSBudWxscHRy OworLSAgICBpZiAoaSA8IHVuaWNoYXJzZXQuc2l6ZSgpKSB7CistICAgICAgQWRkQWRhcHRlZENs YXNzKHRoaXMsIG5ldyBBREFQVF9DTEFTU19TVFJVQ1QsIGkpOworLSAgICB9CisrQURBUFRfVEVN UExBVEVTX1NUUlVDVDo6QURBUFRfVEVNUExBVEVTX1NUUlVDVChVTklDSEFSU0VUICZ1bmljaGFy c2V0KSA6CisrICBUZW1wbGF0ZXMobmV3IElOVF9URU1QTEFURVNfU1RSVUNUKSwgTnVtTm9uRW1w dHlDbGFzc2VzKDApLCBOdW1QZXJtQ2xhc3NlcygwKSB7CisrICAvLyBJbnNlcnQgYW4gZW1wdHkg Y2xhc3MgZm9yIGVhY2ggdW5pY2hhciBpZCBpbiB1bmljaGFyc2V0LgorKyAgLy8gQ2xhc3MgaXMg dmFsdWUtaW5pdGlhbGl6ZWQgdG8gbnVsbHB0ciBpbi1jbGFzcy4KKysgIGZvciAodW5zaWduZWQg aSA9IDA7IGkgPCB1bmljaGFyc2V0LnNpemUoKTsgaSsrKSB7CisrICAgIEFkZEFkYXB0ZWRDbGFz cyh0aGlzLCBuZXcgQURBUFRfQ0xBU1NfU1RSVUNULCBpKTsKKyAgIH0KKyB9CisgCisgQURBUFRf VEVNUExBVEVTX1NUUlVDVDo6fkFEQVBUX1RFTVBMQVRFU19TVFJVQ1QoKSB7CistICBmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgKFRlbXBsYXRlcyktPk51bUNsYXNzZXM7IGkrKykgeworLSAgICBk ZWxldGUgQ2xhc3NbaV07CisrICBpZiAoVGVtcGxhdGVzICE9IG51bGxwdHIpIHsKKysgICAgLy8g TnVtQ2xhc3NlcyBjb21lcyBmcm9tIGFuIHVudHJ1c3RlZCBmaWxlLCBzbyBuZXZlciB0cnVzdCBp dCB0byBib3VuZAorKyAgICAvLyB0aGUgbG9vcCBvdmVyIHRoZSBmaXhlZC1zaXplIENsYXNzW10g YXJyYXkuCisrICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAoVGVtcGxhdGVzKS0+TnVtQ2xh c3NlcyAmJiBpIDwgTUFYX05VTV9DTEFTU0VTOyBpKyspIHsKKysgICAgICBkZWxldGUgQ2xhc3Nb aV07CisrICAgIH0KKysgICAgZGVsZXRlIFRlbXBsYXRlczsKKyAgIH0KKy0gIGRlbGV0ZSBUZW1w bGF0ZXM7CisgfQorIAorIC8vIFJldHVybnMgRm9udGluZm9JZCBvZiB0aGUgZ2l2ZW4gY29uZmln IG9mIHRoZSBnaXZlbiBhZGFwdGVkIGNsYXNzLgorQEAgLTE4MCwyMyArMTc1LDMyIEBAIHZvaWQg Q2xhc3NpZnk6OlByaW50QWRhcHRlZFRlbXBsYXRlcyhGSUwKKyAgKiBAbm90ZSBHbG9iYWxzOiBu b25lCisgICovCisgQURBUFRfQ0xBU1NfU1RSVUNUICpSZWFkQWRhcHRlZENsYXNzKFRGaWxlICpm cCkgeworLSAgaW50IE51bVRlbXBQcm90b3M7CistICBpbnQgTnVtQ29uZmlnczsKKysgIGludCBO dW1UZW1wUHJvdG9zID0gMDsKKysgIGludCBOdW1Db25maWdzID0gMDsKKyAgIGludCBpOworICAg QURBUFRfQ0xBU1NfU1RSVUNUICpDbGFzczsKKyAKKy0gIC8qIGZpcnN0IHJlYWQgaGlnaCBsZXZl bCBhZGFwdGVkIGNsYXNzIHN0cnVjdHVyZSAqLworKyAgLy8gZmlyc3QgcmVhZCBoaWdoIGxldmVs IGFkYXB0ZWQgY2xhc3Mgc3RydWN0dXJlCisgICBDbGFzcyA9IG5ldyBBREFQVF9DTEFTU19TVFJV Q1Q7CisgICBmcC0+RlJlYWQoQ2xhc3MsIHNpemVvZihBREFQVF9DTEFTU19TVFJVQ1QpLCAxKTsK KyAKKy0gIC8qIHRoZW4gcmVhZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHBlcm1hbmVudCBw cm90b3MgYW5kIGNvbmZpZ3MgKi8KKysgIC8vIHRoZW4gcmVhZCBpbiB0aGUgZGVmaW5pdGlvbnMg b2YgdGhlIHBlcm1hbmVudCBwcm90b3MgYW5kIGNvbmZpZ3MKKyAgIENsYXNzLT5QZXJtUHJvdG9z ID0gTmV3Qml0VmVjdG9yKE1BWF9OVU1fUFJPVE9TKTsKKyAgIENsYXNzLT5QZXJtQ29uZmlncyA9 IE5ld0JpdFZlY3RvcihNQVhfTlVNX0NPTkZJR1MpOworICAgZnAtPkZSZWFkKENsYXNzLT5QZXJt UHJvdG9zLCBzaXplb2YodWludDMyX3QpLCBXb3Jkc0luVmVjdG9yT2ZTaXplKE1BWF9OVU1fUFJP VE9TKSk7CisgICBmcC0+RlJlYWQoQ2xhc3MtPlBlcm1Db25maWdzLCBzaXplb2YodWludDMyX3Qp LCBXb3Jkc0luVmVjdG9yT2ZTaXplKE1BWF9OVU1fQ09ORklHUykpOworIAorLSAgLyogdGhlbiBy ZWFkIGluIHRoZSBsaXN0IG9mIHRlbXBvcmFyeSBwcm90b3MgKi8KKysgIC8vIHRoZW4gcmVhZCBp biB0aGUgbGlzdCBvZiB0ZW1wb3JhcnkgcHJvdG9zCisgICBmcC0+RlJlYWQoJk51bVRlbXBQcm90 b3MsIHNpemVvZihpbnQpLCAxKTsKKysgIGlmIChOdW1UZW1wUHJvdG9zIDwgMCB8fCBOdW1UZW1w UHJvdG9zID4gTUFYX05VTV9QUk9UT1MpIHsKKysgICAgdHByaW50ZigiQmFkIHJlYWQgb2YgYWRh cHRlZCBjbGFzcyFcbiIpOworKyAgICAvLyBSZXNldCBmaWxlLXNvdXJjZWQgcG9pbnRlcnMgc28g dGhlIGRlc3RydWN0b3IgZG9lcyBub3QgZGVsZXRlIHRoZW0uCisrICAgIGZvciAoaSA9IDA7IGkg PCBNQVhfTlVNX0NPTkZJR1M7IGkrKykgeworKyAgICAgIENsYXNzLT5Db25maWdbaV0uVGVtcCA9 IG51bGxwdHI7CisrICAgIH0KKysgICAgZGVsZXRlIENsYXNzOworKyAgICByZXR1cm4gbnVsbHB0 cjsKKysgIH0KKyAgIENsYXNzLT5UZW1wUHJvdG9zID0gTklMX0xJU1Q7CisgICBmb3IgKGkgPSAw OyBpIDwgTnVtVGVtcFByb3RvczsgaSsrKSB7CisgICAgIGF1dG8gVGVtcFByb3RvID0gbmV3IFRF TVBfUFJPVE9fU1RSVUNUOworQEAgLTIwNCw4ICsyMDgsMjAgQEAgQURBUFRfQ0xBU1NfU1RSVUNU ICpSZWFkQWRhcHRlZENsYXNzKFRGaQorICAgICBDbGFzcy0+VGVtcFByb3RvcyA9IHB1c2hfbGFz dChDbGFzcy0+VGVtcFByb3RvcywgVGVtcFByb3RvKTsKKyAgIH0KKyAKKy0gIC8qIHRoZW4gcmVh ZCBpbiB0aGUgYWRhcHRlZCBjb25maWdzICovCisrICAvLyB0aGVuIHJlYWQgaW4gdGhlIGFkYXB0 ZWQgY29uZmlncworICAgZnAtPkZSZWFkKCZOdW1Db25maWdzLCBzaXplb2YoaW50KSwgMSk7Cisr ICAvLyBOdW1Db25maWdzIGlzIHVzZWQgYXMgYSBsb29wIGJvdW5kIHRoYXQgd3JpdGVzIGludG8g dGhlIGZpeGVkLXNpemUKKysgIC8vIENvbmZpZ1tdIGFycmF5LCBzbyByZWplY3QgYSBjb3JydXB0 IG9yIG1hbGljaW91cyBmaWxlIGluc3RlYWQgb2YKKysgIC8vIHdyaXRpbmcgb3V0IG9mIGJvdW5k cy4KKysgIGlmIChOdW1Db25maWdzIDwgMCB8fCBOdW1Db25maWdzID4gTUFYX05VTV9DT05GSUdT KSB7CisrICAgIHRwcmludGYoIkJhZCByZWFkIG9mIGFkYXB0ZWQgY2xhc3MhXG4iKTsKKysgICAg Ly8gUmVzZXQgZmlsZS1zb3VyY2VkIHBvaW50ZXJzIHNvIHRoZSBkZXN0cnVjdG9yIGRvZXMgbm90 IGRlbGV0ZSB0aGVtLgorKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9DT05GSUdTOyBpKysp IHsKKysgICAgICBDbGFzcy0+Q29uZmlnW2ldLlRlbXAgPSBudWxscHRyOworKyAgICB9CisrICAg IGRlbGV0ZSBDbGFzczsKKysgICAgcmV0dXJuIG51bGxwdHI7CisrICB9CisgICBmb3IgKGkgPSAw OyBpIDwgTnVtQ29uZmlnczsgaSsrKSB7CisgICAgIGlmICh0ZXN0X2JpdChDbGFzcy0+UGVybUNv bmZpZ3MsIGkpKSB7CisgICAgICAgQ2xhc3MtPkNvbmZpZ1tpXS5QZXJtID0gUmVhZFBlcm1Db25m aWcoZnApOworQEAgLTIzMSwxOCArMjQ3LDM1IEBAIEFEQVBUX0NMQVNTX1NUUlVDVCAqUmVhZEFk YXB0ZWRDbGFzcyhURmkKKyBBREFQVF9URU1QTEFURVNfU1RSVUNUICpDbGFzc2lmeTo6UmVhZEFk YXB0ZWRUZW1wbGF0ZXMoVEZpbGUgKmZwKSB7CisgICBhdXRvIFRlbXBsYXRlcyA9IG5ldyBBREFQ VF9URU1QTEFURVNfU1RSVUNUOworIAorLSAgLyogZmlyc3QgcmVhZCB0aGUgaGlnaCBsZXZlbCBh ZGFwdGl2ZSB0ZW1wbGF0ZSBzdHJ1Y3QgKi8KKy0gIGZwLT5GUmVhZChUZW1wbGF0ZXMsIHNpemVv ZihBREFQVF9URU1QTEFURVNfU1RSVUNUKSwgMSk7CisrICAvLyBmaXJzdCByZWFkIGluIHRoZSBo aWdoIGxldmVsIGFkYXB0aXZlIHRlbXBsYXRlIHN0cnVjdAorKyAgaWYgKGZwLT5GUmVhZChUZW1w bGF0ZXMsIHNpemVvZihBREFQVF9URU1QTEFURVNfU1RSVUNUKSwgMSkgIT0gMSkgeworKyAgICB0 cHJpbnRmKCJCYWQgcmVhZCBvZiBhZGFwdGVkIHRlbXBsYXRlcyFcbiIpOworKyAgICBkZWxldGUg VGVtcGxhdGVzOworKyAgICByZXR1cm4gbnVsbHB0cjsKKysgIH0KKysgIC8vIFRoZSBDbGFzc1td IGFycmF5IHdhcyBqdXN0IGZpbGxlZCB3aXRoIHBvaW50ZXJzIHJlYWQgZnJvbSB0aGUgZmlsZTsK KysgIC8vIHRob3NlIGFyZSBub3QgdmFsaWQgYWxsb2NhdGlvbnMsIHNvIHJlc2V0IGl0IGJlZm9y ZSBzdG9yaW5nIHJlYWwgb25lcy4KKysgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNQVhfTlVN X0NMQVNTRVM7IGkrKykgeworKyAgICBUZW1wbGF0ZXMtPkNsYXNzW2ldID0gbnVsbHB0cjsKKysg IH0KKyAKKy0gIC8qIHRoZW4gcmVhZCBpbiB0aGUgYmFzaWMgaW50ZWdlciB0ZW1wbGF0ZXMgKi8K KysgIC8vIHRoZW4gcmVhZCBpbiB0aGUgYmFzaWMgaW50ZWdlciB0ZW1wbGF0ZXMKKyAgIFRlbXBs YXRlcy0+VGVtcGxhdGVzID0gUmVhZEludFRlbXBsYXRlcyhmcCk7CisrICBpZiAoVGVtcGxhdGVz LT5UZW1wbGF0ZXMgPT0gbnVsbHB0cikgeworKyAgICBkZWxldGUgVGVtcGxhdGVzOworKyAgICBy ZXR1cm4gbnVsbHB0cjsKKysgIH0KKyAKKy0gIC8qIHRoZW4gcmVhZCBpbiB0aGUgYWRhcHRpdmUg aW5mbyBmb3IgZWFjaCBjbGFzcyAqLworKyAgLy8gdGhlbiByZWFkIGluIHRoZSBhZGFwdGl2ZSBp bmZvIGZvciBlYWNoIGNsYXNzCisgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKFRlbXBsYXRl cy0+VGVtcGxhdGVzKS0+TnVtQ2xhc3NlczsgaSsrKSB7CisgICAgIFRlbXBsYXRlcy0+Q2xhc3Nb aV0gPSBSZWFkQWRhcHRlZENsYXNzKGZwKTsKKysgICAgaWYgKFRlbXBsYXRlcy0+Q2xhc3NbaV0g PT0gbnVsbHB0cikgeworKyAgICAgIHRwcmludGYoIkJhZCByZWFkIG9mIGFkYXB0ZWQgdGVtcGxh dGVzIChjbGFzcyAldSkhXG4iLCBpKTsKKysgICAgICBkZWxldGUgVGVtcGxhdGVzOworKyAgICAg IHJldHVybiBudWxscHRyOworKyAgICB9CisgICB9CisgICByZXR1cm4gKFRlbXBsYXRlcyk7Cist CisgfSAvKiBSZWFkQWRhcHRlZFRlbXBsYXRlcyAqLworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNz aWZ5L2FkYXB0aXZlLmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvYWRhcHRpdmUu aAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvYWRhcHRpdmUuaAkyMDI2LTA3LTI0 IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2Ns YXNzaWZ5L2FkYXB0aXZlLmgJMjAyNi0wOS0yMSAxMDoyODoxMC40MzczMzkzOTAgKzAyMDAKK0BA IC0yMCw2ICsyMCw3IEBACisgI2luY2x1ZGUgImludHByb3RvLmgiCisgI2luY2x1ZGUgIm9sZGxp c3QuaCIKKyAKKysjaW5jbHVkZSA8YXJyYXk+CisgI2luY2x1ZGUgPGNzdGRpbz4KKyAKKyBuYW1l c3BhY2UgdGVzc2VyYWN0IHsKK0BAIC02MSwxOCArNjIsMTggQEAgc3RydWN0IEFEQVBUX0NMQVNT X1NUUlVDVCB7CisgICBCSVRfVkVDVE9SIFBlcm1Qcm90b3M7CisgICBCSVRfVkVDVE9SIFBlcm1D b25maWdzOworICAgTElTVCBUZW1wUHJvdG9zOworLSAgQURBUFRFRF9DT05GSUcgQ29uZmlnW01B WF9OVU1fQ09ORklHU107CisrICBzdGQ6OmFycmF5PEFEQVBURURfQ09ORklHLCBNQVhfTlVNX0NP TkZJR1M+IENvbmZpZ3t9OworIH07CisgCisgY2xhc3MgQURBUFRfVEVNUExBVEVTX1NUUlVDVCB7 CisgcHVibGljOgorLSAgQURBUFRfVEVNUExBVEVTX1NUUlVDVCgpID0gZGVmYXVsdDsKKysgIEFE QVBUX1RFTVBMQVRFU19TVFJVQ1QoKSA6IFRlbXBsYXRlcyhudWxscHRyKSwgTnVtTm9uRW1wdHlD bGFzc2VzKDApLCBOdW1QZXJtQ2xhc3NlcygwKSB7fQorICAgQURBUFRfVEVNUExBVEVTX1NUUlVD VChVTklDSEFSU0VUICZ1bmljaGFyc2V0KTsKKyAgIH5BREFQVF9URU1QTEFURVNfU1RSVUNUKCk7 CisgICBJTlRfVEVNUExBVEVTX1NUUlVDVCAqVGVtcGxhdGVzOworICAgaW50IE51bU5vbkVtcHR5 Q2xhc3NlczsKKyAgIHVpbnQ4X3QgTnVtUGVybUNsYXNzZXM7CistICBBREFQVF9DTEFTU19TVFJV Q1QgKkNsYXNzW01BWF9OVU1fQ0xBU1NFU107CisrICBzdGQ6OmFycmF5PEFEQVBUX0NMQVNTX1NU UlVDVCAqLCBNQVhfTlVNX0NMQVNTRVM+IENsYXNze307CisgfTsKKyAKKyAvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3Jj L2NsYXNzaWZ5L2FkYXB0bWF0Y2guY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5 L2FkYXB0bWF0Y2guY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9hZGFwdG1h dGNoLmNwcAkyMDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFj dC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2FkYXB0bWF0Y2guY3BwCTIwMjYtMDktMjEgMTA6Mjg6 MTAuNDM3NjE2MzE4ICswMjAwCitAQCAtNTI0LDkgKzUyNCw5IEBAIHZvaWQgQ2xhc3NpZnk6OkVu ZEFkYXB0aXZlQ2xhc3NpZmllcigpIHsKKyAgKiAgICAgIGNsYXNzaWZ5X3VzZV9wcmVfYWRhcHRl ZF90ZW1wbGF0ZXMKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHVzZSBv ZiBwcmUtYWRhcHRlZCB0ZW1wbGF0ZXMKKyAgKi8KKy12b2lkIENsYXNzaWZ5OjpJbml0QWRhcHRp dmVDbGFzc2lmaWVyKFRlc3NkYXRhTWFuYWdlciAqbWdyKSB7CisrYm9vbCBDbGFzc2lmeTo6SW5p dEFkYXB0aXZlQ2xhc3NpZmllcihUZXNzZGF0YU1hbmFnZXIgKm1ncikgeworICAgaWYgKCFDTEFT U0lGWV9FTkFCTEVfQURBUFRJVkVfTUFUQ0hFUl9PVkVSUklERSkgeworLSAgICByZXR1cm47Cisr ICAgIHJldHVybiB0cnVlOworICAgfQorICAgaWYgKEFsbFByb3Rvc09uICE9IG51bGxwdHIpIHsK KyAgICAgRW5kQWRhcHRpdmVDbGFzc2lmaWVyKCk7IC8vIERvbid0IGxlYWsgd2l0aCBtdWx0aXBs ZSBpbml0cy4KK0BAIC01MzgsNiArNTM4LDExIEBAIHZvaWQgQ2xhc3NpZnk6OkluaXRBZGFwdGl2 ZUNsYXNzaWZpZXIoVGUKKyAgICAgVEZpbGUgZnA7CisgICAgIEFTU0VSVF9IT1NUKG1nci0+R2V0 Q29tcG9uZW50KFRFU1NEQVRBX0lOVFRFTVAsICZmcCkpOworICAgICBQcmVUcmFpbmVkVGVtcGxh dGVzID0gUmVhZEludFRlbXBsYXRlcygmZnApOworKyAgICBpZiAoUHJlVHJhaW5lZFRlbXBsYXRl cyA9PSBudWxscHRyKSB7CisrICAgICAgdHByaW50ZigiRXJyb3I6IGludmFsaWQgaW50dGVtcCBj b21wb25lbnQgaW4gdHJhaW5lZGRhdGEsICIKKysgICAgICAgICAgICAgICJjYW5ub3QgaW5pdGlh bGl6ZSB0aGUgbGVnYWN5IGVuZ2luZS5cbiIpOworKyAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorIAorICAgICBpZiAobWdyLT5HZXRDb21wb25lbnQoVEVTU0RBVEFfU0hBUEVfVEFCTEUsICZm cCkpIHsKKyAgICAgICBzaGFwZV90YWJsZV8gPSBuZXcgU2hhcGVUYWJsZSh1bmljaGFyc2V0KTsK K0BAIC01ODAsMTcgKzU4NSwyMyBAQCB2b2lkIENsYXNzaWZ5OjpJbml0QWRhcHRpdmVDbGFzc2lm aWVyKFRlCisgICAgICAgdHByaW50ZigiXG5SZWFkaW5nIHByZS1hZGFwdGVkIHRlbXBsYXRlcyBm cm9tICVzIC4uLlxuIiwgRmlsZW5hbWUuY19zdHIoKSk7CisgICAgICAgZmZsdXNoKHN0ZG91dCk7 CisgICAgICAgQWRhcHRlZFRlbXBsYXRlcyA9IFJlYWRBZGFwdGVkVGVtcGxhdGVzKCZmcCk7Cist ICAgICAgdHByaW50ZigiXG4iKTsKKy0gICAgICBQcmludEFkYXB0ZWRUZW1wbGF0ZXMoc3Rkb3V0 LCBBZGFwdGVkVGVtcGxhdGVzKTsKKysgICAgICBpZiAoQWRhcHRlZFRlbXBsYXRlcyA9PSBudWxs cHRyKSB7CisrICAgICAgICB0cHJpbnRmKCJFcnJvcjogaW52YWxpZCBwcmUtYWRhcHRlZCB0ZW1w bGF0ZXMgaW4gJXMsIGlnbm9yaW5nLlxuIiwgRmlsZW5hbWUuY19zdHIoKSk7CisrICAgICAgICBB ZGFwdGVkVGVtcGxhdGVzID0gbmV3IEFEQVBUX1RFTVBMQVRFU19TVFJVQ1QodW5pY2hhcnNldCk7 CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHRwcmludGYoIlxuIik7CisrICAgICAgICBQcmlu dEFkYXB0ZWRUZW1wbGF0ZXMoc3Rkb3V0LCBBZGFwdGVkVGVtcGxhdGVzKTsKKyAKKy0gICAgICBm b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRhcHRlZFRlbXBsYXRlcy0+VGVtcGxhdGVzLT5OdW1D bGFzc2VzOyBpKyspIHsKKy0gICAgICAgIEJhc2VsaW5lQ3V0b2Zmc1tpXSA9IENoYXJOb3JtQ3V0 b2Zmc1tpXTsKKysgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGFwdGVkVGVtcGxh dGVzLT5UZW1wbGF0ZXMtPk51bUNsYXNzZXM7IGkrKykgeworKyAgICAgICAgICBCYXNlbGluZUN1 dG9mZnNbaV0gPSBDaGFyTm9ybUN1dG9mZnNbaV07CisrICAgICAgICB9CisgICAgICAgfQorICAg ICB9CisgICB9IGVsc2UgeworICAgICBkZWxldGUgQWRhcHRlZFRlbXBsYXRlczsKKyAgICAgQWRh cHRlZFRlbXBsYXRlcyA9IG5ldyBBREFQVF9URU1QTEFURVNfU1RSVUNUKHVuaWNoYXJzZXQpOwor ICAgfQorKyAgcmV0dXJuIHRydWU7CisgfSAvKiBJbml0QWRhcHRpdmVDbGFzc2lmaWVyICovCisg Cisgdm9pZCBDbGFzc2lmeTo6UmVzZXRBZGFwdGl2ZUNsYXNzaWZpZXJJbnRlcm5hbCgpIHsKK0BA IC0xMjQwLDggKzEyNTEsOCBAQCBVTklDSEFSX0lEICpDbGFzc2lmeTo6QmFzZWxpbmVDbGFzc2lm aWVyCisgICB9CisgCisgICBNYXN0ZXJNYXRjaGVyKFRlbXBsYXRlcy0+VGVtcGxhdGVzLCBpbnRf ZmVhdHVyZXMuc2l6ZSgpLCAmaW50X2ZlYXR1cmVzWzBdLCBDaGFyTm9ybUFycmF5LAorLSAgICAg ICAgICAgICAgICBUZW1wbGF0ZXMtPkNsYXNzLCBtYXRjaGVyX2RlYnVnX2ZsYWdzLCAwLCBCbG9i LT5ib3VuZGluZ19ib3goKSwgUmVzdWx0cy0+Q1BSZXN1bHRzLAorLSAgICAgICAgICAgICAgICBS ZXN1bHRzKTsKKysgICAgICAgICAgICAgICAgVGVtcGxhdGVzLT5DbGFzcy5kYXRhKCksIG1hdGNo ZXJfZGVidWdfZmxhZ3MsIDAsIEJsb2ItPmJvdW5kaW5nX2JveCgpLAorKyAgICAgICAgICAgICAg ICBSZXN1bHRzLT5DUFJlc3VsdHMsIFJlc3VsdHMpOworIAorICAgZGVsZXRlW10gQ2hhck5vcm1B cnJheTsKKyAgIENMQVNTX0lEIENsYXNzSWQgPSBSZXN1bHRzLT5iZXN0X3VuaWNoYXJfaWQ7Citk aWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9j bGFzc2lmeS5oIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5L2NsYXNzaWZ5LmgKKy0t LSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2NsYXNzaWZ5LmgJMjAyNi0wNy0yNCAyMDoy NzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lm eS9jbGFzc2lmeS5oCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDM4MDUwNDYyICswMjAwCitAQCAtMTY0 LDcgKzE2NCw3IEBAIHB1YmxpYzoKKyAgIC8vIHByb3ZpZGVkIHRvIGV4cGxpY2l0bHkgY2xhcmlm eSB0aGUgY2hhcmFjdGVyIHNlZ21lbnRhdGlvbi4KKyAgIHZvaWQgTGVhcm5QaWVjZXMoY29uc3Qg Y2hhciAqZm9udG5hbWUsIGludCBzdGFydCwgaW50IGxlbmd0aCwgZmxvYXQgdGhyZXNob2xkLAor ICAgICAgICAgICAgICAgICAgICBDaGFyU2VnbWVudGF0aW9uVHlwZSBzZWdtZW50YXRpb24sIGNv bnN0IGNoYXIgKmNvcnJlY3RfdGV4dCwgV0VSRF9SRVMgKndvcmQpOworLSAgdm9pZCBJbml0QWRh cHRpdmVDbGFzc2lmaWVyKFRlc3NkYXRhTWFuYWdlciAqbWdyKTsKKysgIGJvb2wgSW5pdEFkYXB0 aXZlQ2xhc3NpZmllcihUZXNzZGF0YU1hbmFnZXIgKm1ncik7CisgICB2b2lkIEluaXRBZGFwdGVk Q2xhc3MoVEJMT0IgKkJsb2IsIENMQVNTX0lEIENsYXNzSWQsIGludCBGb250aW5mb0lkLCBBREFQ VF9DTEFTU19TVFJVQ1QgKkNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFEQVBUX1RF TVBMQVRFU19TVFJVQ1QgKlRlbXBsYXRlcyk7CisgICB2b2lkIEFtYmlnQ2xhc3NpZmllcihjb25z dCBzdGQ6OnZlY3RvcjxJTlRfRkVBVFVSRV9TVFJVQ1Q+ICZpbnRfZmVhdHVyZXMsCitkaWZmIC1y dXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9jbHVzdGVy LmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvY2x1c3Rlci5oCistLS0gdGVzc2Vy YWN0LTUuNS4zL3NyYy9jbGFzc2lmeS9jbHVzdGVyLmgJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAw MDAwMDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9jbHVzdGVy LmgJMjAyNi0wOS0yMSAxMDoyODoxMC40MzU3NjU5NzQgKzAyMDAKK0BAIC0zMiw3ICszMiw3IEBA IGNvbnN0ZXhwciBpbnQgTUFYQlVDS0VUUyA9IDM5OworICAgICAgICAgICBUeXBlcworIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworIHN0cnVjdCBDTFVTVEVSIHsKKy0gIENMVVNURVIoc2l6ZV90IG4pIDogTWVh bihuKSB7CisrICBDTFVTVEVSKHNpemVfdCBuKSA6IExlZnQobnVsbHB0ciksIFJpZ2h0KG51bGxw dHIpLCBNZWFuKG4pIHsKKyAgIH0KKyAKKyAgIH5DTFVTVEVSKCkgeworZGlmZiAtcnVwTiAtLW5v LWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvZmVhdGRlZnMuaCB0ZXNz ZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9mZWF0ZGVmcy5oCistLS0gdGVzc2VyYWN0LTUu NS4zL3NyYy9jbGFzc2lmeS9mZWF0ZGVmcy5oCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAw ICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvZmVhdGRlZnMuaAky MDI2LTA5LTIxIDEwOjI4OjEwLjQzNTkzMjAzOSArMDIwMAorQEAgLTQ3LDkgKzQ3LDggQEAgdXNp bmcgRkVBVFVSRV9ERUZTID0gRkVBVFVSRV9ERUZTX1NUUlVDVAorIHN0cnVjdCBDSEFSX0RFU0Nf U1RSVUNUIHsKKyAgIC8vLyBBbGxvY2F0ZSBhIG5ldyBjaGFyYWN0ZXIgZGVzY3JpcHRpb24sIGlu aXRpYWxpemUgaXRzCisgICAvLy8gZmVhdHVyZSBzZXRzIHRvIGJlIGVtcHR5LCBhbmQgcmV0dXJu IGl0LgorLSAgQ0hBUl9ERVNDX1NUUlVDVChjb25zdCBGRUFUVVJFX0RFRlNfU1RSVUNUICZGZWF0 dXJlRGVmcykgeworLSAgICBOdW1GZWF0dXJlU2V0cyA9IEZlYXR1cmVEZWZzLk51bUZlYXR1cmVU eXBlczsKKy0gIH0KKysgIENIQVJfREVTQ19TVFJVQ1QoY29uc3QgRkVBVFVSRV9ERUZTX1NUUlVD VCAmRmVhdHVyZURlZnMpCisrICAgICAgOiBOdW1GZWF0dXJlU2V0cyhGZWF0dXJlRGVmcy5OdW1G ZWF0dXJlVHlwZXMpLCBGZWF0dXJlU2V0c3t9IHt9CisgCisgICAvLy8gUmVsZWFzZSB0aGUgbWVt b3J5IGNvbnN1bWVkIGJ5IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyCisgICAvLy8gZGVzY3JpcHRp b24gYW5kIGFsbCBvZiB0aGUgZmVhdHVyZXMgaW4gdGhhdCBkZXNjcmlwdGlvbi4KK2RpZmYgLXJ1 cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2ludHByb3Rv LmNwcCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jbGFzc2lmeS9pbnRwcm90by5jcHAKKy0tLSB0 ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNzaWZ5L2ludHByb3RvLmNwcAkyMDI2LTA3LTI0IDIwOjI3 OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2NsYXNzaWZ5 L2ludHByb3RvLmNwcAkyMDI2LTA5LTIxIDEwOjI4OjEwLjQzOTI1MzYyMSArMDIwMAorQEAgLTI4 NiwxMSArMjg2LDEwIEBAIGludCBBZGRJbnRQcm90byhJTlRfQ0xBU1NfU1RSVUNUICpDbGFzcykK KyAgICAgQ2xhc3MtPlByb3RvTGVuZ3Rocy5yZXNpemUoTWF4TnVtSW50UHJvdG9zSW4oQ2xhc3Mp KTsKKyAgIH0KKyAKKy0gIC8qIGluaXRpYWxpemUgcHJvdG8gc28gaXRzIGxlbmd0aCBpcyB6ZXJv IGFuZCBpdCBpc24ndCBpbiBhbnkgY29uZmlncyAqLworKyAgLy8gaW5pdGlhbGl6ZSBwcm90byBz byBpdHMgbGVuZ3RoIGlzIHplcm8gYW5kIGl0IGlzbid0IGluIGFueSBjb25maWdzCisgICBDbGFz cy0+UHJvdG9MZW5ndGhzW0luZGV4XSA9IDA7CisgICBhdXRvIFByb3RvID0gUHJvdG9Gb3JQcm90 b0lkKENsYXNzLCBJbmRleCk7CistICBmb3IgKHVpbnQzMl90ICpXb3JkID0gUHJvdG8tPkNvbmZp Z3M7IFdvcmQgPCBQcm90by0+Q29uZmlncyArIFdFUkRTX1BFUl9DT05GSUdfVkVDOyAqV29yZCsr ID0gMCkgeworLSAgfQorKyAgUHJvdG8tPkNvbmZpZ3MuZmlsbCgwKTsKKyAKKyAgIHJldHVybiAo SW5kZXgpOworIH0KK0BAIC01ODMsMzggKzU4MiwzNiBAQCBJTlRfQ0xBU1NfU1RSVUNUOjpJTlRf Q0xBU1NfU1RSVUNUKGludCBNCisgICBhc3NlcnQoTnVtUHJvdG9TZXRzIDw9IE1BWF9OVU1fUFJP VE9fU0VUUyk7CisgCisgICBmb3IgKGludCBpID0gMDsgaSA8IE51bVByb3RvU2V0czsgaSsrKSB7 CistICAgIC8qIGFsbG9jYXRlIHNwYWNlIGZvciBhIHByb3RvIHNldCwgaW5zdGFsbCBpbiBjbGFz cywgYW5kIGluaXRpYWxpemUgKi8KKysgICAgLy8gYWxsb2NhdGUgc3BhY2UgZm9yIGEgcHJvdG8g c2V0LCBpbnN0YWxsIGluIGNsYXNzLCBhbmQgaW5pdGlhbGl6ZQorICAgICBhdXRvIFByb3RvU2V0 ID0gbmV3IFBST1RPX1NFVF9TVFJVQ1Q7CisgICAgIG1lbXNldChQcm90b1NldCwgMCwgc2l6ZW9m KCpQcm90b1NldCkpOworICAgICBQcm90b1NldHNbaV0gPSBQcm90b1NldDsKKyAKKy0gICAgLyog YWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBwcm90byBsZW5ndGhzIGFuZCBpbnN0YWxsIGluIGNsYXNz ICovCisrICAgIC8vIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgcHJvdG8gbGVuZ3RocyBhbmQgaW5z dGFsbCBpbiBjbGFzcworICAgfQorLSAgbWVtc2V0KENvbmZpZ0xlbmd0aHMsIDAsIHNpemVvZihD b25maWdMZW5ndGhzKSk7CisgfQorIAorIElOVF9DTEFTU19TVFJVQ1Q6On5JTlRfQ0xBU1NfU1RS VUNUKCkgeworLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Qcm90b1NldHM7IGkrKykgeworKyAg Ly8gTnVtUHJvdG9TZXRzIGNvbWVzIGZyb20gYW4gdW50cnVzdGVkIGZpbGUsIHNvIG5ldmVyIHRy dXN0IGl0IHRvIGJvdW5kCisrICAvLyB0aGUgbG9vcCBvdmVyIHRoZSBmaXhlZC1zaXplIFByb3Rv U2V0c1tdIGFycmF5LgorKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Qcm90b1NldHMgJiYgaSA8 IE1BWF9OVU1fUFJPVE9fU0VUUzsgaSsrKSB7CisgICAgIGRlbGV0ZSBQcm90b1NldHNbaV07Cisg ICB9CisgfQorIAorIC8vLyBUaGlzIGNvbnN0cnVjdG9yIGFsbG9jYXRlcyBhIG5ldyBzZXQgb2Yg aW50ZWdlciB0ZW1wbGF0ZXMKKyAvLy8gaW5pdGlhbGl6ZWQgdG8gaG9sZCAwIGNsYXNzZXMuCist SU5UX1RFTVBMQVRFU19TVFJVQ1Q6OklOVF9URU1QTEFURVNfU1RSVUNUKCkgeworLSAgTnVtQ2xh c3NlcyA9IDA7CistICBOdW1DbGFzc1BydW5lcnMgPSAwOworLQorLSAgZm9yIChpbnQgaSA9IDA7 IGkgPCBNQVhfTlVNX0NMQVNTRVM7IGkrKykgeworLSAgICBDbGFzc0ZvckNsYXNzSWQodGhpcywg aSkgPSBudWxscHRyOworLSAgfQorK0lOVF9URU1QTEFURVNfU1RSVUNUOjpJTlRfVEVNUExBVEVT X1NUUlVDVCgpIDogTnVtQ2xhc3NlcygwKSwgTnVtQ2xhc3NQcnVuZXJzKDApIHsKKysgIC8vIENs YXNzIGFuZCBDbGFzc1BydW5lcnMgYXJlIHZhbHVlLWluaXRpYWxpemVkIHRvIG51bGxwdHIgaW4t Y2xhc3MuCisgfQorIAorIElOVF9URU1QTEFURVNfU1RSVUNUOjp+SU5UX1RFTVBMQVRFU19TVFJV Q1QoKSB7CistICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtQ2xhc3NlczsgaSsrKSB7Cisr ICAvLyBUaGUgY291bnRzIGNvbWUgZnJvbSBhbiB1bnRydXN0ZWQgZmlsZSwgc28gbmV2ZXIgdHJ1 c3QgdGhlbSB0byBib3VuZAorKyAgLy8gdGhlIGxvb3BzIG92ZXIgdGhlIGZpeGVkLXNpemUgYXJy YXlzLgorKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUNsYXNzZXMgJiYgaSA8IE1BWF9O VU1fQ0xBU1NFUzsgaSsrKSB7CisgICAgIGRlbGV0ZSBDbGFzc1tpXTsKKyAgIH0KKy0gIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBOdW1DbGFzc1BydW5lcnM7IGkrKykgeworKyAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IE51bUNsYXNzUHJ1bmVycyAmJiBpIDwgTUFYX05VTV9DTEFTU19QUlVO RVJTOyBpKyspIHsKKyAgICAgZGVsZXRlIENsYXNzUHJ1bmVyc1tpXTsKKyAgIH0KKyB9CitAQCAt NjY2LDYgKzY2MywyMCBAQCBJTlRfVEVNUExBVEVTX1NUUlVDVCAqQ2xhc3NpZnk6OlJlYWRJbnRU CisgICAgIFRlbXBsYXRlcy0+TnVtQ2xhc3NlcyA9IHZlcnNpb25faWQ7CisgICB9CisgCisrICAv LyBUaGUgY291bnRzIHJlYWQgZnJvbSB0aGUgZmlsZSBhcmUgdXNlZCBhcyBsb29wIGJvdW5kcyB0 aGF0IHdyaXRlIGludG8KKysgIC8vIGZpeGVkLXNpemUgYXJyYXlzIChDbGFzc1tdLCBDbGFzc1By dW5lcnNbXSwgVGVtcENsYXNzUHJ1bmVyW10gYW5kCisrICAvLyBJbmRleEZvcltdKSwgc28gcmVq ZWN0IGEgY29ycnVwdCBvciBtYWxpY2lvdXMgZmlsZSBpbnN0ZWFkIG9mIHdyaXRpbmcKKysgIC8v IG91dCBvZiBib3VuZHMuCisrICBpZiAodW5pY2hhcnNldF9zaXplID4gTUFYX05VTV9DTEFTU0VT IHx8CisrICAgICAgVGVtcGxhdGVzLT5OdW1DbGFzc1BydW5lcnMgPiBNQVhfTlVNX0NMQVNTX1BS VU5FUlMgfHwKKysgICAgICBUZW1wbGF0ZXMtPk51bUNsYXNzZXMgPiBNQVhfTlVNX0NMQVNTRVMp IHsKKysgICAgdHByaW50ZigiRXJyb3I6IGludmFsaWQgY291bnRzIGluIGludHRlbXA6IHVuaWNo YXJzZXRfc2l6ZT0ldSwgTnVtQ2xhc3NQcnVuZXJzPSV1LCAiCisrICAgICAgICAgICAgIk51bUNs YXNzZXM9JXVcbiIsCisrICAgICAgICAgICAgdW5pY2hhcnNldF9zaXplLCBUZW1wbGF0ZXMtPk51 bUNsYXNzUHJ1bmVycywgVGVtcGxhdGVzLT5OdW1DbGFzc2VzKTsKKysgICAgZGVsZXRlIFRlbXBs YXRlczsKKysgICAgcmV0dXJuIG51bGxwdHI7CisrICB9CisrCisgICBpZiAodmVyc2lvbl9pZCA8 IDMpIHsKKyAgICAgTWF4TnVtQ29uZmlncyA9IE9MRF9NQVhfTlVNX0NPTkZJR1M7CisgICAgIFdl cmRzUGVyQ29uZmlnVmVjID0gT0xEX1dFUkRTX1BFUl9DT05GSUdfVkVDOworQEAgLTcwNSw2ICs3 MTYsMTYgQEAgSU5UX1RFTVBMQVRFU19TVFJVQ1QgKkNsYXNzaWZ5OjpSZWFkSW50VAorICAgICAg ICAgbWF4X2NsYXNzX2lkID0gQ2xhc3NJZEZvcltpXTsKKyAgICAgICB9CisgICAgIH0KKysgICAg Ly8gQ2xhc3MgaWRzIGluZGV4IENsYXNzW10gYW5kIChkaXZpZGVkIGJ5IENMQVNTRVNfUEVSX0NQ KSBDbGFzc1BydW5lcnNbXSwKKysgICAgLy8gc28gcmVqZWN0IGEgY29ycnVwdCBvciBtYWxpY2lv dXMgZmlsZSBpbnN0ZWFkIG9mIHdyaXRpbmcgb3V0IG9mIGJvdW5kcy4KKysgICAgaWYgKG1heF9j bGFzc19pZCA+PSBNQVhfTlVNX0NMQVNTRVMpIHsKKysgICAgICB0cHJpbnRmKCJFcnJvcjogY2xh c3MgaWQgJXUgaW4gaW50dGVtcCBleGNlZWRzIE1BWF9OVU1fQ0xBU1NFU1xuIiwgbWF4X2NsYXNz X2lkKTsKKysgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgVGVtcGxhdGVzLT5OdW1DbGFz c1BydW5lcnM7IGkrKykgeworKyAgICAgICAgZGVsZXRlIFRlbXBDbGFzc1BydW5lcltpXTsKKysg ICAgICB9CisrICAgICAgZGVsZXRlIFRlbXBsYXRlczsKKysgICAgICByZXR1cm4gbnVsbHB0cjsK KysgICAgfQorICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBDUHJ1bmVySWRGb3IobWF4X2NsYXNz X2lkKTsgaSsrKSB7CisgICAgICAgVGVtcGxhdGVzLT5DbGFzc1BydW5lcnNbaV0gPSBuZXcgQ0xB U1NfUFJVTkVSX1NUUlVDVDsKKyAgICAgICBtZW1zZXQoVGVtcGxhdGVzLT5DbGFzc1BydW5lcnNb aV0sIDAsIHNpemVvZihDTEFTU19QUlVORVJfU1RSVUNUKSk7CitAQCAtNzc0LDggKzc5NSwyMCBA QCBJTlRfVEVNUExBVEVTX1NUUlVDVCAqQ2xhc3NpZnk6OlJlYWRJbnRUCisgICAgICAgfQorICAg ICB9CisgICAgIHVuc2lnbmVkIG51bV9jb25maWdzID0gdmVyc2lvbl9pZCA8IDQgPyBNYXhOdW1D b25maWdzIDogQ2xhc3MtPk51bUNvbmZpZ3M7CistICAgIEFTU0VSVF9IT1NUKG51bV9jb25maWdz IDw9IE1heE51bUNvbmZpZ3MpOworLSAgICBpZiAoZnAtPkZSZWFkRW5kaWFuKENsYXNzLT5Db25m aWdMZW5ndGhzLCBzaXplb2YodWludDE2X3QpLCBudW1fY29uZmlncykgIT0gbnVtX2NvbmZpZ3Mp IHsKKysgICAgLy8gQ2xhc3MtPk51bVByb3RvU2V0cyBpcyB1c2VkIGFzIGEgbG9vcCBib3VuZCB0 aGF0IHdyaXRlcyBpbnRvIHRoZQorKyAgICAvLyBmaXhlZC1zaXplIFByb3RvU2V0c1tdIGFycmF5 LCBzbyByZWplY3QgYSBjb3JydXB0IG9yIG1hbGljaW91cyBmaWxlCisrICAgIC8vIGluc3RlYWQg b2Ygd3JpdGluZyBvdXQgb2YgYm91bmRzLgorKyAgICBpZiAoQ2xhc3MtPk51bVByb3RvcyA+IE1B WF9OVU1fUFJPVE9TIHx8IENsYXNzLT5OdW1Qcm90b1NldHMgPiBNQVhfTlVNX1BST1RPX1NFVFMg fHwKKysgICAgICAgIG51bV9jb25maWdzID4gTWF4TnVtQ29uZmlncykgeworKyAgICAgIHRwcmlu dGYoIkVycm9yOiBpbnZhbGlkIGNvdW50cyBmb3IgY2xhc3MgJXUgaW4gaW50dGVtcDogTnVtUHJv dG9zPSV1LCBOdW1Qcm90b1NldHM9JXUsICIKKysgICAgICAgICAgICAgICJOdW1Db25maWdzPSV1 XG4iLAorKyAgICAgICAgICAgICAgaSwgQ2xhc3MtPk51bVByb3RvcywgQ2xhc3MtPk51bVByb3Rv U2V0cywgQ2xhc3MtPk51bUNvbmZpZ3MpOworKyAgICAgIENsYXNzLT5OdW1Qcm90b1NldHMgPSAw OyAvLyBubyBwcm90byBzZXRzIGFsbG9jYXRlZCB5ZXQ7IGtlZXAgZGVzdHJ1Y3RvciBzYWZlCisr ICAgICAgZGVsZXRlIENsYXNzOworKyAgICAgIGRlbGV0ZSBUZW1wbGF0ZXM7CisrICAgICAgcmV0 dXJuIG51bGxwdHI7CisrICAgIH0KKysgICAgaWYgKGZwLT5GUmVhZEVuZGlhbihDbGFzcy0+Q29u ZmlnTGVuZ3Rocy5kYXRhKCksIHNpemVvZih1aW50MTZfdCksIG51bV9jb25maWdzKSAhPSBudW1f Y29uZmlncykgeworICAgICAgIHRwcmludGYoIkJhZCByZWFkIG9mIGludHRlbXAhXG4iKTsKKyAg ICAgfQorICAgICBpZiAodmVyc2lvbl9pZCA8IDIpIHsKK0BAIC04MDksOCArODQyLDkgQEAgSU5U X1RFTVBMQVRFU19TVFJVQ1QgKkNsYXNzaWZ5OjpSZWFkSW50VAorICAgICAgICAgICAgIGZwLT5G UmVhZCgmUHJvdG9TZXQtPlByb3Rvc1t4XS5BbmdsZSwgc2l6ZW9mKFByb3RvU2V0LT5Qcm90b3Nb eF0uQW5nbGUpLCAxKSAhPSAxKSB7CisgICAgICAgICAgIHRwcmludGYoIkJhZCByZWFkIG9mIGlu dHRlbXAhXG4iKTsKKyAgICAgICAgIH0KKy0gICAgICAgIGlmIChmcC0+RlJlYWRFbmRpYW4oJlBy b3RvU2V0LT5Qcm90b3NbeF0uQ29uZmlncywgc2l6ZW9mKFByb3RvU2V0LT5Qcm90b3NbeF0uQ29u Zmlnc1swXSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlcmRzUGVyQ29uZmlnVmVj KSAhPSBXZXJkc1BlckNvbmZpZ1ZlYykgeworKyAgICAgICAgaWYgKGZwLT5GUmVhZEVuZGlhbihQ cm90b1NldC0+UHJvdG9zW3hdLkNvbmZpZ3MuZGF0YSgpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoUHJvdG9TZXQtPlByb3Rvc1t4XS5Db25maWdzWzBdKSwgV2VyZHNQZXJD b25maWdWZWMpICE9CisrICAgICAgICAgICAgV2VyZHNQZXJDb25maWdWZWMpIHsKKyAgICAgICAg ICAgdHByaW50ZigiQmFkIHJlYWQgb2YgaW50dGVtcCFcbiIpOworICAgICAgICAgfQorICAgICAg IH0KK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NsYXNz aWZ5L2ludHByb3RvLmggdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2xhc3NpZnkvaW50cHJvdG8u aAorLS0tIHRlc3NlcmFjdC01LjUuMy9zcmMvY2xhc3NpZnkvaW50cHJvdG8uaAkyMDI2LTA3LTI0 IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2Ns YXNzaWZ5L2ludHByb3RvLmgJMjAyNi0wOS0yMSAxMDoyODoxMC40Mzk3MDk3ODQgKzAyMDAKK0BA IC04MCwxNCArODAsMTQgQEAgc3RydWN0IElOVF9QUk9UT19TVFJVQ1QgeworICAgdWludDhfdCBC OworICAgaW50OF90IEM7CisgICB1aW50OF90IEFuZ2xlOworLSAgdWludDMyX3QgQ29uZmlnc1tX RVJEU19QRVJfQ09ORklHX1ZFQ107CisrICBzdGQ6OmFycmF5PHVpbnQzMl90LCBXRVJEU19QRVJf Q09ORklHX1ZFQz4gQ29uZmlnc3t9OworIH07CisgCisgdHlwZWRlZiB1aW50MzJfdCBQUk9UT19Q UlVORVJbTlVNX1BQX1BBUkFNU11bTlVNX1BQX0JVQ0tFVFNdW1dFUkRTX1BFUl9QUF9WRUNUT1Jd OworIAorIHN0cnVjdCBQUk9UT19TRVRfU1RSVUNUIHsKKyAgIFBST1RPX1BSVU5FUiBQcm90b1By dW5lcjsKKy0gIElOVF9QUk9UT19TVFJVQ1QgUHJvdG9zW1BST1RPU19QRVJfUFJPVE9fU0VUXTsK KysgIHN0ZDo6YXJyYXk8SU5UX1BST1RPX1NUUlVDVCwgUFJPVE9TX1BFUl9QUk9UT19TRVQ+IFBy b3Rvc3t9OworIH07CisgCisgdHlwZWRlZiB1aW50MzJfdCBDT05GSUdfUFJVTkVSW05VTV9QUF9Q QVJBTVNdW05VTV9QUF9CVUNLRVRTXVs0XTsKK0BAIC05OSw5ICs5OSw5IEBAIHN0cnVjdCBJTlRf Q0xBU1NfU1RSVUNUIHsKKyAgIHVpbnQxNl90IE51bVByb3RvcyA9IDA7CisgICB1aW50OF90IE51 bVByb3RvU2V0cyA9IDA7CisgICB1aW50OF90IE51bUNvbmZpZ3MgPSAwOworLSAgUFJPVE9fU0VU X1NUUlVDVCAqUHJvdG9TZXRzW01BWF9OVU1fUFJPVE9fU0VUU107CisrICBzdGQ6OmFycmF5PFBS T1RPX1NFVF9TVFJVQ1QgKiwgTUFYX05VTV9QUk9UT19TRVRTPiBQcm90b1NldHN7fTsKKyAgIHN0 ZDo6dmVjdG9yPHVpbnQ4X3Q+IFByb3RvTGVuZ3RoczsKKy0gIHVpbnQxNl90IENvbmZpZ0xlbmd0 aHNbTUFYX05VTV9DT05GSUdTXTsKKysgIHN0ZDo6YXJyYXk8dWludDE2X3QsIE1BWF9OVU1fQ09O RklHUz4gQ29uZmlnTGVuZ3Roc3t9OworICAgaW50IGZvbnRfc2V0X2lkID0gMDsgLy8gRm9udFNl dCBpZCwgc2VlIGFib3ZlCisgfTsKKyAKK0BAIC0xMTAsOCArMTEwLDggQEAgc3RydWN0IFRFU1Nf QVBJIElOVF9URU1QTEFURVNfU1RSVUNUIHsKKyAgIH5JTlRfVEVNUExBVEVTX1NUUlVDVCgpOwor ICAgdW5zaWduZWQgTnVtQ2xhc3NlczsKKyAgIHVuc2lnbmVkIE51bUNsYXNzUHJ1bmVyczsKKy0g IElOVF9DTEFTU19TVFJVQ1QgKkNsYXNzW01BWF9OVU1fQ0xBU1NFU107CistICBDTEFTU19QUlVO RVJfU1RSVUNUICpDbGFzc1BydW5lcnNbTUFYX05VTV9DTEFTU19QUlVORVJTXTsKKysgIHN0ZDo6 YXJyYXk8SU5UX0NMQVNTX1NUUlVDVCAqLCBNQVhfTlVNX0NMQVNTRVM+IENsYXNze307CisrICBz dGQ6OmFycmF5PENMQVNTX1BSVU5FUl9TVFJVQ1QgKiwgTUFYX05VTV9DTEFTU19QUlVORVJTPiBD bGFzc1BydW5lcnN7fTsKKyB9OworIAorIC8qIGRlZmluaXRpb25zIG9mIGludGVnZXIgZmVhdHVy ZXMqLworZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01LjUuMy9zcmMvd29y ZHJlYy90ZmFjZS5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvd29yZHJlYy90ZmFjZS5jcHAK Ky0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL3dvcmRyZWMvdGZhY2UuY3BwCTIwMjYtMDctMjQgMjA6 Mjc6MDIuMDAwMDAwMDAwICswMjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvd29yZHJl Yy90ZmFjZS5jcHAJMjAyNi0wOS0yMSAxMDoyODoxMC40NDAwMTk2NDMgKzAyMDAKK0BAIC0zNiwx NCArMzYsMTYgQEAgbmFtZXNwYWNlIHRlc3NlcmFjdCB7CisgICogaW5pdF9wZXJtdXRlIGRldGVy bWluZXMgd2hldGhlciB0byBpbml0aWFsaXplIHRoZSBwZXJtdXRlIGZ1bmN0aW9ucworICAqIGFu ZCBEYXdnIG1vZGVscy4KKyAgKi8KKy12b2lkIFdvcmRyZWM6OnByb2dyYW1fZWRpdHVwKGNvbnN0 IHN0ZDo6c3RyaW5nICZ0ZXh0YmFzZSwgVGVzc2RhdGFNYW5hZ2VyICppbml0X2NsYXNzaWZpZXIs CisrYm9vbCBXb3JkcmVjOjpwcm9ncmFtX2VkaXR1cChjb25zdCBzdGQ6OnN0cmluZyAmdGV4dGJh c2UsIFRlc3NkYXRhTWFuYWdlciAqaW5pdF9jbGFzc2lmaWVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGVzc2RhdGFNYW5hZ2VyICppbml0X2RpY3QpIHsKKyAgIGlmICghdGV4dGJh c2UuZW1wdHkoKSkgeworICAgICBpbWFnZWZpbGUgPSB0ZXh0YmFzZTsKKyAgIH0KKyAjaWZuZGVm IERJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKyAgIEluaXRGZWF0dXJlRGVmcygmZmVhdHVyZV9kZWZz Xyk7CistICBJbml0QWRhcHRpdmVDbGFzc2lmaWVyKGluaXRfY2xhc3NpZmllcik7CisrICBpZiAo IUluaXRBZGFwdGl2ZUNsYXNzaWZpZXIoaW5pdF9jbGFzc2lmaWVyKSkgeworKyAgICByZXR1cm4g ZmFsc2U7CisrICB9CisgICBpZiAoaW5pdF9kaWN0KSB7CisgICAgIGdldERpY3QoKS5TZXR1cEZv ckxvYWQoRGljdDo6R2xvYmFsRGF3Z0NhY2hlKCkpOworICAgICBnZXREaWN0KCkuTG9hZChsYW5n LCBpbml0X2RpY3QpOworQEAgLTUxLDYgKzUzLDcgQEAgdm9pZCBXb3JkcmVjOjpwcm9ncmFtX2Vk aXR1cChjb25zdCBzdGQ6OgorICAgfQorICAgcGFzczJfb2tfc3BsaXQgPSBjaG9wX29rX3NwbGl0 OworICNlbmRpZiAvLyBuZGVmIERJU0FCTEVEX0xFR0FDWV9FTkdJTkUKKysgIHJldHVybiB0cnVl OworIH0KKyAKKyAvKioKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41 LjMvc3JjL3dvcmRyZWMvd29yZHJlYy5oIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL3dvcmRyZWMv d29yZHJlYy5oCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy93b3JkcmVjL3dvcmRyZWMuaAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL3dvcmRyZWMvd29yZHJlYy5oCTIwMjYtMDktMjEgMTA6Mjg6MTAuNDQwMjQyOTkyICswMjAw CitAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CisgICB2aXJ0dWFsIH5Xb3JkcmVjKCkgPSBkZWZh dWx0OworIAorICAgLy8gdGZhY2UuY3BwCistICB2b2lkIHByb2dyYW1fZWRpdHVwKGNvbnN0IHN0 ZDo6c3RyaW5nICZ0ZXh0YmFzZSwgVGVzc2RhdGFNYW5hZ2VyICppbml0X2NsYXNzaWZpZXIsCisr ICBib29sIHByb2dyYW1fZWRpdHVwKGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXh0YmFzZSwgVGVzc2Rh dGFNYW5hZ2VyICppbml0X2NsYXNzaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFRlc3Nk YXRhTWFuYWdlciAqaW5pdF9kaWN0KTsKKyAgIHZvaWQgcHJvZ3JhbV9lZGl0ZG93bigpOworICAg aW50IGVuZF9yZWNvZygpOworQEAgLTI0Myw3ICsyNDMsNyBAQCBwdWJsaWM6CisgICB9CisgCisg ICAvLyB0ZmFjZS5jcHAKKy0gIHZvaWQgcHJvZ3JhbV9lZGl0dXAoY29uc3Qgc3RkOjpzdHJpbmcg JnRleHRiYXNlLCBUZXNzZGF0YU1hbmFnZXIgKmluaXRfY2xhc3NpZmllciwKKysgIGJvb2wgcHJv Z3JhbV9lZGl0dXAoY29uc3Qgc3RkOjpzdHJpbmcgJnRleHRiYXNlLCBUZXNzZGF0YU1hbmFnZXIg KmluaXRfY2xhc3NpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgVGVzc2RhdGFNYW5hZ2Vy ICppbml0X2RpY3QpOworICAgdm9pZCBjY19yZWNvZyhXRVJEX1JFUyAqd29yZCk7CisgICB2b2lk IHByb2dyYW1fZWRpdGRvd24oKTsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJh Y3QtNS41LjMvdW5pdHRlc3QvQ01ha2VMaXN0cy50eHQgdGVzc2VyYWN0LTUuNS4zLW5ldy91bml0 dGVzdC9DTWFrZUxpc3RzLnR4dAorLS0tIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9DTWFrZUxp c3RzLnR4dAkyMDI2LTA5LTIxIDEwOjI4OjEwLjE5MzM2MjYyOSArMDIwMAorKysrIHRlc3NlcmFj dC01LjUuMy1uZXcvdW5pdHRlc3QvQ01ha2VMaXN0cy50eHQJMjAyNi0wOS0yMSAxMDoyODoxMC40 NDA0ODA1MjMgKzAyMDAKK0BAIC01OCw2ICs1OCw3IEBAIHNldChMRUdBQ1lfVEVTVFMKKyAgICAg ZXF1YXRpb25kZXRlY3RfdGVzdC5jYworICAgICBpbmRleG1hcGJpZGlfdGVzdC5jYworICAgICBp bnRmZWF0dXJlbWFwX3Rlc3QuY2MKKysgICAgaW50cHJvdG9fdGVzdC5jYworICAgICBtYXN0ZXJ0 cmFpbmVyX3Rlc3QuY2MKKyAgICAgbm9ybXByb3RvX3Rlc3QuY2MKKyAgICAgb3NkX3Rlc3QuY2MK K2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvaW50 cHJvdG9fdGVzdC5jYyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L2ludHByb3RvX3Rlc3Qu Y2MKKy0tLSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRlc3QvaW50cHJvdG9fdGVzdC5jYwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5p dHRlc3QvaW50cHJvdG9fdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjQ0MDc0NzUwMSArMDIw MAorQEAgLTAsMCArMSwxMjQgQEAKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKy8vIEZpbGU6ICAgICAgICBp bnRwcm90b190ZXN0LmNjCisrLy8gRGVzY3JpcHRpb246IFRlc3RzIHRoYXQgYSBjb3JydXB0IFRF U1NEQVRBX0lOVFRFTVAgY29tcG9uZW50IGluIGEKKysvLyAgICAgICAgICAgICAgLnRyYWluZWRk YXRhIGZpbGUgaXMgcmVqZWN0ZWQgd2l0aG91dCBtZW1vcnkgY29ycnVwdGlvbi4KKysvLyAgICAg ICAgICAgICAgVGhlIGNvdW50IGZpZWxkcyAoTnVtQ2xhc3NQcnVuZXJzLCBOdW1DbGFzc2VzLAor Ky8vICAgICAgICAgICAgICBOdW1Qcm90b1NldHMpIGFyZSByZWFkIGZyb20gdGhlIHVudHJ1c3Rl ZCBmaWxlIGFuZCB1c2VkCisrLy8gICAgICAgICAgICAgIGFzIGxvb3AgYm91bmRzIHRoYXQgd3Jp dGUgaW50byBmaXhlZC1zaXplIGFycmF5cyBpbgorKy8vICAgICAgICAgICAgICBDbGFzc2lmeTo6 UmVhZEludFRlbXBsYXRlcywgc28gdGhleSBtdXN0IGJlIHZhbGlkYXRlZAorKy8vICAgICAgICAg ICAgICBiZWZvcmUgdXNlLgorKy8vCisrLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisrLy8geW91IG1heSBub3QgdXNlIHRo aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKy8vIFlvdSBt YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vIGh0dHA6Ly93d3cuYXBhY2hl Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysjaW5j bHVkZSAiaW5jbHVkZV9ndW5pdC5oIgorKworKyNpbmNsdWRlIDx0ZXNzZXJhY3QvYmFzZWFwaS5o PgorKworKyNpbmNsdWRlICJpbnRwcm90by5oIiAgICAgLy8gZm9yIE1BWF9OVU1fQ0xBU1NfUFJV TkVSUywgTUFYX05VTV9DTEFTU0VTCisrI2luY2x1ZGUgInRlc3NkYXRhbWFuYWdlci5oIgorKwor KyNpbmNsdWRlIDxjc3RkaW50PgorKyNpbmNsdWRlIDxjc3RkaW8+CisrI2luY2x1ZGUgPGNzdGRs aWI+CisrI2luY2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8dmVjdG9yPgorKworK25hbWVzcGFj ZSB0ZXNzZXJhY3QgeworK25hbWVzcGFjZSB7CisrCisrLy8gTWluaW1hbCBsZWdhY3kgdW5pY2hh cnNldCBjb21wb25lbnQgKHR3byBjaGFyYWN0ZXJzOiBzcGFjZSBhbmQgJ2EnKS4KKytjb25zdCBj aGFyIGtNaW5VbmljaGFyc2V0W10gPQorKyAgICAiMlxuIgorKyAgICAiTlVMTCAxIDAsMjU1LDAs MjU1LDAsMCwwLDAsMCwwIExhdGluIDIgMCAyXG4iCisrICAgICJhIDEgMCwyNTUsMCwyNTUsMCww LDAsMCwwLDAgTGF0aW4gMiAwIDJcbiI7CisrCisrLy8gQnVpbGRzIGFuIGludHRlbXAgY29tcG9u ZW50IGluIHRoZSBjdXJyZW50ICh2ZXJzaW9uIC01KSBvbi1kaXNrIGxheW91dCwKKysvLyBhcyB3 cml0dGVuIGJ5IENsYXNzaWZ5OjpXcml0ZUludFRlbXBsYXRlczoKKysvLyAgIHVpbnQzMiB1bmlj aGFyc2V0X3NpemUsIGludDMyIHZlcnNpb25faWQsIHVpbnQzMiBOdW1DbGFzc1BydW5lcnMsCisr Ly8gICB1aW50MzIgTnVtQ2xhc3NlcywgdGhlbiBwZXIgY2xhc3M6IHVpbnQxNiBOdW1Qcm90b3Ms IHVpbnQ4IE51bVByb3RvU2V0cywKKysvLyAgIHVpbnQ4IE51bUNvbmZpZ3MuCisrc3RkOjp2ZWN0 b3I8Y2hhcj4gTWFrZUludHRlbXAoaW50MzJfdCB2ZXJzaW9uX2lkLCB1aW50MzJfdCBudW1fY2xh c3NfcHJ1bmVycywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1f Y2xhc3NlcywgdWludDMyX3QgdW5pY2hhcnNldF9zaXplLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgbnVtX3Byb3RvX3NldHMgPSAwKSB7CisrICBzdGQ6OnZlY3Rvcjxj aGFyPiBkYXRhOworKyAgYXV0byBhcHBlbmQgPSBbJmRhdGFdKGNvbnN0IHZvaWQgKnAsIHNpemVf dCBuKSB7CisrICAgIGNvbnN0IGNoYXIgKmIgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+KHAp OworKyAgICBkYXRhLmluc2VydChkYXRhLmVuZCgpLCBiLCBiICsgbik7CisrICB9OworKyAgYXBw ZW5kKCZ1bmljaGFyc2V0X3NpemUsIHNpemVvZih1bmljaGFyc2V0X3NpemUpKTsKKysgIGFwcGVu ZCgmdmVyc2lvbl9pZCwgc2l6ZW9mKHZlcnNpb25faWQpKTsKKysgIGFwcGVuZCgmbnVtX2NsYXNz X3BydW5lcnMsIHNpemVvZihudW1fY2xhc3NfcHJ1bmVycykpOworKyAgYXBwZW5kKCZudW1fY2xh c3Nlcywgc2l6ZW9mKG51bV9jbGFzc2VzKSk7CisrICBmb3IgKHVpbnQzMl90IGMgPSAwOyBjIDwg bnVtX2NsYXNzZXMgJiYgYyA8IE1BWF9OVU1fQ0xBU1NFUzsgKytjKSB7CisrICAgIHVpbnQxNl90 IG51bV9wcm90b3MgPSAwOworKyAgICB1aW50OF90IG51bV9jb25maWdzID0gMDsKKysgICAgYXBw ZW5kKCZudW1fcHJvdG9zLCBzaXplb2YobnVtX3Byb3RvcykpOworKyAgICBhcHBlbmQoJm51bV9w cm90b19zZXRzLCBzaXplb2YobnVtX3Byb3RvX3NldHMpKTsKKysgICAgYXBwZW5kKCZudW1fY29u Zmlncywgc2l6ZW9mKG51bV9jb25maWdzKSk7CisrICB9CisrICByZXR1cm4gZGF0YTsKKyt9Cisr CisrLy8gV3JpdGVzIGEgdHJhaW5lZGRhdGEgZmlsZSB3aXRoIGEgbWluaW1hbCB1bmljaGFyc2V0 IGFuZCB0aGUgZ2l2ZW4KKysvLyAoY29ycnVwdCkgaW50dGVtcCBjb21wb25lbnQgdG8gZGlyL2Vu Zy50cmFpbmVkZGF0YS4KKytib29sIFdyaXRlQ29ycnVwdFRyYWluZWRkYXRhKGNvbnN0IHN0ZDo6 c3RyaW5nICZkaXIsIGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+ICZpbnR0ZW1wKSB7CisrICBUZXNz ZGF0YU1hbmFnZXIgbWdyOworKyAgbWdyLk92ZXJ3cml0ZUVudHJ5KFRFU1NEQVRBX1VOSUNIQVJT RVQsIGtNaW5VbmljaGFyc2V0LCBzaXplb2Yoa01pblVuaWNoYXJzZXQpIC0gMSk7CisrICBtZ3Iu T3ZlcndyaXRlRW50cnkoVEVTU0RBVEFfSU5UVEVNUCwgaW50dGVtcC5kYXRhKCksIHN0YXRpY19j YXN0PGludD4oaW50dGVtcC5zaXplKCkpKTsKKysgIHJldHVybiBtZ3IuU2F2ZUZpbGUoKGRpciAr ICIvZW5nLnRyYWluZWRkYXRhIikuY19zdHIoKSwgbnVsbHB0cik7CisrfQorKworK2NsYXNzIElu dHByb3RvVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKKytwcm90ZWN0ZWQ6CisrICB2b2lk IFNldFVwKCkgb3ZlcnJpZGUgeworKyAgICB0bXBsXyA9ICIvdG1wL3Rlc3NfaW50cHJvdG9fdGVz dF9YWFhYWFgiOworKyAgICBjaGFyICpkaXIgPSBta2R0ZW1wKHRtcGxfLmRhdGEoKSk7CisrICAg IEFTU0VSVF9ORShkaXIsIG51bGxwdHIpOworKyAgICBkaXJfID0gZGlyOworKyAgfQorKyAgdm9p ZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKKysgICAgc3RkOjpyZW1vdmUoKGRpcl8gKyAiL2VuZy50 cmFpbmVkZGF0YSIpLmNfc3RyKCkpOworKyAgICBybWRpcihkaXJfLmNfc3RyKCkpOworKyAgfQor KyAgLy8gRXhwZWN0cyB0aGUgbGVnYWN5IGVuZ2luZSB0byByZWplY3QgdGhlIGNvcnJ1cHRlZCB0 cmFpbmVkZGF0YQorKyAgLy8gZ3JhY2VmdWxseSAoaW5pdCBmYWlsdXJlKSBpbnN0ZWFkIG9mIGNv cnJ1cHRpbmcgbWVtb3J5LgorKyAgdm9pZCBFeHBlY3RJbml0RmFpbHMoY29uc3Qgc3RkOjp2ZWN0 b3I8Y2hhcj4gJmludHRlbXApIHsKKysgICAgQVNTRVJUX1RSVUUoV3JpdGVDb3JydXB0VHJhaW5l ZGRhdGEoZGlyXywgaW50dGVtcCkpOworKyAgICB0ZXNzZXJhY3Q6OlRlc3NCYXNlQVBJIGFwaTsK KysgICAgRVhQRUNUX0VRKGFwaS5Jbml0KGRpcl8uY19zdHIoKSwgImVuZyIsIHRlc3NlcmFjdDo6 T0VNX1RFU1NFUkFDVF9PTkxZKSwgLTEpOworKyAgfQorKyAgc3RkOjpzdHJpbmcgZGlyXzsKKysg IHN0ZDo6c3RyaW5nIHRtcGxfOworK307CisrCisrLy8gTnVtQ2xhc3NQcnVuZXJzIGV4Y2VlZHMg TUFYX05VTV9DTEFTU19QUlVORVJTOiB0aGUgcHJ1bmVyLXJlYWQgbG9vcCB3b3VsZAorKy8vIHdy aXRlIHBhc3QgdGhlIGVuZCBvZiBJTlRfVEVNUExBVEVTX1NUUlVDVDo6Q2xhc3NQcnVuZXJzW10u CisrVEVTVF9GKEludHByb3RvVGVzdCwgUmVqZWN0c1Rvb01hbnlDbGFzc1BydW5lcnMpIHsKKysg IEV4cGVjdEluaXRGYWlscyhNYWtlSW50dGVtcCgtNSwgTUFYX05VTV9DTEFTU19QUlVORVJTICsg MSwgMCwgMSkpOworK30KKysKKysvLyBOdW1DbGFzc2VzIGV4Y2VlZHMgTUFYX05VTV9DTEFTU0VT OiB0aGUgY2xhc3MtcmVhZCBsb29wIHdvdWxkIHdyaXRlIHBhc3QKKysvLyB0aGUgZW5kIG9mIElO VF9URU1QTEFURVNfU1RSVUNUOjpDbGFzc1tdLgorK1RFU1RfRihJbnRwcm90b1Rlc3QsIFJlamVj dHNUb29NYW55Q2xhc3NlcykgeworKyAgRXhwZWN0SW5pdEZhaWxzKE1ha2VJbnR0ZW1wKC01LCAw LCBNQVhfTlVNX0NMQVNTRVMgKyAxLCAxKSk7CisrfQorKworKy8vIEEgY2xhc3Mgd2l0aCBOdW1Q cm90b1NldHMgPiBNQVhfTlVNX1BST1RPX1NFVFM6IHRoZSBwcm90by1zZXQgbG9vcCB3b3VsZAor Ky8vIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiBJTlRfQ0xBU1NfU1RSVUNUOjpQcm90b1NldHNbXS4K KytURVNUX0YoSW50cHJvdG9UZXN0LCBSZWplY3RzVG9vTWFueVByb3RvU2V0cykgeworKyAgRXhw ZWN0SW5pdEZhaWxzKE1ha2VJbnR0ZW1wKC01LCAwLCAxLCAxLCBNQVhfTlVNX1BST1RPX1NFVFMg KyAxKSk7CisrfQorKworKy8vIHVuaWNoYXJzZXRfc2l6ZSBleGNlZWRzIE1BWF9OVU1fQ0xBU1NF UzogdGhlIHZlcnNpb24gPCAyIGNsYXNzLWlkLWluZGV4CisrLy8gcmVhZCB3b3VsZCB3cml0ZSBw YXN0IHRoZSBlbmQgb2YgSW5kZXhGb3JbXS4KKytURVNUX0YoSW50cHJvdG9UZXN0LCBSZWplY3Rz VG9vTGFyZ2VVbmljaGFyc2V0U2l6ZSkgeworKyAgRXhwZWN0SW5pdEZhaWxzKE1ha2VJbnR0ZW1w KC0xLCAwLCAwLCBNQVhfTlVNX0NMQVNTRVMgKyAxKSk7CisrfQorKworK30gLy8gbmFtZXNwYWNl CisrfSAvLyBuYW1lc3BhY2UgdGVzc2VyYWN0CgpkaWZmIC0tZ2l0IGEvYjQ5NGFjMTg5MjVmOWQ5 YWZmOWVmNTgxNTQ3NWRlOTk0M2FiMTliZi5wYXRjaCBiL2I0OTRhYzE4OTI1ZjlkOWFmZjllZjU4 MTU0NzVkZTk5NDNhYjE5YmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYTdkY2Q3OQotLS0gL2Rldi9udWxsCisrKyBiL2I0OTRhYzE4OTI1ZjlkOWFmZjllZjU4MTU0 NzVkZTk5NDNhYjE5YmYucGF0Y2gKQEAgLTAsMCArMSwyNTggQEAKK2RpZmYgLXJ1cE4gLS1uby1k ZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZpbGUuYW0gdGVzc2VyYWN0LTUuNS4zLW5l dy9NYWtlZmlsZS5hbQorLS0tIHRlc3NlcmFjdC01LjUuMy9NYWtlZmlsZS5hbQkyMDI2LTA5LTIx IDEwOjI4OjEwLjIzODQ1Mjg5MyArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcvTWFrZWZp bGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4yNDM4NzQxMzAgKzAyMDAKK0BAIC0xMTcxLDYgKzEx NzEsNyBAQCBjaGVja19QUk9HUkFNUyArPSBsYXlvdXRfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9 IGxpZ2F0dXJlX3RhYmxlX3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSBsaW5sc3FfdGVzdAorIGNo ZWNrX1BST0dSQU1TICs9IGxpc3RfdGVzdAorK2NoZWNrX1BST0dSQU1TICs9IGxzdG1fbGF5ZXJf dGVzdAorIGlmIEVOQUJMRV9UUkFJTklORworIGNoZWNrX1BST0dSQU1TICs9IGxzdG1fcmVjb2Rl X3Rlc3QKKyBjaGVja19QUk9HUkFNUyArPSBsc3RtX3NxdWFzaGVkX3Rlc3QKK0BAIC0xMzUyLDYg KzEzNTMsMTAgQEAgbG9hZGxhbmdfdGVzdF9TT1VSQ0VTID0gdW5pdHRlc3QvbG9hZGxhbgorIGxv YWRsYW5nX3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIGxvYWRsYW5nX3Rl c3RfTERBREQgPSAkKFRFU1NfTElCUykgJChMRVBUT05JQ0FfTElCUykKKyAKKytsc3RtX2xheWVy X3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L2xzdG1fbGF5ZXJfdGVzdC5jYworK2xzdG1fbGF5ZXJf dGVzdF9DUFBGTEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisrbHN0bV9sYXllcl90ZXN0X0xE QUREID0gJChURVNTX0xJQlMpCisrCisgbHN0bV9yZWNvZGVfdGVzdF9TT1VSQ0VTID0gdW5pdHRl c3QvbHN0bV9yZWNvZGVfdGVzdC5jYworIGxzdG1fcmVjb2RlX3Rlc3RfQ1BQRkxBR1MgPSAkKHVu aXR0ZXN0X0NQUEZMQUdTKQorIGxzdG1fcmVjb2RlX3Rlc3RfTERBREQgPSAkKFRSQUlOSU5HX0xJ QlMpCitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3Rt L2xzdG0uY3BwIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL2xzdG0vbHN0bS5jcHAKKy0tLSB0ZXNz ZXJhY3QtNS41LjMvc3JjL2xzdG0vbHN0bS5jcHAJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAw MDAgKzAyMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9sc3RtL2xzdG0uY3BwCTIwMjYt MDktMjEgMTA6Mjg6MTAuMjQ0NDc5NzUyICswMjAwCitAQCAtMjc0LDEyICsyNzQsMzIgQEAgYm9v bCBMU1RNOjpEZVNlcmlhbGl6ZShURmlsZSAqZnApIHsKKyAgICAgICBpc18yZF8gPSBuYV8gLSBu Zl8gPT0gbmlfICsgMiAqIG5zXzsKKyAgICAgfQorICAgfQorKyAgLy8gVGhlIGRlc2VyaWFsaXpl ZCBkaW1lbnNpb25zIG11c3QgYmUgbXV0dWFsbHkgY29uc2lzdGVudDogdGhlIGZvcndhcmQKKysg IC8vIHBhc3Mgc2l6ZXMgaXRzIGJ1ZmZlcnMgZnJvbSBuYV8sIG5vXyBhbmQgbnNfIHdoaWxlIHRo ZSBnYXRlIG1hdHJpY2VzCisrICAvLyBkcml2ZSB0aGVpciBvd24gZGltZW5zaW9ucy4KKysgIGlm IChuYV8gIT0gbmlfICsgbmZfICsgKGlzXzJkXyA/IDIgOiAxKSAqIG5zXykgeworKyAgICByZXR1 cm4gZmFsc2U7CisrICB9CisrICBmb3IgKGludCB3ID0gMDsgdyA8IFdUX0NPVU5UOyArK3cpIHsK KysgICAgaWYgKHcgPT0gR0ZTICYmICFJczJEKCkpIHsKKysgICAgICBjb250aW51ZTsKKysgICAg fQorKyAgICBpZiAoZ2F0ZV93ZWlnaHRzX1t3XS5EaW0xKCkgIT0gbnNfIHx8IGdhdGVfd2VpZ2h0 c19bd10uRGltMigpICE9IG5hXyArIDEpIHsKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K KysgIH0KKysgIGlmICgodHlwZV8gPT0gTlRfTFNUTSB8fCB0eXBlXyA9PSBOVF9MU1RNX1NVTU1B UlkpICYmIG5zXyAhPSBub18pIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorICAgZGVsZXRl IHNvZnRtYXhfOworICAgaWYgKHR5cGVfID09IE5UX0xTVE1fU09GVE1BWCB8fCB0eXBlXyA9PSBO VF9MU1RNX1NPRlRNQVhfRU5DT0RFRCkgeworICAgICBzb2Z0bWF4XyA9IHN0YXRpY19jYXN0PEZ1 bGx5Q29ubmVjdGVkICo+KE5ldHdvcms6OkNyZWF0ZUZyb21GaWxlKGZwKSk7CisgICAgIGlmIChz b2Z0bWF4XyA9PSBudWxscHRyKSB7CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisrICAg IGlmIChzb2Z0bWF4Xy0+TnVtSW5wdXRzKCkgIT0gbnNfIHx8IHNvZnRtYXhfLT5OdW1PdXRwdXRz KCkgIT0gbm9fKSB7CisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisgICB9IGVsc2Ugewor ICAgICBzb2Z0bWF4XyA9IG51bGxwdHI7CisgICB9CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVu Y2UgdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3RtL25ldHdvcmtpby5jcHAgdGVzc2VyYWN0LTUuNS4z LW5ldy9zcmMvbHN0bS9uZXR3b3JraW8uY3BwCistLS0gdGVzc2VyYWN0LTUuNS4zL3NyYy9sc3Rt L25ldHdvcmtpby5jcHAJMjAyNi0wNy0yNCAyMDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0 ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9sc3RtL25ldHdvcmtpby5jcHAJMjAyNi0wOS0yMSAxMDoy ODoxMC4yNDQ1OTU0NTQgKzAyMDAKK0BAIC02NDEsNiArNjQxLDcgQEAgdm9pZCBOZXR3b3JrSU86 OkFkZFRpbWVTdGVwKGludCB0LCBURmxvYQorIAorIC8vIEFkZHMgcGFydCBvZiBhIHNpbmdsZSB0 aW1lc3RlcCB0byBmbG9hdHMuCisgdm9pZCBOZXR3b3JrSU86OkFkZFRpbWVTdGVwUGFydChpbnQg dCwgaW50IG9mZnNldCwgaW50IG51bV9mZWF0dXJlcywgZmxvYXQgKmlub3V0KSBjb25zdCB7Cisr ICBBU1NFUlRfSE9TVChvZmZzZXQgKyBudW1fZmVhdHVyZXMgPD0gTnVtRmVhdHVyZXMoKSk7Cisg ICBpZiAoaW50X21vZGVfKSB7CisgICAgIGNvbnN0IGludDhfdCAqbGluZSA9IGlfW3RdICsgb2Zm c2V0OworICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9mZWF0dXJlczsgKytpKSB7CitAQCAt NjYyLDYgKzY2Myw3IEBAIHZvaWQgTmV0d29ya0lPOjpXcml0ZVRpbWVTdGVwKGludCB0LCBjb24K KyAvLyBXcml0ZXMgYSBzaW5nbGUgdGltZXN0ZXAgZnJvbSBmbG9hdHMgaW4gdGhlIHJhbmdlIFst MSwgMV0gd3JpdGluZyBvbmx5CisgLy8gbnVtX2ZlYXR1cmVzIGVsZW1lbnRzIG9mIGlucHV0IHRv ICgqdGhpcylbdF0sIHN0YXJ0aW5nIGF0IG9mZnNldC4KKyB2b2lkIE5ldHdvcmtJTzo6V3JpdGVU aW1lU3RlcFBhcnQoaW50IHQsIGludCBvZmZzZXQsIGludCBudW1fZmVhdHVyZXMsIGNvbnN0IFRG bG9hdCAqaW5wdXQpIHsKKysgIEFTU0VSVF9IT1NUKG9mZnNldCArIG51bV9mZWF0dXJlcyA8PSBO dW1GZWF0dXJlcygpKTsKKyAgIGlmIChpbnRfbW9kZV8pIHsKKyAgICAgaW50OF90ICpsaW5lID0g aV9bdF0gKyBvZmZzZXQ7CisgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2ZlYXR1cmVzOyAr K2kpIHsKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvdW5pdHRl c3QvbHN0bV9sYXllcl90ZXN0LmNjIHRlc3NlcmFjdC01LjUuMy1uZXcvdW5pdHRlc3QvbHN0bV9s YXllcl90ZXN0LmNjCistLS0gdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L2xzdG1fbGF5ZXJfdGVz dC5jYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRlc3NlcmFjdC01 LjUuMy1uZXcvdW5pdHRlc3QvbHN0bV9sYXllcl90ZXN0LmNjCTIwMjYtMDktMjEgMTA6Mjg6MTAu MjQ1NDM4MzA3ICswMjAwCitAQCAtMCwwICsxLDE3NyBAQAorKy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrLy8g RmlsZTogICAgICAgIGxzdG1fbGF5ZXJfdGVzdC5jYworKy8vIERlc2NyaXB0aW9uOiBUZXN0cyB0 aGF0IGFuIE5UX0xTVE0gbmV0d29yayBsYXllciB3aXRoIG11dHVhbGx5CisrLy8gICAgICAgICAg ICAgIGluY29uc2lzdGVudCBkZXNlcmlhbGl6ZWQgZGltZW5zaW9ucyBpcyByZWplY3RlZCBhdAor Ky8vICAgICAgICAgICAgICBsb2FkLiBUaGUgZm9yd2FyZCBwYXNzIHNpemVzIGl0cyBidWZmZXJz IGZyb20gbmFfLCBub18KKysvLyAgICAgICAgICAgICAgYW5kIG5zXyB3aGlsZSB0aGUgZ2F0ZSB3 ZWlnaHQgbWF0cmljZXMgZHJpdmUgdGhlaXIgb3duCisrLy8gICAgICAgICAgICAgIGRpbWVuc2lv bnMsIHNvIGEgY3JhZnRlZCAudHJhaW5lZGRhdGEgcGVyZm9ybXMgaGVhcAorKy8vICAgICAgICAg ICAgICBvdXQtb2YtYm91bmRzIHdyaXRlcy9yZWFkcyBkdXJpbmcgdGhlIGZpcnN0CisrLy8gICAg ICAgICAgICAgIHJlY29nbml0aW9uIHN0ZXAgKGUuZy4gV3JpdGVUaW1lU3RlcFBhcnQgd3JpdGlu ZyBuc18KKysvLyAgICAgICAgICAgICAgZmxvYXRzIGludG8gYSBzb3VyY2VfIGJ1ZmZlciBzaXpl ZCBmcm9tIG5hXykuCisrLy8KKysvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKysvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrLy8gaHR0cDovL3d3dy5hcGFjaGUub3Jn L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNpbmNsdWRl ICJpbmNsdWRlX2d1bml0LmgiCisrCisrI2luY2x1ZGUgIm5ldHdvcmsuaCIgLy8gZm9yIE5ldHdv cmssIE5ldHdvcmtUeXBlCisrI2luY2x1ZGUgIm5ldHdvcmtpby5oIgorKyNpbmNsdWRlICJuZXR3 b3Jrc2NyYXRjaC5oIgorKyNpbmNsdWRlICJzZXJpYWxpcy5oIiAvLyBmb3IgVEZpbGUKKysjaW5j bHVkZSAic3RyaWRlbWFwLmgiCisrCisrI2luY2x1ZGUgPGNzdGRpbnQ+CisrI2luY2x1ZGUgPHV0 aWxpdHk+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysKKytuYW1lc3BhY2UgdGVzc2VyYWN0IHsKKytu YW1lc3BhY2UgeworKworKy8vIEFwcGVuZHMgcmF3IGxpdHRsZS1lbmRpYW4gdmFsdWVzIHRvIGEg Ynl0ZSBidWZmZXIuCisrY2xhc3MgQnl0ZVdyaXRlciB7CisrcHVibGljOgorKyAgdm9pZCBQdXRV OCh1aW50MzJfdCB2KSB7IGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPih2ICYgMHhG RikpOyB9CisrICB2b2lkIFB1dFUzMih1aW50MzJfdCB2KSB7CisrICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNDsgKytpKSB7CisrICAgICAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+ KCh2ID4+ICg4ICogaSkpICYgMHhGRikpOworKyAgICB9CisrICB9CisrICB2b2lkIFB1dFMzMihp bnQzMl90IHYpIHsgUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2KSk7IH0KKysgIGNvbnN0 IHN0ZDo6dmVjdG9yPGNoYXI+ICZkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KKysKKytw cml2YXRlOgorKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gZGF0YV87CisrfTsKKysKKyt2b2lkIFB1dERv dWJsZUxFKEJ5dGVXcml0ZXIgKncsIGRvdWJsZSBkKSB7CisrICB1bmlvbiB7CisrICAgIGRvdWJs ZSBkOworKyAgICB1aW50NjRfdCB1OworKyAgfSBjb252OworKyAgY29udi5kID0gZDsKKysgIHct PlB1dFUzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29udi51ICYgMHhGRkZGRkZGRikpOworKyAg dy0+UHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb252LnUgPj4gMzIpKTsKKyt9CisrCisr Ly8gQSBzZXJpYWxpemVkIGZsb2F0LW1vZGUgV2VpZ2h0TWF0cml4IHdpdGggdGhlIGdpdmVuIGRp bWVuc2lvbnMsCisrLy8gYWxsIHdlaWdodCBkYXRhIHplcm9lZC4KKyt2b2lkIFB1dEdhdGVNYXRy aXgoQnl0ZVdyaXRlciAqdywgaW50MzJfdCBkaW0xLCBpbnQzMl90IGRpbTIpIHsKKysgIHctPlB1 dFU4KDEyOCk7IC8vIG1vZGU6IGtEb3VibGVGbGFnLCBmbG9hdCBtb2RlCisrICB3LT5QdXRTMzIo ZGltMSk7CisrICB3LT5QdXRTMzIoZGltMik7CisrICBQdXREb3VibGVMRSh3LCAwLjApOyAvLyBl bXB0eV8gY2VsbAorKyAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgZGltMSAqIGRpbTI7ICsraSkg eworKyAgICBQdXREb3VibGVMRSh3LCAwLjApOworKyAgfQorK30KKysKKysvLyBBIHNlcmlhbGl6 ZWQgMS1EIE5UX0xTVE0gbmV0d29yazogaGVhZGVyIHdpdGggdGhlIGdpdmVuIG5pL25vLCBuYV8s CisrLy8gdGhlbiB0aGUgZm91ciBnYXRlcyBDSSwgR0ksIEdGMSwgR08gKEdGUyBpcyBub3Qgc2Vy aWFsaXplZCBmb3IgMS1EKS4KKytzdGQ6OnZlY3RvcjxjaGFyPiBNYWtlTHN0bU5ldHdvcmsoaW50 IG5pLCBpbnQgbm8sIGludDMyX3QgbmEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGludDMyX3QgZ2F0ZV9kaW0xWzRdLCBjb25zdCBpbnQzMl90IGdhdGVfZGltMls0 XSkgeworKyAgQnl0ZVdyaXRlciB3OworKyAgdy5QdXRVOChzdGF0aWNfY2FzdDx1aW50MzJfdD4o TlRfTFNUTSkpOworKyAgdy5QdXRVOCgwKTsgLy8gdHJhaW5pbmc6IFRTX0RJU0FCTEVECisrICB3 LlB1dFU4KDApOyAvLyBuZWVkc190b19iYWNrcHJvcAorKyAgdy5QdXRVMzIoMCk7IC8vIG5ldHdv cmtfZmxhZ3MKKysgIHcuUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihuaSkpOworKyAgdy5Q dXRVMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG5vKSk7CisrICB3LlB1dFUzMigwKTsgLy8gbnVt X3dlaWdodHMKKysgIHcuUHV0VTMyKDApOyAvLyBuYW1lIChlbXB0eSBzdHJpbmcpCisrICB3LlB1 dFMzMihuYSk7CisrICBmb3IgKGludCBnID0gMDsgZyA8IDQ7ICsrZykgeworKyAgICBQdXRHYXRl TWF0cml4KCZ3LCBnYXRlX2RpbTFbZ10sIGdhdGVfZGltMltnXSk7CisrICB9CisrICByZXR1cm4g dy5kYXRhKCk7CisrfQorKworKy8vIEJ1aWxkcyB0aGUgaW5wdXQgYSBzdGFuZGFsb25lIExTVE0g bGF5ZXIgd291bGQgcmVjZWl2ZTogb25lIHJvdyBvZgorKy8vIHRoZSBnaXZlbiB3aWR0aCB3aXRo IG5pIGZlYXR1cmVzLgorK05ldHdvcmtJTyBNYWtlSW5wdXQoaW50IG5pLCBpbnQgd2lkdGgpIHsK KysgIFN0cmlkZU1hcCBzdHJpZGVfbWFwOworKyAgc3RyaWRlX21hcC5TZXRTdHJpZGUoe3sxLCB3 aWR0aH19KTsKKysgIE5ldHdvcmtJTyBpbnB1dDsKKysgIGlucHV0LlJlc2l6ZVRvTWFwKGZhbHNl LCBzdHJpZGVfbWFwLCBuaSk7CisrICByZXR1cm4gaW5wdXQ7CisrfQorKworKy8vIFJ1bnMgRm9y d2FyZCBvbiB0aGUgbG9hZGVkIG5ldHdvcms7IG9uIHVucGF0Y2hlZCBjb2RlIHRoZSBvdXQtb2Yt CisrLy8gYm91bmRzIGFjY2VzcyB0aGlzIHJlZ3Jlc3Npb24gdGVzdCBndWFyZHMgYWdhaW5zdCBm aXJlcyBoZXJlLgorK3ZvaWQgUnVuRm9yd2FyZChOZXR3b3JrICpuZXQsIGludCBuaSwgaW50IHdp ZHRoKSB7CisrICBOZXR3b3JrSU8gaW5wdXQgPSBNYWtlSW5wdXQobmksIHdpZHRoKTsKKysgIE5l dHdvcmtTY3JhdGNoIHNjcmF0Y2g7CisrICBOZXR3b3JrSU8gb3V0cHV0OworKyAgbmV0LT5Gb3J3 YXJkKGZhbHNlLCBpbnB1dCwgbnVsbHB0ciwgJnNjcmF0Y2gsICZvdXRwdXQpOworKyAgZGVsZXRl IG5ldDsKKyt9CisrCisrLy8gbmFfIG11c3QgZXF1YWwgbmlfICsgbmZfICsgbnNfIGZvciBhIDEt RCBMU1RNOyBoZXJlIG5hXz0yIGJ1dCB0aGUKKysvLyBDSSBtYXRyaXggbWFrZXMgbnNfPTY0LCBz byB0aGUgbGF5ZXIgbXVzdCBiZSByZWplY3RlZC4gT24gdW5wYXRjaGVkCisrLy8gY29kZSBGb3J3 YXJkIHdyaXRlcyA2NCBmbG9hdHMgYXQgb2Zmc2V0IG5pXz0xIGludG8gYSBzb3VyY2VfIGJ1ZmZl cgorKy8vIHNpemVkIGZvciBuYV89MiAoaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlKS4KKytURVNU KExzdG1MYXllclRlc3QsIFJlamVjdHNJbmNvbnNpc3RlbnROYSkgeworKyAgY29uc3QgaW50MzJf dCBkaW0xWzRdID0gezY0LCA2NCwgNjQsIDY0fTsKKysgIGNvbnN0IGludDMyX3QgZGltMls0XSA9 IHszLCAzLCAzLCAzfTsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFrZUxzdG1OZXR3 b3JrKDEsIDEsIDIsIGRpbTEsIGRpbTIpOworKyAgVEZpbGUgZnA7CisrICBBU1NFUlRfVFJVRShm cC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBOZXR3b3JrICpuZXQgPSBO ZXR3b3JrOjpDcmVhdGVGcm9tRmlsZSgmZnApOworKyAgaWYgKG5ldCA9PSBudWxscHRyKSB7Cisr ICAgIHJldHVybjsgLy8gRml4ZWQ6IHRoZSBpbmNvbnNpc3RlbnQgbGF5ZXIgaXMgcmVqZWN0ZWQg YXQgbG9hZC4KKysgIH0KKysgIFJ1bkZvcndhcmQobmV0LCAxLCAyKTsKKysgIEZBSUwoKSA8PCAi Y3JhZnRlZCBMU1RNIGxheWVyIHdpdGggaW5jb25zaXN0ZW50IG5hXyB3YXMgYWNjZXB0ZWQiOwor K30KKysKKysvLyBBbGwgZ2F0ZSBtYXRyaWNlcyBtdXN0IGhhdmUgZGltMSA9PSBuc187IGhlcmUg dGhlIEdJIG1hdHJpeCBoYXMKKysvLyBkaW0xPTkgd2hpbGUgbnNfPTUuIE9uIHVucGF0Y2hlZCBj b2RlIHRoZSBHSSBnYXRlIGRvdCBwcm9kdWN0IHdyaXRlcworKy8vIDkgcmVzdWx0cyBpbnRvIGEg dGVtcCBsaW5lIHNpemVkIGZvciA1IChoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUpLgorK1RFU1Qo THN0bUxheWVyVGVzdCwgUmVqZWN0c0dhdGVEaW0xTWlzbWF0Y2gpIHsKKysgIGNvbnN0IGludDMy X3QgZGltMVs0XSA9IHs1LCA5LCA1LCA1fTsKKysgIGNvbnN0IGludDMyX3QgZGltMls0XSA9IHs3 LCA3LCA3LCA3fTsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFrZUxzdG1OZXR3b3Jr KDEsIDUsIDYsIGRpbTEsIGRpbTIpOworKyAgVEZpbGUgZnA7CisrICBBU1NFUlRfVFJVRShmcC5P cGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpKSk7CisrICBOZXR3b3JrICpuZXQgPSBOZXR3 b3JrOjpDcmVhdGVGcm9tRmlsZSgmZnApOworKyAgaWYgKG5ldCA9PSBudWxscHRyKSB7CisrICAg IHJldHVybjsgLy8gRml4ZWQ6IHRoZSBpbmNvbnNpc3RlbnQgbGF5ZXIgaXMgcmVqZWN0ZWQgYXQg bG9hZC4KKysgIH0KKysgIFJ1bkZvcndhcmQobmV0LCAxLCAyKTsKKysgIEZBSUwoKSA8PCAiY3Jh ZnRlZCBMU1RNIGxheWVyIHdpdGggaW5jb25zaXN0ZW50IGdhdGUgZGltMSB3YXMgYWNjZXB0ZWQi OworK30KKysKKysvLyBBbGwgZ2F0ZSBtYXRyaWNlcyBtdXN0IGhhdmUgZGltMiA9PSBuYV8gKyAx OyBoZXJlIHRoZSBHSSBtYXRyaXggaGFzCisrLy8gZGltMj05IHdoaWxlIG5hXz02LiBPbiB1bnBh dGNoZWQgY29kZSB0aGUgR0kgZ2F0ZSBkb3QgcHJvZHVjdCByZWFkcworKy8vIDggaW5wdXRzIGZy b20gYSBidWZmZXIgc2l6ZWQgZm9yIDYgKGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkKS4KKytURVNU KExzdG1MYXllclRlc3QsIFJlamVjdHNHYXRlRGltMk1pc21hdGNoKSB7CisrICBjb25zdCBpbnQz Ml90IGRpbTFbNF0gPSB7NSwgNSwgNSwgNX07CisrICBjb25zdCBpbnQzMl90IGRpbTJbNF0gPSB7 NywgOSwgNywgN307CisrICBzdGQ6OnZlY3RvcjxjaGFyPiBieXRlcyA9IE1ha2VMc3RtTmV0d29y aygxLCA1LCA2LCBkaW0xLCBkaW0yKTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAu T3BlbihieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgTmV0d29yayAqbmV0ID0gTmV0 d29yazo6Q3JlYXRlRnJvbUZpbGUoJmZwKTsKKysgIGlmIChuZXQgPT0gbnVsbHB0cikgeworKyAg ICByZXR1cm47IC8vIEZpeGVkOiB0aGUgaW5jb25zaXN0ZW50IGxheWVyIGlzIHJlamVjdGVkIGF0 IGxvYWQuCisrICB9CisrICBSdW5Gb3J3YXJkKG5ldCwgMSwgMik7CisrICBGQUlMKCkgPDwgImNy YWZ0ZWQgTFNUTSBsYXllciB3aXRoIGluY29uc2lzdGVudCBnYXRlIGRpbTIgd2FzIGFjY2VwdGVk IjsKKyt9CisrCisrLy8gQSBmdWxseSBjb25zaXN0ZW50IDEtRCBMU1RNIGxheWVyIG11c3Qgc3Rp bGwgYmUgYWNjZXB0ZWQgYW5kIHVzYWJsZS4KKytURVNUKExzdG1MYXllclRlc3QsIEFjY2VwdHND b25zaXN0ZW50TGF5ZXIpIHsKKysgIGNvbnN0IGludDMyX3QgZGltMVs0XSA9IHs1LCA1LCA1LCA1 fTsKKysgIGNvbnN0IGludDMyX3QgZGltMls0XSA9IHs3LCA3LCA3LCA3fTsKKysgIHN0ZDo6dmVj dG9yPGNoYXI+IGJ5dGVzID0gTWFrZUxzdG1OZXR3b3JrKDEsIDUsIDYsIGRpbTEsIGRpbTIpOwor KyAgVEZpbGUgZnA7CisrICBBU1NFUlRfVFJVRShmcC5PcGVuKGJ5dGVzLmRhdGEoKSwgYnl0ZXMu c2l6ZSgpKSk7CisrICBOZXR3b3JrICpuZXQgPSBOZXR3b3JrOjpDcmVhdGVGcm9tRmlsZSgmZnAp OworKyAgQVNTRVJUX05FKG5ldCwgbnVsbHB0cik7CisrICBSdW5Gb3J3YXJkKG5ldCwgMSwgMik7 CisrfQorKworK30gLy8gbmFtZXNwYWNlCisrfSAvLyBuYW1lc3BhY2UgdGVzc2VyYWN0CgpkaWZm IC0tZ2l0IGEvYzk0YTU1MzJlZTA0ZGI1YTQ5MTk1NDI4MzJmZDk0Y2FlZTVlYTU4Zi5wYXRjaCBi L2M5NGE1NTMyZWUwNGRiNWE0OTE5NTQyODMyZmQ5NGNhZWU1ZWE1OGYucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxZTMwYwotLS0gL2Rldi9udWxsCisrKyBiL2M5 NGE1NTMyZWUwNGRiNWE0OTE5NTQyODMyZmQ5NGNhZWU1ZWE1OGYucGF0Y2gKQEAgLTAsMCArMSwx NTggQEAKK2RpZmYgLXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvTWFrZWZp bGUuYW0gdGVzc2VyYWN0LTUuNS4zLW5ldy9NYWtlZmlsZS5hbQorLS0tIHRlc3NlcmFjdC01LjUu My9NYWtlZmlsZS5hbQkyMDI2LTA5LTIxIDEwOjI4OjEwLjI4NTIwNDY2NyArMDIwMAorKysrIHRl c3NlcmFjdC01LjUuMy1uZXcvTWFrZWZpbGUuYW0JMjAyNi0wOS0yMSAxMDoyODoxMC4yOTEzMDQ5 ODQgKzAyMDAKK0BAIC0xMjAzLDYgKzEyMDMsNyBAQCBlbmRpZiAjICFESVNBQkxFRF9MRUdBQ1lf RU5HSU5FCisgY2hlY2tfUFJPR1JBTVMgKz0gcHJvZ3Jlc3NfdGVzdAorIGNoZWNrX1BST0dSQU1T ICs9IHFyc2VxdWVuY2VfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IHJlY29kZWJlYW1fdGVzdAor K2NoZWNrX1BST0dSQU1TICs9IHJlY29kZXJfdGVzdAorIGNoZWNrX1BST0dSQU1TICs9IHJlY3Rf dGVzdAorIGNoZWNrX1BST0dSQU1TICs9IHJlc3VsdGl0ZXJhdG9yX3Rlc3QKKyBjaGVja19QUk9H UkFNUyArPSBzY2FudXRpbHNfdGVzdAorQEAgLTE0MzksNiArMTQ0MCwxMCBAQCByZWNvZGViZWFt X3Rlc3RfU09VUkNFUyA9IHVuaXR0ZXN0L3JlY29kCisgcmVjb2RlYmVhbV90ZXN0X0NQUEZMQUdT ID0gJCh1bml0dGVzdF9DUFBGTEFHUykKKyByZWNvZGViZWFtX3Rlc3RfTERBREQgPSAkKFRSQUlO SU5HX0xJQlMpICQoSUNVX0kxOE5fTElCUykgJChJQ1VfVUNfTElCUykKKyAKKytyZWNvZGVyX3Rl c3RfU09VUkNFUyA9IHVuaXR0ZXN0L3JlY29kZXJfdGVzdC5jYworK3JlY29kZXJfdGVzdF9DUFBG TEFHUyA9ICQodW5pdHRlc3RfQ1BQRkxBR1MpCisrcmVjb2Rlcl90ZXN0X0xEQUREID0gJChURVNT X0xJQlMpCisrCisgcmVjdF90ZXN0X1NPVVJDRVMgPSB1bml0dGVzdC9yZWN0X3Rlc3QuY2MKKyBy ZWN0X3Rlc3RfQ1BQRkxBR1MgPSAkKHVuaXR0ZXN0X0NQUEZMQUdTKQorIHJlY3RfdGVzdF9MREFE RCA9ICQoVEVTU19MSUJTKQorZGlmZiAtcnVwTiAtLW5vLWRlcmVmZXJlbmNlIHRlc3NlcmFjdC01 LjUuMy9zcmMvY2N1dGlsL3VuaWNoYXJjb21wcmVzcy5jcHAgdGVzc2VyYWN0LTUuNS4zLW5ldy9z cmMvY2N1dGlsL3VuaWNoYXJjb21wcmVzcy5jcHAKKy0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2Nj dXRpbC91bmljaGFyY29tcHJlc3MuY3BwCTIwMjYtMDctMjQgMjA6Mjc6MDIuMDAwMDAwMDAwICsw MjAwCisrKysgdGVzc2VyYWN0LTUuNS4zLW5ldy9zcmMvY2N1dGlsL3VuaWNoYXJjb21wcmVzcy5j cHAJMjAyNi0wOS0yMSAxMDoyODoxMC4yOTE4ODk5ODggKzAyMDAKK0BAIC00MDAsNiArNDAwLDcg QEAgdm9pZCBVbmljaGFyQ29tcHJlc3M6OlNldHVwRGVjb2RlcigpIHsKKyAgIGZvciAodW5zaWdu ZWQgYyA9IDA7IGMgPCBlbmNvZGVyXy5zaXplKCk7ICsrYykgeworICAgICBjb25zdCBSZWNvZGVk Q2hhcklEICZjb2RlID0gZW5jb2Rlcl9bY107CisgICAgIGRlY29kZXJfW2NvZGVdID0gYzsKKysg ICAgQVNTRVJUX0hPU1QoY29kZSgwKSA+PSAwICYmIGNvZGUoMCkgPCBjb2RlX3JhbmdlXyk7Cisg ICAgIGlzX3ZhbGlkX3N0YXJ0X1tjb2RlKDApXSA9IHRydWU7CisgICAgIFJlY29kZWRDaGFySUQg cHJlZml4ID0gY29kZTsKKyAgICAgdWludDMyX3QgbGVuID0gY29kZS5sZW5ndGgoKTsKK2RpZmYg LXJ1cE4gLS1uby1kZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NjdXRpbC91bmljaGFy Y29tcHJlc3MuaCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy9jY3V0aWwvdW5pY2hhcmNvbXByZXNz LmgKKy0tLSB0ZXNzZXJhY3QtNS41LjMvc3JjL2NjdXRpbC91bmljaGFyY29tcHJlc3MuaAkyMDI2 LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAorKysrIHRlc3NlcmFjdC01LjUuMy1uZXcv c3JjL2NjdXRpbC91bmljaGFyY29tcHJlc3MuaAkyMDI2LTA5LTIxIDEwOjI4OjEwLjI5MjIxMjQ3 OCArMDIwMAorQEAgLTg0LDcgKzg0LDE3IEBAIHB1YmxpYzoKKyAgICAgaWYgKGxlbmd0aF8gPiBr TWF4Q29kZUxlbikgeworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorLSAgICByZXR1cm4g ZnAtPkRlU2VyaWFsaXplKCZjb2RlX1swXSwgbGVuZ3RoXyk7CisrICAgIGlmICghZnAtPkRlU2Vy aWFsaXplKCZjb2RlX1swXSwgbGVuZ3RoXykpIHsKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAg IH0KKysgICAgLy8gQ29kZSB2YWx1ZXMgaW5kZXggYXJyYXlzIHNpemVkIGZyb20gdGhlIG1heGlt dW0gY29kZTsgcmVqZWN0IHZhbHVlcworKyAgICAvLyB0aGF0IGFyZSBvdXQgb2YgdGhlIHNhbmUg cmFuZ2UgZm9yIGEgcmVjb2RlZCBhbHBoYWJldC4KKysgICAgZm9yICh1aW50MzJfdCBpID0gMDsg aSA8IGxlbmd0aF87ICsraSkgeworKyAgICAgIGlmIChjb2RlX1tpXSA8IDAgfHwgY29kZV9baV0g Pj0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oVUlOVDE2X01BWCkpIHsKKysgICAgICAgIHJldHVybiBm YWxzZTsKKysgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHRydWU7CisgICB9CisgICBib29s IG9wZXJhdG9yPT0oY29uc3QgUmVjb2RlZENoYXJJRCAmb3RoZXIpIGNvbnN0IHsKKyAgICAgaWYg KGxlbmd0aF8gIT0gb3RoZXIubGVuZ3RoXykgeworQEAgLTE5MCw2ICsyMDAsNyBAQCBwdWJsaWM6 CisgICBpbnQgRGVjb2RlVW5pY2hhcihjb25zdCBSZWNvZGVkQ2hhcklEICZjb2RlKSBjb25zdDsK KyAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gY29kZSBpcyBhIHZhbGlkIHN0YXJ0IG9y IHNpbmdsZSBjb2RlLgorICAgYm9vbCBJc1ZhbGlkRmlyc3RDb2RlKGludCBjb2RlKSBjb25zdCB7 CisrICAgIEFTU0VSVF9IT1NUKGNvZGUgPj0gMCAmJiBjb2RlIDwgY29kZV9yYW5nZV8pOworICAg ICByZXR1cm4gaXNfdmFsaWRfc3RhcnRfW2NvZGVdOworICAgfQorICAgLy8gUmV0dXJucyBhIGxp c3Qgb2YgdmFsaWQgbm9uLWZpbmFsIG5leHQgY29kZXMgZm9yIGEgZ2l2ZW4gcHJlZml4IGNvZGUs CitkaWZmIC1ydXBOIC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3VuaXR0ZXN0L3Jl Y29kZXJfdGVzdC5jYyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0ZXN0L3JlY29kZXJfdGVzdC5j YworLS0tIHRlc3NlcmFjdC01LjUuMy91bml0dGVzdC9yZWNvZGVyX3Rlc3QuY2MJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3VuaXR0 ZXN0L3JlY29kZXJfdGVzdC5jYwkyMDI2LTA5LTIxIDEwOjI4OjEwLjI5MjQ5MjI0MiArMDIwMAor QEAgLTAsMCArMSw5MSBAQAorKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrLy8gRmlsZTogICAgICAgIHJlY29k ZXJfdGVzdC5jYworKy8vIERlc2NyaXB0aW9uOiBUZXN0cyB0aGF0IGEgVW5pY2hhckNvbXByZXNz IChMU1RNIHJlY29kZXIpIHdpdGggY29kZQorKy8vICAgICAgICAgICAgICB2YWx1ZXMgb3V0c2lk ZSB0aGUgc2FuZSByYW5nZSBpcyByZWplY3RlZCBhdCBsb2FkLgorKy8vICAgICAgICAgICAgICBO ZWdhdGl2ZSBjb2RlIHZhbHVlcyBsZWF2ZSBjb2RlX3JhbmdlXyBhdCB6ZXJvLCBzbworKy8vICAg ICAgICAgICAgICBTZXR1cERlY29kZXIgd3JpdGVzIGlzX3ZhbGlkX3N0YXJ0X1tjb2RlKDApXSBv dXQgb2YKKysvLyAgICAgICAgICAgICAgYm91bmRzIG9uIGEgc2l6ZS0wIHZlY3Rvcjxib29sPjsg aHVnZSBjb2RlIHZhbHVlcyB3cmFwCisrLy8gICAgICAgICAgICAgIGNvZGVfcmFuZ2VfIGFuZCBt YWtlIHJlc2l6ZSgpIHRocm93LgorKy8vCisrLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisrLy8geW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKy8vIFlv dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vIGh0dHA6Ly93d3cuYXBh Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysj aW5jbHVkZSAiaW5jbHVkZV9ndW5pdC5oIgorKworKyNpbmNsdWRlICJzZXJpYWxpcy5oIiAvLyBm b3IgVEZpbGUKKysjaW5jbHVkZSAidW5pY2hhcmNvbXByZXNzLmgiCisrCisrI2luY2x1ZGUgPGNz dGRpbnQ+CisrI2luY2x1ZGUgPHZlY3Rvcj4KKysKKytuYW1lc3BhY2UgdGVzc2VyYWN0IHsKKytu YW1lc3BhY2UgeworKworKy8vIEFwcGVuZHMgcmF3IGxpdHRsZS1lbmRpYW4gdmFsdWVzIHRvIGEg Ynl0ZSBidWZmZXIuCisrY2xhc3MgQnl0ZVdyaXRlciB7CisrcHVibGljOgorKyAgdm9pZCBQdXRV OCh1aW50MzJfdCB2KSB7IGRhdGFfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPih2ICYgMHhG RikpOyB9CisrICB2b2lkIFB1dFUzMih1aW50MzJfdCB2KSB7CisrICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNDsgKytpKSB7CisrICAgICAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+ KCh2ID4+ICg4ICogaSkpICYgMHhGRikpOworKyAgICB9CisrICB9CisrICB2b2lkIFB1dFMzMihp bnQzMl90IHYpIHsgUHV0VTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2KSk7IH0KKysgIGNvbnN0 IHN0ZDo6dmVjdG9yPGNoYXI+ICZkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KKysKKytw cml2YXRlOgorKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gZGF0YV87CisrfTsKKysKKysvLyBBIHNlcmlh bGl6ZWQgVW5pY2hhckNvbXByZXNzIHdpdGggb25lIGxlbmd0aC0xIFJlY29kZWRDaGFySUQgcGVy CisrLy8gZ2l2ZW4gY29kZSB2YWx1ZSAoc2VsZi1ub3JtYWxpemluZykuCisrc3RkOjp2ZWN0b3I8 Y2hhcj4gTWFrZVJlY29kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8aW50MzJfdD4gJmNvZGVzKSB7Cisr ICBCeXRlV3JpdGVyIHc7CisrICB3LlB1dFUzMihjb2Rlcy5zaXplKCkpOworKyAgZm9yIChpbnQz Ml90IGNvZGUgOiBjb2RlcykgeworKyAgICB3LlB1dFU4KDEpOyAvLyBzZWxmX25vcm1hbGl6ZWRf CisrICAgIHcuUHV0VTMyKDEpOyAvLyBsZW5ndGhfCisrICAgIHcuUHV0UzMyKGNvZGUpOyAvLyBj b2RlX1swXQorKyAgfQorKyAgcmV0dXJuIHcuZGF0YSgpOworK30KKysKKysvLyBBIHJlY29kZXIg Y29kZSBvZiAtMSBrZWVwcyBjb2RlX3JhbmdlXyBhdCAwLCBzbyBvbiB1bnBhdGNoZWQgY29kZQor Ky8vIFNldHVwRGVjb2RlciBwZXJmb3JtcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGludG8gdGhl IHNpemUtMAorKy8vIGlzX3ZhbGlkX3N0YXJ0XyB2ZWN0b3I8Ym9vbD4uCisrVEVTVChSZWNvZGVy VGVzdCwgUmVqZWN0c05lZ2F0aXZlQ29kZSkgeworKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXMg PSBNYWtlUmVjb2Rlcih7LTF9KTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3Bl bihieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOworKyAgVW5pY2hhckNvbXByZXNzIHJlY29k ZXI7CisrICBFWFBFQ1RfRkFMU0UocmVjb2Rlci5EZVNlcmlhbGl6ZSgmZnApKTsKKyt9CisrCisr Ly8gQSByZWNvZGVyIGNvZGUgb2YgSU5UMzJfTUFYIHdyYXBzIGNvZGVfcmFuZ2VfIHRvIGEgbmVn YXRpdmUgdmFsdWUsCisrLy8gc28gb24gdW5wYXRjaGVkIGNvZGUgU2V0dXBEZWNvZGVyJ3MgcmVz aXplKCkgdGhyb3dzLgorK1RFU1QoUmVjb2RlclRlc3QsIFJlamVjdHNIdWdlQ29kZSkgeworKyAg c3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXMgPSBNYWtlUmVjb2Rlcih7SU5UMzJfTUFYfSk7CisrICBU RmlsZSBmcDsKKysgIEFTU0VSVF9UUlVFKGZwLk9wZW4oYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXpl KCkpKTsKKysgIFVuaWNoYXJDb21wcmVzcyByZWNvZGVyOworKyAgRVhQRUNUX0ZBTFNFKHJlY29k ZXIuRGVTZXJpYWxpemUoJmZwKSk7CisrfQorKworKy8vIEEgdmFsaWQgcmVjb2RlciBtdXN0IHN0 aWxsIGJlIGFjY2VwdGVkIGFuZCB1c2FibGUuCisrVEVTVChSZWNvZGVyVGVzdCwgQWNjZXB0c1Zh bGlkQ29kZXMpIHsKKysgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ5dGVzID0gTWFrZVJlY29kZXIoezAs IDF9KTsKKysgIFRGaWxlIGZwOworKyAgQVNTRVJUX1RSVUUoZnAuT3BlbihieXRlcy5kYXRhKCks IGJ5dGVzLnNpemUoKSkpOworKyAgVW5pY2hhckNvbXByZXNzIHJlY29kZXI7CisrICBBU1NFUlRf VFJVRShyZWNvZGVyLkRlU2VyaWFsaXplKCZmcCkpOworKyAgRVhQRUNUX0VRKHJlY29kZXIuY29k ZV9yYW5nZSgpLCAyKTsKKysgIEVYUEVDVF9UUlVFKHJlY29kZXIuSXNWYWxpZEZpcnN0Q29kZSgw KSk7CisrICBFWFBFQ1RfVFJVRShyZWNvZGVyLklzVmFsaWRGaXJzdENvZGUoMSkpOworK30KKysK Kyt9IC8vIG5hbWVzcGFjZQorK30gLy8gbmFtZXNwYWNlIHRlc3NlcmFjdAoKZGlmZiAtLWdpdCBh L3Rlc3NlcmFjdC5zcGVjIGIvdGVzc2VyYWN0LnNwZWMKaW5kZXggY2Q0OGQxZC4uMWM4M2JmYSAx MDA2NDQKLS0tIGEvdGVzc2VyYWN0LnNwZWMKKysrIGIvdGVzc2VyYWN0LnNwZWMKQEAgLTgsNyAr OCw3IEBACiAKIE5hbWU6ICAgICAgICAgIHRlc3NlcmFjdAogVmVyc2lvbjogICAgICAgNS41LjMK LVJlbGVhc2U6ICAgICAgIDElez9kaXN0fQorUmVsZWFzZTogICAgICAgMiV7P2Rpc3R9CiBTdW1t YXJ5OiAgICAgICBSYXcgT0NSIEVuZ2luZQogCiBMaWNlbnNlOiAgICAgICBBcGFjaGUtMi4wCkBA IC0xOCw2ICsxOCwyMiBAQCBTb3VyY2UwOiAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVzc2Vy YWN0LW9jci90ZXNzZXJhY3QvYXJjaGl2ZS8le3ZlcnNpb259JXs/cAogIyBGaXggbGlicmFyeSBu YW1lIGNhc2UKICMgQnVpbGQgdHJhaW5pbmcgbGlicyBzdGF0aWNhbGx5CiBQYXRjaDE6ICAgICAg ICB0ZXNzZXJhY3RfY21ha2UucGF0Y2gKKyMgQmFja3BvcnQgZml4IGZvciBDVkUtMjAyNi04ODA0 NworUGF0Y2gyOiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3IvdGVzc2Vy YWN0L2NvbW1pdC8xYmRhNTA3OWIxYzhhN2UyNWY1MjM0ODY4Mzc0MjY5MDNkMjljZTg0LnBhdGNo CisjIEJhY2twb3J0IGZpeCBmb3IgQ1ZFLTIwMjYtODgwNDgKK1BhdGNoMzogICAgICAgIGh0dHBz Oi8vZ2l0aHViLmNvbS90ZXNzZXJhY3Qtb2NyL3Rlc3NlcmFjdC9jb21taXQvMTAzZGMxMzRlYjM2 NDExZGRjNjgzM2VjMjBhYTJjNzY3OTViZDBmZi5wYXRjaAorIyBCYWNrcG9ydCBmaXggZm9yIENW RS0yMDI2LTg4MDQ5CitQYXRjaDQ6ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVzc2VyYWN0 LW9jci90ZXNzZXJhY3QvY29tbWl0L2I0OTRhYzE4OTI1ZjlkOWFmZjllZjU4MTU0NzVkZTk5NDNh YjE5YmYucGF0Y2gKKyMgQmFja3BvcnQgZml4IGZvciBDVkUtMjAyNi04ODA1MAorUGF0Y2g1OiAg ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3IvdGVzc2VyYWN0L2NvbW1pdC9j OTRhNTUzMmVlMDRkYjVhNDkxOTU0MjgzMmZkOTRjYWVlNWVhNThmLnBhdGNoCisjIEJhY2twb3J0 IGZpeCBmb3IgQ1ZFLTIwMjYtODgwNTEKK1BhdGNoNjogICAgICAgIGh0dHBzOi8vZ2l0aHViLmNv bS90ZXNzZXJhY3Qtb2NyL3Rlc3NlcmFjdC9jb21taXQvNTZlMDljYTEyZTc1MTYyM2ZlNzk2Y2Ux NTU0Y2U3MDRiZmZkMmVmMC5wYXRjaAorIyBCYWNrcG9ydCBmaXggZm9yIENWRS0yMDI2LTg4MDUy CitQYXRjaDc6ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVzc2VyYWN0LW9jci90ZXNzZXJh Y3QvY29tbWl0LzJkMDRkNjQwZGIyZThjN2UzYmFiMjM2OWQ1OTkzNDNiNWE4Yjg0NDMucGF0Y2gK KyMgQmFja3BvcnQgZml4IGZvciBDVkUtMjAyNi04ODA1MworUGF0Y2g4OiAgICAgICAgaHR0cHM6 Ly9naXRodWIuY29tL3Rlc3NlcmFjdC1vY3IvdGVzc2VyYWN0L2NvbW1pdC84YjA1NzQ2ODBmM2Iy MmYyNDZhZGU2YTRjOGUzMDI5MTA0MjU1YzYzLnBhdGNoCisjIEJhY2twb3J0IGZpeCBmb3IgQ1ZF LTIwMjYtODgwNTQKK1BhdGNoOTogICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXNzZXJhY3Qt b2NyL3Rlc3NlcmFjdC9jb21taXQvNTUyNzcxMjM2YjBkODBjYmRiMGM3ZGQ4NTYxMjBmYTIxYTQ2 NzJlNS5wYXRjaAogCiAKIEJ1aWxkUmVxdWlyZXM6IGNtYWtlCkBAIC0yNzUsNiArMjkxLDkgQEAg Y3AgLWEgZG9jLyouNSAle2J1aWxkcm9vdH0le19tYW5kaXJ9L21hbjUvCiAKIAogJWNoYW5nZWxv ZworKiBNb24gU2VwIDIxIDIwMjYgU2FuZHJvIE1hbmkgPG1hbmlzYW5kcm9AZ21haWwuY29tPiAt IDUuNS4zLTIKKy0gQmFja3BvcnQgZml4ZXMgZm9yIENWRS0yMDI2LXs4ODA0Ny04ODA1NH0KKwog KiBXZWQgSnVsIDI5IDIwMjYgU2FuZHJvIE1hbmkgPG1hbmlzYW5kcm9AZ21haWwuY29tPiAtIDUu NS4zLTEKIC0gVXBkYXRlIHRvIDUuNS4zCiAKCmRpZmYgLS1naXQgYS90ZXNzZXJhY3RfY21ha2Uu cGF0Y2ggYi90ZXNzZXJhY3RfY21ha2UucGF0Y2gKaW5kZXggNjRhOTE5NC4uM2VmOTNjZSAxMDA2 NDQKLS0tIGEvdGVzc2VyYWN0X2NtYWtlLnBhdGNoCisrKyBiL3Rlc3NlcmFjdF9jbWFrZS5wYXRj aApAQCAtMSw2ICsxLDYgQEAKLWRpZmYgLXJ1cE4gdGVzc2VyYWN0LTUuNS4zL0NNYWtlTGlzdHMu dHh0IHRlc3NlcmFjdC01LjUuMy1uZXcvQ01ha2VMaXN0cy50eHQKK2RpZmYgLXJ1cE4gLS1uby1k ZXJlZmVyZW5jZSB0ZXNzZXJhY3QtNS41LjMvQ01ha2VMaXN0cy50eHQgdGVzc2VyYWN0LTUuNS4z LW5ldy9DTWFrZUxpc3RzLnR4dAogLS0tIHRlc3NlcmFjdC01LjUuMy9DTWFrZUxpc3RzLnR4dAky MDI2LTA3LTI0IDIwOjI3OjAyLjAwMDAwMDAwMCArMDIwMAotKysrIHRlc3NlcmFjdC01LjUuMy1u ZXcvQ01ha2VMaXN0cy50eHQJMjAyNi0wNy0yOSAwOTo0NjoxOS40NzE0NTY1ODMgKzAyMDAKKysr KyB0ZXNzZXJhY3QtNS41LjMtbmV3L0NNYWtlTGlzdHMudHh0CTIwMjYtMDktMjEgMTA6Mjg6MTAu MTA2NDMwMTY2ICswMjAwCiBAQCAtMzc5LDcgKzM3OSw3IEBAIGVsc2VpZihVTklYKQogICAgICBz ZXQoTElCX3B0aHJlYWQgcHRocmVhZCkKICAgIGVuZGlmKCkKQEAgLTQ2LDkgKzQ2LDkgQEAgZGlm ZiAtcnVwTiB0ZXNzZXJhY3QtNS41LjMvQ01ha2VMaXN0cy50eHQgdGVzc2VyYWN0LTUuNS4zLW5l dy9DTWFrZUxpc3RzLnR4dAogIGVuZGlmKCkKICAKICAjICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwot ZGlmZiAtcnVwTiB0ZXNzZXJhY3QtNS41LjMvc3JjL3RyYWluaW5nL0NNYWtlTGlzdHMudHh0IHRl c3NlcmFjdC01LjUuMy1uZXcvc3JjL3RyYWluaW5nL0NNYWtlTGlzdHMudHh0CitkaWZmIC1ydXBO IC0tbm8tZGVyZWZlcmVuY2UgdGVzc2VyYWN0LTUuNS4zL3NyYy90cmFpbmluZy9DTWFrZUxpc3Rz LnR4dCB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy90cmFpbmluZy9DTWFrZUxpc3RzLnR4dAogLS0t IHRlc3NlcmFjdC01LjUuMy9zcmMvdHJhaW5pbmcvQ01ha2VMaXN0cy50eHQJMjAyNi0wNy0yNCAy MDoyNzowMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyB0ZXNzZXJhY3QtNS41LjMtbmV3L3NyYy90cmFp bmluZy9DTWFrZUxpc3RzLnR4dAkyMDI2LTA3LTI5IDA5OjU2OjU2LjEzNzAyMTc4NyArMDIwMAor KysrIHRlc3NlcmFjdC01LjUuMy1uZXcvc3JjL3RyYWluaW5nL0NNYWtlTGlzdHMudHh0CTIwMjYt MDktMjEgMTA6Mjg6MTAuMTA2ODQwNjUwICswMjAwCiBAQCAtMTA3LDcgKzEwNyw3IEBAIGlmKE5P VCBESVNBQkxFRF9MRUdBQ1lfRU5HSU5FKQogICAgICBjb21tb24vdHJhaW5pbmdzYW1wbGVzZXQu aCkKICBlbmRpZigpCg==