Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1aYAOq-0007pz-Lr for pgadmin-hackers@arkaria.postgresql.org; Tue, 23 Feb 2016 10:41:01 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1aYAOp-0008FH-P6 for pgadmin-hackers@arkaria.postgresql.org; Tue, 23 Feb 2016 10:40:59 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1aYAOm-0008F4-0D for pgadmin-hackers@postgresql.org; Tue, 23 Feb 2016 10:40:56 +0000 Received: from mail-io0-x230.google.com ([2607:f8b0:4001:c06::230]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1aYAOe-0001Jo-5X for pgadmin-hackers@postgresql.org; Tue, 23 Feb 2016 10:40:54 +0000 Received: by mail-io0-x230.google.com with SMTP id 9so210237628iom.1 for ; Tue, 23 Feb 2016 02:40:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgadmin-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=9IHcSiwJz9tUsAjAbKr314I1XVDXKzpBeKXw95CA8SU=; b=kYA4LkV3HTVAAETUOd7rzqevZ+4kG6YekxebrIApqC1bGa8udJ4rp3FcG677qopoR8 kSnlt81rzG2AuGc7agCskKLkKpqbwu1btoCVfAg+bc+kKPJ+LaEz3gCBGqLZOnTW1moA 8LrP/rMpNE9rv0RDJhh6zWyw4Iu90c94VeGReNUPo8KDTK6AdjJOMs/IkRM5+VOQzsmB WXl7LJ1a6dt2lucLTUM5OXy105b2WCjX+HMPCaFkowc2qGKVOo4CyMqRV+hGjnAj7aEk fA8MAjIozRhJ+1N9wDkwurya3UcRABTCJq8Sz4Zch0s0QxpDvULmJhZVy3przNjjsm6E 2Aew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=9IHcSiwJz9tUsAjAbKr314I1XVDXKzpBeKXw95CA8SU=; b=c1wSvmXMS0ETSfaopeU57enEuNye+OSZW0/w4Lu7zd5AEHhT+3lmwCvRfN5/FmleLM 7NnF9FIZI1j/JDFeJQpTpFZhdpLi7hvD/JmS/IKm0IKudP55RwFK56GXrp9o0L6Xr1hJ q7/2OCAk3hCl2FIsBr02KDzHZYHpT9xYSPKilP1S8Pwvdw2OmtXAq2XYHAHApcGIACh8 eGcoMum83vVPebvwQL2CKMKGtIB1/KLeJtoHnUhusc4avOqtFzbpa4P9zcJN0GLPlcXN wLGfm8LK1C8FToXhx0wmjNQzsW3JCnTWdTiMc5z8WTYcT834py5eI4HB1wGLnHOEEuM6 rqlQ== X-Gm-Message-State: AG10YORcnbeNn+DTsTFCGz04485zZwkJVHEJWYfvK+Dc7pvQwid0xOhaXxsUKHdJgDZyn/2+5yxuqlrz7HBVVA== MIME-Version: 1.0 X-Received: by 10.107.43.151 with SMTP id r145mr33589299ior.156.1456224046966; Tue, 23 Feb 2016 02:40:46 -0800 (PST) Received: by 10.64.90.3 with HTTP; Tue, 23 Feb 2016 02:40:46 -0800 (PST) In-Reply-To: References: Date: Tue, 23 Feb 2016 10:40:46 +0000 Message-ID: Subject: Re: patch for cast module From: Dave Page To: Sanket Mehta Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a113a557a08d175052c6d9557 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a113a557a08d175052c6d9557 Content-Type: multipart/alternative; boundary=001a113a557a08d16f052c6d9555 --001a113a557a08d16f052c6d9555 Content-Type: text/plain; charset=UTF-8 Hi I've attached an update to this patch, in which I've done some word-smithing on various comments, and adjusted the SQL templates to improve the formatting. However, it looks like it's bit-rotted, as the dependents/dependencies display is throwing Python errors. Please fix and then I think it's just about ready to commit. Thanks. On Fri, Feb 19, 2016 at 11:03 AM, Sanket Mehta < sanket.mehta@enterprisedb.com> wrote: > Hi Dave, > > PFA the revise patch. > > It includes changes according to your review comments as well as > dependency/dependent part also. > > Let me know in case anything is missing. > > Regards, > Sanket Mehta > Sr Software engineer > Enterprisedb > > On Mon, Feb 15, 2016 at 10:25 PM, Dave Page wrote: > >> And this time with the attachment... >> >> On Mon, Feb 15, 2016 at 4:53 PM, Dave Page wrote: >> >>> That's much better. Just a couple of comments now, partly based on an >>> email I wrote earlier: >>> >>> - There is still inconsistency in comment style. Please see the >>> attachment for an example. Note that there is *always* a space between the >>> comment marker and text. >>> >>> - If I try to edit a cast, I can change the description - but no SQL is >>> shown on the SQL tab, despite the comment being correctly applied when I >>> hit save. The properties pane of the main window is also not updated. >>> >>> Otherwise, it looks fine. >>> >>> Thanks. >>> >>> On Mon, Feb 15, 2016 at 1:28 PM, Sanket Mehta < >>> sanket.mehta@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> PFA the revised patch with all the required comments. >>>> >>>> >>>> >>>> Regards, >>>> Sanket Mehta >>>> Sr Software engineer >>>> Enterprisedb >>>> >>>> On Mon, Feb 15, 2016 at 4:18 PM, Dave Page wrote: >>>> >>>>> >>>>> >>>>> On Mon, Feb 15, 2016 at 8:10 AM, Sanket Mehta < >>>>> sanket.mehta@enterprisedb.com> wrote: >>>>> >>>>>> Hi Dave, >>>>>> >>>>>> Regarding your suggestion of putting some comments in javascript, I >>>>>> think I have already put some comments regarding model data and their >>>>>> controls if any extended. >>>>>> >>>>>> Can you please let me know where exactly you think more comments are >>>>>> required? >>>>>> >>>>> >>>>> Hi >>>>> >>>>> The issue for me is that jQuery code isn't the easiest to read at the >>>>> best of times, with nested/anonymous functions and inline JSON etc. As I >>>>> look through the code for the various nodes in isolation, it's extremely >>>>> difficult to get a sense of what exactly each part of the code is doing. In >>>>> this example, what I see by reading the code is: >>>>> >>>>> - Define the required libraries (require.js stuff) >>>>> - Extend the collection class >>>>> - Extend the node class >>>>> - Define an init function inline >>>>> - Add the menu options >>>>> >>>>> That part is fairly easy to figure out (easier because there are blank >>>>> lines between the logical sections). From there though, it becomes much >>>>> harder; >>>>> >>>>> - There are no blank lines to separate logical code sections at all >>>>> between line 48 and 235 (there is one blank line, but it doesn't separate >>>>> code sections). >>>>> - There are 4 comments that I can see. The first two are identical, >>>>> and appear to have identical code blocks following them for reasons that >>>>> are not even remotely obvious. >>>>> - As a newcomer to this code, I'm wondering if it's purpose is to >>>>> define the backform model. If so, why is it not broken up into sections >>>>> with a comment to tell me what field each block handles, and any other >>>>> useful information I may need to know? If it's not, then what is it for? >>>>> >>>>> So... I'm not going to tell you exactly where to put comments, because >>>>> the point is that without spending a couple of hours understanding this, I >>>>> simply don't know. The point of the comments (and separation of logical >>>>> sections of code with blank lines) is to make it easy for another developer >>>>> (especially one as rusty as me) to read and understand, then fix and >>>>> improve. Be generous with comments, but don't use them unnecessarily (e.g. >>>>> "a = 1 // Set a to one"). >>>>> >>>>> Of course, this is not just directed at you Sanket - it's something >>>>> all of us working on pgAdmin need to keep in mind. >>>>> >>>>> Thanks. >>>>> >>>>> -- >>>>> 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 >>> >> >> >> >> -- >> 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 --001a113a557a08d16f052c6d9555 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

I've attached an update to this = patch, in which I've done some word-smithing on various comments, and a= djusted the SQL templates to improve the formatting.

However, it looks like it's bit-rotted, as the dependents/dependenci= es display is throwing Python errors. Please fix and then I think it's = just about ready to commit.

Thanks.

On Fri, Feb 19, 2016 at 11:= 03 AM, Sanket Mehta <sanket.mehta@enterprisedb.com> wrote:
Hi Dave,

PFA the revise patch.

It includes chan= ges according to your review comments as well as dependency/dependent part = also.

Let me know in case anything is missing.

Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Mon, Feb 15= , 2016 at 10:25 PM, Dave Page <dpage@pgadmin.org> wrote:
=
And this time with the atta= chment...

On Mon, Feb 15, 2016 at 4:53 PM, Dave Page <dpage@pgadmin.org&= gt; wrote:
That&#= 39;s much better. Just a couple of comments now, partly based on an email I= wrote earlier:

- There is still inconsistency in commen= t style. Please see the attachment for an example. Note that there is *alwa= ys* a space between the comment marker and text.

-= If I try to edit a cast, I can change the description - but no SQL is show= n on the SQL tab, despite the comment being correctly applied when I hit sa= ve. The properties pane of the main window is also not updated.

Otherwise, it looks= fine.

Thanks.

On Mon, Feb 15, 2016 at 1:28 PM, Sanket Mehta <= sanket.m= ehta@enterprisedb.com> wrote:
Hi,

PFA the revised patch with all th= e required comments.



Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Mon, Feb 15, 2016 at 4:1= 8 PM, Dave Page <dpage@pgadmin.org> wrote:


On Mon, Feb 15, 2016 at 8:10 AM, Sanket Mehta <sanket.mehta@enterprisedb.com> wrote:
Hi Dave,

Reg= arding your suggestion of putting some comments in javascript, I think I ha= ve already put some comments regarding model data and their controls if any= extended.

Can you please let me know where exactly you think = more comments are required?

Hi=

The issue for me is that jQuery code isn't th= e easiest to read at the best of times, with nested/anonymous functions and= inline JSON etc. As I look through the code for the various nodes in isola= tion, it's extremely difficult to get a sense of what exactly each part= of the code is doing. In this example, what I see by reading the code is:<= /div>

- Define the required libraries (require.js stuff)=
- Extend the collection class
- Extend the node class<= /div>
=C2=A0 - Define an init function inline
=C2=A0 - Add th= e menu options

That part is fairly easy to figure = out (easier because there are blank lines between the logical sections). Fr= om there though, it becomes much harder;

