From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Simona Arizanova Newsgroups: gmane.emacs.bugs Subject: bug#30819: [Bug #19655] Patches for GNU Emacs Date: Wed, 14 Mar 2018 14:07:55 +0000 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_" X-Trace: blaine.gmane.org 1521041495 3598 195.159.176.226 (14 Mar 2018 15:31:35 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 14 Mar 2018 15:31:35 +0000 (UTC) To: 30819@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Mar 14 16:31:31 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ew8NG-0000km-3O for geb-bug-gnu-emacs@m.gmane.org; Wed, 14 Mar 2018 16:31:30 +0100 Original-Received: from localhost ([::1]:46828 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ew8PJ-0001Is-3g for geb-bug-gnu-emacs@m.gmane.org; Wed, 14 Mar 2018 11:33:37 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34624) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ew8Ow-0001Bg-M7 for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 11:33:26 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ew8Ol-0005fT-8A for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 11:33:14 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:53782) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ew8Ok-0005fC-Nc for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 11:33:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ew8Ok-0006sO-Gl for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 11:33:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Simona Arizanova Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Mar 2018 15:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 30819 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: "bug-gnu-emacs@gnu.org" Original-Received: via spool by submit@debbugs.gnu.org id=B.152104155026371 (code B ref -1); Wed, 14 Mar 2018 15:33:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 Mar 2018 15:32:30 +0000 Original-Received: from localhost ([127.0.0.1]:33445 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ew8OE-0006rH-B1 for submit@debbugs.gnu.org; Wed, 14 Mar 2018 11:32:30 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:51967) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ew753-0004eX-Qu for submit@debbugs.gnu.org; Wed, 14 Mar 2018 10:08:37 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ew74n-0003Xl-CR for submit@debbugs.gnu.org; Wed, 14 Mar 2018 10:08:32 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:34180) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ew74m-0003XH-Si for submit@debbugs.gnu.org; Wed, 14 Mar 2018 10:08:21 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42866) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ew74b-0006Ae-PI for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 10:08:20 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ew74R-0003Lo-0G for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 10:08:09 -0400 Original-Received: from mail-oln040092067049.outbound.protection.outlook.com ([40.92.67.49]:6416 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ew74P-0003Ks-Ui for bug-gnu-emacs@gnu.org; Wed, 14 Mar 2018 10:07:58 -0400 Original-Received: from VE1EUR02FT039.eop-EUR02.prod.protection.outlook.com (10.152.12.53) by VE1EUR02HT033.eop-EUR02.prod.protection.outlook.com (10.152.13.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.527.15; Wed, 14 Mar 2018 14:07:55 +0000 Original-Received: from DB6PR0902MB2101.eurprd09.prod.outlook.com (10.152.12.59) by VE1EUR02FT039.mail.protection.outlook.com (10.152.13.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.527.22 via Frontend Transport; Wed, 14 Mar 2018 14:07:55 +0000 Original-Received: from DB6PR0902MB2101.eurprd09.prod.outlook.com ([fe80::bc8a:76f2:337a:672f]) by DB6PR0902MB2101.eurprd09.prod.outlook.com ([fe80::bc8a:76f2:337a:672f%13]) with mapi id 15.20.0567.018; Wed, 14 Mar 2018 14:07:55 +0000 Thread-Topic: [Bug #19655] Patches for GNU Emacs Thread-Index: AQHTu5uI9jOzqSTJHECjDG9RLRweBA== Accept-Language: fr-FR, en-US Content-Language: fr-FR X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:DEA3B500E44BB363F951BFDDD87CBA260E99A321AB6E917D5BF29646FF89A9C9; UpperCasedChecksum:B529F6A36B33824830770E5283050EDF47D1B8883A583B032BD6A8FA757EFD46; SizeAsReceived:6881; Count:44 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [IRVKDX6ZCWoT4tlmNAHWr+rqJo0nfOGt] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VE1EUR02HT033; 6:kkUtnWxCZewl7764AdjyVnL36cujfTnayMGO+MLulkJxjK3/JAgD6poWwtdKLDxW8vlbFp40zpZTfauo3M9JHCe2Elxt1nKGfNYKdxBl+fRTEUfisM+g2McPsNmXsi7p4+Z/b/hdVarVqllrZ3+dStnbMbgLRnccb8dPAvjlH/H9T/vtDed7TyiYp6gBEF4MxyyAsRXWfIDaXQBUT+g+PFedZrh5xqhI5Mo7IQZ07uXa1WGv/f7ASVHC+KQx0FAghrS0atJEvMOQkMF4VHP6aRqTwCaAWgvt7LiERGPwQQ5fdRVgTElu+9T0NxlqaLwQ99u3ijn8O6AHNgS1G0scUwd6J+nwpFq84nUfdrSadwo=; 5:C3O5sO0+IKaCBM19qVKLfGPYfqcCF9X6H5zeNsbmGKE+66h0RIOnUVsGCxhrB2sEslBm+AB+5U83oRj6Mx82oPyj9qK7nO2aLKYFrSPFcGkAUdQkxefULMU5vDi+NuPsKtCNvg7Ec+1k3R1uH8V+23TcY1rKQPra5tseJpX/lWU=; 24:z/tyrXb/7fpUDRlkTUuZwfefxXg4Fk4+WgRwEf0T7IGbQdJBNo8ANpbtbIA1bLK2DYkE4GIbh15c/FGEtoR5i6dV/tvqtUlTHEtufNhxHbM=; 7:Z3eIC0I7AF6jvr0NTs85oYQ2k4c+cMbJ0lKTk1IGrzVDt6urke1dZdSVCztaejYuJW8rkDfEllrle94pwmccpnkurr8M3X8j9Haj0eWMOJ+mu3fkzF0mLMaJTYjmmyP3KZnqhq4tKegsSxR+QMjBqEP6iA6Oo4uBqn0sSL0uPwZsVkDZ7ZXB7B7Gg x-incomingheadercount: 44 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(1601125374)(1603101448)(1701031045); SRVR:VE1EUR02HT033; x-ms-traffictypediagnostic: VE1EUR02HT033: x-ms-office365-filtering-correlation-id: d157a934-c06d-4fe0-4826-08d589b4fbe3 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:VE1EUR02HT033; BCL:0; PCL:0; RULEID:; SRVR:VE1EUR02HT033; x-forefront-prvs: 0611A21987 x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:VE1EUR02HT033; H:DB6PR0902MB2101.eurprd09.prod.outlook.com; FPR:; SPF:None; LANG:; x-microsoft-antispam-message-info: Tb4Jyk7Wz92G9Owp+FRW370l+ftXT6xJ77u+bSG84r1D6uPuScWD2jCXC0LkhRInxLJ2Lte+mUCG0RjmfXZ4twNgWhcgkrw8XbIGDhbhps9z9rb0rG+RQGl9ej7quIuzpHkIEZu1SAdqp/+TZac7+eYJlTIygAMP0sItgZmeXjKao+pyPxtC2kXtd8yUOFAR spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d157a934-c06d-4fe0-4826-08d589b4fbe3 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Mar 2018 14:07:55.4950 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1EUR02HT033 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Mailman-Approved-At: Wed, 14 Mar 2018 11:32:29 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:144258 Archived-At: --_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: multipart/alternative; boundary="_000_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_" --_000_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hello, As I was using the last version of Emacs (27.0.50) , I noticed something th= at could be improved. I=92m explaining : First type C =96 h ? to open the Metahelp window. Then write C =96 s to enable searching. Instead of searching in the Metahelp window, the Metahelp window closes. This is an actual bug registered as #19655 in the https://debbugs.gnu.org. Therefore I=92ve decided that I could help to fix that issue. Look forward for the patch of the corrected bug. The function search-forward-help-for-help in the help.el allows to reasearc= h in the * Metahelp * window. I look forward for your response from you soon. Thanks. - Arizanova Simona - --_000_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable

Hello,


As I was using the last ve= rsion of Emacs (27.0.50) , I noticed something that could be improved. I=92= m explaining :

First type C =96 h ? = to open the Metahelp window.

Then write C =96 s to enab= le searching.

Instead of searching in th= e Metahelp window, the Metahelp window closes.

This is an actual bug regi= stered as #19655 in the https://debbugs.gnu.org.


Therefore I=92ve decided t= hat I could help to fix that issue.

Look forward for the patch= of the corrected bug.


The function se= arch-forward-help-for-help in the help.el allows to reasearch in the= * Metahelp * window.


I look forward for y= our response from you soon.


Thanks.





- Arizanova Simona -

--_000_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_-- --_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: text/x-emacs-lisp; name="Actual-help.el" Content-Description: Actual-help.el Content-Disposition: attachment; filename="Actual-help.el"; size=60103; creation-date="Wed, 14 Mar 2018 13:46:21 GMT"; modification-date="Wed, 14 Mar 2018 13:46:21 GMT" Content-Transfer-Encoding: base64 Ozs7IGhlbHAuZWwgLS0tIGhlbHAgY29tbWFuZHMgZm9yIEVtYWNzICAtKi0gbGV4aWNhbC1iaW5k aW5nOnQgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDE5ODUtMTk4NiwgMTk5My0xOTk0LCAxOTk4LTIw MTggRnJlZSBTb2Z0d2FyZQo7OyBGb3VuZGF0aW9uLCBJbmMuCgo7OyBNYWludGFpbmVyOiBlbWFj cy1kZXZlbEBnbnUub3JnCjs7IEtleXdvcmRzOiBoZWxwLCBpbnRlcm5hbAo7OyBQYWNrYWdlOiBl bWFjcwoKOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVtYWNzIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KCjs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIEdOVSBFbWFj cy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgo7OzsgQ29t bWVudGFyeToKCjs7IFRoaXMgY29kZSBpbXBsZW1lbnRzIEdOVSBFbWFjcydzIGJ1aWx0LWluIGhl bHAgc3lzdGVtLCB0aGUgb25lIGludm9rZWQgYnkKOzsgYE0teCBoZWxwLWZvci1oZWxwJy4KCjs7 OyBDb2RlOgoKOzsgR2V0IHRoZSBtYWNybyBtYWtlLWhlbHAtc2NyZWVuIHdoZW4gdGhpcyBpcyBj b21waWxlZCwKOzsgb3IgcnVuIGludGVycHJldGVkLCBidXQgbm90IHdoZW4gdGhlIGNvbXBpbGVk IGNvZGUgaXMgbG9hZGVkLgooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2hlbHAtbWFjcm8p KQoKOzsgVGhpcyBtYWtlcyBgd2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXInIGJ1ZmZlcnMgdXNl IGBoZWxwLW1vZGUnLgooYWRkLWhvb2sgJ3RlbXAtYnVmZmVyLXNldHVwLWhvb2sgJ2hlbHAtbW9k ZS1zZXR1cCkKKGFkZC1ob29rICd0ZW1wLWJ1ZmZlci1zaG93LWhvb2sgJ2hlbHAtbW9kZS1maW5p c2gpCgo7OyBgaGVscC13aW5kb3ctcG9pbnQtbWFya2VyJyBpcyBhIG1hcmtlciB5b3UgY2FuIG1v dmUgdG8gYSB2YWxpZAo7OyBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyIHNob3duIGluIHRoZSBoZWxw IHdpbmRvdyBpbiBvcmRlciB0byBvdmVycmlkZQo7OyB0aGUgc3RhbmRhcmQgcG9zaXRpb25pbmcg bWVjaGFuaXNtIChgcG9pbnQtbWluJykgY2hvc2VuIGJ5Cjs7IGB3aXRoLW91dHB1dC10by10ZW1w LWJ1ZmZlcicgYW5kIGB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycuCjs7IGB3aXRoLWhlbHAtd2lu ZG93JyBoYXMgdGhpcyBwb2ludCBub3doZXJlIGJlZm9yZSBleGl0aW5nLiAgQ3VycmVudGx5Cjs7 IHVzZWQgYnkgYHZpZXctbG9zc2FnZScgdG8gYXNzZXJ0IHRoYXQgdGhlIGxhc3Qga2V5c3Ryb2tl cyBhcmUgYWx3YXlzCjs7IHZpc2libGUuCihkZWZ2YXIgaGVscC13aW5kb3ctcG9pbnQtbWFya2Vy IChtYWtlLW1hcmtlcikKICAiTWFya2VyIHRvIG92ZXJyaWRlIGRlZmF1bHQgYHdpbmRvdy1wb2lu dCcgaW4gaGVscCB3aW5kb3dzLiIpCgooZGVmdmFyIGhlbHAtd2luZG93LW9sZC1mcmFtZSBuaWwK ICAiRnJhbWUgc2VsZWN0ZWQgYXQgdGhlIHRpbWUgYHdpdGgtaGVscC13aW5kb3cnIGlzIGludm9r ZWQuIikKCihkZWZ2YXIgaGVscC1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXAp KSkKICAgIChkZWZpbmUta2V5IG1hcCAoY2hhci10by1zdHJpbmcgaGVscC1jaGFyKSAnaGVscC1m b3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCBbaGVscF0gJ2hlbHAtZm9yLWhlbHApCiAgICAo ZGVmaW5lLWtleSBtYXAgW2YxXSAnaGVscC1mb3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAi LiIgJ2Rpc3BsYXktbG9jYWwtaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAiPyIgJ2hlbHAtZm9y LWhlbHApCgogICAgKGRlZmluZS1rZXkgbWFwICJcQy1hIiAnYWJvdXQtZW1hY3MpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLWMiICdkZXNjcmliZS1jb3B5aW5nKQogICAgKGRlZmluZS1rZXkgbWFw ICJcQy1kIiAndmlldy1lbWFjcy1kZWJ1Z2dpbmcpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWUi ICd2aWV3LWV4dGVybmFsLXBhY2thZ2VzKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1mIiAndmll dy1lbWFjcy1GQVEpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLW0iICd2aWV3LW9yZGVyLW1hbnVh bHMpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLW4iICd2aWV3LWVtYWNzLW5ld3MpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLW8iICdkZXNjcmliZS1kaXN0cmlidXRpb24pCiAgICAoZGVmaW5lLWtl eSBtYXAgIlxDLXAiICd2aWV3LWVtYWNzLXByb2JsZW1zKQogICAgKGRlZmluZS1rZXkgbWFwICJc Qy10IiAndmlldy1lbWFjcy10b2RvKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy13IiAnZGVzY3Jp YmUtbm8td2FycmFudHkpCgogICAgOzsgVGhpcyBkb2VzIG5vdCBmaXQgdGhlIHBhdHRlcm4sIGJ1 dCBpdCBpcyBuYXR1cmFsIGdpdmVuIHRoZSBDLVwgY29tbWFuZC4KICAgIChkZWZpbmUta2V5IG1h cCAiXEMtXFwiICdkZXNjcmliZS1pbnB1dC1tZXRob2QpCgogICAgKGRlZmluZS1rZXkgbWFwICJD IiAnZGVzY3JpYmUtY29kaW5nLXN5c3RlbSkKICAgIChkZWZpbmUta2V5IG1hcCAiRiIgJ0luZm8t Z290by1lbWFjcy1jb21tYW5kLW5vZGUpCiAgICAoZGVmaW5lLWtleSBtYXAgIkkiICdkZXNjcmli ZS1pbnB1dC1tZXRob2QpCiAgICAoZGVmaW5lLWtleSBtYXAgIksiICdJbmZvLWdvdG8tZW1hY3Mt a2V5LWNvbW1hbmQtbm9kZSkKICAgIChkZWZpbmUta2V5IG1hcCAiTCIgJ2Rlc2NyaWJlLWxhbmd1 YWdlLWVudmlyb25tZW50KQogICAgKGRlZmluZS1rZXkgbWFwICJTIiAnaW5mby1sb29rdXAtc3lt Ym9sKQoKICAgIChkZWZpbmUta2V5IG1hcCAiYSIgJ2Fwcm9wb3MtY29tbWFuZCkKICAgIChkZWZp bmUta2V5IG1hcCAiYiIgJ2Rlc2NyaWJlLWJpbmRpbmdzKQogICAgKGRlZmluZS1rZXkgbWFwICJj IiAnZGVzY3JpYmUta2V5LWJyaWVmbHkpCiAgICAoZGVmaW5lLWtleSBtYXAgImQiICdhcHJvcG9z LWRvY3VtZW50YXRpb24pCiAgICAoZGVmaW5lLWtleSBtYXAgImUiICd2aWV3LWVjaG8tYXJlYS1t ZXNzYWdlcykKICAgIChkZWZpbmUta2V5IG1hcCAiZiIgJ2Rlc2NyaWJlLWZ1bmN0aW9uKQogICAg KGRlZmluZS1rZXkgbWFwICJnIiAnZGVzY3JpYmUtZ251LXByb2plY3QpCiAgICAoZGVmaW5lLWtl eSBtYXAgImgiICd2aWV3LWhlbGxvLWZpbGUpCgogICAgKGRlZmluZS1rZXkgbWFwICJpIiAnaW5m bykKICAgIChkZWZpbmUta2V5IG1hcCAiNGkiICdpbmZvLW90aGVyLXdpbmRvdykKCiAgICAoZGVm aW5lLWtleSBtYXAgImsiICdkZXNjcmliZS1rZXkpCiAgICAoZGVmaW5lLWtleSBtYXAgImwiICd2 aWV3LWxvc3NhZ2UpCiAgICAoZGVmaW5lLWtleSBtYXAgIm0iICdkZXNjcmliZS1tb2RlKQogICAg KGRlZmluZS1rZXkgbWFwICJvIiAnZGVzY3JpYmUtc3ltYm9sKQogICAgKGRlZmluZS1rZXkgbWFw ICJuIiAndmlldy1lbWFjcy1uZXdzKQogICAgKGRlZmluZS1rZXkgbWFwICJwIiAnZmluZGVyLWJ5 LWtleXdvcmQpCiAgICAoZGVmaW5lLWtleSBtYXAgIlAiICdkZXNjcmliZS1wYWNrYWdlKQogICAg KGRlZmluZS1rZXkgbWFwICJyIiAnaW5mby1lbWFjcy1tYW51YWwpCiAgICAoZGVmaW5lLWtleSBt YXAgInMiICdkZXNjcmliZS1zeW50YXgpCiAgICAoZGVmaW5lLWtleSBtYXAgInQiICdoZWxwLXdp dGgtdHV0b3JpYWwpCiAgICAoZGVmaW5lLWtleSBtYXAgInciICd3aGVyZS1pcykKICAgIChkZWZp bmUta2V5IG1hcCAidiIgJ2Rlc2NyaWJlLXZhcmlhYmxlKQogICAgKGRlZmluZS1rZXkgbWFwICJx IiAnaGVscC1xdWl0KQogICAgbWFwKQogICJLZXltYXAgZm9yIGNoYXJhY3RlcnMgZm9sbG93aW5n IHRoZSBIZWxwIGtleS4iKQoKKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAoY2hhci10by1zdHJpbmcg aGVscC1jaGFyKSAnaGVscC1jb21tYW5kKQooZGVmaW5lLWtleSBnbG9iYWwtbWFwIFtoZWxwXSAn aGVscC1jb21tYW5kKQooZGVmaW5lLWtleSBnbG9iYWwtbWFwIFtmMV0gJ2hlbHAtY29tbWFuZCkK KGZzZXQgJ2hlbHAtY29tbWFuZCBoZWxwLW1hcCkKCjs7IGluc2VydC1idXR0b24gbWFrZXMgdGhl IGFjdGlvbiBuaWwgaWYgaXQgaXMgbm90IHN0b3JlIHNvbWV3aGVyZQooZGVmdmFyIGhlbHAtYnV0 dG9uLWNhY2hlIG5pbCkKCgwKKGRlZnVuIGhlbHAtcXVpdCAoKQogICJKdXN0IGV4aXQgZnJvbSB0 aGUgSGVscCBjb21tYW5kJ3MgY29tbWFuZCBsb29wLiIKICAoaW50ZXJhY3RpdmUpCiAgbmlsKQoK KGRlZnZhciBoZWxwLXJldHVybi1tZXRob2QgbmlsCiAgIldoYXQgdG8gZG8gdG8gXCJleGl0XCIg dGhlIGhlbHAgYnVmZmVyLgpUaGlzIGlzIGEgbGlzdAogKFdJTkRPVyAuIHQpICAgICAgICAgICAg ICBkZWxldGUgdGhlIHNlbGVjdGVkIHdpbmRvdyAoYW5kIHBvc3NpYmx5IGl0cyBmcmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGBxdWl0LXdpbmRvdycpLCBnbyB0byBXSU5ET1cu CiAoV0lORE9XIC4gcXVpdC13aW5kb3cpICAgIGRvIHF1aXQtd2luZG93LCB0aGVuIHNlbGVjdCBX SU5ET1cuCiAoV0lORE9XIEJVRiBTVEFSVCBQT0lOVCkgIGRpc3BsYXkgQlVGIGF0IFNUQVJULCBQ T0lOVCwgdGhlbiBzZWxlY3QgV0lORE9XLiIpCgooZGVmaW5lLW9ic29sZXRlLWZ1bmN0aW9uLWFs aWFzICdwcmludC1oZWxwLXJldHVybi1tZXNzYWdlICdoZWxwLXByaW50LXJldHVybi1tZXNzYWdl ICIyMy4yIikKKGRlZnVuIGhlbHAtcHJpbnQtcmV0dXJuLW1lc3NhZ2UgKCZvcHRpb25hbCBmdW5j dGlvbikKICAiRGlzcGxheSBvciByZXR1cm4gbWVzc2FnZSBzYXlpbmcgaG93IHRvIHJlc3RvcmUg d2luZG93cyBhZnRlciBoZWxwIGNvbW1hbmQuClRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGBz dGFuZGFyZC1vdXRwdXQnIGlzIHRoZSBoZWxwIGJ1ZmZlci4KSXQgY29tcHV0ZXMgYSBtZXNzYWdl LCBhbmQgYXBwbGllcyB0aGUgb3B0aW9uYWwgYXJndW1lbnQgRlVOQ1RJT04gdG8gaXQuCklmIEZV TkNUSU9OIGlzIG5pbCwgaXQgYXBwbGllcyBgbWVzc2FnZScsIHRodXMgZGlzcGxheWluZyB0aGUg bWVzc2FnZS4KSW4gYWRkaXRpb24sIHRoaXMgZnVuY3Rpb24gc2V0cyB1cCBgaGVscC1yZXR1cm4t bWV0aG9kJywgd2hpY2ggc2VlLCB0aGF0CnNwZWNpZmllcyB3aGF0IHRvIGRvIHdoZW4gdGhlIHVz ZXIgZXhpdHMgdGhlIGhlbHAgYnVmZmVyLgoKRG8gbm90IGNhbGwgdGhpcyBpbiB0aGUgc2NvcGUg b2YgYHdpdGgtaGVscC13aW5kb3cnLiIKICAoYW5kIChub3QgKGdldC1idWZmZXItd2luZG93IHN0 YW5kYXJkLW91dHB1dCkpCiAgICAgICAobGV0ICgoZmlyc3QtbWVzc2FnZQoJICAgICAgKGNvbmQg KChvcgoJCSAgICAgIHBvcC11cC1mcmFtZXMKCQkgICAgICAoc3BlY2lhbC1kaXNwbGF5LXAgKGJ1 ZmZlci1uYW1lIHN0YW5kYXJkLW91dHB1dCkpKQoJCSAgICAgKHNldHEgaGVscC1yZXR1cm4tbWV0 aG9kIChjb25zIChzZWxlY3RlZC13aW5kb3cpIHQpKQoJCSAgICAgOzsgSWYgdGhlIGhlbHAgb3V0 cHV0IGJ1ZmZlciBpcyBhIHNwZWNpYWwgZGlzcGxheSBidWZmZXIsCgkJICAgICA7OyBkb24ndCBz YXkgYW55dGhpbmcgYWJvdXQgaG93IHRvIGdldCByaWQgb2YgaXQuCgkJICAgICA7OyBGaXJzdCBv ZiBhbGwsIHRoZSB1c2VyIHdpbGwgZG8gdGhhdCB3aXRoIHRoZSB3aW5kb3cKCQkgICAgIDs7IG1h bmFnZXIsIG5vdCB3aXRoIEVtYWNzLgoJCSAgICAgOzsgU2Vjb25kbHksIHRoZSBidWZmZXIgaGFz IG5vdCBiZWVuIGRpc3BsYXllZCB5ZXQsCgkJICAgICA7OyBzbyB3ZSBkb24ndCBrbm93IHdoZXRo ZXIgaXRzIGZyYW1lIHdpbGwgYmUgc2VsZWN0ZWQuCgkJICAgICBuaWwpCgkJICAgICgobm90IChv bmUtd2luZG93LXAgdCkpCgkJICAgICAoc2V0cSBoZWxwLXJldHVybi1tZXRob2QKCQkJICAgKGNv bnMgKHNlbGVjdGVkLXdpbmRvdykgJ3F1aXQtd2luZG93KSkKCQkgICAgICJUeXBlIFxcW2Rpc3Bs YXktYnVmZmVyXSBSRVQgdG8gcmVzdG9yZSB0aGUgb3RoZXIgd2luZG93LiIpCgkJICAgIChwb3At dXAtd2luZG93cwoJCSAgICAgKHNldHEgaGVscC1yZXR1cm4tbWV0aG9kIChjb25zIChzZWxlY3Rl ZC13aW5kb3cpIHQpKQoJCSAgICAgIlR5cGUgXFxbZGVsZXRlLW90aGVyLXdpbmRvd3NdIHRvIHJl bW92ZSBoZWxwIHdpbmRvdy4iKQoJCSAgICAodAoJCSAgICAgKHNldHEgaGVscC1yZXR1cm4tbWV0 aG9kCgkJCSAgIChsaXN0IChzZWxlY3RlZC13aW5kb3cpICh3aW5kb3ctYnVmZmVyKQoJCQkJICh3 aW5kb3ctc3RhcnQpICh3aW5kb3ctcG9pbnQpKSkKCQkgICAgICJUeXBlIFxcW3N3aXRjaC10by1i dWZmZXJdIFJFVCB0byByZW1vdmUgaGVscCB3aW5kb3cuIikpKSkKCSAoZnVuY2FsbCAob3IgZnVu Y3Rpb24gJ21lc3NhZ2UpCgkJICAoY29uY2F0CgkJICAgKGlmIGZpcnN0LW1lc3NhZ2UKCQkgICAg ICAgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIGZpcnN0LW1lc3NhZ2UpKQoJCSAgIChpZiBmaXJz dC1tZXNzYWdlICIgICIpCgkJICAgOzsgSWYgdGhlIGhlbHAgYnVmZmVyIHdpbGwgZ28gaW4gYSBz ZXBhcmF0ZSBmcmFtZSwKCQkgICA7OyBpdCdzIG5vIHVzZSBtZW50aW9uaW5nIGEgY29tbWFuZCB0 byBzY3JvbGwsIHNvIGRvbid0LgoJCSAgIChpZiAob3IgcG9wLXVwLXdpbmRvd3MKCQkJICAgKHNw ZWNpYWwtZGlzcGxheS1wIChidWZmZXItbmFtZSBzdGFuZGFyZC1vdXRwdXQpKSkKCQkgICAgICAg bmlsCgkJICAgICAoaWYgKHNhbWUtd2luZG93LXAgKGJ1ZmZlci1uYW1lIHN0YW5kYXJkLW91dHB1 dCkpCgkJCSA7OyBTYXkgaG93IHRvIHNjcm9sbCB0aGlzIHdpbmRvdy4KCQkJIChzdWJzdGl0dXRl LWNvbW1hbmQta2V5cwoJCQkgICJcXFtzY3JvbGwtdXBdIHRvIHNjcm9sbCB0aGUgaGVscC4iKQoJ CSAgICAgICA7OyBTYXkgaG93IHRvIHNjcm9sbCBzb21lIG90aGVyIHdpbmRvdy4KCQkgICAgICAg KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzCgkJCSJcXFtzY3JvbGwtb3RoZXItd2luZG93XSB0byBz Y3JvbGwgdGhlIGhlbHAuIikpKSkpKSkpCgo7OyBTbyBrZXlib2FyZCBtYWNybyBkZWZpbml0aW9u cyBhcmUgZG9jdW1lbnRlZCBjb3JyZWN0bHkKKGZzZXQgJ2RlZmluaW5nLWtiZC1tYWNybyAoc3lt Ym9sLWZ1bmN0aW9uICdzdGFydC1rYmQtbWFjcm8pKQoKKGRlZmFsaWFzICdoZWxwICdoZWxwLWZv ci1oZWxwLWludGVybmFsKQo7OyBmaW5kLWZ1bmN0aW9uIGNhbiBmaW5kIHRoaXMuCihkZWZhbGlh cyAnaGVscC1mb3ItaGVscCAnaGVscC1mb3ItaGVscC1pbnRlcm5hbCkKOzsgSXQgY2FuJ3QgZmlu ZCB0aGlzLCBidXQgbm9ib2R5IHdpbGwgbG9vay4KKG1ha2UtaGVscC1zY3JlZW4gaGVscC1mb3It aGVscC1pbnRlcm5hbAogIChwdXJlY29weSAiVHlwZSBhIGhlbHAgb3B0aW9uOiBbYWJjQ2RlZkZn aUlrS2xMbW5wcnN0dncuXSBDLVtjZGVmbW5vcHR3XSBvciA/IikKICA7OyBEb24ndCBwdXJlY29w eSB0aGlzIG9uZSwgYmVjYXVzZSBpdCdzIG5vdCBldmFsdWF0ZWQgKGl0J3MKICA7OyBkaXJlY3Rs eSB1c2VkIGFzIGEgZG9jc3RyaW5nIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc28gaXQnbGwK ICA7OyBiZSBtb3ZlZCB0byB0aGUgRE9DIGZpbGUgYW55d2F5OiBubyBuZWVkIGZvciBwdXJlY29w eWluZyBpdCkuCiAgIllvdSBoYXZlIHR5cGVkICVUSElTLUtFWSUsIHRoZSBoZWxwIGNoYXJhY3Rl ci4gIFR5cGUgYSBIZWxwIG9wdGlvbjoKXChVc2UgU1BDIG9yIERFTCB0byBzY3JvbGwgdGhyb3Vn aCB0aGlzIHRleHQuICBUeXBlIFxcPGhlbHAtbWFwPlxcW2hlbHAtcXVpdF0gdG8gZXhpdCB0aGUg SGVscCBjb21tYW5kLikKCmEgUEFUVEVSTiAgIFNob3cgY29tbWFuZHMgd2hvc2UgbmFtZSBtYXRj aGVzIHRoZSBQQVRURVJOIChhIGxpc3Qgb2Ygd29yZHMKICAgICAgICAgICAgICBvciBhIHJlZ2V4 cCkuICBTZWUgYWxzbyB0aGUgYGFwcm9wb3MnIGNvbW1hbmQuCmIgICAgICAgICAgIERpc3BsYXkg YWxsIGtleSBiaW5kaW5ncy4KYyBLRVlTICAgICAgRGlzcGxheSB0aGUgY29tbWFuZCBuYW1lIHJ1 biBieSB0aGUgZ2l2ZW4ga2V5IHNlcXVlbmNlLgpDIENPRElORyAgICBEZXNjcmliZSB0aGUgZ2l2 ZW4gY29kaW5nIHN5c3RlbSwgb3IgUkVUIGZvciBjdXJyZW50IG9uZXMuCmQgUEFUVEVSTiAgIFNo b3cgYSBsaXN0IG9mIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgb3RoZXIgaXRlbXMgd2hvc2UK ICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG1hdGNoZXMgdGhlIFBBVFRFUk4gKGEgbGlzdCBv ZiB3b3JkcyBvciBhIHJlZ2V4cCkuCmUgICAgICAgICAgIEdvIHRvIHRoZSAqTWVzc2FnZXMqIGJ1 ZmZlciB3aGljaCBsb2dzIGVjaG8tYXJlYSBtZXNzYWdlcy4KZiBGVU5DVElPTiAgRGlzcGxheSBk b2N1bWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gZnVuY3Rpb24uCkYgQ09NTUFORCAgIFNob3cgdGhl IEVtYWNzIG1hbnVhbCdzIHNlY3Rpb24gdGhhdCBkZXNjcmliZXMgdGhlIGNvbW1hbmQuCmcgICAg ICAgICAgIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEdOVSBwcm9qZWN0LgpoICAgICAg ICAgICBEaXNwbGF5IHRoZSBIRUxMTyBmaWxlIHdoaWNoIGlsbHVzdHJhdGVzIHZhcmlvdXMgc2Ny aXB0cy4KaSAgICAgICAgICAgU3RhcnQgdGhlIEluZm8gZG9jdW1lbnRhdGlvbiByZWFkZXI6IHJl YWQgaW5jbHVkZWQgbWFudWFscy4KSSBNRVRIT0QgICAgRGVzY3JpYmUgYSBzcGVjaWZpYyBpbnB1 dCBtZXRob2QsIG9yIFJFVCBmb3IgY3VycmVudC4KayBLRVlTICAgICAgRGlzcGxheSB0aGUgZnVs bCBkb2N1bWVudGF0aW9uIGZvciB0aGUga2V5IHNlcXVlbmNlLgpLIEtFWVMgICAgICBTaG93IHRo ZSBFbWFjcyBtYW51YWwncyBzZWN0aW9uIGZvciB0aGUgY29tbWFuZCBib3VuZCB0byBLRVlTLgps ICAgICAgICAgICBTaG93IGxhc3QgMzAwIGlucHV0IGtleXN0cm9rZXMgKGxvc3NhZ2UpLgpMIExB TkctRU5WICBEZXNjcmliZXMgYSBzcGVjaWZpYyBsYW5ndWFnZSBlbnZpcm9ubWVudCwgb3IgUkVU IGZvciBjdXJyZW50LgptICAgICAgICAgICBEaXNwbGF5IGRvY3VtZW50YXRpb24gb2YgY3VycmVu dCBtaW5vciBtb2RlcyBhbmQgY3VycmVudCBtYWpvciBtb2RlLAogICAgICAgICAgICAgIGluY2x1 ZGluZyB0aGVpciBzcGVjaWFsIGNvbW1hbmRzLgpuICAgICAgICAgICBEaXNwbGF5IG5ld3Mgb2Yg cmVjZW50IEVtYWNzIGNoYW5nZXMuCm8gU1lNQk9MICAgIERpc3BsYXkgdGhlIGdpdmVuIGZ1bmN0 aW9uIG9yIHZhcmlhYmxlJ3MgZG9jdW1lbnRhdGlvbiBhbmQgdmFsdWUuCnAgVE9QSUMgICAgIEZp bmQgcGFja2FnZXMgbWF0Y2hpbmcgYSBnaXZlbiB0b3BpYyBrZXl3b3JkLgpQIFBBQ0tBR0UgICBE ZXNjcmliZSB0aGUgZ2l2ZW4gRW1hY3MgTGlzcCBwYWNrYWdlLgpyICAgICAgICAgICBEaXNwbGF5 IHRoZSBFbWFjcyBtYW51YWwgaW4gSW5mbyBtb2RlLgpzICAgICAgICAgICBEaXNwbGF5IGNvbnRl bnRzIG9mIGN1cnJlbnQgc3ludGF4IHRhYmxlLCBwbHVzIGV4cGxhbmF0aW9ucy4KUyBTWU1CT0wg ICAgU2hvdyB0aGUgc2VjdGlvbiBmb3IgdGhlIGdpdmVuIHN5bWJvbCBpbiB0aGUgSW5mbyBtYW51 YWwKICAgICAgICAgICAgICBmb3IgdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIHVzZWQgaW4gdGhp cyBidWZmZXIuCnQgICAgICAgICAgIFN0YXJ0IHRoZSBFbWFjcyBsZWFybi1ieS1kb2luZyB0dXRv cmlhbC4KdiBWQVJJQUJMRSAgRGlzcGxheSB0aGUgZ2l2ZW4gdmFyaWFibGUncyBkb2N1bWVudGF0 aW9uIGFuZCB2YWx1ZS4KdyBDT01NQU5EICAgRGlzcGxheSB3aGljaCBrZXlzdHJva2VzIGludm9r ZSB0aGUgZ2l2ZW4gY29tbWFuZCAod2hlcmUtaXMpLgouICAgICAgICAgICBEaXNwbGF5IGFueSBh dmFpbGFibGUgbG9jYWwgaGVscCBhdCBwb2ludCBpbiB0aGUgZWNobyBhcmVhLgoKQy1hICAgICAg ICAgSW5mb3JtYXRpb24gYWJvdXQgRW1hY3MuCkMtYyAgICAgICAgIEVtYWNzIGNvcHlpbmcgcGVy bWlzc2lvbiAoR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgpDLWQgICAgICAgICBJbnN0cnVj dGlvbnMgZm9yIGRlYnVnZ2luZyBHTlUgRW1hY3MuCkMtZSAgICAgICAgIEV4dGVybmFsIHBhY2th Z2VzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBFbWFjcy4KQy1mICAgICAgICAgRW1hY3MgRkFRLgpD LW0gICAgICAgICBIb3cgdG8gb3JkZXIgcHJpbnRlZCBFbWFjcyBtYW51YWxzLgpDLW4gICAgICAg ICBOZXdzIG9mIHJlY2VudCBFbWFjcyBjaGFuZ2VzLgpDLW8gICAgICAgICBFbWFjcyBvcmRlcmlu ZyBhbmQgZGlzdHJpYnV0aW9uIGluZm9ybWF0aW9uLgpDLXAgICAgICAgICBJbmZvIGFib3V0IGtu b3duIEVtYWNzIHByb2JsZW1zLgpDLXQgICAgICAgICBFbWFjcyBUT0RPIGxpc3QuCkMtdyAgICAg ICAgIEluZm9ybWF0aW9uIG9uIGFic2VuY2Ugb2Ygd2FycmFudHkgZm9yIEdOVSBFbWFjcy4iCiAg aGVscC1tYXApCgoMCgooZGVmdW4gZnVuY3Rpb24tY2FsbGVkLWF0LXBvaW50ICgpCiAgIlJldHVy biBhIGZ1bmN0aW9uIGFyb3VuZCBwb2ludCBvciBlbHNlIGNhbGxlZCBieSB0aGUgbGlzdCBjb250 YWluaW5nIHBvaW50LgpJZiB0aGF0IGRvZXNuJ3QgZ2l2ZSBhIGZ1bmN0aW9uLCByZXR1cm4gbmls LiIKICAod2l0aC1zeW50YXgtdGFibGUgZW1hY3MtbGlzcC1tb2RlLXN5bnRheC10YWJsZQogICAg KG9yIChjb25kaXRpb24tY2FzZSAoKQogICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgICAgICAob3IgKG5vdCAoemVyb3AgKHNraXAtc3ludGF4LWJhY2t3YXJkICJfdyIpKSkKICAg ICAgICAgICAgICAgICAgKGVxIChjaGFyLXN5bnRheCAoZm9sbG93aW5nLWNoYXIpKSA/dykKICAg ICAgICAgICAgICAgICAgKGVxIChjaGFyLXN5bnRheCAoZm9sbG93aW5nLWNoYXIpKSA/XykKICAg ICAgICAgICAgICAgICAgKGZvcndhcmQtc2V4cCAtMSkpCiAgICAgICAgICAgICAgKHNraXAtY2hh cnMtZm9yd2FyZCAiJyIpCiAgICAgICAgICAgICAgKGxldCAoKG9iaiAocmVhZCAoY3VycmVudC1i dWZmZXIpKSkpCiAgICAgICAgICAgICAgICAoYW5kIChzeW1ib2xwIG9iaikgKGZib3VuZHAgb2Jq KSBvYmopKSkKICAgICAgICAgIChlcnJvciBuaWwpKQogICAgICAgIChjb25kaXRpb24tY2FzZSAo KQogICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAoc2F2ZS1yZXN0cmlj dGlvbgogICAgICAgICAgICAgICAgKG5hcnJvdy10by1yZWdpb24gKG1heCAocG9pbnQtbWluKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAocG9pbnQpIDEwMDApKSAo cG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgIDs7IE1vdmUgdXAgdG8gc3Vycm91bmRpbmcgcGFy ZW4sIHRoZW4gYWZ0ZXIgdGhlIG9wZW4uCiAgICAgICAgICAgICAgICAoYmFja3dhcmQtdXAtbGlz dCAxKQogICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAxKQogICAgICAgICAgICAgICAgOzsg SWYgdGhlcmUgaXMgc3BhY2UgaGVyZSwgdGhpcyBpcyBwcm9iYWJseSBzb21ldGhpbmcKICAgICAg ICAgICAgICAgIDs7IG90aGVyIHRoYW4gYSByZWFsIExpc3AgZnVuY3Rpb24gY2FsbCwgc28gaWdu b3JlIGl0LgogICAgICAgICAgICAgICAgKGlmIChsb29raW5nLWF0ICJbIFx0XSIpCiAgICAgICAg ICAgICAgICAgICAgKGVycm9yICJQcm9iYWJseSBub3QgYSBMaXNwIGZ1bmN0aW9uIGNhbGwiKSkK ICAgICAgICAgICAgICAgIChsZXQgKChvYmogKHJlYWQgKGN1cnJlbnQtYnVmZmVyKSkpKQogICAg ICAgICAgICAgICAgICAoYW5kIChzeW1ib2xwIG9iaikgKGZib3VuZHAgb2JqKSBvYmopKSkpCiAg ICAgICAgICAoZXJyb3IgbmlsKSkKICAgICAgICAobGV0KiAoKHN0ciAoZmluZC10YWctZGVmYXVs dCkpCiAgICAgICAgICAgICAgIChzeW0gKGlmIHN0ciAoaW50ZXJuLXNvZnQgc3RyKSkpKQogICAg ICAgICAgKGlmIChhbmQgc3ltIChmYm91bmRwIHN5bSkpCiAgICAgICAgICAgICAgc3ltCiAgICAg ICAgICAgIChzYXZlLW1hdGNoLWRhdGEKICAgICAgICAgICAgICAod2hlbiAoYW5kIHN0ciAoc3Ry aW5nLW1hdGNoICJcXGBcXFcqXFwoLio/XFwpXFxXKlxcJyIgc3RyKSkKICAgICAgICAgICAgICAg IChzZXRxIHN5bSAoaW50ZXJuLXNvZnQgKG1hdGNoLXN0cmluZyAxIHN0cikpKQogICAgICAgICAg ICAgICAgKGFuZCAoZmJvdW5kcCBzeW0pIHN5bSkpKSkpKSkpCgoMCjs7OyBgVXNlcicgaGVscCBm dW5jdGlvbnMKCihkZWZ1biB2aWV3LWhlbHAtZmlsZSAoZmlsZSAmb3B0aW9uYWwgZGlyKQogICh2 aWV3LWZpbGUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSAob3IgZGlyIGRhdGEtZGlyZWN0b3J5KSkp CiAgKGdvdG8tYWRkcmVzcy1tb2RlIDEpCiAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkpCgooZGVm dW4gZGVzY3JpYmUtZGlzdHJpYnV0aW9uICgpCiAgIkRpc3BsYXkgaW5mbyBvbiBob3cgdG8gb2J0 YWluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBHTlUgRW1hY3MuIgogIChpbnRlcmFjdGl2ZSkKICAo dmlldy1oZWxwLWZpbGUgIkRJU1RSSUIiKSkKCihkZWZ1biBkZXNjcmliZS1jb3B5aW5nICgpCiAg IkRpc3BsYXkgaW5mbyBvbiBob3cgeW91IG1heSByZWRpc3RyaWJ1dGUgY29waWVzIG9mIEdOVSBF bWFjcy4iCiAgKGludGVyYWN0aXZlKQogICh2aWV3LWhlbHAtZmlsZSAiQ09QWUlORyIpKQoKOzsg TWF5YmUgdGhpcyBjb21tYW5kIHNob3VsZCBqdXN0IGJlIHJlbW92ZWQuCihkZWZ1biBkZXNjcmli ZS1nbnUtcHJvamVjdCAoKQogICJCcm93c2Ugb25saW5lIGluZm9ybWF0aW9uIG9uIHRoZSBHTlUg cHJvamVjdC4iCiAgKGludGVyYWN0aXZlKQogIChicm93c2UtdXJsICJodHRwczovL3d3dy5nbnUu b3JnL2dudS90aGVnbnVwcm9qZWN0Lmh0bWwiKSkKCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24t YWxpYXMgJ2Rlc2NyaWJlLXByb2plY3QgJ2Rlc2NyaWJlLWdudS1wcm9qZWN0ICIyMi4yIikKCihk ZWZ1biBkZXNjcmliZS1uby13YXJyYW50eSAoKQogICJEaXNwbGF5IGluZm8gb24gYWxsIHRoZSBr aW5kcyBvZiB3YXJyYW50eSBFbWFjcyBkb2VzIE5PVCBoYXZlLiIKICAoaW50ZXJhY3RpdmUpCiAg KGRlc2NyaWJlLWNvcHlpbmcpCiAgKGxldCAoY2FzZS1mb2xkLXNlYXJjaCkKICAgIChzZWFyY2gt Zm9yd2FyZCAiRGlzY2xhaW1lciBvZiBXYXJyYW50eSIpCiAgICAoZm9yd2FyZC1saW5lIDApCiAg ICAocmVjZW50ZXIgMCkpKQoKKGRlZnVuIGRlc2NyaWJlLXByZWZpeC1iaW5kaW5ncyAoKQogICJE ZXNjcmliZSB0aGUgYmluZGluZ3Mgb2YgdGhlIHByZWZpeCB1c2VkIHRvIHJlYWNoIHRoaXMgY29t bWFuZC4KVGhlIHByZWZpeCBkZXNjcmliZWQgY29uc2lzdHMgb2YgYWxsIGJ1dCB0aGUgbGFzdCBl dmVudApvZiB0aGUga2V5IHNlcXVlbmNlIHRoYXQgcmFuIHRoaXMgY29tbWFuZC4iCiAgKGludGVy YWN0aXZlKQogIChsZXQgKChrZXkgKHRoaXMtY29tbWFuZC1rZXlzKSkpCiAgICAoZGVzY3JpYmUt YmluZGluZ3MKICAgICAoaWYgKHN0cmluZ3Aga2V5KQoJIChzdWJzdHJpbmcga2V5IDAgKDEtIChs ZW5ndGgga2V5KSkpCiAgICAgICAobGV0ICgocHJlZml4IChtYWtlLXZlY3RvciAoMS0gKGxlbmd0 aCBrZXkpKSBuaWwpKQoJICAgICAoaSAwKSkKCSAod2hpbGUgKDwgaSAobGVuZ3RoIHByZWZpeCkp CgkgICAoYXNldCBwcmVmaXggaSAoYXJlZiBrZXkgaSkpCgkgICAoc2V0cSBpICgxKyBpKSkpCgkg cHJlZml4KSkpKSkKOzsgTWFrZSBDLWggYWZ0ZXIgYSBwcmVmaXgsIHdoZW4gbm90IHNwZWNpZmlj YWxseSBib3VuZCwKOzsgcnVuIGRlc2NyaWJlLXByZWZpeC1iaW5kaW5ncy4KKHNldHEgcHJlZml4 LWhlbHAtY29tbWFuZCAnZGVzY3JpYmUtcHJlZml4LWJpbmRpbmdzKQoKKGRlZnVuIHZpZXctZW1h Y3MtbmV3cyAoJm9wdGlvbmFsIHZlcnNpb24pCiAgIkRpc3BsYXkgaW5mbyBvbiByZWNlbnQgY2hh bmdlcyB0byBFbWFjcy4KV2l0aCBhcmd1bWVudCwgZGlzcGxheSBpbmZvIG9ubHkgZm9yIHRoZSBz ZWxlY3RlZCB2ZXJzaW9uLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogICh1bmxlc3MgdmVyc2lvbgog ICAgKHNldHEgdmVyc2lvbiBlbWFjcy1tYWpvci12ZXJzaW9uKSkKICAod2hlbiAoY29uc3AgdmVy c2lvbikKICAgIChsZXQqICgoYWxsLXZlcnNpb25zCgkgICAgKGxldCAocmVzKQoJICAgICAgKG1h cGMKCSAgICAgICAobGFtYmRhIChmaWxlKQoJCSAod2l0aC10ZW1wLWJ1ZmZlcgoJCSAgIChpbnNl cnQtZmlsZS1jb250ZW50cwoJCSAgICAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlIGRhdGEtZGlyZWN0 b3J5KSkKCQkgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkCgkJCSAgIChpZiAobWVtYmVyIGZp bGUgJygiTkVXUy4xOCIgIk5FV1MuMS0xNyIpKQoJCQkgICAgICAgIkNoYW5nZXMgaW4gXFwoPzpF bWFjc1xcfHZlcnNpb25cXCk/WyBcdF0qXFwoWzAtOV0rXFwoPzpcXC5bMC05XStcXCk/XFwpIgoJ CQkgICAgICJeXFwqIFteMC05XG5dKlxcKFswLTldK1xcLlswLTldK1xcKSIpIG5pbCB0KQoJCSAg ICAgKHNldHEgcmVzIChjb25zIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSByZXMpKSkp KQoJICAgICAgIChjb25zICJORVdTIgoJCSAgICAgKGRpcmVjdG9yeS1maWxlcyBkYXRhLWRpcmVj dG9yeSBuaWwKCQkJCSAgICAgICJeTkVXU1xcLlswLTldWy0wLTldKiQiIG5pbCkpKQoJICAgICAg KHNvcnQgKGRlbGV0ZS1kdXBzIHJlcykgIydzdHJpbmc+KSkpCgkgICAoY3VycmVudCAoY2FyIGFs bC12ZXJzaW9ucykpKQogICAgICAoc2V0cSB2ZXJzaW9uIChjb21wbGV0aW5nLXJlYWQKCQkgICAg IChmb3JtYXQgIlJlYWQgTkVXUyBmb3IgdGhlIHZlcnNpb24gKGRlZmF1bHQgJXMpOiAiIGN1cnJl bnQpCgkJICAgICBhbGwtdmVyc2lvbnMgbmlsIG5pbCBuaWwgbmlsIGN1cnJlbnQpKQogICAgICAo aWYgKGludGVnZXJwIChzdHJpbmctdG8tbnVtYmVyIHZlcnNpb24pKQoJICAoc2V0cSB2ZXJzaW9u IChzdHJpbmctdG8tbnVtYmVyIHZlcnNpb24pKQoJKHVubGVzcyAob3IgKG1lbWJlciB2ZXJzaW9u IGFsbC12ZXJzaW9ucykKCQkgICAgKDw9IChzdHJpbmctdG8tbnVtYmVyIHZlcnNpb24pIChzdHJp bmctdG8tbnVtYmVyIGN1cnJlbnQpKSkKCSAgKGVycm9yICJObyBuZXdzIGFib3V0IHZlcnNpb24g JXMiIHZlcnNpb24pKSkpKQogICh3aGVuIChpbnRlZ2VycCB2ZXJzaW9uKQogICAgKGNvbmQgKCg8 PSB2ZXJzaW9uIDEyKQoJICAgKHNldHEgdmVyc2lvbiAoZm9ybWF0ICIxLiVkIiB2ZXJzaW9uKSkp CgkgICgoPD0gdmVyc2lvbiAxOCkKCSAgIChzZXRxIHZlcnNpb24gKGZvcm1hdCAiJWQiIHZlcnNp b24pKSkKCSAgKCg+IHZlcnNpb24gZW1hY3MtbWFqb3ItdmVyc2lvbikKCSAgIChlcnJvciAiTm8g bmV3cyBhYm91dCBFbWFjcyAlZCAoeWV0KSIgdmVyc2lvbikpKSkKICAobGV0KiAoKHZuIChpZiAo c3RyaW5ncCB2ZXJzaW9uKQoJCSAoc3RyaW5nLXRvLW51bWJlciB2ZXJzaW9uKQoJICAgICAgIHZl cnNpb24pKQoJIChmaWxlIChjb25kCgkJKCg+PSB2biBlbWFjcy1tYWpvci12ZXJzaW9uKSAiTkVX UyIpCgkJKCg8IHZuIDE4KSAiTkVXUy4xLTE3IikKCQkodCAoZm9ybWF0ICJORVdTLiVkIiB2bikp KSkKCSByZXMpCiAgICAodmlldy1maWxlIChleHBhbmQtZmlsZS1uYW1lIGZpbGUgZGF0YS1kaXJl Y3RvcnkpKQogICAgKHdpZGVuKQogICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICh3aGVu IChzdHJpbmdwIHZlcnNpb24pCiAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZAoJICAgICAo Y29uY2F0IChpZiAoPCB2biAxOSkKCQkJICJDaGFuZ2VzIGluIEVtYWNzWyBcdF0qIgoJCSAgICAg ICAiXlxcKiBbXjAtOVxuXSoiKSB2ZXJzaW9uICIkIikKCSAgICAgbmlsIHQpCgkoYmVnaW5uaW5n LW9mLWxpbmUpCgkobmFycm93LXRvLXJlZ2lvbgoJIChwb2ludCkKCSAoc2F2ZS1leGN1cnNpb24K CSAgICh3aGlsZSAoYW5kIChzZXRxIHJlcwoJCQkgICAgIChyZS1zZWFyY2gtZm9yd2FyZAoJCQkg ICAgICAoaWYgKDwgdm4gMTkpCgkJCQkgICJDaGFuZ2VzIGluIFxcKD86RW1hY3NcXHx2ZXJzaW9u XFwpP1sgXHRdKlxcKFswLTldK1xcKD86XFwuWzAtOV0rXFwpP1xcKSIKCQkJCSJeXFwqIFteMC05 XG5dKlxcKFswLTldK1xcLlswLTldK1xcKSIpIG5pbCB0KSkKCQkgICAgICAgKGVxdWFsIChtYXRj aC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSB2ZXJzaW9uKSkpCgkgICAob3IgcmVzIChnb3RvLWNo YXIgKHBvaW50LW1heCkpKQoJICAgKGJlZ2lubmluZy1vZi1saW5lKQoJICAgKHBvaW50KSkpKSkp KQoKKGRlZnVuIHZpZXctZW1hY3MtdG9kbyAoJm9wdGlvbmFsIF9hcmcpCiAgIkRpc3BsYXkgdGhl IEVtYWNzIFRPRE8gbGlzdC4iCiAgKGludGVyYWN0aXZlICJQIikKICAodmlldy1oZWxwLWZpbGUg IlRPRE8iKSkKCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rpb24tYWxpYXMgJ3ZpZXctdG9kbyAndmll dy1lbWFjcy10b2RvICIyMi4yIikKCgooZGVmdW4gdmlldy1lY2hvLWFyZWEtbWVzc2FnZXMgKCkK ICAiVmlldyB0aGUgbG9nIG9mIHJlY2VudCBlY2hvLWFyZWEgbWVzc2FnZXM6IHRoZSBgKk1lc3Nh Z2VzKicgYnVmZmVyLgpUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHJldGFpbmVkIGluIHRoYXQgYnVm ZmVyCmlzIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUgYG1lc3NhZ2UtbG9nLW1heCcuIgogIChp bnRlcmFjdGl2ZSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAobWVzc2FnZXMtYnVmZmVyKQogICAg KGdvdG8tY2hhciAocG9pbnQtbWF4KSkKICAgIChkaXNwbGF5LWJ1ZmZlciAoY3VycmVudC1idWZm ZXIpKSkpCgooZGVmdW4gdmlldy1vcmRlci1tYW51YWxzICgpCiAgIkRpc3BsYXkgaW5mb3JtYXRp b24gb24gaG93IHRvIGJ1eSBwcmludGVkIGNvcGllcyBvZiBFbWFjcyBtYW51YWxzLiIKICAoaW50 ZXJhY3RpdmUpCjs7ICAodmlldy1oZWxwLWZpbGUgIk9SREVSUyIpCiAgKGluZm8gIihlbWFjcylQ cmludGVkIEJvb2tzIikpCgooZGVmdW4gdmlldy1lbWFjcy1GQVEgKCkKICAiRGlzcGxheSB0aGUg RW1hY3MgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUSkgZmlsZS4iCiAgKGludGVyYWN0 aXZlKQogIDs7IChmaW5kLWZpbGUtcmVhZC1vbmx5IChleHBhbmQtZmlsZS1uYW1lICJGQVEiIGRh dGEtZGlyZWN0b3J5KSkKICAoaW5mbyAiKGVmYXEpIikpCgooZGVmdW4gdmlldy1lbWFjcy1wcm9i bGVtcyAoKQogICJEaXNwbGF5IGluZm8gb24ga25vd24gcHJvYmxlbXMgd2l0aCBFbWFjcyBhbmQg cG9zc2libGUgd29ya2Fyb3VuZHMuIgogIChpbnRlcmFjdGl2ZSkKICAodmlldy1oZWxwLWZpbGUg IlBST0JMRU1TIikpCgooZGVmdW4gdmlldy1lbWFjcy1kZWJ1Z2dpbmcgKCkKICAiRGlzcGxheSBp bmZvIG9uIGhvdyB0byBkZWJ1ZyBFbWFjcyBwcm9ibGVtcy4iCiAgKGludGVyYWN0aXZlKQogICh2 aWV3LWhlbHAtZmlsZSAiREVCVUciKSkKCjs7IFRoaXMgdXNlZCB0byB2aXNpdCBNT1JFLlNUVUZG OyBtYXliZSBpdCBzaG91bGQganVzdCBiZSByZW1vdmVkLgooZGVmdW4gdmlldy1leHRlcm5hbC1w YWNrYWdlcyAoKQogICJEaXNwbGF5IGluZm8gb24gd2hlcmUgdG8gZ2V0IG1vcmUgRW1hY3MgcGFj a2FnZXMuIgogIChpbnRlcmFjdGl2ZSkKICAoaW5mbyAiKGVmYXEpUGFja2FnZXMgdGhhdCBkbyBu b3QgY29tZSB3aXRoIEVtYWNzIikpCgooZGVmdW4gdmlldy1sb3NzYWdlICgpCiAgIkRpc3BsYXkg bGFzdCBmZXcgaW5wdXQga2V5c3Ryb2tlcyBhbmQgdGhlIGNvbW1hbmRzIHJ1bi4KRm9yIGNvbnZl bmllbmNlIHRoaXMgdXNlcyB0aGUgc2FtZSBmb3JtYXQgYXMKYGVkaXQtbGFzdC1rYmQtbWFjcm8n LgoKVG8gcmVjb3JkIGFsbCB5b3VyIGlucHV0LCB1c2UgYG9wZW4tZHJpYmJsZS1maWxlJy4iCiAg KGludGVyYWN0aXZlKQogIChoZWxwLXNldHVwLXhyZWYgKGxpc3QgIyd2aWV3LWxvc3NhZ2UpCgkJ ICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVyYWN0aXZlKSkKICAod2l0aC1oZWxwLXdp bmRvdyAoaGVscC1idWZmZXIpCiAgICAocHJpbmMgIiAiKQogICAgKHByaW5jIChtYXBjb25jYXQg KGxhbWJkYSAoa2V5KQoJCQkoY29uZAoJCQkgKChhbmQgKGNvbnNwIGtleSkgKG51bGwgKGNhciBr ZXkpKSkKCQkJICAoZm9ybWF0ICI7OyAlc1xuIiAoaWYgKHN5bWJvbHAgKGNkciBrZXkpKSAoY2Ry IGtleSkKCQkJCQkgICAgICAiYW5vbnltb3VzLWNvbW1hbmQiKSkpCgkJCSAoKG9yIChpbnRlZ2Vy cCBrZXkpIChzeW1ib2xwIGtleSkgKGxpc3RwIGtleSkpCgkJCSAgKHNpbmdsZS1rZXktZGVzY3Jp cHRpb24ga2V5KSkKCQkJICh0CgkJCSAgKHByaW4xLXRvLXN0cmluZyBrZXkgbmlsKSkpKQoJCSAg ICAgIChyZWNlbnQta2V5cyAnaW5jbHVkZS1jbWRzKQoJCSAgICAgICIgIikpCiAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWlu KSkKICAgICAgKGxldCAoKGNvbW1lbnQtc3RhcnQgIjs7ICIpCiAgICAgICAgICAgIChjb21tZW50 LWNvbHVtbiAyNCkpCiAgICAgICAgKHdoaWxlIChub3QgKGVvYnApKQogICAgICAgICAgKGNvbW1l bnQtaW5kZW50KQoJICAoZm9yd2FyZC1saW5lIDEpKSkKICAgICAgOzsgamlkYW5uaSB3YW50cyB0 byBzZWUgdGhlIGxhc3Qga2V5c3Ryb2tlcyBpbW1lZGlhdGVseS4KICAgICAgKHNldC1tYXJrZXIg aGVscC13aW5kb3ctcG9pbnQtbWFya2VyIChwb2ludCkpKSkpCgoMCjs7IEtleSBiaW5kaW5ncwoK KGRlZnVuIGRlc2NyaWJlLWJpbmRpbmdzICgmb3B0aW9uYWwgcHJlZml4IGJ1ZmZlcikKICAiRGlz cGxheSBhIGJ1ZmZlciBzaG93aW5nIGEgbGlzdCBvZiBhbGwgZGVmaW5lZCBrZXlzLCBhbmQgdGhl aXIgZGVmaW5pdGlvbnMuClRoZSBrZXlzIGFyZSBkaXNwbGF5ZWQgaW4gb3JkZXIgb2YgcHJlY2Vk ZW5jZS4KClRoZSBvcHRpb25hbCBhcmd1bWVudCBQUkVGSVgsIGlmIG5vbi1uaWwsIHNob3VsZCBi ZSBhIGtleSBzZXF1ZW5jZTsKdGhlbiB3ZSBkaXNwbGF5IG9ubHkgYmluZGluZ3MgdGhhdCBzdGFy dCB3aXRoIHRoYXQgcHJlZml4LgpUaGUgb3B0aW9uYWwgYXJndW1lbnQgQlVGRkVSIHNwZWNpZmll cyB3aGljaCBidWZmZXIncyBiaW5kaW5ncwp0byBkaXNwbGF5IChkZWZhdWx0LCB0aGUgY3VycmVu dCBidWZmZXIpLiAgQlVGRkVSIGNhbiBiZSBhIGJ1ZmZlcgpvciBhIGJ1ZmZlciBuYW1lLiIKICAo aW50ZXJhY3RpdmUpCiAgKG9yIGJ1ZmZlciAoc2V0cSBidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkp CiAgKGhlbHAtc2V0dXAteHJlZiAobGlzdCAjJ2Rlc2NyaWJlLWJpbmRpbmdzIHByZWZpeCBidWZm ZXIpCgkJICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVyYWN0aXZlKSkKICAod2l0aC1o ZWxwLXdpbmRvdyAoaGVscC1idWZmZXIpCiAgICA7OyBCZSBhd2FyZSB0aGF0IGBkZXNjcmliZS1i dWZmZXItYmluZGluZ3MnIHB1dHMgaXRzIG91dHB1dCBpbnRvCiAgICA7OyB0aGUgY3VycmVudCBi dWZmZXIuCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoaGVscC1idWZmZXIpCiAgICAgIChkZXNj cmliZS1idWZmZXItYmluZGluZ3MgYnVmZmVyIHByZWZpeCkpKSkKCjs7IFRoaXMgZnVuY3Rpb24g dXNlZCB0byBiZSBpbiBrZXltYXAuYy4KKGRlZnVuIGRlc2NyaWJlLWJpbmRpbmdzLWludGVybmFs ICgmb3B0aW9uYWwgbWVudXMgcHJlZml4KQogICJTaG93IGEgbGlzdCBvZiBhbGwgZGVmaW5lZCBr ZXlzLCBhbmQgdGhlaXIgZGVmaW5pdGlvbnMuCldlIHB1dCB0aGF0IGxpc3QgaW4gYSBidWZmZXIs IGFuZCBkaXNwbGF5IHRoZSBidWZmZXIuCgpUaGUgb3B0aW9uYWwgYXJndW1lbnQgTUVOVVMsIGlm IG5vbi1uaWwsIHNheXMgdG8gbWVudGlvbiBtZW51IGJpbmRpbmdzLgpcKE9yZGluYXJpbHkgdGhl c2UgYXJlIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0LikKVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFBS RUZJWCwgaWYgbm9uLW5pbCwgc2hvdWxkIGJlIGEga2V5IHNlcXVlbmNlOwp0aGVuIHdlIGRpc3Bs YXkgb25seSBiaW5kaW5ncyB0aGF0IHN0YXJ0IHdpdGggdGhhdCBwcmVmaXguIgogIChkZWNsYXJl IChvYnNvbGV0ZSBkZXNjcmliZS1idWZmZXItYmluZGluZ3MgIjI0LjQiKSkKICAobGV0ICgoYnVm IChjdXJyZW50LWJ1ZmZlcikpKQogICAgKHdpdGgtaGVscC13aW5kb3cgKGhlbHAtYnVmZmVyKQog ICAgICA7OyBCZSBhd2FyZSB0aGF0IGBkZXNjcmliZS1idWZmZXItYmluZGluZ3MnIHB1dHMgaXRz IG91dHB1dCBpbnRvCiAgICAgIDs7IHRoZSBjdXJyZW50IGJ1ZmZlci4KICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgKGhlbHAtYnVmZmVyKQoJKGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncyBidWYg cHJlZml4IG1lbnVzKSkpKSkKCihkZWZ1biB3aGVyZS1pcyAoZGVmaW5pdGlvbiAmb3B0aW9uYWwg aW5zZXJ0KQogICJQcmludCBtZXNzYWdlIGxpc3Rpbmcga2V5IHNlcXVlbmNlcyB0aGF0IGludm9r ZSB0aGUgY29tbWFuZCBERUZJTklUSU9OLgpBcmd1bWVudCBpcyBhIGNvbW1hbmQgZGVmaW5pdGlv biwgdXN1YWxseSBhIHN5bWJvbCB3aXRoIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4KSWYgSU5TRVJU ICh0aGUgcHJlZml4IGFyZykgaXMgbm9uLW5pbCwgaW5zZXJ0IHRoZSBtZXNzYWdlIGluIHRoZSBi dWZmZXIuIgogIChpbnRlcmFjdGl2ZQogICAobGV0ICgoZm4gKGZ1bmN0aW9uLWNhbGxlZC1hdC1w b2ludCkpCgkgKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkKCSB2YWwpCiAgICAgKHNl dHEgdmFsIChjb21wbGV0aW5nLXJlYWQKCQkoaWYgZm4KCQkgICAgKGZvcm1hdCAiV2hlcmUgaXMg Y29tbWFuZCAoZGVmYXVsdCAlcyk6ICIgZm4pCgkJICAiV2hlcmUgaXMgY29tbWFuZDogIikKCQlv YmFycmF5ICdjb21tYW5kcCB0IG5pbCBuaWwKCQkoYW5kIGZuIChzeW1ib2wtbmFtZSBmbikpKSkK ICAgICAobGlzdCAodW5sZXNzIChlcXVhbCB2YWwgIiIpIChpbnRlcm4gdmFsKSkKCSAgIGN1cnJl bnQtcHJlZml4LWFyZykpKQogICh1bmxlc3MgZGVmaW5pdGlvbiAoZXJyb3IgIk5vIGNvbW1hbmQi KSkKICAobGV0ICgoZnVuYyAoaW5kaXJlY3QtZnVuY3Rpb24gZGVmaW5pdGlvbikpCiAgICAgICAg KGRlZnMgbmlsKQogICAgICAgIChzdGFuZGFyZC1vdXRwdXQgKGlmIGluc2VydCAoY3VycmVudC1i dWZmZXIpIHN0YW5kYXJkLW91dHB1dCkpKQogICAgOzsgSW4gREVGUywgZmluZCBhbGwgc3ltYm9s cyB0aGF0IGFyZSBhbGlhc2VzIGZvciBERUZJTklUSU9OLgogICAgKG1hcGF0b21zIChsYW1iZGEg KHN5bWJvbCkKCQkoYW5kIChmYm91bmRwIHN5bWJvbCkKCQkgICAgIChub3QgKGVxIHN5bWJvbCBk ZWZpbml0aW9uKSkKCQkgICAgIChlcSBmdW5jIChjb25kaXRpb24tY2FzZSAoKQoJCQkJICAoaW5k aXJlY3QtZnVuY3Rpb24gc3ltYm9sKQoJCQkJKGVycm9yIHN5bWJvbCkpKQoJCSAgICAgKHB1c2gg c3ltYm9sIGRlZnMpKSkpCiAgICA7OyBMb29rIGF0IGFsbCB0aGUgc3ltYm9scy0tZmlyc3QgREVG SU5JVElPTiwKICAgIDs7IHRoZW4gaXRzIGFsaWFzZXMuCiAgICAoZG9saXN0IChzeW1ib2wgKGNv bnMgZGVmaW5pdGlvbiBkZWZzKSkKICAgICAgKGxldCogKChyZW1hcHBlZCAoY29tbWFuZC1yZW1h cHBpbmcgc3ltYm9sKSkKCSAgICAgKGtleXMgKHdoZXJlLWlzLWludGVybmFsCgkJICAgIHN5bWJv bCBvdmVycmlkaW5nLWxvY2FsLW1hcCBuaWwgbmlsIHJlbWFwcGVkKSkKCSAgICAgKGtleXMgKG1h cGNvbmNhdCAna2V5LWRlc2NyaXB0aW9uIGtleXMgIiwgIikpCgkgICAgIHN0cmluZykKCShzZXRx IHN0cmluZwoJICAgICAgKGlmIGluc2VydAoJCSAgKGlmICg+IChsZW5ndGgga2V5cykgMCkKCQkg ICAgICAoaWYgcmVtYXBwZWQKCQkJICAoZm9ybWF0ICIlcyAoJXMpIChyZW1hcHBlZCBmcm9tICVz KSIKCQkJCSAga2V5cyByZW1hcHBlZCBzeW1ib2wpCgkJCShmb3JtYXQgIiVzICglcykiIGtleXMg c3ltYm9sKSkKCQkgICAgKGZvcm1hdCAiTS14ICVzIFJFVCIgc3ltYm9sKSkKCQkoaWYgKD4gKGxl bmd0aCBrZXlzKSAwKQoJCSAgICAoaWYgcmVtYXBwZWQKCQkJKGZvcm1hdCAiJXMgaXMgcmVtYXBw ZWQgdG8gJXMgd2hpY2ggaXMgb24gJXMiCgkJCQlzeW1ib2wgcmVtYXBwZWQga2V5cykKCQkgICAg ICAoZm9ybWF0ICIlcyBpcyBvbiAlcyIgc3ltYm9sIGtleXMpKQoJCSAgOzsgSWYgdGhpcyBpcyB0 aGUgY29tbWFuZCB0aGUgdXNlciBhc2tlZCBhYm91dCwKCQkgIDs7IGFuZCBpdCBpcyBub3Qgb24g YW55IGtleSwgc2F5IHNvLgoJCSAgOzsgRm9yIG90aGVyIHN5bWJvbHMsIGl0cyBhbGlhc2VzLCBz YXkgbm90aGluZwoJCSAgOzsgYWJvdXQgdGhlbSB1bmxlc3MgdGhleSBhcmUgb24ga2V5cy4KCQkg IChpZiAoZXEgc3ltYm9sIGRlZmluaXRpb24pCgkJICAgICAgKGZvcm1hdCAiJXMgaXMgbm90IG9u IGFueSBrZXkiIHN5bWJvbCkpKSkpCgkod2hlbiBzdHJpbmcKCSAgKHVubGVzcyAoZXEgc3ltYm9s IGRlZmluaXRpb24pCgkgICAgKHByaW5jICI7XG4gaXRzIGFsaWFzICIpKQoJICAocHJpbmMgc3Ry aW5nKSkpKSkKICBuaWwpCgooZGVmdW4gaGVscC1rZXktZGVzY3JpcHRpb24gKGtleSB1bnRyYW5z bGF0ZWQpCiAgKGxldCAoKHN0cmluZyAoa2V5LWRlc2NyaXB0aW9uIGtleSkpKQogICAgKGlmIChv ciAobm90IHVudHJhbnNsYXRlZCkKCSAgICAoYW5kIChlcSAoYXJlZiB1bnRyYW5zbGF0ZWQgMCkg P1xlKSAobm90IChlcSAoYXJlZiBrZXkgMCkgP1xlKSkpKQoJc3RyaW5nCiAgICAgIChsZXQgKChv dGhlcnN0cmluZyAoa2V5LWRlc2NyaXB0aW9uIHVudHJhbnNsYXRlZCkpKQoJKGlmIChlcXVhbCBz dHJpbmcgb3RoZXJzdHJpbmcpCgkgICAgc3RyaW5nCgkgIChmb3JtYXQgIiVzICh0cmFuc2xhdGVk IGZyb20gJXMpIiBzdHJpbmcgb3RoZXJzdHJpbmcpKSkpKSkKCihkZWZ1biBoZWxwLS1iaW5kaW5n LXVuZGVmaW5lZC1wIChkZWZuKQogIChvciAobnVsbCBkZWZuKSAoaW50ZWdlcnAgZGVmbikgKGVx dWFsIGRlZm4gJ3VuZGVmaW5lZCkpKQoKKGRlZnVuIGhlbHAtLWFuYWx5emUta2V5IChrZXkgdW50 cmFuc2xhdGVkKQogICJHZXQgaW5mb3JtYXRpb24gYWJvdXQgS0VZIGl0cyBjb3JyZXNwb25kaW5n IFVOVFJBTlNMQVRFRCBldmVudHMuClJldHVybnMgYSBsaXN0IG9mIHRoZSBmb3JtIChCUklFRi1E RVNDIERFRk4gRVZFTlQgTU9VU0UtTVNHKS4iCiAgKGlmIChudW1iZXJwIHVudHJhbnNsYXRlZCkK ICAgICAgKGVycm9yICJNaXNzaW5nIGB1bnRyYW5zbGF0ZWQnISIpKQogIChsZXQqICgoZXZlbnQg KHdoZW4gKD4gKGxlbmd0aCBrZXkpIDApCiAgICAgICAgICAgICAgICAgIChhcmVmIGtleSAoaWYg KGFuZCAoc3ltYm9scCAoYXJlZiBrZXkgMCkpCgkJICAgICAgICAgICAgICAgICAgICAgKD4gKGxl bmd0aCBrZXkpIDEpCgkJICAgICAgICAgICAgICAgICAgICAgKGNvbnNwIChhcmVmIGtleSAxKSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgTG9vayBhdCB0aGUgc2Vjb25kIGV2 ZW50IHdoZW4gdGhlIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgaXMg YSBwc2V1ZG8tZXZlbnQgbGlrZSBgbW9kZS1saW5lJyBvcgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IGBsZWZ0LWZyaW5nZScuCgkJICAgICAgICAgICAgICAgIDEKCSAgICAgICAg ICAgICAgICAgICAgICAwKSkpKQoJIChtb2RpZmllcnMgKGV2ZW50LW1vZGlmaWVycyBldmVudCkp CgkgKG1vdXNlLW1zZyAoaWYgKG9yIChtZW1xICdjbGljayBtb2RpZmllcnMpIChtZW1xICdkb3du IG1vZGlmaWVycykKCQkJICAgIChtZW1xICdkcmFnIG1vZGlmaWVycykpCiAgICAgICAgICAgICAg ICAgICAgICAgICIgYXQgdGhhdCBzcG90IiAiIikpCgkgKGRlZm4gKGtleS1iaW5kaW5nIGtleSB0 KSkpCiAgICA7OyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZmFrZWQgYW4gZW50cnkgaW4gIlNl bGVjdCBhbmQgUGFzdGUiIG1lbnUuCiAgICAod2hlbiAoYW5kIChlcSBkZWZuIG5pbCkKCSAgICAg ICAoc3RyaW5ncCAoYXJlZiBrZXkgKDEtIChsZW5ndGgga2V5KSkpKQoJICAgICAgIChlcSAoa2V5 LWJpbmRpbmcgKHN1YnN0cmluZyBrZXkgMCAtMSkpICd5YW5rLW1lbnUpKQogICAgICAoc2V0cSBk ZWZuICdtZW51LWJhci1zZWxlY3QteWFuaykpCiAgICA7OyBEb24ndCBib3RoZXIgdXNlciB3aXRo IHN0cmluZ3MgZnJvbSAoZS5nLikgdGhlIHNlbGVjdC1wYXN0ZSBtZW51LgogICAgKHdoZW4gKHN0 cmluZ3AgKGFyZWYga2V5ICgxLSAobGVuZ3RoIGtleSkpKSkKICAgICAgKGFzZXQga2V5ICgxLSAo bGVuZ3RoIGtleSkpICIoYW55IHN0cmluZykiKSkKICAgICh3aGVuIChhbmQgdW50cmFuc2xhdGVk CiAgICAgICAgICAgICAgIChzdHJpbmdwIChhcmVmIHVudHJhbnNsYXRlZCAoMS0gKGxlbmd0aCB1 bnRyYW5zbGF0ZWQpKSkpKQogICAgICAoYXNldCB1bnRyYW5zbGF0ZWQgKDEtIChsZW5ndGggdW50 cmFuc2xhdGVkKSkgIihhbnkgc3RyaW5nKSIpKQogICAgKGxpc3QKICAgICA7OyBOb3cgZGVzY3Jp YmUgdGhlIGtleSwgcGVyaGFwcyBhcyBjaGFuZ2VkLgogICAgIChsZXQgKChrZXktZGVzYyAoaGVs cC1rZXktZGVzY3JpcHRpb24ga2V5IHVudHJhbnNsYXRlZCkpKQogICAgICAgKGlmIChoZWxwLS1i aW5kaW5nLXVuZGVmaW5lZC1wIGRlZm4pCiAgICAgICAgICAgKGZvcm1hdCAiJXMlcyBpcyB1bmRl ZmluZWQiIGtleS1kZXNjIG1vdXNlLW1zZykKICAgICAgICAgKGZvcm1hdCAiJXMlcyBydW5zIHRo ZSBjb21tYW5kICVTIiBrZXktZGVzYyBtb3VzZS1tc2cgZGVmbikpKQogICAgIGRlZm4gZXZlbnQg bW91c2UtbXNnKSkpCgooZGVmdW4gaGVscC0tZmlsdGVyLWluZm8tbGlzdCAoaW5mby1saXN0IGkp CiAgIkRyb3AgdGhlIHVuZGVmaW5lZCBrZXlzLiIKICAob3IKICAgOzsgUmVtb3ZlIGFsbCBgdW5k ZWZpbmVkJyBrZXlzLgogICAoZGVscSBuaWwgKG1hcGNhciAobGFtYmRhICh4KQogICAgICAgICAg ICAgICAgICAgICAgICh1bmxlc3MgKGhlbHAtLWJpbmRpbmctdW5kZWZpbmVkLXAgKG50aCBpIHgp KSB4KSkKICAgICAgICAgICAgICAgICAgICAgaW5mby1saXN0KSkKICAgOzsgSWYgbm90aGluZyBs ZWZ0LCB0aGVuIGtlZXAgb25lICh0aGUgbGFzdCBvbmUpLgogICAobGFzdCBpbmZvLWxpc3QpKSkK CihkZWZ1biBkZXNjcmliZS1rZXktYnJpZWZseSAoJm9wdGlvbmFsIGtleS1saXN0IGluc2VydCB1 bnRyYW5zbGF0ZWQpCiAgIlByaW50IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbnMgS0VZLUxJU1Qg aW52b2tlcy4KS0VZLUxJU1QgaXMgYSBsaXN0IG9mIHBhaXJzIChTRVEgLiBSQVctU0VRKSBvZiBr ZXkgc2VxdWVuY2VzLCB3aGVyZQpSQVctU0VRIGlzIHRoZSB1bnRyYW5zbGF0ZWQgZm9ybSBvZiB0 aGUga2V5IHNlcXVlbmNlIFNFUS4KSWYgSU5TRVJUICh0aGUgcHJlZml4IGFyZykgaXMgbm9uLW5p bCwgaW5zZXJ0IHRoZSBtZXNzYWdlIGluIHRoZSBidWZmZXIuCgpXaGlsZSByZWFkaW5nIEtFWS1M SVNUIGludGVyYWN0aXZlbHksIHRoaXMgY29tbWFuZCB0ZW1wb3JhcmlseSBlbmFibGVzCm1lbnUg aXRlbXMgb3IgdG9vbC1iYXIgYnV0dG9ucyB0aGF0IGFyZSBkaXNhYmxlZCB0byBhbGxvdyBnZXR0 aW5nIGhlbHAKb24gdGhlbS4iCiAgKGRlY2xhcmUgKGFkdmVydGlzZWQtY2FsbGluZy1jb252ZW50 aW9uIChrZXktbGlzdCAmb3B0aW9uYWwgaW5zZXJ0KSAiMjcuMSIpKQogIChpbnRlcmFjdGl2ZQog ICA7OyBJZ25vcmUgbW91c2UgbW92ZW1lbnQgZXZlbnRzIGJlY2F1c2UgaXQncyB0b28gZWFzeSB0 byBtaXNzIHRoZQogICA7OyBtZXNzYWdlIHdoaWxlIG1vdmluZyB0aGUgbW91c2UuCiAgIChsZXQg KChrZXktbGlzdCAoaGVscC0tcmVhZC1rZXktc2VxdWVuY2UgJ25vLW1vdXNlLW1vdmVtZW50KSkp CiAgICAgYCgsa2V5LWxpc3QgLGN1cnJlbnQtcHJlZml4LWFyZykpKQogICh3aGVuIChhcnJheXAg a2V5LWxpc3QpCiAgICA7OyBPbGQgY2FsbGluZyBjb252ZW50aW9uLCBjaGFuZ2VkCiAgICAoc2V0 cSBrZXktbGlzdCAobGlzdCAoY29ucyBrZXktbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGlmIChudW1iZXJwIHVudHJhbnNsYXRlZCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodGhpcy1zaW5nbGUtY29tbWFuZC1yYXcta2V5cykKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW50cmFuc2xhdGVkKSkpKSkKICAobGV0KiAoKGluZm8tbGlzdCAo bWFwY2FyIChsYW1iZGEgKGtyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVscC0t YW5hbHl6ZS1rZXkgKGNhciBrcikgKGNkciBrcikpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAga2V5LWxpc3QpKQogICAgICAgICAobXNnIChtYXBjb25jYXQgIydjYXIgKGhlbHAtLWZpbHRl ci1pbmZvLWxpc3QgaW5mby1saXN0IDEpICJcbiIpKSkKICAgIChpZiBpbnNlcnQgKGluc2VydCBt c2cpIChtZXNzYWdlICIlcyIgbXNnKSkpKQoKKGRlZnVuIGhlbHAtLWtleS1iaW5kaW5nLWtleW1h cCAoa2V5ICZvcHRpb25hbCBhY2NlcHQtZGVmYXVsdCBuby1yZW1hcCBwb3NpdGlvbikKICAiUmV0 dXJuIGEga2V5bWFwIGhvbGRpbmcgYSBiaW5kaW5nIGZvciBLRVkgd2l0aGluIGN1cnJlbnQga2V5 bWFwcy4KVGhlIGVmZmVjdCBvZiB0aGUgYXJndW1lbnRzIEtFWSwgQUNDRVBULURFRkFVTFQsIE5P LVJFTUFQIGFuZApQT1NJVElPTiBpcyBhcyBkb2N1bWVudGVkIGluIHRoZSBmdW5jdGlvbiBga2V5 LWJpbmRpbmcnLiIKICAobGV0KiAoKGFjdGl2ZS1tYXBzIChjdXJyZW50LWFjdGl2ZS1tYXBzIHQg cG9zaXRpb24pKQogICAgICAgICBtYXAgZm91bmQpCiAgICA7OyBXZSBsb29wIG92ZXIgYWN0aXZl IG1hcHMgbGlrZSBrZXktYmluZGluZyBkb2VzLgogICAgKHdoaWxlIChhbmQKICAgICAgICAgICAg KG5vdCBmb3VuZCkKICAgICAgICAgICAgKHNldHEgbWFwIChwb3AgYWN0aXZlLW1hcHMpKSkKICAg ICAgKHNldHEgZm91bmQgKGxvb2t1cC1rZXkgbWFwIGtleSBhY2NlcHQtZGVmYXVsdCkpCiAgICAg ICh3aGVuIChpbnRlZ2VycCBmb3VuZCkKICAgICAgICA7OyBUaGUgZmlyc3QgYGZvdW5kJyBjaGFy YWN0ZXJzIG9mIEtFWSB3ZXJlIGZvdW5kIGJ1dCBub3QgdGhlCiAgICAgICAgOzsgd2hvbGUgc2Vx dWVuY2UuCiAgICAgICAgKHNldHEgZm91bmQgbmlsKSkpCiAgICAod2hlbiBmb3VuZAogICAgICAo aWYgKGFuZCAoc3ltYm9scCBmb3VuZCkKICAgICAgICAgICAgICAgKG5vdCBuby1yZW1hcCkKICAg ICAgICAgICAgICAgKGNvbW1hbmQtcmVtYXBwaW5nIGZvdW5kKSkKICAgICAgICAgIDs7IFRoZSB1 c2VyIG1pZ2h0IHdhbnQgdG8ga25vdyBpbiB3aGljaCBtYXAgdGhlIGJpbmRpbmcgaXMKICAgICAg ICAgIDs7IGZvdW5kLCBvciBpbiB3aGljaCBtYXAgdGhlIHJlbWFwcGluZyBpcyBmb3VuZC4gIFRo ZQogICAgICAgICAgOzsgZGVmYXVsdCBpcyB0byBzaG93IHRoZSBsYXR0ZXIuCiAgICAgICAgICAo aGVscC0ta2V5LWJpbmRpbmcta2V5bWFwICh2ZWN0b3IgJ3JlbWFwIGZvdW5kKSkKICAgICAgICBt YXApKSkpCgooZGVmdW4gaGVscC0tYmluZGluZy1sb2N1cyAoa2V5IHBvc2l0aW9uKQogICJEZXNj cmliZSBpbiB3aGljaCBrZXltYXAgS0VZIGlzIGRlZmluZWQuClJldHVybiBhIHN5bWJvbCBwb2lu dGluZyB0byB0aGF0IGtleW1hcCBpZiBvbmUgZXhpc3RzIDsgb3RoZXJ3aXNlCnJldHVybiBuaWwu ICBUaGUgYXJndW1lbnQgUE9TSVRJT04gaXMgYXMgZG9jdW1lbnRlZCBpbiB0aGUKZnVuY3Rpb24g YGtleS1iaW5kaW5nJy4iCiAgKGxldCAoKG1hcCAoaGVscC0ta2V5LWJpbmRpbmcta2V5bWFwIGtl eSB0IG5pbCBwb3NpdGlvbikpKQogICAgKHdoZW4gbWFwCiAgICAgIChjYXRjaCAnZm91bmQKICAg ICAgICAobGV0ICgoYWR2ZXJ0aXNlZC1zeW1zIChuY29uYwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsaXN0ICdvdmVycmlkaW5nLXRlcm1pbmFsLWxvY2FsLW1hcAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdmVycmlkaW5nLWxvY2FsLW1hcCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVscSBuaWwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobWFwY2FyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKG1vZGUtYW5kLW1hcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobGV0ICgobW9kZSAoY2FyIG1vZGUtYW5kLW1hcCkpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKHN5bWJvbC12YWx1ZSBtb2Rl KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJuLXNv ZnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQg IiVzLW1hcCIgbW9kZSkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1pbm9yLW1vZGUtbWFwLWFsaXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bGlzdCAnZ2xvYmFsLW1hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp bnRlcm4tc29mdCAoZm9ybWF0ICIlcy1tYXAiIG1ham9yLW1vZGUpKSkpKSkKICAgICAgICAgIDs7 IExvb2sgaW50byB0aGVzZSBhZHZlcnRpc2VkIHN5bWJvbHMgZmlyc3QuCiAgICAgICAgICAoZG9s aXN0IChzeW0gYWR2ZXJ0aXNlZC1zeW1zKQogICAgICAgICAgICAod2hlbiAoYW5kCiAgICAgICAg ICAgICAgICAgICAoYm91bmRwIHN5bSkKICAgICAgICAgICAgICAgICAgIChlcSBtYXAgKHN5bWJv bC12YWx1ZSBzeW0pKSkKICAgICAgICAgICAgICAodGhyb3cgJ2ZvdW5kIHN5bSkpKQogICAgICAg ICAgOzsgT25seSBsb29rIGluIG90aGVyIHN5bWJvbHMgb3RoZXJ3aXNlLgogICAgICAgICAgKG1h cGF0b21zCiAgICAgICAgICAgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICh3aGVuIChhbmQgKGJv dW5kcCB4KQogICAgICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCBsZXQtYm91bmQgc3ltYm9s cy4KICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpYWwtdmFyaWFibGUtcCB4KQogICAgICAg ICAgICAgICAgICAgICAgICAoZXEgKHN5bWJvbC12YWx1ZSB4KSBtYXApKQogICAgICAgICAgICAg ICAodGhyb3cgJ2ZvdW5kIHgpKSkpCiAgICAgICAgICBuaWwpKSkpKQoKKGRlZnVuIGhlbHAtLXJl YWQta2V5LXNlcXVlbmNlICgmb3B0aW9uYWwgbm8tbW91c2UtbW92ZW1lbnQpCiAgIlJlYWQgYSBr ZXkgc2VxdWVuY2UgZnJvbSB0aGUgdXNlci4KVXN1YWxseSByZWFkcyBhIHNpbmdsZSBrZXkgc2Vx dWVuY2UsIGV4Y2VwdCB3aGVuIHRoYXQgc2VxdWVuY2UgbWlnaHQKaGlkZSBhbm90aGVyIG9uZSAo ZS5nLiBhIGRvd24gZXZlbnQsIHdoZXJlIHRoZSB1c2VyIGlzIGludGVyZXN0ZWQKaW4gZ2V0dGlu ZyBpbmZvIGFib3V0IHRoZSB1cCBldmVudCwgb3IgYSBjbGljayBldmVudCwgd2hlcmUgdGhlIHVz ZXIKd2FudHMgdG8gZ2V0IGluZm8gYWJvdXQgdGhlIGRvdWJsZSBjbGljaykuClJldHVybiBhIGxp c3Qgb2YgZWxlbWVudHMgb2YgdGhlIGZvcm0gKFNFUSAuIFJBVy1TRVEpLCB3aGVyZSBTRVEgaXMg YSBrZXkKc2VxdWVuY2UsIGFuZCBSQVctU0VRIGlzIGl0cyB1bnRyYW5zbGF0ZWQgZm9ybS4KSWYg Tk8tTU9VU0UtTU9WRU1FTlQgaXMgbm9uLW5pbCwgaWdub3JlIGtleSBzZXF1ZW5jZXMgc3RhcnRp bmcKd2l0aCBgbW91c2UtbW92ZW1lbnQnIGV2ZW50cy4iCiAgKGxldCAoKGVuYWJsZS1kaXNhYmxl ZC1tZW51cy1hbmQtYnV0dG9ucyB0KQogICAgICAgIChjdXJzb3ItaW4tZWNoby1hcmVhIHQpCiAg ICAgICAgc2F2ZWQteWFuay1tZW51KQogICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgKGxldCAo bGFzdC1tb2RpZmllcnMga2V5LWxpc3QpCiAgICAgICAgICA7OyBJZiB5YW5rLW1lbnUgaXMgZW1w dHksIHBvcHVsYXRlIGl0IHRlbXBvcmFyaWx5LCBzbyB0aGF0CiAgICAgICAgICA7OyAiU2VsZWN0 IGFuZCBQYXN0ZSIgbWVudSBjYW4gZ2VuZXJhdGUgYSBjb21wbGV0ZSBldmVudC4KICAgICAgICAg ICh3aGVuIChudWxsIChjZHIgeWFuay1tZW51KSkKICAgICAgICAgICAgKHNldHEgc2F2ZWQteWFu ay1tZW51IChjb3B5LXNlcXVlbmNlIHlhbmstbWVudSkpCiAgICAgICAgICAgIChtZW51LWJhci11 cGRhdGUteWFuay1tZW51ICIoYW55IHN0cmluZykiIG5pbCkpCiAgICAgICAgICAod2hpbGUKICAg ICAgICAgICAgICA7OyBSZWFkIGF0IGxlYXN0IG9uZSBrZXktc2VxdWVuY2UuCiAgICAgICAgICAg ICAgKG9yIChudWxsIGtleS1saXN0KQogICAgICAgICAgICAgICAgICA7OyBBZnRlciBhIGRvd24g ZXZlbnQsIGFsc28gcmVhZCB0aGUgKHByZXN1bWFibHkpIGZvbGxvd2luZwogICAgICAgICAgICAg ICAgICA7OyB1cC1ldmVudC4KICAgICAgICAgICAgICAgICAgKG1lbXEgJ2Rvd24gbGFzdC1tb2Rp ZmllcnMpCiAgICAgICAgICAgICAgICAgIDs7IEFmdGVyIGEgY2xpY2ssIHNlZSBpZiBhIGRvdWJs ZSBjbGljayBpcyBvbiB0aGUgd2F5LgogICAgICAgICAgICAgICAgICAoYW5kIChtZW1xICdjbGlj ayBsYXN0LW1vZGlmaWVycykKICAgICAgICAgICAgICAgICAgICAgICAobm90IChzaXQtZm9yICgv IGRvdWJsZS1jbGljay10aW1lIDEwMDAuMCkgdCkpKSkKICAgICAgICAgICAgKGxldCogKChzZXEg KHJlYWQta2V5LXNlcXVlbmNlICJcCkRlc2NyaWJlIHRoZSBmb2xsb3dpbmcga2V5LCBtb3VzZSBj bGljaywgb3IgbWVudSBpdGVtOiAiKSkKICAgICAgICAgICAgICAgICAgIChyYXctc2VxICh0aGlz LXNpbmdsZS1jb21tYW5kLXJhdy1rZXlzKSkKICAgICAgICAgICAgICAgICAgIChrZXluICh3aGVu ICg+IChsZW5ndGggc2VxKSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlZiBzZXEg KDEtIChsZW5ndGggc2VxKSkpKSkKICAgICAgICAgICAgICAgICAgIChiYXNlIChldmVudC1iYXNp Yy10eXBlIGtleW4pKQogICAgICAgICAgICAgICAgICAgKG1vZGlmaWVycyAoZXZlbnQtbW9kaWZp ZXJzIGtleW4pKSkKICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAoKHplcm9wIChs ZW5ndGggc2VxKSkpICAgO0ZJWE1FOiBDYW4gdGhpcyBoYXBwZW4/CiAgICAgICAgICAgICAgICgo YW5kIG5vLW1vdXNlLW1vdmVtZW50IChlcSBiYXNlICdtb3VzZS1tb3ZlbWVudCkpIG5pbCkKICAg ICAgICAgICAgICAgKChlcSBiYXNlICdoZWxwLWVjaG8pIG5pbCkKICAgICAgICAgICAgICAgKHQK ICAgICAgICAgICAgICAgIChzZXRxIGxhc3QtbW9kaWZpZXJzIG1vZGlmaWVycykKICAgICAgICAg ICAgICAgIChwdXNoIChjb25zIHNlcSByYXctc2VxKSBrZXktbGlzdCkpKSkpCiAgICAgICAgICAo bnJldmVyc2Uga2V5LWxpc3QpKQogICAgICA7OyBQdXQgeWFuay1tZW51IGJhY2sgYXMgaXQgd2Fz LCBpZiB3ZSBjaGFuZ2VkIGl0LgogICAgICAod2hlbiBzYXZlZC15YW5rLW1lbnUKICAgICAgICAo c2V0cSB5YW5rLW1lbnUgKGNvcHktc2VxdWVuY2Ugc2F2ZWQteWFuay1tZW51KSkKICAgICAgICAo ZnNldCAneWFuay1tZW51IChjb25zICdrZXltYXAgeWFuay1tZW51KSkpKSkpCgooZGVmdW4gZGVz Y3JpYmUta2V5ICgmb3B0aW9uYWwga2V5LWxpc3QgYnVmZmVyIHVwLWV2ZW50KQogICJEaXNwbGF5 IGRvY3VtZW50YXRpb24gb2YgdGhlIGZ1bmN0aW9uIGludm9rZWQgYnkgS0VZLUxJU1QuCktFWS1M SVNUIGNhbiBiZSBhbnkga2luZCBvZiBhIGtleSBzZXF1ZW5jZTsgaXQgY2FuIGluY2x1ZGUga2V5 Ym9hcmQgZXZlbnRzLAptb3VzZSBldmVudHMsIGFuZC9vciBtZW51IGV2ZW50cy4gIFdoZW4gY2Fs bGluZyBmcm9tIGEgcHJvZ3JhbSwKcGFzcyBLRVktTElTVCBhcyBhIGxpc3Qgb2YgZWxlbWVudHMg KFNFUSAuIFJBVy1TRVEpIHdoZXJlIFNFUSBpcwphIGtleS1zZXF1ZW5jZSBhbmQgUkFXLVNFUSBp cyBpdHMgdW50cmFuc2xhdGVkIGZvcm0uCgpXaGlsZSByZWFkaW5nIEtFWS1MSVNUIGludGVyYWN0 aXZlbHksIHRoaXMgY29tbWFuZCB0ZW1wb3JhcmlseSBlbmFibGVzCm1lbnUgaXRlbXMgb3IgdG9v bC1iYXIgYnV0dG9ucyB0aGF0IGFyZSBkaXNhYmxlZCB0byBhbGxvdyBnZXR0aW5nIGhlbHAKb24g dGhlbS4KCkJVRkZFUiBpcyB0aGUgYnVmZmVyIGluIHdoaWNoIHRvIGxvb2t1cCB0aG9zZSBrZXlz OyBpdCBkZWZhdWx0cyB0byB0aGUKY3VycmVudCBidWZmZXIuIgogIChkZWNsYXJlIChhZHZlcnRp c2VkLWNhbGxpbmctY29udmVudGlvbiAoa2V5LWxpc3QgJm9wdGlvbmFsIGJ1ZmZlcikgIjI3LjEi KSkKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGhlbHAtLXJlYWQta2V5LXNlcXVlbmNlKSkpCiAgKHdo ZW4gKGFycmF5cCBrZXktbGlzdCkKICAgIDs7IENvbXBhdGliaWxpdHkgd2l0aCBvbGQgY2FsbGlu ZyBjb252ZW50aW9uLgogICAgKHNldHEga2V5LWxpc3QgKGNvbnMgKGxpc3Qga2V5LWxpc3QpIChp ZiB1cC1ldmVudCAobGlzdCB1cC1ldmVudCkpKSkKICAgICh3aGVuIGJ1ZmZlcgogICAgICAobGV0 ICgocmF3IChpZiAobnVtYmVycCBidWZmZXIpICh0aGlzLXNpbmdsZS1jb21tYW5kLXJhdy1rZXlz KSBidWZmZXIpKSkKICAgICAgICAoc2V0ZiAoY2RhciAobGFzdCBrZXktbGlzdCkpIHJhdykpKQog ICAgKHNldHEgYnVmZmVyIG5pbCkpCiAgKGxldCogKChidWYgKG9yIGJ1ZmZlciAoY3VycmVudC1i dWZmZXIpKSkKICAgICAgICAgKG9uLWxpbmsKICAgICAgICAgIChtYXBjYXIgKGxhbWJkYSAoa3Ip CiAgICAgICAgICAgICAgICAgICAgKGxldCAoKHJhdyAoY2RyIGtyKSkpCiAgICAgICAgICAgICAg ICAgICAgICAoYW5kIChub3QgKG1lbXEgbW91c2UtMS1jbGljay1mb2xsb3dzLWxpbmsgJyhuaWwg ZG91YmxlKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICg+IChsZW5ndGggcmF3KSAwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhci1zYWZlIChhcmVmIHJhdyAwKSkgJ21v dXNlLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1 ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZS1vbi1saW5rLXAgKGV2ZW50LXN0 YXJ0IChhcmVmIHJhdyAwKSkpKSkpKQogICAgICAgICAgICAgICAgICBrZXktbGlzdCkpCiAgICAg ICAgIChpbmZvLWxpc3QKICAgICAgICAgIChoZWxwLS1maWx0ZXItaW5mby1saXN0CiAgICAgICAg ICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmCiAgICAgICAgICAgICAobWFwY2FyIChsYW1iZGEg KHgpCiAgICAgICAgICAgICAgICAgICAgICAgKHBjYXNlLWxldCogKChgKCxzZXEgLiAscmF3LXNl cSkgeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGAoLGJyaWVmLWRlc2Mg LGRlZm4gLGV2ZW50ICxfbW91c2UtbXNnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGhlbHAtLWFuYWx5emUta2V5IHNlcSByYXctc2VxKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvY3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaGVscC0tYmluZGluZy1sb2N1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlcSAoZXZlbnQtc3RhcnQgZXZlbnQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICBgKCxzZXEgLGJyaWVmLWRlc2MgLGRlZm4gLGxvY3VzKSkpCiAgICAgICAgICAgICAgICAgICAg IGtleS1saXN0KSkKICAgICAgICAgICAyKSkpCiAgICAoaGVscC1zZXR1cC14cmVmIChsaXN0IChs YW1iZGEgKGtleS1saXN0IGJ1ZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVzY3Jp YmUta2V5IGtleS1saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaWYgKGJ1ZmZlci1saXZlLXAgYnVmKSBidWYpKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAga2V5LWxpc3QgYnVmKQoJCSAgICAgKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2ludGVyYWN0 aXZlKSkKICAgIChpZiAoYW5kICg8PSAobGVuZ3RoIGluZm8tbGlzdCkgMSkKICAgICAgICAgICAg IChoZWxwLS1iaW5kaW5nLXVuZGVmaW5lZC1wIChudGggMiAoY2FyIGluZm8tbGlzdCkpKSkKICAg ICAgICAobWVzc2FnZSAiJXMiIChudGggMSAoY2FyIGluZm8tbGlzdCkpKQogICAgICAod2l0aC1o ZWxwLXdpbmRvdyAoaGVscC1idWZmZXIpCiAgICAgICAgKHdoZW4gKD4gKGxlbmd0aCBpbmZvLWxp c3QpIDEpCiAgICAgICAgICA7OyBGSVhNRTogTWFrZSB0aGlzIGludG8gY2xpY2thYmxlIGh5cGVy bGlua3MuCiAgICAgICAgICAocHJpbmMgIlRoZXJlIHdlcmUgc2V2ZXJhbCBrZXktc2VxdWVuY2Vz OlxuXG4iKQogICAgICAgICAgKHByaW5jIChtYXBjb25jYXQgKGxhbWJkYSAoaW5mbykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBjYXNlLWxldCAoKGAoLF9zZXEgLGJyaWVmLWRlc2Mg LF9kZWZuICxfbG9jdXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbmZvKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICIgICIgYnJp ZWYtZGVzYykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby1saXN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiXG4iKSkKICAgICAgICAgICh3aGVuIChkZWxxIG5pbCBvbi1s aW5rKQogICAgICAgICAgICAocHJpbmMgIlxuXG5UaG9zZSBhcmUgaW5mbHVlbmNlZCBieSBgbW91 c2UtMS1jbGljay1mb2xsb3dzLWxpbmsnIikpCiAgICAgICAgICAocHJpbmMgIlxuXG5UaGV5J3Jl IGFsbCBkZXNjcmliZWQgYmVsb3cuIikpCiAgICAgICAgKHBjYXNlLWRvbGlzdCAoYCgsX3NlcSAs YnJpZWYtZGVzYyAsZGVmbiAsbG9jdXMpCiAgICAgICAgICAgICAgICAgICAgICAgaW5mby1saXN0 KQogICAgICAgICAgKHdoZW4gZGVmbgogICAgICAgICAgICAod2hlbiAoPiAobGVuZ3RoIGluZm8t bGlzdCkgMSkKICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRw dXQKICAgICAgICAgICAgICAgIChpbnNlcnQgIlxuXG4iCiAgICAgICAgICAgICAgICAgICAgICAg IDs7IEZJWE1FOiBDYW4ndCB1c2UgZXZhbC13aGVuLWNvbXBpbGUgYmVjYXVzZSBwdXJpZmllZAog ICAgICAgICAgICAgICAgICAgICAgICA7OyBzdHJpbmdzIGxvc2UgdGhlaXIgdGV4dCBwcm9wZXJ0 aWVzIDotKAogICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiXG4iICdmYWNlICco OmhlaWdodCAwLjEgOmludmVyc2UtdmlkZW8gdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICJc biIpKSkKCiAgICAgICAgICAgIChwcmluYyBicmllZi1kZXNjKQogICAgICAgICAgICAod2hlbiBs b2N1cwogICAgICAgICAgICAgIChwcmluYyAoZm9ybWF0ICIgKGZvdW5kIGluICVzKSIgbG9jdXMp KSkKICAgICAgICAgICAgKHByaW5jICIsIHdoaWNoIGlzICIpCgkgICAgKGRlc2NyaWJlLWZ1bmN0 aW9uLTEgZGVmbikpKSkpKSkKDAooZGVmdW4gZGVzY3JpYmUtbW9kZSAoJm9wdGlvbmFsIGJ1ZmZl cikKICAiRGlzcGxheSBkb2N1bWVudGF0aW9uIG9mIGN1cnJlbnQgbWFqb3IgbW9kZSBhbmQgbWlu b3IgbW9kZXMuCkEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgbWlub3IgbW9kZXMgY29tZXMgZmlyc3Qs IGZvbGxvd2VkIGJ5IHRoZQptYWpvciBtb2RlIGRlc2NyaXB0aW9uLiAgVGhpcyBpcyBmb2xsb3dl ZCBieSBkZXRhaWxlZApkZXNjcmlwdGlvbnMgb2YgdGhlIG1pbm9yIG1vZGVzLCBlYWNoIG9uIGEg c2VwYXJhdGUgcGFnZS4KCkZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5IGZvciBhIG1pbm9yIG1v ZGUsIHRoZSBtb2RlJ3MgaW5kaWNhdG9yCnZhcmlhYmxlIFwobGlzdGVkIGluIGBtaW5vci1tb2Rl LWFsaXN0JykgbXVzdCBhbHNvIGJlIGEgZnVuY3Rpb24Kd2hvc2UgZG9jdW1lbnRhdGlvbiBkZXNj cmliZXMgdGhlIG1pbm9yIG1vZGUuCgpJZiBjYWxsZWQgZnJvbSBMaXNwIHdpdGggYSBub24tbmls IEJVRkZFUiBhcmd1bWVudCwgZGlzcGxheQpkb2N1bWVudGF0aW9uIGZvciB0aGUgbWFqb3IgYW5k IG1pbm9yIG1vZGVzIG9mIHRoYXQgYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUgIkAiKQogICh1bmxl c3MgYnVmZmVyIChzZXRxIGJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkKICAoaGVscC1zZXR1cC14 cmVmIChsaXN0ICMnZGVzY3JpYmUtbW9kZSBidWZmZXIpCgkJICAgKGNhbGxlZC1pbnRlcmFjdGl2 ZWx5LXAgJ2ludGVyYWN0aXZlKSkKICA7OyBGb3IgdGhlIHNha2Ugb2YgaGVscC1kby14cmVmIGFu ZCBoZWxwLXhyZWYtZ28tYmFjaywKICA7OyBkb24ndCBzd2l0Y2ggYnVmZmVycyBiZWZvcmUgY2Fs bGluZyBgaGVscC1idWZmZXInLgogICh3aXRoLWhlbHAtd2luZG93IChoZWxwLWJ1ZmZlcikKICAg ICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgogICAgICAobGV0IChtaW5vci1tb2RlcykKCTs7 IE9sZGVyIHBhY2thZ2VzIGRvIG5vdCByZWdpc3RlciBpbiBtaW5vci1tb2RlLWxpc3QgYnV0IG9u bHkgaW4KCTs7IG1pbm9yLW1vZGUtYWxpc3QuCgkoZG9saXN0ICh4IG1pbm9yLW1vZGUtYWxpc3Qp CgkgIChzZXRxIHggKGNhciB4KSkKCSAgKHVubGVzcyAobWVtcSB4IG1pbm9yLW1vZGUtbGlzdCkK CSAgICAocHVzaCB4IG1pbm9yLW1vZGUtbGlzdCkpKQoJOzsgRmluZCBlbmFibGVkIG1pbm9yIG1v ZGUgd2Ugd2lsbCB3YW50IHRvIG1lbnRpb24uCgkoZG9saXN0IChtb2RlIG1pbm9yLW1vZGUtbGlz dCkKCSAgOzsgRG9jdW1lbnQgYSBtaW5vciBtb2RlIGlmIGl0IGlzIGxpc3RlZCBpbiBtaW5vci1t b2RlLWFsaXN0LAoJICA7OyBub24tbmlsLCBhbmQgaGFzIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4K CSAgKGxldCAoKGZtb2RlIChvciAoZ2V0IG1vZGUgOm1pbm9yLW1vZGUtZnVuY3Rpb24pIG1vZGUp KSkKCSAgICAoYW5kIChib3VuZHAgbW9kZSkgKHN5bWJvbC12YWx1ZSBtb2RlKQoJCSAoZmJvdW5k cCBmbW9kZSkKCQkgKGxldCAoKHByZXR0eS1taW5vci1tb2RlCgkJCShpZiAoc3RyaW5nLW1hdGNo ICJcXChcXCgtbWlub3JcXCk/LW1vZGVcXCk/XFwnIgoJCQkJCSAgKHN5bWJvbC1uYW1lIGZtb2Rl KSkKCQkJICAgIChjYXBpdGFsaXplCgkJCSAgICAgKHN1YnN0cmluZyAoc3ltYm9sLW5hbWUgZm1v ZGUpCgkJCQkJMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKCQkJICBmbW9kZSkpKQoJCSAgIChwdXNo IChsaXN0IGZtb2RlIHByZXR0eS1taW5vci1tb2RlCgkJCSAgICAgICAoZm9ybWF0LW1vZGUtbGlu ZSAoYXNzcSBtb2RlIG1pbm9yLW1vZGUtYWxpc3QpKSkKCQkJIG1pbm9yLW1vZGVzKSkpKSkKCShz ZXRxIG1pbm9yLW1vZGVzCgkgICAgICAoc29ydCBtaW5vci1tb2RlcwoJCSAgICAobGFtYmRhIChh IGIpIChzdHJpbmctbGVzc3AgKGNhZHIgYSkgKGNhZHIgYikpKSkpCgkod2hlbiBtaW5vci1tb2Rl cwoJICAocHJpbmMgIkVuYWJsZWQgbWlub3IgbW9kZXM6XG4iKQoJICAobWFrZS1sb2NhbC12YXJp YWJsZSAnaGVscC1idXR0b24tY2FjaGUpCgkgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJk LW91dHB1dAoJICAgIChkb2xpc3QgKG1vZGUgbWlub3ItbW9kZXMpCgkgICAgICAobGV0ICgobW9k ZS1mdW5jdGlvbiAobnRoIDAgbW9kZSkpCgkJICAgIChwcmV0dHktbWlub3ItbW9kZSAobnRoIDEg bW9kZSkpCgkJICAgIChpbmRpY2F0b3IgKG50aCAyIG1vZGUpKSkKCQkoc2F2ZS1leGN1cnNpb24K CQkgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCgkJICAocHJpbmMgIlxuXGZcbiIpCgkJICAocHVz aCAocG9pbnQtbWFya2VyKSBoZWxwLWJ1dHRvbi1jYWNoZSkKCQkgIDs7IERvY3VtZW50IHRoZSBt aW5vciBtb2RlcyBmdWxseS4KICAgICAgICAgICAgICAgICAgKGluc2VydC10ZXh0LWJ1dHRvbgog ICAgICAgICAgICAgICAgICAgcHJldHR5LW1pbm9yLW1vZGUgJ3R5cGUgJ2hlbHAtZnVuY3Rpb24K ICAgICAgICAgICAgICAgICAgICdoZWxwLWFyZ3MgKGxpc3QgbW9kZS1mdW5jdGlvbikKICAgICAg ICAgICAgICAgICAgICdidXR0b24gJyh0KSkKCQkgIChwcmluYyAoZm9ybWF0ICIgbWlub3IgbW9k ZSAoJXMpOlxuIgoJCQkJIChpZiAoemVyb3AgKGxlbmd0aCBpbmRpY2F0b3IpKQoJCQkJICAgICAi bm8gaW5kaWNhdG9yIgoJCQkJICAgKGZvcm1hdCAiaW5kaWNhdG9yJXMiCgkJCQkJICAgaW5kaWNh dG9yKSkpKQoJCSAgKHByaW5jIChkb2N1bWVudGF0aW9uIG1vZGUtZnVuY3Rpb24pKSkKCQkoaW5z ZXJ0LWJ1dHRvbiBwcmV0dHktbWlub3ItbW9kZQoJCQkgICAgICAgJ2FjdGlvbiAoY2FyIGhlbHAt YnV0dG9uLWNhY2hlKQoJCQkgICAgICAgJ2ZvbGxvdy1saW5rIHQKCQkJICAgICAgICdoZWxwLWVj aG8gIm1vdXNlLTIsIFJFVDogc2hvdyBmdWxsIGluZm9ybWF0aW9uIikKCQkobmV3bGluZSkpKQoJ ICAgIChmb3J3YXJkLWxpbmUgLTEpCgkgICAgKGZpbGwtcGFyYWdyYXBoIG5pbCkKCSAgICAoZm9y d2FyZC1saW5lIDEpKQoKCSAgKHByaW5jICJcbihJbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtaW5v ciBtb2RlcyBmb2xsb3dzIHRoZSBtYWpvciBtb2RlIGluZm8uKVxuXG4iKSkKCTs7IERvY3VtZW50 IHRoZSBtYWpvciBtb2RlLgoJKGxldCAoKG1vZGUgbW9kZS1uYW1lKSkKCSAgKHdpdGgtY3VycmVu dC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0CiAgICAgICAgICAgIChsZXQgKChzdGFydCAocG9pbnQp KSkKICAgICAgICAgICAgICAoaW5zZXJ0IChmb3JtYXQtbW9kZS1saW5lIG1vZGUgbmlsIG5pbCBi dWZmZXIpKQogICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkg JyhmYWNlIGJvbGQpKSkpKQoJKHByaW5jICIgbW9kZSIpCgkobGV0KiAoKG1vZGUgbWFqb3ItbW9k ZSkKCSAgICAgICAoZmlsZS1uYW1lIChmaW5kLWxpc3Atb2JqZWN0LWZpbGUtbmFtZSBtb2RlIG5p bCkpKQoJICAod2hlbiBmaWxlLW5hbWUKCSAgICAocHJpbmMgKGZvcm1hdC1tZXNzYWdlICIgZGVm aW5lZCBpbiBgJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5h bWUtbm9uZGlyZWN0b3J5IGZpbGUtbmFtZSkpKQoJICAgIDs7IE1ha2UgYSBoeXBlcmxpbmsgdG8g dGhlIGxpYnJhcnkuCgkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0Cgkg ICAgICAoc2F2ZS1leGN1cnNpb24KCQkocmUtc2VhcmNoLWJhY2t3YXJkIChzdWJzdGl0dXRlLWNv bW1hbmQta2V5cyAiYFxcKFteYCddK1xcKSciKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuaWwgdCkKCQkoaGVscC14cmVmLWJ1dHRvbiAxICdoZWxwLWZ1bmN0aW9uLWRlZiBt b2RlIGZpbGUtbmFtZSkpKSkpCgkocHJpbmMgIjpcbiIpCgkocHJpbmMgKGRvY3VtZW50YXRpb24g bWFqb3ItbW9kZSkpKSkpCiAgOzsgRm9yIHRoZSBzYWtlIG9mIElFTE0gYW5kIG1heWJlIG90aGVy cwogIG5pbCkKCgooZGVmdW4gZGVzY3JpYmUtbWlub3ItbW9kZSAobWlub3ItbW9kZSkKICAiRGlz cGxheSBkb2N1bWVudGF0aW9uIG9mIGEgbWlub3IgbW9kZSBnaXZlbiBhcyBNSU5PUi1NT0RFLgpN SU5PUi1NT0RFIGNhbiBiZSBhIG1pbm9yIG1vZGUgc3ltYm9sIG9yIGEgbWlub3IgbW9kZSBpbmRp Y2F0b3Igc3RyaW5nCmFwcGVhcmVkIG9uIHRoZSBtb2RlLWxpbmUuIgogIChpbnRlcmFjdGl2ZSAo bGlzdCAoY29tcGxldGluZy1yZWFkCgkJICAgICAgIk1pbm9yIG1vZGU6ICIKCQkJICAgICAgKG5j b25jCgkJCSAgICAgICAoZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1z eW1ib2wpCgkJCSAgICAgICAoZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZv ci1pbmRpY2F0b3IpCgkJCSAgICAgICApKSkpCiAgKGlmIChzeW1ib2xwIG1pbm9yLW1vZGUpCiAg ICAgIChzZXRxIG1pbm9yLW1vZGUgKHN5bWJvbC1uYW1lIG1pbm9yLW1vZGUpKSkKICAobGV0ICgo c3ltYm9scyAoZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1zeW1ib2wp KQoJKGluZGljYXRvcnMgKGRlc2NyaWJlLW1pbm9yLW1vZGUtY29tcGxldGlvbi10YWJsZS1mb3It aW5kaWNhdG9yKSkpCiAgICAoY29uZAogICAgICgobWVtYmVyIG1pbm9yLW1vZGUgc3ltYm9scykK ICAgICAgKGRlc2NyaWJlLW1pbm9yLW1vZGUtZnJvbS1zeW1ib2wgKGludGVybiBtaW5vci1tb2Rl KSkpCiAgICAgKChtZW1iZXIgbWlub3ItbW9kZSBpbmRpY2F0b3JzKQogICAgICAoZGVzY3JpYmUt bWlub3ItbW9kZS1mcm9tLWluZGljYXRvciBtaW5vci1tb2RlKSkKICAgICAodAogICAgICAoZXJy b3IgIk5vIHN1Y2ggbWlub3IgbW9kZTogJXMiIG1pbm9yLW1vZGUpKSkpKQoKOzsgc3ltYm9sCihk ZWZ1biBkZXNjcmliZS1taW5vci1tb2RlLWNvbXBsZXRpb24tdGFibGUtZm9yLXN5bWJvbCAoKQog IDs7IEluIG9yZGVyIHRvIGxpc3QgdXAgYWxsIG1pbm9yIG1vZGVzLCBtaW5vci1tb2RlLWxpc3QK ICA7OyBpcyB1c2VkIGhlcmUgaW5zdGVhZCBvZiBtaW5vci1tb2RlLWFsaXN0LgogIChkZWxxIG5p bCAobWFwY2FyICdzeW1ib2wtbmFtZSBtaW5vci1tb2RlLWxpc3QpKSkKCihkZWZ1biBkZXNjcmli ZS1taW5vci1tb2RlLWZyb20tc3ltYm9sIChzeW1ib2wpCiAgIkRpc3BsYXkgZG9jdW1lbnRhdGlv biBvZiBhIG1pbm9yIG1vZGUgZ2l2ZW4gYXMgYSBzeW1ib2wsIFNZTUJPTCIKICAoaW50ZXJhY3Rp dmUgKGxpc3QgKGludGVybiAoY29tcGxldGluZy1yZWFkCgkJCSAgICAgICJNaW5vciBtb2RlIHN5 bWJvbDogIgoJCQkgICAgICAoZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZv ci1zeW1ib2wpKSkpKQogIChpZiAoZmJvdW5kcCBzeW1ib2wpCiAgICAgIChkZXNjcmliZS1mdW5j dGlvbiBzeW1ib2wpCiAgICAoZGVzY3JpYmUtdmFyaWFibGUgc3ltYm9sKSkpCgo7OyBpbmRpY2F0 b3IKKGRlZnVuIGRlc2NyaWJlLW1pbm9yLW1vZGUtY29tcGxldGlvbi10YWJsZS1mb3ItaW5kaWNh dG9yICgpCiAgKGRlbHEgbmlsCgkobWFwY2FyIChsYW1iZGEgKHgpCgkJICAobGV0ICgoaSAoZm9y bWF0LW1vZGUtbGluZSB4KSkpCgkJICAgIDs7IHJlbW92ZSBmaXJzdCBzcGFjZSBpZiBleGlzdGVk CgkJICAgIChjb25kCgkJICAgICAoKD0gMCAobGVuZ3RoIGkpKQoJCSAgICAgIG5pbCkKCQkgICAg ICgoZXEgKGFyZWYgaSAwKSA/XHMpCgkJICAgICAgKHN1YnN0cmluZyBpIDEpKQoJCSAgICAgKHQK CQkgICAgICBpKSkpKQoJCW1pbm9yLW1vZGUtYWxpc3QpKSkKCihkZWZ1biBkZXNjcmliZS1taW5v ci1tb2RlLWZyb20taW5kaWNhdG9yIChpbmRpY2F0b3IpCiAgIkRpc3BsYXkgZG9jdW1lbnRhdGlv biBvZiBhIG1pbm9yIG1vZGUgc3BlY2lmaWVkIGJ5IElORElDQVRPUi4KSWYgeW91IGNhbGwgdGhp cyBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5LCB5b3UgY2FuIGdpdmUgaW5kaWNhdG9yIHdoaWNoCmlz IGN1cnJlbnRseSBhY3RpdmF0ZWQgd2l0aCBjb21wbGV0aW9uLiIKICAoaW50ZXJhY3RpdmUgKGxp c3QKCQkoY29tcGxldGluZy1yZWFkCgkJICJNaW5vciBtb2RlIGluZGljYXRvcjogIgoJCSAoZGVz Y3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1pbmRpY2F0b3IpKSkpCiAgKGxl dCAoKG1pbm9yLW1vZGUgKGxvb2t1cC1taW5vci1tb2RlLWZyb20taW5kaWNhdG9yIGluZGljYXRv cikpKQogICAgKGlmIG1pbm9yLW1vZGUKCShkZXNjcmliZS1taW5vci1tb2RlLWZyb20tc3ltYm9s IG1pbm9yLW1vZGUpCiAgICAgIChlcnJvciAiQ2Fubm90IGZpbmQgbWlub3IgbW9kZSBmb3IgYCVz JyIgaW5kaWNhdG9yKSkpKQoKKGRlZnVuIGxvb2t1cC1taW5vci1tb2RlLWZyb20taW5kaWNhdG9y IChpbmRpY2F0b3IpCiAgIlJldHVybiBhIG1pbm9yIG1vZGUgc3ltYm9sIGZyb20gaXRzIGluZGlj YXRvciBvbiB0aGUgbW9kZSBsaW5lLiIKICA7OyByZW1vdmUgZmlyc3Qgc3BhY2UgaWYgZXhpc3Rl ZAogIChpZiAoYW5kICg8IDAgKGxlbmd0aCBpbmRpY2F0b3IpKQoJICAgKGVxIChhcmVmIGluZGlj YXRvciAwKSA/XHMpKQogICAgICAoc2V0cSBpbmRpY2F0b3IgKHN1YnN0cmluZyBpbmRpY2F0b3Ig MSkpKQogIChsZXQgKChtaW5vci1tb2RlcyBtaW5vci1tb2RlLWFsaXN0KQoJcmVzdWx0KQogICAg KHdoaWxlIG1pbm9yLW1vZGVzCiAgICAgIChsZXQqICgobWlub3ItbW9kZSAoY2FyIChjYXIgbWlu b3ItbW9kZXMpKSkKCSAgICAgKGFuaW5kaWNhdG9yIChmb3JtYXQtbW9kZS1saW5lCgkJCSAgIChj YXIgKGNkciAoY2FyIG1pbm9yLW1vZGVzKSkpKSkpCgk7OyByZW1vdmUgZmlyc3Qgc3BhY2UgaWYg ZXhpc3RlZAoJKGlmIChhbmQgKHN0cmluZ3AgYW5pbmRpY2F0b3IpCgkJICg+IChsZW5ndGggYW5p bmRpY2F0b3IpIDApCgkJIChlcSAoYXJlZiBhbmluZGljYXRvciAwKSA/XHMpKQoJICAgIChzZXRx IGFuaW5kaWNhdG9yIChzdWJzdHJpbmcgYW5pbmRpY2F0b3IgMSkpKQoJKGlmIChlcXVhbCBpbmRp Y2F0b3IgYW5pbmRpY2F0b3IpCgkgICAgKHNldHEgcmVzdWx0IG1pbm9yLW1vZGUKCQkgIG1pbm9y LW1vZGVzIG5pbCkKCSAgKHNldHEgbWlub3ItbW9kZXMgKGNkciBtaW5vci1tb2RlcykpKSkpCiAg ICByZXN1bHQpKQoMCihkZWNsYXJlLWZ1bmN0aW9uIHgtZGlzcGxheS1waXhlbC1oZWlnaHQgInhm bnMuYyIgKCZvcHRpb25hbCB0ZXJtaW5hbCkpCihkZWNsYXJlLWZ1bmN0aW9uIHgtZGlzcGxheS1w aXhlbC13aWR0aCAieGZucy5jIiAoJm9wdGlvbmFsIHRlcm1pbmFsKSkKCjs7OyBBdXRvbWF0aWMg cmVzaXppbmcgb2YgdGVtcG9yYXJ5IGJ1ZmZlcnMuCihkZWZjdXN0b20gdGVtcC1idWZmZXItbWF4 LWhlaWdodAogIChsYW1iZGEgKF9idWZmZXIpCiAgICAoaWYgKGFuZCAoZGlzcGxheS1ncmFwaGlj LXApIChlcSAoc2VsZWN0ZWQtd2luZG93KSAoZnJhbWUtcm9vdC13aW5kb3cpKSkKCSgvICh4LWRp c3BsYXktcGl4ZWwtaGVpZ2h0KSAoZnJhbWUtY2hhci1oZWlnaHQpIDIpCiAgICAgICgvICgtIChm cmFtZS1oZWlnaHQpIDIpIDIpKSkKICAiTWF4aW11bSBoZWlnaHQgb2YgYSB3aW5kb3cgZGlzcGxh eWluZyBhIHRlbXBvcmFyeSBidWZmZXIuClRoaXMgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBUZW1w IEJ1ZmZlciBSZXNpemUgbW9kZSBpcyBlbmFibGVkLgpUaGUgdmFsdWUgaXMgdGhlIG1heGltdW0g aGVpZ2h0IChpbiBsaW5lcykgd2hpY2gKYHJlc2l6ZS10ZW1wLWJ1ZmZlci13aW5kb3cnIHdpbGwg Z2l2ZSB0byBhIHdpbmRvdyBkaXNwbGF5aW5nIGEKdGVtcG9yYXJ5IGJ1ZmZlci4gIEl0IGNhbiBh bHNvIGJlIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHRvCmNob29zZSB0aGUgaGVpZ2h0IGZvciBz dWNoIGEgYnVmZmVyLiAgSXQgZ2V0cyBvbmUgYXJndW1lbnQsIHRoZQpidWZmZXIsIGFuZCBzaG91 bGQgcmV0dXJuIGEgcG9zaXRpdmUgaW50ZWdlci4gIEF0IHRoZSB0aW1lIHRoZQpmdW5jdGlvbiBp cyBjYWxsZWQsIHRoZSB3aW5kb3cgdG8gYmUgcmVzaXplZCBpcyBzZWxlY3RlZC4iCiAgOnR5cGUg JyhjaG9pY2UgaW50ZWdlciBmdW5jdGlvbikKICA6Z3JvdXAgJ2hlbHAKICA6dmVyc2lvbiAiMjQu MyIpCgooZGVmY3VzdG9tIHRlbXAtYnVmZmVyLW1heC13aWR0aAogIChsYW1iZGEgKF9idWZmZXIp CiAgICAoaWYgKGFuZCAoZGlzcGxheS1ncmFwaGljLXApIChlcSAoc2VsZWN0ZWQtd2luZG93KSAo ZnJhbWUtcm9vdC13aW5kb3cpKSkKCSgvICh4LWRpc3BsYXktcGl4ZWwtd2lkdGgpIChmcmFtZS1j aGFyLXdpZHRoKSAyKQogICAgICAoLyAoLSAoZnJhbWUtd2lkdGgpIDIpIDIpKSkKICAiTWF4aW11 bSB3aWR0aCBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIGEgdGVtcG9yYXJ5IGJ1ZmZlci4KVGhpcyBp cyBlZmZlY3RpdmUgb25seSB3aGVuIFRlbXAgQnVmZmVyIFJlc2l6ZSBtb2RlIGlzIGVuYWJsZWQu ClRoZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSB3aWR0aCAoaW4gY29sdW1ucykgd2hpY2gKYHJlc2l6 ZS10ZW1wLWJ1ZmZlci13aW5kb3cnIHdpbGwgZ2l2ZSB0byBhIHdpbmRvdyBkaXNwbGF5aW5nIGEK dGVtcG9yYXJ5IGJ1ZmZlci4gIEl0IGNhbiBhbHNvIGJlIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVk IHRvCmNob29zZSB0aGUgd2lkdGggZm9yIHN1Y2ggYSBidWZmZXIuICBJdCBnZXRzIG9uZSBhcmd1 bWVudCwgdGhlCmJ1ZmZlciwgYW5kIHNob3VsZCByZXR1cm4gYSBwb3NpdGl2ZSBpbnRlZ2VyLiAg QXQgdGhlIHRpbWUgdGhlCmZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHdpbmRvdyB0byBiZSByZXNp emVkIGlzIHNlbGVjdGVkLiIKICA6dHlwZSAnKGNob2ljZSBpbnRlZ2VyIGZ1bmN0aW9uKQogIDpn cm91cCAnaGVscAogIDp2ZXJzaW9uICIyNC40IikKCihkZWZpbmUtbWlub3ItbW9kZSB0ZW1wLWJ1 ZmZlci1yZXNpemUtbW9kZQogICJUb2dnbGUgYXV0by1yZXNpemluZyB0ZW1wb3JhcnkgYnVmZmVy IHdpbmRvd3MgKFRlbXAgQnVmZmVyIFJlc2l6ZSBNb2RlKS4KV2l0aCBhIHByZWZpeCBhcmd1bWVu dCBBUkcsIGVuYWJsZSBUZW1wIEJ1ZmZlciBSZXNpemUgbW9kZSBpZiBBUkcKaXMgcG9zaXRpdmUs IGFuZCBkaXNhYmxlIGl0IG90aGVyd2lzZS4gIElmIGNhbGxlZCBmcm9tIExpc3AsCmVuYWJsZSB0 aGUgbW9kZSBpZiBBUkcgaXMgb21pdHRlZCBvciBuaWwuCgpXaGVuIFRlbXAgQnVmZmVyIFJlc2l6 ZSBtb2RlIGlzIGVuYWJsZWQsIHRoZSB3aW5kb3dzIGluIHdoaWNoIHdlCnNob3cgYSB0ZW1wb3Jh cnkgYnVmZmVyIGFyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgaW4gaGVpZ2h0IHRvCmZpdCB0aGUg YnVmZmVyJ3MgY29udGVudHMsIGJ1dCBuZXZlciBtb3JlIHRoYW4KYHRlbXAtYnVmZmVyLW1heC1o ZWlnaHQnIG5vciBsZXNzIHRoYW4gYHdpbmRvdy1taW4taGVpZ2h0Jy4KCkEgd2luZG93IGlzIHJl c2l6ZWQgb25seSBpZiBpdCBoYXMgYmVlbiBzcGVjaWFsbHkgY3JlYXRlZCBmb3IgdGhlCmJ1ZmZl ci4gIFdpbmRvd3MgdGhhdCBoYXZlIHNob3duIGFub3RoZXIgYnVmZmVyIGJlZm9yZSBhcmUgbm90 CnJlc2l6ZWQuICBBIGZyYW1lIGlzIHJlc2l6ZWQgb25seSBpZiBgZml0LWZyYW1lLXRvLWJ1ZmZl cicgaXMKbm9uLW5pbC4KClRoaXMgbW9kZSBpcyB1c2VkIGJ5IGBoZWxwJywgYGFwcm9wb3MnIGFu ZCBgY29tcGxldGlvbicgYnVmZmVycywKYW5kIHNvbWUgb3RoZXJzLiIKICA6Z2xvYmFsIHQgOmdy b3VwICdoZWxwCiAgKGlmIHRlbXAtYnVmZmVyLXJlc2l6ZS1tb2RlCiAgICAgIDs7IGBoZWxwLW1h a2UteHJlZnMnIG1heSBhZGQgYSBgYmFjaycgYnV0dG9uIGFuZCB0aHVzIGluY3JlYXNlIHRoZQog ICAgICA7OyB0ZXh0IHNpemUsIHNvIGByZXNpemUtdGVtcC1idWZmZXItd2luZG93JyBtdXN0IGJl IHJ1biAqYWZ0ZXIqIGl0LgogICAgICAoYWRkLWhvb2sgJ3RlbXAtYnVmZmVyLXNob3ctaG9vayAn cmVzaXplLXRlbXAtYnVmZmVyLXdpbmRvdyAnYXBwZW5kKQogICAgKHJlbW92ZS1ob29rICd0ZW1w LWJ1ZmZlci1zaG93LWhvb2sgJ3Jlc2l6ZS10ZW1wLWJ1ZmZlci13aW5kb3cpKSkKCihkZWZ1biBy ZXNpemUtdGVtcC1idWZmZXItd2luZG93ICgmb3B0aW9uYWwgd2luZG93KQogICJSZXNpemUgV0lO RE9XIHRvIGZpdCBpdHMgY29udGVudHMuCldJTkRPVyBtdXN0IGJlIGEgbGl2ZSB3aW5kb3cgYW5k IGRlZmF1bHRzIHRvIHRoZSBzZWxlY3RlZCBvbmUuCkRvIG5vdCByZXNpemUgaWYgV0lORE9XIHdh cyBub3QgY3JlYXRlZCBieSBgZGlzcGxheS1idWZmZXInLgoKSWYgV0lORE9XIGlzIHBhcnQgb2Yg YSB2ZXJ0aWNhbCBjb21iaW5hdGlvbiwgcmVzdHJhaW4gaXRzIG5ldwpzaXplIGJ5IGB0ZW1wLWJ1 ZmZlci1tYXgtaGVpZ2h0JyBhbmQgZG8gbm90IHJlc2l6ZSBpZiBpdHMgbWluaW11bQphY2Nlc3Np YmxlIHBvc2l0aW9uIGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3LiAgSWYgV0lORE9XIGlzIHBhcnQK b2YgYSBob3Jpem9udGFsIGNvbWJpbmF0aW9uLCByZXN0cmFpbiBpdHMgbmV3IHNpemUgYnkKYHRl bXAtYnVmZmVyLW1heC13aWR0aCcuICBJbiBib3RoIGNhc2VzLCB0aGUgdmFsdWUgb2YgdGhlIG9w dGlvbgpgZml0LXdpbmRvdy10by1idWZmZXItaG9yaXpvbnRhbGx5JyBjYW4gaW5oaWJpdCByZXNp emluZy4KCklmIFdJTkRPVyBpcyB0aGUgcm9vdCB3aW5kb3cgb2YgaXRzIGZyYW1lLCByZXNpemUg dGhlIGZyYW1lCnByb3ZpZGVkIGBmaXQtZnJhbWUtdG8tYnVmZmVyJyBpcyBub24tbmlsLgoKVGhp cyBmdW5jdGlvbiBtYXkgY2FsbCBgcHJlc2VydmUtd2luZG93LXNpemUnIHRvIHByZXNlcnZlIHRo ZQpzaXplIG9mIFdJTkRPVy4iCiAgKHNldHEgd2luZG93ICh3aW5kb3ctbm9ybWFsaXplLXdpbmRv dyB3aW5kb3cgdCkpCiAgKGxldCAoKGhlaWdodCAoaWYgKGZ1bmN0aW9ucCB0ZW1wLWJ1ZmZlci1t YXgtaGVpZ2h0KQoJCSAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgd2luZG93CgkJICAgICAgKGZ1 bmNhbGwgdGVtcC1idWZmZXItbWF4LWhlaWdodCAod2luZG93LWJ1ZmZlcikpKQoJCSAgdGVtcC1i dWZmZXItbWF4LWhlaWdodCkpCgkod2lkdGggKGlmIChmdW5jdGlvbnAgdGVtcC1idWZmZXItbWF4 LXdpZHRoKQoJCSAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyB3aW5kb3cKCQkgICAgIChmdW5jYWxs IHRlbXAtYnVmZmVyLW1heC13aWR0aCAod2luZG93LWJ1ZmZlcikpKQoJCSB0ZW1wLWJ1ZmZlci1t YXgtd2lkdGgpKQoJKHF1aXQtY2FkciAoY2FkciAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1 aXQtcmVzdG9yZSkpKSkKICAgIDs7IFJlc2l6ZSBXSU5ET1cgaWZmIGl0IHdhcyBtYWRlIGJ5IGBk aXNwbGF5LWJ1ZmZlcicuCiAgICAod2hlbiAob3IgKGFuZCAoZXEgcXVpdC1jYWRyICd3aW5kb3cp CgkJICAgKG9yIChhbmQgKHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdykKCQkJICAgIChub3QgKGVx IGZpdC13aW5kb3ctdG8tYnVmZmVyLWhvcml6b250YWxseQoJCQkJICAgICAnb25seSkpCgkJCSAg ICAocG9zLXZpc2libGUtaW4td2luZG93LXAgKHBvaW50LW1pbikgd2luZG93KSkKCQkgICAgICAg KGFuZCAod2luZG93LWNvbWJpbmVkLXAgd2luZG93IHQpCgkJCSAgICBmaXQtd2luZG93LXRvLWJ1 ZmZlci1ob3Jpem9udGFsbHkpKSkKCSAgICAgIChhbmQgKGVxIHF1aXQtY2FkciAnZnJhbWUpCiAg ICAgICAgICAgICAgICAgICBmaXQtZnJhbWUtdG8tYnVmZmVyCiAgICAgICAgICAgICAgICAgICAo ZXEgd2luZG93IChmcmFtZS1yb290LXdpbmRvdyB3aW5kb3cpKSkpCgkoZml0LXdpbmRvdy10by1i dWZmZXIgd2luZG93IGhlaWdodCBuaWwgd2lkdGggbmlsIHQpKSkpCgo7OzsgSGVscCB3aW5kb3dz LgooZGVmY3VzdG9tIGhlbHAtd2luZG93LXNlbGVjdCBuaWwKICAiTm9uLW5pbCBtZWFucyBzZWxl Y3QgaGVscCB3aW5kb3cgZm9yIHZpZXdpbmcuCkNob2ljZXMgYXJlOgoKIG5ldmVyIChuaWwpIFNl bGVjdCBoZWxwIHdpbmRvdyBvbmx5IGlmIHRoZXJlIGlzIG5vIG90aGVyIHdpbmRvdwogICAgICAg ICAgICAgb24gaXRzIGZyYW1lLgoKIG90aGVyICAgICAgIFNlbGVjdCBoZWxwIHdpbmRvdyBpZiBh bmQgb25seSBpZiBpdCBhcHBlYXJzIG9uIHRoZQogICAgICAgICAgICAgcHJldmlvdXNseSBzZWxl Y3RlZCBmcmFtZSwgdGhhdCBmcmFtZSBjb250YWlucyBhdAogICAgICAgICAgICAgbGVhc3QgdHdv IG90aGVyIHdpbmRvd3MgYW5kIHRoZSBoZWxwIHdpbmRvdyBpcwogICAgICAgICAgICAgZWl0aGVy IG5ldyBvciBzaG93ZWQgYSBkaWZmZXJlbnQgYnVmZmVyIGJlZm9yZS4KCiBhbHdheXMgKHQpICBB bHdheXMgc2VsZWN0IHRoZSBoZWxwIHdpbmRvdy4KCklmIHRoaXMgb3B0aW9uIGlzIG5vbi1uaWwg YW5kIHRoZSBoZWxwIHdpbmRvdyBhcHBlYXJzIG9uIGFub3RoZXIKZnJhbWUsIHRoZW4gZ2l2ZSB0 aGF0IGZyYW1lIGlucHV0IGZvY3VzIHRvby4gIE5vdGUgYWxzbyB0aGF0IGlmCnRoZSBoZWxwIHdp bmRvdyBhcHBlYXJzIG9uIGFub3RoZXIgZnJhbWUsIGl0IG1heSBnZXQgc2VsZWN0ZWQgYW5kCml0 cyBmcmFtZSBnZXQgaW5wdXQgZm9jdXMgZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBuaWwuCgpUaGlz IG9wdGlvbiBoYXMgZWZmZWN0IGlmIGFuZCBvbmx5IGlmIHRoZSBoZWxwIHdpbmRvdyB3YXMgY3Jl YXRlZApieSBgd2l0aC1oZWxwLXdpbmRvdycuIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFn ICJuZXZlciAobmlsKSIgbmlsKQoJCSAoY29uc3QgOnRhZyAib3RoZXIiIG90aGVyKQoJCSAoY29u c3QgOnRhZyAiYWx3YXlzICh0KSIgdCkpCiAgOmdyb3VwICdoZWxwCiAgOnZlcnNpb24gIjIzLjEi KQoKKGRlZmN1c3RvbSBoZWxwLWVuYWJsZS1hdXRvLWxvYWQgdAogICJXaGV0aGVyIEhlbHAgY29t bWFuZHMgY2FuIHBlcmZvcm0gYXV0b2xvYWRpbmcuCklmIG5vbi1uaWwsIHdoZW5ldmVyIFxcW2Rl c2NyaWJlLWZ1bmN0aW9uXSBpcyBjYWxsZWQgZm9yIGFuCmF1dG9sb2FkZWQgZnVuY3Rpb24gd2hv c2UgZG9jc3RyaW5nIGNvbnRhaW5zIGFueSBrZXkgc3Vic3RpdHV0aW9uCmNvbnN0cnVjdCAoc2Vl IGBzdWJzdGl0dXRlLWNvbW1hbmQta2V5cycpLCB0aGUgbGlicmFyeSBpcyBsb2FkZWQsCnNvIHRo YXQgdGhlIGRvY3VtZW50YXRpb24gY2FuIHNob3cgdGhlIHJpZ2h0IGtleSBiaW5kaW5ncy4iCiAg OnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2hlbHAKICA6dmVyc2lvbiAiMjQuMyIpCgooZGVmdW4g aGVscC13aW5kb3ctZGlzcGxheS1tZXNzYWdlIChxdWl0LXBhcnQgd2luZG93ICZvcHRpb25hbCBz Y3JvbGwpCiAgIkRpc3BsYXkgbWVzc2FnZSB0ZWxsaW5nIGhvdyB0byBxdWl0IGFuZCBzY3JvbGwg aGVscCB3aW5kb3cuClFVSVQtUEFSVCBpcyBhIHN0cmluZyB0ZWxsaW5nIGhvdyB0byBxdWl0IHRo ZSBoZWxwIHdpbmRvdyBXSU5ET1cuCk9wdGlvbmFsIGFyZ3VtZW50IFNDUk9MTCBub24tbmlsIG1l YW5zIHRlbGwgaG93IHRvIHNjcm9sbCBXSU5ET1cuClNDUk9MTCBlcXVhbCBgb3RoZXInIG1lYW5z IHRlbGwgaG93IHRvIHNjcm9sbCB0aGUgXCJvdGhlclwiCndpbmRvdy4iCiAgKGxldCAoKHNjcm9s bC1wYXJ0CgkgKGNvbmQKCSAgOzsgSWYgd2UgZG9uJ3QgaGF2ZSBRVUlULVBBUlQgd2UgcHJvYmFi bHkgcmV1c2UgYSB3aW5kb3cKCSAgOzsgc2hvd2luZyB0aGUgc2FtZSBidWZmZXIgc28gd2UgZG9u J3Qgc2hvdyBhbnkgbWVzc2FnZS4KCSAgKChub3QgcXVpdC1wYXJ0KSBuaWwpCgkgICgocG9zLXZp c2libGUtaW4td2luZG93LXAKCSAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZl ciB3aW5kb3cpCgkgICAgICAocG9pbnQtbWF4KSkgd2luZG93IHQpCgkgICA7OyBCdWZmZXIgZW5k IGlzIGF0IGxlYXN0IHBhcnRpYWxseSB2aXNpYmxlLCBubyBuZWVkIHRvIHRhbGsKCSAgIDs7IGFi b3V0IHNjcm9sbGluZy4KCSAgICIuIikKCSAgKChlcSBzY3JvbGwgJ290aGVyKQoJICAgIiwgXFxb c2Nyb2xsLW90aGVyLXdpbmRvd10gdG8gc2Nyb2xsIGhlbHAuIikKCSAgKHNjcm9sbCAiLCBcXFtz Y3JvbGwtdXBdIHRvIHNjcm9sbCBoZWxwLiIpKSkpCiAgICAobWVzc2FnZSAiJXMiCiAgICAgKHN1 YnN0aXR1dGUtY29tbWFuZC1rZXlzIChjb25jYXQgcXVpdC1wYXJ0IHNjcm9sbC1wYXJ0KSkpKSkK CihkZWZ1biBoZWxwLXdpbmRvdy1zZXR1cCAod2luZG93ICZvcHRpb25hbCB2YWx1ZSkKICAiU2V0 IHVwIGhlbHAgd2luZG93IFdJTkRPVyBmb3IgYHdpdGgtaGVscC13aW5kb3cnLgpXSU5ET1cgaXMg dGhlIHdpbmRvdyB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBoZWxwIGJ1ZmZlci4KUmV0dXJuIFZB TFVFLiIKICAobGV0KiAoKGhlbHAtYnVmZmVyICh3aGVuICh3aW5kb3ctbGl2ZS1wIHdpbmRvdykK CQkJKHdpbmRvdy1idWZmZXIgd2luZG93KSkpCgkgKGhlbHAtc2V0dXAgKHdoZW4gKHdpbmRvdy1s aXZlLXAgd2luZG93KQoJCSAgICAgICAoY2FyICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVp dC1yZXN0b3JlKSkpKQoJIChmcmFtZSAod2luZG93LWZyYW1lIHdpbmRvdykpKQoKICAgICh3aGVu IGhlbHAtYnVmZmVyCiAgICAgIDs7IEhhbmRsZSBgaGVscC13aW5kb3ctcG9pbnQtbWFya2VyJy4K ICAgICAgKHdoZW4gKGVxIChtYXJrZXItYnVmZmVyIGhlbHAtd2luZG93LXBvaW50LW1hcmtlcikg aGVscC1idWZmZXIpCgkoc2V0LXdpbmRvdy1wb2ludCB3aW5kb3cgaGVscC13aW5kb3ctcG9pbnQt bWFya2VyKQoJOzsgUmVzZXQgYGhlbHAtd2luZG93LXBvaW50LW1hcmtlcicuCgkoc2V0LW1hcmtl ciBoZWxwLXdpbmRvdy1wb2ludC1tYXJrZXIgbmlsKSkKCiAgICAgIDs7IElmIHRoZSBoZWxwIHdp bmRvdyBhcHBlYXJzIG9uIGFub3RoZXIgZnJhbWUsIHNlbGVjdCBpdCBpZgogICAgICA7OyBgaGVs cC13aW5kb3ctc2VsZWN0JyBpcyBub24tbmlsIGFuZCBnaXZlIHRoYXQgZnJhbWUgaW5wdXQgZm9j dXMKICAgICAgOzsgdG9vLiAgU2VlIGFsc28gQnVnIzE5MDEyLgogICAgICAod2hlbiAoYW5kIGhl bHAtd2luZG93LXNlbGVjdAoJCSAoZnJhbWUtbGl2ZS1wIGhlbHAtd2luZG93LW9sZC1mcmFtZSkK CQkgKG5vdCAoZXEgZnJhbWUgaGVscC13aW5kb3ctb2xkLWZyYW1lKSkpCgkoc2VsZWN0LXdpbmRv dyB3aW5kb3cpCgkoc2VsZWN0LWZyYW1lLXNldC1pbnB1dC1mb2N1cyBmcmFtZSkpCgogICAgICAo Y29uZAogICAgICAgKChvciAoZXEgd2luZG93IChzZWxlY3RlZC13aW5kb3cpKQoJICAgIDs7IElm IHRoZSBoZWxwIHdpbmRvdyBpcyBvbiB0aGUgc2VsZWN0ZWQgZnJhbWUsIHNlbGVjdAoJICAgIDs7 IGl0IGlmIGBoZWxwLXdpbmRvdy1zZWxlY3QnIGlzIHQgb3IgYGhlbHAtd2luZG93LXNlbGVjdCcK CSAgICA7OyBpcyAnb3RoZXIsIHRoZSBmcmFtZSBjb250YWlucyBhdCBsZWFzdCB0aHJlZSB3aW5k b3dzLCBhbmQKCSAgICA7OyB0aGUgaGVscCB3aW5kb3cgZGlkIHNob3cgYW5vdGhlciBidWZmZXIg YmVmb3JlLiAgU2VlIGFsc28KCSAgICA7OyBCdWcjMTEwMzkuCgkgICAgKGFuZCAoZXEgZnJhbWUg KHNlbGVjdGVkLWZyYW1lKSkKCQkgKG9yIChlcSBoZWxwLXdpbmRvdy1zZWxlY3QgdCkKCQkgICAg IChhbmQgKGVxIGhlbHAtd2luZG93LXNlbGVjdCAnb3RoZXIpCgkJCSAgKD4gKGxlbmd0aCAod2lu ZG93LWxpc3QgbmlsICduby1taW5pKSkgMikKCQkJICAobm90IChlcSBoZWxwLXNldHVwICdzYW1l KSkpKQoJCSAoc2VsZWN0LXdpbmRvdyB3aW5kb3cpKSkKCTs7IFRoZSBoZWxwIHdpbmRvdyBpcyBv ciBnZXRzIHNlbGVjdGVkIC4uLgoJKGhlbHAtd2luZG93LWRpc3BsYXktbWVzc2FnZQoJIChjb25k CgkgICgoZXEgaGVscC1zZXR1cCAnd2luZG93KQoJICAgOzsgLi4uIGFuZCBpcyBuZXcsIC4uLgoJ ICAgIlR5cGUgXCJxXCIgdG8gZGVsZXRlIGhlbHAgd2luZG93IikKCSAgKChlcSBoZWxwLXNldHVw ICdmcmFtZSkKCSAgIDs7IC4uLiBvbiBhIG5ldyBmcmFtZSwgLi4uCgkgICAiVHlwZSBcInFcIiB0 byBxdWl0IHRoZSBoZWxwIGZyYW1lIikKCSAgKChlcSBoZWxwLXNldHVwICdvdGhlcikKCSAgIDs7 IC4uLiBvciBkaXNwbGF5ZWQgc29tZSBvdGhlciBidWZmZXIgYmVmb3JlLgoJICAgIlR5cGUgXCJx XCIgdG8gcmVzdG9yZSBwcmV2aW91cyBidWZmZXIiKSkKCSB3aW5kb3cgdCkpCiAgICAgICAoKGFu ZCAoZXEgKHdpbmRvdy1mcmFtZSB3aW5kb3cpIGhlbHAtd2luZG93LW9sZC1mcmFtZSkKCSAgICAg KD0gKGxlbmd0aCAod2luZG93LWxpc3QgbmlsICduby1taW5pKSkgMikpCgk7OyBUaGVyZSBhcmUg dHdvIHdpbmRvd3Mgb24gdGhlIGhlbHAgd2luZG93J3MgZnJhbWUgYW5kIHRoZQoJOzsgb3RoZXIg b25lIGlzIHRoZSBzZWxlY3RlZCBvbmUuCgkoaGVscC13aW5kb3ctZGlzcGxheS1tZXNzYWdlCgkg KGNvbmQKCSAgKChlcSBoZWxwLXNldHVwICd3aW5kb3cpCgkgICAiVHlwZSBcXFtkZWxldGUtb3Ro ZXItd2luZG93c10gdG8gZGVsZXRlIHRoZSBoZWxwIHdpbmRvdyIpCgkgICgoZXEgaGVscC1zZXR1 cCAnb3RoZXIpCgkgICAiVHlwZSBcInFcIiBpbiBoZWxwIHdpbmRvdyB0byByZXN0b3JlIGl0cyBw cmV2aW91cyBidWZmZXIiKSkKCSB3aW5kb3cgJ290aGVyKSkKICAgICAgICh0Cgk7OyBUaGUgaGVs cCB3aW5kb3cgaXMgbm90IHNlbGVjdGVkIC4uLgoJKGhlbHAtd2luZG93LWRpc3BsYXktbWVzc2Fn ZQoJIChjb25kCgkgICgoZXEgaGVscC1zZXR1cCAnd2luZG93KQoJICAgOzsgLi4uIGFuZCBpcyBu ZXcsIC4uLgoJICAgIlR5cGUgXCJxXCIgaW4gaGVscCB3aW5kb3cgdG8gZGVsZXRlIGl0IikKCSAg KChlcSBoZWxwLXNldHVwICdvdGhlcikKCSAgIDs7IC4uLiBvciBkaXNwbGF5ZWQgc29tZSBvdGhl ciBidWZmZXIgYmVmb3JlLgoJICAgIlR5cGUgXCJxXCIgaW4gaGVscCB3aW5kb3cgdG8gcmVzdG9y ZSBwcmV2aW91cyBidWZmZXIiKSkKCSB3aW5kb3cpKSkpCiAgICA7OyBSZXR1cm4gVkFMVUUuCiAg ICB2YWx1ZSkpCgo7OyBgd2l0aC1oZWxwLXdpbmRvdycgaXMgYSB3cmFwcGVyIGZvciBgd2l0aC10 ZW1wLWJ1ZmZlci13aW5kb3cnCjs7IHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwg dHdpc3RzOgoKOzsgKDEpIEl0IHB1dHMgdGhlIGJ1ZmZlciBpbiBgaGVscC1tb2RlJyAodmlhIGBo ZWxwLW1vZGUtc2V0dXAnKSBhbmQKOzsgICAgIGFkZHMgY3Jvc3MgcmVmZXJlbmNlcyAodmlhIGBo ZWxwLW1vZGUtZmluaXNoJykuCgo7OyAoMikgSXQgaXNzdWVzIGEgbWVzc2FnZSB0ZWxsaW5nIGhv dyB0byBzY3JvbGwgYW5kIHF1aXQgdGhlIGhlbHAKOzsgICAgIHdpbmRvdyAodmlhIGBoZWxwLXdp bmRvdy1zZXR1cCcpLgoKOzsgKDMpIEFuIG9wdGlvbiAoY3VzdG9taXphYmxlIHZpYSBgaGVscC13 aW5kb3ctc2VsZWN0JykgdG8gc2VsZWN0IHRoZQo7OyAgICAgaGVscCB3aW5kb3cgYXV0b21hdGlj YWxseS4KCjs7ICg0KSBBIG1hcmtlciAoYGhlbHAtd2luZG93LXBvaW50LW1hcmtlcicpIHRvIG1v dmUgcG9pbnQgaW4gdGhlIGhlbHAKOzsgICAgIHdpbmRvdyB0byBhbiBhcmJpdHJhcnkgYnVmZmVy IHBvc2l0aW9uLgooZGVmbWFjcm8gd2l0aC1oZWxwLXdpbmRvdyAoYnVmZmVyLW5hbWUgJnJlc3Qg Ym9keSkKICAiRGlzcGxheSBidWZmZXIgbmFtZWQgQlVGRkVSLU5BTUUgaW4gYSBoZWxwIHdpbmRv dy4KRXZhbHVhdGUgdGhlIGZvcm1zIGluIEJPRFkgd2l0aCBzdGFuZGFyZCBvdXRwdXQgYm91bmQg dG8gYSBidWZmZXIKY2FsbGVkIEJVRkZFUi1OQU1FIChjcmVhdGluZyBpdCBpZiBpdCBkb2VzIG5v dCBleGlzdCksIHB1dCB0aGF0CmJ1ZmZlciBpbiBgaGVscC1tb2RlJywgZGlzcGxheSB0aGUgYnVm ZmVyIGluIGEgd2luZG93IChzZWUKYHdpdGgtdGVtcC1idWZmZXItd2luZG93JyBmb3IgZGV0YWls cykgYW5kIGlzc3VlIGEgbWVzc2FnZSBob3cgdG8KZGVhbCB3aXRoIHRoYXQgXCJoZWxwXCIgd2lu ZG93IHdoZW4gaXQncyBubyBtb3JlIG5lZWRlZC4gIFNlbGVjdAp0aGUgaGVscCB3aW5kb3cgaWYg dGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHVzZXIgb3B0aW9uCmBoZWxwLXdpbmRvdy1zZWxlY3Qn IHNheXMgc28uICBSZXR1cm4gbGFzdCB2YWx1ZSBpbiBCT0RZLiIKICAoZGVjbGFyZSAoaW5kZW50 IDEpIChkZWJ1ZyB0KSkKICBgKHByb2duCiAgICAgOzsgTWFrZSBgaGVscC13aW5kb3ctcG9pbnQt bWFya2VyJyBwb2ludCBub3doZXJlLiAgVGhlIG9ubHkgcGxhY2UKICAgICA7OyB3aGVyZSB0aGlz IHNob3VsZCBiZSBzZXQgdG8gYSBidWZmZXIgcG9zaXRpb24gaXMgd2l0aGluIEJPRFkuCiAgICAg KHNldC1tYXJrZXIgaGVscC13aW5kb3ctcG9pbnQtbWFya2VyIG5pbCkKICAgICAobGV0ICgodGVt cC1idWZmZXItd2luZG93LXNldHVwLWhvb2sKCSAgICAoY29ucyAnaGVscC1tb2RlLXNldHVwIHRl bXAtYnVmZmVyLXdpbmRvdy1zZXR1cC1ob29rKSkKCSAgICh0ZW1wLWJ1ZmZlci13aW5kb3ctc2hv dy1ob29rCgkgICAgKGNvbnMgJ2hlbHAtbW9kZS1maW5pc2ggdGVtcC1idWZmZXItd2luZG93LXNo b3ctaG9vaykpKQogICAgICAgKHNldHEgaGVscC13aW5kb3ctb2xkLWZyYW1lIChzZWxlY3RlZC1m cmFtZSkpCiAgICAgICAod2l0aC10ZW1wLWJ1ZmZlci13aW5kb3cKCSxidWZmZXItbmFtZSBuaWwg J2hlbHAtd2luZG93LXNldHVwIChwcm9nbiAsQGJvZHkpKSkpKQoKOzsgQ2FsbGVkIGZyb20gQywg b24gZW5jb3VudGVyaW5nIGBoZWxwLWNoYXInIHdoZW4gcmVhZGluZyBhIGNoYXIuCjs7IERvbid0 IHByaW50IHRvICpIZWxwKjsgdGhhdCB3b3VsZCBjbG9iYmVyIEhlbHAgaGlzdG9yeS4KKGRlZnVu IGhlbHAtZm9ybS1zaG93ICgpCiAgIkRpc3BsYXkgdGhlIG91dHB1dCBvZiBhIG5vbi1uaWwgYGhl bHAtZm9ybScuIgogIChsZXQgKChtc2cgKGV2YWwgaGVscC1mb3JtKSkpCiAgICAoaWYgKHN0cmlu Z3AgbXNnKQoJKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIgKkNoYXIgSGVscCoiCgkgIChw cmluYyBtc2cpKSkpKQoKDAooZGVmdW4gaGVscC0tZG9jc3RyaW5nLXF1b3RlIChzdHJpbmcpCiAg IlJldHVybiBhIGRvYyBzdHJpbmcgdGhhdCByZXByZXNlbnRzIFNUUklORy4KVGhlIHJlc3VsdCwg d2hlbiBmb3JtYXR0ZWQgYnkgYHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzJywgc2hvdWxkIGVxdWFs IFNUUklORy4iCiAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiWydcXGDigJjigJldIiAiXFxc XD1cXCYiIHN0cmluZykpCgo7OyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB1c2VkIHRvIGJlIGlu IGhlbHAtZm5zLmVsLCB3aGljaCBpcyBub3QgcHJlbG9hZGVkLgo7OyBCdXQgZm9yIHZhcmlvdXMg cmVhc29ucywgdGhleSBhcmUgbW9yZSB3aWRlbHkgbmVlZGVkLCBzbyB0aGV5IHdlcmUKOzsgbW92 ZWQgdG8gdGhpcyBmaWxlLCB3aGljaCBpcyBwcmVsb2FkZWQuICBodHRwczovL2RlYmJ1Z3MuZ251 Lm9yZy8xNzAwMQoKKGRlZnVuIGhlbHAtc3BsaXQtZnVuZG9jIChkb2NzdHJpbmcgZGVmKQogICJT cGxpdCBhIGZ1bmN0aW9uIERPQ1NUUklORyBpbnRvIHRoZSBhY3R1YWwgZG9jIGFuZCB0aGUgdXNh Z2UgaW5mby4KUmV0dXJuIChVU0FHRSAuIERPQykgb3IgbmlsIGlmIHRoZXJlJ3Mgbm8gdXNhZ2Ug aW5mbywgd2hlcmUgVVNBR0UgaW5mbwppcyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhcmd1bWVu dCBsaXN0IG9mIERFRiwgc3VjaCBhcwpcIihhcHBseSBGVU5DVElPTiAmcmVzdCBBUkdVTUVOVFMp XCIuCkRFRiBpcyB0aGUgZnVuY3Rpb24gd2hvc2UgdXNhZ2Ugd2UncmUgbG9va2luZyBmb3IgaW4g RE9DU1RSSU5HLiIKICA7OyBGdW5jdGlvbnMgY2FuIGdldCB0aGUgY2FsbGluZyBzZXF1ZW5jZSBh dCB0aGUgZW5kIG9mIHRoZSBkb2Mgc3RyaW5nLgogIDs7IEluIGNhc2VzIHdoZXJlIGBmdW5jdGlv bicgaGFzIGJlZW4gZnNldCB0byBhIHN1YnIgd2UgY2FuJ3Qgc2VhcmNoIGZvcgogIDs7IGZ1bmN0 aW9uJ3MgbmFtZSBpbiB0aGUgZG9jIHN0cmluZyBzbyB3ZSB1c2UgYGZuJyBhcyB0aGUgYW5vbnlt b3VzCiAgOzsgZnVuY3Rpb24gbmFtZSBpbnN0ZWFkLgogICh3aGVuIChhbmQgZG9jc3RyaW5nIChz dHJpbmctbWF0Y2ggIlxuXG4oZm5cXChcXCggLipcXCk/KVxcKVxcJyIgZG9jc3RyaW5nKSkKICAg IChsZXQgKChkb2MgKHVubGVzcyAoemVyb3AgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgKHN1YnN0 cmluZyBkb2NzdHJpbmcgMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkpCgkgICh1c2FnZS10YWlsICht YXRjaC1zdHJpbmcgMSBkb2NzdHJpbmcpKSkKICAgICAgKGNvbnMgKGZvcm1hdCAiKCVzJXMiCgkJ ICAgIDs7IFJlcGxhY2UgYGZuJyB3aXRoIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZS4KCQkgICAg KGlmIChzeW1ib2xwIGRlZikKCQkJKGhlbHAtLWRvY3N0cmluZy1xdW90ZSAoZm9ybWF0ICIlUyIg ZGVmKSkKCQkgICAgICAnYW5vbnltb3VzKQoJCSAgICB1c2FnZS10YWlsKQoJICAgIGRvYykpKSkK CihkZWZ1biBoZWxwLWFkZC1mdW5kb2MtdXNhZ2UgKGRvY3N0cmluZyBhcmdsaXN0KQogICJBZGQg dGhlIHVzYWdlIGluZm8gdG8gRE9DU1RSSU5HLgpJZiBET0NTVFJJTkcgYWxyZWFkeSBoYXMgYSB1 c2FnZSBpbmZvLCB0aGVuIGp1c3QgcmV0dXJuIGl0IHVuY2hhbmdlZC4KVGhlIHVzYWdlIGluZm8g aXMgYnVpbHQgZnJvbSBBUkdMSVNULiAgRE9DU1RSSU5HIGNhbiBiZSBuaWwuCkFSR0xJU1QgY2Fu IGFsc28gYmUgdCBvciBhIHN0cmluZyBvZiB0aGUgZm9ybSBcIihGVU4gQVJHMSBBUkcyIC4uLilc Ii4iCiAgKHVubGVzcyAoc3RyaW5ncCBkb2NzdHJpbmcpIChzZXRxIGRvY3N0cmluZyAiIikpCiAg KGlmIChvciAoc3RyaW5nLW1hdGNoICJcblxuKGZuXFwoXFwoIC4qXFwpPylcXClcXCciIGRvY3N0 cmluZykKICAgICAgICAgIChlcSBhcmdsaXN0IHQpKQogICAgICBkb2NzdHJpbmcKICAgIChjb25j YXQgZG9jc3RyaW5nCgkgICAgKGlmIChzdHJpbmctbWF0Y2ggIlxuP1xuXFwnIiBkb2NzdHJpbmcp CgkJKGlmICg8ICgtIChtYXRjaC1lbmQgMCkgKG1hdGNoLWJlZ2lubmluZyAwKSkgMikgIlxuIiAi IikKCSAgICAgICJcblxuIikKCSAgICAoaWYgKHN0cmluZ3AgYXJnbGlzdCkKICAgICAgICAgICAg ICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXGBbXiBdK1xcKC4qXFwpKVxcJyIgYXJnbGlzdCkKICAg ICAgICAgICAgICAgICAgICAoY29uY2F0ICIoZm4iIChtYXRjaC1zdHJpbmcgMSBhcmdsaXN0KSAi KSIpCiAgICAgICAgICAgICAgICAgIChlcnJvciAiVW5yZWNvZ25pemVkIHVzYWdlIGZvcm1hdCIp KQoJICAgICAgKGhlbHAtLW1ha2UtdXNhZ2UtZG9jc3RyaW5nICdmbiBhcmdsaXN0KSkpKSkKCihk ZWZ1biBoZWxwLWZ1bmN0aW9uLWFyZ2xpc3QgKGRlZiAmb3B0aW9uYWwgcHJlc2VydmUtbmFtZXMp CiAgIlJldHVybiBhIGZvcm1hbCBhcmd1bWVudCBsaXN0IGZvciB0aGUgZnVuY3Rpb24gREVGLgpJ ZiBQUkVTRVJWRS1OQU1FUyBpcyBub24tbmlsLCByZXR1cm4gYSBmb3JtYWwgYXJnbGlzdCB0aGF0 IHVzZXMKdGhlIHNhbWUgbmFtZXMgYXMgdXNlZCBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUs IHdoZW4gcG9zc2libGUuIgogIDs7IEhhbmRsZSBzeW1ib2xzIGFsaWFzZWQgdG8gb3RoZXIgc3lt Ym9scy4KICAoaWYgKGFuZCAoc3ltYm9scCBkZWYpIChmYm91bmRwIGRlZikpIChzZXRxIGRlZiAo aW5kaXJlY3QtZnVuY3Rpb24gZGVmKSkpCiAgOzsgQWR2aWNlIHdyYXBwZXJzIGhhdmUgImNhdGNo IGFsbCIgYXJncywgc28gZmV0Y2ggdGhlIGFjdHVhbCB1bmRlcmx5aW5nCiAgOzsgZnVuY3Rpb24g dG8gZmluZCB0aGUgcmVhbCBhcmd1bWVudHMuCiAgKHdoaWxlIChhZHZpY2UtLXAgZGVmKSAoc2V0 cSBkZWYgKGFkdmljZS0tY2RyIGRlZikpKQogIDs7IElmIGRlZmluaXRpb24gaXMgYSBtYWNybywg ZmluZCB0aGUgZnVuY3Rpb24gaW5zaWRlIGl0LgogIChpZiAoZXEgKGNhci1zYWZlIGRlZikgJ21h Y3JvKSAoc2V0cSBkZWYgKGNkciBkZWYpKSkKICAoY29uZAogICAoKGFuZCAoYnl0ZS1jb2RlLWZ1 bmN0aW9uLXAgZGVmKSAobGlzdHAgKGFyZWYgZGVmIDApKSkgKGFyZWYgZGVmIDApKQogICAoKGVx IChjYXItc2FmZSBkZWYpICdsYW1iZGEpIChudGggMSBkZWYpKQogICAoKGVxIChjYXItc2FmZSBk ZWYpICdjbG9zdXJlKSAobnRoIDIgZGVmKSkKICAgKChvciAoYW5kIChieXRlLWNvZGUtZnVuY3Rp b24tcCBkZWYpIChpbnRlZ2VycCAoYXJlZiBkZWYgMCkpKQogICAgICAgIChzdWJycCBkZWYpICht b2R1bGUtZnVuY3Rpb24tcCBkZWYpKQogICAgKG9yICh3aGVuIHByZXNlcnZlLW5hbWVzCiAgICAg ICAgICAobGV0KiAoKGRvYyAoY29uZGl0aW9uLWNhc2UgbmlsIChkb2N1bWVudGF0aW9uIGRlZikg KGVycm9yIG5pbCkpKQogICAgICAgICAgICAgICAgIChkb2NhcmdzIChpZiBkb2MgKGNhciAoaGVs cC1zcGxpdC1mdW5kb2MgZG9jIG5pbCkpKSkKICAgICAgICAgICAgICAgICAoYXJnbGlzdCAoaWYg ZG9jYXJncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RhciAocmVhZC1mcm9tLXN0 cmluZyAoZG93bmNhc2UgZG9jYXJncykpKSkpCiAgICAgICAgICAgICAgICAgKHZhbGlkIHQpKQog ICAgICAgICAgICA7OyBDaGVjayB2YWxpZGl0eS4KICAgICAgICAgICAgKGRvbGlzdCAoYXJnIGFy Z2xpc3QpCiAgICAgICAgICAgICAgKHVubGVzcyAoYW5kIChzeW1ib2xwIGFyZykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxldCAoKG5hbWUgKHN5bWJvbC1uYW1lIGFyZykpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGFyZWYgbmFtZSAwKSA/JikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1lbXEgYXJnICcoJnJlc3QgJm9wdGlvbmFsKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHN0cmluZy1tYXRjaCAiXFwuIiBuYW1l KSkpKSkKICAgICAgICAgICAgICAgIChzZXRxIHZhbGlkIG5pbCkpKQogICAgICAgICAgICAod2hl biB2YWxpZCBhcmdsaXN0KSkpCiAgICAgICAgKGxldCogKChhcml0eSAoZnVuYy1hcml0eSBkZWYp KQogICAgICAgICAgICAgICAobWF4IChjZHIgYXJpdHkpKQogICAgICAgICAgICAgICAobWluIChj YXIgYXJpdHkpKQogICAgICAgICAgICAgICAoYXJnbGlzdCAoKSkpCiAgICAgICAgICAoZG90aW1l cyAoaSBtaW4pCiAgICAgICAgICAgIChwdXNoIChpbnRlcm4gKGNvbmNhdCAiYXJnIiAobnVtYmVy LXRvLXN0cmluZyAoMSsgaSkpKSkgYXJnbGlzdCkpCiAgICAgICAgICAod2hlbiAoYW5kIChpbnRl Z2VycCBtYXgpICg+IG1heCBtaW4pKQogICAgICAgICAgICAocHVzaCAnJm9wdGlvbmFsIGFyZ2xp c3QpCiAgICAgICAgICAgIChkb3RpbWVzIChpICgtIG1heCBtaW4pKQogICAgICAgICAgICAgIChw dXNoIChpbnRlcm4gKGNvbmNhdCAiYXJnIiAobnVtYmVyLXRvLXN0cmluZyAoKyAxIGkgbWluKSkp KQogICAgICAgICAgICAgICAgICAgIGFyZ2xpc3QpKSkKICAgICAgICAgICh1bmxlc3MgKGludGVn ZXJwIG1heCkgKHB1c2ggJyZyZXN0IGFyZ2xpc3QpIChwdXNoICdyZXN0IGFyZ2xpc3QpKQogICAg ICAgICAgKG5yZXZlcnNlIGFyZ2xpc3QpKSkpCiAgICgoYW5kIChhdXRvbG9hZHAgZGVmKSAobm90 IChlcSAobnRoIDQgZGVmKSAna2V5bWFwKSkpCiAgICAiW0FyZyBsaXN0IG5vdCBhdmFpbGFibGUg dW50aWwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBsb2FkZWQuXSIpCiAgICh0IHQpKSkKCihkZWZ1 biBoZWxwLS1tYWtlLXVzYWdlIChmdW5jdGlvbiBhcmdsaXN0KQogIChjb25zIChpZiAoc3ltYm9s cCBmdW5jdGlvbikgZnVuY3Rpb24gJ2Fub255bW91cykKCShtYXBjYXIgKGxhbWJkYSAoYXJnKQoJ CSAgKGlmIChub3QgKHN5bWJvbHAgYXJnKSkgYXJnCgkJICAgIChsZXQgKChuYW1lIChzeW1ib2wt bmFtZSBhcmcpKSkKCQkgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5n LW1hdGNoICJcXGAmIiBuYW1lKSBhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgKChzdHJpbmct bWF0Y2ggIlxcYF8uIiBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJuICh1cGNh c2UgKHN1YnN0cmluZyBuYW1lIDEpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHQgKGludGVy biAodXBjYXNlIG5hbWUpKSkpKSkpCgkJYXJnbGlzdCkpKQoKKGRlZmluZS1vYnNvbGV0ZS1mdW5j dGlvbi1hbGlhcyAnaGVscC1tYWtlLXVzYWdlICdoZWxwLS1tYWtlLXVzYWdlICIyNS4xIikKCihk ZWZ1biBoZWxwLS1tYWtlLXVzYWdlLWRvY3N0cmluZyAoZm4gYXJnbGlzdCkKICAobGV0ICgocHJp bnQtZXNjYXBlLW5ld2xpbmVzIHQpKQogICAgKGhlbHAtLWRvY3N0cmluZy1xdW90ZSAoZm9ybWF0 ICIlUyIgKGhlbHAtLW1ha2UtdXNhZ2UgZm4gYXJnbGlzdCkpKSkpCgoMCihwcm92aWRlICdoZWxw KQoKOzs7IGhlbHAuZWwgZW5kcyBoZXJlCg== --_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: text/plain; name="diffActualAndNewhelp.txt" Content-Description: diffActualAndNewhelp.txt Content-Disposition: attachment; filename="diffActualAndNewhelp.txt"; size=1035; creation-date="Wed, 14 Mar 2018 13:46:22 GMT"; modification-date="Wed, 14 Mar 2018 13:46:22 GMT" Content-Transfer-Encoding: base64 Z2VzcGVuc3RAZGViaWFuOn4vQnVyZWF1JCBkaWZmIC11IGhlbHAuZWwgQWN1dGFsLWhlbHAuZWwg Ci0tLSBoZWxwLmVsCTIwMTgtMDMtMDkgMjA6MTQ6MzEuNDkyMDAwMDAwICswMTAwCisrKyBBY3V0 YWwtaGVscC5lbAkyMDE4LTAzLTAzIDE1OjA5OjQ3LjY1MjAwMDAwMCArMDEwMApAQCAtNjksOCAr NjksNyBAQAogICAgIChkZWZpbmUta2V5IG1hcCAiXEMtcCIgJ3ZpZXctZW1hY3MtcHJvYmxlbXMp CiAgICAgKGRlZmluZS1rZXkgbWFwICJcQy10IiAndmlldy1lbWFjcy10b2RvKQogICAgIChkZWZp bmUta2V5IG1hcCAiXEMtdyIgJ2Rlc2NyaWJlLW5vLXdhcnJhbnR5KQotICAgIChkZWZpbmUta2V5 IG1hcCAiXEMtcyIgJ3NlYXJjaC1mb3J3YXJkLWhlbHAtZm9yLWhlbHApCi0gICAgCisKICAgICA7 OyBUaGlzIGRvZXMgbm90IGZpdCB0aGUgcGF0dGVybiwgYnV0IGl0IGlzIG5hdHVyYWwgZ2l2ZW4g dGhlIEMtXCBjb21tYW5kLgogICAgIChkZWZpbmUta2V5IG1hcCAiXEMtXFwiICdkZXNjcmliZS1p bnB1dC1tZXRob2QpCiAKQEAgLTk5NCwxNiArOTkzLDYgQEAKICAgICAgKHQKICAgICAgIChlcnJv ciAiTm8gc3VjaCBtaW5vciBtb2RlOiAlcyIgbWlub3ItbW9kZSkpKSkpCiAKLQotKGRlZnVuIHNl YXJjaC1mb3J3YXJkLWhlbHAtZm9yLWhlbHAoKQotICAiQWxsb3dzIHRvIHJlc2VhcmNoIGZvcndh cmQgYSBzdHJpbmcgaW50byB0aGUgKk1ldGFoZWxwKiB3aW5kb3ciCi0gIChpbnRlcmFjdGl2ZSkK LSAgOztNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSAqTWV0YWhlbHAqIHdpbmRvdwotICAoc3dpdGNo LXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgIiAqTWV0YWhlbHAqIikKLSAgOzsgRG8gaW5jcmVtZW50 YWwgc2VhcmNoIGZvcndhcmQuCi0gIChpc2VhcmNoLWZvcndhcmQgbmlsIDEpKQotCi0KIDs7IHN5 bWJvbAogKGRlZnVuIGRlc2NyaWJlLW1pbm9yLW1vZGUtY29tcGxldGlvbi10YWJsZS1mb3Itc3lt Ym9sICgpCiAgIDs7IEluIG9yZGVyIHRvIGxpc3QgdXAgYWxsIG1pbm9yIG1vZGVzLCBtaW5vci1t b2RlLWxpc3QK --_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_ Content-Type: text/x-emacs-lisp; name="help.el" Content-Description: help.el Content-Disposition: attachment; filename="help.el"; size=60446; creation-date="Wed, 14 Mar 2018 13:46:26 GMT"; modification-date="Wed, 14 Mar 2018 13:46:26 GMT" Content-Transfer-Encoding: base64 Ozs7IGhlbHAuZWwgLS0tIGhlbHAgY29tbWFuZHMgZm9yIEVtYWNzICAtKi0gbGV4aWNhbC1iaW5k aW5nOnQgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDE5ODUtMTk4NiwgMTk5My0xOTk0LCAxOTk4LTIw MTggRnJlZSBTb2Z0d2FyZQo7OyBGb3VuZGF0aW9uLCBJbmMuCgo7OyBNYWludGFpbmVyOiBlbWFj cy1kZXZlbEBnbnUub3JnCjs7IEtleXdvcmRzOiBoZWxwLCBpbnRlcm5hbAo7OyBQYWNrYWdlOiBl bWFjcwoKOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVtYWNzIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KCjs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIEdOVSBFbWFj cy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgo7OzsgQ29t bWVudGFyeToKCjs7IFRoaXMgY29kZSBpbXBsZW1lbnRzIEdOVSBFbWFjcydzIGJ1aWx0LWluIGhl bHAgc3lzdGVtLCB0aGUgb25lIGludm9rZWQgYnkKOzsgYE0teCBoZWxwLWZvci1oZWxwJy4KCjs7 OyBDb2RlOgoKOzsgR2V0IHRoZSBtYWNybyBtYWtlLWhlbHAtc2NyZWVuIHdoZW4gdGhpcyBpcyBj b21waWxlZCwKOzsgb3IgcnVuIGludGVycHJldGVkLCBidXQgbm90IHdoZW4gdGhlIGNvbXBpbGVk IGNvZGUgaXMgbG9hZGVkLgooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2hlbHAtbWFjcm8p KQoKOzsgVGhpcyBtYWtlcyBgd2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXInIGJ1ZmZlcnMgdXNl IGBoZWxwLW1vZGUnLgooYWRkLWhvb2sgJ3RlbXAtYnVmZmVyLXNldHVwLWhvb2sgJ2hlbHAtbW9k ZS1zZXR1cCkKKGFkZC1ob29rICd0ZW1wLWJ1ZmZlci1zaG93LWhvb2sgJ2hlbHAtbW9kZS1maW5p c2gpCgo7OyBgaGVscC13aW5kb3ctcG9pbnQtbWFya2VyJyBpcyBhIG1hcmtlciB5b3UgY2FuIG1v dmUgdG8gYSB2YWxpZAo7OyBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyIHNob3duIGluIHRoZSBoZWxw IHdpbmRvdyBpbiBvcmRlciB0byBvdmVycmlkZQo7OyB0aGUgc3RhbmRhcmQgcG9zaXRpb25pbmcg bWVjaGFuaXNtIChgcG9pbnQtbWluJykgY2hvc2VuIGJ5Cjs7IGB3aXRoLW91dHB1dC10by10ZW1w LWJ1ZmZlcicgYW5kIGB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycuCjs7IGB3aXRoLWhlbHAtd2lu ZG93JyBoYXMgdGhpcyBwb2ludCBub3doZXJlIGJlZm9yZSBleGl0aW5nLiAgQ3VycmVudGx5Cjs7 IHVzZWQgYnkgYHZpZXctbG9zc2FnZScgdG8gYXNzZXJ0IHRoYXQgdGhlIGxhc3Qga2V5c3Ryb2tl cyBhcmUgYWx3YXlzCjs7IHZpc2libGUuCihkZWZ2YXIgaGVscC13aW5kb3ctcG9pbnQtbWFya2Vy IChtYWtlLW1hcmtlcikKICAiTWFya2VyIHRvIG92ZXJyaWRlIGRlZmF1bHQgYHdpbmRvdy1wb2lu dCcgaW4gaGVscCB3aW5kb3dzLiIpCgooZGVmdmFyIGhlbHAtd2luZG93LW9sZC1mcmFtZSBuaWwK ICAiRnJhbWUgc2VsZWN0ZWQgYXQgdGhlIHRpbWUgYHdpdGgtaGVscC13aW5kb3cnIGlzIGludm9r ZWQuIikKCihkZWZ2YXIgaGVscC1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXAp KSkKICAgIChkZWZpbmUta2V5IG1hcCAoY2hhci10by1zdHJpbmcgaGVscC1jaGFyKSAnaGVscC1m b3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCBbaGVscF0gJ2hlbHAtZm9yLWhlbHApCiAgICAo ZGVmaW5lLWtleSBtYXAgW2YxXSAnaGVscC1mb3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAi LiIgJ2Rpc3BsYXktbG9jYWwtaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAiPyIgJ2hlbHAtZm9y LWhlbHApCgogICAgKGRlZmluZS1rZXkgbWFwICJcQy1hIiAnYWJvdXQtZW1hY3MpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLWMiICdkZXNjcmliZS1jb3B5aW5nKQogICAgKGRlZmluZS1rZXkgbWFw ICJcQy1kIiAndmlldy1lbWFjcy1kZWJ1Z2dpbmcpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWUi ICd2aWV3LWV4dGVybmFsLXBhY2thZ2VzKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1mIiAndmll dy1lbWFjcy1GQVEpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLW0iICd2aWV3LW9yZGVyLW1hbnVh bHMpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLW4iICd2aWV3LWVtYWNzLW5ld3MpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLW8iICdkZXNjcmliZS1kaXN0cmlidXRpb24pCiAgICAoZGVmaW5lLWtl eSBtYXAgIlxDLXAiICd2aWV3LWVtYWNzLXByb2JsZW1zKQogICAgKGRlZmluZS1rZXkgbWFwICJc Qy10IiAndmlldy1lbWFjcy10b2RvKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy13IiAnZGVzY3Jp YmUtbm8td2FycmFudHkpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLXMiICdzZWFyY2gtZm9yd2Fy ZC1oZWxwLWZvci1oZWxwKQogICAgCiAgICA7OyBUaGlzIGRvZXMgbm90IGZpdCB0aGUgcGF0dGVy biwgYnV0IGl0IGlzIG5hdHVyYWwgZ2l2ZW4gdGhlIEMtXCBjb21tYW5kLgogICAgKGRlZmluZS1r ZXkgbWFwICJcQy1cXCIgJ2Rlc2NyaWJlLWlucHV0LW1ldGhvZCkKCiAgICAoZGVmaW5lLWtleSBt YXAgIkMiICdkZXNjcmliZS1jb2Rpbmctc3lzdGVtKQogICAgKGRlZmluZS1rZXkgbWFwICJGIiAn SW5mby1nb3RvLWVtYWNzLWNvbW1hbmQtbm9kZSkKICAgIChkZWZpbmUta2V5IG1hcCAiSSIgJ2Rl c2NyaWJlLWlucHV0LW1ldGhvZCkKICAgIChkZWZpbmUta2V5IG1hcCAiSyIgJ0luZm8tZ290by1l bWFjcy1rZXktY29tbWFuZC1ub2RlKQogICAgKGRlZmluZS1rZXkgbWFwICJMIiAnZGVzY3JpYmUt bGFuZ3VhZ2UtZW52aXJvbm1lbnQpCiAgICAoZGVmaW5lLWtleSBtYXAgIlMiICdpbmZvLWxvb2t1 cC1zeW1ib2wpCgogICAgKGRlZmluZS1rZXkgbWFwICJhIiAnYXByb3Bvcy1jb21tYW5kKQogICAg KGRlZmluZS1rZXkgbWFwICJiIiAnZGVzY3JpYmUtYmluZGluZ3MpCiAgICAoZGVmaW5lLWtleSBt YXAgImMiICdkZXNjcmliZS1rZXktYnJpZWZseSkKICAgIChkZWZpbmUta2V5IG1hcCAiZCIgJ2Fw cm9wb3MtZG9jdW1lbnRhdGlvbikKICAgIChkZWZpbmUta2V5IG1hcCAiZSIgJ3ZpZXctZWNoby1h cmVhLW1lc3NhZ2VzKQogICAgKGRlZmluZS1rZXkgbWFwICJmIiAnZGVzY3JpYmUtZnVuY3Rpb24p CiAgICAoZGVmaW5lLWtleSBtYXAgImciICdkZXNjcmliZS1nbnUtcHJvamVjdCkKICAgIChkZWZp bmUta2V5IG1hcCAiaCIgJ3ZpZXctaGVsbG8tZmlsZSkKCiAgICAoZGVmaW5lLWtleSBtYXAgImki ICdpbmZvKQogICAgKGRlZmluZS1rZXkgbWFwICI0aSIgJ2luZm8tb3RoZXItd2luZG93KQoKICAg IChkZWZpbmUta2V5IG1hcCAiayIgJ2Rlc2NyaWJlLWtleSkKICAgIChkZWZpbmUta2V5IG1hcCAi bCIgJ3ZpZXctbG9zc2FnZSkKICAgIChkZWZpbmUta2V5IG1hcCAibSIgJ2Rlc2NyaWJlLW1vZGUp CiAgICAoZGVmaW5lLWtleSBtYXAgIm8iICdkZXNjcmliZS1zeW1ib2wpCiAgICAoZGVmaW5lLWtl eSBtYXAgIm4iICd2aWV3LWVtYWNzLW5ld3MpCiAgICAoZGVmaW5lLWtleSBtYXAgInAiICdmaW5k ZXItYnkta2V5d29yZCkKICAgIChkZWZpbmUta2V5IG1hcCAiUCIgJ2Rlc2NyaWJlLXBhY2thZ2Up CiAgICAoZGVmaW5lLWtleSBtYXAgInIiICdpbmZvLWVtYWNzLW1hbnVhbCkKICAgIChkZWZpbmUt a2V5IG1hcCAicyIgJ2Rlc2NyaWJlLXN5bnRheCkKICAgIChkZWZpbmUta2V5IG1hcCAidCIgJ2hl bHAtd2l0aC10dXRvcmlhbCkKICAgIChkZWZpbmUta2V5IG1hcCAidyIgJ3doZXJlLWlzKQogICAg KGRlZmluZS1rZXkgbWFwICJ2IiAnZGVzY3JpYmUtdmFyaWFibGUpCiAgICAoZGVmaW5lLWtleSBt YXAgInEiICdoZWxwLXF1aXQpCiAgICBtYXApCiAgIktleW1hcCBmb3IgY2hhcmFjdGVycyBmb2xs b3dpbmcgdGhlIEhlbHAga2V5LiIpCgooZGVmaW5lLWtleSBnbG9iYWwtbWFwIChjaGFyLXRvLXN0 cmluZyBoZWxwLWNoYXIpICdoZWxwLWNvbW1hbmQpCihkZWZpbmUta2V5IGdsb2JhbC1tYXAgW2hl bHBdICdoZWxwLWNvbW1hbmQpCihkZWZpbmUta2V5IGdsb2JhbC1tYXAgW2YxXSAnaGVscC1jb21t YW5kKQooZnNldCAnaGVscC1jb21tYW5kIGhlbHAtbWFwKQoKOzsgaW5zZXJ0LWJ1dHRvbiBtYWtl cyB0aGUgYWN0aW9uIG5pbCBpZiBpdCBpcyBub3Qgc3RvcmUgc29tZXdoZXJlCihkZWZ2YXIgaGVs cC1idXR0b24tY2FjaGUgbmlsKQoKDAooZGVmdW4gaGVscC1xdWl0ICgpCiAgIkp1c3QgZXhpdCBm cm9tIHRoZSBIZWxwIGNvbW1hbmQncyBjb21tYW5kIGxvb3AuIgogIChpbnRlcmFjdGl2ZSkKICBu aWwpCgooZGVmdmFyIGhlbHAtcmV0dXJuLW1ldGhvZCBuaWwKICAiV2hhdCB0byBkbyB0byBcImV4 aXRcIiB0aGUgaGVscCBidWZmZXIuClRoaXMgaXMgYSBsaXN0CiAoV0lORE9XIC4gdCkgICAgICAg ICAgICAgIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgd2luZG93IChhbmQgcG9zc2libHkgaXRzIGZyYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgYHF1aXQtd2luZG93JyksIGdvIHRvIFdJ TkRPVy4KIChXSU5ET1cgLiBxdWl0LXdpbmRvdykgICAgZG8gcXVpdC13aW5kb3csIHRoZW4gc2Vs ZWN0IFdJTkRPVy4KIChXSU5ET1cgQlVGIFNUQVJUIFBPSU5UKSAgZGlzcGxheSBCVUYgYXQgU1RB UlQsIFBPSU5ULCB0aGVuIHNlbGVjdCBXSU5ET1cuIikKCihkZWZpbmUtb2Jzb2xldGUtZnVuY3Rp b24tYWxpYXMgJ3ByaW50LWhlbHAtcmV0dXJuLW1lc3NhZ2UgJ2hlbHAtcHJpbnQtcmV0dXJuLW1l c3NhZ2UgIjIzLjIiKQooZGVmdW4gaGVscC1wcmludC1yZXR1cm4tbWVzc2FnZSAoJm9wdGlvbmFs IGZ1bmN0aW9uKQogICJEaXNwbGF5IG9yIHJldHVybiBtZXNzYWdlIHNheWluZyBob3cgdG8gcmVz dG9yZSB3aW5kb3dzIGFmdGVyIGhlbHAgY29tbWFuZC4KVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo YXQgYHN0YW5kYXJkLW91dHB1dCcgaXMgdGhlIGhlbHAgYnVmZmVyLgpJdCBjb21wdXRlcyBhIG1l c3NhZ2UsIGFuZCBhcHBsaWVzIHRoZSBvcHRpb25hbCBhcmd1bWVudCBGVU5DVElPTiB0byBpdC4K SWYgRlVOQ1RJT04gaXMgbmlsLCBpdCBhcHBsaWVzIGBtZXNzYWdlJywgdGh1cyBkaXNwbGF5aW5n IHRoZSBtZXNzYWdlLgpJbiBhZGRpdGlvbiwgdGhpcyBmdW5jdGlvbiBzZXRzIHVwIGBoZWxwLXJl dHVybi1tZXRob2QnLCB3aGljaCBzZWUsIHRoYXQKc3BlY2lmaWVzIHdoYXQgdG8gZG8gd2hlbiB0 aGUgdXNlciBleGl0cyB0aGUgaGVscCBidWZmZXIuCgpEbyBub3QgY2FsbCB0aGlzIGluIHRoZSBz Y29wZSBvZiBgd2l0aC1oZWxwLXdpbmRvdycuIgogIChhbmQgKG5vdCAoZ2V0LWJ1ZmZlci13aW5k b3cgc3RhbmRhcmQtb3V0cHV0KSkKICAgICAgIChsZXQgKChmaXJzdC1tZXNzYWdlCgkgICAgICAo Y29uZCAoKG9yCgkJICAgICAgcG9wLXVwLWZyYW1lcwoJCSAgICAgIChzcGVjaWFsLWRpc3BsYXkt cCAoYnVmZmVyLW5hbWUgc3RhbmRhcmQtb3V0cHV0KSkpCgkJICAgICAoc2V0cSBoZWxwLXJldHVy bi1tZXRob2QgKGNvbnMgKHNlbGVjdGVkLXdpbmRvdykgdCkpCgkJICAgICA7OyBJZiB0aGUgaGVs cCBvdXRwdXQgYnVmZmVyIGlzIGEgc3BlY2lhbCBkaXNwbGF5IGJ1ZmZlciwKCQkgICAgIDs7IGRv bid0IHNheSBhbnl0aGluZyBhYm91dCBob3cgdG8gZ2V0IHJpZCBvZiBpdC4KCQkgICAgIDs7IEZp cnN0IG9mIGFsbCwgdGhlIHVzZXIgd2lsbCBkbyB0aGF0IHdpdGggdGhlIHdpbmRvdwoJCSAgICAg OzsgbWFuYWdlciwgbm90IHdpdGggRW1hY3MuCgkJICAgICA7OyBTZWNvbmRseSwgdGhlIGJ1ZmZl ciBoYXMgbm90IGJlZW4gZGlzcGxheWVkIHlldCwKCQkgICAgIDs7IHNvIHdlIGRvbid0IGtub3cg d2hldGhlciBpdHMgZnJhbWUgd2lsbCBiZSBzZWxlY3RlZC4KCQkgICAgIG5pbCkKCQkgICAgKChu b3QgKG9uZS13aW5kb3ctcCB0KSkKCQkgICAgIChzZXRxIGhlbHAtcmV0dXJuLW1ldGhvZAoJCQkg ICAoY29ucyAoc2VsZWN0ZWQtd2luZG93KSAncXVpdC13aW5kb3cpKQoJCSAgICAgIlR5cGUgXFxb ZGlzcGxheS1idWZmZXJdIFJFVCB0byByZXN0b3JlIHRoZSBvdGhlciB3aW5kb3cuIikKCQkgICAg KHBvcC11cC13aW5kb3dzCgkJICAgICAoc2V0cSBoZWxwLXJldHVybi1tZXRob2QgKGNvbnMgKHNl bGVjdGVkLXdpbmRvdykgdCkpCgkJICAgICAiVHlwZSBcXFtkZWxldGUtb3RoZXItd2luZG93c10g dG8gcmVtb3ZlIGhlbHAgd2luZG93LiIpCgkJICAgICh0CgkJICAgICAoc2V0cSBoZWxwLXJldHVy bi1tZXRob2QKCQkJICAgKGxpc3QgKHNlbGVjdGVkLXdpbmRvdykgKHdpbmRvdy1idWZmZXIpCgkJ CQkgKHdpbmRvdy1zdGFydCkgKHdpbmRvdy1wb2ludCkpKQoJCSAgICAgIlR5cGUgXFxbc3dpdGNo LXRvLWJ1ZmZlcl0gUkVUIHRvIHJlbW92ZSBoZWxwIHdpbmRvdy4iKSkpKQoJIChmdW5jYWxsIChv ciBmdW5jdGlvbiAnbWVzc2FnZSkKCQkgIChjb25jYXQKCQkgICAoaWYgZmlyc3QtbWVzc2FnZQoJ CSAgICAgICAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgZmlyc3QtbWVzc2FnZSkpCgkJICAgKGlm IGZpcnN0LW1lc3NhZ2UgIiAgIikKCQkgICA7OyBJZiB0aGUgaGVscCBidWZmZXIgd2lsbCBnbyBp biBhIHNlcGFyYXRlIGZyYW1lLAoJCSAgIDs7IGl0J3Mgbm8gdXNlIG1lbnRpb25pbmcgYSBjb21t YW5kIHRvIHNjcm9sbCwgc28gZG9uJ3QuCgkJICAgKGlmIChvciBwb3AtdXAtd2luZG93cwoJCQkg ICAoc3BlY2lhbC1kaXNwbGF5LXAgKGJ1ZmZlci1uYW1lIHN0YW5kYXJkLW91dHB1dCkpKQoJCSAg ICAgICBuaWwKCQkgICAgIChpZiAoc2FtZS13aW5kb3ctcCAoYnVmZmVyLW5hbWUgc3RhbmRhcmQt b3V0cHV0KSkKCQkJIDs7IFNheSBob3cgdG8gc2Nyb2xsIHRoaXMgd2luZG93LgoJCQkgKHN1YnN0 aXR1dGUtY29tbWFuZC1rZXlzCgkJCSAgIlxcW3Njcm9sbC11cF0gdG8gc2Nyb2xsIHRoZSBoZWxw LiIpCgkJICAgICAgIDs7IFNheSBob3cgdG8gc2Nyb2xsIHNvbWUgb3RoZXIgd2luZG93LgoJCSAg ICAgICAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMKCQkJIlxcW3Njcm9sbC1vdGhlci13aW5kb3dd IHRvIHNjcm9sbCB0aGUgaGVscC4iKSkpKSkpKSkKCjs7IFNvIGtleWJvYXJkIG1hY3JvIGRlZmlu aXRpb25zIGFyZSBkb2N1bWVudGVkIGNvcnJlY3RseQooZnNldCAnZGVmaW5pbmcta2JkLW1hY3Jv IChzeW1ib2wtZnVuY3Rpb24gJ3N0YXJ0LWtiZC1tYWNybykpCgooZGVmYWxpYXMgJ2hlbHAgJ2hl bHAtZm9yLWhlbHAtaW50ZXJuYWwpCjs7IGZpbmQtZnVuY3Rpb24gY2FuIGZpbmQgdGhpcy4KKGRl ZmFsaWFzICdoZWxwLWZvci1oZWxwICdoZWxwLWZvci1oZWxwLWludGVybmFsKQo7OyBJdCBjYW4n dCBmaW5kIHRoaXMsIGJ1dCBub2JvZHkgd2lsbCBsb29rLgoobWFrZS1oZWxwLXNjcmVlbiBoZWxw LWZvci1oZWxwLWludGVybmFsCiAgKHB1cmVjb3B5ICJUeXBlIGEgaGVscCBvcHRpb246IFthYmND ZGVmRmdpSWtLbExtbnByc3R2dy5dIEMtW2NkZWZtbm9wdHddIG9yID8iKQogIDs7IERvbid0IHB1 cmVjb3B5IHRoaXMgb25lLCBiZWNhdXNlIGl0J3Mgbm90IGV2YWx1YXRlZCAoaXQncwogIDs7IGRp cmVjdGx5IHVzZWQgYXMgYSBkb2NzdHJpbmcgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBzbyBp dCdsbAogIDs7IGJlIG1vdmVkIHRvIHRoZSBET0MgZmlsZSBhbnl3YXk6IG5vIG5lZWQgZm9yIHB1 cmVjb3B5aW5nIGl0KS4KICAiWW91IGhhdmUgdHlwZWQgJVRISVMtS0VZJSwgdGhlIGhlbHAgY2hh cmFjdGVyLiAgVHlwZSBhIEhlbHAgb3B0aW9uOgpcKFVzZSBTUEMgb3IgREVMIHRvIHNjcm9sbCB0 aHJvdWdoIHRoaXMgdGV4dC4gIFR5cGUgXFw8aGVscC1tYXA+XFxbaGVscC1xdWl0XSB0byBleGl0 IHRoZSBIZWxwIGNvbW1hbmQuKQoKYSBQQVRURVJOICAgU2hvdyBjb21tYW5kcyB3aG9zZSBuYW1l IG1hdGNoZXMgdGhlIFBBVFRFUk4gKGEgbGlzdCBvZiB3b3JkcwogICAgICAgICAgICAgIG9yIGEg cmVnZXhwKS4gIFNlZSBhbHNvIHRoZSBgYXByb3BvcycgY29tbWFuZC4KYiAgICAgICAgICAgRGlz cGxheSBhbGwga2V5IGJpbmRpbmdzLgpjIEtFWVMgICAgICBEaXNwbGF5IHRoZSBjb21tYW5kIG5h bWUgcnVuIGJ5IHRoZSBnaXZlbiBrZXkgc2VxdWVuY2UuCkMgQ09ESU5HICAgIERlc2NyaWJlIHRo ZSBnaXZlbiBjb2Rpbmcgc3lzdGVtLCBvciBSRVQgZm9yIGN1cnJlbnQgb25lcy4KZCBQQVRURVJO ICAgU2hvdyBhIGxpc3Qgb2YgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBvdGhlciBpdGVtcyB3 aG9zZQogICAgICAgICAgICAgIGRvY3VtZW50YXRpb24gbWF0Y2hlcyB0aGUgUEFUVEVSTiAoYSBs aXN0IG9mIHdvcmRzIG9yIGEgcmVnZXhwKS4KZSAgICAgICAgICAgR28gdG8gdGhlICpNZXNzYWdl cyogYnVmZmVyIHdoaWNoIGxvZ3MgZWNoby1hcmVhIG1lc3NhZ2VzLgpmIEZVTkNUSU9OICBEaXNw bGF5IGRvY3VtZW50YXRpb24gZm9yIHRoZSBnaXZlbiBmdW5jdGlvbi4KRiBDT01NQU5EICAgU2hv dyB0aGUgRW1hY3MgbWFudWFsJ3Mgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgY29tbWFuZC4K ZyAgICAgICAgICAgRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR05VIHByb2plY3QuCmgg ICAgICAgICAgIERpc3BsYXkgdGhlIEhFTExPIGZpbGUgd2hpY2ggaWxsdXN0cmF0ZXMgdmFyaW91 cyBzY3JpcHRzLgppICAgICAgICAgICBTdGFydCB0aGUgSW5mbyBkb2N1bWVudGF0aW9uIHJlYWRl cjogcmVhZCBpbmNsdWRlZCBtYW51YWxzLgpJIE1FVEhPRCAgICBEZXNjcmliZSBhIHNwZWNpZmlj IGlucHV0IG1ldGhvZCwgb3IgUkVUIGZvciBjdXJyZW50LgprIEtFWVMgICAgICBEaXNwbGF5IHRo ZSBmdWxsIGRvY3VtZW50YXRpb24gZm9yIHRoZSBrZXkgc2VxdWVuY2UuCksgS0VZUyAgICAgIFNo b3cgdGhlIEVtYWNzIG1hbnVhbCdzIHNlY3Rpb24gZm9yIHRoZSBjb21tYW5kIGJvdW5kIHRvIEtF WVMuCmwgICAgICAgICAgIFNob3cgbGFzdCAzMDAgaW5wdXQga2V5c3Ryb2tlcyAobG9zc2FnZSku CkwgTEFORy1FTlYgIERlc2NyaWJlcyBhIHNwZWNpZmljIGxhbmd1YWdlIGVudmlyb25tZW50LCBv ciBSRVQgZm9yIGN1cnJlbnQuCm0gICAgICAgICAgIERpc3BsYXkgZG9jdW1lbnRhdGlvbiBvZiBj dXJyZW50IG1pbm9yIG1vZGVzIGFuZCBjdXJyZW50IG1ham9yIG1vZGUsCiAgICAgICAgICAgICAg aW5jbHVkaW5nIHRoZWlyIHNwZWNpYWwgY29tbWFuZHMuCm4gICAgICAgICAgIERpc3BsYXkgbmV3 cyBvZiByZWNlbnQgRW1hY3MgY2hhbmdlcy4KbyBTWU1CT0wgICAgRGlzcGxheSB0aGUgZ2l2ZW4g ZnVuY3Rpb24gb3IgdmFyaWFibGUncyBkb2N1bWVudGF0aW9uIGFuZCB2YWx1ZS4KcCBUT1BJQyAg ICAgRmluZCBwYWNrYWdlcyBtYXRjaGluZyBhIGdpdmVuIHRvcGljIGtleXdvcmQuClAgUEFDS0FH RSAgIERlc2NyaWJlIHRoZSBnaXZlbiBFbWFjcyBMaXNwIHBhY2thZ2UuCnIgICAgICAgICAgIERp c3BsYXkgdGhlIEVtYWNzIG1hbnVhbCBpbiBJbmZvIG1vZGUuCnMgICAgICAgICAgIERpc3BsYXkg Y29udGVudHMgb2YgY3VycmVudCBzeW50YXggdGFibGUsIHBsdXMgZXhwbGFuYXRpb25zLgpTIFNZ TUJPTCAgICBTaG93IHRoZSBzZWN0aW9uIGZvciB0aGUgZ2l2ZW4gc3ltYm9sIGluIHRoZSBJbmZv IG1hbnVhbAogICAgICAgICAgICAgIGZvciB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdXNlZCBp biB0aGlzIGJ1ZmZlci4KdCAgICAgICAgICAgU3RhcnQgdGhlIEVtYWNzIGxlYXJuLWJ5LWRvaW5n IHR1dG9yaWFsLgp2IFZBUklBQkxFICBEaXNwbGF5IHRoZSBnaXZlbiB2YXJpYWJsZSdzIGRvY3Vt ZW50YXRpb24gYW5kIHZhbHVlLgp3IENPTU1BTkQgICBEaXNwbGF5IHdoaWNoIGtleXN0cm9rZXMg aW52b2tlIHRoZSBnaXZlbiBjb21tYW5kICh3aGVyZS1pcykuCi4gICAgICAgICAgIERpc3BsYXkg YW55IGF2YWlsYWJsZSBsb2NhbCBoZWxwIGF0IHBvaW50IGluIHRoZSBlY2hvIGFyZWEuCgpDLWEg ICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBFbWFjcy4KQy1jICAgICAgICAgRW1hY3MgY29weWlu ZyBwZXJtaXNzaW9uIChHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCkMtZCAgICAgICAgIElu c3RydWN0aW9ucyBmb3IgZGVidWdnaW5nIEdOVSBFbWFjcy4KQy1lICAgICAgICAgRXh0ZXJuYWwg cGFja2FnZXMgYW5kIGluZm9ybWF0aW9uIGFib3V0IEVtYWNzLgpDLWYgICAgICAgICBFbWFjcyBG QVEuCkMtbSAgICAgICAgIEhvdyB0byBvcmRlciBwcmludGVkIEVtYWNzIG1hbnVhbHMuCkMtbiAg ICAgICAgIE5ld3Mgb2YgcmVjZW50IEVtYWNzIGNoYW5nZXMuCkMtbyAgICAgICAgIEVtYWNzIG9y ZGVyaW5nIGFuZCBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24uCkMtcCAgICAgICAgIEluZm8gYWJv dXQga25vd24gRW1hY3MgcHJvYmxlbXMuCkMtdCAgICAgICAgIEVtYWNzIFRPRE8gbGlzdC4KQy13 ICAgICAgICAgSW5mb3JtYXRpb24gb24gYWJzZW5jZSBvZiB3YXJyYW50eSBmb3IgR05VIEVtYWNz LiIKICBoZWxwLW1hcCkKCgwKCihkZWZ1biBmdW5jdGlvbi1jYWxsZWQtYXQtcG9pbnQgKCkKICAi UmV0dXJuIGEgZnVuY3Rpb24gYXJvdW5kIHBvaW50IG9yIGVsc2UgY2FsbGVkIGJ5IHRoZSBsaXN0 IGNvbnRhaW5pbmcgcG9pbnQuCklmIHRoYXQgZG9lc24ndCBnaXZlIGEgZnVuY3Rpb24sIHJldHVy biBuaWwuIgogICh3aXRoLXN5bnRheC10YWJsZSBlbWFjcy1saXNwLW1vZGUtc3ludGF4LXRhYmxl CiAgICAob3IgKGNvbmRpdGlvbi1jYXNlICgpCiAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgog ICAgICAgICAgICAgIChvciAobm90ICh6ZXJvcCAoc2tpcC1zeW50YXgtYmFja3dhcmQgIl93Iikp KQogICAgICAgICAgICAgICAgICAoZXEgKGNoYXItc3ludGF4IChmb2xsb3dpbmctY2hhcikpID93 KQogICAgICAgICAgICAgICAgICAoZXEgKGNoYXItc3ludGF4IChmb2xsb3dpbmctY2hhcikpID9f KQogICAgICAgICAgICAgICAgICAoZm9yd2FyZC1zZXhwIC0xKSkKICAgICAgICAgICAgICAoc2tp cC1jaGFycy1mb3J3YXJkICInIikKICAgICAgICAgICAgICAobGV0ICgob2JqIChyZWFkIChjdXJy ZW50LWJ1ZmZlcikpKSkKICAgICAgICAgICAgICAgIChhbmQgKHN5bWJvbHAgb2JqKSAoZmJvdW5k cCBvYmopIG9iaikpKQogICAgICAgICAgKGVycm9yIG5pbCkpCiAgICAgICAgKGNvbmRpdGlvbi1j YXNlICgpCiAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgIChzYXZlLXJl c3RyaWN0aW9uCiAgICAgICAgICAgICAgICAobmFycm93LXRvLXJlZ2lvbiAobWF4IChwb2ludC1t aW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChwb2ludCkgMTAw MCkpIChwb2ludC1tYXgpKQogICAgICAgICAgICAgICAgOzsgTW92ZSB1cCB0byBzdXJyb3VuZGlu ZyBwYXJlbiwgdGhlbiBhZnRlciB0aGUgb3Blbi4KICAgICAgICAgICAgICAgIChiYWNrd2FyZC11 cC1saXN0IDEpCiAgICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpCiAgICAgICAgICAgICAg ICA7OyBJZiB0aGVyZSBpcyBzcGFjZSBoZXJlLCB0aGlzIGlzIHByb2JhYmx5IHNvbWV0aGluZwog ICAgICAgICAgICAgICAgOzsgb3RoZXIgdGhhbiBhIHJlYWwgTGlzcCBmdW5jdGlvbiBjYWxsLCBz byBpZ25vcmUgaXQuCiAgICAgICAgICAgICAgICAoaWYgKGxvb2tpbmctYXQgIlsgXHRdIikKICAg ICAgICAgICAgICAgICAgICAoZXJyb3IgIlByb2JhYmx5IG5vdCBhIExpc3AgZnVuY3Rpb24gY2Fs bCIpKQogICAgICAgICAgICAgICAgKGxldCAoKG9iaiAocmVhZCAoY3VycmVudC1idWZmZXIpKSkp CiAgICAgICAgICAgICAgICAgIChhbmQgKHN5bWJvbHAgb2JqKSAoZmJvdW5kcCBvYmopIG9iaikp KSkKICAgICAgICAgIChlcnJvciBuaWwpKQogICAgICAgIChsZXQqICgoc3RyIChmaW5kLXRhZy1k ZWZhdWx0KSkKICAgICAgICAgICAgICAgKHN5bSAoaWYgc3RyIChpbnRlcm4tc29mdCBzdHIpKSkp CiAgICAgICAgICAoaWYgKGFuZCBzeW0gKGZib3VuZHAgc3ltKSkKICAgICAgICAgICAgICBzeW0K ICAgICAgICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgICAgICAgICh3aGVuIChhbmQgc3Ry IChzdHJpbmctbWF0Y2ggIlxcYFxcVypcXCguKj9cXClcXFcqXFwnIiBzdHIpKQogICAgICAgICAg ICAgICAgKHNldHEgc3ltIChpbnRlcm4tc29mdCAobWF0Y2gtc3RyaW5nIDEgc3RyKSkpCiAgICAg ICAgICAgICAgICAoYW5kIChmYm91bmRwIHN5bSkgc3ltKSkpKSkpKSkKCgwKOzs7IGBVc2VyJyBo ZWxwIGZ1bmN0aW9ucwoKKGRlZnVuIHZpZXctaGVscC1maWxlIChmaWxlICZvcHRpb25hbCBkaXIp CiAgKHZpZXctZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlIChvciBkaXIgZGF0YS1kaXJlY3Rv cnkpKSkKICAoZ290by1hZGRyZXNzLW1vZGUgMSkKICAoZ290by1jaGFyIChwb2ludC1taW4pKSkK CihkZWZ1biBkZXNjcmliZS1kaXN0cmlidXRpb24gKCkKICAiRGlzcGxheSBpbmZvIG9uIGhvdyB0 byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEdOVSBFbWFjcy4iCiAgKGludGVyYWN0aXZl KQogICh2aWV3LWhlbHAtZmlsZSAiRElTVFJJQiIpKQoKKGRlZnVuIGRlc2NyaWJlLWNvcHlpbmcg KCkKICAiRGlzcGxheSBpbmZvIG9uIGhvdyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBjb3BpZXMgb2Yg R05VIEVtYWNzLiIKICAoaW50ZXJhY3RpdmUpCiAgKHZpZXctaGVscC1maWxlICJDT1BZSU5HIikp Cgo7OyBNYXliZSB0aGlzIGNvbW1hbmQgc2hvdWxkIGp1c3QgYmUgcmVtb3ZlZC4KKGRlZnVuIGRl c2NyaWJlLWdudS1wcm9qZWN0ICgpCiAgIkJyb3dzZSBvbmxpbmUgaW5mb3JtYXRpb24gb24gdGhl IEdOVSBwcm9qZWN0LiIKICAoaW50ZXJhY3RpdmUpCiAgKGJyb3dzZS11cmwgImh0dHBzOi8vd3d3 LmdudS5vcmcvZ251L3RoZWdudXByb2plY3QuaHRtbCIpKQoKKGRlZmluZS1vYnNvbGV0ZS1mdW5j dGlvbi1hbGlhcyAnZGVzY3JpYmUtcHJvamVjdCAnZGVzY3JpYmUtZ251LXByb2plY3QgIjIyLjIi KQoKKGRlZnVuIGRlc2NyaWJlLW5vLXdhcnJhbnR5ICgpCiAgIkRpc3BsYXkgaW5mbyBvbiBhbGwg dGhlIGtpbmRzIG9mIHdhcnJhbnR5IEVtYWNzIGRvZXMgTk9UIGhhdmUuIgogIChpbnRlcmFjdGl2 ZSkKICAoZGVzY3JpYmUtY29weWluZykKICAobGV0IChjYXNlLWZvbGQtc2VhcmNoKQogICAgKHNl YXJjaC1mb3J3YXJkICJEaXNjbGFpbWVyIG9mIFdhcnJhbnR5IikKICAgIChmb3J3YXJkLWxpbmUg MCkKICAgIChyZWNlbnRlciAwKSkpCgooZGVmdW4gZGVzY3JpYmUtcHJlZml4LWJpbmRpbmdzICgp CiAgIkRlc2NyaWJlIHRoZSBiaW5kaW5ncyBvZiB0aGUgcHJlZml4IHVzZWQgdG8gcmVhY2ggdGhp cyBjb21tYW5kLgpUaGUgcHJlZml4IGRlc2NyaWJlZCBjb25zaXN0cyBvZiBhbGwgYnV0IHRoZSBs YXN0IGV2ZW50Cm9mIHRoZSBrZXkgc2VxdWVuY2UgdGhhdCByYW4gdGhpcyBjb21tYW5kLiIKICAo aW50ZXJhY3RpdmUpCiAgKGxldCAoKGtleSAodGhpcy1jb21tYW5kLWtleXMpKSkKICAgIChkZXNj cmliZS1iaW5kaW5ncwogICAgIChpZiAoc3RyaW5ncCBrZXkpCgkgKHN1YnN0cmluZyBrZXkgMCAo MS0gKGxlbmd0aCBrZXkpKSkKICAgICAgIChsZXQgKChwcmVmaXggKG1ha2UtdmVjdG9yICgxLSAo bGVuZ3RoIGtleSkpIG5pbCkpCgkgICAgIChpIDApKQoJICh3aGlsZSAoPCBpIChsZW5ndGggcHJl Zml4KSkKCSAgIChhc2V0IHByZWZpeCBpIChhcmVmIGtleSBpKSkKCSAgIChzZXRxIGkgKDErIGkp KSkKCSBwcmVmaXgpKSkpKQo7OyBNYWtlIEMtaCBhZnRlciBhIHByZWZpeCwgd2hlbiBub3Qgc3Bl Y2lmaWNhbGx5IGJvdW5kLAo7OyBydW4gZGVzY3JpYmUtcHJlZml4LWJpbmRpbmdzLgooc2V0cSBw cmVmaXgtaGVscC1jb21tYW5kICdkZXNjcmliZS1wcmVmaXgtYmluZGluZ3MpCgooZGVmdW4gdmll dy1lbWFjcy1uZXdzICgmb3B0aW9uYWwgdmVyc2lvbikKICAiRGlzcGxheSBpbmZvIG9uIHJlY2Vu dCBjaGFuZ2VzIHRvIEVtYWNzLgpXaXRoIGFyZ3VtZW50LCBkaXNwbGF5IGluZm8gb25seSBmb3Ig dGhlIHNlbGVjdGVkIHZlcnNpb24uIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKHVubGVzcyB2ZXJz aW9uCiAgICAoc2V0cSB2ZXJzaW9uIGVtYWNzLW1ham9yLXZlcnNpb24pKQogICh3aGVuIChjb25z cCB2ZXJzaW9uKQogICAgKGxldCogKChhbGwtdmVyc2lvbnMKCSAgICAobGV0IChyZXMpCgkgICAg ICAobWFwYwoJICAgICAgIChsYW1iZGEgKGZpbGUpCgkJICh3aXRoLXRlbXAtYnVmZmVyCgkJICAg KGluc2VydC1maWxlLWNvbnRlbnRzCgkJICAgIChleHBhbmQtZmlsZS1uYW1lIGZpbGUgZGF0YS1k aXJlY3RvcnkpKQoJCSAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQKCQkJICAgKGlmIChtZW1i ZXIgZmlsZSAnKCJORVdTLjE4IiAiTkVXUy4xLTE3IikpCgkJCSAgICAgICAiQ2hhbmdlcyBpbiBc XCg/OkVtYWNzXFx8dmVyc2lvblxcKT9bIFx0XSpcXChbMC05XStcXCg/OlxcLlswLTldK1xcKT9c XCkiCgkJCSAgICAgIl5cXCogW14wLTlcbl0qXFwoWzAtOV0rXFwuWzAtOV0rXFwpIikgbmlsIHQp CgkJICAgICAoc2V0cSByZXMgKGNvbnMgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpIHJl cykpKSkpCgkgICAgICAgKGNvbnMgIk5FV1MiCgkJICAgICAoZGlyZWN0b3J5LWZpbGVzIGRhdGEt ZGlyZWN0b3J5IG5pbAoJCQkJICAgICAgIl5ORVdTXFwuWzAtOV1bLTAtOV0qJCIgbmlsKSkpCgkg ICAgICAoc29ydCAoZGVsZXRlLWR1cHMgcmVzKSAjJ3N0cmluZz4pKSkKCSAgIChjdXJyZW50IChj YXIgYWxsLXZlcnNpb25zKSkpCiAgICAgIChzZXRxIHZlcnNpb24gKGNvbXBsZXRpbmctcmVhZAoJ CSAgICAgKGZvcm1hdCAiUmVhZCBORVdTIGZvciB0aGUgdmVyc2lvbiAoZGVmYXVsdCAlcyk6ICIg Y3VycmVudCkKCQkgICAgIGFsbC12ZXJzaW9ucyBuaWwgbmlsIG5pbCBuaWwgY3VycmVudCkpCiAg ICAgIChpZiAoaW50ZWdlcnAgKHN0cmluZy10by1udW1iZXIgdmVyc2lvbikpCgkgIChzZXRxIHZl cnNpb24gKHN0cmluZy10by1udW1iZXIgdmVyc2lvbikpCgkodW5sZXNzIChvciAobWVtYmVyIHZl cnNpb24gYWxsLXZlcnNpb25zKQoJCSAgICAoPD0gKHN0cmluZy10by1udW1iZXIgdmVyc2lvbikg KHN0cmluZy10by1udW1iZXIgY3VycmVudCkpKQoJICAoZXJyb3IgIk5vIG5ld3MgYWJvdXQgdmVy c2lvbiAlcyIgdmVyc2lvbikpKSkpCiAgKHdoZW4gKGludGVnZXJwIHZlcnNpb24pCiAgICAoY29u ZCAoKDw9IHZlcnNpb24gMTIpCgkgICAoc2V0cSB2ZXJzaW9uIChmb3JtYXQgIjEuJWQiIHZlcnNp b24pKSkKCSAgKCg8PSB2ZXJzaW9uIDE4KQoJICAgKHNldHEgdmVyc2lvbiAoZm9ybWF0ICIlZCIg dmVyc2lvbikpKQoJICAoKD4gdmVyc2lvbiBlbWFjcy1tYWpvci12ZXJzaW9uKQoJICAgKGVycm9y ICJObyBuZXdzIGFib3V0IEVtYWNzICVkICh5ZXQpIiB2ZXJzaW9uKSkpKQogIChsZXQqICgodm4g KGlmIChzdHJpbmdwIHZlcnNpb24pCgkJIChzdHJpbmctdG8tbnVtYmVyIHZlcnNpb24pCgkgICAg ICAgdmVyc2lvbikpCgkgKGZpbGUgKGNvbmQKCQkoKD49IHZuIGVtYWNzLW1ham9yLXZlcnNpb24p ICJORVdTIikKCQkoKDwgdm4gMTgpICJORVdTLjEtMTciKQoJCSh0IChmb3JtYXQgIk5FV1MuJWQi IHZuKSkpKQoJIHJlcykKICAgICh2aWV3LWZpbGUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSBkYXRh LWRpcmVjdG9yeSkpCiAgICAod2lkZW4pCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAg KHdoZW4gKHN0cmluZ3AgdmVyc2lvbikKICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkCgkg ICAgIChjb25jYXQgKGlmICg8IHZuIDE5KQoJCQkgIkNoYW5nZXMgaW4gRW1hY3NbIFx0XSoiCgkJ ICAgICAgICJeXFwqIFteMC05XG5dKiIpIHZlcnNpb24gIiQiKQoJICAgICBuaWwgdCkKCShiZWdp bm5pbmctb2YtbGluZSkKCShuYXJyb3ctdG8tcmVnaW9uCgkgKHBvaW50KQoJIChzYXZlLWV4Y3Vy c2lvbgoJICAgKHdoaWxlIChhbmQgKHNldHEgcmVzCgkJCSAgICAgKHJlLXNlYXJjaC1mb3J3YXJk CgkJCSAgICAgIChpZiAoPCB2biAxOSkKCQkJCSAgIkNoYW5nZXMgaW4gXFwoPzpFbWFjc1xcfHZl cnNpb25cXCk/WyBcdF0qXFwoWzAtOV0rXFwoPzpcXC5bMC05XStcXCk/XFwpIgoJCQkJIl5cXCog W14wLTlcbl0qXFwoWzAtOV0rXFwuWzAtOV0rXFwpIikgbmlsIHQpKQoJCSAgICAgICAoZXF1YWwg KG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpIHZlcnNpb24pKSkKCSAgIChvciByZXMgKGdv dG8tY2hhciAocG9pbnQtbWF4KSkpCgkgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkgICAocG9pbnQp KSkpKSkpCgooZGVmdW4gdmlldy1lbWFjcy10b2RvICgmb3B0aW9uYWwgX2FyZykKICAiRGlzcGxh eSB0aGUgRW1hY3MgVE9ETyBsaXN0LiIKICAoaW50ZXJhY3RpdmUgIlAiKQogICh2aWV3LWhlbHAt ZmlsZSAiVE9ETyIpKQoKKGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAndmlldy10b2Rv ICd2aWV3LWVtYWNzLXRvZG8gIjIyLjIiKQoKCihkZWZ1biB2aWV3LWVjaG8tYXJlYS1tZXNzYWdl cyAoKQogICJWaWV3IHRoZSBsb2cgb2YgcmVjZW50IGVjaG8tYXJlYSBtZXNzYWdlczogdGhlIGAq TWVzc2FnZXMqJyBidWZmZXIuClRoZSBudW1iZXIgb2YgbWVzc2FnZXMgcmV0YWluZWQgaW4gdGhh dCBidWZmZXIKaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSBgbWVzc2FnZS1sb2ctbWF4Jy4i CiAgKGludGVyYWN0aXZlKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChtZXNzYWdlcy1idWZmZXIp CiAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgKGRpc3BsYXktYnVmZmVyIChjdXJyZW50 LWJ1ZmZlcikpKSkKCihkZWZ1biB2aWV3LW9yZGVyLW1hbnVhbHMgKCkKICAiRGlzcGxheSBpbmZv cm1hdGlvbiBvbiBob3cgdG8gYnV5IHByaW50ZWQgY29waWVzIG9mIEVtYWNzIG1hbnVhbHMuIgog IChpbnRlcmFjdGl2ZSkKOzsgICh2aWV3LWhlbHAtZmlsZSAiT1JERVJTIikKICAoaW5mbyAiKGVt YWNzKVByaW50ZWQgQm9va3MiKSkKCihkZWZ1biB2aWV3LWVtYWNzLUZBUSAoKQogICJEaXNwbGF5 IHRoZSBFbWFjcyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyAoRkFRKSBmaWxlLiIKICAoaW50 ZXJhY3RpdmUpCiAgOzsgKGZpbmQtZmlsZS1yZWFkLW9ubHkgKGV4cGFuZC1maWxlLW5hbWUgIkZB USIgZGF0YS1kaXJlY3RvcnkpKQogIChpbmZvICIoZWZhcSkiKSkKCihkZWZ1biB2aWV3LWVtYWNz LXByb2JsZW1zICgpCiAgIkRpc3BsYXkgaW5mbyBvbiBrbm93biBwcm9ibGVtcyB3aXRoIEVtYWNz IGFuZCBwb3NzaWJsZSB3b3JrYXJvdW5kcy4iCiAgKGludGVyYWN0aXZlKQogICh2aWV3LWhlbHAt ZmlsZSAiUFJPQkxFTVMiKSkKCihkZWZ1biB2aWV3LWVtYWNzLWRlYnVnZ2luZyAoKQogICJEaXNw bGF5IGluZm8gb24gaG93IHRvIGRlYnVnIEVtYWNzIHByb2JsZW1zLiIKICAoaW50ZXJhY3RpdmUp CiAgKHZpZXctaGVscC1maWxlICJERUJVRyIpKQoKOzsgVGhpcyB1c2VkIHRvIHZpc2l0IE1PUkUu U1RVRkY7IG1heWJlIGl0IHNob3VsZCBqdXN0IGJlIHJlbW92ZWQuCihkZWZ1biB2aWV3LWV4dGVy bmFsLXBhY2thZ2VzICgpCiAgIkRpc3BsYXkgaW5mbyBvbiB3aGVyZSB0byBnZXQgbW9yZSBFbWFj cyBwYWNrYWdlcy4iCiAgKGludGVyYWN0aXZlKQogIChpbmZvICIoZWZhcSlQYWNrYWdlcyB0aGF0 IGRvIG5vdCBjb21lIHdpdGggRW1hY3MiKSkKCihkZWZ1biB2aWV3LWxvc3NhZ2UgKCkKICAiRGlz cGxheSBsYXN0IGZldyBpbnB1dCBrZXlzdHJva2VzIGFuZCB0aGUgY29tbWFuZHMgcnVuLgpGb3Ig Y29udmVuaWVuY2UgdGhpcyB1c2VzIHRoZSBzYW1lIGZvcm1hdCBhcwpgZWRpdC1sYXN0LWtiZC1t YWNybycuCgpUbyByZWNvcmQgYWxsIHlvdXIgaW5wdXQsIHVzZSBgb3Blbi1kcmliYmxlLWZpbGUn LiIKICAoaW50ZXJhY3RpdmUpCiAgKGhlbHAtc2V0dXAteHJlZiAobGlzdCAjJ3ZpZXctbG9zc2Fn ZSkKCQkgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnaW50ZXJhY3RpdmUpKQogICh3aXRoLWhl bHAtd2luZG93IChoZWxwLWJ1ZmZlcikKICAgIChwcmluYyAiICIpCiAgICAocHJpbmMgKG1hcGNv bmNhdCAobGFtYmRhIChrZXkpCgkJCShjb25kCgkJCSAoKGFuZCAoY29uc3Aga2V5KSAobnVsbCAo Y2FyIGtleSkpKQoJCQkgIChmb3JtYXQgIjs7ICVzXG4iIChpZiAoc3ltYm9scCAoY2RyIGtleSkp IChjZHIga2V5KQoJCQkJCSAgICAgICJhbm9ueW1vdXMtY29tbWFuZCIpKSkKCQkJICgob3IgKGlu dGVnZXJwIGtleSkgKHN5bWJvbHAga2V5KSAobGlzdHAga2V5KSkKCQkJICAoc2luZ2xlLWtleS1k ZXNjcmlwdGlvbiBrZXkpKQoJCQkgKHQKCQkJICAocHJpbjEtdG8tc3RyaW5nIGtleSBuaWwpKSkp CgkJICAgICAgKHJlY2VudC1rZXlzICdpbmNsdWRlLWNtZHMpCgkJICAgICAgIiAiKSkKICAgICh3 aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAogICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAobGV0ICgoY29tbWVudC1zdGFydCAiOzsgIikKICAgICAgICAgICAgKGNv bW1lbnQtY29sdW1uIDI0KSkKICAgICAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICAgICAo Y29tbWVudC1pbmRlbnQpCgkgIChmb3J3YXJkLWxpbmUgMSkpKQogICAgICA7OyBqaWRhbm5pIHdh bnRzIHRvIHNlZSB0aGUgbGFzdCBrZXlzdHJva2VzIGltbWVkaWF0ZWx5LgogICAgICAoc2V0LW1h cmtlciBoZWxwLXdpbmRvdy1wb2ludC1tYXJrZXIgKHBvaW50KSkpKSkKCgwKOzsgS2V5IGJpbmRp bmdzCgooZGVmdW4gZGVzY3JpYmUtYmluZGluZ3MgKCZvcHRpb25hbCBwcmVmaXggYnVmZmVyKQog ICJEaXNwbGF5IGEgYnVmZmVyIHNob3dpbmcgYSBsaXN0IG9mIGFsbCBkZWZpbmVkIGtleXMsIGFu ZCB0aGVpciBkZWZpbml0aW9ucy4KVGhlIGtleXMgYXJlIGRpc3BsYXllZCBpbiBvcmRlciBvZiBw cmVjZWRlbmNlLgoKVGhlIG9wdGlvbmFsIGFyZ3VtZW50IFBSRUZJWCwgaWYgbm9uLW5pbCwgc2hv dWxkIGJlIGEga2V5IHNlcXVlbmNlOwp0aGVuIHdlIGRpc3BsYXkgb25seSBiaW5kaW5ncyB0aGF0 IHN0YXJ0IHdpdGggdGhhdCBwcmVmaXguClRoZSBvcHRpb25hbCBhcmd1bWVudCBCVUZGRVIgc3Bl Y2lmaWVzIHdoaWNoIGJ1ZmZlcidzIGJpbmRpbmdzCnRvIGRpc3BsYXkgKGRlZmF1bHQsIHRoZSBj dXJyZW50IGJ1ZmZlcikuICBCVUZGRVIgY2FuIGJlIGEgYnVmZmVyCm9yIGEgYnVmZmVyIG5hbWUu IgogIChpbnRlcmFjdGl2ZSkKICAob3IgYnVmZmVyIChzZXRxIGJ1ZmZlciAoY3VycmVudC1idWZm ZXIpKSkKICAoaGVscC1zZXR1cC14cmVmIChsaXN0ICMnZGVzY3JpYmUtYmluZGluZ3MgcHJlZml4 IGJ1ZmZlcikKCQkgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnaW50ZXJhY3RpdmUpKQogICh3 aXRoLWhlbHAtd2luZG93IChoZWxwLWJ1ZmZlcikKICAgIDs7IEJlIGF3YXJlIHRoYXQgYGRlc2Ny aWJlLWJ1ZmZlci1iaW5kaW5ncycgcHV0cyBpdHMgb3V0cHV0IGludG8KICAgIDs7IHRoZSBjdXJy ZW50IGJ1ZmZlci4KICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChoZWxwLWJ1ZmZlcikKICAgICAg KGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncyBidWZmZXIgcHJlZml4KSkpKQoKOzsgVGhpcyBmdW5j dGlvbiB1c2VkIHRvIGJlIGluIGtleW1hcC5jLgooZGVmdW4gZGVzY3JpYmUtYmluZGluZ3MtaW50 ZXJuYWwgKCZvcHRpb25hbCBtZW51cyBwcmVmaXgpCiAgIlNob3cgYSBsaXN0IG9mIGFsbCBkZWZp bmVkIGtleXMsIGFuZCB0aGVpciBkZWZpbml0aW9ucy4KV2UgcHV0IHRoYXQgbGlzdCBpbiBhIGJ1 ZmZlciwgYW5kIGRpc3BsYXkgdGhlIGJ1ZmZlci4KClRoZSBvcHRpb25hbCBhcmd1bWVudCBNRU5V UywgaWYgbm9uLW5pbCwgc2F5cyB0byBtZW50aW9uIG1lbnUgYmluZGluZ3MuClwoT3JkaW5hcmls eSB0aGVzZSBhcmUgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQuKQpUaGUgb3B0aW9uYWwgYXJndW1l bnQgUFJFRklYLCBpZiBub24tbmlsLCBzaG91bGQgYmUgYSBrZXkgc2VxdWVuY2U7CnRoZW4gd2Ug ZGlzcGxheSBvbmx5IGJpbmRpbmdzIHRoYXQgc3RhcnQgd2l0aCB0aGF0IHByZWZpeC4iCiAgKGRl Y2xhcmUgKG9ic29sZXRlIGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncyAiMjQuNCIpKQogIChsZXQg KChidWYgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAod2l0aC1oZWxwLXdpbmRvdyAoaGVscC1idWZm ZXIpCiAgICAgIDs7IEJlIGF3YXJlIHRoYXQgYGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncycgcHV0 cyBpdHMgb3V0cHV0IGludG8KICAgICAgOzsgdGhlIGN1cnJlbnQgYnVmZmVyLgogICAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciAoaGVscC1idWZmZXIpCgkoZGVzY3JpYmUtYnVmZmVyLWJpbmRpbmdz IGJ1ZiBwcmVmaXggbWVudXMpKSkpKQoKKGRlZnVuIHdoZXJlLWlzIChkZWZpbml0aW9uICZvcHRp b25hbCBpbnNlcnQpCiAgIlByaW50IG1lc3NhZ2UgbGlzdGluZyBrZXkgc2VxdWVuY2VzIHRoYXQg aW52b2tlIHRoZSBjb21tYW5kIERFRklOSVRJT04uCkFyZ3VtZW50IGlzIGEgY29tbWFuZCBkZWZp bml0aW9uLCB1c3VhbGx5IGEgc3ltYm9sIHdpdGggYSBmdW5jdGlvbiBkZWZpbml0aW9uLgpJZiBJ TlNFUlQgKHRoZSBwcmVmaXggYXJnKSBpcyBub24tbmlsLCBpbnNlcnQgdGhlIG1lc3NhZ2UgaW4g dGhlIGJ1ZmZlci4iCiAgKGludGVyYWN0aXZlCiAgIChsZXQgKChmbiAoZnVuY3Rpb24tY2FsbGVk LWF0LXBvaW50KSkKCSAoZW5hYmxlLXJlY3Vyc2l2ZS1taW5pYnVmZmVycyB0KQoJIHZhbCkKICAg ICAoc2V0cSB2YWwgKGNvbXBsZXRpbmctcmVhZAoJCShpZiBmbgoJCSAgICAoZm9ybWF0ICJXaGVy ZSBpcyBjb21tYW5kIChkZWZhdWx0ICVzKTogIiBmbikKCQkgICJXaGVyZSBpcyBjb21tYW5kOiAi KQoJCW9iYXJyYXkgJ2NvbW1hbmRwIHQgbmlsIG5pbAoJCShhbmQgZm4gKHN5bWJvbC1uYW1lIGZu KSkpKQogICAgIChsaXN0ICh1bmxlc3MgKGVxdWFsIHZhbCAiIikgKGludGVybiB2YWwpKQoJICAg Y3VycmVudC1wcmVmaXgtYXJnKSkpCiAgKHVubGVzcyBkZWZpbml0aW9uIChlcnJvciAiTm8gY29t bWFuZCIpKQogIChsZXQgKChmdW5jIChpbmRpcmVjdC1mdW5jdGlvbiBkZWZpbml0aW9uKSkKICAg ICAgICAoZGVmcyBuaWwpCiAgICAgICAgKHN0YW5kYXJkLW91dHB1dCAoaWYgaW5zZXJ0IChjdXJy ZW50LWJ1ZmZlcikgc3RhbmRhcmQtb3V0cHV0KSkpCiAgICA7OyBJbiBERUZTLCBmaW5kIGFsbCBz eW1ib2xzIHRoYXQgYXJlIGFsaWFzZXMgZm9yIERFRklOSVRJT04uCiAgICAobWFwYXRvbXMgKGxh bWJkYSAoc3ltYm9sKQoJCShhbmQgKGZib3VuZHAgc3ltYm9sKQoJCSAgICAgKG5vdCAoZXEgc3lt Ym9sIGRlZmluaXRpb24pKQoJCSAgICAgKGVxIGZ1bmMgKGNvbmRpdGlvbi1jYXNlICgpCgkJCQkg IChpbmRpcmVjdC1mdW5jdGlvbiBzeW1ib2wpCgkJCQkoZXJyb3Igc3ltYm9sKSkpCgkJICAgICAo cHVzaCBzeW1ib2wgZGVmcykpKSkKICAgIDs7IExvb2sgYXQgYWxsIHRoZSBzeW1ib2xzLS1maXJz dCBERUZJTklUSU9OLAogICAgOzsgdGhlbiBpdHMgYWxpYXNlcy4KICAgIChkb2xpc3QgKHN5bWJv bCAoY29ucyBkZWZpbml0aW9uIGRlZnMpKQogICAgICAobGV0KiAoKHJlbWFwcGVkIChjb21tYW5k LXJlbWFwcGluZyBzeW1ib2wpKQoJICAgICAoa2V5cyAod2hlcmUtaXMtaW50ZXJuYWwKCQkgICAg c3ltYm9sIG92ZXJyaWRpbmctbG9jYWwtbWFwIG5pbCBuaWwgcmVtYXBwZWQpKQoJICAgICAoa2V5 cyAobWFwY29uY2F0ICdrZXktZGVzY3JpcHRpb24ga2V5cyAiLCAiKSkKCSAgICAgc3RyaW5nKQoJ KHNldHEgc3RyaW5nCgkgICAgICAoaWYgaW5zZXJ0CgkJICAoaWYgKD4gKGxlbmd0aCBrZXlzKSAw KQoJCSAgICAgIChpZiByZW1hcHBlZAoJCQkgIChmb3JtYXQgIiVzICglcykgKHJlbWFwcGVkIGZy b20gJXMpIgoJCQkJICBrZXlzIHJlbWFwcGVkIHN5bWJvbCkKCQkJKGZvcm1hdCAiJXMgKCVzKSIg a2V5cyBzeW1ib2wpKQoJCSAgICAoZm9ybWF0ICJNLXggJXMgUkVUIiBzeW1ib2wpKQoJCShpZiAo PiAobGVuZ3RoIGtleXMpIDApCgkJICAgIChpZiByZW1hcHBlZAoJCQkoZm9ybWF0ICIlcyBpcyBy ZW1hcHBlZCB0byAlcyB3aGljaCBpcyBvbiAlcyIKCQkJCXN5bWJvbCByZW1hcHBlZCBrZXlzKQoJ CSAgICAgIChmb3JtYXQgIiVzIGlzIG9uICVzIiBzeW1ib2wga2V5cykpCgkJICA7OyBJZiB0aGlz IGlzIHRoZSBjb21tYW5kIHRoZSB1c2VyIGFza2VkIGFib3V0LAoJCSAgOzsgYW5kIGl0IGlzIG5v dCBvbiBhbnkga2V5LCBzYXkgc28uCgkJICA7OyBGb3Igb3RoZXIgc3ltYm9scywgaXRzIGFsaWFz ZXMsIHNheSBub3RoaW5nCgkJICA7OyBhYm91dCB0aGVtIHVubGVzcyB0aGV5IGFyZSBvbiBrZXlz LgoJCSAgKGlmIChlcSBzeW1ib2wgZGVmaW5pdGlvbikKCQkgICAgICAoZm9ybWF0ICIlcyBpcyBu b3Qgb24gYW55IGtleSIgc3ltYm9sKSkpKSkKCSh3aGVuIHN0cmluZwoJICAodW5sZXNzIChlcSBz eW1ib2wgZGVmaW5pdGlvbikKCSAgICAocHJpbmMgIjtcbiBpdHMgYWxpYXMgIikpCgkgIChwcmlu YyBzdHJpbmcpKSkpKQogIG5pbCkKCihkZWZ1biBoZWxwLWtleS1kZXNjcmlwdGlvbiAoa2V5IHVu dHJhbnNsYXRlZCkKICAobGV0ICgoc3RyaW5nIChrZXktZGVzY3JpcHRpb24ga2V5KSkpCiAgICAo aWYgKG9yIChub3QgdW50cmFuc2xhdGVkKQoJICAgIChhbmQgKGVxIChhcmVmIHVudHJhbnNsYXRl ZCAwKSA/XGUpIChub3QgKGVxIChhcmVmIGtleSAwKSA/XGUpKSkpCglzdHJpbmcKICAgICAgKGxl dCAoKG90aGVyc3RyaW5nIChrZXktZGVzY3JpcHRpb24gdW50cmFuc2xhdGVkKSkpCgkoaWYgKGVx dWFsIHN0cmluZyBvdGhlcnN0cmluZykKCSAgICBzdHJpbmcKCSAgKGZvcm1hdCAiJXMgKHRyYW5z bGF0ZWQgZnJvbSAlcykiIHN0cmluZyBvdGhlcnN0cmluZykpKSkpKQoKKGRlZnVuIGhlbHAtLWJp bmRpbmctdW5kZWZpbmVkLXAgKGRlZm4pCiAgKG9yIChudWxsIGRlZm4pIChpbnRlZ2VycCBkZWZu KSAoZXF1YWwgZGVmbiAndW5kZWZpbmVkKSkpCgooZGVmdW4gaGVscC0tYW5hbHl6ZS1rZXkgKGtl eSB1bnRyYW5zbGF0ZWQpCiAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCBLRVkgaXRzIGNvcnJlc3Bv bmRpbmcgVU5UUkFOU0xBVEVEIGV2ZW50cy4KUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGZvcm0gKEJS SUVGLURFU0MgREVGTiBFVkVOVCBNT1VTRS1NU0cpLiIKICAoaWYgKG51bWJlcnAgdW50cmFuc2xh dGVkKQogICAgICAoZXJyb3IgIk1pc3NpbmcgYHVudHJhbnNsYXRlZCchIikpCiAgKGxldCogKChl dmVudCAod2hlbiAoPiAobGVuZ3RoIGtleSkgMCkKICAgICAgICAgICAgICAgICAgKGFyZWYga2V5 IChpZiAoYW5kIChzeW1ib2xwIChhcmVmIGtleSAwKSkKCQkgICAgICAgICAgICAgICAgICAgICAo PiAobGVuZ3RoIGtleSkgMSkKCQkgICAgICAgICAgICAgICAgICAgICAoY29uc3AgKGFyZWYga2V5 IDEpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBMb29rIGF0IHRoZSBzZWNv bmQgZXZlbnQgd2hlbiB0aGUgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 OyBpcyBhIHBzZXVkby1ldmVudCBsaWtlIGBtb2RlLWxpbmUnIG9yCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOzsgYGxlZnQtZnJpbmdlJy4KCQkgICAgICAgICAgICAgICAgMQoJICAg ICAgICAgICAgICAgICAgICAgIDApKSkpCgkgKG1vZGlmaWVycyAoZXZlbnQtbW9kaWZpZXJzIGV2 ZW50KSkKCSAobW91c2UtbXNnIChpZiAob3IgKG1lbXEgJ2NsaWNrIG1vZGlmaWVycykgKG1lbXEg J2Rvd24gbW9kaWZpZXJzKQoJCQkgICAgKG1lbXEgJ2RyYWcgbW9kaWZpZXJzKSkKICAgICAgICAg ICAgICAgICAgICAgICAgIiBhdCB0aGF0IHNwb3QiICIiKSkKCSAoZGVmbiAoa2V5LWJpbmRpbmcg a2V5IHQpKSkKICAgIDs7IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBmYWtlZCBhbiBlbnRyeSBp biAiU2VsZWN0IGFuZCBQYXN0ZSIgbWVudS4KICAgICh3aGVuIChhbmQgKGVxIGRlZm4gbmlsKQoJ ICAgICAgIChzdHJpbmdwIChhcmVmIGtleSAoMS0gKGxlbmd0aCBrZXkpKSkpCgkgICAgICAgKGVx IChrZXktYmluZGluZyAoc3Vic3RyaW5nIGtleSAwIC0xKSkgJ3lhbmstbWVudSkpCiAgICAgIChz ZXRxIGRlZm4gJ21lbnUtYmFyLXNlbGVjdC15YW5rKSkKICAgIDs7IERvbid0IGJvdGhlciB1c2Vy IHdpdGggc3RyaW5ncyBmcm9tIChlLmcuKSB0aGUgc2VsZWN0LXBhc3RlIG1lbnUuCiAgICAod2hl biAoc3RyaW5ncCAoYXJlZiBrZXkgKDEtIChsZW5ndGgga2V5KSkpKQogICAgICAoYXNldCBrZXkg KDEtIChsZW5ndGgga2V5KSkgIihhbnkgc3RyaW5nKSIpKQogICAgKHdoZW4gKGFuZCB1bnRyYW5z bGF0ZWQKICAgICAgICAgICAgICAgKHN0cmluZ3AgKGFyZWYgdW50cmFuc2xhdGVkICgxLSAobGVu Z3RoIHVudHJhbnNsYXRlZCkpKSkpCiAgICAgIChhc2V0IHVudHJhbnNsYXRlZCAoMS0gKGxlbmd0 aCB1bnRyYW5zbGF0ZWQpKSAiKGFueSBzdHJpbmcpIikpCiAgICAobGlzdAogICAgIDs7IE5vdyBk ZXNjcmliZSB0aGUga2V5LCBwZXJoYXBzIGFzIGNoYW5nZWQuCiAgICAgKGxldCAoKGtleS1kZXNj IChoZWxwLWtleS1kZXNjcmlwdGlvbiBrZXkgdW50cmFuc2xhdGVkKSkpCiAgICAgICAoaWYgKGhl bHAtLWJpbmRpbmctdW5kZWZpbmVkLXAgZGVmbikKICAgICAgICAgICAoZm9ybWF0ICIlcyVzIGlz IHVuZGVmaW5lZCIga2V5LWRlc2MgbW91c2UtbXNnKQogICAgICAgICAoZm9ybWF0ICIlcyVzIHJ1 bnMgdGhlIGNvbW1hbmQgJVMiIGtleS1kZXNjIG1vdXNlLW1zZyBkZWZuKSkpCiAgICAgZGVmbiBl dmVudCBtb3VzZS1tc2cpKSkKCihkZWZ1biBoZWxwLS1maWx0ZXItaW5mby1saXN0IChpbmZvLWxp c3QgaSkKICAiRHJvcCB0aGUgdW5kZWZpbmVkIGtleXMuIgogIChvcgogICA7OyBSZW1vdmUgYWxs IGB1bmRlZmluZWQnIGtleXMuCiAgIChkZWxxIG5pbCAobWFwY2FyIChsYW1iZGEgKHgpCiAgICAg ICAgICAgICAgICAgICAgICAgKHVubGVzcyAoaGVscC0tYmluZGluZy11bmRlZmluZWQtcCAobnRo IGkgeCkpIHgpKQogICAgICAgICAgICAgICAgICAgICBpbmZvLWxpc3QpKQogICA7OyBJZiBub3Ro aW5nIGxlZnQsIHRoZW4ga2VlcCBvbmUgKHRoZSBsYXN0IG9uZSkuCiAgIChsYXN0IGluZm8tbGlz dCkpKQoKKGRlZnVuIGRlc2NyaWJlLWtleS1icmllZmx5ICgmb3B0aW9uYWwga2V5LWxpc3QgaW5z ZXJ0IHVudHJhbnNsYXRlZCkKICAiUHJpbnQgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9ucyBLRVkt TElTVCBpbnZva2VzLgpLRVktTElTVCBpcyBhIGxpc3Qgb2YgcGFpcnMgKFNFUSAuIFJBVy1TRVEp IG9mIGtleSBzZXF1ZW5jZXMsIHdoZXJlClJBVy1TRVEgaXMgdGhlIHVudHJhbnNsYXRlZCBmb3Jt IG9mIHRoZSBrZXkgc2VxdWVuY2UgU0VRLgpJZiBJTlNFUlQgKHRoZSBwcmVmaXggYXJnKSBpcyBu b24tbmlsLCBpbnNlcnQgdGhlIG1lc3NhZ2UgaW4gdGhlIGJ1ZmZlci4KCldoaWxlIHJlYWRpbmcg S0VZLUxJU1QgaW50ZXJhY3RpdmVseSwgdGhpcyBjb21tYW5kIHRlbXBvcmFyaWx5IGVuYWJsZXMK bWVudSBpdGVtcyBvciB0b29sLWJhciBidXR0b25zIHRoYXQgYXJlIGRpc2FibGVkIHRvIGFsbG93 IGdldHRpbmcgaGVscApvbiB0aGVtLiIKICAoZGVjbGFyZSAoYWR2ZXJ0aXNlZC1jYWxsaW5nLWNv bnZlbnRpb24gKGtleS1saXN0ICZvcHRpb25hbCBpbnNlcnQpICIyNy4xIikpCiAgKGludGVyYWN0 aXZlCiAgIDs7IElnbm9yZSBtb3VzZSBtb3ZlbWVudCBldmVudHMgYmVjYXVzZSBpdCdzIHRvbyBl YXN5IHRvIG1pc3MgdGhlCiAgIDs7IG1lc3NhZ2Ugd2hpbGUgbW92aW5nIHRoZSBtb3VzZS4KICAg KGxldCAoKGtleS1saXN0IChoZWxwLS1yZWFkLWtleS1zZXF1ZW5jZSAnbm8tbW91c2UtbW92ZW1l bnQpKSkKICAgICBgKCxrZXktbGlzdCAsY3VycmVudC1wcmVmaXgtYXJnKSkpCiAgKHdoZW4gKGFy cmF5cCBrZXktbGlzdCkKICAgIDs7IE9sZCBjYWxsaW5nIGNvbnZlbnRpb24sIGNoYW5nZWQKICAg IChzZXRxIGtleS1saXN0IChsaXN0IChjb25zIGtleS1saXN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgKG51bWJlcnAgdW50cmFuc2xhdGVkKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh0aGlzLXNpbmdsZS1jb21tYW5kLXJhdy1rZXlzKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnRyYW5zbGF0ZWQpKSkpKQogIChsZXQqICgoaW5mby1s aXN0IChtYXBjYXIgKGxhbWJkYSAoa3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICho ZWxwLS1hbmFseXplLWtleSAoY2FyIGtyKSAoY2RyIGtyKSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrZXktbGlzdCkpCiAgICAgICAgIChtc2cgKG1hcGNvbmNhdCAjJ2NhciAoaGVscC0t ZmlsdGVyLWluZm8tbGlzdCBpbmZvLWxpc3QgMSkgIlxuIikpKQogICAgKGlmIGluc2VydCAoaW5z ZXJ0IG1zZykgKG1lc3NhZ2UgIiVzIiBtc2cpKSkpCgooZGVmdW4gaGVscC0ta2V5LWJpbmRpbmct a2V5bWFwIChrZXkgJm9wdGlvbmFsIGFjY2VwdC1kZWZhdWx0IG5vLXJlbWFwIHBvc2l0aW9uKQog ICJSZXR1cm4gYSBrZXltYXAgaG9sZGluZyBhIGJpbmRpbmcgZm9yIEtFWSB3aXRoaW4gY3VycmVu dCBrZXltYXBzLgpUaGUgZWZmZWN0IG9mIHRoZSBhcmd1bWVudHMgS0VZLCBBQ0NFUFQtREVGQVVM VCwgTk8tUkVNQVAgYW5kClBPU0lUSU9OIGlzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIGZ1bmN0aW9u IGBrZXktYmluZGluZycuIgogIChsZXQqICgoYWN0aXZlLW1hcHMgKGN1cnJlbnQtYWN0aXZlLW1h cHMgdCBwb3NpdGlvbikpCiAgICAgICAgIG1hcCBmb3VuZCkKICAgIDs7IFdlIGxvb3Agb3ZlciBh Y3RpdmUgbWFwcyBsaWtlIGtleS1iaW5kaW5nIGRvZXMuCiAgICAod2hpbGUgKGFuZAogICAgICAg ICAgICAobm90IGZvdW5kKQogICAgICAgICAgICAoc2V0cSBtYXAgKHBvcCBhY3RpdmUtbWFwcykp KQogICAgICAoc2V0cSBmb3VuZCAobG9va3VwLWtleSBtYXAga2V5IGFjY2VwdC1kZWZhdWx0KSkK ICAgICAgKHdoZW4gKGludGVnZXJwIGZvdW5kKQogICAgICAgIDs7IFRoZSBmaXJzdCBgZm91bmQn IGNoYXJhY3RlcnMgb2YgS0VZIHdlcmUgZm91bmQgYnV0IG5vdCB0aGUKICAgICAgICA7OyB3aG9s ZSBzZXF1ZW5jZS4KICAgICAgICAoc2V0cSBmb3VuZCBuaWwpKSkKICAgICh3aGVuIGZvdW5kCiAg ICAgIChpZiAoYW5kIChzeW1ib2xwIGZvdW5kKQogICAgICAgICAgICAgICAobm90IG5vLXJlbWFw KQogICAgICAgICAgICAgICAoY29tbWFuZC1yZW1hcHBpbmcgZm91bmQpKQogICAgICAgICAgOzsg VGhlIHVzZXIgbWlnaHQgd2FudCB0byBrbm93IGluIHdoaWNoIG1hcCB0aGUgYmluZGluZyBpcwog ICAgICAgICAgOzsgZm91bmQsIG9yIGluIHdoaWNoIG1hcCB0aGUgcmVtYXBwaW5nIGlzIGZvdW5k LiAgVGhlCiAgICAgICAgICA7OyBkZWZhdWx0IGlzIHRvIHNob3cgdGhlIGxhdHRlci4KICAgICAg ICAgIChoZWxwLS1rZXktYmluZGluZy1rZXltYXAgKHZlY3RvciAncmVtYXAgZm91bmQpKQogICAg ICAgIG1hcCkpKSkKCihkZWZ1biBoZWxwLS1iaW5kaW5nLWxvY3VzIChrZXkgcG9zaXRpb24pCiAg IkRlc2NyaWJlIGluIHdoaWNoIGtleW1hcCBLRVkgaXMgZGVmaW5lZC4KUmV0dXJuIGEgc3ltYm9s IHBvaW50aW5nIHRvIHRoYXQga2V5bWFwIGlmIG9uZSBleGlzdHMgOyBvdGhlcndpc2UKcmV0dXJu IG5pbC4gIFRoZSBhcmd1bWVudCBQT1NJVElPTiBpcyBhcyBkb2N1bWVudGVkIGluIHRoZQpmdW5j dGlvbiBga2V5LWJpbmRpbmcnLiIKICAobGV0ICgobWFwIChoZWxwLS1rZXktYmluZGluZy1rZXlt YXAga2V5IHQgbmlsIHBvc2l0aW9uKSkpCiAgICAod2hlbiBtYXAKICAgICAgKGNhdGNoICdmb3Vu ZAogICAgICAgIChsZXQgKChhZHZlcnRpc2VkLXN5bXMgKG5jb25jCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxpc3QgJ292ZXJyaWRpbmctdGVybWluYWwtbG9jYWwtbWFwCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ292ZXJyaWRpbmctbG9jYWwtbWFwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxxIG5pbAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxhbWJkYSAobW9kZS1hbmQtbWFwKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsZXQgKChtb2RlIChjYXIgbW9kZS1hbmQtbWFwKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hlbiAoc3ltYm9sLXZhbHVl IG1vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRl cm4tc29mdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZv cm1hdCAiJXMtbWFwIiBtb2RlKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWlub3ItbW9kZS1tYXAtYWxpc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsaXN0ICdnbG9iYWwtbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGludGVybi1zb2Z0IChmb3JtYXQgIiVzLW1hcCIgbWFqb3ItbW9kZSkpKSkpKQogICAgICAg ICAgOzsgTG9vayBpbnRvIHRoZXNlIGFkdmVydGlzZWQgc3ltYm9scyBmaXJzdC4KICAgICAgICAg IChkb2xpc3QgKHN5bSBhZHZlcnRpc2VkLXN5bXMpCiAgICAgICAgICAgICh3aGVuIChhbmQKICAg ICAgICAgICAgICAgICAgIChib3VuZHAgc3ltKQogICAgICAgICAgICAgICAgICAgKGVxIG1hcCAo c3ltYm9sLXZhbHVlIHN5bSkpKQogICAgICAgICAgICAgICh0aHJvdyAnZm91bmQgc3ltKSkpCiAg ICAgICAgICA7OyBPbmx5IGxvb2sgaW4gb3RoZXIgc3ltYm9scyBvdGhlcndpc2UuCiAgICAgICAg ICAobWFwYXRvbXMKICAgICAgICAgICAobGFtYmRhICh4KQogICAgICAgICAgICAgKHdoZW4gKGFu ZCAoYm91bmRwIHgpCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IEF2b2lkIGxldC1ib3VuZCBz eW1ib2xzLgogICAgICAgICAgICAgICAgICAgICAgICAoc3BlY2lhbC12YXJpYWJsZS1wIHgpCiAg ICAgICAgICAgICAgICAgICAgICAgIChlcSAoc3ltYm9sLXZhbHVlIHgpIG1hcCkpCiAgICAgICAg ICAgICAgICh0aHJvdyAnZm91bmQgeCkpKSkKICAgICAgICAgIG5pbCkpKSkpCgooZGVmdW4gaGVs cC0tcmVhZC1rZXktc2VxdWVuY2UgKCZvcHRpb25hbCBuby1tb3VzZS1tb3ZlbWVudCkKICAiUmVh ZCBhIGtleSBzZXF1ZW5jZSBmcm9tIHRoZSB1c2VyLgpVc3VhbGx5IHJlYWRzIGEgc2luZ2xlIGtl eSBzZXF1ZW5jZSwgZXhjZXB0IHdoZW4gdGhhdCBzZXF1ZW5jZSBtaWdodApoaWRlIGFub3RoZXIg b25lIChlLmcuIGEgZG93biBldmVudCwgd2hlcmUgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZAppbiBn ZXR0aW5nIGluZm8gYWJvdXQgdGhlIHVwIGV2ZW50LCBvciBhIGNsaWNrIGV2ZW50LCB3aGVyZSB0 aGUgdXNlcgp3YW50cyB0byBnZXQgaW5mbyBhYm91dCB0aGUgZG91YmxlIGNsaWNrKS4KUmV0dXJu IGEgbGlzdCBvZiBlbGVtZW50cyBvZiB0aGUgZm9ybSAoU0VRIC4gUkFXLVNFUSksIHdoZXJlIFNF USBpcyBhIGtleQpzZXF1ZW5jZSwgYW5kIFJBVy1TRVEgaXMgaXRzIHVudHJhbnNsYXRlZCBmb3Jt LgpJZiBOTy1NT1VTRS1NT1ZFTUVOVCBpcyBub24tbmlsLCBpZ25vcmUga2V5IHNlcXVlbmNlcyBz dGFydGluZwp3aXRoIGBtb3VzZS1tb3ZlbWVudCcgZXZlbnRzLiIKICAobGV0ICgoZW5hYmxlLWRp c2FibGVkLW1lbnVzLWFuZC1idXR0b25zIHQpCiAgICAgICAgKGN1cnNvci1pbi1lY2hvLWFyZWEg dCkKICAgICAgICBzYXZlZC15YW5rLW1lbnUpCiAgICAodW53aW5kLXByb3RlY3QKICAgICAgICAo bGV0IChsYXN0LW1vZGlmaWVycyBrZXktbGlzdCkKICAgICAgICAgIDs7IElmIHlhbmstbWVudSBp cyBlbXB0eSwgcG9wdWxhdGUgaXQgdGVtcG9yYXJpbHksIHNvIHRoYXQKICAgICAgICAgIDs7ICJT ZWxlY3QgYW5kIFBhc3RlIiBtZW51IGNhbiBnZW5lcmF0ZSBhIGNvbXBsZXRlIGV2ZW50LgogICAg ICAgICAgKHdoZW4gKG51bGwgKGNkciB5YW5rLW1lbnUpKQogICAgICAgICAgICAoc2V0cSBzYXZl ZC15YW5rLW1lbnUgKGNvcHktc2VxdWVuY2UgeWFuay1tZW51KSkKICAgICAgICAgICAgKG1lbnUt YmFyLXVwZGF0ZS15YW5rLW1lbnUgIihhbnkgc3RyaW5nKSIgbmlsKSkKICAgICAgICAgICh3aGls ZQogICAgICAgICAgICAgIDs7IFJlYWQgYXQgbGVhc3Qgb25lIGtleS1zZXF1ZW5jZS4KICAgICAg ICAgICAgICAob3IgKG51bGwga2V5LWxpc3QpCiAgICAgICAgICAgICAgICAgIDs7IEFmdGVyIGEg ZG93biBldmVudCwgYWxzbyByZWFkIHRoZSAocHJlc3VtYWJseSkgZm9sbG93aW5nCiAgICAgICAg ICAgICAgICAgIDs7IHVwLWV2ZW50LgogICAgICAgICAgICAgICAgICAobWVtcSAnZG93biBsYXN0 LW1vZGlmaWVycykKICAgICAgICAgICAgICAgICAgOzsgQWZ0ZXIgYSBjbGljaywgc2VlIGlmIGEg ZG91YmxlIGNsaWNrIGlzIG9uIHRoZSB3YXkuCiAgICAgICAgICAgICAgICAgIChhbmQgKG1lbXEg J2NsaWNrIGxhc3QtbW9kaWZpZXJzKQogICAgICAgICAgICAgICAgICAgICAgIChub3QgKHNpdC1m b3IgKC8gZG91YmxlLWNsaWNrLXRpbWUgMTAwMC4wKSB0KSkpKQogICAgICAgICAgICAobGV0KiAo KHNlcSAocmVhZC1rZXktc2VxdWVuY2UgIlwKRGVzY3JpYmUgdGhlIGZvbGxvd2luZyBrZXksIG1v dXNlIGNsaWNrLCBvciBtZW51IGl0ZW06ICIpKQogICAgICAgICAgICAgICAgICAgKHJhdy1zZXEg KHRoaXMtc2luZ2xlLWNvbW1hbmQtcmF3LWtleXMpKQogICAgICAgICAgICAgICAgICAgKGtleW4g KHdoZW4gKD4gKGxlbmd0aCBzZXEpIDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmVm IHNlcSAoMS0gKGxlbmd0aCBzZXEpKSkpKQogICAgICAgICAgICAgICAgICAgKGJhc2UgKGV2ZW50 LWJhc2ljLXR5cGUga2V5bikpCiAgICAgICAgICAgICAgICAgICAobW9kaWZpZXJzIChldmVudC1t b2RpZmllcnMga2V5bikpKQogICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICgoemVy b3AgKGxlbmd0aCBzZXEpKSkgICA7RklYTUU6IENhbiB0aGlzIGhhcHBlbj8KICAgICAgICAgICAg ICAgKChhbmQgbm8tbW91c2UtbW92ZW1lbnQgKGVxIGJhc2UgJ21vdXNlLW1vdmVtZW50KSkgbmls KQogICAgICAgICAgICAgICAoKGVxIGJhc2UgJ2hlbHAtZWNobykgbmlsKQogICAgICAgICAgICAg ICAodAogICAgICAgICAgICAgICAgKHNldHEgbGFzdC1tb2RpZmllcnMgbW9kaWZpZXJzKQogICAg ICAgICAgICAgICAgKHB1c2ggKGNvbnMgc2VxIHJhdy1zZXEpIGtleS1saXN0KSkpKSkKICAgICAg ICAgIChucmV2ZXJzZSBrZXktbGlzdCkpCiAgICAgIDs7IFB1dCB5YW5rLW1lbnUgYmFjayBhcyBp dCB3YXMsIGlmIHdlIGNoYW5nZWQgaXQuCiAgICAgICh3aGVuIHNhdmVkLXlhbmstbWVudQogICAg ICAgIChzZXRxIHlhbmstbWVudSAoY29weS1zZXF1ZW5jZSBzYXZlZC15YW5rLW1lbnUpKQogICAg ICAgIChmc2V0ICd5YW5rLW1lbnUgKGNvbnMgJ2tleW1hcCB5YW5rLW1lbnUpKSkpKSkKCihkZWZ1 biBkZXNjcmliZS1rZXkgKCZvcHRpb25hbCBrZXktbGlzdCBidWZmZXIgdXAtZXZlbnQpCiAgIkRp c3BsYXkgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZnVuY3Rpb24gaW52b2tlZCBieSBLRVktTElTVC4K S0VZLUxJU1QgY2FuIGJlIGFueSBraW5kIG9mIGEga2V5IHNlcXVlbmNlOyBpdCBjYW4gaW5jbHVk ZSBrZXlib2FyZCBldmVudHMsCm1vdXNlIGV2ZW50cywgYW5kL29yIG1lbnUgZXZlbnRzLiAgV2hl biBjYWxsaW5nIGZyb20gYSBwcm9ncmFtLApwYXNzIEtFWS1MSVNUIGFzIGEgbGlzdCBvZiBlbGVt ZW50cyAoU0VRIC4gUkFXLVNFUSkgd2hlcmUgU0VRIGlzCmEga2V5LXNlcXVlbmNlIGFuZCBSQVct U0VRIGlzIGl0cyB1bnRyYW5zbGF0ZWQgZm9ybS4KCldoaWxlIHJlYWRpbmcgS0VZLUxJU1QgaW50 ZXJhY3RpdmVseSwgdGhpcyBjb21tYW5kIHRlbXBvcmFyaWx5IGVuYWJsZXMKbWVudSBpdGVtcyBv ciB0b29sLWJhciBidXR0b25zIHRoYXQgYXJlIGRpc2FibGVkIHRvIGFsbG93IGdldHRpbmcgaGVs cApvbiB0aGVtLgoKQlVGRkVSIGlzIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gbG9va3VwIHRob3Nl IGtleXM7IGl0IGRlZmF1bHRzIHRvIHRoZQpjdXJyZW50IGJ1ZmZlci4iCiAgKGRlY2xhcmUgKGFk dmVydGlzZWQtY2FsbGluZy1jb252ZW50aW9uIChrZXktbGlzdCAmb3B0aW9uYWwgYnVmZmVyKSAi MjcuMSIpKQogIChpbnRlcmFjdGl2ZSAobGlzdCAoaGVscC0tcmVhZC1rZXktc2VxdWVuY2UpKSkK ICAod2hlbiAoYXJyYXlwIGtleS1saXN0KQogICAgOzsgQ29tcGF0aWJpbGl0eSB3aXRoIG9sZCBj YWxsaW5nIGNvbnZlbnRpb24uCiAgICAoc2V0cSBrZXktbGlzdCAoY29ucyAobGlzdCBrZXktbGlz dCkgKGlmIHVwLWV2ZW50IChsaXN0IHVwLWV2ZW50KSkpKQogICAgKHdoZW4gYnVmZmVyCiAgICAg IChsZXQgKChyYXcgKGlmIChudW1iZXJwIGJ1ZmZlcikgKHRoaXMtc2luZ2xlLWNvbW1hbmQtcmF3 LWtleXMpIGJ1ZmZlcikpKQogICAgICAgIChzZXRmIChjZGFyIChsYXN0IGtleS1saXN0KSkgcmF3 KSkpCiAgICAoc2V0cSBidWZmZXIgbmlsKSkKICAobGV0KiAoKGJ1ZiAob3IgYnVmZmVyIChjdXJy ZW50LWJ1ZmZlcikpKQogICAgICAgICAob24tbGluawogICAgICAgICAgKG1hcGNhciAobGFtYmRh IChrcikKICAgICAgICAgICAgICAgICAgICAobGV0ICgocmF3IChjZHIga3IpKSkKICAgICAgICAg ICAgICAgICAgICAgIChhbmQgKG5vdCAobWVtcSBtb3VzZS0xLWNsaWNrLWZvbGxvd3MtbGluayAn KG5pbCBkb3VibGUpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKD4gKGxlbmd0aCByYXcp IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoY2FyLXNhZmUgKGFyZWYgcmF3IDAp KSAnbW91c2UtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZm ZXIgYnVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlLW9uLWxpbmstcCAoZXZl bnQtc3RhcnQgKGFyZWYgcmF3IDApKSkpKSkpCiAgICAgICAgICAgICAgICAgIGtleS1saXN0KSkK ICAgICAgICAgKGluZm8tbGlzdAogICAgICAgICAgKGhlbHAtLWZpbHRlci1pbmZvLWxpc3QKICAg ICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKICAgICAgICAgICAgIChtYXBjYXIgKGxh bWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgICAocGNhc2UtbGV0KiAoKGAoLHNlcSAuICxy YXctc2VxKSB4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYCgsYnJpZWYt ZGVzYyAsZGVmbiAsZXZlbnQgLF9tb3VzZS1tc2cpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaGVscC0tYW5hbHl6ZS1rZXkgc2VxIHJhdy1zZXEpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9jdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChoZWxwLS1iaW5kaW5nLWxvY3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VxIChldmVudC1zdGFydCBldmVudCkpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgIGAoLHNlcSAsYnJpZWYtZGVzYyAsZGVmbiAsbG9jdXMpKSkKICAgICAgICAgICAgICAg ICAgICAga2V5LWxpc3QpKQogICAgICAgICAgIDIpKSkKICAgIChoZWxwLXNldHVwLXhyZWYgKGxp c3QgKGxhbWJkYSAoa2V5LWxpc3QgYnVmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChk ZXNjcmliZS1rZXkga2V5LWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChpZiAoYnVmZmVyLWxpdmUtcCBidWYpIGJ1ZikpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICBrZXktbGlzdCBidWYpCgkJICAgICAoY2FsbGVkLWludGVyYWN0aXZlbHktcCAnaW50 ZXJhY3RpdmUpKQogICAgKGlmIChhbmQgKDw9IChsZW5ndGggaW5mby1saXN0KSAxKQogICAgICAg ICAgICAgKGhlbHAtLWJpbmRpbmctdW5kZWZpbmVkLXAgKG50aCAyIChjYXIgaW5mby1saXN0KSkp KQogICAgICAgIChtZXNzYWdlICIlcyIgKG50aCAxIChjYXIgaW5mby1saXN0KSkpCiAgICAgICh3 aXRoLWhlbHAtd2luZG93IChoZWxwLWJ1ZmZlcikKICAgICAgICAod2hlbiAoPiAobGVuZ3RoIGlu Zm8tbGlzdCkgMSkKICAgICAgICAgIDs7IEZJWE1FOiBNYWtlIHRoaXMgaW50byBjbGlja2FibGUg aHlwZXJsaW5rcy4KICAgICAgICAgIChwcmluYyAiVGhlcmUgd2VyZSBzZXZlcmFsIGtleS1zZXF1 ZW5jZXM6XG5cbiIpCiAgICAgICAgICAocHJpbmMgKG1hcGNvbmNhdCAobGFtYmRhIChpbmZvKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGNhc2UtbGV0ICgoYCgsX3NlcSAsYnJpZWYt ZGVzYyAsX2RlZm4gLF9sb2N1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluZm8pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgIiAg IiBicmllZi1kZXNjKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLWxpc3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIpKQogICAgICAgICAgKHdoZW4gKGRlbHEgbmls IG9uLWxpbmspCiAgICAgICAgICAgIChwcmluYyAiXG5cblRob3NlIGFyZSBpbmZsdWVuY2VkIGJ5 IGBtb3VzZS0xLWNsaWNrLWZvbGxvd3MtbGluayciKSkKICAgICAgICAgIChwcmluYyAiXG5cblRo ZXkncmUgYWxsIGRlc2NyaWJlZCBiZWxvdy4iKSkKICAgICAgICAocGNhc2UtZG9saXN0IChgKCxf c2VxICxicmllZi1kZXNjICxkZWZuICxsb2N1cykKICAgICAgICAgICAgICAgICAgICAgICBpbmZv LWxpc3QpCiAgICAgICAgICAod2hlbiBkZWZuCiAgICAgICAgICAgICh3aGVuICg+IChsZW5ndGgg aW5mby1saXN0KSAxKQogICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJk LW91dHB1dAogICAgICAgICAgICAgICAgKGluc2VydCAiXG5cbiIKICAgICAgICAgICAgICAgICAg ICAgICAgOzsgRklYTUU6IENhbid0IHVzZSBldmFsLXdoZW4tY29tcGlsZSBiZWNhdXNlIHB1cmlm aWVkCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IHN0cmluZ3MgbG9zZSB0aGVpciB0ZXh0IHBy b3BlcnRpZXMgOi0oCiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICJcbiIgJ2Zh Y2UgJyg6aGVpZ2h0IDAuMSA6aW52ZXJzZS12aWRlbyB0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgIlxuIikpKQoKICAgICAgICAgICAgKHByaW5jIGJyaWVmLWRlc2MpCiAgICAgICAgICAgICh3 aGVuIGxvY3VzCiAgICAgICAgICAgICAgKHByaW5jIChmb3JtYXQgIiAoZm91bmQgaW4gJXMpIiBs b2N1cykpKQogICAgICAgICAgICAocHJpbmMgIiwgd2hpY2ggaXMgIikKCSAgICAoZGVzY3JpYmUt ZnVuY3Rpb24tMSBkZWZuKSkpKSkpKQoMCihkZWZ1biBkZXNjcmliZS1tb2RlICgmb3B0aW9uYWwg YnVmZmVyKQogICJEaXNwbGF5IGRvY3VtZW50YXRpb24gb2YgY3VycmVudCBtYWpvciBtb2RlIGFu ZCBtaW5vciBtb2Rlcy4KQSBicmllZiBzdW1tYXJ5IG9mIHRoZSBtaW5vciBtb2RlcyBjb21lcyBm aXJzdCwgZm9sbG93ZWQgYnkgdGhlCm1ham9yIG1vZGUgZGVzY3JpcHRpb24uICBUaGlzIGlzIGZv bGxvd2VkIGJ5IGRldGFpbGVkCmRlc2NyaXB0aW9ucyBvZiB0aGUgbWlub3IgbW9kZXMsIGVhY2gg b24gYSBzZXBhcmF0ZSBwYWdlLgoKRm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkgZm9yIGEgbWlu b3IgbW9kZSwgdGhlIG1vZGUncyBpbmRpY2F0b3IKdmFyaWFibGUgXChsaXN0ZWQgaW4gYG1pbm9y LW1vZGUtYWxpc3QnKSBtdXN0IGFsc28gYmUgYSBmdW5jdGlvbgp3aG9zZSBkb2N1bWVudGF0aW9u IGRlc2NyaWJlcyB0aGUgbWlub3IgbW9kZS4KCklmIGNhbGxlZCBmcm9tIExpc3Agd2l0aCBhIG5v bi1uaWwgQlVGRkVSIGFyZ3VtZW50LCBkaXNwbGF5CmRvY3VtZW50YXRpb24gZm9yIHRoZSBtYWpv ciBhbmQgbWlub3IgbW9kZXMgb2YgdGhhdCBidWZmZXIuIgogIChpbnRlcmFjdGl2ZSAiQCIpCiAg KHVubGVzcyBidWZmZXIgKHNldHEgYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQogIChoZWxwLXNl dHVwLXhyZWYgKGxpc3QgIydkZXNjcmliZS1tb2RlIGJ1ZmZlcikKCQkgICAoY2FsbGVkLWludGVy YWN0aXZlbHktcCAnaW50ZXJhY3RpdmUpKQogIDs7IEZvciB0aGUgc2FrZSBvZiBoZWxwLWRvLXhy ZWYgYW5kIGhlbHAteHJlZi1nby1iYWNrLAogIDs7IGRvbid0IHN3aXRjaCBidWZmZXJzIGJlZm9y ZSBjYWxsaW5nIGBoZWxwLWJ1ZmZlcicuCiAgKHdpdGgtaGVscC13aW5kb3cgKGhlbHAtYnVmZmVy KQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAgICAgIChsZXQgKG1pbm9yLW1vZGVz KQoJOzsgT2xkZXIgcGFja2FnZXMgZG8gbm90IHJlZ2lzdGVyIGluIG1pbm9yLW1vZGUtbGlzdCBi dXQgb25seSBpbgoJOzsgbWlub3ItbW9kZS1hbGlzdC4KCShkb2xpc3QgKHggbWlub3ItbW9kZS1h bGlzdCkKCSAgKHNldHEgeCAoY2FyIHgpKQoJICAodW5sZXNzIChtZW1xIHggbWlub3ItbW9kZS1s aXN0KQoJICAgIChwdXNoIHggbWlub3ItbW9kZS1saXN0KSkpCgk7OyBGaW5kIGVuYWJsZWQgbWlu b3IgbW9kZSB3ZSB3aWxsIHdhbnQgdG8gbWVudGlvbi4KCShkb2xpc3QgKG1vZGUgbWlub3ItbW9k ZS1saXN0KQoJICA7OyBEb2N1bWVudCBhIG1pbm9yIG1vZGUgaWYgaXQgaXMgbGlzdGVkIGluIG1p bm9yLW1vZGUtYWxpc3QsCgkgIDs7IG5vbi1uaWwsIGFuZCBoYXMgYSBmdW5jdGlvbiBkZWZpbml0 aW9uLgoJICAobGV0ICgoZm1vZGUgKG9yIChnZXQgbW9kZSA6bWlub3ItbW9kZS1mdW5jdGlvbikg bW9kZSkpKQoJICAgIChhbmQgKGJvdW5kcCBtb2RlKSAoc3ltYm9sLXZhbHVlIG1vZGUpCgkJIChm Ym91bmRwIGZtb2RlKQoJCSAobGV0ICgocHJldHR5LW1pbm9yLW1vZGUKCQkJKGlmIChzdHJpbmct bWF0Y2ggIlxcKFxcKC1taW5vclxcKT8tbW9kZVxcKT9cXCciCgkJCQkJICAoc3ltYm9sLW5hbWUg Zm1vZGUpKQoJCQkgICAgKGNhcGl0YWxpemUKCQkJICAgICAoc3Vic3RyaW5nIChzeW1ib2wtbmFt ZSBmbW9kZSkKCQkJCQkwIChtYXRjaC1iZWdpbm5pbmcgMCkpKQoJCQkgIGZtb2RlKSkpCgkJICAg KHB1c2ggKGxpc3QgZm1vZGUgcHJldHR5LW1pbm9yLW1vZGUKCQkJICAgICAgIChmb3JtYXQtbW9k ZS1saW5lIChhc3NxIG1vZGUgbWlub3ItbW9kZS1hbGlzdCkpKQoJCQkgbWlub3ItbW9kZXMpKSkp KQoJKHNldHEgbWlub3ItbW9kZXMKCSAgICAgIChzb3J0IG1pbm9yLW1vZGVzCgkJICAgIChsYW1i ZGEgKGEgYikgKHN0cmluZy1sZXNzcCAoY2FkciBhKSAoY2FkciBiKSkpKSkKCSh3aGVuIG1pbm9y LW1vZGVzCgkgIChwcmluYyAiRW5hYmxlZCBtaW5vciBtb2RlczpcbiIpCgkgIChtYWtlLWxvY2Fs LXZhcmlhYmxlICdoZWxwLWJ1dHRvbi1jYWNoZSkKCSAgKHdpdGgtY3VycmVudC1idWZmZXIgc3Rh bmRhcmQtb3V0cHV0CgkgICAgKGRvbGlzdCAobW9kZSBtaW5vci1tb2RlcykKCSAgICAgIChsZXQg KChtb2RlLWZ1bmN0aW9uIChudGggMCBtb2RlKSkKCQkgICAgKHByZXR0eS1taW5vci1tb2RlIChu dGggMSBtb2RlKSkKCQkgICAgKGluZGljYXRvciAobnRoIDIgbW9kZSkpKQoJCShzYXZlLWV4Y3Vy c2lvbgoJCSAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKCQkgIChwcmluYyAiXG5cZlxuIikKCQkg IChwdXNoIChwb2ludC1tYXJrZXIpIGhlbHAtYnV0dG9uLWNhY2hlKQoJCSAgOzsgRG9jdW1lbnQg dGhlIG1pbm9yIG1vZGVzIGZ1bGx5LgogICAgICAgICAgICAgICAgICAoaW5zZXJ0LXRleHQtYnV0 dG9uCiAgICAgICAgICAgICAgICAgICBwcmV0dHktbWlub3ItbW9kZSAndHlwZSAnaGVscC1mdW5j dGlvbgogICAgICAgICAgICAgICAgICAgJ2hlbHAtYXJncyAobGlzdCBtb2RlLWZ1bmN0aW9uKQog ICAgICAgICAgICAgICAgICAgJ2J1dHRvbiAnKHQpKQoJCSAgKHByaW5jIChmb3JtYXQgIiBtaW5v ciBtb2RlICglcyk6XG4iCgkJCQkgKGlmICh6ZXJvcCAobGVuZ3RoIGluZGljYXRvcikpCgkJCQkg ICAgICJubyBpbmRpY2F0b3IiCgkJCQkgICAoZm9ybWF0ICJpbmRpY2F0b3IlcyIKCQkJCQkgICBp bmRpY2F0b3IpKSkpCgkJICAocHJpbmMgKGRvY3VtZW50YXRpb24gbW9kZS1mdW5jdGlvbikpKQoJ CShpbnNlcnQtYnV0dG9uIHByZXR0eS1taW5vci1tb2RlCgkJCSAgICAgICAnYWN0aW9uIChjYXIg aGVscC1idXR0b24tY2FjaGUpCgkJCSAgICAgICAnZm9sbG93LWxpbmsgdAoJCQkgICAgICAgJ2hl bHAtZWNobyAibW91c2UtMiwgUkVUOiBzaG93IGZ1bGwgaW5mb3JtYXRpb24iKQoJCShuZXdsaW5l KSkpCgkgICAgKGZvcndhcmQtbGluZSAtMSkKCSAgICAoZmlsbC1wYXJhZ3JhcGggbmlsKQoJICAg IChmb3J3YXJkLWxpbmUgMSkpCgoJICAocHJpbmMgIlxuKEluZm9ybWF0aW9uIGFib3V0IHRoZXNl IG1pbm9yIG1vZGVzIGZvbGxvd3MgdGhlIG1ham9yIG1vZGUgaW5mby4pXG5cbiIpKQoJOzsgRG9j dW1lbnQgdGhlIG1ham9yIG1vZGUuCgkobGV0ICgobW9kZSBtb2RlLW5hbWUpKQoJICAod2l0aC1j dXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKICAgICAgICAgICAgKGxldCAoKHN0YXJ0IChw b2ludCkpKQogICAgICAgICAgICAgIChpbnNlcnQgKGZvcm1hdC1tb2RlLWxpbmUgbW9kZSBuaWwg bmlsIGJ1ZmZlcikpCiAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBv aW50KSAnKGZhY2UgYm9sZCkpKSkpCgkocHJpbmMgIiBtb2RlIikKCShsZXQqICgobW9kZSBtYWpv ci1tb2RlKQoJICAgICAgIChmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIG1v ZGUgbmlsKSkpCgkgICh3aGVuIGZpbGUtbmFtZQoJICAgIChwcmluYyAoZm9ybWF0LW1lc3NhZ2Ug IiBkZWZpbmVkIGluIGAlcyciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZp bGUtbmFtZS1ub25kaXJlY3RvcnkgZmlsZS1uYW1lKSkpCgkgICAgOzsgTWFrZSBhIGh5cGVybGlu ayB0byB0aGUgbGlicmFyeS4KCSAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRw dXQKCSAgICAgIChzYXZlLWV4Y3Vyc2lvbgoJCShyZS1zZWFyY2gtYmFja3dhcmQgKHN1YnN0aXR1 dGUtY29tbWFuZC1rZXlzICJgXFwoW15gJ10rXFwpJyIpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5pbCB0KQoJCShoZWxwLXhyZWYtYnV0dG9uIDEgJ2hlbHAtZnVuY3Rpb24t ZGVmIG1vZGUgZmlsZS1uYW1lKSkpKSkKCShwcmluYyAiOlxuIikKCShwcmluYyAoZG9jdW1lbnRh dGlvbiBtYWpvci1tb2RlKSkpKSkKICA7OyBGb3IgdGhlIHNha2Ugb2YgSUVMTSBhbmQgbWF5YmUg b3RoZXJzCiAgbmlsKQoKCihkZWZ1biBkZXNjcmliZS1taW5vci1tb2RlIChtaW5vci1tb2RlKQog ICJEaXNwbGF5IGRvY3VtZW50YXRpb24gb2YgYSBtaW5vciBtb2RlIGdpdmVuIGFzIE1JTk9SLU1P REUuCk1JTk9SLU1PREUgY2FuIGJlIGEgbWlub3IgbW9kZSBzeW1ib2wgb3IgYSBtaW5vciBtb2Rl IGluZGljYXRvciBzdHJpbmcKYXBwZWFyZWQgb24gdGhlIG1vZGUtbGluZS4iCiAgKGludGVyYWN0 aXZlIChsaXN0IChjb21wbGV0aW5nLXJlYWQKCQkgICAgICAiTWlub3IgbW9kZTogIgoJCQkgICAg ICAobmNvbmMKCQkJICAgICAgIChkZXNjcmliZS1taW5vci1tb2RlLWNvbXBsZXRpb24tdGFibGUt Zm9yLXN5bWJvbCkKCQkJICAgICAgIChkZXNjcmliZS1taW5vci1tb2RlLWNvbXBsZXRpb24tdGFi bGUtZm9yLWluZGljYXRvcikKCQkJICAgICAgICkpKSkKICAoaWYgKHN5bWJvbHAgbWlub3ItbW9k ZSkKICAgICAgKHNldHEgbWlub3ItbW9kZSAoc3ltYm9sLW5hbWUgbWlub3ItbW9kZSkpKQogIChs ZXQgKChzeW1ib2xzIChkZXNjcmliZS1taW5vci1tb2RlLWNvbXBsZXRpb24tdGFibGUtZm9yLXN5 bWJvbCkpCgkoaW5kaWNhdG9ycyAoZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxl LWZvci1pbmRpY2F0b3IpKSkKICAgIChjb25kCiAgICAgKChtZW1iZXIgbWlub3ItbW9kZSBzeW1i b2xzKQogICAgICAoZGVzY3JpYmUtbWlub3ItbW9kZS1mcm9tLXN5bWJvbCAoaW50ZXJuIG1pbm9y LW1vZGUpKSkKICAgICAoKG1lbWJlciBtaW5vci1tb2RlIGluZGljYXRvcnMpCiAgICAgIChkZXNj cmliZS1taW5vci1tb2RlLWZyb20taW5kaWNhdG9yIG1pbm9yLW1vZGUpKQogICAgICh0CiAgICAg IChlcnJvciAiTm8gc3VjaCBtaW5vciBtb2RlOiAlcyIgbWlub3ItbW9kZSkpKSkpCgoKKGRlZnVu IHNlYXJjaC1mb3J3YXJkLWhlbHAtZm9yLWhlbHAoKQogICJBbGxvd3MgdG8gcmVzZWFyY2ggZm9y d2FyZCBhIHN0cmluZyBpbnRvIHRoZSAqTWV0YWhlbHAqIHdpbmRvdyIKICAoaW50ZXJhY3RpdmUp CiAgOztNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSAqTWV0YWhlbHAqIHdpbmRvdwogIChzd2l0Y2gt dG8tYnVmZmVyLW90aGVyLXdpbmRvdyAiICpNZXRhaGVscCoiKQogIDs7IERvIGluY3JlbWVudGFs IHNlYXJjaCBmb3J3YXJkLgogIChpc2VhcmNoLWZvcndhcmQgbmlsIDEpKQoKCjs7IHN5bWJvbAoo ZGVmdW4gZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1zeW1ib2wgKCkK ICA7OyBJbiBvcmRlciB0byBsaXN0IHVwIGFsbCBtaW5vciBtb2RlcywgbWlub3ItbW9kZS1saXN0 CiAgOzsgaXMgdXNlZCBoZXJlIGluc3RlYWQgb2YgbWlub3ItbW9kZS1hbGlzdC4KICAoZGVscSBu aWwgKG1hcGNhciAnc3ltYm9sLW5hbWUgbWlub3ItbW9kZS1saXN0KSkpCgooZGVmdW4gZGVzY3Jp YmUtbWlub3ItbW9kZS1mcm9tLXN5bWJvbCAoc3ltYm9sKQogICJEaXNwbGF5IGRvY3VtZW50YXRp b24gb2YgYSBtaW5vciBtb2RlIGdpdmVuIGFzIGEgc3ltYm9sLCBTWU1CT0wiCiAgKGludGVyYWN0 aXZlIChsaXN0IChpbnRlcm4gKGNvbXBsZXRpbmctcmVhZAoJCQkgICAgICAiTWlub3IgbW9kZSBz eW1ib2w6ICIKCQkJICAgICAgKGRlc2NyaWJlLW1pbm9yLW1vZGUtY29tcGxldGlvbi10YWJsZS1m b3Itc3ltYm9sKSkpKSkKICAoaWYgKGZib3VuZHAgc3ltYm9sKQogICAgICAoZGVzY3JpYmUtZnVu Y3Rpb24gc3ltYm9sKQogICAgKGRlc2NyaWJlLXZhcmlhYmxlIHN5bWJvbCkpKQoKOzsgaW5kaWNh dG9yCihkZWZ1biBkZXNjcmliZS1taW5vci1tb2RlLWNvbXBsZXRpb24tdGFibGUtZm9yLWluZGlj YXRvciAoKQogIChkZWxxIG5pbAoJKG1hcGNhciAobGFtYmRhICh4KQoJCSAgKGxldCAoKGkgKGZv cm1hdC1tb2RlLWxpbmUgeCkpKQoJCSAgICA7OyByZW1vdmUgZmlyc3Qgc3BhY2UgaWYgZXhpc3Rl ZAoJCSAgICAoY29uZAoJCSAgICAgKCg9IDAgKGxlbmd0aCBpKSkKCQkgICAgICBuaWwpCgkJICAg ICAoKGVxIChhcmVmIGkgMCkgP1xzKQoJCSAgICAgIChzdWJzdHJpbmcgaSAxKSkKCQkgICAgICh0 CgkJICAgICAgaSkpKSkKCQltaW5vci1tb2RlLWFsaXN0KSkpCgooZGVmdW4gZGVzY3JpYmUtbWlu b3ItbW9kZS1mcm9tLWluZGljYXRvciAoaW5kaWNhdG9yKQogICJEaXNwbGF5IGRvY3VtZW50YXRp b24gb2YgYSBtaW5vciBtb2RlIHNwZWNpZmllZCBieSBJTkRJQ0FUT1IuCklmIHlvdSBjYWxsIHRo aXMgZnVuY3Rpb24gaW50ZXJhY3RpdmVseSwgeW91IGNhbiBnaXZlIGluZGljYXRvciB3aGljaApp cyBjdXJyZW50bHkgYWN0aXZhdGVkIHdpdGggY29tcGxldGlvbi4iCiAgKGludGVyYWN0aXZlIChs aXN0CgkJKGNvbXBsZXRpbmctcmVhZAoJCSAiTWlub3IgbW9kZSBpbmRpY2F0b3I6ICIKCQkgKGRl c2NyaWJlLW1pbm9yLW1vZGUtY29tcGxldGlvbi10YWJsZS1mb3ItaW5kaWNhdG9yKSkpKQogIChs ZXQgKChtaW5vci1tb2RlIChsb29rdXAtbWlub3ItbW9kZS1mcm9tLWluZGljYXRvciBpbmRpY2F0 b3IpKSkKICAgIChpZiBtaW5vci1tb2RlCgkoZGVzY3JpYmUtbWlub3ItbW9kZS1mcm9tLXN5bWJv bCBtaW5vci1tb2RlKQogICAgICAoZXJyb3IgIkNhbm5vdCBmaW5kIG1pbm9yIG1vZGUgZm9yIGAl cyciIGluZGljYXRvcikpKSkKCihkZWZ1biBsb29rdXAtbWlub3ItbW9kZS1mcm9tLWluZGljYXRv ciAoaW5kaWNhdG9yKQogICJSZXR1cm4gYSBtaW5vciBtb2RlIHN5bWJvbCBmcm9tIGl0cyBpbmRp Y2F0b3Igb24gdGhlIG1vZGUgbGluZS4iCiAgOzsgcmVtb3ZlIGZpcnN0IHNwYWNlIGlmIGV4aXN0 ZWQKICAoaWYgKGFuZCAoPCAwIChsZW5ndGggaW5kaWNhdG9yKSkKCSAgIChlcSAoYXJlZiBpbmRp Y2F0b3IgMCkgP1xzKSkKICAgICAgKHNldHEgaW5kaWNhdG9yIChzdWJzdHJpbmcgaW5kaWNhdG9y IDEpKSkKICAobGV0ICgobWlub3ItbW9kZXMgbWlub3ItbW9kZS1hbGlzdCkKCXJlc3VsdCkKICAg ICh3aGlsZSBtaW5vci1tb2RlcwogICAgICAobGV0KiAoKG1pbm9yLW1vZGUgKGNhciAoY2FyIG1p bm9yLW1vZGVzKSkpCgkgICAgIChhbmluZGljYXRvciAoZm9ybWF0LW1vZGUtbGluZQoJCQkgICAo Y2FyIChjZHIgKGNhciBtaW5vci1tb2RlcykpKSkpKQoJOzsgcmVtb3ZlIGZpcnN0IHNwYWNlIGlm IGV4aXN0ZWQKCShpZiAoYW5kIChzdHJpbmdwIGFuaW5kaWNhdG9yKQoJCSAoPiAobGVuZ3RoIGFu aW5kaWNhdG9yKSAwKQoJCSAoZXEgKGFyZWYgYW5pbmRpY2F0b3IgMCkgP1xzKSkKCSAgICAoc2V0 cSBhbmluZGljYXRvciAoc3Vic3RyaW5nIGFuaW5kaWNhdG9yIDEpKSkKCShpZiAoZXF1YWwgaW5k aWNhdG9yIGFuaW5kaWNhdG9yKQoJICAgIChzZXRxIHJlc3VsdCBtaW5vci1tb2RlCgkJICBtaW5v ci1tb2RlcyBuaWwpCgkgIChzZXRxIG1pbm9yLW1vZGVzIChjZHIgbWlub3ItbW9kZXMpKSkpKQog ICAgcmVzdWx0KSkKDAooZGVjbGFyZS1mdW5jdGlvbiB4LWRpc3BsYXktcGl4ZWwtaGVpZ2h0ICJ4 Zm5zLmMiICgmb3B0aW9uYWwgdGVybWluYWwpKQooZGVjbGFyZS1mdW5jdGlvbiB4LWRpc3BsYXkt cGl4ZWwtd2lkdGggInhmbnMuYyIgKCZvcHRpb25hbCB0ZXJtaW5hbCkpCgo7OzsgQXV0b21hdGlj IHJlc2l6aW5nIG9mIHRlbXBvcmFyeSBidWZmZXJzLgooZGVmY3VzdG9tIHRlbXAtYnVmZmVyLW1h eC1oZWlnaHQKICAobGFtYmRhIChfYnVmZmVyKQogICAgKGlmIChhbmQgKGRpc3BsYXktZ3JhcGhp Yy1wKSAoZXEgKHNlbGVjdGVkLXdpbmRvdykgKGZyYW1lLXJvb3Qtd2luZG93KSkpCgkoLyAoeC1k aXNwbGF5LXBpeGVsLWhlaWdodCkgKGZyYW1lLWNoYXItaGVpZ2h0KSAyKQogICAgICAoLyAoLSAo ZnJhbWUtaGVpZ2h0KSAyKSAyKSkpCiAgIk1heGltdW0gaGVpZ2h0IG9mIGEgd2luZG93IGRpc3Bs YXlpbmcgYSB0ZW1wb3JhcnkgYnVmZmVyLgpUaGlzIGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gVGVt cCBCdWZmZXIgUmVzaXplIG1vZGUgaXMgZW5hYmxlZC4KVGhlIHZhbHVlIGlzIHRoZSBtYXhpbXVt IGhlaWdodCAoaW4gbGluZXMpIHdoaWNoCmByZXNpemUtdGVtcC1idWZmZXItd2luZG93JyB3aWxs IGdpdmUgdG8gYSB3aW5kb3cgZGlzcGxheWluZyBhCnRlbXBvcmFyeSBidWZmZXIuICBJdCBjYW4g YWxzbyBiZSBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0bwpjaG9vc2UgdGhlIGhlaWdodCBmb3Ig c3VjaCBhIGJ1ZmZlci4gIEl0IGdldHMgb25lIGFyZ3VtZW50LCB0aGUKYnVmZmVyLCBhbmQgc2hv dWxkIHJldHVybiBhIHBvc2l0aXZlIGludGVnZXIuICBBdCB0aGUgdGltZSB0aGUKZnVuY3Rpb24g aXMgY2FsbGVkLCB0aGUgd2luZG93IHRvIGJlIHJlc2l6ZWQgaXMgc2VsZWN0ZWQuIgogIDp0eXBl ICcoY2hvaWNlIGludGVnZXIgZnVuY3Rpb24pCiAgOmdyb3VwICdoZWxwCiAgOnZlcnNpb24gIjI0 LjMiKQoKKGRlZmN1c3RvbSB0ZW1wLWJ1ZmZlci1tYXgtd2lkdGgKICAobGFtYmRhIChfYnVmZmVy KQogICAgKGlmIChhbmQgKGRpc3BsYXktZ3JhcGhpYy1wKSAoZXEgKHNlbGVjdGVkLXdpbmRvdykg KGZyYW1lLXJvb3Qtd2luZG93KSkpCgkoLyAoeC1kaXNwbGF5LXBpeGVsLXdpZHRoKSAoZnJhbWUt Y2hhci13aWR0aCkgMikKICAgICAgKC8gKC0gKGZyYW1lLXdpZHRoKSAyKSAyKSkpCiAgIk1heGlt dW0gd2lkdGggb2YgYSB3aW5kb3cgZGlzcGxheWluZyBhIHRlbXBvcmFyeSBidWZmZXIuClRoaXMg aXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBUZW1wIEJ1ZmZlciBSZXNpemUgbW9kZSBpcyBlbmFibGVk LgpUaGUgdmFsdWUgaXMgdGhlIG1heGltdW0gd2lkdGggKGluIGNvbHVtbnMpIHdoaWNoCmByZXNp emUtdGVtcC1idWZmZXItd2luZG93JyB3aWxsIGdpdmUgdG8gYSB3aW5kb3cgZGlzcGxheWluZyBh CnRlbXBvcmFyeSBidWZmZXIuICBJdCBjYW4gYWxzbyBiZSBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxl ZCB0bwpjaG9vc2UgdGhlIHdpZHRoIGZvciBzdWNoIGEgYnVmZmVyLiAgSXQgZ2V0cyBvbmUgYXJn dW1lbnQsIHRoZQpidWZmZXIsIGFuZCBzaG91bGQgcmV0dXJuIGEgcG9zaXRpdmUgaW50ZWdlci4g IEF0IHRoZSB0aW1lIHRoZQpmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB3aW5kb3cgdG8gYmUgcmVz aXplZCBpcyBzZWxlY3RlZC4iCiAgOnR5cGUgJyhjaG9pY2UgaW50ZWdlciBmdW5jdGlvbikKICA6 Z3JvdXAgJ2hlbHAKICA6dmVyc2lvbiAiMjQuNCIpCgooZGVmaW5lLW1pbm9yLW1vZGUgdGVtcC1i dWZmZXItcmVzaXplLW1vZGUKICAiVG9nZ2xlIGF1dG8tcmVzaXppbmcgdGVtcG9yYXJ5IGJ1ZmZl ciB3aW5kb3dzIChUZW1wIEJ1ZmZlciBSZXNpemUgTW9kZSkuCldpdGggYSBwcmVmaXggYXJndW1l bnQgQVJHLCBlbmFibGUgVGVtcCBCdWZmZXIgUmVzaXplIG1vZGUgaWYgQVJHCmlzIHBvc2l0aXZl LCBhbmQgZGlzYWJsZSBpdCBvdGhlcndpc2UuICBJZiBjYWxsZWQgZnJvbSBMaXNwLAplbmFibGUg dGhlIG1vZGUgaWYgQVJHIGlzIG9taXR0ZWQgb3IgbmlsLgoKV2hlbiBUZW1wIEJ1ZmZlciBSZXNp emUgbW9kZSBpcyBlbmFibGVkLCB0aGUgd2luZG93cyBpbiB3aGljaCB3ZQpzaG93IGEgdGVtcG9y YXJ5IGJ1ZmZlciBhcmUgYXV0b21hdGljYWxseSByZXNpemVkIGluIGhlaWdodCB0bwpmaXQgdGhl IGJ1ZmZlcidzIGNvbnRlbnRzLCBidXQgbmV2ZXIgbW9yZSB0aGFuCmB0ZW1wLWJ1ZmZlci1tYXgt aGVpZ2h0JyBub3IgbGVzcyB0aGFuIGB3aW5kb3ctbWluLWhlaWdodCcuCgpBIHdpbmRvdyBpcyBy ZXNpemVkIG9ubHkgaWYgaXQgaGFzIGJlZW4gc3BlY2lhbGx5IGNyZWF0ZWQgZm9yIHRoZQpidWZm ZXIuICBXaW5kb3dzIHRoYXQgaGF2ZSBzaG93biBhbm90aGVyIGJ1ZmZlciBiZWZvcmUgYXJlIG5v dApyZXNpemVkLiAgQSBmcmFtZSBpcyByZXNpemVkIG9ubHkgaWYgYGZpdC1mcmFtZS10by1idWZm ZXInIGlzCm5vbi1uaWwuCgpUaGlzIG1vZGUgaXMgdXNlZCBieSBgaGVscCcsIGBhcHJvcG9zJyBh bmQgYGNvbXBsZXRpb24nIGJ1ZmZlcnMsCmFuZCBzb21lIG90aGVycy4iCiAgOmdsb2JhbCB0IDpn cm91cCAnaGVscAogIChpZiB0ZW1wLWJ1ZmZlci1yZXNpemUtbW9kZQogICAgICA7OyBgaGVscC1t YWtlLXhyZWZzJyBtYXkgYWRkIGEgYGJhY2snIGJ1dHRvbiBhbmQgdGh1cyBpbmNyZWFzZSB0aGUK ICAgICAgOzsgdGV4dCBzaXplLCBzbyBgcmVzaXplLXRlbXAtYnVmZmVyLXdpbmRvdycgbXVzdCBi ZSBydW4gKmFmdGVyKiBpdC4KICAgICAgKGFkZC1ob29rICd0ZW1wLWJ1ZmZlci1zaG93LWhvb2sg J3Jlc2l6ZS10ZW1wLWJ1ZmZlci13aW5kb3cgJ2FwcGVuZCkKICAgIChyZW1vdmUtaG9vayAndGVt cC1idWZmZXItc2hvdy1ob29rICdyZXNpemUtdGVtcC1idWZmZXItd2luZG93KSkpCgooZGVmdW4g cmVzaXplLXRlbXAtYnVmZmVyLXdpbmRvdyAoJm9wdGlvbmFsIHdpbmRvdykKICAiUmVzaXplIFdJ TkRPVyB0byBmaXQgaXRzIGNvbnRlbnRzLgpXSU5ET1cgbXVzdCBiZSBhIGxpdmUgd2luZG93IGFu ZCBkZWZhdWx0cyB0byB0aGUgc2VsZWN0ZWQgb25lLgpEbyBub3QgcmVzaXplIGlmIFdJTkRPVyB3 YXMgbm90IGNyZWF0ZWQgYnkgYGRpc3BsYXktYnVmZmVyJy4KCklmIFdJTkRPVyBpcyBwYXJ0IG9m IGEgdmVydGljYWwgY29tYmluYXRpb24sIHJlc3RyYWluIGl0cyBuZXcKc2l6ZSBieSBgdGVtcC1i dWZmZXItbWF4LWhlaWdodCcgYW5kIGRvIG5vdCByZXNpemUgaWYgaXRzIG1pbmltdW0KYWNjZXNz aWJsZSBwb3NpdGlvbiBpcyBzY3JvbGxlZCBvdXQgb2Ygdmlldy4gIElmIFdJTkRPVyBpcyBwYXJ0 Cm9mIGEgaG9yaXpvbnRhbCBjb21iaW5hdGlvbiwgcmVzdHJhaW4gaXRzIG5ldyBzaXplIGJ5CmB0 ZW1wLWJ1ZmZlci1tYXgtd2lkdGgnLiAgSW4gYm90aCBjYXNlcywgdGhlIHZhbHVlIG9mIHRoZSBv cHRpb24KYGZpdC13aW5kb3ctdG8tYnVmZmVyLWhvcml6b250YWxseScgY2FuIGluaGliaXQgcmVz aXppbmcuCgpJZiBXSU5ET1cgaXMgdGhlIHJvb3Qgd2luZG93IG9mIGl0cyBmcmFtZSwgcmVzaXpl IHRoZSBmcmFtZQpwcm92aWRlZCBgZml0LWZyYW1lLXRvLWJ1ZmZlcicgaXMgbm9uLW5pbC4KClRo aXMgZnVuY3Rpb24gbWF5IGNhbGwgYHByZXNlcnZlLXdpbmRvdy1zaXplJyB0byBwcmVzZXJ2ZSB0 aGUKc2l6ZSBvZiBXSU5ET1cuIgogIChzZXRxIHdpbmRvdyAod2luZG93LW5vcm1hbGl6ZS13aW5k b3cgd2luZG93IHQpKQogIChsZXQgKChoZWlnaHQgKGlmIChmdW5jdGlvbnAgdGVtcC1idWZmZXIt bWF4LWhlaWdodCkKCQkgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbmRvdwoJCSAgICAgIChm dW5jYWxsIHRlbXAtYnVmZmVyLW1heC1oZWlnaHQgKHdpbmRvdy1idWZmZXIpKSkKCQkgIHRlbXAt YnVmZmVyLW1heC1oZWlnaHQpKQoJKHdpZHRoIChpZiAoZnVuY3Rpb25wIHRlbXAtYnVmZmVyLW1h eC13aWR0aCkKCQkgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgd2luZG93CgkJICAgICAoZnVuY2Fs bCB0ZW1wLWJ1ZmZlci1tYXgtd2lkdGggKHdpbmRvdy1idWZmZXIpKSkKCQkgdGVtcC1idWZmZXIt bWF4LXdpZHRoKSkKCShxdWl0LWNhZHIgKGNhZHIgKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdx dWl0LXJlc3RvcmUpKSkpCiAgICA7OyBSZXNpemUgV0lORE9XIGlmZiBpdCB3YXMgbWFkZSBieSBg ZGlzcGxheS1idWZmZXInLgogICAgKHdoZW4gKG9yIChhbmQgKGVxIHF1aXQtY2FkciAnd2luZG93 KQoJCSAgIChvciAoYW5kICh3aW5kb3ctY29tYmluZWQtcCB3aW5kb3cpCgkJCSAgICAobm90IChl cSBmaXQtd2luZG93LXRvLWJ1ZmZlci1ob3Jpem9udGFsbHkKCQkJCSAgICAgJ29ubHkpKQoJCQkg ICAgKHBvcy12aXNpYmxlLWluLXdpbmRvdy1wIChwb2ludC1taW4pIHdpbmRvdykpCgkJICAgICAg IChhbmQgKHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdyB0KQoJCQkgICAgZml0LXdpbmRvdy10by1i dWZmZXItaG9yaXpvbnRhbGx5KSkpCgkgICAgICAoYW5kIChlcSBxdWl0LWNhZHIgJ2ZyYW1lKQog ICAgICAgICAgICAgICAgICAgZml0LWZyYW1lLXRvLWJ1ZmZlcgogICAgICAgICAgICAgICAgICAg KGVxIHdpbmRvdyAoZnJhbWUtcm9vdC13aW5kb3cgd2luZG93KSkpKQoJKGZpdC13aW5kb3ctdG8t YnVmZmVyIHdpbmRvdyBoZWlnaHQgbmlsIHdpZHRoIG5pbCB0KSkpKQoKOzs7IEhlbHAgd2luZG93 cy4KKGRlZmN1c3RvbSBoZWxwLXdpbmRvdy1zZWxlY3QgbmlsCiAgIk5vbi1uaWwgbWVhbnMgc2Vs ZWN0IGhlbHAgd2luZG93IGZvciB2aWV3aW5nLgpDaG9pY2VzIGFyZToKCiBuZXZlciAobmlsKSBT ZWxlY3QgaGVscCB3aW5kb3cgb25seSBpZiB0aGVyZSBpcyBubyBvdGhlciB3aW5kb3cKICAgICAg ICAgICAgIG9uIGl0cyBmcmFtZS4KCiBvdGhlciAgICAgICBTZWxlY3QgaGVscCB3aW5kb3cgaWYg YW5kIG9ubHkgaWYgaXQgYXBwZWFycyBvbiB0aGUKICAgICAgICAgICAgIHByZXZpb3VzbHkgc2Vs ZWN0ZWQgZnJhbWUsIHRoYXQgZnJhbWUgY29udGFpbnMgYXQKICAgICAgICAgICAgIGxlYXN0IHR3 byBvdGhlciB3aW5kb3dzIGFuZCB0aGUgaGVscCB3aW5kb3cgaXMKICAgICAgICAgICAgIGVpdGhl ciBuZXcgb3Igc2hvd2VkIGEgZGlmZmVyZW50IGJ1ZmZlciBiZWZvcmUuCgogYWx3YXlzICh0KSAg QWx3YXlzIHNlbGVjdCB0aGUgaGVscCB3aW5kb3cuCgpJZiB0aGlzIG9wdGlvbiBpcyBub24tbmls IGFuZCB0aGUgaGVscCB3aW5kb3cgYXBwZWFycyBvbiBhbm90aGVyCmZyYW1lLCB0aGVuIGdpdmUg dGhhdCBmcmFtZSBpbnB1dCBmb2N1cyB0b28uICBOb3RlIGFsc28gdGhhdCBpZgp0aGUgaGVscCB3 aW5kb3cgYXBwZWFycyBvbiBhbm90aGVyIGZyYW1lLCBpdCBtYXkgZ2V0IHNlbGVjdGVkIGFuZApp dHMgZnJhbWUgZ2V0IGlucHV0IGZvY3VzIGV2ZW4gaWYgdGhpcyBvcHRpb24gaXMgbmlsLgoKVGhp cyBvcHRpb24gaGFzIGVmZmVjdCBpZiBhbmQgb25seSBpZiB0aGUgaGVscCB3aW5kb3cgd2FzIGNy ZWF0ZWQKYnkgYHdpdGgtaGVscC13aW5kb3cnLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRh ZyAibmV2ZXIgKG5pbCkiIG5pbCkKCQkgKGNvbnN0IDp0YWcgIm90aGVyIiBvdGhlcikKCQkgKGNv bnN0IDp0YWcgImFsd2F5cyAodCkiIHQpKQogIDpncm91cCAnaGVscAogIDp2ZXJzaW9uICIyMy4x IikKCihkZWZjdXN0b20gaGVscC1lbmFibGUtYXV0by1sb2FkIHQKICAiV2hldGhlciBIZWxwIGNv bW1hbmRzIGNhbiBwZXJmb3JtIGF1dG9sb2FkaW5nLgpJZiBub24tbmlsLCB3aGVuZXZlciBcXFtk ZXNjcmliZS1mdW5jdGlvbl0gaXMgY2FsbGVkIGZvciBhbgphdXRvbG9hZGVkIGZ1bmN0aW9uIHdo b3NlIGRvY3N0cmluZyBjb250YWlucyBhbnkga2V5IHN1YnN0aXR1dGlvbgpjb25zdHJ1Y3QgKHNl ZSBgc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMnKSwgdGhlIGxpYnJhcnkgaXMgbG9hZGVkLApzbyB0 aGF0IHRoZSBkb2N1bWVudGF0aW9uIGNhbiBzaG93IHRoZSByaWdodCBrZXkgYmluZGluZ3MuIgog IDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdoZWxwCiAgOnZlcnNpb24gIjI0LjMiKQoKKGRlZnVu IGhlbHAtd2luZG93LWRpc3BsYXktbWVzc2FnZSAocXVpdC1wYXJ0IHdpbmRvdyAmb3B0aW9uYWwg c2Nyb2xsKQogICJEaXNwbGF5IG1lc3NhZ2UgdGVsbGluZyBob3cgdG8gcXVpdCBhbmQgc2Nyb2xs IGhlbHAgd2luZG93LgpRVUlULVBBUlQgaXMgYSBzdHJpbmcgdGVsbGluZyBob3cgdG8gcXVpdCB0 aGUgaGVscCB3aW5kb3cgV0lORE9XLgpPcHRpb25hbCBhcmd1bWVudCBTQ1JPTEwgbm9uLW5pbCBt ZWFucyB0ZWxsIGhvdyB0byBzY3JvbGwgV0lORE9XLgpTQ1JPTEwgZXF1YWwgYG90aGVyJyBtZWFu cyB0ZWxsIGhvdyB0byBzY3JvbGwgdGhlIFwib3RoZXJcIgp3aW5kb3cuIgogIChsZXQgKChzY3Jv bGwtcGFydAoJIChjb25kCgkgIDs7IElmIHdlIGRvbid0IGhhdmUgUVVJVC1QQVJUIHdlIHByb2Jh Ymx5IHJldXNlIGEgd2luZG93CgkgIDs7IHNob3dpbmcgdGhlIHNhbWUgYnVmZmVyIHNvIHdlIGRv bid0IHNob3cgYW55IG1lc3NhZ2UuCgkgICgobm90IHF1aXQtcGFydCkgbmlsKQoJICAoKHBvcy12 aXNpYmxlLWluLXdpbmRvdy1wCgkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKHdpbmRvdy1idWZm ZXIgd2luZG93KQoJICAgICAgKHBvaW50LW1heCkpIHdpbmRvdyB0KQoJICAgOzsgQnVmZmVyIGVu ZCBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkgdmlzaWJsZSwgbm8gbmVlZCB0byB0YWxrCgkgICA7OyBh Ym91dCBzY3JvbGxpbmcuCgkgICAiLiIpCgkgICgoZXEgc2Nyb2xsICdvdGhlcikKCSAgICIsIFxc W3Njcm9sbC1vdGhlci13aW5kb3ddIHRvIHNjcm9sbCBoZWxwLiIpCgkgIChzY3JvbGwgIiwgXFxb c2Nyb2xsLXVwXSB0byBzY3JvbGwgaGVscC4iKSkpKQogICAgKG1lc3NhZ2UgIiVzIgogICAgIChz dWJzdGl0dXRlLWNvbW1hbmQta2V5cyAoY29uY2F0IHF1aXQtcGFydCBzY3JvbGwtcGFydCkpKSkp CgooZGVmdW4gaGVscC13aW5kb3ctc2V0dXAgKHdpbmRvdyAmb3B0aW9uYWwgdmFsdWUpCiAgIlNl dCB1cCBoZWxwIHdpbmRvdyBXSU5ET1cgZm9yIGB3aXRoLWhlbHAtd2luZG93Jy4KV0lORE9XIGlz IHRoZSB3aW5kb3cgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgaGVscCBidWZmZXIuClJldHVybiBW QUxVRS4iCiAgKGxldCogKChoZWxwLWJ1ZmZlciAod2hlbiAod2luZG93LWxpdmUtcCB3aW5kb3cp CgkJCSh3aW5kb3ctYnVmZmVyIHdpbmRvdykpKQoJIChoZWxwLXNldHVwICh3aGVuICh3aW5kb3ct bGl2ZS1wIHdpbmRvdykKCQkgICAgICAgKGNhciAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1 aXQtcmVzdG9yZSkpKSkKCSAoZnJhbWUgKHdpbmRvdy1mcmFtZSB3aW5kb3cpKSkKCiAgICAod2hl biBoZWxwLWJ1ZmZlcgogICAgICA7OyBIYW5kbGUgYGhlbHAtd2luZG93LXBvaW50LW1hcmtlcicu CiAgICAgICh3aGVuIChlcSAobWFya2VyLWJ1ZmZlciBoZWxwLXdpbmRvdy1wb2ludC1tYXJrZXIp IGhlbHAtYnVmZmVyKQoJKHNldC13aW5kb3ctcG9pbnQgd2luZG93IGhlbHAtd2luZG93LXBvaW50 LW1hcmtlcikKCTs7IFJlc2V0IGBoZWxwLXdpbmRvdy1wb2ludC1tYXJrZXInLgoJKHNldC1tYXJr ZXIgaGVscC13aW5kb3ctcG9pbnQtbWFya2VyIG5pbCkpCgogICAgICA7OyBJZiB0aGUgaGVscCB3 aW5kb3cgYXBwZWFycyBvbiBhbm90aGVyIGZyYW1lLCBzZWxlY3QgaXQgaWYKICAgICAgOzsgYGhl bHAtd2luZG93LXNlbGVjdCcgaXMgbm9uLW5pbCBhbmQgZ2l2ZSB0aGF0IGZyYW1lIGlucHV0IGZv Y3VzCiAgICAgIDs7IHRvby4gIFNlZSBhbHNvIEJ1ZyMxOTAxMi4KICAgICAgKHdoZW4gKGFuZCBo ZWxwLXdpbmRvdy1zZWxlY3QKCQkgKGZyYW1lLWxpdmUtcCBoZWxwLXdpbmRvdy1vbGQtZnJhbWUp CgkJIChub3QgKGVxIGZyYW1lIGhlbHAtd2luZG93LW9sZC1mcmFtZSkpKQoJKHNlbGVjdC13aW5k b3cgd2luZG93KQoJKHNlbGVjdC1mcmFtZS1zZXQtaW5wdXQtZm9jdXMgZnJhbWUpKQoKICAgICAg KGNvbmQKICAgICAgICgob3IgKGVxIHdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkKCSAgICA7OyBJ ZiB0aGUgaGVscCB3aW5kb3cgaXMgb24gdGhlIHNlbGVjdGVkIGZyYW1lLCBzZWxlY3QKCSAgICA7 OyBpdCBpZiBgaGVscC13aW5kb3ctc2VsZWN0JyBpcyB0IG9yIGBoZWxwLXdpbmRvdy1zZWxlY3Qn CgkgICAgOzsgaXMgJ290aGVyLCB0aGUgZnJhbWUgY29udGFpbnMgYXQgbGVhc3QgdGhyZWUgd2lu ZG93cywgYW5kCgkgICAgOzsgdGhlIGhlbHAgd2luZG93IGRpZCBzaG93IGFub3RoZXIgYnVmZmVy IGJlZm9yZS4gIFNlZSBhbHNvCgkgICAgOzsgQnVnIzExMDM5LgoJICAgIChhbmQgKGVxIGZyYW1l IChzZWxlY3RlZC1mcmFtZSkpCgkJIChvciAoZXEgaGVscC13aW5kb3ctc2VsZWN0IHQpCgkJICAg ICAoYW5kIChlcSBoZWxwLXdpbmRvdy1zZWxlY3QgJ290aGVyKQoJCQkgICg+IChsZW5ndGggKHdp bmRvdy1saXN0IG5pbCAnbm8tbWluaSkpIDIpCgkJCSAgKG5vdCAoZXEgaGVscC1zZXR1cCAnc2Ft ZSkpKSkKCQkgKHNlbGVjdC13aW5kb3cgd2luZG93KSkpCgk7OyBUaGUgaGVscCB3aW5kb3cgaXMg b3IgZ2V0cyBzZWxlY3RlZCAuLi4KCShoZWxwLXdpbmRvdy1kaXNwbGF5LW1lc3NhZ2UKCSAoY29u ZAoJICAoKGVxIGhlbHAtc2V0dXAgJ3dpbmRvdykKCSAgIDs7IC4uLiBhbmQgaXMgbmV3LCAuLi4K CSAgICJUeXBlIFwicVwiIHRvIGRlbGV0ZSBoZWxwIHdpbmRvdyIpCgkgICgoZXEgaGVscC1zZXR1 cCAnZnJhbWUpCgkgICA7OyAuLi4gb24gYSBuZXcgZnJhbWUsIC4uLgoJICAgIlR5cGUgXCJxXCIg dG8gcXVpdCB0aGUgaGVscCBmcmFtZSIpCgkgICgoZXEgaGVscC1zZXR1cCAnb3RoZXIpCgkgICA7 OyAuLi4gb3IgZGlzcGxheWVkIHNvbWUgb3RoZXIgYnVmZmVyIGJlZm9yZS4KCSAgICJUeXBlIFwi cVwiIHRvIHJlc3RvcmUgcHJldmlvdXMgYnVmZmVyIikpCgkgd2luZG93IHQpKQogICAgICAgKChh bmQgKGVxICh3aW5kb3ctZnJhbWUgd2luZG93KSBoZWxwLXdpbmRvdy1vbGQtZnJhbWUpCgkgICAg ICg9IChsZW5ndGggKHdpbmRvdy1saXN0IG5pbCAnbm8tbWluaSkpIDIpKQoJOzsgVGhlcmUgYXJl IHR3byB3aW5kb3dzIG9uIHRoZSBoZWxwIHdpbmRvdydzIGZyYW1lIGFuZCB0aGUKCTs7IG90aGVy IG9uZSBpcyB0aGUgc2VsZWN0ZWQgb25lLgoJKGhlbHAtd2luZG93LWRpc3BsYXktbWVzc2FnZQoJ IChjb25kCgkgICgoZXEgaGVscC1zZXR1cCAnd2luZG93KQoJICAgIlR5cGUgXFxbZGVsZXRlLW90 aGVyLXdpbmRvd3NdIHRvIGRlbGV0ZSB0aGUgaGVscCB3aW5kb3ciKQoJICAoKGVxIGhlbHAtc2V0 dXAgJ290aGVyKQoJICAgIlR5cGUgXCJxXCIgaW4gaGVscCB3aW5kb3cgdG8gcmVzdG9yZSBpdHMg cHJldmlvdXMgYnVmZmVyIikpCgkgd2luZG93ICdvdGhlcikpCiAgICAgICAodAoJOzsgVGhlIGhl bHAgd2luZG93IGlzIG5vdCBzZWxlY3RlZCAuLi4KCShoZWxwLXdpbmRvdy1kaXNwbGF5LW1lc3Nh Z2UKCSAoY29uZAoJICAoKGVxIGhlbHAtc2V0dXAgJ3dpbmRvdykKCSAgIDs7IC4uLiBhbmQgaXMg bmV3LCAuLi4KCSAgICJUeXBlIFwicVwiIGluIGhlbHAgd2luZG93IHRvIGRlbGV0ZSBpdCIpCgkg ICgoZXEgaGVscC1zZXR1cCAnb3RoZXIpCgkgICA7OyAuLi4gb3IgZGlzcGxheWVkIHNvbWUgb3Ro ZXIgYnVmZmVyIGJlZm9yZS4KCSAgICJUeXBlIFwicVwiIGluIGhlbHAgd2luZG93IHRvIHJlc3Rv cmUgcHJldmlvdXMgYnVmZmVyIikpCgkgd2luZG93KSkpKQogICAgOzsgUmV0dXJuIFZBTFVFLgog ICAgdmFsdWUpKQoKOzsgYHdpdGgtaGVscC13aW5kb3cnIGlzIGEgd3JhcHBlciBmb3IgYHdpdGgt dGVtcC1idWZmZXItd2luZG93Jwo7OyBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFs IHR3aXN0czoKCjs7ICgxKSBJdCBwdXRzIHRoZSBidWZmZXIgaW4gYGhlbHAtbW9kZScgKHZpYSBg aGVscC1tb2RlLXNldHVwJykgYW5kCjs7ICAgICBhZGRzIGNyb3NzIHJlZmVyZW5jZXMgKHZpYSBg aGVscC1tb2RlLWZpbmlzaCcpLgoKOzsgKDIpIEl0IGlzc3VlcyBhIG1lc3NhZ2UgdGVsbGluZyBo b3cgdG8gc2Nyb2xsIGFuZCBxdWl0IHRoZSBoZWxwCjs7ICAgICB3aW5kb3cgKHZpYSBgaGVscC13 aW5kb3ctc2V0dXAnKS4KCjs7ICgzKSBBbiBvcHRpb24gKGN1c3RvbWl6YWJsZSB2aWEgYGhlbHAt d2luZG93LXNlbGVjdCcpIHRvIHNlbGVjdCB0aGUKOzsgICAgIGhlbHAgd2luZG93IGF1dG9tYXRp Y2FsbHkuCgo7OyAoNCkgQSBtYXJrZXIgKGBoZWxwLXdpbmRvdy1wb2ludC1tYXJrZXInKSB0byBt b3ZlIHBvaW50IGluIHRoZSBoZWxwCjs7ICAgICB3aW5kb3cgdG8gYW4gYXJiaXRyYXJ5IGJ1ZmZl ciBwb3NpdGlvbi4KKGRlZm1hY3JvIHdpdGgtaGVscC13aW5kb3cgKGJ1ZmZlci1uYW1lICZyZXN0 IGJvZHkpCiAgIkRpc3BsYXkgYnVmZmVyIG5hbWVkIEJVRkZFUi1OQU1FIGluIGEgaGVscCB3aW5k b3cuCkV2YWx1YXRlIHRoZSBmb3JtcyBpbiBCT0RZIHdpdGggc3RhbmRhcmQgb3V0cHV0IGJvdW5k IHRvIGEgYnVmZmVyCmNhbGxlZCBCVUZGRVItTkFNRSAoY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBu b3QgZXhpc3QpLCBwdXQgdGhhdApidWZmZXIgaW4gYGhlbHAtbW9kZScsIGRpc3BsYXkgdGhlIGJ1 ZmZlciBpbiBhIHdpbmRvdyAoc2VlCmB3aXRoLXRlbXAtYnVmZmVyLXdpbmRvdycgZm9yIGRldGFp bHMpIGFuZCBpc3N1ZSBhIG1lc3NhZ2UgaG93IHRvCmRlYWwgd2l0aCB0aGF0IFwiaGVscFwiIHdp bmRvdyB3aGVuIGl0J3Mgbm8gbW9yZSBuZWVkZWQuICBTZWxlY3QKdGhlIGhlbHAgd2luZG93IGlm IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB1c2VyIG9wdGlvbgpgaGVscC13aW5kb3ctc2VsZWN0 JyBzYXlzIHNvLiAgUmV0dXJuIGxhc3QgdmFsdWUgaW4gQk9EWS4iCiAgKGRlY2xhcmUgKGluZGVu dCAxKSAoZGVidWcgdCkpCiAgYChwcm9nbgogICAgIDs7IE1ha2UgYGhlbHAtd2luZG93LXBvaW50 LW1hcmtlcicgcG9pbnQgbm93aGVyZS4gIFRoZSBvbmx5IHBsYWNlCiAgICAgOzsgd2hlcmUgdGhp cyBzaG91bGQgYmUgc2V0IHRvIGEgYnVmZmVyIHBvc2l0aW9uIGlzIHdpdGhpbiBCT0RZLgogICAg IChzZXQtbWFya2VyIGhlbHAtd2luZG93LXBvaW50LW1hcmtlciBuaWwpCiAgICAgKGxldCAoKHRl bXAtYnVmZmVyLXdpbmRvdy1zZXR1cC1ob29rCgkgICAgKGNvbnMgJ2hlbHAtbW9kZS1zZXR1cCB0 ZW1wLWJ1ZmZlci13aW5kb3ctc2V0dXAtaG9vaykpCgkgICAodGVtcC1idWZmZXItd2luZG93LXNo b3ctaG9vawoJICAgIChjb25zICdoZWxwLW1vZGUtZmluaXNoIHRlbXAtYnVmZmVyLXdpbmRvdy1z aG93LWhvb2spKSkKICAgICAgIChzZXRxIGhlbHAtd2luZG93LW9sZC1mcmFtZSAoc2VsZWN0ZWQt ZnJhbWUpKQogICAgICAgKHdpdGgtdGVtcC1idWZmZXItd2luZG93CgksYnVmZmVyLW5hbWUgbmls ICdoZWxwLXdpbmRvdy1zZXR1cCAocHJvZ24gLEBib2R5KSkpKSkKCjs7IENhbGxlZCBmcm9tIEMs IG9uIGVuY291bnRlcmluZyBgaGVscC1jaGFyJyB3aGVuIHJlYWRpbmcgYSBjaGFyLgo7OyBEb24n dCBwcmludCB0byAqSGVscCo7IHRoYXQgd291bGQgY2xvYmJlciBIZWxwIGhpc3RvcnkuCihkZWZ1 biBoZWxwLWZvcm0tc2hvdyAoKQogICJEaXNwbGF5IHRoZSBvdXRwdXQgb2YgYSBub24tbmlsIGBo ZWxwLWZvcm0nLiIKICAobGV0ICgobXNnIChldmFsIGhlbHAtZm9ybSkpKQogICAgKGlmIChzdHJp bmdwIG1zZykKCSh3aXRoLW91dHB1dC10by10ZW1wLWJ1ZmZlciAiICpDaGFyIEhlbHAqIgoJICAo cHJpbmMgbXNnKSkpKSkKCgwKKGRlZnVuIGhlbHAtLWRvY3N0cmluZy1xdW90ZSAoc3RyaW5nKQog ICJSZXR1cm4gYSBkb2Mgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBTVFJJTkcuClRoZSByZXN1bHQs IHdoZW4gZm9ybWF0dGVkIGJ5IGBzdWJzdGl0dXRlLWNvbW1hbmQta2V5cycsIHNob3VsZCBlcXVh bCBTVFJJTkcuIgogIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIlsnXFxg4oCY4oCZXSIgIlxc XFw9XFwmIiBzdHJpbmcpKQoKOzsgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdXNlZCB0byBiZSBp biBoZWxwLWZucy5lbCwgd2hpY2ggaXMgbm90IHByZWxvYWRlZC4KOzsgQnV0IGZvciB2YXJpb3Vz IHJlYXNvbnMsIHRoZXkgYXJlIG1vcmUgd2lkZWx5IG5lZWRlZCwgc28gdGhleSB3ZXJlCjs7IG1v dmVkIHRvIHRoaXMgZmlsZSwgd2hpY2ggaXMgcHJlbG9hZGVkLiAgaHR0cHM6Ly9kZWJidWdzLmdu dS5vcmcvMTcwMDEKCihkZWZ1biBoZWxwLXNwbGl0LWZ1bmRvYyAoZG9jc3RyaW5nIGRlZikKICAi U3BsaXQgYSBmdW5jdGlvbiBET0NTVFJJTkcgaW50byB0aGUgYWN0dWFsIGRvYyBhbmQgdGhlIHVz YWdlIGluZm8uClJldHVybiAoVVNBR0UgLiBET0MpIG9yIG5pbCBpZiB0aGVyZSdzIG5vIHVzYWdl IGluZm8sIHdoZXJlIFVTQUdFIGluZm8KaXMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgYXJndW1l bnQgbGlzdCBvZiBERUYsIHN1Y2ggYXMKXCIoYXBwbHkgRlVOQ1RJT04gJnJlc3QgQVJHVU1FTlRT KVwiLgpERUYgaXMgdGhlIGZ1bmN0aW9uIHdob3NlIHVzYWdlIHdlJ3JlIGxvb2tpbmcgZm9yIGlu IERPQ1NUUklORy4iCiAgOzsgRnVuY3Rpb25zIGNhbiBnZXQgdGhlIGNhbGxpbmcgc2VxdWVuY2Ug YXQgdGhlIGVuZCBvZiB0aGUgZG9jIHN0cmluZy4KICA7OyBJbiBjYXNlcyB3aGVyZSBgZnVuY3Rp b24nIGhhcyBiZWVuIGZzZXQgdG8gYSBzdWJyIHdlIGNhbid0IHNlYXJjaCBmb3IKICA7OyBmdW5j dGlvbidzIG5hbWUgaW4gdGhlIGRvYyBzdHJpbmcgc28gd2UgdXNlIGBmbicgYXMgdGhlIGFub255 bW91cwogIDs7IGZ1bmN0aW9uIG5hbWUgaW5zdGVhZC4KICAod2hlbiAoYW5kIGRvY3N0cmluZyAo c3RyaW5nLW1hdGNoICJcblxuKGZuXFwoXFwoIC4qXFwpPylcXClcXCciIGRvY3N0cmluZykpCiAg ICAobGV0ICgoZG9jICh1bmxlc3MgKHplcm9wIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkJIChzdWJz dHJpbmcgZG9jc3RyaW5nIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpKQoJICAodXNhZ2UtdGFpbCAo bWF0Y2gtc3RyaW5nIDEgZG9jc3RyaW5nKSkpCiAgICAgIChjb25zIChmb3JtYXQgIiglcyVzIgoJ CSAgICA7OyBSZXBsYWNlIGBmbicgd2l0aCB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUuCgkJICAg IChpZiAoc3ltYm9scCBkZWYpCgkJCShoZWxwLS1kb2NzdHJpbmctcXVvdGUgKGZvcm1hdCAiJVMi IGRlZikpCgkJICAgICAgJ2Fub255bW91cykKCQkgICAgdXNhZ2UtdGFpbCkKCSAgICBkb2MpKSkp CgooZGVmdW4gaGVscC1hZGQtZnVuZG9jLXVzYWdlIChkb2NzdHJpbmcgYXJnbGlzdCkKICAiQWRk IHRoZSB1c2FnZSBpbmZvIHRvIERPQ1NUUklORy4KSWYgRE9DU1RSSU5HIGFscmVhZHkgaGFzIGEg dXNhZ2UgaW5mbywgdGhlbiBqdXN0IHJldHVybiBpdCB1bmNoYW5nZWQuClRoZSB1c2FnZSBpbmZv IGlzIGJ1aWx0IGZyb20gQVJHTElTVC4gIERPQ1NUUklORyBjYW4gYmUgbmlsLgpBUkdMSVNUIGNh biBhbHNvIGJlIHQgb3IgYSBzdHJpbmcgb2YgdGhlIGZvcm0gXCIoRlVOIEFSRzEgQVJHMiAuLi4p XCIuIgogICh1bmxlc3MgKHN0cmluZ3AgZG9jc3RyaW5nKSAoc2V0cSBkb2NzdHJpbmcgIiIpKQog IChpZiAob3IgKHN0cmluZy1tYXRjaCAiXG5cbihmblxcKFxcKCAuKlxcKT8pXFwpXFwnIiBkb2Nz dHJpbmcpCiAgICAgICAgICAoZXEgYXJnbGlzdCB0KSkKICAgICAgZG9jc3RyaW5nCiAgICAoY29u Y2F0IGRvY3N0cmluZwoJICAgIChpZiAoc3RyaW5nLW1hdGNoICJcbj9cblxcJyIgZG9jc3RyaW5n KQoJCShpZiAoPCAoLSAobWF0Y2gtZW5kIDApIChtYXRjaC1iZWdpbm5pbmcgMCkpIDIpICJcbiIg IiIpCgkgICAgICAiXG5cbiIpCgkgICAgKGlmIChzdHJpbmdwIGFyZ2xpc3QpCiAgICAgICAgICAg ICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXFxgW14gXStcXCguKlxcKSlcXCciIGFyZ2xpc3QpCiAg ICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiKGZuIiAobWF0Y2gtc3RyaW5nIDEgYXJnbGlzdCkg IikiKQogICAgICAgICAgICAgICAgICAoZXJyb3IgIlVucmVjb2duaXplZCB1c2FnZSBmb3JtYXQi KSkKCSAgICAgIChoZWxwLS1tYWtlLXVzYWdlLWRvY3N0cmluZyAnZm4gYXJnbGlzdCkpKSkpCgoo ZGVmdW4gaGVscC1mdW5jdGlvbi1hcmdsaXN0IChkZWYgJm9wdGlvbmFsIHByZXNlcnZlLW5hbWVz KQogICJSZXR1cm4gYSBmb3JtYWwgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGZ1bmN0aW9uIERFRi4K SWYgUFJFU0VSVkUtTkFNRVMgaXMgbm9uLW5pbCwgcmV0dXJuIGEgZm9ybWFsIGFyZ2xpc3QgdGhh dCB1c2VzCnRoZSBzYW1lIG5hbWVzIGFzIHVzZWQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2Rl LCB3aGVuIHBvc3NpYmxlLiIKICA7OyBIYW5kbGUgc3ltYm9scyBhbGlhc2VkIHRvIG90aGVyIHN5 bWJvbHMuCiAgKGlmIChhbmQgKHN5bWJvbHAgZGVmKSAoZmJvdW5kcCBkZWYpKSAoc2V0cSBkZWYg KGluZGlyZWN0LWZ1bmN0aW9uIGRlZikpKQogIDs7IEFkdmljZSB3cmFwcGVycyBoYXZlICJjYXRj aCBhbGwiIGFyZ3MsIHNvIGZldGNoIHRoZSBhY3R1YWwgdW5kZXJseWluZwogIDs7IGZ1bmN0aW9u IHRvIGZpbmQgdGhlIHJlYWwgYXJndW1lbnRzLgogICh3aGlsZSAoYWR2aWNlLS1wIGRlZikgKHNl dHEgZGVmIChhZHZpY2UtLWNkciBkZWYpKSkKICA7OyBJZiBkZWZpbml0aW9uIGlzIGEgbWFjcm8s IGZpbmQgdGhlIGZ1bmN0aW9uIGluc2lkZSBpdC4KICAoaWYgKGVxIChjYXItc2FmZSBkZWYpICdt YWNybykgKHNldHEgZGVmIChjZHIgZGVmKSkpCiAgKGNvbmQKICAgKChhbmQgKGJ5dGUtY29kZS1m dW5jdGlvbi1wIGRlZikgKGxpc3RwIChhcmVmIGRlZiAwKSkpIChhcmVmIGRlZiAwKSkKICAgKChl cSAoY2FyLXNhZmUgZGVmKSAnbGFtYmRhKSAobnRoIDEgZGVmKSkKICAgKChlcSAoY2FyLXNhZmUg ZGVmKSAnY2xvc3VyZSkgKG50aCAyIGRlZikpCiAgICgob3IgKGFuZCAoYnl0ZS1jb2RlLWZ1bmN0 aW9uLXAgZGVmKSAoaW50ZWdlcnAgKGFyZWYgZGVmIDApKSkKICAgICAgICAoc3VicnAgZGVmKSAo bW9kdWxlLWZ1bmN0aW9uLXAgZGVmKSkKICAgIChvciAod2hlbiBwcmVzZXJ2ZS1uYW1lcwogICAg ICAgICAgKGxldCogKChkb2MgKGNvbmRpdGlvbi1jYXNlIG5pbCAoZG9jdW1lbnRhdGlvbiBkZWYp IChlcnJvciBuaWwpKSkKICAgICAgICAgICAgICAgICAoZG9jYXJncyAoaWYgZG9jIChjYXIgKGhl bHAtc3BsaXQtZnVuZG9jIGRvYyBuaWwpKSkpCiAgICAgICAgICAgICAgICAgKGFyZ2xpc3QgKGlm IGRvY2FyZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkYXIgKHJlYWQtZnJvbS1z dHJpbmcgKGRvd25jYXNlIGRvY2FyZ3MpKSkpKQogICAgICAgICAgICAgICAgICh2YWxpZCB0KSkK ICAgICAgICAgICAgOzsgQ2hlY2sgdmFsaWRpdHkuCiAgICAgICAgICAgIChkb2xpc3QgKGFyZyBh cmdsaXN0KQogICAgICAgICAgICAgICh1bmxlc3MgKGFuZCAoc3ltYm9scCBhcmcpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsZXQgKChuYW1lIChzeW1ib2wtbmFtZSBhcmcpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChhcmVmIG5hbWUgMCkgPyYpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1xIGFyZyAnKCZyZXN0ICZvcHRpb25hbCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChzdHJpbmctbWF0Y2ggIlxcLiIgbmFt ZSkpKSkpCiAgICAgICAgICAgICAgICAoc2V0cSB2YWxpZCBuaWwpKSkKICAgICAgICAgICAgKHdo ZW4gdmFsaWQgYXJnbGlzdCkpKQogICAgICAgIChsZXQqICgoYXJpdHkgKGZ1bmMtYXJpdHkgZGVm KSkKICAgICAgICAgICAgICAgKG1heCAoY2RyIGFyaXR5KSkKICAgICAgICAgICAgICAgKG1pbiAo Y2FyIGFyaXR5KSkKICAgICAgICAgICAgICAgKGFyZ2xpc3QgKCkpKQogICAgICAgICAgKGRvdGlt ZXMgKGkgbWluKQogICAgICAgICAgICAocHVzaCAoaW50ZXJuIChjb25jYXQgImFyZyIgKG51bWJl ci10by1zdHJpbmcgKDErIGkpKSkpIGFyZ2xpc3QpKQogICAgICAgICAgKHdoZW4gKGFuZCAoaW50 ZWdlcnAgbWF4KSAoPiBtYXggbWluKSkKICAgICAgICAgICAgKHB1c2ggJyZvcHRpb25hbCBhcmds aXN0KQogICAgICAgICAgICAoZG90aW1lcyAoaSAoLSBtYXggbWluKSkKICAgICAgICAgICAgICAo cHVzaCAoaW50ZXJuIChjb25jYXQgImFyZyIgKG51bWJlci10by1zdHJpbmcgKCsgMSBpIG1pbikp KSkKICAgICAgICAgICAgICAgICAgICBhcmdsaXN0KSkpCiAgICAgICAgICAodW5sZXNzIChpbnRl Z2VycCBtYXgpIChwdXNoICcmcmVzdCBhcmdsaXN0KSAocHVzaCAncmVzdCBhcmdsaXN0KSkKICAg ICAgICAgIChucmV2ZXJzZSBhcmdsaXN0KSkpKQogICAoKGFuZCAoYXV0b2xvYWRwIGRlZikgKG5v dCAoZXEgKG50aCA0IGRlZikgJ2tleW1hcCkpKQogICAgIltBcmcgbGlzdCBub3QgYXZhaWxhYmxl IHVudGlsIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgbG9hZGVkLl0iKQogICAodCB0KSkpCgooZGVm dW4gaGVscC0tbWFrZS11c2FnZSAoZnVuY3Rpb24gYXJnbGlzdCkKICAoY29ucyAoaWYgKHN5bWJv bHAgZnVuY3Rpb24pIGZ1bmN0aW9uICdhbm9ueW1vdXMpCgkobWFwY2FyIChsYW1iZGEgKGFyZykK CQkgIChpZiAobm90IChzeW1ib2xwIGFyZykpIGFyZwoJCSAgICAobGV0ICgobmFtZSAoc3ltYm9s LW5hbWUgYXJnKSkpCgkJICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmlu Zy1tYXRjaCAiXFxgJiIgbmFtZSkgYXJnKQogICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5n LW1hdGNoICJcXGBfLiIgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgKGludGVybiAodXBj YXNlIChzdWJzdHJpbmcgbmFtZSAxKSkpKQogICAgICAgICAgICAgICAgICAgICAgICh0IChpbnRl cm4gKHVwY2FzZSBuYW1lKSkpKSkpKQoJCWFyZ2xpc3QpKSkKCihkZWZpbmUtb2Jzb2xldGUtZnVu Y3Rpb24tYWxpYXMgJ2hlbHAtbWFrZS11c2FnZSAnaGVscC0tbWFrZS11c2FnZSAiMjUuMSIpCgoo ZGVmdW4gaGVscC0tbWFrZS11c2FnZS1kb2NzdHJpbmcgKGZuIGFyZ2xpc3QpCiAgKGxldCAoKHBy aW50LWVzY2FwZS1uZXdsaW5lcyB0KSkKICAgIChoZWxwLS1kb2NzdHJpbmctcXVvdGUgKGZvcm1h dCAiJVMiIChoZWxwLS1tYWtlLXVzYWdlIGZuIGFyZ2xpc3QpKSkpKQoKDAoocHJvdmlkZSAnaGVs cCkKCjs7OyBoZWxwLmVsIGVuZHMgaGVyZQo= --_006_DB6PR0902MB210116C5A09C1CF0598EC621A4D10DB6PR0902MB2101_--