Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with ESMTP id s7K0RCvZ009205 for ; Wed, 20 Aug 2014 02:27:13 +0200 Received: from relay2.uni-heidelberg.de ([129.206.210.211]) by mx-ha.gmx.net (mxgmx004) with ESMTPS (Nemesis) id 0MQciT-1WwPqh3125-00U5q5 for ; Wed, 20 Aug 2014 02:27:06 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s7K0OJtF001527 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 20 Aug 2014 02:24:19 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s7JM14qj027411; Wed, 20 Aug 2014 02:24:18 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 11313381 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Wed, 20 Aug 2014 02:24:18 +0200 Received: from relay.uni-heidelberg.de (relay.uni-heidelberg.de [129.206.100.212]) by listserv.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id s7K0OIj6011891 for ; Wed, 20 Aug 2014 02:24:18 +0200 Received: from mail-vc0-f179.google.com (mail-vc0-f179.google.com [209.85.220.179]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id s7K0O7Ht030781 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=FAIL) for ; Wed, 20 Aug 2014 02:24:10 +0200 Received: by mail-vc0-f179.google.com with SMTP id hq11so8195632vcb.24 for ; Tue, 19 Aug 2014 17:24:07 -0700 (PDT) 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:content-type; bh=bq5c71YK6hgutBlWzKZjyZtMKp8A7TDneJehsbJcN6k=; b=KdmVYq0wIVRsLTeIKe/SYm9/ZAjltl6iqkEz1xpS2D05N6me0yYhRm67CuvHYdp1B6 KZ0jL3TPtkzhQAE76muvkvza7isosliYRF3geSe7cmQny7TbpuBenzqDZQ9KzZpKcJlX oxwy/1yLGqP3zKXSK24O3b3KxYSt7XYP3jrh0KyHr9W7ovzqGcJ8OM12dVnD3211L6iY kSLXhOHI9rZdhZPEgTf+vC1yRCQjQrpC4uVKg3IR2450gCCgfS+DJkbfgwmV+sC9BnsS HtWVKFRI0If1bH7i7SFvnKMS9TYPtlyABjpwfNdA8CdVIn9NkTpEZpuBQ0lCbr0xXYqa y7sg== X-Gm-Message-State: ALoCoQlfuk05IVMKw3G0+xxaR/ekrAn2gXTcPHUHeOEGdYFurSPOmsu/lN1WeVTXJysKHtFlcCo/ X-Received: by 10.52.142.102 with SMTP id rv6mr7973564vdb.26.1408494246810; Tue, 19 Aug 2014 17:24:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.69.145 with HTTP; Tue, 19 Aug 2014 17:23:46 -0700 (PDT) References: Content-Type: multipart/mixed; boundary=bcaec51a7c4c4049d00501049f17 Message-ID: Date: Tue, 19 Aug 2014 20:23:46 -0400 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: "Allred, Sean" Subject: Re: Thoughts on xtemplate To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: Envelope-To: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3; X-GMX-Antivirus: 0 (no virus found) X-UI-Filterresults: notjunk:1;V01:K0:bHg6vkkSDe8=:gZySBRM/qn9DBjJZIfH4IkCSkM DL7piDg0WS04slZIY4bvt9GvcmXcc/nKojyqBF+Upvmt1q4LnfM78JqRqnfQrt8anKwOdeaiE c1Ra15qJK3nZZ2jdVHyqK930Ek5IIcM4qFkkg+zSgrhDA8WeNTAAgi9ydEx2L5CmXeqMpm7/9 NCTODO7QWKuhxmjroLp3d9lLdKwmPcurdG+8wX8+GJD3Nvq4cPFzqLfU7HNW8voO35u4oXaXg JFRtfYTRblcQLSwvuf1cXJxPGUCPVnsm2h92NSAjmC94/EXUYMUmYQVMbWE0Rt86ixjVlRKvg WiwPUJLnR1GfsFYQs9m/c25e7aiY5Wq0WZGVhT/cM3Aojs3EXODuAq7Dluvcfw96/rfamY1Jd 4Z4pYlcGB01y7/U+pqEa4GdbwaTfbiEvtNvu2xIGtUn/85AEI1AfaBJLXRoe4dgjCe6fW475h mqLJ+LwQnKrBkEs2kWMcklV3p5ubTlwyhvlo476+CPgCDriBlg92NsFoGSXZ0ZGNRA6qKXpCu WGc9vXSrmNceKfFPYLXdkwtqC5+4dwwh2INnzxpjoxXWBpfO42soz3DPNdY0OgVl6jdJu+umR plmNg62E2YivPfGDDr2wGf/4rcr448dVskS+S5XnDgaQ/H8oemne7mzWrxTB/zRD0L+87yvdu AkjMvX/jWVUH5Cr2lv0NH1+bl6TgY1SrvSyGtwDJY+fB3Vj5IZ58CKKxAUrrPZksEbfhzh5TN 5ODwGQO9rqrOTWBR6pMmJrpdpOy+l5udZmTN+3gaGqfjCfif76y3wJgkjo+qVWCKTHMz/1kCb g/awj91lmeXimbv0nvB8RbWyDPETvObS+h8thdYAwonmJxLQL6EbQe1ShvIfxwmDD8NemomIR XlUzDfsNhbBIGOqbl9hMnkcsCRzGn938FpwSJYPyyNNKhAKjvdludakcWbW1dS+Uu6E250Lya XMQPJi61+yF43ngaVzKSQf5N2BhGliPKIVzKWMzPuS6mo+mx4tyTIHxu6TLPV8xnifjzPLRsf X3TIAKokhlupWo9Tfbe5yrKrab9xRnugVgpfwqKGsAYpHQL3g1P8IkA1d7nCnDQWWFjUYWD4e qqwFMxHFgeQxG514u8JIMcSbbKmFHKCiL2jH+Lsd4aRTN4xfLXF/QmV8Dpob8MVEXxuTW/BLK 8mCJ1SBG2RuCxGAWnwpHxux3SJE5sbmJWpUl7GfZhIcGjAUeF/qBzzxsAgTRrVfnCLbLX+xMJ D/MaSjs5IijC+hRrbLN9epi/5Vr5/1vk5esKkA7vdN4smp7lKEQ59VqB9ORwv7/+j3H4OE/Pw 5ImSW7/9KSNaANGc+7V9SCTBK1iffaLG9Dk093xx7YG5X/f6POxxVH2DhAIm621dthtxoxAnQ 2eXxwj07LgH5g74byehh/ubB5Q4RZOzwuOZw1Np8YvsBJpUNaCpNVOx5j1bfzJZQ0RoNUXKQ8 LUJRD40DUbVTpnyhaiqTz6T8xyy9StDfu5G59JbfAqu5rHqZTz X-UI-Loop:V01:evjWNEux3mg=:djMC0sQwduZQxNjQ4rALL4uVIBVPiiqE1Xuh407L+Sw= X-UI-Out-Filterresults: notjunk:1; Status: R X-Status: X-Keywords: X-UID: 7566 --bcaec51a7c4c4049d00501049f17 Content-Type: multipart/alternative; boundary=bcaec51a7c4c4049cc0501049f15 --bcaec51a7c4c4049cc0501049f15 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I've drawn up a syntax proposal (as an Org file) on GitHub: https://gist.github.com/vermiculus/d8ac080f3f8c7ec2bed6#file-idea-org I'm attaching the Org file itself and the (tangled) example syntax for those of you who use Gnus or a similar client. I've managed to *completely* screw up my environment as far as my own email goes, unfortunately=E2=80=A6 Best, Sean On Sat, Aug 16, 2014 at 1:14 AM, Sean Allred wrote: > Hello everyone, > > There was recently a conversation on TeX.SX [1] between (mainly) Joseph > Wright and myself. Please see that site for the full conversation that > prompted this. > > Disclaimer: I'm a huge fan of the template idea. It is a good system > and I don't want it to see unnecessary change. > > Disclaimer to the disclaimer: it's the only design management paradigm > that I've come into contact with in regards to TeX. :) > > I'd like to raise attention to a possible issue with xtemplate's > design. Currently, an 'object' can receive no more than nine arguments > per TeX's syntax limitations: you cannot refer to a tenth argument in a > macro definition. That is, > > \DeclareObject { foo } { 10 } > > will fail. In TeX terms, this makes total sense. You cannot have more > than nine mandatory arguments for any single macro---that's just the way > it is. But speaking in terms of design, there are instances where such > an object can have more than nine arguments. In reality, this is the > decision of the document designer. There should be no such limitation > on the design. > > I'll refer you to the original post for Joseph's full answer, but his > suggestion is, in my opinion, a very appropriate one: going for a > completely key--value interface on the design layer (note: not the > author layer). It would certainly remove the limitation on the number > of mandatory qualities an object may have. It would also seem to be > more befitting of the verbose clarity of the design layer to do this. > > I'd like to call for thoughts on the topic. Again, I strongly recommend > you read Jospeh's response to my question [1]. I recognize that the > premise of the question might be flawed---in this instance (no pun > intended), it would likely be more appropriate to create a template with > all of the 'extras'---but the concern is valid and genuine. > > All the best, > Sean > > [1]: http://tex.stackexchange.com/q/196285 > > -- > Sean Allred > --=20 Sean Allred --bcaec51a7c4c4049cc0501049f15 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
I've drawn up a syntax proposal (as an Org = file) on GitHub:


