Received: (at 46326) by debbugs.gnu.org; 5 Feb 2021 17:07:17 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Feb 05 12:07:16 2021 Received: from localhost ([127.0.0.1]:44614 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1l84Zg-0007P8-AC for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 12:07:16 -0500 Received: from server.qxqx.de ([178.63.65.180]:54590 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mail@HIDDEN>) id 1l83h5-00060B-6t for 46326 <at> debbugs.gnu.org; Fri, 05 Feb 2021 11:10:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Message-ID:References:In-Reply-To:Subject:Cc:To:From:Date:Content-Transfer-Encoding:Content-Type:MIME-Version; bh=zzO9clrWwHQ4JujdUBj+Hdxf/+YBQ3GewtnpUhM+u6A=; b=GC5yAk6+j17It3mnZparYRgvxl/x3aNVZrQZs7yti53qTL+9XHVLiaSgjxJhvsD05OyQp3/LizCiG4PGJoLOxishsHyCG5qgOBDhmqxhk3gQ/Rl3ctykChMohlvAIclM0sH//8qkySSyXWuMgrnKEG9aaXO0+8ntYM+282HdyiY=; MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 05 Feb 2021 17:10:46 +0100 From: mail@HIDDEN To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#46326: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook In-Reply-To: <83a6sipkv0.fsf@HIDDEN> References: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> <83eehuppx6.fsf@HIDDEN> <4aab2ef892b1df213ca67210021bcd47@HIDDEN> <83a6sipkv0.fsf@HIDDEN> Message-ID: <631e918824625b8bde45b69664347398@HIDDEN> X-Sender: mail@HIDDEN User-Agent: Roundcube Webmail/1.2-git X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 46326 X-Mailman-Approved-At: Fri, 05 Feb 2021 12:07:15 -0500 Cc: 46326 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) Hello Eli! > If you are saying that the Lisp code in question conses too many > objects unnecessarily, then the solution is to modify the code to cons > less objects. That doesn't necessarily indicates the existence of a > bug in Emacs, certainly not with its memory management. My code certainly *does not allocate* too much. It is the add-hook implementation or more precisely the minibuffer-with-setup-hook implementation which is responsible for the excessive allocations. For this reason this is an upstream bug. In my workaround, I am replacing the upstream version of minibuffer-with-setup-hook with my own version to show the difference. This does not mean that I consider the problem to be gone. I rather decided to report the problem instead. > So if you already have a solution for the problem, what is it that you > want us as Emacs maintainers to investigate and fix here? I am actually not sure what the proper upstream fix is. I see the following options. 1. Replace minibuffer-with-setup-hook with my version if you think my version is better and an acceptable fix. 2. Investigate the reasons why add-hook with priorities somehow copies large closures during sorting. This is unacceptably costly. To give you a better picture of the overall situation - it looks like this: (minibuffer-with-setup-hook (lambda () ...large closure...) (minibuffer-with-setup-hook (lambda () ...another large closure...) (minibuffer-with-setup-hook (:append (lambda () ...and yet another one...)) (completing-read ...)))) The bug is that the large closures are copied for some unknown reason in the add-hook calls which I am not controlling as a library author. My replacement adds the hooks in another way, by creating a symbol+fset instead of putting the lambda directly in the minibuffer-setup-hook variable. Daniel
bug-gnu-emacs@HIDDEN
:bug#46326
; Package emacs
.
Full text available.Received: (at 46326) by debbugs.gnu.org; 5 Feb 2021 17:07:16 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Feb 05 12:07:16 2021 Received: from localhost ([127.0.0.1]:44613 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1l84Zg-0007P5-75 for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 12:07:16 -0500 Received: from server.qxqx.de ([178.63.65.180]:38704 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mail@HIDDEN>) id 1l82uB-0004n4-3T for 46326 <at> debbugs.gnu.org; Fri, 05 Feb 2021 10:20:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Message-ID:References:In-Reply-To:Subject:Cc:To:From:Date:Content-Type:MIME-Version; bh=taxZuz8kqvX5SnDeUBof7LV4NuEyGDVN1MB6eMRqthY=; b=UHyybuDyMBpLwdwetGpMsLPiSvep0ydiSaPawh6HTxNj2btcvuzcNr0DmBQ82W6tJj8UkcmDBr8By8n3Qcko6N2pAR1TcJr575MXkFNkN4uHdsXTnHpIYK1d6O/TbCVvhsd5UMEwdE5V7pod9mN8vFSAjlaALSofANpC1z69R2M=; MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_8eacb995e016baed37890613fffd2ad6" Date: Fri, 05 Feb 2021 16:20:13 +0100 From: mail@HIDDEN To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#46326: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook In-Reply-To: <83eehuppx6.fsf@HIDDEN> References: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> <83eehuppx6.fsf@HIDDEN> Message-ID: <4aab2ef892b1df213ca67210021bcd47@HIDDEN> X-Sender: mail@HIDDEN User-Agent: Roundcube Webmail/1.2-git X-Debbugs-Envelope-To: 46326 X-Mailman-Approved-At: Fri, 05 Feb 2021 12:07:15 -0500 Cc: 46326 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello Eli, thank you for your prompt answer! > Please show information about the memory consumption. (The so-called > "memory profile" doesn't actually measure memory consumption at all, > it just uses memory allocation calls as a poor-man's profiling > signal.) Yes, I am aware. I am not saying that live memory is the problem, but the excessive amount of allocations is a problem, which creates unnecessary garbage collector pauses. Therefore I can also not show you a profile of the memory consumption, since it is not relevant. > Please show a recipe starting from "emacs -Q" where a lot of memory is > being consumed, and please show how much memory does the recipe > consume. Also, I presume invoking "M-x garbage-collect RET" doesn't > release that memory? If so, please show the return value of > garbage-collect. I hope it is not asking too much to load a single elisp file (consult.el)? The package file has no further dependencies besides Emacs. Then I can give you the following reproducible. The only difference between the two files is that in one case minibuffer-with-setup-hook is used and in the other case consult--minibuffer-with-setup-hook is used. I appended the two files. The hashes correspond to the git commit hashes in case you want to pull the files from the git repository. ;; excessive allocations - using minibuffer-with-setup-hook (load "consult-2a197310923a732033bdb757b20c6f90cfad784a.el") ;; no suspicious allocations - using consult--minibuffer-with-setup-hook ;;(load "consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el") (profiler-start 'mem) (dotimes (count 100) (run-at-time 0 nil (lambda () (message "%s" count) (setq unread-command-events '(?\C-g)))) (condition-case _ (consult-buffer) (quit))) (profiler-stop) (profiler-report) >> See the issue https://github.com/minad/consult/issues/193 for >> reference. > > I don't see any memory information in that discussion. I guess you > thought the memory profiler somehow shows memory consumption, but it > doesn't. The profile in the issue shows the memory allocation profile. I think you refer to my comment https://github.com/minad/consult/issues/193#issuecomment-770416491, where I stated my confusion, since the creator of the issue talked about "memory usage". I was only wondering what the profiler actually measures and I looked into the profiler code to confirm that it indeed measures allocations. > What exactly caused you to run the profiler? is the code slow or > something? If so, the problem may be something other than memory > consumption. Yes, it is slow. Add-hook performs unnecessary allocations causing pauses. After replacing the minibuffer-with-setup-hook default implementation with my workaround the memory allocations went away and the command is much faster. The add-hook calls do not appear in the memory profile anymore. See the comment https://github.com/minad/consult/issues/193#issuecomment-770650405. 56,846,572 89% - consult-buffer 56,846,572 89% - consult--buffer 56,846,572 89% - consult--multi 53,076,020 83% - consult--read 53,076,020 83% - apply 53,076,020 83% - #<compiled -0x1bf0d3486ff553f9> 53,076,020 83% - consult--with-async-1 53,076,020 83% - #<compiled 0x3e0275e58912bf7> 53,076,020 83% - consult--with-preview-1 53,074,964 83% - #<compiled -0xbfb98ce1324d29c> 53,074,964 83% - completing-read 53,074,964 83% - selectrum-completing-read 5,530,436 8% + selectrum-read 70,240 0% + consult--multi-candidates 4,360 0% consult--multi-predicate 1,056 0% + consult--multi-preprocess Daniel Mendler --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=consult-2a197310923a732033bdb757b20c6f90cfad784a.el Content-Disposition: attachment; filename=consult-2a197310923a732033bdb757b20c6f90cfad784a.el; size=141407 Ozs7IGNvbnN1bHQuZWwgLS0tIENvbnN1bHRpbmcgY29tcGxldGluZy1yZWFkIC0qLSBsZXhpY2Fs LWJpbmRpbmc6IHQgLSotCgo7OyBBdXRob3I6IERhbmllbCBNZW5kbGVyLCBDb25zdWx0IGFuZCBT ZWxlY3RydW0gY29udHJpYnV0b3JzCjs7IE1haW50YWluZXI6IERhbmllbCBNZW5kbGVyCjs7IENy ZWF0ZWQ6IDIwMjAKOzsgTGljZW5zZTogR1BMLTMuMC1vci1sYXRlcgo7OyBWZXJzaW9uOiAwLjMK OzsgUGFja2FnZS1SZXF1aXJlczogKChlbWFjcyAiMjYuMSIpKQo7OyBIb21lcGFnZTogaHR0cHM6 Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQKCjs7IFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBDb25zdWx0IGlt cGxlbWVudHMgYSBzZXQgb2YgYGNvbnN1bHQtPHRoaW5nPicgY29tbWFuZHMgd2hpY2ggdXNlCjs7 IGBjb21wbGV0aW5nLXJlYWQnIHRvIHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBjYW5kaWRhdGVzLiBD b25zdWx0Cjs7IHByb3ZpZGVzIGFuIGVuaGFuY2VkIGJ1ZmZlciBzd2l0Y2hlciBgY29uc3VsdC1i dWZmZXInIGFuZCBtYW55Cjs7IHNlYXJjaCBhbmQgbmF2aWdhdGlvbiBjb21tYW5kcyBsaWtlIGBj b25zdWx0LWltZW51JyBhbmQKOzsgYGNvbnN1bHQtbGluZScuIFNlYXJjaGluZyB0aHJvdWdoIG11 bHRpcGxlIGZpbGVzIGlzIHN1cHBvcnRlZCBieQo7OyB0aGUgcG93ZXJmdWwgYXN5bmNocm9ub3Vz IGBjb25zdWx0LWdyZXAnIGNvbW1hbmQuIE1hbnkgQ29uc3VsdAo7OyBjb21tYW5kcyBhbGxvdyBw cmV2aWV3aW5nIGNhbmRpZGF0ZXMgLSBpZiBhIGNhbmRpZGF0ZSBpcyBzZWxlY3RlZAo7OyBpbiB0 aGUgY29tcGxldGlvbiB2aWV3LCB0aGUgYnVmZmVyIHNob3dzIHRoZSBjYW5kaWRhdGUgaW1tZWRp YXRlbHkuCgo7OyBUaGUgQ29uc3VsdCBjb21tYW5kcyBhcmUgY29tcGF0aWJsZSB3aXRoIGNvbXBs ZXRpb24gc3lzdGVtcyBiYXNlZAo7OyBvbiB0aGUgRW1hY3MgYGNvbXBsZXRpbmctcmVhZCcgQVBJ LCBub3RhYmx5IHRoZSBkZWZhdWx0IGNvbXBsZXRpb24KOzsgc3lzdGVtLCBJY29tcGxldGUsIFNl bGVjdHJ1bSBhbmQgRW1iYXJrLgoKOzsgQ29uc3VsdCBoYXMgYmVlbiBpbnNwaXJlZCBieSBDb3Vu c2VsLiBTb21lIG9mIHRoZSBDb25zdWx0IGNvbW1hbmRzCjs7IG9yaWdpbmF0ZWQgaW4gdGhlIFNl bGVjdHJ1bSB3aWtpLiBTZWUgdGhlIFJFQURNRSBmb3IgYSBmdWxsIGxpc3Qgb2YKOzsgY29udHJp YnV0b3JzLgoKOzs7IENvZGU6CgooZXZhbC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAnY2wtbGli KQogIChyZXF1aXJlICdzdWJyLXgpKQoocmVxdWlyZSAnYm9va21hcmspCihyZXF1aXJlICdjb21w aWxlKQoocmVxdWlyZSAnaW1lbnUpCihyZXF1aXJlICdrbWFjcm8pCihyZXF1aXJlICdvdXRsaW5l KQoocmVxdWlyZSAncmVjZW50ZikKKHJlcXVpcmUgJ3JpbmcpCihyZXF1aXJlICdzZXEpCgooZGVm Z3JvdXAgY29uc3VsdCBuaWwKICAiQ29uc3VsdGluZyBgY29tcGxldGluZy1yZWFkJy4iCiAgOmdy b3VwICdjb252ZW5pZW5jZQogIDpwcmVmaXggImNvbnN1bHQtIikKCjs7OzsgQ3VzdG9taXphdGlv bgoKKGRlZmN1c3RvbSBjb25zdWx0LW5hcnJvdy1rZXkgbmlsCiAgIlByZWZpeCBrZXkgZm9yIG5h cnJvd2luZyBkdXJpbmcgY29tcGxldGlvbi4KCkdvb2QgY2hvaWNlcyBmb3IgdGhpcyBrZXkgYXJl IChrYmQgXCI8XCIpIG9yIChrYmQgXCJDLStcIikgZm9yIGV4YW1wbGUuCgpUaGUga2V5IG11c3Qg YmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVzZW50 YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0b3Ig c3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC13aWRlbi1rZXkgbmlsCiAg IktleSB1c2VkIGZvciB3aWRlbmluZyBkdXJpbmcgY29tcGxldGlvbi4KCklmIHRoaXMga2V5IGlz IHVuc2V0LCBkZWZhdWx0cyB0byAnY29uc3VsdC1uYXJyb3cta2V5IFNQQycuCgpUaGUga2V5IG11 c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVz ZW50YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0 b3Igc3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC1wcm9qZWN0LXJvb3Qt ZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIHdoaWNoIHJldHVybnMgcHJvamVjdCByb290IGRpcmVj dG9yeS4KClRoZSByb290IGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGBjb25zdWx0LWJ1ZmZlcicgYW5k IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnKGNob2ljZSBmdW5jdGlvbiAoY29uc3QgbmlsKSkp CgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSAwLjI1CiAgIlJlZnJlc2hp bmcgZGVsYXkgb2YgdGhlIGNvbXBsZXRpb24gdWkgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4K ClRoZSBjb21wbGV0aW9uIHVpIGlzIG9ubHkgdXBkYXRlZCBldmVyeSBgY29uc3VsdC1hc3luYy1y ZWZyZXNoLWRlbGF5JwpzZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8gYXN5bmNocm9ub3VzIGNvbW1h bmRzIGxpa2UgZm9yIGV4YW1wbGUKYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdmbG9hdCkKCihk ZWZjdXN0b20gY29uc3VsdC1hc3luYy1pbnB1dC10aHJvdHRsZSAwLjUKICAiSW5wdXQgdGhyb3R0 bGUgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4KClRoZSBhc3luY2hyb25vdXMgcHJvY2VzcyBp cyBzdGFydGVkIG9ubHkgZXZlcnkKYGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUnIHNlY29u ZHMuIFRoaXMgYXBwbGllcyB0byBhc3luY2hyb25vdXMKY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0 LWdyZXAnLiIKICA6dHlwZSAnZmxvYXQpCgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtaW5wdXQt ZGVib3VuY2UgMC4yNQogICJJbnB1dCBkZWJvdW5jZSBmb3IgYXN5bmNocm9ub3VzIGNvbW1hbmRz LgoKVGhlIGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHN0YXJ0ZWQgb25seSB3aGVuIHRoZXJlIGhh cyBub3QgYmVlbiBuZXcKaW5wdXQgZm9yIGBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlJyBz ZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8KYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBlLmcuLCBgY29u c3VsdC1ncmVwJy4iCiAgOnR5cGUgJ2Zsb2F0KQoKKGRlZmN1c3RvbSBjb25zdWx0LWFzeW5jLW1p bi1pbnB1dCAzCiAgIk1pbmltdW0gbnVtYmVyIG9mIGxldHRlcnMgbmVlZGVkLCBiZWZvcmUgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaXMgY2FsbGVkLgoKVGhpcyBhcHBsaWVzIHRvIGFzeW5jaHJvbm91 cyBjb21tYW5kcywgZS5nLiwgYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRl ZmN1c3RvbSBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgIiMiCiAgIkRlZmF1bHQgYXN5bmMg aW5wdXQgc2VwYXJhdG9yIHVzZWQgZm9yIHNwbGl0dGluZy4KCkNhbiBhbHNvIGJlIG5pbCBpbiBv cmRlciB0byBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgYSBzZXBhcmF0b3IuIFRoaXMKYXBwbGll cyB0byBhc3luY2hyb25vdXMgY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0LWdyZXAnLiIKICA6dHlw ZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LW1vZGUtaGlzdG9yaWVzCiAgJygoZXNoZWxs LW1vZGUgLiBlc2hlbGwtaGlzdG9yeS1yaW5nKQogICAgKGNvbWludC1tb2RlIC4gY29taW50LWlu cHV0LXJpbmcpCiAgICAodGVybS1tb2RlICAgLiB0ZXJtLWlucHV0LXJpbmcpKQogICJBbGlzdCBv ZiAobW9kZSAuIGhpc3RvcnkpIHBhaXJzIG9mIG1vZGUgaGlzdG9yaWVzLgpUaGUgaGlzdG9yaWVz IGNhbiBiZSByaW5ncyBvciBsaXN0cy4iCiAgOnR5cGUgJyhsaXN0IChjb25zIHN5bWJvbCBzeW1i b2wpKSkKCihkZWZjdXN0b20gY29uc3VsdC10aGVtZXMgbmlsCiAgIkxpc3Qgb2YgdGhlbWVzIHRv IGJlIHByZXNlbnRlZCBmb3Igc2VsZWN0aW9uLgpuaWwgc2hvd3MgYWxsIGBjdXN0b20tYXZhaWxh YmxlLXRoZW1lcycuIgogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIGNvbnN1 bHQtYWZ0ZXItanVtcC1ob29rICcocmVjZW50ZXIpCiAgIkZ1bmN0aW9uIGNhbGxlZCBhZnRlciBq dW1waW5nIHRvIGEgbG9jYXRpb24uCgpDb21tb25seSB1c2VkIGZ1bmN0aW9ucyBmb3IgdGhpcyBo b29rIGFyZSBgcmVjZW50ZXInIGFuZApgcmVwb3NpdGlvbi13aW5kb3cnLgoKVGhpcyBpcyBjYWxs ZWQgZHVyaW5nIHByZXZpZXcgYW5kIGZvciB0aGUganVtcCBhZnRlciBzZWxlY3Rpb24uCllvdSBt YXkgd2FudCB0byBhZGQgYSBmdW5jdGlvbiB3aGljaCBwdWxzZXMgdGhlIGN1cnJlbnQgbGluZSwg ZS5nLiwKYHhyZWYtcHVsc2UtbW9tZW50YXJpbHknLiIKICA6dHlwZSAnaG9vaykKCihkZWZjdXN0 b20gY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gtYmVnaW5uaW5nCiAgIldoZXJl IHRvIGxlYXZlIHBvaW50IGFmdGVyIGBjb25zdWx0LWxpbmUnIGp1bXBzIHRvIGEgbWF0Y2guIgog IDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhlIGxpbmUiIGxpbmUt YmVnaW5uaW5nKQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhl IG1hdGNoIiBtYXRjaC1iZWdpbm5pbmcpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkVu ZCBvZiB0aGUgbWF0Y2giIG1hdGNoLWVuZCkpKQoKKGRlZmN1c3RvbSBjb25zdWx0LWxpbmUtbnVt YmVycy13aWRlbiB0CiAgIlNob3cgYWJzb2x1dGUgbGluZSBudW1iZXJzIHdoZW4gbmFycm93aW5n IGlzIGFjdGl2ZS4KClNlZSBhbHNvIGBkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbicuIgogIDp0 eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzIHQKICAi U2hvdyBsaW5lIG51bWJlcnMgZm9yIGBjb25zdWx0LWdvdG8tbGluZScuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWZvbnRpZnktbWF4LXNpemUgMTA0ODU3NgogICJCdWZm ZXJzIGxhcmdlciB0aGFuIHRoaXMgYnl0ZSBsaW1pdCBhcmUgbm90IGZvbnRpZmllZC4KClRoaXMg aXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgYSBsYXJnZSBzdGFydHVwIHRpbWUKZm9y IG5hdmlnYXRpb24gY29tbWFuZHMgbGlrZSBgY29uc3VsdC1saW5lJy4iCiAgOnR5cGUgJ2ludGVn ZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtbmFycm93CiAgJygoZW1hY3MtbGlzcC1tb2Rl IC4gKCg/ZiAuICJGdW5jdGlvbnMiKQogICAgICAgICAgICAgICAgICAgICAgICAoP20gLiAiTWFj cm9zIikKICAgICAgICAgICAgICAgICAgICAgICAgKD9wIC4gIlBhY2thZ2VzIikKICAgICAgICAg ICAgICAgICAgICAgICAgKD90IC4gIlR5cGVzIikKICAgICAgICAgICAgICAgICAgICAgICAgKD92 IC4gIlZhcmlhYmxlcyIpKSkpCiAgIk5hcnJvd2luZyBrZXlzIHVzZWQgYnkgYGNvbnN1bHQtaW1l bnUnLiIKICA6dHlwZSAnYWxpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwK ICAnKChlbWFjcy1saXNwLW1vZGUgLiAiRnVuY3Rpb25zIikpCiAgIkNhdGVnb3J5IG9mIHRvcGxl dmVsIGl0ZW1zLCB1c2VkIGJ5IGBjb25zdWx0LWltZW51Jy4KClRoZSBpbWVudSByZXByZXNlbnRh dGlvbiBwcm92aWRlZCBieSB0aGUgYmFja2VuZCB1c3VhbGx5IHB1dHMKZnVuY3Rpb25zIGRpcmVj dGx5IGF0IHRoZSB0b3BsZXZlbC4gYGNvbnN1bHQtaW1lbnUnIG1vdmVzIHRoZW0gaW5zdGVhZAp1 bmRlciB0aGUgY2F0ZWdvcnkgc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUuIgogIDp0eXBlICdh bGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1idWZmZXItZmlsdGVyCiAgJygiXiAiKQogICJGaWx0 ZXIgcmVnZXhwcyBmb3IgYGNvbnN1bHQtYnVmZmVyJy4KClRoZSBkZWZhdWx0IHNldHRpbmcgaXMg dG8gZmlsdGVyIG9ubHkgZXBoZW1lcmFsIGJ1ZmZlciBuYW1lcyBiZWdpbm5pbmcKd2l0aCBhIHNw YWNlIGNoYXJhY3Rlci4iCiAgOnR5cGUgJyhyZXBlYXQgcmVnZXhwKSkKCihkZWZjdXN0b20gY29u c3VsdC1idWZmZXItc291cmNlcwogICcoY29uc3VsdC0tc291cmNlLWhpZGRlbi1idWZmZXIKICAg IGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICAgIGNvbnN1bHQtLXNvdXJjZS1maWxlCiAgICBjb25z dWx0LS1zb3VyY2UtYm9va21hcmsKICAgIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1ZmZlcgog ICAgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZSkKICAiU291cmNlcyB1c2VkIGJ5IGBjb25z dWx0LWJ1ZmZlcicuCgpTZWUgYGNvbnN1bHQtLW11bHRpJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0 aGUgc291cmNlIHZhbHVlcy4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtbW9k ZS1jb21tYW5kLWZpbHRlcgogICcoOzsgRmlsdGVyIGNvbW1hbmRzCiAgICAiLW1vZGUkIiAiLS0i CiAgICA7OyBGaWx0ZXIgd2hvbGUgZmVhdHVyZXMKICAgIHNpbXBsZSBtd2hlZWwgdGltZSBzby1s b25nIHJlY2VudGYpCiAgIkZpbHRlciBjb21tYW5kcyBmb3IgYGNvbnN1bHQtbW9kZS1jb21tYW5k Jy4iCiAgOnR5cGUgJyhyZXBlYXQgKGNob2ljZSBzeW1ib2wgcmVnZXhwKSkpCgooZGVmY3VzdG9t IGNvbnN1bHQtZ2l0LWdyZXAtY29tbWFuZAogICJnaXQgLS1uby1wYWdlciBncmVwIC0tbnVsbCAt LWNvbG9yPWFsd2F5cyAtLWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1saW5lLW51bWJlciAtSSAtZSBB UkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ2l0LWdyZXAsIHNlZSBgY29u c3VsdC1naXQtZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZ3Jl cC1jb21tYW5kCiAgImdyZXAgLS1udWxsIC0tbGluZS1idWZmZXJlZCAtLWNvbG9yPWFsd2F5cyAt LWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1leGNsdWRlLWRpcj0uZ2l0IC0tbGluZS1udW1iZXIgLUkg LXIgLiAtZSBBUkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ3JlcCwgc2Vl IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LXJp cGdyZXAtY29tbWFuZAogICJyZyAtLW51bGwgLS1saW5lLWJ1ZmZlcmVkIC0tY29sb3I9YWx3YXlz IC0tbWF4LWNvbHVtbnM9NTAwXAogICAtLW5vLWhlYWRpbmcgLS1saW5lLW51bWJlciAuIC1lIEFS RyBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciByaXBncmVwLCBzZWUgYGNvbnN1 bHQtcmlwZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZmluZC1j b21tYW5kCiAgImZpbmQgLiAtbm90ICggLXdob2xlbmFtZSAqLy4qIC1wcnVuZSApIC1pcGF0aCAq QVJHKiBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBmaW5kLCBzZWUgYGNvbnN1 bHQtZmluZCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtbG9jYXRlLWNv bW1hbmQKICAibG9jYXRlIC0taWdub3JlLWNhc2UgLS1leGlzdGluZyAtLXJlZ2V4cCBBUkcgT1BU UyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgbG9jYXRlLCBzZWUgYGNvbnN1bHQtbG9j YXRlJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29uc3VsdC1tYW4tY29tbWFuZAog ICJtYW4gLWsgQVJHIE9QVFMiCiAgIkNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIG1hbiBhcHJv cG9zLCBzZWUgYGNvbnN1bHQtbWFuJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29u c3VsdC1wcmV2aWV3LWtleSAnYW55CiAgIlByZXZpZXcgdHJpZ2dlciBrZXlzLCBjYW4gYmUgbmls LCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMuIgogIDp0eXBlICcoY2hvaWNl IChjb25zdCBhbnkpIChjb25zdCBuaWwpIHZlY3RvciBzdHJpbmcgKHJlcGVhdCAoY2hvaWNlIHZl Y3RvciBzdHJpbmcpKSkpCgooZGVmY3VzdG9tIGNvbnN1bHQtcHJldmlldy1tYXgtc2l6ZSAxMDQ4 NTc2MAogICJGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIGJ5dGUgbGltaXQgYXJlIG5vdCBwcmV2aWV3 ZWQuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRlZmN1c3RvbSBjb25zdWx0LXByZXZpZXctbWF4LWNv dW50IDEwCiAgIk51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9wZW4gYXQgb25jZSBkdXJpbmcgcHJl dmlldy4iCiAgOnR5cGUgJ2ludGVnZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtcmVnaXN0ZXItbmFy cm93CiAgYCgoP24gIk51bWJlciIgLCMnbnVtYmVycCkKICAgICg/cyAiU3RyaW5nIiAsIydzdHJp bmdwKQogICAgKD9yICJSZWN0YW5nbGUiICwobGFtYmRhICh4KSAoc3RyaW5ncCAoY2FyLXNhZmUg eCkpKSkKICAgIDs7IGZyYW1lc2V0LXJlZ2lzdGVyLXAgYW5kIGttYWNyby1yZWdpc3Rlci1wIGV4 aXN0cyBzaW5jZSAyNy4xCiAgICAoP2YgIkZyYW1lc2V0IiAsKGxhbWJkYSAoeCkgKGVxICh0eXBl LW9mIHgpICdmcmFtZXNldC1yZWdpc3RlcikpKQogICAgKD9rICJLbWFjcm8iICwobGFtYmRhICh4 KSAoZXEgKHR5cGUtb2YgeCkgJ2ttYWNyby1yZWdpc3RlcikpKQogICAgKD9wICJQb2ludCIgLChs YW1iZGEgKHgpIChvciAobWFya2VycCB4KSAoZXEgKGNhci1zYWZlIHgpICdmaWxlLXF1ZXJ5KSkp KQogICAgKD93ICJXaW5kb3ciICwobGFtYmRhICh4KSAod2luZG93LWNvbmZpZ3VyYXRpb24tcCAo Y2FyLXNhZmUgeCkpKSkpCiAgIlJlZ2lzdGVyIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLgoKRWFj aCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0aGUgZm9ybSAnKGNoYXIgbmFtZSBwcmVk aWNhdGUpLiIKICA6dHlwZSAnbGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1ib29rbWFyay1uYXJy b3cKICBgKCg/ZiAiRmlsZSIgIydib29rbWFyay1kZWZhdWx0LWhhbmRsZXIpCiAgICAoP2ggIkhl bHAiICMnaGVscC1ib29rbWFyay1qdW1wKQogICAgKD9pICJJbmZvIiAjJ0luZm8tYm9va21hcmst anVtcCkKICAgICg/cCAiUGljdHVyZSIgIydpbWFnZS1ib29rbWFyay1qdW1wKQogICAgKD9kICJE b2N2aWV3IiAjJ2RvYy12aWV3LWJvb2ttYXJrLWp1bXApCiAgICAoP20gIk1hbiIgIydNYW4tYm9v a21hcmstanVtcCkKICAgICg/dyAiV29tYW4iICMnd29tYW4tYm9va21hcmstanVtcCkKICAgICg/ ZyAiR251cyIgIydnbnVzLXN1bW1hcnktYm9va21hcmstanVtcCkpCiAgIkJvb2ttYXJrIG5hcnJv d2luZyBjb25maWd1cmF0aW9uLgoKRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0 aGUgZm9ybSAnKGNoYXIgbmFtZSBoYW5kbGVyKS4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9t IGNvbnN1bHQtY29uZmlnIG5pbAogICJDb21tYW5kIGNvbmZpZ3VyYXRpb24gYWxpc3RzLCB3aGlj aCBhbGxvd3MgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24uCgpUaGUgb3B0aW9ucyBzZXQgaGVy ZSB3aWxsIGJlIHBhc3NlZCB0byBgY29uc3VsdC0tcmVhZCcsIHdoZW4gY2FsbGVkCmZyb20gdGhl IGNvcnJlc3BvbmRpbmcgY29tbWFuZC4gTm90ZSB0aGF0IHRoZSBvcHRpb25zIGRlcGVuZCBvbiB0 aGUKcHJpdmF0ZSBgY29uc3VsdC0tcmVhZCcgQVBJIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVy ZWQgYXMgc3RhYmxlIGFzCnRoZSBwdWJsaWMgQVBJLiIKICA6dHlwZSAnKGxpc3QgKGNvbnMgc3lt Ym9sIHBsaXN0KSkpCgo7Ozs7IEZhY2VzCgooZGVmZ3JvdXAgY29uc3VsdC1mYWNlcyBuaWwKICAi RmFjZXMgdXNlZCBieSBDb25zdWx0LiIKICA6Z3JvdXAgJ2NvbnN1bHQKICA6Z3JvdXAgJ2ZhY2Vz KQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWxpbmUKICAnKCh0IDppbmhlcml0IHJlZ2lvbikp CiAgIkZhY2UgdXNlZCB0byBmb3IgbGluZSBwcmV2aWV3cy4iKQoKKGRlZmZhY2UgY29uc3VsdC1w cmV2aWV3LW1hdGNoCiAgJygodCA6aW5oZXJpdCBtYXRjaCkpCiAgIkZhY2UgdXNlZCB0byBmb3Ig bWF0Y2ggcHJldmlld3MgaW4gYGNvbnN1bHQtZ3JlcCcuIikKCihkZWZmYWNlIGNvbnN1bHQtcHJl dmlldy1jdXJzb3IKICAnKCh0IDppbmhlcml0IGNvbnN1bHQtcHJldmlldy1tYXRjaCkpCiAgIkZh Y2UgdXNlZCB0byBmb3IgY3Vyc29yIHByZXZpZXdzIGFuZCBtYXJrcyBpbiBgY29uc3VsdC1tYXJr Jy4iKQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWVycm9yCiAgJygodCA6aW5oZXJpdCBpc2Vh cmNoLWZhaWwpKQogICJGYWNlIHVzZWQgdG8gZm9yIGN1cnNvciBwcmV2aWV3cyBhbmQgbWFya3Mg aW4gYGNvbnN1bHQtZXJyb3InLiIpCgooZGVmZmFjZSBjb25zdWx0LXByZXZpZXcteWFuawogICco KHQgOmluaGVyaXQgY29uc3VsdC1wcmV2aWV3LWxpbmUpKQogICJGYWNlIHVzZWQgdG8gZm9yIHlh bmsgcHJldmlld3MgaW4gYGNvbnN1bHQteWFuaycuIikKCihkZWZmYWNlIGNvbnN1bHQtbmFycm93 LWluZGljYXRvcgogICcoKHQgOmluaGVyaXQgd2FybmluZykpCiAgIkZhY2UgdXNlZCBmb3IgdGhl IG5hcnJvd2luZyBpbmRpY2F0b3IuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5bmMtcnVubmluZwog ICcoKHQgOmluaGVyaXQgY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkKICAiRmFjZSB1c2VkIGlm IGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5 bmMtZmluaXNoZWQKICAnKCh0IDppbmhlcml0IHN1Y2Nlc3MpKQogICJGYWNlIHVzZWQgaWYgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaGFzIGZpbmlzaGVkLiIpCgooZGVmZmFjZSBjb25zdWx0LWFzeW5j LWZhaWxlZAogICcoKHQgOmluaGVyaXQgZXJyb3IpKQogICJGYWNlIHVzZWQgaWYgYXN5bmNocm9u b3VzIHByb2Nlc3MgaGFzIGZhaWxlZC4iKQoKKGRlZmZhY2UgY29uc3VsdC1hc3luYy1zcGxpdAog ICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLW5lZ2F0aW9uLWNoYXItZmFjZSkpCiAgIkZhY2UgdXNl ZCB0byBoaWdobGlnaHQgcHVuY3R1YXRpb24gY2hhcmFjdGVyLiIpCgooZGVmZmFjZSBjb25zdWx0 LWhlbHAKICAnKCh0IDppbmhlcml0IHNoYWRvdykpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQg aGVscCwgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXItc3RvcmUnLiIpCgooZGVmZmFjZSBjb25z dWx0LWtleQogICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCiAgIkZhY2Ug dXNlZCB0byBoaWdobGlnaHQga2V5cywgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXInLiIpCgoo ZGVmZmFjZSBjb25zdWx0LWltZW51LXByZWZpeAogICcoKHQgOmluaGVyaXQgY29uc3VsdC1rZXkp KQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGltZW51IHByZWZpeCBpbiBgY29uc3VsdC1pbWVu dScuIikKCihkZWZmYWNlIGNvbnN1bHQtbGluZS1udW1iZXIKICAnKCh0IDppbmhlcml0IGNvbnN1 bHQta2V5KSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBsb2NhdGlvbiBsaW5lIGluIGBjb25z dWx0LWdsb2JhbC1tYXJrJy4iKQoKKGRlZmZhY2UgY29uc3VsdC1maWxlCiAgJygodCA6aW5oZXJp dCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdo dCBmaWxlcyBpbiBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWJvb2ttYXJr CiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stY29uc3RhbnQtZmFjZSkpCiAgIkZhY2UgdXNlZCB0 byBoaWdobGlnaHQgYm9va21hcmtzIGluIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZmYWNlIGNv bnN1bHQtYnVmZmVyCiAgJygodCkpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgYnVmZmVycyBp biBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWxpbmUtbnVtYmVyLXByZWZp eAogICcoKHQgOmluaGVyaXQgbGluZS1udW1iZXIpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0 IGxpbmUgbnVtYmVycyBpbiBzZWxlY3Rpb25zLiIpCgo7OyBmYWNlIGRlZmluaXRpb24gdGFrZW4g ZnJvbSBFbWJhcmsKKGRlZmZhY2UgY29uc3VsdC16ZWJyYQogICcoKGRlZmF1bHQgOmV4dGVuZCB0 KQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkp CiAgICAgOmJhY2tncm91bmQgIiNlZmVmZWYiKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6YmFja2dyb3VuZCAiIzI0MjQyNCIpKQog ICJGYWNlIHRvIGhpZ2hsaWdodCBhbHRlcm5hdGluZyByb3dzIGluIGBjb25zdWx0LXJlZ2lzdGVy LXdpbmRvdycuIikKCjs7OzsgSGlzdG9yeSB2YXJpYWJsZXMKCihkZWZ2YXIgY29uc3VsdC0ta2Vl cC1saW5lcy1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0LS1lcnJvci1oaXN0b3J5IG5pbCkK KGRlZnZhciBjb25zdWx0LS1ncmVwLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWZpbmQt aGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbWFuLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNv bnN1bHQtLWxpbmUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5 IG5pbCkKKGRlZnZhciBjb25zdWx0LS10aGVtZS1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0 LS1taW5vci1tb2RlLW1lbnUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbW9kZS1jb21t YW5kLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWttYWNyby1oaXN0b3J5IG5pbCkKKGRl ZnZhciBjb25zdWx0LS1idWZmZXItaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0taW1lbnUt aGlzdG9yeSBuaWwpCgo7Ozs7IEludGVybmFsIHZhcmlhYmxlcwoKKGRlZnZhciBjb25zdWx0LS1j YWNoZSBuaWwKICAiQ2FjaGVkIGRhdGEgcG9wdWxhdGVkIGJ5IGBjb25zdWx0LS1kZWZpbmUtY2Fj aGUnLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sKICAobGlzdCAj J2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIpCiAgIk9idGFpbiBtYXRjaCBmdW5j dGlvbiBmcm9tIGNvbXBsZXRpb24gc3lzdGVtLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRp b24tY2FuZGlkYXRlLWhvb2sKICAobGlzdCAjJ2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1j YW5kaWRhdGUpCiAgIkdldCBjYW5kaWRhdGUgZnJvbSBjb21wbGV0aW9uIHN5c3RlbS4iKQoKKGRl ZnZhciBjb25zdWx0LS1jb21wbGV0aW9uLXJlZnJlc2gtaG9vayBuaWwKICAiUmVmcmVzaCBjb21w bGV0aW9uIHN5c3RlbS4iKQoKKGRlZnZhci1sb2NhbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9u IG5pbAogICJNaW5pYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHdoaWNoIGV4cG9zZXMgdGhlIGN1cnJl bnQgcHJldmlldyBmdW5jdGlvbi4KVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJ5IGN1c3Rv bSBjb21wbGV0aW9uIHN5c3RlbXMgZnJvbSBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLgpUaGUgcHJl dmlldyBmdW5jdGlvbiBleHBlY3RzIHR3byBhcmd1bWVudHMsIHRoZSBjdXJyZW50IGlucHV0IHN0 cmluZyBhbmQgdGhlIGNhbmRpZGF0ZSBzdHJpbmcuIikKCihkZWZjb25zdCBjb25zdWx0LS10b2Z1 LWNoYXIgI3gxMDAwMDAKICAiU3BlY2lhbCBjaGFyYWN0ZXIgdXNlZCB0byBlbmNvZGUgbGluZSBw cmVmaXhlcyBmb3IgZGlzYW1iaWd1YXRpb24uCldlIHVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m IHRoZSBwcml2YXRlIHVuaWNvZGUgcGxhbmUgYi4iKQoKKGRlZmNvbnN0IGNvbnN1bHQtLXRvZnUt cmFuZ2UgI3hGRkZFCiAgIlNwZWNpYWwgY2hhcmFjdGVyIHJhbmdlLgpTaXplIG9mIHByaXZhdGUg dW5pY29kZSBwbGFuZSBiLiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdyBuaWwKICAi Q3VycmVudCBuYXJyb3dpbmcga2V5LiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcyBuaWwKICAiTmFycm93aW5nIHByZWZpeGVzIG9mIHRoZSBjdXJyZW50IGNvbXBsZXRp b24uIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSBuaWwKICAiTmFy cm93aW5nIHByZWRpY2F0ZSBvZiB0aGUgY3VycmVudCBjb21wbGV0aW9uLiIpCgooZGVmdmFyLWxv Y2FsIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5IG5pbAogICJOYXJyb3dpbmcgaW5kaWNhdG9yIG92 ZXJsYXkuIikKCihkZWZ2YXIgY29uc3VsdC0tZ2MtdGhyZXNob2xkIDY3MTA4ODY0CiAgIkxhcmdl IGdjIHRocmVzaG9sZCBmb3IgdGVtcG9yYXJ5IGluY3JlYXNlLiIpCgooZGVmdmFyIGNvbnN1bHQt LWdjLXBlcmNlbnRhZ2UgMC41CiAgIkxhcmdlIGdjIHBlcmNlbnRhZ2UgZm9yIHRlbXBvcmFyeSBp bmNyZWFzZS4iKQoKKGRlZnZhciBjb25zdWx0LS1hc3luYy1sb2cKICAiICpjb25zdWx0LWFzeW5j LWxvZyoiCiAgIkJ1ZmZlciBmb3IgYXN5bmMgbG9nZ2luZyBvdXRwdXQgdXNlZCBieSBgY29uc3Vs dC0tYXN5bmMtcHJvY2VzcycuIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0taW1lbnUtY2FjaGUg bmlsCiAgIkJ1ZmZlciBsb2NhbCBjYWNoZWQgaW1lbnUuIikKCihkZWZjb25zdCBjb25zdWx0LS1n cmVwLXJlZ2V4cCAiXFwoW15cMFxuXStcXClcMFxcKFteOlwwXStcXClbOlwwXSIKICAiUmVnZXhw IHVzZWQgdG8gbWF0Y2ggZmlsZSBhbmQgbGluZSBvZiBncmVwIG91dHB1dC4iKQoKKGRlZmNvbnN0 IGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwICJcZVxcW1swLTk7XSttXFwoLio/XFwpXGVcXFtb MC05O10qbSIKICAiUmVnZXhwIHVzZWQgdG8gZmluZCBtYXRjaGVzIGluIGdyZXAgb3V0cHV0LiIp CgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbAogICJPdmVy bGF5cyB1c2VkIGJ5IGBjb25zdWx0LWZvY3VzLWxpbmVzJy4iKQoKOzs7OyBIZWxwZXIgZnVuY3Rp b25zIGFuZCBtYWNyb3MKCihkZWZtYWNybyBjb25zdWx0LS1kZWZpbmUtY2FjaGUgKG5hbWUgJnJl c3QgYm9keSkKICAiRGVmaW5lIGNhY2hlZCB2YWx1ZSB3aXRoIE5BTUUgYW5kIEJPRFkuIgogIChk ZWNsYXJlIChpbmRlbnQgMSkpCiAgYChkZWZ1biAsbmFtZSAoKQogICAgIChvciAoYWxpc3QtZ2V0 ICcsbmFtZSBjb25zdWx0LS1jYWNoZSkKICAgICAgICAgKHNldGYgKGFsaXN0LWdldCAnLG5hbWUg Y29uc3VsdC0tY2FjaGUpCiAgICAgICAgICAgICAgICwobWFjcm9leHAtcHJvZ24gYm9keSkpKSkp CgooZGVmc3Vic3QgY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgKGNhdGVnb3J5IGhpZ2hsaWdo dCkKICAiUmV0dXJuIGZpbHRlciBmdW5jdGlvbiB1c2VkIGJ5IGNvbXBsZXRpb24gc3lzdGVtLgoK Q0FURUdPUlkgaXMgdGhlIGNvbXBsZXRpb24gY2F0ZWdvcnkuCkhJR0hMSUdIVCBtdXN0IGJlIHQg aWYgaGlnaGxpZ2h0aW5nIGlzIG5lZWRlZC4iCiAgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1z dWNjZXNzICdjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1ob29rIGNhdGVnb3J5IGhpZ2hsaWdo dCkpCgooZGVmdW4gY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXItY29tcGxlbWVudCAoY2F0ZWdv cnkpCiAgIlJldHVybiBjb21wbGVtZW50IG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24gdXNlZCBieSB0 aGUgY29tcGxldGlvbiBzeXN0ZW0uCgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29y eS4iCiAgKGxldCAoKGZpbHRlciAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgY2F0ZWdvcnkg bmlsKSkpCiAgICAobGFtYmRhIChpbnB1dCBjYW5kcykKICAgICAgKGxldCAoKGh0IChjb25zdWx0 LS1zdHJpbmctaGFzaCAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgY2FuZHMpKSkpCiAgICAgICAgKHNl cS1yZW1vdmUgKGxhbWJkYSAoeCkgKGdldGhhc2ggeCBodCkpIGNhbmRzKSkpKSkKCihkZWZ1biBj b25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1kaXNwYXRjaCAoY2F0ZWdvcnkgaGlnaGxpZ2h0KQog ICJSZXR1cm4gZGlzcGF0Y2hpbmcgZmlsdGVyIGZ1bmN0aW9uLgoKRWl0aGVyIGRpc3BhdGNoIHRv IGBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlcicgb3IgdG8KYGNvbnN1bHQtLWNvbXBsZXRpb24t ZmlsdGVyLWNvbXBsZW1lbnQnLgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4K SElHSExJR0hUIG11c3QgYmUgdCBpZiBoaWdobGlnaHRpbmcgaXMgbmVlZGVkLiIKICAobGV0ICgo ZmlsdGVyIChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciBjYXRlZ29yeSBoaWdobGlnaHQpKQog ICAgICAgIChmaWx0ZXItbm90IChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1jb21wbGVtZW50 IGNhdGVnb3J5KSkpCiAgICAobGFtYmRhIChpbnB1dCBjYW5kcykKICAgICAgKGNvbmQKICAgICAg ICgoc3RyaW5nLW1hdGNoLXAgIl4hPyA/JCIgaW5wdXQpIGNhbmRzKSA7OyBlbXB0eSBpbnB1dAog ICAgICAgKChzdHJpbmctcHJlZml4LXAgIiEgIiBpbnB1dCkgKGZ1bmNhbGwgZmlsdGVyLW5vdCAo c3Vic3RyaW5nIGlucHV0IDIpIGNhbmRzKSkKICAgICAgICh0IChmdW5jYWxsIGZpbHRlciBpbnB1 dCBjYW5kcykpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWVhY2gtbGluZSAoYmVnIGVuZCAmcmVz dCBib2R5KQogICJJdGVyYXRlIG92ZXIgZWFjaCBsaW5lLgoKVGhlIGxpbmUgYmVnaW5uaW5nL2Vu ZGluZyBCRUcvRU5EIGlzIGJvdW5kIGluIEJPRFkuIgogIChkZWNsYXJlIChpbmRlbnQgMikpCiAg KGxldCAoKG1heCAobWFrZS1zeW1ib2wgIm1heCIpKSkKICAgIGAoc2F2ZS1leGN1cnNpb24KICAg ICAgIChsZXQgKCgsYmVnIChwb2ludC1taW4pKSAoLG1heCAocG9pbnQtbWF4KSkgZW5kKQogICAg ICAgICAod2hpbGUgKDwgLGJlZyAsbWF4KQogICAgICAgICAgIChnb3RvLWNoYXIgLGJlZykKICAg ICAgICAgICAoc2V0cSAsZW5kIChsaW5lLWVuZC1wb3NpdGlvbikpCiAgICAgICAgICAgLEBib2R5 CiAgICAgICAgICAgKHNldHEgLGJlZyAoMSsgLGVuZCkpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1z dHJpbmctaGFzaCAoc3RyaW5ncykKICAiQ3JlYXRlIGhhc2h0YWJsZSBmcm9tIFNUUklOR1MuIgog IChsZXQgKChodCAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwgOnNpemUgKGxlbmd0aCBz dHJpbmdzKSkpKQogICAgKGRvbGlzdCAoc3RyIHN0cmluZ3MpCiAgICAgIChwdXRoYXNoIHN0ciB0 IGh0KSkKICAgIGh0KSkKCihkZWZtYWNybyBjb25zdWx0LS1sb2NhbC1sZXQgKGJpbmRzICZyZXN0 IGJvZHkpCiAgIkJ1ZmZlciBsb2NhbCBsZXQgQklORFMgb2YgZHluYW1pYyB2YXJpYWJsZXMgaW4g Qk9EWS4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICAobGV0ICgoYnVmZmVyIChtYWtlLXN5bWJv bCAiYnVmZmVyIikpCiAgICAgICAgKGxvY2FsIChtYXBjYXIgKGxhbWJkYSAoeCkgKGNvbnMgKG1h a2Utc3ltYm9sICJsb2NhbCIpIChjYXIgeCkpKSBiaW5kcykpKQogICAgYChsZXQgKCgsYnVmZmVy IChjdXJyZW50LWJ1ZmZlcikpCiAgICAgICAgICAgLEAobWFwY2FyIChsYW1iZGEgKHgpIGAoLChj YXIgeCkgKGxvY2FsLXZhcmlhYmxlLXAgJywoY2RyIHgpKSkpIGxvY2FsKSkKICAgICAgICh1bndp bmQtcHJvdGVjdAogICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgLEAobWFwY2FyIChsYW1i ZGEgKHgpIGAobWFrZS1sb2NhbC12YXJpYWJsZSAnLChjYXIgeCkpKSBiaW5kcykKICAgICAgICAg ICAgIChsZXQgKCxAYmluZHMpCiAgICAgICAgICAgICAgICxAYm9keSkpCiAgICAgICAgICh3aGVu IChidWZmZXItbGl2ZS1wICxidWZmZXIpCiAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg LGJ1ZmZlcgogICAgICAgICAgICAgLEAobWFwY2FyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgICBgKHVubGVzcyAsKGNhciB4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg KGtpbGwtbG9jYWwtdmFyaWFibGUgJywoY2RyIHgpKSkpCiAgICAgICAgICAgICAgICAgICAgICAg bG9jYWwpKSkpKSkpCgooZGVmdW4gY29uc3VsdC0tcmVnZXhwLWZpbHRlciAocmVnZXhwcykKICAi Q3JlYXRlIGZpbHRlciByZWdleHAgZnJvbSBSRUdFWFBTLiIKICAoc3RyaW5nLWpvaW4gKG1hcGNh ciAobGFtYmRhICh4KSAoY29uY2F0ICJcXCg/OiIgeCAiXFwpIikpIHJlZ2V4cHMpICJcXHwiKSkK CihkZWZ1biBjb25zdWx0LS1mb250LWxvY2sgKHN0cikKICAiQXBwbHkgYGZvbnQtbG9jaycgZmFj ZXMgaW4gU1RSLCBjb3B5IHRoZW0gdG8gYGZhY2UnLiIKICAobGV0ICgocG9zIDApIChsZW4gKGxl bmd0aCBzdHIpKSkKICAgICh3aGlsZSAoPCBwb3MgbGVuKQogICAgICAobGV0KiAoKGZhY2UgKGdl dC10ZXh0LXByb3BlcnR5IHBvcyAnZm9udC1sb2NrLWZhY2Ugc3RyKSkKICAgICAgICAgICAgIChl bmQgKG9yICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgcG9zIGxlbiAnZm9udC1sb2NrLWZhY2UgZmFj ZSBzdHIpIGxlbikpKQogICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBwb3MgZW5kICdmYWNlIGZh Y2Ugc3RyKQogICAgICAgIChzZXRxIHBvcyBlbmQpKSkKICAgIHN0cikpCgooZGVmdW4gY29uc3Vs dC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgKHByb21wdCBkaXIpCiAgIkZvcm1hdCBQUk9NUFQs IGV4cGFuZCBkaXJlY3RvcnkgRElSIGFuZCByZXR1cm4gdGhlbSBhcyBhIHBhaXIuIgogIChzYXZl LW1hdGNoLWRhdGEKICAgIChsZXQgKChlZGlyIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IChleHBh bmQtZmlsZS1uYW1lIGRpcikpKQogICAgICAgICAgKGRkaXIgKGZpbGUtbmFtZS1hcy1kaXJlY3Rv cnkgKGV4cGFuZC1maWxlLW5hbWUgZGVmYXVsdC1kaXJlY3RvcnkpKSkpCiAgICAgIChjb25zCiAg ICAgICAoaWYgKHN0cmluZz0gZGRpciBlZGlyKQogICAgICAgICAgIChjb25jYXQgcHJvbXB0ICI6 ICIpCiAgICAgICAgIChsZXQgKChhZGlyIChhYmJyZXZpYXRlLWZpbGUtbmFtZSBlZGlyKSkpCiAg ICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIi9cXChbXi9dK1xcKS9cXChbXi9dK1xcKS8kIiBh ZGlyKQogICAgICAgICAgICAgICAoZm9ybWF0ICIlcyBpbiDigKYvJXMvJXMvOiAiIHByb21wdAog ICAgICAgICAgICAgICAgICAgICAgIChtYXRjaC1zdHJpbmcgMSBhZGlyKSAobWF0Y2gtc3RyaW5n IDIgYWRpcikpCiAgICAgICAgICAgICAoZm9ybWF0ICIlcyBpbiAlczogIiBwcm9tcHQgYWRpcikp KSkKICAgICAgIGVkaXIpKSkpCgooZGVmdW4gY29uc3VsdC0tZGlyZWN0b3J5LXByb21wdCAocHJv bXB0IGRpcikKICAiUmV0dXJuIHByb21wdCBhbmQgZGlyZWN0b3J5LgoKUFJPTVBUIGlzIHRoZSBw cm9tcHQgcHJlZml4LiBUaGUgZGlyZWN0b3J5CmlzIGFwcGVuZGVkIHRvIHRoZSBwcm9tcHQgcHJl Zml4LiBGb3IgcHJvamVjdHMKb25seSB0aGUgcHJvamVjdCBuYW1lIGlzIHNob3duLiBUaGUgYGRl ZmF1bHQtZGlyZWN0b3J5JwppcyBub3Qgc2hvd24uIE90aGVyIGRpcmVjdG9yaWVzIGFyZSBhYmJy ZXZpYXRlZCBhbmQKb25seSB0aGUgbGFzdCB0d28gcGF0aCBjb21wb25lbnRzIGFyZSBzaG93bi4K CklmIERJUiBpcyBhIHN0cmluZywgaXQgaXMgcmV0dXJuZWQuCklmIERJUiBpcyBhIHRydWUgdmFs dWUsIHRoZSB1c2VyIGlzIGFza2VkLgpUaGVuIHRoZSBgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVu Y3Rpb24nIGlzIHRyaWVkLgpPdGhlcndpc2UgdGhlIGBkZWZhdWx0LWRpcmVjdG9yeScgaXMgcmV0 dXJuZWQuIgogIChjb25kCiAgICgoc3RyaW5ncCBkaXIpIChjb25zdWx0LS1mb3JtYXQtZGlyZWN0 b3J5LXByb21wdCBwcm9tcHQgZGlyKSkKICAgKGRpciAoY29uc3VsdC0tZm9ybWF0LWRpcmVjdG9y eS1wcm9tcHQgcHJvbXB0IChyZWFkLWRpcmVjdG9yeS1uYW1lICJEaXJlY3Rvcnk6ICIgbmlsIG5p bCB0KSkpCiAgICgod2hlbi1sZXQgKHJvb3QgKGFuZCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5j dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgY29uc3VsdC1wcm9qZWN0LXJv b3QtZnVuY3Rpb24pKSkKICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgIChpZiAoc3RyaW5n LW1hdGNoICIvXFwoW14vXStcXCkvJCIgcm9vdCkKICAgICAgICAgICAgKGNvbnMgKGZvcm1hdCAi JXMgaW4gcHJvamVjdCAlczogIiBwcm9tcHQgKG1hdGNoLXN0cmluZyAxIHJvb3QpKSByb290KQog ICAgICAgICAgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0IHByb21wdCByb290KSkp KSkKICAgKHQgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0IHByb21wdCBkZWZhdWx0 LWRpcmVjdG9yeSkpKSkKCihkZWZzdWJzdCBjb25zdWx0LS1zdHJpcC1hbnNpLWVzY2FwZSAoc3Ry KQogICJTdHJpcCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSBTVFIuIgogIChyZXBsYWNlLXJl Z2V4cC1pbi1zdHJpbmcgIlxlXFxbWzAtOTtdKlttS10iICIiIHN0cikpCgooZGVmc3Vic3QgY29u c3VsdC0tZm9ybWF0LWxvY2F0aW9uIChmaWxlIGxpbmUpCiAgIkZvcm1hdCBsb2NhdGlvbiBzdHJp bmcgJ0ZJTEU6TElORTonLiIKICAoY29uY2F0CiAgIChwcm9wZXJ0aXplIGZpbGUgJ2ZhY2UgJ2Nv bnN1bHQtZmlsZSkgIjoiCiAgIChwcm9wZXJ0aXplIChudW1iZXItdG8tc3RyaW5nIGxpbmUpICdm YWNlICdjb25zdWx0LWxpbmUtbnVtYmVyKSAiOiIpKQoKKGRlZnVuIGNvbnN1bHQtLWxpbmUtcG9z aXRpb24gKGxpbmUpCiAgIkNvbXB1dGUgY2hhcmFjdGVyIHBvc2l0aW9uIGZyb20gTElORSBudW1i ZXIuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgKHdoZW4g Y29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4KICAgICAgICAod2lkZW4pKQogICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQogICAgICAoZm9yd2FyZC1saW5lICgtIGxpbmUgMSkpCiAgICAgIChw b2ludCkpKSkKCihkZWZtYWNybyBjb25zdWx0LS1vdmVybGF5IChiZWcgZW5kICZyZXN0IHByb3Bz KQogICJNYWtlIGNvbnN1bHQgb3ZlcmxheSBiZXR3ZWVuIEJFRyBhbmQgRU5EIHdpdGggUFJPUFMu IgogIChsZXQgKChvdiAobWFrZS1zeW1ib2wgIm92IikpCiAgICAgICAgKHB1dHMpKQogICAgKHdo aWxlIHByb3BzCiAgICAgIChwdXNoIGAob3ZlcmxheS1wdXQgLG92ICwoY2FyIHByb3BzKSAsKGNh ZHIgcHJvcHMpKSBwdXRzKQogICAgICAoc2V0cSBwcm9wcyAoY2RkciBwcm9wcykpKQogICAgYChs ZXQgKCgsb3YgKG1ha2Utb3ZlcmxheSAsYmVnICxlbmQpKSkKICAgICAgICxAcHV0cwogICAgICAg LG92KSkpCgooZGVmdW4gY29uc3VsdC0tcmVtb3ZlLWR1cHMgKGxpc3QgJm9wdGlvbmFsIGtleSkK ICAiUmVtb3ZlIGR1cGxpY2F0ZSBzdHJpbmdzIGZyb20gTElTVC4gS2VlcCBmaXJzdCBvY2N1cnJl bmNlIG9mIGEga2V5LgoKS0VZIGlzIHRoZSBrZXkgZnVuY3Rpb24uIgogIChsZXQgKChodCAobWFr ZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwgOnNpemUgKGxlbmd0aCBsaXN0KSkpCiAgICAgICAg KGFjY3VtKQogICAgICAgIChrZXkgKG9yIGtleSAjJ2lkZW50aXR5KSkpCiAgICAoZG9saXN0IChl bnRyeSBsaXN0IChucmV2ZXJzZSBhY2N1bSkpCiAgICAgIChsZXQgKChrIChmdW5jYWxsIGtleSBl bnRyeSkpKQogICAgICAgICh1bmxlc3MgKGdldGhhc2ggayBodCkKICAgICAgICAgIChwdXRoYXNo IGsgdCBodCkKICAgICAgICAgIChwdXNoIGVudHJ5IGFjY3VtKSkpKSkpCgooZGVmc3Vic3QgY29u c3VsdC0taW4tcmFuZ2UtcCAocG9zKQogICJSZXR1cm4gdCBpZiBwb3NpdGlvbiBQT1MgbGllcyBp biByYW5nZSBgcG9pbnQtbWluJyB0byBgcG9pbnQtbWF4Jy4iCiAgKDw9IChwb2ludC1taW4pIHBv cyAocG9pbnQtbWF4KSkpCgooZGVmdW4gY29uc3VsdC0tZ2V0LWFubm90YXRpb24gKGNhbmQpCiAg IlJldHVybiAnY29uc3VsdC0tYW5ub3RhdGlvbiBwcm9wZXJ0eSBmcm9tIENBTkQuIgogIChnZXQt dGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LS1hbm5vdGF0aW9uIGNhbmQpKQoKKGRlZnVuIGNvbnN1 bHQtLWxvb2t1cC1lbGVtIChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENBTkQgaW4gQ0FO RElEQVRFUyBhbGlzdCwgcmV0dXJuIGVsZW1lbnQuIgogIChhc3NvYyBjYW5kIGNhbmRpZGF0ZXMp KQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1jZHIgKF8gY2FuZGlkYXRlcyBjYW5kKQogICJMb29r dXAgQ0FORCBpbiBDQU5ESURBVEVTIGFsaXN0LCByZXR1cm4gY2RyIG9mIGVsZW1lbnQuIgogIChj ZHIgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykpKQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1jYWRy IChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENBTkQgaW4gQ0FORElEQVRFUyBhbGlzdCwg cmV0dXJuIGNhZHIgb2YgZWxlbWVudC4iCiAgKGNhZHIgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykp KQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbiAoXyBjYW5kaWRhdGVzIGNhbmQpCiAg Ikxvb2t1cCBDQU5EIGluIENBTkRJREFURVMgbGlzdCBvZiAnY29uc3VsdC1sb2NhdGlvbiBjYXRl Z29yeSwgcmV0dXJuIHRoZSBtYXJrZXIuIgogICh3aGVuLWxldCAoZm91bmQgKG1lbWJlciBjYW5k IGNhbmRpZGF0ZXMpKQogICAgKGNhciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1sb2Nh dGlvbiAoY2FyIGZvdW5kKSkpKSkKCihkZWZ1biBjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlciAo KQogICJSYWlzZSBhbiBlcnJvciBpZiBleGVjdXRlZCBmcm9tIHRoZSBtaW5pYnVmZmVyLiIKICAo d2hlbiAobWluaWJ1ZmZlcnApCiAgICAodXNlci1lcnJvciAiYCVzJyBjYWxsZWQgaW5zaWRlIHRo ZSBtaW5pYnVmZmVyIiB0aGlzLWNvbW1hbmQpKSkKCihkZWZ1biBjb25zdWx0LS1yZXF1aXJlLW1p bmlidWZmZXIgKCkKICAiUmFpc2UgYW4gZXJyb3IgaWYgZXhlY3V0ZWQgb3V0c2lkZSB0aGUgbWlu aWJ1ZmZlci4iCiAgKHVubGVzcyAobWluaWJ1ZmZlcnApCiAgICAodXNlci1lcnJvciAiYCVzJyBt dXN0IGJlIGNhbGxlZCBpbnNpZGUgdGhlIG1pbmlidWZmZXIiIHRoaXMtY29tbWFuZCkpKQoKKGRl ZnVuIGNvbnN1bHQtLWZvbnRpZnktYWxsICgpCiAgIkVuc3VyZSB0aGF0IHRoZSB3aG9sZSBidWZm ZXIgaXMgZm9udGlmaWVkLiIKICA7OyBGb250LWxvY2tpbmcgaXMgbGF6eSwgaS5lLiwgaWYgYSBs aW5lIGhhcyBub3QgYmVlbiBsb29rZWQgYXQgeWV0LCB0aGUgbGluZQogIDs7IGlzIG5vdCBmb250 LWxvY2tlZC4gV2Ugd291bGQgb2JzZXJ2ZSB0aGlzIGlmIGNvbnN1bHRpbmcgYW4gdW5mb250aWZp ZWQKICA7OyBsaW5lLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBlbmZvcmNlIGZvbnQtbG9ja2luZyBu b3csIHdoaWNoIGlzIHNsb3cuIEluCiAgOzsgb3JkZXIgdG8gcHJldmVudCBpcyBoYW5nLXVwIHdl IGNoZWNrIHRoZSBidWZmZXIgc2l6ZSBhZ2FpbnN0CiAgOzsgYGNvbnN1bHQtZm9udGlmeS1tYXgt c2l6ZScuCiAgKHdoZW4gKGFuZCBqaXQtbG9jay1tb2RlICg8IChidWZmZXItc2l6ZSkgY29uc3Vs dC1mb250aWZ5LW1heC1zaXplKSkKICAgIChqaXQtbG9jay1mb250aWZ5LW5vdykpKQoKKGRlZnN1 YnN0IGNvbnN1bHQtLWZvbnRpZnktcmVnaW9uIChzdGFydCBlbmQpCiAgIkVuc3VyZSB0aGF0IHJl Z2lvbiBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaXMgZm9udGlmaWVkLiIKICAod2hlbiBqaXQtbG9j ay1tb2RlCiAgICAoaml0LWxvY2stZm9udGlmeS1ub3cgc3RhcnQgZW5kKSkpCgooZGVmdW4gY29u c3VsdC0tZGVmaW5lLWtleSAobWFwIGtleSBjbWQgZGVzYykKICAiQmluZCBDTUQgdG8gS0VZIGlu IE1BUCBhbmQgYWRkIHdoaWNoLWtleSBkZXNjcmlwdGlvbiBERVNDLiIKICAoZGVmaW5lLWtleSBt YXAga2V5IGNtZCkKICA7OyBUaGUgd2hpY2gta2V5IGRlc2NyaXB0aW9uIGlzIHBvdGVudGlhbGx5 IGZyYWdpbGUgaWYgc29tZXRoaW5nIGlzIGNoYW5nZWQgb24gdGhlIHNpZGUKICA7OyBvZiB3aGlj aC1rZXkuIEtlZXAgYW4gZXllIG9uIHRoYXQuIEFuIGFsdGVybmF0aXZlIG1vcmUgc3RhbmRhcmQt Y29tcGxpYW50IG1ldGhvZAogIDs7IHdvdWxkIGJlIHRvIHVzZSBgbWVudS1pdGVtJywgYnV0IHRo aXMgaXMgdW5mb3J0dW5hdGVseSBub3QgeWV0IHN1cHBvcnRlZCBieSB3aGljaC1rZXkKICA7OyBh bmQgYGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncycuCiAgOzsgU2VlIGh0dHBzOi8vZ2l0aHViLmNv bS9qdXN0YnVyL2VtYWNzLXdoaWNoLWtleS9pc3N1ZXMvMTc3CiAgKGxldCAoKGlkeCAoLSAobGVu Z3RoIGtleSkgMSkpKQogICAgKGRlZmluZS1rZXkgbWFwICh2Y29uY2F0IChzZXEtdGFrZSBrZXkg aWR4KSAodmVjdG9yICd3aGljaC1rZXkgKGVsdCBrZXkgaWR4KSkpCiAgICAgIGAod2hpY2gta2V5 ICgsKGNvcHktc2VxdWVuY2UgZGVzYykpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtaW5j cmVhc2VkLWdjICgmcmVzdCBib2R5KQogICJUZW1wb3JhcmlseSBpbmNyZWFzZSB0aGUgZ2MgbGlt aXQgaW4gQk9EWSB0byBvcHRpbWl6ZSBmb3IgdGhyb3VnaHB1dC4iCiAgYChsZXQqICgob3Zlcndy aXRlICg+IGNvbnN1bHQtLWdjLXRocmVzaG9sZCBnYy1jb25zLXRocmVzaG9sZCkpCiAgICAgICAg ICAoZ2MtY29ucy10aHJlc2hvbGQgKGlmIG92ZXJ3cml0ZSBjb25zdWx0LS1nYy10aHJlc2hvbGQg Z2MtY29ucy10aHJlc2hvbGQpKQogICAgICAgICAgKGdjLWNvbnMtcGVyY2VudGFnZSAoaWYgb3Zl cndyaXRlIGNvbnN1bHQtLWdjLXBlcmNlbnRhZ2UgZ2MtY29ucy1wZXJjZW50YWdlKSkpCiAgICAg LEBib2R5KSkKCihkZWZ1biBjb25zdWx0LS1jb3VudC1saW5lcyAocG9zKQogICJNb3ZlIHRvIHBv c2l0aW9uIFBPUyBhbmQgcmV0dXJuIG51bWJlciBvZiBsaW5lcy4iCiAgKGxldCAoKGxpbmUgMCkp CiAgICAod2hpbGUgKDwgKHBvaW50KSBwb3MpCiAgICAgIChmb3J3YXJkLWxpbmUpCiAgICAgICh3 aGVuICg8PSAocG9pbnQpIHBvcykKICAgICAgICAoc2V0cSBsaW5lICgxKyBsaW5lKSkpKQogICAg KGdvdG8tY2hhciBwb3MpCiAgICBsaW5lKSkKCjs7IFdlIG11c3QgZGlzYW1iaWd1YXRlIHRoZSBs aW5lcyBieSBhZGRpbmcgYSBwcmVmaXggc3VjaCB0aGF0IHR3byBsaW5lcyB3aXRoCjs7IHRoZSBz YW1lIHRleHQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQuIEluIG9yZGVyIHRvIGF2b2lkIG1hdGNoaW5n IHRoZSBsaW5lCjs7IG51bWJlciwgc3VjaCB0aGF0IHRoZSB1c2VyIGNhbiBzZWFyY2ggZm9yIG51 bWJlcnMgd2l0aCBgY29uc3VsdC1saW5lJywgd2UKOzsgZW5jb2RlIHRoZSBsaW5lIG51bWJlciBh cyB1bmljb2RlIGNoYXJhY3RlcnMgaW4gdGhlIHN1cHBsZW1lbnRhcnkgcHJpdmF0ZSB1c2UKOzsg cGxhbmUgYi4gQnkgZG9pbmcgdGhhdCwgaXQgaXMgdW5saWtlbHkgdGhhdCBhY2NpZGVudGlhbCBt YXRjaGluZyBvY2N1cnMuCihkZWZzdWJzdCBjb25zdWx0LS1lbmNvZGUtbG9jYXRpb24gKG1hcmtl cikKICAiR2VuZXJhdGUgdW5pcXVlIHN0cmluZyBmb3IgTUFSS0VSLgpESVNQTEFZIGlzIHRoZSBz dHJpbmcgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIHRoZSB1bmlxdWUgc3RyaW5nLiIKICAobGV0ICgo c3RyICIiKSAobiBtYXJrZXIpKQogICAgKHdoaWxlIChwcm9nbgogICAgICAgICAgICAgKHNldHEg c3RyIChjb25jYXQgc3RyIChjaGFyLXRvLXN0cmluZyAoKyBjb25zdWx0LS10b2Z1LWNoYXIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCUgbiBj b25zdWx0LS10b2Z1LXJhbmdlKSkpKSkKICAgICAgICAgICAgIChhbmQgKD49IG4gY29uc3VsdC0t dG9mdS1yYW5nZSkgKHNldHEgbiAoLyBuIGNvbnN1bHQtLXRvZnUtcmFuZ2UpKSkpKQogICAgc3Ry KSkKCihkZWZzdWJzdCBjb25zdWx0LS1saW5lLW51bWJlci1wcmVmaXggKG1hcmtlciBsaW5lIHdp ZHRoKQogICJGb3JtYXQgTElORSBudW1iZXIgcHJlZml4IG51bWJlciB3aXRoIHBhZGRpbmcuCgpN QVJLRVIgYW5kIExJTkUgYXJlIGFkZGVkIGFzICdjb25zdWx0LWxvY2F0aW9uIHRleHQgcHJvcGVy dHkuCldJRFRIIGlzIHRoZSBsaW5lIG51bWJlciB3aWR0aC4iCiAgKGxldCogKCh1bmlxdWUtc3Ry IChjb25zdWx0LS1lbmNvZGUtbG9jYXRpb24gbWFya2VyKSkKICAgICAgICAgKGxpbmUtc3RyIChu dW1iZXItdG8tc3RyaW5nIGxpbmUpKQogICAgICAgICAocHJlZml4LXN0ciAoY29uY2F0CiAgICAg ICAgICAgICAgICAgICAgICAobWFrZS1zdHJpbmcgKC0gd2lkdGggKGxlbmd0aCBsaW5lLXN0cikp IDMyKQogICAgICAgICAgICAgICAgICAgICAgbGluZS1zdHIKICAgICAgICAgICAgICAgICAgICAg ICIgIikpKQogICAgKHB1dC10ZXh0LXByb3BlcnR5IDAgKGxlbmd0aCBwcmVmaXgtc3RyKSAnZmFj ZSAnY29uc3VsdC1saW5lLW51bWJlci1wcmVmaXggcHJlZml4LXN0cikKICAgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIDAgKGxlbmd0aCB1bmlxdWUtc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAg YChkaXNwbGF5ICxwcmVmaXgtc3RyIGNvbnN1bHQtbG9jYXRpb24gKCxtYXJrZXIgLiAsbGluZSkp CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUtc3RyKQogICAgdW5pcXVlLXN0cikpCgoo ZGVmdW4gY29uc3VsdC0tYWRkLWxpbmUtbnVtYmVyIChtYXgtbGluZSBjYW5kaWRhdGVzKQogICJB ZGQgbGluZSBudW1iZXJzIHRvIHVuZm9ybWF0dGVkIENBTkRJREFURVMgYXMgcHJlZml4LgpUaGUg TUFYLUxJTkUgaXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgd2lkdGguClNpbmNlIHRoZSBsaW5l IG51bWJlciBpcyBwYXJ0IG9mIHRoZSBjYW5kaWRhdGUgaXQgd2lsbCBiZSBtYXRjaGVkLW9uIGR1 cmluZyBjb21wbGV0aW9uLiIKICAobGV0ICgod2lkdGggKGxlbmd0aCAobnVtYmVyLXRvLXN0cmlu ZyBtYXgtbGluZSkpKSkKICAgIChtYXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgsbWFya2VyICxsaW5l ICxzdHIpKQogICAgICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgKGNvbnN1bHQtLWxp bmUtbnVtYmVyLXByZWZpeCBtYXJrZXIgbGluZSB3aWR0aCkKICAgICAgICAgICAgICAgc3RyKSkK ICAgICAgICAgICAgY2FuZGlkYXRlcykpKQoKKGRlZnN1YnN0IGNvbnN1bHQtLXJlZ2lvbi13aXRo LWN1cnNvciAoYmVnaW4gZW5kIG1hcmtlcikKICAiUmV0dXJuIHJlZ2lvbiBzdHJpbmcgd2l0aCBh IG1hcmtpbmcgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KCkJFR0lOIGlzIHRoZSBiZWdpbiBwb3Np dGlvbi4KRU5EIGlzIHRoZSBlbmQgcG9zaXRpb24uCk1BUktFUiBpcyB0aGUgY3Vyc29yIHBvc2l0 aW9uLiIKICAobGV0ICgoc3RyIChidWZmZXItc3Vic3RyaW5nIGJlZ2luIGVuZCkpKQogICAgKGlm ICg+PSBtYXJrZXIgZW5kKQogICAgICAgIChjb25jYXQgc3RyIChwcm9wZXJ0aXplICIgIiAnZmFj ZSAnY29uc3VsdC1wcmV2aWV3LWN1cnNvcikpCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAoLSBt YXJrZXIgYmVnaW4pICgtICgxKyBtYXJrZXIpIGJlZ2luKQogICAgICAgICAgICAgICAgICAgICAg ICAgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1jdXJzb3Igc3RyKQogICAgICBzdHIpKSkKCihkZWZz dWJzdCBjb25zdWx0LS1saW5lLXdpdGgtY3Vyc29yIChtYXJrZXIpCiAgIlJldHVybiBjdXJyZW50 IGxpbmUgd2hlcmUgdGhlIGN1cnNvciBNQVJLRVIgaXMgaGlnaGxpZ2h0ZWQuIgogIChjb25zdWx0 LS1yZWdpb24td2l0aC1jdXJzb3IKICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKQogICAobGlu ZS1lbmQtcG9zaXRpb24pCiAgIG1hcmtlcikpCgooZGVmdW4gY29uc3VsdC0tbWVyZ2UtY29uZmln IChhcmdzKQogICJNZXJnZSBgY29uc3VsdC1jb25maWcnIHBsaXN0cyBpbnRvIHRoZSBrZXl3b3Jk IGFyZ3VtZW50cyBvZiBBUkdTLiIKICAoaWYtbGV0IChjb25maWcgKGFsaXN0LWdldCB0aGlzLWNv bW1hbmQgY29uc3VsdC1jb25maWcpKQogICAgICAoYXBwZW5kIChzZXEtdGFrZS13aGlsZSAobGFt YmRhICh4KSAobm90IChrZXl3b3JkcCB4KSkpIGFyZ3MpIGNvbmZpZwogICAgICAgICAgICAgIChz ZXEtY29weSAoc2VxLWRyb3Atd2hpbGUgKGxhbWJkYSAoeCkgKG5vdCAoa2V5d29yZHAgeCkpKSBh cmdzKSkpCiAgICBhcmdzKSkKCjs7OzsgUHJldmlldyBzdXBwb3J0CgooZGVmdW4gY29uc3VsdC0t a2lsbC1jbGVhbi1idWZmZXIgKGJ1ZikKICAiS2lsbCBCVUYgaWYgaXQgaGFzIG5vdCBiZWVuIG1v ZGlmaWVkLiIKICAodW5sZXNzIChvciAoZXEgYnVmIChjdXJyZW50LWJ1ZmZlcikpIChidWZmZXIt bW9kaWZpZWQtcCBidWYpKQogICAgKGtpbGwtYnVmZmVyIGJ1ZikpKQoKKGRlZnVuIGNvbnN1bHQt LWZpbGUtcHJldmlldy1zZXR1cCAoKQogICJSZXR1cm4gYSBmdW5jdGlvbiB0byBvcGVuIGZpbGVz IHRlbXBvcmFyaWx5LiIKICAobGV0KiAoKG5ldy1idWZmZXJzKQogICAgICAgICAocmVjZW50Zi1z aG91bGQtcmVzdG9yZSByZWNlbnRmLW1vZGUpCiAgICAgICAgIChyZWNlbnRmLXNhdmVkLWxpc3Qg KHdoZW4gcmVjZW50Zi1zaG91bGQtcmVzdG9yZSAoY29weS1zZXF1ZW5jZSByZWNlbnRmLWxpc3Qp KSkpCiAgICAobGFtYmRhICgmb3B0aW9uYWwgbmFtZSkKICAgICAgKGlmIChub3QgbmFtZSkKICAg ICAgICAgICh3aGVuIHJlY2VudGYtc2hvdWxkLXJlc3RvcmUKICAgICAgICAgICAgKHNldHEgcmVj ZW50Zi1saXN0IHJlY2VudGYtc2F2ZWQtbGlzdCkKICAgICAgICAgICAgKHdoZW4gKG1lbWJlciAo Y3VycmVudC1idWZmZXIpIG5ldy1idWZmZXJzKQogICAgICAgICAgICAgIChyZWNlbnRmLWFkZC1m aWxlIChidWZmZXItZmlsZS1uYW1lIChjdXJyZW50LWJ1ZmZlcikpKSkpCiAgICAgICAgKG9yIChn ZXQtZmlsZS1idWZmZXIgbmFtZSkKICAgICAgICAgICAgKHdoZW4tbGV0IChhdHRycyAoZmlsZS1h dHRyaWJ1dGVzIG5hbWUpKQogICAgICAgICAgICAgIChpZiAoPiAoZmlsZS1hdHRyaWJ1dGUtc2l6 ZSBhdHRycykgY29uc3VsdC1wcmV2aWV3LW1heC1zaXplKQogICAgICAgICAgICAgICAgICAoYW5k IChtaW5pYnVmZmVyLW1lc3NhZ2UgIkZpbGUgYCVzJyB0b28gbGFyZ2UgZm9yIHByZXZpZXciIG5h bWUpIG5pbCkKICAgICAgICAgICAgICAgIChsZXQgKChidWYgKGZpbmQtZmlsZS1ub3NlbGVjdCBu YW1lICdub3dhcm4pKSkKICAgICAgICAgICAgICAgICAgKHB1c2ggYnVmIG5ldy1idWZmZXJzKQog ICAgICAgICAgICAgICAgICA7OyBPbmx5IGtlZXAgYSBmZXcgYnVmZmVycyBhbGl2ZQogICAgICAg ICAgICAgICAgICAod2hpbGUgKD4gKGxlbmd0aCBuZXctYnVmZmVycykgY29uc3VsdC1wcmV2aWV3 LW1heC1jb3VudCkKICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0ta2lsbC1jbGVhbi1idWZm ZXIgKGNhciAobGFzdCBuZXctYnVmZmVycykpKQogICAgICAgICAgICAgICAgICAgIChzZXRxIG5l dy1idWZmZXJzIChuYnV0bGFzdCBuZXctYnVmZmVycykpKQogICAgICAgICAgICAgICAgICBidWYp KSkpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtZmlsZS1wcmV2aWV3IChhcmdzICZyZXN0 IGJvZHkpCiAgIlByb3ZpZGUgYSBmdW5jdGlvbiB0byBvcGVuIGZpbGVzIHRlbXBvcmFyaWx5LgpU aGUgZmlsZXMgYXJlIGNsb3NlZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBlbmQuCgpBUkdTIGlzIHRo ZSBvcGVuIGZ1bmN0aW9uIGFyZ3VtZW50IGZvciBCT0RZLiIKICAoZGVjbGFyZSAoaW5kZW50IDEp KQogIGAobGV0ICgoLEBhcmdzIChjb25zdWx0LS1maWxlLXByZXZpZXctc2V0dXApKSkKICAgICAo dW53aW5kLXByb3RlY3QKICAgICAgICAgLChtYWNyb2V4cC1wcm9nbiBib2R5KQogICAgICAgKGZ1 bmNhbGwgLEBhcmdzKSkpKQoKOzsgRGVyaXZlZCBmcm9tIGN0cmxmLCBvcmlnaW5hbGx5IGlzZWFy Y2gKKGRlZnVuIGNvbnN1bHQtLWludmlzaWJsZS1zaG93ICgmb3B0aW9uYWwgcGVybWFuZW50bHkp CiAgIkRpc2FibGUgYW55IG92ZXJsYXlzIHRoYXQgYXJlIGN1cnJlbnRseSBoaWRpbmcgcG9pbnQu ClBFUk1BTkVOVExZIG5vbi1uaWwgbWVhbnMgdGhlIG92ZXJsYXlzIHdpbGwgbm90IGJlIHJlc3Rv cmVkIGxhdGVyLiIKICAobGV0ICgob3BlbmVkKSkKICAgIChkb2xpc3QgKG92IChvdmVybGF5cy1p biAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChsaW5lLWVuZC1wb3NpdGlvbikpIG9wZW5lZCkK ICAgICAgKHdoZW4gKGFuZCAoaW52aXNpYmxlLXAgKG92ZXJsYXktZ2V0IG92ICdpbnZpc2libGUp KQogICAgICAgICAgICAgICAgIChvdmVybGF5LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJs ZSkpCiAgICAgICAgKGlmIHBlcm1hbmVudGx5CiAgICAgICAgICAgIChmdW5jYWxsIChvdmVybGF5 LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJsZSkgb3YpCiAgICAgICAgICAocHVzaCAoY29u cyBvdiAob3ZlcmxheS1nZXQgb3YgJ2ludmlzaWJsZSkpIG9wZW5lZCkKICAgICAgICAgIChpZi1s ZXQgKGZ1bmMgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLW9wZW4taW52aXNpYmxlLXRlbXBvcmFy eSkpCiAgICAgICAgICAgICAgKGZ1bmNhbGwgZnVuYyBuaWwpCiAgICAgICAgICAgIChvdmVybGF5 LXB1dCBvdiAnaW52aXNpYmxlIG5pbCkpKSkpKSkKCjs7IERlcml2ZWQgZnJvbSBjdHJsZiwgb3Jp Z2luYWxseSBpc2VhcmNoCihkZWZ1biBjb25zdWx0LS1pbnZpc2libGUtcmVzdG9yZSAob3Zlcmxh eXMpCiAgIlJlc3RvcmUgYW55IG9wZW5lZCBPVkVSTEFZUyB0aGF0IHdlcmUgcHJldmlvdXNseSBk aXNhYmxlZC4iCiAgKGRvbGlzdCAob3Ygb3ZlcmxheXMpCiAgICAoaWYtbGV0IChmdW5jIChvdmVy bGF5LWdldCAoY2FyIG92KSAnaXNlYXJjaC1vcGVuLWludmlzaWJsZS10ZW1wb3JhcnkpKQogICAg ICAgIChmdW5jYWxsIGZ1bmMgdCkKICAgICAgKG92ZXJsYXktcHV0IChjYXIgb3YpICdpbnZpc2li bGUgKGNkciBvdikpKSkpCgooZGVmdW4gY29uc3VsdC0tanVtcC0xIChwb3MpCiAgIkdvIHRvIFBP UyBhbmQgcmVjZW50ZXIuIgogIChjb25kCiAgICgoYW5kIChtYXJrZXJwIHBvcykgKG5vdCAoYnVm ZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciBwb3MpKSkpCiAgICA7OyBPbmx5IHByaW50IGEgbWVz c2FnZSwgbm8gZXJyb3IgaW4gb3JkZXIgdG8gbm90IG1lc3MKICAgIDs7IHdpdGggdGhlIG1pbmli dWZmZXIgdXBkYXRlIGhvb2suCiAgICAobWVzc2FnZSAiQnVmZmVyIGlzIGRlYWQiKSkKICAgKHQK ICAgIDs7IFN3aXRjaCB0byBidWZmZXIgaWYgaXQgaXMgbm90IHZpc2libGUKICAgICh3aGVuIChh bmQgKG1hcmtlcnAgcG9zKSAobm90IChlcSAoY3VycmVudC1idWZmZXIpIChtYXJrZXItYnVmZmVy IHBvcykpKSkKICAgICAgKHN3aXRjaC10by1idWZmZXIgKG1hcmtlci1idWZmZXIgcG9zKSkpCiAg ICA7OyBXaWRlbiBpZiB3ZSBjYW5ub3QganVtcCB0byB0aGUgcG9zaXRpb24gKGlkZWEgZnJvbSBm bHljaGVjay1qdW1wLXRvLWVycm9yKQogICAgKHVubGVzcyAoPSAoZ290by1jaGFyIHBvcykgKHBv aW50KSkKICAgICAgKHdpZGVuKQogICAgICAoZ290by1jaGFyIHBvcykpCiAgICAocnVuLWhvb2tz ICdjb25zdWx0LWFmdGVyLWp1bXAtaG9vaykpKSkKCihkZWZ1biBjb25zdWx0LS1qdW1wIChwb3Mp CiAgIlB1c2ggY3VycmVudCBwb3NpdGlvbiB0byBtYXJrIHJpbmcsIGdvIHRvIFBPUyBhbmQgcmVj ZW50ZXIuIgogICh3aGVuIHBvcwogICAgOzsgV2hlbiB0aGUgbWFya2VyIGlzIGluIHRoZSBzYW1l IGJ1ZmZlciwKICAgIDs7IHJlY29yZCBwcmV2aW91cyBsb2NhdGlvbiBzdWNoIHRoYXQgdGhlIHVz ZXIgY2FuIGp1bXAgYmFjayBxdWlja2x5LgogICAgKHVubGVzcyAoYW5kIChtYXJrZXJwIHBvcykg KG5vdCAoZXEgKGN1cnJlbnQtYnVmZmVyKSAobWFya2VyLWJ1ZmZlciBwb3MpKSkpCiAgICAgIChw dXNoLW1hcmsgKHBvaW50KSB0KSkKICAgIChjb25zdWx0LS1qdW1wLTEgcG9zKQogICAgKGNvbnN1 bHQtLWludmlzaWJsZS1zaG93IHQpKQogIG5pbCkKCjs7IE1hdGNoZWQgc3RyaW5ncyBhcmUgbm90 IGhpZ2hsaWdodGVkIGFzIG9mIG5vdy4KOzsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taW5hZC9j b25zdWx0L2lzc3Vlcy83CihkZWZ1biBjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uICgmb3B0aW9u YWwgZmFjZSkKICAiVGhlIHByZXZpZXcgZnVuY3Rpb24gdXNlZCBpZiBzZWxlY3RpbmcgZnJvbSBh IGxpc3Qgb2YgY2FuZGlkYXRlIHBvc2l0aW9ucy4KVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFz IHRoZSBgOnByZXZpZXcnIGFyZ3VtZW50IG9mIGBjb25zdWx0LS1yZWFkJy4KRkFDRSBpcyB0aGUg Y3Vyc29yIGZhY2UuIgogIChsZXQgKChvdmVybGF5cykKICAgICAgICAoaW52aXNpYmxlKQogICAg ICAgIChmYWNlIChvciBmYWNlICdjb25zdWx0LXByZXZpZXctY3Vyc29yKSkKICAgICAgICAoc2F2 ZWQtbWluIChwb2ludC1taW4tbWFya2VyKSkKICAgICAgICAoc2F2ZWQtbWF4IChwb2ludC1tYXgt bWFya2VyKSkKICAgICAgICAoc2F2ZWQtcG9zIChwb2ludC1tYXJrZXIpKSkKICAgIChsYW1iZGEg KGNhbmQgcmVzdG9yZSkKICAgICAgKGNvbnN1bHQtLWludmlzaWJsZS1yZXN0b3JlIGludmlzaWJs ZSkKICAgICAgKG1hcGMgIydkZWxldGUtb3ZlcmxheSBvdmVybGF5cykKICAgICAgKGNvbmQKICAg ICAgIChyZXN0b3JlCiAgICAgICAgKGlmIChub3QgKGJ1ZmZlci1saXZlLXAgKG1hcmtlci1idWZm ZXIgc2F2ZWQtcG9zKSkpCiAgICAgICAgICAgIChtZXNzYWdlICJCdWZmZXIgaXMgZGVhZCIpCiAg ICAgICAgICAobmFycm93LXRvLXJlZ2lvbiBzYXZlZC1taW4gc2F2ZWQtbWF4KQogICAgICAgICAg KGdvdG8tY2hhciBzYXZlZC1wb3MpKSkKICAgICAgIDs7IEp1bXAgdG8gcG9zaXRpb24KICAgICAg IChjYW5kCiAgICAgICAgKGNvbnN1bHQtLWp1bXAtMSBjYW5kKQogICAgICAgIChzZXRxIGludmlz aWJsZSAoY29uc3VsdC0taW52aXNpYmxlLXNob3cpKQogICAgICAgIChsZXQgKChwb3MgKHBvaW50 KSkpCiAgICAgICAgICAoc2V0cSBvdmVybGF5cwogICAgICAgICAgICAgICAgKGxpc3QgKGNvbnN1 bHQtLW92ZXJsYXkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpbmUtZW5kLXBvc2l0aW9uKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1saW5lKQogICAg ICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLW92ZXJsYXkgcG9zICgxKyBwb3MpICdmYWNlIGZh Y2UpKSkpKQogICAgICAgOzsgSWYgcG9zaXRpb24gY2Fubm90IGJlIHByZXZpZXdlZCwgcmV0dXJu IHRvIHNhdmVkIHBvc2l0aW9uCiAgICAgICAodCAoY29uc3VsdC0tanVtcC0xIHNhdmVkLXBvcykp KSkpKQoKKGRlZnVuIGNvbnN1bHQtLXdpdGgtcHJldmlldy0xIChwcmV2aWV3LWtleSBwcmV2aWV3 IHRyYW5zZm9ybSBjYW5kaWRhdGUgZnVuKQogICJBZGQgcHJldmlldyBzdXBwb3J0IGZvciBGVU4u CgpTZWUgY29uc3VsdC0td2l0aC1wcmV2aWV3IGZvciB0aGUgYXJndW1lbnRzIFBSRVZJRVctS0VZ LCBQUkVWSUVXLCBUUkFOU0ZPUk0gYW5kIENBTkRJREFURS4iCiAgKGxldCAoKGlucHV0ICIiKSAo c2VsZWN0ZWQpKQogICAgKG1pbmlidWZmZXItd2l0aC1zZXR1cC1ob29rCiAgICAgICAgKGlmIChh bmQgcHJldmlldyBwcmV2aWV3LWtleSkKICAgICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAg ICAgIChzZXRxIGNvbnN1bHQtLXByZXZpZXctZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAo bGV0ICgobGFzdC1wcmV2aWV3KSkKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGlucCBj YW5kKQogICAgICAgICAgICAgICAgICAgICAgICAoY2wtYXNzZXJ0ICh3aW5kb3ctbWluaWJ1ZmZl ci1wKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoZXF1YWwgbGFzdC1wcmV2aWV3 IGNhbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IChv ciAobWluaWJ1ZmZlci1zZWxlY3RlZC13aW5kb3cpIChuZXh0LXdpbmRvdykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZnVuY2FsbCBwcmV2aWV3IChmdW5jYWxsIHRyYW5zZm9ybSBpbnAg Y2FuZCkgbmlsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBsYXN0LXByZXZpZXcg Y2FuZCkpKSkpCiAgICAgICAgICAgICAgKGxldCAoKHBvc3QtY29tbWFuZC1zeW0gKG1ha2Utc3lt Ym9sICJjb25zdWx0LS1wcmV2aWV3LXBvc3QtY29tbWFuZCIpKSkKICAgICAgICAgICAgICAgIChm c2V0IHBvc3QtY29tbWFuZC1zeW0KICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgaW5wdXQgKG1pbmlidWZmZXItY29udGVudHMtbm8t cHJvcGVydGllcykpCiAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChvciAoZXEgcHJldmll dy1rZXkgJ2FueSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChrZXlz ICh0aGlzLXNpbmdsZS1jb21tYW5kLWtleXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNlcS1maW5kIChsYW1iZGEgKHgpIChlcXVhbCAodmNvbmNhdCB4KSBrZXlzKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobGlzdHAg cHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJldmlldy1rZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxpc3QgcHJldmlldy1rZXkpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICh3aGVuLWxldCAoY2FuZCAoZnVuY2FsbCBjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGZ1bmNhbGwgY29uc3VsdC0tcHJldmlldy1mdW5jdGlvbiBpbnB1dCBjYW5kKSkp KSkKICAgICAgICAgICAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgcG9zdC1jb21t YW5kLXN5bSBuaWwgdCkpKQogICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAgICAobGV0ICgo cG9zdC1jb21tYW5kLXN5bSAobWFrZS1zeW1ib2wgImNvbnN1bHQtLXByZXZpZXctcG9zdC1jb21t YW5kIikpKQogICAgICAgICAgICAgIChmc2V0IHBvc3QtY29tbWFuZC1zeW0gKGxhbWJkYSAoKSAo c2V0cSBpbnB1dCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzKSkpKQogICAgICAg ICAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgcG9zdC1jb21tYW5kLXN5bSBuaWwg dCkpKSkKICAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAoY29ucyAoc2V0cSBzZWxlY3Rl ZCAod2hlbi1sZXQgKHJlc3VsdCAoZnVuY2FsbCBmdW4pKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZnVuY2FsbCB0cmFuc2Zvcm0gaW5wdXQgcmVzdWx0KSkpCiAgICAgICAgICAg ICAgICBpbnB1dCkKICAgICAgICA7OyBJZiB0aGVyZSBpcyBhIHByZXZpZXcgZnVuY3Rpb24sIGFs d2F5cyBjYWxsIHJlc3RvcmUhCiAgICAgICAgOzsgVGhlIHByZXZpZXcgZnVuY3Rpb24gc2hvdWxk IGJlIHNlZW4gYXMgYSBzdGF0ZWZ1bCBvYmplY3QsCiAgICAgICAgOzsgYW5kIHdlIGNhbGwgdGhl IGRlc3RydWN0b3IgaGVyZS4KICAgICAgICAod2hlbiBwcmV2aWV3CiAgICAgICAgICAoZnVuY2Fs bCBwcmV2aWV3IHNlbGVjdGVkIHQpKSkpKSkKCihkZWZtYWNybyBjb25zdWx0LS13aXRoLXByZXZp ZXcgKHByZXZpZXcta2V5IHByZXZpZXcgdHJhbnNmb3JtIGNhbmRpZGF0ZSAmcmVzdCBib2R5KQog ICJBZGQgcHJldmlldyBzdXBwb3J0IHRvIEJPRFkuCgpQUkVWSUVXIGlzIHRoZSBwcmV2aWV3IGZ1 bmN0aW9uLgpUUkFOU0ZPUk0gaXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uLgpDQU5ESURB VEUgaXMgdGhlIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgY3VycmVudCBjYW5kaWRhdGUuClBSRVZJ RVctS0VZIGFyZSB0aGUga2V5cyB3aGljaCB0cmlnZ2VycyB0aGUgcHJldmlldy4KClRoZSBwcmV2 aWV3IGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMsIHRoZSBzZWxlY3RlZCBjYW5kaWRhdGUg YW5kIGEgcmVzdG9yZQpmbGFnLiBJdCBpcyBjYWxsZWQgZXZlcnkgdGltZSB3aXRoIHJlc3RvcmU9 bmlsIGFmdGVyIGEgcHJldmlldy1rZXkga2V5cHJlc3MsIGFzCmxvbmcgYXMgYSBuZXcgY2FuZGlk YXRlIGlzIHNlbGVjdGVkLiBGaW5hbGx5IHRoZSBwcmV2aWV3IGZ1bmN0aW9uIGlzIGNhbGxlZCBp bgphbnkgY2FzZSB3aXRoIHJlc3RvcmU9dCBldmVuIGlmIG5vIHByZXZpZXcgaGFzIGFjdHVhbGx5 IHRha2VuIHBsYWNlLiBUaGUKY2FuZGlkYXRlIGFyZ3VtZW50IGNhbiBiZSBuaWwgaWYgdGhlIHNl bGVjdGlvbiBoYXMgYmVlbiBhYm9ydGVkLiIKICAoZGVjbGFyZSAoaW5kZW50IDQpKQogIGAoY29u c3VsdC0td2l0aC1wcmV2aWV3LTEgLHByZXZpZXcta2V5ICxwcmV2aWV3ICx0cmFuc2Zvcm0gLGNh bmRpZGF0ZSAobGFtYmRhICgpICxAYm9keSkpKQoKOzs7OyBOYXJyb3dpbmcgc3VwcG9ydAoKKGRl ZnVuIGNvbnN1bHQtLXdpZGVuLWtleSAoKQogICJSZXR1cm4gd2lkZW5pbmcga2V5LCBpZiBgY29u c3VsdC13aWRlbi1rZXknIGlzIG5vdCBzZXQsIGRlZmF1bHQgdG8gJ2NvbnN1bHQtbmFycm93LWtl eSBTUEMnLiIKICAob3IgY29uc3VsdC13aWRlbi1rZXkgKGFuZCBjb25zdWx0LW5hcnJvdy1rZXkg KHZjb25jYXQgY29uc3VsdC1uYXJyb3cta2V5ICIgIikpKSkKCihkZWZ1biBjb25zdWx0LW5hcnJv dyAoa2V5KQogICJOYXJyb3cgY3VycmVudCBjb21wbGV0aW9uIHdpdGggS0VZLgoKVGhpcyBjb21t YW5kIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgbmFycm93aW5nIHN5c3RlbSBvZiBgY29uc3Vs dC0tcmVhZCcuIgogIChpbnRlcmFjdGl2ZQogICAobGlzdCAodW5sZXNzIChlcXVhbCAodGhpcy1z aW5nbGUtY29tbWFuZC1rZXlzKSAoY29uc3VsdC0td2lkZW4ta2V5KSkKICAgICAgICAgICBsYXN0 LWNvbW1hbmQtZXZlbnQpKSkKICAoY29uc3VsdC0tcmVxdWlyZS1taW5pYnVmZmVyKQogIChzZXRx IGNvbnN1bHQtLW5hcnJvdyBrZXkpCiAgKHdoZW4gY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZQog ICAgKHNldHEgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXByZWRpY2F0ZSAoYW5kIGNvbnN1bHQtLW5h cnJvdyBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlKSkpCiAgKHdoZW4gY29uc3VsdC0tbmFycm93 LW92ZXJsYXkKICAgIChkZWxldGUtb3ZlcmxheSBjb25zdWx0LS1uYXJyb3ctb3ZlcmxheSkpCiAg KHdoZW4gY29uc3VsdC0tbmFycm93CiAgICAoc2V0cSBjb25zdWx0LS1uYXJyb3ctb3ZlcmxheQog ICAgICAgICAgKGNvbnN1bHQtLW92ZXJsYXkKICAgICAgICAgICAoLSAobWluaWJ1ZmZlci1wcm9t cHQtZW5kKSAxKSAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKQogICAgICAgICAgICdiZWZvcmUtc3Ry aW5nCiAgICAgICAgICAgKHByb3BlcnRpemUgKGZvcm1hdCAiIFslc10iIChjZHIgKGFzc29jIGtl eSBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAnZmFj ZSAnY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkpKQogIChydW4taG9va3MgJ2NvbnN1bHQtLWNv bXBsZXRpb24tcmVmcmVzaC1ob29rKSkKCihkZWZjb25zdCBjb25zdWx0LS1uYXJyb3ctZGVsZXRl CiAgYChtZW51LWl0ZW0KICAgICIiIG5pbCA6ZmlsdGVyCiAgICAsKGxhbWJkYSAoJm9wdGlvbmFs IF8pCiAgICAgICAod2hlbiAoc3RyaW5nPSAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0 aWVzKSAiIikKICAgICAgICAgKGNvbnN1bHQtbmFycm93IG5pbCkKICAgICAgICAgIydpZ25vcmUp KSkpCgooZGVmY29uc3QgY29uc3VsdC0tbmFycm93LXNwYWNlCiAgYChtZW51LWl0ZW0KICAgICIi IG5pbCA6ZmlsdGVyCiAgICAsKGxhbWJkYSAoJm9wdGlvbmFsIF8pCiAgICAgICAobGV0ICgoc3Ry IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRpZXMpKSkKICAgICAgICAgKHdoZW4tbGV0 IChwYWlyIChvciAoYW5kICg9IDEgKGxlbmd0aCBzdHIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFzc29jIChhcmVmIHN0ciAwKSBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKHN0cmluZz0gc3RyICIiKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29jIDMyIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcykpKSkKICAgICAgICAgICAoZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMpCiAgICAg ICAgICAgKGNvbnN1bHQtbmFycm93IChjYXIgcGFpcikpCiAgICAgICAgICAgIydpZ25vcmUpKSkp KQoKKGRlZnVuIGNvbnN1bHQtbmFycm93LWhlbHAgKCkKICAiUHJpbnQgbmFycm93aW5nIGhlbHAg YXMgYSBgbWluaWJ1ZmZlci1tZXNzYWdlJy4KClRoaXMgY29tbWFuZCBjYW4gYmUgYm91bmQgdG8g YSBrZXkgaW4gYGNvbnN1bHQtbmFycm93LW1hcCcsCnRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBj b21tYW5kcyB3aXRoIG5hcnJvd2luZy4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1yZXF1 aXJlLW1pbmlidWZmZXIpCiAgKGxldCAoKG1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0IDEwMDAw MDApKQogICAgKG1pbmlidWZmZXItbWVzc2FnZQogICAgIChzdHJpbmctam9pbgogICAgICAobWFw Y2FyIChsYW1iZGEgKHgpIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUgKGNoYXItdG8tc3RyaW5nIChjYXIgeCkpICdmYWNlICdjb25zdWx0LWtleSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9w ZXJ0aXplIChjZHIgeCkgJ2ZhY2UgJ2NvbnN1bHQtaGVscCkpKQogICAgICAgICAgICAgIChzZXEt ZmlsdGVyIChsYW1iZGEgKHgpICgvPSAoY2FyIHgpIDMyKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpKQogICAgICAiICIpKSkpCgooZGVmdW4gY29u c3VsdC0tbmFycm93LXNldHVwIChzZXR0aW5ncyBtYXApCiAgIlNldHVwIG5hcnJvd2luZyB3aXRo IFNFVFRJTkdTIGFuZCBrZXltYXAgTUFQLiIKICAoaWYgKGZ1bmN0aW9ucCAoY2FyIHNldHRpbmdz KSkKICAgICAgKHNldHEgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSAoY2FyIHNldHRpbmdzKQog ICAgICAgICAgICBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMgKGNkciBzZXR0aW5ncykpCiAgICAo c2V0cSBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlIG5pbAogICAgICAgICAgY29uc3VsdC0tbmFy cm93LXByZWZpeGVzIHNldHRpbmdzKSkKICAod2hlbiBjb25zdWx0LW5hcnJvdy1rZXkKICAgIChk b2xpc3QgKHBhaXIgY29uc3VsdC0tbmFycm93LXByZWZpeGVzKQogICAgICAod2hlbiAoLz0gKGNh ciBwYWlyKSAzMikKICAgICAgICAoY29uc3VsdC0tZGVmaW5lLWtleSBtYXAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodmNvbmNhdCBjb25zdWx0LW5hcnJvdy1rZXkgKHZlY3RvciAoY2Fy IHBhaXIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2NvbnN1bHQtbmFycm93IChj ZHIgcGFpcikpKSkpCiAgKHdoZW4tbGV0ICh3aWRlbiAoY29uc3VsdC0td2lkZW4ta2V5KSkKICAg IChjb25zdWx0LS1kZWZpbmUta2V5IG1hcCB3aWRlbiAjJ2NvbnN1bHQtbmFycm93ICJBbGwiKSkp Cgo7Ozs7IEFzeW5jIHN1cHBvcnQKCihkZWZ1biBjb25zdWx0LS13aXRoLWFzeW5jLTEgKGFzeW5j IGZ1bikKICAiU2V0dXAgQVNZTkMgZm9yIEZVTi4iCiAgKGlmIChub3QgKGZ1bmN0aW9ucCBhc3lu YykpIChmdW5jYWxsIGZ1biAobGFtYmRhIChfKSBhc3luYykpCiAgICAobWluaWJ1ZmZlci13aXRo LXNldHVwLWhvb2sKICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAoZnVuY2FsbCBhc3luYyAn c2V0dXApCiAgICAgICAgICA7OyBQdXNoIGlucHV0IHN0cmluZyB0byByZXF1ZXN0IHJlZnJlc2gu CiAgICAgICAgICA7OyBXZSB1c2UgYSBzeW1ib2wgaW4gb3JkZXIgdG8gYXZvaWQgYWRkaW5nIGxh bWJkYXMgdG8gdGhlIGhvb2sgdmFyaWFibGUuCiAgICAgICAgICAobGV0ICgoc3ltIChtYWtlLXN5 bWJvbCAiY29uc3VsdC0tYXN5bmMtYWZ0ZXItY2hhbmdlIikpKQogICAgICAgICAgICAoZnNldCBz eW0gKGxhbWJkYSAoJnJlc3QgXykgKGZ1bmNhbGwgYXN5bmMgKG1pbmlidWZmZXItY29udGVudHMt bm8tcHJvcGVydGllcykpKSkKICAgICAgICAgICAgKHJ1bi1hdC10aW1lIDAgbmlsIHN5bSkKICAg ICAgICAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIHN5bSBuaWwgdCkpKQog ICAgICAodW53aW5kLXByb3RlY3QKICAgICAgICAgIChmdW5jYWxsIGZ1biBhc3luYykKICAgICAg ICAoZnVuY2FsbCBhc3luYyAnZGVzdHJveSkpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0td2l0aC1h c3luYyAoYXN5bmMgJnJlc3QgYm9keSkKICAiU2V0dXAgQVNZTkMgZm9yIEJPRFkuIgogIChkZWNs YXJlIChpbmRlbnQgMSkpCiAgYChjb25zdWx0LS13aXRoLWFzeW5jLTEgLEAoY2RyIGFzeW5jKSAo bGFtYmRhICgsKGNhciBhc3luYykpICxAYm9keSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXNp bmsgKCkKICAiQ3JlYXRlIEFTWU5DIHNpbmsgZnVuY3Rpb24uCgpUaGUgYXN5bmMgZnVuY3Rpb24g c2hvdWxkIGFjY2VwdCBhIHNpbmdsZSBhY3Rpb24gYXJndW1lbnQuCk9ubHkgZm9yIHRoZSAnc2V0 dXAgYWN0aW9uLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGNhbGwKb3JpZ2luYXRlcyBmcm9t IHRoZSBtaW5pYnVmZmVyLiBGb3IgdGhlIG90aGVyIGFjdGlvbnMgbm8KYXNzdW1wdGlvbnMgY2Fu IGJlIG1hZGUuCkRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnQsIHRoZSBjYWxsZXIgY29udGV4dCBk aWZmZXIuCgonc2V0dXAgICBTZXR1cCB0aGUgaW50ZXJuYWwgc3RhdGUuCidkZXN0cm95IERlc3Ry b3kgdGhlIGludGVybmFsIHN0YXRlLgonZmx1c2ggICBGbHVzaCB0aGUgbGlzdCBvZiBjYW5kaWRh dGVzLgoncmVmcmVzaCBSZXF1ZXN0IFVJIHJlZnJlc2guCidnZXQgICAgIEdldCB0aGUgbGlzdCBv ZiBjYW5kaWRhdGVzLgpMaXN0ICAgICBBcHBlbmQgdGhlIGxpc3QgdG8gdGhlIGxpc3Qgb2YgY2Fu ZGlkYXRlcy4KU3RyaW5nICAgVGhlIGlucHV0IHN0cmluZywgY2FsbGVkIHdoZW4gdGhlIHVzZXIg ZW50ZXJzIHNvbWV0aGluZy4iCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKGxhbWJkYSAoYWN0 aW9uKQogICAgICAocGNhc2UtZXhoYXVzdGl2ZSBhY3Rpb24KICAgICAgICAoKG9yIChwcmVkIHN0 cmluZ3ApICdzZXR1cCAnZGVzdHJveSkgbmlsKQogICAgICAgICgnZmx1c2ggKHNldHEgY2FuZGlk YXRlcyBuaWwpKQogICAgICAgICgnZ2V0IGNhbmRpZGF0ZXMpCiAgICAgICAgKCdyZWZyZXNoCiAg ICAgICAgICh3aGVuLWxldCAod2luIChhY3RpdmUtbWluaWJ1ZmZlci13aW5kb3cpKQogICAgICAg ICAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyB3aW4KICAgICAgICAgICAgIChydW4taG9va3MgJ2Nv bnN1bHQtLWNvbXBsZXRpb24tcmVmcmVzaC1ob29rKSkpKQogICAgICAgICgocHJlZCBsaXN0cCkg KHNldHEgY2FuZGlkYXRlcyAobmNvbmMgY2FuZGlkYXRlcyBhY3Rpb24pKSkpKSkpCgooZGVmdW4g Y29uc3VsdC0tYXN5bmMtc3BsaXQtc3RyaW5nIChzdHIpCiAgIlNwbGl0IFNUUiBpbiBhc3luYyBp bnB1dCBhbmQgZmlsdGVyaW5nIHBhcnQuCklmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBwdW5j dHVhdGlvbiBjaGFyYWN0ZXIgaXQgZGV0ZXJtaW5lcwp0aGUgc2VwYXJhdG9yLiBFeGFtcGxlczog XCIvYXN5bmMvZmlsdGVyXCIsIFwiI2FzeW5jI2ZpbHRlclwiLiIKICAoaWYgKHN0cmluZy1tYXRj aC1wICJeW1s6cHVuY3Q6XV0iIHN0cikKICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgIChs ZXQgKChxIChyZWdleHAtcXVvdGUgKHN1YnN0cmluZyBzdHIgMCAxKSkpKQogICAgICAgICAgKHN0 cmluZy1tYXRjaCAoY29uY2F0ICJeIiBxICJcXChbXiIgcSAiXSpcXCkiIHEgIj8iKSBzdHIpCiAg ICAgICAgICAoY29ucyAobWF0Y2gtc3RyaW5nIDEgc3RyKSAobWF0Y2gtZW5kIDApKSkpCiAgICAo Y29ucyBzdHIgKGxlbmd0aCBzdHIpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0tYXN5bmMtc3BsaXQt d3JhcCAoc3VmZml4KQogICJDcmVhdGUgY29tcGxldGlvbiBzdHlsZSBmdW5jdGlvbiB3aXRoIG5h bWUgU1VGRklYLiIKICAobGV0ICgobmFtZSAoaW50ZXJuIChmb3JtYXQgImNvbnN1bHQtLWFzeW5j LXNwbGl0LSVzIiBzdWZmaXgpKSkpCiAgICBgKHByb2duCiAgICAgICAoZGVmdW4gLG5hbWUgKHN0 ciB0YWJsZSBwcmVkIHBvaW50ICZvcHRpb25hbCBtZXRhZGF0YSkKICAgICAgICAgKGxldCAoKGNv bXBsZXRpb24tc3R5bGVzIChjZHIgY29tcGxldGlvbi1zdHlsZXMpKQogICAgICAgICAgICAgICAo cG9zIChjZHIgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXN0cmluZyBzdHIpKSkpCiAgICAgICAgICAg KCwoaW50ZXJuIChmb3JtYXQgImNvbXBsZXRpb24tJXMiIHN1ZmZpeCkpCiAgICAgICAgICAgIChz dWJzdHJpbmcgc3RyIHBvcykgdGFibGUgcHJlZCAoLSBwb2ludCBwb3MpIG1ldGFkYXRhKSkpCiAg ICAgICAnLG5hbWUpKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdC1zZXR1cCAoKQogICJT ZXR1cCBgY29uc3VsdC0tYXN5bmMtc3BsaXQnIGNvbXBsZXRpb24gc3R5bGVzLiIKICAoc2V0cS1s b2NhbCBjb21wbGV0aW9uLXN0eWxlcy1hbGlzdAogICAgICAgICAgICAgIChjb25zIChsaXN0ICdj b25zdWx0LS1hc3luYy1zcGxpdAogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1h c3luYy1zcGxpdC13cmFwIHRyeS1jb21wbGV0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdWx0LS1hc3luYy1zcGxpdC13cmFwIGFsbC1jb21wbGV0aW9ucykgIiIpCiAgICAgICAg ICAgICAgICAgICAgY29tcGxldGlvbi1zdHlsZXMtYWxpc3QpKQogIChzZXRxLWxvY2FsIGNvbXBs ZXRpb24tc3R5bGVzCiAgICAgICAgICAgICAgKGNvbnMgJ2NvbnN1bHQtLWFzeW5jLXNwbGl0IGNv bXBsZXRpb24tc3R5bGVzKSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtc3BsaXQgKGFzeW5jKQog ICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24sIHdoaWNoIHNwbGl0cyB0aGUgaW5wdXQgc3RyaW5nLgoK VGhlIGlucHV0IHN0cmluZyBpcyBzcGxpdCBhdCB0aGUgZmlyc3QgY29tbWEuIFRoZSBwYXJ0IGJl Zm9yZQp0aGUgY29tbWEgaXMgcGFzc2VkIHRvIEFTWU5DLCB0aGUgc2Vjb25kIHBhcnQgaXMgdXNl ZCBmb3IgZmlsdGVyaW5nLiIKICAobGFtYmRhIChhY3Rpb24pCiAgICAocGNhc2UgYWN0aW9uCiAg ICAgICgnc2V0dXAKICAgICAgIChjb25zdWx0LS1hc3luYy1zcGxpdC1zZXR1cCkKICAgICAgIChm dW5jYWxsIGFzeW5jICdzZXR1cCkpCiAgICAgICgocHJlZCBzdHJpbmdwKQogICAgICAgKGxldCog KChwYWlyIChjb25zdWx0LS1hc3luYy1zcGxpdC1zdHJpbmcgYWN0aW9uKSkKICAgICAgICAgICAg ICAoaW5wdXQtbGVuIChsZW5ndGggYWN0aW9uKSkKICAgICAgICAgICAgICAoYXN5bmMtc3RyIChj YXIgcGFpcikpCiAgICAgICAgICAgICAgKGFzeW5jLWxlbiAobGVuZ3RoIGFzeW5jLXN0cikpCiAg ICAgICAgICAgICAgKGVuZCAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKSkpCiAgICAgICAgIDs7IEhp Z2hsaWdodCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzCiAgICAgICAgIChyZW1vdmUtbGlzdC1vZi10 ZXh0LXByb3BlcnRpZXMgZW5kICgrIGVuZCBpbnB1dC1sZW4pICcoZmFjZSkpCiAgICAgICAgICh3 aGVuICg+IGlucHV0LWxlbiBhc3luYy1sZW4pCiAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5 IGVuZCAoMSsgZW5kKSAnZmFjZSAnY29uc3VsdC1hc3luYy1zcGxpdCkKICAgICAgICAgICAod2hl biAoPiBpbnB1dC1sZW4gKDErIGFzeW5jLWxlbikpCiAgICAgICAgICAgICAocHV0LXRleHQtcHJv cGVydHkgKCsgMSBlbmQgYXN5bmMtbGVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgrIDIgZW5kIGFzeW5jLWxlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFj ZSAnY29uc3VsdC1hc3luYy1zcGxpdCkpKQogICAgICAgICAoZnVuY2FsbCBhc3luYwogICAgICAg ICAgICAgICAgICA7OyBQYXNzIHRocm91Z2ggaWYgZm9yY2VkIGJ5IHR3byBwdW5jdHVhdGlvbiBj aGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgIDs7IG9yIGlmIHRoZSBpbnB1dCBpcyBsb25nIGVu b3VnaCEKICAgICAgICAgICAgICAgICAgKGlmIChvciAoPj0gaW5wdXQtbGVuICgrIDIgYXN5bmMt bGVuKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAoPj0gYXN5bmMtbGVuIGNvbnN1bHQtYXN5 bmMtbWluLWlucHV0KSkKICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLXN0cgogICAgICAgICAg ICAgICAgICAgIDs7IFByZXRlbmQgdGhhdCB0aGVyZSBpcyBubyBpbnB1dAogICAgICAgICAgICAg ICAgICAgICIiKSkpKQogICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKQoKKGRlZnVu IGNvbnN1bHQtLWFzeW5jLWxvZyAoZm9ybWF0dGVkICZyZXN0IGFyZ3MpCiAgIkxvZyBGT1JNQVRU RUQgQVJHUyB0byBgY29uc3VsdC0tYXN5bmMtbG9nJy4iCiAgKHdpdGgtY3VycmVudC1idWZmZXIg KGdldC1idWZmZXItY3JlYXRlIGNvbnN1bHQtLWFzeW5jLWxvZykKICAgIChnb3RvLWNoYXIgKHBv aW50LW1heCkpCiAgICAoaW5zZXJ0IChhcHBseSAjJ2Zvcm1hdCBmb3JtYXR0ZWQgYXJncykpKSkK CihkZWZ1biBjb25zdWx0LS1hc3luYy1wcm9jZXNzIChhc3luYyBjbWQpCiAgIkNyZWF0ZSBwcm9j ZXNzIHNvdXJjZSBhc3luYyBmdW5jdGlvbi4KCkFTWU5DIGlzIHRoZSBhc3luYyBmdW5jdGlvbiB3 aGljaCByZWNlaXZlcyB0aGUgY2FuZGlkYXRlcy4KQ01EIGlzIHRoZSBjb21tYW5kIGFyZ3VtZW50 IGxpc3QuIgogIChsZXQgKChwcm9jKSAobGFzdC1hcmdzKSAoaW5kaWNhdG9yKSkKICAgIChsYW1i ZGEgKGFjdGlvbikKICAgICAgKHBjYXNlIGFjdGlvbgogICAgICAgICgiIiA7OyBJZiBubyBpbnB1 dCBpcyBwcm92aWRlZCBraWxsIGN1cnJlbnQgcHJvY2VzcwogICAgICAgICAoaWdub3JlLWVycm9y cyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgIChzZXRxIGxhc3QtYXJncyBuaWwpKQog ICAgICAgICgocHJlZCBzdHJpbmdwKQogICAgICAgICAobGV0ICgoYXJncyAoZnVuY2FsbCBjbWQg YWN0aW9uKSkKICAgICAgICAgICAgICAgKGZsdXNoIHQpCiAgICAgICAgICAgICAgIChyZXN0ICIi KSkKICAgICAgICAgICAodW5sZXNzIChlcXVhbCBhcmdzIGxhc3QtYXJncykKICAgICAgICAgICAg IChzZXRxIGxhc3QtYXJncyBhcmdzKQogICAgICAgICAgICAgKGlnbm9yZS1lcnJvcnMgKGRlbGV0 ZS1wcm9jZXNzIHByb2MpKQogICAgICAgICAgICAgKHdoZW4gYXJncwogICAgICAgICAgICAgICAo b3ZlcmxheS1wdXQgaW5kaWNhdG9yICdkaXNwbGF5IChwcm9wZXJ0aXplICIqIiAnZmFjZSAnY29u c3VsdC1hc3luYy1ydW5uaW5nKSkKICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWxvZyAi Y29uc3VsdC0tYXN5bmMtcHJvY2VzcyBzdGFydGVkICVTXG4iIGFyZ3MpCiAgICAgICAgICAgICAg IChzZXRxCiAgICAgICAgICAgICAgICBwcm9jCiAgICAgICAgICAgICAgICAobWFrZS1wcm9jZXNz CiAgICAgICAgICAgICAgICAgOmNvbm5lY3Rpb24tdHlwZSAncGlwZQogICAgICAgICAgICAgICAg IDpuYW1lIChjYXIgYXJncykKICAgICAgICAgICAgICAgICA6c3RkZXJyIGNvbnN1bHQtLWFzeW5j LWxvZwogICAgICAgICAgICAgICAgIDpub3F1ZXJ5IHQKICAgICAgICAgICAgICAgICA6Y29tbWFu ZCBhcmdzCiAgICAgICAgICAgICAgICAgOmZpbHRlcgogICAgICAgICAgICAgICAgIChsYW1iZGEg KF8gb3V0KQogICAgICAgICAgICAgICAgICAgKHdoZW4gZmx1c2gKICAgICAgICAgICAgICAgICAg ICAgKHNldHEgZmx1c2ggbmlsKQogICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAn Zmx1c2gpKQogICAgICAgICAgICAgICAgICAgKGxldCAoKGxpbmVzIChzcGxpdC1zdHJpbmcgb3V0 ICJcbiIpKSkKICAgICAgICAgICAgICAgICAgICAgKGlmIChub3QgKGNkciBsaW5lcykpCiAgICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSByZXN0IChjb25jYXQgcmVzdCAoY2FyIGxpbmVzKSkp CiAgICAgICAgICAgICAgICAgICAgICAgKHNldGNhciBsaW5lcyAoY29uY2F0IHJlc3QgKGNhciBs aW5lcykpKQogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlc3QgKGNhciAobGFzdCBsaW5l cykpKQogICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFzeW5jIChuYnV0bGFzdCBsaW5l cykpKSkpCiAgICAgICAgICAgICAgICAgOnNlbnRpbmVsCiAgICAgICAgICAgICAgICAgKGxhbWJk YSAoXyBldmVudCkKICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1hc3luYy1sb2cgImNvbnN1 bHQtLWFzeW5jLXByb2Nlc3Mgc2VudGluZWw6ICVzXG4iIGV2ZW50KQogICAgICAgICAgICAgICAg ICAgKHdoZW4gZmx1c2gKICAgICAgICAgICAgICAgICAgICAgKHNldHEgZmx1c2ggbmlsKQogICAg ICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAnZmx1c2gpKQogICAgICAgICAgICAgICAg ICAgKG92ZXJsYXktcHV0IGluZGljYXRvciAnZGlzcGxheQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5n LXByZWZpeC1wICJraWxsZWQiIGV2ZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHByb3BlcnRpemUgIjsiICdmYWNlICdjb25zdWx0LWFzeW5jLWZhaWxlZCkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5nLXByZWZpeC1wICJmaW5pc2hlZCIgZXZl bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiOiIgJ2Zh Y2UgJ2NvbnN1bHQtYXN5bmMtZmluaXNoZWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodCAocHJvcGVydGl6ZSAiISIgJ2ZhY2UgJ2NvbnN1bHQtYXN5bmMtZmFpbGVkKSkpKQog ICAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoc3RyaW5nLXByZWZpeC1wICJmaW5pc2hlZCIg ZXZlbnQpIChub3QgKHN0cmluZz0gcmVzdCAiIikpKQogICAgICAgICAgICAgICAgICAgICAoZnVu Y2FsbCBhc3luYyAobGlzdCByZXN0KSkpKSkpKSkpKQogICAgICAgICgnZGVzdHJveQogICAgICAg ICAoaWdub3JlLWVycm9ycyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgIChkZWxldGUt b3ZlcmxheSBpbmRpY2F0b3IpCiAgICAgICAgIChmdW5jYWxsIGFzeW5jICdkZXN0cm95KSkKICAg ICAgICAoJ3NldHVwCiAgICAgICAgIChzZXRxIGluZGljYXRvciAobWFrZS1vdmVybGF5ICgtICht aW5pYnVmZmVyLXByb21wdC1lbmQpIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgtIChtaW5pYnVmZmVyLXByb21wdC1lbmQpIDEpKSkKICAgICAgICAgKGZ1bmNhbGwg YXN5bmMgJ3NldHVwKSkKICAgICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKSkKCihk ZWZ1biBjb25zdWx0LS1hc3luYy10aHJvdHRsZSAoYXN5bmMgJm9wdGlvbmFsIHRocm90dGxlIGRl Ym91bmNlKQogICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24gZnJvbSBBU1lOQyB3aGljaCB0aHJvdHRs ZXMgaW5wdXQuCgpUaGUgVEhST1RUTEUgZGVsYXkgZGVmYXVsdHMgdG8gYGNvbnN1bHQtYXN5bmMt aW5wdXQtdGhyb3R0bGUnLgpUaGUgREVCT1VOQ0UgZGVsYXkgZGVmYXVsdHMgdG8gYGNvbnN1bHQt YXN5bmMtaW5wdXQtZGVib3VuY2UnLiIKICAobGV0KiAoKHRocm90dGxlIChvciB0aHJvdHRsZSBj b25zdWx0LWFzeW5jLWlucHV0LXRocm90dGxlKSkKICAgICAgICAgKGRlYm91bmNlIChvciBkZWJv dW5jZSBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlKSkKICAgICAgICAgKGlucHV0ICIiKQog ICAgICAgICAodW5sb2NrZWQgdCkKICAgICAgICAgKHRocm90dGxlLXRpbWVyKQogICAgICAgICAo ZGVib3VuY2UtdGltZXIpKQogICAgKGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9u CiAgICAgICAgKCdzZXR1cAogICAgICAgICAoZnVuY2FsbCBhc3luYyAnc2V0dXApCiAgICAgICAg IChzZXRxIHRocm90dGxlLXRpbWVyIChydW4tYXQtdGltZSB0aHJvdHRsZSB0aHJvdHRsZSAobGFt YmRhICgpIChzZXRxIHVubG9ja2VkIHQpKSkpKQogICAgICAgICgocHJlZCBzdHJpbmdwKQogICAg ICAgICAod2hlbiBkZWJvdW5jZS10aW1lcgogICAgICAgICAgIChjYW5jZWwtdGltZXIgZGVib3Vu Y2UtdGltZXIpKQogICAgICAgICAodW5sZXNzIChzdHJpbmc9IGFjdGlvbiBpbnB1dCkKICAgICAg ICAgICAoZnVuY2FsbCBhc3luYyAoc2V0cSBpbnB1dCAiIikpIDs7IGNhbmNlbCBydW5uaW5nIHBy b2Nlc3MKICAgICAgICAgICAodW5sZXNzIChzdHJpbmc9IGFjdGlvbiAiIikKICAgICAgICAgICAg IChzZXRxIGRlYm91bmNlLXRpbWVyIChydW4tYXQtdGltZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgrIGRlYm91bmNlIChpZiB1bmxvY2tlZCAwIHRocm90dGxlKSkgbmlsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoZnVuY2FsbCBhc3lu YyAoc2V0cSB1bmxvY2tlZCBuaWwgaW5wdXQgYWN0aW9uKSkpKSkpKSkKICAgICAgICAoJ2Rlc3Ry b3kKICAgICAgICAgKGNhbmNlbC10aW1lciB0aHJvdHRsZS10aW1lcikKICAgICAgICAgKHdoZW4g ZGVib3VuY2UtdGltZXIKICAgICAgICAgICAoY2FuY2VsLXRpbWVyIGRlYm91bmNlLXRpbWVyKSkK ICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ2Rlc3Ryb3kpKQogICAgICAgIChfIChmdW5jYWxsIGFz eW5jIGFjdGlvbikpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXJlZnJlc2gtaW1tZWRpYXRl IChhc3luYykKICAiQ3JlYXRlIGFzeW5jIGZ1bmN0aW9uIGZyb20gQVNZTkMsIHdoaWNoIHJlZnJl c2hlcyB0aGUgZGlzcGxheS4KClRoZSByZWZyZXNoIGhhcHBlbnMgaW1tZWRpYXRlbHkgd2hlbiBj YW5kaWRhdGVzIGFyZSBwdXNoZWQuIgogIChsYW1iZGEgKGFjdGlvbikKICAgIChwY2FzZSBhY3Rp b24KICAgICAgKChvciAocHJlZCBsaXN0cCkgKHByZWQgc3RyaW5ncCkgJ2ZsdXNoKQogICAgICAg KHByb2cxIChmdW5jYWxsIGFzeW5jIGFjdGlvbikKICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ3Jl ZnJlc2gpKSkKICAgICAgKF8gKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKSkpKSkKCihkZWZ1biBjb25z dWx0LS1hc3luYy1yZWZyZXNoLXRpbWVyIChhc3luYyAmb3B0aW9uYWwgZGVsYXkpCiAgIkNyZWF0 ZSBhc3luYyBmdW5jdGlvbiBmcm9tIEFTWU5DLCB3aGljaCByZWZyZXNoZXMgdGhlIGRpc3BsYXku CgpUaGUgcmVmcmVzaCBoYXBwZW5zIGFmdGVyIGEgREVMQVksIGRlZmF1bHRpbmcgdG8gYGNvbnN1 bHQtYXN5bmMtcmVmcmVzaC1kZWxheScuIgogIChsZXQgKCh0aW1lcikgKHJlZnJlc2ggdCkgKGRl bGF5IChvciBkZWxheSBjb25zdWx0LWFzeW5jLXJlZnJlc2gtZGVsYXkpKSkKICAgIChsYW1iZGEg KGFjdGlvbikKICAgICAgKHBjYXNlIGFjdGlvbgogICAgICAgICgob3IgKHByZWQgbGlzdHApIChw cmVkIHN0cmluZ3ApICdyZWZyZXNoICdmbHVzaCkKICAgICAgICAgKHNldHEgcmVmcmVzaCB0KSkK ICAgICAgICAoJ2Rlc3Ryb3kgKGNhbmNlbC10aW1lciB0aW1lcikpCiAgICAgICAgKCdzZXR1cAog ICAgICAgICAoc2V0cSB0aW1lciAocnVuLWF0LXRpbWUKICAgICAgICAgICAgICAgICAgICAgIGRl bGF5IGRlbGF5CiAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAgICAg ICAgICAgICAgICh3aGVuIHJlZnJlc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBy ZWZyZXNoIG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAncmVm cmVzaCkpKSkpKSkKICAgICAgKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKSkpKQoKKGRlZm1hY3JvIGNv bnN1bHQtLWFzeW5jLXRyYW5zZm9ybSAoYXN5bmMgJnJlc3QgdHJhbnNmb3JtKQogICJVc2UgRlVO IHRvIFRSQU5TRk9STSBjYW5kaWRhdGVzIG9mIEFTWU5DLiIKICAobGV0ICgoYXN5bmMtdmFyICht YWtlLXN5bWJvbCAiYXN5bmMiKSkKICAgICAgICAoYWN0aW9uLXZhciAobWFrZS1zeW1ib2wgImFj dGlvbiIpKSkKICAgIGAobGV0ICgoLGFzeW5jLXZhciAsYXN5bmMpKQogICAgICAgKGxhbWJkYSAo LGFjdGlvbi12YXIpCiAgICAgICAgIChmdW5jYWxsICxhc3luYy12YXIgKGlmIChsaXN0cCAsYWN0 aW9uLXZhcikgKCxAdHJhbnNmb3JtICxhY3Rpb24tdmFyKSAsYWN0aW9uLXZhcikpKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLWFzeW5jLW1hcCAoYXN5bmMgZnVuKQogICJNYXAgY2FuZGlkYXRlcyBvZiBB U1lOQyBieSBGVU4uIgogIChjb25zdWx0LS1hc3luYy10cmFuc2Zvcm0gYXN5bmMgbWFwY2FyIGZ1 bikpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtZmlsdGVyIChhc3luYyBmdW4pCiAgIkZpbHRlciBj YW5kaWRhdGVzIG9mIEFTWU5DIGJ5IEZVTi4iCiAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBh c3luYyBzZXEtZmlsdGVyIGZ1bikpCgooZGVmdW4gY29uc3VsdC0tY29tbWFuZC1hcmdzIChjbWQp CiAgIlNwbGl0IGNvbW1hbmQgYXJndW1lbnRzIGFuZCBhcHBlbmQgdG8gQ01ELiIKICAoc2V0cSBj bWQgKHNwbGl0LXN0cmluZy1hbmQtdW5xdW90ZSBjbWQpKQogIChsYW1iZGEgKGlucHV0KQogICAg KHNhdmUtbWF0Y2gtZGF0YQogICAgICAobGV0ICgob3B0cykpCiAgICAgICAgKHdoZW4gKHN0cmlu Zy1tYXRjaCAiICstLVxcKCArXFx8JFxcKSIgaW5wdXQpCiAgICAgICAgICA7OyBzcGxpdC1zdHJp bmctYW5kLXVucXVvdGUgbW9kaWZpZXMgdGhlIG1hdGNoIGRhdGEKICAgICAgICAgIDs7IGFuZCBm YWlscyBpZiB0aGUgcXVvdGVzIGFyZSBpbnZhbGlkLiBJZ25vcmUgaXQuCiAgICAgICAgICAoc2V0 cSBvcHRzIChzdWJzdHJpbmcgaW5wdXQgKG1hdGNoLWVuZCAwKSkKICAgICAgICAgICAgICAgIGlu cHV0IChzdWJzdHJpbmcgaW5wdXQgMCAobWF0Y2gtYmVnaW5uaW5nIDApKQogICAgICAgICAgICAg ICAgb3B0cyAoaWdub3JlLWVycm9ycyAoc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlIG9wdHMpKSkp CiAgICAgICAgKG1hcGNhbiAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAoaWYgKHN0cmlu Zz0geCAiT1BUUyIpCiAgICAgICAgICAgICAgICAgICAgICBvcHRzCiAgICAgICAgICAgICAgICAg ICAgKGxpc3QgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiQVJHIiBpbnB1dCB4ICdmaXhlZGNh c2UgJ2xpdGVyYWwpKSkpCiAgICAgICAgICAgICAgICBjbWQpKSkpKQoKKGRlZm1hY3JvIGNvbnN1 bHQtLWFzeW5jLWNvbW1hbmQgKGNtZCAmcmVzdCB0cmFuc2Zvcm1zKQogICJBc3luY2hyb25vdXMg Q01EIHBpcGVsaW5lIHdpdGggVFJBTlNGT1JNUy4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICBg KHRocmVhZC1maXJzdCAoY29uc3VsdC0tYXN5bmMtc2luaykKICAgICAoY29uc3VsdC0tYXN5bmMt cmVmcmVzaC10aW1lcikKICAgICAsQHRyYW5zZm9ybXMKICAgICAoY29uc3VsdC0tYXN5bmMtcHJv Y2VzcyAoY29uc3VsdC0tY29tbWFuZC1hcmdzICxjbWQpKQogICAgIChjb25zdWx0LS1hc3luYy10 aHJvdHRsZSkKICAgICAoY29uc3VsdC0tYXN5bmMtc3BsaXQpKSkKCjs7OzsgU3BlY2lhbCBrZXlt YXBzCgooZGVmdmFyIGNvbnN1bHQtYXN5bmMtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApCiAgIktl eW1hcCBhZGRlZCBmb3IgY29tbWFuZHMgd2l0aCBhc3luY2hyb25vdXMgY2FuZGlkYXRlcy4iKQoK KGRlZnZhciBjb25zdWx0LXByZXZpZXctbWFwIChtYWtlLXNwYXJzZS1rZXltYXApCiAgIktleW1h cCBhZGRlZCBmb3IgY29tbWFuZHMgd2l0aCBwcmV2aWV3LiIpCgooZGVmdmFyIGNvbnN1bHQtbmFy cm93LW1hcAogIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQogICAgKGRlZmluZS1r ZXkgbWFwICIgIiBjb25zdWx0LS1uYXJyb3ctc3BhY2UpCiAgICAoZGVmaW5lLWtleSBtYXAgWzEy N10gY29uc3VsdC0tbmFycm93LWRlbGV0ZSkKICAgIG1hcCkKICAiTmFycm93aW5nIGtleW1hcCB3 aGljaCBpcyBhZGRlZCB0byB0aGUgbG9jYWwgbWluaWJ1ZmZlciBtYXAuCk5vdGUgdGhhdCBgY29u c3VsdC1uYXJyb3cta2V5JyBhbmQgYGNvbnN1bHQtd2lkZW4ta2V5JyBhcmUgYm91bmQgZHluYW1p Y2FsbHkuIikKCjs7OzsgSW50ZXJuYWwgQVBJOiBjb25zdWx0LS1yZWFkCgooZGVmdW4gY29uc3Vs dC0tYWRkLWhpc3RvcnkgKGl0ZW1zKQogICJBZGQgSVRFTVMgdG8gdGhlIG1pbmlidWZmZXIgaGlz dG9yeSB2aWEgYG1pbmlidWZmZXItZGVmYXVsdC1hZGQtZnVuY3Rpb24nLiIKICAoc2V0cS1sb2Nh bCBtaW5pYnVmZmVyLWRlZmF1bHQtYWRkLWZ1bmN0aW9uCiAgICAgICAgICAgICAgKGxhbWJkYSAo KQogICAgICAgICAgICAgICAgKGNvbnN1bHQtLXJlbW92ZS1kdXBzCiAgICAgICAgICAgICAgICAg KGFwcGVuZAogICAgICAgICAgICAgICAgICA7OyB0aGUgZGVmYXVsdHMgYXJlIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGZ1dHVyZSBoaXN0b3J5CiAgICAgICAgICAgICAgICAgIChpZiAobGlzdHAg bWluaWJ1ZmZlci1kZWZhdWx0KQogICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1kZWZh dWx0CiAgICAgICAgICAgICAgICAgICAgKGxpc3QgbWluaWJ1ZmZlci1kZWZhdWx0KSkKICAgICAg ICAgICAgICAgICAgOzsgdGhlbiBvdXIgY3VzdG9tIGl0ZW1zCiAgICAgICAgICAgICAgICAgIChk ZWxldGUgIiIgKGRlbHEgbmlsIChpZiAobGlzdHAgaXRlbXMpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpdGVtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsaXN0IGl0ZW1zKSkpKQogICAgICAgICAgICAgICAgICA7OyB0aGVuIGFs bCB0aGUgY29tcGxldGlvbnMKICAgICAgICAgICAgICAgICAgKGFsbC1jb21wbGV0aW9ucyAiIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZmZXItY29tcGxldGlvbi10 YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZmZXItY29tcGxl dGlvbi1wcmVkaWNhdGUpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1zZXR1cC1rZXltYXAgKGtleW1h cCBhc3luYyBuYXJyb3cgcHJldmlldy1rZXkpCiAgIlNldHVwIG1pbmlidWZmZXIga2V5bWFwLgoK S0VZTUFQIGlzIGEgY29tbWFuZC1zcGVjaWZpYyBLRVlNQVAuCkFTWU5DIG11c3QgYmUgdCBmb3Ig YXN5bmMuCk5BUlJPVyBhcmUgdGhlIG5hcnJvdyBzZXR0aW5ncy4KUFJFVklFVy1LRVkgaXMgdGhl IHByZXZpZXcga2V5LiIKICAobGV0ICgob2xkLW1hcCAoY3VycmVudC1sb2NhbC1tYXApKQogICAg ICAgIChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQoKICAgIDs7IEFzeW5jIGtleXMgb3Zlcndy aXRpbmcgc29tZSB1bnVzYWJsZSBkZWZhdWx0cyBmb3IgdGhlIGRlZmF1bHQgY29tcGxldGlvbgog ICAgKHdoZW4gYXN5bmMKICAgICAgKHdoZW4gKGVxIChsb29rdXAta2V5IG9sZC1tYXAgIiAiKSAj J21pbmlidWZmZXItY29tcGxldGUtd29yZCkKICAgICAgICAoZGVmaW5lLWtleSBtYXAgIiAiICMn c2VsZi1pbnNlcnQtY29tbWFuZCkpCiAgICAgICh3aGVuIChlcSAobG9va3VwLWtleSBvbGQtbWFw ICJcdCIpICMnbWluaWJ1ZmZlci1jb21wbGV0ZSkKICAgICAgICAoZGVmaW5lLWtleSBtYXAgIlx0 IiAjJ21pbmlidWZmZXItY29tcGxldGlvbi1oZWxwKSkpCgogICAgOzsgQWRkIG5hcnJvdyBrZXlz CiAgICAod2hlbiBuYXJyb3cKICAgICAgKGNvbnN1bHQtLW5hcnJvdy1zZXR1cCBuYXJyb3cgbWFw KSkKCiAgICA7OyBQcmV2aWV3IHRyaWdnZXIga2V5cwogICAgKHdoZW4gKGFuZCBwcmV2aWV3LWtl eSAobm90IChlcSBwcmV2aWV3LWtleSAnYW55KSkpCiAgICAgIChsZXQgKChwcmV2aWV3LWtleSAo aWYgKGxpc3RwIHByZXZpZXcta2V5KSBwcmV2aWV3LWtleSAobGlzdCBwcmV2aWV3LWtleSkpKSkK ICAgICAgICAoZG9saXN0IChrZXkgcHJldmlldy1rZXkpCiAgICAgICAgICAodW5sZXNzIChsb29r dXAta2V5IG9sZC1tYXAga2V5KQogICAgICAgICAgICAoZGVmaW5lLWtleSBtYXAga2V5ICMnaWdu b3JlKSkpKSkKCiAgICA7OyBQdXQgdGhlIGtleW1hcCB0b2dldGhlcgogICAgKHVzZS1sb2NhbC1t YXAKICAgICAobWFrZS1jb21wb3NlZC1rZXltYXAKICAgICAgKGRlbHEgbmlsIChsaXN0IGtleW1h cAogICAgICAgICAgICAgICAgICAgICAgKGFuZCBhc3luYyBjb25zdWx0LWFzeW5jLW1hcCkKICAg ICAgICAgICAgICAgICAgICAgIChhbmQgbmFycm93IGNvbnN1bHQtbmFycm93LW1hcCkKICAgICAg ICAgICAgICAgICAgICAgIChhbmQgcHJldmlldy1rZXkgY29uc3VsdC1wcmV2aWV3LW1hcCkKICAg ICAgICAgICAgICAgICAgICAgIG1hcCkpCiAgICAgIG9sZC1tYXApKSkpCgooZGVmdW4gY29uc3Vs dC0tZnJ5LXRoZS10b2Z1cyAoJnJlc3QgXykKICAiRnJ5IHRoZSB0b2Z1cyBpbiB0aGUgbWluaWJ1 ZmZlci4iCiAgKGxldCogKChtaW4gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkpCiAgICAgICAgICht YXggKHBvaW50LW1heCkpCiAgICAgICAgIChwb3MgbWluKQogICAgICAgICAoY21pbiBjb25zdWx0 LS10b2Z1LWNoYXIpCiAgICAgICAgIChjbWF4ICgtICgrIGNvbnN1bHQtLXRvZnUtY2hhciBjb25z dWx0LS10b2Z1LXJhbmdlKSAxKSkpCiAgICAod2hpbGUgKGFuZCAoPCBwb3MgbWF4KSAoPD0gY21p biAoY2hhci1hZnRlciBwb3MpIGNtYXgpKQogICAgICAoc2V0cSBwb3MgKDErIHBvcykpKQogICAg KHdoZW4gKD4gcG9zIG1pbikKICAgICAgKHJlbW92ZS1saXN0LW9mLXRleHQtcHJvcGVydGllcyBt aW4gcG9zICcoZGlzcGxheSkpCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBtaW4gcG9zICdpbnZp c2libGUgdCkpKSkKCihjbC1kZWZ1biBjb25zdWx0LS1yZWFkLXNldHVwIChfcHJvbXB0IGNhbmRp ZGF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSBrZXltYXAg YWRkLWhpc3RvcnkgbmFycm93IHByZXZpZXcta2V5ICZhbGxvdy1vdGhlci1rZXlzKQogICJNaW5p YnVmZmVyIHNldHVwIGZvciBgY29uc3VsdC0tcmVhZCcuCgpTZWUgYGNvbnN1bHQtLXJlYWQnIGZv ciB0aGUgQ0FORElEQVRFUywgS0VZTUFQLCBBREQtSElTVE9SWSwgTkFSUk9XIGFuZCBQUkVWSUVX LUtFWSBhcmd1bWVudHMuIgogIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAjJ2Nv bnN1bHQtLWZyeS10aGUtdG9mdXMgbmlsIHQpCiAgKGNvbnN1bHQtLXNldHVwLWtleW1hcCBrZXlt YXAgKGZ1bmN0aW9ucCBjYW5kaWRhdGVzKSBuYXJyb3cgcHJldmlldy1rZXkpCiAgKGNvbnN1bHQt LWFkZC1oaXN0b3J5IGFkZC1oaXN0b3J5KSkKCihkZWZtYWNybyBjb25zdWx0LS1yZWFkLWRlZmF1 bHRzICgmcmVzdCBkZWZhdWx0KQogICJTZXQgREVGQVVMVCBvcHRpb25zLiIKICAobWFjcm9leHAt cHJvZ24KICAgKG1hcGNhcgogICAgKHBjYXNlLWxhbWJkYSAoYCgsa2V5ICx2YWwpKQogICAgICBg KHVubGVzcyAocGxpc3QtbWVtYmVyIG9wdGlvbnMgLChpbnRlcm4gKGZvcm1hdCAiOiVzIiBrZXkp KSkKICAgICAgICAgKHNldHEgb3B0aW9ucyAocGxpc3QtcHV0IG9wdGlvbnMgLChpbnRlcm4gKGZv cm1hdCAiOiVzIiBrZXkpKSAoc2V0cSAsa2V5ICx2YWwpKSkpKQogICAgZGVmYXVsdCkpKQoKKGNs LWRlZnVuIGNvbnN1bHQtLXJlYWQgKHByb21wdCBjYW5kaWRhdGVzICZyZXN0IG9wdGlvbnMgJmtl eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZXF1aXJlLW1hdGNo IGhpc3RvcnkgZGVmYXVsdCBrZXltYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXRlZ29yeSBpbml0aWFsIG5hcnJvdyBhZGQtaGlzdG9yeSBhbm5vdGF0ZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByZXZpZXcgcHJldmlldy1rZXkgc29ydCBkZWZhdWx0LXRvcCBs b29rdXApCiAgIkVuaGFuY2VkIGNvbXBsZXRpbmcgcmVhZCBmdW5jdGlvbi4KCkFyZ3VtZW50czoK ClBST01QVCBpcyB0aGUgc3RyaW5nIHRvIHByb21wdCB3aXRoLgpDQU5ESURBVEVTIGlzIHRoZSBj YW5kaWRhdGUgbGlzdCBvciBhbGlzdC4KCktleXdvcmQgT1BUSU9OUzoKClBSRURJQ0FURSBpcyBh IGZpbHRlciBmdW5jdGlvbiBmb3IgdGhlIGNhbmRpZGF0ZXMuClJFUVVJUkUtTUFUQ0ggZXF1YWxz IHQgbWVhbnMgdGhhdCBhbiBleGFjdCBtYXRjaCBpcyByZXF1aXJlZC4KSElTVE9SWSBpcyB0aGUg c3ltYm9sIG9mIHRoZSBoaXN0b3J5IHZhcmlhYmxlLgpERUZBVUxUIGlzIHRoZSBkZWZhdWx0IHNl bGVjdGVkIHZhbHVlLgpBREQtSElTVE9SWSBpcyBhIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIHRvIHRo ZSBoaXN0b3J5LgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4KU09SVCBzaG91 bGQgYmUgc2V0IHRvIG5pbCBpZiB0aGUgY2FuZGlkYXRlcyBhcmUgYWxyZWFkeSBzb3J0ZWQuCkxP T0tVUCBpcyBhIGZ1bmN0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHJlc3VsdC4KQU5OT1RB VEUgaXMgdGhlIGFubm90YXRpb24gZnVuY3Rpb24uCklOSVRJQUwgaXMgaW5pdGlhbCBpbnB1dC4K REVGQVVMVC1UT1AgbXVzdCBiZSBuaWwgaWYgdGhlIGRlZmF1bHQgY2FuZGlkYXRlIHNob3VsZCBu b3QgYmUgbW92ZWQgdG8gdGhlIHRvcC4KUFJFVklFVyBpcyBhIHByZXZpZXcgZnVuY3Rpb24sIHNl ZSBgY29uc3VsdC0td2l0aC1wcmV2aWV3Jy4KUFJFVklFVy1LRVkgYXJlIHRoZSBwcmV2aWV3IGtl eXMgKG5pbCwgJ2FueSwgYSBzaW5nbGUga2V5IG9yIGEgbGlzdCBvZiBrZXlzKS4KTkFSUk9XIGlz IGFuIGFsaXN0IG9mIG5hcnJvd2luZyBwcmVmaXggc3RyaW5ncyBhbmQgZGVzY3JpcHRpb24uCktF WU1BUCBpcyBhIGNvbW1hbmQtc3BlY2lmaWMga2V5bWFwLiIKICA7OyBzdXBwb3J0ZWQgdHlwZXMK ICAoY2wtYXNzZXJ0IChvciAoZnVuY3Rpb25wIGNhbmRpZGF0ZXMpICAgICA7OyBhc3luYyB0YWJs ZQogICAgICAgICAgICAgICAgIChub3QgY2FuZGlkYXRlcykgICAgICAgICAgIDs7IG5pbCwgZW1w dHkgbGlzdAogICAgICAgICAgICAgICAgIChvYmFycmF5cCBjYW5kaWRhdGVzKSAgICAgIDs7IG9i YXJyYXkKICAgICAgICAgICAgICAgICAoc3RyaW5ncCAoY2FyIGNhbmRpZGF0ZXMpKSA7OyBzdHJp bmcgbGlzdAogICAgICAgICAgICAgICAgIChzeW1ib2xwIChjYXIgY2FuZGlkYXRlcykpIDs7IHN5 bWJvbCBsaXN0CiAgICAgICAgICAgICAgICAgKGNvbnNwIChjYXIgY2FuZGlkYXRlcykpKSkgOzsg YWxpc3QKICAoaWdub3JlIGRlZmF1bHQtdG9wIG5hcnJvdyBhZGQtaGlzdG9yeSBrZXltYXApCiAg KGNvbnN1bHQtLXJlYWQtZGVmYXVsdHMKICAgKHByZXZpZXcta2V5IGNvbnN1bHQtcHJldmlldy1r ZXkpCiAgIChzb3J0IHQpCiAgIChkZWZhdWx0LXRvcCB0KQogICAobG9va3VwIChsYW1iZGEgKF9p bnB1dCBfY2FuZHMgeCkgeCkpKQogIChtaW5pYnVmZmVyLXdpdGgtc2V0dXAtaG9vawogICAgICAo OmFwcGVuZCAobGFtYmRhICgpIChhcHBseSAjJ2NvbnN1bHQtLXJlYWQtc2V0dXAgcHJvbXB0IGNh bmRpZGF0ZXMgb3B0aW9ucykpKQogICAgKGNvbnN1bHQtLXdpdGgtYXN5bmMgKGFzeW5jIGNhbmRp ZGF0ZXMpCiAgICAgIDs7IE5PVEU6IERvIG5vdCB1bm5lY2Vzc2FyaWx5IGxldC1iaW5kIHRoZSBs YW1iZGFzIHRvIGF2b2lkCiAgICAgIDs7IG92ZXJjYXB0dXJpbmcgaW4gdGhlIGludGVycHJldGVy LiBUaGlzIHdpbGwgbWFrZSBjbG9zdXJlcyBhbmQgdGhlCiAgICAgIDs7IGxhbWJkYSBzdHJpbmcg cmVwcmVzZW50YXRpb24gbGFyZ2VyLCB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcgbXVjaCB3b3JzZS4K ICAgICAgOzsgRm9ydHVuYXRlbHkgdGhlIG92ZXJjYXB0dXJpbmcgcHJvYmxlbSBkb2VzIG5vdCBh ZmZlY3QgdGhlIGJ5dGVjb2RlCiAgICAgIDs7IGludGVycHJldGVyIHdoaWNoIGRvZXMgYSBwcm9w ZXIgc2NvcGUgYW5hbHlpcy4KICAgICAgKGxldCAoKHJlc3VsdAogICAgICAgICAgICAgKGNvbnN1 bHQtLXdpdGgtcHJldmlldyBwcmV2aWV3LWtleSBwcmV2aWV3CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsYW1iZGEgKGlucHV0IGNhbmQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgbG9va3VwIGlucHV0IChmdW5jYWxsIGFzeW5jICdn ZXQpIGNhbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwbHktcGFy dGlhbGx5ICMncnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uc3VsdC0tY29tcGxldGlv bi1jYW5kaWRhdGUtaG9vaykKICAgICAgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZCBwcm9tcHQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChzdHIgcHJlZCBhY3Rpb24p CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIGFjdGlvbiAnbWV0YWRh dGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChtZXRhZGF0YQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLEAod2hlbiBhbm5vdGF0ZSBgKChh bm5vdGF0aW9uLWZ1bmN0aW9uIC4gLGFubm90YXRlKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAsQCh3aGVuIGNhdGVnb3J5IGAoKGNhdGVnb3J5IC4gLGNhdGVnb3J5 KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQCh1bmxlc3Mgc29y dCAnKChjeWNsZS1zb3J0LWZ1bmN0aW9uIC4gaWRlbnRpdHkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5LXNvcnQtZnVuY3Rp b24gLiBpZGVudGl0eSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bXBsZXRlLXdpdGgtYWN0aW9uIGFjdGlvbiAoZnVuY2FsbCBhc3luYyAnZ2V0KSBzdHIgcHJlZCkp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZXF1aXJlLW1hdGNo IGluaXRpYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN5bWJvbHAgaGlz dG9yeSkgaGlzdG9yeSAoY2FkciBoaXN0b3J5KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZWZhdWx0KSkpKQogICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGhpc3RvcnkKICAgICAg ICAgIChgKDppbnB1dCAsdmFyKQogICAgICAgICAgIChzZXQgdmFyIChjZHIgKHN5bWJvbC12YWx1 ZSB2YXIpKSkKICAgICAgICAgICAoYWRkLXRvLWhpc3RvcnkgdmFyIChjZHIgcmVzdWx0KSkpCiAg ICAgICAgICAoKHByZWQgc3ltYm9scCkpKQogICAgICAgIChjYXIgcmVzdWx0KSkpKSkKCihhZHZp Y2UtYWRkICMnY29uc3VsdC0tcmVhZCA6ZmlsdGVyLWFyZ3MgIydjb25zdWx0LS1tZXJnZS1jb25m aWcpCgo7Ozs7IEludGVybmFsIEFQSTogY29uc3VsdC0tbXVsdGkKCihkZWZzdWJzdCBjb25zdWx0 LS1tdWx0aS1zb3VyY2UgKHNvdXJjZXMgY2FuZCkKICAiTG9va3VwIHNvdXJjZSBmb3IgQ0FORCBm cm9tIFNPVVJDRVMgbGlzdC4iCiAgKG50aCAoLSAoYXJlZiBjYW5kIDApIGNvbnN1bHQtLXRvZnUt Y2hhcikgc291cmNlcykpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktcHJlZGljYXRlIChzb3VyY2Vz KQogICJSZXR1cm4gcHJlZGljYXRlIGZ1bmN0aW9uIHVzZWQgYnkgYGNvbnN1bHQtLW11bHRpJyB3 aXRoIFNPVVJDRVMuIgogIChsYW1iZGEgKGNhbmQpCiAgICAobGV0KiAoKG5hcnJvdyAocGxpc3Qt Z2V0IChjb25zdWx0LS1tdWx0aS1zb3VyY2Ugc291cmNlcyBjYW5kKSA6bmFycm93KSkKICAgICAg ICAgICAodHlwZSAob3IgKGNhci1zYWZlIG5hcnJvdykgbmFycm93IC0xKSkpCiAgICAgIChpZiAo ZXEgY29uc3VsdC0tbmFycm93IDMyKSA7OyBuYXJyb3dlZCB0byBoaWRkZW4gY2FuZGlkYXRlcwog ICAgICAgICAgKD0gdHlwZSAzMikKICAgICAgICAoYW5kCiAgICAgICAgICgvPSB0eXBlIDMyKSA7 OyBub24taGlkZGVuIGNhbmRpZGF0ZXMKICAgICAgICAgKG9yIChub3QgY29uc3VsdC0tbmFycm93 KSAoPSB0eXBlIGNvbnN1bHQtLW5hcnJvdykpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1u YXJyb3cgKHNvdXJjZXMpCiAgIlJldHVybiBuYXJyb3cgbGlzdCB1c2VkIGJ5IGBjb25zdWx0LS1t dWx0aScgd2l0aCBTT1VSQ0VTLiIKICAoZGVscSBuaWwgKG1hcGNhciAobGFtYmRhIChzcmMpCiAg ICAgICAgICAgICAgICAgICAgICAobGV0ICgobmFycm93IChwbGlzdC1nZXQgc3JjIDpuYXJyb3cp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgKHBsaXN0LWdldCBzcmMgOm5hbWUp KSkKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAg ICgoY29uc3AgbmFycm93KSBuYXJyb3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCBu YXJyb3cgbmFtZSkgKGNvbnMgbmFycm93IG5hbWUpKSkpKQogICAgICAgICAgICAgICAgICAgIHNv dXJjZXMpKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1hbm5vdGF0ZSAoc291cmNlcyBtYXgtbGVu KQogICJSZXR1cm4gYW5ub3RhdGlvbiBmdW5jdGlvbiB1c2VkIGJ5IGBjb25zdWx0LS1tdWx0aScg d2l0aCBTT1VSQ0VTLgoKTUFYLUxFTiBpcyB0aGUgbWF4aW11bSBjYW5kaWRhdGUgbGVuZ3RoLiIK ICAobGFtYmRhIChjYW5kKQogICAgKGxldCogKChzcmMgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBz b3VyY2VzIGNhbmQpKQogICAgICAgICAgIChhbm5vdGF0ZSAocGxpc3QtZ2V0IHNyYyA6YW5ub3Rh dGUpKQogICAgICAgICAgIChhbm4gKGlmIGFubm90YXRlCiAgICAgICAgICAgICAgICAgICAgKGZ1 bmNhbGwgYW5ub3RhdGUgKGNkciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1tdWx0aSBj YW5kKSkpCiAgICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgc3JjIDpuYW1lKSkpKQogICAgICAo d2hlbiBhbm4KICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxheSBgKHNwYWNl IDphbGlnbi10byAoKyBsZWZ0ICxtYXgtbGVuKSkpIGFubikpKSkpCgooZGVmdW4gY29uc3VsdC0t bXVsdGktbG9va3VwIChzb3VyY2VzKQogICJMb29rdXAgZnVuY3Rpb24gdXNlZCBieSBgY29uc3Vs dC0tbXVsdGknIHdpdGggU09VUkNFUy4iCiAgKGxhbWJkYSAoXyBjYW5kaWRhdGVzIGNhbmQpCiAg ICAoaWYtbGV0IChmb3VuZCAobWVtYmVyIGNhbmQgY2FuZGlkYXRlcykpCiAgICAgICAgKGNvbnMg KGNkciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1tdWx0aSAoY2FyIGZvdW5kKSkpCiAg ICAgICAgICAgICAgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBzb3VyY2VzIGNhbmQpKQogICAgICAo dW5sZXNzIChzdHJpbmctYmxhbmstcCBjYW5kKQogICAgICAgIChsaXN0IGNhbmQpKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLW11bHRpLWNhbmRpZGF0ZXMgKHNvdXJjZXMpCiAgIlJldHVybiBjYW5kaWRh dGVzIGZyb20gU09VUkNFUyBmb3IgYGNvbnN1bHQtLW11bHRpJy4iCiAgKGxldCAoKGlkeCAwKSAo bWF4LWxlbiAwKSAoY2FuZGlkYXRlcykpCiAgICAoZG9saXN0IChzcmMgc291cmNlcyAoY29ucyAo KyAzIG1heC1sZW4pIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpCiAgICAgIChsZXQqICgoZmFjZSAo cGxpc3QtZ2V0IHNyYyA6ZmFjZSkpCiAgICAgICAgICAgICAoY2F0IChwbGlzdC1nZXQgc3JjIDpj YXRlZ29yeSkpCiAgICAgICAgICAgICAoaXRlbXMgKHBsaXN0LWdldCBzcmMgOml0ZW1zKSkKICAg ICAgICAgICAgIChpdGVtcyAoaWYgKGZ1bmN0aW9ucCBpdGVtcykgKGZ1bmNhbGwgaXRlbXMpIGl0 ZW1zKSkpCiAgICAgICAgKGRvbGlzdCAoaXRlbSBpdGVtcykKICAgICAgICAgIChsZXQqICgoY2Fu ZCAoY29uY2F0IChjaGFyLXRvLXN0cmluZyAoKyBjb25zdWx0LS10b2Z1LWNoYXIgaWR4KSkgaXRl bSkpCiAgICAgICAgICAgICAgICAgKGxlbiAobGVuZ3RoIGNhbmQpKSkKICAgICAgICAgICAgKGFk ZC10ZXh0LXByb3BlcnRpZXMgMCAxIChsaXN0ICdpbnZpc2libGUgdCAnY29uc3VsdC1tdWx0aSAo Y29ucyBjYXQgaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmQpCiAg ICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAxIGxlbiAnZmFjZSBmYWNlIGNhbmQpCiAgICAg ICAgICAgICh3aGVuICg+IGxlbiBtYXgtbGVuKSAoc2V0cSBtYXgtbGVuIGxlbikpCiAgICAgICAg ICAgIChwdXNoIGNhbmQgY2FuZGlkYXRlcykpKSkKICAgICAgKHNldHEgaWR4ICgxKyBpZHgpKSkp KQoKKGRlZnVuIGNvbnN1bHQtLW11bHRpLXByZXByb2Nlc3MgKHNvdXJjZXMpCiAgIlByZXByb2Nl c3MgU09VUkNFUywgZmlsdGVyIGJ5IHByZWRpY2F0ZS4iCiAgKHNlcS1maWx0ZXIgKGxhbWJkYSAo c3JjKQogICAgICAgICAgICAgICAgKGlmLWxldCAocHJlZCAocGxpc3QtZ2V0IHNyYyA6cHJlZGlj YXRlKSkKICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBwcmVkKQogICAgICAgICAgICAgICAg ICB0KSkKICAgICAgICAgICAgICAobWFwY2FyIChsYW1iZGEgKHNyYykKICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIChzeW1ib2xwIHNyYykgKHN5bWJvbC12YWx1ZSBzcmMpIHNyYykpCiAgICAg ICAgICAgICAgICAgICAgICBzb3VyY2VzKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGkgKHByb21w dCBzb3VyY2VzICZyZXN0IG9wdGlvbnMpCiAgIlNlbGVjdCBmcm9tIGNhbmRpZGF0ZXMgdGFrZW4g ZnJvbSBhIGxpc3Qgb2YgU09VUkNFUy4KClBST01QVCBpcyB0aGUgbWluaWJ1ZmZlciBwcm9tcHQu Ck9QVElPTlMgaXMgdGhlIHBsaXN0IG9mIG9wdGlvbnMgcGFzc2VkIHRvIGBjb25zdWx0LS1yZWFk Jy4KClRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZWxlY3RlZCBjYW5kaWRhdGUgaW4gdGhlIGZv cm0gKGNvbnMgY2FuZGlkYXRlCnNvdXJjZS12YWx1ZSkuIFRoZSBzb3VyY2VzIG9mIHRoZSBzb3Vy Y2UgbGlzdCBjYW4gZWl0aGVyIGJlIHN5bWJvbHMgb2Ygc291cmNlCnZhcmlhYmxlcyBvciBzb3Vy Y2UgdmFsdWVzLiBTb3VyY2UgdmFsdWVzIG11c3QgYmUgcGxpc3RzIHdpdGggdGhlIGZvbGxvd2lu ZwpmaWVsZHM6CgpSZXF1aXJlZCBzb3VyY2UgZmllbGRzOgoqIDpjYXRlZ29yeSAtIENvbXBsZXRp b24gY2F0ZWdvcnkuCiogOml0ZW1zIC0gTGlzdCBvZiBjYW5kaWRhdGUgc3RyaW5ncyBvciBmdW5j dGlvbiByZXR1cm5pbmcgbGlzdCBvZiBzdHJpbmdzLgoKT3B0aW9uYWwgc291cmNlIGZpZWxkczoK KiA6bmFtZSAtIE5hbWUgb2YgdGhlIHNvdXJjZSwgdXNlZCBmb3IgbmFycm93aW5nIGFuZCBhbm5v dGF0aW9uLgoqIDpuYXJyb3cgLSBOYXJyb3dpbmcgY2hhcmFjdGVyIG9yIChjaGFyYWN0ZXIgLiBz dHJpbmcpIHBhaXIuCiogOnByZWRpY2F0ZSAtIEZ1bmN0aW9uIHdoaWNoIG11c3QgcmV0dXJuIHQg aWYgdGhlIHNvdXJjZSBpcyBlbmFibGVkLgoqIDpmYWNlIC0gRmFjZSB1c2VkIGZvciBoaWdobGln aHRpbmcgdGhlIGNhbmRpZGF0ZXMuCiogOmFubm90YXRlIC0gQW5ub3RhdGlvbiBmdW5jdGlvbiBj YWxsZWQgZm9yIGVhY2ggY2FuZGlkYXRlLCByZXR1cm5zIHN0cmluZy4KKiA6aGlzdG9yeSAtIE5h bWUgb2YgaGlzdG9yeSB2YXJpYWJsZSB0byBhZGQgc2VsZWN0ZWQgY2FuZGlkYXRlLgoqIEFyYml0 cmFyeSBvdGhlciBmaWVsZHMgc3BlY2lmaWMgdG8geW91ciB1c2UgY2FzZS4iCiAgKGxldCogKChz b3VyY2VzIChjb25zdWx0LS1tdWx0aS1wcmVwcm9jZXNzIHNvdXJjZXMpKQogICAgICAgICAoY2Fu ZGlkYXRlcwogICAgICAgICAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjCiAgICAgICAgICAg KGxldCAoKGNvbnN1bHQtLWNhY2hlKSkKICAgICAgICAgICAgIChjb25zdWx0LS1tdWx0aS1jYW5k aWRhdGVzIHNvdXJjZXMpKSkpCiAgICAgICAgIChzZWxlY3RlZCAoYXBwbHkgIydjb25zdWx0LS1y ZWFkIHByb21wdAogICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgY2FuZGlkYXRlcykKICAg ICAgICAgICAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgICdjb25zdWx0LW11bHRpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgOnByZWRpY2F0ZSAoY29uc3VsdC0tbXVsdGktcHJlZGljYXRlIHNv dXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOm5hcnJvdyAgICAoY29uc3VsdC0tbXVs dGktbmFycm93IHNvdXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmFubm90YXRlICAo Y29uc3VsdC0tbXVsdGktYW5ub3RhdGUgc291cmNlcyAoY2FyIGNhbmRpZGF0ZXMpKQogICAgICAg ICAgICAgICAgICAgICAgICAgIDpsb29rdXAgICAgKGNvbnN1bHQtLW11bHRpLWxvb2t1cCBzb3Vy Y2VzKQogICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpKSkKICAgICh3aGVuLWxldCAo aGlzdG9yeSAocGxpc3QtZ2V0IChjZHIgc2VsZWN0ZWQpIDpoaXN0b3J5KSkKICAgICAgKGFkZC10 by1oaXN0b3J5IGhpc3RvcnkgKGNhciBzZWxlY3RlZCkpKQogICAgc2VsZWN0ZWQpKQoKOzs7OyBJ bnRlcm5hbCBBUEk6IGNvbnN1bHQtLXByb21wdAoKKGNsLWRlZnVuIGNvbnN1bHQtLXByb21wdCAo cHJvbXB0ICZrZXkgaGlzdG9yeSBhZGQtaGlzdG9yeSBpbml0aWFsIGRlZmF1bHQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtleW1hcCBwcmV2aWV3IChwcmV2aWV3LWtleSBjb25z dWx0LXByZXZpZXcta2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5z Zm9ybSAobGFtYmRhIChfIHgpIHgpKSkKICAiUmVhZCBmcm9tIG1pbmlidWZmZXIuCgpQUk9NUFQg aXMgdGhlIHN0cmluZyB0byBwcm9tcHQgd2l0aC4KVFJBTlNGT1JNIGlzIGEgZnVuY3Rpb24gd2hp Y2ggaXMgYXBwbGllZCB0byB0aGUgY3VycmVudCBpbnB1dCBzdHJpbmcuCkhJU1RPUlkgaXMgdGhl IHN5bWJvbCBvZiB0aGUgaGlzdG9yeSB2YXJpYWJsZS4KSU5JVElBTCBpcyBpbml0aWFsIGlucHV0 LgpERUZBVUxUIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHZhbHVlLgpBREQtSElTVE9SWSBpcyBh IGxpc3Qgb2YgaXRlbXMgdG8gYWRkIHRvIHRoZSBoaXN0b3J5LgpQUkVWSUVXIGlzIGEgcHJldmll dyBmdW5jdGlvbiwgc2VlIGBjb25zdWx0LS13aXRoLXByZXZpZXcnLgpQUkVWSUVXLUtFWSBhcmUg dGhlIHByZXZpZXcga2V5cyAobmlsLCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtl eXMpLgpLRVlNQVAgaXMgYSBjb21tYW5kLXNwZWNpZmljIGtleW1hcC4iCiAgKG1pbmlidWZmZXIt d2l0aC1zZXR1cC1ob29rCiAgICAgICg6YXBwZW5kIChsYW1iZGEgKCkKICAgICAgICAgICAgICAg ICAoY29uc3VsdC0tc2V0dXAta2V5bWFwIGtleW1hcCBuaWwgbmlsIHByZXZpZXcta2V5KQogICAg ICAgICAgICAgICAgIChjb25zdWx0LS1hZGQtaGlzdG9yeSBhZGQtaGlzdG9yeSkpKQogICAgKGNv bnN1bHQtLXdpdGgtcHJldmlldyBwcmV2aWV3LWtleSBwcmV2aWV3IHRyYW5zZm9ybSAjJ21pbmli dWZmZXItY29udGVudHMtbm8tcHJvcGVydGllcwogICAgICAocmVhZC1mcm9tLW1pbmlidWZmZXIg cHJvbXB0IGluaXRpYWwgbmlsIG5pbCBoaXN0b3J5IGRlZmF1bHQpKSkpCgooYWR2aWNlLWFkZCAj J2NvbnN1bHQtLXByb21wdCA6ZmlsdGVyLWFyZ3MgIydjb25zdWx0LS1tZXJnZS1jb25maWcpCgo7 Ozs7IENvbW1hbmRzCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW11bHRpLW9jY3VyCgo7OyBzZWUg aHR0cHM6Ly9naXRodWIuY29tL3JheG9kNTAyL3NlbGVjdHJ1bS9pc3N1ZXMvMjI2Cjs7OyMjI2F1 dG9sb2FkCihkZWZ1biBjb25zdWx0LW11bHRpLW9jY3VyIChidWZzIHJlZ2V4cCAmb3B0aW9uYWwg bmxpbmVzKQogICJJbXByb3ZlZCB2ZXJzaW9uIG9mIGBtdWx0aS1vY2N1cicgYmFzZWQgb24gYGNv bXBsZXRpbmctcmVhZC1tdWx0aXBsZScuCgpTZWUgYG11bHRpLW9jY3VyJyBmb3IgdGhlIG1lYW5p bmcgb2YgdGhlIGFyZ3VtZW50cyBCVUZTLCBSRUdFWFAgYW5kIE5MSU5FUy4iCiAgKGludGVyYWN0 aXZlIChjb25zCiAgICAgICAgICAgICAgICAobWFwY2FyICMnZ2V0LWJ1ZmZlcgogICAgICAgICAg ICAgICAgICAgICAgICAoY29tcGxldGluZy1yZWFkLW11bHRpcGxlICJCdWZmZXI6ICIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2ludGVybmFsLWNv bXBsZXRlLWJ1ZmZlcikpCiAgICAgICAgICAgICAgICAob2NjdXItcmVhZC1wcmltYXJ5LWFyZ3Mp KSkKICAob2NjdXItMSByZWdleHAgbmxpbmVzIGJ1ZnMpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1vdXRsaW5lCgooZGVmdW4gY29uc3VsdC0tb3V0bGluZS1jYW5kaWRhdGVzICgpCiAgIlJldHVy biBhbGlzdCBvZiBvdXRsaW5lIGhlYWRpbmdzIGFuZCBwb3NpdGlvbnMuIgogIChjb25zdWx0LS1m b3JiaWQtbWluaWJ1ZmZlcikKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxldCogKChsaW5l IChsaW5lLW51bWJlci1hdC1wb3MgKHBvaW50LW1pbikgY29uc3VsdC1saW5lLW51bWJlcnMtd2lk ZW4pKQogICAgICAgICAoaGVhZGluZy1yZWdleHAgKGNvbmNhdCAiXlxcKD86IiBvdXRsaW5lLXJl Z2V4cCAiXFwpIikpCiAgICAgICAgIChjYW5kaWRhdGVzKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgog ICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAod2hpbGUgKHNhdmUtZXhjdXJzaW9u IChyZS1zZWFyY2gtZm9yd2FyZCBoZWFkaW5nLXJlZ2V4cCBuaWwgdCkpCiAgICAgICAgKHNldHEg bGluZSAoKyBsaW5lIChjb25zdWx0LS1jb3VudC1saW5lcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkp CiAgICAgICAgKHB1c2ggKGxpc3QgKHBvaW50LW1hcmtlcikgbGluZQogICAgICAgICAgICAgICAg ICAgIChidWZmZXItc3Vic3RyaW5nIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5k LXBvc2l0aW9uKSkpCiAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICAodW5sZXNzIChl b2JwKSAoZm9yd2FyZC1jaGFyIDEpKSkpCiAgICAodW5sZXNzIGNhbmRpZGF0ZXMKICAgICAgKHVz ZXItZXJyb3IgIk5vIGhlYWRpbmdzIikpCiAgICAoY29uc3VsdC0tYWRkLWxpbmUtbnVtYmVyIGxp bmUgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3Vs dC1vdXRsaW5lICgpCiAgIkp1bXAgdG8gYW4gb3V0bGluZSBoZWFkaW5nLCBvYnRhaW5lZCBieSBt YXRjaGluZyBhZ2FpbnN0IGBvdXRsaW5lLXJlZ2V4cCcuCgpUaGlzIGNvbW1hbmQgc3VwcG9ydHMg Y2FuZGlkYXRlIHByZXZpZXcuClRoZSBzeW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1 dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1 bHQtLXJlYWQKICAgICJHbyB0byBoZWFkaW5nOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MgKGNvbnN1bHQtLW91dGxpbmUtY2FuZGlkYXRlcykpCiAgICA6Y2F0ZWdvcnkgJ2NvbnN1 bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOmxvb2t1 cCAjJ2NvbnN1bHQtLWxpbmUtbWF0Y2gKICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWxp bmUtaGlzdG9yeSkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAg IDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29tbWFuZDog Y29uc3VsdC1lcnJvcgoKKGRlZnVuIGNvbnN1bHQtLWVycm9yLWNhbmRpZGF0ZXMgKCkKICAiUmV0 dXJuIGFsaXN0IG9mIGVycm9ycyBhbmQgcG9zaXRpb25zLiIKICAobGV0ICgoY2FuZGlkYXRlcykK ICAgICAgICAocG9zIChwb2ludC1taW4pKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAod2hp bGUgKHNldHEgcG9zIChjb21waWxhdGlvbi1uZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgcG9z ICdjb21waWxhdGlvbi1tZXNzYWdlKSkKICAgICAgICAod2hlbi1sZXQqICgobXNnIChnZXQtdGV4 dC1wcm9wZXJ0eSBwb3MgJ2NvbXBpbGF0aW9uLW1lc3NhZ2UpKQogICAgICAgICAgICAgICAgICAg IChsb2MgKGNvbXBpbGF0aW9uLS1tZXNzYWdlLT5sb2MgbXNnKSkpCiAgICAgICAgICAoZ290by1j aGFyIHBvcykKICAgICAgICAgIChwdXNoIChsaXN0CiAgICAgICAgICAgICAgICAgKGNvbnN1bHQt LWZvbnQtbG9jayAoYnVmZmVyLXN1YnN0cmluZyBwb3MgKGxpbmUtZW5kLXBvc2l0aW9uKSkpCiAg ICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAgICAgICAgICAgICAgICAgICAg OzsgdGFrZW4gZnJvbSBjb21waWxlLmVsCiAgICAgICAgICAgICAgICAgICAgIChhcHBseSAjJ2Nv bXBpbGF0aW9uLWZpbmQtZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1h cmtlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWFyIChjb21waWxhdGlvbi0tbG9j LT5maWxlLXN0cnVjdCBsb2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhZGFyIChj b21waWxhdGlvbi0tbG9jLT5maWxlLXN0cnVjdCBsb2MpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbXBpbGF0aW9uLS1maWxlLXN0cnVjdC0+Zm9ybWF0cwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb21waWxhdGlvbi0tbG9jLT5maWxlLXN0cnVjdCBsb2MpKSkKICAgICAg ICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICAgICAgICAgICAgICA7 OyBsb2NhdGlvbiBtaWdodCBiZSBpbnZhbGlkIGJ5IG5vdwogICAgICAgICAgICAgICAgICAgKGln bm9yZS1lcnJvcnMKICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAoLSAoY29tcGls YXRpb24tLWxvYy0+bGluZSBsb2MpIDEpKQogICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1j aGFyIChjb21waWxhdGlvbi0tbG9jLT5jb2wgbG9jKSkpCiAgICAgICAgICAgICAgICAgICAocG9p bnQtbWFya2VyKSkKICAgICAgICAgICAgICAgICAocGNhc2UgKGNvbXBpbGF0aW9uLS1tZXNzYWdl LT50eXBlIG1zZykKICAgICAgICAgICAgICAgICAgICgwID9pKQogICAgICAgICAgICAgICAgICAg KDEgP3cpCiAgICAgICAgICAgICAgICAgICAoXyA/ZSkpKQogICAgICAgICAgICAgICAgY2FuZGlk YXRlcykpKSkKICAgIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVm dW4gY29uc3VsdC1lcnJvciAoKQogICJKdW1wIHRvIGEgY29tcGlsYXRpb24gZXJyb3IgaW4gdGhl IGN1cnJlbnQgYnVmZmVyLgoKVGhpcyBjb21tYW5kIHdvcmtzIGluIGNvbXBpbGF0aW9uIGJ1ZmZl cnMgYW5kIGdyZXAgYnVmZmVycy4KVGhlIGNvbW1hbmQgc3VwcG9ydHMgcHJldmlldyBvZiB0aGUg Y3VycmVudGx5IHNlbGVjdGVkIGVycm9yLiIKICAoaW50ZXJhY3RpdmUpCiAgKHVubGVzcyAoY29t cGlsYXRpb24tYnVmZmVyLXAgKGN1cnJlbnQtYnVmZmVyKSkKICAgICh1c2VyLWVycm9yICJOb3Qg YSBjb21waWxhdGlvbiBidWZmZXIiKSkKICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0tcmVh ZAogICAgIkdvIHRvIGVycm9yOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MgKGNv bnN1bHQtLWVycm9yLWNhbmRpZGF0ZXMpKQogICAgOmNhdGVnb3J5ICdjb25zdWx0LWVycm9yCiAg ICA6c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29rdXAgIydjb25zdWx0LS1s b29rdXAtY2FkcgogICAgOm5hcnJvdyBgKCwobGFtYmRhIChjYW5kKSAoPSAoY2FkZHIgY2FuZCkg Y29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgICAoP2UgLiAiRXJyb3IiKQogICAgICAgICAg ICAgICg/dyAuICJXYXJuaW5nIikKICAgICAgICAgICAgICAoP2kgLiAiSW5mbyIpKQogICAgOmhp c3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tZXJyb3ItaGlzdG9yeSkKICAgIDpwcmV2aWV3CiAgICAo Y29uc3VsdC0tcHJldmlldy1wb3NpdGlvbiAnY29uc3VsdC1wcmV2aWV3LWVycm9yKSkpKQoKOzs7 OzsgQ29tbWFuZDogY29uc3VsdC1tYXJrCgooZGVmdW4gY29uc3VsdC0tbWFyay1jYW5kaWRhdGVz ICgpCiAgIlJldHVybiBhbGlzdCBvZiBsaW5lcyBjb250YWluaW5nIG1hcmtlcnMuClRoZSBhbGlz dCBjb250YWlucyAoc3RyaW5nIC4gcG9zaXRpb24pIHBhaXJzLiIKICAoY29uc3VsdC0tZm9yYmlk LW1pbmlidWZmZXIpCiAgKHVubGVzcyAobWFya2VyLXBvc2l0aW9uIChtYXJrLW1hcmtlcikpCiAg ICAodXNlci1lcnJvciAiTm8gbWFya3MiKSkKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxl dCogKChtYXgtbGluZSAwKQogICAgICAgICAoY2FuZGlkYXRlcykpCiAgICAoc2F2ZS1leGN1cnNp b24KICAgICAgKGRvbGlzdCAobWFya2VyIChjb25zIChtYXJrLW1hcmtlcikgbWFyay1yaW5nKSkK ICAgICAgICAobGV0ICgocG9zIChtYXJrZXItcG9zaXRpb24gbWFya2VyKSkpCiAgICAgICAgICAo d2hlbiAoY29uc3VsdC0taW4tcmFuZ2UtcCBwb3MpCiAgICAgICAgICAgIChnb3RvLWNoYXIgcG9z KQogICAgICAgICAgICA7OyBgbGluZS1udW1iZXItYXQtcG9zJyBpcyBhIHZlcnkgc2xvdyBmdW5j dGlvbiwgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIGV2ZXJ5d2hlcmUuCiAgICAgICAgICAgIDs7 IEhvd2V2ZXIgaW4gdGhpcyBjYXNlIHRoZSBzbG93IGxpbmUtbnVtYmVyLWF0LXBvcyBkb2VzIG5v dCBodXJ0IG11Y2gsIHNpbmNlCiAgICAgICAgICAgIDs7IHRoZSBtYXJrIHJpbmcgaXMgdXN1YWxs eSBzbWFsbCBzaW5jZSBpdCBpcyBsaW1pdGVkIGJ5IGBtYXJrLXJpbmctbWF4Jy4KICAgICAgICAg ICAgKGxldCAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyBwb3MgY29uc3VsdC1saW5lLW51bWJl cnMtd2lkZW4pKSkKICAgICAgICAgICAgICAoc2V0cSBtYXgtbGluZSAobWF4IGxpbmUgbWF4LWxp bmUpKQogICAgICAgICAgICAgIChwdXNoIChsaXN0IG1hcmtlciBsaW5lIChjb25zdWx0LS1saW5l LXdpdGgtY3Vyc29yIG1hcmtlcikpCiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykpKSkp KQogICAgKG5yZXZlcnNlIChjb25zdWx0LS1yZW1vdmUtZHVwcyAoY29uc3VsdC0tYWRkLWxpbmUt bnVtYmVyIG1heC1saW5lIGNhbmRpZGF0ZXMpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtbWFyayAoKQogICJKdW1wIHRvIGEgbWFya2VyIGluIHRoZSBidWZmZXItbG9jYWwgYG1h cmstcmluZycuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IG9mIHRoZSBjdXJyZW50bHkg c2VsZWN0ZWQgbWFya2VyIHBvc2l0aW9uLgpUaGUgc3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRv IHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1qdW1wCiAg IChjb25zdWx0LS1yZWFkCiAgICAiR28gdG8gbWFyazogIgogICAgKGNvbnN1bHQtLXdpdGgtaW5j cmVhc2VkLWdjIChjb25zdWx0LS1tYXJrLWNhbmRpZGF0ZXMpKQogICAgOmNhdGVnb3J5ICdjb25z dWx0LWxvY2F0aW9uCiAgICA6c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29r dXAgIydjb25zdWx0LS1sb29rdXAtbG9jYXRpb24KICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1 bHQtLWxpbmUtaGlzdG9yeSkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJv bCkKICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29t bWFuZDogY29uc3VsdC1nbG9iYWwtbWFyawoKKGRlZnVuIGNvbnN1bHQtLWdsb2JhbC1tYXJrLWNh bmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGNvbnRhaW5pbmcgbWFya2Vycy4K ClRoZSBhbGlzdCBjb250YWlucyAoc3RyaW5nIC4gcG9zaXRpb24pIHBhaXJzLiIKICAoY29uc3Vs dC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKHNhdmUtZXhj dXJzaW9uCiAgICAgIChkb2xpc3QgKG1hcmtlciBnbG9iYWwtbWFyay1yaW5nKQogICAgICAgIChs ZXQgKChwb3MgKG1hcmtlci1wb3NpdGlvbiBtYXJrZXIpKQogICAgICAgICAgICAgIChidWYgKG1h cmtlci1idWZmZXIgbWFya2VyKSkpCiAgICAgICAgICAod2hlbiAoYW5kIHBvcyAoYnVmZmVyLWxp dmUtcCBidWYpIChub3QgKG1pbmlidWZmZXJwIGJ1ZikpKQogICAgICAgICAgICAod2l0aC1jdXJy ZW50LWJ1ZmZlciBidWYKICAgICAgICAgICAgICAod2hlbiAoY29uc3VsdC0taW4tcmFuZ2UtcCBw b3MpCiAgICAgICAgICAgICAgICAoZ290by1jaGFyIHBvcykKICAgICAgICAgICAgICAgIDs7IGBs aW5lLW51bWJlci1hdC1wb3MnIGlzIHNsb3csIHNlZSBjb21tZW50IGluIGBjb25zdWx0LS1tYXJr LWNhbmRpZGF0ZXMnLgogICAgICAgICAgICAgICAgKGxldCogKChsaW5lIChsaW5lLW51bWJlci1h dC1wb3MgcG9zIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAgICAgICAgICAg ICAgICAoYmVnaW4gKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKICAgICAgICAgICAgICAgICAg ICAgICAoZW5kIChsaW5lLWVuZC1wb3NpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgKGxv YyAoY29uc3VsdC0tZm9ybWF0LWxvY2F0aW9uIChidWZmZXItbmFtZSBidWYpIGxpbmUpKSkKICAg ICAgICAgICAgICAgICAgKGNvbnN1bHQtLWZvbnRpZnktcmVnaW9uIGJlZ2luIGVuZCkKICAgICAg ICAgICAgICAgICAgKHB1c2ggKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplIChjb25z dWx0LS1lbmNvZGUtbG9jYXRpb24gbWFya2VyKSAnaW52aXNpYmxlIHQpIGxvYykKICAgICAgICAg ICAgICAgICAgICAgICAgICAnY29uc3VsdC1sb2NhdGlvbiAoY29ucyBtYXJrZXIgbGluZSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0tcmVnaW9uLXdpdGgtY3Vyc29yIGJlZ2lu IGVuZCBtYXJrZXIpKQogICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKSkpKSkpKSkK ICAgICh1bmxlc3MgY2FuZGlkYXRlcwogICAgICAodXNlci1lcnJvciAiTm8gZ2xvYmFsIG1hcmtz IikpCiAgICAobnJldmVyc2UgKGNvbnN1bHQtLXJlbW92ZS1kdXBzIGNhbmRpZGF0ZXMpKSkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1nbG9iYWwtbWFyayAoKQogICJKdW1wIHRvIGEg bWFya2VyIGluIGBnbG9iYWwtbWFyay1yaW5nJy4KClRoZSBjb21tYW5kIHN1cHBvcnRzIHByZXZp ZXcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXJrZXIgcG9zaXRpb24uClRoZSBzeW1ib2wg YXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJhY3RpdmUp CiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1bHQtLXJlYWQKICAgICJHbyB0byBnbG9iYWwgbWFy azogIgogICAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjIChjb25zdWx0LS1nbG9iYWwtbWFy ay1jYW5kaWRhdGVzKSkKICAgIDs7IFdoaWxlIGBjb25zdWx0LWdsb2JhbC1tYXJrJyBmb3JtYXRz IHRoZSBjYW5kaWRhdGVzIGluIGdyZXAtbGlrZQogICAgOzsgc3R5bGUsIHdlIGFyZSBzdGlsbCBu b3QgdXNpbmcgdGhlICd4cmVmLWxvY2F0aW9uIGNhdGVnb3J5LAogICAgOzsgc2luY2UgdGhlIGxv Y2F0aW9ucyBhcmUgZm9ybWF0dGVkIHVzaW5nIGFiYnJldmlhdGVkIGJ1ZmZlcgogICAgOzsgbmFt ZXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzLiBJZiB0aGUgJ3hyZWYtbG9jYXRpb24gY2F0ZWdvcnkK ICAgIDs7IHdvdWxkIGJlIHVzZWQsIEVtYmFyayB3b3VsZCBlbWJhcmstZXhwb3J0IHRvIGEgYnJv a2VuIGdyZXAtbW9kZQogICAgOzsgYnVmZmVyLiBCeSB1c2luZyB0aGUgJ2NvbnN1bHQtbG9jYXRp b24gY2F0ZWdvcnksIEVtYmFyayB3aWxsCiAgICA7OyBleHBvcnQgdG8gYW4gb2NjdXIgYnVmZmVy IGluc3RlYWQhIFNlZSBhbHNvCiAgICA7OyBodHRwczovL2dpdGh1Yi5jb20vbWluYWQvY29uc3Vs dC9pc3N1ZXMvMTA3LgogICAgOmNhdGVnb3J5ICdjb25zdWx0LWxvY2F0aW9uCiAgICA6c29ydCBu aWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtbG9j YXRpb24KICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWxpbmUtaGlzdG9yeSkKICAgIDph ZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAgIDpwcmV2aWV3IChjb25zdWx0 LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1saW5lCgooZGVm dW4gY29uc3VsdC0tbGluZS1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBhbGlzdCBvZiBsaW5lcyBh bmQgcG9zaXRpb25zLiIKICAoY29uc3VsdC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGNvbnN1bHQt LWZvbnRpZnktYWxsKQogIChsZXQqICgoZGVmYXVsdC1jYW5kKQogICAgICAgICAoY2FuZGlkYXRl cykKICAgICAgICAgKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyAocG9pbnQtbWluKSBjb25zdWx0 LWxpbmUtbnVtYmVycy13aWRlbikpCiAgICAgICAgIChjdXJyLWxpbmUgKGxpbmUtbnVtYmVyLWF0 LXBvcyAocG9pbnQpIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAgKGxpbmUt d2lkdGggKGxlbmd0aCAobnVtYmVyLXRvLXN0cmluZyAobGluZS1udW1iZXItYXQtcG9zCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXgpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bHQtbGlu ZS1udW1iZXJzLXdpZGVuKSkpKQogICAgICAgICAoZGVmYXVsdC1jYW5kLWRpc3QgbW9zdC1wb3Np dGl2ZS1maXhudW0pKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChsZXQg KChzdHIgKGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkpKQogICAgICAgICh1bmxlc3MgKHN0cmlu Zy1ibGFuay1wIHN0cikKICAgICAgICAgIChsZXQgKChjYW5kIChjb25jYXQKICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3VsdC0tbGluZS1udW1iZXItcHJlZml4IChwb2ludC1tYXJrZXIpIGxp bmUgbGluZS13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICBzdHIpKQogICAgICAgICAgICAg ICAgKGRpc3QgKGFicyAoLSBjdXJyLWxpbmUgbGluZSkpKSkKICAgICAgICAgICAgKHdoZW4gKDwg ZGlzdCBkZWZhdWx0LWNhbmQtZGlzdCkKICAgICAgICAgICAgICAoc2V0cSBkZWZhdWx0LWNhbmQg Y2FuZAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtY2FuZC1kaXN0IGRpc3QpKQogICAgICAg ICAgICAocHVzaCBjYW5kIGNhbmRpZGF0ZXMpKSkKICAgICAgICAoc2V0cSBsaW5lICgxKyBsaW5l KSkpKQogICAgKHVubGVzcyBjYW5kaWRhdGVzCiAgICAgICh1c2VyLWVycm9yICJObyBsaW5lcyIp KQogICAgKGNvbnMgZGVmYXVsdC1jYW5kIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpKQoKKGRlZnVu IGNvbnN1bHQtLWxpbmUtbWF0Y2ggKGlucHV0IGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIHBv c2l0aW9uIG9mIG1hdGNoLgoKSU5QVVQgaXMgdGhlIGlucHV0IHN0cmluZyBlbnRlcmVkIGJ5IHRo ZSB1c2VyLgpDQU5ESURBVEVTIGlzIHRoZSBsaW5lIGNhbmRpZGF0ZXMgYWxpc3QuCkNBTkQgaXMg dGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYW5kaWRhdGUuIgogICh3aGVuLWxldCAocG9zIChjb25z dWx0LS1sb29rdXAtbG9jYXRpb24gaW5wdXQgY2FuZGlkYXRlcyBjYW5kKSkKICAgIChpZiAob3Ig KHN0cmluZy1ibGFuay1wIGlucHV0KQogICAgICAgICAgICAoZXEgY29uc3VsdC1saW5lLXBvaW50 LXBsYWNlbWVudCAnbGluZS1iZWdpbm5pbmcpKQogICAgICAgIHBvcwogICAgICA7OyBTdHJpcCB1 bmlxdWUgbGluZSBudW1iZXIgcHJlZml4CiAgICAgIChsZXQgKChpIDApCiAgICAgICAgICAgIChu IChsZW5ndGggY2FuZCkpCiAgICAgICAgICAgIChjbWluIGNvbnN1bHQtLXRvZnUtY2hhcikKICAg ICAgICAgICAgKGNtYXggKC0gKCsgY29uc3VsdC0tdG9mdS1jaGFyIGNvbnN1bHQtLXRvZnUtcmFu Z2UpIDEpKSkKICAgICAgICAod2hpbGUgKGFuZCAoPCBpIG4pICg8PSBjbWluIChhcmVmIGNhbmQg aSkgY21heCkpCiAgICAgICAgICAoc2V0cSBpICgxKyBpKSkpCiAgICAgICAgKHdoZW4gKD4gaSAw KQogICAgICAgICAgKHNldHEgY2FuZCAoc3Vic3RyaW5nIGNhbmQgaSkpKSkKICAgICAgKGxldCAo KGJlZyAwKQogICAgICAgICAgICAoZW5kIChsZW5ndGggY2FuZCkpCiAgICAgICAgICAgIDs7IFVz ZSBjb25zdWx0LWxvY2F0aW9uIGNvbXBsZXRpb24gY2F0ZWdvcnkgd2hlbiBmaWx0ZXJpbmcgbGlu ZXMKICAgICAgICAgICAgKGZpbHRlciAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgJ2NvbnN1 bHQtbG9jYXRpb24gbmlsKSkpCiAgICAgICAgOzsgRmluZCBtYXRjaCBlbmQgcG9zaXRpb24sIHJl bW92ZSBjaGFyYWN0ZXJzIGZyb20gbGluZSBlbmQgdW50aWwKICAgICAgICA7OyBtYXRjaGluZyBm YWlscwogICAgICAgIChsZXQgKChzdGVwIDE2KSkKICAgICAgICAgICh3aGlsZSAoPiBzdGVwIDAp CiAgICAgICAgICAgICh3aGlsZSAoYW5kICg+ICgtIGVuZCBzdGVwKSAwKQogICAgICAgICAgICAg ICAgICAgICAgICAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgKGxpc3QgKHN1YnN0cmluZyBjYW5kIDAg KC0gZW5kIHN0ZXApKSkpKQogICAgICAgICAgICAgIChzZXRxIGVuZCAoLSBlbmQgc3RlcCkpKQog ICAgICAgICAgICAoc2V0cSBzdGVwICgvIHN0ZXAgMikpKSkKICAgICAgICA7OyBGaW5kIG1hdGNo IGJlZ2lubmluZyBwb3NpdGlvbiwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGJlZ2lubmlu ZwogICAgICAgIDs7IHVudGlsIG1hdGNoaW5nIGZhaWxzCiAgICAgICAgKHdoZW4gKGVxIGNvbnN1 bHQtbGluZS1wb2ludC1wbGFjZW1lbnQgJ21hdGNoLWJlZ2lubmluZykKICAgICAgICAgIChsZXQg KChzdGVwIDE2KSkKICAgICAgICAgICAgKHdoaWxlICg+IHN0ZXAgMCkKICAgICAgICAgICAgICAo d2hpbGUgKGFuZCAoPCAoKyBiZWcgc3RlcCkgZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAg IChmdW5jYWxsIGZpbHRlciBpbnB1dCAobGlzdCAoc3Vic3RyaW5nIGNhbmQgKCsgYmVnIHN0ZXAp IGVuZCkpKSkKICAgICAgICAgICAgICAgIChzZXRxIGJlZyAoKyBiZWcgc3RlcCkpKQogICAgICAg ICAgICAgIChzZXRxIHN0ZXAgKC8gc3RlcCAyKSkpCiAgICAgICAgICAgIChzZXRxIGVuZCBiZWcp KSkKICAgICAgICA7OyBNYXJrZXIgY2FuIGJlIGRlYWQKICAgICAgICAoaWdub3JlLWVycm9ycyAo KyBwb3MgZW5kKSkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1saW5lICgmb3B0 aW9uYWwgaW5pdGlhbCkKICAiU2VhcmNoIGZvciBhIG1hdGNoaW5nIGxpbmUgYW5kIGp1bXAgdG8g dGhlIGxpbmUgYmVnaW5uaW5nLgoKVGhlIGRlZmF1bHQgY2FuZGlkYXRlIGlzIGEgbm9uLWVtcHR5 IGxpbmUgY2xvc2VzdCB0byBwb2ludC4KVGhpcyBjb21tYW5kIG9iZXlzIG5hcnJvd2luZy4gT3B0 aW9uYWxseSBJTklUSUFMIGlucHV0IGNhbiBiZSBwcm92aWRlZC4KVGhlIHN5bWJvbCBhdCBwb2lu dCBhbmQgdGhlIGxhc3QgYGlzZWFyY2gtc3RyaW5nJyBpcyBhZGRlZCB0byB0aGUgZnV0dXJlIGhp c3RvcnkuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoY2FuZGlkYXRlcyAoY29uc3VsdC0td2l0 aC1pbmNyZWFzZWQtZ2MgKGNvbnN1bHQtLWxpbmUtY2FuZGlkYXRlcykpKSkKICAgIChjb25zdWx0 LS1qdW1wCiAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgIkdvIHRvIGxpbmU6ICIgKGNkciBjYW5k aWRhdGVzKQogICAgICA6Y2F0ZWdvcnkgJ2NvbnN1bHQtbG9jYXRpb24KICAgICAgOnNvcnQgbmls CiAgICAgIDpkZWZhdWx0LXRvcCBuaWwKICAgICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICA7OyBB bHdheXMgYWRkIGxhc3QgaXNlYXJjaCBzdHJpbmcgdG8gZnV0dXJlIGhpc3RvcnkKICAgICAgOmFk ZC1oaXN0b3J5IChsaXN0ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKSBpc2VhcmNoLXN0cmluZykK ICAgICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgICA6bG9v a3VwICMnY29uc3VsdC0tbGluZS1tYXRjaAogICAgICA6ZGVmYXVsdCAoY2FyIGNhbmRpZGF0ZXMp CiAgICAgIDs7IEFkZCBpc2VhcmNoLXN0cmluZyBhcyBpbml0aWFsIGlucHV0IGlmIHN0YXJ0aW5n IGZyb20gaXNlYXJjaAogICAgICA6aW5pdGlhbCAob3IgaW5pdGlhbCAoYW5kIGlzZWFyY2gtbW9k ZSBpc2VhcmNoLXN0cmluZykpCiAgICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0 aW9uKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQta2VlcC1saW5lcwoKKGRlZnN1YnN0IGNv bnN1bHQtLWtlZXAtbGluZXMtcmVwbGFjZSAoY29udGVudCAmb3B0aW9uYWwgcG9zKQogICJSZXBs YWNlIGJ1ZmZlciBjb250ZW50IHdpdGggQ09OVEVOVCBhbmQgbW92ZSBwb2ludCB0byBQT1MuIgog IChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQogIChpbnNlcnQgY29udGVu dCkKICAoZ290by1jaGFyIChvciBwb3MgKHBvaW50LW1pbikpKSkKCihkZWZ1biBjb25zdWx0LS1r ZWVwLWxpbmVzLXN0YXRlIChmaWx0ZXIpCiAgIlN0YXRlIGZ1bmN0aW9uIGZvciBgY29uc3VsdC1r ZWVwLWxpbmVzJyB3aXRoIEZJTFRFUiBmdW5jdGlvbi4iCiAgKGxldCAoKGxpbmVzKQogICAgICAg IChidWZmZXItb3JpZyAoY3VycmVudC1idWZmZXIpKQogICAgICAgIChmb250LWxvY2stb3JpZyBm b250LWxvY2stbW9kZSkKICAgICAgICAocG9pbnQtb3JpZyAocG9pbnQpKQogICAgICAgIChjb250 ZW50LW9yaWcgKGJ1ZmZlci1zdHJpbmcpKQogICAgICAgIChsYXN0LWlucHV0KSkKICAgIChjb25z dWx0LS1lYWNoLWxpbmUgYmVnIGVuZAogICAgICAocHVzaCAoYnVmZmVyLXN1YnN0cmluZyBiZWcg ZW5kKSBsaW5lcykpCiAgICAoc2V0cSBsaW5lcyAobnJldmVyc2UgbGluZXMpKQogICAgKGxhbWJk YSAoaW5wdXQgcmVzdG9yZSkKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyLW9yaWcK ICAgICAgICA7OyBSZXN0b3JpbmcgY29udGVudCBhbmQgcG9pbnQgcG9zaXRpb24KICAgICAgICAo d2hlbiAoYW5kIHJlc3RvcmUgbGFzdC1pbnB1dCkKICAgICAgICAgIDs7IE5vIHVuZG8gcmVjb3Jk aW5nLCBtb2RpZmljYXRpb24gaG9va3MsIGJ1ZmZlciBtb2RpZmllZC1zdGF0dXMKICAgICAgICAg ICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zIChjb25zdWx0LS1rZWVwLWxpbmVzLXJlcGxhY2Ug Y29udGVudC1vcmlnIHBvaW50LW9yaWcpKSkKICAgICAgICA7OyBDb21taXR0aW5nIG9yIG5ldyBp bnB1dCBwcm92aWRlZCAtPiBVcGRhdGUKICAgICAgICAod2hlbiAoYW5kIGlucHV0IDs7IElucHV0 IGhhcyBiZWVuIHBvdmlkZWQKICAgICAgICAgICAgICAgICAgIChvcgogICAgICAgICAgICAgICAg ICAgIDs7IENvbW1pdHRpbmcsIGJ1dCBub3Qgd2l0aCBlbXB0eSBpbnB1dAogICAgICAgICAgICAg ICAgICAgIChhbmQgcmVzdG9yZSAobm90IChzdHJpbmctbWF0Y2gtcCAiXiE/ID8kIiBpbnB1dCkp KQogICAgICAgICAgICAgICAgICAgIDs7IElucHV0IGhhcyBjaGFuZ2VkCiAgICAgICAgICAgICAg ICAgICAgKG5vdCAoZXF1YWwgaW5wdXQgbGFzdC1pbnB1dCkpKSkKICAgICAgICAgIChsZXQgKChm aWx0ZXJlZC1jb250ZW50CiAgICAgICAgICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2gtcCAiXiE/ ID8kIiBpbnB1dCkKICAgICAgICAgICAgICAgICAgICAgOzsgU3BlY2lhbCBjYXNlIHRoZSBlbXB0 eSBpbnB1dCBmb3IgcGVyZm9ybWFuY2UuCiAgICAgICAgICAgICAgICAgICAgIDs7IE90aGVyd2lz ZSBpdCBjb3VsZCBoYXBwZW4gdGhhdCB0aGUgbWluaWJ1ZmZlciBpcyBlbXB0eSwKICAgICAgICAg ICAgICAgICAgICAgOzsgYnV0IHRoZSBidWZmZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuCiAgICAg ICAgICAgICAgICAgICAgIGNvbnRlbnQtb3JpZwogICAgICAgICAgICAgICAgICAgKGlmIHJlc3Rv cmUKICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWpvaW4gKGZ1bmNhbGwgZmlsdGVyIGlu cHV0IGxpbmVzKSAiXG4iKQogICAgICAgICAgICAgICAgICAgICAod2hpbGUtbm8taW5wdXQKICAg ICAgICAgICAgICAgICAgICAgICA7OyBIZWF2eSBjb21wdXRhdGlvbiBpcyBpbnRlcnJ1cHRpYmxl IGlmICpub3QqIGNvbW1pdHRpbmchCiAgICAgICAgICAgICAgICAgICAgICAgOzsgQWxsb2NhdGUg bmV3IHN0cmluZyBjYW5kaWRhdGVzIHNpbmNlIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBtdXRhdGVz IQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctam9pbiAoZnVuY2FsbCBmaWx0ZXIgaW5w dXQgKG1hcGNhciAjJ2NvcHktc2VxdWVuY2UgbGluZXMpKSAiXG4iKSkpKSkpCiAgICAgICAgICAg ICh3aGVuIChzdHJpbmdwIGZpbHRlcmVkLWNvbnRlbnQpCiAgICAgICAgICAgICAgKHdoZW4gZm9u dC1sb2NrLW1vZGUgKGZvbnQtbG9jay1tb2RlIC0xKSkKICAgICAgICAgICAgICAoaWYgcmVzdG9y ZQogICAgICAgICAgICAgICAgICAoYXRvbWljLWNoYW5nZS1ncm91cAogICAgICAgICAgICAgICAg ICAgIDs7IERpc2FibGUgbW9kaWZpY2F0aW9uIGhvb2tzIGZvciBwZXJmb3JtYW5jZQogICAgICAg ICAgICAgICAgICAgIChsZXQgKChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKICAgICAg ICAgICAgICAgICAgICAgIChjb25zdWx0LS1rZWVwLWxpbmVzLXJlcGxhY2UgZmlsdGVyZWQtY29u dGVudCkpKQogICAgICAgICAgICAgICAgOzsgTm8gdW5kbyByZWNvcmRpbmcsIG1vZGlmaWNhdGlv biBob29rcywgYnVmZmVyIG1vZGlmaWVkLXN0YXR1cwogICAgICAgICAgICAgICAgKHdpdGgtc2ls ZW50LW1vZGlmaWNhdGlvbnMKICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWtlZXAtbGluZXMt cmVwbGFjZSBmaWx0ZXJlZC1jb250ZW50KQogICAgICAgICAgICAgICAgICAoc2V0cSBsYXN0LWlu cHV0IGlucHV0KSkpKSkpCiAgICAgICAgOzsgUmVzdG9yZSBmb250LWxvY2sKICAgICAgICAod2hl biAoYW5kIHJlc3RvcmUgZm9udC1sb2NrLW9yaWcgKG5vdCBmb250LWxvY2stbW9kZSkpCiAgICAg ICAgICAoZm9udC1sb2NrLW1vZGUpKSkpKSkKCihkZWZ1biBjb25zdWx0LWtlZXAtbGluZXMgKCZv cHRpb25hbCBmaWx0ZXIgaW5pdGlhbCkKICAiU2VsZWN0IGEgc3Vic2V0IG9mIHRoZSBsaW5lcyBp biB0aGUgY3VycmVudCBidWZmZXIgd2l0aCBsaXZlIHByZXZpZXcuCgpUaGUgbGluZXMgc2VsZWN0 ZWQgYXJlIHRob3NlIHRoYXQgbWF0Y2ggdGhlIG1pbmlidWZmZXIgaW5wdXQuClRoaXMgY29tbWFu ZCBvYmV5cyBuYXJyb3dpbmcuCkZJTFRFUiBpcyB0aGUgZmlsdGVyIGZ1bmN0aW9uLgpJTklUSUFM IGlzIHRoZSBpbml0aWFsIGlucHV0LiIKICA7OyBVc2UgY29uc3VsdC1sb2NhdGlvbiBjb21wbGV0 aW9uIGNhdGVnb3J5IHdoZW4gZmlsdGVyaW5nIGxpbmVzCiAgKGludGVyYWN0aXZlIChsaXN0IChj b25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1kaXNwYXRjaCAnY29uc3VsdC1sb2NhdGlvbiAnaGln aGxpZ2h0KSkpCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChiYXJmLWlmLWJ1ZmZl ci1yZWFkLW9ubHkpCiAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjCiAgIChjb25zdWx0LS1m b250aWZ5LWFsbCkKICAgKGNvbnN1bHQtLXByb21wdAogICAgIktlZXAgbGluZXM6ICIKICAgIDpp bml0aWFsIGluaXRpYWwKICAgIDpoaXN0b3J5ICdjb25zdWx0LS1rZWVwLWxpbmVzLWhpc3RvcnkK ICAgIDpwcmV2aWV3IChjb25zdWx0LS1rZWVwLWxpbmVzLXN0YXRlIGZpbHRlcikpKSkKCjs7Ozs7 IENvbW1hbmQ6IGNvbnN1bHQtZm9jdXMtbGluZXMKCihkZWZ1biBjb25zdWx0LS1mb2N1cy1saW5l cy1zdGF0ZSAoZmlsdGVyKQogICJTdGF0ZSBmdW5jdGlvbiBmb3IgYGNvbnN1bHQtZm9jdXMtbGlu ZXMnIHdpdGggRklMVEVSIGZ1bmN0aW9uLiIKICAobGV0ICgobGluZXMpIChvdmVybGF5cykgKGxh c3QtaW5wdXQpKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChwdXNoIChi dWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpIGxpbmVzKQogICAgICAocHVzaCAobWFrZS1vdmVybGF5 IGJlZyAoMSsgZW5kKSkgb3ZlcmxheXMpKQogICAgKGxhbWJkYSAoaW5wdXQgcmVzdG9yZSkKICAg ICAgOzsgTmV3IGlucHV0IHByb3ZpZGVkIC0+IFVwZGF0ZQogICAgICAod2hlbiAoYW5kIGlucHV0 IChub3QgKGVxdWFsIGlucHV0IGxhc3QtaW5wdXQpKSkKICAgICAgICAoaWYgKHN0cmluZy1tYXRj aC1wICJeIT8gPyQiIGlucHV0KQogICAgICAgICAgICA7OyBTcGVjaWFsIGNhc2UgdGhlIGVtcHR5 IGlucHV0IGZvciBwZXJmb3JtYW5jZS4KICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAg KGRvbGlzdCAob3Ygb3ZlcmxheXMpCiAgICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2lu dmlzaWJsZSBuaWwpKQogICAgICAgICAgICAgIChzZXRxIGxhc3QtaW5wdXQgaW5wdXQpKQogICAg ICAgICAgKGxldCogKChub3QgKHN0cmluZy1wcmVmaXgtcCAiISAiIGlucHV0KSkKICAgICAgICAg ICAgICAgICAoc3RyaXBwZWQgKHN0cmluZy1yZW1vdmUtcHJlZml4ICIhICIgaW5wdXQpKQogICAg ICAgICAgICAgICAgIDs7IEhlYXZ5IGNvbXB1dGF0aW9uIGlzIGludGVycnVwdGlibGUgaWYgKm5v dCogY29tbWl0dGluZyEKICAgICAgICAgICAgICAgICAoaHQgKGlmIHJlc3RvcmUKICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdWx0LS1zdHJpbmctaGFzaCAoZnVuY2FsbCBmaWx0ZXIgc3Ry aXBwZWQgbGluZXMpKQogICAgICAgICAgICAgICAgICAgICAgICh3aGlsZS1uby1pbnB1dAogICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLXN0cmluZy1oYXNoIChmdW5jYWxsIGZpbHRl ciBzdHJpcHBlZCBsaW5lcykpKSkpKQogICAgICAgICAgICAod2hlbiAoaGFzaC10YWJsZS1wIGh0 KQogICAgICAgICAgICAgIChsZXQgKChvdiBvdmVybGF5cykgKGxpIGxpbmVzKSkKICAgICAgICAg ICAgICAgICh3aGlsZSBvdgogICAgICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgKGNhciBvdikg J2ludmlzaWJsZSAoZXEgbm90IChnZXRoYXNoIChjYXIgbGkpIGh0KSkpCiAgICAgICAgICAgICAg ICAgIChzZXRxIGxpIChjZHIgbGkpIG92IChjZHIgb3YpKSkpCiAgICAgICAgICAgICAgKHNldHEg bGFzdC1pbnB1dCBpbnB1dCkpKSkpCiAgICAgIDs7IFN1Y2Vzc2Z1bGx5IHRlcm1pbmF0ZWQgLT4g UmVtZW1iZXIgaW52aXNpYmxlIG92ZXJsYXlzCiAgICAgICh3aGVuIChhbmQgaW5wdXQgcmVzdG9y ZSkKICAgICAgICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgICAgICAgIChpZiAob3ZlcmxheS1n ZXQgb3YgJ2ludmlzaWJsZSkKICAgICAgICAgICAgICAocHVzaCBvdiBjb25zdWx0LS1mb2N1cy1s aW5lcy1vdmVybGF5cykKICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92KSkpCiAgICAgICAg KHNldHEgb3ZlcmxheXMgbmlsKSkKICAgICAgOzsgV2hlbiB0ZXJtaW5hdGluZyAtPiBEZXN0cm95 IHJlbWFpbmluZyBvdmVybGF5cwogICAgICAod2hlbiByZXN0b3JlCiAgICAgICAgKG1hcGMgIydk ZWxldGUtb3ZlcmxheSBvdmVybGF5cykpKSkpCgooZGVmdW4gY29uc3VsdC1mb2N1cy1saW5lcyAo Jm9wdGlvbmFsIHNob3cgZmlsdGVyIGluaXRpYWwpCiAgIkhpZGUgb3Igc2hvdyBsaW5lcyBhY2Nv cmRpbmcgdG8gRklMVEVSIGZ1bmN0aW9uLgoKT3B0aW9uYWxseSBJTklUSUFMIGlucHV0IGNhbiBi ZSBwcm92aWRlZC4KU0hPVyBtdXN0IGJlIHQgaW4gb3JkZXIgdG8gc2hvdyB0aGUgaGlkZGVuIGxp bmVzLiIKICAoaW50ZXJhY3RpdmUKICAgOzsgVXNlIGNvbnN1bHQtbG9jYXRpb24gY29tcGxldGlv biBjYXRlZ29yeSB3aGVuIGZpbHRlcmluZyBsaW5lcwogICAobGlzdCBjdXJyZW50LXByZWZpeC1h cmcgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyICdjb25zdWx0LWxvY2F0aW9uIG5pbCkpKQog IChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAoaWYgc2hvdwogICAgICAocHJvZ24KICAg ICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlz KQogICAgICAgIChzZXRxIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbCkpCiAgICAo Y29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MKICAgICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAg ICAgKGNvbnN1bHQtLXByb21wdAogICAgICAiRm9jdXMgb24gbGluZXM6ICIKICAgICAgOmluaXRp YWwgaW5pdGlhbAogICAgICA6aGlzdG9yeSAnY29uc3VsdC0ta2VlcC1saW5lcy1oaXN0b3J5CiAg ICAgIDpwcmV2aWV3IChjb25zdWx0LS1mb2N1cy1saW5lcy1zdGF0ZSBmaWx0ZXIpKSkpKQoKOzs7 OzsgQ29tbWFuZDogY29uc3VsdC1nb3RvLWxpbmUKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25z dWx0LWdvdG8tbGluZSAoKQogICJSZWFkIGxpbmUgbnVtYmVyIGFuZCBqdW1wIHRvIHRoZSBsaW5l IHdpdGggcHJldmlldy4KClRoZSBjb21tYW5kIHJlc3BlY3RzIG5hcnJvd2luZyBhbmQgdGhlIHNl dHRpbmdzCmBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzJyBhbmQgYGNvbnN1bHQtbGluZS1udW1i ZXJzLXdpZGVuJy4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZl cikKICAoY29uc3VsdC0tbG9jYWwtbGV0ICgoZGlzcGxheS1saW5lLW51bWJlcnMgY29uc3VsdC1n b3RvLWxpbmUtbnVtYmVycykKICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheS1saW5lLW51 bWJlcnMtd2lkZW4gY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4pKQogICAgKHdoaWxlIChsZXQg KChyZXQgKGNvbnN1bHQtLXByb21wdAogICAgICAgICAgICAgICAgICAgICAgICJHbyB0byBsaW5l OiAiCiAgICAgICAgICAgICAgICAgICAgICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9z aXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgOnRyYW5zZm9ybQogICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKF8gc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0 ICgobGluZSAoYW5kIHN0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctbWF0Y2gtcCAiXltbOmRpZ2l0Ol1dKyQiIHN0cikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXRvLW51bWJlciBzdHIp KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcyAoYW5kIGxpbmUgKGNv bnN1bHQtLWxpbmUtcG9zaXRpb24gbGluZSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg KGFuZCAoY29uc3VsdC0taW4tcmFuZ2UtcCBwb3MpIHBvcykpKSkpKQogICAgICAgICAgICAgKGlm LWxldCAocG9zIChjYXIgcmV0KSkKICAgICAgICAgICAgICAgICAoY29uc3VsdC0tanVtcCBwb3Mp CiAgICAgICAgICAgICAgIChtaW5pYnVmZmVyLW1lc3NhZ2UgKGlmIChzdHJpbmctbWF0Y2gtcCAi XltbOmRpZ2l0Ol1dKyQiIChjZHIgcmV0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkxpbmUgbnVtYmVyIG91dCBvZiByYW5nZS4iCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgbnVtYmVyLiIpKQogICAgICAgICAgICAg ICB0KSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtcmVjZW50LWZpbGUKCihkZWZ1biBjb25z dWx0LS1yZWNlbnQtZmlsZS1yZWFkICgpCiAgIlJlYWQgcmVjZW50IGZpbGUgdmlhIGBjb21wbGV0 aW5nLXJlYWQnLiIKICAoY29uc3VsdC0tcmVhZAogICAiRmluZCByZWNlbnQgZmlsZTogIgogICAo b3IgKG1hcGNhciAjJ2FiYnJldmlhdGUtZmlsZS1uYW1lIHJlY2VudGYtbGlzdCkKICAgICAgICh1 c2VyLWVycm9yICJObyByZWNlbnQgZmlsZXMiKSkKICAgOnNvcnQgbmlsCiAgIDpyZXF1aXJlLW1h dGNoIHQKICAgOmNhdGVnb3J5ICdmaWxlCiAgIDpoaXN0b3J5ICdmaWxlLW5hbWUtaGlzdG9yeSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWNlbnQtZmlsZSAoKQogICJGaW5kIHJl Y2VudCB1c2luZyBgY29tcGxldGluZy1yZWFkJy4iCiAgKGludGVyYWN0aXZlKQogIChmaW5kLWZp bGUgKGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBj b25zdWx0LXJlY2VudC1maWxlLW90aGVyLWZyYW1lICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBj b21wbGV0aW5nLXJlYWQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZS1vdGhlci1mcmFt ZSAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtcmVjZW50LWZpbGUtb3RoZXItd2luZG93ICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBj b21wbGV0aW5nLXJlYWQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZS1vdGhlci13aW5k b3cgKGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt ZmlsZS1leHRlcm5hbGx5Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1maWxlLWV4dGVy bmFsbHkgKGZpbGUpCiAgIk9wZW4gRklMRSBleHRlcm5hbGx5IHVzaW5nIHRoZSBkZWZhdWx0IGFw cGxpY2F0aW9uIG9mIHRoZSBzeXN0ZW0uIgogIChpbnRlcmFjdGl2ZSAiZk9wZW4gZXh0ZXJuYWxs eTogIikKICAoaWYgKGFuZCAoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpCiAgICAgICAgICAg KGZib3VuZHAgJ3czMi1zaGVsbC1leGVjdXRlKSkKICAgICAgKHczMi1zaGVsbC1leGVjdXRlICJv cGVuIiBmaWxlKQogICAgKGNhbGwtcHJvY2VzcyAocGNhc2Ugc3lzdGVtLXR5cGUKICAgICAgICAg ICAgICAgICAgICAoJ2RhcndpbiAib3BlbiIpCiAgICAgICAgICAgICAgICAgICAgKCdjeWd3aW4g ImN5Z3N0YXJ0IikKICAgICAgICAgICAgICAgICAgICAoXyAieGRnLW9wZW4iKSkKICAgICAgICAg ICAgICAgICAgbmlsIDAgbmlsCiAgICAgICAgICAgICAgICAgIChleHBhbmQtZmlsZS1uYW1lIGZp bGUpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWNvbXBsZXRpb24taW4tcmVnaW9uCgo7OyBV c2UgbWluaWJ1ZmZlciBjb21wbGV0aW9uIGFzIHRoZSBVSSBmb3IgY29tcGxldGlvbi1hdC1wb2lu dAo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1jb21wbGV0aW9uLWluLXJlZ2lvbiAoc3Rh cnQgZW5kIGNvbGxlY3Rpb24gJm9wdGlvbmFsIHByZWRpY2F0ZSkKICAiUHJvbXB0IGZvciBjb21w bGV0aW9uIG9mIHJlZ2lvbiBpbiB0aGUgbWluaWJ1ZmZlciBpZiBub24tdW5pcXVlLgoKVGhlIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aXRoIDQgYXJndW1lbnRzOiBTVEFSVCBFTkQgQ09MTEVDVElPTiBQ UkVESUNBVEUuClRoZSBhcmd1bWVudHMgYW5kIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBhcmUgYXMg c3BlY2lmaWVkIGZvcgpgY29tcGxldGlvbi1pbi1yZWdpb24nLiBVc2UgYXMgYSB2YWx1ZSBmb3Ig YGNvbXBsZXRpb24taW4tcmVnaW9uLWZ1bmN0aW9uJy4iCiAgKGxldCogKChpbml0aWFsIChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgc3RhcnQgZW5kKSkKICAgICAgICAgKGxpbWl0IChj YXIgKGNvbXBsZXRpb24tYm91bmRhcmllcyBpbml0aWFsIGNvbGxlY3Rpb24gcHJlZGljYXRlICIi KSkpCiAgICAgICAgIChtZXRhZGF0YSAoY29tcGxldGlvbi1tZXRhZGF0YSBpbml0aWFsIGNvbGxl Y3Rpb24gcHJlZGljYXRlKSkKICAgICAgICAgKGNhdGVnb3J5IChjb21wbGV0aW9uLW1ldGFkYXRh LWdldCBtZXRhZGF0YSAnY2F0ZWdvcnkpKQogICAgICAgICAoYWxsIChjb21wbGV0aW9uLWFsbC1j b21wbGV0aW9ucyBpbml0aWFsIGNvbGxlY3Rpb24gcHJlZGljYXRlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsZW5ndGggaW5pdGlhbCkpKQogICAgICAgICAoZXhp dC1zdGF0dXMgJ2ZpbmlzaGVkKQogICAgICAgICAoY29tcGxldGlvbgogICAgICAgICAgKGNvbmQK ICAgICAgICAgICAoKGF0b20gYWxsKSBuaWwpCiAgICAgICAgICAgKChhbmQgKGNvbnNwIGFsbCkg KGF0b20gKGNkciBhbGwpKSkKICAgICAgICAgICAgKHNldHEgZXhpdC1zdGF0dXMgJ3NvbGUpCiAg ICAgICAgICAgIChjb25jYXQgKHN1YnN0cmluZyBpbml0aWFsIDAgbGltaXQpIChjYXIgYWxsKSkp CiAgICAgICAgICAgKHQgKGxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkpCiAg ICAgICAgICAgICAgICAoaWYgKGVxIGNhdGVnb3J5ICdmaWxlKQogICAgICAgICAgICAgICAgICAg IDs7IFdoZW4gY29tcGxldGluZyBmaWxlcyB3aXRoIGNvbnN1bHQtY29tcGxldGlvbi1pbi1yZWdp b24sIHRoZSBwb2ludCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICA7OyBtaW5pYnVmZmVyIGdl dHMgcGxhY2VkIGluaXRpYWxseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXN0IHBhdGggY29t cG9uZW50LgogICAgICAgICAgICAgICAgICAgIDs7IEJ5IHVzaW5nIHRoZSBmaWxlbmFtZSBhcyBE SVIgYXJndW1lbnQgKHNlY29uZCBhcmd1bWVudCBvZiByZWFkLWZpbGUtbmFtZSksIGl0CiAgICAg ICAgICAgICAgICAgICAgOzsgc3RhcnRzIGF0IHRoZSBlbmQgb2YgbWluaWJ1ZmZlciBjb250ZW50 cywgYXMgZm9yIG90aGVyIHR5cGVzIG9mIGNvbXBsZXRpb24uCiAgICAgICAgICAgICAgICAgICAg OzsgSG93ZXZlciB0aGlzIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBzaW5jZSBpbml0aWFsIGRvZXMg bm90IG9ubHkgY29udGFpbiB0aGUKICAgICAgICAgICAgICAgICAgICA7OyBkaXJlY3RvcnksIGJ1 dCBhbHNvIHRoZSBmaWxlbmFtZS4KICAgICAgICAgICAgICAgICAgICAocmVhZC1maWxlLW5hbWUK ICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXRpb246ICIgaW5pdGlhbCBpbml0aWFsIHQgbmls IHByZWRpY2F0ZSkKICAgICAgICAgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZAogICAgICAgICAg ICAgICAgICAgIkNvbXBsZXRpb246ICIgY29sbGVjdGlvbiBwcmVkaWNhdGUgdCBpbml0aWFsKSkp KSkpKQogICAgKGlmIChudWxsIGNvbXBsZXRpb24pCiAgICAgICAgKHByb2duIChtZXNzYWdlICJO byBjb21wbGV0aW9uIikgbmlsKQogICAgICAoZGVsZXRlLXJlZ2lvbiBzdGFydCBlbmQpCiAgICAg IChpbnNlcnQgKHN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGNvbXBsZXRpb24pKQogICAgICAod2hl bi1sZXQgKGV4aXQgKHBsaXN0LWdldCBjb21wbGV0aW9uLWV4dHJhLXByb3BlcnRpZXMgOmV4aXQt ZnVuY3Rpb24pKQogICAgICAgIChmdW5jYWxsIGV4aXQgY29tcGxldGlvbiBleGl0LXN0YXR1cykp CiAgICAgIHQpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbW9kZS1jb21tYW5kCgooZGVmdW4g Y29uc3VsdC0tbW9kZS1uYW1lIChtb2RlKQogICJSZXR1cm4gbmFtZSBwYXJ0IG9mIE1PREUuIgog IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgImdsb2JhbC1cXCguKlxcKS1tb2RlIiAiXFwx IgogICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAiXFwoLWdsb2JhbFxcKT8tbW9kZSQi ICIiCiAgICAoaWYgKGVxIG1vZGUgJ2MtbW9kZSkKICAgICAgICAiY2MiCiAgICAgIChzeW1ib2wt bmFtZSBtb2RlKSkKICAgICdmaXhlZGNhc2UpCiAgICdmaXhlZGNhc2UpKQoKKGRlZnVuIGNvbnN1 bHQtLW1vZGUtY29tbWFuZC1jYW5kaWRhdGVzIChtb2RlcykKICAiRXh0cmFjdCBjb21tYW5kcyBm cm9tIE1PREVTLgoKVGhlIGxpc3Qgb2YgZmVhdHVyZXMgaXMgc2VhcmNoZWQgZm9yIGZpbGVzIGJl bG9uZ2luZyB0byB0aGUgbW9kZXMuCkZyb20gdGhlc2UgZmlsZXMsIHRoZSBjb21tYW5kcyBhcmUg ZXh0cmFjdGVkLiIKICAobGV0KiAoKGNvbW1hbmQtZmlsdGVyIChjb25zdWx0LS1yZWdleHAtZmls dGVyIChzZXEtZmlsdGVyICMnc3RyaW5ncCBjb25zdWx0LW1vZGUtY29tbWFuZC1maWx0ZXIpKSkK ICAgICAgICAgKGZlYXR1cmUtZmlsdGVyIChzZXEtZmlsdGVyICMnc3ltYm9scCBjb25zdWx0LW1v ZGUtY29tbWFuZC1maWx0ZXIpKQogICAgICAgICAobWlub3ItaGFzaCAoY29uc3VsdC0tc3RyaW5n LWhhc2ggbWlub3ItbW9kZS1saXN0KSkKICAgICAgICAgKG1pbm9yLWxvY2FsLW1vZGVzIChzZXEt ZmlsdGVyIChsYW1iZGEgKG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChhbmQgKGdldGhhc2ggbSBtaW5vci1oYXNoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb2NhbC12YXJpYWJsZS1pZi1zZXQtcCBtKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlcykpCiAgICAgICAgIChtaW5v ci1nbG9iYWwtbW9kZXMgKHNlcS1maWx0ZXIgKGxhbWJkYSAobSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGdldGhhc2ggbSBtaW5vci1oYXNoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChsb2NhbC12 YXJpYWJsZS1pZi1zZXQtcCBtKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1vZGVzKSkKICAgICAgICAgKG1ham9yLW1vZGVzIChzZXEtcmVtb3ZlIChsYW1iZGEg KG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRoYXNoIG0gbWlub3It aGFzaCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlcykpCiAgICAgICAg IChtYWpvci1wYXRocy1oYXNoIChjb25zdWx0LS1zdHJpbmctaGFzaCAobWFwY2FyICMnc3ltYm9s LWZpbGUgbWFqb3ItbW9kZXMpKSkKICAgICAgICAgKG1pbm9yLWxvY2FsLXBhdGhzLWhhc2ggKGNv bnN1bHQtLXN0cmluZy1oYXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtaW5vci1sb2NhbC1tb2Rl cykpKQogICAgICAgICAobWlub3ItZ2xvYmFsLXBhdGhzLWhhc2ggKGNvbnN1bHQtLXN0cmluZy1o YXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtaW5vci1nbG9iYWwtbW9kZXMpKSkKICAgICAgICAg KG1ham9yLW5hbWUtcmVnZXhwIChyZWdleHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5h bWUgbWFqb3ItbW9kZXMpKSkKICAgICAgICAgKG1pbm9yLWxvY2FsLW5hbWUtcmVnZXhwIChyZWdl eHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5hbWUgbWlub3ItbG9jYWwtbW9kZXMpKSkK ICAgICAgICAgKG1pbm9yLWdsb2JhbC1uYW1lLXJlZ2V4cCAocmVnZXhwLW9wdCAobWFwY2FyICMn Y29uc3VsdC0tbW9kZS1uYW1lIG1pbm9yLWdsb2JhbC1tb2RlcykpKQogICAgICAgICAoY29tbWFu ZHMpKQogICAgKGRvbGlzdCAoZmVhdHVyZSBsb2FkLWhpc3RvcnkgY29tbWFuZHMpCiAgICAgICh3 aGVuLWxldCAobmFtZSAoYWxpc3QtZ2V0ICdwcm92aWRlIGZlYXR1cmUpKQogICAgICAgIChsZXQq ICgocGF0aCAoY2FyIGZlYXR1cmUpKQogICAgICAgICAgICAgICAoZmlsZSAoZmlsZS1uYW1lLW5v bmRpcmVjdG9yeSBwYXRoKSkKICAgICAgICAgICAgICAgKGtleSAoY29uZAogICAgICAgICAgICAg ICAgICAgICAoKG1lbXEgbmFtZSBmZWF0dXJlLWZpbHRlcikgbmlsKQogICAgICAgICAgICAgICAg ICAgICAoKG9yIChnZXRoYXNoIHBhdGggbWFqb3ItcGF0aHMtaGFzaCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgbWFqb3ItbmFtZS1yZWdleHAgZmlsZSkpCiAgICAg ICAgICAgICAgICAgICAgICA/bSkKICAgICAgICAgICAgICAgICAgICAgKChvciAoZ2V0aGFzaCBw YXRoIG1pbm9yLWxvY2FsLXBhdGhzLWhhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1tYXRjaC1wIG1pbm9yLWxvY2FsLW5hbWUtcmVnZXhwIGZpbGUpKQogICAgICAgICAgICAg ICAgICAgICAgP2wpCiAgICAgICAgICAgICAgICAgICAgICgob3IgKGdldGhhc2ggcGF0aCBtaW5v ci1nbG9iYWwtcGF0aHMtaGFzaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1h dGNoLXAgbWlub3ItZ2xvYmFsLW5hbWUtcmVnZXhwIGZpbGUpKQogICAgICAgICAgICAgICAgICAg ICAgP2cpKSkpCiAgICAgICAgICAod2hlbiBrZXkKICAgICAgICAgICAgKGRvbGlzdCAoY21kIChj ZHIgZmVhdHVyZSkpCiAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoY29uc3AgY21kKQogICAgICAg ICAgICAgICAgICAgICAgICAgKGVxIChjYXIgY21kKSAnZGVmdW4pCiAgICAgICAgICAgICAgICAg ICAgICAgICAoY29tbWFuZHAgKGNkciBjbWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgKG5v dCAoc3RyaW5nLW1hdGNoLXAgY29tbWFuZC1maWx0ZXIgKHN5bWJvbC1uYW1lIChjZHIgY21kKSkp KQogICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoZ2V0IChjZHIgY21kKSAnYnl0ZS1vYnNv bGV0ZS1pbmZvKSkpCiAgICAgICAgICAgICAgICAocHVzaCAoY29ucyAoY2RyIGNtZCkga2V5KSBj b21tYW5kcykpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbW9kZS1jb21t YW5kICgmcmVzdCBtb2RlcykKICAiUnVuIGEgY29tbWFuZCBmcm9tIGFueSBvZiB0aGUgZ2l2ZW4g TU9ERVMuCgpJZiBubyBNT0RFUyBhcmUgc3BlY2lmaWVkLCB1c2UgY3VycmVudGx5IGFjdGl2ZSBt YWpvciBhbmQgbWlub3IgbW9kZXMuIgogIChpbnRlcmFjdGl2ZSkKICAodW5sZXNzIG1vZGVzCiAg ICAoc2V0cSBtb2RlcyAoY29ucyBtYWpvci1tb2RlCiAgICAgICAgICAgICAgICAgICAgICAoc2Vx LWZpbHRlciAobGFtYmRhIChtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YW5kIChib3VuZHAgbSkgKHN5bWJvbC12YWx1ZSBtKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW5vci1tb2RlLWxpc3QpKSkpCiAgKGNvbW1hbmQtZXhlY3V0ZQogICAoaW50 ZXJuCiAgICAoY29uc3VsdC0tcmVhZAogICAgICJNb2RlIGNvbW1hbmQ6ICIKICAgICAoY29uc3Vs dC0tbW9kZS1jb21tYW5kLWNhbmRpZGF0ZXMgbW9kZXMpCiAgICAgOnByZWRpY2F0ZQogICAgIChs YW1iZGEgKGNhbmQpCiAgICAgICAoaWYgY29uc3VsdC0tbmFycm93CiAgICAgICAgICAgKD0gKGNk ciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICgvPSAoY2RyIGNhbmQpID9nKSkpCiAg ICAgOm5hcnJvdyAnKCg/bSAuICJNYWpvciIpCiAgICAgICAgICAgICAgICg/bCAuICJMb2NhbCBN aW5vciIpCiAgICAgICAgICAgICAgICg/ZyAuICJHbG9iYWwgTWlub3IiKSkKICAgICA6cmVxdWly ZS1tYXRjaCB0CiAgICAgOmhpc3RvcnkgJ2NvbnN1bHQtLW1vZGUtY29tbWFuZC1oaXN0b3J5CiAg ICAgOmNhdGVnb3J5ICdjb21tYW5kKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC15YW5rCgoo ZGVmdW4gY29uc3VsdC0teWFuay1yZWFkICgpCiAgIk9wZW4ga2lsbCByaW5nIG1lbnUgYW5kIHJl dHVybiBzZWxlY3RlZCB0ZXh0LiIKICAoY29uc3VsdC0tcmVhZAogICAiWWFuayB0ZXh0OiAiCiAg IChjb25zdWx0LS1yZW1vdmUtZHVwcyBraWxsLXJpbmcpCiAgIDpoaXN0b3J5IHQgOzsgZGlzYWJs ZSBoaXN0b3J5CiAgIDpzb3J0IG5pbAogICA6Y2F0ZWdvcnkgJ2NvbnN1bHQteWFuawogICA6cmVx dWlyZS1tYXRjaCB0CiAgIDpwcmV2aWV3CiAgIDs7IElmIHByZXZpb3VzIGNvbW1hbmQgaXMgeWFu aywgaGlkZSBwcmV2aW91c2x5IHlhbmtlZCB0ZXh0CiAgIChsZXQqICgob3YpIChwdCAocG9pbnQp KSAobWsgKG9yIChhbmQgKGVxIGxhc3QtY29tbWFuZCAneWFuaykgKG1hcmsgdCkpIHB0KSkpCiAg ICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgKGlmIHJlc3RvcmUKICAgICAgICAgICAo d2hlbiBvdiAoZGVsZXRlLW92ZXJsYXkgb3YpKQogICAgICAgICAodW5sZXNzIG92IChzZXRxIG92 IChjb25zdWx0LS1vdmVybGF5IChtaW4gcHQgbWspIChtYXggcHQgbWspICdpbnZpc2libGUgdCkp KQogICAgICAgICA7OyBVc2UgYGFkZC1mYWNlLXRleHQtcHJvcGVydHknIG9uIGEgY29weSBvZiAi Y2FuZCBpbiBvcmRlciB0byBtZXJnZSBmYWNlIHByb3BlcnRpZXMKICAgICAgICAgKHNldHEgY2Fu ZCAoY29weS1zZXF1ZW5jZSBjYW5kKSkKICAgICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkg MCAobGVuZ3RoIGNhbmQpICdjb25zdWx0LXByZXZpZXcteWFuayB0IGNhbmQpCiAgICAgICAgIDs7 IFVzZSB0aGUgYGJlZm9yZS1zdHJpbmcnIHByb3BlcnR5IHNpbmNlIHRoZSBvdmVybGF5IG1pZ2h0 IGJlIGVtcHR5LgogICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2JlZm9yZS1zdHJpbmcgY2FuZCkp KSkpKQoKOzsgSW5zZXJ0IHNlbGVjdGVkIHRleHQuCjs7IEFkYXB0ZWQgZnJvbSB0aGUgRW1hY3Mg eWFuayBmdW5jdGlvbi4KOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQteWFuayAoKQogICJT ZWxlY3QgdGV4dCBmcm9tIHRoZSBraWxsIHJpbmcgYW5kIGluc2VydCBpdC4iCiAgKGludGVyYWN0 aXZlKQogIChsZXQgKCh0ZXh0IChjb25zdWx0LS15YW5rLXJlYWQpKSkKICAgIChzZXRxIHlhbmst d2luZG93LXN0YXJ0ICh3aW5kb3ctc3RhcnQpKQogICAgKHB1c2gtbWFyaykKICAgIChpbnNlcnQt Zm9yLXlhbmsgdGV4dCkKICAgIChzZXRxIHRoaXMtY29tbWFuZCAneWFuaykKICAgIG5pbCkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC15YW5rLXBvcCAoJm9wdGlvbmFsIGFyZykKICAi SWYgdGhlcmUgaXMgYSByZWNlbnQgeWFuayBhY3QgbGlrZSBgeWFuay1wb3AnLgoKT3RoZXJ3aXNl IHNlbGVjdCB0ZXh0IGZyb20gdGhlIGtpbGwgcmluZyBhbmQgaW5zZXJ0IGl0LgpTZWUgYHlhbmst cG9wJyBmb3IgdGhlIG1lYW5pbmcgb2YgQVJHLiIKICAoaW50ZXJhY3RpdmUgIipwIikKICAoaWYg KGVxIGxhc3QtY29tbWFuZCAneWFuaykKICAgICAgKHlhbmstcG9wIChvciBhcmcgMSkpCiAgICAo Y29uc3VsdC15YW5rKSkpCgo7OyBSZXBsYWNlIGp1c3QteWFua2VkIHRleHQgd2l0aCBzZWxlY3Rl ZCB0ZXh0Lgo7OyBBZGFwdGVkIGZyb20gdGhlIEVtYWNzIHlhbmstcG9wIGZ1bmN0aW9uLgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC15YW5rLXJlcGxhY2UgKCkKICAiU2VsZWN0IHRleHQg ZnJvbSB0aGUga2lsbCByaW5nLgoKSWYgdGhlcmUgd2FzIG5vIHJlY2VudCB5YW5rLCBpbnNlcnQg dGhlIHRleHQuCk90aGVyd2lzZSByZXBsYWNlIHRoZSBqdXN0LXlhbmtlZCB0ZXh0IHdpdGggdGhl IHNlbGVjdGVkIHRleHQuIgogIChpbnRlcmFjdGl2ZSkKICAoaWYgKG5vdCAoZXEgbGFzdC1jb21t YW5kICd5YW5rKSkKICAgICAgKGNvbnN1bHQteWFuaykKICAgIChsZXQgKCh0ZXh0IChjb25zdWx0 LS15YW5rLXJlYWQpKQogICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCiAgICAgICAgICAo cHQgKHBvaW50KSkKICAgICAgICAgIChtayAobWFyayB0KSkpCiAgICAgIChzZXRxIHRoaXMtY29t bWFuZCAneWFuaykKICAgICAgKGZ1bmNhbGwgKG9yIHlhbmstdW5kby1mdW5jdGlvbiAnZGVsZXRl LXJlZ2lvbikgKG1pbiBwdCBtaykgKG1heCBwdCBtaykpCiAgICAgIChzZXRxIHlhbmstdW5kby1m dW5jdGlvbiBuaWwpCiAgICAgIChzZXQtbWFya2VyIChtYXJrLW1hcmtlcikgcHQgKGN1cnJlbnQt YnVmZmVyKSkKICAgICAgKGluc2VydC1mb3IteWFuayB0ZXh0KQogICAgICAoc2V0LXdpbmRvdy1z dGFydCAoc2VsZWN0ZWQtd2luZG93KSB5YW5rLXdpbmRvdy1zdGFydCB0KQogICAgICAoaWYgKDwg cHQgbWspCiAgICAgICAgICAoZ290by1jaGFyIChwcm9nMSAobWFyayB0KQogICAgICAgICAgICAg ICAgICAgICAgIChzZXQtbWFya2VyIChtYXJrLW1hcmtlcikgKHBvaW50KSAoY3VycmVudC1idWZm ZXIpKSkpKSkpCiAgbmlsKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1yZWdpc3RlcgoKOzs7IyMj YXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXItd2luZG93IChidWZmZXIgJm9wdGlvbmFs IHNob3ctZW1wdHkpCiAgIkVuaGFuY2VkIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGByZWdpc3Rl ci1wcmV2aWV3Jy4KCkJVRkZFUiBpcyB0aGUgd2luZG93IGJ1ZmZlci4KU0hPVy1FTVBUWSBtdXN0 IGJlIHQgaWYgdGhlIHdpbmRvdyBzaG91bGQgYmUgc2hvd24gZm9yIGFuIGVtcHR5IHJlZ2lzdGVy IGxpc3QuIgogIChsZXQgKChyZWdzIChzZXEtZmlsdGVyICMnY2RyIHJlZ2lzdGVyLWFsaXN0KSkp CiAgICAod2hlbiAob3Igc2hvdy1lbXB0eSByZWdzKQogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZl ci13aW5kb3cgYnVmZmVyCiAgICAgICAgICAoY29ucyAnZGlzcGxheS1idWZmZXItYmVsb3ctc2Vs ZWN0ZWQKICAgICAgICAgICAgICAgICcoKHdpbmRvdy1oZWlnaHQgLiBmaXQtd2luZG93LXRvLWJ1 ZmZlcikKCSAgICAgICAgICAocHJlc2VydmUtc2l6ZSAuIChuaWwgLiB0KSkpKQogICAgICAgICAg bmlsCiAgICAgICAgKHNldHEtbG9jYWwgY3Vyc29yLWluLW5vbi1zZWxlY3RlZC13aW5kb3dzIG5p bCkKICAgICAgICAoc2V0cS1sb2NhbCBtb2RlLWxpbmUtZm9ybWF0IG5pbCkKICAgICAgICAoc2V0 cS1sb2NhbCB3aW5kb3ctbWluLWhlaWdodCAxKQogICAgICAgIChzZXEtZG8taW5kZXhlZAogICAg ICAgICAobGFtYmRhIChyZWcgaWR4KQogICAgICAgICAgIChsZXQgKChiZWcgKHBvaW50KSkpCiAg ICAgICAgICAgICAoaW5zZXJ0IChmdW5jYWxsIHJlZ2lzdGVyLXByZXZpZXctZnVuY3Rpb24gcmVn KSkKICAgICAgICAgICAgICh3aGVuICgvPSAwICglIGlkeCAyKSkKICAgICAgICAgICAgICAgKGNv bnN1bHQtLW92ZXJsYXkgYmVnIChwb2ludCkgJ2ZhY2UgJ2NvbnN1bHQtemVicmEpKSkpCiAgICAg ICAgIChzZXEtc29ydCAjJ2Nhci1sZXNzLXRoYW4tY2FyIHJlZ3MpKSkpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LXJlZ2lzdGVyLWZvcm1hdCAocmVnKQogICJFbmhhbmNlZCBwcmV2 aWV3IG9mIHJlZ2lzdGVyIFJFRy4KClRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYHJlZ2lz dGVyLXByZXZpZXctZnVuY3Rpb24nLiIKICAoYXBwbHkgIydjb25jYXQKICAgICAgICAgKG1hcGNh ciAobGFtYmRhIChzKSAoY29uY2F0ICh0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGggcyAxMDAgMCBu aWwgIuKApiIpICJcbiIpKQogICAgICAgICAgICAgICAgIChzcGxpdC1zdHJpbmcgKGNvbnN1bHQt LXJlZ2lzdGVyLWZvcm1hdCByZWcpICJcbiIpKSkpCgooZGVmdW4gY29uc3VsdC0tcmVnaXN0ZXIt Zm9ybWF0IChyZWcpCiAgIkZvcm1hdCByZWdpc3RlciBSRUcgZm9yIHByZXZpZXcuIgogIChwY2Fz ZS1sZXQgKChgKCxrZXkgLiAsdmFsKSByZWcpKQogICAgKGxldCogKChrZXktc3RyIChzaW5nbGUt a2V5LWRlc2NyaXB0aW9uIGtleSkpCiAgICAgICAgICAgKGZtdCAoZm9ybWF0ICIlJS0lZHMgIiAo bWF4IDMgKGxlbmd0aCBrZXktc3RyKSkpKSkKICAgICAgKGNvbmNhdAogICAgICAgKGZvcm1hdCBm bXQgKHByb3BlcnRpemUga2V5LXN0ciAnZmFjZSAnY29uc3VsdC1rZXkpKQogICAgICAgOzsgU3Bl Y2lhbCBwcmludGluZyBmb3IgY2VydGFpbiByZWdpc3RlciB0eXBlcwogICAgICAgKGNvbmQKICAg ICAgICA7OyBEaXNwbGF5IGZ1bGwgc3RyaW5nCiAgICAgICAgKChvciAoc3RyaW5ncCB2YWwpIChz dHJpbmdwIChjYXItc2FmZSB2YWwpKSkKICAgICAgICAgKHdoZW4gKGNvbnNwIHZhbCkKICAgICAg ICAgICAoc2V0cSB2YWwgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IHZhbCAiXG4iKSkpCiAgICAgICAg IChtYXBjb25jYXQgIydpZGVudGl0eQogICAgICAgICAgICAgICAgICAgIChzZXEtdGFrZSAoc3Bs aXQtc3RyaW5nIChzdHJpbmctdHJpbSB2YWwpICJcbiIpIDMpCiAgICAgICAgICAgICAgICAgICAg KGZvcm1hdCBmbXQgIlxuIikpKQogICAgICAgIDs7IERpc3BsYXkgJ2ZpbGUtcXVlcnkKICAgICAg ICAoKGVxIChjYXItc2FmZSB2YWwpICdmaWxlLXF1ZXJ5KQogICAgICAgICAoZm9ybWF0ICIlcyBh dCBwb3NpdGlvbiAlZCIKICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAoYWJicmV2aWF0ZS1m aWxlLW5hbWUgKGNhZHIgdmFsKSkgJ2ZhY2UgJ2NvbnN1bHQtZmlsZSkKICAgICAgICAgICAgICAg ICAoY2FkZHIgdmFsKSkpCiAgICAgICAgOzsgRGlzcGxheSBmdWxsIGxpbmUgb2YgYnVmZmVyCiAg ICAgICAgKChhbmQgKG1hcmtlcnAgdmFsKSAoYnVmZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciB2 YWwpKSkKICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKG1hcmtlci1idWZmZXIgdmFsKQog ICAgICAgICAgIChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgICAgICAgICAgKHdpZGVuKQogICAgICAgICAgICAgICAoZ290by1jaGFyIHZhbCkKICAg ICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAgKGNvbnN1bHQtLWZvcm1hdC1sb2Nh dGlvbiAoYnVmZmVyLW5hbWUpIChsaW5lLW51bWJlci1hdC1wb3MpKQogICAgICAgICAgICAgICAg KGNvbnN1bHQtLWxpbmUtd2l0aC1jdXJzb3IgdmFsKSkpKSkpCiAgICAgICAgOzsgRGVmYXVsdCBw cmludGluZyBmb3IgdGhlIG90aGVyIHR5cGVzCiAgICAgICAgKHQgKHJlZ2lzdGVyLWRlc2NyaWJl LW9uZWxpbmUga2V5KSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0ICgpCiAg IlJldHVybiByZWdpc3RlciBsaXN0IG9yIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBsaXN0IGlzIGVt cHR5LiIKICA7OyBTb21ldGltZXMsIHJlZ2lzdGVycyBhcmUgbWFkZSB3aXRob3V0IGEgYGNkcicu CiAgOzsgU3VjaCByZWdpc3RlcnMgZG9uJ3QgZG8gYW55dGhpbmcsIGFuZCBjYW4gYmUgaWdub3Jl ZC4KICAob3IgKHNlcS1maWx0ZXIgIydjZHIgcmVnaXN0ZXItYWxpc3QpICh1c2VyLWVycm9yICJB bGwgcmVnaXN0ZXJzIGFyZSBlbXB0eSIpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LXJlZ2lzdGVyICgmb3B0aW9uYWwgYXJnKQogICJMb2FkIHJlZ2lzdGVyIGFuZCBlaXRoZXIganVt cCB0byBsb2NhdGlvbiBvciBpbnNlcnQgdGhlIHN0b3JlZCB0ZXh0LgoKVGhpcyBjb21tYW5kIGlz IHVzZWZ1bCB0byBzZWFyY2ggdGhlIHJlZ2lzdGVyIGNvbnRlbnRzLiBGb3IgcXVpY2sgYWNjZXNz IHRvCnJlZ2lzdGVycyBpdCBpcyBzdGlsbCByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHJlZ2lzdGVy IGZ1bmN0aW9ucwpgY29uc3VsdC1yZWdpc3Rlci1sb2FkJyBhbmQgYGNvbnN1bHQtcmVnaXN0ZXIt c3RvcmUnIG9yIHRoZSBidWlsdC1pbiBidWlsdC1pbgpyZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25z LiBUaGUgY29tbWFuZCBzdXBwb3J0cyBuYXJyb3dpbmcsIHNlZQpgY29uc3VsdC1yZWdpc3Rlci1u YXJyb3cnLiBNYXJrZXIgcG9zaXRpb25zIGFyZSBwcmV2aWV3ZWQuIFNlZQpganVtcC10by1yZWdp c3RlcicgYW5kIGBpbnNlcnQtcmVnaXN0ZXInIGZvciB0aGUgbWVhbmluZyBvZiBBUkcuIgogIChp bnRlcmFjdGl2ZSAiUCIpCiAgKGNvbnN1bHQtcmVnaXN0ZXItbG9hZAogICAoY29uc3VsdC0tcmVh ZAogICAgIlJlZ2lzdGVyOiAiCiAgICAobWFwY2FyIChsYW1iZGEgKHJlZykgKGNvbnMgKGNvbnN1 bHQtLXJlZ2lzdGVyLWZvcm1hdCByZWcpIChjYXIgcmVnKSkpCiAgICAgICAgICAgIChzb3J0IChj b25zdWx0LS1yZWdpc3Rlci1hbGlzdCkgIydjYXItbGVzcy10aGFuLWNhcikpCiAgICA6Y2F0ZWdv cnkgJ2NvbnN1bHQtcmVnaXN0ZXIKICAgIDpwcmV2aWV3CiAgICAobGV0ICgocHJldmlldyAoY29u c3VsdC0tcHJldmlldy1wb3NpdGlvbikpKQogICAgICAobGFtYmRhIChjYW5kIHJlc3RvcmUpCiAg ICAgICAgKGZ1bmNhbGwgcHJldmlldwogICAgICAgICAgICAgICAgIDs7IFByZXZpZXcgbWFya2Vy cwogICAgICAgICAgICAgICAgICh3aGVuLWxldCAocmVnIChnZXQtcmVnaXN0ZXIgY2FuZCkpCiAg ICAgICAgICAgICAgICAgICAoYW5kIChtYXJrZXJwIHJlZykgcmVnKSkKICAgICAgICAgICAgICAg ICByZXN0b3JlKSkpCiAgICA6bmFycm93CiAgICAoY29ucwogICAgIChsYW1iZGEgKGNhbmQpCiAg ICAgICAobGV0ICgocmVnIChnZXQtcmVnaXN0ZXIgKGNkciBjYW5kKSkpKQogICAgICAgICAoc2Vx LWZpbmQgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgKGFuZAogICAgICAgICAgICAg ICAgICAgICAgKD0gKGNhciB4KSBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICAgICAgICAgICAg ICAoZnVuY2FsbCAoY2FkZHIgeCkgcmVnKSkpCiAgICAgICAgICAgICAgICAgICBjb25zdWx0LXJl Z2lzdGVyLW5hcnJvdykpKQogICAgIChtYXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgseCAseSAsXykp IChjb25zIHggeSkpCiAgICAgICAgICAgICBjb25zdWx0LXJlZ2lzdGVyLW5hcnJvdykpCiAgICA6 c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpoaXN0b3J5IHQgOzsgZGlzYWJsZSBo aXN0b3J5CiAgICA6bG9va3VwICMnY29uc3VsdC0tbG9va3VwLWNkcikKICAgYXJnKSkKCjs7OyMj I2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXJlZ2lzdGVyLWxvYWQgKHJlZyAmb3B0aW9uYWwgYXJn KQogICJEbyB3aGF0IEkgbWVhbiB3aXRoIGEgUkVHLgoKRm9yIGEgd2luZG93IGNvbmZpZ3VyYXRp b24sIHJlc3RvcmUgaXQuIEZvciBhIG51bWJlciBvciB0ZXh0LCBpbnNlcnQgaXQuIEZvciBhCmxv Y2F0aW9uLCBqdW1wIHRvIGl0LiBTZWUgYGp1bXAtdG8tcmVnaXN0ZXInIGFuZCBgaW5zZXJ0LXJl Z2lzdGVyJyBmb3IgdGhlCm1lYW5pbmcgb2YgQVJHLiIKICAoaW50ZXJhY3RpdmUKICAgKGxpc3QK ICAgIChhbmQgKGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0KQogICAgICAgICAocmVnaXN0ZXItcmVh ZC13aXRoLXByZXZpZXcgIkxvYWQgcmVnaXN0ZXI6ICIpKQogICAgY3VycmVudC1wcmVmaXgtYXJn KSkKICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgIChqdW1wLXRvLXJlZ2lzdGVyIHJlZyBhcmcp CiAgICAodXNlci1lcnJvciAoaW5zZXJ0LXJlZ2lzdGVyIHJlZyBhcmcpKSkpCgooZGVmdW4gY29u c3VsdC0tcmVnaXN0ZXItYWN0aW9uIChhY3Rpb24tbGlzdCkKICAiUmVhZCByZWdpc3RlciBrZXkg YW5kIGV4ZWN1dGUgYWN0aW9uIGZyb20gQUNUSU9OLUxJU1QuCgpUaGlzIGZ1bmN0aW9uIGlzIGRl cml2ZWQgZnJvbSBgcmVnaXN0ZXItcmVhZC13aXRoLXByZXZpZXcnLiIKICAobGV0KiAoKGJ1ZmZl ciAiKlJlZ2lzdGVyIFByZXZpZXcqIikKICAgICAgICAgKHByZWZpeCAoY2FyIGFjdGlvbi1saXN0 KSkKICAgICAgICAgKGFjdGlvbi1saXN0IChjZHIgYWN0aW9uLWxpc3QpKQogICAgICAgICAoYWN0 aW9uIChjYXIgKG50aCAwIGFjdGlvbi1saXN0KSkpCiAgICAgICAgIChyZWcpCiAgICAgICAgIChw cmV2aWV3CiAgICAgICAgICAobGFtYmRhICgpCgkgICAgKHVubGVzcyAoZ2V0LWJ1ZmZlci13aW5k b3cgYnVmZmVyKQoJICAgICAgKHJlZ2lzdGVyLXByZXZpZXcgYnVmZmVyICdzaG93LWVtcHR5KQog ICAgICAgICAgICAgICh3aGVuLWxldCAod2luIChnZXQtYnVmZmVyLXdpbmRvdyBidWZmZXIpKQog ICAgICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbgogICAgICAgICAgICAgICAg ICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCiAgICAgICAgICAgICAgICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAg ICAgICAgICAgIChwcm9wZXJ0aXplIChjb25jYXQgcHJlZml4ICI6ICAiKSAnZmFjZSAnY29uc3Vs dC1oZWxwKQogICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0CiAgICAgICAgICAgICAgICAg ICAgICAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0 aXplIChmb3JtYXQgIk0tJWMiIChjYXIgeCkpICdmYWNlICdjb25zdWx0LWtleSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiICIgKHByb3BlcnRpemUgKGNhZHIgeCkgJ2ZhY2UgJ2Nv bnN1bHQtaGVscCkpKQogICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLWxpc3QgIiAgIikpCiAg ICAgICAgICAgICAgICAgICAgKGZpdC13aW5kb3ctdG8tYnVmZmVyKSkpKSkpKQoJICh0aW1lciAo d2hlbiAobnVtYmVycCByZWdpc3Rlci1wcmV2aWV3LWRlbGF5KQoJICAgICAgICAgIChydW4td2l0 aC10aW1lciByZWdpc3Rlci1wcmV2aWV3LWRlbGF5IG5pbCBwcmV2aWV3KSkpCgkgKGhlbHAtY2hh cnMgKHNlcS1yZW1vdmUgIydnZXQtcmVnaXN0ZXIgKGNvbnMgaGVscC1jaGFyIGhlbHAtZXZlbnQt bGlzdCkpKSkKICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgICh3aGlsZSAobm90IHJlZykKCSAg KHdoaWxlIChtZW1xIChyZWFkLWtleSAocHJvcGVydGl6ZSAoY2FkZHIgKGFzc3EgYWN0aW9uIGFj dGlvbi1saXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2ZhY2UgJ21pbmlidWZmZXItcHJvbXB0KSkKCQkgICAgICAgaGVscC1jaGFycykKICAgICAgICAg ICAgKGZ1bmNhbGwgcHJldmlldykpCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgob3IgKGVx ID9cQy1nIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgICAgICAoZXEgJ2VzY2FwZSBsYXN0 LWlucHV0LWV2ZW50KQogICAgICAgICAgICAgICAgKGVxID9cQy1cWyBsYXN0LWlucHV0LWV2ZW50 KSkKICAgICAgICAgICAgKGtleWJvYXJkLXF1aXQpKQogICAgICAgICAgICgoYW5kIChudW1iZXJw IGxhc3QtaW5wdXQtZXZlbnQpIChhc3NxIChsb2d4b3IgI3g4MDAwMDAwIGxhc3QtaW5wdXQtZXZl bnQpIGFjdGlvbi1saXN0KSkKICAgICAgICAgICAgKHNldHEgYWN0aW9uIChsb2d4b3IgI3g4MDAw MDAwIGxhc3QtaW5wdXQtZXZlbnQpKSkKCSAgICgoY2hhcmFjdGVycCBsYXN0LWlucHV0LWV2ZW50 KQogICAgICAgICAgICAoc2V0cSByZWcgbGFzdC1pbnB1dC1ldmVudCkpCiAgICAgICAgICAgKHQg KGVycm9yICJOb24tY2hhcmFjdGVyIGlucHV0LWV2ZW50IikpKSkKICAgICAgKHdoZW4gKHRpbWVy cCB0aW1lcikKICAgICAgICAoY2FuY2VsLXRpbWVyIHRpbWVyKSkKICAgICAgKGxldCAoKHcgKGdl dC1idWZmZXItd2luZG93IGJ1ZmZlcikpKQogICAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIHcp CiAgICAgICAgICAoZGVsZXRlLXdpbmRvdyB3KSkpCiAgICAgICh3aGVuIChnZXQtYnVmZmVyIGJ1 ZmZlcikKICAgICAgICAoa2lsbC1idWZmZXIgYnVmZmVyKSkpCiAgICAod2hlbiByZWcKICAgICAg KGZ1bmNhbGwgKGNhZGRkciAoYXNzcSBhY3Rpb24gYWN0aW9uLWxpc3QpKSByZWcpKSkpCgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWdpc3Rlci1zdG9yZSAoYXJnKQogICJTdG9yZSBy ZWdpc3RlciBkZXBlbmRlbnQgb24gY3VycmVudCBjb250ZXh0LCBzaG93aW5nIGFuIGFjdGlvbiBt ZW51LgoKV2l0aCBhbiBhY3RpdmUgcmVnaW9uLCBzdG9yZS9hcHBlbmQvcHJlcGVuZCB0aGUgY29u dGVudHMsIG9wdGlvbmFsbHkgZGVsZXRpbmcKdGhlIHJlZ2lvbiB3aGVuIGEgcHJlZml4IEFSRyBp cyBnaXZlbi4gV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgc3RvcmUvYWRkIHRoZQpudW1iZXIu IE90aGVyd2lzZSBzdG9yZSBwb2ludCwgZnJhbWVzZXQsIHdpbmRvdyBvciBrbWFjcm8uIgogIChp bnRlcmFjdGl2ZSAiUCIpCiAgKGNvbnN1bHQtLXJlZ2lzdGVyLWFjdGlvbgogICAoY29uZAogICAg KCh1c2UtcmVnaW9uLXApCiAgICAgKGxldCAoKGJlZyAocmVnaW9uLWJlZ2lubmluZykpCiAgICAg ICAgICAgKGVuZCAocmVnaW9uLWVuZCkpKQogICAgICAgYCgiUmVnaW9uIgogICAgICAgICAoP2Mg ImNvcHkiICJDb3B5IHJlZ2lvbiB0byByZWdpc3RlcjogIiAsKGxhbWJkYSAocikgKGNvcHktdG8t cmVnaXN0ZXIgciBiZWcgZW5kIGFyZyB0KSkpCiAgICAgICAgICg/YSAiYXBwZW5kIiAiQXBwZW5k IHJlZ2lvbiB0byByZWdpc3RlcjogIiAsKGxhbWJkYSAocikgKGFwcGVuZC10by1yZWdpc3RlciBy IGJlZyBlbmQgYXJnKSkpCiAgICAgICAgICg/cCAicHJlcGVuZCIgIlByZXBlbmQgcmVnaW9uIHRv IHJlZ2lzdGVyOiAiICwobGFtYmRhIChyKSAocHJlcGVuZC10by1yZWdpc3RlciByIGJlZyBlbmQg YXJnKSkpKSkpCiAgICAoKG51bWJlcnAgYXJnKQogICAgIGAoLChmb3JtYXQgIk51bWJlciAlcyIg YXJnKQogICAgICAgKD9zICJzdG9yZSIgLChmb3JtYXQgIlN0b3JlICVzIGluIHJlZ2lzdGVyOiAi IGFyZykgLChsYW1iZGEgKHIpIChudW1iZXItdG8tcmVnaXN0ZXIgYXJnIHIpKSkKICAgICAgICg/ YSAiYWRkIiAsKGZvcm1hdCAiQWRkICVzIHRvIHJlZ2lzdGVyOiAiIGFyZykgLChsYW1iZGEgKHIp IChpbmNyZW1lbnQtcmVnaXN0ZXIgYXJnIHIpKSkpKQogICAgKHQKICAgICBgKCJTdG9yZSIKICAg ICAgICg/cCAicG9pbnQiICJQb2ludCB0byByZWdpc3RlcjogIiAsIydwb2ludC10by1yZWdpc3Rl cikKICAgICAgICg/ZiAiZnJhbWVzZXQiICJGcmFtZXNldCB0byByZWdpc3RlcjogIiAsIydmcmFt ZXNldC10by1yZWdpc3RlcikKICAgICAgICg/dyAid2luZG93IiAiV2luZG93IHRvIHJlZ2lzdGVy OiAiICwjJ3dpbmRvdy1jb25maWd1cmF0aW9uLXRvLXJlZ2lzdGVyKQogICAgICAgLEAoYW5kIGxh c3Qta2JkLW1hY3JvIGAoKD9rICJrbWFjcm8iICJLbWFjcm8gdG8gcmVnaXN0ZXI6ICIgLCMna21h Y3JvLXRvLXJlZ2lzdGVyKSkpKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtYm9va21hcmsK Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWJvb2ttYXJrIChuYW1lKQogICJJZiBib29r bWFyayBOQU1FIGV4aXN0cywgb3BlbiBpdCwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBib29rbWFy ayB3aXRoIE5BTUUuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IG9mIGZpbGUgYm9va21h cmtzIGFuZCBuYXJyb3dpbmcuIFNlZSB0aGUKdmFyaWFibGUgYGNvbnN1bHQtYm9va21hcmstbmFy cm93JyBmb3IgdGhlIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLiIKICAoaW50ZXJhY3RpdmUKICAg KGxpc3QKICAgIChjb25zdWx0LS13aXRoLWZpbGUtcHJldmlldyAob3BlbikKICAgICAgKGNvbnN1 bHQtLXJlYWQKICAgICAgICJCb29rbWFyazogIgogICAgICAgKGJvb2ttYXJrLWFsbC1uYW1lcykK ICAgICAgIDs7IEFkZCBkZWZhdWx0IG5hbWVzIHRvIGZ1dHVyZSBoaXN0b3J5LgogICAgICAgOzsg SWdub3JlIGVycm9ycyBzdWNoIHRoYXQgYGNvbnN1bHQtYm9va21hcmsnIGNhbiBiZSB1c2VkIGlu CiAgICAgICA7OyBidWZmZXJzIHdoaWNoIGFyZSBub3QgYmFja2VkIGJ5IGEgZmlsZS4KICAgICAg IDphZGQtaGlzdG9yeSAoaWdub3JlLWVycm9ycyAoYm9va21hcmstcHJvcC1nZXQgKGJvb2ttYXJr LW1ha2UtcmVjb3JkKSAnZGVmYXVsdHMpKQogICAgICAgOm5hcnJvdwogICAgICAgKGNvbnMKICAg ICAgICAobGFtYmRhIChjYW5kKQogICAgICAgICAgKGlmLWxldCAoKG4gY29uc3VsdC0tbmFycm93 KQogICAgICAgICAgICAgICAgICAgKGJtIChib29rbWFyay1nZXQtYm9va21hcmstcmVjb3JkCiAg ICAgICAgICAgICAgICAgICAgICAgIChhc3NvYyBjYW5kIGJvb2ttYXJrLWFsaXN0KSkpKQogICAg ICAgICAgICAgIChlcSBuIChjYWRkciAoYWxpc3QtZ2V0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAob3IgKGFsaXN0LWdldCAnaGFuZGxlciBibSkgIydib29rbWFyay1kZWZhdWx0LWhhbmRs ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdWx0LWJvb2ttYXJrLW5hcnJvdykp KQogICAgICAgICAgICB0KSkKICAgICAgICAobWFwY2FyIChwY2FzZS1sYW1iZGEgKGAoLHggLHkg LF8pKSAoY29ucyB4IHkpKQogICAgICAgICAgICAgICAgY29uc3VsdC1ib29rbWFyay1uYXJyb3cp KQogICAgICAgOnByZXZpZXcKICAgICAgIChsZXQgKChwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3 LXBvc2l0aW9uKSkpCiAgICAgICAgIChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAgICAo ZnVuY2FsbAogICAgICAgICAgICBwcmV2aWV3CiAgICAgICAgICAgICh3aGVuLWxldCAoYm0gKGJv b2ttYXJrLWdldC1ib29rbWFyay1yZWNvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFz c29jIGNhbmQgYm9va21hcmstYWxpc3QpKSkKICAgICAgICAgICAgICAoaWYtbGV0KiAoKGZpbGUg KGFsaXN0LWdldCAnZmlsZW5hbWUgYm0pKQogICAgICAgICAgICAgICAgICAgICAgICAocG9zIChh bGlzdC1nZXQgJ3Bvc2l0aW9uIGJtKSkKICAgICAgICAgICAgICAgICAgICAgICAgOzsgT25seSBw cmV2aWV3IGJvb2ttYXJrcyB3aXRob3V0IGEgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAg ICA7OyBha2EgYGJvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcichCiAgICAgICAgICAgICAgICAgICAg ICAgIChidWYgKGFuZCAobm90IChhbGlzdC1nZXQgJ2hhbmRsZXIgYm0pKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgb3BlbiBmaWxlKSkpKQogICAgICAgICAgICAg ICAgICAoc2V0LW1hcmtlciAobWFrZS1tYXJrZXIpIHBvcyBidWYpCiAgICAgICAgICAgICAgICAo dW5sZXNzIHJlc3RvcmUgKG1pbmlidWZmZXItbWVzc2FnZSAiTm8gcHJldmlldyBmb3Igc3BlY2lh bCBib29rbWFyayIpKQogICAgICAgICAgICAgICAgbmlsKSkKICAgICAgICAgICAgcmVzdG9yZSkp KQogICAgICAgOmhpc3RvcnkgJ2Jvb2ttYXJrLWhpc3RvcnkKICAgICAgIDpjYXRlZ29yeSAnYm9v a21hcmspKSkpCiAgKGJvb2ttYXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogIChpZiAoYXNz b2MgbmFtZSBib29rbWFyay1hbGlzdCkKICAgICAgKGJvb2ttYXJrLWp1bXAgbmFtZSkKICAgIChi b29rbWFyay1zZXQgbmFtZSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1hcHJvcG9zCgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1hcHJvcG9zICgpCiAgIlNlbGVjdCBwYXR0ZXJuIGFu ZCBjYWxsIGBhcHJvcG9zJy4KClRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGlz IHRoZSBzeW1ib2wgYXQgcG9pbnQuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgocGF0dGVybgog ICAgICAgICAoY29uc3VsdC0tcmVhZAogICAgICAgICAgIkFwcm9wb3M6ICIKICAgICAgICAgIG9i YXJyYXkKICAgICAgICAgIDpwcmVkaWNhdGUgKGxhbWJkYSAoeCkgKG9yIChmYm91bmRwIHgpIChi b3VuZHAgeCkgKGZhY2VwIHgpIChzeW1ib2wtcGxpc3QgeCkpKQogICAgICAgICAgOmhpc3Rvcnkg J2NvbnN1bHQtLWFwcm9wb3MtaGlzdG9yeQogICAgICAgICAgOmNhdGVnb3J5ICdzeW1ib2wKICAg ICAgICAgIDpkZWZhdWx0ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKSkpKQogICAgKHdoZW4gKHN0 cmluZz0gcGF0dGVybiAiIikKICAgICAgKHVzZXItZXJyb3IgIk5vIHBhdHRlcm4gZ2l2ZW4iKSkK ICAgIChhcHJvcG9zIHBhdHRlcm4pKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtY29tcGxleC1j b21tYW5kCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1jb21wbGV4LWNvbW1hbmQgKCkK ICAiU2VsZWN0IGFuZCBldmFsdWF0ZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgaGlzdG9yeS4K ClRoaXMgY29tbWFuZCBjYW4gYWN0IGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgYHJlcGVh dC1jb21wbGV4LWNvbW1hbmQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCogKChoaXN0b3J5IChv ciAoY29uc3VsdC0tcmVtb3ZlLWR1cHMgKG1hcGNhciAjJ3ByaW4xLXRvLXN0cmluZyBjb21tYW5k LWhpc3RvcnkpKQogICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIlRoZXJlIGFyZSBu byBwcmV2aW91cyBjb21wbGV4IGNvbW1hbmRzIikpKQogICAgICAgICAoY21kIChyZWFkIChjb25z dWx0LS1yZWFkCiAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kOiAiIGhpc3RvcnkKICAgICAg ICAgICAgICAgICAgICAgOmRlZmF1bHQgKGNhciBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAg ICA6c29ydCBuaWwKICAgICAgICAgICAgICAgICAgICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhp c3RvcnkKICAgICAgICAgICAgICAgICAgICAgOmNhdGVnb3J5ICdleHByZXNzaW9uKSkpKQogICAg OzsgVGFrZW4gZnJvbSBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcKICAgIChhZGQtdG8taGlzdG9y eSAnY29tbWFuZC1oaXN0b3J5IGNtZCkKICAgIChhcHBseSAjJ2Z1bmNhbGwtaW50ZXJhY3RpdmVs eQoJICAgKGNhciBjbWQpCgkgICAobWFwY2FyIChsYW1iZGEgKGUpIChldmFsIGUgdCkpIChjZHIg Y21kKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaGlzdG9yeQoKKGRlZnVuIGNvbnN1bHQt LWN1cnJlbnQtaGlzdG9yeSAoKQogICJSZXR1cm4gdGhlIGhpc3RvcnkgcmVsZXZhbnQgdG8gdGhl IGN1cnJlbnQgYnVmZmVyLgoKSWYgdGhlIG1pbmlidWZmZXIgaXMgYWN0aXZlLCByZXR1cm5zIHRo ZSBtaW5pYnVmZmVyIGhpc3RvcnksCm90aGVyd2lzZSB0aGUgaGlzdG9yeSBjb3JyZXNwb25kaW5n IHRvIHRoZSBtb2RlIGlzIHJldHVybmVkLgpUaGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgYHJl cGVhdC1jb21wbGV4LWNvbW1hbmQnLApmb3Igd2hpY2ggdGhlIGNvbW1hbmQgaGlzdG9yeSBpcyB1 c2VkLiIKICAoY29uZAogICA7OyBJZiBwcmVzc2luZyAiQy14IE0tOiIsIGkuZS4sIGByZXBlYXQt Y29tcGxleC1jb21tYW5kJywKICAgOzsgd2UgYXJlIGluc3RlYWQgcXVlcnlpbmcgdGhlIGBjb21t YW5kLWhpc3RvcnknIGFuZCBnZXQgYSBmdWxsIHMtZXhwcmVzc2lvbi4KICAgOzsgQWx0ZXJuYXRp dmVseSB5b3UgbWlnaHQgd2FudCB0byB1c2UgYGNvbnN1bHQtY29tcGxleC1jb21tYW5kJywKICAg Ozsgd2hpY2ggY2FuIGFsc28gYmUgYm91bmQgdG8gIkMteCBNLToiIQogICAoKGVxIGxhc3QtY29t bWFuZCAncmVwZWF0LWNvbXBsZXgtY29tbWFuZCkKICAgIChtYXBjYXIgIydwcmluMS10by1zdHJp bmcgY29tbWFuZC1oaXN0b3J5KSkKICAgOzsgSW4gdGhlIG1pbmlidWZmZXIgd2UgdXNlIHRoZSBj dXJyZW50IG1pbmlidWZmZXIgaGlzdG9yeSwKICAgOzsgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQg Ynkgc2V0dGluZyBgbWluaWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlJy4KICAgKChtaW5pYnVmZmVy cCkKICAgIChpZiAoZXEgbWluaWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlIHQpCiAgICAgICAgKHVz ZXItZXJyb3IgIk1pbmlidWZmZXIgaGlzdG9yeSBpcyBkaXNhYmxlZCBmb3IgYCVzJyIgdGhpcy1j b21tYW5kKQogICAgICAoc3ltYm9sLXZhbHVlIG1pbmlidWZmZXItaGlzdG9yeS12YXJpYWJsZSkp KSA7OyAobWluaWJ1ZmZlci1oaXN0b3J5LXZhbHVlKSBpcyBFbWFjcyAyNyBvbmx5CiAgIDs7IE90 aGVyd2lzZSB3ZSB1c2UgYSBtb2RlLXNwZWNpZmljIGhpc3RvcnksIHNlZSBgY29uc3VsdC1tb2Rl LWhpc3RvcmllcycuCiAgICh0ICh3aGVuLWxldCAoaGlzdG9yeQogICAgICAgICAgICAgICAgIChv ciAoc2VxLWZpbmQgKGxhbWJkYSAocmluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFuZCAoZGVyaXZlZC1tb2RlLXAgKGNhciByaW5nKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoYm91bmRwIChjZHIgcmluZykpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN1bHQtbW9kZS1oaXN0b3JpZXMpCiAgICAgICAgICAgICAgICAgICAg ICh1c2VyLWVycm9yCiAgICAgICAgICAgICAgICAgICAgICAiTm8gaGlzdG9yeSBjb25maWd1cmVk IGZvciBgJXMnLCBzZWUgYGNvbnN1bHQtbW9kZS1oaXN0b3JpZXMnIgogICAgICAgICAgICAgICAg ICAgICAgbWFqb3ItbW9kZSkpKQogICAgICAgIChzeW1ib2wtdmFsdWUgKGNkciBoaXN0b3J5KSkp KSkpCgo7OyBUaGlzIGNvbW1hbmQgaGFzIGJlZW4gYWRvcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHVi LmNvbS9vYW50b2xpbi9jb21wbGV0aW5nLWhpc3RvcnkvLgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g Y29uc3VsdC1oaXN0b3J5ICgmb3B0aW9uYWwgaGlzdG9yeSkKICAiSW5zZXJ0IHN0cmluZyBmcm9t IEhJU1RPUlkgb2YgY3VycmVudCBidWZmZXIuCgpJbiBvcmRlciB0byBzZWxlY3QgZnJvbSBhIHNw ZWNpZmljIEhJU1RPUlksIHBhc3MgdGhlIGhpc3RvcnkgdmFyaWFibGUgYXMgYXJndW1lbnQuIgog IChpbnRlcmFjdGl2ZSkKICAobGV0ICgoc3RyIChjb25zdWx0LS1sb2NhbC1sZXQgKChlbmFibGUt cmVjdXJzaXZlLW1pbmlidWZmZXJzIHQpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tcmVhZAog ICAgICAgICAgICAgICAgIkhpc3Rvcnk6ICIKICAgICAgICAgICAgICAgIChsZXQgKChoaXN0b3J5 IChvciBoaXN0b3J5IChjb25zdWx0LS1jdXJyZW50LWhpc3RvcnkpKSkpCiAgICAgICAgICAgICAg ICAgIChvciAoY29uc3VsdC0tcmVtb3ZlLWR1cHMgKGlmIChyaW5nLXAgaGlzdG9yeSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpbmctZWxlbWVudHMg aGlzdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhp c3RvcnkpKQogICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIkhpc3RvcnkgaXMgZW1w dHkiKSkpCiAgICAgICAgICAgICAgICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9yeQogICAg ICAgICAgICAgICAgOmNhdGVnb3J5IDs7IFJlcG9ydCBjb21tYW5kIGNhdGVnb3J5IGZvciBNLXgg aGlzdG9yeQogICAgICAgICAgICAgICAgKGFuZCAobWluaWJ1ZmZlcnApCiAgICAgICAgICAgICAg ICAgICAgIChlcSBtaW5pYnVmZmVyLWhpc3RvcnktdmFyaWFibGUgJ2V4dGVuZGVkLWNvbW1hbmQt aGlzdG9yeSkKICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQpCiAgICAgICAgICAgICAgICA6 c29ydCBuaWwpKSkpCiAgICAod2hlbiAobWluaWJ1ZmZlcnApCiAgICAgIChkZWxldGUtbWluaWJ1 ZmZlci1jb250ZW50cykpCiAgICAoaW5zZXJ0IChzdWJzdHJpbmctbm8tcHJvcGVydGllcyBzdHIp KSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWlzZWFyY2gKCihkZWZ1biBjb25zdWx0LWlzZWFy Y2gtZm9yd2FyZCAoJm9wdGlvbmFsIHJldmVyc2UpCiAgIkNvbnRpbnVlIGlzZWFyY2ggZm9yd2Fy ZCBvcHRpb25hbGx5IGluIFJFVkVSU0UuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tcmVx dWlyZS1taW5pYnVmZmVyKQogIChzZXRxIGlzZWFyY2gtbmV3LWZvcndhcmQgKG5vdCByZXZlcnNl KSBpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCBuaWwpCiAgKGZ1bmNhbGwgKG9yIChjb21tYW5k LXJlbWFwcGluZyAjJ2V4aXQtbWluaWJ1ZmZlcikgIydleGl0LW1pbmlidWZmZXIpKSkKCihkZWZ1 biBjb25zdWx0LWlzZWFyY2gtcmV2ZXJzZSAoJm9wdGlvbmFsIHJldmVyc2UpCiAgIkNvbnRpbnVl IGlzZWFyY2ggYmFja3dhcmQgb3B0aW9uYWxseSBpbiBSRVZFUlNFLiIKICAoaW50ZXJhY3RpdmUp CiAgKGNvbnN1bHQtaXNlYXJjaC1mb3J3YXJkIChub3QgcmV2ZXJzZSkpKQoKKGRlZnZhciBjb25z dWx0LWlzZWFyY2gtbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgIlxDLXMiICMnY29uc3VsdC1pc2VhcmNoLWZvcndhcmQpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLXIiICMnY29uc3VsdC1pc2VhcmNoLXJldmVyc2UpCiAgICBtYXApCiAg IkFkZGl0aW9uYWwga2V5bWFwIHVzZWQgYnkgYGNvbnN1bHQtaXNlYXJjaCcuIikKCihkZWZ1biBj b25zdWx0LS1pc2VhcmNoLWNhbmRpZGF0ZXMgKG5hcnJvdykKICAiUmV0dXJuIGlzZWFyY2ggaGlz dG9yeSBjYW5kaWRhdGVzIGNhdGVnb3JpemVkIGJ5IE5BUlJPVy4iCiAgOzsgTk9URTogRG8gbm90 IHRocm93IGFuIGVycm9yIG9uIGVtcHR5IGhpc3RvcnksCiAgOzsgaW4gb3JkZXIgdG8gYWxsb3cg c3RhcnRpbmcgYSBzZWFyY2guCiAgOzsgV2UgZG8gbm90IDpyZXF1aXJlLW1hdGNoIGhlcmUhCiAg KGxldCogKChoaXN0b3J5IChpZiAoZXEgdCBzZWFyY2gtZGVmYXVsdC1tb2RlKQogICAgICAgICAg ICAgICAgICAgICAgKGFwcGVuZCByZWdleHAtc2VhcmNoLXJpbmcgc2VhcmNoLXJpbmcpCiAgICAg ICAgICAgICAgICAgICAgKGFwcGVuZCBzZWFyY2gtcmluZyByZWdleHAtc2VhcmNoLXJpbmcpKSkK ICAgICAgICAgKG1heC1sZW4gKGlmIGhpc3RvcnkKICAgICAgICAgICAgICAgICAgICAgICgrIDQg KGFwcGx5ICMnbWF4IChtYXBjYXIgIydsZW5ndGggaGlzdG9yeSkpKQogICAgICAgICAgICAgICAg ICAgIDApKSkKICAgIChjb25zdWx0LS1yZW1vdmUtZHVwcwogICAgIChtYXBjYXIKICAgICAgKGxh bWJkYSAoY2FuZCkKICAgICAgICA7OyBFbWFjcyAyNy4xIHVzZXMgc2V0dGluZ3Mgb24gdGhlIHNl YXJjaCBzdHJpbmcsIHdlIGNhbiB1c2UgdGhhdCBmb3IgbmFycm93aW5nLgogICAgICAgIChsZXQq ICgocHJvcHMgKHBsaXN0LW1lbWJlciAodGV4dC1wcm9wZXJ0aWVzLWF0IDAgY2FuZCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uKSkK ICAgICAgICAgICAgICAgKHR5cGUgKHBjYXNlIChjYWRyIHByb3BzKQogICAgICAgICAgICAgICAg ICAgICAgICgoYW5kICduaWwgKGd1YXJkIChub3QgcHJvcHMpKSkgP3IpCiAgICAgICAgICAgICAg ICAgICAgICAgKCduaWwgICAgICAgICAgICAgICAgICAgICAgICAgICA/bCkKICAgICAgICAgICAg ICAgICAgICAgICAoJ3dvcmQtc2VhcmNoLXJlZ2V4cCAgICAgICAgICAgID93KQogICAgICAgICAg ICAgICAgICAgICAgICgnaXNlYXJjaC1zeW1ib2wtcmVnZXhwICAgICAgICAgP3MpCiAgICAgICAg ICAgICAgICAgICAgICAgKCdjaGFyLWZvbGQtdG8tcmVnZXhwICAgICAgICAgICA/YykKICAgICAg ICAgICAgICAgICAgICAgICAoXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID91KSkpKQog ICAgICAgICAgKGNvbmNhdCAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgOzsgRGlzYW1i aWd1YXRlIGhpc3RvcnkgaXRlbXMuIFRoZSBzYW1lIHN0cmluZyBjb3VsZAogICAgICAgICAgICAg ICAgICAgOzsgb2NjdXIgd2l0aCBkaWZmZXJlbnQgc2VhcmNoIHR5cGVzLgogICAgICAgICAgICAg ICAgICAgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRvZnUtY2hhciB0eXBlKSkKICAgICAg ICAgICAgICAgICAgICdpbnZpc2libGUgdAogICAgICAgICAgICAgICAgICAgJ2NvbnN1bHQtLWFu bm90YXRpb24KICAgICAgICAgICAgICAgICAgIChjb25jYXQgKG1ha2Utc3RyaW5nICgtIG1heC1s ZW4gKGxlbmd0aCBjYW5kKSkgMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlzdC1n ZXQgdHlwZSBuYXJyb3cpKSkKICAgICAgICAgICAgICAgICAgY2FuZCkpKQogICAgICBoaXN0b3J5 KSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaCAoKQogICJSZWFkIGEg c2VhcmNoIHN0cmluZyB3aXRoIGNvbXBsZXRpb24gZnJvbSBoaXN0b3J5LgoKVGhpcyByZXBsYWNl cyB0aGUgY3VycmVudCBzZWFyY2ggc3RyaW5nIGlmIElzZWFyY2ggaXMgYWN0aXZlLCBhbmQKc3Rh cnRzIGEgbmV3IElzZWFyY2ggc2Vzc2lvbiBvdGhlcndpc2UuIgogIChpbnRlcmFjdGl2ZSkKICAo Y29uc3VsdC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGxldCAoKGlzZWFyY2gtbWVzc2FnZS1mdW5j dGlvbiAnaWdub3JlKSA7OyBBdm9pZCBmbGlja2VyIGluIGVjaG8gYXJlYQogICAgICAgIChpbmhp Yml0LXJlZGlzcGxheSB0KSAgICAgICAgICAgICAgOzsgQXZvaWQgZmxpY2tlciBpbiBtb2RlIGxp bmUKICAgICAgICAobmFycm93ICcoKD9jIC4gIkNoYXIiKQogICAgICAgICAgICAgICAgICAoP3Ug LiAiQ3VzdG9tIikKICAgICAgICAgICAgICAgICAgKD9sIC4gIkxpdGVyYWwiKQogICAgICAgICAg ICAgICAgICAoP3IgLiAiUmVnZXhwIikKICAgICAgICAgICAgICAgICAgKD9zIC4gIlN5bWJvbCIp CiAgICAgICAgICAgICAgICAgICg/dyAuICJXb3JkIikpKSkKICAgICh1bmxlc3MgaXNlYXJjaC1t b2RlIChpc2VhcmNoLW1vZGUgdCkpCiAgICAod2l0aC1pc2VhcmNoLXN1c3BlbmRlZAogICAgIChz ZXRxIGlzZWFyY2gtbmV3LXN0cmluZwogICAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAg ICAgICJJLXNlYXJjaDogIgogICAgICAgICAgICAoY29uc3VsdC0taXNlYXJjaC1jYW5kaWRhdGVz IG5hcnJvdykKICAgICAgICAgICAgOmNhdGVnb3J5ICdjb25zdWx0LWlzZWFyY2gKICAgICAgICAg ICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgICAgICAgICAgOnNvcnQgbmlsCiAg ICAgICAgICAgIDphbm5vdGF0ZSAjJ2NvbnN1bHQtLWdldC1hbm5vdGF0aW9uCiAgICAgICAgICAg IDppbml0aWFsIGlzZWFyY2gtc3RyaW5nCiAgICAgICAgICAgIDprZXltYXAgY29uc3VsdC1pc2Vh cmNoLW1hcAogICAgICAgICAgICA6bG9va3VwCiAgICAgICAgICAgIChsYW1iZGEgKF8gY2FuZGlk YXRlcyBzdHIpCiAgICAgICAgICAgICAgKGlmLWxldCAoY2FuZCAoY2FyIChtZW1iZXIgc3RyIGNh bmRpZGF0ZXMpKSkgKHN1YnN0cmluZyBjYW5kIDEpIHN0cikpCiAgICAgICAgICAgIDpwcmV2aWV3 CiAgICAgICAgICAgIChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAgICAgICAodW5sZXNz IHJlc3RvcmUKICAgICAgICAgICAgICAgIChzZXRxIGlzZWFyY2gtc3RyaW5nIGNhbmQpCiAgICAg ICAgICAgICAgICA7OyBFbWFjcyAyNy4xIHVzZXMgcHJvcGVydGllcyBvbiB0aGUgc2VhcmNoIHN0 cmluZyB0byBzdG9yZSBzZXR0aW5ncwogICAgICAgICAgICAgICAgKHdoZW4gKGZib3VuZHAgJ2lz ZWFyY2gtdXBkYXRlLWZyb20tc3RyaW5nLXByb3BlcnRpZXMpCiAgICAgICAgICAgICAgICAgIChp c2VhcmNoLXVwZGF0ZS1mcm9tLXN0cmluZy1wcm9wZXJ0aWVzIGNhbmQpKQogICAgICAgICAgICAg ICAgKGlzZWFyY2gtdXBkYXRlKSkpCiAgICAgICAgICAgIDpuYXJyb3cKICAgICAgICAgICAgKGNv bnMKICAgICAgICAgICAgIChsYW1iZGEgKGNhbmQpIChlcSAoLSAoYXJlZiBjYW5kIDApIGNvbnN1 bHQtLXRvZnUtY2hhcikgY29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgIG5hcnJvdykpCiAg ICAgICAgICAgaXNlYXJjaC1uZXctbWVzc2FnZQogICAgICAgICAgIChtYXBjb25jYXQgJ2lzZWFy Y2gtdGV4dC1jaGFyLWRlc2NyaXB0aW9uIGlzZWFyY2gtbmV3LXN0cmluZyAiIikpKQogICAgOzsg U2V0dGluZyBgaXNlYXJjaC1yZWdleHAnIGV0YyBvbmx5IHdvcmtzIG91dHNpZGUgb2YgYHdpdGgt aXNlYXJjaC1zdXNwZW5kZWQnLgogICAgKHVubGVzcyAocGxpc3QtbWVtYmVyICh0ZXh0LXByb3Bl cnRpZXMtYXQgMCBpc2VhcmNoLXN0cmluZykgJ2lzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uKQogICAg ICAoc2V0cSBpc2VhcmNoLXJlZ2V4cCB0CiAgICAgICAgICAgIGlzZWFyY2gtcmVnZXhwLWZ1bmN0 aW9uIG5pbCkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbWlub3ItbW9kZS1tZW51CgooZGVm dW4gY29uc3VsdC0tbWlub3ItbW9kZS1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBsaXN0IG9mIG1p bm9yLW1vZGUgY2FuZGlkYXRlIHN0cmluZ3MuIgogIChtYXBjYXIKICAgKHBjYXNlLWxhbWJkYSAo YCgsbmFtZSAuICxzeW0pKQogICAgIChsaXN0IG5hbWUgc3ltCiAgICAgICAgICAgKGNvbmNhdAog ICAgICAgICAgICAoaWYgKGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIHN5bSkgImwiICJnIikKICAg ICAgICAgICAgKGlmIChhbmQgKGJvdW5kcCBzeW0pIChzeW1ib2wtdmFsdWUgc3ltKSkgImkiICJv IikpKSkKICAgKGFwcGVuZAogICAgOzsgYWNjb3JkaW5nIHRvIGRlc2NyaWJlLW1pbm9yLW1vZGUt Y29tcGxldGlvbi10YWJsZS1mb3Itc3ltYm9sCiAgICA7OyB0aGUgbWlub3ItbW9kZS1saXN0IGNv bnRhaW5zICphbGwqIG1pbm9yIG1vZGVzCiAgICAobWFwY2FyIChsYW1iZGEgKHN5bSkgKGNvbnMg KHN5bWJvbC1uYW1lIHN5bSkgc3ltKSkgbWlub3ItbW9kZS1saXN0KQogICAgOzsgdGFrZSB0aGUg bGlnaHRlcnMgZnJvbSBtaW5vci1tb2RlLWFsaXN0CiAgICAoZGVscSBuaWwKICAgICAgICAgICht YXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgsc3ltICxsaWdodGVyKSkKICAgICAgICAgICAgICAgICAg ICAod2hlbiAoYW5kIGxpZ2h0ZXIgKG5vdCAoZXF1YWwgIiIgbGlnaHRlcikpKQogICAgICAgICAg ICAgICAgICAgICAgKHNldHEgbGlnaHRlciAoc3RyaW5nLXRyaW0gKGZvcm1hdC1tb2RlLWxpbmUg bGlnaHRlcikpKQogICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoc3RyaW5nLWJsYW5rLXAg bGlnaHRlcikKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgbGlnaHRlciBzeW0pKSkpCiAg ICAgICAgICAgICAgICAgIG1pbm9yLW1vZGUtYWxpc3QpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRl ZnVuIGNvbnN1bHQtbWlub3ItbW9kZS1tZW51ICgpCiAgIkVuYWJsZSBvciBkaXNhYmxlIG1pbm9y IG1vZGUuCgpUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIGBtaW5vci1tb2RlLW1lbnUtZnJvbS1p bmRpY2F0b3InLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNhbGwtaW50ZXJhY3RpdmVseQogICAoY29u c3VsdC0tcmVhZAogICAgIk1pbm9yIG1vZGU6ICIKICAgIChjb25zdWx0LS1taW5vci1tb2RlLWNh bmRpZGF0ZXMpCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICA6Y2F0ZWdvcnkgJ21pbm9yLW1vZGUK ICAgIDpuYXJyb3cgYCgsKGxhbWJkYSAoY2FuZCkgKHNlcS1wb3NpdGlvbiAoY2FkZHIgY2FuZCkg Y29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgICAoP2wgLiAiTG9jYWwiKQogICAgICAgICAg ICAgICg/ZyAuICJHbG9iYWwiKQogICAgICAgICAgICAgICg/aSAuICJPbiIpCiAgICAgICAgICAg ICAgKD9vIC4gIk9mZiIpKQogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1jYWRyCiAgICA6 aGlzdG9yeSAnY29uc3VsdC0tbWlub3ItbW9kZS1tZW51LWhpc3RvcnkpKSkKCjs7Ozs7IENvbW1h bmQ6IGNvbnN1bHQtdGhlbWUKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXRoZW1lICh0 aGVtZSkKICAiRGlzYWJsZSBjdXJyZW50IHRoZW1lcyBhbmQgZW5hYmxlIFRIRU1FIGZyb20gYGNv bnN1bHQtdGhlbWVzJy4KClRoZSBjb21tYW5kIHN1cHBvcnRzIHByZXZpZXdpbmcgdGhlIGN1cnJl bnRseSBzZWxlY3RlZCB0aGVtZS4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0CiAgICAobGV0ICgo YXZhaWwtdGhlbWVzIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChvciAobm90IGNvbnN1bHQtdGhl bWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG1lbXEgeCBjb25zdWx0LXRoZW1lcykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29ucyBuaWwgKGN1c3RvbS1hdmFpbGFibGUtdGhlbWVzKSkpKQogICAgICAgICAgKHNh dmVkLXRoZW1lIChjYXIgY3VzdG9tLWVuYWJsZWQtdGhlbWVzKSkpCiAgICAgIChjb25zdWx0LS1y ZWFkCiAgICAgICAiVGhlbWU6ICIKICAgICAgIChtYXBjYXIgKGxhbWJkYSAoeCkgKG9yIHggJ2Rl ZmF1bHQpKSBhdmFpbC10aGVtZXMpCiAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICA6Y2F0 ZWdvcnkgJ3RoZW1lCiAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0tdGhlbWUtaGlzdG9yeQogICAg ICAgOmxvb2t1cCAobGFtYmRhIChfaW5wdXQgX2NhbmRzIHgpCiAgICAgICAgICAgICAgICAgKGFu ZCB4IChub3QgKHN0cmluZz0geCAiZGVmYXVsdCIpKSAoaW50ZXJuLXNvZnQgeCkpKQogICAgICAg OnByZXZpZXcgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgICAgICAgICAgICAoY29uZAog ICAgICAgICAgICAgICAgICAgKChhbmQgcmVzdG9yZSAobm90IGNhbmQpKSAoY29uc3VsdC10aGVt ZSBzYXZlZC10aGVtZSkpCiAgICAgICAgICAgICAgICAgICAoKG1lbXEgY2FuZCBhdmFpbC10aGVt ZXMpIChjb25zdWx0LXRoZW1lIGNhbmQpKSkpCiAgICAgICA6ZGVmYXVsdCAoc3ltYm9sLW5hbWUg KG9yIHNhdmVkLXRoZW1lICdkZWZhdWx0KSkpKSkpCiAgKHVubGVzcyAoZXEgdGhlbWUgKGNhciBj dXN0b20tZW5hYmxlZC10aGVtZXMpKQogICAgKG1hcGMgIydkaXNhYmxlLXRoZW1lIGN1c3RvbS1l bmFibGVkLXRoZW1lcykKICAgICh3aGVuIHRoZW1lCiAgICAgIChpZiAoY3VzdG9tLXRoZW1lLXAg dGhlbWUpCiAgICAgICAgICAoZW5hYmxlLXRoZW1lIHRoZW1lKQogICAgICAgIChsb2FkLXRoZW1l IHRoZW1lIDpuby1jb25maXJtKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtYnVmZmVyCgoo Y29uc3VsdC0tZGVmaW5lLWNhY2hlIGNvbnN1bHQtLWNhY2hlZC1idWZmZXJzCiAgKGFwcGVuZCAo ZGVscSAoY3VycmVudC1idWZmZXIpIChidWZmZXItbGlzdCkpIChsaXN0IChjdXJyZW50LWJ1ZmZl cikpKSkKCihjb25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0tY2FjaGVkLWJ1ZmZlci1uYW1l cwogIChtYXBjYXIgIydidWZmZXItbmFtZSAoY29uc3VsdC0tY2FjaGVkLWJ1ZmZlcnMpKSkKCihj b25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0tY2FjaGVkLWJ1ZmZlci1maWxlLWhhc2gKICAo Y29uc3VsdC0tc3RyaW5nLWhhc2ggKGRlbHEgbmlsIChtYXBjYXIgIydidWZmZXItZmlsZS1uYW1l IChjb25zdWx0LS1jYWNoZWQtYnVmZmVycykpKSkpCgooZGVmdW4gY29uc3VsdC0tb3Blbi1maWxl IChmaWxlIGRpc3BsYXkpCiAgIk9wZW4gRklMRSB2aWEgRElTUExBWSBmdW5jdGlvbi4iCiAgKHBj YXNlLWV4aGF1c3RpdmUgZGlzcGxheQogICAgKCdzd2l0Y2gtdG8tYnVmZmVyIChmaW5kLWZpbGUg ZmlsZSkpCiAgICAoJ3N3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IChmaW5kLWZpbGUtb3Ro ZXItd2luZG93IGZpbGUpKQogICAgKCdzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLWZyYW1lIChmaW5k LWZpbGUtb3RoZXItZnJhbWUgZmlsZSkpKSkKCihkZWZ1biBjb25zdWx0LS1vcGVuLWJ1ZmZlciAo YnVmZmVyIGRpc3BsYXkpCiAgIk9wZW4gQlVGRkVSIHZpYSBESVNQTEFZIGZ1bmN0aW9uLiIKICAo ZnVuY2FsbCBkaXNwbGF5IGJ1ZmZlcikpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1ib29rbWFy awogIGAoOm5hbWUgICAgICJCb29rbWFyayIKICAgIDpuYXJyb3cgICA/bQogICAgOmNhdGVnb3J5 IGJvb2ttYXJrCiAgICA6ZmFjZSAgICAgY29uc3VsdC1ib29rbWFyawogICAgOmhpc3RvcnkgIGJv b2ttYXJrLWhpc3RvcnkKICAgIDppdGVtcyAgICAsIydib29rbWFyay1hbGwtbmFtZXMKICAgIDpv cGVuICAgICAsIydib29rbWFyay1qdW1wKQogICJCb29rbWFyayBjYW5kaWRhdGUgc291cmNlIGZv ciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1 ZmZlcgogIGAoOm5hbWUgICAgICAiUHJvamVjdCBCdWZmZXIiCiAgICA6bmFycm93ICAgICg/cCAu ICJQcm9qZWN0IikKICAgIDpjYXRlZ29yeSAgYnVmZmVyCiAgICA6ZmFjZSAgICAgIGNvbnN1bHQt YnVmZmVyCiAgICA6aGlzdG9yeSAgIGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAg LCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDpwcmVkaWNhdGUgLChsYW1iZGEgKCkgY29uc3Vs dC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24pCiAgICA6aXRlbXMKICAgICwobGFtYmRhICgpCiAgICAg ICAod2hlbi1sZXQgKHJvb3QgKGZ1bmNhbGwgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24p KQogICAgICAgICAobWFwY2FyICMnYnVmZmVyLW5hbWUKICAgICAgICAgICAgICAgICAoc2VxLWZp bHRlciAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0 IChmaWxlIChidWZmZXItZmlsZS1uYW1lIHgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLXByZWZpeC1wIHJvb3QgZmlsZSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdWx0LS1jYWNoZWQtYnVmZmVycykpKSkpKQogICJQcm9qZWN0IGJ1ZmZlciBj YW5kaWRhdGUgc291cmNlIGZvciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQt LXNvdXJjZS1wcm9qZWN0LWZpbGUKICBgKDpuYW1lICAgICAgIlByb2plY3QgRmlsZSIKICAgIDpu YXJyb3cgICAgKD9wIC4gIlByb2plY3QiKQogICAgOmNhdGVnb3J5ICBmaWxlCiAgICA6ZmFjZSAg ICAgIGNvbnN1bHQtZmlsZQogICAgOmhpc3RvcnkgICBmaWxlLW5hbWUtaGlzdG9yeQogICAgOm9w ZW4gICAgICAsIydjb25zdWx0LS1vcGVuLWZpbGUKICAgIDpwcmVkaWNhdGUgLChsYW1iZGEgKCkg Y29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24pCiAgICA6aXRlbXMKICAgICwobGFtYmRhICgp CiAgICAgICh3aGVuLWxldCAocm9vdCAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5j dGlvbikpCiAgICAgICAgKGxldCAoKGxlbiAobGVuZ3RoIHJvb3QpKQogICAgICAgICAgICAgIChp bnYtcm9vdCAocHJvcGVydGl6ZSByb290ICdpbnZpc2libGUgdCkpCiAgICAgICAgICAgICAgKGh0 IChjb25zdWx0LS1jYWNoZWQtYnVmZmVyLWZpbGUtaGFzaCkpKQogICAgICAgICAgKG1hcGNhciAo bGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgIChjb25jYXQgaW52LXJvb3QgKHN1YnN0cmlu ZyB4IGxlbikpKQogICAgICAgICAgICAgICAgICAoc2VxLWZpbHRlciAobGFtYmRhICh4KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKG5vdCAoZ2V0aGFzaCB4IGh0KSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcHJlZml4LXAgcm9vdCB4 KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VudGYtbGlzdCkpKSkpKQogICJQ cm9qZWN0IGZpbGUgY2FuZGlkYXRlIHNvdXJjZSBmb3IgYGNvbnN1bHQtYnVmZmVyJy4iKQoKKGRl ZnZhciBjb25zdWx0LS1zb3VyY2UtaGlkZGVuLWJ1ZmZlcgogIGAoOm5hbWUgICAgICJIaWRkZW4g QnVmZmVyIgogICAgOm5hcnJvdyAgIDMyCiAgICA6Y2F0ZWdvcnkgYnVmZmVyCiAgICA6ZmFjZSAg ICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICBidWZmZXItbmFtZS1oaXN0b3J5CiAgICA6 b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDppdGVtcwogICAgLChsYW1iZGEg KCkKICAgICAgIChsZXQgKChmaWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIgY29uc3VsdC1i dWZmZXItZmlsdGVyKSkpCiAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChzdHJpbmct bWF0Y2gtcCBmaWx0ZXIgeCkpCiAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1jYWNoZWQt YnVmZmVyLW5hbWVzKSkpKSkKICAiSGlkZGVuIGJ1ZmZlciBjYW5kaWRhdGUgc291cmNlIGZvciBg Y29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICBgKDpu YW1lICAgICAiQnVmZmVyIgogICAgOm5hcnJvdyAgID9iCiAgICA6Y2F0ZWdvcnkgYnVmZmVyCiAg ICA6ZmFjZSAgICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICBidWZmZXItbmFtZS1oaXN0 b3J5CiAgICA6b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDppdGVtcwogICAg LChsYW1iZGEgKCkKICAgICAgIChsZXQgKChmaWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIg Y29uc3VsdC1idWZmZXItZmlsdGVyKSkpCiAgICAgICAgIChzZXEtcmVtb3ZlIChsYW1iZGEgKHgp IChzdHJpbmctbWF0Y2gtcCBmaWx0ZXIgeCkpCiAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0 LS1jYWNoZWQtYnVmZmVyLW5hbWVzKSkpKSkKICAiQnVmZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9y IGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIgY29uc3VsdC0tc291cmNlLWZpbGUKICBgKDpu YW1lICAgICAiRmlsZSIKICAgIDpuYXJyb3cgICA/ZgogICAgOmNhdGVnb3J5IGZpbGUKICAgIDpm YWNlICAgICBjb25zdWx0LWZpbGUKICAgIDpoaXN0b3J5ICBmaWxlLW5hbWUtaGlzdG9yeQogICAg Om9wZW4gICAgICwjJ2NvbnN1bHQtLW9wZW4tZmlsZQogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAo KQogICAgICAgKGxldCAoKGh0IChjb25zdWx0LS1jYWNoZWQtYnVmZmVyLWZpbGUtaGFzaCkpKQog ICAgICAgICAoc2VxLXJlbW92ZSAobGFtYmRhICh4KSAoZ2V0aGFzaCB4IGh0KSkgcmVjZW50Zi1s aXN0KSkpKQogICJSZWNlbnQgZmlsZSBjYW5kaWRhdGUgc291cmNlIGZvciBgY29uc3VsdC1idWZm ZXInLiIpCgooZGVmdW4gY29uc3VsdC0tYnVmZmVyIChkaXNwbGF5KQogICJCYWNrZW5kIGltcGxl bWVudGF0aW9uIG9mIGBjb25zdWx0LWJ1ZmZlcicgd2l0aCBESVNQTEFZIGZ1bmN0aW9uLiIKICAo Y29uc3VsdC0tbXVsdGkKICAgIlN3aXRjaCB0bzogIgogICBjb25zdWx0LWJ1ZmZlci1zb3VyY2Vz CiAgIDpoaXN0b3J5ICdjb25zdWx0LS1idWZmZXItaGlzdG9yeQogICA6c29ydCBuaWwKICAgOnBy ZXZpZXcKICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICh3aGVuIGNhbmQKICAgICAgIChs ZXQgKChuYW1lIChjYXIgY2FuZCkpCiAgICAgICAgICAgICAoYWN0aW9uIChvciAocGxpc3QtZ2V0 IChjZHIgY2FuZCkgOm9wZW4pICMnY29uc3VsdC0tb3Blbi1idWZmZXIpKSkKICAgICAgICAgKGNv bmQKICAgICAgICAgIChyZXN0b3JlIChmdW5jYWxsIGFjdGlvbiBuYW1lIGRpc3BsYXkpKQogICAg ICAgICAgOzsgSW4gb3JkZXIgdG8gYXZvaWQgc2xvd25lc3MgYW5kIHVubmVjZXNzYXJ5IGNvbXBs ZXhpdHksIHdlCiAgICAgICAgICA7OyBvbmx5IHByZXZpZXcgYnVmZmVycy4gTG9hZGluZyByZWNl bnQgZmlsZXMsIGJvb2ttYXJrcyBvcgogICAgICAgICAgOzsgdmlld3MgY2FuIHJlc3VsdCBpbiBl eHBlbnNpdmUgb3BlcmF0aW9ucy4KICAgICAgICAgICgoYW5kIChlcSBhY3Rpb24gIydjb25zdWx0 LS1vcGVuLWJ1ZmZlcikKICAgICAgICAgICAgICAgIChvciAoZXEgZGlzcGxheSAjJ3N3aXRjaC10 by1idWZmZXIpCiAgICAgICAgICAgICAgICAgICAgKGVxIGRpc3BsYXkgIydzd2l0Y2gtdG8tYnVm ZmVyLW90aGVyLXdpbmRvdykpCiAgICAgICAgICAgICAgICAoZ2V0LWJ1ZmZlciBuYW1lKSkKICAg ICAgICAgICAoZnVuY2FsbCBkaXNwbGF5IG5hbWUgJ25vcmVjb3JkKSkpKSkpKSkKCjs7OyMjI2F1 dG9sb2FkCihkZWZ1biBjb25zdWx0LWJ1ZmZlciAoKQogICJFbmhhbmNlZCBgc3dpdGNoLXRvLWJ1 ZmZlcicgY29tbWFuZCB3aXRoIHN1cHBvcnQgZm9yIHZpcnR1YWwgYnVmZmVycy4KClRoZSBjb21t YW5kIHN1cHBvcnRzIHJlY2VudCBmaWxlcywgYm9va21hcmtzLCB2aWV3cyBhbmQgcHJvamVjdCBm aWxlcyBhcyB2aXJ0dWFsCmJ1ZmZlcnMuIEJ1ZmZlcnMgYXJlIHByZXZpZXdlZC4gRnVydGhlcm1v cmUgbmFycm93aW5nIHRvIGJ1ZmZlcnMgKGIpLCBmaWxlcyAoZiksCmJvb2ttYXJrcyAobSkgYW5k IHByb2plY3QgZmlsZXMgKHApIGlzIHN1cHBvcnRlZCB2aWEgdGhlIGNvcnJlc3BvbmRpbmcga2V5 cy4gSW4Kb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBwcm9qZWN0LXNwZWNpZmljIGZpbGVzIGFuZCBi dWZmZXJzLCB0aGUKYGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uJyBpcyB1c2VkLiBTZWUg YGNvbnN1bHQtYnVmZmVyLXNvdXJjZXMnIGFuZApgY29uc3VsdC0tbXVsdGknIGZvciB0aGUgY29u ZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBidWZmZXIgc291cmNlcy4iCiAgKGludGVyYWN0aXZl KQogIChjb25zdWx0LS1idWZmZXIgIydzd2l0Y2gtdG8tYnVmZmVyKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWJ1ZmZlci1vdGhlci13aW5kb3cgKCkKICAiVmFyaWFudCBvZiBgY29u c3VsdC1idWZmZXInIHdoaWNoIG9wZW5zIGluIG90aGVyIHdpbmRvdy4iCiAgKGludGVyYWN0aXZl KQogIChjb25zdWx0LS1idWZmZXIgIydzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdykpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1idWZmZXItb3RoZXItZnJhbWUgKCkKICAiVmFy aWFudCBvZiBgY29uc3VsdC1idWZmZXInIHdoaWNoIG9wZW5zIGluIG90aGVyIGZyYW1lLiIKICAo aW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10by1idWZmZXItb3RoZXIt ZnJhbWUpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1rbWFjcm8KCihkZWZ1biBjb25zdWx0LS1r bWFjcm8tY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2Yga21hY3JvcyBhbmQgaW5kaWNl cy4iCiAgKHRocmVhZC1sYXN0CiAgICAgIDs7IExpc3Qgb2YgbWFjcm9zCiAgICAgIChhcHBlbmQg KHdoZW4gbGFzdC1rYmQtbWFjcm8KICAgICAgICAgICAgICAgIGAoKCxsYXN0LWtiZC1tYWNybyAs a21hY3JvLWNvdW50ZXIgLGttYWNyby1jb3VudGVyLWZvcm1hdCkpKQogICAgICAgICAgICAgIGtt YWNyby1yaW5nKQogICAgOzsgQWRkIGluZGljZXMKICAgIChzZXEtbWFwLWluZGV4ZWQgIydjb25z KQogICAgOzsgRmlsdGVyIG1vdXNlIGNsaWNrcwogICAgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkg KHNlcS1zb21lICMnbW91c2UtZXZlbnQtcCAoY2FhciB4KSkpKQogICAgOzsgRm9ybWF0IG1hY3Jv cwogICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCgsa2V5cyAsY291bnRlciAsZm9ybWF0KSAu ICxpbmRleCkpCiAgICAgICAgICAgICAgKHByb3BlcnRpemUKICAgICAgICAgICAgICAgKGZvcm1h dC1rYmQtbWFjcm8ga2V5cyAxKQogICAgICAgICAgICAgICAnY29uc3VsdC0ta21hY3JvLWluZGV4 IGluZGV4CiAgICAgICAgICAgICAgICdjb25zdWx0LS1hbm5vdGF0aW9uCiAgICAgICAgICAgICAg IDs7IElmIHRoZSBjb3VudGVyIGlzIDAgYW5kIHRoZSBjb3VudGVyIGZvcm1hdCBpcyBpdHMgZGVm YXVsdCwKICAgICAgICAgICAgICAgOzsgdGhlbiB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoYXQg dGhlIGNvdW50ZXIgaXNuJ3QgYWN0dWFsbHkKICAgICAgICAgICAgICAgOzsgYmVpbmcgdXNlZC4g IFRoaXMgY2FuIG9ubHkgYmUgd3Jvbmcgd2hlbiBhIHVzZXIKICAgICAgICAgICAgICAgOzsgaW50 ZW50aW9uYWxseSBzdGFydHMgdGhlIGNvdW50ZXIgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGFuZAog ICAgICAgICAgICAgICA7OyB0aGVuIGluY3JlbWVudHMgaXQgdG8gMC4KICAgICAgICAgICAgICAg KGNvbmQKICAgICAgICAgICAgICAgICgobm90IChzdHJpbmc9IGZvcm1hdCAiJWQiKSkgOzsgc2hv dyBjb3VudGVyIGZvciBub24tZGVmYXVsdCBmb3JtYXQKICAgICAgICAgICAgICAgICAoZm9ybWF0 ICIgKGNvdW50ZXI9JWQsIGZvcm1hdD0lcykgIiBjb3VudGVyIGZvcm1hdCkpCiAgICAgICAgICAg ICAgICAoKC89IGNvdW50ZXIgMCkgOzsgc2hvdyBjb3VudGVyIGlmIG5vbi16ZXJvCiAgICAgICAg ICAgICAgICAgKGZvcm1hdCAiIChjb3VudGVyPSVkKSIgY291bnRlcikpKSkpKQogICAgKGNvbnN1 bHQtLXJlbW92ZS1kdXBzKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1rbWFjcm8g KGFyZykKICAiUnVuIGEgY2hvc2VuIGtleWJvYXJkIG1hY3JvLgoKV2l0aCBwcmVmaXggQVJHLCBy dW4gdGhlIG1hY3JvIHRoYXQgbWFueSB0aW1lcy4KTWFjcm9zIGNvbnRhaW5pbmcgbW91c2UgY2xp Y2tzIGFyZSBvbWl0dGVkLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChsZXQgKChzZWxlY3RlZCAo Y29uc3VsdC0tcmVhZAogICAgICAgICAgICAgICAgICAgIktleWJvYXJkIG1hY3JvOiAiCiAgICAg ICAgICAgICAgICAgICAob3IgKGNvbnN1bHQtLWttYWNyby1jYW5kaWRhdGVzKQogICAgICAgICAg ICAgICAgICAgICAgICh1c2VyLWVycm9yICJObyBrZXlib2FyZCBtYWNyb3MgZGVmaW5lZCIpKQog ICAgICAgICAgICAgICAgICAgOmNhdGVnb3J5ICdjb25zdWx0LWttYWNybwogICAgICAgICAgICAg ICAgICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICAgICAgICAgICAgICAgOnNvcnQgbmlsCiAgICAg ICAgICAgICAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0ta21hY3JvLWhpc3RvcnkKICAgICAgICAg ICAgICAgICAgIDphbm5vdGF0ZSAjJ2NvbnN1bHQtLWdldC1hbm5vdGF0aW9uCiAgICAgICAgICAg ICAgICAgICA6bG9va3VwCiAgICAgICAgICAgICAgICAgICAobGFtYmRhIChfIGNhbmRpZGF0ZXMg Y2FuZCkKICAgICAgICAgICAgICAgICAgICAgKGdldC10ZXh0LXByb3BlcnR5IDAgJ2NvbnN1bHQt LWttYWNyby1pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh ciAobWVtYmVyIGNhbmQgY2FuZGlkYXRlcykpKSkpKSkKICAgIChpZiAoPSAwIHNlbGVjdGVkKQog ICAgICAgIDs7IElmIHRoZSBmaXJzdCBlbGVtZW50IGhhcyBiZWVuIHNlbGVjdGVkLCBqdXN0IHJ1 biB0aGUgbGFzdCBtYWNyby4KICAgICAgICAoa21hY3JvLWNhbGwtbWFjcm8gKG9yIGFyZyAxKSB0 IG5pbCkKICAgICAgOzsgT3RoZXJ3aXNlLCBydW4gYSBrbWFjcm8gZnJvbSB0aGUgcmluZy4KICAg ICAgKGxldCogKChzZWxlY3RlZCAoLSBzZWxlY3RlZCAxKSkKICAgICAgICAgICAgIChrbWFjcm8g KG50aCBzZWxlY3RlZCBrbWFjcm8tcmluZykpCiAgICAgICAgICAgICA7OyBUZW1wb3JhcmlseSBj aGFuZ2UgdGhlIHZhcmlhYmxlcyB0byByZXRyaWV2ZSB0aGUgY29ycmVjdAogICAgICAgICAgICAg Ozsgc2V0dGluZ3MuICBNYWlubHksIHdlIHdhbnQgdGhlIG1hY3JvIGNvdW50ZXIgdG8gcGVyc2lz dCwgd2hpY2gKICAgICAgICAgICAgIDs7IGF1dG9tYXRpY2FsbHkgaGFwcGVucyB3aGVuIGN5Y2xp bmcgdGhlIHJpbmcuCiAgICAgICAgICAgICAobGFzdC1rYmQtbWFjcm8gKGNhciBrbWFjcm8pKQog ICAgICAgICAgICAgKGttYWNyby1jb3VudGVyIChjYWRyIGttYWNybykpCiAgICAgICAgICAgICAo a21hY3JvLWNvdW50ZXItZm9ybWF0IChjYWRkciBrbWFjcm8pKSkKICAgICAgICAoa21hY3JvLWNh bGwtbWFjcm8gKG9yIGFyZyAxKSB0KQogICAgICAgIDs7IE9uY2UgZG9uZSwgcHV0IHVwZGF0ZWQg dmFyaWFibGVzIGJhY2sgaW50byB0aGUgcmluZy4KICAgICAgICAoc2V0ZiAobnRoIHNlbGVjdGVk IGttYWNyby1yaW5nKQogICAgICAgICAgICAgIChsaXN0IGxhc3Qta2JkLW1hY3JvCiAgICAgICAg ICAgICAgICAgICAga21hY3JvLWNvdW50ZXIKICAgICAgICAgICAgICAgICAgICBrbWFjcm8tY291 bnRlci1mb3JtYXQpKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaW1lbnUKCihkZWZ1biBj b25zdWx0LS1pbWVudS1zcGVjaWFsIChfbmFtZSBwb3MgYnVmIG5hbWUgZm4gJnJlc3QgYXJncykK ICAiV3JhcHBlciBmdW5jdGlvbiBmb3Igc3BlY2lhbCBpbWVudSBpdGVtcy4KClBPUyBpcyB0aGUg cG9zaXRpb24uCkJVRiBpcyB0aGUgYnVmZmVyLgpOQU1FIGlzIHRoZSBpdGVtIG5hbWUuCkZOIGlz IHRoZSBvcmlnaW5hbCBzcGVjaWFsIGl0ZW0gZnVuY3Rpb24uCkFSR1MgYXJlIHRoZSBhcmd1bWVu dHMgdG8gdGhlIHNwZWNpYWwgaXRlbSBmdW5jdGlvbi4iCiAgKHN3aXRjaC10by1idWZmZXIgYnVm KQogIChhcHBseSBmbiBuYW1lIHBvcyBhcmdzKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1mbGF0 dGVuIChwcmVmaXggbGlzdCkKICAiRmxhdHRlbiBpbWVudSBMSVNULgpQcmVwZW5kIFBSRUZJWCBp biBmcm9udCBvZiBhbGwgaXRlbXMuIgogIChtYXBjYW4KICAgKGxhbWJkYSAoaXRlbSkKICAgICAo aWYgKGltZW51LS1zdWJhbGlzdC1wIGl0ZW0pCiAgICAgICAgIChjb25zdWx0LS1pbWVudS1mbGF0 dGVuCiAgICAgICAgICAoY29uY2F0IHByZWZpeCAoYW5kIHByZWZpeCAiLyIpIChjYXIgaXRlbSkp CiAgICAgICAgICAoY2RyIGl0ZW0pKQogICAgICAgKGxldCAoKGtleSAoY29uY2F0CiAgICAgICAg ICAgICAgICAgICAoYW5kIHByZWZpeCAoY29uY2F0IChwcm9wZXJ0aXplIHByZWZpeCAnZmFjZSAn Y29uc3VsdC1pbWVudS1wcmVmaXgpICIgIikpCiAgICAgICAgICAgICAgICAgICAoY2FyIGl0ZW0p KSkKICAgICAgICAgICAgIChwYXlsb2FkIChjZHIgaXRlbSkpKQogICAgICAgICAobGlzdCAoY29u cyBrZXkKICAgICAgICAgICAgICAgICAgICAgKHBjYXNlIHBheWxvYWQKICAgICAgICAgICAgICAg ICAgICAgICA7OyBTaW1wbGUgbWFya2VyIGl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAoKHBy ZWQgbWFya2VycCkgcGF5bG9hZCkKICAgICAgICAgICAgICAgICAgICAgICA7OyBTaW1wbGUgaW50 ZWdlciBpdGVtCiAgICAgICAgICAgICAgICAgICAgICAgKChwcmVkIGludGVnZXJwKSAoY29weS1t YXJrZXIgcGF5bG9hZCkpCiAgICAgICAgICAgICAgICAgICAgICAgOzsgU2VtYW50aWMgdXNlcyBv dmVybGF5IGZvciBwb3NpdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAoKHByZWQgb3Zlcmxh eXApIChjb3B5LW1hcmtlciAob3ZlcmxheS1zdGFydCBwYXlsb2FkKSkpCiAgICAgICAgICAgICAg ICAgICAgICAgOzsgV3JhcCBzcGVjaWFsIGl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAoYCgs cG9zICxmbiAuICxhcmdzKQogICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kCiAgICAgICAg ICAgICAgICAgICAgICAgICAobGlzdCBwb3MgIydjb25zdWx0LS1pbWVudS1zcGVjaWFsIChjdXJy ZW50LWJ1ZmZlcikgKGNhciBpdGVtKSBmbikKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mp KQogICAgICAgICAgICAgICAgICAgICAgIChfIChlcnJvciAiVW5rbm93biBpbWVudSBpdGVtOiAl UyIgaXRlbSkpKSkpKSkpCiAgIGxpc3QpKQoKKGRlZnVuIGNvbnN1bHQtLWltZW51LWNvbXB1dGUg KCkKICAiQ29tcHV0ZSBpbWVudSBjYW5kaWRhdGVzLiIKICAoY29uc3VsdC0tZm9yYmlkLW1pbmli dWZmZXIpCiAgKGxldCogKChpbWVudS1hdXRvLXJlc2NhbiB0KQogICAgICAgICAoaW1lbnUtdXNl LW1hcmtlcnMgdCkKICAgICAgICAgKGl0ZW1zIChpbWVudS0tbWFrZS1pbmRleC1hbGlzdCB0KSkp CiAgICAoc2V0cSBpdGVtcyAocmVtb3ZlIGltZW51LS1yZXNjYW4taXRlbSBpdGVtcykpCiAgICA7 OyBGaXggdG9wbGV2ZWwgaXRlbXMsIGUuZy4sIGVtYWNzLWxpc3AtbW9kZSB0b3BsZXZlbCBpdGVt cyBhcmUgZnVuY3Rpb25zCiAgICAod2hlbi1sZXQgKHRvcGxldmVsIChjZHIgKHNlcS1maW5kIChs YW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcml2 ZWQtbW9kZS1wIChjYXIgeCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdWx0LWltZW51LXRvcGxldmVsKSkpCiAgICAgIChsZXQgKCh0b3BzIChzZXEtcmVtb3Zl IChsYW1iZGEgKHgpIChsaXN0cCAoY2RyIHgpKSkgaXRlbXMpKQogICAgICAgICAgICAocmVzdCAo c2VxLWZpbHRlciAobGFtYmRhICh4KSAobGlzdHAgKGNkciB4KSkpIGl0ZW1zKSkpCiAgICAgICAg KHNldHEgaXRlbXMgKGFwcGVuZCByZXN0IChhbmQgdG9wcyAobGlzdCAoY29ucyB0b3BsZXZlbCB0 b3BzKSkpKSkpKQogICAgKGNvbnN1bHQtLWltZW51LWZsYXR0ZW4gbmlsIGl0ZW1zKSkpCgooZGVm dW4gY29uc3VsdC0taW1lbnUtaXRlbXMgKCkKICAiUmV0dXJuIGNhY2hlZCBpbWVudSBjYW5kaWRh dGVzLiIKICAodW5sZXNzIChlcXVhbCAoY2FyIGNvbnN1bHQtLWltZW51LWNhY2hlKSAoYnVmZmVy LW1vZGlmaWVkLXRpY2spKQogICAgKHNldHEgY29uc3VsdC0taW1lbnUtY2FjaGUgKGNvbnMgKGJ1 ZmZlci1tb2RpZmllZC10aWNrKSAoY29uc3VsdC0taW1lbnUtY29tcHV0ZSkpKSkKICAoY2RyIGNv bnN1bHQtLWltZW51LWNhY2hlKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1hbGwtaXRlbXMgKGJ1 ZmZlcnMpCiAgIlJldHVybiBhbGwgaW1lbnUgaXRlbXMgZnJvbSBlYWNoIEJVRkZFUlMuIgogIChz ZXEtbWFwY2F0IChsYW1iZGEgKGJ1ZikgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmIChjb25zdWx0 LS1pbWVudS1pdGVtcykpKSBidWZmZXJzKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1wcm9qZWN0 LWJ1ZmZlcnMgKCkKICAiUmV0dXJuIHByb2plY3QgYnVmZmVycyB3aXRoIHRoZSBzYW1lIGBtYWpv ci1tb2RlJyBhcyB0aGUgY3VycmVudCBidWZmZXIuIgogIChpZi1sZXQgKHJvb3QgKGFuZCBjb25z dWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbiAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1m dW5jdGlvbikpKQogICAgICAoc2VxLWZpbHRlciAobGFtYmRhIChidWYpCiAgICAgICAgICAgICAg ICAgICAgKHdoZW4tbGV0IChmaWxlIChidWZmZXItZmlsZS1uYW1lIGJ1ZikpCiAgICAgICAgICAg ICAgICAgICAgICAoYW5kIChlcSAoYnVmZmVyLWxvY2FsLXZhbHVlICdtYWpvci1tb2RlIGJ1Zikg bWFqb3ItbW9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1wcmVmaXgtcCBy b290IGZpbGUpKSkpCiAgICAgICAgICAgICAgICAgIChidWZmZXItbGlzdCkpCiAgICAobGlzdCAo Y3VycmVudC1idWZmZXIpKSkpCgooZGVmdW4gY29uc3VsdC0taW1lbnUtanVtcCAoaXRlbSkKICAi SnVtcCB0byBpbWVudSBJVEVNIHZpYSBgY29uc3VsdC0tanVtcCcuCgpJbiBjb250cmFzdCB0byB0 aGUgYnVpbHRpbiBgaW1lbnUnIGp1bXAgZnVuY3Rpb24sCnRoaXMgZnVuY3Rpb24gY2FuIGp1bXAg YWNyb3NzIGJ1ZmZlcnMuIgogIChwY2FzZSBpdGVtCiAgICAoYCgsbmFtZSAscG9zICxmbiAuICxh cmdzKSAoYXBwbHkgZm4gbmFtZSBwb3MgYXJncykpCiAgICAoYCgsXyAuICxwb3MpIChjb25zdWx0 LS1qdW1wIHBvcykpCiAgICAoXyAoZXJyb3IgIlVua25vd24gaW1lbnUgaXRlbTogJVMiIGl0ZW0p KSkpCgooZGVmdW4gY29uc3VsdC0taW1lbnUgKGl0ZW1zKQogICJDaG9vc2UgZnJvbSBpbWVudSBJ VEVNUyB3aXRoIHByZXZpZXcuCgpUaGUgc3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBm dXR1cmUgaGlzdG9yeS4iCiAgKGNvbnN1bHQtLWltZW51LWp1bXAKICAgKGNvbnN1bHQtLXJlYWQK ICAgICJHbyB0byBpdGVtOiAiCiAgICAob3IgaXRlbXMgKHVzZXItZXJyb3IgIkltZW51IGlzIGVt cHR5IikpCiAgICA6cHJldmlldwogICAgKGxldCAoKHByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXct cG9zaXRpb24pKSkKICAgICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgIDs7IE9ubHkg cHJldmlldyBzaW1wbGUgbWVudSBpdGVtcyB3aGljaCBhcmUgbWFya2VycywKICAgICAgICA7OyBp biBvcmRlciB0byBhdm9pZCBhbnkgYmFkIHNpZGUgZWZmZWN0cy4KICAgICAgICAoZnVuY2FsbCBw cmV2aWV3IChhbmQgKG1hcmtlcnAgKGNkciBjYW5kKSkgKGNkciBjYW5kKSkgcmVzdG9yZSkpKQog ICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOm5hcnJvdwogICAgKGxldCAoKG5hcnJvdyAoY2RyIChz ZXEtZmluZCAobGFtYmRhICh4KSAoZGVyaXZlZC1tb2RlLXAgKGNhciB4KSkpIGNvbnN1bHQtaW1l bnUtbmFycm93KSkpKQogICAgICAoY29ucyAobGFtYmRhIChjYW5kKQogICAgICAgICAgICAgICh3 aGVuLWxldCAobiAoY2RyIChhc3NvYyBjb25zdWx0LS1uYXJyb3cgbmFycm93KSkpCiAgICAgICAg ICAgICAgICAobGV0KiAoKGMgKGNhciBjYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAobCAo bGVuZ3RoIG4pKSkKICAgICAgICAgICAgICAgICAgKGFuZCAoPiAobGVuZ3RoIGMpIGwpCiAgICAg ICAgICAgICAgICAgICAgICAgKGVxIHQgKGNvbXBhcmUtc3RyaW5ncyBuIDAgbCBjIDAgbCkpCiAg ICAgICAgICAgICAgICAgICAgICAgKD0gKGFyZWYgYyBsKSAzMikpKSkpCiAgICAgICAgICAgIG5h cnJvdykpCiAgICA6Y2F0ZWdvcnkgJ2ltZW51CiAgICA6bG9va3VwICMnY29uc3VsdC0tbG9va3Vw LWVsZW0KICAgIDpoaXN0b3J5ICdjb25zdWx0LS1pbWVudS1oaXN0b3J5CiAgICA6YWRkLWhpc3Rv cnkgKHRoaW5nLWF0LXBvaW50ICdzeW1ib2wpCiAgICA6c29ydCBuaWwpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LWltZW51ICgpCiAgIkNob29zZSBpdGVtIGZyb20gZmxhdHRlbmVk IGBpbWVudScgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcgd2l0aCBwcmV2aWV3LgoKVGhlIGNvbW1h bmQgc3VwcG9ydHMgcHJldmlldyBhbmQgbmFycm93aW5nLiBTZWUgdGhlIHZhcmlhYmxlCmBjb25z dWx0LWltZW51LW5hcnJvdycsIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIG5hcnJvd2luZy4KClNlZSBh bHNvIGBjb25zdWx0LXByb2plY3QtaW1lbnUnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQt LWltZW51IChjb25zdWx0LS1pbWVudS1pdGVtcykpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtcHJvamVjdC1pbWVudSAoKQogICJDaG9vc2UgaXRlbSBmcm9tIHRoZSBpbWVudXMgb2Yg YWxsIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBwcm9qZWN0LgoKSW4gb3JkZXIgdG8gZGV0ZXJtaW5l IHRoZSBidWZmZXJzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBwcm9qZWN0LCB0aGUKYGNvbnN1bHQt cHJvamVjdC1yb290LWZ1bmN0aW9uJyBpcyB1c2VkLiBPbmx5IHRoZSBidWZmZXJzIHdpdGggdGhl CnNhbWUgbWFqb3IgbW9kZSBhcyB0aGUgY3VycmVudCBidWZmZXIgYXJlIHVzZWQuIFNlZSBhbHNv CmBjb25zdWx0LWltZW51JyBmb3IgbW9yZSBkZXRhaWxzLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNv bnN1bHQtLWltZW51IChjb25zdWx0LS1pbWVudS1hbGwtaXRlbXMgKGNvbnN1bHQtLWltZW51LXBy b2plY3QtYnVmZmVycykpKSkKCihkZWZ1biBjb25zdWx0LS1ncmVwLW1hdGNoZXMgKGxpbmVzKQog ICJGaW5kIGdyZXAgbWF0Y2ggZm9yIFJFR0VYUCBpbiBMSU5FUy4iCiAgKGxldCAoKGNhbmRpZGF0 ZXMpKQogICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAoZG9saXN0IChzdHIgbGluZXMpCiAgICAg ICAgKHdoZW4gKHN0cmluZy1tYXRjaCBjb25zdWx0LS1ncmVwLXJlZ2V4cCBzdHIpCiAgICAgICAg ICAobGV0KiAoKGZpbGUgKGV4cGFuZC1maWxlLW5hbWUgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNj YXBlIChtYXRjaC1zdHJpbmcgMSBzdHIpKSkpCiAgICAgICAgICAgICAgICAgKGxpbmUgKHN0cmlu Zy10by1udW1iZXIgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIChtYXRjaC1zdHJpbmcgMiBz dHIpKSkpCiAgICAgICAgICAgICAgICAgKHN0ciAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtZW5kIDAp KSkKICAgICAgICAgICAgICAgICAobG9jIChjb25zdWx0LS1mb3JtYXQtbG9jYXRpb24gKHN0cmlu Zy1yZW1vdmUtcHJlZml4IGRlZmF1bHQtZGlyZWN0b3J5IGZpbGUpIGxpbmUpKQogICAgICAgICAg ICAgICAgIChwb3MpKQogICAgICAgICAgICAod2hpbGUgKHN0cmluZy1tYXRjaCBjb25zdWx0LS1n cmVwLW1hdGNoLXJlZ2V4cCBzdHIpCiAgICAgICAgICAgICAgKHVubGVzcyBwb3MKICAgICAgICAg ICAgICAgIChzZXRxIHBvcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkKICAgICAgICAgICAgICAoc2V0 cSBzdHIgKGNvbmNhdCAoc3Vic3RyaW5nIHN0ciAwIChtYXRjaC1iZWdpbm5pbmcgMCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKG1hdGNoLXN0cmluZyAxIHN0 cikgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1tYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtZW5kIDApKSkpKQogICAgICAgICAgICAoc2V0 cSBzdHIgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIHN0cikpCiAgICAgICAgICAgIChwdXNo IChsaXN0IChjb25jYXQgbG9jIHN0cikgZmlsZSBsaW5lIChvciBwb3MgMCkpIGNhbmRpZGF0ZXMp KSkpKQogICAgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt Z3JlcAoKKGRlZnVuIGNvbnN1bHQtLWdyZXAtbWFya2VyIChvcGVuKQogICJHcmVwIGNhbmRpZGF0 ZSB0byBtYXJrZXIuCgpPUEVOIGlzIHRoZSBmdW5jdGlvbiB0byBvcGVuIG5ldyBmaWxlcy4iCiAg KGxhbWJkYSAoX2lucHV0IGNhbmRpZGF0ZXMgY2FuZCkKICAgICh3aGVuLWxldCogKChsb2MgKGNk ciAoYXNzb2MgY2FuZCBjYW5kaWRhdGVzKSkpCiAgICAgICAgICAgICAgICAoYnVmIChmdW5jYWxs IG9wZW4gKGNhciBsb2MpKSkpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAg IChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAg KHdpZGVuKQogICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICAgICA7 OyBMb2NhdGlvbiBkYXRhIG1pZ2h0IGJlIGludmFsaWQgYnkgbm93IQogICAgICAgICAgICAoaWdu b3JlLWVycm9ycwogICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgKC0gKGNhZHIgbG9jKSAxKSkK ICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIChjYWRkciBsb2MpKSkKICAgICAgICAgICAgKHBv aW50LW1hcmtlcikpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1ncmVwIChwcm9tcHQgY21kIGRpciBp bml0aWFsKQogICJSdW4gZ3JlcCBDTUQgaW4gRElSIHdpdGggSU5JVElBTCBpbnB1dC4KClBST01Q VCBpcyB0aGUgcHJvbXB0IHN0cmluZy4KVGhlIHN5bWJvbCBhdCBwb2ludCBpcyBhZGRlZCB0byB0 aGUgZnV0dXJlIGhpc3RvcnkuIgogIChsZXQqICgocHJvbXB0LWRpciAoY29uc3VsdC0tZGlyZWN0 b3J5LXByb21wdCBwcm9tcHQgZGlyKSkKICAgICAgICAgKGRlZmF1bHQtZGlyZWN0b3J5IChjZHIg cHJvbXB0LWRpcikpKQogICAgKGNvbnN1bHQtLXdpdGgtZmlsZS1wcmV2aWV3IChvcGVuKQogICAg ICAoY29uc3VsdC0tanVtcAogICAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICAoY2FyIHByb21w dC1kaXIpCiAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWNvbW1hbmQgY21kCiAgICAgICAgICAoY29u c3VsdC0tYXN5bmMtdHJhbnNmb3JtIGNvbnN1bHQtLWdyZXAtbWF0Y2hlcykpCiAgICAgICAgOmxv b2t1cCAoY29uc3VsdC0tZ3JlcC1tYXJrZXIgb3BlbikKICAgICAgICA6cHJldmlldyAoY29uc3Vs dC0tcHJldmlldy1wb3NpdGlvbikKICAgICAgICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5 bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQogICAgICAgIDphZGQtaGlzdG9yeSAoY29uY2F0IGNv bnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpCiAgICAg ICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICAgIDpjYXRlZ29yeSAneHJlZi1sb2NhdGlvbgogICAg ICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWdyZXAtaGlzdG9yeSkKICAgICAgICA6c29y dCBuaWwpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ3JlcCAoJm9wdGlvbmFs IGRpciBpbml0aWFsKQogICJTZWFyY2ggZm9yIHJlZ2V4cCB3aXRoIGdyZXAgaW4gRElSIHdpdGgg SU5JVElBTCBpbnB1dC4KClRoZSBpbnB1dCBzdHJpbmcgaXMgc3BsaXQsIHRoZSBmaXJzdCBwYXJ0 IG9mIHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRvCnRoZSBhc3luY2hyb25vdXMgZ3JlcCBwcm9jZXNz IGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHN0cmluZyBpcwpwYXNzZWQgdG8gdGhlIGNvbXBs ZXRpb24tc3R5bGUgZmlsdGVyaW5nLiBUaGUgaW5wdXQgc3RyaW5nIGlzIHNwbGl0IGF0CmEgcHVu Y3R1YXRpb24gY2hhcmFjdGVyLCB3aGljaCBpcyBnaXZlbiBhcyB0aGUgZmlyc3QgY2hhcmFjdGVy IG9mIHRoZQppbnB1dCBzdHJpbmcuIFRoZSBmb3JtYXQgaXMgc2ltaWxhciB0byBQZXJsLXN0eWxl IHJlZ3VsYXIgZXhwcmVzc2lvbnMsCmUuZy4sIC9yZWdleHAvLiBGdXJ0aGVybW9yZSBjb21tYW5k IGxpbmUgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvCmdyZXAsIHNwZWNpZmllZCBiZWhpbmQgLS0u CgpFeGFtcGxlOiAjYXN5bmMtcmVnZXhwIC0tIGdyZXAtb3B0cyNmaWx0ZXItc3RyaW5nCgpUaGUg c3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4gSWYgYGNvbnN1 bHQtZ3JlcCcKaXMgY2FsbGVkIGludGVyYWN0aXZlbHkgd2l0aCBhIHByZWZpeCBhcmd1bWVudCwg dGhlIHVzZXIgY2FuIHNwZWNpZnkKdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggaW4uIEJ5IGRlZmF1 bHQgdGhlIHByb2plY3QgZGlyZWN0b3J5IGlzIHVzZWQKaWYgYGNvbnN1bHQtcHJvamVjdC1yb290 LWZ1bmN0aW9uJyBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIG5vbi1uaWwuCk90aGVyd2lzZSB0aGUg YGRlZmF1bHQtZGlyZWN0b3J5JyBpcyBzZWFyY2hlZC4iCiAgKGludGVyYWN0aXZlICJQIikKICAo Y29uc3VsdC0tZ3JlcCAiR3JlcCIgY29uc3VsdC1ncmVwLWNvbW1hbmQgZGlyIGluaXRpYWwpKQoK Ozs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ2l0LWdyZXAgKCZvcHRpb25hbCBkaXIgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBncmVwIGluIERJUiB3aXRoIElOSVRJQUwg aW5wdXQuCgpTZWUgYGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscy4iCiAgKGludGVyYWN0 aXZlICJQIikKICAoY29uc3VsdC0tZ3JlcCAiR2l0LWdyZXAiIGNvbnN1bHQtZ2l0LWdyZXAtY29t bWFuZCBkaXIgaW5pdGlhbCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yaXBncmVw ICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhwIHdpdGggcmcgaW4g RElSIHdpdGggSU5JVElBTCBpbnB1dC4KClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRh aWxzLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJSaXBncmVwIiBjb25z dWx0LXJpcGdyZXAtY29tbWFuZCBkaXIgaW5pdGlhbCkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0 LWZpbmQKCihkZWZ1biBjb25zdWx0LS1maW5kIChwcm9tcHQgY21kIGluaXRpYWwpCiAgIlJ1biBm aW5kIENNRCBpbiBjdXJyZW50IGRpcmVjdG9yeSB3aXRoIElOSVRJQUwgaW5wdXQuCgpQUk9NUFQg aXMgdGhlIHByb21wdC4KQ01EIGlzIHRoZSBmaW5kIGFyZ3VtZW50IHN0cmluZy4KVGhlIGZpbGVu YW1lIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGZpbmQtZmls ZQogICAoY29uc3VsdC0tcmVhZAogICAgcHJvbXB0CiAgICAoY29uc3VsdC0tYXN5bmMtY29tbWFu ZCBjbWQKICAgICAgKGNvbnN1bHQtLWFzeW5jLW1hcCAobGFtYmRhICh4KSAoc3RyaW5nLXJlbW92 ZS1wcmVmaXggIi4vIiB4KSkpKQogICAgOnNvcnQgbmlsCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAg ICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQog ICAgOmFkZC1oaXN0b3J5IChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0ICh0aGlu Zy1hdC1wb2ludCAnZmlsZW5hbWUpKQogICAgOmNhdGVnb3J5ICdmaWxlCiAgICA6aGlzdG9yeSAn KDppbnB1dCBjb25zdWx0LS1maW5kLWhpc3RvcnkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g Y29uc3VsdC1maW5kICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhw IHdpdGggZmluZCBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIGZpbmQgcHJvY2VzcyBp cyBzdGFydGVkIGFzeW5jaHJvbm91c2x5LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUg YGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91 cyBzZWFyY2guIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGxldCogKChwcm9tcHQtZGlyIChjb25z dWx0LS1kaXJlY3RvcnktcHJvbXB0ICJGaW5kIiBkaXIpKQogICAgICAgICAoZGVmYXVsdC1kaXJl Y3RvcnkgKGNkciBwcm9tcHQtZGlyKSkpCiAgICAoY29uc3VsdC0tZmluZCAoY2FyIHByb21wdC1k aXIpIGNvbnN1bHQtZmluZC1jb21tYW5kIGluaXRpYWwpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1 biBjb25zdWx0LWxvY2F0ZSAoJm9wdGlvbmFsIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhw IHdpdGggbG9jYXRlIHdpdGggSU5JVElBTCBpbnB1dC4KClRoZSBsb2NhdGUgcHJvY2VzcyBpcyBz dGFydGVkIGFzeW5jaHJvbm91c2x5LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUgYGNv bnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91cyBz ZWFyY2guIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tZmluZCAiTG9jYXRlOiAiIGNvbnN1 bHQtbG9jYXRlLWNvbW1hbmQgaW5pdGlhbCkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW1hbgoK KGRlZnVuIGNvbnN1bHQtLW1hbi1mb3JtYXQgKGxpbmVzKQogICJGb3JtYXQgbWFuIGNhbmRpZGF0 ZXMgZnJvbSBMSU5FUy4iCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKHNhdmUtbWF0Y2gtZGF0 YQogICAgICAoZG9saXN0IChzdHIgbGluZXMpCiAgICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAi XlxcKC4qP1xcKSArLSArXFwoLipcXCkkIiBzdHIpCiAgICAgICAgICAobGV0ICgobmFtZSAobWF0 Y2gtc3RyaW5nIDEgc3RyKSkKICAgICAgICAgICAgICAgIChkZXNjIChtYXRjaC1zdHJpbmcgMiBz dHIpKSkKICAgICAgICAgICAgKHB1c2ggKGNvbnMKICAgICAgICAgICAgICAgICAgIChmb3JtYXQg IiUtMzBzICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSBuYW1lICdm YWNlICdjb25zdWx0LWtleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYykKICAgICAg ICAgICAgICAgICAgIG5hbWUpCiAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMpKSkpKQogICAg KG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LW1h biAoJm9wdGlvbmFsIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhwIHdpdGggbWFuIHdpdGgg SU5JVElBTCBpbnB1dC4KClRoZSBtYW4gcHJvY2VzcyBpcyBzdGFydGVkIGFzeW5jaHJvbm91c2x5 LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUgYGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUg ZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91cyBzZWFyY2guIgogIChpbnRlcmFjdGl2 ZSkKICAobWFuIChjb25zdWx0LS1yZWFkCiAgICAgICAgIk1hbnVhbCBlbnRyeTogIgogICAgICAg IChjb25zdWx0LS1hc3luYy1jb21tYW5kIGNvbnN1bHQtbWFuLWNvbW1hbmQKICAgICAgICAgIChj b25zdWx0LS1hc3luYy10cmFuc2Zvcm0gY29uc3VsdC0tbWFuLWZvcm1hdCkpCiAgICAgICAgOnJl cXVpcmUtbWF0Y2ggdAogICAgICAgIDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtY2RyCiAgICAg ICAgOmluaXRpYWwgKGNvbmNhdCBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgaW5pdGlhbCkK ICAgICAgICA6YWRkLWhpc3RvcnkgKGNvbmNhdCBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQg KHRoaW5nLWF0LXBvaW50ICdzeW1ib2wpKQogICAgICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1 bHQtLW1hbi1oaXN0b3J5KSkpKQoKOzs7OyBJbnRlZ3JhdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGNv bXBsZXRpb24gc3lzdGVtCgooZGVmdW4gY29uc3VsdC0tZGVmYXVsdC1jb21wbGV0aW9uLWNhbmRp ZGF0ZSAoKQogICJSZXR1cm4gY3VycmVudCBjYW5kaWRhdGUgZnJvbSBkZWZhdWx0IGNvbXBsZXRp b24gc3lzdGVtLiIKICAod2hlbiAoYW5kIChub3QgaWNvbXBsZXRlLW1vZGUpIChlcSBjb21wbGV0 aW5nLXJlYWQtZnVuY3Rpb24gIydjb21wbGV0aW5nLXJlYWQtZGVmYXVsdCkpCiAgICAobGV0ICgo Y2FuZCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzKSkpCiAgICAgICh3aGVuICh0 ZXN0LWNvbXBsZXRpb24gY2FuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZm ZXItY29tcGxldGlvbi10YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZm ZXItY29tcGxldGlvbi1wcmVkaWNhdGUpCiAgICAgICAgY2FuZCkpKSkKCihkZWZ1biBjb25zdWx0 LS1kZWZhdWx0LWNvbXBsZXRpb24tZmlsdGVyIChjYXRlZ29yeSBfaGlnaGxpZ2h0KQogICJSZXR1 cm4gZGVmYXVsdCBmaWx0ZXIgZnVuY3Rpb24gZ2l2ZW4gdGhlIGNvbXBsZXRpb24gQ0FURUdPUlku CgpUaGUgY29tcGxldGlvbiBjYXRlZ29yeSBpcyB1c2VkIHRvIGZpbmQgdGhlIGNvbXBsZXRpb24g c3R5bGUgdmlhCmBjb21wbGV0aW9uLWNhdGVnb3J5LWRlZmF1bHRzJyBhbmQgYGNvbXBsZXRpb24t Y2F0ZWdvcnktb3ZlcnJpZGVzJy4iCiAgKGxhbWJkYSAoc3RyIGNhbmRzKQogICAgOzsgY29tcGxl dGlvbi1hbGwtY29tcGxldGlvbnMgcmV0dXJucyBhbiBpbXByb3BlciBsaXN0CiAgICA7OyB3aGVy ZSB0aGUgbGFzdCBsaW5rIGlzIG5vdCBuZWNlc3NhcmlseSBuaWwuIEZpeCB0aGlzIQogICAgKG5j b25jIChjb21wbGV0aW9uLWFsbC1jb21wbGV0aW9ucwogICAgICAgICAgICBzdHIgY2FuZHMgbmls IChsZW5ndGggc3RyKQogICAgICAgICAgICBgKG1ldGFkYXRhIChjYXRlZ29yeSAuICxjYXRlZ29y eSkpKQogICAgICAgICAgIG5pbCkpKQoKOzsgQW5ub3VuY2Ugbm93IHRoYXQgY29uc3VsdCBoYXMg YmVlbiBsb2FkZWQKKHByb3ZpZGUgJ2NvbnN1bHQpCgo7Ozs7IEludGVncmF0aW9uIHdpdGggb3Ro ZXIgY29tcGxldGlvbiBzeXN0ZW1zCgood2l0aC1ldmFsLWFmdGVyLWxvYWQgJ2ljb21wbGV0ZSAo cmVxdWlyZSAnY29uc3VsdC1pY29tcGxldGUpKQood2l0aC1ldmFsLWFmdGVyLWxvYWQgJ3NlbGVj dHJ1bSAocmVxdWlyZSAnY29uc3VsdC1zZWxlY3RydW0pKQoKOzsgTG9jYWwgVmFyaWFibGVzOgo7 OyBvdXRsaW5lLXJlZ2V4cDogIjs7OzsqIFxcfChkZWZcXCh1blxcfGN1c3RvbVxcfHZhclxcKSBj b25zdWx0LVthLXpdIgo7OyBFbmQ6Cjs7OyBjb25zdWx0LmVsIGVuZHMgaGVyZQo= --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el Content-Disposition: attachment; filename=consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el; size=142288 Ozs7IGNvbnN1bHQuZWwgLS0tIENvbnN1bHRpbmcgY29tcGxldGluZy1yZWFkIC0qLSBsZXhpY2Fs LWJpbmRpbmc6IHQgLSotCgo7OyBBdXRob3I6IERhbmllbCBNZW5kbGVyLCBDb25zdWx0IGFuZCBT ZWxlY3RydW0gY29udHJpYnV0b3JzCjs7IE1haW50YWluZXI6IERhbmllbCBNZW5kbGVyCjs7IENy ZWF0ZWQ6IDIwMjAKOzsgTGljZW5zZTogR1BMLTMuMC1vci1sYXRlcgo7OyBWZXJzaW9uOiAwLjMK OzsgUGFja2FnZS1SZXF1aXJlczogKChlbWFjcyAiMjYuMSIpKQo7OyBIb21lcGFnZTogaHR0cHM6 Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQKCjs7IFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBDb25zdWx0IGlt cGxlbWVudHMgYSBzZXQgb2YgYGNvbnN1bHQtPHRoaW5nPicgY29tbWFuZHMgd2hpY2ggdXNlCjs7 IGBjb21wbGV0aW5nLXJlYWQnIHRvIHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBjYW5kaWRhdGVzLiBD b25zdWx0Cjs7IHByb3ZpZGVzIGFuIGVuaGFuY2VkIGJ1ZmZlciBzd2l0Y2hlciBgY29uc3VsdC1i dWZmZXInIGFuZCBtYW55Cjs7IHNlYXJjaCBhbmQgbmF2aWdhdGlvbiBjb21tYW5kcyBsaWtlIGBj b25zdWx0LWltZW51JyBhbmQKOzsgYGNvbnN1bHQtbGluZScuIFNlYXJjaGluZyB0aHJvdWdoIG11 bHRpcGxlIGZpbGVzIGlzIHN1cHBvcnRlZCBieQo7OyB0aGUgcG93ZXJmdWwgYXN5bmNocm9ub3Vz IGBjb25zdWx0LWdyZXAnIGNvbW1hbmQuIE1hbnkgQ29uc3VsdAo7OyBjb21tYW5kcyBhbGxvdyBw cmV2aWV3aW5nIGNhbmRpZGF0ZXMgLSBpZiBhIGNhbmRpZGF0ZSBpcyBzZWxlY3RlZAo7OyBpbiB0 aGUgY29tcGxldGlvbiB2aWV3LCB0aGUgYnVmZmVyIHNob3dzIHRoZSBjYW5kaWRhdGUgaW1tZWRp YXRlbHkuCgo7OyBUaGUgQ29uc3VsdCBjb21tYW5kcyBhcmUgY29tcGF0aWJsZSB3aXRoIGNvbXBs ZXRpb24gc3lzdGVtcyBiYXNlZAo7OyBvbiB0aGUgRW1hY3MgYGNvbXBsZXRpbmctcmVhZCcgQVBJ LCBub3RhYmx5IHRoZSBkZWZhdWx0IGNvbXBsZXRpb24KOzsgc3lzdGVtLCBJY29tcGxldGUsIFNl bGVjdHJ1bSBhbmQgRW1iYXJrLgoKOzsgQ29uc3VsdCBoYXMgYmVlbiBpbnNwaXJlZCBieSBDb3Vu c2VsLiBTb21lIG9mIHRoZSBDb25zdWx0IGNvbW1hbmRzCjs7IG9yaWdpbmF0ZWQgaW4gdGhlIFNl bGVjdHJ1bSB3aWtpLiBTZWUgdGhlIFJFQURNRSBmb3IgYSBmdWxsIGxpc3Qgb2YKOzsgY29udHJp YnV0b3JzLgoKOzs7IENvZGU6CgooZXZhbC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAnY2wtbGli KQogIChyZXF1aXJlICdzdWJyLXgpKQoocmVxdWlyZSAnYm9va21hcmspCihyZXF1aXJlICdjb21w aWxlKQoocmVxdWlyZSAnaW1lbnUpCihyZXF1aXJlICdrbWFjcm8pCihyZXF1aXJlICdvdXRsaW5l KQoocmVxdWlyZSAncmVjZW50ZikKKHJlcXVpcmUgJ3JpbmcpCihyZXF1aXJlICdzZXEpCgooZGVm Z3JvdXAgY29uc3VsdCBuaWwKICAiQ29uc3VsdGluZyBgY29tcGxldGluZy1yZWFkJy4iCiAgOmdy b3VwICdjb252ZW5pZW5jZQogIDpwcmVmaXggImNvbnN1bHQtIikKCjs7OzsgQ3VzdG9taXphdGlv bgoKKGRlZmN1c3RvbSBjb25zdWx0LW5hcnJvdy1rZXkgbmlsCiAgIlByZWZpeCBrZXkgZm9yIG5h cnJvd2luZyBkdXJpbmcgY29tcGxldGlvbi4KCkdvb2QgY2hvaWNlcyBmb3IgdGhpcyBrZXkgYXJl IChrYmQgXCI8XCIpIG9yIChrYmQgXCJDLStcIikgZm9yIGV4YW1wbGUuCgpUaGUga2V5IG11c3Qg YmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVzZW50 YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0b3Ig c3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC13aWRlbi1rZXkgbmlsCiAg IktleSB1c2VkIGZvciB3aWRlbmluZyBkdXJpbmcgY29tcGxldGlvbi4KCklmIHRoaXMga2V5IGlz IHVuc2V0LCBkZWZhdWx0cyB0byAnY29uc3VsdC1uYXJyb3cta2V5IFNQQycuCgpUaGUga2V5IG11 c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVz ZW50YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0 b3Igc3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC1wcm9qZWN0LXJvb3Qt ZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIHdoaWNoIHJldHVybnMgcHJvamVjdCByb290IGRpcmVj dG9yeS4KClRoZSByb290IGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGBjb25zdWx0LWJ1ZmZlcicgYW5k IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnKGNob2ljZSBmdW5jdGlvbiAoY29uc3QgbmlsKSkp CgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSAwLjI1CiAgIlJlZnJlc2hp bmcgZGVsYXkgb2YgdGhlIGNvbXBsZXRpb24gdWkgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4K ClRoZSBjb21wbGV0aW9uIHVpIGlzIG9ubHkgdXBkYXRlZCBldmVyeSBgY29uc3VsdC1hc3luYy1y ZWZyZXNoLWRlbGF5JwpzZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8gYXN5bmNocm9ub3VzIGNvbW1h bmRzIGxpa2UgZm9yIGV4YW1wbGUKYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdmbG9hdCkKCihk ZWZjdXN0b20gY29uc3VsdC1hc3luYy1pbnB1dC10aHJvdHRsZSAwLjUKICAiSW5wdXQgdGhyb3R0 bGUgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4KClRoZSBhc3luY2hyb25vdXMgcHJvY2VzcyBp cyBzdGFydGVkIG9ubHkgZXZlcnkKYGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUnIHNlY29u ZHMuIFRoaXMgYXBwbGllcyB0byBhc3luY2hyb25vdXMKY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0 LWdyZXAnLiIKICA6dHlwZSAnZmxvYXQpCgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtaW5wdXQt ZGVib3VuY2UgMC4yNQogICJJbnB1dCBkZWJvdW5jZSBmb3IgYXN5bmNocm9ub3VzIGNvbW1hbmRz LgoKVGhlIGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHN0YXJ0ZWQgb25seSB3aGVuIHRoZXJlIGhh cyBub3QgYmVlbiBuZXcKaW5wdXQgZm9yIGBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlJyBz ZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8KYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBlLmcuLCBgY29u c3VsdC1ncmVwJy4iCiAgOnR5cGUgJ2Zsb2F0KQoKKGRlZmN1c3RvbSBjb25zdWx0LWFzeW5jLW1p bi1pbnB1dCAzCiAgIk1pbmltdW0gbnVtYmVyIG9mIGxldHRlcnMgbmVlZGVkLCBiZWZvcmUgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaXMgY2FsbGVkLgoKVGhpcyBhcHBsaWVzIHRvIGFzeW5jaHJvbm91 cyBjb21tYW5kcywgZS5nLiwgYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRl ZmN1c3RvbSBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgIiMiCiAgIkRlZmF1bHQgYXN5bmMg aW5wdXQgc2VwYXJhdG9yIHVzZWQgZm9yIHNwbGl0dGluZy4KCkNhbiBhbHNvIGJlIG5pbCBpbiBv cmRlciB0byBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgYSBzZXBhcmF0b3IuIFRoaXMKYXBwbGll cyB0byBhc3luY2hyb25vdXMgY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0LWdyZXAnLiIKICA6dHlw ZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LW1vZGUtaGlzdG9yaWVzCiAgJygoZXNoZWxs LW1vZGUgLiBlc2hlbGwtaGlzdG9yeS1yaW5nKQogICAgKGNvbWludC1tb2RlIC4gY29taW50LWlu cHV0LXJpbmcpCiAgICAodGVybS1tb2RlICAgLiB0ZXJtLWlucHV0LXJpbmcpKQogICJBbGlzdCBv ZiAobW9kZSAuIGhpc3RvcnkpIHBhaXJzIG9mIG1vZGUgaGlzdG9yaWVzLgpUaGUgaGlzdG9yaWVz IGNhbiBiZSByaW5ncyBvciBsaXN0cy4iCiAgOnR5cGUgJyhsaXN0IChjb25zIHN5bWJvbCBzeW1i b2wpKSkKCihkZWZjdXN0b20gY29uc3VsdC10aGVtZXMgbmlsCiAgIkxpc3Qgb2YgdGhlbWVzIHRv IGJlIHByZXNlbnRlZCBmb3Igc2VsZWN0aW9uLgpuaWwgc2hvd3MgYWxsIGBjdXN0b20tYXZhaWxh YmxlLXRoZW1lcycuIgogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIGNvbnN1 bHQtYWZ0ZXItanVtcC1ob29rICcocmVjZW50ZXIpCiAgIkZ1bmN0aW9uIGNhbGxlZCBhZnRlciBq dW1waW5nIHRvIGEgbG9jYXRpb24uCgpDb21tb25seSB1c2VkIGZ1bmN0aW9ucyBmb3IgdGhpcyBo b29rIGFyZSBgcmVjZW50ZXInIGFuZApgcmVwb3NpdGlvbi13aW5kb3cnLgoKVGhpcyBpcyBjYWxs ZWQgZHVyaW5nIHByZXZpZXcgYW5kIGZvciB0aGUganVtcCBhZnRlciBzZWxlY3Rpb24uCllvdSBt YXkgd2FudCB0byBhZGQgYSBmdW5jdGlvbiB3aGljaCBwdWxzZXMgdGhlIGN1cnJlbnQgbGluZSwg ZS5nLiwKYHhyZWYtcHVsc2UtbW9tZW50YXJpbHknLiIKICA6dHlwZSAnaG9vaykKCihkZWZjdXN0 b20gY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gtYmVnaW5uaW5nCiAgIldoZXJl IHRvIGxlYXZlIHBvaW50IGFmdGVyIGBjb25zdWx0LWxpbmUnIGp1bXBzIHRvIGEgbWF0Y2guIgog IDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhlIGxpbmUiIGxpbmUt YmVnaW5uaW5nKQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhl IG1hdGNoIiBtYXRjaC1iZWdpbm5pbmcpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkVu ZCBvZiB0aGUgbWF0Y2giIG1hdGNoLWVuZCkpKQoKKGRlZmN1c3RvbSBjb25zdWx0LWxpbmUtbnVt YmVycy13aWRlbiB0CiAgIlNob3cgYWJzb2x1dGUgbGluZSBudW1iZXJzIHdoZW4gbmFycm93aW5n IGlzIGFjdGl2ZS4KClNlZSBhbHNvIGBkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbicuIgogIDp0 eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzIHQKICAi U2hvdyBsaW5lIG51bWJlcnMgZm9yIGBjb25zdWx0LWdvdG8tbGluZScuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWZvbnRpZnktbWF4LXNpemUgMTA0ODU3NgogICJCdWZm ZXJzIGxhcmdlciB0aGFuIHRoaXMgYnl0ZSBsaW1pdCBhcmUgbm90IGZvbnRpZmllZC4KClRoaXMg aXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgYSBsYXJnZSBzdGFydHVwIHRpbWUKZm9y IG5hdmlnYXRpb24gY29tbWFuZHMgbGlrZSBgY29uc3VsdC1saW5lJy4iCiAgOnR5cGUgJ2ludGVn ZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtbmFycm93CiAgJygoZW1hY3MtbGlzcC1tb2Rl IC4gKCg/ZiAuICJGdW5jdGlvbnMiKQogICAgICAgICAgICAgICAgICAgICAgICAoP20gLiAiTWFj cm9zIikKICAgICAgICAgICAgICAgICAgICAgICAgKD9wIC4gIlBhY2thZ2VzIikKICAgICAgICAg ICAgICAgICAgICAgICAgKD90IC4gIlR5cGVzIikKICAgICAgICAgICAgICAgICAgICAgICAgKD92 IC4gIlZhcmlhYmxlcyIpKSkpCiAgIk5hcnJvd2luZyBrZXlzIHVzZWQgYnkgYGNvbnN1bHQtaW1l bnUnLiIKICA6dHlwZSAnYWxpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwK ICAnKChlbWFjcy1saXNwLW1vZGUgLiAiRnVuY3Rpb25zIikpCiAgIkNhdGVnb3J5IG9mIHRvcGxl dmVsIGl0ZW1zLCB1c2VkIGJ5IGBjb25zdWx0LWltZW51Jy4KClRoZSBpbWVudSByZXByZXNlbnRh dGlvbiBwcm92aWRlZCBieSB0aGUgYmFja2VuZCB1c3VhbGx5IHB1dHMKZnVuY3Rpb25zIGRpcmVj dGx5IGF0IHRoZSB0b3BsZXZlbC4gYGNvbnN1bHQtaW1lbnUnIG1vdmVzIHRoZW0gaW5zdGVhZAp1 bmRlciB0aGUgY2F0ZWdvcnkgc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUuIgogIDp0eXBlICdh bGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1idWZmZXItZmlsdGVyCiAgJygiXiAiKQogICJGaWx0 ZXIgcmVnZXhwcyBmb3IgYGNvbnN1bHQtYnVmZmVyJy4KClRoZSBkZWZhdWx0IHNldHRpbmcgaXMg dG8gZmlsdGVyIG9ubHkgZXBoZW1lcmFsIGJ1ZmZlciBuYW1lcyBiZWdpbm5pbmcKd2l0aCBhIHNw YWNlIGNoYXJhY3Rlci4iCiAgOnR5cGUgJyhyZXBlYXQgcmVnZXhwKSkKCihkZWZjdXN0b20gY29u c3VsdC1idWZmZXItc291cmNlcwogICcoY29uc3VsdC0tc291cmNlLWhpZGRlbi1idWZmZXIKICAg IGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICAgIGNvbnN1bHQtLXNvdXJjZS1maWxlCiAgICBjb25z dWx0LS1zb3VyY2UtYm9va21hcmsKICAgIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1ZmZlcgog ICAgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZSkKICAiU291cmNlcyB1c2VkIGJ5IGBjb25z dWx0LWJ1ZmZlcicuCgpTZWUgYGNvbnN1bHQtLW11bHRpJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0 aGUgc291cmNlIHZhbHVlcy4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtbW9k ZS1jb21tYW5kLWZpbHRlcgogICcoOzsgRmlsdGVyIGNvbW1hbmRzCiAgICAiLW1vZGUkIiAiLS0i CiAgICA7OyBGaWx0ZXIgd2hvbGUgZmVhdHVyZXMKICAgIHNpbXBsZSBtd2hlZWwgdGltZSBzby1s b25nIHJlY2VudGYpCiAgIkZpbHRlciBjb21tYW5kcyBmb3IgYGNvbnN1bHQtbW9kZS1jb21tYW5k Jy4iCiAgOnR5cGUgJyhyZXBlYXQgKGNob2ljZSBzeW1ib2wgcmVnZXhwKSkpCgooZGVmY3VzdG9t IGNvbnN1bHQtZ2l0LWdyZXAtY29tbWFuZAogICJnaXQgLS1uby1wYWdlciBncmVwIC0tbnVsbCAt LWNvbG9yPWFsd2F5cyAtLWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1saW5lLW51bWJlciAtSSAtZSBB UkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ2l0LWdyZXAsIHNlZSBgY29u c3VsdC1naXQtZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZ3Jl cC1jb21tYW5kCiAgImdyZXAgLS1udWxsIC0tbGluZS1idWZmZXJlZCAtLWNvbG9yPWFsd2F5cyAt LWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1leGNsdWRlLWRpcj0uZ2l0IC0tbGluZS1udW1iZXIgLUkg LXIgLiAtZSBBUkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ3JlcCwgc2Vl IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LXJp cGdyZXAtY29tbWFuZAogICJyZyAtLW51bGwgLS1saW5lLWJ1ZmZlcmVkIC0tY29sb3I9YWx3YXlz IC0tbWF4LWNvbHVtbnM9NTAwXAogICAtLW5vLWhlYWRpbmcgLS1saW5lLW51bWJlciAuIC1lIEFS RyBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciByaXBncmVwLCBzZWUgYGNvbnN1 bHQtcmlwZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZmluZC1j b21tYW5kCiAgImZpbmQgLiAtbm90ICggLXdob2xlbmFtZSAqLy4qIC1wcnVuZSApIC1pcGF0aCAq QVJHKiBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBmaW5kLCBzZWUgYGNvbnN1 bHQtZmluZCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtbG9jYXRlLWNv bW1hbmQKICAibG9jYXRlIC0taWdub3JlLWNhc2UgLS1leGlzdGluZyAtLXJlZ2V4cCBBUkcgT1BU UyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgbG9jYXRlLCBzZWUgYGNvbnN1bHQtbG9j YXRlJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29uc3VsdC1tYW4tY29tbWFuZAog ICJtYW4gLWsgQVJHIE9QVFMiCiAgIkNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIG1hbiBhcHJv cG9zLCBzZWUgYGNvbnN1bHQtbWFuJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29u c3VsdC1wcmV2aWV3LWtleSAnYW55CiAgIlByZXZpZXcgdHJpZ2dlciBrZXlzLCBjYW4gYmUgbmls LCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMuIgogIDp0eXBlICcoY2hvaWNl IChjb25zdCBhbnkpIChjb25zdCBuaWwpIHZlY3RvciBzdHJpbmcgKHJlcGVhdCAoY2hvaWNlIHZl Y3RvciBzdHJpbmcpKSkpCgooZGVmY3VzdG9tIGNvbnN1bHQtcHJldmlldy1tYXgtc2l6ZSAxMDQ4 NTc2MAogICJGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIGJ5dGUgbGltaXQgYXJlIG5vdCBwcmV2aWV3 ZWQuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRlZmN1c3RvbSBjb25zdWx0LXByZXZpZXctbWF4LWNv dW50IDEwCiAgIk51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9wZW4gYXQgb25jZSBkdXJpbmcgcHJl dmlldy4iCiAgOnR5cGUgJ2ludGVnZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtcmVnaXN0ZXItbmFy cm93CiAgYCgoP24gIk51bWJlciIgLCMnbnVtYmVycCkKICAgICg/cyAiU3RyaW5nIiAsIydzdHJp bmdwKQogICAgKD9yICJSZWN0YW5nbGUiICwobGFtYmRhICh4KSAoc3RyaW5ncCAoY2FyLXNhZmUg eCkpKSkKICAgIDs7IGZyYW1lc2V0LXJlZ2lzdGVyLXAgYW5kIGttYWNyby1yZWdpc3Rlci1wIGV4 aXN0cyBzaW5jZSAyNy4xCiAgICAoP2YgIkZyYW1lc2V0IiAsKGxhbWJkYSAoeCkgKGVxICh0eXBl LW9mIHgpICdmcmFtZXNldC1yZWdpc3RlcikpKQogICAgKD9rICJLbWFjcm8iICwobGFtYmRhICh4 KSAoZXEgKHR5cGUtb2YgeCkgJ2ttYWNyby1yZWdpc3RlcikpKQogICAgKD9wICJQb2ludCIgLChs YW1iZGEgKHgpIChvciAobWFya2VycCB4KSAoZXEgKGNhci1zYWZlIHgpICdmaWxlLXF1ZXJ5KSkp KQogICAgKD93ICJXaW5kb3ciICwobGFtYmRhICh4KSAod2luZG93LWNvbmZpZ3VyYXRpb24tcCAo Y2FyLXNhZmUgeCkpKSkpCiAgIlJlZ2lzdGVyIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLgoKRWFj aCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0aGUgZm9ybSAnKGNoYXIgbmFtZSBwcmVk aWNhdGUpLiIKICA6dHlwZSAnbGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1ib29rbWFyay1uYXJy b3cKICBgKCg/ZiAiRmlsZSIgIydib29rbWFyay1kZWZhdWx0LWhhbmRsZXIpCiAgICAoP2ggIkhl bHAiICMnaGVscC1ib29rbWFyay1qdW1wKQogICAgKD9pICJJbmZvIiAjJ0luZm8tYm9va21hcmst anVtcCkKICAgICg/cCAiUGljdHVyZSIgIydpbWFnZS1ib29rbWFyay1qdW1wKQogICAgKD9kICJE b2N2aWV3IiAjJ2RvYy12aWV3LWJvb2ttYXJrLWp1bXApCiAgICAoP20gIk1hbiIgIydNYW4tYm9v a21hcmstanVtcCkKICAgICg/dyAiV29tYW4iICMnd29tYW4tYm9va21hcmstanVtcCkKICAgICg/ ZyAiR251cyIgIydnbnVzLXN1bW1hcnktYm9va21hcmstanVtcCkpCiAgIkJvb2ttYXJrIG5hcnJv d2luZyBjb25maWd1cmF0aW9uLgoKRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0 aGUgZm9ybSAnKGNoYXIgbmFtZSBoYW5kbGVyKS4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9t IGNvbnN1bHQtY29uZmlnIG5pbAogICJDb21tYW5kIGNvbmZpZ3VyYXRpb24gYWxpc3RzLCB3aGlj aCBhbGxvd3MgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24uCgpUaGUgb3B0aW9ucyBzZXQgaGVy ZSB3aWxsIGJlIHBhc3NlZCB0byBgY29uc3VsdC0tcmVhZCcsIHdoZW4gY2FsbGVkCmZyb20gdGhl IGNvcnJlc3BvbmRpbmcgY29tbWFuZC4gTm90ZSB0aGF0IHRoZSBvcHRpb25zIGRlcGVuZCBvbiB0 aGUKcHJpdmF0ZSBgY29uc3VsdC0tcmVhZCcgQVBJIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVy ZWQgYXMgc3RhYmxlIGFzCnRoZSBwdWJsaWMgQVBJLiIKICA6dHlwZSAnKGxpc3QgKGNvbnMgc3lt Ym9sIHBsaXN0KSkpCgo7Ozs7IEZhY2VzCgooZGVmZ3JvdXAgY29uc3VsdC1mYWNlcyBuaWwKICAi RmFjZXMgdXNlZCBieSBDb25zdWx0LiIKICA6Z3JvdXAgJ2NvbnN1bHQKICA6Z3JvdXAgJ2ZhY2Vz KQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWxpbmUKICAnKCh0IDppbmhlcml0IHJlZ2lvbikp CiAgIkZhY2UgdXNlZCB0byBmb3IgbGluZSBwcmV2aWV3cy4iKQoKKGRlZmZhY2UgY29uc3VsdC1w cmV2aWV3LW1hdGNoCiAgJygodCA6aW5oZXJpdCBtYXRjaCkpCiAgIkZhY2UgdXNlZCB0byBmb3Ig bWF0Y2ggcHJldmlld3MgaW4gYGNvbnN1bHQtZ3JlcCcuIikKCihkZWZmYWNlIGNvbnN1bHQtcHJl dmlldy1jdXJzb3IKICAnKCh0IDppbmhlcml0IGNvbnN1bHQtcHJldmlldy1tYXRjaCkpCiAgIkZh Y2UgdXNlZCB0byBmb3IgY3Vyc29yIHByZXZpZXdzIGFuZCBtYXJrcyBpbiBgY29uc3VsdC1tYXJr Jy4iKQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWVycm9yCiAgJygodCA6aW5oZXJpdCBpc2Vh cmNoLWZhaWwpKQogICJGYWNlIHVzZWQgdG8gZm9yIGN1cnNvciBwcmV2aWV3cyBhbmQgbWFya3Mg aW4gYGNvbnN1bHQtZXJyb3InLiIpCgooZGVmZmFjZSBjb25zdWx0LXByZXZpZXcteWFuawogICco KHQgOmluaGVyaXQgY29uc3VsdC1wcmV2aWV3LWxpbmUpKQogICJGYWNlIHVzZWQgdG8gZm9yIHlh bmsgcHJldmlld3MgaW4gYGNvbnN1bHQteWFuaycuIikKCihkZWZmYWNlIGNvbnN1bHQtbmFycm93 LWluZGljYXRvcgogICcoKHQgOmluaGVyaXQgd2FybmluZykpCiAgIkZhY2UgdXNlZCBmb3IgdGhl IG5hcnJvd2luZyBpbmRpY2F0b3IuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5bmMtcnVubmluZwog ICcoKHQgOmluaGVyaXQgY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkKICAiRmFjZSB1c2VkIGlm IGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5 bmMtZmluaXNoZWQKICAnKCh0IDppbmhlcml0IHN1Y2Nlc3MpKQogICJGYWNlIHVzZWQgaWYgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaGFzIGZpbmlzaGVkLiIpCgooZGVmZmFjZSBjb25zdWx0LWFzeW5j LWZhaWxlZAogICcoKHQgOmluaGVyaXQgZXJyb3IpKQogICJGYWNlIHVzZWQgaWYgYXN5bmNocm9u b3VzIHByb2Nlc3MgaGFzIGZhaWxlZC4iKQoKKGRlZmZhY2UgY29uc3VsdC1hc3luYy1zcGxpdAog ICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLW5lZ2F0aW9uLWNoYXItZmFjZSkpCiAgIkZhY2UgdXNl ZCB0byBoaWdobGlnaHQgcHVuY3R1YXRpb24gY2hhcmFjdGVyLiIpCgooZGVmZmFjZSBjb25zdWx0 LWhlbHAKICAnKCh0IDppbmhlcml0IHNoYWRvdykpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQg aGVscCwgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXItc3RvcmUnLiIpCgooZGVmZmFjZSBjb25z dWx0LWtleQogICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCiAgIkZhY2Ug dXNlZCB0byBoaWdobGlnaHQga2V5cywgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXInLiIpCgoo ZGVmZmFjZSBjb25zdWx0LWltZW51LXByZWZpeAogICcoKHQgOmluaGVyaXQgY29uc3VsdC1rZXkp KQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGltZW51IHByZWZpeCBpbiBgY29uc3VsdC1pbWVu dScuIikKCihkZWZmYWNlIGNvbnN1bHQtbGluZS1udW1iZXIKICAnKCh0IDppbmhlcml0IGNvbnN1 bHQta2V5KSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBsb2NhdGlvbiBsaW5lIGluIGBjb25z dWx0LWdsb2JhbC1tYXJrJy4iKQoKKGRlZmZhY2UgY29uc3VsdC1maWxlCiAgJygodCA6aW5oZXJp dCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdo dCBmaWxlcyBpbiBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWJvb2ttYXJr CiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stY29uc3RhbnQtZmFjZSkpCiAgIkZhY2UgdXNlZCB0 byBoaWdobGlnaHQgYm9va21hcmtzIGluIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZmYWNlIGNv bnN1bHQtYnVmZmVyCiAgJygodCkpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgYnVmZmVycyBp biBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWxpbmUtbnVtYmVyLXByZWZp eAogICcoKHQgOmluaGVyaXQgbGluZS1udW1iZXIpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0 IGxpbmUgbnVtYmVycyBpbiBzZWxlY3Rpb25zLiIpCgo7OyBmYWNlIGRlZmluaXRpb24gdGFrZW4g ZnJvbSBFbWJhcmsKKGRlZmZhY2UgY29uc3VsdC16ZWJyYQogICcoKGRlZmF1bHQgOmV4dGVuZCB0 KQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkp CiAgICAgOmJhY2tncm91bmQgIiNlZmVmZWYiKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6YmFja2dyb3VuZCAiIzI0MjQyNCIpKQog ICJGYWNlIHRvIGhpZ2hsaWdodCBhbHRlcm5hdGluZyByb3dzIGluIGBjb25zdWx0LXJlZ2lzdGVy LXdpbmRvdycuIikKCjs7OzsgSGlzdG9yeSB2YXJpYWJsZXMKCihkZWZ2YXIgY29uc3VsdC0ta2Vl cC1saW5lcy1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0LS1lcnJvci1oaXN0b3J5IG5pbCkK KGRlZnZhciBjb25zdWx0LS1ncmVwLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWZpbmQt aGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbWFuLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNv bnN1bHQtLWxpbmUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5 IG5pbCkKKGRlZnZhciBjb25zdWx0LS10aGVtZS1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0 LS1taW5vci1tb2RlLW1lbnUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbW9kZS1jb21t YW5kLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWttYWNyby1oaXN0b3J5IG5pbCkKKGRl ZnZhciBjb25zdWx0LS1idWZmZXItaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0taW1lbnUt aGlzdG9yeSBuaWwpCgo7Ozs7IEludGVybmFsIHZhcmlhYmxlcwoKKGRlZnZhciBjb25zdWx0LS1j YWNoZSBuaWwKICAiQ2FjaGVkIGRhdGEgcG9wdWxhdGVkIGJ5IGBjb25zdWx0LS1kZWZpbmUtY2Fj aGUnLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sKICAobGlzdCAj J2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIpCiAgIk9idGFpbiBtYXRjaCBmdW5j dGlvbiBmcm9tIGNvbXBsZXRpb24gc3lzdGVtLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRp b24tY2FuZGlkYXRlLWhvb2sKICAobGlzdCAjJ2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1j YW5kaWRhdGUpCiAgIkdldCBjYW5kaWRhdGUgZnJvbSBjb21wbGV0aW9uIHN5c3RlbS4iKQoKKGRl ZnZhciBjb25zdWx0LS1jb21wbGV0aW9uLXJlZnJlc2gtaG9vayBuaWwKICAiUmVmcmVzaCBjb21w bGV0aW9uIHN5c3RlbS4iKQoKKGRlZnZhci1sb2NhbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9u IG5pbAogICJNaW5pYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHdoaWNoIGV4cG9zZXMgdGhlIGN1cnJl bnQgcHJldmlldyBmdW5jdGlvbi4KVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJ5IGN1c3Rv bSBjb21wbGV0aW9uIHN5c3RlbXMgZnJvbSBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLgpUaGUgcHJl dmlldyBmdW5jdGlvbiBleHBlY3RzIHR3byBhcmd1bWVudHMsIHRoZSBjdXJyZW50IGlucHV0IHN0 cmluZyBhbmQgdGhlIGNhbmRpZGF0ZSBzdHJpbmcuIikKCihkZWZjb25zdCBjb25zdWx0LS10b2Z1 LWNoYXIgI3gxMDAwMDAKICAiU3BlY2lhbCBjaGFyYWN0ZXIgdXNlZCB0byBlbmNvZGUgbGluZSBw cmVmaXhlcyBmb3IgZGlzYW1iaWd1YXRpb24uCldlIHVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m IHRoZSBwcml2YXRlIHVuaWNvZGUgcGxhbmUgYi4iKQoKKGRlZmNvbnN0IGNvbnN1bHQtLXRvZnUt cmFuZ2UgI3hGRkZFCiAgIlNwZWNpYWwgY2hhcmFjdGVyIHJhbmdlLgpTaXplIG9mIHByaXZhdGUg dW5pY29kZSBwbGFuZSBiLiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdyBuaWwKICAi Q3VycmVudCBuYXJyb3dpbmcga2V5LiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcyBuaWwKICAiTmFycm93aW5nIHByZWZpeGVzIG9mIHRoZSBjdXJyZW50IGNvbXBsZXRp b24uIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSBuaWwKICAiTmFy cm93aW5nIHByZWRpY2F0ZSBvZiB0aGUgY3VycmVudCBjb21wbGV0aW9uLiIpCgooZGVmdmFyLWxv Y2FsIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5IG5pbAogICJOYXJyb3dpbmcgaW5kaWNhdG9yIG92 ZXJsYXkuIikKCihkZWZ2YXIgY29uc3VsdC0tZ2MtdGhyZXNob2xkIDY3MTA4ODY0CiAgIkxhcmdl IGdjIHRocmVzaG9sZCBmb3IgdGVtcG9yYXJ5IGluY3JlYXNlLiIpCgooZGVmdmFyIGNvbnN1bHQt LWdjLXBlcmNlbnRhZ2UgMC41CiAgIkxhcmdlIGdjIHBlcmNlbnRhZ2UgZm9yIHRlbXBvcmFyeSBp bmNyZWFzZS4iKQoKKGRlZnZhciBjb25zdWx0LS1hc3luYy1sb2cKICAiICpjb25zdWx0LWFzeW5j LWxvZyoiCiAgIkJ1ZmZlciBmb3IgYXN5bmMgbG9nZ2luZyBvdXRwdXQgdXNlZCBieSBgY29uc3Vs dC0tYXN5bmMtcHJvY2VzcycuIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0taW1lbnUtY2FjaGUg bmlsCiAgIkJ1ZmZlciBsb2NhbCBjYWNoZWQgaW1lbnUuIikKCihkZWZjb25zdCBjb25zdWx0LS1n cmVwLXJlZ2V4cCAiXFwoW15cMFxuXStcXClcMFxcKFteOlwwXStcXClbOlwwXSIKICAiUmVnZXhw IHVzZWQgdG8gbWF0Y2ggZmlsZSBhbmQgbGluZSBvZiBncmVwIG91dHB1dC4iKQoKKGRlZmNvbnN0 IGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwICJcZVxcW1swLTk7XSttXFwoLio/XFwpXGVcXFtb MC05O10qbSIKICAiUmVnZXhwIHVzZWQgdG8gZmluZCBtYXRjaGVzIGluIGdyZXAgb3V0cHV0LiIp CgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbAogICJPdmVy bGF5cyB1c2VkIGJ5IGBjb25zdWx0LWZvY3VzLWxpbmVzJy4iKQoKOzs7OyBIZWxwZXIgZnVuY3Rp b25zIGFuZCBtYWNyb3MKCihkZWZtYWNybyBjb25zdWx0LS1taW5pYnVmZmVyLXdpdGgtc2V0dXAt aG9vayAoZnVuICZyZXN0IGJvZHkpCiAgIlZhcmlhbnQgb2YgYG1pbmlidWZmZXItd2l0aC1zZXR1 cC1ob29rJyB1c2luZyBhIHN5bWJvbCBhbmQgYGZzZXQnLgoKVGhpcyBtYWNybyBpcyBvbmx5IG5l ZWRlZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFraW5nIGlzc3VlcyB3aXRoCnRoZSB1cHN0cmVhbSBg bWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2snIG1hY3JvLgpGVU4gaXMgdGhlIGhvb2sgZnVuY3Rp b24gYW5kIEJPRFkgb3BlbnMgdGhlIG1pbmlidWZmZXIuIgogIChkZWNsYXJlIChpbmRlbnQgMSkg KGRlYnVnIHQpKQogIChsZXQgKChob29rIChtYWtlLXN5bWJvbCAiaG9vayIpKQogICAgICAgIChh cHBlbmQpKQogICAgKHdoZW4gKGVxIChjYXItc2FmZSBmdW4pIDphcHBlbmQpCiAgICAgIChzZXRx IGFwcGVuZCAnKHQpIGZ1biAoY2FkciBmdW4pKSkKICAgIGAobGV0ICgoLGhvb2sgKG1ha2Utc3lt Ym9sICJjb25zdWx0LS1taW5pYnVmZmVyLXNldHVwIikpKQogICAgICAgKGZzZXQgLGhvb2sgKGxh bWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAocmVtb3ZlLWhvb2sgJ21pbmlidWZmZXItc2V0 dXAtaG9vayAsaG9vaykKICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgLGZ1bikpKQogICAg ICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAoYWRkLWhv b2sgJ21pbmlidWZmZXItc2V0dXAtaG9vayAsaG9vayAsQGFwcGVuZCkKICAgICAgICAgICAgICxA Ym9keSkKICAgICAgICAgKHJlbW92ZS1ob29rICdtaW5pYnVmZmVyLXNldHVwLWhvb2sgLGhvb2sp KSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWRlZmluZS1jYWNoZSAobmFtZSAmcmVzdCBib2R5KQog ICJEZWZpbmUgY2FjaGVkIHZhbHVlIHdpdGggTkFNRSBhbmQgQk9EWS4iCiAgKGRlY2xhcmUgKGlu ZGVudCAxKSkKICBgKGRlZnVuICxuYW1lICgpCiAgICAgKG9yIChhbGlzdC1nZXQgJyxuYW1lIGNv bnN1bHQtLWNhY2hlKQogICAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0ICcsbmFtZSBjb25zdWx0LS1j YWNoZSkKICAgICAgICAgICAgICAgLChtYWNyb2V4cC1wcm9nbiBib2R5KSkpKSkKCihkZWZzdWJz dCBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciAoY2F0ZWdvcnkgaGlnaGxpZ2h0KQogICJSZXR1 cm4gZmlsdGVyIGZ1bmN0aW9uIHVzZWQgYnkgY29tcGxldGlvbiBzeXN0ZW0uCgpDQVRFR09SWSBp cyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4KSElHSExJR0hUIG11c3QgYmUgdCBpZiBoaWdobGln aHRpbmcgaXMgbmVlZGVkLiIKICAocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgJ2Nv bnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sgY2F0ZWdvcnkgaGlnaGxpZ2h0KSkKCihkZWZ1 biBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1jb21wbGVtZW50IChjYXRlZ29yeSkKICAiUmV0 dXJuIGNvbXBsZW1lbnQgb2YgdGhlIGZpbHRlciBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBjb21wbGV0 aW9uIHN5c3RlbS4KCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LiIKICAobGV0 ICgoZmlsdGVyIChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciBjYXRlZ29yeSBuaWwpKSkKICAg IChsYW1iZGEgKGlucHV0IGNhbmRzKQogICAgICAobGV0ICgoaHQgKGNvbnN1bHQtLXN0cmluZy1o YXNoIChmdW5jYWxsIGZpbHRlciBpbnB1dCBjYW5kcykpKSkKICAgICAgICAoc2VxLXJlbW92ZSAo bGFtYmRhICh4KSAoZ2V0aGFzaCB4IGh0KSkgY2FuZHMpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWNv bXBsZXRpb24tZmlsdGVyLWRpc3BhdGNoIChjYXRlZ29yeSBoaWdobGlnaHQpCiAgIlJldHVybiBk aXNwYXRjaGluZyBmaWx0ZXIgZnVuY3Rpb24uCgpFaXRoZXIgZGlzcGF0Y2ggdG8gYGNvbnN1bHQt LWNvbXBsZXRpb24tZmlsdGVyJyBvciB0bwpgY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXItY29t cGxlbWVudCcuCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LgpISUdITElHSFQg bXVzdCBiZSB0IGlmIGhpZ2hsaWdodGluZyBpcyBuZWVkZWQuIgogIChsZXQgKChmaWx0ZXIgKGNv bnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyIGNhdGVnb3J5IGhpZ2hsaWdodCkpCiAgICAgICAgKGZp bHRlci1ub3QgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWNvbXBsZW1lbnQgY2F0ZWdvcnkp KSkKICAgIChsYW1iZGEgKGlucHV0IGNhbmRzKQogICAgICAoY29uZAogICAgICAgKChzdHJpbmct bWF0Y2gtcCAiXiE/ID8kIiBpbnB1dCkgY2FuZHMpIDs7IGVtcHR5IGlucHV0CiAgICAgICAoKHN0 cmluZy1wcmVmaXgtcCAiISAiIGlucHV0KSAoZnVuY2FsbCBmaWx0ZXItbm90IChzdWJzdHJpbmcg aW5wdXQgMikgY2FuZHMpKQogICAgICAgKHQgKGZ1bmNhbGwgZmlsdGVyIGlucHV0IGNhbmRzKSkp KSkpCgooZGVmbWFjcm8gY29uc3VsdC0tZWFjaC1saW5lIChiZWcgZW5kICZyZXN0IGJvZHkpCiAg Ikl0ZXJhdGUgb3ZlciBlYWNoIGxpbmUuCgpUaGUgbGluZSBiZWdpbm5pbmcvZW5kaW5nIEJFRy9F TkQgaXMgYm91bmQgaW4gQk9EWS4iCiAgKGRlY2xhcmUgKGluZGVudCAyKSkKICAobGV0ICgobWF4 IChtYWtlLXN5bWJvbCAibWF4IikpKQogICAgYChzYXZlLWV4Y3Vyc2lvbgogICAgICAgKGxldCAo KCxiZWcgKHBvaW50LW1pbikpICgsbWF4IChwb2ludC1tYXgpKSBlbmQpCiAgICAgICAgICh3aGls ZSAoPCAsYmVnICxtYXgpCiAgICAgICAgICAgKGdvdG8tY2hhciAsYmVnKQogICAgICAgICAgIChz ZXRxICxlbmQgKGxpbmUtZW5kLXBvc2l0aW9uKSkKICAgICAgICAgICAsQGJvZHkKICAgICAgICAg ICAoc2V0cSAsYmVnICgxKyAsZW5kKSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXN0cmluZy1oYXNo IChzdHJpbmdzKQogICJDcmVhdGUgaGFzaHRhYmxlIGZyb20gU1RSSU5HUy4iCiAgKGxldCAoKGh0 IChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCA6c2l6ZSAobGVuZ3RoIHN0cmluZ3MpKSkp CiAgICAoZG9saXN0IChzdHIgc3RyaW5ncykKICAgICAgKHB1dGhhc2ggc3RyIHQgaHQpKQogICAg aHQpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWxvY2FsLWxldCAoYmluZHMgJnJlc3QgYm9keSkKICAi QnVmZmVyIGxvY2FsIGxldCBCSU5EUyBvZiBkeW5hbWljIHZhcmlhYmxlcyBpbiBCT0RZLiIKICAo ZGVjbGFyZSAoaW5kZW50IDEpKQogIChsZXQgKChidWZmZXIgKG1ha2Utc3ltYm9sICJidWZmZXIi KSkKICAgICAgICAobG9jYWwgKG1hcGNhciAobGFtYmRhICh4KSAoY29ucyAobWFrZS1zeW1ib2wg ImxvY2FsIikgKGNhciB4KSkpIGJpbmRzKSkpCiAgICBgKGxldCAoKCxidWZmZXIgKGN1cnJlbnQt YnVmZmVyKSkKICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkgYCgsKGNhciB4KSAobG9j YWwtdmFyaWFibGUtcCAnLChjZHIgeCkpKSkgbG9jYWwpKQogICAgICAgKHVud2luZC1wcm90ZWN0 CiAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkgYCht YWtlLWxvY2FsLXZhcmlhYmxlICcsKGNhciB4KSkpIGJpbmRzKQogICAgICAgICAgICAgKGxldCAo LEBiaW5kcykKICAgICAgICAgICAgICAgLEBib2R5KSkKICAgICAgICAgKHdoZW4gKGJ1ZmZlci1s aXZlLXAgLGJ1ZmZlcikKICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAsYnVmZmVyCiAg ICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgICAg IGAodW5sZXNzICwoY2FyIHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2lsbC1sb2Nh bC12YXJpYWJsZSAnLChjZHIgeCkpKSkKICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCkpKSkp KSkKCihkZWZ1biBjb25zdWx0LS1yZWdleHAtZmlsdGVyIChyZWdleHBzKQogICJDcmVhdGUgZmls dGVyIHJlZ2V4cCBmcm9tIFJFR0VYUFMuIgogIChzdHJpbmctam9pbiAobWFwY2FyIChsYW1iZGEg KHgpIChjb25jYXQgIlxcKD86IiB4ICJcXCkiKSkgcmVnZXhwcykgIlxcfCIpKQoKKGRlZnVuIGNv bnN1bHQtLWZvbnQtbG9jayAoc3RyKQogICJBcHBseSBgZm9udC1sb2NrJyBmYWNlcyBpbiBTVFIs IGNvcHkgdGhlbSB0byBgZmFjZScuIgogIChsZXQgKChwb3MgMCkgKGxlbiAobGVuZ3RoIHN0cikp KQogICAgKHdoaWxlICg8IHBvcyBsZW4pCiAgICAgIChsZXQqICgoZmFjZSAoZ2V0LXRleHQtcHJv cGVydHkgcG9zICdmb250LWxvY2stZmFjZSBzdHIpKQogICAgICAgICAgICAgKGVuZCAob3IgKHRl eHQtcHJvcGVydHktbm90LWFsbCBwb3MgbGVuICdmb250LWxvY2stZmFjZSBmYWNlIHN0cikgbGVu KSkpCiAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IHBvcyBlbmQgJ2ZhY2UgZmFjZSBzdHIpCiAg ICAgICAgKHNldHEgcG9zIGVuZCkpKQogICAgc3RyKSkKCihkZWZ1biBjb25zdWx0LS1mb3JtYXQt ZGlyZWN0b3J5LXByb21wdCAocHJvbXB0IGRpcikKICAiRm9ybWF0IFBST01QVCwgZXhwYW5kIGRp cmVjdG9yeSBESVIgYW5kIHJldHVybiB0aGVtIGFzIGEgcGFpci4iCiAgKHNhdmUtbWF0Y2gtZGF0 YQogICAgKGxldCAoKGVkaXIgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgKGV4cGFuZC1maWxlLW5h bWUgZGlyKSkpCiAgICAgICAgICAoZGRpciAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSAoZXhwYW5k LWZpbGUtbmFtZSBkZWZhdWx0LWRpcmVjdG9yeSkpKSkKICAgICAgKGNvbnMKICAgICAgIChpZiAo c3RyaW5nPSBkZGlyIGVkaXIpCiAgICAgICAgICAgKGNvbmNhdCBwcm9tcHQgIjogIikKICAgICAg ICAgKGxldCAoKGFkaXIgKGFiYnJldmlhdGUtZmlsZS1uYW1lIGVkaXIpKSkKICAgICAgICAgICAo aWYgKHN0cmluZy1tYXRjaCAiL1xcKFteL10rXFwpL1xcKFteL10rXFwpLyQiIGFkaXIpCiAgICAg ICAgICAgICAgIChmb3JtYXQgIiVzIGluIOKApi8lcy8lcy86ICIgcHJvbXB0CiAgICAgICAgICAg ICAgICAgICAgICAgKG1hdGNoLXN0cmluZyAxIGFkaXIpIChtYXRjaC1zdHJpbmcgMiBhZGlyKSkK ICAgICAgICAgICAgIChmb3JtYXQgIiVzIGluICVzOiAiIHByb21wdCBhZGlyKSkpKQogICAgICAg ZWRpcikpKSkKCihkZWZ1biBjb25zdWx0LS1kaXJlY3RvcnktcHJvbXB0IChwcm9tcHQgZGlyKQog ICJSZXR1cm4gcHJvbXB0IGFuZCBkaXJlY3RvcnkuCgpQUk9NUFQgaXMgdGhlIHByb21wdCBwcmVm aXguIFRoZSBkaXJlY3RvcnkKaXMgYXBwZW5kZWQgdG8gdGhlIHByb21wdCBwcmVmaXguIEZvciBw cm9qZWN0cwpvbmx5IHRoZSBwcm9qZWN0IG5hbWUgaXMgc2hvd24uIFRoZSBgZGVmYXVsdC1kaXJl Y3RvcnknCmlzIG5vdCBzaG93bi4gT3RoZXIgZGlyZWN0b3JpZXMgYXJlIGFiYnJldmlhdGVkIGFu ZApvbmx5IHRoZSBsYXN0IHR3byBwYXRoIGNvbXBvbmVudHMgYXJlIHNob3duLgoKSWYgRElSIGlz IGEgc3RyaW5nLCBpdCBpcyByZXR1cm5lZC4KSWYgRElSIGlzIGEgdHJ1ZSB2YWx1ZSwgdGhlIHVz ZXIgaXMgYXNrZWQuClRoZW4gdGhlIGBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbicgaXMg dHJpZWQuCk90aGVyd2lzZSB0aGUgYGRlZmF1bHQtZGlyZWN0b3J5JyBpcyByZXR1cm5lZC4iCiAg KGNvbmQKICAgKChzdHJpbmdwIGRpcikgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0 IHByb21wdCBkaXIpKQogICAoZGlyIChjb25zdWx0LS1mb3JtYXQtZGlyZWN0b3J5LXByb21wdCBw cm9tcHQgKHJlYWQtZGlyZWN0b3J5LW5hbWUgIkRpcmVjdG9yeTogIiBuaWwgbmlsIHQpKSkKICAg KCh3aGVuLWxldCAocm9vdCAoYW5kIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uCiAgICAg ICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlv bikpKQogICAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIi9c XChbXi9dK1xcKS8kIiByb290KQogICAgICAgICAgICAoY29ucyAoZm9ybWF0ICIlcyBpbiBwcm9q ZWN0ICVzOiAiIHByb21wdCAobWF0Y2gtc3RyaW5nIDEgcm9vdCkpIHJvb3QpCiAgICAgICAgICAo Y29uc3VsdC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgcHJvbXB0IHJvb3QpKSkpKQogICAodCAo Y29uc3VsdC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgcHJvbXB0IGRlZmF1bHQtZGlyZWN0b3J5 KSkpKQoKKGRlZnN1YnN0IGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIChzdHIpCiAgIlN0cmlw IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIFNUUi4iCiAgKHJlcGxhY2UtcmVnZXhwLWluLXN0 cmluZyAiXGVcXFtbMC05O10qW21LXSIgIiIgc3RyKSkKCihkZWZzdWJzdCBjb25zdWx0LS1mb3Jt YXQtbG9jYXRpb24gKGZpbGUgbGluZSkKICAiRm9ybWF0IGxvY2F0aW9uIHN0cmluZyAnRklMRTpM SU5FOicuIgogIChjb25jYXQKICAgKHByb3BlcnRpemUgZmlsZSAnZmFjZSAnY29uc3VsdC1maWxl KSAiOiIKICAgKHByb3BlcnRpemUgKG51bWJlci10by1zdHJpbmcgbGluZSkgJ2ZhY2UgJ2NvbnN1 bHQtbGluZS1udW1iZXIpICI6IikpCgooZGVmdW4gY29uc3VsdC0tbGluZS1wb3NpdGlvbiAobGlu ZSkKICAiQ29tcHV0ZSBjaGFyYWN0ZXIgcG9zaXRpb24gZnJvbSBMSU5FIG51bWJlci4iCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAod2hlbiBjb25zdWx0LWxp bmUtbnVtYmVycy13aWRlbgogICAgICAgICh3aWRlbikpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAgIChmb3J3YXJkLWxpbmUgKC0gbGluZSAxKSkKICAgICAgKHBvaW50KSkpKQoK KGRlZm1hY3JvIGNvbnN1bHQtLW92ZXJsYXkgKGJlZyBlbmQgJnJlc3QgcHJvcHMpCiAgIk1ha2Ug Y29uc3VsdCBvdmVybGF5IGJldHdlZW4gQkVHIGFuZCBFTkQgd2l0aCBQUk9QUy4iCiAgKGxldCAo KG92IChtYWtlLXN5bWJvbCAib3YiKSkKICAgICAgICAocHV0cykpCiAgICAod2hpbGUgcHJvcHMK ICAgICAgKHB1c2ggYChvdmVybGF5LXB1dCAsb3YgLChjYXIgcHJvcHMpICwoY2FkciBwcm9wcykp IHB1dHMpCiAgICAgIChzZXRxIHByb3BzIChjZGRyIHByb3BzKSkpCiAgICBgKGxldCAoKCxvdiAo bWFrZS1vdmVybGF5ICxiZWcgLGVuZCkpKQogICAgICAgLEBwdXRzCiAgICAgICAsb3YpKSkKCihk ZWZ1biBjb25zdWx0LS1yZW1vdmUtZHVwcyAobGlzdCAmb3B0aW9uYWwga2V5KQogICJSZW1vdmUg ZHVwbGljYXRlIHN0cmluZ3MgZnJvbSBMSVNULiBLZWVwIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBr ZXkuCgpLRVkgaXMgdGhlIGtleSBmdW5jdGlvbi4iCiAgKGxldCAoKGh0IChtYWtlLWhhc2gtdGFi bGUgOnRlc3QgIydlcXVhbCA6c2l6ZSAobGVuZ3RoIGxpc3QpKSkKICAgICAgICAoYWNjdW0pCiAg ICAgICAgKGtleSAob3Iga2V5ICMnaWRlbnRpdHkpKSkKICAgIChkb2xpc3QgKGVudHJ5IGxpc3Qg KG5yZXZlcnNlIGFjY3VtKSkKICAgICAgKGxldCAoKGsgKGZ1bmNhbGwga2V5IGVudHJ5KSkpCiAg ICAgICAgKHVubGVzcyAoZ2V0aGFzaCBrIGh0KQogICAgICAgICAgKHB1dGhhc2ggayB0IGh0KQog ICAgICAgICAgKHB1c2ggZW50cnkgYWNjdW0pKSkpKSkKCihkZWZzdWJzdCBjb25zdWx0LS1pbi1y YW5nZS1wIChwb3MpCiAgIlJldHVybiB0IGlmIHBvc2l0aW9uIFBPUyBsaWVzIGluIHJhbmdlIGBw b2ludC1taW4nIHRvIGBwb2ludC1tYXgnLiIKICAoPD0gKHBvaW50LW1pbikgcG9zIChwb2ludC1t YXgpKSkKCihkZWZ1biBjb25zdWx0LS1nZXQtYW5ub3RhdGlvbiAoY2FuZCkKICAiUmV0dXJuICdj b25zdWx0LS1hbm5vdGF0aW9uIHByb3BlcnR5IGZyb20gQ0FORC4iCiAgKGdldC10ZXh0LXByb3Bl cnR5IDAgJ2NvbnN1bHQtLWFubm90YXRpb24gY2FuZCkpCgooZGVmdW4gY29uc3VsdC0tbG9va3Vw LWVsZW0gKF8gY2FuZGlkYXRlcyBjYW5kKQogICJMb29rdXAgQ0FORCBpbiBDQU5ESURBVEVTIGFs aXN0LCByZXR1cm4gZWxlbWVudC4iCiAgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykpCgooZGVmdW4g Y29uc3VsdC0tbG9va3VwLWNkciAoXyBjYW5kaWRhdGVzIGNhbmQpCiAgIkxvb2t1cCBDQU5EIGlu IENBTkRJREFURVMgYWxpc3QsIHJldHVybiBjZHIgb2YgZWxlbWVudC4iCiAgKGNkciAoYXNzb2Mg Y2FuZCBjYW5kaWRhdGVzKSkpCgooZGVmdW4gY29uc3VsdC0tbG9va3VwLWNhZHIgKF8gY2FuZGlk YXRlcyBjYW5kKQogICJMb29rdXAgQ0FORCBpbiBDQU5ESURBVEVTIGFsaXN0LCByZXR1cm4gY2Fk ciBvZiBlbGVtZW50LiIKICAoY2FkciAoYXNzb2MgY2FuZCBjYW5kaWRhdGVzKSkpCgooZGVmdW4g Y29uc3VsdC0tbG9va3VwLWxvY2F0aW9uIChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENB TkQgaW4gQ0FORElEQVRFUyBsaXN0IG9mICdjb25zdWx0LWxvY2F0aW9uIGNhdGVnb3J5LCByZXR1 cm4gdGhlIG1hcmtlci4iCiAgKHdoZW4tbGV0IChmb3VuZCAobWVtYmVyIGNhbmQgY2FuZGlkYXRl cykpCiAgICAoY2FyIChnZXQtdGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LWxvY2F0aW9uIChjYXIg Zm91bmQpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyICgpCiAgIlJhaXNl IGFuIGVycm9yIGlmIGV4ZWN1dGVkIGZyb20gdGhlIG1pbmlidWZmZXIuIgogICh3aGVuIChtaW5p YnVmZmVycCkKICAgICh1c2VyLWVycm9yICJgJXMnIGNhbGxlZCBpbnNpZGUgdGhlIG1pbmlidWZm ZXIiIHRoaXMtY29tbWFuZCkpKQoKKGRlZnVuIGNvbnN1bHQtLXJlcXVpcmUtbWluaWJ1ZmZlciAo KQogICJSYWlzZSBhbiBlcnJvciBpZiBleGVjdXRlZCBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLiIK ICAodW5sZXNzIChtaW5pYnVmZmVycCkKICAgICh1c2VyLWVycm9yICJgJXMnIG11c3QgYmUgY2Fs bGVkIGluc2lkZSB0aGUgbWluaWJ1ZmZlciIgdGhpcy1jb21tYW5kKSkpCgooZGVmdW4gY29uc3Vs dC0tZm9udGlmeS1hbGwgKCkKICAiRW5zdXJlIHRoYXQgdGhlIHdob2xlIGJ1ZmZlciBpcyBmb250 aWZpZWQuIgogIDs7IEZvbnQtbG9ja2luZyBpcyBsYXp5LCBpLmUuLCBpZiBhIGxpbmUgaGFzIG5v dCBiZWVuIGxvb2tlZCBhdCB5ZXQsIHRoZSBsaW5lCiAgOzsgaXMgbm90IGZvbnQtbG9ja2VkLiBX ZSB3b3VsZCBvYnNlcnZlIHRoaXMgaWYgY29uc3VsdGluZyBhbiB1bmZvbnRpZmllZAogIDs7IGxp bmUuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGVuZm9yY2UgZm9udC1sb2NraW5nIG5vdywgd2hpY2gg aXMgc2xvdy4gSW4KICA7OyBvcmRlciB0byBwcmV2ZW50IGlzIGhhbmctdXAgd2UgY2hlY2sgdGhl IGJ1ZmZlciBzaXplIGFnYWluc3QKICA7OyBgY29uc3VsdC1mb250aWZ5LW1heC1zaXplJy4KICAo d2hlbiAoYW5kIGppdC1sb2NrLW1vZGUgKDwgKGJ1ZmZlci1zaXplKSBjb25zdWx0LWZvbnRpZnkt bWF4LXNpemUpKQogICAgKGppdC1sb2NrLWZvbnRpZnktbm93KSkpCgooZGVmc3Vic3QgY29uc3Vs dC0tZm9udGlmeS1yZWdpb24gKHN0YXJ0IGVuZCkKICAiRW5zdXJlIHRoYXQgcmVnaW9uIGJldHdl ZW4gU1RBUlQgYW5kIEVORCBpcyBmb250aWZpZWQuIgogICh3aGVuIGppdC1sb2NrLW1vZGUKICAg IChqaXQtbG9jay1mb250aWZ5LW5vdyBzdGFydCBlbmQpKSkKCihkZWZ1biBjb25zdWx0LS1kZWZp bmUta2V5IChtYXAga2V5IGNtZCBkZXNjKQogICJCaW5kIENNRCB0byBLRVkgaW4gTUFQIGFuZCBh ZGQgd2hpY2gta2V5IGRlc2NyaXB0aW9uIERFU0MuIgogIChkZWZpbmUta2V5IG1hcCBrZXkgY21k KQogIDs7IFRoZSB3aGljaC1rZXkgZGVzY3JpcHRpb24gaXMgcG90ZW50aWFsbHkgZnJhZ2lsZSBp ZiBzb21ldGhpbmcgaXMgY2hhbmdlZCBvbiB0aGUgc2lkZQogIDs7IG9mIHdoaWNoLWtleS4gS2Vl cCBhbiBleWUgb24gdGhhdC4gQW4gYWx0ZXJuYXRpdmUgbW9yZSBzdGFuZGFyZC1jb21wbGlhbnQg bWV0aG9kCiAgOzsgd291bGQgYmUgdG8gdXNlIGBtZW51LWl0ZW0nLCBidXQgdGhpcyBpcyB1bmZv cnR1bmF0ZWx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHdoaWNoLWtleQogIDs7IGFuZCBgZGVzY3Jp YmUtYnVmZmVyLWJpbmRpbmdzJy4KICA7OyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RidXIv ZW1hY3Mtd2hpY2gta2V5L2lzc3Vlcy8xNzcKICAobGV0ICgoaWR4ICgtIChsZW5ndGgga2V5KSAx KSkpCiAgICAoZGVmaW5lLWtleSBtYXAgKHZjb25jYXQgKHNlcS10YWtlIGtleSBpZHgpICh2ZWN0 b3IgJ3doaWNoLWtleSAoZWx0IGtleSBpZHgpKSkKICAgICAgYCh3aGljaC1rZXkgKCwoY29weS1z ZXF1ZW5jZSBkZXNjKSkpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2Mg KCZyZXN0IGJvZHkpCiAgIlRlbXBvcmFyaWx5IGluY3JlYXNlIHRoZSBnYyBsaW1pdCBpbiBCT0RZ IHRvIG9wdGltaXplIGZvciB0aHJvdWdocHV0LiIKICBgKGxldCogKChvdmVyd3JpdGUgKD4gY29u c3VsdC0tZ2MtdGhyZXNob2xkIGdjLWNvbnMtdGhyZXNob2xkKSkKICAgICAgICAgIChnYy1jb25z LXRocmVzaG9sZCAoaWYgb3ZlcndyaXRlIGNvbnN1bHQtLWdjLXRocmVzaG9sZCBnYy1jb25zLXRo cmVzaG9sZCkpCiAgICAgICAgICAoZ2MtY29ucy1wZXJjZW50YWdlIChpZiBvdmVyd3JpdGUgY29u c3VsdC0tZ2MtcGVyY2VudGFnZSBnYy1jb25zLXBlcmNlbnRhZ2UpKSkKICAgICAsQGJvZHkpKQoK KGRlZnVuIGNvbnN1bHQtLWNvdW50LWxpbmVzIChwb3MpCiAgIk1vdmUgdG8gcG9zaXRpb24gUE9T IGFuZCByZXR1cm4gbnVtYmVyIG9mIGxpbmVzLiIKICAobGV0ICgobGluZSAwKSkKICAgICh3aGls ZSAoPCAocG9pbnQpIHBvcykKICAgICAgKGZvcndhcmQtbGluZSkKICAgICAgKHdoZW4gKDw9IChw b2ludCkgcG9zKQogICAgICAgIChzZXRxIGxpbmUgKDErIGxpbmUpKSkpCiAgICAoZ290by1jaGFy IHBvcykKICAgIGxpbmUpKQoKOzsgV2UgbXVzdCBkaXNhbWJpZ3VhdGUgdGhlIGxpbmVzIGJ5IGFk ZGluZyBhIHByZWZpeCBzdWNoIHRoYXQgdHdvIGxpbmVzIHdpdGgKOzsgdGhlIHNhbWUgdGV4dCBj YW4gYmUgZGlzdGluZ3Vpc2hlZC4gSW4gb3JkZXIgdG8gYXZvaWQgbWF0Y2hpbmcgdGhlIGxpbmUK OzsgbnVtYmVyLCBzdWNoIHRoYXQgdGhlIHVzZXIgY2FuIHNlYXJjaCBmb3IgbnVtYmVycyB3aXRo IGBjb25zdWx0LWxpbmUnLCB3ZQo7OyBlbmNvZGUgdGhlIGxpbmUgbnVtYmVyIGFzIHVuaWNvZGUg Y2hhcmFjdGVycyBpbiB0aGUgc3VwcGxlbWVudGFyeSBwcml2YXRlIHVzZQo7OyBwbGFuZSBiLiBC eSBkb2luZyB0aGF0LCBpdCBpcyB1bmxpa2VseSB0aGF0IGFjY2lkZW50aWFsIG1hdGNoaW5nIG9j Y3Vycy4KKGRlZnN1YnN0IGNvbnN1bHQtLWVuY29kZS1sb2NhdGlvbiAobWFya2VyKQogICJHZW5l cmF0ZSB1bmlxdWUgc3RyaW5nIGZvciBNQVJLRVIuCkRJU1BMQVkgaXMgdGhlIHN0cmluZyB0byBk aXNwbGF5IGluc3RlYWQgb2YgdGhlIHVuaXF1ZSBzdHJpbmcuIgogIChsZXQgKChzdHIgIiIpIChu IG1hcmtlcikpCiAgICAod2hpbGUgKHByb2duCiAgICAgICAgICAgICAoc2V0cSBzdHIgKGNvbmNh dCBzdHIgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRvZnUtY2hhcgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJSBuIGNvbnN1bHQtLXRv ZnUtcmFuZ2UpKSkpKQogICAgICAgICAgICAgKGFuZCAoPj0gbiBjb25zdWx0LS10b2Z1LXJhbmdl KSAoc2V0cSBuICgvIG4gY29uc3VsdC0tdG9mdS1yYW5nZSkpKSkpCiAgICBzdHIpKQoKKGRlZnN1 YnN0IGNvbnN1bHQtLWxpbmUtbnVtYmVyLXByZWZpeCAobWFya2VyIGxpbmUgd2lkdGgpCiAgIkZv cm1hdCBMSU5FIG51bWJlciBwcmVmaXggbnVtYmVyIHdpdGggcGFkZGluZy4KCk1BUktFUiBhbmQg TElORSBhcmUgYWRkZWQgYXMgJ2NvbnN1bHQtbG9jYXRpb24gdGV4dCBwcm9wZXJ0eS4KV0lEVEgg aXMgdGhlIGxpbmUgbnVtYmVyIHdpZHRoLiIKICAobGV0KiAoKHVuaXF1ZS1zdHIgKGNvbnN1bHQt LWVuY29kZS1sb2NhdGlvbiBtYXJrZXIpKQogICAgICAgICAobGluZS1zdHIgKG51bWJlci10by1z dHJpbmcgbGluZSkpCiAgICAgICAgIChwcmVmaXgtc3RyIChjb25jYXQKICAgICAgICAgICAgICAg ICAgICAgIChtYWtlLXN0cmluZyAoLSB3aWR0aCAobGVuZ3RoIGxpbmUtc3RyKSkgMzIpCiAgICAg ICAgICAgICAgICAgICAgICBsaW5lLXN0cgogICAgICAgICAgICAgICAgICAgICAgIiAiKSkpCiAg ICAocHV0LXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHByZWZpeC1zdHIpICdmYWNlICdjb25zdWx0 LWxpbmUtbnVtYmVyLXByZWZpeCBwcmVmaXgtc3RyKQogICAgKGFkZC10ZXh0LXByb3BlcnRpZXMg MCAobGVuZ3RoIHVuaXF1ZS1zdHIpCiAgICAgICAgICAgICAgICAgICAgICAgICBgKGRpc3BsYXkg LHByZWZpeC1zdHIgY29uc3VsdC1sb2NhdGlvbiAoLG1hcmtlciAuICxsaW5lKSkKICAgICAgICAg ICAgICAgICAgICAgICAgIHVuaXF1ZS1zdHIpCiAgICB1bmlxdWUtc3RyKSkKCihkZWZ1biBjb25z dWx0LS1hZGQtbGluZS1udW1iZXIgKG1heC1saW5lIGNhbmRpZGF0ZXMpCiAgIkFkZCBsaW5lIG51 bWJlcnMgdG8gdW5mb3JtYXR0ZWQgQ0FORElEQVRFUyBhcyBwcmVmaXguClRoZSBNQVgtTElORSBp cyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB3aWR0aC4KU2luY2UgdGhlIGxpbmUgbnVtYmVyIGlz IHBhcnQgb2YgdGhlIGNhbmRpZGF0ZSBpdCB3aWxsIGJlIG1hdGNoZWQtb24gZHVyaW5nIGNvbXBs ZXRpb24uIgogIChsZXQgKCh3aWR0aCAobGVuZ3RoIChudW1iZXItdG8tc3RyaW5nIG1heC1saW5l KSkpKQogICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCxtYXJrZXIgLGxpbmUgLHN0cikpCiAg ICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAoY29uc3VsdC0tbGluZS1udW1iZXIt cHJlZml4IG1hcmtlciBsaW5lIHdpZHRoKQogICAgICAgICAgICAgICBzdHIpKQogICAgICAgICAg ICBjYW5kaWRhdGVzKSkpCgooZGVmc3Vic3QgY29uc3VsdC0tcmVnaW9uLXdpdGgtY3Vyc29yIChi ZWdpbiBlbmQgbWFya2VyKQogICJSZXR1cm4gcmVnaW9uIHN0cmluZyB3aXRoIGEgbWFya2luZyBh dCB0aGUgY3Vyc29yIHBvc2l0aW9uLgoKQkVHSU4gaXMgdGhlIGJlZ2luIHBvc2l0aW9uLgpFTkQg aXMgdGhlIGVuZCBwb3NpdGlvbi4KTUFSS0VSIGlzIHRoZSBjdXJzb3IgcG9zaXRpb24uIgogIChs ZXQgKChzdHIgKGJ1ZmZlci1zdWJzdHJpbmcgYmVnaW4gZW5kKSkpCiAgICAoaWYgKD49IG1hcmtl ciBlbmQpCiAgICAgICAgKGNvbmNhdCBzdHIgKHByb3BlcnRpemUgIiAiICdmYWNlICdjb25zdWx0 LXByZXZpZXctY3Vyc29yKSkKICAgICAgKHB1dC10ZXh0LXByb3BlcnR5ICgtIG1hcmtlciBiZWdp bikgKC0gKDErIG1hcmtlcikgYmVnaW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAn Y29uc3VsdC1wcmV2aWV3LWN1cnNvciBzdHIpCiAgICAgIHN0cikpKQoKKGRlZnN1YnN0IGNvbnN1 bHQtLWxpbmUtd2l0aC1jdXJzb3IgKG1hcmtlcikKICAiUmV0dXJuIGN1cnJlbnQgbGluZSB3aGVy ZSB0aGUgY3Vyc29yIE1BUktFUiBpcyBoaWdobGlnaHRlZC4iCiAgKGNvbnN1bHQtLXJlZ2lvbi13 aXRoLWN1cnNvcgogICAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCiAgIChsaW5lLWVuZC1wb3Np dGlvbikKICAgbWFya2VyKSkKCihkZWZ1biBjb25zdWx0LS1tZXJnZS1jb25maWcgKGFyZ3MpCiAg Ik1lcmdlIGBjb25zdWx0LWNvbmZpZycgcGxpc3RzIGludG8gdGhlIGtleXdvcmQgYXJndW1lbnRz IG9mIEFSR1MuIgogIChpZi1sZXQgKGNvbmZpZyAoYWxpc3QtZ2V0IHRoaXMtY29tbWFuZCBjb25z dWx0LWNvbmZpZykpCiAgICAgIChhcHBlbmQgKHNlcS10YWtlLXdoaWxlIChsYW1iZGEgKHgpIChu b3QgKGtleXdvcmRwIHgpKSkgYXJncykgY29uZmlnCiAgICAgICAgICAgICAgKHNlcS1jb3B5IChz ZXEtZHJvcC13aGlsZSAobGFtYmRhICh4KSAobm90IChrZXl3b3JkcCB4KSkpIGFyZ3MpKSkKICAg IGFyZ3MpKQoKOzs7OyBQcmV2aWV3IHN1cHBvcnQKCihkZWZ1biBjb25zdWx0LS1raWxsLWNsZWFu LWJ1ZmZlciAoYnVmKQogICJLaWxsIEJVRiBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQuIgog ICh1bmxlc3MgKG9yIChlcSBidWYgKGN1cnJlbnQtYnVmZmVyKSkgKGJ1ZmZlci1tb2RpZmllZC1w IGJ1ZikpCiAgICAoa2lsbC1idWZmZXIgYnVmKSkpCgooZGVmdW4gY29uc3VsdC0tZmlsZS1wcmV2 aWV3LXNldHVwICgpCiAgIlJldHVybiBhIGZ1bmN0aW9uIHRvIG9wZW4gZmlsZXMgdGVtcG9yYXJp bHkuIgogIChsZXQqICgobmV3LWJ1ZmZlcnMpCiAgICAgICAgIChyZWNlbnRmLXNob3VsZC1yZXN0 b3JlIHJlY2VudGYtbW9kZSkKICAgICAgICAgKHJlY2VudGYtc2F2ZWQtbGlzdCAod2hlbiByZWNl bnRmLXNob3VsZC1yZXN0b3JlIChjb3B5LXNlcXVlbmNlIHJlY2VudGYtbGlzdCkpKSkKICAgIChs YW1iZGEgKCZvcHRpb25hbCBuYW1lKQogICAgICAoaWYgKG5vdCBuYW1lKQogICAgICAgICAgKHdo ZW4gcmVjZW50Zi1zaG91bGQtcmVzdG9yZQogICAgICAgICAgICAoc2V0cSByZWNlbnRmLWxpc3Qg cmVjZW50Zi1zYXZlZC1saXN0KQogICAgICAgICAgICAod2hlbiAobWVtYmVyIChjdXJyZW50LWJ1 ZmZlcikgbmV3LWJ1ZmZlcnMpCiAgICAgICAgICAgICAgKHJlY2VudGYtYWRkLWZpbGUgKGJ1ZmZl ci1maWxlLW5hbWUgKGN1cnJlbnQtYnVmZmVyKSkpKSkKICAgICAgICAob3IgKGdldC1maWxlLWJ1 ZmZlciBuYW1lKQogICAgICAgICAgICAod2hlbi1sZXQgKGF0dHJzIChmaWxlLWF0dHJpYnV0ZXMg bmFtZSkpCiAgICAgICAgICAgICAgKGlmICg+IChmaWxlLWF0dHJpYnV0ZS1zaXplIGF0dHJzKSBj b25zdWx0LXByZXZpZXctbWF4LXNpemUpCiAgICAgICAgICAgICAgICAgIChhbmQgKG1pbmlidWZm ZXItbWVzc2FnZSAiRmlsZSBgJXMnIHRvbyBsYXJnZSBmb3IgcHJldmlldyIgbmFtZSkgbmlsKQog ICAgICAgICAgICAgICAgKGxldCAoKGJ1ZiAoZmluZC1maWxlLW5vc2VsZWN0IG5hbWUgJ25vd2Fy bikpKQogICAgICAgICAgICAgICAgICAocHVzaCBidWYgbmV3LWJ1ZmZlcnMpCiAgICAgICAgICAg ICAgICAgIDs7IE9ubHkga2VlcCBhIGZldyBidWZmZXJzIGFsaXZlCiAgICAgICAgICAgICAgICAg ICh3aGlsZSAoPiAobGVuZ3RoIG5ldy1idWZmZXJzKSBjb25zdWx0LXByZXZpZXctbWF4LWNvdW50 KQogICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1raWxsLWNsZWFuLWJ1ZmZlciAoY2FyIChs YXN0IG5ldy1idWZmZXJzKSkpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgbmV3LWJ1ZmZlcnMg KG5idXRsYXN0IG5ldy1idWZmZXJzKSkpCiAgICAgICAgICAgICAgICAgIGJ1ZikpKSkpKSkpCgoo ZGVmbWFjcm8gY29uc3VsdC0td2l0aC1maWxlLXByZXZpZXcgKGFyZ3MgJnJlc3QgYm9keSkKICAi UHJvdmlkZSBhIGZ1bmN0aW9uIHRvIG9wZW4gZmlsZXMgdGVtcG9yYXJpbHkuClRoZSBmaWxlcyBh cmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGVuZC4KCkFSR1MgaXMgdGhlIG9wZW4gZnVu Y3Rpb24gYXJndW1lbnQgZm9yIEJPRFkuIgogIChkZWNsYXJlIChpbmRlbnQgMSkpCiAgYChsZXQg KCgsQGFyZ3MgKGNvbnN1bHQtLWZpbGUtcHJldmlldy1zZXR1cCkpKQogICAgICh1bndpbmQtcHJv dGVjdAogICAgICAgICAsKG1hY3JvZXhwLXByb2duIGJvZHkpCiAgICAgICAoZnVuY2FsbCAsQGFy Z3MpKSkpCgo7OyBEZXJpdmVkIGZyb20gY3RybGYsIG9yaWdpbmFsbHkgaXNlYXJjaAooZGVmdW4g Y29uc3VsdC0taW52aXNpYmxlLXNob3cgKCZvcHRpb25hbCBwZXJtYW5lbnRseSkKICAiRGlzYWJs ZSBhbnkgb3ZlcmxheXMgdGhhdCBhcmUgY3VycmVudGx5IGhpZGluZyBwb2ludC4KUEVSTUFORU5U TFkgbm9uLW5pbCBtZWFucyB0aGUgb3ZlcmxheXMgd2lsbCBub3QgYmUgcmVzdG9yZWQgbGF0ZXIu IgogIChsZXQgKChvcGVuZWQpKQogICAgKGRvbGlzdCAob3YgKG92ZXJsYXlzLWluIChsaW5lLWJl Z2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKSkgb3BlbmVkKQogICAgICAod2hl biAoYW5kIChpbnZpc2libGUtcCAob3ZlcmxheS1nZXQgb3YgJ2ludmlzaWJsZSkpCiAgICAgICAg ICAgICAgICAgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLW9wZW4taW52aXNpYmxlKSkKICAgICAg ICAoaWYgcGVybWFuZW50bHkKICAgICAgICAgICAgKGZ1bmNhbGwgKG92ZXJsYXktZ2V0IG92ICdp c2VhcmNoLW9wZW4taW52aXNpYmxlKSBvdikKICAgICAgICAgIChwdXNoIChjb25zIG92IChvdmVy bGF5LWdldCBvdiAnaW52aXNpYmxlKSkgb3BlbmVkKQogICAgICAgICAgKGlmLWxldCAoZnVuYyAo b3ZlcmxheS1nZXQgb3YgJ2lzZWFyY2gtb3Blbi1pbnZpc2libGUtdGVtcG9yYXJ5KSkKICAgICAg ICAgICAgICAoZnVuY2FsbCBmdW5jIG5pbCkKICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdp bnZpc2libGUgbmlsKSkpKSkpKQoKOzsgRGVyaXZlZCBmcm9tIGN0cmxmLCBvcmlnaW5hbGx5IGlz ZWFyY2gKKGRlZnVuIGNvbnN1bHQtLWludmlzaWJsZS1yZXN0b3JlIChvdmVybGF5cykKICAiUmVz dG9yZSBhbnkgb3BlbmVkIE9WRVJMQVlTIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkLiIK ICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgIChpZi1sZXQgKGZ1bmMgKG92ZXJsYXktZ2V0IChj YXIgb3YpICdpc2VhcmNoLW9wZW4taW52aXNpYmxlLXRlbXBvcmFyeSkpCiAgICAgICAgKGZ1bmNh bGwgZnVuYyB0KQogICAgICAob3ZlcmxheS1wdXQgKGNhciBvdikgJ2ludmlzaWJsZSAoY2RyIG92 KSkpKSkKCihkZWZ1biBjb25zdWx0LS1qdW1wLTEgKHBvcykKICAiR28gdG8gUE9TIGFuZCByZWNl bnRlci4iCiAgKGNvbmQKICAgKChhbmQgKG1hcmtlcnAgcG9zKSAobm90IChidWZmZXItbGl2ZS1w IChtYXJrZXItYnVmZmVyIHBvcykpKSkKICAgIDs7IE9ubHkgcHJpbnQgYSBtZXNzYWdlLCBubyBl cnJvciBpbiBvcmRlciB0byBub3QgbWVzcwogICAgOzsgd2l0aCB0aGUgbWluaWJ1ZmZlciB1cGRh dGUgaG9vay4KICAgIChtZXNzYWdlICJCdWZmZXIgaXMgZGVhZCIpKQogICAodAogICAgOzsgU3dp dGNoIHRvIGJ1ZmZlciBpZiBpdCBpcyBub3QgdmlzaWJsZQogICAgKHdoZW4gKGFuZCAobWFya2Vy cCBwb3MpIChub3QgKGVxIChjdXJyZW50LWJ1ZmZlcikgKG1hcmtlci1idWZmZXIgcG9zKSkpKQog ICAgICAoc3dpdGNoLXRvLWJ1ZmZlciAobWFya2VyLWJ1ZmZlciBwb3MpKSkKICAgIDs7IFdpZGVu IGlmIHdlIGNhbm5vdCBqdW1wIHRvIHRoZSBwb3NpdGlvbiAoaWRlYSBmcm9tIGZseWNoZWNrLWp1 bXAtdG8tZXJyb3IpCiAgICAodW5sZXNzICg9IChnb3RvLWNoYXIgcG9zKSAocG9pbnQpKQogICAg ICAod2lkZW4pCiAgICAgIChnb3RvLWNoYXIgcG9zKSkKICAgIChydW4taG9va3MgJ2NvbnN1bHQt YWZ0ZXItanVtcC1ob29rKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWp1bXAgKHBvcykKICAiUHVzaCBj dXJyZW50IHBvc2l0aW9uIHRvIG1hcmsgcmluZywgZ28gdG8gUE9TIGFuZCByZWNlbnRlci4iCiAg KHdoZW4gcG9zCiAgICA7OyBXaGVuIHRoZSBtYXJrZXIgaXMgaW4gdGhlIHNhbWUgYnVmZmVyLAog ICAgOzsgcmVjb3JkIHByZXZpb3VzIGxvY2F0aW9uIHN1Y2ggdGhhdCB0aGUgdXNlciBjYW4ganVt cCBiYWNrIHF1aWNrbHkuCiAgICAodW5sZXNzIChhbmQgKG1hcmtlcnAgcG9zKSAobm90IChlcSAo Y3VycmVudC1idWZmZXIpIChtYXJrZXItYnVmZmVyIHBvcykpKSkKICAgICAgKHB1c2gtbWFyayAo cG9pbnQpIHQpKQogICAgKGNvbnN1bHQtLWp1bXAtMSBwb3MpCiAgICAoY29uc3VsdC0taW52aXNp YmxlLXNob3cgdCkpCiAgbmlsKQoKOzsgTWF0Y2hlZCBzdHJpbmdzIGFyZSBub3QgaGlnaGxpZ2h0 ZWQgYXMgb2Ygbm93Lgo7OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQvaXNz dWVzLzcKKGRlZnVuIGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24gKCZvcHRpb25hbCBmYWNlKQog ICJUaGUgcHJldmlldyBmdW5jdGlvbiB1c2VkIGlmIHNlbGVjdGluZyBmcm9tIGEgbGlzdCBvZiBj YW5kaWRhdGUgcG9zaXRpb25zLgpUaGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgdGhlIGA6cHJl dmlldycgYXJndW1lbnQgb2YgYGNvbnN1bHQtLXJlYWQnLgpGQUNFIGlzIHRoZSBjdXJzb3IgZmFj ZS4iCiAgKGxldCAoKG92ZXJsYXlzKQogICAgICAgIChpbnZpc2libGUpCiAgICAgICAgKGZhY2Ug KG9yIGZhY2UgJ2NvbnN1bHQtcHJldmlldy1jdXJzb3IpKQogICAgICAgIChzYXZlZC1taW4gKHBv aW50LW1pbi1tYXJrZXIpKQogICAgICAgIChzYXZlZC1tYXggKHBvaW50LW1heC1tYXJrZXIpKQog ICAgICAgIChzYXZlZC1wb3MgKHBvaW50LW1hcmtlcikpKQogICAgKGxhbWJkYSAoY2FuZCByZXN0 b3JlKQogICAgICAoY29uc3VsdC0taW52aXNpYmxlLXJlc3RvcmUgaW52aXNpYmxlKQogICAgICAo bWFwYyAjJ2RlbGV0ZS1vdmVybGF5IG92ZXJsYXlzKQogICAgICAoY29uZAogICAgICAgKHJlc3Rv cmUKICAgICAgICAoaWYgKG5vdCAoYnVmZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciBzYXZlZC1w b3MpKSkKICAgICAgICAgICAgKG1lc3NhZ2UgIkJ1ZmZlciBpcyBkZWFkIikKICAgICAgICAgIChu YXJyb3ctdG8tcmVnaW9uIHNhdmVkLW1pbiBzYXZlZC1tYXgpCiAgICAgICAgICAoZ290by1jaGFy IHNhdmVkLXBvcykpKQogICAgICAgOzsgSnVtcCB0byBwb3NpdGlvbgogICAgICAgKGNhbmQKICAg ICAgICAoY29uc3VsdC0tanVtcC0xIGNhbmQpCiAgICAgICAgKHNldHEgaW52aXNpYmxlIChjb25z dWx0LS1pbnZpc2libGUtc2hvdykpCiAgICAgICAgKGxldCAoKHBvcyAocG9pbnQpKSkKICAgICAg ICAgIChzZXRxIG92ZXJsYXlzCiAgICAgICAgICAgICAgICAobGlzdCAoY29uc3VsdC0tb3Zlcmxh eSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobGluZS1lbmQtcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZmFjZSAnY29uc3VsdC1wcmV2aWV3LWxpbmUpCiAgICAgICAgICAgICAg ICAgICAgICAoY29uc3VsdC0tb3ZlcmxheSBwb3MgKDErIHBvcykgJ2ZhY2UgZmFjZSkpKSkpCiAg ICAgICA7OyBJZiBwb3NpdGlvbiBjYW5ub3QgYmUgcHJldmlld2VkLCByZXR1cm4gdG8gc2F2ZWQg cG9zaXRpb24KICAgICAgICh0IChjb25zdWx0LS1qdW1wLTEgc2F2ZWQtcG9zKSkpKSkpCgooZGVm dW4gY29uc3VsdC0td2l0aC1wcmV2aWV3LTEgKHByZXZpZXcta2V5IHByZXZpZXcgdHJhbnNmb3Jt IGNhbmRpZGF0ZSBmdW4pCiAgIkFkZCBwcmV2aWV3IHN1cHBvcnQgZm9yIEZVTi4KClNlZSBjb25z dWx0LS13aXRoLXByZXZpZXcgZm9yIHRoZSBhcmd1bWVudHMgUFJFVklFVy1LRVksIFBSRVZJRVcs IFRSQU5TRk9STSBhbmQgQ0FORElEQVRFLiIKICAobGV0ICgoaW5wdXQgIiIpIChzZWxlY3RlZCkp CiAgICAoY29uc3VsdC0tbWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2sKICAgICAgICAoaWYgKGFu ZCBwcmV2aWV3IHByZXZpZXcta2V5KQogICAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAg ICAgKHNldHEgY29uc3VsdC0tcHJldmlldy1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgIChs ZXQgKChsYXN0LXByZXZpZXcpKQogICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5wIGNh bmQpCiAgICAgICAgICAgICAgICAgICAgICAgIChjbC1hc3NlcnQgKHdpbmRvdy1taW5pYnVmZmVy LXApKQogICAgICAgICAgICAgICAgICAgICAgICAodW5sZXNzIChlcXVhbCBsYXN0LXByZXZpZXcg Y2FuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgKG9y IChtaW5pYnVmZmVyLXNlbGVjdGVkLXdpbmRvdykgKG5leHQtd2luZG93KSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmdW5jYWxsIHByZXZpZXcgKGZ1bmNhbGwgdHJhbnNmb3JtIGlucCBj YW5kKSBuaWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGxhc3QtcHJldmlldyBj YW5kKSkpKSkKICAgICAgICAgICAgICAobGV0ICgocG9zdC1jb21tYW5kLXN5bSAobWFrZS1zeW1i b2wgImNvbnN1bHQtLXByZXZpZXctcG9zdC1jb21tYW5kIikpKQogICAgICAgICAgICAgICAgKGZz ZXQgcG9zdC1jb21tYW5kLXN5bQogICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQogICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSBpbnB1dCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1w cm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKG9yIChlcSBwcmV2aWV3 LWtleSAnYW55KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGtleXMg KHRoaXMtc2luZ2xlLWNvbW1hbmQta2V5cykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2VxLWZpbmQgKGxhbWJkYSAoeCkgKGVxdWFsICh2Y29uY2F0IHgpIGtleXMpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChsaXN0cCBw cmV2aWV3LWtleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmV2aWV3LWtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGlzdCBwcmV2aWV3LWtleSkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg KHdoZW4tbGV0IChjYW5kIChmdW5jYWxsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZnVuY2FsbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9uIGlucHV0IGNhbmQpKSkp KQogICAgICAgICAgICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayBwb3N0LWNvbW1h bmQtc3ltIG5pbCB0KSkpCiAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAgIChsZXQgKChw b3N0LWNvbW1hbmQtc3ltIChtYWtlLXN5bWJvbCAiY29uc3VsdC0tcHJldmlldy1wb3N0LWNvbW1h bmQiKSkpCiAgICAgICAgICAgICAgKGZzZXQgcG9zdC1jb21tYW5kLXN5bSAobGFtYmRhICgpIChz ZXRxIGlucHV0IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRpZXMpKSkpCiAgICAgICAg ICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayBwb3N0LWNvbW1hbmQtc3ltIG5pbCB0 KSkpKQogICAgICAodW53aW5kLXByb3RlY3QKICAgICAgICAgIChjb25zIChzZXRxIHNlbGVjdGVk ICh3aGVuLWxldCAocmVzdWx0IChmdW5jYWxsIGZ1bikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmdW5jYWxsIHRyYW5zZm9ybSBpbnB1dCByZXN1bHQpKSkKICAgICAgICAgICAg ICAgIGlucHV0KQogICAgICAgIDs7IElmIHRoZXJlIGlzIGEgcHJldmlldyBmdW5jdGlvbiwgYWx3 YXlzIGNhbGwgcmVzdG9yZSEKICAgICAgICA7OyBUaGUgcHJldmlldyBmdW5jdGlvbiBzaG91bGQg YmUgc2VlbiBhcyBhIHN0YXRlZnVsIG9iamVjdCwKICAgICAgICA7OyBhbmQgd2UgY2FsbCB0aGUg ZGVzdHJ1Y3RvciBoZXJlLgogICAgICAgICh3aGVuIHByZXZpZXcKICAgICAgICAgIChmdW5jYWxs IHByZXZpZXcgc2VsZWN0ZWQgdCkpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtcHJldmll dyAocHJldmlldy1rZXkgcHJldmlldyB0cmFuc2Zvcm0gY2FuZGlkYXRlICZyZXN0IGJvZHkpCiAg IkFkZCBwcmV2aWV3IHN1cHBvcnQgdG8gQk9EWS4KClBSRVZJRVcgaXMgdGhlIHByZXZpZXcgZnVu Y3Rpb24uClRSQU5TRk9STSBpcyB0aGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24uCkNBTkRJREFU RSBpcyB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjdXJyZW50IGNhbmRpZGF0ZS4KUFJFVklF Vy1LRVkgYXJlIHRoZSBrZXlzIHdoaWNoIHRyaWdnZXJzIHRoZSBwcmV2aWV3LgoKVGhlIHByZXZp ZXcgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cywgdGhlIHNlbGVjdGVkIGNhbmRpZGF0ZSBh bmQgYSByZXN0b3JlCmZsYWcuIEl0IGlzIGNhbGxlZCBldmVyeSB0aW1lIHdpdGggcmVzdG9yZT1u aWwgYWZ0ZXIgYSBwcmV2aWV3LWtleSBrZXlwcmVzcywgYXMKbG9uZyBhcyBhIG5ldyBjYW5kaWRh dGUgaXMgc2VsZWN0ZWQuIEZpbmFsbHkgdGhlIHByZXZpZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGlu CmFueSBjYXNlIHdpdGggcmVzdG9yZT10IGV2ZW4gaWYgbm8gcHJldmlldyBoYXMgYWN0dWFsbHkg dGFrZW4gcGxhY2UuIFRoZQpjYW5kaWRhdGUgYXJndW1lbnQgY2FuIGJlIG5pbCBpZiB0aGUgc2Vs ZWN0aW9uIGhhcyBiZWVuIGFib3J0ZWQuIgogIChkZWNsYXJlIChpbmRlbnQgNCkpCiAgYChjb25z dWx0LS13aXRoLXByZXZpZXctMSAscHJldmlldy1rZXkgLHByZXZpZXcgLHRyYW5zZm9ybSAsY2Fu ZGlkYXRlIChsYW1iZGEgKCkgLEBib2R5KSkpCgo7Ozs7IE5hcnJvd2luZyBzdXBwb3J0CgooZGVm dW4gY29uc3VsdC0td2lkZW4ta2V5ICgpCiAgIlJldHVybiB3aWRlbmluZyBrZXksIGlmIGBjb25z dWx0LXdpZGVuLWtleScgaXMgbm90IHNldCwgZGVmYXVsdCB0byAnY29uc3VsdC1uYXJyb3cta2V5 IFNQQycuIgogIChvciBjb25zdWx0LXdpZGVuLWtleSAoYW5kIGNvbnN1bHQtbmFycm93LWtleSAo dmNvbmNhdCBjb25zdWx0LW5hcnJvdy1rZXkgIiAiKSkpKQoKKGRlZnVuIGNvbnN1bHQtbmFycm93 IChrZXkpCiAgIk5hcnJvdyBjdXJyZW50IGNvbXBsZXRpb24gd2l0aCBLRVkuCgpUaGlzIGNvbW1h bmQgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBuYXJyb3dpbmcgc3lzdGVtIG9mIGBjb25zdWx0 LS1yZWFkJy4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0ICh1bmxlc3MgKGVxdWFsICh0aGlzLXNp bmdsZS1jb21tYW5kLWtleXMpIChjb25zdWx0LS13aWRlbi1rZXkpKQogICAgICAgICAgIGxhc3Qt Y29tbWFuZC1ldmVudCkpKQogIChjb25zdWx0LS1yZXF1aXJlLW1pbmlidWZmZXIpCiAgKHNldHEg Y29uc3VsdC0tbmFycm93IGtleSkKICAod2hlbiBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlCiAg ICAoc2V0cSBtaW5pYnVmZmVyLWNvbXBsZXRpb24tcHJlZGljYXRlIChhbmQgY29uc3VsdC0tbmFy cm93IGNvbnN1bHQtLW5hcnJvdy1wcmVkaWNhdGUpKSkKICAod2hlbiBjb25zdWx0LS1uYXJyb3ct b3ZlcmxheQogICAgKGRlbGV0ZS1vdmVybGF5IGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5KSkKICAo d2hlbiBjb25zdWx0LS1uYXJyb3cKICAgIChzZXRxIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5CiAg ICAgICAgICAoY29uc3VsdC0tb3ZlcmxheQogICAgICAgICAgICgtIChtaW5pYnVmZmVyLXByb21w dC1lbmQpIDEpIChtaW5pYnVmZmVyLXByb21wdC1lbmQpCiAgICAgICAgICAgJ2JlZm9yZS1zdHJp bmcKICAgICAgICAgICAocHJvcGVydGl6ZSAoZm9ybWF0ICIgWyVzXSIgKGNkciAoYXNzb2Mga2V5 IGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykpKQogICAgICAgICAgICAgICAgICAgICAgICdmYWNl ICdjb25zdWx0LW5hcnJvdy1pbmRpY2F0b3IpKSkpCiAgKHJ1bi1ob29rcyAnY29uc3VsdC0tY29t cGxldGlvbi1yZWZyZXNoLWhvb2spKQoKKGRlZmNvbnN0IGNvbnN1bHQtLW5hcnJvdy1kZWxldGUK ICBgKG1lbnUtaXRlbQogICAgIiIgbmlsIDpmaWx0ZXIKICAgICwobGFtYmRhICgmb3B0aW9uYWwg XykKICAgICAgICh3aGVuIChzdHJpbmc9IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRp ZXMpICIiKQogICAgICAgICAoY29uc3VsdC1uYXJyb3cgbmlsKQogICAgICAgICAjJ2lnbm9yZSkp KSkKCihkZWZjb25zdCBjb25zdWx0LS1uYXJyb3ctc3BhY2UKICBgKG1lbnUtaXRlbQogICAgIiIg bmlsIDpmaWx0ZXIKICAgICwobGFtYmRhICgmb3B0aW9uYWwgXykKICAgICAgIChsZXQgKChzdHIg KG1pbmlidWZmZXItY29udGVudHMtbm8tcHJvcGVydGllcykpKQogICAgICAgICAod2hlbi1sZXQg KHBhaXIgKG9yIChhbmQgKD0gMSAobGVuZ3RoIHN0cikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYXNzb2MgKGFyZWYgc3RyIDApIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nPSBzdHIgIiIpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzb2MgMzIgY29uc3VsdC0tbmFycm93LXBy ZWZpeGVzKSkpKQogICAgICAgICAgIChkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cykKICAgICAg ICAgICAoY29uc3VsdC1uYXJyb3cgKGNhciBwYWlyKSkKICAgICAgICAgICAjJ2lnbm9yZSkpKSkp CgooZGVmdW4gY29uc3VsdC1uYXJyb3ctaGVscCAoKQogICJQcmludCBuYXJyb3dpbmcgaGVscCBh cyBhIGBtaW5pYnVmZmVyLW1lc3NhZ2UnLgoKVGhpcyBjb21tYW5kIGNhbiBiZSBib3VuZCB0byBh IGtleSBpbiBgY29uc3VsdC1uYXJyb3ctbWFwJywKdG8gbWFrZSBpdCBhdmFpbGFibGUgZm9yIGNv bW1hbmRzIHdpdGggbmFycm93aW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLXJlcXVp cmUtbWluaWJ1ZmZlcikKICAobGV0ICgobWluaWJ1ZmZlci1tZXNzYWdlLXRpbWVvdXQgMTAwMDAw MCkpCiAgICAobWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgKHN0cmluZy1qb2luCiAgICAgIChtYXBj YXIgKGxhbWJkYSAoeCkgKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVy dGl6ZSAoY2hhci10by1zdHJpbmcgKGNhciB4KSkgJ2ZhY2UgJ2NvbnN1bHQta2V5KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUgKGNkciB4KSAnZmFjZSAnY29uc3VsdC1oZWxwKSkpCiAgICAgICAgICAgICAgKHNlcS1m aWx0ZXIgKGxhbWJkYSAoeCkgKC89IChjYXIgeCkgMzIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykpCiAgICAgICIgIikpKSkKCihkZWZ1biBjb25z dWx0LS1uYXJyb3ctc2V0dXAgKHNldHRpbmdzIG1hcCkKICAiU2V0dXAgbmFycm93aW5nIHdpdGgg U0VUVElOR1MgYW5kIGtleW1hcCBNQVAuIgogIChpZiAoZnVuY3Rpb25wIChjYXIgc2V0dGluZ3Mp KQogICAgICAoc2V0cSBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlIChjYXIgc2V0dGluZ3MpCiAg ICAgICAgICAgIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcyAoY2RyIHNldHRpbmdzKSkKICAgIChz ZXRxIGNvbnN1bHQtLW5hcnJvdy1wcmVkaWNhdGUgbmlsCiAgICAgICAgICBjb25zdWx0LS1uYXJy b3ctcHJlZml4ZXMgc2V0dGluZ3MpKQogICh3aGVuIGNvbnN1bHQtbmFycm93LWtleQogICAgKGRv bGlzdCAocGFpciBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpCiAgICAgICh3aGVuICgvPSAoY2Fy IHBhaXIpIDMyKQogICAgICAgIChjb25zdWx0LS1kZWZpbmUta2V5IG1hcAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh2Y29uY2F0IGNvbnN1bHQtbmFycm93LWtleSAodmVjdG9yIChjYXIg cGFpcikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnY29uc3VsdC1uYXJyb3cgKGNk ciBwYWlyKSkpKSkKICAod2hlbi1sZXQgKHdpZGVuIChjb25zdWx0LS13aWRlbi1rZXkpKQogICAg KGNvbnN1bHQtLWRlZmluZS1rZXkgbWFwIHdpZGVuICMnY29uc3VsdC1uYXJyb3cgIkFsbCIpKSkK Cjs7OzsgQXN5bmMgc3VwcG9ydAoKKGRlZnVuIGNvbnN1bHQtLXdpdGgtYXN5bmMtMSAoYXN5bmMg ZnVuKQogICJTZXR1cCBBU1lOQyBmb3IgRlVOLiIKICAoaWYgKG5vdCAoZnVuY3Rpb25wIGFzeW5j KSkgKGZ1bmNhbGwgZnVuIChsYW1iZGEgKF8pIGFzeW5jKSkKICAgIChjb25zdWx0LS1taW5pYnVm ZmVyLXdpdGgtc2V0dXAtaG9vawogICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgIChmdW5jYWxs IGFzeW5jICdzZXR1cCkKICAgICAgICAgIDs7IFB1c2ggaW5wdXQgc3RyaW5nIHRvIHJlcXVlc3Qg cmVmcmVzaC4KICAgICAgICAgIDs7IFdlIHVzZSBhIHN5bWJvbCBpbiBvcmRlciB0byBhdm9pZCBh ZGRpbmcgbGFtYmRhcyB0byB0aGUgaG9vayB2YXJpYWJsZS4KICAgICAgICAgIChsZXQgKChzeW0g KG1ha2Utc3ltYm9sICJjb25zdWx0LS1hc3luYy1hZnRlci1jaGFuZ2UiKSkpCiAgICAgICAgICAg IChmc2V0IHN5bSAobGFtYmRhICgmcmVzdCBfKSAoZnVuY2FsbCBhc3luYyAobWluaWJ1ZmZlci1j b250ZW50cy1uby1wcm9wZXJ0aWVzKSkpKQogICAgICAgICAgICAocnVuLWF0LXRpbWUgMCBuaWwg c3ltKQogICAgICAgICAgICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgc3ltIG5p bCB0KSkpCiAgICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgICAgKGZ1bmNhbGwgZnVuIGFzeW5j KQogICAgICAgIChmdW5jYWxsIGFzeW5jICdkZXN0cm95KSkpKSkKCihkZWZtYWNybyBjb25zdWx0 LS13aXRoLWFzeW5jIChhc3luYyAmcmVzdCBib2R5KQogICJTZXR1cCBBU1lOQyBmb3IgQk9EWS4i CiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICBgKGNvbnN1bHQtLXdpdGgtYXN5bmMtMSAsQChjZHIg YXN5bmMpIChsYW1iZGEgKCwoY2FyIGFzeW5jKSkgLEBib2R5KSkpCgooZGVmdW4gY29uc3VsdC0t YXN5bmMtc2luayAoKQogICJDcmVhdGUgQVNZTkMgc2luayBmdW5jdGlvbi4KClRoZSBhc3luYyBm dW5jdGlvbiBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIGFjdGlvbiBhcmd1bWVudC4KT25seSBmb3Ig dGhlICdzZXR1cCBhY3Rpb24sIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGUgY2FsbApvcmlnaW5h dGVzIGZyb20gdGhlIG1pbmlidWZmZXIuIEZvciB0aGUgb3RoZXIgYWN0aW9ucyBubwphc3N1bXB0 aW9ucyBjYW4gYmUgbWFkZS4KRGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudCwgdGhlIGNhbGxlciBj b250ZXh0IGRpZmZlci4KCidzZXR1cCAgIFNldHVwIHRoZSBpbnRlcm5hbCBzdGF0ZS4KJ2Rlc3Ry b3kgRGVzdHJveSB0aGUgaW50ZXJuYWwgc3RhdGUuCidmbHVzaCAgIEZsdXNoIHRoZSBsaXN0IG9m IGNhbmRpZGF0ZXMuCidyZWZyZXNoIFJlcXVlc3QgVUkgcmVmcmVzaC4KJ2dldCAgICAgR2V0IHRo ZSBsaXN0IG9mIGNhbmRpZGF0ZXMuCkxpc3QgICAgIEFwcGVuZCB0aGUgbGlzdCB0byB0aGUgbGlz dCBvZiBjYW5kaWRhdGVzLgpTdHJpbmcgICBUaGUgaW5wdXQgc3RyaW5nLCBjYWxsZWQgd2hlbiB0 aGUgdXNlciBlbnRlcnMgc29tZXRoaW5nLiIKICAobGV0ICgoY2FuZGlkYXRlcykpCiAgICAobGFt YmRhIChhY3Rpb24pCiAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFjdGlvbgogICAgICAgICgob3Ig KHByZWQgc3RyaW5ncCkgJ3NldHVwICdkZXN0cm95KSBuaWwpCiAgICAgICAgKCdmbHVzaCAoc2V0 cSBjYW5kaWRhdGVzIG5pbCkpCiAgICAgICAgKCdnZXQgY2FuZGlkYXRlcykKICAgICAgICAoJ3Jl ZnJlc2gKICAgICAgICAgKHdoZW4tbGV0ICh3aW4gKGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRvdykp CiAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbgogICAgICAgICAgICAgKHJ1bi1o b29rcyAnY29uc3VsdC0tY29tcGxldGlvbi1yZWZyZXNoLWhvb2spKSkpCiAgICAgICAgKChwcmVk IGxpc3RwKSAoc2V0cSBjYW5kaWRhdGVzIChuY29uYyBjYW5kaWRhdGVzIGFjdGlvbikpKSkpKSkK CihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdC1zdHJpbmcgKHN0cikKICAiU3BsaXQgU1RSIGlu IGFzeW5jIGlucHV0IGFuZCBmaWx0ZXJpbmcgcGFydC4KSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBp cyBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBpdCBkZXRlcm1pbmVzCnRoZSBzZXBhcmF0b3IuIEV4 YW1wbGVzOiBcIi9hc3luYy9maWx0ZXJcIiwgXCIjYXN5bmMjZmlsdGVyXCIuIgogIChpZiAoc3Ry aW5nLW1hdGNoLXAgIl5bWzpwdW5jdDpdXSIgc3RyKQogICAgICAoc2F2ZS1tYXRjaC1kYXRhCiAg ICAgICAgKGxldCAoKHEgKHJlZ2V4cC1xdW90ZSAoc3Vic3RyaW5nIHN0ciAwIDEpKSkpCiAgICAg ICAgICAoc3RyaW5nLW1hdGNoIChjb25jYXQgIl4iIHEgIlxcKFteIiBxICJdKlxcKSIgcSAiPyIp IHN0cikKICAgICAgICAgIChjb25zIChtYXRjaC1zdHJpbmcgMSBzdHIpIChtYXRjaC1lbmQgMCkp KSkKICAgIChjb25zIHN0ciAobGVuZ3RoIHN0cikpKSkKCihkZWZtYWNybyBjb25zdWx0LS1hc3lu Yy1zcGxpdC13cmFwIChzdWZmaXgpCiAgIkNyZWF0ZSBjb21wbGV0aW9uIHN0eWxlIGZ1bmN0aW9u IHdpdGggbmFtZSBTVUZGSVguIgogIChsZXQgKChuYW1lIChpbnRlcm4gKGZvcm1hdCAiY29uc3Vs dC0tYXN5bmMtc3BsaXQtJXMiIHN1ZmZpeCkpKSkKICAgIGAocHJvZ24KICAgICAgIChkZWZ1biAs bmFtZSAoc3RyIHRhYmxlIHByZWQgcG9pbnQgJm9wdGlvbmFsIG1ldGFkYXRhKQogICAgICAgICAo bGV0ICgoY29tcGxldGlvbi1zdHlsZXMgKGNkciBjb21wbGV0aW9uLXN0eWxlcykpCiAgICAgICAg ICAgICAgIChwb3MgKGNkciAoY29uc3VsdC0tYXN5bmMtc3BsaXQtc3RyaW5nIHN0cikpKSkKICAg ICAgICAgICAoLChpbnRlcm4gKGZvcm1hdCAiY29tcGxldGlvbi0lcyIgc3VmZml4KSkKICAgICAg ICAgICAgKHN1YnN0cmluZyBzdHIgcG9zKSB0YWJsZSBwcmVkICgtIHBvaW50IHBvcykgbWV0YWRh dGEpKSkKICAgICAgICcsbmFtZSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXNwbGl0LXNldHVw ICgpCiAgIlNldHVwIGBjb25zdWx0LS1hc3luYy1zcGxpdCcgY29tcGxldGlvbiBzdHlsZXMuIgog IChzZXRxLWxvY2FsIGNvbXBsZXRpb24tc3R5bGVzLWFsaXN0CiAgICAgICAgICAgICAgKGNvbnMg KGxpc3QgJ2NvbnN1bHQtLWFzeW5jLXNwbGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN1bHQtLWFzeW5jLXNwbGl0LXdyYXAgdHJ5LWNvbXBsZXRpb24pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXdyYXAgYWxsLWNvbXBsZXRpb25zKSAiIikK ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uLXN0eWxlcy1hbGlzdCkpCiAgKHNldHEtbG9j YWwgY29tcGxldGlvbi1zdHlsZXMKICAgICAgICAgICAgICAoY29ucyAnY29uc3VsdC0tYXN5bmMt c3BsaXQgY29tcGxldGlvbi1zdHlsZXMpKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdCAo YXN5bmMpCiAgIkNyZWF0ZSBhc3luYyBmdW5jdGlvbiwgd2hpY2ggc3BsaXRzIHRoZSBpbnB1dCBz dHJpbmcuCgpUaGUgaW5wdXQgc3RyaW5nIGlzIHNwbGl0IGF0IHRoZSBmaXJzdCBjb21tYS4gVGhl IHBhcnQgYmVmb3JlCnRoZSBjb21tYSBpcyBwYXNzZWQgdG8gQVNZTkMsIHRoZSBzZWNvbmQgcGFy dCBpcyB1c2VkIGZvciBmaWx0ZXJpbmcuIgogIChsYW1iZGEgKGFjdGlvbikKICAgIChwY2FzZSBh Y3Rpb24KICAgICAgKCdzZXR1cAogICAgICAgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXNldHVwKQog ICAgICAgKGZ1bmNhbGwgYXN5bmMgJ3NldHVwKSkKICAgICAgKChwcmVkIHN0cmluZ3ApCiAgICAg ICAobGV0KiAoKHBhaXIgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXN0cmluZyBhY3Rpb24pKQogICAg ICAgICAgICAgIChpbnB1dC1sZW4gKGxlbmd0aCBhY3Rpb24pKQogICAgICAgICAgICAgIChhc3lu Yy1zdHIgKGNhciBwYWlyKSkKICAgICAgICAgICAgICAoYXN5bmMtbGVuIChsZW5ndGggYXN5bmMt c3RyKSkKICAgICAgICAgICAgICAoZW5kIChtaW5pYnVmZmVyLXByb21wdC1lbmQpKSkKICAgICAg ICAgOzsgSGlnaGxpZ2h0IHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKICAgICAgICAgKHJlbW92ZS1s aXN0LW9mLXRleHQtcHJvcGVydGllcyBlbmQgKCsgZW5kIGlucHV0LWxlbikgJyhmYWNlKSkKICAg ICAgICAgKHdoZW4gKD4gaW5wdXQtbGVuIGFzeW5jLWxlbikKICAgICAgICAgICAocHV0LXRleHQt cHJvcGVydHkgZW5kICgxKyBlbmQpICdmYWNlICdjb25zdWx0LWFzeW5jLXNwbGl0KQogICAgICAg ICAgICh3aGVuICg+IGlucHV0LWxlbiAoMSsgYXN5bmMtbGVuKSkKICAgICAgICAgICAgIChwdXQt dGV4dC1wcm9wZXJ0eSAoKyAxIGVuZCBhc3luYy1sZW4pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCsgMiBlbmQgYXN5bmMtbGVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmYWNlICdjb25zdWx0LWFzeW5jLXNwbGl0KSkpCiAgICAgICAgIChmdW5jYWxsIGFzeW5j CiAgICAgICAgICAgICAgICAgIDs7IFBhc3MgdGhyb3VnaCBpZiBmb3JjZWQgYnkgdHdvIHB1bmN0 dWF0aW9uIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICAgOzsgb3IgaWYgdGhlIGlucHV0IGlz IGxvbmcgZW5vdWdoIQogICAgICAgICAgICAgICAgICAoaWYgKG9yICg+PSBpbnB1dC1sZW4gKCsg MiBhc3luYy1sZW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICg+PSBhc3luYy1sZW4gY29u c3VsdC1hc3luYy1taW4taW5wdXQpKQogICAgICAgICAgICAgICAgICAgICAgYXN5bmMtc3RyCiAg ICAgICAgICAgICAgICAgICAgOzsgUHJldGVuZCB0aGF0IHRoZXJlIGlzIG5vIGlucHV0CiAgICAg ICAgICAgICAgICAgICAgIiIpKSkpCiAgICAgIChfIChmdW5jYWxsIGFzeW5jIGFjdGlvbikpKSkp CgooZGVmdW4gY29uc3VsdC0tYXN5bmMtbG9nIChmb3JtYXR0ZWQgJnJlc3QgYXJncykKICAiTG9n IEZPUk1BVFRFRCBBUkdTIHRvIGBjb25zdWx0LS1hc3luYy1sb2cnLiIKICAod2l0aC1jdXJyZW50 LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgY29uc3VsdC0tYXN5bmMtbG9nKQogICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgIChpbnNlcnQgKGFwcGx5ICMnZm9ybWF0IGZvcm1hdHRlZCBh cmdzKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXByb2Nlc3MgKGFzeW5jIGNtZCkKICAiQ3Jl YXRlIHByb2Nlc3Mgc291cmNlIGFzeW5jIGZ1bmN0aW9uLgoKQVNZTkMgaXMgdGhlIGFzeW5jIGZ1 bmN0aW9uIHdoaWNoIHJlY2VpdmVzIHRoZSBjYW5kaWRhdGVzLgpDTUQgaXMgdGhlIGNvbW1hbmQg YXJndW1lbnQgbGlzdC4iCiAgKGxldCAoKHByb2MpIChsYXN0LWFyZ3MpIChpbmRpY2F0b3IpKQog ICAgKGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9uCiAgICAgICAgKCIiIDs7IElm IG5vIGlucHV0IGlzIHByb3ZpZGVkIGtpbGwgY3VycmVudCBwcm9jZXNzCiAgICAgICAgIChpZ25v cmUtZXJyb3JzIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKICAgICAgICAgKHNldHEgbGFzdC1hcmdz IG5pbCkpCiAgICAgICAgKChwcmVkIHN0cmluZ3ApCiAgICAgICAgIChsZXQgKChhcmdzIChmdW5j YWxsIGNtZCBhY3Rpb24pKQogICAgICAgICAgICAgICAoZmx1c2ggdCkKICAgICAgICAgICAgICAg KHJlc3QgIiIpKQogICAgICAgICAgICh1bmxlc3MgKGVxdWFsIGFyZ3MgbGFzdC1hcmdzKQogICAg ICAgICAgICAgKHNldHEgbGFzdC1hcmdzIGFyZ3MpCiAgICAgICAgICAgICAoaWdub3JlLWVycm9y cyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgICAgICAod2hlbiBhcmdzCiAgICAgICAg ICAgICAgIChvdmVybGF5LXB1dCBpbmRpY2F0b3IgJ2Rpc3BsYXkgKHByb3BlcnRpemUgIioiICdm YWNlICdjb25zdWx0LWFzeW5jLXJ1bm5pbmcpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tYXN5 bmMtbG9nICJjb25zdWx0LS1hc3luYy1wcm9jZXNzIHN0YXJ0ZWQgJVNcbiIgYXJncykKICAgICAg ICAgICAgICAgKHNldHEKICAgICAgICAgICAgICAgIHByb2MKICAgICAgICAgICAgICAgIChtYWtl LXByb2Nlc3MKICAgICAgICAgICAgICAgICA6Y29ubmVjdGlvbi10eXBlICdwaXBlCiAgICAgICAg ICAgICAgICAgOm5hbWUgKGNhciBhcmdzKQogICAgICAgICAgICAgICAgIDpzdGRlcnIgY29uc3Vs dC0tYXN5bmMtbG9nCiAgICAgICAgICAgICAgICAgOm5vcXVlcnkgdAogICAgICAgICAgICAgICAg IDpjb21tYW5kIGFyZ3MKICAgICAgICAgICAgICAgICA6ZmlsdGVyCiAgICAgICAgICAgICAgICAg KGxhbWJkYSAoXyBvdXQpCiAgICAgICAgICAgICAgICAgICAod2hlbiBmbHVzaAogICAgICAgICAg ICAgICAgICAgICAoc2V0cSBmbHVzaCBuaWwpCiAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxs IGFzeW5jICdmbHVzaCkpCiAgICAgICAgICAgICAgICAgICAobGV0ICgobGluZXMgKHNwbGl0LXN0 cmluZyBvdXQgIlxuIikpKQogICAgICAgICAgICAgICAgICAgICAoaWYgKG5vdCAoY2RyIGxpbmVz KSkKICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlc3QgKGNvbmNhdCByZXN0IChjYXIg bGluZXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0Y2FyIGxpbmVzIChjb25jYXQgcmVz dCAoY2FyIGxpbmVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgcmVzdCAoY2FyIChs YXN0IGxpbmVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgKG5idXRs YXN0IGxpbmVzKSkpKSkKICAgICAgICAgICAgICAgICA6c2VudGluZWwKICAgICAgICAgICAgICAg ICAobGFtYmRhIChfIGV2ZW50KQogICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWxv ZyAiY29uc3VsdC0tYXN5bmMtcHJvY2VzcyBzZW50aW5lbDogJXNcbiIgZXZlbnQpCiAgICAgICAg ICAgICAgICAgICAod2hlbiBmbHVzaAogICAgICAgICAgICAgICAgICAgICAoc2V0cSBmbHVzaCBu aWwpCiAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFzeW5jICdmbHVzaCkpCiAgICAgICAg ICAgICAgICAgICAob3ZlcmxheS1wdXQgaW5kaWNhdG9yICdkaXNwbGF5CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KChzdHJpbmctcHJlZml4LXAgImtpbGxlZCIgZXZlbnQpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocHJvcGVydGl6ZSAiOyIgJ2ZhY2UgJ2NvbnN1bHQtYXN5bmMtZmFpbGVkKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdHJpbmctcHJlZml4LXAgImZpbmlz aGVkIiBldmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXpl ICI6IiAnZmFjZSAnY29uc3VsdC1hc3luYy1maW5pc2hlZCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0IChwcm9wZXJ0aXplICIhIiAnZmFjZSAnY29uc3VsdC1hc3luYy1mYWls ZWQpKSkpCiAgICAgICAgICAgICAgICAgICAod2hlbiAoYW5kIChzdHJpbmctcHJlZml4LXAgImZp bmlzaGVkIiBldmVudCkgKG5vdCAoc3RyaW5nPSByZXN0ICIiKSkpCiAgICAgICAgICAgICAgICAg ICAgIChmdW5jYWxsIGFzeW5jIChsaXN0IHJlc3QpKSkpKSkpKSkpCiAgICAgICAgKCdkZXN0cm95 CiAgICAgICAgIChpZ25vcmUtZXJyb3JzIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKICAgICAgICAg KGRlbGV0ZS1vdmVybGF5IGluZGljYXRvcikKICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ2Rlc3Ry b3kpKQogICAgICAgICgnc2V0dXAKICAgICAgICAgKHNldHEgaW5kaWNhdG9yIChtYWtlLW92ZXJs YXkgKC0gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkgMikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKC0gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkgMSkpKQogICAgICAgICAo ZnVuY2FsbCBhc3luYyAnc2V0dXApKQogICAgICAgIChfIChmdW5jYWxsIGFzeW5jIGFjdGlvbikp KSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXRocm90dGxlIChhc3luYyAmb3B0aW9uYWwgdGhy b3R0bGUgZGVib3VuY2UpCiAgIkNyZWF0ZSBhc3luYyBmdW5jdGlvbiBmcm9tIEFTWU5DIHdoaWNo IHRocm90dGxlcyBpbnB1dC4KClRoZSBUSFJPVFRMRSBkZWxheSBkZWZhdWx0cyB0byBgY29uc3Vs dC1hc3luYy1pbnB1dC10aHJvdHRsZScuClRoZSBERUJPVU5DRSBkZWxheSBkZWZhdWx0cyB0byBg Y29uc3VsdC1hc3luYy1pbnB1dC1kZWJvdW5jZScuIgogIChsZXQqICgodGhyb3R0bGUgKG9yIHRo cm90dGxlIGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUpKQogICAgICAgICAoZGVib3VuY2Ug KG9yIGRlYm91bmNlIGNvbnN1bHQtYXN5bmMtaW5wdXQtZGVib3VuY2UpKQogICAgICAgICAoaW5w dXQgIiIpCiAgICAgICAgICh1bmxvY2tlZCB0KQogICAgICAgICAodGhyb3R0bGUtdGltZXIpCiAg ICAgICAgIChkZWJvdW5jZS10aW1lcikpCiAgICAobGFtYmRhIChhY3Rpb24pCiAgICAgIChwY2Fz ZSBhY3Rpb24KICAgICAgICAoJ3NldHVwCiAgICAgICAgIChmdW5jYWxsIGFzeW5jICdzZXR1cCkK ICAgICAgICAgKHNldHEgdGhyb3R0bGUtdGltZXIgKHJ1bi1hdC10aW1lIHRocm90dGxlIHRocm90 dGxlIChsYW1iZGEgKCkgKHNldHEgdW5sb2NrZWQgdCkpKSkpCiAgICAgICAgKChwcmVkIHN0cmlu Z3ApCiAgICAgICAgICh3aGVuIGRlYm91bmNlLXRpbWVyCiAgICAgICAgICAgKGNhbmNlbC10aW1l ciBkZWJvdW5jZS10aW1lcikpCiAgICAgICAgICh1bmxlc3MgKHN0cmluZz0gYWN0aW9uIGlucHV0 KQogICAgICAgICAgIChmdW5jYWxsIGFzeW5jIChzZXRxIGlucHV0ICIiKSkgOzsgY2FuY2VsIHJ1 bm5pbmcgcHJvY2VzcwogICAgICAgICAgICh1bmxlc3MgKHN0cmluZz0gYWN0aW9uICIiKQogICAg ICAgICAgICAgKHNldHEgZGVib3VuY2UtdGltZXIgKHJ1bi1hdC10aW1lCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCsgZGVib3VuY2UgKGlmIHVubG9ja2VkIDAgdGhyb3R0bGUp KSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpIChmdW5j YWxsIGFzeW5jIChzZXRxIHVubG9ja2VkIG5pbCBpbnB1dCBhY3Rpb24pKSkpKSkpKQogICAgICAg ICgnZGVzdHJveQogICAgICAgICAoY2FuY2VsLXRpbWVyIHRocm90dGxlLXRpbWVyKQogICAgICAg ICAod2hlbiBkZWJvdW5jZS10aW1lcgogICAgICAgICAgIChjYW5jZWwtdGltZXIgZGVib3VuY2Ut dGltZXIpKQogICAgICAgICAoZnVuY2FsbCBhc3luYyAnZGVzdHJveSkpCiAgICAgICAgKF8gKGZ1 bmNhbGwgYXN5bmMgYWN0aW9uKSkpKSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtcmVmcmVzaC1p bW1lZGlhdGUgKGFzeW5jKQogICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24gZnJvbSBBU1lOQywgd2hp Y2ggcmVmcmVzaGVzIHRoZSBkaXNwbGF5LgoKVGhlIHJlZnJlc2ggaGFwcGVucyBpbW1lZGlhdGVs eSB3aGVuIGNhbmRpZGF0ZXMgYXJlIHB1c2hlZC4iCiAgKGxhbWJkYSAoYWN0aW9uKQogICAgKHBj YXNlIGFjdGlvbgogICAgICAoKG9yIChwcmVkIGxpc3RwKSAocHJlZCBzdHJpbmdwKSAnZmx1c2gp CiAgICAgICAocHJvZzEgKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKQogICAgICAgICAoZnVuY2FsbCBh c3luYyAncmVmcmVzaCkpKQogICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLWFzeW5jLXJlZnJlc2gtdGltZXIgKGFzeW5jICZvcHRpb25hbCBkZWxheSkK ICAiQ3JlYXRlIGFzeW5jIGZ1bmN0aW9uIGZyb20gQVNZTkMsIHdoaWNoIHJlZnJlc2hlcyB0aGUg ZGlzcGxheS4KClRoZSByZWZyZXNoIGhhcHBlbnMgYWZ0ZXIgYSBERUxBWSwgZGVmYXVsdGluZyB0 byBgY29uc3VsdC1hc3luYy1yZWZyZXNoLWRlbGF5Jy4iCiAgKGxldCAoKHRpbWVyKSAocmVmcmVz aCB0KSAoZGVsYXkgKG9yIGRlbGF5IGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSkpKQogICAg KGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9uCiAgICAgICAgKChvciAocHJlZCBs aXN0cCkgKHByZWQgc3RyaW5ncCkgJ3JlZnJlc2ggJ2ZsdXNoKQogICAgICAgICAoc2V0cSByZWZy ZXNoIHQpKQogICAgICAgICgnZGVzdHJveSAoY2FuY2VsLXRpbWVyIHRpbWVyKSkKICAgICAgICAo J3NldHVwCiAgICAgICAgIChzZXRxIHRpbWVyIChydW4tYXQtdGltZQogICAgICAgICAgICAgICAg ICAgICAgZGVsYXkgZGVsYXkKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKICAgICAg ICAgICAgICAgICAgICAgICAgKHdoZW4gcmVmcmVzaAogICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIHJlZnJlc2ggbmlsKQogICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFz eW5jICdyZWZyZXNoKSkpKSkpKQogICAgICAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpCgooZGVm bWFjcm8gY29uc3VsdC0tYXN5bmMtdHJhbnNmb3JtIChhc3luYyAmcmVzdCB0cmFuc2Zvcm0pCiAg IlVzZSBGVU4gdG8gVFJBTlNGT1JNIGNhbmRpZGF0ZXMgb2YgQVNZTkMuIgogIChsZXQgKChhc3lu Yy12YXIgKG1ha2Utc3ltYm9sICJhc3luYyIpKQogICAgICAgIChhY3Rpb24tdmFyIChtYWtlLXN5 bWJvbCAiYWN0aW9uIikpKQogICAgYChsZXQgKCgsYXN5bmMtdmFyICxhc3luYykpCiAgICAgICAo bGFtYmRhICgsYWN0aW9uLXZhcikKICAgICAgICAgKGZ1bmNhbGwgLGFzeW5jLXZhciAoaWYgKGxp c3RwICxhY3Rpb24tdmFyKSAoLEB0cmFuc2Zvcm0gLGFjdGlvbi12YXIpICxhY3Rpb24tdmFyKSkp KSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtbWFwIChhc3luYyBmdW4pCiAgIk1hcCBjYW5kaWRh dGVzIG9mIEFTWU5DIGJ5IEZVTi4iCiAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBhc3luYyBt YXBjYXIgZnVuKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1maWx0ZXIgKGFzeW5jIGZ1bikKICAi RmlsdGVyIGNhbmRpZGF0ZXMgb2YgQVNZTkMgYnkgRlVOLiIKICAoY29uc3VsdC0tYXN5bmMtdHJh bnNmb3JtIGFzeW5jIHNlcS1maWx0ZXIgZnVuKSkKCihkZWZ1biBjb25zdWx0LS1jb21tYW5kLWFy Z3MgKGNtZCkKICAiU3BsaXQgY29tbWFuZCBhcmd1bWVudHMgYW5kIGFwcGVuZCB0byBDTUQuIgog IChzZXRxIGNtZCAoc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlIGNtZCkpCiAgKGxhbWJkYSAoaW5w dXQpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgIChsZXQgKChvcHRzKSkKICAgICAgICAod2hl biAoc3RyaW5nLW1hdGNoICIgKy0tXFwoICtcXHwkXFwpIiBpbnB1dCkKICAgICAgICAgIDs7IHNw bGl0LXN0cmluZy1hbmQtdW5xdW90ZSBtb2RpZmllcyB0aGUgbWF0Y2ggZGF0YQogICAgICAgICAg OzsgYW5kIGZhaWxzIGlmIHRoZSBxdW90ZXMgYXJlIGludmFsaWQuIElnbm9yZSBpdC4KICAgICAg ICAgIChzZXRxIG9wdHMgKHN1YnN0cmluZyBpbnB1dCAobWF0Y2gtZW5kIDApKQogICAgICAgICAg ICAgICAgaW5wdXQgKHN1YnN0cmluZyBpbnB1dCAwIChtYXRjaC1iZWdpbm5pbmcgMCkpCiAgICAg ICAgICAgICAgICBvcHRzIChpZ25vcmUtZXJyb3JzIChzcGxpdC1zdHJpbmctYW5kLXVucXVvdGUg b3B0cykpKSkKICAgICAgICAobWFwY2FuIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgIChp ZiAoc3RyaW5nPSB4ICJPUFRTIikKICAgICAgICAgICAgICAgICAgICAgIG9wdHMKICAgICAgICAg ICAgICAgICAgICAobGlzdCAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJBUkciIGlucHV0IHgg J2ZpeGVkY2FzZSAnbGl0ZXJhbCkpKSkKICAgICAgICAgICAgICAgIGNtZCkpKSkpCgooZGVmbWFj cm8gY29uc3VsdC0tYXN5bmMtY29tbWFuZCAoY21kICZyZXN0IHRyYW5zZm9ybXMpCiAgIkFzeW5j aHJvbm91cyBDTUQgcGlwZWxpbmUgd2l0aCBUUkFOU0ZPUk1TLiIKICAoZGVjbGFyZSAoaW5kZW50 IDEpKQogIGAodGhyZWFkLWZpcnN0IChjb25zdWx0LS1hc3luYy1zaW5rKQogICAgIChjb25zdWx0 LS1hc3luYy1yZWZyZXNoLXRpbWVyKQogICAgICxAdHJhbnNmb3JtcwogICAgIChjb25zdWx0LS1h c3luYy1wcm9jZXNzIChjb25zdWx0LS1jb21tYW5kLWFyZ3MgLGNtZCkpCiAgICAgKGNvbnN1bHQt LWFzeW5jLXRocm90dGxlKQogICAgIChjb25zdWx0LS1hc3luYy1zcGxpdCkpKQoKOzs7OyBTcGVj aWFsIGtleW1hcHMKCihkZWZ2YXIgY29uc3VsdC1hc3luYy1tYXAgKG1ha2Utc3BhcnNlLWtleW1h cCkKICAiS2V5bWFwIGFkZGVkIGZvciBjb21tYW5kcyB3aXRoIGFzeW5jaHJvbm91cyBjYW5kaWRh dGVzLiIpCgooZGVmdmFyIGNvbnN1bHQtcHJldmlldy1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkK ICAiS2V5bWFwIGFkZGVkIGZvciBjb21tYW5kcyB3aXRoIHByZXZpZXcuIikKCihkZWZ2YXIgY29u c3VsdC1uYXJyb3ctbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgIiAiIGNvbnN1bHQtLW5hcnJvdy1zcGFjZSkKICAgIChkZWZpbmUta2V5 IG1hcCBbMTI3XSBjb25zdWx0LS1uYXJyb3ctZGVsZXRlKQogICAgbWFwKQogICJOYXJyb3dpbmcg a2V5bWFwIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBsb2NhbCBtaW5pYnVmZmVyIG1hcC4KTm90ZSB0 aGF0IGBjb25zdWx0LW5hcnJvdy1rZXknIGFuZCBgY29uc3VsdC13aWRlbi1rZXknIGFyZSBib3Vu ZCBkeW5hbWljYWxseS4iKQoKOzs7OyBJbnRlcm5hbCBBUEk6IGNvbnN1bHQtLXJlYWQKCihkZWZ1 biBjb25zdWx0LS1hZGQtaGlzdG9yeSAoaXRlbXMpCiAgIkFkZCBJVEVNUyB0byB0aGUgbWluaWJ1 ZmZlciBoaXN0b3J5IHZpYSBgbWluaWJ1ZmZlci1kZWZhdWx0LWFkZC1mdW5jdGlvbicuIgogIChz ZXRxLWxvY2FsIG1pbmlidWZmZXItZGVmYXVsdC1hZGQtZnVuY3Rpb24KICAgICAgICAgICAgICAo bGFtYmRhICgpCiAgICAgICAgICAgICAgICAoY29uc3VsdC0tcmVtb3ZlLWR1cHMKICAgICAgICAg ICAgICAgICAoYXBwZW5kCiAgICAgICAgICAgICAgICAgIDs7IHRoZSBkZWZhdWx0cyBhcmUgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgZnV0dXJlIGhpc3RvcnkKICAgICAgICAgICAgICAgICAgKGlm IChsaXN0cCBtaW5pYnVmZmVyLWRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICBtaW5pYnVm ZmVyLWRlZmF1bHQKICAgICAgICAgICAgICAgICAgICAobGlzdCBtaW5pYnVmZmVyLWRlZmF1bHQp KQogICAgICAgICAgICAgICAgICA7OyB0aGVuIG91ciBjdXN0b20gaXRlbXMKICAgICAgICAgICAg ICAgICAgKGRlbGV0ZSAiIiAoZGVscSBuaWwgKGlmIChsaXN0cCBpdGVtcykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgaXRlbXMpKSkpCiAgICAgICAgICAgICAgICAgIDs7 IHRoZW4gYWxsIHRoZSBjb21wbGV0aW9ucwogICAgICAgICAgICAgICAgICAoYWxsLWNvbXBsZXRp b25zICIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21w bGV0aW9uLXRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZl ci1jb21wbGV0aW9uLXByZWRpY2F0ZSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXNldHVwLWtleW1h cCAoa2V5bWFwIGFzeW5jIG5hcnJvdyBwcmV2aWV3LWtleSkKICAiU2V0dXAgbWluaWJ1ZmZlciBr ZXltYXAuCgpLRVlNQVAgaXMgYSBjb21tYW5kLXNwZWNpZmljIEtFWU1BUC4KQVNZTkMgbXVzdCBi ZSB0IGZvciBhc3luYy4KTkFSUk9XIGFyZSB0aGUgbmFycm93IHNldHRpbmdzLgpQUkVWSUVXLUtF WSBpcyB0aGUgcHJldmlldyBrZXkuIgogIChsZXQgKChvbGQtbWFwIChjdXJyZW50LWxvY2FsLW1h cCkpCiAgICAgICAgKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCgogICAgOzsgQXN5bmMga2V5 cyBvdmVyd3JpdGluZyBzb21lIHVudXNhYmxlIGRlZmF1bHRzIGZvciB0aGUgZGVmYXVsdCBjb21w bGV0aW9uCiAgICAod2hlbiBhc3luYwogICAgICAod2hlbiAoZXEgKGxvb2t1cC1rZXkgb2xkLW1h cCAiICIpICMnbWluaWJ1ZmZlci1jb21wbGV0ZS13b3JkKQogICAgICAgIChkZWZpbmUta2V5IG1h cCAiICIgIydzZWxmLWluc2VydC1jb21tYW5kKSkKICAgICAgKHdoZW4gKGVxIChsb29rdXAta2V5 IG9sZC1tYXAgIlx0IikgIydtaW5pYnVmZmVyLWNvbXBsZXRlKQogICAgICAgIChkZWZpbmUta2V5 IG1hcCAiXHQiICMnbWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHApKSkKCiAgICA7OyBBZGQgbmFy cm93IGtleXMKICAgICh3aGVuIG5hcnJvdwogICAgICAoY29uc3VsdC0tbmFycm93LXNldHVwIG5h cnJvdyBtYXApKQoKICAgIDs7IFByZXZpZXcgdHJpZ2dlciBrZXlzCiAgICAod2hlbiAoYW5kIHBy ZXZpZXcta2V5IChub3QgKGVxIHByZXZpZXcta2V5ICdhbnkpKSkKICAgICAgKGxldCAoKHByZXZp ZXcta2V5IChpZiAobGlzdHAgcHJldmlldy1rZXkpIHByZXZpZXcta2V5IChsaXN0IHByZXZpZXct a2V5KSkpKQogICAgICAgIChkb2xpc3QgKGtleSBwcmV2aWV3LWtleSkKICAgICAgICAgICh1bmxl c3MgKGxvb2t1cC1rZXkgb2xkLW1hcCBrZXkpCiAgICAgICAgICAgIChkZWZpbmUta2V5IG1hcCBr ZXkgIydpZ25vcmUpKSkpKQoKICAgIDs7IFB1dCB0aGUga2V5bWFwIHRvZ2V0aGVyCiAgICAodXNl LWxvY2FsLW1hcAogICAgIChtYWtlLWNvbXBvc2VkLWtleW1hcAogICAgICAoZGVscSBuaWwgKGxp c3Qga2V5bWFwCiAgICAgICAgICAgICAgICAgICAgICAoYW5kIGFzeW5jIGNvbnN1bHQtYXN5bmMt bWFwKQogICAgICAgICAgICAgICAgICAgICAgKGFuZCBuYXJyb3cgY29uc3VsdC1uYXJyb3ctbWFw KQogICAgICAgICAgICAgICAgICAgICAgKGFuZCBwcmV2aWV3LWtleSBjb25zdWx0LXByZXZpZXct bWFwKQogICAgICAgICAgICAgICAgICAgICAgbWFwKSkKICAgICAgb2xkLW1hcCkpKSkKCihkZWZ1 biBjb25zdWx0LS1mcnktdGhlLXRvZnVzICgmcmVzdCBfKQogICJGcnkgdGhlIHRvZnVzIGluIHRo ZSBtaW5pYnVmZmVyLiIKICAobGV0KiAoKG1pbiAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKSkKICAg ICAgICAgKG1heCAocG9pbnQtbWF4KSkKICAgICAgICAgKHBvcyBtaW4pCiAgICAgICAgIChjbWlu IGNvbnN1bHQtLXRvZnUtY2hhcikKICAgICAgICAgKGNtYXggKC0gKCsgY29uc3VsdC0tdG9mdS1j aGFyIGNvbnN1bHQtLXRvZnUtcmFuZ2UpIDEpKSkKICAgICh3aGlsZSAoYW5kICg8IHBvcyBtYXgp ICg8PSBjbWluIChjaGFyLWFmdGVyIHBvcykgY21heCkpCiAgICAgIChzZXRxIHBvcyAoMSsgcG9z KSkpCiAgICAod2hlbiAoPiBwb3MgbWluKQogICAgICAocmVtb3ZlLWxpc3Qtb2YtdGV4dC1wcm9w ZXJ0aWVzIG1pbiBwb3MgJyhkaXNwbGF5KSkKICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IG1pbiBw b3MgJ2ludmlzaWJsZSB0KSkpKQoKKGNsLWRlZnVuIGNvbnN1bHQtLXJlYWQtc2V0dXAgKF9wcm9t cHQgY2FuZGlkYXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5 IGtleW1hcCBhZGQtaGlzdG9yeSBuYXJyb3cgcHJldmlldy1rZXkgJmFsbG93LW90aGVyLWtleXMp CiAgIk1pbmlidWZmZXIgc2V0dXAgZm9yIGBjb25zdWx0LS1yZWFkJy4KClNlZSBgY29uc3VsdC0t cmVhZCcgZm9yIHRoZSBDQU5ESURBVEVTLCBLRVlNQVAsIEFERC1ISVNUT1JZLCBOQVJST1cgYW5k IFBSRVZJRVctS0VZIGFyZ3VtZW50cy4iCiAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rp b25zICMnY29uc3VsdC0tZnJ5LXRoZS10b2Z1cyBuaWwgdCkKICAoY29uc3VsdC0tc2V0dXAta2V5 bWFwIGtleW1hcCAoZnVuY3Rpb25wIGNhbmRpZGF0ZXMpIG5hcnJvdyBwcmV2aWV3LWtleSkKICAo Y29uc3VsdC0tYWRkLWhpc3RvcnkgYWRkLWhpc3RvcnkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXJl YWQtZGVmYXVsdHMgKCZyZXN0IGRlZmF1bHQpCiAgIlNldCBERUZBVUxUIG9wdGlvbnMuIgogICht YWNyb2V4cC1wcm9nbgogICAobWFwY2FyCiAgICAocGNhc2UtbGFtYmRhIChgKCxrZXkgLHZhbCkp CiAgICAgIGAodW5sZXNzIChwbGlzdC1tZW1iZXIgb3B0aW9ucyAsKGludGVybiAoZm9ybWF0ICI6 JXMiIGtleSkpKQogICAgICAgICAoc2V0cSBvcHRpb25zIChwbGlzdC1wdXQgb3B0aW9ucyAsKGlu dGVybiAoZm9ybWF0ICI6JXMiIGtleSkpIChzZXRxICxrZXkgLHZhbCkpKSkpCiAgICBkZWZhdWx0 KSkpCgooY2wtZGVmdW4gY29uc3VsdC0tcmVhZCAocHJvbXB0IGNhbmRpZGF0ZXMgJnJlc3Qgb3B0 aW9ucyAma2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlIHJlcXVp cmUtbWF0Y2ggaGlzdG9yeSBkZWZhdWx0IGtleW1hcAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhdGVnb3J5IGluaXRpYWwgbmFycm93IGFkZC1oaXN0b3J5IGFubm90YXRlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldyBwcmV2aWV3LWtleSBzb3J0IGRlZmF1 bHQtdG9wIGxvb2t1cCkKICAiRW5oYW5jZWQgY29tcGxldGluZyByZWFkIGZ1bmN0aW9uLgoKQXJn dW1lbnRzOgoKUFJPTVBUIGlzIHRoZSBzdHJpbmcgdG8gcHJvbXB0IHdpdGguCkNBTkRJREFURVMg aXMgdGhlIGNhbmRpZGF0ZSBsaXN0IG9yIGFsaXN0LgoKS2V5d29yZCBPUFRJT05TOgoKUFJFRElD QVRFIGlzIGEgZmlsdGVyIGZ1bmN0aW9uIGZvciB0aGUgY2FuZGlkYXRlcy4KUkVRVUlSRS1NQVRD SCBlcXVhbHMgdCBtZWFucyB0aGF0IGFuIGV4YWN0IG1hdGNoIGlzIHJlcXVpcmVkLgpISVNUT1JZ IGlzIHRoZSBzeW1ib2wgb2YgdGhlIGhpc3RvcnkgdmFyaWFibGUuCkRFRkFVTFQgaXMgdGhlIGRl ZmF1bHQgc2VsZWN0ZWQgdmFsdWUuCkFERC1ISVNUT1JZIGlzIGEgbGlzdCBvZiBpdGVtcyB0byBh ZGQgdG8gdGhlIGhpc3RvcnkuCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LgpT T1JUIHNob3VsZCBiZSBzZXQgdG8gbmlsIGlmIHRoZSBjYW5kaWRhdGVzIGFyZSBhbHJlYWR5IHNv cnRlZC4KTE9PS1VQIGlzIGEgZnVuY3Rpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgcmVzdWx0 LgpBTk5PVEFURSBpcyB0aGUgYW5ub3RhdGlvbiBmdW5jdGlvbi4KSU5JVElBTCBpcyBpbml0aWFs IGlucHV0LgpERUZBVUxULVRPUCBtdXN0IGJlIG5pbCBpZiB0aGUgZGVmYXVsdCBjYW5kaWRhdGUg c2hvdWxkIG5vdCBiZSBtb3ZlZCB0byB0aGUgdG9wLgpQUkVWSUVXIGlzIGEgcHJldmlldyBmdW5j dGlvbiwgc2VlIGBjb25zdWx0LS13aXRoLXByZXZpZXcnLgpQUkVWSUVXLUtFWSBhcmUgdGhlIHBy ZXZpZXcga2V5cyAobmlsLCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMpLgpO QVJST1cgaXMgYW4gYWxpc3Qgb2YgbmFycm93aW5nIHByZWZpeCBzdHJpbmdzIGFuZCBkZXNjcmlw dGlvbi4KS0VZTUFQIGlzIGEgY29tbWFuZC1zcGVjaWZpYyBrZXltYXAuIgogIDs7IHN1cHBvcnRl ZCB0eXBlcwogIChjbC1hc3NlcnQgKG9yIChmdW5jdGlvbnAgY2FuZGlkYXRlcykgICAgIDs7IGFz eW5jIHRhYmxlCiAgICAgICAgICAgICAgICAgKG5vdCBjYW5kaWRhdGVzKSAgICAgICAgICAgOzsg bmlsLCBlbXB0eSBsaXN0CiAgICAgICAgICAgICAgICAgKG9iYXJyYXlwIGNhbmRpZGF0ZXMpICAg ICAgOzsgb2JhcnJheQogICAgICAgICAgICAgICAgIChzdHJpbmdwIChjYXIgY2FuZGlkYXRlcykp IDs7IHN0cmluZyBsaXN0CiAgICAgICAgICAgICAgICAgKHN5bWJvbHAgKGNhciBjYW5kaWRhdGVz KSkgOzsgc3ltYm9sIGxpc3QKICAgICAgICAgICAgICAgICAoY29uc3AgKGNhciBjYW5kaWRhdGVz KSkpKSA7OyBhbGlzdAogIChpZ25vcmUgZGVmYXVsdC10b3AgbmFycm93IGFkZC1oaXN0b3J5IGtl eW1hcCkKICAoY29uc3VsdC0tcmVhZC1kZWZhdWx0cwogICAocHJldmlldy1rZXkgY29uc3VsdC1w cmV2aWV3LWtleSkKICAgKHNvcnQgdCkKICAgKGRlZmF1bHQtdG9wIHQpCiAgIChsb29rdXAgKGxh bWJkYSAoX2lucHV0IF9jYW5kcyB4KSB4KSkpCiAgKGNvbnN1bHQtLW1pbmlidWZmZXItd2l0aC1z ZXR1cC1ob29rCiAgICAgICg6YXBwZW5kIChsYW1iZGEgKCkgKGFwcGx5ICMnY29uc3VsdC0tcmVh ZC1zZXR1cCBwcm9tcHQgY2FuZGlkYXRlcyBvcHRpb25zKSkpCiAgICAoY29uc3VsdC0td2l0aC1h c3luYyAoYXN5bmMgY2FuZGlkYXRlcykKICAgICAgOzsgTk9URTogRG8gbm90IHVubmVjZXNzYXJp bHkgbGV0LWJpbmQgdGhlIGxhbWJkYXMgdG8gYXZvaWQKICAgICAgOzsgb3ZlcmNhcHR1cmluZyBp biB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgd2lsbCBtYWtlIGNsb3N1cmVzIGFuZCB0aGUKICAgICAg OzsgbGFtYmRhIHN0cmluZyByZXByZXNlbnRhdGlvbiBsYXJnZXIsIHdoaWNoIG1ha2VzIGRlYnVn Z2luZyBtdWNoIHdvcnNlLgogICAgICA7OyBGb3J0dW5hdGVseSB0aGUgb3ZlcmNhcHR1cmluZyBw cm9ibGVtIGRvZXMgbm90IGFmZmVjdCB0aGUgYnl0ZWNvZGUKICAgICAgOzsgaW50ZXJwcmV0ZXIg d2hpY2ggZG9lcyBhIHByb3BlciBzY29wZSBhbmFseWlzLgogICAgICAobGV0ICgocmVzdWx0CiAg ICAgICAgICAgICAoY29uc3VsdC0td2l0aC1wcmV2aWV3IHByZXZpZXcta2V5IHByZXZpZXcKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5wdXQgY2FuZCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBsb29rdXAgaW5wdXQg KGZ1bmNhbGwgYXN5bmMgJ2dldCkgY2FuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhcHBseS1wYXJ0aWFsbHkgIydydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vz cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdj b25zdWx0LS1jb21wbGV0aW9uLWNhbmRpZGF0ZS1ob29rKQogICAgICAgICAgICAgICAoY29tcGxl dGluZy1yZWFkIHByb21wdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEg KHN0ciBwcmVkIGFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo ZXEgYWN0aW9uICdtZXRhZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBgKG1ldGFkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQCh3 aGVuIGFubm90YXRlIGAoKGFubm90YXRpb24tZnVuY3Rpb24gLiAsYW5ub3RhdGUpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxAKHdoZW4gY2F0ZWdvcnkgYCgoY2F0 ZWdvcnkgLiAsY2F0ZWdvcnkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICxAKHVubGVzcyBzb3J0ICcoKGN5Y2xlLXNvcnQtZnVuY3Rpb24gLiBpZGVudGl0eSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRp c3BsYXktc29ydC1mdW5jdGlvbiAuIGlkZW50aXR5KSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29tcGxldGUtd2l0aC1hY3Rpb24gYWN0aW9uIChmdW5jYWxsIGFzeW5j ICdnZXQpIHN0ciBwcmVkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGlj YXRlIHJlcXVpcmUtbWF0Y2ggaW5pdGlhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAoc3ltYm9scCBoaXN0b3J5KSBoaXN0b3J5IChjYWRyIGhpc3RvcnkpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQpKSkpCiAgICAgICAgKHBjYXNlLWV4aGF1c3Rp dmUgaGlzdG9yeQogICAgICAgICAgKGAoOmlucHV0ICx2YXIpCiAgICAgICAgICAgKHNldCB2YXIg KGNkciAoc3ltYm9sLXZhbHVlIHZhcikpKQogICAgICAgICAgIChhZGQtdG8taGlzdG9yeSB2YXIg KGNkciByZXN1bHQpKSkKICAgICAgICAgICgocHJlZCBzeW1ib2xwKSkpCiAgICAgICAgKGNhciBy ZXN1bHQpKSkpKQoKKGFkdmljZS1hZGQgIydjb25zdWx0LS1yZWFkIDpmaWx0ZXItYXJncyAjJ2Nv bnN1bHQtLW1lcmdlLWNvbmZpZykKCjs7OzsgSW50ZXJuYWwgQVBJOiBjb25zdWx0LS1tdWx0aQoK KGRlZnN1YnN0IGNvbnN1bHQtLW11bHRpLXNvdXJjZSAoc291cmNlcyBjYW5kKQogICJMb29rdXAg c291cmNlIGZvciBDQU5EIGZyb20gU09VUkNFUyBsaXN0LiIKICAobnRoICgtIChhcmVmIGNhbmQg MCkgY29uc3VsdC0tdG9mdS1jaGFyKSBzb3VyY2VzKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1w cmVkaWNhdGUgKHNvdXJjZXMpCiAgIlJldHVybiBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBg Y29uc3VsdC0tbXVsdGknIHdpdGggU09VUkNFUy4iCiAgKGxhbWJkYSAoY2FuZCkKICAgIChsZXQq ICgobmFycm93IChwbGlzdC1nZXQgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBzb3VyY2VzIGNhbmQp IDpuYXJyb3cpKQogICAgICAgICAgICh0eXBlIChvciAoY2FyLXNhZmUgbmFycm93KSBuYXJyb3cg LTEpKSkKICAgICAgKGlmIChlcSBjb25zdWx0LS1uYXJyb3cgMzIpIDs7IG5hcnJvd2VkIHRvIGhp ZGRlbiBjYW5kaWRhdGVzCiAgICAgICAgICAoPSB0eXBlIDMyKQogICAgICAgIChhbmQKICAgICAg ICAgKC89IHR5cGUgMzIpIDs7IG5vbi1oaWRkZW4gY2FuZGlkYXRlcwogICAgICAgICAob3IgKG5v dCBjb25zdWx0LS1uYXJyb3cpICg9IHR5cGUgY29uc3VsdC0tbmFycm93KSkpKSkpKQoKKGRlZnVu IGNvbnN1bHQtLW11bHRpLW5hcnJvdyAoc291cmNlcykKICAiUmV0dXJuIG5hcnJvdyBsaXN0IHVz ZWQgYnkgYGNvbnN1bHQtLW11bHRpJyB3aXRoIFNPVVJDRVMuIgogIChkZWxxIG5pbCAobWFwY2Fy IChsYW1iZGEgKHNyYykKICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChuYXJyb3cgKHBsaXN0 LWdldCBzcmMgOm5hcnJvdykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSAocGxp c3QtZ2V0IHNyYyA6bmFtZSkpKQogICAgICAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAg ICAgICAgICAgICAgICAgICAgKChjb25zcCBuYXJyb3cpIG5hcnJvdykKICAgICAgICAgICAgICAg ICAgICAgICAgICgoYW5kIG5hcnJvdyBuYW1lKSAoY29ucyBuYXJyb3cgbmFtZSkpKSkpCiAgICAg ICAgICAgICAgICAgICAgc291cmNlcykpKQoKKGRlZnVuIGNvbnN1bHQtLW11bHRpLWFubm90YXRl IChzb3VyY2VzIG1heC1sZW4pCiAgIlJldHVybiBhbm5vdGF0aW9uIGZ1bmN0aW9uIHVzZWQgYnkg YGNvbnN1bHQtLW11bHRpJyB3aXRoIFNPVVJDRVMuCgpNQVgtTEVOIGlzIHRoZSBtYXhpbXVtIGNh bmRpZGF0ZSBsZW5ndGguIgogIChsYW1iZGEgKGNhbmQpCiAgICAobGV0KiAoKHNyYyAoY29uc3Vs dC0tbXVsdGktc291cmNlIHNvdXJjZXMgY2FuZCkpCiAgICAgICAgICAgKGFubm90YXRlIChwbGlz dC1nZXQgc3JjIDphbm5vdGF0ZSkpCiAgICAgICAgICAgKGFubiAoaWYgYW5ub3RhdGUKICAgICAg ICAgICAgICAgICAgICAoZnVuY2FsbCBhbm5vdGF0ZSAoY2RyIChnZXQtdGV4dC1wcm9wZXJ0eSAw ICdjb25zdWx0LW11bHRpIGNhbmQpKSkKICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCBzcmMg Om5hbWUpKSkpCiAgICAgICh3aGVuIGFubgogICAgICAgIChjb25jYXQgKHByb3BlcnRpemUgIiAi ICdkaXNwbGF5IGAoc3BhY2UgOmFsaWduLXRvICgrIGxlZnQgLG1heC1sZW4pKSkgYW5uKSkpKSkK CihkZWZ1biBjb25zdWx0LS1tdWx0aS1sb29rdXAgKHNvdXJjZXMpCiAgIkxvb2t1cCBmdW5jdGlv biB1c2VkIGJ5IGBjb25zdWx0LS1tdWx0aScgd2l0aCBTT1VSQ0VTLiIKICAobGFtYmRhIChfIGNh bmRpZGF0ZXMgY2FuZCkKICAgIChpZi1sZXQgKGZvdW5kIChtZW1iZXIgY2FuZCBjYW5kaWRhdGVz KSkKICAgICAgICAoY29ucyAoY2RyIChnZXQtdGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LW11bHRp IChjYXIgZm91bmQpKSkKICAgICAgICAgICAgICAoY29uc3VsdC0tbXVsdGktc291cmNlIHNvdXJj ZXMgY2FuZCkpCiAgICAgICh1bmxlc3MgKHN0cmluZy1ibGFuay1wIGNhbmQpCiAgICAgICAgKGxp c3QgY2FuZCkpKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktY2FuZGlkYXRlcyAoc291cmNlcykK ICAiUmV0dXJuIGNhbmRpZGF0ZXMgZnJvbSBTT1VSQ0VTIGZvciBgY29uc3VsdC0tbXVsdGknLiIK ICAobGV0ICgoaWR4IDApIChtYXgtbGVuIDApIChjYW5kaWRhdGVzKSkKICAgIChkb2xpc3QgKHNy YyBzb3VyY2VzIChjb25zICgrIDMgbWF4LWxlbikgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKICAg ICAgKGxldCogKChmYWNlIChwbGlzdC1nZXQgc3JjIDpmYWNlKSkKICAgICAgICAgICAgIChjYXQg KHBsaXN0LWdldCBzcmMgOmNhdGVnb3J5KSkKICAgICAgICAgICAgIChpdGVtcyAocGxpc3QtZ2V0 IHNyYyA6aXRlbXMpKQogICAgICAgICAgICAgKGl0ZW1zIChpZiAoZnVuY3Rpb25wIGl0ZW1zKSAo ZnVuY2FsbCBpdGVtcykgaXRlbXMpKSkKICAgICAgICAoZG9saXN0IChpdGVtIGl0ZW1zKQogICAg ICAgICAgKGxldCogKChjYW5kIChjb25jYXQgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRv ZnUtY2hhciBpZHgpKSBpdGVtKSkKICAgICAgICAgICAgICAgICAobGVuIChsZW5ndGggY2FuZCkp KQogICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAwIDEgKGxpc3QgJ2ludmlzaWJsZSB0 ICdjb25zdWx0LW11bHRpIChjb25zIGNhdCBpdGVtKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FuZCkKICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IDEgbGVuICdmYWNl IGZhY2UgY2FuZCkKICAgICAgICAgICAgKHdoZW4gKD4gbGVuIG1heC1sZW4pIChzZXRxIG1heC1s ZW4gbGVuKSkKICAgICAgICAgICAgKHB1c2ggY2FuZCBjYW5kaWRhdGVzKSkpKQogICAgICAoc2V0 cSBpZHggKDErIGlkeCkpKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktcHJlcHJvY2VzcyAoc291 cmNlcykKICAiUHJlcHJvY2VzcyBTT1VSQ0VTLCBmaWx0ZXIgYnkgcHJlZGljYXRlLiIKICAoc2Vx LWZpbHRlciAobGFtYmRhIChzcmMpCiAgICAgICAgICAgICAgICAoaWYtbGV0IChwcmVkIChwbGlz dC1nZXQgc3JjIDpwcmVkaWNhdGUpKQogICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIHByZWQp CiAgICAgICAgICAgICAgICAgIHQpKQogICAgICAgICAgICAgIChtYXBjYXIgKGxhbWJkYSAoc3Jj KQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN5bWJvbHAgc3JjKSAoc3ltYm9sLXZhbHVl IHNyYykgc3JjKSkKICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMpKSkKCihkZWZ1biBjb25z dWx0LS1tdWx0aSAocHJvbXB0IHNvdXJjZXMgJnJlc3Qgb3B0aW9ucykKICAiU2VsZWN0IGZyb20g Y2FuZGlkYXRlcyB0YWtlbiBmcm9tIGEgbGlzdCBvZiBTT1VSQ0VTLgoKUFJPTVBUIGlzIHRoZSBt aW5pYnVmZmVyIHByb21wdC4KT1BUSU9OUyBpcyB0aGUgcGxpc3Qgb2Ygb3B0aW9ucyBwYXNzZWQg dG8gYGNvbnN1bHQtLXJlYWQnLgoKVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNlbGVjdGVkIGNh bmRpZGF0ZSBpbiB0aGUgZm9ybSAoY29ucyBjYW5kaWRhdGUKc291cmNlLXZhbHVlKS4gVGhlIHNv dXJjZXMgb2YgdGhlIHNvdXJjZSBsaXN0IGNhbiBlaXRoZXIgYmUgc3ltYm9scyBvZiBzb3VyY2UK dmFyaWFibGVzIG9yIHNvdXJjZSB2YWx1ZXMuIFNvdXJjZSB2YWx1ZXMgbXVzdCBiZSBwbGlzdHMg d2l0aCB0aGUgZm9sbG93aW5nCmZpZWxkczoKClJlcXVpcmVkIHNvdXJjZSBmaWVsZHM6CiogOmNh dGVnb3J5IC0gQ29tcGxldGlvbiBjYXRlZ29yeS4KKiA6aXRlbXMgLSBMaXN0IG9mIGNhbmRpZGF0 ZSBzdHJpbmdzIG9yIGZ1bmN0aW9uIHJldHVybmluZyBsaXN0IG9mIHN0cmluZ3MuCgpPcHRpb25h bCBzb3VyY2UgZmllbGRzOgoqIDpuYW1lIC0gTmFtZSBvZiB0aGUgc291cmNlLCB1c2VkIGZvciBu YXJyb3dpbmcgYW5kIGFubm90YXRpb24uCiogOm5hcnJvdyAtIE5hcnJvd2luZyBjaGFyYWN0ZXIg b3IgKGNoYXJhY3RlciAuIHN0cmluZykgcGFpci4KKiA6cHJlZGljYXRlIC0gRnVuY3Rpb24gd2hp Y2ggbXVzdCByZXR1cm4gdCBpZiB0aGUgc291cmNlIGlzIGVuYWJsZWQuCiogOmZhY2UgLSBGYWNl IHVzZWQgZm9yIGhpZ2hsaWdodGluZyB0aGUgY2FuZGlkYXRlcy4KKiA6YW5ub3RhdGUgLSBBbm5v dGF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybnMgc3RyaW5n LgoqIDpoaXN0b3J5IC0gTmFtZSBvZiBoaXN0b3J5IHZhcmlhYmxlIHRvIGFkZCBzZWxlY3RlZCBj YW5kaWRhdGUuCiogQXJiaXRyYXJ5IG90aGVyIGZpZWxkcyBzcGVjaWZpYyB0byB5b3VyIHVzZSBj YXNlLiIKICAobGV0KiAoKHNvdXJjZXMgKGNvbnN1bHQtLW11bHRpLXByZXByb2Nlc3Mgc291cmNl cykpCiAgICAgICAgIChjYW5kaWRhdGVzCiAgICAgICAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MKICAgICAgICAgICAobGV0ICgoY29uc3VsdC0tY2FjaGUpKQogICAgICAgICAgICAgKGNv bnN1bHQtLW11bHRpLWNhbmRpZGF0ZXMgc291cmNlcykpKSkKICAgICAgICAgKHNlbGVjdGVkIChh cHBseSAjJ2NvbnN1bHQtLXJlYWQgcHJvbXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNk ciBjYW5kaWRhdGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgIDpjYXRlZ29yeSAgJ2NvbnN1 bHQtbXVsdGkKICAgICAgICAgICAgICAgICAgICAgICAgICA6cHJlZGljYXRlIChjb25zdWx0LS1t dWx0aS1wcmVkaWNhdGUgc291cmNlcykKICAgICAgICAgICAgICAgICAgICAgICAgICA6bmFycm93 ICAgIChjb25zdWx0LS1tdWx0aS1uYXJyb3cgc291cmNlcykKICAgICAgICAgICAgICAgICAgICAg ICAgICA6YW5ub3RhdGUgIChjb25zdWx0LS1tdWx0aS1hbm5vdGF0ZSBzb3VyY2VzIChjYXIgY2Fu ZGlkYXRlcykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmxvb2t1cCAgICAoY29uc3VsdC0t bXVsdGktbG9va3VwIHNvdXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucykp KQogICAgKHdoZW4tbGV0IChoaXN0b3J5IChwbGlzdC1nZXQgKGNkciBzZWxlY3RlZCkgOmhpc3Rv cnkpKQogICAgICAoYWRkLXRvLWhpc3RvcnkgaGlzdG9yeSAoY2FyIHNlbGVjdGVkKSkpCiAgICBz ZWxlY3RlZCkpCgo7Ozs7IEludGVybmFsIEFQSTogY29uc3VsdC0tcHJvbXB0CgooY2wtZGVmdW4g Y29uc3VsdC0tcHJvbXB0IChwcm9tcHQgJmtleSBoaXN0b3J5IGFkZC1oaXN0b3J5IGluaXRpYWwg ZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bWFwIHByZXZpZXcg KHByZXZpZXcta2V5IGNvbnN1bHQtcHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodHJhbnNmb3JtIChsYW1iZGEgKF8geCkgeCkpKQogICJSZWFkIGZyb20gbWlu aWJ1ZmZlci4KClBST01QVCBpcyB0aGUgc3RyaW5nIHRvIHByb21wdCB3aXRoLgpUUkFOU0ZPUk0g aXMgYSBmdW5jdGlvbiB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGlucHV0IHN0cmlu Zy4KSElTVE9SWSBpcyB0aGUgc3ltYm9sIG9mIHRoZSBoaXN0b3J5IHZhcmlhYmxlLgpJTklUSUFM IGlzIGluaXRpYWwgaW5wdXQuCkRFRkFVTFQgaXMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUu CkFERC1ISVNUT1JZIGlzIGEgbGlzdCBvZiBpdGVtcyB0byBhZGQgdG8gdGhlIGhpc3RvcnkuClBS RVZJRVcgaXMgYSBwcmV2aWV3IGZ1bmN0aW9uLCBzZWUgYGNvbnN1bHQtLXdpdGgtcHJldmlldycu ClBSRVZJRVctS0VZIGFyZSB0aGUgcHJldmlldyBrZXlzIChuaWwsICdhbnksIGEgc2luZ2xlIGtl eSBvciBhIGxpc3Qgb2Yga2V5cykuCktFWU1BUCBpcyBhIGNvbW1hbmQtc3BlY2lmaWMga2V5bWFw LiIKICAoY29uc3VsdC0tbWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2sKICAgICAgKDphcHBlbmQg KGxhbWJkYSAoKQogICAgICAgICAgICAgICAgIChjb25zdWx0LS1zZXR1cC1rZXltYXAga2V5bWFw IG5pbCBuaWwgcHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFkZC1oaXN0 b3J5IGFkZC1oaXN0b3J5KSkpCiAgICAoY29uc3VsdC0td2l0aC1wcmV2aWV3IHByZXZpZXcta2V5 IHByZXZpZXcgdHJhbnNmb3JtICMnbWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzCiAg ICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlciBwcm9tcHQgaW5pdGlhbCBuaWwgbmlsIGhpc3Rvcnkg ZGVmYXVsdCkpKSkKCihhZHZpY2UtYWRkICMnY29uc3VsdC0tcHJvbXB0IDpmaWx0ZXItYXJncyAj J2NvbnN1bHQtLW1lcmdlLWNvbmZpZykKCjs7OzsgQ29tbWFuZHMKCjs7Ozs7IENvbW1hbmQ6IGNv bnN1bHQtbXVsdGktb2NjdXIKCjs7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmF4b2Q1MDIvc2Vs ZWN0cnVtL2lzc3Vlcy8yMjYKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbXVsdGktb2Nj dXIgKGJ1ZnMgcmVnZXhwICZvcHRpb25hbCBubGluZXMpCiAgIkltcHJvdmVkIHZlcnNpb24gb2Yg YG11bHRpLW9jY3VyJyBiYXNlZCBvbiBgY29tcGxldGluZy1yZWFkLW11bHRpcGxlJy4KClNlZSBg bXVsdGktb2NjdXInIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgYXJndW1lbnRzIEJVRlMsIFJFR0VY UCBhbmQgTkxJTkVTLiIKICAoaW50ZXJhY3RpdmUgKGNvbnMKICAgICAgICAgICAgICAgIChtYXBj YXIgIydnZXQtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW5nLXJlYWQt bXVsdGlwbGUgIkJ1ZmZlcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMnaW50ZXJuYWwtY29tcGxldGUtYnVmZmVyKSkKICAgICAgICAgICAgICAg IChvY2N1ci1yZWFkLXByaW1hcnktYXJncykpKQogIChvY2N1ci0xIHJlZ2V4cCBubGluZXMgYnVm cykpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW91dGxpbmUKCihkZWZ1biBjb25zdWx0LS1vdXRs aW5lLWNhbmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIG91dGxpbmUgaGVhZGluZ3MgYW5k IHBvc2l0aW9ucy4iCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChjb25zdWx0LS1m b250aWZ5LWFsbCkKICAobGV0KiAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyAocG9pbnQtbWlu KSBjb25zdWx0LWxpbmUtbnVtYmVycy13aWRlbikpCiAgICAgICAgIChoZWFkaW5nLXJlZ2V4cCAo Y29uY2F0ICJeXFwoPzoiIG91dGxpbmUtcmVnZXhwICJcXCkiKSkKICAgICAgICAgKGNhbmRpZGF0 ZXMpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAg ICAgICh3aGlsZSAoc2F2ZS1leGN1cnNpb24gKHJlLXNlYXJjaC1mb3J3YXJkIGhlYWRpbmctcmVn ZXhwIG5pbCB0KSkKICAgICAgICAoc2V0cSBsaW5lICgrIGxpbmUgKGNvbnN1bHQtLWNvdW50LWxp bmVzIChtYXRjaC1iZWdpbm5pbmcgMCkpKSkKICAgICAgICAocHVzaCAobGlzdCAocG9pbnQtbWFy a2VyKSBsaW5lCiAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKGxpbmUtYmVn aW5uaW5nLXBvc2l0aW9uKSAobGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgICAgICAgICBjYW5k aWRhdGVzKQogICAgICAgICh1bmxlc3MgKGVvYnApIChmb3J3YXJkLWNoYXIgMSkpKSkKICAgICh1 bmxlc3MgY2FuZGlkYXRlcwogICAgICAodXNlci1lcnJvciAiTm8gaGVhZGluZ3MiKSkKICAgIChj b25zdWx0LS1hZGQtbGluZS1udW1iZXIgbGluZSAobnJldmVyc2UgY2FuZGlkYXRlcykpKSkKCjs7 OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LW91dGxpbmUgKCkKICAiSnVtcCB0byBhbiBvdXRs aW5lIGhlYWRpbmcsIG9idGFpbmVkIGJ5IG1hdGNoaW5nIGFnYWluc3QgYG91dGxpbmUtcmVnZXhw Jy4KClRoaXMgY29tbWFuZCBzdXBwb3J0cyBjYW5kaWRhdGUgcHJldmlldy4KVGhlIHN5bWJvbCBh dCBwb2ludCBpcyBhZGRlZCB0byB0aGUgZnV0dXJlIGhpc3RvcnkuIgogIChpbnRlcmFjdGl2ZSkK ICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0tcmVhZAogICAgIkdvIHRvIGhlYWRpbmc6ICIK ICAgIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tb3V0bGluZS1jYW5kaWRh dGVzKSkKICAgIDpjYXRlZ29yeSAnY29uc3VsdC1sb2NhdGlvbgogICAgOnNvcnQgbmlsCiAgICA6 cmVxdWlyZS1tYXRjaCB0CiAgICA6bG9va3VwICMnY29uc3VsdC0tbGluZS1tYXRjaAogICAgOmhp c3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0b3J5ICh0 aGluZy1hdC1wb2ludCAnc3ltYm9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9z aXRpb24pKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWVycm9yCgooZGVmdW4gY29uc3VsdC0t ZXJyb3ItY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2YgZXJyb3JzIGFuZCBwb3NpdGlv bnMuIgogIChsZXQgKChjYW5kaWRhdGVzKQogICAgICAgIChwb3MgKHBvaW50LW1pbikpKQogICAg KHNhdmUtZXhjdXJzaW9uCiAgICAgICh3aGlsZSAoc2V0cSBwb3MgKGNvbXBpbGF0aW9uLW5leHQt c2luZ2xlLXByb3BlcnR5LWNoYW5nZSBwb3MgJ2NvbXBpbGF0aW9uLW1lc3NhZ2UpKQogICAgICAg ICh3aGVuLWxldCogKChtc2cgKGdldC10ZXh0LXByb3BlcnR5IHBvcyAnY29tcGlsYXRpb24tbWVz c2FnZSkpCiAgICAgICAgICAgICAgICAgICAgKGxvYyAoY29tcGlsYXRpb24tLW1lc3NhZ2UtPmxv YyBtc2cpKSkKICAgICAgICAgIChnb3RvLWNoYXIgcG9zKQogICAgICAgICAgKHB1c2ggKGxpc3QK ICAgICAgICAgICAgICAgICAoY29uc3VsdC0tZm9udC1sb2NrIChidWZmZXItc3Vic3RyaW5nIHBv cyAobGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlcgogICAgICAgICAgICAgICAgICAgICA7OyB0YWtlbiBmcm9tIGNvbXBpbGUuZWwKICAgICAg ICAgICAgICAgICAgICAgKGFwcGx5ICMnY29tcGlsYXRpb24tZmluZC1maWxlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocG9pbnQtbWFya2VyKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNhYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmZpbGUtc3RydWN0IGxvYykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2FkYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmZpbGUtc3RydWN0IGxv YykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGlsYXRpb24tLWZpbGUtc3RydWN0 LT5mb3JtYXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBpbGF0aW9uLS1sb2Mt PmZpbGUtc3RydWN0IGxvYykpKQogICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAgICAgICAgICAgICAgICAgIDs7IGxvY2F0aW9uIG1pZ2h0IGJlIGludmFsaWQgYnkg bm93CiAgICAgICAgICAgICAgICAgICAoaWdub3JlLWVycm9ycwogICAgICAgICAgICAgICAgICAg ICAoZm9yd2FyZC1saW5lICgtIChjb21waWxhdGlvbi0tbG9jLT5saW5lIGxvYykgMSkpCiAgICAg ICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmNvbCBsb2Mp KSkKICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXJrZXIpKQogICAgICAgICAgICAgICAgIChw Y2FzZSAoY29tcGlsYXRpb24tLW1lc3NhZ2UtPnR5cGUgbXNnKQogICAgICAgICAgICAgICAgICAg KDAgP2kpCiAgICAgICAgICAgICAgICAgICAoMSA/dykKICAgICAgICAgICAgICAgICAgIChfID9l KSkpCiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKSkpKQogICAgKG5yZXZlcnNlIGNhbmRpZGF0 ZXMpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWVycm9yICgpCiAgIkp1bXAgdG8g YSBjb21waWxhdGlvbiBlcnJvciBpbiB0aGUgY3VycmVudCBidWZmZXIuCgpUaGlzIGNvbW1hbmQg d29ya3MgaW4gY29tcGlsYXRpb24gYnVmZmVycyBhbmQgZ3JlcCBidWZmZXJzLgpUaGUgY29tbWFu ZCBzdXBwb3J0cyBwcmV2aWV3IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZXJyb3IuIgogIChp bnRlcmFjdGl2ZSkKICAodW5sZXNzIChjb21waWxhdGlvbi1idWZmZXItcCAoY3VycmVudC1idWZm ZXIpKQogICAgKHVzZXItZXJyb3IgIk5vdCBhIGNvbXBpbGF0aW9uIGJ1ZmZlciIpKQogIChjb25z dWx0LS1qdW1wCiAgIChjb25zdWx0LS1yZWFkCiAgICAiR28gdG8gZXJyb3I6ICIKICAgIChjb25z dWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tZXJyb3ItY2FuZGlkYXRlcykpCiAgICA6 Y2F0ZWdvcnkgJ2NvbnN1bHQtZXJyb3IKICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2gg dAogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1jYWRyCiAgICA6bmFycm93IGAoLChsYW1i ZGEgKGNhbmQpICg9IChjYWRkciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpKQogICAgICAgICAgICAg ICg/ZSAuICJFcnJvciIpCiAgICAgICAgICAgICAgKD93IC4gIldhcm5pbmciKQogICAgICAgICAg ICAgICg/aSAuICJJbmZvIikpCiAgICA6aGlzdG9yeSAnKDppbnB1dCBjb25zdWx0LS1lcnJvci1o aXN0b3J5KQogICAgOnByZXZpZXcKICAgIChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uICdjb25z dWx0LXByZXZpZXctZXJyb3IpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW1hcmsKCihkZWZ1 biBjb25zdWx0LS1tYXJrLWNhbmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGNv bnRhaW5pbmcgbWFya2Vycy4KVGhlIGFsaXN0IGNvbnRhaW5zIChzdHJpbmcgLiBwb3NpdGlvbikg cGFpcnMuIgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAodW5sZXNzIChtYXJrZXIt cG9zaXRpb24gKG1hcmstbWFya2VyKSkKICAgICh1c2VyLWVycm9yICJObyBtYXJrcyIpKQogIChj b25zdWx0LS1mb250aWZ5LWFsbCkKICAobGV0KiAoKG1heC1saW5lIDApCiAgICAgICAgIChjYW5k aWRhdGVzKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZG9saXN0IChtYXJrZXIgKGNvbnMg KG1hcmstbWFya2VyKSBtYXJrLXJpbmcpKQogICAgICAgIChsZXQgKChwb3MgKG1hcmtlci1wb3Np dGlvbiBtYXJrZXIpKSkKICAgICAgICAgICh3aGVuIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykK ICAgICAgICAgICAgKGdvdG8tY2hhciBwb3MpCiAgICAgICAgICAgIDs7IGBsaW5lLW51bWJlci1h dC1wb3MnIGlzIGEgdmVyeSBzbG93IGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQg ZXZlcnl3aGVyZS4KICAgICAgICAgICAgOzsgSG93ZXZlciBpbiB0aGlzIGNhc2UgdGhlIHNsb3cg bGluZS1udW1iZXItYXQtcG9zIGRvZXMgbm90IGh1cnQgbXVjaCwgc2luY2UKICAgICAgICAgICAg OzsgdGhlIG1hcmsgcmluZyBpcyB1c3VhbGx5IHNtYWxsIHNpbmNlIGl0IGlzIGxpbWl0ZWQgYnkg YG1hcmstcmluZy1tYXgnLgogICAgICAgICAgICAobGV0ICgobGluZSAobGluZS1udW1iZXItYXQt cG9zIHBvcyBjb25zdWx0LWxpbmUtbnVtYmVycy13aWRlbikpKQogICAgICAgICAgICAgIChzZXRx IG1heC1saW5lIChtYXggbGluZSBtYXgtbGluZSkpCiAgICAgICAgICAgICAgKHB1c2ggKGxpc3Qg bWFya2VyIGxpbmUgKGNvbnN1bHQtLWxpbmUtd2l0aC1jdXJzb3IgbWFya2VyKSkKICAgICAgICAg ICAgICAgICAgICBjYW5kaWRhdGVzKSkpKSkpCiAgICAobnJldmVyc2UgKGNvbnN1bHQtLXJlbW92 ZS1kdXBzIChjb25zdWx0LS1hZGQtbGluZS1udW1iZXIgbWF4LWxpbmUgY2FuZGlkYXRlcykpKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1tYXJrICgpCiAgIkp1bXAgdG8gYSBtYXJr ZXIgaW4gdGhlIGJ1ZmZlci1sb2NhbCBgbWFyay1yaW5nJy4KClRoZSBjb21tYW5kIHN1cHBvcnRz IHByZXZpZXcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXJrZXIgcG9zaXRpb24uClRoZSBz eW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJh Y3RpdmUpCiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1bHQtLXJlYWQKICAgICJHbyB0byBtYXJr OiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MgKGNvbnN1bHQtLW1hcmstY2FuZGlk YXRlcykpCiAgICA6Y2F0ZWdvcnkgJ2NvbnN1bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAg OnJlcXVpcmUtbWF0Y2ggdAogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbgog ICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0 b3J5ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZp ZXctcG9zaXRpb24pKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWdsb2JhbC1tYXJrCgooZGVm dW4gY29uc3VsdC0tZ2xvYmFsLW1hcmstY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2Yg bGluZXMgY29udGFpbmluZyBtYXJrZXJzLgoKVGhlIGFsaXN0IGNvbnRhaW5zIChzdHJpbmcgLiBw b3NpdGlvbikgcGFpcnMuIgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAobGV0ICgo Y2FuZGlkYXRlcykpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGRvbGlzdCAobWFya2VyIGds b2JhbC1tYXJrLXJpbmcpCiAgICAgICAgKGxldCAoKHBvcyAobWFya2VyLXBvc2l0aW9uIG1hcmtl cikpCiAgICAgICAgICAgICAgKGJ1ZiAobWFya2VyLWJ1ZmZlciBtYXJrZXIpKSkKICAgICAgICAg ICh3aGVuIChhbmQgcG9zIChidWZmZXItbGl2ZS1wIGJ1ZikgKG5vdCAobWluaWJ1ZmZlcnAgYnVm KSkpCiAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAgICAgICAgICh3 aGVuIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykKICAgICAgICAgICAgICAgIChnb3RvLWNoYXIg cG9zKQogICAgICAgICAgICAgICAgOzsgYGxpbmUtbnVtYmVyLWF0LXBvcycgaXMgc2xvdywgc2Vl IGNvbW1lbnQgaW4gYGNvbnN1bHQtLW1hcmstY2FuZGlkYXRlcycuCiAgICAgICAgICAgICAgICAo bGV0KiAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyBwb3MgY29uc3VsdC1saW5lLW51bWJlcnMt d2lkZW4pKQogICAgICAgICAgICAgICAgICAgICAgIChiZWdpbiAobGluZS1iZWdpbm5pbmctcG9z aXRpb24pKQogICAgICAgICAgICAgICAgICAgICAgIChlbmQgKGxpbmUtZW5kLXBvc2l0aW9uKSkK ICAgICAgICAgICAgICAgICAgICAgICAobG9jIChjb25zdWx0LS1mb3JtYXQtbG9jYXRpb24gKGJ1 ZmZlci1uYW1lIGJ1ZikgbGluZSkpKQogICAgICAgICAgICAgICAgICAoY29uc3VsdC0tZm9udGlm eS1yZWdpb24gYmVnaW4gZW5kKQogICAgICAgICAgICAgICAgICAocHVzaCAoY29uY2F0CiAgICAg ICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgICAgICAg IChjb25jYXQgKHByb3BlcnRpemUgKGNvbnN1bHQtLWVuY29kZS1sb2NhdGlvbiBtYXJrZXIpICdp bnZpc2libGUgdCkgbG9jKQogICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zdWx0LWxvY2F0 aW9uIChjb25zIG1hcmtlciBsaW5lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0 LS1yZWdpb24td2l0aC1jdXJzb3IgYmVnaW4gZW5kIG1hcmtlcikpCiAgICAgICAgICAgICAgICAg ICAgICAgIGNhbmRpZGF0ZXMpKSkpKSkpKQogICAgKHVubGVzcyBjYW5kaWRhdGVzCiAgICAgICh1 c2VyLWVycm9yICJObyBnbG9iYWwgbWFya3MiKSkKICAgIChucmV2ZXJzZSAoY29uc3VsdC0tcmVt b3ZlLWR1cHMgY2FuZGlkYXRlcykpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWds b2JhbC1tYXJrICgpCiAgIkp1bXAgdG8gYSBtYXJrZXIgaW4gYGdsb2JhbC1tYXJrLXJpbmcnLgoK VGhlIGNvbW1hbmQgc3VwcG9ydHMgcHJldmlldyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG1h cmtlciBwb3NpdGlvbi4KVGhlIHN5bWJvbCBhdCBwb2ludCBpcyBhZGRlZCB0byB0aGUgZnV0dXJl IGhpc3RvcnkuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0t cmVhZAogICAgIkdvIHRvIGdsb2JhbCBtYXJrOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MgKGNvbnN1bHQtLWdsb2JhbC1tYXJrLWNhbmRpZGF0ZXMpKQogICAgOzsgV2hpbGUgYGNv bnN1bHQtZ2xvYmFsLW1hcmsnIGZvcm1hdHMgdGhlIGNhbmRpZGF0ZXMgaW4gZ3JlcC1saWtlCiAg ICA7OyBzdHlsZSwgd2UgYXJlIHN0aWxsIG5vdCB1c2luZyB0aGUgJ3hyZWYtbG9jYXRpb24gY2F0 ZWdvcnksCiAgICA7OyBzaW5jZSB0aGUgbG9jYXRpb25zIGFyZSBmb3JtYXR0ZWQgdXNpbmcgYWJi cmV2aWF0ZWQgYnVmZmVyCiAgICA7OyBuYW1lcyBpbnN0ZWFkIG9mIGZpbGUgcGF0aHMuIElmIHRo ZSAneHJlZi1sb2NhdGlvbiBjYXRlZ29yeQogICAgOzsgd291bGQgYmUgdXNlZCwgRW1iYXJrIHdv dWxkIGVtYmFyay1leHBvcnQgdG8gYSBicm9rZW4gZ3JlcC1tb2RlCiAgICA7OyBidWZmZXIuIEJ5 IHVzaW5nIHRoZSAnY29uc3VsdC1sb2NhdGlvbiBjYXRlZ29yeSwgRW1iYXJrIHdpbGwKICAgIDs7 IGV4cG9ydCB0byBhbiBvY2N1ciBidWZmZXIgaW5zdGVhZCEgU2VlIGFsc28KICAgIDs7IGh0dHBz Oi8vZ2l0aHViLmNvbS9taW5hZC9jb25zdWx0L2lzc3Vlcy8xMDcuCiAgICA6Y2F0ZWdvcnkgJ2Nv bnN1bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOmxv b2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbgogICAgOmhpc3RvcnkgJyg6aW5wdXQgY29u c3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0b3J5ICh0aGluZy1hdC1wb2ludCAnc3lt Ym9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkpCgo7Ozs7OyBD b21tYW5kOiBjb25zdWx0LWxpbmUKCihkZWZ1biBjb25zdWx0LS1saW5lLWNhbmRpZGF0ZXMgKCkK ICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGFuZCBwb3NpdGlvbnMuIgogIChjb25zdWx0LS1mb3Ji aWQtbWluaWJ1ZmZlcikKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxldCogKChkZWZhdWx0 LWNhbmQpCiAgICAgICAgIChjYW5kaWRhdGVzKQogICAgICAgICAobGluZSAobGluZS1udW1iZXIt YXQtcG9zIChwb2ludC1taW4pIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAg KGN1cnItbGluZSAobGluZS1udW1iZXItYXQtcG9zIChwb2ludCkgY29uc3VsdC1saW5lLW51bWJl cnMtd2lkZW4pKQogICAgICAgICAobGluZS13aWR0aCAobGVuZ3RoIChudW1iZXItdG8tc3RyaW5n IChsaW5lLW51bWJlci1hdC1wb3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBvaW50LW1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4pKSkpCiAgICAgICAgIChk ZWZhdWx0LWNhbmQtZGlzdCBtb3N0LXBvc2l0aXZlLWZpeG51bSkpCiAgICAoY29uc3VsdC0tZWFj aC1saW5lIGJlZyBlbmQKICAgICAgKGxldCAoKHN0ciAoYnVmZmVyLXN1YnN0cmluZyBiZWcgZW5k KSkpCiAgICAgICAgKHVubGVzcyAoc3RyaW5nLWJsYW5rLXAgc3RyKQogICAgICAgICAgKGxldCAo KGNhbmQgKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1saW5lLW51bWJl ci1wcmVmaXggKHBvaW50LW1hcmtlcikgbGluZSBsaW5lLXdpZHRoKQogICAgICAgICAgICAgICAg ICAgICAgIHN0cikpCiAgICAgICAgICAgICAgICAoZGlzdCAoYWJzICgtIGN1cnItbGluZSBsaW5l KSkpKQogICAgICAgICAgICAod2hlbiAoPCBkaXN0IGRlZmF1bHQtY2FuZC1kaXN0KQogICAgICAg ICAgICAgIChzZXRxIGRlZmF1bHQtY2FuZCBjYW5kCiAgICAgICAgICAgICAgICAgICAgZGVmYXVs dC1jYW5kLWRpc3QgZGlzdCkpCiAgICAgICAgICAgIChwdXNoIGNhbmQgY2FuZGlkYXRlcykpKQog ICAgICAgIChzZXRxIGxpbmUgKDErIGxpbmUpKSkpCiAgICAodW5sZXNzIGNhbmRpZGF0ZXMKICAg ICAgKHVzZXItZXJyb3IgIk5vIGxpbmVzIikpCiAgICAoY29ucyBkZWZhdWx0LWNhbmQgKG5yZXZl cnNlIGNhbmRpZGF0ZXMpKSkpCgooZGVmdW4gY29uc3VsdC0tbGluZS1tYXRjaCAoaW5wdXQgY2Fu ZGlkYXRlcyBjYW5kKQogICJMb29rdXAgcG9zaXRpb24gb2YgbWF0Y2guCgpJTlBVVCBpcyB0aGUg aW5wdXQgc3RyaW5nIGVudGVyZWQgYnkgdGhlIHVzZXIuCkNBTkRJREFURVMgaXMgdGhlIGxpbmUg Y2FuZGlkYXRlcyBhbGlzdC4KQ0FORCBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbmRpZGF0 ZS4iCiAgKHdoZW4tbGV0IChwb3MgKGNvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbiBpbnB1dCBjYW5k aWRhdGVzIGNhbmQpKQogICAgKGlmIChvciAoc3RyaW5nLWJsYW5rLXAgaW5wdXQpCiAgICAgICAg ICAgIChlcSBjb25zdWx0LWxpbmUtcG9pbnQtcGxhY2VtZW50ICdsaW5lLWJlZ2lubmluZykpCiAg ICAgICAgcG9zCiAgICAgIDs7IFN0cmlwIHVuaXF1ZSBsaW5lIG51bWJlciBwcmVmaXgKICAgICAg KGxldCAoKGkgMCkKICAgICAgICAgICAgKG4gKGxlbmd0aCBjYW5kKSkKICAgICAgICAgICAgKGNt aW4gY29uc3VsdC0tdG9mdS1jaGFyKQogICAgICAgICAgICAoY21heCAoLSAoKyBjb25zdWx0LS10 b2Z1LWNoYXIgY29uc3VsdC0tdG9mdS1yYW5nZSkgMSkpKQogICAgICAgICh3aGlsZSAoYW5kICg8 IGkgbikgKDw9IGNtaW4gKGFyZWYgY2FuZCBpKSBjbWF4KSkKICAgICAgICAgIChzZXRxIGkgKDEr IGkpKSkKICAgICAgICAod2hlbiAoPiBpIDApCiAgICAgICAgICAoc2V0cSBjYW5kIChzdWJzdHJp bmcgY2FuZCBpKSkpKQogICAgICAobGV0ICgoYmVnIDApCiAgICAgICAgICAgIChlbmQgKGxlbmd0 aCBjYW5kKSkKICAgICAgICAgICAgOzsgVXNlIGNvbnN1bHQtbG9jYXRpb24gY29tcGxldGlvbiBj YXRlZ29yeSB3aGVuIGZpbHRlcmluZyBsaW5lcwogICAgICAgICAgICAoZmlsdGVyIChjb25zdWx0 LS1jb21wbGV0aW9uLWZpbHRlciAnY29uc3VsdC1sb2NhdGlvbiBuaWwpKSkKICAgICAgICA7OyBG aW5kIG1hdGNoIGVuZCBwb3NpdGlvbiwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGVuZCB1 bnRpbAogICAgICAgIDs7IG1hdGNoaW5nIGZhaWxzCiAgICAgICAgKGxldCAoKHN0ZXAgMTYpKQog ICAgICAgICAgKHdoaWxlICg+IHN0ZXAgMCkKICAgICAgICAgICAgKHdoaWxlIChhbmQgKD4gKC0g ZW5kIHN0ZXApIDApCiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGZpbHRlciBpbnB1 dCAobGlzdCAoc3Vic3RyaW5nIGNhbmQgMCAoLSBlbmQgc3RlcCkpKSkpCiAgICAgICAgICAgICAg KHNldHEgZW5kICgtIGVuZCBzdGVwKSkpCiAgICAgICAgICAgIChzZXRxIHN0ZXAgKC8gc3RlcCAy KSkpKQogICAgICAgIDs7IEZpbmQgbWF0Y2ggYmVnaW5uaW5nIHBvc2l0aW9uLCByZW1vdmUgY2hh cmFjdGVycyBmcm9tIGxpbmUgYmVnaW5uaW5nCiAgICAgICAgOzsgdW50aWwgbWF0Y2hpbmcgZmFp bHMKICAgICAgICAod2hlbiAoZXEgY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gt YmVnaW5uaW5nKQogICAgICAgICAgKGxldCAoKHN0ZXAgMTYpKQogICAgICAgICAgICAod2hpbGUg KD4gc3RlcCAwKQogICAgICAgICAgICAgICh3aGlsZSAoYW5kICg8ICgrIGJlZyBzdGVwKSBlbmQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgZmlsdGVyIGlucHV0IChsaXN0IChz dWJzdHJpbmcgY2FuZCAoKyBiZWcgc3RlcCkgZW5kKSkpKQogICAgICAgICAgICAgICAgKHNldHEg YmVnICgrIGJlZyBzdGVwKSkpCiAgICAgICAgICAgICAgKHNldHEgc3RlcCAoLyBzdGVwIDIpKSkK ICAgICAgICAgICAgKHNldHEgZW5kIGJlZykpKQogICAgICAgIDs7IE1hcmtlciBjYW4gYmUgZGVh ZAogICAgICAgIChpZ25vcmUtZXJyb3JzICgrIHBvcyBlbmQpKSkpKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWxpbmUgKCZvcHRpb25hbCBpbml0aWFsKQogICJTZWFyY2ggZm9yIGEg bWF0Y2hpbmcgbGluZSBhbmQganVtcCB0byB0aGUgbGluZSBiZWdpbm5pbmcuCgpUaGUgZGVmYXVs dCBjYW5kaWRhdGUgaXMgYSBub24tZW1wdHkgbGluZSBjbG9zZXN0IHRvIHBvaW50LgpUaGlzIGNv bW1hbmQgb2JleXMgbmFycm93aW5nLiBPcHRpb25hbGx5IElOSVRJQUwgaW5wdXQgY2FuIGJlIHBy b3ZpZGVkLgpUaGUgc3ltYm9sIGF0IHBvaW50IGFuZCB0aGUgbGFzdCBgaXNlYXJjaC1zdHJpbmcn IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGludGVyYWN0aXZlKQogIChsZXQg KChjYW5kaWRhdGVzIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tbGluZS1j YW5kaWRhdGVzKSkpKQogICAgKGNvbnN1bHQtLWp1bXAKICAgICAoY29uc3VsdC0tcmVhZAogICAg ICAiR28gdG8gbGluZTogIiAoY2RyIGNhbmRpZGF0ZXMpCiAgICAgIDpjYXRlZ29yeSAnY29uc3Vs dC1sb2NhdGlvbgogICAgICA6c29ydCBuaWwKICAgICAgOmRlZmF1bHQtdG9wIG5pbAogICAgICA6 cmVxdWlyZS1tYXRjaCB0CiAgICAgIDs7IEFsd2F5cyBhZGQgbGFzdCBpc2VhcmNoIHN0cmluZyB0 byBmdXR1cmUgaGlzdG9yeQogICAgICA6YWRkLWhpc3RvcnkgKGxpc3QgKHRoaW5nLWF0LXBvaW50 ICdzeW1ib2wpIGlzZWFyY2gtc3RyaW5nKQogICAgICA6aGlzdG9yeSAnKDppbnB1dCBjb25zdWx0 LS1saW5lLWhpc3RvcnkpCiAgICAgIDpsb29rdXAgIydjb25zdWx0LS1saW5lLW1hdGNoCiAgICAg IDpkZWZhdWx0IChjYXIgY2FuZGlkYXRlcykKICAgICAgOzsgQWRkIGlzZWFyY2gtc3RyaW5nIGFz IGluaXRpYWwgaW5wdXQgaWYgc3RhcnRpbmcgZnJvbSBpc2VhcmNoCiAgICAgIDppbml0aWFsIChv ciBpbml0aWFsIChhbmQgaXNlYXJjaC1tb2RlIGlzZWFyY2gtc3RyaW5nKSkKICAgICAgOnByZXZp ZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1rZWVwLWxpbmVzCgooZGVmc3Vic3QgY29uc3VsdC0ta2VlcC1saW5lcy1yZXBsYWNlIChjb250 ZW50ICZvcHRpb25hbCBwb3MpCiAgIlJlcGxhY2UgYnVmZmVyIGNvbnRlbnQgd2l0aCBDT05URU5U IGFuZCBtb3ZlIHBvaW50IHRvIFBPUy4iCiAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBv aW50LW1heCkpCiAgKGluc2VydCBjb250ZW50KQogIChnb3RvLWNoYXIgKG9yIHBvcyAocG9pbnQt bWluKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWtlZXAtbGluZXMtc3RhdGUgKGZpbHRlcikKICAiU3Rh dGUgZnVuY3Rpb24gZm9yIGBjb25zdWx0LWtlZXAtbGluZXMnIHdpdGggRklMVEVSIGZ1bmN0aW9u LiIKICAobGV0ICgobGluZXMpCiAgICAgICAgKGJ1ZmZlci1vcmlnIChjdXJyZW50LWJ1ZmZlcikp CiAgICAgICAgKGZvbnQtbG9jay1vcmlnIGZvbnQtbG9jay1tb2RlKQogICAgICAgIChwb2ludC1v cmlnIChwb2ludCkpCiAgICAgICAgKGNvbnRlbnQtb3JpZyAoYnVmZmVyLXN0cmluZykpCiAgICAg ICAgKGxhc3QtaW5wdXQpKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChw dXNoIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpIGxpbmVzKSkKICAgIChzZXRxIGxpbmVzIChu cmV2ZXJzZSBsaW5lcykpCiAgICAobGFtYmRhIChpbnB1dCByZXN0b3JlKQogICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWZmZXItb3JpZwogICAgICAgIDs7IFJlc3RvcmluZyBjb250ZW50IGFu ZCBwb2ludCBwb3NpdGlvbgogICAgICAgICh3aGVuIChhbmQgcmVzdG9yZSBsYXN0LWlucHV0KQog ICAgICAgICAgOzsgTm8gdW5kbyByZWNvcmRpbmcsIG1vZGlmaWNhdGlvbiBob29rcywgYnVmZmVy IG1vZGlmaWVkLXN0YXR1cwogICAgICAgICAgKHdpdGgtc2lsZW50LW1vZGlmaWNhdGlvbnMgKGNv bnN1bHQtLWtlZXAtbGluZXMtcmVwbGFjZSBjb250ZW50LW9yaWcgcG9pbnQtb3JpZykpKQogICAg ICAgIDs7IENvbW1pdHRpbmcgb3IgbmV3IGlucHV0IHByb3ZpZGVkIC0+IFVwZGF0ZQogICAgICAg ICh3aGVuIChhbmQgaW5wdXQgOzsgSW5wdXQgaGFzIGJlZW4gcG92aWRlZAogICAgICAgICAgICAg ICAgICAgKG9yCiAgICAgICAgICAgICAgICAgICAgOzsgQ29tbWl0dGluZywgYnV0IG5vdCB3aXRo IGVtcHR5IGlucHV0CiAgICAgICAgICAgICAgICAgICAgKGFuZCByZXN0b3JlIChub3QgKHN0cmlu Zy1tYXRjaC1wICJeIT8gPyQiIGlucHV0KSkpCiAgICAgICAgICAgICAgICAgICAgOzsgSW5wdXQg aGFzIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAobm90IChlcXVhbCBpbnB1dCBsYXN0LWlu cHV0KSkpKQogICAgICAgICAgKGxldCAoKGZpbHRlcmVkLWNvbnRlbnQKICAgICAgICAgICAgICAg ICAoaWYgKHN0cmluZy1tYXRjaC1wICJeIT8gPyQiIGlucHV0KQogICAgICAgICAgICAgICAgICAg ICA7OyBTcGVjaWFsIGNhc2UgdGhlIGVtcHR5IGlucHV0IGZvciBwZXJmb3JtYW5jZS4KICAgICAg ICAgICAgICAgICAgICAgOzsgT3RoZXJ3aXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0IHRoZSBtaW5p YnVmZmVyIGlzIGVtcHR5LAogICAgICAgICAgICAgICAgICAgICA7OyBidXQgdGhlIGJ1ZmZlciBo YXMgbm90IGJlZW4gdXBkYXRlZC4KICAgICAgICAgICAgICAgICAgICAgY29udGVudC1vcmlnCiAg ICAgICAgICAgICAgICAgICAoaWYgcmVzdG9yZQogICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctam9pbiAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgbGluZXMpICJcbiIpCiAgICAgICAgICAgICAg ICAgICAgICh3aGlsZS1uby1pbnB1dAogICAgICAgICAgICAgICAgICAgICAgIDs7IEhlYXZ5IGNv bXB1dGF0aW9uIGlzIGludGVycnVwdGlibGUgaWYgKm5vdCogY29tbWl0dGluZyEKICAgICAgICAg ICAgICAgICAgICAgICA7OyBBbGxvY2F0ZSBuZXcgc3RyaW5nIGNhbmRpZGF0ZXMgc2luY2UgdGhl IG1hdGNoaW5nIGZ1bmN0aW9uIG11dGF0ZXMhCiAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1qb2luIChmdW5jYWxsIGZpbHRlciBpbnB1dCAobWFwY2FyICMnY29weS1zZXF1ZW5jZSBsaW5l cykpICJcbiIpKSkpKSkKICAgICAgICAgICAgKHdoZW4gKHN0cmluZ3AgZmlsdGVyZWQtY29udGVu dCkKICAgICAgICAgICAgICAod2hlbiBmb250LWxvY2stbW9kZSAoZm9udC1sb2NrLW1vZGUgLTEp KQogICAgICAgICAgICAgIChpZiByZXN0b3JlCiAgICAgICAgICAgICAgICAgIChhdG9taWMtY2hh bmdlLWdyb3VwCiAgICAgICAgICAgICAgICAgICAgOzsgRGlzYWJsZSBtb2RpZmljYXRpb24gaG9v a3MgZm9yIHBlcmZvcm1hbmNlCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKGluaGliaXQtbW9k aWZpY2F0aW9uLWhvb2tzIHQpKQogICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWtlZXAt bGluZXMtcmVwbGFjZSBmaWx0ZXJlZC1jb250ZW50KSkpCiAgICAgICAgICAgICAgICA7OyBObyB1 bmRvIHJlY29yZGluZywgbW9kaWZpY2F0aW9uIGhvb2tzLCBidWZmZXIgbW9kaWZpZWQtc3RhdHVz CiAgICAgICAgICAgICAgICAod2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucwogICAgICAgICAgICAg ICAgICAoY29uc3VsdC0ta2VlcC1saW5lcy1yZXBsYWNlIGZpbHRlcmVkLWNvbnRlbnQpCiAgICAg ICAgICAgICAgICAgIChzZXRxIGxhc3QtaW5wdXQgaW5wdXQpKSkpKSkKICAgICAgICA7OyBSZXN0 b3JlIGZvbnQtbG9jawogICAgICAgICh3aGVuIChhbmQgcmVzdG9yZSBmb250LWxvY2stb3JpZyAo bm90IGZvbnQtbG9jay1tb2RlKSkKICAgICAgICAgIChmb250LWxvY2stbW9kZSkpKSkpKQoKKGRl ZnVuIGNvbnN1bHQta2VlcC1saW5lcyAoJm9wdGlvbmFsIGZpbHRlciBpbml0aWFsKQogICJTZWxl Y3QgYSBzdWJzZXQgb2YgdGhlIGxpbmVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlciB3aXRoIGxpdmUg cHJldmlldy4KClRoZSBsaW5lcyBzZWxlY3RlZCBhcmUgdGhvc2UgdGhhdCBtYXRjaCB0aGUgbWlu aWJ1ZmZlciBpbnB1dC4KVGhpcyBjb21tYW5kIG9iZXlzIG5hcnJvd2luZy4KRklMVEVSIGlzIHRo ZSBmaWx0ZXIgZnVuY3Rpb24uCklOSVRJQUwgaXMgdGhlIGluaXRpYWwgaW5wdXQuIgogIDs7IFVz ZSBjb25zdWx0LWxvY2F0aW9uIGNvbXBsZXRpb24gY2F0ZWdvcnkgd2hlbiBmaWx0ZXJpbmcgbGlu ZXMKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWRpc3Bh dGNoICdjb25zdWx0LWxvY2F0aW9uICdoaWdobGlnaHQpKSkKICAoY29uc3VsdC0tZm9yYmlkLW1p bmlidWZmZXIpCiAgKGJhcmYtaWYtYnVmZmVyLXJlYWQtb25seSkKICAoY29uc3VsdC0td2l0aC1p bmNyZWFzZWQtZ2MKICAgKGNvbnN1bHQtLWZvbnRpZnktYWxsKQogICAoY29uc3VsdC0tcHJvbXB0 CiAgICAiS2VlcCBsaW5lczogIgogICAgOmluaXRpYWwgaW5pdGlhbAogICAgOmhpc3RvcnkgJ2Nv bnN1bHQtLWtlZXAtbGluZXMtaGlzdG9yeQogICAgOnByZXZpZXcgKGNvbnN1bHQtLWtlZXAtbGlu ZXMtc3RhdGUgZmlsdGVyKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1mb2N1cy1saW5lcwoK KGRlZnVuIGNvbnN1bHQtLWZvY3VzLWxpbmVzLXN0YXRlIChmaWx0ZXIpCiAgIlN0YXRlIGZ1bmN0 aW9uIGZvciBgY29uc3VsdC1mb2N1cy1saW5lcycgd2l0aCBGSUxURVIgZnVuY3Rpb24uIgogIChs ZXQgKChsaW5lcykgKG92ZXJsYXlzKSAobGFzdC1pbnB1dCkpCiAgICAoY29uc3VsdC0tZWFjaC1s aW5lIGJlZyBlbmQKICAgICAgKHB1c2ggKGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkgbGluZXMp CiAgICAgIChwdXNoIChtYWtlLW92ZXJsYXkgYmVnICgxKyBlbmQpKSBvdmVybGF5cykpCiAgICAo bGFtYmRhIChpbnB1dCByZXN0b3JlKQogICAgICA7OyBOZXcgaW5wdXQgcHJvdmlkZWQgLT4gVXBk YXRlCiAgICAgICh3aGVuIChhbmQgaW5wdXQgKG5vdCAoZXF1YWwgaW5wdXQgbGFzdC1pbnB1dCkp KQogICAgICAgIChpZiAoc3RyaW5nLW1hdGNoLXAgIl4hPyA/JCIgaW5wdXQpCiAgICAgICAgICAg IDs7IFNwZWNpYWwgY2FzZSB0aGUgZW1wdHkgaW5wdXQgZm9yIHBlcmZvcm1hbmNlLgogICAgICAg ICAgICAocHJvZ24KICAgICAgICAgICAgICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgICAgICAg ICAgICAgIChvdmVybGF5LXB1dCBvdiAnaW52aXNpYmxlIG5pbCkpCiAgICAgICAgICAgICAgKHNl dHEgbGFzdC1pbnB1dCBpbnB1dCkpCiAgICAgICAgICAobGV0KiAoKG5vdCAoc3RyaW5nLXByZWZp eC1wICIhICIgaW5wdXQpKQogICAgICAgICAgICAgICAgIChzdHJpcHBlZCAoc3RyaW5nLXJlbW92 ZS1wcmVmaXggIiEgIiBpbnB1dCkpCiAgICAgICAgICAgICAgICAgOzsgSGVhdnkgY29tcHV0YXRp b24gaXMgaW50ZXJydXB0aWJsZSBpZiAqbm90KiBjb21taXR0aW5nIQogICAgICAgICAgICAgICAg IChodCAoaWYgcmVzdG9yZQogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLXN0cmlu Zy1oYXNoIChmdW5jYWxsIGZpbHRlciBzdHJpcHBlZCBsaW5lcykpCiAgICAgICAgICAgICAgICAg ICAgICAgKHdoaWxlLW5vLWlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0t c3RyaW5nLWhhc2ggKGZ1bmNhbGwgZmlsdGVyIHN0cmlwcGVkIGxpbmVzKSkpKSkpCiAgICAgICAg ICAgICh3aGVuIChoYXNoLXRhYmxlLXAgaHQpCiAgICAgICAgICAgICAgKGxldCAoKG92IG92ZXJs YXlzKSAobGkgbGluZXMpKQogICAgICAgICAgICAgICAgKHdoaWxlIG92CiAgICAgICAgICAgICAg ICAgIChvdmVybGF5LXB1dCAoY2FyIG92KSAnaW52aXNpYmxlIChlcSBub3QgKGdldGhhc2ggKGNh ciBsaSkgaHQpKSkKICAgICAgICAgICAgICAgICAgKHNldHEgbGkgKGNkciBsaSkgb3YgKGNkciBv dikpKSkKICAgICAgICAgICAgICAoc2V0cSBsYXN0LWlucHV0IGlucHV0KSkpKSkKICAgICAgOzsg U3VjZXNzZnVsbHkgdGVybWluYXRlZCAtPiBSZW1lbWJlciBpbnZpc2libGUgb3ZlcmxheXMKICAg ICAgKHdoZW4gKGFuZCBpbnB1dCByZXN0b3JlKQogICAgICAgIChkb2xpc3QgKG92IG92ZXJsYXlz KQogICAgICAgICAgKGlmIChvdmVybGF5LWdldCBvdiAnaW52aXNpYmxlKQogICAgICAgICAgICAg IChwdXNoIG92IGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzKQogICAgICAgICAgICAoZGVs ZXRlLW92ZXJsYXkgb3YpKSkKICAgICAgICAoc2V0cSBvdmVybGF5cyBuaWwpKQogICAgICA7OyBX aGVuIHRlcm1pbmF0aW5nIC0+IERlc3Ryb3kgcmVtYWluaW5nIG92ZXJsYXlzCiAgICAgICh3aGVu IHJlc3RvcmUKICAgICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IG92ZXJsYXlzKSkpKSkKCihk ZWZ1biBjb25zdWx0LWZvY3VzLWxpbmVzICgmb3B0aW9uYWwgc2hvdyBmaWx0ZXIgaW5pdGlhbCkK ICAiSGlkZSBvciBzaG93IGxpbmVzIGFjY29yZGluZyB0byBGSUxURVIgZnVuY3Rpb24uCgpPcHRp b25hbGx5IElOSVRJQUwgaW5wdXQgY2FuIGJlIHByb3ZpZGVkLgpTSE9XIG11c3QgYmUgdCBpbiBv cmRlciB0byBzaG93IHRoZSBoaWRkZW4gbGluZXMuIgogIChpbnRlcmFjdGl2ZQogICA7OyBVc2Ug Y29uc3VsdC1sb2NhdGlvbiBjb21wbGV0aW9uIGNhdGVnb3J5IHdoZW4gZmlsdGVyaW5nIGxpbmVz CiAgIChsaXN0IGN1cnJlbnQtcHJlZml4LWFyZyAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIg J2NvbnN1bHQtbG9jYXRpb24gbmlsKSkpCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQog IChpZiBzaG93CiAgICAgIChwcm9nbgogICAgICAgIChtYXBjICMnZGVsZXRlLW92ZXJsYXkgY29u c3VsdC0tZm9jdXMtbGluZXMtb3ZlcmxheXMpCiAgICAgICAgKHNldHEgY29uc3VsdC0tZm9jdXMt bGluZXMtb3ZlcmxheXMgbmlsKSkKICAgIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYwogICAg IChjb25zdWx0LS1mb250aWZ5LWFsbCkKICAgICAoY29uc3VsdC0tcHJvbXB0CiAgICAgICJGb2N1 cyBvbiBsaW5lczogIgogICAgICA6aW5pdGlhbCBpbml0aWFsCiAgICAgIDpoaXN0b3J5ICdjb25z dWx0LS1rZWVwLWxpbmVzLWhpc3RvcnkKICAgICAgOnByZXZpZXcgKGNvbnN1bHQtLWZvY3VzLWxp bmVzLXN0YXRlIGZpbHRlcikpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWdvdG8tbGluZQoK Ozs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ290by1saW5lICgpCiAgIlJlYWQgbGluZSBu dW1iZXIgYW5kIGp1bXAgdG8gdGhlIGxpbmUgd2l0aCBwcmV2aWV3LgoKVGhlIGNvbW1hbmQgcmVz cGVjdHMgbmFycm93aW5nIGFuZCB0aGUgc2V0dGluZ3MKYGNvbnN1bHQtZ290by1saW5lLW51bWJl cnMnIGFuZCBgY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4nLiIKICAoaW50ZXJhY3RpdmUpCiAg KGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChjb25zdWx0LS1sb2NhbC1sZXQgKChkaXNw bGF5LWxpbmUtbnVtYmVycyBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzKQogICAgICAgICAgICAg ICAgICAgICAgIChkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbiBjb25zdWx0LWxpbmUtbnVtYmVy cy13aWRlbikpCiAgICAod2hpbGUgKGxldCAoKHJldCAoY29uc3VsdC0tcHJvbXB0CiAgICAgICAg ICAgICAgICAgICAgICAgIkdvIHRvIGxpbmU6ICIKICAgICAgICAgICAgICAgICAgICAgICA6cHJl dmlldyAoY29uc3VsdC0tcHJldmlldy1wb3NpdGlvbikKICAgICAgICAgICAgICAgICAgICAgICA6 dHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoXyBzdHIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKChsaW5lIChhbmQgc3RyCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaC1wICJeW1s6ZGln aXQ6XV0rJCIgc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctdG8tbnVtYmVyIHN0cikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocG9zIChhbmQgbGluZSAoY29uc3VsdC0tbGluZS1wb3NpdGlvbiBsaW5lKSkpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykg cG9zKSkpKSkpCiAgICAgICAgICAgICAoaWYtbGV0IChwb3MgKGNhciByZXQpKQogICAgICAgICAg ICAgICAgIChjb25zdWx0LS1qdW1wIHBvcykKICAgICAgICAgICAgICAgKG1pbmlidWZmZXItbWVz c2FnZSAoaWYgKHN0cmluZy1tYXRjaC1wICJeW1s6ZGlnaXQ6XV0rJCIgKGNkciByZXQpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGluZSBudW1iZXIgb3V0IG9mIHJh bmdlLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgZW50ZXIg YSBudW1iZXIuIikpCiAgICAgICAgICAgICAgIHQpKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1yZWNlbnQtZmlsZQoKKGRlZnVuIGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQgKCkKICAiUmVh ZCByZWNlbnQgZmlsZSB2aWEgYGNvbXBsZXRpbmctcmVhZCcuIgogIChjb25zdWx0LS1yZWFkCiAg ICJGaW5kIHJlY2VudCBmaWxlOiAiCiAgIChvciAobWFwY2FyICMnYWJicmV2aWF0ZS1maWxlLW5h bWUgcmVjZW50Zi1saXN0KQogICAgICAgKHVzZXItZXJyb3IgIk5vIHJlY2VudCBmaWxlcyIpKQog ICA6c29ydCBuaWwKICAgOnJlcXVpcmUtbWF0Y2ggdAogICA6Y2F0ZWdvcnkgJ2ZpbGUKICAgOmhp c3RvcnkgJ2ZpbGUtbmFtZS1oaXN0b3J5KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LXJlY2VudC1maWxlICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBjb21wbGV0aW5nLXJlYWQnLiIK ICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZSAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkp KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVjZW50LWZpbGUtb3RoZXItZnJhbWUg KCkKICAiRmluZCByZWNlbnQgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcuIgogIChpbnRlcmFjdGl2 ZSkKICAoZmluZC1maWxlLW90aGVyLWZyYW1lIChjb25zdWx0LS1yZWNlbnQtZmlsZS1yZWFkKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWNlbnQtZmlsZS1vdGhlci13aW5kb3cg KCkKICAiRmluZCByZWNlbnQgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcuIgogIChpbnRlcmFjdGl2 ZSkKICAoZmluZC1maWxlLW90aGVyLXdpbmRvdyAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkp KQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1maWxlLWV4dGVybmFsbHkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWZpbGUtZXh0ZXJuYWxseSAoZmlsZSkKICAiT3BlbiBGSUxFIGV4dGVy bmFsbHkgdXNpbmcgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gb2YgdGhlIHN5c3RlbS4iCiAgKGlu dGVyYWN0aXZlICJmT3BlbiBleHRlcm5hbGx5OiAiKQogIChpZiAoYW5kIChlcSBzeXN0ZW0tdHlw ZSAnd2luZG93cy1udCkKICAgICAgICAgICAoZmJvdW5kcCAndzMyLXNoZWxsLWV4ZWN1dGUpKQog ICAgICAodzMyLXNoZWxsLWV4ZWN1dGUgIm9wZW4iIGZpbGUpCiAgICAoY2FsbC1wcm9jZXNzIChw Y2FzZSBzeXN0ZW0tdHlwZQogICAgICAgICAgICAgICAgICAgICgnZGFyd2luICJvcGVuIikKICAg ICAgICAgICAgICAgICAgICAoJ2N5Z3dpbiAiY3lnc3RhcnQiKQogICAgICAgICAgICAgICAgICAg IChfICJ4ZGctb3BlbiIpKQogICAgICAgICAgICAgICAgICBuaWwgMCBuaWwKICAgICAgICAgICAg ICAgICAgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt Y29tcGxldGlvbi1pbi1yZWdpb24KCjs7IFVzZSBtaW5pYnVmZmVyIGNvbXBsZXRpb24gYXMgdGhl IFVJIGZvciBjb21wbGV0aW9uLWF0LXBvaW50Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LWNvbXBsZXRpb24taW4tcmVnaW9uIChzdGFydCBlbmQgY29sbGVjdGlvbiAmb3B0aW9uYWwgcHJl ZGljYXRlKQogICJQcm9tcHQgZm9yIGNvbXBsZXRpb24gb2YgcmVnaW9uIGluIHRoZSBtaW5pYnVm ZmVyIGlmIG5vbi11bmlxdWUuCgpUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggNCBhcmd1bWVu dHM6IFNUQVJUIEVORCBDT0xMRUNUSU9OIFBSRURJQ0FURS4KVGhlIGFyZ3VtZW50cyBhbmQgZXhw ZWN0ZWQgcmV0dXJuIHZhbHVlIGFyZSBhcyBzcGVjaWZpZWQgZm9yCmBjb21wbGV0aW9uLWluLXJl Z2lvbicuIFVzZSBhcyBhIHZhbHVlIGZvciBgY29tcGxldGlvbi1pbi1yZWdpb24tZnVuY3Rpb24n LiIKICAobGV0KiAoKGluaXRpYWwgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBzdGFy dCBlbmQpKQogICAgICAgICAobGltaXQgKGNhciAoY29tcGxldGlvbi1ib3VuZGFyaWVzIGluaXRp YWwgY29sbGVjdGlvbiBwcmVkaWNhdGUgIiIpKSkKICAgICAgICAgKG1ldGFkYXRhIChjb21wbGV0 aW9uLW1ldGFkYXRhIGluaXRpYWwgY29sbGVjdGlvbiBwcmVkaWNhdGUpKQogICAgICAgICAoY2F0 ZWdvcnkgKGNvbXBsZXRpb24tbWV0YWRhdGEtZ2V0IG1ldGFkYXRhICdjYXRlZ29yeSkpCiAgICAg ICAgIChhbGwgKGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zIGluaXRpYWwgY29sbGVjdGlvbiBw cmVkaWNhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0 aCBpbml0aWFsKSkpCiAgICAgICAgIChleGl0LXN0YXR1cyAnZmluaXNoZWQpCiAgICAgICAgIChj b21wbGV0aW9uCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgoYXRvbSBhbGwpIG5pbCkKICAg ICAgICAgICAoKGFuZCAoY29uc3AgYWxsKSAoYXRvbSAoY2RyIGFsbCkpKQogICAgICAgICAgICAo c2V0cSBleGl0LXN0YXR1cyAnc29sZSkKICAgICAgICAgICAgKGNvbmNhdCAoc3Vic3RyaW5nIGlu aXRpYWwgMCBsaW1pdCkgKGNhciBhbGwpKSkKICAgICAgICAgICAodCAobGV0ICgoZW5hYmxlLXJl Y3Vyc2l2ZS1taW5pYnVmZmVycyB0KSkKICAgICAgICAgICAgICAgIChpZiAoZXEgY2F0ZWdvcnkg J2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgOzsgV2hlbiBjb21wbGV0aW5nIGZpbGVzIHdpdGgg Y29uc3VsdC1jb21wbGV0aW9uLWluLXJlZ2lvbiwgdGhlIHBvaW50IGluIHRoZQogICAgICAgICAg ICAgICAgICAgIDs7IG1pbmlidWZmZXIgZ2V0cyBwbGFjZWQgaW5pdGlhbGx5IGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQuCiAgICAgICAgICAgICAgICAgICAgOzsg QnkgdXNpbmcgdGhlIGZpbGVuYW1lIGFzIERJUiBhcmd1bWVudCAoc2Vjb25kIGFyZ3VtZW50IG9m IHJlYWQtZmlsZS1uYW1lKSwgaXQKICAgICAgICAgICAgICAgICAgICA7OyBzdGFydHMgYXQgdGhl IGVuZCBvZiBtaW5pYnVmZmVyIGNvbnRlbnRzLCBhcyBmb3Igb3RoZXIgdHlwZXMgb2YgY29tcGxl dGlvbi4KICAgICAgICAgICAgICAgICAgICA7OyBIb3dldmVyIHRoaXMgaXMgdW5kZWZpbmVkIGJl aGF2aW9yIHNpbmNlIGluaXRpYWwgZG9lcyBub3Qgb25seSBjb250YWluIHRoZQogICAgICAgICAg ICAgICAgICAgIDs7IGRpcmVjdG9yeSwgYnV0IGFsc28gdGhlIGZpbGVuYW1lLgogICAgICAgICAg ICAgICAgICAgIChyZWFkLWZpbGUtbmFtZQogICAgICAgICAgICAgICAgICAgICAiQ29tcGxldGlv bjogIiBpbml0aWFsIGluaXRpYWwgdCBuaWwgcHJlZGljYXRlKQogICAgICAgICAgICAgICAgICAo Y29tcGxldGluZy1yZWFkCiAgICAgICAgICAgICAgICAgICAiQ29tcGxldGlvbjogIiBjb2xsZWN0 aW9uIHByZWRpY2F0ZSB0IGluaXRpYWwpKSkpKSkpCiAgICAoaWYgKG51bGwgY29tcGxldGlvbikK ICAgICAgICAocHJvZ24gKG1lc3NhZ2UgIk5vIGNvbXBsZXRpb24iKSBuaWwpCiAgICAgIChkZWxl dGUtcmVnaW9uIHN0YXJ0IGVuZCkKICAgICAgKGluc2VydCAoc3Vic3RyaW5nLW5vLXByb3BlcnRp ZXMgY29tcGxldGlvbikpCiAgICAgICh3aGVuLWxldCAoZXhpdCAocGxpc3QtZ2V0IGNvbXBsZXRp b24tZXh0cmEtcHJvcGVydGllcyA6ZXhpdC1mdW5jdGlvbikpCiAgICAgICAgKGZ1bmNhbGwgZXhp dCBjb21wbGV0aW9uIGV4aXQtc3RhdHVzKSkKICAgICAgdCkpKQoKOzs7OzsgQ29tbWFuZDogY29u c3VsdC1tb2RlLWNvbW1hbmQKCihkZWZ1biBjb25zdWx0LS1tb2RlLW5hbWUgKG1vZGUpCiAgIlJl dHVybiBuYW1lIHBhcnQgb2YgTU9ERS4iCiAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwogICAi Z2xvYmFsLVxcKC4qXFwpLW1vZGUiICJcXDEiCiAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcK ICAgICJcXCgtZ2xvYmFsXFwpPy1tb2RlJCIgIiIKICAgIChpZiAoZXEgbW9kZSAnYy1tb2RlKQog ICAgICAgICJjYyIKICAgICAgKHN5bWJvbC1uYW1lIG1vZGUpKQogICAgJ2ZpeGVkY2FzZSkKICAg J2ZpeGVkY2FzZSkpCgooZGVmdW4gY29uc3VsdC0tbW9kZS1jb21tYW5kLWNhbmRpZGF0ZXMgKG1v ZGVzKQogICJFeHRyYWN0IGNvbW1hbmRzIGZyb20gTU9ERVMuCgpUaGUgbGlzdCBvZiBmZWF0dXJl cyBpcyBzZWFyY2hlZCBmb3IgZmlsZXMgYmVsb25naW5nIHRvIHRoZSBtb2Rlcy4KRnJvbSB0aGVz ZSBmaWxlcywgdGhlIGNvbW1hbmRzIGFyZSBleHRyYWN0ZWQuIgogIChsZXQqICgoY29tbWFuZC1m aWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIgKHNlcS1maWx0ZXIgIydzdHJpbmdwIGNvbnN1 bHQtbW9kZS1jb21tYW5kLWZpbHRlcikpKQogICAgICAgICAoZmVhdHVyZS1maWx0ZXIgKHNlcS1m aWx0ZXIgIydzeW1ib2xwIGNvbnN1bHQtbW9kZS1jb21tYW5kLWZpbHRlcikpCiAgICAgICAgICht aW5vci1oYXNoIChjb25zdWx0LS1zdHJpbmctaGFzaCBtaW5vci1tb2RlLWxpc3QpKQogICAgICAg ICAobWlub3ItbG9jYWwtbW9kZXMgKHNlcS1maWx0ZXIgKGxhbWJkYSAobSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZ2V0aGFzaCBtIG1pbm9yLWhhc2gp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLXZh cmlhYmxlLWlmLXNldC1wIG0pKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1vZGVzKSkKICAgICAgICAgKG1pbm9yLWdsb2JhbC1tb2RlcyAoc2VxLWZpbHRlciAobGFt YmRhIChtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAo Z2V0aGFzaCBtIG1pbm9yLWhhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChub3QgKGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIG0pKSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXMpKQogICAgICAgICAobWFqb3It bW9kZXMgKHNlcS1yZW1vdmUgKGxhbWJkYSAobSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGdldGhhc2ggbSBtaW5vci1oYXNoKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1vZGVzKSkKICAgICAgICAgKG1ham9yLXBhdGhzLWhhc2ggKGNvbnN1bHQtLXN0 cmluZy1oYXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtYWpvci1tb2RlcykpKQogICAgICAgICAo bWlub3ItbG9jYWwtcGF0aHMtaGFzaCAoY29uc3VsdC0tc3RyaW5nLWhhc2ggKG1hcGNhciAjJ3N5 bWJvbC1maWxlIG1pbm9yLWxvY2FsLW1vZGVzKSkpCiAgICAgICAgIChtaW5vci1nbG9iYWwtcGF0 aHMtaGFzaCAoY29uc3VsdC0tc3RyaW5nLWhhc2ggKG1hcGNhciAjJ3N5bWJvbC1maWxlIG1pbm9y LWdsb2JhbC1tb2RlcykpKQogICAgICAgICAobWFqb3ItbmFtZS1yZWdleHAgKHJlZ2V4cC1vcHQg KG1hcGNhciAjJ2NvbnN1bHQtLW1vZGUtbmFtZSBtYWpvci1tb2RlcykpKQogICAgICAgICAobWlu b3ItbG9jYWwtbmFtZS1yZWdleHAgKHJlZ2V4cC1vcHQgKG1hcGNhciAjJ2NvbnN1bHQtLW1vZGUt bmFtZSBtaW5vci1sb2NhbC1tb2RlcykpKQogICAgICAgICAobWlub3ItZ2xvYmFsLW5hbWUtcmVn ZXhwIChyZWdleHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5hbWUgbWlub3ItZ2xvYmFs LW1vZGVzKSkpCiAgICAgICAgIChjb21tYW5kcykpCiAgICAoZG9saXN0IChmZWF0dXJlIGxvYWQt aGlzdG9yeSBjb21tYW5kcykKICAgICAgKHdoZW4tbGV0IChuYW1lIChhbGlzdC1nZXQgJ3Byb3Zp ZGUgZmVhdHVyZSkpCiAgICAgICAgKGxldCogKChwYXRoIChjYXIgZmVhdHVyZSkpCiAgICAgICAg ICAgICAgIChmaWxlIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHBhdGgpKQogICAgICAgICAgICAg ICAoa2V5IChjb25kCiAgICAgICAgICAgICAgICAgICAgICgobWVtcSBuYW1lIGZlYXR1cmUtZmls dGVyKSBuaWwpCiAgICAgICAgICAgICAgICAgICAgICgob3IgKGdldGhhc2ggcGF0aCBtYWpvci1w YXRocy1oYXNoKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gtcCBtYWpv ci1uYW1lLXJlZ2V4cCBmaWxlKSkKICAgICAgICAgICAgICAgICAgICAgID9tKQogICAgICAgICAg ICAgICAgICAgICAoKG9yIChnZXRoYXNoIHBhdGggbWlub3ItbG9jYWwtcGF0aHMtaGFzaCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgbWlub3ItbG9jYWwtbmFtZS1y ZWdleHAgZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICA/bCkKICAgICAgICAgICAgICAgICAg ICAgKChvciAoZ2V0aGFzaCBwYXRoIG1pbm9yLWdsb2JhbC1wYXRocy1oYXNoKQogICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gtcCBtaW5vci1nbG9iYWwtbmFtZS1yZWdleHAg ZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICA/ZykpKSkKICAgICAgICAgICh3aGVuIGtleQog ICAgICAgICAgICAoZG9saXN0IChjbWQgKGNkciBmZWF0dXJlKSkKICAgICAgICAgICAgICAod2hl biAoYW5kIChjb25zcCBjbWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhciBjbWQp ICdkZWZ1bikKICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5kcCAoY2RyIGNtZCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAobm90IChzdHJpbmctbWF0Y2gtcCBjb21tYW5kLWZpbHRl ciAoc3ltYm9sLW5hbWUgKGNkciBjbWQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAobm90 IChnZXQgKGNkciBjbWQpICdieXRlLW9ic29sZXRlLWluZm8pKSkKICAgICAgICAgICAgICAgIChw dXNoIChjb25zIChjZHIgY21kKSBrZXkpIGNvbW1hbmRzKSkpKSkpKSkpCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gY29uc3VsdC1tb2RlLWNvbW1hbmQgKCZyZXN0IG1vZGVzKQogICJSdW4gYSBjb21t YW5kIGZyb20gYW55IG9mIHRoZSBnaXZlbiBNT0RFUy4KCklmIG5vIE1PREVTIGFyZSBzcGVjaWZp ZWQsIHVzZSBjdXJyZW50bHkgYWN0aXZlIG1ham9yIGFuZCBtaW5vciBtb2Rlcy4iCiAgKGludGVy YWN0aXZlKQogICh1bmxlc3MgbW9kZXMKICAgIChzZXRxIG1vZGVzIChjb25zIG1ham9yLW1vZGUK ICAgICAgICAgICAgICAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKG0pCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGJvdW5kcCBtKSAoc3ltYm9sLXZhbHVlIG0p KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yLW1vZGUtbGlzdCkpKSkK ICAoY29tbWFuZC1leGVjdXRlCiAgIChpbnRlcm4KICAgIChjb25zdWx0LS1yZWFkCiAgICAgIk1v ZGUgY29tbWFuZDogIgogICAgIChjb25zdWx0LS1tb2RlLWNvbW1hbmQtY2FuZGlkYXRlcyBtb2Rl cykKICAgICA6cHJlZGljYXRlCiAgICAgKGxhbWJkYSAoY2FuZCkKICAgICAgIChpZiBjb25zdWx0 LS1uYXJyb3cKICAgICAgICAgICAoPSAoY2RyIGNhbmQpIGNvbnN1bHQtLW5hcnJvdykKICAgICAg ICAgKC89IChjZHIgY2FuZCkgP2cpKSkKICAgICA6bmFycm93ICcoKD9tIC4gIk1ham9yIikKICAg ICAgICAgICAgICAgKD9sIC4gIkxvY2FsIE1pbm9yIikKICAgICAgICAgICAgICAgKD9nIC4gIkds b2JhbCBNaW5vciIpKQogICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgICA6aGlzdG9yeSAnY29uc3Vs dC0tbW9kZS1jb21tYW5kLWhpc3RvcnkKICAgICA6Y2F0ZWdvcnkgJ2NvbW1hbmQpKSkpCgo7Ozs7 OyBDb21tYW5kOiBjb25zdWx0LXlhbmsKCihkZWZ1biBjb25zdWx0LS15YW5rLXJlYWQgKCkKICAi T3BlbiBraWxsIHJpbmcgbWVudSBhbmQgcmV0dXJuIHNlbGVjdGVkIHRleHQuIgogIChjb25zdWx0 LS1yZWFkCiAgICJZYW5rIHRleHQ6ICIKICAgKGNvbnN1bHQtLXJlbW92ZS1kdXBzIGtpbGwtcmlu ZykKICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgOnNvcnQgbmlsCiAgIDpjYXRl Z29yeSAnY29uc3VsdC15YW5rCiAgIDpyZXF1aXJlLW1hdGNoIHQKICAgOnByZXZpZXcKICAgOzsg SWYgcHJldmlvdXMgY29tbWFuZCBpcyB5YW5rLCBoaWRlIHByZXZpb3VzbHkgeWFua2VkIHRleHQK ICAgKGxldCogKChvdikgKHB0IChwb2ludCkpIChtayAob3IgKGFuZCAoZXEgbGFzdC1jb21tYW5k ICd5YW5rKSAobWFyayB0KSkgcHQpKSkKICAgICAobGFtYmRhIChjYW5kIHJlc3RvcmUpCiAgICAg ICAoaWYgcmVzdG9yZQogICAgICAgICAgICh3aGVuIG92IChkZWxldGUtb3ZlcmxheSBvdikpCiAg ICAgICAgICh1bmxlc3Mgb3YgKHNldHEgb3YgKGNvbnN1bHQtLW92ZXJsYXkgKG1pbiBwdCBtaykg KG1heCBwdCBtaykgJ2ludmlzaWJsZSB0KSkpCiAgICAgICAgIDs7IFVzZSBgYWRkLWZhY2UtdGV4 dC1wcm9wZXJ0eScgb24gYSBjb3B5IG9mICJjYW5kIGluIG9yZGVyIHRvIG1lcmdlIGZhY2UgcHJv cGVydGllcwogICAgICAgICAoc2V0cSBjYW5kIChjb3B5LXNlcXVlbmNlIGNhbmQpKQogICAgICAg ICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggY2FuZCkgJ2NvbnN1bHQtcHJldmll dy15YW5rIHQgY2FuZCkKICAgICAgICAgOzsgVXNlIHRoZSBgYmVmb3JlLXN0cmluZycgcHJvcGVy dHkgc2luY2UgdGhlIG92ZXJsYXkgbWlnaHQgYmUgZW1wdHkuCiAgICAgICAgIChvdmVybGF5LXB1 dCBvdiAnYmVmb3JlLXN0cmluZyBjYW5kKSkpKSkpCgo7OyBJbnNlcnQgc2VsZWN0ZWQgdGV4dC4K OzsgQWRhcHRlZCBmcm9tIHRoZSBFbWFjcyB5YW5rIGZ1bmN0aW9uLgo7OzsjIyNhdXRvbG9hZAoo ZGVmdW4gY29uc3VsdC15YW5rICgpCiAgIlNlbGVjdCB0ZXh0IGZyb20gdGhlIGtpbGwgcmluZyBh bmQgaW5zZXJ0IGl0LiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHRleHQgKGNvbnN1bHQtLXlh bmstcmVhZCkpKQogICAgKHNldHEgeWFuay13aW5kb3ctc3RhcnQgKHdpbmRvdy1zdGFydCkpCiAg ICAocHVzaC1tYXJrKQogICAgKGluc2VydC1mb3IteWFuayB0ZXh0KQogICAgKHNldHEgdGhpcy1j b21tYW5kICd5YW5rKQogICAgbmlsKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXlh bmstcG9wICgmb3B0aW9uYWwgYXJnKQogICJJZiB0aGVyZSBpcyBhIHJlY2VudCB5YW5rIGFjdCBs aWtlIGB5YW5rLXBvcCcuCgpPdGhlcndpc2Ugc2VsZWN0IHRleHQgZnJvbSB0aGUga2lsbCByaW5n IGFuZCBpbnNlcnQgaXQuClNlZSBgeWFuay1wb3AnIGZvciB0aGUgbWVhbmluZyBvZiBBUkcuIgog IChpbnRlcmFjdGl2ZSAiKnAiKQogIChpZiAoZXEgbGFzdC1jb21tYW5kICd5YW5rKQogICAgICAo eWFuay1wb3AgKG9yIGFyZyAxKSkKICAgIChjb25zdWx0LXlhbmspKSkKCjs7IFJlcGxhY2UganVz dC15YW5rZWQgdGV4dCB3aXRoIHNlbGVjdGVkIHRleHQuCjs7IEFkYXB0ZWQgZnJvbSB0aGUgRW1h Y3MgeWFuay1wb3AgZnVuY3Rpb24uCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXlhbmst cmVwbGFjZSAoKQogICJTZWxlY3QgdGV4dCBmcm9tIHRoZSBraWxsIHJpbmcuCgpJZiB0aGVyZSB3 YXMgbm8gcmVjZW50IHlhbmssIGluc2VydCB0aGUgdGV4dC4KT3RoZXJ3aXNlIHJlcGxhY2UgdGhl IGp1c3QteWFua2VkIHRleHQgd2l0aCB0aGUgc2VsZWN0ZWQgdGV4dC4iCiAgKGludGVyYWN0aXZl KQogIChpZiAobm90IChlcSBsYXN0LWNvbW1hbmQgJ3lhbmspKQogICAgICAoY29uc3VsdC15YW5r KQogICAgKGxldCAoKHRleHQgKGNvbnN1bHQtLXlhbmstcmVhZCkpCiAgICAgICAgICAoaW5oaWJp dC1yZWFkLW9ubHkgdCkKICAgICAgICAgIChwdCAocG9pbnQpKQogICAgICAgICAgKG1rIChtYXJr IHQpKSkKICAgICAgKHNldHEgdGhpcy1jb21tYW5kICd5YW5rKQogICAgICAoZnVuY2FsbCAob3Ig eWFuay11bmRvLWZ1bmN0aW9uICdkZWxldGUtcmVnaW9uKSAobWluIHB0IG1rKSAobWF4IHB0IG1r KSkKICAgICAgKHNldHEgeWFuay11bmRvLWZ1bmN0aW9uIG5pbCkKICAgICAgKHNldC1tYXJrZXIg KG1hcmstbWFya2VyKSBwdCAoY3VycmVudC1idWZmZXIpKQogICAgICAoaW5zZXJ0LWZvci15YW5r IHRleHQpCiAgICAgIChzZXQtd2luZG93LXN0YXJ0IChzZWxlY3RlZC13aW5kb3cpIHlhbmstd2lu ZG93LXN0YXJ0IHQpCiAgICAgIChpZiAoPCBwdCBtaykKICAgICAgICAgIChnb3RvLWNoYXIgKHBy b2cxIChtYXJrIHQpCiAgICAgICAgICAgICAgICAgICAgICAgKHNldC1tYXJrZXIgKG1hcmstbWFy a2VyKSAocG9pbnQpIChjdXJyZW50LWJ1ZmZlcikpKSkpKSkKICBuaWwpCgo7Ozs7OyBDb21tYW5k OiBjb25zdWx0LXJlZ2lzdGVyCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWdpc3Rl ci13aW5kb3cgKGJ1ZmZlciAmb3B0aW9uYWwgc2hvdy1lbXB0eSkKICAiRW5oYW5jZWQgZHJvcC1p biByZXBsYWNlbWVudCBmb3IgYHJlZ2lzdGVyLXByZXZpZXcnLgoKQlVGRkVSIGlzIHRoZSB3aW5k b3cgYnVmZmVyLgpTSE9XLUVNUFRZIG11c3QgYmUgdCBpZiB0aGUgd2luZG93IHNob3VsZCBiZSBz aG93biBmb3IgYW4gZW1wdHkgcmVnaXN0ZXIgbGlzdC4iCiAgKGxldCAoKHJlZ3MgKHNlcS1maWx0 ZXIgIydjZHIgcmVnaXN0ZXItYWxpc3QpKSkKICAgICh3aGVuIChvciBzaG93LWVtcHR5IHJlZ3Mp CiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyLXdpbmRvdyBidWZmZXIKICAgICAgICAgIChjb25z ICdkaXNwbGF5LWJ1ZmZlci1iZWxvdy1zZWxlY3RlZAogICAgICAgICAgICAgICAgJygod2luZG93 LWhlaWdodCAuIGZpdC13aW5kb3ctdG8tYnVmZmVyKQoJICAgICAgICAgIChwcmVzZXJ2ZS1zaXpl IC4gKG5pbCAuIHQpKSkpCiAgICAgICAgICBuaWwKICAgICAgICAoc2V0cS1sb2NhbCBjdXJzb3It aW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MgbmlsKQogICAgICAgIChzZXRxLWxvY2FsIG1vZGUtbGlu ZS1mb3JtYXQgbmlsKQogICAgICAgIChzZXRxLWxvY2FsIHdpbmRvdy1taW4taGVpZ2h0IDEpCiAg ICAgICAgKHNlcS1kby1pbmRleGVkCiAgICAgICAgIChsYW1iZGEgKHJlZyBpZHgpCiAgICAgICAg ICAgKGxldCAoKGJlZyAocG9pbnQpKSkKICAgICAgICAgICAgIChpbnNlcnQgKGZ1bmNhbGwgcmVn aXN0ZXItcHJldmlldy1mdW5jdGlvbiByZWcpKQogICAgICAgICAgICAgKHdoZW4gKC89IDAgKCUg aWR4IDIpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tb3ZlcmxheSBiZWcgKHBvaW50KSAnZmFj ZSAnY29uc3VsdC16ZWJyYSkpKSkKICAgICAgICAgKHNlcS1zb3J0ICMnY2FyLWxlc3MtdGhhbi1j YXIgcmVncykpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXItZm9y bWF0IChyZWcpCiAgIkVuaGFuY2VkIHByZXZpZXcgb2YgcmVnaXN0ZXIgUkVHLgoKVGhpcyBmdW5j dGlvbiBjYW4gYmUgdXNlZCBhcyBgcmVnaXN0ZXItcHJldmlldy1mdW5jdGlvbicuIgogIChhcHBs eSAjJ2NvbmNhdAogICAgICAgICAobWFwY2FyIChsYW1iZGEgKHMpIChjb25jYXQgKHRydW5jYXRl LXN0cmluZy10by13aWR0aCBzIDEwMCAwIG5pbCAi4oCmIikgIlxuIikpCiAgICAgICAgICAgICAg ICAgKHNwbGl0LXN0cmluZyAoY29uc3VsdC0tcmVnaXN0ZXItZm9ybWF0IHJlZykgIlxuIikpKSkK CihkZWZ1biBjb25zdWx0LS1yZWdpc3Rlci1mb3JtYXQgKHJlZykKICAiRm9ybWF0IHJlZ2lzdGVy IFJFRyBmb3IgcHJldmlldy4iCiAgKHBjYXNlLWxldCAoKGAoLGtleSAuICx2YWwpIHJlZykpCiAg ICAobGV0KiAoKGtleS1zdHIgKHNpbmdsZS1rZXktZGVzY3JpcHRpb24ga2V5KSkKICAgICAgICAg ICAoZm10IChmb3JtYXQgIiUlLSVkcyAiIChtYXggMyAobGVuZ3RoIGtleS1zdHIpKSkpKQogICAg ICAoY29uY2F0CiAgICAgICAoZm9ybWF0IGZtdCAocHJvcGVydGl6ZSBrZXktc3RyICdmYWNlICdj b25zdWx0LWtleSkpCiAgICAgICA7OyBTcGVjaWFsIHByaW50aW5nIGZvciBjZXJ0YWluIHJlZ2lz dGVyIHR5cGVzCiAgICAgICAoY29uZAogICAgICAgIDs7IERpc3BsYXkgZnVsbCBzdHJpbmcKICAg ICAgICAoKG9yIChzdHJpbmdwIHZhbCkgKHN0cmluZ3AgKGNhci1zYWZlIHZhbCkpKQogICAgICAg ICAod2hlbiAoY29uc3AgdmFsKQogICAgICAgICAgIChzZXRxIHZhbCAobWFwY29uY2F0ICMnaWRl bnRpdHkgdmFsICJcbiIpKSkKICAgICAgICAgKG1hcGNvbmNhdCAjJ2lkZW50aXR5CiAgICAgICAg ICAgICAgICAgICAgKHNlcS10YWtlIChzcGxpdC1zdHJpbmcgKHN0cmluZy10cmltIHZhbCkgIlxu IikgMykKICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IGZtdCAiXG4iKSkpCiAgICAgICAgOzsg RGlzcGxheSAnZmlsZS1xdWVyeQogICAgICAgICgoZXEgKGNhci1zYWZlIHZhbCkgJ2ZpbGUtcXVl cnkpCiAgICAgICAgIChmb3JtYXQgIiVzIGF0IHBvc2l0aW9uICVkIgogICAgICAgICAgICAgICAg IChwcm9wZXJ0aXplIChhYmJyZXZpYXRlLWZpbGUtbmFtZSAoY2FkciB2YWwpKSAnZmFjZSAnY29u c3VsdC1maWxlKQogICAgICAgICAgICAgICAgIChjYWRkciB2YWwpKSkKICAgICAgICA7OyBEaXNw bGF5IGZ1bGwgbGluZSBvZiBidWZmZXIKICAgICAgICAoKGFuZCAobWFya2VycCB2YWwpIChidWZm ZXItbGl2ZS1wIChtYXJrZXItYnVmZmVyIHZhbCkpKQogICAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlciAobWFya2VyLWJ1ZmZlciB2YWwpCiAgICAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAg ICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAod2lkZW4pCiAgICAgICAg ICAgICAgIChnb3RvLWNoYXIgdmFsKQogICAgICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAg ICAgICAoY29uc3VsdC0tZm9ybWF0LWxvY2F0aW9uIChidWZmZXItbmFtZSkgKGxpbmUtbnVtYmVy LWF0LXBvcykpCiAgICAgICAgICAgICAgICAoY29uc3VsdC0tbGluZS13aXRoLWN1cnNvciB2YWwp KSkpKSkKICAgICAgICA7OyBEZWZhdWx0IHByaW50aW5nIGZvciB0aGUgb3RoZXIgdHlwZXMKICAg ICAgICAodCAocmVnaXN0ZXItZGVzY3JpYmUtb25lbGluZSBrZXkpKSkpKSkpCgooZGVmdW4gY29u c3VsdC0tcmVnaXN0ZXItYWxpc3QgKCkKICAiUmV0dXJuIHJlZ2lzdGVyIGxpc3Qgb3IgcmFpc2Ug YW4gZXJyb3IgaWYgdGhlIGxpc3QgaXMgZW1wdHkuIgogIDs7IFNvbWV0aW1lcywgcmVnaXN0ZXJz IGFyZSBtYWRlIHdpdGhvdXQgYSBgY2RyJy4KICA7OyBTdWNoIHJlZ2lzdGVycyBkb24ndCBkbyBh bnl0aGluZywgYW5kIGNhbiBiZSBpZ25vcmVkLgogIChvciAoc2VxLWZpbHRlciAjJ2NkciByZWdp c3Rlci1hbGlzdCkgKHVzZXItZXJyb3IgIkFsbCByZWdpc3RlcnMgYXJlIGVtcHR5IikpKQoKOzs7 IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXIgKCZvcHRpb25hbCBhcmcpCiAgIkxv YWQgcmVnaXN0ZXIgYW5kIGVpdGhlciBqdW1wIHRvIGxvY2F0aW9uIG9yIGluc2VydCB0aGUgc3Rv cmVkIHRleHQuCgpUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIHRvIHNlYXJjaCB0aGUgcmVnaXN0ZXIg Y29udGVudHMuIEZvciBxdWljayBhY2Nlc3MgdG8KcmVnaXN0ZXJzIGl0IGlzIHN0aWxsIHJlY29t bWVuZGVkIHRvIHVzZSB0aGUgcmVnaXN0ZXIgZnVuY3Rpb25zCmBjb25zdWx0LXJlZ2lzdGVyLWxv YWQnIGFuZCBgY29uc3VsdC1yZWdpc3Rlci1zdG9yZScgb3IgdGhlIGJ1aWx0LWluIGJ1aWx0LWlu CnJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMuIFRoZSBjb21tYW5kIHN1cHBvcnRzIG5hcnJvd2lu Zywgc2VlCmBjb25zdWx0LXJlZ2lzdGVyLW5hcnJvdycuIE1hcmtlciBwb3NpdGlvbnMgYXJlIHBy ZXZpZXdlZC4gU2VlCmBqdW1wLXRvLXJlZ2lzdGVyJyBhbmQgYGluc2VydC1yZWdpc3RlcicgZm9y IHRoZSBtZWFuaW5nIG9mIEFSRy4iCiAgKGludGVyYWN0aXZlICJQIikKICAoY29uc3VsdC1yZWdp c3Rlci1sb2FkCiAgIChjb25zdWx0LS1yZWFkCiAgICAiUmVnaXN0ZXI6ICIKICAgIChtYXBjYXIg KGxhbWJkYSAocmVnKSAoY29ucyAoY29uc3VsdC0tcmVnaXN0ZXItZm9ybWF0IHJlZykgKGNhciBy ZWcpKSkKICAgICAgICAgICAgKHNvcnQgKGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0KSAjJ2Nhci1s ZXNzLXRoYW4tY2FyKSkKICAgIDpjYXRlZ29yeSAnY29uc3VsdC1yZWdpc3RlcgogICAgOnByZXZp ZXcKICAgIChsZXQgKChwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpCiAgICAg IChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAoZnVuY2FsbCBwcmV2aWV3CiAgICAgICAg ICAgICAgICAgOzsgUHJldmlldyBtYXJrZXJzCiAgICAgICAgICAgICAgICAgKHdoZW4tbGV0IChy ZWcgKGdldC1yZWdpc3RlciBjYW5kKSkKICAgICAgICAgICAgICAgICAgIChhbmQgKG1hcmtlcnAg cmVnKSByZWcpKQogICAgICAgICAgICAgICAgIHJlc3RvcmUpKSkKICAgIDpuYXJyb3cKICAgIChj b25zCiAgICAgKGxhbWJkYSAoY2FuZCkKICAgICAgIChsZXQgKChyZWcgKGdldC1yZWdpc3RlciAo Y2RyIGNhbmQpKSkpCiAgICAgICAgIChzZXEtZmluZCAobGFtYmRhICh4KQogICAgICAgICAgICAg ICAgICAgICAoYW5kCiAgICAgICAgICAgICAgICAgICAgICAoPSAoY2FyIHgpIGNvbnN1bHQtLW5h cnJvdykKICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIChjYWRkciB4KSByZWcpKSkKICAg ICAgICAgICAgICAgICAgIGNvbnN1bHQtcmVnaXN0ZXItbmFycm93KSkpCiAgICAgKG1hcGNhciAo cGNhc2UtbGFtYmRhIChgKCx4ICx5ICxfKSkgKGNvbnMgeCB5KSkKICAgICAgICAgICAgIGNvbnN1 bHQtcmVnaXN0ZXItbmFycm93KSkKICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAog ICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgIDpsb29rdXAgIydjb25zdWx0LS1s b29rdXAtY2RyKQogICBhcmcpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0 ZXItbG9hZCAocmVnICZvcHRpb25hbCBhcmcpCiAgIkRvIHdoYXQgSSBtZWFuIHdpdGggYSBSRUcu CgpGb3IgYSB3aW5kb3cgY29uZmlndXJhdGlvbiwgcmVzdG9yZSBpdC4gRm9yIGEgbnVtYmVyIG9y IHRleHQsIGluc2VydCBpdC4gRm9yIGEKbG9jYXRpb24sIGp1bXAgdG8gaXQuIFNlZSBganVtcC10 by1yZWdpc3RlcicgYW5kIGBpbnNlcnQtcmVnaXN0ZXInIGZvciB0aGUKbWVhbmluZyBvZiBBUkcu IgogIChpbnRlcmFjdGl2ZQogICAobGlzdAogICAgKGFuZCAoY29uc3VsdC0tcmVnaXN0ZXItYWxp c3QpCiAgICAgICAgIChyZWdpc3Rlci1yZWFkLXdpdGgtcHJldmlldyAiTG9hZCByZWdpc3Rlcjog IikpCiAgICBjdXJyZW50LXByZWZpeC1hcmcpKQogIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAg KGp1bXAtdG8tcmVnaXN0ZXIgcmVnIGFyZykKICAgICh1c2VyLWVycm9yIChpbnNlcnQtcmVnaXN0 ZXIgcmVnIGFyZykpKSkKCihkZWZ1biBjb25zdWx0LS1yZWdpc3Rlci1hY3Rpb24gKGFjdGlvbi1s aXN0KQogICJSZWFkIHJlZ2lzdGVyIGtleSBhbmQgZXhlY3V0ZSBhY3Rpb24gZnJvbSBBQ1RJT04t TElTVC4KClRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIGByZWdpc3Rlci1yZWFkLXdpdGgt cHJldmlldycuIgogIChsZXQqICgoYnVmZmVyICIqUmVnaXN0ZXIgUHJldmlldyoiKQogICAgICAg ICAocHJlZml4IChjYXIgYWN0aW9uLWxpc3QpKQogICAgICAgICAoYWN0aW9uLWxpc3QgKGNkciBh Y3Rpb24tbGlzdCkpCiAgICAgICAgIChhY3Rpb24gKGNhciAobnRoIDAgYWN0aW9uLWxpc3QpKSkK ICAgICAgICAgKHJlZykKICAgICAgICAgKHByZXZpZXcKICAgICAgICAgIChsYW1iZGEgKCkKCSAg ICAodW5sZXNzIChnZXQtYnVmZmVyLXdpbmRvdyBidWZmZXIpCgkgICAgICAocmVnaXN0ZXItcHJl dmlldyBidWZmZXIgJ3Nob3ctZW1wdHkpCiAgICAgICAgICAgICAgKHdoZW4tbGV0ICh3aW4gKGdl dC1idWZmZXItd2luZG93IGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAod2l0aC1zZWxlY3RlZC13 aW5kb3cgd2luCiAgICAgICAgICAgICAgICAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KSkK ICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgICAgICAgICAg ICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKGNvbmNhdCBw cmVmaXggIjogICIpICdmYWNlICdjb25zdWx0LWhlbHApCiAgICAgICAgICAgICAgICAgICAgICht YXBjb25jYXQKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgIChjb25jYXQgKHByb3BlcnRpemUgKGZvcm1hdCAiTS0lYyIgKGNhciB4KSkgJ2Zh Y2UgJ2NvbnN1bHQta2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiAocHJv cGVydGl6ZSAoY2FkciB4KSAnZmFjZSAnY29uc3VsdC1oZWxwKSkpCiAgICAgICAgICAgICAgICAg ICAgICBhY3Rpb24tbGlzdCAiICAiKSkKICAgICAgICAgICAgICAgICAgICAoZml0LXdpbmRvdy10 by1idWZmZXIpKSkpKSkpCgkgKHRpbWVyICh3aGVuIChudW1iZXJwIHJlZ2lzdGVyLXByZXZpZXct ZGVsYXkpCgkgICAgICAgICAgKHJ1bi13aXRoLXRpbWVyIHJlZ2lzdGVyLXByZXZpZXctZGVsYXkg bmlsIHByZXZpZXcpKSkKCSAoaGVscC1jaGFycyAoc2VxLXJlbW92ZSAjJ2dldC1yZWdpc3RlciAo Y29ucyBoZWxwLWNoYXIgaGVscC1ldmVudC1saXN0KSkpKQogICAgKHVud2luZC1wcm90ZWN0CiAg ICAgICAgKHdoaWxlIChub3QgcmVnKQoJICAod2hpbGUgKG1lbXEgKHJlYWQta2V5IChwcm9wZXJ0 aXplIChjYWRkciAoYXNzcSBhY3Rpb24gYWN0aW9uLWxpc3QpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAnbWluaWJ1ZmZlci1wcm9tcHQpKQoJCSAg ICAgICBoZWxwLWNoYXJzKQogICAgICAgICAgICAoZnVuY2FsbCBwcmV2aWV3KSkKICAgICAgICAg IChjb25kCiAgICAgICAgICAgKChvciAoZXEgP1xDLWcgbGFzdC1pbnB1dC1ldmVudCkKICAgICAg ICAgICAgICAgIChlcSAnZXNjYXBlIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgICAgICAo ZXEgP1xDLVxbIGxhc3QtaW5wdXQtZXZlbnQpKQogICAgICAgICAgICAoa2V5Ym9hcmQtcXVpdCkp CiAgICAgICAgICAgKChhbmQgKG51bWJlcnAgbGFzdC1pbnB1dC1ldmVudCkgKGFzc3EgKGxvZ3hv ciAjeDgwMDAwMDAgbGFzdC1pbnB1dC1ldmVudCkgYWN0aW9uLWxpc3QpKQogICAgICAgICAgICAo c2V0cSBhY3Rpb24gKGxvZ3hvciAjeDgwMDAwMDAgbGFzdC1pbnB1dC1ldmVudCkpKQoJICAgKChj aGFyYWN0ZXJwIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgIChzZXRxIHJlZyBsYXN0LWlu cHV0LWV2ZW50KSkKICAgICAgICAgICAodCAoZXJyb3IgIk5vbi1jaGFyYWN0ZXIgaW5wdXQtZXZl bnQiKSkpKQogICAgICAod2hlbiAodGltZXJwIHRpbWVyKQogICAgICAgIChjYW5jZWwtdGltZXIg dGltZXIpKQogICAgICAobGV0ICgodyAoZ2V0LWJ1ZmZlci13aW5kb3cgYnVmZmVyKSkpCiAgICAg ICAgKHdoZW4gKHdpbmRvdy1saXZlLXAgdykKICAgICAgICAgIChkZWxldGUtd2luZG93IHcpKSkK ICAgICAgKHdoZW4gKGdldC1idWZmZXIgYnVmZmVyKQogICAgICAgIChraWxsLWJ1ZmZlciBidWZm ZXIpKSkKICAgICh3aGVuIHJlZwogICAgICAoZnVuY2FsbCAoY2FkZGRyIChhc3NxIGFjdGlvbiBh Y3Rpb24tbGlzdCkpIHJlZykpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXJlZ2lz dGVyLXN0b3JlIChhcmcpCiAgIlN0b3JlIHJlZ2lzdGVyIGRlcGVuZGVudCBvbiBjdXJyZW50IGNv bnRleHQsIHNob3dpbmcgYW4gYWN0aW9uIG1lbnUuCgpXaXRoIGFuIGFjdGl2ZSByZWdpb24sIHN0 b3JlL2FwcGVuZC9wcmVwZW5kIHRoZSBjb250ZW50cywgb3B0aW9uYWxseSBkZWxldGluZwp0aGUg cmVnaW9uIHdoZW4gYSBwcmVmaXggQVJHIGlzIGdpdmVuLiBXaXRoIGEgbnVtZXJpYyBwcmVmaXgg QVJHLCBzdG9yZS9hZGQgdGhlCm51bWJlci4gT3RoZXJ3aXNlIHN0b3JlIHBvaW50LCBmcmFtZXNl dCwgd2luZG93IG9yIGttYWNyby4iCiAgKGludGVyYWN0aXZlICJQIikKICAoY29uc3VsdC0tcmVn aXN0ZXItYWN0aW9uCiAgIChjb25kCiAgICAoKHVzZS1yZWdpb24tcCkKICAgICAobGV0ICgoYmVn IChyZWdpb24tYmVnaW5uaW5nKSkKICAgICAgICAgICAoZW5kIChyZWdpb24tZW5kKSkpCiAgICAg ICBgKCJSZWdpb24iCiAgICAgICAgICg/YyAiY29weSIgIkNvcHkgcmVnaW9uIHRvIHJlZ2lzdGVy OiAiICwobGFtYmRhIChyKSAoY29weS10by1yZWdpc3RlciByIGJlZyBlbmQgYXJnIHQpKSkKICAg ICAgICAgKD9hICJhcHBlbmQiICJBcHBlbmQgcmVnaW9uIHRvIHJlZ2lzdGVyOiAiICwobGFtYmRh IChyKSAoYXBwZW5kLXRvLXJlZ2lzdGVyIHIgYmVnIGVuZCBhcmcpKSkKICAgICAgICAgKD9wICJw cmVwZW5kIiAiUHJlcGVuZCByZWdpb24gdG8gcmVnaXN0ZXI6ICIgLChsYW1iZGEgKHIpIChwcmVw ZW5kLXRvLXJlZ2lzdGVyIHIgYmVnIGVuZCBhcmcpKSkpKSkKICAgICgobnVtYmVycCBhcmcpCiAg ICAgYCgsKGZvcm1hdCAiTnVtYmVyICVzIiBhcmcpCiAgICAgICAoP3MgInN0b3JlIiAsKGZvcm1h dCAiU3RvcmUgJXMgaW4gcmVnaXN0ZXI6ICIgYXJnKSAsKGxhbWJkYSAocikgKG51bWJlci10by1y ZWdpc3RlciBhcmcgcikpKQogICAgICAgKD9hICJhZGQiICwoZm9ybWF0ICJBZGQgJXMgdG8gcmVn aXN0ZXI6ICIgYXJnKSAsKGxhbWJkYSAocikgKGluY3JlbWVudC1yZWdpc3RlciBhcmcgcikpKSkp CiAgICAodAogICAgIGAoIlN0b3JlIgogICAgICAgKD9wICJwb2ludCIgIlBvaW50IHRvIHJlZ2lz dGVyOiAiICwjJ3BvaW50LXRvLXJlZ2lzdGVyKQogICAgICAgKD9mICJmcmFtZXNldCIgIkZyYW1l c2V0IHRvIHJlZ2lzdGVyOiAiICwjJ2ZyYW1lc2V0LXRvLXJlZ2lzdGVyKQogICAgICAgKD93ICJ3 aW5kb3ciICJXaW5kb3cgdG8gcmVnaXN0ZXI6ICIgLCMnd2luZG93LWNvbmZpZ3VyYXRpb24tdG8t cmVnaXN0ZXIpCiAgICAgICAsQChhbmQgbGFzdC1rYmQtbWFjcm8gYCgoP2sgImttYWNybyIgIktt YWNybyB0byByZWdpc3RlcjogIiAsIydrbWFjcm8tdG8tcmVnaXN0ZXIpKSkpKSkpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1ib29rbWFyawoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQt Ym9va21hcmsgKG5hbWUpCiAgIklmIGJvb2ttYXJrIE5BTUUgZXhpc3RzLCBvcGVuIGl0LCBvdGhl cndpc2UgY3JlYXRlIGEgbmV3IGJvb2ttYXJrIHdpdGggTkFNRS4KClRoZSBjb21tYW5kIHN1cHBv cnRzIHByZXZpZXcgb2YgZmlsZSBib29rbWFya3MgYW5kIG5hcnJvd2luZy4gU2VlIHRoZQp2YXJp YWJsZSBgY29uc3VsdC1ib29rbWFyay1uYXJyb3cnIGZvciB0aGUgbmFycm93aW5nIGNvbmZpZ3Vy YXRpb24uIgogIChpbnRlcmFjdGl2ZQogICAobGlzdAogICAgKGNvbnN1bHQtLXdpdGgtZmlsZS1w cmV2aWV3IChvcGVuKQogICAgICAoY29uc3VsdC0tcmVhZAogICAgICAgIkJvb2ttYXJrOiAiCiAg ICAgICAoYm9va21hcmstYWxsLW5hbWVzKQogICAgICAgOzsgQWRkIGRlZmF1bHQgbmFtZXMgdG8g ZnV0dXJlIGhpc3RvcnkuCiAgICAgICA7OyBJZ25vcmUgZXJyb3JzIHN1Y2ggdGhhdCBgY29uc3Vs dC1ib29rbWFyaycgY2FuIGJlIHVzZWQgaW4KICAgICAgIDs7IGJ1ZmZlcnMgd2hpY2ggYXJlIG5v dCBiYWNrZWQgYnkgYSBmaWxlLgogICAgICAgOmFkZC1oaXN0b3J5IChpZ25vcmUtZXJyb3JzIChi b29rbWFyay1wcm9wLWdldCAoYm9va21hcmstbWFrZS1yZWNvcmQpICdkZWZhdWx0cykpCiAgICAg ICA6bmFycm93CiAgICAgICAoY29ucwogICAgICAgIChsYW1iZGEgKGNhbmQpCiAgICAgICAgICAo aWYtbGV0ICgobiBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICAgICAgICAgICAoYm0gKGJvb2tt YXJrLWdldC1ib29rbWFyay1yZWNvcmQKICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29jIGNh bmQgYm9va21hcmstYWxpc3QpKSkpCiAgICAgICAgICAgICAgKGVxIG4gKGNhZGRyIChhbGlzdC1n ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYWxpc3QtZ2V0ICdoYW5kbGVyIGJt KSAjJ2Jvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN1bHQtYm9va21hcmstbmFycm93KSkpCiAgICAgICAgICAgIHQpKQogICAgICAgIChtYXBj YXIgKHBjYXNlLWxhbWJkYSAoYCgseCAseSAsXykpIChjb25zIHggeSkpCiAgICAgICAgICAgICAg ICBjb25zdWx0LWJvb2ttYXJrLW5hcnJvdykpCiAgICAgICA6cHJldmlldwogICAgICAgKGxldCAo KHByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkKICAgICAgICAgKGxhbWJkYSAo Y2FuZCByZXN0b3JlKQogICAgICAgICAgIChmdW5jYWxsCiAgICAgICAgICAgIHByZXZpZXcKICAg ICAgICAgICAgKHdoZW4tbGV0IChibSAoYm9va21hcmstZ2V0LWJvb2ttYXJrLXJlY29yZAogICAg ICAgICAgICAgICAgICAgICAgICAgICAoYXNzb2MgY2FuZCBib29rbWFyay1hbGlzdCkpKQogICAg ICAgICAgICAgIChpZi1sZXQqICgoZmlsZSAoYWxpc3QtZ2V0ICdmaWxlbmFtZSBibSkpCiAgICAg ICAgICAgICAgICAgICAgICAgIChwb3MgKGFsaXN0LWdldCAncG9zaXRpb24gYm0pKQogICAgICAg ICAgICAgICAgICAgICAgICA7OyBPbmx5IHByZXZpZXcgYm9va21hcmtzIHdpdGhvdXQgYSBoYW5k bGVyCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IGFrYSBgYm9va21hcmstZGVmYXVsdC1oYW5k bGVyJyEKICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZiAoYW5kIChub3QgKGFsaXN0LWdldCAn aGFuZGxlciBibSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBv cGVuIGZpbGUpKSkpCiAgICAgICAgICAgICAgICAgIChzZXQtbWFya2VyIChtYWtlLW1hcmtlcikg cG9zIGJ1ZikKICAgICAgICAgICAgICAgICh1bmxlc3MgcmVzdG9yZSAobWluaWJ1ZmZlci1tZXNz YWdlICJObyBwcmV2aWV3IGZvciBzcGVjaWFsIGJvb2ttYXJrIikpCiAgICAgICAgICAgICAgICBu aWwpKQogICAgICAgICAgICByZXN0b3JlKSkpCiAgICAgICA6aGlzdG9yeSAnYm9va21hcmstaGlz dG9yeQogICAgICAgOmNhdGVnb3J5ICdib29rbWFyaykpKSkKICAoYm9va21hcmstbWF5YmUtbG9h ZC1kZWZhdWx0LWZpbGUpCiAgKGlmIChhc3NvYyBuYW1lIGJvb2ttYXJrLWFsaXN0KQogICAgICAo Ym9va21hcmstanVtcCBuYW1lKQogICAgKGJvb2ttYXJrLXNldCBuYW1lKSkpCgo7Ozs7OyBDb21t YW5kOiBjb25zdWx0LWFwcm9wb3MKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWFwcm9w b3MgKCkKICAiU2VsZWN0IHBhdHRlcm4gYW5kIGNhbGwgYGFwcm9wb3MnLgoKVGhlIGRlZmF1bHQg dmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gaXMgdGhlIHN5bWJvbCBhdCBwb2ludC4iCiAgKGludGVy YWN0aXZlKQogIChsZXQgKChwYXR0ZXJuCiAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAg ICAiQXByb3BvczogIgogICAgICAgICAgb2JhcnJheQogICAgICAgICAgOnByZWRpY2F0ZSAobGFt YmRhICh4KSAob3IgKGZib3VuZHAgeCkgKGJvdW5kcCB4KSAoZmFjZXAgeCkgKHN5bWJvbC1wbGlz dCB4KSkpCiAgICAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5CiAgICAg ICAgICA6Y2F0ZWdvcnkgJ3N5bWJvbAogICAgICAgICAgOmRlZmF1bHQgKHRoaW5nLWF0LXBvaW50 ICdzeW1ib2wpKSkpCiAgICAod2hlbiAoc3RyaW5nPSBwYXR0ZXJuICIiKQogICAgICAodXNlci1l cnJvciAiTm8gcGF0dGVybiBnaXZlbiIpKQogICAgKGFwcm9wb3MgcGF0dGVybikpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1jb21wbGV4LWNvbW1hbmQKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBj b25zdWx0LWNvbXBsZXgtY29tbWFuZCAoKQogICJTZWxlY3QgYW5kIGV2YWx1YXRlIGNvbW1hbmQg ZnJvbSB0aGUgY29tbWFuZCBoaXN0b3J5LgoKVGhpcyBjb21tYW5kIGNhbiBhY3QgYXMgYSBkcm9w LWluIHJlcGxhY2VtZW50IGZvciBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcuIgogIChpbnRlcmFj dGl2ZSkKICAobGV0KiAoKGhpc3RvcnkgKG9yIChjb25zdWx0LS1yZW1vdmUtZHVwcyAobWFwY2Fy ICMncHJpbjEtdG8tc3RyaW5nIGNvbW1hbmQtaGlzdG9yeSkpCiAgICAgICAgICAgICAgICAgICAg ICAodXNlci1lcnJvciAiVGhlcmUgYXJlIG5vIHByZXZpb3VzIGNvbXBsZXggY29tbWFuZHMiKSkp CiAgICAgICAgIChjbWQgKHJlYWQgKGNvbnN1bHQtLXJlYWQKICAgICAgICAgICAgICAgICAgICAg IkNvbW1hbmQ6ICIgaGlzdG9yeQogICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdCAoY2FyIGhp c3RvcnkpCiAgICAgICAgICAgICAgICAgICAgIDpzb3J0IG5pbAogICAgICAgICAgICAgICAgICAg ICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9yeQogICAgICAgICAgICAgICAgICAgICA6Y2F0 ZWdvcnkgJ2V4cHJlc3Npb24pKSkpCiAgICA7OyBUYWtlbiBmcm9tIGByZXBlYXQtY29tcGxleC1j b21tYW5kJwogICAgKGFkZC10by1oaXN0b3J5ICdjb21tYW5kLWhpc3RvcnkgY21kKQogICAgKGFw cGx5ICMnZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CgkgICAoY2FyIGNtZCkKCSAgIChtYXBjYXIgKGxh bWJkYSAoZSkgKGV2YWwgZSB0KSkgKGNkciBjbWQpKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1oaXN0b3J5CgooZGVmdW4gY29uc3VsdC0tY3VycmVudC1oaXN0b3J5ICgpCiAgIlJldHVybiB0 aGUgaGlzdG9yeSByZWxldmFudCB0byB0aGUgY3VycmVudCBidWZmZXIuCgpJZiB0aGUgbWluaWJ1 ZmZlciBpcyBhY3RpdmUsIHJldHVybnMgdGhlIG1pbmlidWZmZXIgaGlzdG9yeSwKb3RoZXJ3aXNl IHRoZSBoaXN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgaXMgcmV0dXJuZWQuClRoZXJl IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcsCmZvciB3aGlj aCB0aGUgY29tbWFuZCBoaXN0b3J5IGlzIHVzZWQuIgogIChjb25kCiAgIDs7IElmIHByZXNzaW5n ICJDLXggTS06IiwgaS5lLiwgYHJlcGVhdC1jb21wbGV4LWNvbW1hbmQnLAogICA7OyB3ZSBhcmUg aW5zdGVhZCBxdWVyeWluZyB0aGUgYGNvbW1hbmQtaGlzdG9yeScgYW5kIGdldCBhIGZ1bGwgcy1l eHByZXNzaW9uLgogICA7OyBBbHRlcm5hdGl2ZWx5IHlvdSBtaWdodCB3YW50IHRvIHVzZSBgY29u c3VsdC1jb21wbGV4LWNvbW1hbmQnLAogICA7OyB3aGljaCBjYW4gYWxzbyBiZSBib3VuZCB0byAi Qy14IE0tOiIhCiAgICgoZXEgbGFzdC1jb21tYW5kICdyZXBlYXQtY29tcGxleC1jb21tYW5kKQog ICAgKG1hcGNhciAjJ3ByaW4xLXRvLXN0cmluZyBjb21tYW5kLWhpc3RvcnkpKQogICA7OyBJbiB0 aGUgbWluaWJ1ZmZlciB3ZSB1c2UgdGhlIGN1cnJlbnQgbWluaWJ1ZmZlciBoaXN0b3J5LAogICA7 OyB3aGljaCBjYW4gYmUgY29uZmlndXJlZCBieSBzZXR0aW5nIGBtaW5pYnVmZmVyLWhpc3Rvcnkt dmFyaWFibGUnLgogICAoKG1pbmlidWZmZXJwKQogICAgKGlmIChlcSBtaW5pYnVmZmVyLWhpc3Rv cnktdmFyaWFibGUgdCkKICAgICAgICAodXNlci1lcnJvciAiTWluaWJ1ZmZlciBoaXN0b3J5IGlz IGRpc2FibGVkIGZvciBgJXMnIiB0aGlzLWNvbW1hbmQpCiAgICAgIChzeW1ib2wtdmFsdWUgbWlu aWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlKSkpIDs7IChtaW5pYnVmZmVyLWhpc3RvcnktdmFsdWUp IGlzIEVtYWNzIDI3IG9ubHkKICAgOzsgT3RoZXJ3aXNlIHdlIHVzZSBhIG1vZGUtc3BlY2lmaWMg aGlzdG9yeSwgc2VlIGBjb25zdWx0LW1vZGUtaGlzdG9yaWVzJy4KICAgKHQgKHdoZW4tbGV0ICho aXN0b3J5CiAgICAgICAgICAgICAgICAgKG9yIChzZXEtZmluZCAobGFtYmRhIChyaW5nKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChkZXJpdmVkLW1vZGUtcCAoY2FyIHJp bmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZHAgKGNkciBy aW5nKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VsdC1tb2RlLWhpc3Rv cmllcykKICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IKICAgICAgICAgICAgICAgICAg ICAgICJObyBoaXN0b3J5IGNvbmZpZ3VyZWQgZm9yIGAlcycsIHNlZSBgY29uc3VsdC1tb2RlLWhp c3RvcmllcyciCiAgICAgICAgICAgICAgICAgICAgICBtYWpvci1tb2RlKSkpCiAgICAgICAgKHN5 bWJvbC12YWx1ZSAoY2RyIGhpc3RvcnkpKSkpKSkKCjs7IFRoaXMgY29tbWFuZCBoYXMgYmVlbiBh ZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL29hbnRvbGluL2NvbXBsZXRpbmctaGlzdG9y eS8uCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWhpc3RvcnkgKCZvcHRpb25hbCBoaXN0 b3J5KQogICJJbnNlcnQgc3RyaW5nIGZyb20gSElTVE9SWSBvZiBjdXJyZW50IGJ1ZmZlci4KCklu IG9yZGVyIHRvIHNlbGVjdCBmcm9tIGEgc3BlY2lmaWMgSElTVE9SWSwgcGFzcyB0aGUgaGlzdG9y eSB2YXJpYWJsZSBhcyBhcmd1bWVudC4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKChzdHIgKGNv bnN1bHQtLWxvY2FsLWxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkpCiAgICAg ICAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAgICAgICAgICAiSGlzdG9yeTogIgogICAg ICAgICAgICAgICAgKGxldCAoKGhpc3RvcnkgKG9yIGhpc3RvcnkgKGNvbnN1bHQtLWN1cnJlbnQt aGlzdG9yeSkpKSkKICAgICAgICAgICAgICAgICAgKG9yIChjb25zdWx0LS1yZW1vdmUtZHVwcyAo aWYgKHJpbmctcCBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocmluZy1lbGVtZW50cyBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSkpCiAgICAgICAgICAgICAgICAgICAgICAo dXNlci1lcnJvciAiSGlzdG9yeSBpcyBlbXB0eSIpKSkKICAgICAgICAgICAgICAgIDpoaXN0b3J5 IHQgOzsgZGlzYWJsZSBoaXN0b3J5CiAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgOzsgUmVwb3J0 IGNvbW1hbmQgY2F0ZWdvcnkgZm9yIE0teCBoaXN0b3J5CiAgICAgICAgICAgICAgICAoYW5kICht aW5pYnVmZmVycCkKICAgICAgICAgICAgICAgICAgICAgKGVxIG1pbmlidWZmZXItaGlzdG9yeS12 YXJpYWJsZSAnZXh0ZW5kZWQtY29tbWFuZC1oaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAn Y29tbWFuZCkKICAgICAgICAgICAgICAgIDpzb3J0IG5pbCkpKSkKICAgICh3aGVuIChtaW5pYnVm ZmVycCkKICAgICAgKGRlbGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRzKSkKICAgIChpbnNlcnQgKHN1 YnN0cmluZy1uby1wcm9wZXJ0aWVzIHN0cikpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaXNl YXJjaAoKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaC1mb3J3YXJkICgmb3B0aW9uYWwgcmV2ZXJzZSkK ICAiQ29udGludWUgaXNlYXJjaCBmb3J3YXJkIG9wdGlvbmFsbHkgaW4gUkVWRVJTRS4iCiAgKGlu dGVyYWN0aXZlKQogIChjb25zdWx0LS1yZXF1aXJlLW1pbmlidWZmZXIpCiAgKHNldHEgaXNlYXJj aC1uZXctZm9yd2FyZCAobm90IHJldmVyc2UpIGlzZWFyY2gtbmV3LW5vbmluY3JlbWVudGFsIG5p bCkKICAoZnVuY2FsbCAob3IgKGNvbW1hbmQtcmVtYXBwaW5nICMnZXhpdC1taW5pYnVmZmVyKSAj J2V4aXQtbWluaWJ1ZmZlcikpKQoKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaC1yZXZlcnNlICgmb3B0 aW9uYWwgcmV2ZXJzZSkKICAiQ29udGludWUgaXNlYXJjaCBiYWNrd2FyZCBvcHRpb25hbGx5IGlu IFJFVkVSU0UuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC1pc2VhcmNoLWZvcndhcmQgKG5v dCByZXZlcnNlKSkpCgooZGVmdmFyIGNvbnN1bHQtaXNlYXJjaC1tYXAKICAobGV0ICgobWFwICht YWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtcyIgIydjb25zdWx0 LWlzZWFyY2gtZm9yd2FyZCkKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtciIgIydjb25zdWx0LWlz ZWFyY2gtcmV2ZXJzZSkKICAgIG1hcCkKICAiQWRkaXRpb25hbCBrZXltYXAgdXNlZCBieSBgY29u c3VsdC1pc2VhcmNoJy4iKQoKKGRlZnVuIGNvbnN1bHQtLWlzZWFyY2gtY2FuZGlkYXRlcyAobmFy cm93KQogICJSZXR1cm4gaXNlYXJjaCBoaXN0b3J5IGNhbmRpZGF0ZXMgY2F0ZWdvcml6ZWQgYnkg TkFSUk9XLiIKICA7OyBOT1RFOiBEbyBub3QgdGhyb3cgYW4gZXJyb3Igb24gZW1wdHkgaGlzdG9y eSwKICA7OyBpbiBvcmRlciB0byBhbGxvdyBzdGFydGluZyBhIHNlYXJjaC4KICA7OyBXZSBkbyBu b3QgOnJlcXVpcmUtbWF0Y2ggaGVyZSEKICAobGV0KiAoKGhpc3RvcnkgKGlmIChlcSB0IHNlYXJj aC1kZWZhdWx0LW1vZGUpCiAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIHJlZ2V4cC1zZWFy Y2gtcmluZyBzZWFyY2gtcmluZykKICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIHNlYXJjaC1y aW5nIHJlZ2V4cC1zZWFyY2gtcmluZykpKQogICAgICAgICAobWF4LWxlbiAoaWYgaGlzdG9yeQog ICAgICAgICAgICAgICAgICAgICAgKCsgNCAoYXBwbHkgIydtYXggKG1hcGNhciAjJ2xlbmd0aCBo aXN0b3J5KSkpCiAgICAgICAgICAgICAgICAgICAgMCkpKQogICAgKGNvbnN1bHQtLXJlbW92ZS1k dXBzCiAgICAgKG1hcGNhcgogICAgICAobGFtYmRhIChjYW5kKQogICAgICAgIDs7IEVtYWNzIDI3 LjEgdXNlcyBzZXR0aW5ncyBvbiB0aGUgc2VhcmNoIHN0cmluZywgd2UgY2FuIHVzZSB0aGF0IGZv ciBuYXJyb3dpbmcuCiAgICAgICAgKGxldCogKChwcm9wcyAocGxpc3QtbWVtYmVyICh0ZXh0LXBy b3BlcnRpZXMtYXQgMCBjYW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn aXNlYXJjaC1yZWdleHAtZnVuY3Rpb24pKQogICAgICAgICAgICAgICAodHlwZSAocGNhc2UgKGNh ZHIgcHJvcHMpCiAgICAgICAgICAgICAgICAgICAgICAgKChhbmQgJ25pbCAoZ3VhcmQgKG5vdCBw cm9wcykpKSA/cikKICAgICAgICAgICAgICAgICAgICAgICAoJ25pbCAgICAgICAgICAgICAgICAg ICAgICAgICAgID9sKQogICAgICAgICAgICAgICAgICAgICAgICgnd29yZC1zZWFyY2gtcmVnZXhw ICAgICAgICAgICAgP3cpCiAgICAgICAgICAgICAgICAgICAgICAgKCdpc2VhcmNoLXN5bWJvbC1y ZWdleHAgICAgICAgICA/cykKICAgICAgICAgICAgICAgICAgICAgICAoJ2NoYXItZm9sZC10by1y ZWdleHAgICAgICAgICAgID9jKQogICAgICAgICAgICAgICAgICAgICAgIChfICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgP3UpKSkpCiAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplCiAg ICAgICAgICAgICAgICAgICA7OyBEaXNhbWJpZ3VhdGUgaGlzdG9yeSBpdGVtcy4gVGhlIHNhbWUg c3RyaW5nIGNvdWxkCiAgICAgICAgICAgICAgICAgICA7OyBvY2N1ciB3aXRoIGRpZmZlcmVudCBz ZWFyY2ggdHlwZXMuCiAgICAgICAgICAgICAgICAgICAoY2hhci10by1zdHJpbmcgKCsgY29uc3Vs dC0tdG9mdS1jaGFyIHR5cGUpKQogICAgICAgICAgICAgICAgICAgJ2ludmlzaWJsZSB0CiAgICAg ICAgICAgICAgICAgICAnY29uc3VsdC0tYW5ub3RhdGlvbgogICAgICAgICAgICAgICAgICAgKGNv bmNhdCAobWFrZS1zdHJpbmcgKC0gbWF4LWxlbiAobGVuZ3RoIGNhbmQpKSAzMikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFsaXN0LWdldCB0eXBlIG5hcnJvdykpKQogICAgICAgICAgICAg ICAgICBjYW5kKSkpCiAgICAgIGhpc3RvcnkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29u c3VsdC1pc2VhcmNoICgpCiAgIlJlYWQgYSBzZWFyY2ggc3RyaW5nIHdpdGggY29tcGxldGlvbiBm cm9tIGhpc3RvcnkuCgpUaGlzIHJlcGxhY2VzIHRoZSBjdXJyZW50IHNlYXJjaCBzdHJpbmcgaWYg SXNlYXJjaCBpcyBhY3RpdmUsIGFuZApzdGFydHMgYSBuZXcgSXNlYXJjaCBzZXNzaW9uIG90aGVy d2lzZS4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAo bGV0ICgoaXNlYXJjaC1tZXNzYWdlLWZ1bmN0aW9uICdpZ25vcmUpIDs7IEF2b2lkIGZsaWNrZXIg aW4gZWNobyBhcmVhCiAgICAgICAgKGluaGliaXQtcmVkaXNwbGF5IHQpICAgICAgICAgICAgICA7 OyBBdm9pZCBmbGlja2VyIGluIG1vZGUgbGluZQogICAgICAgIChuYXJyb3cgJygoP2MgLiAiQ2hh ciIpCiAgICAgICAgICAgICAgICAgICg/dSAuICJDdXN0b20iKQogICAgICAgICAgICAgICAgICAo P2wgLiAiTGl0ZXJhbCIpCiAgICAgICAgICAgICAgICAgICg/ciAuICJSZWdleHAiKQogICAgICAg ICAgICAgICAgICAoP3MgLiAiU3ltYm9sIikKICAgICAgICAgICAgICAgICAgKD93IC4gIldvcmQi KSkpKQogICAgKHVubGVzcyBpc2VhcmNoLW1vZGUgKGlzZWFyY2gtbW9kZSB0KSkKICAgICh3aXRo LWlzZWFyY2gtc3VzcGVuZGVkCiAgICAgKHNldHEgaXNlYXJjaC1uZXctc3RyaW5nCiAgICAgICAg ICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICAgICAgIkktc2VhcmNoOiAiCiAgICAgICAgICAgIChj b25zdWx0LS1pc2VhcmNoLWNhbmRpZGF0ZXMgbmFycm93KQogICAgICAgICAgICA6Y2F0ZWdvcnkg J2NvbnN1bHQtaXNlYXJjaAogICAgICAgICAgICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9y eQogICAgICAgICAgICA6c29ydCBuaWwKICAgICAgICAgICAgOmFubm90YXRlICMnY29uc3VsdC0t Z2V0LWFubm90YXRpb24KICAgICAgICAgICAgOmluaXRpYWwgaXNlYXJjaC1zdHJpbmcKICAgICAg ICAgICAgOmtleW1hcCBjb25zdWx0LWlzZWFyY2gtbWFwCiAgICAgICAgICAgIDpsb29rdXAKICAg ICAgICAgICAgKGxhbWJkYSAoXyBjYW5kaWRhdGVzIHN0cikKICAgICAgICAgICAgICAoaWYtbGV0 IChjYW5kIChjYXIgKG1lbWJlciBzdHIgY2FuZGlkYXRlcykpKSAoc3Vic3RyaW5nIGNhbmQgMSkg c3RyKSkKICAgICAgICAgICAgOnByZXZpZXcKICAgICAgICAgICAgKGxhbWJkYSAoY2FuZCByZXN0 b3JlKQogICAgICAgICAgICAgICh1bmxlc3MgcmVzdG9yZQogICAgICAgICAgICAgICAgKHNldHEg aXNlYXJjaC1zdHJpbmcgY2FuZCkKICAgICAgICAgICAgICAgIDs7IEVtYWNzIDI3LjEgdXNlcyBw cm9wZXJ0aWVzIG9uIHRoZSBzZWFyY2ggc3RyaW5nIHRvIHN0b3JlIHNldHRpbmdzCiAgICAgICAg ICAgICAgICAod2hlbiAoZmJvdW5kcCAnaXNlYXJjaC11cGRhdGUtZnJvbS1zdHJpbmctcHJvcGVy dGllcykKICAgICAgICAgICAgICAgICAgKGlzZWFyY2gtdXBkYXRlLWZyb20tc3RyaW5nLXByb3Bl cnRpZXMgY2FuZCkpCiAgICAgICAgICAgICAgICAoaXNlYXJjaC11cGRhdGUpKSkKICAgICAgICAg ICAgOm5hcnJvdwogICAgICAgICAgICAoY29ucwogICAgICAgICAgICAgKGxhbWJkYSAoY2FuZCkg KGVxICgtIChhcmVmIGNhbmQgMCkgY29uc3VsdC0tdG9mdS1jaGFyKSBjb25zdWx0LS1uYXJyb3cp KQogICAgICAgICAgICAgbmFycm93KSkKICAgICAgICAgICBpc2VhcmNoLW5ldy1tZXNzYWdlCiAg ICAgICAgICAgKG1hcGNvbmNhdCAnaXNlYXJjaC10ZXh0LWNoYXItZGVzY3JpcHRpb24gaXNlYXJj aC1uZXctc3RyaW5nICIiKSkpCiAgICA7OyBTZXR0aW5nIGBpc2VhcmNoLXJlZ2V4cCcgZXRjIG9u bHkgd29ya3Mgb3V0c2lkZSBvZiBgd2l0aC1pc2VhcmNoLXN1c3BlbmRlZCcuCiAgICAodW5sZXNz IChwbGlzdC1tZW1iZXIgKHRleHQtcHJvcGVydGllcy1hdCAwIGlzZWFyY2gtc3RyaW5nKSAnaXNl YXJjaC1yZWdleHAtZnVuY3Rpb24pCiAgICAgIChzZXRxIGlzZWFyY2gtcmVnZXhwIHQKICAgICAg ICAgICAgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gbmlsKSkpKQoKOzs7OzsgQ29tbWFuZDogY29u c3VsdC1taW5vci1tb2RlLW1lbnUKCihkZWZ1biBjb25zdWx0LS1taW5vci1tb2RlLWNhbmRpZGF0 ZXMgKCkKICAiUmV0dXJuIGxpc3Qgb2YgbWlub3ItbW9kZSBjYW5kaWRhdGUgc3RyaW5ncy4iCiAg KG1hcGNhcgogICAocGNhc2UtbGFtYmRhIChgKCxuYW1lIC4gLHN5bSkpCiAgICAgKGxpc3QgbmFt ZSBzeW0KICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAgIChpZiAobG9jYWwtdmFyaWFibGUt aWYtc2V0LXAgc3ltKSAibCIgImciKQogICAgICAgICAgICAoaWYgKGFuZCAoYm91bmRwIHN5bSkg KHN5bWJvbC12YWx1ZSBzeW0pKSAiaSIgIm8iKSkpKQogICAoYXBwZW5kCiAgICA7OyBhY2NvcmRp bmcgdG8gZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1zeW1ib2wKICAg IDs7IHRoZSBtaW5vci1tb2RlLWxpc3QgY29udGFpbnMgKmFsbCogbWlub3IgbW9kZXMKICAgICht YXBjYXIgKGxhbWJkYSAoc3ltKSAoY29ucyAoc3ltYm9sLW5hbWUgc3ltKSBzeW0pKSBtaW5vci1t b2RlLWxpc3QpCiAgICA7OyB0YWtlIHRoZSBsaWdodGVycyBmcm9tIG1pbm9yLW1vZGUtYWxpc3QK ICAgIChkZWxxIG5pbAogICAgICAgICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCxzeW0gLGxp Z2h0ZXIpKQogICAgICAgICAgICAgICAgICAgICh3aGVuIChhbmQgbGlnaHRlciAobm90IChlcXVh bCAiIiBsaWdodGVyKSkpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBsaWdodGVyIChzdHJp bmctdHJpbSAoZm9ybWF0LW1vZGUtbGluZSBsaWdodGVyKSkpCiAgICAgICAgICAgICAgICAgICAg ICAodW5sZXNzIChzdHJpbmctYmxhbmstcCBsaWdodGVyKQogICAgICAgICAgICAgICAgICAgICAg ICAoY29ucyBsaWdodGVyIHN5bSkpKSkKICAgICAgICAgICAgICAgICAgbWlub3ItbW9kZS1hbGlz dCkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1taW5vci1tb2RlLW1lbnUgKCkK ICAiRW5hYmxlIG9yIGRpc2FibGUgbWlub3IgbW9kZS4KClRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUg dG8gYG1pbm9yLW1vZGUtbWVudS1mcm9tLWluZGljYXRvcicuIgogIChpbnRlcmFjdGl2ZSkKICAo Y2FsbC1pbnRlcmFjdGl2ZWx5CiAgIChjb25zdWx0LS1yZWFkCiAgICAiTWlub3IgbW9kZTogIgog ICAgKGNvbnN1bHQtLW1pbm9yLW1vZGUtY2FuZGlkYXRlcykKICAgIDpyZXF1aXJlLW1hdGNoIHQK ICAgIDpjYXRlZ29yeSAnbWlub3ItbW9kZQogICAgOm5hcnJvdyBgKCwobGFtYmRhIChjYW5kKSAo c2VxLXBvc2l0aW9uIChjYWRkciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpKQogICAgICAgICAgICAg ICg/bCAuICJMb2NhbCIpCiAgICAgICAgICAgICAgKD9nIC4gIkdsb2JhbCIpCiAgICAgICAgICAg ICAgKD9pIC4gIk9uIikKICAgICAgICAgICAgICAoP28gLiAiT2ZmIikpCiAgICA6bG9va3VwICMn Y29uc3VsdC0tbG9va3VwLWNhZHIKICAgIDpoaXN0b3J5ICdjb25zdWx0LS1taW5vci1tb2RlLW1l bnUtaGlzdG9yeSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC10aGVtZQoKOzs7IyMjYXV0b2xv YWQKKGRlZnVuIGNvbnN1bHQtdGhlbWUgKHRoZW1lKQogICJEaXNhYmxlIGN1cnJlbnQgdGhlbWVz IGFuZCBlbmFibGUgVEhFTUUgZnJvbSBgY29uc3VsdC10aGVtZXMnLgoKVGhlIGNvbW1hbmQgc3Vw cG9ydHMgcHJldmlld2luZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRoZW1lLiIKICAoaW50ZXJh Y3RpdmUKICAgKGxpc3QKICAgIChsZXQgKChhdmFpbC10aGVtZXMgKHNlcS1maWx0ZXIgKGxhbWJk YSAoeCkgKG9yIChub3QgY29uc3VsdC10aGVtZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWVtcSB4IGNvbnN1bHQtdGhlbWVzKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIG5pbCAoY3VzdG9tLWF2YWlsYWJs ZS10aGVtZXMpKSkpCiAgICAgICAgICAoc2F2ZWQtdGhlbWUgKGNhciBjdXN0b20tZW5hYmxlZC10 aGVtZXMpKSkKICAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICJUaGVtZTogIgogICAgICAgKG1h cGNhciAobGFtYmRhICh4KSAob3IgeCAnZGVmYXVsdCkpIGF2YWlsLXRoZW1lcykKICAgICAgIDpy ZXF1aXJlLW1hdGNoIHQKICAgICAgIDpjYXRlZ29yeSAndGhlbWUKICAgICAgIDpoaXN0b3J5ICdj b25zdWx0LS10aGVtZS1oaXN0b3J5CiAgICAgICA6bG9va3VwIChsYW1iZGEgKF9pbnB1dCBfY2Fu ZHMgeCkKICAgICAgICAgICAgICAgICAoYW5kIHggKG5vdCAoc3RyaW5nPSB4ICJkZWZhdWx0Iikp IChpbnRlcm4tc29mdCB4KSkpCiAgICAgICA6cHJldmlldyAobGFtYmRhIChjYW5kIHJlc3RvcmUp CiAgICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAoKGFuZCByZXN0b3Jl IChub3QgY2FuZCkpIChjb25zdWx0LXRoZW1lIHNhdmVkLXRoZW1lKSkKICAgICAgICAgICAgICAg ICAgICgobWVtcSBjYW5kIGF2YWlsLXRoZW1lcykgKGNvbnN1bHQtdGhlbWUgY2FuZCkpKSkKICAg ICAgIDpkZWZhdWx0IChzeW1ib2wtbmFtZSAob3Igc2F2ZWQtdGhlbWUgJ2RlZmF1bHQpKSkpKSkK ICAodW5sZXNzIChlcSB0aGVtZSAoY2FyIGN1c3RvbS1lbmFibGVkLXRoZW1lcykpCiAgICAobWFw YyAjJ2Rpc2FibGUtdGhlbWUgY3VzdG9tLWVuYWJsZWQtdGhlbWVzKQogICAgKHdoZW4gdGhlbWUK ICAgICAgKGlmIChjdXN0b20tdGhlbWUtcCB0aGVtZSkKICAgICAgICAgIChlbmFibGUtdGhlbWUg dGhlbWUpCiAgICAgICAgKGxvYWQtdGhlbWUgdGhlbWUgOm5vLWNvbmZpcm0pKSkpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1idWZmZXIKCihjb25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0t Y2FjaGVkLWJ1ZmZlcnMKICAoYXBwZW5kIChkZWxxIChjdXJyZW50LWJ1ZmZlcikgKGJ1ZmZlci1s aXN0KSkgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSkpKQoKKGNvbnN1bHQtLWRlZmluZS1jYWNoZSBj b25zdWx0LS1jYWNoZWQtYnVmZmVyLW5hbWVzCiAgKG1hcGNhciAjJ2J1ZmZlci1uYW1lIChjb25z dWx0LS1jYWNoZWQtYnVmZmVycykpKQoKKGNvbnN1bHQtLWRlZmluZS1jYWNoZSBjb25zdWx0LS1j YWNoZWQtYnVmZmVyLWZpbGUtaGFzaAogIChjb25zdWx0LS1zdHJpbmctaGFzaCAoZGVscSBuaWwg KG1hcGNhciAjJ2J1ZmZlci1maWxlLW5hbWUgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXJzKSkpKSkK CihkZWZ1biBjb25zdWx0LS1vcGVuLWZpbGUgKGZpbGUgZGlzcGxheSkKICAiT3BlbiBGSUxFIHZp YSBESVNQTEFZIGZ1bmN0aW9uLiIKICAocGNhc2UtZXhoYXVzdGl2ZSBkaXNwbGF5CiAgICAoJ3N3 aXRjaC10by1idWZmZXIgKGZpbmQtZmlsZSBmaWxlKSkKICAgICgnc3dpdGNoLXRvLWJ1ZmZlci1v dGhlci13aW5kb3cgKGZpbmQtZmlsZS1vdGhlci13aW5kb3cgZmlsZSkpCiAgICAoJ3N3aXRjaC10 by1idWZmZXItb3RoZXItZnJhbWUgKGZpbmQtZmlsZS1vdGhlci1mcmFtZSBmaWxlKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLW9wZW4tYnVmZmVyIChidWZmZXIgZGlzcGxheSkKICAiT3BlbiBCVUZGRVIg dmlhIERJU1BMQVkgZnVuY3Rpb24uIgogIChmdW5jYWxsIGRpc3BsYXkgYnVmZmVyKSkKCihkZWZ2 YXIgY29uc3VsdC0tc291cmNlLWJvb2ttYXJrCiAgYCg6bmFtZSAgICAgIkJvb2ttYXJrIgogICAg Om5hcnJvdyAgID9tCiAgICA6Y2F0ZWdvcnkgYm9va21hcmsKICAgIDpmYWNlICAgICBjb25zdWx0 LWJvb2ttYXJrCiAgICA6aGlzdG9yeSAgYm9va21hcmstaGlzdG9yeQogICAgOml0ZW1zICAgICwj J2Jvb2ttYXJrLWFsbC1uYW1lcwogICAgOm9wZW4gICAgICwjJ2Jvb2ttYXJrLWp1bXApCiAgIkJv b2ttYXJrIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIg Y29uc3VsdC0tc291cmNlLXByb2plY3QtYnVmZmVyCiAgYCg6bmFtZSAgICAgICJQcm9qZWN0IEJ1 ZmZlciIKICAgIDpuYXJyb3cgICAgKD9wIC4gIlByb2plY3QiKQogICAgOmNhdGVnb3J5ICBidWZm ZXIKICAgIDpmYWNlICAgICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICAgYnVmZmVyLW5h bWUtaGlzdG9yeQogICAgOm9wZW4gICAgICAsIydjb25zdWx0LS1vcGVuLWJ1ZmZlcgogICAgOnBy ZWRpY2F0ZSAsKGxhbWJkYSAoKSBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikKICAgIDpp dGVtcwogICAgLChsYW1iZGEgKCkKICAgICAgICh3aGVuLWxldCAocm9vdCAoZnVuY2FsbCBjb25z dWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikpCiAgICAgICAgIChtYXBjYXIgIydidWZmZXItbmFt ZQogICAgICAgICAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKGZpbGUgKGJ1ZmZlci1maWxlLW5hbWUgeCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcHJlZml4LXAgcm9vdCBmaWxl KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXJz KSkpKSkpCiAgIlByb2plY3QgYnVmZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1 ZmZlcicuIikKCihkZWZ2YXIgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZQogIGAoOm5hbWUg ICAgICAiUHJvamVjdCBGaWxlIgogICAgOm5hcnJvdyAgICAoP3AgLiAiUHJvamVjdCIpCiAgICA6 Y2F0ZWdvcnkgIGZpbGUKICAgIDpmYWNlICAgICAgY29uc3VsdC1maWxlCiAgICA6aGlzdG9yeSAg IGZpbGUtbmFtZS1oaXN0b3J5CiAgICA6b3BlbiAgICAgICwjJ2NvbnN1bHQtLW9wZW4tZmlsZQog ICAgOnByZWRpY2F0ZSAsKGxhbWJkYSAoKSBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikK ICAgIDppdGVtcwogICAgLChsYW1iZGEgKCkKICAgICAgKHdoZW4tbGV0IChyb290IChmdW5jYWxs IGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uKSkKICAgICAgICAobGV0ICgobGVuIChsZW5n dGggcm9vdCkpCiAgICAgICAgICAgICAgKGludi1yb290IChwcm9wZXJ0aXplIHJvb3QgJ2ludmlz aWJsZSB0KSkKICAgICAgICAgICAgICAoaHQgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItZmlsZS1o YXNoKSkpCiAgICAgICAgICAobWFwY2FyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAg KGNvbmNhdCBpbnYtcm9vdCAoc3Vic3RyaW5nIHggbGVuKSkpCiAgICAgICAgICAgICAgICAgIChz ZXEtZmlsdGVyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCAobm90IChnZXRoYXNoIHggaHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1wcmVmaXgtcCByb290IHgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVjZW50Zi1saXN0KSkpKSkpCiAgIlByb2plY3QgZmlsZSBjYW5kaWRhdGUgc291cmNlIGZv ciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1oaWRkZW4tYnVm ZmVyCiAgYCg6bmFtZSAgICAgIkhpZGRlbiBCdWZmZXIiCiAgICA6bmFycm93ICAgMzIKICAgIDpj YXRlZ29yeSBidWZmZXIKICAgIDpmYWNlICAgICBjb25zdWx0LWJ1ZmZlcgogICAgOmhpc3Rvcnkg IGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAsIydjb25zdWx0LS1vcGVuLWJ1ZmZl cgogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAoKQogICAgICAgKGxldCAoKGZpbHRlciAoY29uc3Vs dC0tcmVnZXhwLWZpbHRlciBjb25zdWx0LWJ1ZmZlci1maWx0ZXIpKSkKICAgICAgICAgKHNlcS1m aWx0ZXIgKGxhbWJkYSAoeCkgKHN0cmluZy1tYXRjaC1wIGZpbHRlciB4KSkKICAgICAgICAgICAg ICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItbmFtZXMpKSkpKQogICJIaWRkZW4gYnVm ZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIgY29u c3VsdC0tc291cmNlLWJ1ZmZlcgogIGAoOm5hbWUgICAgICJCdWZmZXIiCiAgICA6bmFycm93ICAg P2IKICAgIDpjYXRlZ29yeSBidWZmZXIKICAgIDpmYWNlICAgICBjb25zdWx0LWJ1ZmZlcgogICAg Omhpc3RvcnkgIGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAsIydjb25zdWx0LS1v cGVuLWJ1ZmZlcgogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAoKQogICAgICAgKGxldCAoKGZpbHRl ciAoY29uc3VsdC0tcmVnZXhwLWZpbHRlciBjb25zdWx0LWJ1ZmZlci1maWx0ZXIpKSkKICAgICAg ICAgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkgKHN0cmluZy1tYXRjaC1wIGZpbHRlciB4KSkKICAg ICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItbmFtZXMpKSkpKQogICJC dWZmZXIgY2FuZGlkYXRlIHNvdXJjZSBmb3IgYGNvbnN1bHQtYnVmZmVyJy4iKQoKKGRlZnZhciBj b25zdWx0LS1zb3VyY2UtZmlsZQogIGAoOm5hbWUgICAgICJGaWxlIgogICAgOm5hcnJvdyAgID9m CiAgICA6Y2F0ZWdvcnkgZmlsZQogICAgOmZhY2UgICAgIGNvbnN1bHQtZmlsZQogICAgOmhpc3Rv cnkgIGZpbGUtbmFtZS1oaXN0b3J5CiAgICA6b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1maWxl CiAgICA6aXRlbXMKICAgICwobGFtYmRhICgpCiAgICAgICAobGV0ICgoaHQgKGNvbnN1bHQtLWNh Y2hlZC1idWZmZXItZmlsZS1oYXNoKSkpCiAgICAgICAgIChzZXEtcmVtb3ZlIChsYW1iZGEgKHgp IChnZXRoYXNoIHggaHQpKSByZWNlbnRmLWxpc3QpKSkpCiAgIlJlY2VudCBmaWxlIGNhbmRpZGF0 ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ1biBjb25zdWx0LS1idWZmZXIg KGRpc3BsYXkpCiAgIkJhY2tlbmQgaW1wbGVtZW50YXRpb24gb2YgYGNvbnN1bHQtYnVmZmVyJyB3 aXRoIERJU1BMQVkgZnVuY3Rpb24uIgogIChjb25zdWx0LS1tdWx0aQogICAiU3dpdGNoIHRvOiAi CiAgIGNvbnN1bHQtYnVmZmVyLXNvdXJjZXMKICAgOmhpc3RvcnkgJ2NvbnN1bHQtLWJ1ZmZlci1o aXN0b3J5CiAgIDpzb3J0IG5pbAogICA6cHJldmlldwogICAobGFtYmRhIChjYW5kIHJlc3RvcmUp CiAgICAgKHdoZW4gY2FuZAogICAgICAgKGxldCAoKG5hbWUgKGNhciBjYW5kKSkKICAgICAgICAg ICAgIChhY3Rpb24gKG9yIChwbGlzdC1nZXQgKGNkciBjYW5kKSA6b3BlbikgIydjb25zdWx0LS1v cGVuLWJ1ZmZlcikpKQogICAgICAgICAoY29uZAogICAgICAgICAgKHJlc3RvcmUgKGZ1bmNhbGwg YWN0aW9uIG5hbWUgZGlzcGxheSkpCiAgICAgICAgICA7OyBJbiBvcmRlciB0byBhdm9pZCBzbG93 bmVzcyBhbmQgdW5uZWNlc3NhcnkgY29tcGxleGl0eSwgd2UKICAgICAgICAgIDs7IG9ubHkgcHJl dmlldyBidWZmZXJzLiBMb2FkaW5nIHJlY2VudCBmaWxlcywgYm9va21hcmtzIG9yCiAgICAgICAg ICA7OyB2aWV3cyBjYW4gcmVzdWx0IGluIGV4cGVuc2l2ZSBvcGVyYXRpb25zLgogICAgICAgICAg KChhbmQgKGVxIGFjdGlvbiAjJ2NvbnN1bHQtLW9wZW4tYnVmZmVyKQogICAgICAgICAgICAgICAg KG9yIChlcSBkaXNwbGF5ICMnc3dpdGNoLXRvLWJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAo ZXEgZGlzcGxheSAjJ3N3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93KSkKICAgICAgICAgICAg ICAgIChnZXQtYnVmZmVyIG5hbWUpKQogICAgICAgICAgIChmdW5jYWxsIGRpc3BsYXkgbmFtZSAn bm9yZWNvcmQpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtYnVmZmVyICgp CiAgIkVuaGFuY2VkIGBzd2l0Y2gtdG8tYnVmZmVyJyBjb21tYW5kIHdpdGggc3VwcG9ydCBmb3Ig dmlydHVhbCBidWZmZXJzLgoKVGhlIGNvbW1hbmQgc3VwcG9ydHMgcmVjZW50IGZpbGVzLCBib29r bWFya3MsIHZpZXdzIGFuZCBwcm9qZWN0IGZpbGVzIGFzIHZpcnR1YWwKYnVmZmVycy4gQnVmZmVy cyBhcmUgcHJldmlld2VkLiBGdXJ0aGVybW9yZSBuYXJyb3dpbmcgdG8gYnVmZmVycyAoYiksIGZp bGVzIChmKSwKYm9va21hcmtzIChtKSBhbmQgcHJvamVjdCBmaWxlcyAocCkgaXMgc3VwcG9ydGVk IHZpYSB0aGUgY29ycmVzcG9uZGluZyBrZXlzLiBJbgpvcmRlciB0byBkZXRlcm1pbmUgdGhlIHBy b2plY3Qtc3BlY2lmaWMgZmlsZXMgYW5kIGJ1ZmZlcnMsIHRoZQpgY29uc3VsdC1wcm9qZWN0LXJv b3QtZnVuY3Rpb24nIGlzIHVzZWQuIFNlZSBgY29uc3VsdC1idWZmZXItc291cmNlcycgYW5kCmBj b25zdWx0LS1tdWx0aScgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB2aXJ0dWFsIGJ1ZmZl ciBzb3VyY2VzLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10 by1idWZmZXIpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtYnVmZmVyLW90aGVyLXdp bmRvdyAoKQogICJWYXJpYW50IG9mIGBjb25zdWx0LWJ1ZmZlcicgd2hpY2ggb3BlbnMgaW4gb3Ro ZXIgd2luZG93LiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10 by1idWZmZXItb3RoZXItd2luZG93KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWJ1 ZmZlci1vdGhlci1mcmFtZSAoKQogICJWYXJpYW50IG9mIGBjb25zdWx0LWJ1ZmZlcicgd2hpY2gg b3BlbnMgaW4gb3RoZXIgZnJhbWUuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tYnVmZmVy ICMnc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci1mcmFtZSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0 LWttYWNybwoKKGRlZnVuIGNvbnN1bHQtLWttYWNyby1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBh bGlzdCBvZiBrbWFjcm9zIGFuZCBpbmRpY2VzLiIKICAodGhyZWFkLWxhc3QKICAgICAgOzsgTGlz dCBvZiBtYWNyb3MKICAgICAgKGFwcGVuZCAod2hlbiBsYXN0LWtiZC1tYWNybwogICAgICAgICAg ICAgICAgYCgoLGxhc3Qta2JkLW1hY3JvICxrbWFjcm8tY291bnRlciAsa21hY3JvLWNvdW50ZXIt Zm9ybWF0KSkpCiAgICAgICAgICAgICAga21hY3JvLXJpbmcpCiAgICA7OyBBZGQgaW5kaWNlcwog ICAgKHNlcS1tYXAtaW5kZXhlZCAjJ2NvbnMpCiAgICA7OyBGaWx0ZXIgbW91c2UgY2xpY2tzCiAg ICAoc2VxLXJlbW92ZSAobGFtYmRhICh4KSAoc2VxLXNvbWUgIydtb3VzZS1ldmVudC1wIChjYWFy IHgpKSkpCiAgICA7OyBGb3JtYXQgbWFjcm9zCiAgICAobWFwY2FyIChwY2FzZS1sYW1iZGEgKGAo KCxrZXlzICxjb3VudGVyICxmb3JtYXQpIC4gLGluZGV4KSkKICAgICAgICAgICAgICAocHJvcGVy dGl6ZQogICAgICAgICAgICAgICAoZm9ybWF0LWtiZC1tYWNybyBrZXlzIDEpCiAgICAgICAgICAg ICAgICdjb25zdWx0LS1rbWFjcm8taW5kZXggaW5kZXgKICAgICAgICAgICAgICAgJ2NvbnN1bHQt LWFubm90YXRpb24KICAgICAgICAgICAgICAgOzsgSWYgdGhlIGNvdW50ZXIgaXMgMCBhbmQgdGhl IGNvdW50ZXIgZm9ybWF0IGlzIGl0cyBkZWZhdWx0LAogICAgICAgICAgICAgICA7OyB0aGVuIHRo ZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgY291bnRlciBpc24ndCBhY3R1YWxseQogICAg ICAgICAgICAgICA7OyBiZWluZyB1c2VkLiAgVGhpcyBjYW4gb25seSBiZSB3cm9uZyB3aGVuIGEg dXNlcgogICAgICAgICAgICAgICA7OyBpbnRlbnRpb25hbGx5IHN0YXJ0cyB0aGUgY291bnRlciB3 aXRoIGEgbmVnYXRpdmUgdmFsdWUgYW5kCiAgICAgICAgICAgICAgIDs7IHRoZW4gaW5jcmVtZW50 cyBpdCB0byAwLgogICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgKChub3QgKHN0 cmluZz0gZm9ybWF0ICIlZCIpKSA7OyBzaG93IGNvdW50ZXIgZm9yIG5vbi1kZWZhdWx0IGZvcm1h dAogICAgICAgICAgICAgICAgIChmb3JtYXQgIiAoY291bnRlcj0lZCwgZm9ybWF0PSVzKSAiIGNv dW50ZXIgZm9ybWF0KSkKICAgICAgICAgICAgICAgICgoLz0gY291bnRlciAwKSA7OyBzaG93IGNv dW50ZXIgaWYgbm9uLXplcm8KICAgICAgICAgICAgICAgICAoZm9ybWF0ICIgKGNvdW50ZXI9JWQp IiBjb3VudGVyKSkpKSkpCiAgICAoY29uc3VsdC0tcmVtb3ZlLWR1cHMpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LWttYWNybyAoYXJnKQogICJSdW4gYSBjaG9zZW4ga2V5Ym9hcmQg bWFjcm8uCgpXaXRoIHByZWZpeCBBUkcsIHJ1biB0aGUgbWFjcm8gdGhhdCBtYW55IHRpbWVzLgpN YWNyb3MgY29udGFpbmluZyBtb3VzZSBjbGlja3MgYXJlIG9taXR0ZWQuIgogIChpbnRlcmFjdGl2 ZSAicCIpCiAgKGxldCAoKHNlbGVjdGVkIChjb25zdWx0LS1yZWFkCiAgICAgICAgICAgICAgICAg ICAiS2V5Ym9hcmQgbWFjcm86ICIKICAgICAgICAgICAgICAgICAgIChvciAoY29uc3VsdC0ta21h Y3JvLWNhbmRpZGF0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIk5vIGtl eWJvYXJkIG1hY3JvcyBkZWZpbmVkIikpCiAgICAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgJ2Nv bnN1bHQta21hY3JvCiAgICAgICAgICAgICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAg ICAgICAgICAgICA6c29ydCBuaWwKICAgICAgICAgICAgICAgICAgIDpoaXN0b3J5ICdjb25zdWx0 LS1rbWFjcm8taGlzdG9yeQogICAgICAgICAgICAgICAgICAgOmFubm90YXRlICMnY29uc3VsdC0t Z2V0LWFubm90YXRpb24KICAgICAgICAgICAgICAgICAgIDpsb29rdXAKICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKF8gY2FuZGlkYXRlcyBjYW5kKQogICAgICAgICAgICAgICAgICAgICAoZ2V0 LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC0ta21hY3JvLWluZGV4CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2FyIChtZW1iZXIgY2FuZCBjYW5kaWRhdGVzKSkpKSkp KQogICAgKGlmICg9IDAgc2VsZWN0ZWQpCiAgICAgICAgOzsgSWYgdGhlIGZpcnN0IGVsZW1lbnQg aGFzIGJlZW4gc2VsZWN0ZWQsIGp1c3QgcnVuIHRoZSBsYXN0IG1hY3JvLgogICAgICAgIChrbWFj cm8tY2FsbC1tYWNybyAob3IgYXJnIDEpIHQgbmlsKQogICAgICA7OyBPdGhlcndpc2UsIHJ1biBh IGttYWNybyBmcm9tIHRoZSByaW5nLgogICAgICAobGV0KiAoKHNlbGVjdGVkICgtIHNlbGVjdGVk IDEpKQogICAgICAgICAgICAgKGttYWNybyAobnRoIHNlbGVjdGVkIGttYWNyby1yaW5nKSkKICAg ICAgICAgICAgIDs7IFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgdmFyaWFibGVzIHRvIHJldHJpZXZl IHRoZSBjb3JyZWN0CiAgICAgICAgICAgICA7OyBzZXR0aW5ncy4gIE1haW5seSwgd2Ugd2FudCB0 aGUgbWFjcm8gY291bnRlciB0byBwZXJzaXN0LCB3aGljaAogICAgICAgICAgICAgOzsgYXV0b21h dGljYWxseSBoYXBwZW5zIHdoZW4gY3ljbGluZyB0aGUgcmluZy4KICAgICAgICAgICAgIChsYXN0 LWtiZC1tYWNybyAoY2FyIGttYWNybykpCiAgICAgICAgICAgICAoa21hY3JvLWNvdW50ZXIgKGNh ZHIga21hY3JvKSkKICAgICAgICAgICAgIChrbWFjcm8tY291bnRlci1mb3JtYXQgKGNhZGRyIGtt YWNybykpKQogICAgICAgIChrbWFjcm8tY2FsbC1tYWNybyAob3IgYXJnIDEpIHQpCiAgICAgICAg OzsgT25jZSBkb25lLCBwdXQgdXBkYXRlZCB2YXJpYWJsZXMgYmFjayBpbnRvIHRoZSByaW5nLgog ICAgICAgIChzZXRmIChudGggc2VsZWN0ZWQga21hY3JvLXJpbmcpCiAgICAgICAgICAgICAgKGxp c3QgbGFzdC1rYmQtbWFjcm8KICAgICAgICAgICAgICAgICAgICBrbWFjcm8tY291bnRlcgogICAg ICAgICAgICAgICAgICAgIGttYWNyby1jb3VudGVyLWZvcm1hdCkpKSkpKQoKOzs7OzsgQ29tbWFu ZDogY29uc3VsdC1pbWVudQoKKGRlZnVuIGNvbnN1bHQtLWltZW51LXNwZWNpYWwgKF9uYW1lIHBv cyBidWYgbmFtZSBmbiAmcmVzdCBhcmdzKQogICJXcmFwcGVyIGZ1bmN0aW9uIGZvciBzcGVjaWFs IGltZW51IGl0ZW1zLgoKUE9TIGlzIHRoZSBwb3NpdGlvbi4KQlVGIGlzIHRoZSBidWZmZXIuCk5B TUUgaXMgdGhlIGl0ZW0gbmFtZS4KRk4gaXMgdGhlIG9yaWdpbmFsIHNwZWNpYWwgaXRlbSBmdW5j dGlvbi4KQVJHUyBhcmUgdGhlIGFyZ3VtZW50cyB0byB0aGUgc3BlY2lhbCBpdGVtIGZ1bmN0aW9u LiIKICAoc3dpdGNoLXRvLWJ1ZmZlciBidWYpCiAgKGFwcGx5IGZuIG5hbWUgcG9zIGFyZ3MpKQoK KGRlZnVuIGNvbnN1bHQtLWltZW51LWZsYXR0ZW4gKHByZWZpeCBsaXN0KQogICJGbGF0dGVuIGlt ZW51IExJU1QuClByZXBlbmQgUFJFRklYIGluIGZyb250IG9mIGFsbCBpdGVtcy4iCiAgKG1hcGNh bgogICAobGFtYmRhIChpdGVtKQogICAgIChpZiAoaW1lbnUtLXN1YmFsaXN0LXAgaXRlbSkKICAg ICAgICAgKGNvbnN1bHQtLWltZW51LWZsYXR0ZW4KICAgICAgICAgIChjb25jYXQgcHJlZml4IChh bmQgcHJlZml4ICIvIikgKGNhciBpdGVtKSkKICAgICAgICAgIChjZHIgaXRlbSkpCiAgICAgICAo bGV0ICgoa2V5IChjb25jYXQKICAgICAgICAgICAgICAgICAgIChhbmQgcHJlZml4IChjb25jYXQg KHByb3BlcnRpemUgcHJlZml4ICdmYWNlICdjb25zdWx0LWltZW51LXByZWZpeCkgIiAiKSkKICAg ICAgICAgICAgICAgICAgIChjYXIgaXRlbSkpKQogICAgICAgICAgICAgKHBheWxvYWQgKGNkciBp dGVtKSkpCiAgICAgICAgIChsaXN0IChjb25zIGtleQogICAgICAgICAgICAgICAgICAgICAocGNh c2UgcGF5bG9hZAogICAgICAgICAgICAgICAgICAgICAgIDs7IFNpbXBsZSBtYXJrZXIgaXRlbQog ICAgICAgICAgICAgICAgICAgICAgICgocHJlZCBtYXJrZXJwKSBwYXlsb2FkKQogICAgICAgICAg ICAgICAgICAgICAgIDs7IFNpbXBsZSBpbnRlZ2VyIGl0ZW0KICAgICAgICAgICAgICAgICAgICAg ICAoKHByZWQgaW50ZWdlcnApIChjb3B5LW1hcmtlciBwYXlsb2FkKSkKICAgICAgICAgICAgICAg ICAgICAgICA7OyBTZW1hbnRpYyB1c2VzIG92ZXJsYXkgZm9yIHBvc2l0aW9ucwogICAgICAgICAg ICAgICAgICAgICAgICgocHJlZCBvdmVybGF5cCkgKGNvcHktbWFya2VyIChvdmVybGF5LXN0YXJ0 IHBheWxvYWQpKSkKICAgICAgICAgICAgICAgICAgICAgICA7OyBXcmFwIHNwZWNpYWwgaXRlbQog ICAgICAgICAgICAgICAgICAgICAgIChgKCxwb3MgLGZuIC4gLGFyZ3MpCiAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IHBvcyAjJ2Nv bnN1bHQtLWltZW51LXNwZWNpYWwgKGN1cnJlbnQtYnVmZmVyKSAoY2FyIGl0ZW0pIGZuKQogICAg ICAgICAgICAgICAgICAgICAgICAgYXJncykpCiAgICAgICAgICAgICAgICAgICAgICAgKF8gKGVy cm9yICJVbmtub3duIGltZW51IGl0ZW06ICVTIiBpdGVtKSkpKSkpKSkKICAgbGlzdCkpCgooZGVm dW4gY29uc3VsdC0taW1lbnUtY29tcHV0ZSAoKQogICJDb21wdXRlIGltZW51IGNhbmRpZGF0ZXMu IgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAobGV0KiAoKGltZW51LWF1dG8tcmVz Y2FuIHQpCiAgICAgICAgIChpbWVudS11c2UtbWFya2VycyB0KQogICAgICAgICAoaXRlbXMgKGlt ZW51LS1tYWtlLWluZGV4LWFsaXN0IHQpKSkKICAgIChzZXRxIGl0ZW1zIChyZW1vdmUgaW1lbnUt LXJlc2Nhbi1pdGVtIGl0ZW1zKSkKICAgIDs7IEZpeCB0b3BsZXZlbCBpdGVtcywgZS5nLiwgZW1h Y3MtbGlzcC1tb2RlIHRvcGxldmVsIGl0ZW1zIGFyZSBmdW5jdGlvbnMKICAgICh3aGVuLWxldCAo dG9wbGV2ZWwgKGNkciAoc2VxLWZpbmQgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZGVyaXZlZC1tb2RlLXAgKGNhciB4KSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwpKSkKICAg ICAgKGxldCAoKHRvcHMgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkgKGxpc3RwIChjZHIgeCkpKSBp dGVtcykpCiAgICAgICAgICAgIChyZXN0IChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChsaXN0cCAo Y2RyIHgpKSkgaXRlbXMpKSkKICAgICAgICAoc2V0cSBpdGVtcyAoYXBwZW5kIHJlc3QgKGFuZCB0 b3BzIChsaXN0IChjb25zIHRvcGxldmVsIHRvcHMpKSkpKSkpCiAgICAoY29uc3VsdC0taW1lbnUt ZmxhdHRlbiBuaWwgaXRlbXMpKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1pdGVtcyAoKQogICJS ZXR1cm4gY2FjaGVkIGltZW51IGNhbmRpZGF0ZXMuIgogICh1bmxlc3MgKGVxdWFsIChjYXIgY29u c3VsdC0taW1lbnUtY2FjaGUpIChidWZmZXItbW9kaWZpZWQtdGljaykpCiAgICAoc2V0cSBjb25z dWx0LS1pbWVudS1jYWNoZSAoY29ucyAoYnVmZmVyLW1vZGlmaWVkLXRpY2spIChjb25zdWx0LS1p bWVudS1jb21wdXRlKSkpKQogIChjZHIgY29uc3VsdC0taW1lbnUtY2FjaGUpKQoKKGRlZnVuIGNv bnN1bHQtLWltZW51LWFsbC1pdGVtcyAoYnVmZmVycykKICAiUmV0dXJuIGFsbCBpbWVudSBpdGVt cyBmcm9tIGVhY2ggQlVGRkVSUy4iCiAgKHNlcS1tYXBjYXQgKGxhbWJkYSAoYnVmKSAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWYgKGNvbnN1bHQtLWltZW51LWl0ZW1zKSkpIGJ1ZmZlcnMpKQoKKGRl ZnVuIGNvbnN1bHQtLWltZW51LXByb2plY3QtYnVmZmVycyAoKQogICJSZXR1cm4gcHJvamVjdCBi dWZmZXJzIHdpdGggdGhlIHNhbWUgYG1ham9yLW1vZGUnIGFzIHRoZSBjdXJyZW50IGJ1ZmZlci4i CiAgKGlmLWxldCAocm9vdCAoYW5kIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uIChmdW5j YWxsIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uKSkpCiAgICAgIChzZXEtZmlsdGVyIChs YW1iZGEgKGJ1ZikKICAgICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKGZpbGUgKGJ1ZmZlci1m aWxlLW5hbWUgYnVmKSkKICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxIChidWZmZXItbG9j YWwtdmFsdWUgJ21ham9yLW1vZGUgYnVmKSBtYWpvci1tb2RlKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLXByZWZpeC1wIHJvb3QgZmlsZSkpKSkKICAgICAgICAgICAgICAgICAg KGJ1ZmZlci1saXN0KSkKICAgIChsaXN0IChjdXJyZW50LWJ1ZmZlcikpKSkKCihkZWZ1biBjb25z dWx0LS1pbWVudS1qdW1wIChpdGVtKQogICJKdW1wIHRvIGltZW51IElURU0gdmlhIGBjb25zdWx0 LS1qdW1wJy4KCkluIGNvbnRyYXN0IHRvIHRoZSBidWlsdGluIGBpbWVudScganVtcCBmdW5jdGlv biwKdGhpcyBmdW5jdGlvbiBjYW4ganVtcCBhY3Jvc3MgYnVmZmVycy4iCiAgKHBjYXNlIGl0ZW0K ICAgIChgKCxuYW1lICxwb3MgLGZuIC4gLGFyZ3MpIChhcHBseSBmbiBuYW1lIHBvcyBhcmdzKSkK ICAgIChgKCxfIC4gLHBvcykgKGNvbnN1bHQtLWp1bXAgcG9zKSkKICAgIChfIChlcnJvciAiVW5r bm93biBpbWVudSBpdGVtOiAlUyIgaXRlbSkpKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudSAoaXRl bXMpCiAgIkNob29zZSBmcm9tIGltZW51IElURU1TIHdpdGggcHJldmlldy4KClRoZSBzeW1ib2wg YXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoY29uc3VsdC0taW1l bnUtanVtcAogICAoY29uc3VsdC0tcmVhZAogICAgIkdvIHRvIGl0ZW06ICIKICAgIChvciBpdGVt cyAodXNlci1lcnJvciAiSW1lbnUgaXMgZW1wdHkiKSkKICAgIDpwcmV2aWV3CiAgICAobGV0ICgo cHJldmlldyAoY29uc3VsdC0tcHJldmlldy1wb3NpdGlvbikpKQogICAgICAobGFtYmRhIChjYW5k IHJlc3RvcmUpCiAgICAgICAgOzsgT25seSBwcmV2aWV3IHNpbXBsZSBtZW51IGl0ZW1zIHdoaWNo IGFyZSBtYXJrZXJzLAogICAgICAgIDs7IGluIG9yZGVyIHRvIGF2b2lkIGFueSBiYWQgc2lkZSBl ZmZlY3RzLgogICAgICAgIChmdW5jYWxsIHByZXZpZXcgKGFuZCAobWFya2VycCAoY2RyIGNhbmQp KSAoY2RyIGNhbmQpKSByZXN0b3JlKSkpCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICA6bmFycm93 CiAgICAobGV0ICgobmFycm93IChjZHIgKHNlcS1maW5kIChsYW1iZGEgKHgpIChkZXJpdmVkLW1v ZGUtcCAoY2FyIHgpKSkgY29uc3VsdC1pbWVudS1uYXJyb3cpKSkpCiAgICAgIChjb25zIChsYW1i ZGEgKGNhbmQpCiAgICAgICAgICAgICAgKHdoZW4tbGV0IChuIChjZHIgKGFzc29jIGNvbnN1bHQt LW5hcnJvdyBuYXJyb3cpKSkKICAgICAgICAgICAgICAgIChsZXQqICgoYyAoY2FyIGNhbmQpKQog ICAgICAgICAgICAgICAgICAgICAgIChsIChsZW5ndGggbikpKQogICAgICAgICAgICAgICAgICAo YW5kICg+IChsZW5ndGggYykgbCkKICAgICAgICAgICAgICAgICAgICAgICAoZXEgdCAoY29tcGFy ZS1zdHJpbmdzIG4gMCBsIGMgMCBsKSkKICAgICAgICAgICAgICAgICAgICAgICAoPSAoYXJlZiBj IGwpIDMyKSkpKSkKICAgICAgICAgICAgbmFycm93KSkKICAgIDpjYXRlZ29yeSAnaW1lbnUKICAg IDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtZWxlbQogICAgOmhpc3RvcnkgJ2NvbnN1bHQtLWlt ZW51LWhpc3RvcnkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAg IDpzb3J0IG5pbCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtaW1lbnUgKCkKICAi Q2hvb3NlIGl0ZW0gZnJvbSBmbGF0dGVuZWQgYGltZW51JyB1c2luZyBgY29tcGxldGluZy1yZWFk JyB3aXRoIHByZXZpZXcuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IGFuZCBuYXJyb3dp bmcuIFNlZSB0aGUgdmFyaWFibGUKYGNvbnN1bHQtaW1lbnUtbmFycm93Jywgd2hpY2ggY29uZmln dXJlcyB0aGUgbmFycm93aW5nLgoKU2VlIGFsc28gYGNvbnN1bHQtcHJvamVjdC1pbWVudScuIgog IChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0taW1lbnUgKGNvbnN1bHQtLWltZW51LWl0ZW1zKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1wcm9qZWN0LWltZW51ICgpCiAgIkNob29z ZSBpdGVtIGZyb20gdGhlIGltZW51cyBvZiBhbGwgYnVmZmVycyBmcm9tIHRoZSBzYW1lIHByb2pl Y3QuCgpJbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGJ1ZmZlcnMgYmVsb25naW5nIHRvIHRoZSBz YW1lIHByb2plY3QsIHRoZQpgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24nIGlzIHVzZWQu IE9ubHkgdGhlIGJ1ZmZlcnMgd2l0aCB0aGUKc2FtZSBtYWpvciBtb2RlIGFzIHRoZSBjdXJyZW50 IGJ1ZmZlciBhcmUgdXNlZC4gU2VlIGFsc28KYGNvbnN1bHQtaW1lbnUnIGZvciBtb3JlIGRldGFp bHMuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0taW1lbnUgKGNvbnN1bHQtLWltZW51LWFs bC1pdGVtcyAoY29uc3VsdC0taW1lbnUtcHJvamVjdC1idWZmZXJzKSkpKQoKKGRlZnVuIGNvbnN1 bHQtLWdyZXAtbWF0Y2hlcyAobGluZXMpCiAgIkZpbmQgZ3JlcCBtYXRjaCBmb3IgUkVHRVhQIGlu IExJTkVTLiIKICAobGV0ICgoY2FuZGlkYXRlcykpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAg IChkb2xpc3QgKHN0ciBsaW5lcykKICAgICAgICAod2hlbiAoc3RyaW5nLW1hdGNoIGNvbnN1bHQt LWdyZXAtcmVnZXhwIHN0cikKICAgICAgICAgIChsZXQqICgoZmlsZSAoZXhwYW5kLWZpbGUtbmFt ZSAoY29uc3VsdC0tc3RyaXAtYW5zaS1lc2NhcGUgKG1hdGNoLXN0cmluZyAxIHN0cikpKSkKICAg ICAgICAgICAgICAgICAobGluZSAoc3RyaW5nLXRvLW51bWJlciAoY29uc3VsdC0tc3RyaXAtYW5z aS1lc2NhcGUgKG1hdGNoLXN0cmluZyAyIHN0cikpKSkKICAgICAgICAgICAgICAgICAoc3RyIChz dWJzdHJpbmcgc3RyIChtYXRjaC1lbmQgMCkpKQogICAgICAgICAgICAgICAgIChsb2MgKGNvbnN1 bHQtLWZvcm1hdC1sb2NhdGlvbiAoc3RyaW5nLXJlbW92ZS1wcmVmaXggZGVmYXVsdC1kaXJlY3Rv cnkgZmlsZSkgbGluZSkpCiAgICAgICAgICAgICAgICAgKHBvcykpCiAgICAgICAgICAgICh3aGls ZSAoc3RyaW5nLW1hdGNoIGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwIHN0cikKICAgICAgICAg ICAgICAodW5sZXNzIHBvcwogICAgICAgICAgICAgICAgKHNldHEgcG9zIChtYXRjaC1iZWdpbm5p bmcgMCkpKQogICAgICAgICAgICAgIChzZXRxIHN0ciAoY29uY2F0IChzdWJzdHJpbmcgc3RyIDAg KG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJv cGVydGl6ZSAobWF0Y2gtc3RyaW5nIDEgc3RyKSAnZmFjZSAnY29uc3VsdC1wcmV2aWV3LW1hdGNo KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzdHJpbmcgc3RyIChtYXRjaC1l bmQgMCkpKSkpCiAgICAgICAgICAgIChzZXRxIHN0ciAoY29uc3VsdC0tc3RyaXAtYW5zaS1lc2Nh cGUgc3RyKSkKICAgICAgICAgICAgKHB1c2ggKGxpc3QgKGNvbmNhdCBsb2Mgc3RyKSBmaWxlIGxp bmUgKG9yIHBvcyAwKSkgY2FuZGlkYXRlcykpKSkpCiAgICAobnJldmVyc2UgY2FuZGlkYXRlcykp KQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1ncmVwCgooZGVmdW4gY29uc3VsdC0tZ3JlcC1tYXJr ZXIgKG9wZW4pCiAgIkdyZXAgY2FuZGlkYXRlIHRvIG1hcmtlci4KCk9QRU4gaXMgdGhlIGZ1bmN0 aW9uIHRvIG9wZW4gbmV3IGZpbGVzLiIKICAobGFtYmRhIChfaW5wdXQgY2FuZGlkYXRlcyBjYW5k KQogICAgKHdoZW4tbGV0KiAoKGxvYyAoY2RyIChhc3NvYyBjYW5kIGNhbmRpZGF0ZXMpKSkKICAg ICAgICAgICAgICAgIChidWYgKGZ1bmNhbGwgb3BlbiAoY2FyIGxvYykpKSkKICAgICAgKHdpdGgt Y3VycmVudC1idWZmZXIgYnVmCiAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgICAgIChz YXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAod2lkZW4pCiAgICAgICAgICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpCiAgICAgICAgICAgIDs7IExvY2F0aW9uIGRhdGEgbWlnaHQgYmUgaW52YWxp ZCBieSBub3chCiAgICAgICAgICAgIChpZ25vcmUtZXJyb3JzCiAgICAgICAgICAgICAgKGZvcndh cmQtbGluZSAoLSAoY2FkciBsb2MpIDEpKQogICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgKGNh ZGRyIGxvYykpKQogICAgICAgICAgICAocG9pbnQtbWFya2VyKSkpKSkpKQoKKGRlZnVuIGNvbnN1 bHQtLWdyZXAgKHByb21wdCBjbWQgZGlyIGluaXRpYWwpCiAgIlJ1biBncmVwIENNRCBpbiBESVIg d2l0aCBJTklUSUFMIGlucHV0LgoKUFJPTVBUIGlzIHRoZSBwcm9tcHQgc3RyaW5nLgpUaGUgc3lt Ym9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGxldCogKChw cm9tcHQtZGlyIChjb25zdWx0LS1kaXJlY3RvcnktcHJvbXB0IHByb21wdCBkaXIpKQogICAgICAg ICAoZGVmYXVsdC1kaXJlY3RvcnkgKGNkciBwcm9tcHQtZGlyKSkpCiAgICAoY29uc3VsdC0td2l0 aC1maWxlLXByZXZpZXcgKG9wZW4pCiAgICAgIChjb25zdWx0LS1qdW1wCiAgICAgICAoY29uc3Vs dC0tcmVhZAogICAgICAgIChjYXIgcHJvbXB0LWRpcikKICAgICAgICAoY29uc3VsdC0tYXN5bmMt Y29tbWFuZCBjbWQKICAgICAgICAgIChjb25zdWx0LS1hc3luYy10cmFuc2Zvcm0gY29uc3VsdC0t Z3JlcC1tYXRjaGVzKSkKICAgICAgICA6bG9va3VwIChjb25zdWx0LS1ncmVwLW1hcmtlciBvcGVu KQogICAgICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKQogICAgICAgIDpp bml0aWFsIChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0IGluaXRpYWwpCiAgICAg ICAgOmFkZC1oaXN0b3J5IChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0ICh0aGlu Zy1hdC1wb2ludCAnc3ltYm9sKSkKICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAgOmNh dGVnb3J5ICd4cmVmLWxvY2F0aW9uCiAgICAgICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0t Z3JlcC1oaXN0b3J5KQogICAgICAgIDpzb3J0IG5pbCkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVm dW4gY29uc3VsdC1ncmVwICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVn ZXhwIHdpdGggZ3JlcCBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIGlucHV0IHN0cmlu ZyBpcyBzcGxpdCwgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0cmluZyBpcyBwYXNzZWQgdG8KdGhl IGFzeW5jaHJvbm91cyBncmVwIHByb2Nlc3MgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgc3Ry aW5nIGlzCnBhc3NlZCB0byB0aGUgY29tcGxldGlvbi1zdHlsZSBmaWx0ZXJpbmcuIFRoZSBpbnB1 dCBzdHJpbmcgaXMgc3BsaXQgYXQKYSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIsIHdoaWNoIGlzIGdp dmVuIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCmlucHV0IHN0cmluZy4gVGhlIGZvcm1h dCBpcyBzaW1pbGFyIHRvIFBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9ucywKZS5nLiwgL3Jl Z2V4cC8uIEZ1cnRoZXJtb3JlIGNvbW1hbmQgbGluZSBvcHRpb25zIGNhbiBiZSBwYXNzZWQgdG8K Z3JlcCwgc3BlY2lmaWVkIGJlaGluZCAtLS4KCkV4YW1wbGU6ICNhc3luYy1yZWdleHAgLS0gZ3Jl cC1vcHRzI2ZpbHRlci1zdHJpbmcKClRoZSBzeW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhl IGZ1dHVyZSBoaXN0b3J5LiBJZiBgY29uc3VsdC1ncmVwJwppcyBjYWxsZWQgaW50ZXJhY3RpdmVs eSB3aXRoIGEgcHJlZml4IGFyZ3VtZW50LCB0aGUgdXNlciBjYW4gc3BlY2lmeQp0aGUgZGlyZWN0 b3J5IHRvIHNlYXJjaCBpbi4gQnkgZGVmYXVsdCB0aGUgcHJvamVjdCBkaXJlY3RvcnkgaXMgdXNl ZAppZiBgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24nIGlzIGRlZmluZWQgYW5kIHJldHVy bnMgbm9uLW5pbC4KT3RoZXJ3aXNlIHRoZSBgZGVmYXVsdC1kaXJlY3RvcnknIGlzIHNlYXJjaGVk LiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJHcmVwIiBjb25zdWx0LWdy ZXAtY29tbWFuZCBkaXIgaW5pdGlhbCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1n aXQtZ3JlcCAoJm9wdGlvbmFsIGRpciBpbml0aWFsKQogICJTZWFyY2ggZm9yIHJlZ2V4cCB3aXRo IGdyZXAgaW4gRElSIHdpdGggSU5JVElBTCBpbnB1dC4KClNlZSBgY29uc3VsdC1ncmVwJyBmb3Ig bW9yZSBkZXRhaWxzLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJHaXQt Z3JlcCIgY29uc3VsdC1naXQtZ3JlcC1jb21tYW5kIGRpciBpbml0aWFsKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LXJpcGdyZXAgKCZvcHRpb25hbCBkaXIgaW5pdGlhbCkKICAiU2Vh cmNoIGZvciByZWdleHAgd2l0aCByZyBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKU2VlIGBj b25zdWx0LWdyZXAnIGZvciBtb3JlIGRldGFpbHMuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGNv bnN1bHQtLWdyZXAgIlJpcGdyZXAiIGNvbnN1bHQtcmlwZ3JlcC1jb21tYW5kIGRpciBpbml0aWFs KSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtZmluZAoKKGRlZnVuIGNvbnN1bHQtLWZpbmQgKHBy b21wdCBjbWQgaW5pdGlhbCkKICAiUnVuIGZpbmQgQ01EIGluIGN1cnJlbnQgZGlyZWN0b3J5IHdp dGggSU5JVElBTCBpbnB1dC4KClBST01QVCBpcyB0aGUgcHJvbXB0LgpDTUQgaXMgdGhlIGZpbmQg YXJndW1lbnQgc3RyaW5nLgpUaGUgZmlsZW5hbWUgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1 dHVyZSBoaXN0b3J5LiIKICAoZmluZC1maWxlCiAgIChjb25zdWx0LS1yZWFkCiAgICBwcm9tcHQK ICAgIChjb25zdWx0LS1hc3luYy1jb21tYW5kIGNtZAogICAgICAoY29uc3VsdC0tYXN5bmMtbWFw IChsYW1iZGEgKHgpIChzdHJpbmctcmVtb3ZlLXByZWZpeCAiLi8iIHgpKSkpCiAgICA6c29ydCBu aWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDppbml0aWFsIChjb25jYXQgY29uc3VsdC1hc3lu Yy1kZWZhdWx0LXNwbGl0IGluaXRpYWwpCiAgICA6YWRkLWhpc3RvcnkgKGNvbmNhdCBjb25zdWx0 LWFzeW5jLWRlZmF1bHQtc3BsaXQgKHRoaW5nLWF0LXBvaW50ICdmaWxlbmFtZSkpCiAgICA6Y2F0 ZWdvcnkgJ2ZpbGUKICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWZpbmQtaGlzdG9yeSkp KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWZpbmQgKCZvcHRpb25hbCBkaXIgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBmaW5kIGluIERJUiB3aXRoIElOSVRJQUwg aW5wdXQuCgpUaGUgZmluZCBwcm9jZXNzIGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWls YXIgdG8gYGNvbnN1bHQtZ3JlcCcuClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxz IHJlZ2FyZGluZyB0aGUgYXN5bmNocm9ub3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlICJQIikK ICAobGV0KiAoKHByb21wdC1kaXIgKGNvbnN1bHQtLWRpcmVjdG9yeS1wcm9tcHQgIkZpbmQiIGRp cikpCiAgICAgICAgIChkZWZhdWx0LWRpcmVjdG9yeSAoY2RyIHByb21wdC1kaXIpKSkKICAgIChj b25zdWx0LS1maW5kIChjYXIgcHJvbXB0LWRpcikgY29uc3VsdC1maW5kLWNvbW1hbmQgaW5pdGlh bCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbG9jYXRlICgmb3B0aW9uYWwgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBsb2NhdGUgd2l0aCBJTklUSUFMIGlucHV0 LgoKVGhlIGxvY2F0ZSBwcm9jZXNzIGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWlsYXIg dG8gYGNvbnN1bHQtZ3JlcCcuClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxzIHJl Z2FyZGluZyB0aGUgYXN5bmNocm9ub3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlKQogIChjb25z dWx0LS1maW5kICJMb2NhdGU6ICIgY29uc3VsdC1sb2NhdGUtY29tbWFuZCBpbml0aWFsKSkKCjs7 Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbWFuCgooZGVmdW4gY29uc3VsdC0tbWFuLWZvcm1hdCAobGlu ZXMpCiAgIkZvcm1hdCBtYW4gY2FuZGlkYXRlcyBmcm9tIExJTkVTLiIKICAobGV0ICgoY2FuZGlk YXRlcykpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgIChkb2xpc3QgKHN0ciBsaW5lcykKICAg ICAgICAod2hlbiAoc3RyaW5nLW1hdGNoICJeXFwoLio/XFwpICstICtcXCguKlxcKSQiIHN0cikK ICAgICAgICAgIChsZXQgKChuYW1lIChtYXRjaC1zdHJpbmcgMSBzdHIpKQogICAgICAgICAgICAg ICAgKGRlc2MgKG1hdGNoLXN0cmluZyAyIHN0cikpKQogICAgICAgICAgICAocHVzaCAoY29ucwog ICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiJS0zMHMgJXMiCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwcm9wZXJ0aXplIG5hbWUgJ2ZhY2UgJ2NvbnN1bHQta2V5KQogICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXNjKQogICAgICAgICAgICAgICAgICAgbmFtZSkKICAgICAgICAgICAg ICAgICAgY2FuZGlkYXRlcykpKSkpCiAgICAobnJldmVyc2UgY2FuZGlkYXRlcykpKQoKOzs7IyMj YXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbWFuICgmb3B0aW9uYWwgaW5pdGlhbCkKICAiU2VhcmNo IGZvciByZWdleHAgd2l0aCBtYW4gd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIG1hbiBwcm9jZXNz IGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWlsYXIgdG8gYGNvbnN1bHQtZ3JlcCcuClNl ZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgYXN5bmNocm9u b3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlKQogIChtYW4gKGNvbnN1bHQtLXJlYWQKICAgICAg ICAiTWFudWFsIGVudHJ5OiAiCiAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWNvbW1hbmQgY29uc3Vs dC1tYW4tY29tbWFuZAogICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBjb25zdWx0 LS1tYW4tZm9ybWF0KSkKICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAgOmxvb2t1cCAj J2NvbnN1bHQtLWxvb2t1cC1jZHIKICAgICAgICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5 bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQogICAgICAgIDphZGQtaGlzdG9yeSAoY29uY2F0IGNv bnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpCiAgICAg ICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbWFuLWhpc3RvcnkpKSkpCgo7Ozs7IEludGVn cmF0aW9uIHdpdGggdGhlIGRlZmF1bHQgY29tcGxldGlvbiBzeXN0ZW0KCihkZWZ1biBjb25zdWx0 LS1kZWZhdWx0LWNvbXBsZXRpb24tY2FuZGlkYXRlICgpCiAgIlJldHVybiBjdXJyZW50IGNhbmRp ZGF0ZSBmcm9tIGRlZmF1bHQgY29tcGxldGlvbiBzeXN0ZW0uIgogICh3aGVuIChhbmQgKG5vdCBp Y29tcGxldGUtbW9kZSkgKGVxIGNvbXBsZXRpbmctcmVhZC1mdW5jdGlvbiAjJ2NvbXBsZXRpbmct cmVhZC1kZWZhdWx0KSkKICAgIChsZXQgKChjYW5kIChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXBy b3BlcnRpZXMpKSkKICAgICAgKHdoZW4gKHRlc3QtY29tcGxldGlvbiBjYW5kCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXRhYmxlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXByZWRpY2F0ZSkKICAgICAg ICBjYW5kKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIgKGNh dGVnb3J5IF9oaWdobGlnaHQpCiAgIlJldHVybiBkZWZhdWx0IGZpbHRlciBmdW5jdGlvbiBnaXZl biB0aGUgY29tcGxldGlvbiBDQVRFR09SWS4KClRoZSBjb21wbGV0aW9uIGNhdGVnb3J5IGlzIHVz ZWQgdG8gZmluZCB0aGUgY29tcGxldGlvbiBzdHlsZSB2aWEKYGNvbXBsZXRpb24tY2F0ZWdvcnkt ZGVmYXVsdHMnIGFuZCBgY29tcGxldGlvbi1jYXRlZ29yeS1vdmVycmlkZXMnLiIKICAobGFtYmRh IChzdHIgY2FuZHMpCiAgICA7OyBjb21wbGV0aW9uLWFsbC1jb21wbGV0aW9ucyByZXR1cm5zIGFu IGltcHJvcGVyIGxpc3QKICAgIDs7IHdoZXJlIHRoZSBsYXN0IGxpbmsgaXMgbm90IG5lY2Vzc2Fy aWx5IG5pbC4gRml4IHRoaXMhCiAgICAobmNvbmMgKGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25z CiAgICAgICAgICAgIHN0ciBjYW5kcyBuaWwgKGxlbmd0aCBzdHIpCiAgICAgICAgICAgIGAobWV0 YWRhdGEgKGNhdGVnb3J5IC4gLGNhdGVnb3J5KSkpCiAgICAgICAgICAgbmlsKSkpCgo7OyBBbm5v dW5jZSBub3cgdGhhdCBjb25zdWx0IGhhcyBiZWVuIGxvYWRlZAoocHJvdmlkZSAnY29uc3VsdCkK Cjs7OzsgSW50ZWdyYXRpb24gd2l0aCBvdGhlciBjb21wbGV0aW9uIHN5c3RlbXMKCih3aXRoLWV2 YWwtYWZ0ZXItbG9hZCAnaWNvbXBsZXRlIChyZXF1aXJlICdjb25zdWx0LWljb21wbGV0ZSkpCih3 aXRoLWV2YWwtYWZ0ZXItbG9hZCAnc2VsZWN0cnVtIChyZXF1aXJlICdjb25zdWx0LXNlbGVjdHJ1 bSkpCgo7OyBMb2NhbCBWYXJpYWJsZXM6Cjs7IG91dGxpbmUtcmVnZXhwOiAiOzs7OyogXFx8KGRl ZlxcKHVuXFx8Y3VzdG9tXFx8dmFyXFwpIGNvbnN1bHQtW2Etel0iCjs7IEVuZDoKOzs7IGNvbnN1 bHQuZWwgZW5kcyBoZXJlCg== --=_8eacb995e016baed37890613fffd2ad6--
bug-gnu-emacs@HIDDEN
:bug#46326
; Package emacs
.
Full text available.Received: (at 46326) by debbugs.gnu.org; 5 Feb 2021 15:58:31 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Feb 05 10:58:31 2021 Received: from localhost ([127.0.0.1]:44531 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1l83V8-0005iL-RO for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 10:58:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:42112) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1l83V7-0005i8-DV for 46326 <at> debbugs.gnu.org; Fri, 05 Feb 2021 10:58:29 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46937) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1l83V1-00012J-G5; Fri, 05 Feb 2021 10:58:23 -0500 Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:3098 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from <eliz@HIDDEN>) id 1l83V0-0005aB-Aq; Fri, 05 Feb 2021 10:58:23 -0500 Date: Fri, 05 Feb 2021 17:58:27 +0200 Message-Id: <83a6sipkv0.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: mail@HIDDEN In-Reply-To: <4aab2ef892b1df213ca67210021bcd47@HIDDEN> (mail@HIDDEN) Subject: Re: bug#46326: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook References: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> <83eehuppx6.fsf@HIDDEN> <4aab2ef892b1df213ca67210021bcd47@HIDDEN> X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 46326 Cc: 46326 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) > Date: Fri, 05 Feb 2021 16:20:13 +0100 > From: mail@HIDDEN > Cc: 46326 <at> debbugs.gnu.org > > > Please show information about the memory consumption. (The so-called > > "memory profile" doesn't actually measure memory consumption at all, > > it just uses memory allocation calls as a poor-man's profiling > > signal.) > > Yes, I am aware. I am not saying that live memory is the problem, > but the excessive amount of allocations is a problem, which creates > unnecessary garbage collector pauses. Therefore I can also not show > you a profile of the memory consumption, since it is not relevant. If you are saying that the Lisp code in question conses too many objects unnecessarily, then the solution is to modify the code to cons less objects. That doesn't necessarily indicates the existence of a bug in Emacs, certainly not with its memory management. > > What exactly caused you to run the profiler? is the code slow or > > something? If so, the problem may be something other than memory > > consumption. > > Yes, it is slow. Add-hook performs unnecessary allocations causing > pauses. After replacing the minibuffer-with-setup-hook default > implementation with my workaround the memory allocations went away > and the command is much faster. The add-hook calls do not appear in > the memory profile anymore. See the comment > https://github.com/minad/consult/issues/193#issuecomment-770650405. So if you already have a solution for the problem, what is it that you want us as Emacs maintainers to investigate and fix here?
bug-gnu-emacs@HIDDEN
:bug#46326
; Package emacs
.
Full text available.Received: (at 46326) by debbugs.gnu.org; 5 Feb 2021 14:09:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Feb 05 09:09:13 2021 Received: from localhost ([127.0.0.1]:43228 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1l81nN-0000cL-H5 for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 09:09:13 -0500 Received: from eggs.gnu.org ([209.51.188.92]:45184) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1l81nM-0000c9-3p for 46326 <at> debbugs.gnu.org; Fri, 05 Feb 2021 09:09:12 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45276) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1l81nG-0003a2-8i; Fri, 05 Feb 2021 09:09:06 -0500 Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:4333 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from <eliz@HIDDEN>) id 1l81nF-0000jl-Hc; Fri, 05 Feb 2021 09:09:06 -0500 Date: Fri, 05 Feb 2021 16:09:09 +0200 Message-Id: <83eehuppx6.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: mail@HIDDEN In-Reply-To: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> (mail@HIDDEN) Subject: Re: bug#46326: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook References: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 46326 Cc: 46326 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) > Date: Fri, 05 Feb 2021 13:51:41 +0100 > From: mail@HIDDEN > > I have an issue on 27.1.50 with excessive memory allocations when using > minibuffer-with-setup-hook with large closures and :append. This issue > has been > observed in my Consult package, which is similar to Counsel and which > provides > commands based on completing-read. Naturally I have to perform some > setup in the > minibuffer-setup-hook. Most of the memory allocations are due to > add-hook and in > particular the sort function. The sort functions is called because of > :append > which sets a hook priority. The reason seems to be that large closures > are > copied, but I didn't fully investigate the reasons for the issue. > > Example profile: > > 140,068,687 92% - consult-buffer > 140,068,687 92% - consult--buffer Please show information about the memory consumption. (The so-called "memory profile" doesn't actually measure memory consumption at all, it just uses memory allocation calls as a poor-man's profiling signal.) Please show a recipe starting from "emacs -Q" where a lot of memory is being consumed, and please show how much memory does the recipe consume. Also, I presume invoking "M-x garbage-collect RET" doesn't release that memory? If so, please show the return value of garbage-collect. > See the issue https://github.com/minad/consult/issues/193 for reference. I don't see any memory information in that discussion. I guess you thought the memory profiler somehow shows memory consumption, but it doesn't. What exactly caused you to run the profiler? is the code slow or something? If so, the problem may be something other than memory consumption.
bug-gnu-emacs@HIDDEN
:bug#46326
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 5 Feb 2021 13:43:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Feb 05 08:43:13 2021 Received: from localhost ([127.0.0.1]:43203 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1l81OC-0004FF-OZ for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 08:43:13 -0500 Received: from lists.gnu.org ([209.51.188.17]:54878) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <mail@HIDDEN>) id 1l80ah-0004zg-8t for submit <at> debbugs.gnu.org; Fri, 05 Feb 2021 07:52:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <mail@HIDDEN>) id 1l80ag-0000v1-WC for bug-gnu-emacs@HIDDEN; Fri, 05 Feb 2021 07:52:03 -0500 Received: from server.qxqx.de ([2a01:4f8:121:346::180]:34612 helo=mail.qxqx.de) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <mail@HIDDEN>) id 1l80ad-0002ow-Lp for bug-gnu-emacs@HIDDEN; Fri, 05 Feb 2021 07:52:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Message-ID:Subject:To:From:Date:Content-Transfer-Encoding:Content-Type:MIME-Version; bh=eM7GNSWg9+40Hfnm9VXYFiK0z1bUjpEji/Aj6finu7Q=; b=gE7hrcPWvMPW4uc+oRJDEdeg9tREVfseHWdxUI1QZ19PTacsjmSjexHThl71xoy6nIlqz8uyTUE8B1qVYT+CJjP3w+51TS2xqI0njMtEmDAr3n6e47tC5W26vArZNyq59rwSInE30F1hIrUr6TI2eVBTLkfw6fYQWpqkXCeSWaA=; MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Fri, 05 Feb 2021 13:51:41 +0100 From: mail@HIDDEN To: bug-gnu-emacs@HIDDEN Subject: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook Message-ID: <62c490ed0d8d24d8b259ac1ba55ea79e@HIDDEN> X-Sender: mail@HIDDEN User-Agent: Roundcube Webmail/1.2-git Received-SPF: pass client-ip=2a01:4f8:121:346::180; envelope-from=mail@HIDDEN; helo=mail.qxqx.de X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 05 Feb 2021 08:43:11 -0500 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -2.4 (--) Dear Emacs developers, I have an issue on 27.1.50 with excessive memory allocations when using minibuffer-with-setup-hook with large closures and :append. This issue has been observed in my Consult package, which is similar to Counsel and which provides commands based on completing-read. Naturally I have to perform some setup in the minibuffer-setup-hook. Most of the memory allocations are due to add-hook and in particular the sort function. The sort functions is called because of :append which sets a hook priority. The reason seems to be that large closures are copied, but I didn't fully investigate the reasons for the issue. Example profile: 140,068,687 92% - consult-buffer 140,068,687 92% - consult--buffer 140,068,687 92% - consult--multi 138,933,527 91% - consult--read 138,933,527 91% - apply 138,933,527 91% - #<subr consult--read> 99,916,347 65% - consult--with-async-1 99,916,347 65% - #<compiled 0x3e02774d5b1a3f7> 99,912,203 65% - consult--with-preview-1 80,735,735 53% - #<compiled -0xbfb98ad3a8adf1c> 80,735,735 53% - completing-read 80,735,735 53% - selectrum-completing-read 62,909,765 41% - selectrum-read >>> 58,826,659 38% + add-hook 1,077,206 0% + selectrum--minibuffer-post-command-hook .... >>> 19,176,468 12% + add-hook >>> 39,017,180 25% + add-hook The issue can be mitigated by using a modified version of minibuffer-with-setup-hook, where I am creating a symbol and fsetting instead of adding a lambda directly via add-hook. This technique is also used in set-transient-map in order to avoid problems with letrec-closures and add-hook/remove-hook. (defmacro consult--minibuffer-with-setup-hook (fun &rest body) (declare (indent 1) (debug t)) (let ((hook (make-symbol "hook")) (append)) (when (eq (car-safe fun) :append) (setq append '(t) fun (cadr fun))) `(let ((,hook (make-symbol "consult--minibuffer-setup"))) (fset ,hook (lambda () (remove-hook 'minibuffer-setup-hook ,hook) (funcall ,fun))) (unwind-protect (progn (add-hook 'minibuffer-setup-hook ,hook ,@append) ,@body) (remove-hook 'minibuffer-setup-hook ,hook))))) See the issue https://github.com/minad/consult/issues/193 for reference. Maybe there exists an alternative solution to the problem and the problem should be fixed on a different level than by replacing the minibuffer-with-setup-hook macro? Daniel Mendler In GNU Emacs 27.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.5, cairo version 1.16.0) of 2020-10-24 Repository revision: c847d5998f588dbf3eca5ea1ec573a2d64a97607 Repository branch: emacs-27 Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster)
mail@HIDDEN
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#46326
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.