From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 200723858D3C for ; Thu, 10 Nov 2022 11:17:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 200723858D3C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8A6A01FB; Thu, 10 Nov 2022 03:17:08 -0800 (PST) Received: from [10.57.4.81] (unknown [10.57.4.81]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A13383F534; Thu, 10 Nov 2022 03:17:01 -0800 (PST) Content-Type: multipart/mixed; boundary="------------CAvVGv3YtMkTVX6ceBvuh7Ug" Message-ID: Date: Thu, 10 Nov 2022 11:16:55 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: Kyrylo Tkachov , Richard Earnshaw , Richard Sandiford From: "Andre Vieira (lists)" Subject: [PATCH 1/2] aarch64: Enable the use of LDAPR for load-acquire semantics X-Spam-Status: No, score=-16.5 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------CAvVGv3YtMkTVX6ceBvuh7Ug Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, This patch enables the use of LDAPR for load-acquire semantics. After some internal investigation based on the work published by Podkopaev et al. (https://dl.acm.org/doi/10.1145/3290382) we can confirm that using LDAPR for the C++ load-acquire semantics is a correct relaxation. Bootstrapped and regression tested on aarch64-none-linux-gnu. OK for trunk? 2022-11-09  Andre Vieira              Kyrylo Tkachov  gcc/ChangeLog:         * config/aarch64/aarch64.h (AARCH64_ISA_RCPC): New Macro.         (TARGET_RCPC): New Macro.         * config/aarch64/atomics.md (atomic_load): Change into         an expand.         (aarch64_atomic_load_rcpc): New define_insn for ldapr.         (aarch64_atomic_load): Rename of old define_insn for ldar.         * config/aarch64/iterators.md (UNSPEC_LDAP): New unspec enum value.         * doc/gcc/gcc-command-options/machine-dependent-options/aarch64-options.rst         (rcpc): Ammend documentation to mention the effects on code generation. gcc/testsuite/ChangeLog:         * gcc.target/aarch64/ldapr.c: New test.         * lib/target-supports.exp (add_options_for_aarch64_rcpc): New options procedure.         (check_effective_target_aarch64_rcpc_ok_nocache): New check-effective-target.         (check_effective_target_aarch64_rcpc_ok): Likewise. --------------CAvVGv3YtMkTVX6ceBvuh7Ug Content-Type: text/plain; charset=UTF-8; name="ldapr.patch" Content-Disposition: attachment; filename="ldapr.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmggYi9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC5oCmluZGV4IGU2MGY5YmNlMDIzYjJjZDVlNzIzM2VlOWI4YzYx ZmM5M2MxNDk0YzIuLjUxYThhYTAyYTU4NTBkNWM3OTI1NWRiZjdlMDc2NGZmZGVjNzNjY2Qg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmgKKysrIGIvZ2NjL2Nv bmZpZy9hYXJjaDY0L2FhcmNoNjQuaApAQCAtMjIxLDYgKzIyMSw3IEBAIGVudW0gY2xhc3Mg YWFyY2g2NF9mZWF0dXJlIDogdW5zaWduZWQgY2hhciB7CiAjZGVmaW5lIEFBUkNINjRfSVNB X1Y5XzNBICAgICAgICAgIChhYXJjaDY0X2lzYV9mbGFncyAmIEFBUkNINjRfRkxfVjlfM0Ep CiAjZGVmaW5lIEFBUkNINjRfSVNBX01PUFMJICAgKGFhcmNoNjRfaXNhX2ZsYWdzICYgQUFS Q0g2NF9GTF9NT1BTKQogI2RlZmluZSBBQVJDSDY0X0lTQV9MUzY0CSAgIChhYXJjaDY0X2lz YV9mbGFncyAmIEFBUkNINjRfRkxfTFM2NCkKKyNkZWZpbmUgQUFSQ0g2NF9JU0FfUkNQQyAg ICAgICAgICAgKGFhcmNoNjRfaXNhX2ZsYWdzICYgQUFSQ0g2NF9GTF9SQ1BDKQogCiAvKiBD cnlwdG8gaXMgYW4gb3B0aW9uYWwgZXh0ZW5zaW9uIHRvIEFkdlNJTUQuICAqLwogI2RlZmlu ZSBUQVJHRVRfQ1JZUFRPIChBQVJDSDY0X0lTQV9DUllQVE8pCkBAIC0zMjgsNiArMzI5LDkg QEAgZW51bSBjbGFzcyBhYXJjaDY0X2ZlYXR1cmUgOiB1bnNpZ25lZCBjaGFyIHsKIC8qIFNC IGluc3RydWN0aW9uIGlzIGVuYWJsZWQgdGhyb3VnaCArc2IuICAqLwogI2RlZmluZSBUQVJH RVRfU0IgKEFBUkNINjRfSVNBX1NCKQogCisvKiBSQ1BDIGxvYWRzIGZyb20gQXJtdjguMy1h LiAgKi8KKyNkZWZpbmUgVEFSR0VUX1JDUEMgKEFBUkNINjRfSVNBX1JDUEMpCisKIC8qIEFw cGx5IHRoZSB3b3JrYXJvdW5kIGZvciBDb3J0ZXgtQTUzIGVycmF0dW0gODM1NzY5LiAgKi8K ICNkZWZpbmUgVEFSR0VUX0ZJWF9FUlJfQTUzXzgzNTc2OQlcCiAgICgoYWFyY2g2NF9maXhf YTUzX2VycjgzNTc2OSA9PSAyKQlcCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQv YXRvbWljcy5tZCBiL2djYy9jb25maWcvYWFyY2g2NC9hdG9taWNzLm1kCmluZGV4IGJjOTVm NmQ5ZDE1ZjE5MGEzZTMzNzA0YjRkZWYyODYwZDVmMzM5YmQuLjgwMWE2MmJmMmJhNDMyZjM1 YWUxOTMxYmViOGM0NDA1Yjc3YjM2YzMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2 NC9hdG9taWNzLm1kCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hdG9taWNzLm1kCkBAIC02 NTcsNyArNjU3LDQyIEBACiAgIH0KICkKIAotKGRlZmluZV9pbnNuICJhdG9taWNfbG9hZDxt b2RlPiIKKyhkZWZpbmVfZXhwYW5kICJhdG9taWNfbG9hZDxtb2RlPiIKKyAgWyhtYXRjaF9v cGVyYW5kOkFMTEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKyAgIChtYXRjaF9vcGVy YW5kOkFMTEkgMSAiYWFyY2g2NF9zeW5jX21lbW9yeV9vcGVyYW5kIiAiUSIpCisgICAobWF0 Y2hfb3BlcmFuZDpTSSAgIDIgImNvbnN0X2ludF9vcGVyYW5kIildCisgICIiCisgIHsKKyAg ICAvKiBJZiBUQVJHRVRfUkNQQyBhbmQgdGhpcyBpcyBhbiBBQ1FVSVJFIGxvYWQsIHRoZW4g ZXhwYW5kIHRvIGEgcGF0dGVybgorICAgICAgIHVzaW5nIFVOU1BFQ1ZfTERBUC4gICovCisg ICAgZW51bSBtZW1tb2RlbCBtb2RlbCA9IG1lbW1vZGVsX2Zyb21faW50IChJTlRWQUwgKG9w ZXJhbmRzWzJdKSk7CisgICAgaWYgKFRBUkdFVF9SQ1BDCisJJiYgKGlzX21tX2FjcXVpcmUg KG1vZGVsKQorCSAgICB8fCBpc19tbV9hY3FfcmVsIChtb2RlbCkpKQorICAgIHsKKyAgICAg IGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfYXRvbWljX2xvYWQ8bW9kZT5fcmNwYyAob3BlcmFu ZHNbMF0sIG9wZXJhbmRzWzFdLAorCQkJCQkJICAgICBvcGVyYW5kc1syXSkpOworICAgIH0K KyAgICBlbHNlCisgICAgeworICAgICAgZW1pdF9pbnNuIChnZW5fYWFyY2g2NF9hdG9taWNf bG9hZDxtb2RlPiAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLAorCQkJCQkJb3BlcmFuZHNb Ml0pKTsKKyAgICB9CisgICAgRE9ORTsKKyAgfQorKQorCisoZGVmaW5lX2luc24gImFhcmNo NjRfYXRvbWljX2xvYWQ8bW9kZT5fcmNwYyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUxM SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorICAgICh1bnNwZWNfdm9sYXRpbGU6QUxM SQorICAgICAgWyhtYXRjaF9vcGVyYW5kOkFMTEkgMSAiYWFyY2g2NF9zeW5jX21lbW9yeV9v cGVyYW5kIiAiUSIpCisgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfaW50X29w ZXJhbmQiKV0JCQk7OyBtb2RlbAorICAgICAgVU5TUEVDVl9MREFQKSldCisgICJUQVJHRVRf UkNQQyIKKyAgImxkYXByPGF0b21pY19zZng+XHQlPHc+MCwgJTEiCispCisKKyhkZWZpbmVf aW5zbiAiYWFyY2g2NF9hdG9taWNfbG9hZDxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6QUxMSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogICAgICh1bnNwZWNfdm9sYXRp bGU6QUxMSQogICAgICAgWyhtYXRjaF9vcGVyYW5kOkFMTEkgMSAiYWFyY2g2NF9zeW5jX21l bW9yeV9vcGVyYW5kIiAiUSIpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvaXRl cmF0b3JzLm1kIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJhdG9ycy5tZAppbmRleCBhOGFk NGU1ZmYyMTVhZGUwNmMzY2ExM2EyNGVmMThkMjU5YWZjYjZjLi5kOGMyZjlkNmMzMmQ2ZjE4 OGQ1ODRjMmU5ZDhmYjM2NTExNjI0ZGU2IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNo NjQvaXRlcmF0b3JzLm1kCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9pdGVyYXRvcnMubWQK QEAgLTk4OCw2ICs5ODgsNyBAQAogICAgIFVOU1BFQ1ZfTFgJCQk7IFJlcHJlc2VudCBhIGxv YWQtZXhjbHVzaXZlLgogICAgIFVOU1BFQ1ZfU1gJCQk7IFJlcHJlc2VudCBhIHN0b3JlLWV4 Y2x1c2l2ZS4KICAgICBVTlNQRUNWX0xEQQkJCTsgUmVwcmVzZW50IGFuIGF0b21pYyBsb2Fk IG9yIGxvYWQtYWNxdWlyZS4KKyAgICBVTlNQRUNWX0xEQVAJCTsgUmVwcmVzZW50IGFuIGF0 b21pYyBhY3F1aXJlIGxvYWQgd2l0aCBSQ3BjIHNlbWFudGljcy4KICAgICBVTlNQRUNWX1NU TAkJCTsgUmVwcmVzZW50IGFuIGF0b21pYyBzdG9yZSBvciBzdG9yZS1yZWxlYXNlLgogICAg IFVOU1BFQ1ZfQVRPTUlDX0NNUFNXCTsgUmVwcmVzZW50IGFuIGF0b21pYyBjb21wYXJlIHN3 YXAuCiAgICAgVU5TUEVDVl9BVE9NSUNfRVhDSEcJOyBSZXByZXNlbnQgYW4gYXRvbWljIGV4 Y2hhbmdlLgpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9nY2MvZ2NjLWNvbW1hbmQtb3B0aW9ucy9t YWNoaW5lLWRlcGVuZGVudC1vcHRpb25zL2FhcmNoNjQtb3B0aW9ucy5yc3QgYi9nY2MvZG9j L2djYy9nY2MtY29tbWFuZC1vcHRpb25zL21hY2hpbmUtZGVwZW5kZW50LW9wdGlvbnMvYWFy Y2g2NC1vcHRpb25zLnJzdAppbmRleCBjMmIyM2E2ZWU5N2VmMmI3Yzc0MTE5ZjIyYzFkM2Uz ZDg1Mzg1ZjRkLi4yNWQ2MDkyMzhkYjdkNDU4NDVkYmM0NDZhYzIxZDEyZGRkY2Y4ZWFjIDEw MDY0NAotLS0gYS9nY2MvZG9jL2djYy9nY2MtY29tbWFuZC1vcHRpb25zL21hY2hpbmUtZGVw ZW5kZW50LW9wdGlvbnMvYWFyY2g2NC1vcHRpb25zLnJzdAorKysgYi9nY2MvZG9jL2djYy9n Y2MtY29tbWFuZC1vcHRpb25zL21hY2hpbmUtZGVwZW5kZW50LW9wdGlvbnMvYWFyY2g2NC1v cHRpb25zLnJzdApAQCAtNDM3LDkgKzQzNyw5IEBAIHRoZSBmb2xsb3dpbmcgYW5kIHRoZWly IGludmVyc2VzIG5vIDpzYW1wOmB7ZmVhdHVyZX1gIDoKICAgZmxvYXRpbmctcG9pbnQgaW5z dHJ1Y3Rpb25zLiBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIDpvcHRp b246YC1tYXJjaD1hcm12OC40LWFgLiBVc2Ugb2YgdGhpcyBvcHRpb24gd2l0aCBhcmNoaXRl Y3R1cmVzIHByaW9yIHRvIEFybXY4LjItQSBpcyBub3Qgc3VwcG9ydGVkLgogCiA6c2FtcDpg cmNwY2AKLSAgRW5hYmxlIHRoZSBSY1BjIGV4dGVuc2lvbi4gIFRoaXMgZG9lcyBub3QgY2hh bmdlIGNvZGUgZ2VuZXJhdGlvbiBmcm9tIEdDQywKLSAgYnV0IGlzIHBhc3NlZCBvbiB0byB0 aGUgYXNzZW1ibGVyLCBlbmFibGluZyBpbmxpbmUgYXNtIHN0YXRlbWVudHMgdG8gdXNlCi0g IGluc3RydWN0aW9ucyBmcm9tIHRoZSBSY1BjIGV4dGVuc2lvbi4KKyAgRW5hYmxlIHRoZSBS Y1BjIGV4dGVuc2lvbi4gIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBMREFQUiBpbnN0 cnVjdGlvbnMgZm9yCisgIGxvYWQtYWNxdWlyZSBhdG9taWMgc2VtYW50aWNzLCBhbmQgcGFz c2VzIGl0IG9uIHRvIHRoZSBhc3NlbWJsZXIsIGVuYWJsaW5nCisgIGlubGluZSBhc20gc3Rh dGVtZW50cyB0byB1c2UgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIFJjUGMgZXh0ZW5zaW9uLgog CiA6c2FtcDpgZG90cHJvZGAKICAgRW5hYmxlIHRoZSBEb3QgUHJvZHVjdCBleHRlbnNpb24u ICBUaGlzIGFsc28gZW5hYmxlcyBBZHZhbmNlZCBTSU1EIGluc3RydWN0aW9ucy4KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2xkYXByLmMgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9sZGFwci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMz NmVkZmNkNzlhOWVlNDE0MzRhYjA5YWM0N2QyNTdhNjkyYTg2MDYKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9sZGFwci5jCkBAIC0wLDAg KzEsMzUgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MSAtc3RkPWM5OSIgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWFy Y2g2NF9yY3BjX29rIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYWFyY2g2NF9yY3BjIH0g Ki8KKyNpbmNsdWRlIDxzdGRhdG9taWMuaD4KKworYXRvbWljX3VsbG9uZyB1NjQ7CithdG9t aWNfbGxvbmcgczY0OworYXRvbWljX3VpbnQgdTMyOworYXRvbWljX2ludCBzMzI7CithdG9t aWNfdXNob3J0IHUxNjsKK2F0b21pY19zaG9ydCBzMTY7CithdG9taWNfdWNoYXIgdTg7Cith dG9taWNfc2NoYXIgczg7CisKKyNkZWZpbmUgVEVTVChzaXplLCByZXR0eXBlKQkJCQkJXAor cmV0dHlwZQkJCQkJCQkJXAordGVzdF8jI3NpemUgKHZvaWQpCQkJCQkJXAorewkJCQkJCQkJ XAorICByZXR1cm4gYXRvbWljX2xvYWRfZXhwbGljaXQgKCZzaXplLCBtZW1vcnlfb3JkZXJf YWNxdWlyZSk7CVwKK30JCQkJCQkJCVwKKworVEVTVCh1NjQsIHVuc2lnbmVkIGxvbmcgbG9u ZykKK1RFU1QoczY0LCBsb25nIGxvbmcpCitURVNUKHUzMiwgdW5zaWduZWQgaW50KQorVEVT VChzMzIsIGludCkKK1RFU1QodTE2LCB1bnNpZ25lZCBzaG9ydCkKK1RFU1QoczE2LCBzaG9y dCkKK1RFU1QodTgsIHVuc2lnbmVkIGNoYXIpCitURVNUKHM4LCBzaWduZWQgY2hhcikKKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJsZGFwclx0eCIgMiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibGRhcHJcdHciIDIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImxkYXByaFx0 dyIgMiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibGRh cHJiXHR3IiAyIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0 LXN1cHBvcnRzLmV4cCBiL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0cy5leHAK aW5kZXggYzdmNTgzZDZkMTQ5ODQwMWE3YzEwNmVkM2Y1MzlkY2QwNGY5NTQ1MS4uMjYyNjY1 YTc4ZGZiNThmMWU2M2I2Mjk4MjljNTExMjc4OWI3YWJkOSAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cAorKysgYi9nY2MvdGVzdHN1aXRlL2xp Yi90YXJnZXQtc3VwcG9ydHMuZXhwCkBAIC0xMTgxOSw2ICsxMTgxOSw0MiBAQCBwcm9jIGNo ZWNrX2VmZmVjdGl2ZV90YXJnZXRfZ2xpYmMgeyB9IHsKICAgICB9XQogfQogCitwcm9jIGFk ZF9vcHRpb25zX2Zvcl9hYXJjaDY0X3JjcGMgeyBmbGFncyB9IHsKKyAgICBpZiB7ICEgW2No ZWNrX2VmZmVjdGl2ZV90YXJnZXRfYWFyY2g2NF9yY3BjX29rXSB9IHsKKwlyZXR1cm4gIiRm bGFncyIKKyAgICB9CisgICAgZ2xvYmFsIGV0X2FhcmNoNjRfcmNwY19mbGFncworICAgIHJl dHVybiAiJGZsYWdzICRldF9hYXJjaDY0X3JjcGNfZmxhZ3MiCit9CisKKyMgUmV0dXJuIDEg aWYgdGhlIHRvb2xjaGFpbiBzdXBwb3J0cyB0aGUgUkNQQyBleHRlbnNpb24uCitwcm9jIGNo ZWNrX2VmZmVjdGl2ZV90YXJnZXRfYWFyY2g2NF9yY3BjX29rX25vY2FjaGUgeyB9IHsKKyAg ICBnbG9iYWwgZXRfYWFyY2g2NF9yY3BjX2ZsYWdzCisgICAgc2V0IGV0X2FhcmNoNjRfcmNw Y19mbGFncyAiIgorICAgIGlmIHsgIVtpc3RhcmdldCBhYXJjaDY0Ki0qLSpdIH0geworCXJl dHVybiAwCisgICAgfQorCisgICAgZm9yZWFjaCBmbGFncyB7IiIgIi1tYXJjaD1hcm12OC4y LWErcmNwYyJ9IHsKKwlpZiB7IFtjaGVja19ub19jb21waWxlcl9tZXNzYWdlc19ub2NhY2hl IGFhcmNoNjRfcmNwY19vayBvYmplY3QgeworCSAgICBpbnQgbWFpbiAodm9pZCkgeworCQlh c20gdm9sYXRpbGUgKCJsZGFwciB4MCwgW3gwXSI6OjoibWVtb3J5Iik7CisJCXJldHVybiAw OworCSAgICB9CisJICB9ICRmbGFncyBdIH0geworCSAgICAgIHNldCBldF9hYXJjaDY0X3Jj cGNfZmxhZ3MgJGZsYWdzCisJICAgICAgcmV0dXJuIDEKKwkgIH0KKyAgICB9CisgICAgcmV0 dXJuIDAKK30KKworcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X2FhcmNoNjRfcmNwY19v ayB7IH0geworICAgIHJldHVybiBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2ZV90YXJnZXQgYWFy Y2g2NF9yY3BjX29rIFwKKwkgICAgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X3Jj cGNfb2tfbm9jYWNoZV0KK30KKworCiAjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgcGx1cyBj dXJyZW50IG9wdGlvbnMgc3VwcG9ydHMgYSB2ZWN0b3IKICMgY29tcGxleCBhZGRpdGlvbiB3 aXRoIHJvdGF0ZSBvZiBoYWxmIGFuZCBzaW5nbGUgZmxvYXQgbW9kZXMsIDAgb3RoZXJ3aXNl LgogIwo= --------------CAvVGv3YtMkTVX6ceBvuh7Ug--