From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 405 invoked from network); 29 Sep 2022 20:38:02 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 29 Sep 2022 20:38:02 -0000 Received: (qmail 13853 invoked by uid 550); 29 Sep 2022 20:37:58 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 13818 invoked from network); 29 Sep 2022 20:37:56 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date; bh=hlj0uF5gLQ2fAHZAPYGrz6XFoIPt7M9miHRAAtPYUqo=; b=PtZ8p7MtVgWBxBA77A0bwmLogZ6/Pbd6Td+To1T0Ov4kUPQXSpUARITBQ3kFAykmY4 mmqGlR3Us/A51ReeY4AWkH4rHHBm/Tfjx3ktGmvJiydUaWu9nzsuG8BI2n1kr43DFF+W OyH/BPmMIrIRlI0ZnQwN3NB27nJ6wD18qn26A1+khYVfYG4KpuXQMeFxBaYMHCgnYqNv z6naiLtrwG1nXCF5Ridb1pMDXfHYlq/HS/aqWCHMMJR14h5XDR6w1nJTQ8U08iXr152+ wdP0DwP3bF4vB74NtRAx1xxmPXsjNboiCJpKRdImP9n0HQXsxxRWu1vBk7bnKrqz57Zc GbvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date; bh=hlj0uF5gLQ2fAHZAPYGrz6XFoIPt7M9miHRAAtPYUqo=; b=gUL4mwFkb/arVVwDp3RKVkYvyI4Mk8slrO1qRaqzc96mZP2RwJUlyEvrfydBL6ZJLH xrX6p4wqaeQ4AXE7A/VyNwdhdR45/V8EeRiSnFeYBvoHqSJ1Ku6GtFueCoa+Db0XLO7o AefWyyrHr19tqpdH92+K2o+x/hlKchItREemlCBOJ1bnIuPHT0BFuiOlkyDHYddIChCw gZXtMHPvfM5cX7o9BOj9NjJAfoMft1JaGzrPKybseOd+O12I1KkD+vhJN/IyZvwMJmIu z+qWTnwPXiUWrW2B5fUBtY0mG/wk2dEO5ylYnrf3qWMNlxyUcn+RWs0z1SYUzRZI6h01 a/9g== X-Gm-Message-State: ACrzQf02DZbDz2+JesHjVrjt1ibrkfMiMbrgN9fV5PXMA54Ito0TLhrM Z4h2gGuEFXm3FUZxLANH/Hka5Sr6iQW/Frfs7IKxgs57E0M= X-Google-Smtp-Source: AMsMyM5Sx7BqFtFv6txJSUYaN33FGJgdLi9tV/M4ZzUWsuANewCakf4tkadUbgzEQtMe6rrYD75OQdBEy0BHjsRULIo= X-Received: by 2002:a05:6638:1c0b:b0:35a:26bc:88c0 with SMTP id ca11-20020a0566381c0b00b0035a26bc88c0mr2886717jab.249.1664483863310; Thu, 29 Sep 2022 13:37:43 -0700 (PDT) MIME-Version: 1.0 From: Colin Cross Date: Thu, 29 Sep 2022 13:37:32 -0700 Message-ID: To: musl@lists.openwall.com Content-Type: multipart/mixed; boundary="00000000000068d53705e9d6d9f3" Subject: [musl] crt: add dcrt1, with support for locating the dynamic loader at runtime --00000000000068d53705e9d6d9f3 Content-Type: text/plain; charset="UTF-8" I'm interested in seeing Ridley Combs' dcrt1 patch merged. Here's an updated version of the most recently posted patch[1], taken from [2] with [3] squashed in and a minor modification to remove the gotos from the _ERROR macro. The only differences between [1] and [2] are fixing a few warnings and removing an extra space. [1] https://www.openwall.com/lists/musl/2020/03/29/9 [2] https://github.com/rcombs/musl/commit/740155e21f7057a33e75a9ed4cb6fbf07f75d2a7 [3] https://github.com/rcombs/musl/commit/8ff8f3422510302c0ea47af7de9d59777069ed72 --00000000000068d53705e9d6d9f3 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-crt-add-dcrt1-with-support-for-locating-the-dynamic-.patch" Content-Disposition: attachment; filename="0001-crt-add-dcrt1-with-support-for-locating-the-dynamic-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8nink7r0 RnJvbSBkNzdkMDBkYWZmOGVjMTY2YjgwMTcyNDkzZjQ5ZmU2OGRhNjViYmQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByY29tYnMgPHJjb21ic0ByY29tYnMubWU+CkRhdGU6IFRodSwg MjggTWFyIDIwMTkgMTg6MjQ6MjQgLTA1MDAKU3ViamVjdDogW1BBVENIXSBjcnQ6IGFkZCBkY3J0 MSwgd2l0aCBzdXBwb3J0IGZvciBsb2NhdGluZyB0aGUgZHluYW1pYyBsb2FkZXIKIGF0IHJ1bnRp bWUKCi0tLQogTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgMTAgKy0KIGNydC9kY3J0MS5jICAg ICAgICAgICAgIHwgNDEwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGxkc28vZGxzdGFydC5jICAgICAgICAgIHwgIDYxICsrKystLQogdG9vbHMvbGQubXVzbC1jbGFu Zy5pbiAgfCAgMTcgKy0KIHRvb2xzL211c2wtY2xhbmcuaW4gICAgIHwgICA4ICsKIHRvb2xzL211 c2wtZ2NjLnNwZWNzLnNoIHwgICA0ICstCiA2IGZpbGVzIGNoYW5nZWQsIDQ4NCBpbnNlcnRpb25z KCspLCAyNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnQvZGNydDEuYwoKZGlm ZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZThjYzQ0MzYuLjI2ZDFjZTNlIDEw MDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTA3LDEzICsxMDcsMTUgQEAg b2JqL3NyYy9pbnRlcm5hbC92ZXJzaW9uLmg6ICQod2lsZGNhcmQgJChzcmNkaXIpL1ZFUlNJT04g JChzcmNkaXIpLy5naXQpCiAKIG9iai9zcmMvaW50ZXJuYWwvdmVyc2lvbi5vIG9iai9zcmMvaW50 ZXJuYWwvdmVyc2lvbi5sbzogb2JqL3NyYy9pbnRlcm5hbC92ZXJzaW9uLmgKIAotb2JqL2NydC9y Y3J0MS5vIG9iai9sZHNvL2Rsc3RhcnQubG8gb2JqL2xkc28vZHlubGluay5sbzogJChzcmNkaXIp L3NyYy9pbnRlcm5hbC9keW5saW5rLmggJChzcmNkaXIpL2FyY2gvJChBUkNIKS9yZWxvYy5oCitv YmovY3J0L3JjcnQxLm8gb2JqL2NydC9kY3J0MS5vIG9iai9sZHNvL2Rsc3RhcnQubG8gb2JqL2xk c28vZHlubGluay5sbzogJChzcmNkaXIpL3NyYy9pbnRlcm5hbC9keW5saW5rLmggJChzcmNkaXIp L2FyY2gvJChBUkNIKS9yZWxvYy5oCiAKLW9iai9jcnQvY3J0MS5vIG9iai9jcnQvc2NydDEubyBv YmovY3J0L3JjcnQxLm8gb2JqL2xkc28vZGxzdGFydC5sbzogJChzcmNkaXIpL2FyY2gvJChBUkNI KS9jcnRfYXJjaC5oCitvYmovY3J0L2NydDEubyBvYmovY3J0L3NjcnQxLm8gb2JqL2NydC9yY3J0 MS5vIG9iai9jcnQvZGNydDEubyBvYmovbGRzby9kbHN0YXJ0LmxvOiAkKHNyY2RpcikvYXJjaC8k KEFSQ0gpL2NydF9hcmNoLmgKIAotb2JqL2NydC9yY3J0MS5vOiAkKHNyY2RpcikvbGRzby9kbHN0 YXJ0LmMKK29iai9jcnQvcmNydDEubyBvYmovY3J0L2RjcnQxLm86ICQoc3JjZGlyKS9sZHNvL2Rs c3RhcnQuYwogCi1vYmovY3J0L1NjcnQxLm8gb2JqL2NydC9yY3J0MS5vOiBDRkxBR1NfQUxMICs9 IC1mUElDCitvYmovY3J0L1NjcnQxLm8gb2JqL2NydC9yY3J0MS5vIG9iai9jcnQvZGNydDEubzog Q0ZMQUdTX0FMTCArPSAtZlBJQworCitvYmovY3J0L2RjcnQxLm86IENGTEFHU19BTEwgKz0gLURM RFNPX1BBVEhOQU1FPVwiJChMRFNPX1BBVEhOQU1FKVwiCiAKIE9QVElNSVpFX1NSQ1MgPSAkKHdp bGRjYXJkICQoT1BUSU1JWkVfR0xPQlM6JT0kKHNyY2Rpcikvc3JjLyUpKQogJChPUFRJTUlaRV9T UkNTOiQoc3JjZGlyKS8lLmM9b2JqLyUubykgJChPUFRJTUlaRV9TUkNTOiQoc3JjZGlyKS8lLmM9 b2JqLyUubG8pOiBDRkxBR1MgKz0gLU8zCmRpZmYgLS1naXQgYS9jcnQvZGNydDEuYyBiL2NydC9k Y3J0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lZjQ4OWU4MgotLS0g L2Rldi9udWxsCisrKyBiL2NydC9kY3J0MS5jCkBAIC0wLDAgKzEsNDEwIEBACisjZGVmaW5lIFNZ U0NBTExfTk9fVExTIDEKKworI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGxpYmdl bi5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYXRvbWljLmgiCisjaW5jbHVkZSAiZHlubGluay5oIgor I2luY2x1ZGUgInN5c2NhbGwuaCIKKworZXh0ZXJuIHdlYWsgaGlkZGVuIGNvbnN0IHNpemVfdCBf RFlOQU1JQ1tdOworCitpbnQgbWFpbigpOword2VhayB2b2lkIF9pbml0KCk7Cit3ZWFrIHZvaWQg X2ZpbmkoKTsKK3dlYWsgX05vcmV0dXJuIGludCBfX2xpYmNfc3RhcnRfbWFpbihpbnQgKCopKCks IGludCwgY2hhciAqKiwKKwl2b2lkICgqKSgpLCB2b2lkKCopKCksIHZvaWQoKikoKSk7CisKKyNk ZWZpbmUgU1RBUlQgIl9zdGFydCIKKyNkZWZpbmUgX2Rsc3RhcnRfYyBfc3RhcnRfYworI2RlZmlu ZSBETF9ETkkKKyNpbmNsdWRlICIuLi9sZHNvL2Rsc3RhcnQuYyIKKworI2lmbmRlZiBQQUdFU0la RQorI2lmZGVmIFBBR0VfU0laRQorI3VuZGVmIFBBR0VfU0laRSAvLyBXZSBkb24ndCB3YW50IHRv IHVzZSBsaWJjLnBhZ2Vfc2l6ZSBoZXJlCisjZW5kaWYKK3N0YXRpYyBzaXplX3QgcGFnZV9zaXpl OworI2RlZmluZSBQQUdFX1NJWkUgcGFnZV9zaXplCisjZW5kaWYKKworI2lmZGVmIFNZU19tbWFw MgorI2RlZmluZSBjcnRfbW1hcChzdGFydCwgbGVuLCBwcm90LCBmbGFncywgZmQsIG9mZikgKHZv aWQqKV9fc3lzY2FsbChTWVNfbW1hcDIsIHN0YXJ0LCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgb2Zm L1NZU0NBTExfTU1BUDJfVU5JVCkKKyNlbHNlCisjZGVmaW5lIGNydF9tbWFwKHN0YXJ0LCBsZW4s IHByb3QsIGZsYWdzLCBmZCwgb2ZmKSAodm9pZCopX19zeXNjYWxsKFNZU19tbWFwLCBzdGFydCwg bGVuLCBwcm90LCBmbGFncywgZmQsIG9mZikKKyNlbmRpZgorCisjZGVmaW5lIGNydF9tdW5tYXAo cHRyLCBsZW4pIF9fc3lzY2FsbChTWVNfbXVubWFwLCBwdHIsIGxlbikKKworc3RhdGljIGlubGlu ZSBpbnQgY3J0X21wcm90ZWN0KHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBwcm90KQorewor CXNpemVfdCBzdGFydCwgZW5kOworCXN0YXJ0ID0gKHNpemVfdClhZGRyICYgLVBBR0VfU0laRTsK KwllbmQgPSAoc2l6ZV90KSgoY2hhciAqKWFkZHIgKyBsZW4gKyBQQUdFX1NJWkUtMSkgJiAtUEFH RV9TSVpFOworCXJldHVybiBfX3N5c2NhbGwoU1lTX21wcm90ZWN0LCBzdGFydCwgZW5kLXN0YXJ0 LCBwcm90KTsKK30KKworI2RlZmluZSBjcnRfcmVhZChmZCwgYnVmLCBzaXplKSBfX3N5c2NhbGwo U1lTX3JlYWQsIGZkLCBidWYsIHNpemUpCisjZGVmaW5lIGNydF9wcmVhZChmZCwgYnVmLCBzaXpl LCBvZnMpIF9fc3lzY2FsbChTWVNfcHJlYWQsIGZkLCBidWYsIHNpemUsIF9fU1lTQ0FMTF9MTF9Q Ulcob2ZzKSkKKyNkZWZpbmUgY3J0X3dyaXRlKGZkLCBidWYsIHNpemUpIF9fc3lzY2FsbChTWVNf d3JpdGUsIGZkLCBidWYsIHNpemUpCisKKyNkZWZpbmUgbWFwX2ZhaWxlZCh2YWwpICgodW5zaWdu ZWQgbG9uZyl2YWwgPiAtNDA5NlVMKQorCisjaWZkZWYgU1lTX3JlYWRsaW5rCisjZGVmaW5lIGNy dF9yZWFkbGluayhwYXRoLCBidWYsIGJ1ZnNpemUpIF9fc3lzY2FsbChTWVNfcmVhZGxpbmssIHBh dGgsIGJ1ZiwgYnVmc2l6ZSkKKyNlbHNlCisjZGVmaW5lIGNydF9yZWFkbGluayhwYXRoLCBidWYs IGJ1ZnNpemUpIF9fc3lzY2FsbChTWVNfcmVhZGxpbmthdCwgQVRfRkRDV0QsIHBhdGgsIGJ1Ziwg YnVmc2l6ZSkKKyNlbmRpZgorCisjaWZkZWYgU1lTX2FjY2VzcworI2RlZmluZSBjcnRfYWNjZXNz KGZpbGVuYW1lLCBhbW9kZSkgX19zeXNjYWxsKFNZU19hY2Nlc3MsIGZpbGVuYW1lLCBhbW9kZSkK KyNlbHNlCisjZGVmaW5lIGNydF9hY2Nlc3MoZmlsZW5hbWUsIGFtb2RlKSBfX3N5c2NhbGwoU1lT X2ZhY2Nlc3NhdCwgQVRfRkRDV0QsIGZpbGVuYW1lLCBhbW9kZSwgMCkKKyNlbmRpZgorCitzdGF0 aWMgdm9pZCAqY3J0X21lbWNweSh2b2lkICpyZXN0cmljdCBkZXN0LCBjb25zdCB2b2lkICpyZXN0 cmljdCBzcmMsIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGNoYXIgKmQgPSBkZXN0OworCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnMgPSBzcmM7CisJZm9yICg7IG47IG4tLSkgKmQrKyA9ICpzKys7CisJ cmV0dXJuIGRlc3Q7Cit9CisKK3N0YXRpYyB2b2lkICpjcnRfbWVtc2V0KHZvaWQgKmRlc3QsIGlu dCBjLCBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBjaGFyICpzID0gZGVzdDsKKwlmb3IgKDsgbjsg bi0tLCBzKyspICpzID0gYzsKKwlyZXR1cm4gZGVzdDsKK30KKworc3RhdGljIHNpemVfdCBjcnRf c3RybGVuKGNvbnN0IGNoYXIgKnMpCit7CisJY29uc3QgY2hhciAqYSA9IHM7CisJZm9yICg7ICpz OyBzKyspOworCXJldHVybiBzLWE7Cit9CisKK3N0YXRpYyBjaGFyICpjcnRfc3RyY2hybnVsKGNv bnN0IGNoYXIgKnMsIGludCBjKQoreworCWMgPSAodW5zaWduZWQgY2hhciljOworCWlmICghYykg cmV0dXJuIChjaGFyICopcyArIGNydF9zdHJsZW4ocyk7CisJZm9yICg7ICpzICYmICoodW5zaWdu ZWQgY2hhciAqKXMgIT0gYzsgcysrKTsKKwlyZXR1cm4gKGNoYXIgKilzOworfQorCitzdGF0aWMg aW50IGNydF9zdHJuY21wKGNvbnN0IGNoYXIgKl9sLCBjb25zdCBjaGFyICpfciwgc2l6ZV90IG4p Cit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbD0odm9pZCAqKV9sLCAqcj0odm9pZCAqKV9yOwor CWlmICghbi0tKSByZXR1cm4gMDsKKwlmb3IgKDsgKmwgJiYgKnIgJiYgbiAmJiAqbCA9PSAqciA7 IGwrKywgcisrLCBuLS0pOworCXJldHVybiAqbCAtICpyOworfQorCitzdGF0aWMgY2hhciAqY3J0 X2dldGVudihjb25zdCBjaGFyICpuYW1lLCBjaGFyICoqZW52aXJvbikKK3sKKwlzaXplX3QgbCA9 IGNydF9zdHJjaHJudWwobmFtZSwgJz0nKSAtIG5hbWU7CisJaWYgKGwgJiYgIW5hbWVbbF0gJiYg ZW52aXJvbikKKwkJZm9yIChjaGFyICoqZSA9IGVudmlyb247ICplOyBlKyspCisJCQlpZiAoIWNy dF9zdHJuY21wKG5hbWUsICplLCBsKSAmJiBsWyplXSA9PSAnPScpCisJCQkJcmV0dXJuICplICsg bCsxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm1hcF9saWJyYXJ5KGlu dCBmZCkKK3sKKwlzaXplX3QgYWRkcl9taW49U0laRV9NQVgsIGFkZHJfbWF4PTA7CisJc2l6ZV90 IHRoaXNfbWluLCB0aGlzX21heDsKKwlvZmZfdCBvZmZfc3RhcnQgPSAwOworCUVoZHIgZWg7CisJ UGhkciAqcGgsICpwaDA7CisJdW5zaWduZWQgcHJvdCA9IDA7CisJdW5zaWduZWQgY2hhciAqbWFw PU1BUF9GQUlMRUQ7CisJc2l6ZV90IGk7CisKKwlzc2l6ZV90IGwgPSBjcnRfcmVhZChmZCwgJmVo LCBzaXplb2YgZWgpOworCWlmIChsPDApIGdvdG8gZXJyb3I7CisJaWYgKGw8c2l6ZW9mIGVoIHx8 IChlaC5lX3R5cGUgIT0gRVRfRFlOICYmIGVoLmVfdHlwZSAhPSBFVF9FWEVDKSkKKwkJZ290byBl cnJvcjsKKwlmb3IgKGkgPSAwOyBpIDwgZWguZV9waG51bTsgaSsrLCBwaD0odm9pZCAqKSgoY2hh ciAqKXBoK2VoLmVfcGhlbnRzaXplKSkgeworCQlQaGRyIHBoYnVmOworCQlwaCA9ICZwaGJ1ZjsK KwkJbCA9IGNydF9wcmVhZChmZCwgcGgsIHNpemVvZiAqcGgsIGVoLmVfcGhvZmYgKyBlaC5lX3Bo ZW50c2l6ZSAqIGkpOworCQlpZiAobCA8IHNpemVvZiAqcGgpIGdvdG8gZXJyb3I7CisJCWlmIChw aC0+cF90eXBlICE9IFBUX0xPQUQpIGNvbnRpbnVlOworCQlpZiAocGgtPnBfdmFkZHIgPCBhZGRy X21pbikgeworCQkJYWRkcl9taW4gPSBwaC0+cF92YWRkcjsKKwkJCW9mZl9zdGFydCA9IHBoLT5w X29mZnNldDsKKwkJCXByb3QgPSAoKChwaC0+cF9mbGFncyZQRl9SKSA/IFBST1RfUkVBRCA6IDAp IHwKKwkJCQkoKHBoLT5wX2ZsYWdzJlBGX1cpID8gUFJPVF9XUklURTogMCkgfAorCQkJCSgocGgt PnBfZmxhZ3MmUEZfWCkgPyBQUk9UX0VYRUMgOiAwKSk7CisJCX0KKwkJaWYgKHBoLT5wX3ZhZGRy ICsgcGgtPnBfbWVtc3ogPiBhZGRyX21heCkgeworCQkJYWRkcl9tYXggPSBwaC0+cF92YWRkciAr IHBoLT5wX21lbXN6OworCQl9CisJfQorCisJLyogV2UgcmVseSBvbiB0aGUgaGVhZGVyIGJlaW5n IG1hcHBlZCBhcyByZWFkYWJsZSBsYXRlciAqLworCWlmIChhZGRyX21pbiAhPSAwIHx8IG9mZl9z dGFydCAhPSAwIHx8IGFkZHJfbWF4ID09IDAgfHwgIShwcm90ICYgUFJPVF9SRUFEKSkKKwkJZ290 byBlcnJvcjsKKworCWFkZHJfbWF4ICs9IFBBR0VfU0laRS0xOworCWFkZHJfbWF4ICY9IC1QQUdF X1NJWkU7CisKKwkvKiBUaGUgZmlyc3QgdGltZSwgd2UgbWFwIHRvbyBtdWNoLCBwb3NzaWJseSBl dmVuIG1vcmUgdGhhbgorCSAqIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUuIFRoaXMgaXMgb2theSBi ZWNhdXNlIHdlIHdpbGwgbm90CisJICogdXNlIHRoZSBpbnZhbGlkIHBhcnQ7IHdlIGp1c3QgbmVl ZCB0byByZXNlcnZlIHRoZSByaWdodAorCSAqIGFtb3VudCBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3Bh Y2UgdG8gbWFwIG92ZXIgbGF0ZXIuICovCisJbWFwID0gY3J0X21tYXAoMCwgYWRkcl9tYXgsIHBy b3QsIE1BUF9QUklWQVRFLCBmZCwgb2ZmX3N0YXJ0KTsKKwlpZiAobWFwX2ZhaWxlZChtYXApKSBn b3RvIGVycm9yOworCisJcGgwID0gKHZvaWQqKShtYXAgKyBlaC5lX3Bob2ZmKTsKKworCWZvciAo cGg9cGgwLCBpPWVoLmVfcGhudW07IGk7IGktLSwgcGg9KHZvaWQgKikoKGNoYXIgKilwaCtlaC5l X3BoZW50c2l6ZSkpIHsKKwkJaWYgKHBoLT5wX3R5cGUgIT0gUFRfTE9BRCkgY29udGludWU7CisJ CXRoaXNfbWluID0gcGgtPnBfdmFkZHIgJiAtUEFHRV9TSVpFOworCQl0aGlzX21heCA9IHBoLT5w X3ZhZGRyK3BoLT5wX21lbXN6K1BBR0VfU0laRS0xICYgLVBBR0VfU0laRTsKKwkJb2ZmX3N0YXJ0 ID0gcGgtPnBfb2Zmc2V0ICYgLVBBR0VfU0laRTsKKwkJcHJvdCA9ICgoKHBoLT5wX2ZsYWdzJlBG X1IpID8gUFJPVF9SRUFEIDogMCkgfAorCQkJKChwaC0+cF9mbGFncyZQRl9XKSA/IFBST1RfV1JJ VEU6IDApIHwKKwkJCSgocGgtPnBfZmxhZ3MmUEZfWCkgPyBQUk9UX0VYRUMgOiAwKSk7CisJCS8q IFJldXNlIHRoZSBleGlzdGluZyBtYXBwaW5nIGZvciB0aGUgbG93ZXN0LWFkZHJlc3MgTE9BRCAq LworCQlpZiAoKHBoLT5wX3ZhZGRyICYgLVBBR0VfU0laRSkgIT0gYWRkcl9taW4pCisJCQlpZiAo bWFwX2ZhaWxlZChjcnRfbW1hcChtYXArdGhpc19taW4sIHRoaXNfbWF4LXRoaXNfbWluLCBwcm90 LCBNQVBfUFJJVkFURXxNQVBfRklYRUQsIGZkLCBvZmZfc3RhcnQpKSkKKwkJCQlnb3RvIGVycm9y OworCQlpZiAocGgtPnBfbWVtc3ogPiBwaC0+cF9maWxlc3ogJiYgKHBoLT5wX2ZsYWdzJlBGX1cp KSB7CisJCQlzaXplX3QgYnJrID0gKHNpemVfdCltYXArcGgtPnBfdmFkZHIrcGgtPnBfZmlsZXN6 OworCQkJc2l6ZV90IHBnYnJrID0gYnJrK1BBR0VfU0laRS0xICYgLVBBR0VfU0laRTsKKwkJCWNy dF9tZW1zZXQoKHZvaWQgKilicmssIDAsIHBnYnJrLWJyayAmIFBBR0VfU0laRS0xKTsKKwkJCWlm IChwZ2Jyay0oc2l6ZV90KW1hcCA8IHRoaXNfbWF4ICYmIG1hcF9mYWlsZWQoY3J0X21tYXAoKHZv aWQgKilwZ2JyaywgKHNpemVfdCltYXArdGhpc19tYXgtcGdicmssIHByb3QsIE1BUF9QUklWQVRF fE1BUF9GSVhFRHxNQVBfQU5PTllNT1VTLCAtMSwgMCkpKQorCQkJCWdvdG8gZXJyb3I7CisJCX0K Kwl9CisJcmV0dXJuIG1hcDsKK2Vycm9yOgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBk ZWNvZGVfdmVjKGNvbnN0IHNpemVfdCAqdiwgc2l6ZV90ICphLCBzaXplX3QgY250KQoreworCXNp emVfdCBpOworCWZvciAoaT0wOyBpPGNudDsgaSsrKSBhW2ldID0gMDsKKwlmb3IgKDsgdlswXTsg dis9MikgaWYgKHZbMF0tMTxjbnQtMSkgeworCQlhWzBdIHw9IDFVTDw8dlswXTsKKwkJYVt2WzBd XSA9IHZbMV07CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfcnBhdGgoY29uc3QgY2hhciAqKnJ1 bnBhdGgsIGNvbnN0IHNpemVfdCAqZHluLCB1bnNpZ25lZCBjaGFyICpiYXNlKQoreworCS8qIERU X1NUUlRBQiBpcyBwcmUtcmVsb2NhdGVkIGZvciB1cyBieSBkbHN0YXJ0ICovCisJY29uc3QgY2hh ciAqc3RyaW5ncyA9IChjaGFyKiliYXNlICsgZHluW0RUX1NUUlRBQl07CisKKwkqcnVucGF0aCA9 IE5VTEw7CisKKwlpZiAoZHluWzBdICYgKDEgPDwgRFRfUlBBVEgpKQorCQkqcnVucGF0aCA9IHN0 cmluZ3MgKyBkeW5bRFRfUlBBVEhdOworCWlmIChkeW5bMF0gJiAoMSA8PCBEVF9SVU5QQVRIKSkK KwkJKnJ1bnBhdGggPSBzdHJpbmdzICsgZHluW0RUX1JVTlBBVEhdOworfQorCitzdGF0aWMgc2l6 ZV90IGZpbmRfbGlua2VyKGNoYXIgKm91dGJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIGNvbnN0IGNoYXIg KnRoaXNfcGF0aCwgc2l6ZV90IHRoaXNsLCBjb25zdCBzaXplX3QgKmR5biwgdW5zaWduZWQgY2hh ciAqYmFzZSwgY2hhciAqKmVudmlyb24sIGludCBzZWN1cmUpCit7CisJY29uc3QgY2hhciAqcGF0 aHNbMl07IC8vIGVudnBhdGgsIHJwYXRoL3J1bnBhdGgKKwlzaXplX3QgaTsKKworCS8vIEluIHRo ZSBzdWlkL3NlY3VyZSBjYXNlLCBza2lwIGV2ZXJ5dGhpbmcgYW5kIHVzZSB0aGUgZml4ZWQgcGF0 aAorCWlmIChzZWN1cmUpCisJCWdvdG8gZGVmYXVsdF9wYXRoOworCisJLy8gU3RyaXAgZmlsZW5h bWUKKwlpZiAodGhpc2wpCisJCXRoaXNsLS07CisJd2hpbGUgKHRoaXNsID4gMSAmJiB0aGlzX3Bh dGhbdGhpc2xdID09ICcvJykKKwkJdGhpc2wtLTsKKwl3aGlsZSAodGhpc2wgPiAwICYmIHRoaXNf cGF0aFt0aGlzbF0gIT0gJy8nKQorCQl0aGlzbC0tOworCisJY29uc3QgY2hhciAqZW52cGF0aCA9 IGNydF9nZXRlbnYoIkxEX0xPQURFUl9QQVRIIiwgZW52aXJvbik7CisJaWYgKGVudnBhdGgpIHsK KwkJc2l6ZV90IGVudmxlbiA9IGNydF9zdHJsZW4oZW52cGF0aCk7CisJCWlmIChlbnZsZW4gPCBi dWZzaXplKSB7CisJCQljcnRfbWVtY3B5KG91dGJ1ZiwgZW52cGF0aCwgZW52bGVuICsgMSk7CisJ CQlyZXR1cm4gZW52bGVuICsgMTsKKwkJfQorCX0KKworCWdldF9ycGF0aCgmcGF0aHNbMV0sIGR5 biwgYmFzZSk7CisKKwlwYXRoc1swXSA9IGNydF9nZXRlbnYoIkxEX0xJQlJBUllfUEFUSCIsIGVu dmlyb24pOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQljb25zdCBjaGFyICpwID0g cGF0aHNbaV07CisJCWNoYXIgKm8gPSBvdXRidWY7CisJCWlmICghcCkKKwkJCWNvbnRpbnVlOwor CQlmb3IgKDs7KSB7CisJCQlpZiAoIWNydF9zdHJuY21wKHAsICIkT1JJR0lOIiwgNykgfHwKKwkJ CQkJIWNydF9zdHJuY21wKHAsICIke09SSUdJTn0iLCA5KSkgeworCQkJCWlmIChvICsgdGhpc2wg KyAxIDwgb3V0YnVmICsgYnVmc2l6ZSkgeworCQkJCQljcnRfbWVtY3B5KG8sIHRoaXNfcGF0aCwg dGhpc2wpOworCQkJCQlvICs9IHRoaXNsOworCQkJCX0gZWxzZSB7CisJCQkJCW8gPSBvdXRidWYg KyBidWZzaXplIC0gMTsKKwkJCQl9CisJCQkJcCArPSAocFsxXSA9PSAneycgPyA5IDogNyk7CisJ CQl9IGVsc2UgaWYgKCpwID09ICc6JyB8fCAhKnApIHsKKyNkZWZpbmUgTERTT19GSUxFTkFNRSAi bGQtbXVzbC0iIExEU09fQVJDSCAiLnNvLjEiCisJCQkJaWYgKG8gKyBzaXplb2YoTERTT19GSUxF TkFNRSkgKyAxIDwgb3V0YnVmICsgYnVmc2l6ZSkgeworCQkJCQkqbysrID0gJy8nOworCQkJCQlj cnRfbWVtY3B5KG8sIExEU09fRklMRU5BTUUsIHNpemVvZihMRFNPX0ZJTEVOQU1FKSk7CisJCQkJ CWlmICghY3J0X2FjY2VzcyhvdXRidWYsIFJfT0sgfCBYX09LKSkKKwkJCQkJCXJldHVybiAobyAr IHNpemVvZihMRFNPX0ZJTEVOQU1FKSkgLSBvdXRidWY7CisJCQkJfQorCQkJCWlmICghKnApCisJ CQkJCWJyZWFrOworCQkJCW8gPSBvdXRidWY7CisJCQkJcCsrOworCQkJfSBlbHNlIHsKKwkJCQlp ZiAobyA8IG91dGJ1ZiArIGJ1ZnNpemUpCisJCQkJCSpvKysgPSAqcDsKKwkJCQlwKys7CisJCQl9 CisJCX0KKwl9CisKKwlkZWZhdWx0X3BhdGg6CisJLy8gRGlkbid0IGZpbmQgYSB1c2FibGUgbG9h ZGVyIGFueXdoZXJlIChvciBpbiBzZWN1cmUgbW9kZSksIHNvIHRyeSB0aGUgZGVmYXVsdAorCWNy dF9tZW1jcHkob3V0YnVmLCBMRFNPX1BBVEhOQU1FLCBzaXplb2YoTERTT19QQVRITkFNRSkpOwor CXJldHVybiBzaXplb2YoTERTT19QQVRITkFNRSk7Cit9CisKKyNkZWZpbmUgX0VSUk9SKHN0cikg aWYgKCFzZWN1cmUpIGNydF93cml0ZSgyLCBzdHIsIHNpemVvZihzdHIpIC0gMSkKKyNkZWZpbmUg RVJST1Ioc3RyKSBfRVJST1IoIkRDUlQ6ICIgc3RyICJcbiIpCisKK2hpZGRlbiBfTm9yZXR1cm4g dm9pZCBfX2RsczIodW5zaWduZWQgY2hhciAqYmFzZSwgc2l6ZV90ICpwKQoreworCWludCBhcmdj ID0gcFswXTsKKwljaGFyICoqYXJndiA9ICh2b2lkICopKHArMSk7CisJaW50IGZkOworCWludCBz ZWN1cmU7CisJRWhkciAqbG9hZGVyX2hkcjsKKwlQaGRyICpuZXdfaGRyOworCXZvaWQgKmVudHJ5 OworCWNoYXIgdGhpc19wYXRoW1BBVEhfTUFYXTsKKwlzaXplX3QgdGhpc2w7CisJY2hhciBsaW5r ZXJfcGF0aFtQQVRIX01BWF07CisJc2l6ZV90IGxpbmtlcl9sZW47CisJc2l6ZV90IGk7CisJc2l6 ZV90IGF1eFtBVVhfQ05UXTsKKwlzaXplX3QgKmF1eHY7CisJc2l6ZV90IGR5bltEWU5fQ05UXTsK KwljaGFyICoqZW52aXJvbiA9IGFyZ3YgKyBhcmdjICsgMTsKKworCS8vIFdlJ3JlIGFscmVhZHkg ZmluaXNoZWQgaGVyZTsganVzdCBydW4gbWFpbi4KKwlpZiAoX19saWJjX3N0YXJ0X21haW4pCisJ CV9fbGliY19zdGFydF9tYWluKG1haW4sIGFyZ2MsIGFyZ3YsIF9pbml0LCBfZmluaSwgMCk7CisK KwkvKiBGaW5kIGF1eCB2ZWN0b3IganVzdCBwYXN0IGVudmlyb25bXSBhbmQgdXNlIGl0IHRvIGlu aXRpYWxpemUKKwkqIGdsb2JhbCBkYXRhIHRoYXQgbWF5IGJlIG5lZWRlZCBiZWZvcmUgd2UgY2Fu IG1ha2Ugc3lzY2FsbHMuICovCisJZm9yIChpID0gYXJnYyArIDE7IGFyZ3ZbaV07IGkrKyk7CisJ YXV4diA9ICh2b2lkICopKGFyZ3YgKyBpICsgMSk7CisJZGVjb2RlX3ZlYyhhdXh2LCBhdXgsIEFV WF9DTlQpOworCXNlY3VyZSA9ICgoYXV4WzBdICYgMHg3ODAwKSAhPSAweDc4MDAgfHwgYXV4W0FU X1VJRF0gIT0gYXV4W0FUX0VVSURdCisJCXx8IGF1eFtBVF9HSURdICE9IGF1eFtBVF9FR0lEXSB8 fCBhdXhbQVRfU0VDVVJFXSk7CisKKyNpZm5kZWYgUEFHRVNJWkUKKwlwYWdlX3NpemUgPSBhdXhb QVRfUEFHRVNaXTsKKyNlbmRpZgorCisJZGVjb2RlX3ZlYyhfRFlOQU1JQywgZHluLCBEWU5fQ05U KTsKKworCXRoaXNsID0gY3J0X3JlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIHRoaXNfcGF0aCwg c2l6ZW9mIHRoaXNfcGF0aCk7CisJbGlua2VyX2xlbiA9IGZpbmRfbGlua2VyKGxpbmtlcl9wYXRo LCBzaXplb2YgbGlua2VyX3BhdGgsIHRoaXNfcGF0aCwgdGhpc2wsIGR5biwgYmFzZSwgZW52aXJv biwgc2VjdXJlKTsKKworCWZkID0gX19zeXNfb3BlbjIoLCBsaW5rZXJfcGF0aCwgT19SRE9OTFkp OworCWlmIChmZCA8IDApIHsKKwkJRVJST1IoIkZhaWxlZCB0byBvcGVuIGxkc28iKTsKKwkJZ290 byBlcnJvcjsKKyAgICAgICAgfQorCisJbG9hZGVyX2hkciA9IG1hcF9saWJyYXJ5KGZkKTsKKwlp ZiAoIWxvYWRlcl9oZHIpIHsKKwkJRVJST1IoIkZhaWxlZCB0byBtYXAgbGRzbyIpOworCQlnb3Rv IGVycm9yOworICAgICAgICB9CisKKwlfX3N5c2NhbGwoU1lTX2Nsb3NlLCBmZCk7CisKKwkvLyBD b3B5IHRoZSBwcm9ncmFtIGhlYWRlcnMgaW50byBhbiBhbm9ueW1vdXMgbWFwcGluZworCW5ld19o ZHIgPSBjcnRfbW1hcCgwLCAoYXV4W0FUX1BIRU5UXSAqIChhdXhbQVRfUEhOVU1dICsgMikgKyBs aW5rZXJfbGVuICsgUEFHRV9TSVpFIC0gMSkgJiAtUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKwlpZiAobWFwX2Zh aWxlZChuZXdfaGRyKSkgeworCQlFUlJPUigiRmFpbGVkIHRvIG1hcCBuZXcgcGhkcnMiKTsKKwkJ Z290byBlcnJvcjsKKyAgICAgICAgfQorCisJLy8gUG9pbnQgaXQgYmFjayBhdCB0aGUgb3JpZ2lu YWwga2VybmVsLXByb3ZpZGVkIGJhc2UKKwluZXdfaGRyLT5wX3R5cGUgPSBQVF9QSERSOworCW5l d19oZHItPnBfdmFkZHIgPSAoc2l6ZV90KW5ld19oZHIgLSAoc2l6ZV90KWJhc2U7CisKKwkoKFBo ZHIqKSgoY2hhciopbmV3X2hkciArIGF1eFtBVF9QSEVOVF0pKS0+cF90eXBlID0gUFRfSU5URVJQ OworCSgoUGhkciopKChjaGFyKiluZXdfaGRyICsgYXV4W0FUX1BIRU5UXSkpLT5wX3ZhZGRyID0g bmV3X2hkci0+cF92YWRkciArIGF1eFtBVF9QSEVOVF0gKiAoYXV4W0FUX1BITlVNXSArIDIpOwor CisJY3J0X21lbWNweSgoY2hhciopbmV3X2hkciArIGF1eFtBVF9QSEVOVF0gKiAoYXV4W0FUX1BI TlVNXSArIDIpLCBsaW5rZXJfcGF0aCwgbGlua2VyX2xlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwg YXV4W0FUX1BITlVNXTsgaSsrKSB7CisJCVBoZHIgKmhkciA9ICh2b2lkKikoKGNoYXIqKWF1eFtB VF9QSERSXSArIGF1eFtBVF9QSEVOVF0gKiBpKTsKKwkJUGhkciAqZHN0ID0gKHZvaWQqKSgoY2hh ciopbmV3X2hkciArIGF1eFtBVF9QSEVOVF0gKiAoaSArIDIpKTsKKwkJaWYgKGhkci0+cF90eXBl ID09IFBUX1BIRFIgfHwgaGRyLT5wX3R5cGUgPT0gUFRfSU5URVJQKSB7CisJCQkvLyBDYW4ndCBo YXZlIGEgZHVwbGljYXRlCisJCQlkc3QtPnBfdHlwZSA9IFBUX05VTEw7CisJCX0gZWxzZSB7CisJ CQljcnRfbWVtY3B5KGRzdCwgaGRyLCBhdXhbQVRfUEhFTlRdKTsKKwkJfQorCX0KKworCWlmIChj cnRfbXByb3RlY3QobmV3X2hkciwgYXV4W0FUX1BIRU5UXSAqIChhdXhbQVRfUEhOVU1dICsgMikg KyBsaW5rZXJfbGVuLCBQUk9UX1JFQUQpKSB7CisJCUVSUk9SKCJGYWlsZWQgdG8gbXByb3RlY3Qg bmV3IHBoZHJzIik7CisJCWdvdG8gZXJyb3I7CisgICAgICAgIH0KKworCWZvciAoaT0wOyBhdXh2 W2ldOyBpKz0yKSB7CisJCWlmIChhdXh2W2ldID09IEFUX0JBU0UpCisJCQlhdXh2W2kgKyAxXSA9 IChzaXplX3QpbG9hZGVyX2hkcjsKKwkJaWYgKGF1eHZbaV0gPT0gQVRfUEhEUikKKwkJCWF1eHZb aSArIDFdID0gKHNpemVfdCluZXdfaGRyOworCQlpZiAoYXV4dltpXSA9PSBBVF9QSE5VTSkKKwkJ CWF1eHZbaSArIDFdICs9IDI7CisJfQorCisJZW50cnkgPSAoY2hhciopbG9hZGVyX2hkciArIGxv YWRlcl9oZHItPmVfZW50cnk7CisKKwkvKiBVbmRvIHRoZSByZWxvY2F0aW9ucyBwZXJmb3JtZWQg YnkgZGxzdGFydCAqLworCisJaWYgKE5FRURfTUlQU19HT1RfUkVMT0NTKSB7CisJCWNvbnN0IHNp emVfdCAqZHludiA9IF9EWU5BTUlDOworCQlzaXplX3QgbG9jYWxfY250ID0gMDsKKwkJc2l6ZV90 ICpnb3QgPSAodm9pZCAqKShiYXNlICsgZHluW0RUX1BMVEdPVF0pOworCQlmb3IgKGk9MDsgZHlu dltpXTsgaSs9MikgaWYgKGR5bnZbaV09PURUX01JUFNfTE9DQUxfR09UTk8pCisJCQlsb2NhbF9j bnQgPSBkeW52W2krMV07CisJCWZvciAoaT0wOyBpPGxvY2FsX2NudDsgaSsrKSBnb3RbaV0gLT0g KHNpemVfdCliYXNlOworCX0KKworCXNpemVfdCAqcmVsID0gKHZvaWQgKikoKHNpemVfdCliYXNl K2R5bltEVF9SRUxdKTsKKwlzaXplX3QgcmVsX3NpemUgPSBkeW5bRFRfUkVMU1pdOworCWZvciAo OyByZWxfc2l6ZTsgcmVsKz0yLCByZWxfc2l6ZS09MipzaXplb2Yoc2l6ZV90KSkgeworCQlpZiAo IUlTX1JFTEFUSVZFKHJlbFsxXSwgMCkpIGNvbnRpbnVlOworCQlzaXplX3QgKnJlbF9hZGRyID0g KHZvaWQgKikoKHNpemVfdCliYXNlICsgcmVsWzBdKTsKKwkJKnJlbF9hZGRyIC09IChzaXplX3Qp YmFzZTsKKwl9CisKKwlDUlRKTVAoZW50cnksIGFyZ3YgLSAxKTsKKworCUVSUk9SKCJGYWlsZWQg dG8ganVtcCB0byBsb2FkZXIiKTsKK2Vycm9yOgorCWZvcig7OykgYV9jcmFzaCgpOworfQpkaWZm IC0tZ2l0IGEvbGRzby9kbHN0YXJ0LmMgYi9sZHNvL2Rsc3RhcnQuYwppbmRleCAyNTlmNWUxOC4u MjBjMGM5MjkgMTAwNjQ0Ci0tLSBhL2xkc28vZGxzdGFydC5jCisrKyBiL2xkc28vZGxzdGFydC5j CkBAIC0yMSw3ICsyMSw3IEBACiBoaWRkZW4gdm9pZCBfZGxzdGFydF9jKHNpemVfdCAqc3AsIHNp emVfdCAqZHludikKIHsKIAlzaXplX3QgaSwgYXV4W0FVWF9DTlRdLCBkeW5bRFlOX0NOVF07Ci0J c2l6ZV90ICpyZWwsIHJlbF9zaXplLCBiYXNlOworCXNpemVfdCAqcmVsLCByZWxfc2l6ZSwgYmFz ZSwgbG9hZGVyX3BoZHI7CiAKIAlpbnQgYXJnYyA9ICpzcDsKIAljaGFyICoqYXJndiA9ICh2b2lk ICopKHNwKzEpOwpAQCAtNDEsNiArNDEsMTMgQEAgaGlkZGVuIHZvaWQgX2Rsc3RhcnRfYyhzaXpl X3QgKnNwLCBzaXplX3QgKmR5bnYpCiAJCSAqIHNwYWNlIGFuZCBtb3ZpbmcgdGhlIGV4dHJhIGZk cGljIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sKIAkJICogdmVjdG9yIHdoZXJlIHRoZXkgYXJlIGVh c2lseSBhY2Nlc3NpYmxlIGZyb20gQy4gKi8KIAkJc2VncyA9ICgoc3RydWN0IGZkcGljX2xvYWRt YXAgKikoc3BbLTFdID8gc3BbLTFdIDogc3BbLTJdKSktPnNlZ3M7CisJCWlmIChhdXhbQVRfQkFT RV0pIHsKKwkJCUVoZHIgKmVoID0gKHZvaWQqKWF1eFtBVF9CQVNFXTsKKwkJCWZvciAoaSA9IDA7 IGVoLT5lX3Bob2ZmIC0gc2Vnc1tpXS5wX3ZhZGRyID49IHNlZ3NbaV0ucF9tZW1zejsgaSsrKTsK KwkJCWxvYWRlcl9waGRyID0gKGVoLT5lX3Bob2ZmIC0gc2Vnc1tpXS5wX3ZhZGRyICsgc2Vnc1tp XS5hZGRyKTsKKwkJfSBlbHNlIHsKKwkJCWxvYWRlcl9waGRyID0gYXV4W0FUX1BIRFJdOworCQl9 CiAJfSBlbHNlIHsKIAkJLyogSWYgZHludiBpcyBudWxsLCB0aGUgZW50cnkgcG9pbnQgd2FzIHN0 YXJ0ZWQgZnJvbSBsb2FkZXIKIAkJICogdGhhdCBpcyBub3QgZmRwaWMtYXdhcmUuIFdlIGNhbiBh c3N1bWUgbm9ybWFsIGZpeGVkLQpAQCAtNTUsNiArNjIsNyBAQCBoaWRkZW4gdm9pZCBfZGxzdGFy dF9jKHNpemVfdCAqc3AsIHNpemVfdCAqZHludikKIAkJc2Vnc1swXS5wX21lbXN6ID0gLTE7CiAJ CUVoZHIgKmVoID0gKHZvaWQgKiliYXNlOwogCQlQaGRyICpwaCA9ICh2b2lkICopKGJhc2UgKyBl aC0+ZV9waG9mZik7CisJCWxvYWRlcl9waGRyID0gKHNpemVfdClwaDsKIAkJc2l6ZV90IHBobnVt ID0gZWgtPmVfcGhudW07CiAJCXNpemVfdCBwaGVudCA9IGVoLT5lX3BoZW50c2l6ZTsKIAkJd2hp bGUgKHBobnVtLS0gJiYgcGgtPnBfdHlwZSAhPSBQVF9EWU5BTUlDKQpAQCAtNjksMTMgKzc3LDQy IEBAIGhpZGRlbiB2b2lkIF9kbHN0YXJ0X2Moc2l6ZV90ICpzcCwgc2l6ZV90ICpkeW52KQogCiAj aWYgRExfRkRQSUMKIAlmb3IgKGk9MDsgaTxEWU5fQ05UOyBpKyspIHsKLQkJaWYgKGk9PURUX1JF TEFTWiB8fCBpPT1EVF9SRUxTWikgY29udGludWU7CisJCWlmIChpPT1EVF9SRUxBU1ogfHwgaT09 RFRfUkVMU1ogfHwgaT09RFRfUlBBVEggfHwgaT09RFRfUlVOUEFUSCkgY29udGludWU7CiAJCWlm ICghZHluW2ldKSBjb250aW51ZTsKIAkJZm9yIChqPTA7IGR5bltpXS1zZWdzW2pdLnBfdmFkZHIg Pj0gc2Vnc1tqXS5wX21lbXN6OyBqKyspOwogCQlkeW5baV0gKz0gc2Vnc1tqXS5hZGRyIC0gc2Vn c1tqXS5wX3ZhZGRyOwogCX0KIAliYXNlID0gMDsKKyNlbHNlCisJLyogSWYgdGhlIGR5bmFtaWMg bGlua2VyIGlzIGludm9rZWQgYXMgYSBjb21tYW5kLCBpdHMgbG9hZAorCSAqIGFkZHJlc3MgaXMg bm90IGF2YWlsYWJsZSBpbiB0aGUgYXV4IHZlY3Rvci4gSW5zdGVhZCwgY29tcHV0ZQorCSAqIHRo ZSBsb2FkIGFkZHJlc3MgYXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAmX0RZTkFNSUMgYW5kIHRo ZQorCSAqIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgUFRfRFlOQU1JQyBwcm9ncmFtIGhlYWRlci4g Ki8KKwliYXNlID0gYXV4W0FUX0JBU0VdOworCWlmICghYmFzZSkgeworCQlzaXplX3QgcGhudW0g PSBhdXhbQVRfUEhOVU1dOworCQlzaXplX3QgcGhlbnRzaXplID0gYXV4W0FUX1BIRU5UXTsKKwkJ UGhkciAqcGggPSAodm9pZCAqKWF1eFtBVF9QSERSXTsKKwkJZm9yIChpPXBobnVtOyBpLS07IHBo ID0gKHZvaWQgKikoKGNoYXIgKilwaCArIHBoZW50c2l6ZSkpIHsKKwkJCWlmIChwaC0+cF90eXBl ID09IFBUX0RZTkFNSUMpIHsKKwkJCQliYXNlID0gKHNpemVfdClkeW52IC0gcGgtPnBfdmFkZHI7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbG9hZGVyX3BoZHIgPSBiYXNlICsgKChFaGRy KiliYXNlKS0+ZV9waG9mZjsKKyNlbmRpZgogCisjaWZkZWYgRExfRE5JCisJLyogSWYgQVRfUEhE UiBkb2Vzbid0IG1hdGNoIHRoZSBQSERSIGluIEFUX0JBU0UsIHRoZW4gd2UndmUgYmVlbiBsb2Fk ZWQgYXMgYQorCSAqIGR5bmFtaWMgZXhlY3V0YWJsZSBhbmQgbGQuc28gaGFzIGFscmVhZHkgYmVl biBydW4sIGVpdGhlciBieSB0aGUga2VybmVsLAorCSAqIG9yIGJ5IGRjcnQuIFRoaXMgbWVhbnMg cmVsb2NzIGFyZSBhbHJlYWR5IGZpbmlzaGVkIChhbmQgZG9pbmcgdGhlbSBhZ2FpbgorCSAqIHdv dWxkIGJyZWFrIERUX1JFTHMpLCBzbyB3ZSBjYW4ganVzdCBza2lwIHRvIHRoZSBzdGFnZS0yIGp1 bXAuICovCisJaWYgKGF1eFtBVF9QSERSXSAhPSBsb2FkZXJfcGhkcikKKwkJZ290byBza2lwX3Jl bG9jczsKKyNlbmRpZgorCisjaWYgRExfRkRQSUMKIAljb25zdCBTeW0gKnN5bXMgPSAodm9pZCAq KWR5bltEVF9TWU1UQUJdOwogCiAJcmVsID0gKHZvaWQgKilkeW5bRFRfUkVMQV07CkBAIC05Nywy MyArMTM0LDYgQEAgaGlkZGVuIHZvaWQgX2Rsc3RhcnRfYyhzaXplX3QgKnNwLCBzaXplX3QgKmR5 bnYpCiAJCX0KIAl9CiAjZWxzZQotCS8qIElmIHRoZSBkeW5hbWljIGxpbmtlciBpcyBpbnZva2Vk IGFzIGEgY29tbWFuZCwgaXRzIGxvYWQKLQkgKiBhZGRyZXNzIGlzIG5vdCBhdmFpbGFibGUgaW4g dGhlIGF1eCB2ZWN0b3IuIEluc3RlYWQsIGNvbXB1dGUKLQkgKiB0aGUgbG9hZCBhZGRyZXNzIGFz IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJl9EWU5BTUlDIGFuZCB0aGUKLQkgKiB2aXJ0dWFsIGFk ZHJlc3MgaW4gdGhlIFBUX0RZTkFNSUMgcHJvZ3JhbSBoZWFkZXIuICovCi0JYmFzZSA9IGF1eFtB VF9CQVNFXTsKLQlpZiAoIWJhc2UpIHsKLQkJc2l6ZV90IHBobnVtID0gYXV4W0FUX1BITlVNXTsK LQkJc2l6ZV90IHBoZW50c2l6ZSA9IGF1eFtBVF9QSEVOVF07Ci0JCVBoZHIgKnBoID0gKHZvaWQg KilhdXhbQVRfUEhEUl07Ci0JCWZvciAoaT1waG51bTsgaS0tOyBwaCA9ICh2b2lkICopKChjaGFy ICopcGggKyBwaGVudHNpemUpKSB7Ci0JCQlpZiAocGgtPnBfdHlwZSA9PSBQVF9EWU5BTUlDKSB7 Ci0JCQkJYmFzZSA9IChzaXplX3QpZHludiAtIHBoLT5wX3ZhZGRyOwotCQkJCWJyZWFrOwotCQkJ fQotCQl9Ci0JfQotCiAJLyogTUlQUyB1c2VzIGFuIHVnbHkgcGFja2VkIGZvcm0gZm9yIEdPVCBy ZWxvY2F0aW9ucy4gU2luY2Ugd2UKIAkgKiBjYW4ndCBtYWtlIGZ1bmN0aW9uIGNhbGxzIHlldCBh bmQgdGhlIGNvZGUgaXMgdGlueSBhbnl3YXksCiAJICogaXQncyBzaW1wbHkgaW5saW5lZCBoZXJl LiAqLwpAQCAtMTU4LDYgKzE3OCw5IEBAIGhpZGRlbiB2b2lkIF9kbHN0YXJ0X2Moc2l6ZV90ICpz cCwgc2l6ZV90ICpkeW52KQogI2VuZGlmCiAKIAlzdGFnZTJfZnVuYyBkbHMyOworI2lmZGVmIERM X0ROSQorc2tpcF9yZWxvY3M6CisjZW5kaWYKIAlHRVRGVU5DU1lNKCZkbHMyLCBfX2RsczIsIGJh c2UrZHluW0RUX1BMVEdPVF0pOwogCWRsczIoKHZvaWQgKiliYXNlLCBzcCk7CiB9CmRpZmYgLS1n aXQgYS90b29scy9sZC5tdXNsLWNsYW5nLmluIGIvdG9vbHMvbGQubXVzbC1jbGFuZy5pbgppbmRl eCA5Mzc2M2Q2Yi4uMDJkOTg5MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xkLm11c2wtY2xhbmcuaW4K KysrIGIvdG9vbHMvbGQubXVzbC1jbGFuZy5pbgpAQCAtNyw2ICs3LDE4IEBAIHNoYXJlZD0KIHVz ZXJsaW5rZGlyPQogdXNlcmxpbms9CiAKK1NjcnQ9IiRsaWJjX2xpYi9TY3J0MS5vIgorZHluYW1p Y19saW5rZXJfYXJncz0iLWR5bmFtaWMtbGlua2VyIFwiJGxkc29cIiIKKworZm9yIHggOyBkbwor ICAgIGNhc2UgIiR4IiBpbgorICAgICAgICAtbC1kbmkpCisgICAgICAgICAgICBkeW5hbWljX2xp bmtlcl9hcmdzPSItbm8tZHluYW1pYy1saW5rZXIiCisgICAgICAgICAgICBTY3J0PSIkbGliY19s aWIvZGNydDEubyIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCiBmb3IgeCA7IGRv CiAgICAgdGVzdCAiJGNsZWFyZWQiIHx8IHNldCAtLSA7IGNsZWFyZWQ9MQogCkBAIC00MiwxMCAr NTQsMTMgQEAgZm9yIHggOyBkbwogICAgICAgICAgICAgOzsKICAgICAgICAgLXN5c3Jvb3Q9Knwt LXN5c3Jvb3Q9KikKICAgICAgICAgICAgIDs7CisgICAgICAgICRsaWJjX2xpYi9TY3J0MS5vKQor ICAgICAgICAgICAgc2V0IC0tICIkQCIgJFNjcnQKKyAgICAgICAgICAgIDs7CiAgICAgICAgICop CiAgICAgICAgICAgICBzZXQgLS0gIiRAIiAiJHgiCiAgICAgICAgICAgICA7OwogICAgIGVzYWMK IGRvbmUKIAotZXhlYyAkKCRjYyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAtbm9zdGRsaWIgIiRAIiAt bGMgLWR5bmFtaWMtbGlua2VyICIkbGRzbyIKK2V4ZWMgJCgkY2MgLXByaW50LXByb2ctbmFtZT1s ZCkgLW5vc3RkbGliICIkQCIgLWxjICIkZHluYW1pY19saW5rZXJfYXJncyIKZGlmZiAtLWdpdCBh L3Rvb2xzL211c2wtY2xhbmcuaW4gYi90b29scy9tdXNsLWNsYW5nLmluCmluZGV4IDYyM2RlNmY2 Li40OWNiYTFiNyAxMDA2NDQKLS0tIGEvdG9vbHMvbXVzbC1jbGFuZy5pbgorKysgYi90b29scy9t dXNsLWNsYW5nLmluCkBAIC01LDE0ICs1LDIxIEBAIGxpYmNfaW5jPSJASU5DRElSQCIKIGxpYmNf bGliPSJATElCRElSQCIKIHRoaXNkaXI9ImBjZCAiJChkaXJuYW1lICIkMCIpIjsgcHdkYCIKIAor Y2xlYXJlZD0KKwogIyBwcmV2ZW50IGNsYW5nIGZyb20gcnVubmluZyB0aGUgbGlua2VyIChhbmQg ZXJyb3JpbmcpIG9uIG5vIGlucHV0Lgogc2ZsYWdzPQogZWZsYWdzPQorZG5pZmxhZ3M9CiBmb3Ig eCA7IGRvCisgICAgdGVzdCAiJGNsZWFyZWQiIHx8IHNldCAtLSA7IGNsZWFyZWQ9MQorCiAgICAg Y2FzZSAiJHgiIGluCisgICAgICAgIC0tZG5pKSBkbmlmbGFncz0tbC1kbmk7IGNvbnRpbnVlIDs7 CiAgICAgICAgIC1sKikgaW5wdXQ9MSA7OwogICAgICAgICAqKSBpbnB1dD0gOzsKICAgICBlc2Fj CisgICAgc2V0IC0tICIkQCIgIiR4IgogICAgIGlmIHRlc3QgIiRpbnB1dCIgOyB0aGVuCiAgICAg ICAgIHNmbGFncz0iLWwtdXNlci1zdGFydCIKICAgICAgICAgZWZsYWdzPSItbC11c2VyLWVuZCIK QEAgLTI5LDYgKzM2LDcgQEAgZXhlYyAkY2MgXAogICAgIC1pc3lzdGVtICIkbGliY19pbmMiIFwK ICAgICAtTC11c2VyLXN0YXJ0IFwKICAgICAkc2ZsYWdzIFwKKyAgICAkZG5pZmxhZ3MgXAogICAg ICIkQCIgXAogICAgICRlZmxhZ3MgXAogICAgIC1MIiRsaWJjX2xpYiIgXApkaWZmIC0tZ2l0IGEv dG9vbHMvbXVzbC1nY2Muc3BlY3Muc2ggYi90b29scy9tdXNsLWdjYy5zcGVjcy5zaAppbmRleCAz MDQ5MjU3NC4uODYzNzRmMTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL211c2wtZ2NjLnNwZWNzLnNoCisr KyBiL3Rvb2xzL211c2wtZ2NjLnNwZWNzLnNoCkBAIC0xNywxMyArMTcsMTMgQEAgY2F0IDw8RU9G CiBsaWJnY2MuYSVzICU6aWYtZXhpc3RzKGxpYmdjY19laC5hJXMpCiAKICpzdGFydGZpbGU6Ci0l eyFzaGFyZWQ6ICRsaWJkaXIvU2NydDEub30gJGxpYmRpci9jcnRpLm8gY3J0YmVnaW5TLm8lcwor JXshc2hhcmVkOiAley1kbmk6JGxpYmRpci9kY3J0MS5vOzokbGliZGlyL1NjcnQxLm99fSAkbGli ZGlyL2NydGkubyBjcnRiZWdpblMubyVzCiAKICplbmRmaWxlOgogY3J0ZW5kUy5vJXMgJGxpYmRp ci9jcnRuLm8KIAogKmxpbms6Ci0tZHluYW1pYy1saW5rZXIgJGxkc28gLW5vc3RkbGliICV7c2hh cmVkOi1zaGFyZWR9ICV7c3RhdGljOi1zdGF0aWN9ICV7cmR5bmFtaWM6LWV4cG9ydC1keW5hbWlj fQorJXstZG5pOi1uby1keW5hbWljLWxpbmtlcjs6LS1keW5hbWljLWxpbmtlciAkbGRzb30gLW5v c3RkbGliICV7c2hhcmVkOi1zaGFyZWR9ICV7c3RhdGljOi1zdGF0aWN9ICV7cmR5bmFtaWM6LWV4 cG9ydC1keW5hbWljfQogCiAqZXNwX2xpbms6CiAKLS0gCjIuMzguMC5yYzEuMzYyLmdlZDBkNDE5 ZDNjLWdvb2cKCg== --00000000000068d53705e9d6d9f3--