From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Ken Manheimer" Newsgroups: gmane.emacs.devel Subject: Re: allout encryption and non-ascii characters Date: Tue, 7 Nov 2006 18:22:38 -0500 Message-ID: <2cd46e7f0611071522na96beeco70d0972572ed5e3a@mail.gmail.com> References: <877iyfjpbx.fsf@acm.org> <2cd46e7f0611011007g772df6dcn84b0e36c2a2dfe71@mail.gmail.com> <2cd46e7f0611041128k57da936vda14f79f35259d58@mail.gmail.com> <2cd46e7f0611060756k5f8caa92ocde9a2d24f907a8d@mail.gmail.com> <87wt68yrcu.fsf@acm.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_13169_18808000.1162941758901" X-Trace: sea.gmane.org 1162942374 773 80.91.229.2 (7 Nov 2006 23:32:54 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 7 Nov 2006 23:32:54 +0000 (UTC) Cc: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Nov 08 00:29:54 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GhaI0-0005k8-AA for ged-emacs-devel@m.gmane.org; Wed, 08 Nov 2006 00:29:52 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GhaHs-0004m7-VH for ged-emacs-devel@m.gmane.org; Tue, 07 Nov 2006 18:23:25 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GhaHI-0004m1-GS for emacs-devel@gnu.org; Tue, 07 Nov 2006 18:22:48 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GhaHH-0004lp-0k for emacs-devel@gnu.org; Tue, 07 Nov 2006 18:22:47 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GhaHG-0004ll-NZ for emacs-devel@gnu.org; Tue, 07 Nov 2006 18:22:46 -0500 Original-Received: from [66.249.92.169] (helo=ug-out-1314.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GhaHC-0006sV-Bw for emacs-devel@gnu.org; Tue, 07 Nov 2006 18:22:46 -0500 Original-Received: by ug-out-1314.google.com with SMTP id j3so1450311ugf for ; Tue, 07 Nov 2006 15:22:40 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=tqnW3NmB6F/25HtEGLL3IssGUPSgPrarqB3t1Au0Xeeal3OtTznGBLbJeq5hGjOTGCR0dQ2ee5XzSVls1N5BTKedJoiJn9ZwJ04rkTIZyXGchDZHBtwKo328A/mdLj0E6ycng47bYnHSJCbDNAYFpnAKD4Ykh+743P67Wg9l5hg= Original-Received: by 10.78.201.10 with SMTP id y10mr8978036huf.1162941759029; Tue, 07 Nov 2006 15:22:39 -0800 (PST) Original-Received: by 10.78.198.11 with HTTP; Tue, 7 Nov 2006 15:22:38 -0800 (PST) Original-To: davidsmith@acm.org In-Reply-To: <87wt68yrcu.fsf@acm.org> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:61935 Archived-At: ------=_Part_13169_18808000.1162941758901 Content-Type: text/plain; charset=ISO-2022-JP; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline i've replied to david, and i'm hoping we can track down the discrepancy between our systems - i'm unable to reproduce his problem with his text and my posted version of allout. in the meanwhile, the request for testers still goes - encryption of non-ascii text with the (attached) allout version with the fix (after saving and revisiting the text file, to ensure that the buffer is set to the right encoding). ken On 11/6/06, David Smith wrote: > Thanks very much for working on the coding-system related > bug. Unfortunately, with the attached test file, it still > fails. I've attached my test file; it's encoded with > mule-utf-8, I'm using GNU Emacs 22.0.50.1 (i486-pc-linux-gnu, > GTK+ Version 2.8.20) of 2006-10-23 on pacem, modified by Debian. > > Any pgg hackers with a clue on this? > > David > > "Ken Manheimer" writes: > > > though i haven't heard that anyone else has tested it, i would hate > > for this allout patch to miss the release, and am confident enough > > about its merits to ask that it be applied. > > > > the crucial thing the patch does is enable topic encryption of > > non-ascii encodings. the encoding fix is only a few lines, but the > > patch also eliminates a tradeoff in the last fix i submitted, > > clarifies a variable name and some docstrings in the process, and > > rectifies some assorted boundary-condition behaviors, as well. > > -- > > ken > > ken.manheimer@gmail.com > > http://myriadicity.net > > > > 2006-11-05 Ken Manheimer > > > > * allout.el (allout-doublecheck-at-and-shallower): Clarify > > docstring. > > (allout-inhibit-aberrance-doublecheck): Rename from > > allout-during-yank-processing. > > (allout-do-doublecheck): Track allout-inhibit-aberrance-doublecheck > > name change. > > (allout-ascend): Provide for unusual case where some topic after > > the first in file is at lower depth than the first. > > (allout-shift-in): Ensure the offspring of the new containing > > topic are exposed. > > (allout-encrypt-string): Preserve the coding-system of the text, > > according to that of the containing buffer. > > > > > > > > On 11/4/06, Ken Manheimer wrote: > >> i have had some success with getting allout topic encryption to > >> encrypt text so that characters in an alternate coding set are > >> preserved. i am looking for people to test it - i am so unfamiliar > >> with coding sets in general that i don't really know how to be sure it > >> works generally! (i am excited, though, that i was able to round-trip > >> some text with an elaborate <'> apostrophe that isn't preserved in the > >> ascii character set, but is preserved in iso-2022-7bit.) > >> > >> i'm attaching a full copy of the revised allout.el for testing - make > >> sure you're not getting byte code from an old version when giving it a > >> go. and when you do test it, be sure that the file you're working > >> with has a coding set which preserves the characters on rereading - > >> the encryption depends on the buffer being in the right coding set. > >> > >> let me know whether or not it works for you, and if possible, the > >> coding set of the trial ('Esc-x buffer-file-coding-set' will tell > >> you). if i get good confirmation that this works, i'll submit a > >> proper patch. > >> > >> thanks! > >> > >> On 11/1/06, Ken Manheimer wrote: > >> > allout's use of pgg for encryption doesn't provide for non-ascii text, > >> > and encoding is a realm where i seem to have less than zero > >> > cluefulness. can anyone help me solve the problem posed below? > >> > > >> > ken > >> > > >> > On 11/1/06, an david smith wrote: > >> > > >> > > Hi Ken, > >> > > > >> > > I've been an allout user for a very long time. It's wonderful > >> > > software. Thank you. > >> > > > >> > > Today I thought I'd try out the encryption support as I finally > >> > > have a need for it but it doesn't properly handle non-ascii > >> > > characters. pgg-output-buffer is created inside of pgg-gpg with > >> > > mode of raw-text or binary and that is never converted back > >> > > into the charset of the original cleartext. I do a lot of work > >> > > in Japanese and so this is critical. > >> > > > >> > > I look at how gnus uses pgg and its charset handling but even > >> > > in edebug I couldn't quite see how it was doing it correctly > >> > > compared to how allout's method. > >> > > > >> > > If you have any insight I would really appreciate it. I will > >> > > try to debug this in my own time but as you are the > >> > > maintainer/author of the software involved, I hope you can at > >> > > least nudge in me the right direction towards a fix. > > > > > > -- > David D. Smith > > > Test Text > //_. Encrypt This > 筆は剣より強い。 > > > > -- ken ken.manheimer@gmail.com http://myriadicity.net ------=_Part_13169_18808000.1162941758901 Content-Type: application/octet-stream; name=allout.el Content-Transfer-Encoding: base64 X-Attachment-Id: f_eu8x6xb9 Content-Disposition: attachment; filename="allout.el" Ozs7IGFsbG91dC5lbCAtLS0gZXh0ZW5zaXZlIG91dGxpbmUgbW9kZSBmb3IgdXNlIGFsb25lIGFu ZCB3aXRoIG90aGVyIG1vZGVzCgo7OyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDIw MDEsIDIwMDIsIDIwMDMsIDIwMDQsCjs7ICAgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KCjs7IEF1dGhvcjogS2VuIE1hbmhlaW1lciA8a2VuIGRvdCBtYW5oZWltZXIg YXQgZ21haWwgZG90IGNvbT4KOzsgTWFpbnRhaW5lcjogS2VuIE1hbmhlaW1lciA8a2VuIGRvdCBt YW5oZWltZXIgYXQgZ21haWwgZG90IGNvbT4KOzsgQ3JlYXRlZDogRGVjIDE5OTEgLSBmaXJzdCBy ZWxlYXNlIHRvIHVzZW5ldAo7OyBWZXJzaW9uOiAyLjIuMSAoJFJldmlzaW9uOiAxLjIzNCAkKQo7 OyBLZXl3b3Jkczogb3V0bGluZXMgd3AgbGFuZ3VhZ2VzCjs7IFdlYnNpdGU6IGh0dHA6Ly9teXJp YWRpY2l0eS5uZXQvU3VuZHJ5L0VtYWNzQWxsb3V0Cgo7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCjs7IGFu eSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdp dGggR05VIEVtYWNzOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhl Cjs7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwKOzsgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCgo7OzsgQ29tbWVudGFy eToKCjs7IEFsbG91dCBvdXRsaW5lIG1pbm9yIG1vZGUgcHJvdmlkZXMgZXh0ZW5zaXZlIG91dGxp bmUgZm9ybWF0dGluZyBhbmQKOzsgYW5kIG1hbmlwdWxhdGlvbiBiZXlvbmQgc3RhbmRhcmQgZW1h Y3Mgb3V0bGluZSBtb2RlLiAgU29tZSBmZWF0dXJlczoKOzsKOzsgIC0gQ2xhc3NpYyBvdXRsaW5l LW1vZGUgdG9waWMtb3JpZW50ZWQgbmF2aWdhdGlvbiBhbmQgZXhwb3N1cmUgYWRqdXN0bWVudAo7 OyAgLSBUb3BpYy1vcmllbnRlZCBlZGl0aW5nIGluY2x1ZGluZyBjb2hlcmVudCB0b3BpYyBhbmQg c3VidG9waWMKOzsgICAgY3JlYXRpb24sIHByb21vdGlvbiwgZGVtb3Rpb24sIGN1dC9wYXN0ZSBh Y3Jvc3MgZGVwdGhzLCBldGMuCjs7ICAtIEluY3JlbWVudGFsIHNlYXJjaCB3aXRoIGR5bmFtaWMg ZXhwb3N1cmUgYW5kIHJlY29uY2VhbG1lbnQgb2YgdGV4dAo7OyAgLSBDdXN0b21pemFibGUgYnVs bGV0IGZvcm1hdCAtIGVuYWJsZXMgcHJvZ3JhbW1pbmctbGFuZ3VhZ2Ugc3BlY2lmaWMKOzsgICAg b3V0bGluaW5nLCBmb3IgY29kZS1mb2xkaW5nIGVkaXRpbmcuICAoQWxsb3V0IGNvZGUgaXRzZWxm IGlzIHRvIHRyeSBpdDsKOzsgICAgZm9ybWF0dGVkIGFzIGFuIG91dGxpbmUgLSBkbyBFU0MteCBl dmFsLWJ1ZmZlciBpbiBhbGxvdXQuZWw7IGJ1dAo7OyAgICBlbWFjcyBsb2NhbCBmaWxlIHZhcmlh YmxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgd2hlbiB0aGUKOzsgICAgZmlsZSB3YXMgdmlzaXRlZCAt IHNlZSBgZW5hYmxlLWxvY2FsLXZhcmlhYmxlcycuKQo7OyAgLSBDb25maWd1cmFibGUgcGVyLWZp bGUgaW5pdGlhbCBleHBvc3VyZSBzZXR0aW5ncwo7OyAgLSBTeW1tZXRyaWMta2V5IGFuZCBrZXkt cGFpciB0b3BpYyBlbmNyeXB0aW9uLCBwbHVzIHN5bW1ldHJpYyBwYXNzcGhyYXNlCjs7ICAgIG1u ZW1vbmljIHN1cHBvcnQsIHdpdGggdmVyaWZpY2F0aW9uIGFnYWluc3QgYW4gZXN0YWJsaXNoZWQg cGFzc3BocmFzZQo7OyAgICAodXNpbmcgYSBzdGFzaGVkIGVuY3J5cHRlZCBkdW1teSBzdHJpbmcp IGFuZCB1c2VyLXN1cHBsaWVkIGhpbnQKOzsgICAgbWFpbnRlbmFuY2UuICAoU2VlIGFsbG91dC10 b2dnbGUtY3VycmVudC1zdWJ0cmVlLWVuY3J5cHRpb24gZG9jc3RyaW5nLikKOzsgIC0gQXV0b21h dGljIHRvcGljLW51bWJlciBtYWludGVuYW5jZQo7OyAgLSAiSG90LXNwb3QiIG9wZXJhdGlvbiwg Zm9yIHNpbmdsZS1rZXlzdHJva2UgbWFuZXV2ZXJpbmcgYW5kCjs7ICAgIGV4cG9zdXJlIGNvbnRy b2wgKHNlZSB0aGUgYWxsb3V0LW1vZGUgZG9jc3RyaW5nKQo7OyAgLSBFYXN5IHJlbmRlcmluZyBv ZiBleHBvc2VkIHBvcnRpb25zIGludG8gbnVtYmVyZWQsIGxhdGV4LCBpbmRlbnRlZCwgZXRjCjs7 ICAgIG91dGxpbmUgc3R5bGVzCjs7ICAtIENhcmVmdWwgYXR0ZW50aW9uIHRvIHdoaXRlc3BhY2Ug LSBlbmFibGluZyBibGFuayBsaW5lcyBiZXR3ZWVuIGl0ZW1zCjs7ICAgIGFuZCBtYWludGVuYW5j ZSBvZiBoYW5naW5nIGluZGVudGF0aW9uIChpbiBwYXJhZ3JhcGggYXV0by1maWxsIGFuZAo7OyAg ICBhY3Jvc3MgdG9waWMgcHJvbW90aW9uIGFuZCBkZW1vdGlvbikgb2YgdG9waWMgYm9kaWVzIGNv bnNpc3RlbnQgd2l0aAo7OyAgICBpbmRlbnRhdGlvbiBvZiB0aGVpciB0b3BpYyBoZWFkZXIuCjs7 Cjs7IGFuZCBtb3JlLgo7Owo7OyBTZWUgdGhlIGBhbGxvdXQtbW9kZScgZnVuY3Rpb24ncyBkb2Nz dHJpbmcgZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUKOzsgbW9kZS4KOzsKOzsgVGhlIGxhdGVz dCBkZXZlbG9wbWVudCB2ZXJzaW9uIGFuZCBoZWxwZnVsIG5vdGVzIGFyZSBhdmFpbGFibGUgYXQK OzsgaHR0cDovL215cmlhZGljaXR5Lm5ldC9TdW5kcnkvRW1hY3NBbGxvdXQgLgo7Owo7OyBUaGUg b3V0bGluZSBtZW51YmFyIGFkZGl0aW9ucyBwcm92aWRlIHF1aWNrIHJlZmVyZW5jZSB0byBtYW55 IG9mCjs7IHRoZSBmZWF0dXJlcywgYW5kIHNlZSB0aGUgZG9jc3RyaW5nIG9mIHRoZSB2YXJpYWJs ZSBgYWxsb3V0LWluaXQnCjs7IGZvciBpbnN0cnVjdGlvbnMgb24gcHJpbWluZyB5b3VyIGVtYWNz IHNlc3Npb24gZm9yIGF1dG9tYXRpYwo7OyBhY3RpdmF0aW9uIG9mIGFsbG91dC1tb2RlLgo7Owo7 OyBTZWUgdGhlIGRvY3N0cmluZyBvZiB0aGUgdmFyaWFibGVzIGBhbGxvdXQtbGF5b3V0JyBhbmQK OzsgYGFsbG91dC1hdXRvLWFjdGl2YXRpb24nIGZvciBkZXRhaWxzIG9uIGF1dG9tYXRpYyBhY3Rp dmF0aW9uIG9mCjs7IGBhbGxvdXQtbW9kZScgYXMgYSBtaW5vciBtb2RlLiAgKEl0IGhhcyBjaGFu Z2VkIHNpbmNlIGFsbG91dAo7OyAzLngsIGZvciB0aG9zZSBvZiB5b3UgdGhhdCBkZXBlbmQgb24g dGhlIG9sZCBtZXRob2QuKQo7Owo7OyBOb3RlIC0gdGhlIGxpbmVzIGJlZ2lubmluZyB3aXRoIGA7 OztfJyBhcmUgb3V0bGluZSB0b3BpYyBoZWFkZXJzLgo7OyAgICAgICAgSnVzdCBgRVNDLXggZXZh bC1idWZmZXInIHRvIGdpdmUgaXQgYSB3aGlybC4KCjs7IGtlbiBtYW5oZWltZXIgKGtlbiBkb3Qg bWFuaGVpbWVyIGF0IGdtYWlsIGRvdCBjb20pCgo7OzsgQ29kZToKCjs7O18qIERlcGVuZGVuY3kg YXV0b2xvYWRzCihyZXF1aXJlICdvdmVybGF5KQooZXZhbC13aGVuLWNvbXBpbGUKICA7OyBNb3N0 IG9mIHRoZSByZXF1aXJlcyBoZXJlIGFyZSBmb3Igc3R1ZmYgY292ZXJlZCBieSBhdXRvbG9hZHMu CiAgOzsgU2luY2UganVzdCBieXRlLWNvbXBpbGluZyBkb2Vzbid0IHRyaWdnZXIgYXV0b2xvYWRz LCBzbyB0aGF0CiAgOzsgImZ1bmN0aW9uIG5vdCBmb3VuZCIgd2FybmluZ3Mgd291bGQgb2NjdXIg d2l0aG91dCB0aGVzZSByZXF1aXJlcy4KICAocHJvZ24KICAgIChyZXF1aXJlICdwZ2cpCiAgICAo cmVxdWlyZSAncGdnLWdwZykKICAgIChyZXF1aXJlICdvdmVybGF5KQogICAgOzsgYGNsJyBpcyBy ZXF1aXJlZCBmb3IgYGFzc2VydCcuICBgYXNzZXJ0JyBpcyBub3QgY292ZXJlZCBieSBhIHN0YW5k YXJkCiAgICA7OyBhdXRvbG9hZCwgYnV0IGl0IGlzIGEgbWFjcm8sIHNvIHRoYXQgZXZhbC13aGVu LWNvbXBpbGUgaXMgc3VmZmljaWVudAogICAgOzsgdG8gYnl0ZS1jb21waWxlIGl0IGluLCBvciB0 byBkbyB0aGUgcmVxdWlyZSB3aGVuIHRoZSBidWZmZXIgZXZhbGxlZC4KICAgIChyZXF1aXJlICdj bCkKICAgICkpCgo7OztfKiBVU0VSIENVU1RPTUlaQVRJT04gVkFSSUFCTEVTOgoKOzs7XyA+IGRl Zmdyb3VwIGFsbG91dAooZGVmZ3JvdXAgYWxsb3V0IG5pbAogICJFeHRlbnNpdmUgb3V0bGluZSBt b2RlIGZvciB1c2UgYWxvbmUgYW5kIHdpdGggb3RoZXIgbW9kZXMuIgogIDpwcmVmaXggImFsbG91 dC0iCiAgOmdyb3VwICdvdXRsaW5lcykKCjs7O18gKyBMYXlvdXQsIE1vZGUsIGFuZCBUb3BpYyBI ZWFkZXIgQ29uZmlndXJhdGlvbgoKOzs7XyAgPSBhbGxvdXQtYXV0by1hY3RpdmF0aW9uCihkZWZj dXN0b20gYWxsb3V0LWF1dG8tYWN0aXZhdGlvbiBuaWwKICAiKlJlZ3VsYXRlcyBhdXRvLWFjdGl2 YXRpb24gbW9kYWxpdHkgb2YgYWxsb3V0IG91dGxpbmVzIC0gc2VlIGBhbGxvdXQtaW5pdCcuCgpT ZXRxLWRlZmF1bHQgYnkgYGFsbG91dC1pbml0JyB0byByZWd1bGF0ZSB3aGV0aGVyIG9yIG5vdCBh bGxvdXQKb3V0bGluZSBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHdoZW4gdGhlIGJ1 ZmZlci1zcGVjaWZpYwp2YXJpYWJsZSBgYWxsb3V0LWxheW91dCcgaXMgbm9uLW5pbCwgYW5kIHdo ZXRoZXIgb3Igbm90IHRoZSBsYXlvdXQKZGljdGF0ZWQgYnkgYGFsbG91dC1sYXlvdXQnIHNob3Vs ZCBiZSBpbXBvc2VkIG9uIG1vZGUgYWN0aXZhdGlvbi4KCldpdGggdmFsdWUgdCwgYXV0by1tb2Rl LWFjdGl2YXRpb24gYW5kIGF1dG8tbGF5b3V0IGFyZSBlbmFibGVkLgpcKFRoaXMgYWxzbyBkZXBl bmRzIG9uIGBhbGxvdXQtZmluZC1maWxlLWhvb2snIGJlaW5nIGluc3RhbGxlZCBpbgpgZmluZC1m aWxlLWhvb2snLCB3aGljaCBpcyBhbHNvIGRvbmUgYnkgYGFsbG91dC1pbml0Jy4pCgpXaXRoIHZh bHVlIGBhc2snLCBhdXRvLW1vZGUtYWN0aXZhdGlvbiBpcyBlbmFibGVkLCBhbmQgZW5kb3JzZW1l bnQgZm9yCnBlcmZvcm1pbmcgYXV0by1sYXlvdXQgaXMgYXNrZWQgb2YgdGhlIHVzZXIgZWFjaCB0 aW1lLgoKV2l0aCB2YWx1ZSBgYWN0aXZhdGUnLCBvbmx5IGF1dG8tbW9kZS1hY3RpdmF0aW9uIGlz IGVuYWJsZWQsCmF1dG8tbGF5b3V0IGlzIG5vdC4KCldpdGggdmFsdWUgbmlsLCBuZWl0aGVyIGF1 dG8tbW9kZS1hY3RpdmF0aW9uIG5vciBhdXRvLWxheW91dCBhcmUKZW5hYmxlZC4KClNlZSB0aGUg ZG9jc3RyaW5nIGZvciBgYWxsb3V0LWluaXQnIGZvciB0aGUgcHJvcGVyIGludGVyZmFjZSB0bwp0 aGlzIHZhcmlhYmxlLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiT24iIHQpCiAgICAg ICAgICAgICAgICAoY29uc3QgOnRhZyAiQXNrIGFib3V0IGxheW91dCIgImFzayIpCiAgICAgICAg ICAgICAgICAoY29uc3QgOnRhZyAiTW9kZSBvbmx5IiAiYWN0aXZhdGUiKQogICAgICAgICAgICAg ICAgKGNvbnN0IDp0YWcgIk9mZiIgbmlsKSkKICA6Z3JvdXAgJ2FsbG91dCkKOzs7XyAgPSBhbGxv dXQtZGVmYXVsdC1sYXlvdXQKKGRlZmN1c3RvbSBhbGxvdXQtZGVmYXVsdC1sYXlvdXQgJygtMiA6 IDApCiAgIipEZWZhdWx0IGFsbG91dCBvdXRsaW5lIGxheW91dCBzcGVjaWZpY2F0aW9uLgoKVGhp cyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgb3V0bGluZSBleHBvc3VyZSB0byB1c2Ugd2hlbgpgYWxs b3V0LWxheW91dCcgaGFzIHRoZSBsb2NhbCB2YWx1ZSBgdCcuICBUaGlzIGRvY3N0cmluZyBkZXNj cmliZXMgdGhlCmxheW91dCBzcGVjaWZpY2F0aW9ucy4KCkEgbGlzdCB2YWx1ZSBzcGVjaWZpZXMg YSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLAp0byBiZSBhcHBsaWVkIHVw b24gYWN0aXZhdGlvbiBvZiBgYWxsb3V0LW1vZGUnLiAgQW55IG5vbi1uaWwKdmFsdWUgd2lsbCBh dXRvbWF0aWNhbGx5IHRyaWdnZXIgYGFsbG91dC1tb2RlJywgcHJvdmlkZWQKYGFsbG91dC1pbml0 JyBoYXMgYmVlbiBjYWxsZWQgdG8gZW5hYmxlIHRoaXMgYmVoYXZpb3IuCgpUaGUgdHlwZXMgb2Yg ZWxlbWVudHMgaW4gdGhlIGxheW91dCBzcGVjaWZpY2F0aW9uIGFyZToKCiBpbnRlZ2VyIC0gZGlj dGF0ZSB0aGUgcmVsYXRpdmUgZGVwdGggdG8gb3BlbiB0aGUgY29ycmVzcG9uZGluZyB0b3BpYyhz KSwKICAgICAgICAgICB3aGVyZToKICAgICAgICAgLSBuZWdhdGl2ZSBudW1iZXJzIGZvcmNlIHRo ZSB0b3BpYyB0byBiZSBjbG9zZWQgYmVmb3JlIG9wZW5pbmcKICAgICAgICAgICB0byB0aGUgYWJz b2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciwgc28gYWxsIHNpYmxpbmdzIGFyZSBvcGVuCiAgICAg ICAgICAgb25seSB0byB0aGF0IGxldmVsLgogICAgICAgICAtIHBvc2l0aXZlIG51bWJlcnMgb3Bl biB0byB0aGUgcmVsYXRpdmUgZGVwdGggaW5kaWNhdGVkIGJ5IHRoZQogICAgICAgICAgIG51bWJl ciwgYnV0IGRvIG5vdCBmb3JjZSBhbHJlYWR5IG9wZW5lZCBzdWJ0b3BpY3MgdG8gYmUgY2xvc2Vk LgogICAgICAgICAtIDAgbWVhbnMgdG8gY2xvc2UgdG9waWMgLSBoaWRlIGFsbCBzdWJpdGVtcy4K IDogICAtIHJlcGVhdCBzcGVjIC0gYXBwbHkgdGhlIHByZWNlZWRpbmcgZWxlbWVudCB0byBhbGwg c2libGluZ3MgYXQKICAgICAgIGN1cnJlbnQgbGV2ZWwsICp1cCB0byogdGhvc2Ugc2libGluZ3Mg dGhhdCB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHNwZWNzCiAgICAgICBmb2xsb3dpbmcgdGhlIGA6JyBv biB0aGUgbGlzdC4gIEllLCBhcHBseSB0byBhbGwgdG9waWNzIGF0IGxldmVsIGJ1dAogICAgICAg dHJhaWxpbmcgb25lcyBhY2NvdW50ZWQgZm9yIGJ5IHRyYWlsaW5nIHNwZWNzLiAgXChPbmx5IHRo ZSBmaXJzdCBvZgogICAgICAgbXVsdGlwbGUgY29sb25zIGF0IHRoZSBzYW1lIGxldmVsIGlzIGhv bm9yZWQgLSBsYXRlciBvbmVzIGFyZSBpZ25vcmVkLikKICogICAtIGNvbXBsZXRlbHkgZXhwb3Nl cyB0aGUgdG9waWMsIGluY2x1ZGluZyBib2RpZXMKICsgICAtIGV4cG9zZXMgYWxsIHN1YnRvcGlj cywgYnV0IG5vdCB0aGUgYm9kaWVzCiAtICAgLSBleHBvc2VzIHRoZSBib2R5IG9mIHRoZSBjb3Jy ZXNwb25kaW5nIHRvcGljLCBidXQgbm90IHN1YnRvcGljcwogbGlzdCAtIGEgbmVzdGVkIGxheW91 dCBzcGVjLCB0byBiZSBhcHBsaWVkIGludHJpY2F0ZWx5IHRvIGl0cwogICAgICAgIGNvcnJlc3Bv bmRpbmcgaXRlbShzKQoKRXhhbXBsZXM6CiAnKC0yIDogMCkKCUNvbGxhcHNlIHRoZSB0b3AtbGV2 ZWwgdG9waWNzIHRvIHNob3cgdGhlaXIgY2hpbGRyZW4gYW5kCiAgICAgICAgZ3JhbmRjaGlsZHJl biwgYnV0IGNvbXBsZXRlbHkgY29sbGFwc2UgdGhlIGZpbmFsIHRvcC1sZXZlbCB0b3BpYy4KICco LTEgKCkgOiAxIDApCglDbG9zZSB0aGUgZmlyc3QgdG9waWMgc28gb25seSB0aGUgaW1tZWRpYXRl IHN1YnRvcGljcyBhcmUgc2hvd24sCiAgICAgICAgbGVhdmUgdGhlIHN1YnNlcXVlbnQgdG9waWNz IGV4cG9zZWQgYXMgdGhleSBhcmUgdW50aWwgdGhlIHNlY29uZAoJc2Vjb25kIHRvIGxhc3QgdG9w aWMsIHdoaWNoIGlzIGV4cG9zZWQgYXQgbGVhc3Qgb25lIGxldmVsLCBhbmQKICAgICAgICBjb21w bGV0ZWx5IGNsb3NlIHRoZSBsYXN0IHRvcGljLgogJygtMiA6IC0xICopCiAgICAgICAgRXhwb3Nl IGNoaWxkcmVuIGFuZCBncmFuZGNoaWxkcmVuIG9mIGFsbCB0b3BpY3MgYXQgY3VycmVudAoJbGV2 ZWwgZXhjZXB0IHRoZSBsYXN0IHR3bzsgZXhwb3NlIGNoaWxkcmVuIG9mIHRoZSBzZWNvbmQgdG8K CWxhc3QgYW5kIGNvbXBsZXRlbHkgZXhwb3NlIHRoZSBsYXN0IG9uZSwgaW5jbHVkaW5nIGl0cyBz dWJ0b3BpY3MuCgpTZWUgYGFsbG91dC1leHBvc2UtdG9waWMnIGZvciBtb3JlIGFib3V0IHRoZSBl eHBvc3VyZSBwcm9jZXNzLgoKQWxzbywgYWxsb3V0J3MgbW9kZS1zcGVjaWZpYyBwcm92aXNpb25z IHdpbGwgbWFrZSB0b3BpYyBwcmVmaXhlcyBkZWZhdWx0CnRvIHRoZSBjb21tZW50LXN0YXJ0IHN0 cmluZywgaWYgYW55LCBvZiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGZpbGUuICBUaGlzCmlzIG1vZHVs byB0aGUgc2V0dGluZyBvZiBgYWxsb3V0LXVzZS1tb2RlLXNwZWNpZmljLWxlYWRlcicsIHdoaWNo IHNlZS4iCiAgOnR5cGUgJ2FsbG91dC1sYXlvdXQtdHlwZQogIDpncm91cCAnYWxsb3V0KQo7Oztf ICA6IGFsbG91dC1sYXlvdXQtdHlwZQooZGVmaW5lLXdpZGdldCAnYWxsb3V0LWxheW91dC10eXBl ICdsYXp5CiAgIkFsbG91dCBsYXlvdXQgZm9ybWF0IGN1c3RvbWl6YXRpb24gYmFzaWMgYnVpbGRp bmcgYmxvY2tzLiIKICA6dHlwZSAnKHJlcGVhdAogICAgICAgICAgKGNob2ljZSAoaW50ZWdlciA6 dGFnICJpbnRlZ2VyICg8PSB6ZXJvIGlzIHN0cmljdCkiKQogICAgICAgICAgICAgICAgICAoY29u c3QgOnRhZyAiOiAocmVwZWF0IHByaW9yKSIgOikKICAgICAgICAgICAgICAgICAgKGNvbnN0IDp0 YWcgIiogKGNvbXBsZXRlbHkgZXhwb3NlKSIgKikKICAgICAgICAgICAgICAgICAgKGNvbnN0IDp0 YWcgIisgKGV4cG9zZSBhbGwgb2Zmc3ByaW5nLCBoZWFkbGluZXMgb25seSkiICspCiAgICAgICAg ICAgICAgICAgIChjb25zdCA6dGFnICItIChleHBvc2UgdG9waWMgYm9keSBidXQgbm90IG9mZnNw cmluZykiIC0pCiAgICAgICAgICAgICAgICAgIChhbGxvdXQtbGF5b3V0LXR5cGUgOnRhZyAiPE5l c3RlZCBsYXlvdXQ+IikpKSkKCjs7O18gID0gYWxsb3V0LXNob3ctYm9kaWVzCihkZWZjdXN0b20g YWxsb3V0LXNob3ctYm9kaWVzIG5pbAogICIqSWYgbm9uLW5pbCwgc2hvdyBlbnRpcmUgYm9keSB3 aGVuIGV4cG9zaW5nIGEgdG9waWMsIHJhdGhlciB0aGFuCmp1c3QgdGhlIGhlYWRlci4iCiAgOnR5 cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2Fs ICdhbGxvdXQtc2hvdy1ib2RpZXMpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1zaG93LWJv ZGllcyAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5kcCAnYm9vbGVhbnApICdi b29sZWFucCAnKGxhbWJkYSAoeCkgKG1lbWJlciB4ICcodCBuaWwpKSkpKQoKOzs7XyAgPSBhbGxv dXQtYmVnaW5uaW5nLW9mLWxpbmUtY3ljbGVzCihkZWZjdXN0b20gYWxsb3V0LWJlZ2lubmluZy1v Zi1saW5lLWN5Y2xlcyB0CiAgIipJZiBub24tbmlsLCBcXFthbGxvdXQtYmVnaW5uaW5nLW9mLWxp bmVdIHdpbGwgY3ljbGUgdGhyb3VnaCBzbWFydC1wbGFjZW1lbnQgb3B0aW9ucy4KCkN5Y2xpbmcg b25seSBoYXBwZW5zIG9uIHdoZW4gdGhlIGNvbW1hbmQgaXMgcmVwZWF0ZWQsIG5vdCB3aGVuIGl0 CmZvbGxvd3MgYSBkaWZmZXJlbnQgY29tbWFuZC4KClNtYXJ0LXBsYWNlbWVudCBtZWFucyB0aGF0 IHJlcGVhdGVkIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbAphZHZhbmNlIGFzIGZvbGxvd3M6 CgogLSBpZiB0aGUgY3Vyc29yIGlzIG9uIGEgbm9uLWhlYWRsaW5lIGJvZHkgbGluZSBhbmQgbm90 IG9uIHRoZSBmaXJzdCBjb2x1bW46CiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgZmlyc3QgY29sdW1u CiAtIGlmIHRoZSBjdXJzb3IgaXMgb24gdGhlIGZpcnN0IGNvbHVtbiBvZiBhIG5vbi1oZWFkbGlu ZSBib2R5IGxpbmU6CiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgc3RhcnQgb2YgdGhlIGhlYWRsaW5l IHdpdGhpbiB0aGUgaXRlbSBib2R5CiAtIGlmIHRoZSBjdXJzb3IgaXMgb24gdGhlIGhlYWRsaW5l IGFuZCBub3QgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkbGluZToKICAgdGhlbiBpdCBnb2VzIHRvIHRo ZSBzdGFydCBvZiB0aGUgaGVhZGxpbmUKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgc3RhcnQg b2YgdGhlIGhlYWRsaW5lOgogICB0aGVuIGl0IGdvZXMgdG8gdGhlIGJ1bGxldCBjaGFyYWN0ZXIg XChmb3IgaG90c3BvdCBuYXZpZ2F0aW9uXCkKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgYnVs bGV0IGNoYXJhY3RlcjoKICAgdGhlbiBpdCBnb2VzIHRvIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhh dCBsaW5lIFwodGhlIGhlYWRsaW5lXCkKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgZmlyc3Qg Y29sdW1uIG9mIHRoZSBoZWFkbGluZToKICAgdGhlbiBpdCBnb2VzIHRvIHRoZSBzdGFydCBvZiB0 aGUgaGVhZGxpbmUgd2l0aGluIHRoZSBpdGVtIGJvZHkuCgpJbiB0aGlzIGZhc2hpb24sIHlvdSBj YW4gdXNlIHRoZSBiZWdpbm5pbmctb2YtbGluZSBjb21tYW5kIHRvIGRvCml0cyBub3JtYWwgam9i IGFuZCB0aGVuLCB3aGVuIHJlcGVhdGVkLCBhZHZhbmNlIHRocm91Z2ggdGhlCmVudHJ5LCBjeWNs aW5nIGJhY2sgdG8gc3RhcnQuCgpJZiB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbmls LCB0aGVuIHRoZSBjdXJzb3IgaXMganVzdAphZHZhbmNlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBsaW5lIGFuZCByZW1haW5zIHRoZXJlIG9uCnJlcGVhdGVkIGNhbGxzLiIKICA6dHlwZSAnYm9v bGVhbiA6Z3JvdXAgJ2FsbG91dCkKOzs7XyAgPSBhbGxvdXQtZW5kLW9mLWxpbmUtY3ljbGVzCihk ZWZjdXN0b20gYWxsb3V0LWVuZC1vZi1saW5lLWN5Y2xlcyB0CiAgIipJZiBub24tbmlsLCBcXFth bGxvdXQtZW5kLW9mLWxpbmVdIHdpbGwgY3ljbGUgdGhyb3VnaCBzbWFydC1wbGFjZW1lbnQgb3B0 aW9ucy4KCkN5Y2xpbmcgb25seSBoYXBwZW5zIG9uIHdoZW4gdGhlIGNvbW1hbmQgaXMgcmVwZWF0 ZWQsIG5vdCB3aGVuIGl0CmZvbGxvd3MgYSBkaWZmZXJlbnQgY29tbWFuZC4KClNtYXJ0LXBsYWNl bWVudCBtZWFucyB0aGF0IHJlcGVhdGVkIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbAphZHZh bmNlIGFzIGZvbGxvd3M6CgogLSBpZiB0aGUgY3Vyc29yIGlzIG5vdCBvbiB0aGUgZW5kLW9mLWxp bmUsCiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgZW5kLW9mLWxpbmUKIC0gaWYgdGhlIGN1cnNvciBp cyBvbiB0aGUgZW5kLW9mLWxpbmUgYnV0IG5vdCB0aGUgZW5kLW9mLWVudHJ5LAogICB0aGVuIGl0 IGdvZXMgdG8gdGhlIGVuZC1vZi1lbnRyeSwgZXhwb3NpbmcgaXQgaWYgbmVjZXNzYXJ5CiAtIGlm IHRoZSBjdXJzb3IgaXMgb24gdGhlIGVuZC1vZi1lbnRyeSwKICAgdGhlbiBpdCBnb2VzIHRvIHRo ZSBlbmQgb2YgdGhlIGhlYWQgbGluZQoKSW4gdGhpcyBmYXNoaW9uLCB5b3UgY2FuIHVzZSB0aGUg ZW5kLW9mLWxpbmUgY29tbWFuZCB0byBkbyBpdHMKbm9ybWFsIGpvYiBhbmQgdGhlbiwgd2hlbiBy ZXBlYXRlZCwgYWR2YW5jZSB0aHJvdWdoIHRoZSBlbnRyeSwKY3ljbGluZyBiYWNrIHRvIHN0YXJ0 LgoKSWYgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG5pbCwgdGhlbiB0aGUgY3Vyc29y IGlzIGp1c3QKYWR2YW5jZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSBhbmQgcmVtYWlucyB0aGVy ZSBvbiByZXBlYXRlZApjYWxscy4iCiAgOnR5cGUgJ2Jvb2xlYW4gOmdyb3VwICdhbGxvdXQpCgo7 OztfICA9IGFsbG91dC1oZWFkZXItcHJlZml4CihkZWZjdXN0b20gYWxsb3V0LWhlYWRlci1wcmVm aXggIi4iCjs7IHRoaXMgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgbGl0ZXJhbCBtYXRjaC4gIGl0IHdp bGwgYmUgYHJlZ2V4cC1xdW90ZSdkLCBzbwo7OyBvbmUgY2Fubm90IHVzZSByZWd1bGFyIGV4cHJl c3Npb25zIHRvIG1hdGNoIHZhcnlpbmcgaGVhZGVyIHByZWZpeGVzLgogICIqTGVhZGluZyBzdHJp bmcgd2hpY2ggaGVscHMgZGlzdGluZ3Vpc2ggdG9waWMgaGVhZGVycy4KCk91dGxpbmUgdG9waWMg aGVhZGVyIGxpbmVzIGFyZSBpZGVudGlmaWVkIGJ5IGEgbGVhZGluZyB0b3BpYwpoZWFkZXIgcHJl Zml4LCB3aGljaCBtb3N0bHkgaGF2ZSB0aGUgdmFsdWUgb2YgdGhpcyB2YXIgYXQgdGhlaXIgZnJv bnQuCkxldmVsIDEgdG9waWNzIGFyZSBleGNlcHRpb25zLiAgVGhleSBjb25zaXN0IG9mIG9ubHkg YSBzaW5nbGUKY2hhcmFjdGVyLCB3aGljaCBpcyB0eXBpY2FsbHkgc2V0IHRvIHRoZSBgYWxsb3V0 LXByaW1hcnktYnVsbGV0Jy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoobWFr ZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1oZWFkZXItcHJlZml4KQo7OzsjIyNhdXRv bG9hZAoocHV0ICdhbGxvdXQtaGVhZGVyLXByZWZpeCAnc2FmZS1sb2NhbC12YXJpYWJsZSAnc3Ry aW5ncCkKOzs7XyAgPSBhbGxvdXQtcHJpbWFyeS1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtcHJp bWFyeS1idWxsZXQgIioiCiAgIkJ1bGxldCB1c2VkIGZvciB0b3AtbGV2ZWwgb3V0bGluZSB0b3Bp Y3MuCgpPdXRsaW5lIHRvcGljIGhlYWRlciBsaW5lcyBhcmUgaWRlbnRpZmllZCBieSBhIGxlYWRp bmcgdG9waWMgaGVhZGVyCnByZWZpeCwgd2hpY2ggaXMgY29uY2x1ZGVkIGJ5IGJ1bGxldHMgdGhh dCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhpcwp2YXIgYW5kIHRoZSByZXNwZWN0aXZlIGFsbG91 dC0qLWJ1bGxldHMtc3RyaW5nIHZhcnMuCgpUaGUgdmFsdWUgb2YgYW4gYXN0ZXJpc2sgKGAqJykg cHJvdmlkZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CndpdGggdGhlIG9yaWdpbmFsIEVt YWNzIG91dGxpbmUgbW9kZS4gIFNlZSBgYWxsb3V0LXBsYWluLWJ1bGxldHMtc3RyaW5nJwphbmQg YGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycgZm9yIHRoZSByYW5nZSBvZiBhdmFp bGFibGUKYnVsbGV0cy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoobWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wcmltYXJ5LWJ1bGxldCkKOzs7IyMjYXV0b2xv YWQKKHB1dCAnYWxsb3V0LXByaW1hcnktYnVsbGV0ICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJp bmdwKQo7OztfICA9IGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZwooZGVmY3VzdG9tIGFsbG91 dC1wbGFpbi1idWxsZXRzLXN0cmluZyAiLiwiCiAgIipUaGUgYnVsbGV0cyBub3JtYWxseSB1c2Vk IGluIG91dGxpbmUgdG9waWMgcHJlZml4ZXMuCgpTZWUgYGFsbG91dC1kaXN0aW5jdGl2ZS1idWxs ZXRzLXN0cmluZycgZm9yIHRoZSBvdGhlciBraW5kIG9mCmJ1bGxldHMuCgpETyBOT1QgaW5jbHVk ZSB0aGUgY2xvc2Utc3F1YXJlLWJyYWNrZXQsIGBdJywgYXMgYSBidWxsZXQuCgpPdXRsaW5lIG1v ZGUgaGFzIHRvIGJlIHJlYWN0aXZhdGVkIGluIG9yZGVyIGZvciBjaGFuZ2VzIHRvIHRoZSB2YWx1 ZQpvZiB0aGlzIHZhciB0byB0YWtlIGVmZmVjdC4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAn YWxsb3V0KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wbGFpbi1idWxsZXRz LXN0cmluZykKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxsb3V0LXBsYWluLWJ1bGxldHMtc3RyaW5n ICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJpbmdwKQo7OztfICA9IGFsbG91dC1kaXN0aW5jdGl2 ZS1idWxsZXRzLXN0cmluZwooZGVmY3VzdG9tIGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0 cmluZyAiKistPT4oKVt7fSYhPyMlXCJYQCR+X1xcOjteIgogICIqUGVyc2lzdGVudCBvdXRsaW5l IGhlYWRlciBidWxsZXRzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbCB0b3BpY3MuCgpUaGVz ZSBidWxsZXRzIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRvcGljcyBmcm9tIHRoZSBydW4tb2Yt dGhlLW1pbGwKb25lcy4gIFRoZXkgYXJlIG5vdCB1c2VkIGluIHRoZSBzdGFuZGFyZCB0b3BpYyBo ZWFkZXJzIGNyZWF0ZWQgYnkKdGhlIHRvcGljLW9wZW5pbmcsIHNoaWZ0aW5nLCBhbmQgcmVidWxs ZXRpbmcgXChlZywgb24gdG9waWMgc2hpZnQsCnRvcGljIHBhc3RlLCBibGFua2V0IHJlYnVsbGV0 aW5nKSByb3V0aW5lcywgYnV0IGFyZSBvZmZlcmVkIGFtb25nIHRoZQpjaG9pY2VzIGZvciByZWJ1 bGxldGluZy4gIFRoZXkgYXJlIG5vdCBhbHRlcmVkIGJ5IHRoZSBhYm92ZSBhdXRvbWF0aWMKcmVi dWxsZXRpbmcsIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG8gY2hhcmFjdGVyaXplIHRvcGljcywgZWc6 CgogYD8nIHF1ZXN0aW9uIHRvcGljcwogYFwoJyBwYXJlbnRoZXRpYyBjb21tZW50IFwod2l0aCBh IG1hdGNoaW5nIGNsb3NlIHBhcmVuIGluc2lkZSkKIGBbJyBtZXRhLW5vdGUgXCh3aXRoIGEgbWF0 Y2hpbmcgY2xvc2UgXSBpbnNpZGUpCiBgXCInIGEgcXVvdGF0aW9uCiBgPScgdmFsdWUgc2V0dGlu Z3MKIGB+JyBcIm1vcmUgb3IgbGVzc1wiCiBgXicgc2VlIGFib3ZlCgogLi4uIGZvciBleGFtcGxl LiAgKGAjJyB0eXBpY2FsbHkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIHRvIHRoZSBzb2Z0d2FyZSwK YWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBgYWxsb3V0LW51bWJlcmVkLWJ1bGxldCcuKQoKU2Vl IGBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcnIGZvciB0aGUgc2VsZWN0aW9uIG9mCmFsdGVy bmF0aW5nIGJ1bGxldHMuCgpZb3UgbXVzdCBydW4gYHNldC1hbGxvdXQtcmVnZXhwJyBpbiBvcmRl ciBmb3Igb3V0bGluZSBtb2RlIHRvCnJlY29uY2lsZSB0byBjaGFuZ2VzIG9mIHRoaXMgdmFsdWUu CgpETyBOT1QgaW5jbHVkZSB0aGUgY2xvc2Utc3F1YXJlLWJyYWNrZXQsIGBdJywgb24gZWl0aGVy IG9mIHRoZSBidWxsZXQKc3RyaW5ncy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0 KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRz LXN0cmluZykKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMt c3RyaW5nICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJpbmdwKQoKOzs7XyAgPSBhbGxvdXQtdXNl LW1vZGUtc3BlY2lmaWMtbGVhZGVyCihkZWZjdXN0b20gYWxsb3V0LXVzZS1tb2RlLXNwZWNpZmlj LWxlYWRlciB0CiAgIipXaGVuIG5vbi1uaWwsIHVzZSBtb2RlLXNwZWNpZmljIHRvcGljLWhlYWRl ciBwcmVmaXhlcy4KCkFsbG91dCBvdXRsaW5lIG1vZGUgd2lsbCB1c2UgdGhlIG1vZGUtc3BlY2lm aWMgYGFsbG91dC1tb2RlLWxlYWRlcnMnIG9yCmNvbW1lbnQtc3RhcnQgc3RyaW5nLCBpZiBhbnks IHRvIGxlYWQgdGhlIHRvcGljIHByZWZpeCBzdHJpbmcsIHNvIHRvcGljCmhlYWRlcnMgbG9vayBs aWtlIGNvbW1lbnRzIGluIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gIEl0IHdpbGwgYWxzbyB1 c2UKdGhlIGNvbW1lbnQtc3RhcnQgc3RyaW5nLCB3aXRoIGFuICdfJyBhcHBlbmRlZCwgZm9yIGBh bGxvdXQtcHJpbWFyeS1idWxsZXQnLgoKU3RyaW5nIHZhbHVlcyBhcmUgdXNlZCBhcyBsaXRlcmFs cywgbm90IHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHNvCmRvIG5vdCBlc2NhcGUgYW55IHJlZ3VsYXJl LWV4cHJlc3Npb24gY2hhcmFjdGVycy4KClZhbHVlIHQgbWVhbnMgdG8gZmlyc3QgY2hlY2sgZm9y IGFzc29jIHZhbHVlIGluIGBhbGxvdXQtbW9kZS1sZWFkZXJzJwphbGlzdCwgdGhlbiB1c2UgY29t bWVudC1zdGFydCBzdHJpbmcsIGlmIGFueSwgdGhlbiB1c2UgZGVmYXVsdCBcKGAuJykuClwoU2Vl IG5vdGUgYWJvdXQgdXNlIG9mIGNvbW1lbnQtc3RhcnQgc3RyaW5ncywgYmVsb3cuKQoKU2V0IHRv IHRoZSBzeW1ib2wgZm9yIGVpdGhlciBvZiBgYWxsb3V0LW1vZGUtbGVhZGVycycgb3IKYGNvbW1l bnQtc3RhcnQnIHRvIHVzZSBvbmx5IG9uZSBvZiB0aGVtLCByZXNwZWN0aXZlbHkuCgpWYWx1ZSBu aWwgbWVhbnMgdG8gYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBcKGAuJykgYW5kIGxlYXZlCmBhbGxv dXQtcHJpbWFyeS1idWxsZXQnIHVuYWx0ZXJlZC4KCmNvbW1lbnQtc3RhcnQgc3RyaW5ncyB0aGF0 IGRvIG5vdCBlbmQgaW4gc3BhY2VzIGFyZSB0cmlwbGVkIGluCnRoZSBoZWFkZXItcHJlZml4LCBh bmQgYW4gYF8nIHVuZGVyc2NvcmUgaXMgdGFja2VkIG9uIHRoZSBlbmQsIHRvCmRpc3Rpbmd1aXNo IHRoZW0gZnJvbSByZWd1bGFyIGNvbW1lbnQgc3RyaW5ncy4gIGNvbW1lbnQtc3RhcnQKc3RyaW5n cyB0aGF0IGRvIGVuZCBpbiBzcGFjZXMgYXJlIG5vdCB0cmlwbGVkLCBidXQgYW4gdW5kZXJzY29y ZQppcyBzdWJzdGl0dXRlZCBmb3IgdGhlIHNwYWNlLiBbVGhpcyBwcmVzdW1lcyB0aGF0IHRoZSBz cGFjZSBpcwpmb3IgYXBwZWFyYW5jZSwgbm90IGNvbW1lbnQgc3ludGF4LiAgWW91IGNhbiB1c2UK YGFsbG91dC1tb2RlLWxlYWRlcnMnIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IsIHdoZW4KdW5k ZXNpcmVkLl0iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IHQpIChjb25zdCBuaWwpIHN0cmluZwoJ CSAoY29uc3QgYWxsb3V0LW1vZGUtbGVhZGVycykKCQkgKGNvbnN0IGNvbW1lbnQtc3RhcnQpKQog IDpncm91cCAnYWxsb3V0KQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtdXNlLW1vZGUtc3Bl Y2lmaWMtbGVhZGVyICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgJyhsYW1iZGEgKHgpIChvciAo bWVtcSB4ICcodCBuaWwgYWxsb3V0LW1vZGUtbGVhZGVycyBjb21tZW50LXN0YXJ0KSkKICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmdwIHgpKSkpCjs7O18gID0gYWxsb3V0LW1vZGUtbGVhZGVy cwooZGVmdmFyIGFsbG91dC1tb2RlLWxlYWRlcnMgJygpCiAgIlNwZWNpZmljIGFsbG91dC1wcmVm aXggbGVhZGluZyBzdHJpbmdzIHBlciBtYWpvciBtb2Rlcy4KClVzZSB0aGlzIGlmIHRoZSBtb2Rl J3MgY29tbWVudC1zdGFydCBzdHJpbmcgaXNuJ3Qgd2hhdCB5b3UKcHJlZmVyLCBvciBpZiB0aGUg bW9kZSBsYWNrcyBhIGNvbW1lbnQtc3RhcnQgc3RyaW5nLiAgU2VlCmBhbGxvdXQtdXNlLW1vZGUt c3BlY2lmaWMtbGVhZGVyJyBmb3IgbW9yZSBkZXRhaWxzLgoKSWYgeW91J3JlIGNvbnN0cnVjdGlu ZyBhIHN0cmluZyB0aGF0IHdpbGwgY29tbWVudC1vdXQgb3V0bGluZQpzdHJ1Y3R1cmluZyBzbyBp dCBjYW4gYmUgaW5jbHVkZWQgaW4gcHJvZ3JhbSBjb2RlLCBhcHBlbmQgYW4gZXh0cmEKY2hhcmFj dGVyLCBsaWtlIGFuIFwiX1wiIHVuZGVyc2NvcmUsIHRvIGRpc3Rpbmd1aXNoIHRoZSBsZWFkIHN0 cmluZwpmcm9tIHJlZ3VsYXIgY29tbWVudHMgdGhhdCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nLW9m LWxpbmUuIikKCjs7O18gID0gYWxsb3V0LW9sZC1zdHlsZS1wcmVmaXhlcwooZGVmY3VzdG9tIGFs bG91dC1vbGQtc3R5bGUtcHJlZml4ZXMgbmlsCiAgIipXaGVuIG5vbi1uaWwsIHVzZSBvbmx5IG9s ZC1hbmQtY3J1c3R5IGBvdXRsaW5lLW1vZGUnIGAqJyB0b3BpYyBwcmVmaXhlcy4KCk5vbi1uaWwg cmVzdHJpY3RzIHRoZSB0b3BpYyBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uCmZ1bmN0aW9ucyB0 byBhc3Rlcml4LXBhZGRlZCBwcmVmaXhlcywgc28gdGhleSBsb29rIGV4YWN0bHkKbGlrZSB0aGUg b3JpZ2luYWwgRW1hY3Mtb3V0bGluZSBzdHlsZSBwcmVmaXhlcy4KCldoYXRldmVyIHRoZSBzZXR0 aW5nIG9mIHRoaXMgdmFyaWFibGUsIGJvdGggb2xkIGFuZCBuZXcgc3R5bGUgcHJlZml4ZXMKYXJl IGFsd2F5cyByZXNwZWN0ZWQgYnkgdGhlIHRvcGljIG1hbmV1dmVyaW5nIGZ1bmN0aW9ucy4iCiAg OnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxv Y2FsICdhbGxvdXQtb2xkLXN0eWxlLXByZWZpeGVzKQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxv dXQtb2xkLXN0eWxlLXByZWZpeGVzICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91 bmRwICdib29sZWFucCkgJ2Jvb2xlYW5wICcobGFtYmRhICh4KSAobWVtYmVyIHggJyh0IG5pbCkp KSkpCjs7O18gID0gYWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMgLSBhbHRlcm5hdGluZyBidWxsZXRz CihkZWZjdXN0b20gYWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMgdAogICIqRG8gZmFuY3kgc3R1ZmYg d2l0aCB0b3BpYyBwcmVmaXggYnVsbGV0cyBhY2NvcmRpbmcgdG8gbGV2ZWwsIGV0Yy4KCk5vbi1u aWwgZW5hYmxlcyB0b3BpYyBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBhbmQgcmVwb3NpdGlvbmlu ZwpmdW5jdGlvbnMgdG8gdmFyeSB0aGUgdG9waWMgYnVsbGV0IGNoYXIgKHRoZSBjaGFyIHRoYXQg bWFya3MgdGhlIHRvcGljCmRlcHRoKSBqdXN0IHByZWNlZGluZyB0aGUgc3RhcnQgb2YgdGhlIHRv cGljIHRleHQpIGFjY29yZGluZyB0byBsZXZlbC4KT3RoZXJ3aXNlLCBvbmx5IGFzdGVyaXNrcyAo YConKSBhbmQgZGlzdGluY3RpdmUgYnVsbGV0cyBhcmUgdXNlZC4KClRoaXMgaXMgaG93IGFuIG91 dGxpbmUgY2FuIGxvb2sgKGJ1dCBzYW5zIGluZGVudGF0aW9uKSB3aXRoIHN0eWxpc2gKcHJlZml4 ZXM6CgogICAgKiBUb3AgbGV2ZWwKICAgIC4qIEEgdG9waWMKICAgIC4gKyBPbmUgbGV2ZWwgMyBz dWJ0b3BpYwogICAgLiAgLiBPbmUgbGV2ZWwgNCBzdWJ0b3BpYwogICAgLiAgLiBBIHNlY29uZCA0 IHN1YnRvcGljCiAgICAuICsgQW5vdGhlciBsZXZlbCAzIHN1YnRvcGljCiAgICAuICAjMSBBIG51 bWJlcmVkIGxldmVsIDQgc3VidG9waWMKICAgIC4gICMyIEFub3RoZXIKICAgIC4gICEgQW5vdGhl ciBsZXZlbCA0IHN1YnRvcGljIHdpdGggYSBkaWZmZXJlbnQgZGlzdGluY3RpdmUgYnVsbGV0CiAg ICAuICAjNCBBbmQgYW5vdGhlciBudW1iZXJlZCBsZXZlbCA0IHN1YnRvcGljCgpUaGlzIHdvdWxk IGJlIGFuIG91dGxpbmUgd2l0aCBzdHlsaXNoIHByZWZpeGVzIGluaGliaXRlZCAoYnV0IHRoZQpu dW1iZXJlZCBhbmQgb3RoZXIgZGlzdGluY3RpdmUgYnVsbGV0cyByZXRhaW5lZCk6CgogICAgKiBU b3AgbGV2ZWwKICAgIC4qIEEgdG9waWMKICAgIC4gKiBPbmUgbGV2ZWwgMyBzdWJ0b3BpYwogICAg LiAgKiBPbmUgbGV2ZWwgNCBzdWJ0b3BpYwogICAgLiAgKiBBIHNlY29uZCA0IHN1YnRvcGljCiAg ICAuICogQW5vdGhlciBsZXZlbCAzIHN1YnRvcGljCiAgICAuICAjMSBBIG51bWJlcmVkIGxldmVs IDQgc3VidG9waWMKICAgIC4gICMyIEFub3RoZXIKICAgIC4gICEgQW5vdGhlciBsZXZlbCA0IHN1 YnRvcGljIHdpdGggYSBkaWZmZXJlbnQgZGlzdGluY3RpdmUgYnVsbGV0CiAgICAuICAjNCBBbmQg YW5vdGhlciBudW1iZXJlZCBsZXZlbCA0IHN1YnRvcGljCgpTdHlsaXNoIGFuZCBjb25zdGFudCBw cmVmaXhlcyAoYXMgd2VsbCBhcyBvbGQtc3R5bGUgcHJlZml4ZXMpIGFyZQphbHdheXMgcmVzcGVj dGVkIGJ5IHRoZSB0b3BpYyBtYW5ldXZlcmluZyBmdW5jdGlvbnMsIHJlZ2FyZGxlc3Mgb2YKdGhp cyB2YXJpYWJsZSBzZXR0aW5nLgoKVGhlIHNldHRpbmcgb2YgdGhpcyB2YXIgaXMgbm90IHJlbGV2 YW50IHdoZW4gYGFsbG91dC1vbGQtc3R5bGUtcHJlZml4ZXMnCmlzIG5vbi1uaWwuIgogIDp0eXBl ICdib29sZWFuCiAgOmdyb3VwICdhbGxvdXQpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAn YWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1zdHls aXNoLXByZWZpeGVzICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91bmRwICdib29s ZWFucCkgJ2Jvb2xlYW5wICcobGFtYmRhICh4KSAobWVtYmVyIHggJyh0IG5pbCkpKSkpCgo7Oztf ICA9IGFsbG91dC1udW1iZXJlZC1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtbnVtYmVyZWQtYnVs bGV0ICIjIgogICIqU3RyaW5nIGRlc2lnbmF0aW5nIGJ1bGxldCBvZiB0b3BpY3MgdGhhdCBoYXZl IGF1dG8tbnVtYmVyaW5nOyBuaWwgZm9yIG5vbmUuCgpUb3BpY3MgaGF2aW5nIHRoaXMgYnVsbGV0 IGhhdmUgYXV0b21hdGljIG1haW50ZW5hbmNlIG9mIGEgc2libGluZwpzZXF1ZW5jZS1udW1iZXIg dGFja2VkIG9uLCBqdXN0IGFmdGVyIHRoZSBidWxsZXQuICBDb252ZW50aW9uYWxseSBzZXQKdG8g XCIjXCIsIHlvdSBjYW4gc2V0IGl0IHRvIGEgYnVsbGV0IG9mIHlvdXIgY2hvaWNlLiAgQSBuaWwg dmFsdWUKZGlzYWJsZXMgbnVtYmVyaW5nIG1haW50ZW5hbmNlLiIKICA6dHlwZSAnKGNob2ljZSAo Y29uc3QgbmlsKSBzdHJpbmcpCiAgOmdyb3VwICdhbGxvdXQpCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LW51bWJlcmVkLWJ1bGxldCkKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxs b3V0LW51bWJlcmVkLWJ1bGxldCAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5k cCAnc3RyaW5nLW9yLW51bGwtcCkKICAgICAgICAgJ3N0cmluZy1vci1udWxsLXAKICAgICAgICco bGFtYmRhICh4KSAob3IgKHN0cmluZ3AgeCkgKG51bGwgeCkpKSkpCjs7O18gID0gYWxsb3V0LWZp bGUteHJlZi1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCAiQCIKICAi KkJ1bGxldCBzaWduaWZ5aW5nIGZpbGUgY3Jvc3MtcmVmZXJlbmNlcywgZm9yIGBhbGxvdXQtcmVz b2x2ZS14cmVmJy4KClNldCB0aGlzIHZhciB0byB0aGUgYnVsbGV0IHlvdSB3YW50IHRvIHVzZSBm b3IgZmlsZSBjcm9zcy1yZWZlcmVuY2VzLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgbmlsKSBz dHJpbmcpCiAgOmdyb3VwICdhbGxvdXQpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1maWxl LXhyZWYtYnVsbGV0ICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91bmRwICdzdHJp bmctb3ItbnVsbC1wKQogICAgICAgICAnc3RyaW5nLW9yLW51bGwtcAogICAgICAgJyhsYW1iZGEg KHgpIChvciAoc3RyaW5ncCB4KSAobnVsbCB4KSkpKSkKOzs7XyAgPSBhbGxvdXQtcHJlc2VudGF0 aW9uLXBhZGRpbmcKKGRlZmN1c3RvbSBhbGxvdXQtcHJlc2VudGF0aW9uLXBhZGRpbmcgMgogICIq UHJlc2VudGF0aW9uLWZvcm1hdCB3aGl0ZS1zcGFjZSBwYWRkaW5nIGZhY3RvciwgZm9yIGdyZWF0 ZXIgaW5kZW50LiIKICA6dHlwZSAnaW50ZWdlcgogIDpncm91cCAnYWxsb3V0KQoKKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtcHJlc2VudGF0aW9uLXBhZGRpbmcpCjs7OyMjI2F1 dG9sb2FkCihwdXQgJ2FsbG91dC1wcmVzZW50YXRpb24tcGFkZGluZyAnc2FmZS1sb2NhbC12YXJp YWJsZSAnaW50ZWdlcnApCgo7OztfICA9IGFsbG91dC1hYmJyZXZpYXRlLWZsYXR0ZW5lZC1udW1i ZXJpbmcKKGRlZmN1c3RvbSBhbGxvdXQtYWJicmV2aWF0ZS1mbGF0dGVuZWQtbnVtYmVyaW5nIG5p bAogICIqSWYgbm9uLW5pbCwgYGFsbG91dC1mbGF0dGVuLWV4cG9zZWQtdG8tYnVmZmVyJyBhYmJy ZXZpYXRlcyB0b3BpYwpudW1iZXJzIHRvIG1pbmltYWwgYW1vdW50IHdpdGggc29tZSBjb250ZXh0 LiAgT3RoZXJ3aXNlLCBlbnRpcmUKbnVtYmVycyBhcmUgYWx3YXlzIHVzZWQuIgogIDp0eXBlICdi b29sZWFuCiAgOmdyb3VwICdhbGxvdXQpCgo7OztfICsgTGFUZVggZm9ybWF0dGluZwo7OztfICAt IGFsbG91dC1udW1iZXItcGFnZXMKKGRlZmN1c3RvbSBhbGxvdXQtbnVtYmVyLXBhZ2VzIG5pbAog ICIqTm9uLW5pbCB0dXJucyBvbiBwYWdlIG51bWJlcmluZyBmb3IgTGFUZVggZm9ybWF0dGluZyBv ZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnYWxsb3V0KQo7OztfICAt IGFsbG91dC1sYWJlbC1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1sYWJlbC1zdHlsZSAiXFxsYXJn ZVxcYmYiCiAgIipGb250IGFuZCBzaXplIG9mIGxhYmVscyBmb3IgTGFUZVggZm9ybWF0dGluZyBv ZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQpCjs7O18gIC0g YWxsb3V0LWhlYWQtbGluZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1oZWFkLWxpbmUtc3R5bGUg IlxcbGFyZ2VcXHNsICIKICAiKkZvbnQgYW5kIHNpemUgb2YgZW50cmllcyBmb3IgTGFUZVggZm9y bWF0dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQp Cjs7O18gIC0gYWxsb3V0LWJvZHktbGluZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1ib2R5LWxp bmUtc3R5bGUgIiAiCiAgIipGb250IGFuZCBzaXplIG9mIGVudHJpZXMgZm9yIExhVGVYIGZvcm1h dHRpbmcgb2YgYW4gb3V0bGluZS4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQo7 OztfICAtIGFsbG91dC10aXRsZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC10aXRsZS1zdHlsZSAi XFxMYXJnZVxcYmYiCiAgIipGb250IGFuZCBzaXplIG9mIHRpdGxlcyBmb3IgTGFUZVggZm9ybWF0 dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQpCjs7 O18gIC0gYWxsb3V0LXRpdGxlCihkZWZjdXN0b20gYWxsb3V0LXRpdGxlICcob3IgYnVmZmVyLWZp bGUtbmFtZSAoYnVmZmVyLW5hbWUpKQogICIqRXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgdG8g ZGV0ZXJtaW5lIHRoZSB0aXRsZSBmb3IgTGFUZVgKZm9ybWF0dGVkIGNvcHkuIgogIDp0eXBlICdz ZXhwCiAgOmdyb3VwICdhbGxvdXQpCjs7O18gIC0gYWxsb3V0LWxpbmUtc2tpcAooZGVmY3VzdG9t IGFsbG91dC1saW5lLXNraXAgIi4wNWNtIgogICIqU3BhY2UgYmV0d2VlbiBsaW5lcyBmb3IgTGFU ZVggZm9ybWF0dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdh bGxvdXQpCjs7O18gIC0gYWxsb3V0LWluZGVudAooZGVmY3VzdG9tIGFsbG91dC1pbmRlbnQgIi4z Y20iCiAgIipMYVRlWCBmb3JtYXR0ZWQgZGVwdGgtaW5kZW50IHNwYWNpbmcuIgogIDp0eXBlICdz dHJpbmcKICA6Z3JvdXAgJ2FsbG91dCkKCjs7O18gKyBUb3BpYyBlbmNyeXB0aW9uCjs7O18gID0g YWxsb3V0LWVuY3J5cHRpb24gZ3JvdXAKKGRlZmdyb3VwIGFsbG91dC1lbmNyeXB0aW9uIG5pbAog ICJTZXR0aW5ncyBmb3IgdG9waWMgZW5jcnlwdGlvbiBmZWF0dXJlcyBvZiBhbGxvdXQgb3V0bGlu ZXIuIgogIDpncm91cCAnYWxsb3V0KQo7OztfICA9IGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1 bGxldAooZGVmY3VzdG9tIGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1bGxldCAifiIKICAiKkJ1 bGxldCBzaWduaWZ5aW5nIGVuY3J5cHRpb24gb2YgdGhlIGVudHJ5J3MgYm9keS4iCiAgOnR5cGUg JyhjaG9pY2UgKGNvbnN0IG5pbCkgc3RyaW5nKQogIDp2ZXJzaW9uICIyMi4wIgogIDpncm91cCAn YWxsb3V0LWVuY3J5cHRpb24pCjs7O18gID0gYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItaGFu ZGxpbmcKKGRlZmN1c3RvbSBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1oYW5kbGluZyB0CiAg IipFbmFibGUgdXNlIG9mIHN5bW1ldHJpYyBlbmNyeXB0aW9uIHBhc3NwaHJhc2UgdmVyaWZpZXIg aWYgbm9uLW5pbC4KClNlZSB0aGUgZG9jc3RyaW5nIGZvciB0aGUgYGFsbG91dC1lbmFibGUtZmls ZS12YXJpYWJsZS1hZGp1c3RtZW50Jwp2YXJpYWJsZSBmb3IgZGV0YWlscyBhYm91dCBhbGxvdXQg YWp1c3RtZW50IG9mIGZpbGUgdmFyaWFibGVzLiIKICA6dHlwZSAnYm9vbGVhbgogIDp2ZXJzaW9u ICIyMi4wIgogIDpncm91cCAnYWxsb3V0LWVuY3J5cHRpb24pCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItaGFuZGxpbmcpCjs7O18gID0gYWxs b3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZwooZGVmY3VzdG9tIGFsbG91dC1wYXNzcGhyYXNl LWhpbnQtaGFuZGxpbmcgJ2Fsd2F5cwogICIqRGljdGF0ZSBvdXRsaW5lIGVuY3J5cHRpb24gcGFz c3BocmFzZSByZW1pbmRlciBoYW5kbGluZzoKCiBhbHdheXMgLSBhbHdheXMgc2hvdyByZW1pbmRl ciB3aGVuIHByb21wdGluZwogbmVlZGVkIC0gc2hvdyByZW1pbmRlciBvbiBwYXNzcGhyYXNlIGVu dHJ5IGZhaWx1cmUKIGRpc2FibGVkIC0gbmV2ZXIgcHJlc2VudCBvciBhZGp1c3QgcmVtaW5kZXIK ClNlZSB0aGUgZG9jc3RyaW5nIGZvciB0aGUgYGFsbG91dC1lbmFibGUtZmlsZS12YXJpYWJsZS1h ZGp1c3RtZW50Jwp2YXJpYWJsZSBmb3IgZGV0YWlscyBhYm91dCBhbGxvdXQgYWp1c3RtZW50IG9m IGZpbGUgdmFyaWFibGVzLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgYWx3YXlzKQogICAgICAg ICAgICAgICAgIChjb25zdCBuZWVkZWQpCiAgICAgICAgICAgICAgICAgKGNvbnN0IGRpc2FibGVk KSkKICA6dmVyc2lvbiAiMjIuMCIKICA6Z3JvdXAgJ2FsbG91dC1lbmNyeXB0aW9uKQoobWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcpCjs7 O18gID0gYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMKKGRlZmN1c3RvbSBhbGxv dXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcyB0CiAgIipXaGVuIHNhdmluZywgc2hvdWxk IHRvcGljcyBwZW5kaW5nIGVuY3J5cHRpb24gYmUgZW5jcnlwdGVkPwoKVGhlIGlkZWEgaXMgdG8g cHJldmVudCBmaWxlLXN5c3RlbSBleHBvc3VyZSBvZiBhbnkgdW4tZW5jcnlwdGVkIHN0dWZmLCBh bmQKbW9zdGx5IGNvdmVycyBib3RoIGRlbGliZXJhdGUgZmlsZSB3cml0ZXMgYW5kIGF1dG8tc2F2 ZXMuCgogLSBZZXM6IGVuY3J5cHQgYWxsIHRvcGljcyBwZW5kaW5nIGVuY3J5cHRpb24sIGV2ZW4g aWYgaXQncyB0aGUgb25lCiAgICAgICAgY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gIFwoSW4gdGhh dCBjYXNlLCB0aGUgY3VycmVudGx5IGVkaXRlZCB0b3BpYwogICAgICAgIHdpbGwgYmUgYXV0b21h dGljYWxseSBkZWNyeXB0ZWQgYmVmb3JlIGFueSB1c2VyIGludGVyYWN0aW9uLCBzbyB0aGV5CiAg ICAgICAgY2FuIGNvbnRpbnVlIGVkaXRpbmcgYnV0IHRoZSBjb3B5IG9uIHRoZSBmaWxlIHN5c3Rl bSB3aWxsIGJlCiAgICAgICAgZW5jcnlwdGVkLikKICAgICAgICBBdXRvLXNhdmVzIHdpbGwgdXNl IHRoZSBcIkFsbCBleGNlcHQgY3VycmVudCB0b3BpY1wiIG1vZGUgaWYgdGhpcwogICAgICAgIG9u ZSBpcyBzZWxlY3RlZCwgdG8gYXZvaWQgcHJhY3RpY2FsIGRpZmZpY3VsdGllcyAtIHNlZSBiZWxv dy4KIC0gQWxsIGV4Y2VwdCBjdXJyZW50IHRvcGljOiBza2lwIHRoZSB0b3BpYyBjdXJyZW50bHkg YmVpbmcgZWRpdGVkLCBldmVuIGlmCiAgICAgICBpdCdzIHBlbmRpbmcgZW5jcnlwdGlvbi4gIFRo aXMgbWF5IGV4cG9zZSB0aGUgY3VycmVudCB0b3BpYyBvbiB0aGUKICAgICAgIGZpbGUgc3l0ZW0s IGJ1dCBhdm9pZHMgdGhlIG51aXNhbmNlIG9mIHByb21wdHMgZm9yIHRoZSBlbmNyeXB0aW9uCiAg ICAgICBwYXNzcGhyYXNlIGluIHRoZSBtaWRkbGUgb2YgZWRpdGluZyBmb3IsIGVnLCBhdXRvc2F2 ZXMuCiAgICAgICBUaGlzIG1vZGUgaXMgdXNlZCBmb3IgYXV0by1zYXZlcyBmb3IgYm90aCB0aGlz IG9wdGlvbiBhbmQgXCJZZXNcIi4KIC0gTm86IGxlYXZlIGl0IHRvIHRoZSB1c2VyIHRvIGVuY3J5 cHQgYW55IHVuZW5jcnlwdGVkIHRvcGljcy4KCkZvciBwcmFjdGljYWwgcmVhc29ucywgYXV0by1z YXZlcyBhbHdheXMgdXNlIHRoZSAnZXhjZXB0LWN1cnJlbnQgcG9saWN5CndoZW4gYXV0by1lbmNy eXB0aW9uIGlzIGVuYWJsZWQuICBcKE90aGVyd2lzZSwgc3B1cmlvdXMgcGFzc3BocmFzZSBwcm9t cHRzCmFuZCB1bmF2b2lkYWJsZSB0aW1pbmcgY29sbGlzaW9ucyBhcmUgdG9vIGRpc3J1cHRpdmUu KSAgSWYgc2VjdXJpdHkgZm9yIGEKZmlsZSByZXF1aXJlcyB0aGF0IGV2ZW4gdGhlIGN1cnJlbnQg dG9waWMgaXMgbmV2ZXIgYXV0by1zYXZlZCBpbiB0aGUgY2xlYXIsCmRpc2FibGUgYXV0by1zYXZl cyBmb3IgdGhhdCBmaWxlLiIKCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIlllcyIgdCkK ICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiQWxsIGV4Y2VwdCBjdXJyZW50IHRvcGljIiBl eGNlcHQtY3VycmVudCkKICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiTm8iIG5pbCkpCiAg OnZlcnNpb24gIjIyLjAiCiAgOmdyb3VwICdhbGxvdXQtZW5jcnlwdGlvbikKKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcykKCjs7 O18gKyBEZXZlbG9wZXIKOzs7XyAgPSBhbGxvdXQtZGV2ZWxvcGVyIGdyb3VwCihkZWZncm91cCBh bGxvdXQtZGV2ZWxvcGVyIG5pbAogICJTZXR0aW5ncyBmb3IgdG9waWMgZW5jcnlwdGlvbiBmZWF0 dXJlcyBvZiBhbGxvdXQgb3V0bGluZXIuIgogIDpncm91cCAnYWxsb3V0KQo7OztfICA9IGFsbG91 dC1ydW4tdW5pdC10ZXN0cy1vbi1sb2FkCihkZWZjdXN0b20gYWxsb3V0LXJ1bi11bml0LXRlc3Rz LW9uLWxvYWQgbmlsCiAgIipXaGVuIG5vbi1uaWwsIHVuaXQgdGVzdHMgd2lsbCBiZSBydW4gYXQg ZW5kIG9mIGxvYWRpbmcgdGhlIGFsbG91dCBtb2R1bGUuCgpHZW5lcmFsbHksIGFsbG91dCBjb2Rl IGRldmVsb3BlcnMgYXJlIHRoZSBvbmx5IG9uZXMgd2hvJ2xsIHdhbnQgdG8gc2V0IHRoaXMuCgpc KElmIHNldCwgdGhpcyBtYWtlcyBpdCBhbiBldmVuIGJldHRlciBwcmFjdGljZSB0byBleGVyY2lz ZSBjaGFuZ2VzIGJ5CmRvaW5nIGJ5dGUtY29tcGlsYXRpb24gd2l0aCBhIHJlcGVhdCBjb3VudCwg c28gdGhlIGZpbGUgaXMgbG9hZGVkIGFmdGVyCmNvbXBpbGF0aW9uLikKClNlZSBgYWxsb3V0LXJ1 bi11bml0LXRlc3RzJyB0byBzZWUgd2hhdCdzIHJ1bi4iCiAgOnR5cGUgJ2Jvb2xlYW4KICA6Z3Jv dXAgJ2FsbG91dC1kZXZlbG9wZXIpCgo7OztfICsgTWlzY2VsbGFuZW91cyBjdXN0b21pemF0aW9u Cgo7OztfICA9IGFsbG91dC1jb21tYW5kLXByZWZpeAooZGVmY3VzdG9tIGFsbG91dC1jb21tYW5k LXByZWZpeCAiXEMtYyAiCiAgIipLZXkgc2VxdWVuY2UgdG8gYmUgdXNlZCBhcyBwcmVmaXggZm9y IG91dGxpbmUgbW9kZSBjb21tYW5kIGtleSBiaW5kaW5ncy4KCkRlZmF1bHQgaXMgJ1xDLWM8c3Bh Y2U+JzsganVzdCAnXEMtYycgaXMgbW9yZSBzaG9ydC1hbmQtc3dlZXQsIGlmIHlvdSdyZQp3aWxs aW5nIHRvIGxldCBhbGxvdXQgdXNlIGEgYnVuY2ggb2YgXEMtYyBrZXliaW5kaW5ncy4iCiAgOnR5 cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoKOzs7XyAgPSBhbGxvdXQta2V5YmluZGluZ3Mt bGlzdAo7OzsgWW91IGhhdmUgdG8gcmVhY3RpdmF0ZSBhbGxvdXQtbW9kZSAtIGAoYWxsb3V0LW1v ZGUgdCknIC0gdG8KOzs7IGluc3RpdHV0ZSBjaGFuZ2VzIHRvIHRoaXMgdmFyLgooZGVmdmFyIGFs bG91dC1rZXliaW5kaW5ncy1saXN0ICgpCiAgIipMaXN0IG9mIGBhbGxvdXQtbW9kZScga2V5IC8g ZnVuY3Rpb24gYmluZGluZ3MsIGZvciBgYWxsb3V0LW1vZGUtbWFwJy4KClN0cmluZyBvciB2ZWN0 b3Iga2V5IHdpbGwgYmUgcHJlZmFjZWQgd2l0aCBgYWxsb3V0LWNvbW1hbmQtcHJlZml4JywKdW5s ZXNzIG9wdGlvbmFsIHRoaXJkLCBub24tbmlsIGVsZW1lbnQgaXMgcHJlc2VudC4iKQooc2V0cSBh bGxvdXQta2V5YmluZGluZ3MtbGlzdAogICAgICAnKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBNb3Rpb24gY29tbWFuZHM6CiAgICAgICAgKCJcQy1uIiBhbGxvdXQt bmV4dC12aXNpYmxlLWhlYWRpbmcpCiAgICAgICAgKCJcQy1wIiBhbGxvdXQtcHJldmlvdXMtdmlz aWJsZS1oZWFkaW5nKQogICAgICAgICgiXEMtdSIgYWxsb3V0LXVwLWN1cnJlbnQtbGV2ZWwpCiAg ICAgICAgKCJcQy1mIiBhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsKQogICAgICAgICgiXEMt YiIgYWxsb3V0LWJhY2t3YXJkLWN1cnJlbnQtbGV2ZWwpCiAgICAgICAgKCJcQy1hIiBhbGxvdXQt YmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnkpCiAgICAgICAgKCJcQy1lIiBhbGxvdXQtZW5kLW9m LWVudHJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFeHBvc3Vy ZSBjb21tYW5kczoKICAgICAgICAoIlxDLWkiIGFsbG91dC1zaG93LWNoaWxkcmVuKQogICAgICAg ICgiXEMtcyIgYWxsb3V0LXNob3ctY3VycmVudC1zdWJ0cmVlKQogICAgICAgICgiXEMtaCIgYWxs b3V0LWhpZGUtY3VycmVudC1zdWJ0cmVlKQogICAgICAgICgiaCIgYWxsb3V0LWhpZGUtY3VycmVu dC1zdWJ0cmVlKQogICAgICAgICgiXEMtbyIgYWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSkKICAg ICAgICAoIiEiIGFsbG91dC1zaG93LWFsbCkKICAgICAgICAoIngiIGFsbG91dC10b2dnbGUtY3Vy cmVudC1zdWJ0cmVlLWVuY3J5cHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IEFsdGVyYXRpb24gY29tbWFuZHM6CiAgICAgICAgKCIgIiBhbGxvdXQtb3Blbi1z aWJ0b3BpYykKICAgICAgICAoIi4iIGFsbG91dC1vcGVuLXN1YnRvcGljKQogICAgICAgICgiLCIg YWxsb3V0LW9wZW4tc3VwZXJ0b3BpYykKICAgICAgICAoIiciIGFsbG91dC1zaGlmdC1pbikKICAg ICAgICAoIj4iIGFsbG91dC1zaGlmdC1pbikKICAgICAgICAoIjwiIGFsbG91dC1zaGlmdC1vdXQp CiAgICAgICAgKCJcQy1tIiBhbGxvdXQtcmVidWxsZXQtdG9waWMpCiAgICAgICAgKCIqIiBhbGxv dXQtcmVidWxsZXQtY3VycmVudC1oZWFkaW5nKQogICAgICAgICgiIyIgYWxsb3V0LW51bWJlci1z aWJsaW5ncykKICAgICAgICAoIlxDLWsiIGFsbG91dC1raWxsLWxpbmUgdCkKICAgICAgICAoIlxN LWsiIGFsbG91dC1jb3B5LWxpbmUtYXMta2lsbCB0KQogICAgICAgICgiXEMteSIgYWxsb3V0LXlh bmsgdCkKICAgICAgICAoIlxNLXkiIGFsbG91dC15YW5rLXBvcCB0KQogICAgICAgICgiXEMtayIg YWxsb3V0LWtpbGwtdG9waWMpCiAgICAgICAgKCJcTS1rIiBhbGxvdXQtY29weS10b3BpYy1hcy1r aWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNaXNjZWxsYW5l b3VzIGNvbW1hbmRzOgoJOyhbP1xDLVwgXSBhbGxvdXQtbWFyay10b3BpYykKICAgICAgICAoIkAi IGFsbG91dC1yZXNvbHZlLXhyZWYpCiAgICAgICAgKCI9YyIgYWxsb3V0LWNvcHktZXhwb3NlZC10 by1idWZmZXIpCiAgICAgICAgKCI9aSIgYWxsb3V0LWluZGVudGVkLWV4cG9zZWQtdG8tYnVmZmVy KQoJKCI9dCIgYWxsb3V0LWxhdGV4aWZ5LWV4cG9zZWQpCgkoIj1wIiBhbGxvdXQtZmxhdHRlbi1l eHBvc2VkLXRvLWJ1ZmZlcikpKQoKOzs7XyAgPSBhbGxvdXQtaW5oaWJpdC1hdXRvLWZpbGwKKGRl ZmN1c3RvbSBhbGxvdXQtaW5oaWJpdC1hdXRvLWZpbGwgbmlsCiAgIipJZiBub24tbmlsLCBhdXRv LWZpbGwgd2lsbCBiZSBpbmhpYml0ZWQgaW4gdGhlIGFsbG91dCBidWZmZXJzLgoKWW91IGNhbiBj dXN0b21pemUgdGhpcyBzZXR0aW5nIHRvIHNldCBpdCBmb3IgYWxsIGFsbG91dCBidWZmZXJzLCBv ciBzZXQgaXQKaW4gaW5kaXZpZHVhbCBidWZmZXJzIGlmIHlvdSB3YW50IHRvIGluaGliaXQgYXV0 by1maWxsIG9ubHkgaW4gcGFydGljdWxhcgpidWZmZXJzLiAgXChZb3UgY291bGQgdXNlIGEgZnVu Y3Rpb24gb24gYGFsbG91dC1tb2RlLWhvb2snIHRvIGluaGliaXQKYXV0by1maWxsIGFjY29yZGlu ZywgZWcsIHRvIHRoZSBtYWpvciBtb2RlLlwpCgpJZiB5b3UgZG9uJ3Qgc2V0IHRoaXMgYW5kIGF1 dG8tZmlsbC1tb2RlIGlzIGVuYWJsZWQsIGFsbG91dCB3aWxsIHVzZSB0aGUKdmFsdWUgdGhhdCBg bm9ybWFsLWF1dG8tZmlsbC1mdW5jdGlvbicsIGlmIGFueSwgd2hlbiBhbGxvdXQgbW9kZSBzdGFy dHMsIG9yCmVsc2UgYWxsb3V0J3Mgc3BlY2lhbCBoYW5naW5nLWluZGVudCBtYWludGFpbmluZyBh dXRvLWZpbGwgZnVuY3Rpb24sCmBhbGxvdXQtYXV0by1maWxsJy4iCiAgOnR5cGUgJ2Jvb2xlYW4K ICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtaW5o aWJpdC1hdXRvLWZpbGwpCgo7OztfICA9IGFsbG91dC11c2UtaGFuZ2luZy1pbmRlbnRzCihkZWZj dXN0b20gYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMgdAogICIqSWYgbm9uLW5pbCwgdG9waWMg Ym9keSB0ZXh0IGF1dG8taW5kZW50IGRlZmF1bHRzIHRvIGluZGVudCBvZiB0aGUgaGVhZGVyLgpJ ZSwgaXQgaXMgaW5kZW50ZWQgdG8gYmUganVzdCBwYXN0IHRoZSBoZWFkZXIgcHJlZml4LiAgVGhp cyBpcwpyZWxldmFudCBtb3N0bHkgZm9yIHVzZSB3aXRoIGluZGVudGVkLXRleHQtbW9kZSwgb3Ig b3RoZXIgc2l0dWF0aW9ucwp3aGVyZSBhdXRvLWZpbGwgb2NjdXJzLiIKICA6dHlwZSAnYm9vbGVh bgogIDpncm91cCAnYWxsb3V0KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC11 c2UtaGFuZ2luZy1pbmRlbnRzKQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtdXNlLWhhbmdp bmctaW5kZW50cyAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5kcCAnYm9vbGVh bnApICdib29sZWFucCAnKGxhbWJkYSAoeCkgKG1lbWJlciB4ICcodCBuaWwpKSkpKQoKOzs7XyAg PSBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzCihkZWZjdXN0b20gYWxsb3V0LXJlaW5kZW50LWJvZGll cyAoaWYgYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMKCQkJCSAgICAndGV4dCkKICAiKk5vbi1u aWwgZW5hYmxlcyBhdXRvLWFkanVzdCBvZiB0b3BpYyBib2R5IGhhbmdpbmcgaW5kZW50IHdpdGgg ZGVwdGggc2hpZnRzLgoKV2hlbiBhY3RpdmUsIHRvcGljIGJvZHkgbGluZXMgdGhhdCBhcmUgaW5k ZW50ZWQgZXZlbiB3aXRoIG9yIGJleW9uZAp0aGVpciB0b3BpYyBoZWFkZXIgYXJlIHJlaW5kZW50 ZWQgdG8gY29ycmVzcG9uZCB3aXRoIGRlcHRoIHNoaWZ0cyBvZgp0aGUgaGVhZGVyLgoKQSB2YWx1 ZSBvZiB0IGVuYWJsZXMgcmVpbmRlbnQgaW4gbm9uLXByb2dyYW1taW5nLWNvZGUgYnVmZmVycywg aWUKdGhvc2UgdGhhdCBkbyBub3QgaGF2ZSB0aGUgdmFyaWFibGUgYGNvbW1lbnQtc3RhcnQnIHNl dC4gIEEgdmFsdWUgb2YKYGZvcmNlJyBlbmFibGVzIHJlaW5kZW50IHdoZXRoZXIgb3Igbm90IGBj b21tZW50LXN0YXJ0JyBpcyBzZXQuIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCBuaWwpIChjb25z dCB0KSAoY29uc3QgdGV4dCkgKGNvbnN0IGZvcmNlKSkKICA6Z3JvdXAgJ2FsbG91dCkKCihtYWtl LXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJlaW5kZW50LWJvZGllcykKOzs7IyMjYXV0 b2xvYWQKKHB1dCAnYWxsb3V0LXJlaW5kZW50LWJvZGllcyAnc2FmZS1sb2NhbC12YXJpYWJsZQog ICAgICcobGFtYmRhICh4KSAobWVtcSB4ICcobmlsIHQgdGV4dCBmb3JjZSkpKSkKCjs7O18gID0g YWxsb3V0LWVuYWJsZS1maWxlLXZhcmlhYmxlLWFkanVzdG1lbnQKKGRlZmN1c3RvbSBhbGxvdXQt ZW5hYmxlLWZpbGUtdmFyaWFibGUtYWRqdXN0bWVudCB0CiAgIipJZiBub24tbmlsLCBzb21lIGFs bG91dCBvdXRsaW5lIGFjdGlvbnMgZWRpdCBFbWFjcyBsb2NhbCBmaWxlIHZhciB0ZXh0LgoKVGhp cyBjYW4gcmFuZ2UgZnJvbSBjaGFuZ2VzIHRvIGV4aXN0aW5nIGVudHJpZXMsIGFkZGl0aW9uIG9m IG5ldyBvbmVzLAphbmQgY3JlYXRpb24gb2YgYSBuZXcgbG9jYWwgdmFyaWFibGVzIHNlY3Rpb24g d2hlbiBuZWNlc3NhcnkuCgpFbWFjcyBmaWxlIHZhcmlhYmxlcyBhZGp1c3RtZW50cyBhcmUgYWxz byBpbmhpYml0ZWQgaWYgYGVuYWJsZS1sb2NhbC12YXJpYWJsZXMnCmlzIG5pbC4KCk9wZXJhdGlv bnMgcG90ZW50aWFsbHkgY2F1c2luZyBlZGl0cyBpbmNsdWRlIGFsbG91dCBlbmNyeXB0aW9uIHJv dXRpbmVzLgpGb3IgZGV0YWlscywgc2VlIGBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1l bmNyeXB0aW9uJ3MgZG9jc3RyaW5nLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnYWxsb3V0 KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1lbmFibGUtZmlsZS12YXJpYWJs ZS1hZGp1c3RtZW50KQoKOzs7XyogQ09ERSAtIG5vIHVzZXIgY3VzdG9taXphdGlvbnMgYmVsb3cu Cgo7OztfICMxIEludGVybmFsIE91dGxpbmUgRm9ybWF0dGluZyBhbmQgQ29uZmlndXJhdGlvbgo7 OztfICA6IFZlcnNpb24KOzs7XyAgID0gYWxsb3V0LXZlcnNpb24KKGRlZnZhciBhbGxvdXQtdmVy c2lvbiAiMi4yLjEgKCRSZXZpc2lvbjogMS4yMzQgJCkiCiAgIlZlcnNpb24gb2YgY3VycmVudGx5 IGxvYWRlZCBvdXRsaW5lIHBhY2thZ2UuICBcKGFsbG91dC5lbCkiKQo7OztfICAgPiBhbGxvdXQt dmVyc2lvbgooZGVmdW4gYWxsb3V0LXZlcnNpb24gKCZvcHRpb25hbCBoZXJlKQogICJSZXR1cm4g c3RyaW5nIGRlc2NyaWJpbmcgdGhlIGxvYWRlZCBvdXRsaW5lIHZlcnNpb24uIgogIChpbnRlcmFj dGl2ZSAiUCIpCiAgKGxldCAoKG1zZyAoY29uY2F0ICJBbGxvdXQgT3V0bGluZSBNb2RlIHYgIiBh bGxvdXQtdmVyc2lvbikpKQogICAgKGlmIGhlcmUgKGluc2VydCBtc2cpKQogICAgKG1lc3NhZ2Ug IiVzIiBtc2cpCiAgICBtc2cpKQo7OztfICA6IE1vZGUgYWN0aXZhdGlvbiAoZGVmaW5lZCBoZXJl IGJlY2F1c2UgaXQncyByZWZlcmVuY2VkIGVhcmx5KQo7OztfICAgPSBhbGxvdXQtbW9kZQooZGVm dmFyIGFsbG91dC1tb2RlIG5pbCAiQWxsb3V0IG91dGxpbmUgbW9kZSBtaW5vci1tb2RlIGZsYWcu IikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtbW9kZSkKOzs7XyAgID0gYWxs b3V0LWxheW91dCBuaWwKKGRlZnZhciBhbGxvdXQtbGF5b3V0IG5pbCAgICAgICAgICAgIDsgTEVB VkUgR0xPQkFMIFZBTFVFIE5JTCAtIHNlZSBkb2NzdHJpbmcuCiAgIkJ1ZmZlci1zcGVjaWZpYyBz ZXR0aW5nIGZvciBhbGxvdXQgbGF5b3V0LgoKSW4gYnVmZmVycyB3aGVyZSB0aGlzIGlzIG5vbi1u aWwgXChhbmQgaWYgYGFsbG91dC1pbml0JyBoYXMgYmVlbiBydW4sIHRvCmVuYWJsZSB0aGlzIGJl aGF2aW9yKSwgYGFsbG91dC1tb2RlJyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkLiAg VGhlCmxheW91dCBkaWN0YXRlZCBieSB0aGUgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUg aW5pdGlhbCBleHBvc3VyZSB3aGVuCmBhbGxvdXQtbW9kZScgaXMgYWN0aXZhdGVkLgoKXCpZb3Ug c2hvdWxkIG5vdCBzZXRxLWRlZmF1bHQgdGhpcyB2YXJpYWJsZSBub24tbmlsIHVubGVzcyB5b3Ug d2FudCBldmVyeQp2aXNpdGVkIGZpbGUgdG8gYmUgdHJlYXRlZCBhcyBhbiBhbGxvdXQgZmlsZS4q CgpUaGUgdmFsdWUgd291bGQgdHlwaWNhbGx5IGJlIHNldCBieSBhIGZpbGUgbG9jYWwgdmFyaWFi bGUuICBGb3IKZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsaW5lcyBhdCB0aGUgYm90dG9tIG9mIGFu IEVtYWNzIExpc3AgZmlsZToKCjs7O0xvY2FsIHZhcmlhYmxlczoKOzs7YWxsb3V0LWxheW91dDog XCgwIDogLTEgLTEgMCkKOzs7RW5kOgoKZGljdGF0ZSBhY3RpdmF0aW9uIG9mIGBhbGxvdXQtbW9k ZScgbW9kZSB3aGVuIHRoZSBmaWxlIGlzIHZpc2l0ZWQKXChwcmVzdW1pbmcgYWxsb3V0LWluaXQg d2FzIGFscmVhZHkgcnVuKSwgZm9sbG93ZWQgYnkgdGhlCmVxdWl2YWxlbnQgb2YgYFwoYWxsb3V0 LWV4cG9zZS10b3BpYyAwIDogLTEgLTEgMCknLiAgXChUaGlzIGlzCnRoZSBsYXlvdXQgdXNlZCBm b3IgdGhlIGFsbG91dC5lbCBzb3VyY2UgZmlsZS4pCgpgYWxsb3V0LWRlZmF1bHQtbGF5b3V0JyBk ZXNjcmliZXMgdGhlIHNwZWNpZmljYXRpb24gZm9ybWF0LgpgYWxsb3V0LWxheW91dCcgY2FuIGFk ZGl0aW9uYWxseSBoYXZlIHRoZSB2YWx1ZSBgdCcsIGluIHdoaWNoCmNhc2UgdGhlIHZhbHVlIG9m IGBhbGxvdXQtZGVmYXVsdC1sYXlvdXQnIGlzIHVzZWQuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVy LWxvY2FsICdhbGxvdXQtbGF5b3V0KQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtbGF5b3V0 ICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgJyhsYW1iZGEgKHgpIChvciAobnVtYmVycCB4KSAo bGlzdHAgeCkgKG1lbXEgeCAnKDogKiArIC0pKSkpKQoKOzs7XyAgOiBUb3BpYyBoZWFkZXIgZm9y bWF0Cjs7O18gICA9IGFsbG91dC1yZWdleHAKKGRlZnZhciBhbGxvdXQtcmVnZXhwICIiCiAgIipS ZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGJlZ2lubmluZyBvZiBhIGhlYWRpbmcgbGlu ZS4KCkFueSBsaW5lIHdob3NlIGJlZ2lubmluZyBtYXRjaGVzIHRoaXMgcmVnZXhwIGlzIGNvbnNp ZGVyZWQgYQpoZWFkaW5nLiAgVGhpcyB2YXIgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgdXNlciBj b25maWd1cmF0aW9uIHZhcnMKYnkgYHNldC1hbGxvdXQtcmVnZXhwJy4iKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2FsbG91dC1yZWdleHApCjs7O18gICA9IGFsbG91dC1idWxsZXRzLXN0 cmluZwooZGVmdmFyIGFsbG91dC1idWxsZXRzLXN0cmluZyAiIgogICJBIHN0cmluZyBkaWN0YXRp bmcgdGhlIHZhbGlkIHNldCBvZiBvdXRsaW5lIHRvcGljIGJ1bGxldHMuCgpUaGlzIHZhciBzaG91 bGQgKm5vdCogYmUgc2V0IGJ5IHRoZSB1c2VyIC0gaXQgaXMgc2V0IGJ5IGBzZXQtYWxsb3V0LXJl Z2V4cCcsCmFuZCBpcyBwcm9kdWNlZCBmcm9tIHRoZSBlbGVtZW50cyBvZiBgYWxsb3V0LXBsYWlu LWJ1bGxldHMtc3RyaW5nJwphbmQgYGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycu IikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtYnVsbGV0cy1zdHJpbmcpCjs7 O18gICA9IGFsbG91dC1idWxsZXRzLXN0cmluZy1sZW4KKGRlZnZhciBhbGxvdXQtYnVsbGV0cy1z dHJpbmctbGVuIDAKICAiTGVuZ3RoIG9mIGN1cnJlbnQgYnVmZmVycycgYGFsbG91dC1wbGFpbi1i dWxsZXRzLXN0cmluZycuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtYnVs bGV0cy1zdHJpbmctbGVuKQo7OztfICAgPSBhbGxvdXQtZGVwdGgtc3BlY2lmaWMtcmVnZXhwCihk ZWZ2YXIgYWxsb3V0LWRlcHRoLXNwZWNpZmljLXJlZ2V4cCAiIgogICIqUmVndWxhciBleHByZXNz aW9uIHRvIG1hdGNoIGEgaGVhZGluZyBsaW5lIHByZWZpeCBmb3IgYSBwYXJ0aWN1bGFyIGRlcHRo LgoKVGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gc2VhcmNoIGZvciBkZXB0aC1zcGVjaWZpYyB0 b3BpYwpoZWFkZXJzIGF0IGRlcHRoIDIgYW5kIGdyZWF0ZXIuICBVc2UgYGFsbG91dC1kZXB0aC1v bmUtcmVnZXhwJwpmb3IgdG8gc2VlayB0b3BpY3MgYXQgZGVwdGggb25lLgoKVGhpcyB2YXIgaXMg c2V0IGFjY29yZGluZyB0byB0aGUgdXNlciBjb25maWd1cmF0aW9uIHZhcnMgYnkKYHNldC1hbGxv dXQtcmVnZXhwJy4gIEl0IGlzIHByZXBhcmVkIHdpdGggZm9ybWF0IHN0cmluZ3MgZm9yIHR3bwpk ZWNpbWFsIG51bWJlcnMsIHdoaWNoIHNob3VsZCBlYWNoIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGRl cHRoIG9mIHRoZQp0b3BpYyBwcmVmaXggdG8gYmUgbWF0Y2hlZC4iKQoobWFrZS12YXJpYWJsZS1i dWZmZXItbG9jYWwgJ2FsbG91dC1kZXB0aC1zcGVjaWZpYy1yZWdleHApCjs7O18gICA9IGFsbG91 dC1kZXB0aC1vbmUtcmVnZXhwCihkZWZ2YXIgYWxsb3V0LWRlcHRoLW9uZS1yZWdleHAgIiIKICAi KlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhIGhlYWRpbmcgbGluZSBwcmVmaXggZm9yIGRl cHRoIG9uZS4KClRoaXMgdmFyIGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIgY29uZmlndXJh dGlvbiB2YXJzIGJ5CmBzZXQtYWxsb3V0LXJlZ2V4cCcuICBJdCBpcyBwcmVwYXJlZCB3aXRoIGZv cm1hdCBzdHJpbmdzIGZvciB0d28KZGVjaW1hbCBudW1iZXJzLCB3aGljaCBzaG91bGQgZWFjaCBi ZSBvbmUgbGVzcyB0aGFuIHRoZSBkZXB0aCBvZiB0aGUKdG9waWMgcHJlZml4IHRvIGJlIG1hdGNo ZWQuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtZGVwdGgtb25lLXJlZ2V4 cCkKOzs7XyAgID0gYWxsb3V0LWxpbmUtYm91bmRhcnktcmVnZXhwCihkZWZ2YXIgYWxsb3V0LWxp bmUtYm91bmRhcnktcmVnZXhwICgpCiAgImBhbGxvdXQtcmVnZXhwJyB3aXRoIG91dGxpbmUgc3R5 bGUgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yLgoKVGhpcyBpcyBwcm9wZXJseSBzZXQgYnkgYHNl dC1hbGxvdXQtcmVnZXhwJy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1s aW5lLWJvdW5kYXJ5LXJlZ2V4cCkKOzs7XyAgID0gYWxsb3V0LWJvYi1yZWdleHAKKGRlZnZhciBh bGxvdXQtYm9iLXJlZ2V4cCAoKQogICJMaWtlIGBhbGxvdXQtbGluZS1ib3VuZGFyeS1yZWdleHAn LCBmb3IgaGVhZGVycyBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyLiIpCihtYWtlLXZhcmlhYmxlLWJ1 ZmZlci1sb2NhbCAnYWxsb3V0LWJvYi1yZWdleHApCjs7O18gICA9IGFsbG91dC1oZWFkZXItc3Vi dHJhY3Rpb24KKGRlZnZhciBhbGxvdXQtaGVhZGVyLXN1YnRyYWN0aW9uICgxLSAobGVuZ3RoIGFs bG91dC1oZWFkZXItcHJlZml4KSkKICAiQWxsb3V0LWhlYWRlciBwcmVmaXggbGVuZ3RoIHRvIHN1 YnRyYWN0IHdoZW4gY29tcHV0aW5nIHRvcGljIGRlcHRoLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbikKOzs7XyAgID0gYWxsb3V0LXBsYWlu LWJ1bGxldHMtc3RyaW5nLWxlbgooZGVmdmFyIGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZy1s ZW4gKGxlbmd0aCBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcpCiAgIkxlbmd0aCBvZiBgYWxs b3V0LXBsYWluLWJ1bGxldHMtc3RyaW5nJywgdXBkYXRlZCBieSBgc2V0LWFsbG91dC1yZWdleHAn LiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXBsYWluLWJ1bGxldHMtc3Ry aW5nLWxlbikKCjs7O18gICA9IGFsbG91dC1kb3VibGVjaGVjay1hdC1hbmQtc2hhbGxvd2VyCihk ZWZjb25zdCBhbGxvdXQtZG91YmxlY2hlY2stYXQtYW5kLXNoYWxsb3dlciAyCiAgIlZhbGlkYXRl IGFwcGFyZW50IHRvcGljcyBvZiB0aGlzIGRlcHRoIGFuZCBzaGFsbG93ZXIgYXMgYmVpbmcgbm9u LWFiZXJyYW50LgoKVmVyaWZpZWQgd2l0aCBgYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wJy4g IFRoaXMgY2hlY2sncyB1c2VmdWxuZXNzIGlzCmxpbWl0ZWQgdG8gc2hhbGxvdyBkZXB0aHMsIGJl Y2F1c2UgdGhlIGRldGVybWluYXRpb24gb2YgYWJlcnJhbmNlCmlzIGFjY29yZGluZyB0byB0aGUg bWlzdGFrZW4gaXRlbSBiZWluZyBmb2xsb3dlZCBieSBhIGxlZ2l0aW1hdGUgaXRlbSBvZgpleGNl c3NpdmVseSBncmVhdGVyIGRlcHRoLiIpCjs7O18gICBYIGFsbG91dC1yZXNldC1oZWFkZXItbGVh ZCAoaGVhZGVyLWxlYWQpCihkZWZ1biBhbGxvdXQtcmVzZXQtaGVhZGVyLWxlYWQgKGhlYWRlci1s ZWFkKQogICIqUmVzZXQgdGhlIGxlYWRpbmcgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdG9waWMg aGVhZGVycy4iCiAgKGludGVyYWN0aXZlICJzTmV3IGxlYWQgc3RyaW5nOiAiKQogIChzZXRxIGFs bG91dC1oZWFkZXItcHJlZml4IGhlYWRlci1sZWFkKQogIChzZXRxIGFsbG91dC1oZWFkZXItc3Vi dHJhY3Rpb24gKDEtIChsZW5ndGggYWxsb3V0LWhlYWRlci1wcmVmaXgpKSkKICAoc2V0LWFsbG91 dC1yZWdleHApKQo7OztfICAgWCBhbGxvdXQtbGVhZC13aXRoLWNvbW1lbnQtc3RyaW5nIChoZWFk ZXItbGVhZCkKKGRlZnVuIGFsbG91dC1sZWFkLXdpdGgtY29tbWVudC1zdHJpbmcgKCZvcHRpb25h bCBoZWFkZXItbGVhZCkKICAiKlNldCB0aGUgdG9waWMtaGVhZGVyIGxlYWRpbmcgc3RyaW5nIHRv IHNwZWNpZmllZCBzdHJpbmcuCgpVc2VmdWwgd2hlbiBmb3IgZW5jYXBzdWxhdGluZyBvdXRsaW5l IHN0cnVjdHVyZSBpbiBwcm9ncmFtbWluZwpsYW5ndWFnZSBjb21tZW50cy4gIFJldHVybnMgdGhl IGxlYWRpbmcgc3RyaW5nLiIKCiAgKGludGVyYWN0aXZlICJQIikKICAoaWYgKG5vdCAoc3RyaW5n cCBoZWFkZXItbGVhZCkpCiAgICAgIChzZXRxIGhlYWRlci1sZWFkIChyZWFkLXN0cmluZwogICAg ICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBwcmVmaXggZm9yIHRvcGljIGhlYWRlcnM6ICIp KSkKICAoc2V0cSBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzIG5pbCkKICAoYWxsb3V0LXJlc2V0LWhl YWRlci1sZWFkIGhlYWRlci1sZWFkKQogIGhlYWRlci1sZWFkKQo7OztfICAgPiBhbGxvdXQtaW5m ZXItaGVhZGVyLWxlYWQtYW5kLXByaW1hcnktYnVsbGV0ICgpCihkZWZ1biBhbGxvdXQtaW5mZXIt aGVhZGVyLWxlYWQtYW5kLXByaW1hcnktYnVsbGV0ICgpCiAgIkRldGVybWluZSBhcHByb3ByaWF0 ZSBgYWxsb3V0LWhlYWRlci1wcmVmaXgnIGFuZCBgYWxsb3V0LXByaW1hcnktYnVsbGV0Jy4KCldv cmtzIGFjY29yZGluZyB0byBzZXR0aW5ncyBvZjoKCiAgICAgICBgY29tbWVudC1zdGFydCcKICAg ICAgIGBhbGxvdXQtaGVhZGVyLXByZWZpeCcgKGRlZmF1bHQpCiAgICAgICBgYWxsb3V0LXVzZS1t b2RlLXNwZWNpZmljLWxlYWRlcicKYW5kICAgIGBhbGxvdXQtbW9kZS1sZWFkZXJzJy4KCkFwcGx5 IHRoaXMgdmlhIFwocmUpYWN0aXZhdGlvbiBvZiBgYWxsb3V0LW1vZGUnLCByYXRoZXIgdGhhbgpp bnZva2luZyBpdCBkaXJlY3RseS4iCiAgKGxldCogKCh1c2UtbGVhZGVyIChhbmQgKGJvdW5kcCAn YWxsb3V0LXVzZS1tb2RlLXNwZWNpZmljLWxlYWRlcikKCQkJICAoaWYgKG9yIChzdHJpbmdwIGFs bG91dC11c2UtbW9kZS1zcGVjaWZpYy1sZWFkZXIpCgkJCQkgIChtZW1xIGFsbG91dC11c2UtbW9k ZS1zcGVjaWZpYy1sZWFkZXIKCQkJCQknKGFsbG91dC1tb2RlLWxlYWRlcnMKCQkJCQkgIGNvbW1l bnQtc3RhcnQKCQkJCQkgIHQpKSkKCQkJICAgICAgYWxsb3V0LXVzZS1tb2RlLXNwZWNpZmljLWxl YWRlcgoJCQkgICAgOzsgT29wcyAtIGdhcmJsZWQgdmFsdWUsIGVxdWF0ZSB3aXRoIGVmZmVjdCBv ZiAndDoKCQkJICAgIHQpKSkKCSAobGVhZGVyCgkgIChjb25kCgkgICAoKG5vdCB1c2UtbGVhZGVy KSBuaWwpCgkgICA7OyBVc2UgdGhlIGV4cGxpY2l0bHkgZGVzaWduYXRlZCBsZWFkZXI6CgkgICAo KHN0cmluZ3AgdXNlLWxlYWRlcikgdXNlLWxlYWRlcikKCSAgICh0IChvciAoYW5kIChtZW1xIHVz ZS1sZWFkZXIgJyh0IGFsbG91dC1tb2RlLWxlYWRlcnMpKQoJCSAgICAgICA7OyBHZXQgaXQgZnJv bSBvdXRsaW5lIG1vZGUgbGVhZGVycz8KCQkgICAgICAgKGNkciAoYXNzcSBtYWpvci1tb2RlIGFs bG91dC1tb2RlLWxlYWRlcnMpKSkKCQkgIDs7IC4uLiBkaWRuJ3QgZ2V0IGZyb20gYWxsb3V0LW1v ZGUtbGVhZGVycy4uLgoJCSAgKGFuZCAobWVtcSB1c2UtbGVhZGVyICcodCBjb21tZW50LXN0YXJ0 KSkKCQkgICAgICAgY29tbWVudC1zdGFydAoJCSAgICAgICA7OyBVc2UgY29tbWVudC1zdGFydCwg bWF5YmUgdHJpcGxlZCwgYW5kIHdpdGgKCQkgICAgICAgOzsgdW5kZXJzY29yZToKCQkgICAgICAg KGNvbmNhdAoJCQkoaWYgKHN0cmluZz0gIiAiCgkJCQkgICAgIChzdWJzdHJpbmcgY29tbWVudC1z dGFydAoJCQkJCQkoMS0gKGxlbmd0aCBjb21tZW50LXN0YXJ0KSkpKQoJCQkgICAgOzsgVXNlIGNv bW1lbnQtc3RhcnQsIHNhbnMgdHJhaWxpbmcgc3BhY2U6CgkJCSAgICAoc3Vic3RyaW5nIGNvbW1l bnQtc3RhcnQgMCAtMSkKCQkJICAoY29uY2F0IGNvbW1lbnQtc3RhcnQgY29tbWVudC1zdGFydCBj b21tZW50LXN0YXJ0KSkKCQkJOzsgLi4uIGFuZCBhcHBlbmQgdW5kZXJzY29yZSwgd2hpY2hldmVy OgoJCQkiXyIpKSkpKSkpCiAgICAoaWYgKG5vdCBsZWFkZXIpCgluaWwKICAgICAgKHNldHEgYWxs b3V0LWhlYWRlci1wcmVmaXggbGVhZGVyKQogICAgICAoaWYgKG5vdCBhbGxvdXQtb2xkLXN0eWxl LXByZWZpeGVzKQogICAgICAgICAgOzsgc2V0dGluZyBhbGxvdXQtcHJpbWFyeS1idWxsZXQgbWFr ZXMgdGhlIHRvcCBsZXZlbCB0b3BpY3MgdXNlIC0KICAgICAgICAgIDs7IGFjdHVhbGx5LCBiZSAt IHRoZSBzcGVjaWFsIHByZWZpeDoKICAgICAgICAgIChzZXRxIGFsbG91dC1wcmltYXJ5LWJ1bGxl dCBsZWFkZXIpKQogICAgICBhbGxvdXQtaGVhZGVyLXByZWZpeCkpKQooZGVmYWxpYXMgJ2FsbG91 dC1pbmZlci1oZWFkZXItbGVhZAogICdhbGxvdXQtaW5mZXItaGVhZGVyLWxlYWQtYW5kLXByaW1h cnktYnVsbGV0KQo7OztfICAgPiBhbGxvdXQtaW5mZXItYm9keS1yZWluZGVudCAoKQooZGVmdW4g YWxsb3V0LWluZmVyLWJvZHktcmVpbmRlbnQgKCkKICAiRGV0ZXJtaW5lIHByb3BlciBzZXR0aW5n IGZvciBgYWxsb3V0LXJlaW5kZW50LWJvZGllcycuCgpEZXBlbmRzIG9uIGRlZmF1bHQgc2V0dGlu ZyBvZiBgYWxsb3V0LXJlaW5kZW50LWJvZGllcycgXCh3aGljaCBzZWUpCmFuZCBwcmVzZW5jZSBv ZiBzZXR0aW5nIGZvciBgY29tbWVudC1zdGFydCcsIHRvIHRlbGwgd2hldGhlciB0aGUKZmlsZSBp cyBwcm9ncmFtbWluZyBjb2RlLiIKICAoaWYgKGFuZCBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzCgkg ICBjb21tZW50LXN0YXJ0CgkgICAobm90IChlcSAnZm9yY2UgYWxsb3V0LXJlaW5kZW50LWJvZGll cykpKQogICAgICAoc2V0cSBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzIG5pbCkpKQo7OztfICAgPiBz ZXQtYWxsb3V0LXJlZ2V4cCAoKQooZGVmdW4gc2V0LWFsbG91dC1yZWdleHAgKCkKICAiR2VuZXJh dGUgcHJvcGVyIHRvcGljLWhlYWRlciByZWdleHAgZm9ybSBmb3Igb3V0bGluZSBmdW5jdGlvbnMu CgpXb3JrcyB3aXRoIHJlc3BlY3QgdG8gYGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZycgYW5k CmBhbGxvdXQtZGlzdGluY3RpdmUtYnVsbGV0cy1zdHJpbmcnLgoKQWxzbyByZWZyZXNoIHZhcmlv dXMgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGluZ2Ugb24gdGhlIHJlZ2V4cC4iCgogIChpbnRlcmFj dGl2ZSkKICA7OyBEZXJpdmUgYWxsb3V0LWJ1bGxldHMtc3RyaW5nIGZyb20gdXNlciBjb25maWd1 cmVkIGNvbXBvbmVudHM6CiAgKHNldHEgYWxsb3V0LWJ1bGxldHMtc3RyaW5nICIiKQogIChsZXQg KChzdHJpbmdzIChsaXN0ICdhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcKICAgICAgICAgICAg ICAgICAgICAgICAnYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nCiAgICAgICAgICAg ICAgICAgICAgICAgJ2FsbG91dC1wcmltYXJ5LWJ1bGxldCkpCiAgICAgICAgY3VyLXN0cmluZwog ICAgICAgIGN1ci1sZW4KICAgICAgICBjdXItY2hhcgogICAgICAgIGluZGV4KQogICAgKHdoaWxl IHN0cmluZ3MKICAgICAgKHNldHEgaW5kZXggMCkKICAgICAgKHNldHEgY3VyLWxlbiAobGVuZ3Ro IChzZXRxIGN1ci1zdHJpbmcgKHN5bWJvbC12YWx1ZSAoY2FyIHN0cmluZ3MpKSkpKQogICAgICAo d2hpbGUgKDwgaW5kZXggY3VyLWxlbikKICAgICAgICAoc2V0cSBjdXItY2hhciAoYXJlZiBjdXIt c3RyaW5nIGluZGV4KSkKICAgICAgICAoc2V0cSBhbGxvdXQtYnVsbGV0cy1zdHJpbmcKICAgICAg ICAgICAgICAoY29uY2F0IGFsbG91dC1idWxsZXRzLXN0cmluZwogICAgICAgICAgICAgICAgICAg ICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU2luZ2xl IGRhc2ggd291bGQgZGVub3RlIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgc2VxdWVuY2UsIHJlcGVhdGVkIGRlbm90ZXMKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgYSBkYXNoOgogICAgICAgICAgICAgICAgICAgICAgICgoZXEgY3Vy LWNoYXIgPy0pICItLSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IGxpdGVyYWwgY2xvc2Utc3F1YXJlLWJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgZG9lc24ndCB3b3JrIHJpZ2h0IGluIHRoZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOyBleHByLCBleGNsdWRlIGl0OgogICAgICAgICAgICAg ICAgICAgICAgICgoZXEgY3VyLWNoYXIgP1xdKSAiIikKICAgICAgICAgICAgICAgICAgICAgICAo dCAocmVnZXhwLXF1b3RlICAoY2hhci10by1zdHJpbmcgY3VyLWNoYXIpKSkpKSkKICAgICAgICAo c2V0cSBpbmRleCAoMSsgaW5kZXgpKSkKICAgICAgKHNldHEgc3RyaW5ncyAoY2RyIHN0cmluZ3Mp KSkKICAgICkKICA7OyBEZXJpdmUgbmV4dCBmb3IgcmVwZWF0ZWQgdXNlIGluIGFsbG91dC1wZW5k aW5nLWJ1bGxldDoKICAoc2V0cSBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmctbGVuIChsZW5n dGggYWxsb3V0LXBsYWluLWJ1bGxldHMtc3RyaW5nKSkKICAoc2V0cSBhbGxvdXQtaGVhZGVyLXN1 YnRyYWN0aW9uICgxLSAobGVuZ3RoIGFsbG91dC1oZWFkZXItcHJlZml4KSkpCgogIChsZXQgKG5l dy1wYXJ0IG9sZC1wYXJ0KQogICAgKHNldHEgbmV3LXBhcnQgKGNvbmNhdCAiXFwoIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlIGFsbG91dC1oZWFkZXItcHJlZml4KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAiWyBcdF0qIgogICAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBhbHJlYWR5IHJlZ2V4cC1xdW90ZWQgaW4gYSBjdXN0b20gd2F5OgogICAgICAgICAg ICAgICAgICAgICAgICAgICAiWyIgYWxsb3V0LWJ1bGxldHMtc3RyaW5nICJdIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAiXFwpIikKICAgICAgICAgIG9sZC1wYXJ0IChjb25jYXQgIlxcKCIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBhbGxvdXQtcHJpbWFyeS1i dWxsZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXHwiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIChyZWdleHAtcXVvdGUgYWxsb3V0LWhlYWRlci1wcmVmaXgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICJcXCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAiID9bXiIgYWxsb3V0LXByaW1hcnktYnVsbGV0ICJdIikK ICAgICAgICAgIGFsbG91dC1yZWdleHAgKGNvbmNhdCBuZXctcGFydAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJcXHwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xk LXBhcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx8XF5sIikKCiAgICAgICAg ICBhbGxvdXQtbGluZS1ib3VuZGFyeS1yZWdleHAgKGNvbmNhdCAiXG4iIG5ldy1wYXJ0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx8IgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiBvbGQtcGFydCkKCiAgICAg ICAgICBhbGxvdXQtYm9iLXJlZ2V4cCAoY29uY2F0ICJcXGAiIG5ldy1wYXJ0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJcXHwiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJcXGAiIG9sZC1wYXJ0KSkKCiAgICAoc2V0cSBhbGxvdXQtZGVwdGgtc3BlY2lm aWMtcmVnZXhwCiAgICAgICAgICAoY29uY2F0ICJcXCheXFx8XFxgXFwpIgogICAgICAgICAgICAg ICAgICAiXFwoIgoKICAgICAgICAgICAgICAgICAgOzsgbmV3LXN0eWxlIHNwYWNlcnMtdGhlbi1i dWxsZXQgc3RyaW5nOgogICAgICAgICAgICAgICAgICAiXFwoIgogICAgICAgICAgICAgICAgICAo YWxsb3V0LWZvcm1hdC1xdW90ZSAocmVnZXhwLXF1b3RlIGFsbG91dC1oZWFkZXItcHJlZml4KSkK ICAgICAgICAgICAgICAgICAgIiBcXHslc1xcfSIKICAgICAgICAgICAgICAgICAgIlsiIChhbGxv dXQtZm9ybWF0LXF1b3RlIGFsbG91dC1idWxsZXRzLXN0cmluZykgIl0iCiAgICAgICAgICAgICAg ICAgICJcXCkiCgogICAgICAgICAgICAgICAgICA7OyBvbGQtc3R5bGUgYWxsLWJ1bGxldHMgc3Ry aW5nLCBpZiBwcmltYXJ5IG5vdCBtdWx0aS1jaGFyOgogICAgICAgICAgICAgICAgICAoaWYgKDwg MCBhbGxvdXQtaGVhZGVyLXN1YnRyYWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgIiIKICAg ICAgICAgICAgICAgICAgICAoY29uY2F0ICJcXHxcXCgiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYWxsb3V0LWZvcm1hdC1xdW90ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy ZWdleHAtcXVvdGUgYWxsb3V0LXByaW1hcnktYnVsbGV0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhbGxvdXQtZm9ybWF0LXF1b3RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHJlZ2V4cC1xdW90ZSBhbGxvdXQtcHJpbWFyeS1idWxsZXQpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGFsbG91dC1mb3JtYXQtcXVvdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAocmVnZXhwLXF1b3RlIGFsbG91dC1wcmltYXJ5LWJ1bGxldCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXFx7JXNcXH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBkaXNx dWFsaWZ5IGdyZWF0ZXIgZGVwdGhzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlteIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1mb3JtYXQtcXVvdGUgYWxsb3V0LXBy aW1hcnktYnVsbGV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIl1cXCkiCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICApKQogICAgICAgICAgICAgICAgICAiXFwpIgogICAgICAgICAg ICAgICAgICApKQogICAgKHNldHEgYWxsb3V0LWRlcHRoLW9uZS1yZWdleHAKICAgICAgICAgIChj b25jYXQgIlxcKF5cXHxcXGBcXCkiCiAgICAgICAgICAgICAgICAgICJcXCgiCgogICAgICAgICAg ICAgICAgICAiXFwoIgogICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlIGFsbG91dC1oZWFk ZXItcHJlZml4KQogICAgICAgICAgICAgICAgICA7OyBkaXNxdWFsaWZ5IGFueSBidWxsZXQgY2hh ciBmb2xsb3dpbmcgYW55IGFtb3VudCBvZgogICAgICAgICAgICAgICAgICA7OyBpbnRlcnZlbmlu ZyB3aGl0ZXNwYWNlOgogICAgICAgICAgICAgICAgICAiICoiCiAgICAgICAgICAgICAgICAgIChj b25jYXQgIlteICIgYWxsb3V0LWJ1bGxldHMtc3RyaW5nICJdIikKICAgICAgICAgICAgICAgICAg IlxcKSIKICAgICAgICAgICAgICAgICAgKGlmICg8IDAgYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlv bikKICAgICAgICAgICAgICAgICAgICAgIDs7IE5lZWQgbm90IHN1cHBvcnQgYW55dGhpbmcgbGlr ZSB0aGUgb2xkCiAgICAgICAgICAgICAgICAgICAgICA7OyBidWxsZXQgc3R5bGUgaWYgdGhlIHBy ZWZpeCBpcyBtdWx0aS1jaGFyLgogICAgICAgICAgICAgICAgICAgICAgIiIKICAgICAgICAgICAg ICAgICAgICAoY29uY2F0ICJcXHwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnZXhw LXF1b3RlIGFsbG91dC1wcmltYXJ5LWJ1bGxldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg IDs7IGRpc3F1YWxpZnkgZGVlcGVyIHByaW1hcnktYnVsbGV0IHNlcXVlbmNlczoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJbXiIgYWxsb3V0LXByaW1hcnktYnVsbGV0ICJdIikpCiAgICAg ICAgICAgICAgICAgICJcXCkiCiAgICAgICAgICAgICAgICAgICkpKSkKOzs7XyAgOiBLZXkgYmlu ZGluZ3MKOzs7XyAgID0gYWxsb3V0LW1vZGUtbWFwCihkZWZ2YXIgYWxsb3V0LW1vZGUtbWFwIG5p bCAiS2V5YmluZGluZ3MgZm9yIChhbGxvdXQpIG91dGxpbmUgbWlub3IgbW9kZS4iKQo7OztfICAg PiBwcm9kdWNlLWFsbG91dC1tb2RlLW1hcCAoa2V5bWFwLWFsaXN0ICZvcHRpb25hbCBiYXNlLW1h cCkKKGRlZnVuIHByb2R1Y2UtYWxsb3V0LW1vZGUtbWFwIChrZXltYXAtbGlzdCAmb3B0aW9uYWwg YmFzZS1tYXApCiAgIlByb2R1Y2Uga2V5bWFwIGZvciB1c2UgYXMgYWxsb3V0LW1vZGUtbWFwLCBm cm9tIEtFWU1BUC1MSVNULgoKQnVpbHQgb24gdG9wIG9mIG9wdGlvbmFsIEJBU0UtTUFQLCBvciBl bXB0eSBzcGFyc2UgbWFwIGlmIG5vbmUgc3BlY2lmaWVkLgpTZWUgZG9jIHN0cmluZyBmb3IgYWxs b3V0LWtleWJpbmRpbmdzLWxpc3QgZm9yIGZvcm1hdCBvZiBiaW5kaW5nIGxpc3QuIgogIChsZXQg KChtYXAgKG9yIGJhc2UtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKCShwcmVmIChsaXN0IGFs bG91dC1jb21tYW5kLXByZWZpeCkpKQogICAgKG1hcGNhciAoZnVuY3Rpb24KCSAgICAgKGxhbWJk YSAoY2VsbCkKCSAgICAgICAobGV0ICgoYWRkLXByZWYgKG51bGwgKGNkciAoY2RyIGNlbGwpKSkp CgkJICAgICAoa2V5LXN1ZmYgKGxpc3QgKGNhciBjZWxsKSkpKQoJCSAoYXBwbHkgJ2RlZmluZS1r ZXkKCQkJKGxpc3QgbWFwCgkJCSAgICAgIChhcHBseSAnY29uY2F0IChpZiBhZGQtcHJlZgoJCQkJ CQkgKGFwcGVuZCBwcmVmIGtleS1zdWZmKQoJCQkJCSAgICAgICBrZXktc3VmZikpCgkJCSAgICAg IChjYXIgKGNkciBjZWxsKSkpKSkpKQoJICAgIGtleW1hcC1saXN0KQogICAgbWFwKSkKOzs7XyAg OiBNZW51IGJhcgooZGVmdmFyIGFsbG91dC1tb2RlLWV4cG9zdXJlLW1lbnUpCihkZWZ2YXIgYWxs b3V0LW1vZGUtZWRpdGluZy1tZW51KQooZGVmdmFyIGFsbG91dC1tb2RlLW5hdmlnYXRpb24tbWVu dSkKKGRlZnZhciBhbGxvdXQtbW9kZS1taXNjLW1lbnUpCihkZWZ1biBwcm9kdWNlLWFsbG91dC1t b2RlLW1lbnViYXItZW50cmllcyAoKQogIChyZXF1aXJlICdlYXN5bWVudSkKICAoZWFzeS1tZW51 LWRlZmluZSBhbGxvdXQtbW9kZS1leHBvc3VyZS1tZW51CgkJICAgIGFsbG91dC1tb2RlLW1hcAoJ CSAgICAiQWxsb3V0IG91dGxpbmUgZXhwb3N1cmUgbWVudS4iCgkJICAgICcoIkV4cG9zdXJlIgoJ CSAgICAgIFsiU2hvdyBFbnRyeSIgYWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSB0XQoJCSAgICAg IFsiU2hvdyBDaGlsZHJlbiIgYWxsb3V0LXNob3ctY2hpbGRyZW4gdF0KCQkgICAgICBbIlNob3cg U3VidHJlZSIgYWxsb3V0LXNob3ctY3VycmVudC1zdWJ0cmVlIHRdCgkJICAgICAgWyJIaWRlIFN1 YnRyZWUiIGFsbG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSB0XQoJCSAgICAgIFsiSGlkZSBMZWF2 ZXMiIGFsbG91dC1oaWRlLWN1cnJlbnQtbGVhdmVzIHRdCgkJICAgICAgIi0tLS0iCgkJICAgICAg WyJTaG93IEFsbCIgYWxsb3V0LXNob3ctYWxsIHRdKSkKICAoZWFzeS1tZW51LWRlZmluZSBhbGxv dXQtbW9kZS1lZGl0aW5nLW1lbnUKCQkgICAgYWxsb3V0LW1vZGUtbWFwCgkJICAgICJBbGxvdXQg b3V0bGluZSBlZGl0aW5nIG1lbnUuIgoJCSAgICAnKCJIZWFkaW5ncyIKCQkgICAgICBbIk9wZW4g U2libGluZyIgYWxsb3V0LW9wZW4tc2lidG9waWMgdF0KCQkgICAgICBbIk9wZW4gU3VidG9waWMi IGFsbG91dC1vcGVuLXN1YnRvcGljIHRdCgkJICAgICAgWyJPcGVuIFN1cGVydG9waWMiIGFsbG91 dC1vcGVuLXN1cGVydG9waWMgdF0KCQkgICAgICAiLS0tLSIKCQkgICAgICBbIlNoaWZ0IFRvcGlj IEluIiBhbGxvdXQtc2hpZnQtaW4gdF0KCQkgICAgICBbIlNoaWZ0IFRvcGljIE91dCIgYWxsb3V0 LXNoaWZ0LW91dCB0XQoJCSAgICAgIFsiUmVidWxsZXQgVG9waWMiIGFsbG91dC1yZWJ1bGxldC10 b3BpYyB0XQoJCSAgICAgIFsiUmVidWxsZXQgSGVhZGluZyIgYWxsb3V0LXJlYnVsbGV0LWN1cnJl bnQtaGVhZGluZyB0XQoJCSAgICAgIFsiTnVtYmVyIFNpYmxpbmdzIiBhbGxvdXQtbnVtYmVyLXNp YmxpbmdzIHRdCgkJICAgICAgIi0tLS0iCiAgICAgICAgICAgICAgICAgICAgICBbIlRvZ2dsZSBU b3BpYyBFbmNyeXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC10b2dnbGUtY3Vy cmVudC1zdWJ0cmVlLWVuY3J5cHRpb24KICAgICAgICAgICAgICAgICAgICAgICAoPiAoYWxsb3V0 LWN1cnJlbnQtZGVwdGgpIDEpXSkpCiAgKGVhc3ktbWVudS1kZWZpbmUgYWxsb3V0LW1vZGUtbmF2 aWdhdGlvbi1tZW51CgkJICAgIGFsbG91dC1tb2RlLW1hcAoJCSAgICAiQWxsb3V0IG91dGxpbmUg bmF2aWdhdGlvbiBtZW51LiIKCQkgICAgJygiTmF2aWdhdGlvbiIKCQkgICAgICBbIk5leHQgVmlz aWJsZSBIZWFkaW5nIiBhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgdF0KCQkgICAgICBbIlBy ZXZpb3VzIFZpc2libGUgSGVhZGluZyIKCQkgICAgICAgYWxsb3V0LXByZXZpb3VzLXZpc2libGUt aGVhZGluZyB0XQoJCSAgICAgICItLS0tIgoJCSAgICAgIFsiVXAgTGV2ZWwiIGFsbG91dC11cC1j dXJyZW50LWxldmVsIHRdCgkJICAgICAgWyJGb3J3YXJkIEN1cnJlbnQgTGV2ZWwiIGFsbG91dC1m b3J3YXJkLWN1cnJlbnQtbGV2ZWwgdF0KCQkgICAgICBbIkJhY2t3YXJkIEN1cnJlbnQgTGV2ZWwi CgkJICAgICAgIGFsbG91dC1iYWNrd2FyZC1jdXJyZW50LWxldmVsIHRdCgkJICAgICAgIi0tLS0i CgkJICAgICAgWyJCZWdpbm5pbmcgb2YgRW50cnkiCgkJICAgICAgIGFsbG91dC1iZWdpbm5pbmct b2YtY3VycmVudC1lbnRyeSB0XQoJCSAgICAgIFsiRW5kIG9mIEVudHJ5IiBhbGxvdXQtZW5kLW9m LWVudHJ5IHRdCgkJICAgICAgWyJFbmQgb2YgU3VidHJlZSIgYWxsb3V0LWVuZC1vZi1jdXJyZW50 LXN1YnRyZWUgdF0pKQogIChlYXN5LW1lbnUtZGVmaW5lIGFsbG91dC1tb2RlLW1pc2MtbWVudQoJ CSAgICBhbGxvdXQtbW9kZS1tYXAKCQkgICAgIkFsbG91dCBvdXRsaW5lcyBtaXNjZWxsYW5lb3Vz IGJpbmRpbmdzLiIKCQkgICAgJygiTWlzYyIKCQkgICAgICBbIlZlcnNpb24iIGFsbG91dC12ZXJz aW9uIHRdCgkJICAgICAgIi0tLS0iCgkJICAgICAgWyJEdXBsaWNhdGUgRXhwb3NlZCIgYWxsb3V0 LWNvcHktZXhwb3NlZC10by1idWZmZXIgdF0KCQkgICAgICBbIkR1cGxpY2F0ZSBFeHBvc2VkLCBu dW1iZXJlZCIKCQkgICAgICAgYWxsb3V0LWZsYXR0ZW4tZXhwb3NlZC10by1idWZmZXIgdF0KCQkg ICAgICBbIkR1cGxpY2F0ZSBFeHBvc2VkLCBpbmRlbnRlZCIKCQkgICAgICAgYWxsb3V0LWluZGVu dGVkLWV4cG9zZWQtdG8tYnVmZmVyIHRdCgkJICAgICAgIi0tLS0iCgkJICAgICAgWyJTZXQgSGVh ZGVyIExlYWQiIGFsbG91dC1yZXNldC1oZWFkZXItbGVhZCB0XQoJCSAgICAgIFsiU2V0IE5ldyBF eHBvc3VyZSIgYWxsb3V0LWV4cG9zZS10b3BpYyB0XSkpKQo7OztfICA6IEFsbG91dCBNb2RhbC1W YXJpYWJsZXMgVXRpbGl0aWVzCjs7O18gICA9IGFsbG91dC1tb2RlLXByaW9yLXNldHRpbmdzCihk ZWZ2YXIgYWxsb3V0LW1vZGUtcHJpb3Itc2V0dGluZ3MgbmlsCiAgIkludGVybmFsIGBhbGxvdXQt bW9kZScgdXNlOyBzZXR0aW5ncyB0byBiZSByZXN1bWVkIG9uIG1vZGUgZGVhY3RpdmF0aW9uLgoK U2VlIGBhbGxvdXQtYWRkLXJlc3VtcHRpb25zJyBhbmQgYGFsbG91dC1kby1yZXN1bXB0aW9ucycu IikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtbW9kZS1wcmlvci1zZXR0aW5n cykKOzs7XyAgID4gYWxsb3V0LWFkZC1yZXN1bXB0aW9ucyAoJnJlc3QgcGFpcnMpCihkZWZ1biBh bGxvdXQtYWRkLXJlc3VtcHRpb25zICgmcmVzdCBwYWlycykKICAiU2V0IG5hbWUvdmFsdWUgUEFJ UlMuCgpPbGQgc2V0dGluZ3MgYXJlIHByZXNlcnZlZCBmb3IgbGF0ZXIgcmVzdW1wdGlvbiB1c2lu ZyBgYWxsb3V0LWRvLXJlc3VtcHRpb25zJy4KClRoZSBuZXcgdmFsdWVzIGFyZSBzZXQgYXMgYSBi dWZmZXIgbG9jYWwuICBPbiByZXN1bXB0aW9uLCB0aGUgcHJpb3IgYnVmZmVyCnNjb3BlIG9mIHRo ZSB2YXJpYWJsZSBpcyByZXN0b3JlZCBhbG9uZyB3aXRoIGl0cyB2YWx1ZS4gIElmIGl0IHdhcyBh IHZvaWQKYnVmZmVyLWxvY2FsIHZhbHVlLCB0aGVuIGl0IGlzIGxlZnQgYXMgbmlsIG9uIHJlc3Vt cHRpb24uCgpUaGUgcGFpcnMgYXJlIGxpc3RzIHdob3NlIGNhciBpcyB0aGUgbmFtZSBvZiB0aGUg dmFyaWFibGUgYW5kIGNhciBvZiB0aGUKY2RyIGlzIHRoZSBuZXcgdmFsdWU6ICcoc29tZS12YXIg c29tZS12YWx1ZSknLiAgVGhlIHBhaXJzIGNhbiBhY3R1YWxseSBiZQp0cmlwbGVzLCB3aGVyZSB0 aGUgdGhpcmQgZWxlbWVudCBxdWFsaWZpZXMgdGhlIGRpc3Bvc2l0aW9uIG9mIHRoZSBzZXR0aW5n LAphcyBkZXNjcmliZWQgZnVydGhlciBiZWxvdy4KCklmIHRoZSBvcHRpb25hbCB0aGlyZCBlbGVt ZW50IGlzIHRoZSBzeW1ib2wgJ2V4dGVuZCwgdGhlbiB0aGUgbmV3IHZhbHVlCmNyZWF0ZWQgYnkg YGNvbnMnaW5nIHRoZSBzZWNvbmQgZWxlbWVudCBvZiB0aGUgcGFpciBvbnRvIHRoZSBmcm9udCBv ZiB0aGUKZXhpc3RpbmcgdmFsdWUuCgpJZiB0aGUgb3B0aW9uYWwgdGhpcmQgZWxlbWVudCBpcyB0 aGUgc3ltYm9sICdhcHBlbmQsIHRoZW4gdGhlIG5ldyB2YWx1ZSBpcwpleHRlbmRlZCBmcm9tIHRo ZSBleGlzdGluZyBvbmUgYnkgYGFwcGVuZCdpbmcgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHNlY29u ZAplbGVtZW50IG9mIHRoZSBwYWlyIG9udG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgdmFsdWUu CgpFeHRlbnNpb24sIGFuZCByZXN1bXB0aW9ucyBpbiBnZW5lcmFsLCBzaG91bGQgbm90IGJlIHVz ZWQgZm9yIGhvb2sKZnVuY3Rpb25zIC0gdXNlIHRoZSAnbG9jYWwgbW9kZSBvZiBgYWRkLWhvb2sn IGZvciB0aGF0LCBpbnN0ZWFkLgoKVGhlIHNldHRpbmdzIGFyZSBzdG9yZWQgb24gYGFsbG91dC1t b2RlLXByaW9yLXNldHRpbmdzJy4iCiAgKHdoaWxlIHBhaXJzCiAgICAobGV0KiAoKHBhaXIgKHBv cCBwYWlycykpCiAgICAgICAgICAgKG5hbWUgKGNhciBwYWlyKSkKICAgICAgICAgICAodmFsdWUg KGNhZHIgcGFpcikpCiAgICAgICAgICAgKHF1YWxpZmllciAoaWYgKD4gKGxlbmd0aCBwYWlyKSAy KQogICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkciBwYWlyKSkpCiAgICAgICAgICAgcHJp b3ItdmFsdWUpCiAgICAgIChpZiAobm90IChzeW1ib2xwIG5hbWUpKQogICAgICAgICAgKGVycm9y ICJQYWlyJ3MgbmFtZSwgJVMsIG11c3QgYmUgYSBzeW1ib2wsIG5vdCAlcyIKICAgICAgICAgICAg ICAgICBuYW1lICh0eXBlLW9mIG5hbWUpKSkKICAgICAgKHNldHEgcHJpb3ItdmFsdWUgKGNvbmRp dGlvbi1jYXNlIG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC12YWx1ZSBu YW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkLXZhcmlhYmxlIG5pbCkpKQogICAg ICAod2hlbiAobm90IChhc3NvYyBuYW1lIGFsbG91dC1tb2RlLXByaW9yLXNldHRpbmdzKSkKICAg ICAgICA7OyBOb3QgYWxyZWFkeSBhZGRlZCBhcyBhIHJlc3VtcHRpb24sIGNyZWF0ZSB0aGUgcHJp b3Igc2V0dGluZyBlbnRyeS4KICAgICAgICAoaWYgKGxvY2FsLXZhcmlhYmxlLXAgbmFtZSkKICAg ICAgICAgICAgOzsgaXMgYWxyZWFkeSBsb2NhbCB2YXJpYWJsZSAtIHByZXNlcnZlIHRoZSBwcmlv ciB2YWx1ZToKICAgICAgICAgICAgKHB1c2ggKGxpc3QgbmFtZSBwcmlvci12YWx1ZSkgYWxsb3V0 LW1vZGUtcHJpb3Itc2V0dGluZ3MpCiAgICAgICAgICA7OyB3YXNuJ3QgbG9jYWwgdmFyaWFibGUs IGluZGljYXRlIHNvIGZvciByZXN1bXB0aW9uIGJ5IGtpbGxpbmcKICAgICAgICAgIDs7IGxvY2Fs IHZhbHVlLCBhbmQgbWFrZSBpdCBsb2NhbDoKICAgICAgICAgIChwdXNoIChsaXN0IG5hbWUpIGFs bG91dC1tb2RlLXByaW9yLXNldHRpbmdzKQogICAgICAgICAgKG1ha2UtbG9jYWwtdmFyaWFibGUg bmFtZSkpKQogICAgICAoaWYgcXVhbGlmaWVyCiAgICAgICAgICAoY29uZCAoKGVxIHF1YWxpZmll ciAnZXh0ZW5kKQogICAgICAgICAgICAgICAgIChpZiAobm90IChsaXN0cCBwcmlvci12YWx1ZSkp CiAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiZXh0ZW5zaW9uIG9mIG5vbi1saXN0IHByaW9y IHZhbHVlIGF0dGVtcHRlZCIpCiAgICAgICAgICAgICAgICAgICAoc2V0IG5hbWUgKGNvbnMgdmFs dWUgcHJpb3ItdmFsdWUpKSkpCiAgICAgICAgICAgICAgICAoKGVxIHF1YWxpZmllciAnYXBwZW5k KQogICAgICAgICAgICAgICAgIChpZiAobm90IChsaXN0cCBwcmlvci12YWx1ZSkpCiAgICAgICAg ICAgICAgICAgICAgIChlcnJvciAiYXBwZW5kaW5nIG9mIG5vbi1saXN0IHByaW9yIHZhbHVlIGF0 dGVtcHRlZCIpCiAgICAgICAgICAgICAgICAgICAoc2V0IG5hbWUgKGFwcGVuZCBwcmlvci12YWx1 ZSAobGlzdCB2YWx1ZSkpKSkpCiAgICAgICAgICAgICAgICAodCAoZXJyb3IgInVucmVjb2duaXpl ZCBzZXR0aW5nIHF1YWxpZmllciBgJXMnIGVuY291bnRlcmVkIgogICAgICAgICAgICAgICAgICAg ICAgICAgIHF1YWxpZmllcikpKQogICAgICAgIChzZXQgbmFtZSB2YWx1ZSkpKSkpCjs7O18gICA+ IGFsbG91dC1kby1yZXN1bXB0aW9ucyAoKQooZGVmdW4gYWxsb3V0LWRvLXJlc3VtcHRpb25zICgp CiAgIlJlc3VtZSBhbGwgbmFtZS92YWx1ZSBzZXR0aW5ncyByZWdpc3RlcmVkIGJ5IGBhbGxvdXQt YWRkLXJlc3VtcHRpb25zJy4KClRoaXMgaXMgdXNlZCB3aGVuIGNvbmNsdWRpbmcgYWxsb3V0LW1v ZGUsIHRvIHJlc3VtZSBzZWxlY3RlZCB2YXJpYWJsZXMgdG8KdGhlaXIgc2V0dGluZ3MgYmVmb3Jl IGFsbG91dC1tb2RlIHdhcyBzdGFydGVkLiIKCiAgICAod2hpbGUgYWxsb3V0LW1vZGUtcHJpb3It c2V0dGluZ3MKICAgICAgKGxldCogKChwYWlyIChwb3AgYWxsb3V0LW1vZGUtcHJpb3Itc2V0dGlu Z3MpKQogICAgICAgICAgICAgKG5hbWUgKGNhciBwYWlyKSkKICAgICAgICAgICAgICh2YWx1ZS1j ZWxsIChjZHIgcGFpcikpKQogICAgICAgIChpZiAobm90IHZhbHVlLWNlbGwpCiAgICAgICAgICAg IDs7IFByaW9yIHZhbHVlIHdhcyBnbG9iYWw6CiAgICAgICAgICAgIChraWxsLWxvY2FsLXZhcmlh YmxlIG5hbWUpCiAgICAgICAgICA7OyBQcmlvciB2YWx1ZSB3YXMgZXhwbGljaXQ6CiAgICAgICAg ICAoc2V0IG5hbWUgKGNhciB2YWx1ZS1jZWxsKSkpKSkpCjs7O18gIDogTW9kZS1zcGVjaWZpYyBp bmNpZGVudGFscwo7OztfICAgPiBhbGxvdXQtdW5wcm90ZWN0ZWQgKGV4cHIpCihkZWZtYWNybyBh bGxvdXQtdW5wcm90ZWN0ZWQgKGV4cHIpCiAgIkVuYWJsZSBpbnRlcm5hbCBvdXRsaW5lIG9wZXJh dGlvbnMgdG8gYWx0ZXIgaW52aXNpYmxlIHRleHQuIgogIGAobGV0ICgoaW5oaWJpdC1yZWFkLW9u bHkgKGlmIChub3QgYnVmZmVyLXJlYWQtb25seSkgdCkpCiAgICAgICAgIChpbmhpYml0LWZpZWxk LXRleHQtbW90aW9uIHQpKQogICAgICxleHByKSkKOzs7XyAgID0gYWxsb3V0LW1vZGUtaG9vawoo ZGVmdmFyIGFsbG91dC1tb2RlLWhvb2sgbmlsCiAgIipIb29rIHRoYXQncyBydW4gd2hlbiBhbGxv dXQgbW9kZSBzdGFydHMuIikKOzs7XyAgID0gYWxsb3V0LW1vZGUtZGVhY3RpdmF0ZS1ob29rCihk ZWZ2YXIgYWxsb3V0LW1vZGUtZGVhY3RpdmF0ZS1ob29rIG5pbAogICIqSG9vayB0aGF0J3MgcnVu IHdoZW4gYWxsb3V0IG1vZGUgZW5kcy4iKQo7OztfICAgPSBhbGxvdXQtZXhwb3N1cmUtY2F0ZWdv cnkKKGRlZnZhciBhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkgbmlsCiAgIlN5bWJvbCBmb3IgdXNl IGFzIGFsbG91dCBpbnZpc2libGUtdGV4dCBvdmVybGF5IGNhdGVnb3J5LiIpCjs7O18gICB4IGFs bG91dC12aWV3LWNoYW5nZS1ob29rCihkZWZ2YXIgYWxsb3V0LXZpZXctY2hhbmdlLWhvb2sgbmls CiAgIipcKERlcHJlY2F0ZWRcKSBBIGhvb2sgcnVuIGFmdGVyIGFsbG91dCBvdXRsaW5lIGV4cG9z dXJlIGNoYW5nZXMuCgpTd2l0Y2ggdG8gdXNpbmcgYGFsbG91dC1leHBvc3VyZS1jaGFuZ2UtaG9v aycgaW5zdGVhZC4gIEJvdGggaG9va3MgYXJlCmN1cnJlbnRseSByZXNwZWN0ZWQsIGJ1dCB0aGUg b3RoZXIgY29udmV5cyB0aGUgZGV0YWlscyBvZiB0aGUgZXhwb3N1cmUKY2hhbmdlIHZpYSBleHBs aWNpdCBwYXJhbWV0ZXJzLCBhbmQgdGhpcyBvbmUgd2lsbCBldmVudHVhbGx5IGJlIGRpc2FibGVk IGluCmEgc3Vic2VxdWVudCBhbGxvdXQgdmVyc2lvbi4iKQo7OztfICAgPSBhbGxvdXQtZXhwb3N1 cmUtY2hhbmdlLWhvb2sKKGRlZnZhciBhbGxvdXQtZXhwb3N1cmUtY2hhbmdlLWhvb2sgbmlsCiAg IipIb29rIHRoYXQncyBydW4gYWZ0ZXIgYWxsb3V0IG91dGxpbmUgc3VidHJlZSBleHBvc3VyZSBj aGFuZ2VzLgoKSXQgaXMgcnVuIGF0IHRoZSBjb25jbHVzaW9uIG9mIGBhbGxvdXQtZmxhZy1yZWdp b24nLgoKRnVuY3Rpb25zIG9uIHRoZSBob29rIG11c3QgdGFrZSB0aHJlZSBhcmd1bWVudHM6Cgog LSBmcm9tIC0gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwb2ludCBhdCB0aGUgc3RhcnQgb2YgdGhl IGNoYW5nZS4KIC0gdG8gLSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvaW50IG9mIHRoZSBlbmQg b2YgdGhlIGNoYW5nZS4KIC0gZmxhZyAtIGNoYW5nZSBtb2RlOiBuaWwgZm9yIGV4cG9zdXJlLCBv dGhlcndpc2UgY29uY2VhbG1lbnQuCgpUaGlzIGhvb2sgbWlnaHQgYmUgaW52b2tlZCBtdWx0aXBs ZSB0aW1lcyBieSBhIHNpbmdsZSBjb21tYW5kLgoKVGhpcyBob29rIGlzIHJlcGxhY2luZyBgYWxs b3V0LXZpZXctY2hhbmdlLWhvb2snLCB3aGljaCBpcyBiZWluZyBkZXByZWNhdGVkCmFuZCBldmVu dHVhbGx5IHdpbGwgbm90IGJlIGludm9rZWQuIikKOzs7XyAgID0gYWxsb3V0LXN0cnVjdHVyZS1h ZGRlZC1ob29rCihkZWZ2YXIgYWxsb3V0LXN0cnVjdHVyZS1hZGRlZC1ob29rIG5pbAogICIqSG9v ayB0aGF0J3MgcnVuIGFmdGVyIGFkZGl0aW9uIG9mIGl0ZW1zIHRvIHRoZSBvdXRsaW5lLgoKRnVu Y3Rpb25zIG9uIHRoZSBob29rIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6CgogLSBuZXctc3Rh cnQgLSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvaW50IGF0IHRoZSBzdGFydCBvZiB0aGUgZmly c3QgbmV3IGl0ZW0uCiAtIG5ldy1lbmQgLSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvaW50IG9m IHRoZSBlbmQgb2YgdGhlIGxhc3QgbmV3IGl0ZW0uCgpTb21lIGVkaXRzIHRoYXQgaW50cm9kdWNl IG5ldyBpdGVtcyBtYXkgbWlzc2VkIGJ5IHRoaXMgaG9vayAtCnNwZWNpZmljYWxseSBlZGl0cyB0 aGF0IG5hdGl2ZSBhbGxvdXQgcm91dGluZXMgZG8gbm90IGNvbnRyb2wuCgpUaGlzIGhvb2sgbWln aHQgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lcyBieSBhIHNpbmdsZSBjb21tYW5kLiIpCjs7O18g ICA9IGFsbG91dC1zdHJ1Y3R1cmUtZGVsZXRlZC1ob29rCihkZWZ2YXIgYWxsb3V0LXN0cnVjdHVy ZS1kZWxldGVkLWhvb2sgbmlsCiAgIipIb29rIHRoYXQncyBydW4gYWZ0ZXIgZGlzY2lwbGluZWQg ZGVsZXRpb24gb2Ygc3VidHJlZXMgZnJvbSB0aGUgb3V0bGluZS4KCkZ1bmN0aW9ucyBvbiB0aGUg aG9vayBtdXN0IHRha2UgdHdvIGFyZ3VtZW50czoKCiAtIGRlcHRoIC0gaW50ZWdlciBpbmRpY2F0 aW5nIHRoZSBkZXB0aCBvZiB0aGUgc3VidHJlZSB0aGF0IHdhcyBkZWxldGVkLgogLSByZW1vdmVk LWZyb20gLSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHBvaW50IHdoZXJlIHRoZSBzdWJ0cmVlIHdh cyByZW1vdmVkLgoKU29tZSBlZGl0cyB0aGF0IHJlbW92ZSBvciBpbnZhbGlkYXRlIGl0ZW1zIG1h eSBtaXNzZWQgYnkgdGhpcyBob29rIC0Kc3BlY2lmaWNhbGx5IGVkaXRzIHRoYXQgbmF0aXZlIGFs bG91dCByb3V0aW5lcyBkbyBub3QgY29udHJvbC4KClRoaXMgaG9vayBtaWdodCBiZSBpbnZva2Vk IG11bHRpcGxlIHRpbWVzIGJ5IGEgc2luZ2xlIGNvbW1hbmQuIikKOzs7XyAgID0gYWxsb3V0LXN0 cnVjdHVyZS1zaGlmdGVkLWhvb2sKKGRlZnZhciBhbGxvdXQtc3RydWN0dXJlLXNoaWZ0ZWQtaG9v ayBuaWwKICAiKkhvb2sgdGhhdCdzIHJ1biBhZnRlciBzaGlmdGluZyBvZiBpdGVtcyBpbiB0aGUg b3V0bGluZS4KCkZ1bmN0aW9ucyBvbiB0aGUgaG9vayBzaG91bGQgdGFrZSB0d28gYXJndW1lbnRz OgoKIC0gZGVwdGgtY2hhbmdlIC0gaW50ZWdlciBpbmRpY2F0aW5nIGRlcHRoIGluY3JlYXNlLCBu ZWdhdGl2ZSBmb3IgZGVjcmVhc2UKIC0gc3RhcnQgLSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHN0 YXJ0IHBvaW50IG9mIHRoZSBzaGlmdGVkIHBhcmVudCBpdGVtLgoKU29tZSBlZGl0cyB0aGF0IHNo aWZ0IGl0ZW1zIGNhbiBiZSBtaXNzZWQgYnkgdGhpcyBob29rIC0gc3BlY2lmaWNhbGx5IGVkaXRz CnRoYXQgbmF0aXZlIGFsbG91dCByb3V0aW5lcyBkbyBub3QgY29udHJvbC4KClRoaXMgaG9vayBt aWdodCBiZSBpbnZva2VkIG11bHRpcGxlIHRpbWVzIGJ5IGEgc2luZ2xlIGNvbW1hbmQuIikKOzs7 XyAgID0gYWxsb3V0LW91dHNpZGUtbm9ybWFsLWF1dG8tZmlsbC1mdW5jdGlvbgooZGVmdmFyIGFs bG91dC1vdXRzaWRlLW5vcm1hbC1hdXRvLWZpbGwtZnVuY3Rpb24gbmlsCiAgIlZhbHVlIG9mIG5v cm1hbC1hdXRvLWZpbGwtZnVuY3Rpb24gb3V0c2lkZSBvZiBhbGxvdXQgbW9kZS4KClVzZWQgYnkg YWxsb3V0LWF1dG8tZmlsbCB0byBkbyB0aGUgbWFuZGF0ZWQgbm9ybWFsLWF1dG8tZmlsbC1mdW5j dGlvbgp3cmFwcGVkIHdpdGhpbiBhbGxvdXQncyBhdXRvbWF0aWMgZmlsbC1wcmVmaXggc2V0dGlu Zy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1vdXRzaWRlLW5vcm1hbC1h dXRvLWZpbGwtZnVuY3Rpb24pCjs7O18gICA9IGZpbGUtdmFyLWJ1ZyBoYWNrCihkZWZ2YXIgYWxs b3V0LXYxOC8xOS1maWxlLXZhci1oYWNrIG5pbAogICJIb3JyaWJsZSBoYWNrIHVzZWQgdG8gcHJl dmVudCBpbnZhbGlkIG11bHRpcGxlIHRyaWdnZXJpbmcgb2Ygb3V0bGluZQptb2RlIGZyb20gcHJv cC1saW5lIGZpbGUtdmFyIGFjdGl2YXRpb24uICBVc2VkIGJ5IGBhbGxvdXQtbW9kZScgZnVuY3Rp b24KdG8gdHJhY2sgcmVwZWF0cy4iKQo7OztfICAgPSBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmll ci1zdHJpbmcKKGRlZnZhciBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1zdHJpbmcgbmlsCiAg IlNldHRpbmcgdXNlZCB0byB0ZXN0IHNvbGljaXRlZCBlbmNyeXB0aW9uIHBhc3NwaHJhc2VzIGFn YWluc3QgdGhlIG9uZQphbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUuCgpJdCBjb25zaXN0 cyBvZiBhbiBlbmNyeXB0ZWQgcmFuZG9tIHN0cmluZyB1c2VmdWwgb25seSB0byB2ZXJpZnkgdGhh dCBhCnBhc3NwaHJhc2UgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBlZmZlY3RpdmUgZm9yIGRlY3J5 cHRpb24uICBUaGUgcGFzc3BocmFzZQppdHNlbGYgaXMgXCpub3QqIHJlY29yZGVkIGluIHRoZSBm aWxlIGFueXdoZXJlLCBhbmQgdGhlIGVuY3J5cHRlZCBjb250ZW50cwphcmUgcmFuZG9tIGJpbmFy eSBjaGFyYWN0ZXJzIHRvIGF2b2lkIGV4cG9zaW5nIGdyZWF0ZXIgc3VzY2VwdGliaWxpdHkgdG8K c2VhcmNoIGF0dGFja3MuCgpUaGUgdmVyaWZpZXIgc3RyaW5nIGlzIHJldGFpbmVkIGFzIGFuIEVt YWNzIGZpbGUgdmFyaWFibGUsIGFzIHdlbGwgYXMgaW4KdGhlIGVtYWNzIGJ1ZmZlciBzdGF0ZSwg aWYgZmlsZSB2YXJpYWJsZSBhZGp1c3RtZW50cyBhcmUgZW5hYmxlZC4gIFNlZQpgYWxsb3V0LWVu YWJsZS1maWxlLXZhcmlhYmxlLWFkanVzdG1lbnQnIGZvciBkZXRhaWxzIGFib3V0IHRoYXQuIikK KG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1z dHJpbmcpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0 cmluZyAnc2FmZS1sb2NhbC12YXJpYWJsZSAnc3RyaW5ncCkKOzs7XyAgID0gYWxsb3V0LXBhc3Nw aHJhc2UtaGludC1zdHJpbmcKKGRlZnZhciBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZyAi IgogICJWYXJpYWJsZSB1c2VkIHRvIHJldGFpbiByZW1pbmRlciBzdHJpbmcgZm9yIGZpbGUncyBl bmNyeXB0aW9uIHBhc3NwaHJhc2UuCgpTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGBhbGxvdXQtcGFz c3BocmFzZS1oaW50LWhhbmRsaW5nJyBmb3IgZGV0YWlscyBhYm91dCBob3cKdGhlIHJlbWluZGVy IGlzIGRlcGxveWVkLgoKVGhlIGhpbnQgaXMgcmV0YWluZWQgYXMgYW4gRW1hY3MgZmlsZSB2YXJp YWJsZSwgYXMgd2VsbCBhcyBpbiB0aGUgZW1hY3MgYnVmZmVyCnN0YXRlLCBpZiBmaWxlIHZhcmlh YmxlIGFkanVzdG1lbnRzIGFyZSBlbmFibGVkLiAgU2VlCmBhbGxvdXQtZW5hYmxlLWZpbGUtdmFy aWFibGUtYWRqdXN0bWVudCcgZm9yIGRldGFpbHMgYWJvdXQgdGhhdC4iKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nKQooc2V0cS1kZWZh dWx0IGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nICIiKQo7OzsjIyNhdXRvbG9hZAoocHV0 ICdhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZyAnc2FmZS1sb2NhbC12YXJpYWJsZSAnc3Ry aW5ncCkKOzs7XyAgID0gYWxsb3V0LWFmdGVyLXNhdmUtZGVjcnlwdAooZGVmdmFyIGFsbG91dC1h ZnRlci1zYXZlLWRlY3J5cHQgbmlsCiAgIkludGVybmFsIHZhcmlhYmxlLCBpcyBuaWwgb3IgaGFz IHRoZSB2YWx1ZSBvZiB0d28gcG9pbnRzOgoKIC0gdGhlIGxvY2F0aW9uIG9mIGEgdG9waWMgdG8g YmUgZGVjcnlwdGVkIGFmdGVyIHNhdmluZyBpcyBkb25lCiAtIHdoZXJlIHRvIHNpdHVhdGUgdGhl IGN1cnNvciBhZnRlciB0aGUgZGVjcnlwdGlvbiBpcyBwZXJmb3JtZWQKClRoaXMgaXMgdXNlZCB0 byBkZWNyeXB0IHRoZSB0b3BpYyB0aGF0IHdhcyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkLCBpZiBp dAp3YXMgZW5jcnlwdGVkIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiBhIGZpbGUgd3JpdGUgb3Ig YXV0b3NhdmUuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtYWZ0ZXItc2F2 ZS1kZWNyeXB0KQo7OztfICAgPSBhbGxvdXQtZW5jcnlwdGlvbi1wbGFpbnRleHQtc2FuaXRpemF0 aW9uLXJlZ2V4cHMKKGRlZnZhciBhbGxvdXQtZW5jcnlwdGlvbi1wbGFpbnRleHQtc2FuaXRpemF0 aW9uLXJlZ2V4cHMgbmlsCiAgIkxpc3Qgb2YgcmVnZXhwcyB3aG9zZSBtYXRjaGVzIGFyZSByZW1v dmVkIGZyb20gcGxhaW50ZXh0IGJlZm9yZSBlbmNyeXB0aW9uLgoKVGhpcyBpcyBmb3IgdGhlIHNh a2Ugb2YgcmVtb3ZpbmcgYXJ0aWZhY3RzLCBsaWtlIGVzY2FwZXMsIHRoYXQgYXJlIGFkZGVkIG9u CmFuZCBub3QgYWN0dWFsbHkgcGFydCBvZiB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0LiAgVGhlIHJl bW92YWwgaXMgZG9uZSBqdXN0CnByaW9yIHRvIGVuY3J5cHRpb24uCgpFbnRyaWVzIG11c3QgYmUg c3ltYm9scyB0aGF0IGFyZSBib3VuZCB0byB0aGUgZGVzaXJlZCB2YWx1ZXMuCgpFYWNoIHZhbHVl IGNhbiBiZSBhIHJlZ2V4cCBvciBhIGxpc3Qgd2l0aCBhIHJlZ2V4cCBmb2xsb3dlZCBieSBhCnN1 YnN0aXR1dGlvbiBzdHJpbmcuICBJZiBpdCdzIGp1c3QgYSByZWdleHAsIGFsbCBpdHMgbWF0Y2hl cyBhcmUgcmVtb3ZlZApiZWZvcmUgdGhlIHRleHQgaXMgZW5jcnlwdGVkLiAgSWYgaXQncyBhIHJl Z2V4cCBhbmQgYSBzdWJzdGl0dXRpb24sIHRoZQpzdWJzdGl0aW9uIGlzIHVzZWQgYWdhaW5zdCB0 aGUgcmVnZXhwIG1hdGNoZXMsIGEgbGEgYHJlcGxhY2UtbWF0Y2gnLiIpCihtYWtlLXZhcmlhYmxl LWJ1ZmZlci1sb2NhbCAnYWxsb3V0LWVuY3J5cHRpb24tdGV4dC1yZW1vdmFsLXJlZ2V4cHMpCjs7 O18gICA9IGFsbG91dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLXJlZ2V4cHMKKGRl ZnZhciBhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1yZWdleHBzIG5pbAog ICJWYXJpYWJsZSBmb3IgcmVnZXhwcyBtYXRjaGluZyBwbGFpbnRleHQgdG8gcmVtb3ZlIGJlZm9y ZSBlbmNyeXB0aW9uLgoKVGhpcyBpcyBmb3IgdGhlIHNha2Ugb2YgcmVkb2luZyBlbmNyeXB0aW9u IGluIGNhc2VzIHdoZXJlIHRoZSBjaXBoZXJ0ZXh0CmluY2lkZW50YWxseSBjb250YWlucyBzdHJp bmdzIHRoYXQgd291bGQgZGlzcnVwdCBtb2RlIG9wZXJhdGlvbiAtCmZvciBleGFtcGxlLCBhIGxp bmUgdGhhdCBoYXBwZW5zIHRvIGxvb2sgbGlrZSBhbiBhbGxvdXQtbW9kZSB0b3BpYyBwcmVmaXgu CgpFbnRyaWVzIG11c3QgYmUgc3ltYm9scyB0aGF0IGFyZSBib3VuZCB0byB0aGUgZGVzaXJlZCBy ZWdleHAgdmFsdWVzLgoKVGhlIGVuY3J5cHRpb24gd2lsbCBiZSByZXRyaWVkIHVwIHRvCmBhbGxv dXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1saW1pdCcgdGltZXMsIGFmdGVyIHdo aWNoIGFuIGVycm9yCmlzIHJhaXNlZC4iKQoKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdh bGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1yZWdleHBzKQo7OztfICAgPSBh bGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1jZWlsaW5nCihkZWZ2YXIgYWxs b3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tY2VpbGluZyA1CiAgIkxpbWl0IG9u IG51bWJlciBvZiB0aW1lcyBlbmNyeXB0aW9uIGNpcGhlcnRleHQgaXMgcmVqZWN0ZWQuCgpTZWUg YGFsbG91dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLXJlZ2V4cHMnIGZvciByZWpl Y3Rpb24gcmVhc29ucy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1lbmNy eXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLWNlaWxpbmcpCjs7O18gICA+IGFsbG91dC1tb2Rl LXAgKCkKOzsgTXVzdCBkZWZpbmUgdGhpcyBtYWNybyBhYm92ZSBhbnkgdXNlcywgb3IgYnl0ZSBj b21waWxhdGlvbiB3aWxsIGxhY2sKOzsgcHJvcGVyIGRlZiwgaWYgZmlsZSBpc24ndCBsb2FkZWQg LSBlZywgZHVyaW5nIGVtYWNzIGJ1aWxkIQooZGVmbWFjcm8gYWxsb3V0LW1vZGUtcCAoKQogICJS ZXR1cm4gdCBpZiBgYWxsb3V0LW1vZGUnIGlzIGFjdGl2ZSBpbiBjdXJyZW50IGJ1ZmZlci4iCiAg J2FsbG91dC1tb2RlKQo7OztfICAgPiBhbGxvdXQtd3JpdGUtZmlsZS1ob29rLWhhbmRsZXIgKCkK KGRlZnVuIGFsbG91dC13cml0ZS1maWxlLWhvb2staGFuZGxlciAoKQogICJJbXBsZW1lbnQgYGFs bG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzJyBwb2xpY3kgZm9yIGZpbGUgd3JpdGVz LiIKCiAgKGlmIChvciAobm90IChhbGxvdXQtbW9kZS1wKSkKICAgICAgICAgIChub3QgKGJvdW5k cCAnYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMpKQogICAgICAgICAgKG5vdCBh bGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcykpCiAgICAgIG5pbAogICAgKGxldCAo KGV4Y2VwdC1tYXJrIChhbmQgKGVxdWFsIGFsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNh dmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdC1jdXJyZW50KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1hcmtlcikpKSkKICAgICAgKGlmIChz YXZlLWV4Y3Vyc2lvbiAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICAgICAgICAgICAg ICAgICAgIChhbGxvdXQtbmV4dC10b3BpYy1wZW5kaW5nLWVuY3J5cHRpb24gZXhjZXB0LW1hcmsp KQogICAgICAgICAgKHByb2duCiAgICAgICAgICAgIChtZXNzYWdlICJhdXRvLWVuY3J5cHRpbmcg cGVuZGluZyB0b3BpY3MiKQogICAgICAgICAgICAoc2l0LWZvciAwKQogICAgICAgICAgICAoY29u ZGl0aW9uLWNhc2UgZmFpbHVyZQogICAgICAgICAgICAgICAgKHNldHEgYWxsb3V0LWFmdGVyLXNh dmUtZGVjcnlwdAogICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmNyeXB0LWRlY3J5cHRl ZCBleGNlcHQtbWFyaykpCiAgICAgICAgICAgICAgKGVycm9yIChwcm9nbgogICAgICAgICAgICAg ICAgICAgICAgIChtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvdXQtd3JpdGUt ZmlsZS1ob29rLWhhbmRsZXIgc3VwcHJlc3NpbmcgZXJyb3IgJXMiCiAgICAgICAgICAgICAgICAg ICAgICAgIGZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgKHNpdC1mb3IgMikpKSkpKQog ICAgICApKQogICAgbmlsKQo7OztfICAgPiBhbGxvdXQtYXV0by1zYXZlLWhvb2staGFuZGxlciAo KQooZGVmdW4gYWxsb3V0LWF1dG8tc2F2ZS1ob29rLWhhbmRsZXIgKCkKICAiSW1wbGVtZW50IGBh bGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcycgcG9saWN5IGZvciBhdXRvIHNhdmUu IgoKICAoaWYgKGFuZCAoYWxsb3V0LW1vZGUtcCkgYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQt b24tc2F2ZXMpCiAgICAgIDs7IEFsd2F5cyBpbXBsZW1lbnQgJ2V4Y2VwdC1jdXJyZW50IHBvbGlj eSB3aGVuIGVuYWJsZWQuCiAgICAgIChsZXQgKChhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1v bi1zYXZlcyAnZXhjZXB0LWN1cnJlbnQpKQogICAgICAgIChhbGxvdXQtd3JpdGUtZmlsZS1ob29r LWhhbmRsZXIpKSkpCjs7O18gICA+IGFsbG91dC1hZnRlci1zYXZlcy1oYW5kbGVyICgpCihkZWZ1 biBhbGxvdXQtYWZ0ZXItc2F2ZXMtaGFuZGxlciAoKQogICJEZWNyeXB0IHRvcGljIGVuY3J5cHRl ZCBmb3Igc2F2ZSwgaWYgaXQncyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkLgoKSWUsIGlmIGl0IHdh cyBwZW5kaW5nIGVuY3J5cHRpb24gYW5kIGNvbnRhaW5lZCB0aGUgcG9pbnQgaW4gaXRzIGJvZHkg YmVmb3JlCnRoZSBzYXZlLgoKV2UgdXNlIHZhbHVlcyBzdG9yZWQgaW4gYGFsbG91dC1hZnRlci1z YXZlLWRlY3J5cHQnIHRvIGxvY2F0ZSB0aGUgdG9waWMKYW5kIHRoZSBwbGFjZSBmb3IgdGhlIGN1 cnNvciBhZnRlciB0aGUgZGVjcnlwdGlvbiBpcyBkb25lLiIKICAoaWYgKG5vdCAoYW5kIChhbGxv dXQtbW9kZS1wKQogICAgICAgICAgICAgICAgKGJvdW5kcCAnYWxsb3V0LWFmdGVyLXNhdmUtZGVj cnlwdCkKICAgICAgICAgICAgICAgIGFsbG91dC1hZnRlci1zYXZlLWRlY3J5cHQpKQogICAgICB0 CiAgICAoZ290by1jaGFyIChjYXIgYWxsb3V0LWFmdGVyLXNhdmUtZGVjcnlwdCkpCiAgICAobGV0 ICgod2FzLW1vZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCkpKQogICAgICAoYWxsb3V0LXRvZ2ds ZS1zdWJ0cmVlLWVuY3J5cHRpb24pCiAgICAgIChpZiAobm90IHdhcy1tb2RpZmllZCkKICAgICAg ICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkpCiAgICAoZ290by1jaGFyIChjYWRyIGFs bG91dC1hZnRlci1zYXZlLWRlY3J5cHQpKQogICAgKHNldHEgYWxsb3V0LWFmdGVyLXNhdmUtZGVj cnlwdCBuaWwpKQogICkKOzs7XyAgID0gYWxsb3V0LWluaGliaXQtYWJlcnJhbmNlLWRvdWJsZWNo ZWNrIG5pbAo7OyBJbiBzb21lIGV4Y2VwdGlvbmFsIG1vbWVudHMsIGRpc3BhcmF0ZSB0b3BpYyBk ZXB0aHMgbmVlZCB0byBiZSBhbGxvd2VkCjs7IG1vbWVudGFyaWx5LCBlZyB3aGVuIG9uZSB0b3Bp YyBpcyBiZWluZyB5YW5rZWQgaW50byBhbm90aGVyIGFuZCB0aGV5J3JlCjs7IGFib3V0IHRvIGJl IHJlY29uY2lsZWQuICBsZXQtYmluZGluZyBhbGxvdXQtaW5oaWJpdC1hYmVycmFuY2UtZG91Ymxl Y2hlY2sKOzsgcHJldmVudHMgdGhlIGFiZXJyYW5jZSBkb3VibGVjaGVjayB0byBhbGxvdywgZWcs IHRoZSByZWNvbmNpbGlhdGlvbgo7OyBwcm9jZXNzaW5nIHRvIGhhcHBlbiBpbiB0aGUgcHJlc2Vu Y2Ugb2Ygc3VjaCBkaXNjcmVwYW5jaWVzLiAgSXQgc2hvdWxkCjs7IGFsbW9zdCBuZXZlciBiZSBu ZWVkZWQsIGhvd2V2ZXIuCihkZWZ2YXIgYWxsb3V0LWluaGliaXQtYWJlcnJhbmNlLWRvdWJsZWNo ZWNrIG5pbAogICJJbnRlcm5hbCBzdGF0ZSwgZm9yIG1vbWVudGFyaWx5IGluaGliaXRzIGFiZXJy YW5jZSBkb3VibGVjaGVjay4KClRoaXMgc2hvdWxkIG9ubHkgYmUgbW9tZW50YXJpbHkgbGV0LWJv dW5kIG5vbi1uaWwsIG5vdCBzZXQKbm9uLW5pbCBpbiBhIGxhc3Rpbmcgd2F5LiIpCgo7OztfICMy IE1vZGUgYWN0aXZhdGlvbgo7OztfICA9IGFsbG91dC1leHBsaWNpdGx5LWRlYWN0aXZhdGVkCihk ZWZ2YXIgYWxsb3V0LWV4cGxpY2l0bHktZGVhY3RpdmF0ZWQgbmlsCiAgIklmIHQsIGBhbGxvdXQt bW9kZSdzIGxhc3QgZGVhY3RpdmF0aW9uIHdhcyBkZWxpYmVyYXRlLgpTbyBgYWxsb3V0LXBvc3Qt Y29tbWFuZC1idXNpbmVzcycgc2hvdWxkIG5vdCByZWFjdGl2YXRlIGl0Li4uIikKKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtZXhwbGljaXRseS1kZWFjdGl2YXRlZCkKOzs7XyAg PiBhbGxvdXQtaW5pdCAoJm9wdGlvbmFsIG1vZGUpCihkZWZ1biBhbGxvdXQtaW5pdCAoJm9wdGlv bmFsIG1vZGUpCiAgIlByaW1lIGBhbGxvdXQtbW9kZScgdG8gZW5hYmxlL2Rpc2FibGUgYXV0by1h Y3RpdmF0aW9uLCB3cnQgYGFsbG91dC1sYXlvdXQnLgoKTU9ERSBpcyBvbmUgb2YgdGhlIGZvbGxv d2luZyBzeW1ib2xzOgoKIC0gbmlsIFwob3Igbm8gYXJndW1lbnQpIGRlYWN0aXZhdGUgYXV0by1h Y3RpdmF0aW9uL2xheW91dDsKIC0gYGFjdGl2YXRlJywgZW5hYmxlIGF1dG8tYWN0aXZhdGlvbiBv bmx5OwogLSBgYXNrJywgZW5hYmxlIGF1dG8tYWN0aXZhdGlvbiwgYW5kIGVuYWJsZSBhdXRvLWxh eW91dCBidXQgd2l0aAogICBjb25maXJtYXRpb24gZm9yIGxheW91dCBvcGVyYXRpb24gc29saWNp dGVkIGZyb20gdXNlciBlYWNoIHRpbWU7CiAtIGByZXBvcnQnLCBqdXN0IHJlcG9ydCBhbmQgcmV0 dXJuIHRoZSBjdXJyZW50IGF1dG8tYWN0aXZhdGlvbiBzdGF0ZTsKIC0gYW55dGhpbmcgZWxzZSBc KGVnLCB0KSBmb3IgYXV0by1hY3RpdmF0aW9uIGFuZCBhdXRvLWxheW91dCwgd2l0aG91dAogICBh bnkgY29uZmlybWF0aW9uIGNoZWNrLgoKVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0dXAgeW91ciBF bWFjcyBzZXNzaW9uIGZvciBhdXRvbWF0aWMgYWN0aXZhdGlvbgpvZiBhbGxvdXQgb3V0bGluZSBt b2RlLCBjb250aW5nZW50IHRvIHRoZSBidWZmZXItc3BlY2lmaWMgc2V0dGluZyBvZgp0aGUgYGFs bG91dC1sYXlvdXQnIHZhcmlhYmxlLiAgKFNlZSBgYWxsb3V0LWxheW91dCcgYW5kCmBhbGxvdXQt ZXhwb3NlLXRvcGljJyBkb2NzdHJpbmdzIGZvciBtb3JlIGRldGFpbHMgb24gYXV0byBsYXlvdXQp LgoKYGFsbG91dC1pbml0JyB3b3JrcyBieSBzZXR0aW5nIHVwIChvciByZW1vdmluZykgdGhlIGBh bGxvdXQtbW9kZScKZmluZC1maWxlLWhvb2ssIGFuZCBnaXZpbmcgYGFsbG91dC1hdXRvLWFjdGl2 YXRpb24nIGEgc3VpdGFibGUKc2V0dGluZy4KClRvIHByaW1lIHlvdXIgRW1hY3Mgc2Vzc2lvbiBm b3IgZnVsbCBhdXRvLW91dGxpbmUgb3BlcmF0aW9uLCBpbmNsdWRlCnRoZSBmb2xsb3dpbmcgdHdv IGxpbmVzIGluIHlvdXIgRW1hY3MgaW5pdCBmaWxlOgoKXChyZXF1aXJlICdhbGxvdXQpClwoYWxs b3V0LWluaXQgdCkiCgogIChpbnRlcmFjdGl2ZSkKICAoaWYgKGludGVyYWN0aXZlLXApCiAgICAg IChwcm9nbgoJKHNldHEgbW9kZQoJICAgICAgKGNvbXBsZXRpbmctcmVhZAoJICAgICAgIChjb25j YXQgIlNlbGVjdCBvdXRsaW5lIGF1dG8gc2V0dXAgbW9kZSAiCgkJICAgICAgICIoZW1wdHkgZm9y IHJlcG9ydCwgPyBmb3Igb3B0aW9ucykgIikKCSAgICAgICAnKCgibmlsIikoImZ1bGwiKSgiYWN0 aXZhdGUiKSgiZGVhY3RpdmF0ZSIpCgkJICgiYXNrIikgKCJyZXBvcnQiKSAoIiIpKQoJICAgICAg IG5pbAoJICAgICAgIHQpKQoJKGlmIChzdHJpbmc9IG1vZGUgIiIpCgkgICAgKHNldHEgbW9kZSAn cmVwb3J0KQoJICAoc2V0cSBtb2RlIChpbnRlcm4tc29mdCBtb2RlKSkpKSkKICAobGV0CiAgICAg IDs7IGNvbnZlbmllbmNlIGFsaWFzZXMsIGZvciBjb25zaXN0ZW50IHJlZiB0byByZXNwZWN0aXZl IHZhcnM6CiAgICAgICgoaG9vayAnYWxsb3V0LWZpbmQtZmlsZS1ob29rKQogICAgICAgKGZpbmQt ZmlsZS1ob29rLXZhci1uYW1lIChpZiAoYm91bmRwICdmaW5kLWZpbGUtaG9vaykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbmQtZmlsZS1ob29rCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZmluZC1maWxlLWhvb2tzKSkKICAgICAgIChjdXJyLW1vZGUg J2FsbG91dC1hdXRvLWFjdGl2YXRpb24pKQoKICAgIChjb25kICgobm90IG1vZGUpCgkgICAoc2V0 IGZpbmQtZmlsZS1ob29rLXZhci1uYW1lCiAgICAgICAgICAgICAgICAoZGVscSBob29rIChzeW1i b2wtdmFsdWUgZmluZC1maWxlLWhvb2stdmFyLW5hbWUpKSkKCSAgIChpZiAoaW50ZXJhY3RpdmUt cCkKCSAgICAgICAobWVzc2FnZSAiQWxsb3V0IG91dGxpbmUgbW9kZSBhdXRvLWFjdGl2YXRpb24g aW5oaWJpdGVkLiIpKSkKCSAgKChlcSBtb2RlICdyZXBvcnQpCgkgICAoaWYgKG5vdCAobWVtcSBo b29rIChzeW1ib2wtdmFsdWUgZmluZC1maWxlLWhvb2stdmFyLW5hbWUpKSkKCSAgICAgICAoYWxs b3V0LWluaXQgbmlsKQoJICAgICA7OyBKdXN0IHB1bnQgYW5kIHVzZSB0aGUgcmVwb3J0cyBmcm9t IGVhY2ggb2YgdGhlIG1vZGVzOgoJICAgICAoYWxsb3V0LWluaXQgKHN5bWJvbC12YWx1ZSBjdXJy LW1vZGUpKSkpCgkgICh0IChhZGQtaG9vayBmaW5kLWZpbGUtaG9vay12YXItbmFtZSBob29rKQoJ ICAgICAoc2V0IGN1cnItbW9kZQkJOyBgc2V0Jywgbm90IGBzZXRxJyEKCQkgIChjb25kICgoZXEg bW9kZSAnYWN0aXZhdGUpCgkJCSAobWVzc2FnZQoJCQkgICJPdXRsaW5lIG1vZGUgYXV0by1hY3Rp dmF0aW9uIGVuYWJsZWQuIikKCQkJICdhY3RpdmF0ZSkKCQkJKChlcSBtb2RlICdyZXBvcnQpCgkJ CSA7OyBSZXR1cm4gdGhlIGN1cnJlbnQgbW9kZSBzZXR0aW5nOgoJCQkgKGFsbG91dC1pbml0IG1v ZGUpKQoJCQkoKGVxIG1vZGUgJ2FzaykKCQkJIChtZXNzYWdlCgkJCSAgKGNvbmNhdCAiT3V0bGlu ZSBtb2RlIGF1dG8tYWN0aXZhdGlvbiBhbmQgIgoJCQkJICAiLWxheW91dCBcKHVwb24gY29uZmly bWF0aW9uKSBlbmFibGVkLiIpKQoJCQkgJ2FzaykKCQkJKChtZXNzYWdlCgkJCSAgIk91dGxpbmUg bW9kZSBhdXRvLWFjdGl2YXRpb24gYW5kIC1sYXlvdXQgZW5hYmxlZC4iKQoJCQkgJ2Z1bGwpKSkp KSkpCjs7O18gID4gYWxsb3V0LXNldHVwLW1lbnViYXIgKCkKKGRlZnVuIGFsbG91dC1zZXR1cC1t ZW51YmFyICgpCiAgIlBvcHVsYXRlIHRoZSBjdXJyZW50IGJ1ZmZlcidzIG1lbnViYXIgd2l0aCBg YWxsb3V0LW1vZGUnIHN0dWZmLiIKICAobGV0ICgobWVudXMgKGxpc3QgYWxsb3V0LW1vZGUtZXhw b3N1cmUtbWVudQoJCSAgICAgYWxsb3V0LW1vZGUtZWRpdGluZy1tZW51CgkJICAgICBhbGxvdXQt bW9kZS1uYXZpZ2F0aW9uLW1lbnUKCQkgICAgIGFsbG91dC1tb2RlLW1pc2MtbWVudSkpCgljdXIp CiAgICAod2hpbGUgbWVudXMKICAgICAgKHNldHEgY3VyIChjYXIgbWVudXMpCgkgICAgbWVudXMg KGNkciBtZW51cykpCiAgICAgIChlYXN5LW1lbnUtYWRkIGN1cikpKSkKOzs7XyAgPiBhbGxvdXQt b3ZlcmxheS1wcmVwYXJhdGlvbnMKKGRlZnVuIGFsbG91dC1vdmVybGF5LXByZXBhcmF0aW9ucyAo KQogICJTZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGFsbG91dCBpbnZpc2libGUtdGV4dCBvdmVy bGF5IGFuZCBvdGhlcnMuIgogIChzZXRwbGlzdCAnYWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5IG5p bCkKICAocHV0ICdhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkgJ2ludmlzaWJsZSAnYWxsb3V0KQog IChwdXQgJ2FsbG91dC1leHBvc3VyZS1jYXRlZ29yeSAnZXZhcG9yYXRlIHQpCiAgOzsgWFhYIFdl IHVzZSBpc2VhcmNoLW9wZW4taW52aXNpYmxlICphbmQqIGlzZWFyY2gtbW9kZS1lbmQtaG9vay4g IFRoZQogIDs7IGxhdHRlciB3b3VsZCBiZSBzdWZmaWNpZW50LCBidXQgaXQgc2VlbXMgdGhhdCBh IHNlcGFyYXRlIGJlaGF2aW9yIC0KICA7OyB0aGUgX3RyYW5zaWVudF8gb3BlbmluZyBvZiBpbnZp c2libGUgdGV4dCBkdXJpbmcgaXNlYXJjaCAtIGlzIGtleWVkIHRvCiAgOzsgcHJlc2VuY2Ugb2Yg dGhlIGlzZWFyY2gtb3Blbi1pbnZpc2libGUgcHJvcGVydHkgLSBldmVuIHRob3VnaCB0aGlzCiAg OzsgcHJvcGVydHkgY29udHJvbHMgdGhlIGlzZWFyY2ggX2Fycml2YWxfIGJlaGF2aW9yLiAgVGhp cyBpcyB0aGUgY2FzZSBhdAogIDs7IGxlYXN0IGluIGVtYWNzIDIxLCAyMi4wLCBhbmQgeGVtYWNz IDIxLjQuCiAgKHB1dCAnYWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5ICdpc2VhcmNoLW9wZW4taW52 aXNpYmxlCiAgICAgICAnYWxsb3V0LWlzZWFyY2gtZW5kLWhhbmRsZXIpCiAgKGlmIChmZWF0dXJl cCAneGVtYWNzKQogICAgICAocHV0ICdhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkgJ3N0YXJ0LW9w ZW4gdCkKICAgIChwdXQgJ2FsbG91dC1leHBvc3VyZS1jYXRlZ29yeSAnaW5zZXJ0LWluLWZyb250 LWhvb2tzCiAgICAgICAgICcoYWxsb3V0LW92ZXJsYXktaW5zZXJ0LWluLWZyb250LWhhbmRsZXIp KSkKICAocHV0ICdhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkgJ21vZGlmaWNhdGlvbi1ob29rcwog ICAgICAgJyhhbGxvdXQtb3ZlcmxheS1pbnRlcmlvci1tb2RpZmljYXRpb24taGFuZGxlcikpKQo7 OztfICA+IGFsbG91dC1tb2RlICgmb3B0aW9uYWwgdG9nZ2xlKQo7OztfICAgOiBEZWZ1bjoKOzs7 IyMjYXV0b2xvYWQKKGRlZnVuIGFsbG91dC1tb2RlICgmb3B0aW9uYWwgdG9nZ2xlKQo7OztfICAg IC4gRG9jIHN0cmluZzoKICAiVG9nZ2xlIG1pbm9yIG1vZGUgZm9yIGNvbnRyb2xsaW5nIGV4cG9z dXJlIGFuZCBlZGl0aW5nIG9mIHRleHQgb3V0bGluZXMuClxcPGFsbG91dC1tb2RlLW1hcD4KCk9w dGlvbmFsIGFyZyBmb3JjZXMgbW9kZSB0byByZS1pbml0aWFsaXplIGlmZiBhcmcgaXMgcG9zaXRp dmUgbnVtIG9yCnN5bWJvbC4gIEFsbG91dCBvdXRsaW5lIG1vZGUgYWx3YXlzIHJ1bnMgYXMgYSBt aW5vciBtb2RlLgoKQWxsb3V0IG91dGxpbmUgbW9kZSBwcm92aWRlcyBleHRlbnNpdmUgb3V0bGlu ZSBvcmllbnRlZCBmb3JtYXR0aW5nIGFuZAptYW5pcHVsYXRpb24uICBJdCBlbmFibGVzIHN0cnVj dHVyYWwgZWRpdGluZyBvZiBvdXRsaW5lcywgYXMgd2VsbCBhcwpuYXZpZ2F0aW9uIGFuZCBleHBv c3VyZS4gIEl0IGFsc28gaXMgc3BlY2lmaWNhbGx5IGFpbWVkIGF0CmFjY29tbW9kYXRpbmcgc3lu dGF4LXNlbnNpdGl2ZSB0ZXh0IGxpa2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiAgXChGb3IKYW4g ZXhhbXBsZSwgc2VlIHRoZSBhbGxvdXQgY29kZSBpdHNlbGYsIHdoaWNoIGlzIG9yZ2FuaXplZCBh cyBhbiBhbGxvdXQKb3V0bGluZS4pCgpJbiBhZGRpdGlvbiB0byBvdXRsaW5lIG5hdmlnYXRpb24g YW5kIGV4cG9zdXJlLCBhbGxvdXQgaW5jbHVkZXM6CgogLSB0b3BpYy1vcmllbnRlZCByZXBvc2l0 aW9uaW5nLCBwcm9tb3Rpb24vZGVtb3Rpb24sIGN1dCwgYW5kIHBhc3RlCiAtIGludGVncmFsIG91 dGxpbmUgZXhwb3N1cmUtbGF5b3V0CiAtIGluY3JlbWVudGFsIHNlYXJjaCB3aXRoIGR5bmFtaWMg ZXhwb3N1cmUgYW5kIHJlY29uY2VhbG1lbnQgb2YgaGlkZGVuIHRleHQKIC0gYXV0b21hdGljIHRv cGljLW51bWJlciBtYWludGVuYW5jZQogLSBlYXN5IHRvcGljIGVuY3J5cHRpb24gYW5kIGRlY3J5 cHRpb24KIC0gXCJIb3Qtc3BvdFwiIG9wZXJhdGlvbiwgZm9yIHNpbmdsZS1rZXlzdHJva2UgbWFu ZXV2ZXJpbmcgYW5kCiAgICBleHBvc3VyZSBjb250cm9sLiAgXChTZWUgdGhlIGFsbG91dC1tb2Rl IGRvY3N0cmluZy4pCgphbmQgbWFueSBvdGhlciBmZWF0dXJlcy4KCkJlbG93IGlzIGEgZGVzY3Jp cHRpb24gb2YgdGhlIGJpbmRpbmdzLCBhbmQgdGhlbiBleHBsYW5hdGlvbiBvZgpzcGVjaWFsIGBh bGxvdXQtbW9kZScgZmVhdHVyZXMgYW5kIHRlcm1pbm9sb2d5LiAgU2VlIGFsc28gdGhlIG91dGxp bmUKbWVudWJhciBhZGRpdGlvbnMgZm9yIHF1aWNrIHJlZmVyZW5jZSB0byBtYW55IG9mIHRoZSBm ZWF0dXJlcywgYW5kIHNlZQp0aGUgZG9jc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiBgYWxsb3V0LWlu aXQnIGZvciBpbnN0cnVjdGlvbnMgb24KcHJpbWluZyB5b3VyIGVtYWNzIHNlc3Npb24gZm9yIGF1 dG9tYXRpYyBhY3RpdmF0aW9uIG9mIGBhbGxvdXQtbW9kZScuCgoKVGhlIGJpbmRpbmdzIGFyZSBk aWN0YXRlZCBieSB0aGUgYGFsbG91dC1rZXliaW5kaW5ncy1saXN0JyBhbmQKYGFsbG91dC1jb21t YW5kLXByZWZpeCcgdmFyaWFibGVzLgoKCU5hdmlnYXRpb246CQkJCSAgIEV4cG9zdXJlIENvbnRy b2w6CgktLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0t LS0tLS0tLQpcXFthbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmddIGFsbG91dC1uZXh0LXZpc2li bGUtaGVhZGluZyAgICAgfCBcXFthbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWVdIGFsbG91dC1o aWRlLWN1cnJlbnQtc3VidHJlZQpcXFthbGxvdXQtcHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nXSBh bGxvdXQtcHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nIHwgXFxbYWxsb3V0LXNob3ctY2hpbGRyZW5d IGFsbG91dC1zaG93LWNoaWxkcmVuClxcW2FsbG91dC11cC1jdXJyZW50LWxldmVsXSBhbGxvdXQt dXAtY3VycmVudC1sZXZlbCAgICAgICAgIHwgXFxbYWxsb3V0LXNob3ctY3VycmVudC1zdWJ0cmVl XSBhbGxvdXQtc2hvdy1jdXJyZW50LXN1YnRyZWUKXFxbYWxsb3V0LWZvcndhcmQtY3VycmVudC1s ZXZlbF0gYWxsb3V0LWZvcndhcmQtY3VycmVudC1sZXZlbCAgICB8IFxcW2FsbG91dC1zaG93LWN1 cnJlbnQtZW50cnldIGFsbG91dC1zaG93LWN1cnJlbnQtZW50cnkKXFxbYWxsb3V0LWJhY2t3YXJk LWN1cnJlbnQtbGV2ZWxdIGFsbG91dC1iYWNrd2FyZC1jdXJyZW50LWxldmVsICAgfCBcXFthbGxv dXQtc2hvdy1hbGxdIGFsbG91dC1zaG93LWFsbApcXFthbGxvdXQtZW5kLW9mLWVudHJ5XSBhbGxv dXQtZW5kLW9mLWVudHJ5ClxcW2FsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1lbnRyeV0gYWxs b3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWVudHJ5LCBhbHRlcm5hdGVseSwgZ29lcyB0byBob3Qt c3BvdAoKCVRvcGljIEhlYWRlciBQcm9kdWN0aW9uOgoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K XFxbYWxsb3V0LW9wZW4tc2lidG9waWNdCWFsbG91dC1vcGVuLXNpYnRvcGljCUNyZWF0ZSBhIG5l dyBzaWJsaW5nIGFmdGVyIGN1cnJlbnQgdG9waWMuClxcW2FsbG91dC1vcGVuLXN1YnRvcGljXQlh bGxvdXQtb3Blbi1zdWJ0b3BpYwkuLi4gYW4gb2Zmc3ByaW5nIG9mIGN1cnJlbnQgdG9waWMuClxc W2FsbG91dC1vcGVuLXN1cGVydG9waWNdCWFsbG91dC1vcGVuLXN1cGVydG9waWMJLi4uIGEgc2li bGluZyBvZiB0aGUgY3VycmVudCB0b3BpYydzIHBhcmVudC4KCglUb3BpYyBMZXZlbCBhbmQgUHJl Zml4IEFkanVzdG1lbnQ6CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KXFxbYWxs b3V0LXNoaWZ0LWluXQlhbGxvdXQtc2hpZnQtaW4JU2hpZnQgY3VycmVudCB0b3BpYyBhbmQgYWxs IG9mZnNwcmluZyBkZWVwZXIuClxcW2FsbG91dC1zaGlmdC1vdXRdCWFsbG91dC1zaGlmdC1vdXQJ Li4uIGxlc3MgZGVlcC4KXFxbYWxsb3V0LXJlYnVsbGV0LWN1cnJlbnQtaGVhZGluZ10JYWxsb3V0 LXJlYnVsbGV0LWN1cnJlbnQtaGVhZGluZyBQcm9tcHQgZm9yIGFsdGVybmF0ZSBidWxsZXQgZm9y CgkJCQkJIGN1cnJlbnQgdG9waWMuClxcW2FsbG91dC1yZWJ1bGxldC10b3BpY10JYWxsb3V0LXJl YnVsbGV0LXRvcGljCVJlY29uY2lsZSBidWxsZXRzIG9mIHRvcGljIGFuZCBpdHMgb2Zmc3ByaW5n CgkJCQktIGRpc3RpbmN0aXZlIGJ1bGxldHMgYXJlIG5vdCBjaGFuZ2VkLCBvdGhlcnMKCQkJCSAg YWx0ZXJuYXRlZCBhY2NvcmRpbmcgdG8gbmVzdGluZyBkZXB0aC4KXFxbYWxsb3V0LW51bWJlci1z aWJsaW5nc10JYWxsb3V0LW51bWJlci1zaWJsaW5ncwlOdW1iZXIgYnVsbGV0cyBvZiB0b3BpYyBh bmQgc2libGluZ3MgLSB0aGUKCQkJCW9mZnNwcmluZyBhcmUgbm90IGFmZmVjdGVkLiAgV2l0aCBy ZXBlYXQKCQkJCWNvdW50LCByZXZva2UgbnVtYmVyaW5nLgoKCVRvcGljLW9yaWVudGVkIEtpbGxp bmcgYW5kIFlhbmtpbmc6CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClxcW2Fs bG91dC1raWxsLXRvcGljXQlhbGxvdXQta2lsbC10b3BpYwlLaWxsIGN1cnJlbnQgdG9waWMsIGlu Y2x1ZGluZyBvZmZzcHJpbmcuClxcW2FsbG91dC1jb3B5LXRvcGljLWFzLWtpbGxdCWFsbG91dC1j b3B5LXRvcGljLWFzLWtpbGwgQ29weSBjdXJyZW50IHRvcGljLCBpbmNsdWRpbmcgb2Zmc3ByaW5n LgpcXFthbGxvdXQta2lsbC1saW5lXQlhbGxvdXQta2lsbC1saW5lCWtpbGwtbGluZSwgYXR0ZW5k aW5nIHRvIG91dGxpbmUgc3RydWN0dXJlLgpcXFthbGxvdXQtY29weS1saW5lLWFzLWtpbGxdCWFs bG91dC1jb3B5LWxpbmUtYXMta2lsbCBDb3B5IGxpbmUgYnV0IGRvbid0IGRlbGV0ZSBpdC4KXFxb YWxsb3V0LXlhbmtdCWFsbG91dC15YW5rCQlZYW5rLCBhZGp1c3RpbmcgZGVwdGggb2YgeWFua2Vk IHRvcGljIHRvCgkJCQlkZXB0aCBvZiBoZWFkaW5nIGlmIHlhbmtpbmcgaW50byBiYXJlIHRvcGlj CgkJCQloZWFkaW5nIChpZSwgcHJlZml4IHNhbnMgdGV4dCkuClxcW2FsbG91dC15YW5rLXBvcF0J YWxsb3V0LXlhbmstcG9wCUlzIHRvIGFsbG91dC15YW5rIGFzIHlhbmstcG9wIGlzIHRvIHlhbmsK CglUb3BpYy1vcmllbnRlZCBFbmNyeXB0aW9uOgoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpc XFthbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9uXQlhbGxvdXQtdG9nZ2xl LWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9uIEVuY3J5cHQvRGVjcnlwdCB0b3BpYyBjb250ZW50 CgoJTWlzYyBjb21tYW5kczoKCS0tLS0tLS0tLS0tLS0KTS14IG91dGxpbmVpZnktc3RpY2t5CQlB Y3RpdmF0ZSBvdXRsaW5lIG1vZGUgZm9yIGN1cnJlbnQgYnVmZmVyLAoJCQkJYW5kIGVzdGFibGlz aCBhIGRlZmF1bHQgZmlsZS12YXIgc2V0dGluZwoJCQkJZm9yIGBhbGxvdXQtbGF5b3V0Jy4KXFxb YWxsb3V0LW1hcmstdG9waWNdICAgCWFsbG91dC1tYXJrLXRvcGljClxcW2FsbG91dC1jb3B5LWV4 cG9zZWQtdG8tYnVmZmVyXSAgICAgYWxsb3V0LWNvcHktZXhwb3NlZC10by1idWZmZXIKCQkJCUR1 cGxpY2F0ZSBvdXRsaW5lLCBzYW5zIGNvbmNlYWxlZCB0ZXh0LCB0bwoJCQkJYnVmZmVyIHdpdGgg bmFtZSBkZXJpdmVkIGZyb20gZGVyaXZlZCBmcm9tIHRoYXQKCQkJCW9mIGN1cnJlbnQgYnVmZmVy IC0gXCIqQlVGRkVSTkFNRSBleHBvc2VkKlwiLgpcXFthbGxvdXQtZmxhdHRlbi1leHBvc2VkLXRv LWJ1ZmZlcl0JYWxsb3V0LWZsYXR0ZW4tZXhwb3NlZC10by1idWZmZXIKCQkJCUxpa2UgYWJvdmUg J2NvcHktZXhwb3NlZCcsIGJ1dCBjb252ZXJ0IHRvcGljCgkJCQlwcmVmaXhlcyB0byBzZWN0aW9u LnN1YnNlY3Rpb24uLi4gbnVtZXJpYwoJCQkJZm9ybWF0LgpcXFtldmFsLWV4cHJlc3Npb25dIChh bGxvdXQtaW5pdCB0KQlTZXR1cCBFbWFjcyBzZXNzaW9uIGZvciBvdXRsaW5lIG1vZGUKCQkJCWF1 dG8tYWN0aXZhdGlvbi4KCiAgICAgICAgICAgICAgICAgIFRvcGljIEVuY3J5cHRpb24KCk91dGxp bmUgbW9kZSBzdXBwb3J0cyBncGcgZW5jcnlwdGlvbiBvZiB0b3BpY3MsIHdpdGggc3VwcG9ydCBm b3IKc3ltbWV0cmljIGFuZCBrZXktcGFpciBtb2RlcywgcGFzc3BocmFzZSB0aW1lb3V0LCBwYXNz cGhyYXNlCmNvbnNpc3RlbmN5IGNoZWNraW5nLCB1c2VyLXByb3ZpZGVkIGhpbnRpbmcgZm9yIHN5 bW1ldHJpYyBrZXkKbW9kZSwgYW5kIGF1dG8tZW5jcnlwdGlvbiBvZiB0b3BpY3MgcGVuZGluZyBl bmNyeXB0aW9uIG9uIHNhdmUuClwoVG9waWNzIHBlbmRpbmcgZW5jcnlwdGlvbiBhcmUsIGJ5IGRl ZmF1bHQsIGF1dG9tYXRpY2FsbHkKZW5jcnlwdGVkIGR1cmluZyBmaWxlIHNhdmVzOyBpZiB5b3Un cmUgZWRpdGluZyB0aGUgY29udGVudHMgb2YKc3VjaCBhIHRvcGljLCBpdCBpcyBhdXRvbWF0aWNh bGx5IGRlY3J5cHRlZCBmb3IgY29udGludWVkCmVkaXRpbmcuKSAgVGhlIGFpbSBpcyByZWxpYWJs ZSB0b3BpYyBwcml2YWN5IHdoaWxlIHByZXZlbnRpbmcKYWNjaWRlbnRzIGxpa2UgbmVnbGVjdGVk IGVuY3J5cHRpb24gYmVmb3JlIHNhdmVzLCBmb3JnZXR0aW5nCndoaWNoIHBhc3NwaHJhc2Ugd2Fz IHVzZWQsIGFuZCBvdGhlciBwcmFjdGljYWwgcGl0ZmFsbHMuCgpTZWUgYGFsbG91dC10b2dnbGUt Y3VycmVudC1zdWJ0cmVlLWVuY3J5cHRpb24nIGZ1bmN0aW9uIGRvY3N0cmluZyBhbmQKYGFsbG91 dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzJyBjdXN0b21pemF0aW9uIHZhcmlhYmxlIGZv ciBkZXRhaWxzLgoKCQkgSE9ULVNQT1QgT3BlcmF0aW9uCgpIb3Qtc3BvdCBvcGVyYXRpb24gcHJv dmlkZXMgYSBtZWFucyBmb3IgZWFzeSwgc2luZ2xlLWtleXN0cm9rZSBvdXRsaW5lCm5hdmlnYXRp b24gYW5kIGV4cG9zdXJlIGNvbnRyb2wuCgpXaGVuIHRoZSB0ZXh0IGN1cnNvciBpcyBwb3NpdGlv bmVkIGRpcmVjdGx5IG9uIHRoZSBidWxsZXQgY2hhcmFjdGVyIG9mCmEgdG9waWMsIHJlZ3VsYXIg Y2hhcmFjdGVycyAoYSB0byB6KSBpbnZva2UgdGhlIGNvbW1hbmRzIG9mIHRoZQpjb3JyZXNwb25k aW5nIGFsbG91dC1tb2RlIGtleW1hcCBjb250cm9sIGNoYXJzLiAgRm9yIGV4YW1wbGUsIFwiZlwi CndvdWxkIGludm9rZSB0aGUgY29tbWFuZCB0eXBpY2FsbHkgYm91bmQgdG8gXCJDLWM8c3BhY2U+ Qy1mXCIKXChcXFthbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsXSBgYWxsb3V0LWZvcndhcmQt Y3VycmVudC1sZXZlbCcpLgoKVGh1cywgYnkgcG9zaXRpb25pbmcgdGhlIGN1cnNvciBvbiBhIHRv cGljIGJ1bGxldCwgeW91IGNhbgpleGVjdXRlIHRoZSBvdXRsaW5lIG5hdmlnYXRpb24gYW5kIG1h bmlwdWxhdGlvbiBjb21tYW5kcyB3aXRoIGEKc2luZ2xlIGtleXN0cm9rZS4gIFJlZ3VsYXIgbmF2 aWdhdGlvbiBrZXlzIChlZywgXFxbZm9yd2FyZC1jaGFyXSwgXFxbbmV4dC1saW5lXSkgbmV2ZXIg Z2V0CnRoaXMgc3BlY2lhbCB0cmFuc2xhdGlvbiwgc28geW91IGNhbiB1c2UgdGhlbSB0byBnZXQg b3V0IG9mIHRoZQpob3Qtc3BvdCBhbmQgYmFjayB0byBub3JtYWwgb3BlcmF0aW9uLgoKTm90ZSB0 aGF0IHRoZSBjb21tYW5kIGBhbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnknIFwoXFxb YWxsb3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWVudHJ5XVwpCndpbGwgbW92ZSB0byB0aGUgaG90 LXNwb3Qgd2hlbiB0aGUgY3Vyc29yIGlzIGFscmVhZHkgbG9jYXRlZCBhdCB0aGUKYmVnaW5uaW5n IG9mIHRoZSBjdXJyZW50IGVudHJ5LCBzbyB5b3UgdXN1YWxseSBjYW4gaGl0IFxcW2FsbG91dC1i ZWdpbm5pbmctb2YtY3VycmVudC1lbnRyeV0KdHdpY2UgaW4gYSByb3cgdG8gZ2V0IHRvIHRoZSBo b3Qtc3BvdC4KCgkJCSAgICBUZXJtaW5vbG9neQoKVG9waWMgaGllcmFyY2h5IGNvbnN0aXR1ZW50 cyAtIFRPUElDUyBhbmQgU1VCVE9QSUNTOgoKVE9QSUM6CUEgYmFzaWMsIGNvaGVyZW50IGNvbXBv bmVudCBvZiBhbiBFbWFjcyBvdXRsaW5lLiAgSXQgY2FuCgljb250YWluIGFuZCBiZSBjb250YWlu ZWQgYnkgb3RoZXIgdG9waWNzLgpDVVJSRU5UIHRvcGljOgoJVGhlIHZpc2libGUgdG9waWMgbW9z dCBpbW1lZGlhdGVseSBjb250YWluaW5nIHRoZSBjdXJzb3IuCkRFUFRIOglUaGUgZGVncmVlIG9m IG5lc3Rpbmcgb2YgYSB0b3BpYzsgaXQgaW5jcmVhc2VzIHdpdGgKCWNvbnRhaW5tZW50LiAgQWxz byBjYWxsZWQgdGhlOgpMRVZFTDoJVGhlIHNhbWUgYXMgREVQVEguCgpBTkNFU1RPUlM6CglUaGUg dG9waWNzIHRoYXQgY29udGFpbiBhIHRvcGljLgpQQVJFTlQ6CUEgdG9waWMncyBpbW1lZGlhdGUg YW5jZXN0b3IuICBJdCBoYXMgYSBkZXB0aCBvbmUgbGVzcyB0aGFuCgl0aGUgdG9waWMuCk9GRlNQ UklORzoKCVRoZSB0b3BpY3MgY29udGFpbmVkIGJ5IGEgdG9waWM7ClNVQlRPUElDOgoJQW4gaW1t ZWRpYXRlIG9mZnNwcmluZyBvZiBhIHRvcGljOwpDSElMRFJFTjoKCVRoZSBpbW1lZGlhdGUgb2Zm c3ByaW5nIG9mIGEgdG9waWMuClNJQkxJTkdTOgoJVG9waWNzIGhhdmluZyB0aGUgc2FtZSBwYXJl bnQgYW5kIGRlcHRoLgoKVG9waWMgdGV4dCBjb25zdGl0dWVudHM6CgpIRUFERVI6CVRoZSBmaXJz dCBsaW5lIG9mIGEgdG9waWMsIGluY2x1ZGUgdGhlIHRvcGljIFBSRUZJWCBhbmQgaGVhZGVyCgl0 ZXh0LgpQUkVGSVg6IFRoZSBsZWFkaW5nIHRleHQgb2YgYSB0b3BpYyB3aGljaCBkaXN0aW5ndWlz aGVzIGl0IGZyb20gbm9ybWFsCiAgICAgICAgdGV4dC4gIEl0IGhhcyBhIHN0cmljdCBmb3JtLCB3 aGljaCBjb25zaXN0cyBvZiBhIHByZWZpeC1sZWFkCiAgICAgICAgc3RyaW5nLCBwYWRkaW5nLCBh bmQgYSBidWxsZXQuICBUaGUgYnVsbGV0IG1heSBiZSBmb2xsb3dlZCBieSBhCiAgICAgICAgbnVt YmVyLCBpbmRpY2F0aW5nIHRoZSBvcmRpbmFsIG51bWJlciBvZiB0aGUgdG9waWMgYW1vbmcgaXRz CiAgICAgICAgc2libGluZ3MsIGEgc3BhY2UsIGFuZCB0aGVuIHRoZSBoZWFkZXIgdGV4dC4KCglU aGUgcmVsYXRpdmUgbGVuZ3RoIG9mIHRoZSBQUkVGSVggZGV0ZXJtaW5lcyB0aGUgbmVzdGluZyBk ZXB0aAoJb2YgdGhlIHRvcGljLgpQUkVGSVgtTEVBRDoKCVRoZSBzdHJpbmcgYXQgdGhlIGJlZ2lu bmluZyBvZiBhIHRvcGljIHByZWZpeCwgbm9ybWFsbHkgYSBgLicuCglJdCBjYW4gYmUgY3VzdG9t aXplZCBieSBjaGFuZ2luZyB0aGUgc2V0dGluZyBvZgoJYGFsbG91dC1oZWFkZXItcHJlZml4JyBh bmQgdGhlbiByZWluaXRpYWxpemluZyBgYWxsb3V0LW1vZGUnLgoKCUJ5IHNldHRpbmcgdGhlIHBy ZWZpeC1sZWFkIHRvIHRoZSBjb21tZW50LXN0cmluZyBvZiBhCglwcm9ncmFtbWluZyBsYW5ndWFn ZSwgeW91IGNhbiBlbWJlZCBvdXRsaW5lIHN0cnVjdHVyaW5nIGluCglwcm9ncmFtIGNvZGUgd2l0 aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBsYW5ndWFnZSBwcm9jZXNzaW5nCglvZiB0aGF0IGNv ZGUuICBTZWUgYGFsbG91dC11c2UtbW9kZS1zcGVjaWZpYy1sZWFkZXInCglkb2NzdHJpbmcgZm9y IG1vcmUgZGV0YWlsLgpQUkVGSVgtUEFERElORzoKCVNwYWNlcyBvciBhc3Rlcmlza3Mgd2hpY2gg c2VwYXJhdGUgdGhlIHByZWZpeC1sZWFkIGFuZCB0aGUKCWJ1bGxldCwgZGV0ZXJtaW5pbmcgdGhl IGRlcHRoIG9mIHRoZSB0b3BpYy4KQlVMTEVUOiBBIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRo ZSB0b3BpYyBwcmVmaXgsIGl0IG11c3QgYmUgb25lIG9mCgl0aGUgY2hhcmFjdGVycyBsaXN0ZWQg b24gYGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZycgb3IKICAgICAgICBgYWxsb3V0LWRpc3Rp bmN0aXZlLWJ1bGxldHMtc3RyaW5nJy4gIChTZWUgdGhlIGRvY3VtZW50YXRpb24KICAgICAgICBm b3IgdGhlc2UgdmFyaWFibGVzIGZvciBtb3JlIGRldGFpbHMuKSAgVGhlIGRlZmF1bHQgY2hvaWNl IG9mCglidWxsZXQgd2hlbiBnZW5lcmF0aW5nIHRvcGljcyB2YXJpZXMgaW4gYSBjeWNsZSB3aXRo IHRoZSBkZXB0aCBvZgoJdGhlIHRvcGljLgpFTlRSWToJVGhlIHRleHQgY29udGFpbmVkIGluIGEg dG9waWMgYmVmb3JlIGFueSBvZmZzcHJpbmcuCkJPRFk6CVNhbWUgYXMgRU5UUlkuCgoKRVhQT1NV UkU6CiAJVGhlIHN0YXRlIG9mIGEgdG9waWMgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgb24tc2NyZWVu IHZpc2liaWxpdHkKCW9mIGl0cyBvZmZzcHJpbmcgYW5kIGNvbnRhaW5lZCB0ZXh0LgpDT05DRUFM RUQ6CglUb3BpY3MgYW5kIGVudHJ5IHRleHQgd2hvc2UgZGlzcGxheSBpcyBpbmhpYml0ZWQuICBD b250aWd1b3VzCgl1bml0cyBvZiBjb25jZWFsZWQgdGV4dCBpcyByZXByZXNlbnRlZCBieSBgLi4u JyBlbGxpcHNlcy4KCglDb25jZWFsZWQgdG9waWNzIGFyZSBlZmZlY3RpdmVseSBjb2xsYXBzZWQg d2l0aGluIGFuIGFuY2VzdG9yLgpDTE9TRUQ6CUEgdG9waWMgd2hvc2UgaW1tZWRpYXRlIG9mZnNw cmluZyBhbmQgYm9keS10ZXh0IGlzIGNvbmNlYWxlZC4KT1BFTjoJQSB0b3BpYyB0aGF0IGlzIG5v dCBjbG9zZWQsIHRob3VnaCBpdHMgb2Zmc3ByaW5nIG9yIGJvZHkgbWF5IGJlLiIKOzs7XyAgICAu IENvZGUKICAoaW50ZXJhY3RpdmUgIlAiKQoKICAobGV0KiAoKGFjdGl2ZSAoYW5kIChub3QgKGVx dWFsIG1ham9yLW1vZGUgJ291dGxpbmUpKQoJCSAgICAgKGFsbG91dC1tb2RlLXApKSkKCQkJCSAg ICAgICA7IE1hc3NhZ2UgdW5pdmVyc2FsLWFyZyBgdG9nZ2xlJyB2YWw6CgkgKHRvZ2dsZSAoYW5k IHRvZ2dsZQoJCSAgICAgKG9yIChhbmQgKGxpc3RwIHRvZ2dsZSkoY2FyIHRvZ2dsZSkpCgkJCSB0 b2dnbGUpKSkKCQkJCSAgICAgICA7IEFjdGl2YXRpb24gc3BlY2lmaWNhbGx5IGRlbWFuZGVkPwoJ IChleHBsaWNpdC1hY3RpdmF0aW9uIChhbmQgdG9nZ2xlCgkJCQkgICAob3IgKHN5bWJvbHAgdG9n Z2xlKQoJCQkJICAgICAgIChhbmQgKHdob2xlbnVtcCB0b2dnbGUpCgkJCQkJICAgIChub3QgKHpl cm9wIHRvZ2dsZSkpKSkpKQoJIDs7IGFsbG91dC1tb2RlIGFscmVhZHkgY2FsbGVkIG9uY2UgZHVy aW5nIHRoaXMgY29tcGxleCBjb21tYW5kPwoJIChzYW1lLWNvbXBsZXgtY29tbWFuZCAoZXEgYWxs b3V0LXYxOC8xOS1maWxlLXZhci1oYWNrCgkJCQkgIChjYXIgY29tbWFuZC1oaXN0b3J5KSkpCiAg ICAgICAgICh3cml0ZS1maWxlLWhvb2stdmFyLW5hbWUgKGNvbmQgKChib3VuZHAgJ3dyaXRlLWZp bGUtZnVuY3Rpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn d3JpdGUtZmlsZS1mdW5jdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChib3VuZHAgJ3dyaXRlLWZpbGUtaG9va3MpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICd3cml0ZS1maWxlLWhvb2tzKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh0ICdsb2NhbC13cml0ZS1maWxlLWhvb2tzKSkpCgkgZG8t bGF5b3V0CgkgKQoKCQkJCSAgICAgICA7IFNlZSBjb21tZW50cyBiZWxvdyByZSB2MTkuMTgsLjE5 IGJ1Zy4KICAgIChzZXRxIGFsbG91dC12MTgvMTktZmlsZS12YXItaGFjayAoY2FyIGNvbW1hbmQt aGlzdG9yeSkpCgogICAgKGNvbmQKCiAgICAgOzsgUHJvdmlzaW9uIGZvciB2MTkuMTgsIDE5LjE5 IGJ1ZyAtCiAgICAgOzsgRW1hY3MgdiAxOS4xOCwgMTkuMTkgZmlsZS12YXIgY29kZSBpbnZva2Vz IHByb3AtbGluZS1kZXNpZ25hdGVkCiAgICAgOzsgbW9kZXMgdHdpY2Ugd2hlbiBmaWxlIGlzIHZp c2l0ZWQuICBXZSBoYXZlIHRvIGF2b2lkIHRvZ2dsaW5nIG1vZGUKICAgICA7OyBvZmYgb24gc2Vj b25kIGludm9jYXRpb24sIHNvIHdlIGRldGVjdCBpdCBhcyBiZXN0IHdlIGNhbiwgYW5kCiAgICAg Ozsgc2tpcCBldmVyeXRoaW5nLgogICAgICgoYW5kIHNhbWUtY29tcGxleC1jb21tYW5kCQk7IFN0 aWxsIGluIHNhbWUgY29tcGxleCBjb21tYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IGFzIGxhc3QgdGltZSBgYWxsb3V0LW1vZGUnIGludm9rZWQuCgkgIGFjdGl2 ZQkJCTsgQWxyZWFkeSBhY3RpdmF0ZWQuCgkgIChub3QgZXhwbGljaXQtYWN0aXZhdGlvbikJOyBQ cm9wLWxpbmUgZmlsZS12YXJzIGRvbid0IGhhdmUgYXJncy4KCSAgKHN0cmluZy1tYXRjaCAiXjE5 LjFbODldIgk7IEJ1ZyBvbmx5IGtub3duIHRvIGJlIGluIHYxOS4xOCBhbmQKCQkJZW1hY3MtdmVy c2lvbikpOyAxOS4xOS4KICAgICAgdCkKCiAgICAgOzsgRGVhY3RpdmF0aW9uOgogICAgICgoYW5k IChub3QgZXhwbGljaXQtYWN0aXZhdGlvbikKCSAgKG9yIGFjdGl2ZSB0b2dnbGUpKQoJCQkJICAg ICAgIDsgQWN0aXZhdGlvbiBub3QgZXhwbGljaXRseQoJCQkJICAgICAgIDsgcmVxdWVzdGVkLCBh bmQgZWl0aGVyIGluCgkJCQkgICAgICAgOyBhY3RpdmUgc3RhdGUgb3IgKmRlKmFjdGl2YXRpb24K CQkJCSAgICAgICA7IHNwZWNpZmljYWxseSByZXF1ZXN0ZWQ6CiAgICAgIChzZXRxIGFsbG91dC1l eHBsaWNpdGx5LWRlYWN0aXZhdGVkIHQpCgogICAgICAoYWxsb3V0LWRvLXJlc3VtcHRpb25zKQoK ICAgICAgKHJlbW92ZS1mcm9tLWludmlzaWJpbGl0eS1zcGVjICcoYWxsb3V0IC4gdCkpCiAgICAg IChyZW1vdmUtaG9vayAncHJlLWNvbW1hbmQtaG9vayAnYWxsb3V0LXByZS1jb21tYW5kLWJ1c2lu ZXNzIHQpCiAgICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ2FsbG91dC1wb3N0 LWNvbW1hbmQtYnVzaW5lc3MgdCkKICAgICAgKHJlbW92ZS1ob29rICdiZWZvcmUtY2hhbmdlLWZ1 bmN0aW9ucyAnYWxsb3V0LWJlZm9yZS1jaGFuZ2UtaGFuZGxlciB0KQogICAgICAocmVtb3ZlLWhv b2sgJ2lzZWFyY2gtbW9kZS1lbmQtaG9vayAnYWxsb3V0LWlzZWFyY2gtZW5kLWhhbmRsZXIgdCkK ICAgICAgKHJlbW92ZS1ob29rIHdyaXRlLWZpbGUtaG9vay12YXItbmFtZSAnYWxsb3V0LXdyaXRl LWZpbGUtaG9vay1oYW5kbGVyIHQpCiAgICAgIChyZW1vdmUtaG9vayAnYXV0by1zYXZlLWhvb2sg J2FsbG91dC1hdXRvLXNhdmUtaG9vay1oYW5kbGVyIHQpCgogICAgICAocmVtb3ZlLW92ZXJsYXlz IChwb2ludC1taW4pIChwb2ludC1tYXgpCiAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGVnb3J5 ICdhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkpCgogICAgICAoc2V0cSBhbGxvdXQtbW9kZSBuaWwp CiAgICAgIChydW4taG9va3MgJ2FsbG91dC1tb2RlLWRlYWN0aXZhdGUtaG9vaykpCgogICAgIDs7 IEFjdGl2YXRpb246CiAgICAgKChub3QgYWN0aXZlKQogICAgICAoc2V0cSBhbGxvdXQtZXhwbGlj aXRseS1kZWFjdGl2YXRlZCBuaWwpCiAgICAgIChpZiBhbGxvdXQtb2xkLXN0eWxlLXByZWZpeGVz CiAgICAgICAgICA7OyBJbmhpYml0IGFsbCB0aGUgZmFuY3kgZm9ybWF0dGluZzoKICAgICAgICAg IChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICcoYWxsb3V0LXByaW1hcnktYnVsbGV0ICIqIikpKQoK ICAgICAgKGFsbG91dC1vdmVybGF5LXByZXBhcmF0aW9ucykgICAgIDsgRG9lc24ndCBodXJ0IHRv IHJlZG8gdGhpcy4KCiAgICAgIChhbGxvdXQtaW5mZXItaGVhZGVyLWxlYWQtYW5kLXByaW1hcnkt YnVsbGV0KQogICAgICAoYWxsb3V0LWluZmVyLWJvZHktcmVpbmRlbnQpCgogICAgICAoc2V0LWFs bG91dC1yZWdleHApCiAgICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zCiAgICAgICAnKGFsbG91 dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLXJlZ2V4cHMKICAgICAgICAgYWxsb3V0 LWxpbmUtYm91bmRhcnktcmVnZXhwCiAgICAgICAgIGV4dGVuZCkKICAgICAgICcoYWxsb3V0LWVu Y3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tcmVnZXhwcwogICAgICAgICBhbGxvdXQtYm9i LXJlZ2V4cAogICAgICAgICBleHRlbmQpKQoKICAgICAgOzsgUHJvZHVjZSBtYXAgZnJvbSBjdXJy ZW50IHZlcnNpb24gb2YgYWxsb3V0LWtleWJpbmRpbmdzLWxpc3Q6CiAgICAgIChzZXRxIGFsbG91 dC1tb2RlLW1hcAogICAgICAgICAgICAocHJvZHVjZS1hbGxvdXQtbW9kZS1tYXAgYWxsb3V0LWtl eWJpbmRpbmdzLWxpc3QpKQogICAgICAoc3Vic3RpdHV0ZS1rZXktZGVmaW5pdGlvbiAnYmVnaW5u aW5nLW9mLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG91dC1iZWdp bm5pbmctb2YtbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtbW9k ZS1tYXAgZ2xvYmFsLW1hcCkKICAgICAgKHN1YnN0aXR1dGUta2V5LWRlZmluaXRpb24gJ21vdmUt YmVnaW5uaW5nLW9mLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG91 dC1iZWdpbm5pbmctb2YtbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxv dXQtbW9kZS1tYXAgZ2xvYmFsLW1hcCkKICAgICAgKHN1YnN0aXR1dGUta2V5LWRlZmluaXRpb24g J2VuZC1vZi1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtZW5k LW9mLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LW1vZGUtbWFw IGdsb2JhbC1tYXApCiAgICAgIChzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uICdtb3ZlLWVuZC1v Zi1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtZW5kLW9mLWxp bmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LW1vZGUtbWFwIGdsb2Jh bC1tYXApCiAgICAgIChwcm9kdWNlLWFsbG91dC1tb2RlLW1lbnViYXItZW50cmllcykKICAgICAg KGZzZXQgJ2FsbG91dC1tb2RlLW1hcCBhbGxvdXQtbW9kZS1tYXApCgogICAgICA7OyBJbmNsdWRl IG9uIG1pbm9yLW1vZGUtbWFwLWFsaXN0LCBpZiBub3QgYWxyZWFkeSB0aGVyZToKICAgICAgKGlm IChub3QgKG1lbWJlciAnKGFsbG91dC1tb2RlIC4gYWxsb3V0LW1vZGUtbWFwKQogICAgICAgICAg ICAgICAgICAgICAgIG1pbm9yLW1vZGUtbWFwLWFsaXN0KSkKICAgICAgICAgIChzZXRxIG1pbm9y LW1vZGUtbWFwLWFsaXN0CiAgICAgICAgICAgICAgICAoY29ucyAnKGFsbG91dC1tb2RlIC4gYWxs b3V0LW1vZGUtbWFwKQogICAgICAgICAgICAgICAgICAgICAgbWlub3ItbW9kZS1tYXAtYWxpc3Qp KSkKCiAgICAgIChhZGQtdG8taW52aXNpYmlsaXR5LXNwZWMgJyhhbGxvdXQgLiB0KSkKICAgICAg KGFsbG91dC1hZGQtcmVzdW1wdGlvbnMgJyhsaW5lLW1vdmUtaWdub3JlLWludmlzaWJsZSB0KSkK ICAgICAgKGFkZC1ob29rICdwcmUtY29tbWFuZC1ob29rICdhbGxvdXQtcHJlLWNvbW1hbmQtYnVz aW5lc3MgbmlsIHQpCiAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ2FsbG91dC1w b3N0LWNvbW1hbmQtYnVzaW5lc3MgbmlsIHQpCiAgICAgIChhZGQtaG9vayAnYmVmb3JlLWNoYW5n ZS1mdW5jdGlvbnMgJ2FsbG91dC1iZWZvcmUtY2hhbmdlLWhhbmRsZXIKICAgICAgICAgICAgICAg IG5pbCB0KQogICAgICAoYWRkLWhvb2sgJ2lzZWFyY2gtbW9kZS1lbmQtaG9vayAnYWxsb3V0LWlz ZWFyY2gtZW5kLWhhbmRsZXIgbmlsIHQpCiAgICAgIChhZGQtaG9vayB3cml0ZS1maWxlLWhvb2st dmFyLW5hbWUgJ2FsbG91dC13cml0ZS1maWxlLWhvb2staGFuZGxlcgogICAgICAgICAgICAgICAg bmlsIHQpCiAgICAgIChhZGQtaG9vayAnYXV0by1zYXZlLWhvb2sgJ2FsbG91dC1hdXRvLXNhdmUt aG9vay1oYW5kbGVyCiAgICAgICAgICAgICAgICBuaWwgdCkKCiAgICAgIDs7IFN0YXNoIGF1dG8t ZmlsbCBzZXR0aW5ncyBhbmQgYWRqdXN0IHNvIGN1c3RvbSBhbGxvdXQgYXV0by1maWxsCiAgICAg IDs7IGZ1bmMgd2lsbCBiZSB1c2VkIGlmIGF1dG8tZmlsbCBpcyBhY3RpdmUgb3IgYWN0aXZhdGVk LiAgKFRoZQogICAgICA7OyBjdXN0b20gZnVuYyByZXNwZWN0cyB0b3BpYyBoZWFkbGluZSwgbWFp bnRhaW5zIGhhbmdpbmctaW5kZW50cywKICAgICAgOzsgZXRjLikKICAgICAgKGlmIChhbmQgYXV0 by1maWxsLWZ1bmN0aW9uIChub3QgYWxsb3V0LWluaGliaXQtYXV0by1maWxsKSkKICAgICAgICAg IDs7IGFsbG91dC1hdXRvLWZpbGwgd2lsbCB1c2UgdGhlIHN0YXNoZWQgdmFsdWVzIGFuZCBzbyBm b3J0aC4KICAgICAgICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICcoYXV0by1maWxsLWZ1bmN0 aW9uIGFsbG91dC1hdXRvLWZpbGwpKSkKICAgICAgKGFsbG91dC1hZGQtcmVzdW1wdGlvbnMgKGxp c3QgJ2FsbG91dC1mb3JtZXItYXV0by1maWxsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXV0by1maWxsLWZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7OyBSZWdpc3RlciBhbGxvdXQtYXV0by1maWxsIHRvIGJlIHVzZWQgaWYKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOzsgZmlsbGluZyBpcyBhY3RpdmU6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsaXN0ICdhbGxvdXQtb3V0c2lkZS1ub3JtYWwtYXV0by1maWxsLWZ1bmN0 aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbC1hdXRvLWZpbGwt ZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobm9ybWFsLWF1dG8tZmls bC1mdW5jdGlvbiBhbGxvdXQtYXV0by1maWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7OyBQYXJhZ3JhcGhzIGFyZSBicm9rZW4gYnkgdG9waWMgaGVhZGxpbmVzLgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdCAncGFyYWdyYXBoLXN0YXJ0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgcGFyYWdyYXBoLXN0YXJ0ICJcXHxeXFwoIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1yZWdleHAg IlxcKSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAncGFyYWdyYXBoLXNl cGFyYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgcGFyYWdy YXBoLXNlcGFyYXRlICJcXHxeXFwoIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbG91dC1yZWdleHAgIlxcKSIpKSkKICAgICAgKG9yIChhc3NxICdhbGxvdXQt bW9kZSBtaW5vci1tb2RlLWFsaXN0KQoJICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0CgkgICAgICAg KGNvbnMgJyhhbGxvdXQtbW9kZSAiIEFsbG91dCIpIG1pbm9yLW1vZGUtYWxpc3QpKSkKCiAgICAg IChhbGxvdXQtc2V0dXAtbWVudWJhcikKCiAgICAgIChpZiBhbGxvdXQtbGF5b3V0CgkgIChzZXRx IGRvLWxheW91dCB0KSkKCiAgICAgIChzZXRxIGFsbG91dC1tb2RlIHQpCiAgICAgIChydW4taG9v a3MgJ2FsbG91dC1tb2RlLWhvb2spKQoKICAgICA7OyBSZWFjdGl2YXRpb246CiAgICAgKChzZXRx IGRvLWxheW91dCB0KQogICAgICAoYWxsb3V0LWluZmVyLWJvZHktcmVpbmRlbnQpKQogICAgICkg OzsgZW5kIG9mIGFjdGl2YXRpb24tbW9kZSBjYXNlcy4KCiAgICA7OyBEbyBhdXRvIGxheW91dCBp ZiB3YXJyYW50ZWQ6CiAgICAobGV0ICgodXNlLWxheW91dCAoaWYgKGxpc3RwIGFsbG91dC1sYXlv dXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWxheW91dAogICAgICAgICAgICAg ICAgICAgICAgICBhbGxvdXQtZGVmYXVsdC1sYXlvdXQpKSkKICAgICAgKGlmIChhbmQgZG8tbGF5 b3V0CiAgICAgICAgICAgICAgIGFsbG91dC1hdXRvLWFjdGl2YXRpb24KICAgICAgICAgICAgICAg dXNlLWxheW91dAogICAgICAgICAgICAgICAoYW5kIChub3QgKGVxIGFsbG91dC1hdXRvLWFjdGl2 YXRpb24gJ2FjdGl2YXRlKSkKICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIGFsbG91dC1hdXRv LWFjdGl2YXRpb24gJ2FzaykKICAgICAgICAgICAgICAgICAgICAgICAgKGlmICh5LW9yLW4tcCAo Zm9ybWF0ICJFeHBvc2UgJXMgd2l0aCBsYXlvdXQgJyVzJz8gIgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1uYW1lKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlLWxheW91dCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIlNraXBw ZWQgJXMgbGF5b3V0LiIgKGJ1ZmZlci1uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBu aWwpCiAgICAgICAgICAgICAgICAgICAgICB0KSkpCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgICAgICAgKG1lc3NhZ2UgIkFkanVzdGluZyAnJXMnIGV4cG9zdXJlLi4uIiAoYnVmZmVy LW5hbWUpKQogICAgICAgICAgICAoZ290by1jaGFyIDApCiAgICAgICAgICAgIChhbGxvdXQtdGhp cy1vci1uZXh0LWhlYWRpbmcpCiAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBlcnIKICAgICAg ICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgICAoYXBwbHkgJ2FsbG91dC1leHBvc2Ut dG9waWMgKGxpc3QgdXNlLWxheW91dCkpCiAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJBZGp1 c3RpbmcgJyVzJyBleHBvc3VyZS4uLiBkb25lLiIgKGJ1ZmZlci1uYW1lKSkpCiAgICAgICAgICAg ICAgOzsgUHJvYmxlbSBhcHBseWluZyBleHBvc3VyZSAtIG5vdGlmeSB1c2VyLCBidXQgZG9uJ3QK ICAgICAgICAgICAgICA7OyBpbnRlcnJ1cHQsIGVnLCBmaWxlIHZpc2l0OgogICAgICAgICAgICAg IChlcnJvciAobWVzc2FnZSAiJXMiIChjYXIgKGNkciBlcnIpKSkKICAgICAgICAgICAgICAgICAg ICAgKHNpdC1mb3IgMSkpKSkpKQogICAgYWxsb3V0LW1vZGUKICAgICkJCQkJCTsgbGV0KgogICkg IAkJCQkJOyBkZWZ1bgo7OztfICA+IGFsbG91dC1taW5vci1tb2RlCihkZWZhbGlhcyAnYWxsb3V0 LW1pbm9yLW1vZGUgJ2FsbG91dC1tb2RlKQoKOzs7XyAgLSBQb3NpdGlvbiBBc3Nlc3NtZW50Cjs7 O18gICA+IGFsbG91dC1oaWRkZW4tcCAoJm9wdGlvbmFsIHBvcykKKGRlZnN1YnN0IGFsbG91dC1o aWRkZW4tcCAoJm9wdGlvbmFsIHBvcykKICAiTm9uLW5pbCBpZiB0aGUgY2hhcmFjdGVyIGFmdGVy IHBvaW50IGlzIGludmlzaWJsZS4iCiAgKGVxIChnZXQtY2hhci1wcm9wZXJ0eSAob3IgcG9zIChw b2ludCkpICdpbnZpc2libGUpICdhbGxvdXQpKQoKOzs7XyAgPiBhbGxvdXQtb3ZlcmxheS1pbnNl cnQtaW4tZnJvbnQtaGFuZGxlciAob2wgYWZ0ZXIgYmVnIGVuZAo7OzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJlbGVuKQooZGVmdW4g YWxsb3V0LW92ZXJsYXktaW5zZXJ0LWluLWZyb250LWhhbmRsZXIgKG9sIGFmdGVyIGJlZyBlbmQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9u YWwgcHJlbGVuKQogICJTaGlmdCB0aGUgb3ZlcmxheSBzbyBzdHVmZiBpbnNlcnRlZCBpbiBmcm9u dCBvZiBpdCBhcmUgZXhjbHVkZWQuIgogIChpZiBhZnRlcgogICAgICAobW92ZS1vdmVybGF5IG9s ICgxKyBiZWcpIChvdmVybGF5LWVuZCBvbCkpKSkKOzs7XyAgPiBhbGxvdXQtb3ZlcmxheS1pbnRl cmlvci1tb2RpZmljYXRpb24taGFuZGxlciAob2wgYWZ0ZXIgYmVnIGVuZAo7OzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJl bGVuKQooZGVmdW4gYWxsb3V0LW92ZXJsYXktaW50ZXJpb3ItbW9kaWZpY2F0aW9uLWhhbmRsZXIg KG9sIGFmdGVyIGJlZyBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJlbGVuKQogICJHZXQgY29uZmlybWF0aW9uIGJl Zm9yZSBtYWtpbmcgYXJiaXRyYXJ5IGNoYW5nZXMgdG8gaW52aXNpYmxlIHRleHQuCgpXZSBleHBv c2UgdGhlIGludmlzaWJsZSB0ZXh0IGFuZCBhc2sgZm9yIGNvbmZpcm1hdGlvbi4gIFJlZnVzYWwg b3IKa2V5Ym9hcmQtcXVpdCBhYmFuZG9ucyB0aGUgY2hhbmdlcywgd2l0aCBrZXlib2FyZC1xdWl0 IGFkZGl0aW9uYWxseQpyZWNsb3NpbmcgdGhlIG9wZW5lZCB0ZXh0LgoKTm8gY29uZmlybWF0aW9u IGlzIG5lY2Vzc2FyeSB3aGVuIGluaGliaXQtcmVhZC1vbmx5IGlzIHNldCAtIGVnLCBhbGxvdXQK aW50ZXJuYWwgZnVuY3Rpb25zIHVzZSB0aGlzIGZlYXR1cmUgY29oZXNpdmVseSBidW5jaCBjaGFu Z2VzLiIKCiAgKHdoZW4gKGFuZCAobm90IGluaGliaXQtcmVhZC1vbmx5KSAobm90IGFmdGVyKSkK ICAgIChsZXQgKChzdGFydCAocG9pbnQpKQogICAgICAgICAgKG9sLXN0YXJ0IChvdmVybGF5LXN0 YXJ0IG9sKSkKICAgICAgICAgIChvbC1lbmQgKG92ZXJsYXktZW5kIG9sKSkKICAgICAgICAgIGZp cnN0KQogICAgICAoZ290by1jaGFyIGJlZykKICAgICAgKHdoaWxlICg8IChwb2ludCkgZW5kKQog ICAgICAgICh3aGVuIChhbGxvdXQtaGlkZGVuLXApCiAgICAgICAgICAoYWxsb3V0LXNob3ctdG8t b2Zmc2hvb3QpCiAgICAgICAgICAoaWYgKGFsbG91dC1oaWRkZW4tcCkKICAgICAgICAgICAgICAo c2F2ZS1leGN1cnNpb24gKGZvcndhcmQtY2hhciAxKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYWxsb3V0LXNob3ctdG8tb2Zmc2hvb3QpKSkKICAgICAgICAgICh3aGVuIChub3QgZmly c3QpCiAgICAgICAgICAgIChzZXRxIGZpcnN0IChwb2ludCkpKSkKICAgICAgICAoZ290by1jaGFy IChpZiAoZmVhdHVyZXAgJ3hlbWFjcykKICAgICAgICAgICAgICAgICAgICAgICAobmV4dC1wcm9w ZXJ0eS1jaGFuZ2UgKDErIChwb2ludCkpIG5pbCBlbmQpCiAgICAgICAgICAgICAgICAgICAgIChu ZXh0LWNoYXItcHJvcGVydHktY2hhbmdlICgxKyAocG9pbnQpKSBlbmQpKSkpCiAgICAgICh3aGVu IGZpcnN0CiAgICAgICAgKGdvdG8tY2hhciBmaXJzdCkKICAgICAgICAoY29uZGl0aW9uLWNhc2Ug bmlsCiAgICAgICAgICAgIChpZiAobm90CiAgICAgICAgICAgICAgICAgKHllcy1vci1uby1wCiAg ICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cwogICAgICAgICAgICAgICAg ICAgKGNvbmNhdCAiTW9kaWZ5IGNvbmNlYWxlZCB0ZXh0PyAgKFwibm9cIiBqdXN0IGFib3J0cywi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXFxba2V5Ym9hcmQtcXVpdF0gYWxzbyByZWNv bmNlYWxzKSAiKSkpKQogICAgICAgICAgICAgICAgKHByb2duIChnb3RvLWNoYXIgc3RhcnQpCiAg ICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJDb25jZWFsZWQtdGV4dCBjaGFuZ2UgcmVmdXNl ZC4iKSkpCiAgICAgICAgICAocXVpdCAoYWxsb3V0LWZsYWctcmVnaW9uIG9sLXN0YXJ0IG9sLWVu ZCBuaWwpCiAgICAgICAgICAgICAgICAoYWxsb3V0LWZsYWctcmVnaW9uIG9sLXN0YXJ0IG9sLWVu ZCB0KQogICAgICAgICAgICAgICAgKGVycm9yICJDb25jZWFsZWQtdGV4dCBjaGFuZ2UgYWJhbmRv bmVkLCB0ZXh0IHJlY29uY2VhbGVkLiIpKSkpCiAgICAgIChnb3RvLWNoYXIgc3RhcnQpKSkpCjs7 O18gID4gYWxsb3V0LWJlZm9yZS1jaGFuZ2UtaGFuZGxlciAoYmVnIGVuZCkKKGRlZnVuIGFsbG91 dC1iZWZvcmUtY2hhbmdlLWhhbmRsZXIgKGJlZyBlbmQpCiAgIlByb3RlY3QgYWdhaW5zdCBjaGFu Z2VzIHRvIGludmlzaWJsZSB0ZXh0LgoKU2VlIGFsbG91dC1vdmVybGF5LWludGVyaW9yLW1vZGlm aWNhdGlvbi1oYW5kbGVyIGZvciBkZXRhaWxzLiIKCiAgKGlmIChhbmQgKGFsbG91dC1tb2RlLXAp IHVuZG8taW4tcHJvZ3Jlc3MgKGFsbG91dC1oaWRkZW4tcCkpCiAgICAgIChhbGxvdXQtc2hvdy10 by1vZmZzaG9vdCkpCgogIDs7IGFsbG91dC1vdmVybGF5LWludGVyaW9yLW1vZGlmaWNhdGlvbi1o YW5kbGVyIG9uIGFuIG92ZXJsYXkgaGFuZGxlcwogIDs7IHRoaXMgaW4gb3RoZXIgZW1hY3MsIHZp YSBgYWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5J3MgJ21vZGlmaWNhdGlvbi1ob29rcy4KICAod2hl biAoYW5kIChmZWF0dXJlcCAneGVtYWNzKSAoYWxsb3V0LW1vZGUtcCkpCiAgICA7OyBwcm9jZXNz IGFsbCBvZiB0aGUgcGVuZGluZyBvdmVybGF5czoKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAo Z290LWNoYXIgYmVnKQogICAgICAobGV0ICgob3ZlcmxheSAoYWxsb3V0LWdldC1pbnZpc2liaWxp dHktb3ZlcmxheSkpKQoJKGFsbG91dC1vdmVybGF5LWludGVyaW9yLW1vZGlmaWNhdGlvbi1oYW5k bGVyCgkgb3ZlcmxheSBuaWwgYmVnIGVuZCBuaWwpKSkpKQo7OztfICA+IGFsbG91dC1pc2VhcmNo LWVuZC1oYW5kbGVyICgmb3B0aW9uYWwgb3ZlcmxheSkKKGRlZnVuIGFsbG91dC1pc2VhcmNoLWVu ZC1oYW5kbGVyICgmb3B0aW9uYWwgb3ZlcmxheSkKICAiUmVjb25jaWxlIGFsbG91dCBvdXRsaW5l IGV4cG9zdXJlIG9uIGFycml2aW5nIGluIGhpZGRlbiB0ZXh0IGFmdGVyIGlzZWFyY2guCgpPcHRp b25hbCBPVkVSTEFZIHBhcmFtZXRlciBpcyBmb3Igd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQg YnkKYGlzZWFyY2gtb3Blbi1pbnZpc2libGUnIG92ZXJsYXkgcHJvcGVydHkuICBJdCBpcyBvdGhl cndpc2UgdW51c2VkLCBzbyB0aGlzCmZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gYGlz ZWFyY2gtbW9kZS1lbmQtaG9vaycuIgoKICAoaWYgKGFuZCAoYWxsb3V0LW1vZGUtcCkgKGFsbG91 dC1oaWRkZW4tcCkpCiAgICAgIChhbGxvdXQtc2hvdy10by1vZmZzaG9vdCkpKQoKOzs7XyAjMyBJ bnRlcm5hbCBQb3NpdGlvbiBTdGF0ZS1UcmFja2luZyAtICJhbGxvdXQtcmVjZW50LSoiIGZ1bmNz Cjs7OyBBbGwgdGhlIGJhc2ljIG91dGxpbmUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgZG8gc3Ry aW5nIG1hdGNoZXMgdG8KOzs7IGV2YWx1YXRlIGhlYWRpbmcgcHJlZml4IGxvY2F0aW9uIHNldCB0 aGUgdmFyaWFibGVzCjs7OyBgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nJyAgYW5kIGBh bGxvdXQtcmVjZW50LXByZWZpeC1lbmQnCjs7OyB3aGVuIHN1Y2Nlc3NmdWwuICBGdW5jdGlvbnMg c3RhcnRpbmcgd2l0aCBgYWxsb3V0LXJlY2VudC0nIGFsbAo7OzsgdXNlIHRoaXMgc3RhdGUsIHBy b3ZpZGluZyB0aGUgbWVhbnMgdG8gYXZvaWQgcmVkdW5kYW50IHNlYXJjaGVzCjs7OyBmb3IganVz dC1lc3RhYmxpc2hlZCBkYXRhLiAgVGhpcyBvcHRpbWl6YXRpb24gY2FuIHByb3ZpZGUKOzs7IHNp Z25pZmljYW50IHNwZWVkIGltcHJvdmVtZW50LCBidXQgaXQgbXVzdCBiZSBlbXBsb3llZCBjYXJl ZnVsbHkuCjs7O18gID0gYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nCihkZWZ2YXIgYWxs b3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nIDAKICAiQnVmZmVyIHBvaW50IG9mIHRoZSBzdGFy dCBvZiB0aGUgbGFzdCB0b3BpYyBwcmVmaXggZW5jb3VudGVyZWQuIikKKG1ha2UtdmFyaWFibGUt YnVmZmVyLWxvY2FsICdhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcpCjs7O18gID0gYWxs b3V0LXJlY2VudC1wcmVmaXgtZW5kCihkZWZ2YXIgYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kIDAK ICAiQnVmZmVyIHBvaW50IG9mIHRoZSBlbmQgb2YgdGhlIGxhc3QgdG9waWMgcHJlZml4IGVuY291 bnRlcmVkLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJlY2VudC1wcmVm aXgtZW5kKQo7OztfICA9IGFsbG91dC1yZWNlbnQtZGVwdGgKKGRlZnZhciBhbGxvdXQtcmVjZW50 LWRlcHRoIDAKICAiRGVwdGggb2YgdGhlIGxhc3QgdG9waWMgcHJlZml4IGVuY291bnRlcmVkLiIp CihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJlY2VudC1kZXB0aCkKOzs7XyAg PSBhbGxvdXQtcmVjZW50LWVuZC1vZi1zdWJ0cmVlCihkZWZ2YXIgYWxsb3V0LXJlY2VudC1lbmQt b2Ytc3VidHJlZSAwCiAgIkJ1ZmZlciBwb2ludCBsYXN0IHJldHVybmVkIGJ5IGBhbGxvdXQtZW5k LW9mLWN1cnJlbnQtc3VidHJlZScuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxv dXQtcmVjZW50LWVuZC1vZi1zdWJ0cmVlKQo7OztfICA+IGFsbG91dC1wcmVmaXgtZGF0YSAoKQoo ZGVmc3Vic3QgYWxsb3V0LXByZWZpeC1kYXRhICgpCiAgIlJlZ2lzdGVyIGFsbG91dC1wcmVmaXgg c3RhdGUgZGF0YS4KCkZvciByZWZlcmVuY2UgYnkgYGFsbG91dC1yZWNlbnQnIGZ1bmNzLiAgUmV0 dXJucyBCRUdJTk5JTkcuIgogIChzZXRxIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCAob3IgKG1h dGNoLWVuZCAxKSAobWF0Y2gtZW5kIDIpKQogICAgICAgIGFsbG91dC1yZWNlbnQtcHJlZml4LWJl Z2lubmluZyAob3IgKG1hdGNoLWJlZ2lubmluZyAxKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoLWJlZ2lubmluZyAyKSkKICAgICAgICBhbGxvdXQtcmVj ZW50LWRlcHRoIChtYXggMSAoLSBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtaGVhZGVyLXN1YnRy YWN0aW9uKSkpCiAgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQo7OztfICA+IG51bGxp ZnktYWxsb3V0LXByZWZpeC1kYXRhICgpCihkZWZzdWJzdCBudWxsaWZ5LWFsbG91dC1wcmVmaXgt ZGF0YSAoKQogICJNYXJrIGFsbG91dCBwcmVmaXggZGF0YSBhcyBiZWluZyB1bmluZm9ybWF0aXZl LiIKICAoc2V0cSBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQgKHBvaW50KQogICAgICAgIGFsbG91 dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZyAocG9pbnQpCiAgICAgICAgYWxsb3V0LXJlY2VudC1k ZXB0aCAwKQogIGFsbG91dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZykKOzs7XyAgPiBhbGxvdXQt cmVjZW50LWRlcHRoICgpCihkZWZzdWJzdCBhbGxvdXQtcmVjZW50LWRlcHRoICgpCiAgIlJldHVy biBkZXB0aCBvZiBsYXN0IGhlYWRpbmcgZW5jb3VudGVyZWQgYnkgYW4gb3V0bGluZSBtYW5ldXZl cmluZyBmdW5jdGlvbi4KCkFsbCBvdXRsaW5lIGZ1bmN0aW9ucyB3aGljaCBkaXJlY3RseSBkbyBz dHJpbmcgbWF0Y2hlcyB0byBhc3Nlc3MKaGVhZGluZ3Mgc2V0IHRoZSB2YXJpYWJsZXMgYGFsbG91 dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZycgYW5kCmBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQn IGlmIHN1Y2Nlc3NmdWwuICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhvc2Ugc2V0dGluZ3MKdG8gcmV0 dXJuIHRoZSBjdXJyZW50IGRlcHRoLiIKCiAgYWxsb3V0LXJlY2VudC1kZXB0aCkKOzs7XyAgPiBh bGxvdXQtcmVjZW50LXByZWZpeCAoKQooZGVmc3Vic3QgYWxsb3V0LXJlY2VudC1wcmVmaXggKCkK ICAiTGlrZSBgYWxsb3V0LXJlY2VudC1kZXB0aCcsIGJ1dCByZXR1cm5zIHRleHQgb2YgbGFzdCBl bmNvdW50ZXJlZCBwcmVmaXguCgpBbGwgb3V0bGluZSBmdW5jdGlvbnMgd2hpY2ggZGlyZWN0bHkg ZG8gc3RyaW5nIG1hdGNoZXMgdG8gYXNzZXNzCmhlYWRpbmdzIHNldCB0aGUgdmFyaWFibGVzIGBh bGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcnIGFuZApgYWxsb3V0LXJlY2VudC1wcmVmaXgt ZW5kJyBpZiBzdWNjZXNzZnVsLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRob3NlIHNldHRpbmdzCnRv IHJldHVybiB0aGUgY3VycmVudCBwcmVmaXguIgogIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQpKQo7OztfICA+IGFsbG91dC1y ZWNlbnQtYnVsbGV0ICgpCihkZWZtYWNybyBhbGxvdXQtcmVjZW50LWJ1bGxldCAoKQogICJMaWtl IGFsbG91dC1yZWNlbnQtcHJlZml4LCBidXQgcmV0dXJucyBidWxsZXQgb2YgbGFzdCBlbmNvdW50 ZXJlZCBwcmVmaXguCgpBbGwgb3V0bGluZSBmdW5jdGlvbnMgd2hpY2ggZGlyZWN0bHkgZG8gc3Ry aW5nIG1hdGNoZXMgdG8gYXNzZXNzCmhlYWRpbmdzIHNldCB0aGUgdmFyaWFibGVzIGBhbGxvdXQt cmVjZW50LXByZWZpeC1iZWdpbm5pbmcnIGFuZApgYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kJyBp ZiBzdWNjZXNzZnVsLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRob3NlIHNldHRpbmdzCnRvIHJldHVy biB0aGUgY3VycmVudCBkZXB0aCBvZiB0aGUgbW9zdCByZWNlbnRseSBtYXRjaGVkIHRvcGljLiIK ICAnKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAoMS0gYWxsb3V0LXJlY2VudC1wcmVm aXgtZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1yZWNlbnQt cHJlZml4LWVuZCkpCgo7OztfICM0IE5hdmlnYXRpb24KCjs7O18gIC0gUG9zaXRpb24gQXNzZXNz bWVudAo7OztfICAgOiBMb2NhdGlvbiBQcmVkaWNhdGVzCjs7O18gICAgPiBhbGxvdXQtZG8tZG91 YmxlY2hlY2sgKCkKKGRlZnN1YnN0IGFsbG91dC1kby1kb3VibGVjaGVjayAoKQogICJUcnVlIGlm IGN1cnJlbnQgaXRlbSBjb25kaXRpb25zIHF1YWxpZnkgZm9yIGNoZWNraW5nIG9uIHRvcGljIGFi ZXJyYW5jZS4iCiAgKGFuZAogICA7OyBwcmVzdW1lIGludGVncml0eSBvZiBvdXRsaW5lIGFuZCB5 YW5rZWQgY29udGVudCBkdXJpbmcgeWFuayAtIG5lY2Vzc2FyeSwKICAgOzsgdG8gYWxsb3cgZm9y IGxldmVsIGRpc3Bhcml0eSBvZiB5YW5rIGxvY2F0aW9uIGFuZCB5YW5rZWQgdGV4dDoKICAgKG5v dCBhbGxvdXQtaW5oaWJpdC1hYmVycmFuY2UtZG91YmxlY2hlY2spCiAgIDs7IGFsbG91dC1kb3Vi bGVjaGVjay1hdC1hbmQtc2hhbGxvd2VyIGlzIGNlaWxpbmcgZm9yIGRvdWJsZWNoZWNrOgogICAo PD0gYWxsb3V0LXJlY2VudC1kZXB0aCBhbGxvdXQtZG91YmxlY2hlY2stYXQtYW5kLXNoYWxsb3dl cikpKQo7OztfICAgICA+IGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCAoKQooZGVmdW4gYWxs b3V0LWFiZXJyYW50LWNvbnRhaW5lci1wICgpCiAgIlRydWUgaWYgdG9waWMsIG9yIG5leHQgc2li bGluZyB3aXRoIGNoaWxkcmVuLCBjb250YWlucyB0aGVtIGRpc2NvbnRpbnVvdXNseS4KCkRpc2Nv bnRpbnVvdXMgbWVhbnMgYW4gaW1tZWRpYXRlIG9mZnNwcmluZyB0aGF0IGlzIG5lc3RlZCBtb3Jl CnRoYW4gb25lIGxldmVsIGRlZXBlciB0aGFuIHRoZSB0b3BpYy4KCklmIHRvcGljIGhhcyBubyBv ZmZzcHJpbmcsIHRoZW4gdGhlIG5leHQgc2libGluZyB3aXRoIG9mZnNwcmluZyB3aWxsCmRldGVy bWluZSB3aGV0aGVyIG9yIG5vdCB0aGlzIG9uZSBpcyBkZXRlcm1pbmVkIHRvIGJlIGFiZXJyYW50 LgoKSWYgdHJ1ZSwgdGhlbiB0aGUgYWxsb3V0LXJlY2VudC0qIHNldHRpbmdzIGFyZSBjYWxpYnJh dGVkIG9uIHRoZQpvZmZzcHJpbmcgdGhhdCBxYXVsaWZpZXMgaXQgYXMgYWJlcnJhbnQsIGllIHdp dGggZGVwdGggdGhhdApleGNlZWRzIHRoZSB0b3BpYyBieSBtb3JlIHRoYW4gb25lLiIKCiAgOzsg VGhpcyBpcyBtb3N0IGNsZWFybHkgdW5kZXJzdG9vZCB3aGVuIGNvbnNpZGVyaW5nIHN0YW5kYXJk LXByZWZpeC1sZWFkZXIKICA7OyBsb3ctbGV2ZWwgdG9waWNzLCB3aGljaCBjYW4gYWxsIHRvbyBl YXNpbHkgbWF0Y2ggdGV4dCBub3QgaW50ZW5kZWQgYXMKICA7OyBoZWFkZXJzLiAgRm9yIGV4YW1w bGUsIGFueSBsaW5lIHdpdGggYSBsZWFkaW5nICcuJyBvciAnKicgYW5kIGxhY2tpbmcgYQogIDs7 IGZvbGxvd2luZyBidWxsZXQgcXVhbGlmaWVzIHdpdGhvdXQgdGhpcyBwcm90ZWN0aW9uLiAgKEEg c2VxdWVuY2Ugb2YKICA7OyB0aGVtIGNhbiBvY2N1ciBuYXR1cmFsbHksIGVnIGEgdHlwaWNhbCB0 ZXh0dWFsIGJ1bGxldCBsaXN0LikgIFdlCiAgOzsgZGlzcXVhbGlmeSBzdWNoIGxvdy1sZXZlbCBz ZXF1ZW5jZXMgd2hlbiB0aGV5IGFyZSBmb2xsb3dlZCBieSBhCiAgOzsgZGlzY29udGludW91c2x5 IGNvbnRhaW5lZCBjaGlsZCwgaW5mZXJyaW5nIHRoYXQgdGhlIHNlcXVlbmNlcyBhcmUgbm90CiAg OzsgYWN0dWFsbHkgY29ubmVjdGVkIHdpdGggdGhlaXIgcHJvc3BlY3RpdmUgY29udGV4dC4KCiAg KGxldCAoKGRlcHRoIChhbGxvdXQtZGVwdGgpKQogICAgICAgIChzdGFydC1wb2ludCAocG9pbnQp KQogICAgICAgIGRvbmUgYWJlcnJhbnQpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKHdoaWxl IChhbmQgKG5vdCBkb25lKQogICAgICAgICAgICAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgYWxs b3V0LWxpbmUtYm91bmRhcnktcmVnZXhwIG5pbCAwKSkKICAgICAgICAoYWxsb3V0LXByZWZpeC1k YXRhKQogICAgICAgIChnb3RvLWNoYXIgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQog ICAgICAgIChjb25kCiAgICAgICAgIDs7IHNpYmxpbmcgLSBjb250aW51ZToKICAgICAgICAgKChl cSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRoKSkKICAgICAgICAgOzsgZmlyc3Qgb2Zmc3ByaW5n IGlzIGV4Y2Vzc2l2ZSAtIGFiZXJyYW50OgogICAgICAgICAoKD4gYWxsb3V0LXJlY2VudC1kZXB0 aCAoMSsgZGVwdGgpKQogICAgICAgICAgKHNldHEgZG9uZSB0IGFiZXJyYW50IHQpKQogICAgICAg ICA7OyBuZXh0IG5vbi1zaWJsaW5nIGlzIGxvd2VyLWRlcHRoIC0gbm90IGFiZXJyYW50OgogICAg ICAgICAodCAoc2V0cSBkb25lIHQpKSkpKQogICAgKGlmIGFiZXJyYW50CiAgICAgICAgYWJlcnJh bnQKICAgICAgKGdvdG8tY2hhciBzdGFydC1wb2ludCkKICAgICAgOzsgcmVjYWxpYnJhdGUgYWxs b3V0LXJlY2VudC0qCiAgICAgIChhbGxvdXQtZGVwdGgpCiAgICAgIG5pbCkpKQo7OztfICAgID4g YWxsb3V0LW9uLWN1cnJlbnQtaGVhZGluZy1wICgpCihkZWZ1biBhbGxvdXQtb24tY3VycmVudC1o ZWFkaW5nLXAgKCkKICAiUmV0dXJuIG5vbi1uaWwgaWYgcG9pbnQgaXMgb24gY3VycmVudCB2aXNp YmxlIHRvcGljcycgaGVhZGVyIGxpbmUuCgpBY3R1YWxseSwgcmV0dXJucyBwcmVmaXggYmVnaW5u aW5nIHBvaW50LiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChhbGxvdXQtYmVnaW5uaW5nLW9mLWN1 cnJlbnQtbGluZSkKICAgIChhbmQgKGxvb2tpbmctYXQgYWxsb3V0LXJlZ2V4cCkKICAgICAgICAg KGFsbG91dC1wcmVmaXgtZGF0YSkKICAgICAgICAgKG9yIChub3QgKGFsbG91dC1kby1kb3VibGVj aGVjaykpCiAgICAgICAgICAgICAobm90IChhbGxvdXQtYWJlcnJhbnQtY29udGFpbmVyLXApKSkp KSkKOzs7XyAgICA+IGFsbG91dC1vbi1oZWFkaW5nLXAgKCkKKGRlZmFsaWFzICdhbGxvdXQtb24t aGVhZGluZy1wICdhbGxvdXQtb24tY3VycmVudC1oZWFkaW5nLXApCjs7O18gICAgPiBhbGxvdXQt ZS1vLXByZWZpeC1wICgpCihkZWZ1biBhbGxvdXQtZS1vLXByZWZpeC1wICgpCiAgIlRydWUgaWYg cG9pbnQgaXMgbG9jYXRlZCB3aGVyZSBjdXJyZW50IHRvcGljIHByZWZpeCBlbmRzLCBoZWFkaW5n IGJlZ2lucy4iCiAgKGFuZCAoc2F2ZS1leGN1cnNpb24gKGxldCAoKGluaGliaXQtZmllbGQtdGV4 dC1tb3Rpb24gdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUp KQoJCSAgICAgICAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKSkKICAgICAgICg9IChwb2ludCko c2F2ZS1leGN1cnNpb24gKGFsbG91dC1lbmQtb2YtcHJlZml4KShwb2ludCkpKSkpCjs7O18gICA6 IExvY2F0aW9uIGF0dHJpYnV0ZXMKOzs7XyAgICA+IGFsbG91dC1kZXB0aCAoKQooZGVmdW4gYWxs b3V0LWRlcHRoICgpCiAgIlJldHVybiBkZXB0aCBvZiB0b3BpYyBtb3N0IGltbWVkaWF0ZWx5IGNv bnRhaW5pbmcgcG9pbnQuCgpSZXR1cm4gemVybyBpZiBwb2ludCBpcyBub3Qgd2l0aGluIGFueSB0 b3BpYy4KCkxpa2UgYGFsbG91dC1jdXJyZW50LWRlcHRoJywgYnV0IHJlc3BlY3RzIGhpZGRlbiBh cyB3ZWxsIGFzIHZpc2libGUgdG9waWNzLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChsZXQgKChz dGFydC1wb2ludCAocG9pbnQpKSkKICAgICAgKGlmIChhbmQgKGFsbG91dC1nb3RvLXByZWZpeCkK ICAgICAgICAgICAgICAgKG5vdCAoPCBzdGFydC1wb2ludCAocG9pbnQpKSkpCiAgICAgICAgICBh bGxvdXQtcmVjZW50LWRlcHRoCiAgICAgICAgKHByb2duCiAgICAgICAgICA7OyBPb3BzLCBubyBw cmVmaXgsIG51bGxpZnkgaXQ6CiAgICAgICAgICAobnVsbGlmeS1hbGxvdXQtcHJlZml4LWRhdGEp CiAgICAgICAgICA7OyAuLi4gYW5kIHJldHVybiAwOgogICAgICAgICAgMCkpKSkpCjs7O18gICAg PiBhbGxvdXQtY3VycmVudC1kZXB0aCAoKQooZGVmdW4gYWxsb3V0LWN1cnJlbnQtZGVwdGggKCkK ICAiUmV0dXJuIGRlcHRoIG9mIHZpc2libGUgdG9waWMgbW9zdCBpbW1lZGlhdGVseSBjb250YWlu aW5nIHBvaW50LgoKUmV0dXJuIHplcm8gaWYgcG9pbnQgaXMgbm90IHdpdGhpbiBhbnkgdG9waWMu IgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGlmIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRp bmcpCiAgICAgICAgKG1heCAxCiAgICAgICAgICAgICAoLSBhbGxvdXQtcmVjZW50LXByZWZpeC1l bmQKICAgICAgICAgICAgICAgIGFsbG91dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZwogICAgICAg ICAgICAgICAgYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbikpCiAgICAgIDApKSkKOzs7XyAgICA+ IGFsbG91dC1nZXQtY3VycmVudC1wcmVmaXggKCkKKGRlZnVuIGFsbG91dC1nZXQtY3VycmVudC1w cmVmaXggKCkKICAiVG9waWMgcHJlZml4IG9mIHRoZSBjdXJyZW50IHRvcGljLiIKICAoc2F2ZS1l eGN1cnNpb24KICAgIChpZiAoYWxsb3V0LWdvdG8tcHJlZml4KQoJKGFsbG91dC1yZWNlbnQtcHJl Zml4KSkpKQo7OztfICAgID4gYWxsb3V0LWdldC1idWxsZXQgKCkKKGRlZnVuIGFsbG91dC1nZXQt YnVsbGV0ICgpCiAgIlJldHVybiBidWxsZXQgb2YgY29udGFpbmluZyB0b3BpYyAodmlzaWJsZSBv ciBub3QpLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChhbmQgKGFsbG91dC1nb3RvLXByZWZpeCkK CSAoYWxsb3V0LXJlY2VudC1idWxsZXQpKSkpCjs7O18gICAgPiBhbGxvdXQtY3VycmVudC1idWxs ZXQgKCkKKGRlZnVuIGFsbG91dC1jdXJyZW50LWJ1bGxldCAoKQogICJSZXR1cm4gYnVsbGV0IG9m IGN1cnJlbnQgKHZpc2libGUpIHRvcGljIGhlYWRpbmcsIG9yIG5vbmUgaWYgbm9uZSBmb3VuZC4i CiAgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAgICAoc2F2ZS1leGN1cnNpb24KCShhbGxvdXQtYmFj ay10by1jdXJyZW50LWhlYWRpbmcpCgkoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzICgt IGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kKSkKICAgIDs7IFF1aWNrIGFuZCBk aXJ0eSBwcm92aXNpb24sIG9zdGVuc2libHkgZm9yIG1pc3NpbmcgYnVsbGV0OgogICAgKGFyZ3Mt b3V0LW9mLXJhbmdlIG5pbCkpCiAgKQo7OztfICAgID4gYWxsb3V0LWdldC1wcmVmaXgtYnVsbGV0 IChwcmVmaXgpCihkZWZ1biBhbGxvdXQtZ2V0LXByZWZpeC1idWxsZXQgKHByZWZpeCkKICAiUmV0 dXJuIHRoZSBidWxsZXQgb2YgdGhlIGhlYWRlciBwcmVmaXggc3RyaW5nIFBSRUZJWC4iCiAgOzsg RG9lc24ndCBtYWtlIHNlbnNlIGlmIHdlJ3JlIG9sZC1zdHlsZSBwcmVmaXhlcywgYnV0IHRoaXMg anVzdAogIDs7IG91Z2h0bid0IGJlIGNhbGxlZCB0aGVuLCBzbyBmb3JnZXQgYWJvdXQgaXQuLi4K ICAoaWYgKHN0cmluZy1tYXRjaCBhbGxvdXQtcmVnZXhwIHByZWZpeCkKICAgICAgKHN1YnN0cmlu ZyBwcmVmaXggKDEtIChtYXRjaC1lbmQgMikpIChtYXRjaC1lbmQgMikpKSkKOzs7XyAgICA+IGFs bG91dC1zaWJsaW5nLWluZGV4ICgmb3B0aW9uYWwgZGVwdGgpCihkZWZ1biBhbGxvdXQtc2libGlu Zy1pbmRleCAoJm9wdGlvbmFsIGRlcHRoKQogICJJdGVtIG51bWJlciBvZiB0aGlzIHByb3NwZWN0 aXZlIHRvcGljIGFtb25nIGl0cyBzaWJsaW5ncy4KCklmIG9wdGlvbmFsIGFyZyBERVBUSCBpcyBn cmVhdGVyIHRoYW4gY3VycmVudCBkZXB0aCwgdGhlbiB3ZSdyZQpvcGVuaW5nIGEgbmV3IGxldmVs LCBhbmQgcmV0dXJuIDAuCgpJZiBsZXNzIHRoYW4gdGhpcyBkZXB0aCwgYXNjZW5kIHRvIHRoYXQg ZGVwdGggYW5kIGNvdW50Li4uIgoKICAoc2F2ZS1leGN1cnNpb24KICAgIChjb25kICgoYW5kIGRl cHRoICg8PSBkZXB0aCAwKSAwKSkKICAgICAgICAgICgob3IgKG51bGwgZGVwdGgpICg9IGRlcHRo IChhbGxvdXQtZGVwdGgpKSkKICAgICAgICAgICAobGV0ICgoaW5kZXggMSkpCiAgICAgICAgICAg ICAod2hpbGUgKGFsbG91dC1wcmV2aW91cy1zaWJsaW5nIGFsbG91dC1yZWNlbnQtZGVwdGggbmls KQoJICAgICAgIChzZXRxIGluZGV4ICgxKyBpbmRleCkpKQogICAgICAgICAgICAgaW5kZXgpKQog ICAgICAgICAgKCg8IGRlcHRoIGFsbG91dC1yZWNlbnQtZGVwdGgpCiAgICAgICAgICAgKGFsbG91 dC1hc2NlbmQtdG8tZGVwdGggZGVwdGgpCiAgICAgICAgICAgKGFsbG91dC1zaWJsaW5nLWluZGV4 KSkKICAgICAgICAgICgwKSkpKQo7OztfICAgID4gYWxsb3V0LXRvcGljLWZsYXQtaW5kZXggKCkK KGRlZnVuIGFsbG91dC10b3BpYy1mbGF0LWluZGV4ICgpCiAgIlJldHVybiBhIGxpc3QgaW5kaWNh dGluZyBwb2ludCdzIG51bWVyaWMgc2VjdGlvbi5zdWJzZWN0LnN1YnN1YnNlY3QuLi4KT3V0ZXJt b3N0IGlzIGZpcnN0LiIKICAobGV0KiAoKGRlcHRoIChhbGxvdXQtZGVwdGgpKQoJIChuZXh0LWlu ZGV4IChhbGxvdXQtc2libGluZy1pbmRleCBkZXB0aCkpCgkgKHJldi1zaWJscyBuaWwpKQogICAg KHdoaWxlICg+IG5leHQtaW5kZXggMCkKICAgICAgKHNldHEgcmV2LXNpYmxzIChjb25zIG5leHQt aW5kZXggcmV2LXNpYmxzKSkKICAgICAgKHNldHEgZGVwdGggKDEtIGRlcHRoKSkKICAgICAgKHNl dHEgbmV4dC1pbmRleCAoYWxsb3V0LXNpYmxpbmctaW5kZXggZGVwdGgpKSkKICAgIHJldi1zaWJs cykKICApCgo7OztfICAtIE5hdmlnYXRpb24gcm91dGluZXMKOzs7XyAgID4gYWxsb3V0LWJlZ2lu bmluZy1vZi1jdXJyZW50LWxpbmUgKCkKKGRlZnVuIGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVu dC1saW5lICgpCiAgIkxpa2UgYmVnaW5uaW5nIG9mIGxpbmUsIGJ1dCB0byB2aXNpYmxlIHRleHQu IgoKICA7OyBUaGlzIGNvbWJpbmF0aW9uIG9mIG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgYW5kIGJl Z2lubmluZy1vZi1saW5lIGlzCiAgOzsgZGVsaWJlcmF0ZSwgYnV0IHRoZSAoYmVnaW5uaW5nLW9m LWxpbmUpIG1heSBub3cgYmUgc3VwZXJmbHVvdXMuCiAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4 dC1tb3Rpb24gdCkpCiAgICAobW92ZS1iZWdpbm5pbmctb2YtbGluZSAxKQogICAgKGJlZ2lubmlu Zy1vZi1saW5lKQogICAgKHdoaWxlIChhbmQgKG5vdCAoYm9icCkpIChvciAobm90IChib2xwKSkg KGFsbG91dC1oaWRkZW4tcCkpKQogICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgIChpZiAo b3IgKGFsbG91dC1oaWRkZW4tcCkgKG5vdCAoYm9scCkpKQogICAgICAgICAgKGZvcndhcmQtY2hh ciAtMSkpKSkpCjs7O18gICA+IGFsbG91dC1lbmQtb2YtY3VycmVudC1saW5lICgpCihkZWZ1biBh bGxvdXQtZW5kLW9mLWN1cnJlbnQtbGluZSAoKQogICJNb3ZlIHRvIHRoZSBlbmQgb2YgbGluZSwg cGFzdCBjb25jZWFsZWQgdGV4dCBpZiBhbnkuIgogIDs7IFhYWCBUaGlzIGlzIGZvciBzeW1tZXRy eSB3aXRoIGBhbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtbGluZScgLQogIDs7IGBtb3ZlLWVu ZC1vZi1saW5lJyBkb2Vzbid0IHN1ZmZlciB0aGUgc2FtZSBwcm9ibGVtIGFzCiAgOzsgYG1vdmUt YmVnaW5uaW5nLW9mLWxpbmUnLgogIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQp KQogICAgKGVuZC1vZi1saW5lKQogICAgKHdoaWxlIChhbGxvdXQtaGlkZGVuLXApCiAgICAgIChl bmQtb2YtbGluZSkKICAgICAgKGlmIChhbGxvdXQtaGlkZGVuLXApIChmb3J3YXJkLWNoYXIgMSkp KSkpCjs7O18gICA+IGFsbG91dC1iZWdpbm5pbmctb2YtbGluZSAoKQooZGVmdW4gYWxsb3V0LWJl Z2lubmluZy1vZi1saW5lICgpCiAgIkJlZ2lubmluZy1vZi1saW5lIHdpdGggYGFsbG91dC1iZWdp bm5pbmctb2YtbGluZS1jeWNsZXMnIGJlaGF2aW9yLCBpZiBzZXQuIgoKICAoaW50ZXJhY3RpdmUp CgogIChpZiAob3IgKG5vdCBhbGxvdXQtYmVnaW5uaW5nLW9mLWxpbmUtY3ljbGVzKQogICAgICAg ICAgKG5vdCAoZXF1YWwgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkpKQogICAgICAobW92ZS1i ZWdpbm5pbmctb2YtbGluZSAxKQogICAgKGFsbG91dC1kZXB0aCkKICAgIChsZXQgKChiZWdpbm5p bmctb2YtYm9keQogICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgKHdoaWxl IChhbmQgKGFsbG91dC1kby1kb3VibGVjaGVjaykKICAgICAgICAgICAgICAgICAgICAgICAgIChh bGxvdXQtYWJlcnJhbnQtY29udGFpbmVyLXApCiAgICAgICAgICAgICAgICAgICAgICAgICAoYWxs b3V0LXByZXZpb3VzLXZpc2libGUtaGVhZGluZyAxKSkpCiAgICAgICAgICAgICAoYWxsb3V0LWJl Z2lubmluZy1vZi1jdXJyZW50LWVudHJ5KQogICAgICAgICAgICAgKHBvaW50KSkpKQogICAgICAo Y29uZCAoKD0gKGN1cnJlbnQtY29sdW1uKSAwKQogICAgICAgICAgICAgKGdvdG8tY2hhciBiZWdp bm5pbmctb2YtYm9keSkpCiAgICAgICAgICAgICgoPCAocG9pbnQpIGJlZ2lubmluZy1vZi1ib2R5 KQogICAgICAgICAgICAgKGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1saW5lKSkKICAgICAg ICAgICAgKCg9IChwb2ludCkgYmVnaW5uaW5nLW9mLWJvZHkpCiAgICAgICAgICAgICAoZ290by1j aGFyIChhbGxvdXQtY3VycmVudC1idWxsZXQtcG9zKSkpCiAgICAgICAgICAgICh0IChhbGxvdXQt YmVnaW5uaW5nLW9mLWN1cnJlbnQtbGluZSkKICAgICAgICAgICAgICAgKGlmICg8IChwb2ludCkg YmVnaW5uaW5nLW9mLWJvZHkpCiAgICAgICAgICAgICAgICAgICA7OyB3ZSB3ZXJlIG9uIHRoZSBo ZWFkbGluZSBhZnRlciBpdHMgc3RhcnQ6CiAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIGJl Z2lubmluZy1vZi1ib2R5KSkpKSkpKQo7OztfICAgPiBhbGxvdXQtZW5kLW9mLWxpbmUgKCkKKGRl ZnVuIGFsbG91dC1lbmQtb2YtbGluZSAoKQogICJFbmQtb2YtbGluZSB3aXRoIGBhbGxvdXQtZW5k LW9mLWxpbmUtY3ljbGVzJyBiZWhhdmlvciwgaWYgc2V0LiIKCiAgKGludGVyYWN0aXZlKQoKICAo aWYgKG9yIChub3QgYWxsb3V0LWVuZC1vZi1saW5lLWN5Y2xlcykKICAgICAgICAgIChub3QgKGVx dWFsIGxhc3QtY29tbWFuZCB0aGlzLWNvbW1hbmQpKSkKICAgICAgKGFsbG91dC1lbmQtb2YtY3Vy cmVudC1saW5lKQogICAgKGxldCAoKGVuZC1vZi1lbnRyeSAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1lbnRyeSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAocG9pbnQpKSkpCiAgICAgIChjb25kICgobm90IChlb2xwKSkKICAgICAgICAg ICAgIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtbGluZSkpCiAgICAgICAgICAgICgob3IgKGFsbG91 dC1oaWRkZW4tcCkgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZm9yd2FyZC1jaGFyIC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGFsbG91dC1oaWRkZW4tcCkpKQogICAgICAgICAgICAgKGFsbG91dC1iYWNrLXRvLWN1 cnJlbnQtaGVhZGluZykKICAgICAgICAgICAgIChhbGxvdXQtc2hvdy1jdXJyZW50LWVudHJ5KQog ICAgICAgICAgICAgKGFsbG91dC1zaG93LWNoaWxkcmVuKQogICAgICAgICAgICAgKGFsbG91dC1l bmQtb2YtZW50cnkpKQogICAgICAgICAgICAoKD49IChwb2ludCkgZW5kLW9mLWVudHJ5KQogICAg ICAgICAgICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgICAgICAgICAgIChh bGxvdXQtZW5kLW9mLWN1cnJlbnQtbGluZSkpCiAgICAgICAgICAgICh0IChhbGxvdXQtZW5kLW9m LWVudHJ5KSkpKSkpCjs7O18gICA+IGFsbG91dC1uZXh0LWhlYWRpbmcgKCkKKGRlZnN1YnN0IGFs bG91dC1uZXh0LWhlYWRpbmcgKCkKICAiTW92ZSB0byB0aGUgaGVhZGluZyBmb3IgdGhlIHRvcGlj IFwocG9zc2libHkgaW52aXNpYmxlKSBhZnRlciB0aGlzIG9uZS4KClJldHVybnMgdGhlIGxvY2F0 aW9uIG9mIHRoZSBoZWFkaW5nLCBvciBuaWwgaWYgbm9uZSBmb3VuZC4KCldlIHNraXAgYW5vbW9s b3VzIGxvdy1sZXZlbCB0b3BpY3MsIGEgbGEgYGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCcu IgogIChpZiAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKQogICAgICAoZm9yd2FyZC1jaGFyIDEp KQoKICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgYWxsb3V0LWxpbmUtYm91bmRhcnktcmVnZXhw IG5pbCAwKQogICAgKGFsbG91dC1wcmVmaXgtZGF0YSkKICAgIChhbmQgKGFsbG91dC1kby1kb3Vi bGVjaGVjaykKICAgICAgICAgOzsgdGhpcyB3aWxsIHNldCBhbGxvdXQtcmVjZW50LSogb24gdGhl IGZpcnN0IG5vbi1hYmVycmFudCB0b3BpYywKICAgICAgICAgOzsgd2hldGhlciBpdCdzIHRoZSBj dXJyZW50IG9uZSBvciBvbmUgdGhhdCBkaXNxdWFsaWZpZXMgaXQ6CiAgICAgICAgIChhbGxvdXQt YWJlcnJhbnQtY29udGFpbmVyLXApKQogICAgKGdvdG8tY2hhciBhbGxvdXQtcmVjZW50LXByZWZp eC1iZWdpbm5pbmcpKSkKOzs7XyAgID4gYWxsb3V0LXRoaXMtb3ItbmV4dC1oZWFkaW5nCihkZWZ1 biBhbGxvdXQtdGhpcy1vci1uZXh0LWhlYWRpbmcgKCkKICAiUG9zaXRpb24gY3Vyc29yIG9uIGN1 cnJlbnQgb3IgbmV4dCBoZWFkaW5nLiIKICA7OyBBIHRocm93YXdheSBub24tbWFjcm8gdGhhdCBp cyBkZWZpbmVkIGFmdGVyIGFsbG91dC1uZXh0LWhlYWRpbmcKICA7OyBhbmQgdXNhYmxlIGJ5IGFs bG91dC1tb2RlLgogIChpZiAobm90IChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkp IChhbGxvdXQtbmV4dC1oZWFkaW5nKSkpCjs7O18gICA+IGFsbG91dC1wcmV2aW91cy1oZWFkaW5n ICgpCihkZWZ1biBhbGxvdXQtcHJldmlvdXMtaGVhZGluZyAoKQogICJNb3ZlIHRvIHRoZSBwcmlv ciBcKHBvc3NpYmx5IGludmlzaWJsZSkgaGVhZGluZyBsaW5lLgoKUmV0dXJuIHRoZSBsb2NhdGlv biBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWFkaW5nLCBvciBuaWwgaWYgbm90IGZvdW5kLgoK V2Ugc2tpcCBhbm9tb2xvdXMgbG93LWxldmVsIHRvcGljcywgYSBsYSBgYWxsb3V0LWFiZXJyYW50 LWNvbnRhaW5lci1wJy4iCgogIChpZiAoYm9icCkKICAgICAgbmlsCiAgICAobGV0ICgoc3RhcnQt cG9pbnQgKHBvaW50KSkpCiAgICAgIDs7IGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2Vk IGNhbGxzIHVzLCBzbyB3ZSBjYW4ndCB1c2UgaXQgaGVyZS4KICAgICAgKGFsbG91dC1nb3RvLXBy ZWZpeCkKICAgICAgKHdoZW4gKG9yIChyZS1zZWFyY2gtYmFja3dhcmQgYWxsb3V0LWxpbmUtYm91 bmRhcnktcmVnZXhwIG5pbCAwKQogICAgICAgICAgICAgICAgKGxvb2tpbmctYXQgYWxsb3V0LWJv Yi1yZWdleHApKQogICAgICAgIChnb3RvLWNoYXIgKGFsbG91dC1wcmVmaXgtZGF0YSkpCiAgICAg ICAgKGlmIChhbmQgKGFsbG91dC1kby1kb3VibGVjaGVjaykKICAgICAgICAgICAgICAgICAoYWxs b3V0LWFiZXJyYW50LWNvbnRhaW5lci1wKSkKICAgICAgICAgICAgKG9yIChhbGxvdXQtcHJldmlv dXMtaGVhZGluZykKICAgICAgICAgICAgICAgIChhbmQgKGdvdG8tY2hhciBzdGFydC1wb2ludCkK ICAgICAgICAgICAgICAgICAgICAgOzsgcmVjYWxpYnJhdGUgYWxsb3V0LXJlY2VudC0qOgogICAg ICAgICAgICAgICAgICAgICAoYWxsb3V0LWRlcHRoKQogICAgICAgICAgICAgICAgICAgICBuaWwp KQogICAgICAgICAgKHBvaW50KSkpKSkpCjs7O18gICA+IGFsbG91dC1nZXQtaW52aXNpYmlsaXR5 LW92ZXJsYXkgKCkKKGRlZnVuIGFsbG91dC1nZXQtaW52aXNpYmlsaXR5LW92ZXJsYXkgKCkKICAi UmV0dXJuIHRoZSBvdmVybGF5IGF0IHBvaW50IHRoYXQgZGljdGF0ZXMgYWxsb3V0IGludmlzaWJp bGl0eS4iCiAgKGxldCAoKG92ZXJsYXlzIChvdmVybGF5cy1hdCAocG9pbnQpKSkKICAgICAgICBn b3QpCiAgICAod2hpbGUgKGFuZCBvdmVybGF5cyAobm90IGdvdCkpCiAgICAgIChpZiAoZXF1YWwg KG92ZXJsYXktZ2V0IChjYXIgb3ZlcmxheXMpICdpbnZpc2libGUpICdhbGxvdXQpCiAgICAgICAg ICAoc2V0cSBnb3QgKGNhciBvdmVybGF5cykpCiAgICAgICAgKHBvcCBvdmVybGF5cykpKQogICAg Z290KSkKOzs7XyAgID4gYWxsb3V0LWJhY2stdG8tdmlzaWJsZS10ZXh0ICgpCihkZWZ1biBhbGxv dXQtYmFjay10by12aXNpYmxlLXRleHQgKCkKICAiTW92ZSB0byBtb3N0IHJlY2VudCBwcmlvciBj aGFyYWN0ZXIgdGhhdCBpcyB2aXNpYmxlLCBhbmQgcmV0dXJuIHBvaW50LiIKICAgIChpZiAoYWxs b3V0LWhpZGRlbi1wKQogICAgICAoZ290by1jaGFyIChvdmVybGF5LXN0YXJ0IChhbGxvdXQtZ2V0 LWludmlzaWJpbGl0eS1vdmVybGF5KSkpKQogICAgKHBvaW50KSkKCjs7O18gIC0gU3VidHJlZSBD aGFydGluZwo7OztfICAgIiBUaGVzZSByb3V0aW5lcyBlaXRoZXIgcHJvZHVjZSBvciBhc3Nlc3Mg Y2hhcnRzLCB3aGljaCBhcmUKOzs7IG5lc3RlZCBsaXN0cyBvZiB0aGUgbG9jYXRpb25zIG9mIHRv cGljcyB3aXRoaW4gYSBzdWJ0cmVlLgo7OzsKOzs7IENoYXJ0cyBlbmFibGUgZWZmaWNpZW50IHN1 YnRyZWUgbmF2aWdhdGlvbiBieSBwcm92aWRpbmcgYSByZXVzYWJsZSBiYXNpcwo7OzsgZm9yIGVs YWJvcmF0ZSwgY29tcG91bmQgYXNzZXNzbWVudCBhbmQgYWRqdXN0bWVudCBvZiBhIHN1YnRyZWUu Cgo7OztfICAgPiBhbGxvdXQtY2hhcnQtc3VidHJlZSAoJm9wdGlvbmFsIGxldmVscyB2aXNpYmxl IG9yaWctZGVwdGggcHJldi1kZXB0aCkKKGRlZnVuIGFsbG91dC1jaGFydC1zdWJ0cmVlICgmb3B0 aW9uYWwgbGV2ZWxzIHZpc2libGUgb3JpZy1kZXB0aCBwcmV2LWRlcHRoKQogICJQcm9kdWNlIGEg bG9jYXRpb24gXCJjaGFydFwiIG9mIHN1YnRvcGljcyBvZiB0aGUgY29udGFpbmluZyB0b3BpYy4K Ck9wdGlvbmFsIGFyZ3VtZW50IExFVkVMUyBzcGVjaWZpZXMgYSBkZXB0aCBsaW1pdCBcKHJlbGF0 aXZlIHRvIHN0YXJ0CmRlcHRoKSBmb3IgdGhlIGNoYXJ0LiAgTnVsbCBMRVZFTFMgbWVhbnMgbm8g bGltaXQuCgpXaGVuIG9wdGlvbmFsIGFyZ3VtZW50IFZJU0lCTEUgaXMgbm9uLW5pbCwgdGhlIGNo YXJ0IGluY2x1ZGVzCm9ubHkgdGhlIHZpc2libGUgc3ViZWxlbWVudHMgb2YgdGhlIGNoYXJ0ZWQg c3ViamVjdHMuCgpUaGUgcmVtYWluaW5nIG9wdGlvbmFsIGFyZ3MgYXJlIGZvciBpbnRlcm5hbCB1 c2UgYnkgdGhlIGZ1bmN0aW9uLgoKUG9pbnQgaXMgbGVmdCBhdCB0aGUgZW5kIG9mIHRoZSBzdWJ0 cmVlLgoKQ2hhcnRzIGFyZSB1c2VkIHRvIGNhcHR1cmUgb3V0bGluZSBzdHJ1Y3R1cmUsIHNvIHRo YXQgb3V0bGluZS1hbHRlcmluZwpyb3V0aW5lcyBuZWVkIGFzc2VzcyB0aGUgc3RydWN0dXJlIG9u bHkgb25jZSwgYW5kIHRoZW4gdXNlIHRoZSBjaGFydApmb3IgdGhlaXIgZWxhYm9yYXRlIG1hbmlw dWxhdGlvbnMuCgpUaGUgY2hhcnQgZW50cmllcyBmb3IgdGhlIHRvcGljcyBhcmUgaW4gcmV2ZXJz ZSBvcmRlciwgc28gdGhlCmxhc3QgdG9waWMgaXMgbGlzdGVkIGZpcnN0LiAgVGhlIGVudHJ5IGZv ciBlYWNoIHRvcGljIGNvbnNpc3RzIG9mCmFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgcG9pbnQg YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdG9waWMKcHJlZml4LiAgQ2hhcnRzIGZvciBvZmZzcHJp bmcgY29uc2lzdHMgb2YgYSBsaXN0IGNvbnRhaW5pbmcsCnJlY3Vyc2l2ZWx5LCB0aGUgY2hhcnRz IGZvciB0aGUgcmVzcGVjdGl2ZSBzdWJ0b3BpY3MuICBUaGUgY2hhcnQKZm9yIGEgdG9waWNzJyBv ZmZzcHJpbmcgcHJlY2VkZXMgdGhlIGVudHJ5IGZvciB0aGUgdG9waWMgaXRzZWxmLgoKVGhlIG90 aGVyIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYXJlIGZvciBpbnRlcm5hbCByZWN1cnNpb24sIGFuZCBz aG91bGQKbm90IGJlIHNwZWNpZmllZCBieSBleHRlcm5hbCBjYWxsZXJzLiAgT1JJRy1ERVBUSCBp cyBkZXB0aCBvZiB0b3BpYyBhdApzdGFydGluZyBwb2ludCwgYW5kIFBSRVYtREVQVEggaXMgZGVw dGggb2YgcHJpb3IgdG9waWMuIgoKICAobGV0ICgob3JpZ2luYWwgKG5vdCBvcmlnLWRlcHRoKSkJ OyBgb3JpZy1kZXB0aCcgc2V0IG9ubHkgaW4gcmVjdXJzaW9uLgoJY2hhcnQgY3Vyci1kZXB0aCkK CiAgICAoaWYgb3JpZ2luYWwJCQk7IEp1c3Qgc3RhcnRpbmc/CgkJCQkJOyBSZWdpc3RlciBpbml0 aWFsIHNldHRpbmdzIGFuZAoJCQkJCTsgcG9zaXRpb24gdG8gZmlyc3Qgb2Zmc3ByaW5nOgoJKHBy b2duIChzZXRxIG9yaWctZGVwdGggKGFsbG91dC1kZXB0aCkpCgkgICAgICAgKG9yIHByZXYtZGVw dGggKHNldHEgcHJldi1kZXB0aCAoMSsgb3JpZy1kZXB0aCkpKQogICAgICAgICAgICAgICAoaWYg dmlzaWJsZQogICAgICAgICAgICAgICAgICAgKGFsbG91dC1uZXh0LXZpc2libGUtaGVhZGluZyAx KQogICAgICAgICAgICAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKSkpKQoKICAgIDs7IExvb3Ag b3ZlciB0aGUgY3VycmVudCBsZXZlbHMnIHNpYmxpbmdzLiAgQmVzaWRlcyBiZWluZyBtb3JlCiAg ICA7OyBlZmZpY2llbnQgdGhhbiB0YWlsLXJlY3Vyc2luZyBvdmVyIGEgbGV2ZWwsIGl0IGF2b2lk cyBleGNlZWRpbmcKICAgIDs7IHRoZSB0eXBpY2FsbHkgcXVpdGUgY29uc3RyYWluZWQgRW1hY3Mg bWF4LWxpc3AtZXZhbC1kZXB0aC4KICAgIDs7CiAgICA7OyBQcm9iYWJseSB3b3VsZCBzcGVlZCB0 aGluZ3MgdXAgdG8gaW1wbGVtZW50IGxvb3AtYmFzZWQgc3RhY2sKICAgIDs7IG9wZXJhdGlvbiBy YXRoZXIgdGhhbiByZWN1cnNpbmcgZm9yIGxvd2VyIGxldmVscy4gIEJhaC4KCiAgICAod2hpbGUg KGFuZCAobm90IChlb2JwKSkKCQkJCQk7IFN0aWxsIHdpdGhpbiBvcmlnaW5hbCB0b3BpYz8KCQko PCBvcmlnLWRlcHRoIChzZXRxIGN1cnItZGVwdGggYWxsb3V0LXJlY2VudC1kZXB0aCkpCgkJKGNv bmQgKCg9IHByZXYtZGVwdGggY3Vyci1kZXB0aCkKCQkgICAgICAgOzsgUmVnaXN0ZXIgdGhpcyBv bmUgYW5kIG1vdmUgb246CgkJICAgICAgIChzZXRxIGNoYXJ0IChjb25zIGFsbG91dC1yZWNlbnQt cHJlZml4LWJlZ2lubmluZyBjaGFydCkpCgkJICAgICAgIChpZiAoYW5kIGxldmVscyAoPD0gbGV2 ZWxzIDEpKQoJCQkgICA7OyBBdCBkZXB0aCBsaW1pdCAtIHNraXAgc3VibGV2ZWxzOgoJCQkgICAo b3IgKGFsbG91dC1uZXh0LXNpYmxpbmcgY3Vyci1kZXB0aCkKCQkJICAgICAgIDs7IG9yIG5vIG1v cmUgc2libGluZ3MgLSBwcm9jZWVkIHRvCgkJCSAgICAgICA7OyBuZXh0IGhlYWRpbmcgYXQgbGVz c2VyIGRlcHRoOgoJCQkgICAgICAgKHdoaWxlIChhbmQgKDw9IGN1cnItZGVwdGgKCQkJCQkgICAg ICAgYWxsb3V0LXJlY2VudC1kZXB0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1uZXh0LXZpc2libGUtaGVhZGluZyAxKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQtaGVhZGluZykpKSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgdmlzaWJsZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgMSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1uZXh0LWhlYWRpbmcpKSkpCgoJCSAgICAgICgoYW5kICg8IHBy ZXYtZGVwdGggY3Vyci1kZXB0aCkKCQkJICAgIChvciAobm90IGxldmVscykKCQkJCSg+IGxldmVs cyAwKSkpCgkJICAgICAgIDs7IFJlY3Vyc2Ugb24gZGVlcGVyIGxldmVsIG9mIGN1cnIgdG9waWM6 CgkJICAgICAgIChzZXRxIGNoYXJ0CgkJCSAgICAgKGNvbnMgKGFsbG91dC1jaGFydC1zdWJ0cmVl IChhbmQgbGV2ZWxzCgkJCQkJCQkgICAgICAgKDEtIGxldmVscykpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZy1kZXB0 aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdXJyLWRlcHRoKQoJCQkJICAgY2hhcnQpKQoJCSAgICAgICA7OyAuLi4gdGhlbiBjb250aW51 ZSB3aXRoIHRoaXMgb25lLgoJCSAgICAgICApCgoJCSAgICAgIDs7IC4uLiBlbHNlIG5pbCBpZiB3 ZSd2ZSBhc2NlbmRlZCBiYWNrIHRvIHByZXYtZGVwdGguCgoJCSAgICAgICkpKQoKICAgIChpZiBv cmlnaW5hbAkJCTsgV2UncmUgYXQgdGhlIGxhc3Qgc2libGluZyBvbgoJCQkJCTsgdGhlIG9yaWdp bmFsIGxldmVsLiAgUG9zaXRpb24KCQkJCQk7IHRvIHRoZSBlbmQgb2YgaXQ6CgkocHJvZ24gKGFu ZCAobm90IChlb2JwKSkgKGZvcndhcmQtY2hhciAtMSkpCgkgICAgICAgKGFuZCAoPSAocHJlY2Vk aW5nLWNoYXIpID9cbikKCQkgICAgKD0gKGFyZWYgKGJ1ZmZlci1zdWJzdHJpbmcgKG1heCAxICgt IChwb2ludCkgMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKQogICAgICAgICAgICAg ICAgICAgICAgID9cbikKCQkgICAgKGZvcndhcmQtY2hhciAtMSkpCgkgICAgICAgKHNldHEgYWxs b3V0LXJlY2VudC1lbmQtb2Ytc3VidHJlZSAocG9pbnQpKSkpCgogICAgY2hhcnQJCQkJOyAobnJl dmVyc2UgY2hhcnQpIG5vdCBuZWNlc3NhcnksCgkJCQkJOyBhbmQgbWF5YmUgbm90IHByZWZlcmFi bGUuCiAgICApKQo7OztfICAgPiBhbGxvdXQtY2hhcnQtc2libGluZ3MgKCZvcHRpb25hbCBzdGFy dCBlbmQpCihkZWZ1biBhbGxvdXQtY2hhcnQtc2libGluZ3MgKCZvcHRpb25hbCBzdGFydCBlbmQp CiAgIlByb2R1Y2UgYSBsaXN0IG9mIGxvY2F0aW9ucyBvZiB0aGlzIGFuZCBzdWNjZWVkaW5nIHNp YmxpbmcgdG9waWNzLgpFZmZlY3RpdmVseSBhIHRvcC1sZXZlbCBjaGFydCBvZiBzaWJsaW5ncy4g IFNlZSBgYWxsb3V0LWNoYXJ0LXN1YnRyZWUnCmZvciBhbiBleHBsYW5hdGlvbiBvZiBjaGFydHMu IgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHdoZW4gKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVj aGVja2VkKQogICAgICAobGV0ICgoY2hhcnQgKGxpc3QgKHBvaW50KSkpKQogICAgICAgICh3aGls ZSAoYWxsb3V0LW5leHQtc2libGluZykKICAgICAgICAgIChzZXRxIGNoYXJ0IChjb25zIChwb2lu dCkgY2hhcnQpKSkKICAgICAgICAoaWYgY2hhcnQgKHNldHEgY2hhcnQgKG5yZXZlcnNlIGNoYXJ0 KSkpKSkpKQo7OztfICAgPiBhbGxvdXQtY2hhcnQtdG8tcmV2ZWFsIChjaGFydCBkZXB0aCkKKGRl ZnVuIGFsbG91dC1jaGFydC10by1yZXZlYWwgKGNoYXJ0IGRlcHRoKQoKICAiUmV0dXJuIGEgZmxh dCBsaXN0IG9mIGhpZGRlbiBwb2ludHMgaW4gc3VidHJlZSBDSEFSVCwgdXAgdG8gREVQVEguCgpJ ZiBERVBUSCBpcyBuaWwsIGluY2x1ZGUgaGlkZGVuIHBvaW50cyBhdCBhbnkgZGVwdGguCgpOb3Rl IHRoYXQgcG9pbnQgY2FuIGJlIGxlZnQgYXQgYW55IG9mIHRoZSBwb2ludHMgb24gY2hhcnQsIG9y IGF0IHRoZQpzdGFydCBwb2ludC4iCgogIChsZXQgKHJlc3VsdCBoZXJlKQogICAgKHdoaWxlIChh bmQgKG9yIChudWxsIGRlcHRoKSAoPiBkZXB0aCAwKSkKCQljaGFydCkKICAgICAgKHNldHEgaGVy ZSAoY2FyIGNoYXJ0KSkKICAgICAgKGlmIChsaXN0cCBoZXJlKQoJICAobGV0ICgoZnVydGhlciAo YWxsb3V0LWNoYXJ0LXRvLXJldmVhbCBoZXJlIChpZiAobnVsbCBkZXB0aCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtIGRl cHRoKSkpKSkKCSAgICA7OyBXZSdyZSBvbiB0aGUgc3RhcnQgb2YgYSBzdWJ0cmVlIC0gcmVjdXJz ZSB3aXRoIGl0LCBpZiB0aGVyZSdzCgkgICAgOzsgbW9yZSBkZXB0aCB0byBnbzoKCSAgICAoaWYg ZnVydGhlciAoc2V0cSByZXN1bHQgKGFwcGVuZCBmdXJ0aGVyIHJlc3VsdCkpKQoJICAgIChzZXRx IGNoYXJ0IChjZHIgY2hhcnQpKSkKCShnb3RvLWNoYXIgaGVyZSkKICAgICAgICAoaWYgKGFsbG91 dC1oaWRkZW4tcCkKCSAgICAoc2V0cSByZXN1bHQgKGNvbnMgaGVyZSByZXN1bHQpKSkKCShzZXRx IGNoYXJ0IChjZHIgY2hhcnQpKSkpCiAgICByZXN1bHQpKQo7OztfICAgWCBhbGxvdXQtY2hhcnQt c3BlYyAoY2hhcnQgc3BlYyAmb3B0aW9uYWwgZXhwb3NpbmcpCjs7IChkZWZ1biBhbGxvdXQtY2hh cnQtc3BlYyAoY2hhcnQgc3BlYyAmb3B0aW9uYWwgZXhwb3NpbmcpCjs7ICAgIk5vdCB5ZXQgXChp ZiBldmVyKSBpbXBsZW1lbnRlZC4KCjs7IFByb2R1Y2UgZXhwb3N1cmUgZGlyZWN0aXZlcyBnaXZl biB0b3BpYy9zdWJ0cmVlIENIQVJUIGFuZCBhbiBleHBvc3VyZSBTUEVDLgoKOzsgRXhwb3N1cmUg c3BlYyBpbmRpY2F0ZXMgdGhlIGxvY2F0aW9ucyB0byBiZSBleHBvc2VkIGFuZCB0aGUgcHJlc2Ny aWJlZAo7OyBleHBvc3VyZSBzdGF0dXMuICBPcHRpb25hbCBhcmcgRVhQT1NJTkcgaXMgYW4gaW50 ZWdlciwgd2l0aCAwCjs7IGluZGljYXRpbmcgcGVuZGluZyBjb25jZWFsbWVudCwgYW55dGhpbmcg aGlnaGVyIGluZGljYXRpbmcgZGVwdGggdG8KOzsgd2hpY2ggc3VidG9waWMgaGVhZGVycyBzaG91 bGQgYmUgZXhwb3NlZCwgYW5kIG5lZ2F0aXZlIG51bWJlcnMKOzsgaW5kaWNhdGluZyAobmVnYXRp dmUgb2YpIHRoZSBkZXB0aCB0byB3aGljaCBzdWJ0b3BpYyBoZWFkZXJzIGFuZAo7OyBib2RpZXMg c2hvdWxkIGJlIGV4cG9zZWQuCgo7OyBUaGUgcHJvZHVjZWQgbGlzdCBjYW4gaGF2ZSB0d28gdHlw ZXMgb2YgZW50cmllcy4gIEJhcmUgbnVtYmVycwo7OyBpbmRpY2F0ZSBwb2ludHMgaW4gdGhlIGJ1 ZmZlciB3aGVyZSB0b3BpYyBoZWFkZXJzIHRoYXQgc2hvdWxkIGJlCjs7IGV4cG9zZWQgcmVzaWRl LgoKOzsgIC0gYmFyZSBuZWdhdGl2ZSBudW1iZXJzIGluZGljYXRlcyB0aGF0IHRoZSB0b3BpYyBz dGFydGluZyBhdCB0aGUKOzsgICAgcG9pbnQgd2hpY2ggaXMgdGhlIG5lZ2F0aXZlIG9mIHRoZSBu dW1iZXIgc2hvdWxkIGJlIG9wZW5lZCwKOzsgICAgaW5jbHVkaW5nIHRoZWlyIGVudHJpZXMuCjs7 ICAtIGJhcmUgcG9zaXRpdmUgdmFsdWVzIGluZGljYXRlIHRoYXQgdGhpcyB0b3BpYyBoZWFkZXIg c2hvdWxkIGJlCjs7ICAgIG9wZW5lZC4KOzsgIC0gTGlzdHMgc2lnbmlmeSB0aGUgYmVnaW5uaW5n IGFuZCBlbmQgcG9pbnRzIG9mIHJlZ2lvbnMgdGhhdCBzaG91bGQKOzsgICAgYmUgZmxhZ2dlZCwg YW5kIHRoZSBmbGFnIHRvIGVtcGxveS4gIChGb3IgY29uY2VhbG1lbnQ6IGBcKFw/clwpJywgYW5k Cjs7ICAgIGV4cG9zdXJlOiIKOzsgICAod2hpbGUgc3BlYwo7OyAgICAgKGNvbmQgKChsaXN0cCBz cGVjKQo7OyAJICAgKQo7OyAJICApCjs7ICAgICAoc2V0cSBzcGVjIChjZHIgc3BlYykpKQo7OyAg ICkKCjs7O18gIC0gV2l0aGluIFRvcGljCjs7O18gICA+IGFsbG91dC1nb3RvLXByZWZpeCAoKQoo ZGVmdW4gYWxsb3V0LWdvdG8tcHJlZml4ICgpCiAgIlB1dCBwb2ludCBhdCBiZWdpbm5pbmcgb2Yg aW1tZWRpYXRlbHkgY29udGFpbmluZyBvdXRsaW5lIHRvcGljLgoKR29lcyB0byBtb3N0IGltbWVk aWF0ZSBzdWJzZXF1ZW50IHRvcGljIGlmIG5vbmUgaW1tZWRpYXRlbHkgY29udGFpbmluZy4KCk5v dCBzZW5zaXRpdmUgdG8gdG9waWMgdmlzaWJpbGl0eS4KClJldHVybnMgdGhlIHBvaW50IGF0IHRo ZSBiZWdpbm5pbmcgb2YgdGhlIHByZWZpeCwgb3IgbmlsIGlmIG5vbmUuIgoKICAobGV0IChkb25l KQogICAgKHdoaWxlIChhbmQgKG5vdCBkb25lKQoJCShzZWFyY2gtYmFja3dhcmQgIlxuIiBuaWwg MSkpCiAgICAgIChmb3J3YXJkLWNoYXIgMSkKICAgICAgKGlmIChsb29raW5nLWF0IGFsbG91dC1y ZWdleHApCgkgIChzZXRxIGRvbmUgKGFsbG91dC1wcmVmaXgtZGF0YSkpCgkoZm9yd2FyZC1jaGFy IC0xKSkpCiAgICAoaWYgKGJvYnApCgkoY29uZCAoKGxvb2tpbmctYXQgYWxsb3V0LXJlZ2V4cCkK CSAgICAgICAoYWxsb3V0LXByZWZpeC1kYXRhKSkKCSAgICAgICgoYWxsb3V0LW5leHQtaGVhZGlu ZykpCgkgICAgICAoZG9uZSkpCiAgICAgIGRvbmUpKSkKOzs7XyAgID4gYWxsb3V0LWdvdG8tcHJl Zml4LWRvdWJsZWNoZWNrZWQgKCkKKGRlZnVuIGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVj a2VkICgpCiAgIlB1dCBwb2ludCBhdCBiZWdpbm5pbmcgb2YgaW1tZWRpYXRlbHkgY29udGFpbmlu ZyBvdXRsaW5lIHRvcGljLgoKTGlrZSBgYWxsb3V0LWdvdG8tcHJlZml4JywgYnV0IHNoYWxsb3cg dG9waWNzIFwoYWNjb3JkaW5nIHRvCmBhbGxvdXQtZG91YmxlY2hlY2stYXQtYW5kLXNoYWxsb3dl cicpIGFyZSBjaGVja2VkIGFuZApkaXNxdWFsaWZpZWQgZm9yIGNoaWxkIGNvbnRhaW5tZW50IGRp c2NvbnRpbnVpdHksIGFjY29yZGluZyB0bwpgYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wJy4i CiAgKGlmIChhbGxvdXQtZ290by1wcmVmaXgpCiAgICAgIChpZiAoYW5kIChhbGxvdXQtZG8tZG91 YmxlY2hlY2spCiAgICAgICAgICAgICAgIChhbGxvdXQtYWJlcnJhbnQtY29udGFpbmVyLXApKQog ICAgICAgICAgKGFsbG91dC1wcmV2aW91cy1oZWFkaW5nKQogICAgICAgIChwb2ludCkpKSkKCjs7 O18gICA+IGFsbG91dC1lbmQtb2YtcHJlZml4ICgpCihkZWZ1biBhbGxvdXQtZW5kLW9mLXByZWZp eCAoJm9wdGlvbmFsIGlnbm9yZS1kZWNvcmF0aW9ucykKICAiUG9zaXRpb24gY3Vyc29yIGF0IGJl Z2lubmluZyBvZiBoZWFkZXIgdGV4dC4KCklmIG9wdGlvbmFsIElHTk9SRS1ERUNPUkFUSU9OUyBp cyBub24tbmlsLCBwdXQganVzdCBhZnRlciBidWxsZXQsCm90aGVyd2lzZSBza2lwIHdoaXRlIHNw YWNlIGJldHdlZW4gYnVsbGV0IGFuZCBlbnN1aW5nIHRleHQuIgoKICAoaWYgKG5vdCAoYWxsb3V0 LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpKQogICAgICBuaWwKICAgIChnb3RvLWNoYXIgYWxs b3V0LXJlY2VudC1wcmVmaXgtZW5kKQogICAgKGlmIGlnbm9yZS1kZWNvcmF0aW9ucwogICAgICAg IHQKICAgICAgKHdoaWxlIChsb29raW5nLWF0ICJbMC05XSIpIChmb3J3YXJkLWNoYXIgMSkpCiAg ICAgIChpZiAoYW5kIChub3QgKGVvbHApKSAobG9va2luZy1hdCAiXFxzLSIpKSAoZm9yd2FyZC1j aGFyIDEpKSkKICAgIDs7IFJlZXN0YWJsaXNoIHdoZXJlIHdlIGFyZToKICAgIChhbGxvdXQtY3Vy cmVudC1kZXB0aCkpKQo7OztfICAgPiBhbGxvdXQtY3VycmVudC1idWxsZXQtcG9zICgpCihkZWZ1 biBhbGxvdXQtY3VycmVudC1idWxsZXQtcG9zICgpCiAgIlJldHVybiBwb3NpdGlvbiBvZiBjdXJy ZW50IFwodmlzaWJsZSkgdG9waWMncyBidWxsZXQuIgoKICAoaWYgKG5vdCAoYWxsb3V0LWN1cnJl bnQtZGVwdGgpKQogICAgICBuaWwKICAgICgxLSBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQpKSkK Ozs7XyAgID4gYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nICgpCihkZWZ1biBhbGxvdXQt YmFjay10by1jdXJyZW50LWhlYWRpbmcgKCkKICAiTW92ZSB0byBoZWFkaW5nIGxpbmUgb2YgY3Vy cmVudCB0b3BpYywgb3IgYmVnaW5uaW5nIGlmIG5vdCBpbiBhIHRvcGljLgoKSWYgaW50ZXJhY3Rp dmUsIHdlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHByZWZpeC4KClJldHVybiB2YWx1ZSBv ZiByZXN1bHRpbmcgcG9pbnQsIHVubGVzcyB3ZSBzdGFydGVkIG91dHNpZGUKb2YgKGJlZm9yZSBh bnkpIHRvcGljcywgaW4gd2hpY2ggY2FzZSB3ZSByZXR1cm4gbmlsLiIKCiAgKGFsbG91dC1iZWdp bm5pbmctb2YtY3VycmVudC1saW5lKQogIChsZXQgKChib2wtcG9pbnQgKHBvaW50KSkpCiAgICAo aWYgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKQogICAgICAgIChpZiAoPD0gKHBv aW50KSBib2wtcG9pbnQpCiAgICAgICAgICAgIChpZiAoaW50ZXJhY3RpdmUtcCkKICAgICAgICAg ICAgICAgIChhbGxvdXQtZW5kLW9mLXByZWZpeCkKICAgICAgICAgICAgICAocG9pbnQpKQogICAg ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAgIG5pbCkpKSkKOzs7XyAgID4g YWxsb3V0LWJhY2stdG8taGVhZGluZyAoKQooZGVmYWxpYXMgJ2FsbG91dC1iYWNrLXRvLWhlYWRp bmcgJ2FsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKOzs7XyAgID4gYWxsb3V0LXByZS1u ZXh0LXByZWZpeCAoKQooZGVmdW4gYWxsb3V0LXByZS1uZXh0LXByZWZpeCAoKQogICJTa2lwIGZv cndhcmQgdG8ganVzdCBiZWZvcmUgdGhlIG5leHQgaGVhZGluZyBsaW5lLgoKUmV0dXJucyB0aGF0 IGNoYXJhY3RlciBwb3NpdGlvbi4iCgogIChpZiAoYWxsb3V0LW5leHQtaGVhZGluZykKICAgICAg KGdvdG8tY2hhciAoMS0gYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKSkpKQo7OztfICAg PiBhbGxvdXQtZW5kLW9mLXN1YnRyZWUgKCZvcHRpb25hbCBjdXJyZW50IGluY2x1ZGUtdHJhaWxp bmctYmxhbmspCihkZWZ1biBhbGxvdXQtZW5kLW9mLXN1YnRyZWUgKCZvcHRpb25hbCBjdXJyZW50 IGluY2x1ZGUtdHJhaWxpbmctYmxhbmspCiAgIlB1dCBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZSBs YXN0IGxlYWYgaW4gdGhlIGNvbnRhaW5pbmcgdG9waWMuCgpPcHRpb25hbCBDVVJSRU5UIG1lYW5z IHB1dCBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZSBjb250YWluaW5nCnZpc2libGUgdG9waWMuCgpP cHRpb25hbCBJTkNMVURFLVRSQUlMSU5HLUJMQU5LIG1lYW5zIGluY2x1ZGUgYSB0cmFpbGluZyBi bGFuayBsaW5lLCBpZgphbnksIGFzIHBhcnQgb2YgdGhlIHN1YnRyZWUuICBPdGhlcndpc2UsIHRo YXQgdHJhaWxpbmcgYmxhbmsgd2lsbCBiZQpleGNsdWRlZCBhcyBkZWxpbWl0aW5nIHdoaXRlc3Bh Y2UgYmV0d2VlbiB0b3BpY3MuCgpSZXR1cm5zIHRoZSB2YWx1ZSBvZiBwb2ludC4iCiAgKGludGVy YWN0aXZlICJQIikKICAoaWYgY3VycmVudAogICAgICAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1o ZWFkaW5nKQogICAgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKSkKICAobGV0ICgo bGV2ZWwgYWxsb3V0LXJlY2VudC1kZXB0aCkpCiAgICAoYWxsb3V0LW5leHQtaGVhZGluZykKICAg ICh3aGlsZSAoYW5kIChub3QgKGVvYnApKQogICAgICAgICAgICAgICAgKD4gYWxsb3V0LXJlY2Vu dC1kZXB0aCBsZXZlbCkpCiAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKSkKICAgIChpZiAoZW9i cCkKICAgICAgICAoYWxsb3V0LWVuZC1vZi1lbnRyeSkKICAgICAgKGZvcndhcmQtY2hhciAtMSkp CiAgICAoaWYgKGFuZCAobm90IGluY2x1ZGUtdHJhaWxpbmctYmxhbmspICg9ID9cbiAocHJlY2Vk aW5nLWNoYXIpKSkKICAgICAgICAgKGZvcndhcmQtY2hhciAtMSkpCiAgICAoc2V0cSBhbGxvdXQt cmVjZW50LWVuZC1vZi1zdWJ0cmVlIChwb2ludCkpKSkKOzs7XyAgID4gYWxsb3V0LWVuZC1vZi1j dXJyZW50LXN1YnRyZWUgKCZvcHRpb25hbCBpbmNsdWRlLXRyYWlsaW5nLWJsYW5rKQooZGVmdW4g YWxsb3V0LWVuZC1vZi1jdXJyZW50LXN1YnRyZWUgKCZvcHRpb25hbCBpbmNsdWRlLXRyYWlsaW5n LWJsYW5rKQoKICAiUHV0IHBvaW50IGF0IGVuZCBvZiBsYXN0IGxlYWYgaW4gY3VycmVudGx5IHZp c2libGUgY29udGFpbmluZyB0b3BpYy4KCk9wdGlvbmFsIElOQ0xVREUtVFJBSUxJTkctQkxBTksg bWVhbnMgaW5jbHVkZSBhIHRyYWlsaW5nIGJsYW5rIGxpbmUsIGlmCmFueSwgYXMgcGFydCBvZiB0 aGUgc3VidHJlZS4gIE90aGVyd2lzZSwgdGhhdCB0cmFpbGluZyBibGFuayB3aWxsIGJlCmV4Y2x1 ZGVkIGFzIGRlbGltaXRpbmcgd2hpdGVzcGFjZSBiZXR3ZWVuIHRvcGljcy4KClJldHVybnMgdGhl IHZhbHVlIG9mIHBvaW50LiIKICAoaW50ZXJhY3RpdmUpCiAgKGFsbG91dC1lbmQtb2Ytc3VidHJl ZSB0IGluY2x1ZGUtdHJhaWxpbmctYmxhbmspKQo7OztfICAgPiBhbGxvdXQtYmVnaW5uaW5nLW9m LWN1cnJlbnQtZW50cnkgKCkKKGRlZnVuIGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1lbnRy eSAoKQogICJXaGVuIG5vdCBhbHJlYWR5IHRoZXJlLCBwb3NpdGlvbiBwb2ludCBhdCBiZWdpbm5p bmcgb2YgY3VycmVudCB0b3BpYyBoZWFkZXIuCgpJZiBhbHJlYWR5IHRoZXJlLCBtb3ZlIGN1cnNv ciB0byBidWxsZXQgZm9yIGhvdC1zcG90IG9wZXJhdGlvbi4KXChTZWUgYGFsbG91dC1tb2RlJyBk b2Mgc3RyaW5nIGZvciBkZXRhaWxzIG9mIGhvdC1zcG90IG9wZXJhdGlvbi4pIgogIChpbnRlcmFj dGl2ZSkKICAobGV0ICgoc3RhcnQtcG9pbnQgKHBvaW50KSkpCiAgICAobW92ZS1iZWdpbm5pbmct b2YtbGluZSAxKQogICAgKGlmICg8IDAgKGFsbG91dC1jdXJyZW50LWRlcHRoKSkKICAgICAgICAo Z290by1jaGFyIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCkKICAgICAgKGdvdG8tY2hhciAocG9p bnQtbWluKSkpCiAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpCiAgICAoaWYgKGFuZCAoaW50ZXJh Y3RpdmUtcCkKCSAgICAgKD0gKHBvaW50KSBzdGFydC1wb2ludCkpCgkoZ290by1jaGFyIChhbGxv dXQtY3VycmVudC1idWxsZXQtcG9zKSkpKSkKOzs7XyAgID4gYWxsb3V0LWVuZC1vZi1lbnRyeSAo Jm9wdGlvbmFsIGluY2x1c2l2ZSkKKGRlZnVuIGFsbG91dC1lbmQtb2YtZW50cnkgKCZvcHRpb25h bCBpbmNsdXNpdmUpCiAgIlBvc2l0aW9uIHRoZSBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJy ZW50IHRvcGljcycgZW50cnkuCgpPcHRpb25hbCBJTkNMVVNJVkUgbWVhbnMgYWxzbyBpbmNsdWRl IHRyYWlsaW5nIGVtcHR5IGxpbmUsIGlmIGFueS4gIFdoZW4KdW5zZXQsIHdoaXRlc3BhY2UgYmV0 d2VlbiBpdGVtcyBzZXBhcmF0ZXMgdGhlbSBldmVuIHdoZW4gdGhlIGl0ZW1zIGFyZQpjb2xsYXBz ZWQuIgogIChpbnRlcmFjdGl2ZSkKICAoYWxsb3V0LXByZS1uZXh0LXByZWZpeCkKICAoaWYgKGFu ZCAobm90IGluY2x1c2l2ZSkgKG5vdCAoYm9icCkpICg9ID9cbiAocHJlY2VkaW5nLWNoYXIpKSkK ICAgICAgKGZvcndhcmQtY2hhciAtMSkpCiAgKHBvaW50KSkKOzs7XyAgID4gYWxsb3V0LWVuZC1v Zi1jdXJyZW50LWhlYWRpbmcgKCkKKGRlZnVuIGFsbG91dC1lbmQtb2YtY3VycmVudC1oZWFkaW5n ICgpCiAgKGludGVyYWN0aXZlKQogIChhbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnkp CiAgKHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpCiAgKGZvcndhcmQtY2hhciAtMSkpCihkZWZh bGlhcyAnYWxsb3V0LWVuZC1vZi1oZWFkaW5nICdhbGxvdXQtZW5kLW9mLWN1cnJlbnQtaGVhZGlu ZykKOzs7XyAgID4gYWxsb3V0LWdldC1ib2R5LXRleHQgKCkKKGRlZnVuIGFsbG91dC1nZXQtYm9k eS10ZXh0ICgpCiAgIlJldHVybiB0aGUgdW5tYW5nbGVkIGJvZHkgdGV4dCBvZiB0aGUgdG9waWMg aW1tZWRpYXRlbHkgY29udGFpbmluZyBwb2ludC4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoYWxs b3V0LWVuZC1vZi1wcmVmaXgpCiAgICAoaWYgKG5vdCAoc2VhcmNoLWZvcndhcmQgIlxuIiBuaWwg dCkpCiAgICAgICAgbmlsCiAgICAgIChiYWNrd2FyZC1jaGFyIDEpCiAgICAgIChsZXQgKChwcmUt Ym9keSAocG9pbnQpKSkKICAgICAgICAoaWYgKG5vdCBwcmUtYm9keSkKICAgICAgICAgICAgbmls CiAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1lbnRyeSB0KQogICAgICAgICAgKGlmIChub3QgKD0g cHJlLWJvZHkgKHBvaW50KSkpCiAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJv cGVydGllcyAoMSsgcHJlLWJvZHkpIChwb2ludCkpKSkKICAgICAgICApCiAgICAgICkKICAgICkK ICApCgo7OztfICAtIERlcHRoLXdpc2UKOzs7XyAgID4gYWxsb3V0LWFzY2VuZC10by1kZXB0aCAo ZGVwdGgpCihkZWZ1biBhbGxvdXQtYXNjZW5kLXRvLWRlcHRoIChkZXB0aCkKICAiQXNjZW5kIHRv IGRlcHRoIERFUFRILCByZXR1cm5pbmcgZGVwdGggaWYgc3VjY2Vzc2Z1bCwgbmlsIGlmIG5vdC4i CiAgKGlmIChhbmQgKD4gZGVwdGggMCkoPD0gZGVwdGggKGFsbG91dC1kZXB0aCkpKQogICAgICAo bGV0IChsYXN0LWFzY2VuZGVkKQogICAgICAgICh3aGlsZSAoYW5kICg8IGRlcHRoIGFsbG91dC1y ZWNlbnQtZGVwdGgpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgbGFzdC1hc2NlbmRlZCAoYWxs b3V0LWFzY2VuZCkpKSkKICAgICAgICAoZ290by1jaGFyIGFsbG91dC1yZWNlbnQtcHJlZml4LWJl Z2lubmluZykKICAgICAgICAoaWYgKGludGVyYWN0aXZlLXApIChhbGxvdXQtZW5kLW9mLXByZWZp eCkpCiAgICAgICAgKGFuZCBsYXN0LWFzY2VuZGVkIGFsbG91dC1yZWNlbnQtZGVwdGgpKSkpCjs7 O18gICA+IGFsbG91dC1hc2NlbmQgKCkKKGRlZnVuIGFsbG91dC1hc2NlbmQgKCkKICAiQXNjZW5k IG9uZSBsZXZlbCwgcmV0dXJuaW5nIHQgaWYgc3VjY2Vzc2Z1bCwgbmlsIGlmIG5vdC4iCiAgKHBy b2cxCiAgICAgIChpZiAoYWxsb3V0LWJlZ2lubmluZy1vZi1sZXZlbCkKICAgICAgICAgIChsZXQg KChib2xldmVsIChwb2ludCkpCiAgICAgICAgICAgICAgICAoYm9sZXZlbC1kZXB0aCBhbGxvdXQt cmVjZW50LWRlcHRoKSkKICAgICAgICAgICAgKGFsbG91dC1wcmV2aW91cy1oZWFkaW5nKQogICAg ICAgICAgICAoaWYgKDwgYWxsb3V0LXJlY2VudC1kZXB0aCBib2xldmVsLWRlcHRoKQogICAgICAg ICAgICAgICAgYWxsb3V0LXJlY2VudC1kZXB0aAogICAgICAgICAgICAgIDs7IHNvbWUgdG9waWMg YWZ0ZXIgZmlsZSdzIGZpcnN0IGlzIGF0IGxvd2VyIGRlcHRoIHRoYW4gZmlyc3Q6CiAgICAgICAg ICAgICAgKGdvdG8tY2hhciBib2xldmVsKQogICAgICAgICAgICAgIChhbGxvdXQtZGVwdGgpCiAg ICAgICAgICAgICAgbmlsKSkpCiAgICAoaWYgKGludGVyYWN0aXZlLXApIChhbGxvdXQtZW5kLW9m LXByZWZpeCkpKSkKOzs7XyAgID4gYWxsb3V0LWRlc2NlbmQtdG8tZGVwdGggKGRlcHRoKQooZGVm dW4gYWxsb3V0LWRlc2NlbmQtdG8tZGVwdGggKGRlcHRoKQogICJEZXNjZW5kIHRvIGRlcHRoIERF UFRIIHdpdGhpbiBjdXJyZW50IHRvcGljLgoKUmV0dXJuaW5nIGRlcHRoIGlmIHN1Y2Nlc3NmdWws IG5pbCBpZiBub3QuIgogIChsZXQgKChzdGFydC1wb2ludCAocG9pbnQpKQogICAgICAgIChzdGFy dC1kZXB0aCAoYWxsb3V0LWRlcHRoKSkpCiAgICAod2hpbGUKICAgICAgICAoYW5kICg+IChhbGxv dXQtZGVwdGgpIDApCiAgICAgICAgICAgICAobm90ICg9IGRlcHRoIGFsbG91dC1yZWNlbnQtZGVw dGgpKSA7IC4uLiBub3QgdGhlcmUgeWV0CiAgICAgICAgICAgICAoYWxsb3V0LW5leHQtaGVhZGlu ZykgICAgIDsgLi4uIGdvIGZ1cnRoZXIKICAgICAgICAgICAgICg8IHN0YXJ0LWRlcHRoIGFsbG91 dC1yZWNlbnQtZGVwdGgpKSkgOyAuLi4gc3RpbGwgaW4gdG9waWMKICAgIChpZiAoYW5kICg+IChh bGxvdXQtZGVwdGgpIDApCiAgICAgICAgICAgICAoPSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRo KSkKICAgICAgICBkZXB0aAogICAgICAoZ290by1jaGFyIHN0YXJ0LXBvaW50KQogICAgICBuaWwp KQogICkKOzs7XyAgID4gYWxsb3V0LXVwLWN1cnJlbnQtbGV2ZWwgKGFyZykKKGRlZnVuIGFsbG91 dC11cC1jdXJyZW50LWxldmVsIChhcmcpCiAgIk1vdmUgb3V0IEFSRyBsZXZlbHMgZnJvbSBjdXJy ZW50IHZpc2libGUgdG9waWMuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKGxldCAoKHN0YXJ0LXBv aW50IChwb2ludCkpKQogICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgIChp ZiAobm90IChhbGxvdXQtYXNjZW5kKSkKICAgICAgICAocHJvZ24gKGdvdG8tY2hhciBzdGFydC1w b2ludCkKICAgICAgICAgICAgICAgKGVycm9yICJDYW4ndCBhc2NlbmQgcGFzdCBvdXRlcm1vc3Qg bGV2ZWwiKSkKICAgICAgKGlmIChpbnRlcmFjdGl2ZS1wKSAoYWxsb3V0LWVuZC1vZi1wcmVmaXgp KQogICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcpKSkKCjs7O18gIC0gTGluZWFy Cjs7O18gICA+IGFsbG91dC1uZXh0LXNpYmxpbmcgKCZvcHRpb25hbCBkZXB0aCBiYWNrd2FyZCkK KGRlZnVuIGFsbG91dC1uZXh0LXNpYmxpbmcgKCZvcHRpb25hbCBkZXB0aCBiYWNrd2FyZCkKICAi TGlrZSBgYWxsb3V0LWZvcndhcmQtY3VycmVudC1sZXZlbCcsIGJ1dCByZXNwZWN0cyBpbnZpc2li bGUgdG9waWNzLgoKVHJhdmVyc2UgYXQgb3B0aW9uYWwgREVQVEgsIG9yIGN1cnJlbnQgZGVwdGgg aWYgbm9uZSBzcGVjaWZpZWQuCgpHbyBiYWNrd2FyZCBpZiBvcHRpb25hbCBhcmcgQkFDS1dBUkQg aXMgbm9uLW5pbC4KClJldHVybiB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIG5ldyB0b3BpYyBpZiBz dWNjZXNzZnVsLCBuaWwgb3RoZXJ3aXNlLiIKCiAgKGlmIChpZiBiYWNrd2FyZCAoYm9icCkgKGVv YnApKQogICAgICBuaWwKICAgIChsZXQgKCh0YXJnZXQtZGVwdGggKG9yIGRlcHRoIChhbGxvdXQt ZGVwdGgpKSkKICAgICAgICAgIChzdGFydC1wb2ludCAocG9pbnQpKQogICAgICAgICAgKHN0YXJ0 LXByZWZpeC1iZWdpbm5pbmcgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQogICAgICAg ICAgKGNvdW50IDApCiAgICAgICAgICBsZWFwaW5nCgkgIGxhc3QtZGVwdGgpCiAgICAgICh3aGls ZSAoYW5kCiAgICAgICAgICAgICAgOzsgZG9uZSB0b28gZmV3IHNpbmdsZSBzdGVwcyB0byByZXNv cnQgdG8gdGhlIGxlYXAgcm91dGluZToKICAgICAgICAgICAgICAobm90IGxlYXBpbmcpCiAgICAg ICAgICAgICAgOzsgbm90IGF0IGxpbWl0OgogICAgICAgICAgICAgIChub3QgKGlmIGJhY2t3YXJk IChib2JwKSAoZW9icCkpKQogICAgICAgICAgICAgIDs7IHN0aWxsIHRyYXZlcnNhYmxlOgogICAg ICAgICAgICAgIChpZiBiYWNrd2FyZCAoYWxsb3V0LXByZXZpb3VzLWhlYWRpbmcpIChhbGxvdXQt bmV4dC1oZWFkaW5nKSkKICAgICAgICAgICAgICA7OyB3ZSdyZSBiZWxvdyB0aGUgdGFyZ2V0IGRl cHRoCiAgICAgICAgICAgICAgKD4gKHNldHEgbGFzdC1kZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRo KSB0YXJnZXQtZGVwdGgpKQogICAgICAgIChzZXRxIGNvdW50ICgxKyBjb3VudCkpCiAgICAgICAg KGlmICg+IGNvdW50IDcpICAgICAgICAgICAgICAgICA7IGxpc3RzIGFyZSBjb21tb25seSA3ICst IDIsIHJpZ2h0Py0pCiAgICAgICAgICAgIChzZXRxIGxlYXBpbmcgdCkpKQogICAgICAoY29uZCAo bGVhcGluZwogICAgICAgICAgICAgKG9yIChhbGxvdXQtbmV4dC1zaWJsaW5nLWxlYXAgdGFyZ2V0 LWRlcHRoIGJhY2t3YXJkKQogICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAg ICAgKGdvdG8tY2hhciBzdGFydC1wb2ludCkKICAgICAgICAgICAgICAgICAgIChpZiBkZXB0aCAo YWxsb3V0LWRlcHRoKSB0YXJnZXQtZGVwdGgpCiAgICAgICAgICAgICAgICAgICBuaWwpKSkKICAg ICAgICAgICAgKChhbmQgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgICAgIChhbmQgKD4gKG9y IGxhc3QtZGVwdGggKGFsbG91dC1kZXB0aCkpIDApCiAgICAgICAgICAgICAgICAgICAgICAgKD0g YWxsb3V0LXJlY2VudC1kZXB0aCB0YXJnZXQtZGVwdGgpKQogICAgICAgICAgICAgICAgICAobm90 ICg9IHN0YXJ0LXByZWZpeC1iZWdpbm5pbmcKICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxv dXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcpKSkKICAgICAgICAgICAgIGFsbG91dC1yZWNlbnQt cHJlZml4LWJlZ2lubmluZykKICAgICAgICAgICAgKHQKICAgICAgICAgICAgIChnb3RvLWNoYXIg c3RhcnQtcG9pbnQpCiAgICAgICAgICAgICAoaWYgZGVwdGggKGFsbG91dC1kZXB0aCkgdGFyZ2V0 LWRlcHRoKQogICAgICAgICAgICAgbmlsKSkpKSkKOzs7XyAgID4gYWxsb3V0LW5leHQtc2libGlu Zy1sZWFwICgmb3B0aW9uYWwgZGVwdGggYmFja3dhcmQpCihkZWZ1biBhbGxvdXQtbmV4dC1zaWJs aW5nLWxlYXAgKCZvcHRpb25hbCBkZXB0aCBiYWNrd2FyZCkKICAiTGlrZSBgYWxsb3V0LW5leHQt c2libGluZycsIGJ1dCBieSBkaXJlY3Qgc2VhcmNoIGZvciB0b3BpYyBhdCBkZXB0aC4KClRyYXZl cnNlIGF0IG9wdGlvbmFsIERFUFRILCBvciBjdXJyZW50IGRlcHRoIGlmIG5vbmUgc3BlY2lmaWVk LgoKR28gYmFja3dhcmQgaWYgb3B0aW9uYWwgYXJnIEJBQ0tXQVJEIGlzIG5vbi1uaWwuCgpSZXR1 cm4gdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBuZXcgdG9waWMgaWYgc3VjY2Vzc2Z1bCwgbmlsIG90 aGVyd2lzZS4KCkNvc3RzIG1vcmUgdGhhbiByZWd1bGFyIGBhbGxvdXQtbmV4dC1zaWJsaW5nJyBm b3Igc2hvcnQgdHJhdmVyc2FsczoKCiAtIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHByaW9yIFwobmV4 dCwgaWYgdHJhdmVsbGluZyBiYWNrd2FyZHMpCiAgIGl0ZW0gdG8gY29uZmlybSBjb25uZWN0aXZp dHkgd2l0aCB0aGUgcHJpb3IgdG9waWMsIGFuZAogLSBpZiBjb25maXJtZWQsIHdlIGhhdmUgdG8g cmVlc3RhYmxpc2ggdGhlIGFsbG91dC1yZWNlbnQtKiBzZXR0aW5ncyB3aXRoCiAgIHNvbWUgZXh0 cmEgbmF2aWdhdGlvbgogLSBpZiBjb25maXJtYXRpb24gZmFpbHMsIHdlIGhhdmUgdG8gZG8gbW9y ZSB3b3JrIHRvIHJlY292ZXIKCkl0IGlzIGFuIGluY3JlYXNpbmdseSBiaWcgd2luIHdoZW4gdGhl cmUgYXJlIG1hbnkgaW50ZXJ2ZW5pbmcKb2Zmc3ByaW5nIGJlZm9yZSB0aGUgbmV4dCBzaWJsaW5n LCBob3dldmVyLCBzbwpgYWxsb3V0LW5leHQtc2libGluZycgcmVzb3J0cyB0byB0aGlzIGlmIGl0 IGZpbmRzIGl0c2VsZiBpbiB0aGF0CnNpdHVhdGlvbi4iCgogIChpZiAoaWYgYmFja3dhcmQgKGJv YnApIChlb2JwKSkKICAgICAgbmlsCiAgICAobGV0KiAoKHN0YXJ0LXBvaW50IChwb2ludCkpCiAg ICAgICAgICAgKHRhcmdldC1kZXB0aCAob3IgZGVwdGggKGFsbG91dC1kZXB0aCkpKQogICAgICAg ICAgIChzZWFyY2gtd2hpdGVzcGFjZS1yZWdleHAgbmlsKQogICAgICAgICAgIChkZXB0aC1iaWFz ZWQgKC0gdGFyZ2V0LWRlcHRoIDIpKQogICAgICAgICAgIChleHByZXNzaW9uIChpZiAoPD0gdGFy Z2V0LWRlcHRoIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1kZXB0aC1vbmUt cmVnZXhwCiAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IGFsbG91dC1kZXB0aC1zcGVj aWZpYy1yZWdleHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgtYmlhc2Vk IGRlcHRoLWJpYXNlZCkpKQogICAgICAgICAgIGZvdW5kCiAgICAgICAgICAgZG9uZSkKICAgICAg KHdoaWxlIChub3QgZG9uZSkKICAgICAgICAoc2V0cSBmb3VuZCAoaWYgYmFja3dhcmQKICAgICAg ICAgICAgICAgICAgICAgICAgKHJlLXNlYXJjaC1iYWNrd2FyZCBleHByZXNzaW9uIG5pbCAndG8t bGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpCiAgICAgICAgICAg ICAgICAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgZXhwcmVzc2lvbiBuaWwgJ3RvLWxpbWl0KSkp CiAgICAgICAgKGlmIChhbmQgZm91bmQgKGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCkpCiAg ICAgICAgICAgIChzZXRxIGZvdW5kIG5pbCkpCiAgICAgICAgKHNldHEgZG9uZSAob3IgZm91bmQg KGlmIGJhY2t3YXJkIChib2JwKSAoZW9icCkpKSkpCiAgICAgIChpZiAobm90IGZvdW5kKQogICAg ICAgICAgKHByb2duIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpCiAgICAgICAgICAgICAgICAgbmls KQogICAgICAgIDs7IHJhdGlvbmFsZTogaWYgYW55IGludGVydmVuaW5nIGl0ZW1zIHdlcmUgYXQg YSBsb3dlciBkZXB0aCwgd2UKICAgICAgICA7OyB3b3VsZCBub3cgYmUgb24gdGhlIGZpcnN0IG9m ZnNwcmluZyBhdCB0aGUgdGFyZ2V0IGRlcHRoIC0gaWUsCiAgICAgICAgOzsgdGhlIHByZWNlZWRp bmcgaXRlbSAocGVyIHRoZSBzZWFyY2ggZGlyZWN0aW9uKSBtdXN0IGJlIGF0IGEKICAgICAgICA7 OyBsZXNzZXIgZGVwdGguICB0aGF0J3MgYWxsIHdlIG5lZWQgdG8gY2hlY2suCiAgICAgICAgKGlm IGJhY2t3YXJkIChhbGxvdXQtbmV4dC1oZWFkaW5nKSAoYWxsb3V0LXByZXZpb3VzLWhlYWRpbmcp KQogICAgICAgIChpZiAoPCBhbGxvdXQtcmVjZW50LWRlcHRoIHRhcmdldC1kZXB0aCkKICAgICAg ICAgICAgOzsgcmV0dXJuIHRvIHN0YXJ0IGFuZCByZWVzdGFibGlzaCBhbGxvdXQtcmVjZW50LSo6 CiAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQp CiAgICAgICAgICAgICAgKGFsbG91dC1kZXB0aCkKICAgICAgICAgICAgICBuaWwpCiAgICAgICAg ICAoZ290by1jaGFyIGZvdW5kKQogICAgICAgICAgOzsgbG9jYXRlIGN1cnNvciBhbmQgc2V0IGFs bG91dC1yZWNlbnQtKjoKICAgICAgICAgIChhbGxvdXQtZ290by1wcmVmaXgpKSkpKSkKOzs7XyAg ID4gYWxsb3V0LXByZXZpb3VzLXNpYmxpbmcgKCZvcHRpb25hbCBkZXB0aCBiYWNrd2FyZCkKKGRl ZnVuIGFsbG91dC1wcmV2aW91cy1zaWJsaW5nICgmb3B0aW9uYWwgZGVwdGggYmFja3dhcmQpCiAg Ikxpa2UgYGFsbG91dC1mb3J3YXJkLWN1cnJlbnQtbGV2ZWwnIGJhY2t3YXJkcywgcmVzcGVjdGlu ZyBpbnZpc2libGUgdG9waWNzLgoKT3B0aW9uYWwgREVQVEggc3BlY2lmaWVzIGRlcHRoIHRvIHRy YXZlcnNlLCBkZWZhdWx0IGN1cnJlbnQgZGVwdGguCgpPcHRpb25hbCBCQUNLV0FSRCByZXZlcnNl cyBkaXJlY3Rpb24uCgpSZXR1cm4gZGVwdGggaWYgc3VjY2Vzc2Z1bCwgbmlsIG90aGVyd2lzZS4i CiAgKGFsbG91dC1uZXh0LXNpYmxpbmcgZGVwdGggKG5vdCBiYWNrd2FyZCkpCiAgKQo7OztfICAg PiBhbGxvdXQtc251Zy1iYWNrICgpCihkZWZ1biBhbGxvdXQtc251Zy1iYWNrICgpCiAgIlBvc2l0 aW9uIGN1cnNvciBhdCBlbmQgb2YgcHJldmlvdXMgdG9waWMuCgpQcmVzdW1lcyBwb2ludCBpcyBh dCB0aGUgc3RhcnQgb2YgYSB0b3BpYyBwcmVmaXguIgogKGlmIChvciAoYm9icCkgKGVvYnApKQog ICAgIG5pbAogICAoZm9yd2FyZC1jaGFyIC0xKSkKIChpZiAob3IgKGJvYnApIChub3QgKD0gP1xu IChwcmVjZWRpbmctY2hhcikpKSkKICAgICBuaWwKICAgKGZvcndhcmQtY2hhciAtMSkpCiAocG9p bnQpKQo7OztfICAgPiBhbGxvdXQtYmVnaW5uaW5nLW9mLWxldmVsICgpCihkZWZ1biBhbGxvdXQt YmVnaW5uaW5nLW9mLWxldmVsICgpCiAgIkdvIGJhY2sgdG8gdGhlIGZpcnN0IHNpYmxpbmcgYXQg dGhpcyBsZXZlbCwgdmlzaWJsZSBvciBub3QuIgogIChhbGxvdXQtZW5kLW9mLWxldmVsICdiYWNr d2FyZCkpCjs7O18gICA+IGFsbG91dC1lbmQtb2YtbGV2ZWwgKCZvcHRpb25hbCBiYWNrd2FyZCkK KGRlZnVuIGFsbG91dC1lbmQtb2YtbGV2ZWwgKCZvcHRpb25hbCBiYWNrd2FyZCkKICAiR28gdG8g dGhlIGxhc3Qgc2libGluZyBhdCB0aGlzIGxldmVsLCB2aXNpYmxlIG9yIG5vdC4iCgogIChsZXQg KChkZXB0aCAoYWxsb3V0LWRlcHRoKSkpCiAgICAod2hpbGUgKGFsbG91dC1wcmV2aW91cy1zaWJs aW5nIGRlcHRoIG5pbCkpCiAgICAocHJvZzEgYWxsb3V0LXJlY2VudC1kZXB0aAogICAgICAoaWYg KGludGVyYWN0aXZlLXApIChhbGxvdXQtZW5kLW9mLXByZWZpeCkpKSkpCjs7O18gICA+IGFsbG91 dC1uZXh0LXZpc2libGUtaGVhZGluZyAoYXJnKQooZGVmdW4gYWxsb3V0LW5leHQtdmlzaWJsZS1o ZWFkaW5nIChhcmcpCiAgIk1vdmUgdG8gdGhlIG5leHQgQVJHJ3RoIHZpc2libGUgaGVhZGluZyBs aW5lLCBiYWNrd2FyZCBpZiBhcmcgaXMgbmVnYXRpdmUuCgpNb3ZlIHRvIGJ1ZmZlciBsaW1pdCBp biBpbmRpY2F0ZWQgZGlyZWN0aW9uIGlmIGhlYWRpbmdzIGFyZSBleGhhdXN0ZWQuIgoKICAoaW50 ZXJhY3RpdmUgInAiKQogIChsZXQqICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KQogICAg ICAgICAoYmFja3dhcmQgKGlmICg8IGFyZyAwKSAoc2V0cSBhcmcgKCogLTEgYXJnKSkpKQoJIChz dGVwIChpZiBiYWNrd2FyZCAtMSAxKSkKCSBwcmV2IGdvdCkKCiAgICAod2hpbGUgKD4gYXJnIDAp CiAgICAgICh3aGlsZSAoYW5kCiAgICAgICAgICAgICAgOzsgQm91bmRhcnkgY29uZGl0aW9uOgog ICAgICAgICAgICAgIChub3QgKGlmIGJhY2t3YXJkIChib2JwKShlb2JwKSkpCiAgICAgICAgICAg ICAgOzsgTW92ZSwgc2tpcHBpbmcgb3ZlciBhbGwgY29uY2VhbGVkIGxpbmVzIGluIG9uZSBmZWxs IHN3b29wOgogICAgICAgICAgICAgIChwcm9nMSAoY29uZGl0aW9uLWNhc2UgbmlsIChvciAobGlu ZS1tb3ZlIHN0ZXApIHQpCiAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yIG5pbCkpCiAgICAg ICAgICAgICAgICAoYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWxpbmUpKQogICAgICAgICAg ICAgIDs7IERlYWwgd2l0aCBhcHBhcmVudCBoZWFkZXIgbGluZToKICAgICAgICAgICAgICAoaWYg KG5vdCAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKSkKICAgICAgICAgICAgICAgICAgOzsgbm90 IGEgaGVhZGVyIGxpbmUsIGtlZXAgbG9va2luZzoKICAgICAgICAgICAgICAgICAgdAogICAgICAg ICAgICAgICAgKGFsbG91dC1wcmVmaXgtZGF0YSkKICAgICAgICAgICAgICAgIChpZiAoYW5kIChh bGxvdXQtZG8tZG91YmxlY2hlY2spCiAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWFi ZXJyYW50LWNvbnRhaW5lci1wKSkKICAgICAgICAgICAgICAgICAgICA7OyBza2lwIHRoaXMgYWJl cnJhbnQgcHJvc3BlY3RpdmUgaGVhZGVyIGxpbmU6CiAgICAgICAgICAgICAgICAgICAgdAogICAg ICAgICAgICAgICAgICA7OyB0aGlzIHByb3NwZWN0aXZlIGhlYWRlcmxpbmUgcXVhbGlmaWVzIC0g cmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgIChzZXRxIGdvdCBhbGxvdXQtcmVjZW50LXByZWZp eC1iZWdpbm5pbmcpCiAgICAgICAgICAgICAgICAgIDs7IGFuZCBicmVhayB0aGUgbG9vcDoKICAg ICAgICAgICAgICAgICAgbmlsKSkpKQogICAgICA7OyBSZWdpc3RlciB0aGlzIGdvdCwgaXQgbWF5 IGJlIHRoZSBsYXN0OgogICAgICAoaWYgZ290IChzZXRxIHByZXYgZ290KSkKICAgICAgKHNldHEg YXJnICgxLSBhcmcpKSkKICAgIChjb25kIChnb3QJCQkJOyBMYXN0IG1vdmUgd2FzIHRvIGEgcHJl Zml4OgogICAgICAgICAgIChhbGxvdXQtZW5kLW9mLXByZWZpeCkpCgkgIChwcmV2CQkJCTsgTGFz dCBtb3ZlIHdhc24ndCwgYnV0IHByZXYgd2FzOgogICAgICAgICAgIChnb3RvLWNoYXIgcHJldikK ICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpKQoJICAoKG5vdCBiYWNrd2FyZCkgKGVu ZC1vZi1saW5lKSBuaWwpKSkpCjs7O18gICA+IGFsbG91dC1wcmV2aW91cy12aXNpYmxlLWhlYWRp bmcgKGFyZykKKGRlZnVuIGFsbG91dC1wcmV2aW91cy12aXNpYmxlLWhlYWRpbmcgKGFyZykKICAi TW92ZSB0byB0aGUgcHJldmlvdXMgaGVhZGluZyBsaW5lLgoKV2l0aCBhcmd1bWVudCwgcmVwZWF0 cyBvciBjYW4gbW92ZSBmb3J3YXJkIGlmIG5lZ2F0aXZlLgpBIGhlYWRpbmcgbGluZSBpcyBvbmUg dGhhdCBzdGFydHMgd2l0aCBhIGAqJyAob3IgdGhhdCBgYWxsb3V0LXJlZ2V4cCcKbWF0Y2hlcyku IgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKHByb2cxIChhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRp bmcgKC0gYXJnKSkKICAgIChpZiAoaW50ZXJhY3RpdmUtcCkgKGFsbG91dC1lbmQtb2YtcHJlZml4 KSkpKQo7OztfICAgPiBhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsIChhcmcpCihkZWZ1biBh bGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsIChhcmcpCiAgIlBvc2l0aW9uIHBvaW50IGF0IHRo ZSBuZXh0IGhlYWRpbmcgb2YgdGhlIHNhbWUgbGV2ZWwuCgpUYWtlcyBvcHRpb25hbCByZXBlYXQt Y291bnQsIGdvZXMgYmFja3dhcmQgaWYgY291bnQgaXMgbmVnYXRpdmUuCgpSZXR1cm5zIHJlc3Vs dGluZyBwb3NpdGlvbiwgZWxzZSBuaWwgaWYgbm9uZSBmb3VuZC4iCiAgKGludGVyYWN0aXZlICJw IikKICAobGV0ICgoc3RhcnQtZGVwdGggKGFsbG91dC1jdXJyZW50LWRlcHRoKSkKCShzdGFydC1h cmcgYXJnKQoJKGJhY2t3YXJkICg+IDAgYXJnKSkpCiAgICAoaWYgKD0gMCBzdGFydC1kZXB0aCkK CShlcnJvciAiTm8gc2libGluZ3MsIG5vdCBpbiBhIHRvcGljLi4uIikpCiAgICAoaWYgYmFja3dh cmQgKHNldHEgYXJnICgqIC0xIGFyZykpKQogICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVh ZGluZykKICAgICh3aGlsZSAoYW5kIChub3QgKHplcm9wIGFyZykpCiAgICAgICAgICAgICAgICAo aWYgYmFja3dhcmQKICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXByZXZpb3VzLXNpYmxpbmcp CiAgICAgICAgICAgICAgICAgIChhbGxvdXQtbmV4dC1zaWJsaW5nKSkpCiAgICAgIChzZXRxIGFy ZyAoMS0gYXJnKSkpCiAgICAoaWYgKG5vdCAoaW50ZXJhY3RpdmUtcCkpCiAgICAgICAgbmlsCiAg ICAgIChhbGxvdXQtZW5kLW9mLXByZWZpeCkKICAgICAgKGlmIChub3QgKHplcm9wIGFyZykpCiAg ICAgICAgICAoZXJyb3IgIkhpdCAlcyBsZXZlbCAlZCB0b3BpYywgdHJhdmVyc2VkICVkIG9mICVk IHJlcXVlc3RlZCIKICAgICAgICAgICAgICAgICAoaWYgYmFja3dhcmQgImZpcnN0IiAibGFzdCIp CiAgICAgICAgICAgICAgICAgYWxsb3V0LXJlY2VudC1kZXB0aAogICAgICAgICAgICAgICAgICgt IChhYnMgc3RhcnQtYXJnKSBhcmcpCiAgICAgICAgICAgICAgICAgKGFicyBzdGFydC1hcmcpKSkp KSkKOzs7XyAgID4gYWxsb3V0LWJhY2t3YXJkLWN1cnJlbnQtbGV2ZWwgKGFyZykKKGRlZnVuIGFs bG91dC1iYWNrd2FyZC1jdXJyZW50LWxldmVsIChhcmcpCiAgIkludmVyc2Ugb2YgYGFsbG91dC1m b3J3YXJkLWN1cnJlbnQtbGV2ZWwnLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChpZiAoaW50ZXJh Y3RpdmUtcCkKICAgICAgKGxldCAoKGN1cnJlbnQtcHJlZml4LWFyZyAoKiAtMSBhcmcpKSkKCShj YWxsLWludGVyYWN0aXZlbHkgJ2FsbG91dC1mb3J3YXJkLWN1cnJlbnQtbGV2ZWwpKQogICAgKGFs bG91dC1mb3J3YXJkLWN1cnJlbnQtbGV2ZWwgKCogLTEgYXJnKSkpKQoKOzs7XyAjNSBBbHRlcmF0 aW9uCgo7OztfICAtIEZ1bmRhbWVudGFsCjs7O18gICA9IGFsbG91dC1wb3N0LWdvdG8tYnVsbGV0 CihkZWZ2YXIgYWxsb3V0LXBvc3QtZ290by1idWxsZXQgbmlsCiAgIk91dGxpbmUgaW50ZXJuYWwg dmFyLCBmb3IgYGFsbG91dC1wcmUtY29tbWFuZC1idXNpbmVzcycgaG90LXNwb3Qgb3BlcmF0aW9u LgoKV2hlbiBzZXQsIHRlbGxzIHBvc3QtcHJvY2Vzc2luZyB0byByZXBvc2l0aW9uIG9uIHRvcGlj IGJ1bGxldCwgYW5kCnRoZW4gdW5zZXQgaXQuICBTZXQgYnkgYGFsbG91dC1wcmUtY29tbWFuZC1i dXNpbmVzcycgd2hlbiBpbXBsZW1lbnRpbmcKaG90LXNwb3Qgb3BlcmF0aW9uLCB3aGVyZSBsaXRl cmFsIGNoYXJhY3RlcnMgdHlwZWQgb3ZlciBhIHRvcGljIGJ1bGxldAphcmUgbWFwcGVkIHRvIHRo ZSBjb21tYW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2wta2V5IG9uIHRoZQpgYWxsb3V0 LW1vZGUtbWFwJy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wb3N0LWdv dG8tYnVsbGV0KQo7OztfICAgPSBhbGxvdXQtY29tbWFuZC1jb3VudGVyCihkZWZ2YXIgYWxsb3V0 LWNvbW1hbmQtY291bnRlciAwCiAgIkNvdW50ZXIgdGhhdCBtb25vdG9uaWNhbGx5IGluY3JlYXNl cyBpbiBhbGxvdXQtbW9kZSBidWZmZXJzLgoKU2V0IGJ5IGBhbGxvdXQtcHJlLWNvbW1hbmQtYnVz aW5lc3MnLCB0byBzdXBwb3J0IGFsbG91dCBhZGRvbnMgaW4KY29vcmRpbmF0aW5nIHdpdGggYWxs b3V0IGFjdGl2aXR5LiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LWNvbW1h bmQtY291bnRlcikKOzs7XyAgID4gYWxsb3V0LXBvc3QtY29tbWFuZC1idXNpbmVzcyAoKQooZGVm dW4gYWxsb3V0LXBvc3QtY29tbWFuZC1idXNpbmVzcyAoKQogICJPdXRsaW5lIGBwb3N0LWNvbW1h bmQtaG9vaycgZnVuY3Rpb24uCgotIEltcGxlbWVudCAoYW5kIGNsZWFyKSBgYWxsb3V0LXBvc3Qt Z290by1idWxsZXQnLCBmb3IgaG90LXNwb3QKICBvdXRsaW5lIGNvbW1hbmRzLgoKLSBEZWNyeXB0 IHRvcGljIGN1cnJlbnRseSBiZWluZyBlZGl0ZWQgaWYgaXQgd2FzIGVuY3J5cHRlZCBmb3IgYSBz YXZlLiIKCgkJCQkJOyBBcHBseSBhbnkgZXh0ZXJuYWwgY2hhbmdlIGZ1bmM6CiAgKGlmIChub3Qg KGFsbG91dC1tb2RlLXApKQkJOyBJbiBhbGxvdXQtbW9kZS4KICAgICAgbmlsCgogICAgKGlmIChh bmQgKGJvdW5kcCAnYWxsb3V0LWFmdGVyLXNhdmUtZGVjcnlwdCkKICAgICAgICAgICAgIGFsbG91 dC1hZnRlci1zYXZlLWRlY3J5cHQpCiAgICAgICAgKGFsbG91dC1hZnRlci1zYXZlcy1oYW5kbGVy KSkKCiAgICA7OyBJbXBsZW1lbnQgYWxsb3V0LXBvc3QtZ290by1idWxsZXQsIGlmIHNldDoKICAg IChpZiAoYW5kIGFsbG91dC1wb3N0LWdvdG8tYnVsbGV0CgkgICAgIChhbGxvdXQtY3VycmVudC1i dWxsZXQtcG9zKSkKCShwcm9nbiAoZ290by1jaGFyIChhbGxvdXQtY3VycmVudC1idWxsZXQtcG9z KSkKCSAgICAgICAoc2V0cSBhbGxvdXQtcG9zdC1nb3RvLWJ1bGxldCBuaWwpKSkKICAgICkpCjs7 O18gICA+IGFsbG91dC1wcmUtY29tbWFuZC1idXNpbmVzcyAoKQooZGVmdW4gYWxsb3V0LXByZS1j b21tYW5kLWJ1c2luZXNzICgpCiAgIk91dGxpbmUgYHByZS1jb21tYW5kLWhvb2snIGZ1bmN0aW9u IGZvciBvdXRsaW5lIGJ1ZmZlcnMuCgpBbW9uZyBvdGhlciB0aGluZ3MsIGltcGxlbWVudHMgc3Bl Y2lhbCBiZWhhdmlvciB3aGVuIHRoZSBjdXJzb3IgaXMgb24gdGhlCnRvcGljIGJ1bGxldCBjaGFy YWN0ZXIuCgpXaGVuIHRoZSBjdXJzb3IgaXMgb24gdGhlIGJ1bGxldCBjaGFyYWN0ZXIsIHNlbGYt aW5zZXJ0IGNoYXJhY3RlcnMgYXJlCnJlaW50ZXJwcmV0ZWQgYXMgdGhlIGNvcnJlc3BvbmRpbmcg Y29udHJvbC1jaGFyYWN0ZXIgaW4gdGhlCmBhbGxvdXQtbW9kZS1tYXAnLiAgVGhlIGBhbGxvdXQt bW9kZScgYHBvc3QtY29tbWFuZC1ob29rJyBpbnN1cmVzIHRoYXQKdGhlIGN1cnNvciB3aGljaCBo YXMgbW92ZWQgYXMgYSByZXN1bHQgb2Ygc3VjaCByZWludGVycHJldGF0aW9uIGlzCnBvc2l0aW9u ZWQgb24gdGhlIGJ1bGxldCBjaGFyYWN0ZXIgb2YgdGhlIGRlc3RpbmF0aW9uIHRvcGljLgoKVGhl IHVwc2hvdCBpcyB0aGF0IHlvdSBjYW4gZ2V0IGVhc3ksIHNpbmdsZSBcKGllLCB1bm1vZGlmaWVk XCkga2V5Cm91dGxpbmUgbWFuZXV2ZXJpbmcgb3BlcmF0aW9ucyBieSBwb3NpdGlvbmluZyB0aGUg Y3Vyc29yIG9uIHRoZSBidWxsZXQKY2hhci4gIFdoZW4gaW4gdGhpcyBtb2RlIHlvdSBjYW4gdXNl IHJlZ3VsYXIgY3Vyc29yLXBvc2l0aW9uaW5nCmNvbW1hbmQva2V5c3Ryb2tlcyB0byByZWxvY2F0 ZSB0aGUgY3Vyc29yIG9mZiBvZiBhIGJ1bGxldCBjaGFyYWN0ZXIgdG8KcmV0dXJuIHRvIHJlZ3Vs YXIgaW50ZXJwcmV0YXRpb24gb2Ygc2VsZi1pbnNlcnQgY2hhcmFjdGVycy4iCgogIChpZiAobm90 IChhbGxvdXQtbW9kZS1wKSkKICAgICAgbmlsCiAgICA7OyBJbmNyZW1lbnQgYWxsb3V0LWNvbW1h bmQtY291bnRlcgogICAgKHNldHEgYWxsb3V0LWNvbW1hbmQtY291bnRlciAoMSsgYWxsb3V0LWNv bW1hbmQtY291bnRlcikpCiAgICA7OyBEbyBob3Qtc3BvdCBuYXZpZ2F0aW9uLgogICAgKGlmIChh bmQgKGVxIHRoaXMtY29tbWFuZCAnc2VsZi1pbnNlcnQtY29tbWFuZCkKCSAgICAgKGVxIChwb2lu dCkoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykpKQogICAgICAgIChhbGxvdXQtaG90c3BvdC1r ZXktaGFuZGxlcikpKSkKOzs7XyAgID4gYWxsb3V0LWhvdHNwb3Qta2V5LWhhbmRsZXIgKCkKKGRl ZnVuIGFsbG91dC1ob3RzcG90LWtleS1oYW5kbGVyICgpCiAgIkNhdGNoYWxsIGhhbmRsaW5nIG9m IGtleSBiaW5kaW5ncyBpbiBob3Qtc3BvdHMuCgpUcmFuc2xhdGVzIHVubW9kaWZpZWQga2V5c3Ry b2tlcyB0byBjb3JyZXNwb25kaW5nIGFsbG91dCBjb21tYW5kcywgd2hlbgp0aGV5IHdvdWxkIHF1 YWxpZnkgaWYgcHJlZml4ZWQgd2l0aCB0aGUgYWxsb3V0LWNvbW1hbmQtcHJlZml4LCBhbmQgc2V0 cwp0aGlzLWNvbW1hbmQgYWNjb3JkaW5nbHkuCgpSZXR1cm5zIHRoZSBxdWFsaWZ5aW5nIGNvbW1h bmQsIGlmIGFueSwgZWxzZSBuaWwuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0KiAoKGtleS1zdHJp bmcgKGlmIChudW1iZXJwIGxhc3QtY29tbWFuZC1jaGFyKQogICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXItdG8tc3RyaW5nIGxhc3QtY29tbWFuZC1jaGFyKSkpCiAgICAgICAgIChrZXktbnVt IChjb25kICgobnVtYmVycCBsYXN0LWNvbW1hbmQtY2hhcikgbGFzdC1jb21tYW5kLWNoYXIpCiAg ICAgICAgICAgICAgICAgICAgICAgIDs7IGZvciBYRW1hY3MgY2hhcmFjdGVyIHR5cGU6CiAgICAg ICAgICAgICAgICAgICAgICAgICgoYW5kIChmYm91bmRwICdjaGFyYWN0ZXJwKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYXBwbHkgJ2NoYXJhY3RlcnAgKGxpc3QgbGFzdC1jb21tYW5k LWNoYXIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBseSAnY2hhci10by1pbnQgKGxp c3QgbGFzdC1jb21tYW5kLWNoYXIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHQgMCkpKQog ICAgICAgICBtYXBwZWQtYmluZGluZykKCiAgICAoaWYgKHplcm9wIGtleS1udW0pCiAgICAgICAg bmlsCgogICAgICAoaWYgKGFuZAogICAgICAgICAgIDs7IGV4Y2x1ZGUgY29udHJvbCBjaGFycyBh bmQgZXNjYXBlOgogICAgICAgICAgICg8PSAzMyBrZXktbnVtKQogICAgICAgICAgIChzZXRxIG1h cHBlZC1iaW5kaW5nCiAgICAgICAgICAgICAgICAgKG9yIChhbmQgKGFzc29jIGtleS1zdHJpbmcg YWxsb3V0LWtleWJpbmRpbmdzLWxpc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgdHJh bnNsYXRlIGxpdGVyYWwgbWVtYmVyc2hpcCBvbiBsaXN0OgogICAgICAgICAgICAgICAgICAgICAg ICAgIChjYWRyIChhc3NvYyBrZXktc3RyaW5nIGFsbG91dC1rZXliaW5kaW5ncy1saXN0KSkpCiAg ICAgICAgICAgICAgICAgICAgIDs7IHRyYW5zbGF0ZSBhcyBhIGtleWJpbmRpbmc6CiAgICAgICAg ICAgICAgICAgICAgIChrZXktYmluZGluZyAoY29uY2F0IGFsbG91dC1jb21tYW5kLXByZWZpeAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhci10by1zdHJpbmcK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kICg8PSA5 NyBrZXktbnVtKSAgIDsgImEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoPj0gMTIyIGtleS1udW0pKSA7ICJ6IgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIGtleS1udW0gOTYpIGtleS1udW0pKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQpKSkpCiAgICAgICAgICA7OyBRdWFsaWZp ZWQgYXMgYW4gYWxsb3V0IGNvbW1hbmQgLSBkbyBob3Qtc3BvdCBvcGVyYXRpb24uCiAgICAgICAg ICAoc2V0cSBhbGxvdXQtcG9zdC1nb3RvLWJ1bGxldCB0KQogICAgICAgIDs7IGFjY2VwdC1kZWZh dWx0cyBuaWwsIG9yIGVsc2Ugd2UnbGwgZ2V0IGFsbG91dC1pdGVtLWljb24ta2V5LWhhbmRsZXIu CiAgICAgICAgKHNldHEgbWFwcGVkLWJpbmRpbmcgKGtleS1iaW5kaW5nIChjaGFyLXRvLXN0cmlu ZyBrZXktbnVtKSkpKQoKICAgICAgKHdoaWxlIChrZXltYXBwIG1hcHBlZC1iaW5kaW5nKQogICAg ICAgIChzZXRxIG1hcHBlZC1iaW5kaW5nCiAgICAgICAgICAgICAgKGxvb2t1cC1rZXkgbWFwcGVk LWJpbmRpbmcgKHZlY3RvciAocmVhZC1jaGFyKSkpKSkKCiAgICAgIChpZiBtYXBwZWQtYmluZGlu ZwogICAgICAgICAgKHNldHEgdGhpcy1jb21tYW5kIG1hcHBlZC1iaW5kaW5nKSkpKSkKCjs7O18g ICA+IGFsbG91dC1maW5kLWZpbGUtaG9vayAoKQooZGVmdW4gYWxsb3V0LWZpbmQtZmlsZS1ob29r ICgpCiAgIkFjdGl2YXRlIGBhbGxvdXQtbW9kZScgb24gbm9uLW5pbCBgYWxsb3V0LWF1dG8tYWN0 aXZhdGlvbicsIGBhbGxvdXQtbGF5b3V0Jy4KClNlZSBgYWxsb3V0LWluaXQnIGZvciBzZXR1cCBp bnN0cnVjdGlvbnMuIgogIChpZiAoYW5kIGFsbG91dC1hdXRvLWFjdGl2YXRpb24KCSAgIChub3Qg KGFsbG91dC1tb2RlLXApKQoJICAgYWxsb3V0LWxheW91dCkKICAgICAgKGFsbG91dC1tb2RlIHQp KSkKCjs7O18gIC0gVG9waWMgRm9ybWF0IEFzc2Vzc21lbnQKOzs7XyAgID4gYWxsb3V0LXNvbGlj aXQtYWx0ZXJuYXRlLWJ1bGxldCAoZGVwdGggJm9wdGlvbmFsIGN1cnJlbnQtYnVsbGV0KQooZGVm dW4gYWxsb3V0LXNvbGljaXQtYWx0ZXJuYXRlLWJ1bGxldCAoZGVwdGggJm9wdGlvbmFsIGN1cnJl bnQtYnVsbGV0KQoKICAiUHJvbXB0IGZvciBhbmQgcmV0dXJuIGEgYnVsbGV0IGNoYXIgYXMgYW4g YWx0ZXJuYXRpdmUgdG8gdGhlIGN1cnJlbnQgb25lLgoKT2ZmZXIgb25lIHN1aXRhYmxlIGZvciBj dXJyZW50IGRlcHRoIERFUFRIIGFzIGRlZmF1bHQuIgoKICAobGV0KiAoKGRlZmF1bHQtYnVsbGV0 IChvciAoYW5kIChzdHJpbmdwIGN1cnJlbnQtYnVsbGV0KSBjdXJyZW50LWJ1bGxldCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWJ1bGxldC1mb3ItZGVwdGggZGVwdGgpKSkK CSAoc2Fucy1lc2NhcGVzIChyZWdleHAtc2Fucy1lc2NhcGVzIGFsbG91dC1idWxsZXRzLXN0cmlu ZykpCgkgY2hvaWNlKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKGFsbG91 dC1jdXJyZW50LWJ1bGxldC1wb3MpKQogICAgICAoc2V0cSBjaG9pY2UgKHNvbGljaXQtY2hhci1p bi1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJTZWxlY3QgYnVsbGV0OiAlcyAo JyVzJyBkZWZhdWx0KTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fucy1lc2NhcGVz CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgZGVm YXVsdC1idWxsZXQpKQogICAgICAgICAgICAgICAgICAgIHNhbnMtZXNjYXBlcwogICAgICAgICAg ICAgICAgICAgIHQpKSkKICAgIChtZXNzYWdlICIiKQogICAgKGlmIChzdHJpbmc9IGNob2ljZSAi IikgZGVmYXVsdC1idWxsZXQgY2hvaWNlKSkKICApCjs7O18gICA+IGFsbG91dC1kaXN0aW5jdGl2 ZS1idWxsZXQgKGJ1bGxldCkKKGRlZnVuIGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXQgKGJ1bGxl dCkKICAiVHJ1ZSBpZiBCVUxMRVQgaXMgb25lIG9mIHRob3NlIG9uIGBhbGxvdXQtZGlzdGluY3Rp dmUtYnVsbGV0cy1zdHJpbmcnLiIKICAoc3RyaW5nLW1hdGNoIChyZWdleHAtcXVvdGUgYnVsbGV0 KSBhbGxvdXQtZGlzdGluY3RpdmUtYnVsbGV0cy1zdHJpbmcpKQo7OztfICAgPiBhbGxvdXQtbnVt YmVyZWQtdHlwZS1wcmVmaXggKCZvcHRpb25hbCBwcmVmaXgpCihkZWZ1biBhbGxvdXQtbnVtYmVy ZWQtdHlwZS1wcmVmaXggKCZvcHRpb25hbCBwcmVmaXgpCiAgIlRydWUgaWYgY3VycmVudCBoZWFk ZXIgcHJlZml4IGJ1bGxldCBpcyBudW1iZXJlZCBidWxsZXQuIgogIChhbmQgYWxsb3V0LW51bWJl cmVkLWJ1bGxldAogICAgICAgIChzdHJpbmc9IGFsbG91dC1udW1iZXJlZC1idWxsZXQKICAgICAg ICAgICAgICAgICAoaWYgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZ2V0LXBy ZWZpeC1idWxsZXQgcHJlZml4KQogICAgICAgICAgICAgICAgICAgKGFsbG91dC1nZXQtYnVsbGV0 KSkpKSkKOzs7XyAgID4gYWxsb3V0LWVuY3J5cHRlZC10eXBlLXByZWZpeCAoJm9wdGlvbmFsIHBy ZWZpeCkKKGRlZnVuIGFsbG91dC1lbmNyeXB0ZWQtdHlwZS1wcmVmaXggKCZvcHRpb25hbCBwcmVm aXgpCiAgIlRydWUgaWYgY3VycmVudCBoZWFkZXIgcHJlZml4IGJ1bGxldCBpcyBmb3IgYW4gZW5j cnlwdGVkIGVudHJ5IFwoYm9keSkuIgogIChhbmQgYWxsb3V0LXRvcGljLWVuY3J5cHRpb24tYnVs bGV0CiAgICAgICAgKHN0cmluZz0gYWxsb3V0LXRvcGljLWVuY3J5cHRpb24tYnVsbGV0CiAgICAg ICAgICAgICAgICAgKGlmIHByZWZpeAogICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWdldC1w cmVmaXgtYnVsbGV0IHByZWZpeCkKICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZ2V0LWJ1bGxl dCkpKSkpCjs7O18gICA+IGFsbG91dC1idWxsZXQtZm9yLWRlcHRoICgmb3B0aW9uYWwgZGVwdGgp CihkZWZ1biBhbGxvdXQtYnVsbGV0LWZvci1kZXB0aCAoJm9wdGlvbmFsIGRlcHRoKQogICJSZXR1 cm4gb3V0bGluZSB0b3BpYyBidWxsZXQgc3VpdGVkIHRvIG9wdGlvbmFsIERFUFRILCBvciBjdXJy ZW50IGRlcHRoLiIKICA7OyBGaW5kIGJ1bGxldCBpbiBwbGFpbi1idWxsZXRzLXN0cmluZyBtb2R1 bG8gREVQVEguCiAgKGlmIGFsbG91dC1zdHlsaXNoLXByZWZpeGVzCiAgICAgIChjaGFyLXRvLXN0 cmluZyAoYXJlZiBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICglIChtYXggMCAoLSBkZXB0aCAyKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZy1sZW4pKSkKICAgIGFsbG91dC1wcmlt YXJ5LWJ1bGxldCkKICApCgo7OztfICAtIFRvcGljIFByb2R1Y3Rpb24KOzs7XyAgID4gYWxsb3V0 LW1ha2UtdG9waWMtcHJlZml4ICgmb3B0aW9uYWwgcHJpb3ItYnVsbGV0CihkZWZ1biBhbGxvdXQt bWFrZS10b3BpYy1wcmVmaXggKCZvcHRpb25hbCBwcmlvci1idWxsZXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNvbGljaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBudW1iZXItY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZGV4KQogIDs7IERlcHRoIG51bGwgbWVhbnMgdXNlIGN1cnJlbnQgZGVwdGgs IG5vbi1udWxsIG1lYW5zIHdlJ3JlIGVpdGhlcgogIDs7IG9wZW5pbmcgYSBuZXcgdG9waWMgYWZ0 ZXIgY3VycmVudCB0b3BpYywgbG93ZXIgb3IgaGlnaGVyLCBvciB3ZSdyZQogIDs7IGNoYW5naW5n IGxldmVsIG9mIGN1cnJlbnQgdG9waWMuCiAgOzsgU29saWNpdCBkb21pbmF0ZXMgc3BlY2lmaWVk IGJ1bGxldC1jaGFyLgo7OztfICAgIC4gRG9jIHN0cmluZzoKICAiR2VuZXJhdGUgYSB0b3BpYyBw cmVmaXggc3VpdGFibGUgZm9yIG9wdGlvbmFsIGFyZyBERVBUSCwgb3IgY3VycmVudCBkZXB0aC4K CkFsbCB0aGUgYXJndW1lbnRzIGFyZSBvcHRpb25hbC4KClBSSU9SLUJVTExFVCBpbmRpY2F0ZXMg dGhlIGJ1bGxldCBvZiB0aGUgcHJlZml4IGJlaW5nIGNoYW5nZWQsIG9yCm5pbCBpZiBub25lLiAg VGhpcyBidWxsZXQgbWF5IGJlIHByZXNlcnZlZCAob3RoZXIgb3B0aW9ucwpub3R3aXRoc3RhbmRp bmcpIGlmIGl0IGlzIG9uIHRoZSBgYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nJywK Zm9yIGluc3RhbmNlLgoKU2Vjb25kIGFyZyBORVcgaW5kaWNhdGVzIHRoYXQgYSBuZXcgdG9waWMg aXMgYmVpbmcgb3BlbmVkIGFmdGVyIHRoZQp0b3BpYyBhdCBwb2ludCwgaWYgbm9uLW5pbC4gIERl ZmF1bHQgYnVsbGV0IGZvciBuZXcgdG9waWNzLCBlZywgbWF5CmJlIHNldCAoY29udGluZ2VudCB0 byBvdGhlciBhcmdzKSB0byBudW1iZXJlZCBidWxsZXRzIGlmIHByZXZpb3VzCnNpYmxpbmcgaXMg b25lLiAgVGhlIGltcGxpY2F0aW9uIG90aGVyd2lzZSBpcyB0aGF0IHRoZSBjdXJyZW50IHRvcGlj CmlzIGJlaW5nIGFkanVzdGVkIC0gc2hpZnRlZCBvciByZWJ1bGxldGVkIC0gYW5kIHdlIGRvbid0 IGNvbnNpZGVyCmJ1bGxldCBvciBwcmV2aW91cyBzaWJsaW5nLgoKVGhpcmQgYXJnIERFUFRIIGZv cmNlcyB0aGUgdG9waWMgcHJlZml4IHRvIHRoYXQgZGVwdGgsIHJlZ2FyZGxlc3Mgb2YKdGhlIGN1 cnJlbnQgdG9waWNzJyBkZXB0aC4KCklmIFNPTElDSVQgaXMgbm9uLW5pbCwgdGhlbiB0aGUgY2hv aWNlIG9mIGJ1bGxldCBpcyBzb2xpY2l0ZWQgZnJvbQp1c2VyLiAgSWYgaXQncyBhIGNoYXJhY3Rl ciwgdGhlbiB0aGF0IGNoYXJhY3RlciBpcyBvZmZlcmVkIGFzIHRoZQpkZWZhdWx0LCBvdGhlcndp c2UgdGhlIG9uZSBzdWl0ZWQgdG8gdGhlIGNvbnRleHQgXChhY2NvcmRpbmcgdG8KZGlzdGluY3Rp b24gb3IgZGVwdGgpIGlzIG9mZmVyZWQuICBcKFRoaXMgb3ZlcnJpZGVzIG90aGVyIG9wdGlvbnMs CmluY2x1ZGluZywgZWcsIGEgZGlzdGluY3RpdmUgUFJJT1ItQlVMTEVULikgIElmIG5vbi1uaWws IHRoZW4gdGhlCmNvbnRleHQtc3BlY2lmaWMgYnVsbGV0IGlzIHVzZWQuCgpGaWZ0aCBhcmcsIE5V TUJFUi1DT05UUk9MLCBtYXR0ZXJzIG9ubHkgaWYgYGFsbG91dC1udW1iZXJlZC1idWxsZXQnCmlz IG5vbi1uaWwgKmFuZCogc29saWNpdGluZyB3YXMgbm90IGV4cGxpY2l0bHkgaW52b2tlZC4gIFRo ZW4KTlVNQkVSLUNPTlRST0wgbm9uLW5pbCBmb3JjZXMgcHJlZml4IHRvIGVpdGhlciBudW1iZXJl ZCBvcgpkZW51bWJlcmVkIGZvcm1hdCwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2l4 dGggYXJnLCBJTkRFWC4KClwoTm90ZSB0aGF0IE5VTUJFUi1DT05UUk9MIGRvZXMgKm5vdCogYXBw bHkgdG8gbGV2ZWwgMSB0b3BpY3MuICBTb3JyeS4uLikKCklmIE5VTUJFUi1DT05UUk9MIGlzIG5v bi1uaWwgYW5kIHNpeHRoIGFyZyBJTkRFWCBpcyBub24tbmlsIHRoZW4KdGhlIHByZWZpeCBvZiB0 aGUgdG9waWMgaXMgZm9yY2VkIHRvIGJlIG51bWJlcmVkLiAgTm9uLW5pbApOVU1CRVItQ09OVFJP TCBhbmQgbmlsIElOREVYIGZvcmNlcyBub24tbnVtYmVyZWQgZm9ybWF0IG9uIHRoZQpidWxsZXQu ICBOb24tbmlsIE5VTUJFUi1DT05UUk9MIGFuZCBub24tbmlsLCBub24tbnVtYmVyIElOREVYIG1l YW5zCnRoYXQgdGhlIGluZGV4IGZvciB0aGUgbnVtYmVyZWQgcHJlZml4IHdpbGwgYmUgZGVyaXZl ZCwgYnkgY291bnRpbmcKc2libGluZ3MgYmFjayB0byBzdGFydCBvZiBsZXZlbC4gIElmIElOREVY IGlzIGEgbnVtYmVyLCB0aGVuIHRoYXQKbnVtYmVyIGlzIHVzZWQgYXMgdGhlIGluZGV4IGZvciB0 aGUgbnVtYmVyZWQgcHJlZml4IChhbGxvd2luZywgZWcsCnNlcXVlbnRpYWwgcmVudW1iZXJpbmcg dG8gbm90IHJlcXVpcmUgdGhpcyBmdW5jdGlvbiBjb3VudGluZyBiYWNrIHRoZQppbmRleCBmb3Ig ZWFjaCBzdWNjZXNzaXZlIHNpYmxpbmcpLiIKOzs7XyAgICAuIENvZGU6CiAgOzsgVGhlIG9wdGlv bnMgYXJlIG9yZGVyZWQgaW4gbGlrZWx5IGZyZXF1ZW5jZSBvZiB1c2UsIG1vc3QgY29tbW9uCiAg OzsgaGlnaGVzdCwgbGVhc3QgbG93ZXN0LiAgSWUsIG1vcmUgbGlrZWx5IHRvIGJlIGRvaW5nIHBy ZWZpeAogIDs7IGFkanVzdG1lbnRzIHRoYW4gc29saWNpdGluZywgYW5kIHlldCBtb3JlIHRoYW4g bnVtYmVyaW5nLgogIDs7IEN1cnJlbnQgcHJlZml4IGlzIGxlYXN0IGRvbWluYW50LCBidXQgbW9z dCBsaWtlbHkgdG8gYmUgY29tbW9ubHkKICA7OyBzcGVjaWZpZWQuLi4KCiAgKGxldCogKGJvZHkK ICAgICAgICAgbnVtYmVyaW5nCiAgICAgICAgIGRlbnVtYmVyaW5nCiAgICAgICAgIChkZXB0aCAo b3IgZGVwdGggKGFsbG91dC1kZXB0aCkpKQogICAgICAgICAoaGVhZGVyLWxlYWQgYWxsb3V0LWhl YWRlci1wcmVmaXgpCiAgICAgICAgIChidWxsZXQtY2hhcgoKICAgICAgICAgIDs7IEdldHRpbmcg dmFsdWUgZm9yIGJ1bGxldCBjaGFyIGlzIHByYWN0aWNhbGx5IHRoZSB3aG9sZSBqb2I6CgogICAg ICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU2lt cGxlc3Qgc2l0dWF0aW9uIC0gbGV2ZWwgMToKICAgICAgICAgICAoKDw9IGRlcHRoIDEpIChzZXRx IGhlYWRlci1sZWFkICIiKSBhbGxvdXQtcHJpbWFyeS1idWxsZXQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IFNpbXBsZSwgdG9vOiBhbGwgYXN0ZXJpc2tzOgogICAg ICAgICAgIChhbGxvdXQtb2xkLXN0eWxlLXByZWZpeGVzCiAgICAgICAgICAgIDs7IENoZWF0IC0g bWFrZSBib2R5IHRoZSB3aG9sZSB0aGluZywgbnVsbCBvdXQgaGVhZGVyLWxlYWQgYW5kCiAgICAg ICAgICAgIDs7IGJ1bGxldC1jaGFyOgogICAgICAgICAgICAoc2V0cSBib2R5IChtYWtlLXN0cmlu ZyBkZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXRvLWNo YXIgYWxsb3V0LXByaW1hcnktYnVsbGV0KSkpCiAgICAgICAgICAgIChzZXRxIGhlYWRlci1sZWFk ICIiKQogICAgICAgICAgICAiIikKCiAgICAgICAgICAgOzsgKE5laXRoZXIgbGV2ZWwgMSBub3Ig b2xkLXN0eWxlLCBzbyB3ZSdyZSBzcGFjZSBwYWRkaW5nLgogICAgICAgICAgIDs7IFNuZWFrIGl0 IGluIHRoZSBjb25kaXRpb24gb2YgdGhlIG5leHQgY2FzZSwgd2hhdGV2ZXIgaXQgaXMuKQoKICAg ICAgICAgICA7OyBTb2xpY2l0YXRpb24gb3ZlcnJpZGVzIG51bWJlcmluZyBhbmQgb3RoZXIgY2Fz ZXM6CiAgICAgICAgICAgKChwcm9nbiAoc2V0cSBib2R5IChtYWtlLXN0cmluZyAoLSBkZXB0aCAy KSA/XCApKQogICAgICAgICAgICAgICAgICAgOzsgVGhlIGFjdHVhbCBjb25kaXRpb246CiAgICAg ICAgICAgICAgICAgICBzb2xpY2l0KQogICAgICAgICAgICAobGV0KiAoKGdvdCAoYWxsb3V0LXNv bGljaXQtYWx0ZXJuYXRlLWJ1bGxldCBkZXB0aCBzb2xpY2l0KSkpCiAgICAgICAgICAgICAgOzsg R290dGEgY2hlY2sgd2hldGhlciB3ZSdyZSBudW1iZXJpbmcgYW5kIGdvdCBhIG51bWJlcmVkIGJ1 bGxldDoKICAgICAgICAgICAgICAoc2V0cSBudW1iZXJpbmcgKGFuZCBhbGxvdXQtbnVtYmVyZWQt YnVsbGV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoYW5kIG51bWJl ci1jb250cm9sIChub3QgaW5kZXgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nPSBnb3QgYWxsb3V0LW51bWJlcmVkLWJ1bGxldCkpKQogICAgICAgICAgICAgIDs7 IE5vdyByZXR1cm4gd2hhdCB3ZSBnb3QsIHJlZ2FyZGxlc3M6CiAgICAgICAgICAgICAgZ290KSkK CiAgICAgICAgICAgOzsgTnVtYmVyaW5nIGludm9rZWQgdGhyb3VnaCBhcmdzOgogICAgICAgICAg ICgoYW5kIGFsbG91dC1udW1iZXJlZC1idWxsZXQgbnVtYmVyLWNvbnRyb2wpCiAgICAgICAgICAg IChpZiAoc2V0cSBudW1iZXJpbmcgKG5vdCAoc2V0cSBkZW51bWJlcmluZyAobm90IGluZGV4KSkp KQogICAgICAgICAgICAgICAgYWxsb3V0LW51bWJlcmVkLWJ1bGxldAogICAgICAgICAgICAgIChp ZiAoYW5kIHByaW9yLWJ1bGxldAogICAgICAgICAgICAgICAgICAgICAgIChub3QgKHN0cmluZz0g YWxsb3V0LW51bWJlcmVkLWJ1bGxldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpb3ItYnVsbGV0KSkpCiAgICAgICAgICAgICAgICAgIHByaW9yLWJ1bGxldAogICAgICAg ICAgICAgICAgKGFsbG91dC1idWxsZXQtZm9yLWRlcHRoIGRlcHRoKSkpKQoKICAgICAgICAgIDs7 OyBOZWl0aGVyIHNvbGljaXRpbmcgbm9yIGNvbnRyb2xsZWQgbnVtYmVyaW5nIDs7OwogICAgICAg ICAgICAgOzs7IChtYXkgYmUgY29udHJvbGxlZCBkZW51bWJlcmluZywgdGhvKSA7OzsKCiAgICAg ICAgICAgOzsgQ2hlY2sgd3J0IHByZXZpb3VzIHNpYmxpbmc6CiAgICAgICAgICAgKChhbmQgbmV3 CQkJCSAgOyBvbmx5IGNoZWNrIGZvciBuZXcgcHJlZml4ZXMKICAgICAgICAgICAgICAgICAoPD0g ZGVwdGggKGFsbG91dC1kZXB0aCkpCiAgICAgICAgICAgICAgICAgYWxsb3V0LW51bWJlcmVkLWJ1 bGxldAkgICAgICA7IC4uLiAmIG51bWJlcmluZyBlbmFibGVkCiAgICAgICAgICAgICAgICAgKG5v dCBkZW51bWJlcmluZykKICAgICAgICAgICAgICAgICAobGV0ICgoc2libGluZy1idWxsZXQKICAg ICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgOzsgTG9jYXRlIGNvcnJlY3Qgc2libGluZzoKICAgICAgICAgICAgICAgICAgICAgICAg ICAob3IgKD49IGRlcHRoIChhbGxvdXQtZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYWxsb3V0LWFzY2VuZC10by1kZXB0aCBkZXB0aCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKGFsbG91dC1nZXQtYnVsbGV0KSkpKQogICAgICAgICAgICAgICAgICAgKGlmIChhbmQg c2libGluZy1idWxsZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9IGFsbG91 dC1udW1iZXJlZC1idWxsZXQgc2libGluZy1idWxsZXQpKQogICAgICAgICAgICAgICAgICAgICAg IChzZXRxIG51bWJlcmluZyBzaWJsaW5nLWJ1bGxldCkpKSkpCgogICAgICAgICAgIDs7IERpc3Rp bmN0aXZlIHByaW9yIGJ1bGxldD8KICAgICAgICAgICAoKGFuZCBwcmlvci1idWxsZXQKICAgICAg ICAgICAgICAgICAoYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldCBwcmlvci1idWxsZXQpCiAgICAg ICAgICAgICAgICAgOzsgRWl0aGVyIG5vbi1udW1iZXJlZDoKICAgICAgICAgICAgICAgICAob3Ig KG5vdCAoYW5kIGFsbG91dC1udW1iZXJlZC1idWxsZXQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmc9IHByaW9yLWJ1bGxldCBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0KSkpCiAg ICAgICAgICAgICAgICAgICAgIDs7IG9yIG51bWJlcmVkLCBhbmQgbm90IGRlbnVtYmVyaW5nOgog ICAgICAgICAgICAgICAgICAgICAoc2V0cSBudW1iZXJpbmcgKG5vdCBkZW51bWJlcmluZykpKQog ICAgICAgICAgICAgICAgIDs7IEhlcmUgJ3RpczoKICAgICAgICAgICAgICAgICBwcmlvci1idWxs ZXQpKQoKICAgICAgICAgICA7OyBFbHNlLCBzdGFuZGFyZCBidWxsZXQgcGVyIGRlcHRoOgogICAg ICAgICAgICgoYWxsb3V0LWJ1bGxldC1mb3ItZGVwdGggZGVwdGgpKSkpKQoKICAgIChjb25jYXQg aGVhZGVyLWxlYWQKICAgICAgICAgICAgYm9keQogICAgICAgICAgICBidWxsZXQtY2hhcgogICAg ICAgICAgICAoaWYgbnVtYmVyaW5nCiAgICAgICAgICAgICAgICAoZm9ybWF0ICIlZCIgKGNvbmQg KChhbmQgaW5kZXggKG51bWJlcnAgaW5kZXgpKSBpbmRleCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobmV3ICgxKyAoYWxsb3V0LXNpYmxpbmctaW5kZXggZGVwdGgpKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFsbG91dC1zaWJsaW5nLWluZGV4KSkp KSkpCiAgICApCiAgKQo7OztfICAgPiBhbGxvdXQtb3Blbi10b3BpYyAocmVsYXRpdmUtZGVwdGgg Jm9wdGlvbmFsIGJlZm9yZSBvZmZlci1yZWNlbnQtYnVsbGV0KQooZGVmdW4gYWxsb3V0LW9wZW4t dG9waWMgKHJlbGF0aXZlLWRlcHRoICZvcHRpb25hbCBiZWZvcmUgb2ZmZXItcmVjZW50LWJ1bGxl dCkKICAiT3BlbiBhIG5ldyB0b3BpYyBhdCBkZXB0aCBERVBUSC4KCk5ldyB0b3BpYyBpcyBzaXR1 YXRlZCBhZnRlciBjdXJyZW50IG9uZSwgdW5sZXNzIG9wdGlvbmFsIGZsYWcgQkVGT1JFCmlzIG5v bi1uaWwsIG9yIHVubGVzcyBjdXJyZW50IGxpbmUgaXMgY29tcGxldGVseSBlbXB0eSAtIGxhY2tp bmcgZXZlbgp3aGl0ZXNwYWNlIC0gaW4gd2hpY2ggY2FzZSBvcGVuIGlzIGRvbmUgb24gdGhlIGN1 cnJlbnQgbGluZS4KCldoZW4gYWRkaW5nIGFuIG9mZnNwcmluZywgaXQgd2lsbCBiZSBhZGRlZCBp bW1lZGlhdGVseSBhZnRlciB0aGUgcGFyZW50IGlmCnRoZSBvdGhlciBvZmZzcHJpbmcgYXJlIGV4 cG9zZWQsIG9yIGFmdGVyIHRoZSBsYXN0IGNoaWxkIGlmIHRoZSBvZmZzcHJpbmcKYXJlIGhpZGRl bi4gIFwoVGhlIGludGVydmVuaW5nIG9mZnNwcmluZyB3aWxsIGJlIGV4cG9zZWQgaW4gdGhlIGxh dHRlcgpjYXNlLikKCklmIE9GRkVSLVJFQ0VOVC1CVUxMRVQgaXMgdHJ1ZSwgb2ZmZXIgdG8gdXNl IHRoZSBidWxsZXQgb2YgdGhlIHByaW9yIHNpYmxpbmcuCgpOdWFuY2VzOgoKLSBDcmVhdGlvbiBv ZiBuZXcgdG9waWNzIGlzIHdpdGggcmVzcGVjdCB0byB0aGUgdmlzaWJsZSB0b3BpYwogIGNvbnRh aW5pbmcgdGhlIGN1cnNvciwgcmVnYXJkbGVzcyBvZiBpbnRlcnZlbmluZyBjb25jZWFsZWQgb25l cy4KCi0gTmV3IGhlYWRlcnMgYXJlIGdlbmVyYWxseSBjcmVhdGVkIGFmdGVyL2JlZm9yZSB0aGUg Ym9keSBvZiBhCiAgdG9waWMuICBIb3dldmVyLCB0aGV5IGFyZSBjcmVhdGVkIHJpZ2h0IGF0IGN1 cnNvciBsb2NhdGlvbiBpZiB0aGUKICBjdXJzb3IgaXMgb24gYSBibGFuayBsaW5lLCBldmVuIGlm IHRoYXQgYnJlYWtzIHRoZSBjdXJyZW50IHRvcGljCiAgYm9keS4gIFRoaXMgaXMgaW50ZW50aW9u YWwsIHRvIHByb3ZpZGUgYSBzaW1wbGUgbWVhbnMgZm9yCiAgZGVsaWJlcmF0ZWx5IGRpdmlkaW5n IHRvcGljIGJvZGllcy4KCi0gRG91YmxlIHNwYWNpbmcgb2YgdG9waWMgbGlzdHMgaXMgcHJlc2Vy dmVkLiAgQWxzbywgdGhlIGZpcnN0CiAgbGV2ZWwgdHdvIHRvcGljIGlzIGNyZWF0ZWQgZG91Ymxl LXNwYWNlZCAoYW5kIHNvIHdvdWxkIGJlCiAgc3Vic2VxdWVudCBzaWJsaW5ncywgaWYgdGhhdCdz IGxlZnQgaW50YWN0KS4gIE90aGVyd2lzZSwKICBzaW5nbGUtc3BhY2luZyBpcyB1c2VkLgoKLSBD cmVhdGlvbiBvZiBzaWJsaW5nIG9yIG5lc3RlZCB0b3BpY3MgaXMgd2l0aCByZXNwZWN0IHRvIHRo ZSB0b3BpYwogIHlvdSdyZSBzdGFydGluZyBmcm9tLCBldmVuIHdoZW4gY3JlYXRpbmcgYmFja3dh cmRzLiAgVGhpcyB3YXkgeW91CiAgY2FuIGVhc2lseSBjcmVhdGUgYSBzaWJsaW5nIGluIGZyb250 IG9mIHRoZSBjdXJyZW50IHRvcGljIHdpdGhvdXQKICBoYXZpbmcgdG8gZ28gdG8gaXRzIHByZWNl ZGluZyBzaWJsaW5nLCBhbmQgdGhlbiBvcGVuIGZvcndhcmQKICBmcm9tIHRoZXJlLiIKCiAgKGFs bG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1saW5lKQogIChsZXQqICgoaW5oaWJpdC1maWVsZC10 ZXh0LW1vdGlvbiB0KQogICAgICAgICAoZGVwdGggKCsgKGFsbG91dC1jdXJyZW50LWRlcHRoKSBy ZWxhdGl2ZS1kZXB0aCkpCiAgICAgICAgIChvcGVuaW5nLW9uLWJsYW5rIChpZiAobG9va2luZy1h dCAiXlwkIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHNldHEgYmVmb3Jl IG5pbCkpKSkKICAgICAgICAgOzsgYnVuY2ggbyB2YXJzIHNldCB3aGlsZSBjb21wdXRpbmcgcmVm LXRvcGljCiAgICAgICAgIG9wZW5pbmctbnVtYmVyZWQKICAgICAgICAgcmVmLWRlcHRoCiAgICAg ICAgIHJlZi1idWxsZXQKICAgICAgICAgKHJlZi10b3BpYyAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgICAgICAgICAgICAgIChjb25kICgoPCByZWxhdGl2ZS1kZXB0aCAwKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChhbGxvdXQtYXNjZW5kLXRvLWRlcHRoIGRlcHRoKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoPj0gcmVsYXRpdmUtZGVwdGggMSkgbmlsKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHQgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykpKQog ICAgICAgICAgICAgICAgICAgICAgKHNldHEgcmVmLWRlcHRoIGFsbG91dC1yZWNlbnQtZGVwdGgp CiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSByZWYtYnVsbGV0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKD4gYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kIDEpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1yZWNlbnQtYnVsbGV0KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIikpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBvcGVuaW5n LW51bWJlcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yICg8PSByZWxhdGl2ZS1kZXB0aCAw KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWRlc2NlbmQt dG8tZGVwdGggZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo YWxsb3V0LW51bWJlcmVkLXR5cGUtcHJlZml4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0KSkpKQogICAgICAgICAgICAgICAgICAg ICAgKHBvaW50KSkpCiAgICAgICAgIGRibC1zcGFjZQogICAgICAgICBkb2luZy1iZWdpbm5pbmcK ICAgICAgICAgc3RhcnQgZW5kKQoKICAgIChpZiAobm90IG9wZW5pbmctb24tYmxhbmspCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFBvc2l0aW9uaW5nIGFuZCB2ZXJ0 aWNhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBwYWRkaW5nIC0g b25seSBpZiBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgb3Bl bmluZy1vbi1ibGFuazoKICAgICAgICAocHJvZ24KICAgICAgICAgIChnb3RvLWNoYXIgcmVmLXRv cGljKQogICAgICAgICAgKHNldHEgZGJsLXNwYWNlICAgICAgICAgICAgICAgOyBEZXRlcm1pbmUg ZG91YmxlIHNwYWNlIGFjdGlvbjoKICAgICAgICAgICAgICAgIChvciAoYW5kICg8PSByZWxhdGl2 ZS1kZXB0aCAwKQk7IG5vdCBkZXNjZW5kaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgKHNh dmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGF0IGItby1iIG9yIHBy ZWNlZGVkIGJ5IGEgYmxhbmsgbGluZT8KICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yICg+ IDAgKGZvcndhcmQtbGluZSAtMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9v a2luZy1hdCAiXlxccy0qJCIpCgkJCSAgICAgICAoYm9icCkpKQogICAgICAgICAgICAgICAgICAg ICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHN1Y2Nl ZWRlZCBieSBhIGJsYW5rIGxpbmU/CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQt ZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvb2tp bmctYXQgIlxuXG4iKSkpCiAgICAgICAgICAgICAgICAgICAgKGFuZCAoPSByZWYtZGVwdGggMSkK ICAgICAgICAgICAgICAgICAgICAgICAgIChvciBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoPSBkZXB0aCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4 Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgRG9uJ3QgYWxyZWFkeSBo YXZlIGZvbGxvd2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgdmVydGljYWwg cGFkZGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKGFsbG91dC1wcmUt bmV4dC1wcmVmaXgpKSkpKSkpCgogICAgICAgICAgOzsgUG9zaXRpb24gdG8gcHJpb3IgaGVhZGlu ZywgaWYgaW5zZXJ0aW5nIGJhY2t3YXJkcywgYW5kIG5vdAogICAgICAgICAgOzsgZ29pbmcgb3V0 d2FyZHM6CiAgICAgICAgICAoaWYgKGFuZCBiZWZvcmUgKD49IHJlbGF0aXZlLWRlcHRoIDApKQoJ ICAgICAgKHByb2duIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSBkb2luZy1iZWdpbm5pbmcgKGJvYnApKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGlmIChub3QgKGJvYnApKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChhbGxvdXQtcHJldmlvdXMtaGVhZGluZykpKQoJICAgIChpZiAoYW5kIGJlZm9y ZSAoYm9icCkpCgkJKG9wZW4tbGluZSAxKSkpCgogICAgICAgICAgKGlmICg8PSByZWxhdGl2ZS1k ZXB0aCAwKQogICAgICAgICAgICAgIDs7IE5vdCBnb2luZyBpbndhcmRzLCBkb24ndCBzbnVnIHVw OgogICAgICAgICAgICAgIChpZiBkb2luZy1iZWdpbm5pbmcKICAgICAgICAgICAgICAgICAgKGlm IChub3QgZGJsLXNwYWNlKQogICAgICAgICAgICAgICAgICAgICAgKG9wZW4tbGluZSAxKQogICAg ICAgICAgICAgICAgICAgIChvcGVuLWxpbmUgMikpCgkJKGlmIGJlZm9yZQoJCSAgICAocHJvZ24g KGVuZC1vZi1saW5lKQoJCQkgICAoYWxsb3V0LXByZS1uZXh0LXByZWZpeCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHdoaWxlIChhbmQgKD0gP1xuIChmb2xsb3dpbmctY2hhcikpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWhpZGRlbi1wKSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAxKSkKCQkJICAgKGlmIChu b3QgKGxvb2tpbmctYXQgIl4kIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Bl bi1saW5lIDEpKSkKCQkgIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkKICAgICAgICAg ICAgICAgICAgKGlmIChsb29raW5nLWF0ICJcblxuIikgKGZvcndhcmQtY2hhciAxKSkpKQogICAg ICAgICAgICA7OyBHb2luZyBpbndhcmRzIC0gZG91YmxlLXNwYWNlIGlmIGZpcnN0IG9mZnNwcmlu ZyBpcwogICAgICAgICAgICA7OyBkb3VibGUtc3BhY2VkLCBvdGhlcndpc2Ugc251ZyB1cC4KICAg ICAgICAgICAgKGFsbG91dC1lbmQtb2YtZW50cnkpCiAgICAgICAgICAgIChpZiAoZW9icCkKICAg ICAgICAgICAgICAgIChuZXdsaW5lIDEpCiAgICAgICAgICAgICAgKGxpbmUtbW92ZSAxKSkKICAg ICAgICAgICAgKGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1saW5lKQogICAgICAgICAgICAo YmFja3dhcmQtY2hhciAxKQogICAgICAgICAgICAoaWYgKGJvbHApCiAgICAgICAgICAgICAgICA7 OyBCbGFuayBsaW5lcyBiZXR3ZWVuIGN1cnJlbnQgaGVhZGVyIGJvZHkgYW5kIG5leHQKICAgICAg ICAgICAgICAgIDs7IGhlYWRlciAtIGdldCB0byBsYXN0IHN1YnN0YW50aXZlIChub24td2hpdGUt c3BhY2UpCiAgICAgICAgICAgICAgICA7OyBsaW5lIGluIGJvZHk6CiAgICAgICAgICAgICAgICAo cHJvZ24gKHNldHEgZGJsLXNwYWNlIHQpCiAgICAgICAgICAgICAgICAgICAgICAgKHJlLXNlYXJj aC1iYWNrd2FyZCAiW14gXHRcbl0iIG5pbCB0KSkpCiAgICAgICAgICAgIChpZiAobG9va2luZy1h dCAiXG5cbiIpCiAgICAgICAgICAgICAgICAoc2V0cSBkYmwtc3BhY2UgdCkpCiAgICAgICAgICAg IChpZiAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgKGFsbG91dC1uZXh0LWhlYWRp bmcpCiAgICAgICAgICAgICAgICAgICh3aGVuICg+IGFsbG91dC1yZWNlbnQtZGVwdGggcmVmLWRl cHRoKQogICAgICAgICAgICAgICAgICAgIDs7IFRoaXMgaXMgYW4gb2Zmc3ByaW5nLgogICAgICAg ICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgLTEpCiAgICAgICAgICAgICAgICAgICAgKGxvb2tp bmctYXQgIl5cXHMtKiQiKSkpCiAgICAgICAgICAgICAgICAocHJvZ24gKGZvcndhcmQtbGluZSAx KQogICAgICAgICAgICAgICAgICAgICAgIChvcGVuLWxpbmUgMSkKICAgICAgICAgICAgICAgICAg ICAgICAoZm9yd2FyZC1saW5lIDEpKSkKICAgICAgICAgICAgKGFsbG91dC1lbmQtb2YtY3VycmVu dC1saW5lKSkKCiAgICAgICAgICA7OyhpZiBkb2luZy1iZWdpbm5pbmcgKGdvdG8tY2hhciBkb2lu Zy1iZWdpbm5pbmcpKQogICAgICAgICAgKGlmIChub3QgKGJvYnApKQogICAgICAgICAgICAgIDs7 IFdlIGluc2VydCBhIG5ld2xpbmUgY2hhciByYXRoZXIgdGhhbiB1c2luZyBvcGVuLWxpbmUgdG8K ICAgICAgICAgICAgICA7OyBhdm9pZCByZWFyLXN0aWNraW5lc3MgaW5oZXJpdGVuY2Ugb2YgcmVh ZC1vbmx5IHByb3BlcnR5LgogICAgICAgICAgICAgIChwcm9nbiAoaWYgKGFuZCAobm90ICg+IGRl cHRoIHJlZi1kZXB0aCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgYmVmb3Jl KSkKICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLWxpbmUgMSkKCQkgICAgICAgKGlmIChh bmQgKG5vdCBkYmwtc3BhY2UpICg+IGRlcHRoIHJlZi1kZXB0aCkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIChuZXdsaW5lIDEpCgkJCSAoaWYgZGJsLXNwYWNlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG9wZW4tbGluZSAxKQoJCQkgICAoaWYgKG5vdCBiZWZvcmUpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobmV3bGluZSAxKSkpKSkKICAgICAgICAgICAgICAgICAg ICAgKGlmIChhbmQgZGJsLXNwYWNlIChub3QgKD4gcmVsYXRpdmUtZGVwdGggMCkpKQoJCQkgKG5l d2xpbmUgMSkpCiAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIChub3QgKGVvYnApKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKG5vdCAoYm9scCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYW5kIChub3QgKGJvYnApKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBib2xwIGRvZXNudCBkZXRlY3QgY29uY2VhbGVkCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHRyYWlsaW5nIG5ld2xpbmVzLCBj b21wZW5zYXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1l eGN1cnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2Fy ZC1jaGFyIC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxv dXQtaGlkZGVuLXApKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAx KSkpKQogICAgICAgICAgKSkKICAgIChzZXRxIHN0YXJ0IChwb2ludCkpCiAgICAoaW5zZXJ0IChj b25jYXQgKGFsbG91dC1tYWtlLXRvcGljLXByZWZpeCBvcGVuaW5nLW51bWJlcmVkIHQgZGVwdGgp CiAgICAgICAgICAgICAgICAgICAgIiAiKSkKICAgIChzZXRxIGVuZCAoMSsgKHBvaW50KSkpCgog ICAgKGFsbG91dC1yZWJ1bGxldC1oZWFkaW5nIChhbmQgb2ZmZXItcmVjZW50LWJ1bGxldCByZWYt YnVsbGV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCBuaWwgbmlsIHQpCiAg ICAoaWYgKD4gcmVsYXRpdmUtZGVwdGggMCkKICAgICAgICAoc2F2ZS1leGN1cnNpb24gKGdvdG8t Y2hhciByZWYtdG9waWMpCiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtc2hvdy1jaGls ZHJlbikpKQogICAgKGVuZC1vZi1saW5lKQoKICAgIChydW4taG9vay13aXRoLWFyZ3MgJ2FsbG91 dC1zdHJ1Y3R1cmUtYWRkZWQtaG9vayBzdGFydCBlbmQpCiAgICApCiAgKQo7OztfICAgPiBhbGxv dXQtb3Blbi1zdWJ0b3BpYyAoYXJnKQooZGVmdW4gYWxsb3V0LW9wZW4tc3VidG9waWMgKGFyZykK ICAiT3BlbiBuZXcgdG9waWMgaGVhZGVyIGF0IGRlZXBlciBsZXZlbCB0aGFuIHRoZSBjdXJyZW50 IG9uZS4KCk5lZ2F0aXZlIHVuaXZlcnNhbCBhcmcgbWVhbnMgdG8gb3BlbiBkZWVwZXIsIGJ1dCBw bGFjZSB0aGUgbmV3IHRvcGljCnByaW9yIHRvIHRoZSBjdXJyZW50IG9uZS4iCiAgKGludGVyYWN0 aXZlICJwIikKICAoYWxsb3V0LW9wZW4tdG9waWMgMSAoPiAwIGFyZykgKDwgMSBhcmcpKSkKOzs7 XyAgID4gYWxsb3V0LW9wZW4tc2lidG9waWMgKGFyZykKKGRlZnVuIGFsbG91dC1vcGVuLXNpYnRv cGljIChhcmcpCiAgIk9wZW4gbmV3IHRvcGljIGhlYWRlciBhdCBzYW1lIGxldmVsIGFzIHRoZSBj dXJyZW50IG9uZS4KClBvc2l0aXZlIHVuaXZlcnNhbCBhcmcgbWVhbnMgdG8gdXNlIHRoZSBidWxs ZXQgb2YgdGhlIHByaW9yIHNpYmxpbmcuCgpOZWdhdGl2ZSB1bml2ZXJzYWwgYXJnIG1lYW5zIHRv IHBsYWNlIHRoZSBuZXcgdG9waWMgcHJpb3IgdG8gdGhlIGN1cnJlbnQKb25lLiIKICAoaW50ZXJh Y3RpdmUgInAiKQogIChhbGxvdXQtb3Blbi10b3BpYyAwICg+IDAgYXJnKSAobm90ICg9IDEgYXJn KSkpKQo7OztfICAgPiBhbGxvdXQtb3Blbi1zdXBlcnRvcGljIChhcmcpCihkZWZ1biBhbGxvdXQt b3Blbi1zdXBlcnRvcGljIChhcmcpCiAgIk9wZW4gbmV3IHRvcGljIGhlYWRlciBhdCBzaGFsbG93 ZXIgbGV2ZWwgdGhhbiB0aGUgY3VycmVudCBvbmUuCgpOZWdhdGl2ZSB1bml2ZXJzYWwgYXJnIG1l YW5zIHRvIG9wZW4gc2hhbGxvd2VyLCBidXQgcGxhY2UgdGhlIG5ldwp0b3BpYyBwcmlvciB0byB0 aGUgY3VycmVudCBvbmUuIgoKICAoaW50ZXJhY3RpdmUgInAiKQogIChhbGxvdXQtb3Blbi10b3Bp YyAtMSAoPiAwIGFyZykgKDwgMSBhcmcpKSkKCjs7O18gIC0gT3V0bGluZSBBbHRlcmF0aW9uCjs7 O18gICA6IFRvcGljIE1vZGlmaWNhdGlvbgo7OztfICAgID0gYWxsb3V0LWZvcm1lci1hdXRvLWZp bGxlcgooZGVmdmFyIGFsbG91dC1mb3JtZXItYXV0by1maWxsZXIgbmlsCiAgIk5hbWUgb2YgbW9k YWwgZmlsbCBmdW5jdGlvbiBiZWluZyB3cmFwcGVkIGJ5IGBhbGxvdXQtYXV0by1maWxsJy4iKQo7 OztfICAgID4gYWxsb3V0LWF1dG8tZmlsbCAoKQooZGVmdW4gYWxsb3V0LWF1dG8tZmlsbCAoKQog ICJgYWxsb3V0LW1vZGUnIGF1dG9maWxsIGZ1bmN0aW9uLgoKTWFpbnRhaW5zIG91dGxpbmUgaGFu Z2luZyB0b3BpYyBpbmRlbnRhdGlvbiBpZgpgYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMnIGlz IHNldC4iCgogICh3aGVuIChub3QgYWxsb3V0LWluaGliaXQtYXV0by1maWxsKQogICAgKGxldCAo KGZpbGwtcHJlZml4IChpZiBhbGxvdXQtdXNlLWhhbmdpbmctaW5kZW50cwogICAgICAgICAgICAg ICAgICAgICAgICAgICA7OyBDaGVjayBmb3IgdG9waWMgaGVhZGVyIGluZGVudGF0aW9uOgogICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGlmIChsb29raW5nLWF0IGFsbG91dC1yZWdleHApCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IC4uLiBjb25zdHJ1Y3QgaW5kZW50YXRpb24gdG8gYWNjb3VudCBmb3IKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgbGVuZ3RoIG9mIHRvcGljIHByZWZpeDoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2Utc3RyaW5nIChwcm9nbiAoYWxs b3V0LWVuZC1vZi1wcmVmaXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGN1cnJlbnQtY29sdW1uKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID9cICkpKSkpCiAgICAgICAgICAodXNlLWF1dG8tZmlsbC1m dW5jdGlvbiAob3IgYWxsb3V0LW91dHNpZGUtbm9ybWFsLWF1dG8tZmlsbC1mdW5jdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8tZmlsbC1mdW5jdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkby1hdXRvLWZpbGwpKSkKICAgICAg KGlmIChvciBhbGxvdXQtZm9ybWVyLWF1dG8tZmlsbGVyIGFsbG91dC11c2UtaGFuZ2luZy1pbmRl bnRzKQogICAgICAgICAgKGZ1bmNhbGwgdXNlLWF1dG8tZmlsbC1mdW5jdGlvbikpKSkpCjs7O18g ICAgPiBhbGxvdXQtcmVpbmRlbnQtYm9keSAob2xkLWRlcHRoIG5ldy1kZXB0aCAmb3B0aW9uYWwg bnVtYmVyKQooZGVmdW4gYWxsb3V0LXJlaW5kZW50LWJvZHkgKG9sZC1kZXB0aCBuZXctZGVwdGgg Jm9wdGlvbmFsIG51bWJlcikKICAiUmVpbmRlbnQgYm9keSBsaW5lcyB3aGljaCB3ZXJlIGluZGVu dGVkIGF0IE9MRC1ERVBUSCB0byBORVctREVQVEguCgpPcHRpb25hbCBhcmcgTlVNQkVSIGluZGlj YXRlcyBudW1iZXJpbmcgaXMgYmVpbmcgYWRkZWQsIGFuZCBpdCBtdXN0CmJlIGFjY29tbW9kYXRl ZC4KCk5vdGUgdGhhdCByZWZpbGwgb2YgaW5kZW50ZWQgcGFyYWdyYXBocyBpcyBub3QgZG9uZS4i CgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGFsbG91dC1lbmQtb2YtcHJlZml4KQogICAgKGxldCog KChuZXctbWFyZ2luIChjdXJyZW50LWNvbHVtbikpCgkgICBleGNlc3Mgb2xkLWluZGVudC1iZWdp biBvbGQtaW5kZW50LWVuZAoJICAgOzsgV2Ugd2FudCB0aGUgY29sdW1uIHdoZXJlIHRoZSBoZWFk ZXItcHJlZml4IHRleHQgc3RhcnRlZAoJICAgOzsgKmJlZm9yZSogdGhlIHByZWZpeCB3YXMgY2hh bmdlZCwgc28gd2UgaW5mZXIgaXQgcmVsYXRpdmUKCSAgIDs7IHRvIHRoZSBuZXcgbWFyZ2luIGFu ZCB0aGUgc2hpZnQgaW4gZGVwdGg6CgkgICAob2xkLW1hcmdpbiAoKyBvbGQtZGVwdGggKC0gbmV3 LW1hcmdpbiBuZXctZGVwdGgpKSkpCgogICAgICA7OyBQcm9jZXNzIGxpbmVzIHVwIHRvIChidXQg ZXhjbHVkaW5nKSBuZXh0IHRvcGljIGhlYWRlcjoKICAgICAgKGFsbG91dC11bnByb3RlY3RlZAog ICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgICAod2hpbGUKCSAgICAgKGFuZCAocmUtc2Vh cmNoLWZvcndhcmQgIlxuXFwoXFxzLSpcXCkiCgkJCQkgICAgIG5pbAoJCQkJICAgICB0KQoJCSAg OzsgUmVnaXN0ZXIgdGhlIGluZGVudCBkYXRhLCBiZWZvcmUgd2UgcmVzZXQgdGhlCgkJICA7OyBt YXRjaCBkYXRhIHdpdGggYSBzdWJzZXF1ZW50IGBsb29raW5nLWF0JzoKCQkgIChzZXRxIG9sZC1p bmRlbnQtYmVnaW4gKG1hdGNoLWJlZ2lubmluZyAxKQoJCQlvbGQtaW5kZW50LWVuZCAobWF0Y2gt ZW5kIDEpKQoJCSAgKG5vdCAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKSkpCgkgICAoaWYgKD4g MCAoc2V0cSBleGNlc3MgKC0gKC0gb2xkLWluZGVudC1lbmQgb2xkLWluZGVudC1iZWdpbikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLW1hcmdpbikpKQoJICAgICAgIDs7 IFRleHQgc3RhcnRzIGxlZnQgb2Ygb2xkIG1hcmdpbiAtIGRvbid0IGFkanVzdDoKCSAgICAgICBu aWwKCSAgICAgOzsgVGV4dCB3YXMgaGFuZ2luZyBhdCBvciByaWdodCBvZiBvbGQgbGVmdCBtYXJn aW4gLQoJICAgICA7OyByZWluZGVudCBpdCwgcHJlc2VydmluZyBpdHMgZXhpc3RpbmcgaW5kZW50 YXRpb24KCSAgICAgOzsgYmV5b25kIHRoZSBvbGQgbWFyZ2luOgoJICAgICAoZGVsZXRlLXJlZ2lv biBvbGQtaW5kZW50LWJlZ2luIG9sZC1pbmRlbnQtZW5kKQogICAgICAgICAgICAgKGluZGVudC10 byAoKyBuZXctbWFyZ2luIGV4Y2VzcyAoY3VycmVudC1jb2x1bW4pKSkpKSkpKSkpCjs7O18gICAg PiBhbGxvdXQtcmVidWxsZXQtY3VycmVudC1oZWFkaW5nIChhcmcpCihkZWZ1biBhbGxvdXQtcmVi dWxsZXQtY3VycmVudC1oZWFkaW5nIChhcmcpCiAgIlNvbGljaXQgbmV3IGJ1bGxldCBmb3IgY3Vy cmVudCB2aXNpYmxlIGhlYWRpbmcuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKGxldCAoKGluaXRp YWwtY29sIChjdXJyZW50LWNvbHVtbikpCgkob24tYnVsbGV0IChlcSAocG9pbnQpKGFsbG91dC1j dXJyZW50LWJ1bGxldC1wb3MpKSkKICAgICAgICBmcm9tIHRvCgkoYmFja3dhcmRzIChpZiAoPCBh cmcgMCkKCQkgICAgICAgKHNldHEgYXJnICgqIGFyZyAtMSkpKSkpCiAgICAod2hpbGUgKD4gYXJn IDApCiAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5n KQoJCSAgICAgIChhbGxvdXQtZW5kLW9mLXByZWZpeCkKICAgICAgICAgICAgICAgICAgICAgIChz ZXRxIGZyb20gYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQpCgkJICAgICAgKGFsbG91dC1y ZWJ1bGxldC1oZWFkaW5nIHQJOzs7IHNvbGljaXQKCQkJCQkJbmlsCTs7OyBkZXB0aAoJCQkJCQlu aWwJOzs7IG51bWJlci1jb250cm9sCgkJCQkJCW5pbAk7OzsgaW5kZXgKCQkJCQkJdCkJOzs7IGRv LXN1Y2Nlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgIChydW4taG9vay13aXRoLWFyZ3MgJ2Fs bG91dC1leHBvc3VyZS1jaGFuZ2UtaG9vawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmcm9tIHRvIHQpKQogICAgICAoc2V0cSBhcmcgKDEtIGFyZykpCiAgICAgIChp ZiAoPD0gYXJnIDApCgkgIG5pbAoJKHNldHEgaW5pdGlhbC1jb2wgbmlsKQkJOyBPdmVycmlkZSBw b3NpdGlvbmluZyBiYWNrIHRvIGluaXQgY29sCgkoaWYgKG5vdCBiYWNrd2FyZHMpCgkgICAgKGFs bG91dC1uZXh0LXZpc2libGUtaGVhZGluZyAxKQoJICAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJs ZWNoZWNrZWQpCgkgIChhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgLTEpKSkpCiAgICAobWVz c2FnZSAiRG9uZS4iKQogICAgKGNvbmQgKG9uLWJ1bGxldCAoZ290by1jaGFyIChhbGxvdXQtY3Vy cmVudC1idWxsZXQtcG9zKSkpCgkgIChpbml0aWFsLWNvbCAobW92ZS10by1jb2x1bW4gaW5pdGlh bC1jb2wpKSkpKQo7OztfICAgID4gYWxsb3V0LXJlYnVsbGV0LWhlYWRpbmcgKCZvcHRpb25hbCBz b2xpY2l0IC4uLikKKGRlZnVuIGFsbG91dC1yZWJ1bGxldC1oZWFkaW5nICgmb3B0aW9uYWwgc29s aWNpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LWRlcHRo CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXItY29udHJv bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvLXN1Y2Nlc3NvcnMpCgogICJB ZGp1c3QgYnVsbGV0IG9mIGN1cnJlbnQgdG9waWMgcHJlZml4LgoKQWxsIGFyZ3MgYXJlIG9wdGlv bmFsLgoKSWYgU09MSUNJVCBpcyBub24tbmlsLCB0aGVuIHRoZSBjaG9pY2Ugb2YgYnVsbGV0IGlz IHNvbGljaXRlZCBmcm9tCnVzZXIuICBJZiBpdCdzIGEgY2hhcmFjdGVyLCB0aGVuIHRoYXQgY2hh cmFjdGVyIGlzIG9mZmVyZWQgYXMgdGhlCmRlZmF1bHQsIG90aGVyd2lzZSB0aGUgb25lIHN1aXRl ZCB0byB0aGUgY29udGV4dCBcKGFjY29yZGluZyB0bwpkaXN0aW5jdGlvbiBvciBkZXB0aCkgaXMg b2ZmZXJlZC4gIElmIG5vbi1uaWwsIHRoZW4gdGhlCmNvbnRleHQtc3BlY2lmaWMgYnVsbGV0IGlz IGp1c3QgdXNlZC4KClNlY29uZCBhcmcgREVQVEggZm9yY2VzIHRoZSB0b3BpYyBwcmVmaXggdG8g dGhhdCBkZXB0aCwgcmVnYXJkbGVzcwpvZiB0aGUgdG9waWMncyBjdXJyZW50IGRlcHRoLgoKVGhp cmQgYXJnIE5VTUJFUi1DT05UUk9MIGNhbiBmb3JjZSB0aGUgcHJlZml4IHRvIG9yIGF3YXkgZnJv bQpudW1iZXJlZCBmb3JtLiAgSXQgaGFzIGVmZmVjdCBvbmx5IGlmIGBhbGxvdXQtbnVtYmVyZWQt YnVsbGV0JyBpcwpub24tbmlsIGFuZCBzb2xpY2l0aW5nIHdhcyBub3QgZXhwbGljaXRseSBpbnZv a2VkICh2aWEgZmlyc3QgYXJnKS4KSXRzIGVmZmVjdCwgbnVtYmVyaW5nIG9yIGRlbnVtYmVyaW5n LCB0aGVuIGRlcGVuZHMgb24gdGhlIHNldHRpbmcKb2YgdGhlIGZvcnRoIGFyZywgSU5ERVguCgpJ ZiBOVU1CRVItQ09OVFJPTCBpcyBub24tbmlsIGFuZCBmb3J0aCBhcmcgSU5ERVggaXMgbmlsLCB0 aGVuIHRoZQpwcmVmaXggb2YgdGhlIHRvcGljIGlzIGZvcmNlZCB0byBiZSBub24tbnVtYmVyZWQu ICBOdWxsIGluZGV4IGFuZApub24tbmlsIE5VTUJFUi1DT05UUk9MIGZvcmNlcyBkZW51bWJlcmlu Zy4gIE5vbi1uaWwgSU5ERVggKGFuZApub24tbmlsIE5VTUJFUi1DT05UUk9MKSBmb3JjZXMgYSBu dW1iZXJlZC1wcmVmaXggZm9ybS4gIElmIG5vbi1uaWwKSU5ERVggaXMgYSBudW1iZXIsIHRoZW4g dGhhdCBudW1iZXIgaXMgdXNlZCBmb3IgdGhlIG51bWJlcmVkCnByZWZpeC4gIE5vbi1uaWwgYW5k IG5vbi1udW1iZXIgbWVhbnMgdGhhdCB0aGUgaW5kZXggZm9yIHRoZQpudW1iZXJlZCBwcmVmaXgg d2lsbCBiZSBkZXJpdmVkIGJ5IGFsbG91dC1tYWtlLXRvcGljLXByZWZpeC4KCkZpZnRoIGFyZyBE Ty1TVUNDRVNTT1JTIHQgbWVhbnMgcmUtcmVzb2x2ZSBjb3VudCBvbiBzdWNjZWVkaW5nCnNpYmxp bmdzLgoKQ2YgdmFycyBgYWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMnLCBgYWxsb3V0LW9sZC1zdHls ZS1wcmVmaXhlcycsCmFuZCBgYWxsb3V0LW51bWJlcmVkLWJ1bGxldCcsIHdoaWNoIGFsbCBhZmZl Y3QgdGhlIGJlaGF2aW9yIG9mCnRoaXMgZnVuY3Rpb24uIgoKICAobGV0KiAoKGN1cnJlbnQtZGVw dGggKGFsbG91dC1kZXB0aCkpCiAgICAgICAgIChuZXctZGVwdGggKG9yIG5ldy1kZXB0aCBjdXJy ZW50LWRlcHRoKSkKICAgICAgICAgKG1iIGFsbG91dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZykK ICAgICAgICAgKG1lIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCkKICAgICAgICAgKGN1cnJlbnQt YnVsbGV0IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKC0gbWUgMSkgbWUpKQogICAg ICAgICAoaGFzLWFubm90YXRpb24gKGdldC10ZXh0LXByb3BlcnR5IG1iICdhbGxvdXQtd2FzLWhp ZGRlbikpCiAgICAgICAgIChuZXctcHJlZml4IChhbGxvdXQtbWFrZS10b3BpYy1wcmVmaXggY3Vy cmVudC1idWxsZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l dy1kZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz b2xpY2l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51 bWJlci1jb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluZGV4KSkpCgogICAgOzsgSXMgbmV3IG9uZSBpcyBpZGVudGljYWwgdG8gb2xkPwogICAg KGlmIChhbmQgKD0gY3VycmVudC1kZXB0aCBuZXctZGVwdGgpCiAgICAgICAgICAgICAoc3RyaW5n PSBjdXJyZW50LWJ1bGxldAogICAgICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBuZXctcHJl Zml4ICgxLSAobGVuZ3RoIG5ldy1wcmVmaXgpKSkpKQoJOzsgTm90aGluZyB0byBkbzoKICAgICAg ICB0CgogICAgICA7OyBOZXcgcHJlZml4IHByb2JhYmx5IGRpZmZlcmVudCBmcm9tIG9sZDoKCQkJ CQk7IGdldCByaWQgb2Ygb2xkIG9uZToKICAgICAgKGFsbG91dC11bnByb3RlY3RlZCAoZGVsZXRl LXJlZ2lvbiBtYiBtZSkpCiAgICAgIChnb3RvLWNoYXIgbWIpCgkJCQkJOyBEaXNwZW5zZSB3aXRo IG51bWJlciBpZgoJCQkJCTsgbnVtYmVyZWQtYnVsbGV0IHByZWZpeDoKICAgICAgKGlmIChhbmQg YWxsb3V0LW51bWJlcmVkLWJ1bGxldAogICAgICAgICAgICAgICAoc3RyaW5nPSBhbGxvdXQtbnVt YmVyZWQtYnVsbGV0IGN1cnJlbnQtYnVsbGV0KQogICAgICAgICAgICAgICAobG9va2luZy1hdCAi WzAtOV0rIikpCgkgIChhbGxvdXQtdW5wcm90ZWN0ZWQKCSAgIChkZWxldGUtcmVnaW9uIChtYXRj aC1iZWdpbm5pbmcgMCkobWF0Y2gtZW5kIDApKSkpCgogICAgICA7OyBjb252ZXkgJ2FsbG91dC13 YXMtaGlkZGVuIGFubm90YXRpb24sIGlmIG9yaWdpbmFsIGhhZCBpdDoKICAgICAgKGlmIGhhcy1h bm5vdGF0aW9uCiAgICAgICAgICAocHV0LXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIG5ldy1wcmVm aXgpICdhbGxvdXQtd2FzLWhpZGRlbiB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 LXByZWZpeCkpCgoJCQkJCTsgUHV0IGluIG5ldyBwcmVmaXg6CiAgICAgIChhbGxvdXQtdW5wcm90 ZWN0ZWQgKGluc2VydCBuZXctcHJlZml4KSkKCiAgICAgIDs7IFJlaW5kZW50IHRoZSBib2R5IGlm IGVsZWN0ZWQsIG1hcmdpbiBjaGFuZ2VkLCBhbmQgbm90IGVuY3J5cHRlZCBib2R5OgogICAgICAo aWYgKGFuZCBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzCgkgICAgICAgKG5vdCAoPSBuZXctZGVwdGgg Y3VycmVudC1kZXB0aCkpCiAgICAgICAgICAgICAgIChub3QgKGFsbG91dC1lbmNyeXB0ZWQtdG9w aWMtcCkpKQoJICAoYWxsb3V0LXJlaW5kZW50LWJvZHkgY3VycmVudC1kZXB0aCBuZXctZGVwdGgp KQoKICAgICAgOzsgUmVjdXJzaXZlbHkgcmVjdGlmeSBzdWNjZXNzaXZlIHNpYmxpbmdzIG9mIG9y aWcgdG9waWMgaWYKICAgICAgOzsgY2FsbGVyIGVsZWN0ZWQgZm9yIGl0OgogICAgICAoaWYgZG8t c3VjY2Vzc29ycwoJICAoc2F2ZS1leGN1cnNpb24KCSAgICAod2hpbGUgKGFsbG91dC1uZXh0LXNp YmxpbmcgbmV3LWRlcHRoIG5pbCkKCSAgICAgIChzZXRxIGluZGV4CgkJICAgIChjb25kICgobnVt YmVycCBpbmRleCkgKDErIGluZGV4KSkKCQkJICAoKG5vdCBudW1iZXItY29udHJvbCkgIChhbGxv dXQtc2libGluZy1pbmRleCkpKSkKCSAgICAgIChpZiAoYWxsb3V0LW51bWJlcmVkLXR5cGUtcHJl Zml4KQoJCSAgKGFsbG91dC1yZWJ1bGxldC1oZWFkaW5nIG5pbAkJOzs7IHNvbGljaXQKCQkJCQkg ICAgbmV3LWRlcHRoCTs7OyBuZXctZGVwdGgKCQkJCQkgICAgbnVtYmVyLWNvbnRyb2w7OzsgbnVt YmVyLWNvbnRyb2wKCQkJCQkgICAgaW5kZXgJOzs7IGluZGV4CgkJCQkJICAgIG5pbCkpKSkpCTs7 Oyhkb250ISlkby1zdWNjZXNzb3JzCiAgICAgICkJOyAoaWYgKGFuZCAoPSBjdXJyZW50LWRlcHRo IG5ldy1kZXB0aCkuLi4pKQogICAgKSA7IGxldCogKChjdXJyZW50LWRlcHRoIChhbGxvdXQtZGVw dGgpKS4uLikKICApIDsgZGVmdW4KOzs7XyAgICA+IGFsbG91dC1yZWJ1bGxldC10b3BpYyAoYXJn KQooZGVmdW4gYWxsb3V0LXJlYnVsbGV0LXRvcGljIChhcmcgJm9wdGlvbmFsIHNhbnMtb2Zmc3By aW5nKQogICJSZWJ1bGxldCB0aGUgdmlzaWJsZSB0b3BpYyBjb250YWluaW5nIHBvaW50IGFuZCBh bGwgY29udGFpbmVkIHN1YnRvcGljcy4KCkRlc2NlbmRzIGludG8gaW52aXNpYmxlIGFzIHdlbGwg YXMgdmlzaWJsZSB0b3BpY3MsIGhvd2V2ZXIuCgpXaGVuIG9wdGlvbmFsIHNhbnMtb2Zmc3ByaW5n IGlzIG5vbi1uaWwsIHN1YnRvcGljcyBhcmUgbm90CnNoaWZ0ZWQuICBcKFNoaWZ0aW5nIGEgdG9w aWMgb3V0d2FyZHMgd2l0aG91dCBzaGlmdGluZyBpdHMKb2Zmc3ByaW5nIGlzIGRpc2FsbG93ZWQs IHNpbmNlIHRoaXMgd291bGQgY3JlYXRlIGEgXCJjb250YWlubWVudApkaXNjb250aW51aXR5XCIs IHdoZXJlIHRoZSBkZXB0aCBkaWZmZXJlbmNlIGJldHdlZW4gYSB0b3BpYyBhbmQKaXRzIGltbWVk aWF0ZSBvZmZzcHJpbmcgaXMgZ3JlYXRlciB0aGFuIG9uZS4pCgpXaXRoIHJlcGVhdCBjb3VudCwg c2hpZnQgdG9waWMgZGVwdGggYnkgdGhhdCBhbW91bnQuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAg KGxldCAoKHN0YXJ0LWNvbCAoY3VycmVudC1jb2x1bW4pKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgog ICAgICA7OyBOb3JtYWxpemUgYXJnOgogICAgICAoY29uZCAoKG51bGwgYXJnKSAoc2V0cSBhcmcg MCkpCiAgICAgICAgICAgICgobGlzdHAgYXJnKSAoc2V0cSBhcmcgKGNhciBhcmcpKSkpCiAgICAg IDs7IEZpbGwgdGhlIHVzZXIgaW4sIGluIGNhc2Ugd2UncmUgc2hpZnRpbmcgYSBiaWcgdG9waWM6 CiAgICAgIChpZiAobm90ICh6ZXJvcCBhcmcpKSAobWVzc2FnZSAiU2hpZnRpbmcuLi4iKSkKICAg ICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgICAgKGlmICg8PSAoKyBhbGxv dXQtcmVjZW50LWRlcHRoIGFyZykgMCkKICAgICAgICAgIChlcnJvciAiQXR0ZW1wdCB0byBzaGlm dCB0b3BpYyBiZWxvdyBsZXZlbCAxIikpCiAgICAgIChhbGxvdXQtcmVidWxsZXQtdG9waWMtZ3J1 bnQgYXJnIG5pbCBuaWwgbmlsIG5pbCBzYW5zLW9mZnNwcmluZykKICAgICAgKGlmIChub3QgKHpl cm9wIGFyZykpIChtZXNzYWdlICJTaGlmdGluZy4uLiBkb25lLiIpKSkKICAgIChtb3ZlLXRvLWNv bHVtbiAobWF4IDAgKCsgc3RhcnQtY29sIGFyZykpKSkpCjs7O18gICAgPiBhbGxvdXQtcmVidWxs ZXQtdG9waWMtZ3J1bnQgKCZvcHRpb25hbCByZWxhdGl2ZS1kZXB0aCAuLi4pCihkZWZ1biBhbGxv dXQtcmVidWxsZXQtdG9waWMtZ3J1bnQgKCZvcHRpb25hbCByZWxhdGl2ZS1kZXB0aAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nLWRlcHRoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmctcG9p bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvLXN1Y2Nlc3Nv cnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5zLW9m ZnNwcmluZykKICAiTGlrZSBgYWxsb3V0LXJlYnVsbGV0LXRvcGljJywgYnV0IG9uIG5lYXJlc3Qg Y29udGFpbmluZyB0b3BpYwpcKHZpc2libGUgb3Igbm90KS4KClNlZSBgYWxsb3V0LXJlYnVsbGV0 LWhlYWRpbmcnIGZvciByZWJ1bGxldGluZyBiZWhhdmlvci4KCkFsbCBhcmd1bWVudHMgYXJlIG9w dGlvbmFsLgoKRmlyc3QgYXJnIFJFTEFUSVZFLURFUFRIIG1lYW5zIHRvIHNoaWZ0IHRoZSBkZXB0 aCBvZiB0aGUgZW50aXJlCnRvcGljIHRoYXQgYW1vdW50LgoKU2V2ZXJhbCBzdWJzZXF1ZW50IGFy Z3MgYXJlIGZvciBpbnRlcm5hbCByZWN1cnNpdmUgdXNlIGJ5IHRoZSBmdW5jdGlvbgppdHNlbGY6 IFNUQVJUSU5HLURFUFRILCBTVEFSVElORy1QT0lOVCwgYW5kIElOREVYLgoKRmluYWxseSwgaWYg b3B0aW9uYWwgU0FOUy1PRkZTUFJJTkcgaXMgbm9uLW5pbCB0aGVuIHRoZSBvZmZzcHJpbmcKYXJl IG5vdCBzaGlmdGVkLiAgXChTaGlmdGluZyBhIHRvcGljIG91dHdhcmRzIHdpdGhvdXQgc2hpZnRp bmcKaXRzIG9mZnNwcmluZyBpcyBkaXNhbGxvd2VkLCBzaW5jZSB0aGlzIHdvdWxkIGNyZWF0ZSBh ClwiY29udGFpbm1lbnQgZGlzY29udGludWl0eVwiLCB3aGVyZSB0aGUgZGVwdGggZGlmZmVyZW5j ZSBiZXR3ZWVuCmEgdG9waWMgYW5kIGl0cyBpbW1lZGlhdGUgb2Zmc3ByaW5nIGlzIGdyZWF0ZXIg dGhhbiBvbmUuLikiCgogIDs7IFhYWCB0aGUgcmVjdXJzaW9uIGhlcmUgaXMgcGVjdWxpYXIsIGFu ZCBpbiBnZW5lcmFsIHRoZSByb3V0aW5lIG1heQogIDs7IG5lZWQgc2ltcGxpZmljYXRpb24gd2l0 aCByZWZhY3RvcmluZy4KCiAgKGlmIChhbmQgc2Fucy1vZmZzcHJpbmcKICAgICAgICAgICByZWxh dGl2ZS1kZXB0aAogICAgICAgICAgICg8IHJlbGF0aXZlLWRlcHRoIDApKQogICAgICAoZXJyb3Ig KGNvbmNhdCAiQXR0ZW1wdCB0byBzaGlmdCB0b3BpYyBvdXR3YXJkcyB3aXRob3V0IG9mZnNwcmlu ZywiCiAgICAgICAgICAgICAgICAgICAgICIgd291bGQgY2F1c2UgY29udGFpbm1lbnQgZGlzY29u dGludWl0eS4iKSkpCgogIChsZXQqICgocmVsYXRpdmUtZGVwdGggKG9yIHJlbGF0aXZlLWRlcHRo IDApKQogICAgICAgICAobmV3LWRlcHRoIChhbGxvdXQtZGVwdGgpKQogICAgICAgICAoc3RhcnRp bmctZGVwdGggKG9yIHN0YXJ0aW5nLWRlcHRoIG5ldy1kZXB0aCkpCiAgICAgICAgIChvbi1zdGFy dGluZy1jYWxsICAobnVsbCBzdGFydGluZy1wb2ludCkpCiAgICAgICAgIChpbmRleCAob3IgaW5k ZXgKICAgICAgICAgICAgICAgICAgICA7OyBMZWF2ZSBpbmRleCBudWxsIG9uIHN0YXJ0aW5nIGNh bGwsIHNvIHJlYnVsbGV0LWhlYWRpbmcKICAgICAgICAgICAgICAgICAgICA7OyBjYWxjdWxhdGVz IGl0IGF0IHdoYXQgbWlnaHQgYmUgbmV3IGRlcHRoOgogICAgICAgICAgICAgICAgICAgIChhbmQg KG9yICh6ZXJvcCByZWxhdGl2ZS1kZXB0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bm90IG9uLXN0YXJ0aW5nLWNhbGwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1z aWJsaW5nLWluZGV4KSkpKQogICAgICAgICAoc3RhcnRpbmctaW5kZXggaW5kZXgpCiAgICAgICAg IChtb3Zpbmctb3V0d2FyZHMgKDwgMCByZWxhdGl2ZS1kZXB0aCkpCiAgICAgICAgIChzdGFydGlu Zy1wb2ludCAob3Igc3RhcnRpbmctcG9pbnQgKHBvaW50KSkpCiAgICAgICAgIChsb2NhbC1wb2lu dCAocG9pbnQpKSkKCiAgICA7OyBTYW5pdHkgY2hlY2sgZm9yIGV4Y2Vzc2l2ZSBwcm9tb3Rpb24g ZG9uZSBvbmx5IG9uIHN0YXJ0aW5nIGNhbGw6CiAgICAoYW5kIG9uLXN0YXJ0aW5nLWNhbGwKICAg ICAgICAgbW92aW5nLW91dHdhcmRzCiAgICAgICAgICg+IDAgKCsgc3RhcnRpbmctZGVwdGggcmVs YXRpdmUtZGVwdGgpKQogICAgICAgICAoZXJyb3IgIkF0dGVtcHQgdG8gc2hpZnQgdG9waWMgb3V0 IGJleW9uZCBsZXZlbCAxIikpCgogICAgKGNvbmQgKCg9IHN0YXJ0aW5nLWRlcHRoIG5ldy1kZXB0 aCkKICAgICAgICAgICA7OyBXZSdyZSBhdCBkZXB0aCB0byB3b3JrIG9uIHRoaXMgb25lLgoKICAg ICAgICAgICA7OyBXaGVuIHNoaWZ0aW5nIG91dCB3ZSB3b3JrIG9uIHRoZSBjaGlsZHJlbiBiZWZv cmUgd29ya2luZyBvbgogICAgICAgICAgIDs7IHRoZSBwYXJlbnQgdG8gYXZvaWQgaW50ZXJpbSBg YWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wJwogICAgICAgICAgIDs7IGFiZXJyYW5jeSwgYW5k IHZpY2UtdmVyc2Egd2hlbiBzaGlmdGluZyBpbjoKICAgICAgICAgICAoaWYgKD49IHJlbGF0aXZl LWRlcHRoIDApCiAgICAgICAgICAgICAgIChhbGxvdXQtcmVidWxsZXQtaGVhZGluZyBuaWwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrIHN0YXJ0aW5nLWRlcHRoIHJl bGF0aXZlLWRlcHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmls CQk7OzsgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl eAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkgOzs7IGRvLXN1 Y2Nlc3NvcnMKICAgICAgICAgICAod2hlbiAobm90IHNhbnMtb2Zmc3ByaW5nKQogICAgICAgICAg ICAgOzsgLi4uIGFuZCB3b3JrIG9uIHN1YnNlcXVlbnQgb25lcyB3aGljaCBhcmUgYXQgZ3JlYXRl ciBkZXB0aDoKICAgICAgICAgICAgIChzZXRxIGluZGV4IDApCiAgICAgICAgICAgICAoYWxsb3V0 LW5leHQtaGVhZGluZykKICAgICAgICAgICAgICh3aGlsZSAoYW5kIChub3QgKGVvYnApKQogICAg ICAgICAgICAgICAgICAgICAgICAgKDwgc3RhcnRpbmctZGVwdGggKGFsbG91dC1kZXB0aCkpKQog ICAgICAgICAgICAgICAoc2V0cSBpbmRleCAoMSsgaW5kZXgpKQogICAgICAgICAgICAgICAoYWxs b3V0LXJlYnVsbGV0LXRvcGljLWdydW50IHJlbGF0aXZlLWRlcHRoCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDErIHN0YXJ0aW5nLWRlcHRoKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nLXBvaW50CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpKSkKICAgICAgICAgICAo d2hlbiAoPCByZWxhdGl2ZS1kZXB0aCAwKQogICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAg ICAgICAgICAgICAgIChnb3RvLWNoYXIgbG9jYWwtcG9pbnQpCiAgICAgICAgICAgICAgIChhbGxv dXQtcmVidWxsZXQtaGVhZGluZyBuaWwgICAgICAgICAgICAgICA7Ozsgc29saWNpdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCsgc3RhcnRpbmctZGVwdGggcmVsYXRp dmUtZGVwdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwJCTs7 OyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5n LWluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwpKSkpIDs7 OyBkby1zdWNjZXNzb3JzCgogICAgICAgICAgKCg8IHN0YXJ0aW5nLWRlcHRoIG5ldy1kZXB0aCkK ICAgICAgICAgICA7OyBSYXJlIGNhc2UgLSBzdWJ0b3BpYyBtb3JlIHRoYW4gb25lIGxldmVsIGRl ZXBlciB0aGFuIHBhcmVudC4KICAgICAgICAgICA7OyBUcmVhdCB0aGlzIG9uZSBhdCBhbiBldmVu IGRlZXBlciBsZXZlbDoKICAgICAgICAgICAoYWxsb3V0LXJlYnVsbGV0LXRvcGljLWdydW50IHJl bGF0aXZlLWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 LWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmct cG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbnMtb2Zmc3ByaW5nKSkpCgog ICAgKGlmIG9uLXN0YXJ0aW5nLWNhbGwKICAgICAgICAocHJvZ24KICAgICAgICAgIDs7IFJlY3Rp ZnkgbnVtYmVyaW5nIG9mIGZvcm1lciBzaWJsaW5ncyBvZiB0aGUgYWRqdXN0ZWQgdG9waWMsCiAg ICAgICAgICA7OyBpZiB0b3BpYyBoYXMgY2hhbmdlZCBkZXB0aAogICAgICAgICAgKGlmIChvciBk by1zdWNjZXNzb3JzCiAgICAgICAgICAgICAgICAgIChhbmQgKG5vdCAoemVyb3AgcmVsYXRpdmUt ZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgIChvciAoPSBhbGxvdXQtcmVjZW50LWRlcHRo IHN0YXJ0aW5nLWRlcHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoPSBhbGxvdXQtcmVj ZW50LWRlcHRoICgrIHN0YXJ0aW5nLWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUtZGVwdGgpKSkpKQogICAgICAgICAg ICAgIChhbGxvdXQtcmVidWxsZXQtaGVhZGluZyBuaWwgbmlsIG5pbCBuaWwgdCkpCiAgICAgICAg ICA7OyBOb3cgcmVjdGlmeSBudW1iZXJpbmcgb2YgbmV3IHNpYmxpbmdzIG9mIHRoZSBhZGp1c3Rl ZCB0b3BpYywKICAgICAgICAgIDs7IGlmIGRlcHRoIGhhcyBiZWVuIGNoYW5nZWQ6CiAgICAgICAg ICAocHJvZ24gKGdvdG8tY2hhciBzdGFydGluZy1wb2ludCkKICAgICAgICAgICAgICAgICAoaWYg KG5vdCAoemVyb3AgcmVsYXRpdmUtZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAoYWxsb3V0 LXJlYnVsbGV0LWhlYWRpbmcgbmlsIG5pbCBuaWwgbmlsIHQpKSkpKQogICAgKQogICkKOzs7XyAg ICA+IGFsbG91dC1yZW51bWJlci10by1kZXB0aCAoJm9wdGlvbmFsIGRlcHRoKQooZGVmdW4gYWxs b3V0LXJlbnVtYmVyLXRvLWRlcHRoICgmb3B0aW9uYWwgZGVwdGgpCiAgIlJlbnVtYmVyIHNpYmxp bmdzIGF0IGN1cnJlbnQgZGVwdGguCgpBZmZlY3RzIHN1cGVyaW9yIHRvcGljcyBpZiBvcHRpb25h bCBhcmcgREVQVEggaXMgbGVzcyB0aGFuIGN1cnJlbnQgZGVwdGguCgpSZXR1cm5zIGZpbmFsIGRl cHRoLiIKCiAgOzsgUHJvY2VlZCBieSBsZXZlbCwgcHJvY2Vzc2luZyBzdWJzZXF1ZW50IHNpYmxp bmdzIG9uIGVhY2gsCiAgOzsgYXNjZW5kaW5nIHVudGlsIHdlIGdldCBzaGFsbG93ZXIgdGhhbiB0 aGUgc3RhcnQgZGVwdGg6CgogIChsZXQgKChhc2NlbmRlciAoYWxsb3V0LWRlcHRoKSkKCXdhcy1l b2JwKQogICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCgkJKGFsbG91dC1kZXB0aCkKICAgICAg ICAgICAgICAgICg+PSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRoKQogICAgICAgICAgICAgICAg KD49IGFzY2VuZGVyIGRlcHRoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgU2tpcCBvdmVyIGFsbCB0b3BpY3MgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgbGVzc2VyIGRlcHRocywgd2hpY2ggY2FuIG5vdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBoYXZlIGJlZW4gZGlzdHVyYmVkOgogICAgICAo d2hpbGUgKGFuZCAobm90IChzZXRxIHdhcy1lb2JwIChlb2JwKSkpCgkJICAoPiBhbGxvdXQtcmVj ZW50LWRlcHRoIGFzY2VuZGVyKSkKICAgICAgICAoYWxsb3V0LW5leHQtaGVhZGluZykpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFByaW1lIGFzY2VuZGVyIGZvciBh c2NlbnNpb246CiAgICAgIChzZXRxIGFzY2VuZGVyICgxLSBhbGxvdXQtcmVjZW50LWRlcHRoKSkK ICAgICAgKGlmICg+PSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRoKQogICAgICAgICAgKGFsbG91 dC1yZWJ1bGxldC1oZWFkaW5nIG5pbAk7Ozsgc29saWNpdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuaWwJOzs7IGRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5pbAk7OzsgbnVtYmVyLWNvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmlsCTs7OyBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0KSkgOzs7IGRvLXN1Y2Nlc3NvcnMKICAgICAgKGlmIHdhcy1lb2JwIChnb3RvLWNoYXIgKHBv aW50LW1heCkpKSkpCiAgYWxsb3V0LXJlY2VudC1kZXB0aCkKOzs7XyAgICA+IGFsbG91dC1udW1i ZXItc2libGluZ3MgKCZvcHRpb25hbCBkZW51bWJlcikKKGRlZnVuIGFsbG91dC1udW1iZXItc2li bGluZ3MgKCZvcHRpb25hbCBkZW51bWJlcikKICAiQXNzaWduIG51bWJlcmVkIHRvcGljIHByZWZp eCB0byB0aGlzIHRvcGljIGFuZCBpdHMgc2libGluZ3MuCgpXaXRoIHVuaXZlcnNhbCBhcmd1bWVu dCwgZGVudW1iZXIgLSBhc3NpZ24gZGVmYXVsdCBidWxsZXQgdG8gdGhpcwp0b3BpYyBhbmQgaXRz IHNpYmxpbmdzLgoKV2l0aCByZXBlYXRlZCB1bml2ZXJzYWwgYXJndW1lbnQgKGBeVV5VJyksIHNv bGljaXQgYnVsbGV0IGZvciBlYWNoCnJlYnVsbGV0aW5nIGVhY2ggdG9waWMgYXQgdGhpcyBsZXZl bC4iCgogIChpbnRlcmFjdGl2ZSAiUCIpCgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGFsbG91dC1i YWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgIChhbGxvdXQtYmVnaW5uaW5nLW9mLWxldmVsKQog ICAgKGxldCAoKGRlcHRoIGFsbG91dC1yZWNlbnQtZGVwdGgpCgkgIChpbmRleCAoaWYgKG5vdCBk ZW51bWJlcikgMSkpCiAgICAgICAgICAodXNlLWJ1bGxldCAoZXF1YWwgJygxNikgZGVudW1iZXIp KQogICAgICAgICAgKG1vcmUgdCkpCiAgICAgICh3aGlsZSBtb3JlCiAgICAgICAgKGFsbG91dC1y ZWJ1bGxldC1oZWFkaW5nIHVzZS1idWxsZXQJCTs7OyBzb2xpY2l0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXB0aAkJCTs7OyBkZXB0aAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdAkJCTs7OyBudW1iZXItY29udHJvbAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5kZXgJCQk7OzsgaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5pbCkJCQk7OzsgZG8tc3VjY2Vzc29ycwogICAgICAgIChpZiBpbmRleCAoc2V0cSBp bmRleCAoMSsgaW5kZXgpKSkKICAgICAgICAoc2V0cSBtb3JlIChhbGxvdXQtbmV4dC1zaWJsaW5n IGRlcHRoIG5pbCkpKSkpKQo7OztfICAgID4gYWxsb3V0LXNoaWZ0LWluIChhcmcpCihkZWZ1biBh bGxvdXQtc2hpZnQtaW4gKGFyZykKICAiSW5jcmVhc2UgZGVwdGggb2YgY3VycmVudCBoZWFkaW5n IGFuZCBhbnkgaXRlbXMgY29sbGFwc2VkIHdpdGhpbiBpdC4KCldpdGggYSBuZWdhdGl2ZSBhcmd1 bWVudCwgdGhlIGl0ZW0gaXMgc2hpZnRlZCBvdXQgdXNpbmcKYGFsbG91dC1zaGlmdC1vdXQnLCBp bnN0ZWFkLgoKV2l0aCBhbiBhcmd1bWVudCBncmVhdGVyIHRoYW4gb25lLCBzaGlmdC1pbiB0aGUg aXRlbSBidXQgbm90IGl0cwpvZmZzcHJpbmcsIG1ha2luZyB0aGUgaXRlbSBpbnRvIGEgc2libGlu ZyBvZiBpdHMgZm9ybWVyIGNoaWxkcmVuLAphbmQgYSBjaGlsZCBvZiBzaWJsaW5nIHRoYXQgZm9y bWVybHkgcHJlY2VlZGVkIGl0LgoKWW91IGFyZSBub3QgYWxsb3dlZCB0byBzaGlmdCB0aGUgZmly c3Qgb2Zmc3ByaW5nIG9mIGEgdG9waWMKaW53YXJkcywgYmVjYXVzZSB0aGF0IHdvdWxkIHlpZWxk IGEgXCJjb250YWlubWVudApkaXNjb250aW51aXR5XCIsIHdoZXJlIHRoZSBkZXB0aCBkaWZmZXJl bmNlIGJldHdlZW4gYSB0b3BpYyBhbmQKaXRzIGltbWVkaWF0ZSBvZmZzcHJpbmcgaXMgZ3JlYXRl ciB0aGFuIG9uZS4gIFRoZSBmaXJzdCB0b3BpYyBpbgp0aGUgZmlsZSBjYW4gYmUgYWRqdXN0ZWQg dG8gYW55IHBvc2l0aXZlIGRlcHRoLCBob3dldmVyLiIKCiAgKGludGVyYWN0aXZlICJwIikKICAo aWYgKDwgYXJnIDApCiAgICAgIChhbGxvdXQtc2hpZnQtb3V0ICgqIGFyZyAtMSkpCiAgICA7OyBy ZWZ1c2UgdG8gY3JlYXRlIGEgY29udGFpbm1lbnQgZGlzY29udGludWl0eToKICAgIChzYXZlLWV4 Y3Vyc2lvbgogICAgICAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKQogICAgICAoaWYg KG5vdCAoYm9icCkpCiAgICAgICAgICAobGV0KiAoKGN1cnJlbnQtZGVwdGggYWxsb3V0LXJlY2Vu dC1kZXB0aCkKICAgICAgICAgICAgICAgICAoc3RhcnQtcG9pbnQgKHBvaW50KSkKICAgICAgICAg ICAgICAgICAocHJlZGVjZXNzb3ItZGVwdGggKHByb2duCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAtMSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmICg8IChwb2ludCkgc3RhcnQtcG9pbnQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1yZWNlbnQt ZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSkpCiAgICAg ICAgICAgIChpZiAoYW5kICg+IHByZWRlY2Vzc29yLWRlcHRoIDApCiAgICAgICAgICAgICAgICAg ICAgICg+ICgxKyBjdXJyZW50LWRlcHRoKQogICAgICAgICAgICAgICAgICAgICAgICAoMSsgcHJl ZGVjZXNzb3ItZGVwdGgpKSkKICAgICAgICAgICAgICAgIChlcnJvciAoY29uY2F0ICJEaXNhbGxv d2VkIHNoaWZ0IGRlZXBlciB0aGFuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBj b250YWluaW5nIHRvcGljJ3MgY2hpbGRyZW4uIikpCiAgICAgICAgICAgICAgKGFsbG91dC1iYWNr LXRvLWN1cnJlbnQtaGVhZGluZykKICAgICAgICAgICAgICAoaWYgKDwgYWxsb3V0LXJlY2VudC1k ZXB0aCAoMSsgY3VycmVudC1kZXB0aCkpCiAgICAgICAgICAgICAgICAgIChhbGxvdXQtc2hvdy1j aGlsZHJlbikpKSkpKQogICAgKGxldCAoKHdoZXJlIChwb2ludCkpKQogICAgICAoYWxsb3V0LXJl YnVsbGV0LXRvcGljIDEgKGFuZCAoPiBhcmcgMSkgJ3NhbnMtb2Zmc3ByaW5nKSkKICAgICAgKHJ1 bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LXN0cnVjdHVyZS1zaGlmdGVkLWhvb2sgYXJnIHdoZXJl KSkpKQo7OztfICAgID4gYWxsb3V0LXNoaWZ0LW91dCAoYXJnKQooZGVmdW4gYWxsb3V0LXNoaWZ0 LW91dCAoYXJnKQogICJEZWNyZWFzZSBkZXB0aCBvZiBjdXJyZW50IGhlYWRpbmcgYW5kIGFueSB0 b3BpY3MgY29sbGFwc2VkIHdpdGhpbiBpdC4KVGhpcyB3aWxsIG1ha2UgdGhlIGl0ZW0gYSBzaWJs aW5nIG9mIGl0cyBmb3JtZXIgY29udGFpbmVyLgoKV2l0aCBhIG5lZ2F0aXZlIGFyZ3VtZW50LCB0 aGUgaXRlbSBpcyBzaGlmdGVkIGluIHVzaW5nCmBhbGxvdXQtc2hpZnQtaW4nLCBpbnN0ZWFkLgoK V2l0aCBhbiBhcmd1bWVudCBncmVhdGVyIHRoYW4gb25lLCBzaGlmdC1vdXQgdGhlIGl0ZW0ncyBv ZmZzcHJpbmcKYnV0IG5vdCB0aGUgaXRlbSBpdHNlbGYsIG1ha2luZyB0aGUgZm9ybWVyIGNoaWxk cmVuIHNpYmxpbmdzIG9mCnRoZSBpdGVtLgoKV2l0aCBhbiBhcmd1bWVudCBncmVhdGVyIHRoYW4g MSwgdGhlIGl0ZW0ncyBvZmZzcHJpbmcgYXJlIHNoaWZ0ZWQKb3V0IHdpdGhvdXQgc2hpZnRpbmcg dGhlIGl0ZW0uICBUaGlzIHdpbGwgbWFrZSB0aGUgaW1tZWRpYXRlCnN1YnRvcGljcyBpbnRvIHNp YmxpbmdzIG9mIHRoZSBpdGVtLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChpZiAoPCBhcmcgMCkK ICAgICAgKGFsbG91dC1zaGlmdC1pbiAoKiBhcmcgLTEpKQogICAgOzsgR2V0IHByb3BlciBleHBv c3VyZSBpbiB0aGlzIGFyZWE6CiAgICAoc2F2ZS1leGN1cnNpb24gKGlmIChhbGxvdXQtYXNjZW5k KQogICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXNob3ctY2hpbGRyZW4pKSkKICAgIDs7 IFNob3cgY29sbGFwc2VkIGNoaWxkcmVuIGlmIHRoZXJlJ3MgYSBzdWNjZXNzb3Igd2hpY2ggd2ls bCBiZWNvbWUKICAgIDs7IHRoZWlyIHNpYmxpbmc6CiAgICAoaWYgKGFuZCAoYWxsb3V0LWN1cnJl bnQtdG9waWMtY29sbGFwc2VkLXApCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24gKGFsbG91 dC1uZXh0LXNpYmxpbmcpKSkKICAgICAgICAoYWxsb3V0LXNob3ctY2hpbGRyZW4pKQogICAgKGxl dCAoKHdoZXJlIChhbmQgKGFsbG91dC1kZXB0aCkgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5u aW5nKSkpCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgIChpZiAoPiBhcmcgMSkKICAgICAg ICAgICAgOzsgU2hpZnQgdGhlIG9mZnNwcmluZyBidXQgbm90IHRoZSB0b3BpYzoKICAgICAgICAg ICAgKGxldCAoKGNoaWxkcmVuLWNoYXJ0IChhbGxvdXQtY2hhcnQtc3VidHJlZSAxKSkpCiAgICAg ICAgICAgICAgKGlmIChsaXN0cCAoY2FyIGNoaWxkcmVuLWNoYXJ0KSkKICAgICAgICAgICAgICAg ICAgOzsgd2hvb3BzOgogICAgICAgICAgICAgICAgICAoc2V0cSBjaGlsZHJlbi1jaGFydCAoYWxs b3V0LWZsYXR0ZW4gY2hpbGRyZW4tY2hhcnQpKSkKICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNp b24KICAgICAgICAgICAgICAgIChkb2xpc3QgKGNoaWxkLXBvaW50IGNoaWxkcmVuLWNoYXJ0KQog ICAgICAgICAgICAgICAgICAoZ290by1jaGFyIGNoaWxkLXBvaW50KQogICAgICAgICAgICAgICAg ICAoYWxsb3V0LXNoaWZ0LW91dCAxKSkpKQogICAgICAgICAgKGFsbG91dC1yZWJ1bGxldC10b3Bp YyAoKiBhcmcgLTEpKSkpCiAgICAgIChydW4taG9vay13aXRoLWFyZ3MgJ2FsbG91dC1zdHJ1Y3R1 cmUtc2hpZnRlZC1ob29rICgqIGFyZyAtMSkgd2hlcmUpKSkpCjs7O18gICA6IFN1cmdlcnkgKGtp bGwtcmluZykgZnVuY3Rpb25zIHdpdGggc3BlY2lhbCBwcm92aXNpb25zIGZvciBvdXRsaW5lczoK Ozs7XyAgICA+IGFsbG91dC1raWxsLWxpbmUgKCZvcHRpb25hbCBhcmcpCihkZWZ1biBhbGxvdXQt a2lsbC1saW5lICgmb3B0aW9uYWwgYXJnKQogICJLaWxsIGxpbmUsIGFkanVzdGluZyBzdWJzZXF1 ZW50IGxpbmVzIHN1aXRhYmx5IGZvciBvdXRsaW5lIG1vZGUuIgoKICAoaW50ZXJhY3RpdmUgIipQ IikKCiAgKGlmIChvciAobm90IChhbGxvdXQtbW9kZS1wKSkKICAgICAgICAgIChub3QgKGJvbHAp KQogICAgICAgICAgKG5vdCAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKSkpCiAgICAgIDs7IEp1 c3QgZG8gYSByZWd1bGFyIGtpbGw6CiAgICAgIChraWxsLWxpbmUgYXJnKQogICAgOzsgQWgsIGhh dmUgdG8gd2F0Y2ggb3V0IGZvciBhZGp1c3RtZW50czoKICAgIChsZXQqICgoYmVnIChwb2ludCkp CiAgICAgICAgICAgZW5kCiAgICAgICAgICAgKGJlZy1oaWRkZW4gKGFsbG91dC1oaWRkZW4tcCkp CiAgICAgICAgICAgKGVuZC1oaWRkZW4gKHNhdmUtZXhjdXJzaW9uIChhbGxvdXQtZW5kLW9mLWN1 cnJlbnQtbGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEg ZW5kIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxv dXQtaGlkZGVuLXApKSkKICAgICAgICAgICAoZGVwdGggKGFsbG91dC1kZXB0aCkpKQoKICAgICAg KGFsbG91dC1hbm5vdGF0ZS1oaWRkZW4gYmVnIGVuZCkKICAgICAgKGlmIChhbmQgKG5vdCBiZWct aGlkZGVuKSAobm90IGVuZC1oaWRkZW4pKQogICAgICAgICAgKGFsbG91dC11bnByb3RlY3RlZCAo a2lsbC1saW5lIGFyZykpCiAgICAgICAgKGtpbGwtbGluZSBhcmcpKQogICAgICAoYWxsb3V0LWRl YW5ub3RhdGUtaGlkZGVuIGJlZyBlbmQpCgogICAgICAoaWYgYWxsb3V0LW51bWJlcmVkLWJ1bGxl dAogICAgICAgICAgKHNhdmUtZXhjdXJzaW9uICAgICAgICAgICAgICAgOyBSZW51bWJlciBzdWJz ZXF1ZW50IHRvcGljcyBpZiBuZWVkZWQ6CiAgICAgICAgICAgIChpZiAobm90IChsb29raW5nLWF0 IGFsbG91dC1yZWdleHApKQogICAgICAgICAgICAgICAgKGFsbG91dC1uZXh0LWhlYWRpbmcpKQog ICAgICAgICAgICAoYWxsb3V0LXJlbnVtYmVyLXRvLWRlcHRoIGRlcHRoKSkpCiAgICAgIChydW4t aG9vay13aXRoLWFyZ3MgJ2FsbG91dC1zdHJ1Y3R1cmUtZGVsZXRlZC1ob29rIGRlcHRoIChwb2lu dCkpKSkpCjs7O18gICAgPiBhbGxvdXQtY29weS1saW5lLWFzLWtpbGwgKCkKKGRlZnVuIGFsbG91 dC1jb3B5LWxpbmUtYXMta2lsbCAoKQogICJMaWtlIGFsbG91dC1raWxsLXRvcGljLCBidXQgc2F2 ZSB0byBraWxsIHJpbmcgaW5zdGVhZCBvZiBkZWxldGluZy4iCiAgKGludGVyYWN0aXZlKQogIChs ZXQgKChidWZmZXItcmVhZC1vbmx5IHQpKQogICAgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAgICAg IChhbGxvdXQta2lsbC1saW5lKQogICAgICAoYnVmZmVyLXJlYWQtb25seSBuaWwpKSkpCjs7O18g ICAgPiBhbGxvdXQta2lsbC10b3BpYyAoKQooZGVmdW4gYWxsb3V0LWtpbGwtdG9waWMgKCkKICAi S2lsbCB0b3BpYyB0b2dldGhlciB3aXRoIHN1YnRvcGljcy4KClRyYWlsaW5nIHdoaXRlc3BhY2Ug aXMga2lsbGVkIHdpdGggYSB0b3BpYyBpZiB0aGF0IHdoaXRlc3BhY2U6CgogLSB3b3VsZCBzZXBh cmF0ZSB0aGUgdG9waWMgZnJvbSBhIHN1YnNlcXVlbnQgc2libGluZwogLSB3b3VsZCBzZXBhcmF0 ZSB0aGUgdG9waWMgZnJvbSB0aGUgZW5kIG9mIGJ1ZmZlcgogLSB3b3VsZCBub3QgYmUgYWRkZWQg dG8gd2hpdGVzcGFjZSBhbHJlYWR5IHNlcGFyYXRpbmcgdGhlIHRvcGljIGZyb20gdGhlCiAgIHBy ZXZpb3VzIG9uZS4KClRvcGljIGV4cG9zdXJlIGlzIG1hcmtlZCB3aXRoIHRleHQtcHJvcGVydGll cywgdG8gYmUgdXNlZCBieQphbGxvdXQteWFuay1wcm9jZXNzaW5nIGZvciBleHBvc3VyZSByZWNv dmVyeS4iCgogIChpbnRlcmFjdGl2ZSkKICAobGV0KiAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rp b24gdCkKICAgICAgICAgKGJlZyAocHJvZzEgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGlu ZykgKGJlZ2lubmluZy1vZi1saW5lKSkpCiAgICAgICAgIGVuZAogICAgICAgICAoZGVwdGggYWxs b3V0LXJlY2VudC1kZXB0aCkpCiAgICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50LXN1YnRyZWUpCiAg ICAoaWYgKGFuZCAoLz0gKGN1cnJlbnQtY29sdW1uKSAwKSAobm90IChlb2JwKSkpCiAgICAgICAg KGZvcndhcmQtY2hhciAxKSkKICAgIChpZiAobm90IChlb2JwKSkKCShpZiAoYW5kIChsb29raW5n LWF0ICJcbiIpCiAgICAgICAgICAgICAgICAgKG9yIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAg ICAgICAgICAgICAgIChvciAobm90IChhbGxvdXQtbmV4dC1oZWFkaW5nKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgKD0gZGVwdGggYWxsb3V0LXJlY2VudC1kZXB0aCkpKQogICAgICAgICAg ICAgICAgICAgICAoYW5kICg+ICgtIGJlZyAocG9pbnQtbWluKSkgMykKICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nPSAoYnVmZmVyLXN1YnN0cmluZyAoLSBiZWcgMikgYmVnKSAiXG5c biIpKSkpCgkgICAgKGZvcndhcmQtY2hhciAxKSkpCgogICAgKGFsbG91dC1hbm5vdGF0ZS1oaWRk ZW4gYmVnIChzZXRxIGVuZCAocG9pbnQpKSkKICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgIChh bGxvdXQtdW5wcm90ZWN0ZWQgKGtpbGwtcmVnaW9uIGJlZyBlbmQpKQogICAgICAoaWYgYnVmZmVy LXJlYWQtb25seQogICAgICAgICAgOzsgZWcsIGR1cmluZyBjb3B5LWFzLWtpbGwuCiAgICAgICAg ICAoYWxsb3V0LWRlYW5ub3RhdGUtaGlkZGVuIGJlZyBlbmQpKSkKCiAgICAoc2F2ZS1leGN1cnNp b24KICAgICAgKGFsbG91dC1yZW51bWJlci10by1kZXB0aCBkZXB0aCkpCiAgICAocnVuLWhvb2st d2l0aC1hcmdzICdhbGxvdXQtc3RydWN0dXJlLWRlbGV0ZWQtaG9vayBkZXB0aCAocG9pbnQpKSkp Cjs7O18gICAgPiBhbGxvdXQtY29weS10b3BpYy1hcy1raWxsICgpCihkZWZ1biBhbGxvdXQtY29w eS10b3BpYy1hcy1raWxsICgpCiAgIkxpa2UgYWxsb3V0LWtpbGwtdG9waWMsIGJ1dCBzYXZlIHRv IGtpbGwgcmluZyBpbnN0ZWFkIG9mIGRlbGV0aW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAo KGJ1ZmZlci1yZWFkLW9ubHkgdCkpCiAgICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgICAgKGFs bG91dC1raWxsLXRvcGljKQogICAgICAoYnVmZmVyLXJlYWQtb25seSAobWVzc2FnZSAiVG9waWMg Y29waWVkLi4uIikpKSkpCjs7O18gICAgPiBhbGxvdXQtYW5ub3RhdGUtaGlkZGVuIChiZWdpbiBl bmQpCihkZWZ1biBhbGxvdXQtYW5ub3RhdGUtaGlkZGVuIChiZWdpbiBlbmQpCiAgIlF1YWxpZnkg dGV4dCB3aXRoIHByb3BlcnRpZXMgdG8gaW5kaWNhdGUgZXhwb3N1cmUgc3RhdHVzLiIKCiAgKGxl dCAoKHdhcy1tb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKQogICAgICAgIChidWZmZXItcmVh ZC1vbmx5IG5pbCkpCiAgICAoYWxsb3V0LWRlYW5ub3RhdGUtaGlkZGVuIGJlZ2luIGVuZCkKICAg IChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZ290by1jaGFyIGJlZ2luKQogICAgICAobGV0IChkb25l IG5leHQgcHJldiBvdmVybGF5KQogICAgICAgICh3aGlsZSAobm90IGRvbmUpCiAgICAgICAgICA7 OyBhdCBvciBhZHZhbmNlIHRvIHN0YXJ0IG9mIG5leHQgaGlkZGVuIHJlZ2lvbjoKICAgICAgICAg IChpZiAobm90IChhbGxvdXQtaGlkZGVuLXApKQogICAgICAgICAgICAgIChzZXRxIG5leHQKICAg ICAgICAgICAgICAgICAgICAobWF4ICgxKyAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAg ICAgKG5leHQtc2luZ2xlLWNoYXItcHJvcGVydHktY2hhbmdlIChwb2ludCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW52aXNpYmxl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmlsIGVuZCkpKSkKICAgICAgICAgIChpZiAob3IgKG5vdCBuZXh0KSAoZXEgcHJldiBuZXh0 KSkKICAgICAgICAgICAgICA7OyBzdGlsbCBub3QgYXQgc3RhcnQgb2YgaGlkZGVuIGFyZWEgLSBt dXN0IG5vdCBiZSBhbnkgbGVmdC4KICAgICAgICAgICAgICAoc2V0cSBkb25lIHQpCiAgICAgICAg ICAgIChnb3RvLWNoYXIgbmV4dCkKICAgICAgICAgICAgKHNldHEgcHJldiBuZXh0KQogICAgICAg ICAgICAoaWYgKG5vdCAoYWxsb3V0LWhpZGRlbi1wKSkKICAgICAgICAgICAgICAgIDs7IHN0aWxs IG5vdCBhdCBzdGFydCBvZiBoaWRkZW4gYXJlYS4KICAgICAgICAgICAgICAgIChzZXRxIGRvbmUg dCkKICAgICAgICAgICAgICAoc2V0cSBvdmVybGF5IChhbGxvdXQtZ2V0LWludmlzaWJpbGl0eS1v dmVybGF5KSkKICAgICAgICAgICAgICAoc2V0cSBuZXh0IChvdmVybGF5LWVuZCBvdmVybGF5KQog ICAgICAgICAgICAgICAgICAgIHByZXYgbmV4dCkKICAgICAgICAgICAgICA7OyBhZHZhbmNlIHRv IGVuZCBvZiB0aGlzIGhpZGRlbiBhcmVhOgogICAgICAgICAgICAgICh3aGVuIG5leHQKICAgICAg ICAgICAgICAgIChnb3RvLWNoYXIgbmV4dCkKICAgICAgICAgICAgICAgIChhbGxvdXQtdW5wcm90 ZWN0ZWQKICAgICAgICAgICAgICAgICAobGV0ICgoYnVmZmVyLXVuZG8tbGlzdCB0KSkKICAgICAg ICAgICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAob3ZlcmxheS1zdGFydCBvdmVybGF5KSBu ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG91dC13YXMtaGlk ZGVuIHQpKSkpKSkpKSkKICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgd2FzLW1vZGlmaWVkKSkp Cjs7O18gICAgPiBhbGxvdXQtZGVhbm5vdGF0ZS1oaWRkZW4gKGJlZ2luIGVuZCkKKGRlZnVuIGFs bG91dC1kZWFubm90YXRlLWhpZGRlbiAoYmVnaW4gZW5kKQogICJSZW1vdmUgYWxsb3V0IGhpZGRl bi10ZXh0IGFubm90YXRpb24gYmV0d2VlbiBCRUdJTiBhbmQgRU5ELiIKCiAgKGFsbG91dC11bnBy b3RlY3RlZAogICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkKICAgICAgICAgKGJ1ZmZlci11 bmRvLWxpc3QgdCkpCiAgICAgOyhyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIGJlZ2luIGVuZCAnKGFs bG91dC13YXMtaGlkZGVuIHQpKQogICAgICkpKQo7OztfICAgID4gYWxsb3V0LWhpZGUtYnktYW5u b3RhdGlvbiAoYmVnaW4gZW5kKQooZGVmdW4gYWxsb3V0LWhpZGUtYnktYW5ub3RhdGlvbiAoYmVn aW4gZW5kKQogICJUcmFuc2xhdGUgdGV4dCBwcm9wZXJ0aWVzIGluZGljYXRpbmcgZXhwb3N1cmUg c3RhdHVzIGludG8gYWN0dWFsIGV4cG9zdXJlLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChnb3Rv LWNoYXIgYmVnaW4pCiAgICAobGV0ICgod2FzLW1vZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCkp CiAgICAgICAgICBkb25lIG5leHQgcHJldikKICAgICAgKHdoaWxlIChub3QgZG9uZSkKICAgICAg ICA7OyBhdCBvciBhZHZhbmNlIHRvIHN0YXJ0IG9mIG5leHQgYW5ub3RhdGlvbjoKICAgICAgICAo aWYgKG5vdCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnYWxsb3V0LXdhcy1oaWRkZW4pKQog ICAgICAgICAgICAoc2V0cSBuZXh0IChuZXh0LXNpbmdsZS1jaGFyLXByb3BlcnR5LWNoYW5nZSAo cG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdhbGxvdXQtd2FzLWhpZGRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgZW5kKSkpCiAgICAgICAgKGlmIChvciAobm90 IG5leHQpIChlcSBwcmV2IG5leHQpKQogICAgICAgICAgICA7OyBubyBtb3JlIG9yIG5vdCBhZHZh bmNpbmcgLSBtdXN0IG5vdCBiZSBhbnkgbGVmdC4KICAgICAgICAgICAgKHNldHEgZG9uZSB0KQog ICAgICAgICAgKGdvdG8tY2hhciBuZXh0KQogICAgICAgICAgKHNldHEgcHJldiBuZXh0KQogICAg ICAgICAgKGlmIChub3QgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2FsbG91dC13YXMtaGlk ZGVuKSkKICAgICAgICAgICAgICA7OyBzdGlsbCBub3QgYXQgc3RhcnQgb2YgYW5ub3RhdGlvbi4K ICAgICAgICAgICAgICAoc2V0cSBkb25lIHQpCiAgICAgICAgICAgIDs7IGFkdmFuY2UgdG8ganVz dCBhZnRlciBlbmQgb2YgdGhpcyBhbm5vdGF0aW9uOgogICAgICAgICAgICAoc2V0cSBuZXh0IChu ZXh0LXNpbmdsZS1jaGFyLXByb3BlcnR5LWNoYW5nZSAocG9pbnQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtd2FzLWhpZGRl bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuaWwgZW5kKSkKICAgICAgICAgICAgKG92ZXJsYXktcHV0IChtYWtlLW92ZXJsYXkgcHJldiBu ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGVnb3J5ICdhbGxvdXQtZXhwb3N1cmUt Y2F0ZWdvcnkpCiAgICAgICAgICAgIChhbGxvdXQtZGVhbm5vdGF0ZS1oaWRkZW4gcHJldiBuZXh0 KQogICAgICAgICAgICAoc2V0cSBwcmV2IG5leHQpCiAgICAgICAgICAgIChpZiBuZXh0IChnb3Rv LWNoYXIgbmV4dCkpKSkpCiAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgd2FzLW1vZGlmaWVk KSkpKQo7OztfICAgID4gYWxsb3V0LXlhbmstcHJvY2Vzc2luZyAoKQooZGVmdW4gYWxsb3V0LXlh bmstcHJvY2Vzc2luZyAoJm9wdGlvbmFsIGFyZykKCiAgIkluY2lkZW50YWwgYWxsb3V0LXNwZWNp ZmljIGJ1c2luZXNzIHRvIGJlIGRvbmUganVzdCBhZnRlciB0ZXh0IHlhbmtzLgoKRG9lcyBkZXB0 aCBhZGp1c3RtZW50IG9mIHlhbmtlZCB0b3BpY3MsIHdoZW46CgoxIHRoZSBzdHVmZiBiZWluZyB5 YW5rZWQgc3RhcnRzIHdpdGggYSB2YWxpZCBvdXRsaW5lIGhlYWRlciBwcmVmaXgsIGFuZAoyIGl0 IGlzIGJlaW5nIHlhbmtlZCBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGljaCBjb25zaXN0cyBvZiBv bmx5IGEgdmFsaWQKICAgICB0b3BpYyBwcmVmaXguCgpBbHNvLCBhZGp1c3RzIG51bWJlcmluZyBv ZiBzdWJzZXF1ZW50IHNpYmxpbmdzIHdoZW4gYXBwcm9wcmlhdGUuCgpEZXB0aCBhZGp1c3RtZW50 IGFsdGVycyB0aGUgZGVwdGggb2YgYWxsIHRoZSB0b3BpY3MgYmVpbmcgeWFua2VkCnRoZSBhbW91 bnQgaXQgdGFrZXMgdG8gbWFrZSB0aGUgZmlyc3QgdG9waWMgaGF2ZSB0aGUgZGVwdGggb2YgdGhl CmhlYWRlciBpbnRvIHdoaWNoIGl0J3MgYmVpbmcgeWFua2VkLgoKVGhlIHBvaW50IGlzIGxlZnQg aW4gZnJvbnQgb2YgeWFua2VkLCBhZGp1c3RlZCB0b3BpY3MsIHJhdGhlciB0aGFuCmF0IHRoZSBl bmQgKGFuZCB2aWNlLXZlcnNhIHdpdGggdGhlIG1hcmspLiAgTm9uLWFkanVzdGVkIHlhbmtzLApo b3dldmVyLCBhcmUgbGVmdCBleGFjdGx5IGxpa2Ugbm9ybWFsLCBub24tYWxsb3V0LXNwZWNpZmlj IHlhbmtzLiIKCiAgKGludGVyYWN0aXZlICIqUCIpCgkJCQkJOyBHZXQgdG8gYmVnaW5uaW5nLCBs ZWF2aW5nCgkJCQkJOyByZWdpb24gYXJvdW5kIHN1YmplY3Q6CiAgKGlmICg8IChhbGxvdXQtbWFy ay1tYXJrZXIgdCkgKHBvaW50KSkKICAgICAgKGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrKSkKICAo bGV0KiAoKHN1YmotYmVnIChwb2ludCkpCiAgICAgICAgIChpbnRvLWJvbCAoYm9scCkpCiAgICAg ICAgIChzdWJqLWVuZCAoYWxsb3V0LW1hcmstbWFya2VyIHQpKQogICAgICAgICA7OyAncmVzaXR1 YXRlJyBpZiB5YW5raW5nIGFuIGVudGlyZSB0b3BpYyBpbnRvIHRvcGljIGhlYWRlcjoKICAgICAg ICAgKHJlc2l0dWF0ZSAoYW5kIChsZXQgKChhbGxvdXQtaW5oaWJpdC1hYmVycmFuY2UtZG91Ymxl Y2hlY2sgdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZS1vLXByZWZpeC1w KSkKICAgICAgICAgICAgICAgICAgICAgICAgIChsb29raW5nLWF0IGFsbG91dC1yZWdleHApCiAg ICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXByZWZpeC1kYXRhKSkpCiAgICAgICAgIDs7 IGByZWN0aWZ5LW51bWJlcmluZycgaWYgcmVzaXR1YXRpbmcgKHdoZXJlIHNldmVyYWwgdG9waWNz IG1heQogICAgICAgICA7OyBiZSByZXNpdHVhdGluZykgb3IgeWFua2luZyBhIHRvcGljIGludG8g YSB0b3BpYyBzbG90IChib2wpOgogICAgICAgICAocmVjdGlmeS1udW1iZXJpbmcgKG9yIHJlc2l0 dWF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgaW50by1ib2wgKGxvb2tp bmctYXQgYWxsb3V0LXJlZ2V4cCkpKSkpCiAgICAoaWYgcmVzaXR1YXRlCiAgICAgICAgOzsgWWFu a2luZyBhIHRvcGljIGludG8gdGhlIHN0YXJ0IG9mIGEgdG9waWMgLSByZWNvbmNpbGUgdG8gZml0 OgogICAgICAgIChsZXQqICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KQogICAgICAgICAg ICAgICAocHJlZml4LWxlbiAoaWYgKG5vdCAobWF0Y2gtZW5kIDEpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChtYXRjaC1l bmQgMSkgc3Viai1iZWcpKSkKICAgICAgICAgICAgICAgKHN1YmotZGVwdGggYWxsb3V0LXJlY2Vu dC1kZXB0aCkKICAgICAgICAgICAgICAgKHByZWZpeC1idWxsZXQgKGFsbG91dC1yZWNlbnQtYnVs bGV0KSkKICAgICAgICAgICAgICAgKGFkanVzdC10by1kZXB0aAogICAgICAgICAgICAgICAgOzsg TmlsIGlmIGFkanVzdG1lbnQgdW5uZWNlc3NhcnksIG90aGVyd2lzZSBkZXB0aCB0byB3aGljaAog ICAgICAgICAgICAgICAgOzsgYWRqdXN0bWVudCBzaG91bGQgYmUgbWFkZToKICAgICAgICAgICAg ICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAoYW5kIChnb3RvLWNoYXIgc3Vi ai1lbmQpCiAgICAgICAgICAgICAgICAgICAgICAgKGVvbHApCiAgICAgICAgICAgICAgICAgICAg ICAgKGdvdG8tY2hhciBzdWJqLWJlZykKICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChsb29r aW5nLWF0IGFsbG91dC1yZWdleHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobm90ICg9IChwb2ludCkgc3Viai1iZWcpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb29raW5nLWF0IGFsbG91dC1yZWdleHApCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXByZWZpeC1kYXRhKSkKICAgICAgICAgICAgICAg ICAgICAgICBhbGxvdXQtcmVjZW50LWRlcHRoKSkpCiAgICAgICAgICAgICAgIChtb3JlIHQpKQog ICAgICAgICAgKHNldHEgcmVjdGlmeS1udW1iZXJpbmcgYWxsb3V0LW51bWJlcmVkLWJ1bGxldCkK ICAgICAgICAgIChpZiBhZGp1c3QtdG8tZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgRG8gdGhlIGFkanVzdG1lbnQ6CiAgICAgICAgICAgICAgKHByb2duCiAg ICAgICAgICAgICAgICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAgICAgICAgICAgICAobmFycm93 LXRvLXJlZ2lvbiBzdWJqLWJlZyBzdWJqLWVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgVHJpbSBvZmYgZXhjZXNzaXZlIGJsYW5rCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IGxpbmUgYXQgZW5kLCBpZiBhbnk6CiAgICAgICAgICAg ICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCiAgICAgICAgICAgICAgICAgIChpZiAobG9v a2luZy1hdCAiXiQiKQogICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC11bnByb3RlY3RlZCAo ZGVsZXRlLWNoYXIgLTEpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgV29yayBiYWNrd2FyZHMsIHdpdGggZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBzaGFsbG93ZXN0IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBzdWNjZXNzaXZlbHkgZXhjbHVkaW5nIHRoZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBsYXN0IHByb2Nlc3NlZCB0b3BpYyBmcm9tCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHRoZSBuYXJyb3cgcmVnaW9u OgogICAgICAgICAgICAgICAgICAod2hpbGUgbW9yZQogICAgICAgICAgICAgICAgICAgIChhbGxv dXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IGdvIGFzIGhpZ2ggYXMgd2UgY2FuIGluIGVhY2ggYnVuY2g6CiAgICAgICAg ICAgICAgICAgICAgKHdoaWxlIChhbGxvdXQtYXNjZW5kKSkKICAgICAgICAgICAgICAgICAgICAo c2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtdW5wcm90ZWN0ZWQK ICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXJlYnVsbGV0LXRvcGljLWdydW50ICgtIGFk anVzdC10by1kZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3Viai1kZXB0aCkpKQogICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1k ZXB0aCkpCiAgICAgICAgICAgICAgICAgICAgKGlmIChzZXRxIG1vcmUgKG5vdCAoYm9icCkpKQog ICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24gKHdpZGVuKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZvcndhcmQtY2hhciAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChuYXJyb3ctdG8tcmVnaW9uIHN1YmotYmVnIChwb2ludCkpKSkpKQogICAgICAgICAgICAg ICAgOzsgUHJlc2VydmUgbmV3IGJ1bGxldCBpZiBpdCdzIGEgZGlzdGluY3RpdmUgb25lLCBvdGhl cndpc2UKICAgICAgICAgICAgICAgIDs7IHVzZSBvbGQgb25lOgogICAgICAgICAgICAgICAgKGlm IChzdHJpbmctbWF0Y2ggKHJlZ2V4cC1xdW90ZSBwcmVmaXgtYnVsbGV0KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBEZWxldGUgZnJvbSBidWxs ZXQgb2Ygb2xkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGJl Zm9yZSBidWxsZXQgb2YgbmV3OgogICAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAg ICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAgICAgICAgICAgICAgICAgKGFs bG91dC11bnByb3RlY3RlZAogICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtcmVnaW9uIChw b2ludCkgc3Viai1iZWcpKQogICAgICAgICAgICAgICAgICAgICAgKHNldC1tYXJrZXIgKGFsbG91 dC1tYXJrLW1hcmtlciB0KSBzdWJqLWVuZCkKICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNo YXIgc3Viai1iZWcpCiAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBEZWxldGUgYmFzZSBz dWJqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbGVh dmluZyBvbGQgb25lOgogICAgICAgICAgICAgICAgICAoYWxsb3V0LXVucHJvdGVjdGVkCiAgICAg ICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1yZWdpb24g KHBvaW50KSAoKyAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJlZml4LWxlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgtIGFkanVzdC10by1kZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN1YmotZGVwdGgpKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgYW5kIGRlbGV0ZSByZXNpZHVhbCBzdWJqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHByZWZpeCBkaWdpdHMgYW5kIHNwYWNlOgog ICAgICAgICAgICAgICAgICAgICAod2hpbGUgKGxvb2tpbmctYXQgIlswLTldIikgKGRlbGV0ZS1j aGFyIDEpKQogICAgICAgICAgICAgICAgICAgICAoaWYgKGxvb2tpbmctYXQgIiAiKSAoZGVsZXRl LWNoYXIgMSkpKSkpKQogICAgICAgICAgICAoZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmspKSkpCiAg ICAoaWYgcmVjdGlmeS1udW1iZXJpbmcKICAgICAgICAocHJvZ24KICAgICAgICAgIChzYXZlLWV4 Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBHaXZlIHNv bWUgcHJlbGltaW5hcnkgZmVlZGJhY2s6CiAgICAgICAgICAgIChtZXNzYWdlICIuLi4gcmVjb25j aWxpbmcgbnVtYmVycyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IC4uLiBhbmQgcmVudW1iZXIsIGluIGNhc2UgbmVjZXNzYXJ5OgogICAgICAgICAgICAoZ290by1j aGFyIHN1YmotYmVnKQogICAgICAgICAgICAoaWYgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVj aGVja2VkKQogICAgICAgICAgICAgICAgKGFsbG91dC11bnByb3RlY3RlZAogICAgICAgICAgICAg ICAgIChhbGxvdXQtcmVidWxsZXQtaGVhZGluZyBuaWwgICAgICAgICAgICA7Ozsgc29saWNpdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWRlcHRoKSA7 OzsgZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsICAg ICAgICAgICAgOzs7IG51bWJlci1jb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5pbCAgICAgICAgICAgIDs7OyBpbmRleAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0KSkpCiAgICAgICAgICAgIChtZXNzYWdlICIiKSkpKQog ICAgKGlmIChvciBpbnRvLWJvbCByZXNpdHVhdGUpCiAgICAgICAgKGFsbG91dC1oaWRlLWJ5LWFu bm90YXRpb24gKHBvaW50KSAoYWxsb3V0LW1hcmstbWFya2VyIHQpKQogICAgICAoYWxsb3V0LWRl YW5ub3RhdGUtaGlkZGVuIChhbGxvdXQtbWFyay1tYXJrZXIgdCkgKHBvaW50KSkpCiAgICAoaWYg KG5vdCByZXNpdHVhdGUpCiAgICAgICAgKGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrKSkKICAgIChy dW4taG9vay13aXRoLWFyZ3MgJ2FsbG91dC1zdHJ1Y3R1cmUtYWRkZWQtaG9vayBzdWJqLWJlZyBz dWJqLWVuZCkpKQo7OztfICAgID4gYWxsb3V0LXlhbmsgKCZvcHRpb25hbCBhcmcpCihkZWZ1biBh bGxvdXQteWFuayAoJm9wdGlvbmFsIGFyZykKICAiYGFsbG91dC1tb2RlJyB5YW5rLCB3aXRoIGRl cHRoIGFuZCBudW1iZXJpbmcgYWRqdXN0bWVudCBvZiB5YW5rZWQgdG9waWNzLgoKTm9uLXRvcGlj IHlhbmtzIHdvcmsgbm8gZGlmZmVyZW50bHkgdGhhbiBub3JtYWwgeWFua3MuCgpJZiBhIHRvcGlj IGlzIGJlaW5nIHlhbmtlZCBpbnRvIGEgYmFyZSB0b3BpYyBwcmVmaXgsIHRoZSBkZXB0aCBvZiB0 aGUKeWFua2VkIHRvcGljIGlzIGFkanVzdGVkIHRvIHRoZSBkZXB0aCBvZiB0aGUgdG9waWMgcHJl Zml4LgoKICAxIHdlJ3JlIHlhbmtpbmcgaW4gYW4gYGFsbG91dC1tb2RlJyBidWZmZXIKICAyIHRo ZSBzdHVmZiBiZWluZyB5YW5rZWQgc3RhcnRzIHdpdGggYSB2YWxpZCBvdXRsaW5lIGhlYWRlciBw cmVmaXgsIGFuZAogIDMgaXQgaXMgYmVpbmcgeWFua2VkIGF0IHRoZSBlbmQgb2YgYSBsaW5lIHdo aWNoIGNvbnNpc3RzIG9mIG9ubHkgYSB2YWxpZAogICAgdG9waWMgcHJlZml4LgoKSWYgdGhlc2Ug Y29uZGl0aW9ucyBob2xkIHRoZW4gdGhlIGRlcHRoIG9mIHRoZSB5YW5rZWQgdG9waWNzIGFyZSBh bGwKYWRqdXN0ZWQgdGhlIGFtb3VudCBpdCB0YWtlcyB0byBtYWtlIHRoZSBmaXJzdCBvbmUgYXQg dGhlIGRlcHRoIG9mIHRoZQpoZWFkZXIgaW50byB3aGljaCBpdCdzIGJlaW5nIHlhbmtlZC4KClRo ZSBwb2ludCBpcyBsZWZ0IGluIGZyb250IG9mIHlhbmtlZCwgYWRqdXN0ZWQgdG9waWNzLCByYXRo ZXIgdGhhbgphdCB0aGUgZW5kIChhbmQgdmljZS12ZXJzYSB3aXRoIHRoZSBtYXJrKS4gIE5vbi1h ZGp1c3RlZCB5YW5rcywKaG93ZXZlciwgKG9uZXMgdGhhdCBkb24ndCBxdWFsaWZ5IGZvciBhZGp1 c3RtZW50KSBhcmUgaGFuZGxlZApleGFjdGx5IGxpa2Ugbm9ybWFsIHlhbmtzLgoKTnVtYmVyaW5n IG9mIHlhbmtlZCB0b3BpY3MsIGFuZCB0aGUgc3VjY2Vzc2l2ZSBzaWJsaW5ncyBhdCB0aGUgZGVw dGgKaW50byB3aGljaCB0aGV5J3JlIGJlaW5nIHlhbmtlZCwgaXMgYWRqdXN0ZWQuCgpgYWxsb3V0 LXlhbmstcG9wJyB3b3JrcyB3aXRoIGBhbGxvdXQteWFuaycganVzdCBsaWtlIG5vcm1hbCBgeWFu ay1wb3AnCndvcmtzIHdpdGggbm9ybWFsIGB5YW5rJyBpbiBub24tb3V0bGluZSBidWZmZXJzLiIK CiAgKGludGVyYWN0aXZlICIqUCIpCiAgKHNldHEgdGhpcy1jb21tYW5kICd5YW5rKQogIChhbGxv dXQtdW5wcm90ZWN0ZWQKICAgKHlhbmsgYXJnKSkKICAoaWYgKGFsbG91dC1tb2RlLXApCiAgICAg IChhbGxvdXQteWFuay1wcm9jZXNzaW5nKSkpCjs7O18gICAgPiBhbGxvdXQteWFuay1wb3AgKCZv cHRpb25hbCBhcmcpCihkZWZ1biBhbGxvdXQteWFuay1wb3AgKCZvcHRpb25hbCBhcmcpCiAgIllh bmstcG9wIGxpa2UgYGFsbG91dC15YW5rJyB3aGVuIHBvcHBpbmcgdG8gYmFyZSBvdXRsaW5lIHBy ZWZpeGVzLgoKQWRhcHRzIGxldmVsIG9mIHBvcHBlZCB0b3BpY3MgdG8gbGV2ZWwgb2YgZnJlc2gg cHJlZml4LgoKTm90ZSAtIHByZWZpeCBjaGFuZ2VzIHRvIGRpc3RpbmN0aXZlIGJ1bGxldHMgd2ls bCBzdGljaywgaWYgZm9sbG93ZWQKYnkgcG9wcyB0byBub24tZGlzdGluY3RpdmUgeWFua3MuICBC dWcuLi4iCgogIChpbnRlcmFjdGl2ZSAiKnAiKQogIChzZXRxIHRoaXMtY29tbWFuZCAneWFuaykK ICAoeWFuay1wb3AgYXJnKQogIChpZiAoYWxsb3V0LW1vZGUtcCkKICAgICAgKGFsbG91dC15YW5r LXByb2Nlc3NpbmcpKSkKCjs7O18gIC0gU3BlY2lhbHR5IGJ1bGxldCBmdW5jdGlvbnMKOzs7XyAg IDogRmlsZSBDcm9zcyByZWZlcmVuY2VzCjs7O18gICAgPiBhbGxvdXQtcmVzb2x2ZS14cmVmICgp CihkZWZ1biBhbGxvdXQtcmVzb2x2ZS14cmVmICgpCiAgIlBvcCB0byBmaWxlIGFzc29jaWF0ZWQg d2l0aCBjdXJyZW50IGhlYWRpbmcsIGlmIGl0IGhhcyBhbiB4cmVmIGJ1bGxldC4KClwoV29ya3Mg YWNjb3JkaW5nIHRvIHNldHRpbmcgb2YgYGFsbG91dC1maWxlLXhyZWYtYnVsbGV0JykuIgogIChp bnRlcmFjdGl2ZSkKICAoaWYgKG5vdCBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCkKICAgICAgKGVy cm9yCiAgICAgICAiT3V0bGluZSBjcm9zcyByZWZlcmVuY2VzIGRpc2FibGVkIC0gbm8gYGFsbG91 dC1maWxlLXhyZWYtYnVsbGV0JyIpCiAgICAoaWYgKG5vdCAoc3RyaW5nPSAoYWxsb3V0LWN1cnJl bnQtYnVsbGV0KSBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCkpCiAgICAgICAgKGVycm9yICJDdXJy ZW50IGhlYWRpbmcgbGFja3MgY3Jvc3MtcmVmZXJlbmNlIGJ1bGxldCBgJXMnIgogICAgICAgICAg ICAgICBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCkKICAgICAgKGxldCAoKGluaGliaXQtZmllbGQt dGV4dC1tb3Rpb24gdCkKICAgICAgICAgICAgZmlsZS1uYW1lKQogICAgICAgIChzYXZlLWV4Y3Vy c2lvbgogICAgICAgICAgKGxldCogKCh0ZXh0LXN0YXJ0IGFsbG91dC1yZWNlbnQtcHJlZml4LWVu ZCkKICAgICAgICAgICAgICAgICAoaGVhZGluZy1lbmQgKHByb2duIChlbmQtb2YtbGluZSkgKHBv aW50KSkpKQogICAgICAgICAgICAoZ290by1jaGFyIHRleHQtc3RhcnQpCiAgICAgICAgICAgIChz ZXRxIGZpbGUtbmFtZQogICAgICAgICAgICAgICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICJc XHMtXFwoXFxTLSpcXCkiIGhlYWRpbmctZW5kIHQpCiAgICAgICAgICAgICAgICAgICAgICAoYnVm ZmVyLXN1YnN0cmluZyAobWF0Y2gtYmVnaW5uaW5nIDEpIChtYXRjaC1lbmQgMSkpKSkpKQogICAg ICAgIChzZXRxIGZpbGUtbmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlLW5hbWUpKQogICAgICAg IChpZiAob3IgKGZpbGUtZXhpc3RzLXAgZmlsZS1uYW1lKQogICAgICAgICAgICAgICAgKGlmIChm aWxlLXdyaXRhYmxlLXAgZmlsZS1uYW1lKQogICAgICAgICAgICAgICAgICAgICh5LW9yLW4tcCAo Zm9ybWF0ICIlcyBub3QgdGhlcmUsIGNyZWF0ZSBvbmU/ICIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmaWxlLW5hbWUpKQogICAgICAgICAgICAgICAgICAoZXJyb3IgIiVz IG5vdCBmb3VuZCBhbmQgY2FuJ3QgYmUgY3JlYXRlZCIgZmlsZS1uYW1lKSkpCiAgICAgICAgICAg IChjb25kaXRpb24tY2FzZSBmYWlsdXJlCiAgICAgICAgICAgICAgICAoZmluZC1maWxlLW90aGVy LXdpbmRvdyBmaWxlLW5hbWUpCiAgICAgICAgICAgICAgKGVycm9yIGZhaWx1cmUpKQogICAgICAg ICAgKGVycm9yICIlcyBub3QgZm91bmQiIGZpbGUtbmFtZSkpCiAgICAgICAgKQogICAgICApCiAg ICApCiAgKQoKOzs7XyAjNiBFeHBvc3VyZSBDb250cm9sCgo7OztfICAtIEZ1bmRhbWVudGFsCjs7 O18gICA+IGFsbG91dC1mbGFnLXJlZ2lvbiAoZnJvbSB0byBmbGFnKQooZGVmdW4gYWxsb3V0LWZs YWctcmVnaW9uIChmcm9tIHRvIGZsYWcpCiAgIkNvbmNlYWwgdGV4dCBiZXR3ZWVuIEZST00gYW5k IFRPIGlmIEZMQUcgaXMgbm9uLW5pbCwgZWxzZSByZXZlYWwgaXQuCgpFeHBvc3VyZS1jaGFuZ2Ug aG9vayBgYWxsb3V0LWV4cG9zdXJlLWNoYW5nZS1ob29rJyBpcyBydW4gd2l0aCB0aGUgc2FtZQph cmd1bWVudHMgYXMgdGhpcyBmdW5jdGlvbiwgYWZ0ZXIgdGhlIGV4cG9zdXJlIGNoYW5nZXMgYXJl IG1hZGUuICBcKFRoZSBvbGQKYGFsbG91dC12aWV3LWNoYW5nZS1ob29rJyBpcyBiZWluZyBkZXBy ZWNhdGVkLCBhbmQgZXZlbnR1YWxseSB3aWxsIG5vdCBiZQppbnZva2VkLlwpIgoKICA7OyBXZSB1 c2Ugb3V0bGluZSBpbnZpc2liaWxpdHkgc3BlYy4KICAocmVtb3ZlLW92ZXJsYXlzIGZyb20gdG8g J2NhdGVnb3J5ICdhbGxvdXQtZXhwb3N1cmUtY2F0ZWdvcnkpCiAgKHdoZW4gZmxhZwogICAgKGxl dCAoKG8gKG1ha2Utb3ZlcmxheSBmcm9tIHRvKSkpCiAgICAgIChvdmVybGF5LXB1dCBvICdjYXRl Z29yeSAnYWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5KQogICAgICAod2hlbiAoZmVhdHVyZXAgJ3hl bWFjcykKICAgICAgICAobGV0ICgocHJvcHMgKHN5bWJvbC1wbGlzdCAnYWxsb3V0LWV4cG9zdXJl LWNhdGVnb3J5KSkpCiAgICAgICAgICAod2hpbGUgcHJvcHMKICAgICAgICAgICAgKG92ZXJsYXkt cHV0IG8gKHBvcCBwcm9wcykgKHBvcCBwcm9wcykpKSkpKSkKICAocnVuLWhvb2tzICdhbGxvdXQt dmlldy1jaGFuZ2UtaG9vaykKICAocnVuLWhvb2std2l0aC1hcmdzICdhbGxvdXQtZXhwb3N1cmUt Y2hhbmdlLWhvb2sgZnJvbSB0byBmbGFnKSkKOzs7XyAgID4gYWxsb3V0LWZsYWctY3VycmVudC1z dWJ0cmVlIChmbGFnKQooZGVmdW4gYWxsb3V0LWZsYWctY3VycmVudC1zdWJ0cmVlIChmbGFnKQog ICJDb25jZWFsIGN1cnJlbnRseS12aXNpYmxlIHRvcGljJ3Mgc3VidHJlZSBpZiBGTEFHIG5vbi1u aWwsIGVsc2UgcmV2ZWFsIGl0LiIKCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoYWxsb3V0LWJhY2st dG8tY3VycmVudC1oZWFkaW5nKQogICAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24g dCkpCiAgICAgIChlbmQtb2YtbGluZSkpCiAgICAoYWxsb3V0LWZsYWctcmVnaW9uIChwb2ludCkK ICAgICAgICAgICAgICAgICAgICAgICAgOzsgRXhwb3NpbmcgbXVzdCBub3QgbGVhdmUgdHJhaWxp bmcgYmxhbmtzIGhpZGRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgOzsgYnV0IGNhbiBsZWF2 ZSB0aGVtIGV4cG9zZWQgd2hlbiBoaWRpbmcsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgICAg IDs7IGNhbiB1c2UgZmxhZydzIGludmVyc2UgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAg IDs7IGluY2x1ZGUtdHJhaWxpbmctYmxhbmsgY3VlOgogICAgICAgICAgICAgICAgICAgICAgICAo YWxsb3V0LWVuZC1vZi1jdXJyZW50LXN1YnRyZWUgKG5vdCBmbGFnKSkKICAgICAgICAgICAgICAg ICAgICAgICAgZmxhZykpKQoKOzs7XyAgLSBUb3BpYy1zcGVjaWZpYwo7OztfICAgPiBhbGxvdXQt c2hvdy1lbnRyeSAoKQooZGVmdW4gYWxsb3V0LXNob3ctZW50cnkgKCkKICAiTGlrZSBgYWxsb3V0 LXNob3ctY3VycmVudC1lbnRyeScsIGJ1dCByZXZlYWxzIGVudHJpZXMgaW4gaGlkZGVuIHRvcGlj cy4KClRoaXMgaXMgYSB3YXkgdG8gZ2l2ZSByZXN0cmljdGVkIHBlZWsgYXQgYSBjb25jZWFsZWQg bG9jYWxpdHkgd2l0aG91dCB0aGUKZXhwZW5zZSBvZiBleHBvc2luZyBpdHMgY29udGV4dCwgYnV0 IGNhbiBsZWF2ZSB0aGUgb3V0bGluZSB3aXRoIGFiZXJyYW50CmV4cG9zdXJlLiAgYGFsbG91dC1z aG93LW9mZnNob290JyBzaG91bGQgYmUgdXNlZCBhZnRlciB0aGUgcGVlayB0byByZWN0aWZ5CnRo ZSBleHBvc3VyZS4iCgogIChpbnRlcmFjdGl2ZSkKICAoc2F2ZS1leGN1cnNpb24KICAgIChsZXQg KGJlZyBlbmQpCiAgICAgIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKICAgICAg KHNldHEgYmVnIChpZiAoYWxsb3V0LWhpZGRlbi1wKSAoMS0gKHBvaW50KSkgKHBvaW50KSkpCiAg ICAgIChzZXRxIGVuZCAoYWxsb3V0LXByZS1uZXh0LXByZWZpeCkpCiAgICAgIChhbGxvdXQtZmxh Zy1yZWdpb24gYmVnIGVuZCBuaWwpCiAgICAgIChsaXN0IGJlZyBlbmQpKSkpCjs7O18gICA+IGFs bG91dC1zaG93LWNoaWxkcmVuICgmb3B0aW9uYWwgbGV2ZWwgc3RyaWN0KQooZGVmdW4gYWxsb3V0 LXNob3ctY2hpbGRyZW4gKCZvcHRpb25hbCBsZXZlbCBzdHJpY3QpCgogICJJZiBwb2ludCBpcyB2 aXNpYmxlLCBzaG93IGFsbCBkaXJlY3Qgc3ViaGVhZGluZ3Mgb2YgdGhpcyBoZWFkaW5nLgoKT3Ro ZXJ3aXNlLCBkbyBgYWxsb3V0LXNob3ctdG8tb2Zmc2hvb3QnLCBhbmQgdGhlbiBzaG93IHN1Ymhl YWRpbmdzLgoKT3B0aW9uYWwgTEVWRUwgc3BlY2lmaWVzIGhvdyBtYW55IGxldmVscyBiZWxvdyB0 aGUgY3VycmVudCBsZXZlbApzaG91bGQgYmUgc2hvd24sIG9yIGFsbCBsZXZlbHMgaWYgdC4gIERl ZmF1bHQgaXMgMS4KCk9wdGlvbmFsIFNUUklDVCBtZWFucyBkb24ndCByZXNvcnQgdG8gLXNob3ct dG8tb2Zmc2hvb3QsIG5vIG1hdHRlcgp3aGF0LiAgVGhpcyBpcyBiYXNpY2FsbHkgc28gLXNob3ct dG8tb2Zmc2hvb3QsIHdoaWNoIGlzIGNhbGxlZCBieQp0aGlzIGZ1bmN0aW9uLCBjYW4gZW1wbG95 IHRoZSBwdXJlIG9mZnNwcmluZy1yZXZlYWxpbmcgY2FwYWJpbGl0aWVzIG9mCml0LgoKUmV0dXJu cyBwb2ludCBhdCBlbmQgb2Ygc3VidHJlZSB0aGF0IHdhcyBvcGVuZWQsIGlmIGFueS4gIChNYXkg Z2V0IGEKcG9pbnQgb2Ygbm9uLW9wZW5lZCBzdWJ0cmVlPykiCgogIChpbnRlcmFjdGl2ZSAicCIp CiAgKGxldCAoKHN0YXJ0LXBvaW50IChwb2ludCkpKQogICAgKGlmIChhbmQgKG5vdCBzdHJpY3Qp CiAgICAgICAgICAgICAoYWxsb3V0LWhpZGRlbi1wKSkKCiAgICAgICAgKHByb2duIChhbGxvdXQt c2hvdy10by1vZmZzaG9vdCkgOyBQb2ludCdzIGNvbmNlYWxlZCwgb3BlbiB0bwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBleHBvc2UgaXQuCiAgICAgICAgICAgICAg IDs7IFRoZW4gcmVjdXJzZSwgYnV0IHdpdGggInN0cmljdCIgc2V0IHNvIHdlIGRvbid0CiAgICAg ICAgICAgICAgIDs7IGluZmluaXRlIHJlZ3Jlc3M6CiAgICAgICAgICAgICAgIChhbGxvdXQtc2hv dy1jaGlsZHJlbiBsZXZlbCB0KSkKCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgIChhbGxv dXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtbGluZSkKICAgICAgICAoc2F2ZS1yZXN0cmljdGlvbgog ICAgICAgICAgKGxldCogKGRlcHRoCiAgICAgICAgICAgICAgICAgOzsgdHJhbnNsYXRlIHRoZSBs ZXZlbCBzcGVjIGZvciB0aGlzIHJvdXRpbmUgdG8gdGhlIG9uZXMKICAgICAgICAgICAgICAgICA7 OyB1c2VkIGJ5IC1jaGFydC1zdWJ0cmVlIGFuZCAtY2hhcnQtdG8tcmV2ZWFsOgogICAgICAgICAg ICAgICAgIChjaGFydC1sZXZlbCAoY29uZCAoKG5vdCBsZXZlbCkgMSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChlcSBsZXZlbCB0KSBuaWwpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh0IGxldmVsKSkpCiAgICAgICAgICAgICAgICAgKGNoYXJ0IChh bGxvdXQtY2hhcnQtc3VidHJlZSBjaGFydC1sZXZlbCkpCiAgICAgICAgICAgICAgICAgKHRvLXJl dmVhbCAob3IgKGFsbG91dC1jaGFydC10by1yZXZlYWwgY2hhcnQgY2hhcnQtbGV2ZWwpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgaW50ZXJhY3RpdmUsIHNob3cgZGlzY29udGlu dW91cyBjaGlsZHJlbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGNoYXJ0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJhY3RpdmUtcCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1o ZWFkaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBkZXB0 aCAoYWxsb3V0LWN1cnJlbnQtZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoYW5kIChhbGxvdXQtbmV4dC1oZWFkaW5nKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICg+IGFsbG91dC1yZWNlbnQtZGVwdGgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSsgZGVwdGgpKSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJEaXNjb250aW51b3VzIG9mZnNwcmluZzsgdXNlIGAlcyAlcycl cy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUtY29t bWFuZC1rZXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXFt1bml2 ZXJzYWwtYXJndW1lbnRdIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c3Vic3RpdHV0ZS1jb21tYW5kLWtleXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlxcW2FsbG91dC1zaGlmdC1vdXRdIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIHRvIGVsZXZhdGUgdGhlbS4iKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1jaGFydC10by1yZXZlYWwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFydCAoLSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRoKSkpKSkp CiAgICAgICAgICAgIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpCiAgICAgICAgICAgICh3aGVuIChh bmQgc3RyaWN0IChhbGxvdXQtaGlkZGVuLXApKQogICAgICAgICAgICAgIDs7IENvbmNlYWxlZCBy b290IHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YsCiAgICAgICAgICAgICAg OzsgdW5sZXNzIHN0cmljdCB3YXMgc2V0LgogICAgICAgICAgICAgIChhbGxvdXQtZmxhZy1yZWdp b24gKHBvaW50KSAoYWxsb3V0LXNudWctYmFjaykgbmlsKQogICAgICAgICAgICAgICh3aGVuIGFs bG91dC1zaG93LWJvZGllcwogICAgICAgICAgICAgICAgKGdvdG8tY2hhciAoY2FyIHRvLXJldmVh bCkpCiAgICAgICAgICAgICAgICAoYWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSkpKQogICAgICAg ICAgICAod2hpbGUgdG8tcmV2ZWFsCiAgICAgICAgICAgICAgKGdvdG8tY2hhciAoY2FyIHRvLXJl dmVhbCkpCiAgICAgICAgICAgICAgKGFsbG91dC1mbGFnLXJlZ2lvbiAoc2F2ZS1leGN1cnNpb24g KGFsbG91dC1zbnVnLWJhY2spIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocHJvZ24gKHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKDEtIChwb2ludCkpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmlsKQogICAgICAgICAgICAgICh3aGVuIGFsbG91dC1zaG93LWJvZGll cwogICAgICAgICAgICAgICAgKGdvdG8tY2hhciAoY2FyIHRvLXJldmVhbCkpCiAgICAgICAgICAg ICAgICAoYWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSkpCiAgICAgICAgICAgICAgKHNldHEgdG8t cmV2ZWFsIChjZHIgdG8tcmV2ZWFsKSkpKSkpKQogICAgOzsgQ29tcGVuc2F0ZSBmb3IgYHNhdmUt ZXhjdXJzaW9uJ3MgbWFpbnRlbmFuY2Ugb2YgcG9pbnQKICAgIDs7IHdpdGhpbiBpbnZpc2libGUg dGV4dDoKICAgIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpKSkKOzs7XyAgID4gYWxsb3V0LXNob3ct dG8tb2Zmc2hvb3QgKCkKKGRlZnVuIGFsbG91dC1zaG93LXRvLW9mZnNob290ICgpCiAgIkxpa2Ug YGFsbG91dC1zaG93LWVudHJ5JywgYnV0IHJldmVhbHMgYWxsIGNvbmNlYWxlZCBhbmNlc3RvcnMs IGFzIHdlbGwuCgpVc2VmdWwgZm9yIGNvaGVyZW50bHkgZXhwb3NpbmcgdG8gYSByYW5kb20gcG9p bnQgaW4gYSBoaWRkZW4gcmVnaW9uLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9u CiAgICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KQogICAgICAgICAgKG9yaWct cHQgKHBvaW50KSkKCSAgKG9yaWctcHJlZiAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNr ZWQpKQoJICAobGFzdC1hdCAocG9pbnQpKQoJICAoYmFnLWl0IDApKQogICAgICAod2hpbGUgKG9y ICg+IGJhZy1pdCAxKSAoYWxsb3V0LWhpZGRlbi1wKSkKICAgICAgICAod2hpbGUgKGFsbG91dC1o aWRkZW4tcCkKICAgICAgICAgIChtb3ZlLWJlZ2lubmluZy1vZi1saW5lIDEpCiAgICAgICAgICAo aWYgKGFsbG91dC1oaWRkZW4tcCkgKGZvcndhcmQtY2hhciAtMSkpKQoJKGlmICg9IGxhc3QtYXQg KHNldHEgbGFzdC1hdCAocG9pbnQpKSkKCSAgICA7OyBPb3BzLCB3ZSdyZSBub3QgbWFraW5nIGFu eSBwcm9ncmVzcyEgIFNob3cgdGhlIGN1cnJlbnQgdG9waWMKCSAgICA7OyBjb21wbGV0ZWx5LCBh bmQgdHJ5IG9uZSBtb3JlIHRpbWUgaGVyZSwgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgoJICAgIChw cm9nbiAoYmVnaW5uaW5nLW9mLWxpbmUpCgkJICAgKGFsbG91dC1zaG93LWN1cnJlbnQtc3VidHJl ZSkKCQkgICAoZ290by1jaGFyIG9yaWctcHQpCgkJICAgKHNldHEgYmFnLWl0ICgxKyBiYWctaXQp KQogICAgICAgICAgICAgICAgICAgKGlmICg+IGJhZy1pdCAxKQogICAgICAgICAgICAgICAgICAg ICAgIChlcnJvciAiYWxsb3V0LXNob3ctdG8tb2Zmc2hvb3Q6ICVzIgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU3R1bXBlZCBieSBhYmVycmFudCBuZXN0aW5nLiIpKSkKICAgICAgICAg IChpZiAoPiBiYWctaXQgMCkgKHNldHEgYmFnLWl0IDApKQogICAgICAgICAgKGFsbG91dC1zaG93 LWNoaWxkcmVuKQogICAgICAgICAgKGdvdG8tY2hhciBvcmlnLXByZWYpKSkKICAgICAgKGdvdG8t Y2hhciBvcmlnLXB0KSkpCiAgKGlmIChhbGxvdXQtaGlkZGVuLXApCiAgICAgIChhbGxvdXQtc2hv dy1lbnRyeSkpKQo7OztfICAgPiBhbGxvdXQtaGlkZS1jdXJyZW50LWVudHJ5ICgpCihkZWZ1biBh bGxvdXQtaGlkZS1jdXJyZW50LWVudHJ5ICgpCiAgIkhpZGUgdGhlIGJvZHkgZGlyZWN0bHkgZm9s bG93aW5nIHRoaXMgaGVhZGluZy4iCiAgKGludGVyYWN0aXZlKQogIChhbGxvdXQtYmFjay10by1j dXJyZW50LWhlYWRpbmcpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0ICgoaW5oaWJpdC1maWVs ZC10ZXh0LW1vdGlvbiB0KSkKICAgICAgKGVuZC1vZi1saW5lKSkKICAgIChhbGxvdXQtZmxhZy1y ZWdpb24gKHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24gKGFsbG91dC1lbmQt b2YtZW50cnkpIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHQpKSkKOzs7XyAgID4g YWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSAoJm9wdGlvbmFsIGFyZykKKGRlZnVuIGFsbG91dC1z aG93LWN1cnJlbnQtZW50cnkgKCZvcHRpb25hbCBhcmcpCiAgIlNob3cgYm9keSBmb2xsb3dpbmcg Y3VycmVudCBoZWFkaW5nLCBvciBoaWRlIGVudHJ5IHdpdGggdW5pdmVyc2FsIGFyZ3VtZW50LiIK CiAgKGludGVyYWN0aXZlICJQIikKICAoaWYgYXJnCiAgICAgIChhbGxvdXQtaGlkZS1jdXJyZW50 LWVudHJ5KQogICAgKHNhdmUtZXhjdXJzaW9uIChhbGxvdXQtc2hvdy10by1vZmZzaG9vdCkpCiAg ICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGFsbG91dC1mbGFnLXJlZ2lvbiAocG9pbnQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgKHByb2duIChhbGxvdXQtZW5kLW9mLWVudHJ5IHQpIChwb2lu dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKQogICAgICApKSkKOzs7XyAgID4gYWxs b3V0LXNob3ctY3VycmVudC1zdWJ0cmVlICgmb3B0aW9uYWwgYXJnKQooZGVmdW4gYWxsb3V0LXNo b3ctY3VycmVudC1zdWJ0cmVlICgmb3B0aW9uYWwgYXJnKQogICJTaG93IGV2ZXJ5dGhpbmcgd2l0 aGluIHRoZSBjdXJyZW50IHRvcGljLiAgV2l0aCBhIHJlcGVhdC1jb3VudCwKZXhwb3NlIHRoaXMg dG9waWMgYW5kIGl0cyBzaWJsaW5ncy4iCiAgKGludGVyYWN0aXZlICJQIikKICAoc2F2ZS1leGN1 cnNpb24KICAgIChpZiAoPD0gKGFsbG91dC1jdXJyZW50LWRlcHRoKSAwKQoJOzsgT3V0c2lkZSBh bnkgdG9waWNzIC0gdHJ5IHRvIGdldCB0byB0aGUgZmlyc3Q6CgkoaWYgKG5vdCAoYWxsb3V0LW5l eHQtaGVhZGluZykpCgkgICAgKGVycm9yICJObyB0b3BpY3MiKQoJICA7OyBnb3QgdG8gZmlyc3Qs IG91dGVybW9zdCB0b3BpYyAtIHNldCB0byBleHBvc2UgaXQgYW5kIHNpYmxpbmdzOgoJICAobWVz c2FnZSAiQWJvdmUgb3V0ZXJtb3N0IHRvcGljIC0gZXhwb3NpbmcgYWxsLiIpCgkgIChhbGxvdXQt ZmxhZy1yZWdpb24gKHBvaW50LW1pbikocG9pbnQtbWF4KSBuaWwpKQogICAgICAoYWxsb3V0LWJl Z2lubmluZy1vZi1jdXJyZW50LWxpbmUpCiAgICAgIChpZiAobm90IGFyZykKCSAgKGFsbG91dC1m bGFnLWN1cnJlbnQtc3VidHJlZSBuaWwpCgkoYWxsb3V0LWJlZ2lubmluZy1vZi1sZXZlbCkKCShh bGxvdXQtZXhwb3NlLXRvcGljICcoKiA6KSkpKSkpCjs7O18gICA+IGFsbG91dC1jdXJyZW50LXRv cGljLWNvbGxhcHNlZC1wICgmb3B0aW9uYWwgaW5jbHVkZS1zaW5nbGUtbGluZXJzKQooZGVmdW4g YWxsb3V0LWN1cnJlbnQtdG9waWMtY29sbGFwc2VkLXAgKCZvcHRpb25hbCBpbmNsdWRlLXNpbmds ZS1saW5lcnMpCiAgIlRydWUgaWYgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGNvbnRhaW5pbmcgdG9w aWMgaXMgYWxyZWFkeSBjb2xsYXBzZWQuCgpTaW5nbGUgbGluZSB0b3BpY3MgaW50cmluc2ljYWxs eSBjYW4gYmUgY29uc2lkZXJlZCBhcyBiZWluZyBib3RoCmNvbGxhcHNlZCBhbmQgdW5jb2xsYXBz ZWQuICBJZiBvcHRpb25hbCBJTkNMVURFLVNJTkdMRS1MSU5FUlMgaXMKdHJ1ZSwgdGhlbiBzaW5n bGUtbGluZSB0b3BpY3MgYXJlIGNvbnNpZGVyZWQgdG8gYmUgY29sbGFwc2VkLiAgQnkKZGVmYXVs dCwgdGhleSBhcmUgdHJlYXRlZCBhcyBiZWluZyB1bmNvbGxhcHNlZC4iCiAgKHNhdmUtZXhjdXJz aW9uCiAgICAoYW5kCiAgICAgOzsgSXMgdGhlIHRvcGljIGFsbCBvbiBvbmUgbGluZSAoYWxsb3dp bmcgZm9yIHRyYWlsaW5nIGJsYW5rIGxpbmUpPwogICAgICg+PSAocHJvZ24gKGFsbG91dC1iYWNr LXRvLWN1cnJlbnQtaGVhZGluZykKICAgICAgICAgICAgICAgIChtb3ZlLWVuZC1vZi1saW5lIDEp CiAgICAgICAgICAgICAgICAocG9pbnQpKQogICAgICAgICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50 LXN1YnRyZWUgKG5vdCAobG9va2luZy1hdCAiXG5cbiIpKSkpCgogICAgIChvciBpbmNsdWRlLXNp bmdsZS1saW5lcnMKICAgICAgICAgKHByb2duIChiYWNrd2FyZC1jaGFyIDEpIChhbGxvdXQtaGlk ZGVuLXApKSkpKSkKOzs7XyAgID4gYWxsb3V0LWhpZGUtY3VycmVudC1zdWJ0cmVlICgmb3B0aW9u YWwganVzdC1jbG9zZSkKKGRlZnVuIGFsbG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSAoJm9wdGlv bmFsIGp1c3QtY2xvc2UpCiAgIkNsb3NlIHRoZSBjdXJyZW50IHRvcGljLCBvciBjb250YWluaW5n IHRvcGljIGlmIHRoaXMgb25lIGlzIGFscmVhZHkgY2xvc2VkLgoKSWYgdGhpcyB0b3BpYyBpcyBj bG9zZWQgYW5kIGl0J3MgYSB0b3AgbGV2ZWwgdG9waWMsIGNsb3NlIHRoaXMgdG9waWMKYW5kIGl0 cyBzaWJsaW5ncy4KCklmIG9wdGlvbmFsIGFyZyBKVVNULUNMT1NFIGlzIG5vbi1uaWwsIGRvIG5v dCBjbG9zZSB0aGUgcGFyZW50IG9yCnNpYmxpbmdzLCBldmVuIGlmIHRoZSB0YXJnZXQgdG9waWMg aXMgYWxyZWFkeSBjbG9zZWQuIgoKICAoaW50ZXJhY3RpdmUpCiAgKGxldCogKChmcm9tIChwb2lu dCkpCiAgICAgICAgIChzaWJzLW1zZyAiVG9wLWxldmVsIHRvcGljIGFscmVhZHkgY2xvc2VkIC0g Y2xvc2luZyBzaWJsaW5ncy4uLiIpCiAgICAgICAgIChjdXJyZW50LWV4cG9zZWQgKG5vdCAoYWxs b3V0LWN1cnJlbnQtdG9waWMtY29sbGFwc2VkLXAgdCkpKSkKICAgIChjb25kIChjdXJyZW50LWV4 cG9zZWQgKGFsbG91dC1mbGFnLWN1cnJlbnQtc3VidHJlZSB0KSkKICAgICAgICAgIChqdXN0LWNs b3NlIG5pbCkKICAgICAgICAgICgoYWxsb3V0LWFzY2VuZCkgKGFsbG91dC1oaWRlLWN1cnJlbnQt c3VidHJlZSkpCiAgICAgICAgICAodCAoZ290by1jaGFyIDApCiAgICAgICAgICAgICAobWVzc2Fn ZSBzaWJzLW1zZykKICAgICAgICAgICAgIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tl ZCkKICAgICAgICAgICAgIChhbGxvdXQtZXhwb3NlLXRvcGljICcoMCA6KSkKICAgICAgICAgICAg IChtZXNzYWdlIChjb25jYXQgc2licy1tc2cgIiAgRG9uZS4iKSkpKQogICAgKGdvdG8tY2hhciBm cm9tKSkpCjs7O18gICA+IGFsbG91dC1zaG93LWN1cnJlbnQtYnJhbmNoZXMgKCkKKGRlZnVuIGFs bG91dC1zaG93LWN1cnJlbnQtYnJhbmNoZXMgKCkKICAiU2hvdyBhbGwgc3ViaGVhZGluZ3Mgb2Yg dGhpcyBoZWFkaW5nLCBidXQgbm90IHRoZWlyIGJvZGllcy4iCiAgKGludGVyYWN0aXZlKQogIChs ZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQogICAgKGJlZ2lubmluZy1vZi1saW5l KSkKICAoYWxsb3V0LXNob3ctY2hpbGRyZW4gdCkpCjs7O18gICA+IGFsbG91dC1oaWRlLWN1cnJl bnQtbGVhdmVzICgpCihkZWZ1biBhbGxvdXQtaGlkZS1jdXJyZW50LWxlYXZlcyAoKQogICJIaWRl IHRoZSBib2RpZXMgb2YgdGhlIGN1cnJlbnQgdG9waWMgYW5kIGFsbCBpdHMgb2Zmc3ByaW5nLiIK ICAoaW50ZXJhY3RpdmUpCiAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAoYWxs b3V0LWhpZGUtcmVnaW9uLWJvZHkgKHBvaW50KSAocHJvZ24gKGFsbG91dC1lbmQtb2YtY3VycmVu dC1zdWJ0cmVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBv aW50KSkpKQoKOzs7XyAgLSBSZWdpb24gYW5kIGJleW9uZAo7OztfICAgPiBhbGxvdXQtc2hvdy1h bGwgKCkKKGRlZnVuIGFsbG91dC1zaG93LWFsbCAoKQogICJTaG93IGFsbCBvZiB0aGUgdGV4dCBp biB0aGUgYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUpCiAgKG1lc3NhZ2UgIkV4cG9zaW5nIGVudGly ZSBidWZmZXIuLi4iKQogIChhbGxvdXQtZmxhZy1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1h eCkgbmlsKQogIChtZXNzYWdlICJFeHBvc2luZyBlbnRpcmUgYnVmZmVyLi4uICBEb25lLiIpKQo7 OztfICAgPiBhbGxvdXQtaGlkZS1ib2RpZXMgKCkKKGRlZnVuIGFsbG91dC1oaWRlLWJvZGllcyAo KQogICJIaWRlIGFsbCBvZiBidWZmZXIgZXhjZXB0IGhlYWRpbmdzLiIKICAoaW50ZXJhY3RpdmUp CiAgKGFsbG91dC1oaWRlLXJlZ2lvbi1ib2R5IChwb2ludC1taW4pIChwb2ludC1tYXgpKSkKOzs7 XyAgID4gYWxsb3V0LWhpZGUtcmVnaW9uLWJvZHkgKHN0YXJ0IGVuZCkKKGRlZnVuIGFsbG91dC1o aWRlLXJlZ2lvbi1ib2R5IChzdGFydCBlbmQpCiAgIkhpZGUgYWxsIGJvZHkgbGluZXMgaW4gdGhl IHJlZ2lvbiwgYnV0IG5vdCBoZWFkaW5ncy4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoc2F2ZS1y ZXN0cmljdGlvbgogICAgICAobmFycm93LXRvLXJlZ2lvbiBzdGFydCBlbmQpCiAgICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCiAgICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9u IHQpKQogICAgICAgICh3aGlsZSAobm90IChlb2JwKSkKICAgICAgICAgIChlbmQtb2YtbGluZSkK ICAgICAgICAgIChhbGxvdXQtZmxhZy1yZWdpb24gKHBvaW50KSAoYWxsb3V0LWVuZC1vZi1lbnRy eSkgdCkKICAgICAgICAgIChpZiAobm90IChlb2JwKSkKICAgICAgICAgICAgICAoZm9yd2FyZC1j aGFyCiAgICAgICAgICAgICAgIChpZiAobG9va2luZy1hdCAiXG5cbiIpCiAgICAgICAgICAgICAg ICAgICAyIDEpKSkpKSkpKQoKOzs7XyAgID4gYWxsb3V0LWV4cG9zZS10b3BpYyAoc3BlYykKKGRl ZnVuIGFsbG91dC1leHBvc2UtdG9waWMgKHNwZWMpCiAgIkFwcGx5IGV4cG9zdXJlIHNwZWNzIHRv IHN1Y2Nlc3NpdmUgb3V0bGluZSB0b3BpYyBpdGVtcy4KClVzZSB0aGUgbW9yZSBjb252ZW5pZW50 IGZyb250ZW5kLCBgYWxsb3V0LW5ldy1leHBvc3VyZScsIGlmIHlvdSBkb24ndApuZWVkIGV2YWx1 YXRpb24gb2YgdGhlIGFyZ3VtZW50cywgb3IgZXZlbiBiZXR0ZXIsIHRoZSBgYWxsb3V0LWxheW91 dCcKdmFyaWFibGUta2V5ZWQgbW9kZS1hY3RpdmF0aW9uL2F1dG8tZXhwb3N1cmUgZmVhdHVyZSBv ZiBhbGxvdXQgb3V0bGluZQptb2RlLiAgU2VlIHRoZSByZXNwZWN0aXZlIGRvY3VtZW50YXRpb24g c3RyaW5ncyBmb3IgbW9yZSBkZXRhaWxzLgoKQ3Vyc29yIGlzIGxlZnQgYXQgc3RhcnQgcG9zaXRp b24uCgpTUEVDIGlzIGVpdGhlciBhIG51bWJlciBvciBhIGxpc3QuCgpTdWNjZXNzaXZlIHNwZWNz IG9uIGEgbGlzdCBhcmUgYXBwbGllZCB0byBzdWNjZXNzaXZlIHNpYmxpbmcgdG9waWNzLgoKQSBz aW1wbGUgc3BlYyBcKGVpdGhlciBhIG51bWJlciwgb25lIG9mIGEgZmV3IHN5bWJvbHMsIG9yIHRo ZSBudWxsCmxpc3QpIGRpY3RhdGVzIHRoZSBleHBvc3VyZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcg dG9waWMuCgpOb24tbnVsbCBsaXN0cyByZWN1cnNpdmVseSBkZXNpZ25hdGUgZXhwb3N1cmUgc3Bl Y3MgZm9yIHJlc3BlY3RpdmUKc3VidG9waWNzIG9mIHRoZSBjdXJyZW50IHRvcGljLgoKVGhlIGA6 JyByZXBlYXQgc3BlYyBpcyB1c2VkIHRvIHNwZWNpZnkgZXhwb3N1cmUgZm9yIGFueSBudW1iZXIg b2YKc3VjY2Vzc2l2ZSBzaWJsaW5ncywgdXAgdG8gdGhlIHRyYWlsaW5nIG9uZXMgZm9yIHdoaWNo IHRoZXJlIGFyZQpleHBsaWNpdCBzcGVjcyBmb2xsb3dpbmcgdGhlIGA6Jy4KClNpbXBsZSAobnVt ZXJpYyBhbmQgbnVsbC1saXN0KSBzcGVjcyBhcmUgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKCiBO dW1iZXJzIGluZGljYXRlIHRoZSByZWxhdGl2ZSBkZXB0aCB0byBvcGVuIHRoZSBjb3JyZXNwb25k aW5nIHRvcGljLgogICAgIC0gbmVnYXRpdmUgbnVtYmVycyBmb3JjZSB0aGUgdG9waWMgdG8gYmUg Y2xvc2VkIGJlZm9yZSBvcGVuaW5nIHRvIHRoZQogICAgICAgYWJzb2x1dGUgdmFsdWUgb2YgdGhl IG51bWJlciwgc28gYWxsIHNpYmxpbmdzIGFyZSBvcGVuIG9ubHkgdG8KICAgICAgIHRoYXQgbGV2 ZWwuCiAgICAgLSBwb3NpdGl2ZSBudW1iZXJzIG9wZW4gdG8gdGhlIHJlbGF0aXZlIGRlcHRoIGlu ZGljYXRlZCBieSB0aGUKICAgICAgIG51bWJlciwgYnV0IGRvIG5vdCBmb3JjZSBhbHJlYWR5IG9w ZW5lZCBzdWJ0b3BpY3MgdG8gYmUgY2xvc2VkLgogICAgIC0gMCBtZWFucyB0byBjbG9zZSB0b3Bp YyAtIGhpZGUgYWxsIG9mZnNwcmluZy4KICA6ICAtIGByZXBlYXQnCiAgICAgICBhcHBseSBwcmlv ciBlbGVtZW50IHRvIGFsbCBzaWJsaW5ncyBhdCBjdXJyZW50IGxldmVsLCAqdXAgdG8qCiAgICAg ICB0aG9zZSBzaWJsaW5ncyB0aGF0IHdvdWxkIGJlIGNvdmVyZWQgYnkgc3BlY3MgZm9sbG93aW5n IHRoZSBgOicKICAgICAgIG9uIHRoZSBsaXN0LiAgSWUsIGFwcGx5IHRvIGFsbCB0b3BpY3MgYXQg bGV2ZWwgYnV0IHRoZSBsYXN0CiAgICAgICBvbmVzLiAgXChPbmx5IGZpcnN0IG9mIG11bHRpcGxl IGNvbG9ucyBhdCBzYW1lIGxldmVsIGlzCiAgICAgICByZXNwZWN0ZWQgLSBzdWJzZXF1ZW50IG9u ZXMgYXJlIGRpc2NhcmRlZC4pCiAgKiAgLSBjb21wbGV0ZWx5IG9wZW5zIHRoZSB0b3BpYywgaW5j bHVkaW5nIGJvZGllcy4KICArICAtIHNob3dzIGFsbCB0aGUgc3ViIGhlYWRlcnMsIGJ1dCBub3Qg dGhlIGJvZGllcwogIC0gIC0gZXhwb3NlcyB0aGUgYm9keSBvZiB0aGUgY29ycmVzcG9uZGluZyB0 b3BpYy4KCkV4YW1wbGVzOgpcKGFsbG91dC1leHBvc2UtdG9waWMgJygtMSA6IDApKQoJQ2xvc2Ug dGhpcyBhbmQgYWxsIGZvbGxvd2luZyB0b3BpY3MgYXQgY3VycmVudCBsZXZlbCwgZXhwb3NpbmcK CW9ubHkgdGhlaXIgaW1tZWRpYXRlIGNoaWxkcmVuLCBidXQgY2xvc2UgZG93biB0aGUgbGFzdCB0 b3BpYwoJYXQgdGhpcyBjdXJyZW50IGxldmVsIGNvbXBsZXRlbHkuClwoYWxsb3V0LWV4cG9zZS10 b3BpYyAnKC0xICgpIDogMSAwKSkKCUNsb3NlIGN1cnJlbnQgdG9waWMgc28gb25seSB0aGUgaW1t ZWRpYXRlIHN1YnRvcGljcyBhcmUgc2hvd247CglzaG93IHRoZSBjaGlsZHJlbiBpbiB0aGUgc2Vj b25kIHRvIGxhc3QgdG9waWMsIGFuZCBjb21wbGV0ZWx5CgljbG9zZSB0aGUgbGFzdCBvbmUuClwo YWxsb3V0LWV4cG9zZS10b3BpYyAnKC0yIDogLTEgKikpCiAgICAgICAgRXhwb3NlIGNoaWxkcmVu IGFuZCBncmFuZGNoaWxkcmVuIG9mIGFsbCB0b3BpY3MgYXQgY3VycmVudAoJbGV2ZWwgZXhjZXB0 IHRoZSBsYXN0IHR3bzsgZXhwb3NlIGNoaWxkcmVuIG9mIHRoZSBzZWNvbmQgdG8KCWxhc3QgYW5k IGNvbXBsZXRlbHkgb3BlbiB0aGUgbGFzdCBvbmUuIgoKICAoaW50ZXJhY3RpdmUgInhFeHBvc3Vy ZSBzcGVjOiAiKQogIChpZiAobm90IChsaXN0cCBzcGVjKSkKICAgICAgbmlsCiAgICAobGV0ICgo ZGVwdGggKGFsbG91dC1kZXB0aCkpCgkgIChtYXgtcG9zIDApCgkgIHByZXYtZWxlbSBjdXJyLWVs ZW0KCSAgc3RheSkKICAgICAgKHdoaWxlIHNwZWMKCShzZXRxIHByZXYtZWxlbSBjdXJyLWVsZW0K CSAgICAgIGN1cnItZWxlbSAoY2FyIHNwZWMpCgkgICAgICBzcGVjIChjZHIgc3BlYykpCgkoY29u ZAkJCQk7IERvIGN1cnJlbnQgZWxlbWVudDoKCSAoKG51bGwgY3Vyci1lbGVtKSBuaWwpCgkgKChz eW1ib2xwIGN1cnItZWxlbSkKCSAgKGNvbmQgKChlcSBjdXJyLWVsZW0gJyopIChhbGxvdXQtc2hv dy1jdXJyZW50LXN1YnRyZWUpCgkJIChpZiAoPiBhbGxvdXQtcmVjZW50LWVuZC1vZi1zdWJ0cmVl IG1heC1wb3MpCgkJICAgICAoc2V0cSBtYXgtcG9zIGFsbG91dC1yZWNlbnQtZW5kLW9mLXN1YnRy ZWUpKSkKICAgICAgICAgICAgICAgICgoZXEgY3Vyci1lbGVtICcrKQogICAgICAgICAgICAgICAg IChpZiAobm90IChhbGxvdXQtaGlkZGVuLXApKQogICAgICAgICAgICAgICAgICAgICAoc2F2ZS1l eGN1cnNpb24gKGFsbG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSB0KSkpCiAgICAgICAgICAgICAg ICAgKGFsbG91dC1zaG93LWN1cnJlbnQtYnJhbmNoZXMpCgkJIChpZiAoPiBhbGxvdXQtcmVjZW50 LWVuZC1vZi1zdWJ0cmVlIG1heC1wb3MpCgkJICAgICAoc2V0cSBtYXgtcG9zIGFsbG91dC1yZWNl bnQtZW5kLW9mLXN1YnRyZWUpKSkKCQkoKGVxIGN1cnItZWxlbSAnLSkgKGFsbG91dC1zaG93LWN1 cnJlbnQtZW50cnkpKQoJCSgoZXEgY3Vyci1lbGVtICc6KQoJCSAoc2V0cSBzdGF5IHQpCgkJIDs7 IEV4cGFuZCB0aGUgYHJlcGVhdCcgc3BlYyB0byBhbiBleHBsaWNpdCB2ZXJzaW9uLAoJCSA7OyB3 LnIudC4gcmVtYWluaW5nIHNpYmxpbmdzOgoJCSAobGV0ICgocmVzaWR1ZQkgICA7ID0gIyBvZiBz aWJzIG5vdCBjb3ZlcmVkIGJ5IHJlbWFpbmluZyBzcGVjCgkJCTs7IERhbmcgLSBjb3VsZCBiZSBu aWNlIHRvIG1ha2UgdXNlIG9mIHRoZSBjaGFydCwgc2lnaDoKCQkJKC0gKGxlbmd0aCAoYWxsb3V0 LWNoYXJ0LXNpYmxpbmdzKSkKCQkJICAgKGxlbmd0aCBzcGVjKSkpKQoJCSAgIChpZiAoPCAwIHJl c2lkdWUpCgkJICAgICAgIDs7IFNvbWUgcmVzaWR1ZSAtIGNvdmVyIGl0IHdpdGggcHJldi1lbGVt OgoJCSAgICAgICAoc2V0cSBzcGVjIChhcHBlbmQgKG1ha2UtbGlzdCByZXNpZHVlIHByZXYtZWxl bSkKCQkJCQkgIHNwZWMpKSkpKSkpCgkgKChudW1iZXJwIGN1cnItZWxlbSkKCSAgKGlmIChhbmQg KD49IDAgY3Vyci1lbGVtKSAobm90IChhbGxvdXQtaGlkZGVuLXApKSkKCSAgICAgIChzYXZlLWV4 Y3Vyc2lvbiAoYWxsb3V0LWhpZGUtY3VycmVudC1zdWJ0cmVlIHQpCgkJCSAgICAgIChpZiAoPiAw IGN1cnItZWxlbSkKCQkJCSAgbmlsCgkJCQkoaWYgKD4gYWxsb3V0LXJlY2VudC1lbmQtb2Ytc3Vi dHJlZSBtYXgtcG9zKQoJCQkJICAgIChzZXRxIG1heC1wb3MKCQkJCQkgIGFsbG91dC1yZWNlbnQt ZW5kLW9mLXN1YnRyZWUpKSkpKQoJICAoaWYgKD4gKGFicyBjdXJyLWVsZW0pIDApCgkgICAgICAo cHJvZ24gKGFsbG91dC1zaG93LWNoaWxkcmVuIChhYnMgY3Vyci1lbGVtKSkKCQkgICAgIChpZiAo PiBhbGxvdXQtcmVjZW50LWVuZC1vZi1zdWJ0cmVlIG1heC1wb3MpCgkJCSAoc2V0cSBtYXgtcG9z IGFsbG91dC1yZWNlbnQtZW5kLW9mLXN1YnRyZWUpKSkpKQoJICAoKGxpc3RwIGN1cnItZWxlbSkK CSAgIChpZiAoYWxsb3V0LWRlc2NlbmQtdG8tZGVwdGggKDErIGRlcHRoKSkKCSAgICAgICAobGV0 ICgoZ290IChhbGxvdXQtZXhwb3NlLXRvcGljIGN1cnItZWxlbSkpKQoJCSAoaWYgKGFuZCBnb3Qg KD4gZ290IG1heC1wb3MpKSAoc2V0cSBtYXgtcG9zIGdvdCkpKSkpKQoJKGNvbmQgKHN0YXkgKHNl dHEgc3RheSBuaWwpKQoJICAgICAgKChsaXN0cCAoY2FyIHNwZWMpKSBuaWwpCgkgICAgICAoKD4g bWF4LXBvcyAocG9pbnQpKQoJICAgICAgIDs7IENhcGl0YWxpemUgb24gbWF4LXBvcyBzdGF0ZSB0 byBnZXQgdXMgbmVhcmVyIG5leHQgc2libGluZzoKCSAgICAgICAocHJvZ24gKGdvdG8tY2hhciAo bWluIChwb2ludC1tYXgpIG1heC1wb3MpKQoJCSAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKSkp CgkgICAgICAoKGFsbG91dC1uZXh0LXNpYmxpbmcgZGVwdGgpKSkpCiAgICAgIG1heC1wb3MpKSkK Ozs7XyAgID4gYWxsb3V0LW9sZC1leHBvc2UtdG9waWMgKHNwZWMgJnJlc3QgZm9sbG93ZXJzKQoo ZGVmdW4gYWxsb3V0LW9sZC1leHBvc2UtdG9waWMgKHNwZWMgJnJlc3QgZm9sbG93ZXJzKQoKICAi RGVwcmVjYXRlZC4gIFVzZSBgYWxsb3V0LWV4cG9zZS10b3BpYycgXCh3aXRoIGRpZmZlcmVudCBz Y2hlbWEKZm9ybWF0KSBpbnN0ZWFkLgoKRGljdGF0ZSB3aG9sZXNhbGUgZXhwb3N1cmUgc2NoZW1l IGZvciBjdXJyZW50IHRvcGljLCBhY2NvcmRpbmcgdG8gU1BFQy4KClNQRUMgaXMgZWl0aGVyIGEg bnVtYmVyIG9yIGEgbGlzdC4gIE9wdGlvbmFsIHN1Y2Nlc3NpdmUgYXJncwpkaWN0YXRlIGV4cG9z dXJlIGZvciBzdWJzZXF1ZW50IHNpYmxpbmdzIG9mIGN1cnJlbnQgdG9waWMuCgpBIHNpbXBsZSBz cGVjIChlaXRoZXIgYSBudW1iZXIsIGEgc3BlY2lhbCBzeW1ib2wsIG9yIHRoZSBudWxsIGxpc3Qp CmRpY3RhdGVzIHRoZSBvdmVyYWxsIGV4cG9zdXJlIGZvciBhIHRvcGljLiAgTm9uIG51bGwgbGlz dHMgYXJlCmNvbXBvc2l0ZSBzcGVjcyB3aG9zZSBmaXJzdCBlbGVtZW50IGRpY3RhdGVzIHRoZSBv dmVyYWxsIGV4cG9zdXJlIGZvcgphIHRvcGljLCB3aXRoIHRoZSBzdWJzZXF1ZW50IGVsZW1lbnRz IGluIHRoZSBsaXN0IGludGVycHJldGVkIGFzIHNwZWNzCnRoYXQgZGljdGF0ZSB0aGUgZXhwb3N1 cmUgZm9yIHRoZSBzdWNjZXNzaXZlIG9mZnNwcmluZyBvZiB0aGUgdG9waWMuCgpTaW1wbGUgKG51 bWVyaWMgYW5kIG51bGwtbGlzdCkgc3BlY3MgYXJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6Cgog LSBOdW1iZXJzIGluZGljYXRlIHRoZSByZWxhdGl2ZSBkZXB0aCB0byBvcGVuIHRoZSBjb3JyZXNw b25kaW5nIHRvcGljOgogIC0gbmVnYXRpdmUgbnVtYmVycyBmb3JjZSB0aGUgdG9waWMgdG8gYmUg Y2xvc2UgYmVmb3JlIG9wZW5pbmcgdG8gdGhlCiAgICBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVt YmVyLgogIC0gcG9zaXRpdmUgbnVtYmVycyBqdXN0IG9wZW4gdG8gdGhlIHJlbGF0aXZlIGRlcHRo IGluZGljYXRlZCBieSB0aGUgbnVtYmVyLgogIC0gMCBqdXN0IGNsb3NlcwogLSBgKicgY29tcGxl dGVseSBvcGVucyB0aGUgdG9waWMsIGluY2x1ZGluZyBib2RpZXMuCiAtIGArJyBzaG93cyBhbGwg dGhlIHN1YiBoZWFkZXJzLCBidXQgbm90IHRoZSBib2RpZXMKIC0gYC0nIGV4cG9zZXMgdGhlIGJv ZHkgYW5kIGltbWVkaWF0ZSBvZmZzcHJpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdG9waWMuCgpJ ZiB0aGUgc3BlYyBpcyBhIGxpc3QsIHRoZSBmaXJzdCBlbGVtZW50IG11c3QgYmUgYSBudW1iZXIs IHdoaWNoCmRpY3RhdGVzIHRoZSBleHBvc3VyZSBkZXB0aCBvZiB0aGUgdG9waWMgYXMgYSB3aG9s ZS4gIFN1YnNlcXVlbnQKZWxlbWVudHMgb2YgdGhlIGxpc3QgYXJlIG5lc3RlZCBTUEVDcywgZGlj dGF0aW5nIHRoZSBzcGVjaWZpYyBleHBvc3VyZQpmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc3By aW5nIG9mIHRoZSB0b3BpYy4KCk9wdGlvbmFsIEZPTExPV0VSUyBhcmd1bWVudHMgZGljdGF0ZSBl eHBvc3VyZSBmb3Igc3VjY2VlZGluZyBzaWJsaW5ncy4iCgogIChpbnRlcmFjdGl2ZSAieEV4cG9z dXJlIHNwZWM6ICIpCiAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKICAgICAg ICAoZGVwdGggKGFsbG91dC1jdXJyZW50LWRlcHRoKSkKCW1heC1wb3MpCiAgICAoY29uZCAoKG51 bGwgc3BlYykgbmlsKQoJICAoKHN5bWJvbHAgc3BlYykKCSAgIChpZiAoZXEgc3BlYyAnKikgKGFs bG91dC1zaG93LWN1cnJlbnQtc3VidHJlZSkpCgkgICAoaWYgKGVxIHNwZWMgJyspIChhbGxvdXQt c2hvdy1jdXJyZW50LWJyYW5jaGVzKSkKCSAgIChpZiAoZXEgc3BlYyAnLSkgKGFsbG91dC1zaG93 LWN1cnJlbnQtZW50cnkpKSkKCSAgKChudW1iZXJwIHNwZWMpCgkgICAoaWYgKD49IDAgc3BlYykK CSAgICAgICAoc2F2ZS1leGN1cnNpb24gKGFsbG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSB0KQoJ CQkgICAgICAgKGVuZC1vZi1saW5lKQoJCQkgICAgICAgKGlmIChvciAobm90IG1heC1wb3MpCgkJ CQkgICAgICAgKD4gKHBvaW50KSBtYXgtcG9zKSkKCQkJCSAgIChzZXRxIG1heC1wb3MgKHBvaW50 KSkpCgkJCSAgICAgICAoaWYgKD4gMCBzcGVjKQoJCQkJICAgKHNldHEgc3BlYyAoKiAtMSBzcGVj KSkpKSkKCSAgIChpZiAoPiBzcGVjIDApCgkgICAgIChhbGxvdXQtc2hvdy1jaGlsZHJlbiBzcGVj KSkpCgkgICgobGlzdHAgc3BlYykKCSAgIDsobGV0ICgoZ290IChhbGxvdXQtb2xkLWV4cG9zZS10 b3BpYyAoY2FyIHNwZWMpKSkpCgkgICA7ICAoaWYgKGFuZCBnb3QgKG9yIChub3QgbWF4LXBvcykg KD4gZ290IG1heC1wb3MpKSkKCSAgIDsJIChzZXRxIG1heC1wb3MgZ290KSkpCgkgICAobGV0ICgo bmV3LWRlcHRoICAoKyAoYWxsb3V0LWN1cnJlbnQtZGVwdGgpIDEpKQoJCSBnb3QpCgkgICAgIChz ZXRxIG1heC1wb3MgKGFsbG91dC1vbGQtZXhwb3NlLXRvcGljIChjYXIgc3BlYykpKQoJICAgICAo c2V0cSBzcGVjIChjZHIgc3BlYykpCgkgICAgIChpZiAoYW5kIHNwZWMKCQkgICAgICAoYWxsb3V0 LWRlc2NlbmQtdG8tZGVwdGggbmV3LWRlcHRoKQoJCSAgICAgIChub3QgKGFsbG91dC1oaWRkZW4t cCkpKQoJCSAocHJvZ24gKHNldHEgZ290IChhcHBseSAnYWxsb3V0LW9sZC1leHBvc2UtdG9waWMg c3BlYykpCgkJCShpZiAoYW5kIGdvdCAob3IgKG5vdCBtYXgtcG9zKSAoPiBnb3QgbWF4LXBvcykp KQoJCQkgICAgKHNldHEgbWF4LXBvcyBnb3QpKSkpKSkpCiAgICAod2hpbGUgKGFuZCBmb2xsb3dl cnMKCQkocHJvZ24gKGlmIChhbmQgbWF4LXBvcyAoPCAocG9pbnQpIG1heC1wb3MpKQoJCQkgICAo cHJvZ24gKGdvdG8tY2hhciBtYXgtcG9zKQoJCQkJICAoc2V0cSBtYXgtcG9zIG5pbCkpKQoJCSAg ICAgICAoZW5kLW9mLWxpbmUpCgkJICAgICAgIChhbGxvdXQtbmV4dC1zaWJsaW5nIGRlcHRoKSkp CiAgICAgIChhbGxvdXQtb2xkLWV4cG9zZS10b3BpYyAoY2FyIGZvbGxvd2VycykpCiAgICAgIChz ZXRxIGZvbGxvd2VycyAoY2RyIGZvbGxvd2VycykpKQogICAgbWF4LXBvcykpCjs7O18gICA+IGFs bG91dC1uZXctZXhwb3N1cmUgJygpCihkZWZtYWNybyBhbGxvdXQtbmV3LWV4cG9zdXJlICgmcmVz dCBzcGVjKQogICJMaXRlcmFsIGZyb250ZW5kIGZvciBgYWxsb3V0LWV4cG9zZS10b3BpYycsIGRv ZXNuJ3QgZXZhbHVhdGUgYXJndW1lbnRzLgpTb21lIGFyZ3VtZW50cyB0aGF0IHdvdWxkIG5lZWQg dG8gYmUgcXVvdGVkIGluIGBhbGxvdXQtZXhwb3NlLXRvcGljJwpuZWVkIG5vdCBiZSBxdW90ZWQg aW4gYGFsbG91dC1uZXctZXhwb3N1cmUnLgoKQ3Vyc29yIGlzIGxlZnQgYXQgc3RhcnQgcG9zaXRp b24uCgpVc2UgdGhpcyBpbnN0ZWFkIG9mIG9ic29sZXRlIGBhbGxvdXQtZXhwb3N1cmUnLgoKRXhh bXBsZXM6ClwoYWxsb3V0LW5ldy1leHBvc3VyZSAoLTEgKCkgKCkgKCkgMSkgMCkKCUNsb3NlIGN1 cnJlbnQgdG9waWMgYXQgY3VycmVudCBsZXZlbCBzbyBvbmx5IHRoZSBpbW1lZGlhdGUKCXN1YnRv cGljcyBhcmUgc2hvd24sIGV4Y2VwdCBhbHNvIHNob3cgdGhlIGNoaWxkcmVuIG9mIHRoZQoJdGhp cmQgc3VidG9waWM7IGFuZCBjbG9zZSB0aGUgbmV4dCB0b3BpYyBhdCB0aGUgY3VycmVudCBsZXZl bC4KXChhbGxvdXQtbmV3LWV4cG9zdXJlIDogLTEgMCkKCUNsb3NlIGFsbCB0b3BpY3MgYXQgY3Vy cmVudCBsZXZlbCB0byBleHBvc2Ugb25seSB0aGVpcgoJaW1tZWRpYXRlIGNoaWxkcmVuLCBleGNl cHQgZm9yIHRoZSBsYXN0IHRvcGljIGF0IHRoZSBjdXJyZW50CglsZXZlbCwgaW4gd2hpY2ggZXZl biBpdHMgaW1tZWRpYXRlIGNoaWxkcmVuIGFyZSBoaWRkZW4uClwoYWxsb3V0LW5ldy1leHBvc3Vy ZSAtMiA6IC0xICopCiAgICAgICAgRXhwb3NlIGNoaWxkcmVuIGFuZCBncmFuZGNoaWxkcmVuIG9m IGZpcnN0IHRvcGljIGF0IGN1cnJlbnQKCWxldmVsLCBhbmQgZXhwb3NlIGNoaWxkcmVuIG9mIHN1 YnNlcXVlbnQgdG9waWNzIGF0IGN1cnJlbnQKCWxldmVsICpleGNlcHQqIGZvciB0aGUgbGFzdCwg d2hpY2ggc2hvdWxkIGJlIG9wZW5lZCBjb21wbGV0ZWx5LiIKICAobGlzdCAnc2F2ZS1leGN1cnNp b24KCScoaWYgKG5vdCAob3IgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKQoJCSAg ICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKSkpCgkgICAgIChlcnJvciAiYWxsb3V0LW5ldy1leHBv c3VyZTogQ2FuJ3QgZmluZCBhbnkgb3V0bGluZSB0b3BpY3MiKSkKCShsaXN0ICdhbGxvdXQtZXhw b3NlLXRvcGljIChsaXN0ICdxdW90ZSBzcGVjKSkpKQoKOzs7XyAjNyBTeXN0ZW1hdGljIG91dGxp bmUgcHJlc2VudGF0aW9uIC0gY29weWluZywgcHJpbnRpbmcsIGZsYXR0ZW5pbmcKCjs7O18gIC0g TWFwcGluZyBhbmQgcHJvY2Vzc2luZyBvZiB0b3BpY3MKOzs7XyAgICggU2VlIGFsc28gU3VidHJl ZSBDaGFydGluZywgaW4gTmF2aWdhdGlvbiBjb2RlLikKOzs7XyAgID4gYWxsb3V0LXN0cmluZ2lm eS1mbGF0LWluZGV4IChmbGF0LWluZGV4KQooZGVmdW4gYWxsb3V0LXN0cmluZ2lmeS1mbGF0LWlu ZGV4IChmbGF0LWluZGV4ICZvcHRpb25hbCBjb250ZXh0KQogICJDb252ZXJ0IGxpc3QgcmVwcmVz ZW50aW5nIHNlY3Rpb24vc3Vic2VjdGlvbi8uLi4gdG8gZG9jdW1lbnQgc3RyaW5nLgoKT3B0aW9u YWwgYXJnIENPTlRFWFQgaW5kaWNhdGVzIGludGVyaW9yIGxldmVscyB0byBpbmNsdWRlLiIKICAo bGV0ICgoZGVsaW0gIi4iKQoJcmVzdWx0CgludW1zdHIKCShjb250ZXh0LWRlcHRoIChvciAoYW5k IGNvbnRleHQgMikgMSkpKQogICAgOzsgVGFrZSBjYXJlIG9mIHRoZSBleHBsaWNpdCBjb250ZXh0 OgogICAgKHdoaWxlICg+IGNvbnRleHQtZGVwdGggMCkKICAgICAgKHNldHEgbnVtc3RyIChpbnQt dG8tc3RyaW5nIChjYXIgZmxhdC1pbmRleCkpCgkgICAgZmxhdC1pbmRleCAoY2RyIGZsYXQtaW5k ZXgpCgkgICAgcmVzdWx0IChpZiBmbGF0LWluZGV4CgkJICAgICAgIChjb25zIGRlbGltIChjb25z IG51bXN0ciByZXN1bHQpKQoJCSAgICAgICAoY29ucyBudW1zdHIgcmVzdWx0KSkKCSAgICBjb250 ZXh0LWRlcHRoIChpZiBmbGF0LWluZGV4ICgxLSBjb250ZXh0LWRlcHRoKSAwKSkpCiAgICAoc2V0 cSBkZWxpbSAiICIpCiAgICA7OyBUYWtlIGNhcmUgb2YgdGhlIGluZGVudGF0aW9uOgogICAgKGlm IGZsYXQtaW5kZXgKCShwcm9nbgoJICAod2hpbGUgZmxhdC1pbmRleAoJICAgIChzZXRxIHJlc3Vs dAoJCSAgKGNvbnMgZGVsaW0KCQkJKGNvbnMgKG1ha2Utc3RyaW5nCgkJCSAgICAgICAoMSsgKHRy dW5jYXRlIChpZiAoemVyb3AgKGNhciBmbGF0LWluZGV4KSkKCQkJCQkJIDEKCQkJCQkgICAgICAg KGxvZzEwIChjYXIgZmxhdC1pbmRleCkpKSkpCgkJCSAgICAgICA/ICkKCQkJICAgICAgcmVzdWx0 KSkpCgkgICAgKHNldHEgZmxhdC1pbmRleCAoY2RyIGZsYXQtaW5kZXgpKSkKCSAgOzsgRGlzcG9z ZSBvZiBzaW5nbGUgZXh0cmEgZGVsaW06CgkgIChzZXRxIHJlc3VsdCAoY2RyIHJlc3VsdCkpKSkK ICAgIChhcHBseSAnY29uY2F0IHJlc3VsdCkpKQo7OztfICAgPiBhbGxvdXQtc3RyaW5naWZ5LWZs YXQtaW5kZXgtcGxhaW4gKGZsYXQtaW5kZXgpCihkZWZ1biBhbGxvdXQtc3RyaW5naWZ5LWZsYXQt aW5kZXgtcGxhaW4gKGZsYXQtaW5kZXgpCiAgIkNvbnZlcnQgbGlzdCByZXByZXNlbnRpbmcgc2Vj dGlvbi9zdWJzZWN0aW9uLy4uLiB0byBkb2N1bWVudCBzdHJpbmcuIgogIChsZXQgKChkZWxpbSAi LiIpCglyZXN1bHQpCgkod2hpbGUgZmxhdC1pbmRleAoJICAoc2V0cSByZXN1bHQgKGNvbnMgKGlu dC10by1zdHJpbmcgKGNhciBmbGF0LWluZGV4KSkKCQkJICAgICAoaWYgcmVzdWx0CgkJCQkgKGNv bnMgZGVsaW0gcmVzdWx0KSkpKQoJICAoc2V0cSBmbGF0LWluZGV4IChjZHIgZmxhdC1pbmRleCkp KQogICAgKGFwcGx5ICdjb25jYXQgcmVzdWx0KSkpCjs7O18gICA+IGFsbG91dC1zdHJpbmdpZnkt ZmxhdC1pbmRleC1pbmRlbnRlZCAoZmxhdC1pbmRleCkKKGRlZnVuIGFsbG91dC1zdHJpbmdpZnkt ZmxhdC1pbmRleC1pbmRlbnRlZCAoZmxhdC1pbmRleCkKICAiQ29udmVydCBsaXN0IHJlcHJlc2Vu dGluZyBzZWN0aW9uL3N1YnNlY3Rpb24vLi4uIHRvIGRvY3VtZW50IHN0cmluZy4iCiAgKGxldCAo KGRlbGltICIuIikKCXJlc3VsdAoJbnVtc3RyKQogICAgOzsgVGFrZSBjYXJlIG9mIHRoZSBleHBs aWNpdCBjb250ZXh0OgogICAgKHNldHEgbnVtc3RyIChpbnQtdG8tc3RyaW5nIChjYXIgZmxhdC1p bmRleCkpCgkgIGZsYXQtaW5kZXggKGNkciBmbGF0LWluZGV4KQoJICByZXN1bHQgKGlmIGZsYXQt aW5kZXgKCQkgICAgIChjb25zIGRlbGltIChjb25zIG51bXN0ciByZXN1bHQpKQoJCSAgIChjb25z IG51bXN0ciByZXN1bHQpKSkKICAgIChzZXRxIGRlbGltICIgIikKICAgIDs7IFRha2UgY2FyZSBv ZiB0aGUgaW5kZW50YXRpb246CiAgICAoaWYgZmxhdC1pbmRleAoJKHByb2duCgkgICh3aGlsZSBm bGF0LWluZGV4CgkgICAgKHNldHEgcmVzdWx0CgkJICAoY29ucyBkZWxpbQoJCQkoY29ucyAobWFr ZS1zdHJpbmcKCQkJICAgICAgICgxKyAodHJ1bmNhdGUgKGlmICh6ZXJvcCAoY2FyIGZsYXQtaW5k ZXgpKQoJCQkJCQkgMQoJCQkJCSAgICAgICAobG9nMTAgKGNhciBmbGF0LWluZGV4KSkpKSkKCQkJ ICAgICAgID8gKQoJCQkgICAgICByZXN1bHQpKSkKCSAgICAoc2V0cSBmbGF0LWluZGV4IChjZHIg ZmxhdC1pbmRleCkpKQoJICA7OyBEaXNwb3NlIG9mIHNpbmdsZSBleHRyYSBkZWxpbToKCSAgKHNl dHEgcmVzdWx0IChjZHIgcmVzdWx0KSkpKQogICAgKGFwcGx5ICdjb25jYXQgcmVzdWx0KSkpCjs7 O18gICA+IGFsbG91dC1saXN0aWZ5LWV4cG9zZWQgKCZvcHRpb25hbCBzdGFydCBlbmQgZm9ybWF0 KQooZGVmdW4gYWxsb3V0LWxpc3RpZnktZXhwb3NlZCAoJm9wdGlvbmFsIHN0YXJ0IGVuZCBmb3Jt YXQpCgogICJQcm9kdWNlIGEgbGlzdCByZXByZXNlbnRpbmcgZXhwb3NlZCB0b3BpY3MgaW4gY3Vy cmVudCByZWdpb24uCgpUaGlzIGxpc3QgY2FuIHRoZW4gYmUgdXNlZCBieSBgYWxsb3V0LXByb2Nl c3MtZXhwb3NlZCcgdG8gbWFuaXB1bGF0ZQp0aGUgc3ViamVjdCByZWdpb24uCgpPcHRpb25hbCBT VEFSVCBhbmQgRU5EIGluZGljYXRlIGJvdW5kcyBvZiByZWdpb24uCgpvcHRpb25hbCBhcmcsIEZP Uk1BVCwgZGVzaWduYXRlcyBhbiBhbHRlcm5hdGUgcHJlc2VudGF0aW9uIGZvcm0gZm9yCnRoZSBw cmVmaXg6CgogbGlzdCAtIFByZXNlbnQgcHJlZml4IGFzIG51bWVyaWMgc2VjdGlvbi5zdWJzZWN0 aW9uLi4uLCBzdGFydGluZyB3aXRoCglzZWN0aW9uIGluZGljYXRlZCBieSB0aGUgbGlzdCwgaW5u ZXJtb3N0IG5lc3RpbmcgZmlyc3QuCiBgaW5kZW50JyBcKHN5bWJvbCkgLSAgQ29udmVydCBoZWFk ZXIgcHJlZml4ZXMgdG8gYWxsIHdoaXRlIHNwYWNlLAoJCSAgICAgICBleGNlcHQgZm9yIGRpc3Rp bmN0aXZlIGJ1bGxldHMuCgpUaGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgcHJvZHVjZWQgYXJlIGxp c3RzIHRoYXQgcmVwcmVzZW50cyBhIHRvcGljCmhlYWRlciBhbmQgYm9keS4gIFRoZSBlbGVtZW50 cyBvZiB0aGF0IGxpc3QgYXJlOgoKIC0gYSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBkZXB0aCBv ZiB0aGUgdG9waWMsCiAtIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyLXByZWZpeCwg aW5jbHVkaW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kCiAgIGJ1bGxldC4KIC0gYSBzdHJpbmcg cmVwcmVzZW50aW5nIHRoZSBidWxsZXQgY2hhcmFjdGVyLAogLSBhbmQgYSBzZXJpZXMgb2Ygc3Ry aW5ncywgZWFjaCBjb250YWluaW5nIG9uZSBsaW5lIG9mIHRoZSBleHBvc2VkCiAgIHBvcnRpb24g b2YgdGhlIHRvcGljIGVudHJ5LiIKCiAgKGludGVyYWN0aXZlICJyIikKICAoc2F2ZS1leGN1cnNp b24KICAgIChsZXQqCiAgICAgICAgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpCiAgICAg ICAgIDs7IHN0YXRlIHZhcnM6CiAgICAgICAgIHN0cmluZ3MgcHJlZml4IHJlc3VsdCBkZXB0aCBu ZXctZGVwdGggb3V0IGdvbmUtb3V0IGJ1bGxldCBiZWcKCQkgbmV4dCBkb25lKQoKICAgICAgKGdv dG8tY2hhciBzdGFydCkKICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICA7OyBHb3RvIGlu aXRpYWwgdG9waWMsIGFuZCByZWdpc3RlciBwcmVjZWVkaW5nIHN0dWZmLCBpZiBhbnk6CiAgICAg IChpZiAoPiAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpIHN0YXJ0KQoJICA7OyBG aXJzdCB0b3BpYyBmb2xsb3dzIGJlZ2lubmluZyBwb2ludCAtIHJlZ2lzdGVyIHByZWxpbWluYXJ5 IHN0dWZmOgoJICAoc2V0cSByZXN1bHQgKGxpc3QgKGxpc3QgMCAiIiBuaWwKCQkJCSAgIChidWZm ZXItc3Vic3RyaW5nIHN0YXJ0ICgxLSAocG9pbnQpKSkpKSkpCiAgICAgICh3aGlsZSAoYW5kIChu b3QgZG9uZSkKCQkgIChub3QgKGVvYnApKQkJOyBMb29wIHVudGlsIHdlJ3ZlIGNvdmVyZWQgdGhl IHJlZ2lvbi4KCQkgIChub3QgKD4gKHBvaW50KSBlbmQpKSkKCShzZXRxIGRlcHRoIGFsbG91dC1y ZWNlbnQtZGVwdGggCTsgQ3VycmVudCB0b3BpY3MgZGVwdGgsCgkgICAgICBidWxsZXQgKGFsbG91 dC1yZWNlbnQtYnVsbGV0KQk7IC4uLiBidWxsZXQsCgkgICAgICBwcmVmaXggKGFsbG91dC1yZWNl bnQtcHJlZml4KQoJICAgICAgYmVnIChwcm9nbiAoYWxsb3V0LWVuZC1vZi1wcmVmaXggdCkgKHBv aW50KSkpIDsgYW5kIGJlZ2lubmluZy4KCShzZXRxIGRvbmUJCQk7IFRoZSBib3VuZGFyeSBmb3Ig dGhlIGN1cnJlbnQgdG9waWM6CgkgICAgICAobm90IChhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRp bmcgMSkpKQoJKHNldHEgbmV3LWRlcHRoIGFsbG91dC1yZWNlbnQtZGVwdGgpCgkoc2V0cSBnb25l LW91dCBvdXQKCSAgICAgIG91dCAoPCBuZXctZGVwdGggZGVwdGgpKQoJKGJlZ2lubmluZy1vZi1s aW5lKQoJKHNldHEgbmV4dCAocG9pbnQpKQoJKGdvdG8tY2hhciBiZWcpCgkoc2V0cSBzdHJpbmdz IG5pbCkKCSh3aGlsZSAoPiBuZXh0IChwb2ludCkpCQk7IEdldCBhbGwgdGhlIGV4cG9zZWQgdGV4 dCBpbgoJICAoc2V0cSBzdHJpbmdzCgkJKGNvbnMgKGJ1ZmZlci1zdWJzdHJpbmcKCQkgICAgICAg YmVnCgkJCQkJO1RvIGhpZGRlbiB0ZXh0IG9yIGVuZCBvZiBsaW5lOgoJCSAgICAgICAocHJvZ24K ICAgICAgICAgICAgICAgICAgICAgICAgIChlbmQtb2YtbGluZSkKICAgICAgICAgICAgICAgICAg ICAgICAgIChhbGxvdXQtYmFjay10by12aXNpYmxlLXRleHQpKSkKCQkgICAgICBzdHJpbmdzKSkK CSAgKHdoZW4gKDwgKHBvaW50KSBuZXh0KSAgICAgIDsgUmVzdW1lIGZyb20gYWZ0ZXIgaGlkIHRl eHQsIGlmIGFueS4KICAgICAgICAgICAgKGxpbmUtbW92ZSAxKQogICAgICAgICAgICAoYmVnaW5u aW5nLW9mLWxpbmUpKQoJICAoc2V0cSBiZWcgKHBvaW50KSkpCgk7OyBBY2N1bXVsYXRlIGxpc3Qg Zm9yIHRoaXMgdG9waWM6Cgkoc2V0cSBzdHJpbmdzIChucmV2ZXJzZSBzdHJpbmdzKSkKCShzZXRx IHJlc3VsdAoJICAgICAgKGNvbnMKCSAgICAgICAoaWYgZm9ybWF0CgkJICAgKGxldCAoKHNwZWNp YWwgKGlmIChzdHJpbmctbWF0Y2gKCQkJCSAgICAgICAocmVnZXhwLXF1b3RlIGJ1bGxldCkKCQkJ CSAgICAgICBhbGxvdXQtZGlzdGluY3RpdmUtYnVsbGV0cy1zdHJpbmcpCgkJCQkgICAgICBidWxs ZXQpKSkKCQkgICAgIChjb25kICgobGlzdHAgZm9ybWF0KQoJCQkgICAgKGxpc3QgZGVwdGgKCQkJ CSAgKGlmIGFsbG91dC1hYmJyZXZpYXRlLWZsYXR0ZW5lZC1udW1iZXJpbmcKCQkJCSAgICAgIChh bGxvdXQtc3RyaW5naWZ5LWZsYXQtaW5kZXggZm9ybWF0CgkJCQkJCQkJICAgIGdvbmUtb3V0KQoJ CQkJICAgICAgKGFsbG91dC1zdHJpbmdpZnktZmxhdC1pbmRleC1wbGFpbgoJCQkJICAgICAgIGZv cm1hdCkpCgkJCQkgIHN0cmluZ3MKCQkJCSAgc3BlY2lhbCkpCgkJCSAgICgoZXEgZm9ybWF0ICdp bmRlbnQpCgkJCSAgICAoaWYgc3BlY2lhbAoJCQkJKGxpc3QgZGVwdGgKCQkJCSAgICAgIChjb25j YXQgKG1ha2Utc3RyaW5nICgxKyBkZXB0aCkgPyApCgkJCQkJICAgICAgKHN1YnN0cmluZyBwcmVm aXggLTEpKQoJCQkJICAgICAgc3RyaW5ncykKCQkJICAgICAgKGxpc3QgZGVwdGgKCQkJCSAgICAo bWFrZS1zdHJpbmcgZGVwdGggPyApCgkJCQkgICAgc3RyaW5ncykpKQoJCQkgICAodCAoZXJyb3Ig ImFsbG91dC1saXN0aWZ5LWV4cG9zZWQ6ICVzICVzIgoJCQkJICAgICAiaW52YWxpZCBmb3JtYXQi IGZvcm1hdCkpKSkKCQkgKGxpc3QgZGVwdGggcHJlZml4IHN0cmluZ3MpKQoJCSAgICByZXN1bHQp KQoJOzsgUmVhc3NlcyBmb3JtYXQsIGlmIGFueToKCShpZiAoYW5kIGZvcm1hdCAobGlzdHAgZm9y bWF0KSkKCSAgICAoY29uZCAoKD0gbmV3LWRlcHRoIGRlcHRoKQoJCSAgIChzZXRxIGZvcm1hdCAo Y29ucyAoMSsgKGNhciBmb3JtYXQpKQoJCQkJCSAgKGNkciBmb3JtYXQpKSkpCgkJICAoKD4gbmV3 LWRlcHRoIGRlcHRoKQk7IGRlc2NlbmRpbmcgLSBhc3N1bWUgYnkgMToKCQkgICAoc2V0cSBmb3Jt YXQgKGNvbnMgMSBmb3JtYXQpKSkKCQkgICh0CgkJCQkJOyBQb3AgdGhlIHJlc2lkdWU6CgkJICAg KHdoaWxlICg8IG5ldy1kZXB0aCBkZXB0aCkKCQkgICAgICAgKHNldHEgZm9ybWF0IChjZHIgZm9y bWF0KSkKCQkgICAgICAgKHNldHEgZGVwdGggKDEtIGRlcHRoKSkpCgkJCQkJOyBBbmQgaW5jcmVt ZW50IHRoZSBjdXJyZW50IG9uZToKCQkgICAgIChzZXRxIGZvcm1hdAoJCQkgICAoY29ucyAoMSsg KG9yIChjYXIgZm9ybWF0KQoJCQkJCSAtMSkpCgkJCQkgKGNkciBmb3JtYXQpKSkpKSkpCiAgICAg IDs7IFB1dCB0aGUgbGlzdCB3aXRoIGZpcnN0IGF0IGZyb250LCB0byBsYXN0IGF0IGJhY2s6CiAg ICAgIChucmV2ZXJzZSByZXN1bHQpKSkpCjs7O18gICA+IG15LXJlZ2lvbi1hY3RpdmUtcCAoKQoo ZGVmbWFjcm8gbXktcmVnaW9uLWFjdGl2ZS1wICgpCiAgKGlmIChmYm91bmRwICdyZWdpb24tYWN0 aXZlLXApCiAgICAgICcocmVnaW9uLWFjdGl2ZS1wKQogICAgJ21hcmstYWN0aXZlKSkKOzs7XyAg ID4gYWxsb3V0LXByb2Nlc3MtZXhwb3NlZCAoJm9wdGlvbmFsIGZ1bmMgZnJvbSB0byBmcm9tYnVm Cjs7OwkJCQkJICAgIHRvYnVmIGZvcm1hdCkKKGRlZnVuIGFsbG91dC1wcm9jZXNzLWV4cG9zZWQg KCZvcHRpb25hbCBmdW5jIGZyb20gdG8gZnJvbWJ1ZiB0b2J1ZgoJCQkJCSAgZm9ybWF0IHN0YXJ0 LW51bSkKICAiTWFwIGZ1bmN0aW9uIG9uIGV4cG9zZWQgcGFydHMgb2YgY3VycmVudCB0b3BpYzsg cmVzdWx0cyB0byBhbm90aGVyIGJ1ZmZlci4KCkFsbCBhcmdzIGFyZSBvcHRpb25zOyBkZWZhdWx0 IHZhbHVlcyBpdGVtaXplZCBiZWxvdy4KCkFwcGx5IEZVTkNUSU9OIHRvIGV4cG9zZWQgcG9ydGlv bnMgRlJPTSBwb3NpdGlvbiBUTyBwb3NpdGlvbiBpbiBidWZmZXIKRlJPTUJVRiB0byBidWZmZXIg VE9CVUYuICBTaXh0aCBvcHRpb25hbCBhcmcsIEZPUk1BVCwgZGVzaWduYXRlcyBhbgphbHRlcm5h dGUgcHJlc2VudGF0aW9uIGZvcm06CgogYGZsYXQnIC0gUHJlc2VudCBwcmVmaXggYXMgbnVtZXJp YyBzZWN0aW9uLnN1YnNlY3Rpb24uLi4sIHN0YXJ0aW5nIHdpdGgKCSBzZWN0aW9uIGluZGljYXRl ZCBieSB0aGUgc3RhcnQtbnVtLCBpbm5lcm1vc3QgbmVzdGluZyBmaXJzdC4KIFhgZmxhdC1pbmRl bnRlZCcgLSBQcmVmaXggaXMgbGlrZSBgZmxhdCcgZm9yIGZpcnN0IHRvcGljIGF0IGVhY2gKIFgJ CSAgIGxldmVsLCBidXQgc3Vic2VxdWVudCB0b3BpY3MgaGF2ZSBvbmx5IGxlYWYgdG9waWMKIFgJ CSAgIG51bWJlciwgcGFkZGVkIHdpdGggYmxhbmtzIHRvIGxpbmUgdXAgd2l0aCBmaXJzdC4KIGBp bmRlbnQnIFwoc3ltYm9sKSAtICBDb252ZXJ0IGhlYWRlciBwcmVmaXhlcyB0byBhbGwgd2hpdGUg c3BhY2UsCgkJICAgICAgIGV4Y2VwdCBmb3IgZGlzdGluY3RpdmUgYnVsbGV0cy4KCkRlZmF1bHRz OgogIEZVTkNUSU9OOglgYWxsb3V0LWluc2VydC1saXN0aWZpZWQnCiAgRlJPTToJCXJlZ2lvbiBz dGFydCwgaWYgcmVnaW9uIGFjdGl2ZSwgZWxzZSBzdGFydCBvZiBidWZmZXIKICBUTzoJCXJlZ2lv biBlbmQsIGlmIHJlZ2lvbiBhY3RpdmUsIGVsc2UgZW5kIG9mIGJ1ZmZlcgogIEZST01CVUY6CWN1 cnJlbnQgYnVmZmVyCiAgVE9CVUY6CWJ1ZmZlciBuYW1lIGRlcml2ZWQ6IFwiKmN1cnJlbnQtYnVm ZmVyLW5hbWUgZXhwb3NlZCpcIgogIEZPUk1BVDoJbmlsIgoKCQkJCQk7IFJlc29sdmUgYXJndW1l bnRzLAoJCQkJCTsgZGVmYXVsdGluZyBpZiBuZWNlc3Nhcnk6CiAgKGlmIChub3QgZnVuYykgKHNl dHEgZnVuYyAnYWxsb3V0LWluc2VydC1saXN0aWZpZWQpKQogIChpZiAobm90IChhbmQgZnJvbSB0 bykpCiAgICAgIChpZiAobXktcmVnaW9uLWFjdGl2ZS1wKQoJICAoc2V0cSBmcm9tIChyZWdpb24t YmVnaW5uaW5nKSB0byAocmVnaW9uLWVuZCkpCgkoc2V0cSBmcm9tIChwb2ludC1taW4pIHRvIChw b2ludC1tYXgpKSkpCiAgKGlmIGZyb21idWYKICAgICAgKGlmIChub3QgKGJ1ZmZlcnAgZnJvbWJ1 ZikpCgkgIDs7IFNwZWNpZmllZCBidXQgbm90IGEgYnVmZmVyIC0gZ2V0IGl0OgoJICAobGV0ICgo Z290IChnZXQtYnVmZmVyIGZyb21idWYpKSkKCSAgICAoaWYgKG5vdCBnb3QpCgkJKGVycm9yIChj b25jYXQgImFsbG91dC1wcm9jZXNzLWV4cG9zZWQ6IHNvdXJjZSBidWZmZXIgIgoJCQkgICAgICAg ZnJvbWJ1ZgoJCQkgICAgICAgIiBub3QgZm91bmQuIikpCgkgICAgICAoc2V0cSBmcm9tYnVmIGdv dCkpKSkKICAgIDs7IG5vdCBzcGVjaWZpZWQgLSBkZWZhdWx0IGl0OgogICAgKHNldHEgZnJvbWJ1 ZiAoY3VycmVudC1idWZmZXIpKSkKICAoaWYgdG9idWYKICAgICAgKGlmIChub3QgKGJ1ZmZlcnAg dG9idWYpKQoJICAoc2V0cSB0b2J1ZiAoZ2V0LWJ1ZmZlci1jcmVhdGUgdG9idWYpKSkKICAgIDs7 IG5vdCBzcGVjaWZpZWQgLSBkZWZhdWx0IGl0OgogICAgKHNldHEgdG9idWYgKGNvbmNhdCAiKiIg KGJ1ZmZlci1uYW1lIGZyb21idWYpICIgZXhwb3NlZCoiKSkpCiAgKGlmIChsaXN0cCBmb3JtYXQp CiAgICAgIChucmV2ZXJzZSBmb3JtYXQpKQoKICAobGV0KiAoKGxpc3RpZmllZAoJICAocHJvZ24g KHNldC1idWZmZXIgZnJvbWJ1ZikKCQkgKGFsbG91dC1saXN0aWZ5LWV4cG9zZWQgZnJvbSB0byBm b3JtYXQpKSkpCiAgICAoc2V0LWJ1ZmZlciB0b2J1ZikKICAgIChtYXBjYXIgZnVuYyBsaXN0aWZp ZWQpCiAgICAocG9wLXRvLWJ1ZmZlciB0b2J1ZikpKQoKOzs7XyAgLSBDb3B5IGV4cG9zZWQKOzs7 XyAgID4gYWxsb3V0LWluc2VydC1saXN0aWZpZWQgKGxpc3RpZmllZCkKKGRlZnVuIGFsbG91dC1p bnNlcnQtbGlzdGlmaWVkIChsaXN0aWZpZWQpCiAgIkluc2VydCBjb250ZW50cyBvZiBsaXN0aWZp ZWQgb3V0bGluZSBwb3J0aW9uIGluIGN1cnJlbnQgYnVmZmVyLgoKTElTVElGSUVEIGlzIGEgbGlz dCByZXByZXNlbnRpbmcgZWFjaCB0b3BpYyBoZWFkZXIgYW5kIGJvZHk6CgogXGAoZGVwdGggcHJl Zml4IHRleHQpJwoKb3IgXGAoZGVwdGggcHJlZml4IHRleHQgYnVsbGV0LXBsdXMpJwoKSWYgYGJ1 bGxldC1wbHVzJyBpcyBzcGVjaWZpZWQsIGl0IGlzIGluc2VydGVkIGp1c3QgYWZ0ZXIgdGhlIGVu dGlyZSBwcmVmaXguIgogIChzZXRxIGxpc3RpZmllZCAoY2RyIGxpc3RpZmllZCkpCiAgKGxldCAo KHByZWZpeCAocHJvZzEKCQkgICAgKGNhciBsaXN0aWZpZWQpCgkJICAoc2V0cSBsaXN0aWZpZWQg KGNkciBsaXN0aWZpZWQpKSkpCgkodGV4dCAocHJvZzEKCQkgIChjYXIgbGlzdGlmaWVkKQoJCShz ZXRxIGxpc3RpZmllZCAoY2RyIGxpc3RpZmllZCkpKSkKCShidWxsZXQtcGx1cyAoY2FyIGxpc3Rp ZmllZCkpKQogICAgKGluc2VydCBwcmVmaXgpCiAgICAoaWYgYnVsbGV0LXBsdXMgKGluc2VydCAo Y29uY2F0ICIgIiBidWxsZXQtcGx1cykpKQogICAgKHdoaWxlIHRleHQKICAgICAgKGluc2VydCAo Y2FyIHRleHQpKQogICAgICAoaWYgKHNldHEgdGV4dCAoY2RyIHRleHQpKQoJICAoaW5zZXJ0ICJc biIpKSkKICAgIChpbnNlcnQgIlxuIikpKQo7OztfICAgPiBhbGxvdXQtY29weS1leHBvc2VkLXRv LWJ1ZmZlciAoJm9wdGlvbmFsIGFyZyB0b2J1ZiBmb3JtYXQpCihkZWZ1biBhbGxvdXQtY29weS1l eHBvc2VkLXRvLWJ1ZmZlciAoJm9wdGlvbmFsIGFyZyB0b2J1ZiBmb3JtYXQpCiAgIkR1cGxpY2F0 ZSBleHBvc2VkIHBvcnRpb25zIG9mIGN1cnJlbnQgb3V0bGluZSB0byBhbm90aGVyIGJ1ZmZlci4K Ck90aGVyIGJ1ZmZlciBoYXMgY3VycmVudCBidWZmZXJzIG5hbWUgd2l0aCBcIiBleHBvc2VkXCIg YXBwZW5kZWQgdG8gaXQuCgpXaXRoIHJlcGVhdCBjb3VudCwgY29weSB0aGUgZXhwb3NlZCBwYXJ0 cyBvZiBvbmx5IHRoZSBjdXJyZW50IHRvcGljLgoKT3B0aW9uYWwgc2Vjb25kIGFyZyBUT0JVRiBp cyB0YXJnZXQgYnVmZmVyIG5hbWUuCgpPcHRpb25hbCB0aGlyZCBhcmcgRk9STUFULCBpZiBub24t bmlsLCBzeW1ib2xpY2FsbHkgZGVzaWduYXRlcyBhbgphbHRlcm5hdGUgcHJlc2VudGF0aW9uIGZv cm1hdCBmb3IgdGhlIG91dGxpbmU6CgogYGZsYXQnICAgLSBDb252ZXJ0IHRvcGljIGhlYWRlciBw cmVmaXhlcyB0byBudW1lcmljCgkgICAgc2VjdGlvbi5zdWJzZWN0aW9uLi4uIGlkZW50aWZpZXJz LgogYGluZGVudCcgLSBDb252ZXJ0IGhlYWRlciBwcmVmaXhlcyB0byBhbGwgd2hpdGUgc3BhY2Us IGV4Y2VwdCBmb3IKCSAgICBkaXN0aW5jdGl2ZSBidWxsZXRzLgogYGluZGVudC1mbGF0JyAtIFRo ZSBiZXN0IG9mIGJvdGggLSBvbmx5IHRoZSBmaXJzdCBvZiBlYWNoIGxldmVsIGhhcwoJCSB0aGUg ZnVsbCBwYXRoLCB0aGUgcmVzdCBoYXZlIG9ubHkgdGhlIHNlY3Rpb24gbnVtYmVyCgkJIG9mIHRo ZSBsZWFmLCBwcmVjZWRlZCBieSB0aGUgcmlnaHQgYW1vdW50IG9mIGluZGVudGF0aW9uLiIKCiAg KGludGVyYWN0aXZlICJQIikKICAoaWYgKG5vdCB0b2J1ZikKICAgICAgKHNldHEgdG9idWYgKGdl dC1idWZmZXItY3JlYXRlIChjb25jYXQgIioiIChidWZmZXItbmFtZSkgIiBleHBvc2VkKiIpKSkp CiAgKGxldCogKChzdGFydC1wdCAocG9pbnQpKQoJIChiZWcgKGlmIGFyZyAoYWxsb3V0LWJhY2st dG8tY3VycmVudC1oZWFkaW5nKSAocG9pbnQtbWluKSkpCgkgKGVuZCAoaWYgYXJnIChhbGxvdXQt ZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkgKHBvaW50LW1heCkpKQoJIChidWYgKGN1cnJlbnQtYnVm ZmVyKSkKCSAoc3RhcnQtbGlzdCAoKSkpCiAgICAoaWYgKGVxIGZvcm1hdCAnZmxhdCkKCShzZXRx IGZvcm1hdCAoaWYgYXJnIChzYXZlLWV4Y3Vyc2lvbgoJCQkJICAgKGdvdG8tY2hhciBiZWcpCgkJ CQkgICAoYWxsb3V0LXRvcGljLWZsYXQtaW5kZXgpKQoJCQkgICAnKDEpKSkpCiAgICAoc2F2ZS1l eGN1cnNpb24gKHNldC1idWZmZXIgdG9idWYpKGVyYXNlLWJ1ZmZlcikpCiAgICAoYWxsb3V0LXBy b2Nlc3MtZXhwb3NlZCAnYWxsb3V0LWluc2VydC1saXN0aWZpZWQKCQkJICAgICBiZWcKCQkJICAg ICBlbmQKCQkJICAgICAoY3VycmVudC1idWZmZXIpCgkJCSAgICAgdG9idWYKCQkJICAgICBmb3Jt YXQgc3RhcnQtbGlzdCkKICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAocG9wLXRvLWJ1 ZmZlciBidWYpCiAgICAoZ290by1jaGFyIHN0YXJ0LXB0KSkpCjs7O18gICA+IGFsbG91dC1mbGF0 dGVuLWV4cG9zZWQtdG8tYnVmZmVyICgmb3B0aW9uYWwgYXJnIHRvYnVmKQooZGVmdW4gYWxsb3V0 LWZsYXR0ZW4tZXhwb3NlZC10by1idWZmZXIgKCZvcHRpb25hbCBhcmcgdG9idWYpCiAgIlByZXNl bnQgbnVtZXJpYyBvdXRsaW5lIG9mIG91dGxpbmUncyBleHBvc2VkIHBvcnRpb25zIGluIGFub3Ro ZXIgYnVmZmVyLgoKVGhlIHJlc3VsdGluZyBvdXRsaW5lIGlzIG5vdCBjb21wYXRpYmxlIHdpdGgg b3V0bGluZSBtb2RlIC0gdXNlCmBhbGxvdXQtY29weS1leHBvc2VkLXRvLWJ1ZmZlcicgaWYgeW91 IHdhbnQgdGhhdC4KClVzZSBgYWxsb3V0LWluZGVudGVkLWV4cG9zZWQtdG8tYnVmZmVyJyBmb3Ig aW5kZW50ZWQgcHJlc2VudGF0aW9uLgoKV2l0aCByZXBlYXQgY291bnQsIGNvcHkgdGhlIGV4cG9z ZWQgcG9ydGlvbnMgb2Ygb25seSBjdXJyZW50IHRvcGljLgoKT3RoZXIgYnVmZmVyIGhhcyBjdXJy ZW50IGJ1ZmZlcidzIG5hbWUgd2l0aCBcIiBleHBvc2VkXCIgYXBwZW5kZWQgdG8KaXQsIHVubGVz cyBvcHRpb25hbCBzZWNvbmQgYXJnIFRPQlVGIGlzIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBp dCBpcwp1c2VkIHZlcmJhdGltLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChhbGxvdXQtY29weS1l eHBvc2VkLXRvLWJ1ZmZlciBhcmcgdG9idWYgJ2ZsYXQpKQo7OztfICAgPiBhbGxvdXQtaW5kZW50 ZWQtZXhwb3NlZC10by1idWZmZXIgKCZvcHRpb25hbCBhcmcgdG9idWYpCihkZWZ1biBhbGxvdXQt aW5kZW50ZWQtZXhwb3NlZC10by1idWZmZXIgKCZvcHRpb25hbCBhcmcgdG9idWYpCiAgIlByZXNl bnQgaW5kZW50ZWQgb3V0bGluZSBvZiBvdXRsaW5lJ3MgZXhwb3NlZCBwb3J0aW9ucyBpbiBhbm90 aGVyIGJ1ZmZlci4KClRoZSByZXN1bHRpbmcgb3V0bGluZSBpcyBub3QgY29tcGF0aWJsZSB3aXRo IG91dGxpbmUgbW9kZSAtIHVzZQpgYWxsb3V0LWNvcHktZXhwb3NlZC10by1idWZmZXInIGlmIHlv dSB3YW50IHRoYXQuCgpVc2UgYGFsbG91dC1mbGF0dGVuLWV4cG9zZWQtdG8tYnVmZmVyJyBmb3Ig bnVtZXJpYyBzZWN0aW9uYWwgcHJlc2VudGF0aW9uLgoKV2l0aCByZXBlYXQgY291bnQsIGNvcHkg dGhlIGV4cG9zZWQgcG9ydGlvbnMgb2Ygb25seSBjdXJyZW50IHRvcGljLgoKT3RoZXIgYnVmZmVy IGhhcyBjdXJyZW50IGJ1ZmZlcidzIG5hbWUgd2l0aCBcIiBleHBvc2VkXCIgYXBwZW5kZWQgdG8K aXQsIHVubGVzcyBvcHRpb25hbCBzZWNvbmQgYXJnIFRPQlVGIGlzIHNwZWNpZmllZCwgaW4gd2hp Y2ggY2FzZSBpdCBpcwp1c2VkIHZlcmJhdGltLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChhbGxv dXQtY29weS1leHBvc2VkLXRvLWJ1ZmZlciBhcmcgdG9idWYgJ2luZGVudCkpCgo7OztfICAtIExh VGVYIGZvcm1hdHRpbmcKOzs7XyAgID4gYWxsb3V0LWxhdGV4LXZlcmItcXVvdGUgKHN0cmluZyAm b3B0aW9uYWwgZmxvdykKKGRlZnVuIGFsbG91dC1sYXRleC12ZXJiLXF1b3RlIChzdHJpbmcgJm9w dGlvbmFsIGZsb3cpCiAgIlJldHVybiBjb3B5IG9mIFNUUklORyBmb3IgbGl0ZXJhbCByZXByb2R1 Y3Rpb24gYWNyb3NzIExhVGVYIHByb2Nlc3NpbmcuCkV4cHJlc3NlcyB0aGUgb3JpZ2luYWwgY2hh cmFjdGVycyBcKGluY2x1ZGluZyBjYXJyaWFnZSByZXR1cm5zKSBvZiB0aGUKc3RyaW5nIGFjcm9z cyBMYVRlWCBwcm9jZXNzaW5nLiIKICAobWFwY29uY2F0IChmdW5jdGlvbgoJICAgICAgKGxhbWJk YSAoY2hhcikKCQkoY29uZCAoKG1lbXEgY2hhciAnKD9cXCA/JCA/JSA/IyA/JiA/eyA/fSA/XyA/ XiA/LSA/KikpCgkJICAgICAgIChjb25jYXQgIlxcY2hhciIgKG51bWJlci10by1zdHJpbmcgY2hh cikgInt9IikpCgkJICAgICAgKCg9IGNoYXIgP1xuKSAiXFxcXCIpCgkJICAgICAgKHQgKGNoYXIt dG8tc3RyaW5nIGNoYXIpKSkpKQoJICAgICBzdHJpbmcKCSAgICAgIiIpKQo7OztfICAgPiBhbGxv dXQtbGF0ZXgtdmVyYmF0aW0tcXVvdGUtY3Vyci1saW5lICgpCihkZWZ1biBhbGxvdXQtbGF0ZXgt dmVyYmF0aW0tcXVvdGUtY3Vyci1saW5lICgpCiAgIkV4cHJlc3MgbGluZSBmb3IgZXhhY3QgXChs aXRlcmFsKSByZXByZXNlbnRhdGlvbiBhY3Jvc3MgTGFUZVggcHJvY2Vzc2luZy4KCkFkanVzdCBs aW5lIGNvbnRlbnRzIHNvIGl0IGlzIHVuYWx0ZXJlZCBcKGZyb20gdGhlIG9yaWdpbmFsIGxpbmUp CmFjcm9zcyBMYVRlWCBwcm9jZXNzaW5nLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBgdmVyYmF0 aW0nCmVudmlyb25tZW50LiAgTGVhdmVzIHBvaW50IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuIgog IChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQogICAgKGJlZ2lubmluZy1vZi1s aW5lKQogICAgKGxldCAoKGJlZyAocG9pbnQpKQogICAgICAgICAgKGVuZCAocHJvZ24gKGVuZC1v Zi1saW5lKShwb2ludCkpKSkKICAgICAgKGdvdG8tY2hhciBiZWcpCiAgICAgICh3aGlsZSAocmUt c2VhcmNoLWZvcndhcmQgIlxcXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsi XFxcXFxcfFxce1xcfFxcfVxcfFxcX1xcfFxcJFxcfFxcXCJcXHxcXCZcXHxcXF5cXHxcXC1cXHxc XCpcXHwjIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAk7IGJvdW5kZWQgYnkg ZW5kLW9mLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSAgIDsgbm8gbWF0 Y2hlcywgbW92ZSB0byBlbmQgJiByZXR1cm4gbmlsCiAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gt YmVnaW5uaW5nIDIpKQogICAgICAgIChpbnNlcnQgIlxcIikKICAgICAgICAoc2V0cSBlbmQgKDEr IGVuZCkpCiAgICAgICAgKGdvdG8tY2hhciAoMSsgKG1hdGNoLWVuZCAyKSkpKSkpKQo7OztfICAg PiBhbGxvdXQtaW5zZXJ0LWxhdGV4LWhlYWRlciAoYnVmZmVyKQooZGVmdW4gYWxsb3V0LWluc2Vy dC1sYXRleC1oZWFkZXIgKGJ1ZmZlcikKICAiSW5zZXJ0IGluaXRpYWwgTGFUZVggY29tbWFuZHMg YXQgcG9pbnQgaW4gQlVGRkVSLiIKICA7OyBNdWNoIG9mIHRoaXMgaXMgYmVpbmcgZGVyaXZlZCBm cm9tIHRoZSBzdHVmZiBpbiBhcHBlbmRpeCBvZiBFIGluCiAgOzsgdGhlIFRlWEJvb2ssIHBnIDQy MS4KICAoc2V0LWJ1ZmZlciBidWZmZXIpCiAgKGxldCAoKGRvYy1zdHlsZSAoZm9ybWF0ICJcblxc ZG9jdW1lbnRzdHlsZXslc31cbiIKCQkJICAgInJlcG9ydCIpKQoJKHBhZ2UtbnVtYmVyaW5nIChp ZiBhbGxvdXQtbnVtYmVyLXBhZ2VzCgkJCSAgICAiXFxwYWdlc3R5bGV7ZW1wdHl9XG4iCgkJCSAg IiIpKQoJKHRpdGxlY21kIChmb3JtYXQgIlxcbmV3Y29tbWFuZHtcXHRpdGxlY21kfVsxXXt7JXMg IzF9fVxuIgoJCQkgIGFsbG91dC10aXRsZS1zdHlsZSkpCgkobGFiZWxjbWQgKGZvcm1hdCAiXFxu ZXdjb21tYW5ke1xcbGFiZWxjbWR9WzFde3slcyAjMX19XG4iCgkJCSAgYWxsb3V0LWxhYmVsLXN0 eWxlKSkKCShoZWFkbGluZWNtZCAoZm9ybWF0ICJcXG5ld2NvbW1hbmR7XFxoZWFkbGluZWNtZH1b MV17eyVzICMxfX1cbiIKCQkJICAgICBhbGxvdXQtaGVhZC1saW5lLXN0eWxlKSkKCShib2R5bGlu ZWNtZCAoZm9ybWF0ICJcXG5ld2NvbW1hbmR7XFxib2R5bGluZWNtZH1bMV17eyVzICMxfX1cbiIK CQkJICAgICBhbGxvdXQtYm9keS1saW5lLXN0eWxlKSkKCShzZXRsZW5ndGggKGZvcm1hdCAiJXMl cyVzJXMiCgkJCSAgICJcXG5ld2xlbmd0aHtcXHN0ZXBzaXplfVxuIgoJCQkgICAiXFxzZXRsZW5n dGh7XFxzdGVwc2l6ZX17IgoJCQkgICBhbGxvdXQtaW5kZW50CgkJCSAgICJ9XG4iKSkKCShvbmVo ZWFkbGluZSAoZm9ybWF0ICIlcyVzJXMlcyVzJXMlcyIKCQkJICAgICAiXFxuZXdjb21tYW5ke1xc T25lSGVhZExpbmV9WzNdeyVcbiIKCQkJICAgICAiXFxub2luZGVudCVcbiIKCQkJICAgICAiXFxo c3BhY2UqeyMyXFxzdGVwc2l6ZX0lXG4iCgkJCSAgICAgIlxcbGFiZWxjbWR7IzF9XFxoc3BhY2Uq ey4yY219IgoJCQkgICAgICJcXGhlYWRsaW5lY21keyMzfVxcXFxbIgoJCQkgICAgIGFsbG91dC1s aW5lLXNraXAKCQkJICAgICAiXVxufVxuIikpCgkob25lYm9keWxpbmUgKGZvcm1hdCAiJXMlcyVz JXMlcyVzIgoJCQkgICAgICAgIlxcbmV3Y29tbWFuZHtcXE9uZUJvZHlMaW5lfVsyXXslXG4iCgkJ CSAgICAgICAiXFxub2luZGVudCVcbiIKCQkJICAgICAgICJcXGhzcGFjZSp7IzFcXHN0ZXBzaXpl fSVcbiIKCQkJICAgICAgICJcXGJvZHlsaW5lY21keyMyfVxcXFxbIgoJCQkgICAgICAgYWxsb3V0 LWxpbmUtc2tpcAoJCQkgICAgICAgIl1cbn1cbiIpKQoJKGJlZ2luZG9jICJcXGJlZ2lue2RvY3Vt ZW50fVxuXFxiZWdpbntjZW50ZXJ9XG4iKQoJKHRpdGxlIChmb3JtYXQgIiVzJXMlcyVzIgoJCSAg ICAgICAiXFx0aXRsZWNtZHsiCgkJICAgICAgIChhbGxvdXQtbGF0ZXgtdmVyYi1xdW90ZSAoaWYg YWxsb3V0LXRpdGxlCgkJCQkJCShjb25kaXRpb24tY2FzZSBuaWwKCQkJCQkJICAgIChldmFsIGFs bG91dC10aXRsZSkKCQkJCQkJICAoZXJyb3IgIjx1bm5hbWVkIGJ1ZmZlcj4iKSkKCQkJCQkgICAg ICAiVW5uYW1lZCBPdXRsaW5lIikpCgkJICAgICAgICJ9XG4iCgkJICAgICAgICJcXGVuZHtjZW50 ZXJ9XG5cbiIpKQoJKGhzaXplICJcXGhzaXplID0gNy41IHRydWUgaW5cbiIpCgkoaG9mZnNldCAi XFxob2Zmc2V0ID0gLTEuNSB0cnVlIGluXG4iKQoJKHZzcGFjZSAiXFx2c3BhY2V7LjFjbX1cblxu IikpCiAgICAoaW5zZXJ0IChjb25jYXQgZG9jLXN0eWxlCgkJICAgIHBhZ2UtbnVtYmVyaW5nCgkJ ICAgIHRpdGxlY21kCgkJICAgIGxhYmVsY21kCgkJICAgIGhlYWRsaW5lY21kCgkJICAgIGJvZHls aW5lY21kCgkJICAgIHNldGxlbmd0aAoJCSAgICBvbmVoZWFkbGluZQoJCSAgICBvbmVib2R5bGlu ZQoJCSAgICBiZWdpbmRvYwoJCSAgICB0aXRsZQoJCSAgICBoc2l6ZQoJCSAgICBob2Zmc2V0CgkJ ICAgIHZzcGFjZSkKCSAgICApKSkKOzs7XyAgID4gYWxsb3V0LWluc2VydC1sYXRleC10cmFpbGVy IChidWZmZXIpCihkZWZ1biBhbGxvdXQtaW5zZXJ0LWxhdGV4LXRyYWlsZXIgKGJ1ZmZlcikKICAi SW5zZXJ0IGNvbmNsdWRpbmcgTGFUZVggY29tbWFuZHMgYXQgcG9pbnQgaW4gQlVGRkVSLiIKICAo c2V0LWJ1ZmZlciBidWZmZXIpCiAgKGluc2VydCAiXG5cXGVuZHtkb2N1bWVudH1cbiIpKQo7Oztf ICAgPiBhbGxvdXQtbGF0ZXhpZnktb25lLWl0ZW0gKGRlcHRoIHByZWZpeCBidWxsZXQgdGV4dCkK KGRlZnVuIGFsbG91dC1sYXRleGlmeS1vbmUtaXRlbSAoZGVwdGggcHJlZml4IGJ1bGxldCB0ZXh0 KQogICJJbnNlcnQgTGFUZVggY29tbWFuZHMgZm9yIGZvcm1hdHRpbmcgb25lIG91dGxpbmUgaXRl bS4KCkFyZ3MgYXJlIHRoZSB0b3BpY3MgbnVtZXJpYyBERVBUSCwgdGhlIGhlYWRlciBQUkVGSVgg bGVhZCBzdHJpbmcsIHRoZQpCVUxMRVQgc3RyaW5nLCBhbmQgYSBsaXN0IG9mIFRFWFQgc3RyaW5n cyBmb3IgdGhlIGJvZHkuIgogIChsZXQqICgoaGVhZC1saW5lIChpZiB0ZXh0IChjYXIgdGV4dCkp KQoJIChib2R5LWxpbmVzIChjZHIgdGV4dCkpCgkgKGN1cnItbGluZSkKCSBib2R5LWNvbnRlbnQg Ym9wKQoJCQkJCTsgRG8gdGhlIGhlYWQgbGluZToKICAgIChpbnNlcnQgKGNvbmNhdCAiXFxPbmVI ZWFkTGluZXtcXHZlcmJcMSAiCiAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1sYXRleC12ZXJi LXF1b3RlIGJ1bGxldCkKICAgICAgICAgICAgICAgICAgICAiXDF9eyIKICAgICAgICAgICAgICAg ICAgICBkZXB0aAogICAgICAgICAgICAgICAgICAgICJ9e1xcdmVyYlwxICIKICAgICAgICAgICAg ICAgICAgICAoaWYgaGVhZC1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtbGF0 ZXgtdmVyYi1xdW90ZSBoZWFkLWxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAiIikKICAgICAg ICAgICAgICAgICAgICAiXDF9XG4iKSkKICAgIChpZiAobm90IGJvZHktbGluZXMpCgluaWwKICAg ICAgOzsoaW5zZXJ0ICJcXGJlZ2lubGluZXNcbiIpCiAgICAgIChpbnNlcnQgIlxcYmVnaW57dmVy YmF0aW19XG4iKQogICAgICAod2hpbGUgYm9keS1saW5lcwoJKHNldHEgY3Vyci1saW5lIChjYXIg Ym9keS1saW5lcykpCgkoaWYgKGFuZCAobm90IGJvZHktY29udGVudCkKCQkgKG5vdCAoc3RyaW5n LW1hdGNoICJeXFxzLSokIiBjdXJyLWxpbmUpKSkKCSAgICAoc2V0cSBib2R5LWNvbnRlbnQgdCkp CgkJCQkJOyBNYW5nbGUgYW55IG9jY3VycmVuY2VzIG9mCgkJCQkJOyAiXGVuZHt2ZXJiYXRpbX0i IGluIHRleHQsCgkJCQkJOyBpdCdzIHNwZWNpYWw6CgkoaWYgKGFuZCBib2R5LWNvbnRlbnQKCQkg KHNldHEgYm9wIChzdHJpbmctbWF0Y2ggIlxcZW5ke3ZlcmJhdGltfSIgY3Vyci1saW5lKSkpCgkg ICAgKHNldHEgY3Vyci1saW5lIChjb25jYXQgKHN1YnN0cmluZyBjdXJyLWxpbmUgMCBib3ApCgkJ CQkgICAgIj4iCgkJCQkgICAgKHN1YnN0cmluZyBjdXJyLWxpbmUgYm9wKSkpKQoJOzsoaW5zZXJ0 ICJ8IiAoY2FyIGJvZHktbGluZXMpICJ8IikKCShpbnNlcnQgY3Vyci1saW5lKQoJKGFsbG91dC1s YXRleC12ZXJiYXRpbS1xdW90ZS1jdXJyLWxpbmUpCgkoaW5zZXJ0ICJcbiIpCgkoc2V0cSBib2R5 LWxpbmVzIChjZHIgYm9keS1saW5lcykpKQogICAgICAoaWYgYm9keS1jb250ZW50CgkgIChzZXRx IGJvZHktY29udGVudCBuaWwpCgkoZm9yd2FyZC1jaGFyIC0xKQoJKGluc2VydCAiXFwgIikKCShm b3J3YXJkLWNoYXIgMSkpCiAgICAgIDs7KGluc2VydCAiXFxlbmRsaW5lc1xuIikKICAgICAgKGlu c2VydCAiXFxlbmR7dmVyYmF0aW19XG4iKQogICAgICApKSkKOzs7XyAgID4gYWxsb3V0LWxhdGV4 aWZ5LWV4cG9zZWQgKGFyZyAmb3B0aW9uYWwgdG9idWYpCihkZWZ1biBhbGxvdXQtbGF0ZXhpZnkt ZXhwb3NlZCAoYXJnICZvcHRpb25hbCB0b2J1ZikKICAiRm9ybWF0IGN1cnJlbnQgdG9waWNzIGV4 cG9zZWQgcG9ydGlvbnMgdG8gVE9CVUYgZm9yIExhVGVYIHByb2Nlc3NpbmcuClRPQlVGIGRlZmF1 bHRzIHRvIGEgYnVmZmVyIG5hbWVkIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGJ1ZmZlciwgYnV0 CndpdGggXCIqXCIgcHJlcGVuZGVkIGFuZCBcIiBsYXRleC1mb3JtZWQqXCIgYXBwZW5kZWQuCgpX aXRoIHJlcGVhdCBjb3VudCwgY29weSB0aGUgZXhwb3NlZCBwb3J0aW9ucyBvZiBlbnRpcmUgYnVm ZmVyLiIKCiAgKGludGVyYWN0aXZlICJQIikKICAoaWYgKG5vdCB0b2J1ZikKICAgICAgKHNldHEg dG9idWYKCSAgICAoZ2V0LWJ1ZmZlci1jcmVhdGUgKGNvbmNhdCAiKiIgKGJ1ZmZlci1uYW1lKSAi IGxhdGV4aWZpZWQqIikpKSkKICAobGV0KiAoKHN0YXJ0LXB0IChwb2ludCkpCgkgKGJlZyAoaWYg YXJnIChwb2ludC1taW4pIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpKSkKCSAoZW5k IChpZiBhcmcgKHBvaW50LW1heCkgKGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlKSkpCgkg KGJ1ZiAoY3VycmVudC1idWZmZXIpKSkKICAgIChzZXQtYnVmZmVyIHRvYnVmKQogICAgKGVyYXNl LWJ1ZmZlcikKICAgIChhbGxvdXQtaW5zZXJ0LWxhdGV4LWhlYWRlciB0b2J1ZikKICAgIChnb3Rv LWNoYXIgKHBvaW50LW1heCkpCiAgICAoYWxsb3V0LXByb2Nlc3MtZXhwb3NlZCAnYWxsb3V0LWxh dGV4aWZ5LW9uZS1pdGVtCgkJCSAgICAgYmVnCgkJCSAgICAgZW5kCgkJCSAgICAgYnVmCgkJCSAg ICAgdG9idWYpCiAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgKGFsbG91dC1pbnNlcnQt bGF0ZXgtdHJhaWxlciB0b2J1ZikKICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAocG9w LXRvLWJ1ZmZlciBidWYpCiAgICAoZ290by1jaGFyIHN0YXJ0LXB0KSkpCgo7OztfICM4IEVuY3J5 cHRpb24KOzs7XyAgPiBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9uICgm b3B0aW9uYWwgZmV0Y2gtcGFzcykKKGRlZnVuIGFsbG91dC10b2dnbGUtY3VycmVudC1zdWJ0cmVl LWVuY3J5cHRpb24gKCZvcHRpb25hbCBmZXRjaC1wYXNzKQogICJFbmNyeXB0IGNsZWFyIG9yIGRl Y3J5cHQgZW5jb2RlZCB0ZXh0IG9mIHZpc2libHktY29udGFpbmluZyB0b3BpYydzIGNvbnRlbnRz LgoKT3B0aW9uYWwgRkVUQ0gtUEFTUyB1bml2ZXJzYWwgYXJndW1lbnQgcHJvdm9rZXMga2V5LXBh aXIgZW5jcnlwdGlvbiB3aXRoCnNpbmdsZSB1bml2ZXJzYWwgYXJndW1lbnQuICBXaXRoIGRvdWJs ZWQgdW5pdmVyc2FsIGFyZ3VtZW50IFwodmFsdWUgPSAxNiksCml0IGZvcmNlcyBwcm9tcHRpbmcg Zm9yIHRoZSBwYXNzcGhyYXNlIHJlZ2FyZGxlc3Mgb2YgYXZhaWxhYmlsaXR5IGZyb20gdGhlCnBh c3NwaHJhc2UgY2FjaGUuICBXaXRoIG5vIHVuaXZlcnNhbCBhcmd1bWVudCwgdGhlIGFwcHJvcHJp YXRlIHBhc3NwaHJhc2UKaXMgb2J0YWluZWQgZnJvbSB0aGUgY2FjaGUsIGlmIGF2YWlsYWJsZSwg ZWxzZSBmcm9tIHRoZSB1c2VyLgoKQ3VycmVudGx5IG9ubHkgR251UEcgZW5jcnlwdGlvbiBpcyBz dXBwb3J0ZWQuCgpcKipOT1RFIFdFTEwqKiB0aGF0IHRoZSBlbmNyeXB0ZWQgdGV4dCBtdXN0IGJl IGFzY2lpLWFybW9yZWQuICBGb3IgZ251cGcKZW5jcnlwdGlvbiwgaW5jbHVkZSB0aGUgb3B0aW9u IGBgYXJtb3InJyBpbiB5b3VyIH4vLmdudXBnL2dwZy5jb25mIGZpbGUuCgpCb3RoIHN5bW1ldHJp Yy1rZXkgYW5kIGtleS1wYWlyIGVuY3J5cHRpb24gaXMgaW1wbGVtZW50ZWQuICBTeW1tZXRyaWMg aXMKdGhlIGRlZmF1bHQsIHVzZSBhIHNpbmdsZSBcKHg0KSB1bml2ZXJzYWwgYXJndW1lbnQgZm9y IGtleXBhaXIgbW9kZS4KCkVuY3J5cHRlZCB0b3BpYydzIGJ1bGxldCBpcyBzZXQgdG8gYSBgficg dG8gc2lnbmFsIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQp0b3BpYyBcKGJvZHkgYW5kIHN1YnRv cGljcywgYnV0IG5vdCBoZWFkaW5nKSBpcyBwZW5kaW5nIGVuY3J5cHRpb24gb3IKZW5jcnlwdGVk LiAgYConIGFzdGVyaXNrIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBidWxsZXQgc2lnbmFscyB0aGF0 IHRoZSBib2R5CmlzIGVuY3J5cHRlZCwgaXRzJyBhYnNlbmNlIG1lYW5zIHRoZSB0b3BpYyBpcyBt ZWFudCB0byBiZSBlbmNyeXB0ZWQgYnV0IGlzCm5vdC4gIFdoZW4gYSBmaWxlIHdpdGggdG9waWNz IHBlbmRpbmcgZW5jcnlwdGlvbiBpcyBzYXZlZCwgdG9waWNzIHBlbmRpbmcKZW5jcnlwdGlvbiBh cmUgZW5jcnlwdGVkLiAgU2VlIGFsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzIGZv cgphdXRvLWVuY3J5cHRpb24gc3BlY2lmaWNzLgoKXCoqTk9URSBXRUxMKiogdGhhdCBhdXRvbWF0 aWMgZW5jcnlwdGlvbiB0aGF0IGhhcHBlbnMgZHVyaW5nIHNhdmVzIHdpbGwKZGVmYXVsdCB0byBz eW1tZXRyaWMgZW5jcnlwdGlvbiAtIHlvdSBtdXN0IG1hbnVhbGx5IFwocmUpZW5jcnlwdCBrZXkt cGFpcgplbmNyeXB0ZWQgdG9waWNzIGlmIHlvdSB3YW50IHRoZW0gdG8gY29udGludWUgdG8gdXNl IHRoZSBrZXktcGFpciBjaXBoZXIuCgpMZXZlbC1vbmUgdG9waWNzLCB3aXRoIHByZWZpeCBjb25z aXN0aW5nIHNvbGVseSBvZiBhbiBgKicgYXN0ZXJpc2ssIGNhbm5vdCBiZQplbmNyeXB0ZWQuICBJ ZiB5b3Ugd2FudCB0byBlbmNyeXB0IHRoZSBjb250ZW50cyBvZiBhIHRvcC1sZXZlbCB0b3BpYywg dXNlClxcW2FsbG91dC1zaGlmdC1pbl0gdG8gaW5jcmVhc2UgaXRzIGRlcHRoLgoKICBQYXNzcGhy YXNlIENhY2hpbmcKClRoZSBlbmNyeXB0aW9uIHBhc3NwaHJhc2UgaXMgc29saWNpdGVkIGlmIG5v dCBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZQpwYXNzcGhyYXNlIGNhY2hlIGZyb20gYSByZWNl bnQgZW5jcnlwdGlvbiBhY3Rpb24uCgpUaGUgc29saWNpdGVkIHBhc3NwaHJhc2UgaXMgcmV0YWlu ZWQgZm9yIHJldXNlIGluIGEgYnVmZmVyLXNwZWNpZmljIGNhY2hlCmZvciBzb21lIHNldCBwZXJp b2Qgb2YgdGltZSBcKGRlZmF1bHQsIDYwIHNlY29uZHMpLCBhZnRlciB3aGljaCB0aGUgc3RyaW5n CmlzIG51bGxlZC4gIFRoZSBwYXNzcGhyYXNlIGNhY2hlIHRpbWVvdXQgaXMgY3VzdG9taXplZCBi eSBzZXR0aW5nCmBwZ2ctcGFzc3BocmFzZS1jYWNoZS1leHBpcnknLgoKICBTeW1tZXRyaWMgUGFz c3BocmFzZSBIaW50aW5nIGFuZCBWZXJpZmljYXRpb24KCklmIHRoZSBmaWxlIHByZXZpb3VzbHkg aGFkIG5vIGFzc29jaWF0ZWQgcGFzc3BocmFzZSwgb3IgaGFkIGEgZGlmZmVyZW50CnBhc3NwaHJh c2UgdGhhbiBzcGVjaWZpZWQsIHRoZSB1c2VyIGlzIHByb21wdGVkIHRvIHJlcGVhdCB0aGUgbmV3 IG9uZSBmb3IKY29ycm9ib3JhdGlvbi4gIEEgcmFuZG9tIHN0cmluZyBlbmNyeXB0ZWQgYnkgdGhl IG5ldyBwYXNzcGhyYXNlIGlzIHNldCBvbgp0aGUgYnVmZmVyLXNwZWNpZmljIHZhcmlhYmxlIGBh bGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1zdHJpbmcnLCBmb3IKY29uZmlybWF0aW9uIG9mIHRo ZSBwYXNzcGhyYXNlIHdoZW4gbmV4dCBvYnRhaW5lZCwgYmVmb3JlIGVuY3J5cHRpbmcgb3IKZGVj cnlwdGluZyBhbnl0aGluZyB3aXRoIGl0LiAgVGhpcyBoZWxwcyBhdm9pZCBtaXN0YWtlbmx5IHNo aWZ0aW5nIGJldHdlZW4Ka2V5cy4KCklmIGFsbG91dCBjdXN0b21pemF0aW9uIHZhciBgYWxsb3V0 LXBhc3NwaHJhc2UtdmVyaWZpZXItaGFuZGxpbmcnIGlzCm5vbi1uaWwsIGFuIGVudHJ5IGZvciBg YWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nJyBhbmQgaXRzIHZhbHVlIGlzCmFkZGVk IHRvIGFuIEVtYWNzICdsb2NhbCB2YXJpYWJsZXMnIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUg ZmlsZSwgd2hpY2gKaXMgY3JlYXRlZCBpZiBuZWNlc3NhcnkuICBUaGF0IHNldHRpbmcgaXMgZm9y IHJldGVudGlvbiBvZiB0aGUgcGFzc3BocmFzZQp2ZXJpZmllciBhY3Jvc3MgZW1hY3Mgc2Vzc2lv bnMuCgpTaW1pbGFybHksIGBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZycgc3RvcmVzIGEg dXNlci1wcm92aWRlZCByZW1pbmRlcgphYm91dCB0aGVpciBwYXNzcGhyYXNlLCBhbmQgYGFsbG91 dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcnIHNwZWNpZmllcwp3aGVuIHRoZSBoaW50IGlzIHBy ZXNlbnRlZCwgb3IgaWYgcGFzc3BocmFzZSBoaW50cyBhcmUgZGlzYWJsZWQuICBJZgplbmFibGVk IFwoc2VlIHRoZSBgYWxsb3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZycgZG9jc3RyaW5nIGZv ciBkZXRhaWxzKSwKdGhlIGhpbnQgc3RyaW5nIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwtdmFyaWFi bGVzIHNlY3Rpb24gb2YgdGhlIGZpbGUsIGFuZApzb2xpY2l0ZWQgd2hlbmV2ZXIgdGhlIHBhc3Nw aHJhc2UgaXMgY2hhbmdlZC4iCiAgKGludGVyYWN0aXZlICJQIikKICAoc2F2ZS1leGN1cnNpb24K ICAgIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAoYWxsb3V0LXRvZ2dsZS1z dWJ0cmVlLWVuY3J5cHRpb24gZmV0Y2gtcGFzcykKICAgICkKICApCjs7O18gID4gYWxsb3V0LXRv Z2dsZS1zdWJ0cmVlLWVuY3J5cHRpb24gKCZvcHRpb25hbCBmZXRjaC1wYXNzKQooZGVmdW4gYWxs b3V0LXRvZ2dsZS1zdWJ0cmVlLWVuY3J5cHRpb24gKCZvcHRpb25hbCBmZXRjaC1wYXNzKQogICJF bmNyeXB0IGNsZWFyIHRleHQgb3IgZGVjcnlwdCBlbmNvZGVkIHRvcGljIGNvbnRlbnRzIFwoYm9k eSBhbmQgc3VidG9waWNzLikKCk9wdGlvbmFsIEZFVENILVBBU1MgdW5pdmVyc2FsIGFyZ3VtZW50 IHByb3Zva2VzIGtleS1wYWlyIGVuY3J5cHRpb24gd2l0aApzaW5nbGUgdW5pdmVyc2FsIGFyZ3Vt ZW50LiAgV2l0aCBkb3VibGVkIHVuaXZlcnNhbCBhcmd1bWVudCBcKHZhbHVlID0gMTYpLAppdCBm b3JjZXMgcHJvbXB0aW5nIGZvciB0aGUgcGFzc3BocmFzZSByZWdhcmRsZXNzIG9mIGF2YWlsYWJp bGl0eSBmcm9tIHRoZQpwYXNzcGhyYXNlIGNhY2hlLiAgV2l0aCBubyB1bml2ZXJzYWwgYXJndW1l bnQsIHRoZSBhcHByb3ByaWF0ZSBwYXNzcGhyYXNlCmlzIG9idGFpbmVkIGZyb20gdGhlIGNhY2hl LCBpZiBhdmFpbGFibGUsIGVsc2UgZnJvbSB0aGUgdXNlci4KCkN1cnJlbnRseSBvbmx5IEdudVBH IGVuY3J5cHRpb24gaXMgc3VwcG9ydGVkLgoKXCoqTk9URSBXRUxMKiogdGhhdCB0aGUgZW5jcnlw dGVkIHRleHQgbXVzdCBiZSBhc2NpaS1hcm1vcmVkLiAgRm9yIGdudXBnCmVuY3J5cHRpb24sIGlu Y2x1ZGUgdGhlIG9wdGlvbiBgYGFybW9yJycgaW4geW91ciB+Ly5nbnVwZy9ncGcuY29uZiBmaWxl LgoKU2VlIGBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9uJyBmb3IgbW9y ZSBkZXRhaWxzLiIKCiAgKGludGVyYWN0aXZlICJQIikKICAoc2F2ZS1leGN1cnNpb24KICAgIChh bGxvdXQtZW5kLW9mLXByZWZpeCB0KQoKICAgIChpZiAoPSBhbGxvdXQtcmVjZW50LWRlcHRoIDEp CiAgICAgICAgKGVycm9yIChjb25jYXQgIkNhbm5vdCBlbmNyeXB0IG9yIGRlY3J5cHQgbGV2ZWwg MSB0b3BpY3MgLSIKICAgICAgICAgICAgICAgICAgICAgICAiIHNoaWZ0IGl0IGluIHRvIG1ha2Ug aXQgZW5jcnlwdGFibGUiKSkpCgogICAgKGxldCogKChhbGxvdXQtYnVmZmVyIChjdXJyZW50LWJ1 ZmZlcikpCiAgICAgICAgICAgOzsgQXNzZXMgbG9jYXRpb246CiAgICAgICAgICAgKGJ1bGxldC1w b3MgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQogICAgICAgICAgIChhZnRlci1idWxs ZXQtcG9zIChwb2ludCkpCiAgICAgICAgICAgKHdhcy1lbmNyeXB0ZWQKICAgICAgICAgICAgKHBy b2duIChpZiAoPSAocG9pbnQtbWF4KSBhZnRlci1idWxsZXQtcG9zKQogICAgICAgICAgICAgICAg ICAgICAgIChlcnJvciAibm8gYm9keSB0byBlbmNyeXB0IikpCiAgICAgICAgICAgICAgICAgICAo YWxsb3V0LWVuY3J5cHRlZC10b3BpYy1wKSkpCiAgICAgICAgICAgKHdhcy1jb2xsYXBzZWQgKGlm IChub3QgKHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYWNrd2FyZC1jaGFyIDEp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWhpZGRlbi1wKSkpCiAgICAgICAg ICAgKHN1YnRyZWUtYmVnICgxKyAocG9pbnQpKSkKICAgICAgICAgICAoc3VidHJlZS1lbmQgKGFs bG91dC1lbmQtb2Ytc3VidHJlZSkpCiAgICAgICAgICAgKHN1YmplY3QtdGV4dCAoYnVmZmVyLXN1 YnN0cmluZy1uby1wcm9wZXJ0aWVzIHN1YnRyZWUtYmVnCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRyZWUtZW5kKSkKICAgICAgICAg ICAoc3VidHJlZS1lbmQtY2hhciAoY2hhci1hZnRlciAoMS0gc3VidHJlZS1lbmQpKSkKICAgICAg ICAgICAoc3VidHJlZS10cmFpbGluZy1jaGFyIChjaGFyLWFmdGVyIHN1YnRyZWUtZW5kKSkKICAg ICAgICAgICA7OyBrbHVnZSAtIHJlc3VsdC10ZXh0IG5lZWRzIHRvIGJlIG5pbCwgYnV0IHdlIGFs c28gd2FudCB0bwogICAgICAgICAgIDs7ICAgICAgICAgY2hlY2sgZm9yIHRoZSBlcnJvciBjb25k aXRpb24KICAgICAgICAgICAocmVzdWx0LXRleHQgKGlmIChvciAoc3RyaW5nPSAiIiBzdWJqZWN0 LXRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0gIlxuIiBzdWJq ZWN0LXRleHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJObyB0b3BpYyBj b250ZW50cyB0byAlc2NyeXB0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp ZiB3YXMtZW5jcnlwdGVkICJkZSIgImVuIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmls KSkKICAgICAgICAgICA7OyBBc3Nlc3Mga2V5IHBhcmFtZXRlcnM6CiAgICAgICAgICAgKGtleS1p bmZvIChvcgogICAgICAgICAgICAgICAgICAgICAgOzsgZGV0ZWN0IHRoZSB0eXBlIGJ5IHdoaWNo IGl0IGlzIGFscmVhZHkgZW5jcnlwdGVkCiAgICAgICAgICAgICAgICAgICAgICAoYW5kIHdhcy1l bmNyeXB0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmNyeXB0ZWQta2V5 LWluZm8gc3ViamVjdC10ZXh0KSkKICAgICAgICAgICAgICAgICAgICAgIChhbmQgKG1lbWJlciBm ZXRjaC1wYXNzICcoNCAoNCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAnKGtleXBhaXIg bmlsKSkKICAgICAgICAgICAgICAgICAgICAgICcoc3ltbWV0cmljIG5pbCkpKQogICAgICAgICAg IChmb3Ita2V5LXR5cGUgKGNhciBrZXktaW5mbykpCiAgICAgICAgICAgKGZvci1rZXktaWRlbnRp dHkgKGNhZHIga2V5LWluZm8pKQogICAgICAgICAgIChmZXRjaC1wYXNzIChhbmQgZmV0Y2gtcGFz cyAobWVtYmVyIGZldGNoLXBhc3MgJygxNiAoMTYpKSkpKSkKCiAgICAgIChzZXRxIHJlc3VsdC10 ZXh0CiAgICAgICAgICAgIChhbGxvdXQtZW5jcnlwdC1zdHJpbmcgc3ViamVjdC10ZXh0IHdhcy1l bmNyeXB0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtYnVm ZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ita2V5LXR5cGUgZm9y LWtleS1pZGVudGl0eSBmZXRjaC1wYXNzKSkKCiAgICAgICA7OyBSZXBsYWNlIHRoZSBzdWJ0cmVl IHdpdGggdGhlIHByb2Nlc3NlZCBwcm9kdWN0LgogICAgICAoYWxsb3V0LXVucHJvdGVjdGVkCiAg ICAgICAocHJvZ24KICAgICAgICAgKHNldC1idWZmZXIgYWxsb3V0LWJ1ZmZlcikKICAgICAgICAg KGRlbGV0ZS1yZWdpb24gc3VidHJlZS1iZWcgc3VidHJlZS1lbmQpCiAgICAgICAgIChpbnNlcnQg cmVzdWx0LXRleHQpCiAgICAgICAgIChpZiB3YXMtY29sbGFwc2VkCiAgICAgICAgICAgICAoYWxs b3V0LWZsYWctcmVnaW9uICgxLSBzdWJ0cmVlLWJlZykgKHBvaW50KSB0KSkKICAgICAgICAgOzsg YWRqdXN0IHRyYWlsaW5nLWJsYW5rLWxpbmVzIHRvIHByZXNlcnZlIHRvcGljIHNwYWNpbmc6CiAg ICAgICAgIChpZiAobm90IHdhcy1lbmNyeXB0ZWQpCiAgICAgICAgICAgICAoaWYgKGFuZCAoPSBz dWJ0cmVlLWVuZC1jaGFyID9cbikKICAgICAgICAgICAgICAgICAgICAgICg9IHN1YnRyZWUtdHJh aWxpbmctY2hhciA/XG4pKQogICAgICAgICAgICAgICAgIChpbnNlcnQgc3VidHJlZS10cmFpbGlu Zy1jaGFyKSkpCiAgICAgICAgIDs7IEVuc3VyZSB0aGF0IHRoZSBpdGVtIGhhcyBhbiBlbmNyeXB0 ZWQtZW50cnkgYnVsbGV0OgogICAgICAgICAoaWYgKG5vdCAoc3RyaW5nPSAoYnVmZmVyLXN1YnN0 cmluZy1uby1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gYWZ0ZXIt YnVsbGV0LXBvcykgYWZ0ZXItYnVsbGV0LXBvcykKICAgICAgICAgICAgICAgICAgICAgICAgICAg YWxsb3V0LXRvcGljLWVuY3J5cHRpb24tYnVsbGV0KSkKICAgICAgICAgICAgIChwcm9nbiAoZ290 by1jaGFyICgxLSBhZnRlci1idWxsZXQtcG9zKSkKICAgICAgICAgICAgICAgICAgICAoZGVsZXRl LWNoYXIgMSkKICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0IGFsbG91dC10b3BpYy1lbmNyeXB0 aW9uLWJ1bGxldCkpKQogICAgICAgICAoaWYgd2FzLWVuY3J5cHRlZAogICAgICAgICAgICAgOzsg UmVtb3ZlIHRoZSBpcy1lbmNyeXB0ZWQgYnVsbGV0IHF1YWxpZmllcjoKICAgICAgICAgICAgIChw cm9nbiAoZ290by1jaGFyIGFmdGVyLWJ1bGxldC1wb3MpCiAgICAgICAgICAgICAgICAgICAgKGRl bGV0ZS1jaGFyIDEpKQogICAgICAgICAgIDs7IEFkZCB0aGUgaXMtZW5jcnlwdGVkIGJ1bGxldCBx dWFsaWZpZXI6CiAgICAgICAgICAgKGdvdG8tY2hhciBhZnRlci1idWxsZXQtcG9zKQogICAgICAg ICAgIChpbnNlcnQgIioiKSkpKQogICAgICAocnVuLWhvb2std2l0aC1hcmdzICdhbGxvdXQtc3Ry dWN0dXJlLWFkZGVkLWhvb2sKICAgICAgICAgICAgICAgICAgICAgICAgICBidWxsZXQtcG9zIHN1 YnRyZWUtZW5kKSkpKQo7OztfICA+IGFsbG91dC1lbmNyeXB0LXN0cmluZyAodGV4dCBkZWNyeXB0 IGFsbG91dC1idWZmZXIga2V5LXR5cGUgZm9yLWtleQo7OzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmV0Y2gtcGFzcyAmb3B0aW9uYWwgcmV0cmllZCB2ZXJpZnlpbmcKOzs7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpCihkZWZ1biBhbGxvdXQt ZW5jcnlwdC1zdHJpbmcgKHRleHQgZGVjcnlwdCBhbGxvdXQtYnVmZmVyIGtleS10eXBlIGZvci1r ZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaC1wYXNzICZvcHRpb25h bCByZXRyaWVkIHJlamVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVy aWZ5aW5nIHBhc3NwaHJhc2UpCiAgIkVuY3J5cHQgb3IgZGVjcnlwdCBtZXNzYWdlIFRFWFQuCgpJ ZiBERUNSWVBUIGlzIHRydWUgKGRlZmF1bHQgZmFsc2UpLCB0aGVuIGRlY3J5cHQgaW5zdGVhZCBv ZiBlbmNyeXB0LgoKRkVUQ0gtUEFTUyAoZGVmYXVsdCBmYWxzZSkgZm9yY2VzIGZyZXNoIHByb21w dGluZyBmb3IgdGhlIHBhc3NwaHJhc2UuCgpLRVktVFlQRSBpbmRpY2F0ZXMgd2hldGhlciB0byB1 c2UgYSAnc3ltbWV0cmljIG9yICdrZXlwYWlyIGNpcGhlci4KCkZPUi1LRVkgaXMgaHVtYW4gcmVh ZGFibGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIGZpcnN0IG9mIHRoZSB1c2VyJ3MKZWxpZ2libGUg c2VjcmV0IGtleXMgYSBrZXlwYWlyIGRlY3J5cHRpb24gdGFyZ2V0cywgb3IgZWxzZSBuaWwuCgpP cHRpb25hbCBSRVRSSUVEIGlzIGZvciBpbnRlcm5hbCB1c2UgLSBjb252ZXlzIHRoZSBudW1iZXIg b2YgZmFpbGVkIGtleXMKdGhhdCBoYXZlIGJlZW4gc29saWNpdGVkIGluIHNlcXVlbmNlIGxlYWRp bmcgdG8gdGhpcyBjdXJyZW50IGNhbGwuCgpPcHRpb25hbCBQQVNTUEhSQVNFIGVuYWJsZXMgZXhw bGljaXQgZGVsaXZlcnkgb2YgdGhlIGRlY3J5cHRpb24gcGFzc3BocmFzZSwKZm9yIHZlcmlmaWNh dGlvbiBwdXJwb3Nlcy4KCk9wdGlvbmFsIFJFSkVDVEVEIGlzIGZvciBpbnRlcm5hbCB1c2UgLSBj b252ZXlzIHRoZSBudW1iZXIgb2YKcmVqZWN0aW9ucyBkdWUgdG8gbWF0Y2hlcyBhZ2FpbnN0CmBh bGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1yZWdleHBzJywgYXMgbGltaXRl ZCBieQpgYWxsb3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tY2VpbGluZycuCgpS ZXR1cm5zIHRoZSByZXN1bHRpbmcgc3RyaW5nLCBvciBuaWwgaWYgdGhlIHRyYW5zZm9ybWF0aW9u IGZhaWxzLiIKCiAgKHJlcXVpcmUgJ3BnZykKCiAgKGlmIChub3QgKGZib3VuZHAgJ3BnZy1lbmNy eXB0LXN5bW1ldHJpYykpCiAgICAgIChlcnJvciAiQWxsb3V0IGVuY3J5cHRpb24gZGVwZW5kcyBv biBhIG5ld2VyIHZlcnNpb24gb2YgcGdnIikpCgogIChsZXQqICgoc2NoZW1lICh1cGNhc2UKICAg ICAgICAgICAgICAgICAgKGZvcm1hdCAiJXMiIChvciBwZ2ctc2NoZW1lIHBnZy1kZWZhdWx0LXNj aGVtZSAiR1BHIikpKSkKICAgICAgICAgKGZvci1rZXkgKGFuZCAoZXF1YWwga2V5LXR5cGUgJ2tl eXBhaXIpCiAgICAgICAgICAgICAgICAgICAgICAgKG9yIGZvci1rZXkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNwbGl0LXN0cmluZyAocmVhZC1zdHJpbmcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiJXMgbWVzc2FnZSByZWNpcGllbnRzOiAi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1l KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyBcdCxdKyIpKSkp CiAgICAgICAgICh0YXJnZXQtcHJvbXB0LWlkIChpZiAoZXF1YWwga2V5LXR5cGUgJ2tleXBhaXIp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKD0gKGxlbmd0aCBmb3Ita2V5KSAx KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgZm9yLWtleSkgZm9yLWtl eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLW5hbWUgYWxsb3V0LWJ1ZmZl cikpKQogICAgICAgICAodGFyZ2V0LWNhY2hlLWlkIChmb3JtYXQgIiVzLSVzIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2V5LXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoZXF1YWwga2V5LXR5cGUgJ2tleXBhaXIpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LXByb21wdC1pZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAob3IgKGJ1ZmZlci1maWxlLW5hbWUgYWxsb3V0LWJ1ZmZlcikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC1wcm9tcHQtaWQpKSkp CiAgICAgICAgIChlbmNvZGluZyAod2l0aC1jdXJyZW50LWJ1ZmZlciBhbGxvdXQtYnVmZmVyCiAg ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci1maWxlLWNvZGluZy1zeXN0ZW0pKQogICAgICAgICAo bXVsdGlieXRlICh3aXRoLWN1cnJlbnQtYnVmZmVyIGFsbG91dC1idWZmZXIKICAgICAgICAgICAg ICAgICAgICAgZW5hYmxlLW11bHRpYnl0ZS1jaGFyYWN0ZXJzKSkKICAgICAgICAgKHN0cmlwLXBs YWludGV4dC1yZWdleHBzCiAgICAgICAgICAoaWYgKG5vdCBkZWNyeXB0KQogICAgICAgICAgICAg IChhbGxvdXQtZ2V0LWNvbmZpZ3Zhci12YWx1ZXMKICAgICAgICAgICAgICAgJ2FsbG91dC1lbmNy eXB0aW9uLXBsYWludGV4dC1zYW5pdGl6YXRpb24tcmVnZXhwcykpKQogICAgICAgICAocmVqZWN0 LWNpcGhlcnRleHQtcmVnZXhwcwogICAgICAgICAgKGlmIChub3QgZGVjcnlwdCkKICAgICAgICAg ICAgICAoYWxsb3V0LWdldC1jb25maWd2YXItdmFsdWVzCiAgICAgICAgICAgICAgICdhbGxvdXQt ZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1yZWdleHBzKSkpCiAgICAgICAgIChyZWpl Y3RlZCAob3IgcmVqZWN0ZWQgMCkpCiAgICAgICAgIChyZWplY3Rpb25zLWxlZnQgKC0gYWxsb3V0 LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tY2VpbGluZwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlamVjdGVkKSkKICAgICAgICAgcmVzdWx0LXRleHQgc3RhdHVzKQoKICAg IChpZiAoYW5kIGZldGNoLXBhc3MgKG5vdCBwYXNzcGhyYXNlKSkKICAgICAgICA7OyBGb3JjZSBs YXRlciBmZXRjaCBieSBldmljdGluZyBwYXNzcGhyYXNlIGZyb20gdGhlIGNhY2hlLgogICAgICAg IChwZ2ctcmVtb3ZlLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSB0YXJnZXQtY2FjaGUtaWQgdCkpCgog ICAgKGNhdGNoICdlbmNyeXB0aW9uLWZhaWxlZAoKICAgICAgICA7OyBPYnRhaW4gdGhlIHBhc3Nw aHJhc2UgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSBhbmQgd2UncmUgbm90CiAgICAgICAg OzsgZG9pbmcgYSBrZXlwYWlyIGVuY3J5cHRpb246CiAgICAgICAgKGlmIChub3QgKG9yIHBhc3Nw aHJhc2UKICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXF1YWwga2V5LXR5cGUgJ2tleXBhaXIp CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCBkZWNyeXB0KSkpKQoKICAgICAgICAgICAg KHNldHEgcGFzc3BocmFzZSAoYWxsb3V0LW9idGFpbi1wYXNzcGhyYXNlIGZvci1rZXkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC1j YWNoZS1pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGFyZ2V0LXByb21wdC1pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2V5LXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1idWZmZXIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZWQgZmV0Y2gtcGFz cykpKQoKICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgoKICAgICAgICAgIChpbnNlcnQgdGV4dCkK CiAgICAgICAgICA7OyBjb252ZXkgdGhlIHRleHQgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBvcmln aW5hbCBidWZmZXI6CiAgICAgICAgICAoc2V0LWJ1ZmZlci1tdWx0aWJ5dGUgbXVsdGlieXRlKQog ICAgICAgICAgKHdoZW4gZW5jb2RpbmcKICAgICAgICAgICAgKHNldC1idWZmZXItZmlsZS1jb2Rp bmctc3lzdGVtIGVuY29kaW5nKQogICAgICAgICAgICAoaWYgKG5vdCBkZWNyeXB0KQogICAgICAg ICAgICAgICAgKGVuY29kZS1jb2RpbmctcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGVu Y29kaW5nKSkpCgogICAgICAgICAgKHdoZW4gKGFuZCBzdHJpcC1wbGFpbnRleHQtcmVnZXhwcyAo bm90IGRlY3J5cHQpKQogICAgICAgICAgICAoZG9saXN0IChyZSBzdHJpcC1wbGFpbnRleHQtcmVn ZXhwcykKICAgICAgICAgICAgICAobGV0ICgocmUgKGlmIChsaXN0cCByZSkgKGNhciByZSkgcmUp KQogICAgICAgICAgICAgICAgICAgIChyZXBsYWNlbWVudCAoaWYgKGxpc3RwIHJlKSAoY2FkciBy ZSkgIiIpKSkKICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICAg ICAgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJlIG5pbCB0KQogICAgICAgICAgICAg ICAgICAocmVwbGFjZS1tYXRjaCByZXBsYWNlbWVudCBuaWwgbmlsKSkpKSkKCiAgICAgICAgICAo Y29uZAoKICAgICAgICAgICA7OyBzeW1tZXRyaWM6CiAgICAgICAgICAgKChlcXVhbCBrZXktdHlw ZSAnc3ltbWV0cmljKQogICAgICAgICAgICAoc2V0cSBzdGF0dXMKICAgICAgICAgICAgICAgICAg KGlmIGRlY3J5cHQKCiAgICAgICAgICAgICAgICAgICAgICAocGdnLWRlY3J5cHQgKHBvaW50LW1p bikgKHBvaW50LW1heCkgcGFzc3BocmFzZSkKCiAgICAgICAgICAgICAgICAgICAgKHBnZy1lbmNy eXB0LXN5bW1ldHJpYyAocG9pbnQtbWluKSAocG9pbnQtbWF4KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZSkpKQoKICAgICAgICAgICAgKGlmIHN0 YXR1cwogICAgICAgICAgICAgICAgKHBnZy1zaXR1YXRlLW91dHB1dCAocG9pbnQtbWluKSAocG9p bnQtbWF4KSkKICAgICAgICAgICAgICA7OyBmYWlsZWQgLSBoYW5kbGUgcGFzc3BocmFzZSBjYWNo aW5nCiAgICAgICAgICAgICAgKGlmIHZlcmlmeWluZwogICAgICAgICAgICAgICAgICAodGhyb3cg J2VuY3J5cHRpb24tZmFpbGVkIG5pbCkKICAgICAgICAgICAgICAgIChwZ2ctcmVtb3ZlLXBhc3Nw aHJhc2UtZnJvbS1jYWNoZSB0YXJnZXQtY2FjaGUtaWQgdCkKICAgICAgICAgICAgICAgIChlcnJv ciAiU3ltbWV0cmljLWNpcGhlciAlc2NyeXB0aW9uIGZhaWxlZCAtICVzIgogICAgICAgICAgICAg ICAgICAgICAgIChpZiBkZWNyeXB0ICJkZSIgImVuIikKICAgICAgICAgICAgICAgICAgICAgICAi dHJ5IGFnYWluIHdpdGggZGlmZmVyZW50IHBhc3NwaHJhc2UuIikpKSkKCiAgICAgICAgICAgOzsg ZW5jcnlwdCAna2V5cGFpcjoKICAgICAgICAgICAoKG5vdCBkZWNyeXB0KQoKICAgICAgICAgICAg KHNldHEgc3RhdHVzCgogICAgICAgICAgICAgICAgICAocGdnLWVuY3J5cHQgZm9yLWtleQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIChwb2ludC1taW4pIChwb2ludC1tYXgpIHBh c3NwaHJhc2UpKQoKICAgICAgICAgICAgKGlmIHN0YXR1cwogICAgICAgICAgICAgICAgKHBnZy1z aXR1YXRlLW91dHB1dCAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAoZXJy b3IgKHBnZy1yZW1vdmUtcGFzc3BocmFzZS1mcm9tLWNhY2hlIHRhcmdldC1jYWNoZS1pZCB0KQog ICAgICAgICAgICAgICAgICAgICAoZXJyb3IgImVuY3J5cHRpb24gZmFpbGVkIikpKSkKCiAgICAg ICAgICAgOzsgZGVjcnlwdCAna2V5cGFpcjoKICAgICAgICAgICAodAoKICAgICAgICAgICAgKHNl dHEgc3RhdHVzCiAgICAgICAgICAgICAgICAgIChwZ2ctZGVjcnlwdCAocG9pbnQtbWluKSAocG9p bnQtbWF4KSBwYXNzcGhyYXNlKSkKCiAgICAgICAgICAgIChpZiBzdGF0dXMKICAgICAgICAgICAg ICAgIChwZ2ctc2l0dWF0ZS1vdXRwdXQgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiAgICAgICAg ICAgICAgKGVycm9yIChwZ2ctcmVtb3ZlLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSB0YXJnZXQtY2Fj aGUtaWQgdCkKICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJkZWNyeXB0aW9uIGZhaWxlZCIp KSkpKQoKICAgICAgICAgIChzZXRxIHJlc3VsdC10ZXh0CiAgICAgICAgICAgICAgICAoYnVmZmVy LXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgMSAoLSAocG9pbnQtbWF4 KSAoaWYgZGVjcnlwdCAwIDEpKSkpCiAgICAgICAgICApCgogICAgICAgIDs7IHZhbGlkYXRlIHJl c3VsdCAtIG5vbi1lbXB0eQogICAgICAgIChjb25kICgobm90IHJlc3VsdC10ZXh0KQogICAgICAg ICAgICAgICAoaWYgdmVyaWZ5aW5nCiAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAg ICAgICA7OyB0cmFuc2Zvcm0gd2FzIGZydWl0bGVzcywgcmV0cnkgdy9uZXcgcGFzc3BocmFzZS4K ICAgICAgICAgICAgICAgICAocGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZyb20tY2FjaGUgdGFyZ2V0 LWNhY2hlLWlkIHQpCiAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmNyeXB0LXN0cmluZyB0ZXh0 IGRlY3J5cHQgYWxsb3V0LWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2V5LXR5cGUgZm9yLWtleSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiByZXRyaWVkICgxKyByZXRyaWVkKSAxKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgdmVyaWZ5aW5nIG5pbCkpKQoKICAgICAgICAg ICAgICA7OyBSZXRyeSAod2l0aGluIGxpbWl0KSBpZiBjaXBoZXJ0ZXh0IGNvbnRhaW5zIHJlamVj dGlvbnM6CiAgICAgICAgICAgICAgKChhbmQgKG5vdCBkZWNyeXB0KQogICAgICAgICAgICAgICAg ICAgIDs7IENoZWNrIGZvciBkaXNxdWFsaWZpY2F0aW9uIG9mIHRoaXMgY2lwaGVydGV4dDoKICAg ICAgICAgICAgICAgICAgICAobGV0ICgocmVnZXhwcyByZWplY3QtY2lwaGVydGV4dC1yZWdleHBz KQogICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdC1pdCkKICAgICAgICAgICAgICAgICAg ICAgICh3aGlsZSAoYW5kIHJlZ2V4cHMgKG5vdCByZWplY3QtaXQpKQogICAgICAgICAgICAgICAg ICAgICAgICAoc2V0cSByZWplY3QtaXQgKHN0cmluZy1tYXRjaCAoY2FyIHJlZ2V4cHMpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC10 ZXh0KSkKICAgICAgICAgICAgICAgICAgICAgICAgKHBvcCByZWdleHBzKSkKICAgICAgICAgICAg ICAgICAgICAgIHJlamVjdC1pdCkpCiAgICAgICAgICAgICAgIChzZXRxIHJlamVjdGlvbnMtbGVm dCAoMS0gcmVqZWN0aW9ucy1sZWZ0KSkKICAgICAgICAgICAgICAgKGlmICg8PSByZWplY3Rpb25z LWxlZnQgMCkKICAgICAgICAgICAgICAgICAgIChlcnJvciAoY29uY2F0ICJDaXBoZXJ0ZXh0IHJl amVjdGVkIHRvbyBtYW55IHRpbWVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiAoJXMpLCBwZXIgYCVzJyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWVuY3J5 cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tY2VpbGluZwogICAgICAgICAgICAgICAgICAgICAg ICAgICdhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1yZWdleHBzKQogICAg ICAgICAgICAgICAgIChhbGxvdXQtZW5jcnlwdC1zdHJpbmcgdGV4dCBkZWNyeXB0IGFsbG91dC1i dWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS10eXBlIGZv ci1rZXkgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVk ICgxKyByZWplY3RlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl cmlmeWluZyBwYXNzcGhyYXNlKSkpCiAgICAgICAgICAgICAgOzsgQmFyZiBpZiBlbmNyeXB0aW9u IHlpZWxkcyBleHRyYW9yZGluYXJ5IGNvbnRyb2wgY2hhcnM6CiAgICAgICAgICAgICAgKChhbmQg KG5vdCBkZWNyeXB0KQogICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIltcQy1hXEMt a1xDLW8tXEMtelxDLUBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0 LXRleHQpKQogICAgICAgICAgICAgICAoZXJyb3IgKGNvbmNhdCAiRW5jcnlwdGlvbiBwcm9kdWNl ZCBub24tYXJtb3JlZCB0ZXh0LCB3aGljaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImNvbmZsaWN0cyB3aXRoIGFsbG91dCBtb2RlIC0gcmVjb25maWd1cmUhIikpKQoKICAgICAgICAg ICAgICA7OyB2YWxpZCByZXN1bHQgYW5kIGp1c3QgdmVyaWZ5aW5nIG9yIG5vbi1zeW1tZXRyaWM6 CiAgICAgICAgICAgICAgKChvciB2ZXJpZnlpbmcgKG5vdCAoZXF1YWwga2V5LXR5cGUgJ3N5bW1l dHJpYykpKQogICAgICAgICAgICAgICAoaWYgKG9yIHZlcmlmeWluZyBkZWNyeXB0KQogICAgICAg ICAgICAgICAgICAgKHBnZy1hZGQtcGFzc3BocmFzZS10by1jYWNoZSB0YXJnZXQtY2FjaGUtaWQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFz ZSB0KSkKICAgICAgICAgICAgICAgcmVzdWx0LXRleHQpCgogICAgICAgICAgICAgIDs7IHZhbGlk IHJlc3VsdCBhbmQgcmVndWxhciBzeW1tZXRyaWMgLSAicmVnaXN0ZXIiCiAgICAgICAgICAgICAg OzsgcGFzc3BocmFzZSB3aXRoIG1uZW1vbmljIGFpZHMvY2FjaGUuCiAgICAgICAgICAgICAgKHQK ICAgICAgICAgICAgICAgKHNldC1idWZmZXIgYWxsb3V0LWJ1ZmZlcikKICAgICAgICAgICAgICAg KGlmIHBhc3NwaHJhc2UKICAgICAgICAgICAgICAgICAgIChwZ2ctYWRkLXBhc3NwaHJhc2UtdG8t Y2FjaGUgdGFyZ2V0LWNhY2hlLWlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBhc3NwaHJhc2UgdCkpCiAgICAgICAgICAgICAgIChhbGxvdXQtdXBkYXRl LXBhc3NwaHJhc2UtbW5lbW9uaWMtYWlkcyBmb3Ita2V5IHBhc3NwaHJhc2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1idWZmZXIp CiAgICAgICAgICAgICAgIHJlc3VsdC10ZXh0KQogICAgICAgICAgICAgICkKICAgICAgICApCiAg ICApCiAgKQo7OztfICA+IGFsbG91dC1vYnRhaW4tcGFzc3BocmFzZSAoZm9yLWtleSBjYWNoZS1p ZCBwcm9tcHQtaWQga2V5LXR5cGUKOzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYWxsb3V0LWJ1ZmZlciByZXRyaWVkIGZldGNoLXBhc3MpCihkZWZ1biBhbGxvdXQtb2J0 YWluLXBhc3NwaHJhc2UgKGZvci1rZXkgY2FjaGUtaWQgcHJvbXB0LWlkIGtleS10eXBlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWJ1ZmZlciByZXRyaWVk IGZldGNoLXBhc3MpCiAgIk9idGFpbiBwYXNzcGhyYXNlIGZvciBhIGtleSBmcm9tIHRoZSBjYWNo ZSBvciBlbHNlIGZyb20gdGhlIHVzZXIuCgpXaGVuIG9idGFpbmluZyBmcm9tIHRoZSB1c2VyLCBz eW1tZXRyaWMtY2lwaGVyIHBhc3NwaHJhc2VzIGFyZSB2ZXJpZmllZAphZ2FpbnN0IGVpdGhlciwg aWYgYXZhaWxhYmxlIGFuZCBlbmFibGVkLCBhIHJhbmRvbSBzdHJpbmcgdGhhdCB3YXMKZW5jcnlw dGVkIGFnYWluc3QgdGhlIHBhc3NwaHJhc2UsIG9yIGVsc2UgYWdhaW5zdCByZXBlYXRlZCBlbnRy eSBieSB0aGUKdXNlciBmb3IgY29ycm9ib3JhdGlvbi4KCkZPUi1LRVkgaXMgdGhlIGtleSBmb3Ig d2hpY2ggdGhlIHBhc3NwaHJhc2UgaXMgYmVpbmcgb2J0YWluZWQuCgpDQUNIRS1JRCBpcyB0aGUg Y2FjaGUgaWQgb2YgdGhlIGtleSBmb3IgdGhlIHBhc3NwaHJhc2UuCgpQUk9NUFQtSUQgaXMgdGhl IGlkIGZvciB1c2Ugd2hlbiBwcm9tcHRpbmcgdGhlIHVzZXIuCgpLRVktVFlQRSBpcyBlaXRoZXIg J3N5bW1ldHJpYyBvciAna2V5cGFpci4KCkFMTE9VVC1CVUZGRVIgaXMgdGhlIGJ1ZmZlciBjb250 YWluaW5nIHRoZSBlbnRyeSBiZWluZyBlbi9kZWNyeXB0ZWQuCgpSRVRSSUVEIGlzIHRoZSBudW1i ZXIgb2YgdGhpcyBhdHRlbXB0IHRvIG9idGFpbiB0aGlzIHBhc3NwaHJhc2UuCgpGRVRDSC1QQVNT IGNhdXNlcyB0aGUgcGFzc3BocmFzZSB0byBiZSBzb2xpY2l0ZWQgZnJvbSB0aGUgdXNlciwgcmVn YXJkbGVzcwpvZiB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgY2FjaGVkIGNvcHkuIgoKICAoaWYgKG5v dCAoZXF1YWwga2V5LXR5cGUgJ3N5bW1ldHJpYykpCiAgICAgIDs7IGRvIHJlZ3VsYXIgcGFzc3Bo cmFzZSByZWFkIG9uIG5vbi1zeW1tZXRyaWMgcGFzc3BocmFzZToKICAgICAgKHBnZy1yZWFkLXBh c3NwaHJhc2UgKGZvcm1hdCAiJXMgcGFzc3BocmFzZSVzOiAiCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHVwY2FzZSAoZm9ybWF0ICIlcyIgKG9yIHBnZy1zY2hlbWUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdn LWRlZmF1bHQtc2NoZW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJHUEciKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaWYgcHJvbXB0LWlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGZvcm1hdCAiIGZvciAlcyIgcHJvbXB0LWlkKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLWlk IHQpCgogICAgOzsgU3ltbWV0cmljIGhlcmVvbjoKCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg KHNldC1idWZmZXIgYWxsb3V0LWJ1ZmZlcikKICAgICAgKGxldCogKChoaW50IChpZiAoYW5kIChu b3QgKHN0cmluZz0gYWxsb3V0LXBhc3NwaHJhc2UtaGludC1zdHJpbmcgIiIpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9yIChlcXVhbCBhbGxvdXQtcGFzc3BocmFzZS1oaW50LWhhbmRs aW5nICdhbHdheXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZXF1YWwg YWxsb3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICduZWVkZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXRyaWVkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiIFslc10i IGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAiIikp CiAgICAgICAgICAgICAocmV0cnktbWVzc2FnZSAoaWYgcmV0cmllZCAoZm9ybWF0ICIgKCVzIHJl dHJ5KSIgcmV0cmllZCkgIiIpKQogICAgICAgICAgICAgKHByb21wdC1zYW5zLWhpbnQgKGZvcm1h dCAiJyVzJyBzeW1tZXRyaWMgcGFzc3BocmFzZSVzOiAiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByb21wdC1pZCByZXRyeS1tZXNzYWdlKSkKICAgICAgICAgICAgIChm dWxsLXByb21wdCAoZm9ybWF0ICInJXMnIHN5bW1ldHJpYyBwYXNzcGhyYXNlJXMlczogIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0LWlkIGhpbnQgcmV0cnktbWVzc2Fn ZSkpCiAgICAgICAgICAgICAocHJvbXB0IGZ1bGwtcHJvbXB0KQogICAgICAgICAgICAgKHZlcmlm aWVyLXN0cmluZyAoYWxsb3V0LWdldC1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVyaWZpZXIpKQoK ICAgICAgICAgICAgIChjYWNoZWQgKGFuZCAobm90IGZldGNoLXBhc3MpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBnZy1yZWFkLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSBjYWNoZS1pZCB0KSkp CiAgICAgICAgICAgICAoZ290LXBhc3MgKG9yIGNhY2hlZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAocGdnLXJlYWQtcGFzc3BocmFzZSBmdWxsLXByb21wdCBjYWNoZS1pZCB0KSkpCiAgICAg ICAgICAgICBjb25maXJtYXRpb24pCgogICAgICAgIChpZiAobm90IGdvdC1wYXNzKQogICAgICAg ICAgICBuaWwKCiAgICAgICAgICA7OyBEdXBsaWNhdGUgb3VyIGhhbmRsZSBvbiB0aGUgcGFzc3Bo cmFzZSBzbyBpdCdzIG5vdCBjbG9iYmVyZWQgYnkKICAgICAgICAgIDs7IGRlYWN0aXZhdGUtcGFz c3dkIG1lbW9yeSBjbGVhcmluZzoKICAgICAgICAgIChzZXRxIGdvdC1wYXNzIChjb3B5LXNlcXVl bmNlIGdvdC1wYXNzKSkKCiAgICAgICAgICAoY29uZCAodmVyaWZpZXItc3RyaW5nCiAgICAgICAg ICAgICAgICAgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgKGlmIChh bGxvdXQtZW5jcnlwdC1zdHJpbmcgdmVyaWZpZXItc3RyaW5nICdkZWNyeXB0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtYnVmZmVyICdzeW1tZXRy aWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvci1rZXkg bmlsIDAgMCAndmVyaWZ5aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29weS1zZXF1ZW5jZSBnb3QtcGFzcykpCiAgICAgICAgICAgICAgICAgICAgICAg KHNldHEgY29uZmlybWF0aW9uIChmb3JtYXQgIiVzIiBnb3QtcGFzcykpKSkKCiAgICAgICAgICAg ICAgICAgKGlmIChhbmQgKG5vdCBjb25maXJtYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKGlmICh5ZXMtb3Itbm8tcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNh dCAiUGFzc3BocmFzZSBkaWZmZXJzIGZyb20gZXN0YWJsaXNoZWQiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgLSB1c2UgbmV3IG9uZSBpbnN0ZWFkPyAiKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgZGVhY3RpdmF0ZSBwYXNzd29yZCBmb3Igc3Vic2Vx dWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBjb25maXJtYXRpb246CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwZ2ctcmVtb3ZlLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSBjYWNoZS1pZCB0KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHByb21wdCBwcm9tcHQtc2Fucy1oaW50 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHQpKQogICAgICAgICAgICAgICAgICAgICAocHJvZ24gKHBnZy1yZW1vdmUtcGFz c3BocmFzZS1mcm9tLWNhY2hlIGNhY2hlLWlkIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXJyb3IgIldyb25nIHBhc3NwaHJhc2UuIikpKSkKICAgICAgICAgICAgICAgIDs7IE5vIHZl cmlmaWVyIHN0cmluZyAtIGZvcmNlIGNvbmZpcm1hdGlvbiBieSByZXBldGl0aW9uIG9mCiAgICAg ICAgICAgICAgICA7OyAobmV3KSBwYXNzcGhyYXNlOgogICAgICAgICAgICAgICAgKChvciBmZXRj aC1wYXNzIChub3QgY2FjaGVkKSkKICAgICAgICAgICAgICAgICAocGdnLXJlbW92ZS1wYXNzcGhy YXNlLWZyb20tY2FjaGUgY2FjaGUtaWQgdCkpKSkKICAgICAgICA7OyBjb25maXJtYXRpb24gdnMg bmV3IGlucHV0IC0gZG9pbmcgcGdnLXJlYWQtcGFzc3BocmFzZSB3aWxsIGRvIHRoZQogICAgICAg IDs7IHJpZ2h0IHRoaW5nLCBpbiBlaXRoZXIgY2FzZToKICAgICAgICAoaWYgKG5vdCBjb25maXJt YXRpb24pCiAgICAgICAgICAgIChzZXRxIGNvbmZpcm1hdGlvbgogICAgICAgICAgICAgICAgICAo cGdnLXJlYWQtcGFzc3BocmFzZSAoY29uY2F0IHByb21wdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgLi4uIGNvbmZpcm0gc3BlbGxpbmc6ICIpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLWlkIHQpKSkKICAgICAgICAo cHJvZzEKICAgICAgICAgICAgKGlmIChlcXVhbCBnb3QtcGFzcyBjb25maXJtYXRpb24pCiAgICAg ICAgICAgICAgICBjb25maXJtYXRpb24KICAgICAgICAgICAgICAoaWYgKHllcy1vci1uby1wIChj b25jYXQgInNwZWxsaW5nIG9mIG9yaWdpbmFsIGFuZCIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiBjb25maXJtYXRpb24gZGlmZmVyIC0gcmV0cnk/ICIpKQogICAgICAg ICAgICAgICAgICAocHJvZ24gKHNldHEgcmV0cmllZCAoaWYgcmV0cmllZCAoMSsgcmV0cmllZCkg MSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAocGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZyb20t Y2FjaGUgY2FjaGUtaWQgdCkKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHJlY3Vyc2UgdG8g dGhpcyByb3V0aW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgKHBnZy1yZWFkLXBhc3NwaHJh c2UgcHJvbXB0LXNhbnMtaGludCBjYWNoZS1pZCB0KSkKICAgICAgICAgICAgICAgIChwZ2ctcmVt b3ZlLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSBjYWNoZS1pZCB0KQogICAgICAgICAgICAgICAgKGVy cm9yICJDb25maXJtYXRpb24gZmFpbGVkLiIpKSkpKSkpKQo7OztfICA+IGFsbG91dC1lbmNyeXB0 ZWQtdG9waWMtcCAoKQooZGVmdW4gYWxsb3V0LWVuY3J5cHRlZC10b3BpYy1wICgpCiAgIlRydWUg aWYgdGhlIGN1cnJlbnQgdG9waWMgaXMgZW5jcnlwdGFibGUgYW5kIGVuY3J5cHRlZC4iCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXggdCkKICAgIChhbmQgKHN0cmlu Zz0gKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAoMS0gKHBvaW50KSkgKHBvaW50KSkK ICAgICAgICAgICAgICAgICAgYWxsb3V0LXRvcGljLWVuY3J5cHRpb24tYnVsbGV0KQogICAgICAg ICAobG9va2luZy1hdCAiXFwqIikpCiAgICApCiAgKQo7OztfICA+IGFsbG91dC1lbmNyeXB0ZWQt a2V5LWluZm8gKHRleHQpCjs7IFhYWCBncGctc3BlY2lmaWMsIGFsYXMKKGRlZnVuIGFsbG91dC1l bmNyeXB0ZWQta2V5LWluZm8gKHRleHQpCiAgIlJldHVybiBhIHBhaXIgb2YgdGhlIGtleSB0eXBl IGFuZCBpZGVudGl0eSBvZiBhIHJlY2lwaWVudCdzIHNlY3JldCBrZXkuCgpUaGUga2V5IHR5cGUg aXMgb25lIG9mICdzeW1tZXRyaWMgb3IgJ2tleXBhaXIuCgppZiAna2V5cGFpciwgYW5kIHNvbWUg b2YgdGhlIHVzZXIncyBzZWNyZXQga2V5cyBhcmUgYW1vbmcgdGhvc2UgZm9yIHdoaWNoCnRoZSBt ZXNzYWdlIHdhcyBlbmNvZGVkLCByZXR1cm4gdGhlIGlkZW50aXR5IG9mIHRoZSBmaXJzdC4gIG90 aGVyd2lzZSwKcmV0dXJuIG5pbCBmb3IgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSBwYWlyLgoKQW4g ZXJyb3IgaXMgcmFpc2VkIGlmIHRoZSB0ZXh0IGlzIG5vdCBlbmNyeXB0ZWQuIgogIChyZXF1aXJl ICdwZ2ctcGFyc2UpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAod2l0aC10ZW1wLWJ1ZmZlcgogICAg ICAoaW5zZXJ0IHRleHQpCiAgICAgIChsZXQqICgocGFyc2VkLWFybW9yIChwZ2ctcGFyc2UtYXJt b3ItcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkKICAgICAgICAgICAgICh0eXBlIChp ZiAocGdnLWdwZy1zeW1tZXRyaWMta2V5LXAgcGFyc2VkLWFybW9yKQogICAgICAgICAgICAgICAg ICAgICAgICdzeW1tZXRyaWMKICAgICAgICAgICAgICAgICAgICAgJ2tleXBhaXIpKQogICAgICAg ICAgICAgc2VjcmV0LWtleXMgZmlyc3Qtc2VjcmV0LWtleSBmb3Ita2V5LW93bmVyKQogICAgICAg IChpZiAoZXF1YWwgdHlwZSAna2V5cGFpcikKICAgICAgICAgICAgKHNldHEgc2VjcmV0LWtleXMg KHBnZy1ncGctbG9va3VwLWFsbC1zZWNyZXQta2V5cykKICAgICAgICAgICAgICAgICAgZmlyc3Qt c2VjcmV0LWtleSAocGdnLWdwZy1zZWxlY3QtbWF0Y2hpbmcta2V5IHBhcnNlZC1hcm1vcgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VjcmV0LWtleXMpCiAgICAgICAgICAgICAgICAgIGZvci1rZXktb3duZXIgKGFuZCBmaXJz dC1zZWNyZXQta2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGdnLWdw Zy1sb29rdXAta2V5LW93bmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zmlyc3Qtc2VjcmV0LWtleSkpKSkKICAgICAgICAobGlzdCB0eXBlIChwZ2ctZ3BnLWtleS1pZC1m cm9tLWtleS1vd25lciBmb3Ita2V5LW93bmVyKSkKICAgICAgICApCiAgICAgICkKICAgICkKICAp Cjs7O18gID4gYWxsb3V0LWNyZWF0ZS1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVyaWZpZXIgKHBh c3NwaHJhc2UpCihkZWZ1biBhbGxvdXQtY3JlYXRlLWVuY3J5cHRpb24tcGFzc3BocmFzZS12ZXJp ZmllciAocGFzc3BocmFzZSkKICAiRW5jcnlwdCByYW5kb20gbWVzc2FnZSBmb3IgbGF0ZXIgdmFs aWRhdGlvbiBvZiBzeW1tZXRyaWMga2V5J3MgcGFzc3BocmFzZS4iCiAgOzsgdXNlIDIwIHJhbmRv bSBhc2NpaSBjaGFyYWN0ZXJzLCBhY3Jvc3MgdGhlIGVudGlyZSBhc2NpaSByYW5nZS4KICAocmFu ZG9tIHQpCiAgKGxldCAoKHNwZXcgKG1ha2Utc3RyaW5nIDIwID9cMCkpKQogICAgKGRvdGltZXMg KGkgKGxlbmd0aCBzcGV3KSkKICAgICAgKGFzZXQgc3BldyBpICgxKyAocmFuZG9tIDI1NCkpKSkK ICAgIChhbGxvdXQtZW5jcnlwdC1zdHJpbmcgc3BldyBuaWwgKGN1cnJlbnQtYnVmZmVyKSAnc3lt bWV0cmljCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwgMCAwIHBhc3NwaHJhc2Up KQogICkKOzs7XyAgPiBhbGxvdXQtdXBkYXRlLXBhc3NwaHJhc2UtbW5lbW9uaWMtYWlkcyAoZm9y LWtleSBwYXNzcGhyYXNlCjs7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3V0bGluZS1idWZmZXIpCihkZWZ1biBhbGxvdXQtdXBkYXRlLXBhc3Nw aHJhc2UtbW5lbW9uaWMtYWlkcyAoZm9yLWtleSBwYXNzcGhyYXNlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lLWJ1ZmZlcikKICAi VXBkYXRlIHBhc3NwaHJhc2UgdmVyaWZpZXIgYW5kIGhpbnQgc3RyaW5ncyBpZiBuZWNlc3Nhcnku CgpTZWUgYGFsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZycgYW5kIGBhbGxvdXQtcGFz c3BocmFzZS1oaW50LXN0cmluZycKc2V0dGluZ3MuCgpQQVNTUEhSQVNFIGlzIHRoZSBwYXNzcGhy YXNlIGJlaW5nIG1uZW1vbmljaXplZAoKT1VUTElORS1CVUZGRVIgaXMgdGhlIGJ1ZmZlciBvZiB0 aGUgb3V0bGluZSBiZWluZyBhZGp1c3RlZC4KClRoZXNlIGFyZSB1c2VkIHRvIGhlbHAgdGhlIHVz ZXIga2VlcCB0cmFjayBvZiB0aGUgcGFzc3BocmFzZSB0aGV5IHVzZSBmb3IKc3ltbWV0cmljIGVu Y3J5cHRpb24gaW4gdGhlIGZpbGUuCgpCZWhhdmlvciBpcyBnb3Zlcm5lZCBieSBgYWxsb3V0LXBh c3NwaHJhc2UtdmVyaWZpZXItaGFuZGxpbmcnLApgYWxsb3V0LXBhc3NwaHJhc2UtaGludC1oYW5k bGluZycsIGFuZCBhbHNvLCBjb250cm9sbGluZyB3aGV0aGVyIHRoZSB2YWx1ZXMKYXJlIHByZXNl cnZlZCBvbiBFbWFjcyBsb2NhbCBmaWxlIHZhcmlhYmxlcywKYGFsbG91dC1lbmFibGUtZmlsZS12 YXJpYWJsZS1hZGp1c3RtZW50Jy4iCgogIDs7IElmIHBhc3NwaHJhc2UgZG9lc24ndCBhZ3JlZSB3 aXRoIGN1cnJlbnQgdmVyaWZpZXI6CiAgOzsgICAtIGFkanVzdCB0aGUgdmVyaWZpZXIKICA7OyAg IC0gaWYgcGFzc3BocmFzZSBoaW50IGhhbmRsaW5nIGlzIGVuYWJsZWQsIGFkanVzdCB0aGUgcGFz c3BocmFzZSBoaW50CiAgOzsgICAtIGlmIGZpbGUgdmFyIHNldHRpbmdzIGFyZSBlbmFibGVkLCBh ZGp1c3QgdGhlIGZpbGUgdmFycwoKICAobGV0KiAoKG5ldy12ZXJpZmllci1uZWVkZWQgKG5vdCAo YWxsb3V0LXZlcmlmeS1wYXNzcGhyYXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvci1rZXkgcGFzc3BocmFzZSBvdXRsaW5lLWJ1ZmZlcikpKQogICAgICAgICAobmV3LXZl cmlmaWVyLXN0cmluZwogICAgICAgICAgKGlmIG5ldy12ZXJpZmllci1uZWVkZWQKICAgICAgICAg ICAgICA7OyBDb2xsYXBzZSB0byBhIHNpbmdsZSBsaW5lIGFuZCBlbmNsb3NlIGluIHN0cmluZyBx dW90ZXM6CiAgICAgICAgICAgICAgKHN1YnN0LWNoYXItaW4tc3RyaW5nCiAgICAgICAgICAgICAg ID9cbiA/XEMtYSAoYWxsb3V0LWNyZWF0ZS1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVyaWZpZXIK ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKSkpKQogICAgICAgICBuZXctaGlu dCkKICAgICh3aGVuIG5ldy12ZXJpZmllci1zdHJpbmcKICAgICAgOzsgZG8gdGhlIHBhc3NwaHJh c2UgaGludCBmaXJzdCwgc2luY2UgaXQncyBpbnRlcmFjdGl2ZQogICAgICAod2hlbiAoYW5kIGFs bG91dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcKICAgICAgICAgICAgICAgICAobm90IChlcXVh bCBhbGxvdXQtcGFzc3BocmFzZS1oaW50LWhhbmRsaW5nICdkaXNhYmxlZCkpKQogICAgICAgIChz ZXRxIG5ldy1oaW50CiAgICAgICAgICAgICAgKHJlYWQtZnJvbS1taW5pYnVmZmVyICJQYXNzcGhy YXNlIGhpbnQgdG8gam9nIHlvdXIgbWVtb3J5OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nKSkKICAgICAgICAod2hlbiAo bm90IChzdHJpbmc9IG5ldy1oaW50IGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nKSkKICAg ICAgICAgIChzZXRxIGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nIG5ldy1oaW50KQogICAg ICAgICAgKGFsbG91dC1hZGp1c3QtZmlsZS12YXJpYWJsZSAiYWxsb3V0LXBhc3NwaHJhc2UtaGlu dC1zdHJpbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1w YXNzcGhyYXNlLWhpbnQtc3RyaW5nKSkpCiAgICAgICh3aGVuIGFsbG91dC1wYXNzcGhyYXNlLXZl cmlmaWVyLWhhbmRsaW5nCiAgICAgICAgKHNldHEgYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXIt c3RyaW5nIG5ldy12ZXJpZmllci1zdHJpbmcpCiAgICAgICAgKGFsbG91dC1hZGp1c3QtZmlsZS12 YXJpYWJsZSAiYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5n KSkKICAgICAgKQogICAgKQogICkKOzs7XyAgPiBhbGxvdXQtZ2V0LWVuY3J5cHRpb24tcGFzc3Bo cmFzZS12ZXJpZmllciAoKQooZGVmdW4gYWxsb3V0LWdldC1lbmNyeXB0aW9uLXBhc3NwaHJhc2Ut dmVyaWZpZXIgKCkKICAiUmV0dXJuIHRleHQgb2YgdGhlIGVuY3J5cHQgcGFzc3BocmFzZSB2ZXJp ZmllciwgdW5tYXNzYWdlZCwgb3IgbmlsIGlmIG5vbmUuCgpEZXJpdmVkIGZyb20gdmFsdWUgb2Yg YGFsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZycuIgoKICAobGV0ICgodmVyaWZpZXIt c3RyaW5nIChhbmQgKGJvdW5kcCAnYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1z dHJpbmcpKSkKICAgIChpZiB2ZXJpZmllci1zdHJpbmcKICAgICAgICA7OyBSZXR1cm4gaXQgdW5j b2xsYXBzZWQKICAgICAgICAoc3Vic3QtY2hhci1pbi1zdHJpbmcgP1xDLWEgP1xuIHZlcmlmaWVy LXN0cmluZykpCiAgICkKICApCjs7O18gID4gYWxsb3V0LXZlcmlmeS1wYXNzcGhyYXNlIChrZXkg cGFzc3BocmFzZSBhbGxvdXQtYnVmZmVyKQooZGVmdW4gYWxsb3V0LXZlcmlmeS1wYXNzcGhyYXNl IChrZXkgcGFzc3BocmFzZSBhbGxvdXQtYnVmZmVyKQogICJUcnVlIGlmIHBhc3NwaHJhc2Ugc3Vj Y2Vzc2Z1bGx5IGRlY3J5cHRzIHZlcmlmaWVyLCBuaWwgb3RoZXJ3aXNlLgoKXCJPdGhlcndpc2Vc IiBpbmNsdWRlcyBhYnNlbmNlIG9mIHBhc3NwaHJhc2UgdmVyaWZpZXIuIgogIChzYXZlLWV4Y3Vy c2lvbgogICAgKHNldC1idWZmZXIgYWxsb3V0LWJ1ZmZlcikKICAgIChhbmQgKGJvdW5kcCAnYWxs b3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nKQogICAgICAgICBhbGxvdXQtcGFzc3BocmFz ZS12ZXJpZmllci1zdHJpbmcKICAgICAgICAgKGFsbG91dC1lbmNyeXB0LXN0cmluZyAoYWxsb3V0 LWdldC1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVyaWZpZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdkZWNyeXB0IGFsbG91dC1idWZmZXIgJ3N5bW1ldHJpYwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrZXkgbmlsIDAgMCAndmVyaWZ5aW5nIHBhc3NwaHJhc2Up CiAgICAgICAgIHQpKSkKOzs7XyAgPiBhbGxvdXQtbmV4dC10b3BpYy1wZW5kaW5nLWVuY3J5cHRp b24gKCZvcHRpb25hbCBleGNlcHQtbWFyaykKKGRlZnVuIGFsbG91dC1uZXh0LXRvcGljLXBlbmRp bmctZW5jcnlwdGlvbiAoJm9wdGlvbmFsIGV4Y2VwdC1tYXJrKQogICJSZXR1cm4gdGhlIHBvaW50 IG9mIHRoZSBuZXh0IHRvcGljIHBlbmRpbmcgZW5jcnlwdGlvbiwgb3IgbmlsIGlmIG5vbmUuCgpF WENFUFQtTUFSSyBpZGVudGlmaWVzIGEgcG9pbnQgd2hvc2UgY29udGFpbmluZyB0b3BpY3Mgc2hv dWxkIGJlIGV4Y2x1ZGVkCmZyb20gZW5jcnlwdGlvbi4gIFRoaXMgc3VwcG9ydHMgJ2V4Y2VwdC1j dXJyZW50IG1vZGUgb2YKYGFsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzJy4KClN1 Y2ggYSB0b3BpYyBoYXMgdGhlIGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1bGxldCB3aXRob3V0 IGFuCmltbWVkaWF0ZWx5IGZvbGxvd2luZyAnKicgdGhhdCB3b3VsZCBtYXJrIHRoZSB0b3BpYyBh cyBiZWluZyBlbmNyeXB0ZWQuICBJdAptdXN0IGFsc28gaGF2ZSBjb250ZW50LiIKICAobGV0IChk b25lIGdvdCBjb250ZW50LWJlZykKICAgICh3aGlsZSAobm90IGRvbmUpCgogICAgICAoaWYgKG5v dCAocmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAgICAgIChmb3JtYXQgIlxcKFxcYFxcfFxu XFwpJXMgKiVzW14qXSIKICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBhbGxv dXQtaGVhZGVyLXByZWZpeCkKICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBh bGxvdXQtdG9waWMtZW5jcnlwdGlvbi1idWxsZXQpKQogICAgICAgICAgICAgICAgbmlsIHQpKQog ICAgICAgICAgKHNldHEgZ290IG5pbAogICAgICAgICAgICAgICAgZG9uZSB0KQogICAgICAgIChn b3RvLWNoYXIgKHNldHEgZ290IChtYXRjaC1iZWdpbm5pbmcgMCkpKQogICAgICAgIChpZiAobG9v a2luZy1hdCAiXG4iKQogICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpKQogICAgICAgIChzZXRx IGdvdCAocG9pbnQpKSkKCiAgICAgIChjb25kICgobm90IGdvdCkKICAgICAgICAgICAgIChzZXRx IGRvbmUgdCkpCgogICAgICAgICAgICAoKG5vdCAoc2VhcmNoLWZvcndhcmQgIlxuIikpCiAgICAg ICAgICAgICAoc2V0cSBnb3QgbmlsCiAgICAgICAgICAgICAgICAgICBkb25lIHQpKQoKICAgICAg ICAgICAgKChlb2JwKQogICAgICAgICAgICAgKHNldHEgZ290IG5pbAogICAgICAgICAgICAgICAg ICAgZG9uZSB0KSkKCiAgICAgICAgICAgICh0CiAgICAgICAgICAgICAoc2V0cSBjb250ZW50LWJl ZyAocG9pbnQpKQogICAgICAgICAgICAgKGJhY2t3YXJkLWNoYXIgMSkKICAgICAgICAgICAgIChh bGxvdXQtZW5kLW9mLXN1YnRyZWUpCiAgICAgICAgICAgICAoaWYgKG9yICg8PSAocG9pbnQpIGNv bnRlbnQtYmVnKQogICAgICAgICAgICAgICAgICAgICAoYW5kIGV4Y2VwdC1tYXJrCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKDw9IGNvbnRlbnQtYmVnIGV4Y2VwdC1tYXJrKQogICAgICAgICAg ICAgICAgICAgICAgICAgICg+PSAocG9pbnQpIGV4Y2VwdC1tYXJrKSkpCiAgICAgICAgICAgICAg ICAgOzsgQ29udGludWUgbG9va2luZwogICAgICAgICAgICAgICAgIChzZXRxIGdvdCBuaWwpCiAg ICAgICAgICAgICAgIDs7IEdvdCBpdCEKICAgICAgICAgICAgICAgKHNldHEgZG9uZSB0KSkpCiAg ICAgICAgICAgICkKICAgICAgKQogICAgKGlmIGdvdAogICAgICAgIChnb3RvLWNoYXIgZ290KSkK ICAgICkKICApCjs7O18gID4gYWxsb3V0LWVuY3J5cHQtZGVjcnlwdGVkICgmb3B0aW9uYWwgZXhj ZXB0LW1hcmspCihkZWZ1biBhbGxvdXQtZW5jcnlwdC1kZWNyeXB0ZWQgKCZvcHRpb25hbCBleGNl cHQtbWFyaykKICAiRW5jcnlwdCB0b3BpY3MgcGVuZGluZyBlbmNyeXB0aW9uIGV4Y2VwdCB0aG9z ZSBjb250YWluaW5nIGV4ZW1wdGlvbiBwb2ludC4KCkVYQ0VQVC1NQVJLIGlkZW50aWZpZXMgYSBw b2ludCB3aG9zZSBjb250YWluaW5nIHRvcGljcyBzaG91bGQgYmUgZXhjbHVkZWQKZnJvbSBlbmNy eXB0aW9uLiAgVGhpcyBzdXBwb3J0cyAnZXhjZXB0LWN1cnJlbnQgbW9kZSBvZgpgYWxsb3V0LWVu Y3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMnLgoKSWYgYSB0b3BpYyB0aGF0IGlzIGN1cnJlbnRs eSBiZWluZyBlZGl0ZWQgd2FzIGVuY3J5cHRlZCwgd2UgcmV0dXJuIGEgbGlzdApjb250YWluaW5n IHRoZSBsb2NhdGlvbiBvZiB0aGUgdG9waWMgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3Vyc29y IGp1c3QKYmVmb3JlIHRoZSB0b3BpYyB3YXMgZW5jcnlwdGVkLiAgVGhpcyBjYW4gYmUgdXNlZCwg ZWcsIHRvIGRlY3J5cHQgdGhlIHRvcGljCmFuZCBleGFjdGx5IHJlc2l0dWF0ZSB0aGUgY3Vyc29y IGlmIHRoaXMgaXMgYmVpbmcgZG9uZSBhcyBwYXJ0IG9mIGEgZmlsZQpzYXZlLiAgU2VlIGBhbGxv dXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcycgZm9yIG1vcmUgaW5mby4iCgogIChpbnRl cmFjdGl2ZSAicCIpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0KiAoKGN1cnJlbnQtbWFyayAo cG9pbnQtbWFya2VyKSkKICAgICAgICAgICAoY3VycmVudC1tYXJrLXBvc2l0aW9uIChtYXJrZXIt cG9zaXRpb24gY3VycmVudC1tYXJrKSkKICAgICAgICAgICB3YXMtbW9kaWZpZWQKICAgICAgICAg ICBiby1zdWJ0cmVlCiAgICAgICAgICAgZWRpdGluZy10b3BpYyBlZGl0aW5nLXBvaW50KQogICAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAod2hpbGUgKGFsbG91dC1uZXh0LXRvcGlj LXBlbmRpbmctZW5jcnlwdGlvbiBleGNlcHQtbWFyaykKICAgICAgICAoc2V0cSB3YXMtbW9kaWZp ZWQgKGJ1ZmZlci1tb2RpZmllZC1wKSkKICAgICAgICAod2hlbiAoc2F2ZS1leGN1cnNpb24KICAg ICAgICAgICAgICAgIChhbmQgKGJvdW5kcCAnYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24t c2F2ZXMpCiAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9u LXNhdmVzCiAgICAgICAgICAgICAgICAgICAgIChzZXRxIGJvLXN1YnRyZWUgKHJlLXNlYXJjaC1m b3J3YXJkICIkIikpCiAgICAgICAgICAgICAgICAgICAgIChub3QgKGFsbG91dC1oaWRkZW4tcCkp CiAgICAgICAgICAgICAgICAgICAgICg+PSBjdXJyZW50LW1hcmsgKHBvaW50KSkKICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlKQogICAgICAgICAgICAg ICAgICAgICAoPD0gY3VycmVudC1tYXJrIChwb2ludCkpKSkKICAgICAgICAgICAgKHNldHEgZWRp dGluZy10b3BpYyAocG9pbnQpCiAgICAgICAgICAgICAgICAgIDs7IHdlIGhhZCB0byB3YWl0IGZv ciB0aGlzICd0aWwgbm93IHNvIHByaW9yIHRvcGljcyBhcmUKICAgICAgICAgICAgICAgICAgOzsg ZW5jcnlwdGVkLCBhbnkgcmVsZXZhbnQgdGV4dCBzaGlmdHMgYXJlIGluIHBsYWNlOgogICAgICAg ICAgICAgICAgICBlZGl0aW5nLXBvaW50ICgtIGN1cnJlbnQtbWFyay1wb3NpdGlvbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3VudC10cmFpbGluZy13aGl0ZXNwYWNlLXJl Z2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiby1zdWJ0cmVlIGN1cnJl bnQtbWFyay1wb3NpdGlvbikpKSkKICAgICAgICAoYWxsb3V0LXRvZ2dsZS1zdWJ0cmVlLWVuY3J5 cHRpb24pCiAgICAgICAgKGlmIChub3Qgd2FzLW1vZGlmaWVkKQogICAgICAgICAgICAoc2V0LWJ1 ZmZlci1tb2RpZmllZC1wIG5pbCkpCiAgICAgICAgKQogICAgICAoaWYgKG5vdCB3YXMtbW9kaWZp ZWQpCiAgICAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkKICAgICAgKGlmIGVkaXRp bmctdG9waWMgKGxpc3QgZWRpdGluZy10b3BpYyBlZGl0aW5nLXBvaW50KSkKICAgICAgKQogICAg KQogICkKCjs7O18gIzkgbWlzY2VsbGFuZW91cwo7OztfICA6IE1vZGU6Cjs7O18gICA+IG91dGxp bmVpZnktc3RpY2t5ICgpCjs7IG91dGxpbmlmeS1zdGlja3kgaXMgY29ycmVjdCBzcGVsbGluZzsg cHJvdmlkZSB0aGlzIGFsaWFzIGZvciBzdGlja2xlcnM6Cjs7OyMjI2F1dG9sb2FkCihkZWZhbGlh cyAnb3V0bGluaWZ5LXN0aWNreSAnb3V0bGluZWlmeS1zdGlja3kpCjs7OyMjI2F1dG9sb2FkCihk ZWZ1biBvdXRsaW5laWZ5LXN0aWNreSAoJm9wdGlvbmFsIGFyZykKICAiQWN0aXZhdGUgb3V0bGlu ZSBtb2RlIGFuZCBlc3RhYmxpc2ggZmlsZSB2YXIgc28gaXQgaXMgc3RhcnRlZCBzdWJzZXF1ZW50 bHkuCgpTZWUgZG9jLXN0cmluZyBmb3IgYGFsbG91dC1sYXlvdXQnIGFuZCBgYWxsb3V0LWluaXQn IGZvciBkZXRhaWxzIG9uCnNldHVwIGZvciBhdXRvLXN0YXJ0dXAuIgoKICAoaW50ZXJhY3RpdmUg IlAiKQoKICAoYWxsb3V0LW1vZGUgdCkKCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290by1jaGFy IChwb2ludC1taW4pKQogICAgKGlmIChhbGxvdXQtZ290by1wcmVmaXgpCgl0CiAgICAgIChhbGxv dXQtb3Blbi10b3BpYyAyKQogICAgICAoaW5zZXJ0IChjb25jYXQgIkR1bW15IG91dGxpbmUgdG9w aWMgaGVhZGVyIC0gc2VlIgogICAgICAgICAgICAgICAgICAgICAgImBhbGxvdXQtbW9kZScgZG9j c3RyaW5nOiBgXkhtJy4iKSkKICAgICAgKGFsbG91dC1hZGp1c3QtZmlsZS12YXJpYWJsZQogICAg ICAgImFsbG91dC1sYXlvdXQiIChvciBhbGxvdXQtbGF5b3V0ICcoLTEgOiAwKSkpKSkpCjs7O18g ICA+IGFsbG91dC1maWxlLXZhcnMtc2VjdGlvbi1kYXRhICgpCihkZWZ1biBhbGxvdXQtZmlsZS12 YXJzLXNlY3Rpb24tZGF0YSAoKQogICJSZXR1cm4gZGF0YSBpZGVudGlmeWluZyB0aGUgZmlsZS12 YXJzIHNlY3Rpb24sIG9yIG5pbCBpZiBub25lLgoKUmV0dXJucyBsaXN0IGAoYmVnaW5uaW5nLXBv aW50IHByZWZpeC1zdHJpbmcgc3VmZml4LXN0cmluZyknLiIKICA7OyBtaW5pbWFsbHkgZ2xlYW5l ZCBmcm9tIGVtYWNzIDIxLjQgZmlsZXMuZWwgaGFjay1sb2NhbC12YXJpYWJsZXMgZnVuY3Rpb24u CiAgKGxldCAoYmVnIHByZWZpeCBzdWZmaXgpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGdv dG8tY2hhciAocG9pbnQtbWF4KSkKICAgICAgKHNlYXJjaC1iYWNrd2FyZCAiXG5cXkwiIChtYXgg KC0gKHBvaW50LW1heCkgMzAwMCkgKHBvaW50LW1pbikpICdtb3ZlKQogICAgICAoaWYgKGxldCAo KGNhc2UtZm9sZC1zZWFyY2ggdCkpCgkgICAgKG5vdCAoc2VhcmNoLWZvcndhcmQgIkxvY2FsIFZh cmlhYmxlczoiIG5pbCB0KSkpCiAgICAgICAgICBuaWwKICAgICAgICAoc2V0cSBiZWcgKC0gKHBv aW50KSAxNikpCiAgICAgICAgKHNldHEgc3VmZml4IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkKICAgICAgICAgICAgICAgICAgICAg IChwcm9nbiAoaWYgKHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgLTEpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwb2ludCkpKSkKICAgICAgICAoc2V0cSBwcmVmaXggKGJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcwogICAgICAgICAgICAgICAgICAgICAgKHByb2duIChpZiAoc2VhcmNoLWJh Y2t3YXJkICJcbiIgbmlsIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3 YXJkLWNoYXIgMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkKICAgICAg ICAgICAgICAgICAgICAgIGJlZykpCiAgICAgICAgKGxpc3QgYmVnIHByZWZpeCBzdWZmaXgpKQog ICAgICApCiAgICApCiAgKQo7OztfICAgPiBhbGxvdXQtYWRqdXN0LWZpbGUtdmFyaWFibGUgKHZh cm5hbWUgdmFsdWUpCihkZWZ1biBhbGxvdXQtYWRqdXN0LWZpbGUtdmFyaWFibGUgKHZhcm5hbWUg dmFsdWUpCiAgIkFkanVzdCB0aGUgc2V0dGluZyBvZiBhbiBlbWFjcyBmaWxlIHZhcmlhYmxlIG5h bWVkIFZBUk5BTUUgdG8gVkFMVUUuCgpUaGlzIGFjdGl2aXR5IGlzIGluaGliaXRlZCBpZiBlaXRo ZXIgYGVuYWJsZS1sb2NhbC12YXJpYWJsZXMnCmBhbGxvdXQtZW5hYmxlLWZpbGUtdmFyaWFibGUt YWRqdXN0bWVudCcgYXJlIG5pbC4KCldoZW4gZW5hYmxlZCwgYW4gZW50cnkgZm9yIHRoZSB2YXJp YWJsZSBpcyBjcmVhdGVkIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQsCm9yIGNoYW5nZWQgaWYgZXN0 YWJsaXNoZWQgd2l0aCBhIGRpZmZlcmVudCB2YWx1ZS4gIFRoZSBzZWN0aW9uIGZvciB0aGUgZmls ZQp2YXJpYWJsZXMsIGl0c2VsZiwgaXMgY3JlYXRlZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LiAg V2hlbiBjcmVhdGVkLCB0aGUKc2VjdGlvbiBsaW5lcyBcKGluY2x1ZGluZyB0aGUgc2VjdGlvbiBs aW5lKSBleGlzdCBhcyBzZWNvbmQtbGV2ZWwgdG9waWNzIGluCmEgdG9wLWxldmVsIHRvcGljIGF0 IHRoZSBlbmQgb2YgdGhlIGZpbGUuCgplbmFibGUtbG9jYWwtdmFyaWFibGVzIG11c3QgYmUgdHJ1 ZSBmb3IgYW55IG9mIHRoaXMgdG8gaGFwcGVuLiIKICAoaWYgKG5vdCAoYW5kIGVuYWJsZS1sb2Nh bC12YXJpYWJsZXMKICAgICAgICAgICAgICAgIGFsbG91dC1lbmFibGUtZmlsZS12YXJpYWJsZS1h ZGp1c3RtZW50KSkKICAgICAgbmlsCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGxldCAoKGlu aGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKICAgICAgICAgICAgKHNlY3Rpb24tZGF0YSAoYWxs b3V0LWZpbGUtdmFycy1zZWN0aW9uLWRhdGEpKQogICAgICAgICAgICBiZWcgcHJlZml4IHN1ZmZp eCkKICAgICAgICAoaWYgc2VjdGlvbi1kYXRhCiAgICAgICAgICAgIChzZXRxIGJlZyAoY2FyIHNl Y3Rpb24tZGF0YSkKICAgICAgICAgICAgICAgICAgcHJlZml4IChjYWRyIHNlY3Rpb24tZGF0YSkK ICAgICAgICAgICAgICAgICAgc3VmZml4IChjYXIgKGNkZHIgc2VjdGlvbi1kYXRhKSkpCiAgICAg ICAgICA7OyBjcmVhdGUgdGhlIHNlY3Rpb24KICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1h eCkpCiAgICAgICAgICAob3Blbi1saW5lIDEpCiAgICAgICAgICAoYWxsb3V0LW9wZW4tdG9waWMg MCkKICAgICAgICAgIChlbmQtb2YtbGluZSkKICAgICAgICAgIChpbnNlcnQgIkxvY2FsIGVtYWNz IHZhcnMuXG4iKQogICAgICAgICAgKGFsbG91dC1vcGVuLXRvcGljIDEpCiAgICAgICAgICAoc2V0 cSBiZWcgKHBvaW50KQogICAgICAgICAgICAgICAgc3VmZml4ICIiCiAgICAgICAgICAgICAgICBw cmVmaXggKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAocHJvZ24KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJlZ2lubmluZy1v Zi1saW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYmVnKSkKICAgICAgICAgIChnb3RvLWNoYXIgYmVnKQogICAgICAgICAg KGluc2VydCAiTG9jYWwgdmFyaWFibGVzOlxuIikKICAgICAgICAgIChhbGxvdXQtb3Blbi10b3Bp YyAwKQogICAgICAgICAgKGluc2VydCAiRW5kOlxuIikKICAgICAgICAgICkKICAgICAgICA7OyBs b29rIGZvciBleGlzdGluZyBlbnRyeSBvciBjcmVhdGUgb25lLCBsZWF2aW5nIHBvaW50IGZvciBp bnNlcnRpb24KICAgICAgICA7OyBvZiBuZXcgdmFsdWU6CiAgICAgICAgKGdvdG8tY2hhciBiZWcp CiAgICAgICAgKGFsbG91dC1zaG93LXRvLW9mZnNob290KQogICAgICAgIChpZiAoc2VhcmNoLWZv cndhcmQgKGNvbmNhdCAiXG4iIHByZWZpeCB2YXJuYW1lICI6IikgbmlsIHQpCiAgICAgICAgICAg IChsZXQqICgodmFsdWUtYmVnIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAobGluZS1lbmQg KHByb2duIChpZiAoc2VhcmNoLWZvcndhcmQgIlxuIiBuaWwgdCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgLTEpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocG9pbnQpKSkKICAgICAgICAgICAgICAgICAgICh2YWx1ZS1l bmQgKC0gbGluZS1lbmQgKGxlbmd0aCBzdWZmaXgpKSkpCiAgICAgICAgICAgICAgKGlmICg+IHZh bHVlLWVuZCB2YWx1ZS1iZWcpCiAgICAgICAgICAgICAgICAgIChkZWxldGUtcmVnaW9uIHZhbHVl LWJlZyB2YWx1ZS1lbmQpKSkKICAgICAgICAgIChlbmQtb2YtbGluZSkKICAgICAgICAgIChvcGVu LWxpbmUgMSkKICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkKICAgICAgICAgIChpbnNlcnQgKGNv bmNhdCBwcmVmaXggdmFybmFtZSAiOiIpKSkKICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIiAlUyVz IiB2YWx1ZSBzdWZmaXgpKQogICAgICAgICkKICAgICAgKQogICAgKQogICkKOzs7XyAgID4gYWxs b3V0LWdldC1jb25maWd2YXItdmFsdWVzICh2YXJuYW1lKQooZGVmdW4gYWxsb3V0LWdldC1jb25m aWd2YXItdmFsdWVzIChjb25maWd2YXItbmFtZSkKICAiUmV0dXJuIGEgbGlzdCBvZiB2YWx1ZXMg b2YgdGhlIHN5bWJvbHMgaW4gbGlzdCBib3VuZCB0byBDT05GSUdWQVItTkFNRS4KClRoZSB1c2Vy IGlzIHByb21wdGVkIGZvciByZW1vdmFsIG9mIHN5bWJvbHMgdGhhdCBhcmUgdW5ib3VuZCwgYW5k IHRoZXkKb3RoZXJ3aXNlIGFyZSBpZ25vcmVkLgoKQ09ORklHVkFSLU5BTUUgc2hvdWxkIGJlIHRo ZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLApub3QgaXRzIHZhbHVlLiIKCiAg KGxldCAoKGNvbmZpZ3Zhci12YWx1ZSAoc3ltYm9sLXZhbHVlIGNvbmZpZ3Zhci1uYW1lKSkKICAg ICAgICBnb3QpCiAgICAoZG9saXN0IChzeW0gY29uZmlndmFyLXZhbHVlKQogICAgICAoaWYgKG5v dCAoYm91bmRwIHN5bSkpCiAgICAgICAgICAoaWYgKHllcy1vci1uby1wIChmb3JtYXQgIiVzIGVu dHJ5IGAlcycgaXMgdW5ib3VuZCAtIHJlbW92ZSBpdD8gIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbmZpZ3Zhci1uYW1lIHN5bSkpCiAgICAgICAgICAgICAgKGRlbHEgc3lt IChzeW1ib2wtdmFsdWUgY29uZmlndmFyLW5hbWUpKSkKICAgICAgICAocHVzaCAoc3ltYm9sLXZh bHVlIHN5bSkgZ290KSkpCiAgICAocmV2ZXJzZSBnb3QpKSkKOzs7XyAgOiBUb3BpY3M6Cjs7O18g ICA+IGFsbG91dC1tYXJrLXRvcGljICgpCihkZWZ1biBhbGxvdXQtbWFyay10b3BpYyAoKQogICJQ dXQgdGhlIHJlZ2lvbiBhcm91bmQgdG9waWMgY3VycmVudGx5IGNvbnRhaW5pbmcgcG9pbnQuIgog IChpbnRlcmFjdGl2ZSkKICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAg IChiZWdpbm5pbmctb2YtbGluZSkpCiAgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2Vk KQogIChwdXNoLW1hcmsgKHBvaW50KSkKICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50LXN1YnRyZWUp CiAgKGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrKSkKOzs7XyAgOiBVSToKOzs7XyAgID4gc29saWNp dC1jaGFyLWluLXN0cmluZyAocHJvbXB0IHN0cmluZyAmb3B0aW9uYWwgZG8tZGVmYXVsdGluZykK KGRlZnVuIHNvbGljaXQtY2hhci1pbi1zdHJpbmcgKHByb21wdCBzdHJpbmcgJm9wdGlvbmFsIGRv LWRlZmF1bHRpbmcpCiAgIlNvbGljaXQgKHdpdGggZmlyc3QgYXJnIFBST01QVCkgY2hvaWNlIG9m IGEgY2hhcmFjdGVyIGZyb20gc3RyaW5nIFNUUklORy4KCk9wdGlvbmFsIGFyZyBETy1ERUZBVUxU SU5HIGluZGljYXRlcyB0byBhY2NlcHQgZW1wdHkgaW5wdXQgKENSKS4iCgogIChsZXQgKChuZXct cHJvbXB0IHByb21wdCkKICAgICAgICBnb3QpCgogICAgKHdoaWxlIChub3QgZ290KQogICAgICAo bWVzc2FnZSAiJXMiIG5ldy1wcm9tcHQpCgogICAgICA7OyBXZSBkbyBvdXIgb3duIHJlYWRpbmcg aGVyZSwgc28gd2UgY2FuIGNpcmN1bXZlbnQsIGVnLCBzcGVjaWFsCiAgICAgIDs7IHRyZWF0bWVu dCBmb3IgYD8nIGNoYXJhY3Rlci4gIChPdWdodGEgdXNlIG1pbmlidWZmZXIga2V5bWFwIGluc3Rl YWQuKQogICAgICAoc2V0cSBnb3QKICAgICAgICAgICAgKGNoYXItdG8tc3RyaW5nIChsZXQgKChj dXJzb3ItaW4tZWNoby1hcmVhIG5pbCkpIChyZWFkLWNoYXIpKSkpCgogICAgICAoc2V0cSBnb3QK CSAgICAoY29uZCAoKHN0cmluZy1tYXRjaCAocmVnZXhwLXF1b3RlIGdvdCkgc3RyaW5nKSBnb3Qp CgkJICAoKGFuZCBkby1kZWZhdWx0aW5nIChzdHJpbmc9IGdvdCAiXHIiKSkKCQkgICA7OyBSZXR1 cm4gZW1wdHkgc3RyaW5nIHRvIGRlZmF1bHQ6CgkJICAgIiIpCgkJICAoKHN0cmluZz0gZ290ICJc Qy1nIikgKHNpZ25hbCAncXVpdCBuaWwpKQoJCSAgKHQKCQkgICAoc2V0cSBuZXctcHJvbXB0IChj b25jYXQgcHJvbXB0CgkJCQkJICAgIGdvdAoJCQkJCSAgICAiIC4uLnBpY2sgZnJvbTogIgoJCQkJ CSAgICBzdHJpbmcKCQkJCQkgICAgIiIpKQoJCSAgIG5pbCkpKSkKICAgICAgOzsgZ290IHNvbWV0 aGluZyBvdXQgb2YgbG9vcCAtIHJldHVybiBpdDoKICAgICAgZ290KQogICkKOzs7XyAgOiBTdHJp bmdzOgo7OztfICAgPiByZWdleHAtc2Fucy1lc2NhcGVzIChzdHJpbmcpCihkZWZ1biByZWdleHAt c2Fucy1lc2NhcGVzIChyZWdleHAgJm9wdGlvbmFsIHN1Y2Nlc3NpdmUtYmFja3NsYXNoZXMpCiAg IlJldHVybiBhIGNvcHkgb2YgUkVHRVhQIHdpdGggYWxsIGNoYXJhY3RlciBlc2NhcGVzIHN0cmlw cGVkIG91dC4KClJlcHJlc2VudGF0aW9ucyBvZiBhY3R1YWwgYmFja3NsYXNoZXMgLSAnXFxcXFxc XFwnIC0gYXJlIGxlZnQgYXMgYQpzaW5nbGUgYmFja3NsYXNoLgoKT3B0aW9uYWwgYXJnIFNVQ0NF U1NJVkUtQkFDS1NMQVNIRVMgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciByZWN1cnNpb24uIgoKICAo aWYgKHN0cmluZz0gcmVnZXhwICIiKQogICAgICAiIgogICAgOzsgU2V0IHN1Y2Nlc3NpdmUtYmFj a3NsYXNoZXMgdG8gbnVtYmVyIGlmIGN1cnJlbnQgY2hhciBpcwogICAgOzsgYmFja3NsYXNoLCBv ciBlbHNlIHRvIG5pbDoKICAgIChzZXRxIHN1Y2Nlc3NpdmUtYmFja3NsYXNoZXMKCSAgKGlmICg9 IChhcmVmIHJlZ2V4cCAwKSA/XFwpCgkgICAgICAoaWYgc3VjY2Vzc2l2ZS1iYWNrc2xhc2hlcyAo MSsgc3VjY2Vzc2l2ZS1iYWNrc2xhc2hlcykgMSkKCSAgICBuaWwpKQogICAgKGlmIChvciAobm90 IHN1Y2Nlc3NpdmUtYmFja3NsYXNoZXMpICg9IDIgc3VjY2Vzc2l2ZS1iYWNrc2xhc2hlcykpCgk7 OyBJbmNsdWRlIGZpcnN0IGNoYXI6CgkoY29uY2F0IChzdWJzdHJpbmcgcmVnZXhwIDAgMSkKCQko cmVnZXhwLXNhbnMtZXNjYXBlcyAoc3Vic3RyaW5nIHJlZ2V4cCAxKSkpCiAgICAgIDs7IEV4Y2x1 ZGUgZmlyc3QgY2hhciwgYnV0IG1haW50YWluIGNvdW50OgogICAgICAocmVnZXhwLXNhbnMtZXNj YXBlcyAoc3Vic3RyaW5nIHJlZ2V4cCAxKSBzdWNjZXNzaXZlLWJhY2tzbGFzaGVzKSkpKQo7Oztf ICAgPiBjb3VudC10cmFpbGluZy13aGl0ZXNwYWNlLXJlZ2lvbiAoYmVnIGVuZCkKKGRlZnVuIGNv dW50LXRyYWlsaW5nLXdoaXRlc3BhY2UtcmVnaW9uIChiZWcgZW5kKQogICJSZXR1cm4gbnVtYmVy IG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hhcnMgYmV0d2VlbiBCRUcgYW5kIEVORC4KCklmIEJF RyBpcyBiaWdnZXIgdGhhbiBFTkQgd2UgcmV0dXJuIDAuIgogIChpZiAoPiBiZWcgZW5kKQogICAg ICAwCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGdvdG8tY2hhciBiZWcpCiAgICAgIChsZXQg KChjb3VudCAwKSkKICAgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJbIAldWyAJXSok IiBlbmQgdCkKICAgICAgICAgIChnb3RvLWNoYXIgKDErIChtYXRjaC1iZWdpbm5pbmcgMikpKQog ICAgICAgICAgKHNldHEgY291bnQgKDErIGNvdW50KSkpCiAgICAgICAgY291bnQpKSkpCjs7O18g ICA+IGFsbG91dC1mb3JtYXQtcXVvdGUgKHN0cmluZykKKGRlZnVuIGFsbG91dC1mb3JtYXQtcXVv dGUgKHN0cmluZykKICAiUmV0dXJuIGEgY29weSBvZiBzdHJpbmcgd2l0aCBhbGwgXCIlXCIgY2hh cmFjdGVycyBkb3VibGVkLiIKICAoYXBwbHkgJ2NvbmNhdAogICAgICAgICAobWFwY2FyIChsYW1i ZGEgKGNoYXIpIChpZiAoPSBjaGFyID8lKSAiJSUiIChjaGFyLXRvLXN0cmluZyBjaGFyKSkpCiAg ICAgICAgICAgICAgICAgc3RyaW5nKSkpCjs7O18gIDogbGlzdHMKOzs7XyAgID4gYWxsb3V0LWZs YXR0ZW4gKGxpc3QpCihkZWZ1biBhbGxvdXQtZmxhdHRlbiAobGlzdCkKICAiUmV0dXJuIGEgbGlz dCBvZiBhbGwgYXRvbXMgaW4gbGlzdC4iCiAgOzsgY2xhc3NpYy4KICAoY29uZCAoKG51bGwgbGlz dCkgbmlsKQogICAgICAgICgoYXRvbSAoY2FyIGxpc3QpKSAoY29ucyAoY2FyIGxpc3QpIChhbGxv dXQtZmxhdHRlbiAoY2RyIGxpc3QpKSkpCiAgICAgICAgKHQgKGFwcGVuZCAoYWxsb3V0LWZsYXR0 ZW4gKGNhciBsaXN0KSkgKGFsbG91dC1mbGF0dGVuIChjZHIgbGlzdCkpKSkpKQo7OztfICA6IENv bXBhdGFiaWxpdHk6Cjs7O18gICA+IGFsbG91dC1tYXJrLW1hcmtlciB0byBhY2NvbW1vZGF0ZSBk aXZlcmdlbnQgZW1hY3NlbjoKKGRlZnVuIGFsbG91dC1tYXJrLW1hcmtlciAoJm9wdGlvbmFsIGZv cmNlIGJ1ZmZlcikKICAiQWNjb21tb2RhdGUgdGhlIGRpZmZlcmVudCBzaWduYXR1cmUgZm9yIGBt YXJrLW1hcmtlcicgYWNyb3NzIEVtYWNzZW4uCgpYRW1hY3MgdGFrZXMgdHdvIG9wdGlvbmFsIGFy Z3MsIHdoaWxlIG1haW5saW5lIEdOVSBFbWFjcyBkb2VzIG5vdCwKc28gcGFzcyB0aGVtIGFsb25n IHdoZW4gYXBwcm9wcmlhdGUuIgogIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykKICAgICAgKGFwcGx5 ICdtYXJrLW1hcmtlciBmb3JjZSBidWZmZXIpCiAgICAobWFyay1tYXJrZXIpKSkKOzs7XyAgID4g c3Vic3QtY2hhci1pbi1zdHJpbmcgaWYgbmVjZXNzYXJ5CihpZiAobm90IChmYm91bmRwICdzdWJz dC1jaGFyLWluLXN0cmluZykpCiAgICAoZGVmdW4gc3Vic3QtY2hhci1pbi1zdHJpbmcgKGZyb21j aGFyIHRvY2hhciBzdHJpbmcgJm9wdGlvbmFsIGlucGxhY2UpCiAgICAgICJSZXBsYWNlIEZST01D SEFSIHdpdGggVE9DSEFSIGluIFNUUklORyBlYWNoIHRpbWUgaXQgb2NjdXJzLgpVbmxlc3Mgb3B0 aW9uYWwgYXJndW1lbnQgSU5QTEFDRSBpcyBub24tbmlsLCByZXR1cm4gYSBuZXcgc3RyaW5nLiIK ICAgICAgKGxldCAoKGkgKGxlbmd0aCBzdHJpbmcpKQogICAgICAgICAgICAobmV3c3RyIChpZiBp bnBsYWNlIHN0cmluZyAoY29weS1zZXF1ZW5jZSBzdHJpbmcpKSkpCiAgICAgICAgKHdoaWxlICg+ IGkgMCkKICAgICAgICAgIChzZXRxIGkgKDEtIGkpKQogICAgICAgICAgKGlmIChlcSAoYXJlZiBu ZXdzdHIgaSkgZnJvbWNoYXIpCiAgICAgICAgICAgICAgKGFzZXQgbmV3c3RyIGkgdG9jaGFyKSkp CiAgICAgICAgbmV3c3RyKSkpCjs7O18gICA+IHdob2xlbnVtcCBpZiBuZWNlc3NhcnkKKGlmIChu b3QgKGZib3VuZHAgJ3dob2xlbnVtcCkpCiAgICAoZGVmYWxpYXMgJ3dob2xlbnVtcCAnbmF0bnVt cCkpCjs7O18gICA+IHJlbW92ZS1vdmVybGF5cyBpZiBuZWNlc3NhcnkKKGlmIChub3QgKGZib3Vu ZHAgJ3JlbW92ZS1vdmVybGF5cykpCiAgICAoZGVmdW4gcmVtb3ZlLW92ZXJsYXlzICgmb3B0aW9u YWwgYmVnIGVuZCBuYW1lIHZhbCkKICAgICAgIkNsZWFyIEJFRyBhbmQgRU5EIG9mIG92ZXJsYXlz IHdob3NlIHByb3BlcnR5IE5BTUUgaGFzIHZhbHVlIFZBTC4KT3ZlcmxheXMgbWlnaHQgYmUgbW92 ZWQgYW5kL29yIHNwbGl0LgpCRUcgYW5kIEVORCBkZWZhdWx0IHJlc3BlY3RpdmVseSB0byB0aGUg YmVnaW5uaW5nIGFuZCBlbmQgb2YgYnVmZmVyLiIKICAgICAgKHVubGVzcyBiZWcgKHNldHEgYmVn IChwb2ludC1taW4pKSkKICAgICAgKHVubGVzcyBlbmQgKHNldHEgZW5kIChwb2ludC1tYXgpKSkK ICAgICAgKGlmICg8IGVuZCBiZWcpCiAgICAgICAgICAoc2V0cSBiZWcgKHByb2cxIGVuZCAoc2V0 cSBlbmQgYmVnKSkpKQogICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAoZG9saXN0IChvIChv dmVybGF5cy1pbiBiZWcgZW5kKSkKICAgICAgICAgICh3aGVuIChlcSAob3ZlcmxheS1nZXQgbyBu YW1lKSB2YWwpCiAgICAgICAgICAgIDs7IEVpdGhlciBwdXNoIHRoaXMgb3ZlcmxheSBvdXRzaWRl IGJlZy4uLmVuZAogICAgICAgICAgICA7OyBvciBzcGxpdCBpdCB0byBleGNsdWRlIGJlZy4uLmVu ZAogICAgICAgICAgICA7OyBvciBkZWxldGUgaXQgZW50aXJlbHkgKGlmIGl0IGlzIGNvbnRhaW5l ZCBpbiBiZWcuLi5lbmQpLgogICAgICAgICAgICAoaWYgKDwgKG92ZXJsYXktc3RhcnQgbykgYmVn KQogICAgICAgICAgICAgICAgKGlmICg+IChvdmVybGF5LWVuZCBvKSBlbmQpCiAgICAgICAgICAg ICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgICAobW92ZS1vdmVybGF5IChjb3B5 LW92ZXJsYXkgbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG92ZXJsYXkt c3RhcnQgbykgYmVnKQogICAgICAgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAo b3ZlcmxheS1lbmQgbykpKQogICAgICAgICAgICAgICAgICAobW92ZS1vdmVybGF5IG8gKG92ZXJs YXktc3RhcnQgbykgYmVnKSkKICAgICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVu ZCkKICAgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykp CiAgICAgICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkgbykpKSkpKSkKICApCjs7O18gICA+IGNv cHktb3ZlcmxheSBpZiBuZWNlc3NhcnkgLSB4ZW1hY3MgfiAyMS40CihpZiAobm90IChmYm91bmRw ICdjb3B5LW92ZXJsYXkpKQogICAgKGRlZnVuIGNvcHktb3ZlcmxheSAobykKICAgICAgIlJldHVy biBhIGNvcHkgb2Ygb3ZlcmxheSBPLiIKICAgICAgKGxldCAoKG8xIChtYWtlLW92ZXJsYXkgKG92 ZXJsYXktc3RhcnQgbykgKG92ZXJsYXktZW5kIG8pCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IEZJWE1FOiB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGZpbmQgdGhlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDs7IGluc2VydGlvbi10eXBlIG9mIHRoZSB0d28gbWFya2Vycy4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG92ZXJsYXktYnVmZmVyIG8pKSkKICAgICAg ICAgICAgKHByb3BzIChvdmVybGF5LXByb3BlcnRpZXMgbykpKQogICAgICAgICh3aGlsZSBwcm9w cwogICAgICAgICAgKG92ZXJsYXktcHV0IG8xIChwb3AgcHJvcHMpIChwb3AgcHJvcHMpKSkKICAg ICAgICBvMSkpKQo7OztfICAgPiBhZGQtdG8taW52aXNpYmlsaXR5LXNwZWMgaWYgbmVjZXNzYXJ5 IC0geGVtYWNzIH4gMjEuNAooaWYgKG5vdCAoZmJvdW5kcCAnYWRkLXRvLWludmlzaWJpbGl0eS1z cGVjKSkKICAgIChkZWZ1biBhZGQtdG8taW52aXNpYmlsaXR5LXNwZWMgKGVsZW1lbnQpCiAgICAg ICJBZGQgRUxFTUVOVCB0byBgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJy4KU2VlIGRvY3VtZW50 YXRpb24gZm9yIGBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMnIGZvciB0aGUga2luZCBvZiBlbGVt ZW50cwp0aGF0IGNhbiBiZSBhZGRlZC4iCiAgICAgIChpZiAoZXEgYnVmZmVyLWludmlzaWJpbGl0 eS1zcGVjIHQpCiAgICAgICAgICAoc2V0cSBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMgKGxpc3Qg dCkpKQogICAgICAoc2V0cSBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMKICAgICAgICAgICAgKGNv bnMgZWxlbWVudCBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMpKSkpCjs7O18gICA+IHJlbW92ZS1m cm9tLWludmlzaWJpbGl0eS1zcGVjIGlmIG5lY2Vzc2FyeSAtIHhlbWFjcyB+IDIxLjQKKGlmIChu b3QgKGZib3VuZHAgJ3JlbW92ZS1mcm9tLWludmlzaWJpbGl0eS1zcGVjKSkKICAgIChkZWZ1biBy ZW1vdmUtZnJvbS1pbnZpc2liaWxpdHktc3BlYyAoZWxlbWVudCkKICAgICAgIlJlbW92ZSBFTEVN RU5UIGZyb20gYGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYycuIgogICAgICAoaWYgKGNvbnNwIGJ1 ZmZlci1pbnZpc2liaWxpdHktc3BlYykKICAgICAgICAgIChzZXRxIGJ1ZmZlci1pbnZpc2liaWxp dHktc3BlYyAoZGVsZXRlIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYykpKSkpCjs7O18gICA+IG1v dmUtYmVnaW5uaW5nLW9mLWxpbmUgaWYgbmVjZXNzYXJ5IC0gb2xkZXIgZW1hY3MsIHhlbWFjcwoo aWYgKG5vdCAoZmJvdW5kcCAnbW92ZS1iZWdpbm5pbmctb2YtbGluZSkpCiAgICAoZGVmdW4gbW92 ZS1iZWdpbm5pbmctb2YtbGluZSAoYXJnKQogICAgICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcg b2YgY3VycmVudCBsaW5lIGFzIGRpc3BsYXllZC4KXChUaGlzIGRpc3JlZ2FyZHMgaW52aXNpYmxl IG5ld2xpbmVzIHN1Y2ggYXMgdGhvc2UKd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHRleHQgdGhhdCBh biBpbWFnZSByZXN0cyBvbi4pCgpXaXRoIGFyZ3VtZW50IEFSRyBub3QgbmlsIG9yIDEsIG1vdmUg Zm9yd2FyZCBBUkcgLSAxIGxpbmVzIGZpcnN0LgpJZiBwb2ludCByZWFjaGVzIHRoZSBiZWdpbm5p bmcgb3IgZW5kIG9mIGJ1ZmZlciwgaXQgc3RvcHMgdGhlcmUuClRvIGlnbm9yZSBpbnRhbmdpYmls aXR5LCBiaW5kIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycgdG8gdC4iCiAgICAgIChpbnRl cmFjdGl2ZSAicCIpCiAgICAgIChvciBhcmcgKHNldHEgYXJnIDEpKQogICAgICAoaWYgKC89IGFy ZyAxKQogICAgICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbCAobGluZS1tb3ZlICgxLSBhcmcpKSAo ZXJyb3IgbmlsKSkpCgogICAgICA7OyBNb3ZlIHRvIGJlZ2lubmluZy1vZi1saW5lLCBpZ25vcmlu ZyBmaWVsZHMgYW5kIGludmlzaWJsZXMuCiAgICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJeXG4i KQogICAgICAod2hpbGUgKGFuZCAobm90IChib2JwKSkgKGxpbmUtbW92ZS1pbnZpc2libGUtcCAo MS0gKHBvaW50KSkpKQogICAgICAgIChnb3RvLWNoYXIgKGlmIChmZWF0dXJlcCAneGVtYWNzKQog ICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91cy1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50KSkK ICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzLWNoYXItcHJvcGVydHktY2hhbmdlIChwb2lu dCkpKSkKICAgICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiXlxuIikpCiAgICAgICh2ZXJ0aWNh bC1tb3Rpb24gMCkpCikKOzs7XyAgID4gbW92ZS1lbmQtb2YtbGluZSBpZiBuZWNlc3NhcnkgLSBv bGRlciBlbWFjcywgeGVtYWNzCihpZiAobm90IChmYm91bmRwICdtb3ZlLWVuZC1vZi1saW5lKSkK ICAgIChkZWZ1biBtb3ZlLWVuZC1vZi1saW5lIChhcmcpCiAgICAgICJNb3ZlIHBvaW50IHRvIGVu ZCBvZiBjdXJyZW50IGxpbmUgYXMgZGlzcGxheWVkLgpcKFRoaXMgZGlzcmVnYXJkcyBpbnZpc2li bGUgbmV3bGluZXMgc3VjaCBhcyB0aG9zZQp3aGljaCBhcmUgcGFydCBvZiB0aGUgdGV4dCB0aGF0 IGFuIGltYWdlIHJlc3RzIG9uLikKCldpdGggYXJndW1lbnQgQVJHIG5vdCBuaWwgb3IgMSwgbW92 ZSBmb3J3YXJkIEFSRyAtIDEgbGluZXMgZmlyc3QuCklmIHBvaW50IHJlYWNoZXMgdGhlIGJlZ2lu bmluZyBvciBlbmQgb2YgYnVmZmVyLCBpdCBzdG9wcyB0aGVyZS4KVG8gaWdub3JlIGludGFuZ2li aWxpdHksIGJpbmQgYGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzJyB0byB0LiIKICAgICAgKGlu dGVyYWN0aXZlICJwIikKICAgICAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCiAgICAgIChsZXQgKGRv bmUpCiAgICAgICAgKHdoaWxlIChub3QgZG9uZSkKICAgICAgICAgIChsZXQgKChuZXdwb3MKICAg ICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgIChsZXQgKChn b2FsLWNvbHVtbiAwKSkKICAgICAgICAgICAgICAgICAgICAgKGFuZCAoY29uZGl0aW9uLWNhc2Ug bmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAobGluZS1tb3ZlIGFyZykgdCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciBuaWwpKQogICAgICAgICAgICAgICAg ICAgICAgICAgIChub3QgKGJvYnApKQogICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoaWxlIChhbmQgKG5vdCAoYm9icCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZS1tb3ZlLWludmlzaWJsZS1w ICgxLSAocG9pbnQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91cy1jaGFyLXByb3BlcnR5LWNo YW5nZSAocG9pbnQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja3dhcmQtY2hh ciAxKSkpCiAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpKSkpCiAgICAgICAgICAgIChnb3Rv LWNoYXIgbmV3cG9zKQogICAgICAgICAgICAoaWYgKGFuZCAoPiAocG9pbnQpIG5ld3BvcykKICAg ICAgICAgICAgICAgICAgICAgKGVxIChwcmVjZWRpbmctY2hhcikgP1xuKSkKICAgICAgICAgICAg ICAgIChiYWNrd2FyZC1jaGFyIDEpCiAgICAgICAgICAgICAgKGlmIChhbmQgKD4gKHBvaW50KSBu ZXdwb3MpIChub3QgKGVvYnApKQogICAgICAgICAgICAgICAgICAgICAgIChub3QgKGVxIChmb2xs b3dpbmctY2hhcikgP1xuKSkpCiAgICAgICAgICAgICAgICAgIDs7IElmIHdlIHNraXBwZWQgc29t ZXRoaW5nIGludGFuZ2libGUKICAgICAgICAgICAgICAgICAgOzsgYW5kIG5vdyB3ZSdyZSBub3Qg cmVhbGx5IGF0IGVvbCwKICAgICAgICAgICAgICAgICAgOzsga2VlcCBnb2luZy4KICAgICAgICAg ICAgICAgICAgKHNldHEgYXJnIDEpCiAgICAgICAgICAgICAgICAoc2V0cSBkb25lIHQpKSkpKSkp CiAgKQo7OztfICAgPiBsaW5lLW1vdmUtaW52aXNpYmxlLXAgaWYgbmVjZXNzYXJ5CihpZiAobm90 IChmYm91bmRwICdsaW5lLW1vdmUtaW52aXNpYmxlLXApKQogICAgKGRlZnVuIGxpbmUtbW92ZS1p bnZpc2libGUtcCAocG9zKQogICAgICAiUmV0dXJuIG5vbi1uaWwgaWYgdGhlIGNoYXJhY3RlciBh ZnRlciBQT1MgaXMgY3VycmVudGx5IGludmlzaWJsZS4iCiAgICAgIChsZXQgKChwcm9wCiAgICAg ICAgICAgICAoZ2V0LWNoYXItcHJvcGVydHkgcG9zICdpbnZpc2libGUpKSkKICAgICAgICAoaWYg KGVxIGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYyB0KQogICAgICAgICAgICBwcm9wCiAgICAgICAg ICAob3IgKG1lbXEgcHJvcCBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMpCiAgICAgICAgICAgICAg KGFzc3EgcHJvcCBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMpKSkpKSkKCjs7O18gIzEwIFVuZmlu aXNoZWQKOzs7XyAgPiBhbGxvdXQtYnVsbGV0LWlzZWFyY2ggKCZvcHRpb25hbCBidWxsZXQpCihk ZWZ1biBhbGxvdXQtYnVsbGV0LWlzZWFyY2ggKCZvcHRpb25hbCBidWxsZXQpCiAgIklzZWFyY2gg XChyZWdleHApIGZvciB0b3BpYyB3aXRoIGJ1bGxldCBCVUxMRVQuIgogIChpbnRlcmFjdGl2ZSkK ICAoaWYgKG5vdCBidWxsZXQpCiAgICAgIChzZXRxIGJ1bGxldCAoc29saWNpdC1jaGFyLWluLXN0 cmluZwoJCSAgICAiSVNlYXJjaCBmb3IgdG9waWMgd2l0aCBidWxsZXQ6ICIKCQkgICAgKHJlZ2V4 cC1zYW5zLWVzY2FwZXMgYWxsb3V0LWJ1bGxldHMtc3RyaW5nKSkpKQoKICAobGV0ICgoaXNlYXJj aC1yZWdleHAgdCkKCShpc2VhcmNoLXN0cmluZyAoY29uY2F0ICJeIgoJCQkJYWxsb3V0LWhlYWRl ci1wcmVmaXgKCQkJCSJbIFx0XSoiCgkJCQlidWxsZXQpKSkKICAgIChpc2VhcmNoLXJlcGVhdCAn Zm9yd2FyZCkKICAgIChpc2VhcmNoLW1vZGUgdCkpKQoKOzs7XyAjMTEgVW5pdCB0ZXN0cyAtIHRo aXMgc2hvdWxkIGJlIGxhc3QgaXRlbSBiZWZvcmUgIlByb3ZpZGUiCjs7O18gID4gYWxsb3V0LXJ1 bi11bml0LXRlc3RzICgpCihkZWZ1biBhbGxvdXQtcnVuLXVuaXQtdGVzdHMgKCkKICAiUnVuIHRo ZSB2YXJpb3VzIGFsbG91dCB1bml0IHRlc3RzLiIKICAobWVzc2FnZSAiUnVubmluZyBhbGxvdXQg dGVzdHMuLi4iKQogIChhbGxvdXQtdGVzdC1yZXN1bXB0aW9ucykKICAobWVzc2FnZSAiUnVubmlu ZyBhbGxvdXQgdGVzdHMuLi4gIERvbmUuIikKICAoc2l0LWZvciAuNSkpCjs7O18gIDogdGVzdCBy ZXN1bXB0aW9uczoKOzs7XyAgID4gYWxsb3V0LXRlc3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgKG5h bWUpCihkZWZ1biBhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJsZSAobmFtZSkKICAiQ29t cGxldGVseSB1bmJpbmQgdmFyaWFibGUgd2l0aCBOQU1FLiIKICAoaWYgKGxvY2FsLXZhcmlhYmxl LXAgbmFtZSkgKGtpbGwtbG9jYWwtdmFyaWFibGUgbmFtZSkpCiAgKHdoaWxlIChib3VuZHAgbmFt ZSkgKG1ha3VuYm91bmQgbmFtZSkpKQo7OztfICAgPiBhbGxvdXQtdGVzdC1yZXN1bXB0aW9ucyAo KQooZGVmdmFyIGFsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kIG5pbAogICJGb2RkZXIgZm9y IGFsbG91dCByZXN1bXB0aW9ucyB0ZXN0cyAtIGRlZnZhciBqdXN0IGZvciBieXRlIGNvbXBpbGVy LiIpCihkZWZ2YXIgYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUgbmlsCiAgIkZvZGRlciBmb3Ig YWxsb3V0IHJlc3VtcHRpb25zIHRlc3RzIC0gZGVmdmFyIGp1c3QganVzdCBmb3IgYnl0ZSBjb21w aWxlci4iKQooZGVmdmFyIGFsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUgbmlsCiAgIkZvZGRlciBm b3IgYWxsb3V0IHJlc3VtcHRpb25zIHRlc3RzIC0gZGVmdmFyIGp1c3QgZm9yIGJ5dGUgY29tcGls ZXIuIikKKGRlZnVuIGFsbG91dC10ZXN0LXJlc3VtcHRpb25zICgpCiAgIkV4ZXJjaXNlIGFsbG91 dCByZXN1bXB0aW9ucy4iCiAgOzsgZm9yIGVhY2ggcmVzdW1wdGlvbiBjYXNlLCB3ZSBhbHNvIHRl c3QgdGhhdCB0aGUgcmlnaHQgbG9jYWwvZ2xvYmFsCiAgOzsgc2NvcGVzIGFyZSBhZmZlY3RlZCBk dXJpbmcgcmVzdW1wdGlvbiBlZmZlY3RzOgoKICA7OyBlbnN1cmUgdGhhdCBwcmV2aW91c2x5IHVu Ym91bmQgdmFyaWFibGVzIHJldHVybiB0byB0aGUgdW5ib3VuZCBzdGF0ZS4KICAod2l0aC10ZW1w LWJ1ZmZlcgogICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVz dHMtZ2xvYmFsbHktdW5ib3VuZCkKICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICcoYWxsb3V0 LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQgdCkpCiAgICAoYXNzZXJ0IChub3QgKGRlZmF1bHQtYm91 bmRwICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCkpKQogICAgKGFzc2VydCAobG9jYWwt dmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpKQogICAgKGFzc2VydCAo Ym91bmRwICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCkpCiAgICAoYXNzZXJ0IChlcXVh bCBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCB0KSkKICAgIChhbGxvdXQtZG8tcmVzdW1w dGlvbnMpCiAgICAoYXNzZXJ0IChub3QgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1n bG9iYWxseS11bmJvdW5kKSkpCiAgICAoYXNzZXJ0IChub3QgKGJvdW5kcCAnYWxsb3V0LXRlc3Rz LWdsb2JhbGx5LXVuYm91bmQpKSkpCgogIDs7IGVuc3VyZSB0aGF0IHZhcmlhYmxlIHdpdGggcHJp b3IgZ2xvYmFsIHZhbHVlIGlzIHJlc3VtZWQKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGFsbG91 dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkK ICAgIChzZXRxIGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIHQpCiAgICAoYWxsb3V0LWFkZC1y ZXN1bXB0aW9ucyAnKGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIG5pbCkpCiAgICAoYXNzZXJ0 IChlcXVhbCAoZGVmYXVsdC12YWx1ZSAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUpIHQpKQog ICAgKGFzc2VydCAobG9jYWwtdmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUp KQogICAgKGFzc2VydCAoZXF1YWwgYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUgbmlsKSkKICAg IChhbGxvdXQtZG8tcmVzdW1wdGlvbnMpCiAgICAoYXNzZXJ0IChub3QgKGxvY2FsLXZhcmlhYmxl LXAgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlKSkpCiAgICAoYXNzZXJ0IChib3VuZHAgJ2Fs bG91dC10ZXN0cy1nbG9iYWxseS10cnVlKSkKICAgIChhc3NlcnQgKGVxdWFsIGFsbG91dC10ZXN0 cy1nbG9iYWxseS10cnVlIHQpKSkKCiAgOzsgZW5zdXJlIHRoYXQgcHJpb3IgbG9jYWwgdmFsdWUg aXMgcmVzdW1lZAogICh3aXRoLXRlbXAtYnVmZmVyCiAgICAoYWxsb3V0LXRlc3RzLW9ibGl0ZXJh dGUtdmFyaWFibGUgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUpCiAgICAoc2V0IChtYWtlLWxv Y2FsLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSB0KQogICAgKGFzc2VydCAo bm90IChkZWZhdWx0LWJvdW5kcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpCiAgICAgICAg ICAgIG5pbCAoY29uY2F0ICJUZXN0IHNldHVwIG1pc3Rha2UgLSB2YXJpYWJsZSBzdXBwb3NlZCB0 byIKICAgICAgICAgICAgICAgICAgICAgICAgIiBub3QgaGF2ZSBnbG9iYWwgYmluZGluZywgYnV0 IGl0IGRvZXMuIikpCiAgICAoYXNzZXJ0IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMt bG9jYWxseS10cnVlKQogICAgICAgICAgICBuaWwgKGNvbmNhdCAiVGVzdCBzZXR1cCBtaXN0YWtl IC0gdmFyaWFibGUgc3VwcG9zZWQgdG8gaGF2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgIiBs b2NhbCBiaW5kaW5nLCBidXQgaXQgbGFja3Mgb25lLiIpKQogICAgKGFsbG91dC1hZGQtcmVzdW1w dGlvbnMgJyhhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlIG5pbCkpCiAgICAoYXNzZXJ0IChub3Qg KGRlZmF1bHQtYm91bmRwICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSkpCiAgICAoYXNzZXJ0 IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSkKICAgIChhc3Nl cnQgKGVxdWFsIGFsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUgbmlsKSkKICAgIChhbGxvdXQtZG8t cmVzdW1wdGlvbnMpCiAgICAoYXNzZXJ0IChib3VuZHAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRy dWUpKQogICAgKGFzc2VydCAobG9jYWwtdmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHkt dHJ1ZSkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlIHQpKQog ICAgKGFzc2VydCAobm90IChkZWZhdWx0LWJvdW5kcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1 ZSkpKSkKCiAgOzsgZW5zdXJlIHRoYXQgbGFzdCBvZiBtdWx0aXBsZSByZXN1bXB0aW9ucyBob2xk cywgZm9yIHZhcmlvdXMgc2NvcGVzLgogICh3aXRoLXRlbXAtYnVmZmVyCiAgICAoYWxsb3V0LXRl c3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kKQog ICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtZ2xvYmFs bHktdHJ1ZSkKICAgIChzZXRxIGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIHQpCiAgICAoYWxs b3V0LXRlc3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUp CiAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVl KSB0KQogICAgKGFsbG91dC1hZGQtcmVzdW1wdGlvbnMgJyhhbGxvdXQtdGVzdHMtZ2xvYmFsbHkt dW5ib3VuZCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhhbGxvdXQtdGVzdHMtZ2xv YmFsbHktdHJ1ZSBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGFsbG91dC10ZXN0 cy1sb2NhbGx5LXRydWUgbmlsKSkKICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICcoYWxsb3V0 LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICco YWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUgMykKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcoYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSA0KSkKICAgIDs7IHJlZXN0YWJsaXNoIG1hbnkg b2YgdGhlIGJhc2ljIGNvbmRpdGlvbnMgYXJlIG1haW50YWluZWQgYWZ0ZXIgcmUtYWRkOgogICAg KGFzc2VydCAobm90IChkZWZhdWx0LWJvdW5kcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91 bmQpKSkKICAgIChhc3NlcnQgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1nbG9iYWxs eS11bmJvdW5kKSkKICAgIChhc3NlcnQgKGVxdWFsIGFsbG91dC10ZXN0cy1nbG9iYWxseS11bmJv dW5kIDIpKQogICAgKGFzc2VydCAoZGVmYXVsdC1ib3VuZHAgJ2FsbG91dC10ZXN0cy1nbG9iYWxs eS10cnVlKSkKICAgIChhc3NlcnQgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1nbG9i YWxseS10cnVlKSkKICAgIChhc3NlcnQgKGVxdWFsIGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVl IDMpKQogICAgKGFzc2VydCAobm90IChkZWZhdWx0LWJvdW5kcCAnYWxsb3V0LXRlc3RzLWxvY2Fs bHktdHJ1ZSkpKQogICAgKGFzc2VydCAobG9jYWwtdmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWxv Y2FsbHktdHJ1ZSkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVl IDQpKQogICAgKGFsbG91dC1kby1yZXN1bXB0aW9ucykKICAgIChhc3NlcnQgKG5vdCAobG9jYWwt dmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpKSkKICAgIChhc3NlcnQg KG5vdCAoYm91bmRwICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCkpKQogICAgKGFzc2Vy dCAobm90IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkpKQog ICAgKGFzc2VydCAoYm91bmRwICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkpCiAgICAoYXNz ZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSB0KSkKICAgIChhc3NlcnQgKGJv dW5kcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpCiAgICAoYXNzZXJ0IChsb2NhbC12YXJp YWJsZS1wICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSkKICAgIChhc3NlcnQgKGVxdWFsIGFs bG91dC10ZXN0cy1sb2NhbGx5LXRydWUgdCkpCiAgICAoYXNzZXJ0IChub3QgKGRlZmF1bHQtYm91 bmRwICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSkpKQoKICA7OyBlbnN1cmUgdGhhdCBkZWxp YmVyYXRlbHkgdW5iaW5kaW5nIHJlZ2lzdGVyZWQgdmFyaWFibGVzIGRvZXNuJ3QgZm91bCB0aGlu Z3MKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlh YmxlICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCkKICAgIChhbGxvdXQtdGVzdHMtb2Js aXRlcmF0ZS12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUpCiAgICAoc2V0cSBh bGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSB0KQogICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRl LXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKQogICAgKHNldCAobWFrZS1sb2Nh bC12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkgdCkKICAgIChhbGxvdXQtYWRk LXJlc3VtcHRpb25zICcoYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQgdCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICcoYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUgbmlsKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgJyhhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlIG5pbCkp CiAgICAoYWxsb3V0LXRlc3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgJ2FsbG91dC10ZXN0cy1nbG9i YWxseS11bmJvdW5kKQogICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxv dXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkKICAgIChhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJp YWJsZSAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkKICAgIChhbGxvdXQtZG8tcmVzdW1wdGlv bnMpKQogICkKOzs7XyAgJSBSdW4gdW5pdCB0ZXN0cyBpZiBgYWxsb3V0LXJ1bi11bml0LXRlc3Rz LWFmdGVyLWxvYWQnIGlzIHRydWU6Cih3aGVuIGFsbG91dC1ydW4tdW5pdC10ZXN0cy1vbi1sb2Fk CiAgKGFsbG91dC1ydW4tdW5pdC10ZXN0cykpCgo7OztfICMxMiBQcm92aWRlCihwcm92aWRlICdh bGxvdXQpCgo7OztfKiBMb2NhbCBlbWFjcyB2YXJzLgo7OyBUaGUgZm9sbG93aW5nIGBhbGxvdXQt bGF5b3V0JyBsb2NhbCB2YXJpYWJsZSBzZXR0aW5nOgo7OyAgLSBjbG9zZXMgYWxsIHRvcGljcyBm cm9tIHRoZSBmaXJzdCB0b3BpYyB0byBqdXN0IGJlZm9yZSB0aGUgdGhpcmQtdG8tbGFzdCwKOzsg IC0gc2hvd3MgdGhlIGNoaWxkcmVuIG9mIHRoZSB0aGlyZCB0byBsYXN0IChjb25maWcgdmFycykK OzsgIC0gYW5kIHRoZSBzZWNvbmQgdG8gbGFzdCAoY29kZSBzZWN0aW9uKSwKOzsgIC0gYW5kIGNs b3NlcyB0aGUgbGFzdCB0b3BpYyAodGhpcyBsb2NhbC12YXJpYWJsZXMgc2VjdGlvbikuCjs7TG9j YWwgdmFyaWFibGVzOgo7O2FsbG91dC13aWRnZXRzLW1vZGUtaW5oaWJpdDogdAo7O2FsbG91dC1s YXlvdXQ6ICgwIDogLTEgLTEgMCkKOztFbmQ6Cgo7OyBhcmNoLXRhZzogY2YzOGZiYzMtYzA0NC00 NTBmLThiZmYtYWZlZDhiYTU2ODFjCjs7OyBhbGxvdXQuZWwgZW5kcyBoZXJlCg== ------=_Part_13169_18808000.1162941758901 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ------=_Part_13169_18808000.1162941758901--