I'm attaching the Org file itself and the (tangled)= example syntax for those of you who use Gnus or a similar client. I've= managed to *completely* screw up my environment as far as my own email goe= s, unfortunately=E2=80=A6

Best,
Sean


On Sat, Aug 16, 2014 at 1:14 AM, Sea= n Allred <seallred@smcm.edu> wrote:
Hello everyone,

There was recently a conversation on TeX.SX [1] between (mainly) Joseph
Wright and myself.=C2=A0 Please see that site for the full conversation tha= t
prompted this.

Disclaimer: I'm a huge fan of the template idea.=C2=A0 It is a go= od system
and I don't want it to see unnecessary change.

Disclaimer to the disclaimer: it's the only design management paradigm<= br> that I've come into contact with in regards to TeX.=C2=A0 :)

I'd like to raise attention to a possible issue with xtemplate's design.=C2=A0 Currently, an 'object' can receive no more than nine = arguments
per TeX's syntax limitations: you cannot refer to a tenth argument in a=
macro definition.=C2=A0 That is,

=C2=A0 =C2=A0 \DeclareObject { foo } { 10 }

will fail.=C2=A0 In TeX terms, this makes total sense.=C2=A0 You cannot hav= e more
than nine mandatory arguments for any single macro---that's just the wa= y
it is.=C2=A0 But speaking in terms of design, there are instances where suc= h
an object can have more than nine arguments.=C2=A0 In reality, this is the<= br> decision of the document designer.=C2=A0 There should be no such limitation=
on the design.

I'll refer you to the original post for Joseph's full answer, but h= is
suggestion is, in my opinion, a very appropriate one: going for a
completely key--value interface on the design layer (note: not the
author layer).=C2=A0 It would certainly remove the limitation on the number=
of mandatory qualities an object may have.=C2=A0 It would also seem to be more befitting of the verbose clarity of the design layer to do this.

I'd like to call for thoughts on the topic.=C2=A0 Again, I strongly rec= ommend
you read Jospeh's response to my question [1].=C2=A0 I recognize = that the
premise of the question might be fl= awed---in this instance (no pun
intended), it would likely be more appropriate to create a template with all of the 'extras'---but the concern is valid and genuine.

All the best,
Sean

[1]: ht= tp://tex.stackexchange.com/q/196285

--
Sean Allred



