Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q788q-0004jX-SC for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jun 2023 05:25:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q788p-0007VL-Nq for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jun 2023 05:24:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q788C-0002sn-Nm for pgsql-hackers@lists.postgresql.org; Thu, 08 Jun 2023 05:24:20 +0000 Received: from out28-66.mail.aliyun.com ([115.124.28.66]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q7883-000xY3-M5 for pgsql-hackers@lists.postgresql.org; Thu, 08 Jun 2023 05:24:17 +0000 X-Alimail-AntiSpam:AC=CONTINUE;BC=0.2740169|-1;CH=green;DM=|CONTINUE|false|;DS=CONTINUE|ham_social|0.248423-0.000162338-0.751415;FP=0|0|0|0|0|0|0|0;HT=ay29a033018047194;MF=yangxudong@ymatrix.cn;NM=1;PH=DS;RN=3;RT=3;SR=0;TI=SMTPD_---.TOOnG9E_1686201842; Received: from 192.168.68.94(mailfrom:yangxudong@ymatrix.cn fp:SMTPD_---.TOOnG9E_1686201842) by smtp.aliyun-inc.com; Thu, 08 Jun 2023 13:24:03 +0800 Content-Type: multipart/mixed; boundary="------------YGWxg1ox6pEKMJl0S5AiUMok" Message-ID: Date: Thu, 8 Jun 2023 13:24:02 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.2 Content-Language: en-US To: pgsql-hackers@lists.postgresql.org From: YANG Xudong Subject: [PATCH] Add loongarch native checksum implementation. Cc: wengyanqing@ymatrix.cn, wanghao@ymatrix.cn List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------YGWxg1ox6pEKMJl0S5AiUMok Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, This patch tries to add loongarch native crc32 check with crcc.* instructions to postgresql. The patch is tested on my Loongson 3A5000 machine with Loong Arch Linux and GCC 13.1.0 / clang 16.0.0 with - default ./configure - default meson setup See: [1]: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#crc-check-instructions [2]: https://gcc.gnu.org/onlinedocs/gcc/LoongArch-Base-Built-in-Functions.html [3]: https://github.com/llvm/llvm-project/blob/release/16.x/clang/include/clang/Basic/BuiltinsLoongArch.def#L36-L39 --------------YGWxg1ox6pEKMJl0S5AiUMok Content-Type: text/plain; charset=UTF-8; name="0001-Add-loongarch-native-checksum-implementation.patch" Content-Disposition: attachment; filename="0001-Add-loongarch-native-checksum-implementation.patch" Content-Transfer-Encoding: base64 RnJvbSA2Y2NlZTk4MGE0MmYxNzA2MDk0YTUxZmExNDZjNTVlZGMzYWRmYmIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZQU5HIFh1ZG9uZyA8eWFuZ3h1ZG9uZ0B5bWF0cml4 LmNuPgpEYXRlOiBUaHUsIDggSnVuIDIwMjMgMTM6MjI6MDMgKzA4MDAKU3ViamVjdDogW1BB VENIXSBBZGQgbG9vbmdhcmNoIG5hdGl2ZSBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbi4KCi0t LQogY29uZmlnL2MtY29tcGlsZXIubTQgICAgICAgICAgIHwgIDM0ICsrKysrKysrKysKIGNv bmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICB8IDExOCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICB8ICAzOSAr KysrKysrKy0tLQogbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgIHwgIDI5ICsrKysr KysrCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiAgICAgfCAgIDMgKwogc3JjL2luY2x1 ZGUvcG9ydC9wZ19jcmMzMmMuaCAgIHwgICA5ICsrKwogc3JjL3BvcnQvTWFrZWZpbGUgICAg ICAgICAgICAgIHwgICA1ICsrCiBzcmMvcG9ydC9tZXNvbi5idWlsZCAgICAgICAgICAgfCAg IDMgKwogc3JjL3BvcnQvcGdfY3JjMzJjX2xvb25nYXJjaC5jIHwgIDcyICsrKysrKysrKysr KysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDI5NyBpbnNlcnRpb25zKCspLCAxNSBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG9ydC9wZ19jcmMzMmNfbG9vbmdh cmNoLmMKCmRpZmYgLS1naXQgYS9jb25maWcvYy1jb21waWxlci5tNCBiL2NvbmZpZy9jLWNv bXBpbGVyLm00CmluZGV4IDViZThmMGYwOGQuLmViM2FmMDA5YzQgMTAwNjQ0Ci0tLSBhL2Nv bmZpZy9jLWNvbXBpbGVyLm00CisrKyBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CkBAIC02NjEs MyArNjYxLDM3IEBAIGlmIHRlc3QgeCIkQWNfY2FjaGV2YXIiID0geCJ5ZXMiOyB0aGVuCiBm aQogdW5kZWZpbmUoW0FjX2NhY2hldmFyXSlkbmwKIF0pIyBQR0FDX0FSTVY4X0NSQzMyQ19J TlRSSU5TSUNTCisKKyMgUEdBQ19MT09OR0FSQ0hfQ1JDMzJDX0lOVFJJTlNJQ1MKKyMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBw b3J0cyB0aGUgTG9vbmdBcmNoIENSQ0MgaW5zdHJ1Y3Rpb25zLCB1c2luZworIyBfX2J1aWx0 aW5fbG9vbmdhcmNoX2NyY2Nfd19iX3csIF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2hf dywKKyMgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfd193IGFuZCBfX2J1aWx0aW5fbG9v bmdhcmNoX2NyY2Nfd19kX3cKKyMgaW50cmluc2ljIGZ1bmN0aW9ucy4KKyMKKyMgSWYgdGhl IGludHJpbnNpY3MgYXJlIHN1cHBvcnRlZCwgc2V0cyBwZ2FjX2xvb25nYXJjaF9jcmMzMmNf aW50cmluc2ljcywKKyMgYW5kIENGTEFHU19DUkMuCitBQ19ERUZVTihbUEdBQ19MT09OR0FS Q0hfQ1JDMzJDX0lOVFJJTlNJQ1NdLAorW2RlZmluZShbQWNfY2FjaGV2YXJdLCBbQVNfVFJf U0goW3BnYWNfY3ZfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzXyQxXSldKWRubAorQUNf Q0FDSEVfQ0hFQ0soCisgIFtmb3IgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfYl93LCBf X2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19oX3csIF9fYnVpbHRpbl9sb29uZ2FyY2hfY3Jj Y193X3dfdyBhbmQgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfZF93IHdpdGggQ0ZMQUdT PSQxXSwKKyAgW0FjX2NhY2hldmFyXSwKK1twZ2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK0NG TEFHUz0iJHBnYWNfc2F2ZV9DRkxBR1MgJDEiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKFtdLAorICBbdW5zaWduZWQgaW50IGNyYyA9IDA7CisgICBjcmMgPSBfX2J1aWx0 aW5fbG9vbmdhcmNoX2NyY2Nfd19iX3coMCwgY3JjKTsKKyAgIGNyYyA9IF9fYnVpbHRpbl9s b29uZ2FyY2hfY3JjY193X2hfdygwLCBjcmMpOworICAgY3JjID0gX19idWlsdGluX2xvb25n YXJjaF9jcmNjX3dfd193KDAsIGNyYyk7CisgICBjcmMgPSBfX2J1aWx0aW5fbG9vbmdhcmNo X2NyY2Nfd19kX3coMCwgY3JjKTsKKyAgIC8qIHJldHVybiBjb21wdXRlZCB2YWx1ZSwgdG8g cHJldmVudCB0aGUgYWJvdmUgYmVpbmcgb3B0aW1pemVkIGF3YXkgKi8KKyAgIHJldHVybiBj cmMgPT0gMDtdKV0sCisgIFtBY19jYWNoZXZhcj15ZXNdLAorICBbQWNfY2FjaGV2YXI9bm9d KQorQ0ZMQUdTPSIkcGdhY19zYXZlX0NGTEFHUyJdKQoraWYgdGVzdCB4IiRBY19jYWNoZXZh ciIgPSB4InllcyI7IHRoZW4KKyAgQ0ZMQUdTX0NSQz0iJDEiCisgIHBnYWNfbG9vbmdhcmNo X2NyYzMyY19pbnRyaW5zaWNzPXllcworZmkKK3VuZGVmaW5lKFtBY19jYWNoZXZhcl0pZG5s CitdKSMgUEdBQ19MT09OR0FSQ0hfQ1JDMzJDX0lOVFJJTlNJQ1MKZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCAxYjQxNTE0MmQxLi5jNWQ4YzJlNGY2IDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xODExNiw2ICsxODExNiw5 NiBAQCBmaQogCiAKIAorIyBDaGVjayBmb3IgTG9vbmdBcmNoIENSQyBpbnRyaW5zaWNzIHRv IGRvIENSQyBjYWxjdWxhdGlvbnMuCisjCisjIENoZWNrIGlmIF9fYnVpbHRpbl9sb29uZ2Fy Y2hfY3JjY18qIGludHJpbnNpY3MgY2FuIGJlIHVzZWQKKyMgd2l0aCB0aGUgZGVmYXVsdCBj b21waWxlciBmbGFncy4KKyMgQ0ZMQUdTX0NSQyBpcyBzZXQgaWYgdGhlIGV4dHJhIGZsYWcg aXMgcmVxdWlyZWQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19iX3csIF9fYnVpbHRp bl9sb29uZ2FyY2hfY3JjY193X2hfdywgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfd193 IGFuZCBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19kX3cgd2l0aCBDRkxBR1M9IiA+JjUK KyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19i X3csIF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2hfdywgX19idWlsdGluX2xvb25nYXJj aF9jcmNjX3dfd193IGFuZCBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19kX3cgd2l0aCBD RkxBR1M9Li4uICIgPiY2OyB9CitpZiAke3BnYWNfY3ZfbG9vbmdhcmNoX2NyYzMyY19pbnRy aW5zaWNzXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 CitlbHNlCisgIHBnYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSIkcGdhY19zYXZl X0NGTEFHUyAiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQorewordW5zaWduZWQg aW50IGNyYyA9IDA7CisgICBjcmMgPSBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19iX3co MCwgY3JjKTsKKyAgIGNyYyA9IF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2hfdygwLCBj cmMpOworICAgY3JjID0gX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfd193KDAsIGNyYyk7 CisgICBjcmMgPSBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19kX3coMCwgY3JjKTsKKyAg IC8qIHJldHVybiBjb21wdXRlZCB2YWx1ZSwgdG8gcHJldmVudCB0aGUgYWJvdmUgYmVpbmcg b3B0aW1pemVkIGF3YXkgKi8KKyAgIHJldHVybiBjcmMgPT0gMDsKKyAgOworICByZXR1cm4g MDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgor ICBwZ2FjX2N2X2xvb25nYXJjaF9jcmMzMmNfaW50cmluc2ljc189eWVzCitlbHNlCisgIHBn YWNfY3ZfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzXz1ubworZmkKK3JtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9IiRwZ2FjX3NhdmVfQ0ZMQUdTIgorZmkK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdh Y19jdl9sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3NfIiA+JjUKKyRhc19lY2hvICIkcGdh Y19jdl9sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3NfIiA+JjY7IH0KK2lmIHRlc3QgeCIk cGdhY19jdl9sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3NfIiA9IHgieWVzIjsgdGhlbgor ICBDRkxBR1NfQ1JDPSIiCisgIHBnYWNfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzPXll cworZmkKKworaWYgdGVzdCB4IiRwZ2FjX2xvb25nYXJjaF9jcmMzMmNfaW50cmluc2ljcyIg IT0geCJ5ZXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2JfdywgX19i dWlsdGluX2xvb25nYXJjaF9jcmNjX3dfaF93LCBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nf d193X3cgYW5kIF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2RfdyB3aXRoIENGTEFHUz0t bWFyY2g9bG9vbmdhcmNoNjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fYnVp bHRpbl9sb29uZ2FyY2hfY3JjY193X2JfdywgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3df aF93LCBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd193X3cgYW5kIF9fYnVpbHRpbl9sb29u Z2FyY2hfY3JjY193X2RfdyB3aXRoIENGTEFHUz0tbWFyY2g9bG9vbmdhcmNoNjQuLi4gIiA+ JjY7IH0KK2lmICR7cGdhY19jdl9sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3NfX21hcmNo X2xvb25nYXJjaDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYKK2Vsc2UKKyAgcGdhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9IiRwZ2Fj X3NhdmVfQ0ZMQUdTIC1tYXJjaD1sb29uZ2FyY2g2NCIKK2NhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50 CittYWluICgpCit7Cit1bnNpZ25lZCBpbnQgY3JjID0gMDsKKyAgIGNyYyA9IF9fYnVpbHRp bl9sb29uZ2FyY2hfY3JjY193X2JfdygwLCBjcmMpOworICAgY3JjID0gX19idWlsdGluX2xv b25nYXJjaF9jcmNjX3dfaF93KDAsIGNyYyk7CisgICBjcmMgPSBfX2J1aWx0aW5fbG9vbmdh cmNoX2NyY2Nfd193X3coMCwgY3JjKTsKKyAgIGNyYyA9IF9fYnVpbHRpbl9sb29uZ2FyY2hf Y3JjY193X2RfdygwLCBjcmMpOworICAgLyogcmV0dXJuIGNvbXB1dGVkIHZhbHVlLCB0byBw cmV2ZW50IHRoZSBhYm92ZSBiZWluZyBvcHRpbWl6ZWQgYXdheSAqLworICAgcmV0dXJuIGNy YyA9PSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9s aW5rICIkTElORU5PIjsgdGhlbiA6CisgIHBnYWNfY3ZfbG9vbmdhcmNoX2NyYzMyY19pbnRy aW5zaWNzX19tYXJjaF9sb29uZ2FyY2g2ND15ZXMKK2Vsc2UKKyAgcGdhY19jdl9sb29uZ2Fy Y2hfY3JjMzJjX2ludHJpbnNpY3NfX21hcmNoX2xvb25nYXJjaDY0PW5vCitmaQorcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3Qk YWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0iJHBnYWNfc2F2ZV9DRkxBR1Mi CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRwZ2FjX2N2X2xvb25nYXJjaF9jcmMzMmNfaW50cmluc2ljc19fbWFyY2hfbG9vbmdhcmNo NjQiID4mNQorJGFzX2VjaG8gIiRwZ2FjX2N2X2xvb25nYXJjaF9jcmMzMmNfaW50cmluc2lj c19fbWFyY2hfbG9vbmdhcmNoNjQiID4mNjsgfQoraWYgdGVzdCB4IiRwZ2FjX2N2X2xvb25n YXJjaF9jcmMzMmNfaW50cmluc2ljc19fbWFyY2hfbG9vbmdhcmNoNjQiID0geCJ5ZXMiOyB0 aGVuCisgIENGTEFHU19DUkM9Ii1tYXJjaD1sb29uZ2FyY2g2NCIKKyAgcGdhY19sb29uZ2Fy Y2hfY3JjMzJjX2ludHJpbnNpY3M9eWVzCitmaQorCitmaQorCisKKwogIyBTZWxlY3QgQ1JD LTMyQyBpbXBsZW1lbnRhdGlvbi4KICMKICMgSWYgd2UgYXJlIHRhcmdldGluZyBhIHByb2Nl c3NvciB0aGF0IGhhcyBJbnRlbCBTU0UgNC4yIGluc3RydWN0aW9ucywgd2UgY2FuCkBAIC0x ODEzMiw3ICsxODIyMiw3IEBAIGZpCiAjCiAjIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBsb2dp YyBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBVU0VfKl9DUkMzMiBmbGFnIHRvIDEKICMg aW4gdGhlIHRlbXBsYXRlIG9yIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCi1pZiB0ZXN0IHgi JFVTRV9TTElDSU5HX0JZXzhfQ1JDMzJDIiA9IHgiIiAmJiB0ZXN0IHgiJFVTRV9TU0U0Ml9D UkMzMkMiID0geCIiICYmIHRlc3QgeCIkVVNFX1NTRTQyX0NSQzMyQ19XSVRIX1JVTlRJTUVf Q0hFQ0siID0geCIiICYmIHRlc3QgeCIkVVNFX0FSTVY4X0NSQzMyQyIgPSB4IiIgJiYgdGVz dCB4IiRVU0VfQVJNVjhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSyIgPSB4IiI7IHRoZW4K K2lmIHRlc3QgeCIkVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMiID0geCIiICYmIHRlc3QgeCIk VVNFX1NTRTQyX0NSQzMyQyIgPSB4IiIgJiYgdGVzdCB4IiRVU0VfU1NFNDJfQ1JDMzJDX1dJ VEhfUlVOVElNRV9DSEVDSyIgPSB4IiIgJiYgdGVzdCB4IiRVU0VfQVJNVjhfQ1JDMzJDIiA9 IHgiIiAmJiB0ZXN0IHgiJFVTRV9BUk1WOF9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLIiA9 IHgiIiAmJiB0ZXN0IHgiJFVTRV9MT09OR0FSQ0hfQ1JDMzJDIiA9IHgiIjsgdGhlbgogICAj IFVzZSBJbnRlbCBTU0UgNC4yIGlmIGF2YWlsYWJsZS4KICAgaWYgdGVzdCB4IiRwZ2FjX3Nz ZTQyX2NyYzMyX2ludHJpbnNpY3MiID0geCJ5ZXMiICYmIHRlc3QgeCIkU1NFNF8yX1RBUkdF VEVEIiA9IHgiMSIgOyB0aGVuCiAgICAgVVNFX1NTRTQyX0NSQzMyQz0xCkBAIC0xODE1MCwx MCArMTgyNDAsMTUgQEAgaWYgdGVzdCB4IiRVU0VfU0xJQ0lOR19CWV84X0NSQzMyQyIgPSB4 IiIgJiYgdGVzdCB4IiRVU0VfU1NFNDJfQ1JDMzJDIiA9IHgiIiAmJgogICAgICAgICBpZiB0 ZXN0IHgiJHBnYWNfYXJtdjhfY3JjMzJjX2ludHJpbnNpY3MiID0geCJ5ZXMiOyB0aGVuCiAg ICAgICAgICAgVVNFX0FSTVY4X0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0s9MQogICAgICAg ICBlbHNlCi0gICAgICAgICAgIyBmYWxsIGJhY2sgdG8gc2xpY2luZy1ieS04IGFsZ29yaXRo bSwgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFueQotICAgICAgICAgICMgc3BlY2lhbCBDUFUg c3VwcG9ydC4KLSAgICAgICAgICBVU0VfU0xJQ0lOR19CWV84X0NSQzMyQz0xCi0JZmkKKyAg ICAgICAgICBpZiB0ZXN0IHgiJHBnYWNfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzIiA9 IHgieWVzIjsgdGhlbgorICAgICAgICAgICAgIyBMb29uZ0FyY2ggQ1JDQyBpbnN0cnVjdGlv bnMuCisgICAgICAgICAgICBVU0VfTE9PTkdBUkNIX0NSQzMyQz0xCisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgIyBmYWxsIGJhY2sgdG8gc2xpY2luZy1ieS04IGFsZ29yaXRobSwg d2hpY2ggZG9lc24ndCByZXF1aXJlIGFueQorICAgICAgICAgICAgIyBzcGVjaWFsIENQVSBz dXBwb3J0LgorICAgICAgICAgICAgVVNFX1NMSUNJTkdfQllfOF9DUkMzMkM9MQorICAgICAg ICAgIGZpCisgICAgICAgIGZpCiAgICAgICBmaQogICAgIGZpCiAgIGZpCkBAIC0xODE5NCwx MiArMTgyODksMjEgQEAgJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0FSTVY4X0NSQzMyQ19XSVRI X1JVTlRJTUVfQ0hFQ0sgMSIgPj5jb25mZGVmcy5oCiAgICAgICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBBUk12OCBDUkMgaW5zdHJ1Y3Rp b25zIHdpdGggcnVudGltZSBjaGVjayIgPiY1CiAkYXNfZWNobyAiQVJNdjggQ1JDIGluc3Ry dWN0aW9ucyB3aXRoIHJ1bnRpbWUgY2hlY2siID4mNjsgfQogICAgICAgZWxzZQorICAgICAg ICBpZiB0ZXN0IHgiJFVTRV9MT09OR0FSQ0hfQ1JDMzJDIiA9IHgiMSI7IHRoZW4KKworJGFz X2VjaG8gIiNkZWZpbmUgVVNFX0xPT05HQVJDSF9DUkMzMkMgMSIgPj5jb25mZGVmcy5oCisK KyAgICAgICAgICBQR19DUkMzMkNfT0JKUz0icGdfY3JjMzJjX2xvb25nYXJjaC5vIgorICAg ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiBMb29uZ0FyY2ggQ1JDQyBpbnN0cnVjdGlvbnMiID4mNQorJGFzX2VjaG8gIkxvb25nQXJj aCBDUkNDIGluc3RydWN0aW9ucyIgPiY2OyB9CisgICAgICAgIGVsc2UKIAogJGFzX2VjaG8g IiNkZWZpbmUgVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMgMSIgPj5jb25mZGVmcy5oCiAKLSAg ICAgICAgUEdfQ1JDMzJDX09CSlM9InBnX2NyYzMyY19zYjgubyIKLSAgICAgICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHNsaWNpbmctYnkt OCIgPiY1CisgICAgICAgICAgUEdfQ1JDMzJDX09CSlM9InBnX2NyYzMyY19zYjgubyIKKyAg ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogc2xpY2luZy1ieS04IiA+JjUKICRhc19lY2hvICJzbGljaW5nLWJ5LTgiID4mNjsgfQor ICAgICAgICBmaQogICAgICAgZmkKICAgICBmaQogICBmaQpkaWZmIC0tZ2l0IGEvY29uZmln dXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDA5NTU4YWRhMGYuLjVkY2IxYzRhYjkgMTAw NjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTIxMjgsNiAr MjEyOCwxOCBAQCBmaQogCiBBQ19TVUJTVChDRkxBR1NfQ1JDKQogCisjIENoZWNrIGZvciBM b29uZ0FyY2ggQ1JDIGludHJpbnNpY3MgdG8gZG8gQ1JDIGNhbGN1bGF0aW9ucy4KKyMKKyMg Q2hlY2sgaWYgX19idWlsdGluX2xvb25nYXJjaF9jcmNjXyogaW50cmluc2ljcyBjYW4gYmUg dXNlZAorIyB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGZsYWdzLgorIyBDRkxBR1NfQ1JD IGlzIHNldCBpZiB0aGUgZXh0cmEgZmxhZyBpcyByZXF1aXJlZC4KK1BHQUNfTE9PTkdBUkNI X0NSQzMyQ19JTlRSSU5TSUNTKFtdKQoraWYgdGVzdCB4IiRwZ2FjX2xvb25nYXJjaF9jcmMz MmNfaW50cmluc2ljcyIgIT0geCJ5ZXMiOyB0aGVuCisgIFBHQUNfTE9PTkdBUkNIX0NSQzMy Q19JTlRSSU5TSUNTKFstbWFyY2g9bG9vbmdhcmNoNjRdKQorZmkKKworQUNfU1VCU1QoQ0ZM QUdTX0NSQykKKwogIyBTZWxlY3QgQ1JDLTMyQyBpbXBsZW1lbnRhdGlvbi4KICMKICMgSWYg d2UgYXJlIHRhcmdldGluZyBhIHByb2Nlc3NvciB0aGF0IGhhcyBJbnRlbCBTU0UgNC4yIGlu c3RydWN0aW9ucywgd2UgY2FuCkBAIC0yMTQ0LDcgKzIxNTYsNyBAQCBBQ19TVUJTVChDRkxB R1NfQ1JDKQogIwogIyBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgbG9naWMgYnkgc2V0dGluZyB0 aGUgYXBwcm9wcmlhdGUgVVNFXypfQ1JDMzIgZmxhZyB0byAxCiAjIGluIHRoZSB0ZW1wbGF0 ZSBvciBjb25maWd1cmUgY29tbWFuZCBsaW5lLgotaWYgdGVzdCB4IiRVU0VfU0xJQ0lOR19C WV84X0NSQzMyQyIgPSB4IiIgJiYgdGVzdCB4IiRVU0VfU1NFNDJfQ1JDMzJDIiA9IHgiIiAm JiB0ZXN0IHgiJFVTRV9TU0U0Ml9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLIiA9IHgiIiAm JiB0ZXN0IHgiJFVTRV9BUk1WOF9DUkMzMkMiID0geCIiICYmIHRlc3QgeCIkVVNFX0FSTVY4 X0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0siID0geCIiOyB0aGVuCitpZiB0ZXN0IHgiJFVT RV9TTElDSU5HX0JZXzhfQ1JDMzJDIiA9IHgiIiAmJiB0ZXN0IHgiJFVTRV9TU0U0Ml9DUkMz MkMiID0geCIiICYmIHRlc3QgeCIkVVNFX1NTRTQyX0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hF Q0siID0geCIiICYmIHRlc3QgeCIkVVNFX0FSTVY4X0NSQzMyQyIgPSB4IiIgJiYgdGVzdCB4 IiRVU0VfQVJNVjhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSyIgPSB4IiIgJiYgdGVzdCB4 IiRVU0VfTE9PTkdBUkNIX0NSQzMyQyIgPSB4IiI7IHRoZW4KICAgIyBVc2UgSW50ZWwgU1NF IDQuMiBpZiBhdmFpbGFibGUuCiAgIGlmIHRlc3QgeCIkcGdhY19zc2U0Ml9jcmMzMl9pbnRy aW5zaWNzIiA9IHgieWVzIiAmJiB0ZXN0IHgiJFNTRTRfMl9UQVJHRVRFRCIgPSB4IjEiIDsg dGhlbgogICAgIFVTRV9TU0U0Ml9DUkMzMkM9MQpAQCAtMjE2MiwxMCArMjE3NCwxNSBAQCBp ZiB0ZXN0IHgiJFVTRV9TTElDSU5HX0JZXzhfQ1JDMzJDIiA9IHgiIiAmJiB0ZXN0IHgiJFVT RV9TU0U0Ml9DUkMzMkMiID0geCIiICYmCiAgICAgICAgIGlmIHRlc3QgeCIkcGdhY19hcm12 OF9jcmMzMmNfaW50cmluc2ljcyIgPSB4InllcyI7IHRoZW4KICAgICAgICAgICBVU0VfQVJN VjhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSz0xCiAgICAgICAgIGVsc2UKLSAgICAgICAg ICAjIGZhbGwgYmFjayB0byBzbGljaW5nLWJ5LTggYWxnb3JpdGhtLCB3aGljaCBkb2Vzbid0 IHJlcXVpcmUgYW55Ci0gICAgICAgICAgIyBzcGVjaWFsIENQVSBzdXBwb3J0LgotICAgICAg ICAgIFVTRV9TTElDSU5HX0JZXzhfQ1JDMzJDPTEKLQlmaQorICAgICAgICAgIGlmIHRlc3Qg eCIkcGdhY19sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3MiID0geCJ5ZXMiOyB0aGVuCisg ICAgICAgICAgICAjIExvb25nQXJjaCBDUkNDIGluc3RydWN0aW9ucy4KKyAgICAgICAgICAg IFVTRV9MT09OR0FSQ0hfQ1JDMzJDPTEKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAj IGZhbGwgYmFjayB0byBzbGljaW5nLWJ5LTggYWxnb3JpdGhtLCB3aGljaCBkb2Vzbid0IHJl cXVpcmUgYW55CisgICAgICAgICAgICAjIHNwZWNpYWwgQ1BVIHN1cHBvcnQuCisgICAgICAg ICAgICBVU0VfU0xJQ0lOR19CWV84X0NSQzMyQz0xCisgICAgICAgICAgZmkKKyAgICAgICAg ZmkKICAgICAgIGZpCiAgICAgZmkKICAgZmkKQEAgLTIxOTMsOSArMjIxMCwxNSBAQCBlbHNl CiAgICAgICAgIFBHX0NSQzMyQ19PQkpTPSJwZ19jcmMzMmNfYXJtdjgubyBwZ19jcmMzMmNf c2I4Lm8gcGdfY3JjMzJjX2FybXY4X2Nob29zZS5vIgogICAgICAgICBBQ19NU0dfUkVTVUxU KEFSTXY4IENSQyBpbnN0cnVjdGlvbnMgd2l0aCBydW50aW1lIGNoZWNrKQogICAgICAgZWxz ZQotICAgICAgICBBQ19ERUZJTkUoVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMsIDEsIFtEZWZp bmUgdG8gMSB0byB1c2Ugc29mdHdhcmUgQ1JDLTMyQyBpbXBsZW1lbnRhdGlvbiAoc2xpY2lu Zy1ieS04KS5dKQotICAgICAgICBQR19DUkMzMkNfT0JKUz0icGdfY3JjMzJjX3NiOC5vIgot ICAgICAgICBBQ19NU0dfUkVTVUxUKHNsaWNpbmctYnktOCkKKyAgICAgICAgaWYgdGVzdCB4 IiRVU0VfTE9PTkdBUkNIX0NSQzMyQyIgPSB4IjEiOyB0aGVuCisgICAgICAgICAgQUNfREVG SU5FKFVTRV9MT09OR0FSQ0hfQ1JDMzJDLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNlIExvb25n QXJjaCBDUkNDIGluc3RydWN0aW9ucy5dKQorICAgICAgICAgIFBHX0NSQzMyQ19PQkpTPSJw Z19jcmMzMmNfbG9vbmdhcmNoLm8iCisgICAgICAgICAgQUNfTVNHX1JFU1VMVChMb29uZ0Fy Y2ggQ1JDQyBpbnN0cnVjdGlvbnMpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBBQ19ERUZJ TkUoVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMsIDEsIFtEZWZpbmUgdG8gMSB0byB1c2Ugc29m dHdhcmUgQ1JDLTMyQyBpbXBsZW1lbnRhdGlvbiAoc2xpY2luZy1ieS04KS5dKQorICAgICAg ICAgIFBHX0NSQzMyQ19PQkpTPSJwZ19jcmMzMmNfc2I4Lm8iCisgICAgICAgICAgQUNfTVNH X1JFU1VMVChzbGljaW5nLWJ5LTgpCisgICAgICAgIGZpCiAgICAgICBmaQogICAgIGZpCiAg IGZpCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCmluZGV4IDE2YjJl ODY2NDYuLjVkZThhODVjOTQgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29u LmJ1aWxkCkBAIC0yMDczLDYgKzIwNzMsMzUgQEAgaW50IG1haW4odm9pZCkKICAgICBjZGF0 YS5zZXQoJ1VTRV9BUk1WOF9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLJywgMSkKICAgICBo YXZlX29wdGltaXplZF9jcmMgPSB0cnVlCiAgIGVuZGlmCisKK2VsaWYgaG9zdF9jcHUgPT0g J2xvb25nYXJjaDY0JworCisgIHByb2cgPSAnJycKK2ludCBtYWluKHZvaWQpCit7CisgICAg dW5zaWduZWQgaW50IGNyYyA9IDA7CisgICAgY3JjID0gX19idWlsdGluX2xvb25nYXJjaF9j cmNjX3dfYl93KDAsIGNyYyk7CisgICAgY3JjID0gX19idWlsdGluX2xvb25nYXJjaF9jcmNj X3dfaF93KDAsIGNyYyk7CisgICAgY3JjID0gX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3df d193KDAsIGNyYyk7CisgICAgY3JjID0gX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfZF93 KDAsIGNyYyk7CisKKyAgICAvKiByZXR1cm4gY29tcHV0ZWQgdmFsdWUsIHRvIHByZXZlbnQg dGhlIGFib3ZlIGJlaW5nIG9wdGltaXplZCBhd2F5ICovCisgICAgcmV0dXJuIGNyYyA9PSAw OworfQorJycnCisKKyAgaWYgY2MubGlua3MocHJvZywgbmFtZTogJ19fYnVpbHRpbl9sb29u Z2FyY2hfY3JjY193X2JfdywgX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfaF93LCBfX2J1 aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd193X3csIGFuZCBfX2J1aWx0aW5fbG9vbmdhcmNoX2Ny Y2Nfd19kX3cgd2l0aG91dCAtbWFyY2g9bG9vbmdhcmNoNjQnLAorICAgICAgYXJnczogdGVz dF9jX2FyZ3MpCisgICAgIyBVc2UgTG9vbmdBcmNoIENSQyBpbnN0cnVjdGlvbiB1bmNvbmRp dGlvbmFsbHkKKyAgICBjZGF0YS5zZXQoJ1VTRV9MT09OR0FSQ0hfQ1JDMzJDJywgMSkKKyAg ICBoYXZlX29wdGltaXplZF9jcmMgPSB0cnVlCisgIGVsaWYgY2MubGlua3MocHJvZywgbmFt ZTogJ19fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2JfdywgX19idWlsdGluX2xvb25nYXJj aF9jcmNjX3dfaF93LCBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd193X3csIGFuZCBfX2J1 aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19kX3cgd2l0aCAtbWFyY2g9bG9vbmdhcmNoNjQnLAor ICAgICAgYXJnczogdGVzdF9jX2FyZ3MgKyBbJy1tYXJjaD1sb29uZ2FyY2g2NCddKQorICAg ICMgVXNlIExvb25nQXJjaCBDUkMgaW5zdHJ1Y3Rpb24gdW5jb25kaXRpb25hbGx5CisgICAg Y2RhdGEuc2V0KCdVU0VfTE9PTkdBUkNIX0NSQzMyQycsIDEpCisgICAgaGF2ZV9vcHRpbWl6 ZWRfY3JjID0gdHJ1ZQorICBlbmRpZgorCiBlbmRpZgogCiBpZiBub3QgaGF2ZV9vcHRpbWl6 ZWRfY3JjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiBiL3NyYy9p bmNsdWRlL3BnX2NvbmZpZy5oLmluCmluZGV4IDZkNTcyYzM4MjAuLjFmMjUzNTY2ZTQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluCisrKyBiL3NyYy9pbmNsdWRl L3BnX2NvbmZpZy5oLmluCkBAIC03MjQsNiArNzI0LDkgQEAKIC8qIERlZmluZSB0byAxIHRv IGJ1aWxkIHdpdGggTExWTSBiYXNlZCBKSVQgc3VwcG9ydC4gKC0td2l0aC1sbHZtKSAqLwog I3VuZGVmIFVTRV9MTFZNCiAKKy8qIERlZmluZSB0byAxIHRvIHVzZSBMb29uZ0FyY2ggQ1JD QyBpbnN0cnVjdGlvbnMuICovCisjdW5kZWYgVVNFX0xPT05HQVJDSF9DUkMzMkMKKwogLyog RGVmaW5lIHRvIDEgdG8gYnVpbGQgd2l0aCBMWjQgc3VwcG9ydC4gKC0td2l0aC1sejQpICov CiAjdW5kZWYgVVNFX0xaNAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3J0L3BnX2Ny YzMyYy5oIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19jcmMzMmMuaAppbmRleCA3Zjg3NzkyNjFj Li5kMDg1ZjFkYzAwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L3BnX2NyYzMyYy5o CisrKyBiL3NyYy9pbmNsdWRlL3BvcnQvcGdfY3JjMzJjLmgKQEAgLTU4LDYgKzU4LDE1IEBA IGV4dGVybiBwZ19jcmMzMmMgcGdfY29tcF9jcmMzMmNfc3NlNDIocGdfY3JjMzJjIGNyYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlCiAKIGV4dGVybiBwZ19jcmMzMmMgcGdfY29t cF9jcmMzMmNfYXJtdjgocGdfY3JjMzJjIGNyYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGxlbik7CiAKKyNlbGlmIGRlZmluZWQoVVNFX0xPT05HQVJDSF9DUkMzMkMpCisvKiBVc2Ug TG9vbmdBcmNoIENSQ0MgaW5zdHJ1Y3Rpb25zLiAqLworCisjZGVmaW5lIENPTVBfQ1JDMzJD KGNyYywgZGF0YSwgbGVuKQkJCQkJCQlcCisJKChjcmMpID0gcGdfY29tcF9jcmMzMmNfbG9v bmdhcmNoKChjcmMpLCAoZGF0YSksIChsZW4pKSkKKyNkZWZpbmUgRklOX0NSQzMyQyhjcmMp ICgoY3JjKSBePSAweEZGRkZGRkZGKQorCitleHRlcm4gcGdfY3JjMzJjIHBnX2NvbXBfY3Jj MzJjX2xvb25nYXJjaChwZ19jcmMzMmMgY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg bGVuKTsKKwogI2VsaWYgZGVmaW5lZChVU0VfU1NFNDJfQ1JDMzJDX1dJVEhfUlVOVElNRV9D SEVDSykgfHwgZGVmaW5lZChVU0VfQVJNVjhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSykK IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9wb3J0L01ha2VmaWxlIGIvc3JjL3BvcnQvTWFrZWZp bGUKaW5kZXggNzExZjU5ZTMyYi4uMTkzM2IwZTc1MCAxMDA2NDQKLS0tIGEvc3JjL3BvcnQv TWFrZWZpbGUKKysrIGIvc3JjL3BvcnQvTWFrZWZpbGUKQEAgLTk4LDYgKzk4LDExIEBAIHBn X2NyYzMyY19hcm12OC5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIHBnX2NyYzMyY19hcm12 OF9zaGxpYi5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIHBnX2NyYzMyY19hcm12OF9zcnYu bzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCiAKKyMgYWxsIHZlcnNpb25zIG9mIHBnX2NyYzMy Y19sb29uZ2FyY2gubyBuZWVkIENGTEFHU19DUkMKK3BnX2NyYzMyY19sb29uZ2FyY2gubzog Q0ZMQUdTKz0kKENGTEFHU19DUkMpCitwZ19jcmMzMmNfbG9vbmdhcmNoX3NobGliLm86IENG TEFHUys9JChDRkxBR1NfQ1JDKQorcGdfY3JjMzJjX2xvb25nYXJjaF9zcnYubzogQ0ZMQUdT Kz0kKENGTEFHU19DUkMpCisKICMKICMgU2hhcmVkIGxpYnJhcnkgdmVyc2lvbnMgb2Ygb2Jq ZWN0IGZpbGVzCiAjCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9tZXNvbi5idWlsZCBiL3NyYy9w b3J0L21lc29uLmJ1aWxkCmluZGV4IDI0NDE2YjliZmMuLjNlNzdiMjQ5M2EgMTAwNjQ0Ci0t LSBhL3NyYy9wb3J0L21lc29uLmJ1aWxkCisrKyBiL3NyYy9wb3J0L21lc29uLmJ1aWxkCkBA IC05Miw2ICs5Miw5IEBAIHJlcGxhY2VfZnVuY3NfcG9zID0gWwogICBbJ3BnX2NyYzMyY19h cm12OF9jaG9vc2UnLCAnVVNFX0FSTVY4X0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0snXSwK ICAgWydwZ19jcmMzMmNfc2I4JywgJ1VTRV9BUk1WOF9DUkMzMkNfV0lUSF9SVU5USU1FX0NI RUNLJ10sCiAKKyAgIyBsb29uZ2FyY2gKKyAgWydwZ19jcmMzMmNfbG9vbmdhcmNoJywgJ1VT RV9MT09OR0FSQ0hfQ1JDMzJDJ10sCisKICAgIyBnZW5lcmljIGZhbGxiYWNrCiAgIFsncGdf Y3JjMzJjX3NiOCcsICdVU0VfU0xJQ0lOR19CWV84X0NSQzMyQyddLAogXQpkaWZmIC0tZ2l0 IGEvc3JjL3BvcnQvcGdfY3JjMzJjX2xvb25nYXJjaC5jIGIvc3JjL3BvcnQvcGdfY3JjMzJj X2xvb25nYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmI1 NGZlMTJmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG9ydC9wZ19jcmMzMmNfbG9vbmdh cmNoLmMKQEAgLTAsMCArMSw3MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog cGdfY3JjMzJjX2xvb25nYXJjaC5jCisgKgkgIENvbXB1dGUgQ1JDLTMyQyBjaGVja3N1bSB1 c2luZyBMb29uZ0FyY2ggQ1JDQyBpbnN0cnVjdGlvbnMKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9wb3J0L3BnX2NyYzMyY19sb29uZ2FyY2guYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisjaW5jbHVkZSAiYy5oIgorCisjaW5jbHVkZSAicG9ydC9wZ19jcmMzMmMu aCIKKworcGdfY3JjMzJjCitwZ19jb21wX2NyYzMyY19sb29uZ2FyY2gocGdfY3JjMzJjIGNy YywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCB1bnNpZ25lZCBj aGFyICpwID0gZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZW5kID0gcCArIGxlbjsK KworCS8qCisJICogQWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHNpZ25pZmljYW50bHkgZmFz dGVyLgorCSAqIFByb2Nlc3MgbGVhZGluZyBieXRlcyBzbyB0aGF0IHRoZSBsb29wIGJlbG93 IHN0YXJ0cyB3aXRoIGEgcG9pbnRlciBhbGlnbmVkIHRvIGVpZ2h0IGJ5dGVzLgorCSAqLwor CWlmICghUG9pbnRlcklzQWxpZ25lZChwLCB1aW50MTYpICYmCisJCXAgKyAxIDw9IHBlbmQp CisJeworCQljcmMgPSBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd19iX3coKnAsIGNyYyk7 CisJCXAgKz0gMTsKKwl9CisJaWYgKCFQb2ludGVySXNBbGlnbmVkKHAsIHVpbnQzMikgJiYK KwkJcCArIDIgPD0gcGVuZCkKKwl7CisJCWNyYyA9IF9fYnVpbHRpbl9sb29uZ2FyY2hfY3Jj Y193X2hfdygqKHVpbnQxNiAqKSBwLCBjcmMpOworCQlwICs9IDI7CisJfQorCWlmICghUG9p bnRlcklzQWxpZ25lZChwLCB1aW50NjQpICYmCisJCXAgKyA0IDw9IHBlbmQpCisJeworCQlj cmMgPSBfX2J1aWx0aW5fbG9vbmdhcmNoX2NyY2Nfd193X3coKih1aW50MzIgKikgcCwgY3Jj KTsKKwkJcCArPSA0OworCX0KKworCS8qIFByb2Nlc3MgZWlnaHQgYnl0ZXMgYXQgYSB0aW1l LCBhcyBmYXIgYXMgd2UgY2FuLiAqLworCXdoaWxlIChwICsgOCA8PSBwZW5kKQorCXsKKwkJ Y3JjID0gX19idWlsdGluX2xvb25nYXJjaF9jcmNjX3dfZF93KCoodWludDY0ICopIHAsIGNy Yyk7CisJCXAgKz0gODsKKwl9CisKKwkvKiBQcm9jZXNzIHJlbWFpbmluZyAwLTcgYnl0ZXMu ICovCisJaWYgKHAgKyA0IDw9IHBlbmQpCisJeworCQljcmMgPSBfX2J1aWx0aW5fbG9vbmdh cmNoX2NyY2Nfd193X3coKih1aW50MzIgKikgcCwgY3JjKTsKKwkJcCArPSA0OworCX0KKwlp ZiAocCArIDIgPD0gcGVuZCkKKwl7CisJCWNyYyA9IF9fYnVpbHRpbl9sb29uZ2FyY2hfY3Jj Y193X2hfdygqKHVpbnQxNiAqKSBwLCBjcmMpOworCQlwICs9IDI7CisJfQorCWlmIChwIDwg cGVuZCkKKwl7CisJCWNyYyA9IF9fYnVpbHRpbl9sb29uZ2FyY2hfY3JjY193X2JfdygqcCwg Y3JjKTsKKwl9CisKKwlyZXR1cm4gY3JjOworfQotLSAKMi40MS4wCgo= --------------YGWxg1ox6pEKMJl0S5AiUMok--