Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vN9ol-00Cd2U-2z for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Nov 2025 13:07:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vN9ok-00EYmK-1H for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Nov 2025 13:07:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vN9oj-00EYmC-2Y for pgsql-hackers@lists.postgresql.org; Sun, 23 Nov 2025 13:07:50 +0000 Received: from fhigh-b2-smtp.messagingengine.com ([202.12.124.153]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vN9oh-0013rv-0Q for pgsql-hackers@lists.postgresql.org; Sun, 23 Nov 2025 13:07:49 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id 451C07A0190; Sun, 23 Nov 2025 08:07:44 -0500 (EST) Received: from phl-imap-14 ([10.202.2.87]) by phl-compute-02.internal (MEProxy); Sun, 23 Nov 2025 08:07:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1763903264; x=1763989664; bh=nc5r0uHM8P EcdKe+G3w9yjumU7lY9jAAgK4/P5aUQnY=; b=TyrOQmqTgc+CUF5YKOggXbby23 xv/azizry4DJVxqoLr/6T7jKFMUge3wTGo7yS5mViKBDYFxv/vX/BXEBHQFLq1yj F9bPbN+757zZ+0X8+x2bFAk2y0Pu2pxgOEzFH7Og1VwzlTKWiYuickIx7COy03F3 /9bBaJ80BIpVJ+TofSDhpdbSmxNbx7gcfVSKb3liM7KnxFvp5WCLeslYrtl7wqn/ xMm5WSkhVFqWbD7Vryc8OeW8SFFsMpxatv0B7eO0VZA/ww+FY0eMtxF22bBnrMnJ B3KmJq8a65Tb/BL6YqMKINpZR0zq8Tzt+Yk2DDrcqkoI9P+u2YzgcW4lbiFQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1763903264; x=1763989664; bh=nc5r0uHM8PEcdKe+G3w9yjumU7lY9jAAgK4 /P5aUQnY=; b=lAyGkNXz8dGtFd+tSfIJIqlzNgwsIe4F4nyjW12X4jTJinyZXvF NAR2reMhFLXeQD/8E0/TN4dfXRmRRaHF4dtQrL3KxMxjFYDRuaZxvCX8PkLTQzjz gpRYLfb0p/UfNqqGoAsB4v5i9PnHyI2AjPKJl48pPdvJcUg0Tr/Uey9YKK28cHjo Z6HDbx3hxK0eZo4MprKnXF7src0unY2e+P16XOz3KrFPBlg4gfDL8r4KJAdFv+nk EHtkJxDJsCBj8FI6SVuBoFoO4XgobK04bsAkYCBu3T01zQ2uqZVdlR6Hedo0xyCG zdWKl1wP/UuNzgXmGvl3uyHV0E7HgFA364w== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvfeehkedtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf gurhepofggfffhvfevkfgjfhfutgesmhdtreerredtjeenucfhrhhomhepfdfirhgvghcu uehurhgufdcuoehgrhgvghessghurhgurdhmvgeqnecuggftrfgrthhtvghrnhepgfetje eujeegkefftefhvdeltdekfeefgfevtdelteekgeegudehfeduhedugfelnecuffhomhgr ihhnpehpohhsthhgrhgvshhqlhdrohhrghenucevlhhushhtvghrufhiiigvpedtnecurf grrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvgdpnhgspghrtghpthht ohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepuggrvhgvtghrrghmvghrse hgmhgrihhlrdgtohhmpdhrtghpthhtohepthhhohhmrghsrdhmuhhnrhhosehgmhgrihhl rdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhosh htghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 1A9D0C40061; Sun, 23 Nov 2025 08:07:43 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: ASp1z1VhzG_s Date: Sun, 23 Nov 2025 08:07:25 -0500 From: "Greg Burd" To: "Thomas Munro" Cc: "PostgreSQL Hackers" , "Dave Cramer" Message-Id: <3c576ad7-d2da-4137-b791-5821da7cc370@app.fastmail.com> In-Reply-To: References: Subject: =?UTF-8?Q?Re:_[PATCH]_Fix_ARM64/MSVC_atomic_memory_ordering_issues_on_Wi?= =?UTF-8?Q?n11_by_adding_explicit_DMB_=E2=80=8Bbarriers?= Content-Type: multipart/mixed; boundary=ad395a80d7e04727a658999d358e3981 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --ad395a80d7e04727a658999d358e3981 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Thu, Nov 20, 2025, at 7:08 PM, Thomas Munro wrote: > If you have an environment set up so it's easy to test, I would also > be very interested to know if my patch set[3] that nukes all this > stuff and includes instead, which is green on > Windows/x86 CI, will just work=E2=84=A2 there too. > > [3]=20 > https://www.postgresql.org/message-id/flat/CA%2BhUKGKFvu3zyvv3aaj5hHs9= VtWcjFAmisOwOc7aOZNc5AF3NA%40mail.gmail.com Hello Thomas, I gave your stdatomic patchs a try, here's where it fell apart linking. [174/1996] Linking target src/interfaces/libpq/libpq.dll Creating library src/interfaces/libpq\libpq.lib [981/1996] Linking target src/interfaces/ecpg/pgtypeslib/libpgtypes.dll Creating library src\interfaces\ecpg\pgtypeslib\libpgtypes.lib [1235/1996] Linking target src/interfaces/ecpg/ecpglib/libecpg.dll Creating library src\interfaces\ecpg\ecpglib\libecpg.lib [1401/1996] Linking target src/backend/postgres.exe FAILED: [code=3D1120] src/backend/postgres.exe src/backend/postgres.pdb "link" @src/backend/postgres.exe.rsp Creating library src\backend\postgres.lib storage_lmgr_s_lock.c.obj : error LNK2019: unresolved external symbol _m= m_pause referenced in function perform_spin_delay src\backend\postgres.exe : fatal error LNK1120: 1 unresolved externals [1410/1996] Compiling C object src/backend/snowball/dict_snowball.dll.p/= libstemmer_stem_UTF_8_german.c.obj ninja: build stopped: subcommand failed. I used your v2 and the attached reduced set of Dave and my changes. I'l= l work on this next week if I find a bit of time, shouldn't be all that = hard. I thought I'd update you before then. Also attached is my config= script, I sent out my notes on a separate email. I forgot to provide the MSVC compiler/linker versions for posterity, the= y are: cl (msvc 19.50.35718 "Microsoft (R) C/C++ Optimizing Compiler Version = 19.50.35718 for ARM64") link 14.50.35718.0 best. -greg --ad395a80d7e04727a658999d358e3981 Content-Disposition: attachment; filename*0="v20251123-0001-WIP-ARM64-MSVC-stdatomic.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?v20251123-0001-WIP-ARM64-MSVC-stdatomic.patch?=" Content-Transfer-Encoding: base64 RnJvbSA3ZTZmNWEyM2U3YWVjYjcxNzBhOTdmMDkyZTYxZjdkNTkwZWY1ZTNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog U3VuLCAyMyBOb3YgMjAyNSAwNzo1ODo0NyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwMjUx MTIzXSBXSVAgQVJNNjQvTVNWQyBzdGRhdG9taWMKCi0tLQogZG9jL3NyYy9zZ21sL2luc3Rh bGxhdGlvbi5zZ21sIHwgIDIgKy0KIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8 IDE1ICsrKysrKysrKysrKysrLQogc3JjL3BvcnQvcGdfY3JjMzJjX2FybXY4LmMgICAgIHwg IDIgKysKIHNyYy90b29scy9tc3ZjX2dlbmRlZi5wbCAgICAgICB8ICA4ICsrKystLS0tCiA0 IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luc3RhbGxhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21s L2luc3RhbGxhdGlvbi5zZ21sCmluZGV4IGZlOGQ3M2UxZjhjLi4zZjhkNTEyYTkwNiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luc3RhbGxhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9pbnN0YWxsYXRpb24uc2dtbApAQCAtMzk2Nyw3ICszOTY3LDcgQEAgY29uZmlndXJl IC4uLiBMREZMQUdTPSItUiAvdXNyL3Nmdy9saWI6L29wdC9zZncvbGliOi91c3IvbG9jYWwv bGliIgogICAgPHNlY3QzIGlkPSJpbnN0YWxsLXdpbmRvd3MtZnVsbC02NC1iaXQiPgogICAg IDx0aXRsZT5TcGVjaWFsIENvbnNpZGVyYXRpb25zIGZvciA2NC1CaXQgV2luZG93czwvdGl0 bGU+CiAgICAgPHBhcmE+Ci0gICAgIFBvc3RncmVTUUwgd2lsbCBvbmx5IGJ1aWxkIGZvciB0 aGUgeDY0IGFyY2hpdGVjdHVyZSBvbiA2NC1iaXQgV2luZG93cy4KKyAgICAgUG9zdGdyZVNR TCB3aWxsIG9ubHkgYnVpbGQgZm9yIHRoZSB4NjQgYW5kIEFSTTY0IGFyY2hpdGVjdHVyZXMg b24gNjQtYml0IFdpbmRvd3MuCiAgICAgPC9wYXJhPgogICAgIDxwYXJhPgogICAgICBNaXhp bmcgMzItIGFuZCA2NC1iaXQgdmVyc2lvbnMgaW4gdGhlIHNhbWUgYnVpbGQgdHJlZSBpcyBu b3Qgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZApp bmRleCAxYTIwMDVlNzVjNC4uMTg2MzcxODBhYjEgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxk CisrKyBiL21lc29uLmJ1aWxkCkBAIC0yMTU4LDYgKzIxNTgsMTEgQEAgZW5kZm9yZWFjaAog CiAKIGlmIGNjLmdldF9pZCgpID09ICdtc3ZjJworICAjIEFkZCBBUk02NCBhcmNoaXRlY3R1 cmUgZmxhZyBmb3IgV2luZG93cyAxMSBBUk02NCBmb3IgY29ycmVjdCBpbnRyZW5zaWNzCisg IGlmIGhvc3RfbWFjaGluZS5zeXN0ZW0oKSA9PSAnd2luZG93cycgYW5kIGhvc3RfbWFjaGlu ZS5jcHVfZmFtaWx5KCkgPT0gJ2FhcmNoNjQnCisgICAgYWRkX3Byb2plY3RfYXJndW1lbnRz KCcvYXJjaDphcm12OS40JywgbGFuZ3VhZ2U6IFsnYycsICdjcHAnXSkKKyAgZW5kaWYKKwog ICBjZmxhZ3Nfd2FybiArPSBbCiAgICAgIyBXYXJuaW5ncyB0byBkaXNhYmxlOgogICAgICMg ZnJvbSAvVzE6CkBAIC0yMzY3LDYgKzIzNzIsMTEgQEAgaWYgaG9zdF9jcHUgPT0gJ3g4Nicg b3IgaG9zdF9jcHUgPT0gJ3g4Nl82NCcKICAgZWxzZQogCiAgICAgcHJvZyA9ICcnJworI2lm ZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8aW50cmluLmg+CisjZWxzZQorI2luY2x1ZGUgPGFy bV9hY2xlLmg+CisjZW5kaWYKICNpbmNsdWRlIDxubW1pbnRyaW4uaD4KIHVuc2lnbmVkIGlu dCBjcmM7CiAKQEAgLTI0NTAsNyArMjQ2MCwxMCBAQCBpbnQgbWFpbih2b2lkKQogfQogJycn CiAKLSAgaWYgY2MubGlua3MocHJvZywgbmFtZTogJ19fY3JjMzJjYiwgX19jcmMzMmNoLCBf X2NyYzMyY3csIGFuZCBfX2NyYzMyY2Qgd2l0aG91dCAtbWFyY2g9YXJtdjgtYStjcmMnLAor ICBpZiBjYy5nZXRfaWQoKSA9PSAnbXN2YycKKyAgICBjZGF0YS5zZXQoJ1VTRV9BUk1WOF9D UkMzMkMnLCAxKQorICAgIGhhdmVfb3B0aW1pemVkX2NyYyA9IHRydWUKKyAgZWxpZiBjYy5s aW5rcyhwcm9nLCBuYW1lOiAnX19jcmMzMmNiLCBfX2NyYzMyY2gsIF9fY3JjMzJjdywgYW5k IF9fY3JjMzJjZCB3aXRob3V0IC1tYXJjaD1hcm12OC1hK2NyYycsCiAgICAgICBhcmdzOiB0 ZXN0X2NfYXJncykKICAgICAjIFVzZSBBUk0gQ1JDIEV4dGVuc2lvbiB1bmNvbmRpdGlvbmFs bHkKICAgICBjZGF0YS5zZXQoJ1VTRV9BUk1WOF9DUkMzMkMnLCAxKQpkaWZmIC0tZ2l0IGEv c3JjL3BvcnQvcGdfY3JjMzJjX2FybXY4LmMgYi9zcmMvcG9ydC9wZ19jcmMzMmNfYXJtdjgu YwppbmRleCA1YmEwNzBiYjk5ZC4uNmExNTVkZGRlMWUgMTAwNjQ0Ci0tLSBhL3NyYy9wb3J0 L3BnX2NyYzMyY19hcm12OC5jCisrKyBiL3NyYy9wb3J0L3BnX2NyYzMyY19hcm12OC5jCkBA IC0xNCw3ICsxNCw5IEBACiAgKi8KICNpbmNsdWRlICJjLmgiCiAKKyNpZm5kZWYgX01TQ19W RVIKICNpbmNsdWRlIDxhcm1fYWNsZS5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJwb3J0L3Bn X2NyYzMyYy5oIgogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Y19nZW5kZWYucGwgYi9z cmMvdG9vbHMvbXN2Y19nZW5kZWYucGwKaW5kZXggODY4YWFkNTFiMDkuLmM5MmM5NGM0Nzc1 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvbXN2Y19nZW5kZWYucGwKKysrIGIvc3JjL3Rvb2xz L21zdmNfZ2VuZGVmLnBsCkBAIC0xMTgsOSArMTE4LDkgQEAgc3ViIHdyaXRlZGVmCiAJewog CQlteSAkaXNkYXRhID0gJGRlZi0+eyRmfSBlcSAnZGF0YSc7CiAKLQkJIyBTdHJpcCB0aGUg bGVhZGluZyB1bmRlcnNjb3JlIGZvciB3aW4zMiwgYnV0IG5vdCB4NjQKKwkJIyBTdHJpcCB0 aGUgbGVhZGluZyB1bmRlcnNjb3JlIGZvciB3aW4zMiwgYnV0IG5vdCB4NjQgYW5kIGFhcmNo NjQKIAkJJGYgPX4gcy9eXy8vCi0JCSAgdW5sZXNzICgkYXJjaCBlcSAieDg2XzY0Iik7CisJ CSAgdW5sZXNzICgkYXJjaCBlcSAieDg2XzY0IiB8fCAkYXJjaCBlcSAiYWFyY2g2NCIpOwog CiAJCSMgRW1pdCBqdXN0IHRoZSBuYW1lIGlmIGl0J3MgYSBmdW5jdGlvbiBzeW1ib2wsIG9y IGVtaXQgdGhlIG5hbWUKIAkJIyBkZWNvcmF0ZWQgd2l0aCB0aGUgREFUQSBvcHRpb24gZm9y IHZhcmlhYmxlcy4KQEAgLTE0MSw3ICsxNDEsNyBAQCBzdWIgd3JpdGVkZWYKIHN1YiB1c2Fn ZQogewogCWRpZSgiVXNhZ2U6IG1zdmNfZ2VuZGVmLnBsIC0tYXJjaCA8YXJjaD4gLS1kZWZm aWxlIDxkZWZmaWxlPiAtLXRlbXBkaXIgPHRlbXBkaXI+IGZpbGVzLW9yLWRpcmVjdG9yaWVz XG4iCi0JCSAgLiAiICAgIGFyY2g6IHg4NiB8IHg4Nl82NFxuIgorCQkgIC4gIiAgICBhcmNo OiB4ODYgfCB4ODZfNjQgfCBhYXJjaDY0XG4iCiAJCSAgLiAiICAgIGRlZmZpbGU6IHBhdGgg b2YgdGhlIGdlbmVyYXRlZCBmaWxlXG4iCiAJCSAgLiAiICAgIHRlbXBkaXI6IGRpcmVjdG9y eSBmb3IgdGVtcG9yYXJ5IGZpbGVzXG4iCiAJCSAgLiAiICAgIGZpbGVzIG9yIGRpcmVjdG9y aWVzOiBvYmplY3QgZmlsZXMgb3IgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb2JqZWN0IGZpbGVz XG4iCkBAIC0xNTgsNyArMTU4LDcgQEAgR2V0T3B0aW9ucygKIAkndGVtcGRpcjpzJyA9PiBc JHRlbXBkaXIsKSBvciB1c2FnZSgpOwogCiB1c2FnZSgiYXJjaDogJGFyY2giKQotICB1bmxl c3MgKCRhcmNoIGVxICd4ODYnIHx8ICRhcmNoIGVxICd4ODZfNjQnKTsKKyAgdW5sZXNzICgk YXJjaCBlcSAneDg2JyB8fCAkYXJjaCBlcSAneDg2XzY0JyB8fCAkYXJjaCBlcSAnYWFyY2g2 NCcpOwogCiBteSBAZmlsZXM7CiAKLS0gCjIuNTIuMC53aW5kb3dzLjEKCg== --ad395a80d7e04727a658999d358e3981 Content-Disposition: attachment; filename="ConfigMSVC.ps1" Content-Type: application/octet-stream; name="ConfigMSVC.ps1" Content-Transfer-Encoding: base64 IyBBUk02NCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBTZXR1cCB3aXRoIEF1dG8tRGV0ZWN0 aW9uDQojIENvbmZpZ3VyZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBydW5zIE1lc29u IHNldHVwDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCiMgVmlzdWFsIFN0dWRpbyBhbmQgTVNWQyBBdXRvLURldGVjdGlvbg0KIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpmdW5jdGlvbiBGaW5k LVZpc3VhbFN0dWRpb1BhdGggew0KICAgIDwjDQogICAgLlNZTk9QU0lTDQogICAgTG9jYXRl cyB0aGUgVmlzdWFsIFN0dWRpbyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHVzaW5nIHZzd2hl cmUNCiAgICBXb3JrcyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAyMiwgMjAyNiwgYW5kIGxhdGVy DQogICAgIz4NCg0KICAgICMgdnN3aGVyZS5leGUgaXMgYWx3YXlzIGluIFByb2dyYW1GaWxl cyh4ODYpDQogICAgJHZzd2hlcmUgPSAiJHtlbnY6UHJvZ3JhbUZpbGVzKHg4Nil9XE1pY3Jv c29mdCBWaXN1YWwgU3R1ZGlvXEluc3RhbGxlclx2c3doZXJlLmV4ZSINCg0KICAgIGlmIChU ZXN0LVBhdGggJHZzd2hlcmUpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICMgR2V0 IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBWaXN1YWwgU3R1ZGlvDQogICAgICAgICAgICAkdnNQ YXRoID0gJiAkdnN3aGVyZSAtbGF0ZXN0IC1wcm9wZXJ0eSBpbnN0YWxsYXRpb25QYXRoIDI+ JG51bGwNCg0KICAgICAgICAgICAgaWYgKCR2c1BhdGggLWFuZCAoVGVzdC1QYXRoICR2c1Bh dGgpKSB7DQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAiRm91bmQgVmlzdWFsIFN0dWRp byBhdDogJHZzUGF0aCIgLUZvcmVncm91bmRDb2xvciBHcmVlbg0KICAgICAgICAgICAgICAg IHJldHVybiAkdnNQYXRoDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0 Y2ggew0KICAgICAgICAgICAgV3JpdGUtV2FybmluZyAidnN3aGVyZS5leGUgZm91bmQgYnV0 IGZhaWxlZCB0byBleGVjdXRlOiAkXyINCiAgICAgICAgfQ0KICAgIH0NCg0KICAgICMgRmFs bGJhY2s6IFNjYW4gdGhlIGVudGlyZSBWaXN1YWwgU3R1ZGlvIGRpcmVjdG9yeSB0cmVlDQog ICAgJHZzUm9vdCA9ICIke2VudjpQcm9ncmFtRmlsZXN9XE1pY3Jvc29mdCBWaXN1YWwgU3R1 ZGlvIg0KICAgIGlmIChUZXN0LVBhdGggJHZzUm9vdCkgew0KICAgICAgICBXcml0ZS1Ib3N0 ICJTZWFyY2hpbmcgZm9yIFZpc3VhbCBTdHVkaW8gaW5zdGFsbGF0aW9ucyBpbiAkdnNSb290 IiAtRm9yZWdyb3VuZENvbG9yIFllbGxvdw0KDQogICAgICAgICMgR2V0IHllYXIgZGlyZWN0 b3JpZXMgc29ydGVkIGJ5IG5ld2VzdCBmaXJzdCAoMTcgPSAyMDIyLCAxOCA9IDIwMjYsIGV0 Yy4pDQogICAgICAgICR5ZWFyRGlycyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJHZzUm9vdCAt RGlyZWN0b3J5IC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgU29ydC1PYmplY3Qg TmFtZSAtRGVzY2VuZGluZw0KDQogICAgICAgIGZvcmVhY2ggKCR5ZWFyRGlyIGluICR5ZWFy RGlycykgew0KICAgICAgICAgICAgIyBHZXQgZWRpdGlvbiBkaXJlY3RvcmllcyAoQ29tbXVu aXR5LCBQcm9mZXNzaW9uYWwsIEVudGVycHJpc2UpDQogICAgICAgICAgICAkZWRpdGlvbnMg PSBHZXQtQ2hpbGRJdGVtIC1QYXRoICR5ZWFyRGlyLkZ1bGxOYW1lIC1EaXJlY3RvcnkgLUVy cm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICAgICAgICAgIGZvcmVhY2ggKCRlZGl0 aW9uIGluICRlZGl0aW9ucykgew0KICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgaXQgaGFz IHRoZSBWQyB0b29scw0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggKEpvaW4tUGF0 aCAkZWRpdGlvbi5GdWxsTmFtZSAiVkNcVG9vbHNcTVNWQyIpKSB7DQogICAgICAgICAgICAg ICAgICAgIFdyaXRlLUhvc3QgIkZvdW5kIFZpc3VhbCBTdHVkaW8gYXQ6ICQoJGVkaXRpb24u RnVsbE5hbWUpIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuDQogICAgICAgICAgICAgICAgICAg IHJldHVybiAkZWRpdGlvbi5GdWxsTmFtZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIFdyaXRlLUVycm9yICJWaXN1YWwgU3R1 ZGlvIGluc3RhbGxhdGlvbiBub3QgZm91bmQuIg0KICAgIFdyaXRlLUVycm9yICJDaGVja2Vk OiAkdnN3aGVyZSAodnN3aGVyZS5leGUpIg0KICAgIFdyaXRlLUVycm9yICJDaGVja2VkOiAk e2VudjpQcm9ncmFtRmlsZXN9XE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXCINCiAgICBleGl0 IDENCn0NCg0KZnVuY3Rpb24gRmluZC1NU1ZDUGF0aCB7DQogICAgPCMNCiAgICAuU1lOT1BT SVMNCiAgICBMb2NhdGVzIHRoZSBNU1ZDIGNvbXBpbGVyIHRvb2xzZXQgYW5kIHJldHVybnMg dGhlIGxhdGVzdCB2ZXJzaW9uIHBhdGgNCiAgICAjPg0KICAgIHBhcmFtKFtzdHJpbmddJFZT UGF0aCkNCg0KICAgICRtc3ZSb290ID0gSm9pbi1QYXRoICRWU1BhdGggIlZDXFRvb2xzXE1T VkMiDQoNCiAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRtc3ZSb290KSkgew0KICAgICAgICBX cml0ZS1FcnJvciAiTVNWQyB0b29sc2V0IG5vdCBmb3VuZCBhdCAkbXN2Um9vdCINCiAgICAg ICAgZXhpdCAxDQogICAgfQ0KDQogICAgIyBHZXQgdGhlIGxhdGVzdCBNU1ZDIHZlcnNpb24g Zm9sZGVyDQogICAgJG1zdlZlcnNpb25zID0gR2V0LUNoaWxkSXRlbSAtUGF0aCAkbXN2Um9v dCAtRGlyZWN0b3J5IHwgU29ydC1PYmplY3QgTmFtZSAtRGVzY2VuZGluZw0KDQogICAgaWYg KCRtc3ZWZXJzaW9ucy5Db3VudCAtZXEgMCkgew0KICAgICAgICBXcml0ZS1FcnJvciAiTm8g TVNWQyB2ZXJzaW9ucyBmb3VuZCBpbiAkbXN2Um9vdCINCiAgICAgICAgZXhpdCAxDQogICAg fQ0KDQogICAgcmV0dXJuIEpvaW4tUGF0aCAkbXN2Um9vdCAkbXN2VmVyc2lvbnNbMF0uTmFt ZQ0KfQ0KDQpmdW5jdGlvbiBGaW5kLVdpbmRvd3NTREtWZXJzaW9uIHsNCiAgICA8Iw0KICAg IC5TWU5PUFNJUw0KICAgIERldGVjdHMgdGhlIFdpbmRvd3MgU0RLIHZlcnNpb24gZnJvbSB0 aGUgcmVnaXN0cnkNCiAgICAjPg0KICAgICRyZWdQYXRoID0gIkhLTE06XFNPRlRXQVJFXE1p Y3Jvc29mdFxXaW5kb3dzIEtpdHNcSW5zdGFsbGVkIFJvb3RzIg0KDQogICAgaWYgKFRlc3Qt UGF0aCAkcmVnUGF0aCkgew0KICAgICAgICAkc2RrUm9vdCA9IEdldC1JdGVtUHJvcGVydHkg LVBhdGggJHJlZ1BhdGggLU5hbWUgS2l0c1Jvb3QxMA0KICAgICAgICAkc2RrUm9vdCA9ICRz ZGtSb290LktpdHNSb290MTANCg0KICAgICAgICBpZiAoVGVzdC1QYXRoIChKb2luLVBhdGgg JHNka1Jvb3QgIkluY2x1ZGUiKSkgew0KICAgICAgICAgICAgIyBHZXQgdGhlIGxhdGVzdCBT REsgdmVyc2lvbiBmb2xkZXINCiAgICAgICAgICAgICR2ZXJzaW9ucyA9IEdldC1DaGlsZEl0 ZW0gLVBhdGggKEpvaW4tUGF0aCAkc2RrUm9vdCAiSW5jbHVkZSIpIC1EaXJlY3RvcnkgfA0K ICAgICAgICAgICAgICAgICAgICAgICAgV2hlcmUtT2JqZWN0IHsgJF8uTmFtZSAtbWF0Y2gg J15cZCtcLlxkK1wuXGQrXC5cZCskJyB9IHwNCiAgICAgICAgICAgICAgICAgICAgICAgIFNv cnQtT2JqZWN0IE5hbWUgLURlc2NlbmRpbmcNCg0KICAgICAgICAgICAgaWYgKCR2ZXJzaW9u cy5Db3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBAew0KICAgICAgICAg ICAgICAgICAgICBWZXJzaW9uID0gJHZlcnNpb25zWzBdLk5hbWUNCiAgICAgICAgICAgICAg ICAgICAgUGF0aCA9ICRzZGtSb290DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgV3JpdGUtRXJyb3IgIldpbmRvd3MgU0RLIG5v dCBmb3VuZCINCiAgICBleGl0IDENCn0NCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KIyBNYWluIFNldHVwDQojID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCldyaXRlLUhvc3QgIj09PSBEZXRlY3Rp bmcgVmlzdWFsIFN0dWRpbyBJbnN0YWxsYXRpb24gPT09IiAtRm9yZWdyb3VuZENvbG9yIEN5 YW4NCiR2c1BhdGggPSBGaW5kLVZpc3VhbFN0dWRpb1BhdGgNCldyaXRlLUhvc3QgIkZvdW5k IFZpc3VhbCBTdHVkaW8gYXQ6ICR2c1BhdGgiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCg0K V3JpdGUtSG9zdCAiYG49PT0gRGV0ZWN0aW5nIE1TVkMgVG9vbHNldCA9PT0iIC1Gb3JlZ3Jv dW5kQ29sb3IgQ3lhbg0KJG1zdlBhdGggPSBGaW5kLU1TVkNQYXRoIC1WU1BhdGggJHZzUGF0 aA0KV3JpdGUtSG9zdCAiRm91bmQgTVNWQyBhdDogJG1zdlBhdGgiIC1Gb3JlZ3JvdW5kQ29s b3IgR3JlZW4NCg0KV3JpdGUtSG9zdCAiYG49PT0gRGV0ZWN0aW5nIFdpbmRvd3MgU0RLID09 PSIgLUZvcmVncm91bmRDb2xvciBDeWFuDQokc2RrSW5mbyA9IEZpbmQtV2luZG93c1NES1Zl cnNpb24NCiR3aW5LaXRWZXJzaW9uID0gJHNka0luZm8uVmVyc2lvbg0KJHdpbktpdFBhdGgg PSAkc2RrSW5mby5QYXRoDQpXcml0ZS1Ib3N0ICJGb3VuZCBXaW5kb3dzIFNESyAkd2luS2l0 VmVyc2lvbiBhdDogJHdpbktpdFBhdGgiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCg0KIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBJbml0aWFs aXplIE1TVkMgRW52aXJvbm1lbnQgd2l0aCB2Y3ZhcnNhcm02NC5iYXQNCiMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KV3JpdGUtSG9zdCAiYG49 PT0gSW5pdGlhbGl6aW5nIE1TVkMgRW52aXJvbm1lbnQgPT09IiAtRm9yZWdyb3VuZENvbG9y IEN5YW4NCg0KJHZjdmFyc1BhdGggPSBKb2luLVBhdGggJHZzUGF0aCAiVkNcQXV4aWxpYXJ5 XEJ1aWxkXHZjdmFyc2FybTY0LmJhdCINCg0KaWYgKC1ub3QgKFRlc3QtUGF0aCAkdmN2YXJz UGF0aCkpIHsNCiAgICBXcml0ZS1FcnJvciAidmN2YXJzYXJtNjQuYmF0IG5vdCBmb3VuZCBh dCAkdmN2YXJzUGF0aCINCiAgICBleGl0IDENCn0NCg0KIyBEZXRlY3QgVmlzdWFsIFN0dWRp byB2ZXJzaW9uIGZyb20gcGF0aA0KJHZzVmVyc2lvbiA9IChTcGxpdC1QYXRoICR2c1BhdGgg LVBhcmVudCB8IFNwbGl0LVBhdGggLUxlYWYpDQpXcml0ZS1Ib3N0ICJEZXRlY3RlZCBWaXN1 YWwgU3R1ZGlvIHZlcnNpb246ICR2c1ZlcnNpb24iIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93 DQoNCiMgTWFwIFZTIGRpcmVjdG9yeSB0byB2ZXJzaW9uIG51bWJlciAoMTc9MjAyMiwgMTg9 MjAyNiwgZXRjLikNCiR2ZXJzaW9uTWFwID0gQHsNCiAgICAiMTciID0gIjE3LjAiDQogICAg IjE4IiA9ICIxOC4wIg0KICAgICIxOSIgPSAiMTkuMCINCn0NCiR2aXN1YWxTdHVkaW9WZXJz aW9uID0gJHZlcnNpb25NYXBbJHZzVmVyc2lvbl0NCmlmICgtbm90ICR2aXN1YWxTdHVkaW9W ZXJzaW9uKSB7DQogICAgJHZpc3VhbFN0dWRpb1ZlcnNpb24gPSAiJHZzVmVyc2lvbi4wIg0K fQ0KDQpXcml0ZS1Ib3N0ICJFeGVjdXRpbmc6IGAiJHZjdmFyc1BhdGhgIiIgLUZvcmVncm91 bmRDb2xvciBZZWxsb3cNCiRvdXRwdXQgPSBjbWQgL2MgIiIiJHZjdmFyc1BhdGgiIiAmJiBz ZXQiDQoNCiMgUGFyc2UgYW5kIHNldCBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20g dmN2YXJzYXJtNjQuYmF0DQpmb3JlYWNoICgkbGluZSBpbiAkb3V0cHV0KSB7DQogICAgaWYg KCRsaW5lIC1tYXRjaCAiXihbXj1dKyk9KC4qKSQiKSB7DQogICAgICAgICR2YXJOYW1lID0g JG1hdGNoZXNbMV0uVHJpbSgpDQogICAgICAgICR2YXJWYWx1ZSA9ICRtYXRjaGVzWzJdLlRy aW0oKQ0KDQogICAgICAgIGlmICgkdmFyTmFtZSAtYW5kICR2YXJWYWx1ZSkgew0KICAgICAg ICAgICAgU2V0LUl0ZW0gLUZvcmNlIC1QYXRoICJFTlY6XCR2YXJOYW1lIiAtVmFsdWUgJHZh clZhbHVlIDI+JG51bGwNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KIyBFeHBsaWNpdGx5IHNl dCByZXF1aXJlZCB2YXJpYWJsZXMgZm9yIE1lc29uDQokZW52OlZTSU5TVEFMTERJUiA9ICR2 c1BhdGgNCiRlbnY6VmlzdWFsU3R1ZGlvVmVyc2lvbiA9ICR2aXN1YWxTdHVkaW9WZXJzaW9u DQokZW52OlZDSU5TVEFMTERJUiA9ICRtc3ZQYXRoDQoNCiMgVmVyaWZ5IGNyaXRpY2FsIHZh cmlhYmxlcw0KJHJlcXVpcmVkVmFycyA9IEB7DQogICAgIlZTSU5TVEFMTERJUiIgPSAkdnNQ YXRoDQogICAgIlZpc3VhbFN0dWRpb1ZlcnNpb24iID0gJHZpc3VhbFN0dWRpb1ZlcnNpb24N CiAgICAiVkNJTlNUQUxMRElSIiA9ICRtc3ZQYXRoDQp9DQoNCldyaXRlLUhvc3QgImBuRW52 aXJvbm1lbnQgdmFyaWFibGVzIHNldDoiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCmZvcmVh Y2ggKCR2YXIgaW4gJHJlcXVpcmVkVmFycy5HZXRFbnVtZXJhdG9yKCkpIHsNCiAgICAkdmFs dWUgPSBHZXQtSXRlbSAtUGF0aCAiRU5WOlwkKCR2YXIuS2V5KSIgLUVycm9yQWN0aW9uIFNp bGVudGx5Q29udGludWUNCiAgICBpZiAoJHZhbHVlKSB7DQogICAgICAgIFdyaXRlLUhvc3Qg IiAgJCgkdmFyLktleSkgPSAkKCR2YWx1ZS5WYWx1ZSkiIC1Gb3JlZ3JvdW5kQ29sb3IgR3Jl ZW4NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIFdyaXRlLVdhcm5pbmcgIiAgJCgkdmFy LktleSkgbm90IHNldCEiDQogICAgfQ0KfQ0KDQpXcml0ZS1Ib3N0ICJNU1ZDIGVudmlyb25t ZW50IGluaXRpYWxpemVkIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuDQoNCiMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgQ29uZmlndXJlIEluY2x1 ZGUgUGF0aHMNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCg0KV3JpdGUtSG9zdCAiYG49PT0gQ29uZmlndXJpbmcgSW5jbHVkZSBQYXRocyA9PT0i IC1Gb3JlZ3JvdW5kQ29sb3IgQ3lhbg0KDQokaW5jbHVkZUxpc3QgPSBAKA0KICAgICIkbXN2 UGF0aFxpbmNsdWRlIiwNCiAgICAiJHdpbktpdFBhdGhcSW5jbHVkZVwkd2luS2l0VmVyc2lv blx1Y3J0IiwNCiAgICAiJHdpbktpdFBhdGhcSW5jbHVkZVwkd2luS2l0VmVyc2lvblx1bSIs DQogICAgIiR3aW5LaXRQYXRoXEluY2x1ZGVcJHdpbktpdFZlcnNpb25cc2hhcmVkIg0KICAg ICIkdmNwa2dSb290XGluc3RhbGxlZFxhcm02NC13aW5kb3dzXGluY2x1ZGUiDQopDQoNCiRl bnY6SU5DTFVERSA9ICRpbmNsdWRlTGlzdCAtam9pbiAiOyINCldyaXRlLUhvc3QgIklOQ0xV REUgcGF0aCBjb25maWd1cmVkIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuDQoNCiMgRHVtcCBJ TkNMVURFDQojJGVudjpJTkNMVURFIHwgRm9yRWFjaC1PYmplY3QgeyAkXy5TcGxpdCgnOycp IHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMjAgfQ0KDQojID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQojIENvbmZpZ3VyZSBMaWJyYXJ5IFBhdGhzDQoj ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCldyaXRl LUhvc3QgImBuPT09IENvbmZpZ3VyaW5nIExpYnJhcnkgUGF0aHMgPT09IiAtRm9yZWdyb3Vu ZENvbG9yIEN5YW4NCg0KJGxpYkxpc3QgPSBAKA0KICAgICIkbXN2UGF0aFxsaWJcYXJtNjQi LA0KICAgICIkd2luS2l0UGF0aFxMaWJcJHdpbktpdFZlcnNpb25cdWNydFxhcm02NCIsDQog ICAgIiR3aW5LaXRQYXRoXExpYlwkd2luS2l0VmVyc2lvblx1bVxhcm02NCINCiAgICAiJHZj cGtnUm9vdFxpbnN0YWxsZWRcYXJtNjQtd2luZG93c1xsaWIiDQopDQoNCiRlbnY6TElCID0g JGxpYkxpc3QgLWpvaW4gIjsiDQokZW52OkxJQlBBVEggPSAkZW52OkxJQg0KV3JpdGUtSG9z dCAiTElCIGFuZCBMSUJQQVRIIGNvbmZpZ3VyZWQiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4N Cg0KIyBEdW1wIExJQg0KIyRlbnY6TElCIHwgRm9yRWFjaC1PYmplY3QgeyAkXy5TcGxpdCgn OycpIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMjAgfQ0KDQojID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIENvbmZpZ3VyZSBQQVRIDQojID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCldyaXRlLUhvc3Qg ImBuPT09IENvbmZpZ3VyaW5nIFN5c3RlbSBQQVRIID09PSIgLUZvcmVncm91bmRDb2xvciBD eWFuDQoNCiRweXRob25QYXRoID0gIkM6XFB5dGhvbjMxNCINCiMkcHl0aG9uUGF0aCA9IEpv aW4tUGF0aCAkZW52OkxvY2FsQXBwRGF0YSAiUHJvZ3JhbXNcUHl0aG9uXFB5dGhvbjMxNCIN CiRweXRob25TY3JpcHRzID0gSm9pbi1QYXRoICRweXRob25QYXRoICJTY3JpcHRzIg0KJHB5 dGhvblVzZXJTY3JpcHRzID0gSm9pbi1QYXRoICRlbnY6QXBwRGF0YSAiUHl0aG9uXFB5dGhv bjMxNFxTY3JpcHRzIg0KDQokdmNwa2dSb290ID0gIkM6XHRvb2xzXHZjcGtnIg0KJGNvZGVJ bnNpZGVycyA9IEpvaW4tUGF0aCAkZW52OkxvY2FsQXBwRGF0YSAiUHJvZ3JhbXNcTWljcm9z b2Z0IFZTIENvZGUgSW5zaWRlcnNcYmluIg0KJHZzQ29kZSA9IEpvaW4tUGF0aCAkZW52Okxv Y2FsQXBwRGF0YSAiUHJvZ3JhbXNcTWljcm9zb2Z0IFZTIENvZGVcYmluIg0KDQojIFBlcmwg cGF0aHMgLSB0cnkgU3RyYXdiZXJyeSBQZXJsIGZpcnN0LCB0aGVuIEFjdGl2ZVBlcmwNCiRw ZXJsUGF0aCA9ICRudWxsDQokcGVybENhbmRpZGF0ZXMgPSBAKA0KICAgICJDOlxTdHJhd2Jl cnJ5XHBlcmxcYmluIiwNCiAgICAiJHtlbnY6UHJvZ3JhbUZpbGVzfVxTdHJhd2JlcnJ5XHBl cmxcYmluIiwNCiAgICAiJHtlbnY6UHJvZ3JhbUZpbGVzKHg4Nil9XFN0cmF3YmVycnlccGVy bFxiaW4iLA0KICAgICJDOlxQZXJsXGJpbiIsDQogICAgIiR7ZW52OlByb2dyYW1GaWxlc31c QWN0aXZlUGVybFxiaW4iDQopDQoNCmZvcmVhY2ggKCRjYW5kaWRhdGUgaW4gJHBlcmxDYW5k aWRhdGVzKSB7DQogICAgaWYgKFRlc3QtUGF0aCAkY2FuZGlkYXRlKSB7DQogICAgICAgICRw ZXJsUGF0aCA9ICRjYW5kaWRhdGUNCiAgICAgICAgV3JpdGUtSG9zdCAiRm91bmQgUGVybCBh dDogJHBlcmxQYXRoIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuDQogICAgICAgIGJyZWFrDQog ICAgfQ0KfQ0KDQppZiAoLW5vdCAkcGVybFBhdGgpIHsNCiAgICBXcml0ZS1XYXJuaW5nICJQ ZXJsIG5vdCBmb3VuZCBpbiBzdGFuZGFyZCBsb2NhdGlvbnMuIFBvc3RncmVTUUwgYnVpbGQg bWF5IGZhaWwuIg0KICAgIFdyaXRlLVdhcm5pbmcgIkluc3RhbGwgU3RyYXdiZXJyeSBQZXJs IGZyb20gaHR0cHM6Ly9zdHJhd2JlcnJ5cGVybC5jb20vIg0KfQ0KDQokcGF0aEFycmF5ID0g QCgNCiAgICAjIEFSTTY0IE1TVkMgY29tcGlsZXINCiAgICAiJG1zdlBhdGhcYmluXEhvc3RB Uk02NFxBUk02NCIsDQoNCiAgICAjIEFSTTY0IFB5dGhvbiAoQkVGT1JFIHN5c3RlbSBQeXRo b24gb3Igb3RoZXIgdG9vbHMpDQogICAgJHB5dGhvblBhdGgsDQogICAgJHB5dGhvblNjcmlw dHMsDQogICAgJHB5dGhvblVzZXJTY3JpcHRzLA0KDQogICAgIyBBZGQgUGVybCB0byBQQVRI DQogICAgJHBlcmxQYXRoLA0KDQogICAgIyBBUk02NCB2Y3BrZw0KICAgICIkdmNwa2dSb290 XGluc3RhbGxlZFxhcm02NC13aW5kb3dzXGJpbiIsDQoNCiAgICAjIFdpbmRvd3MgS2l0cyBB Uk02NA0KICAgICIkd2luS2l0UGF0aFxiaW5cJHdpbktpdFZlcnNpb25cYXJtNjQiLA0KDQog ICAgIyBTeXN0ZW0gcGF0aHMNCiAgICAiJGVudjpTeXN0ZW1Sb290XHN5c3RlbTMyIiwNCiAg ICAiJGVudjpTeXN0ZW1Sb290IiwNCiAgICAiJGVudjpTeXN0ZW1Sb290XFN5c3RlbTMyXFdi ZW0iLA0KICAgICIkZW52OlN5c3RlbVJvb3RcU3lzdGVtMzJcV2luZG93c1Bvd2VyU2hlbGxc djEuMCIsDQogICAgJGNvZGVJbnNpZGVycywNCiAgICAkdnNDb2RlLA0KDQogICAgIyBPcHRp b25hbCB0b29scyAoYnV0IGtlZXAgYXQgZW5kKQ0KICAgICIke2VudjpQcm9ncmFtRmlsZXN9 XEdpdFxjbWQiLA0KICAgICIke2VudjpQcm9ncmFtRmlsZXN9XE5lb3ZpbVxiaW4iLA0KICAg ICIke2VudjpQcm9ncmFtRmlsZXMoeDg2KX1cV2luZG93cyBLaXRzXDEwXFdpbmRvd3MgUGVy Zm9ybWFuY2UgVG9vbGtpdCIsDQogICAgIiR7ZW52OlByb2dyYW1EYXRhfVxjaG9jb2xhdGV5 XGJpbiIsDQogICAgIiR7ZW52OlByb2dyYW1GaWxlc31cQ01ha2VcYmluIiwNCiAgICAiQzpc dG9vbHMiDQopDQoNCiMgRmlsdGVyIG91dCBudWxsL2VtcHR5IGVudHJpZXMgYW5kIG5vbi1l eGlzdGVudCBwYXRocw0KJGVudjpQQVRIID0gKCRwYXRoQXJyYXkgfCBXaGVyZS1PYmplY3Qg eyAkXyAtYW5kIChUZXN0LVBhdGggJF8pIH0pIC1qb2luICI7Ig0KV3JpdGUtSG9zdCAiUEFU SCBjb25maWd1cmVkIiAtRm9yZWdyb3VuZENvbG9yIEdyZWVuDQoNCiMgRHVtcCBQQVRIDQoj JGVudjpQQVRIIHwgRm9yRWFjaC1PYmplY3QgeyAkXy5TcGxpdCgnOycpIHwgU2VsZWN0LU9i amVjdCAtRmlyc3QgMjAgfQ0KDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCiMgQ29uZmlndXJlIHZjcGtnIGFuZCBDTWFrZQ0KIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpXcml0ZS1Ib3N0ICJg bj09PSBDb25maWd1cmluZyB2Y3BrZyBhbmQgQ01ha2UgPT09IiAtRm9yZWdyb3VuZENvbG9y IEN5YW4NCg0KaWYgKFRlc3QtUGF0aCAkdmNwa2dSb290KSB7DQogICAgJGVudjpWQ1BLR19S T09UID0gJHZjcGtnUm9vdA0KICAgICRlbnY6Q01BS0VfUFJFRklYX1BBVEggPSAiJHZjcGtn Um9vdFxpbnN0YWxsZWRcYXJtNjQtd2luZG93cyINCg0KICAgICMgU2V0IFBLR19DT05GSUdf UEFUSCBmb3IgTWVzb24gdG8gZmluZCB2Y3BrZyBkZXBlbmRlbmNpZXMNCiAgICAkZW52OlBL R19DT05GSUdfUEFUSCA9ICIkdmNwa2dSb290XGluc3RhbGxlZFxhcm02NC13aW5kb3dzXGxp Ylxwa2djb25maWciDQoNCiAgICAjIEFkZCB2Y3BrZyB0b29scyB0byBQQVRIIChpbmNsdWRl cyBwa2ctY29uZmlnLCBuaW5qYSBmcm9tIHZjcGtnLXRvb2wtbWVzb24sIGV0Yy4pDQogICAg JHZjcGtnQmluUGF0aCA9ICIkdmNwa2dSb290XGluc3RhbGxlZFxhcm02NC13aW5kb3dzXGJp biINCiAgICAkdmNwa2dUb29sc1BhdGggPSAiJHZjcGtnUm9vdFx0b29scyINCg0KICAgIGlm ICgkdmNwa2dCaW5QYXRoIC1ub3RpbiAkZW52OlBBVEguU3BsaXQoIjsiKSkgew0KICAgICAg ICAkZW52OlBBVEggPSAiJHZjcGtnQmluUGF0aDskZW52OlBBVEgiDQogICAgfQ0KDQogICAg aWYgKCR2Y3BrZ1Rvb2xzUGF0aCAtbm90aW4gJGVudjpQQVRILlNwbGl0KCI7IikpIHsNCiAg ICAgICAgJGVudjpQQVRIID0gIiR2Y3BrZ1Rvb2xzUGF0aDskZW52OlBBVEgiDQogICAgfQ0K DQogICAgV3JpdGUtSG9zdCAidmNwa2cgY29uZmlndXJlZDoiIC1Gb3JlZ3JvdW5kQ29sb3Ig R3JlZW4NCiAgICBXcml0ZS1Ib3N0ICIgIFZDUEtHX1JPT1QgPSAkZW52OlZDUEtHX1JPT1Qi IC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCiAgICBXcml0ZS1Ib3N0ICIgIENNQUtFX1BSRUZJ WF9QQVRIID0gJGVudjpDTUFLRV9QUkVGSVhfUEFUSCIgLUZvcmVncm91bmRDb2xvciBHcmVl bg0KICAgIFdyaXRlLUhvc3QgIiAgUEtHX0NPTkZJR19QQVRIID0gJGVudjpQS0dfQ09ORklH X1BBVEgiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCiAgICBXcml0ZS1Ib3N0ICIgIEFkZGVk IHRvIFBBVEg6ICR2Y3BrZ0JpblBhdGgiIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4NCn0NCmVs c2Ugew0KICAgIFdyaXRlLVdhcm5pbmcgInZjcGtnIG5vdCBmb3VuZCBhdCAkdmNwa2dSb290 IC0gc2tpcHBpbmcgdmNwa2cgY29uZmlndXJhdGlvbiINCn0NCg0KIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBSdW4gTWVzb24gU2V0dXANCiMg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KV3JpdGUt SG9zdCAiYG49PT0gUnVubmluZyBNZXNvbiBTZXR1cCA9PT0iIC1Gb3JlZ3JvdW5kQ29sb3Ig Q3lhbg0KDQokbWVzb25CdWlsZERpciA9ICJidWlsZCINCiRtZXNvblByZWZpeCA9ICIke2Vu djpQcm9ncmFtRmlsZXN9XHBvc3RncmVzcWwiDQoNCiMgVXNlIG5pbmphIGJhY2tlbmQgaW5z dGVhZCBvZiB2cywgd2hpY2ggd29ya3MgYmV0dGVyIHdpdGggbmV3ZXIgTVNWQw0KJG1lc29u QXJncyA9IEAoDQogICAgInNldHVwIg0KICAgICRtZXNvbkJ1aWxkRGlyDQogICAgIi0tcmVj b25maWd1cmUiDQojICAgICItLXZzZW52Ig0KIyAgICAiLS1iYWNrZW5kIiwgInZzIg0KICAg ICItLWJhY2tlbmQiLCAibmluamEiDQogICAgIi0tcHJlZml4PSRtZXNvblByZWZpeCINCiAg ICAiLS1idWlsZHR5cGU9ZGVidWdvcHRpbWl6ZWQiDQogICAgIi1EcGxwZXJsPWRpc2FibGVk Ig0KICAgICItRGV4dHJhX2xpYl9kaXJzPSRleHRyYUxpYkRpciINCiAgICAiLURleHRyYV9p bmNsdWRlX2RpcnM9JGV4dHJhSW5jbHVkZURpciINCiAgICAiLURwa2dfY29uZmlnX3BhdGg9 JGVudjpQS0dfQ09ORklHX1BBVEgiDQopDQoNCldyaXRlLUhvc3QgIkV4ZWN1dGluZzogbWVz b24gJCgkbWVzb25BcmdzIC1qb2luICcgJykiIC1Gb3JlZ3JvdW5kQ29sb3IgWWVsbG93DQpt ZXNvbiBAbWVzb25BcmdzDQo= --ad395a80d7e04727a658999d358e3981--