Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1anlmp-0007OA-W4 for pgadmin-hackers@arkaria.postgresql.org; Wed, 06 Apr 2016 11:38:16 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1anlmp-00070H-Hi for pgadmin-hackers@arkaria.postgresql.org; Wed, 06 Apr 2016 11:38:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1anlml-00070B-Gq for pgadmin-hackers@postgresql.org; Wed, 06 Apr 2016 11:38:11 +0000 Received: from mail-wm0-x22a.google.com ([2a00:1450:400c:c09::22a]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1anlmg-0007qT-QM for pgadmin-hackers@postgresql.org; Wed, 06 Apr 2016 11:38:11 +0000 Received: by mail-wm0-x22a.google.com with SMTP id l6so60913434wml.1 for ; Wed, 06 Apr 2016 04:38:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=YKL7qEJrXLj+RtuzpTjLRq4yr5zrBCLFu1E7aU1DocA=; b=vRf2Rg6ZhmKS5+u/3mOMC3TNlK4SsWUpmdylTwrYgEHRN7XmkJiw7KOcK5i5rsXaiQ 4037rTDZVQVGTXZJU1R/p5eA09ffSh8iJGk2tod9d1mzgj8o6NiNzS9YUvymkBa7//d2 H8Fchvgqf6iZcBHzxsPbyOBy+B9+Xvalgfwl/Z8Vqih7lUeOzFC1JZiUg+qakh6P0aRX P+FDA3bm9LM4ltvA3WN7oEql53Mi/2int9DkCdNCqQX+xixKBpsDWuAIahTkCRv8KLOm Q+MmouxL44hIHGU184ty2K6gNbs5zy08WJmq8Y/mP6IpdEaRlWszP0FjYEWiQr/SNEr5 +E+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=YKL7qEJrXLj+RtuzpTjLRq4yr5zrBCLFu1E7aU1DocA=; b=G+BaeVTnW1d0Ra6FOr41mk8hJygXuE7booUXkeLKGKOrWlb+LkIkHHW1wojylrJC9b H/LXIhU/Ib2pLwou3ZIi46Sj02jD2zVOMSSRqWkKs1sbkQLwdZTB6HSP0YJ8e61BYJQZ HEV+4K5vwF8ED7NnVtZc3hv8b98Lq/hgqUiFwq5SV0TLPJGzFdcXC9uyk+ykRFMuFTdG hqDVpPiSamZUXCYpQ3A7XQCmKKHDL++0tiOOnmppM8XoIKI6pq4aBZu9jGIrSCBjEt3g 2UdkFkfcFgCR/9ajvL2UilfsHCbtAbTF7PKmMUJXnlOJCfEXdooCKg8cpNZyis4gCie/ ahKQ== X-Gm-Message-State: AD7BkJLYnZz3PecS9TFwenerJ/MRZl/wjoJrYhWlAvEget5K0fHC+bTKxwFfjgis2de8YC8FBG8iGvDIU4AIJHYt X-Received: by 10.28.24.130 with SMTP id 124mr23601455wmy.50.1459942685488; Wed, 06 Apr 2016 04:38:05 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.55.9 with HTTP; Wed, 6 Apr 2016 04:37:35 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Wed, 6 Apr 2016 17:07:35 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Grant Wizard To: Ashesh Vashi Cc: Dave Page , pgadmin-hackers Content-Type: multipart/mixed; boundary=001a11469f84297f98052fcf658e X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11469f84297f98052fcf658e Content-Type: multipart/alternative; boundary=001a11469f84297f92052fcf658c --001a11469f84297f92052fcf658c Content-Type: text/plain; charset=UTF-8 Hi PFA updated patch with resolved review comments. On Tue, Apr 5, 2016 at 11:06 AM, Ashesh Vashi wrote: > On Wed, Mar 30, 2016 at 5:14 PM, Surinder Kumar < > surinder.kumar@enterprisedb.com> wrote: > >> Hi, >> >> Please find updated patch. >> >> This patch has following changes: >> 1. Improved code commenting. >> 2. Properly handling memory leak issues in js code. >> > Hi Surinder, > > As discussed offline, here are the list of some of the review comments: > > * CSS should be relative to its parent element. Please make sure - > whenever you make > some changes in CSS, it should not affect the existing CSS unless > discussed. > Done > > * Change class name for 'error_msg_div' as it is common name. Please name > a class > with prefixed as the module name. > Done > > * Add comments for the blow line changed in node.ui.js file. Always add > logical > explanation for a change as a comment for any changes. > *while(p && p.length > 0) {* > Done > > * Please make sure, we wrap the code around 80 characters for better > readability. > Line length should not be greater than 80 characters. > Done > > * Put the allowed ACLs logic with server version support. We need to be > flexible > enough to accommodate possible future change in ACLs. > Done > > * Avoid using name as reference in each of the given. It will make the > search faster > in the database and less prone to character conversion issue. > i.e. > Use schema/namespace OID instead of nspname, object OID instead of their > name. > Done > > * Use separate templates for each type of objects. > Done > > * Use the existing functionalities as much as possible instead of > introducing new > one. That will make the code/results consistent across the application. > i.e. > Use existing 'parse_priv_to_db' method, instead of creating new one. > Done > > * Please remove unnecessary suffixed white-spaces. > Done > > -- > > Thanks & Regards, > > Ashesh Vashi > EnterpriseDB INDIA: Enterprise PostgreSQL Company > > > > *http://www.linkedin.com/in/asheshvashi* > > > >> >> >> On Mon, Mar 28, 2016 at 2:09 PM, Surinder Kumar < >> surinder.kumar@enterprisedb.com> wrote: >> >>> Hi Dave, >>> >>> Please find updated patch with suggested changes. >>> >>> On Thu, Mar 10, 2016 at 5:26 PM, Dave Page wrote: >>> >>>> On Thu, Mar 10, 2016 at 9:50 AM, Surinder Kumar >>>> wrote: >>>> > Please apply Khusboo's patch for "Privileges macros under Schema" >>>> before >>>> > using grant wizard patch. >>>> >>>> Thanks, that works. Some (hopefully final) feedback: >>>> >>>> - Can we add a side-image? Not sure what yet - just a placeholder for >>>> now until I come up with something. >>>> >>> Already a placeholder for left side image. >>> >>>> >>>> - Why is the closed button in an odd position (see File -> Test Alert >>>> for comparison) >>>> >>> Fixed >>> >>>> >>>> - Why are we using a scrolling list AND pagination? I think a >>>> scrolling list alone should be fine. >>>> >>> Pagination is removed. >>> >>>> >>>> - The grid sizing is wrong. See how the scrollbar on the right in the >>>> screenshot is off the edge of the dialogue, and there's a horizontal >>>> scrollbar? >>>> >>> Fixed. >>> >>>> >>>> - We shouldn't truncate object names as that can be ambiguous. The >>>> column should extend as necessary, and there should be a horizontal >>>> scrollbar on the grid itself (not at the bottom of the dialogue >>>> content). >>>> >>> I have fixed it and scrollbar is now on the grid itself. >>> >>>> >>>> - Function names should include the parameters, as they are part of >>>> the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs. >>>> do_stuff(text). >>>> >>> Fixed. >>> >>>> >>>> - If I select only functions (for example), the Privileges panel >>>> should only list privileges available for functions. If I select >>>> multiple object types, it should show the available options for only >>>> those object types. >>>> >>> Implemented this feature. >>> >>>> >>>> - If I select functions and tables, and then choose (for example), >>>> usage and truncate, it will attempt to set usage on tables and >>>> truncate on functions. It should only attempt to set privileges on the >>>> objects for which they are appropriate. >>>> >>> Done >>> >>>> >>>> - On the last page, the Next button is disabled. It is turned a >>>> marginally darker blue, but also highlights on mouse-over. The change >>>> in shade is so subtle it's hard to see, and the highlight implies the >>>> button is active when it isn't. >>>> >>> Fixed. >>> >>>> >>>> - The buttons appear to have a smaller corner radius than those on the >>>> main browser, or in other dialogues. >>>> >>> Fixed. >>> >>>> >>>> - Button labels should have an   before them to properly space >>>> the label from the icon (or better yet, this should be done in CSS, >>>> though that would also need to be done elsewhere). >>>> >>> done with css. >>> >>>> >>>> - Why do the URLs have a /wizard prefix? I think that should be removed. >>>> >>> Removed prefix. >>> >>>> >>>> - The available privileges for each object type seem to be defined in >>>> both grant_wizard.js and allowed_acl.json. Can we just use >>>> allowed_acl.json? >>>> >>> Yes, allowed_acl.json is now used in grant_wizard.js. >>> >>>> >>>> Thanks. >>>> >>>> -- >>>> Dave Page >>>> Blog: http://pgsnake.blogspot.com >>>> Twitter: @pgsnake >>>> >>>> EnterpriseDB UK: http://www.enterprisedb.com >>>> The Enterprise PostgreSQL Company >>>> >>> >>> >> >> >> -- >> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >> To make changes to your subscription: >> http://www.postgresql.org/mailpref/pgadmin-hackers >> >> > --001a11469f84297f92052fcf658c Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

PFA updated patch with resolved revi= ew comments.

On Tue, Apr 5, 2016 at 11:06 AM, Ashesh Vashi <ashesh.vashi@e= nterprisedb.com> wrote:
O= n Wed, Mar 30, 2016 at 5:14 PM, Surinder Kumar <surinder.kum= ar@enterprisedb.com> wrote:
Hi,

Please find updated patch.=C2=A0

<= /div>
This patch has following changes:=C2=A0
1. Improved cod= e commenting.
2. Properly handling memory leak issues in js code.=
Hi Surinder,

As discusse= d offline, here are the list of some of the review comments:

* CSS should be relative to = its parent element. Please make sure - whenever you make
=C2=A0 some c= hanges in CSS, it should not affect the existing CSS unless discussed.
Done=C2=A0

* Change class name for 'error_msg_div'=C2=A0as= it is common name. Please name a class
=C2=A0 with prefixed as the mo= dule name.=C2=A0
Done= =C2=A0

* Add comments for the blow = line=C2=A0changed in node.ui.js file. Alwa= ys add logical
=C2=A0 explanation for a change as a comment for= any changes.
<= b>while(p && p.length > 0) {
Done=C2=A0

* Please make sure, we wrap the code around 80 characters for = better readability.
=C2=A0 Line length should not be greater than 80 = characters.
Done=C2= =A0

* Put the allowed ACLs logic wi= th server version support. We need to be flexible
=C2=A0 enough to acc= ommodate possible future change in ACLs.
Done=C2=A0

* Av= oid using name as reference in each of the given.=C2=A0It will make the search faster
=C2=A0 in the dat= abase and less prone to character conversion issue.
=C2=A0 i.e.
= =C2=A0 Use schema/namespace OID instead of nspname, object OID instead of t= heir name.
Done
=
=

= * Use separate templates for each type = of objects.
Done=C2= =A0

* Use the existing functionalit= ies as much as possible instead of introducing new
=C2=A0 one. That = will make the code/results consistent across the application.
<= div style=3D"font-size:12.8px">=C2=A0 i= .e.
=C2=A0 Use existing 'parse_priv_to_db' method, instead of = creating new one.
Don= e=C2=A0

* Please remove unnecessary= suffixed white-spaces.
Done=C2=A0
--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA:=C2=A0Enterprise PostgreSQL Company


http://www.linkedin.com/in/asheshvash= i

=C2=A0


On Mon, Mar 28, 2016 at 2:09 PM, = Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi Dave,

= Please find updated patch with suggested changes.

On Thu, Mar 10, 2016 at 5:= 26 PM, Dave Page <dpage@pgadmin.org> wrote:
On Thu, Mar 10, 2016 at 9:50 AM, Surinder Kumar
<su= rinder.kumar@enterprisedb.com> wrote:
> Please apply Khusboo's patch for "Privileges macros under Sch= ema" before
> using grant wizard patch.

Thanks, that works. Some (hopefully final) feedback:

- Can we add a side-image? Not sure what yet - just a placeholder for
now until I come up with something.
Already a p= laceholder for left side image.

- Why is the closed button in an odd position (see File -> Test Alert
for comparison)
Fixed=C2=A0

- Why are we using a scrolling list AND pagination? I think a
scrolling list alone should be fine.
Pagination= is removed.=C2=A0

- The grid sizing is wrong. See how the scrollbar on the right in the
screenshot is off the edge of the dialogue, and there's a horizontal
scrollbar?
Fixed.

- We shouldn't truncate object names as that can be ambiguous. The
column should extend as necessary, and there should be a horizontal
scrollbar on the grid itself (not at the bottom of the dialogue
content).
I have fixed it and scrollbar is now = on the grid itself.

- Function names should include the parameters, as they are part of
the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs.
do_stuff(text).
Fixed.=C2=A0

- If I select only functions (for example), the Privileges panel
should only list privileges available for functions. If I select
multiple object types, it should show the available options for only
those object types.
Implemented this feature.= =C2=A0

- If I select functions and tables, and then choose (for example),
usage and truncate, it will attempt to set usage on tables and
truncate on functions. It should only attempt to set privileges on the
objects for which they are appropriate.
Done=C2= =A0

- On the last page, the Next button is disabled. It is turned a
marginally darker blue, but also highlights on mouse-over. The change
in shade is so subtle it's hard to see, and the highlight implies the button is active when it isn't.
Fixed.=C2= =A0

- The buttons appear to have a smaller corner radius than those on the
main browser, or in other dialogues.
Fixed.=C2= =A0

- Button labels should have an &nbsp; before them to properly space
the label from the icon (or better yet, this should be done in CSS,
though that would also need to be done elsewhere).
<= div>done with css.=C2=A0

- Why do the URLs have a /wizard prefix? I think that should be removed.
Removed prefix.=C2=A0

- The available privileges for each object type seem to be defined in
both grant_wizard.js and allowed_acl.json. Can we just use
allowed_acl.json?
Yes, allowed_acl.json is now = used in grant_wizard.js.

Thanks.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company




--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers=



--001a11469f84297f92052fcf658c-- --001a11469f84297f98052fcf658e Content-Type: application/octet-stream; name="grant_wizard_v7.patch" Content-Disposition: attachment; filename="grant_wizard_v7.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imos5j0n0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2Nzcy93 aXphcmQuY3NzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvY3NzL3dp emFyZC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u M2YyZGNhYQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc3RhdGljL2Nzcy93aXphcmQuY3NzCkBAIC0wLDAgKzEsMTUwIEBACisK Ky8qKiBDU1MgZm9yIFdpemFyZCAqKi8KKy5wZ2FkbWluX2dyYW50X3dpemFy ZF9ib2R5IC5hanMtY29udGVudCB7CisgIHBhZGRpbmctdG9wOiAwcHggIWlt cG9ydGFudDsKK30KKworLyogV2l6YXJkIEhlYWRlciBDU1MgKi8KKy8qLmFs ZXJ0aWZ5IC5hanMtZGlhbG9nIC5hanMtY2xvc2UgeworICBtYXJnaW4tdG9w OiAxNXB4OworfQorKi8KKworLndpemFyZC1oZWFkZXIgeworICBiYWNrZ3Jv dW5kOiAjNDI4YmNhOworICBwYWRkaW5nLWxlZnQ6IDE1cHg7CisgIHBhZGRp bmctYm90dG9tOiA3cHg7CisgIGNvbG9yOiAjZmZmOworICBmb250LXNpemU6 IDE4cHg7CisgIGhlaWdodDogNzZweDsKKyAgbGluZS1oZWlnaHQ6IDc2cHg7 CisgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOworfQorCisud2l6YXJk LWhlYWRlciBoMyB7CisgIGZvbnQtc2l6ZTogMThweDsKKyAgZGlzcGxheTog aW5saW5lLWJsb2NrOworfQorCisud2l6YXJkX2RsZyB7CisgIGZsb2F0OiBs ZWZ0OworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisu Z3JhbnRfd2l6YXJkX2NvbnRhaW5lciB7CisJcG9zaXRpb246IHJlbGF0aXZl OworICBvdmVyZmxvdzogaGlkZGVuOworICB3aWR0aDogMTAwJTsKKyAgaGVp Z2h0OiAxMDAlOworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAucGdh ZG1pbi13aXphcmQgeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAl OworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWNvbnRl bnQgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHBhZGRpbmc6IDA7Cisg IGhlaWdodDogNjQlOworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAu d2l6YXJkLXJpZ2h0LXBhbmVsIHsKKyAgb3ZlcmZsb3cteTogYXV0bzsKKyAg aGVpZ2h0OiAxMDAlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBwb3Np dGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMDsKK30KKworLmdyYW50X3dp emFyZF9jb250YWluZXIgLndpemFyZC1sZWZ0LXBhbmVsIHsKKyAgcG9zaXRp b246IGFic29sdXRlOworICB0b3A6IDA7CisgIGRpc3BsYXk6IGZsZXg7Cisg IGJvdHRvbTogMDsKKyAgbGVmdDogMDsKKyAgYWxpZ24taXRlbXM6IGNlbnRl cjsKKyAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CisgIHJpZ2h0OiAwOwor fQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWxlZnQtcGFu ZWwgaW1nIHsKKyAgd2lkdGg6IDE0MHB4OworfQorCisuZ3JhbnRfd2l6YXJk X2NvbnRhaW5lciAud2l6YXJkLXJpZ2h0LXBhbmVsX2NvbnRlbnQgeworCWhl aWdodDogNjAlOworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciB7Cisg IGhlaWdodDogMTAwJTsKK30KKworLyogV2l6YXJkIEZvb3RlciBDU1MgKi8K Ky5ncmFudF93aXphcmRfY29udGFpbmVyIC5mb290ZXIgeworICBwb3NpdGlv bjogYWJzb2x1dGU7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGJvcmRlci10 b3A6IDFweCBzb2xpZCAjY2NjOworICBib3R0b206IDBweDsKKyAgaGVpZ2h0 OiA2MnB4OworICByaWdodDogMHB4OworICBwYWRkaW5nLXRvcDogMjJweDsK KyAgYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CisgIHotaW5kZXg6IDEw OworfQorCisvKiBXaXphcmQgQnV0dG9uIENTUyAqLworLmdyYW50X3dpemFy ZF9jb250YWluZXIgLndpemFyZC1idXR0b25zIHsKKyAgZmxvYXQ6IHJpZ2h0 OworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWJ1dHRv bnMgYnV0dG9uIHsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDdweCAx NS4ycHg7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgbWFyZ2luOiAwcHggNXB4 IDAgMCAhaW1wb3J0YW50OworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5l ciAud2l6YXJkLWJ1dHRvbnMgYnV0dG9uLndpemFyZC1uZXh0IGkuZmEgewor CXBhZGRpbmctbGVmdDogNXB4OworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRh aW5lciAud2l6YXJkLWJ1dHRvbnMgYnV0dG9uLndpemFyZC1iYWNrIGkuZmEs CisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWJ1dHRvbnMgYnV0 dG9uLndpemFyZC1jYW5jZWwgaS5mYSB7CisJcGFkZGluZy1yaWdodDogNXB4 OworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWJ1dHRv bnMgLndpemFyZC1maW5pc2ggeworICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9y dGFudDsKK30KKworLyogV2l6YXJkIFN0YXR1cyBiYXIgQ1NTICovCisuZ3Jh bnRfd2l6YXJkX2NvbnRhaW5lciAud2l6YXJkLWRlc2NyaXB0aW9uIHsKKyAg cGFkZGluZzogMS43ZW0gMC4xZW07Cit9CisKKy8qIEVycm9yIG1lc3NhZ2Ug Y3NzICovCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciAuZXJyb3JfbXNnX2Rp diB7CisgIGRpc3BsYXk6IGJsb2NrOworICBwb3NpdGlvbjogYWJzb2x1dGU7 CisgIGJvdHRvbTogNTVweDsKKyAgYmFja2dyb3VuZDogI2ZmZjsKK30KKwor LmdyYW50X3dpemFyZF9jb250YWluZXIgLmVycm9yX21zZ19kaXYgcCB7Cisg IGJhY2tncm91bmQ6ICNmZmY7CisgIGNvbG9yOiAjYjkyYzI4OworfQorCisv KiBJbiB3aXphcmQgc2VsZWN0MiBkcm9wZG93biBkb2Vzbid0CisgKiBwb3B1 cCBiZWNhdXNlIHotaW5kZXggb2YgYWxlcnRpZnkKKyAqIHdpemFyZCBpcyBn cmVhdGVyIHRoYW4gdGhlIHotaW5kZXgKKyAqIG9mIHNlbGVjdDIgZHJvcGRv d24uIFRvIG1ha2Ugc2VsZWN0MgorICogdmlzaWJsZSwgc2V0IHotaW5kZXgg b2Ygc2VsZWN0MgorICogaGlnaGVyIHZhbHVlIHRoYW4gd2l6YXJkJ3MKKyAq LworLnNlbGVjdDItY29udGFpbmVyLS1vcGVuIHsKKyAgei1pbmRleDogMTAw MDA7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRp Yy9qcy9ub2RlLnVpLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMv anMvbm9kZS51aS5qcwppbmRleCA0ZDY5ZTFmLi5kZTNmNTc3IDEwMDY0NAot LS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLnVpLmpz CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUudWku anMKQEAgLTI3OSw3ICsyNzksOCBAQCBmdW5jdGlvbigkLCBfLCBwZ0FkbWlu LCBCYWNrYm9uZSwgQmFja2Zvcm0sIEFsZXJ0aWZ5LCBOb2RlKSB7CiAgICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgIH07CiAKLSAgICAgIHdoaWxlKHAp IHsKKyAgICAgIC8vIGNoZWNrIGlmIHAgaXMgbm90IGVtcHR5CisgICAgICB3 aGlsZShwICYmIHAubGVuZ3RoID4gMCkgewogICAgICAgICB0b3AgPSBwLmdl dCgwKS5vZmZzZXRUb3AgKyBwLmhlaWdodCgpOwogICAgICAgICBwID0gcC5w YXJlbnQoKTsKICAgICAgICAgaWYgKGhhc1Njcm9sbGJhcihwKSkgewpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvd2l6YXJk LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvd2l6YXJkLmpz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4M2EzMTIK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRp Yy9qcy93aXphcmQuanMKQEAgLTAsMCArMSwyMzMgQEAKK2RlZmluZSgKKyAg ICBbJ3VuZGVyc2NvcmUnLCAnYmFja2JvbmUnLCAncGdhZG1pbicsICdwZ2Fk bWluLmJyb3dzZXInXSwKK2Z1bmN0aW9uKF8sIEJhY2tib25lLCBwZ0FkbWlu LCBwZ0Jyb3dzZXIpIHsKKworICBwZ0Jyb3dzZXIgPSBwZ0Jyb3dzZXIgfHwg cGdBZG1pbi5Ccm93c2VyIHx8IHt9OworCisgIC8qIFdpemFyZCBpbmRpdmlk dWFsIFBhZ2UgTW9kZWwgKi8KKyAgdmFyIFdpemFyZFBhZ2UgPSBwZ0Jyb3dz ZXIuV2l6YXJkUGFnZSA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAg ZGVmYXVsdHM6IHsKKyAgICAgIGlkOiB1bmRlZmluZWQsIC8qIElkICovCisg ICAgICBwYWdlX3RpdGxlOiB1bmRlZmluZWQsIC8qIFBhZ2UgVGl0bGUgKi8K KyAgICAgIHZpZXc6IHVuZGVmaW5lZCwgLyogQSBCYWNrYm9uZSBWaWV3ICov CisgICAgICBodG1sOiB1bmRlZmluZWQsIC8qIEhUTUwgdGFncyB0byBiZSBy ZW5kZXJlZCAqLworICAgICAgaW1hZ2U6IHVuZGVmaW5lZCwgLyogTGVmdCBo YW5kIHNpZGUgaW1hZ2UgKi8KKyAgICAgIGRpc2FibGVfcHJldjogZmFsc2Us IC8qICBQcmV2aW91cyBCdXR0b24gRmxhZyAqLworICAgICAgZGlzYWJsZV9u ZXh0OiBmYWxzZSwgLyogIE5leHQgQnV0dG9uIEZsYWcgKi8KKyAgICAgIGRp c2FibGVfY2FuY2VsOiBmYWxzZSwgLyogQ2FuY2VsIEJ1dHRvbiBGbGFnICov CisgICAgICBzaG93X3Byb2dyZXNzX2JhcjogJycsCisgICAgICAvKiBDYWxs YmFjayBmb3IgT25Mb2FkICovCisgICAgICBvbkxvYWQ6IGZ1bmN0aW9uKCkg eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0sCisgICAgICAvKiBD YWxsYmFjayBmb3IgYmVmb3JlIE5leHQgKi8KKyAgICAgIGJlZm9yZU5leHQ6 IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0s CisgICAgICBvbk5leHQ6IGZ1bmN0aW9uKCl7fSwKKyAgICAgIG9uQmVmb3Jl OiBmdW5jdGlvbigpIHt9LAorICAgICAgLyogQ2FsbGJhY2sgZm9yIGJlZm9y ZSBQcmV2aW91cyAqLworICAgICAgYmVmb3JlUHJldjogZnVuY3Rpb24oKSB7 CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfSk7 CisKKyAgdmFyIFdpemFyZCA9IHBnQnJvd3Nlci5XaXphcmQgPSBCYWNrYm9u ZS5WaWV3LmV4dGVuZCh7CisgICAgb3B0aW9uczogeworICAgICAgdGl0bGU6 ICdXaXphcmQnLCAvKiBNYWluIFdpemFyZCBUaXRsZSAqLworICAgICAgaW1h Z2U6ICdsZWZ0X3BhbmVsLnBuZycsIC8qIFRPRE86OiBXZSBjYW4gdXNlIGRl ZmF1bHQgaW1hZ2UgaGVyZSAqLworICAgICAgY3Vycl9wYWdlOiAwLCAvKiBD dXJyZW50IFBhZ2UgdG8gTG9hZCAqLworICAgICAgZGlzYWJsZV9uZXh0OiBm YWxzZSwKKyAgICAgIGRpc2FibGVfcHJldjogZmFsc2UsCisgICAgICBkaXNh YmxlX2ZpbmlzaDogZmFsc2UsCisgICAgICBkaXNhYmxlX2NhbmNlbDogZmFs c2UsCisgICAgICBoZWlnaHQ6IDQwMCwKKyAgICAgIHdpZHRoOiA2NTAsCisg ICAgICBzaG93X2xlZnRfcGFuZWw6IHRydWUKKyAgICB9LAorICAgIHRtcGw6 IF8udGVtcGxhdGUoCisgICAgICAgIiAgICA8ZGl2IGNsYXNzPSdwZ2FkbWlu LXdpemFyZCcgc3R5bGU9J2hlaWdodDogPCU9IHRoaXMub3B0aW9ucy5oZWln aHQgJT5weDsiCisgICAgICAgKyAiICAgIHdpZHRoOiA8JT0gdGhpcy5vcHRp b25zLndpZHRoICU+cHgnPiIKKyAgICAgICArICIgICAgICA8ZGl2IGNsYXNz PSd3aXphcmQtaGVhZGVyIHdpemFyZC1iYWRnZSc+IgorICAgICAgICsgIiAg ICAgICAgPGRpdiBjbGFzcz0ncm93Jz4iCisgICAgICAgKyAiICAgICAgICAg IDxkaXYgY2xhc3M9J2NvbC1zbS05Jz4iCisgICAgICAgKyAiICAgICAgICAg ICAgICA8aDM+PHNwYW4gaWQ9J21haW4tdGl0bGUnPjwlPSB0aGlzLm9wdGlv bnMudGl0bGUgJT48L3NwYW4+IC0iCisgICAgICAgKyAiICAgICAgICAgICAg ICA8c3BhbiBpZD0nc3RlcC10aXRsZSc+PCU9IHBhZ2VfdGl0bGUgJT48L3Nw YW4+PC9oMz4iCisgICAgICAgKyAiICAgICAgICAgIDwvZGl2PiIKKyAgICAg ICArICIgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICA8L2Rpdj4i CisgICAgICAgKyAiICAgICAgPGRpdiBjbGFzcz0nd2l6YXJkLWNvbnRlbnQg Y29sLXNtLTEyJz4iCisgICAgICAgKyAiICAgICAgICA8JSBpZih0aGlzLm9w dGlvbnMuc2hvd19sZWZ0X3BhbmVsKSB7ICU+IgorICAgICAgICsgIiAgICAg ICAgICA8ZGl2IGNsYXNzPSdjb2wtc20tMyB3aXphcmQtbGVmdC1wYW5lbCc+ IgorICAgICAgICsgIiAgICAgICAgICAgICAgPGltZyBzcmM9JzwlPSB0aGlz Lm9wdGlvbnMuaW1hZ2UgJT4nPjwvZGl2PiIKKyAgICAgICArICIgICAgICAg IDwlIH0gJT4iCisgICAgICAgKyAiICAgICAgICA8ZGl2IGNsYXNzPSdjb2wt c20tPCUgaWYodGhpcy5vcHRpb25zLnNob3dfbGVmdF9wYW5lbCl7ICU+OTwl IH0iCisgICAgICAgKyAiICAgICAgICAgIGVsc2UgeyAlPjEyPCUgfSAlPiB3 aXphcmQtcmlnaHQtcGFuZWwnPiIKKyAgICAgICArICIgICAgICAgICAgPCUg aWYoIHR5cGVvZiBzaG93X2Rlc2NyaXB0aW9uICE9ICAndW5kZWZpbmVkJyl7 ICU+IgorICAgICAgICsgIiAgICAgICAgICAgIDxkaXYgY2xhc3M9J3dpemFy ZC1kZXNjcmlwdGlvbic+IgorICAgICAgICsgIiAgICAgICAgICAgICAgPCU9 IHNob3dfZGVzY3JpcHRpb24gJT4iCisgICAgICAgKyAiICAgICAgICAgICAg PC9kaXY+IgorICAgICAgICsgIiAgICAgICAgICA8JSB9ICU+IgorICAgICAg ICsgIiAgICAgICAgICA8ZGl2IGNsYXNzPSd3aXphcmQtcmlnaHQtcGFuZWxf Y29udGVudCc+IgorICAgICAgICsgIiAgICAgICAgICA8L2Rpdj4iCisgICAg ICAgKyAiICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAgICAgPC9kaXY+ IgorICAgICAgICsgIiAgICAgIDxkaXYgY2xhc3M9J2NvbC1zbS0xMiBlcnJv cl9tc2dfZGl2Jz4iCisgICAgICAgKyAiICAgICAgIDxwPjwvcD4iCisgICAg ICAgKyAiICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgIDxkaXYgY2xh c3M9J2Zvb3RlciBjb2wtc20tMTInPiIKKyAgICAgICArICIgICAgICAgIDxk aXYgY2xhc3M9J3Jvdyc+IgorICAgICAgICsgIiAgICAgICAgICA8ZGl2IGNs YXNzPSdjb2wtc20tNCB3aXphcmQtcHJvZ3Jlc3MtYmFyJz4iCisgICAgICAg KyAiICAgICAgICAgICAgIDxwPjwlIGlmKHNob3dfcHJvZ3Jlc3NfYmFyKXsg JT48JT0gc2hvd19wcm9ncmVzc19iYXIgJT48JSB9ICU+PC9wPiIKKyAgICAg ICArICIgICAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgICAgICA8 ZGl2IGNsYXNzPSdjb2wtc20tOCc+IgorICAgICAgICsgIiAgICAgICAgICAg IDxkaXYgY2xhc3M9J3dpemFyZC1idXR0b25zJz4iCisgICAgICAgKyAiICAg ICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLXByaW1hcnkgd2l6 YXJkLWJhY2snIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxlX3ByZXYgPyAnZGlz YWJsZWQnIDogJyclPj4iCisgICAgICAgKyAiICAgICAgICAgICAgICAgIDxp IGNsYXNzPSdmYSBmYS1iYWNrd2FyZCc+PC9pPkJhY2s8L2J1dHRvbj4iCisg ICAgICAgKyAiICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRu LXByaW1hcnkgd2l6YXJkLW5leHQnIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxl X25leHQgPyAnZGlzYWJsZWQnIDogJyclPj5OZXh0IgorICAgICAgICsgIiAg ICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtZm9yd2FyZCc+PC9pPjwv YnV0dG9uPiIKKyAgICAgICArICIgICAgICAgICAgICAgIDxidXR0b24gY2xh c3M9J2J0biBidG4tZGFuZ2VyIHdpemFyZC1jYW5jZWwnIDwlPXRoaXMub3B0 aW9ucy5kaXNhYmxlX2NhbmNlbCA/ICdkaXNhYmxlZCcgOiAnJyU+PiIKKyAg ICAgICArICIgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWxnIGZh LWNsb3NlJz48L2k+Q2FuY2VsPC9idXR0b24+IgorICAgICAgICsgIiAgICAg ICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IHdpemFy ZC1maW5pc2gnIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxlX2ZpbmlzaCA/ICdk aXNhYmxlZCcgOiAnJyU+PiIKKyAgICAgICArICIgICAgICAgICAgICAgICAg RmluaXNoPC9idXR0b24+IgorICAgICAgICsgIiAgICAgICAgICAgIDwvZGl2 PiIKKyAgICAgICArICIgICAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAg ICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgIDwvZGl2PiIKKyAgICAg ICArICIgICAgPC9kaXY+IiksCisgICAgZXZlbnRzOiB7CisgICAgICAiY2xp Y2sgYnV0dG9uLndpemFyZC1uZXh0IiA6ICJuZXh0UGFnZSIsCisgICAgICAi Y2xpY2sgYnV0dG9uLndpemFyZC1iYWNrIiA6ICJwcmV2UGFnZSIsCisgICAg ICAiY2xpY2sgYnV0dG9uLndpemFyZC1jYW5jZWwiIDogIm9uQ2FuY2VsIiwK KyAgICAgICJjbGljayBidXR0b24ud2l6YXJkLWZpbmlzaCIgOiAiZmluaXNo V2l6YXJkIiwKKyAgICB9LAorICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9w dGlvbnMpIHsKKyAgICAgIHRoaXMub3B0aW9ucyA9IF8uZXh0ZW5kKHt9LCB0 aGlzLm9wdGlvbnMsIG9wdGlvbnMub3B0aW9ucyk7CisgICAgICB0aGlzLmN1 cnJQYWdlID0gdGhpcy5jb2xsZWN0aW9uLmF0KHRoaXMub3B0aW9ucy5jdXJy X3BhZ2UpLnRvSlNPTigpOworICAgIH0sCisgICAgcmVuZGVyOiBmdW5jdGlv bigpIHsKKyAgICAgIHZhciBkYXRhID0gdGhpcy5jdXJyUGFnZTsKKworICAg ICAgLyogQ2hlY2sgU3RhdHVzIG9mIHRoZSBidXR0b25zICovCisgICAgICB0 aGlzLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID0gKHRoaXMub3B0aW9ucy5kaXNh YmxlX25leHQgPyB0cnVlIDogdGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBh Z2UuZGlzYWJsZV9uZXh0KSk7CisgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJs ZV9wcmV2ID0gKHRoaXMub3B0aW9ucy5kaXNhYmxlX3ByZXYgPyB0cnVlIDog dGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2UuZGlzYWJsZV9wcmV2KSk7 CisgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9jYW5jZWwgPSAodGhpcy5j dXJyUGFnZS5jYW5DYW5jZWwgPyB0cnVlIDogdGhpcy5ldmFsQVNGdW5jKHRo aXMuY3VyclBhZ2UuZGlzYWJsZV9jYW5jZWwpKTsKKworICAgICAgdGhhdCA9 IHRoaXM7CisKKyAgICAgIC8qIEhUTUwgQ29udGVudCAqLworICAgICAgaWYg KGRhdGEuaHRtbCkgeyBkYXRhLmNvbnRlbnQgPSBkYXRhLmh0bWw7IH0KKyAg ICAgIC8qIEJhY2tib25lIFZpZXcgKi8KKyAgICAgIGVsc2UgaWYgKGRhdGEu dmlldykgeyBkYXRhLmNvbnRlbnQgPSBkYXRhLnZpZXcucmVuZGVyKCkuZWw7 fQorCisgICAgICAkKHRoaXMuZWwpLmh0bWwodGhpcy50bXBsKGRhdGEpKTsK KyAgICAgICQodGhpcy5lbCkuZmluZCgiLndpemFyZC1yaWdodC1wYW5lbF9j b250ZW50IikuaHRtbChkYXRhLmNvbnRlbnQpOworCisgICAgICAvKiBPbkxv YWQgQ2FsbGJhY2sgKi8KKyAgICAgIHRoaXMub25Mb2FkKCk7CisKKyAgICAg IHJldHVybiB0aGlzOworICAgIH0sCisgICAgbmV4dFBhZ2U6IGZ1bmN0aW9u KCkgeworICAgICAgdGhpcy5vcHRpb25zLmN1cnJfcGFnZS5lbCA9IHRoaXMu JGVsOworICAgICAgaWYgKCF0aGlzLmJlZm9yZU5leHQoKSkgeyByZXR1cm4g ZmFsc2U7IH0KKworICAgICAgcGFnZV9pZCA9IHRoaXMub25OZXh0KCk7CisK KyAgICAgIGlmIChwYWdlX2lkICkgeworICAgICAgICB0aGlzLmN1cnJQYWdl ID0gdGhpcy5jb2xsZWN0aW9uLmdldChwYWdlX2lkKS50b0pTT04oKTsKKyAg ICAgICAgdGhpcy5vcHRpb25zLmN1cnJfcGFnZSA9IHRoaXMuY29sbGVjdGlv bi5pbmRleE9mKHRoaXMuY29sbGVjdGlvbi5nZXQocGFnZV9pZCkpOworICAg ICAgfQorICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmN1cnJfcGFnZSA8 ICh0aGlzLmNvbGxlY3Rpb24ubGVuZ3RoLTEpKSB7CisgICAgICAgIHRoaXMu b3B0aW9ucy5jdXJyX3BhZ2UgPSB0aGlzLm9wdGlvbnMuY3Vycl9wYWdlICsg MTsKKyAgICAgICAgdGhpcy5jdXJyUGFnZSA9IHRoaXMuY29sbGVjdGlvbi5h dCh0aGlzLm9wdGlvbnMuY3Vycl9wYWdlKS50b0pTT04oKTsKKyAgICAgIH0K KworICAgICAgdGhpcy5lbmFibGVEaXNhYmxlTmV4dCgpOworICAgICAgdGhp cy5lbmFibGVEaXNhYmxlUHJldigpOworCisgICAgICByZXR1cm4gdGhpcy5y ZW5kZXIoKTsKKyAgICB9LAorICAgIHByZXZQYWdlOiBmdW5jdGlvbigpIHsK KyAgICAgIGlmICghdGhpcy5iZWZvcmVQcmV2KCkpIHsgcmV0dXJuIGZhbHNl OyB9CisKKyAgICAgIHBhZ2VfaWQgPSB0aGlzLm9uUHJldigpOworCisgICAg ICBpZiAocGFnZV9pZCl7CisgICAgICAgIHRoaXMuY3VyclBhZ2UgPSB0aGlz LmNvbGxlY3Rpb24uZ2V0KHBhZ2VfaWQpLnRvSlNPTigpOworICAgICAgICB0 aGlzLm9wdGlvbnMuY3Vycl9wYWdlID0gdGhpcy5jb2xsZWN0aW9uLmluZGV4 T2YodGhpcy5jb2xsZWN0aW9uLmdldChwYWdlX2lkKSk7CisgICAgICB9Cisg ICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY3Vycl9wYWdlID4gMCkgewor ICAgICAgICB0aGlzLm9wdGlvbnMuY3Vycl9wYWdlID0gdGhpcy5vcHRpb25z LmN1cnJfcGFnZSAtIDE7CisgICAgICAgIHRoaXMuY3VyclBhZ2UgPSB0aGlz LmNvbGxlY3Rpb24uYXQodGhpcy5vcHRpb25zLmN1cnJfcGFnZSkudG9KU09O KCk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZW5hYmxlRGlzYWJsZU5leHQo KTsKKyAgICAgIHRoaXMuZW5hYmxlRGlzYWJsZVByZXYoKTsKKworICAgICAg cmV0dXJuIHRoaXMucmVuZGVyKCk7CisgICAgfSwKKyAgICBmaW5pc2hXaXph cmQ6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5vbkZpbmlzaCgpOworICAg ICAgdGhpcy5yZW1vdmUoKTsgLy8gUmVtb3ZlIHZpZXcgZnJvbSBET00KKyAg ICAgIHRoaXMudW5iaW5kKCk7IC8vIFVuYmluZCBhbGwgbG9jYWwgZXZlbnQg YmluZGluZ3MKKyAgICAgIGRlbGV0ZSB0aGlzLiRlbDsgLy8gRGVsZXRlIHRo ZSBqUXVlcnkgd3JhcHBlZCBvYmplY3QgdmFyaWFibGUKKyAgICAgIGRlbGV0 ZSB0aGlzLmVsOyAvLyBEZWxldGUgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZSB0 byB0aGlzIG5vZGUKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisgICAg ZW5hYmxlRGlzYWJsZU5leHQ6IGZ1bmN0aW9uKGRpc2FibGUpIHsKKyAgICAg ICAgaWYgKHR5cGVvZihkaXNhYmxlKSAhPSAndW5kZWZpbmVkJykgeworICAg ICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlX25leHQgPSBkaXNhYmxlOwor ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jdXJy X3BhZ2UgPj0gKHRoaXMuY29sbGVjdGlvbi5sZW5ndGgtMSkpIHsKKyAgICAg ICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID0gdHJ1ZTsKKyAgICAg ICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzLm9wdGlvbnMu ZGlzYWJsZV9uZXh0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9LAorICAg IGVuYWJsZURpc2FibGVQcmV2OiBmdW5jdGlvbihkaXNhYmxlKSB7CisgICAg ICAgIGlmICh0eXBlb2YoZGlzYWJsZSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAg ICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9wcmV2ID0gZGlzYWJsZTsK KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY3Vy cl9wYWdlIDw9IDApIHsKKyAgICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJs ZV9wcmV2ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg ICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9wcmV2ID0gZmFsc2U7Cisg ICAgICAgIH0KKyAgICB9LAorICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKCl7 CisgICAgICByZXR1cm4gdGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2Uu YmVmb3JlTmV4dCk7CisgICAgfSwKKyAgICBiZWZvcmVQcmV2OiBmdW5jdGlv bigpeworICAgICAgcmV0dXJuIHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQ YWdlLmJlZm9yZVByZXYpOworICAgIH0sCisgICAgb25QcmV2OiBmdW5jdGlv bigpeworICAgICAgcmV0dXJuIHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQ YWdlLm9uUHJldik7CisgICAgfSwKKyAgICBvbk5leHQ6IGZ1bmN0aW9uKCl7 CisgICAgICByZXR1cm4gdGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2Uu b25OZXh0KTsKKyAgICB9LAorICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7Cisg ICAgICByZXR1cm4gdGhpcy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2Uub25M b2FkKTsKKyAgICB9LAorICAgIG9uRmluaXNoOiBmdW5jdGlvbigpIHsKKyAg ICAgIHJldHVybiB0cnVlOworICAgIH0sCisgICAgb25DYW5jZWw6IGZ1bmN0 aW9uKCkgeworICAgICAgdGhpcy4kZWwucmVtb3ZlKCk7CisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9LAorICAgIGV2YWxBU0Z1bmM6IGZ1bmN0aW9uKGZ1 bmMsIGN0eCkgeworICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgY3R4 ID0gY3R4IHx8IHNlbGYuY3VyclBhZ2U7CisKKyAgICAgIHJldHVybiAoXy5p c0Z1bmN0aW9uKGZ1bmMpID8gZnVuYy5hcHBseShjdHgsIFtzZWxmXSkgOiBm dW5jKTsKKyAgICB9CisgIH0pOworCisgIHJldHVybiBwZ0Jyb3dzZXI7CisK K30pOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6 YXJkL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6 YXJkL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmM3MTgxOGUKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9ncmFudF93aXphcmQvX19pbml0X18ucHkKQEAgLTAsMCArMSwz ODYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBn QWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChD KSAyMDEzIC0gMjAxNiwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQor IyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3Jl U1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisKKyIiIkltcGxlbWVudHMgR3JhbnQgV2l6YXJkIiIiCisKK2ltcG9ydCBq c29uCitmcm9tIGZsYXNrIGltcG9ydCByZW5kZXJfdGVtcGxhdGUsIHJlcXVl c3QsIGN1cnJlbnRfYXBwCitmcm9tIGZsYXNrLmV4dC5iYWJlbCBpbXBvcnQg Z2V0dGV4dAorZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IG1ha2Vf cmVzcG9uc2UgYXMgYWpheF9yZXNwb25zZSwgXAorICAgIG1ha2VfanNvbl9y ZXNwb25zZSwgaW50ZXJuYWxfc2VydmVyX2Vycm9yCitmcm9tIHBnYWRtaW4u dXRpbHMuZHJpdmVyIGltcG9ydCBnZXRfZHJpdmVyCitmcm9tIGNvbmZpZyBp bXBvcnQgUEdfREVGQVVMVF9EUklWRVIKKyMgZnJvbSBwZ2FkbWluLmJyb3dz ZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnV0aWxzIGltcG9ydCBwYXJzZV9w cml2X3RvX2RiCitmcm9tIHBnYWRtaW4udXRpbHMgaW1wb3J0IFBnQWRtaW5N b2R1bGUKK2Zyb20gZmxhc2sgaW1wb3J0IFJlc3BvbnNlLCB1cmxfZm9yCitm cm9tIGZsYXNrLmV4dC5zZWN1cml0eSBpbXBvcnQgbG9naW5fcmVxdWlyZWQK K2Zyb20gdXJsbGliIGltcG9ydCB1bnF1b3RlCisKKyMgc2V0IHRlbXBsYXRl IHBhdGggZm9yIHNxbCBzY3JpcHRzCit0ZW1wbGF0ZV9wYXRoID0gJ2dyYW50 X3dpemFyZC9zcWwnCitNT0RVTEVfTkFNRSA9ICdncmFudF93aXphcmQnCisK KworY2xhc3MgR3JhbnRXaXphcmRNb2R1bGUoUGdBZG1pbk1vZHVsZSk6Cisg ICAgIiIiCisgICAgY2xhc3MgR3JhbnRXaXphcmRNb2R1bGUoT2JqZWN0KToK KworICAgICAgICBJdCBpcyBhIHdpemFyZCB3aGljaCBpbmhlcml0cyBQZ0Fk bWluTW9kdWxlCisgICAgICAgIGNsYXNzIGFuZCBkZWZpbmUgbWV0aG9kcyB0 byBsb2FkIGl0cyBvd24KKyAgICAgICAgamF2YXNjcmlwdCBmaWxlLgorICAg ICIiIgorICAgIGRlZiBnZXRfb3duX3N0eWxlc2hlZXRzKHNlbGYpOgorICAg ICAgICAiIiIKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGxpc3Q6 IHRoZSBzdHlsZXNoZWV0cyB1c2VkIGJ5IHRoaXMgbW9kdWxlLgorICAgICAg ICAiIiIKKyAgICAgICAgc3R5bGVzaGVldHMgPSBbCisgICAgICAgICAgICB1 cmxfZm9yKCdicm93c2VyLnN0YXRpYycsIGZpbGVuYW1lPSdjc3Mvd2l6YXJk LmNzcycpLAorICAgICAgICAgICAgdXJsX2ZvcignZ3JhbnRfd2l6YXJkLnN0 YXRpYycsIGZpbGVuYW1lPSdjc3MvZ3JhbnRfd2l6YXJkLmNzcycpCisgICAg ICAgICAgICBdCisgICAgICAgIHJldHVybiBzdHlsZXNoZWV0cworCisgICAg ZGVmIGdldF9vd25famF2YXNjcmlwdHMoc2VsZik6CisgICAgICAgICIiIiIK KyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIGxpc3Q6IGpzIGZpbGVz IHVzZWQgYnkgdGhpcyBtb2R1bGUKKyAgICAgICAgIiIiCisgICAgICAgIHNj cmlwdHMgPSBbXQorICAgICAgICBzY3JpcHRzLmFwcGVuZCh7CisgICAgICAg ICAgICAnbmFtZSc6ICdwZ2FkbWluLnRvb2xzLmdyYW50X3dpemFyZCcsCisg ICAgICAgICAgICAncGF0aCc6IHVybF9mb3IoJ2dyYW50X3dpemFyZC5pbmRl eCcpICsgJ2dyYW50X3dpemFyZCcsCisgICAgICAgICAgICAnd2hlbic6IE5v bmUKKyAgICAgICAgfSkKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoeworICAg ICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5icm93c2VyLndpemFyZCcsCisg ICAgICAgICAgICAncGF0aCc6IHVybF9mb3IoJ2Jyb3dzZXIuc3RhdGljJywg ZmlsZW5hbWU9J2pzL3dpemFyZCcpLAorICAgICAgICAgICAgJ3doZW4nOiBO b25lCisgICAgICAgIH0pCisgICAgICAgIHJldHVybiBzY3JpcHRzCisKKyMg Q3JlYXRlIGJsdWVwcmludCBmb3IgR3JhbnRXaXphcmRNb2R1bGUgY2xhc3MK K2JsdWVwcmludCA9IEdyYW50V2l6YXJkTW9kdWxlKAorICAgIE1PRFVMRV9O QU1FLCBfX25hbWVfXywgc3RhdGljX3VybF9wYXRoPScnKQorCisKK0BibHVl cHJpbnQucm91dGUoIi8iKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgaW5kZXgo KToKKyAgICBwYXNzCisKKworQGJsdWVwcmludC5yb3V0ZSgiL2dyYW50X3dp emFyZC5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzY3JpcHQoKToKKyAg ICAiIiJyZW5kZXIgb3duIGphdmFzY3JpcHQiIiIKKyAgICByZXR1cm4gUmVz cG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICJncmFudF93aXphcmQvanMvZ3JhbnRfd2l6YXJkLmpzIiwgXz1nZXR0 ZXh0KSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAorICAgICAgICAg ICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IikKKwor CitAYmx1ZXByaW50LnJvdXRlKCIvYWxsb3dlZF9hY2wuanNvbiIpCitAbG9n aW5fcmVxdWlyZWQKK2RlZiBhY2xfbGlzdCgpOgorICAgICIiInJlbmRlciBs aXN0IG9mIGFjbHMiIiIKKyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9 cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICJncmFudF93aXph cmQvc3FsL2FsbG93ZWRfYWNsLmpzb24iLCBfPWdldHRleHQpLAorICAgICAg ICAgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgICAgICAgICAgbWltZXR5 cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKQorCisKK0BibHVlcHJpbnQu cm91dGUoCisgICAgJy9wcm9wZXJ0aWVzLzxpbnQ6Z2lkPi88aW50OnNpZD4v PGludDpkaWQ+JworICAgICcvPGludDpub2RlX2lkPi88bm9kZV9uYW1lPi88 bm9kZV90eXBlPi88bnNwbmFtZT4vJywKKyAgICBtZXRob2RzPSgnR0VUJywg J1BPU1QnKSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHByb3BlcnRpZXMoZ2lk LCBzaWQsIGRpZCwgbm9kZV9pZCwgbm9kZV9uYW1lLCBub2RlX3R5cGUsIG5z cG5hbWUpOgorICAgICIiIkl0IGZldGNoZXMgdGhlIHByb3BlcnRpZXMgb2Yg b2JqZWN0IHR5cGVzCisgICAgICAgYW5kIHJlbmRlciBpbnRvIHNlbGVjdGlv biBwYWdlIG9mIHdpemFyZAorICAgICIiIgorCisgICAgIyB1bnF1b3RlIGVu Y29kZWQgdXJsIHBhcmFtZXRlcgorICAgIG5vZGVfdHlwZSA9IHVucXVvdGUo bm9kZV90eXBlKQorICAgIG5zcG5hbWUgPSB1bnF1b3RlKG5zcG5hbWUpCisK KyAgICByZXNfZGF0YSA9IFtdCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIo UEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihzaWQpCisg ICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9ZGlkKQorCisgICAg IyBGZXRjaCBmdW5jdGlvbnMgYWdhaW5zdCBzY2hlbWEKKyAgICBpZiBub2Rl X3R5cGUgaW4gWydzY2hlbWEnXToKKyAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgW3RlbXBsYXRlX3BhdGgs ICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIG5vZGVfaWQ9bm9k ZV9pZCwgbm9kZV9uYW1lPW5vZGVfbmFtZSwKKyAgICAgICAgICAgIHR5cGU9 bm9kZV90eXBlLCBuc3BuYW1lPW5zcG5hbWUpCisKKyAgICAgICAgc3RhdHVz LCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChTUUwpCisKKyAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIHJlc19kYXRhLmV4 dGVuZChyZXNbJ3Jvd3MnXSkKKworICAgICMgRmV0Y2ggdHJpZ2dlciBmdW5j dGlvbnMKKyAgICBpZiBub2RlX3R5cGUgaW4gWydzY2hlbWEnLCAndHJpZ2dl cl9mdW5jdGlvbiddOgorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oCisgICAgICAgICAgICBbdGVtcGxhdGVfcGF0aCwgJ3Byb3Bl cnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgbm9kZV9pZD1ub2RlX2lkLCBu b2RlX25hbWU9bm9kZV9uYW1lLAorICAgICAgICAgICAgdHlwZT0ndHJpZ2dl cl9mdW5jdGlvbicsIG5zcG5hbWU9bnNwbmFtZSkKKyAgICAgICAgc3RhdHVz LCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChTUUwpCisKKyAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIHJlc19kYXRhLmV4 dGVuZChyZXNbJ3Jvd3MnXSkKKworICAgICMgRmV0Y2ggU2VxdWVuY2VzIGFn YWluc3Qgc2NoZW1hCisgICAgaWYgbm9kZV90eXBlIGluIFsnc2NoZW1hJywg J3NlcXVlbmNlJ106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJvcGVy dGllcy5zcWwnXSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQsIG5v ZGVfbmFtZT1ub2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPSdzZXF1ZW5j ZScsIG5zcG5hbWU9bnNwbmFtZSkKKworICAgICAgICBzdGF0dXMsIHJlcyA9 IGNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9cmVzKQorICAgICAgICByZXNfZGF0YS5leHRlbmQocmVzWydy b3dzJ10pCisKKyAgICAjIEZldGNoIFRhYmxlcyBhZ2FpbnN0IHNjaGVtYQor ICAgIGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVtYScsICd0YWJsZSddOgorICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAg ICAgICBbdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAg ICAgICAgICAgbm9kZV9pZD1ub2RlX2lkLCBub2RlX25hbWU9bm9kZV9uYW1l LAorICAgICAgICAgICAgdHlwZT0ndGFibGUnLCBuc3BuYW1lPW5zcG5hbWUp CisKKyAgICAgICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChT UUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAg ICAgICByZXNfZGF0YS5leHRlbmQocmVzWydyb3dzJ10pCisKKyAgICAjIEZl dGNoIFZpZXdzIGFnYWluc3Qgc2NoZW1hCisgICAgaWYgbm9kZV90eXBlIGlu IFsnc2NoZW1hJywgJ3ZpZXcnXToKKyAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgW3RlbXBsYXRlX3BhdGgs ICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIG5vZGVfaWQ9bm9k ZV9pZCwgbm9kZV9uYW1lPW5vZGVfbmFtZSwKKyAgICAgICAgICAgIHR5cGU9 J3ZpZXcnLCBuc3BuYW1lPW5zcG5hbWUpCisKKyAgICAgICAgc3RhdHVzLCBy ZXMgPSBjb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICByZXNfZGF0YS5leHRlbmQo cmVzWydyb3dzJ10pCisKKyAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAg ICAgICAgICAgIHJlc3BvbnNlPXJlc19kYXRhLAorICAgICAgICAgICAgc3Rh dHVzPTIwMAorICAgICAgICAgICAgKQorCisKK2RlZiBwYXJzZV9wcml2X3Rv X2RiKHN0cl9wcml2aWxlZ2VzLCBhY2xzKToKKyAgICAiIiIKKyAgICBDb21t b24gdXRpbGl0eSBmdW5jdGlvbiB0byBwYXJzZSBwcml2aWxlZ2VzIGJlZm9y ZSBzZW5kaW5nIHRvIGRhdGFiYXNlLgorICAgICIiIgorICAgIGRiX3ByaXZp bGVnZXMgPSB7CisgICAgICAgICdjJzogJ0NPTk5FQ1QnLAorICAgICAgICAn Qyc6ICdDUkVBVEUnLAorICAgICAgICAnVCc6ICdURU1QT1JBUlknLAorICAg ICAgICAnYSc6ICdJTlNFUlQnLAorICAgICAgICAncic6ICdTRUxFQ1QnLAor ICAgICAgICAndyc6ICdVUERBVEUnLAorICAgICAgICAnZCc6ICdERUxFVEUn LAorICAgICAgICAnRCc6ICdUUlVOQ0FURScsCisgICAgICAgICd4JzogJ1JF RkVSRU5DRVMnLAorICAgICAgICAndCc6ICdUUklHR0VSJywKKyAgICAgICAg J1UnOiAnVVNBR0UnLAorICAgICAgICAnWCc6ICdFWEVDVVRFJworICAgICAg ICB9CisKKyAgICBwcml2aWxlZ2VzID0gW10KKworICAgIGZvciBwcml2IGlu IHN0cl9wcml2aWxlZ2VzOgorICAgICAgICBwcml2X3dpdGhfZ3JhbnQgPSB7 fQorICAgICAgICBwcml2X3dpdGhvdXRfZ3JhbnQgPSB7fQorICAgICAgICBw cml2X2Z1bmN0aW9uX3dpdGhfZ3JhbnQgPSBbXQorICAgICAgICBwcml2X2Z1 bmN0aW9uX3dpdGhvdXRfZ3JhbnQgPSBbXQorICAgICAgICBwcml2X3NlcXVl bmNlX3dpdGhfZ3JhbnQgPSBbXQorICAgICAgICBwcml2X3NlcXVlbmNlX3dp dGhvdXRfZ3JhbnQgPSBbXQorICAgICAgICBwcml2X3RhYmxlX3dpdGhfZ3Jh bnQgPSBbXQorICAgICAgICBwcml2X3RhYmxlX3dpdGhvdXRfZ3JhbnQgPSBb XQorCisgICAgICAgICMgaW1wb3J0IHBkYgorICAgICAgICAjIHBkYi5zZXRf dHJhY2UoKQorICAgICAgICBmb3IgcHJpdmlsZWdlIGluIHByaXZbJ3ByaXZp bGVnZXMnXToKKworICAgICAgICAgICAgaWYgcHJpdmlsZWdlWydwcml2aWxl Z2VfdHlwZSddIG5vdCBpbiBkYl9wcml2aWxlZ2VzOgorICAgICAgICAgICAg ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRXh0cmFjdCBwcml2aWxl Z2VzIGFwcGxpY2FibGUgdG8gZnVuY3Rpb24KKyAgICAgICAgICAgIGlmIHBy aXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXSBpbiBhY2xzWydmdW5jdGlvbidd WydhY2wnXToKKyAgICAgICAgICAgICAgICBpZiBwcml2aWxlZ2VbJ3dpdGhf Z3JhbnQnXToKKyAgICAgICAgICAgICAgICAgICAgcHJpdl9mdW5jdGlvbl93 aXRoX2dyYW50LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGRi X3ByaXZpbGVnZXNbcHJpdmlsZWdlWydwcml2aWxlZ2VfdHlwZSddXSkKKyAg ICAgICAgICAgICAgICBlbGlmIHByaXZpbGVnZVsncHJpdmlsZWdlJ106Cisg ICAgICAgICAgICAgICAgICAgIHByaXZfZnVuY3Rpb25fd2l0aG91dF9ncmFu dC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBkYl9wcml2aWxl Z2VzW3ByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXV0pCisKKyAgICAgICAg ICAgICMgRXh0cmFjdCBwcml2aWxlZ2VzIGFwcGxpY2FibGUgdG8gc2VxdWVu Y2UKKyAgICAgICAgICAgIGlmIHByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUn XSBpbiBhY2xzWydzZXF1ZW5jZSddWydhY2wnXToKKyAgICAgICAgICAgICAg ICBpZiBwcml2aWxlZ2VbJ3dpdGhfZ3JhbnQnXToKKyAgICAgICAgICAgICAg ICAgICAgcHJpdl9zZXF1ZW5jZV93aXRoX2dyYW50LmFwcGVuZCgKKyAgICAg ICAgICAgICAgICAgICAgICAgIGRiX3ByaXZpbGVnZXNbcHJpdmlsZWdlWydw cml2aWxlZ2VfdHlwZSddXSkKKyAgICAgICAgICAgICAgICBlbGlmIHByaXZp bGVnZVsncHJpdmlsZWdlJ106CisgICAgICAgICAgICAgICAgICAgIHByaXZf c2VxdWVuY2Vfd2l0aG91dF9ncmFudC5hcHBlbmQoCisgICAgICAgICAgICAg ICAgICAgICAgICBkYl9wcml2aWxlZ2VzW3ByaXZpbGVnZVsncHJpdmlsZWdl X3R5cGUnXV0pCisKKyAgICAgICAgICAgICMgRXh0cmFjdCBwcml2aWxlZ2Vz IGFwcGxpY2FibGUgdG8gdmlldy90YWJsZQorICAgICAgICAgICAgaWYgKHBy aXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXSBpbiBhY2xzWyd0YWJsZSddWydh Y2wnXSk6CisgICAgICAgICAgICAgICAgaWYgcHJpdmlsZWdlWyd3aXRoX2dy YW50J106CisgICAgICAgICAgICAgICAgICAgIHByaXZfdGFibGVfd2l0aF9n cmFudC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBkYl9wcml2 aWxlZ2VzW3ByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXV0pCisgICAgICAg ICAgICAgICAgZWxpZiBwcml2aWxlZ2VbJ3ByaXZpbGVnZSddOgorICAgICAg ICAgICAgICAgICAgICBwcml2X3RhYmxlX3dpdGhvdXRfZ3JhbnQuYXBwZW5k KAorICAgICAgICAgICAgICAgICAgICAgICAgZGJfcHJpdmlsZWdlc1twcml2 aWxlZ2VbJ3ByaXZpbGVnZV90eXBlJ11dKQorCisgICAgICAgICMgSWYgd2Ug aGF2ZSBhbGwgYWNsIHRoZW4ganVzdCByZXR1cm4gYWxsCisgICAgICAgIGlm IGxlbihwcml2X3RhYmxlX3dpdGhfZ3JhbnQpID09IGxlbihhY2xzWyd0YWJs ZSddWydhY2wnXSk6CisgICAgICAgICAgICBwcml2X3RhYmxlX3dpdGhfZ3Jh bnQgPSBbJ0FMTCddCisKKyAgICAgICAgaWYgbGVuKHByaXZfdGFibGVfd2l0 aG91dF9ncmFudCkgPT0gbGVuKGFjbHNbJ3RhYmxlJ11bJ2FjbCddKToKKyAg ICAgICAgICAgIHByaXZfdGFibGVfd2l0aG91dF9ncmFudCA9IFsnQUxMJ10K KworICAgICAgICAjIEFwcGVuZGluZyBhbmQgcmV0dXJuaW5nIGFsbCBBQ0wK KyAgICAgICAgcHJpdl93aXRoX2dyYW50WydmdW5jdGlvbiddID0gcHJpdl9m dW5jdGlvbl93aXRoX2dyYW50CisgICAgICAgIHByaXZfd2l0aG91dF9ncmFu dFsnZnVuY3Rpb24nXSA9IHByaXZfZnVuY3Rpb25fd2l0aG91dF9ncmFudAor CisgICAgICAgIHByaXZfd2l0aF9ncmFudFsnc2VxdWVuY2UnXSA9IHByaXZf c2VxdWVuY2Vfd2l0aF9ncmFudAorICAgICAgICBwcml2X3dpdGhvdXRfZ3Jh bnRbJ3NlcXVlbmNlJ10gPSBwcml2X3NlcXVlbmNlX3dpdGhvdXRfZ3JhbnQK KworICAgICAgICBwcml2X3dpdGhfZ3JhbnRbJ3RhYmxlJ10gPSBwcml2X3Rh YmxlX3dpdGhfZ3JhbnQKKyAgICAgICAgcHJpdl93aXRob3V0X2dyYW50Wyd0 YWJsZSddID0gcHJpdl90YWJsZV93aXRob3V0X2dyYW50CisKKyAgICAgICAg cHJpdmlsZWdlcy5hcHBlbmQoeworICAgICAgICAgICAgJ2dyYW50ZWUnOiBw cml2WydncmFudGVlJ10sCisgICAgICAgICAgICAnd2l0aF9ncmFudCc6IHBy aXZfd2l0aF9ncmFudCwKKyAgICAgICAgICAgICd3aXRob3V0X2dyYW50Jzog cHJpdl93aXRob3V0X2dyYW50CisgICAgICAgICAgICB9KQorCisgICAgcmV0 dXJuIHByaXZpbGVnZXMKKworCitAYmx1ZXByaW50LnJvdXRlKAorICAgICcv bXNxbC88aW50OmdpZD4vPGludDpzaWQ+LzxpbnQ6ZGlkPi88bm9kZV90eXBl Pi88bnNwbmFtZT4vJywKKyAgICBtZXRob2RzPSgnR0VUJywgJ1BPU1QnKSkK K2RlZiBtc3FsKGdpZCwgc2lkLCBkaWQsIG5vZGVfdHlwZSwgbnNwbmFtZSk6 CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBtb2Rp ZmllZCBTUUwKKyAgICAiIiIKKworICAgICMgdW5xdW90ZSBlbmNvZGVkIHVy bCBwYXJhbWV0ZXIKKyAgICBub2RlX3R5cGUgPSB1bnF1b3RlKG5vZGVfdHlw ZSkKKyAgICBuc3BuYW1lID0gdW5xdW90ZShuc3BuYW1lKQorCisgICAgZGF0 YSA9IHt9CisgICAgZm9yIGssIHYgaW4gcmVxdWVzdC5hcmdzLml0ZW1zKCk6 CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGFba10gPSBqc29uLmxv YWRzKHYpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAg ICAgZGF0YVtrXSA9IHYKKworICAgICMgRm9ybSBkYiBjb25uZWN0aW9uCisg ICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNv bm5lY3Rpb25fbWFuYWdlcihzaWQpCisgICAgY29ubiA9IG1hbmFnZXIuY29u bmVjdGlvbihkaWQ9ZGlkKQorCisgICAgYWNscyA9IFtdCisgICAgdHJ5Ogor ICAgICAgICBhY2xzID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg Ii8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdhbGxvd2VkX2FjbC5qc29uJ10p CisgICAgICAgICAgICApCisgICAgICAgIGFjbHMgPSBqc29uLmxvYWRzKGFj bHMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBjdXJy ZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKGUpCisKKyAgICB0cnk6CisKKyAg ICAgICAgIyBQYXJzZSBwcml2aWxlZ2VzCisgICAgICAgIGlmICdhY2wnIGlu IGRhdGE6CisgICAgICAgICAgICBkYXRhWydhY2wnXSA9IHBhcnNlX3ByaXZf dG9fZGIoZGF0YVsnYWNsJ10sIGFjbHMpCisKKyAgICAgICAgIyBQYXNzIGRh dGFiYXNlIG9iamVjdHMgYW5kIGdldCBTUUwgZm9yIHByaXZpbGVnZXMKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAg ICAgICAgW3RlbXBsYXRlX3BhdGgsICdncmFudC5zcWwnXSksCisgICAgICAg ICAgICBkYXRhPWRhdGEsIG5zcG5hbWU9bnNwbmFtZSwgY29ubj1jb25uKQor CisgICAgICAgIHJlcyA9IHsnZGF0YSc6IFNRTH0KKworICAgICAgICByZXR1 cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJlc3BvbnNlPXJlcywK KyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICkKKworICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJuIG1ha2Vf anNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIHN0YXR1cz00MTAsCisgICAg ICAgICAgICBzdWNjZXNzPTAsCisgICAgICAgICAgICBlcnJvcm1zZz1lLm1l c3NhZ2UKKyAgICAgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUoCisgICAg Jy9zYXZlLzxpbnQ6Z2lkPi88aW50OnNpZD4vPGludDpkaWQ+LycKKyAgICAn PG5vZGVfdHlwZT4vPG5zcG5hbWU+LycsCisgICAgbWV0aG9kcz0oJ0dFVCcs ICdQT1NUJykpCitkZWYgc2F2ZShnaWQsIHNpZCwgZGlkLCBub2RlX3R5cGUs IG5zcG5hbWUpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBh cHBseSB0aGUgcHJpdmlsZWdlcyB0byB0aGUgc2VsZWN0ZWQKKyAgICBEYXRh YmFzZSBPYmplY3RzCisgICAgIiIiCisKKyAgICAjIHVucXVvdGUgZW5jb2Rl ZCB1cmwgcGFyYW1ldGVyCisgICAgbm9kZV90eXBlID0gdW5xdW90ZShub2Rl X3R5cGUpCisgICAgbnNwbmFtZSA9IHVucXVvdGUobnNwbmFtZSkKKworICAg IGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3JtIGVsc2UganNv bi5sb2FkcyhyZXF1ZXN0LmRhdGEuZGVjb2RlKCkpCisKKyAgICAjIEZvcm0g ZGIgY29ubmVjdGlvbiBhbmQgd2UgdXNlIGNvbm4gdG8gZXhlY3V0ZSBzcWwK KyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUiku Y29ubmVjdGlvbl9tYW5hZ2VyKHNpZCkKKyAgICBjb25uID0gbWFuYWdlci5j b25uZWN0aW9uKGRpZD1kaWQpCisKKyAgICBhY2xzID0gW10KKyAgICB0cnk6 CisgICAgICAgIGFjbHMgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAg ICAiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwgJ2FsbG93ZWRfYWNsLmpzb24n XSkKKyAgICAgICAgICAgICkKKyAgICAgICAgYWNscyA9IGpzb24ubG9hZHMo YWNscykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGN1 cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oZSkKKworICAgIHRyeToKKwor ICAgICAgICAjIFBhcnNlIHByaXZpbGVnZXMKKyAgICAgICAgaWYgJ2FjbCcg aW4gZGF0YToKKyAgICAgICAgICAgIGRhdGFbJ2FjbCddID0gcGFyc2VfcHJp dl90b19kYihkYXRhWydhY2wnXSwgYWNscykKKworICAgICAgICAjIFBhc3Mg ZGF0YWJhc2Ugb2JqZWN0cyBhbmQgZ2V0IFNRTCBmb3IgcHJpdmlsZWdlcwor ICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAg ICAgICAgICBbdGVtcGxhdGVfcGF0aCwgJ2dyYW50LnNxbCddKSwKKyAgICAg ICAgICAgIGRhdGE9ZGF0YSwgbnNwbmFtZT1uc3BuYW1lLCBjb25uPWNvbm4p CisKKyAgICAgICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChT UUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAg c3VjY2Vzcz0xLAorICAgICAgICAgICAgaW5mbz0iUHJpdmlsZWdlcyBBcHBs aWVkIgorICAgICAgICApCisKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6 CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9ZS5tZXNzYWdlKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv Z3JhbnRfd2l6YXJkL3N0YXRpYy9jc3MvZ3JhbnRfd2l6YXJkLmNzcyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9zdGF0aWMvY3NzL2dyYW50 X3dpemFyZC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNDZjOTIwMwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rv b2xzL2dyYW50X3dpemFyZC9zdGF0aWMvY3NzL2dyYW50X3dpemFyZC5jc3MK QEAgLTAsMCArMSw4NiBAQAorLyoqIEdyYW50IFdpemFyZCBDU1MgKiovCisK Ky8qKgorICBDU1MgdG8gbWFrZSBkYiBvYmplY3QgdHlwZSB0YWJsZQorICBm aXhlZCBzbyB0aGF0IHRib2R5IGNvbnRlbnQgbWF5CisgIHNjcm9sbAorICov Cisub2JqZWN0X3R5cGVfdGFibGUgdGhlYWQgdHIgeworICBwb3NpdGlvbjog cmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworfQorCisub2JqZWN0X3R5 cGVfdGFibGUgeworCWRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgaGVpZ2h0 OiAxMDAlOworICBib3JkZXI6IDAgIWltcG9ydGFudDsKK30KKworLm9iamVj dF90eXBlX3RhYmxlIHRib2R5IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG92 ZXJmbG93OiBzY3JvbGw7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Cisg IHdpZHRoOiAxMDAlOworICBtaW4taGVpZ2h0OiAxMDAlOworICBtYXgtaGVp Z2h0OiA2NiU7CisgIGhlaWdodDogNjYlOworfQorCisub2JqZWN0X3R5cGVf dGFibGUgdGJvZHkgdHIgdGQgeworCWJhY2tncm91bmQtcG9zaXRpb246IDRw eCA0cHg7CisJYm9yZGVyLXJhZGl1czogMDsKK30KKworLm9iamVjdF90eXBl X3RhYmxlIHRib2R5IHRyIHRkOm50aC1jaGlsZCgxKSwKKy5vYmplY3RfdHlw ZV90YWJsZSB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMSkgeworICB3aWR0aDog MjhweDsKKyAgbWluLXdpZHRoOiAyOHB4OworfQorCisub2JqZWN0X3R5cGVf dGFibGUgdGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDIpLAorLm9iamVjdF90eXBl X3RhYmxlIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKSB7CisgIHdpZHRoOiAx ODVweDsKKyAgbWluLXdpZHRoOiAxODVweDsKK30KKworLm9iamVjdF90eXBl X3RhYmxlIHRib2R5IHRyIHRkOm50aC1jaGlsZCgzKSwKKy5vYmplY3RfdHlw ZV90YWJsZSB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMykgeworICB3aWR0aDog MTEwcHg7CisgIG1pbi13aWR0aDogMTEwcHg7Cit9CisKKy5vYmplY3RfdHlw ZV90YWJsZSB0aGVhZCB0ciB0aDpudGgtY2hpbGQoNCkgeworCXdpZHRoOiAy NDRweDsKK30KKworLm9iamVjdF90eXBlX3RhYmxlIHRib2R5IHRyIHRkOm50 aC1jaGlsZCg0KSB7CisgIHdpZHRoOiAyNDRweDsKKyAgbWluLXdpZHRoOiAy MjhweDsKKyAgbWF4LXdpZHRoOiAxMDAlOworfQorCisvKiogT3ZlcnJpZGUg QmFja2dyaWQgZmlsdGVyIENTUyAqKi8KKy5iYWNrZ3JpZC1maWx0ZXIuZm9y bS1zZWFyY2ggeworICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luOiAwcHggNXB4 IDVweCAwOworfQorCisvKiogQ3VzdG9tIHN0eWxpbmcgZm9yIENvZGVtaXJy b3IgZmllbGQgKiovCisud2l6YXJkLXJpZ2h0LXBhbmVsX2NvbnRlbnQgewor ICBib3JkZXI6IDFweCBzb2xpZGUgI2NjYzsKK30KKworLndpemFyZC1yaWdo dC1wYW5lbF9jb250ZW50IC5Db2RlTWlycm9yIHsKKyAgYm9yZGVyOiAxcHgg c29saWQgI2NjYzsKKyAgaGVpZ2h0OiAyODVweCAhaW1wb3J0YW50OworICBt aW4taGVpZ2h0OiAyODVweCAhaW1wb3J0YW50OworfQorCisud2l6YXJkLXJp Z2h0LXBhbmVsX2NvbnRlbnQgLkNvZGVNaXJyb3ItbGluZW51bWJlciB7Cisg IGJhY2tncm91bmQ6ICNGN0Y3Rjc7CisgIGJvcmRlci1yaWdodDogMXB4IHNv bGlkICNEREREREQ7Cit9CisKKy53aXphcmQtcmlnaHQtcGFuZWxfY29udGVu dCAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKKyAgbWluLWhlaWdodDogMjg1cHgg IWltcG9ydGFudDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL2pzL2dyYW50 X3dpemFyZC5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90 ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL2pzL2dyYW50X3dpemFyZC5qcwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRhMzlmCi0tLSAv ZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJk L3RlbXBsYXRlcy9ncmFudF93aXphcmQvanMvZ3JhbnRfd2l6YXJkLmpzCkBA IC0wLDAgKzEsMTEwMSBAQAorZGVmaW5lKFsKKyAgICAgICdqcXVlcnknLCAn dW5kZXJzY29yZScsICd1bmRlcnNjb3JlLnN0cmluZycsICdhbGVydGlmeScs CisgICAgICAncGdhZG1pbi5icm93c2VyJywgJ2JhY2tib25lJywgJ2JhY2tn cmlkJywgJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywKKyAgICAgICdiYWNrZ3Jp ZC5zZWxlY3QuYWxsJywgJ2JhY2tncmlkLmZpbHRlcicsICdwZ2FkbWluLmJy b3dzZXIuc2VydmVyLnByaXZpbGVnZScsCisgICAgICAncGdhZG1pbi5icm93 c2VyLndpemFyZCcsCisgICAgICBdLAorCisgIC8vIFRoaXMgZGVmaW5lcyBH cmFudCBXaXphcmQgZGlhbG9nCisgIGZ1bmN0aW9uKCQsIF8sIFMsIGFsZXJ0 aWZ5LCBwZ0Jyb3dzZXIsIEJhY2tib25lLCBCYWNrZ3JpZCwgcGdOb2RlKSB7 CisKKyAgICAvLyBpZiBtb2R1bGUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCwg cmVmZXIgdG8gdGhhdC4KKyAgICBpZiAocGdCcm93c2VyLkdyYW50V2l6YXJk KSB7CisgICAgICByZXR1cm4gcGdCcm93c2VyLkdyYW50V2l6YXJkOworICAg IH0KKworICAgIC8qKgorICAgICAgSXQgaXMgc3ViIG1vZGVsIGZvciBmaWVs ZCAiT2JqZWN0cyIuIEl0IGhhcyBmaWVsZHMKKyAgICAgIGZvciBkYXRhYmFz ZSBvYmplY3QgdHlwZXMgc3VjaCBhcyBTY2hlbWFzLCBWaWV3cyBhbmQKKyAg ICAgIFNlcXVlbmNlIGV0Yy4KKyAgICAqLworICAgIHZhciBEYXRhYmFzZU9i amVjdE1vZGVsID0gcGdOb2RlLk1vZGVsLmV4dGVuZCh7CisgICAgICBkZWZh dWx0czogeworICAgICAgICBzZWxlY3RlZDogZmFsc2UsCisgICAgICAgIGlj b246ICdpY29uLXVua25vd24nLAorICAgICAgICBuYW1lOiB1bmRlZmluZWQs CisgICAgICAgIG5hbWVfd2l0aF9hcmdzOiB1bmRlZmluZWQsCisgICAgICAg IG5zcG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgcHJvYXJnczogdW5kZWZp bmVkLAorICAgICAgICBvYmplY3RfdHlwZTogdW5kZWZpbmVkLAorICAgICAg ICBvYmplY3RfaWQ6IHVuZGVmaW5lZAorICAgICAgfSwKKyAgICAgIGlkQXR0 cmlidXRlOiAnb2JqZWN0X2lkJywgLy8gdG8gdW5pcXVlbHkgaWRlbnRpZnkg YSBtb2RlbCBvYmplY3QKKyAgICAgIHRvSlNPTjogZnVuY3Rpb24ob2JqKSB7 CisgICAgICAgIHZhciBkID0gcGdOb2RlLk1vZGVsLnByb3RvdHlwZS50b0pT T04uYXBwbHkodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkLmljb247CisgICAg ICAgIHJldHVybiBkOworICAgICAgfSwKKyAgICAgIHBhcnNlOiBmdW5jdGlv bihyZXMpIHsKKworICAgICAgICAvLyBDcmVhdGUgdW5pcXVlIG9iamVjdCBp ZAorICAgICAgICByZXMub2JqZWN0X2lkID0gcmVzLm5hbWVfd2l0aF9hcmdz OworCisgICAgICAgIC8vIGNyZWF0ZSBuYW1lIHdpdGggYXJncyBpZiBpdHMg b2JqZWN0IGlzIGZ1bmN0aW9uCisgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVk KHJlcy5vYmplY3RfdHlwZSkgJiYgKHJlcy5vYmplY3RfdHlwZSA9PSAnRnVu Y3Rpb24nIHx8CisgICAgICAgICAgcmVzLm9iamVjdF90eXBlID09ICdUcmln Z2VyIEZ1bmN0aW9uJykpCisgICAgICAgICAgcmVzLm5hbWVfd2l0aF9hcmdz ID0gcmVzLm5hbWUrJygnKyh0eXBlb2YocmVzLnByb2FyZ3MpICE9ICd1bmRl ZmluZWQnID8gcmVzLnByb2FyZ3MgOiAnJykrJyknOworICAgICAgICBlbHNl CisgICAgICAgICAgcmVzLm5hbWVfd2l0aF9hcmdzID0gcmVzLm5hbWU7CisK KyAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgIH0sCisKKyAgICAgIHZhbGlk YXRlOiBmdW5jdGlvbigpIHsKKworICAgICAgICAvKgorICAgICAgICAqIFRy aWdnZXJzIGVycm9yIG1lc3NhZ2VzIGZvciBvYmplY3QgdHlwZXMgInNlbGVj dGVkIgorICAgICAgICAqIGlmIGl0IGlzIGVtcHR5L3VuZGVmaW5lZC9udWxs CisgICAgICAgICovCisgICAgICAgIHZhciBlcnIgPSB7fSwKKyAgICAgICAg ICBlcnJtc2csCisgICAgICAgICAgbm9kZSA9IHRoaXMuZ2V0KCdvYmplY3Rz JykudG9KU09OKCk7CisgICAgICAgIGlmIChfLmlzRW1wdHkobm9kZSkpIHsK KyAgICAgICAgICBlcnJbJ3NlbGVjdGVkJ10gPSAne3sgXygiUGxlYXNlIHNl bGVjdCBhbnkgZGF0YWJhc2Ugb2JqZWN0IHR5cGUiKSB9fSc7CisgICAgICAg ICAgZXJybXNnID0gZXJybXNnIHx8IGVyclsnc2VsZWN0ZWQnXTsKKyAgICAg ICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdzZWxlY3RlZCcsIGVycm1zZyk7 CisgICAgICAgICAgcmV0dXJuIGVycm1zZzsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ3NlbGVjdGVkJyk7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9Cisg ICAgfSk7CisKKyAgICAvLyBEZWZpbmUgY29sdW1ucyBmb3IgdGhlIERiIE9i amVjdCBUeXBlcyBncmlkCisgICAgdmFyIGNvbHVtbnMgPSBbeworICAgICAg bmFtZTogInNlbGVjdGVkIiwKKworICAgICAgLyoKKyAgICAgIE92ZXJyaWRl IHJlbmRlciBtZXRob2Qgb2YgQmFja2dyaWQuRXh0ZW5zaW9uLlNlbGVjdFJv d0NlbGwKKyAgICAgIGNsYXNzLiBJdCBoYXMgYW4gaXNzdWU6IEl0IGRvZXNu J3QgbWFyayByb3dzIGNoZWNrZWQgaWYgd2UgbW92ZSB0byBuZXh0CisgICAg ICBwYWdlIGFuZCB0aGVuIGdvIGJhY2sgdG8gcHJldmlvdXMgcGFnZS4gYnV0 IGl0IG11c3Qgc2hvdy4KKyAgICAgIHNvIHdlIGhhbmRsZSB0aGlzIGNhc2Ug Ynkgb3ZlcnJpZGluZyB0aGUgcmVuZGVyIG1ldGhvZC4KKyAgICAgICovCisg ICAgICBjZWxsOiBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0Um93Q2VsbC5l eHRlbmQoeworICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworCisgICAg ICAgICAgLy8gVXNlIHRoZSBCYWNrZm9ybSBDb250cm9sJ3MgcmVuZGVyIGZ1 bmN0aW9uCisgICAgICAgICAgQmFja2dyaWQuRXh0ZW5zaW9uLlNlbGVjdFJv d0NlbGwucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMp OworCisgICAgICAgICAgdmFyIGNvbCA9IHRoaXMuY29sdW1uLmdldCgnbmFt ZScpOworICAgICAgICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwu aGFzKGNvbCkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmdldChj b2wpKSB7CisgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3goKS5wcm9wKCJj aGVja2VkIiwgdHJ1ZSk7CisgICAgICAgICAgICAgIHRoaXMuJGVsLnBhcmVu dCgpLnRvZ2dsZUNsYXNzKCJzZWxlY3RlZCIsIHRydWUpOworICAgICAgICAg ICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoImJhY2tncmlkOnNlbGVjdGVkIiwg dGhpcy5tb2RlbCwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICB9 KSwKKworICAgICAgaGVhZGVyQ2VsbDogInNlbGVjdC1hbGwiLAorCisgICAg fSx7CisgICAgICBuYW1lOiAib2JqZWN0X3R5cGUiLAorICAgICAgbGFiZWw6 ICJPYmplY3QgVHlwZSIsCisgICAgICBlZGl0YWJsZTogZmFsc2UsCisgICAg ICBjZWxsOiBCYWNrZ3JpZC5DZWxsLmV4dGVuZCh7CisgICAgICAgIHJlbmRl cjogZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAvLyBPdmVycmlkZSByZW5k ZXIgdG8gYWRkIGljb24gdG8gRGIgT2JqZWN0IGNvbHVtbgorICAgICAgICAg IEJhY2tncmlkLkNlbGwucHJvdG90eXBlLnJlbmRlci5hcHBseSh0aGlzLCBh cmd1bWVudHMpOworICAgICAgICAgIHRoaXMuJGVsLmFkZENsYXNzKHRoaXMu bW9kZWwuZ2V0KCdpY29uJykpLmNzcyh7InBhZGRpbmctbGVmdCI6ICIyNHB4 In0pOworCisgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg ICAgIH0pCisgICAgfSx7CisgICAgICBuYW1lOiAibnNwbmFtZSIsCisgICAg ICBsYWJlbDogIlNjaGVtYSIsCisgICAgICBjZWxsOiAic3RyaW5nIiwKKyAg ICAgIGVkaXRhYmxlOiBmYWxzZQorICAgIH0seworICAgICAgbmFtZTogIm5h bWVfd2l0aF9hcmdzIiwKKyAgICAgIGxhYmVsOiAiTmFtZSIsCisgICAgICBj ZWxsOiAic3RyaW5nIiwKKyAgICAgIGVkaXRhYmxlOiBmYWxzZQorICAgIH1d OworCisgICAgLy8gQ3JlYXRlIGFuIE9iamVjdCBHcmFudFdpemFyZCBvZiBw Z0Jyb3dzZXIgY2xhc3MKKyAgICBwZ0Jyb3dzZXIuR3JhbnRXaXphcmQgID0g eworICAgICAgaW5pdDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz LmluaXRpYWxpemVkKQorICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0 aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgICAgICAvLyBEZWZpbmUg bGlzdCBvZiBub2RlcyBvbiB3aGljaCBncmFudCB3aXphcmQgY29udGV4dCBt ZW51IG9wdGlvbiBhcHBlYXJzCisgICAgICAgIHZhciBzdXBwb3J0ZWRfbm9k ZXMgPSBbCisgICAgICAgICAgICAgICdzY2hlbWEnLCAnY29sbC1mdW5jdGlv bicsCisgICAgICAgICAgICAgICdjb2xsLXNlcXVlbmNlJywgJ2NvbGwtdGFi bGUnLAorICAgICAgICAgICAgICAnY29sbC12aWV3JywgJ2NvbGwtbWF0ZXJp YWxpemVkX3ZpZXcnCisgICAgICAgICAgICBdLAorCisgICAgICAgICAgICAv KioKKyAgICAgICAgICAgICAgRW5hYmxlL2Rpc2FibGUgZ3JhbnR3aXphcmQg bWVudSBpbiB0b29scyBiYXNlZAorICAgICAgICAgICAgICBvbiBub2RlIHNl bGVjdGVkCisgICAgICAgICAgICAgIGlmIHNlbGVjdGVkIG5vZGUgaXMgcHJl c2VudCBpbiBzdXBwb3J0ZWRfbm9kZXMsCisgICAgICAgICAgICAgIG1lbnUg d2lsbCBiZSBlbmFibGVkIG90aGVyd2lzZSBkaXNhYmxlZC4KKyAgICAgICAg ICAgICAgQWxzbywgaGlkZSBpdCBmb3Igc3lzdGVtIHZpZXcgaW4gY2F0YWxv Z3MKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW51X2VuYWJsZWQg PSBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgeworICAgICAgICAg ICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0 ZW1EYXRhOworICAgICAgICAgICAgICB2YXIgcGFyZW50X2l0ZW0gPSB0Lmhh c1BhcmVudChpKSA/IHQucGFyZW50KGkpOiBudWxsLAorICAgICAgICAgICAg ICAgICAgcGFyZW50X2RhdGEgPSBwYXJlbnRfaXRlbSA/IHQuaXRlbURhdGEo cGFyZW50X2l0ZW0pIDogbnVsbDsKKyAgICAgICAgICAgICAgaWYoIV8uaXNV bmRlZmluZWQoZCkgJiYgIV8uaXNOdWxsKGQpICYmICFfLmlzTnVsbChwYXJl bnRfZGF0YSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICgoXy5pbmRleE9m KHN1cHBvcnRlZF9ub2RlcywgZC5fdHlwZSkgIT09IC0xICYmIHBhcmVudF9k YXRhLl90eXBlICE9ICdjYXRhbG9nJykgPyB0cnVlOiBmYWxzZSk7CisgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgICAgICAgICB9OworCisgICAgICAgIC8vIERlZmluZSB0aGUgbm9k ZXMgb24gd2hpY2ggdGhlIG1lbnVzIHRvIGJlIGFwcGVhcgorICAgICAgICB2 YXIgbWVudXMgPSBbeworICAgICAgICAgIG5hbWU6ICdncmFudF93aXphcmRf c2NoZW1hJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsn dG9vbHMnXSwgY2FsbGJhY2s6ICdzdGFydF9ncmFudF93aXphcmQnLAorICAg ICAgICAgIHByaW9yaXR5OiAxMCwgbGFiZWw6ICd7e18oIkdyYW50IFdpemFy ZC4uLiIpIH19JywKKyAgICAgICAgICBpY29uOiAnd2NUYWJJY29uJywgZW5h YmxlOiBtZW51X2VuYWJsZWQKKyAgICAgICAgfV07CisKKyAgICAgICAgLy8g QWRkIHN1cHBvcnRlZCBtZW51cyBpbnRvIHRoZSBtZW51cyBsaXN0CisgICAg ICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IHN1cHBvcnRlZF9ub2Rlcy5s ZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgbWVudXMucHVzaCh7CisgICAg ICAgICAgICBuYW1lOiAnZ3JhbnRfd2l6YXJkX3NjaGVtYV9jb250ZXh0Xycg KyBzdXBwb3J0ZWRfbm9kZXNbaWR4XSwKKyAgICAgICAgICAgIG5vZGU6IHN1 cHBvcnRlZF9ub2Rlc1tpZHhdLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAg ICBhcHBsaWVzOiBbJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzdGFydF9ncmFu dF93aXphcmQnLAorICAgICAgICAgICAgcHJpb3JpdHk6IDEwLCBsYWJlbDog J3t7XygiR3JhbnQgV2l6YXJkLi4uIikgfX0nLAorICAgICAgICAgICAgaWNv bjogJ3djVGFiSWNvbicsIGVuYWJsZTogbWVudV9lbmFibGVkCisgICAgICAg ICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBwZ0FkbWluLkJyb3dzZXIu YWRkX21lbnVzKG1lbnVzKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAg ICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIHRvIGRyYXcgV2l6YXJkIERp YWxvZworICAgICAgc3RhcnRfZ3JhbnRfd2l6YXJkOiBmdW5jdGlvbihhY3Rp b24sIGl0ZW0pIHsKKworICAgICAgICAvLyBEZWNsYXJlIFdpemFyZCBkaWFs b2cKKyAgICAgICAgaWYgKCFhbGVydGlmeS53aXphcmREaWFsb2cpIHsKKyAg ICAgICAgICBhbGVydGlmeS5kaWFsb2coJ3dpemFyZERpYWxvZycsIGZ1bmN0 aW9uIGZhY3RvcnkoKSB7CisKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIHdp emFyZCBtYWluIGNvbnRhaW5lcgorICAgICAgICAgICAgdmFyICRjb250YWlu ZXIgPSAkKCI8ZGl2IGNsYXNzPSd3aXphcmRfZGxnJz48L2Rpdj4iKTsKKwor ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgbWFpbjogZnVu Y3Rpb24odGl0bGUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgndGl0 bGUnLCB0aXRsZSk7CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg IHNldHVwOmZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB7 CisKKyAgICAgICAgICAgICAgICAgIC8vIFNldCBvcHRpb25zIGZvciBkaWFs b2cKKyAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKKyAgICAgICAgICAg ICAgICAgICAgZnJhbWVsZXNzOiB0cnVlLAorICAgICAgICAgICAgICAgICAg ICByZXNpemFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGF1dG9S ZXNldDogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIG1heGltaXphYmxl OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgY2xvc2FibGVCeURpbW1l cjogZmFsc2UKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9OworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICBob29rczp7 CisgICAgICAgICAgICAgICAgb25zaG93OiBmdW5jdGlvbigpIHsKKworICAg ICAgICAgICAgICAgICAgLy8gU2V0IGRpbWVuc2lvbnMgZm9yIHdpemFyZAor ICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5kaWFsb2cuc3R5bGUu d2lkdGggPSAnMTAwJSc7CisgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1l bnRzLmRpYWxvZy5zdHlsZS5oZWlnaHQgPSAnNjglJzsKKworICAgICAgICAg ICAgICAgICAgLy8gQWRkIHBnYWRtaW5fZ3JhbnRfd2l6YXJkX2JvZHkgY2xh c3MgdG8gZGlhbG9nCisgICAgICAgICAgICAgICAgICAkKHRoaXMuZWxlbWVu dHMuYm9keSkuYWRkQ2xhc3MoJ3BnYWRtaW5fZ3JhbnRfd2l6YXJkX2JvZHkn KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICB9LAorCisg ICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIFJldHVybnMgYSBQ YWdpbmF0b3IgQ2xhc3MgT2JqZWN0IHdoaWNoIGlzIGFnYWluIHRvIGJlIHJl bmRlcmVkCisKKyAgICAgICAgICAgICAgICBAY2xhc3Mge0JhY2tncmlkLkV4 dGVuc2lvbi5QYWdpbmF0b3J9CisgICAgICAgICAgICAgICAgQHBhcmFtIHtC YWNrYm9uZS5Db2xsZWN0aW9ufSBjb2xsIC0gZnJvbSB3aGljaCBkYXRhIGlz IGZldGNoZWQKKyAgICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHBh Z2luYXRvcgorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICBEYlBh Z2luYXRvcjogZnVuY3Rpb24oY29sbCl7CisgICAgICAgICAgICAgICAgdmFy IHBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yID0gbmV3IEJhY2tncmlkLkV4 dGVuc2lvbi5QYWdpbmF0b3IoeworICAgICAgICAgICAgICAgICAgY29sbGVj dGlvbjogY29sbCwKKyAgICAgICAgICAgICAgICAgIHdpbmRvd1NpemU6IDgK KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g cGFnaW5hdG9yOworICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg IC8qKgorICAgICAgICAgICAgICAgIENyZWF0ZSBuZXcgRmlsdGVyIHdoaWNo IHdpbGwgZmlsdGVyIHRoZQorICAgICAgICAgICAgICAgIHJlbmRlcmVkIGdy aWQgZm9yIFNlbGVjdCBUeXBlIFRhYnVsYXIgRGF0YQorICAgICAgICAgICAg ICAgIEBwYXJhbSB7QmFja2JvbmUuUGFnZWFibGVDb2xsZWN0aW9ufSBjb2xs CisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIERiT2JqZWN0Rmls dGVyOiBmdW5jdGlvbihjb2xsKXsKKyAgICAgICAgICAgICAgICB2YXIgY2xp ZW50U2lkZUZpbHRlciA9IHRoaXMuY2xpZW50U2lkZUZpbHRlciA9IG5ldyBC YWNrZ3JpZC5FeHRlbnNpb24uQ2xpZW50U2lkZUZpbHRlcih7CisgICAgICAg ICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsLAorICAgICAgICAgICAgICAg ICAgcGxhY2Vob2xkZXI6IF8oJ1NlYXJjaCBieSBvYmplY3QgdHlwZSBvciBu YW1lJyksCisKKyAgICAgICAgICAgICAgICAgIC8vIFRoZSBtb2RlbCBmaWVs ZHMgdG8gc2VhcmNoIGZvciBtYXRjaGVzCisgICAgICAgICAgICAgICAgICBm aWVsZHM6IFsnb2JqZWN0X3R5cGUnLCAnbmFtZSddLAorCisgICAgICAgICAg ICAgICAgICAvLyBIb3cgbG9uZyB0byB3YWl0IGFmdGVyIHR5cGluZyBoYXMg c3RvcHBlZCBiZWZvcmUgc2VhcmNoaW5nIGNhbiBzdGFydAorICAgICAgICAg ICAgICAgICAgd2FpdDogMTUwCisgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgICAgcmV0dXJuIGNsaWVudFNpZGVGaWx0ZXI7CisgICAgICAg ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLy9FbmFibGUgRGlzYWJsZSBO ZXh0IGJ1dHRvbiBvZiBQcml2aWxlZ2VQYWdlCisgICAgICAgICAgICAgIHVw ZGF0ZUJ1dHRvbnM6IGZ1bmN0aW9uKG1vZGlmaWVkKXsKKyAgICAgICAgICAg ICAgICBpZighbW9kaWZpZWQpCisgICAgICAgICAgICAgICAgICAkKCcud2l6 YXJkLW5leHQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICQoJy53aXphcmQtbmV4 dCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAgICAgICB9 LAorCisgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIENhbGxi YWNrIGNhbGxlZCB3aGVuIGFuIGVycm9yTW9kZWwgaXMgc2V0CisgICAgICAg ICAgICAgICAgd2l0aCBpbnZhbGlkIHZhbHVlIGFuZCBlcnJvcm1zZyBpcyBz ZXQgaW50bworICAgICAgICAgICAgICAgIHN0YXR1cyBiYXIgZWxlbWVudCBh bmQgbmV4dCBidXR0b24gaXMgZGlzYWJsZWQKKyAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgb25TZXNzaW9uSW52YWxpZDogZnVuY3Rpb24obXNn KSB7CisgICAgICAgICAgICAgICAgJCgnLmVycm9yX21zZ19kaXYgcCcpLmh0 bWwobXNnKS5yZW1vdmVDbGFzcygiaGlkZSIpOworCisgICAgICAgICAgICAg ICAgLy8gRW5hYmxlIGRpc2FibGUgTmV4dCBidXR0b24KKyAgICAgICAgICAg ICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoZmFsc2UpOworICAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9LAorCisgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgIENhbGxiYWNrIGNhbGxlZCB3 aGVuIGFueXRoaW5nIGlzIHNldCBpbnRvIG1vZGVsCisgICAgICAgICAgICAg ICAgdGh1cyBoaWRlIGVycm9yIG1zZyBlbGVtZW50IGFuZCBlbmFibGUgbmV4 dCBidXR0b24KKyAgICAgICAgICAgICAgICBzdGF0dXMgYmFyIGVsZW1lbnQg YW5kIG5leHQgYnV0dG9uIGlzIGRpc2FibGVkCisgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgIG9uU2Vzc2lvblZhbGlkYXRlZDogZnVuY3Rpb24o c2Vzc0hhc0NoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAkKCcuZXJyb3Jf bXNnX2RpdiBwJykuZW1wdHkoKS5hZGRDbGFzcygiaGlkZSIpOworCisgICAg ICAgICAgICAgICAgLy8gRW5hYmxlIGRpc2FibGUgTmV4dCBidXR0b24KKyAg ICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoc2Vzc0hhc0NoYW5n ZWQpOworICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgIC8qKgor ICAgICAgICAgICAgICAgIFJlbW92ZS9EZWxldGUgb2JqZWN0cywgYXR0cmli dXRlcworICAgICAgICAgICAgICAgIGluIHdpemFyZCBvbiB3aXphcmQgY2xv c2Ugb3IgZmluaXNoCisgICAgICAgICAgICAgICAgdG8gcmVjbGFpbSBtZW1v cnkKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgcmVsZWFzZU9i amVjdHM6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIHNlbGYg PSB0aGlzOworCisgICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQo c2VsZi5kYk9iamVjdEZpbHRlcikpIHsKKyAgICAgICAgICAgICAgICAgIHNl bGYuZGJPYmplY3RGaWx0ZXIucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAg ICBzZWxmLmRiT2JqZWN0RmlsdGVyID0gdW5kZWZpbmVkOworICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVk KHNlbGYuY2xpZW50U2lkZUZpbHRlcikpIHsKKyAgICAgICAgICAgICAgICAg IHNlbGYuY2xpZW50U2lkZUZpbHRlci5yZW1vdmUoKTsKKyAgICAgICAgICAg ICAgICAgIHNlbGYuY2xpZW50U2lkZUZpbHRlciA9IHVuZGVmaW5lZDsKKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBjbGVhciBv YmplY3QgcHJpdiBhcnJheQorICAgICAgICAgICAgICAgIGlmKCFfLmlzTnVs bChzZWxmLm9ial9wcml2KSAmJgorICAgICAgICAgICAgICAgICAgIV8uaXNV bmRlZmluZWQoc2VsZi5vYmpfcHJpdikpIHsKKyAgICAgICAgICAgICAgICAg IHNlbGYub2JqX3ByaXYgPSBbXTsKKyAgICAgICAgICAgICAgICAgIGRlbGV0 ZSBzZWxmLm9ial9wcml2OworICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgIC8vIERlbGV0ZSBXaXphcmQgUGFnZXMsIGNsZWFyIG1vZGVs IGFuZCBjbGVhbnVwIHZpZXcKKyAgICAgICAgICAgICAgICBpZighXy5pc1Vu ZGVmaW5lZChzZWxmLmRiT2JqZWN0VHlwZVBhZ2UpICYmCisgICAgICAgICAg ICAgICAgICAhXy5pc051bGwoc2VsZi5kYk9iamVjdFR5cGVQYWdlKSkgewor ICAgICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5kYk9i amVjdFR5cGVQYWdlLmdldCgnbW9kZWwnKSkgJiYKKyAgICAgICAgICAgICAg ICAgICAgIV8uaXNOdWxsKHNlbGYuZGJPYmplY3RUeXBlUGFnZS5nZXQoJ21v ZGVsJykpKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGJPYmplY3RU eXBlUGFnZS5nZXQoJ21vZGVsJykuY2xlYXIoKTsKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5kYk9iamVjdFR5cGVQYWdlLmdldCgndmlldycpLmNsZWFu dXAoKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYk9iamVjdFR5cGVQ YWdlID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZp bmVkKHNlbGYucHJpdmlsZWdlUGFnZSkgJiYKKyAgICAgICAgICAgICAgICAg ICFfLmlzTnVsbChzZWxmLnByaXZpbGVnZVBhZ2UpKSB7CisgICAgICAgICAg ICAgICAgICBpZighXy5pc1VuZGVmaW5lZChzZWxmLnByaXZpbGVnZVBhZ2Uu Z2V0KCdtb2RlbCcpKSAmJgorICAgICAgICAgICAgICAgICAgICAhXy5pc051 bGwoc2VsZi5wcml2aWxlZ2VQYWdlLmdldCgnbW9kZWwnKSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgc2VsZi5wcml2aWxlZ2VQYWdlLmdldCgnbW9kZWwn KS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBzZWxmLnByaXZpbGVn ZVBhZ2UuZ2V0KCd2aWV3JykuY2xlYW51cCgpOworICAgICAgICAgICAgICAg ICAgICBzZWxmLnByaXZpbGVnZVBhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5yZXZpZXdTUUxQYWdlKSAm JgorICAgICAgICAgICAgICAgICAgIV8uaXNOdWxsKHNlbGYucmV2aWV3U1FM UGFnZSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVk KHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVsJykpICYmCisgICAgICAg ICAgICAgICAgICAgICFfLmlzTnVsbChzZWxmLnJldmlld1NRTFBhZ2UuZ2V0 KCdtb2RlbCcpKSkgeworICAgICAgICAgICAgICAgICAgICBzZWxmLnJldmll d1NRTFBhZ2UuZ2V0KCdtb2RlbCcpLmNsZWFyKCk7CisgICAgICAgICAgICAg ICAgICAgIHNlbGYucmV2aWV3U1FMUGFnZSA9IHVuZGVmaW5lZDsKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICAvLyBSZW1vdmUgU3FsIGNvbnRyb2wKKyAgICAgICAgICAgICAg ICBpZiAoIV8uaXNVbmRlZmluZWQoc2VsZi5zcWxDb250cm9sKSkgeworICAg ICAgICAgICAgICAgICAgc2VsZi5zcWxDb250cm9sLnJlbW92ZSgpOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsZWFyIHBy aXZNb2RlbAorICAgICAgICAgICAgICAgIGlmKCFfLmlzTnVsbChzZWxmLnBy aXZNb2RlbCkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVk KHNlbGYucHJpdk1vZGVsKSkgeworICAgICAgICAgICAgICAgICAgc2VsZi5w cml2TW9kZWwuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICAvLyBSZW1vdmUgY29sbGVjdGlvbiBjb250YWluaW5nIGRi IG9iamVjdCBkYXRhCisgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNl bGYuY29sbCkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVk KHNlbGYuY29sbCkpIHsKKyAgICAgICAgICAgICAgICAgIHNlbGYuY29sbC5y ZXNldCgpOworICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsID0gdW5kZWZp bmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBE ZWxldGUgV2l6YXJkCisgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNl bGYud2l6YXJkKSAmJgorICAgICAgICAgICAgICAgICAgIV8uaXNVbmRlZmlu ZWQoc2VsZi53aXphcmQpKSB7CisgICAgICAgICAgICAgICAgICBzZWxmLndp emFyZC5jb2xsZWN0aW9uLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICBz ZWxmLndpemFyZC5jdXJyX3BhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgRXZlcnkgdGltZSBhIHdpemFyZCBpcyBv cGVuZWQsIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBpcyBjYWxs ZWQgZXZlcnl0aW1lLiBJdCBoYXMgV2l6YXJkIFBhZ2VzIHdoaWNoCisgICAg ICAgICAgICAgICAgYXJlIHJlbmRlcmVkIGJ5IHRoZSBXaXphcmQgQ2xhc3M6 CisKKyAgICAgICAgICAgICAgICBAY2xhc3Mge3BnQnJvd3Nlci5XaXphcmRQ YWdlfSBkYk9iamVjdFR5cGUxIC0gVGhpcyBwYWdlCisgICAgICAgICAgICAg ICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVsfQorICAgICAgICAgICAgICAg IHJlbmRlcnMgYSBncmlkIG9mIERhdGFiYXNlIE9iamVjdCBUeXBlcyBzdWNo IGFzCisgICAgICAgICAgICAgICAgICBTY2hlbWFzLCBWaWV3cyBhbmQgU2Vx dWVuY2VzIGV0Yy4KKworICAgICAgICAgICAgICAgIEBjbGFzcyB7cGdCcm93 c2VyLldpemFyZFBhZ2V9IFdpemFyZFBhZ2UyIC0gVGhpcyBwYWdlCisgICAg ICAgICAgICAgICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVsfQorICAgICAg ICAgICAgICAgIGFkZHMgUHJpdmlsZWdlIENvbnRyb2wgd2hpY2ggcHJvdmlk ZXMgZ3JhbnQgcHJpdmlsZWdlcworICAgICAgICAgICAgICAgIHN1Y2ggYXMg IkNyZWF0ZSwgSW5zZXJ0LCBEZWxldGUsIFVwZGF0ZSIgc28gb24gdGhlCisg ICAgICAgICAgICAgICAgZGF0YWJhc2Ugb2JqZWN0cyBzZWxlY3RlZCBvbiBX aXphcmQgUGFnZXMuCisKKyAgICAgICAgICAgICAgICBAY2xhc3Mge3BnQnJv d3Nlci5XaXphcmRQYWdlfSBXaXphcmRQYWdlMyAtIFRoaXMgcGFnZQorICAg ICAgICAgICAgICAgIGRpc3BsYXlzIHRoZSBnZW5lcmF0ZWQgR1JBTlQgU1FM IHF1ZXJ5IGZvciB0aGUgRGIKKyAgICAgICAgICAgICAgICBvYmplY3RzIHNl bGVjdGVkIHdpdGggdGhlIHNwZWNpZmljIHByaXZpbGVnZXMgYWRkZWQgdG8g aXQuCisgICAgICAgICAgICAgICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVs fQorCisgICAgICAgICAgICAgICAgQGNsYXNzIHtCYWNrYm9uZS5Db2xsZWN0 aW9ufSBXaXphcmRDb2xsZWN0aW9uIC0gSXQgaXMgdGhlCisgICAgICAgICAg ICAgICAgY29sbGVjdGlvbiBvZiB3aXphcmQgcGFnZXMKKworICAgICAgICAg ICAgICAgIEBjbGFzcyB7cGdCcm93c2VyLldpemFyZH0gd2l6YXJkIC0gSXRz IHRhc2sgaXM6CisgICAgICAgICAgICAgICAgLSBDcmVhdGUgYSBXaXphcmQK KyAgICAgICAgICAgICAgICAtIEFkZCBCdXR0b25zLCBDYWxsYmFja3MgdG8g aXQuCisgICAgICAgICAgICAgICAgLSBSZW5kZXIgV2l6YXJkUGFnZXMKKyAg ICAgICAgICAgICAgICBAZXh0ZW5kcyB7QmFja2JvbmUuVmlld30KKworICAg ICAgICAgICAgICAqLworICAgICAgICAgICAgICBidWlsZDogZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFw cGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKKyAgICAgICAgICAgICAg fSwKKworICAgICAgICAgICAgICAvL1JldHVybnMgbGlzdCBvZiBBY2xzIGRl ZmluZWQgZm9yIG5vZGVzCisgICAgICAgICAgICAgIGdldF9qc29uX2RhdGE6 IGZ1bmN0aW9uKGdpZCwgc2lkLCBkaWQpIHsKKyAgICAgICAgICAgICAgICB2 YXIgdXJsID0gInt7IHVybF9mb3IoJ2dyYW50X3dpemFyZC5pbmRleCcpIH19 IiArICJhY2wvIiArCisgICAgICAgICAgICAgICAgICAgIFMoJyVzLyVzLyVz LycpLnNwcmludGYoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVV UkkoZ2lkKSwgZW5jb2RlVVJJKHNpZCksIGVuY29kZVVSSShkaWQpKS52YWx1 ZSgpOworICAgICAgICAgICAgICAgIC8vIHZhciB1cmwgPSAiL2dyYW50X3dp emFyZC9hY2wuanNvbiI7CisgICAgICAgICAgICAgICAgcmV0dXJuICQuYWph eCh7CisgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAg ICAgICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgICAgICAgICAgIGRhdGFU eXBlOiAnanNvbnAnCisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgICAgcHJlcGFyZTpmdW5jdGlvbigpIHsK KworICAgICAgICAgICAgICAgICRjb250YWluZXIuZW1wdHkoKS5hcHBlbmQo IjxkaXYgY2xhc3M9J2dyYW50X3dpemFyZF9jb250YWluZXInPjwvZGl2PiIp OworCisgICAgICAgICAgICAgICAgLy8gRGVmaW5lIGVsIGZvciB3aXphcmQg dmlldworICAgICAgICAgICAgICAgIHZhciBlbCA9ICQoJy5ncmFudF93aXph cmRfY29udGFpbmVyJyk7CisKKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0 IHRoZSBkYXRhIGZyb20gdGhlIHNlbGVjdGVkIHRyZWUgbm9kZQorICAgICAg ICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCisgICAgICAgICAg ICAgICAgICAgIGkgPSB0LnNlbGVjdGVkKCksCisgICAgICAgICAgICAgICAg ICAgIGQgPSB0aGlzLmQgPSBpICYmIGkubGVuZ3RoID09IDEgPyB0Lml0ZW1E YXRhKGkpIDogdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgICAgICBpbmZv ID0gdGhpcy5pbmZvID0gcGdCcm93c2VyLk5vZGUuZ2V0VHJlZU5vZGVIaWVy YXJjaHkoaSksCisgICAgICAgICAgICAgICAgICAgIGljb24gPSBkLmljb247 CisKKyAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgIEdl bmVyYXRlIGEgVVJMIHVzaW5nOgorICAgICAgICAgICAgICAgICAgZ2lkLCBk aWQsIHNpZChzZXJ2ZXIgaWQpLCBub2RlX2lkKG5vZGUgaWQpLAorICAgICAg ICAgICAgICAgICAgbm9kZV8obm9kZSBuYW1lKSwgbm9kZV90eXBlKG5vZGUg dHlwZSkKKyAgICAgICAgICAgICAgICAgIGFuZCBwYXNzIGl0IHRvIGNvbGxl Y3Rpb24gd2hpY2ggd2lsbCBmZXRjaCBPYmplY3QgVHlwZSBwcm9wZXJ0aWVz LgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdmFyIGdp ZCA9IGluZm9bJ3NlcnZlci1ncm91cCddLl9pZCwKKyAgICAgICAgICAgICAg ICAgICAgc2lkID0gaW5mby5zZXJ2ZXIuX2lkLAorICAgICAgICAgICAgICAg ICAgICBkaWQgPSBpbmZvLmRhdGFiYXNlLl9pZCwKKyAgICAgICAgICAgICAg ICAgICAgbm9kZV9pZCA9IGQuX2lkLAorICAgICAgICAgICAgICAgICAgICBu c3BuYW1lID0gaW5mby5zY2hlbWEubGFiZWwsCisKKyAgICAgICAgICAgICAg ICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgICAgZ2V0IG5vZGUgbmFt ZSBvbmx5LiB1c2VkIGluIG1hcHBpbmcgd2l0aCBvYmplY3QgdHlwZXMgZGVm aW5lZAorICAgICAgICAgICAgICAgICAgICAgIGluIGFsbG93ZWRfYWNsLmpz b24KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAg ICAgIG5vZGVfdHlwZSA9IGQuX3R5cGUucmVwbGFjZSgnY29sbC0nLCAnJyku cmVwbGFjZSgnbWF0ZXJpYWxpemVkXycsICcnKSwKKyAgICAgICAgICAgICAg ICAgICAgbm9kZV9sYWJlbCA9IGQubGFiZWw7CisKKyAgICAgICAgICAgICAg ICAvLyBGZXRjaCBwcml2aWxlZ2VzIHNwZWNpZmljIHRvIG5vZGVzCisgICAg ICAgICAgICAgICAgdmFyIGpzb25fZGF0YSA9IHRoaXMuZ2V0X2pzb25fZGF0 YShnaWQsIHNpZCwgZGlkKTsKKyAgICAgICAgICAgICAgICB2YXIgcHJpdkRp Y3QgPSBKU09OLnBhcnNlKGpzb25fZGF0YS5yZXNwb25zZVRleHQpOworCisg ICAgICAgICAgICAgICAgLy8gQ29sbGVjdGlvbiB1cmwgdG8gZmV0Y2ggZGF0 YWJhc2Ugb2JqZWN0IHR5cGVzIGZvciBvYmplY3RzIGZpZWxkCisgICAgICAg ICAgICAgICAgdmFyIGJhc2VVcmwgPSAie3sgdXJsX2ZvcignZ3JhbnRfd2l6 YXJkLmluZGV4JykgfX0iICsgInByb3BlcnRpZXMvIiArCisgICAgICAgICAg ICAgICAgICAgIFMoJyVzLyVzLyVzLyVzLyVzLycpLnNwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICBlbmNvZGVVUkkoZ2lkKSwgZW5jb2RlVVJJ KHNpZCksIGVuY29kZVVSSShkaWQpLAorICAgICAgICAgICAgICAgICAgICAg ICAgZW5jb2RlVVJJKG5vZGVfaWQpLCBlbmNvZGVVUkkobm9kZV90eXBlKSku dmFsdWUoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNb2RlbCdzIHNh dmUgdXJsCisgICAgICAgICAgICAgICAgICAgIHNhdmVVcmwgPSAie3sgdXJs X2ZvcignZ3JhbnRfd2l6YXJkLmluZGV4JykgfX0iICsgInNhdmUvIiArCisg ICAgICAgICAgICAgICAgICAgICAgICBTKCclcy8lcy8lcy8nKS5zcHJpbnRm KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSShnaWQp LCBlbmNvZGVVUkkoc2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbmNvZGVVUkkoZGlkKSkudmFsdWUoKSwKKworICAgICAgICAgICAgICAg ICAgICAvLyBnZW5lcmF0ZSBlbmNvZGVkIHVybCBiYXNlZCBvbiB3aXphcmQg dHlwZQorICAgICAgICAgICAgICAgICAgICBtc3FsX3VybCA9IHRoaXMubXNx bF91cmwgPSAiL2dyYW50X3dpemFyZC9tc3FsLyIrCisgICAgICAgICAgICAg ICAgICAgICAgUygnJXMvJXMvJXMvJykuc3ByaW50ZigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZW5jb2RlVVJJKGdpZCksIGVuY29kZVVSSShzaWQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVVUkkoZGlkKSku dmFsdWUoKSwKKworICAgICAgICAgICAgICAgICAgICBDb2xsID0gQmFja2Jv bmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAgICAgICAgICAgICAg IG1vZGVsOiBEYXRhYmFzZU9iamVjdE1vZGVsLmV4dGVuZCh7CisgICAgICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0czogXy5leHRlbmQoe30sIERhdGFi YXNlT2JqZWN0TW9kZWwucHJvdG90eXBlLmRlZmF1bHRzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAge25zcG5hbWU6IG5zcG5hbWV9CisgICAg ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAg fSksCisgICAgICAgICAgICAgICAgICAgICAgdXJsOiBiYXNlVXJsCisgICAg ICAgICAgICAgICAgICAgIH0pLAorCisgICAgICAgICAgICAgICAgICAgIC8v IENyZWF0ZSBpbnN0YW5jZXMgb2YgY29sbGVjdGlvbiBhbmQgZmlsdGVyCisg ICAgICAgICAgICAgICAgICAgIGNvbGwgPSB0aGlzLmNvbGwgPSBuZXcgQ29s bCgpLAorICAgICAgICAgICAgICAgICAgICBkYk9iamVjdEZpbHRlciA9IHRo aXMuZGJPYmplY3RGaWx0ZXIgPSB0aGlzLkRiT2JqZWN0RmlsdGVyKGNvbGwp OworCisgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBw cml2QXJyYXkgaG9sZHMgb2JqZWN0cyBzZWxlY3RlZCB3aGljaCBmdXJ0aGVy IGhlbHBzCisgICAgICAgICAgICAgICAgICBpbiBjcmVhdGluZyBwcml2aWxl Z2VzIE1vZGVsCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgICAgICAgc2VsZi5wcml2 QXJyYXkgPSBbXTsKKworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAg ICAgICAgICAgT3ZlcnJpZGUgYmFja2dyaWQgbGlzdGVuZXIgImJhY2tncmlk OnNlbGVjdGVkIiB0bworICAgICAgICAgICAgICAgICAgQWRkL1JlbW92ZSBt b2RlbCB0by9mcm9tIG9iamVjdHMgY29sbGVjdGlvbgorICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgY29sbC5vbignYmFja2dyaWQ6c2Vs ZWN0ZWQnLCBmdW5jdGlvbihtb2RlbCwgc2VsZWN0ZWQpIHsKKyAgICAgICAg ICAgICAgICAgIG1vZGVsLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7CisK KyAgICAgICAgICAgICAgICAgIHZhciBvYmplY3RfdHlwZSA9IG1vZGVsLmdl dCgnb2JqZWN0X3R5cGUnKTsKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAo b2JqZWN0X3R5cGUpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIGNhc2UgJ0Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICAg ICAgICBvYmplY3RfdHlwZSA9ICdmdW5jdGlvbic7CisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1Ry aWdnZXIgRnVuY3Rpb24nOgorICAgICAgICAgICAgICAgICAgICAgIG9iamVj dF90eXBlID0gJ2Z1bmN0aW9uJzsKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnVGFibGUnOgorICAg ICAgICAgICAgICAgICAgICAgIG9iamVjdF90eXBlID0gJ3RhYmxlJzsKKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgY2FzZSAnU2VxdWVuY2UnOgorICAgICAgICAgICAgICAgICAgICAgIG9i amVjdF90eXBlID0gJ3NlcXVlbmNlJzsKKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnVmlldyc6Cisg ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3R5cGUgPSAndGFibGUnOwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAg ICAgICAgaWYgYSByb3cgKGNoZWNrYm94KSBpcyBjaGVja2VkLCBhZGQgdGhh dCBtb2RlbAorICAgICAgICAgICAgICAgICAgICBpbnRvIGNvbGxlY3Rpb24s IHdoZW4gdW5jaGVja2VkIHJlbW92ZSBpdCBmcm9tCisgICAgICAgICAgICAg ICAgICAgIG1vZGVsLgorCisgICAgICAgICAgICAgICAgICAgIEFsc28gcHVz aC9wb3Agb2JqZWN0IHR5cGUgaW4vZnJvbSBwcml2QXJyYXkKKyAgICAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBpZihzZWxlY3RlZCkg eworICAgICAgICAgICAgICAgICAgICBpZihfLmluZGV4T2Yoc2VsZi5wcml2 QXJyYXksIG9iamVjdF90eXBlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAg ICAgICBzZWxmLnByaXZBcnJheS5wdXNoKG9iamVjdF90eXBlKTsKKyAgICAg ICAgICAgICAgICAgICAgbmV3TW9kZWwuZ2V0KCdvYmplY3RzJykuYWRkKG1v ZGVsLCB7IHNpbGVudDogdHJ1ZSB9KTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg ICB2YXIgaWR4ID0gc2VsZi5wcml2QXJyYXkuaW5kZXhPZihvYmplY3RfdHlw ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmKGlkeCAhPS0xKQorICAgICAg ICAgICAgICAgICAgICAgIHNlbGYucHJpdkFycmF5LnNwbGljZShpZHgsIDEp OworICAgICAgICAgICAgICAgICAgICBuZXdNb2RlbC5nZXQoJ29iamVjdHMn KS5yZW1vdmUobW9kZWwpOworICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBtb2RlbCBvbiBjaGVja2JveCBj aGVjay91bmNoZWNrCisgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gIG1v ZGVsLnZhbGlkYXRlLmNhbGwobmV3TW9kZWwpOworCisgICAgICAgICAgICAg ICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgSWYgbm8gb2JqZWN0IHR5 cGUgaXMgc2VsZWN0ZWQsIHNldCBlcnJvciBtc2cKKyAgICAgICAgICAgICAg ICAgICAgYW5kIGRpc2FibGUgbmV4dCBidXR0b24sIGVsc2UgZW5hYmxlIG5l eHQgYnV0dG9uCisgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAg ICAgICAgaWYobXNnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9uU2Vz c2lvbkludmFsaWQuY2FsbChzZWxmLCBtc2cpOworICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9uU2Vzc2lvblZh bGlkYXRlZC5jYWxsKHNlbGYsIHRydWUpOworICAgICAgICAgICAgICAgIH0p OworCisgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBJ dCBpcyB0aGUgbWFpbiBtb2RlbCB3aXRoIHNjaGVtYSBkZWZpbmVkCisgICAg ICAgICAgICAgICAgICBFdmVyeSB0aW1lIGEgbmV3IHdpemFyZCBpcyBvcGVu ZWQsCisgICAgICAgICAgICAgICAgICBhIG5ldyBtb2RlbCBzaG91bGQgY3Jl YXRlLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdmFy IEdyYW50V2l6YXJkTW9kZWwgPSBwZ05vZGUuTW9kZWwuZXh0ZW5kKHsKKyAg ICAgICAgICAgICAgICAgIGRlZmF1bHRzOiB7CisgICAgICAgICAgICAgICAg ICAgIG9iamVjdHM6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAg YWNsOiB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICBzY2hlbWE6IFsKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgIGlkOiAnb2JqZWN0cycsIGxhYmVsOiAn e3sgXygiT2JqZWN0cyIpIH19JywgbW9kZWw6IERhdGFiYXNlT2JqZWN0TW9k ZWwsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24n LCBncm91cDogJ09iamVjdHMnCisgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBp ZDogJ2FjbCcsIGxhYmVsOiAne3sgXygiUHJpdmlsZWdlcyIpIH19JywKKyAg ICAgICAgICAgICAgICAgICAgICBtb2RlbDogcGdBZG1pbi5Ccm93c2VyLk5v ZGUuUHJpdmlsZWdlUm9sZU1vZGVsLAorICAgICAgICAgICAgICAgICAgICAg IHR5cGU6ICdjb2xsZWN0aW9uJywgY2FuQWRkOiB0cnVlLAorICAgICAgICAg ICAgICAgICAgICAgIGNhbkRlbGV0ZTogdHJ1ZSwgY29udHJvbDogJ3VuaXF1 ZS1jb2wtY29sbGVjdGlvbicKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgIHVybFJvb3Q6 IHNhdmVVcmwKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg ICAgIC8qKgorICAgICAgICAgICAgICAgICAgQ3JlYXRlIGluc3RhbmNlIG9m IEdyYW50V2l6YXJkIE1vZGVsLCBwcm92aWRlIHVybFJvb3QKKyAgICAgICAg ICAgICAgICAgIG5vZGVfaW5mbyBvYmplY3QsIEdlbmVyYXRlIGZpZWxkcyBv YmplY3RzCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB2 YXIgbmV3TW9kZWwgPSBuZXcgR3JhbnRXaXphcmRNb2RlbCh7fSwgeyBub2Rl X2luZm86IGluZm8gfSk7CisKKyAgICAgICAgICAgICAgICAvKioKKyAgICAg ICAgICAgICAgICAgIEZldGNoIGRhdGEgZnJvbSBzZXJ2ZXIgYW5kIHNldCBp bnRvIGdyaWQKKyAgICAgICAgICAgICAgICAgIGFuZCBzaG93L2hpZGUgcHJv Z3Jlc3MgYmFyCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICAkKCcud2l6YXJkLXByb2dyZXNzLWJhciBwJykuc2hvdygpOworCisgICAg ICAgICAgICAgICAgY29sbC5mZXRjaCh7CisgICAgICAgICAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihjb2xsZWN0aW9uLCBkYXRhKSB7CisgICAgICAg ICAgICAgICAgICAgICQoJy53aXphcmQtcHJvZ3Jlc3MtYmFyIHAnKS5odG1s KCcnKTsKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg ICByZXNldDogdHJ1ZQorICAgICAgICAgICAgICAgIH0sIHRoaXMpOworCisg ICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAg ICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg ICAgICAgICAgICAvLyAgICAgICAgICAgIFdpemFyZCBQYWdlIGZvciBEYiBP YmplY3QgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgQ3JlYXRlIHdpemFyZCBw YWdlLiBJdCByZW5kZXJzIGEgZ3JpZCBvZgorICAgICAgICAgICAgICAgICAg RGF0YWJhc2UgT2JqZWN0IFR5cGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAg ICAgIFNjaGVtYXMsIFZpZXdzIGFuZCBTZXF1ZW5jZXMgZXRjLgorICAgICAg ICAgICAgICAgICAgU2V0IGRlZmF1bHQgdmFsdWVzCisgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICB2YXIgZGJPYmplY3RUeXBlUGFnZSA9 IHNlbGYuZGJPYmplY3RUeXBlUGFnZSA9IG5ldyBwZ0Jyb3dzZXIuV2l6YXJk UGFnZSh7CisgICAgICAgICAgICAgICAgICBpZDogMSwKKyAgICAgICAgICAg ICAgICAgIHBhZ2VfdGl0bGU6IF8oJ09iamVjdCBTZWxlY3Rpb24gKHN0ZXAg MSBvZiAzKScpLAorICAgICAgICAgICAgICAgICAgZGlzYWJsZV9wcmV2OiB0 cnVlLAorICAgICAgICAgICAgICAgICAgZGlzYWJsZV9uZXh0OiB0cnVlLAor ICAgICAgICAgICAgICAgICAgc2hvd19kZXNjcmlwdGlvbjogXygnUGxlYXNl IHNlbGVjdCBvYmplY3RzIGZyb20gdGhlIGJlbG93IGxpc3QuJyksCisgICAg ICAgICAgICAgICAgICBzaG93X3Byb2dyZXNzX2JhcjogXygnUGxlYXNlIHdh aXQgd2hpbGUgZmV0Y2hpbmcgcmVjb3Jkcy4uLicpLAorICAgICAgICAgICAg ICAgICAgbW9kZWw6IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgdmll dzogbmV3IChmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAv LyBTZXQgcGFnZSBJbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICB2YXIg cGFnZVZpZXcgPSB0aGlzOworCisgICAgICAgICAgICAgICAgICAgIF8uZXh0 ZW5kKHBhZ2VWaWV3LCB7CisKKyAgICAgICAgICAgICAgICAgICAgICAvLyBS ZW1vdmUgZ3JpZCBpZiBpdCBpcyBiZWZvcmUgcmVuZGVyCisgICAgICAgICAg ICAgICAgICAgICAgY2xlYW51cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZW1vdmUoKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZ3JpZDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gbnVsbDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g UmVtb3ZlIGdyaWQgZWxlbWVudCBpZiBleGlzdHMKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh0aGlzLmVsKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICQodGhpcy5lbCkucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg ICAgICAgICAgICAgICAvLyBEZWxldGUgZ3JpZCBiZWZvcmUgcmVuZGVyCisg ICAgICAgICAgICAgICAgICAgICAgZ3JpZDogbnVsbCwKKworICAgICAgICAg ICAgICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGdyaWQgY29udGFpbmVyCisg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZEJvZHkgPQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz0iZGJfb2Jq ZWN0c19jb250YWluZXIiPjwvZGl2PicpOworCisgICAgICAgICAgICAgICAg ICAgICAgICAvLyBSZW1vdmUgZ3JpZCBpZiBleGl0cyBiZWZvcmUgcmVuZGVy CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYW51cCgpOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg ICAgICAvLyBJbml0aWFsaXplIGEgbmV3IEdyaWQgaW5zdGFuY2UKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZCA9IG5ldyBCYWNrZ3JpZC5H cmlkKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogXy5j bG9uZShjb2x1bW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29s bGVjdGlvbjogY29sbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh c3NOYW1lOiAiYmFja2dyaWQgdGFibGUtYm9yZGVyZWQgb2JqZWN0X3R5cGVf dGFibGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg ICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgc2VsZWN0aW9uIFR5cGUg Z3JpZCBhbmQgcGFnaW5hdG9yCisgICAgICAgICAgICAgICAgICAgICAgICBn cmlkQm9keS5hcHBlbmQoIHRoaXMuZ3JpZC5yZW5kZXIoKS4kZWwpOworCisg ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgU2VhcmNoIEZpbHRl cgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEJvZHkucHJlcGVuZCgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRTaWRlRmls dGVyLnJlbmRlcigpLmVsKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg Ly8gQXNzaWduIGdyaWRCb2R5IGNvbnRlbnQgdG8gcGFnZSBlbGVtZW50Cisg ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsID0gZ3JpZEJvZHk7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAg ICAgICAgICAgICBGZXRjaCBzZWxlY3RlZCBtb2RlbHMgZnJvbSBjb2xsZWN0 aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIHJvd3Mg Y2hlY2tlZCBpbiBncmlkCisgICAgICAgICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgbmV3TW9kZWwuZ2V0KCdvYmplY3Rz JykuZWFjaChmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhciBtb2RlbCA9IGNvbGwuZ2V0KG0uZ2V0KCdvYmplY3RfaWQnKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlbCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGwudHJpZ2dlcignYmFja2dy aWQ6c2VsZWN0ZWQnLCBtb2RlbCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisg ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGdyaWQgdG8gcmUg cmVuZGVyIHJvd3MuCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xsLnRy aWdnZXIoJ2JhY2tncmlkOnJlZnJlc2gnKTsKKworICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg IH0pLAorCisgICAgICAgICAgICAgICAgICBiZWZvcmVOZXh0OiBmdW5jdGlv bihvYmopeworICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisgICAgICAgICAgICAgICAgICAgIG9iai5vcHRpb25zLmRpc2FibGVfbmV4 dCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgLyoqCisgICAgICAg ICAgICAgICAgICAgICAgRW5hYmxlL0Rpc2FibGUgbmV4dCBidXR0b24gb2Yg cHJpdmlsZWdlUGFnZSBpZiBvYmplY3RzCisgICAgICAgICAgICAgICAgICAg ICAgYXJlIHByZXNlbnQgaW4gbW9kZWwKKyAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKG5ld01vZGVs LmdldCgnYWNsJykpICYmCisgICAgICAgICAgICAgICAgICAgICAgIV8uaXNV bmRlZmluZWQobmV3TW9kZWwuZ2V0KCdhY2wnKSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICBpZihuZXdNb2RlbC5nZXQoJ2FjbCcpLmxlbmd0aCA+IDAp CisgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29sbGVjdGlvbi5hdCgx KS5zZXQoJ2Rpc2FibGVfbmV4dCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW4gdGhl IHZpZXcKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYudmlldykgewor ICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmlldy5jbGVhbnVwKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYudmlldzsKKyAgICAg ICAgICAgICAgICAgICAgICBzZWxmLnZpZXcgPSBudWxsOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIH0p OworCisgICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8K KyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIFdpemFyZCBQYWdlIGZv ciBQcml2aWxlZ2UgQ29udHJvbCAgICAgICAgICAgICAgICAgICAgIC8vCisg ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAg ICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAg ICAgICAgICAgICAgIC8vIFdpemFyZCBmb3IgUHJpdmVsZWdlIGNvbnRyb2wK KyAgICAgICAgICAgICAgICB2YXIgcHJpdmlsZWdlUGFnZSA9IHNlbGYucHJp dmlsZWdlUGFnZSA9IG5ldyBwZ0Jyb3dzZXIuV2l6YXJkUGFnZSh7CisgICAg ICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAgICAgICAgICAgIHBhZ2Vf dGl0bGU6IF8oJ1ByaXZpbGVnZXMgU2VsZWN0aW9uIChzdGVwIDIgb2YgMykn KSwKKyAgICAgICAgICAgICAgICAgIHNob3dfZGVzY3JpcHRpb246IF8oJ1Bs ZWFzZSBzZWxlY3QgcHJpdmlsZWdlcyBmb3IgdGhlIHNlbGVjdGVkIG9iamVj dHMuJyksCisgICAgICAgICAgICAgICAgICBkaXNhYmxlX25leHQ6IHRydWUs CisgICAgICAgICAgICAgICAgICBtb2RlbDogbmV3TW9kZWwsCisKKyAgICAg ICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHZpZXcgZnVuY3Rpb24gb2JqZWN0 CisgICAgICAgICAgICAgICAgICB2aWV3OiBuZXcgKGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZVZpZXcgPSB0aGlzOworICAg ICAgICAgICAgICAgICAgICAgIF8uZXh0ZW5kKHBhZ2VWaWV3LCB7CisKKyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBQcml2ZWxlZ2UgY29u dHJvbCB0byBnZW5lcmF0ZSBpdHMgaHRtbCBtYXJrdXAKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFyIG9ial9wcml2ID0gW107CisgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYucHJpdkFycmF5ID0gXy51bmlxKHNl bGYucHJpdkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXy5l YWNoKHNlbGYucHJpdkFycmF5LCBmdW5jdGlvbihwcml2KXsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLm9ial9wcml2ID0gb2JqX3ByaXYg PSBfLnVuaW9uKG9ial9wcml2ICwgcHJpdkRpY3RbcHJpdl0uYWNsKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGVmaW5lIFByaXZNb2RlbCBhbmQgaXRzIGluc3RhbmNlLgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFByaXZpbGVnZXMgYXJyYXkgaXMgZ2VuZXJh dGVkIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl IHR5cGUgb2Ygbm9kZXMgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJp dk1vZGVsID0gc2VsZi5wcml2TW9kZWw7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhciBQcml2TW9kZWwgPSBwZ05vZGUuTW9kZWwuZXh0ZW5kKHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNsOiB1bmRlZmluZWQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNjaGVtYTogWworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZDogJ2FjbCcsIGxhYmVsOiAne3sgXygiUHJpdmlsZWdlcyIpIH19JywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHBnQWRtaW4u QnJvd3Nlci5Ob2RlLlByaXZpbGVnZVJvbGVNb2RlbC5leHRlbmQoeworCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpdmlsZWdl cyBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gbm9kZSBjbGlja2VkCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlczogb2JqX3By aXYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHVuaXF1 ZUNvbCA6IFsnZ3JhbnRlZScsICdncmFudG9yJ10sIGVkaXRhYmxlOiB0cnVl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29s bGVjdGlvbicsIGNhbkFkZDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FuRGVsZXRlOiB0cnVlLCBjb250cm9sOiAndW5pcXVl LWNvbC1jb2xsZWN0aW9uJworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBw cml2ZWxlZ2UgY29udHJvbCBpcyByZS1yZW5kZXJlZCwgaW4gb3JkZXIgdG8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIgcHJpdmlsZWdl cyBiYXNlZCBvbiBvYmplY3QgdHlwZSBzZWxlY3RlZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZWxldGUgcHJpdmlsZWdlcyBmcm9tIHByaXZN b2RlbCB3aGljaCBhcmUgbm93IG5vdAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByZXNlbnQgaW4gb2JqZWN0IHByaXZpbGVnZXMgYXJyYXkob2Jq ZWN0X3ByaXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9OworICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAocHJpdk1vZGVsKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHByaXZNb2RlbC50b0pTT04o KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9sZVByaXZz ID0gZGF0YVsnYWNsJ107CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKHZhciBpZHggaW4gcm9sZVByaXZzKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YXIgcm9sZVByaXYgPSAocm9sZVByaXZzW2lk eF0pWydwcml2aWxlZ2VzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVtb3ZlSWR4ID0gW10sIGo7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoaiBpbiByb2xlUHJpdikgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHJvbGVQcml2W2pd OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5pbmRl eE9mKG9ial9wcml2LCBwWydwcml2aWxlZ2VfdHlwZSddKSA9PSAtMSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUlkeC5w dXNoKGopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAoaiBpbiByZW1vdmVJZHgpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZVByaXYuc3BsaWNl KGosIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu c3RhbnRpYXRlIHByaXZNb2RlbAorICAgICAgICAgICAgICAgICAgICAgICAg ICBwcml2TW9kZWwgPSBzZWxmLnByaXZNb2RlbCA9IG5ldyBQcml2TW9kZWwo ZGF0YSwgeyBub2RlX2luZm86IHNlbGYuaW5mbyB9KTsKKworICAgICAgICAg ICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAg ICBUbyB0cmFjayBjaGFuZ2VzIGludG8gbW9kZWwsIHN0YXJ0IG5ldyBzZXNz aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBBZGQgZXZlbnQg bGlzdGVuZXIgZm9yIHByaXZpbGVnZXMgY29udHJvbAorICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLnByaXZNb2RlbC5zdGFydE5ld1Nlc3Npb24oKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZi5wcml2TW9kZWwub24oJ3BnYWRtaW4tc2Vz c2lvbjp2YWxpZCcsIHNlbGYub25TZXNzaW9uVmFsaWRhdGVkLmJpbmQoc2Vs ZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaXZNb2Rl bC5vbigncGdhZG1pbi1zZXNzaW9uOmludmFsaWQnLCBzZWxmLm9uU2Vzc2lv bkludmFsaWQuYmluZChzZWxmKSk7CisKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgRmll bGQgT2JqZWN0IHdoaWNoIGhhcyBwcm9wZXJ0aWVzIGxpa2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbm9kZV9kYXRhLCBub2RlX2luZm8gd2hpY2gg aXMgcmVxdWlyZWQgZm9yIHJlbmRlcmluZworICAgICAgICAgICAgICAgICAg ICAgICAgICBQcml2aWxlZ2UgY29udHJvbAorICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmll bGRzID0gQmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1hKAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmZvLCBzZWxmLnByaXZNb2Rl bCwgJ2NyZWF0ZScsIHNlbGYuZC5fdHlwZSwgc2VsZi5kCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAg ICAgICB2YXIgcHJpdmlsZWdlc0ZpZWxkID0gbmV3IEJhY2tmb3JtLkZpZWxk KGZpZWxkc1swXS5maWVsZHNbMF0pOworCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMucHJpdkNvbnRyb2wgPSBuZXcgKHByaXZpbGVnZXNGaWVs ZC5nZXQoJ2NvbnRyb2wnKSkgKHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmaWVsZDogcHJpdmlsZWdlc0ZpZWxkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1vZGVsOiBzZWxmLnByaXZNb2RlbAorICAgICAgICAg ICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4ge2VsOiB0aGlzLnByaXZDb250cm9sLnJlbmRlcigpLiRl bH07CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAg ICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByaXZpbGVnZSBjb250cm9s CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbnVwOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJpdkNv bnRyb2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBy aXZDb250cm9sLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRlbGV0ZSB0aGlzLnByaXZDb250cm9sOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMucHJpdkNvbnRyb2wgPSBudWxsOworICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg ICAgICB9KSwKKworICAgICAgICAgICAgICAgICAgYmVmb3JlUHJldjogZnVu Y3Rpb24od2l6YXJkT2JqKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g UmVtb3ZlIHRoZSBwcml2aWxlZ2UgY29udHJvbAorICAgICAgICAgICAgICAg ICAgICBpZiAodGhpcy52aWV3KSB7CisgICAgICAgICAgICAgICAgICAgICAg dGhpcy52aWV3LmNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICBk ZWxldGUgdGhpcy52aWV3OworICAgICAgICAgICAgICAgICAgICAgIHRoaXMu dmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgICBFbmFi bGUvRGlzYWJsZSBuZXh0IGJ1dHRvbiBvZiBEYk9iamVjdFR5cGUgcGFnZSBp ZiBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgICAgYXJlIHByZXNlbnQg aW4gbW9kZWwKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAgIHZhciBvYmplY3RzTW9kZWwgPSBuZXdNb2RlbC5nZXQoJ29i amVjdHMnKTsKKworICAgICAgICAgICAgICAgICAgICBpZighXy5pc1VuZGVm aW5lZChvYmplY3RzTW9kZWwpICYmICFfLmlzRW1wdHkob2JqZWN0c01vZGVs KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0c01vZGVsLmxl bmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICB3aXphcmRPYmou Y29sbGVjdGlvbi5hdCgwKS5zZXQoJ2Rpc2FibGVfbmV4dCcsIGZhbHNlKTsK KworICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHNob3cgcHJvZ3Jl c3MgYmFyCisgICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxl Y3Rpb24uYXQoMCkuc2V0KCdzaG93X3Byb2dyZXNzX2JhcicsICcnKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8q KgorICAgICAgICAgICAgICAgICAgICAgIFdlJ3JlIHJlLXJlbmRlcmluZyB0 aGUgY29udHJvbHMgYXMgdGhleSBhcmUgZGVsZXRlZAorICAgICAgICAgICAg ICAgICAgICAgIGJlZm9yZSBoZWFkaW5nIHRvIG5leHQgcGFnZQorICAgICAg ICAgICAgICAgICAgICAgIFJlZnJlc2ggQmFja2dyaWQgdG8gcmUtcmVuZGVy IHRoZSBlbGVtZW50cyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAg IHJlLXJlbmRlciBGaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICAgICAgbmV3TW9kZWwudHJpZ2dlcigiYmFja2dyaWQ6 cmVmcmVzaCIsIG5ld01vZGVsLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgIHNlbGYuY2xpZW50U2lkZUZpbHRlci5yZW5kZXIoKTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICB9 LAorCisgICAgICAgICAgICAgICAgICBiZWZvcmVOZXh0OiBmdW5jdGlvbigp IHsgcmV0dXJuIHRydWU7IH0sCisKKyAgICAgICAgICAgICAgICAgIG9uTmV4 dDogZnVuY3Rpb24ob2JqKXsKKworICAgICAgICAgICAgICAgICAgICAvLyBB c3NpZ24gYWNscyBvZiBwcml2TW9kZWwgdG8gbWFpbiBtb2RlbCBuZXdNb2Rl bAorICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc2Vs Zi5wcml2TW9kZWwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgbmV3TW9k ZWwuc2V0KHsnYWNsJzogc2VsZi5wcml2TW9kZWwuZ2V0KCdhY2wnKX0pOwor ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg Ly8gUmVtb3ZlIHRoZSBwcml2aWxlZ2UgY29udHJvbAorICAgICAgICAgICAg ICAgICAgICBpZiAodGhpcy52aWV3KSB7CisgICAgICAgICAgICAgICAgICAg ICAgdGhpcy52aWV3LmNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICAgICAg ICBkZWxldGUgdGhpcy52aWV3OworICAgICAgICAgICAgICAgICAgICAgIHRo aXMudmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICAvLyBFbmFibGUgZmluaXNoIGJ1dHRvbgorICAg ICAgICAgICAgICAgICAgICBzZWxmLndpemFyZC5vcHRpb25zLmRpc2FibGVf ZmluaXNoID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgLyoqCisg ICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnMgdG8gZ2V0IFNRTCBxdWVy aWVzIGRhdGEgdG8gcmVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgaW50 byB0aGUgcmV2aWV3U1FMUGFnZQorICAgICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgICAgICBuZXdNb2RlbC50cmlnZ2VyKCdwZ2FkbWlu LXdpemFyZDpuZXh0cGFnZTpzcWwnLCB7J25vZGVfdHlwZSc6IG5vZGVfdHlw ZSB9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 KTsKKworCisgICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIFJldmlldyBTUUwg UXVlcnkgUGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwor ICAgICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor ICAgICAgICAgICAgICAgIC8vQ3JlYXRlIFNxbEZpZWxkIE9iamVjdAorICAg ICAgICAgICAgICAgIHZhciBzcWxGaWVsZCA9IG5ldyBCYWNrZm9ybS5GaWVs ZCgKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgIGlkOiAnc3FsdGFiJywKKyAgICAgICAgICAgICAgICAgICAgICBsYWJl bDogXygnU3FsIFRhYicpLAorCisgICAgICAgICAgICAgICAgICAgICAgLyoq CisgICAgICAgICAgICAgICAgICAgICAgICBFeHRlbmQgJ1NxbFRhYkNvbnRy b2wnIHRvIGRlZmluZSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1 bmN0aW9uICdvbldpemFyZE5leHRQYWdlQ2hhbmdlJworICAgICAgICAgICAg ICAgICAgICAgICAgd2hpY2ggZ2V0cyB0cmlnZ2VyZWQgb24gbmV4dCBidXR0 b24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrIHRvIGZldGNoIGdl bmVyYXRlZCBTUUwgcXVlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv ciB0aGUgc2VsZWN0ZWQgZGIgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IEJhY2tm b3JtLlNxbFRhYkNvbnRyb2wuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFyZW50IGNsYXNzCisg ICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2tmb3JtLlNxbFRhYkNvbnRy b2wucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRz KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zcWxfdXJs ID0gc2VsZi5tc3FsX3VybDsKKworICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBkZWZpbmUgdHJpZ2dlciBldmVudHMgZm9yIHByZXYgYW5kIG5leHQg cGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLm9u KCdwZ2FkbWluLXdpemFyZDpuZXh0cGFnZTpzcWwnLCB0aGlzLm9uV2l6YXJk TmV4dFBhZ2VDaGFuZ2UsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGlzLm1vZGVsLm9uKCdwZ2FkbWluLXdpemFyZDpwcmV2cGFnZTpz cWwnLCB0aGlzLm9uV2l6YXJkUHJldlBhZ2VDaGFuZ2UsIHRoaXMpOworICAg ICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAg ICAgICAgLy8gVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgbW9kaWZpZWQgU1FM IGZvciB0aGUgd2l6YXJkCisgICAgICAgICAgICAgICAgICAgICAgICBvbldp emFyZE5leHRQYWdlQ2hhbmdlOiBmdW5jdGlvbigpeworCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBGZXRjaGVzIG1vZGlmaWVkIFNRTAorICAg ICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVybDogdGhpcy5tc3FsX3VybCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlOiAnR0VUJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYWNoZTogZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YTogc2VsZi5tb2RlbC50b0pTT04odHJ1ZSwg J0dFVCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBl OiAianNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVu dFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uIgorICAgICAgICAgICAgICAgICAg ICAgICAgICB9KS5kb25lKGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuc3FsVGFiLmNsZWFySGlzdG9yeSgpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3FsVGFiLnNldFZh bHVlKHJlcy5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSku ZmFpbChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLm1vZGVsLnRyaWdnZXIoJ3BnYWRtaW4tdmlldzptc3FsOmVycm9y Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5j dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1v ZGVsLnRyaWdnZXIoJ3BnYWRtaW4tdmlldzptc3FsOmZldGNoZWQnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmU6 IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IENsZWFyIGh0bWwgZG9tIGVsZW1lbnRzIG9mIENvZGVNaXJyb3Igc3FsIHRh YgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNxbENvbnRyb2wu dW5iaW5kKCk7IC8vIFVuYmluZCBhbGwgbG9jYWwgZXZlbnQgYmluZGluZ3MK KyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtRWxlbSA9IHNlbGYu c3FsQ29udHJvbC5zcWxUYWIuZ2V0V3JhcHBlckVsZW1lbnQoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY21FbGVtLnJlbW92ZSgpOworICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLnNxbENvbnRyb2wuc3FsVGFiID0g dW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgfSks CisKKyAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAg ICBDcmVhdGUgc3FsRmllbGQgdmlldyBpbnN0YW5jZQorICAgICAgICAgICAg ICAgICAgICB0byByZW5kZXIgaXQgaW50byB3aXphcmQgcGFnZQorICAgICAg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIHNxbENvbnRyb2wg PSBzZWxmLnNxbENvbnRyb2wgPSBuZXcgKHNxbEZpZWxkLmdldCgnY29udHJv bCcpKSh7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzcWxGaWVsZCwK KyAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVsCisgICAgICAg ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vIFdpemFyZCBm b3IgU1FMIHRhYiBjb250cm9sCisgICAgICAgICAgICAgICAgdmFyIHJldmll d1NRTFBhZ2UgPSBzZWxmLnJldmlld1NRTFBhZ2UgPSBuZXcgcGdCcm93c2Vy LldpemFyZFBhZ2UoeworICAgICAgICAgICAgICAgICAgaWQ6IDMsCisgICAg ICAgICAgICAgICAgICBwYWdlX3RpdGxlOiBfKCdGaW5hbCAoUmV2aWV3IFNl bGVjdGlvbikgKHN0ZXAgMyBvZiAzKScpLAorICAgICAgICAgICAgICAgICAg c2hvd19kZXNjcmlwdGlvbjogXygnRm9sbG93aW5nIHF1ZXJ5IHdpbGwgYmUg ZXhlY3V0ZWQgb24gdGhlIGRhdGFiYXNlICcgKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnc2VydmVyIGZvciB0aGUgc2VsZWN0ZWQgb2Jq ZWN0cywgYW5kIHByaXZpbGVnZXMuICcgKworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnUGxlYXNlIGNsaWNrIG9uIEZpbmlzaCB0byBjb21w bGV0ZSB0aGUgcHJvY2Vzcy4nKSwKKyAgICAgICAgICAgICAgICAgIG1vZGVs OiBuZXdNb2RlbCwKKyAgICAgICAgICAgICAgICAgIHZpZXc6IG5ldyhmdW5j dGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgU3Fs VGFiIGNvbnRyb2wgdG8gZ2VuZXJhdGUgaXRzIGh0bWwgbWFya3VwCisgICAg ICAgICAgICAgICAgICAgIHZhciBzcWxUYWJIdG1sID0gc3FsQ29udHJvbC5y ZW5kZXIoKS4kZWw7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVy ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4geyBlbDogc3FsVGFiSHRtbCB9OworICAgICAgICAgICAgICAgICAgICB9 OworICAgICAgICAgICAgICAgICAgfSksCisKKyAgICAgICAgICAgICAgICAg IGJlZm9yZVByZXY6IGZ1bmN0aW9uKHdpemFyZE9iaikgeworCisgICAgICAg ICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgIEVuYWJs ZSBuZXh0IGJ1dHRvbiBpZiBwcml2aWxlZ2UKKyAgICAgICAgICAgICAgICAg ICAgICBtb2RlbCBpcyBub3QgZW1wdHkgZWxzZSBkaXNhYmxlCisgICAgICAg ICAgICAgICAgICAgICAgbmV4dCBidXR0b24KKyAgICAgICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgICAgIHZhciBhY2xNb2RlbCA9IG5l d01vZGVsLmdldCgnYWNsJyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYo IV8uaXNVbmRlZmluZWQod2l6YXJkT2JqLmNvbGxlY3Rpb24pICYmCisgICAg ICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24ubW9kZWxz Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZighXy5p c1VuZGVmaW5lZChhY2xNb2RlbCkgJiYgIV8uaXNFbXB0eShhY2xNb2RlbCkg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWNsTW9kZWwubGVuZ3Ro ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNv bGxlY3Rpb24uYXQoMSkuc2V0KCdkaXNhYmxlX25leHQnLCBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNv bGxlY3Rpb24uYXQoMSkuc2V0KCdkaXNhYmxlX25leHQnLCB0cnVlKTsKKyAg ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9KTsKKworCisgICAg ICAgICAgICAgICAgLy8gQ3JlYXRlIFdpemFyZCBDb2xsZWN0aW9uIG9mIFdp emFyZCBQYWdlcworICAgICAgICAgICAgICAgIHZhciBXaXphcmRDb2xsZWN0 aW9uID0gQmFja2JvbmUuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICAg ICAgICAgICAgbW9kZWw6IHBnQnJvd3Nlci5XaXphcmRQYWdlCisgICAgICAg ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvLyBJdCBob2xkcyBh bGwgdGhlIHdpemFyZCBwYWdlcyB0byBiZSByZW5kZXJlZAorICAgICAgICAg ICAgICAgIHRoaXMud2l6YXJkQ29sbGVjdGlvbiA9IG5ldyBXaXphcmRDb2xs ZWN0aW9uKAorICAgICAgICAgICAgICAgICAgW2RiT2JqZWN0VHlwZVBhZ2Us IHByaXZpbGVnZVBhZ2UsIHJldmlld1NRTFBhZ2VdCisgICAgICAgICAgICAg ICAgKTsKKworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAg ICAgQ3JlYXRlIHdpemFyZCB3aGljaCBoYXMgZm9sbG93aW5nIG9wZXJhdGlv bnM6CisgICAgICAgICAgICAgICAgICAtIHJlbmRlcnMgd2l6YXJkIHBhZ2Vz CisgICAgICAgICAgICAgICAgICAtIGRlZmluZXMgdGhlIGZpcnN0IHBhZ2Ug dG8gcmVuZGVyIGluIHdpemFyZAorICAgICAgICAgICAgICAgICAgLSBTYXZl IHRoZSBtb2RlbCBvbiBmaW5pc2hidXR0b24KKyAgICAgICAgICAgICAgICAg IC0gUmVtb3ZlIHdpemFyZCBvbiBjYW5jZWwgYnV0dG9uCisgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgIHNlbGYud2l6YXJkID0gbmV3 IChwZ0Jyb3dzZXIuV2l6YXJkLmV4dGVuZCh7CisgICAgICAgICAgICAgICAg ICBvcHRpb25zOiB7CisgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdH cmFudCBXaXphcmQnKSwgLyogTWFpbiBXaXphcmQgVGl0bGUgKi8KKyAgICAg ICAgICAgICAgICAgICAgd2lkdGg6ICcnLAorICAgICAgICAgICAgICAgICAg ICBoZWlnaHQ6ICcnLAorICAgICAgICAgICAgICAgICAgICBjdXJyX3BhZ2U6 IDAsCisgICAgICAgICAgICAgICAgICAgIHNob3dfbGVmdF9wYW5lbDogZmFs c2UsCisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVfZmluaXNoOiB0cnVl CisgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAv LyBDYWxsYmFjayBmb3IgZmluaXNoIGJ1dHRvbgorICAgICAgICAgICAgICAg ICAgb25GaW5pc2g6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg ICB2YXIgbSA9IG5ld01vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAg ZCA9IG0udG9KU09OKCdHRVQnKTsKKworICAgICAgICAgICAgICAgICAgICAv LyBTYXZlIG1vZGVsCisgICAgICAgICAgICAgICAgICAgIGlmIChkICYmICFf LmlzRW1wdHkoZCkgJiYgIV8uaXNVbmRlZmluZWQoZC5vYmplY3RzKSkgewor ICAgICAgICAgICAgICAgICAgICAgIG0uc2F2ZSh7fSwgeworICAgICAgICAg ICAgICAgICAgICAgICAgYXR0cnM6IGQsCisgICAgICAgICAgICAgICAgICAg ICAgICB2YWxpZGF0ZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg ICBjYWNoZTogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNj ZXNzOiBmdW5jdGlvbihyZXMpIHsKKworICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBSZWxlYXNlIHdpemFyZCBvYmplY3RzCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYucmVsZWFzZU9iamVjdHMoKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpOworICAgICAgICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihtLCBqcXhocikgeworICAgICAgICAgICAgICAgICAgICAg ICAgICBhbGVydGlmeS5wZ05vdGlmaWVyKAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJlcnJvciIsIGpxeGhyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi e3sgXygnRXJyb3IgZHVyaW5nIHNhdmluZyBwcm9wZXJ0aWVzIC0gJSVzIScp IH19IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zcHJpbnRm KGpxeGhyLnN0YXR1c1RleHQpLnZhbHVlKCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gUmVsZWFzZSB3aXphcmQgb2JqZWN0cworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYucmVsZWFzZU9iamVjdHMoKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0sCisKKyAg ICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjYW5jZWwgYnV0dG9u CisgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24oKSB7CisK KyAgICAgICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB3aXphcmQgb2JqZWN0 cworICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbGVhc2VPYmplY3RzKCk7 CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSkgKHsKKyAgICAgICAg ICAgICAgICAgIGNvbGxlY3Rpb246IHRoaXMud2l6YXJkQ29sbGVjdGlvbiwK KyAgICAgICAgICAgICAgICAgIGVsOiBlbCwKKyAgICAgICAgICAgICAgICAg IG1vZGVsOiBuZXdNb2RlbAorICAgICAgICAgICAgICAgIH0pOworCisgICAg ICAgICAgICAgICAgLy8gUmVuZGVyIHdpemFyZAorICAgICAgICAgICAgICAg IHNlbGYud2l6YXJkLnJlbmRlcigpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9OworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg ICAgLy8gQ2FsbCBHcmFudCBXaXphcmQgRGlhbG9nCisgICAgICAgIGFsZXJ0 aWZ5LndpemFyZERpYWxvZyh0cnVlKTsKKyAgICAgIH0KKyAgICB9OworCisg ICAgcmV0dXJuIHBnQnJvd3Nlci5HcmFudFdpemFyZDsKKyAgfSk7CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxh dGVzL2dyYW50X3dpemFyZC9wZy85LjFfcGx1cy9hY2wuanNvbiBiL3dlYi9w Z2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6 YXJkL3BnLzkuMV9wbHVzL2FjbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjJkMjFmMTQKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50 X3dpemFyZC9wZy85LjFfcGx1cy9hY2wuanNvbgpAQCAtMCwwICsxLDMwIEBA Cit7IyBMaXN0IG9mIGFsbG93ZWQgcHJpdmlsZWdlcyBvZiBTY2hlbWEsIHRh YmxlIHNlcXVlbmNlLCBmdW5jdGlvbiBhbmQgdmlldyAjfQoreyMKKyAgICBG b3JtYXQgZm9yIGFsbG93ZWQgcHJpdmlsZWdlcyBhcmU6CisgICAgIm5vZGVf bmFtZSI6IHsKKyAgICAgICAgInR5cGUiOiAibmFtZSIsCisgICAgICAgICJh Y2wiOiBbLi4uXQorICAgIH0KKyN9Cit7CisgICAgInNjaGVtYSI6IHsKKyAg ICAgICAgInR5cGUiOiAiU0NIRU1BIiwKKyAgICAgICAgImFjbCI6IFsiYSIs ICJyIiwgInciLCAiZCIsICJEIiwgIngiLCAidCIsICJVIiwgIlgiXQorICAg IH0sCisgICAgInRhYmxlIjogeworICAgICAgICAidHlwZSI6ICJUQUJMRSIs CisgICAgICAgICJhY2wiOiBbImEiLCAidyIsICJkIiwgIkQiLCAieCIsICJ0 Il0KKyAgICB9LAorICAgICJ2aWV3IjogeworICAgICAgICAidHlwZSI6ICJW SUVXIiwKKyAgICAgICAgImFjbCI6IFsiYSIsICJ3IiwgImQiLCAiRCIsICJ4 IiwgInQiXQorICAgIH0sCisgICAgInNlcXVlbmNlIjogeworICAgICAgICAi dHlwZSI6ICJTRVFVRU5DRSIsCisgICAgICAgICJhY2wiOiBbInciLCAiVSJd CisgICAgfSwKKyAgICAiZnVuY3Rpb24iOiB7CisgICAgICAgICJ0eXBlIjog IkZVTkNUSU9OIiwKKyAgICAgICAgImFjbCI6IFsiWCJdCisgICAgfQorfQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3Rl bXBsYXRlcy9ncmFudF93aXphcmQvcGcvOS4xX3BsdXMvc3FsL2Z1bmN0aW9u LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0 ZXMvZ3JhbnRfd2l6YXJkL3BnLzkuMV9wbHVzL3NxbC9mdW5jdGlvbi5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkZDg4Ywot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dp emFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BnLzkuMV9wbHVzL3NxbC9m dW5jdGlvbi5zcWwKQEAgLTAsMCArMSwxOSBAQAoreyMgPT09PT0gRmV0Y2gg bGlzdCBvZiBEYXRhYmFzZSBvYmplY3QgdHlwZXMoRnVuY3Rpb25zKSA9PT09 PT0gI30KK3slIGlmIHR5cGUgYW5kIG5vZGVfaWQgJX0KK3slIHNldCBmdW5j X3R5cGUgPSAnVHJpZ2dlciBGdW5jdGlvbicgaWYgdHlwZSA9PSAndHJpZ2dl cl9mdW5jdGlvbicgZWxzZSAnRnVuY3Rpb24nICV9CitTRUxFQ1QKKyAgICBw ci5vaWQsCisgICAgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50 cyhwci5vaWQpIEFTIHByb2FyZ3MsCisgICAgeyMgcHIucHJvbmFtZSB8fCAn KCcgfHwgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhwci5v aWQpIHx8ICcpJyBBUyBuYW1lLCN9CisgICAgcHIucHJvbmFtZSBBUyBuYW1l LAorICAgICd7eyBmdW5jX3R5cGUgfX0nIEFTIG9iamVjdF90eXBlLAorICAg ICd7eyAiaWNvbi1mdW5jdGlvbiIgaWYgdHlwZSAhPSAidHJpZ2dlcl9mdW5j dGlvbiIgZWxzZSAiaWNvbi10cmlnZ2VyX2Z1bmN0aW9uIiB9fScgQVMgaWNv bgorRlJPTSBwZ19wcm9jIHByCisgICAgSk9JTiBwZ190eXBlIHR5cCBPTiB0 eXAub2lkPXByb3JldHR5cGUKKyAgICBKT0lOIHBnX25hbWVzcGFjZSB0eXBu cyBPTiB0eXBucy5vaWQ9dHlwLnR5cG5hbWVzcGFjZQorICAgIEpPSU4gcGdf bGFuZ3VhZ2UgbG5nIE9OIGxuZy5vaWQ9cHJvbGFuZworICAgIExFRlQgT1VU RVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9cHIu b2lkIEFORCBkZXMuY2xhc3NvaWQ9J3BnX3Byb2MnOjpyZWdjbGFzcykKK1dI RVJFIHByb2lzYWdnID0gRkFMU0UgQU5EIHByb25hbWVzcGFjZSA9IHt7IG5v ZGVfaWQgfX06Om9pZAorICAgIEFORCB0eXBuYW1lIHt7ICdOT1QnIGlmIHR5 cGUgIT0gJ3RyaWdnZXJfZnVuY3Rpb24nIGVsc2UgJycgfX0gSU4gKCd0cmln Z2VyJywgJ2V2ZW50X3RyaWdnZXInKQorT1JERVIgQlkgcHJvbmFtZQoreyUg ZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50 X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BnLzkuMV9wbHVzL3Nx bC9ncmFudF9mdW5jdGlvbi5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9ncmFu dF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9wZy85LjFfcGx1cy9z cWwvZ3JhbnRfZnVuY3Rpb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjcxZDY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dp emFyZC9wZy85LjFfcGx1cy9zcWwvZ3JhbnRfZnVuY3Rpb24uc3FsCkBAIC0w LDAgKzEsOSBAQAoreyMgPT09PT0gR3JhbnQgUGVybWlzc2lvbnMgb24gRGF0 YWJhc2UgT2JqZWN0cyBTZWxlY3RlZCA9PT09ICN9Cit7JSBpbXBvcnQgJ21h Y3Jvcy9mdW5jdGlvbnMvcHJpdmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdF X0ZVTkNUSU9OICV9Cit7JSBmb3Igb2JqIGluIGRhdGEub2JqZWN0cyAtJX0K K3slLSBzZXQgcHJpdiA9IGRhdGEucHJpdiAtJX0KK3sjID09PT09IGlmIG9i amVjdF90eXBlIGlzIEZ1bmN0aW9uIHRoZW4gYXBwbHkgZnVuY3Rpb24gbWFy Y3JvcyA9PT09PSAjfQoreyUgaWYgKG9iai5vYmplY3RfdHlwZSA9PSAnRnVu Y3Rpb24nIG9yIG9iai5vYmplY3RfdHlwZSA9PSAnVHJpZ2dlciBGdW5jdGlv bicpICV9Cit7eyBQUklWSUxFR0VfRlVOQ1RJT04uU0VUKGNvbm4sICdGVU5D VElPTicsIHByaXZbMF1bJ2dyYW50ZWUnXSwgb2JqLm5hbWUsIHByaXZbMF1b J3dpdGhvdXRfZ3JhbnQnXSwgcHJpdlswXVsnd2l0aF9ncmFudCddLCBuc3Bu YW1lLCBvYmoucHJvYXJncyl9fQoreyUgZW5kaWYgLSV9Cit7JSBlbmRmb3Ig LSV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXph cmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9wZy85LjFfcGx1cy9zcWwvZ3Jh bnRfc2VxdWVuY2Uuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6 YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvcGcvOS4xX3BsdXMvc3FsL2dy YW50X3NlcXVlbmNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43N2UwZTBlCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQv cGcvOS4xX3BsdXMvc3FsL2dyYW50X3NlcXVlbmNlLnNxbApAQCAtMCwwICsx LDggQEAKK3sjID09PT09IEdyYW50IFBlcm1pc3Npb25zIG9uIERhdGFiYXNl IE9iamVjdHMgU2VsZWN0ZWQgPT09PSAjfQoreyUgaW1wb3J0ICdtYWNyb3Mv c2NoZW1hcy9wcml2aWxlZ2UubWFjcm9zJyBhcyBQUklWSUxFR0UgJX0KK3sl IGZvciBvYmogaW4gZGF0YS5vYmplY3RzIC0lfQoreyUtIHNldCBwcml2ID0g ZGF0YS5wcml2IC0lfQoreyUgaWYgb2JqLm9iamVjdF90eXBlID09ICdTZXF1 ZW5jZScgJX0KK3t7IFBSSVZJTEVHRS5TRVQoY29ubiwgJ1NFUVVFTkNFJywg cHJpdlswXVsnZ3JhbnRlZSddLCBvYmoubmFtZSwgcHJpdlswXVsnd2l0aG91 dF9ncmFudCddLCBwcml2WzBdWyd3aXRoX2dyYW50J10sIG5zcG5hbWUgKSB9 fQoreyUgZW5kaWYgJX0KK3slIGVuZGZvciAtJX0KZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRf d2l6YXJkL3BnLzkuMV9wbHVzL3NxbC9ncmFudF90YWJsZS5zcWwgYi93ZWIv cGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dp emFyZC9wZy85LjFfcGx1cy9zcWwvZ3JhbnRfdGFibGUuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODMzMDYKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVt cGxhdGVzL2dyYW50X3dpemFyZC9wZy85LjFfcGx1cy9zcWwvZ3JhbnRfdGFi bGUuc3FsCkBAIC0wLDAgKzEsOCBAQAoreyMgPT09PT0gR3JhbnQgUGVybWlz c2lvbnMgb24gRGF0YWJhc2UgT2JqZWN0cyBTZWxlY3RlZCA9PT09ICN9Cit7 JSBpbXBvcnQgJ21hY3Jvcy9zY2hlbWFzL3ByaXZpbGVnZS5tYWNyb3MnIGFz IFBSSVZJTEVHRSAlfQoreyUgZm9yIG9iaiBpbiBkYXRhLm9iamVjdHMgLSV9 Cit7JS0gc2V0IHByaXYgPSBkYXRhLnByaXYgLSV9Cit7JSBpZiBvYmoub2Jq ZWN0X3R5cGUgPT0gJ1RhYmxlJyBvciBvYmoub2JqZWN0X3R5cGUgPT0gJ1Zp ZXcnICV9Cit7eyBQUklWSUxFR0UuU0VUKGNvbm4sICdUQUJMRScsIHByaXZb MF1bJ2dyYW50ZWUnXSwgb2JqLm5hbWUsIHByaXZbMF1bJ3dpdGhvdXRfZ3Jh bnQnXSwgcHJpdlswXVsnd2l0aF9ncmFudCddLCBuc3BuYW1lICkgfX0KK3sl IGVuZGlmICV9Cit7JSBlbmRmb3IgLSV9CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFy ZC9wZy85LjFfcGx1cy9zcWwvc2VxdWVuY2Uuc3FsIGIvd2ViL3BnYWRtaW4v dG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvcGcv OS4xX3BsdXMvc3FsL3NlcXVlbmNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mYWY3MTE5Ci0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFu dF93aXphcmQvcGcvOS4xX3BsdXMvc3FsL3NlcXVlbmNlLnNxbApAQCAtMCww ICsxLDExIEBACit7IyA9PT09PSBGZXRjaCBsaXN0IG9mIERhdGFiYXNlIG9i amVjdCB0eXBlcyhTZXF1ZW5jZSkgPT09PT0gI30KK3slIGlmIG5vZGVfaWQg JX0KK1NFTEVDVAorICAgIGNsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnU2Vx dWVuY2UnIEFTIG9iamVjdF90eXBlLAorICAgICdpY29uLXNlcXVlbmNlJyBB UyBpY29uCitGUk9NIHBnX2NsYXNzIGNsCisgICAgTEVGVCBPVVRFUiBKT0lO IHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jbC5vaWQgQU5E IGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKK1dIRVJFIHJl bGtpbmQgPSAnUycgQU5EIHJlbG5hbWVzcGFjZSAgPSB7eyBub2RlX2lkIH19 OjpvaWQKK09SREVSIEJZIGNsLnJlbG5hbWUKK3slIGVuZGlmICV9CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxh dGVzL2dyYW50X3dpemFyZC9wZy85LjFfcGx1cy9zcWwvdGFibGUuc3FsIGIv d2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFu dF93aXphcmQvcGcvOS4xX3BsdXMvc3FsL3RhYmxlLnNxbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQxYmZmCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBs YXRlcy9ncmFudF93aXphcmQvcGcvOS4xX3BsdXMvc3FsL3RhYmxlLnNxbApA QCAtMCwwICsxLDE0IEBACit7IyA9PT09PSBGZXRjaCBsaXN0IG9mIERhdGFi YXNlIG9iamVjdCB0eXBlcyhUYWJsZXMpID09PT09ICN9Cit7JSBpZiBub2Rl X2lkICV9CitTRUxFQ1QgcmVsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnVGFi bGUnIEFTIG9iamVjdF90eXBlLAorICAgICdpY29uLXRhYmxlJyBBUyBpY29u CitGUk9NIHBnX2NsYXNzIHJlbAorICAgIExFRlQgT1VURVIgSk9JTiBwZ190 YWJsZXNwYWNlIHNwYyBPTiBzcGMub2lkPXJlbC5yZWx0YWJsZXNwYWNlCisg ICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVz Lm9iam9pZD1yZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9MCBBTkQgZGVzLmNs YXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQorICAgIExFRlQgT1VURVIg Sk9JTiBwZ19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVsLm9p ZCBBTkQgY29uLmNvbnR5cGU9J3AnCisgICAgTEVGVCBPVVRFUiBKT0lOIHBn X2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gcmVsLnJlbHRvYXN0cmVsaWQKKyAg ICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAu b2lkCitXSEVSRSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcpIEFORCBy ZWwucmVsbmFtZXNwYWNlID0ge3sgbm9kZV9pZCB9fTo6b2lkCitPUkRFUiBC WSByZWwucmVsbmFtZQoreyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6 YXJkL3BnLzkuMV9wbHVzL3NxbC92aWV3LnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BnLzku MV9wbHVzL3NxbC92aWV3LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5kZTA5MTYxCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXph cmQvcGcvOS4xX3BsdXMvc3FsL3ZpZXcuc3FsCkBAIC0wLDAgKzEsMTkgQEAK K3sjID09PT09IEZldGNoIGxpc3Qgb2YgRGF0YWJhc2Ugb2JqZWN0IHR5cGVz KFZpZXcpID09PT09ICN9Cit7JSBpZiBub2RlX2lkICV9CitTRUxFQ1QKKyAg ICBjLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnVmlldycgQVMgb2JqZWN0X3R5 cGUsCisgICAgJ2ljb24tdmlldycgQVMgaWNvbgorRlJPTSBwZ19jbGFzcyBj CisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3BhY2Ugc3BjIE9OIHNw Yy5vaWQ9Yy5yZWx0YWJsZXNwYWNlCisgICAgTEVGVCBPVVRFUiBKT0lOIHBn X2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jLm9pZCBhbmQgZGVz Lm9ianN1YmlkPTAgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdj bGFzcykKKyAgICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9OIHRz dC5vaWQgPSBjLnJlbHRvYXN0cmVsaWQKK1dIRVJFICgoYy5yZWxoYXNydWxl cyBBTkQgKEVYSVNUUyAoCisgICAgU0VMRUNUIHIucnVsZW5hbWUKKyAgICBG Uk9NIHBnX3Jld3JpdGUgcgorICAgIFdIRVJFICgoci5ldl9jbGFzcyA9IGMu b2lkKQorICAgICAgICBBTkQgKGJwY2hhcihyLmV2X3R5cGUpID0gJzEnOjpi cGNoYXIpKSApKQorICAgICAgICkgT1IgKGMucmVsa2luZCA9ICd2Jzo6Y2hh cikpCitBTkQgYy5yZWxuYW1lc3BhY2UgPSB7eyBub2RlX2lkIH19OjpvaWQK K09SREVSIEJZIGMucmVsbmFtZQoreyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3Jh bnRfd2l6YXJkL3BwYXMvOS4xX3BsdXMvYWNsLmpzb24gYi93ZWIvcGdhZG1p bi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9w cGFzLzkuMV9wbHVzL2FjbC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjJkMjFmMTQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dp emFyZC9wcGFzLzkuMV9wbHVzL2FjbC5qc29uCkBAIC0wLDAgKzEsMzAgQEAK K3sjIExpc3Qgb2YgYWxsb3dlZCBwcml2aWxlZ2VzIG9mIFNjaGVtYSwgdGFi bGUgc2VxdWVuY2UsIGZ1bmN0aW9uIGFuZCB2aWV3ICN9Cit7IworICAgIEZv cm1hdCBmb3IgYWxsb3dlZCBwcml2aWxlZ2VzIGFyZToKKyAgICAibm9kZV9u YW1lIjogeworICAgICAgICAidHlwZSI6ICJuYW1lIiwKKyAgICAgICAgImFj bCI6IFsuLi5dCisgICAgfQorI30KK3sKKyAgICAic2NoZW1hIjogeworICAg ICAgICAidHlwZSI6ICJTQ0hFTUEiLAorICAgICAgICAiYWNsIjogWyJhIiwg InIiLCAidyIsICJkIiwgIkQiLCAieCIsICJ0IiwgIlUiLCAiWCJdCisgICAg fSwKKyAgICAidGFibGUiOiB7CisgICAgICAgICJ0eXBlIjogIlRBQkxFIiwK KyAgICAgICAgImFjbCI6IFsiYSIsICJ3IiwgImQiLCAiRCIsICJ4IiwgInQi XQorICAgIH0sCisgICAgInZpZXciOiB7CisgICAgICAgICJ0eXBlIjogIlZJ RVciLAorICAgICAgICAiYWNsIjogWyJhIiwgInciLCAiZCIsICJEIiwgIngi LCAidCJdCisgICAgfSwKKyAgICAic2VxdWVuY2UiOiB7CisgICAgICAgICJ0 eXBlIjogIlNFUVVFTkNFIiwKKyAgICAgICAgImFjbCI6IFsidyIsICJVIl0K KyAgICB9LAorICAgICJmdW5jdGlvbiI6IHsKKyAgICAgICAgInR5cGUiOiAi RlVOQ1RJT04iLAorICAgICAgICAiYWNsIjogWyJYIl0KKyAgICB9Cit9CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVt cGxhdGVzL2dyYW50X3dpemFyZC9wcGFzLzkuMV9wbHVzL3NxbC9mdW5jdGlv bi5zcWwgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxh dGVzL2dyYW50X3dpemFyZC9wcGFzLzkuMV9wbHVzL3NxbC9mdW5jdGlvbi5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkZDg4 YwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50 X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BwYXMvOS4xX3BsdXMv c3FsL2Z1bmN0aW9uLnNxbApAQCAtMCwwICsxLDE5IEBACit7IyA9PT09PSBG ZXRjaCBsaXN0IG9mIERhdGFiYXNlIG9iamVjdCB0eXBlcyhGdW5jdGlvbnMp ID09PT09PSAjfQoreyUgaWYgdHlwZSBhbmQgbm9kZV9pZCAlfQoreyUgc2V0 IGZ1bmNfdHlwZSA9ICdUcmlnZ2VyIEZ1bmN0aW9uJyBpZiB0eXBlID09ICd0 cmlnZ2VyX2Z1bmN0aW9uJyBlbHNlICdGdW5jdGlvbicgJX0KK1NFTEVDVAor ICAgIHByLm9pZCwKKyAgICBwZ19nZXRfZnVuY3Rpb25faWRlbnRpdHlfYXJn dW1lbnRzKHByLm9pZCkgQVMgcHJvYXJncywKKyAgICB7IyBwci5wcm9uYW1l IHx8ICcoJyB8fCBwZ19nZXRfZnVuY3Rpb25faWRlbnRpdHlfYXJndW1lbnRz KHByLm9pZCkgfHwgJyknIEFTIG5hbWUsI30KKyAgICBwci5wcm9uYW1lIEFT IG5hbWUsCisgICAgJ3t7IGZ1bmNfdHlwZSB9fScgQVMgb2JqZWN0X3R5cGUs CisgICAgJ3t7ICJpY29uLWZ1bmN0aW9uIiBpZiB0eXBlICE9ICJ0cmlnZ2Vy X2Z1bmN0aW9uIiBlbHNlICJpY29uLXRyaWdnZXJfZnVuY3Rpb24iIH19JyBB UyBpY29uCitGUk9NIHBnX3Byb2MgcHIKKyAgICBKT0lOIHBnX3R5cGUgdHlw IE9OIHR5cC5vaWQ9cHJvcmV0dHlwZQorICAgIEpPSU4gcGdfbmFtZXNwYWNl IHR5cG5zIE9OIHR5cG5zLm9pZD10eXAudHlwbmFtZXNwYWNlCisgICAgSk9J TiBwZ19sYW5ndWFnZSBsbmcgT04gbG5nLm9pZD1wcm9sYW5nCisgICAgTEVG VCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9p ZD1wci5vaWQgQU5EIGRlcy5jbGFzc29pZD0ncGdfcHJvYyc6OnJlZ2NsYXNz KQorV0hFUkUgcHJvaXNhZ2cgPSBGQUxTRSBBTkQgcHJvbmFtZXNwYWNlID0g e3sgbm9kZV9pZCB9fTo6b2lkCisgICAgQU5EIHR5cG5hbWUge3sgJ05PVCcg aWYgdHlwZSAhPSAndHJpZ2dlcl9mdW5jdGlvbicgZWxzZSAnJyB9fSBJTiAo J3RyaWdnZXInLCAnZXZlbnRfdHJpZ2dlcicpCitPUkRFUiBCWSBwcm9uYW1l Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv Z3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvcHBhcy85LjFf cGx1cy9zcWwvZ3JhbnRfZnVuY3Rpb24uc3FsIGIvd2ViL3BnYWRtaW4vdG9v bHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvcHBhcy85 LjFfcGx1cy9zcWwvZ3JhbnRfZnVuY3Rpb24uc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDY5ZDAKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVz L2dyYW50X3dpemFyZC9wcGFzLzkuMV9wbHVzL3NxbC9ncmFudF9mdW5jdGlv bi5zcWwKQEAgLTAsMCArMSw5IEBACit7IyA9PT09PSBHcmFudCBQZXJtaXNz aW9ucyBvbiBEYXRhYmFzZSBPYmplY3RzIFNlbGVjdGVkID09PT0gI30KK3sl IGltcG9ydCAnbWFjcm9zL2Z1bmN0aW9ucy9wcml2aWxlZ2UubWFjcm9zJyBh cyBQUklWSUxFR0VfRlVOQ1RJT04gJX0KK3slIGZvciBvYmogaW4gZGF0YS5v YmplY3RzIC0lfQoreyUtIHNldCBwcml2ID0gZGF0YS5wcml2IC0lfQoreyMg PT09PT0gaWYgb2JqZWN0X3R5cGUgaXMgRnVuY3Rpb24gdGhlbiBhcHBseSBm dW5jdGlvbiBtYXJjcm9zID09PT09ICN9Cit7JSBpZiAob2JqLm9iamVjdF90 eXBlID09ICdGdW5jdGlvbicgb3Igb2JqLm9iamVjdF90eXBlID09ICdUcmln Z2VyIEZ1bmN0aW9uJykgJX0KK3t7IFBSSVZJTEVHRV9GVU5DVElPTi5TRVQo Y29ubiwgJ0ZVTkNUSU9OJywgcHJpdlswXVsnZ3JhbnRlZSddLCBvYmoubmFt ZSwgcHJpdlswXVsnd2l0aG91dF9ncmFudCddLCBwcml2WzBdWyd3aXRoX2dy YW50J10sIG5zcG5hbWUsIG9iai5wcm9hcmdzKX19Cit7JSBlbmRpZiAtJX0K K3slIGVuZGZvciAtJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xz L2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BwYXMvOS4x X3BsdXMvc3FsL2dyYW50X3NlcXVlbmNlLnNxbCBiL3dlYi9wZ2FkbWluL3Rv b2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BwYXMv OS4xX3BsdXMvc3FsL2dyYW50X3NlcXVlbmNlLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2UwZTBlCi0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRl cy9ncmFudF93aXphcmQvcHBhcy85LjFfcGx1cy9zcWwvZ3JhbnRfc2VxdWVu Y2Uuc3FsCkBAIC0wLDAgKzEsOCBAQAoreyMgPT09PT0gR3JhbnQgUGVybWlz c2lvbnMgb24gRGF0YWJhc2UgT2JqZWN0cyBTZWxlY3RlZCA9PT09ICN9Cit7 JSBpbXBvcnQgJ21hY3Jvcy9zY2hlbWFzL3ByaXZpbGVnZS5tYWNyb3MnIGFz IFBSSVZJTEVHRSAlfQoreyUgZm9yIG9iaiBpbiBkYXRhLm9iamVjdHMgLSV9 Cit7JS0gc2V0IHByaXYgPSBkYXRhLnByaXYgLSV9Cit7JSBpZiBvYmoub2Jq ZWN0X3R5cGUgPT0gJ1NlcXVlbmNlJyAlfQore3sgUFJJVklMRUdFLlNFVChj b25uLCAnU0VRVUVOQ0UnLCBwcml2WzBdWydncmFudGVlJ10sIG9iai5uYW1l LCBwcml2WzBdWyd3aXRob3V0X2dyYW50J10sIHByaXZbMF1bJ3dpdGhfZ3Jh bnQnXSwgbnNwbmFtZSApIH19Cit7JSBlbmRpZiAlfQoreyUgZW5kZm9yIC0l fQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJk L3RlbXBsYXRlcy9ncmFudF93aXphcmQvcHBhcy85LjFfcGx1cy9zcWwvZ3Jh bnRfdGFibGUuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJk L3RlbXBsYXRlcy9ncmFudF93aXphcmQvcHBhcy85LjFfcGx1cy9zcWwvZ3Jh bnRfdGFibGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjhlNjc2YWMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90 b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9wcGFz LzkuMV9wbHVzL3NxbC9ncmFudF90YWJsZS5zcWwKQEAgLTAsMCArMSw4IEBA Cit7IyA9PT09PSBHcmFudCBQZXJtaXNzaW9ucyBvbiBEYXRhYmFzZSBPYmpl Y3RzIFNlbGVjdGVkID09PT0gI30KK3slIGltcG9ydCAnbWFjcm9zL3NjaGVt YXMvcHJpdmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdFICV9Cit7JSBmb3Ig b2JqIGluIGRhdGEub2JqZWN0cyAtJX0KK3slLSBzZXQgcHJpdiA9IGRhdGEu cHJpdiAtJX0KK3slIGlmIG9iai5vYmplY3RfdHlwZSA9PSAnVGFibGUnICV9 Cit7eyBQUklWSUxFR0UuU0VUKGNvbm4sICdUQUJMRScsIHByaXZbMF1bJ2dy YW50ZWUnXSwgb2JqLm5hbWUsIHByaXZbMF1bJ3dpdGhvdXRfZ3JhbnQnXSwg cHJpdlswXVsnd2l0aF9ncmFudCddLCBuc3BuYW1lICkgfX0KK3slIGVuZGlm ICV9Cit7JSBlbmRmb3IgLSV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90 b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9wcGFz LzkuMV9wbHVzL3NxbC9zZXF1ZW5jZS5zcWwgYi93ZWIvcGdhZG1pbi90b29s cy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9wcGFzLzku MV9wbHVzL3NxbC9zZXF1ZW5jZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZmFmNzExOQotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRf d2l6YXJkL3BwYXMvOS4xX3BsdXMvc3FsL3NlcXVlbmNlLnNxbApAQCAtMCww ICsxLDExIEBACit7IyA9PT09PSBGZXRjaCBsaXN0IG9mIERhdGFiYXNlIG9i amVjdCB0eXBlcyhTZXF1ZW5jZSkgPT09PT0gI30KK3slIGlmIG5vZGVfaWQg JX0KK1NFTEVDVAorICAgIGNsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnU2Vx dWVuY2UnIEFTIG9iamVjdF90eXBlLAorICAgICdpY29uLXNlcXVlbmNlJyBB UyBpY29uCitGUk9NIHBnX2NsYXNzIGNsCisgICAgTEVGVCBPVVRFUiBKT0lO IHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jbC5vaWQgQU5E IGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKK1dIRVJFIHJl bGtpbmQgPSAnUycgQU5EIHJlbG5hbWVzcGFjZSAgPSB7eyBub2RlX2lkIH19 OjpvaWQKK09SREVSIEJZIGNsLnJlbG5hbWUKK3slIGVuZGlmICV9CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxh dGVzL2dyYW50X3dpemFyZC9wcGFzLzkuMV9wbHVzL3NxbC90YWJsZS5zcWwg Yi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dy YW50X3dpemFyZC9wcGFzLzkuMV9wbHVzL3NxbC90YWJsZS5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkMWJmZgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90 ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3BwYXMvOS4xX3BsdXMvc3FsL3RhYmxl LnNxbApAQCAtMCwwICsxLDE0IEBACit7IyA9PT09PSBGZXRjaCBsaXN0IG9m IERhdGFiYXNlIG9iamVjdCB0eXBlcyhUYWJsZXMpID09PT09ICN9Cit7JSBp ZiBub2RlX2lkICV9CitTRUxFQ1QgcmVsLnJlbG5hbWUgQVMgbmFtZSwKKyAg ICAnVGFibGUnIEFTIG9iamVjdF90eXBlLAorICAgICdpY29uLXRhYmxlJyBB UyBpY29uCitGUk9NIHBnX2NsYXNzIHJlbAorICAgIExFRlQgT1VURVIgSk9J TiBwZ190YWJsZXNwYWNlIHNwYyBPTiBzcGMub2lkPXJlbC5yZWx0YWJsZXNw YWNlCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBP TiAoZGVzLm9iam9pZD1yZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9MCBBTkQg ZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQorICAgIExFRlQg T1VURVIgSk9JTiBwZ19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9 cmVsLm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisgICAgTEVGVCBPVVRFUiBK T0lOIHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gcmVsLnJlbHRvYXN0cmVs aWQKKyAgICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlw ZT10eXAub2lkCitXSEVSRSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcp IEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sgbm9kZV9pZCB9fTo6b2lkCitP UkRFUiBCWSByZWwucmVsbmFtZQoreyUgZW5kaWYgJX0KZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3Jh bnRfd2l6YXJkL3BwYXMvOS4xX3BsdXMvc3FsL3ZpZXcuc3FsIGIvd2ViL3Bn YWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXph cmQvcHBhcy85LjFfcGx1cy9zcWwvdmlldy5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwOTE2MQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMv Z3JhbnRfd2l6YXJkL3BwYXMvOS4xX3BsdXMvc3FsL3ZpZXcuc3FsCkBAIC0w LDAgKzEsMTkgQEAKK3sjID09PT09IEZldGNoIGxpc3Qgb2YgRGF0YWJhc2Ug b2JqZWN0IHR5cGVzKFZpZXcpID09PT09ICN9Cit7JSBpZiBub2RlX2lkICV9 CitTRUxFQ1QKKyAgICBjLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnVmlldycg QVMgb2JqZWN0X3R5cGUsCisgICAgJ2ljb24tdmlldycgQVMgaWNvbgorRlJP TSBwZ19jbGFzcyBjCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3Bh Y2Ugc3BjIE9OIHNwYy5vaWQ9Yy5yZWx0YWJsZXNwYWNlCisgICAgTEVGVCBP VVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1j Lm9pZCBhbmQgZGVzLm9ianN1YmlkPTAgQU5EIGRlcy5jbGFzc29pZD0ncGdf Y2xhc3MnOjpyZWdjbGFzcykKKyAgICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xh c3MgdHN0IE9OIHRzdC5vaWQgPSBjLnJlbHRvYXN0cmVsaWQKK1dIRVJFICgo Yy5yZWxoYXNydWxlcyBBTkQgKEVYSVNUUyAoCisgICAgU0VMRUNUIHIucnVs ZW5hbWUKKyAgICBGUk9NIHBnX3Jld3JpdGUgcgorICAgIFdIRVJFICgoci5l dl9jbGFzcyA9IGMub2lkKQorICAgICAgICBBTkQgKGJwY2hhcihyLmV2X3R5 cGUpID0gJzEnOjpicGNoYXIpKSApKQorICAgICAgICkgT1IgKGMucmVsa2lu ZCA9ICd2Jzo6Y2hhcikpCitBTkQgYy5yZWxuYW1lc3BhY2UgPSB7eyBub2Rl X2lkIH19OjpvaWQKK09SREVSIEJZIGMucmVsbmFtZQoreyUgZW5kaWYgJX0K --001a11469f84297f98052fcf658e Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a11469f84297f98052fcf658e--