From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.bugs Subject: bug#11939: 24.1; `save-buffers-kill-emacs' loses minibuffer focus when it calls `list-processes' Date: Tue, 17 Jul 2012 11:50:06 +0200 Message-ID: <5005354E.6040306@gmx.at> References: <500173A5.3040608@gmx.at> <1986D90E22154321A44B6E0110CA4F5A@us.oracle.com> <50019C2F.8060103@gmx.at> <6B9036DBFDEF4881AB39804520BF63B3@us.oracle.com> <5002BEC6.3040106@gmx.at> <893E59C2E4F94D6EB910560C9E8C42CD@us.oracle.com> <5002EAF4.5080107@gmx.at> <6F73D04E8EE144E780D602DFEBA48E7B@us.oracle.com> <5003DAF2.2060400@gmx.at> <50043C3D.7090201@gmx.at> <208B7D7BB4BC4339ADCC1166F76C1CD2@us.oracle.com> <500449B7.6070309@gmx.at> <023F63BCBF9442EBAEDCCE9D8A59E5E4@us.oracle.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090707010601010507010909" X-Trace: dough.gmane.org 1342519819 31624 80.91.229.3 (17 Jul 2012 10:10:19 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 17 Jul 2012 10:10:19 +0000 (UTC) Cc: 11939@debbugs.gnu.org To: Drew Adams Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 17 12:10:18 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Sr4jR-00039l-O6 for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Jul 2012 12:10:18 +0200 Original-Received: from localhost ([::1]:40410 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sr4jQ-0005C5-SS for geb-bug-gnu-emacs@m.gmane.org; Tue, 17 Jul 2012 06:10:16 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:54821) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sr4jK-00059q-VP for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2012 06:10:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sr4jD-0006Td-Mp for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2012 06:10:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:35842) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sr4jD-0006S2-JE for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2012 06:10:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Sr4p0-0001ml-7F for bug-gnu-emacs@gnu.org; Tue, 17 Jul 2012 06:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: martin rudalics Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 17 Jul 2012 10:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11939 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 11939-submit@debbugs.gnu.org id=B11939.13425201426833 (code B ref 11939); Tue, 17 Jul 2012 10:16:01 +0000 Original-Received: (at 11939) by debbugs.gnu.org; 17 Jul 2012 10:15:42 +0000 Original-Received: from localhost ([127.0.0.1]:45388 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Sr4og-0001mA-Jn for submit@debbugs.gnu.org; Tue, 17 Jul 2012 06:15:42 -0400 Original-Received: from mailout-de.gmx.net ([213.165.64.22]:52975) by debbugs.gnu.org with smtp (Exim 4.72) (envelope-from ) id 1Sr4oe-0001m2-Fp for 11939@debbugs.gnu.org; Tue, 17 Jul 2012 06:15:41 -0400 Original-Received: (qmail invoked by alias); 17 Jul 2012 09:49:09 -0000 Original-Received: from 62-47-34-58.adsl.highway.telekom.at (EHLO [62.47.34.58]) [62.47.34.58] by mail.gmx.net (mp020) with SMTP; 17 Jul 2012 11:49:09 +0200 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX1/v3CQ6uBvveDp6Bxj6xLl4oKRTgOlSLIuepRVJZ1 YqgWBRay2/M3so In-Reply-To: <023F63BCBF9442EBAEDCCE9D8A59E5E4@us.oracle.com> X-Y-GMX-Trusted: 0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:62040 Archived-At: This is a multi-part message in MIME format. --------------090707010601010507010909 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit > (But the *Process List* frame that was popped up was completely > hidden behind the frame that was selected when I hit C-x C-c. That's not good.) Because that code was for experimental purposes only. It's not the task of `with-temp-buffer-window' or its callers to handle that. The problem is elsewhere. I attach the first version of `with-temp-buffer-window', however, with a redefined `y-or-n-p'. Try it with your code but with `yes-or-no-p' aliased to `y-or-n-p'. Here, with emacs -Q (progn (defalias 'yes-or-no-p 'y-or-n-p) (load "~/with-temp-buffer-window.el") (shell) (setq minibuffer-auto-raise t) (setq pop-up-frame-function (lambda () (make-frame '((minibuffer . nil))))) (setq pop-up-frames t)) C-x C-c creates a minibuffer-less frame for *Process List* and redirects the prompt to the initial *shell* frame. Not 100% perfect because the *shell* frame partly obscures the *Process List* frame but this could be tweaked with a better `pop-up-frame-function'. With the more conventional (progn (defalias 'yes-or-no-p 'y-or-n-p) (load "~/with-temp-buffer-window.el") (shell) (setq pop-up-frames t)) the prompt appears in the *Process List* window. So I suppose that we should (at least optionally) have all functions accessing the minibuffer redirect frame focus to it first. martin --------------090707010601010507010909 Content-Type: application/emacs-lisp; name="with-temp-buffer-window.el" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="with-temp-buffer-window.el" KGRlZnVuIHktb3Itbi1wIChwcm9tcHQpDQogICJBc2sgdXNlciBhIFwieSBvciBuXCIgcXVl c3Rpb24uICBSZXR1cm4gdCBpZiBhbnN3ZXIgaXMgXCJ5XCIuDQpQUk9NUFQgaXMgdGhlIHN0 cmluZyB0byBkaXNwbGF5IHRvIGFzayB0aGUgcXVlc3Rpb24uICBJdCBzaG91bGQNCmVuZCBp biBhIHNwYWNlOyBgeS1vci1uLXAnIGFkZHMgXCIoeSBvciBuKSBcIiB0byBpdC4NCg0KTm8g Y29uZmlybWF0aW9uIG9mIHRoZSBhbnN3ZXIgaXMgcmVxdWVzdGVkOyBhIHNpbmdsZSBjaGFy YWN0ZXIgaXMgZW5vdWdoLg0KQWxzbyBhY2NlcHRzIFNwYWNlIHRvIG1lYW4geWVzLCBvciBE ZWxldGUgdG8gbWVhbiBuby4gIFwoQWN0dWFsbHksIGl0IHVzZXMNCnRoZSBiaW5kaW5ncyBp biBgcXVlcnktcmVwbGFjZS1tYXAnOyBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCB2 YXJpYWJsZQ0KZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJbiB0aGlzIGNhc2UsIHRoZSB1c2Vm dWwgYmluZGluZ3MgYXJlIGBhY3QnLCBgc2tpcCcsDQpgcmVjZW50ZXInLCBhbmQgYHF1aXQn LlwpDQoNClVuZGVyIGEgd2luZG93aW5nIHN5c3RlbSBhIGRpYWxvZyBib3ggd2lsbCBiZSB1 c2VkIGlmIGBsYXN0LW5vbm1lbnUtZXZlbnQnDQppcyBuaWwgYW5kIGB1c2UtZGlhbG9nLWJv eCcgaXMgbm9uLW5pbC4iDQogIDs7IMKhQmV3YXJlISB3aGVuIEkgdHJpZWQgdG8gZWRlYnVn IHRoaXMgY29kZSwgRW1hY3MgZ290IGludG8gYSB3ZWlyZCBzdGF0ZQ0KICA7OyB3aGVyZSBh bGwgdGhlIGtleXMgd2VyZSB1bmJvdW5kIChpLmUuIGl0IHNvbWVob3cgZ290IHRyaWdnZXJl ZA0KICA7OyB3aXRoaW4gcmVhZC1rZXksIGFwcGFyZW50bHkpLiAgSSBoYWQgdG8ga2lsbCBp dC4NCiAgKGxldCAoKGFuc3dlciAncmVjZW50ZXIpKQ0KICAgIChjb25kDQogICAgIChub25p bnRlcmFjdGl2ZQ0KICAgICAgKHNldHEgcHJvbXB0IChjb25jYXQgcHJvbXB0DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAoaWYgKGVxID9ccyAoYXJlZiBwcm9tcHQgKDEtIChsZW5n dGggcHJvbXB0KSkpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiICIgIikN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICIoeSBvciBuKSAiKSkNCiAgICAgIChsZXQg KCh0ZW1wLXByb21wdCBwcm9tcHQpKQ0KCSh3aGlsZSAobm90IChtZW1xIGFuc3dlciAnKGFj dCBza2lwKSkpDQoJICAobGV0ICgoc3RyIChyZWFkLXN0cmluZyB0ZW1wLXByb21wdCkpKQ0K CSAgICAoY29uZCAoKG1lbWJlciBzdHIgJygieSIgIlkiKSkgKHNldHEgYW5zd2VyICdhY3Qp KQ0KCQkgICgobWVtYmVyIHN0ciAnKCJuIiAiTiIpKSAoc2V0cSBhbnN3ZXIgJ3NraXApKQ0K CQkgICh0IChzZXRxIHRlbXAtcHJvbXB0IChjb25jYXQgIlBsZWFzZSBhbnN3ZXIgeSBvciBu LiAgIg0KCQkJCQkgICAgICAgcHJvbXB0KSkpKSkpKSkNCiAgICAgKChhbmQgKGRpc3BsYXkt cG9wdXAtbWVudXMtcCkNCgkgICAobGlzdHAgbGFzdC1ub25tZW51LWV2ZW50KQ0KCSAgIHVz ZS1kaWFsb2ctYm94KQ0KICAgICAgKHNldHEgYW5zd2VyDQoJICAgICh4LXBvcHVwLWRpYWxv ZyB0IGAoLHByb21wdCAoIlllcyIgLiBhY3QpICgiTm8iIC4gc2tpcCkpKSkpDQogICAgICh0 DQogICAgICAoc2V0cSBwcm9tcHQgKGNvbmNhdCBwcm9tcHQNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoZXEgP1xzIChhcmVmIHByb21wdCAoMS0gKGxlbmd0aCBwcm9tcHQp KSkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgIiAiKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIih5IG9yIG4pICIpKQ0KICAgICAgKHdoaWxlDQogICAgICAg ICAgKGxldCogKChrZXkNCiAgICAgICAgICAgICAgICAgIChsZXQgKChjdXJzb3ItaW4tZWNo by1hcmVhIHQpKQ0KICAgICAgICAgICAgICAgICAgICAod2hlbiBtaW5pYnVmZmVyLWF1dG8t cmFpc2UNCiAgICAgICAgICAgICAgICAgICAgICAocmVkaXJlY3QtZnJhbWUtZm9jdXMgKHdp bmRvdy1mcmFtZSAobWluaWJ1ZmZlci13aW5kb3cpKSkpDQogICAgICAgICAgICAgICAgICAg IChyZWFkLWtleSAocHJvcGVydGl6ZSAoaWYgKGVxIGFuc3dlciAncmVjZW50ZXIpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgIlBsZWFz ZSBhbnN3ZXIgeSBvciBuLiAgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByb21wdCkpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZmFjZSAnbWluaWJ1ZmZlci1wcm9tcHQpKSkpKQ0KICAgICAg ICAgICAgKHNldHEgYW5zd2VyIChsb29rdXAta2V5IHF1ZXJ5LXJlcGxhY2UtbWFwICh2ZWN0 b3Iga2V5KSB0KSkNCiAgICAgICAgICAgIChjb25kDQogICAgICAgICAgICAgKChtZW1xIGFu c3dlciAnKHNraXAgYWN0KSkgbmlsKQ0KICAgICAgICAgICAgICgoZXEgYW5zd2VyICdyZWNl bnRlcikgKHJlY2VudGVyKSB0KQ0KICAgICAgICAgICAgICgobWVtcSBhbnN3ZXIgJyhleGl0 LXByZWZpeCBxdWl0KSkgKHNpZ25hbCAncXVpdCBuaWwpIHQpDQogICAgICAgICAgICAgKHQg dCkpKQ0KICAgICAgICAoZGluZykNCiAgICAgICAgKGRpc2NhcmQtaW5wdXQpKSkpDQogICAg KGxldCAoKHJldCAoZXEgYW5zd2VyICdhY3QpKSkNCiAgICAgICh1bmxlc3Mgbm9uaW50ZXJh Y3RpdmUNCiAgICAgICAgOzsgRklYTUUgdGhpcyBwcmludHMgb25lIHRvbyBtYW55IHNwYWNl cywgc2luY2UgcHJvbXB0DQogICAgICAgIDs7IGFscmVhZHkgZW5kcyBpbiBhIHNwYWNlLiAg RWcgIi4uLiAoeSBvciBuKSAgeSIuDQogICAgICAgIChtZXNzYWdlICIlcyAlcyIgcHJvbXB0 IChpZiByZXQgInkiICJuIikpKQ0KICAgICAgcmV0KSkpDQoNCjs7OyBBdXRvbWF0aWMgcmVz aXppbmcgb2YgdGVtcG9yYXJ5IGJ1ZmZlcnMuDQooZGVmY3VzdG9tIHRlbXAtYnVmZmVyLW1h eC1oZWlnaHQNCiAgKGxhbWJkYSAoYnVmZmVyKQ0KICAgIChpZiAoZXEgKHNlbGVjdGVkLXdp bmRvdykgKGZyYW1lLXJvb3Qtd2luZG93KSkNCgkoLyAoeC1kaXNwbGF5LXBpeGVsLWhlaWdo dCkgKGZyYW1lLWNoYXItaGVpZ2h0KSAyKQ0KICAgICAgKC8gKC0gKGZyYW1lLWhlaWdodCkg MikgMikpKQ0KICAiTWF4aW11bSBoZWlnaHQgb2YgYSB3aW5kb3cgZGlzcGxheWluZyBhIHRl bXBvcmFyeSBidWZmZXIuDQpUaGlzIGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gVGVtcCBCdWZm ZXIgUmVzaXplIG1vZGUgaXMgZW5hYmxlZC4NClRoZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBo ZWlnaHQgKGluIGxpbmVzKSB3aGljaA0KYHJlc2l6ZS10ZW1wLWJ1ZmZlci13aW5kb3cnIHdp bGwgZ2l2ZSB0byBhIHdpbmRvdyBkaXNwbGF5aW5nIGENCnRlbXBvcmFyeSBidWZmZXIuICBJ dCBjYW4gYWxzbyBiZSBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0bw0KY2hvb3NlIHRoZSBo ZWlnaHQgZm9yIHN1Y2ggYSBidWZmZXIuICBJdCBnZXRzIG9uZSBhcmd1bWVudCwgdGhlDQpi dWZmZXIsIGFuZCBzaG91bGQgcmV0dXJuIGEgcG9zaXRpdmUgaW50ZWdlci4gIEF0IHRoZSB0 aW1lIHRoZQ0KZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgd2luZG93IHRvIGJlIHJlc2l6ZWQg aXMgc2VsZWN0ZWQuIg0KICA6dHlwZSAnKGNob2ljZSBpbnRlZ2VyIGZ1bmN0aW9uKQ0KICA6 Z3JvdXAgJ2hlbHANCiAgOnZlcnNpb24gIjI0LjIiKQ0KDQooZGVmY3VzdG9tIHRlbXAtYnVm ZmVyLXJlc2l6ZS1mcmFtZXMgbmlsDQogICJOb24tbmlsIG1lYW5zIGB0ZW1wLWJ1ZmZlci1y ZXNpemUtbW9kZScgY2FuIHJlc2l6ZSBmcmFtZXMuDQpBIGZyYW1lIGNhbiBiZSByZXNpemVk IGlmIGFuZCBvbmx5IGlmIGl0cyByb290IHdpbmRvdyBpcyBhIGxpdmUNCndpbmRvdy4gIFRo ZSBoZWlnaHQgb2YgdGhlIHJvb3Qgd2luZG93IGlzIHN1YmplY3QgdG8gdGhlIHZhbHVlcyBv Zg0KYHRlbXAtYnVmZmVyLW1heC1oZWlnaHQnIGFuZCBgd2luZG93LW1pbi1oZWlnaHQnLiIN CiAgOnR5cGUgJ2Jvb2xlYW4NCiAgOnZlcnNpb24gIjI0LjIiDQogIDpncm91cCAnaGVscCkN Cg0KKGRlZmluZS1taW5vci1tb2RlIHRlbXAtYnVmZmVyLXJlc2l6ZS1tb2RlDQogICJUb2dn bGUgYXV0by1zaHJpbmtpbmcgdGVtcCBidWZmZXIgd2luZG93cyAoVGVtcCBCdWZmZXIgUmVz aXplIG1vZGUpLg0KV2l0aCBhIHByZWZpeCBhcmd1bWVudCBBUkcsIGVuYWJsZSBUZW1wIEJ1 ZmZlciBSZXNpemUgbW9kZSBpZiBBUkcNCmlzIHBvc2l0aXZlLCBhbmQgZGlzYWJsZSBpdCBv dGhlcndpc2UuICBJZiBjYWxsZWQgZnJvbSBMaXNwLA0KZW5hYmxlIHRoZSBtb2RlIGlmIEFS RyBpcyBvbWl0dGVkIG9yIG5pbC4NCg0KV2hlbiBUZW1wIEJ1ZmZlciBSZXNpemUgbW9kZSBp cyBlbmFibGVkLCB0aGUgd2luZG93cyBpbiB3aGljaCB3ZQ0Kc2hvdyBhIHRlbXBvcmFyeSBi dWZmZXIgYXJlIGF1dG9tYXRpY2FsbHkgcmVkdWNlZCBpbiBoZWlnaHQgdG8NCmZpdCB0aGUg YnVmZmVyJ3MgY29udGVudHMsIGJ1dCBuZXZlciBtb3JlIHRoYW4NCmB0ZW1wLWJ1ZmZlci1t YXgtaGVpZ2h0JyBub3IgbGVzcyB0aGFuIGB3aW5kb3ctbWluLWhlaWdodCcuDQoNClRoaXMg bW9kZSBpcyB1c2VkIGJ5IGBoZWxwJywgYGFwcm9wb3MnIGFuZCBgY29tcGxldGlvbicgYnVm ZmVycywNCmFuZCBzb21lIG90aGVycy4iDQogIDpnbG9iYWwgdCA6Z3JvdXAgJ2hlbHANCiAg KGlmIHRlbXAtYnVmZmVyLXJlc2l6ZS1tb2RlDQogICAgICA7OyBgaGVscC1tYWtlLXhyZWZz JyBtYXkgYWRkIGEgYGJhY2snIGJ1dHRvbiBhbmQgdGh1cyBpbmNyZWFzZSB0aGUNCiAgICAg IDs7IHRleHQgc2l6ZSwgc28gYHJlc2l6ZS10ZW1wLWJ1ZmZlci13aW5kb3cnIG11c3QgYmUg cnVuICphZnRlciogaXQuDQogICAgICAoYWRkLWhvb2sgJ3RlbXAtYnVmZmVyLXNob3ctaG9v ayAncmVzaXplLXRlbXAtYnVmZmVyLXdpbmRvdyAnYXBwZW5kKQ0KICAgIChyZW1vdmUtaG9v ayAndGVtcC1idWZmZXItc2hvdy1ob29rICdyZXNpemUtdGVtcC1idWZmZXItd2luZG93KSkp DQoNCihkZWZ1biByZXNpemUtdGVtcC1idWZmZXItd2luZG93ICgmb3B0aW9uYWwgd2luZG93 KQ0KICAiUmVzaXplIFdJTkRPVyB0byBmaXQgaXRzIGNvbnRlbnRzLg0KV0lORE9XIGNhbiBi ZSBhbnkgbGl2ZSB3aW5kb3cgYW5kIGRlZmF1bHRzIHRvIHRoZSBzZWxlY3RlZCBvbmUuDQoN CkRvIG5vdCBtYWtlIFdJTkRPVyBoaWdoZXIgdGhhbiBgdGVtcC1idWZmZXItbWF4LWhlaWdo dCcgbm9yDQpzbWFsbGVyIHRoYW4gYHdpbmRvdy1taW4taGVpZ2h0Jy4gIERvIG5vdGhpbmcg aWYgdGhlIHNlbGVjdGVkDQp3aW5kb3cgaXMgbm90IHZlcnRpY2FsbHkgY29tYmluZWQgb3Ig c29tZSBvZiBpdHMgY29udGVudHMgYXJlDQpzY3JvbGxlZCBvdXQgb2Ygdmlldy4iDQogIChz ZXRxIHdpbmRvdyAod2luZG93LW5vcm1hbGl6ZS13aW5kb3cgd2luZG93IHQpKQ0KICAobGV0 ICgoaGVpZ2h0IChpZiAoZnVuY3Rpb25wIHRlbXAtYnVmZmVyLW1heC1oZWlnaHQpDQoJCSAg ICAoZnVuY2FsbCB0ZW1wLWJ1ZmZlci1tYXgtaGVpZ2h0ICh3aW5kb3ctYnVmZmVyIHdpbmRv dykpDQoJCSAgdGVtcC1idWZmZXItbWF4LWhlaWdodCkpKQ0KICAgIChjb25kDQogICAgICgo YW5kIChwb3MtdmlzaWJsZS1pbi13aW5kb3ctcCAocG9pbnQtbWluKSB3aW5kb3cpDQoJICAg KHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdykpDQogICAgICAoZml0LXdpbmRvdy10by1idWZm ZXIgd2luZG93IGhlaWdodCkpDQogICAgICgoYW5kIHRlbXAtYnVmZmVyLXJlc2l6ZS1mcmFt ZXMNCgkgICAoZXEgd2luZG93IChmcmFtZS1yb290LXdpbmRvdyB3aW5kb3cpKQ0KCSAgICht ZW1xIChjYXIgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUpKQ0KCQkg OzsgSWYgJ3NhbWUgaXMgdG9vIHN0cm9uZywgd2UgbWlnaHQgYWRkaXRpb25hbGx5IGNoZWNr DQoJCSA7OyB3aGV0aGVyIHRoZSBzZWNvbmQgZWxlbWVudCBpcyAnZnJhbWUuDQoJCSAnKHNh bWUgZnJhbWUpKSkNCiAgICAgIChsZXQgKChmcmFtZSAod2luZG93LWZyYW1lIHdpbmRvdykp KQ0KCShmaXQtZnJhbWUtdG8tYnVmZmVyDQoJIGZyYW1lICgrIChmcmFtZS1oZWlnaHQgZnJh bWUpDQoJCSAgKC0gKHdpbmRvdy10b3RhbC1zaXplIHdpbmRvdykpDQoJCSAgaGVpZ2h0KSkp KSkpKQ0KDQooZGVmdmFyIHRlbXAtYnVmZmVyLXdpbmRvdy1zZXR1cC1ob29rIG5pbA0KICAi Tm9ybWFsIGhvb2sgcnVuIGJ5IGB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycgYmVmb3JlIGJ1 ZmZlciBkaXNwbGF5Lg0KVGhpcyBob29rIGlzIHJ1biBieSBgd2l0aC10ZW1wLWJ1ZmZlci13 aW5kb3cnIHdpdGggdGhlIGJ1ZmZlciB0byBiZQ0KZGlzcGxheWVkIGN1cnJlbnQuIikNCg0K KGRlZnZhciB0ZW1wLWJ1ZmZlci13aW5kb3ctc2hvdy1ob29rIG5pbA0KICAiTm9ybWFsIGhv b2sgcnVuIGJ5IGB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycgYWZ0ZXIgYnVmZmVyIGRpc3Bs YXkuDQpUaGlzIGhvb2sgaXMgcnVuIGJ5IGB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycgd2l0 aCB0aGUgYnVmZmVyDQpkaXNwbGF5ZWQgYW5kIGN1cnJlbnQgYW5kIGl0cyB3aW5kb3cgc2Vs ZWN0ZWQuIikNCg0KKGRlZnVuIHRlbXAtYnVmZmVyLXdpbmRvdy1zZXR1cCAoYnVmZmVyLW9y LW5hbWUpDQogICJTZXQgdXAgdGVtcG9yYXJ5IGJ1ZmZlciBzcGVjaWZpZWQgYnkgQlVGRkVS LU9SLU5BTUUgDQpSZXR1cm4gdGhlIGJ1ZmZlci4iDQogIChsZXQgKChvbGQtZGlyIGRlZmF1 bHQtZGlyZWN0b3J5KQ0KCShidWZmZXIgKGdldC1idWZmZXItY3JlYXRlIGJ1ZmZlci1vci1u YW1lKSkpDQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyDQogICAgICAoa2lsbC1h bGwtbG9jYWwtdmFyaWFibGVzKQ0KICAgICAgKHNldHEgZGVmYXVsdC1kaXJlY3Rvcnkgb2xk LWRpcikNCjs7ICAgICAgIChkZWxldGUtYWxsLW92ZXJsYXlzKQ0KICAgICAgKHNldHEgYnVm ZmVyLXJlYWQtb25seSBuaWwpDQogICAgICAoc2V0cSBidWZmZXItZmlsZS1uYW1lIG5pbCkN CiAgICAgIChzZXRxIGJ1ZmZlci11bmRvLWxpc3QgdCkNCiAgICAgIChsZXQgKChpbmhpYml0 LXJlYWQtb25seSB0KQ0KCSAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpDQoJ KGVyYXNlLWJ1ZmZlcikNCgkocnVuLWhvb2tzICd0ZW1wLWJ1ZmZlci13aW5kb3ctc2V0dXAt aG9vaykpDQogICAgICA7OyBSZXR1cm4gdGhlIGJ1ZmZlci4NCiAgICAgIGJ1ZmZlcikpKQ0K DQooZGVmdW4gdGVtcC1idWZmZXItd2luZG93LXNob3cgKCZvcHRpb25hbCBidWZmZXIpDQog ICJTaG93IHRlbXBvcmFyeSBidWZmZXIgQlVGRkVSIGluIGEgd2luZG93Lg0KUmV0dXJuIHRo ZSB3aW5kb3cgc2hvd2luZyBCVUZGRVIuIg0KICAobGV0ICh3aW5kb3cgZnJhbWUpDQogICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyDQogICAgICAoc2V0LWJ1ZmZlci1tb2RpZmll ZC1wIG5pbCkNCiAgICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkNCiAgICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpDQogICAgICAod2hlbiAoc2V0cSB3aW5kb3cgKGRpc3BsYXkt YnVmZmVyIGJ1ZmZlcikpDQoJKHNldHEgZnJhbWUgKHdpbmRvdy1mcmFtZSB3aW5kb3cpKQ0K CSh1bmxlc3MgKGVxIGZyYW1lIChzZWxlY3RlZC1mcmFtZSkpDQoJICAocmFpc2UtZnJhbWUg ZnJhbWUpKQ0KCShzZXRxIG1pbmlidWZmZXItc2Nyb2xsLXdpbmRvdyB3aW5kb3cpDQoJKHNl dC13aW5kb3ctaHNjcm9sbCB3aW5kb3cgMCkNCgkod2l0aC1zZWxlY3RlZC13aW5kb3cgd2lu ZG93DQoJICAocnVuLWhvb2tzICd0ZW1wLWJ1ZmZlci13aW5kb3ctc2hvdy1ob29rKQ0KCSAg KHdoZW4gdGVtcC1idWZmZXItcmVzaXplLW1vZGUNCgkgICAgKHJlc2l6ZS10ZW1wLWJ1ZmZl ci13aW5kb3cgd2luZG93KSkpDQoJOzsgUmV0dXJuIHRoZSB3aW5kb3cuDQoJd2luZG93KSkp KQ0KDQooZGVmbWFjcm8gd2l0aC10ZW1wLWJ1ZmZlci13aW5kb3cgKGJ1ZmZlci1vci1uYW1l IHF1aXQtZnVuY3Rpb24gJnJlc3QgYm9keSkNCiAgIkV2YWx1YXRlIEJPRFkgYW5kIGRpc3Bs YXkgYnVmZmVyIHNwZWNpZmllZCBieSBCVUZGRVItT1ItTkFNRS4NCkJVRkZFUi1PUi1OQU1F IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBsaXZlIGJ1ZmZlciBvciB0aGUgbmFtZSBvZiBhDQpi dWZmZXIuICBJZiBubyBidWZmZXIgd2l0aCBzdWNoIGEgbmFtZSBleGlzdHMsIGNyZWF0ZSBv bmUuDQoNCk1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBpcyBlbXB0eSBiZWZvcmUg ZXZhbHVhdGluZyBCT0RZLg0KRG8gbm90IG1ha2UgdGhhdCBidWZmZXIgY3VycmVudCBmb3Ig Qk9EWS4gIEluc3RlYWQsIGJpbmQNCmBzdGFuZGFyZC1vdXRwdXQnIHRvIHRoYXQgYnVmZmVy LCBzbyB0aGF0IG91dHB1dCBnZW5lcmF0ZWQgd2l0aA0KYHByaW4xJyBhbmQgc2ltaWxhciBm dW5jdGlvbnMgaW4gQk9EWSBnb2VzIGludG8gdGhhdCBidWZmZXIuDQoNCkFmdGVyIGV2YWx1 YXRpbmcgQk9EWSwgbWFyayB0aGUgc3BlY2lmaWVkIGJ1ZmZlciB1bm1vZGlmaWVkIGFuZA0K cmVhZC1vbmx5IGFuZCBkaXNwbGF5IGl0IGluIGEgd2luZG93LiAgQXV0by1zaHJpbmsgdGhl IHdpbmRvdyBpZg0KYHRlbXAtYnVmZmVyLXJlc2l6ZS1tb2RlJyBpcyBlbmFibGVkLg0KDQpS ZXR1cm4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IEJPRFkgdW5sZXNzIFFVSVQtRlVOQ1RJT04g c3BlY2lmaWVzDQphIGZ1bmN0aW9uLiAgSW4gdGhhdCBjYXNlLCBydW4gdGhlIGZ1bmN0aW9u IHdpdGggdHdvIGFyZ3VtZW50cyAtDQp0aGUgd2luZG93IHNob3dpbmcgdGhlIHNwZWNpZmll ZCBidWZmZXIgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBieQ0KQk9EWSAtIGFuZCByZXR1cm4g dGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoYXQgZnVuY3Rpb24uDQoNClRoaXMgY29uc3RydWN0 IGlzIHNpbWlsYXIgdG8gYHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyJyBidXQNCmRvZXMg bmVpdGhlciBwdXQgdGhlIGJ1ZmZlciBpbiBoZWxwIG1vZGUgbm9yIGRvZXMgaXQgY2FsbA0K YHRlbXAtYnVmZmVyLXNob3ctZnVuY3Rpb24nLiAgSXQgYWxzbyBydW5zIGRpZmZlcmVudCBo b29rcywNCm5hbWVseSBgdGVtcC1idWZmZXItd2luZG93LXNldHVwLWhvb2snICh3aXRoIHRo ZSBzcGVjaWZpZWQgYnVmZmVyDQpjdXJyZW50KSBhbmQgYHRlbXAtYnVmZmVyLXdpbmRvdy1z aG93LWhvb2snICh3aXRoIHRoZSBzcGVjaWZpZWQNCmJ1ZmZlciBjdXJyZW50IGFuZCB0aGUg d2luZG93IHNob3dpbmcgaXQgc2VsZWN0ZWQpLg0KDQpTaW5jZSB0aGlzIG1hY3JvIGNhbGxz IGBkaXNwbGF5LWJ1ZmZlcicsIHRoZSB3aW5kb3cgZGlzcGxheWluZw0KdGhlIGJ1ZmZlciBp cyB1c3VhbGx5IG5vdCBzZWxlY3RlZCBhbmQgdGhlIHNwZWNpZmllZCBidWZmZXINCnVzdWFs bHkgbm90IG1hZGUgY3VycmVudC4gIFFVSVQtRlVOQ1RJT04gY2FuIG92ZXJyaWRlIHRoYXQu Ig0KICAoZGVjbGFyZSAoZGVidWcgdCkpDQogIChsZXQgKChidWZmZXIgKG1ha2Utc3ltYm9s ICJidWZmZXIiKSkNCgkod2luZG93IChtYWtlLXN5bWJvbCAid2luZG93IikpDQoJKHZhbHVl IChtYWtlLXN5bWJvbCAidmFsdWUiKSkpDQogICAgYChsZXQqICgoLGJ1ZmZlciAodGVtcC1i dWZmZXItd2luZG93LXNldHVwICxidWZmZXItb3ItbmFtZSkpDQoJICAgIChzdGFuZGFyZC1v dXRwdXQgLGJ1ZmZlcikNCgkgICAgLHdpbmRvdyAsdmFsdWUpDQogICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgLGJ1ZmZlcg0KCSAoc2V0cSAsdmFsdWUgKHByb2duICxAYm9keSkpDQoJ IChzZXRxICx3aW5kb3cgKHRlbXAtYnVmZmVyLXdpbmRvdy1zaG93ICxidWZmZXIpKSkNCg0K ICAgICAgIChpZiAoZnVuY3Rpb25wICxxdWl0LWZ1bmN0aW9uKQ0KCSAgIChmdW5jYWxsICxx dWl0LWZ1bmN0aW9uICx3aW5kb3cgLHZhbHVlKQ0KCSAsdmFsdWUpKSkpDQoNCihkZWZ1biB3 aW5kb3ctLWRpc3BsYXktYnVmZmVyIChidWZmZXIgd2luZG93IHR5cGUgJm9wdGlvbmFsIGRl ZGljYXRlZCkNCiAgIkRpc3BsYXkgQlVGRkVSIGluIFdJTkRPVyBhbmQgbWFrZSBpdHMgZnJh bWUgdmlzaWJsZS4NClRZUEUgbXVzdCBiZSBvbmUgb2YgdGhlIHN5bWJvbHMgYHJldXNlJywg YHdpbmRvdycgb3IgYGZyYW1lJyBhbmQNCmlzIHBhc3NlZCB1bmFsdGVyZWQgdG8gYGRpc3Bs YXktYnVmZmVyLXJlY29yZC13aW5kb3cnLiBTZXQNCmB3aW5kb3ctZGVkaWNhdGVkLXAnIHRv IERFRElDQVRFRCBpZiBub24tbmlsLiAgUmV0dXJuIFdJTkRPVyBpZg0KQlVGRkVSIGFuZCBX SU5ET1cgYXJlIGxpdmUuIg0KICAod2hlbiAoYW5kIChidWZmZXItbGl2ZS1wIGJ1ZmZlcikg KHdpbmRvdy1saXZlLXAgd2luZG93KSkNCiAgICAobGV0KiAoKGZyYW1lICh3aW5kb3ctZnJh bWUgd2luZG93KSkNCgkgICAodmlzaWJsZSAoZnJhbWUtdmlzaWJsZS1wIGZyYW1lKSkpDQog ICAgICAoZGlzcGxheS1idWZmZXItcmVjb3JkLXdpbmRvdyB0eXBlIHdpbmRvdyBidWZmZXIp DQogICAgICAodW5sZXNzIChlcSBidWZmZXIgKHdpbmRvdy1idWZmZXIgd2luZG93KSkNCgko c2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgbmlsKQ0KCShzZXQtd2luZG93LWJ1ZmZl ciB3aW5kb3cgYnVmZmVyKQ0KCSh3aGVuIGRlZGljYXRlZA0KCSAgKHNldC13aW5kb3ctZGVk aWNhdGVkLXAgd2luZG93IGRlZGljYXRlZCkpKQ0KICAgICAgKHdoZW4gKG1lbXEgdHlwZSAn KHdpbmRvdyBmcmFtZSkpDQoJKHNldC13aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdyBuaWwp KQ0KDQogICAgICAodW5sZXNzIChvciAobm90IHZpc2libGUpDQoJCSAgOzsgQXNzdW1lIHRo ZSBzZWxlY3RlZCBmcmFtZSBpcyBhbHJlYWR5IHZpc2libGUgZW5vdWdoLg0KCQkgIChlcSBm cmFtZSAoc2VsZWN0ZWQtZnJhbWUpKQ0KCQkgIDs7IEFzc3VtZSB0aGUgZnJhbWUgZnJvbSB3 aGljaCB3ZSBpbnZva2VkIHRoZSBtaW5pYnVmZmVyDQoJCSAgOzsgaXMgdmlzaWJsZS4NCgkJ ICAoYW5kIChtaW5pYnVmZmVyLXdpbmRvdy1hY3RpdmUtcCAoc2VsZWN0ZWQtd2luZG93KSkN CgkJICAgICAgIChlcSBmcmFtZSAod2luZG93LWZyYW1lIChtaW5pYnVmZmVyLXNlbGVjdGVk LXdpbmRvdykpKSkpDQoJKHJhaXNlLWZyYW1lIGZyYW1lKSkNCg0KICAgICAgd2luZG93KSkp DQoNCihkZWZ1biBxdWl0LXJlc3RvcmUtd2luZG93ICgmb3B0aW9uYWwgd2luZG93IGJ1cnkt b3Ita2lsbCkNCiAgIlF1aXQgV0lORE9XIGFuZCBkZWFsIHdpdGggaXRzIGJ1ZmZlci4NCldJ TkRPVyBtdXN0IGJlIGEgbGl2ZSB3aW5kb3cgYW5kIGRlZmF1bHRzIHRvIHRoZSBzZWxlY3Rl ZCBvbmUuDQoNCkFjY29yZGluZyB0byBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gV0lORE9XJ3Mg YHF1aXQtcmVzdG9yZScgd2luZG93DQpwYXJhbWV0ZXIgZWl0aGVyICgxKSBkZWxldGUgV0lO RE9XIGFuZCBpdHMgZnJhbWUsICgyKSBkZWxldGUNCldJTkRPVywgKDMpIHJlc3RvcmUgdGhl IGJ1ZmZlciBwcmV2aW91c2x5IGRpc3BsYXllZCBpbiBXSU5ET1csDQpvciAoNCkgbWFrZSBX SU5ET1cgZGlzcGxheSBzb21lIG90aGVyIGJ1ZmZlciB0aGFuIHRoZSBwcmVzZW50DQpvbmUu ICBJZiBub24tbmlsLCByZXNldCBgcXVpdC1yZXN0b3JlJyBwYXJhbWV0ZXIgdG8gbmlsLg0K DQpPcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgQlVSWS1PUi1LSUxMIHRlbGxzIGhvdyB0byBw cm9jZWVkIHdpdGgNCnRoZSBidWZmZXIgb2YgV0lORE9XLiAgVGhlIGZvbGxvd2luZyB2YWx1 ZXMgYXJlIGhhbmRsZWQ6DQoNCmBuaWwnIG1lYW5zIHRvIG5vdCBoYW5kbGUgdGhlIGJ1ZmZl ciBpbiBhIHBhcnRpY3VsYXIgd2F5LiAgVGhpcw0KICBtZWFucyB0aGF0IGlmIFdJTkRPVyBp cyBub3QgZGVsZXRlZCBieSB0aGlzIGZ1bmN0aW9uLCBpbnZva2luZw0KICBgc3dpdGNoLXRv LXByZXYtYnVmZmVyJyB3aWxsIHVzdWFsbHkgc2hvdyB0aGUgYnVmZmVyIGFnYWluLg0KDQpg YXBwZW5kJyBtZWFucyB0aGF0IGlmIFdJTkRPVyBpcyBub3QgZGVsZXRlZCwgbW92ZSBpdHMg YnVmZmVyIHRvDQogIHRoZSBlbmQgb2YgV0lORE9XJ3MgcHJldmlvdXMgYnVmZmVycyBzbyBp dCdzIGxlc3MgbGlrZWx5IHRoYXQgYQ0KICBmdXR1cmUgaW52b2NhdGlvbiBvZiBgc3dpdGNo LXRvLXByZXYtYnVmZmVyJyB3aWxsIHN3aXRjaCB0byBpdC4NCiAgQWxzbywgbW92ZSB0aGUg YnVmZmVyIHRvIHRoZSBlbmQgb2YgdGhlIGZyYW1lJ3MgYnVmZmVyIGxpc3QuDQoNCmBidXJ5 JyBtZWFucyB0aGF0IGlmIFdJTkRPVyBpcyBub3QgZGVsZXRlZCwgcmVtb3ZlIGl0cyBidWZm ZXINCiAgZnJvbSBXSU5ET1cnUyBsaXN0IG9mIHByZXZpb3VzIGJ1ZmZlcnMuICBBbHNvLCBt b3ZlIHRoZSBidWZmZXINCiAgdG8gdGhlIGVuZCBvZiB0aGUgZnJhbWUncyBidWZmZXIgbGlz dC4gIFRoaXMgdmFsdWUgcHJvdmlkZXMgdGhlDQogIG1vc3QgcmVsaWFibGUgcmVtZWR5IHRv IG5vdCBoYXZlIGBzd2l0Y2gtdG8tcHJldi1idWZmZXInIHN3aXRjaA0KICB0byB0aGlzIGJ1 ZmZlciBhZ2FpbiB3aXRob3V0IGtpbGxpbmcgdGhlIGJ1ZmZlci4NCg0KYGtpbGwnIG1lYW5z IHRvIGtpbGwgV0lORE9XJ3MgYnVmZmVyLiINCiAgKHNldHEgd2luZG93ICh3aW5kb3ctbm9y bWFsaXplLXdpbmRvdyB3aW5kb3cgdCkpDQogIChsZXQqICgoYnVmZmVyICh3aW5kb3ctYnVm ZmVyIHdpbmRvdykpDQoJIChxdWl0LXJlc3RvcmUgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93 ICdxdWl0LXJlc3RvcmUpKQ0KCSAocHJldi1idWZmZXINCgkgIChsZXQqICgocHJldi1idWZm ZXJzICh3aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdykpDQoJCSAocHJldi1idWZmZXIgKGNh YXIgcHJldi1idWZmZXJzKSkpDQoJICAgIChhbmQgKG9yIChub3QgKGVxIHByZXYtYnVmZmVy IGJ1ZmZlcikpDQoJCSAgICAgKGFuZCAoY2RyIHByZXYtYnVmZmVycykNCgkJCSAgKG5vdCAo ZXEgKHNldHEgcHJldi1idWZmZXIgKGNhZHIgcHJldi1idWZmZXJzKSkNCgkJCQkgICBidWZm ZXIpKSkpDQoJCSBwcmV2LWJ1ZmZlcikpKQ0KCSBxdWFkIGVudHJ5KQ0KICAgIChjb25kDQog ICAgICgoYW5kIChub3QgcHJldi1idWZmZXIpDQoJICAgKG1lbXEgKG50aCAxIHF1aXQtcmVz dG9yZSkgJyh3aW5kb3cgZnJhbWUpKQ0KCSAgIChlcSAobnRoIDMgcXVpdC1yZXN0b3JlKSBi dWZmZXIpDQoJICAgOzsgRGVsZXRlIFdJTkRPVyBpZiBwb3NzaWJsZS4NCgkgICAod2luZG93 LS1kZWxldGUgd2luZG93IG5pbCAoZXEgYnVyeS1vci1raWxsICdraWxsKSkpDQogICAgICA7 OyBJZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCB3aW5kb3cgaXMgc3RpbGwgYWxpdmUsIHNl bGVjdCBpdC4NCiAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIChudGggMiBxdWl0LXJlc3Rv cmUpKQ0KCShzZWxlY3Qtd2luZG93IChudGggMiBxdWl0LXJlc3RvcmUpKSkpDQogICAgICgo YW5kIChsaXN0cCAoc2V0cSBxdWFkIChudGggMSBxdWl0LXJlc3RvcmUpKSkNCgkgICAoYnVm ZmVyLWxpdmUtcCAoY2FyIHF1YWQpKQ0KCSAgIChlcSAobnRoIDMgcXVpdC1yZXN0b3JlKSBi dWZmZXIpKQ0KICAgICAgOzsgU2hvdyBhbm90aGVyIGJ1ZmZlciBzdG9yZWQgaW4gcXVpdC1y ZXN0b3JlIHBhcmFtZXRlci4NCiAgICAgICh3aGVuIChhbmQgKGludGVnZXJwIChudGggMyBx dWFkKSkNCgkJICgvPSAobnRoIDMgcXVhZCkgKHdpbmRvdy10b3RhbC1zaXplIHdpbmRvdykp KQ0KCTs7IFRyeSB0byByZXNpemUgV0lORE9XIHRvIGl0cyBvbGQgaGVpZ2h0IGJ1dCBkb24n dCBzaWduYWwgYW4NCgk7OyBlcnJvci4NCgkoY29uZGl0aW9uLWNhc2UgbmlsDQoJICAgICh3 aW5kb3ctcmVzaXplIHdpbmRvdyAoLSAobnRoIDMgcXVhZCkgKHdpbmRvdy10b3RhbC1zaXpl IHdpbmRvdykpKQ0KCSAgKGVycm9yIG5pbCkpKQ0KICAgICAgKHNldC13aW5kb3ctZGVkaWNh dGVkLXAgd2luZG93IG5pbCkNCiAgICAgIDs7IFJlc3RvcmUgV0lORE9XJ3MgcHJldmlvdXMg YnVmZmVyLCBzdGFydCBhbmQgcG9pbnQgcG9zaXRpb24uDQogICAgICAoc2V0LXdpbmRvdy1i dWZmZXItc3RhcnQtYW5kLXBvaW50DQogICAgICAgd2luZG93IChudGggMCBxdWFkKSAobnRo IDEgcXVhZCkgKG50aCAyIHF1YWQpKQ0KICAgICAgOzsgRGVhbCB3aXRoIHRoZSBidWZmZXIg d2UganVzdCByZW1vdmVkIGZyb20gV0lORE9XLg0KICAgICAgKHNldHEgZW50cnkgKGFuZCAo ZXEgYnVyeS1vci1raWxsICdhcHBlbmQpDQoJCSAgICAgICAoYXNzcSBidWZmZXIgKHdpbmRv dy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkpKQ0KICAgICAgKHdoZW4gYnVyeS1vci1raWxsDQoJ OzsgUmVtb3ZlIGJ1ZmZlciBmcm9tIFdJTkRPVydzIHByZXZpb3VzIGFuZCBuZXh0IGJ1ZmZl cnMuDQoJKHNldC13aW5kb3ctcHJldi1idWZmZXJzDQoJIHdpbmRvdyAoYXNzcS1kZWxldGUt YWxsIGJ1ZmZlciAod2luZG93LXByZXYtYnVmZmVycyB3aW5kb3cpKSkNCgkoc2V0LXdpbmRv dy1uZXh0LWJ1ZmZlcnMNCgkgd2luZG93IChkZWxxIGJ1ZmZlciAod2luZG93LW5leHQtYnVm ZmVycyB3aW5kb3cpKSkpDQogICAgICAod2hlbiBlbnRyeQ0KCTs7IEFwcGVuZCBvbGQgYnVm ZmVyJ3MgZW50cnkgdG8gbGlzdCBvZiBXSU5ET1cncyBwcmV2aW91cw0KCTs7IGJ1ZmZlcnMg c28gaXQncyBsZXNzIGxpa2VseSB0byBnZXQgc3dpdGNoZWQgdG8gc29vbiBidXQNCgk7OyBg ZGlzcGxheS1idWZmZXItaW4tcHJldmlvdXMtd2luZG93JyBjYW4gbmV2ZXJ0aGVsZXNzIGZp bmQgaXQuDQoJKHNldC13aW5kb3ctcHJldi1idWZmZXJzDQoJIHdpbmRvdyAoYXBwZW5kICh3 aW5kb3ctcHJldi1idWZmZXJzIHdpbmRvdykgKGxpc3QgZW50cnkpKSkpDQogICAgICA7OyBS ZXNldCB0aGUgcXVpdC1yZXN0b3JlIHBhcmFtZXRlci4NCiAgICAgIChzZXQtd2luZG93LXBh cmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZSBuaWwpDQogICAgICA7OyBTZWxlY3Qgb2xk IHdpbmRvdy4NCiAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIChudGggMiBxdWl0LXJlc3Rv cmUpKQ0KCShzZWxlY3Qtd2luZG93IChudGggMiBxdWl0LXJlc3RvcmUpKSkpDQogICAgICh0 DQogICAgICA7OyBTaG93IHNvbWUgb3RoZXIgYnVmZmVyIGluIFdJTkRPVyBhbmQgcmVzZXQg dGhlIHF1aXQtcmVzdG9yZQ0KICAgICAgOzsgcGFyYW1ldGVyLg0KICAgICAgKHNldC13aW5k b3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1yZXN0b3JlIG5pbCkNCiAgICAgIDs7IE1ha2Ug c3VyZSB0aGF0IFdJTkRPVyBpcyBubyBtb3JlIGRlZGljYXRlZC4NCiAgICAgIChzZXQtd2lu ZG93LWRlZGljYXRlZC1wIHdpbmRvdyBuaWwpDQogICAgICAoc3dpdGNoLXRvLXByZXYtYnVm ZmVyIHdpbmRvdyBidXJ5LW9yLWtpbGwpKSkNCg0KICAgIDs7IERlYWwgd2l0aCB0aGUgYnVm ZmVyLg0KICAgIChjb25kDQogICAgICgobm90IChidWZmZXItbGl2ZS1wIGJ1ZmZlcikpKQ0K ICAgICAoKGVxIGJ1cnktb3Ita2lsbCAna2lsbCkNCiAgICAgIChraWxsLWJ1ZmZlciBidWZm ZXIpKQ0KICAgICAoYnVyeS1vci1raWxsDQogICAgICAoYnVyeS1idWZmZXItaW50ZXJuYWwg YnVmZmVyKSkpKSkNCg0KKGRlZnVuIHF1aXQtd2luZG93ICgmb3B0aW9uYWwga2lsbCB3aW5k b3cpDQogICJRdWl0IFdJTkRPVyBhbmQgYnVyeSBpdHMgYnVmZmVyLg0KV0lORE9XIG11c3Qg YmUgYSBsaXZlIHdpbmRvdyBhbmQgZGVmYXVsdHMgdG8gdGhlIHNlbGVjdGVkIG9uZS4NCldp dGggcHJlZml4IGFyZ3VtZW50IEtJTEwgbm9uLW5pbCwga2lsbCB0aGUgYnVmZmVyIGluc3Rl YWQgb2YNCmJ1cnlpbmcgaXQuDQoNCkFjY29yZGluZyB0byBpbmZvcm1hdGlvbiBzdG9yZWQg aW4gV0lORE9XJ3MgYHF1aXQtcmVzdG9yZScgd2luZG93DQpwYXJhbWV0ZXIgZWl0aGVyICgx KSBkZWxldGUgV0lORE9XIGFuZCBpdHMgZnJhbWUsICgyKSBkZWxldGUNCldJTkRPVywgKDMp IHJlc3RvcmUgdGhlIGJ1ZmZlciBwcmV2aW91c2x5IGRpc3BsYXllZCBpbiBXSU5ET1csDQpv ciAoNCkgbWFrZSBXSU5ET1cgZGlzcGxheSBzb21lIG90aGVyIGJ1ZmZlciB0aGFuIHRoZSBw cmVzZW50DQpvbmUuICBJZiBub24tbmlsLCByZXNldCBgcXVpdC1yZXN0b3JlJyBwYXJhbWV0 ZXIgdG8gbmlsLiINCiAgKGludGVyYWN0aXZlICJQIikNCiAgKHF1aXQtcmVzdG9yZS13aW5k b3cgd2luZG93IChpZiBraWxsICdraWxsICdidXJ5KSkpDQoNCihkZWZjdXN0b20gZml0LWZy YW1lLXRvLWJ1ZmZlci1ib3R0b20tbWFyZ2luIDQNCiAgIkJvdHRvbSBtYXJnaW4gZm9yIGBm aXQtZnJhbWUtdG8tYnVmZmVyJy4NClRoaXMgaXMgdGhlIG51bWJlciBvZiBsaW5lcyBgZml0 LWZyYW1lLXRvLWJ1ZmZlcicgbGVhdmVzIGZyZWUgYXQgdGhlDQpib3R0b20gb2YgdGhlIGRp c3BsYXkgaW4gb3JkZXIgdG8gbm90IG9ic2N1cmUgdGhlIHN5c3RlbSB0YXNrIGJhci4iDQog IDp0eXBlICdpbnRlZ2VyDQogIDp2ZXJzaW9uICIyNC4yIg0KICA6Z3JvdXAgJ3dpbmRvd3Mp DQoNCihkZWZ1biBmaXQtZnJhbWUtdG8tYnVmZmVyICgmb3B0aW9uYWwgZnJhbWUgbWF4LWhl aWdodCBtaW4taGVpZ2h0KQ0KICAiQWRqdXN0IGhlaWdodCBvZiBGUkFNRSB0byBkaXNwbGF5 IGl0cyBidWZmZXIncyBjb250ZW50cyBleGFjdGx5Lg0KRlJBTUUgY2FuIGJlIGFueSBsaXZl IGZyYW1lIGFuZCBkZWZhdWx0cyB0byB0aGUgc2VsZWN0ZWQgb25lLg0KDQpPcHRpb25hbCBh cmd1bWVudCBNQVgtSEVJR0hUIHNwZWNpZmllcyB0aGUgbWF4aW11bSBoZWlnaHQgb2YNCkZS QU1FIGFuZCBkZWZhdWx0cyB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkaXNwbGF5IGJlbG93IHRo ZSBjdXJyZW50DQp0b3AgbGluZSBvZiBGUkFNRSBtaW51cyBGSVQtRlJBTUUtVE8tQlVGRkVS LUJPVFRPTS1NQVJHSU4uDQpPcHRpb25hbCBhcmd1bWVudCBNSU4tSEVJR0hUIHNwZWNpZmll cyB0aGUgbWluaW11bSBoZWlnaHQgb2YNCkZSQU1FLiINCiAgKGludGVyYWN0aXZlKQ0KICAo c2V0cSBmcmFtZSAod2luZG93LW5vcm1hbGl6ZS1mcmFtZSBmcmFtZSkpDQogIChsZXQqICgo cm9vdCAoZnJhbWUtcm9vdC13aW5kb3cgZnJhbWUpKQ0KCSAoZnJhbWUtbWluLWhlaWdodA0K CSAgKCsgKC0gKGZyYW1lLWhlaWdodCBmcmFtZSkgKHdpbmRvdy10b3RhbC1zaXplIHJvb3Qp KQ0KCSAgICAgd2luZG93LW1pbi1oZWlnaHQpKQ0KCSAoZnJhbWUtdG9wIChmcmFtZS1wYXJh bWV0ZXIgZnJhbWUgJ3RvcCkpDQoJICh0b3AgKGlmIChjb25zcCBmcmFtZS10b3ApDQoJCSAg KGZ1bmNhbGwgKGNhciBmcmFtZS10b3ApIChjYWRyIGZyYW1lLXRvcCkpDQoJCWZyYW1lLXRv cCkpDQoJIChmcmFtZS1tYXgtaGVpZ2h0DQoJICAoLSAoLyAoLSAoeC1kaXNwbGF5LXBpeGVs LWhlaWdodCBmcmFtZSkgdG9wKQ0KCQkoZnJhbWUtY2hhci1oZWlnaHQgZnJhbWUpKQ0KCSAg ICAgZml0LWZyYW1lLXRvLWJ1ZmZlci1ib3R0b20tbWFyZ2luKSkNCgkgZGVsdGEpDQogICAg KHdoZW4gKGFuZCAod2luZG93LWxpdmUtcCByb290KSAobm90ICh3aW5kb3ctc2l6ZS1maXhl ZC1wIHJvb3QpKSkNCiAgICAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyByb290DQoJKGNvbmQN CgkgKChub3QgbWF4LWhlaWdodCkNCgkgIChzZXRxIG1heC1oZWlnaHQgZnJhbWUtbWF4LWhl aWdodCkpDQoJICgobnVtYmVycCBtYXgtaGVpZ2h0KQ0KCSAgKHNldHEgbWF4LWhlaWdodCAo bWluIG1heC1oZWlnaHQgZnJhbWUtbWF4LWhlaWdodCkpKQ0KCSAodA0KCSAgKGVycm9yICIl cyBpcyBhbiBpbnZhbGlkIG1heGltdW0gaGVpZ2h0IiBtYXgtaGVpZ2h0KSkpDQoJKGNvbmQN CgkgKChub3QgbWluLWhlaWdodCkNCgkgIChzZXRxIG1pbi1oZWlnaHQgZnJhbWUtbWluLWhl aWdodCkpDQoJICgobnVtYmVycCBtaW4taGVpZ2h0KQ0KCSAgKHNldHEgbWluLWhlaWdodCAo bWluIG1pbi1oZWlnaHQgZnJhbWUtbWluLWhlaWdodCkpKQ0KCSAodA0KCSAgKGVycm9yICIl cyBpcyBhbiBpbnZhbGlkIG1pbmltdW0gaGVpZ2h0IiBtaW4taGVpZ2h0KSkpDQoJKHNldHEg ZGVsdGENCgkgICAgICA7OyBDb3VudCBhIGZpbmFsIG5ld2xpbmUgLSB0aGlzIGNvbXBlbnNh dGVzIGZvciB0aGUNCgkgICAgICA7OyBtaXNzaW5nIHBvc3QtcHJvY2VzaW5nIHBhcnQgYWZ0 ZXIgcmVzaXppbmcgdGhlIGZyYW1lLg0KCSAgICAgICgtICgrIChjb3VudC1zY3JlZW4tbGlu ZXMgbmlsIG5pbCB0KQ0KCQkgICAgOzsgRm9yIG5vbi1taW5pYnVmZmVycyBjb3VudCB0aGUg bW9kZSBsaW5lLCBpZiBhbnkuDQoJCSAgICAoaWYgKGFuZCAobm90ICh3aW5kb3ctbWluaWJ1 ZmZlci1wKSkNCgkJCSAgICAgbW9kZS1saW5lLWZvcm1hdCkNCgkJCTENCgkJICAgICAgMCkN CgkJICAgIDs7IENvdW50IHRoZSBoZWFkZXIgbGluZSwgaWYgYW55Lg0KCQkgICAgKGlmIGhl YWRlci1saW5lLWZvcm1hdCAxIDApKQ0KCQkgKHdpbmRvdy10b3RhbC1zaXplKSkpKQ0KICAg ICAgOzsgTW92ZSBhd2F5IGZyb20gZmluYWwgbmV3bGluZS4NCiAgICAgICh3aGVuIChhbmQg KGVvYnApIChib2xwKSAobm90IChib2JwKSkpDQoJKHNldC13aW5kb3ctcG9pbnQgcm9vdCAo bGluZS1iZWdpbm5pbmctcG9zaXRpb24gMCkpKQ0KICAgICAgKHNldC13aW5kb3ctc3RhcnQg cm9vdCAocG9pbnQtbWluKSkNCiAgICAgIChzZXQtd2luZG93LXZzY3JvbGwgcm9vdCAwKQ0K ICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbA0KCSAgKHNldC1mcmFtZS1oZWlnaHQNCgkgICBm cmFtZQ0KCSAgIChtaW4gKG1heCAoKyAoZnJhbWUtaGVpZ2h0IGZyYW1lKSBkZWx0YSkNCgkJ ICAgICBtaW4taGVpZ2h0KQ0KCQltYXgtaGVpZ2h0KSkNCgkoZXJyb3IgKHNldHEgZGVsdGEg bmlsKSkpKQ0KICAgIGRlbHRhKSkNCg0KOzsgVXNhZ2UNCihkZWZ1biByZWNvdmVyLWZpbGUg KGZpbGUpDQogICJWaXNpdCBmaWxlIEZJTEUsIGJ1dCBnZXQgY29udGVudHMgZnJvbSBpdHMg bGFzdCBhdXRvLXNhdmUgZmlsZS4iDQogIDs7IEFjdHVhbGx5IHB1dHRpbmcgdGhlIGZpbGUg bmFtZSBpbiB0aGUgbWluaWJ1ZmZlciBzaG91bGQgYmUgdXNlZA0KICA7OyBvbmx5IHJhcmVs eS4NCiAgOzsgTm90IGp1c3QgYmVjYXVzZSB1c2VycyBvZnRlbiB1c2UgdGhlIGRlZmF1bHQu DQogIChpbnRlcmFjdGl2ZSAiRlJlY292ZXIgZmlsZTogIikNCiAgKHNldHEgZmlsZSAoZXhw YW5kLWZpbGUtbmFtZSBmaWxlKSkNCiAgKGlmIChhdXRvLXNhdmUtZmlsZS1uYW1lLXAgKGZp bGUtbmFtZS1ub25kaXJlY3RvcnkgZmlsZSkpDQogICAgICAoZXJyb3IgIiVzIGlzIGFuIGF1 dG8tc2F2ZSBmaWxlIiAoYWJicmV2aWF0ZS1maWxlLW5hbWUgZmlsZSkpKQ0KICAobGV0ICgo ZmlsZS1uYW1lIChsZXQgKChidWZmZXItZmlsZS1uYW1lIGZpbGUpKQ0KCQkgICAgIChtYWtl LWF1dG8tc2F2ZS1maWxlLW5hbWUpKSkpDQogICAgKGNvbmQgKChpZiAoZmlsZS1leGlzdHMt cCBmaWxlKQ0KCSAgICAgICAobm90IChmaWxlLW5ld2VyLXRoYW4tZmlsZS1wIGZpbGUtbmFt ZSBmaWxlKSkNCgkgICAgIChub3QgKGZpbGUtZXhpc3RzLXAgZmlsZS1uYW1lKSkpDQoJICAg KGVycm9yICJBdXRvLXNhdmUgZmlsZSAlcyBub3QgY3VycmVudCINCgkJICAoYWJicmV2aWF0 ZS1maWxlLW5hbWUgZmlsZS1uYW1lKSkpDQoJICAoKHdpdGgtdGVtcC1idWZmZXItd2luZG93 DQoJICAgICIqRGlyZWN0b3J5KiINCgkgICAgIycobGFtYmRhICh3aW5kb3cgX3ZhbHVlKQ0K CQkodW53aW5kLXByb3RlY3QNCgkJICAgICh5ZXMtb3Itbm8tcCAoZm9ybWF0ICJSZWNvdmVy IGF1dG8gc2F2ZSBmaWxlICVzPyAiIGZpbGUtbmFtZSkpDQoJCSAgKHF1aXQtcmVzdG9yZS13 aW5kb3cgd2luZG93ICdraWxsKSkpDQoJICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5k YXJkLW91dHB1dA0KCSAgICAgIChsZXQgKChzd2l0Y2hlcyBkaXJlZC1saXN0aW5nLXN3aXRj aGVzKSkNCgkJKGlmIChmaWxlLXN5bWxpbmstcCBmaWxlKQ0KCQkgICAgKHNldHEgc3dpdGNo ZXMgKGNvbmNhdCBzd2l0Y2hlcyAiIC1MIikpKQ0KCQk7OyBVc2UgaW5zZXJ0LWRpcmVjdG9y eS1zYWZlbHksIG5vdCBpbnNlcnQtZGlyZWN0b3J5LA0KCQk7OyBiZWNhdXNlIHRoZXNlIGZp bGVzIG1pZ2h0IG5vdCBleGlzdC4gIEluIHBhcnRpY3VsYXIsDQoJCTs7IEZJTEUgbWlnaHQg bm90IGV4aXN0IGlmIHRoZSBhdXRvLXNhdmUgZmlsZSB3YXMgZm9yDQoJCTs7IGEgYnVmZmVy IHRoYXQgZGlkbid0IHZpc2l0IGEgZmlsZSwgc3VjaCBhcyAiKm1haWwqIi4NCgkJOzsgVGhl IGNvZGUgaW4gdjIwLnggY2FsbGVkIGBscycgZGlyZWN0bHksIHNvIHdlIG5lZWQNCgkJOzsg dG8gZW11bGF0ZSB3aGF0IGBscycgZGlkIGluIHRoYXQgY2FzZS4NCgkJKGluc2VydC1kaXJl Y3Rvcnktc2FmZWx5IGZpbGUgc3dpdGNoZXMpDQoJCShpbnNlcnQtZGlyZWN0b3J5LXNhZmVs eSBmaWxlLW5hbWUgc3dpdGNoZXMpKSkpDQoJICAgKHN3aXRjaC10by1idWZmZXIgKGZpbmQt ZmlsZS1ub3NlbGVjdCBmaWxlIHQpKQ0KCSAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0 KQ0KCQkgOzsgS2VlcCB0aGUgY3VycmVudCBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtLg0K CQkgKGNvZGluZy1zeXN0ZW0gYnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSkNCgkJIDs7IEF1 dG8tc2F2ZWQgZmlsZSBzaG91bGQgYmUgcmVhZCB3aXRoIHNwZWNpYWwgY29kaW5nLg0KCQkg KGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgJ2F1dG8tc2F2ZS1jb2RpbmcpKQ0KCSAgICAgKGVy YXNlLWJ1ZmZlcikNCgkgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlLW5hbWUgbmls KQ0KCSAgICAgKHNldC1idWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtIGNvZGluZy1zeXN0ZW0p KQ0KCSAgIChhZnRlci1maW5kLWZpbGUgbmlsIG5pbCB0KSkNCgkgICh0ICh1c2VyLWVycm9y ICJSZWNvdmVyLWZpbGUgY2FuY2VsbGVkIikpKSkpDQoNCihkZWZ1biBzYXZlLWJ1ZmZlcnMt a2lsbC1lbWFjcyAoJm9wdGlvbmFsIGFyZykNCiAgIk9mZmVyIHRvIHNhdmUgZWFjaCBidWZm ZXIsIHRoZW4ga2lsbCB0aGlzIEVtYWNzIHByb2Nlc3MuDQpXaXRoIHByZWZpeCBBUkcsIHNp bGVudGx5IHNhdmUgYWxsIGZpbGUtdmlzaXRpbmcgYnVmZmVycyB3aXRob3V0IGFza2luZy4N CklmIHRoZXJlIGFyZSBhY3RpdmUgcHJvY2Vzc2VzIHdoZXJlIGBwcm9jZXNzLXF1ZXJ5LW9u LWV4aXQtZmxhZycNCnJldHVybnMgbm9uLW5pbCwgYXNrcyB3aGV0aGVyIHByb2Nlc3NlcyBz aG91bGQgYmUga2lsbGVkLg0KUnVucyB0aGUgbWVtYmVycyBvZiBga2lsbC1lbWFjcy1xdWVy eS1mdW5jdGlvbnMnIGluIHR1cm4gYW5kIHN0b3BzDQppZiBhbnkgcmV0dXJucyBuaWwuICBJ ZiBgY29uZmlybS1raWxsLWVtYWNzJyBpcyBub24tbmlsLCBjYWxscyBpdC4iDQogIChpbnRl cmFjdGl2ZSAiUCIpDQogIChzYXZlLXNvbWUtYnVmZmVycyBhcmcgdCkNCiAgKGFuZCAob3Ig KG5vdCAobWVtcSB0IChtYXBjYXIgKGZ1bmN0aW9uDQoJCQkJICAobGFtYmRhIChidWYpIChh bmQgKGJ1ZmZlci1maWxlLW5hbWUgYnVmKQ0KCQkJCQkJICAgICAoYnVmZmVyLW1vZGlmaWVk LXAgYnVmKSkpKQ0KCQkJCShidWZmZXItbGlzdCkpKSkNCgkgICAoeWVzLW9yLW5vLXAgIk1v ZGlmaWVkIGJ1ZmZlcnMgZXhpc3Q7IGV4aXQgYW55d2F5PyAiKSkNCiAgICAgICAob3IgKG5v dCAoZmJvdW5kcCAncHJvY2Vzcy1saXN0KSkNCgkgICA7OyBwcm9jZXNzLWxpc3QgaXMgbm90 IGRlZmluZWQgb24gTVNET1MuDQoJICAgKGxldCAoKHByb2Nlc3NlcyAocHJvY2Vzcy1saXN0 KSkNCgkJIGFjdGl2ZSkNCgkgICAgICh3aGlsZSBwcm9jZXNzZXMNCgkgICAgICAgKGFuZCAo bWVtcSAocHJvY2Vzcy1zdGF0dXMgKGNhciBwcm9jZXNzZXMpKSAnKHJ1biBzdG9wIG9wZW4g bGlzdGVuKSkNCgkJICAgIChwcm9jZXNzLXF1ZXJ5LW9uLWV4aXQtZmxhZyAoY2FyIHByb2Nl c3NlcykpDQoJCSAgICAoc2V0cSBhY3RpdmUgdCkpDQoJICAgICAgIChzZXRxIHByb2Nlc3Nl cyAoY2RyIHByb2Nlc3NlcykpKQ0KCSAgICAgKG9yIChub3QgYWN0aXZlKQ0KCQkgKHdpdGgt dGVtcC1idWZmZXItd2luZG93IChnZXQtYnVmZmVyLWNyZWF0ZSAiKlByb2Nlc3MgTGlzdCoi KQ0KCQkgICAjJyhsYW1iZGEgKHdpbmRvdyBfdmFsdWUpDQoJCSAgICAgICAodW53aW5kLXBy b3RlY3QNCgkJCSAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyB3aW5kb3cNCgkJCSAgICAgKHll cy1vci1uby1wICJBY3RpdmUgcHJvY2Vzc2VzIGV4aXN0OyBraWxsIHRoZW0gYW5kIGV4aXQg YW55d2F5PyAiKSkNCgkJCSAocXVpdC1yZXN0b3JlLXdpbmRvdyB3aW5kb3cgJ2tpbGwpKSkN CgkJICAgKGxpc3QtcHJvY2Vzc2VzIHQpKSkpKQ0KICAgICAgIDs7IFF1ZXJ5IHRoZSB1c2Vy IGZvciBvdGhlciB0aGluZ3MsIHBlcmhhcHMuDQogICAgICAgKHJ1bi1ob29rLXdpdGgtYXJn cy11bnRpbC1mYWlsdXJlICdraWxsLWVtYWNzLXF1ZXJ5LWZ1bmN0aW9ucykNCiAgICAgICAo b3IgKG51bGwgY29uZmlybS1raWxsLWVtYWNzKQ0KCSAgIChmdW5jYWxsIGNvbmZpcm0ta2ls bC1lbWFjcyAiUmVhbGx5IGV4aXQgRW1hY3M/ICIpKQ0KICAgICAgIChraWxsLWVtYWNzKSkp DQoNCihkZWZ1biBkaXJlZC1tYXJrLXBvcC11cCAoYnVmZmVyLW9yLW5hbWUgb3Atc3ltYm9s IGZpbGVzIGZ1bmN0aW9uICZyZXN0IGFyZ3MpDQogICJSZXR1cm4gRlVOQ1RJT04ncyByZXN1 bHQgb24gQVJHUyBhZnRlciBzaG93aW5nIHdoaWNoIGZpbGVzIGFyZSBtYXJrZWQuDQpEaXNw bGF5cyB0aGUgZmlsZSBuYW1lcyBpbiBhIHdpbmRvdyBzaG93aW5nIGEgYnVmZmVyIG5hbWVk DQpCVUZGRVItT1ItTkFNRTsgdGhlIGRlZmF1bHQgbmFtZSBiZWluZyBcIiAqTWFya2VkIEZp bGVzKlwiLiAgVGhlDQp3aW5kb3cgaXMgbm90IHNob3duIGlmIHRoZXJlIGlzIGp1c3Qgb25l IGZpbGUsIGBkaXJlZC1uby1jb25maXJtJw0KaXMgdCwgb3IgT1AtU1lNQk9MIGlzIGEgbWVt YmVyIG9mIHRoZSBsaXN0IGluIGBkaXJlZC1uby1jb25maXJtJy4NCg0KRklMRVMgaXMgdGhl IGxpc3Qgb2YgbWFya2VkIGZpbGVzLiAgSXQgY2FuIGFsc28gYmUgKHQgRklMRU5BTUUpDQpp biB0aGUgY2FzZSBvZiBvbmUgbWFya2VkIGZpbGUsIHRvIGRpc3Rpbmd1aXNoIHRoYXQgZnJv bSB1c2luZw0KanVzdCB0aGUgY3VycmVudCBmaWxlLg0KDQpGVU5DVElPTiBzaG91bGQgbm90 IG1hbmlwdWxhdGUgZmlsZXMsIGp1c3QgcmVhZCBpbnB1dCBcKGFuDQphcmd1bWVudCBvciBj b25maXJtYXRpb24pLiINCiAgKGlmIChvciAoZXEgZGlyZWQtbm8tY29uZmlybSB0KQ0KCSAg KG1lbXEgb3Atc3ltYm9sIGRpcmVkLW5vLWNvbmZpcm0pDQoJICA7OyBJZiBGSUxFUyBkZWZh dWx0ZWQgdG8gdGhlIGN1cnJlbnQgbGluZSdzIGZpbGUuDQoJICAoPSAobGVuZ3RoIGZpbGVz KSAxKSkNCiAgICAgIChhcHBseSBmdW5jdGlvbiBhcmdzKQ0KICAgIChsZXQgKChidWZmZXIg KGdldC1idWZmZXItY3JlYXRlIChvciBidWZmZXItb3ItbmFtZSAiICpNYXJrZWQgRmlsZXMq IikpKSkNCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcg0KCShsZXQgKChzcGxp dC1oZWlnaHQtdGhyZXNob2xkIDApDQoJICAgICAgKGRpc3BsYXktYnVmZmVyLWFwcC1hY3Rp b24NCgkgICAgICAgKGNvbnMgJ2Rpc3BsYXktYnVmZmVyLWJlbG93LXNlbGVjdGVkIG5pbCkp KQ0KCSAgKHdpdGgtdGVtcC1idWZmZXItd2luZG93DQoJICAgYnVmZmVyDQoJICAgIycobGFt YmRhICh3aW5kb3cgX3ZhbHVlKQ0KCSAgICAgICAodW53aW5kLXByb3RlY3QNCgkJICAgKGFw cGx5IGZ1bmN0aW9uIGFyZ3MpDQoJCSAocXVpdC1yZXN0b3JlLXdpbmRvdyB3aW5kb3cgJ2tp bGwpKSkNCgkgICA7OyBIYW5kbGUgKHQgRklMRSkganVzdCBsaWtlIChGSUxFKSwgaGVyZS4g IFRoYXQgdmFsdWUgaXMNCgkgICA7OyB1c2VkIChvbmx5IGluIHNvbWUgY2FzZXMpLCB0byBt ZWFuIGp1c3Qgb25lIGZpbGUgdGhhdCB3YXMNCgkgICA7OyBtYXJrZWQsIHJhdGhlciB0aGFu IHRoZSBjdXJyZW50IGxpbmUgZmlsZS4NCgkgICAoZGlyZWQtZm9ybWF0LWNvbHVtbnMtb2Yt ZmlsZXMNCgkgICAgKGlmIChlcSAoY2FyIGZpbGVzKSB0KSAoY2RyIGZpbGVzKSBmaWxlcykp DQoJICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkN CgkJCQkgICAnKG1vdXNlLWZhY2UgbmlsIGhlbHAtZWNobyBuaWwpKSkpKSkpKQ0K --------------090707010601010507010909--