From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8149 invoked by alias); 16 Sep 2016 10:19:27 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 21928 Received: (qmail 29518 invoked from network); 16 Sep 2016 10:19:26 -0000 X-Qmail-Scanner-Diagnostics: from mail-qt0-f178.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(209.85.216.178):SA:0(0.0/5.0):. Processed in 0.803914 secs); 16 Sep 2016 10:19:26 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM,SPF_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: |parse.zsh|toparse.zsh| X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.216.178 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=pJYEAFfFnMmGD0+wiIuCVrrz2tAMNpintd12IVTBl4Q=; b=ipMJ6sO84SeEt6vAMt1fR/rZMQHCxoBJ7qVB35qhMU+0PeHxYCgXIgHuYuYD5PNiu2 Mu+RIDU7B2wY9oofWbcLu68/Ti1Ka1ZxgcfC8ogAo8KpLBte23nRL7ZSUZ55BDTqP25a jGYbYicEeXqFDxce82NMqFt4Nhb/9nxxAIEoZQlwlOjJ8H8FytgKlU5Kb41GYSbnQsdK P1GlA1qAOEIWaaXL6DCRXBiU53hf/fp45igUqDLHuvhscf5R9q71vEf0/L1y/26byYlS rgxhKn6iacTJqzu1kf3E1nXoBlsoBUwJeMimH4GwVhkkYTUBO4c3cCtOuf0wt8eHGfAe L/MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=pJYEAFfFnMmGD0+wiIuCVrrz2tAMNpintd12IVTBl4Q=; b=gtIgHKgOMRLiYRbQRr8PswvcBQHvY0CUumBLYb7uM2r0NGMO1zcYLMisZpQNe+Ab3p 9bTVUhUoz49aQWoHWXvYRITvGv1Xud8wsNIhAgazDuSWZJ4K2miJOJGgQLoDfbrFCia9 /Prx8m7DOZChCD5pTc7Lz09EpJJGYuh3HsT9Ly40INnUy12jybBov7vCSK2wwBiDNjL7 n/NN3lrNookGhWEz+/RsqZmZpKbEj28OO1CG6lR9OmLso0JTUJlbEvj04KND4xNMxFdN 5qCCnEcudCmS6SUrrBo5ozjQBudMXlUyjyntT4G+lPViDCMjmws788MF4W9MIEM60UDI pXXA== X-Gm-Message-State: AE9vXwPxPFEcX4s/FEyFdhpN5skvIu2IFUEAM0x7Tcfo3YGDDLK6NnHcUEc5I457orE38t1x5QdNfq+PLG/utA== X-Received: by 10.237.36.187 with SMTP id t56mr14786488qtc.125.1474021159498; Fri, 16 Sep 2016 03:19:19 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: From: Sebastian Gniazdowski Date: Fri, 16 Sep 2016 12:18:58 +0200 Message-ID: Subject: Re: Performance numbers on "if [" vs. "[" alone vs. "if [[" vs. "[[" alone To: Zsh Users Content-Type: multipart/mixed; boundary=001a113f3b7c9d4e07053c9d4b8d --001a113f3b7c9d4e07053c9d4b8d Content-Type: text/plain; charset=UTF-8 I've replaced near all if [[ ]] calls with [[ ]] in zsh-syntax-highlighting's main-highlighter.zsh, and no performance was gained. So unless there's a tight loop, if [[ doesn't slow down when compared to [[ alone. BTW. Running attached parse.zsh on toparse.zsh with zsh-5.2 in shebang produces following difference in generated region_highlight, to /bin/zsh (OS X 5.0.8): 439c439 < 3878 3885 fg=yellow --- > 3878 3885 fg=green The same difference for 5.1.1, 5.1. Zsh-5.0.8-dev-0 doesn't produce the difference, and 5.0.8-dev-1 produces it, so apparently that's where the difference starts appearing, compared to OS X 5.0.8 /bin/zsh. Best regards, Sebastian Gniazdowski --001a113f3b7c9d4e07053c9d4b8d Content-Type: text/plain; charset=US-ASCII; name="brack_alone.diff" Content-Disposition: attachment; filename="brack_alone.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_it5lwib00 ZGlmZiAtLWdpdCBhL2hpZ2hsaWdodGVycy9tYWluL21haW4taGlnaGxpZ2h0ZXIuenNoIGIvaGln aGxpZ2h0ZXJzL21haW4vbWFpbi1oaWdobGlnaHRlci56c2gKaW5kZXggNmRmNjcxZS4uOGEwZDY4 ZCAxMDA2NDQKLS0tIGEvaGlnaGxpZ2h0ZXJzL21haW4vbWFpbi1oaWdobGlnaHRlci56c2gKKysr IGIvaGlnaGxpZ2h0ZXJzL21haW4vbWFpbi1oaWdobGlnaHRlci56c2gKQEAgLTkyLDkgKzkyLDcg QEAgX3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCgpIHsKIF96c2hfaGln aGxpZ2h0X21haW5fX3R5cGUoKSB7CiAgIGlmICgoICQrX3pzaF9oaWdobGlnaHRfbWFpbl9fY29t bWFuZF90eXBlX2NhY2hlICkpOyB0aGVuCiAgICAgUkVQTFk9JF96c2hfaGlnaGxpZ2h0X21haW5f X2NvbW1hbmRfdHlwZV9jYWNoZVsoZSkkMV0KLSAgICBpZiBbWyAtbiAiJFJFUExZIiBdXTsgdGhl bgotICAgICAgcmV0dXJuCi0gICAgZmkKKyAgICBbWyAtbiAiJFJFUExZIiBdXSAmJiByZXR1cm4K ICAgZmkKICAgaWYgKCggJCNvcHRpb25zX3RvX3NldCApKTsgdGhlbgogICAgIHNldG9wdCBsb2Nh bG9wdGlvbnMgJG9wdGlvbnNfdG9fc2V0OwpAQCAtMjg5LDE1ICsyODcsMTMgQEAgX3pzaF9oaWdo bGlnaHRfaGlnaGxpZ2h0ZXJfbWFpbl9wYWludCgpCiAgICAgIyB0aGUgc3RyaW5nJ3MgY29sb3Iu CiAgICAgaW50ZWdlciBhbHJlYWR5X2FkZGVkPTAKICAgICBzdHlsZT11bmtub3duLXRva2VuCi0g ICAgaWYgW1sgJHRoaXNfd29yZCA9PSAqJzpzdGFydDonKiBdXTsgdGhlbgorICAgIFtbICR0aGlz X3dvcmQgPT0gKic6c3RhcnQ6JyogXV0gJiYgewogICAgICAgaW5fYXJyYXlfYXNzaWdubWVudD1m YWxzZQotICAgICAgaWYgW1sgJGFyZyA9PSAnbm9nbG9iJyBdXTsgdGhlbgotICAgICAgICBoaWdo bGlnaHRfZ2xvYj1mYWxzZQotICAgICAgZmkKLSAgICBmaQorICAgICAgW1sgJGFyZyA9PSAnbm9n bG9iJyBdXSAmJiBoaWdobGlnaHRfZ2xvYj1mYWxzZQorICAgIH0KIAogICAgICMgQ29tcHV0ZSB0 aGUgbmV3ICRzdGFydF9wb3MgYW5kICRlbmRfcG9zLCBza2lwcGluZyBvdmVyIHdoaXRlc3BhY2Ug aW4gJGJ1Zi4KLSAgICBpZiBbWyAkYXJnID09ICc7JyBdXSA7IHRoZW4KKyAgICBbWyAkYXJnID09 ICc7JyBdXSAmJiB7CiAgICAgICAjIFdlJ3JlIGxvb2tpbmcgZm9yIGVpdGhlciBhIHNlbWljb2xv biBvciBhIG5ld2xpbmUsIHdoaWNoZXZlciBjb21lcwogICAgICAgIyBmaXJzdC4gIEJvdGggb2Yg dGhlc2UgYXJlIHJlbmRlcmVkIGFzIGEgIjsiIChTRVBFUikgYnkgdGhlICR7KHopLi59CiAgICAg ICAjIGZsYWcuCkBAIC0zMTAsMTEgKzMwNiwxMSBAQCBfenNoX2hpZ2hsaWdodF9oaWdobGlnaHRl cl9tYWluX3BhaW50KCkKICAgICAgIGludGVnZXIgb2Zmc2V0PSQoKCAke3Byb2NfYnVmWyhpKSRu ZWVkbGVdfSAtIDEgKSkKICAgICAgICgoIHN0YXJ0X3BvcyArPSBvZmZzZXQgKSkKICAgICAgICgo IGVuZF9wb3MgPSBzdGFydF9wb3MgKyAkI2FyZyApKQotICAgIGVsc2UKKyAgICB9IHx8IHsKICAg ICAgIGludGVnZXIgb2Zmc2V0PSQoKChsZW4tc3RhcnRfcG9zKS0keyMke3Byb2NfYnVmIyMoW1s6 c3BhY2U6XV18XFxbWzpzcGFjZTpdXSkjfX0pKQogICAgICAgKChzdGFydF9wb3MrPW9mZnNldCkp CiAgICAgICAoKGVuZF9wb3M9JHN0YXJ0X3BvcyskeyNhcmd9KSkKLSAgICBmaQorICAgIH0KIAog ICAgICMgQ29tcHV0ZSB0aGUgbmV3ICRwcm9jX2J1Zi4gV2UgYWR2YW5jZSBpdAogICAgICMgKGNo b3Agb2ZmIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nKQpAQCAtMzM4LDMzICszMzQsMjMg QEAgX3pzaF9oaWdobGlnaHRfaGlnaGxpZ2h0ZXJfbWFpbl9wYWludCgpCiAgICAgIyBIYW5kbGUg dGhlIElOVEVSQUNUSVZFX0NPTU1FTlRTIG9wdGlvbi4KICAgICAjCiAgICAgIyBXZSB1c2UgdGhl IChaK2MrKSBmbGFnIHNvIHRoZSBlbnRpcmUgY29tbWVudCBpcyBwcmVzZW50ZWQgYXMgb25lIHRv a2VuIGluICRhcmcuCi0gICAgaWYgW1sgLW4gJHtpbnRlcmFjdGl2ZV9jb21tZW50cysnc2V0J30g JiYgJGFyZ1sxXSA9PSAkaGlzdGNoYXJzWzNdIF1dOyB0aGVuCi0gICAgICBpZiBbWyAkdGhpc193 b3JkID09ICooJzpyZWd1bGFyOid8JzpzdGFydDonKSogXV07IHRoZW4KLSAgICAgICAgc3R5bGU9 Y29tbWVudAotICAgICAgZWxzZQotICAgICAgICBzdHlsZT11bmtub3duLXRva2VuICMgcHJlbWF0 dXJlbHkgdGVybWluYXRlZAotICAgICAgZmkKKyAgICBbWyAtbiAke2ludGVyYWN0aXZlX2NvbW1l bnRzKydzZXQnfSAmJiAkYXJnWzFdID09ICRoaXN0Y2hhcnNbM10gXV0gJiYgeworICAgICAgW1sg JHRoaXNfd29yZCA9PSAqKCc6cmVndWxhcjonfCc6c3RhcnQ6JykqIF1dICYmIHN0eWxlPWNvbW1l bnQgfHwgc3R5bGU9dW5rbm93bi10b2tlbiAjIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQKICAgICAg IF96c2hfaGlnaGxpZ2h0X21haW5fYWRkX3JlZ2lvbl9oaWdobGlnaHQgJHN0YXJ0X3BvcyAkZW5k X3BvcyAkc3R5bGUKICAgICAgIGFscmVhZHlfYWRkZWQ9MQogICAgICAgY29udGludWUKLSAgICBm aQorICAgIH0KIAogICAgICMgQW5hbHlzZSB0aGUgY3VycmVudCB3b3JkLgotICAgIGlmIF96c2hf aGlnaGxpZ2h0X21haW5fX2lzX3JlZGlyZWN0aW9uICRhcmcgOyB0aGVuCi0gICAgICAjIEEgJzwn IG9yICc+JywgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBkaWdpdAotICAgICAgaW5fcmVkaXJlY3Rp b249MgotICAgIGZpCisgICAgIyBBICc8JyBvciAnPicsIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEg ZGlnaXQKKyAgICBfenNoX2hpZ2hsaWdodF9tYWluX19pc19yZWRpcmVjdGlvbiAkYXJnICYmIGlu X3JlZGlyZWN0aW9uPTIKIAogICAgICMgU3BlY2lhbC1jYXNlIHRoZSBmaXJzdCB3b3JkIGFmdGVy ICdzdWRvJy4KLSAgICBpZiAoKCAhIGluX3JlZGlyZWN0aW9uICkpOyB0aGVuCi0gICAgICBpZiBb WyAkdGhpc193b3JkID09IConOnN1ZG9fb3B0OicqIF1dICYmIFtbICRhcmcgIT0gLSogXV07IHRo ZW4KLSAgICAgICAgdGhpc193b3JkPSR7dGhpc193b3JkLy86c3Vkb19vcHQ6L30KLSAgICAgIGZp Ci0gICAgZmkKKyAgICAoKCAhIGluX3JlZGlyZWN0aW9uICkpICYmIFtbICR0aGlzX3dvcmQgPT0g Kic6c3Vkb19vcHQ6JyogXV0gJiYgW1sgJGFyZyAhPSAtKiBdXSAmJiB0aGlzX3dvcmQ9JHt0aGlz X3dvcmQvLzpzdWRvX29wdDovfQogCiAgICAgIyBQYXJzZSB0aGUgc3VkbyBjb21tYW5kIGxpbmUK LSAgICBpZiAoKCAhIGluX3JlZGlyZWN0aW9uICkpOyB0aGVuCi0gICAgICBpZiBbWyAkdGhpc193 b3JkID09IConOnN1ZG9fb3B0OicqIF1dOyB0aGVuCisgICAgKCggISBpbl9yZWRpcmVjdGlvbiAp KSAmJiB7CisgICAgICBbWyAkdGhpc193b3JkID09IConOnN1ZG9fb3B0OicqIF1dICYmIHsKICAg ICAgICAgY2FzZSAiJGFyZyIgaW4KICAgICAgICAgICAjIEZsYWcgdGhhdCByZXF1aXJlcyBhbiBh cmd1bWVudAogICAgICAgICAgICctJ1tDZ3BydHVdKSB0aGlzX3dvcmQ9JHt0aGlzX3dvcmQvLzpz dGFydDovfTsKQEAgLTM3NSwyMiArMzYxLDIxIEBAIF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdodGVy X21haW5fcGFpbnQoKQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3dvcmQrPSc6c3Vkb19v cHQ6Jzs7CiAgICAgICAgICAgKikgICAgICAgICAgIDs7CiAgICAgICAgIGVzYWMKLSAgICAgIGVs aWYgW1sgJHRoaXNfd29yZCA9PSAqJzpzdWRvX2FyZzonKiBdXTsgdGhlbgotICAgICAgICBuZXh0 X3dvcmQrPSc6c3Vkb19vcHQ6JwotICAgICAgICBuZXh0X3dvcmQrPSc6c3RhcnQ6JwotICAgICAg ZmkKLSAgIGZpCisgICAgICB9IHx8IHsKKyAgICAgICAgW1sgJHRoaXNfd29yZCA9PSAqJzpzdWRv X2FyZzonKiBdXSAmJiBuZXh0X3dvcmQrPSc6c3Vkb19vcHQ6JyAmJiBuZXh0X3dvcmQrPSc6c3Rh cnQ6JworICAgICAgfQorICB9CiAKICAgICMgVGhlIEdyZWF0IEZvcms6IGlzIHRoaXMgYSBjb21t YW5kIHdvcmQ/ICBJcyB0aGlzIGEgbm9uLWNvbW1hbmQgd29yZD8KLSAgIGlmIFtbICR0aGlzX3dv cmQgPT0gKic6c3RhcnQ6JyogXV0gJiYgKCggaW5fcmVkaXJlY3Rpb24gPT0gMCApKTsgdGhlbiAj ICRhcmcgaXMgdGhlIGNvbW1hbmQgd29yZAotICAgICBpZiBbWyAtbiAkeyhNKVpTSF9ISUdITElH SFRfVE9LRU5TX1BSRUNPTU1BTkRTOiMiJGFyZyJ9IF1dOyB0aGVuCi0gICAgICBzdHlsZT1wcmVj b21tYW5kCi0gICAgIGVsaWYgW1sgIiRhcmciID0gInN1ZG8iIF1dOyB0aGVuCisgICBbWyAkdGhp c193b3JkID09IConOnN0YXJ0OicqIF1dICYmICgoIGluX3JlZGlyZWN0aW9uID09IDAgKSkgJiYg eworICAgICBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9LRU5TX1BSRUNPTU1BTkRTOiMiJGFy ZyJ9IF1dICYmIHsKICAgICAgIHN0eWxlPXByZWNvbW1hbmQKLSAgICAgIG5leHRfd29yZD0ke25l eHRfd29yZC8vOnJlZ3VsYXI6L30KLSAgICAgIG5leHRfd29yZCs9JzpzdWRvX29wdDonCi0gICAg ICBuZXh0X3dvcmQrPSc6c3RhcnQ6JwotICAgICBlbHNlCisgICAgIH0gfHwgeyBbWyAiJGFyZyIg PSAic3VkbyIgXV0gJiYgeworICAgICAgICAgICAgICBzdHlsZT1wcmVjb21tYW5kCisgICAgICAg ICAgICAgIG5leHRfd29yZD0ke25leHRfd29yZC8vOnJlZ3VsYXI6L30KKyAgICAgICAgICAgICAg bmV4dF93b3JkKz0nOnN1ZG9fb3B0OicKKyAgICAgICAgICAgICAgbmV4dF93b3JkKz0nOnN0YXJ0 OicKKyAgICAgfSB8fCB7CiAgICAgICBfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hsaWdodGVyX2V4 cGFuZF9wYXRoICRhcmcKICAgICAgIGxvY2FsIGV4cGFuZGVkX2FyZz0iJFJFUExZIgogICAgICAg X3pzaF9oaWdobGlnaHRfbWFpbl9fdHlwZSAke2V4cGFuZGVkX2FyZ30KQEAgLTQwNCwxMyArMzg5 LDEwIEBAIF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdodGVyX21haW5fcGFpbnQoKQogICAgICAgICAj IHBhcmFtZXRlcnMgdGhhdCByZWZlciB0byBjb21tYW5kcywgZnVuY3Rpb25zLCBhbmQgYnVpbHRp bnMuCiAgICAgICAgIGxvY2FsIC1hIG1hdGNoIG1iZWdpbiBtZW5kCiAgICAgICAgIGxvY2FsIE1B VENIOyBpbnRlZ2VyIE1CRUdJTiBNRU5ECi0gICAgICAgIGlmIFtbICRyZXMgPT0gbm9uZSBdXSAm JiAoKCAkeytwYXJhbWV0ZXJzfSApKSAmJgotICAgICAgICAgICBbWyAke2FyZ1sxXX0gPT0gXCQg XV0gJiYgW1sgJHthcmc6MX0gPX4gXihbQS1aYS16X11bQS1aYS16MC05X10qfFswLTldKykkIF1d ICYmCi0gICAgICAgICAgICgoICR7K3BhcmFtZXRlcnNbJHtNQVRDSH1dfSApKQotICAgICAgICAg ICB0aGVuCisgICAgICAgIFtbICRyZXMgPT0gbm9uZSBdXSAmJiAoKCAkeytwYXJhbWV0ZXJzfSAp KSAmJiBbWyAke2FyZ1sxXX0gPT0gXCQgXV0gJiYgW1sgJHthcmc6MX0gPX4gXihbQS1aYS16X11b QS1aYS16MC05X10qfFswLTldKykkIF1dICYmICgoICR7K3BhcmFtZXRlcnNbJHtNQVRDSH1dfSAp KSAmJiB7CiAgICAgICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9fdHlwZSAkeyhQKU1BVENIfQog ICAgICAgICAgIHJlcz0kUkVQTFkKLSAgICAgICAgZmkKKyAgICAgICAgfQogICAgICAgfQogICAg ICAgY2FzZSAkcmVzIGluCiAgICAgICAgIHJlc2VydmVkKSAgICAgICBzdHlsZT1yZXNlcnZlZC13 b3JkOzsKQEAgLTQyOSwxNCArNDExLDEyIEBAIF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdodGVyX21h aW5fcGFpbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLSBUaGUgY29tbW9uIGNh c2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCopIDo7OwogICAgICAgICAgICAgICAg ICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIGluc2FuZV9h bGlhcyApKTsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXVua25vd24t dG9rZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAoKCBpbnNhbmVfYWxpYXMgKSkgJiYgc3R5bGU9dW5rbm93bi10b2tlbiB8fCB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9YWxpYXMKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfenNoX2hpZ2hsaWdodF9tYWluX19yZXNvbHZlX2FsaWFzICRhcmcKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBhbGlhc190YXJnZXQ9IiRSRVBMWSIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9LRU5TX1BS RUNPTU1BTkRTOiMiJGFsaWFzX3RhcmdldCJ9ICYmIC16ICR7KE0pWlNIX0hJR0hMSUdIVF9UT0tF TlNfUFJFQ09NTUFORFM6IyIkYXJnIn0gXV0gJiYgWlNIX0hJR0hMSUdIVF9UT0tFTlNfUFJFQ09N TUFORFMrPSgkYXJnKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICA7OwogICAgICAgICBidWlsdGluKSAgICAgICAgc3R5bGU9YnVpbHRpbjs7CkBA IC00NTcsMTMgKzQzNyw5IEBAIF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdodGVyX21haW5fcGFpbnQo KQogICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBbWyAkYXJnWzAsMV0gPT0gJGhpc3RjaGFy c1syLDJdIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPWhpc3Rvcnkt ZXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIFtbIC1uICR7KE0pWlNIX0hJ R0hMSUdIVF9UT0tFTlNfQ09NTUFORFNFUEFSQVRPUjojIiRhcmcifSBdXTsgdGhlbgotICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiBbWyAkdGhpc193b3JkID09IConOnJlZ3VsYXI6JyogXV07 IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1sgJHRoaXNfd29yZCA9PSAqJzpyZWd1 bGFyOicqIF1dICYmIHN0eWxlPWNvbW1hbmRzZXBhcmF0b3IgfHwgc3R5bGU9dW5rbm93bi10b2tl bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBoaWdobGlnaHRzIGVtcHR5IGNv bW1hbmRzIChzZW1pY29sb24gZm9sbG93cyBub3RoaW5nKSBhcyBhbiBlcnJvci4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFpzaCBhY2NlcHRzIHRoZW0sIHRob3VnaC4KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHlsZT1jb21tYW5kc2VwYXJhdG9yCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT11bmtu b3duLXRva2VuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAg ICAgICAgICBlbGlmICgoIGluX3JlZGlyZWN0aW9uID09IDIgKSk7IHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3R5bGU9cmVkaXJlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAg IGVsaWYgW1sgJGFyZ1sxLDJdID09ICcoKCcgXV07IHRoZW4KQEAgLTQ3OSwzMSArNDU1LDI2IEBA IF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdodGVyX21haW5fcGFpbnQoKQogICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHlsZT1yZXNlcnZlZC13b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF96c2hfaGlnaGxpZ2h0X21haW5fYWRkX3JlZ2lvbl9oaWdobGlnaHQgJHN0YXJ0X3BvcyAkKChz dGFydF9wb3MgKyAyKSkgJHN0eWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlf YWRkZWQ9MQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkYXJnWy0yLC0xXSA9PSAn KSknIF1dOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbICRhcmdbLTIsLTFdID09 ICcpKScgXV0gJiYgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF96c2hfaGlnaGxpZ2h0 X21haW5fYWRkX3JlZ2lvbl9oaWdobGlnaHQgJCgoZW5kX3BvcyAtIDIpKSAkZW5kX3BvcyAkc3R5 bGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5X2FkZGVkPTEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgZWxpZiBbWyAkYXJnID09ICcoKScgfHwgJGFyZyA9PSAkJ1x4Mjgn IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5vbnltb3VzIGZ1bmN0aW9u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Vic2hlbGwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3R5bGU9cmVzZXJ2ZWQtd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hs aWdodGVyX2NoZWNrX3BhdGg7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls ZT0kUkVQTFkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0eWxlPXVua25vd24tdG9rZW4KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9oaWdo bGlnaHRlcl9jaGVja19wYXRoICYmIHN0eWxlPSRSRVBMWSB8fCBzdHlsZT11bmtub3duLXRva2Vu CiAgICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICAgOzsK ICAgICAgICAgKikgICAgICAgICAgICAgIF96c2hfaGlnaGxpZ2h0X21haW5fYWRkX3JlZ2lvbl9o aWdobGlnaHQgJHN0YXJ0X3BvcyAkZW5kX3BvcyBjb21tYW5kdHlwZWZyb210aGVmdXR1cmUtJHJl cwogICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeV9hZGRlZD0xCiAgICAgICAgICAgICAg ICAgICAgICAgICA7OwogICAgICAgZXNhYwotICAgICBmaQotICAgZmkKLSAgIGlmICgoICEgYWxy ZWFkeV9hZGRlZCApKSAmJiBbWyAkc3R5bGUgPT0gdW5rbm93bi10b2tlbiBdXSAmJiAjIG5vdCBo YW5kbGVkIGJ5IHRoZSAnY29tbWFuZCB3b3JkJyBjb2RlcGF0aAotICAgICAgeyAoKCBpbl9yZWRp cmVjdGlvbiApKSB8fCBbWyAkdGhpc193b3JkID09IConOnJlZ3VsYXI6JyogXV0gfHwgW1sgJHRo aXNfd29yZCA9PSAqJzpzdWRvX29wdDonKiBdXSB8fCBbWyAkdGhpc193b3JkID09IConOnN1ZG9f YXJnOicqIF1dIH0KLSAgIHRoZW4gIyAkYXJnIGlzIGEgbm9uLWNvbW1hbmQgd29yZAorICAgICB9 CisgICAgIH0KKyAgIH0KKyAgICgoICEgYWxyZWFkeV9hZGRlZCApKSAmJiBbWyAkc3R5bGUgPT0g dW5rbm93bi10b2tlbiBdXSAmJiB7ICgoIGluX3JlZGlyZWN0aW9uICkpIHx8IFtbICR0aGlzX3dv cmQgPT0gKic6cmVndWxhcjonKiBdXSB8fCBbWyAkdGhpc193b3JkID09IConOnN1ZG9fb3B0Oicq IF1dIHx8IFtbICR0aGlzX3dvcmQgPT0gKic6c3Vkb19hcmc6JyogXV0gfSAmJiB7CiAgICAgICBj YXNlICRhcmcgaW4KICAgICAgICAgJCdceDI5JykgIyBzdWJzaGVsbCBvciBlbmQgb2YgYXJyYXkg YXNzaWdubWVudAogICAgICAgICAgICAgICAgICBpZiAkaW5fYXJyYXlfYXNzaWdubWVudDsgdGhl bgpAQCAtNTM0LDM1ICs1MDUsMjcgQEAgX3pzaF9oaWdobGlnaHRfaGlnaGxpZ2h0ZXJfbWFpbl9w YWludCgpCiAgICAgICAgICAgICAgICAgIGVsaWYgW1sgJGFyZ1swLDFdID0gJGhpc3RjaGFyc1sw LDFdIF1dICYmICgoICQjYXJnWzAsMl0gPT0gMiApKTsgdGhlbgogICAgICAgICAgICAgICAgICAg IHN0eWxlPWhpc3RvcnktZXhwYW5zaW9uCiAgICAgICAgICAgICAgICAgIGVsaWYgW1sgLW4gJHso TSlaU0hfSElHSExJR0hUX1RPS0VOU19DT01NQU5EU0VQQVJBVE9SOiMiJGFyZyJ9IF1dOyB0aGVu Ci0gICAgICAgICAgICAgICAgICAgaWYgW1sgJHRoaXNfd29yZCA9PSAqJzpyZWd1bGFyOicqIF1d OyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICBzdHlsZT1jb21tYW5kc2VwYXJhdG9yCi0gICAg ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgc3R5bGU9dW5rbm93bi10 b2tlbgotICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgW1sgJHRoaXNf d29yZCA9PSAqJzpyZWd1bGFyOicqIF1dICYmIHN0eWxlPWNvbW1hbmRzZXBhcmF0b3IgfHwgc3R5 bGU9dW5rbm93bi10b2tlbgogICAgICAgICAgICAgICAgICBlbGlmICgoIGluX3JlZGlyZWN0aW9u ID09IDIgKSk7IHRoZW4KICAgICAgICAgICAgICAgICAgICBzdHlsZT1yZWRpcmVjdGlvbgogICAg ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgaWYgX3pzaF9oaWdobGlnaHRf bWFpbl9oaWdobGlnaHRlcl9jaGVja19wYXRoOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICBz dHlsZT0kUkVQTFkKLSAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg ICBzdHlsZT1kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAg ICBfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hsaWdodGVyX2NoZWNrX3BhdGggJiYgc3R5bGU9JFJF UExZIHx8IHN0eWxlPWRlZmF1bHQKICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAg ICAgOzsKICAgICAgIGVzYWMKLSAgICBmaQorICAgfQogICAgIGlmICEgKCggYWxyZWFkeV9hZGRl ZCApKTsgdGhlbgogICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdo dCAkc3RhcnRfcG9zICRlbmRfcG9zICRzdHlsZQogICAgICAgW1sgJHN0eWxlID09IHBhdGggfHwg JHN0eWxlID09IHBhdGhfcHJlZml4IF1dICYmIF96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0 ZXJfaGlnaGxpZ2h0X3BhdGhfc2VwYXJhdG9ycwogICAgIGZpCi0gICAgaWYgW1sgLW4gJHsoTSla U0hfSElHSExJR0hUX1RPS0VOU19DT01NQU5EU0VQQVJBVE9SOiMiJGFyZyJ9IF1dOyB0aGVuCisg ICAgW1sgLW4gJHsoTSlaU0hfSElHSExJR0hUX1RPS0VOU19DT01NQU5EU0VQQVJBVE9SOiMiJGFy ZyJ9IF1dICYmIHsKICAgICAgIG5leHRfd29yZD0nOnN0YXJ0OicKICAgICAgIGhpZ2hsaWdodF9n bG9iPXRydWUKLSAgICBlbGlmCi0gICAgICAgW1sgLW4gJHsoTSlaU0hfSElHSExJR0hUX1RPS0VO U19DT05UUk9MX0ZMT1c6IyIkYXJnIn0gJiYgJHRoaXNfd29yZCA9PSAqJzpzdGFydDonKiBdXSB8 fAotICAgICAgIFtbIC1uICR7KE0pWlNIX0hJR0hMSUdIVF9UT0tFTlNfUFJFQ09NTUFORFM6IyIk YXJnIn0gJiYgJHRoaXNfd29yZCA9PSAqJzpzdGFydDonKiBdXTsgdGhlbgorICB9IHx8IHsKKyAg ICBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9LRU5TX0NPTlRST0xfRkxPVzojIiRhcmcifSAm JiAkdGhpc193b3JkID09IConOnN0YXJ0OicqIF1dIHx8CisgICAgICAgW1sgLW4gJHsoTSlaU0hf SElHSExJR0hUX1RPS0VOU19QUkVDT01NQU5EUzojIiRhcmcifSAmJiAkdGhpc193b3JkID09ICon OnN0YXJ0OicqIF1dICYmIHsKICAgICAgIG5leHRfd29yZD0nOnN0YXJ0OicKLSAgICBlbGlmIFtb ICRhcmcgPT0gInJlcGVhdCIgJiYgJHRoaXNfd29yZCA9PSAqJzpzdGFydDonKiBdXTsgdGhlbgor ICB9IHx8IHsgW1sgJGFyZyA9PSAicmVwZWF0IiAmJiAkdGhpc193b3JkID09IConOnN0YXJ0Oicq IF1dICYmIHsKICAgICAgICMgc2tpcCB0aGUgcmVwZWF0LWNvdW50IHdvcmQKICAgICAgIGluX3Jl ZGlyZWN0aW9uPTIKICAgICAgICMgVGhlIHJlZGlyZWN0aW9uIG1lY2hhbmlzbSBhc3N1bWVzICR0 aGlzX3dvcmQgZGVzY3JpYmVzIHRoZSB3b3JkCkBAIC01NzMsMTQgKzUzNiwxMSBAQCBfenNoX2hp Z2hsaWdodF9oaWdobGlnaHRlcl9tYWluX3BhaW50KCkKICAgICAgICMKICAgICAgICMgVGhlIHJl cGVhdC1jb3VudCB3b3JkIHdpbGwgYmUgaGFuZGxlZCBsaWtlIGEgcmVkaXJlY3Rpb24gdGFyZ2V0 LgogICAgICAgdGhpc193b3JkPSc6c3RhcnQ6OnJlZ3VsYXI6JwotICAgIGZpCisgIH0KK30KKyAg fQogICAgIHN0YXJ0X3Bvcz0kZW5kX3BvcwotICAgIGlmICgoIGluX3JlZGlyZWN0aW9uID09IDAg KSk7IHRoZW4KLSAgICAgICMgVGhpcyBpcyB0aGUgZGVmYXVsdC9jb21tb24gY29kZXBhdGguCi0g ICAgICB0aGlzX3dvcmQ9JG5leHRfd29yZAotICAgIGVsc2UKLSAgICAgICMgU3RhbGwgJHRoaXNf d29yZC4KLSAgICBmaQorICAgICgoIGluX3JlZGlyZWN0aW9uID09IDAgKSkgJiYgdGhpc193b3Jk PSRuZXh0X3dvcmQKICAgZG9uZQogfQogCkBAIC01OTgsOSArNTU4LDcgQEAgX3pzaF9oaWdobGln aHRfbWFpbl9oaWdobGlnaHRlcl9oaWdobGlnaHRfcGF0aF9zZXBhcmF0b3JzKCkKICAgc3R5bGVf cGF0aHNlcD0ke3N0eWxlfV9wYXRoc2VwYXJhdG9yCiAgIFtbIC16ICIkWlNIX0hJR0hMSUdIVF9T VFlMRVNbJHN0eWxlX3BhdGhzZXBdIiB8fCAiJFpTSF9ISUdITElHSFRfU1RZTEVTWyRzdHlsZV0i ID09ICIkWlNIX0hJR0hMSUdIVF9TVFlMRVNbJHN0eWxlX3BhdGhzZXBdIiBdXSAmJiByZXR1cm4g MAogICBmb3IgKCggcG9zID0gc3RhcnRfcG9zOyAkcG9zIDw9IGVuZF9wb3M7IHBvcysrICkpIDsg ZG8KLSAgICBpZiBbWyAkQlVGRkVSW3Bvc10gPT0gLyBdXTsgdGhlbgotICAgICAgX3pzaF9oaWdo bGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCAkKChwb3MgLSAxKSkgJHBvcyAkc3R5bGVf cGF0aHNlcAotICAgIGZpCisgICAgW1sgJEJVRkZFUltwb3NdID09IC8gXV0gJiYgX3pzaF9oaWdo bGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCAkKChwb3MgLSAxKSkgJHBvcyAkc3R5bGVf cGF0aHNlcAogICBkb25lCiB9CiAKQEAgLTYyOCwxMiArNTg2LDExIEBAIF96c2hfaGlnaGxpZ2h0 X21haW5faGlnaGxpZ2h0ZXJfY2hlY2tfcGF0aCgpCiAgIFtbICEgLWQgJHtleHBhbmRlZF9wYXRo Omh9IF1dICYmIHJldHVybiAxCiAKICAgIyBJZiB0aGlzIHdvcmQgZW5kcyB0aGUgYnVmZmVyLCBj aGVjayBpZiBpdCdzIHRoZSBwcmVmaXggb2YgYSB2YWxpZCBwYXRoLgotICBpZiBbWyAke0JVRkZF UlsxXX0gIT0gIi0iICYmICR7I0JVRkZFUn0gPT0gJGVuZF9wb3MgXV0gJiYKLSAgICAgW1sgJFdJ REdFVCAhPSB6bGUtbGluZS1maW5pc2ggXV07IHRoZW4KKyAgW1sgJHtCVUZGRVJbMV19ICE9ICIt IiAmJiAkeyNCVUZGRVJ9ID09ICRlbmRfcG9zIF1dICYmIFtbICRXSURHRVQgIT0gemxlLWxpbmUt ZmluaXNoIF1dICYmIHsKICAgICBsb2NhbCAtYSB0bXAKICAgICB0bXA9KCAke2V4cGFuZGVkX3Bh dGh9KihOKSApCiAgICAgKCggJCN0bXAgPiAwICkpICYmIFJFUExZPXBhdGhfcHJlZml4ICYmIHJl dHVybiAwCi0gIGZpCisgIH0KIAogICAjIEl0J3Mgbm90IGEgcGF0aC4KICAgcmV0dXJuIDEKQEAg LTY1MywyMyArNjEwLDIxIEBAIF96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJfaGlnaGxp Z2h0X3N0cmluZygpCiAgICAgY2FzZSAiJGFyZ1skaV0iIGluCiAgICAgICAnJCcgKSBzdHlsZT1k b2xsYXItZG91YmxlLXF1b3RlZC1hcmd1bWVudAogICAgICAgICAgICAgIyBMb29rIGZvciBhbiBh bHBoYW51bWVyaWMgcGFyYW1ldGVyIG5hbWUuCi0gICAgICAgICAgICBpZiBbWyAke2FyZzokaX0g PX4gXihbQS1aYS16X11bQS1aYS16MC05X10qfFswLTldKykgXV0gOyB0aGVuCisgICAgICAgICAg ICBbWyAke2FyZzokaX0gPX4gXihbQS1aYS16X11bQS1aYS16MC05X10qfFswLTldKykgXV0gJiYg ewogICAgICAgICAgICAgICAoKCBrICs9ICQjTUFUQ0ggKSkgIyBoaWdobGlnaHQgdGhlIHBhcmFt ZXRlciBuYW1lCiAgICAgICAgICAgICAgICgoIGkgKz0gJCNNQVRDSCApKSAjIHNraXAgcGFzdCBp dAotICAgICAgICAgICAgZWxpZiBbWyAke2FyZzokaX0gPX4gXlt7XShbQS1aYS16X11bQS1aYS16 MC05X10qfFswLTldKylbfV0gXV0gOyB0aGVuCi0gICAgICAgICAgICAgICgoIGsgKz0gJCNNQVRD SCApKSAjIGhpZ2hsaWdodCB0aGUgcGFyYW1ldGVyIG5hbWUgYW5kIGJyYWNlcwotICAgICAgICAg ICAgICAoKCBpICs9ICQjTUFUQ0ggKSkgIyBza2lwIHBhc3QgaXQKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZpCisgICAgICAgICAgICB9IHx8 IHsKKyAgICAgICAgICAgICAgICBbWyAke2FyZzokaX0gPX4gXlt7XShbQS1aYS16X11bQS1aYS16 MC05X10qfFswLTldKylbfV0gXV0gJiYgeworICAgICAgICAgICAgICAgICAgKCggayArPSAkI01B VENIICkpICMgaGlnaGxpZ2h0IHRoZSBwYXJhbWV0ZXIgbmFtZSBhbmQgYnJhY2VzCisgICAgICAg ICAgICAgICAgICAoKCBpICs9ICQjTUFUQ0ggKSkgIyBza2lwIHBhc3QgaXQKKyAgICAgICAgICAg ICAgfSB8fCBjb250aW51ZQorICAgICAgICAgICAgfQogICAgICAgICAgICAgOzsKICAgICAgICJc XCIpIHN0eWxlPWJhY2stZG91YmxlLXF1b3RlZC1hcmd1bWVudAotICAgICAgICAgICAgaWYgW1sg XFxcYFwiXCQgPT0gKiRhcmdbJGkrMV0qIF1dOyB0aGVuCisgICAgICAgICAgICBbWyBcXFxgXCJc JCA9PSAqJGFyZ1skaSsxXSogXV0gJiYgewogICAgICAgICAgICAgICAoKCBrICs9IDEgKSkgIyBD b2xvciBmb2xsb3dpbmcgY2hhciB0b28uCiAgICAgICAgICAgICAgICgoIGkgKz0gMSApKSAjIFNr aXAgcGFyc2luZyB0aGUgZXNjYXBlZCBjaGFyLgotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICBjb250aW51ZQotICAgICAgICAgICAgZmkKKyAgICAgICAgICB9IHx8IGNvbnRpbnVlCiAg ICAgICAgICAgICA7OwogICAgICAgKikgY29udGludWUgOzsKIApAQCAtNjk4LDIxICs2NTMsMTgg QEAgX3pzaF9oaWdobGlnaHRfbWFpbl9oaWdobGlnaHRlcl9oaWdobGlnaHRfZG9sbGFyX3N0cmlu ZygpCiAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgICBBQT0kYXJnWyRpKzEsJGMtMV0KICAg ICAgICAgICAgICMgTWF0Y2hpbmcgZm9yIEhFWCBhbmQgT0NUIHZhbHVlcyBsaWtlIFwweEE2LCBc eEE2IG9yIFwwMTIKLSAgICAgICAgICAgIGlmIFtbICAgICIkQUEiID1+ICJeKHh8WClbMC05YS1m QS1GXXsxLDJ9IgorICAgICAgICAgICAgW1sgICAgIiRBQSIgPX4gIl4oeHxYKVswLTlhLWZBLUZd ezEsMn0iCiAgICAgICAgICAgICAgICAgICB8fCAiJEFBIiA9fiAiXlswLTddezEsM30iCiAgICAg ICAgICAgICAgICAgICB8fCAiJEFBIiA9fiAiXnVbMC05YS1mQS1GXXsxLDR9IgogICAgICAgICAg ICAgICAgICAgfHwgIiRBQSIgPX4gIl5VWzAtOWEtZkEtRl17MSw4fSIKLSAgICAgICAgICAgICAg IF1dOyB0aGVuCisgICAgICAgICAgICAgICBdXSAmJiB7CiAgICAgICAgICAgICAgICgoIGsgKz0g JCNNQVRDSCApKQogICAgICAgICAgICAgICAoKCBpICs9ICQjTUFUQ0ggKSkKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgaWYgKCggJCNhcmcgPiAkaSsxICkpICYmIFtbICRhcmdbJGkr MV0gPT0gW3hYdVVdIF1dOyB0aGVuCi0gICAgICAgICAgICAgICAgIyBceCBub3QgZm9sbG93ZWQg YnkgaGV4IGRpZ2l0cyBpcyBwcm9iYWJseSBhbiBlcnJvcgotICAgICAgICAgICAgICAgIHN0eWxl PXVua25vd24tdG9rZW4KLSAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIH0gfHwgeworICAg ICAgICAgICAgICAoKCAkI2FyZyA+ICRpKzEgKSkgJiYgW1sgJGFyZ1skaSsxXSA9PSBbeFh1VV0g XV0gJiYgc3R5bGU9dW5rbm93bi10b2tlbgogICAgICAgICAgICAgICAoKCBrICs9IDEgKSkgIyBD b2xvciBmb2xsb3dpbmcgY2hhciB0b28uCiAgICAgICAgICAgICAgICgoIGkgKz0gMSApKSAjIFNr aXAgcGFyc2luZyB0aGUgZXNjYXBlZCBjaGFyLgotICAgICAgICAgICAgZmkKKyAgICAgICAgICAg IH0KICAgICAgICAgICAgIDs7CiAgICAgICAqKSBjb250aW51ZSA7OwogCg== --001a113f3b7c9d4e07053c9d4b8d Content-Type: application/octet-stream; name="parse.zsh" Content-Disposition: attachment; filename="parse.zsh" Content-Transfer-Encoding: base64 X-Attachment-Id: f_it5m2qaj1 IyEvdXNyL2xvY2FsL2Jpbi96c2gtNS4wLjgtZGV2LTEKCnNvdXJjZSAiLi4vLi4venNoLXN5bnRh eC1oaWdobGlnaHRpbmcuenNoIgoKaWYgWyAtbiAiJDEiIF07IHRoZW4KICAgICMgTG9hZCBmcm9t IGdpdmVuIGZpbGUKICAgIFBSRUJVRkZFUj0iIgogICAgQlVGRkVSPSIkKDwkMSkiCgogICAgI196 c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXIKICAgIF96c2hfaGlnaGxpZ2h0X2hpZ2hsaWdo dGVyX21haW5fcGFpbnQKCiAgICAjIFRoaXMgb3V0cHV0IGNhbiBiZSBkaWZmZWQgdG8gZGV0ZWN0 IGNoYW5nZXMgaW4gb3BlcmF0aW9uIAogICAgcHJpbnQgLXJsIC0tICIke3JlZ2lvbl9oaWdobGln aHRbQF19IgplbHNlCiAgICBlY2hvICJVc2FnZTogLi9wYXJzZS56c2gge2ZpbGV9IgpmaQo= --001a113f3b7c9d4e07053c9d4b8d Content-Type: application/octet-stream; name="toparse.zsh" Content-Disposition: attachment; filename="toparse.zsh" Content-Transfer-Encoding: base64 X-Attachment-Id: f_it5m37qa2 IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29weXJpZ2h0IChj KSAyMDEwLTIwMTYgenNoLXN5bnRheC1oaWdobGlnaHRpbmcgY29udHJpYnV0b3JzCiMgQWxsIHJp Z2h0cyByZXNlcnZlZC4KIwojIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQK IyBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgojCiMgICog UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucwojICAgIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCiMgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKIyAgICBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAojICAgIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KIyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSB6c2gtc3ludGF4LWhpZ2hsaWdodGlu ZyBjb250cmlidXRvcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiMgICAgbWF5 IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKIyAgICB3cml0dGVuIHBlcm1pc3Npb24u CiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SCiMgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECiMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M REVSIE9SCiMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIyBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUgojIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQKIyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQojIC0qLSBtb2RlOiB6c2g7IHNoLWluZGVudGF0aW9uOiAyOyBp bmRlbnQtdGFicy1tb2RlOiBuaWw7IHNoLWJhc2ljLW9mZnNldDogMjsgLSotCiMgdmltOiBmdD16 c2ggc3c9MiB0cz0yIGV0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQoKCiMgRGVmaW5lIGRlZmF1bHQgc3R5bGVzLgo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNbZGVm YXVsdF06PW5vbmV9CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1t1bmtub3duLXRva2VuXTo9Zmc9 cmVkLGJvbGR9CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1tyZXNlcnZlZC13b3JkXTo9Zmc9eWVs bG93fQo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNbYWxpYXNdOj1mZz1ncmVlbn0KOiAke1pTSF9I SUdITElHSFRfU1RZTEVTW3N1ZmZpeC1hbGlhc106PWZnPWdyZWVuLHVuZGVybGluZX0KOiAke1pT SF9ISUdITElHSFRfU1RZTEVTW2J1aWx0aW5dOj1mZz1ncmVlbn0KOiAke1pTSF9ISUdITElHSFRf U1RZTEVTW2Z1bmN0aW9uXTo9Zmc9Z3JlZW59CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1tjb21t YW5kXTo9Zmc9Z3JlZW59CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1twcmVjb21tYW5kXTo9Zmc9 Z3JlZW4sdW5kZXJsaW5lfQo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNbY29tbWFuZHNlcGFyYXRv cl06PW5vbmV9CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1toYXNoZWQtY29tbWFuZF06PWZnPWdy ZWVufQo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNbcGF0aF06PXVuZGVybGluZX0KOiAke1pTSF9I SUdITElHSFRfU1RZTEVTW3BhdGhfcGF0aHNlcGFyYXRvcl06PX0KOiAke1pTSF9ISUdITElHSFRf U1RZTEVTW3BhdGhfcHJlZml4XTo9dW5kZXJsaW5lfQo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNb cGF0aF9wcmVmaXhfcGF0aHNlcGFyYXRvcl06PX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2ds b2JiaW5nXTo9Zmc9Ymx1ZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2hpc3RvcnktZXhwYW5z aW9uXTo9Zmc9Ymx1ZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW3NpbmdsZS1oeXBoZW4tb3B0 aW9uXTo9bm9uZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2RvdWJsZS1oeXBoZW4tb3B0aW9u XTo9bm9uZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2JhY2stcXVvdGVkLWFyZ3VtZW50XTo9 bm9uZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW3NpbmdsZS1xdW90ZWQtYXJndW1lbnRdOj1m Zz15ZWxsb3d9CjogJHtaU0hfSElHSExJR0hUX1NUWUxFU1tkb3VibGUtcXVvdGVkLWFyZ3VtZW50 XTo9Zmc9eWVsbG93fQo6ICR7WlNIX0hJR0hMSUdIVF9TVFlMRVNbZG9sbGFyLXF1b3RlZC1hcmd1 bWVudF06PWZnPXllbGxvd30KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2RvbGxhci1kb3VibGUt cXVvdGVkLWFyZ3VtZW50XTo9Zmc9Y3lhbn0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2JhY2st ZG91YmxlLXF1b3RlZC1hcmd1bWVudF06PWZnPWN5YW59CjogJHtaU0hfSElHSExJR0hUX1NUWUxF U1tiYWNrLWRvbGxhci1xdW90ZWQtYXJndW1lbnRdOj1mZz1jeWFufQo6ICR7WlNIX0hJR0hMSUdI VF9TVFlMRVNbYXNzaWduXTo9bm9uZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW3JlZGlyZWN0 aW9uXTo9bm9uZX0KOiAke1pTSF9ISUdITElHSFRfU1RZTEVTW2NvbW1lbnRdOj1mZz1ibGFjayxi b2xkfQoKIyBXaGV0aGVyIHRoZSBoaWdobGlnaHRlciBzaG91bGQgYmUgY2FsbGVkIG9yIG5vdC4K X3pzaF9oaWdobGlnaHRfaGlnaGxpZ2h0ZXJfbWFpbl9wcmVkaWNhdGUoKQp7CiAgIyBtYXkgbmVl ZCB0byByZW1vdmUgcGF0aF9wcmVmaXggaGlnaGxpZ2h0aW5nIHdoZW4gdGhlIGxpbmUgZW5kcwog IFtbICRXSURHRVQgPT0gemxlLWxpbmUtZmluaXNoIF1dIHx8IF96c2hfaGlnaGxpZ2h0X2J1ZmZl cl9tb2RpZmllZAp9CgojIEhlbHBlciB0byBkZWFsIHdpdGggdG9rZW5zIGNyb3NzaW5nIGxpbmUg Ym91bmRhcmllcy4KX3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCgpIHsK ICBpbnRlZ2VyIHN0YXJ0PSQxIGVuZD0kMgogIHNoaWZ0IDIKCiAgIyBUaGUgY2FsY3VsYXRpb24g d2FzIHJlbGF0aXZlIHRvICRQUkVCVUZGRVIkQlVGRkVSLCBidXQgcmVnaW9uX2hpZ2hsaWdodCBp cwogICMgcmVsYXRpdmUgdG8gJEJVRkZFUi4KICAoKCBzdGFydCAtPSAkI1BSRUJVRkZFUiApKQog ICgoIGVuZCAtPSAkI1BSRUJVRkZFUiApKQoKICAoKCBlbmQgPCAwICkpICYmIHJldHVybiAjIGhh dmluZyBlbmQ8MCB3b3VsZCBiZSBhIGJ1ZwogICgoIHN0YXJ0IDwgMCApKSAmJiBzdGFydD0wICMg aGF2aW5nIHN0YXJ0PDAgaXMgbm9ybWFsIHdpdGggZS5nLiBtdWx0aWxpbmUgc3RyaW5ncwogIF96 c2hfaGlnaGxpZ2h0X2FkZF9oaWdobGlnaHQgJHN0YXJ0ICRlbmQgIiRAIgp9CgojIEdldCB0aGUg dHlwZSBvZiBhIGNvbW1hbmQuCiMKIyBVc2VzIHRoZSB6c2gvcGFyYW1ldGVyIG1vZHVsZSBpZiBh dmFpbGFibGUgdG8gYXZvaWQgZm9ya3MsIGFuZCBhCiMgd3JhcHBlciBhcm91bmQgJ3R5cGUgLXcn IGFzIGZhbGxiYWNrLgojCiMgVGFrZXMgYSBzaW5nbGUgYXJndW1lbnQuCiMKIyBUaGUgcmVzdWx0 IHdpbGwgYmUgc3RvcmVkIGluIFJFUExZLgpfenNoX2hpZ2hsaWdodF9tYWluX190eXBlKCkgewog IGlmICgoICQrX3pzaF9oaWdobGlnaHRfbWFpbl9fY29tbWFuZF90eXBlX2NhY2hlICkpOyB0aGVu CiAgICBSRVBMWT0kX3pzaF9oaWdobGlnaHRfbWFpbl9fY29tbWFuZF90eXBlX2NhY2hlWyhlKSQx XQogICAgaWYgW1sgLW4gIiRSRVBMWSIgXV07IHRoZW4KICAgICAgcmV0dXJuCiAgICBmaQogIGZp CiAgaWYgKCggJCNvcHRpb25zX3RvX3NldCApKTsgdGhlbgogICAgc2V0b3B0IGxvY2Fsb3B0aW9u cyAkb3B0aW9uc190b19zZXQ7CiAgZmkKICB1bnNldCBSRVBMWQogIGlmIHptb2Rsb2FkIC1lIHpz aC9wYXJhbWV0ZXI7IHRoZW4KICAgIGlmICgoICQrYWxpYXNlc1soZSkkMV0gKSk7IHRoZW4KICAg ICAgUkVQTFk9YWxpYXMKICAgIGVsaWYgKCggJCtzYWxpYXNlc1soZSkkezEjIyoufV0gKSk7IHRo ZW4KICAgICAgUkVQTFk9J3N1ZmZpeCBhbGlhcycKICAgIGVsaWYgKCggJHJlc3dvcmRzWyhJZSkk MV0gKSk7IHRoZW4KICAgICAgUkVQTFk9cmVzZXJ2ZWQKICAgIGVsaWYgKCggJCtmdW5jdGlvbnNb KGUpJDFdICkpOyB0aGVuCiAgICAgIFJFUExZPWZ1bmN0aW9uCiAgICBlbGlmICgoICQrYnVpbHRp bnNbKGUpJDFdICkpOyB0aGVuCiAgICAgIFJFUExZPWJ1aWx0aW4KICAgIGVsaWYgKCggJCtjb21t YW5kc1soZSkkMV0gKSk7IHRoZW4KICAgICAgUkVQTFk9Y29tbWFuZAogICAgIyB6c2ggNS4yIGFu ZCBvbGRlciBoYXZlIGEgYnVnIHdoZXJlYnkgcnVubmluZyAndHlwZSAtdyAuL3N1ZG8nIGltcGxp Y2l0bHkKICAgICMgcnVucyAnaGFzaCAuL3N1ZG89L3Vzci9sb2NhbC9iaW4vLi9zdWRvJyAoYXNz dW1pbmcgL3Vzci9sb2NhbC9iaW4vc3VkbwogICAgIyBleGlzdHMgYW5kIGlzIGluICRQQVRIKS4g IEF2b2lkIHRyaWdnZXJpbmcgdGhlIGJ1ZywgYXQgdGhlIGV4cGVuc2Ugb2YKICAgICMgZmFsbGlu ZyB0aHJvdWdoIHRvIHRoZSAkKCkgYmVsb3csIGluY3VycmluZyBhIGZvcmsuICAoSXNzdWUgIzM1 NC4pCiAgICAjCiAgICAjIFRoZSBzZWNvbmQgZGlzanVuY3QgbWltaWNzIHRoZSBpc3JlbGF0aXZl KCkgQyBjYWxsIGZyb20gdGhlIHpzaCBidWcuCiAgICBlbGlmIHsgIFtbICQxICE9ICovKiBdXSB8 fCBpcy1hdC1sZWFzdCA1LjMgfSAmJgogICAgICAgICAhIGJ1aWx0aW4gdHlwZSAtdyAtLSAkMSA+ L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgUkVQTFk9bm9uZQogICAgZmkKICBmaQogIGlmICEg KCggJCtSRVBMWSApKTsgdGhlbgogICAgUkVQTFk9IiR7JChMQ19BTEw9QyBidWlsdGluIHR5cGUg LXcgLS0gJDEgMj4vZGV2L251bGwpIyo6IH0iCiAgZmkKICBpZiAoKCAkK196c2hfaGlnaGxpZ2h0 X21haW5fX2NvbW1hbmRfdHlwZV9jYWNoZSApKTsgdGhlbgogICAgX3pzaF9oaWdobGlnaHRfbWFp bl9fY29tbWFuZF90eXBlX2NhY2hlWyhlKSQxXT0kUkVQTFkKICBmaQp9CgojIENoZWNrIHdoZXRo ZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcmVkaXJlY3Rpb24gb3BlcmF0b3IgdG9rZW4uCiMg UmVwb3J0IHJlc3VsdCB2aWEgdGhlIGV4aXQgY29kZS4KX3pzaF9oaWdobGlnaHRfbWFpbl9faXNf cmVkaXJlY3Rpb24oKSB7CiAgIyBBIHJlZGlyZWN0aW9uIG9wZXJhdG9yIHRva2VuOgogICMgLSBz dGFydHMgd2l0aCBhbiBvcHRpb25hbCBzaW5nbGUtZGlnaXQgbnVtYmVyOwogICMgLSB0aGVuLCBo YXMgYSAnPCcgb3IgJz4nIGNoYXJhY3RlcjsKICAjIC0gaXMgbm90IGEgcHJvY2VzcyBzdWJzdGl0 dXRpb24gWzwoLi4uKSBvciA+KC4uLildLgogIFtbICQxID09ICg8MC05PnwpKFw8fFw+KSogXV0g JiYgW1sgJDEgIT0gKFw8fFw+KSQnXHgyOCcqIF1dCn0KCiMgUmVzb2x2ZSBhbGlhcy4KIwojIFRh a2VzIGEgc2luZ2xlIGFyZ3VtZW50LgojCiMgVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpbiBS RVBMWS4KX3pzaF9oaWdobGlnaHRfbWFpbl9fcmVzb2x2ZV9hbGlhcygpIHsKICBpZiB6bW9kbG9h ZCAtZSB6c2gvcGFyYW1ldGVyOyB0aGVuCiAgICBSRVBMWT0ke2FsaWFzZXNbJGFyZ119CiAgZWxz ZQogICAgUkVQTFk9IiR7IiQoYWxpYXMgLS0gJGFyZykiIyo9fSIKICBmaQp9CgojIE1haW4gc3lu dGF4IGhpZ2hsaWdodGluZyBmdW5jdGlvbi4KX3pzaF9oaWdobGlnaHRfaGlnaGxpZ2h0ZXJfbWFp bl9wYWludCgpCnsKICAjIyBCZWZvcmUgd2UgZXZlbiAnZW11bGF0ZSAtTCcsIHdlIG11c3QgdGVz dCBhIGZldyBvcHRpb25zIHRoYXQgd291bGQgcmVzZXQuCiAgaWYgW1sgLW8gaW50ZXJhY3RpdmVf Y29tbWVudHMgXV07IHRoZW4KICAgIGxvY2FsIGludGVyYWN0aXZlX2NvbW1lbnRzPSAjIHNldCB0 byBlbXB0eQogIGZpCiAgaWYgW1sgLW8gcGF0aF9kaXJzIF1dOyB0aGVuCiAgICBpbnRlZ2VyIHBh dGhfZGlyc193YXNfc2V0PTEKICBlbHNlCiAgICBpbnRlZ2VyIHBhdGhfZGlyc193YXNfc2V0PTAK ICBmaQogIGVtdWxhdGUgLUwgenNoCiAgc2V0b3B0IGxvY2Fsb3B0aW9ucyBleHRlbmRlZGdsb2Ig YmFyZWdsb2JxdWFsCgogICMgQXQgdGhlIFBTMyBwcm9tcHQgYW5kIGluIHZhcmVkLCBoaWdobGln aHQgbm90aGluZy4KICAjCiAgIyAoV2UgY2FuJ3QgY2hlY2sgdGhpcyBpbiBfenNoX2hpZ2hsaWdo dF9oaWdobGlnaHRlcl9tYWluX3ByZWRpY2F0ZSBiZWNhdXNlCiAgIyBpZiB0aGUgcHJlZGljYXRl IHJldHVybnMgZmFsc2UsIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiByZWdpb25faGlnaGxpZ2h0CiAg IyB3b3VsZCBiZSByZXVzZWQuKQogIGlmIFtbICRDT05URVhUID09IChzZWxlY3R8dmFyZWQpIF1d OyB0aGVuCiAgICByZXR1cm4KICBmaQoKICAjIyBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgYW5kIGlu aXRpYWxpemF0aW9ucwogIGxvY2FsIHN0YXJ0X3Bvcz0wIGVuZF9wb3MgaGlnaGxpZ2h0X2dsb2I9 dHJ1ZSBhcmcgc3R5bGUKICBsb2NhbCBpbl9hcnJheV9hc3NpZ25tZW50PWZhbHNlICMgdHJ1ZSBi ZXR3ZWVuICdhPSgnIGFuZCB0aGUgbWF0Y2hpbmcgJyknCiAgdHlwZXNldCAtYSBaU0hfSElHSExJ R0hUX1RPS0VOU19DT01NQU5EU0VQQVJBVE9SCiAgdHlwZXNldCAtYSBaU0hfSElHSExJR0hUX1RP S0VOU19QUkVDT01NQU5EUwogIHR5cGVzZXQgLWEgWlNIX0hJR0hMSUdIVF9UT0tFTlNfQ09OVFJP TF9GTE9XCiAgbG9jYWwgLWEgb3B0aW9uc190b19zZXQgIyB1c2VkIGluIGNhbGxlZXMKICBsb2Nh bCBidWY9IiRQUkVCVUZGRVIkQlVGRkVSIgogIGludGVnZXIgbGVuPSIkeyNidWZ9IgoKICBpZiAo KCBwYXRoX2RpcnNfd2FzX3NldCApKTsgdGhlbgogICAgb3B0aW9uc190b19zZXQrPSggUEFUSF9E SVJTICkKICBmaQogIHVuc2V0IHBhdGhfZGlyc193YXNfc2V0CgogIFpTSF9ISUdITElHSFRfVE9L RU5TX0NPTU1BTkRTRVBBUkFUT1I9KAogICAgJ3wnICd8fCcgJzsnICcmJyAnJiYnCiAgICAnfCYn CiAgICAnJiEnICcmfCcKICAgICMgIyMjICdjYXNlJyBzeW50YXgsIGJ1dCBmb2xsb3dlZCBieSBh IHBhdHRlcm4sIG5vdCBieSBhIGNvbW1hbmQKICAgICMgJzs7JyAnOyYnICc7fCcKICApCiAgWlNI X0hJR0hMSUdIVF9UT0tFTlNfUFJFQ09NTUFORFM9KAogICAgJ2J1aWx0aW4nICdjb21tYW5kJyAn ZXhlYycgJ25vY29ycmVjdCcgJ25vZ2xvYicKICAgICdwa2V4ZWMnICMgaW1tdW5lIHRvICMxMjEg YmVjYXVzZSBpdCdzIHVzdWFsbHkgbm90IHBhc3NlZCAtLW9wdGlvbiBmbGFncwogICkKCiAgIyBU b2tlbnMgdGhhdCwgYXQgKG5haXZlbHktZGV0ZXJtaW5lZCkgImNvbW1hbmQgcG9zaXRpb24iLCBh cmUgZm9sbG93ZWQgYnkKICAjIGEgZGUganVyZSBjb21tYW5kIHBvc2l0aW9uLiAgQWxsIG9mIHRo ZXNlIGFyZSByZXNlcnZlZCB3b3Jkcy4KICBaU0hfSElHSExJR0hUX1RPS0VOU19DT05UUk9MX0ZM T1c9KAogICAgJCdceDdiJyAjIGJsb2NrCiAgICAkJ1x4MjgnICMgc3Vic2hlbGwKICAgICcoKScg IyBhbm9ueW1vdXMgZnVuY3Rpb24KICAgICd3aGlsZScKICAgICd1bnRpbCcKICAgICdpZicKICAg ICd0aGVuJwogICAgJ2VsaWYnCiAgICAnZWxzZScKICAgICdkbycKICAgICd0aW1lJwogICAgJ2Nv cHJvYycKICAgICchJyAjIHJlc2VydmVkIHdvcmQ7IHVucmVsYXRlZCB0byAkaGlzdGNoYXJzWzFd CiAgKQoKICAjIFN0YXRlIG1hY2hpbmUKICAjCiAgIyBUaGUgc3RhdGVzIGFyZToKICAjIC0gOnN0 YXJ0OiAgICAgIENvbW1hbmQgd29yZAogICMgLSA6c3Vkb19vcHQ6ICAgQSBsZWFkaW5nLWRhc2gg b3B0aW9uIHRvIHN1ZG8gKHN1Y2ggYXMgIi11IiBvciAiLWkiKQogICMgLSA6c3Vkb19hcmc6ICAg VGhlIGFyZ3VtZW50IHRvIGEgc3VkbyBsZWFkaW5nLWRhc2ggb3B0aW9uIHRoYXQgdGFrZXMgb25l LAogICMgICAgICAgICAgICAgICAgd2hlbiBnaXZlbiBhcyBhIHNlcGFyYXRlIHdvcmQ7IGkuZS4s ICJmb28iIGluICItdSBmb28iICh0d28KICAjICAgICAgICAgICAgICAgIHdvcmRzKSBidXQgbm90 IGluICItdWZvbyIgKG9uZSB3b3JkKS4KICAjIC0gOnJlZ3VsYXI6ICAgICJOb3QgYSBjb21tYW5k IHdvcmQiLCBhbmQgY29tbWFuZCBkZWxpbWl0ZXJzIGFyZSBwZXJtaXR0ZWQuCiAgIyAgICAgICAg ICAgICAgICBNYWlubHkgdXNlZCB0byBkZXRlY3QgcHJlbWF0dXJlIHRlcm1pbmF0aW9uIG9mIGNv bW1hbmRzLgogICMKICAjIFdoZW4gdGhlIGtpbmQgb2YgYSB3b3JkIGlzIG5vdCB5ZXQga25vd24s ICR0aGlzX3dvcmQgLyAkbmV4dF93b3JkIG1heSBjb250YWluCiAgIyBtdWx0aXBsZSBzdGF0ZXMu ICBGb3IgZXhhbXBsZSwgYWZ0ZXIgInN1ZG8gLWkiLCB0aGUgbmV4dCB3b3JkIG1heSBiZSBlaXRo ZXIKICAjIGFub3RoZXIgLS1mbGFnIG9yIGEgY29tbWFuZCBuYW1lLCBoZW5jZSB0aGUgc3RhdGUg d291bGQgaW5jbHVkZSBib3RoIDpzdGFydDoKICAjIGFuZCA6c3Vkb19vcHQ6LgogICMKICAjIFRo ZSB0b2tlbnMgYXJlIGFsd2F5cyBhZGRlZCB3aXRoIGJvdGggbGVhZGluZyBhbmQgdHJhaWxpbmcg Y29sb25zIHRvIHNlcnZlIGFzCiAgIyB3b3JkIGRlbGltaXRlcnMgKGFuIGltcHJvdmlzZWQgYXJy YXkpOyBbWyAkeCA9PSAqOmZvbzoqIF1dIGFuZCB4PSR7eC8vOmZvbzovfSAKICAjIHdpbGwgRFRS VCByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGVsZW1lbnRzIG9yIHJlcGV0aXRpb25zICR4IGhhcy4u CiAgIwogICMgSGFuZGxpbmcgb2YgcmVkaXJlY3Rpb25zOiB1cG9uIHNlZWluZyBhIHJlZGlyZWN0 aW9uIHRva2VuLCB3ZSBtdXN0IHN0YWxsCiAgIyB0aGUgY3VycmVudCBzdGF0ZSAtLS0gdGhhdCBp cywgdGhlIHZhbHVlIG9mICR0aGlzX3dvcmQgLS0tIGZvciB0d28gaXRlcmF0aW9ucwogICMgKG9u ZSBmb3IgdGhlIHJlZGlyZWN0aW9uIG9wZXJhdG9yLCBvbmUgZm9yIHRoZSB3b3JkIGZvbGxvd2lu ZyBpdCByZXByZXNlbnRpbmcKICAjIHRoZSByZWRpcmVjdGlvbiB0YXJnZXQpLiAgVGhlcmVmb3Jl LCB3ZSBzZXQgJGluX3JlZGlyZWN0aW9uIHRvIDIgdXBvbiBzZWVpbmcgYQogICMgcmVkaXJlY3Rp b24gb3BlcmF0b3IsIGRlY3JlbWVudCBpdCBlYWNoIGl0ZXJhdGlvbiwgYW5kIHN0YWxsIHRoZSBj dXJyZW50IHN0YXRlCiAgIyB3aGVuIGl0IGlzIG5vbi16ZXJvLiAgVGh1cywgdXBvbiByZWFjaGlu ZyB0aGUgbmV4dCB3b3JkICh0aGUgb25lIHRoYXQgZm9sbG93cwogICMgdGhlIHJlZGlyZWN0aW9u IG9wZXJhdG9yIGFuZCB0YXJnZXQpLCAkdGhpc193b3JkIHdpbGwgc3RpbGwgY29udGFpbiB2YWx1 ZXMKICAjIGFwcHJvcHJpYXRlIGZvciB0aGUgd29yZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhl IHdvcmQgdGhhdCBwcmVjZWRlZCB0aGUKICAjIHJlZGlyZWN0aW9uIG9wZXJhdG9yLgogICMKICAj IFRoZSAidGhlIHByZXZpb3VzIHdvcmQgd2FzIGEgcmVkaXJlY3Rpb24gb3BlcmF0b3IiIHN0YXRl IGlzIG5vdCBjb21tdW5pY2F0ZWQKICAjIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiB2aWEgJG5leHRf d29yZC8kdGhpc193b3JkIGFzIHVzdWFsLCBidXQgdmlhCiAgIyAkaW5fcmVkaXJlY3Rpb24uICBU aGUgdmFsdWUgb2YgJG5leHRfd29yZCBmcm9tIHRoZSBpdGVyYXRpb24gdGhhdCBwcm9jZXNzZWQK ICAjIHRoZSBvcGVyYXRvciBpcyBkaXNjYXJkZWQuCiAgIwogIGxvY2FsIHRoaXNfd29yZD0nOnN0 YXJ0OicgbmV4dF93b3JkCiAgaW50ZWdlciBpbl9yZWRpcmVjdGlvbgogICMgUHJvY2Vzc2luZyBi dWZmZXIKICBsb2NhbCBwcm9jX2J1Zj0iJGJ1ZiIKICBmb3IgYXJnIGluICR7aW50ZXJhY3RpdmVf Y29tbWVudHMtJHsoeilidWZ9fSBcCiAgICAgICAgICAgICAke2ludGVyYWN0aXZlX2NvbW1lbnRz KyR7KHpaK2MrKWJ1Zn19OyBkbwogICAgIyBJbml0aWFsaXplICRuZXh0X3dvcmQuCiAgICBpZiAo KCBpbl9yZWRpcmVjdGlvbiApKTsgdGhlbgogICAgICAoKCAtLWluX3JlZGlyZWN0aW9uICkpCiAg ICBmaQogICAgaWYgKCggaW5fcmVkaXJlY3Rpb24gPT0gMCApKTsgdGhlbgogICAgICAjIEluaXRp YWxpemUgJG5leHRfd29yZCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KICAgICAgbmV4dF93b3JkPSc6 cmVndWxhcjonCiAgICBlbHNlCiAgICAgICMgU3RhbGwgJG5leHRfd29yZC4KICAgIGZpCgogICAg IyBJbml0aWFsaXplIHBlci0ic2ltcGxlIGNvbW1hbmQiIFt6c2htaXNjKDEpXSB2YXJpYWJsZXM6 CiAgICAjCiAgICAjICAgJGFscmVhZHlfYWRkZWQgICAgICAgKHNlZSBuZXh0IHBhcmFncmFwaCkK ICAgICMgICAkc3R5bGUgICAgICAgICAgICAgICBob3cgdG8gaGlnaGxpZ2h0ICRhcmcKICAgICMg ICAkaW5fYXJyYXlfYXNzaWdubWVudCBib29sZWFuIGZsYWcgZm9yICJiZXR3ZWVuICcoJyBhbmQg JyknIG9mIGFycmF5IGFzc2lnbm1lbnQiCiAgICAjICAgJGhpZ2hsaWdodF9nbG9iICAgICAgYm9v bGVhbiBmbGFnIGZvciAiJ25vZ2xvYicgaXMgaW4gZWZmZWN0IgogICAgIwogICAgIyAkYWxyZWFk eV9hZGRlZCBpcyBzZXQgdG8gMSB0byBkaXNhYmxlIGFkZGluZyBhbiBlbnRyeSB0byByZWdpb25f aGlnaGxpZ2h0CiAgICAjIGZvciB0aGlzIGl0ZXJhdGlvbi4gIEN1cnJlbnRseSwgdGhhdCBpcyBk b25lIGZvciAiIiBhbmQgJCcnIHN0cmluZ3MsCiAgICAjIHdoaWNoIGFkZCB0aGUgZW50cnkgZWFy bHkgc28gZXNjYXBlIHNlcXVlbmNlcyB3aXRoaW4gdGhlIHN0cmluZyBvdmVycmlkZQogICAgIyB0 aGUgc3RyaW5nJ3MgY29sb3IuCiAgICBpbnRlZ2VyIGFscmVhZHlfYWRkZWQ9MAogICAgc3R5bGU9 dW5rbm93bi10b2tlbgogICAgaWYgW1sgJHRoaXNfd29yZCA9PSAqJzpzdGFydDonKiBdXTsgdGhl bgogICAgICBpbl9hcnJheV9hc3NpZ25tZW50PWZhbHNlCiAgICAgIGlmIFtbICRhcmcgPT0gJ25v Z2xvYicgXV07IHRoZW4KICAgICAgICBoaWdobGlnaHRfZ2xvYj1mYWxzZQogICAgICBmaQogICAg ZmkKCiAgICAjIENvbXB1dGUgdGhlIG5ldyAkc3RhcnRfcG9zIGFuZCAkZW5kX3Bvcywgc2tpcHBp bmcgb3ZlciB3aGl0ZXNwYWNlIGluICRidWYuCiAgICBpZiBbWyAkYXJnID09ICc7JyBdXSA7IHRo ZW4KICAgICAgIyBXZSdyZSBsb29raW5nIGZvciBlaXRoZXIgYSBzZW1pY29sb24gb3IgYSBuZXds aW5lLCB3aGljaGV2ZXIgY29tZXMKICAgICAgIyBmaXJzdC4gIEJvdGggb2YgdGhlc2UgYXJlIHJl bmRlcmVkIGFzIGEgIjsiIChTRVBFUikgYnkgdGhlICR7KHopLi59CiAgICAgICMgZmxhZy4KICAg ICAgIwogICAgICAjIFdlIGNhbid0IHVzZSB0aGUgKForbispIGZsYWcgYmVjYXVzZSB0aGF0IGVs aWRlcyB0aGUgZW5kLW9mLWNvbW1hbmQKICAgICAgIyB0b2tlbiBhbHRvZ2V0aGVyLCBzbyAnZWNo byBmb29cbmVjaG8gYmFyJyAodHdvIGNvbW1hbmRzKSBiZWNvbWVzCiAgICAgICMgaW5kaXN0aW5n dWlzaGFibGUgZnJvbSAnZWNobyBmb28gZWNobyBiYXInIChvbmUgY29tbWFuZCB3aXRoIHRocmVl CiAgICAgICMgd29yZHMgZm9yIGFyZ3VtZW50cykuCiAgICAgIGxvY2FsIG5lZWRsZT0kJ1s7XG5d JwogICAgICBpbnRlZ2VyIG9mZnNldD0kKCggJHtwcm9jX2J1ZlsoaSkkbmVlZGxlXX0gLSAxICkp CiAgICAgICgoIHN0YXJ0X3BvcyArPSBvZmZzZXQgKSkKICAgICAgKCggZW5kX3BvcyA9IHN0YXJ0 X3BvcyArICQjYXJnICkpCiAgICBlbHNlCiAgICAgIGludGVnZXIgb2Zmc2V0PSQoKChsZW4tc3Rh cnRfcG9zKS0keyMke3Byb2NfYnVmIyMoW1s6c3BhY2U6XV18XFxbWzpzcGFjZTpdXSkjfX0pKQog ICAgICAoKHN0YXJ0X3Bvcys9b2Zmc2V0KSkKICAgICAgKChlbmRfcG9zPSRzdGFydF9wb3MrJHsj YXJnfSkpCiAgICBmaQoKICAgICMgQ29tcHV0ZSB0aGUgbmV3ICRwcm9jX2J1Zi4gV2UgYWR2YW5j ZSBpdAogICAgIyAoY2hvcCBvZmYgY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcpCiAgICAj IGJleW9uZCB3aGF0IGVuZF9wb3MgcG9pbnRzIHRvLCBieSBza2lwcGluZwogICAgIyBhcyBtYW55 IGNoYXJhY3RlcnMgYXMgZW5kX3BvcyB3YXMgYWR2YW5jZWQuCiAgICAjCiAgICAjIGVuZF9wb3Mg d2FzIGFkdmFuY2VkIGJ5ICRvZmZzZXQgKHZpYSBzdGFydF9wb3MpCiAgICAjIGFuZCBieSAkI2Fy Zy4gTm90ZSB0aGUgYHN0YXJ0X3Bvcz0kZW5kX3Bvc2AKICAgICMgYmVsb3cuCiAgICAjCiAgICAj IEFzIGZvciB0aGUgWyxsZW5dLiBXZSBjb3VsZCB1c2UgWyxsZW4tc3RhcnRfcG9zK29mZnNldF0K ICAgICMgaGVyZSwgYnV0IHRvIG1ha2UgaXQgZWFzaWVyIG9uIGV5ZXMsIHdlIHVzZSBsZW4gYW5k CiAgICAjIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBac2ggc2ltcGx5IGhhbmRsZXMgdGhhdC4gVGhl CiAgICAjIGxlbmd0aCBvZiBwcm9jX2J1ZiBpcyBsZW4tc3RhcnRfcG9zK29mZnNldCBiZWNhdXNl CiAgICAjIHdlJ3JlIGNob3BwaW5nIGl0IHRvIG1hdGNoIGN1cnJlbnQgc3RhcnRfcG9zLCBzbyBp dHMKICAgICMgbGVuZ3RoIG1hdGNoZXMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHN0YXJ0X3Bvcy4K ICAgICMKICAgICMgV2h5IFssLTFdIGlzIHNsb3dlciB0aGFuIFssbGVuZ3RoXSBpc24ndCBjbGVh ci4KICAgIHByb2NfYnVmPSIke3Byb2NfYnVmW29mZnNldCArICQjYXJnICsgMSxsZW5dfSIKCiAg ICAjIEhhbmRsZSB0aGUgSU5URVJBQ1RJVkVfQ09NTUVOVFMgb3B0aW9uLgogICAgIwogICAgIyBX ZSB1c2UgdGhlIChaK2MrKSBmbGFnIHNvIHRoZSBlbnRpcmUgY29tbWVudCBpcyBwcmVzZW50ZWQg YXMgb25lIHRva2VuIGluICRhcmcuCiAgICBpZiBbWyAtbiAke2ludGVyYWN0aXZlX2NvbW1lbnRz KydzZXQnfSAmJiAkYXJnWzFdID09ICRoaXN0Y2hhcnNbM10gXV07IHRoZW4KICAgICAgaWYgW1sg JHRoaXNfd29yZCA9PSAqKCc6cmVndWxhcjonfCc6c3RhcnQ6JykqIF1dOyB0aGVuCiAgICAgICAg c3R5bGU9Y29tbWVudAogICAgICBlbHNlCiAgICAgICAgc3R5bGU9dW5rbm93bi10b2tlbiAjIHBy ZW1hdHVyZWx5IHRlcm1pbmF0ZWQKICAgICAgZmkKICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9h ZGRfcmVnaW9uX2hpZ2hsaWdodCAkc3RhcnRfcG9zICRlbmRfcG9zICRzdHlsZQogICAgICBhbHJl YWR5X2FkZGVkPTEKICAgICAgY29udGludWUKICAgIGZpCgogICAgIyBBbmFseXNlIHRoZSBjdXJy ZW50IHdvcmQuCiAgICBpZiBfenNoX2hpZ2hsaWdodF9tYWluX19pc19yZWRpcmVjdGlvbiAkYXJn IDsgdGhlbgogICAgICAjIEEgJzwnIG9yICc+JywgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBkaWdp dAogICAgICBpbl9yZWRpcmVjdGlvbj0yCiAgICBmaQoKICAgICMgU3BlY2lhbC1jYXNlIHRoZSBm aXJzdCB3b3JkIGFmdGVyICdzdWRvJy4KICAgIGlmICgoICEgaW5fcmVkaXJlY3Rpb24gKSk7IHRo ZW4KICAgICAgaWYgW1sgJHRoaXNfd29yZCA9PSAqJzpzdWRvX29wdDonKiBdXSAmJiBbWyAkYXJn ICE9IC0qIF1dOyB0aGVuCiAgICAgICAgdGhpc193b3JkPSR7dGhpc193b3JkLy86c3Vkb19vcHQ6 L30KICAgICAgZmkKICAgIGZpCgogICAgIyBQYXJzZSB0aGUgc3VkbyBjb21tYW5kIGxpbmUKICAg IGlmICgoICEgaW5fcmVkaXJlY3Rpb24gKSk7IHRoZW4KICAgICAgaWYgW1sgJHRoaXNfd29yZCA9 PSAqJzpzdWRvX29wdDonKiBdXTsgdGhlbgogICAgICAgIGNhc2UgIiRhcmciIGluCiAgICAgICAg ICAjIEZsYWcgdGhhdCByZXF1aXJlcyBhbiBhcmd1bWVudAogICAgICAgICAgJy0nW0NncHJ0dV0p IHRoaXNfd29yZD0ke3RoaXNfd29yZC8vOnN0YXJ0Oi99OwogICAgICAgICAgICAgICAgICAgICAg IG5leHRfd29yZD0nOnN1ZG9fYXJnOic7OwogICAgICAgICAgIyBUaGlzIHByZXZlbnRzIG1pc2Jl aGF2aW9yIHdpdGggc3VkbyAtdSAtb3RoZXJhcmd1bWVudAogICAgICAgICAgJy0nKikgICAgICAg IHRoaXNfd29yZD0ke3RoaXNfd29yZC8vOnN0YXJ0Oi99OwogICAgICAgICAgICAgICAgICAgICAg IG5leHRfd29yZCs9JzpzdGFydDonOwogICAgICAgICAgICAgICAgICAgICAgIG5leHRfd29yZCs9 JzpzdWRvX29wdDonOzsKICAgICAgICAgICopICAgICAgICAgICA7OwogICAgICAgIGVzYWMKICAg ICAgZWxpZiBbWyAkdGhpc193b3JkID09IConOnN1ZG9fYXJnOicqIF1dOyB0aGVuCiAgICAgICAg bmV4dF93b3JkKz0nOnN1ZG9fb3B0OicKICAgICAgICBuZXh0X3dvcmQrPSc6c3RhcnQ6JwogICAg ICBmaQogICBmaQoKICAgIyBUaGUgR3JlYXQgRm9yazogaXMgdGhpcyBhIGNvbW1hbmQgd29yZD8g IElzIHRoaXMgYSBub24tY29tbWFuZCB3b3JkPwogICBpZiBbWyAkdGhpc193b3JkID09IConOnN0 YXJ0OicqIF1dICYmICgoIGluX3JlZGlyZWN0aW9uID09IDAgKSk7IHRoZW4gIyAkYXJnIGlzIHRo ZSBjb21tYW5kIHdvcmQKICAgICBpZiBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9LRU5TX1BS RUNPTU1BTkRTOiMiJGFyZyJ9IF1dOyB0aGVuCiAgICAgIHN0eWxlPXByZWNvbW1hbmQKICAgICBl bGlmIFtbICIkYXJnIiA9ICJzdWRvIiBdXTsgdGhlbgogICAgICBzdHlsZT1wcmVjb21tYW5kCiAg ICAgIG5leHRfd29yZD0ke25leHRfd29yZC8vOnJlZ3VsYXI6L30KICAgICAgbmV4dF93b3JkKz0n OnN1ZG9fb3B0OicKICAgICAgbmV4dF93b3JkKz0nOnN0YXJ0OicKICAgICBlbHNlCiAgICAgIF96 c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJfZXhwYW5kX3BhdGggJGFyZwogICAgICBsb2Nh bCBleHBhbmRlZF9hcmc9IiRSRVBMWSIKICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9fdHlwZSAk e2V4cGFuZGVkX2FyZ30KICAgICAgbG9jYWwgcmVzPSIkUkVQTFkiCiAgICAgICgpIHsKICAgICAg ICAjIFNwZWNpYWwtY2FzZTogY29tbWFuZCB3b3JkIGlzICckZm9vJywgbGlrZSB0aGF0LCB3aXRo b3V0IGJyYWNlcyBvciBhbnl0aGluZy4KICAgICAgICAjCiAgICAgICAgIyBUaGF0J3Mgbm90IGVu dGlyZWx5IGNvcnJlY3QgLS0tIGlmIHRoZSBwYXJhbWV0ZXIncyB2YWx1ZSBoYXBwZW5zIHRvIGJl IGEgcmVzZXJ2ZWQKICAgICAgICAjIHdvcmQsIHRoZSBwYXJhbWV0ZXIgZXhwYW5zaW9uIHdpbGwg YmUgaGlnaGxpZ2h0ZWQgYXMgYSByZXNlcnZlZCB3b3JkIC0tLSBidXQgdGhhdAogICAgICAgICMg aW5jb3JyZWN0bmVzcyBpcyBvdXR3ZWlnaGVkIGJ5IHRoZSB1c2FiaWxpdHkgaW1wcm92ZW1lbnQg b2YgcGVybWl0dGluZyB0aGUgdXNlIG9mCiAgICAgICAgIyBwYXJhbWV0ZXJzIHRoYXQgcmVmZXIg dG8gY29tbWFuZHMsIGZ1bmN0aW9ucywgYW5kIGJ1aWx0aW5zLgogICAgICAgIGxvY2FsIC1hIG1h dGNoIG1iZWdpbiBtZW5kCiAgICAgICAgbG9jYWwgTUFUQ0g7IGludGVnZXIgTUJFR0lOIE1FTkQK ICAgICAgICBpZiBbWyAkcmVzID09IG5vbmUgXV0gJiYgKCggJHsrcGFyYW1ldGVyc30gKSkgJiYK ICAgICAgICAgICBbWyAke2FyZ1sxXX0gPT0gXCQgXV0gJiYgW1sgJHthcmc6MX0gPX4gXihbQS1a YS16X11bQS1aYS16MC05X10qfFswLTldKykkIF1dICYmCiAgICAgICAgICAgKCggJHsrcGFyYW1l dGVyc1ske01BVENIfV19ICkpCiAgICAgICAgICAgdGhlbgogICAgICAgICAgX3pzaF9oaWdobGln aHRfbWFpbl9fdHlwZSAkeyhQKU1BVENIfQogICAgICAgICAgcmVzPSRSRVBMWQogICAgICAgIGZp CiAgICAgIH0KICAgICAgY2FzZSAkcmVzIGluCiAgICAgICAgcmVzZXJ2ZWQpICAgICAgIHN0eWxl PXJlc2VydmVkLXdvcmQ7OwogICAgICAgICdzdWZmaXggYWxpYXMnKSBzdHlsZT1zdWZmaXgtYWxp YXM7OwogICAgICAgIGFsaWFzKSAgICAgICAgICAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ZWdlciBpbnNhbmVfYWxpYXMKICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRh cmcgaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElzc3VlICMyNjM6IGFsaWFzZXMg d2l0aCAnPScgb24gdGhlaXIgTEhTLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgY2FzZXM6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0gVW5z dXBwb3J0ZWQsIGJyZWFrcyAnYWxpYXMgLUwnIG91dHB1dCwgYnV0IGludm9rYWJsZToKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgnPScqKSA6OzsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgLSBVbnN1cHBvcnRlZCwgbm90IGludm9rYWJsZToKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqJz0nKikgaW5zYW5lX2FsaWFzPTE7OwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyAtIFRoZSBjb21tb24gY2FzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKSA6 OzsKICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCggaW5zYW5lX2FsaWFzICkpOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHlsZT11bmtub3duLXRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9YWxpYXMKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF96c2hfaGlnaGxpZ2h0X21haW5fX3Jlc29sdmVfYWxpYXMgJGFyZwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9jYWwgYWxpYXNfdGFyZ2V0PSIkUkVQTFkiCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9LRU5TX1BSRUNPTU1B TkRTOiMiJGFsaWFzX3RhcmdldCJ9ICYmIC16ICR7KE0pWlNIX0hJR0hMSUdIVF9UT0tFTlNfUFJF Q09NTUFORFM6IyIkYXJnIn0gXV0gJiYgWlNIX0hJR0hMSUdIVF9UT0tFTlNfUFJFQ09NTUFORFMr PSgkYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICBidWlsdGluKSAgICAgICAg c3R5bGU9YnVpbHRpbjs7CiAgICAgICAgZnVuY3Rpb24pICAgICAgIHN0eWxlPWZ1bmN0aW9uOzsK ICAgICAgICBjb21tYW5kKSAgICAgICAgc3R5bGU9Y29tbWFuZDs7CiAgICAgICAgaGFzaGVkKSAg ICAgICAgIHN0eWxlPWhhc2hlZC1jb21tYW5kOzsKICAgICAgICBub25lKSAgICAgICAgICAgaWYg X3pzaF9oaWdobGlnaHRfbWFpbl9oaWdobGlnaHRlcl9jaGVja19hc3NpZ247IHRoZW4KICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHlsZT1hc3NpZ24KICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiBbWyAkYXJnWy0xXSA9PSAnKCcgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluX2FycmF5X2Fzc2lnbm1lbnQ9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXNzaWdubWVudCB0byBhIHNjYWxhciBw YXJhbWV0ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChGb3IgYXJyYXkgYXNzaWdu bWVudHMsIHRoZSBjb21tYW5kIGRvZXNuJ3Qgc3RhcnQgdW50aWwgdGhlICIpIiB0b2tlbi4pCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3dvcmQrPSc6c3RhcnQ6JwogICAgICAgICAg ICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgW1sgJGFyZ1sw LDFdID0gJGhpc3RjaGFyc1swLDFdIF1dICYmICgoICQjYXJnWzAsMl0gPT0gMiApKTsgdGhlbgog ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPWhpc3RvcnktZXhwYW5zaW9uCiAgICAgICAg ICAgICAgICAgICAgICAgIGVsaWYgW1sgJGFyZ1swLDFdID09ICRoaXN0Y2hhcnNbMiwyXSBdXTsg dGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPWhpc3RvcnktZXhwYW5zaW9uCiAg ICAgICAgICAgICAgICAgICAgICAgIGVsaWYgW1sgLW4gJHsoTSlaU0hfSElHSExJR0hUX1RPS0VO U19DT01NQU5EU0VQQVJBVE9SOiMiJGFyZyJ9IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgW1sgJHRoaXNfd29yZCA9PSAqJzpyZWd1bGFyOicqIF1dOyB0aGVuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaGlnaGxpZ2h0cyBlbXB0eSBjb21tYW5kcyAoc2Vt aWNvbG9uIGZvbGxvd3Mgbm90aGluZykgYXMgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIFpzaCBhY2NlcHRzIHRoZW0sIHRob3VnaC4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0eWxlPWNvbW1hbmRzZXBhcmF0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT11bmtub3duLXRva2VuCiAgICAg ICAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoKCBp bl9yZWRpcmVjdGlvbiA9PSAyICkpOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5 bGU9cmVkaXJlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBbWyAkYXJnWzEsMl0g PT0gJygoJyBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICMgQXJpdGhtZXRpYyBl dmFsdWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAg ICAgICAgICAjIE5vdGU6IHByaW9yIHRvIHpzaC01LjEuMS01Mi1nNGJlZDJjZiAod29ya2Vycy8z NjY2OSksIHRoZSAkeyh6KS4uLn0KICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNwbGl0dGVy IHdvdWxkIG9ubHkgb3V0cHV0IHRoZSAnKCgnIHRva2VuIGlmIHRoZSBtYXRjaGluZyAnKSknIGhh ZAogICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVlbiB0eXBlZC4gIFRoZXJlZm9yZSwgdW5k ZXIgdGhvc2UgdmVyc2lvbnMgb2YgenNoLCBCVUZGRVI9IigoIDQyIgogICAgICAgICAgICAgICAg ICAgICAgICAgICMgd291bGQgYmUgaGlnaGxpZ2h0ZWQgYXMgYW4gZXJyb3IgdW50aWwgdGhlIG1h dGNoaW5nICIpKSIgYXJlIHR5cGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAg ICAgICAgICAgICAgICAgICAgICAjIFdlIGhpZ2hsaWdodCBqdXN0IHRoZSBvcGVuaW5nIHBhcmVu dGhlc2VzLCBhcyBhIHJlc2VydmVkIHdvcmQ7IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAg ICAjIGlzIGhvdyBbWyAuLi4gXV0gaXMgaGlnaGxpZ2h0ZWQsIHRvby4KICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHlsZT1yZXNlcnZlZC13b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAg X3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCAkc3RhcnRfcG9zICQoKHN0 YXJ0X3BvcyArIDIpKSAkc3R5bGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5X2Fk ZGVkPTEKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbWyAkYXJnWy0yLC0xXSA9PSAnKSkn IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfenNoX2hpZ2hsaWdodF9tYWlu X2FkZF9yZWdpb25faGlnaGxpZ2h0ICQoKGVuZF9wb3MgLSAyKSkgJGVuZF9wb3MgJHN0eWxlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5X2FkZGVkPTEKICAgICAgICAgICAgICAg ICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBlbGlmIFtbICRhcmcgPT0gJygp JyB8fCAkYXJnID09ICQnXHgyOCcgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAj IGFub255bW91cyBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Vic2hlbGwK ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1yZXNlcnZlZC13b3JkCiAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBfenNoX2hpZ2hs aWdodF9tYWluX2hpZ2hsaWdodGVyX2NoZWNrX3BhdGg7IHRoZW4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0eWxlPSRSRVBMWQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXVua25vd24tdG9rZW4KICAgICAgICAgICAg ICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAg ICAgICAgICAgICA7OwogICAgICAgICopICAgICAgICAgICAgICBfenNoX2hpZ2hsaWdodF9tYWlu X2FkZF9yZWdpb25faGlnaGxpZ2h0ICRzdGFydF9wb3MgJGVuZF9wb3MgY29tbWFuZHR5cGVmcm9t dGhlZnV0dXJlLSRyZXMKICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeV9hZGRlZD0xCiAg ICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgIGVzYWMKICAgICBmaQogICBmaQogICBpZiAo KCAhIGFscmVhZHlfYWRkZWQgKSkgJiYgW1sgJHN0eWxlID09IHVua25vd24tdG9rZW4gXV0gJiYg IyBub3QgaGFuZGxlZCBieSB0aGUgJ2NvbW1hbmQgd29yZCcgY29kZXBhdGgKICAgICAgeyAoKCBp bl9yZWRpcmVjdGlvbiApKSB8fCBbWyAkdGhpc193b3JkID09IConOnJlZ3VsYXI6JyogXV0gfHwg W1sgJHRoaXNfd29yZCA9PSAqJzpzdWRvX29wdDonKiBdXSB8fCBbWyAkdGhpc193b3JkID09ICon OnN1ZG9fYXJnOicqIF1dIH0KICAgdGhlbiAjICRhcmcgaXMgYSBub24tY29tbWFuZCB3b3JkCiAg ICAgIGNhc2UgJGFyZyBpbgogICAgICAgICQnXHgyOScpICMgc3Vic2hlbGwgb3IgZW5kIG9mIGFy cmF5IGFzc2lnbm1lbnQKICAgICAgICAgICAgICAgICBpZiAkaW5fYXJyYXlfYXNzaWdubWVudDsg dGhlbgogICAgICAgICAgICAgICAgICAgc3R5bGU9YXNzaWduCiAgICAgICAgICAgICAgICAgICBp bl9hcnJheV9hc3NpZ25tZW50PWZhbHNlCiAgICAgICAgICAgICAgICAgICBuZXh0X3dvcmQrPSc6 c3RhcnQ6JwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgIHN0eWxlPXJl c2VydmVkLXdvcmQKICAgICAgICAgICAgICAgICBmaTs7CiAgICAgICAgJCdceDdkJykgc3R5bGU9 cmVzZXJ2ZWQtd29yZDs7ICMgYmxvY2sKICAgICAgICAnLS0nKikgICBzdHlsZT1kb3VibGUtaHlw aGVuLW9wdGlvbjs7CiAgICAgICAgJy0nKikgICAgc3R5bGU9c2luZ2xlLWh5cGhlbi1vcHRpb247 OwogICAgICAgICInIiopICAgIHN0eWxlPXNpbmdsZS1xdW90ZWQtYXJndW1lbnQ7OwogICAgICAg ICciJyopICAgIHN0eWxlPWRvdWJsZS1xdW90ZWQtYXJndW1lbnQKICAgICAgICAgICAgICAgICBf enNoX2hpZ2hsaWdodF9tYWluX2FkZF9yZWdpb25faGlnaGxpZ2h0ICRzdGFydF9wb3MgJGVuZF9w b3MgJHN0eWxlCiAgICAgICAgICAgICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9oaWdobGlnaHRl cl9oaWdobGlnaHRfc3RyaW5nCiAgICAgICAgICAgICAgICAgYWxyZWFkeV9hZGRlZD0xCiAgICAg ICAgICAgICAgICAgOzsKICAgICAgICBcJFwnKikgICBzdHlsZT1kb2xsYXItcXVvdGVkLWFyZ3Vt ZW50CiAgICAgICAgICAgICAgICAgX3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hs aWdodCAkc3RhcnRfcG9zICRlbmRfcG9zICRzdHlsZQogICAgICAgICAgICAgICAgIF96c2hfaGln aGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJfaGlnaGxpZ2h0X2RvbGxhcl9zdHJpbmcKICAgICAgICAg ICAgICAgICBhbHJlYWR5X2FkZGVkPTEKICAgICAgICAgICAgICAgICA7OwogICAgICAgICdgJyop ICAgIHN0eWxlPWJhY2stcXVvdGVkLWFyZ3VtZW50OzsKICAgICAgICBbKj9dKnwqW15cXF1bKj9d KikKICAgICAgICAgICAgICAgICAkaGlnaGxpZ2h0X2dsb2IgJiYgc3R5bGU9Z2xvYmJpbmcgfHwg c3R5bGU9ZGVmYXVsdDs7CiAgICAgICAgKikgICAgICAgaWYgZmFsc2U7IHRoZW4KICAgICAgICAg ICAgICAgICBlbGlmIFtbICRhcmdbMCwxXSA9ICRoaXN0Y2hhcnNbMCwxXSBdXSAmJiAoKCAkI2Fy Z1swLDJdID09IDIgKSk7IHRoZW4KICAgICAgICAgICAgICAgICAgIHN0eWxlPWhpc3RvcnktZXhw YW5zaW9uCiAgICAgICAgICAgICAgICAgZWxpZiBbWyAtbiAkeyhNKVpTSF9ISUdITElHSFRfVE9L RU5TX0NPTU1BTkRTRVBBUkFUT1I6IyIkYXJnIn0gXV07IHRoZW4KICAgICAgICAgICAgICAgICAg IGlmIFtbICR0aGlzX3dvcmQgPT0gKic6cmVndWxhcjonKiBdXTsgdGhlbgogICAgICAgICAgICAg ICAgICAgICBzdHlsZT1jb21tYW5kc2VwYXJhdG9yCiAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgIHN0eWxlPXVua25vd24tdG9rZW4KICAgICAgICAgICAgICAgICAg IGZpCiAgICAgICAgICAgICAgICAgZWxpZiAoKCBpbl9yZWRpcmVjdGlvbiA9PSAyICkpOyB0aGVu CiAgICAgICAgICAgICAgICAgICBzdHlsZT1yZWRpcmVjdGlvbgogICAgICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgICAgIGlmIF96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJf Y2hlY2tfcGF0aDsgdGhlbgogICAgICAgICAgICAgICAgICAgICBzdHlsZT0kUkVQTFkKICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ZGVmYXVsdAogICAg ICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgIDs7 CiAgICAgIGVzYWMKICAgIGZpCiAgICBpZiAhICgoIGFscmVhZHlfYWRkZWQgKSk7IHRoZW4KICAg ICAgX3pzaF9oaWdobGlnaHRfbWFpbl9hZGRfcmVnaW9uX2hpZ2hsaWdodCAkc3RhcnRfcG9zICRl bmRfcG9zICRzdHlsZQogICAgICBbWyAkc3R5bGUgPT0gcGF0aCB8fCAkc3R5bGUgPT0gcGF0aF9w cmVmaXggXV0gJiYgX3pzaF9oaWdobGlnaHRfbWFpbl9oaWdobGlnaHRlcl9oaWdobGlnaHRfcGF0 aF9zZXBhcmF0b3JzCiAgICBmaQogICAgaWYgW1sgLW4gJHsoTSlaU0hfSElHSExJR0hUX1RPS0VO U19DT01NQU5EU0VQQVJBVE9SOiMiJGFyZyJ9IF1dOyB0aGVuCiAgICAgIG5leHRfd29yZD0nOnN0 YXJ0OicKICAgICAgaGlnaGxpZ2h0X2dsb2I9dHJ1ZQogICAgZWxpZgogICAgICAgW1sgLW4gJHso TSlaU0hfSElHSExJR0hUX1RPS0VOU19DT05UUk9MX0ZMT1c6IyIkYXJnIn0gJiYgJHRoaXNfd29y ZCA9PSAqJzpzdGFydDonKiBdXSB8fAogICAgICAgW1sgLW4gJHsoTSlaU0hfSElHSExJR0hUX1RP S0VOU19QUkVDT01NQU5EUzojIiRhcmcifSAmJiAkdGhpc193b3JkID09IConOnN0YXJ0OicqIF1d OyB0aGVuCiAgICAgIG5leHRfd29yZD0nOnN0YXJ0OicKICAgIGVsaWYgW1sgJGFyZyA9PSAicmVw ZWF0IiAmJiAkdGhpc193b3JkID09IConOnN0YXJ0OicqIF1dOyB0aGVuCiAgICAgICMgc2tpcCB0 aGUgcmVwZWF0LWNvdW50IHdvcmQKICAgICAgaW5fcmVkaXJlY3Rpb249MgogICAgICAjIFRoZSBy ZWRpcmVjdGlvbiBtZWNoYW5pc20gYXNzdW1lcyAkdGhpc193b3JkIGRlc2NyaWJlcyB0aGUgd29y ZAogICAgICAjIGZvbGxvd2luZyB0aGUgcmVkaXJlY3Rpb24uICBNYWtlIGl0IHNvLgogICAgICAj CiAgICAgICMgVGhhdCB3b3JkIGNhbiBiZSBhIGNvbW1hbmQgd29yZCB3aXRoIHNob3J0bG9vcHMg KGByZXBlYXQgMiBsc2ApCiAgICAgICMgb3IgYSBjb21tYW5kIHNlcGFyYXRvciAoYHJlcGVhdCAy OyBsc2Agb3IgYHJlcGVhdCAyOyBkbyBsczsgZG9uZWApLgogICAgICAjCiAgICAgICMgVGhlIHJl cGVhdC1jb3VudCB3b3JkIHdpbGwgYmUgaGFuZGxlZCBsaWtlIGEgcmVkaXJlY3Rpb24gdGFyZ2V0 LgogICAgICB0aGlzX3dvcmQ9JzpzdGFydDo6cmVndWxhcjonCiAgICBmaQogICAgc3RhcnRfcG9z PSRlbmRfcG9zCiAgICBpZiAoKCBpbl9yZWRpcmVjdGlvbiA9PSAwICkpOyB0aGVuCiAgICAgICMg VGhpcyBpcyB0aGUgZGVmYXVsdC9jb21tb24gY29kZXBhdGguCiAgICAgIHRoaXNfd29yZD0kbmV4 dF93b3JkCiAgICBlbHNlCiAgICAgICMgU3RhbGwgJHRoaXNfd29yZC4KICAgIGZpCiAgZG9uZQp9 CgojIENoZWNrIGlmICRhcmcgaXMgdmFyaWFibGUgYXNzaWdubWVudApfenNoX2hpZ2hsaWdodF9t YWluX2hpZ2hsaWdodGVyX2NoZWNrX2Fzc2lnbigpCnsKICAgIHNldG9wdCBsb2NhbG9wdGlvbnMg ZXh0ZW5kZWRfZ2xvYgogICAgW1sgJGFyZyA9PSBbWzphbHBoYTpdX11bWzphbG51bTpdX10jKHxc WypcXSkofFsrXSk9KiBdXSB8fAogICAgICBbWyAkYXJnID09IFswLTldIyMofFsrXSk9KiBdXQp9 CgpfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hsaWdodGVyX2hpZ2hsaWdodF9wYXRoX3NlcGFyYXRv cnMoKQp7CiAgbG9jYWwgcG9zIHN0eWxlX3BhdGhzZXAKICBzdHlsZV9wYXRoc2VwPSR7c3R5bGV9 X3BhdGhzZXBhcmF0b3IKICBbWyAteiAiJFpTSF9ISUdITElHSFRfU1RZTEVTWyRzdHlsZV9wYXRo c2VwXSIgfHwgIiRaU0hfSElHSExJR0hUX1NUWUxFU1skc3R5bGVdIiA9PSAiJFpTSF9ISUdITElH SFRfU1RZTEVTWyRzdHlsZV9wYXRoc2VwXSIgXV0gJiYgcmV0dXJuIDAKICBmb3IgKCggcG9zID0g c3RhcnRfcG9zOyAkcG9zIDw9IGVuZF9wb3M7IHBvcysrICkpIDsgZG8KICAgIGlmIFtbICRCVUZG RVJbcG9zXSA9PSAvIF1dOyB0aGVuCiAgICAgIF96c2hfaGlnaGxpZ2h0X21haW5fYWRkX3JlZ2lv bl9oaWdobGlnaHQgJCgocG9zIC0gMSkpICRwb3MgJHN0eWxlX3BhdGhzZXAKICAgIGZpCiAgZG9u ZQp9CgojIENoZWNrIGlmICRhcmcgaXMgYSBwYXRoLgojIElmIHllcywgcmV0dXJuIDAgYW5kIGlu ICRSRVBMWSB0aGUgc3R5bGUgdG8gdXNlLgojIEVsc2UsIHJldHVybiBub24temVybyAoYW5kIHRo ZSBjb250ZW50cyBvZiAkUkVQTFkgaXMgdW5kZWZpbmVkKS4KX3pzaF9oaWdobGlnaHRfbWFpbl9o aWdobGlnaHRlcl9jaGVja19wYXRoKCkKewogIF96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0 ZXJfZXhwYW5kX3BhdGggJGFyZzsKICBsb2NhbCBleHBhbmRlZF9wYXRoPSIkUkVQTFkiCgogIFJF UExZPXBhdGgKCiAgW1sgLXogJGV4cGFuZGVkX3BhdGggXV0gJiYgcmV0dXJuIDEKICBbWyAtTCAk ZXhwYW5kZWRfcGF0aCBdXSAmJiByZXR1cm4gMAogIFtbIC1lICRleHBhbmRlZF9wYXRoIF1dICYm IHJldHVybiAwCgogICMgU2VhcmNoIHRoZSBwYXRoIGluIENEUEFUSAogIGxvY2FsIGNkcGF0aF9k aXIKICBmb3IgY2RwYXRoX2RpciBpbiAkY2RwYXRoIDsgZG8KICAgIFtbIC1lICIkY2RwYXRoX2Rp ci8kZXhwYW5kZWRfcGF0aCIgXV0gJiYgcmV0dXJuIDAKICBkb25lCgogICMgSWYgZGlybmFtZSgk YXJnKSBkb2Vzbid0IGV4aXN0LCBuZWl0aGVyIGRvZXMgJGFyZy4KICBbWyAhIC1kICR7ZXhwYW5k ZWRfcGF0aDpofSBdXSAmJiByZXR1cm4gMQoKICAjIElmIHRoaXMgd29yZCBlbmRzIHRoZSBidWZm ZXIsIGNoZWNrIGlmIGl0J3MgdGhlIHByZWZpeCBvZiBhIHZhbGlkIHBhdGguCiAgaWYgW1sgJHtC VUZGRVJbMV19ICE9ICItIiAmJiAkeyNCVUZGRVJ9ID09ICRlbmRfcG9zIF1dICYmCiAgICAgW1sg JFdJREdFVCAhPSB6bGUtbGluZS1maW5pc2ggXV07IHRoZW4KICAgIGxvY2FsIC1hIHRtcAogICAg dG1wPSggJHtleHBhbmRlZF9wYXRofSooTikgKQogICAgKCggJCN0bXAgPiAwICkpICYmIFJFUExZ PXBhdGhfcHJlZml4ICYmIHJldHVybiAwCiAgZmkKCiAgIyBJdCdzIG5vdCBhIHBhdGguCiAgcmV0 dXJuIDEKfQoKIyBIaWdobGlnaHQgc3BlY2lhbCBjaGFycyBpbnNpZGUgZG91YmxlLXF1b3RlZCBz dHJpbmdzCl96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJfaGlnaGxpZ2h0X3N0cmluZygp CnsKICBzZXRvcHQgbG9jYWxvcHRpb25zIG5va3NoYXJyYXlzCiAgbG9jYWwgLWEgbWF0Y2ggbWJl Z2luIG1lbmQKICBsb2NhbCBNQVRDSDsgaW50ZWdlciBNQkVHSU4gTUVORAogIGxvY2FsIGkgaiBr IHN0eWxlCiAgIyBTdGFydGluZyBxdW90ZSBpcyBhdCAxLCBzbyBzdGFydCBwYXJzaW5nIGF0IG9m ZnNldCAyIGluIHRoZSBzdHJpbmcuCiAgZm9yICgoIGkgPSAyIDsgaSA8IGVuZF9wb3MgLSBzdGFy dF9wb3MgOyBpICs9IDEgKSkgOyBkbwogICAgKCggaiA9IGkgKyBzdGFydF9wb3MgLSAxICkpCiAg ICAoKCBrID0gaiArIDEgKSkKICAgIGNhc2UgIiRhcmdbJGldIiBpbgogICAgICAnJCcgKSBzdHls ZT1kb2xsYXItZG91YmxlLXF1b3RlZC1hcmd1bWVudAogICAgICAgICAgICAjIExvb2sgZm9yIGFu IGFscGhhbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZS4KICAgICAgICAgICAgaWYgW1sgJHthcmc6JGl9 ID1+IF4oW0EtWmEtel9dW0EtWmEtejAtOV9dKnxbMC05XSspIF1dIDsgdGhlbgogICAgICAgICAg ICAgICgoIGsgKz0gJCNNQVRDSCApKSAjIGhpZ2hsaWdodCB0aGUgcGFyYW1ldGVyIG5hbWUKICAg ICAgICAgICAgICAoKCBpICs9ICQjTUFUQ0ggKSkgIyBza2lwIHBhc3QgaXQKICAgICAgICAgICAg ZWxpZiBbWyAke2FyZzokaX0gPX4gXlt7XShbQS1aYS16X11bQS1aYS16MC05X10qfFswLTldKylb fV0gXV0gOyB0aGVuCiAgICAgICAgICAgICAgKCggayArPSAkI01BVENIICkpICMgaGlnaGxpZ2h0 IHRoZSBwYXJhbWV0ZXIgbmFtZSBhbmQgYnJhY2VzCiAgICAgICAgICAgICAgKCggaSArPSAkI01B VENIICkpICMgc2tpcCBwYXN0IGl0CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBjb250 aW51ZQogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAiXFwiKSBzdHlsZT1iYWNr LWRvdWJsZS1xdW90ZWQtYXJndW1lbnQKICAgICAgICAgICAgaWYgW1sgXFxcYFwiXCQgPT0gKiRh cmdbJGkrMV0qIF1dOyB0aGVuCiAgICAgICAgICAgICAgKCggayArPSAxICkpICMgQ29sb3IgZm9s bG93aW5nIGNoYXIgdG9vLgogICAgICAgICAgICAgICgoIGkgKz0gMSApKSAjIFNraXAgcGFyc2lu ZyB0aGUgZXNjYXBlZCBjaGFyLgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgY29udGlu dWUKICAgICAgICAgICAgZmkKICAgICAgICAgICAgOzsKICAgICAgKikgY29udGludWUgOzsKCiAg ICBlc2FjCiAgICBfenNoX2hpZ2hsaWdodF9tYWluX2FkZF9yZWdpb25faGlnaGxpZ2h0ICRqICRr ICRzdHlsZQogIGRvbmUKfQoKIyBIaWdobGlnaHQgc3BlY2lhbCBjaGFycyBpbnNpZGUgZG9sbGFy LXF1b3RlZCBzdHJpbmdzCl96c2hfaGlnaGxpZ2h0X21haW5faGlnaGxpZ2h0ZXJfaGlnaGxpZ2h0 X2RvbGxhcl9zdHJpbmcoKQp7CiAgc2V0b3B0IGxvY2Fsb3B0aW9ucyBub2tzaGFycmF5cwogIGxv Y2FsIC1hIG1hdGNoIG1iZWdpbiBtZW5kCiAgbG9jYWwgTUFUQ0g7IGludGVnZXIgTUJFR0lOIE1F TkQKICBsb2NhbCBpIGogayBzdHlsZQogIGxvY2FsIEFBCiAgaW50ZWdlciBjCiAgIyBTdGFydGlu ZyBkb2xsYXItcXVvdGUgaXMgYXQgMToyLCBzbyBzdGFydCBwYXJzaW5nIGF0IG9mZnNldCAzIGlu IHRoZSBzdHJpbmcuCiAgZm9yICgoIGkgPSAzIDsgaSA8IGVuZF9wb3MgLSBzdGFydF9wb3MgOyBp ICs9IDEgKSkgOyBkbwogICAgKCggaiA9IGkgKyBzdGFydF9wb3MgLSAxICkpCiAgICAoKCBrID0g aiArIDEgKSkKICAgIGNhc2UgIiRhcmdbJGldIiBpbgogICAgICAiXFwiKSBzdHlsZT1iYWNrLWRv bGxhci1xdW90ZWQtYXJndW1lbnQKICAgICAgICAgICAgZm9yICgoIGMgPSBpICsgMSA7IGMgPD0g ZW5kX3BvcyAtIHN0YXJ0X3BvcyA7IGMgKz0gMSApKTsgZG8KICAgICAgICAgICAgICBbWyAiJGFy Z1skY10iICE9IChbMC05eFh1VWEtZkEtRl0pIF1dICYmIGJyZWFrCiAgICAgICAgICAgIGRvbmUK ICAgICAgICAgICAgQUE9JGFyZ1skaSsxLCRjLTFdCiAgICAgICAgICAgICMgTWF0Y2hpbmcgZm9y IEhFWCBhbmQgT0NUIHZhbHVlcyBsaWtlIFwweEE2LCBceEE2IG9yIFwwMTIKICAgICAgICAgICAg aWYgW1sgICAgIiRBQSIgPX4gIl4oeHxYKVswLTlhLWZBLUZdezEsMn0iCiAgICAgICAgICAgICAg ICAgIHx8ICIkQUEiID1+ICJeWzAtN117MSwzfSIKICAgICAgICAgICAgICAgICAgfHwgIiRBQSIg PX4gIl51WzAtOWEtZkEtRl17MSw0fSIKICAgICAgICAgICAgICAgICAgfHwgIiRBQSIgPX4gIl5V WzAtOWEtZkEtRl17MSw4fSIKICAgICAgICAgICAgICAgXV07IHRoZW4KICAgICAgICAgICAgICAo KCBrICs9ICQjTUFUQ0ggKSkKICAgICAgICAgICAgICAoKCBpICs9ICQjTUFUQ0ggKSkKICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgIGlmICgoICQjYXJnID4gJGkrMSApKSAmJiBbWyAkYXJn WyRpKzFdID09IFt4WHVVXSBdXTsgdGhlbgogICAgICAgICAgICAgICAgIyBceCBub3QgZm9sbG93 ZWQgYnkgaGV4IGRpZ2l0cyBpcyBwcm9iYWJseSBhbiBlcnJvcgogICAgICAgICAgICAgICAgc3R5 bGU9dW5rbm93bi10b2tlbgogICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgKCggayArPSAx ICkpICMgQ29sb3IgZm9sbG93aW5nIGNoYXIgdG9vLgogICAgICAgICAgICAgICgoIGkgKz0gMSAp KSAjIFNraXAgcGFyc2luZyB0aGUgZXNjYXBlZCBjaGFyLgogICAgICAgICAgICBmaQogICAgICAg ICAgICA7OwogICAgICAqKSBjb250aW51ZSA7OwoKICAgIGVzYWMKICAgIF96c2hfaGlnaGxpZ2h0 X21haW5fYWRkX3JlZ2lvbl9oaWdobGlnaHQgJGogJGsgJHN0eWxlCiAgZG9uZQp9CgojIENhbGxl ZCB3aXRoIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQuCiMgUGVyZm9ybSBmaWxlbmFtZSBl eHBhbnNpb24gKHRpbGRlIGV4cGFuc2lvbikgb24gdGhlIGFyZ3VtZW50IGFuZCBzZXQgJFJFUExZ IHRvIHRoZSBleHBhbmRlZCB2YWx1ZS4KIwojIERvZXMgbm90IHBlcmZvcm0gZmlsZW5hbWUgZ2Vu ZXJhdGlvbiAoZ2xvYmJpbmcpLgpfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hsaWdodGVyX2V4cGFu ZF9wYXRoKCkKewogICgoICQjID09IDEgKSkgfHwgcHJpbnQgLXIgLS0gPiYyICJ6c2gtc3ludGF4 LWhpZ2hsaWdodGluZzogQlVHOiBfenNoX2hpZ2hsaWdodF9tYWluX2hpZ2hsaWdodGVyX2V4cGFu ZF9wYXRoOiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudCIKCiAgIyBUaGUgJH4xIHN5bnRheCBub3Jt YWxseSBwZXJmb3JtcyBmaWxlbmFtZSBnZW5lcmF0aW9uLCBidXQgbm90IHdoZW4gaXQncyBvbiB0 aGUgcmlnaHQtaGFuZCBzaWRlIG9mICR7eDo9eX0uCiAgc2V0b3B0IGxvY2Fsb3B0aW9ucyBub25v bWF0Y2gKICB1bnNldCBSRVBMWQogIDogJHtSRVBMWTo9JHsoUSl+MX19Cn0KCiMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gaGlnaGxpZ2h0ZXIgaW5pdGlh bGl6YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpfenNo X2hpZ2hsaWdodF9tYWluX19wcmVjbWRfaG9vaygpIHsKICBfenNoX2hpZ2hsaWdodF9tYWluX19j b21tYW5kX3R5cGVfY2FjaGU9KCkKfQoKYXV0b2xvYWQgLVUgYWRkLXpzaC1ob29rCmlmIGFkZC16 c2gtaG9vayBwcmVjbWQgX3pzaF9oaWdobGlnaHRfbWFpbl9fcHJlY21kX2hvb2sgMj4vZGV2L251 bGw7IHRoZW4KICAjIEluaXRpYWxpemUgY29tbWFuZCB0eXBlIGNhY2hlCiAgdHlwZXNldCAtZ0Eg X3pzaF9oaWdobGlnaHRfbWFpbl9fY29tbWFuZF90eXBlX2NhY2hlCmVsc2UKICBwcmludCAtciAt LSA+JjIgJ3pzaC1zeW50YXgtaGlnaGxpZ2h0aW5nOiBGYWlsZWQgdG8gbG9hZCBhZGQtenNoLWhv b2suIFNvbWUgc3BlZWQgb3B0aW1pemF0aW9ucyB3aWxsIG5vdCBiZSB1c2VkLicKICAjIE1ha2Ug c3VyZSB0aGUgY2FjaGUgaXMgdW5zZXQKICB1bnNldCBfenNoX2hpZ2hsaWdodF9tYWluX19jb21t YW5kX3R5cGVfY2FjaGUKZmkK --001a113f3b7c9d4e07053c9d4b8d--