- There a= re no blank lines to separate logical code sections at all between line 48 = and 235 (there is one blank line, but it doesn't separate code sections= ).=C2=A0
- There are 4 comments that I can see. The first two are= identical, and appear to have identical code blocks following them for rea= sons that are not even remotely obvious.=C2=A0
- As a newcomer to= this code, I'm wondering if it's purpose is to define the backform= model. If so, why is it not broken up into sections with a comment to tell= me what field each block handles, and any other useful information I may n= eed to know? If it's not, then what is it for?

So... I'm not going to tell you exactly where to put comments, because= the point is that without spending a couple of hours understanding this, I= simply don't know. The point of the comments (and separation of logica= l sections of code with blank lines) is to make it easy for another develop= er (especially one as rusty as me) to read and understand, then fix and imp= rove. Be generous with comments, but don't use them unnecessarily (e.g.= "a =3D 1 // Set a to one").

Of course, = this is not just directed at you Sanket - it's something all of us work= ing on pgAdmin need to keep in mind.

Thanks.
=

--
Dave Page
Blog: http://pgsnake.blogspot.comTwitter: @pgsnake

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




--
Dave Pa= ge
Blog: http:= //pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterpris= edb.com
The Enterprise PostgreSQL Company



--
Dave Pa= ge
Blog: http:= //pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterpris= edb.com
The Enterprise PostgreSQL Company




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

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Compan= y
--001a113a557a08d16f052c6d9555-- --001a113a557a08d175052c6d9557 Content-Type: application/octet-stream; name="castv9-dave.patch" Content-Disposition: attachment; filename="castv9-dave.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ikza75q21 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy9fX2luaXRfXy5weSBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9jYXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lMzk3YTZlCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L2Nhc3RzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNjQzIEBACisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisj CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJJbXBsZW1l bnRzIENhc3QgTm9kZSIiIgorCitpbXBvcnQganNvbgorZnJvbSBmbGFzayBp bXBvcnQgcmVuZGVyX3RlbXBsYXRlLCBtYWtlX3Jlc3BvbnNlLCBjdXJyZW50 X2FwcCwgcmVxdWVzdCwganNvbmlmeQorZnJvbSBmbGFzay5leHQuYmFiZWwg aW1wb3J0IGdldHRleHQKK2Zyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9y dCBtYWtlX2pzb25fcmVzcG9uc2UsIFwKKyAgICBtYWtlX3Jlc3BvbnNlIGFz IGFqYXhfcmVzcG9uc2UsIGludGVybmFsX3NlcnZlcl9lcnJvcgorZnJvbSBw Z2FkbWluLmJyb3dzZXIudXRpbHMgaW1wb3J0IE5vZGVWaWV3Citmcm9tIHBn YWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uIGltcG9ydCBDb2xsZWN0aW9uTm9k ZU1vZHVsZQoraW1wb3J0IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBz LnNlcnZlcnMuZGF0YWJhc2VzIGFzIGRhdGFiYXNlcworZnJvbSBwZ2FkbWlu LnV0aWxzLmFqYXggaW1wb3J0IHByZWNvbmRpdGlvbl9yZXF1aXJlZAorZnJv bSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQgZ2V0X2RyaXZlcgorZnJv bSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSCitmcm9tIGZ1bmN0 b29scyBpbXBvcnQgd3JhcHMKKworY2xhc3MgQ2FzdE1vZHVsZShDb2xsZWN0 aW9uTm9kZU1vZHVsZSk6CisgICAgIiIiCisgICAgIGNsYXNzIENhc3RNb2R1 bGUoQ29sbGVjdGlvbk5vZGVNb2R1bGUpCisKKyAgICAgICAgQSBtb2R1bGUg Y2xhc3MgZm9yIENhc3Qgbm9kZSBkZXJpdmVkIGZyb20gQ29sbGVjdGlvbk5v ZGVNb2R1bGUuCisKKyAgICBNZXRob2RzOgorICAgIC0tLS0tLS0KKyAgICAq IF9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgIC0gTWV0aG9kIGlz IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgQ2FzdE1vZHVsZSBhbmQgaXQncyBi YXNlIG1vZHVsZS4KKworICAgICogZ2V0X25vZGVzKGdpZCwgc2lkLCBkaWQp CisgICAgICAtIE1ldGhvZCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBicm93 c2VyIGNvbGxlY3Rpb24gbm9kZS4KKworICAgICogbm9kZV9pbm9kZSgpCisg ICAgICAtIE1ldGhvZCBpcyBvdmVycmlkZGVuIGZyb20gaXRzIGJhc2UgY2xh c3MgdG8gbWFrZSB0aGUgbm9kZSBhcyBsZWFmIG5vZGUuCisKKyAgICAqIHNj cmlwdF9sb2FkKCkKKyAgICAgIC0gTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBm b3IgY2FzdCwgd2hlbiBhbnkgb2YgdGhlIGRhdGFiYXNlIG5vZGUgaXMKKyAg ICAgICAgaW5pdGlhbGl6ZWQuCisgICAgIiIiCisKKyAgICBOT0RFX1RZUEUg PSAnY2FzdCcKKyAgICBDT0xMRUNUSU9OX0xBQkVMID0gJ0Nhc3RzJworCisg ICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg ICAgIHN1cGVyKENhc3RNb2R1bGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAq Kmt3YXJncykKKworICAgIGRlZiBnZXRfbm9kZXMoc2VsZiwgZ2lkLCBzaWQs IGRpZCk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSB0aGUgY29s bGVjdGlvbiBub2RlCisgICAgICAgIDpwYXJhbSBnaWQ6IGdyb3VwIGlkCisg ICAgICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAorICAgICAgICA6cGFyYW0g ZGlkOiBkYXRhYmFzZSBpZAorICAgICAgICAiIiIKKyAgICAgICAgeWllbGQg c2VsZi5nZW5lcmF0ZV9icm93c2VyX2NvbGxlY3Rpb25fbm9kZShkaWQpCisK KyAgICBAcHJvcGVydHkKKyAgICBkZWYgbm9kZV9pbm9kZShzZWxmKToKKyAg ICAgICAgIiIiCisgICAgICAgIE92ZXJyaWRlIHRoZSBwcm9wZXJ0eSB0byBt YWtlIHRoZSBub2RlIGFzIGxlYWYgbm9kZQorICAgICAgICAiIiIKKyAgICAg ICAgcmV0dXJuIEZhbHNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2Ny aXB0X2xvYWQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIHRo ZSBtb2R1bGUgc2NyaXB0IGZvciBjYXN0LCB3aGVuIGFueSBvZiB0aGUgZGF0 YWJhc2Ugbm9kZSBpcworICAgICAgICBpbml0aWFsaXplZC4KKyAgICAgICAg IiIiCisgICAgICAgIHJldHVybiBkYXRhYmFzZXMuRGF0YWJhc2VNb2R1bGUu Tk9ERV9UWVBFCisKKworYmx1ZXByaW50ID0gQ2FzdE1vZHVsZShfX25hbWVf XykKKworCitjbGFzcyBDYXN0VmlldyhOb2RlVmlldyk6CisgICAgIiIiCisg ICAgY2xhc3MgQ2FzdFZpZXcoTm9kZVZpZXcpCisKKyAgICAgICAgQSB2aWV3 IGNsYXNzIGZvciBjYXN0IG5vZGUgZGVyaXZlZCBmcm9tIE5vZGVWaWV3LiBU aGlzIGNsYXNzIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBhbGwgdGhl IHN0dWZmIHJlbGF0ZWQgdG8gdmlldyBsaWtlIGNyZWF0ZS91cGRhdGUvZGVs ZXRlIGNhc3QsCisgICAgICAgIHNob3dpbmcgcHJvcGVydGllcyBvZiBjYXN0 IG5vZGUsIHNob3dpbmcgc3FsIGluIHNxbCBwYW5lLgorCisgICAgTWV0aG9k czoKKyAgICAtLS0tLS0tCisgICAgKiBfX2luaXRfXygqKmt3YXJncykKKyAg ICAgIC0gTWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgQ2FzdFZp ZXcgYW5kIGl0J3MgYmFzZSB2aWV3LgorCisgICAgKiBtb2R1bGVfanMoKQor ICAgICAgLSBUaGlzIHByb3BlcnR5IGRlZmluZXMgKGlmIGphdmFzY3JpcHQp IGV4aXN0cyBmb3IgdGhpcyBub2RlLgorICAgICAgICBPdmVycmlkZSB0aGlz IHByb3BlcnR5IGZvciB5b3VyIG93biBsb2dpYworCisgICAgKiBjaGVja19w cmVjb25kaXRpb24oKQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmVo YXZlIGFzIGEgZGVjb3JhdG9yIHdoaWNoIHdpbGwgY2hlY2tzCisgICAgICAg IGRhdGFiYXNlIGNvbm5lY3Rpb24gYmVmb3JlIHJ1bm5pbmcgdmlldywgaXQg d2lsbCBhbHNvIGF0dGFjaGVzCisgICAgICAgIG1hbmFnZXIsY29ubiAmIHRl bXBsYXRlX3BhdGggcHJvcGVydGllcyB0byBzZWxmCisKKyAgICAqIGxpc3Qo KQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbGlzdCBhbGwg dGhlIGNhc3Qgbm9kZXMgd2l0aGluIHRoYXQgY29sbGVjdGlvbi4KKworICAg ICogbm9kZXMoKQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgdXNlZCB0 byBjcmVhdGUgYWxsIHRoZSBjaGlsZCBub2RlIHdpdGhpbiB0aGF0IGNvbGxl Y3Rpb24uCisgICAgICAgIEhlcmUgaXQgd2lsbCBjcmVhdGUgYWxsIHRoZSBj YXN0IG5vZGVzLgorCisgICAgKiBwcm9wZXJ0aWVzKGdpZCwgc2lkLCBkaWQs IHJnX2lkKQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyB0aGUg cHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgY2FzdCBub2RlCisKKyAgICAq IGNyZWF0ZShnaWQsIHNpZCwgZGlkLCByZ19pZCkKKyAgICAgIC0gVGhpcyBm dW5jdGlvbiB3aWxsIGNyZWF0ZSB0aGUgbmV3IGNhc3Qgb2JqZWN0CisKKyAg ICAqIHVwZGF0ZShnaWQsIHNpZCwgZGlkLCByZ19pZCkKKyAgICAgIC0gVGhp cyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSB0aGUgZGF0YSBmb3IgdGhlIHNlbGVj dGVkIGNhc3Qgbm9kZQorCisgICAgKiBkZWxldGUoc2VsZiwgZ2lkLCBzaWQs IHJnX2lkKToKKyAgICAgIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGRyb3AgdGhl IGNhc3Qgb2JqZWN0CisKKyAgICAqIG1zcWwoZ2lkLCBzaWQsIGRpZCwgcmdf aWQpCisgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4g bW9kaWZpZWQgU1FMIGZvciB0aGUgc2VsZWN0ZWQgY2FzdCBub2RlCisKKyAg ICAqIGdldF9zcWwoZGF0YSwgcmdfaWQpCisgICAgICAtIFRoaXMgZnVuY3Rp b24gd2lsbCBnZW5lcmF0ZSBzcWwgZnJvbSBtb2RlbCBkYXRhCisKKyAgICAq IHNxbChnaWQsIHNpZCwgZGlkLCByZ19pZCk6CisgICAgICAtIFRoaXMgZnVu Y3Rpb24gd2lsbCBnZW5lcmF0ZSBzcWwgdG8gc2hvdyBpbiBzcWwgcGFuZSBm b3IgdGhlIHNlbGVjdGVkIGNhc3Qgbm9kZS4KKworICAgICogZ2V0X3R5cGUo KToKKyAgICAgIC0gVGhpcyBmdW5jdGlvbiB3aWxsIGZldGNoIGFsbCB0aGUg dHlwZXMgZm9yIHNvdXJjZSBhbmQgdGFyZ2V0IHR5cGVzIHNlbGVjdCBjb250 cm9sLgorCisgICAgKiBnZXRfZnVuY3Rpb25zKCk6CisgICAgICAtIFRoaXMg ZnVuY3Rpb24gd2lsbCBmZXRjaCBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBsaXN0 IGRlcGVuZGluZyBvbiBzZWxlY3RlZCBzb3VyY2UKKyAgICAgICAgYW5kIHRh cmdldCB0eXBlcyB3aGlsZSBjcmVhdGluZyBhIG5ldyBjYXN0IG5vZGUuCisg ICAgIiIiCisKKyAgICBub2RlX3R5cGUgPSBibHVlcHJpbnQubm9kZV90eXBl CisKKyAgICBwYXJlbnRfaWRzID0gWworICAgICAgICB7J3R5cGUnOiAnaW50 JywgJ2lkJzogJ2dpZCd9LAorICAgICAgICB7J3R5cGUnOiAnaW50JywgJ2lk JzogJ3NpZCd9LAorICAgICAgICB7J3R5cGUnOiAnaW50JywgJ2lkJzogJ2Rp ZCd9CisgICAgXQorICAgIGlkcyA9IFsKKyAgICAgICAgeyd0eXBlJzogJ2lu dCcsICdpZCc6ICdjaWQnfQorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBk aWN0KHsKKyAgICAgICAgJ29iaic6IFsKKyAgICAgICAgICAgIHsnZ2V0Jzog J3Byb3BlcnRpZXMnLCAnZGVsZXRlJzogJ2RlbGV0ZScsICdwdXQnOiAndXBk YXRlJ30sCisgICAgICAgICAgICB7J2dldCc6ICdsaXN0JywgJ3Bvc3QnOiAn Y3JlYXRlJ30KKyAgICAgICAgXSwKKyAgICAgICAgJ2NoaWxkcmVuJzogW3sK KyAgICAgICAgICAgICdnZXQnOiAnY2hpbGRyZW4nCisgICAgICAgIH1dLAor ICAgICAgICAnZGVsZXRlJzogW3snZGVsZXRlJzogJ2RlbGV0ZSd9XSwKKyAg ICAgICAgJ25vZGVzJzogW3snZ2V0JzogJ25vZGUnfSwgeydnZXQnOiAnbm9k ZXMnfV0sCisgICAgICAgICdzcWwnOiBbeydnZXQnOiAnc3FsJ31dLAorICAg ICAgICAnbXNxbCc6IFt7J2dldCc6ICdtc3FsJ30sIHsnZ2V0JzogJ21zcWwn fV0sCisgICAgICAgICdzdGF0cyc6IFt7J2dldCc6ICdzdGF0aXN0aWNzJ31d LAorICAgICAgICAnZGVwZW5kZW5jeSc6IFt7J2dldCc6ICdkZXBlbmRlbmNp ZXMnfV0sCisgICAgICAgICdkZXBlbmRlbnQnOiBbeydnZXQnOiAnZGVwZW5k ZW50cyd9XSwKKyAgICAgICAgJ21vZHVsZS5qcyc6IFt7fSwge30sIHsnZ2V0 JzogJ21vZHVsZV9qcyd9XSwKKyAgICAgICAgJ2dldF90eXBlJzogW3snZ2V0 JzogJ2dldF9zcmNfYW5kX3RyZ190eXBlJ30sIHsnZ2V0JzogJ2dldF9zcmNf YW5kX3RyZ190eXBlJ31dLAorICAgICAgICAnZ2V0X2Z1bmN0aW9ucyc6IFt7 J3Bvc3QnOiAnZ2V0X2Z1bmN0aW9ucyd9LCB7J3Bvc3QnOiAnZ2V0X2Z1bmN0 aW9ucyd9XQorICAgIH0pCisKKyAgICBkZWYgX2luaXRfKHNlbGYsICoqa3dh cmdzKToKKyAgICAgICAgc2VsZi5jb25uID0gTm9uZQorICAgICAgICBzZWxm LnRlbXBsYXRlX3BhdGggPSBOb25lCisgICAgICAgIHNlbGYubWFuYWdlciA9 IE5vbmUKKyAgICAgICAgc3VwZXIoQ2FzdFZpZXcsIHNlbGYpLl9faW5pdF9f KCoqa3dhcmdzKQorCisgICAgZGVmIG1vZHVsZV9qcyhzZWxmKToKKyAgICAg ICAgIiIiCisgICAgICAgIFRoaXMgcHJvcGVydHkgZGVmaW5lcyB3aGV0aGVy IGphdmFzY3JpcHQgZXhpc3RzIGZvciB0aGlzIG5vZGUuCisgICAgICAgICIi IgorICAgICAgICByZXR1cm4gbWFrZV9yZXNwb25zZSgKKyAgICAgICAgICAg IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiY2FzdC9qcy9j YXN0cy5qcyIsCisgICAgICAgICAgICAgICAgXz1nZXR0ZXh0CisgICAgICAg ICAgICApLAorICAgICAgICAgICAgMjAwLCB7J0NvbnRlbnQtVHlwZSc6ICdh cHBsaWNhdGlvbi94LWphdmFzY3JpcHQnfQorICAgICAgICApCisKKyAgICBk ZWYgY2hlY2tfcHJlY29uZGl0aW9uKGYpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlaGF2ZSBhcyBhIGRlY29yYXRvciB3 aGljaCB3aWxsIGNoZWNrIHRoZQorICAgICAgICBkYXRhYmFzZSBjb25uZWN0 aW9uIGJlZm9yZSBydW5uaW5nIHZpZXcuIEl0IHdpbGwgYWxzbyBhdHRhY2gK KyAgICAgICAgbWFuYWdlciwgY29ubiAmIHRlbXBsYXRlX3BhdGggcHJvcGVy dGllcyB0byBzZWxmCisgICAgICAgICIiIgorCisgICAgICAgIEB3cmFwcyhm KQorICAgICAgICBkZWYgd3JhcCgqYXJncywgKiprd2FyZ3MpOgorICAgICAg ICAgICAgIyBIZXJlIGFyZ3NbMF0gd2lsbCBob2xkIHNlbGYgJiBrd2FyZ3Mg d2lsbCBob2xkIGdpZCxzaWQsZGlkCisgICAgICAgICAgICBzZWxmID0gYXJn c1swXQorICAgICAgICAgICAgc2VsZi5tYW5hZ2VyID0gZ2V0X2RyaXZlcihQ R19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKGt3YXJnc1sn c2lkJ10pCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBzZWxmLm1hbmFnZXIu Y29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKKyAgICAgICAgICAgICMg SWYgREIgbm90IGNvbm5lY3RlZCB0aGVuIHJldHVybiBlcnJvciB0byBicm93 c2VyCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb25uLmNvbm5lY3RlZCgp OgorICAgICAgICAgICAgICAgIHJldHVybiBwcmVjb25kaXRpb25fcmVxdWly ZWQoCisgICAgICAgICAgICAgICAgICAgIGdldHRleHQoCisgICAgICAgICAg ICAgICAgICAgICAgICAiQ29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGhhcyBi ZWVuIGxvc3QhIgorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgdmVyID0gc2VsZi5tYW5hZ2VyLnZlcnNp b24KKyAgICAgICAgICAgICMgd2Ugd2lsbCBzZXQgdGVtcGxhdGUgcGF0aCBm b3Igc3FsIHNjcmlwdHMKKyAgICAgICAgICAgIGlmIHZlciA+PSA5MDEwMDoK KyAgICAgICAgICAgICAgICBzZWxmLnRlbXBsYXRlX3BhdGggPSAnY2FzdC9z cWwvOS4xX3BsdXMnCisKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAq Kmt3YXJncykKKworICAgICAgICByZXR1cm4gd3JhcAorCisgICAgQGNoZWNr X3ByZWNvbmRpdGlvbgorICAgIGRlZiBsaXN0KHNlbGYsIGdpZCwgc2lkLCBk aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1 c2VkIHRvIGxpc3QgYWxsIHRoZSBjYXN0IG5vZGVzIHdpdGhpbiB0aGUgY29s bGVjdGlvbi4KKyAgICAgICAgOnBhcmFtIGdpZDogZ3JvdXAgaWQKKyAgICAg ICAgOnBhcmFtIHNpZDogc2VydmVyIGlkCisgICAgICAgIDpwYXJhbSBkaWQ6 IGRhdGFiYXNlIGlkCisgICAgICAgIDpyZXR1cm46CisgICAgICAgICIiIgor ICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAi LyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYubWFuYWdlci5k Yl9pbmZvW2RpZF1bJ2RhdGxhc3RzeXNvaWQnXQorICAgICAgICApCisgICAg ICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwp CisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAg ICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAgICByb3db J2Nhc3Rjb250ZXh0J10gPSBUcnVlIGlmIHJvd1snY2FzdGNvbnRleHQnXSA9 PSAnSU1QTElDSVQnIGVsc2UgRmFsc2UKKworICAgICAgICByZXR1cm4gYWph eF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJlc3BvbnNlPXJlc1sncm93cydd LAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBA Y2hlY2tfcHJlY29uZGl0aW9uCisgICAgZGVmIG5vZGVzKHNlbGYsIGdpZCwg c2lkLCBkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlv biB3aWxsIHVzZWQgdG8gY3JlYXRlIGFsbCB0aGUgY2hpbGQgbm9kZXMgd2l0 aGluIHRoZSBjb2xsZWN0aW9uLgorICAgICAgICBIZXJlIGl0IHdpbGwgY3Jl YXRlIGFsbCB0aGUgY2FzdCBub2Rlcy4KKyAgICAgICAgOnBhcmFtIGdpZDog Z3JvdXAgaWQKKyAgICAgICAgOnBhcmFtIHNpZDogc2VydmVyIGlkCisgICAg ICAgIDpwYXJhbSBkaWQ6IGRhdGFiYXNlIGlkCisgICAgICAgIDpyZXR1cm46 CisgICAgICAgICIiIgorICAgICAgICByZXMgPSBbXQorICAgICAgICBzcWwg PSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihbc2Vs Zi50ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAg ICAgICBkYXRsYXN0c3lzb2lkPXNlbGYubWFuYWdlci5kYl9pbmZvW2RpZF1b J2RhdGxhc3RzeXNvaWQnXQorICAgICAgICApCisgICAgICAgIHN0YXR1cywg cnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoc3FsKQorICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciBy b3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAgICAgcm93WydjYXN0Y29u dGV4dCddID0gVHJ1ZSBpZiByb3dbJ2Nhc3Rjb250ZXh0J10gPT0gJ0lNUExJ Q0lUJyBlbHNlIEZhbHNlCisgICAgICAgICAgICByZXMuYXBwZW5kKAorICAg ICAgICAgICAgICAgIHNlbGYuYmx1ZXByaW50LmdlbmVyYXRlX2Jyb3dzZXJf bm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcm93WydvaWQnXSwKKyAgICAg ICAgICAgICAgICAgICAgZGlkLAorICAgICAgICAgICAgICAgICAgICByb3db J25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1jYXN0 IgorICAgICAgICAgICAgICAgICkpCisKKyAgICAgICAgcmV0dXJuIG1ha2Vf anNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGRhdGE9cmVzLAorICAgICAg ICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBAY2hlY2tfcHJl Y29uZGl0aW9uCisgICAgZGVmIHByb3BlcnRpZXMoc2VsZiwgZ2lkLCBzaWQs IGRpZCwgY2lkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rp b24gd2lsbCBzaG93IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBj YXN0IG5vZGUKKyAgICAgICAgOnBhcmFtIGdpZDogZ3JvdXAgaWQKKyAgICAg ICAgOnBhcmFtIHNpZDogc2VydmVyIGlkCisgICAgICAgIDpwYXJhbSBkaWQ6 IGRhdGFiYXNlIGlkCisgICAgICAgIDpwYXJhbSBjaWQ6IGNhc3QgaWQKKyAg ICAgICAgOnJldHVybjoKKyAgICAgICAgIiIiCisgICAgICAgIHNxbCA9IHJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRl bXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAg IGNpZD1jaWQsCisgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYubWFu YWdlci5kYl9pbmZvW2RpZF1bJ2RhdGxhc3RzeXNvaWQnXQorICAgICAgICAp CisgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGlj dChzcWwpCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor ICAgICAgICByZXN1bHQgPSByZXNbJ3Jvd3MnXVswXQorCisgICAgICAgIHJl dHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICAgICAgcmVzcG9uc2U9cmVz Wydyb3dzJ11bMF0sCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAg ICkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgY3JlYXRl KHNlbGYsIGdpZCwgc2lkLCBkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZXMgbmV3IHRoZSBjYXN0IG9iamVj dAorICAgICAgICA6cGFyYW0gZGlkOiBkYXRhYmFzZSBpZAorICAgICAgICA6 cGFyYW0gc2lkOiBzZXJ2ZXIgaWQKKyAgICAgICAgOnBhcmFtIGdpZDogZ3Jv dXAgaWQKKyAgICAgICAgOnJldHVybjoKKyAgICAgICAgIiIiCisKKyAgICAg ICAgcmVxdWlyZWRfYXJncyA9IFsKKyAgICAgICAgICAgICdzcmN0eXAnLAor ICAgICAgICAgICAgJ3RyZ3R5cCcKKyAgICAgICAgXQorCisgICAgICAgIGRh dGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3JtIGVsc2UganNvbi5s b2FkcyhyZXF1ZXN0LmRhdGEuZGVjb2RlKCkpCisgICAgICAgIGZvciBhcmcg aW4gcmVxdWlyZWRfYXJnczoKKyAgICAgICAgICAgIGlmIGFyZyBub3QgaW4g ZGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3Bv bnNlKAorICAgICAgICAgICAgICAgICAgICBzdGF0dXM9NDEwLAorICAgICAg ICAgICAgICAgICAgICBzdWNjZXNzPTAsCisgICAgICAgICAgICAgICAgICAg IGVycm9ybXNnPWdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAi Q291bGRuJ3QgZmluZCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyICglcykuIiAl IGFyZworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5z cWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YT1kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bm49c2VsZi5jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4 ZWN1dGVfc2NhbGFyKHNxbCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgICMgd2UgbmVlZCBvaWQg dG8gdG8gYWRkIG9iamVjdCBpbiB0cmVlIGF0IGJyb3dzZXIsIGJlbG93IHNx bCB3aWxsIGdpdmVzIHRoZSBzYW1lCisgICAgICAgICAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ3By b3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNyY3R5cD1kYXRhWydzcmN0eXAnXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cmd0eXA9ZGF0YVsndHJndHlwJ10sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29p ZD1zZWxmLm1hbmFnZXIuZGJfaW5mb1tkaWRdWydkYXRsYXN0c3lzb2lkJ10K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAg ICAgICBzdGF0dXMsIGNpZCA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihz cWwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9Y2lk KQorCisgICAgICAgICAgICByZXR1cm4ganNvbmlmeSgKKyAgICAgICAgICAg ICAgICBub2RlPXNlbGYuYmx1ZXByaW50LmdlbmVyYXRlX2Jyb3dzZXJfbm9k ZSgKKyAgICAgICAgICAgICAgICAgICAgY2lkLAorICAgICAgICAgICAgICAg ICAgICBkaWQsCisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ25hbWUnXSwK KyAgICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1jYXN0IgorICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCisKKyAgICBAY2hlY2tfcHJl Y29uZGl0aW9uCisgICAgZGVmIHVwZGF0ZShzZWxmLCBnaWQsIHNpZCwgZGlk LCBjaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3 aWxsIHVwZGF0ZSBjYXN0IG9iamVjdAorICAgICAgICA6cGFyYW0gY2lkOiBj YXN0IGlkCisgICAgICAgIDpwYXJhbSBkaWQ6IGRhdGFiYXNlIGlkCisgICAg ICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAorICAgICAgICA6cGFyYW0gZ2lk OiBncm91cCBpZAorICAgICAgICA6cmV0dXJuOgorICAgICAgICAiIiIKKyAg ICAgICAgZGF0YSA9IHJlcXVlc3QuZm9ybSBpZiByZXF1ZXN0LmZvcm0gZWxz ZSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKyAgICAgICAg c3FsID0gc2VsZi5nZXRfc3FsKGdpZCwgc2lkLCBkaWQsIGRhdGEsIGNpZCkK KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc3FsIGFuZCBzcWwuc3Ry aXAoJ1xuJykgYW5kIHNxbC5zdHJpcCgnICcpOgorICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKHNxbCkK KyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVz cG9uc2UoCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9MSwKKyAgICAg ICAgICAgICAgICAgICAgaW5mbz0iQ2FzdCB1cGRhdGVkIiwKKyAgICAgICAg ICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAgICAgICAgICAgICAgICAn aWQnOiBjaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2lkJzogc2lk LAorICAgICAgICAgICAgICAgICAgICAgICAgJ2dpZCc6IGdpZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICdkaWQnOiBkaWQKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgK KyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAg ICAgICAgICBpbmZvPSJOb3RoaW5nIHRvIHVwZGF0ZSIsCisgICAgICAgICAg ICAgICAgICAgIGRhdGE9eworICAgICAgICAgICAgICAgICAgICAgICAgJ2lk JzogY2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NpZCc6IHNpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICdnaWQnOiBnaWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAnZGlkJzogZGlkCisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCisKKyAgICBAY2hlY2tfcHJl Y29uZGl0aW9uCisgICAgZGVmIGRlbGV0ZShzZWxmLCBnaWQsIHNpZCwgZGlk LCBjaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3 aWxsIGRyb3AgdGhlIGNhc3Qgb2JqZWN0CisgICAgICAgIDpwYXJhbSBjaWQ6 IGNhc3QgaWQKKyAgICAgICAgOnBhcmFtIGRpZDogZGF0YWJhc2UgaWQKKyAg ICAgICAgOnBhcmFtIHNpZDogc2VydmVyIGlkCisgICAgICAgIDpwYXJhbSBn aWQ6IGdyb3VwIGlkCisgICAgICAgIDpyZXR1cm46CisgICAgICAgICIiIgor ICAgICAgICAjIEJlbG93IHdpbGwgZGVjaWRlIGlmIGl0J3Mgc2ltcGxlIGRy b3Agb3IgZHJvcCB3aXRoIGNhc2NhZGUgY2FsbAorICAgICAgICBpZiBzZWxm LmNtZCA9PSAnZGVsZXRlJzoKKyAgICAgICAgICAgICMgVGhpcyBpcyBhIGNh c2NhZGUgb3BlcmF0aW9uCisgICAgICAgICAgICBjYXNjYWRlID0gVHJ1ZQor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FzY2FkZSA9IEZhbHNlCisK KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBHZXQgbmFtZSBmb3IgY2Fz dCBmcm9tIGNpZAorICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRl KCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdkZWxldGUuc3FsJ10p LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZD1jaWQp CisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3Qoc3FsKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9y bXNnPXJlcykKKworICAgICAgICAgICAgIyBkcm9wIGNhc3QKKyAgICAgICAg ICAgIHJlc3VsdCA9IHJlc1sncm93cyddWzBdCisgICAgICAgICAgICBzcWwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzdHNvdXJjZT1yZXN1bHRbJ2Nhc3Rzb3VyY2UnXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXN0dGFyZ2V0PXJl c3VsdFsnY2FzdHRhcmdldCddLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2NhZGU9Y2FzY2FkZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0g c2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKHNxbCkKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICAgICAgc3Vj Y2Vzcz0xLAorICAgICAgICAgICAgICAgIGluZm89Z2V0dGV4dCgiQ2FzdCBk cm9wcGVkIiksCisgICAgICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAg ICAgICAgICAgICdpZCc6IGNpZCwKKyAgICAgICAgICAgICAgICAgICAgJ3Np ZCc6IHNpZCwKKyAgICAgICAgICAgICAgICAgICAgJ2dpZCc6IGdpZCwKKyAg ICAgICAgICAgICAgICAgICAgJ2RpZCc6IGRpZAorICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXN0cihlKSkKKworICAgIEBjaGVja19wcmVjb25kaXRp b24KKyAgICBkZWYgbXNxbChzZWxmLCBnaWQsIHNpZCwgZGlkLCBjaWQ9Tm9u ZSk6CisgICAgICAgICIiIgorICAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1 cm5zIG1vZGlmaWVkIFNRTAorICAgICAgICAgOnBhcmFtIGNpZDogY2FzdCBp ZAorICAgICAgICAgOnBhcmFtIGRpZDogZGF0YWJhc2UgaWQKKyAgICAgICAg IDpwYXJhbSBzaWQ6IHNlcnZlciBpZAorICAgICAgICAgOnBhcmFtIGdpZDog Z3JvdXAgaWQKKyAgICAgICAgIDpyZXR1cm46CisgICAgICAgICIiIgorICAg ICAgICBkYXRhID0gcmVxdWVzdC5hcmdzCisgICAgICAgIHNxbCA9IHNlbGYu Z2V0X3NxbChnaWQsIHNpZCwgZGlkLCBkYXRhLCBjaWQpCisgICAgICAgIGlm IGlzaW5zdGFuY2Uoc3FsLCBzdHIpIGFuZCBzcWwgYW5kIHNxbC5zdHJpcCgn XG4nKSBhbmQgc3FsLnN0cmlwKCcgJyk6CisgICAgICAgICAgICByZXR1cm4g bWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgIGRhdGE9c3Fs LAorICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICkK KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoCisgICAgICAgICAgICAgICAgZGF0YT0iLS1tb2RpZmllZCBT UUwiLAorICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAg ICkKKworICAgIGRlZiBnZXRfc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIGRh dGEsIGNpZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVu Y3Rpb24gd2lsbCByZXR1cm4gc3FsIGZvciBtb2RlbCBkYXRhCisgICAgICAg IDpwYXJhbSBnaWQ6IGdyb3VwIGlkCisgICAgICAgIDpwYXJhbSBzaWQ6IHNl cnZlciBpZAorICAgICAgICA6cGFyYW0gZGlkOiBkYXRhYmFzZSBpZAorICAg ICAgICA6cGFyYW0gY2lkOiBjYXN0IGlkCisgICAgICAgIDpwYXJhbSBkYXRh OiBtb2RlbCBkYXRhCisgICAgICAgIDpyZXR1cm46CisgICAgICAgICIiIgor ICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBjaWQgaXMgbm90IE5vbmU6 CisgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkPWNp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 bGFzdHN5c29pZD1zZWxmLm1hbmFnZXIuZGJfaW5mb1tkaWRdWydkYXRsYXN0 c3lzb2lkJ10pCisgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxm LmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAg ICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jvd3MnXVswXQorICAgICAgICAgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAg ICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ3VwZGF0ZS5zcWwn XSksCisgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgb19kYXRhPW9s ZF9kYXRhCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICBpZiAnc3JjdHlwJyBpbiBkYXRhIGFuZCAndHJn dHlwJyBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2Ny ZWF0ZS5zcWwnXSksIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3FsID0g Ii0tIGluY29tcGxldGUgZGVmaW5pdGlvbiIKKyAgICAgICAgICAgIHJldHVy biBzdHIoc3FsKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK KyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9c3RyKGUpKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAg IGRlZiBnZXRfZnVuY3Rpb25zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIGNpZD1O b25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2ls bCByZXR1cm4gZnVuY3Rpb25zIGxpc3QgYXNzb2NpYXRlZCB3aXRoIGEgY2Fz dAorICAgICAgICA6cGFyYW0gZ2lkOiBncm91cCBpZAorICAgICAgICA6cGFy YW0gc2lkOiBzZXJ2ZXIgaWQKKyAgICAgICAgOnBhcmFtIGRpZDogZGF0YWJh c2UgaWQKKyAgICAgICAgOnBhcmFtIGNpZDogY2FzdCBpZAorICAgICAgICA6 cmV0dXJuOgorICAgICAgICAiIiIKKyAgICAgICAgcmVzID0gW10KKyAgICAg ICAgZGF0YSA9IHJlcXVlc3QuZm9ybSBpZiByZXF1ZXN0LmZvcm0gZWxzZSBq c29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKyAgICAgICAgc3Fs ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsICdmdW5jdGlvbnMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3JjdHlwPWRhdGFbJ3NyY3R5cCddLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHJndHlwPWRhdGFbJ3RyZ3R5cCddKQorICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNx bCkKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorICAg ICAgICByZXMuYXBwZW5kKHsnbGFiZWwnOiAnJywKKyAgICAgICAgICAgICAg ICAgICAgJ3ZhbHVlJzogJyd9KQorCisgICAgICAgIGZvciByb3cgaW4gcnNl dFsncm93cyddOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh7J2xhYmVsJzog cm93Wydwcm9uYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAndmFs dWUnOiByb3dbJ3Byb25hbWUnXX0pCisgICAgICAgIHJldHVybiBtYWtlX2pz b25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXJlcywKKyAgICAgICAg ICAgIHN0YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgQGNoZWNrX3ByZWNv bmRpdGlvbgorICAgIGRlZiBnZXRfc3JjX2FuZF90cmdfdHlwZShzZWxmLCBn aWQsIHNpZCwgZGlkLCBjaWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAg ICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHR5cGUgbGlzdAorICAgICAg ICA6cGFyYW0gZ2lkOiBncm91cCBpZAorICAgICAgICA6cGFyYW0gc2lkOiBz ZXJ2ZXIgaWQKKyAgICAgICAgOnBhcmFtIGRpZDogZGF0YWJhc2UgaWQKKyAg ICAgICAgOnBhcmFtIGNpZDogY2FzdCBpZAorICAgICAgICA6cmV0dXJuOgor ICAgICAgICAiIiIKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgc3FsID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2dldHNyY2FuZHRyZ3R0eXBlLnNxbCddKSwKKyAg ICAgICAgICAgIGNpZD1jaWQKKyAgICAgICAgKQorICAgICAgICBzdGF0dXMs IHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIHJlcyA9 IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KKyAgICAgICAgZm9yIHJv dyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICByZXMuYXBwZW5kKHsK KyAgICAgICAgICAgICAgICAnbGFiZWwnOiByb3dbJ3R5cG5hbWUnXSwKKyAg ICAgICAgICAgICAgICAndmFsdWUnOiByb3dbJ3R5cG5hbWUnXQorICAgICAg ICAgICAgfSkKKworICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNl KAorICAgICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAgICBzdGF0dXM9 MjAwCisgICAgICAgICkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAg ICBkZWYgc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIGNpZCk6CisgICAgICAg ICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgc3Fs IGZvciBzcWwgcGFuZWwKKyAgICAgICAgOnBhcmFtIGdpZDogZ3JvdXAgaWQK KyAgICAgICAgOnBhcmFtIHNpZDogc2VydmVyIGlkCisgICAgICAgIDpwYXJh bSBkaWQ6IGRhdGFiYXNlIGlkCisgICAgICAgIDpwYXJhbSBjaWQ6IGNhc3Qg aWQKKyAgICAgICAgOnJldHVybjoKKyAgICAgICAgIiIiCisgICAgICAgIHRy eToKKyAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnc3Fs LnNxbCddKSwKKyAgICAgICAgICAgICAgICBjaWQ9Y2lkLAorICAgICAgICAg ICAgICAgIGNvbm49c2VsZi5jb25uCisgICAgICAgICAgICApCisgICAgICAg ICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihz cWwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoCisgICAgICAgICAg ICAgICAgICAgIF8oIkVSUk9SOiBDb3VsZG4ndCBnZW5lcmF0ZSByZXZlcnNl ZCBlbmdpbmVlcmVkIFNRTCBmb3IgdGhlIGNhc3QhXG57MH0iKS5mb3JtYXQo CisgICAgICAgICAgICAgICAgICAgICAgICByZXMKKyAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAg ICAgICBpZiByZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4g Z29uZSgKKyAgICAgICAgICAgICAgICAgICAgXygiRVJST1I6IENvdWxkbid0 IGdlbmVyYXRlIHJldmVyc2VkIGVuZ2luZWVyZWQgU1FMIGZvciB0aGUgY2Fz dCBub2RlISIpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAg ICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UocmVzcG9uc2U9cmVzKQorCisgICAg ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQorCisg ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBkZXBlbmRlbnRzKHNl bGYsIGdpZCwgc2lkLCBkaWQsIGNpZCk6CisgICAgICAgICIiIgorICAgICAg ICBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGRlcGVuZGVudHMgYW5kIHJldHVy bnMgYW4gYWpheCByZXNwb25zZQorICAgICAgICBmb3IgdGhlIGNhc3Qgbm9k ZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIg R3JvdXAgSUQKKyAgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAg ICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgICBjaWQ6IENhc3Qg SUQKKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVudHNfcmVzdWx0ID0g Z2V0X2RlcGVuZGVudHMoc2VsZi5jb25uLCBjaWQsICdsYW5ndWFnZScpCisg ICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICAgICAgICAg IHJlc3BvbnNlPWRlcGVuZGVudHNfcmVzdWx0LAorICAgICAgICAgICAgICAg IHN0YXR1cz0yMDAKKyAgICAgICAgICAgICAgICApCisKKyAgICBAY2hlY2tf cHJlY29uZGl0aW9uCisgICAgZGVmIGRlcGVuZGVuY2llcyhzZWxmLCBnaWQs IHNpZCwgZGlkLCBjaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBm dW5jdGlvbiBnZXRzIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJldHVybnMgYW4g YWpheCByZXNwb25zZQorICAgICAgICBmb3IgdGhlIGNhc3Qgbm9kZS4KKwor ICAgICAgICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAg SUQKKyAgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgICBk aWQ6IERhdGFiYXNlIElECisgICAgICAgICAgICBjaWQ6IENhc3QgSUQKKyAg ICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVuY2llc19yZXN1bHQgPSBnZXRf ZGVwZW5kZW5jaWVzKHNlbGYuY29ubiwgY2lkLCAnbGFuZ3VhZ2UnKQorICAg ICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICBy ZXNwb25zZT1kZXBlbmRlbmNpZXNfcmVzdWx0LAorICAgICAgICAgICAgICAg IHN0YXR1cz0yMDAKKyAgICAgICAgICAgICAgICApCisKKworCitDYXN0Vmll dy5yZWdpc3Rlcl9ub2RlX3ZpZXcoYmx1ZXByaW50KQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL2Nhc3RzL3N0YXRpYy9pbWcvY2FzdC5wbmcgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2Fz dHMvc3RhdGljL2ltZy9jYXN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4yYmU3ZjM3CkJpbmFyeSBmaWxlcyAvZGV2L251bGwg YW5kIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL2Nhc3RzL3N0YXRpYy9pbWcvY2FzdC5wbmcgZGlmZmVy CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvc3RhdGljL2ltZy9jb2xsLWNh c3QucG5nIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3N0YXRpYy9pbWcvY29sbC1jYXN0LnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWViNjVh CkJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3N0 YXRpYy9pbWcvY29sbC1jYXN0LnBuZyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9qcy9jYXN0cy5qcyBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9qcy9jYXN0cy5qcwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzU0ZWUzCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBsYXRlcy9jYXN0L2pzL2Nhc3Rz LmpzCkBAIC0wLDAgKzEsMzAyIEBACitkZWZpbmUoCisgICAgICAgIFsnanF1 ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdh ZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAnYWxlcnRpZnknLCAncGdhZG1p bi5icm93c2VyLmNvbGxlY3Rpb24nXSwKK2Z1bmN0aW9uKCQsIF8sIFMsIHBn QWRtaW4sIHBnQnJvd3NlciwgYWxlcnRpZnkpIHsKKworICAgIC8vIEV4dGVu ZCB0aGUgY29sbGVjdGlvbiBjbGFzcyBmb3IgY2FzdAorICAgIGlmICghcGdC cm93c2VyLk5vZGVzWydjb2xsLWNhc3QnXSkgeworICAgICAgdmFyIGNhc3Rz ID0gcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjb2xsLWNhc3QnXSA9CisgICAg ICAgIHBnQWRtaW4uQnJvd3Nlci5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAg ICAgICAgbm9kZTogJ2Nhc3QnLAorICAgICAgICAgIGxhYmVsOiAne3sgXygn Q2FzdHMnKSB9fScsCisgICAgICAgICAgdHlwZTogJ2NvbGwtY2FzdCcsCisg ICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10KKyAg ICAgICAgfSk7CisgICAgfTsKKworICAgIC8vIEV4dGVuZCB0aGUgbm9kZSBj bGFzcyBmb3IgY2FzdAorICAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjYXN0 J10pIHsKKyAgICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snY2FzdCddID0g cGdBZG1pbi5Ccm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAgICAgICAgcGFyZW50 X3R5cGU6ICdkYXRhYmFzZScsCisgICAgICAgIHR5cGU6ICdjYXN0JywKKyAg ICAgICAgY2FuRHJvcDogdHJ1ZSwKKyAgICAgICAgY2FuRHJvcENhc2NhZGU6 IHRydWUsCisgICAgICAgIGxhYmVsOiAne3sgXygnQ2FzdCcpIH19JywKKyAg ICAgICAgaGFzU1FMOiB0cnVlLAorICAgICAgICBoYXNEZXBlbmRzOiB0cnVl LAorICAgICAgICBJbml0OiBmdW5jdGlvbigpIHsKKworICAgICAgICAgIC8v IEF2b2lkIG11bHRpcGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cworICAgICAg ICAgIGlmICh0aGlzLmluaXRpYWxpemVkKQorICAgICAgICAgICAgcmV0dXJu OworCisgICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisKKyAg ICAgICAgICAvLyBBZGQgY29udGV4dCBtZW51cyBmb3IgY2FzdAorICAgICAg ICAgIHBnQnJvd3Nlci5hZGRfbWVudXMoW3sKKyAgICAgICAgICAgIG5hbWU6 ICdjcmVhdGVfY2FzdF9vbl9kYXRhYmFzZScsIG5vZGU6ICdkYXRhYmFzZScs IG1vZHVsZTogdGhpcywKKyAgICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0 JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVz JywKKyAgICAgICAgICAgIGNhdGVnb3J5OiAnY3JlYXRlJywgcHJpb3JpdHk6 IDQsIGxhYmVsOiAne3sgXygnQ2FzdC4uLicpIH19JywKKyAgICAgICAgICAg IGljb246ICd3Y1RhYkljb24gaWNvbi1jYXN0JywgZGF0YToge2FjdGlvbjog J2NyZWF0ZSd9CisgICAgICAgICAgfSx7CisgICAgICAgICAgICBuYW1lOiAn Y3JlYXRlX2Nhc3Rfb25fY29sbCcsIG5vZGU6ICdjb2xsLWNhc3QnLCBtb2R1 bGU6IHRoaXMsCisgICAgICAgICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdj b250ZXh0J10sIGNhbGxiYWNrOiAnc2hvd19vYmpfcHJvcGVydGllcycsCisg ICAgICAgICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBs YWJlbDogJ3t7IF8oJ0Nhc3QuLi4nKSB9fScsCisgICAgICAgICAgICBpY29u OiAnd2NUYWJJY29uIGljb24tY2FzdCcsIGRhdGE6IHthY3Rpb246ICdjcmVh dGUnfQorICAgICAgICAgIH0seworICAgICAgICAgICAgbmFtZTogJ2NyZWF0 ZV9jYXN0Jywgbm9kZTogJ2Nhc3QnLCBtb2R1bGU6IHRoaXMsCisgICAgICAg ICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNr OiAnc2hvd19vYmpfcHJvcGVydGllcycsCisgICAgICAgICAgICBjYXRlZ29y eTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBsYWJlbDogJ3t7IF8oJ0Nhc3Qu Li4nKSB9fScsCisgICAgICAgICAgICBpY29uOiAnd2NUYWJJY29uIGljb24t Y2FzdCcsIGRhdGE6IHthY3Rpb246ICdjcmVhdGUnfQorICAgICAgICAgIH1d KTsKKworICAgICAgICB9LAorCisgICAgICAgIC8vIERlZmluZSB0aGUgYmFj a2Zvcm0gbW9kZWwgZm9yIGNhc3Qgbm9kZQorICAgICAgICBtb2RlbDogcGdB ZG1pbi5Ccm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5kKHsKKyAgICAgICAgICBk ZWZhdWx0czogeworICAgICAgICAgICAgbmFtZTogdW5kZWZpbmVkLCAgICAg ICAgICAgIC8vIE5hbWUgb2YgdGhlIGNhc3QKKyAgICAgICAgICAgIGVuY29k aW5nOiAnVVRGOCcsCisgICAgICAgICAgICBzcmN0eXA6IHVuZGVmaW5lZCwg ICAgICAgICAgLy8gU291cmNlIHR5cGUKKyAgICAgICAgICAgIHRyZ3R5cDog dW5kZWZpbmVkLCAgICAgICAgICAvLyBUYXJnZXQgdHlwZQorICAgICAgICAg ICAgcHJvbmFtZTogdW5kZWZpbmVkLCAgICAgICAgIC8vIEZ1bmN0aW9uCisg ICAgICAgICAgICBjYXN0Y29udGV4dDogdW5kZWZpbmVkLCAgICAgLy8gQ29u dGV4dCAoSU1QTElDSVQvRVhQTElDSVQvQVNTSUdOTUVOVCkKKyAgICAgICAg ICAgIHN5c2Nhc3Q6IHVuZGVmaW5lZCwgICAgICAgICAvLyBJcyB0aGlzIGNh c3QgaXMgc3lzdGVtIG9iamVjdD8gWWVzL05vCisgICAgICAgICAgICBkZXNj cmlwdGlvbjogdW5kZWZpbmVkICAgICAgLy8gQ29tbWVudCBvbiB0aGUgY2Fz dAorICAgICAgICAgIH0sCisKKyAgICAgICAgICAvLyBEZWZpbmUgdGhlIHNj aGVtYSBmb3IgY2FzdAorICAgICAgICAgIHNjaGVtYTogW3sKKyAgICAgICAg ICAgIGlkOiAnbmFtZScsIGxhYmVsOiAne3sgXygnTmFtZScpIH19JywgY2Vs bDogJ3N0cmluZycsIGdyb3VwOiAne3sgXygnRGVmaW5pdGlvbicpIH19JywK KyAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ3RleHQnLCBk aXNhYmxlZDogdHJ1ZSwgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJj ZW50XzUwJworICAgICAgICAgIH0seworICAgICAgICAgICAgaWQ6ICdvaWQn LCBsYWJlbDone3sgXygnT2lkJykgfX0nLCBjZWxsOiAnc3RyaW5nJywgZ3Jv dXA6ICd7eyBfKCdEZWZpbml0aW9uJykgfX0nLAorICAgICAgICAgICAgZWRp dGFibGU6IGZhbHNlLCB0eXBlOiAndGV4dCcsIGRpc2FibGVkOiB0cnVlCisg ICAgICAgICAgfSx7CisgICAgICAgICAgICBpZDogJ3NyY3R5cCcsIGxhYmVs Oid7eyBfKCdTb3VyY2UgdHlwZScpIH19JywgdXJsOiAnZ2V0X3R5cGUnLAor ICAgICAgICAgICAgdHlwZTogJ3RleHQnLCBncm91cDogJ0RlZmluaXRpb24n LCBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgcmV0dXJu ICFtLmlzTmV3KCkKKyAgICAgICAgICAgIH0sIG1vZGU6IFsnY3JlYXRlJ10s CisKKyAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24ocm93cykgewor ICAgICAgICAgICAgICBfLmVhY2gocm93cywgZnVuY3Rpb24ocikgeworICAg ICAgICAgICAgICAgIHJbJ2ltYWdlJ10gPSAnaWNvbi1jYXN0JzsKKyAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJldHVybiByb3dzOworICAg ICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IENvbnRyb2wgaXMgZXh0ZW5kZWQgdG8gY3JlYXRlIGNhc3QgbmFtZSBmcm9t IHNvdXJjZSB0eXBlIGFuZCBkZXN0aW5hdGlvbiB0eXBlCisgICAgICAgICAg ICAgKiBvbmNlIHRoZWlyIHZhbHVlcyBhcmUgY2hhbmdlZAorICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uTm9kZUFq YXhPcHRpb25zQ29udHJvbC5leHRlbmQoeworCisgICAgICAgICAgICAgICBv bkNoYW5nZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgIEJhY2tm b3JtLk5vZGVBamF4T3B0aW9uc0NvbnRyb2wucHJvdG90eXBlLm9uQ2hhbmdl LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICB0aGlzLCBhcmd1bWVudHMK KyAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAv KgorICAgICAgICAgICAgICAgICAgKiBPbiBzb3VyY2UgdHlwZSBjaGFuZ2Us IGNoZWNrIGlmIGJvdGggc291cmNlIHR5cGUgYW5kCisgICAgICAgICAgICAg ICAgICAqIHRhcmdldCB0eXBlIGFyZSBzZXQsIGlmIHllcyB0aGVuIGZldGNo IHZhbHVlcyBmcm9tIGJvdGgKKyAgICAgICAgICAgICAgICAgICogY29udHJv bHMgYW5kIGdlbmVyYXRlIGNhc3QgbmFtZQorICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICAgdmFyIHNyY3R5cGUgPSB0aGlzLm1vZGVs LmdldCgnc3JjdHlwJyk7CisgICAgICAgICAgICAgICAgIHZhciB0cmd0eXBl ID0gdGhpcy5tb2RlbC5nZXQoJ3RyZ3R5cCcpOworICAgICAgICAgICAgICAg ICBpZihzcmN0eXBlICE9IHVuZGVmaW5lZCAmJiBzcmN0eXBlICE9ICcnICYm CisgICAgICAgICAgICAgICAgICAgIHRyZ3R5cGUgIT0gdW5kZWZpbmVkICYm IHRyZ3R5cGUgIT0gJycpCisgICAgICAgICAgICAgICAgICAgdGhpcy5tb2Rl bC5zZXQoIm5hbWUiLCBzcmN0eXBlKyItPiIrdHJndHlwZSk7CisgICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVs LnVuc2V0KCJuYW1lIik7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9KQorICAgICAgICAgIH0sCisKKyAgICAgICAgICAvKgorICAgICAgICAg ICAqIFRleHQgY29udHJvbCBmb3Igdmlld2luZyBzb3VyY2UgdHlwZSBpbiBw cm9wZXJ0aWVzIGFuZAorICAgICAgICAgICAqIGVkaXQgbW9kZSBvbmx5Cisg ICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgaWQ6ICdz cmN0eXAnLCBsYWJlbDone3sgXygnU291cmNlIHR5cGUnKSB9fScsIHR5cGU6 ICd0ZXh0JywKKyAgICAgICAgICAgIGdyb3VwOiAnRGVmaW5pdGlvbicsIGRp c2FibGVkOiB0cnVlLCBtb2RlOlsncHJvcGVydGllcycsJ2VkaXQnXQorICAg ICAgICAgIH0seworICAgICAgICAgICAgaWQ6ICd0cmd0eXAnLCBsYWJlbDon e3sgXygnVGFyZ2V0IHR5cGUnKSB9fScsIHVybDogJ2dldF90eXBlJywKKyAg ICAgICAgICAgIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdEZWZpbml0aW9uJywg ZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgcmV0dXJu ICFtLmlzTmV3KCkKKyAgICAgICAgICAgICAgfSwgbW9kZTogWydjcmVhdGUn XSwKKyAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24ocm93cykgewor ICAgICAgICAgICAgICBfLmVhY2gocm93cywgZnVuY3Rpb24ocikgeworICAg ICAgICAgICAgICAgIHJbJ2ltYWdlJ10gPSAnaWNvbi1jYXN0JzsKKyAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICAgIHJldHVybiByb3dzOworICAg ICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IENvbnRyb2wgaXMgZXh0ZW5kZWQgdG8gY3JlYXRlIGNhc3QgbmFtZSBmcm9t IHNvdXJjZSB0eXBlIGFuZCBkZXN0aW5hdGlvbiB0eXBlCisgICAgICAgICAg ICAgKiBvbmNlIHRoZWlyIHZhbHVlcyBhcmUgY2hhbmdlZAorICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uTm9kZUFq YXhPcHRpb25zQ29udHJvbC5leHRlbmQoeworCisgICAgICAgICAgICAgb25D aGFuZ2U6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgQmFja2Zvcm0u Tm9kZUFqYXhPcHRpb25zQ29udHJvbC5wcm90b3R5cGUub25DaGFuZ2UuYXBw bHkoCisgICAgICAgICAgICAgICAgIHRoaXMsIGFyZ3VtZW50cworICAgICAg ICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgICAgICAqIG9uIHRhcmdldCB0eXBlIGNoYW5nZSwgY2hlY2sgaWYg Ym90aCBzb3VyY2UgdHlwZSBhbmQKKyAgICAgICAgICAgICAgICAgICogdGFy Z2V0IHR5cGUgYXJlIHNldCwgaWYgeWVzIHRoZW4gZmV0Y2ggdmFsdWVzIGZy b20gYm90aAorICAgICAgICAgICAgICAgICAgKiBjb250cm9scyBhbmQgZ2Vu ZXJhdGUgY2FzdCBuYW1lCisgICAgICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgdmFyIHNyY1R5cGUgPSB0aGlzLm1vZGVsLmdldCgnc3JjdHlw Jyk7CisgICAgICAgICAgICAgICB2YXIgdHJndHlwZSA9IHRoaXMubW9kZWwu Z2V0KCd0cmd0eXAnKTsKKyAgICAgICAgICAgICAgIGlmKHNyY1R5cGUgIT0g dW5kZWZpbmVkICYmIHNyY1R5cGUgIT0gJycgJiYKKyAgICAgICAgICAgICAg ICAgIHRyZ3R5cGUgIT0gdW5kZWZpbmVkICYmIHRyZ3R5cGUgIT0gJycpCisg ICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0KCJuYW1lIiwgc3JjVHlw ZSsiLT4iK3RyZ3R5cGUpOworICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICB0aGlzLm1vZGVsLnVuc2V0KCJuYW1lIik7CisgICAgICAg ICAgICAgfQorICAgICAgICAgICAgIH0pCisgICAgICAgICAgfSwKKyAgICAg ICAgICAvKgorICAgICAgICAgICAqIFRleHQgY29udHJvbCBmb3Igdmlld2lu ZyB0YXJnZXQgdHlwZSBpbiBwcm9wZXJ0aWVzIGFuZAorICAgICAgICAgICAq IGVkaXQgbW9kZSBvbmx5CisgICAgICAgICAgICovCisgICAgICAgICAgewor ICAgICAgICAgICAgaWQ6ICd0cmd0eXAnLCBsYWJlbDone3sgXygnVGFyZ2V0 IHR5cGUnKSB9fScsIHR5cGU6ICd0ZXh0JywKKyAgICAgICAgICAgIGdyb3Vw OiAnRGVmaW5pdGlvbicsIGRpc2FibGVkOiB0cnVlLCBtb2RlOlsncHJvcGVy dGllcycsJ2VkaXQnXQorICAgICAgICAgIH0sCisKKyAgICAgICAgICAvKgor ICAgICAgICAgICAqIFByb25hbWUgZmllbGQgaXMgZGVwZW5kZW50IG9uIHNv dXJjZSB0eXBlIGFuZCB0YXJnZXQgdHlwZS4KKyAgICAgICAgICAgKiBPbiBz b3VyY2UgYW5kIHRhcmdldCB0eXBlIGNoYW5nZWQgZXZlbnQsCisgICAgICAg ICAgICogYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2lsbCBiZSBmZXRjaCB1c2lu ZyBhamF4IGNhbGwKKyAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAg ICAgICAgICBpZDogJ3Byb25hbWUnLCBsYWJlbDone3sgXygnRnVuY3Rpb24n KSB9fScsIGRlcHM6WydzcmN0eXAnLCAndHJndHlwJ10sCisgICAgICAgICAg ICB0eXBlOiAndGV4dCcsIGRpc2FibGVkOiBmdW5jdGlvbihtKSB7IHJldHVy biAhbS5pc05ldygpOyB9LAorICAgICAgICAgICAgZ3JvdXA6ICdEZWZpbml0 aW9uJywgbW9kZTogWydjcmVhdGUnXSwKKyAgICAgICAgICAgIGNvbnRyb2w6 ICdub2RlLWFqYXgtb3B0aW9ucycsCisgICAgICAgICAgICBvcHRpb25zOiBm dW5jdGlvbigpIHsKKworICAgICAgICAgICAgICB2YXIgc3JjVHlwID0gdGhp cy5tb2RlbC5nZXQoJ3NyY3R5cCcpOworICAgICAgICAgICAgICB2YXIgdHJn dHlwID0gdGhpcy5tb2RlbC5nZXQoJ3RyZ3R5cCcpOworICAgICAgICAgICAg ICB2YXIgcmVzID0gW107CisKKyAgICAgICAgICAgICAgaWYoc3JjVHlwICE9 IHVuZGVmaW5lZCAmJiBzcmNUeXAgIT0gJycgJiYKKyAgICAgICAgICAgICAg ICAgdHJndHlwICE9IHVuZGVmaW5lZCAmJiB0cmd0eXAgIT0gJycpCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz LmZpZWxkLmdldCgnc2NoZW1hX25vZGUnKSwKKyAgICAgICAgICAgICAgICAg X3VybCA9IG5vZGUuZ2VuZXJhdGVfdXJsLmFwcGx5KAorICAgICAgICAgICAg ICAgICBub2RlLCBbCisgICAgICAgICAgICAgICAgICAgbnVsbCwgJ2dldF9m dW5jdGlvbnMnLCB0aGlzLmZpZWxkLmdldCgnbm9kZV9kYXRhJyksIGZhbHNl LAorICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuZ2V0KCdub2RlX2lu Zm8nKQorICAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgICAgICAg JC5hamF4KHsKKyAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLAorICAg ICAgICAgICAgICAgICB0aW1lb3V0OiAzMDAwMCwKKyAgICAgICAgICAgICAg ICAgdXJsOiBfdXJsLAorICAgICAgICAgICAgICAgICBjYWNoZTogZmFsc2Us CisgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgZGF0YTogeyJzcmN0eXAiIDogc3JjVHlwLCAidHJndHlwIiA6IHRy Z3R5cH0sCisKKyAgICAgICAgICAgICAgICAgLy8gT24gc3VjY2VzcyByZXR1 cm4gZnVuY3Rpb24gbGlzdCBmcm9tIHNlcnZlcgorICAgICAgICAgICAgICAg ICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgICAg ICAgICByZXMgPSByZXN1bHQuZGF0YTsKKyAgICAgICAgICAgICAgICAgICBy ZXR1cm4gcmVzOworICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAg ICAgICAgIC8vIE9uIGZhaWx1cmUgc2hvdyBlcnJvciBhcHByb3ByaWF0ZSBl cnJvciBtZXNzYWdlIHRvIHVzZXIKKyAgICAgICAgICAgICAgICAgZXJyb3I6 IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgeworICAgICAgICAgICAg ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0g JC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAg ICAgICAgICBpZiAoZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAg ICAgICAgICAgICBtc2cgPSBTKCd7eyBfKCcgKyBlcnIuZXJyb3Jtc2cgKyAn KX19JykudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRp ZnkuZXJyb3IoInt7IF8oJyIgKyBlcnIuZXJyb3Jtc2cgKyAiJykgfX0iKTsK KyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICB9 IGNhdGNoIChlKSB7fQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy biByZXM7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAvKgor ICAgICAgICAgKiBUZXh0IHR5cGUgY29udHJvbCBmb3Igdmlld2luZyBmdW5j dGlvbiBuYW1lIGluIHByb3BlcnRpZXMgYW5kCisgICAgICAgICAqIGVkaXQg bW9kZSBvbmx5CisgICAgICAgICAqLworICAgICAgICB7CisgICAgICAgICAg aWQ6ICdwcm9uYW1lJywgbGFiZWw6J3t7IF8oJ0Z1bmN0aW9uJykgfX0nLCB0 eXBlOiAndGV4dCcsCisgICAgICAgICAgZ3JvdXA6ICdEZWZpbml0aW9uJywg ZGlzYWJsZWQ6IHRydWUsIG1vZGU6Wydwcm9wZXJ0aWVzJywnZWRpdCddCisg ICAgICAgIH0seworICAgICAgICAgIGlkOiAnY2FzdGNvbnRleHQnLCBsYWJl bDone3sgXygnQ29udGV4dCcpIH19JywKKyAgICAgICAgICBvcHRpb25zOnsn b25UZXh0JzonSU1QTElDSVQnLCdvZmZUZXh0JzonRVhQTElDSVQnfSwKKyAg ICAgICAgICBlZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdzdHJpbmcnLCBncm91 cDogJ0RlZmluaXRpb24nLAorICAgICAgICAgIG1vZGU6WydjcmVhdGUnXSwK KyAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5Td2l0Y2hDb250cm9sLmV4 dGVuZCh7CisgICAgICAgICAgICBnZXRWYWx1ZUZyb21ET006IGZ1bmN0aW9u KCkgeworICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQucHJvcCgn Y2hlY2tlZCcpID8gJ0lNUExJQ0lUJyA6ICdFWFBMSUNJVCc7CisgICAgICAg ICAgICB9CisgICAgICAgICAgfSkKKyAgICAgICAgfSwKKyAgICAgICAgLyoK KyAgICAgICAgICogVGV4dCBjb250cm9sIGZvciB2aWV3aW5nIGNvbnRleHQg aW4gcHJvcGVydGllcyBhbmQKKyAgICAgICAgICogZWRpdCBtb2RlCisgICAg ICAgICAqLworICAgICAgICB7CisgICAgICAgICAgaWQ6ICdjYXN0Y29udGV4 dCcsIGxhYmVsOid7eyBfKCdDb250ZXh0JykgfX0nLCBkaXNhYmxlZDogdHJ1 ZSwKKyAgICAgICAgICBvcHRpb25zOlt7CisgICAgICAgICAgICBsYWJlbDog J0lNUExJQ0lUJywgdmFsdWU6ICdJTVBMSUNJVCcKKyAgICAgICAgICB9LHsK KyAgICAgICAgICAgIGxhYmVsOiAnRVhQTElDSVQnLCB2YWx1ZTogJ0VYUExJ Q0lUJworICAgICAgICAgIH0seworICAgICAgICAgICAgbGFiZWw6ICdBU1NJ R05NRU5UJywgdmFsdWU6ICdBU1NJR05NRU5UJworICAgICAgICAgIH1dLCBl ZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdzZWxlY3QyJywgZ3JvdXA6ICdEZWZp bml0aW9uJywKKyAgICAgICAgICBtb2RlOlsncHJvcGVydGllcycsICdlZGl0 J10KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdzeXNjYXN0JywgbGFi ZWw6J3t7IF8oJ1N5c3RlbSBDYXN0PycpIH19JywgbW9kZTogWydwcm9wZXJ0 aWVzJ10sCisgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAndGV4 dCcKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbics IGxhYmVsOid7eyBfKCdDb21tZW50JykgfX0nLHR5cGU6ICd0ZXh0JywgZ3Jv dXA6ICdEZWZpbml0aW9uJywKKyAgICAgICAgICB0eXBlOiAnbXVsdGlsaW5l JywgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzUwJworICAg ICAgICB9CisgICAgICAgIF0sCisKKyAgICAgICAgLyoKKyAgICAgICAgICog VHJpZ2dlcnMgY29udHJvbCBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBmb3Ig c291cmNlIHR5cGUgYW5kCisgICAgICAgICAqIHRhcmdldCB0eXBlIGlmIGFu eSBvbmUgb2YgdGhlbSBpcyBub3Qgc2VsZWN0ZWQgd2hpbGUgY3JlYXRpbmcK KyAgICAgICAgICogbmV3IGNhc3QKKyAgICAgICAgICovCisgICAgICAgIHZh bGlkYXRlOiBmdW5jdGlvbihrZXlzKXsKKworICAgICAgICAgIHZhciBzcmN0 eXBlID0gdGhpcy5nZXQoJ3NyY3R5cCcpOworICAgICAgICAgIHZhciB0cmd0 eXBlID0gdGhpcy5nZXQoJ3RyZ3R5cCcpOworCisgICAgICAgICAgLy8gdmFs aWRhdGUgc291cmNlIHR5cGUgY29udHJvbAorICAgICAgICAgIGlmIChfLmlz VW5kZWZpbmVkKHNyY3R5cGUpIHx8IF8uaXNOdWxsKHNyY3R5cGUpIHx8IFN0 cmluZyhzcmN0eXBlKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcn KSB7CisgICAgICAgICAgICB2YXIgbXNnID0gJ3t7IF8oJ1NvdXJjZSB0eXBl IG11c3QgYmUgc2VsZWN0ZWQhJykgfX0nOworICAgICAgICAgICAgdGhpcy5l cnJvck1vZGVsLnNldCgnc3JjdHlwJywgbXNnKTsKKyAgICAgICAgICAgIHJl dHVybiBtc2c7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAg ICAgICB7CisgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ3Ny Y3R5cCcpOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIHZhbGlkYXRl IHRhcmdldCB0eXBlIGNvbnRyb2wKKyAgICAgICAgICBpZiAoXy5pc1VuZGVm aW5lZCh0cmd0eXBlKSB8fCBfLmlzTnVsbCh0cmd0eXBlKSB8fCBTdHJpbmco dHJndHlwZSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykgewor ICAgICAgICAgICAgdmFyIG1zZyA9ICd7eyBfKCdUYXJnZXQgdHlwZSBtdXN0 IGJlIHNlbGVjdGVkIScpIH19JzsKKyAgICAgICAgICAgIHRoaXMuZXJyb3JN b2RlbC5zZXQoJ3RyZ3R5cCcsIG1zZyk7CisgICAgICAgICAgICByZXR1cm4g bXNnOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAg eworICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnVuc2V0KCd0cmd0eXAn KTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy50cmlnZ2VyKCdvbi1z dGF0dXMtY2xlYXInKTsKKyAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg ICAgfQorICAgICAgfSkKKyAgfSk7CisKKyAgfQorICAgIHJldHVybiBwZ0Jy b3dzZXIuTm9kZXNbJ2NvbGwtY2FzdCddOworfSk7ClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBs YXRlcy9jYXN0L3NxbC85LjFfcGx1cy9jcmVhdGUuc3FsIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nh c3RzL3RlbXBsYXRlcy9jYXN0L3NxbC85LjFfcGx1cy9jcmVhdGUuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjc2Y2EKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVtcGxhdGVzL2Nhc3Qv c3FsLzkuMV9wbHVzL2NyZWF0ZS5zcWwKQEAgLTAsMCArMSwyMCBAQAoreyMg Q1JFQVRFIENBU1QgU3RhdGVtZW50ICN9Cit7JSBpZiBpc19zcWwgJX0KKy0t IENhc3Q6IHt7Y29ubnxxdFR5cGVJZGVudChkYXRhLnNyY3R5cCl9fS0+e3sg Y29ubnxxdFR5cGVJZGVudChkYXRhLnRyZ3R5cCkgfX07CisKKy0tIERST1Ag Q0FTVCAoe3sgY29ubnxxdFR5cGVJZGVudChkYXRhLnNyY3R5cCkgfX0gQVMg e3sgY29ubnxxdFR5cGVJZGVudChkYXRhLnRyZ3R5cCkgfX0pOworCit7JSBl bmRpZiAlfQoreyUgaWYgZGF0YSBhbmQgZGF0YS5zcmN0eXAgYW5kIGRhdGEu dHJndHlwICV9CitDUkVBVEUgQ0FTVCAoe3sgY29ubnxxdFR5cGVJZGVudChk YXRhLnNyY3R5cCkgfX0gQVMge3sgY29ubnxxdFR5cGVJZGVudChkYXRhLnRy Z3R5cCkgfX0pCit7JSBpZiBkYXRhLnByb25hbWUgYW5kIGRhdGEucHJvbmFt ZSAhPSAnYmluYXJ5IGNvbXBhdGlibGUnJX0KKyAgICBXSVRIIEZVTkNUSU9O IHt7ZGF0YS5wcm9uYW1lfX17JSBlbHNlICV9CisgICAgV0lUSE9VVCBGVU5D VElPTnslIGVuZGlmICV9Cit7JSBpZiBkYXRhLmNhc3Rjb250ZXh0IGFuZCBk YXRhLmNhc3Rjb250ZXh0ICE9ICdFWFBMSUNJVCcgJX0KKworICAgIEFTIHt7 ZGF0YS5jYXN0Y29udGV4dH19eyUgZW5kaWYgJX07Cit7IyBEZXNjcmlwdGlv biBmb3IgQ0FTVCAjfQoreyUgaWYgZGF0YS5kZXNjcmlwdGlvbiAlfQorQ09N TUVOVCBPTiBDQVNUICh7eyBjb25ufHF0VHlwZUlkZW50KGRhdGEuc3JjdHlw KSB9fSBBUyB7eyBjb25ufHF0VHlwZUlkZW50KGRhdGEudHJndHlwKSB9fSkK KyAgICBJUyB7eyBkYXRhLmRlc2NyaXB0aW9ufHF0TGl0ZXJhbCB9fTsKK3sl IGVuZGlmICV9eyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm aWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVtcGxhdGVzL2Nhc3Qv c3FsLzkuMV9wbHVzL2RlbGV0ZS5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVtcGxh dGVzL2Nhc3Qvc3FsLzkuMV9wbHVzL2RlbGV0ZS5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhMjM0MwotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3Bs dXMvZGVsZXRlLnNxbApAQCAtMCwwICsxLDE0IEBACit7IyBGRVRDSCBDQVNU IFNPVVJDRSBUWVBFIEFORCBUQVJHRVQgVFlQRSBTdGF0ZW1lbnQgI30KK3sl IGlmIGNpZCAlfQorU0VMRUNUCisgICAgZm9ybWF0X3R5cGUoY2EuY2FzdHNv dXJjZSwgbnVsbCkgYXMgY2FzdHNvdXJjZSwKKyAgICBmb3JtYXRfdHlwZShj YS5jYXN0dGFyZ2V0LCBudWxsKSBhcyBjYXN0dGFyZ2V0CitGUk9NCisgICAg cGdfY2FzdCBjYQorV0hFUkUKKyAgICBjYS5vaWQgPSB7e2NpZH19OjpPSUQ7 Cit7JSBlbmRpZiAlfQoreyMgRFJPUCBDQVNUIFN0YXRlbWVudCAjfQoreyUg aWYgY2FzdHNvdXJjZSBhbmQgY2FzdHRhcmdldCAlfQorRFJPUCBDQVNUICh7 e2Nhc3Rzb3VyY2V9fSBBUyB7e2Nhc3R0YXJnZXR9fSkgeyUgaWYgY2FzY2Fk ZSAlfUNBU0NBREV7JWVuZGlmJX07Cit7JSBlbmRpZiAlfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90 ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3BsdXMvZnVuY3Rpb25zLnNxbCBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3BsdXMvZnVuY3Rp b25zLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x MTk1MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBs YXRlcy9jYXN0L3NxbC85LjFfcGx1cy9mdW5jdGlvbnMuc3FsCkBAIC0wLDAg KzEsMTcgQEAKK3sjIEZFVENIIEZVTkNUSU9OUyBkZXBlbmRpbmcgdXBvbiBT T1VSQ0UgVFlQRSBhbmQgVEFSR0VUIFRZUEUgSU4gQ0FTVCAgI30KK1NFTEVD VAorICAgIHByb25hbWUgfHwgJygnIHx8IHBnX2NhdGFsb2cucGdfZ2V0X2Z1 bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhwLm9pZCkgfHwgJyknIGFzIHBy b25hbWUsCisgICAgbnNwbmFtZSwKKyAgICBwcm9hcmd0eXBlcworRlJPTQor ICAgIHBnX3Byb2MgcCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkPXAu cHJvbmFtZXNwYWNlCitXSEVSRQorICAgIHByb2FyZ3R5cGVzWzBdID0gKFNF TEVDVCB0Lm9pZCBGUk9NIHBnX3R5cGUgdCBXSEVSRSBmb3JtYXRfdHlwZSh0 Lm9pZCwgTlVMTCkgPSB7e3NyY3R5cHxxdExpdGVyYWx9fSkKKyAgICBBTkQg cHJvcmV0dHlwZSA9IChTRUxFQ1QgdC5vaWQgRlJPTSBwZ190eXBlIHQgV0hF UkUgZm9ybWF0X3R5cGUodC5vaWQsIE5VTEwpID0ge3t0cmd0eXB8cXRMaXRl cmFsfX0pCisgICAgQU5EIENBU0UKKyAgICAgICAgV0hFTiBhcnJheV9sZW5n dGgocHJvYXJndHlwZXMsMSkgID0gMiBUSEVOCisgICAgICAgICAgICBwcm9h cmd0eXBlc1sxXSA9IDIzCisgICAgICAgIFdIRU4gYXJyYXlfbGVuZ3RoKHBy b2FyZ3R5cGVzLDEpICA+PSAzIFRIRU4KKyAgICAgICAgICAgIHByb2FyZ3R5 cGVzWzFdID0gMjMgQU5EIHByb2FyZ3R5cGVzWzJdID0gMTYKKyAgICAgICBF TFNFIFRSVUUKKyAgICBFTkQKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90 ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3BsdXMvZ2V0c3JjYW5kdHJndHR5cGUu c3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBsYXRlcy9jYXN0L3NxbC85LjFfcGx1 cy9nZXRzcmNhbmR0cmd0dHlwZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNDYzNmY4NwotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3BsdXMvZ2V0c3Jj YW5kdHJndHR5cGUuc3FsCkBAIC0wLDAgKzEsNDYgQEAKK1NFTEVDVAorICAg ICoKK0ZST00gKAorICAgIFNFTEVDVCAKKyAgICAgICAgZm9ybWF0X3R5cGUo dC5vaWQsTlVMTCkgQVMgdHlwbmFtZSwKKyAgICAgICAgQ0FTRQorICAgICAg ICAgICAgV0hFTiB0eXBlbGVtID4gMCBUSEVOIHR5cGVsZW0KKyAgICAgICAg ICAgIEVMU0UgdC5vaWQKKyAgICAgICAgRU5EIGFzIGVsZW1vaWQsCisgICAg ICAgIHR5cGxlbiwKKyAgICAgICAgdHlwdHlwZSwKKyAgICAgICAgdC5vaWQs CisgICAgICAgIG5zcG5hbWUsCisgICAgICAgIChTRUxFQ1QgQ09VTlQoMSkg RlJPTSBwZ190eXBlIHQyIFdIRVJFIHQyLnR5cG5hbWUgPSB0LnR5cG5hbWUp ID4gMSBBUyBpc2R1cAorICAgIEZST00KKyAgICAgICAgcGdfdHlwZSB0Cisg ICAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIG5zcCBPTiB0eXBuYW1lc3BhY2U9 bnNwLm9pZAorICAgIFdIRVJFCisgICAgICAgIChOT1QgKHR5cG5hbWUgPSAn dW5rbm93bicKKyAgICAgICAgQU5EIG5zcG5hbWUgPSAncGdfY2F0YWxvZycp KQorICAgICAgICBBTkQgdHlwaXNkZWZpbmVkCisgICAgICAgIEFORCB0eXB0 eXBlIElOICgnYicsICdjJywgJ2UnLCAncicpCisgICAgICAgIEFORCBOT1Qg RVhJU1RTICgKKyAgICAgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgICAg IDEKKyAgICAgICAgICAgIEZST00KKyAgICAgICAgICAgICAgICAgcGdfY2xh c3MKKyAgICAgICAgICAgIFdIRVJFCisgICAgICAgICAgICAgICAgIHJlbG5h bWVzcGFjZSA9IHR5cG5hbWVzcGFjZQorICAgICAgICAgICAgICAgICBBTkQg cmVsbmFtZSA9IHR5cG5hbWUKKyAgICAgICAgICAgICAgICAgQU5EIHJlbGtp bmQgIT0gJ2MnKQorICAgICAgICAgICAgICAgICBBTkQgKHR5cG5hbWUgTk9U IExJS0UgJ18lJworICAgICAgICAgICAgICAgICAgICAgT1IgTk9UIEVYSVNU UyAoCisgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEKKyAgICAgICAgICAgICAgICAgICAg ICAgICBGUk9NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19j bGFzcworICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlbG5hbWVzcGFjZSA9IHR5cG5hbWVz cGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgcmVsbmFt ZSA9IFNVQlNUUklORyh0eXBuYW1lIEZST00gMik6Om5hbWUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQU5EIHJlbGtpbmQgIT0gJ2MnCisgICAg ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICkKKyAgICAg ICAgICAgICAgICAgQU5EIG5zcC5uc3BuYW1lICE9ICdpbmZvcm1hdGlvbl9z Y2hlbWEnICkgQVMgZHVtbXkKKyAgICAgICAgICAgICBPUkRFUiBCWQorICAg ICAgICAgICAgICAgICBuc3BuYW1lIDw+ICdwZ19jYXRhbG9nJywgbnNwbmFt ZSA8PiAncHVibGljJywgbnNwbmFtZSwgMQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L2Nhc3RzL3RlbXBsYXRlcy9jYXN0L3NxbC85LjFfcGx1cy9wcm9wZXJ0aWVz LnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3Bs dXMvcHJvcGVydGllcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMTVlZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9j YXN0cy90ZW1wbGF0ZXMvY2FzdC9zcWwvOS4xX3BsdXMvcHJvcGVydGllcy5z cWwKQEAgLTAsMCArMSw2MSBAQAoreyMgR2V0IE9JRCBmb3IgQ0FTVCAjfQor eyUgaWYgc3JjdHlwIGFuZCB0cmd0eXAgJX0KKyAgICBTRUxFQ1QKKyAgICAg ICAgY2Eub2lkCisgICAgRlJPTSBwZ19jYXN0IGNhCisgICAgV0hFUkUgY2Eu Y2FzdHNvdXJjZSA9IChTRUxFQ1QgdC5vaWQgRlJPTSBwZ190eXBlIHQgV0hF UkUgZm9ybWF0X3R5cGUodC5vaWQsIE5VTEwpID0ge3tzcmN0eXB8cXRMaXRl cmFsfX0pCisgICAgQU5EIGNhLmNhc3R0YXJnZXQgPSAoU0VMRUNUIHQub2lk IEZST00gcGdfdHlwZSB0IFdIRVJFIGZvcm1hdF90eXBlKHQub2lkLCBOVUxM KSA9IHt7dHJndHlwfHF0TGl0ZXJhbH19KQorICAgIHslIGlmIGRhdGxhc3Rz eXNvaWQgJX0KKyAgICAgQU5EIGNhLm9pZCA+IHt7ZGF0bGFzdHN5c29pZH19 OjpPSUQKKyAgICB7JSBlbmRpZiAlfQorCit7IyBGRVRDSCBwcm9wZXJ0aWVz IGZvciBDQVNUICN9Cit7JSBlbHNlICV9CisgICAgU0VMRUNUCisgICAgICAg IGNhLm9pZCwKKyAgICBDQVNFCisgICAgICAgIFdIRU4ge3tkYXRsYXN0c3lz b2lkfX06Ok9JRCA+IGNhLm9pZCB0aGVuICdZZXMnIEVMU0UgJ05vJworICAg IEVORCBBUyBzeXNjYXN0LAorICAgIENBU0UKKyAgICAgICAgV0hFTiBjYS5j YXN0Y29udGV4dCA9ICdhJyBUSEVOICdBU1NJR05NRU5UJworICAgICAgICBX SEVOIGNhLmNhc3Rjb250ZXh0ID0gJ2knIFRIRU4gJ0lNUExJQ0lUJworICAg ICAgICBXSEVOIGNhLmNhc3Rjb250ZXh0ID0gJ2UnIFRIRU4gJ0VYUExJQ0lU JworICAgIEVORCBBUyBjYXN0Y29udGV4dCwKKyAgICBDQVNFCisgICAgICAg IFdIRU4gcHJvbmFtZSBJUyBOVUxMIFRIRU4gJ2JpbmFyeSBjb21wYXRpYmxl JworICAgICAgICBFTFNFIHByb25hbWUgfHwgJygnIHx8IHBnX2NhdGFsb2cu cGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhwci5vaWQpIHx8 ICcpJworICAgIEVORCBBUyBwcm9uYW1lLAorICAgICAgICBjYS5jYXN0ZnVu YywKKyAgICAgICAgZm9ybWF0X3R5cGUoc3Qub2lkLE5VTEwpIEFTIHNyY3R5 cCwKKyAgICAgICAgZm9ybWF0X3R5cGUodHQub2lkLHR0LnR5cHR5cG1vZCkg QVMgdHJndHlwLAorICAgICAgICBucy5uc3BuYW1lIEFTIHNyY25zcG5hbWUs CisgICAgICAgIG50Lm5zcG5hbWUgQVMgdHJnbnNwbmFtZSwKKyAgICAgICAg bnAubnNwbmFtZSBBUyBwcm9uc3BuYW1lLAorICAgICAgICBkZXNjcmlwdGlv biwKKyAgICAgICAgY29uY2F0KGZvcm1hdF90eXBlKHN0Lm9pZCxOVUxMKSwn LT4nLGZvcm1hdF90eXBlKHR0Lm9pZCx0dC50eXB0eXBtb2QpKSBhcyBuYW1l CisgICAgRlJPTSBwZ19jYXN0IGNhCisgICAgSk9JTiBwZ190eXBlIHN0IE9O IHN0Lm9pZD1jYXN0c291cmNlCisgICAgSk9JTiBwZ19uYW1lc3BhY2UgbnMg T04gbnMub2lkPXN0LnR5cG5hbWVzcGFjZQorICAgIEpPSU4gcGdfdHlwZSB0 dCBPTiB0dC5vaWQ9Y2FzdHRhcmdldAorICAgIEpPSU4gcGdfbmFtZXNwYWNl IG50IE9OIG50Lm9pZD10dC50eXBuYW1lc3BhY2UKKyAgICBMRUZUIEpPSU4g cGdfcHJvYyBwciBPTiBwci5vaWQ9Y2FzdGZ1bmMKKyAgICBMRUZUIEpPSU4g cGdfbmFtZXNwYWNlIG5wIE9OIG5wLm9pZD1wci5wcm9uYW1lc3BhY2UKKyAg ICBMRUZUIE9VVEVSIEpPSU4gcGdfZGVzY3JpcHRpb24gZGVzIE9OIChkZXMu b2Jqb2lkPWNhLm9pZCBBTkQgZGVzLm9ianN1YmlkPTAgQU5EIGRlcy5jbGFz c29pZD0ncGdfY2FzdCc6OnJlZ2NsYXNzKQorCisgICAgeyUgaWYgY2lkICV9 CisgICAgICAgIFdIRVJFIGNhLm9pZD17e2NpZH19OjppbnQKKyAgICB7JSBl bmRpZiAlfQorCistLVRPRE86IGFkZCBjaGVjayBmb3Igc2hvd1N5c3RlbU9i amVjdCgpLiBjdXJyZW50bHkgYXNzdW1lZCBhcyBmYWxzZQorICAgIHsjCisg ICAgeyUgaWYgZGF0bGFzdHN5c29pZCAlfQorICAgICAgICB7JSBpZiBjaWQg JX0KKyAgICAgICAgICAgIEFORAorICAgICAgICB7JSBlbHNlICV9CisgICAg ICAgICAgICBXSEVSRQorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICBj YS5vaWQgPiB7e2RhdGxhc3RzeXNvaWR9fTo6T0lECisgICAgeyUgZW5kaWYg JX0KKyAgICAjfQorICAgIE9SREVSIEJZIHN0LnR5cG5hbWUsIHR0LnR5cG5h bWUKK3slIGVuZGlmICV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBsYXRlcy9jYXN0L3NxbC85 LjFfcGx1cy9zcWwuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBsYXRlcy9jYXN0 L3NxbC85LjFfcGx1cy9zcWwuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjA1NTRhZDMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvY2FzdHMvdGVtcGxhdGVzL2Nhc3Qvc3FsLzkuMV9wbHVzL3NxbC5zcWwK QEAgLTAsMCArMSw0NCBAQAorU0VMRUNUCisgICAgYXJyYXlfdG9fc3RyaW5n KGFycmF5X2FnZyhzcWwpLCBFJ1xuXG4nKSBhcyBzcWwKK0ZST00KKyhTRUxF Q1QKKyAgICBFJy0tIENhc3Q6ICcgfHwKKyAgICBmb3JtYXRfdHlwZShzdC5v aWQsIG51bGwpfHwgRScgLT4gJyB8fAorICAgIGZvcm1hdF90eXBlKHR0Lm9p ZCwgdHQudHlwdHlwbW9kKSB8fAorICAgIEUnXG5cbi0tIERST1AgQ0FTVCAo JyB8fCBmb3JtYXRfdHlwZShzdC5vaWQsIG51bGwpIHx8CisgICAgRScgQVMg JyB8fCBmb3JtYXRfdHlwZSh0dC5vaWQsdHQudHlwdHlwbW9kKSB8fAorICAg IEUnKTtcblxuICBDUkVBVEUgQ0FTVCAoJyB8fCBmb3JtYXRfdHlwZShzdC5v aWQsIG51bGwpIHx8CisgICAgRScgQVMgJyB8fCBmb3JtYXRfdHlwZSh0dC5v aWQsdHQudHlwdHlwbW9kKSB8fCBFJylcbicgfHwKKyAgICBDQVNFIFdIRU4g Y2EuY2FzdGZ1bmMgIT0gMCBUSEVOCisgICAgRSdcdFdJVEggRlVOQ1RJT04g JyB8fAorICAgIHByLnByb25hbWUgfHwgJygnIHx8IENPQUxFU0NFKHBnX2Nh dGFsb2cucGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhwci5v aWQpLCAnJykgfHwgRScpJworICAgIFdIRU4gY2EuY2FzdGZ1bmMgPSAwIEFO RCBjYS5jYXN0bWV0aG9kID0gJ2knIFRIRU4KKyAgICBFJ1x0V0lUSCBJTk9V VCcKKyAgICBFTFNFIEUnXHRXSVRIT1VUIEZVTkNUSU9OJyBFTkQgfHwKKyAg ICBDQVNFIFdIRU4gY2EuY2FzdGNvbnRleHQgPSAnYScgVEhFTiBFJ1xuXHRB UyBBU1NJR05NRU5UOycKKyAgICBXSEVOIGNhLmNhc3Rjb250ZXh0ID0gJ2kn IFRIRU4gRSdcblx0QVMgSU1QTElDSVQ7JworICAgIEVMU0UgRSc7JyBFTkQg fHwKKyAgICBDQVNFIFdIRU4gYS5kZXNjcmlwdGlvbiBJUyBOT1QgTlVMTCBU SEVOCisgICAgICAgIEUnXG5cbkNPTU1FTlQgT04gQ0FTVCAoJyB8fCAoZm9y bWF0X3R5cGUoc3Qub2lkLE5VTEwpKSB8fAorICAgICAgICBFJyBBUyAnIHx8 IChmb3JtYXRfdHlwZSh0dC5vaWQsdHQudHlwdHlwbW9kKSkgfHwKKyAgICAg ICAgRScpIElTICcgfHwgcGdfY2F0YWxvZy5xdW90ZV9saXRlcmFsKGRlc2Ny aXB0aW9uKSB8fCBFJzsnCisgICAgRUxTRSAnJyAgRU5EIGFzIHNxbAorRlJP TQorICAgIHBnX2Nhc3QgY2EKKyAgICBKT0lOIHBnX3R5cGUgc3QgT04gc3Qu b2lkPWNhLmNhc3Rzb3VyY2UKKyAgICBKT0lOIHBnX25hbWVzcGFjZSBucyBP TiBucy5vaWQ9c3QudHlwbmFtZXNwYWNlCisgICAgSk9JTiBwZ190eXBlIHR0 IE9OIHR0Lm9pZD1jYS5jYXN0dGFyZ2V0CisgICAgSk9JTiBwZ19uYW1lc3Bh Y2UgbnQgT04gbnQub2lkPXR0LnR5cG5hbWVzcGFjZQorICAgIExFRlQgSk9J TiBwZ19wcm9jIHByIE9OIHByLm9pZD1jYS5jYXN0ZnVuYworICAgIExFRlQg Sk9JTiAoCisgICAgICAgIFNFTEVDVAorICAgICAgICAgICAgZGVzLmRlc2Ny aXB0aW9uIGFzIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgZGVzLm9iam9p ZCBhcyBkZXNjb2lkCisgICAgICAgIEZST00KKyAgICAgICAgICAgIHBnX2Rl c2NyaXB0aW9uIGRlcworICAgICAgICBXSEVSRQorICAgICAgICAgICAgZGVz Lm9iam9pZD17e2NpZH19OjpPSUQgQU5EIGRlcy5vYmpzdWJpZD0wIEFORCBk ZXMuY2xhc3NvaWQ9J3BnX2Nhc3QnOjpyZWdjbGFzcworICAgICApIGEgT04g KGEuZGVzY29pZCA9IGNhLm9pZCkKK1dIRVJFCisgICAgY2Eub2lkPXt7Y2lk fX06Ok9JRAorKSBjOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3RlbXBs YXRlcy9jYXN0L3NxbC85LjFfcGx1cy91cGRhdGUuc3FsIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nh c3RzL3RlbXBsYXRlcy9jYXN0L3NxbC85LjFfcGx1cy91cGRhdGUuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmQ0ZTgKLS0t IC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVtcGxhdGVzL2Nhc3Qv c3FsLzkuMV9wbHVzL3VwZGF0ZS5zcWwKQEAgLTAsMCArMSw2IEBACit7IyBV UERBVEUgRGVzY3JpcHRpb24gZm9yIENBU1QgI30KKworeyUgIGlmIGRhdGEg YW5kICdkZXNjcmlwdGlvbicgaW4gZGF0YSBhbmQgZGF0YS5kZXNjcmlwdGlv biAhPSBvX2RhdGEuZGVzY3JpcHRpb24gJX0KK0NPTU1FTlQgT04gQ0FTVCAo e3sgY29ubnxxdFR5cGVJZGVudChvX2RhdGEuc3JjdHlwKSB9fSBBUyB7eyBj b25ufHF0VHlwZUlkZW50KG9fZGF0YS50cmd0eXApIH19KQorICAgIElTIHt7 IGRhdGEuZGVzY3JpcHRpb258cXRMaXRlcmFsIH19OworeyUgZW5kaWYgJX0K XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg== --001a113a557a08d175052c6d9557 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a113a557a08d175052c6d9557--