Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKIIF-0007Ae-VJ for pgadmin-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 09:07:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jKIIE-00078n-So for pgadmin-hackers@arkaria.postgresql.org; Fri, 03 Apr 2020 09:07:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jKIIE-00078f-H1 for pgadmin-hackers@lists.postgresql.org; Fri, 03 Apr 2020 09:07:14 +0000 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jKIIB-0004XX-Bb for pgadmin-hackers@postgresql.org; Fri, 03 Apr 2020 09:07:14 +0000 Received: by mail-lf1-x134.google.com with SMTP id r17so1593470lff.2 for ; Fri, 03 Apr 2020 02:07:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KkRCKPPBZNV9D/eGD6R4uTJsKoScZOR5AhG0tZcrhoY=; b=HlewnIahpgqf6xxWiM+EObpF1f6qT2+LIqKv9UGJffkLJJ8Qi4YuNz14AWcUlWcaIF vJiuDRCaeFMxhMZFTUE4ZONUvWmShj5eiRSZ/XNOYkxaIGObXapDtmoUr/iUznq58fIC +EWI8MOfGot5dBi3Tm0VqdmEuT2hIypBJ20YS7FPSeomtGNuGo9E/z0outpNsxrylhMY zI5EoUzbvea/FGy16YiQ1NneZoGFust1DUXlRlytdhNXHR2bLlZ0VTi5ZCRobngXVv2a /dZsAfAt9hlfytwIlBSKOOCwpgNUp6tLPWq6sW9EV2vjkl26nVrl1Pca/rd+Kt7PWxrR nMuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KkRCKPPBZNV9D/eGD6R4uTJsKoScZOR5AhG0tZcrhoY=; b=hHYWmTk1nujRifTDu2nph4OH1Echlp3Rvl9XWrw/bac771WD/KOY++0j3bUhPMmVbA SFzIfLSQCHYhxkf5ADI0Ond8/UDDHc8WLIvdHUXjH/0oVVJ75tMuuYxWrcr1mvC1fldz 3FKWGi5hcmWkIpo1o67YIG67Sb2p8TUDb80G4I/tr9LkPcPI8QDS5VGZ5cpDquSoIJW5 3xEa9MgYvHHwaJU2RjI1anLOf1WZrt3oZmxfKjUQz2opyt7O3XCv6kryohI37VbevkxI NMDK27z9YN8RdeQbPXVGmWriEyEZZv0DwjJ/lpmDJB+QafSrf1N4aA+w1D66ErP91xbW +5Gg== X-Gm-Message-State: AGi0PuYAXpWBUayAytJ1kXTxzc2CYSqQQkasOpJ4FQN5BYX9jmzXS5pB HHBQi3LxGwEsfHd2k9z+r/cfWhsRCWzvuSMva1VCgjONpWgE4ou9AJsaf//6VJHNS5bih2SeFvc q+BOSAw9QAkxIuuItdjp1vP8+l/6Y4xu7lef1ZuiFhONhFxuK99BKQnd5DCjzle7yyhLfYnJC0i VfsZESdeHsNItwq4RQGXMZi16lzpjxqBD5KEiZ46dltW83l3mGTPY= X-Google-Smtp-Source: APiQypLyRFrCEt0xiDCnX8/NCom5SRecQ6TqQPkttwp5KzX8nsOjypt9BwhidwxUkjQaWb3uuDauLBXptvJOZrfG7is= X-Received: by 2002:ac2:4a8a:: with SMTP id l10mr4759701lfp.17.1585904830367; Fri, 03 Apr 2020 02:07:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Khushboo Vashi Date: Fri, 3 Apr 2020 14:37:02 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch] - RM 2186 - Support external authentication sources [LDAP] To: Akshay Joshi Cc: Dave Page , pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000010092c05a25f3ebf" X-CLOUD-SEC-AV-Info: edb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000010092c05a25f3ebf Content-Type: multipart/alternative; boundary="00000000000010092a05a25f3ebd" --00000000000010092a05a25f3ebd Content-Type: text/plain; charset="UTF-8" Hi, Please find the attached updated patch. On Fri, Apr 3, 2020 at 1:50 PM Akshay Joshi wrote: > Hi Khushboo > > Some more review comments: > > - Fix one small PEP8 issue. > > Fixed. > > - If ipAddress or Port is not set in the configuration file then > browser showing the following data, it should be shown proper error message > on the login page > - {"success":0,"errormsg":"Port could not be cast to integer value > as ''","info":"","result":null,"data":null} > > Fixed. > > - Disable the Username field in the User Management dialog if the > authentication source is set to internal. > > Done. > > - API Test cases are failing if LDAP related settings are not > provided in the test_config.json file. If the configuration is not provided > then LDAP tests should be skipped. > > Fixed. > @Dave, I have tested and done the code review. Can you please do it once > as well, whenever Khushboo will fix and send the updated patch? > > Thanks, Khushboo > > On Thu, Apr 2, 2020 at 7:00 PM Khushboo Vashi < > khushboo.vashi@enterprisedb.com> wrote: > >> Hi Akshay, >> >> Please find the attached updated patch. >> >> On Thu, Apr 2, 2020 at 4:55 PM Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> Hi Khushboo >>> >>> Following are the initial review comments (GUI): >>> >>> *Desktop Mode: * >>> >>> - KeyError: '_auth_source_manager_obj' in desktop mode. (*Note* >>> error occurs when the patch has applied and server mode is False.) >>> >>> Fixed. >> >>> *Server Mode:* >>> >>> AUTHENTICATION_SOURCES = ['internal'] >>> >>> >>> - Try to add a new user with the same email address, it throws a >>> unique key constraint error. Validation was there previously before saving >>> it. >>> >>> Fixed. >> >>> AUTHENTICATION_SOURCES = ['internal', 'ldap'] >>> >>> - Try to add a new user with the same email address, it throws >>> unique key constraint error which should not it may possible that the user >>> has the same email address for internal and ldap. >>> >>> If the source is internal, it will not allow but with ldap, we can add >> the user with the same email id. >> >>> AUTHENTICATION_SOURCES = ['ldap'] >>> >>> - If ipAddress or Port is not set in the configuration file then >>> browser showing the following data, it should be shown proper error message >>> on the login page >>> - {"success":0,"errormsg":"Port could not be cast to integer >>> value as ''","info":"","result":null,"data":null} >>> >>> Done >> >>> >>> - If IP address and port is provided but it is wrong, it shows the >>> following error, can we make a generic error message? Also clicking on the >>> Close button on that error message is not working. >>> [image: Screenshot 2020-04-02 at 4.23.55 PM.png] >>> >>> I will look into the close button issue as it is an existing issue. >> >>> >>> - >>> - IP address and port of LDAP server are correct, give wrong user >>> name and password, it shows error "Error binding to the LDAP Server: None". >>> Please correct the appropriate error message. >>> >>> Fixed. >> >>> >>> - All the configuration parameter is correct and tries to log in on >>> LDAP server using username (*not email address*) and password got following >>> error: >>> >>> current_user.email.split('@')[0] if config.SERVER_MODE is True >>> AttributeError: 'NoneType' object has no attribute 'split'. >>> >>> Fixed. >> >>> Not able to test due to the above error. Please fix and resend the patch. >>> >> >> Thanks, >> Khushboo >> >> Thanks, >> Khushboo >> >>> >>> On Thu, Apr 2, 2020 at 2:06 PM Khushboo Vashi < >>> khushboo.vashi@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> Resending the patch. >>>> Missed the requirements.txt file in the previous patch. >>>> >>>> Thanks, >>>> Khushboo >>>> >>>> On Wed, Apr 1, 2020 at 5:38 PM Khushboo Vashi < >>>> khushboo.vashi@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> Please find the attached updated patch which includes the review >>>>> comments given in the review meeting: >>>>> >>>>> 1. Do not store password for ldap user in sqlite database >>>>> 2. Forgot Password : Give error to ldap users >>>>> 3. User Management dialog changes >>>>> 4. Authentication source display besides username / email after login >>>>> >>>>> Thanks, >>>>> Khushboo >>>>> >>>>> >>>>> On Tue, Mar 24, 2020 at 3:20 PM Khushboo Vashi < >>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>> >>>>>> Please disregard my previous patch, attached the updated patch. :) >>>>>> >>>>>> >>>>>> On Tue, Mar 24, 2020 at 10:32 AM Khushboo Vashi < >>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>> >>>>>>> Please disregard my previous patch, attached the updated patch. >>>>>>> >>>>>>> On Tue, Mar 24, 2020 at 10:29 AM Khushboo Vashi < >>>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> Please find the attached updated patch. >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Mar 17, 2020 at 4:11 PM Dave Page >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi >>>>>>>>> >>>>>>>>> On Tue, Mar 17, 2020 at 10:24 AM Khushboo Vashi < >>>>>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>>>>> >>>>>>>>>> Hi Dave, >>>>>>>>>> >>>>>>>>>> Thanks for the review. >>>>>>>>>> >>>>>>>>>> On Tue, Mar 17, 2020 at 3:42 PM Dave Page >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi >>>>>>>>>>> >>>>>>>>>>> 30 second read of the first version of the patch... >>>>>>>>>>> >>>>>>>>>>> - Please move the configuration into config.py. Users should >>>>>>>>>>> never have to modify a distributed file (it messes up packaging). I don't >>>>>>>>>>> see any reason to use a different file just for auth config. >>>>>>>>>>> >>>>>>>>>>> There are many settings for the LDAP, and in the future we will >>>>>>>>>> add other external sources also, so I thought it would be better if we have >>>>>>>>>> different file for the authentication. >>>>>>>>>> >>>>>>>>> >>>>>>>>> Sure, but our config file is small compared to many. Splitting >>>>>>>>> things out is more confusing for users. If they want to do that themselves >>>>>>>>> of course, they can add a config_local.py file which includes other files >>>>>>>>> as needed. >>>>>>>>> >>>>>>>> Fixed. >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> - I think all config options should be prefixed with LDAP_ as we >>>>>>>>>>> may have things like CERT_FILE for other purposes too. >>>>>>>>>>> >>>>>>>>>>> Sure. >>>>>>>>>> >>>>>>>>> Done. >>>>>>>> >>>>>>>>> - I don't see any test cases. >>>>>>>>>>> >>>>>>>>>>> I will think about this, as right now no idea how to write test >>>>>>>>>> cases for this. >>>>>>>>>> >>>>>>>>> >>>>>>>>> It should be fairly straightforward to write tests for some of the >>>>>>>>> functions in the auth classes. For testing the actual LDAP stuff, we >>>>>>>>> probably need to add LDAP config options to test_config.json, and only if >>>>>>>>> present, run the tests. That would probably need to support a list of LDAP >>>>>>>>> servers, so we can test with different configurations (LDAP, LDAPS, >>>>>>>>> LDAP_STARTTLS, AD etc). >>>>>>>>> >>>>>>>>> >>>>>>>> Done. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Khushboo >>>>>>>> >>>>>>>>> Thanks. >>>>>>>>>>> >>>>>>>>>>> Thanks, >>>>>>>>>> Khushboo >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Mar 17, 2020 at 8:55 AM Khushboo Vashi < >>>>>>>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> Please find the attached patch to support LDAP Authentication >>>>>>>>>>>> in Server mode. >>>>>>>>>>>> To test the patch, config_auth.py needs to be configured for >>>>>>>>>>>> LDAP configurations. The config settings are explained in this file in >>>>>>>>>>>> detail. After configuring the parameters, start the pgadmin server in >>>>>>>>>>>> Server mode and connect with LDAP server with the valid user via login page. >>>>>>>>>>>> >>>>>>>>>>>> I have tested this patch with ldap and ldap + ssl/tls. With the >>>>>>>>>>>> TLS, I have used the default config of ldap3 without certificates. >>>>>>>>>>>> >>>>>>>>>>>> @Dave, can you please review this patch, as you have a better >>>>>>>>>>>> understanding of LDAP and you can easily pointed out if I have missed >>>>>>>>>>>> anything. >>>>>>>>>>>> >>>>>>>>>>>> Note: For the document update I will create the task and assign >>>>>>>>>>>> to Nidhi for the same. >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Khushboo >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Dave Page >>>>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>>>> Twitter: @pgsnake >>>>>>>>>>> >>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Dave Page >>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>> Twitter: @pgsnake >>>>>>>>> >>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>> >>>>>>>> >>> >>> -- >>> *Thanks & Regards* >>> *Akshay Joshi* >>> >>> *Sr. Software Architect* >>> *EnterpriseDB Software India Private Limited* >>> *Mobile: +91 976-788-8246* >>> >> > > -- > *Thanks & Regards* > *Akshay Joshi* > > *Sr. Software Architect* > *EnterpriseDB Software India Private Limited* > *Mobile: +91 976-788-8246* > --00000000000010092a05a25f3ebd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Please find the at= tached updated patch.

On Fri, Apr 3, 2020 at 1:50 PM Akshay Joshi <= akshay.joshi@enterprisedb.= com> wrote:
Hi=C2=A0Khushboo

Some more review comments:
  • Fix one small = PEP8 issue.