--
Sean Allred
--bcaec51a7c4c4049cc0501049f15-- --bcaec51a7c4c4049d00501049f17 Content-Type: application/x-tex; name="example.tex" Content-Disposition: attachment; filename="example.tex" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz1x19en0 ClxEZWNsYXJlT2JqZWN0VHlwZSB7IG5hbWUgfQogIHsKICAgIGZpcnN0ICA6IHRva2VubGlzdCAg ICAgICAgICAgICAgICAgICAsCiAgICBtaWRkbGUgOiB0b2tlbmxpc3QgICAgICAgICAgICAgICAg ICAgLAogICAgbGFzdCAgIDogdG9rZW5saXN0ICAgICAgICAgICAgICAgICAgICwKICAgIGZpcnN0 ICA6IC5yZXF1aXJlZCAgICAgICAgICAgICAgICAgICAsCiAgICBsYXN0ICAgOiAucmVxdWlyZWQg ICAgICAgICAgICAgICAgICAgLAogIH0KClxEZWNsYXJlVGVtcGxhdGVJbnRlcmZhY2UgeyBuYW1l IH0geyBmdWxsIH0KICB7CiAgICByZXZlcnNlZCAgICAgICAgICAgOiBib29sZWFuID0gZmFsc2Ug LAogICAgdXNlLWZpcnN0LW5hbWUgICAgIDogYm9vbGVhbiA9IHRydWUgICwKICAgIHVzZS1taWRk bGUtbmFtZSAgICA6IGJvb2xlYW4gPSB0cnVlICAsCiAgICB1c2UtbGFzdC1uYW1lICAgICAgOiBi b29sZWFuID0gdHJ1ZSAgLAogICAgZmlyc3QtbmFtZS1mb3JtYXQgIDogdG9rZW5saXN0ICAgICAg ICwKICAgIG1pZGRsZS1uYW1lLWZvcm1hdCA6IHRva2VubGlzdCAgICAgICAsCiAgICBsYXN0LW5h bWUtZm9ybWF0ICAgOiB0b2tlbmxpc3QgICAgICAgLAogIH0KClx0bF9uZXc6TiBcbF9uYW1lc19m aXJzdF9uYW1lX3RsClx0bF9uZXc6TiBcbF9uYW1lc19taWRkbGVfbmFtZV90bApcdGxfbmV3Ok4g XGxfbmFtZXNfbGFzdF9uYW1lX3RsCgpcdGxfbmV3Ok4gXGxfbmFtZXNfZmlyc3RfZm9ybWF0X3Rs Clx0bF9uZXc6TiBcbF9uYW1lc19taWRkbGVfZm9ybWF0X3RsClx0bF9uZXc6TiBcbF9uYW1lc19s YXN0X2Zvcm1hdF90bAoKXGJvb2xfbmV3Ok4gXGxfbmFtZXNfdXNlX2ZpcnN0X2Jvb2wKXGJvb2xf bmV3Ok4gXGxfbmFtZXNfdXNlX21pZGRsZV9ib29sClxib29sX25ldzpOIFxsX25hbWVzX3VzZV9s YXN0X2Jvb2wKClxib29sX25ldzpOIFxsX25hbWVzX3JldmVyc2VkX2Jvb2wKClxEZWNsYXJlVGVt cGxhdGVDb2RlIHsgbmFtZSB9IHsgZnVsbCB9CiAgewogICAgZmlyc3QgICAgICAgICAgICAgID0g XGxfbmFtZXNfZmlyc3RfbmFtZV90bCAgICAsCiAgICBtaWRkbGUgICAgICAgICAgICAgPSBcbF9u YW1lc19taWRkbGVfbmFtZV90bCAgICwKICAgIGxhc3QgICAgICAgICAgICAgICA9IFxsX25hbWVz X2xhc3RfbmFtZV90bCAgICAgLAogIH0KICB7CiAgICByZXZlcnNlZCAgICAgICAgICAgPSBcbF9u YW1lc19yZXZlcnNlZF9ib29sICAgICwKICAgIHVzZS1maXJzdC1uYW1lICAgICA9IFxsX25hbWVz X3VzZV9maXJzdF9ib29sICAgLAogICAgdXNlLW1pZGRsZS1uYW1lICAgID0gXGxfbmFtZXNfdXNl X21pZGRsZV9ib29sICAsCiAgICB1c2UtbGFzdC1uYW1lICAgICAgPSBcbF9uYW1lc191c2VfbGFz dF9ib29sICAgICwKICAgIGZpcnN0LW5hbWUtZm9ybWF0ICA9IFxsX25hbWVzX2ZpcnN0X2Zvcm1h dF90bCAgLAogICAgbWlkZGxlLW5hbWUtZm9ybWF0ID0gXGxfbmFtZXNfbWlkZGxlX2Zvcm1hdF90 bCAsCiAgICBsYXN0LW5hbWUtZm9ybWF0ICAgPSBcbF9uYW1lc19sYXN0X2Zvcm1hdF90bCAgICwK ICB9CiAgewogICAgXEFzc2lnblRlbXBsYXRlS2V5cwogICAgCiAgICBcYm9vbF9pZjpuVAogICAg ewogICAgICBcdGxfZW1wdHlfcDpOIFxsX25hbWVzX21pZGRsZV9uYW1lX3RsICYmCiAgICAgIFxs X25hbWVzX3VzZV9taWRkbGVfYm9vbAogICAgfQogICAgewogICAgICBcdHlwZW91dHshIFRoaXMg aXMgYW4gZXJyb3IgYW5kIEknbSBmYXIgdG9vIGxhenkgdG8gY3JlYXRlIGEgICAgXl5KCiAgICAg ICAgICAgICAgICAgcHJvcGVyIGwzbXNnLiAgKEluIHByYWN0aWNlLCBwcm9iYWJseSBiZXR0ZXIg dG8gYmUgICBeXkoKICAgICAgICAgICAgICAgICBhIHdhcm5pbmcuKSAgV2Ugd2VyZSBwcm92aWRl ZCBubyBtaWRkbGUgbmFtZSB0byB1c2UgIF5eSgogICAgICAgICAgICAgICAgIHdpdGggdGhlIHVz ZS1taWRkbGUtbmFtZSBkaXJlY3RpdmUufQogICAgfQogICAgCiAgICBcYm9vbF9pZjpOVEYgXGxf bmFtZXNfcmV2ZXJzZWRfYm9vbAogICAgewogICAgICBcYm9vbF9pZjpOVCBcbF9uYW1lc191c2Vf bGFzdF9ib29sCiAgICAgIHt7XHRsX3VzZTpOIFxsX25hbWVzX2xhc3RfZm9ybWF0X3RsIFxsX25h bWVzX2xhc3RfbmFtZV90bH19CiAgICAgIFxib29sX2lmOm5UCiAgICAgIHsKICAgICAgICBcbF9u YW1lc191c2VfZmlyc3RfYm9vbCAmJgogICAgICAgIFxsX25hbWVzX3VzZV9sYXN0X2Jvb2wKICAg ICAgfQogICAgICB7ICwgfiB9CiAgICAgIFxib29sX2lmOk5UIFxsX25hbWVzX3VzZV9maXJzdF9i b29sCiAgICAgIHt7XHRsX3VzZTpOIFxsX25hbWVzX2ZpcnN0X2Zvcm1hdF90bCBcbF9uYW1lc19m aXJzdF9uYW1lX3RsfX0KICAgICAgXGJvb2xfaWY6TlQgXGxfbmFtZXNfdXNlX21pZGRsZV9ib29s CiAgICAgIHsKICAgICAgICBcYm9vbF9pZjpOVCBcbF9uYW1lc191c2VfZmlyc3RfYm9vbAogICAg ICAgIHsgfiB9CiAgICAgICAge1x0bF91c2U6TiBcbF9uYW1lc19taWRkbGVfZm9ybWF0X3RsIFxs X25hbWVzX21pZGRsZV9uYW1lX3RsfQogICAgICB9CiAgICB9CiAgICB7CiAgICAgIFxib29sX2lm Ok5UIFxsX25hbWVzX3VzZV9maXJzdF9ib29sCiAgICAgIHsKICAgICAgICB7XHRsX3VzZTpOIFxs X25hbWVzX2ZpcnN0X2Zvcm1hdF90bCBcbF9uYW1lc19maXJzdF9uYW1lX3RsfQogICAgICAgIFxi b29sX2lmOm5UCiAgICAgICAgewogICAgICAgICAgXGxfbmFtZXNfdXNlX21pZGRsZV9ib29sIHx8 CiAgICAgICAgICBcbF9uYW1lc191c2VfbGFzdF9ib29sCiAgICAgICAgfQogICAgICAgIHsgfiB9 CiAgICAgIH0KICAgICAgCiAgICAgIFxib29sX2lmOk5UIFxsX25hbWVzX3VzZV9taWRkbGVfYm9v bAogICAgICB7CiAgICAgICAge1x0bF91c2U6TiBcbF9uYW1lc19taWRkbGVfZm9ybWF0X3RsIFxs X25hbWVzX21pZGRsZV9uYW1lX3RsfQogICAgICAgIFxib29sX2lmOk5UIFxsX25hbWVzX3VzZV9s YXN0X2Jvb2wKICAgICAgICB7IH4gfQogICAgICB9CiAgICAgIFxib29sX2lmOk5UIFxsX25hbWVz X3VzZV9sYXN0X2Jvb2wKICAgICAgewogICAgICAgIHtcdGxfdXNlOk4gXGxfbmFtZXNfbGFzdF9m b3JtYXRfdGwgXGxfbmFtZXNfbGFzdF9uYW1lX3RsfQogICAgICB9CiAgICB9CiAgfQoKXERlY2xh cmVJbnN0YW5jZSB7IG5hbWUgfSB7IHN0YW5kYXJkIH0geyBmdWxsIH0geyB9CgpcRGVjbGFyZURv Y3VtZW50Q29tbWFuZCBcTmFtZSB7ID57XFNwbGl0QXJndW1lbnR7MX17fn19bSB9CiAgewogICAg XFVzZUluc3RhbmNlIHsgbmFtZSB9IHsgc3RhbmRhcmQgfQogICAgICB7CiAgICAgICAgZmlyc3Qg PSBcdXNlX2k6bm4gICMyLAogICAgICAgIGxhc3QgID0gXHVzZV9paTpubiAjMiwKICAgICAgfQog IH0KClxEZWNsYXJlRG9jdW1lbnRDb21tYW5kIFxTcGVjaWFsTmFtZSB7IG0gbSBtIG0gfQogIHsK ICAgIFxVc2VUZW1wbGF0ZSB7IG5hbWUgfSB7IGZ1bGwgfSB7ICMxIH0KICAgICAgewogICAgICAg IGZpcnN0ICA9ICMyLAogICAgICAgIGxhc3QgICA9ICMzLAogICAgICAgIG1pZGRsZSA9ICM0LAog ICAgICB9CiAgfQo= --bcaec51a7c4c4049d00501049f17 Content-Type: application/octet-stream; name="idea.org" Content-Disposition: attachment; filename="idea.org" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hz1x19eu1 IytUaXRsZTogVGhvdWdodHMgb24gPXh0ZW1wbGF0ZT0KIytBdXRob3I6IFNlYW4gQWxscmVkCiMr RGF0ZTogWzIwMTQtMDgtMTkgVHVlXQoKSSB3YW50IHRvIHN0YXJ0IGFsbCBvZiB0aGlzIG91dCBi eSBzYXlpbmcgdGhhdCBJIGhhdmUgL25vLyBpZGVhIHdoZXJlIHRvIGJlZ2luCmFjdHVhbGx5IGlt cGxlbWVudGluZyBhbGwgb2YgdGhpcyBpbiB0aGUgY29kZS1iZWhpbmQgYW5kIHRoYXQgSSBtYXJ2 ZWwgYXQgdGhlCnJlYWxpdHkgb2YgPXh0ZW1wbGF0ZT0gYXMgaXQgc3RhbmRzIGltcGxlbWVudGVk IGluID1leHBsMz0uICBUaGF0IHNhaWQsCmludGVyZmFjZSBkZXNpZ24gaXMgbm90aGluZyB0byBz Y29mZiBhdCAoYXMgSSdtIHN1cmUgbWVtYmVycyBvZiB0aGlzIGxpc3QgYXJlCmF3YXJlKSwgc28g SSdtIGNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGtpbmQgb2YgcHJv cG9zYWwgaXMgb2YKc3Vic3RhbmNlLgoKVGhpcyBpcyBhbiBvcGluaW9uIHBpZWNlIG1lYW50IGZv ciBjb25zdHJ1Y3RpdmUgcHVycG9zZXMgPTopPQoKKiBJbnRyb2R1Y3Rpb24KVGhpcyBmaWxlIGlz IGJlc3Qgdmlld2VkIHdpdGhpbiBlbWFjcyB1bmRlciA9b3JnLW1vZGU9LiAgU29ycnksIHZpIChl dCBhbC4pLgoKUGxlYXNlIHNlZSB0aGUgT3JnIHNvdXJjZSBmb3IgdGhlIFtbaHR0cDovL3RleC5z dGFja2V4Y2hhbmdlLmNvbS9xLzE5NjExNS8xNzQyM11bb3JpZ2luYWwgcXVlc3Rpb25dXSBhbmQg W1todHRwOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL2EvMTk2MTI0LzE3NDIzXVtKb3NlcGggV3Jp Z2h0J3MgYW5zd2VyXV0sCmJ1dCB0byBrZWVwIHRoaXMgZmlsZSBzaG9ydCAoYXMgdmlld2VkIG9u IEdpdEh1YiksIEkndmUgY29tbWVudGVkIGl0IG91dCBoZXJlLgoKSW4gYnJpZWYsIHRoZSBkaXNj dXNzaW9uIHJldm9sdmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW1pdGF0aW9uIG9mID14dGVtcGxh dGU9J3MKb2JqZWN0IGRlY2xhcmF0aW9uIHN5bnRheC4gIFNpbmNlIFRlWCByZXN0cmljdHMgdGhl IG51bWJlciBvZiBhcmd1bWVudHMgYSBzaW5nbGUKbWFjcm8gY2FuIHRha2UsIGFuIG9iamVjdCBp cyBsaW1pdGVkIHRvIG5pbmUgcXVhbGl0aWVzLiAgVGhpcyBpcyB1bmFjY2VwdGFibHkKcmVzdHJp Y3RpdmUsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyB0aGluZ3Mgc3VjaCBhcyAnb3B0aW9u YWwnIHBpZWNlcyBvZgpkYXRhIGluIGFuIG9iamVjdC4KCldvcmthcm91bmRzIHN1Y2ggYXMgaW5j bHVkaW5nIHRoZSBvcHRpb25hbCBkYXRhIGluIGEgdGVtcGxhdGUgZGVjbGFyYXRpb24gaXMgYQp2 aW9sYXRpb24gb2YgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBjb250ZW50IGFuZCBwcmVzZW50YXRp b24uICBPYmplY3RzIHNob3VsZCBiZQpkYXRhIGFuZCBvbmx5IGRhdGE7IHRlbXBsYXRlcyBzaG91 bGQgYmUgcHJlc2VudGF0aW9uIGFuZCBvbmx5IHByZXNlbnRhdGlvbi4KCkkga25vdyBvZiBubyBv dGhlciBzb2x1dGlvbnMgdG8gdGhlIHByb2JsZW0gb2Ygb3B0aW9uYWwgZGF0YS4KCiogQ09NTUVO VCBRdWVzdGlvbgpDb25zaWRlciB0aGUgZm9sbG93aW5nIHRyaXZpYWwgZXhhbXBsZToKCiMrYmVn aW5fc3JjIGxhdGV4Clxkb2N1bWVudGNsYXNze2FydGljbGV9Clx1c2VwYWNrYWdle3h0ZW1wbGF0 ZX0KClxFeHBsU3ludGF4T24KXERlY2xhcmVPYmplY3RUeXBlIHsgdGVzdCB9IHsgMTAgfQpcRXhw bFN5bnRheE9mZgoKXGJlZ2lue2RvY3VtZW50fQpvaCwgbm9zZSEKXGVuZHtkb2N1bWVudH0KIytl bmRfc3JjCgo6IEVSUk9SOiB4dGVtcGxhdGUgZXJyb3I6ICJiYWQtbnVtYmVyLW9mLWFyZ3VtZW50 cyIKOiAKOiAtLS0gVGVYIHNhaWQgLS0tCjogISAKOiAhIEJhZCBudW1iZXIgb2YgYXJndW1lbnRz IGZvciBvYmplY3QgdHlwZSAndGVzdCcuCjogISAKOiAhIFNlZSB0aGUgeHRlbXBsYXRlIGRvY3Vt ZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCjogISAKOiAhIEZvciBpbW1lZGlhdGUg aGVscCB0eXBlIEggPHJldHVybj4uCjogIS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uICAKOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAo6IGwuOCBcRGVjbGFyZU9iamVjdFR5cGUgeyB0ZXN0IH0geyAxMCB9Cjog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKOiAtLS0gSEVMUCAtLS0KOiBG cm9tIHRoZSAubG9nIGZpbGUuLi4KOiAKOiB8JycnJycnJycnJycnJycnJycnJycnJycnJycnJycn JycnJycnJycnJycnJycnJycKOiB8IFRoaXMgaXMgYSBjb2RpbmcgZXJyb3IuCjogfCAKOiB8IEFu IG9iamVjdCBtYXkgYWNjZXB0IGJldHdlZW4gMCBhbmQgOSBhcmd1bWVudHMuCjogfCBZb3UgYXNr ZWQgdG8gdXNlIDEwIGFyZ3VtZW50czogdGhpcyBpcyBub3Qgc3VwcG9ydGVkLgo6IHwuLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCkFzIHdlIGtub3csIFRlWCBvbmx5IGZvcm1hbGx5IHN1cHBvcnRzIG1hY3JvcyB0 aGF0IHRha2UgdXAgdG8gOSBhcmd1bWVudHM6CiMrYmVnaW5fc3JjIGxhdGV4ClxkZWZcVG9vTG9u ZyMxIzIjMyM0IzUjNiM3IzgjOXtoYWhhIX0KIytlbmRfc3JjCldoZW4gbmVjZXNzYXJ5IGluIHRo ZSBwYXN0LCB3ZSd2ZSBnb3R0ZW4gYXJvdW5kIHRoaXMgYnkgZGFpc3ktY2hhaW5pbmcgdGhlc2U6 CiMrYmVnaW5fc3JjIGxhdGV4ClxkZWZcbWFjcm97XEBtYWNyb0BhfQpcZGVmXEBtYWNyb0BhIzEj MiMzIzQjNSM2IzcjOHsoc29tZXRoaW5nIHdpdGggOCBhcmd1bWVudHMpXEBtYWNyb0BifQpcZGVm XEBtYWNyb0BiIzEjMiMzIzQjNSM2IzcjOHsoc29tZXRoaW5nIHdpdGggOCBtb3JlIGFyZ3VtZW50 cyl9CiMrZW5kX3NyYwpUaGUgdXNlIG9mIH5cbWFjcm9+IHdvdWxkIG5vdyBuZWNlc3NhcmlseSBl YXQgMTYgdG9rZW5zIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KCk9idmlvdXNseSwgaGF2aW5nIHNv IG1hbnkgYXJndW1lbnRzIGhhcyBiZWVuIHN1cGVyc2VkZWQgaW4gdGhlICdtb2Rlcm4gZXJhJyBi eQp0aGUgdXNlIG9mIGtleS12YWx1ZSBhcmd1bWVudHM6CiMrYmVnaW5fc3JjIGxhdGV4CiUgLi4u IFx1c2VwYWNrYWdle2V4cGwzfSAuLi4gXEV4cGxTeW50YXhPbiAuLi4KXGtleXNfZGVmaW5lOm5u IHsgdGVzdCB9IHsKICBvcHRpb24tMSAudGxfc2V0Ok4gPSBcbF90ZXN0X2tleV9hX3RsLAogIG9w dGlvbi0yIC50bF9zZXQ6TiA9IFxsX3Rlc3Rfa2V5X2JfdGwsCiAgb3B0aW9uLTMgLnRsX3NldDpO ID0gXGxfdGVzdF9rZXlfY190bCwKICAlIC4uLgp9CiMrZW5kX3NyYwpFdmVuIHRob3VnaCBhIGNv bW1hbmQgdXNpbmcgdGhpcyBrZXktdmFsdWUgaW50ZXJmYWNlIHdvdWxkIG9ubHkgY29uc3VtZSBv bmUKdG9rZW4tLS10aGUgZ3JvdXAgY29udGFpbmluZyB0aGUgdXNlcidzIGtleS12YWx1ZSBzZXR0 aW5ncy0tLXRoZSBsb2dpY2FsCnVuZGVyc3RhbmRpbmcgaXMgdGhhdCB+dGVzdH4gdGFrZXMgc29t ZSB+bn4gYXJndW1lbnRzLS0tcG90ZW50aWFsbHkgYWxsIG9mIHRoZW0KcmVxdWlyZWQgKH5vcHRp b24tbiAudmFsdWVfcmVxdWlyZWQ6fikuCgpUaGlzIGxvZ2ljYWwgdW5kZXJzdGFuZGluZyB0aGF0 IGFuIG9iamVjdCBoYXMgL24vLXVzZXItZGVmaW5hYmxlIGF0dHJpYnV0ZXMgaXMKc29tZXRoaW5n IHRoYXQgaXMgW1todHRwOi8vdGV4LnN0YWNrZXhjaGFuZ2UuY29tL3EvMTk2MTE1LzE3NDIzXVt2 YWx1ZWQgYWNyb3NzIHRoZSBkZXNpZ24gbGF5ZXJzXV0uICBUaGUgZG9jdW1lbnQgZGVzaWduZXIg aXNuJ3QKZ29pbmcgdG8gY2FyZSB0aGF0IFRlWCBjYW4gb25seSB0YWtlIDkgYXJndW1lbnRzIGJl Y2F1c2Ugb2Ygc29tZSBpbi1ib3JuZSAoYW5kCm1vc3RseSBhcmJpdHJhcnkpIHJlc3RyaWN0aW9u IG9uIG1hY3JvIGRlZmluaXRpb25zLiAgSW4gcmVhbGl0eSBpdCB3b24ndCBtYXR0ZXI6CnRoZXNl IGFyZ3VtZW50cyB3aWxsIGJlIGFic29yYmVkIHZpYSBhIHNhbmVyIGFuZCBtb3JlIG1haW50YWlu YWJsZSBrZXktdmFsdWUKc3lzdGVtLgoKSG93IHNob3VsZCB0aGUgcmVzcG9uc2libGUgcm9sZSBj b252ZXkgdGhlIGlkZWEgdGhhdCBzb21lIG9iamVjdCBoYXMgbW9yZSB0aGFuIDkKcXVhbGl0aWVz PwoKKiogRXhhbXBsZSBVc2UgQ2FzZQpJIGFtIGJ1aWxkaW5nIGEgbW9kdWxhciAoYW5kIHRodXMg ZXh0ZW5zaWJsZSkgcmVzdW1lL2N2IHNvbHV0aW9uLCBhbmQgSSdkIGxpa2UKdG8gbW9kZWwgaXQg YWZ0ZXIgdGhlIC9mYW50YXN0aWMvID1leHNoZWV0cz0gcGFja2FnZS4gIFRvIGRvIHNvLCBJIG5l ZWQgdG8gdXNlCnRoZSB0ZW1wbGF0aW5nIGlkZWEuCgpDb25zaWRlciBhbiBlbXBsb3ltZW50IHJl Y29yZCBvYmplY3QuICBJJ2xsIG5vdGUsIHBlciB0aGUgZGlzY3Vzc2lvbiwgdGhhdCBub3QKYWxs IG9mIHRoZXNlIGVsZW1lbnRzIGFyZSByZXF1aXJlZC4KCjEuIEpvYiBUaXRsZQoyLiBDb21wYW55 CjMuIENvbXBhbnkgVGl0bGUKNC4gQ29tcGFueSBMaW5rCjUuIEZpZWxkCjYuIExldmVsIG9mIFRl Y2huaWNhbGl0eQo3LiBTdGFydCBkYXRlCjguIEVuZCBkYXRlCjkuIFJlbGF0ZWQgVGVjaG5vbG9n aWVzCjEwLiBldGMuCgpGb3JnaXZlIG1lIGZvciBub3QgYmVpbmcgYWJsZSB0byBjb25qdXJlIHVw IG1vcmUgdGhhbiBuaW5lICdyZWFsJyBlbGVtZW50cywgYnV0CkkgaG9wZSBJJ20gZ2V0dGluZyB0 aGUgaWRlYSBhY3Jvc3MuICBOb3RlIHRoYXQgdGhlIGRvY3VtZW50IGRlc2lnbmVyIC9pcy8gdGhl Cm9uZSB3aG8gZGVjaWRlcyB3aGljaCBhcmd1bWVudHMgYXJlIG1hbmRhdG9yeSBhbmQgd2hpY2gg YXJlIG5vdDsgdGhpcyBzZWxlY3Rpb24Kc2hvdWxkIG5vdCBiZSBsaW1pdGVkIChhIGRpc2N1c3Np b24gZm9yIExhVGVYLUwpLgoKSSB3YW50IHRvIHRha2UgdGhpcyBvcHBvcnR1bml0eSB0aGF0IHRo ZSBwdXJlIGlkZWEgb2YgYSBtYW5kYXRvcnkKYXJndW1lbnQtLS1qdXN0IGNvbnNpZGVyaW5nIHRo ZSB3b3JkcywgaGVyZS0tLWRvZXNuJ3QgaW1wbHkgdGhhdCBpdCdzIGEKcG9zaXRpb25hbCBhcmd1 bWVudC4gIFRoYXQgd291bGQgZ2V0IC9hd2Z1bC8uICBCdXQgdGhhdCBpcyBjZXJ0YWlubHkgYQpk aXNjdXNzaW9uIHJhdGhlciB0aGFuIGEgcHJvcGVyIHF1ZXN0aW9uLiAgSSdsbCBwcmVwYXJlIGEg cHJvcGVyIHF1ZXN0aW9uIC8KcHJvcG9zYWwgZm9yIExhVGVYLUwgd2hlbiBJIGRvbid0IG5lZWQg dG8gZG8gc28gb24gY29tcGFueSB0aW1lLCB0aG91Z2ggfjopfgoKKiBDT01NRU5UIEpvc2VwaCdz IFRob3VnaHRzClRoaXMgc2VjdGlvbiBpcyBhZGFwdGVkIGFuZCByZWZpbmVkIGZyb20gSm9zZXBo IFdyaWdodCdzIFtbaHR0cDovL3RleC5zdGFja2V4Y2hhbmdlLmNvbS9hLzE5NjMyNC8xNzQyM11b b3JpZ2luYWwgcG9zdF1dIG9uIHRoZQptYXR0ZXIuCgpUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRv IGJlYXIgaW4gbWluZCBoZXJlLiAgRmlyc3QsIHRoZSAndGVtcGxhdGUnIGlkZWEgaXMKL3Zlcnkg bXVjaC8gZXhwZXJpbWVudGFsOiBpbiBwYXJ0aWN1bGFyLCB3aGF0J3MgbmVlZGVkIGFyZSBnb29k IGV4YW1wbGVzIG9mCidyZWFsIGxpZmUnIG9iamVjdHMgYW5kIGhvdyB0aGV5IGFyZSB1c2VkIGlu IGRpZmZlcmVudCBzaXR1YXRpb25zLiAgQXMgc3VjaCwKdGhlcmUgbWF5IG5lZWQgdG8gYmUgYWRq dXN0bWVudHMuICBTZWNvbmRseSwgdGhlIGlkZWEgaGVyZSBpcyB0byBzZXBhcmF0ZQpkZXNpZ24t dGltZSBkZWNpc2lvbnMgZnJvbSB1c2UtdGltZSBpbnB1dC4gIFRoZSBhcmd1bWVudHMgdG8gYW4g b2JqZWN0L3RlbXBsYXRlCmFyZSAnZHluYW1pYycgb25lcyBhdCB0aGUgcG9pbnQgb2YgdXNlLiAg RmluYWxseSwgd2UgYXJlIHdyaXRpbmcgVGVYLWJhc2VkIGNvZGUKaGVyZSwgc28gdGhlcmUgbWF5 IGJlIHRoZSBvZGQgcGxhY2Ugd2hlcmUgZGVjaXNpb25zIHJlZmxlY3QgdGhlIHVuZGVybHlpbmcK c3lzdGVtLiAgKElkZWFsbHkgdGhvc2UgY2FzZXMgd2lsbCBiZSBsaW1pdGVkIGFuZCBub3QgL2xp bWl0aW5nLykuCgpUYWtpbmcgdGhlIHVzdWFsIGV4YW1wbGUgb2Ygc2VjdGlvbmluZyBjb21tYW5k cywgaXQncyBjbGVhciB0aGF0IHRoZXJlIGlzIG9uZQptYW5kYXRvcnkgYXJndW1lbnQ6IHRoZSBu YW1lIG9mIHRoZSBzZWN0aW9uLWxpa2Ugb2JqZWN0LiAgSG93ZXZlciwgdGhlcmUgYXJlCmFsc28g bG90cyBvZiBvdGhlciAvcG90ZW50aWFsLyBhcmd1bWVudHMuICBPbmVzIHRoYXQgaGF2ZSBiZWVu IHN1Z2dlc3RlZCBpbmNsdWRlCi0gUnVubmluZyBoZWFkZXIgc2hvcnQgdmVyc2lvbgotIFRPQyBz aG9ydCB2ZXJzaW9uCi0gU2VjdGlvbiBudW1iZXIKLSBTd2l0Y2ggZm9yIHByZXNlbmNlIGluIFRP QwotIFN3aXRjaCBmb3IgbnVtYmVyaW5nCi0gTGFiZWwgZm9yIGNyb3NzLXJlZmVyZW5jaW5nCnBs dXMgb3RoZXJzIEkgZG9uJ3QgcmVtZW1iZXIgYXQgdGhlIG1vbWVudCEgIFdoYXQncyBub3RhYmxl IGluIHRoYXQgbGlzdCBpcyB0aGF0Cm5vbmUgb2YgdGhlbSBhcmUgL2Fic29sdXRlbHkvIHJlcXVp cmVkIGluIGFsbCBjYXNlcyBmb3Igc29tZSBmb3JtIG9mIHNlY3Rpb25pbmcKY29uY2VwdDogaXQn cyBvbmx5IHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uIHRoYXQgaXMgdml0YWwuICBXZSBjYW4gc2Vl IHRoYXQgYm90aAppbiBMYVRlWDJlIHN5bnRheAojK2JlZ2luX3NyYyBsYXRleApcc2VjdGlvbipb TmFtZV17RnVsbCBOYW1lfSAlIEp1c3QgdGhlIGZ1bGwgbmFtZSBhYnNvbHV0ZWx5IHJlcXVpcmVk CiMrZW5kX3NyYwphbmQgaW4gSFRNTAojK2JlZ2luX3NyYyBodG1sCjxoMT5GdWxsIG5hbWU8L2gx PgojK2VuZF9zcmMKClRoYXQgc3VnZ2VzdHMgdGhhdCBhIHRlbXBsYXRlIGZvciBzZWN0aW9uIHBy b2JhYmx5IHNob3VsZG4ndCByZXF1aXJlIG9uZQphcmd1bWVudCBmb3IgZWFjaCBvZiB0aGUgcG90 ZW50aWFsIG9wdGlvbnMgSSd2ZSBzdWdnZXN0ZWQKIytiZWdpbl9zcmMgbGF0ZXgKXFVzZUluc3Rh bmNle3NlY3Rpb25pbmd9e2xhdGV4MmV9ezxmdWxsLW5hbWU+fXs8VE9DIG5hbWU+fXs8aGVhZGVy IG5hbWU+fS4uLgojK2VuZF9zcmMKbG9va3MgYXdrd2FyZCBldmVuIGlmIHRoZW4gd3JhcHBlZCB1 cCB1c2luZyA9eHBhcnNlPSBpbnRvIHRoZSBzYW1lIHVzZXIKaW50ZXJmYWNlIGFzIExhVGVYMmUg cHJvdmlkZXMuCgpXaGF0IHRoaXMgdHlwZSBvZiB0aGluZyBzdWdnZXN0cyBpcyB0aGF0IG9iamVj dHMgYXJlIGxpa2VseSB0byByZXF1aXJlIGF0IGxlYXN0Cm9uZSAnbXVsdGktcGFydCcgYXJndW1l bnQgdG8gZGVhbCB3aXRoIHRoZSB2YXJpb3VzIHJ1bi10aW1lIHN0dWZmIHRoYXQgbWF5IG9yCm1h eSBub3QgYmUgZ2l2ZW4uICBJdCdzIGF0IGxlYXN0IG5vdCB1bnJlYXNvbmFibGUgdG8gYXJndWUg dGhhdCBhIGl0IG1pZ2h0IGJlCnNlbnNpYmxlIHRvIGdvIHB1cmVseSBrZXl2YWwsIGFzIHlvdSBz dWdnZXN0LCBhbmQgaGF2ZSBvbmUgJ3J1biB0aW1lIGFyZ3MnIHRvCmNvdmVyIGV2ZXJ5dGhpbmcs IHdpdGggdGhlIG1hbmRhdG9yeSBuYXR1cmUgb2Ygc29tZSBvZiB0aGVtIGhhbmRsZWQgaW4gYQpk aWZmZXJlbnQgd2F5LiAgKEkgc3VzcGVjdCB5b3UnZCBhbHNvIHdhbnQgdG8gYXQgbGVhc3QgY29u c2lkZXIgYSAnb25lLW9mZgpkZXNpZ24gY2hhbmdlcycgYXJnLCBhcyB0aGlzIGlzIG5vdCB1bmNv bW1vbiBhcyBhIHJlcXVpcmVtZW50LikKIytiZWdpbl9zcmMgbGF0ZXgKXFVzZUluc3RhbmNle3Nl Y3Rpb25pbmd9e2xhdGV4MmV9CiAgewogICAgZnVsbC1uYW1lID0gPHRleHQ+ICwKICAgIFRPQy1u YW1lICA9IC4uLgogIH0KIytlbmRfc3JjCgpUaGVyZSdzIG9mIGNvdXJzZSB0aGUgaW50ZXJtZWRp YXRlIHBvc2l0aW9uIG9mIGhhdmluZyBvbmUgb3IgbW9yZSAncmVhbGx5Cm1hbmRhdG9yeScgYXJn cyBwbHVzIG9uZSAnb3RoZXIgc3R1ZmYnIG9uZTogc29tZXRoaW5nIG9mIGEgaHlicmlkIGJ1dCBw ZXJoYXBzCmZvciB1c2VycyBlYXNpZXIgdGhhbiBhICdwdXJpc3QnIGFsbCBrZXl2YWwgc2l0dWF0 aW9uLgoKV2hhdCBJIHRoaW5rIGlzIHRydWUgaXMgdGhhdCBpdCdzIHVubGlrZWx5IHRoYXQgbW9z dCAncmVhbCB3b3JsZCcgb2JqZWN0IHR5cGVzCndpbGwgcmVxdWlyZSBtb3JlIHRoYW4gbmluZSBh cmd1bWVudHMuICBJZiB5b3UgdGhpbmsgYWJvdXQgbW9zdCBMYVRlWCBzdHVmZiwgdGhlCm5pbmUg YXJnIGxpbWl0IHZlcnkgcmFyZWx5IHNob3dzIHVwIGZvciB1c2VycyAoaXQgZG9lcyBvY2Nhc2lv bmFsbHkgcG9wIHVwIHdoZW4Kd3JpdGluZyBsb3ctbGV2ZWwgcGFyc2luZyBhbmQgdGhlIGxpa2Us IGJ1dCB0aGF0J3Mgc29tZXdoYXQgZGlmZmVyZW50KS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgpDb21pbmcgYmFjayB0byB0aGUgcG9pbnQgYWJvdXQgdGhlIGNvZGUgYmVpbmcgZXhwZXJpbWVu dGFsLCB0aGVyZSBhcmUgY2xlYXJseQpvcGVuIHF1ZXN0aW9ucy4gIEkgY2FuIG9ubHkgZGVzY3Jp YmUgaG93IHRoZSBjb2RlIHdvcmtzIGF0IHRoZSBwcmVzZW50IGFuZCB3aGF0CnRoZSB0aGluZ3Mg aXQncyB0cnlpbmcgdG8gZXhwbG9yZSBhcmUuICBPdmVyIHRpbWUsIHZhcmlvdXMgTGFUZVgzIGNv bmNlcHRzIGhhdmUKYmVlbiBjaGFuZ2VkIG9yIGRyb3BwZWQgd2hlbiBpdCdzIGJlZW4gY2xlYXIg dGhleSBkb24ndCB3b3JrIHByb3Blcmx5ICdpbiB0aGUKd2lsZCcuICBUaGUgdGVtcGxhdGUgY29k ZSBhbmQgaW50ZXJmYWNlcyBhcmUgbm90IHJlYWxseSAnd29ybGQgdGVzdGVkJzogaXQncwpxdWl0 ZSBwb3NzaWJsZSB0aGF0IGNoYW5nZXMgYXJlIG5lZWRlZC4gIChJJ3ZlIHRyaWVkIHRvIGVtcGhh c2l6ZSBhYm92ZSB0aGF0IEkKY2FuIHNlZSBhbiBhcmd1bWVudCBoZXJlIGZvciB0YWtpbmcgYSBk aWZmZXJlbnQgdGFjazogb25lIGZvciBMYVRlWC1MLikKKiBEZXNpZ24gVGhvdWdodHMKSSBiZWxp ZXZlIEpvc2VwaCBpcyBXcmlnaHQgb24gc2V2ZXJhbCBwb2ludHM6Ci0gdGhpcyBpcyBwb3RlbnRp YWxseSBhbiBlZGdlIGNhc2UsCi0gbG9uZyBhcmd1bWVudCBsaXN0aW5ncyBpcyB1bnJlYXNvbmFi bGUgb24gdGhlIGF1dGhvciBsZXZlbCwKLSB0aGUgY29kZSBpcyBleHBlcmltZW50YWwsIGFuZCB0 aGF0Ci0gdGhlc2UgYXJlIGhhcmQgcXVlc3Rpb25zLgpIZSBnaXZlcyB0d28gc3VnZ2VzdGlvbnMg dGhhdCBJJ2xsIGZsZXNoIG91dCBoZXJlIG1vbWVudGFyaWx5LiAgRmlyc3QsIEkgd2FudCB0bwpt YWtlIHN1cmUgdGhhdCB3ZSBhcmUgYWxsIG9uIHRoZSBzYW1lIHBhZ2UgYWJvdXQgdGhlIHJvbGVz IGludm9sdmVkIGhlcmUuICBUaGUKcm9sZSB0aGF0ID14dGVtcGxhdGU9IGdldHMgaW52b2x2ZWQg aW4gaXMgZXZlcnkgcm9sZSAvZXhjZXB0LyB0aGUgYXV0aG9yIGxldmVsOgotIG9iamVjdHMgOjog bG9naWMgKGRvY3VtZW50IGRlc2lnbmVyKQotIGluc3RhbmNlcyA6OiBkZXNpZ24gKHR5cG9ncmFw aGVyKQotIHRlbXBsYXRlcyA6OiBwcm9ncmFtbWluZyAocHJvZ3JhbW1lcikKV2Ugc2hvdWxkIG5v dCBiZSBvdmVybHktY29uY2VybmVkIHdpdGggdmVyYm9zaXR5IG9uIHRoZXNlIGxldmVscy4gIFB1 cml0eSBhbmQKY29uc2lzdGVuY3kgc2hvdWxkLCBpbiBteSBob25lc3Qgb3BpbmlvbiwgYmUgdG9w IGdvYWxzLiAgKENvbnNpZGVyIHRoaXMgdGhlCnNwaXJpdCBvZiBbW2h0dHA6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvVGVYI0hpc3RvcnldW0d1eSBTdGVlbGVdXSBzcGVha2luZy4pCgoqIFBhcmFt ZXRlci1CYXNlZApSaWdodCBub3csIHdlIGhhdmUgYSBwYXJhbWV0ZXItYmFzZWQgc3lzdGVtLiAg T2JqZWN0cyAoflxEZWNsYXJlT2JqZWN0VHlwZX4pIGFyZQpnaXZlbiBhIHNldCBvZiByZXF1aXJl ZCBhdHRyaWJ1dGVzIGFzIH5cZGVmfi1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB0ZW1wbGF0ZSBjb2Rl Cih+XERlY2xhcmVUZW1wbGF0ZUNvZGV+KSB1c2VzIHRoZXNlIHBhcmFtZXRlcnMgYWxvbmcgd2l0 aCBrZXktdmFsdWUgaW5wdXQKdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGZvciBsYXlvdXQgcGFyYW1l dGVycyAoc3VjaCBhcyBhIGZvbnQgb3IgbGVuZ3RoKS4gIFRoaXMKcGFyYWRpZ20gaXMgcG9zc2li bHkgdGhlIHNpbXBsZXN0IHRvIHVuZGVyc3RhbmQgd2hlbiB0aGUgdXNlciAoaW4gdGhpcyBjYXNl LCB0aGUKZG9jdW1lbnQgZGVzaWduZXIpIGFscmVhZHkgaGFzIGEgYmFja2dyb3VuZCBpbiBUZVgu CgpVbmZvcnR1bmF0ZWx5LCB0aGlzIHN0eWxlIGhhcyB0aGUgaW5oZXJlbnQgbGltaXRhdGlvbiBz ZXQgb3V0IGluIHRoZQppbnRyb2R1Y2F0aW9uOiBhbiBvYmplY3QgY2FuIGhhdmUgbm8gbW9yZSB0 aGFuIG5pbmUgcGFyYW1ldGVycy4gIFRoaXMgaXMgY2F1c2VkCmJ5IFRlWCdzIG93biAobW9yZSBv ciBsZXNzIGFyYml0cmFyeSkgbGltaXRhdGlvbiBpbiB0aGUgcHJpbWl0aXZlIH5cZGVmfi4gIFRo ZXJlCmlzIG5vIGNsZWFuIHdheSBvZiBnZXR0aW5nIGFyb3VuZCB0aGlzLgoKKiBLZXlWYWwtQmFz ZWQKOlBST1BFUlRJRVM6CjpJRDogICAgICAgQTAzN0U5QzMtQTI4NC00MzFBLUE2RjktQ0U1ODRD NjVBNzQ0CjpFTkQ6CkFub3RoZXIgb3B0aW9uIGlzIHRvIHVzZSBhIHB1cmVseSBrZXktdmFsdWUg c3ludGF4IGZvciB0aGlzLiAgCgoqKiBDT01NRU5UIEZpbGUgTGF5b3V0CjpQUk9QRVJUSUVTOgo6 SUQ6ICAgICAgIEFDOTg5OEUyLUQ0NzItNDcyQi1CMTAzLTY5OEM3RTY2M0ZGNQo6RU5EOgpZb3Ug Y2FuIGNyZWF0ZSB0aGUgZXhhbXBsZSBmaWxlIGluIGVtYWNzIGJ5IHVzaW5nIH5NLXggb3JnLWJh YmVsLXRhbmdsZX4uCiMrYmVnaW5fc3JjIGxhdGV4IDp0YW5nbGUgZXhhbXBsZS50ZXggOm5vd2Vi IHRhbmdsZQo8PGRlY2xhcmUtb2JqZWN0Pj4KCjw8ZGVjbGFyZS10ZW1wbGF0ZS1pbnRlcmZhY2U+ PgoKPDxkZWNsYXJlLXRlbXBsYXRlLWNvZGU+PgoKPDxkZWNsYXJlLWluc3RhbmNlLWFuZC1jb21t YW5kcz4+CiMrZW5kX3NyYwoKKiogT2JqZWN0IENyZWF0aW9uCiMrYmVnaW5fc3JjIGxhdGV4IDpu b3dlYi1yZWYgImRlY2xhcmUtb2JqZWN0IgpcRGVjbGFyZU9iamVjdFR5cGUgeyBuYW1lIH0KICB7 CiAgICBmaXJzdCAgOiB0b2tlbmxpc3QgICAgICAgICAgICAgICAgICAgLAogICAgbWlkZGxlIDog dG9rZW5saXN0ICAgICAgICAgICAgICAgICAgICwKICAgIGxhc3QgICA6IHRva2VubGlzdCAgICAg ICAgICAgICAgICAgICAsCiAgICBmaXJzdCAgOiAucmVxdWlyZWQgICAgICAgICAgICAgICAgICAg LAogICAgbGFzdCAgIDogLnJlcXVpcmVkICAgICAgICAgICAgICAgICAgICwKICB9CiMrZW5kX3Ny YwpOb3RlIHRoYXQgZXZlcnl0aGluZyBpcyBnaXZlbiBhcyBhbiA9eHRlbXBsYXRlPS1zdHlsZSBr ZXkgbGlzdGluZy4gIFRoaXMKbWFpbnRhaW5zIGNvbnNpc3RlbmN5LiAgTm90ZSBhbHNvIHRoYXQg dGhlIGtleXMgfmZpcnN0fiBhbmQgfmxhc3R+IGFyZSBnaXZlbiB0aGUKfi5yZXF1aXJlZH4gcHJv cGVydHk7IEkgb3B0ZWQgYWdhaW5zdCB0aGUgcG9zc2libHkgbW9yZSBjb25zaXN0ZW50IChmb3Ig dmFyeWluZwpkZWZpbml0aW9ucyBvZiAnY29uc2lzdGVudCcpIH4udmFsdWVfcmVxdWlyZWQ6fiAo cmVtaW5pc2NlbnQgb2YgPWV4cGwzPSkgYmVjYXVzZQo9ZXhwbDM9IGlzIG9uIGFuIGVudGlyZWx5 IGRpZmZlcmVudCBkZXNpZ24gbGV2ZWwgZnJvbSA9eHRlbXBsYXRlPS4gIEkgb3B0ZWQgdG8Ka2Vl cCB0aGUgfi5+IGJlY2F1c2UgaXQgd2VsbCBjb252ZXlzIHRoZSAnbWV0YScgcXVhbGl0eSBvZiBi ZWluZyBhICdyZXF1aXJlZAphcmd1bWVudCcuICBJZiBpdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGRv IHNvLCBJJ20gbm90IGFnYWluc3QgaW5jb3Jwb3JhdGluZyB0aGUKcmVxdWlyZWQtbmVzcyBpbnRv IHRoZSB0eXBlIChpbiB0aGlzIGNhc2UsIH50b2tlbmxpc3R+KS4gIFBlcmhhcHMgc29tZXRoaW5n IGxpa2UKfnRva2VubGlzdCp+IG9yIH50b2tlbmxpc3Qhfi4KClRoaXMgaXMgbW9yZS1vci1sZXNz IHN0cmVhbS1vZi1jb25zY2lvdXNuZXNzIGFzIGZhciBhcyAvc3BlY2lmaWMvIGlucHV0IHN5bnRh eAppZGVhcyBnbywgYnV0IHRoZSBpZGVhIG9mIG5vdGF0aW5nIHRoaXMgKGFuZCBwb3RlbnRpYWxs eSBvdGhlcikgbWV0YS1pbmZvcm1hdGlvbgppbnRvIHRoaXMgbGlzdGluZyBpcyB0aGUgbWFpbiBp ZGVhIEknZCBsaWtlIHRvIHByb3Bvc2UgKGFnYWluLCBwYXJ0bHkgZnJvbQpKb3NlcGgncyBvd24g cHJvbXB0aW5nKS4KCioqIFRlbXBsYXRlIENyZWF0aW9uClRlbXBsYXRlcyB3b3VsZCBiZSBjcmVh dGVkIGFzIG5vcm1hbDoKIytiZWdpbl9zcmMgbGF0ZXggOm5vd2ViLXJlZiAiZGVjbGFyZS10ZW1w bGF0ZS1pbnRlcmZhY2UiClxEZWNsYXJlVGVtcGxhdGVJbnRlcmZhY2UgeyBuYW1lIH0geyBmdWxs IH0KICB7CiAgICByZXZlcnNlZCAgICAgICAgICAgOiBib29sZWFuID0gZmFsc2UgLAogICAgdXNl LWZpcnN0LW5hbWUgICAgIDogYm9vbGVhbiA9IHRydWUgICwKICAgIHVzZS1taWRkbGUtbmFtZSAg ICA6IGJvb2xlYW4gPSB0cnVlICAsCiAgICB1c2UtbGFzdC1uYW1lICAgICAgOiBib29sZWFuID0g dHJ1ZSAgLAogICAgZmlyc3QtbmFtZS1mb3JtYXQgIDogdG9rZW5saXN0ICAgICAgICwKICAgIG1p ZGRsZS1uYW1lLWZvcm1hdCA6IHRva2VubGlzdCAgICAgICAsCiAgICBsYXN0LW5hbWUtZm9ybWF0 ICAgOiB0b2tlbmxpc3QgICAgICAgLAogIH0KIytlbmRfc3JjCgpUaGlzIGlzIGluY2x1ZGVkIG9u bHkgdG8gbWFrZSBhIGNvbXBsZXRlIGV4YW1wbGUgdXNlLgoKKiogVGVtcGxhdGUgQ29kZQpUaGlz IGlzIGFub3RoZXIgcHJvcG9zZWQgY2hhbmdlIGluIHRoZSBpbnRlcmZhY2UuICAKIytiZWdpbl9z cmMgbGF0ZXggOm5vd2ViLXJlZiAiZGVjbGFyZS10ZW1wbGF0ZS1jb2RlIgo8PGRlY2xhcmUtdGVt cGxhdGUtY29kZTp2YXJpYWJsZXM+PgoKXERlY2xhcmVUZW1wbGF0ZUNvZGUgeyBuYW1lIH0geyBm dWxsIH0KICB7CiAgICBmaXJzdCAgICAgICAgICAgICAgPSBcbF9uYW1lc19maXJzdF9uYW1lX3Rs ICAgICwKICAgIG1pZGRsZSAgICAgICAgICAgICA9IFxsX25hbWVzX21pZGRsZV9uYW1lX3RsICAg LAogICAgbGFzdCAgICAgICAgICAgICAgID0gXGxfbmFtZXNfbGFzdF9uYW1lX3RsICAgICAsCiAg fQogIHsKICAgIHJldmVyc2VkICAgICAgICAgICA9IFxsX25hbWVzX3JldmVyc2VkX2Jvb2wgICAg LAogICAgdXNlLWZpcnN0LW5hbWUgICAgID0gXGxfbmFtZXNfdXNlX2ZpcnN0X2Jvb2wgICAsCiAg ICB1c2UtbWlkZGxlLW5hbWUgICAgPSBcbF9uYW1lc191c2VfbWlkZGxlX2Jvb2wgICwKICAgIHVz ZS1sYXN0LW5hbWUgICAgICA9IFxsX25hbWVzX3VzZV9sYXN0X2Jvb2wgICAgLAogICAgZmlyc3Qt bmFtZS1mb3JtYXQgID0gXGxfbmFtZXNfZmlyc3RfZm9ybWF0X3RsICAsCiAgICBtaWRkbGUtbmFt ZS1mb3JtYXQgPSBcbF9uYW1lc19taWRkbGVfZm9ybWF0X3RsICwKICAgIGxhc3QtbmFtZS1mb3Jt YXQgICA9IFxsX25hbWVzX2xhc3RfZm9ybWF0X3RsICAgLAogIH0KICB7CiAgICA8PGRlY2xhcmUt dGVtcGxhdGUtY29kZTpjb2RlPj4KICB9CiMrZW5kX3NyYwooYWRhcHRlZCBmcm9tIFtbaHR0cHM6 Ly90dWcub3JnL1RVR2JvYXQvdGIzMy0zL3RiMTA1bmllZGVyYmVyZ2VyLnBkZl1bQ2xlbWVucyBO aWVkZXJiZXJnZXIncyB0dXRvcmlhbF1dLikKKioqIENPTU1FTlQgQ29kZQojK2JlZ2luX3NyYyBs YXRleCA6bm93ZWItcmVmICJkZWNsYXJlLXRlbXBsYXRlLWNvZGU6Y29kZSIKXEFzc2lnblRlbXBs YXRlS2V5cwoKXGJvb2xfaWY6blQKewogIFx0bF9lbXB0eV9wOk4gXGxfbmFtZXNfbWlkZGxlX25h bWVfdGwgJiYKICBcbF9uYW1lc191c2VfbWlkZGxlX2Jvb2wKfQp7CiAgXHR5cGVvdXR7ISBUaGlz IGlzIGFuIGVycm9yIGFuZCBJJ20gZmFyIHRvbyBsYXp5IHRvIGNyZWF0ZSBhICAgIF5eSgogICAg ICAgICAgICAgcHJvcGVyIGwzbXNnLiAgKEluIHByYWN0aWNlLCBwcm9iYWJseSBiZXR0ZXIgdG8g YmUgICBeXkoKICAgICAgICAgICAgIGEgd2FybmluZy4pICBXZSB3ZXJlIHByb3ZpZGVkIG5vIG1p ZGRsZSBuYW1lIHRvIHVzZSAgXl5KCiAgICAgICAgICAgICB3aXRoIHRoZSB1c2UtbWlkZGxlLW5h bWUgZGlyZWN0aXZlLn0KfQoKXGJvb2xfaWY6TlRGIFxsX25hbWVzX3JldmVyc2VkX2Jvb2wKewog IDw8ZGVjbGFyZS10ZW1wbGF0ZS1jb2RlOnJldmVyc2VkPj4KfQp7CiAgPDxkZWNsYXJlLXRlbXBs YXRlLWNvZGU6bm9ybWFsPj4KfQojK2VuZF9zcmMKKioqKiBSZXZlcnNlZAojK2JlZ2luX3NyYyBs YXRleCA6bm93ZWItcmVmICJkZWNsYXJlLXRlbXBsYXRlLWNvZGU6cmV2ZXJzZWQiClxib29sX2lm Ok5UIFxsX25hbWVzX3VzZV9sYXN0X2Jvb2wKe3tcdGxfdXNlOk4gXGxfbmFtZXNfbGFzdF9mb3Jt YXRfdGwgXGxfbmFtZXNfbGFzdF9uYW1lX3RsfX0KXGJvb2xfaWY6blQKewogIFxsX25hbWVzX3Vz ZV9maXJzdF9ib29sICYmCiAgXGxfbmFtZXNfdXNlX2xhc3RfYm9vbAp9CnsgLCB+IH0KXGJvb2xf aWY6TlQgXGxfbmFtZXNfdXNlX2ZpcnN0X2Jvb2wKe3tcdGxfdXNlOk4gXGxfbmFtZXNfZmlyc3Rf Zm9ybWF0X3RsIFxsX25hbWVzX2ZpcnN0X25hbWVfdGx9fQpcYm9vbF9pZjpOVCBcbF9uYW1lc191 c2VfbWlkZGxlX2Jvb2wKewogIFxib29sX2lmOk5UIFxsX25hbWVzX3VzZV9maXJzdF9ib29sCiAg eyB+IH0KICB7XHRsX3VzZTpOIFxsX25hbWVzX21pZGRsZV9mb3JtYXRfdGwgXGxfbmFtZXNfbWlk ZGxlX25hbWVfdGx9Cn0KIytlbmRfc3JjCioqKiogTm9ybWFsCiMrYmVnaW5fc3JjIGxhdGV4IDpu b3dlYi1yZWYgImRlY2xhcmUtdGVtcGxhdGUtY29kZTpub3JtYWwiClxib29sX2lmOk5UIFxsX25h bWVzX3VzZV9maXJzdF9ib29sCnsKICB7XHRsX3VzZTpOIFxsX25hbWVzX2ZpcnN0X2Zvcm1hdF90 bCBcbF9uYW1lc19maXJzdF9uYW1lX3RsfQogIFxib29sX2lmOm5UCiAgewogICAgXGxfbmFtZXNf dXNlX21pZGRsZV9ib29sIHx8CiAgICBcbF9uYW1lc191c2VfbGFzdF9ib29sCiAgfQogIHsgfiB9 Cn0KClxib29sX2lmOk5UIFxsX25hbWVzX3VzZV9taWRkbGVfYm9vbAp7CiAge1x0bF91c2U6TiBc bF9uYW1lc19taWRkbGVfZm9ybWF0X3RsIFxsX25hbWVzX21pZGRsZV9uYW1lX3RsfQogIFxib29s X2lmOk5UIFxsX25hbWVzX3VzZV9sYXN0X2Jvb2wKICB7IH4gfQp9Clxib29sX2lmOk5UIFxsX25h bWVzX3VzZV9sYXN0X2Jvb2wKewogIHtcdGxfdXNlOk4gXGxfbmFtZXNfbGFzdF9mb3JtYXRfdGwg XGxfbmFtZXNfbGFzdF9uYW1lX3RsfQp9CiMrZW5kX3NyYwoqKiBJbnN0YW5jZXMKIytiZWdpbl9z cmMgbGF0ZXggOm5vd2ViLXJlZiAiZGVjbGFyZS1pbnN0YW5jZS1hbmQtY29tbWFuZHMiClxEZWNs YXJlSW5zdGFuY2UgeyBuYW1lIH0geyBzdGFuZGFyZCB9IHsgZnVsbCB9IHsgfQoKXERlY2xhcmVE b2N1bWVudENvbW1hbmQgXE5hbWUgeyA+e1xTcGxpdEFyZ3VtZW50ezF9e359fW0gfQogIHsKICAg IFxVc2VJbnN0YW5jZSB7IG5hbWUgfSB7IHN0YW5kYXJkIH0KICAgICAgewogICAgICAgIGZpcnN0 ID0gXHVzZV9pOm5uICAjMiwKICAgICAgICBsYXN0ICA9IFx1c2VfaWk6bm4gIzIsCiAgICAgIH0K ICB9CgpcRGVjbGFyZURvY3VtZW50Q29tbWFuZCBcU3BlY2lhbE5hbWUgeyBtIG0gbSBtIH0KICB7 CiAgICBcVXNlVGVtcGxhdGUgeyBuYW1lIH0geyBmdWxsIH0geyAjMSB9CiAgICAgIHsKICAgICAg ICBmaXJzdCAgPSAjMiwKICAgICAgICBsYXN0ICAgPSAjMywKICAgICAgICBtaWRkbGUgPSAjNCwK ICAgICAgfQogIH0KIytlbmRfc3JjCgoqKiBWYXJpYWJsZXMKIytiZWdpbl9zcmMgbGF0ZXggOm5v d2ViLXJlZiAiZGVjbGFyZS10ZW1wbGF0ZS1jb2RlOnZhcmlhYmxlcyIKXHRsX25ldzpOIFxsX25h bWVzX2ZpcnN0X25hbWVfdGwKXHRsX25ldzpOIFxsX25hbWVzX21pZGRsZV9uYW1lX3RsClx0bF9u ZXc6TiBcbF9uYW1lc19sYXN0X25hbWVfdGwKClx0bF9uZXc6TiBcbF9uYW1lc19maXJzdF9mb3Jt YXRfdGwKXHRsX25ldzpOIFxsX25hbWVzX21pZGRsZV9mb3JtYXRfdGwKXHRsX25ldzpOIFxsX25h bWVzX2xhc3RfZm9ybWF0X3RsCgpcYm9vbF9uZXc6TiBcbF9uYW1lc191c2VfZmlyc3RfYm9vbApc Ym9vbF9uZXc6TiBcbF9uYW1lc191c2VfbWlkZGxlX2Jvb2wKXGJvb2xfbmV3Ok4gXGxfbmFtZXNf dXNlX2xhc3RfYm9vbAoKXGJvb2xfbmV3Ok4gXGxfbmFtZXNfcmV2ZXJzZWRfYm9vbAojK2VuZF9z cmMKCiogSHlicmlkCkdpdmVuIHRoYXQgdGhlIH5vcHRpb24gLnZhbHVlX3JlcXVpcmVkOn4gcGF0 dGVybiBleGlzdHMgKGZyb20gPWwza2V5cz0pLCBJJ20gbm90CmEgYmlnIGZhbiBvZiB0aGlzIG9w dGlvbi4gIFN0aWxsLCBpdCBpcyBjb25jZWl2YWJsZSB0aGF0IC9hYnNvbHV0ZWx5IHJlcXVpcmVk Lwphcmd1bWVudHMgYXJlIGdpdmVuIGFzIFRlWC1zdHlsZSBwYXJhbWV0ZXJzIHdoZXJlIG9wdGlv bmFsIG9uZXMgYXJlIGdpdmVuIGluCmtleS12YWx1ZSBmb3JtYXQuICBJIGluY2x1ZGUgZm9yIGNv bXBsZXRpb24ncyBzYWtlLgoKKiBDT01NRU5UIEZpbGUgTG9jYWwgVmFyaWFibGVzCiMgTG9jYWwg VmFyaWFibGVzOgojIGZpbGwtY29sdW1uOiA4MAojIEVuZDoK --bcaec51a7c4c4049d00501049f17--