Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZDJb-00020O-JO for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Dec 2018 11:13:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gZDJZ-00024D-V7 for pgadmin-hackers@arkaria.postgresql.org; Tue, 18 Dec 2018 11:13:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZDJZ-000245-Is for pgadmin-hackers@lists.postgresql.org; Tue, 18 Dec 2018 11:13:29 +0000 Received: from mail-qt1-x842.google.com ([2607:f8b0:4864:20::842]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gZDJQ-0005af-G7 for pgadmin-hackers@postgresql.org; Tue, 18 Dec 2018 11:13:28 +0000 Received: by mail-qt1-x842.google.com with SMTP id l11so17708246qtp.0 for ; Tue, 18 Dec 2018 03:13:19 -0800 (PST) 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=jVux9Htayd2FGfLM7ILpVh3QTj4to+fmCfQAuzP2Ylw=; b=bJ9Va5Ux8KkMv0VuHt6gL4EjgrlUgJHbi0b/CiCd1+6OX1IVMPYf22B487DR/S9GOE Zh848qtmW+KkW4b93hljtAZB8io/BlLvrlgHRXeAeIQPZ1QjdOBWbb3PDNxG54UKAqU7 QvinRWcgpQHpamT2sQUAB3pUEhPvtn0m6x6l6ktV43c+zt1O84eCPN4QfC/VI9r7YdJR T3DhMgzPVKZdjjkgeLlc0RBmaiy/uwL7tEqenG+/gp4UTBlpyDNUSyjNHoEzMvmqxxLp 6vzmynof+Y7GXUi1KI7WQAmrXVvZejHcbeGfZwY2ENbjrQtk75UYNorD8XU9tKCNy1V9 m6cQ== 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=jVux9Htayd2FGfLM7ILpVh3QTj4to+fmCfQAuzP2Ylw=; b=t19Cscgnt9RHJKntw5LqeFpFww+/0CJ1GcMwmZMvQDZs17hpCY9v8IxbW7EYHeknO1 mJia7hkbmWjtzjbzbe5Ez8XPLFNViyvbhIHd0SokfbY2J2+zFrFjhsKtDLizFvJzfVNu N48cldv/89eJHP6WCo6JqybYQ82ZD8V2fyBY0687QXBm/Ezkf6/Kl8PQ1ElSzYyYPoFa GJkkAGzcmiNgQTOdZEWQfLkG9e8s6h3LypqE1pZHP+feEL14qUfmLVhkoeMVDwiM1JVs eY5hGpgBu1kzFlSrnDTYPxY3cGe/lhoshOhQJCoOvxauWGqnb8+v3T4YtoMAJepkeu/Y 5mrQ== X-Gm-Message-State: AA+aEWbiXy+WNvzIcBxOpk2lLfRGVV0C/xgNTBQSBjr9cnXZ6uyxe/q8 Up1aDRjVQjrytiOYnutH4WzVRuHvj7SFcUJcsFGpvg== X-Google-Smtp-Source: AFSGD/Wx3AdRFXlRs2fn5A3Pc5Ac4V7IUYDaUDlw825Vqp23ON+/pohANa2TR3isCNFYPQu9EXhm/EWbWm5NE77N74g= X-Received: by 2002:a0c:9aca:: with SMTP id k10mr16880968qvf.185.1545131598015; Tue, 18 Dec 2018 03:13:18 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Akshay Joshi Date: Tue, 18 Dec 2018 16:43:07 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch] - RM 3780 pgAdmin4 lacks ability to specify NULL values in CSV export To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000083507057d49fc78" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000083507057d49fc78 Content-Type: multipart/alternative; boundary="000000000000083504057d49fc76" --000000000000083504057d49fc76 Content-Type: text/plain; charset="UTF-8" Hi Dave Attached is the modified patch to fix review comments. On Tue, Dec 18, 2018 at 3:00 PM Akshay Joshi wrote: > > > On Tue, Dec 18, 2018 at 2:49 PM Dave Page wrote: > >> Hi >> >> On Tue, Dec 18, 2018 at 3:45 AM Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> Hi Hackers, >>> >>> Attached is the patch to fix RM #3780 pgAdmin4 lacks ability to specify >>> NULL values in CSV export. >>> >>> Please review it. >>> >> >> A few points; >> >> - You've included code from backports.csv, but per the licence you need >> to include a description of the changes made. >> > > Sure. In that case I'll copy the complete file and will do my > changes which is of two lines only. With my patch I have remove all the > unwanted code from backport.csv. > >> >> - Shouldn't backports.csv be removed from requirements.txt, or is it used >> elsewhere? >> > > Yes. Will do that. > >> >> - If the previous point is true, then I'm fairly sure there is code in >> one or more of the many package build scripts that adds an __init__.py file >> to backports.csv in the venv that's created. >> > > I'll remove that code as well. > >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > > > -- > *Akshay Joshi* > > *Sr. Software Architect * > > > > *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* > -- *Akshay Joshi* *Sr. Software Architect * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --000000000000083504057d49fc76 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Dave

Attached is the modified p= atch to fix review comments.

On Tue, Dec 18, 2018 at 3:00 PM Akshay Joshi <akshay.joshi@enterprisedb.com> w= rote:


On Tue, Dec 18, 2018 at 2:49 PM Dave Page <dpage@pgadmin.org> wrote:
Hi
=
On Tue, Dec 18, 2018 at 3:4= 5 AM Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
Hi Hackers,

Attached is the patch to fix RM #3780=C2= =A0pgAdmin4 lacks ability to specify NULL values in CSV export.

Please review it.

A few points;

- You've included code from backports.csv, but per the licence yo= u need to include a description of the changes made.

=C2=A0 =C2=A0 =C2=A0 Sure. In that case I'l= l copy the complete file and will do my changes which is of two lines only.= With my patch I have remove all the unwanted code from backport.csv.=C2=A0= =C2=A0 =C2=A0=C2=A0

- Shouldn&= #39;t backports.csv be removed from requirements.txt, or is it used elsewhe= re?

=C2=A0 =C2=A0 =C2=A0Y= es. Will do that.=C2=A0

- If th= e previous point is true, then I'm fairly sure there is code in one or = more of the many package build scripts that adds an __init__.py file to bac= kports.csv in the venv that's created.

=C2=A0 =C2=A0 I'll remove that code as well.=C2=A0=C2= =A0
=C2=A0
--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

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


--
Sr. Software Architect


Phone: +91 20-3058-9517
Mobil= e: +91 976-788-8246


--
Akshay Joshi
Sr. S= oftware Architect
=