Fixed.=C2=A0
  • I= f ipAddress or Port is not set in the configuration file then browser showi= ng the following data, it should be shown proper error message on the login= page
    • {"success":0,"errormsg":"P= ort could not be cast to integer value as '<port>'",&quo= t;info":"","result":null,"data":null}
Fixed.=C2=A0
  • Dis= able the Username field in the User Management dialog if the authentication= source is set to internal.
Done.=C2= =A0
  • API Test cases are failing if LDAP related settings are not p= rovided=C2=A0in the test_config.json=C2=A0file. If the configuration is not= provided then LDAP tests should be skipped.=C2=A0
Fixed.=C2=A0
@Dave, I have tested and done the code review= . Can you please do it once as well, whenever Khushboo will fix and send th= e updated patch?

Thanks,
Khushboo=C2=A0

AUTHENTI= CATION_SOURCES =3D ['ldap']
  • If ipAddress or Port is not = set in the configuration file then browser showing the following data, it s= hould be shown proper error message on the login page
    • {"success":0,"e= rrormsg":"Port could not be cast to integer value as '<por= t>'","info":"","result":null,&quo= t;data":null}
    All the configuration parameter is correct and tries to log in on LDA= P server using username (*not email address*) and password got following er= ror:
current_user.email.split('= @')[0] if config.SERVER_MODE is True
AttributeError: 'NoneType&#= 39; object has no attribute 'split'.
Fixed.=C2=A0
Not able to test due to= the above error. Please fix and resend the patch.
=

Thanks,
Khushboo

Tha= nks,
Khushboo

Hi,

Resending the patch.=C2=A0
= Missed the requirements.txt file in the previous patch.

Thanks,
Khushboo

=
Hi,

Please find the attached updated patch which includes the review comment= s given in the review meeting:

1. Do not store pas= sword=C2=A0for ldap user in sqlite database
2. Forgot Password : = Give error to ldap users
3. User Management dialog changes=C2=A0<= /div>
4. Authentication source display besides username / email after l= ogin

Thanks,
Khushboo


On Tue, Mar 24, 2020 at 3:20 PM Khushboo Vashi <khushboo.vashi@enterprisedb.= com> wrote:
Please disregard my previous patch, at= tached the updated patch. :)


On Tue, Mar 24, 2020 at 10:32 A= M Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrote:
Please disre= gard my previous patch, attached the updated patch.

On Tue, Mar 24, 2020 at = 10:29 AM Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrote:
Hi,

Please find the attached updated patch.<= /div>


On Tue, Mar 17, 2020 at 4:11 PM Dave Page <dpage@pgadmin.org> w= rote:
Hi

On Tue, Mar 17, 2020 at 10:24 AM Khushboo Vashi <khushboo.vash= i@enterprisedb.com> wrote:
Hi Dave,

T= hanks for the review.

On Tue, Mar 17, 2020 at 3:42 PM Dave Page <dpage@pgadmin.org> w= rote:
Hi

30 second read of the first version of the p= atch...

- Please move the configuration into confi= g.py. Users should never have to modify a distributed file (it messes up pa= ckaging). I don't see any reason to use a different file just for auth = config.

There are many settings= for the LDAP, and in the future we will add other external sources also, s= o I thought it would be better if we have different file for the authentica= tion.

Sure, but our confi= g file is small compared to many. Splitting things out is more confusing fo= r users. If they want to do that themselves of course, they can add a confi= g_local.py file which includes other files as needed.
Fixed.=C2=A0
=C2=A0
- I think all config options should be prefi= xed with LDAP_ as we may have things like CERT_FILE for other purposes too.=

Sure.=C2=A0
<= /blockquote>
Done.=C2=A0
- I don't see any test cases.
<= br>
I will think about this, as right now no i= dea how to write test cases for this.=C2=A0
<= div>
It should be fairly straightforward to write tests for s= ome of the functions in the auth classes. For testing the actual LDAP stuff= , we probably need to add LDAP config options to test_config.json, and only= if present, run the tests. That would probably need to support a list of L= DAP servers, so we can test with different configurations (LDAP, LDAPS, LDA= P_STARTTLS, AD etc).
=C2=A0
Do= ne.

Thanks,
Khushboo
<= div dir=3D"ltr">
Thanks.

Thanks,
Khushboo=C2=A0

On Tue, Mar 17, 2020 at 8= :55 AM Khushboo Vashi <khushboo.vashi@enterprisedb.com> wrote:
Hi,
Please find the attached patch to support LDAP Authenticati= on in Server mode.
To test the patch, config_auth.py needs to be = configured for LDAP configurations. The config settings are explained in th= is file in detail. After configuring the parameters, start the pgadmin serv= er in Server mode and connect with LDAP server with the valid user via logi= n page.

I have tested this patch with ldap and lda= p=C2=A0+ ssl/tls. With the TLS, I have used the default config of ldap3 wit= hout certificates.

@Dave, can you please review th= is patch, as you have a better understanding of LDAP and you can easily poi= nted out if I have missed anything.

Note: For the = document update I will create the task and assign to Nidhi for the same.

Thanks,
Khushboo


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

EnterpriseDB= UK: http://www.e= nterprisedb.com
The Enterprise PostgreSQL Company


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

EnterpriseDB= UK: http://www.e= nterprisedb.com
The Enterprise PostgreSQL Company


--
Thanks & Regards
Akshay Joshi
<= font color=3D"#3333FF">Sr. Software Architect=
<= font color=3D"#000000" face=3D"arial, sans-serif">EnterpriseDB Software = India Private Limited
Mobile: +91 976-788-8246=


--
Thanks & Regards
Akshay Joshi
<= font color=3D"#3333FF">Sr. Software Architect=
<= font color=3D"#000000" face=3D"arial, sans-serif">EnterpriseDB Software = India Private Limited
Mobile: +91 976-788-8246=
--00000000000010092a05a25f3ebd-- --00000000000010092c05a25f3ebf Content-Type: application/octet-stream; name="RM_2186_v5.patch" Content-Disposition: attachment; filename="RM_2186_v5.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k8jyrqfr0 ZGlmZiAtLWdpdCBhL3JlcXVpcmVtZW50cy50eHQgYi9yZXF1aXJlbWVudHMudHh0CmluZGV4IGYw Y2M3MTcxNS4uN2Y1ZjVmMmNjIDEwMDY0NAotLS0gYS9yZXF1aXJlbWVudHMudHh0CisrKyBiL3Jl cXVpcmVtZW50cy50eHQKQEAgLTM5LDMgKzM5LDQgQEAgcHl0aG9uLWRhdGV1dGlsPj0yLjguMAog U1FMQWxjaGVteT49MS4zLjEzCiBGbGFzay1TZWN1cml0eS1Ub28+PTMuMC4wCiBzc2h0dW5uZWw+ PTAuMS40CitsZGFwMz49Mi41LjEKZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29u ZmlnLnB5CmluZGV4IGY1MDhmOGZjNi4uMzM0M2Y0YjZkIDEwMDY0NAotLS0gYS93ZWIvY29uZmln LnB5CisrKyBiL3dlYi9jb25maWcucHkKQEAgLTQ4OCw2ICs0ODgsNjUgQEAgTUFTVEVSX1BBU1NX T1JEX1JFUVVJUkVEID0gVHJ1ZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIEVOSEFOQ0VEX0NPT0tJRV9Q Uk9URUNUSU9OID0gVHJ1ZQogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFeHRlcm5hbCBBdXRoZW50 aWNhdGlvbiBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERlZmF1bHQgc2V0dGluZyBp cyBpbnRlcm5hbAorIyBFeHRlcm5hbCBTdXBwb3J0ZWQgU291cmNlczogbGRhcAorIyBNdWx0aXBs ZSBhdXRoZW50aWNhdGlvbiBjYW4gYmUgYWNoaWV2ZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRl ciB0bworIyBbJ2xkYXAnLCAnaW50ZXJuYWwnXS4gcGdBZG1pbiB3aWxsIGF1dGhlbnRpY2F0ZSB0 aGUgdXNlciB3aXRoIGxkYXAgZmlyc3QsCisjIGluIGNhc2Ugb2YgZmFpbHVyZSBpbnRlcm5hbCBh dXRoZW50aWNhdGlvbiB3aWxsIGJlIGRvbmUuCisKK0FVVEhFTlRJQ0FUSU9OX1NPVVJDRVMgPSBb J2ludGVybmFsJ10KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTERBUCBDb25maWd1cmF0aW9uCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCisjIEFmdGVyIGxkYXAgYXV0aGVudGljYXRpb24sIHVzZXIgd2ls bCBiZSBhZGRlZCBpbnRvIHRoZSBTUUxpdGUgZGF0YWJhc2UKKyMgYXV0b21hdGljYWxseSwgaWYg c2V0IHRvIFRydWUuCisjIFNldCBpdCB0byBGYWxzZSwgaWYgdXNlciBzaG91bGQgbm90IGJlIGFk ZGVkIGF1dG9tYXRpY2FsbHksCisjIGluIHRoaXMgY2FzZSBBZG1pbiBoYXMgdG8gYWRkIHRoZSB1 c2VyIG1hbnVhbGx5IGluIHRoZSBTUUxpdGUgZGF0YWJhc2UuCisKK0xEQVBfQVVUT19DUkVBVEVf VVNFUiA9IFRydWUKKworIyBDb25uZWN0aW9uIHRpbWVvdXQKK0xEQVBfQ09OTkVDVElPTl9USU1F T1VUID0gMTAKKworIyBTZXJ2ZXIgY29ubmVjdGlvbiBkZXRhaWxzIChSRVFVSVJFRCkKKyMgZXhh bXBsZTogbGRhcDovLzxpcC1hZGRyZXNzPjo8cG9ydD4gb3IgbGRhcDovLzxob3N0bmFtZT46PHBv cnQ+CitMREFQX1NFUlZFUl9VUkkgPSAnbGRhcDovLzxpcC1hZGRyZXNzPjo8cG9ydD4nCisKKyMg QmFzZUROIChSRVFVSVJFRCkKKyMgQUQgZXhhbXBsZToKKyMgKCYob2JqZWN0Q2xhc3M9dXNlciko bWVtYmVyb2Y9Q049TVlHUk9VUCxDTj1Vc2VycyxkYz1leGFtcGxlLGRjPWNvbSkpCisjIE9wZW5M REFQIGV4YW1wbGU6IENOPVVzZXJzLGRjPWV4YW1wbGUsZGM9Y29tCitMREFQX0JBU0VfRE4gPSAn PEJhc2UtRE4+JworCisjIFRoZSBMREFQIGF0dHJpYnV0ZSBjb250YWluaW5nIHVzZXIgbmFtZXMu IEluIE9wZW5MREFQLCB0aGlzIG1heSBiZSAndWlkJworIyB3aGlsc3QgaW4gQUQsICdzQU1BY2Nv dW50TmFtZScgbWlnaHQgYmUgYXBwcm9wcmlhdGUuIChSRVFVSVJFRCkKK0xEQVBfVVNFUk5BTUVf QVRUUklCVVRFID0gJzxVc2VyLWlkPicKKworIyBTZWFyY2ggbGRhcCBmb3IgZnVydGhlciBhdXRo ZW50aWNhdGlvbgorTERBUF9TRUFSQ0hfQkFTRV9ETiA9ICc8U2VhcmNoLUJhc2UtRE4+JworCisj IEZpbHRlciBzdHJpbmcgZm9yIHRoZSB1c2VyIHNlYXJjaC4KKyMgRm9yIE9wZW5MREFQLCAnKGNu PSopJyBtYXkgd2VsbCBiZSBlbm91Z2guCisjIEZvciBBRCwgeW91IG1pZ2h0IHVzZSAnKG9iamVj dENsYXNzPXVzZXIpJyAoUkVRVUlSRUQpCitMREFQX1NFQVJDSF9GSUxURVIgPSAnKG9iamVjdGNs YXNzPSopJworCisjIFNlYXJjaCBzY29wZSBmb3IgdXNlcnMgKG9uZSBvZiBCQVNFLCBMRVZFTCBv ciBTVUJUUkVFKQorTERBUF9TRUFSQ0hfU0NPUEUgPSAnU1VCVFJFRScKKworIyBVc2UgVExTPyBJ ZiB0aGUgVVJJIHNjaGVtZSBpcyBsZGFwczovLywgdGhpcyBpcyBpZ25vcmVkLgorTERBUF9VU0Vf U1RBUlRUTFMgPSBGYWxzZQorCisjIFRMUy9TU0wgY2VydGlmaWNhdGVzLiBTcGVjaWZ5IGlmIHJl cXVpcmVkLCBvdGhlcndpc2UgbGVhdmUgZW1wdHkKK0xEQVBfQ0FfQ0VSVF9GSUxFID0gJycKK0xE QVBfQ0VSVF9GSUxFID0gJycKK0xEQVBfS0VZX0ZJTEUgPSAnJworCiAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwogIyBMb2NhbCBjb25maWcgc2V0dGluZ3MKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQg YS93ZWIvbWlncmF0aW9ucy92ZXJzaW9ucy83ZmVkZjg1MzE4MDJfLnB5IGIvd2ViL21pZ3JhdGlv bnMvdmVyc2lvbnMvN2ZlZGY4NTMxODAyXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjg5NDAxNjg2YQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9taWdyYXRpb25zL3Zl cnNpb25zLzdmZWRmODUzMTgwMl8ucHkKQEAgLTAsMCArMSw1MSBAQAorCisiIiJlbXB0eSBtZXNz YWdlCisKK1JldmlzaW9uIElEOiA3ZmVkZjg1MzE4MDIKK1JldmlzZXM6IGFmZjE0MzZlM2M4Ywor Q3JlYXRlIERhdGU6IDIwMjAtMDItMjYgMTE6MjQ6NTQuMzUzMjg4CisKKyIiIgorZnJvbSBhbGVt YmljIGltcG9ydCBvcAoraW1wb3J0IHNxbGFsY2hlbXkgYXMgc2EKK2Zyb20gcGdhZG1pbi5tb2Rl bCBpbXBvcnQgZGIKKworIyByZXZpc2lvbiBpZGVudGlmaWVycywgdXNlZCBieSBBbGVtYmljLgor cmV2aXNpb24gPSAnN2ZlZGY4NTMxODAyJworZG93bl9yZXZpc2lvbiA9ICdhZmYxNDM2ZTNjOGMn CiticmFuY2hfbGFiZWxzID0gTm9uZQorZGVwZW5kc19vbiA9IE5vbmUKKworCitkZWYgdXBncmFk ZSgpOgorCisgICAgZGIuZW5naW5lLmV4ZWN1dGUoIkFMVEVSIFRBQkxFIHVzZXIgUkVOQU1FIFRP IHVzZXJfb2xkIikKKworICAgIGRiLmVuZ2luZS5leGVjdXRlKCIiIgorICAgICAgICBDUkVBVEUg VEFCTEUgdXNlciAoCisgICAgICAgICAgICBpZCBJTlRFR0VSIE5PVCBOVUxMLAorICAgICAgICAg ICAgdXNlcm5hbWUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMLAorICAgICAgICAgICAgZW1haWwgVkFS Q0hBUigyNTYpLAorICAgICAgICAgICAgcGFzc3dvcmQgVkFSQ0hBUigyNTYpLAorICAgICAgICAg ICAgYWN0aXZlIEJPT0xFQU4gTk9UIE5VTEwsCisgICAgICAgICAgICBjb25maXJtZWRfYXQgREFU RVRJTUUsCisgICAgICAgICAgICBtYXN0ZXJwYXNzX2NoZWNrIFZBUkNIQVIoMjU2KSwKKyAgICAg ICAgICAgIGF1dGhfc291cmNlIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBERUZBVUxUICdpbnRlcm5h bCcsCisgICAgICAgICAgICBQUklNQVJZIEtFWSAoaWQpLAorICAgICAgICAgICAgVU5JUVVFICh1 c2VybmFtZSwgYXV0aF9zb3VyY2UpLAorICAgICAgICAgICAgQ0hFQ0sgKGFjdGl2ZSBJTiAoMCwg MSkpCisgICAgICAgICk7CisgICAgICAgICIiIikKKworICAgIGRiLmVuZ2luZS5leGVjdXRlKCIi IgorICAgICAgICBJTlNFUlQgSU5UTyB1c2VyICgKKyAgICAgICAgICAgIGlkLCB1c2VybmFtZSwg ZW1haWwsIHBhc3N3b3JkLCBhY3RpdmUsIGNvbmZpcm1lZF9hdCwgbWFzdGVycGFzc19jaGVjawor ICAgICAgICApIFNFTEVDVAorICAgICAgICAgICAgaWQsIGVtYWlsLCBlbWFpbCwgcGFzc3dvcmQs IGFjdGl2ZSwgY29uZmlybWVkX2F0LCBtYXN0ZXJwYXNzX2NoZWNrCisgICAgICAgIEZST00gdXNl cl9vbGQiIiIpCisKKyAgICBkYi5lbmdpbmUuZXhlY3V0ZSgiRFJPUCBUQUJMRSB1c2VyX29sZCIp CisKKworZGVmIGRvd25ncmFkZSgpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3dlYi9wZ0FkbWlu NC5weSBiL3dlYi9wZ0FkbWluNC5weQppbmRleCA4MWVmNmMzOTYuLjQ1ZDMzYjcyZCAxMDA2NDQK LS0tIGEvd2ViL3BnQWRtaW40LnB5CisrKyBiL3dlYi9wZ0FkbWluNC5weQpAQCAtMTYwLDYgKzE2 MCwxOCBAQCBpZiAnUEdBRE1JTl9JTlRfS0VZJyBpbiBnbG9iYWxzKCk6CiBlbHNlOgogICAgIGFw cC5QR0FETUlOX0lOVF9LRVkgPSAnJwogCisjIEF1dGhlbnRpY2F0aW9uIHNvdXJjZXMKK2FwcC5Q R0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UgPSAnaW50ZXJuYWwnCithcHAuUEdBRE1JTl9TVVBQ T1JURURfQVVUSF9TT1VSQ0UgPSBbJ2ludGVybmFsJywgJ2xkYXAnXQorCitpZiBsZW4oY29uZmln LkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMpID4gMDoKKyAgICBhcHAuUEdBRE1JTl9FWFRFUk5BTF9B VVRIX1NPVVJDRSA9IGNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTWzBdCitlbHNlOgorICAg IGFwcC5QR0FETUlOX0VYVEVSTkFMX0FVVEhfU09VUkNFID0gYXBwLlBHQURNSU5fREVGQVVMVF9B VVRIX1NPVVJDRQorCithcHAubG9nZ2VyLmRlYnVnKAorICAgICJBdXRoZW50aWNhdGlvbiBTb3Vy Y2U6ICVzIiAlIGFwcC5QR0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UpCisKICMgT3V0cHV0IGEg c3RhcnR1cCBtZXNzYWdlIGlmIHdlJ3JlIG5vdCB1bmRlciB0aGUgcnVudGltZSBhbmQgc3RhcnR1 cC4KICMgSWYgd2UncmUgdW5kZXIgV1NHSSwgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0 aGlzCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v X19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9fX2luaXRfXy5weQppbmRleCA4MjBjODAxNWEuLjVj YTJhZTY3YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vX19pbml0X18ucHkKKysrIGIvd2ViL3Bn YWRtaW4vX19pbml0X18ucHkKQEAgLTM4LDcgKzM4LDcgQEAgZnJvbSBkYXRldGltZSBpbXBvcnQg dGltZWRlbHRhCiBmcm9tIHBnYWRtaW4uc2V0dXAgaW1wb3J0IGdldF92ZXJzaW9uLCBzZXRfdmVy c2lvbgogZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IGludGVybmFsX3NlcnZlcl9lcnJv cgogZnJvbSBwZ2FkbWluLnV0aWxzLmNzcmYgaW1wb3J0IHBnQ1NSRlByb3RlY3QKLQorZnJvbSBw Z2FkbWluIGltcG9ydCBhdXRoZW50aWNhdGUKIAogIyBJZiBzY3JpcHQgaXMgcnVubmluZyB1bmRl ciBweXRob24zLCBpdCB3aWxsIG5vdCBoYXZlIHRoZSB4cmFuZ2UgZnVuY3Rpb24KICMgZGVmaW5l ZApAQCAtMzk4LDYgKzM5OCw3IEBAIGRlZiBjcmVhdGVfYXBwKGFwcF9uYW1lPU5vbmUpOgogICAg ICMgTG9hZCBhbGwgYXZhaWxhYmxlIHNlcnZlciBkcml2ZXJzCiAgICAgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKICAgICBkcml2ZXIuaW5pdF9hcHAoYXBwKQorICAgIGF1dGhlbnRpY2F0ZS5pbml0X2FwcChh cHApCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICMgUmVnaXN0ZXIgbGFuZ3VhZ2UgdG8g dGhlIHByZWZlcmVuY2VzIGFmdGVyIGxvZ2luCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9hdXRo ZW50aWNhdGUvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvX19pbml0X18u cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42M2Y1MjRlMjMKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvX19pbml0X18ucHkKQEAgLTAs MCArMSwxNTYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgVGhlIHBnQWRtaW4gRGV2 ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0 Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIkEgYmx1ZXByaW50IG1v ZHVsZSBpbXBsZW1lbnRpbmcgdGhlIEF1dGhlbnRpY2F0aW9uLiIiIgorCitpbXBvcnQgZmxhc2sK K2ltcG9ydCBwaWNrbGUKK2Zyb20gZmxhc2sgaW1wb3J0IGN1cnJlbnRfYXBwLCBmbGFzaAorZnJv bSBmbGFza19iYWJlbGV4IGltcG9ydCBnZXR0ZXh0Citmcm9tIGZsYXNrX3NlY3VyaXR5IGltcG9y dCBjdXJyZW50X3VzZXIKK2Zyb20gZmxhc2tfc2VjdXJpdHkudmlld3MgaW1wb3J0IF9zZWN1cml0 eSwgX2N0eAorZnJvbSBmbGFza19zZWN1cml0eS51dGlscyBpbXBvcnQgY29uZmlnX3ZhbHVlLCBn ZXRfcG9zdF9sb2dvdXRfcmVkaXJlY3QKK2Zyb20gZmxhc2sgaW1wb3J0IHNlc3Npb24KKworaW1w b3J0IGNvbmZpZworZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCitmcm9t IC5yZWdpc3RyeSBpbXBvcnQgQXV0aFNvdXJjZVJlZ2lzdHJ5CisKK01PRFVMRV9OQU1FID0gJ2F1 dGhlbnRpY2F0ZScKKworCitjbGFzcyBBdXRoZW50aWNhdGVNb2R1bGUoUGdBZG1pbk1vZHVsZSk6 CisgICAgZGVmIGdldF9leHBvc2VkX3VybF9lbmRwb2ludHMoc2VsZik6CisgICAgICAgIHJldHVy biBbJ2F1dGhlbnRpY2F0ZS5sb2dpbiddCisKKworYmx1ZXByaW50ID0gQXV0aGVudGljYXRlTW9k dWxlKE1PRFVMRV9OQU1FLCBfX25hbWVfXywgc3RhdGljX3VybF9wYXRoPScnKQorCisKK0BibHVl cHJpbnQucm91dGUoJy9sb2dpbicsIGVuZHBvaW50PSdsb2dpbicsIG1ldGhvZHM9WydHRVQnLCAn UE9TVCddKQorZGVmIGxvZ2luKCk6CisgICAgIiIiCisgICAgRW50cnkgcG9pbnQgZm9yIGFsbCB0 aGUgYXV0aGVudGljYXRpb24gc291cmNlcy4KKyAgICBUaGUgdXNlciBpbnB1dCB3aWxsIGJlIHZh bGlkYXRlZCBhbmQgYXV0aGVudGljYXRlZC4KKyAgICAiIiIKKyAgICBmb3JtID0gX3NlY3VyaXR5 LmxvZ2luX2Zvcm0oKQorICAgIGF1dGhfb2JqID0gQXV0aFNvdXJjZU1hbmFnZXIoZm9ybSwgY29u ZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJDRVMpCisgICAgc2Vzc2lvblsnX2F1dGhfc291cmNlX21h bmFnZXJfb2JqJ10gPSBOb25lCisKKyAgICAjIFZhbGlkYXRlIHRoZSB1c2VyCisgICAgaWYgbm90 IGF1dGhfb2JqLnZhbGlkYXRlKCk6CisgICAgICAgIGZvciBmaWVsZCBpbiBmb3JtLmVycm9yczoK KyAgICAgICAgICAgIGZvciBlcnJvciBpbiBmb3JtLmVycm9yc1tmaWVsZF06CisgICAgICAgICAg ICAgICAgZmxhc2goZXJyb3IsICd3YXJuaW5nJykKKyAgICAgICAgICAgIHJldHVybiBmbGFzay5y ZWRpcmVjdChnZXRfcG9zdF9sb2dvdXRfcmVkaXJlY3QoKSkKKworICAgICMgQXV0aGVudGljYXRl IHRoZSB1c2VyCisgICAgc3RhdHVzLCBtc2cgPSBhdXRoX29iai5hdXRoZW50aWNhdGUoKQorICAg IGlmIHN0YXR1czoKKyAgICAgICAgIyBMb2dpbiB0aGUgdXNlcgorICAgICAgICBzdGF0dXMsIG1z ZyA9IGF1dGhfb2JqLmxvZ2luKCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg IGZsYXNoKGdldHRleHQobXNnKSwgJ2RhbmdlcicpCisgICAgICAgICAgICByZXR1cm4gZmxhc2su cmVkaXJlY3QoZ2V0X3Bvc3RfbG9nb3V0X3JlZGlyZWN0KCkpCisKKyAgICAgICAgc2Vzc2lvblsn X2F1dGhfc291cmNlX21hbmFnZXJfb2JqJ10gPSBhdXRoX29iai5hc19kaWN0KCkKKyAgICAgICAg cmV0dXJuIGZsYXNrLnJlZGlyZWN0KCcvJykKKworICAgIGZsYXNoKGdldHRleHQobXNnKSwgJ2Rh bmdlcicpCisgICAgcmV0dXJuIGZsYXNrLnJlZGlyZWN0KGdldF9wb3N0X2xvZ291dF9yZWRpcmVj dCgpKQorCisKK2NsYXNzIEF1dGhTb3VyY2VNYW5hZ2VyKCk6CisgICAgIiIiVGhpcyBjbGFzcyB3 aWxsIG1hbmFnZSBhbGwgdGhlIGF1dGhlbnRpY2F0aW9uIHNvdXJjZXMuCisgICAgICIiIgorICAg IGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtLCBzb3VyY2VzKToKKyAgICAgICAgc2VsZi5mb3JtID0g Zm9ybQorICAgICAgICBzZWxmLmF1dGhfc291cmNlcyA9IHNvdXJjZXMKKyAgICAgICAgc2VsZi5z b3VyY2UgPSBOb25lCisgICAgICAgIHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUgPSBOb25lCisK KyAgICBkZWYgYXNfZGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhl IGRpY3Rpb25hcnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC4KKyAgICAgICAgIiIi CisKKyAgICAgICAgcmVzID0gZGljdCgpCisgICAgICAgIHJlc1snc291cmNlX2ZyaWVuZGx5X25h bWUnXSA9IHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUKKyAgICAgICAgcmVzWydhdXRoX3NvdXJj ZXMnXSA9IHNlbGYuYXV0aF9zb3VyY2VzCisKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVm IHNldF9zb3VyY2Uoc2VsZiwgc291cmNlKToKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UK KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnZXRfc291cmNlKHNlbGYpOgorICAgICAgICByZXR1 cm4gc2VsZi5zb3VyY2UKKworICAgIGRlZiBzZXRfc291cmNlX2ZyaWVuZGx5X25hbWUoc2VsZiwg bmFtZSk6CisgICAgICAgIHNlbGYuc291cmNlX2ZyaWVuZGx5X25hbWUgPSBuYW1lCisKKyAgICBA cHJvcGVydHkKKyAgICBkZWYgZ2V0X3NvdXJjZV9mcmllbmRseV9uYW1lKHNlbGYpOgorICAgICAg ICByZXR1cm4gc2VsZi5zb3VyY2VfZnJpZW5kbHlfbmFtZQorCisgICAgZGVmIHZhbGlkYXRlKHNl bGYpOgorICAgICAgICAiIiJWYWxpZGF0ZSB0aHJvdWdoIGFsbCB0aGUgc291cmNlcy4iIiIKKyAg ICAgICAgZm9yIHNyYyBpbiBzZWxmLmF1dGhfc291cmNlczoKKyAgICAgICAgICAgIHNvdXJjZSA9 IGdldF9hdXRoX3NvdXJjZXMoc3JjKQorICAgICAgICAgICAgaWYgc291cmNlLnZhbGlkYXRlKHNl bGYuZm9ybSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZh bHNlCisKKyAgICBkZWYgYXV0aGVudGljYXRlKHNlbGYpOgorICAgICAgICAiIiJBdXRoZW50aWNh dGUgdGhyb3VnaCBhbGwgdGhlIHNvdXJjZXMuIiIiCisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisg ICAgICAgIG1zZyA9IE5vbmUKKyAgICAgICAgZm9yIHNyYyBpbiBzZWxmLmF1dGhfc291cmNlczoK KyAgICAgICAgICAgIHNvdXJjZSA9IGdldF9hdXRoX3NvdXJjZXMoc3JjKQorICAgICAgICAgICAg c3RhdHVzLCBtc2cgPSBzb3VyY2UuYXV0aGVudGljYXRlKHNlbGYuZm9ybSkKKyAgICAgICAgICAg IGlmIHN0YXR1czoKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zb3VyY2Uoc291cmNlKQorICAg ICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZworICAgICAgICByZXR1cm4gc3RhdHVzLCBt c2cKKworICAgIGRlZiBsb2dpbihzZWxmKToKKyAgICAgICAgc3RhdHVzLCBtc2cgPSBzZWxmLnNv dXJjZS5sb2dpbihzZWxmLmZvcm0pCisgICAgICAgIGlmIHN0YXR1czoKKyAgICAgICAgICAgIHNl bGYuc2V0X3NvdXJjZV9mcmllbmRseV9uYW1lKHNlbGYuc291cmNlLmdldF9mcmllbmRseV9uYW1l KCkpCisgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZworCisKK2RlZiBnZXRfYXV0aF9zb3VyY2Vz KHR5cGUpOgorICAgICIiIkdldCB0aGUgYXV0aGVudGljYXRlZCBzb3VyY2Ugb2JqZWN0IGZyb20g dGhlIHJlZ2lzdHJ5IiIiCisKKyAgICBhdXRoX3NvdXJjZXMgPSBnZXRhdHRyKGN1cnJlbnRfYXBw LCAnX3BnYWRtaW5fYXV0aF9zb3VyY2VzJywgTm9uZSkKKworICAgIGlmIGF1dGhfc291cmNlcyBp cyBOb25lIG9yIG5vdCBpc2luc3RhbmNlKGF1dGhfc291cmNlcywgZGljdCk6CisgICAgICAgIGF1 dGhfc291cmNlcyA9IGRpY3QoKQorCisgICAgaWYgdHlwZSBpbiBhdXRoX3NvdXJjZXM6CisgICAg ICAgIHJldHVybiBhdXRoX3NvdXJjZXNbdHlwZV0KKworICAgIGF1dGhfc291cmNlID0gQXV0aFNv dXJjZVJlZ2lzdHJ5LmNyZWF0ZSh0eXBlKQorCisgICAgaWYgYXV0aF9zb3VyY2UgaXMgbm90IE5v bmU6CisgICAgICAgIGF1dGhfc291cmNlc1t0eXBlXSA9IGF1dGhfc291cmNlCisgICAgICAgIHNl dGF0dHIoY3VycmVudF9hcHAsICdfcGdhZG1pbl9hdXRoX3NvdXJjZXMnLCBhdXRoX3NvdXJjZXMp CisKKyAgICByZXR1cm4gYXV0aF9zb3VyY2UKKworCitkZWYgaW5pdF9hcHAoYXBwKToKKyAgICBh dXRoX3NvdXJjZXMgPSBkaWN0KCkKKworICAgIHNldGF0dHIoYXBwLCAnX3BnYWRtaW5fYXV0aF9z b3VyY2VzJywgYXV0aF9zb3VyY2VzKQorICAgIEF1dGhTb3VyY2VSZWdpc3RyeS5sb2FkX2F1dGhf c291cmNlcygpCisKKyAgICByZXR1cm4gYXV0aF9zb3VyY2VzCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9hdXRoZW50aWNhdGUvaW50ZXJuYWwucHkgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUv aW50ZXJuYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42MjAzMmY0 ZTIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvaW50ZXJuYWwu cHkKQEAgLTAsMCArMSw5OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0g UG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdB ZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIg dGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiSW1wbGVt ZW50cyBJbnRlcm5hbCBBdXRoZW50aWNhdGlvbiIiIgorCitpbXBvcnQgc2l4Citmcm9tIGZsYXNr IGltcG9ydCBjdXJyZW50X2FwcAorZnJvbSBmbGFza19zZWN1cml0eSBpbXBvcnQgbG9naW5fdXNl cgorZnJvbSBhYmMgaW1wb3J0IGFic3RyYWN0bWV0aG9kLCBhYnN0cmFjdHByb3BlcnR5Citmcm9t IGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKKworZnJvbSAucmVnaXN0cnkgaW1wb3J0IEF1 dGhTb3VyY2VSZWdpc3RyeQorZnJvbSBwZ2FkbWluLm1vZGVsIGltcG9ydCBVc2VyCisKKworQHNp eC5hZGRfbWV0YWNsYXNzKEF1dGhTb3VyY2VSZWdpc3RyeSkKK2NsYXNzIEJhc2VBdXRoZW50aWNh dGlvbihvYmplY3QpOgorCisgICAgREVGQVVMVF9NU0cgPSB7CisgICAgICAgICdVU0VSX0RPRVNf Tk9UX0VYSVNUJzogJ1NwZWNpZmllZCB1c2VyIGRvZXMgbm90IGV4aXN0JywKKyAgICAgICAgJ0xP R0lOX0ZBSUxFRCc6ICdMb2dpbiBmYWlsZWQnLAorICAgICAgICAnRU1BSUxfTk9UX1BST1ZJREVE JzogJ0VtYWlsL1VzZXJuYW1lIG5vdCBwcm92aWRlZCcsCisgICAgICAgICdQQVNTV09SRF9OT1Rf UFJPVklERUQnOiAnUGFzc3dvcmQgbm90IHByb3ZpZGVkJworICAgIH0KKworICAgIEBhYnN0cmFj dHByb3BlcnR5CisgICAgZGVmIGdldF9mcmllbmRseV9uYW1lKGNscyk6CisgICAgICAgIHBhc3MK KworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBhdXRoZW50aWNhdGUoY2xzKToKKyAgICAg ICAgcGFzcworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYsIGZvcm0pOgorICAgICAgICB1c2VybmFt ZSA9IGZvcm0uZGF0YVsnZW1haWwnXQorICAgICAgICBwYXNzd29yZCA9IGZvcm0uZGF0YVsncGFz c3dvcmQnXQorCisgICAgICAgIGlmIHVzZXJuYW1lIGlzIE5vbmUgb3IgdXNlcm5hbWUgPT0gJyc6 CisgICAgICAgICAgICBmb3JtLmVtYWlsLmVycm9ycyA9IGxpc3QoZm9ybS5lbWFpbC5lcnJvcnMp CisgICAgICAgICAgICBmb3JtLmVtYWlsLmVycm9ycy5hcHBlbmQoZ2V0dGV4dCgKKyAgICAgICAg ICAgICAgICBzZWxmLm1lc3NhZ2VzKCdFTUFJTF9OT1RfUFJPVklERUQnKSkpCisgICAgICAgICAg ICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcGFzc3dvcmQgaXMgTm9uZSBvciBwYXNzd29yZCA9 PSAnJzoKKyAgICAgICAgICAgIGZvcm0ucGFzc3dvcmQuZXJyb3JzID0gbGlzdChmb3JtLnBhc3N3 b3JkLmVycm9ycykKKyAgICAgICAgICAgIGZvcm0ucGFzc3dvcmQuZXJyb3JzLmFwcGVuZCgKKyAg ICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzKCdQQVNTV09SRF9OT1RfUFJPVklERUQnKSkKKyAg ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg bG9naW4oc2VsZiwgZm9ybSk6CisgICAgICAgIHVzZXJuYW1lID0gZm9ybS5kYXRhWydlbWFpbCdd CisgICAgICAgIHVzZXIgPSBnZXRhdHRyKGZvcm0sICd1c2VyJywgTm9uZSkKKworICAgICAgICBp ZiB1c2VyIGlzIE5vbmU6CisgICAgICAgICAgICB1c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnko dXNlcm5hbWU9dXNlcm5hbWUpLmZpcnN0KCkKKworICAgICAgICBpZiB1c2VyIGlzIE5vbmU6Cisg ICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKAorICAgICAgICAgICAgICAg IHNlbGYubWVzc2FnZXMoJ1VTRVJfRE9FU19OT1RfRVhJU1QnKSkKKyAgICAgICAgICAgIHJldHVy biBGYWxzZSwgc2VsZi5tZXNzYWdlcygnVVNFUl9ET0VTX05PVF9FWElTVCcpCisKKyAgICAgICAg IyBMb2dpbiB1c2VyIHRocm91Z2ggZmxhc2tfc2VjdXJpdHkKKyAgICAgICAgc3RhdHVzID0gbG9n aW5fdXNlcih1c2VyKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgY3VycmVu dF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihzZWxmLm1lc3NhZ2VzKCdMT0dJTl9GQUlMRUQnKSkKKyAg ICAgICAgICAgIHJldHVybiBGYWxzZSwgc2VsZi5tZXNzYWdlcygnTE9HSU5fRkFJTEVEJykKKyAg ICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKworICAgIGRlZiBtZXNzYWdlcyhzZWxmLCBtc2dfa2V5 KToKKyAgICAgICAgcmV0dXJuIHNlbGYuREVGQVVMVF9NU0dbbXNnX2tleV0gaWYgbXNnX2tleSBp biBzZWxmLkRFRkFVTFRfTVNHXAorICAgICAgICAgICAgZWxzZSBOb25lCisKKworY2xhc3MgSW50 ZXJuYWxBdXRoZW50aWNhdGlvbihCYXNlQXV0aGVudGljYXRpb24pOgorCisgICAgZGVmIGdldF9m cmllbmRseV9uYW1lKGNscyk6CisgICAgICAgIHJldHVybiBnZXR0ZXh0KCJpbnRlcm5hbCIpCisK KyAgICBkZWYgdmFsaWRhdGUoc2VsZiwgZm9ybSk6CisgICAgICAgICIiIlVzZXIgdmFsaWRhdGlv biIiIgorCisgICAgICAgICMgRmxhc2sgc2VjdXJpdHkgdmFsaWRhdGlvbgorICAgICAgICByZXR1 cm4gZm9ybS52YWxpZGF0ZV9vbl9zdWJtaXQoKQorCisgICAgZGVmIGF1dGhlbnRpY2F0ZShzZWxm LCBmb3JtKToKKyAgICAgICAgdXNlcm5hbWUgPSBmb3JtLmRhdGFbJ2VtYWlsJ10KKyAgICAgICAg dXNlciA9IGdldGF0dHIoZm9ybSwgJ3VzZXInLAorICAgICAgICAgICAgICAgICAgICAgICBVc2Vy LnF1ZXJ5LmZpbHRlcl9ieSh1c2VybmFtZT11c2VybmFtZSkuZmlyc3QoKSkKKyAgICAgICAgaWYg dXNlciBhbmQgdXNlci5pc19hdXRoZW50aWNhdGVkIGFuZCBmb3JtLnZhbGlkYXRlX29uX3N1Ym1p dCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKyAgICAgICAgcmV0dXJuIEZhbHNl LCBzZWxmLm1lc3NhZ2VzKCdVU0VSX0RPRVNfTk9UX0VYSVNUJykKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2F1dGhlbnRpY2F0ZS9sZGFwLnB5IGIvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL2xk YXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kM2RmMzQyMDQKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvbGRhcC5weQpAQCAtMCww ICsxLDE4NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNR TCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIwLCBUaGUgcGdBZG1pbiBEZXZl bG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3Rn cmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiQSBibHVlcHJpbnQgbW9k dWxlIGltcGxlbWVudGluZyB0aGUgbGRhcCBhdXRoZW50aWNhdGlvbi4iIiIKKworaW1wb3J0IHNz bAoraW1wb3J0IGNvbmZpZworZnJvbSBsZGFwMyBpbXBvcnQgQ29ubmVjdGlvbiwgU2VydmVyLCBU bHMsIEFMTCwgQUxMX0FUVFJJQlVURVMKK2Zyb20gbGRhcDMuY29yZS5leGNlcHRpb25zIGltcG9y dCBMREFQU29ja2V0T3BlbkVycm9yLCBMREFQQmluZEVycm9yLFwKKyAgICBMREFQSW52YWxpZFNj b3BlRXJyb3IsIExEQVBBdHRyaWJ1dGVFcnJvciwgTERBUEludmFsaWRGaWx0ZXJFcnJvcixcCisg ICAgTERBUFN0YXJ0VExTRXJyb3IKK2Zyb20gZmxhc2tfYmFiZWxleCBpbXBvcnQgZ2V0dGV4dAor Citmcm9tIC5pbnRlcm5hbCBpbXBvcnQgQmFzZUF1dGhlbnRpY2F0aW9uCitmcm9tIHBnYWRtaW4u bW9kZWwgaW1wb3J0IFVzZXIsIFNlcnZlckdyb3VwLCBkYiwgUm9sZQorZnJvbSBmbGFza19zZWN1 cml0eSBpbXBvcnQgbG9naW5fdXNlcgorZnJvbSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAKK2Zy b20gcGdhZG1pbi50b29scy51c2VyX21hbmFnZW1lbnQgaW1wb3J0IGNyZWF0ZV91c2VyCisKK3Ry eToKKyAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKK2V4Y2VwdCBJbXBvcnRF cnJvcjoKKyAgICBmcm9tIHVybHBhcnNlIGltcG9ydCB1cmxwYXJzZQorCisKK2NsYXNzIExEQVBB dXRoZW50aWNhdGlvbihCYXNlQXV0aGVudGljYXRpb24pOgorICAgICIiIkxkYXAgQXV0aGVudGlj YXRpb24gQ2xhc3MiIiIKKworICAgIGRlZiBnZXRfZnJpZW5kbHlfbmFtZShzZWxmKToKKyAgICAg ICAgcmV0dXJuIGdldHRleHQoImxkYXAiKQorCisgICAgZGVmIGF1dGhlbnRpY2F0ZShzZWxmLCBm b3JtKToKKyAgICAgICAgc2VsZi51c2VybmFtZSA9IGZvcm0uZGF0YVsnZW1haWwnXQorICAgICAg ICBzZWxmLnBhc3N3b3JkID0gZm9ybS5kYXRhWydwYXNzd29yZCddCisKKyAgICAgICAgc3RhdHVz LCBtc2cgPSBzZWxmLmNvbm5lY3QoKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICByZXR1cm4gc3RhdHVzLCBtc2cKKworICAgICAgICBzdGF0dXMsIHVzZXJfZW1haWwgPSBz ZWxmLnNlYXJjaF9sZGFwX3VzZXIoKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICByZXR1cm4gc3RhdHVzLCB1c2VyX2VtYWlsCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX19h dXRvX2NyZWF0ZV91c2VyKHVzZXJfZW1haWwpCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAg ICAgICAgIiIiU2V0dXAgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIExEQVAgc2VydmVyIGFuZCBhdXRo ZW50aWNhdGUgdGhlIHVzZXIuCisgICAgICAgICIiIgorCisgICAgICAgICMgUGFyc2UgdGhlIHNl cnZlciBVUkkKKyAgICAgICAgdXJpID0gZ2V0YXR0cihjb25maWcsICdMREFQX1NFUlZFUl9VUkkn LCBOb25lKQorCisgICAgICAgIGlmIHVyaToKKyAgICAgICAgICAgIHVyaSA9IHVybHBhcnNlKHVy aSkKKworICAgICAgICAjIENyZWF0ZSB0aGUgVExTIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGlmIHJl cXVpcmVkCisgICAgICAgIHRscyA9IE5vbmUKKworICAgICAgICBpZiB0eXBlKHVyaSkgPT0gc3Ry OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiTERBUCBjb25maWd1cmF0aW9uIGVycm9yOiBT ZXQgdGhlIHByb3BlciBMREFQIFVSSS4iCisKKyAgICAgICAgaWYgdXJpLnNjaGVtZSA9PSAnbGRh cHMnIG9yIGNvbmZpZy5MREFQX1VTRV9TVEFSVFRMUzoKKworICAgICAgICAgICAgY2FfY2VydF9m aWxlID0gZ2V0YXR0cihjb25maWcsICdMREFQX0NBX0NFUlRfRklMRScsIE5vbmUpCisgICAgICAg ICAgICBjZXJ0X2ZpbGUgPSBnZXRhdHRyKGNvbmZpZywgJ0xEQVBfQ0VSVF9GSUxFJywgTm9uZSkK KyAgICAgICAgICAgIGtleV9maWxlID0gZ2V0YXR0cihjb25maWcsICdMREFQX0tFWV9GSUxFJywg Tm9uZSkKKyAgICAgICAgICAgIGNlcnRfdmFsaWRhdGUgPSBzc2wuQ0VSVF9OT05FCisKKyAgICAg ICAgICAgIGlmIGNhX2NlcnRfZmlsZSBhbmQgY2VydF9maWxlIGFuZCBrZXlfZmlsZToKKyAgICAg ICAgICAgICAgICBjZXJ0X3ZhbGlkYXRlID0gc3NsLkNFUlRfUkVRVUlSRUQKKworICAgICAgICAg ICAgdGxzID0gVGxzKAorICAgICAgICAgICAgICAgIGxvY2FsX3ByaXZhdGVfa2V5X2ZpbGU9a2V5 X2ZpbGUsCisgICAgICAgICAgICAgICAgbG9jYWxfY2VydGlmaWNhdGVfZmlsZT1jZXJ0X2ZpbGUs CisgICAgICAgICAgICAgICAgdmFsaWRhdGU9Y2VydF92YWxpZGF0ZSwKKyAgICAgICAgICAgICAg ICB2ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSwKKyAgICAgICAgICAgICAgICBjYV9jZXJ0c19m aWxlPWNhX2NlcnRfZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIENyZWF0ZSB0 aGUgc2VydmVyIG9iamVjdAorICAgICAgICAgICAgc2VydmVyID0gU2VydmVyKHVyaS5ob3N0bmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PXVyaS5wb3J0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVzZV9zc2w9KHVyaS5zY2hlbWUgPT0gJ2xkYXBzJyksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2luZm89QUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRscz10bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdF90 aW1lb3V0PWNvbmZpZy5MREFQX0NPTk5FQ1RJT05fVElNRU9VVCkKKyAgICAgICAgZXhjZXB0IFZh bHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkxEQVAgY29uZmlndXJh dGlvbiBlcnJvcjogJXMuIiAlIGUKKworICAgICAgICAjIENyZWF0ZSB0aGUgY29ubmVjdGlvbgor ICAgICAgICB0cnk6CisgICAgICAgICAgICB1c2VyX2RuID0gInswfT17MX0sezJ9Ii5mb3JtYXQo Y29uZmlnLkxEQVBfVVNFUk5BTUVfQVRUUklCVVRFLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uZmlnLkxEQVBfQkFTRV9ETgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IENv bm5lY3Rpb24oc2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vy PXVzZXJfZG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPXNl bGYucGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYmlu ZD1UcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBl eGNlcHQgTERBUFNvY2tldE9wZW5FcnJvciBhcyBlOgorICAgICAgICAgICAgY3VycmVudF9hcHAu bG9nZ2VyLmV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiRXJyb3IgY29ubmVjdGluZyB0byB0 aGUgTERBUCBzZXJ2ZXI6ICVzXG4iICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVy cm9yIGNvbm5lY3RpbmcgdG8gdGhlIExEQVAgc2VydmVyOiIgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAiICVzXG4iICUgZS5hcmdzWzBdCisgICAgICAgIGV4Y2VwdCBMREFQQmluZEVycm9y IGFzIGU6CisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKAorICAgICAg ICAgICAgICAgICJFcnJvciBiaW5kaW5nIHRvIHRoZSBMREFQIHNlcnZlci4iKQorICAgICAgICAg ICAgcmV0dXJuIEZhbHNlLCAiRXJyb3IgYmluZGluZyB0byB0aGUgTERBUCBzZXJ2ZXIuIgorICAg ICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dn ZXIuZXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJFcnJvciBjb25uZWN0aW5nIHRvIHRoZSBM REFQIHNlcnZlcjogJXNcbiIgJSBlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiRXJyb3Ig Y29ubmVjdGluZyB0byB0aGUgTERBUCBzZXJ2ZXI6IiBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICIgJXNcbiIgJSBlLmFyZ3NbMF0KKworICAgICAgICAjIEVuYWJsZSBUTFMgaWYgU1RBUlRU TFMgaXMgY29uZmlndXJlZAorICAgICAgICBpZiBub3QgdXJpLnNjaGVtZSA9PSAnbGRhcHMnIGFu ZCBjb25maWcuTERBUF9VU0VfU1RBUlRUTFM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg ICAgICAgc2VsZi5jb25uLnN0YXJ0X3RscygpCisgICAgICAgICAgICBleGNlcHQgTERBUFN0YXJ0 VExTRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0 aW9uKAorICAgICAgICAgICAgICAgICAgICAiRXJyb3Igc3RhcnRpbmcgVExTOiAlc1xuIiAlIGUp CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiRXJyb3Igc3RhcnRpbmcgVExTOiAlc1xu IiAlIGUuYXJnc1swXQorCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBkZWYgX19h dXRvX2NyZWF0ZV91c2VyKHNlbGYsIHVzZXJfZW1haWwpOgorICAgICAgICAiIiJBZGQgdGhlIGxk YXAgdXNlciB0byB0aGUgaW50ZXJuYWwgU1FMaXRlIGRhdGFiYXNlLiIiIgorICAgICAgICBpZiBj b25maWcuTERBUF9BVVRPX0NSRUFURV9VU0VSOgorICAgICAgICAgICAgdXNlciA9IFVzZXIucXVl cnkuZmlsdGVyX2J5KAorICAgICAgICAgICAgICAgIHVzZXJuYW1lPXNlbGYudXNlcm5hbWUpLmZp cnN0KCkKKyAgICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1 cm4gY3JlYXRlX3VzZXIoeworICAgICAgICAgICAgICAgICAgICAndXNlcm5hbWUnOiBzZWxmLnVz ZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW1haWwnOiB1c2VyX2VtYWlsLAorICAgICAg ICAgICAgICAgICAgICAncm9sZSc6IDIsCisgICAgICAgICAgICAgICAgICAgICdhY3RpdmUnOiBU cnVlLAorICAgICAgICAgICAgICAgICAgICAnYXV0aF9zb3VyY2UnOiAnbGRhcCcKKyAgICAgICAg ICAgICAgICB9KQorCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBkZWYgc2VhcmNo X2xkYXBfdXNlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IGEgbGlzdCBvZiB1c2VycyBmcm9tIHRo ZSBMREFQIHNlcnZlciBiYXNlZCBvbiBjb25maWcKKyAgICAgICAgIHNlYXJjaCBjcml0ZXJpYS4i IiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25uLnNlYXJjaChzZWFyY2hfYmFz ZT1jb25maWcuTERBUF9TRUFSQ0hfQkFTRV9ETiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VhcmNoX2ZpbHRlcj1jb25maWcuTERBUF9TRUFSQ0hfRklMVEVSLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWFyY2hfc2NvcGU9Y29uZmlnLkxEQVBfU0VBUkNIX1NDT1BFLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzPUFMTF9BVFRSSUJVVEVTCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgTERBUEludmFs aWRTY29wZUVycm9yIGFzIGU6CisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0 aW9uKAorICAgICAgICAgICAgICAgICJFcnJvciBzZWFyY2hpbmcgdGhlIExEQVAgZGlyZWN0b3J5 OiAlc1xuIiAlIGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJFcnJvciBzZWFyY2hpbmcg dGhlIExEQVAgZGlyZWN0b3J5OiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4i ICUgZS5hcmdzWzBdCisgICAgICAgIGV4Y2VwdCBMREFQQXR0cmlidXRlRXJyb3IgYXMgZToKKyAg ICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oIkVycm9yIHNlYXJjaGluZyB0 aGUgTERBUCBkaXJlY3Rvcnk6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiICVzXG4iICUgZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIHNlYXJj aGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIg JXNcbiIgJSBlLmFyZ3NbMF0KKyAgICAgICAgZXhjZXB0IExEQVBJbnZhbGlkRmlsdGVyRXJyb3Ig YXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24oCisgICAgICAg ICAgICAgICAgIkVycm9yIHNlYXJjaGluZyB0aGUgTERBUCBkaXJlY3Rvcnk6ICVzXG4iICUgZSkK KyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgIkVycm9yIHNlYXJjaGluZyB0aGUgTERBUCBkaXJl Y3Rvcnk6IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIgJSBlLmFyZ3NbMF0K KworICAgICAgICB1c2VycyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLmNvbm4uZW50 cmllczoKKyAgICAgICAgICAgIHVzZXJfZW1haWwgPSBOb25lCisgICAgICAgICAgICBpZiBjb25m aWcuTERBUF9VU0VSTkFNRV9BVFRSSUJVVEUgaW4gZW50cnkgYW5kIHNlbGYudXNlcm5hbWUgPT0g XAorICAgICAgICAgICAgICAgICAgICBlbnRyeVtjb25maWcuTERBUF9VU0VSTkFNRV9BVFRSSUJV VEVdLnZhbHVlOgorICAgICAgICAgICAgICAgIGlmICdtYWlsJyBpbiBlbnRyeToKKyAgICAgICAg ICAgICAgICAgICAgdXNlcl9lbWFpbCA9IGVudHJ5WydtYWlsJ10udmFsdWUKKyAgICAgICAgICAg ICAgICByZXR1cm4gVHJ1ZSwgdXNlcl9lbWFpbAorICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9yZWdpc3RyeS5weSBiL3dlYi9w Z2FkbWluL2F1dGhlbnRpY2F0ZS9yZWdpc3RyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLjkwNWY1NTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2F1 dGhlbnRpY2F0ZS9yZWdpc3RyeS5weQpAQCAtMCwwICsxLDY1IEBACisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMjAsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisiIiJFeHRlcm5hbCBBdXRoZW50aWNhdGlvbiBSZWdpc3RyeS4iIiIKKworCitm cm9tIGZsYXNrX2JhYmVsZXggaW1wb3J0IGdldHRleHQKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRh CisKKworZGVmIF9kZWNvcmF0ZV9jbHNfbmFtZShtb2R1bGVfbmFtZSk6CisgICAgbGVuZ3RoID0g bGVuKF9fcGFja2FnZV9fKSArIDEKKworICAgIGlmIGxlbihtb2R1bGVfbmFtZSkgPiBsZW5ndGgg YW5kIG1vZHVsZV9uYW1lLnN0YXJ0c3dpdGgoX19wYWNrYWdlX18pOgorICAgICAgICByZXR1cm4g bW9kdWxlX25hbWVbbGVuZ3RoOl0KKworICAgIHJldHVybiBtb2R1bGVfbmFtZQorCisKK2NsYXNz IEF1dGhTb3VyY2VSZWdpc3RyeShBQkNNZXRhKToKKyAgICByZWdpc3RyeSA9IE5vbmUKKyAgICBh dXRoX3NvdXJjZXMgPSBkaWN0KCkKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2Vz LCBkKToKKworICAgICAgICAjIFJlZ2lzdGVyIHRoaXMgdHlwZSBvZiBhdXRoX3NvdXJjZXMsIGJh c2VkIG9uIHRoZSBtb2R1bGUgbmFtZQorICAgICAgICAjIEF2b2lkIHJlZ2lzdGVyaW5nIHRoZSBC YXNlQXV0aGVudGljYXRpb24gaXRzZWxmCisKKyAgICAgICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJl Z2lzdHJ5W19kZWNvcmF0ZV9jbHNfbmFtZShkWydfX21vZHVsZV9fJ10pXSA9IGNscworICAgICAg ICBBQkNNZXRhLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGQpCisKKyAgICBAY2xhc3NtZXRo b2QKKyAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgKiprd2FyZ3MpOgorCisgICAgICAgIGlmIG5h bWUgaW4gQXV0aFNvdXJjZVJlZ2lzdHJ5LmF1dGhfc291cmNlczoKKyAgICAgICAgICAgIHJldHVy biBBdXRoU291cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdCisKKyAgICAgICAgaWYgbmFt ZSBpbiBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnk6CisgICAgICAgICAgICBBdXRoU291cmNl UmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdID0gXAorICAgICAgICAgICAgICAgIChBdXRoU291 cmNlUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0pKCoqa3dhcmdzKQorICAgICAgICAgICAgcmV0dXJu IEF1dGhTb3VyY2VSZWdpc3RyeS5hdXRoX3NvdXJjZXNbbmFtZV0KKworICAgICAgICByYWlzZSBO b3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAg ICAiQXV0aGVudGljYXRpb24gc291cmNlICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC4i CisgICAgICAgICAgICApLmZvcm1hdChuYW1lKQorICAgICAgICApCisKKyAgICBAY2xhc3NtZXRo b2QKKyAgICBkZWYgbG9hZF9hdXRoX3NvdXJjZXMoY2xzKToKKyAgICAgICAgIyBJbml0aWFsaXpl IHRoZSByZWdpc3RyeSBvbmx5IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQKKyAg ICAgICAgaWYgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5IGlzIE5vbmU6CisgICAgICAgICAg ICBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnkgPSBkaWN0KCkKKworICAgICAgICBmcm9tIGlt cG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQorICAgICAgICBmcm9tIHdlcmt6ZXVnLnV0aWxz IGltcG9ydCBmaW5kX21vZHVsZXMKKworICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmluZF9t b2R1bGVzKF9fcGFja2FnZV9fLCBUcnVlKToKKyAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9t b2R1bGUobW9kdWxlX25hbWUpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL19faW5p dF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9fX2luaXRfXy5weQppbmRleCAzMGFmM2UxMWIu Ljg2MjQ5MDgyMCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9fX2luaXRfXy5weQor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL19faW5pdF9fLnB5CkBAIC00NSw2ICs0NSw3IEBAIGZy b20gcGdhZG1pbi5icm93c2VyLnJlZ2lzdGVyX2Jyb3dzZXJfcHJlZmVyZW5jZXMgaW1wb3J0IFwK IGZyb20gcGdhZG1pbi51dGlscy5tYXN0ZXJfcGFzc3dvcmQgaW1wb3J0IHZhbGlkYXRlX21hc3Rl cl9wYXNzd29yZCwgXAogICAgIHNldF9tYXN0ZXJwYXNzX2NoZWNrX3RleHQsIGNsZWFudXBfbWFz dGVyX3Bhc3N3b3JkLCBnZXRfY3J5cHRfa2V5LCBcCiAgICAgc2V0X2NyeXB0X2tleSwgcHJvY2Vz c19tYXN0ZXJwYXNzX2Rpc2FibGVkCitmcm9tIHBnYWRtaW4ubW9kZWwgaW1wb3J0IFVzZXIKIAog dHJ5OgogICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdCBhcyB1cmxyZXEKQEAgLTU4MCwxMiArNTgx LDI0IEBAIGRlZiBpbmRleCgpOgogCiAgICAgICAgICAgICAgICAgZmxhc2gobXNnLCAnd2Fybmlu ZycpCiAKKyAgICBhdXRoX29ubHlfaW50ZXJuYWwgPSBGYWxzZQorICAgIGF1dGhfc291cmNlID0g W10KKworICAgIGlmIGNvbmZpZy5TRVJWRVJfTU9ERToKKyAgICAgICAgaWYgbGVuKGNvbmZpZy5B VVRIRU5USUNBVElPTl9TT1VSQ0VTKSA9PSAxXAorICAgICAgICAgICAgICAgIGFuZCAnaW50ZXJu YWwnIGluIGNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTOgorICAgICAgICAgICAgYXV0aF9v bmx5X2ludGVybmFsID0gVHJ1ZQorICAgICAgICBhdXRoX3NvdXJjZSA9IHNlc3Npb25bJ19hdXRo X3NvdXJjZV9tYW5hZ2VyX29iaiddWworICAgICAgICAgICAgJ3NvdXJjZV9mcmllbmRseV9uYW1l J10KKwogICAgIHJlc3BvbnNlID0gUmVzcG9uc2UocmVuZGVyX3RlbXBsYXRlKAogICAgICAgICBN T0RVTEVfTkFNRSArICIvaW5kZXguaHRtbCIsCi0gICAgICAgIHVzZXJuYW1lPWN1cnJlbnRfdXNl ci5lbWFpbCwKKyAgICAgICAgdXNlcm5hbWU9Y3VycmVudF91c2VyLnVzZXJuYW1lLAorICAgICAg ICBhdXRoX3NvdXJjZT1hdXRoX3NvdXJjZSwKICAgICAgICAgaXNfYWRtaW49Y3VycmVudF91c2Vy Lmhhc19yb2xlKCJBZG1pbmlzdHJhdG9yIiksCiAgICAgICAgIGxvZ291dF91cmw9X2dldF9sb2dv dXRfdXJsKCksCi0gICAgICAgIF89Z2V0dGV4dAorICAgICAgICBfPWdldHRleHQsCisgICAgICAg IGF1dGhfb25seV9pbnRlcm5hbD1hdXRoX29ubHlfaW50ZXJuYWwKICAgICApKQogCiAgICAgIyBT ZXQgdGhlIGxhbmd1YWdlIGNvb2tpZSBhZnRlciBsb2dpbiwgc28gbmV4dCB0aW1lIHRoZSB1c2Vy IHdpbGwgaGF2ZSB0aGF0CkBAIC05OTQsNDMgKzEwMDcsNjAgQEAgaWYgaGFzYXR0cihjb25maWcs ICdTRUNVUklUWV9SRUNPVkVSQUJMRScpIGFuZCBjb25maWcuU0VDVVJJVFlfUkVDT1ZFUkFCTEU6 CiAgICAgICAgICAgICBmb3JtID0gZm9ybV9jbGFzcygpCiAKICAgICAgICAgaWYgZm9ybS52YWxp ZGF0ZV9vbl9zdWJtaXQoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZW5k X3Jlc2V0X3Bhc3N3b3JkX2luc3RydWN0aW9ucyhmb3JtLnVzZXIpCi0gICAgICAgICAgICBleGNl cHQgU09DS0VURXJyb3JFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAjIEhhbmRsZSBz b2NrZXQgZXJyb3JzIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSBTTVRQRXhjZXB0aW9ucy4KLSAg ICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCi0g ICAgICAgICAgICAgICAgZmxhc2goZ2V0dGV4dCh1J1NNVFAgU29ja2V0IGVycm9yOiB7fVxuJwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdZb3VyIHBhc3N3b3JkIGhhcyBub3QgYmVl biBjaGFuZ2VkLicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGUpLAot ICAgICAgICAgICAgICAgICAgICAgICdkYW5nZXInKQotICAgICAgICAgICAgICAgIGhhc19lcnJv ciA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCAoU01UUENvbm5lY3RFcnJvciwgU01UUFJlc3Bv bnNlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICBTTVRQU2VydmVyRGlzY29ubmVjdGVk LCBTTVRQRGF0YUVycm9yLCBTTVRQSGVsb0Vycm9yLAotICAgICAgICAgICAgICAgICAgICBTTVRQ RXhjZXB0aW9uLCBTTVRQQXV0aGVudGljYXRpb25FcnJvciwgU01UUFNlbmRlclJlZnVzZWQsCi0g ICAgICAgICAgICAgICAgICAgIFNNVFBSZWNpcGllbnRzUmVmdXNlZCkgYXMgZToKLQotICAgICAg ICAgICAgICAgICMgSGFuZGxlIHNtdHAgc3BlY2lmaWMgZXhjZXB0aW9ucy4KLSAgICAgICAgICAg ICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCi0gICAgICAgICAg ICAgICAgZmxhc2goZ2V0dGV4dCh1J1NNVFAgZXJyb3I6IHt9XG4nCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1J1lvdXIgcGFzc3dvcmQgaGFzIG5vdCBiZWVuIGNoYW5nZWQuJwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZSksCi0gICAgICAgICAgICAgICAg ICAgICAgJ2RhbmdlcicpCi0gICAgICAgICAgICAgICAgaGFzX2Vycm9yID0gVHJ1ZQotICAgICAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgICMgSGFuZGxlIG90 aGVyIGV4Y2VwdGlvbnMuCi0gICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oc3RyKGUp LCBleGNfaW5mbz1UcnVlKQotICAgICAgICAgICAgICAgIGZsYXNoKGdldHRleHQodSdFcnJvcjog e31cbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnWW91ciBwYXNzd29yZCBoYXMg bm90IGJlZW4gY2hhbmdlZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmZvcm1h dChlKSwKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIEF1dGhlbnRpY2F0aW9uIHNvdXJjZSBvZiB0 aGUgVXNlcgorICAgICAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KAorICAgICAg ICAgICAgICAgIGVtYWlsPWZvcm0uZGF0YVsnZW1haWwnXSwKKyAgICAgICAgICAgICAgICBhdXRo X3NvdXJjZT1jdXJyZW50X2FwcC5QR0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UKKyAgICAgICAg ICAgICkuZmlyc3QoKQorCisgICAgICAgICAgICBpZiB1c2VyIGlzIE5vbmU6CisgICAgICAgICAg ICAgICAgIyBJZiB0aGUgdXNlciBpcyBub3QgYW4gaW50ZXJuYWwgdXNlciwgcmFpc2UgdGhlIGV4 Y2VwdGlvbgorICAgICAgICAgICAgICAgIGZsYXNoKGdldHRleHQoJ1lvdXIgYWNjb3VudCBpcyBh dXRoZW50aWNhdGVkIHVzaW5nIGFuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl eHRlcm5hbCB7fSBzb3VyY2UuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQbGVh c2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvcnMgb2YgdGhpcyAnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnc2VydmljZSBpZiB5b3UgbmVlZCB0byByZXNldCB5b3VyIHBhc3N3b3Jk LicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGZvcm0udXNlci5hdXRo X3NvdXJjZSksCiAgICAgICAgICAgICAgICAgICAgICAgJ2RhbmdlcicpCiAgICAgICAgICAgICAg ICAgaGFzX2Vycm9yID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGhhc19lcnJvcjoKKyAgICAg ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbmRfcmVzZXRfcGFzc3dvcmRf aW5zdHJ1Y3Rpb25zKGZvcm0udXNlcikKKyAgICAgICAgICAgICAgICBleGNlcHQgU09DS0VURXJy b3JFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgc29ja2V0IGVy cm9ycyB3aGljaCBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgICMgY292ZXJlZCBieSBTTVRQ RXhjZXB0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oc3RyKGUp LCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgICAgICAgICBmbGFzaChnZXR0ZXh0KHUnU01U UCBTb2NrZXQgZXJyb3I6IHt9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dSdZb3VyIHBhc3N3b3JkIGhhcyBub3QgYmVlbiBjaGFuZ2VkLicKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApLmZvcm1hdChlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg J2RhbmdlcicpCisgICAgICAgICAgICAgICAgICAgIGhhc19lcnJvciA9IFRydWUKKyAgICAgICAg ICAgICAgICBleGNlcHQgKFNNVFBDb25uZWN0RXJyb3IsIFNNVFBSZXNwb25zZUV4Y2VwdGlvbiwK KyAgICAgICAgICAgICAgICAgICAgICAgIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQsIFNNVFBEYXRh RXJyb3IsIFNNVFBIZWxvRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBTTVRQRXhjZXB0 aW9uLCBTTVRQQXV0aGVudGljYXRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNN VFBTZW5kZXJSZWZ1c2VkLCBTTVRQUmVjaXBpZW50c1JlZnVzZWQpIGFzIGU6CisKKyAgICAgICAg ICAgICAgICAgICAgIyBIYW5kbGUgc210cCBzcGVjaWZpYyBleGNlcHRpb25zLgorICAgICAgICAg ICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCisgICAg ICAgICAgICAgICAgICAgIGZsYXNoKGdldHRleHQodSdTTVRQIGVycm9yOiB7fVxuJworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnWW91ciBwYXNzd29yZCBoYXMgbm90IGJlZW4g Y2hhbmdlZC4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICdkYW5nZXInKQorICAgICAgICAgICAgICAgICAg ICBoYXNfZXJyb3IgPSBUcnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBl OgorICAgICAgICAgICAgICAgICAgICAjIEhhbmRsZSBvdGhlciBleGNlcHRpb25zLgorICAgICAg ICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbihzdHIoZSksIGV4Y19pbmZvPVRydWUpCisg ICAgICAgICAgICAgICAgICAgIGZsYXNoKGdldHRleHQodSdFcnJvcjoge31cbicKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1J1lvdXIgcGFzc3dvcmQgaGFzIG5vdCBiZWVuIGNo YW5nZWQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGUpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFuZ2VyJykKKyAgICAgICAgICAgICAgICAgICAg aGFzX2Vycm9yID0gVHJ1ZQogCiAgICAgICAgICAgICBpZiByZXF1ZXN0Lmpzb24gaXMgTm9uZSBh bmQgbm90IGhhc19lcnJvcjoKICAgICAgICAgICAgICAgICBkb19mbGFzaCgqZ2V0X21lc3NhZ2Uo J1BBU1NXT1JEX1JFU0VUX1JFUVVFU1QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbWFpbD1mb3JtLnVzZXIuZW1haWwpKQogCiAgICAgICAgIGlmIHJlcXVlc3QuanNv biBhbmQgbm90IGhhc19lcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBfcmVuZGVyX2pzb24oZm9y bSwgaW5jbHVkZV91c2VyPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfcmVuZGVy X2pzb24oZm9ybSwgaW5jbHVkZV91c2VyPUZhbHNlKQogCiAgICAgICAgIHJldHVybiBfc2VjdXJp dHkucmVuZGVyX3RlbXBsYXRlKAogICAgICAgICAgICAgY29uZmlnX3ZhbHVlKCdGT1JHT1RfUEFT U1dPUkRfVEVNUExBVEUnKSwKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxh dGVzL2Jyb3dzZXIvaW5kZXguaHRtbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jy b3dzZXIvaW5kZXguaHRtbAppbmRleCA2ODJjMjNkNjUuLmIzODliOTU3NCAxMDA2NDQKLS0tIGEv d2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9pbmRleC5odG1sCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jyb3dzZXIvaW5kZXguaHRtbApAQCAtMTQyLDYg KzE0Miw3IEBAIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICA8 YSBocmVmPSIjIiBjbGFzcz0ibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0i ZHJvcGRvd24iCiAgICAgICAgICAgICAgICAgICAgcm9sZT0iYnV0dG9uIiBhcmlhLWV4cGFuZGVk PSJmYWxzZSIgaWQ9Im5hdmJhci11c2VyIj48L2E+CiAgICAgICAgICAgICAgICAgPHVsIGNsYXNz PSJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHQiIHJvbGU9Im1lbnUiPgorICAgICAg ICAgICAgICAgICAgICB7JSBpZiBhdXRoX29ubHlfaW50ZXJuYWwgJX0KICAgICAgICAgICAgICAg ICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImRyb3Bkb3duLWl0 ZW0iIGhyZWY9IiMiIG9uY2xpY2s9InBnQWRtaW4uQnJvd3Nlci5Vc2VyTWFuYWdlbWVudC5jaGFu Z2VfcGFzc3dvcmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICd7eyB1cmxfZm9yKCdicm93 c2VyLmNoYW5nZV9wYXNzd29yZCcpIH19JwpAQCAtMTUwLDYgKzE1MSw3IEBAIHdpbmRvdy5vbmxv YWQgPSBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAg ICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93 bi1kaXZpZGVyIj48L2xpPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQogICAgICAg ICAgICAgICAgICAgICB7JSBpZiBpc19hZG1pbiAlfQogICAgICAgICAgICAgICAgICAgICA8bGk+ PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9IiMiIG9uY2xpY2s9InBnQWRtaW4uQnJvd3Nl ci5Vc2VyTWFuYWdlbWVudC5zaG93X3VzZXJzKCkiPnt7IF8oJ1VzZXJzJykgfX08L2E+PC9saT4K ICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93bi1kaXZpZGVyIj48L2xpPgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMvYnJvd3Nlci9tYWNyb3Mv Z3JhdmF0YXJfaWNvbi5tYWNybyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jyb3dz ZXIvbWFjcm9zL2dyYXZhdGFyX2ljb24ubWFjcm8KaW5kZXggNzJlYzk3ZTU5Li5lZGVkOGI2OGEg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVtcGxhdGVzL2Jyb3dzZXIvbWFjcm9z L2dyYXZhdGFyX2ljb24ubWFjcm8KKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZW1wbGF0ZXMv YnJvd3Nlci9tYWNyb3MvZ3JhdmF0YXJfaWNvbi5tYWNybwpAQCAtNCw1ICs0LDUgQEAgd2Ugd2ls bCBub3QgYXNzb2NpYXRlIG91ciBhcHBsaWNhdGlvbiB3aXRoIEdyYXZhdGFyIG1vZHVsZSB3aGlj aCB3aWxsIG1ha2UKICdncmF2YXRhcicgZmlsdGVyIHVuYXZhaWxhYmxlIGluIEppbmphIHRlbXBs YXRlcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfQogeyUgbWFjcm8gUFJFUEFSRV9IVE1MKCkgLSV9Ci0n PGltZyBzcmMgPSAie3sgdXNlcm5hbWUgfCBncmF2YXRhciB9fSIgd2lkdGggPSAiMTgiIGhlaWdo dCA9ICIxOCIgYWx0ID0gIkdyYXZhdGFyIGltYWdlIGZvciB7eyB1c2VybmFtZSB9fSIgPiB7eyB1 c2VybmFtZSB9fSA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4nOworJzxpbWcgc3JjID0gInt7 IHVzZXJuYW1lIHwgZ3JhdmF0YXIgfX0iIHdpZHRoID0gIjE4IiBoZWlnaHQgPSAiMTgiIGFsdCA9 ICJHcmF2YXRhciBpbWFnZSBmb3Ige3sgdXNlcm5hbWUgfX0iID4ge3sgdXNlcm5hbWUgfX0gKHt7 YXV0aF9zb3VyY2V9fSkgPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+JzsKIHslLSBlbmRtYWNy byAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZXN0cy90ZXN0X2NoYW5nZV9w YXNzd29yZC5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9jaGFuZ2VfcGFzc3dv cmQucHkKaW5kZXggMDRjNDlhMjNlLi5mYjg2ZTRkZmQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvdGVzdHMvdGVzdF9jaGFuZ2VfcGFzc3dvcmQucHkKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci90ZXN0cy90ZXN0X2NoYW5nZV9wYXNzd29yZC5weQpAQCAtOTUsNiArOTUsNyBAQCBj bGFzcyBDaGFuZ2VQYXNzd29yZFRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKICAgICAgICAg ICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIucG9zdCgKICAgICAgICAgICAgICAgICAnL3VzZXJf bWFuYWdlbWVudC91c2VyLycsCiAgICAgICAgICAgICAgICAgZGF0YT1qc29uLmR1bXBzKGRpY3Qo CisgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPXNlbGYudXNlcm5hbWUsCiAgICAgICAgICAg ICAgICAgICAgIGVtYWlsPXNlbGYudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG5ld1Bh c3N3b3JkPXNlbGYucGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1QYXNzd29y ZD1zZWxmLnBhc3N3b3JkLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci90ZXN0cy90 ZXN0X2xkYXBfbG9naW4ucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Rlc3RzL3Rlc3RfbGRhcF9s b2dpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjRhNzY1NjlkMQot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9sZGFwX2xv Z2luLnB5CkBAIC0wLDAgKzEsODkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4g NCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMCwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2ltcG9y dCBjb25maWcgYXMgYXBwX2NvbmZpZworZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBC YXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9y dCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9tIHJlZ3Jlc3Npb24udGVzdF9zZXR1cCBpbXBvcnQg Y29uZmlnX2RhdGEKKworCitjbGFzcyBMREFQTG9naW5UZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRv cik6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBjaGVja3MgbGRhcCBsb2dpbiBmdW5jdGlvbmFs aXR5CisgICAgYnkgdmFsaWRhdGluZyBkaWZmZXJlbnQgc2NlbmFyaW9zLgorICAgICIiIgorCisg ICAgc2NlbmFyaW9zID0gWworICAgICAgICAoJ0xEQVAgQXV0aGVudGljYXRpb24nLCBkaWN0KAor ICAgICAgICAgICAgY29uZmlnX2tleV9wYXJhbT0nbGRhcCcsCisgICAgICAgICAgICBpc19ncmF2 dGFyX2ltYWdlX2NoZWNrPUZhbHNlKSksCisgICAgICAgICgnTERBUCBXaXRoIFNTTCBBdXRoZW50 aWNhdGlvbicsIGRpY3QoCisgICAgICAgICAgICBjb25maWdfa2V5X3BhcmFtPSdsZGFwX3dpdGhf c3NsJywKKyAgICAgICAgICAgIGlzX2dyYXZ0YXJfaW1hZ2VfY2hlY2s9RmFsc2UpKSwKKyAgICAg ICAgKCdMREFQIFdpdGggVExTIEF1dGhlbnRpY2F0aW9uJywgZGljdCgKKyAgICAgICAgICAgIGNv bmZpZ19rZXlfcGFyYW09J2xkYXBfd2l0aF90bHMnLAorICAgICAgICAgICAgaXNfZ3JhdnRhcl9p bWFnZV9jaGVjaz1GYWxzZSkpLAorICAgIF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBz ZXRVcENsYXNzKGNscyk6CisgICAgICAgICIiIgorICAgICAgICBXZSBuZWVkIHRvIGxvZ291dCB0 aGUgdGVzdCBjbGllbnQKKyAgICAgICAgYXMgd2UgYXJlIHRlc3RpbmcgbGRhcCBsb2dpbiBzY2Vu YXJpb3MuCisgICAgICAgICIiIgorICAgICAgICBjbHMudGVzdGVyLmxvZ291dCgpCisKKyAgICBk ZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmICdsZGFwX2NvbmZpZycgaW4gY29uZmlnX2RhdGEg YW5kIFwKKyAgICAgICAgICAgICAgICB0eXBlKGNvbmZpZ19kYXRhWydsZGFwX2NvbmZpZyddKSBp cyBsaXN0IGFuZFwKKyAgICAgICAgICAgICAgICBsZW4oY29uZmlnX2RhdGFbJ2xkYXBfY29uZmln J10pID4gMCBhbmRcCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWdfa2V5X3BhcmFtIGluIGNv bmZpZ19kYXRhWydsZGFwX2NvbmZpZyddWzBdOgorICAgICAgICAgICAgbGRhcF9jb25maWcgPSBj b25maWdfZGF0YVsnbGRhcF9jb25maWcnXVswXVtzZWxmLmNvbmZpZ19rZXlfcGFyYW1dCisKKyAg ICAgICAgICAgIGFwcF9jb25maWcuQVVUSEVOVElDQVRJT05fU09VUkNFUyA9IFsnbGRhcCddCisg ICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfQVVUT19DUkVBVEVfVVNFUiA9IFRydWUKKyAgICAg ICAgICAgIGFwcF9jb25maWcuTERBUF9TRVJWRVJfVVJJID0gbGRhcF9jb25maWdbJ3VyaSddCisg ICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfQkFTRV9ETiA9IGxkYXBfY29uZmlnWydiYXNlX2Ru J10KKyAgICAgICAgICAgIGFwcF9jb25maWcuTERBUF9VU0VSTkFNRV9BVFRSSUJVVEUgPSBsZGFw X2NvbmZpZ1sKKyAgICAgICAgICAgICAgICAndXNlcm5hbWVfYXRyJ10KKyAgICAgICAgICAgIGFw cF9jb25maWcuTERBUF9TRUFSQ0hfQkFTRV9ETiA9IGxkYXBfY29uZmlnWworICAgICAgICAgICAg ICAgICdzZWFyY2hfYmFzZV9kbiddCisgICAgICAgICAgICBhcHBfY29uZmlnLkxEQVBfU0VBUkNI X0ZJTFRFUiA9IGxkYXBfY29uZmlnWydzZWFyY2hfZmlsdGVyJ10KKyAgICAgICAgICAgIGFwcF9j b25maWcuTERBUF9VU0VfU1RBUlRUTFMgPSBsZGFwX2NvbmZpZ1sndXNlX3N0YXJ0dGxzJ10KKyAg ICAgICAgICAgIGFwcF9jb25maWcuTERBUF9DQV9DRVJUX0ZJTEUgPSBsZGFwX2NvbmZpZ1snY2Ff Y2VydF9maWxlJ10KKyAgICAgICAgICAgIGFwcF9jb25maWcuTERBUF9DRVJUX0ZJTEUgPSBsZGFw X2NvbmZpZ1snY2VydF9maWxlJ10KKyAgICAgICAgICAgIGFwcF9jb25maWcuTERBUF9LRVlfRklM RSA9IGxkYXBfY29uZmlnWydrZXlfZmlsZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz ZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJMREFQIGNvbmZpZyBub3Qgc2V0LiIKKyAg ICAgICAgICAgICkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAiIiJUaGlzIGZ1 bmN0aW9uIGNoZWNrcyBsb2dpbiBmdW5jdGlvbmFsaXR5LiIiIgorICAgICAgICB1c2VybmFtZSA9 IGNvbmZpZ19kYXRhWydwZ0FkbWluNF9sZGFwX2NyZWRlbnRpYWxzJ11bJ2xvZ2luX3VzZXJuYW1l J10KKyAgICAgICAgcGFzc3dvcmQgPSBjb25maWdfZGF0YVsncGdBZG1pbjRfbGRhcF9jcmVkZW50 aWFscyddWydsb2dpbl9wYXNzd29yZCddCisKKyAgICAgICAgcmVzID0gc2VsZi50ZXN0ZXIubG9n aW4odXNlcm5hbWUsIHBhc3N3b3JkLCBUcnVlKQorCisgICAgICAgIHJlc3BkYXRhID0gJ0dyYXZh dGFyIGltYWdlIGZvciAlcycgJVwKKyAgICAgICAgICAgICAgICAgICBjb25maWdfZGF0YVsncGdB ZG1pbjRfbGRhcF9jcmVkZW50aWFscyddWydsb2dpbl91c2VybmFtZSddCisgICAgICAgIHNlbGYu YXNzZXJ0VHJ1ZShyZXNwZGF0YSBpbiByZXMuZGF0YS5kZWNvZGUoJ3V0ZjgnKSkKKworICAgIGRl ZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0ZXIubG9nb3V0KCkKKworICAgIEBj bGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICIiIgorICAg ICAgICBXZSBuZWVkIHRvIGFnYWluIGxvZ2luIHRoZSB0ZXN0IGNsaWVudCBhcyBzb29uIGFzIHRl c3Qgc2NlbmFyaW9zCisgICAgICAgIGZpbmlzaGVzLgorICAgICAgICAiIiIKKyAgICAgICAgY2xz LnRlc3Rlci5sb2dvdXQoKQorICAgICAgICBhcHBfY29uZmlnLkFVVEhFTlRJQ0FUSU9OX1NPVVJD RVMgPSBbJ2ludGVybmFsJ10KKyAgICAgICAgdXRpbHMubG9naW5fdGVzdGVyX2FjY291bnQoY2xz LnRlc3RlcikKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9sZGFw X3dpdGhfbW9ja2luZy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9sZGFwX3dp dGhfbW9ja2luZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjkwMzg1 MjQyYwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvdGVzdHMvdGVzdF9s ZGFwX3dpdGhfbW9ja2luZy5weQpAQCAtMCwwICsxLDg0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAx MyAtIDIwMjAsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBp cyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIworCitpbXBvcnQgc3lzCitpbXBvcnQgY29uZmlnIGFzIGFwcF9jb25maWcKK2Zyb20gcGdh ZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RHZW5lcmF0b3IKK2Zyb20gcmVncmVzc2lv bi5weXRob25fdGVzdF91dGlscyBpbXBvcnQgdGVzdF91dGlscyBhcyB1dGlscworZnJvbSByZWdy ZXNzaW9uLnRlc3Rfc2V0dXAgaW1wb3J0IGNvbmZpZ19kYXRhCitmcm9tIHBnYWRtaW4uYXV0aGVu dGljYXRlLnJlZ2lzdHJ5IGltcG9ydCBBdXRoU291cmNlUmVnaXN0cnkKKworaWYgc3lzLnZlcnNp b25faW5mbyA8ICgzLCAzKToKKyAgICBmcm9tIG1vY2sgaW1wb3J0IHBhdGNoCitlbHNlOgorICAg IGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKKworCitjbGFzcyBMREFQTG9naW5Nb2Nr VGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgY2hl Y2tzIGxkYXAgbG9naW4gZnVuY3Rpb25hbGl0eSBieSBtb2NraW5nCisgICAgbGRhcCBjb25uZWN0 aW9uIGFuZCBsZGFwIHNlYXJjaCBmdW5jdGlvbmFsaXR5LgorICAgICIiIgorCisgICAgc2NlbmFy aW9zID0gWworICAgICAgICAoJ0xEQVAgQXV0aGVudGljYXRpb24gd2l0aCBBdXRvIENyZWF0ZSBV c2VyJywgZGljdCgKKyAgICAgICAgICAgIGF1dGhfc291cmNlPVsnbGRhcCddLAorICAgICAgICAg ICAgYXV0b19jcmVhdGVfdXNlcj1UcnVlLAorICAgICAgICAgICAgdXNlcm5hbWU9J2xkYXBfdXNl cicsCisgICAgICAgICAgICBwYXNzd29yZD0nbGRhcF9wYXNzJykpLAorICAgICAgICAoJ0xEQVAg QXV0aGVudGljYXRpb24gd2l0aG91dCBBdXRvIENyZWF0ZSBVc2VyJywgZGljdCgKKyAgICAgICAg ICAgIGF1dGhfc291cmNlPVsnbGRhcCddLAorICAgICAgICAgICAgYXV0b19jcmVhdGVfdXNlcj1G YWxzZSwKKyAgICAgICAgICAgIHVzZXJuYW1lPSdsZGFwX3VzZXInLAorICAgICAgICAgICAgcGFz c3dvcmQ9J2xkYXBfcGFzcycpKSwKKyAgICAgICAgKCdMREFQICsgSW50ZXJuYWwgQXV0aGVudGlj YXRpb24nLCBkaWN0KAorICAgICAgICAgICAgYXV0aF9zb3VyY2U9WydsZGFwJywgJ2ludGVybmFs J10sCisgICAgICAgICAgICBhdXRvX2NyZWF0ZV91c2VyPUZhbHNlLAorICAgICAgICAgICAgdXNl cm5hbWU9Y29uZmlnX2RhdGFbCisgICAgICAgICAgICAgICAgJ3BnQWRtaW40X2xvZ2luX2NyZWRl bnRpYWxzJ11bJ2xvZ2luX3VzZXJuYW1lJ10sCisgICAgICAgICAgICBwYXNzd29yZD1jb25maWdf ZGF0YVsKKyAgICAgICAgICAgICAgICAncGdBZG1pbjRfbG9naW5fY3JlZGVudGlhbHMnXVsnbG9n aW5fcGFzc3dvcmQnXQorICAgICAgICApKQorICAgIF0KKworICAgIEBjbGFzc21ldGhvZAorICAg IGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICIiIgorICAgICAgICBXZSBuZWVkIHRvIGxv Z291dCB0aGUgdGVzdCBjbGllbnQgYXMgd2UgYXJlIHRlc3RpbmcKKyAgICAgICAgbGRhcCBsb2dp biBzY2VuYXJpb3MuCisgICAgICAgICIiIgorICAgICAgICBjbHMudGVzdGVyLmxvZ291dCgpCisK KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGFwcF9jb25maWcuQVVUSEVOVElDQVRJT05f U09VUkNFUyA9IHNlbGYuYXV0aF9zb3VyY2UKKyAgICAgICAgYXBwX2NvbmZpZy5MREFQX0FVVE9f Q1JFQVRFX1VTRVIgPSBzZWxmLmF1dG9fY3JlYXRlX3VzZXIKKworICAgIEBwYXRjaC5vYmplY3Qo QXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5WydsZGFwJ10sICdjb25uZWN0JywKKyAgICAgICAg ICAgICAgICAgIHJldHVybl92YWx1ZT1bVHJ1ZSwgIkRvbmUiXSkKKyAgICBAcGF0Y2gub2JqZWN0 KEF1dGhTb3VyY2VSZWdpc3RyeS5yZWdpc3RyeVsnbGRhcCddLCAnc2VhcmNoX2xkYXBfdXNlcics CisgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9W1RydWUsICcnXSkKKyAgICBkZWYgcnVu VGVzdChzZWxmLCBjb25uX21vY2tfb2JqLCBzZWFyY2hfbW9ja19vYmopOgorICAgICAgICAiIiJU aGlzIGZ1bmN0aW9uIGNoZWNrcyBsZGFwIGxvZ2luIGZ1bmN0aW9uYWxpdHkuIiIiCisKKyAgICAg ICAgcmVzID0gc2VsZi50ZXN0ZXIubG9naW4oc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCwg VHJ1ZSkKKyAgICAgICAgcmVzcGRhdGEgPSAnR3JhdmF0YXIgaW1hZ2UgZm9yICVzJyAlIHNlbGYu dXNlcm5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BkYXRhIGluIHJlcy5kYXRhLmRl Y29kZSgndXRmOCcpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRl c3Rlci5sb2dvdXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Mo Y2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIG5lZWQgdG8gYWdhaW4gbG9naW4gdGhlIHRl c3QgY2xpZW50IGFzIHNvb24gYXMgdGVzdCBzY2VuYXJpb3MKKyAgICAgICAgZmluaXNoZXMuCisg ICAgICAgICIiIgorICAgICAgICBjbHMudGVzdGVyLmxvZ291dCgpCisgICAgICAgIGFwcF9jb25m aWcuQVVUSEVOVElDQVRJT05fU09VUkNFUyA9IFsnaW50ZXJuYWwnXQorICAgICAgICB1dGlscy5s b2dpbl90ZXN0ZXJfYWNjb3VudChjbHMudGVzdGVyKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bW9kZWwvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9tb2RlbC9fX2luaXRfXy5weQppbmRleCBm NTg4ZTQwMWMuLmUzYWY2NjBiMCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vbW9kZWwvX19pbml0 X18ucHkKKysrIGIvd2ViL3BnYWRtaW4vbW9kZWwvX19pbml0X18ucHkKQEAgLTI5LDcgKzI5LDcg QEAgZnJvbSBmbGFza19zcWxhbGNoZW15IGltcG9ydCBTUUxBbGNoZW15CiAjCiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwogCi1TQ0hFTUFfVkVSU0lPTiA9IDI0CitTQ0hFTUFfVkVSU0lPTiA9IDI1CiAKICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCiAjCkBAIC02NiwxMyArNjYsMTUgQEAgY2xhc3MgVXNlcihkYi5Nb2Rl bCwgVXNlck1peGluKToKICAgICAiIiJEZWZpbmUgYSB1c2VyIG9iamVjdCIiIgogICAgIF9fdGFi bGVuYW1lX18gPSAndXNlcicKICAgICBpZCA9IGRiLkNvbHVtbihkYi5JbnRlZ2VyLCBwcmltYXJ5 X2tleT1UcnVlKQotICAgIGVtYWlsID0gZGIuQ29sdW1uKGRiLlN0cmluZygyNTYpLCB1bmlxdWU9 VHJ1ZSwgbnVsbGFibGU9RmFsc2UpCisgICAgZW1haWwgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDI1 NiksIG51bGxhYmxlPVRydWUpCisgICAgdXNlcm5hbWUgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDY0 KSwgdW5pcXVlPVRydWUsIG51bGxhYmxlPUZhbHNlKQogICAgIHBhc3N3b3JkID0gZGIuQ29sdW1u KGRiLlN0cmluZygyNTYpKQogICAgIGFjdGl2ZSA9IGRiLkNvbHVtbihkYi5Cb29sZWFuKCksIG51 bGxhYmxlPUZhbHNlKQogICAgIGNvbmZpcm1lZF9hdCA9IGRiLkNvbHVtbihkYi5EYXRlVGltZSgp KQogICAgIG1hc3RlcnBhc3NfY2hlY2sgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDI1NikpCiAgICAg cm9sZXMgPSBkYi5yZWxhdGlvbnNoaXAoJ1JvbGUnLCBzZWNvbmRhcnk9cm9sZXNfdXNlcnMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3JlZj1kYi5iYWNrcmVmKCd1c2VycycsIGxh enk9J2R5bmFtaWMnKSkKKyAgICBhdXRoX3NvdXJjZSA9IGRiLkNvbHVtbihkYi5TdHJpbmcoMTYp LCB1bmlxdWU9VHJ1ZSwgbnVsbGFibGU9RmFsc2UpCiAKIAogY2xhc3MgU2V0dGluZyhkYi5Nb2Rl bCk6CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvZmllbGRzLmh0 bWwgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvZmllbGRzLmh0bWwKaW5kZXggZWZi MTI2YjJlLi5jNTA1ZGEzNjYgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3RlbXBsYXRlcy9zZWN1 cml0eS9maWVsZHMuaHRtbAorKysgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvZmll bGRzLmh0bWwKQEAgLTksMyArOSwxNCBAQAogICAgIHslIGVuZGlmICV9CiA8L2Rpdj4KIHslIGVu ZG1hY3JvICV9Cit7JSBtYWNybyByZW5kZXJfdXNlcm5hbWVfd2l0aF9lcnJvcnMoZmllbGQsIHR5 cGUpICV9Cis8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIG1iLTMgeyUgaWYgZmllbGQuZXJyb3JzICV9 IGhhcy1lcnJvcnslIGVuZGlmICV9Ij4KKyAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIg cGxhY2Vob2xkZXI9Int7IGZpZWxkLmxhYmVsLnRleHQgfX0gLyBVc2VybmFtZSIgbmFtZT0ie3sg ZmllbGQubmFtZSB9fSIKKyAgICAgICAgICAgdHlwZT0ieyUgaWYgdHlwZSAlfXt7IHR5cGUgfX17 JSBlbHNlICV9e3sgZmllbGQudHlwZSB9fXslIGVuZGlmICV9IiBhdXRvZm9jdXM+CisgICAgeyUg aWYgZmllbGQuZXJyb3JzICV9CisgICAgeyUgZm9yIGVycm9yIGluIGZpZWxkLmVycm9ycyAlfQor ICAgIDxzcGFuIGNsYXNzPSJmb3JtLXRleHQiPnt7IGVycm9yIH19PC9zcGFuPgorICAgIHslIGVu ZGZvciAlfQorICAgIHslIGVuZGlmICV9Cis8L2Rpdj4KK3slIGVuZG1hY3JvICV9CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvbG9naW5fdXNlci5odG1sIGIvd2Vi L3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L2xvZ2luX3VzZXIuaHRtbAppbmRleCA3NTE1YzJj MmEuLjJlOTJkN2IxMiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5 L2xvZ2luX3VzZXIuaHRtbAorKysgYi93ZWIvcGdhZG1pbi90ZW1wbGF0ZXMvc2VjdXJpdHkvbG9n aW5fdXNlci5odG1sCkBAIC03LDEwICs3LDEwIEBACiB7JSBibG9jayBwYW5lbF90aXRsZSAlfXt7 IF8oJ0xvZ2luJykgfX17JSBlbmRibG9jayAlfQogeyUgYmxvY2sgcGFuZWxfYm9keSAlfQogeyUg aWYgY29uZmlnLlNFUlZFUl9NT0RFICV9Ci08Zm9ybSBhY3Rpb249Int7IHVybF9mb3Jfc2VjdXJp dHkoJ2xvZ2luJykgfX0iIG1ldGhvZD0iUE9TVCIgbmFtZT0ibG9naW5fdXNlcl9mb3JtIj4KKzxm b3JtIGFjdGlvbj0ie3sgdXJsX2ZvcignYXV0aGVudGljYXRlLmxvZ2luJykgfX0iIG1ldGhvZD0i UE9TVCIgbmFtZT0ibG9naW5fdXNlcl9mb3JtIj4KICAgICB7eyBsb2dpbl91c2VyX2Zvcm0uaGlk ZGVuX3RhZygpIH19CiAgICAgeyUgc2V0IHVzZXJfbGFuZ3VhZ2UgPSByZXF1ZXN0LmNvb2tpZXMu Z2V0KCdQR0FETUlOX0xBTkdVQUdFJykgb3IgJ2VuJyAlfQotICAgIHt7IHJlbmRlcl9maWVsZF93 aXRoX2Vycm9ycyhsb2dpbl91c2VyX2Zvcm0uZW1haWwsICJ0ZXh0IikgfX0KKyAgICB7eyByZW5k ZXJfdXNlcm5hbWVfd2l0aF9lcnJvcnMobG9naW5fdXNlcl9mb3JtLmVtYWlsLCAidGV4dCIpIH19 CiAgICAge3sgcmVuZGVyX2ZpZWxkX3dpdGhfZXJyb3JzKGxvZ2luX3VzZXJfZm9ybS5wYXNzd29y ZCwgInBhc3N3b3JkIikgfX0KICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRu LWJsb2NrIGJ0bi1sb2dpbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ie3sgXygnTG9naW4nKSB9fSI+ e3sgXygnTG9naW4nKSB9fTwvYnV0dG9uPgogICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93 IG1iLTMgYyB1c2VyLWxhbmd1YWdlIj4KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3RlbXBsYXRl cy9zZWN1cml0eS9wYW5lbC5odG1sIGIvd2ViL3BnYWRtaW4vdGVtcGxhdGVzL3NlY3VyaXR5L3Bh bmVsLmh0bWwKaW5kZXggN2RlMWQ5ZDkwLi4xNDUyZGU4Y2EgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL3RlbXBsYXRlcy9zZWN1cml0eS9wYW5lbC5odG1sCisrKyBiL3dlYi9wZ2FkbWluL3RlbXBs YXRlcy9zZWN1cml0eS9wYW5lbC5odG1sCkBAIC0xLDUgKzEsNSBAQAogeyUgZXh0ZW5kcyAiYmFz ZS5odG1sIiAlfQoteyUgZnJvbSAic2VjdXJpdHkvZmllbGRzLmh0bWwiIGltcG9ydCByZW5kZXJf ZmllbGRfd2l0aF9lcnJvcnMgJX0KK3slIGZyb20gInNlY3VyaXR5L2ZpZWxkcy5odG1sIiBpbXBv cnQgcmVuZGVyX2ZpZWxkX3dpdGhfZXJyb3JzLCByZW5kZXJfdXNlcm5hbWVfd2l0aF9lcnJvcnMg JX0KIHslIGJsb2NrIGJvZHkgJX0KIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCBoLTEwMCBs b2dpbl9wYWdlIj4KICAgICB7JSBpZiBjb25maWcuTE9HSU5fQkFOTkVSIGlzIGRlZmluZWQgYW5k IGNvbmZpZy5MT0dJTl9CQU5ORVIgIT0gIiIgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rv b2xzL3VzZXJfbWFuYWdlbWVudC9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJf bWFuYWdlbWVudC9fX2luaXRfXy5weQppbmRleCA1NTM2NTE3M2YuLjc4YWE5OWExNSAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L19faW5pdF9fLnB5CisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVudC9fX2luaXRfXy5weQpAQCAtNzQsNyAr NzQsOCBAQCBjbGFzcyBVc2VyTWFuYWdlbWVudE1vZHVsZShQZ0FkbWluTW9kdWxlKToKICAgICAg ICAgICAgICd1c2VyX21hbmFnZW1lbnQucm9sZXMnLCAndXNlcl9tYW5hZ2VtZW50LnJvbGUnLAog ICAgICAgICAgICAgJ3VzZXJfbWFuYWdlbWVudC51cGRhdGVfdXNlcicsICd1c2VyX21hbmFnZW1l bnQuZGVsZXRlX3VzZXInLAogICAgICAgICAgICAgJ3VzZXJfbWFuYWdlbWVudC5jcmVhdGVfdXNl cicsICd1c2VyX21hbmFnZW1lbnQudXNlcnMnLAotICAgICAgICAgICAgJ3VzZXJfbWFuYWdlbWVu dC51c2VyJywgY3VycmVudF9hcHAubG9naW5fbWFuYWdlci5sb2dpbl92aWV3CisgICAgICAgICAg ICAndXNlcl9tYW5hZ2VtZW50LnVzZXInLCBjdXJyZW50X2FwcC5sb2dpbl9tYW5hZ2VyLmxvZ2lu X3ZpZXcsCisgICAgICAgICAgICAndXNlcl9tYW5hZ2VtZW50LmF1dGhfc291cmNlcycsICd1c2Vy X21hbmFnZW1lbnQuYXV0aF9zb3VyY2VzJwogICAgICAgICBdCiAKIApAQCAtMTAwLDcgKzEwMSw3 IEBAIGRlZiB2YWxpZGF0ZV91c2VyKGRhdGEpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAg cmFpc2UgRXhjZXB0aW9uKF8oIlBhc3N3b3JkcyBkbyBub3QgbWF0Y2guIikpCiAKLSAgICBpZiAn ZW1haWwnIGluIGRhdGEgYW5kIGRhdGFbJ2VtYWlsJ10gIT0gIiI6CisgICAgaWYgJ2VtYWlsJyBp biBkYXRhIGFuZCBkYXRhWydlbWFpbCddIGFuZCBkYXRhWydlbWFpbCddICE9ICIiOgogICAgICAg ICBpZiBlbWFpbF9maWx0ZXIubWF0Y2goZGF0YVsnZW1haWwnXSk6CiAgICAgICAgICAgICBuZXdf ZGF0YVsnZW1haWwnXSA9IGRhdGFbJ2VtYWlsJ10KICAgICAgICAgZWxzZToKQEAgLTExMiw2ICsx MTMsMTIgQEAgZGVmIHZhbGlkYXRlX3VzZXIoZGF0YSk6CiAgICAgaWYgJ2FjdGl2ZScgaW4gZGF0 YSBhbmQgZGF0YVsnYWN0aXZlJ10gIT0gIiI6CiAgICAgICAgIG5ld19kYXRhWydhY3RpdmUnXSA9 IGRhdGFbJ2FjdGl2ZSddCiAKKyAgICBpZiAndXNlcm5hbWUnIGluIGRhdGEgYW5kIGRhdGFbJ3Vz ZXJuYW1lJ10gIT0gIiI6CisgICAgICAgIG5ld19kYXRhWyd1c2VybmFtZSddID0gZGF0YVsndXNl cm5hbWUnXQorCisgICAgaWYgJ2F1dGhfc291cmNlJyBpbiBkYXRhIGFuZCBkYXRhWydhdXRoX3Nv dXJjZSddICE9ICIiOgorICAgICAgICBuZXdfZGF0YVsnYXV0aF9zb3VyY2UnXSA9IGRhdGFbJ2F1 dGhfc291cmNlJ10KKwogICAgIHJldHVybiBuZXdfZGF0YQogCiAKQEAgLTE0MCw2ICsxNDcsNyBA QCBkZWYgc2NyaXB0KCk6CiBAcGdDU1JGUHJvdGVjdC5leGVtcHQKIEBsb2dpbl9yZXF1aXJlZAog ZGVmIGN1cnJlbnRfdXNlcl9pbmZvKCk6CisKICAgICByZXR1cm4gUmVzcG9uc2UoCiAgICAgICAg IHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgKICAgICAgICAgICAgICJ1c2VyX21hbmFnZW1lbnQv anMvY3VycmVudF91c2VyLmpzIiwKQEAgLTE0OCwxMyArMTU2LDE1IEBAIGRlZiBjdXJyZW50X3Vz ZXJfaW5mbygpOgogICAgICAgICAgICAgdXNlcl9pZD1jdXJyZW50X3VzZXIuaWQsCiAgICAgICAg ICAgICBlbWFpbD1jdXJyZW50X3VzZXIuZW1haWwsCiAgICAgICAgICAgICBuYW1lPSgKLSAgICAg ICAgICAgICAgICBjdXJyZW50X3VzZXIuZW1haWwuc3BsaXQoJ0AnKVswXSBpZiBjb25maWcuU0VS VkVSX01PREUgaXMgVHJ1ZQorICAgICAgICAgICAgICAgIGN1cnJlbnRfdXNlci51c2VybmFtZS5z cGxpdCgnQCcpWzBdIGlmCisgICAgICAgICAgICAgICAgY29uZmlnLlNFUlZFUl9NT0RFIGlzIFRy dWUKICAgICAgICAgICAgICAgICBlbHNlICdwb3N0Z3JlcycKICAgICAgICAgICAgICksCiAgICAg ICAgICAgICBhbGxvd19zYXZlX3Bhc3N3b3JkPSd0cnVlJyBpZiBjb25maWcuQUxMT1dfU0FWRV9Q QVNTV09SRAogICAgICAgICAgICAgZWxzZSAnZmFsc2UnLAogICAgICAgICAgICAgYWxsb3dfc2F2 ZV90dW5uZWxfcGFzc3dvcmQ9J3RydWUnCiAgICAgICAgICAgICBpZiBjb25maWcuQUxMT1dfU0FW RV9UVU5ORUxfUEFTU1dPUkQgZWxzZSAnZmFsc2UnLAorICAgICAgICAgICAgYXV0aF9zb3VyY2Vz PWNvbmZpZy5BVVRIRU5USUNBVElPTl9TT1VSQ0VTLAogICAgICAgICApLAogICAgICAgICBzdGF0 dXM9MjAwLAogICAgICAgICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIKQEAgLTE4 MCw5ICsxOTAsMTEgQEAgZGVmIHVzZXIodWlkKToKICAgICAgICAgdSA9IFVzZXIucXVlcnkuZ2V0 KHVpZCkKIAogICAgICAgICByZXMgPSB7J2lkJzogdS5pZCwKKyAgICAgICAgICAgICAgICd1c2Vy bmFtZSc6IHUudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAnZW1haWwnOiB1LmVtYWlsLAogICAg ICAgICAgICAgICAgJ2FjdGl2ZSc6IHUuYWN0aXZlLAotICAgICAgICAgICAgICAgJ3JvbGUnOiB1 LnJvbGVzWzBdLmlkCisgICAgICAgICAgICAgICAncm9sZSc6IHUucm9sZXNbMF0uaWQsCisgICAg ICAgICAgICAgICAnYXV0aF9zb3VyY2UnOiB1LmF1dGhfc291cmNlCiAgICAgICAgICAgICAgICB9 CiAgICAgZWxzZToKICAgICAgICAgdXNlcnMgPSBVc2VyLnF1ZXJ5LmFsbCgpCkBAIC0xOTAsOSAr MjAyLDExIEBAIGRlZiB1c2VyKHVpZCk6CiAgICAgICAgIHVzZXJzX2RhdGEgPSBbXQogICAgICAg ICBmb3IgdSBpbiB1c2VyczoKICAgICAgICAgICAgIHVzZXJzX2RhdGEuYXBwZW5kKHsnaWQnOiB1 LmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2VybmFtZSc6IHUudXNlcm5h bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJzogdS5lbWFpbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlJzogdS5hY3RpdmUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGUnOiB1LnJvbGVzWzBdLmlkCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3JvbGUnOiB1LnJvbGVzWzBdLmlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdhdXRoX3NvdXJjZSc6IHUuYXV0aF9zb3VyY2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9KQogCiAgICAgICAgIHJlcyA9IHVzZXJzX2RhdGEKQEAg LTIxNSwxMSArMjI5LDI5IEBAIGRlZiBjcmVhdGUoKToKICAgICAgICAgcmVxdWVzdC5kYXRhLCBl bmNvZGluZz0ndXRmLTgnCiAgICAgKQogCi0gICAgZm9yIGYgaW4gKCdlbWFpbCcsICdyb2xlJywg J2FjdGl2ZScsICduZXdQYXNzd29yZCcsICdjb25maXJtUGFzc3dvcmQnKToKKyAgICBzdGF0dXMs IHJlcyA9IGNyZWF0ZV91c2VyKGRhdGEpCisKKyAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgIHJldHVybiBh amF4X3Jlc3BvbnNlKAorICAgICAgICByZXNwb25zZT1yZXMsCisgICAgICAgIHN0YXR1cz0yMDAK KyAgICApCisKKworZGVmIGNyZWF0ZV91c2VyKGRhdGEpOgorICAgIGlmICdhdXRoX3NvdXJjZScg aW4gZGF0YSBhbmQgZGF0YVsnYXV0aF9zb3VyY2UnXSAhPSAnaW50ZXJuYWwnOgorICAgICAgICBy ZXFfcGFyYW1zID0gKCd1c2VybmFtZScsICdyb2xlJywgJ2FjdGl2ZScsICdhdXRoX3NvdXJjZScp CisgICAgZWxzZToKKyAgICAgICAgcmVxX3BhcmFtcyA9ICgnZW1haWwnLCAncm9sZScsICdhY3Rp dmUnLCAnbmV3UGFzc3dvcmQnLAorICAgICAgICAgICAgICAgICAgICAgICdjb25maXJtUGFzc3dv cmQnKQorCisgICAgZm9yIGYgaW4gcmVxX3BhcmFtczoKICAgICAgICAgaWYgZiBpbiBkYXRhIGFu ZCBkYXRhW2ZdICE9ICcnOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxzZToKLSAg ICAgICAgICAgIHJldHVybiBiYWRfcmVxdWVzdChlcnJvcm1zZz1fKCJNaXNzaW5nIGZpZWxkOiAn ezB9JyIuZm9ybWF0KGYpKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgXygiTWlzc2luZyBm aWVsZDogJ3swfSciLmZvcm1hdChmKSkKIAogICAgIHRyeToKICAgICAgICAgbmV3X2RhdGEgPSB2 YWxpZGF0ZV91c2VyKGRhdGEpCkBAIC0yMjgsMTMgKzI2MCwyMyBAQCBkZWYgY3JlYXRlKCk6CiAg ICAgICAgICAgICBuZXdfZGF0YVsncm9sZXMnXSA9IFtSb2xlLnF1ZXJ5LmdldChuZXdfZGF0YVsn cm9sZXMnXSldCiAKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgIHJldHVybiBi YWRfcmVxdWVzdChlcnJvcm1zZz1fKHN0cihlKSkpCisgICAgICAgIHJldHVybiBGYWxzZSwgc3Ry KGUpCiAKICAgICB0cnk6Ci0gICAgICAgIHVzciA9IFVzZXIoZW1haWw9bmV3X2RhdGFbJ2VtYWls J10sCisKKyAgICAgICAgdXNlcm5hbWUgPSBuZXdfZGF0YVsndXNlcm5hbWUnXSBpZiAndXNlcm5h bWUnIGluIG5ld19kYXRhIFwKKyAgICAgICAgICAgIGVsc2UgbmV3X2RhdGFbJ2VtYWlsJ10KKyAg ICAgICAgZW1haWwgPSBuZXdfZGF0YVsnZW1haWwnXSBpZiAnZW1haWwnIGluIG5ld19kYXRhIGVs c2UgTm9uZQorICAgICAgICBwYXNzd29yZCA9IG5ld19kYXRhWydwYXNzd29yZCddIGlmICdwYXNz d29yZCcgaW4gbmV3X2RhdGEgZWxzZSBOb25lCisgICAgICAgIGF1dGhfc291cmNlID0gbmV3X2Rh dGFbJ2F1dGhfc291cmNlJ10gaWYgJ2F1dGhfc291cmNlJyBpbiBuZXdfZGF0YSBcCisgICAgICAg ICAgICBlbHNlIGN1cnJlbnRfYXBwLlBHQURNSU5fREVGQVVMVF9BVVRIX1NPVVJDRQorCisgICAg ICAgIHVzciA9IFVzZXIodXNlcm5hbWU9dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgZW1h aWw9ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgcm9sZXM9bmV3X2RhdGFbJ3JvbGVzJ10sCiAg ICAgICAgICAgICAgICAgICAgYWN0aXZlPW5ld19kYXRhWydhY3RpdmUnXSwKLSAgICAgICAgICAg ICAgICAgICBwYXNzd29yZD1uZXdfZGF0YVsncGFzc3dvcmQnXSkKKyAgICAgICAgICAgICAgICAg ICBwYXNzd29yZD1wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICBhdXRoX3NvdXJjZT1hdXRo X3NvdXJjZSkKICAgICAgICAgZGIuc2Vzc2lvbi5hZGQodXNyKQogICAgICAgICBkYi5zZXNzaW9u LmNvbW1pdCgpCiAgICAgICAgICMgQWRkIGRlZmF1bHQgc2VydmVyIGdyb3VwIGZvciBuZXcgdXNl ci4KQEAgLTI0MiwxOCArMjg0LDE1IEBAIGRlZiBjcmVhdGUoKToKICAgICAgICAgZGIuc2Vzc2lv bi5hZGQoc2VydmVyX2dyb3VwKQogICAgICAgICBkYi5zZXNzaW9uLmNvbW1pdCgpCiAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9y KGVycm9ybXNnPXN0cihlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzdHIoZSkKIAotICAgIHJl cyA9IHsnaWQnOiB1c3IuaWQsCi0gICAgICAgICAgICdlbWFpbCc6IHVzci5lbWFpbCwKLSAgICAg ICAgICAgJ2FjdGl2ZSc6IHVzci5hY3RpdmUsCi0gICAgICAgICAgICdyb2xlJzogdXNyLnJvbGVz WzBdLmlkCi0gICAgICAgICAgIH0KLQotICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAotICAgICAg ICByZXNwb25zZT1yZXMsCi0gICAgICAgIHN0YXR1cz0yMDAKLSAgICApCisgICAgcmV0dXJuIFRy dWUsIHsKKyAgICAgICAgJ2lkJzogdXNyLmlkLAorICAgICAgICAndXNlcm5hbWUnOiB1c3IudXNl cm5hbWUsCisgICAgICAgICdlbWFpbCc6IHVzci5lbWFpbCwKKyAgICAgICAgJ2FjdGl2ZSc6IHVz ci5hY3RpdmUsCisgICAgICAgICdyb2xlJzogdXNyLnJvbGVzWzBdLmlkCisgICAgfQogCiAKIEBi bHVlcHJpbnQucm91dGUoCkBAIC0zMzcsOSArMzc2LDExIEBAIGRlZiB1cGRhdGUodWlkKToKICAg ICAgICAgZGIuc2Vzc2lvbi5jb21taXQoKQogCiAgICAgICAgIHJlcyA9IHsnaWQnOiB1c3IuaWQs CisgICAgICAgICAgICAgICAndXNlcm5hbWUnOiB1c3IudXNlcm5hbWUsCiAgICAgICAgICAgICAg ICAnZW1haWwnOiB1c3IuZW1haWwsCiAgICAgICAgICAgICAgICAnYWN0aXZlJzogdXNyLmFjdGl2 ZSwKLSAgICAgICAgICAgICAgICdyb2xlJzogdXNyLnJvbGVzWzBdLmlkCisgICAgICAgICAgICAg ICAncm9sZSc6IHVzci5yb2xlc1swXS5pZCwKKyAgICAgICAgICAgICAgICdhdXRoX3NvdXJjZSc6 IHVzci5hdXRoX3NvdXJjZQogICAgICAgICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBhamF4 X3Jlc3BvbnNlKApAQCAtMzg0LDMgKzQyNSwxNyBAQCBkZWYgcm9sZShyaWQpOgogICAgICAgICBy ZXNwb25zZT1yZXMsCiAgICAgICAgIHN0YXR1cz0yMDAKICAgICApCisKKworQGJsdWVwcmludC5y b3V0ZSgKKyAgICAnL2F1dGhfc291cmNlcy8nLCBtZXRob2RzPVsnR0VUJ10sIGVuZHBvaW50PSdh dXRoX3NvdXJjZXMnCispCitkZWYgYXV0aF9zb3VyY2VzKCk6CisgICAgc291cmNlcyA9IFtdCisg ICAgZm9yIHNvdXJjZSBpbiBjdXJyZW50X2FwcC5QR0FETUlOX1NVUFBPUlRFRF9BVVRIX1NPVVJD RToKKyAgICAgICAgc291cmNlcy5hcHBlbmQoeydsYWJlbCc6IHNvdXJjZSwgJ3ZhbHVlJzogc291 cmNlfSkKKworICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICByZXNwb25zZT1zb3Vy Y2VzLAorICAgICAgICBzdGF0dXM9MjAwCisgICAgKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v dG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFnZW1lbnQuanMgYi93ZWIv cGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvc3RhdGljL2pzL3VzZXJfbWFuYWdlbWVudC5q cwppbmRleCAyYjFlZDE3MjcuLjM2ODQ1MmZhYiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9v bHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFnZW1lbnQuanMKKysrIGIvd2Vi L3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5hZ2VtZW50L3N0YXRpYy9qcy91c2VyX21hbmFnZW1lbnQu anMKQEAgLTksMTIgKzksMTIgQEAKIAogZGVmaW5lKFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdz b3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAncGdhZG1pbi5hbGVydGlm eWpzJywKLSAgJ3BnYWRtaW4uYnJvd3NlcicsICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdiYWNr Zm9ybScsICdwZ2FkbWluLmJyb3dzZXIubm9kZScsCisgICdwZ2FkbWluLmJyb3dzZXInLCAnYmFj a2JvbmUnLCAnYmFja2dyaWQnLCAnYmFja2Zvcm0nLCAncGdhZG1pbi5icm93c2VyLm5vZGUnLCAn cGdhZG1pbi5iYWNrZm9ybScsCiAgICdwZ2FkbWluLnVzZXJfbWFuYWdlbWVudC5jdXJyZW50X3Vz ZXInLAogICAnYmFja2dyaWQuc2VsZWN0LmFsbCcsICdiYWNrZ3JpZC5maWx0ZXInLAogXSwgZnVu Y3Rpb24oCiAgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIGFsZXJ0aWZ5LCBwZ0Jyb3dzZXIsIEJh Y2tib25lLCBCYWNrZ3JpZCwgQmFja2Zvcm0sCi0gIHBnTm9kZSwgdXNlckluZm8KKyAgcGdOb2Rl LCBwZ0JhY2tmb3JtLCB1c2VySW5mbwogKSB7CiAKICAgLy8gaWYgbW9kdWxlIGlzIGFscmVhZHkg aW5pdGlhbGl6ZWQsIHJlZmVyIHRvIHRoYXQuCkBAIC0yNCw2ICsyNCw4IEBAIGRlZmluZShbCiAK ICAgdmFyIFVTRVJVUkwgPSB1cmxfZm9yKCd1c2VyX21hbmFnZW1lbnQudXNlcnMnKSwKICAgICBS T0xFVVJMID0gdXJsX2ZvcigndXNlcl9tYW5hZ2VtZW50LnJvbGVzJyksCisgICAgU09VUkNFVVJM ID0gdXJsX2ZvcigndXNlcl9tYW5hZ2VtZW50LmF1dGhfc291cmNlcycpLAorICAgIEFVVEhfT05M WV9JTlRFUk5BTCA9ICh1c2VySW5mb1snYXV0aF9zb3VyY2VzJ10ubGVuZ3RoICA9PSAxICYmIHVz ZXJJbmZvWydhdXRoX3NvdXJjZXMnXS5pbmNsdWRlcygnaW50ZXJuYWwnKSkgPyB0cnVlIDogZmFs c2UsCiAgICAgdXNlckZpbHRlciA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHsKICAgICAgIHJldHVy biAobmV3IEJhY2tncmlkLkV4dGVuc2lvbi5DbGllbnRTaWRlRmlsdGVyKHsKICAgICAgICAgY29s bGVjdGlvbjogY29sbGVjdGlvbiwKQEAgLTMzLDYgKzM1LDQxIEBAIGRlZmluZShbCiAgICAgICB9 KSk7CiAgICAgfTsKIAorICAvLyBJbnRlZ2VyIENlbGwgZm9yIENvbHVtbnMgTGVuZ3RoIGFuZCBQ cmVjaXNpb24KKyAgdmFyIFBhc3N3b3JkRGVwQ2VsbCA9IEJhY2tncmlkLkV4dGVuc2lvbi5QYXNz d29yZERlcENlbGwgPQorICAgIEJhY2tncmlkLkV4dGVuc2lvbi5QYXNzd29yZENlbGwuZXh0ZW5k KHsKKyAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICBCYWNrZ3JpZC5FeHRl bnNpb24uUGFzc3dvcmRDZWxsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt ZW50cyk7CisgICAgICAgIEJhY2tncmlkLkV4dGVuc2lvbi5EZXBlbmRlbnRDZWxsLnByb3RvdHlw ZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9LAorICAgICAgZGVw ZW5kZW50Q2hhbmdlZDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLiRlbC5lbXB0eSgpOwor ICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsLAorICAgICAgICAgIGNvbHVtbiA9IHRoaXMu Y29sdW1uLAorICAgICAgICAgIGVkaXRhYmxlID0gdGhpcy5jb2x1bW4uZ2V0KCdlZGl0YWJsZScp LAorICAgICAgICAgIGlzX2VkaXRhYmxlID0gXy5pc0Z1bmN0aW9uKGVkaXRhYmxlKSA/ICEhZWRp dGFibGUuYXBwbHkoY29sdW1uLCBbbW9kZWxdKSA6ICEhZWRpdGFibGU7CisKKyAgICAgICAgaWYg KGlzX2VkaXRhYmxlKXsgdGhpcy4kZWwuYWRkQ2xhc3MoJ2VkaXRhYmxlJyk7IH0KKyAgICAgICAg ZWxzZSB7IHRoaXMuJGVsLnJlbW92ZUNsYXNzKCdlZGl0YWJsZScpOyB9CisKKyAgICAgICAgdGhp cy5kZWxlZ2F0ZUV2ZW50cygpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0sCisgICAg ICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICBCYWNrZ3JpZC5OdW1iZXJDZWxsLnByb3Rv dHlwZS5yZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICB2YXIgbW9kZWwg PSB0aGlzLm1vZGVsLAorICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uLAorICAgICAgICAg IGVkaXRhYmxlID0gdGhpcy5jb2x1bW4uZ2V0KCdlZGl0YWJsZScpLAorICAgICAgICAgIGlzX2Vk aXRhYmxlID0gXy5pc0Z1bmN0aW9uKGVkaXRhYmxlKSA/ICEhZWRpdGFibGUuYXBwbHkoY29sdW1u LCBbbW9kZWxdKSA6ICEhZWRpdGFibGU7CisKKyAgICAgICAgaWYgKGlzX2VkaXRhYmxlKXsgdGhp cy4kZWwuYWRkQ2xhc3MoJ2VkaXRhYmxlJyk7IH0KKyAgICAgICAgZWxzZSB7IHRoaXMuJGVsLnJl bW92ZUNsYXNzKCdlZGl0YWJsZScpOyB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfSwK KyAgICAgIHJlbW92ZTogQmFja2dyaWQuRXh0ZW5zaW9uLkRlcGVuZGVudENlbGwucHJvdG90eXBl LnJlbW92ZSwKKyAgICB9KTsKKwogICBwZ0Jyb3dzZXIuVXNlck1hbmFnZW1lbnQgPSB7CiAgICAg aW5pdDogZnVuY3Rpb24oKSB7CiAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKQEAgLTIzNSwy MCArMjcyLDY3IEBAIGRlZmluZShbCiAgICAgLy8gQ2FsbGJhY2sgdG8gZHJhdyBVc2VyIE1hbmFn ZW1lbnQgRGlhbG9nLgogICAgIHNob3dfdXNlcnM6IGZ1bmN0aW9uKCkgewogICAgICAgaWYgKCF1 c2VySW5mb1snaXNfYWRtaW4nXSkgcmV0dXJuOwotICAgICAgdmFyIFJvbGVzID0gW107CisgICAg ICB2YXIgUm9sZXMgPSBbXSwKKyAgICAgICAgU291cmNlcyA9IFtdOwogCiAgICAgICB2YXIgVXNl ck1vZGVsID0gcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5kKHsKICAgICAgICAgICBpZEF0dHJp YnV0ZTogJ2lkJywKICAgICAgICAgICB1cmxSb290OiBVU0VSVVJMLAogICAgICAgICAgIGRlZmF1 bHRzOiB7CiAgICAgICAgICAgICBpZDogdW5kZWZpbmVkLAorICAgICAgICAgICAgdXNlcm5hbWU6 IHVuZGVmaW5lZCwKICAgICAgICAgICAgIGVtYWlsOiB1bmRlZmluZWQsCiAgICAgICAgICAgICBh Y3RpdmU6IHRydWUsCiAgICAgICAgICAgICByb2xlOiB1bmRlZmluZWQsCiAgICAgICAgICAgICBu ZXdQYXNzd29yZDogdW5kZWZpbmVkLAogICAgICAgICAgICAgY29uZmlybVBhc3N3b3JkOiB1bmRl ZmluZWQsCisgICAgICAgICAgICBhdXRoX3NvdXJjZTogJ2ludGVybmFsJywKKyAgICAgICAgICAg IGF1dGhPbmx5SW50ZXJuYWw6IEFVVEhfT05MWV9JTlRFUk5BTCwKICAgICAgICAgICB9LAogICAg ICAgICAgIHNjaGVtYTogW3sKKyAgICAgICAgICAgIGlkOiAnYXV0aF9zb3VyY2UnLAorICAgICAg ICAgICAgbGFiZWw6IGdldHRleHQoJ0F1dGhlbnRpY2F0aW9uIFNvdXJjZScpLAorICAgICAgICAg ICAgdHlwZTogJ3RleHQnLAorICAgICAgICAgICAgY29udHJvbDogJ1NlbGVjdDInLAorICAgICAg ICAgICAgdXJsOiB1cmxfZm9yKCd1c2VyX21hbmFnZW1lbnQuYXV0aF9zb3VyY2VzJyksCisgICAg ICAgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMzAnLAorICAgICAgICAg ICAgdmlzaWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICBpZiAobS5nZXQoJ2F1dGhP bmx5SW50ZXJuYWwnKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsCisgICAgICAgICAg ICBjZWxsOiAnU2VsZWN0MicsCisgICAgICAgICAgICBzZWxlY3QyOiB7CisgICAgICAgICAgICAg IGFsbG93Q2xlYXI6IGZhbHNlLAorICAgICAgICAgICAgICBvcGVuT25FbnRlcjogZmFsc2UsCisg ICAgICAgICAgICAgIGZpcnN0X2VtcHR5OiBmYWxzZSwKKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBvcHRpb25zOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIFNvdXJjZXM7 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAg ICAgICAgICAgICAgaWYgKG0gaW5zdGFuY2VvZiBCYWNrYm9uZS5Db2xsZWN0aW9uKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg aWYgKG0uaXNOZXcoKSAmJiAhbS5nZXQoJ2F1dGhPbmx5SW50ZXJuYWwnKSkgeworICAgICAgICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAg ICAgICB9LCB7CisgICAgICAgICAgICBpZDogJ3VzZXJuYW1lJywKKyAgICAgICAgICAgIGxhYmVs OiBnZXR0ZXh0KCdVc2VybmFtZScpLAorICAgICAgICAgICAgdHlwZTogJ3RleHQnLAorICAgICAg ICAgICAgY2VsbDogQmFja2dyaWQuRXh0ZW5zaW9uLlN0cmluZ0RlcENlbGwsCisgICAgICAgICAg ICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMzAnLAorICAgICAgICAgICAgZGVw czogWydhdXRoX3NvdXJjZSddLAorICAgICAgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdhdXRoT25seUludGVybmFsJykgfHwgbS5nZXQoJ2F1 dGhfc291cmNlJykgPT0gJ2ludGVybmFsJykgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2Us CisgICAgICAgICAgfSwgewogICAgICAgICAgICAgaWQ6ICdlbWFpbCcsCiAgICAgICAgICAgICBs YWJlbDogZ2V0dGV4dCgnRW1haWwnKSwKICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywKQEAgLTI1 Niw2ICszNDAsOCBAQCBkZWZpbmUoWwogICAgICAgICAgICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3 aWR0aF9wZXJjZW50XzMwJywKICAgICAgICAgICAgIGRlcHM6IFsnaWQnXSwKICAgICAgICAgICAg IGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgIGlmICghbS5nZXQoJ2F1dGhP bmx5SW50ZXJuYWwnKSkgcmV0dXJuIHRydWU7CisKICAgICAgICAgICAgICAgaWYgKG0gaW5zdGFu Y2VvZiBCYWNrYm9uZS5Db2xsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OwogICAgICAgICAgICAgICB9CkBAIC0zMjgsMjMgKzQxNCwzOCBAQCBkZWZpbmUoWwogICAgICAg ICAgICAgdHlwZTogJ3Bhc3N3b3JkJywKICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKICAg ICAgICAgICAgIGNvbnRyb2w6ICdpbnB1dCcsCi0gICAgICAgICAgICBjZWxsOiAncGFzc3dvcmQn LAorICAgICAgICAgICAgY2VsbDogUGFzc3dvcmREZXBDZWxsLAogICAgICAgICAgICAgY2VsbEhl YWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzIwJywKKyAgICAgICAgICAgIGRlcHM6IFsnYXV0 aF9zb3VyY2UnXSwKKyAgICAgICAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAg ICAgICAgIGlmIChtLmdldCgnYXV0aF9zb3VyY2UnKSA9PSAnaW50ZXJuYWwnKSB7CisgICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAogICAg ICAgICAgIH0sIHsKICAgICAgICAgICAgIGlkOiAnY29uZmlybVBhc3N3b3JkJywKICAgICAgICAg ICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25maXJtIHBhc3N3b3JkJyksCiAgICAgICAgICAgICB0eXBl OiAncGFzc3dvcmQnLAogICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAg Y29udHJvbDogJ2lucHV0JywKLSAgICAgICAgICAgIGNlbGw6ICdwYXNzd29yZCcsCisgICAgICAg ICAgICBjZWxsOiBQYXNzd29yZERlcENlbGwsCiAgICAgICAgICAgICBjZWxsSGVhZGVyQ2xhc3Nl czogJ3dpZHRoX3BlcmNlbnRfMjAnLAorICAgICAgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0p IHsKKyAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdhdXRoX3NvdXJjZScpID09ICdpbnRlcm5hbCcp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0sCiAgICAgICAgICAgfV0sCiAgICAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKCkgewog ICAgICAgICAgICAgdmFyIGVycm1zZyA9IG51bGwsCiAgICAgICAgICAgICAgIGNoYW5nZWRBdHRy cyA9IHRoaXMuY2hhbmdlZCB8fCB7fSwKICAgICAgICAgICAgICAgZW1haWxfZmlsdGVyID0gL15b YS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05 LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYx fVthLXpBLVowLTldKT8pKiQvOwogCi0gICAgICAgICAgICBpZiAoKCdlbWFpbCcgaW4gY2hhbmdl ZEF0dHJzIHx8ICF0aGlzLmlzTmV3KCkpICYmIChfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdlbWFp bCcpKSB8fAorICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdhdXRoX3NvdXJjZScpID09ICdpbnRl cm5hbCcgJiYgKCdlbWFpbCcgaW4gY2hhbmdlZEF0dHJzIHx8ICF0aGlzLmlzTmV3KCkpICYmIChf LmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdlbWFpbCcpKSB8fAogICAgICAgICAgICAgICAgIF8uaXNO dWxsKHRoaXMuZ2V0KCdlbWFpbCcpKSB8fAogICAgICAgICAgICAgICAgIFN0cmluZyh0aGlzLmdl dCgnZW1haWwnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykpIHsKICAgICAgICAg ICAgICAgZXJybXNnID0gZ2V0dGV4dCgnRW1haWwgYWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkuJyk7 CkBAIC0zNTgsOSArNDU5LDggQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnNldCgnZW1haWwnLCBlcnJtc2cpOwogICAgICAgICAgICAgICByZXR1cm4gZXJybXNnOwog ICAgICAgICAgICAgfSBlbHNlIGlmICghIXRoaXMuZ2V0KCdlbWFpbCcpICYmIHRoaXMuY29sbGVj dGlvbi53aGVyZSh7Ci0gICAgICAgICAgICAgICdlbWFpbCc6IHRoaXMuZ2V0KCdlbWFpbCcpLAor ICAgICAgICAgICAgICAnZW1haWwnOiB0aGlzLmdldCgnZW1haWwnKSwgJ2F1dGhfc291cmNlJzog J2ludGVybmFsJywKICAgICAgICAgICAgIH0pLmxlbmd0aCA+IDEpIHsKLQogICAgICAgICAgICAg ICBlcnJtc2cgPSBnZXR0ZXh0KCdUaGUgZW1haWwgYWRkcmVzcyAlcyBhbHJlYWR5IGV4aXN0cy4n LAogICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdlbWFpbCcpCiAgICAgICAgICAgICAgICk7CkBA IC0zODUsMTExICs0ODUsMTEzIEBAIGRlZmluZShbCiAgICAgICAgICAgICAgIHRoaXMuZXJyb3JN b2RlbC51bnNldCgncm9sZScpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGhp cy5pc05ldygpKSB7Ci0gICAgICAgICAgICAgIC8vIFBhc3N3b3JkIGlzIGNvbXB1bHNvcnkgZm9y IG5ldyB1c2VyLgotICAgICAgICAgICAgICBpZiAoJ25ld1Bhc3N3b3JkJyBpbiBjaGFuZ2VkQXR0 cnMgJiYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykpIHx8Ci0gICAgICAg ICAgICAgICAgICBfLmlzTnVsbCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgfHwKLSAgICAgICAg ICAgICAgICAgIHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpID09ICcnKSkgewotCi0gICAgICAgICAg ICAgICAgZXJybXNnID0gZ2V0dGV4dCgnUGFzc3dvcmQgY2Fubm90IGJlIGVtcHR5IGZvciB1c2Vy ICVzLicsCi0gICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2VtYWlsJykgfHwgJycpCi0gICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICh0aGlzLmdldCgnYXV0aF9zb3VyY2UnKSA9 PSAnaW50ZXJuYWwnKSB7CisgICAgICAgICAgICAgIGlmICh0aGlzLmlzTmV3KCkpIHsKKyAgICAg ICAgICAgICAgICAvLyBQYXNzd29yZCBpcyBjb21wdWxzb3J5IGZvciBuZXcgdXNlci4KKyAgICAg ICAgICAgICAgICBpZiAoJ25ld1Bhc3N3b3JkJyBpbiBjaGFuZ2VkQXR0cnMgJiYgKF8uaXNVbmRl ZmluZWQodGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAgIF8u aXNOdWxsKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSB8fAorICAgICAgICAgICAgICAgICAgICB0 aGlzLmdldCgnbmV3UGFzc3dvcmQnKSA9PSAnJykpIHsKIAotICAgICAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm4gZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRo aXMuZ2V0KCduZXdQYXNzd29yZCcpKSAmJgotICAgICAgICAgICAgICAgICFfLmlzTnVsbCh0aGlz LmdldCgnbmV3UGFzc3dvcmQnKSkgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFz c3dvcmQnKS5sZW5ndGggPCA2KSB7CisgICAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0 KCdQYXNzd29yZCBjYW5ub3QgYmUgZW1wdHkgZm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAg ICAgICAgKHRoaXMuZ2V0KCdlbWFpbCcpIHx8ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAot ICAgICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVh c3QgNiBjaGFyYWN0ZXJzIGZvciB1c2VyICVzLicsCi0gICAgICAgICAgICAgICAgICAodGhpcy5n ZXQoJ2VtYWlsJykgfHwgJycpCi0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAg IHRoaXMuZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAg ICAgICAgIHJldHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghXy5pc1Vu ZGVmaW5lZCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgJiYKKyAgICAgICAgICAgICAgICAgICFf LmlzTnVsbCh0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSkgJiYKKyAgICAgICAgICAgICAgICAgIHRo aXMuZ2V0KCduZXdQYXNzd29yZCcpLmxlbmd0aCA8IDYpIHsKIAotICAgICAgICAgICAgICAgIHRo aXMuZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKLSAgICAgICAgICAgICAg ICByZXR1cm4gZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg IHRoaXMuZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKLSAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgZXJybXNnID0gZ2V0dGV4dCgnUGFzc3dvcmQgbXVzdCBiZSBhdCBs ZWFzdCA2IGNoYXJhY3RlcnMgZm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRo aXMuZ2V0KCdlbWFpbCcpIHx8ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAg ICAgICBpZiAoJ2NvbmZpcm1QYXNzd29yZCcgaW4gY2hhbmdlZEF0dHJzICYmIChfLmlzVW5kZWZp bmVkKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAgICAgICAgICAgIF8u aXNOdWxsKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAgICAgICAgICAg IHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSA9PSAnJykpIHsKKyAgICAgICAgICAgICAgICAg IHRoaXMuZXJyb3JNb2RlbC5zZXQoJ25ld1Bhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAg ICAgICAgIHJldHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKKyAgICAgICAg ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdDb25maXJtIFBh c3N3b3JkIGNhbm5vdCBiZSBlbXB0eSBmb3IgdXNlciAlcy4nLAotICAgICAgICAgICAgICAgICAg KHRoaXMuZ2V0KCdlbWFpbCcpIHx8ICcnKQotICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICAgICAgaWYgKCdjb25maXJtUGFzc3dvcmQnIGluIGNoYW5nZWRBdHRycyAmJiAoXy5pc1VuZGVm aW5lZCh0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAg IF8uaXNOdWxsKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKKyAgICAgICAgICAgICAg ICAgICAgdGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpID09ICcnKSkgewogCi0gICAgICAgICAg ICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnY29uZmlybVBhc3N3b3JkJywgZXJybXNnKTsKLSAg ICAgICAgICAgICAgICByZXR1cm4gZXJybXNnOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7Ci0g ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ0NvbmZp cm0gUGFzc3dvcmQgY2Fubm90IGJlIGVtcHR5IGZvciB1c2VyICVzLicsCisgICAgICAgICAgICAg ICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKKyAgICAgICAgICAgICAgICAgICk7CiAK LSAgICAgICAgICAgICAgaWYgKCEhdGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykgJiYgISF0aGlzLmdl dCgnY29uZmlybVBhc3N3b3JkJykgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFz c3dvcmQnKSAhPSB0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKKyAgICAgICAgICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7CisgICAg ICAgICAgICAgICAgICByZXR1cm4gZXJybXNnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcp OworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQo J1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2ggZm9yIHVzZXIgJXMuJywKLSAgICAgICAgICAgICAgICAg ICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgIGlmICghIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpICYmICEhdGhpcy5nZXQoJ2NvbmZp cm1QYXNzd29yZCcpICYmCisgICAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQn KSAhPSB0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKIAotICAgICAgICAgICAgICAgIHRo aXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcpOwotICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNzd29yZHMgZG8g bm90IG1hdGNoIGZvciB1c2VyICVzLicsCisgICAgICAgICAgICAgICAgICAgICh0aGlzLmdldCgn ZW1haWwnKSB8fCAnJykKKyAgICAgICAgICAgICAgICAgICk7CiAKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgIGlmICgoXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnbmV3UGFzc3dv cmQnKSkgfHwgXy5pc051bGwodGhpcy5nZXQoJ25ld1Bhc3N3b3JkJykpIHx8Ci0gICAgICAgICAg ICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSA9PSAnJykgJiYKLSAgICAgICAgICAgICAg ICAoKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpKSB8fCBfLmlzTnVs bCh0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8Ci0gICAgICAgICAgICAgICAgICB0aGlz LmdldCgnY29uZmlybVBhc3N3b3JkJykgPT0gJycpKSkgewotCi0gICAgICAgICAgICAgICAgdGhp cy5lcnJvck1vZGVsLnVuc2V0KCduZXdQYXNzd29yZCcpOwotICAgICAgICAgICAgICAgIGlmICh0 aGlzLmdldCgnbmV3UGFzc3dvcmQnKSA9PSAnJykgewotICAgICAgICAgICAgICAgICAgdGhpcy5z ZXQoewotICAgICAgICAgICAgICAgICAgICAnbmV3UGFzc3dvcmQnOiB1bmRlZmluZWQsCi0gICAg ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQo J2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy bXNnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICB0aGlzLmVy cm9yTW9kZWwudW5zZXQoJ2NvbmZpcm1QYXNzd29yZCcpOwogICAgICAgICAgICAgICAgIH0KIAot ICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7 Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSA9PSAnJykg ewotICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoewotICAgICAgICAgICAgICAgICAgICAnY29u ZmlybVBhc3N3b3JkJzogdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMu Z2V0KCduZXdQYXNzd29yZCcpKSAmJgotICAgICAgICAgICAgICAgICFfLmlzTnVsbCh0aGlzLmdl dCgnbmV3UGFzc3dvcmQnKSkgJiYKLSAgICAgICAgICAgICAgICAhdGhpcy5nZXQoJ25ld1Bhc3N3 b3JkJykgPT0gJycgJiYKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKS5s ZW5ndGggPCA2KSB7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg KChfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSB8fCBfLmlzTnVsbCh0aGlz LmdldCgnbmV3UGFzc3dvcmQnKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ25l d1Bhc3N3b3JkJykgPT0gJycpICYmCisgICAgICAgICAgICAgICAgICAoKF8uaXNVbmRlZmluZWQo dGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpKSB8fCBfLmlzTnVsbCh0aGlzLmdldCgnY29uZmly bVBhc3N3b3JkJykpIHx8CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdjb25maXJtUGFz c3dvcmQnKSA9PSAnJykpKSB7CisKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51 bnNldCgnbmV3UGFzc3dvcmQnKTsKKyAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldCgnbmV3 UGFzc3dvcmQnKSA9PSAnJykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnNldCh7CisgICAg ICAgICAgICAgICAgICAgICAgJ25ld1Bhc3N3b3JkJzogdW5kZWZpbmVkLAorICAgICAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVycm1z ZyA9IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGZvciB1 c2VyICVzLicsCi0gICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2VtYWlsJykgfHwgJycpCi0g ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNl dCgnY29uZmlybVBhc3N3b3JkJyk7CisgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2Nv bmZpcm1QYXNzd29yZCcpID09ICcnKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHsK KyAgICAgICAgICAgICAgICAgICAgICAnY29uZmlybVBhc3N3b3JkJzogdW5kZWZpbmVkLAorICAg ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSAmJgor ICAgICAgICAgICAgICAgICAgIV8uaXNOdWxsKHRoaXMuZ2V0KCduZXdQYXNzd29yZCcpKSAmJgor ICAgICAgICAgICAgICAgICAgIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpID09ICcnICYmCisgICAg ICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFzc3dvcmQnKS5sZW5ndGggPCA2KSB7CiAKLSAg ICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCduZXdQYXNzd29yZCcsIGVycm1zZyk7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIGlm IChfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgfHwKLSAgICAgICAg ICAgICAgICBfLmlzTnVsbCh0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHx8Ci0gICAgICAg ICAgICAgICAgdGhpcy5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpID09ICcnKSB7CisgICAgICAgICAg ICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hh cmFjdGVycyBmb3IgdXNlciAlcy4nLAorICAgICAgICAgICAgICAgICAgICAodGhpcy5nZXQoJ2Vt YWlsJykgfHwgJycpCisgICAgICAgICAgICAgICAgICApOwogCi0gICAgICAgICAgICAgICAgZXJy bXNnID0gZ2V0dGV4dCgnQ29uZmlybSBQYXNzd29yZCBjYW5ub3QgYmUgZW1wdHkgZm9yIHVzZXIg JXMuJywKLSAgICAgICAgICAgICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnbmV3 UGFzc3dvcmQnLCBlcnJtc2cpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm1zZzsKKyAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2NvbmZpcm1Q YXNzd29yZCcpKSB8fAorICAgICAgICAgICAgICAgICAgXy5pc051bGwodGhpcy5nZXQoJ2NvbmZp cm1QYXNzd29yZCcpKSB8fAorICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ2NvbmZpcm1QYXNz d29yZCcpID09ICcnKSB7CiAKLSAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdj b25maXJtUGFzc3dvcmQnLCBlcnJtc2cpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJtc2c7 Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoISF0aGlzLmdldCgnbmV3UGFzc3dvcmQnKSAmJiAh IXRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSAmJgotICAgICAgICAgICAgICAgIHRoaXMuZ2V0 KCduZXdQYXNzd29yZCcpICE9IHRoaXMuZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkgeworICAgICAg ICAgICAgICAgICAgZXJybXNnID0gZ2V0dGV4dCgnQ29uZmlybSBQYXNzd29yZCBjYW5ub3QgYmUg ZW1wdHkgZm9yIHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0KCdlbWFp bCcpIHx8ICcnKQorICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgICAgIGVycm1z ZyA9IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2ggZm9yIHVzZXIgJXMuJywKLSAgICAg ICAgICAgICAgICAgICh0aGlzLmdldCgnZW1haWwnKSB8fCAnJykKLSAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnY29uZmlybVBhc3N3b3Jk JywgZXJybXNnKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJtc2c7CisgICAgICAgICAg ICAgICAgfSBlbHNlIGlmICghIXRoaXMuZ2V0KCduZXdQYXNzd29yZCcpICYmICEhdGhpcy5nZXQo J2NvbmZpcm1QYXNzd29yZCcpICYmCisgICAgICAgICAgICAgICAgICB0aGlzLmdldCgnbmV3UGFz c3dvcmQnKSAhPSB0aGlzLmdldCgnY29uZmlybVBhc3N3b3JkJykpIHsKIAotICAgICAgICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2NvbmZpcm1QYXNzd29yZCcsIGVycm1zZyk7Ci0gICAg ICAgICAgICAgICAgcmV0dXJuIGVycm1zZzsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ25ld1Bhc3N3b3JkJyk7Ci0gICAgICAg ICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0KCdjb25maXJtUGFzc3dvcmQnKTsKKyAgICAg ICAgICAgICAgICAgIGVycm1zZyA9IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2ggZm9y IHVzZXIgJXMuJywKKyAgICAgICAgICAgICAgICAgICAgKHRoaXMuZ2V0KCdlbWFpbCcpIHx8ICcn KQorICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnNldCgnY29uZmlybVBhc3N3b3JkJywgZXJybXNnKTsKKyAgICAgICAgICAgICAgICAgIHJl dHVybiBlcnJtc2c7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg IHRoaXMuZXJyb3JNb2RlbC51bnNldCgnbmV3UGFzc3dvcmQnKTsKKyAgICAgICAgICAgICAgICAg IHRoaXMuZXJyb3JNb2RlbC51bnNldCgnY29uZmlybVBhc3N3b3JkJyk7CisgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g bnVsbDsKQEAgLTcxNiw3ICs4MTgsMTAgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgIHNh dmVVc2VyOiBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gbS50b0pT T04odHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSAmJiAoIW0uZ2V0 KCdlbWFpbCcpIHx8ICFtLmdldCgncm9sZScpIHx8CisgICAgICAgICAgICAgICAgICAgIGlmKG0u aXNOZXcoKSAmJiBtLmdldCgnYXV0aE9ubHlJbnRlcm5hbCcpID09PSBmYWxzZSAmJgorICAgICAg ICAgICAgICAgICAgICAgKCFtLmdldCgndXNlcm5hbWUnKSB8fCAhbS5nZXQoJ2F1dGhfc291cmNl JykgfHwgIW0uZ2V0KCdyb2xlJykpICkgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtLmlzTmV3KCkgJiYgbS5nZXQo J2F1dGhPbmx5SW50ZXJuYWwnKSA9PT0gdHJ1ZSAmJiAgKCFtLmdldCgnZW1haWwnKSB8fCAhbS5n ZXQoJ3JvbGUnKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgIW0uZ2V0KCduZXdQYXNzd29y ZCcpIHx8ICFtLmdldCgnY29uZmlybVBhc3N3b3JkJykgfHwKICAgICAgICAgICAgICAgICAgICAg ICAgIG0uZ2V0KCduZXdQYXNzd29yZCcpICE9IG0uZ2V0KCdjb25maXJtUGFzc3dvcmQnKSkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXcgdXNlciBtb2RlbCBpcyB2YWxpZCBidXQgcGFy dGlhbGx5IGZpbGxlZCBzbyByZXR1cm4gd2l0aG91dCBzYXZpbmcuCkBAIC03NDEsNyArODQ2LDcg QEAgZGVmaW5lKFsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICBtLnN0YXJ0TmV3U2Vzc2lv bigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGdldHRleHQo J1VzZXIgXCclc1wnIHNhdmVkLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5nZXQo J2VtYWlsJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmdldCgndXNlcm5hbWUnKQog ICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0s CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24ocmVzLCBqcXhocikgewpA QCAtNzk3LDYgKzkwMiwyMyBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICAgICAgfSwgMTAwKTsK ICAgICAgICAgICAgICAgICB9KTsKIAorICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAg ICAgICAgIHVybDogU09VUkNFVVJMLAorICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisg ICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICB9KQorICAgICAgICAg ICAgICAgIC5kb25lKGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgICAgICAgU291cmNlcyA9 IHJlczsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg ICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4 dCgnRXJyb3InKSwKKyAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdDYW5ub3QgbG9hZCB1 c2VyIFNvdXJjZXMuJykKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAg IH0sIDEwMCk7CisgICAgICAgICAgICAgICAgfSk7CisKICAgICAgICAgICAgICAgdmFyIHZpZXcg PSB0aGlzLnZpZXcgPSBuZXcgQmFja2dyaWQuR3JpZCh7CiAgICAgICAgICAgICAgICAgcm93OiBV c2VyUm93LAogICAgICAgICAgICAgICAgIGNvbHVtbnM6IGdyaWRTY2hlbWEuY29sdW1ucywKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVudC90ZW1wbGF0ZXMvdXNl cl9tYW5hZ2VtZW50L2pzL2N1cnJlbnRfdXNlci5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJf bWFuYWdlbWVudC90ZW1wbGF0ZXMvdXNlcl9tYW5hZ2VtZW50L2pzL2N1cnJlbnRfdXNlci5qcwpp bmRleCBjZmNiNzc4MTMuLmM2ZTIxMDM0MyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMv dXNlcl9tYW5hZ2VtZW50L3RlbXBsYXRlcy91c2VyX21hbmFnZW1lbnQvanMvY3VycmVudF91c2Vy LmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVudC90ZW1wbGF0ZXMvdXNl cl9tYW5hZ2VtZW50L2pzL2N1cnJlbnRfdXNlci5qcwpAQCAtMTQsNiArMTQsNyBAQCBkZWZpbmUo J3BnYWRtaW4udXNlcl9tYW5hZ2VtZW50LmN1cnJlbnRfdXNlcicsIFtdLCBmdW5jdGlvbigpIHsK ICAgICAgICAgJ2lzX2FkbWluJzoge3sgaXNfYWRtaW4gfX0sCiAgICAgICAgICduYW1lJzogJ3t7 IG5hbWUgfX0nLAogICAgICAgICAnYWxsb3dfc2F2ZV9wYXNzd29yZCc6IHt7IGFsbG93X3NhdmVf cGFzc3dvcmQgfX0sCi0gICAgICAgICdhbGxvd19zYXZlX3R1bm5lbF9wYXNzd29yZCc6IHt7IGFs bG93X3NhdmVfdHVubmVsX3Bhc3N3b3JkIH19CisgICAgICAgICdhbGxvd19zYXZlX3R1bm5lbF9w YXNzd29yZCc6IHt7IGFsbG93X3NhdmVfdHVubmVsX3Bhc3N3b3JkIH19LAorICAgICAgICAnYXV0 aF9zb3VyY2VzJzoge3sgYXV0aF9zb3VyY2VzIH19CiAgICAgfQogfSk7CmRpZmYgLS1naXQgYS93 ZWIvcmVncmVzc2lvbi9weXRob25fdGVzdF91dGlscy9jc3JmX3Rlc3RfY2xpZW50LnB5IGIvd2Vi L3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMvY3NyZl90ZXN0X2NsaWVudC5weQppbmRleCBi YjNmN2RhNzAuLjQyYWU1MTBiNSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rl c3RfdXRpbHMvY3NyZl90ZXN0X2NsaWVudC5weQorKysgYi93ZWIvcmVncmVzc2lvbi9weXRob25f dGVzdF91dGlscy9jc3JmX3Rlc3RfY2xpZW50LnB5CkBAIC0xMDksNyArMTA5LDcgQEAgY2xhc3Mg VGVzdENsaWVudCh0ZXN0aW5nLkZsYXNrQ2xpZW50KToKICAgICAgICAgICAgIGNzcmZfdG9rZW4g PSBzZWxmLmdlbmVyYXRlX2NzcmZfdG9rZW4oKQogCiAgICAgICAgIHJlcyA9IHNlbGYucG9zdCgK LSAgICAgICAgICAgICcvbG9naW4nLCBkYXRhPWRpY3QoCisgICAgICAgICAgICAnL2F1dGhlbnRp Y2F0ZS9sb2dpbicsIGRhdGE9ZGljdCgKICAgICAgICAgICAgICAgICBlbWFpbD1lbWFpbCwgcGFz c3dvcmQ9cGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgY3NyZl90b2tlbj1jc3JmX3Rva2VuLAog ICAgICAgICAgICAgKSwKQEAgLTEyMCw1ICsxMjAsNSBAQCBjbGFzcyBUZXN0Q2xpZW50KHRlc3Rp bmcuRmxhc2tDbGllbnQpOgogICAgICAgICByZXR1cm4gcmVzCiAKICAgICBkZWYgbG9nb3V0KHNl bGYpOgotICAgICAgICByZXMgPSBzZWxmLmdldCgnL2xvZ291dCcsIGZvbGxvd19yZWRpcmVjdHM9 RmFsc2UpCisgICAgICAgIHJlcyA9IHNlbGYuZ2V0KCcvbG9nb3V0P25leHQ9L2Jyb3dzZXIvJywg Zm9sbG93X3JlZGlyZWN0cz1GYWxzZSkKICAgICAgICAgc2VsZi5jc3JmX3Rva2VuID0gTm9uZQpk aWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkgYi93ZWIvcmVncmVzc2lvbi9y dW50ZXN0cy5weQppbmRleCBlZjViNDYzMjguLmZjZjczYTg4NiAxMDA2NDQKLS0tIGEvd2ViL3Jl Z3Jlc3Npb24vcnVudGVzdHMucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkKQEAg LTExOCw2ICsxMTgsMTEgQEAgYXBwLlBHQURNSU5fUlVOVElNRSA9IFRydWUKIGlmIGNvbmZpZy5T RVJWRVJfTU9ERSBpcyBUcnVlOgogICAgIGFwcC5QR0FETUlOX1JVTlRJTUUgPSBGYWxzZQogYXBw LmNvbmZpZ1snV1RGX0NTUkZfRU5BQkxFRCddID0gVHJ1ZQorCisjIEF1dGhlbnRpY2F0aW9uIHNv dXJjZXMKK2FwcC5QR0FETUlOX0RFRkFVTFRfQVVUSF9TT1VSQ0UgPSAnaW50ZXJuYWwnCithcHAu UEdBRE1JTl9FWFRFUk5BTF9BVVRIX1NPVVJDRSA9ICdsZGFwJworCiBhcHAudGVzdF9jbGllbnRf Y2xhc3MgPSBUZXN0Q2xpZW50CiB0ZXN0X2NsaWVudCA9IGFwcC50ZXN0X2NsaWVudCgpCiB0ZXN0 X2NsaWVudC5zZXRBcHAoYXBwKQpAQCAtMTk1LDYgKzIwMCw4IEBAIGRlZiBnZXRfdGVzdF9tb2R1 bGVzKGFyZ3VtZW50cyk6CiAgICAgICAgICAgICAiYnJvd3Nlci50ZXN0cy50ZXN0X2xvZ2luIiwK ICAgICAgICAgICAgICJicm93c2VyLnRlc3RzLnRlc3RfbG9nb3V0IiwKICAgICAgICAgICAgICJi cm93c2VyLnRlc3RzLnRlc3RfcmVzZXRfcGFzc3dvcmQiLAorICAgICAgICAgICAgImJyb3dzZXIu dGVzdHMudGVzdF9sZGFwX2xvZ2luIiwKKyAgICAgICAgICAgICJicm93c2VyLnRlc3RzLnRlc3Rf bGRhcF93aXRoX21vY2tpbmciLAogICAgICAgICBdKQogICAgIGlmIGFyZ3VtZW50c1snZXhjbHVk ZSddIGlzIG5vdCBOb25lOgogICAgICAgICBleGNsdWRlX3BrZ3MgKz0gYXJndW1lbnRzWydleGNs dWRlJ10uc3BsaXQoJywnKQpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vdGVzdF9jb25maWcu anNvbi5pbiBiL3dlYi9yZWdyZXNzaW9uL3Rlc3RfY29uZmlnLmpzb24uaW4KaW5kZXggMTViMTMz YTE5Li4wYTE1MWU2MzMgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3Rlc3RfY29uZmlnLmpz b24uaW4KKysrIGIvd2ViL3JlZ3Jlc3Npb24vdGVzdF9jb25maWcuanNvbi5pbgpAQCAtMTEsNiAr MTEsNDkgQEAKICAgICAibG9naW5fcGFzc3dvcmQiOiAiUEFTU1dPUkQiLAogICAgICJsb2dpbl91 c2VybmFtZSI6ICJVU0VSQEVYQU1QTEUuQ09NIgogICB9LAorICAicGdBZG1pbjRfbGRhcF9jcmVk ZW50aWFscyI6IHsKKyAgICAibG9naW5fcGFzc3dvcmQiOiAiUEFTU1dPUkQiLAorICAgICJsb2dp bl91c2VybmFtZSI6ICJVU0VSTkFNRSIKKyAgfSwKKyAgImxkYXBfY29uZmlnIjogWworICAgIHsK KyAgICAibGRhcCI6IHsKKyAgICAgICJuYW1lIjogIkxkYXAgc2NlbmFyaW8gbmFtZSIKKyAgICAg ICJ1cmkiOiAibGRhcDovL0lQLUFERFJFU1MvSE9TVE5BTUU6Mzg5IiwKKyAgICAgICJiYXNlX2Ru IjogIkJBU0UtRE4iLAorICAgICAgInNlYXJjaF9iYXNlX2RuIjogIlNFQVJDSC1CQVNFLUROIiwK KyAgICAgICJ1c2VybmFtZV9hdHIiOiAiVUlEIiwKKyAgICAgICJzZWFyY2hfZmlsdGVyIjogIihv YmplY3RjbGFzcz0qKSIsCisgICAgICAidXNlX3N0YXJ0dGxzIjogZmFsc2UsCisgICAgICAiY2Ff Y2VydF9maWxlIjogIiIsCisgICAgICAiY2VydF9maWxlIjogIiIsCisgICAgICAia2V5X2ZpbGUi OiAiIgorICAgIH0sCisgICAgImxkYXBfd2l0aF9zc2wiOiB7CisgICAgICAibmFtZSI6ICJMZGFw IHNjZW5hcmlvIG5hbWUiCisgICAgICAidXJpIjogImxkYXBzOi8vSVAtQUREUkVTUy9IT1NUTkFN RTo2MzYiLAorICAgICAgImJhc2VfZG4iOiAiQkFTRS1ETiIsCisgICAgICAic2VhcmNoX2Jhc2Vf ZG4iOiAiU0VBUkNILUJBU0UtRE4iLAorICAgICAgInVzZXJuYW1lX2F0ciI6ICJVSUQiLAorICAg ICAgInNlYXJjaF9maWx0ZXIiOiAiKG9iamVjdGNsYXNzPSopIiwKKyAgICAgICJ1c2Vfc3RhcnR0 bHMiOiBmYWxzZSwKKyAgICAgICJjYV9jZXJ0X2ZpbGUiOiAiIiwKKyAgICAgICJjZXJ0X2ZpbGUi OiAiIiwKKyAgICAgICJrZXlfZmlsZSI6ICIiCisgICAgfSwKKyAgICAibGRhcF93aXRoX3RscyI6 IHsKKyAgICAgICJuYW1lIjogIkxkYXAgc2NlbmFyaW8gbmFtZSIKKyAgICAgICJ1cmkiOiAibGRh cDovL0lQLUFERFJFU1MvSE9TVE5BTUU6Mzg5IiwKKyAgICAgICJiYXNlX2RuIjogIkJBU0UtRE4i LAorICAgICAgInNlYXJjaF9iYXNlX2RuIjogIlNFQVJDSC1CQVNFLUROIiwKKyAgICAgICJ1c2Vy bmFtZV9hdHIiOiAiVUlEIiwKKyAgICAgICJzZWFyY2hfZmlsdGVyIjogIihvYmplY3RjbGFzcz0q KSIsCisgICAgICAidXNlX3N0YXJ0dGxzIjogdHJ1ZSwKKyAgICAgICJjYV9jZXJ0X2ZpbGUiOiAi IiwKKyAgICAgICJjZXJ0X2ZpbGUiOiAiIiwKKyAgICAgICJrZXlfZmlsZSI6ICIiCisgICAgfQor ICB9XSwKICAgInNlcnZlcl9ncm91cCI6IDEsCiAgICJzZXJ2ZXJfY3JlZGVudGlhbHMiOiBbCiAg ICAgewo= --00000000000010092c05a25f3ebf--