Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1adERt-0005t9-F2 for pgadmin-hackers@arkaria.postgresql.org; Tue, 08 Mar 2016 10:01:05 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1adERs-0006lH-PZ for pgadmin-hackers@arkaria.postgresql.org; Tue, 08 Mar 2016 10:01:04 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1adERZ-0006Vk-5p for pgadmin-hackers@postgresql.org; Tue, 08 Mar 2016 10:00:45 +0000 Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1adERQ-0003sv-Od for pgadmin-hackers@postgresql.org; Tue, 08 Mar 2016 10:00:43 +0000 Received: by mail-wm0-x229.google.com with SMTP id l68so20124904wml.1 for ; Tue, 08 Mar 2016 02:00:36 -0800 (PST) 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=0nqYDoKcGCZAiG5k8Q/h7uvIbjaTWVtuAZBjuPT/id8=; b=cnujdovue0g7h91CWwk9hoqJe9krZYUTygLrmI1GzyE+0gc8HUisIHWTbi5lJAlwmJ h4VDAG5sOcMTSc5OsBx86SYqEz85mD2vd/8vTHc553yi40m4/LJnUjc9uMyqwm1miZHT oZIn7hB3AmK+9H5/BM7iKpr9TwNAm4WzAjKkDfsHEq+ZVUIAvxbXmTN18FQf7ATCF1i1 OEdFTtr2FECtRHO2uwbcfRcVA0p33tNSZxD/rcInDvvudETvsccGg5zDyCPHg3yolySi BrDmsiYTKmd1nVIABa1b40U2karAYoreTeWWB+7LoZK5qWpxODLZPO8Zay/RvfQ89URU F2Vg== 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=0nqYDoKcGCZAiG5k8Q/h7uvIbjaTWVtuAZBjuPT/id8=; b=eDwB9vutR1ewcdaI7vWNyTp+n/XVCUU3Cqvo5lwynvWoieIl21DFxIfoV7Bpo7H0Nd vFaoNkKlWp5reCEwbjfkBjoB+J8vrSV4+jxbNdWN8lXoRmCYUvMbY5bqayle9iOtMNOz ocdxauc4u0ld6tsHqxzxPaLiIL0RY5AIofEDEzmqgzqpaY+LselWrAf6Wb/BFFQ9y9RU lS/RDOmKvKP59qNDWjWkwVXcbWthnW78R7WNZpQJKn5UfC0YwD/XgjC6CH4SaUb16Tuk lrSEV1HXWe6UDhcEnRqzs+SkuFgkqqlZB9DZud0hcRvWOQQMilAOM76ot8E5XAtI89eW FQeA== X-Gm-Message-State: AD7BkJJp9txj3UV+uk2aeXC3DiJCOHDXbtmYpRUZPolarpMInaK324Vwo/ZpBSv40jJHtCereTCthwRBtyDIbGhx X-Received: by 10.28.128.83 with SMTP id b80mr14356853wmd.6.1457431235322; Tue, 08 Mar 2016 02:00:35 -0800 (PST) MIME-Version: 1.0 Received: by 10.28.55.74 with HTTP; Tue, 8 Mar 2016 02:00:05 -0800 (PST) In-Reply-To: References: From: Surinder Kumar Date: Tue, 8 Mar 2016 15:30:05 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Grant Wizard To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1142052c119a6c052d86a7c9 X-Pg-Spam-Score: -1.9 (-) 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 --001a1142052c119a6c052d86a7c9 Content-Type: multipart/alternative; boundary=001a1142052c119a66052d86a7c7 --001a1142052c119a66052d86a7c7 Content-Type: text/plain; charset=UTF-8 Hi, I forgot to add 'node.ui.js' file in the previous patch, please ignore the previous patch. Attached is the new patch, Please review the patch and let me know for any comments. On Tue, Mar 8, 2016 at 10:44 AM, Surinder Kumar < surinder.kumar@enterprisedb.com> wrote: > Hi > > PFA patch with following changes: > > 1. Extends SqlTabControl to write a new function 'onWizardChange', > instead of writing it in backform.pgadmin.js file. > > Also, validations in privilegeControl are not working properly, when > validations gets fixed, I will send an updated patch. > > This is complete patch, as Khusboo's patch also merged in attached patch > and > patches of "Sequence" and "Functions" macros are already committed. > > > On Fri, Mar 4, 2016 at 8:06 PM, Dave Page wrote: > >> A couple of corrections below >> >> On Fri, Mar 4, 2016 at 1:39 PM, Dave Page wrote: >> > Hi >> > >> > On Thu, Mar 3, 2016 at 12:49 PM, Surinder Kumar >> > wrote: >> >> Hi, >> >> >> >> PFA patch for Grant Wizard. >> >> >> >> Before applying grant wizard patch: >> >> >> >> 1. Apply patch for "wizard JS file" which Khushboo had shared >> with >> >> Ashesh personally. >> >> I am using that patch with few changes in that. Ashesh will >> >> review >> >> and commit that patch. >> >> >> >> 2. Apply patches of "Sequence" and "Functions" macros. >> >> >> >> >> >> Please review the patch and Let me know for any comments. >> > >> > Initial feedback: >> > >> > - Why does this add specific knowledge of the Grant Wizard to the >> > Browser module? It should be a plugin that loads itself at runtime. >> > Any changes to the browser to support that should be entirely generic >> > and usable by any module. >> > Fixed. > >> > >> > - The comment above also applies to the core templates. CSS should be >> > advertised by the plugin, and the browser can add it into the rendered >> > output when the module is dynamically loaded. >> > Fixed. > >> > >> > - +""" Implements Grant Wizard""" - why the leading space? Please >> > review all comments and code for such small details. >> > Done > >> > >> > - The Python code to detect and alias various Python 2/3 classes >> > should be centralised, as I've seen it in at least one other module. >> > >> > Removed it, as far as it is not required. > >> > - In other module names, we've separated multiple words with a hypen. >> > e.g. server-groups. s/grantwizard/grant-wizard/g >> >> That should be an underscore, not a hyphen: >> >> s/grantwizard/grant_wizard/g > > >> > >> > - The published routes for this module are all under >> > >> > - "GET /browser/static/js/wizard.js HTTP/1.1" 404 - >> > >> > - For consistency, when naming CSS/JS files that are core to a module, >> > please use the module name, e.g. >> > /web/pgadmin/tools/grant-wizard/static/css/grant-wizard.css >> >> /web/pgadmin/tools/grant_wizard/static/css/grant_wizard.css >> > Done > >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > > --001a1142052c119a66052d86a7c7 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

I forgot to add 'node.ui.js'= ; file in the previous patch, please ignore the previous patch.=C2=A0
=
Attached is the new patch,=C2=A0

Please review the patch and let me know for any comment= s.


On Tue, Mar 8, 2016 at 10:44 AM, Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi

PFA patch w= ith following changes:

1. Extends SqlTabControl to= write a new function 'onWizardChange',
instead of writin= g it in backform.pgadmin.js file.

Also, validation= s in privilegeControl are not working properly, when validations gets fixed= , I will send an updated patch.

This is compl= ete patch, as Khusboo's patch also merged in attached patch and
patches of "Sequence" and "Functions" macros are alr= eady=C2=A0committed.

<= br>
On Fri, Mar 4, 2016 at 8:06 = PM, Dave Page <dpage@pgadmin.org> wrote:
A couple of corrections below <sigh>

On Fri, Mar 4, 2016 at 1:39 PM, Dave Page <dpage@pgadmin.org> wrote:
> Hi
>
> On Thu, Mar 3, 2016 at 12:49 PM, Surinder Kumar
> <surinder.kumar@enterprisedb.com> wrote:
>> Hi,
>>
>> PFA patch for Grant Wizard.
>>
>> Before applying grant wizard patch:
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01. Apply patch for "wizard J= S file" which Khushboo had shared with
>> Ashesh personally.
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0I am using that pat= ch with few changes in that. Ashesh will
>> review
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0and commit that pat= ch.
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A02. Apply patches of "Sequenc= e" and "Functions" macros.
>>
>>
>> Please review the patch and Let me know for any comments.
>
> Initial feedback:
>
> - Why does this add specific knowledge of the Grant Wizard to the
> Browser module? It should be a plugin that loads itself at runtime.
> Any changes to the browser to support that should be entirely generic<= br> > and usable by any module.
Fixe= d.=C2=A0
>
> - The comment above also applies to the core templates. CSS should be<= br> > advertised by the plugin, and the browser can add it into the rendered=
> output when the module is dynamically loaded.
Fixed.=C2=A0
>
> - +""" Implements Grant Wizard""" - why = the leading space? Please
> review all comments and code for such small details.
Done=C2=A0
=
>
> - The Python code to detect and alias various Python 2/3 classes
> should be centralised, as I've seen it in at least one other modul= e.
>
Removed it, as far as it is no= t required.=C2=A0
> - In other module names, we've separated multiple words with a hyp= en.
> e.g. server-groups. s/grantwizard/grant-wizard/g

That should be an underscore, not a hyphen:

s/grantwizard/grant_wizard/g=C2=A0

>
> - The published routes for this module are all under
>
> - "GET /browser/static/js/wizard.js HTTP/1.1" 404 -
>
> - For consistency, when naming CSS/JS files that are core to a module,=
> please use the module name, e.g.
> /web/pgadmin/tools/grant-wizard/static/css/grant-wizard.css

/web/pgadmin/tools/grant_wizard/static/css/grant_wizard.css
Done=C2=A0

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

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