Phone: +91 20-3058-9517
Mobile: +91 976-788-8246
=
--000000000000083504057d49fc76-- --000000000000083507057d49fc78 Content-Type: application/octet-stream; name="RM_3780_v2.patch" Content-Disposition: attachment; filename="RM_3780_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jptng00f0 ZGlmZiAtLWdpdCBhL01ha2UuYmF0IGIvTWFrZS5iYXQKaW5kZXggZmRkNjJhMC4uNTkyZDBkOCAx MDA2NDQKLS0tIGEvTWFrZS5iYXQKKysrIGIvTWFrZS5iYXQKQEAgLTI1NSwxMSArMjU1LDYgQEAg UkVNIE1haW4gYnVpbGQgc2VxdWVuY2UgRW5kcwogICAgIEVDSE8gUmVtb3ZpbmcgU3BoaW54CiAg ICAgQ0FMTCBwaXAgdW5pbnN0YWxsIC15IHNwaGlueCBQeWdtZW50cyBhbGFiYXN0ZXIgY29sb3Jh bWEgZG9jdXRpbHMgaW1hZ2VzaXplIHJlcXVlc3RzIHNub3diYWxsc3RlbW1lcgogCi0gICAgSUYg JVBZVEhPTl9NQUpPUiUgPT0gMiAoCi0gICAgICAgIEVDSE8gRml4aW5nIGJhY2twb3J0cy5jc3Yg Zm9yIFB5dGhvbiAyIGJ5IGFkZGluZyBtaXNzaW5nIF9faW5pdF9fLnB5Ci0gICAgICAgIHR5cGUg bnVsID4+ICIlUEdCVUlMRFBBVEglXCVWSVJUVUFMRU5WJVxMaWJcc2l0ZS1wYWNrYWdlc1xiYWNr cG9ydHNcX19pbml0X18ucHkiCi0gICAgKQotICAgIAogICAgIElGICVQWVRIT05fTUFKT1IlID09 IDMgKAogICAgICAgICBFQ0hPIEZpeGluZyBQeUNyeXB0byBtb2R1bGUgZm9yIFB5dGhvbiAzLi4u CiAgICAgICAgIENBTEwgIiVQWVRIT05fSE9NRSVccHl0aG9uIiAiJVdEJVxwa2dcd2luMzJccmVw bGFjZS5weSIgIi1pIiAiJVBHQlVJTERQQVRIJVwlVklSVFVBTEVOViVcTGliXHNpdGUtcGFja2Fn ZXNcQ3J5cHRvXFJhbmRvbVxPU1JOR1xudC5weSIgIi1vIiAiJVBHQlVJTERQQVRIJVwlVklSVFVB TEVOViVcTGliXHNpdGUtcGFja2FnZXNcQ3J5cHRvXFJhbmRvbVxPU1JOR1xudC5weS5uZXciICIt cyIgImltcG9ydCB3aW5yYW5kb20iIC1yICJmcm9tIC4gaW1wb3J0IHdpbnJhbmRvbSIKZGlmZiAt LWdpdCBhL3BrZy9tYWMvYnVpbGQuc2ggYi9wa2cvbWFjL2J1aWxkLnNoCmluZGV4IDExZDE3ZTgu LjNjYjk3NDEgMTAwNzU1Ci0tLSBhL3BrZy9tYWMvYnVpbGQuc2gKKysrIGIvcGtnL21hYy9idWls ZC5zaApAQCAtMTQ0LDExICsxNDQsNiBAQCBfY3JlYXRlX3B5dGhvbl92aXJ0dWFsZW52KCkgewog ICAgIGlmIHRlc3QgLWQgJERJUl9QWU1PRFVMRVNfUEFUSDsgdGhlbgogICAgICAgICBsbiAtcyAk KGJhc2VuYW1lICRESVJfUFlNT0RVTEVTX1BBVEgpICRESVJfUFlNT0RVTEVTX1BBVEgvLi4vcHl0 aG9uCiAgICAgZmkKLQotICAgICMgRml4IHRoZSBiYWNrcG9ydHMgbW9kdWxlIHdoaWNoIHdpbGwg aGF2ZSBubyBfX2luaXRfXy5weSBmaWxlCi0gICAgaWYgWyAiJFBZVEhPTl9WRVJTSU9OIiAtbHQg IjMwIiBdOyB0aGVuCi0gICAgICAgIHRvdWNoICRCVUlMRFJPT1QvJFZJUlRVQUxFTlYvbGliL3B5 dGhvbi9zaXRlLXBhY2thZ2VzL2JhY2twb3J0cy9fX2luaXRfXy5weQotICAgIGZpCiB9CiAKIF9i dWlsZF9ydW50aW1lKCkgewpkaWZmIC0tZ2l0IGEvcGtnL3BpcC9zZXR1cF9waXAucHkgYi9wa2cv cGlwL3NldHVwX3BpcC5weQppbmRleCA5MmRmNzRlLi4xN2EyNzBmIDEwMDY0NAotLS0gYS9wa2cv cGlwL3NldHVwX3BpcC5weQorKysgYi9wa2cvcGlwL3NldHVwX3BpcC5weQpAQCAtOTYsNyArOTYs NiBAQCBzZXR1cCgKICAgICAgICAgICAgICJGbGFzay1CYWJlbEV4PT0wLjkuMyIKICAgICAgICAg XSwKICAgICAgICAgIjpweXRob25fdmVyc2lvbjw9JzIuNyciOiBbCi0gICAgICAgICAgICAiYmFj a3BvcnRzLmNzdj09MS4wLjUiLAogICAgICAgICAgICAgImltcG9ydGxpYj09MS4wLjMiCiAgICAg ICAgIF0sCiAgICAgICAgICI6cHl0aG9uX3ZlcnNpb24+PScyLjcnIjogWwpkaWZmIC0tZ2l0IGEv cmVxdWlyZW1lbnRzLnR4dCBiL3JlcXVpcmVtZW50cy50eHQKaW5kZXggNzRjNDYwMy4uOTJlYWU3 ZCAxMDA2NDQKLS0tIGEvcmVxdWlyZW1lbnRzLnR4dAorKysgYi9yZXF1aXJlbWVudHMudHh0CkBA IC00NCw3ICs0NCw2IEBAIHNzaHR1bm5lbD49MC4xLjM7ICAgICAgICAgICAgICAgcHl0aG9uX3Zl cnNpb24gPj0gJzIuNycKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBNb2R1bGVzIHNwZWNpZmljYWxseSByZXF1aXJlZCBm b3IgUHl0aG9uMi43IG9yIGxlc3NlciB2ZXJzaW9uCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJhY2twb3J0cy5jc3Y9PTEu MC41OyAgICAgICAgICAgcHl0aG9uX3ZlcnNpb24gPD0gJzIuNycKIGltcG9ydGxpYj09MS4wLjM7 ICAgICAgICAgICAgICAgcHl0aG9uX3ZlcnNpb24gPD0gJzIuNycKIAogIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi91dGlscy9jc3YucHkgYi93ZWIvcGdhZG1pbi91dGlscy9jc3YucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkMGYyNwotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2Nzdi5weQpAQCAtMCwwICsxLDc0OSBAQAorIiIiCitQ WVRIT04gU09GVFdBUkUgRk9VTkRBVElPTiBMSUNFTlNFIFZFUlNJT04gMgorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVF TUVOVCBpcyBiZXR3ZWVuIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorKCJQU0YiKSwg YW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5n IGFuZAorb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgKCJQeXRob24iKSBpbiBzb3VyY2Ug b3IgYmluYXJ5IGZvcm0gYW5kCitpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgorCisyLiBT dWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVt ZW50LCBQU0YgaGVyZWJ5CitncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHkt ZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwKK2FuYWx5emUsIHRlc3QsIHBl cmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywK K2Rpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVy aXZhdGl2ZSB2ZXJzaW9uLAorcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MgTGljZW5zZSBB Z3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsCitpLmUuLCAiQ29weXJpZ2h0 IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5 LDIwMTAKKzIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDIwMTcgUHl0aG9uIFNv ZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4g UHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkKK0xp Y2Vuc2VlLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZl IHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFy dCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFi bGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFn cmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUg Y2hhbmdlcyBtYWRlIHRvIFB5dGhvbi4KKworNC4gUFNGIGlzIG1ha2luZyBQeXRob24gYXZhaWxh YmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiAgUFNGIE1BS0VTIE5PIFJFUFJF U0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9G IEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORAorRElTQ0xBSU1T IEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklU TkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhP TiBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gUFNGIFNI QUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhP TgorRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg T1IgTE9TUyBBUworQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVS V0lTRSBVU0lORyBQWVRIT04sCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3Jl ZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFj aCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIE5vdGhpbmcgaW4gdGhpcyBMaWNl bnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQorcmVsYXRpb25zaGlw IG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBQU0YgYW5k CitMaWNlbnNlZS4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlz c2lvbiB0byB1c2UgUFNGCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsg c2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNl bnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9y IG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorIiIi CisKKyMgQ2hhbmdlczogSGFuZGxlIHRoZSBudWxsIHZhbHVlcyBmb3IgUVVPVEVfTk9OTlVNRVJJ QyBzdHJhdGVneS4KKyMgSWYgdmFsdWUgaXMgTm9uZSB0aGVuIG5vIG5lZWQgdG8gcXVvdGUgdGhh dCB2YWx1ZXMgYXMgaXQgcmVwcmVzZW50cyBudWxsCisjIHZhbHVlIGFuZCBlbXB0eSBzdHJpbmcg d2lsbCBiZSByZXByZXNlbnRlZCBieSAnJy4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmlj b2RlX2xpdGVyYWxzLCBhYnNvbHV0ZV9pbXBvcnQKKworX19hbGxfXyA9IFsiUVVPVEVfTUlOSU1B TCIsICJRVU9URV9BTEwiLCAiUVVPVEVfTk9OTlVNRVJJQyIsICJRVU9URV9OT05FIiwKKyAgICAg ICAgICAgIkVycm9yIiwgIkRpYWxlY3QiLCAiX19kb2NfXyIsICJleGNlbCIsICJleGNlbF90YWIi LAorICAgICAgICAgICAiZmllbGRfc2l6ZV9saW1pdCIsICJyZWFkZXIiLCAid3JpdGVyIiwgInJl Z2lzdGVyX2RpYWxlY3QiLAorICAgICAgICAgICAiZ2V0X2RpYWxlY3QiLCAibGlzdF9kaWFsZWN0 cyIsICJ1bnJlZ2lzdGVyX2RpYWxlY3QiLAorICAgICAgICAgICAiX192ZXJzaW9uX18iLCAiRGlj dFJlYWRlciIsICJEaWN0V3JpdGVyIl0KKworaW1wb3J0IHJlCitpbXBvcnQgbnVtYmVycworZnJv bSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gY3N2IGltcG9ydCAoCisgICAgUVVPVEVfTUlOSU1B TCwgUVVPVEVfQUxMLCBRVU9URV9OT05OVU1FUklDLCBRVU9URV9OT05FLAorICAgIF9fdmVyc2lv bl9fLCBfX2RvY19fLCBFcnJvciwgZmllbGRfc2l6ZV9saW1pdCwKKykKKworIyBTdHVmZiBuZWVk ZWQgZnJvbSBzaXgKK2ltcG9ydCBzeXMKK1BZMyA9IHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMwor aWYgUFkzOgorICAgIHN0cmluZ190eXBlcyA9IHN0cgorICAgIHRleHRfdHlwZSA9IHN0cgorICAg IGJpbmFyeV90eXBlID0gYnl0ZXMKKyAgICB1bmljaHIgPSBjaHIKK2Vsc2U6CisgICAgc3RyaW5n X3R5cGVzID0gYmFzZXN0cmluZworICAgIHRleHRfdHlwZSA9IHVuaWNvZGUKKyAgICBiaW5hcnlf dHlwZSA9IHN0cgorCisKK2NsYXNzIFF1b3RlU3RyYXRlZ3kob2JqZWN0KToKKyAgICBxdW90aW5n ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpYWxlY3QpOgorICAgICAgICBpZiBz ZWxmLnF1b3RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgZGlhbGVjdC5xdW90 aW5nID09IHNlbGYucXVvdGluZworICAgICAgICBzZWxmLmRpYWxlY3QgPSBkaWFsZWN0CisgICAg ICAgIHNlbGYuc2V0dXAoKQorCisgICAgICAgIGVzY2FwZV9wYXR0ZXJuX3F1b3RlZCA9IHInKHtx dW90ZWNoYXJ9KScuZm9ybWF0KAorICAgICAgICAgICAgcXVvdGVjaGFyPXJlLmVzY2FwZShzZWxm LmRpYWxlY3QucXVvdGVjaGFyIG9yICciJykpCisgICAgICAgIGVzY2FwZV9wYXR0ZXJuX3VucXVv dGVkID0gcicoW3tzcGVjaWFsY2hhcnN9XSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNwZWNpYWxj aGFycz1yZS5lc2NhcGUoc2VsZi5zcGVjaWFsY2hhcnMpKQorCisgICAgICAgIHNlbGYuZXNjYXBl X3JlX3F1b3RlZCA9IHJlLmNvbXBpbGUoZXNjYXBlX3BhdHRlcm5fcXVvdGVkKQorICAgICAgICBz ZWxmLmVzY2FwZV9yZV91bnF1b3RlZCA9IHJlLmNvbXBpbGUoZXNjYXBlX3BhdHRlcm5fdW5xdW90 ZWQpCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCBm b3Igc3RyYXRlZ3ktd2lkZSBvcHRpbWl6YXRpb25zLiIiIgorCisgICAgZGVmIHF1b3RlZChzZWxm LCBmaWVsZD1Ob25lLCByYXdfZmllbGQ9Tm9uZSwgb25seT1Ob25lKToKKyAgICAgICAgIiIiRGV0 ZXJtaW5lIHdoZXRoZXIgdGhpcyBmaWVsZCBzaG91bGQgYmUgcXVvdGVkLiIiIgorICAgICAgICBy YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgJ3F1b3RlZCBtdXN0IGJlIGlt cGxlbWVudGVkIGJ5IGEgc3ViY2xhc3MnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNwZWNp YWxjaGFycyhzZWxmKToKKyAgICAgICAgIiIiVGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG5l ZWQgdG8gYmUgZXNjYXBlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigK KyAgICAgICAgICAgICdzcGVjaWFsY2hhcnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIHN1YmNs YXNzJykKKworICAgIGRlZiBlc2NhcGVfcmUoc2VsZiwgcXVvdGVkPU5vbmUpOgorICAgICAgICBp ZiBxdW90ZWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5lc2NhcGVfcmVfcXVvdGVkCisgICAg ICAgIHJldHVybiBzZWxmLmVzY2FwZV9yZV91bnF1b3RlZAorCisgICAgZGVmIGVzY2FwZWNoYXIo c2VsZiwgcXVvdGVkPU5vbmUpOgorICAgICAgICBpZiBxdW90ZWQgYW5kIHNlbGYuZGlhbGVjdC5k b3VibGVxdW90ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRpYWxlY3QucXVvdGVjaGFyCisg ICAgICAgIHJldHVybiBzZWxmLmRpYWxlY3QuZXNjYXBlY2hhcgorCisgICAgZGVmIHByZXBhcmUo c2VsZiwgcmF3X2ZpZWxkLCBvbmx5PU5vbmUpOgorICAgICAgICBmaWVsZCA9IHRleHRfdHlwZShy YXdfZmllbGQgaWYgcmF3X2ZpZWxkIGlzIG5vdCBOb25lIGVsc2UgJycpCisgICAgICAgIHF1b3Rl ZCA9IHNlbGYucXVvdGVkKGZpZWxkPWZpZWxkLCByYXdfZmllbGQ9cmF3X2ZpZWxkLCBvbmx5PW9u bHkpCisKKyAgICAgICAgZXNjYXBlX3JlID0gc2VsZi5lc2NhcGVfcmUocXVvdGVkPXF1b3RlZCkK KyAgICAgICAgZXNjYXBlY2hhciA9IHNlbGYuZXNjYXBlY2hhcihxdW90ZWQ9cXVvdGVkKQorCisg ICAgICAgIGlmIGVzY2FwZV9yZS5zZWFyY2goZmllbGQpOgorICAgICAgICAgICAgZXNjYXBlY2hh ciA9ICdcXFxcJyBpZiBlc2NhcGVjaGFyID09ICdcXCcgZWxzZSBlc2NhcGVjaGFyCisgICAgICAg ICAgICBpZiBub3QgZXNjYXBlY2hhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcignTm8g ZXNjYXBlY2hhciBpcyBzZXQnKQorICAgICAgICAgICAgZXNjYXBlX3JlcGxhY2UgPSByJ3tlc2Nh cGVjaGFyfVwxJy5mb3JtYXQoZXNjYXBlY2hhcj1lc2NhcGVjaGFyKQorICAgICAgICAgICAgZmll bGQgPSBlc2NhcGVfcmUuc3ViKGVzY2FwZV9yZXBsYWNlLCBmaWVsZCkKKworICAgICAgICBpZiBx dW90ZWQ6CisgICAgICAgICAgICBmaWVsZCA9ICd7cXVvdGVjaGFyfXtmaWVsZH17cXVvdGVjaGFy fScuZm9ybWF0KAorICAgICAgICAgICAgICAgIHF1b3RlY2hhcj1zZWxmLmRpYWxlY3QucXVvdGVj aGFyLCBmaWVsZD1maWVsZCkKKworICAgICAgICByZXR1cm4gZmllbGQKKworCitjbGFzcyBRdW90 ZU1pbmltYWxTdHJhdGVneShRdW90ZVN0cmF0ZWd5KToKKyAgICBxdW90aW5nID0gUVVPVEVfTUlO SU1BTAorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzZWxmLnF1b3RlZF9yZSA9IHJl LmNvbXBpbGUocidbe3NwZWNpYWxjaGFyc31dJy5mb3JtYXQoCisgICAgICAgICAgICBzcGVjaWFs Y2hhcnM9cmUuZXNjYXBlKHNlbGYuc3BlY2lhbGNoYXJzKSkpCisKKyAgICBAcHJvcGVydHkKKyAg ICBkZWYgc3BlY2lhbGNoYXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAg c2VsZi5kaWFsZWN0LmxpbmV0ZXJtaW5hdG9yICsKKyAgICAgICAgICAgIHNlbGYuZGlhbGVjdC5x dW90ZWNoYXIgKworICAgICAgICAgICAgc2VsZi5kaWFsZWN0LmRlbGltaXRlciArCisgICAgICAg ICAgICAoc2VsZi5kaWFsZWN0LmVzY2FwZWNoYXIgb3IgJycpCisgICAgICAgICkKKworICAgIGRl ZiBxdW90ZWQoc2VsZiwgZmllbGQsIG9ubHksICoqa3dhcmdzKToKKyAgICAgICAgaWYgZmllbGQg PT0gc2VsZi5kaWFsZWN0LnF1b3RlY2hhciBhbmQgbm90IHNlbGYuZGlhbGVjdC5kb3VibGVxdW90 ZToKKyAgICAgICAgICAgICMgSWYgdGhlIG9ubHkgY2hhcmFjdGVyIGluIHRoZSBmaWVsZCBpcyB0 aGUgcXVvdGVjaGFyLCBhbmQKKyAgICAgICAgICAgICMgZG91YmxlcXVvdGUgaXMgZmFsc2UsIHRo ZW4ganVzdCBlc2NhcGUgd2l0aG91dCBvdXRlciBxdW90ZXMuCisgICAgICAgICAgICByZXR1cm4g RmFsc2UKKyAgICAgICAgcmV0dXJuIGZpZWxkID09ICcnIGFuZCBvbmx5IG9yIGJvb2woc2VsZi5x dW90ZWRfcmUuc2VhcmNoKGZpZWxkKSkKKworCitjbGFzcyBRdW90ZUFsbFN0cmF0ZWd5KFF1b3Rl U3RyYXRlZ3kpOgorICAgIHF1b3RpbmcgPSBRVU9URV9BTEwKKworICAgIEBwcm9wZXJ0eQorICAg IGRlZiBzcGVjaWFsY2hhcnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRpYWxlY3QucXVv dGVjaGFyCisKKyAgICBkZWYgcXVvdGVkKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJu IFRydWUKKworCitjbGFzcyBRdW90ZU5vbm51bWVyaWNTdHJhdGVneShRdW90ZVN0cmF0ZWd5KToK KyAgICBxdW90aW5nID0gUVVPVEVfTk9OTlVNRVJJQworCisgICAgQHByb3BlcnR5CisgICAgZGVm IHNwZWNpYWxjaGFycyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYu ZGlhbGVjdC5saW5ldGVybWluYXRvciArCisgICAgICAgICAgICBzZWxmLmRpYWxlY3QucXVvdGVj aGFyICsKKyAgICAgICAgICAgIHNlbGYuZGlhbGVjdC5kZWxpbWl0ZXIgKworICAgICAgICAgICAg KHNlbGYuZGlhbGVjdC5lc2NhcGVjaGFyIG9yICcnKQorICAgICAgICApCisKKyAgICBkZWYgcXVv dGVkKHNlbGYsIHJhd19maWVsZCwgKiprd2FyZ3MpOgorICAgICAgICAjIEhhbmRsZSB0aGUgbnVs bCB2YWx1ZSBpZiByYXdfZmllbGQgaXMgTm9uZSB0aGVuIGl0IHJlcHJlc2VudHMKKyAgICAgICAg IyBudWxsIHZhbHVlLgorICAgICAgICBpZiByYXdfZmllbGQgaXMgTm9uZToKKyAgICAgICAgICAg IHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UocmF3X2ZpZWxkLCBu dW1iZXJzLk51bWJlcikKKworCitjbGFzcyBRdW90ZU5vbmVTdHJhdGVneShRdW90ZVN0cmF0ZWd5 KToKKyAgICBxdW90aW5nID0gUVVPVEVfTk9ORQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNw ZWNpYWxjaGFycyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYuZGlh bGVjdC5saW5ldGVybWluYXRvciArCisgICAgICAgICAgICAoc2VsZi5kaWFsZWN0LnF1b3RlY2hh ciBvciAnJykgKworICAgICAgICAgICAgc2VsZi5kaWFsZWN0LmRlbGltaXRlciArCisgICAgICAg ICAgICAoc2VsZi5kaWFsZWN0LmVzY2FwZWNoYXIgb3IgJycpCisgICAgICAgICkKKworICAgIGRl ZiBxdW90ZWQoc2VsZiwgZmllbGQsIG9ubHksICoqa3dhcmdzKToKKyAgICAgICAgaWYgZmllbGQg PT0gJycgYW5kIG9ubHk6CisgICAgICAgICAgICByYWlzZSBFcnJvcignc2luZ2xlIGVtcHR5IGZp ZWxkIHJlY29yZCBtdXN0IGJlIHF1b3RlZCcpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2Ns YXNzIHdyaXRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlb2JqLCBkaWFs ZWN0PSdleGNlbCcsICoqZm10cGFyYW1zKToKKyAgICAgICAgaWYgZmlsZW9iaiBpcyBOb25lOgor ICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmaWxlb2JqIG11c3QgYmUgZmlsZS1saWtlLCBu b3QgTm9uZScpCisKKyAgICAgICAgc2VsZi5maWxlb2JqID0gZmlsZW9iagorCisgICAgICAgIGlm IGlzaW5zdGFuY2UoZGlhbGVjdCwgdGV4dF90eXBlKToKKyAgICAgICAgICAgIGRpYWxlY3QgPSBn ZXRfZGlhbGVjdChkaWFsZWN0KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGlh bGVjdCA9IERpYWxlY3QuY29tYmluZShkaWFsZWN0LCBmbXRwYXJhbXMpCisgICAgICAgIGV4Y2Vw dCBFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCplLmFyZ3MpCisKKyAg ICAgICAgc3RyYXRlZ2llcyA9IHsKKyAgICAgICAgICAgIFFVT1RFX01JTklNQUw6IFF1b3RlTWlu aW1hbFN0cmF0ZWd5LAorICAgICAgICAgICAgUVVPVEVfQUxMOiBRdW90ZUFsbFN0cmF0ZWd5LAor ICAgICAgICAgICAgUVVPVEVfTk9OTlVNRVJJQzogUXVvdGVOb25udW1lcmljU3RyYXRlZ3ksCisg ICAgICAgICAgICBRVU9URV9OT05FOiBRdW90ZU5vbmVTdHJhdGVneSwKKyAgICAgICAgfQorICAg ICAgICBzZWxmLnN0cmF0ZWd5ID0gc3RyYXRlZ2llc1tzZWxmLmRpYWxlY3QucXVvdGluZ10oc2Vs Zi5kaWFsZWN0KQorCisgICAgZGVmIHdyaXRlcm93KHNlbGYsIHJvdyk6CisgICAgICAgIGlmIHJv dyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ3JvdyBtdXN0IGJlIGFuIGl0ZXJh YmxlJykKKworICAgICAgICByb3cgPSBsaXN0KHJvdykKKyAgICAgICAgb25seSA9IGxlbihyb3cp ID09IDEKKyAgICAgICAgcm93ID0gW3NlbGYuc3RyYXRlZ3kucHJlcGFyZShmaWVsZCwgb25seT1v bmx5KSBmb3IgZmllbGQgaW4gcm93XQorCisgICAgICAgIGxpbmUgPSBzZWxmLmRpYWxlY3QuZGVs aW1pdGVyLmpvaW4ocm93KSArIHNlbGYuZGlhbGVjdC5saW5ldGVybWluYXRvcgorICAgICAgICBy ZXR1cm4gc2VsZi5maWxlb2JqLndyaXRlKGxpbmUpCisKKyAgICBkZWYgd3JpdGVyb3dzKHNlbGYs IHJvd3MpOgorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICBzZWxmLndyaXRl cm93KHJvdykKKworCitTVEFSVF9SRUNPUkQgPSAwCitTVEFSVF9GSUVMRCA9IDEKK0VTQ0FQRURf Q0hBUiA9IDIKK0lOX0ZJRUxEID0gMworSU5fUVVPVEVEX0ZJRUxEID0gNAorRVNDQVBFX0lOX1FV T1RFRF9GSUVMRCA9IDUKK1FVT1RFX0lOX1FVT1RFRF9GSUVMRCA9IDYKK0VBVF9DUk5MID0gNwor QUZURVJfRVNDQVBFRF9DUk5MID0gOAorCisKK2NsYXNzIHJlYWRlcihvYmplY3QpOgorICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBmaWxlb2JqLCBkaWFsZWN0PSdleGNlbCcsICoqZm10cGFyYW1zKToK KyAgICAgICAgc2VsZi5pbnB1dF9pdGVyID0gaXRlcihmaWxlb2JqKQorCisgICAgICAgIGlmIGlz aW5zdGFuY2UoZGlhbGVjdCwgdGV4dF90eXBlKToKKyAgICAgICAgICAgIGRpYWxlY3QgPSBnZXRf ZGlhbGVjdChkaWFsZWN0KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGlhbGVj dCA9IERpYWxlY3QuY29tYmluZShkaWFsZWN0LCBmbXRwYXJhbXMpCisgICAgICAgIGV4Y2VwdCBF cnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCplLmFyZ3MpCisKKyAgICAg ICAgc2VsZi5maWVsZHMgPSBOb25lCisgICAgICAgIHNlbGYuZmllbGQgPSBOb25lCisgICAgICAg IHNlbGYubGluZV9udW0gPSAwCisKKyAgICBkZWYgcGFyc2VfcmVzZXQoc2VsZik6CisgICAgICAg IHNlbGYuZmllbGRzID0gW10KKyAgICAgICAgc2VsZi5maWVsZCA9IFtdCisgICAgICAgIHNlbGYu c3RhdGUgPSBTVEFSVF9SRUNPUkQKKyAgICAgICAgc2VsZi5udW1lcmljX2ZpZWxkID0gRmFsc2UK KworICAgIGRlZiBwYXJzZV9zYXZlX2ZpZWxkKHNlbGYpOgorICAgICAgICBmaWVsZCA9ICcnLmpv aW4oc2VsZi5maWVsZCkKKyAgICAgICAgc2VsZi5maWVsZCA9IFtdCisgICAgICAgIGlmIHNlbGYu bnVtZXJpY19maWVsZDoKKyAgICAgICAgICAgIGZpZWxkID0gZmxvYXQoZmllbGQpCisgICAgICAg ICAgICBzZWxmLm51bWVyaWNfZmllbGQgPSBGYWxzZQorICAgICAgICBzZWxmLmZpZWxkcy5hcHBl bmQoZmllbGQpCisKKyAgICBkZWYgcGFyc2VfYWRkX2NoYXIoc2VsZiwgYyk6CisgICAgICAgIGlm IGxlbihzZWxmLmZpZWxkKSA+PSBmaWVsZF9zaXplX2xpbWl0KCk6CisgICAgICAgICAgICByYWlz ZSBFcnJvcignZmllbGQgc2l6ZSBsaW1pdCBleGNlZWRlZCcpCisgICAgICAgIHNlbGYuZmllbGQu YXBwZW5kKGMpCisKKyAgICBkZWYgcGFyc2VfcHJvY2Vzc19jaGFyKHNlbGYsIGMpOgorICAgICAg ICBzd2l0Y2ggPSB7CisgICAgICAgICAgICBTVEFSVF9SRUNPUkQ6IHNlbGYuX3BhcnNlX3N0YXJ0 X3JlY29yZCwKKyAgICAgICAgICAgIFNUQVJUX0ZJRUxEOiBzZWxmLl9wYXJzZV9zdGFydF9maWVs ZCwKKyAgICAgICAgICAgIEVTQ0FQRURfQ0hBUjogc2VsZi5fcGFyc2VfZXNjYXBlZF9jaGFyLAor ICAgICAgICAgICAgQUZURVJfRVNDQVBFRF9DUk5MOiBzZWxmLl9wYXJzZV9hZnRlcl9lc2NhcGVk X2NybmwsCisgICAgICAgICAgICBJTl9GSUVMRDogc2VsZi5fcGFyc2VfaW5fZmllbGQsCisgICAg ICAgICAgICBJTl9RVU9URURfRklFTEQ6IHNlbGYuX3BhcnNlX2luX3F1b3RlZF9maWVsZCwKKyAg ICAgICAgICAgIEVTQ0FQRV9JTl9RVU9URURfRklFTEQ6IHNlbGYuX3BhcnNlX2VzY2FwZV9pbl9x dW90ZWRfZmllbGQsCisgICAgICAgICAgICBRVU9URV9JTl9RVU9URURfRklFTEQ6IHNlbGYuX3Bh cnNlX3F1b3RlX2luX3F1b3RlZF9maWVsZCwKKyAgICAgICAgICAgIEVBVF9DUk5MOiBzZWxmLl9w YXJzZV9lYXRfY3JubCwKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3dpdGNoW3NlbGYuc3Rh dGVdKGMpCisKKyAgICBkZWYgX3BhcnNlX3N0YXJ0X3JlY29yZChzZWxmLCBjKToKKyAgICAgICAg aWYgYyA9PSAnXDAnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgYyA9PSAnXG4n IG9yIGMgPT0gJ1xyJzoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBFQVRfQ1JOTAorICAgICAg ICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IFNUQVJUX0ZJRUxECisgICAgICAg IHJldHVybiBzZWxmLl9wYXJzZV9zdGFydF9maWVsZChjKQorCisgICAgZGVmIF9wYXJzZV9zdGFy dF9maWVsZChzZWxmLCBjKToKKyAgICAgICAgaWYgYyA9PSAnXG4nIG9yIGMgPT0gJ1xyJyBvciBj ID09ICdcMCc6CisgICAgICAgICAgICBzZWxmLnBhcnNlX3NhdmVfZmllbGQoKQorICAgICAgICAg ICAgc2VsZi5zdGF0ZSA9IFNUQVJUX1JFQ09SRCBpZiBjID09ICdcMCcgZWxzZSBFQVRfQ1JOTAor ICAgICAgICBlbGlmIChjID09IHNlbGYuZGlhbGVjdC5xdW90ZWNoYXIgYW5kCisgICAgICAgICAg ICAgIHNlbGYuZGlhbGVjdC5xdW90aW5nICE9IFFVT1RFX05PTkUpOgorICAgICAgICAgICAgc2Vs Zi5zdGF0ZSA9IElOX1FVT1RFRF9GSUVMRAorICAgICAgICBlbGlmIGMgPT0gc2VsZi5kaWFsZWN0 LmVzY2FwZWNoYXI6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gRVNDQVBFRF9DSEFSCisgICAg ICAgIGVsaWYgYyA9PSAnICcgYW5kIHNlbGYuZGlhbGVjdC5za2lwaW5pdGlhbHNwYWNlOgorICAg ICAgICAgICAgcGFzcyAgIyBJZ25vcmUgc3BhY2UgYXQgc3RhcnQgb2YgZmllbGQKKyAgICAgICAg ZWxpZiBjID09IHNlbGYuZGlhbGVjdC5kZWxpbWl0ZXI6CisgICAgICAgICAgICAjIFNhdmUgZW1w dHkgZmllbGQKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc2F2ZV9maWVsZCgpCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICAjIEJlZ2luIG5ldyB1bnF1b3RlZCBmaWVsZAorICAgICAgICAgICAg aWYgc2VsZi5kaWFsZWN0LnF1b3RpbmcgPT0gUVVPVEVfTk9OTlVNRVJJQzoKKyAgICAgICAgICAg ICAgICBzZWxmLm51bWVyaWNfZmllbGQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnBhcnNlX2Fk ZF9jaGFyKGMpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gSU5fRklFTEQKKworICAgIGRlZiBf cGFyc2VfZXNjYXBlZF9jaGFyKHNlbGYsIGMpOgorICAgICAgICBpZiBjID09ICdcbicgb3IgYyA9 PSAnXHInOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9hZGRfY2hhcihjKQorICAgICAgICAgICAg c2VsZi5zdGF0ZSA9IEFGVEVSX0VTQ0FQRURfQ1JOTAorICAgICAgICAgICAgcmV0dXJuCisgICAg ICAgIGlmIGMgPT0gJ1wwJzoKKyAgICAgICAgICAgIGMgPSAnXG4nCisgICAgICAgIHNlbGYucGFy c2VfYWRkX2NoYXIoYykKKyAgICAgICAgc2VsZi5zdGF0ZSA9IElOX0ZJRUxECisKKyAgICBkZWYg X3BhcnNlX2FmdGVyX2VzY2FwZWRfY3JubChzZWxmLCBjKToKKyAgICAgICAgaWYgYyA9PSAnXDAn OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9pbl9maWVs ZChjKQorCisgICAgZGVmIF9wYXJzZV9pbl9maWVsZChzZWxmLCBjKToKKyAgICAgICAgIyBJbiB1 bnF1b3RlZCBmaWVsZAorICAgICAgICBpZiBjID09ICdcbicgb3IgYyA9PSAnXHInIG9yIGMgPT0g J1wwJzoKKyAgICAgICAgICAgICMgRW5kIG9mIGxpbmUgLSByZXR1cm4gW2ZpZWxkc10KKyAgICAg ICAgICAgIHNlbGYucGFyc2Vfc2F2ZV9maWVsZCgpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0g U1RBUlRfUkVDT1JEIGlmIGMgPT0gJ1wwJyBlbHNlIEVBVF9DUk5MCisgICAgICAgIGVsaWYgYyA9 PSBzZWxmLmRpYWxlY3QuZXNjYXBlY2hhcjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBFU0NB UEVEX0NIQVIKKyAgICAgICAgZWxpZiBjID09IHNlbGYuZGlhbGVjdC5kZWxpbWl0ZXI6CisgICAg ICAgICAgICBzZWxmLnBhcnNlX3NhdmVfZmllbGQoKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9 IFNUQVJUX0ZJRUxECisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE5vcm1hbCBjaGFyYWN0 ZXIgLSBzYXZlIGluIGZpZWxkCisgICAgICAgICAgICBzZWxmLnBhcnNlX2FkZF9jaGFyKGMpCisK KyAgICBkZWYgX3BhcnNlX2luX3F1b3RlZF9maWVsZChzZWxmLCBjKToKKyAgICAgICAgaWYgYyA9 PSAnXDAnOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIGMgPT0gc2VsZi5kaWFsZWN0 LmVzY2FwZWNoYXI6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gRVNDQVBFX0lOX1FVT1RFRF9G SUVMRAorICAgICAgICBlbGlmIChjID09IHNlbGYuZGlhbGVjdC5xdW90ZWNoYXIgYW5kCisgICAg ICAgICAgICAgIHNlbGYuZGlhbGVjdC5xdW90aW5nICE9IFFVT1RFX05PTkUpOgorICAgICAgICAg ICAgaWYgc2VsZi5kaWFsZWN0LmRvdWJsZXF1b3RlOgorICAgICAgICAgICAgICAgIHNlbGYuc3Rh dGUgPSBRVU9URV9JTl9RVU9URURfRklFTEQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgc2VsZi5zdGF0ZSA9IElOX0ZJRUxECisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz ZWxmLnBhcnNlX2FkZF9jaGFyKGMpCisKKyAgICBkZWYgX3BhcnNlX2VzY2FwZV9pbl9xdW90ZWRf ZmllbGQoc2VsZiwgYyk6CisgICAgICAgIGlmIGMgPT0gJ1wwJzoKKyAgICAgICAgICAgIGMgPSAn XG4nCisKKyAgICAgICAgc2VsZi5wYXJzZV9hZGRfY2hhcihjKQorICAgICAgICBzZWxmLnN0YXRl ID0gSU5fUVVPVEVEX0ZJRUxECisKKyAgICBkZWYgX3BhcnNlX3F1b3RlX2luX3F1b3RlZF9maWVs ZChzZWxmLCBjKToKKyAgICAgICAgaWYgKHNlbGYuZGlhbGVjdC5xdW90aW5nICE9IFFVT1RFX05P TkUgYW5kCisgICAgICAgICAgICAgICAgYyA9PSBzZWxmLmRpYWxlY3QucXVvdGVjaGFyKToKKyAg ICAgICAgICAgICMgc2F2ZSAiIiBhcyAiCisgICAgICAgICAgICBzZWxmLnBhcnNlX2FkZF9jaGFy KGMpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gSU5fUVVPVEVEX0ZJRUxECisgICAgICAgIGVs aWYgYyA9PSBzZWxmLmRpYWxlY3QuZGVsaW1pdGVyOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9z YXZlX2ZpZWxkKCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBTVEFSVF9GSUVMRAorICAgICAg ICBlbGlmIGMgPT0gJ1xuJyBvciBjID09ICdccicgb3IgYyA9PSAnXDAnOgorICAgICAgICAgICAg IyBFbmQgb2YgbGluZSA9IHJldHVybiBbZmllbGRzXQorICAgICAgICAgICAgc2VsZi5wYXJzZV9z YXZlX2ZpZWxkKCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBTVEFSVF9SRUNPUkQgaWYgYyA9 PSAnXDAnIGVsc2UgRUFUX0NSTkwKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5kaWFsZWN0LnN0cmlj dDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfYWRkX2NoYXIoYykKKyAgICAgICAgICAgIHNlbGYu c3RhdGUgPSBJTl9GSUVMRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBpbGxlZ2FsCisg ICAgICAgICAgICByYWlzZSBFcnJvcigie2RlbGltaXRlcn0nIGV4cGVjdGVkIGFmdGVyICd7cXVv dGVjaGFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGRlbGltaXRlcj1zZWxmLmRpYWxlY3Qu ZGVsaW1pdGVyLAorICAgICAgICAgICAgICAgIHF1b3RlY2hhcj1zZWxmLmRpYWxlY3QucXVvdGVj aGFyLAorICAgICAgICAgICAgKSkKKworICAgIGRlZiBfcGFyc2VfZWF0X2Nybmwoc2VsZiwgYyk6 CisgICAgICAgIGlmIGMgPT0gJ1xuJyBvciBjID09ICdccic6CisgICAgICAgICAgICBwYXNzCisg ICAgICAgIGVsaWYgYyA9PSAnXDAnOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IFNUQVJUX1JF Q09SRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25ldy1saW5lIGNo YXJhY3RlciBzZWVuIGluIHVucXVvdGVkIGZpZWxkIC0gZG8geW91ICcKKyAgICAgICAgICAgICAg ICAgICAgICAgICduZWVkIHRvIG9wZW4gdGhlIGZpbGUgaW4gdW5pdmVyc2FsLW5ld2xpbmUgbW9k ZT8nKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisg ICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX3Jlc2V0KCkKKworICAg ICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVv YmogPSBuZXh0KHNlbGYuaW5wdXRfaXRlcikKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0 aW9uOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmZpZWxkKSAhPSAwIG9yIHNlbGYuc3Rh dGUgPT0gSU5fUVVPVEVEX0ZJRUxEOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRpYWxl Y3Quc3RyaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ3VuZXhwZWN0 ZWQgZW5kIG9mIGRhdGEnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3NhdmVfZmll bGQoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmllbGRzOgorICAgICAgICAgICAgICAgICAg ICBicmVhaworICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGxpbmVvYmosIHRleHRfdHlwZSk6CisgICAgICAgICAgICAgICAgdHlwID0gdHlwZShs aW5lb2JqKQorICAgICAgICAgICAgICAgIHR5cF9uYW1lID0gJ2J5dGVzJyBpZiB0eXAgPT0gYnl0 ZXMgZWxzZSB0eXAuX19uYW1lX18KKyAgICAgICAgICAgICAgICBlcnJfc3RyID0gKCdpdGVyYXRv ciBzaG91bGQgcmV0dXJuIHN0cmluZ3MsIG5vdCB7MH0nCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAnIChkaWQgeW91IG9wZW4gdGhlIGZpbGUgaW4gdGV4dCBtb2RlPyknKQorICAgICAgICAg ICAgICAgIHJhaXNlIEVycm9yKGVycl9zdHIuZm9ybWF0KHR5cF9uYW1lKSkKKworICAgICAgICAg ICAgc2VsZi5saW5lX251bSArPSAxCisgICAgICAgICAgICBmb3IgYyBpbiBsaW5lb2JqOgorICAg ICAgICAgICAgICAgIGlmIGMgPT0gJ1wwJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJy b3IoJ2xpbmUgY29udGFpbnMgTlVMTCBieXRlJykKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNl X3Byb2Nlc3NfY2hhcihjKQorCisgICAgICAgICAgICBzZWxmLnBhcnNlX3Byb2Nlc3NfY2hhcign XDAnKQorCisgICAgICAgICAgICBpZiBzZWxmLnN0YXRlID09IFNUQVJUX1JFQ09SRDoKKyAgICAg ICAgICAgICAgICBicmVhaworCisgICAgICAgIGZpZWxkcyA9IHNlbGYuZmllbGRzCisgICAgICAg IHNlbGYuZmllbGRzID0gTm9uZQorICAgICAgICByZXR1cm4gZmllbGRzCisKKyAgICBuZXh0ID0g X19uZXh0X18KKworCitfZGlhbGVjdF9yZWdpc3RyeSA9IHt9CisKKworZGVmIHJlZ2lzdGVyX2Rp YWxlY3QobmFtZSwgZGlhbGVjdD0nZXhjZWwnLCAqKmZtdHBhcmFtcyk6CisgICAgaWYgbm90IGlz aW5zdGFuY2UobmFtZSwgdGV4dF90eXBlKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCcibmFt ZSIgbXVzdCBiZSBhIHN0cmluZycpCisKKyAgICBkaWFsZWN0ID0gRGlhbGVjdC5leHRlbmQoZGlh bGVjdCwgZm10cGFyYW1zKQorCisgICAgdHJ5OgorICAgICAgICBEaWFsZWN0LnZhbGlkYXRlKGRp YWxlY3QpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBUeXBlRXJy b3IoJ2RpYWxlY3QgaXMgaW52YWxpZCcpCisKKyAgICBhc3NlcnQgbmFtZSBub3QgaW4gX2RpYWxl Y3RfcmVnaXN0cnkKKyAgICBfZGlhbGVjdF9yZWdpc3RyeVtuYW1lXSA9IGRpYWxlY3QKKworCitk ZWYgdW5yZWdpc3Rlcl9kaWFsZWN0KG5hbWUpOgorICAgIHRyeToKKyAgICAgICAgX2RpYWxlY3Rf cmVnaXN0cnkucG9wKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBF cnJvcignIntuYW1lfSIgbm90IGEgcmVnaXN0ZXJlZCBkaWFsZWN0Jy5mb3JtYXQobmFtZT1uYW1l KSkKKworCitkZWYgZ2V0X2RpYWxlY3QobmFtZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4g X2RpYWxlY3RfcmVnaXN0cnlbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJh aXNlIEVycm9yKCdDb3VsZCBub3QgZmluZCBkaWFsZWN0IHswfScuZm9ybWF0KG5hbWUpKQorCisK K2RlZiBsaXN0X2RpYWxlY3RzKCk6CisgICAgcmV0dXJuIGxpc3QoX2RpYWxlY3RfcmVnaXN0cnkp CisKKworY2xhc3MgRGlhbGVjdChvYmplY3QpOgorICAgICIiIkRlc2NyaWJlIGEgQ1NWIGRpYWxl Y3QuCisgICAgVGhpcyBtdXN0IGJlIHN1YmNsYXNzZWQgKHNlZSBjc3YuZXhjZWwpLiAgVmFsaWQg YXR0cmlidXRlcyBhcmU6CisgICAgZGVsaW1pdGVyLCBxdW90ZWNoYXIsIGVzY2FwZWNoYXIsIGRv dWJsZXF1b3RlLCBza2lwaW5pdGlhbHNwYWNlLAorICAgIGxpbmV0ZXJtaW5hdG9yLCBxdW90aW5n LCBzdHJpY3QuCisgICAgIiIiCisgICAgX25hbWUgPSAiIgorICAgIF92YWxpZCA9IEZhbHNlCisg ICAgIyBwbGFjZWhvbGRlcnMKKyAgICBkZWxpbWl0ZXIgPSBOb25lCisgICAgcXVvdGVjaGFyID0g Tm9uZQorICAgIGVzY2FwZWNoYXIgPSBOb25lCisgICAgZG91YmxlcXVvdGUgPSBOb25lCisgICAg c2tpcGluaXRpYWxzcGFjZSA9IE5vbmUKKyAgICBsaW5ldGVybWluYXRvciA9IE5vbmUKKyAgICBx dW90aW5nID0gTm9uZQorICAgIHN0cmljdCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKyAgICAgICAgc2VsZi52YWxpZGF0ZShzZWxmKQorICAgICAgICBpZiBzZWxmLl9fY2xhc3Nf XyAhPSBEaWFsZWN0OgorICAgICAgICAgICAgc2VsZi5fdmFsaWQgPSBUcnVlCisKKyAgICBAY2xh c3NtZXRob2QKKyAgICBkZWYgdmFsaWRhdGUoY2xzLCBkaWFsZWN0KToKKyAgICAgICAgZGlhbGVj dCA9IGNscy5leHRlbmQoZGlhbGVjdCkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkaWFs ZWN0LnF1b3RpbmcsIGludCk6CisgICAgICAgICAgICByYWlzZSBFcnJvcignInF1b3RpbmciIG11 c3QgYmUgYW4gaW50ZWdlcicpCisKKyAgICAgICAgaWYgZGlhbGVjdC5kZWxpbWl0ZXIgaXMgTm9u ZToKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCdkZWxpbWl0ZXIgbXVzdCBiZSBzZXQnKQorICAg ICAgICBjbHMudmFsaWRhdGVfdGV4dChkaWFsZWN0LCAnZGVsaW1pdGVyJykKKworICAgICAgICBp ZiBkaWFsZWN0LmxpbmV0ZXJtaW5hdG9yIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFcnJv cignbGluZXRlcm1pbmF0b3IgbXVzdCBiZSBzZXQnKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5j ZShkaWFsZWN0LmxpbmV0ZXJtaW5hdG9yLCB0ZXh0X3R5cGUpOgorICAgICAgICAgICAgcmFpc2Ug RXJyb3IoJyJsaW5ldGVybWluYXRvciIgbXVzdCBiZSBhIHN0cmluZycpCisKKyAgICAgICAgaWYg ZGlhbGVjdC5xdW90aW5nIG5vdCBpbiBbCisgICAgICAgICAgICAgICAgUVVPVEVfTk9ORSwgUVVP VEVfTUlOSU1BTCwgUVVPVEVfTk9OTlVNRVJJQywgUVVPVEVfQUxMXToKKyAgICAgICAgICAgIHJh aXNlIEVycm9yKCdJbnZhbGlkIHF1b3Rpbmcgc3BlY2lmaWVkJykKKworICAgICAgICBpZiBkaWFs ZWN0LnF1b3RpbmcgIT0gUVVPVEVfTk9ORToKKyAgICAgICAgICAgIGlmIGRpYWxlY3QucXVvdGVj aGFyIGlzIE5vbmUgYW5kIGRpYWxlY3QuZXNjYXBlY2hhciBpcyBOb25lOgorICAgICAgICAgICAg ICAgIHJhaXNlIEVycm9yKCdxdW90ZWNoYXIgbXVzdCBiZSBzZXQgaWYgcXVvdGluZyBlbmFibGVk JykKKyAgICAgICAgICAgIGlmIGRpYWxlY3QucXVvdGVjaGFyIGlzIG5vdCBOb25lOgorICAgICAg ICAgICAgICAgIGNscy52YWxpZGF0ZV90ZXh0KGRpYWxlY3QsICdxdW90ZWNoYXInKQorCisgICAg QHN0YXRpY21ldGhvZAorICAgIGRlZiB2YWxpZGF0ZV90ZXh0KGRpYWxlY3QsIGF0dHIpOgorICAg ICAgICB2YWwgPSBnZXRhdHRyKGRpYWxlY3QsIGF0dHIpCisgICAgICAgIGlmIG5vdCBpc2luc3Rh bmNlKHZhbCwgdGV4dF90eXBlKToKKyAgICAgICAgICAgIGlmIHR5cGUodmFsKSA9PSBieXRlczoK KyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcignInswfSIgbXVzdCBiZSBzdHJpbmcsIG5vdCBi eXRlcycuZm9ybWF0KGF0dHIpKQorICAgICAgICAgICAgcmFpc2UgRXJyb3IoJyJ7MH0iIG11c3Qg YmUgc3RyaW5nLCBub3QgezF9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgYXR0ciwgdHlwZSh2 YWwpLl9fbmFtZV9fKSkKKworICAgICAgICBpZiBsZW4odmFsKSAhPSAxOgorICAgICAgICAgICAg cmFpc2UgRXJyb3IoJyJ7MH0iIG11c3QgYmUgYSAxLWNoYXJhY3RlciBzdHJpbmcnLmZvcm1hdChh dHRyKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZGVmYXVsdHMoKToKKyAgICAgICAg cmV0dXJuIHsKKyAgICAgICAgICAgICdkZWxpbWl0ZXInOiAnLCcsCisgICAgICAgICAgICAnZG91 YmxlcXVvdGUnOiBUcnVlLAorICAgICAgICAgICAgJ2VzY2FwZWNoYXInOiBOb25lLAorICAgICAg ICAgICAgJ2xpbmV0ZXJtaW5hdG9yJzogJ1xyXG4nLAorICAgICAgICAgICAgJ3F1b3RlY2hhcic6 ICciJywKKyAgICAgICAgICAgICdxdW90aW5nJzogUVVPVEVfTUlOSU1BTCwKKyAgICAgICAgICAg ICdza2lwaW5pdGlhbHNwYWNlJzogRmFsc2UsCisgICAgICAgICAgICAnc3RyaWN0JzogRmFsc2Us CisgICAgICAgIH0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBleHRlbmQoY2xzLCBkaWFs ZWN0LCBmbXRwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGlhbGVjdCwgc3Ry aW5nX3R5cGVzKToKKyAgICAgICAgICAgIGRpYWxlY3QgPSBnZXRfZGlhbGVjdChkaWFsZWN0KQor CisgICAgICAgIGlmIGZtdHBhcmFtcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRpYWxl Y3QKKworICAgICAgICBkZWZhdWx0cyA9IGNscy5kZWZhdWx0cygpCisKKyAgICAgICAgaWYgYW55 KHBhcmFtIG5vdCBpbiBkZWZhdWx0cyBmb3IgcGFyYW0gaW4gZm10cGFyYW1zKToKKyAgICAgICAg ICAgIHJhaXNlIFR5cGVFcnJvcignSW52YWxpZCBmbXRwYXJhbScpCisKKyAgICAgICAgc3BlY2lm aWVkID0gZGljdCgKKyAgICAgICAgICAgIChhdHRyLCBnZXRhdHRyKGRpYWxlY3QsIGF0dHIsIE5v bmUpKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gY2xzLmRlZmF1bHRzKCkKKyAgICAgICAgKQor CisgICAgICAgIHNwZWNpZmllZC51cGRhdGUoZm10cGFyYW1zKQorICAgICAgICByZXR1cm4gdHlw ZShzdHIoJ0V4dGVuZGVkRGlhbGVjdCcpLCAoY2xzLCksIHNwZWNpZmllZCkKKworICAgIEBjbGFz c21ldGhvZAorICAgIGRlZiBjb21iaW5lKGNscywgZGlhbGVjdCwgZm10cGFyYW1zKToKKyAgICAg ICAgIiIiQ3JlYXRlIGEgbmV3IGRpYWxlY3Qgd2l0aCBkZWZhdWx0cyBhbmQgYWRkZWQgcGFyYW1l dGVycy4iIiIKKyAgICAgICAgZGlhbGVjdCA9IGNscy5leHRlbmQoZGlhbGVjdCwgZm10cGFyYW1z KQorICAgICAgICBkZWZhdWx0cyA9IGNscy5kZWZhdWx0cygpCisgICAgICAgIHNwZWNpZmllZCA9 IGRpY3QoCisgICAgICAgICAgICAoYXR0ciwgZ2V0YXR0cihkaWFsZWN0LCBhdHRyLCBOb25lKSkK KyAgICAgICAgICAgIGZvciBhdHRyIGluIGRlZmF1bHRzCisgICAgICAgICAgICBpZiBnZXRhdHRy KGRpYWxlY3QsIGF0dHIsIE5vbmUpIGlzIG5vdCBOb25lIG9yCisgICAgICAgICAgICBhdHRyIGlu IFsncXVvdGVjaGFyJywgJ2RlbGltaXRlcicsICdsaW5ldGVybWluYXRvcicsICdxdW90aW5nJ10K KyAgICAgICAgKQorCisgICAgICAgIGRlZmF1bHRzLnVwZGF0ZShzcGVjaWZpZWQpCisgICAgICAg IGRpYWxlY3QgPSB0eXBlKHN0cignQ29tYmluZWREaWFsZWN0JyksIChjbHMsKSwgZGVmYXVsdHMp CisgICAgICAgIGNscy52YWxpZGF0ZShkaWFsZWN0KQorICAgICAgICByZXR1cm4gZGlhbGVjdCgp CisKKyAgICBkZWYgX19kZWxhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIHNlbGYuX3Zh bGlkOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2RpYWxlY3QgaXMgaW1tdXRh YmxlLicpCisgICAgICAgIHN1cGVyKERpYWxlY3QsIHNlbGYpLl9fZGVsYXR0cl9fKGF0dHIpCisK KyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgorICAgICAgICBpZiBzZWxm Ll92YWxpZDoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdkaWFsZWN0IGlzIGlt bXV0YWJsZS4nKQorICAgICAgICBzdXBlcihEaWFsZWN0LCBzZWxmKS5fX3NldGF0dHJfXyhhdHRy LCB2YWx1ZSkKKworCitjbGFzcyBleGNlbChEaWFsZWN0KToKKyAgICAiIiJEZXNjcmliZSB0aGUg dXN1YWwgcHJvcGVydGllcyBvZiBFeGNlbC1nZW5lcmF0ZWQgQ1NWIGZpbGVzLiIiIgorICAgIGRl bGltaXRlciA9ICcsJworICAgIHF1b3RlY2hhciA9ICciJworICAgIGRvdWJsZXF1b3RlID0gVHJ1 ZQorICAgIHNraXBpbml0aWFsc3BhY2UgPSBGYWxzZQorICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xy XG4nCisgICAgcXVvdGluZyA9IFFVT1RFX01JTklNQUwKKworCityZWdpc3Rlcl9kaWFsZWN0KCJl eGNlbCIsIGV4Y2VsKQorCisKK2NsYXNzIGV4Y2VsX3RhYihleGNlbCk6CisgICAgIiIiRGVzY3Jp YmUgdGhlIHVzdWFsIHByb3BlcnRpZXMgb2YgRXhjZWwtZ2VuZXJhdGVkIFRBQi1kZWxpbWl0ZWQg ZmlsZXMuIiIiCisgICAgZGVsaW1pdGVyID0gJ1x0JworCisKK3JlZ2lzdGVyX2RpYWxlY3QoImV4 Y2VsLXRhYiIsIGV4Y2VsX3RhYikKKworCitjbGFzcyB1bml4X2RpYWxlY3QoRGlhbGVjdCk6Cisg ICAgIiIiRGVzY3JpYmUgdGhlIHVzdWFsIHByb3BlcnRpZXMgb2YgVW5peC1nZW5lcmF0ZWQgQ1NW IGZpbGVzLiIiIgorICAgIGRlbGltaXRlciA9ICcsJworICAgIHF1b3RlY2hhciA9ICciJworICAg IGRvdWJsZXF1b3RlID0gVHJ1ZQorICAgIHNraXBpbml0aWFsc3BhY2UgPSBGYWxzZQorICAgIGxp bmV0ZXJtaW5hdG9yID0gJ1xuJworICAgIHF1b3RpbmcgPSBRVU9URV9BTEwKKworCityZWdpc3Rl cl9kaWFsZWN0KCJ1bml4IiwgdW5peF9kaWFsZWN0KQorCisKK2NsYXNzIERpY3RSZWFkZXIob2Jq ZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZiwgZmllbGRuYW1lcz1Ob25lLCByZXN0a2V5 PU5vbmUsIHJlc3R2YWw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGlhbGVjdD0iZXhjZWwiLCAq YXJncywgKiprd2RzKToKKyAgICAgICAgc2VsZi5fZmllbGRuYW1lcyA9IGZpZWxkbmFtZXMgICAj IGxpc3Qgb2Yga2V5cyBmb3IgdGhlIGRpY3QKKyAgICAgICAgc2VsZi5yZXN0a2V5ID0gcmVzdGtl eSAgICAgICAgICAjIGtleSB0byBjYXRjaCBsb25nIHJvd3MKKyAgICAgICAgc2VsZi5yZXN0dmFs ID0gcmVzdHZhbCAgICAgICAgICAjIGRlZmF1bHQgdmFsdWUgZm9yIHNob3J0IHJvd3MKKyAgICAg ICAgc2VsZi5yZWFkZXIgPSByZWFkZXIoZiwgZGlhbGVjdCwgKmFyZ3MsICoqa3dkcykKKyAgICAg ICAgc2VsZi5kaWFsZWN0ID0gZGlhbGVjdAorICAgICAgICBzZWxmLmxpbmVfbnVtID0gMAorCisg ICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQHByb3Bl cnR5CisgICAgZGVmIGZpZWxkbmFtZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2ZpZWxkbmFt ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWVs ZG5hbWVzID0gbmV4dChzZWxmLnJlYWRlcikKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0 aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5saW5lX251bSA9IHNlbGYu cmVhZGVyLmxpbmVfbnVtCisgICAgICAgIHJldHVybiBzZWxmLl9maWVsZG5hbWVzCisKKyAgICBA ZmllbGRuYW1lcy5zZXR0ZXIKKyAgICBkZWYgZmllbGRuYW1lcyhzZWxmLCB2YWx1ZSk6CisgICAg ICAgIHNlbGYuX2ZpZWxkbmFtZXMgPSB2YWx1ZQorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgor ICAgICAgICBpZiBzZWxmLmxpbmVfbnVtID09IDA6CisgICAgICAgICAgICAjIFVzZWQgb25seSBm b3IgaXRzIHNpZGUgZWZmZWN0LgorICAgICAgICAgICAgc2VsZi5maWVsZG5hbWVzCisgICAgICAg IHJvdyA9IG5leHQoc2VsZi5yZWFkZXIpCisgICAgICAgIHNlbGYubGluZV9udW0gPSBzZWxmLnJl YWRlci5saW5lX251bQorCisgICAgICAgICMgdW5saWtlIHRoZSBiYXNpYyByZWFkZXIsIHdlIHBy ZWZlciBub3QgdG8gcmV0dXJuIGJsYW5rcywKKyAgICAgICAgIyBiZWNhdXNlIHdlIHdpbGwgdHlw aWNhbGx5IHdpbmQgdXAgd2l0aCBhIGRpY3QgZnVsbCBvZiBOb25lCisgICAgICAgICMgdmFsdWVz CisgICAgICAgIHdoaWxlIHJvdyA9PSBbXToKKyAgICAgICAgICAgIHJvdyA9IG5leHQoc2VsZi5y ZWFkZXIpCisgICAgICAgIGQgPSBkaWN0KHppcChzZWxmLmZpZWxkbmFtZXMsIHJvdykpCisgICAg ICAgIGxmID0gbGVuKHNlbGYuZmllbGRuYW1lcykKKyAgICAgICAgbHIgPSBsZW4ocm93KQorICAg ICAgICBpZiBsZiA8IGxyOgorICAgICAgICAgICAgZFtzZWxmLnJlc3RrZXldID0gcm93W2xmOl0K KyAgICAgICAgZWxpZiBsZiA+IGxyOgorICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZpZWxk bmFtZXNbbHI6XToKKyAgICAgICAgICAgICAgICBkW2tleV0gPSBzZWxmLnJlc3R2YWwKKyAgICAg ICAgcmV0dXJuIGQKKworICAgIG5leHQgPSBfX25leHRfXworCisKK2NsYXNzIERpY3RXcml0ZXIo b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZiwgZmllbGRuYW1lcywgcmVzdHZhbD0i IiwgZXh0cmFzYWN0aW9uPSJyYWlzZSIsCisgICAgICAgICAgICAgICAgIGRpYWxlY3Q9ImV4Y2Vs IiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHNlbGYuZmllbGRuYW1lcyA9IGZpZWxkbmFtZXMg ICAgIyBsaXN0IG9mIGtleXMgZm9yIHRoZSBkaWN0CisgICAgICAgIHNlbGYucmVzdHZhbCA9IHJl c3R2YWwgICAgICAgICAgIyBmb3Igd3JpdGluZyBzaG9ydCBkaWN0cworICAgICAgICBpZiBleHRy YXNhY3Rpb24ubG93ZXIoKSBub3QgaW4gKCJyYWlzZSIsICJpZ25vcmUiKToKKyAgICAgICAgICAg IHJhaXNlIFZhbHVlRXJyb3IoImV4dHJhc2FjdGlvbiAoJXMpIG11c3QgYmUgJ3JhaXNlJyBvciAn aWdub3JlJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBleHRyYXNhY3Rpb24pCisg ICAgICAgIHNlbGYuZXh0cmFzYWN0aW9uID0gZXh0cmFzYWN0aW9uCisgICAgICAgIHNlbGYud3Jp dGVyID0gd3JpdGVyKGYsIGRpYWxlY3QsICphcmdzLCAqKmt3ZHMpCisKKyAgICBkZWYgd3JpdGVo ZWFkZXIoc2VsZik6CisgICAgICAgIGhlYWRlciA9IGRpY3QoemlwKHNlbGYuZmllbGRuYW1lcywg c2VsZi5maWVsZG5hbWVzKSkKKyAgICAgICAgc2VsZi53cml0ZXJvdyhoZWFkZXIpCisKKyAgICBk ZWYgX2RpY3RfdG9fbGlzdChzZWxmLCByb3dkaWN0KToKKyAgICAgICAgaWYgc2VsZi5leHRyYXNh Y3Rpb24gPT0gInJhaXNlIjoKKyAgICAgICAgICAgIHdyb25nX2ZpZWxkcyA9IFtrIGZvciBrIGlu IHJvd2RpY3QgaWYgayBub3QgaW4gc2VsZi5maWVsZG5hbWVzXQorICAgICAgICAgICAgaWYgd3Jv bmdfZmllbGRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImRpY3QgY29udGFp bnMgZmllbGRzIG5vdCBpbiBmaWVsZG5hbWVzOiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIsICIuam9pbihbcmVwcih4KSBmb3IgeCBpbiB3cm9uZ19maWVsZHNdKSkKKyAg ICAgICAgcmV0dXJuIChyb3dkaWN0LmdldChrZXksIHNlbGYucmVzdHZhbCkgZm9yIGtleSBpbiBz ZWxmLmZpZWxkbmFtZXMpCisKKyAgICBkZWYgd3JpdGVyb3coc2VsZiwgcm93ZGljdCk6CisgICAg ICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZXJvdyhzZWxmLl9kaWN0X3RvX2xpc3Qocm93ZGlj dCkpCisKKyAgICBkZWYgd3JpdGVyb3dzKHNlbGYsIHJvd2RpY3RzKToKKyAgICAgICAgcmV0dXJu IHNlbGYud3JpdGVyLndyaXRlcm93cyhtYXAoc2VsZi5fZGljdF90b19saXN0LCByb3dkaWN0cykp CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvY29ubmVjdGlv bi5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5Cmlu ZGV4IDJjOWZjYjUuLmQzMWRmNGEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZl ci9wc3ljb3BnMi9jb25uZWN0aW9uLnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9w c3ljb3BnMi9jb25uZWN0aW9uLnB5CkBAIC0zNywxNiArMzcsMTMgQEAgZnJvbSAudHlwZWNhc3Qg aW1wb3J0IHJlZ2lzdGVyX2dsb2JhbF90eXBlY2FzdGVycywgXAogICAgIHJlZ2lzdGVyX3N0cmlu Z190eXBlY2FzdGVycywgcmVnaXN0ZXJfYmluYXJ5X3R5cGVjYXN0ZXJzLCBcCiAgICAgcmVnaXN0 ZXJfYXJyYXlfdG9fc3RyaW5nX3R5cGVjYXN0ZXJzLCBBTExfSlNPTl9UWVBFUwogZnJvbSAuZW5j b2RpbmcgaW1wb3J0IGdldEVuY29kaW5nCitmcm9tIHBnYWRtaW4udXRpbHMgaW1wb3J0IGNzdgog CiBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKToKLSAgICAjIFB5dGhvbjIgaW4tYnVpbHQgY3N2 IG1vZHVsZSBkbyBub3QgaGFuZGxlIHVuaWNvZGUKLSAgICAjIGJhY2twb3J0cy5jc3YgbW9kdWxl IHBvcnRlZCBmcm9tIFBZMyBjc3YgbW9kdWxlIGZvciB1bmljb2RlIGhhbmRsaW5nCi0gICAgZnJv bSBiYWNrcG9ydHMgaW1wb3J0IGNzdgogICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lP CiAgICAgSVNfUFkyID0gVHJ1ZQogZWxzZToKICAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwot ICAgIGltcG9ydCBjc3YKICAgICBJU19QWTIgPSBGYWxzZQogCiBfID0gZ2V0dGV4dAo= --000000000000083507057d49fc78--