--001a1142052c119a66052d86a7c7-- --001a1142052c119a6c052d86a7c9 Content-Type: application/octet-stream; name="grant_wizard_v3.patch" Content-Disposition: attachment; filename="grant_wizard_v3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ilj8uhhn1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2Nzcy93 aXphcmQuY3NzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvY3NzL3dp emFyZC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTkzNGFhYwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc3RhdGljL2Nzcy93aXphcmQuY3NzCkBAIC0wLDAgKzEsODkgQEAKKwor LyoqIENTUyBmb3IgV2l6YXJkICoqLworLndpemFyZF9kbGcgeworICBoZWln aHQ6IDMwMHB4OworICBwYWRkaW5nOiAwIDEwcHg7Cit9CisKKy5hanMtY29u dGVudCB7CisgIHBhZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDsKK30KKwor LyogV2l6YXJkIEhlYWRlciBDU1MgKi8KKy53aXphcmQtaGVhZGVyIHsKKyAg YmFja2dyb3VuZDogIzQyOGJjYTsKKyAgcGFkZGluZy1sZWZ0OiAxNXB4Owor ICBwYWRkaW5nLWJvdHRvbTogN3B4OworICBjb2xvcjogI2ZmZjsKKyAgZm9u dC1zaXplOiAxOHB4OworICBoZWlnaHQ6IDc2cHg7CisgIGxpbmUtaGVpZ2h0 OiA3NnB4OworfQorCisud2l6YXJkLWhlYWRlciBoMyB7CisgIGZvbnQtc2l6 ZTogMThweDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisud2l6 YXJkLWNvbnRlbnQgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIG92ZXJm bG93LXk6IGF1dG87CisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nOiAwOwor ICBtaW4taGVpZ2h0OiAzOTBweDsKKyAgbWF4LWhlaWdodDogMzkwcHg7Cit9 CisKKy8qIFdpemFyZCBGb290ZXIgQ1NTICovCisuZm9vdGVyIHsKKyAgcG9z aXRpb246IGFic29sdXRlOworICBib3JkZXItdG9wOiAxcHggc29saWQgI2Nj YzsKKyAgYm90dG9tOiAwcHg7CisgIGhlaWdodDogNzFweDsKKyAgcmlnaHQ6 IDBweDsKKyAgcGFkZGluZy10b3A6IDIycHg7Cit9CisKKy8qIFdpemFyZCBC dXR0b24gQ1NTICovCisud2l6YXJkLWJ1dHRvbnMgeworICBmbG9hdDogcmln aHQ7Cit9CisKKy53aXphcmQtYnV0dG9ucyBidXR0b24geworICBmbG9hdDog bGVmdDsKKyAgcGFkZGluZzogN3B4IDE1LjJweDsKKyAgZm9udC1zaXplOiAx NHB4OworICBtYXJnaW4tcmlnaHQ6IDVweDsKK30KKworLndpemFyZC1maW5p c2ggeworICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKK30KKworLyog V2l6YXJkIFN0YXR1cyBiYXIgQ1NTICovCisud2l6YXJkLWRlc2NyaXB0aW9u IHsKKyAgaGVpZ2h0OiBhdXRvOworICBwYWRkaW5nOiAyMHB4IDBweDsKK30K KworLyogRXJyb3IgbWVzc2FnZSBjc3MgKi8KKy5lcnJvcl9tc2dfZGl2IHsK KyAgZGlzcGxheTogYmxvY2s7CisgIGJvdHRvbTogMjBweDsKK30KKworLmVy cm9yX21zZ19kaXYgcCB7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIGNvbG9y OiAjYjkyYzI4OworfQorCisvKiBJbiB3aXphcmQgc2VsZWN0MiBkcm9wZG93 biBkb2Vzbid0CisgKiBwb3B1cCBiZWNhdXNlIHotaW5kZXggb2YgYWxlcnRp ZnkKKyAqIHdpemFyZCBpcyBncmVhdGVyIHRoYW4gdGhlIHotaW5kZXgKKyAq IG9mIHNlbGVjdDIgZHJvcGRvd24uIFRvIG1ha2Ugc2VsZWN0MgorICogdmlz aWJsZSwgc2V0IHotaW5kZXggb2Ygc2VsZWN0MgorICogaGlnaGVyIHZhbHVl IHRoYW4gd2l6YXJkJ3MKKyAqLworLnNlbGVjdDItY29udGFpbmVyLS1vcGVu IHsKKyAgei1pbmRleDogMTAwMDA7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLnVpLmpzIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zdGF0aWMvanMvbm9kZS51aS5qcwppbmRleCBiODRiNmVl Li40N2YxMjY2IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0 YXRpYy9qcy9ub2RlLnVpLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c3RhdGljL2pzL25vZGUudWkuanMKQEAgLTI3OSw3ICsyNzksNyBAQCBmdW5j dGlvbigkLCBfLCBwZ0FkbWluLCBCYWNrYm9uZSwgQmFja2Zvcm0sIEFsZXJ0 aWZ5LCBOb2RlKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH07 CiAKLSAgICAgIHdoaWxlKHApIHsKKyAgICAgIHdoaWxlKHAgJiYgcC5sZW5n dGggPiAwKSB7CiAgICAgICAgIHRvcCA9IHAuZ2V0KDApLm9mZnNldFRvcCAr IHAuaGVpZ2h0KCk7CiAgICAgICAgIHAgPSBwLnBhcmVudCgpOwogICAgICAg ICBpZiAoaGFzU2Nyb2xsYmFyKHApKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3N0YXRpYy9qcy93aXphcmQuanMgYi93ZWIvcGdhZG1p bi9icm93c2VyL3N0YXRpYy9qcy93aXphcmQuanMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0NThlNAotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL3dpemFyZC5qcwpA QCAtMCwwICsxLDIyMiBAQAorZGVmaW5lKAorICAgIFsndW5kZXJzY29yZScs ICdiYWNrYm9uZScsICdwZ2FkbWluJywgJ3BnYWRtaW4uYnJvd3NlciddLAor ZnVuY3Rpb24oXywgQmFja2JvbmUsIHBnQWRtaW4sIHBnQnJvd3Nlcikgewor CisgIHBnQnJvd3NlciA9IHBnQnJvd3NlciB8fCBwZ0FkbWluLkJyb3dzZXIg fHwge307CisKKyAgLyogV2l6YXJkIGluZGl2aWR1YWwgUGFnZSBNb2RlbCAq LworICB2YXIgV2l6YXJkUGFnZSA9IHBnQnJvd3Nlci5XaXphcmRQYWdlID0g QmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICBkZWZhdWx0czogeworICAg ICAgaWQ6IHVuZGVmaW5lZCwgLyogSWQgKi8KKyAgICAgIHBhZ2VfdGl0bGU6 IHVuZGVmaW5lZCwgLyogUGFnZSBUaXRsZSAqLworICAgICAgdmlldzogdW5k ZWZpbmVkLCAvKiBBIEJhY2tib25lIFZpZXcgKi8KKyAgICAgIGh0bWw6IHVu ZGVmaW5lZCwgLyogSFRNTCB0YWdzIHRvIGJlIHJlbmRlcmVkICovCisgICAg ICBpbWFnZTogdW5kZWZpbmVkLCAvKiBMZWZ0IGhhbmQgc2lkZSBpbWFnZSAq LworICAgICAgZGlzYWJsZV9wcmV2OiBmYWxzZSwgLyogIFByZXZpb3VzIEJ1 dHRvbiBGbGFnICovCisgICAgICBkaXNhYmxlX25leHQ6IGZhbHNlLCAvKiAg TmV4dCBCdXR0b24gRmxhZyAqLworICAgICAgZGlzYWJsZV9jYW5jZWw6IGZh bHNlLCAvKiBDYW5jZWwgQnV0dG9uIEZsYWcgKi8KKyAgICAgIHNob3dfcHJv Z3Jlc3NfYmFyOiAnJywKKyAgICAgIC8qIENhbGxiYWNrIGZvciBPbkxvYWQg Ki8KKyAgICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy biB0cnVlOworICAgICAgfSwKKyAgICAgIC8qIENhbGxiYWNrIGZvciBiZWZv cmUgTmV4dCAqLworICAgICAgYmVmb3JlTmV4dDogZnVuY3Rpb24oKSB7Cisg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSwKKyAgICAgIG9uTmV4dDog ZnVuY3Rpb24oKXt9LAorICAgICAgb25CZWZvcmU6IGZ1bmN0aW9uKCkge30s CisgICAgICAvKiBDYWxsYmFjayBmb3IgYmVmb3JlIFByZXZpb3VzICovCisg ICAgICBiZWZvcmVQcmV2OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICB9CisgICAgfQorICB9KTsKKworICB2YXIgV2l6YXJk ID0gcGdCcm93c2VyLldpemFyZCA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsK KyAgICBvcHRpb25zOiB7CisgICAgICB0aXRsZTogJ1dpemFyZCcsIC8qIE1h aW4gV2l6YXJkIFRpdGxlICovCisgICAgICBpbWFnZTogJ2xlZnRfcGFuZWwu cG5nJywgLyogVE9ETzo6IFdlIGNhbiB1c2UgZGVmYXVsdCBpbWFnZSBoZXJl ICovCisgICAgICBjdXJyX3BhZ2U6IDAsIC8qIEN1cnJlbnQgUGFnZSB0byBM b2FkICovCisgICAgICBkaXNhYmxlX25leHQ6IGZhbHNlLAorICAgICAgZGlz YWJsZV9wcmV2OiBmYWxzZSwKKyAgICAgIGRpc2FibGVfZmluaXNoOiBmYWxz ZSwKKyAgICAgIGRpc2FibGVfY2FuY2VsOiBmYWxzZSwKKyAgICAgIGhlaWdo dDogNDAwLAorICAgICAgd2lkdGg6IDY1MCwKKyAgICAgIHNob3dfbGVmdF9w YW5lbDogdHJ1ZQorICAgIH0sCisgICAgdG1wbDogXy50ZW1wbGF0ZSgKKyAg ICAgICAiICAgIDxkaXYgY2xhc3M9J3BnYWRtaW4td2l6YXJkJyBzdHlsZT0n aGVpZ2h0OiA8JT0gdGhpcy5vcHRpb25zLmhlaWdodCAlPnB4OyB3aWR0aDog PCU9IHRoaXMub3B0aW9ucy53aWR0aCAlPnB4Jz4iCisgICAgICAgKyAiICAg ICAgPGRpdiBjbGFzcz0nd2l6YXJkLWhlYWRlciB3aXphcmQtYmFkZ2UnPiIK KyAgICAgICArICIgICAgICAgIDxkaXYgY2xhc3M9J3Jvdyc+IgorICAgICAg ICsgIiAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtc20tOSc+IgorICAgICAg ICsgIiAgICAgICAgICAgICAgPGgzPjxzcGFuIGlkPSdtYWluLXRpdGxlJz48 JT0gdGhpcy5vcHRpb25zLnRpdGxlICU+PC9zcGFuPiAtIDxzcGFuIGlkPSdz dGVwLXRpdGxlJz48JT0gcGFnZV90aXRsZSAlPjwvc3Bhbj48L2gzPiIKKyAg ICAgICArICIgICAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgICAg PC9kaXY+IgorICAgICAgICsgIiAgICAgIDwvZGl2PiIKKyAgICAgICArICIg ICAgICA8ZGl2IGNsYXNzPSd3aXphcmQtY29udGVudCBjb2wtc20tMTInPiIK KyAgICAgICArICIgICAgICAgIDwlIGlmKHRoaXMub3B0aW9ucy5zaG93X2xl ZnRfcGFuZWwpIHsgJT4iCisgICAgICAgKyAiICAgICAgICAgIDxkaXYgY2xh c3M9J2NvbC1zbS0zIHdpemFyZC1sZWZ0LXBhbmVsJz4iCisgICAgICAgKyAi ICAgICAgICAgICAgICA8aW1nIHNyYz0nPCU9IHRoaXMub3B0aW9ucy5pbWFn ZSAlPic+PC9kaXY+IgorICAgICAgICsgIiAgICAgICAgPCUgfSAlPiIKKyAg ICAgICArICIgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1zbS08JSBpZih0aGlz Lm9wdGlvbnMuc2hvd19sZWZ0X3BhbmVsKXsgJT42PCUgfSBlbHNlIHsgJT4x MjwlIH0gJT4gd2l6YXJkLXJpZ2h0LXBhbmVsJz4iCisgICAgICAgKyAiICAg ICAgICAgIDwlIGlmKCB0eXBlb2Ygc2hvd19kZXNjcmlwdGlvbiAhPSAgJ3Vu ZGVmaW5lZCcpeyAlPiIKKyAgICAgICArICIgICAgICAgICAgICA8ZGl2IGNs YXNzPSd3aXphcmQtZGVzY3JpcHRpb24nPiIKKyAgICAgICArICIgICAgICAg ICAgICAgIDwlPSBzaG93X2Rlc2NyaXB0aW9uICU+IgorICAgICAgICsgIiAg ICAgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICAgICAgPCUgfSAl PiIKKyAgICAgICArICIgICAgICAgICAgPGRpdiBjbGFzcz0nd2l6YXJkLXJp Z2h0LXBhbmVsX2NvbnRlbnQnPiIKKyAgICAgICArICIgICAgICAgICAgPC9k aXY+IgorICAgICAgICsgIiAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAg ICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICA8ZGl2IGNsYXNzPSdjb2wt c20tMTIgZXJyb3JfbXNnX2Rpdic+IgorICAgICAgICsgIiAgICAgICA8cD48 L3A+IgorICAgICAgICsgIiAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAg ICA8ZGl2IGNsYXNzPSdmb290ZXIgY29sLXNtLTEyJz4iCisgICAgICAgKyAi ICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnPiIKKyAgICAgICArICIgICAgICAg ICAgPGRpdiBjbGFzcz0nY29sLXNtLTQgd2l6YXJkLXByb2dyZXNzLWJhcic+ IgorICAgICAgICsgIiAgICAgICAgICAgICA8cD48JSBpZihzaG93X3Byb2dy ZXNzX2Jhcil7ICU+PCU9IHNob3dfcHJvZ3Jlc3NfYmFyICU+PCUgfSAlPjwv cD4iCisgICAgICAgKyAiICAgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIg ICAgICAgICAgPGRpdiBjbGFzcz0nY29sLXNtLTgnPiIKKyAgICAgICArICIg ICAgICAgICAgICA8ZGl2IGNsYXNzPSd3aXphcmQtYnV0dG9ucyc+IgorICAg ICAgICsgIiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuLXNtIGJ0 bi1wcmltYXJ5IHdpemFyZC1iYWNrJyA8JT10aGlzLm9wdGlvbnMuZGlzYWJs ZV9wcmV2ID8gJ2Rpc2FibGVkJyA6ICcnJT4+PGkgY2xhc3M9J2ZhIGZhLWJh Y2t3YXJkJz48L2k+IEJhY2s8L2J1dHRvbj4iCisgICAgICAgKyAiICAgICAg ICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4tc20gYnRuLXByaW1hcnkgd2l6 YXJkLW5leHQnIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxlX25leHQgPyAnZGlz YWJsZWQnIDogJyclPj5OZXh0IDxpIGNsYXNzPSdmYSBmYS1mb3J3YXJkJz48 L2k+PC9idXR0b24+IgorICAgICAgICsgIiAgICAgICAgICAgICAgPGJ1dHRv biBjbGFzcz0nYnRuLXNtIGJ0bi1kYW5nZXIgd2l6YXJkLWNhbmNlbCcgPCU9 dGhpcy5vcHRpb25zLmRpc2FibGVfY2FuY2VsID8gJ2Rpc2FibGVkJyA6ICcn JT4+PGkgY2xhc3M9J2ZhIGZhLWxnIGZhLWNsb3NlJz48L2k+Q2FuY2VsPC9i dXR0b24+IgorICAgICAgICsgIiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFz cz0nYnRuLXNtIGJ0bi1wcmltYXJ5IHdpemFyZC1maW5pc2gnIDwlPXRoaXMu b3B0aW9ucy5kaXNhYmxlX2ZpbmlzaCA/ICdkaXNhYmxlZCcgOiAnJyU+PkZp bmlzaDwvYnV0dG9uPiIKKyAgICAgICArICIgICAgICAgICAgICA8L2Rpdj4i CisgICAgICAgKyAiICAgICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAg ICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICA8L2Rpdj4iCisgICAgICAg KyAiICAgIDwvZGl2PiIpLAorICAgIGV2ZW50czogeworICAgICAgImNsaWNr IGJ1dHRvbi53aXphcmQtbmV4dCIgOiAibmV4dFBhZ2UiLAorICAgICAgImNs aWNrIGJ1dHRvbi53aXphcmQtYmFjayIgOiAicHJldlBhZ2UiLAorICAgICAg ImNsaWNrIGJ1dHRvbi53aXphcmQtY2FuY2VsIiA6ICJvbkNhbmNlbCIsCisg ICAgICAiY2xpY2sgYnV0dG9uLndpemFyZC1maW5pc2giIDogImZpbmlzaFdp emFyZCIsCisgICAgfSwKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRp b25zKSB7CisgICAgICB0aGlzLm9wdGlvbnMgPSBfLmV4dGVuZCh7fSwgdGhp cy5vcHRpb25zLCBvcHRpb25zLm9wdGlvbnMpOworICAgICAgdGhpcy5jdXJy UGFnZSA9IHRoaXMuY29sbGVjdGlvbi5hdCh0aGlzLm9wdGlvbnMuY3Vycl9w YWdlKS50b0pTT04oKTsKKyAgICB9LAorICAgIHJlbmRlcjogZnVuY3Rpb24o KSB7CisgICAgICB2YXIgZGF0YSA9IHRoaXMuY3VyclBhZ2U7CisKKyAgICAg IC8qIENoZWNrIFN0YXR1cyBvZiB0aGUgYnV0dG9ucyAqLworICAgICAgdGhp cy5vcHRpb25zLmRpc2FibGVfbmV4dCA9ICh0aGlzLm9wdGlvbnMuZGlzYWJs ZV9uZXh0ID8gdHJ1ZSA6IHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdl LmRpc2FibGVfbmV4dCkpOworICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVf cHJldiA9ICh0aGlzLm9wdGlvbnMuZGlzYWJsZV9wcmV2ID8gdHJ1ZSA6IHRo aXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLmRpc2FibGVfcHJldikpOwor ICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVfY2FuY2VsID0gKHRoaXMuY3Vy clBhZ2UuY2FuQ2FuY2VsID8gdHJ1ZSA6IHRoaXMuZXZhbEFTRnVuYyh0aGlz LmN1cnJQYWdlLmRpc2FibGVfY2FuY2VsKSk7CisKKyAgICAgIHRoYXQgPSB0 aGlzOworCisgICAgICAvKiBIVE1MIENvbnRlbnQgKi8KKyAgICAgIGlmIChk YXRhLmh0bWwpIHsgZGF0YS5jb250ZW50ID0gZGF0YS5odG1sOyB9CisgICAg ICAvKiBCYWNrYm9uZSBWaWV3ICovCisgICAgICBlbHNlIGlmIChkYXRhLnZp ZXcpIHsgZGF0YS5jb250ZW50ID0gZGF0YS52aWV3LnJlbmRlcigpLmVsO30K KworICAgICAgJCh0aGlzLmVsKS5odG1sKHRoaXMudG1wbChkYXRhKSk7Cisg ICAgICAkKHRoaXMuZWwpLmZpbmQoIi53aXphcmQtcmlnaHQtcGFuZWxfY29u dGVudCIpLmh0bWwoZGF0YS5jb250ZW50KTsKKworICAgICAgLyogT25Mb2Fk IENhbGxiYWNrICovCisgICAgICB0aGlzLm9uTG9hZCgpOworCisgICAgICBy ZXR1cm4gdGhpczsKKyAgICB9LAorICAgIG5leHRQYWdlOiBmdW5jdGlvbigp IHsKKyAgICAgIHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UuZWwgPSB0aGlzLiRl bDsKKyAgICAgIGlmICghdGhpcy5iZWZvcmVOZXh0KCkpIHsgcmV0dXJuIGZh bHNlOyB9CisKKyAgICAgIHBhZ2VfaWQgPSB0aGlzLm9uTmV4dCgpOworCisg ICAgICBpZiAocGFnZV9pZCApIHsKKyAgICAgICAgdGhpcy5jdXJyUGFnZSA9 IHRoaXMuY29sbGVjdGlvbi5nZXQocGFnZV9pZCkudG9KU09OKCk7CisgICAg ICAgIHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UgPSB0aGlzLmNvbGxlY3Rpb24u aW5kZXhPZih0aGlzLmNvbGxlY3Rpb24uZ2V0KHBhZ2VfaWQpKTsKKyAgICAg IH0KKyAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UgPCAo dGhpcy5jb2xsZWN0aW9uLmxlbmd0aC0xKSkgeworICAgICAgICB0aGlzLm9w dGlvbnMuY3Vycl9wYWdlID0gdGhpcy5vcHRpb25zLmN1cnJfcGFnZSArIDE7 CisgICAgICAgIHRoaXMuY3VyclBhZ2UgPSB0aGlzLmNvbGxlY3Rpb24uYXQo dGhpcy5vcHRpb25zLmN1cnJfcGFnZSkudG9KU09OKCk7CisgICAgICB9CisK KyAgICAgIHRoaXMuZW5hYmxlRGlzYWJsZU5leHQoKTsKKyAgICAgIHRoaXMu ZW5hYmxlRGlzYWJsZVByZXYoKTsKKworICAgICAgcmV0dXJuIHRoaXMucmVu ZGVyKCk7CisgICAgfSwKKyAgICBwcmV2UGFnZTogZnVuY3Rpb24oKSB7Cisg ICAgICBpZiAoIXRoaXMuYmVmb3JlUHJldigpKSB7IHJldHVybiBmYWxzZTsg fQorCisgICAgICBwYWdlX2lkID0gdGhpcy5vblByZXYoKTsKKworICAgICAg aWYgKHBhZ2VfaWQpeworICAgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5j b2xsZWN0aW9uLmdldChwYWdlX2lkKS50b0pTT04oKTsKKyAgICAgICAgdGhp cy5vcHRpb25zLmN1cnJfcGFnZSA9IHRoaXMuY29sbGVjdGlvbi5pbmRleE9m KHRoaXMuY29sbGVjdGlvbi5nZXQocGFnZV9pZCkpOworICAgICAgfQorICAg ICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmN1cnJfcGFnZSA+IDApIHsKKyAg ICAgICAgdGhpcy5vcHRpb25zLmN1cnJfcGFnZSA9IHRoaXMub3B0aW9ucy5j dXJyX3BhZ2UgLSAxOworICAgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5j b2xsZWN0aW9uLmF0KHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UpLnRvSlNPTigp OworICAgICAgfQorCisgICAgICB0aGlzLmVuYWJsZURpc2FibGVOZXh0KCk7 CisgICAgICB0aGlzLmVuYWJsZURpc2FibGVQcmV2KCk7CisKKyAgICAgIHJl dHVybiB0aGlzLnJlbmRlcigpOworICAgIH0sCisgICAgZmluaXNoV2l6YXJk OiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMub25GaW5pc2goKTsKKyAgICAg IHJldHVybiB0cnVlOworICAgIH0sCisgICAgZW5hYmxlRGlzYWJsZU5leHQ6 IGZ1bmN0aW9uKGRpc2FibGUpIHsKKyAgICAgICAgaWYgKHR5cGVvZihkaXNh YmxlKSAhPSAndW5kZWZpbmVkJykgeworICAgICAgICAgIHRoaXMub3B0aW9u cy5kaXNhYmxlX25leHQgPSBkaXNhYmxlOworICAgICAgICB9CisgICAgICAg IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UgPj0gKHRoaXMuY29s bGVjdGlvbi5sZW5ndGgtMSkpIHsKKyAgICAgICAgICB0aGlzLm9wdGlvbnMu ZGlzYWJsZV9uZXh0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl IHsKKyAgICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID0gZmFs c2U7CisgICAgICAgIH0KKyAgICB9LAorICAgIGVuYWJsZURpc2FibGVQcmV2 OiBmdW5jdGlvbihkaXNhYmxlKSB7CisgICAgICAgIGlmICh0eXBlb2YoZGlz YWJsZSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICB0aGlzLm9wdGlv bnMuZGlzYWJsZV9wcmV2ID0gZGlzYWJsZTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY3Vycl9wYWdlIDw9IDApIHsKKyAg ICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZV9wcmV2ID0gdHJ1ZTsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzLm9wdGlv bnMuZGlzYWJsZV9wcmV2ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9LAor ICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKCl7CisgICAgICByZXR1cm4gdGhp cy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2UuYmVmb3JlTmV4dCk7CisgICAg fSwKKyAgICBiZWZvcmVQcmV2OiBmdW5jdGlvbigpeworICAgICAgcmV0dXJu IHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLmJlZm9yZVByZXYpOwor ICAgIH0sCisgICAgb25QcmV2OiBmdW5jdGlvbigpeworICAgICAgcmV0dXJu IHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLm9uUHJldik7CisgICAg fSwKKyAgICBvbk5leHQ6IGZ1bmN0aW9uKCl7CisgICAgICByZXR1cm4gdGhp cy5ldmFsQVNGdW5jKHRoaXMuY3VyclBhZ2Uub25OZXh0KTsKKyAgICB9LAor ICAgIG9uTG9hZDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5l dmFsQVNGdW5jKHRoaXMuY3VyclBhZ2Uub25Mb2FkKTsKKyAgICB9LAorICAg IG9uRmluaXNoOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0cnVlOwor ICAgIH0sCisgICAgb25DYW5jZWw6IGZ1bmN0aW9uKCkgeworICAgICAgdGhp cy4kZWwucmVtb3ZlKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAor ICAgIGV2YWxBU0Z1bmM6IGZ1bmN0aW9uKGZ1bmMsIGN0eCkgeworICAgICAg dmFyIHNlbGYgPSB0aGlzOworICAgICAgY3R4ID0gY3R4IHx8IHNlbGYuY3Vy clBhZ2U7CisKKyAgICAgIHJldHVybiAoXy5pc0Z1bmN0aW9uKGZ1bmMpID8g ZnVuYy5hcHBseShjdHgsIFtzZWxmXSkgOiBmdW5jKTsKKyAgICB9CisgIH0p OworCisgIHJldHVybiBwZ0Jyb3dzZXI7CisKK30pOwpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL19faW5pdF9fLnB5IGIv d2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL19faW5pdF9fLnB5Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzA5N2EKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXph cmQvX19pbml0X18ucHkKQEAgLTAsMCArMSwyOTEgQEAKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNiwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkltcGxlbWVudHMg R3JhbnQgV2l6YXJkIiIiCisKK2ltcG9ydCBqc29uCitmcm9tIGZsYXNrIGlt cG9ydCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QsIGN1cnJlbnRfYXBwCitm cm9tIGZsYXNrLmV4dC5iYWJlbCBpbXBvcnQgZ2V0dGV4dAorZnJvbSBwZ2Fk bWluLnV0aWxzLmFqYXggaW1wb3J0IG1ha2VfcmVzcG9uc2UgYXMgYWpheF9y ZXNwb25zZSwgXAorICAgIG1ha2VfanNvbl9yZXNwb25zZSwgaW50ZXJuYWxf c2VydmVyX2Vycm9yCitmcm9tIHBnYWRtaW4udXRpbHMuZHJpdmVyIGltcG9y dCBnZXRfZHJpdmVyCitmcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9E UklWRVIKK2Zyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2Vy dmVycy51dGlscyBpbXBvcnQgcGFyc2VfcHJpdl90b19kYgorZnJvbSBwZ2Fk bWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCitmcm9tIGZsYXNrIGlt cG9ydCBSZXNwb25zZSwgdXJsX2ZvcgorZnJvbSBmbGFzay5leHQuc2VjdXJp dHkgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCitmcm9tIHVybGxpYiBpbXBvcnQg dW5xdW90ZQorCisjIHNldCB0ZW1wbGF0ZSBwYXRoIGZvciBzcWwgc2NyaXB0 cwordGVtcGxhdGVfcGF0aCA9ICdncmFudF93aXphcmQvc3FsJworTU9EVUxF X05BTUUgPSAnZ3JhbnRfd2l6YXJkJworCisKK2NsYXNzIEdyYW50V2l6YXJk TW9kdWxlKFBnQWRtaW5Nb2R1bGUpOgorICAgICIiIgorICAgIGNsYXNzIEdy YW50V2l6YXJkTW9kdWxlKE9iamVjdCk6CisKKyAgICAgICAgSXQgaXMgYSB3 aXphcmQgd2hpY2ggaW5oZXJpdHMgUGdBZG1pbk1vZHVsZQorICAgICAgICBj bGFzcyBhbmQgZGVmaW5lIG1ldGhvZHMgdG8gbG9hZCBpdHMgb3duCisgICAg ICAgIGphdmFzY3JpcHQgZmlsZS4KKyAgICAiIiIKKyAgICBkZWYgZ2V0X293 bl9zdHlsZXNoZWV0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJl dHVybnM6CisgICAgICAgICAgICBsaXN0OiB0aGUgc3R5bGVzaGVldHMgdXNl ZCBieSB0aGlzIG1vZHVsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHN0eWxl c2hlZXRzID0gW10KKyAgICAgICAgZm9yIChlbmRwb2ludCwgZmlsZW5hbWUp IGluIFsKKyAgICAgICAgICAgICAgICAoJ2Jyb3dzZXIuc3RhdGljJywgJ2Nz cy93aXphcmQuY3NzJyksCisgICAgICAgICAgICAgICAgKCdncmFudF93aXph cmQuc3RhdGljJywgJ2Nzcy9ncmFudF93aXphcmQuY3NzJyksCisgICAgICAg ICAgICAgICAgXToKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzLmFwcGVuZCh1 cmxfZm9yKGVuZHBvaW50LCBmaWxlbmFtZT1maWxlbmFtZSkpCisgICAgICAg IHJldHVybiBzdHlsZXNoZWV0cworCisgICAgZGVmIGdldF9vd25famF2YXNj cmlwdHMoc2VsZik6CisgICAgICAgICIiIiIKKyAgICAgICAgUmV0dXJuczoK KyAgICAgICAgICAgIGxpc3Q6IGpzIGZpbGVzIHVzZWQgYnkgdGhpcyBtb2R1 bGUKKyAgICAgICAgIiIiCisgICAgICAgIHNjcmlwdHMgPSBbXQorICAgICAg ICBzY3JpcHRzLmFwcGVuZCh7CisgICAgICAgICAgICAnbmFtZSc6ICdwZ2Fk bWluLnRvb2xzLmdyYW50X3dpemFyZCcsCisgICAgICAgICAgICAncGF0aCc6 IHVybF9mb3IoJ2dyYW50X3dpemFyZC5pbmRleCcpICsgJ2dyYW50X3dpemFy ZCcsCisgICAgICAgICAgICAnd2hlbic6IE5vbmUKKyAgICAgICAgfSkKKyAg ICAgICAgc2NyaXB0cy5hcHBlbmQoeworICAgICAgICAgICAgJ25hbWUnOiAn cGdhZG1pbi5icm93c2VyLndpemFyZCcsCisgICAgICAgICAgICAncGF0aCc6 IHVybF9mb3IoJ2Jyb3dzZXIuc3RhdGljJywgZmlsZW5hbWU9J2pzL3dpemFy ZCcpLAorICAgICAgICAgICAgJ3doZW4nOiBOb25lCisgICAgICAgIH0pCisg ICAgICAgIHJldHVybiBzY3JpcHRzCisKKyMgQ3JlYXRlIGJsdWVwcmludCBm b3IgR3JhbnRXaXphcmRNb2R1bGUgY2xhc3MKK2JsdWVwcmludCA9IEdyYW50 V2l6YXJkTW9kdWxlKAorICAgIE1PRFVMRV9OQU1FLCBfX25hbWVfXywgc3Rh dGljX3VybF9wYXRoPScnLAorICAgIHVybF9wcmVmaXg9Jy93aXphcmQnKQor CisKK0BibHVlcHJpbnQucm91dGUoIi8iKQorQGxvZ2luX3JlcXVpcmVkCitk ZWYgaW5kZXgoKToKKyAgICBwYXNzCisKKworQGJsdWVwcmludC5yb3V0ZSgi L2dyYW50X3dpemFyZC5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzY3Jp cHQoKToKKyAgICAiIiJyZW5kZXIgb3duIGphdmFzY3JpcHQiIiIKKyAgICBy ZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICJncmFudF93aXphcmQvanMvZ3JhbnRfd2l6YXJkLmpz IiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAor ICAgICAgICAgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2Ny aXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKAorICAgICcvZ3JhbnRfd2l6 YXJkL3Byb3BlcnRpZXMvPGludDpnaWQ+LzxpbnQ6c2lkPi88aW50OmRpZD4n CisgICAgJy88aW50Om5vZGVfaWQ+Lzxub2RlX25hbWU+Lzxub2RlX3R5cGU+ Lzxuc3BuYW1lPi8nLAorICAgIG1ldGhvZHM9KCdHRVQnLCAnUE9TVCcpKQor QGxvZ2luX3JlcXVpcmVkCitkZWYgcHJvcGVydGllcyhnaWQsIHNpZCwgZGlk LCBub2RlX2lkLCBub2RlX25hbWUsIG5vZGVfdHlwZSwgbnNwbmFtZSk6Cisg ICAgIiIiSXQgZmV0Y2hlcyB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgdHlw ZXMKKyAgICAgICBhbmQgcmVuZGVyIGludG8gc2VsZWN0aW9uIHBhZ2Ugb2Yg d2l6YXJkCisgICAgIiIiCisKKyAgICAjIHVucXVvdGUgZW5jb2RlZCB1cmwg cGFyYW1ldGVyCisgICAgbm9kZV90eXBlID0gdW5xdW90ZShub2RlX3R5cGUp CisgICAgbnNwbmFtZSA9IHVucXVvdGUobnNwbmFtZSkKKworICAgIHJlc19k YXRhID0gW10KKyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxU X0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHNpZCkKKyAgICBjb25uID0g bWFuYWdlci5jb25uZWN0aW9uKGRpZD1kaWQpCisKKyAgICAjIEZldGNoIGZ1 bmN0aW9ucyBhZ2FpbnN0IHNjaGVtYQorICAgIGlmIG5vZGVfdHlwZSBpbiBb J3NjaGVtYSddOgorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oCisgICAgICAgICAgICBbdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRp ZXMuc3FsJ10pLAorICAgICAgICAgICAgbm9kZV9pZD1ub2RlX2lkLCBub2Rl X25hbWU9bm9kZV9uYW1lLAorICAgICAgICAgICAgdHlwZT1ub2RlX3R5cGUs IG5zcG5hbWU9bnNwbmFtZSkKKworICAgICAgICBzdGF0dXMsIHJlcyA9IGNv bm4uZXhlY3V0ZV9kaWN0KFNRTCkKKworICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCisKKyAgICAgICAgcmVzX2RhdGEuZXh0ZW5kKHJlc1sn cm93cyddKQorCisgICAgIyBGZXRjaCB0cmlnZ2VyIGZ1bmN0aW9ucworICAg IGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVtYScsICd0cmlnZ2VyX2Z1bmN0aW9u J106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigK KyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQsIG5vZGVfbmFtZT1u b2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPSd0cmlnZ2VyX2Z1bmN0aW9u JywgbnNwbmFtZT1uc3BuYW1lKQorICAgICAgICBzdGF0dXMsIHJlcyA9IGNv bm4uZXhlY3V0ZV9kaWN0KFNRTCkKKworICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCisKKyAgICAgICAgcmVzX2RhdGEuZXh0ZW5kKHJlc1sn cm93cyddKQorCisgICAgIyBGZXRjaCBTZXF1ZW5jZXMgYWdhaW5zdCBzY2hl bWEKKyAgICBpZiBub2RlX3R5cGUgaW4gWydzY2hlbWEnLCAnc2VxdWVuY2Un XToKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAor ICAgICAgICAgICAgW3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCdd KSwKKyAgICAgICAgICAgIG5vZGVfaWQ9bm9kZV9pZCwgbm9kZV9uYW1lPW5v ZGVfbmFtZSwKKyAgICAgICAgICAgIHR5cGU9J3NlcXVlbmNlJywgbnNwbmFt ZT1uc3BuYW1lKQorCisgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVj dXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1y ZXMpCisgICAgICAgIHJlc19kYXRhLmV4dGVuZChyZXNbJ3Jvd3MnXSkKKwor ICAgICMgRmV0Y2ggVGFibGVzIGFnYWluc3Qgc2NoZW1hCisgICAgaWYgbm9k ZV90eXBlIGluIFsnc2NoZW1hJywgJ3RhYmxlJ106CisgICAgICAgIFNRTCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgIFt0ZW1w bGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICBu b2RlX2lkPW5vZGVfaWQsIG5vZGVfbmFtZT1ub2RlX25hbWUsCisgICAgICAg ICAgICB0eXBlPSd0YWJsZScsIG5zcG5hbWU9bnNwbmFtZSkKKworICAgICAg ICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIHJlc19k YXRhLmV4dGVuZChyZXNbJ3Jvd3MnXSkKKworICAgICMgRmV0Y2ggVmlld3Mg YWdhaW5zdCBzY2hlbWEKKyAgICBpZiBub2RlX3R5cGUgaW4gWydzY2hlbWEn LCAnY29sbC12aWV3J106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJv cGVydGllcy5zcWwnXSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQs IG5vZGVfbmFtZT1ub2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPSdjb2xs LXZpZXcnLCBuc3BuYW1lPW5zcG5hbWUpCisKKyAgICAgICAgc3RhdHVzLCBy ZXMgPSBjb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICByZXNfZGF0YS5leHRlbmQo cmVzWydyb3dzJ10pCisKKyAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAg ICAgICAgICAgIHJlc3BvbnNlPXJlc19kYXRhLAorICAgICAgICAgICAgc3Rh dHVzPTIwMAorICAgICAgICAgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUo CisgICAgJy9ncmFudF93aXphcmQvbXNxbC88aW50OmdpZD4vPGludDpzaWQ+ LzxpbnQ6ZGlkPi88bm9kZV90eXBlPi88bnNwbmFtZT4vJywKKyAgICBtZXRo b2RzPSgnR0VUJywgJ1BPU1QnKSkKK2RlZiBtc3FsKGdpZCwgc2lkLCBkaWQs IG5vZGVfdHlwZSwgbnNwbmFtZSk6CisgICAgIiIiCisgICAgVGhpcyBmdW5j dGlvbiB3aWxsIHJldHVybiBtb2RpZmllZCBTUUwKKyAgICAiIiIKKworICAg ICMgdW5xdW90ZSBlbmNvZGVkIHVybCBwYXJhbWV0ZXIKKyAgICBub2RlX3R5 cGUgPSB1bnF1b3RlKG5vZGVfdHlwZSkKKyAgICBuc3BuYW1lID0gdW5xdW90 ZShuc3BuYW1lKQorCisgICAgZGF0YSA9IHt9CisgICAgZm9yIGssIHYgaW4g cmVxdWVzdC5hcmdzLml0ZW1zKCk6CisgICAgICAgIHRyeToKKyAgICAgICAg ICAgIGRhdGFba10gPSBqc29uLmxvYWRzKHYpCisgICAgICAgIGV4Y2VwdCBW YWx1ZUVycm9yOgorICAgICAgICAgICAgZGF0YVtrXSA9IHYKKworICAgICMg Rm9ybSBkYiBjb25uZWN0aW9uCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIo UEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihzaWQpCisg ICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9ZGlkKQorCisgICAg YWNscyA9IFtdCisgICAgdHJ5OgorICAgICAgICBhY2xzID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgs ICdhbGxvd2VkX2FjbC5qc29uJ10pCisgICAgICAgICAgICApCisgICAgICAg IGFjbHMgPSBqc29uLmxvYWRzKGFjbHMpCisgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBlOgorICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9u KGUpCisKKyAgICB0cnk6CisKKyAgICAgICAgIyBQYXJzZSBwcml2aWxlZ2Vz CisgICAgICAgIGlmICdhY2wnIGluIGRhdGE6CisgICAgICAgICAgICBkYXRh WydhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsnYWNsJ10sIGFjbHNb bm9kZV90eXBlXVsnYWNsJ10pCisKKyAgICAgICAgIyBQYXNzIGRhdGFiYXNl IG9iamVjdHMgYW5kIGdldCBTUUwgZm9yIHByaXZpbGVnZXMKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAg W3RlbXBsYXRlX3BhdGgsICdncmFudC5zcWwnXSksCisgICAgICAgICAgICBk YXRhPWRhdGEsIG5zcG5hbWU9bnNwbmFtZSwgY29ubj1jb25uKQorCisgICAg ICAgIHJlcyA9IHsnZGF0YSc6IFNRTH0KKworICAgICAgICByZXR1cm4gYWph eF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJlc3BvbnNlPXJlcywKKyAgICAg ICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICkKKworICAgIGV4Y2Vw dCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9y ZXNwb25zZSgKKyAgICAgICAgICAgIHN0YXR1cz00MTAsCisgICAgICAgICAg ICBzdWNjZXNzPTAsCisgICAgICAgICAgICBlcnJvcm1zZz1lLm1lc3NhZ2UK KyAgICAgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUoCisgICAgJy9ncmFu dF93aXphcmQvc2F2ZS88aW50OmdpZD4vPGludDpzaWQ+LzxpbnQ6ZGlkPi8n CisgICAgJzxub2RlX3R5cGU+Lzxuc3BuYW1lPi8nLAorICAgIG1ldGhvZHM9 KCdHRVQnLCAnUE9TVCcpKQorZGVmIHNhdmUoZ2lkLCBzaWQsIGRpZCwgbm9k ZV90eXBlLCBuc3BuYW1lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9u IHdpbGwgYXBwbHkgdGhlIHByaXZpbGVnZXMgdG8gdGhlIHNlbGVjdGVkCisg ICAgRGF0YWJhc2UgT2JqZWN0cworICAgICIiIgorCisgICAgIyB1bnF1b3Rl IGVuY29kZWQgdXJsIHBhcmFtZXRlcgorICAgIG5vZGVfdHlwZSA9IHVucXVv dGUobm9kZV90eXBlKQorICAgIG5zcG5hbWUgPSB1bnF1b3RlKG5zcG5hbWUp CisKKyAgICBkYXRhID0gcmVxdWVzdC5mb3JtIGlmIHJlcXVlc3QuZm9ybSBl bHNlIGpzb24ubG9hZHMocmVxdWVzdC5kYXRhLmRlY29kZSgpKQorCisgICAg IyBGb3JtIGRiIGNvbm5lY3Rpb24gYW5kIHdlIHVzZSBjb25uIHRvIGV4ZWN1 dGUgc3FsCisgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9E UklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcihzaWQpCisgICAgY29ubiA9IG1h bmFnZXIuY29ubmVjdGlvbihkaWQ9ZGlkKQorCisgICAgYWNscyA9IFtdCisg ICAgdHJ5OgorICAgICAgICBhY2xzID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgIi8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsICdhbGxvd2VkX2Fj bC5qc29uJ10pCisgICAgICAgICAgICApCisgICAgICAgIGFjbHMgPSBqc29u LmxvYWRzKGFjbHMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAg ICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKGUpCisKKyAgICB0 cnk6CisKKyAgICAgICAgIyBQYXJzZSBwcml2aWxlZ2VzCisgICAgICAgIGlm ICdhY2wnIGluIGRhdGE6CisgICAgICAgICAgICBkYXRhWydhY2wnXSA9IHBh cnNlX3ByaXZfdG9fZGIoCisgICAgICAgICAgICAgICAgZGF0YVsnYWNsJ10s CisgICAgICAgICAgICAgICAgYWNsc1tub2RlX3R5cGVdWydhY2wnXQorICAg ICAgICAgICAgICAgICkKKworICAgICAgICAjIFBhc3MgZGF0YWJhc2Ugb2Jq ZWN0cyBhbmQgZ2V0IFNRTCBmb3IgcHJpdmlsZWdlcworICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICBbdGVt cGxhdGVfcGF0aCwgJ2dyYW50LnNxbCddKSwKKyAgICAgICAgICAgIGRhdGE9 ZGF0YSwgbnNwbmFtZT1uc3BuYW1lLCBjb25uPWNvbm4pCisKKyAgICAgICAg c3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICByZXR1cm4g bWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgc3VjY2Vzcz0xLAor ICAgICAgICAgICAgaW5mbz0iUHJpdmlsZWdlcyBBcHBsaWVkIgorICAgICAg ICApCisKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9ZS5tZXNzYWdl KQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJk L3N0YXRpYy9jc3MvZ3JhbnRfd2l6YXJkLmNzcyBiL3dlYi9wZ2FkbWluL3Rv b2xzL2dyYW50X3dpemFyZC9zdGF0aWMvY3NzL2dyYW50X3dpemFyZC5jc3MK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwM2M2OAot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dp emFyZC9zdGF0aWMvY3NzL2dyYW50X3dpemFyZC5jc3MKQEAgLTAsMCArMSw2 NiBAQAorLyoqIEdyYW50IFdpemFyZCBDU1MgKiovCisKKy8qKgorICBDU1Mg dG8gbWFrZSBkYiBvYmplY3QgdHlwZSB0YWJsZQorICBmaXhlZCBzbyB0aGF0 IHRib2R5IGNvbnRlbnQgbWF5CisgIHNjcm9sbAorICovCisub2JqZWN0X3R5 cGVfdGFibGUgdGhlYWQgdHIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg IGRpc3BsYXk6IGJsb2NrOworfQorCisub2JqZWN0X3R5cGVfdGFibGUgdGJv ZHkgeworICBkaXNwbGF5OiBibG9jazsKKyAgb3ZlcmZsb3cteTogc2Nyb2xs OworICBoZWlnaHQ6IDE4MHB4OworfQorCisub2JqZWN0X3R5cGVfdGFibGUg dGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDEpLAorLm9iamVjdF90eXBlX3RhYmxl IHRoZWFkIHRyIHRoOm50aC1jaGlsZCgxKSB7CisgIHdpZHRoOiAyOHB4Owor ICBtaW4td2lkdGg6IDI4cHg7Cit9CisKKy5vYmplY3RfdHlwZV90YWJsZSB0 Ym9keSB0ciB0ZDpudGgtY2hpbGQoMiksCisub2JqZWN0X3R5cGVfdGFibGUg dGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpIHsKKyAgd2lkdGg6IDE4NXB4Owor ICBtaW4td2lkdGg6IDE4NXB4OworfQorCisub2JqZWN0X3R5cGVfdGFibGUg dGJvZHkgdHIgdGQ6bnRoLWNoaWxkKDMpLAorLm9iamVjdF90eXBlX3RhYmxl IHRoZWFkIHRyIHRoOm50aC1jaGlsZCgzKSB7CisgIHdpZHRoOiAxMTBweDsK KyAgbWluLXdpZHRoOiAxMTBweDsKK30KKworLm9iamVjdF90eXBlX3RhYmxl IHRib2R5IHRyIHRkOm50aC1jaGlsZCg0KSwKKy5vYmplY3RfdHlwZV90YWJs ZSB0aGVhZCB0ciB0aDpudGgtY2hpbGQoNCkgeworICB3aWR0aDogMjQ0cHg7 Cit9CisKKy8qKiBPdmVycmlkZSBCYWNrZ3JpZCBmaWx0ZXIgQ1NTICoqLwor LmJhY2tncmlkLWZpbHRlci5mb3JtLXNlYXJjaCB7CisgIGZsb2F0OiBsZWZ0 OworICBtYXJnaW46IDBweCA1cHggNXB4IDA7Cit9CisKKy8qKiBDdXN0b20g c3R5bGluZyBmb3IgQ29kZW1pcnJvciBmaWVsZCAqKi8KKy53aXphcmQtcmln aHQtcGFuZWxfY29udGVudCB7CisgIGJvcmRlcjogMXB4IHNvbGlkZSAjY2Nj OworfQorCisud2l6YXJkLXJpZ2h0LXBhbmVsX2NvbnRlbnQgLkNvZGVNaXJy b3IgeworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBoZWlnaHQ6IDI4 NXB4ICFpbXBvcnRhbnQ7CisgIG1pbi1oZWlnaHQ6IDI4NXB4ICFpbXBvcnRh bnQ7Cit9CisKKy53aXphcmQtcmlnaHQtcGFuZWxfY29udGVudCAuQ29kZU1p cnJvci1saW5lbnVtYmVyIHsKKyAgYmFja2dyb3VuZDogI0Y3RjdGNzsKKyAg Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0RERERERDsKK30KKworLndpemFy ZC1yaWdodC1wYW5lbF9jb250ZW50IC5Db2RlTWlycm9yLWd1dHRlcnMgewor ICBtaW4taGVpZ2h0OiAyODVweCAhaW1wb3J0YW50OworfQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9n cmFudF93aXphcmQvanMvZ3JhbnRfd2l6YXJkLmpzIGIvd2ViL3BnYWRtaW4v dG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvanMv Z3JhbnRfd2l6YXJkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjkwMjg3YjIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9q cy9ncmFudF93aXphcmQuanMKQEAgLTAsMCArMSw5NjcgQEAKK2RlZmluZShb CisgICAgICAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5z dHJpbmcnLCAnYWxlcnRpZnknLAorICAgICAgJ3BnYWRtaW4uYnJvd3Nlcics ICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdwZ2FkbWluLmJyb3dzZXIubm9k ZScsCisgICAgICAnYmFja2dyaWQuc2VsZWN0LmFsbCcsICdiYWNrZ3JpZC5m aWx0ZXInLCAnYmFja2JvbmUucGFnaW5hdG9yJywKKyAgICAgICdiYWNrZ3Jp ZC5wYWdpbmF0b3InLCAncGdhZG1pbi5icm93c2VyLnNlcnZlci5wcml2aWxl Z2UnLAorICAgICAgJ3BnYWRtaW4uYnJvd3Nlci53aXphcmQnLAorICAgICAg XSwKKworZnVuY3Rpb24oJCwgXywgUywgYWxlcnRpZnksIHBnQnJvd3Nlciwg QmFja2JvbmUsIEJhY2tncmlkLCBwZ05vZGUpIHsKKworICBpZiAocGdCcm93 c2VyLkdyYW50V2l6YXJkKSB7CisgICAgcmV0dXJuIHBnQnJvd3Nlci5HcmFu dFdpemFyZDsKKyAgfQorCisgIC8qKgorICAgIEl0IGlzIHN1YiBtb2RlbCBm b3IgZmllbGQgIk9iamVjdHMiLiBJdCBoYXMgZmllbGRzCisgICAgZm9yIGRh dGFiYXNlIG9iamVjdCB0eXBlcyBzdWNoIGFzIFNjaGVtYXMsIFZpZXdzIGFu ZAorICAgIFNlcXVlbmNlIGV0Yy4KKyAgKi8KKyAgdmFyIERhdGFiYXNlT2Jq ZWN0TW9kZWwgPSBwZ05vZGUuTW9kZWwuZXh0ZW5kKHsKKyAgICBkZWZhdWx0 czogeworICAgICAgc2VsZWN0ZWQ6IGZhbHNlLAorICAgICAgaWNvbjogJ2lj b24tdW5rbm93bicsCisgICAgICBuYW1lOiB1bmRlZmluZWQsCisgICAgICBu c3BuYW1lOiB1bmRlZmluZWQsCisgICAgICBwcm9hcmdzOiB1bmRlZmluZWQs CisgICAgICBvYmplY3RfdHlwZTogdW5kZWZpbmVkLAorICAgICAgb2JqZWN0 X2lkOiB1bmRlZmluZWQKKyAgICB9LAorICAgIGlkQXR0cmlidXRlOiAnb2Jq ZWN0X2lkJywKKyAgICBwYXJzZTogZnVuY3Rpb24ocmVzKSB7CisKKyAgICAg IC8vIENyZWF0ZSB1bmlxdWUgb2JqZWN0IGlkCisgICAgICByZXMub2JqZWN0 X2lkID0gcmVzLm9iamVjdF90eXBlICsgcmVzLm5zcG5hbWUgKyAnIicgKyBy ZXMubmFtZTsKKworICAgICAgcmV0dXJuIHJlczsKKyAgICB9LAorCisgICAg dmFsaWRhdGU6IGZ1bmN0aW9uKCkgeworCisgICAgICAvKgorICAgICAgKiBU cmlnZ2VycyBlcnJvciBtZXNzYWdlcyBmb3Igb2JqZWN0IHR5cGVzICJzZWxl Y3RlZCIKKyAgICAgICogaWYgaXQgaXMgZW1wdHkvdW5kZWZpbmVkL251bGwK KyAgICAgICovCisgICAgICB2YXIgZXJyID0ge30sCisgICAgICAgIGVycm1z ZywKKyAgICAgICAgbm9kZSA9IHRoaXMuZ2V0KCdvYmplY3RzJykudG9KU09O KCk7CisgICAgICBpZiAoXy5pc0VtcHR5KG5vZGUpKSB7CisgICAgICAgIGVy clsnc2VsZWN0ZWQnXSA9ICd7eyBfKCJQbGVhc2Ugc2VsZWN0IGFueSBkYXRh YmFzZSBvYmplY3QgdHlwZSIpIH19JzsKKyAgICAgICAgZXJybXNnID0gZXJy bXNnIHx8IGVyclsnc2VsZWN0ZWQnXTsKKyAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnNldCgnc2VsZWN0ZWQnLCBlcnJtc2cpOworICAgICAgICByZXR1cm4g ZXJybXNnOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnVuc2V0KCdzZWxlY3RlZCcpOworICAgICAgfQorICAgICAgcmV0dXJu IG51bGw7CisgICAgfQorICB9KTsKKworICAvLyBEZWZpbmUgcHJpdmlsZWdl cyBmb3IgdmFyaW91cyB0eXBlcyBvZiBub2RlcworICB2YXIgcHJpdkRpY3Qg PSB7CisgICAgJ3NjaGVtYSc6IFsnYScsICdyJywgJ3cnLCAnZCcsICdEJywg J3gnLCAndCcsICdVJywgJ1gnXSwKKyAgICAnY29sbC1mdW5jdGlvbic6IFsn WCddLAorICAgICdjb2xsLXNlcXVlbmNlJzogWydhJywgJ3cnLCAnVSddLAor ICAgICdjb2xsLXRhYmxlJzpbJ2EnLCAndycsICdVJywgJ2QnLCAnRCcsICd4 JywgJ3QnXSwKKyAgICAnY29sbC12aWV3JzogWydhJywgJ3InLCAndycsICdk JywgJ0QnLCAneCcsICd0J10sCisgIH07CisKKyAgLy8gRGVmaW5lIGNvbHVt bnMgZm9yIHRoZSBEYiBPYmplY3QgVHlwZXMgR3JpZAorICB2YXIgY29sdW1u cyA9IFt7CisgICAgbmFtZTogInNlbGVjdGVkIiwKKworICAgIC8qCisgICAg IE92ZXJyaWRlIHJlbmRlciBtZXRob2Qgb2YgQmFja2dyaWQuRXh0ZW5zaW9u LlNlbGVjdFJvd0NlbGwKKyAgICAgY2xhc3MuIEl0IGhhcyBhbiBpc3N1ZTog SXQgZG9lc24ndCBtYXJrIHJvd3MgY2hlY2tlZCBpZiB3ZSBtb3ZlIHRvIG5l eHQKKyAgICAgcGFnZSBhbmQgdGhlbiBnbyBiYWNrIHRvIHByZXZpb3VzIHBh Z2UuIGJ1dCBpdCBtdXN0IHNob3cuCisgICAgIHNvIHdlIGhhbmRsZSB0aGlz IGNhc2UgYnkgb3ZlcnJpZGluZyB0aGUgcmVuZGVyIG1ldGhvZC4KKyAgICAq LworICAgIGNlbGw6IEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3RSb3dDZWxs LmV4dGVuZCh7CisgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworCisgICAg ICAgIC8vIFVzZSB0aGUgQmFja2Zvcm0gQ29udHJvbCdzIHJlbmRlciBmdW5j dGlvbgorICAgICAgICBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0Um93Q2Vs bC5wcm90b3R5cGUucmVuZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisK KyAgICAgICAgdmFyIGNvbCA9IHRoaXMuY29sdW1uLmdldCgnbmFtZScpOwor ICAgICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLmhhcyhjb2wp KSB7CisgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZ2V0KGNvbCkpIHsKKyAg ICAgICAgICAgIHRoaXMuY2hlY2tib3goKS5wcm9wKCJjaGVja2VkIiwgdHJ1 ZSk7CisgICAgICAgICAgICB0aGlzLiRlbC5wYXJlbnQoKS50b2dnbGVDbGFz cygic2VsZWN0ZWQiLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXMubW9kZWwu dHJpZ2dlcigiYmFja2dyaWQ6c2VsZWN0ZWQiLCB0aGlzLm1vZGVsLCB0cnVl KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgICB9CisgICAgfSksCisKKyAgICBoZWFkZXJDZWxsOiAic2Vs ZWN0LWFsbCIsCisKKyAgfSx7CisgICAgbmFtZTogIm9iamVjdF90eXBlIiwK KyAgICBsYWJlbDogIk9iamVjdCBUeXBlIiwKKyAgICBlZGl0YWJsZTogZmFs c2UsCisgICAgY2VsbDogQmFja2dyaWQuQ2VsbC5leHRlbmQoeworICAgICAg cmVuZGVyOiBmdW5jdGlvbigpIHsKKworICAgICAgICAvLyBPdmVycmlkZSBy ZW5kZXIgdG8gYWRkIGljb24gdG8gRGIgT2JqZWN0IGNvbHVtbgorICAgICAg ICBCYWNrZ3JpZC5DZWxsLnByb3RvdHlwZS5yZW5kZXIuYXBwbHkodGhpcywg YXJndW1lbnRzKTsKKyAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3ModGhpcy5t b2RlbC5nZXQoJ2ljb24nKSkuY3NzKHsicGFkZGluZy1sZWZ0IjogIjIycHgi fSk7CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisgICAgfSkK KyAgfSx7CisgICAgbmFtZTogIm5zcG5hbWUiLAorICAgIGxhYmVsOiAiU2No ZW1hIiwKKyAgICBjZWxsOiAic3RyaW5nIiwKKyAgICBlZGl0YWJsZTogZmFs c2UKKyAgfSx7CisgICAgbmFtZTogIm5hbWUiLAorICAgIGxhYmVsOiAiTmFt ZSIsCisgICAgY2VsbDogInN0cmluZyIsCisgICAgZWRpdGFibGU6IGZhbHNl CisgIH1dOworCisgIC8vIENyZWF0ZSBhbiBPYmplY3QgR3JhbnRXaXphcmQg b2YgcGdCcm93c2VyIGNsYXNzCisgIHBnQnJvd3Nlci5HcmFudFdpemFyZCAg PSB7CisgICAgaW5pdDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5p bml0aWFsaXplZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAg ICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAvLyBEZWZp bmUgbGlzdCBvZiBub2RlcyBvbiB3aGljaCBncmFudCB3aXphcmQgb3B0aW9u IGFwcGVhcnMKKyAgICAgIHZhciBzdXBwb3J0ZWRfbm9kZXMgPSBbCisgICAg ICAgICAgICAnc2NoZW1hJywgJ2NvbGwtZnVuY3Rpb24nLAorICAgICAgICAg ICAgJ2NvbGwtc2VxdWNlbmUnLCAnY29sbC10YWJsZScsCisgICAgICAgICAg ICAnY29sbC12aWV3JworICAgICAgICAgIF0sCisKKyAgICAgICAgICAvKioK KyAgICAgICAgICAgIEVuYWJsZS9kaXNhYmxlIGdyYW50d2l6YXJkIG1lbnUg aW4gdG9vbHMgYmFzZWQKKyAgICAgICAgICAgIG9uIG5vZGUgc2VsZWN0ZWQK KyAgICAgICAgICAgIGlmIHNlbGVjdGVkIG5vZGUgaXMgcHJlc2VudCBpbiBz dXBwb3J0ZWRfbm9kZXMsCisgICAgICAgICAgICBtZW51IHdpbGwgYmUgZW5h YmxlZCBvdGhlcndpc2UgZGlzYWJsZWQuCisgICAgICAgICAgICovCisgICAg ICAgICAgbWVudV9lbmFibGVkID0gZnVuY3Rpb24ob2JqKSB7CisgICAgICAg ICAgICBpZighXy5pc1VuZGVmaW5lZChvYmopICYmICFfLmlzTnVsbChvYmop KQorICAgICAgICAgICAgICByZXR1cm4gKF8uaW5kZXhPZihzdXBwb3J0ZWRf bm9kZXMsIG9iai5fdHlwZSkgIT09IC0xID8gdHJ1ZTogZmFsc2UpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICAgICAgfTsKKworICAgICAgLy8gRGVmaW5lIHRoZSBub2RlcyBvbiB3 aGljaCB0aGUgbWVudXMgdG8gYmUgYXBwZWFyCisgICAgICB2YXIgbWVudXMg PSBbeworICAgICAgICBuYW1lOiAnZ3JhbnRfd2l6YXJkX3NjaGVtYScsIG1v ZHVsZTogdGhpcywKKyAgICAgICAgYXBwbGllczogWyd0b29scyddLCBjYWxs YmFjazogJ3N0YXJ0X2dyYW50X3dpemFyZCcsCisgICAgICAgIHByaW9yaXR5 OiAxMCwgbGFiZWw6ICd7e18oIkdyYW50IFdpemFyZC4uLiIpIH19JywKKyAg ICAgICAgaWNvbjogJ3djVGFiSWNvbicsIGVuYWJsZTogbWVudV9lbmFibGVk CisgICAgICB9XTsKKworICAgICAgLy8gQWRkIHN1cHBvcnRlZCBtZW51cyBp bnRvIHRoZSBtZW51cyBsaXN0CisgICAgICBmb3IgKHZhciBpZHggPSAwOyBp ZHggPCBzdXBwb3J0ZWRfbm9kZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAg ICBtZW51cy5wdXNoKHsKKyAgICAgICAgICBuYW1lOiAnZ3JhbnRfd2l6YXJk X3NjaGVtYV9jb250ZXh0XycgKyBzdXBwb3J0ZWRfbm9kZXNbaWR4XSwKKyAg ICAgICAgICBub2RlOiBzdXBwb3J0ZWRfbm9kZXNbaWR4XSwgbW9kdWxlOiB0 aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnY29udGV4dCddLCBjYWxsYmFj azogJ3N0YXJ0X2dyYW50X3dpemFyZCcsCisgICAgICAgICAgcHJpb3JpdHk6 IDEwLCBsYWJlbDogJ3t7XygiR3JhbnQgV2l6YXJkLi4uIikgfX0nLAorICAg ICAgICAgIGljb246ICd3Y1RhYkljb24nLCBlbmFibGU6IG1lbnVfZW5hYmxl ZAorICAgICAgICAgIH0pOworICAgICAgfQorICAgICAgcGdBZG1pbi5Ccm93 c2VyLmFkZF9tZW51cyhtZW51cyk7CisKKyAgICAgIHJldHVybiB0aGlzOwor ICAgIH0sCisKKyAgICAvLyBDYWxsYmFjayB0byBkcmF3IFdpemFyZCBEaWFs b2cKKyAgICBzdGFydF9ncmFudF93aXphcmQ6IGZ1bmN0aW9uKGFjdGlvbiwg aXRlbSkgeworICAgICAgaWYgKCFhbGVydGlmeS53aXphcmREaWFsb2cpIHsK KyAgICAgICAgYWxlcnRpZnkuZGlhbG9nKCd3aXphcmREaWFsb2cnLCBmdW5j dGlvbiBmYWN0b3J5KCkgeworICAgICAgICAgIHJldHVybiB7CisgICAgICAg ICAgICBtYWluOmZ1bmN0aW9uKHRpdGxlKSB7CisgICAgICAgICAgICAgIHRo aXMuc2V0KCd0aXRsZScsIHRpdGxlKTsKKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICBzZXR1cDpmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zOiB7CisgICAgICAgICAg ICAgICAgICBmcmFtZWxlc3M6IHRydWUsCisgICAgICAgICAgICAgICAgICBy ZXNpemFibGU6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgYXV0b1Jlc2V0 OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NhYmxlQnlEaW1tZXI6IGZhbHNl CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9OworICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgIGhvb2tzOnsKKyAgICAgICAgICAgICAg b25zaG93OiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgIC8vIFNl dCBkaW1lbnNpb25zIGZvciB3aXphcmQKKyAgICAgICAgICAgICAgICB0aGlz LmVsZW1lbnRzLmRpYWxvZy5zdHlsZS53aWR0aCA9ICcxMDAlJzsKKyAgICAg ICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmRpYWxvZy5zdHlsZS5oZWlnaHQg PSAnNTQwcHgnOworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIGJ1aWxkOmZ1bmN0aW9uKCkgeyB9LAorCisgICAgICAg ICAgICAvKioKKyAgICAgICAgICAgICAgUmV0dXJucyBhIENvbGxlY3Rpb24g dXNlZCBmb3IgcmVuZGVyaW5nIGdyaWQKKyAgICAgICAgICAgICAgYW5kIFBh Z2luYXRpb24KKworICAgICAgICAgICAgICBAY2xhc3Mge0JhY2tib25lLlBh Z2VhYmxlQ29sbGVjdGlvbn0KKyAgICAgICAgICAgICAgQHBhcmFtIHt2YXJp YWJsZX0gYmFzZVVybCAtIGZyb20gd2hpY2ggZGF0YSBpcyBmZXRjaGVkCisg ICAgICAgICAgICAgIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IERhdGFiYXNl T2JqZWN0TW9kZWwKKyAgICAgICAgICAgICAgQHJldHVybiB7T2JqZWN0fSBj b2xsCisgICAgICAgICAgICAqLworICAgICAgICAgICAgZ2V0UGFnZWFibGVD b2xsZWN0aW9uOiBmdW5jdGlvbihiYXNlVXJsKXsKKyAgICAgICAgICAgICAg dmFyIENvbGwgPSBCYWNrYm9uZS5QYWdlYWJsZUNvbGxlY3Rpb24uZXh0ZW5k KHsKKyAgICAgICAgICAgICAgICBtb2RlbDogRGF0YWJhc2VPYmplY3RNb2Rl bCwKKyAgICAgICAgICAgICAgICB1cmw6IGJhc2VVcmwsCisgICAgICAgICAg ICAgICAgbW9kZTogImNsaWVudCIsCisgICAgICAgICAgICAgICAgc3RhdGU6 IHsKKyAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxMDAsCisgICAgICAg ICAgICAgICAgICBzb3J0S2V5OiAib2JqZWN0X3R5cGUiLAorICAgICAgICAg ICAgICAgICAgb3JkZXI6IC0xCisgICAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgICAgICBxdWVyeVBhcmFtczogeworICAgICAgICAgICAgICAgICAg dG90YWxQYWdlczogbnVsbCwKKyAgICAgICAgICAgICAgICAgIHRvdGFsUmVj b3JkczogbnVsbCwKKyAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICJzb3J0 IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgIHJldHVybiBuZXcgQ29sbCgpOworICAgICAgICAgICAgfSwK KworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgIFJldHVybnMgYSBQ YWdpbmF0b3IgQ2xhc3MgT2JqZWN0IHdoaWNoIGlzIGFnYWluIHRvIGJlIHJl bmRlcmVkCisKKyAgICAgICAgICAgICAgQGNsYXNzIHtCYWNrZ3JpZC5FeHRl bnNpb24uUGFnaW5hdG9yfQorICAgICAgICAgICAgICBAcGFyYW0ge0JhY2ti b25lLkNvbGxlY3Rpb259IGNvbGwgLSBmcm9tIHdoaWNoIGRhdGEgaXMgZmV0 Y2hlZAorICAgICAgICAgICAgICBAcmV0dXJuIHtPYmplY3R9IHBhZ2luYXRv cgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERiUGFnaW5hdG9yOiBm dW5jdGlvbihjb2xsKXsKKyAgICAgICAgICAgICAgdmFyIHBhZ2luYXRvciA9 IHRoaXMucGFnaW5hdG9yID0gbmV3IEJhY2tncmlkLkV4dGVuc2lvbi5QYWdp bmF0b3IoeworICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGwsCisg ICAgICAgICAgICAgICAgd2luZG93U2l6ZTogOAorICAgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgICAgcmV0dXJuIHBhZ2luYXRvcjsKKyAgICAgICAg ICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICBDcmVh dGUgbmV3IEZpbHRlciB3aGljaCB3aWxsIGZpbHRlciB0aGUKKyAgICAgICAg ICAgICAgcmVuZGVyZWQgZ3JpZCBmb3IgU2VsZWN0IFR5cGUgVGFidWxhciBE YXRhCisgICAgICAgICAgICAgIEBwYXJhbSB7QmFja2JvbmUuUGFnZWFibGVD b2xsZWN0aW9ufSBjb2xsCisgICAgICAgICAgICAqLworICAgICAgICAgICAg RGJPYmplY3RGaWx0ZXI6IGZ1bmN0aW9uKGNvbGwpeworICAgICAgICAgICAg ICB2YXIgY2xpZW50U2lkZUZpbHRlciA9IHRoaXMuY2xpZW50U2lkZUZpbHRl ciA9IG5ldyBCYWNrZ3JpZC5FeHRlbnNpb24uQ2xpZW50U2lkZUZpbHRlcih7 CisgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbCwKKyAgICAgICAg ICAgICAgICBwbGFjZWhvbGRlcjogXygnU2VhcmNoIGJ5IG9iamVjdCB0eXBl IG9yIG5hbWUnKSwKKworICAgICAgICAgICAgICAgIC8vIFRoZSBtb2RlbCBm aWVsZHMgdG8gc2VhcmNoIGZvciBtYXRjaGVzCisgICAgICAgICAgICAgICAg ZmllbGRzOiBbJ29iamVjdF90eXBlJywgJ25hbWUnXSwKKworICAgICAgICAg ICAgICAgIC8vIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgdHlwaW5nIGhhcyBz dG9wcGVkIGJlZm9yZSBzZWFyY2hpbmcgY2FuIHN0YXJ0CisgICAgICAgICAg ICAgICAgd2FpdDogMTUwCisgICAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgICByZXR1cm4gY2xpZW50U2lkZUZpbHRlcjsKKyAgICAgICAgICAgIH0s CisKKyAgICAgICAgICAgIC8vRW5hYmxlIERpc2FibGUgTmV4dCBidXR0b24g b2YgUGFnZSAyCisgICAgICAgICAgICB1cGRhdGVCdXR0b25zOiBmdW5jdGlv bihtb2RpZmllZCl7CisgICAgICAgICAgICAgIGlmKCFtb2RpZmllZCkKKyAg ICAgICAgICAgICAgICAkKCcud2l6YXJkLW5leHQnKS5wcm9wKCdkaXNhYmxl ZCcsIHRydWUpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgJCgnLndpemFyZC1uZXh0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7 CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAg ICAgICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYW4gZXJyb3JNb2RlbCBpcyBz ZXQKKyAgICAgICAgICAgICAgd2l0aCBpbnZhbGlkIHZhbHVlIGFuZCBlcnJv cm1zZyBpcyBzZXQgaW50bworICAgICAgICAgICAgICBzdGF0dXMgYmFyIGVs ZW1lbnQgYW5kIG5leHQgYnV0dG9uIGlzIGRpc2FibGVkCisgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgIG9uU2Vzc2lvbkludmFsaWQ6IGZ1bmN0aW9u KG1zZykgeworICAgICAgICAgICAgICAkKCcuZXJyb3JfbXNnX2RpdiBwJyku aHRtbChtc2cpLnJlbW92ZUNsYXNzKCJoaWRlIik7CisKKyAgICAgICAgICAg ICAgLy8gRW5hYmxlIGRpc2FibGUgTmV4dCBidXR0b24KKyAgICAgICAgICAg ICAgdGhpcy51cGRhdGVCdXR0b25zKGZhbHNlKTsKKyAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAv KioKKyAgICAgICAgICAgICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYW55dGhp bmcgaXMgc2V0IGludG8gbW9kZWwKKyAgICAgICAgICAgICAgdGh1cyBoaWRl IGVycm9yIG1zZyBlbGVtZW50IGFuZCBlbmFibGUgbmV4dCBidXR0b24KKyAg ICAgICAgICAgICAgc3RhdHVzIGJhciBlbGVtZW50IGFuZCBuZXh0IGJ1dHRv biBpcyBkaXNhYmxlZAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBv blNlc3Npb25WYWxpZGF0ZWQ6IGZ1bmN0aW9uKHNlc3NIYXNDaGFuZ2VkKSB7 CisgICAgICAgICAgICAgICQoJy5lcnJvcl9tc2dfZGl2IHAnKS5lbXB0eSgp LmFkZENsYXNzKCJoaWRlIik7CisKKyAgICAgICAgICAgICAgLy8gRW5hYmxl IGRpc2FibGUgTmV4dCBidXR0b24KKyAgICAgICAgICAgICAgdGhpcy51cGRh dGVCdXR0b25zKHNlc3NIYXNDaGFuZ2VkKTsKKyAgICAgICAgICAgIH0sCisK KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgUmVtb3ZlL0RlbGV0ZSBv YmplY3RzLCBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgaW4gd2l6YXJkIG9u IHdpemFyZCBjbG9zZSBvciBmaW5pc2gKKyAgICAgICAgICAgICB0byByZWNs YWltIG1lbW9yeQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJlbGVh c2VPYmplY3RzOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXM7CisKKyAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQo c2VsZi5kYk9iamVjdEZpbHRlcikpIHsKKyAgICAgICAgICAgICAgICBzZWxm LmRiT2JqZWN0RmlsdGVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgIHNl bGYuZGJPYmplY3RGaWx0ZXIgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChzZWxmLmNs aWVudFNpZGVGaWx0ZXIpKSB7CisgICAgICAgICAgICAgICAgc2VsZi5jbGll bnRTaWRlRmlsdGVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgIHNlbGYu Y2xpZW50U2lkZUZpbHRlciA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKHNlbGYucGFn aW5hdG9yKSkgeworICAgICAgICAgICAgICAgIHNlbGYucGFnaW5hdG9yLnJl bW92ZSgpOworICAgICAgICAgICAgICAgIHNlbGYucGFnaW5hdG9yID0gdW5k ZWZpbmVkOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgLy8g RGVsZXRlIFdpemFyZCBQYWdlcworICAgICAgICAgICAgICBpZighXy5pc1Vu ZGVmaW5lZChzZWxmLmRiT2JqZWN0VHlwZVBhZ2UpICYmCisgICAgICAgICAg ICAgICAgIV8uaXNOdWxsKHNlbGYuZGJPYmplY3RUeXBlUGFnZSkpIHsKKyAg ICAgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChzZWxmLmRiT2JqZWN0 VHlwZVBhZ2UuZ2V0KCdtb2RlbCcpKSAmJgorICAgICAgICAgICAgICAgICAg IV8uaXNOdWxsKHNlbGYuZGJPYmplY3RUeXBlUGFnZS5nZXQoJ21vZGVsJykp KSB7CisgICAgICAgICAgICAgICAgICBzZWxmLmRiT2JqZWN0VHlwZVBhZ2Uu Z2V0KCdtb2RlbCcpLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgICBzZWxm LmRiT2JqZWN0VHlwZVBhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYoIV8u aXNVbmRlZmluZWQoc2VsZi5wcml2aWxlZ2VQYWdlKSAmJgorICAgICAgICAg ICAgICAgICFfLmlzTnVsbChzZWxmLnByaXZpbGVnZVBhZ2UpKSB7CisgICAg ICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5wcml2aWxlZ2VQ YWdlLmdldCgnbW9kZWwnKSkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlz TnVsbChzZWxmLnByaXZpbGVnZVBhZ2UuZ2V0KCdtb2RlbCcpKSkgeworICAg ICAgICAgICAgICAgICAgc2VsZi5wcml2aWxlZ2VQYWdlLmdldCgnbW9kZWwn KS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgc2VsZi5wcml2aWxlZ2VQ YWdlID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKHNl bGYucmV2aWV3U1FMUGFnZSkgJiYKKyAgICAgICAgICAgICAgICAhXy5pc051 bGwoc2VsZi5yZXZpZXdTUUxQYWdlKSkgeworICAgICAgICAgICAgICAgIGlm KCFfLmlzVW5kZWZpbmVkKHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVs JykpICYmCisgICAgICAgICAgICAgICAgICAhXy5pc051bGwoc2VsZi5yZXZp ZXdTUUxQYWdlLmdldCgnbW9kZWwnKSkpIHsKKyAgICAgICAgICAgICAgICAg IHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVsJykuY2xlYXIoKTsKKyAg ICAgICAgICAgICAgICAgIHNlbGYucmV2aWV3U1FMUGFnZSA9IHVuZGVmaW5l ZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAvLyBSZW1vdmUgY29sbGVjdGlvbiBjb250YWluaW5nIGRi IG9iamVjdCBkYXRhCisgICAgICAgICAgICAgIGlmKCFfLmlzTnVsbChzZWxm LmNvbGwpICYmCisgICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQoc2Vs Zi5jb2xsKSkgeworICAgICAgICAgICAgICAgIHNlbGYuY29sbC5yZXNldCgp OworICAgICAgICAgICAgICAgIHNlbGYuY29sbCA9IHVuZGVmaW5lZDsKKyAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8vIERlbGV0ZSBXaXph cmQKKyAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNlbGYud2l6YXJkKSAm JgorICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKHNlbGYud2l6YXJk KSkgeworICAgICAgICAgICAgICAgIHNlbGYud2l6YXJkLmNvbGxlY3Rpb24u cmVzZXQoKTsKKyAgICAgICAgICAgICAgICBzZWxmLndpemFyZC5jdXJyX3Bh Z2UgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgc2VsZi53aXphcmQu ZWwgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgc2VsZi53aXphcmQg PSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg fSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgIEV2ZXJ5IHRp bWUgYSB3aXphcmQgaXMgb3BlbmVkLCB0aGlzIGZ1bmN0aW9uCisgICAgICAg ICAgICAgIGlzIGNhbGxlZCBldmVyeXRpbWUuIEl0IGhhcyBXaXphcmQgUGFn ZXMgd2hpY2gKKyAgICAgICAgICAgICAgYXJlIHJlbmRlcmVkIGJ5IHRoZSBX aXphcmQgQ2xhc3M6CisKKyAgICAgICAgICAgICAgQGNsYXNzIHtwZ0Jyb3dz ZXIuV2l6YXJkUGFnZX0gZGJPYmplY3RUeXBlMSAtIFRoaXMgcGFnZQorICAg ICAgICAgICAgICBAZXh0ZW5kcyB7QmFja2JvbmUuTW9kZWx9CisgICAgICAg ICAgICAgIHJlbmRlcnMgYSBncmlkIG9mIERhdGFiYXNlIE9iamVjdCBUeXBl cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgU2NoZW1hcywgVmlld3MgYW5k IFNlcXVlbmNlcyBldGMuCisKKyAgICAgICAgICAgICAgQGNsYXNzIHtwZ0Jy b3dzZXIuV2l6YXJkUGFnZX0gV2l6YXJkUGFnZTIgLSBUaGlzIHBhZ2UKKyAg ICAgICAgICAgICAgQGV4dGVuZHMge0JhY2tib25lLk1vZGVsfQorICAgICAg ICAgICAgICBhZGRzIFByaXZpbGVnZSBDb250cm9sIHdoaWNoIHByb3ZpZGVz IGdyYW50IHByaXZpbGVnZXMKKyAgICAgICAgICAgICAgc3VjaCBhcyAiQ3Jl YXRlLCBJbnNlcnQsIERlbGV0ZSwgVXBkYXRlIiBzbyBvbiB0aGUKKyAgICAg ICAgICAgICAgZGF0YWJhc2Ugb2JqZWN0cyBzZWxlY3RlZCBvbiBXaXphcmQg UGFnZXMuCisKKyAgICAgICAgICAgICAgQGNsYXNzIHtwZ0Jyb3dzZXIuV2l6 YXJkUGFnZX0gV2l6YXJkUGFnZTMgLSBUaGlzIHBhZ2UKKyAgICAgICAgICAg ICAgZGlzcGxheXMgdGhlIGdlbmVyYXRlZCBHUkFOVCBTUUwgcXVlcnkgZm9y IHRoZSBEYgorICAgICAgICAgICAgICBvYmplY3RzIHNlbGVjdGVkIHdpdGgg dGhlIHNwZWNpZmljIHByaXZpbGVnZXMgYWRkZWQgdG8gaXQuCisgICAgICAg ICAgICAgIEBleHRlbmRzIHtCYWNrYm9uZS5Nb2RlbH0KKworICAgICAgICAg ICAgICBAY2xhc3Mge0JhY2tib25lLkNvbGxlY3Rpb259IFdpemFyZENvbGxl Y3Rpb24gLSBJdCBpcyB0aGUKKyAgICAgICAgICAgICAgY29sbGVjdGlvbiBv ZiB3aXphcmQgcGFnZXMKKworICAgICAgICAgICAgICBAY2xhc3Mge3BnQnJv d3Nlci5XaXphcmR9IHdpemFyZCAtIEl0cyB0YXNrIGlzOgorICAgICAgICAg ICAgICAtIENyZWF0ZSBhIFdpemFyZAorICAgICAgICAgICAgICAtIEFkZCBC dXR0b25zLCBDYWxsYmFja3MgdG8gaXQuCisgICAgICAgICAgICAgIC0gUmVu ZGVyIFdpemFyZFBhZ2VzCisgICAgICAgICAgICAgIEBleHRlbmRzIHtCYWNr Ym9uZS5WaWV3fQorCisgICAgICAgICAgICAqLworICAgICAgICAgICAgcHJl cGFyZTpmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAvLyBSZW1vdmUg ZXh0cmEgY29udGFpbmVyCisgICAgICAgICAgICAgIGlmKCQoJy5hanMtY29u dGVudCcpLnNpemUoKSA+IDEpeworICAgICAgICAgICAgICAgICQoJy5hanMt Y29udGVudCcpWzBdLnJlbW92ZSgpOworICAgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgICAgLy8gR2VuZXJhdGUgd2l6YXJkIG1haW4gY29udGFpbmVy CisgICAgICAgICAgICAgIHZhciB3aXphcmRfaHRtbCA9ICc8ZGl2IGNsYXNz PSJ3aXphcmRfZGxnIj4nLAorICAgICAgICAgICAgICAgICAgd2l6YXJkX3Bh cmVudCA9ICQoJy5hanMtY29udGVudCcpLmVtcHR5KCkuYXBwZW5kKHdpemFy ZF9odG1sKSwKKyAgICAgICAgICAgICAgICAgIGVsID0gJCgiLmFqcy1jb250 ZW50Iik7CisKKyAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgZGF0YSBm cm9tIHRoZSBzZWxlY3RlZCB0cmVlIG5vZGUKKyAgICAgICAgICAgICAgdmFy IHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICAgICAgICAgIGkgPSB0 LnNlbGVjdGVkKCksCisgICAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxl bmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZCwKKyAgICAg ICAgICAgICAgICAgIGluZm8gPSBwZ0Jyb3dzZXIuTm9kZS5nZXRUcmVlTm9k ZUhpZXJhcmNoeShpKSwKKyAgICAgICAgICAgICAgICAgIGljb24gPSBkLmlj b247CisKKyAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgR2Vu ZXJhdGUgYSBVUkwgdXNpbmc6CisgICAgICAgICAgICAgICAgZ2lkLCBkaWQs IHNpZChzZXJ2ZXIgaWQpLCBub2RlX2lkKG5vZGUgaWQpLAorICAgICAgICAg ICAgICAgIG5vZGVfKG5vZGUgbmFtZSksIG5vZGVfdHlwZShub2RlIHR5cGUp CisgICAgICAgICAgICAgICAgYW5kIHBhc3MgaXQgdG8gY29sbGVjdGlvbiB3 aGljaCB3aWxsIGZldGNoIE9iamVjdCBUeXBlIHByb3BlcnRpZXMuCisgICAg ICAgICAgICAgICAqLworICAgICAgICAgICAgICB2YXIgZ2lkID0gaW5mb1sn c2VydmVyLWdyb3VwJ10uX2lkLAorICAgICAgICAgICAgICAgICAgc2lkID0g aW5mby5zZXJ2ZXIuX2lkLAorICAgICAgICAgICAgICAgICAgZGlkID0gaW5m by5kYXRhYmFzZS5faWQsCisgICAgICAgICAgICAgICAgICBub2RlX2lkID0g ZC5faWQsCisgICAgICAgICAgICAgICAgICBuc3BuYW1lID0gaW5mby5zY2hl bWEubGFiZWw7CisgICAgICAgICAgICAgICAgICBub2RlX3R5cGUgPSBkLl90 eXBlLAorICAgICAgICAgICAgICAgICAgbm9kZV9sYWJlbCA9IGQubGFiZWws CisKKyAgICAgICAgICAgICAgICAgIC8vIENvbGxlY3Rpb24gdXJsIHRvIGZl dGNoIGRhdGFiYXNlIG9iamVjdCB0eXBlcyBmb3Igb2JqZWN0cyBmaWVsZAor ICAgICAgICAgICAgICAgICAgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdncmFu dF93aXphcmQuaW5kZXgnKSB9fSIgKyAiZ3JhbnRfd2l6YXJkL3Byb3BlcnRp ZXMvIiArCisgICAgICAgICAgICAgICAgICAgICAgUygnJXMvJXMvJXMvJXMv JXMvJXMvJXMvJykuc3ByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgZW5jb2RlVVJJKGdpZCksIGVuY29kZVVSSShzaWQpLCBlbmNvZGVVUkko ZGlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKG5v ZGVfaWQpLCBlbmNvZGVVUkkobm9kZV9sYWJlbCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGVuY29kZVVSSShub2RlX3R5cGUpLCBlbmNvZGVVUkko bnNwbmFtZSkpLnZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICAgIC8vIE1v ZGVsJ3Mgc2F2ZSB1cmwKKyAgICAgICAgICAgICAgICAgIHNhdmVVcmwgPSAi e3sgdXJsX2ZvcignZ3JhbnRfd2l6YXJkLmluZGV4JykgfX0iICsgImdyYW50 X3dpemFyZC9zYXZlLyIgKworICAgICAgICAgICAgICAgICAgICAgIFMoJyVz LyVzLyVzLyVzLyVzLycpLnNwcmludGYoCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuY29kZVVSSShnaWQpLCBlbmNvZGVVUkkoc2lkKSwgZW5jb2Rl VVJJKGRpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVS SShub2RlX3R5cGUpLCBlbmNvZGVVUkkobnNwbmFtZSkpLnZhbHVlKCksCisK KyAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGVuY29kZWQgdXJsIGJh c2VkIG9uIHdpemFyZCB0eXBlCisgICAgICAgICAgICAgICAgICBtc3FsX3Vy bCA9IHRoaXMubXNxbF91cmwgPSAiL3dpemFyZC9ncmFudF93aXphcmQvbXNx bC8iKworICAgICAgICAgICAgICAgICAgICBTKCclcy8lcy8lcy8lcy8lcy8n KS5zcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJ KGdpZCksIGVuY29kZVVSSShzaWQpLCBlbmNvZGVVUkkoZGlkKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSShub2RlX3R5cGUpLCBlbmNv ZGVVUkkobnNwbmFtZSkpLnZhbHVlKCksCisKKyAgICAgICAgICAgICAgICAg IC8vIENyZWF0ZSBpbnN0YW5jZXMgb2YgY29sbGVjdGlvbiwgcGFnaW5hdGlv biBhbmQgZmlsdGVyCisgICAgICAgICAgICAgICAgICBjb2xsID0gdGhpcy5j b2xsID0gdGhpcy5nZXRQYWdlYWJsZUNvbGxlY3Rpb24oYmFzZVVybCksCisg ICAgICAgICAgICAgICAgICBwYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvciA9 IHRoaXMuRGJQYWdpbmF0b3IoY29sbCksCisgICAgICAgICAgICAgICAgICBk Yk9iamVjdEZpbHRlciA9IHRoaXMuZGJPYmplY3RGaWx0ZXIgPSB0aGlzLkRi T2JqZWN0RmlsdGVyKGNvbGwpOworCisgICAgICAgICAgICAgIC8qKgorICAg ICAgICAgICAgICAgIEl0IGlzIHRoZSBtYWluIG1vZGVsIHdpdGggc2NoZW1h IGRlZmluZWQKKyAgICAgICAgICAgICAgICBFdmVyeSB0aW1lIGEgbmV3IHdp emFyZCBpcyBvcGVuZWQsCisgICAgICAgICAgICAgICAgYSBuZXcgbW9kZWwg c2hvdWxkIGNyZWF0ZS4KKyAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgIHZhciBHcmFudFdpemFyZE1vZGVsID0gcGdOb2RlLk1vZGVsLmV4dGVu ZCh7CisgICAgICAgICAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgICAg ICAgICAgIG9iamVjdHM6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAg IGFjbDogdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgICAgICBzY2hlbWE6IFsKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgaWQ6ICdvYmplY3RzJywgbGFiZWw6ICd7eyBfKCJP YmplY3RzIikgfX0nLCBtb2RlbDogRGF0YWJhc2VPYmplY3RNb2RlbCwKKyAg ICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLCBncm91cDog J09iamVjdHMnCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZDogJ2FjbCcsIGxhYmVs OiAne3sgXygiUHJpdmlsZWdlcyIpIH19Jywgbm9kZTogJ3JvbGUnLAorICAg ICAgICAgICAgICAgICAgICBtb2RlbDogcGdBZG1pbi5Ccm93c2VyLk5vZGUu UHJpdmlsZWdlUm9sZU1vZGVsLmV4dGVuZCh7CisKKyAgICAgICAgICAgICAg ICAgICAgLy8gcHJpdmlsZWdlcyBhcmUgc2VsZWN0ZWQgYmFzZWQgb24gbm9k ZSBjbGlja2VkCisgICAgICAgICAgICAgICAgICAgICAgcHJpdmlsZWdlczog cHJpdkRpY3Rbbm9kZV90eXBlXQorICAgICAgICAgICAgICAgICAgICB9KSwg dW5pcXVlQ29sIDogWydncmFudGVlJywgJ2dyYW50b3InXSwgZWRpdGFibGU6 IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2xsZWN0aW9u JywgZ3JvdXA6ICdQcml2aWxlZ2VzJywgY2FuQWRkOiB0cnVlLAorICAgICAg ICAgICAgICAgICAgICBjYW5EZWxldGU6IHRydWUsIGNvbnRyb2w6ICd1bmlx dWUtY29sLWNvbGxlY3Rpb24nCisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB1cmxSb290OiBzYXZl VXJsCisgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgIC8qKgor ICAgICAgICAgICAgICAgIENyZWF0ZSBpbnN0YW5jZSBvZiBHcmFudFdpemFy ZCBNb2RlbCwgcHJvdmlkZSB1cmxSb290CisgICAgICAgICAgICAgICAgbm9k ZV9pbmZvIG9iamVjdCwgR2VuZXJhdGUgZmllbGRzIG9iamVjdHMKKyAgICAg ICAgICAgICAgICovCisgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywK KyAgICAgICAgICAgICAgICAgIG5ld01vZGVsID0gbmV3IEdyYW50V2l6YXJk TW9kZWwoe30sIHsgbm9kZV9pbmZvOiBpbmZvIH0pLAorICAgICAgICAgICAg ICAgICAgZmllbGRzID0gQmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1hKAor ICAgICAgICAgICAgICAgICAgICAgaW5mbywgbmV3TW9kZWwsICdjcmVhdGUn LCBkLl90eXBlLCBkCisgICAgICAgICAgICAgICAgICAgICApOworCisgICAg ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIEZldGNoIGRhdGEgZnJv bSBzZXJ2ZXIgYW5kIHNldCBpbnRvIGdyaWQKKyAgICAgICAgICAgICAgICBh bmQgc2hvdy9oaWRlIHByb2dyZXNzIGJhcgorICAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgJCgnLndpemFyZC1wcm9ncmVzcy1iYXIgcCcpLnNo b3coKTsKKworICAgICAgICAgICAgICBjb2xsLmZldGNoKHsKKyAgICAgICAg ICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihjb2xsZWN0aW9uLCBkYXRhKSB7 CisgICAgICAgICAgICAgICAgICAkKCcud2l6YXJkLXByb2dyZXNzLWJhciBw JykuaHRtbCgnJyk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg ICAgICByZXNldDogdHJ1ZQorICAgICAgICAgICAgICB9LCB0aGlzKTsKKwor ICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICBPdmVycmlkZSBi YWNrZ3JpZCBsaXN0ZW5lciAiYmFja2dyaWQ6c2VsZWN0ZWQiIHRvCisgICAg ICAgICAgICAgICAgQWRkL1JlbW92ZSBtb2RlbCB0by9mcm9tIG9iamVjdHMg Y29sbGVjdGlvbgorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg Y29sbC5vbignYmFja2dyaWQ6c2VsZWN0ZWQnLCBmdW5jdGlvbihtb2RlbCwg c2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBtb2RlbC5zZXQoJ3NlbGVj dGVkJywgc2VsZWN0ZWQpOworCisgICAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgICBpZiBhIHJvdyAoY2hlY2tib3gpIGlzIGNoZWNrZWQs IGFkZCB0aGF0IG1vZGVsCisgICAgICAgICAgICAgICAgICBpbnRvIGNvbGxl Y3Rpb24sIHdoZW4gdW5jaGVja2VkIHJlbW92ZSBpdCBmcm9tCisgICAgICAg ICAgICAgICAgICBtb2RlbC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICBpZihzZWxlY3RlZCkKKyAgICAgICAgICAgICAgICAgIG5l d01vZGVsLmdldCgnb2JqZWN0cycpLmFkZChtb2RlbCwgeyBzaWxlbnQ6IHRy dWUgfSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg ICAgbmV3TW9kZWwuZ2V0KCdvYmplY3RzJykucmVtb3ZlKG1vZGVsKTsKKwor ICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIG1vZGVsIG9uIGNoZWNrYm94 IGNoZWNrL3VuY2hlY2sKKyAgICAgICAgICAgICAgICB2YXIgbXNnID0gIG1v ZGVsLnZhbGlkYXRlLmNhbGwobmV3TW9kZWwpOworCisgICAgICAgICAgICAg ICAgLyoqCisgICAgICAgICAgICAgICAgICBJZiBubyBvYmplY3QgdHlwZSBp cyBzZWxlY3RlZCwgc2V0IGVycm9yIG1zZworICAgICAgICAgICAgICAgICAg YW5kIGRpc2FibGUgbmV4dCBidXR0b24sIGVsc2UgZW5hYmxlIG5leHQgYnV0 dG9uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYo bXNnKQorICAgICAgICAgICAgICAgICAgc2VsZi5vblNlc3Npb25JbnZhbGlk LmNhbGwoc2VsZiwgbXNnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICBzZWxmLm9uU2Vzc2lvblZhbGlkYXRlZC5jYWxsKHNl bGYsIHRydWUpOworICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg ICAvLyBUbyB0cmFjayBjaGFuZ2VzIGludG8gbW9kZWwsIHN0YXJ0IG5ldyBz ZXNzaW9uCisgICAgICAgICAgICAgIG5ld01vZGVsLnN0YXJ0TmV3U2Vzc2lv bigpOworCisgICAgICAgICAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciBm b3IgcHJpdmlsZWdlcyBjb250cm9sCisgICAgICAgICAgICAgIG5ld01vZGVs Lm9uKCdwZ2FkbWluLXNlc3Npb246dmFsaWQnLCBzZWxmLm9uU2Vzc2lvblZh bGlkYXRlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICAgbmV3TW9kZWwu b24oJ3BnYWRtaW4tc2Vzc2lvbjppbnZhbGlkJywgc2VsZi5vblNlc3Npb25J bnZhbGlkLmJpbmQodGhpcykpOworCisgICAgICAgICAgICAgIC8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAgICAgLy8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLworICAgICAgICAgICAgICAvLyAgICAgICAgICAgIFdp emFyZCBQYWdlIGZvciBEYiBPYmplY3QgVHlwZSAgICAgICAgICAgICAgICAg ICAgICAgIC8vCisgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8KKyAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworCisgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIENyZWF0 ZSB3aXphcmQgcGFnZS4gSXQgcmVuZGVycyBhIGdyaWQgb2YKKyAgICAgICAg ICAgICAgICBEYXRhYmFzZSBPYmplY3QgVHlwZXMgc3VjaCBhcworICAgICAg ICAgICAgICAgIFNjaGVtYXMsIFZpZXdzIGFuZCBTZXF1ZW5jZXMgZXRjLgor ICAgICAgICAgICAgICAgIFNldCBkZWZhdWx0IHZhbHVlcworICAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgdmFyIGRiT2JqZWN0VHlwZVBhZ2Ug PSBzZWxmLmRiT2JqZWN0VHlwZVBhZ2UgPSBuZXcgcGdCcm93c2VyLldpemFy ZFBhZ2UoeworICAgICAgICAgICAgICAgIGlkOiAxLAorICAgICAgICAgICAg ICAgIHBhZ2VfdGl0bGU6ICdPYmplY3QgU2VsZWN0aW9uIChzdGVwIDEgb2Yg MyknLAorICAgICAgICAgICAgICAgIGRpc2FibGVfcHJldjogdHJ1ZSwKKyAg ICAgICAgICAgICAgICBkaXNhYmxlX25leHQ6IHRydWUsCisgICAgICAgICAg ICAgICAgc2hvd19kZXNjcmlwdGlvbjogXygnUGxlYXNlIHNlbGVjdCBvYmpl Y3RzIGZyb20gdGhlIGJlbG93IGxpc3QuJyksCisgICAgICAgICAgICAgICAg c2hvd19wcm9ncmVzc19iYXI6IF8oJ1BsZWFzZSB3YWl0IHdoaWxlIGZldGNo aW5nIHJlY29yZHMuLi4nKSwKKyAgICAgICAgICAgICAgICBtb2RlbDogbmV3 TW9kZWwsCisgICAgICAgICAgICAgICAgdmlldzogbmV3IChmdW5jdGlvbigp IHsKKworICAgICAgICAgICAgICAgICAgLy8gU2V0IHBhZ2UgSW5zdGFuY2UK KyAgICAgICAgICAgICAgICAgIHZhciBwYWdlVmlldyA9IHRoaXM7CisKKyAg ICAgICAgICAgICAgICAgIF8uZXh0ZW5kKHBhZ2VWaWV3LCB7CisKKyAgICAg ICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGdyaWQgaWYgaXQgaXMgYmVmb3Jl IHJlbmRlcgorICAgICAgICAgICAgICAgICAgICBjbGVhbnVwOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucmVtb3ZlKCk7 CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ncmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkID0gbnVsbDsKKyAg ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg ICAvLyBSZW1vdmUgZ3JpZCBlbGVtZW50IGlmIGV4aXN0cworICAgICAgICAg ICAgICAgICAgICAgIGlmICh0aGlzLmVsKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAkKHRoaXMuZWwpLnJlbW92ZSgpOworICAgICAgICAgICAgICAg ICAgICAgICAgZGVsZXRlIHRoaXMuZWw7CisgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg ICAgICAgIC8vIERlbGV0ZSBncmlkIGJlZm9yZSByZW5kZXIKKyAgICAgICAg ICAgICAgICAgICAgZ3JpZDogbnVsbCwKKworICAgICAgICAgICAgICAgICAg ICByZW5kZXI6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAg ICAgLy8gQ3JlYXRlIGEgZ3JpZCBjb250YWluZXIKKyAgICAgICAgICAgICAg ICAgICAgICB2YXIgZ3JpZEJvZHkgPQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICQoJzxkaXYgY2xhc3M9InNlbGVjdF9kYl9vYmplY3RzX2NvbnRh aW5lciI+PC9kaXY+Jyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAvLyBS ZW1vdmUgZ3JpZCBpZiBleGl0cyBiZWZvcmUgcmVuZGVyCisgICAgICAgICAg ICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy5jbGVhbnVwKCk7CisgICAgICAgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBh IG5ldyBHcmlkIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICAgdGhp cy5ncmlkID0gbmV3IEJhY2tncmlkLkdyaWQoeworICAgICAgICAgICAgICAg ICAgICAgICAgY29sdW1uczogXy5jbG9uZShjb2x1bW5zKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGwsCisgICAgICAgICAg ICAgICAgICAgICAgICBjbGFzc05hbWU6ICJiYWNrZ3JpZCB0YWJsZS1ib3Jk ZXJlZCBvYmplY3RfdHlwZV90YWJsZSIKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyIHNl bGVjdGlvbiBUeXBlIGdyaWQgYW5kIHBhZ2luYXRvcgorICAgICAgICAgICAg ICAgICAgICAgIGdyaWRCb2R5LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMuZ3JpZC5yZW5kZXIoKS4kZWwKKyAgICAgICAgICAgICAg ICAgICAgICAgICkuYXBwZW5kKHNlbGYucGFnaW5hdG9yLnJlbmRlcigpLmVs KTsKKworICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBTZWFyY2gg RmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgZ3JpZEJvZHkucHJlcGVu ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50U2lkZUZp bHRlci5yZW5kZXIoKS5lbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAv LyBBc3NpZ24gZ3JpZEJvZHkgY29udGVudCB0byBwYWdlIGVsZW1lbnQKKyAg ICAgICAgICAgICAgICAgICAgICB0aGlzLmVsID0gZ3JpZEJvZHk7CisKKyAg ICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAg ICAgIEZldGNoIHNlbGVjdGVkIG1vZGVscyBmcm9tIGNvbGxlY3Rpb24gYW5k CisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIHJvd3MgY2hlY2tlZCBp biBncmlkCisgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAgICAgbmV3TW9kZWwuZ2V0KCdvYmplY3RzJykuZWFjaChmdW5j dGlvbihtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwg PSBjb2xsLmdldChtLmdldCgnb2JqZWN0X2lkJykpOworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbGwudHJpZ2dlcignYmFja2dyaWQ6c2VsZWN0ZWQnLCBtb2Rl bCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAv LyBSZWZyZXNoIGdyaWQgdG8gcmUgcmVuZGVyIHJvd3MuCisgICAgICAgICAg ICAgICAgICAgICAgY29sbC50cmlnZ2VyKCdiYWNrZ3JpZDpyZWZyZXNoJyk7 CisKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgICAgfSksCisKKyAgICAgICAgICAgICAgICBiZWZvcmVOZXh0 OiBmdW5jdGlvbihvYmopeworICAgICAgICAgICAgICAgICAgdmFyIHNlbGYg PSB0aGlzOworICAgICAgICAgICAgICAgICAgb2JqLm9wdGlvbnMuZGlzYWJs ZV9uZXh0ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgICAgIEVuYWJsZS9EaXNhYmxlIG5leHQgYnV0dG9uIG9m IHByaXZpbGVnZVBhZ2UgaWYgb2JqZWN0cworICAgICAgICAgICAgICAgICAg ICBhcmUgcHJlc2VudCBpbiBtb2RlbAorICAgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgICBpZighXy5pc051bGwobmV3TW9kZWwuZ2V0 KCdhY2wnKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIV8uaXNVbmRlZmlu ZWQobmV3TW9kZWwuZ2V0KCdhY2wnKSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYobmV3TW9kZWwuZ2V0KCdhY2wnKS5sZW5ndGggPiAwKQorICAgICAg ICAgICAgICAgICAgICAgIG9iai5jb2xsZWN0aW9uLmF0KDEpLnNldCgnZGlz YWJsZV9uZXh0JywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHRoZSB2aWV3CisgICAgICAg ICAgICAgICAgICBpZiAoc2VsZi52aWV3KSB7CisgICAgICAgICAgICAgICAg ICAgIHNlbGYudmlldy5jbGVhbnVwKCk7CisgICAgICAgICAgICAgICAgICAg IGRlbGV0ZSBzZWxmLnZpZXc7CisgICAgICAgICAgICAgICAgICAgIHNlbGYu dmlldyA9IG51bGw7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LAorCisg ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLworICAgICAgICAgICAgICAvLyAgICAgICAgICAgIFdpemFy ZCBQYWdlIGZvciBQcml2aWxlZ2UgQ29udHJvbCAgICAgICAgICAgICAgICAg ICAgIC8vCisgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8KKyAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CisgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgIENyZWF0ZSBG aWVsZCBPYmplY3Qgd2hpY2ggaGFzIHByb3BlcnRpZXMgbGlrZQorICAgICAg ICAgICAgICAgIG5vZGVfZGF0YSwgbm9kZV9pbmZvIHdoaWNoIGlzIHJlcXVp cmVkIGZvciByZW5kZXJpbmcKKyAgICAgICAgICAgICAgICBQcml2aWxlZ2Ug Y29udHJvbAorICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgdmFy IHByaXZpbGVnZXNGaWVsZCA9IG5ldyBCYWNrZm9ybS5GaWVsZChmaWVsZHNb MV0uZmllbGRzWzBdKTsKKworICAgICAgICAgICAgICAvLyBXaXphcmQgZm9y IFByaXZlbGVnZSBjb250cm9sCisgICAgICAgICAgICAgIHZhciBwcml2aWxl Z2VQYWdlID0gc2VsZi5wcml2aWxlZ2VQYWdlID0gbmV3IHBnQnJvd3Nlci5X aXphcmRQYWdlKHsKKyAgICAgICAgICAgICAgICBpZDogMiwKKyAgICAgICAg ICAgICAgICBwYWdlX3RpdGxlOiBfKCdQcml2aWxlZ2VzIFNlbGVjdGlvbiAo c3RlcCAyIG9mIDMpJyksCisgICAgICAgICAgICAgICAgc2hvd19kZXNjcmlw dGlvbjogXygnUGxlYXNlIHNlbGVjdCBwcml2aWxlZ2VzIGZvciB0aGUgc2Vs ZWN0ZWQgb2JqZWN0cy4nKSwKKyAgICAgICAgICAgICAgICBkaXNhYmxlX25l eHQ6IHRydWUsCisgICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVsLAor CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgdmlldyBmdW5jdGlvbiBv YmplY3QKKyAgICAgICAgICAgICAgICB2aWV3OiBuZXcgKGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VWaWV3ID0gdGhpczsKKyAg ICAgICAgICAgICAgICAgICAgXy5leHRlbmQocGFnZVZpZXcsIHsKKworICAg ICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBQcml2ZWxlZ2UgY29udHJv bCB0byBnZW5lcmF0ZSBpdHMgaHRtbCBtYXJrdXAKKyAgICAgICAgICAgICAg ICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy5wcml2Q29udHJvbCA9IG5ldyAocHJpdmlsZWdlc0Zp ZWxkLmdldCgnY29udHJvbCcpKSAoeworICAgICAgICAgICAgICAgICAgICAg ICAgICBmaWVsZDogcHJpdmlsZWdlc0ZpZWxkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBtb2RlbDogbmV3TW9kZWwKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtl bDogdGhpcy5wcml2Q29udHJvbC5yZW5kZXIoKS4kZWx9OworICAgICAgICAg ICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAvLyBS ZW1vdmUgdGhlIHByaXZpbGVnZSBjb250cm9sCisgICAgICAgICAgICAgICAg ICAgICAgY2xlYW51cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAodGhpcy5wcml2Q29udHJvbCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLnByaXZDb250cm9sLnJlbW92ZSgpOworICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wcml2Q29udHJv bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcml2Q29udHJv bCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgIGJlZm9yZVBy ZXY6IGZ1bmN0aW9uKHdpemFyZE9iaikgeworCisgICAgICAgICAgICAgICAg ICAvLyBSZW1vdmUgdGhlIHByaXZpbGVnZSBjb250cm9sCisgICAgICAgICAg ICAgICAgICBpZiAodGhpcy52aWV3KSB7CisgICAgICAgICAgICAgICAgICAg IHRoaXMudmlldy5jbGVhbnVwKCk7CisgICAgICAgICAgICAgICAgICAgIGRl bGV0ZSB0aGlzLnZpZXc7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudmll dyA9IG51bGw7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICBFbmFibGUvRGlzYWJs ZSBuZXh0IGJ1dHRvbiBvZiBwYWdlIDEgaWYgb2JqZWN0cworICAgICAgICAg ICAgICAgICAgICBhcmUgcHJlc2VudCBpbiBtb2RlbAorICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0c01vZGVs ID0gbmV3TW9kZWwuZ2V0KCdvYmplY3RzJyk7CisKKyAgICAgICAgICAgICAg ICAgIGlmKCFfLmlzVW5kZWZpbmVkKG9iamVjdHNNb2RlbCkgJiYgIV8uaXNF bXB0eShvYmplY3RzTW9kZWwpICYmCisgICAgICAgICAgICAgICAgICAgICAg b2JqZWN0c01vZGVsLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24uYXQoMCkuc2V0KCdkaXNhYmxlX25l eHQnLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg c2hvdyBwcm9ncmVzcyBiYXIKKyAgICAgICAgICAgICAgICAgICAgd2l6YXJk T2JqLmNvbGxlY3Rpb24uYXQoMCkuc2V0KCdzaG93X3Byb2dyZXNzX2Jhcics ICcnKTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg ICAgLyoqCisgICAgICAgICAgICAgICAgICAgIFdlJ3JlIHJlLXJlbmRlcmlu ZyB0aGUgY29udHJvbHMgYXMgdGhleSBhcmUgZGVsZXRlZAorICAgICAgICAg ICAgICAgICAgICBiZWZvcmUgaGVhZGluZyB0byBuZXh0IHBhZ2UKKyAgICAg ICAgICAgICAgICAgICAgUmVmcmVzaCBCYWNrZ3JpZCB0byByZS1yZW5kZXIg dGhlIGVsZW1lbnRzIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHJl LXJlbmRlciBwYWdpbmF0b3IKKyAgICAgICAgICAgICAgICAgICAgcmUtcmVu ZGVyIEZpbHRlcgorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICBuZXdNb2RlbC50cmlnZ2VyKCJiYWNrZ3JpZDpyZWZyZXNoIiwg bmV3TW9kZWwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgIHNlbGYucGFn aW5hdG9yLnJlbmRlcigpOworICAgICAgICAgICAgICAgICAgc2VsZi5jbGll bnRTaWRlRmlsdGVyLnJlbmRlcigpOworICAgICAgICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg ICAgIGJlZm9yZU5leHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSwK KworICAgICAgICAgICAgICAgIG9uTmV4dDogZnVuY3Rpb24ob2JqKXsKKwor ICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcml2aWxlZ2UgY29u dHJvbAorICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldykgeworICAg ICAgICAgICAgICAgICAgICB0aGlzLnZpZXcuY2xlYW51cCgpOworICAgICAg ICAgICAgICAgICAgICBkZWxldGUgdGhpcy52aWV3OworICAgICAgICAgICAg ICAgICAgICB0aGlzLnZpZXcgPSBudWxsOworICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgZmluaXNoIGJ1dHRv bgorICAgICAgICAgICAgICAgICAgc2VsZi53aXphcmQub3B0aW9ucy5kaXNh YmxlX2ZpbmlzaCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAvKioK KyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnMgdG8gZ2V0IFNRTCBxdWVy aWVzIGRhdGEgdG8gcmVuZGVyCisgICAgICAgICAgICAgICAgICAgIGludG8g dGhlIHJldmlld1NRTFBhZ2UKKyAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgICAgbmV3TW9kZWwudHJpZ2dlcigncGdhZG1pbi13aXph cmQ6bmV4dHBhZ2U6c3FsJywgeydub2RlX3R5cGUnOiBub2RlX3R5cGUgfSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9KTsKKworCisg ICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAg ICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg ICAgICAvLyAgICAgICAgICAgIFJldmlldyBTUUwgUXVlcnkgUGFnZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgICAgICAgICAgIC8vQ3Jl YXRlIFNxbEZpZWxkIE9iamVjdAorICAgICAgICAgICAgICB2YXIgc3FsRmll bGQgPSBuZXcgQmFja2Zvcm0uRmllbGQoCisgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgIGlkOiAnc3FsdGFiJywKKyAgICAgICAg ICAgICAgICAgICAgbGFiZWw6IF8oJ1NxbCBUYWInKSwKKyAgICAgICAgICAg ICAgICAgICAgZmllbGQ6IGZpZWxkcywKKworICAgICAgICAgICAgICAgICAg ICAvKioKKyAgICAgICAgICAgICAgICAgICAgICBFeHRlbmQgJ1NxbFRhYkNv bnRyb2wnIHRvIGRlZmluZSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICBm dW5jdGlvbiAnb25XaXphcmROZXh0UGFnZUNoYW5nZScKKyAgICAgICAgICAg ICAgICAgICAgICB3aGljaCBnZXRzIHRyaWdnZXJlZCBvbiBuZXh0IGJ1dHRv bgorICAgICAgICAgICAgICAgICAgICAgIGNsaWNrIHRvIGZldGNoIGdlbmVy YXRlZCBTUUwgcXVlcnkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhl IHNlbGVjdGVkIGRiIG9iamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5TcWxU YWJDb250cm9sLmV4dGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAgaW5p dGlhbGl6ZTogZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8vIEluaXRpYWxpemUgcGFyZW50IGNsYXNzCisgICAgICAgICAgICAg ICAgICAgICAgICBCYWNrZm9ybS5TcWxUYWJDb250cm9sLnByb3RvdHlwZS5p bml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMubXNxbF91cmwgPSBzZWxmLm1zcWxfdXJs OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgdHJpZ2dl ciBldmVudHMgZm9yIHByZXYgYW5kIG5leHQgcGFnZQorICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy5tb2RlbC5vbigncGdhZG1pbi13aXphcmQ6bmV4 dHBhZ2U6c3FsJywgdGhpcy5vbldpemFyZE5leHRQYWdlQ2hhbmdlLCB0aGlz KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwub24oJ3Bn YWRtaW4td2l6YXJkOnByZXZwYWdlOnNxbCcsIHRoaXMub25XaXphcmRQcmV2 UGFnZUNoYW5nZSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgfSwK KworICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWV0aG9kIGZldGNo ZXMgdGhlIG1vZGlmaWVkIFNRTCBmb3IgdGhlIHdpemFyZAorICAgICAgICAg ICAgICAgICAgICAgIG9uV2l6YXJkTmV4dFBhZ2VDaGFuZ2U6IGZ1bmN0aW9u KCl7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhp czsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2hlcyBtb2Rp ZmllZCBTUUwKKyAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy5tc3FsX3VybCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZGF0YTogc2VsZi5tb2RlbC50b0pTT04odHJ1 ZSwgJ0dFVCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlw ZTogImpzb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50 VHlwZTogImFwcGxpY2F0aW9uL2pzb24iCisgICAgICAgICAgICAgICAgICAg ICAgICB9KS5kb25lKGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLnNxbFRhYi5jbGVhckhpc3RvcnkoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcWxUYWIuc2V0VmFsdWUocmVz LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmFpbChmdW5j dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2Rl bC50cmlnZ2VyKCdwZ2FkbWluLXZpZXc6bXNxbDplcnJvcicpOworICAgICAg ICAgICAgICAgICAgICAgICAgfSkuYWx3YXlzKGZ1bmN0aW9uKCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnRyaWdnZXIoJ3Bn YWRtaW4tdmlldzptc3FsOmZldGNoZWQnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAg ICAgICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkgeworCisgICAg ICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGxpc3RlbiB0byBuZXh0L3By ZXYgcGFnZSBldmVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu bW9kZWwub2ZmKCdwZ2FkbWluLXdpemFyZDpuZXh0cGFnZTpzcWwnLCB0aGlz Lm9uV2l6YXJkTmV4dFBhZ2VDaGFuZ2UsIHRoaXMpOworICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy5tb2RlbC5vZmYoJ3BnYWRtaW4td2l6YXJkOnBy ZXZwYWdlOnNxbCcsIHRoaXMub25XaXphcmRQcmV2UGFnZUNoYW5nZSwgdGhp cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBCYWNrZm9ybS5TcWxUYWJD b250cm9sLl9fc3VwZXJfXy5yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRz KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICAgICAgfSkKKyAgICAgICAgICAgICAgICAgIH0pLAorCisgICAgICAgICAg ICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBDcmVhdGUgc3FsRmllbGQg dmlldyBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgdG8gcmVuZGVyIGl0 IGludG8gd2l6YXJkIHBhZ2UKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICBzcWxDb250cm9sID0gbmV3IChzcWxGaWVsZC5nZXQoJ2Nv bnRyb2wnKSkoeworICAgICAgICAgICAgICAgICAgZmllbGQ6IHNxbEZpZWxk LAorICAgICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVsCisgICAgICAg ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgLy8gV2l6YXJkIGZvciBT UUwgdGFiIGNvbnRyb2wKKyAgICAgICAgICAgICAgdmFyIHJldmlld1NRTFBh Z2UgPSBzZWxmLnJldmlld1NRTFBhZ2UgPSBuZXcgcGdCcm93c2VyLldpemFy ZFBhZ2UoeworICAgICAgICAgICAgICAgIGlkOiAzLAorICAgICAgICAgICAg ICAgIHBhZ2VfdGl0bGU6IF8oJ0ZpbmFsIChSZXZpZXcgU2VsZWN0aW9uKSAo c3RlcCAzIG9mIDMpJyksCisgICAgICAgICAgICAgICAgc2hvd19kZXNjcmlw dGlvbjogXygnRm9sbG93aW5nIHF1ZXJ5IHdpbGwgYmUgZXhlY3V0ZWQgb24g dGhlIGRhdGFiYXNlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Kycgc2VydmVyIGZvciB0aGUgc2VsZWN0ZWQgb2JqZWN0cywgYW5kIHByaXZp bGVnZXMuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKycgUGxl YXNlIGNsaWNrIG9uIEZpbmlzaCB0byBjb21wbGV0ZSB0aGUgcHJvY2Vzcy4n KSwKKyAgICAgICAgICAgICAgICBtb2RlbDogbmV3TW9kZWwsCisgICAgICAg ICAgICAgICAgdmlldzogbmV3KGZ1bmN0aW9uKCkgeworCisgICAgICAgICAg ICAgICAgICAvLyBSZW5kZXIgU3FsVGFiIGNvbnRyb2wgdG8gZ2VuZXJhdGUg aXRzIGh0bWwgbWFya3VwCisgICAgICAgICAgICAgICAgICB2YXIgc3FsVGFi SHRtbCA9IHNxbENvbnRyb2wucmVuZGVyKCkuJGVsOworICAgICAgICAgICAg ICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4geyBlbDogc3FsVGFiSHRtbCB9OworICAgICAg ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KSwKKworICAgICAg ICAgICAgICAgIGJlZm9yZVByZXY6IGZ1bmN0aW9uKHdpemFyZE9iaikgewor CisgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAg RW5hYmxlIG5leHQgYnV0dG9uIGlmIHByaXZpbGVnZQorICAgICAgICAgICAg ICAgICAgICBtb2RlbCBpcyBub3QgZW1wdHkgZWxzZSBkaXNhYmxlCisgICAg ICAgICAgICAgICAgICAgIG5leHQgYnV0dG9uCisgICAgICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgICB2YXIgYWNsTW9kZWwgPSBuZXdN b2RlbC5nZXQoJ2FjbCcpOworCisgICAgICAgICAgICAgICAgICBpZighXy5p c1VuZGVmaW5lZCh3aXphcmRPYmouY29sbGVjdGlvbikgJiYKKyAgICAgICAg ICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24ubW9kZWxzLmxlbmd0 aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmlu ZWQoYWNsTW9kZWwpICYmICFfLmlzRW1wdHkoYWNsTW9kZWwpICYmCisgICAg ICAgICAgICAgICAgICAgICAgICBhY2xNb2RlbC5sZW5ndGggPiAwKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24uYXQo MSkuc2V0KCdkaXNhYmxlX25leHQnLCBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24uYXQoMSkuc2V0 KCdkaXNhYmxlX25leHQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg ICAgIH0pOworCisKKyAgICAgICAgICAgICAgLy8gQ3JlYXRlIFdpemFyZCBD b2xsZWN0aW9uIG9mIFdpemFyZCBQYWdlcworICAgICAgICAgICAgICB2YXIg V2l6YXJkQ29sbGVjdGlvbiA9IEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5k KHsKKyAgICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLldpemFyZFBh Z2UKKyAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgLy8gSXQg aG9sZHMgYWxsIHRoZSB3aXphcmQgcGFnZXMgdG8gYmUgcmVuZGVyZWQKKyAg ICAgICAgICAgICAgdGhpcy53aXphcmRDb2xsZWN0aW9uID0gbmV3IFdpemFy ZENvbGxlY3Rpb24oCisgICAgICAgICAgICAgICAgW2RiT2JqZWN0VHlwZVBh Z2UsIHByaXZpbGVnZVBhZ2UsIHJldmlld1NRTFBhZ2VdCisgICAgICAgICAg ICAgICk7CisKKyAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAg Q3JlYXRlIHdpemFyZCB3aGljaCBoYXMgZm9sbG93aW5nIG9wZXJhdGlvbnM6 CisgICAgICAgICAgICAgICAgLSByZW5kZXJzIHdpemFyZCBwYWdlcworICAg ICAgICAgICAgICAgIC0gZGVmaW5lcyB0aGUgZmlyc3QgcGFnZSB0byByZW5k ZXIgaW4gd2l6YXJkCisgICAgICAgICAgICAgICAgLSBTYXZlIHRoZSBtb2Rl bCBvbiBmaW5pc2hidXR0b24KKyAgICAgICAgICAgICAgICAtIFJlbW92ZSB3 aXphcmQgb24gY2FuY2VsIGJ1dHRvbgorICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgIHZhciB3aXphcmQgPSBzZWxmLndpemFyZCA9IG5ldyAo cGdCcm93c2VyLldpemFyZC5leHRlbmQoeworICAgICAgICAgICAgICAgIG9w dGlvbnM6IHsKKyAgICAgICAgICAgICAgICAgIHRpdGxlOiAnR3JhbnQgV2l6 YXJkJywgLyogTWFpbiBXaXphcmQgVGl0bGUgKi8KKyAgICAgICAgICAgICAg ICAgIHdpZHRoOiAnJywKKyAgICAgICAgICAgICAgICAgIGhlaWdodDogJycs CisgICAgICAgICAgICAgICAgICBjdXJyX3BhZ2U6IDAsCisgICAgICAgICAg ICAgICAgICBzaG93X2xlZnRfcGFuZWw6IGZhbHNlLAorICAgICAgICAgICAg ICAgICAgZGlzYWJsZV9maW5pc2g6IHRydWUKKyAgICAgICAgICAgICAgICB9 LAorCisgICAgICAgICAgICAgICAgb25GaW5pc2g6IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICAgdmFyIG0gPSBuZXdNb2RlbCwKKyAgICAgICAg ICAgICAgICAgICAgICBkID0gbS50b0pTT04oJ0dFVCcpOworCisgICAgICAg ICAgICAgICAgICBpZiAoZCAmJiAhXy5pc0VtcHR5KGQpICYmICFfLmlzVW5k ZWZpbmVkKGQub2JqZWN0cykpIHsKKyAgICAgICAgICAgICAgICAgICAgbS5z YXZlKHt9LCB7CisgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IGQsCisg ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGU6IGZhbHNlLAorICAgICAg ICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgICAgICAg ICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKworICAgICAgICAg ICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB3aXphcmQgb2JqZWN0cworICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlT2JqZWN0cygpOwor ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpOworICAgICAg ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgZXJy b3I6IGZ1bmN0aW9uKG0sIGpxeGhyKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBhbGVydGlmeS5wZ05vdGlmaWVyKAorICAgICAgICAgICAgICAgICAg ICAgICAgICAiZXJyb3IiLCBqcXhociwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAie3sgXygn RXJyb3IgZHVyaW5nIHNhdmluZyBwcm9wZXJ0aWVzIC0gJSVzIScpIH19Igor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3ByaW50ZihqcXhoci5z dGF0dXNUZXh0KS52YWx1ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbigpIHsK KworICAgICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB3aXphcmQgb2JqZWN0 cworICAgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlT2JqZWN0cygpOwor ICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgfSkpICh7CisgICAgICAgICAgICAgICAg Y29sbGVjdGlvbjogdGhpcy53aXphcmRDb2xsZWN0aW9uLAorICAgICAgICAg ICAgICAgIGVsOiBlbCwKKyAgICAgICAgICAgICAgICBtb2RlbDogbmV3TW9k ZWwKKyAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgLy8gUmVu ZGVyIHdpemFyZAorICAgICAgICAgICAgICB3aXphcmQucmVuZGVyKCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAg ICB9CisKKyAgICAgIC8vIENhbGwgR3JhbnQgV2l6YXJkIERpYWxvZworICAg ICAgYWxlcnRpZnkud2l6YXJkRGlhbG9nKCcnKTsKKyAgICB9CisgIH07CisK KyAgcmV0dXJuIHBnQnJvd3Nlci5HcmFudFdpemFyZDsKK30pOwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRl cy9ncmFudF93aXphcmQvc3FsL2FsbG93ZWRfYWNsLmpzb24gYi93ZWIvcGdh ZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFy ZC9zcWwvYWxsb3dlZF9hY2wuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5jYjczZDJjCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93 aXphcmQvc3FsL2FsbG93ZWRfYWNsLmpzb24KQEAgLTAsMCArMSwzMCBAQAor eyMgTGlzdCBvZiBhbGxvd2VkIHByaXZpbGVnZXMgb2YgU2NoZW1hLCB0YWJs ZSBzZXF1ZW5jZSwgZnVuY3Rpb24gYW5kIHZpZXcgI30KK3sjCisgICAgRm9y bWF0IGZvciBhbGxvd2VkIHByaXZpbGVnZXMgYXJlOgorICAgICJub2RlX25h bWUiOiB7CisgICAgICAgICJ0eXBlIjogIm5hbWUiLAorICAgICAgICAiYWNs IjogWy4uLl0KKyAgICB9CisjfQoreworICAgICJzY2hlbWEiOiB7CisgICAg ICAgICJ0eXBlIjogIlNDSEVNQSIsCisgICAgICAgICJhY2wiOiBbImEiLCAi ciIsICJ3IiwgImQiLCAiRCIsICJ4IiwgInQiLCAiVSIsICJYIl0KKyAgICB9 LAorICAgICJjb2xsLXRhYmxlIjogeworICAgICAgICAidHlwZSI6ICJUQUJM RSIsCisgICAgICAgICJhY2wiOiBbImEiLCAidyIsICJVIiwgImQiLCAiRCIs ICJ4IiwgInQiXQorICAgIH0sCisgICAgImNvbGwtc2VxdWVuY2UiOiB7Cisg ICAgICAgICJ0eXBlIjogIlNFUVVFTkNFIiwKKyAgICAgICAgImFjbCI6IFsi YSIsICJ3IiwgInUiXQorICAgIH0sCisgICAgImNvbGwtZnVuY3Rpb24iOiB7 CisgICAgICAgICJ0eXBlIjogIkZVTkNUSU9OIiwKKyAgICAgICAgImFjbCI6 IFsiWCJdCisgICAgfSwKKyAgICAiY29sbC12aWV3IjogeworICAgICAgICAi dHlwZSI6ICJWSUVXIiwKKyAgICAgICAgImFjbCI6IFsiYSIsICJyIiwgInci LCAiZCIsICJEIiwgIngiLCAidCJdCisgICAgfQorfQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFu dF93aXphcmQvc3FsL2dyYW50LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dy YW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9ncmFudC5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhYzFh NwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50 X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9ncmFudC5zcWwK QEAgLTAsMCArMSwxOSBAQAoreyM9PT09PUdyYW50IFBlcm1pc3Npb25zIG9u IERhdGFiYXNlIE9iamVjdHMgU2VsZWN0ZWQ9PT09I30KK3slIGltcG9ydCAn bWFjcm9zL3NjaGVtYXMvcHJpdmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdF ICV9Cit7JSBpbXBvcnQgJ21hY3Jvcy9mdW5jdGlvbnMvcHJpdmlsZWdlLm1h Y3JvcycgYXMgUFJJVklMRUdFX0ZVTkNUSU9OICV9Cit7JSBpZiBkYXRhLmFj bCAlfQoreyUgZm9yIG9iaiBpbiBkYXRhLm9iamVjdHMgJX0KK3slIGZvciBw cml2IGluIGRhdGEuYWNsICV9Cit7JSBzZXQgb2JqX3R5cGUgPSBvYmoub2Jq ZWN0X3R5cGUgJX0KK3slIGlmIG9ial90eXBlLnVwcGVyKCkgIT0gJ0ZVTkNU SU9OJyBhbmQgb2JqX3R5cGUudXBwZXIoKSAhPSAnVFJJR0dFUiBGVU5DVElP TicgJX0KK3slIGlmIG9ial90eXBlLnVwcGVyKCkgPT0gJ1ZJRVcnICV9IHsj IyMjIyMgVmlld3MgYXJlIGFsc28ga2luZCBvZiB0YWJsZSAjIyMjIyN9Cit7 JSBzZXQgb2JqX3R5cGUgPSAnVEFCTEUnICV9Cit7JSBlbmRpZiAlfQore3sg UFJJVklMRUdFLlNFVChjb25uLCBvYmpfdHlwZS51cHBlcigpLCBwcml2Lmdy YW50ZWUsIG9iai5uYW1lLCBwcml2LndpdGhvdXRfZ3JhbnQsIHByaXYud2l0 aF9ncmFudCwgbnNwbmFtZSApIH19Cit7JSBlbHNlICV9Cit7IyMjIyMjIGlm IG9iamVjdF90eXBlIGlzIEZ1bmN0aW9uIHRoZW4gYXBwbHkgZnVuY3Rpb24g bWFyY3JvcyAjIyMjIyN9Cit7eyBQUklWSUxFR0VfRlVOQ1RJT04uU0VUKGNv bm4sICdGVU5DVElPTicsIHByaXYuZ3JhbnRlZSwgb2JqLm5hbWUsIHByaXYu d2l0aG91dF9ncmFudCwgcHJpdi53aXRoX2dyYW50LCBuc3BuYW1lLCBvYmou cHJvYXJncyl9fQoreyUgZW5kaWYgJX0KK3slIGVuZGZvciAlfQoreyUgZW5k Zm9yICV9Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v dG9vbHMvZ3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvc3Fs L3Byb3BlcnRpZXMuc3FsIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6 YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvc3FsL3Byb3BlcnRpZXMuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzNjMWYK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93 aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9zcWwvcHJvcGVydGllcy5z cWwKQEAgLTAsMCArMSw2NSBAQAoreyM9PT09PT09PT09PT09PT09PT09RmV0 Y2ggbGlzdCBvZiBEYXRhYmFzZSBvYmplY3QgdHlwZXMoRnVuY3Rpb25zLCBT ZXF1ZW5jZSwgVGFibGVzIG9yIFZpZXcpPT09PT09PT09PT09PT09PT09PSN9 Cit7JSBpZiB0eXBlID09ICdzY2hlbWEnIG9yIHR5cGUgPT0gJ3RyaWdnZXJf ZnVuY3Rpb24nIGFuZCBub2RlX2lkIGFuZCBub2RlX25hbWUgJX0KK3slIHNl dCBmdW5jX3R5cGUgPSAnVHJpZ2dlciBGdW5jdGlvbicgaWYgdHlwZSA9PSAn dHJpZ2dlcl9mdW5jdGlvbicgZWxzZSAnRnVuY3Rpb24nICV9CitTRUxFQ1QK KyAgICBwci5wcm9uYW1lIEFTIG5hbWUsCisgICAgcGdfZ2V0X2Z1bmN0aW9u X2lkZW50aXR5X2FyZ3VtZW50cyhwci5vaWQpIEFTIHByb2FyZ3MsCisgICAg J3t7IGZ1bmNfdHlwZSB9fScgQVMgb2JqZWN0X3R5cGUsCisgICAgJ3t7IG5z cG5hbWUgfX0nIEFTIG5zcG5hbWUsCisgICAgJ2ljb24tZnVuY3Rpb24nIEFT IGljb24KK0ZST00gcGdfcHJvYyBwcgorICAgIEpPSU4gcGdfdHlwZSB0eXAg T04gdHlwLm9pZD1wcm9yZXR0eXBlCisgICAgSk9JTiBwZ19uYW1lc3BhY2Ug dHlwbnMgT04gdHlwbnMub2lkPXR5cC50eXBuYW1lc3BhY2UKKyAgICBKT0lO IHBnX2xhbmd1YWdlIGxuZyBPTiBsbmcub2lkPXByb2xhbmcKKyAgICBMRUZU IE9VVEVSIEpPSU4gcGdfZGVzY3JpcHRpb24gZGVzIE9OIChkZXMub2Jqb2lk PXByLm9pZCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19wcm9jJzo6cmVnY2xhc3Mp CitXSEVSRSBwcm9pc2FnZyA9IEZBTFNFIEFORCBwcm9uYW1lc3BhY2UgPSB7 eyBub2RlX2lkIH19OjpvaWQKKyAgICBBTkQgdHlwbmFtZSB7eyAnTk9UJyBp ZiB0eXBlICE9ICd0cmlnZ2VyX2Z1bmN0aW9uJyBlbHNlICcnIH19IElOICgn dHJpZ2dlcicsICdldmVudF90cmlnZ2VyJykKK09SREVSIEJZIHByb25hbWUK K3slIGVuZGlmICV9CisKK3slIGlmIHR5cGUgPT0gJ3NlcXVlbmNlJyBhbmQg bm9kZV9pZCBhbmQgbm9kZV9uYW1lICV9CitTRUxFQ1QKKyAgICBjbC5yZWxu YW1lIEFTIG5hbWUsCisgICAgJ1NlcXVlbmNlJyBBUyBvYmplY3RfdHlwZSwK KyAgICAne3sgbnNwbmFtZSB9fScgQVMgbnNwbmFtZSwKKyAgICAnaWNvbi1z ZXF1ZW5jZScgQVMgaWNvbgorRlJPTSBwZ19jbGFzcyBjbAorICAgIExFRlQg T1VURVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9 Y2wub2lkIEFORCBkZXMuY2xhc3NvaWQ9J3BnX2NsYXNzJzo6cmVnY2xhc3Mp CitXSEVSRSByZWxraW5kID0gJ1MnIEFORCByZWxuYW1lc3BhY2UgID0ge3sg bm9kZV9pZCB9fTo6b2lkCitPUkRFUiBCWSBjbC5yZWxuYW1lCit7JSBlbmRp ZiAlfQorCit7JSBpZiB0eXBlID09ICd0YWJsZScgYW5kIG5vZGVfaWQgYW5k IG5vZGVfbmFtZSAlfQorU0VMRUNUIHJlbC5yZWxuYW1lIEFTIG5hbWUsCisg ICAgJ1RhYmxlJyBBUyBvYmplY3RfdHlwZSwKKyAgICAne3sgbnNwbmFtZSB9 fScgQVMgbnNwbmFtZSwKKyAgICAnaWNvbi10YWJsZScgQVMgaWNvbgorRlJP TSBwZ19jbGFzcyByZWwKKyAgICBMRUZUIE9VVEVSIEpPSU4gcGdfdGFibGVz cGFjZSBzcGMgT04gc3BjLm9pZD1yZWwucmVsdGFibGVzcGFjZQorICAgIExF RlQgT1VURVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpv aWQ9cmVsLm9pZCBBTkQgZGVzLm9ianN1YmlkPTAgQU5EIGRlcy5jbGFzc29p ZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKKyAgICBMRUZUIE9VVEVSIEpPSU4g cGdfY29uc3RyYWludCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5vaWQgQU5E IGNvbi5jb250eXBlPSdwJworICAgIExFRlQgT1VURVIgSk9JTiBwZ19jbGFz cyB0c3QgT04gdHN0Lm9pZCA9IHJlbC5yZWx0b2FzdHJlbGlkCisgICAgTEVG VCBKT0lOIHBnX3R5cGUgdHlwIE9OIHJlbC5yZWxvZnR5cGU9dHlwLm9pZAor V0hFUkUgcmVsLnJlbGtpbmQgSU4gKCdyJywncycsJ3QnKSBBTkQgcmVsLnJl bG5hbWVzcGFjZSA9IHt7IG5vZGVfaWQgfX06Om9pZAorT1JERVIgQlkgcmVs LnJlbG5hbWUKK3slIGVuZGlmICV9CisKK3slIGlmIHR5cGUgPT0gJ2NvbGwt dmlldycgYW5kIG5vZGVfaWQgYW5kIG5vZGVfbmFtZSAlfQorU0VMRUNUCisg ICAgYy5yZWxuYW1lIEFTIG5hbWUsCisgICAgJ1ZpZXcnIEFTIG9iamVjdF90 eXBlLAorICAgICd7eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAgICdp Y29uLWNvbGwtdmlldycgQVMgaWNvbgorRlJPTSBwZ19jbGFzcyBjCisgICAg TEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3BhY2Ugc3BjIE9OIHNwYy5vaWQ9 Yy5yZWx0YWJsZXNwYWNlCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2Ny aXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jLm9pZCBhbmQgZGVzLm9ianN1 YmlkPTAgQU5EIGRlcy5jbGFzc29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykK KyAgICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9OIHRzdC5vaWQg PSBjLnJlbHRvYXN0cmVsaWQKK1dIRVJFICgoYy5yZWxoYXNydWxlcyBBTkQg KEVYSVNUUyAoCisgICAgU0VMRUNUIHIucnVsZW5hbWUKKyAgICBGUk9NIHBn X3Jld3JpdGUgcgorICAgIFdIRVJFICgoci5ldl9jbGFzcyA9IGMub2lkKQor ICAgICAgICBBTkQgKGJwY2hhcihyLmV2X3R5cGUpID0gJzEnOjpicGNoYXIp KSApKQorICAgICAgICkgT1IgKGMucmVsa2luZCA9ICd2Jzo6Y2hhcikpCitB TkQgYy5yZWxuYW1lc3BhY2UgPSB7eyBub2RlX2lkIH19OjpvaWQKK09SREVS IEJZIGMucmVsbmFtZQoreyUgZW5kaWYgJX0K --001a1142052c119a6c052d86a7c9 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 --001a1142052c119a6c052d86a7c9--