Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!enother.net!enother.net!peer01.iad.highwinds-media.com!feed-me.highwinds-media.com!cyclone01.ams2.highwinds-media.com!news.highwinds-media.com!voer-me.highwinds-media.com!hq-usenetpeers!hq-usenetpeers.eweka.nl!xlned.com!feeder5.xlned.com!newsfeed.xs4all.nl!newsfeed3a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.010 X-Spam-Evidence: '*H*': 0.98; '*S*': 0.00; 'filename:fname piece:py': 0.07; '51,': 0.09; 'occasionally': 0.09; 'subject: <': 0.09; 'subject:module': 0.09; 'wrapper': 0.09; 'apache': 0.15; '#####': 0.16; 'subject:lock': 0.16; 'subject:skip:_ 10': 0.16; 'tempfile': 0.16; 'skip:# 20': 0.16; 'import': 0.22; 'to:name:python- list@python.org': 0.22; 'error': 0.23; 'header:Received:8': 0.24; 'skip:" 30': 0.26; 'skip:" 20': 0.27; 'cgi': 0.31; 'occurs': 0.31; 'file': 0.32; 'received:169.254': 0.32; '(most': 0.33; 'skip:# 10': 0.33; 'skip:& 30': 0.33; 'device': 0.34; 'skip:_ 10': 0.34; "can't": 0.35; 'url:rec-html40': 0.35; 'charset:us-ascii': 0.36; 'thanks': 0.36; 'url:org': 0.36; 'error.': 0.37; 'received:169': 0.37; 'url:microsoft': 0.37; 'received:209': 0.37; 'skip:& 10': 0.38; 'url:office': 0.38; 'to:addr:python-list': 0.38; 'url:schemas': 0.38; 'url:omml': 0.39; 'url:2004': 0.39; 'recent': 0.39; 'subject:can': 0.39; 'url:12': 0.39; 'to:addr:python.org': 0.39; 'received:unknown': 0.61; 'content-type:application/octet- stream': 0.65; 'received:130': 0.73 X-MXL-Hash: 539ba8322dd0b143-a898e289d13c61468221f156773068ed0bb5a0ba X-MXL-Hash: 539ba82f142ede15-f63ca5c6ffaf25b336800cddbac12376cd1cb35c From: "SABARWAL, SHAL" To: "python-list@python.org" Subject: tempfile.py", line 83, in once_lock = _allocate_lock() thread.error: can't allocat lock Thread-Topic: tempfile.py", line 83, in once_lock = _allocate_lock() thread.error: can't allocat lock Thread-Index: Ac+HcanKGh/7MoijSlKlSPGNgfUACA== Date: Sat, 14 Jun 2014 01:40:33 +0000 Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [135.70.136.213] Content-Type: multipart/mixed; boundary="_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_" MIME-Version: 1.0 X-RSA-Inspected: yes X-RSA-Classifications: public, General SSNFP Patterns X-AnalysisOut: [v=2.0 cv=OMyQK1mB c=1 sm=1 a=dhB6nF3YHL5t/Ixux6cINA==:17 a] X-AnalysisOut: [=Ics6-S5QTFUA:10 a=ofMgfj31e3cA:10 a=Kult6WGjZqUA:10 a=BLc] X-AnalysisOut: [eEmwcHowA:10 a=zQP7CpKOAAAA:8 a=XIqpo32RAAAA:8 a=AK3YtOExb] X-AnalysisOut: [lHblQAuOTcA:9 a=CjuIK1q_8ugA:10 a=yMhMjlubAAAA:8 a=SSmOFEA] X-AnalysisOut: [CAAAA:8 a=DbhR6mjebwcwlQFXT3YA:9 a=gKO2Hq4RSVkA:10 a=UiCQ7] X-AnalysisOut: [L4-1S4A:10 a=hTZeC7Yk6K0A:10 a=frz4AuCg-hUA:10 a=puOU7xTQM] X-AnalysisOut: [Z00IA-SKTMA:9 a=OZrKnDsO_wxkHGAb6uIA:9 a=nKutTEW36ORtPEL8:] X-AnalysisOut: [21 a=gfX_A66UNe8uG9NL:21 a=KsPFmOGoSqIjMyw2:21 a=0udRYSmO0] X-AnalysisOut: [_fE6H8VjNwA:9 a=l4kS84DfE4_UgeZm:21 a=nnl_u-q6HUusFg98:21 ] X-AnalysisOut: [a=zAakrWFx-czAdPNH:21] X-Spam: [F=0.2000000000; CM=0.500; S=0.200(2014051901)] X-MAIL-FROM: X-SOURCE-IP: [144.160.229.24] X-Mailman-Approved-At: Sat, 14 Jun 2014 03:46:52 +0200 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 1267 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1402710413 news.xs4all.nl 2850 [2001:888:2000:d::a6]:51369 X-Complaints-To: abuse@xs4all.nl X-Received-Body-CRC: 1482550018 X-Received-Bytes: 94351 Xref: csiph.com comp.lang.python:73273 --_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: multipart/alternative; boundary="_000_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_" --_000_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Appreciate any help in resolving/understanding following error. Very occasionally get following error. The error occurs once every 20 - 30 = days. OS HP-UX 11.11 applicationCode.py is invoked via a cgi wrapper by apache httpd . ############### ERROR LISTNG ############################# sem_init: Device busy Traceback (most recent call last): File "applicationCode.py", line 4, in import cgi File "local/lib/python2.7/cgi.py", line 51, in import mimetools File "local/lib/python2.7/SECURITY WARNING!! import tempfile File "local/lib/python2.7/tempfile.py", line 83, in once_lock =3D _allocate_lock() thread.error: can't allocate lock ##### END OF ERROR LISTING ################## applicationCode.py has line of form =3D cgi.FieldStorage() Thanks Shal --_000_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Appreciate any help in resolving/understanding fo= llowing error.

 

Very occasionally get following error. The error = occurs once every 20 - 30 days. OS HP-UX 11.11

applicationCode.py is invoked via  a cgi wra= pper by apache httpd .

############### ERROR LISTNG ####################= #########

sem_init: Device busy

Traceback (most recent call last):

  File "applicationCode.py", line = 4, in <module>

      import cgi

        File &= quot;local/lib/python2.7/cgi.py", line 51, in <module>

        import= mimetools

        File &= quot;local/lib/python2.7/SECURITY WARNING!!  

        i= mport tempfile

        File &= quot;local/lib/python2.7/tempfile.py", line 83, in <module>=

        once_l= ock =3D _allocate_lock()

        thread= .error: can't allocate lock

##### END OF ERROR LISTING ##################

 

applicationCode.py

has line of

form =3D cgi.FieldStorage()

 

 

Thanks

 

Shal

--_000_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_-- --_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: application/octet-stream; name="mimetools.py" Content-Description: mimetools.py Content-Disposition: attachment; filename="mimetools.py"; size=7418; creation-date="Sat, 14 Jun 2014 01:36:00 GMT"; modification-date="Sat, 14 Jun 2014 01:36:00 GMT" Content-Transfer-Encoding: base64 IiIiVmFyaW91cyB0b29scyB1c2VkIGJ5IE1JTUUtcmVhZGluZyBvciBNSU1FLXdyaXRpbmcgcHJv Z3JhbXMuIiIiDQoNCg0KaW1wb3J0IG9zDQppbXBvcnQgc3lzDQppbXBvcnQgdGVtcGZpbGUNCmZy b20gd2FybmluZ3MgaW1wb3J0IGZpbHRlcndhcm5pbmdzLCBjYXRjaF93YXJuaW5ncw0Kd2l0aCBj YXRjaF93YXJuaW5ncygpOg0KICAgIGlmIHN5cy5weTNrd2FybmluZzoNCiAgICAgICAgZmlsdGVy d2FybmluZ3MoImlnbm9yZSIsICIuKnJmYzgyMiBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRp b25XYXJuaW5nKQ0KICAgIGltcG9ydCByZmM4MjINCg0KZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2Fy bnB5M2sNCndhcm5weTNrKCJpbiAzLngsIG1pbWV0b29scyBoYXMgYmVlbiByZW1vdmVkIGluIGZh dm9yIG9mIHRoZSBlbWFpbCBwYWNrYWdlIiwNCiAgICAgICAgIHN0YWNrbGV2ZWw9MikNCg0KX19h bGxfXyA9IFsiTWVzc2FnZSIsImNob29zZV9ib3VuZGFyeSIsImVuY29kZSIsImRlY29kZSIsImNv cHlsaXRlcmFsIiwNCiAgICAgICAgICAgImNvcHliaW5hcnkiXQ0KDQpjbGFzcyBNZXNzYWdlKHJm YzgyMi5NZXNzYWdlKToNCiAgICAiIiJBIGRlcml2ZWQgY2xhc3Mgb2YgcmZjODIyLk1lc3NhZ2Ug dGhhdCBrbm93cyBhYm91dCBNSU1FIGhlYWRlcnMgYW5kDQogICAgY29udGFpbnMgc29tZSBob29r cyBmb3IgZGVjb2RpbmcgZW5jb2RlZCBhbmQgbXVsdGlwYXJ0IG1lc3NhZ2VzLiIiIg0KDQogICAg ZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBzZWVrYWJsZSA9IDEpOg0KICAgICAgICByZmM4MjIuTWVz c2FnZS5fX2luaXRfXyhzZWxmLCBmcCwgc2Vla2FibGUpDQogICAgICAgIHNlbGYuZW5jb2Rpbmdo ZWFkZXIgPSBcDQogICAgICAgICAgICAgICAgc2VsZi5nZXRoZWFkZXIoJ2NvbnRlbnQtdHJhbnNm ZXItZW5jb2RpbmcnKQ0KICAgICAgICBzZWxmLnR5cGVoZWFkZXIgPSBcDQogICAgICAgICAgICAg ICAgc2VsZi5nZXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScpDQogICAgICAgIHNlbGYucGFyc2V0eXBl KCkNCiAgICAgICAgc2VsZi5wYXJzZXBsaXN0KCkNCg0KICAgIGRlZiBwYXJzZXR5cGUoc2VsZik6 DQogICAgICAgIHN0ciA9IHNlbGYudHlwZWhlYWRlcg0KICAgICAgICBpZiBzdHIgaXMgTm9uZToN CiAgICAgICAgICAgIHN0ciA9ICd0ZXh0L3BsYWluJw0KICAgICAgICBpZiAnOycgaW4gc3RyOg0K ICAgICAgICAgICAgaSA9IHN0ci5pbmRleCgnOycpDQogICAgICAgICAgICBzZWxmLnBsaXN0dGV4 dCA9IHN0cltpOl0NCiAgICAgICAgICAgIHN0ciA9IHN0cls6aV0NCiAgICAgICAgZWxzZToNCiAg ICAgICAgICAgIHNlbGYucGxpc3R0ZXh0ID0gJycNCiAgICAgICAgZmllbGRzID0gc3RyLnNwbGl0 KCcvJykNCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGZpZWxkcykpOg0KICAgICAgICAgICAg ZmllbGRzW2ldID0gZmllbGRzW2ldLnN0cmlwKCkubG93ZXIoKQ0KICAgICAgICBzZWxmLnR5cGUg PSAnLycuam9pbihmaWVsZHMpDQogICAgICAgIHNlbGYubWFpbnR5cGUgPSBmaWVsZHNbMF0NCiAg ICAgICAgc2VsZi5zdWJ0eXBlID0gJy8nLmpvaW4oZmllbGRzWzE6XSkNCg0KICAgIGRlZiBwYXJz ZXBsaXN0KHNlbGYpOg0KICAgICAgICBzdHIgPSBzZWxmLnBsaXN0dGV4dA0KICAgICAgICBzZWxm LnBsaXN0ID0gW10NCiAgICAgICAgd2hpbGUgc3RyWzoxXSA9PSAnOyc6DQogICAgICAgICAgICBz dHIgPSBzdHJbMTpdDQogICAgICAgICAgICBpZiAnOycgaW4gc3RyOg0KICAgICAgICAgICAgICAg ICMgWFhYIFNob3VsZCBwYXJzZSBxdW90ZXMhDQogICAgICAgICAgICAgICAgZW5kID0gc3RyLmlu ZGV4KCc7JykNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgZW5kID0gbGVuKHN0 cikNCiAgICAgICAgICAgIGYgPSBzdHJbOmVuZF0NCiAgICAgICAgICAgIGlmICc9JyBpbiBmOg0K ICAgICAgICAgICAgICAgIGkgPSBmLmluZGV4KCc9JykNCiAgICAgICAgICAgICAgICBmID0gZls6 aV0uc3RyaXAoKS5sb3dlcigpICsgXA0KICAgICAgICAgICAgICAgICAgICAgICAgJz0nICsgZltp KzE6XS5zdHJpcCgpDQogICAgICAgICAgICBzZWxmLnBsaXN0LmFwcGVuZChmLnN0cmlwKCkpDQog ICAgICAgICAgICBzdHIgPSBzdHJbZW5kOl0NCg0KICAgIGRlZiBnZXRwbGlzdChzZWxmKToNCiAg ICAgICAgcmV0dXJuIHNlbGYucGxpc3QNCg0KICAgIGRlZiBnZXRwYXJhbShzZWxmLCBuYW1lKToN CiAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKSArICc9Jw0KICAgICAgICBuID0gbGVuKG5hbWUp DQogICAgICAgIGZvciBwIGluIHNlbGYucGxpc3Q6DQogICAgICAgICAgICBpZiBwWzpuXSA9PSBu YW1lOg0KICAgICAgICAgICAgICAgIHJldHVybiByZmM4MjIudW5xdW90ZShwW246XSkNCiAgICAg ICAgcmV0dXJuIE5vbmUNCg0KICAgIGRlZiBnZXRwYXJhbW5hbWVzKHNlbGYpOg0KICAgICAgICBy ZXN1bHQgPSBbXQ0KICAgICAgICBmb3IgcCBpbiBzZWxmLnBsaXN0Og0KICAgICAgICAgICAgaSA9 IHAuZmluZCgnPScpDQogICAgICAgICAgICBpZiBpID49IDA6DQogICAgICAgICAgICAgICAgcmVz dWx0LmFwcGVuZChwWzppXS5sb3dlcigpKQ0KICAgICAgICByZXR1cm4gcmVzdWx0DQoNCiAgICBk ZWYgZ2V0ZW5jb2Rpbmcoc2VsZik6DQogICAgICAgIGlmIHNlbGYuZW5jb2RpbmdoZWFkZXIgaXMg Tm9uZToNCiAgICAgICAgICAgIHJldHVybiAnN2JpdCcNCiAgICAgICAgcmV0dXJuIHNlbGYuZW5j b2RpbmdoZWFkZXIubG93ZXIoKQ0KDQogICAgZGVmIGdldHR5cGUoc2VsZik6DQogICAgICAgIHJl dHVybiBzZWxmLnR5cGUNCg0KICAgIGRlZiBnZXRtYWludHlwZShzZWxmKToNCiAgICAgICAgcmV0 dXJuIHNlbGYubWFpbnR5cGUNCg0KICAgIGRlZiBnZXRzdWJ0eXBlKHNlbGYpOg0KICAgICAgICBy ZXR1cm4gc2VsZi5zdWJ0eXBlDQoNCg0KDQoNCiMgVXRpbGl0eSBmdW5jdGlvbnMNCiMgLS0tLS0t LS0tLS0tLS0tLS0NCg0KdHJ5Og0KICAgIGltcG9ydCB0aHJlYWQNCmV4Y2VwdCBJbXBvcnRFcnJv cjoNCiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkIGFzIHRocmVhZA0KX2NvdW50ZXJfbG9jayA9IHRo cmVhZC5hbGxvY2F0ZV9sb2NrKCkNCmRlbCB0aHJlYWQNCg0KX2NvdW50ZXIgPSAwDQpkZWYgX2dl dF9uZXh0X2NvdW50ZXIoKToNCiAgICBnbG9iYWwgX2NvdW50ZXINCiAgICBfY291bnRlcl9sb2Nr LmFjcXVpcmUoKQ0KICAgIF9jb3VudGVyICs9IDENCiAgICByZXN1bHQgPSBfY291bnRlcg0KICAg IF9jb3VudGVyX2xvY2sucmVsZWFzZSgpDQogICAgcmV0dXJuIHJlc3VsdA0KDQpfcHJlZml4ID0g Tm9uZQ0KDQpkZWYgY2hvb3NlX2JvdW5kYXJ5KCk6DQogICAgIiIiUmV0dXJuIGEgc3RyaW5nIHVz YWJsZSBhcyBhIG11bHRpcGFydCBib3VuZGFyeS4NCg0KICAgIFRoZSBzdHJpbmcgY2hvc2VuIGlz IHVuaXF1ZSB3aXRoaW4gYSBzaW5nbGUgcHJvZ3JhbSBydW4sIGFuZA0KICAgIGluY29ycG9yYXRl cyB0aGUgdXNlciBpZCAoaWYgYXZhaWxhYmxlKSwgcHJvY2VzcyBpZCAoaWYgYXZhaWxhYmxlKSwN CiAgICBhbmQgY3VycmVudCB0aW1lLiAgU28gaXQncyB2ZXJ5IHVubGlrZWx5IHRoZSByZXR1cm5l ZCBzdHJpbmcgYXBwZWFycw0KICAgIGluIG1lc3NhZ2UgdGV4dCwgYnV0IHRoZXJlJ3Mgbm8gZ3Vh cmFudGVlLg0KDQogICAgVGhlIGJvdW5kYXJ5IGNvbnRhaW5zIGRvdHMgc28geW91IGhhdmUgdG8g cXVvdGUgaXQgaW4gdGhlIGhlYWRlci4iIiINCg0KICAgIGdsb2JhbCBfcHJlZml4DQogICAgaW1w b3J0IHRpbWUNCiAgICBpZiBfcHJlZml4IGlzIE5vbmU6DQogICAgICAgIGltcG9ydCBzb2NrZXQN CiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgaG9zdGlkID0gc29ja2V0LmdldGhvc3RieW5hbWUo c29ja2V0LmdldGhvc3RuYW1lKCkpDQogICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3I6DQog ICAgICAgICAgICBob3N0aWQgPSAnMTI3LjAuMC4xJw0KICAgICAgICB0cnk6DQogICAgICAgICAg ICB1aWQgPSByZXByKG9zLmdldHVpZCgpKQ0KICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6 DQogICAgICAgICAgICB1aWQgPSAnMScNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgcGlkID0g cmVwcihvcy5nZXRwaWQoKSkNCiAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOg0KICAgICAg ICAgICAgcGlkID0gJzEnDQogICAgICAgIF9wcmVmaXggPSBob3N0aWQgKyAnLicgKyB1aWQgKyAn LicgKyBwaWQNCiAgICByZXR1cm4gIiVzLiUuM2YuJWQiICUgKF9wcmVmaXgsIHRpbWUudGltZSgp LCBfZ2V0X25leHRfY291bnRlcigpKQ0KDQoNCiMgU3Vicm91dGluZXMgZm9yIGRlY29kaW5nIHNv bWUgY29tbW9uIGNvbnRlbnQtdHJhbnNmZXItdHlwZXMNCg0KZGVmIGRlY29kZShpbnB1dCwgb3V0 cHV0LCBlbmNvZGluZyk6DQogICAgIiIiRGVjb2RlIGNvbW1vbiBjb250ZW50LXRyYW5zZmVyLWVu Y29kaW5ncyAoYmFzZTY0LCBxdW9wcmksIHV1ZW5jb2RlKS4iIiINCiAgICBpZiBlbmNvZGluZyA9 PSAnYmFzZTY0JzoNCiAgICAgICAgaW1wb3J0IGJhc2U2NA0KICAgICAgICByZXR1cm4gYmFzZTY0 LmRlY29kZShpbnB1dCwgb3V0cHV0KQ0KICAgIGlmIGVuY29kaW5nID09ICdxdW90ZWQtcHJpbnRh YmxlJzoNCiAgICAgICAgaW1wb3J0IHF1b3ByaQ0KICAgICAgICByZXR1cm4gcXVvcHJpLmRlY29k ZShpbnB1dCwgb3V0cHV0KQ0KICAgIGlmIGVuY29kaW5nIGluICgndXVlbmNvZGUnLCAneC11dWVu Y29kZScsICd1dWUnLCAneC11dWUnKToNCiAgICAgICAgaW1wb3J0IHV1DQogICAgICAgIHJldHVy biB1dS5kZWNvZGUoaW5wdXQsIG91dHB1dCkNCiAgICBpZiBlbmNvZGluZyBpbiAoJzdiaXQnLCAn OGJpdCcpOg0KICAgICAgICByZXR1cm4gb3V0cHV0LndyaXRlKGlucHV0LnJlYWQoKSkNCiAgICBp ZiBlbmNvZGluZyBpbiBkZWNvZGV0YWI6DQogICAgICAgIHBpcGV0aHJvdWdoKGlucHV0LCBkZWNv ZGV0YWJbZW5jb2RpbmddLCBvdXRwdXQpDQogICAgZWxzZToNCiAgICAgICAgcmFpc2UgVmFsdWVF cnJvciwgXA0KICAgICAgICAgICAgICAndW5rbm93biBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiAlcycgJSBlbmNvZGluZw0KDQpkZWYgZW5jb2RlKGlucHV0LCBvdXRwdXQsIGVuY29kaW5nKToN CiAgICAiIiJFbmNvZGUgY29tbW9uIGNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmdzIChiYXNlNjQs IHF1b3ByaSwgdXVlbmNvZGUpLiIiIg0KICAgIGlmIGVuY29kaW5nID09ICdiYXNlNjQnOg0KICAg ICAgICBpbXBvcnQgYmFzZTY0DQogICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKGlucHV0LCBv dXRwdXQpDQogICAgaWYgZW5jb2RpbmcgPT0gJ3F1b3RlZC1wcmludGFibGUnOg0KICAgICAgICBp bXBvcnQgcXVvcHJpDQogICAgICAgIHJldHVybiBxdW9wcmkuZW5jb2RlKGlucHV0LCBvdXRwdXQs IDApDQogICAgaWYgZW5jb2RpbmcgaW4gKCd1dWVuY29kZScsICd4LXV1ZW5jb2RlJywgJ3V1ZScs ICd4LXV1ZScpOg0KICAgICAgICBpbXBvcnQgdXUNCiAgICAgICAgcmV0dXJuIHV1LmVuY29kZShp bnB1dCwgb3V0cHV0KQ0KICAgIGlmIGVuY29kaW5nIGluICgnN2JpdCcsICc4Yml0Jyk6DQogICAg ICAgIHJldHVybiBvdXRwdXQud3JpdGUoaW5wdXQucmVhZCgpKQ0KICAgIGlmIGVuY29kaW5nIGlu IGVuY29kZXRhYjoNCiAgICAgICAgcGlwZXRocm91Z2goaW5wdXQsIGVuY29kZXRhYltlbmNvZGlu Z10sIG91dHB1dCkNCiAgICBlbHNlOg0KICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCBcDQogICAg ICAgICAgICAgICd1bmtub3duIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICVzJyAlIGVuY29k aW5nDQoNCiMgVGhlIGZvbGxvd2luZyBpcyBubyBsb25nZXIgdXNlZCBmb3Igc3RhbmRhcmQgZW5j b2RpbmdzDQoNCiMgWFhYIFRoaXMgcmVxdWlyZXMgdGhhdCB1dWRlY29kZSBhbmQgbW1lbmNvZGUg YXJlIGluICRQQVRIDQoNCnV1ZGVjb2RlX3BpcGUgPSAnJycoDQpURU1QPS90bXAvQHV1LiQkDQpz ZWQgInMlXmJlZ2luIFswLTddWzAtN10qIC4qJWJlZ2luIDYwMCAkVEVNUCUiIHwgdXVkZWNvZGUN CmNhdCAkVEVNUA0Kcm0gJFRFTVANCiknJycNCg0KZGVjb2RldGFiID0gew0KICAgICAgICAndXVl bmNvZGUnOiAgICAgICAgICAgICB1dWRlY29kZV9waXBlLA0KICAgICAgICAneC11dWVuY29kZSc6 ICAgICAgICAgICB1dWRlY29kZV9waXBlLA0KICAgICAgICAndXVlJzogICAgICAgICAgICAgICAg ICB1dWRlY29kZV9waXBlLA0KICAgICAgICAneC11dWUnOiAgICAgICAgICAgICAgICB1dWRlY29k ZV9waXBlLA0KICAgICAgICAncXVvdGVkLXByaW50YWJsZSc6ICAgICAnbW1lbmNvZGUgLXUgLXEn LA0KICAgICAgICAnYmFzZTY0JzogICAgICAgICAgICAgICAnbW1lbmNvZGUgLXUgLWInLA0KfQ0K DQplbmNvZGV0YWIgPSB7DQogICAgICAgICd4LXV1ZW5jb2RlJzogICAgICAgICAgICd1dWVuY29k ZSB0ZW1wZmlsZScsDQogICAgICAgICd1dWVuY29kZSc6ICAgICAgICAgICAgICd1dWVuY29kZSB0 ZW1wZmlsZScsDQogICAgICAgICd4LXV1ZSc6ICAgICAgICAgICAgICAgICd1dWVuY29kZSB0ZW1w ZmlsZScsDQogICAgICAgICd1dWUnOiAgICAgICAgICAgICAgICAgICd1dWVuY29kZSB0ZW1wZmls ZScsDQogICAgICAgICdxdW90ZWQtcHJpbnRhYmxlJzogICAgICdtbWVuY29kZSAtcScsDQogICAg ICAgICdiYXNlNjQnOiAgICAgICAgICAgICAgICdtbWVuY29kZSAtYicsDQp9DQoNCmRlZiBwaXBl dG8oaW5wdXQsIGNvbW1hbmQpOg0KICAgIHBpcGUgPSBvcy5wb3Blbihjb21tYW5kLCAndycpDQog ICAgY29weWxpdGVyYWwoaW5wdXQsIHBpcGUpDQogICAgcGlwZS5jbG9zZSgpDQoNCmRlZiBwaXBl dGhyb3VnaChpbnB1dCwgY29tbWFuZCwgb3V0cHV0KToNCiAgICAoZmQsIHRlbXBuYW1lKSA9IHRl bXBmaWxlLm1rc3RlbXAoKQ0KICAgIHRlbXAgPSBvcy5mZG9wZW4oZmQsICd3JykNCiAgICBjb3B5 bGl0ZXJhbChpbnB1dCwgdGVtcCkNCiAgICB0ZW1wLmNsb3NlKCkNCiAgICBwaXBlID0gb3MucG9w ZW4oY29tbWFuZCArICcgPCcgKyB0ZW1wbmFtZSwgJ3InKQ0KICAgIGNvcHliaW5hcnkocGlwZSwg b3V0cHV0KQ0KICAgIHBpcGUuY2xvc2UoKQ0KICAgIG9zLnVubGluayh0ZW1wbmFtZSkNCg0KZGVm IGNvcHlsaXRlcmFsKGlucHV0LCBvdXRwdXQpOg0KICAgIHdoaWxlIDE6DQogICAgICAgIGxpbmUg PSBpbnB1dC5yZWFkbGluZSgpDQogICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaw0KICAgICAgICBv dXRwdXQud3JpdGUobGluZSkNCg0KZGVmIGNvcHliaW5hcnkoaW5wdXQsIG91dHB1dCk6DQogICAg QlVGU0laRSA9IDgxOTINCiAgICB3aGlsZSAxOg0KICAgICAgICBsaW5lID0gaW5wdXQucmVhZChC VUZTSVpFKQ0KICAgICAgICBpZiBub3QgbGluZTogYnJlYWsNCiAgICAgICAgb3V0cHV0LndyaXRl KGxpbmUpDQo= --_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: application/octet-stream; name="tempfile.py" Content-Description: tempfile.py Content-Disposition: attachment; filename="tempfile.py"; size=18674; creation-date="Sat, 14 Jun 2014 01:40:33 GMT"; modification-date="Sat, 14 Jun 2014 01:40:33 GMT" Content-Transfer-Encoding: base64 IiIiVGVtcG9yYXJ5IGZpbGVzLg0KDQpUaGlzIG1vZHVsZSBwcm92aWRlcyBnZW5lcmljLCBsb3ct IGFuZCBoaWdoLWxldmVsIGludGVyZmFjZXMgZm9yDQpjcmVhdGluZyB0ZW1wb3JhcnkgZmlsZXMg YW5kIGRpcmVjdG9yaWVzLiAgVGhlIGludGVyZmFjZXMgbGlzdGVkDQphcyAic2FmZSIganVzdCBi ZWxvdyBjYW4gYmUgdXNlZCB3aXRob3V0IGZlYXIgb2YgcmFjZSBjb25kaXRpb25zLg0KVGhvc2Ug bGlzdGVkIGFzICJ1bnNhZmUiIGNhbm5vdCwgYW5kIGFyZSBwcm92aWRlZCBmb3IgYmFja3dhcmQN CmNvbXBhdGliaWxpdHkgb25seS4NCg0KVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyBzb21lIGRh dGEgaXRlbXMgdG8gdGhlIHVzZXI6DQoNCiAgVE1QX01BWCAgLSBtYXhpbXVtIG51bWJlciBvZiBu YW1lcyB0aGF0IHdpbGwgYmUgdHJpZWQgYmVmb3JlDQogICAgICAgICAgICAgZ2l2aW5nIHVwLg0K ICB0ZW1wbGF0ZSAtIHRoZSBkZWZhdWx0IHByZWZpeCBmb3IgYWxsIHRlbXBvcmFyeSBuYW1lcy4N CiAgICAgICAgICAgICBZb3UgbWF5IGNoYW5nZSB0aGlzIHRvIGNvbnRyb2wgdGhlIGRlZmF1bHQg cHJlZml4Lg0KICB0ZW1wZGlyICAtIElmIHRoaXMgaXMgc2V0IHRvIGEgc3RyaW5nIGJlZm9yZSB0 aGUgZmlyc3QgdXNlIG9mDQogICAgICAgICAgICAgYW55IHJvdXRpbmUgZnJvbSB0aGlzIG1vZHVs ZSwgaXQgd2lsbCBiZSBjb25zaWRlcmVkIGFzDQogICAgICAgICAgICAgYW5vdGhlciBjYW5kaWRh dGUgbG9jYXRpb24gdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzLg0KIiIiDQoNCl9fYWxsX18gPSBb DQogICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSIsICJUZW1wb3JhcnlGaWxlIiwgIyBoaWdoIGxldmVs IHNhZmUgaW50ZXJmYWNlcw0KICAgICJTcG9vbGVkVGVtcG9yYXJ5RmlsZSIsDQogICAgIm1rc3Rl bXAiLCAibWtkdGVtcCIsICAgICAgICAgICAgICAgICAgIyBsb3cgbGV2ZWwgc2FmZSBpbnRlcmZh Y2VzDQogICAgIm1rdGVtcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZXByZWNh dGVkIHVuc2FmZSBpbnRlcmZhY2UNCiAgICAiVE1QX01BWCIsICJnZXR0ZW1wcHJlZml4IiwgICAg ICAgICAgICAjIGNvbnN0YW50cw0KICAgICJ0ZW1wZGlyIiwgImdldHRlbXBkaXIiDQogICBdDQoN Cg0KIyBJbXBvcnRzLg0KDQppbXBvcnQgb3MgYXMgX29zDQppbXBvcnQgZXJybm8gYXMgX2Vycm5v DQpmcm9tIHJhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIF9SYW5kb20NCg0KdHJ5Og0KICAgIGZyb20g Y1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8NCmV4Y2VwdCBJbXBvcnRFcnJv cjoNCiAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8NCg0KdHJ5 Og0KICAgIGltcG9ydCBmY250bCBhcyBfZmNudGwNCmV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICBk ZWYgX3NldF9jbG9leGVjKGZkKToNCiAgICAgICAgcGFzcw0KZWxzZToNCiAgICBkZWYgX3NldF9j bG9leGVjKGZkKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZmxhZ3MgPSBfZmNudGwuZmNu dGwoZmQsIF9mY250bC5GX0dFVEZELCAwKQ0KICAgICAgICBleGNlcHQgSU9FcnJvcjoNCiAgICAg ICAgICAgIHBhc3MNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgICMgZmxhZ3MgcmVhZCBzdWNj ZXNzZnVsbHksIG1vZGlmeQ0KICAgICAgICAgICAgZmxhZ3MgfD0gX2ZjbnRsLkZEX0NMT0VYRUMN CiAgICAgICAgICAgIF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfU0VURkQsIGZsYWdzKQ0KDQoN CnRyeToNCiAgICBpbXBvcnQgdGhyZWFkIGFzIF90aHJlYWQNCmV4Y2VwdCBJbXBvcnRFcnJvcjoN CiAgICBpbXBvcnQgZHVtbXlfdGhyZWFkIGFzIF90aHJlYWQNCl9hbGxvY2F0ZV9sb2NrID0gX3Ro cmVhZC5hbGxvY2F0ZV9sb2NrDQoNCl90ZXh0X29wZW5mbGFncyA9IF9vcy5PX1JEV1IgfCBfb3Mu T19DUkVBVCB8IF9vcy5PX0VYQ0wNCmlmIGhhc2F0dHIoX29zLCAnT19OT0lOSEVSSVQnKToNCiAg ICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9JTkhFUklUDQppZiBoYXNhdHRyKF9vcywgJ09f Tk9GT0xMT1cnKToNCiAgICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9GT0xMT1cNCg0KX2Jp bl9vcGVuZmxhZ3MgPSBfdGV4dF9vcGVuZmxhZ3MNCmlmIGhhc2F0dHIoX29zLCAnT19CSU5BUlkn KToNCiAgICBfYmluX29wZW5mbGFncyB8PSBfb3MuT19CSU5BUlkNCg0KaWYgaGFzYXR0cihfb3Ms ICdUTVBfTUFYJyk6DQogICAgVE1QX01BWCA9IF9vcy5UTVBfTUFYDQplbHNlOg0KICAgIFRNUF9N QVggPSAxMDAwMA0KDQp0ZW1wbGF0ZSA9ICJ0bXAiDQoNCiMgSW50ZXJuYWwgcm91dGluZXMuDQoN Cl9vbmNlX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpDQoNCmlmIGhhc2F0dHIoX29zLCAibHN0YXQi KToNCiAgICBfc3RhdCA9IF9vcy5sc3RhdA0KZWxpZiBoYXNhdHRyKF9vcywgInN0YXQiKToNCiAg ICBfc3RhdCA9IF9vcy5zdGF0DQplbHNlOg0KICAgICMgRmFsbGJhY2suICBBbGwgd2UgbmVlZCBp cyBzb21ldGhpbmcgdGhhdCByYWlzZXMgb3MuZXJyb3IgaWYgdGhlDQogICAgIyBmaWxlIGRvZXNu J3QgZXhpc3QuDQogICAgZGVmIF9zdGF0KGZuKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAg ZiA9IG9wZW4oZm4pDQogICAgICAgIGV4Y2VwdCBJT0Vycm9yOg0KICAgICAgICAgICAgcmFpc2Ug X29zLmVycm9yDQogICAgICAgIGYuY2xvc2UoKQ0KDQpkZWYgX2V4aXN0cyhmbik6DQogICAgdHJ5 Og0KICAgICAgICBfc3RhdChmbikNCiAgICBleGNlcHQgX29zLmVycm9yOg0KICAgICAgICByZXR1 cm4gRmFsc2UNCiAgICBlbHNlOg0KICAgICAgICByZXR1cm4gVHJ1ZQ0KDQpjbGFzcyBfUmFuZG9t TmFtZVNlcXVlbmNlOg0KICAgICIiIkFuIGluc3RhbmNlIG9mIF9SYW5kb21OYW1lU2VxdWVuY2Ug Z2VuZXJhdGVzIGFuIGVuZGxlc3MNCiAgICBzZXF1ZW5jZSBvZiB1bnByZWRpY3RhYmxlIHN0cmlu Z3Mgd2hpY2ggY2FuIHNhZmVseSBiZSBpbmNvcnBvcmF0ZWQNCiAgICBpbnRvIGZpbGUgbmFtZXMu ICBFYWNoIHN0cmluZyBpcyBzaXggY2hhcmFjdGVycyBsb25nLiAgTXVsdGlwbGUNCiAgICB0aHJl YWRzIGNhbiBzYWZlbHkgdXNlIHRoZSBzYW1lIGluc3RhbmNlIGF0IHRoZSBzYW1lIHRpbWUuDQoN CiAgICBfUmFuZG9tTmFtZVNlcXVlbmNlIGlzIGFuIGl0ZXJhdG9yLiIiIg0KDQogICAgY2hhcmFj dGVycyA9ICgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiICsNCiAgICAgICAgICAgICAgICAg ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgKw0KICAgICAgICAgICAgICAgICAgIjAxMjM0 NTY3ODlfIikNCg0KICAgIGRlZiBfX2luaXRfXyhzZWxmKToNCiAgICAgICAgc2VsZi5tdXRleCA9 IF9hbGxvY2F0ZV9sb2NrKCkNCiAgICAgICAgc2VsZi5ub3JtY2FzZSA9IF9vcy5wYXRoLm5vcm1j YXNlDQoNCiAgICBAcHJvcGVydHkNCiAgICBkZWYgcm5nKHNlbGYpOg0KICAgICAgICBjdXJfcGlk ID0gX29zLmdldHBpZCgpDQogICAgICAgIGlmIGN1cl9waWQgIT0gZ2V0YXR0cihzZWxmLCAnX3Ju Z19waWQnLCBOb25lKToNCiAgICAgICAgICAgIHNlbGYuX3JuZyA9IF9SYW5kb20oKQ0KICAgICAg ICAgICAgc2VsZi5fcm5nX3BpZCA9IGN1cl9waWQNCiAgICAgICAgcmV0dXJuIHNlbGYuX3JuZw0K DQogICAgZGVmIF9faXRlcl9fKHNlbGYpOg0KICAgICAgICByZXR1cm4gc2VsZg0KDQogICAgZGVm IG5leHQoc2VsZik6DQogICAgICAgIG0gPSBzZWxmLm11dGV4DQogICAgICAgIGMgPSBzZWxmLmNo YXJhY3RlcnMNCiAgICAgICAgY2hvb3NlID0gc2VsZi5ybmcuY2hvaWNlDQoNCiAgICAgICAgbS5h Y3F1aXJlKCkNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykg Zm9yIGR1bW15IGluICIxMjM0NTYiXQ0KICAgICAgICBmaW5hbGx5Og0KICAgICAgICAgICAgbS5y ZWxlYXNlKCkNCg0KICAgICAgICByZXR1cm4gc2VsZi5ub3JtY2FzZSgnJy5qb2luKGxldHRlcnMp KQ0KDQpkZWYgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKToNCiAgICAiIiJHZW5lcmF0ZSBhIGxp c3Qgb2YgY2FuZGlkYXRlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB3aGljaA0KICAgIF9nZXRfZGVm YXVsdF90ZW1wZGlyIHdpbGwgdHJ5LiIiIg0KDQogICAgZGlybGlzdCA9IFtdDQoNCiAgICAjIEZp cnN0LCB0cnkgdGhlIGVudmlyb25tZW50Lg0KICAgIGZvciBlbnZuYW1lIGluICdUTVBESVInLCAn VEVNUCcsICdUTVAnOg0KICAgICAgICBkaXJuYW1lID0gX29zLmdldGVudihlbnZuYW1lKQ0KICAg ICAgICBpZiBkaXJuYW1lOiBkaXJsaXN0LmFwcGVuZChkaXJuYW1lKQ0KDQogICAgIyBGYWlsaW5n IHRoYXQsIHRyeSBPUy1zcGVjaWZpYyBsb2NhdGlvbnMuDQogICAgaWYgX29zLm5hbWUgPT0gJ3Jp c2Nvcyc6DQogICAgICAgIGRpcm5hbWUgPSBfb3MuZ2V0ZW52KCdXaW1wJFNjcmFwRGlyJykNCiAg ICAgICAgaWYgZGlybmFtZTogZGlybGlzdC5hcHBlbmQoZGlybmFtZSkNCiAgICBlbGlmIF9vcy5u YW1lID09ICdudCc6DQogICAgICAgIGRpcmxpc3QuZXh0ZW5kKFsgcidjOlx0ZW1wJywgcidjOlx0 bXAnLCByJ1x0ZW1wJywgcidcdG1wJyBdKQ0KICAgIGVsc2U6DQogICAgICAgIGRpcmxpc3QuZXh0 ZW5kKFsgJy90bXAnLCAnL3Zhci90bXAnLCAnL3Vzci90bXAnIF0pDQoNCiAgICAjIEFzIGEgbGFz dCByZXNvcnQsIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4NCiAgICB0cnk6DQogICAgICAgIGRpcmxp c3QuYXBwZW5kKF9vcy5nZXRjd2QoKSkNCiAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBfb3Mu ZXJyb3IpOg0KICAgICAgICBkaXJsaXN0LmFwcGVuZChfb3MuY3VyZGlyKQ0KDQogICAgcmV0dXJu IGRpcmxpc3QNCg0KZGVmIF9nZXRfZGVmYXVsdF90ZW1wZGlyKCk6DQogICAgIiIiQ2FsY3VsYXRl IHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB0byB1c2UgZm9yIHRlbXBvcmFyeSBmaWxlcy4NCiAgICBU aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuDQoNCiAgICBXZSBkZXRl cm1pbmUgd2hldGhlciBvciBub3QgYSBjYW5kaWRhdGUgdGVtcCBkaXIgaXMgdXNhYmxlIGJ5DQog ICAgdHJ5aW5nIHRvIGNyZWF0ZSBhbmQgd3JpdGUgdG8gYSBmaWxlIGluIHRoYXQgZGlyZWN0b3J5 LiAgSWYgdGhpcw0KICAgIGlzIHN1Y2Nlc3NmdWwsIHRoZSB0ZXN0IGZpbGUgaXMgZGVsZXRlZC4g IFRvIHByZXZlbnQgZGVuaWFsIG9mDQogICAgc2VydmljZSwgdGhlIG5hbWUgb2YgdGhlIHRlc3Qg ZmlsZSBtdXN0IGJlIHJhbmRvbWl6ZWQuIiIiDQoNCiAgICBuYW1lciA9IF9SYW5kb21OYW1lU2Vx dWVuY2UoKQ0KICAgIGRpcmxpc3QgPSBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpDQogICAgZmxh Z3MgPSBfdGV4dF9vcGVuZmxhZ3MNCg0KICAgIGZvciBkaXIgaW4gZGlybGlzdDoNCiAgICAgICAg aWYgZGlyICE9IF9vcy5jdXJkaXI6DQogICAgICAgICAgICBkaXIgPSBfb3MucGF0aC5ub3JtY2Fz ZShfb3MucGF0aC5hYnNwYXRoKGRpcikpDQogICAgICAgICMgVHJ5IG9ubHkgYSBmZXcgbmFtZXMg cGVyIGRpcmVjdG9yeS4NCiAgICAgICAgZm9yIHNlcSBpbiB4cmFuZ2UoMTAwKToNCiAgICAgICAg ICAgIG5hbWUgPSBuYW1lci5uZXh0KCkNCiAgICAgICAgICAgIGZpbGVuYW1lID0gX29zLnBhdGgu am9pbihkaXIsIG5hbWUpDQogICAgICAgICAgICB0cnk6DQogICAgICAgICAgICAgICAgZmQgPSBf b3Mub3BlbihmaWxlbmFtZSwgZmxhZ3MsIDA2MDApDQogICAgICAgICAgICAgICAgZnAgPSBfb3Mu ZmRvcGVuKGZkLCAndycpDQogICAgICAgICAgICAgICAgZnAud3JpdGUoJ2JsYXQnKQ0KICAgICAg ICAgICAgICAgIGZwLmNsb3NlKCkNCiAgICAgICAgICAgICAgICBfb3MudW5saW5rKGZpbGVuYW1l KQ0KICAgICAgICAgICAgICAgIGRlbCBmcCwgZmQNCiAgICAgICAgICAgICAgICByZXR1cm4gZGly DQogICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpLCBlOg0KICAgICAgICAgICAg ICAgIGlmIGVbMF0gIT0gX2Vycm5vLkVFWElTVDoNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsg IyBubyBwb2ludCB0cnlpbmcgbW9yZSBuYW1lcyBpbiB0aGlzIGRpcmVjdG9yeQ0KICAgICAgICAg ICAgICAgIHBhc3MNCiAgICByYWlzZSBJT0Vycm9yLCAoX2Vycm5vLkVOT0VOVCwNCiAgICAgICAg ICAgICAgICAgICAgKCJObyB1c2FibGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3VuZCBpbiAlcyIg JSBkaXJsaXN0KSkNCg0KX25hbWVfc2VxdWVuY2UgPSBOb25lDQoNCmRlZiBfZ2V0X2NhbmRpZGF0 ZV9uYW1lcygpOg0KICAgICIiIkNvbW1vbiBzZXR1cCBzZXF1ZW5jZSBmb3IgYWxsIHVzZXItY2Fs bGFibGUgaW50ZXJmYWNlcy4iIiINCg0KICAgIGdsb2JhbCBfbmFtZV9zZXF1ZW5jZQ0KICAgIGlm IF9uYW1lX3NlcXVlbmNlIGlzIE5vbmU6DQogICAgICAgIF9vbmNlX2xvY2suYWNxdWlyZSgpDQog ICAgICAgIHRyeToNCiAgICAgICAgICAgIGlmIF9uYW1lX3NlcXVlbmNlIGlzIE5vbmU6DQogICAg ICAgICAgICAgICAgX25hbWVfc2VxdWVuY2UgPSBfUmFuZG9tTmFtZVNlcXVlbmNlKCkNCiAgICAg ICAgZmluYWxseToNCiAgICAgICAgICAgIF9vbmNlX2xvY2sucmVsZWFzZSgpDQogICAgcmV0dXJu IF9uYW1lX3NlcXVlbmNlDQoNCg0KZGVmIF9ta3N0ZW1wX2lubmVyKGRpciwgcHJlLCBzdWYsIGZs YWdzKToNCiAgICAiIiJDb2RlIGNvbW1vbiB0byBta3N0ZW1wLCBUZW1wb3JhcnlGaWxlLCBhbmQg TmFtZWRUZW1wb3JhcnlGaWxlLiIiIg0KDQogICAgbmFtZXMgPSBfZ2V0X2NhbmRpZGF0ZV9uYW1l cygpDQoNCiAgICBmb3Igc2VxIGluIHhyYW5nZShUTVBfTUFYKToNCiAgICAgICAgbmFtZSA9IG5h bWVzLm5leHQoKQ0KICAgICAgICBmaWxlID0gX29zLnBhdGguam9pbihkaXIsIHByZSArIG5hbWUg KyBzdWYpDQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGZkID0gX29zLm9wZW4oZmlsZSwgZmxh Z3MsIDA2MDApDQogICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmQpDQogICAgICAgICAgICByZXR1 cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQ0KICAgICAgICBleGNlcHQgT1NFcnJvciwg ZToNCiAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gX2Vycm5vLkVFWElTVDoNCiAgICAgICAgICAg ICAgICBjb250aW51ZSAjIHRyeSBhZ2Fpbg0KICAgICAgICAgICAgcmFpc2UNCg0KICAgIHJhaXNl IElPRXJyb3IsIChfZXJybm8uRUVYSVNULCAiTm8gdXNhYmxlIHRlbXBvcmFyeSBmaWxlIG5hbWUg Zm91bmQiKQ0KDQoNCiMgVXNlciB2aXNpYmxlIGludGVyZmFjZXMuDQoNCmRlZiBnZXR0ZW1wcHJl Zml4KCk6DQogICAgIiIiQWNjZXNzb3IgZm9yIHRlbXBkaXIudGVtcGxhdGUuIiIiDQogICAgcmV0 dXJuIHRlbXBsYXRlDQoNCnRlbXBkaXIgPSBOb25lDQoNCmRlZiBnZXR0ZW1wZGlyKCk6DQogICAg IiIiQWNjZXNzb3IgZm9yIHRlbXBmaWxlLnRlbXBkaXIuIiIiDQogICAgZ2xvYmFsIHRlbXBkaXIN CiAgICBpZiB0ZW1wZGlyIGlzIE5vbmU6DQogICAgICAgIF9vbmNlX2xvY2suYWNxdWlyZSgpDQog ICAgICAgIHRyeToNCiAgICAgICAgICAgIGlmIHRlbXBkaXIgaXMgTm9uZToNCiAgICAgICAgICAg ICAgICB0ZW1wZGlyID0gX2dldF9kZWZhdWx0X3RlbXBkaXIoKQ0KICAgICAgICBmaW5hbGx5Og0K ICAgICAgICAgICAgX29uY2VfbG9jay5yZWxlYXNlKCkNCiAgICByZXR1cm4gdGVtcGRpcg0KDQpk ZWYgbWtzdGVtcChzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUsIHRleHQ9RmFs c2UpOg0KICAgICIiIlVzZXItY2FsbGFibGUgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCByZXR1cm4g YSB1bmlxdWUgdGVtcG9yYXJ5DQogICAgZmlsZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwYWly IChmZCwgbmFtZSkgd2hlcmUgZmQgaXMgdGhlDQogICAgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVk IGJ5IG9zLm9wZW4sIGFuZCBuYW1lIGlzIHRoZSBmaWxlbmFtZS4NCg0KICAgIElmICdzdWZmaXgn IGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgbmFtZSB3aWxsIGVuZCB3aXRoIHRoYXQgc3VmZml4LA0K ICAgIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIG5vIHN1ZmZpeC4NCg0KICAgIElmICdwcmVmaXgn IGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgbmFtZSB3aWxsIGJlZ2luIHdpdGggdGhhdCBwcmVmaXgs DQogICAgb3RoZXJ3aXNlIGEgZGVmYXVsdCBwcmVmaXggaXMgdXNlZC4NCg0KICAgIElmICdkaXIn IGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5 LA0KICAgIG90aGVyd2lzZSBhIGRlZmF1bHQgZGlyZWN0b3J5IGlzIHVzZWQuDQoNCiAgICBJZiAn dGV4dCcgaXMgc3BlY2lmaWVkIGFuZCB0cnVlLCB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gdGV4dA0K ICAgIG1vZGUuICBFbHNlICh0aGUgZGVmYXVsdCkgdGhlIGZpbGUgaXMgb3BlbmVkIGluIGJpbmFy eSBtb2RlLiAgT24NCiAgICBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGlzIG1ha2VzIG5vIGRp ZmZlcmVuY2UuDQoNCiAgICBUaGUgZmlsZSBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUgb25seSBi eSB0aGUgY3JlYXRpbmcgdXNlciBJRC4NCiAgICBJZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB1c2Vz IHBlcm1pc3Npb24gYml0cyB0byBpbmRpY2F0ZSB3aGV0aGVyIGENCiAgICBmaWxlIGlzIGV4ZWN1 dGFibGUsIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUgYnkgbm8gb25lLiBUaGUgZmlsZQ0KICAgIGRl c2NyaXB0b3IgaXMgbm90IGluaGVyaXRlZCBieSBjaGlsZHJlbiBvZiB0aGlzIHByb2Nlc3MuDQoN CiAgICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlbGV0aW5nIHRoZSBmaWxlIHdoZW4gZG9u ZSB3aXRoIGl0Lg0KICAgICIiIg0KDQogICAgaWYgZGlyIGlzIE5vbmU6DQogICAgICAgIGRpciA9 IGdldHRlbXBkaXIoKQ0KDQogICAgaWYgdGV4dDoNCiAgICAgICAgZmxhZ3MgPSBfdGV4dF9vcGVu ZmxhZ3MNCiAgICBlbHNlOg0KICAgICAgICBmbGFncyA9IF9iaW5fb3BlbmZsYWdzDQoNCiAgICBy ZXR1cm4gX21rc3RlbXBfaW5uZXIoZGlyLCBwcmVmaXgsIHN1ZmZpeCwgZmxhZ3MpDQoNCg0KZGVm IG1rZHRlbXAoc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lKToNCiAgICAiIiJV c2VyLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbmQgcmV0dXJuIGEgdW5pcXVlIHRlbXBv cmFyeQ0KICAgIGRpcmVjdG9yeS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHBhdGhuYW1lIG9m IHRoZSBkaXJlY3RvcnkuDQoNCiAgICBBcmd1bWVudHMgYXJlIGFzIGZvciBta3N0ZW1wLCBleGNl cHQgdGhhdCB0aGUgJ3RleHQnIGFyZ3VtZW50IGlzDQogICAgbm90IGFjY2VwdGVkLg0KDQogICAg VGhlIGRpcmVjdG9yeSBpcyByZWFkYWJsZSwgd3JpdGFibGUsIGFuZCBzZWFyY2hhYmxlIG9ubHkg YnkgdGhlDQogICAgY3JlYXRpbmcgdXNlci4NCg0KICAgIENhbGxlciBpcyByZXNwb25zaWJsZSBm b3IgZGVsZXRpbmcgdGhlIGRpcmVjdG9yeSB3aGVuIGRvbmUgd2l0aCBpdC4NCiAgICAiIiINCg0K ICAgIGlmIGRpciBpcyBOb25lOg0KICAgICAgICBkaXIgPSBnZXR0ZW1wZGlyKCkNCg0KICAgIG5h bWVzID0gX2dldF9jYW5kaWRhdGVfbmFtZXMoKQ0KDQogICAgZm9yIHNlcSBpbiB4cmFuZ2UoVE1Q X01BWCk6DQogICAgICAgIG5hbWUgPSBuYW1lcy5uZXh0KCkNCiAgICAgICAgZmlsZSA9IF9vcy5w YXRoLmpvaW4oZGlyLCBwcmVmaXggKyBuYW1lICsgc3VmZml4KQ0KICAgICAgICB0cnk6DQogICAg ICAgICAgICBfb3MubWtkaXIoZmlsZSwgMDcwMCkNCiAgICAgICAgICAgIHJldHVybiBmaWxlDQog ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOg0KICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBfZXJy bm8uRUVYSVNUOg0KICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgdHJ5IGFnYWluDQogICAgICAg ICAgICByYWlzZQ0KDQogICAgcmFpc2UgSU9FcnJvciwgKF9lcnJuby5FRVhJU1QsICJObyB1c2Fi bGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBuYW1lIGZvdW5kIikNCg0KZGVmIG1rdGVtcChzdWZmaXg9 IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOg0KICAgICIiIlVzZXItY2FsbGFibGUgZnVu Y3Rpb24gdG8gcmV0dXJuIGEgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIG5hbWUuICBUaGUNCiAgICBm aWxlIGlzIG5vdCBjcmVhdGVkLg0KDQogICAgQXJndW1lbnRzIGFyZSBhcyBmb3IgbWtzdGVtcCwg ZXhjZXB0IHRoYXQgdGhlICd0ZXh0JyBhcmd1bWVudCBpcw0KICAgIG5vdCBhY2NlcHRlZC4NCg0K ICAgIFRoaXMgZnVuY3Rpb24gaXMgdW5zYWZlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuICBUaGUg ZmlsZSBuYW1lDQogICAgcmVmZXJzIHRvIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QgYXQgc29t ZSBwb2ludCwgYnV0IGJ5IHRoZSB0aW1lDQogICAgeW91IGdldCBhcm91bmQgdG8gY3JlYXRpbmcg aXQsIHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBiZWF0ZW4geW91IHRvDQogICAgdGhlIHB1bmNoLg0K ICAgICIiIg0KDQojIyAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuIGFzIF93YXJuDQojIyAg ICBfd2FybigibWt0ZW1wIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5IHJpc2sgdG8geW91ciBwcm9n cmFtIiwNCiMjICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCBzdGFja2xldmVsPTIpDQoNCiAgICBp ZiBkaXIgaXMgTm9uZToNCiAgICAgICAgZGlyID0gZ2V0dGVtcGRpcigpDQoNCiAgICBuYW1lcyA9 IF9nZXRfY2FuZGlkYXRlX25hbWVzKCkNCiAgICBmb3Igc2VxIGluIHhyYW5nZShUTVBfTUFYKToN CiAgICAgICAgbmFtZSA9IG5hbWVzLm5leHQoKQ0KICAgICAgICBmaWxlID0gX29zLnBhdGguam9p bihkaXIsIHByZWZpeCArIG5hbWUgKyBzdWZmaXgpDQogICAgICAgIGlmIG5vdCBfZXhpc3RzKGZp bGUpOg0KICAgICAgICAgICAgcmV0dXJuIGZpbGUNCg0KICAgIHJhaXNlIElPRXJyb3IsIChfZXJy bm8uRUVYSVNULCAiTm8gdXNhYmxlIHRlbXBvcmFyeSBmaWxlbmFtZSBmb3VuZCIpDQoNCg0KY2xh c3MgX1RlbXBvcmFyeUZpbGVXcmFwcGVyOg0KICAgICIiIlRlbXBvcmFyeSBmaWxlIHdyYXBwZXIN Cg0KICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBmaWxlcyBvcGVuZWQg Zm9yDQogICAgdGVtcG9yYXJ5IHVzZS4gIEluIHBhcnRpY3VsYXIsIGl0IHNlZWtzIHRvIGF1dG9t YXRpY2FsbHkNCiAgICByZW1vdmUgdGhlIGZpbGUgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVk Lg0KICAgICIiIg0KDQogICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG5hbWUsIGRlbGV0ZT1U cnVlKToNCiAgICAgICAgc2VsZi5maWxlID0gZmlsZQ0KICAgICAgICBzZWxmLm5hbWUgPSBuYW1l DQogICAgICAgIHNlbGYuY2xvc2VfY2FsbGVkID0gRmFsc2UNCiAgICAgICAgc2VsZi5kZWxldGUg PSBkZWxldGUNCg0KICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToNCiAgICAgICAgIyBB dHRyaWJ1dGUgbG9va3VwcyBhcmUgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGZpbGUNCiAg ICAgICAgIyBhbmQgY2FjaGVkIGZvciBub24tbnVtZXJpYyByZXN1bHRzDQogICAgICAgICMgKGku ZS4gbWV0aG9kcyBhcmUgY2FjaGVkLCBjbG9zZWQgYW5kIGZyaWVuZHMgYXJlIG5vdCkNCiAgICAg ICAgZmlsZSA9IHNlbGYuX19kaWN0X19bJ2ZpbGUnXQ0KICAgICAgICBhID0gZ2V0YXR0cihmaWxl LCBuYW1lKQ0KICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyh0eXBlKGEpLCB0eXBlKDApKToNCiAg ICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgYSkNCiAgICAgICAgcmV0dXJuIGENCg0KICAg ICMgVGhlIHVuZGVybHlpbmcgX19lbnRlcl9fIG1ldGhvZCByZXR1cm5zIHRoZSB3cm9uZyBvYmpl Y3QNCiAgICAjIChzZWxmLmZpbGUpIHNvIG92ZXJyaWRlIGl0IHRvIHJldHVybiB0aGUgd3JhcHBl cg0KICAgIGRlZiBfX2VudGVyX18oc2VsZik6DQogICAgICAgIHNlbGYuZmlsZS5fX2VudGVyX18o KQ0KICAgICAgICByZXR1cm4gc2VsZg0KDQogICAgIyBOVCBwcm92aWRlcyBkZWxldGUtb24tY2xv c2UgYXMgYSBwcmltaXRpdmUsIHNvIHdlIGRvbid0IG5lZWQNCiAgICAjIHRoZSB3cmFwcGVyIHRv IGRvIGFueXRoaW5nIHNwZWNpYWwuICBXZSBzdGlsbCB1c2UgaXQgc28gdGhhdA0KICAgICMgZmls ZS5uYW1lIGlzIHVzZWZ1bCAoaS5lLiBub3QgIihmZG9wZW4pIikgd2l0aCBOYW1lZFRlbXBvcmFy eUZpbGUuDQogICAgaWYgX29zLm5hbWUgIT0gJ250JzoNCiAgICAgICAgIyBDYWNoZSB0aGUgdW5s aW5rZXIgc28gd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzIGVycm9ycyBhdA0KICAgICAgICAjIHNodXRk b3duIHdoZW4gdGhlIG1vZHVsZS1sZXZlbCAib3MiIGlzIE5vbmUnZCBvdXQuICBOb3RlDQogICAg ICAgICMgdGhhdCB0aGlzIG11c3QgYmUgcmVmZXJlbmNlZCBhcyBzZWxmLnVubGluaywgYmVjYXVz ZSB0aGUNCiAgICAgICAgIyBuYW1lIFRlbXBvcmFyeUZpbGVXcmFwcGVyIG1heSBhbHNvIGdldCBO b25lJ2Qgb3V0IGJlZm9yZQ0KICAgICAgICAjIF9fZGVsX18gaXMgY2FsbGVkLg0KICAgICAgICB1 bmxpbmsgPSBfb3MudW5saW5rDQoNCiAgICAgICAgZGVmIGNsb3NlKHNlbGYpOg0KICAgICAgICAg ICAgaWYgbm90IHNlbGYuY2xvc2VfY2FsbGVkOg0KICAgICAgICAgICAgICAgIHNlbGYuY2xvc2Vf Y2FsbGVkID0gVHJ1ZQ0KICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpDQogICAgICAg ICAgICAgICAgaWYgc2VsZi5kZWxldGU6DQogICAgICAgICAgICAgICAgICAgIHNlbGYudW5saW5r KHNlbGYubmFtZSkNCg0KICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToNCiAgICAgICAgICAgIHNl bGYuY2xvc2UoKQ0KDQogICAgICAgICMgTmVlZCB0byB0cmFwIF9fZXhpdF9fIGFzIHdlbGwgdG8g ZW5zdXJlIHRoZSBmaWxlIGdldHMNCiAgICAgICAgIyBkZWxldGVkIHdoZW4gdXNlZCBpbiBhIHdp dGggc3RhdGVtZW50DQogICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGMsIHZhbHVlLCB0Yik6 DQogICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZpbGUuX19leGl0X18oZXhjLCB2YWx1ZSwgdGIp DQogICAgICAgICAgICBzZWxmLmNsb3NlKCkNCiAgICAgICAgICAgIHJldHVybiByZXN1bHQNCiAg ICBlbHNlOg0KICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjLCB2YWx1ZSwgdGIpOg0KICAg ICAgICAgICAgc2VsZi5maWxlLl9fZXhpdF9fKGV4YywgdmFsdWUsIHRiKQ0KDQoNCmRlZiBOYW1l ZFRlbXBvcmFyeUZpbGUobW9kZT0ndytiJywgYnVmc2l6ZT0tMSwgc3VmZml4PSIiLA0KICAgICAg ICAgICAgICAgICAgICAgICBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lLCBkZWxldGU9VHJ1ZSk6 DQogICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gYSB0ZW1wb3JhcnkgZmlsZS4NCiAgICBBcmd1bWVu dHM6DQogICAgJ3ByZWZpeCcsICdzdWZmaXgnLCAnZGlyJyAtLSBhcyBmb3IgbWtzdGVtcC4NCiAg ICAnbW9kZScgLS0gdGhlIG1vZGUgYXJndW1lbnQgdG8gb3MuZmRvcGVuIChkZWZhdWx0ICJ3K2Ii KS4NCiAgICAnYnVmc2l6ZScgLS0gdGhlIGJ1ZmZlciBzaXplIGFyZ3VtZW50IHRvIG9zLmZkb3Bl biAoZGVmYXVsdCAtMSkuDQogICAgJ2RlbGV0ZScgLS0gd2hldGhlciB0aGUgZmlsZSBpcyBkZWxl dGVkIG9uIGNsb3NlIChkZWZhdWx0IFRydWUpLg0KICAgIFRoZSBmaWxlIGlzIGNyZWF0ZWQgYXMg bWtzdGVtcCgpIHdvdWxkIGRvIGl0Lg0KDQogICAgUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGZp bGUtbGlrZSBpbnRlcmZhY2U7IHRoZSBuYW1lIG9mIHRoZSBmaWxlDQogICAgaXMgYWNjZXNzaWJs ZSBhcyBmaWxlLm5hbWUuICBUaGUgZmlsZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZA0K ICAgIHdoZW4gaXQgaXMgY2xvc2VkIHVubGVzcyB0aGUgJ2RlbGV0ZScgYXJndW1lbnQgaXMgc2V0 IHRvIEZhbHNlLg0KICAgICIiIg0KDQogICAgaWYgZGlyIGlzIE5vbmU6DQogICAgICAgIGRpciA9 IGdldHRlbXBkaXIoKQ0KDQogICAgaWYgJ2InIGluIG1vZGU6DQogICAgICAgIGZsYWdzID0gX2Jp bl9vcGVuZmxhZ3MNCiAgICBlbHNlOg0KICAgICAgICBmbGFncyA9IF90ZXh0X29wZW5mbGFncw0K DQogICAgIyBTZXR0aW5nIE9fVEVNUE9SQVJZIGluIHRoZSBmbGFncyBjYXVzZXMgdGhlIE9TIHRv IGRlbGV0ZQ0KICAgICMgdGhlIGZpbGUgd2hlbiBpdCBpcyBjbG9zZWQuICBUaGlzIGlzIG9ubHkg c3VwcG9ydGVkIGJ5IFdpbmRvd3MuDQogICAgaWYgX29zLm5hbWUgPT0gJ250JyBhbmQgZGVsZXRl Og0KICAgICAgICBmbGFncyB8PSBfb3MuT19URU1QT1JBUlkNCg0KICAgIChmZCwgbmFtZSkgPSBf bWtzdGVtcF9pbm5lcihkaXIsIHByZWZpeCwgc3VmZml4LCBmbGFncykNCiAgICBmaWxlID0gX29z LmZkb3BlbihmZCwgbW9kZSwgYnVmc2l6ZSkNCiAgICByZXR1cm4gX1RlbXBvcmFyeUZpbGVXcmFw cGVyKGZpbGUsIG5hbWUsIGRlbGV0ZSkNCg0KaWYgX29zLm5hbWUgIT0gJ3Bvc2l4JyBvciBfb3Mu c3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOg0KICAgICMgT24gbm9uLVBPU0lYIGFuZCBDeWd3aW4g c3lzdGVtcywgYXNzdW1lIHRoYXQgd2UgY2Fubm90IHVubGluayBhIGZpbGUNCiAgICAjIHdoaWxl IGl0IGlzIG9wZW4uDQogICAgVGVtcG9yYXJ5RmlsZSA9IE5hbWVkVGVtcG9yYXJ5RmlsZQ0KDQpl bHNlOg0KICAgIGRlZiBUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZnNpemU9LTEsIHN1ZmZp eD0iIiwNCiAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lKToN CiAgICAgICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gYSB0ZW1wb3JhcnkgZmlsZS4NCiAgICAgICAg QXJndW1lbnRzOg0KICAgICAgICAncHJlZml4JywgJ3N1ZmZpeCcsICdkaXInIC0tIGFzIGZvciBt a3N0ZW1wLg0KICAgICAgICAnbW9kZScgLS0gdGhlIG1vZGUgYXJndW1lbnQgdG8gb3MuZmRvcGVu IChkZWZhdWx0ICJ3K2IiKS4NCiAgICAgICAgJ2J1ZnNpemUnIC0tIHRoZSBidWZmZXIgc2l6ZSBh cmd1bWVudCB0byBvcy5mZG9wZW4gKGRlZmF1bHQgLTEpLg0KICAgICAgICBUaGUgZmlsZSBpcyBj cmVhdGVkIGFzIG1rc3RlbXAoKSB3b3VsZCBkbyBpdC4NCg0KICAgICAgICBSZXR1cm5zIGFuIG9i amVjdCB3aXRoIGEgZmlsZS1saWtlIGludGVyZmFjZS4gIFRoZSBmaWxlIGhhcyBubw0KICAgICAg ICBuYW1lLCBhbmQgd2lsbCBjZWFzZSB0byBleGlzdCB3aGVuIGl0IGlzIGNsb3NlZC4NCiAgICAg ICAgIiIiDQoNCiAgICAgICAgaWYgZGlyIGlzIE5vbmU6DQogICAgICAgICAgICBkaXIgPSBnZXR0 ZW1wZGlyKCkNCg0KICAgICAgICBpZiAnYicgaW4gbW9kZToNCiAgICAgICAgICAgIGZsYWdzID0g X2Jpbl9vcGVuZmxhZ3MNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGZsYWdzID0gX3RleHRf b3BlbmZsYWdzDQoNCiAgICAgICAgKGZkLCBuYW1lKSA9IF9ta3N0ZW1wX2lubmVyKGRpciwgcHJl Zml4LCBzdWZmaXgsIGZsYWdzKQ0KICAgICAgICB0cnk6DQogICAgICAgICAgICBfb3MudW5saW5r KG5hbWUpDQogICAgICAgICAgICByZXR1cm4gX29zLmZkb3BlbihmZCwgbW9kZSwgYnVmc2l6ZSkN CiAgICAgICAgZXhjZXB0Og0KICAgICAgICAgICAgX29zLmNsb3NlKGZkKQ0KICAgICAgICAgICAg cmFpc2UNCg0KY2xhc3MgU3Bvb2xlZFRlbXBvcmFyeUZpbGU6DQogICAgIiIiVGVtcG9yYXJ5IGZp bGUgd3JhcHBlciwgc3BlY2lhbGl6ZWQgdG8gc3dpdGNoIGZyb20NCiAgICBTdHJpbmdJTyB0byBh IHJlYWwgZmlsZSB3aGVuIGl0IGV4Y2VlZHMgYSBjZXJ0YWluIHNpemUgb3INCiAgICB3aGVuIGEg ZmlsZW5vIGlzIG5lZWRlZC4NCiAgICAiIiINCiAgICBfcm9sbGVkID0gRmFsc2UNCg0KICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBtYXhfc2l6ZT0wLCBtb2RlPSd3K2InLCBidWZzaXplPS0xLA0KICAg ICAgICAgICAgICAgICBzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOg0KICAg ICAgICBzZWxmLl9maWxlID0gX1N0cmluZ0lPKCkNCiAgICAgICAgc2VsZi5fbWF4X3NpemUgPSBt YXhfc2l6ZQ0KICAgICAgICBzZWxmLl9yb2xsZWQgPSBGYWxzZQ0KICAgICAgICBzZWxmLl9UZW1w b3JhcnlGaWxlQXJncyA9IChtb2RlLCBidWZzaXplLCBzdWZmaXgsIHByZWZpeCwgZGlyKQ0KDQog ICAgZGVmIF9jaGVjayhzZWxmLCBmaWxlKToNCiAgICAgICAgaWYgc2VsZi5fcm9sbGVkOiByZXR1 cm4NCiAgICAgICAgbWF4X3NpemUgPSBzZWxmLl9tYXhfc2l6ZQ0KICAgICAgICBpZiBtYXhfc2l6 ZSBhbmQgZmlsZS50ZWxsKCkgPiBtYXhfc2l6ZToNCiAgICAgICAgICAgIHNlbGYucm9sbG92ZXIo KQ0KDQogICAgZGVmIHJvbGxvdmVyKHNlbGYpOg0KICAgICAgICBpZiBzZWxmLl9yb2xsZWQ6IHJl dHVybg0KICAgICAgICBmaWxlID0gc2VsZi5fZmlsZQ0KICAgICAgICBuZXdmaWxlID0gc2VsZi5f ZmlsZSA9IFRlbXBvcmFyeUZpbGUoKnNlbGYuX1RlbXBvcmFyeUZpbGVBcmdzKQ0KICAgICAgICBk ZWwgc2VsZi5fVGVtcG9yYXJ5RmlsZUFyZ3MNCg0KICAgICAgICBuZXdmaWxlLndyaXRlKGZpbGUu Z2V0dmFsdWUoKSkNCiAgICAgICAgbmV3ZmlsZS5zZWVrKGZpbGUudGVsbCgpLCAwKQ0KDQogICAg ICAgIHNlbGYuX3JvbGxlZCA9IFRydWUNCg0KICAgICMgVGhlIG1ldGhvZCBjYWNoaW5nIHRyaWNr IGZyb20gTmFtZWRUZW1wb3JhcnlGaWxlDQogICAgIyB3b24ndCB3b3JrIGhlcmUsIGJlY2F1c2Ug X2ZpbGUgbWF5IGNoYW5nZSBmcm9tIGENCiAgICAjIF9TdHJpbmdJTyBpbnN0YW5jZSB0byBhIHJl YWwgZmlsZS4gU28gd2UgbGlzdA0KICAgICMgYWxsIHRoZSBtZXRob2RzIGRpcmVjdGx5Lg0KDQog ICAgIyBDb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wNCiAgICBkZWYgX19lbnRlcl9fKHNlbGYp Og0KICAgICAgICBpZiBzZWxmLl9maWxlLmNsb3NlZDoNCiAgICAgICAgICAgIHJhaXNlIFZhbHVl RXJyb3IoIkNhbm5vdCBlbnRlciBjb250ZXh0IHdpdGggY2xvc2VkIGZpbGUiKQ0KICAgICAgICBy ZXR1cm4gc2VsZg0KDQogICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4YywgdmFsdWUsIHRiKToNCiAg ICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpDQoNCiAgICAjIGZpbGUgcHJvdG9jb2wNCiAgICBkZWYg X19pdGVyX18oc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLl9maWxlLl9faXRlcl9fKCkNCg0K ICAgIGRlZiBjbG9zZShzZWxmKToNCiAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpDQoNCiAgICBA cHJvcGVydHkNCiAgICBkZWYgY2xvc2VkKHNlbGYpOg0KICAgICAgICByZXR1cm4gc2VsZi5fZmls ZS5jbG9zZWQNCg0KICAgIEBwcm9wZXJ0eQ0KICAgIGRlZiBlbmNvZGluZyhzZWxmKToNCiAgICAg ICAgcmV0dXJuIHNlbGYuX2ZpbGUuZW5jb2RpbmcNCg0KICAgIGRlZiBmaWxlbm8oc2VsZik6DQog ICAgICAgIHNlbGYucm9sbG92ZXIoKQ0KICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5maWxlbm8o KQ0KDQogICAgZGVmIGZsdXNoKHNlbGYpOg0KICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkNCg0K ICAgIGRlZiBpc2F0dHkoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLl9maWxlLmlzYXR0eSgp DQoNCiAgICBAcHJvcGVydHkNCiAgICBkZWYgbW9kZShzZWxmKToNCiAgICAgICAgcmV0dXJuIHNl bGYuX2ZpbGUubW9kZQ0KDQogICAgQHByb3BlcnR5DQogICAgZGVmIG5hbWUoc2VsZik6DQogICAg ICAgIHJldHVybiBzZWxmLl9maWxlLm5hbWUNCg0KICAgIEBwcm9wZXJ0eQ0KICAgIGRlZiBuZXds aW5lcyhzZWxmKToNCiAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUubmV3bGluZXMNCg0KICAgIGRl ZiBuZXh0KHNlbGYpOg0KICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5uZXh0DQoNCiAgICBkZWYg cmVhZChzZWxmLCAqYXJncyk6DQogICAgICAgIHJldHVybiBzZWxmLl9maWxlLnJlYWQoKmFyZ3Mp DQoNCiAgICBkZWYgcmVhZGxpbmUoc2VsZiwgKmFyZ3MpOg0KICAgICAgICByZXR1cm4gc2VsZi5f ZmlsZS5yZWFkbGluZSgqYXJncykNCg0KICAgIGRlZiByZWFkbGluZXMoc2VsZiwgKmFyZ3MpOg0K ICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5yZWFkbGluZXMoKmFyZ3MpDQoNCiAgICBkZWYgc2Vl ayhzZWxmLCAqYXJncyk6DQogICAgICAgIHNlbGYuX2ZpbGUuc2VlaygqYXJncykNCg0KICAgIEBw cm9wZXJ0eQ0KICAgIGRlZiBzb2Z0c3BhY2Uoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxmLl9m aWxlLnNvZnRzcGFjZQ0KDQogICAgZGVmIHRlbGwoc2VsZik6DQogICAgICAgIHJldHVybiBzZWxm Ll9maWxlLnRlbGwoKQ0KDQogICAgZGVmIHRydW5jYXRlKHNlbGYpOg0KICAgICAgICBzZWxmLl9m aWxlLnRydW5jYXRlKCkNCg0KICAgIGRlZiB3cml0ZShzZWxmLCBzKToNCiAgICAgICAgZmlsZSA9 IHNlbGYuX2ZpbGUNCiAgICAgICAgcnYgPSBmaWxlLndyaXRlKHMpDQogICAgICAgIHNlbGYuX2No ZWNrKGZpbGUpDQogICAgICAgIHJldHVybiBydg0KDQogICAgZGVmIHdyaXRlbGluZXMoc2VsZiwg aXRlcmFibGUpOg0KICAgICAgICBmaWxlID0gc2VsZi5fZmlsZQ0KICAgICAgICBydiA9IGZpbGUu d3JpdGVsaW5lcyhpdGVyYWJsZSkNCiAgICAgICAgc2VsZi5fY2hlY2soZmlsZSkNCiAgICAgICAg cmV0dXJuIHJ2DQoNCiAgICBkZWYgeHJlYWRsaW5lcyhzZWxmLCAqYXJncyk6DQogICAgICAgIHJl dHVybiBzZWxmLl9maWxlLnhyZWFkbGluZXMoKmFyZ3MpDQo= --_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_ Content-Type: application/octet-stream; name="cgi.py" Content-Description: cgi.py Content-Disposition: attachment; filename="cgi.py"; size=34505; creation-date="Wed, 28 May 2014 21:03:48 GMT"; modification-date="Wed, 28 May 2014 21:03:49 GMT" Content-Transfer-Encoding: base64 IyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCgojIE5PVEU6IHRoZSBhYm92ZSAiL3Vzci9sb2NhbC9i aW4vcHl0aG9uIiBpcyBOT1QgYSBtaXN0YWtlLiAgSXQgaXMKIyBpbnRlbnRpb25hbGx5IE5PVCAi L3Vzci9iaW4vZW52IHB5dGhvbiIuICBPbiBtYW55IHN5c3RlbXMKIyAoZS5nLiBTb2xhcmlzKSwg L3Vzci9sb2NhbC9iaW4gaXMgbm90IGluICRQQVRIIGFzIHBhc3NlZCB0byBDR0kKIyBzY3JpcHRz LCBhbmQgL3Vzci9sb2NhbC9iaW4gaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZXJlIFB5dGhv biBpcwojIGluc3RhbGxlZCwgc28gL3Vzci9iaW4vZW52IHdvdWxkIGJlIHVuYWJsZSB0byBmaW5k IHB5dGhvbi4gIEdyYW50ZWQsCiMgYmluYXJ5IGluc3RhbGxhdGlvbnMgYnkgTGludXggdmVuZG9y cyBvZnRlbiBpbnN0YWxsIFB5dGhvbiBpbgojIC91c3IvYmluLiAgU28gbGV0IHRob3NlIHZlbmRv cnMgcGF0Y2ggY2dpLnB5IHRvIG1hdGNoIHRoZWlyIGNob2ljZQojIG9mIGluc3RhbGxhdGlvbi4K CiIiIlN1cHBvcnQgbW9kdWxlIGZvciBDR0kgKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2Ny aXB0cy4KClRoaXMgbW9kdWxlIGRlZmluZXMgYSBudW1iZXIgb2YgdXRpbGl0aWVzIGZvciB1c2Ug YnkgQ0dJIHNjcmlwdHMKd3JpdHRlbiBpbiBQeXRob24uCiIiIgoKIyBYWFggUGVyaGFwcyB0aGVy ZSBzaG91bGQgYmUgYSBzbGltbWVkIHZlcnNpb24gdGhhdCBkb2Vzbid0IGNvbnRhaW4KIyBhbGwg dGhvc2UgYmFja3dhcmRzIGNvbXBhdGlibGUgYW5kIGRlYnVnZ2luZyBjbGFzc2VzIGFuZCBmdW5j dGlvbnM/CgojIEhpc3RvcnkKIyAtLS0tLS0tCiMKIyBNaWNoYWVsIE1jTGF5IHN0YXJ0ZWQgdGhp cyBtb2R1bGUuICBTdGV2ZSBNYWpld3NraSBjaGFuZ2VkIHRoZQojIGludGVyZmFjZSB0byBTdkZv cm1Db250ZW50RGljdCBhbmQgRm9ybUNvbnRlbnREaWN0LiAgVGhlIG11bHRpcGFydAojIHBhcnNp bmcgd2FzIGluc3BpcmVkIGJ5IGNvZGUgc3VibWl0dGVkIGJ5IEFuZHJlYXMgUGFlcGNrZS4gIEd1 aWRvIHZhbgojIFJvc3N1bSByZXdyb3RlLCByZWZvcm1hdHRlZCBhbmQgZG9jdW1lbnRlZCB0aGUg bW9kdWxlIGFuZCBpcyBjdXJyZW50bHkKIyByZXNwb25zaWJsZSBmb3IgaXRzIG1haW50ZW5hbmNl LgojCgpfX3ZlcnNpb25fXyA9ICIyLjYiCgoKIyBJbXBvcnRzCiMgPT09PT09PQoKZnJvbSBvcGVy YXRvciBpbXBvcnQgYXR0cmdldHRlcgppbXBvcnQgc3lzCmltcG9ydCBvcwppbXBvcnQgdXJsbGli CmltcG9ydCBVc2VyRGljdAppbXBvcnQgdXJscGFyc2UKCmZyb20gd2FybmluZ3MgaW1wb3J0IGZp bHRlcndhcm5pbmdzLCBjYXRjaF93YXJuaW5ncywgd2Fybgp3aXRoIGNhdGNoX3dhcm5pbmdzKCk6 CiAgICBpZiBzeXMucHkza3dhcm5pbmc6CiAgICAgICAgZmlsdGVyd2FybmluZ3MoImlnbm9yZSIs ICIuKm1pbWV0b29scyBoYXMgYmVlbiByZW1vdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICBE ZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKnJm YzgyMiBoYXMgYmVlbiByZW1vdmVkIiwKICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlv bldhcm5pbmcpCiAgICBpbXBvcnQgbWltZXRvb2xzCiAgICBpbXBvcnQgcmZjODIyCgp0cnk6CiAg ICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KZXhjZXB0IEltcG9ydEVycm9yOgogICAg ZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KCl9fYWxsX18gPSBbIk1pbmlGaWVsZFN0b3Jh Z2UiLCAiRmllbGRTdG9yYWdlIiwgIkZvcm1Db250ZW50RGljdCIsCiAgICAgICAgICAgIlN2Rm9y bUNvbnRlbnREaWN0IiwgIkludGVycEZvcm1Db250ZW50RGljdCIsICJGb3JtQ29udGVudCIsCiAg ICAgICAgICAgInBhcnNlIiwgInBhcnNlX3FzIiwgInBhcnNlX3FzbCIsICJwYXJzZV9tdWx0aXBh cnQiLAogICAgICAgICAgICJwYXJzZV9oZWFkZXIiLCAicHJpbnRfZXhjZXB0aW9uIiwgInByaW50 X2Vudmlyb24iLAogICAgICAgICAgICJwcmludF9mb3JtIiwgInByaW50X2RpcmVjdG9yeSIsICJw cmludF9hcmd1bWVudHMiLAogICAgICAgICAgICJwcmludF9lbnZpcm9uX3VzYWdlIiwgImVzY2Fw ZSJdCgojIExvZ2dpbmcgc3VwcG9ydAojID09PT09PT09PT09PT09PQoKbG9nZmlsZSA9ICIiICAg ICAgICAgICAgIyBGaWxlbmFtZSB0byBsb2cgdG8sIGlmIG5vdCBlbXB0eQpsb2dmcCA9IE5vbmUg ICAgICAgICAgICAjIEZpbGUgb2JqZWN0IHRvIGxvZyB0bywgaWYgbm90IE5vbmUKCmRlZiBpbml0 bG9nKCphbGxhcmdzKToKICAgICIiIldyaXRlIGEgbG9nIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIGEg bG9nIGZpbGUuCgogICAgRXZlbiB0aG91Z2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW5pdGxv ZygpLCB5b3Ugc2hvdWxkIGFsd2F5cwogICAgdXNlIGxvZygpOyBsb2cgaXMgYSB2YXJpYWJsZSB0 aGF0IGlzIHNldCBlaXRoZXIgdG8gaW5pdGxvZwogICAgKGluaXRpYWxseSksIHRvIGRvbG9nIChv bmNlIHRoZSBsb2cgZmlsZSBoYXMgYmVlbiBvcGVuZWQpLCBvciB0bwogICAgbm9sb2cgKHdoZW4g bG9nZ2luZyBpcyBkaXNhYmxlZCkuCgogICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgZm9ybWF0 IHN0cmluZzsgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgKGlmCiAgICBhbnkpIGFyZSBhcmd1bWVu dHMgdG8gdGhlICUgb3BlcmF0b3IsIHNvIGUuZy4KICAgICAgICBsb2coIiVzOiAlcyIsICJhIiwg ImIiKQogICAgd2lsbCB3cml0ZSAiYTogYiIgdG8gdGhlIGxvZyBmaWxlLCBmb2xsb3dlZCBieSBh IG5ld2xpbmUuCgogICAgSWYgdGhlIGdsb2JhbCBsb2dmcCBpcyBub3QgTm9uZSwgaXQgc2hvdWxk IGJlIGEgZmlsZSBvYmplY3QgdG8KICAgIHdoaWNoIGxvZyBkYXRhIGlzIHdyaXR0ZW4uCgogICAg SWYgdGhlIGdsb2JhbCBsb2dmcCBpcyBOb25lLCB0aGUgZ2xvYmFsIGxvZ2ZpbGUgbWF5IGJlIGEg c3RyaW5nCiAgICBnaXZpbmcgYSBmaWxlbmFtZSB0byBvcGVuLCBpbiBhcHBlbmQgbW9kZS4gIFRo aXMgZmlsZSBzaG91bGQgYmUKICAgIHdvcmxkIHdyaXRhYmxlISEhICBJZiB0aGUgZmlsZSBjYW4n dCBiZSBvcGVuZWQsIGxvZ2dpbmcgaXMKICAgIHNpbGVudGx5IGRpc2FibGVkIChzaW5jZSB0aGVy ZSBpcyBubyBzYWZlIHBsYWNlIHdoZXJlIHdlIGNvdWxkCiAgICBzZW5kIGFuIGVycm9yIG1lc3Nh Z2UpLgoKICAgICIiIgogICAgZ2xvYmFsIGxvZ2ZwLCBsb2cKICAgIGlmIGxvZ2ZpbGUgYW5kIG5v dCBsb2dmcDoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGxvZ2ZwID0gb3Blbihsb2dmaWxlLCAi YSIpCiAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgIHBhc3MKICAgIGlmIG5vdCBs b2dmcDoKICAgICAgICBsb2cgPSBub2xvZwogICAgZWxzZToKICAgICAgICBsb2cgPSBkb2xvZwog ICAgbG9nKCphbGxhcmdzKQoKZGVmIGRvbG9nKGZtdCwgKmFyZ3MpOgogICAgIiIiV3JpdGUgYSBs b2cgbWVzc2FnZSB0byB0aGUgbG9nIGZpbGUuICBTZWUgaW5pdGxvZygpIGZvciBkb2NzLiIiIgog ICAgbG9nZnAud3JpdGUoZm10JWFyZ3MgKyAiXG4iKQoKZGVmIG5vbG9nKCphbGxhcmdzKToKICAg ICIiIkR1bW15IGZ1bmN0aW9uLCBhc3NpZ25lZCB0byBsb2cgd2hlbiBsb2dnaW5nIGlzIGRpc2Fi bGVkLiIiIgogICAgcGFzcwoKbG9nID0gaW5pdGxvZyAgICAgICAgICAgIyBUaGUgY3VycmVudCBs b2dnaW5nIGZ1bmN0aW9uCgoKIyBQYXJzaW5nIGZ1bmN0aW9ucwojID09PT09PT09PT09PT09PT09 CgojIE1heGltdW0gaW5wdXQgd2Ugd2lsbCBhY2NlcHQgd2hlbiBSRVFVRVNUX01FVEhPRCBpcyBQ T1NUCiMgMCA9PT4gdW5saW1pdGVkIGlucHV0Cm1heGxlbiA9IDAKCmRlZiBwYXJzZShmcD1Ob25l LCBlbnZpcm9uPW9zLmVudmlyb24sIGtlZXBfYmxhbmtfdmFsdWVzPTAsIHN0cmljdF9wYXJzaW5n PTApOgogICAgIiIiUGFyc2UgYSBxdWVyeSBpbiB0aGUgZW52aXJvbm1lbnQgb3IgZnJvbSBhIGZp bGUgKGRlZmF1bHQgc3RkaW4pCgogICAgICAgIEFyZ3VtZW50cywgYWxsIG9wdGlvbmFsOgoKICAg ICAgICBmcCAgICAgICAgICAgICAgOiBmaWxlIHBvaW50ZXI7IGRlZmF1bHQ6IHN5cy5zdGRpbgoK ICAgICAgICBlbnZpcm9uICAgICAgICAgOiBlbnZpcm9ubWVudCBkaWN0aW9uYXJ5OyBkZWZhdWx0 OiBvcy5lbnZpcm9uCgogICAgICAgIGtlZXBfYmxhbmtfdmFsdWVzOiBmbGFnIGluZGljYXRpbmcg d2hldGhlciBibGFuayB2YWx1ZXMgaW4KICAgICAgICAgICAgcGVyY2VudC1lbmNvZGVkIGZvcm1z IHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCiAgICAgICAgICAgIEEgdHJ1ZSB2 YWx1ZSBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzCiAgICAgICAg ICAgIGJsYW5rIHN0cmluZ3MuICBUaGUgZGVmYXVsdCBmYWxzZSB2YWx1ZSBpbmRpY2F0ZXMgdGhh dAogICAgICAgICAgICBibGFuayB2YWx1ZXMgYXJlIHRvIGJlIGlnbm9yZWQgYW5kIHRyZWF0ZWQg YXMgaWYgdGhleSB3ZXJlCiAgICAgICAgICAgIG5vdCBpbmNsdWRlZC4KCiAgICAgICAgc3RyaWN0 X3BhcnNpbmc6IGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGRvIHdpdGggcGFyc2luZyBlcnJvcnMu CiAgICAgICAgICAgIElmIGZhbHNlICh0aGUgZGVmYXVsdCksIGVycm9ycyBhcmUgc2lsZW50bHkg aWdub3JlZC4KICAgICAgICAgICAgSWYgdHJ1ZSwgZXJyb3JzIHJhaXNlIGEgVmFsdWVFcnJvciBl eGNlcHRpb24uCiAgICAiIiIKICAgIGlmIGZwIGlzIE5vbmU6CiAgICAgICAgZnAgPSBzeXMuc3Rk aW4KICAgIGlmIG5vdCAnUkVRVUVTVF9NRVRIT0QnIGluIGVudmlyb246CiAgICAgICAgZW52aXJv blsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnICAgICAgICMgRm9yIHRlc3Rpbmcgc3RhbmQtYWxv bmUKICAgIGlmIGVudmlyb25bJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnOgogICAgICAgIGN0 eXBlLCBwZGljdCA9IHBhcnNlX2hlYWRlcihlbnZpcm9uWydDT05URU5UX1RZUEUnXSkKICAgICAg ICBpZiBjdHlwZSA9PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6CiAgICAgICAgICAgIHJldHVybiBw YXJzZV9tdWx0aXBhcnQoZnAsIHBkaWN0KQogICAgICAgIGVsaWYgY3R5cGUgPT0gJ2FwcGxpY2F0 aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6CiAgICAgICAgICAgIGNsZW5ndGggPSBpbnQoZW52 aXJvblsnQ09OVEVOVF9MRU5HVEgnXSkKICAgICAgICAgICAgaWYgbWF4bGVuIGFuZCBjbGVuZ3Ro ID4gbWF4bGVuOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ01heGltdW0gY29u dGVudCBsZW5ndGggZXhjZWVkZWQnCiAgICAgICAgICAgIHFzID0gZnAucmVhZChjbGVuZ3RoKQog ICAgICAgIGVsc2U6CiAgICAgICAgICAgIHFzID0gJycgICAgICAgICAgICAgICAgICAgICAjIFVu a25vd24gY29udGVudC10eXBlCiAgICAgICAgaWYgJ1FVRVJZX1NUUklORycgaW4gZW52aXJvbjoK ICAgICAgICAgICAgaWYgcXM6IHFzID0gcXMgKyAnJicKICAgICAgICAgICAgcXMgPSBxcyArIGVu dmlyb25bJ1FVRVJZX1NUUklORyddCiAgICAgICAgZWxpZiBzeXMuYXJndlsxOl06CiAgICAgICAg ICAgIGlmIHFzOiBxcyA9IHFzICsgJyYnCiAgICAgICAgICAgIHFzID0gcXMgKyBzeXMuYXJndlsx XQogICAgICAgIGVudmlyb25bJ1FVRVJZX1NUUklORyddID0gcXMgICAgIyBYWFggU2hvdWxkbid0 LCByZWFsbHkKICAgIGVsaWYgJ1FVRVJZX1NUUklORycgaW4gZW52aXJvbjoKICAgICAgICBxcyA9 IGVudmlyb25bJ1FVRVJZX1NUUklORyddCiAgICBlbHNlOgogICAgICAgIGlmIHN5cy5hcmd2WzE6 XToKICAgICAgICAgICAgcXMgPSBzeXMuYXJndlsxXQogICAgICAgIGVsc2U6CiAgICAgICAgICAg IHFzID0gIiIKICAgICAgICBlbnZpcm9uWydRVUVSWV9TVFJJTkcnXSA9IHFzICAgICMgWFhYIFNo b3VsZG4ndCwgcmVhbGx5CiAgICByZXR1cm4gdXJscGFyc2UucGFyc2VfcXMocXMsIGtlZXBfYmxh bmtfdmFsdWVzLCBzdHJpY3RfcGFyc2luZykKCgojIHBhcnNlIHF1ZXJ5IHN0cmluZyBmdW5jdGlv biBjYWxsZWQgZnJvbSB1cmxwYXJzZSwKIyB0aGlzIGlzIGRvbmUgaW4gb3JkZXIgdG8gbWFpbnRh aW4gYmFja3dhcmQgY29tcGF0aWJsaXR5LgoKZGVmIHBhcnNlX3FzKHFzLCBrZWVwX2JsYW5rX3Zh bHVlcz0wLCBzdHJpY3RfcGFyc2luZz0wKToKICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMg YSBzdHJpbmcgYXJndW1lbnQuIiIiCiAgICB3YXJuKCJjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRl ZCwgdXNlIHVybHBhcnNlLnBhcnNlX3FzIGluc3RlYWQiLAogICAgICAgICBQZW5kaW5nRGVwcmVj YXRpb25XYXJuaW5nLCAyKQogICAgcmV0dXJuIHVybHBhcnNlLnBhcnNlX3FzKHFzLCBrZWVwX2Js YW5rX3ZhbHVlcywgc3RyaWN0X3BhcnNpbmcpCgoKZGVmIHBhcnNlX3FzbChxcywga2VlcF9ibGFu a192YWx1ZXM9MCwgc3RyaWN0X3BhcnNpbmc9MCk6CiAgICAiIiJQYXJzZSBhIHF1ZXJ5IGdpdmVu IGFzIGEgc3RyaW5nIGFyZ3VtZW50LiIiIgogICAgd2FybigiY2dpLnBhcnNlX3FzbCBpcyBkZXBy ZWNhdGVkLCB1c2UgdXJscGFyc2UucGFyc2VfcXNsIGluc3RlYWQiLAogICAgICAgICBQZW5kaW5n RGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgcmV0dXJuIHVybHBhcnNlLnBhcnNlX3FzbChxcywg a2VlcF9ibGFua192YWx1ZXMsIHN0cmljdF9wYXJzaW5nKQoKZGVmIHBhcnNlX211bHRpcGFydChm cCwgcGRpY3QpOgogICAgIiIiUGFyc2UgbXVsdGlwYXJ0IGlucHV0LgoKICAgIEFyZ3VtZW50czoK ICAgIGZwICAgOiBpbnB1dCBmaWxlCiAgICBwZGljdDogZGljdGlvbmFyeSBjb250YWluaW5nIG90 aGVyIHBhcmFtZXRlcnMgb2YgY29udGVudC10eXBlIGhlYWRlcgoKICAgIFJldHVybnMgYSBkaWN0 aW9uYXJ5IGp1c3QgbGlrZSBwYXJzZV9xcygpOiBrZXlzIGFyZSB0aGUgZmllbGQgbmFtZXMsIGVh Y2gKICAgIHZhbHVlIGlzIGEgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoYXQgZmllbGQuICBUaGlzIGlz IGVhc3kgdG8gdXNlIGJ1dCBub3QKICAgIG11Y2ggZ29vZCBpZiB5b3UgYXJlIGV4cGVjdGluZyBt ZWdhYnl0ZXMgdG8gYmUgdXBsb2FkZWQgLS0gaW4gdGhhdCBjYXNlLAogICAgdXNlIHRoZSBGaWVs ZFN0b3JhZ2UgY2xhc3MgaW5zdGVhZCB3aGljaCBpcyBtdWNoIG1vcmUgZmxleGlibGUuICBOb3Rl CiAgICB0aGF0IGNvbnRlbnQtdHlwZSBpcyB0aGUgcmF3LCB1bnBhcnNlZCBjb250ZW50cyBvZiB0 aGUgY29udGVudC10eXBlCiAgICBoZWFkZXIuCgogICAgWFhYIFRoaXMgZG9lcyBub3QgcGFyc2Ug bmVzdGVkIG11bHRpcGFydCBwYXJ0cyAtLSB1c2UgRmllbGRTdG9yYWdlIGZvcgogICAgdGhhdC4K CiAgICBYWFggVGhpcyBzaG91bGQgcmVhbGx5IGJlIHN1YnN1bWVkIGJ5IEZpZWxkU3RvcmFnZSBh bHRvZ2V0aGVyIC0tIG5vCiAgICBwb2ludCBpbiBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBv ZiB0aGUgc2FtZSBwYXJzaW5nIGFsZ29yaXRobS4KICAgIEFsc28sIEZpZWxkU3RvcmFnZSBwcm90 ZWN0cyBpdHNlbGYgYmV0dGVyIGFnYWluc3QgY2VydGFpbiBEb1MgYXR0YWNrcwogICAgYnkgbGlt aXRpbmcgdGhlIHNpemUgb2YgdGhlIGRhdGEgcmVhZCBpbiBvbmUgY2h1bmsuICBUaGUgQVBJIGhl cmUKICAgIGRvZXMgbm90IHN1cHBvcnQgdGhhdCBraW5kIG9mIHByb3RlY3Rpb24uICBUaGlzIGFs c28gYWZmZWN0cyBwYXJzZSgpCiAgICBzaW5jZSBpdCBjYW4gY2FsbCBwYXJzZV9tdWx0aXBhcnQo KS4KCiAgICAiIiIKICAgIGJvdW5kYXJ5ID0gIiIKICAgIGlmICdib3VuZGFyeScgaW4gcGRpY3Q6 CiAgICAgICAgYm91bmRhcnkgPSBwZGljdFsnYm91bmRhcnknXQogICAgaWYgbm90IHZhbGlkX2Jv dW5kYXJ5KGJvdW5kYXJ5KToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAgKCdJbnZhbGlkIGJv dW5kYXJ5IGluIG11bHRpcGFydCBmb3JtOiAlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICUgKGJvdW5kYXJ5LCkpCgogICAgbmV4dHBhcnQgPSAiLS0iICsgYm91bmRhcnkKICAgIGxhc3Rw YXJ0ID0gIi0tIiArIGJvdW5kYXJ5ICsgIi0tIgogICAgcGFydGRpY3QgPSB7fQogICAgdGVybWlu YXRvciA9ICIiCgogICAgd2hpbGUgdGVybWluYXRvciAhPSBsYXN0cGFydDoKICAgICAgICBieXRl cyA9IC0xCiAgICAgICAgZGF0YSA9IE5vbmUKICAgICAgICBpZiB0ZXJtaW5hdG9yOgogICAgICAg ICAgICAjIEF0IHN0YXJ0IG9mIG5leHQgcGFydC4gIFJlYWQgaGVhZGVycyBmaXJzdC4KICAgICAg ICAgICAgaGVhZGVycyA9IG1pbWV0b29scy5NZXNzYWdlKGZwKQogICAgICAgICAgICBjbGVuZ3Ro ID0gaGVhZGVycy5nZXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJykKICAgICAgICAgICAgaWYgY2xl bmd0aDoKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBieXRlcyA9IGlu dChjbGVuZ3RoKQogICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAg ICAgICAgICAgcGFzcwogICAgICAgICAgICBpZiBieXRlcyA+IDA6CiAgICAgICAgICAgICAgICBp ZiBtYXhsZW4gYW5kIGJ5dGVzID4gbWF4bGVuOgogICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh bHVlRXJyb3IsICdNYXhpbXVtIGNvbnRlbnQgbGVuZ3RoIGV4Y2VlZGVkJwogICAgICAgICAgICAg ICAgZGF0YSA9IGZwLnJlYWQoYnl0ZXMpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg ICBkYXRhID0gIiIKICAgICAgICAjIFJlYWQgbGluZXMgdW50aWwgZW5kIG9mIHBhcnQuCiAgICAg ICAgbGluZXMgPSBbXQogICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFk bGluZSgpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgdGVybWluYXRv ciA9IGxhc3RwYXJ0ICMgRW5kIG91dGVyIGxvb3AKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAg ICAgICAgIGlmIGxpbmVbOjJdID09ICItLSI6CiAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yID0g bGluZS5zdHJpcCgpCiAgICAgICAgICAgICAgICBpZiB0ZXJtaW5hdG9yIGluIChuZXh0cGFydCwg bGFzdHBhcnQpOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGxpbmVzLmFw cGVuZChsaW5lKQogICAgICAgICMgRG9uZSB3aXRoIHBhcnQuCiAgICAgICAgaWYgZGF0YSBpcyBO b25lOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGJ5dGVzIDwgMDoKICAgICAgICAg ICAgaWYgbGluZXM6CiAgICAgICAgICAgICAgICAjIFN0cmlwIGZpbmFsIGxpbmUgdGVybWluYXRv cgogICAgICAgICAgICAgICAgbGluZSA9IGxpbmVzWy0xXQogICAgICAgICAgICAgICAgaWYgbGlu ZVstMjpdID09ICJcclxuIjoKICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdCiAg ICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAiXG4iOgogICAgICAgICAgICAgICAgICAg IGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgICAgICAgIGxpbmVzWy0xXSA9IGxpbmUKICAgICAg ICAgICAgICAgIGRhdGEgPSAiIi5qb2luKGxpbmVzKQogICAgICAgIGxpbmUgPSBoZWFkZXJzWydj b250ZW50LWRpc3Bvc2l0aW9uJ10KICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgY29u dGludWUKICAgICAgICBrZXksIHBhcmFtcyA9IHBhcnNlX2hlYWRlcihsaW5lKQogICAgICAgIGlm IGtleSAhPSAnZm9ybS1kYXRhJzoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBpZiAnbmFt ZScgaW4gcGFyYW1zOgogICAgICAgICAgICBuYW1lID0gcGFyYW1zWyduYW1lJ10KICAgICAgICBl bHNlOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIG5hbWUgaW4gcGFydGRpY3Q6CiAg ICAgICAgICAgIHBhcnRkaWN0W25hbWVdLmFwcGVuZChkYXRhKQogICAgICAgIGVsc2U6CiAgICAg ICAgICAgIHBhcnRkaWN0W25hbWVdID0gW2RhdGFdCgogICAgcmV0dXJuIHBhcnRkaWN0CgoKZGVm IF9wYXJzZXBhcmFtKHMpOgogICAgd2hpbGUgc1s6MV0gPT0gJzsnOgogICAgICAgIHMgPSBzWzE6 XQogICAgICAgIGVuZCA9IHMuZmluZCgnOycpCiAgICAgICAgd2hpbGUgZW5kID4gMCBhbmQgKHMu Y291bnQoJyInLCAwLCBlbmQpIC0gcy5jb3VudCgnXFwiJywgMCwgZW5kKSkgJSAyOgogICAgICAg ICAgICBlbmQgPSBzLmZpbmQoJzsnLCBlbmQgKyAxKQogICAgICAgIGlmIGVuZCA8IDA6CiAgICAg ICAgICAgIGVuZCA9IGxlbihzKQogICAgICAgIGYgPSBzWzplbmRdCiAgICAgICAgeWllbGQgZi5z dHJpcCgpCiAgICAgICAgcyA9IHNbZW5kOl0KCmRlZiBwYXJzZV9oZWFkZXIobGluZSk6CiAgICAi IiJQYXJzZSBhIENvbnRlbnQtdHlwZSBsaWtlIGhlYWRlci4KCiAgICBSZXR1cm4gdGhlIG1haW4g Y29udGVudC10eXBlIGFuZCBhIGRpY3Rpb25hcnkgb2Ygb3B0aW9ucy4KCiAgICAiIiIKICAgIHBh cnRzID0gX3BhcnNlcGFyYW0oJzsnICsgbGluZSkKICAgIGtleSA9IHBhcnRzLm5leHQoKQogICAg cGRpY3QgPSB7fQogICAgZm9yIHAgaW4gcGFydHM6CiAgICAgICAgaSA9IHAuZmluZCgnPScpCiAg ICAgICAgaWYgaSA+PSAwOgogICAgICAgICAgICBuYW1lID0gcFs6aV0uc3RyaXAoKS5sb3dlcigp CiAgICAgICAgICAgIHZhbHVlID0gcFtpKzE6XS5zdHJpcCgpCiAgICAgICAgICAgIGlmIGxlbih2 YWx1ZSkgPj0gMiBhbmQgdmFsdWVbMF0gPT0gdmFsdWVbLTFdID09ICciJzoKICAgICAgICAgICAg ICAgIHZhbHVlID0gdmFsdWVbMTotMV0KICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVw bGFjZSgnXFxcXCcsICdcXCcpLnJlcGxhY2UoJ1xcIicsICciJykKICAgICAgICAgICAgcGRpY3Rb bmFtZV0gPSB2YWx1ZQogICAgcmV0dXJuIGtleSwgcGRpY3QKCgojIENsYXNzZXMgZm9yIGZpZWxk IHN0b3JhZ2UKIyA9PT09PT09PT09PT09PT09PT09PT09PT09CgpjbGFzcyBNaW5pRmllbGRTdG9y YWdlOgoKICAgICIiIkxpa2UgRmllbGRTdG9yYWdlLCBmb3IgdXNlIHdoZW4gbm8gZmlsZSB1cGxv YWRzIGFyZSBwb3NzaWJsZS4iIiIKCiAgICAjIER1bW15IGF0dHJpYnV0ZXMKICAgIGZpbGVuYW1l ID0gTm9uZQogICAgbGlzdCA9IE5vbmUKICAgIHR5cGUgPSBOb25lCiAgICBmaWxlID0gTm9uZQog ICAgdHlwZV9vcHRpb25zID0ge30KICAgIGRpc3Bvc2l0aW9uID0gTm9uZQogICAgZGlzcG9zaXRp b25fb3B0aW9ucyA9IHt9CiAgICBoZWFkZXJzID0ge30KCiAgICBkZWYgX19pbml0X18oc2VsZiwg bmFtZSwgdmFsdWUpOgogICAgICAgICIiIkNvbnN0cnVjdG9yIGZyb20gZmllbGQgbmFtZSBhbmQg dmFsdWUuIiIiCiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYudmFsdWUgPSB2 YWx1ZQogICAgICAgICMgc2VsZi5maWxlID0gU3RyaW5nSU8odmFsdWUpCgogICAgZGVmIF9fcmVw cl9fKHNlbGYpOgogICAgICAgICIiIlJldHVybiBwcmludGFibGUgcmVwcmVzZW50YXRpb24uIiIi CiAgICAgICAgcmV0dXJuICJNaW5pRmllbGRTdG9yYWdlKCVyLCAlcikiICUgKHNlbGYubmFtZSwg c2VsZi52YWx1ZSkKCgpjbGFzcyBGaWVsZFN0b3JhZ2U6CgogICAgIiIiU3RvcmUgYSBzZXF1ZW5j ZSBvZiBmaWVsZHMsIHJlYWRpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YS4KCiAgICBUaGlzIGNsYXNz IHByb3ZpZGVzIG5hbWluZywgdHlwaW5nLCBmaWxlcyBzdG9yZWQgb24gZGlzaywgYW5kCiAgICBt b3JlLiAgQXQgdGhlIHRvcCBsZXZlbCwgaXQgaXMgYWNjZXNzaWJsZSBsaWtlIGEgZGljdGlvbmFy eSwgd2hvc2UKICAgIGtleXMgYXJlIHRoZSBmaWVsZCBuYW1lcy4gIChOb3RlOiBOb25lIGNhbiBv Y2N1ciBhcyBhIGZpZWxkIG5hbWUuKQogICAgVGhlIGl0ZW1zIGFyZSBlaXRoZXIgYSBQeXRob24g bGlzdCAoaWYgdGhlcmUncyBtdWx0aXBsZSB2YWx1ZXMpIG9yCiAgICBhbm90aGVyIEZpZWxkU3Rv cmFnZSBvciBNaW5pRmllbGRTdG9yYWdlIG9iamVjdC4gIElmIGl0J3MgYSBzaW5nbGUKICAgIG9i amVjdCwgaXQgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKCiAgICBuYW1lOiB0aGUgZmll bGQgbmFtZSwgaWYgc3BlY2lmaWVkOyBvdGhlcndpc2UgTm9uZQoKICAgIGZpbGVuYW1lOiB0aGUg ZmlsZW5hbWUsIGlmIHNwZWNpZmllZDsgb3RoZXJ3aXNlIE5vbmU7IHRoaXMgaXMgdGhlCiAgICAg ICAgY2xpZW50IHNpZGUgZmlsZW5hbWUsICpub3QqIHRoZSBmaWxlIG5hbWUgb24gd2hpY2ggaXQg aXMKICAgICAgICBzdG9yZWQgKHRoYXQncyBhIHRlbXBvcmFyeSBmaWxlIHlvdSBkb24ndCBkZWFs IHdpdGgpCgogICAgdmFsdWU6IHRoZSB2YWx1ZSBhcyBhICpzdHJpbmcqOyBmb3IgZmlsZSB1cGxv YWRzLCB0aGlzCiAgICAgICAgdHJhbnNwYXJlbnRseSByZWFkcyB0aGUgZmlsZSBldmVyeSB0aW1l IHlvdSByZXF1ZXN0IHRoZSB2YWx1ZQoKICAgIGZpbGU6IHRoZSBmaWxlKC1saWtlKSBvYmplY3Qg ZnJvbSB3aGljaCB5b3UgY2FuIHJlYWQgdGhlIGRhdGE7CiAgICAgICAgTm9uZSBpZiB0aGUgZGF0 YSBpcyBzdG9yZWQgYSBzaW1wbGUgc3RyaW5nCgogICAgdHlwZTogdGhlIGNvbnRlbnQtdHlwZSwg b3IgTm9uZSBpZiBub3Qgc3BlY2lmaWVkCgogICAgdHlwZV9vcHRpb25zOiBkaWN0aW9uYXJ5IG9m IG9wdGlvbnMgc3BlY2lmaWVkIG9uIHRoZSBjb250ZW50LXR5cGUKICAgICAgICBsaW5lCgogICAg ZGlzcG9zaXRpb246IGNvbnRlbnQtZGlzcG9zaXRpb24sIG9yIE5vbmUgaWYgbm90IHNwZWNpZmll ZAoKICAgIGRpc3Bvc2l0aW9uX29wdGlvbnM6IGRpY3Rpb25hcnkgb2YgY29ycmVzcG9uZGluZyBv cHRpb25zCgogICAgaGVhZGVyczogYSBkaWN0aW9uYXJ5KC1saWtlKSBvYmplY3QgKHNvbWV0aW1l cyByZmM4MjIuTWVzc2FnZSBvciBhCiAgICAgICAgc3ViY2xhc3MgdGhlcmVvZikgY29udGFpbmlu ZyAqYWxsKiBoZWFkZXJzCgogICAgVGhlIGNsYXNzIGlzIHN1YmNsYXNzYWJsZSwgbW9zdGx5IGZv ciB0aGUgcHVycG9zZSBvZiBvdmVycmlkaW5nCiAgICB0aGUgbWFrZV9maWxlKCkgbWV0aG9kLCB3 aGljaCBpcyBjYWxsZWQgaW50ZXJuYWxseSB0byBjb21lIHVwIHdpdGgKICAgIGEgZmlsZSBvcGVu IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bwogICAg b3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2hvaWNlIG9mIHN0b3JpbmcgYWxsIGZpbGVzIGluIGEgdGVt cG9yYXJ5CiAgICBkaXJlY3RvcnkgYW5kIHVubGlua2luZyB0aGVtIGFzIHNvb24gYXMgdGhleSBo YXZlIGJlZW4gb3BlbmVkLgoKICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcD1Ob25l LCBoZWFkZXJzPU5vbmUsIG91dGVyYm91bmRhcnk9IiIsCiAgICAgICAgICAgICAgICAgZW52aXJv bj1vcy5lbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcz0wLCBzdHJpY3RfcGFyc2luZz0wKToKICAg ICAgICAiIiJDb25zdHJ1Y3Rvci4gIFJlYWQgbXVsdGlwYXJ0LyogdW50aWwgbGFzdCBwYXJ0LgoK ICAgICAgICBBcmd1bWVudHMsIGFsbCBvcHRpb25hbDoKCiAgICAgICAgZnAgICAgICAgICAgICAg IDogZmlsZSBwb2ludGVyOyBkZWZhdWx0OiBzeXMuc3RkaW4KICAgICAgICAgICAgKG5vdCB1c2Vk IHdoZW4gdGhlIHJlcXVlc3QgbWV0aG9kIGlzIEdFVCkKCiAgICAgICAgaGVhZGVycyAgICAgICAg IDogaGVhZGVyIGRpY3Rpb25hcnktbGlrZSBvYmplY3Q7IGRlZmF1bHQ6CiAgICAgICAgICAgIHRh a2VuIGZyb20gZW52aXJvbiBhcyBwZXIgQ0dJIHNwZWMKCiAgICAgICAgb3V0ZXJib3VuZGFyeSAg IDogdGVybWluYXRpbmcgbXVsdGlwYXJ0IGJvdW5kYXJ5CiAgICAgICAgICAgIChmb3IgaW50ZXJu YWwgdXNlIG9ubHkpCgogICAgICAgIGVudmlyb24gICAgICAgICA6IGVudmlyb25tZW50IGRpY3Rp b25hcnk7IGRlZmF1bHQ6IG9zLmVudmlyb24KCiAgICAgICAga2VlcF9ibGFua192YWx1ZXM6IGZs YWcgaW5kaWNhdGluZyB3aGV0aGVyIGJsYW5rIHZhbHVlcyBpbgogICAgICAgICAgICBwZXJjZW50 LWVuY29kZWQgZm9ybXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4KICAgICAg ICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyB0aGF0IGJsYW5rcyBzaG91bGQgYmUgcmV0YWlu ZWQgYXMKICAgICAgICAgICAgYmxhbmsgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlIHZhbHVl IGluZGljYXRlcyB0aGF0CiAgICAgICAgICAgIGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3Jl ZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKICAgICAgICAgICAgbm90IGluY2x1ZGVkLgoK ICAgICAgICBzdHJpY3RfcGFyc2luZzogZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gZG8gd2l0aCBw YXJzaW5nIGVycm9ycy4KICAgICAgICAgICAgSWYgZmFsc2UgKHRoZSBkZWZhdWx0KSwgZXJyb3Jz IGFyZSBzaWxlbnRseSBpZ25vcmVkLgogICAgICAgICAgICBJZiB0cnVlLCBlcnJvcnMgcmFpc2Ug YSBWYWx1ZUVycm9yIGV4Y2VwdGlvbi4KCiAgICAgICAgIiIiCiAgICAgICAgbWV0aG9kID0gJ0dF VCcKICAgICAgICBzZWxmLmtlZXBfYmxhbmtfdmFsdWVzID0ga2VlcF9ibGFua192YWx1ZXMKICAg ICAgICBzZWxmLnN0cmljdF9wYXJzaW5nID0gc3RyaWN0X3BhcnNpbmcKICAgICAgICBpZiAnUkVR VUVTVF9NRVRIT0QnIGluIGVudmlyb246CiAgICAgICAgICAgIG1ldGhvZCA9IGVudmlyb25bJ1JF UVVFU1RfTUVUSE9EJ10udXBwZXIoKQogICAgICAgIHNlbGYucXNfb25fcG9zdCA9IE5vbmUKICAg ICAgICBpZiBtZXRob2QgPT0gJ0dFVCcgb3IgbWV0aG9kID09ICdIRUFEJzoKICAgICAgICAgICAg aWYgJ1FVRVJZX1NUUklORycgaW4gZW52aXJvbjoKICAgICAgICAgICAgICAgIHFzID0gZW52aXJv blsnUVVFUllfU1RSSU5HJ10KICAgICAgICAgICAgZWxpZiBzeXMuYXJndlsxOl06CiAgICAgICAg ICAgICAgICBxcyA9IHN5cy5hcmd2WzFdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg ICBxcyA9ICIiCiAgICAgICAgICAgIGZwID0gU3RyaW5nSU8ocXMpCiAgICAgICAgICAgIGlmIGhl YWRlcnMgaXMgTm9uZToKICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7J2NvbnRlbnQtdHlwZSc6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu Y29kZWQifQogICAgICAgIGlmIGhlYWRlcnMgaXMgTm9uZToKICAgICAgICAgICAgaGVhZGVycyA9 IHt9CiAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUE9TVCc6CiAgICAgICAgICAgICAgICAjIFNl dCBkZWZhdWx0IGNvbnRlbnQtdHlwZSBmb3IgUE9TVCB0byB3aGF0J3MgdHJhZGl0aW9uYWwKICAg ICAgICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gImFwcGxpY2F0aW9uL3gtd3d3 LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgICAgaWYgJ0NPTlRFTlRfVFlQRScgaW4gZW52aXJv bjoKICAgICAgICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gZW52aXJvblsnQ09O VEVOVF9UWVBFJ10KICAgICAgICAgICAgaWYgJ1FVRVJZX1NUUklORycgaW4gZW52aXJvbjoKICAg ICAgICAgICAgICAgIHNlbGYucXNfb25fcG9zdCA9IGVudmlyb25bJ1FVRVJZX1NUUklORyddCiAg ICAgICAgICAgIGlmICdDT05URU5UX0xFTkdUSCcgaW4gZW52aXJvbjoKICAgICAgICAgICAgICAg IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10gPSBlbnZpcm9uWydDT05URU5UX0xFTkdUSCddCiAg ICAgICAgc2VsZi5mcCA9IGZwIG9yIHN5cy5zdGRpbgogICAgICAgIHNlbGYuaGVhZGVycyA9IGhl YWRlcnMKICAgICAgICBzZWxmLm91dGVyYm91bmRhcnkgPSBvdXRlcmJvdW5kYXJ5CgogICAgICAg ICMgUHJvY2VzcyBjb250ZW50LWRpc3Bvc2l0aW9uIGhlYWRlcgogICAgICAgIGNkaXNwLCBwZGlj dCA9ICIiLCB7fQogICAgICAgIGlmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBzZWxmLmhlYWRl cnM6CiAgICAgICAgICAgIGNkaXNwLCBwZGljdCA9IHBhcnNlX2hlYWRlcihzZWxmLmhlYWRlcnNb J2NvbnRlbnQtZGlzcG9zaXRpb24nXSkKICAgICAgICBzZWxmLmRpc3Bvc2l0aW9uID0gY2Rpc3AK ICAgICAgICBzZWxmLmRpc3Bvc2l0aW9uX29wdGlvbnMgPSBwZGljdAogICAgICAgIHNlbGYubmFt ZSA9IE5vbmUKICAgICAgICBpZiAnbmFtZScgaW4gcGRpY3Q6CiAgICAgICAgICAgIHNlbGYubmFt ZSA9IHBkaWN0WyduYW1lJ10KICAgICAgICBzZWxmLmZpbGVuYW1lID0gTm9uZQogICAgICAgIGlm ICdmaWxlbmFtZScgaW4gcGRpY3Q6CiAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBwZGljdFsn ZmlsZW5hbWUnXQoKICAgICAgICAjIFByb2Nlc3MgY29udGVudC10eXBlIGhlYWRlcgogICAgICAg ICMKICAgICAgICAjIEhvbm9yIGFueSBleGlzdGluZyBjb250ZW50LXR5cGUgaGVhZGVyLiAgQnV0 IGlmIHRoZXJlIGlzIG5vCiAgICAgICAgIyBjb250ZW50LXR5cGUgaGVhZGVyLCB1c2Ugc29tZSBz ZW5zaWJsZSBkZWZhdWx0cy4gIEFzc3VtZQogICAgICAgICMgb3V0ZXJib3VuZGFyeSBpcyAiIiBh dCB0aGUgb3V0ZXIgbGV2ZWwsIGJ1dCBzb21ldGhpbmcgbm9uLWZhbHNlCiAgICAgICAgIyBpbnNp ZGUgYSBtdWx0aS1wYXJ0LiAgVGhlIGRlZmF1bHQgZm9yIGFuIGlubmVyIHBhcnQgaXMgdGV4dC9w bGFpbiwKICAgICAgICAjIGJ1dCBmb3IgYW4gb3V0ZXIgcGFydCBpdCBzaG91bGQgYmUgdXJsZW5j b2RlZC4gIFRoaXMgc2hvdWxkIGNhdGNoCiAgICAgICAgIyBib2d1cyBjbGllbnRzIHdoaWNoIGVy cm9uZW91c2x5IGZvcmdldCB0byBpbmNsdWRlIGEgY29udGVudC10eXBlCiAgICAgICAgIyBoZWFk ZXIuCiAgICAgICAgIwogICAgICAgICMgU2VlIGJlbG93IGZvciB3aGF0IHdlIGRvIGlmIHRoZXJl IGRvZXMgZXhpc3QgYSBjb250ZW50LXR5cGUgaGVhZGVyLAogICAgICAgICMgYnV0IGl0IGhhcHBl bnMgdG8gYmUgc29tZXRoaW5nIHdlIGRvbid0IHVuZGVyc3RhbmQuCiAgICAgICAgaWYgJ2NvbnRl bnQtdHlwZScgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICBjdHlwZSwgcGRpY3QgPSBwYXJz ZV9oZWFkZXIoc2VsZi5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkKICAgICAgICBlbGlmIHNlbGYu b3V0ZXJib3VuZGFyeSBvciBtZXRob2QgIT0gJ1BPU1QnOgogICAgICAgICAgICBjdHlwZSwgcGRp Y3QgPSAidGV4dC9wbGFpbiIsIHt9CiAgICAgICAgZWxzZToKICAgICAgICAgICAgY3R5cGUsIHBk aWN0ID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIHt9CiAgICAgICAgc2Vs Zi50eXBlID0gY3R5cGUKICAgICAgICBzZWxmLnR5cGVfb3B0aW9ucyA9IHBkaWN0CiAgICAgICAg c2VsZi5pbm5lcmJvdW5kYXJ5ID0gIiIKICAgICAgICBpZiAnYm91bmRhcnknIGluIHBkaWN0Ogog ICAgICAgICAgICBzZWxmLmlubmVyYm91bmRhcnkgPSBwZGljdFsnYm91bmRhcnknXQogICAgICAg IGNsZW4gPSAtMQogICAgICAgIGlmICdjb250ZW50LWxlbmd0aCcgaW4gc2VsZi5oZWFkZXJzOgog ICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBjbGVuID0gaW50KHNlbGYuaGVhZGVyc1sn Y29udGVudC1sZW5ndGgnXSkKICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAg ICAgICAgICBwYXNzCiAgICAgICAgICAgIGlmIG1heGxlbiBhbmQgY2xlbiA+IG1heGxlbjoKICAg ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdNYXhpbXVtIGNvbnRlbnQgbGVuZ3RoIGV4 Y2VlZGVkJwogICAgICAgIHNlbGYubGVuZ3RoID0gY2xlbgoKICAgICAgICBzZWxmLmxpc3QgPSBz ZWxmLmZpbGUgPSBOb25lCiAgICAgICAgc2VsZi5kb25lID0gMAogICAgICAgIGlmIGN0eXBlID09 ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOgogICAgICAgICAgICBzZWxmLnJl YWRfdXJsZW5jb2RlZCgpCiAgICAgICAgZWxpZiBjdHlwZVs6MTBdID09ICdtdWx0aXBhcnQvJzoK ICAgICAgICAgICAgc2VsZi5yZWFkX211bHRpKGVudmlyb24sIGtlZXBfYmxhbmtfdmFsdWVzLCBz dHJpY3RfcGFyc2luZykKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLnJlYWRfc2luZ2xl KCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIiIiUmV0dXJuIGEgcHJpbnRhYmxl IHJlcHJlc2VudGF0aW9uLiIiIgogICAgICAgIHJldHVybiAiRmllbGRTdG9yYWdlKCVyLCAlciwg JXIpIiAlICgKICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5maWxlbmFtZSwgc2VsZi52 YWx1ZSkKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5r ZXlzKCkpCgogICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAgIGlmIG5hbWUg IT0gJ3ZhbHVlJzoKICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKICAgICAg ICBpZiBzZWxmLmZpbGU6CiAgICAgICAgICAgIHNlbGYuZmlsZS5zZWVrKDApCiAgICAgICAgICAg IHZhbHVlID0gc2VsZi5maWxlLnJlYWQoKQogICAgICAgICAgICBzZWxmLmZpbGUuc2VlaygwKQog ICAgICAgIGVsaWYgc2VsZi5saXN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICB2YWx1ZSA9IHNl bGYubGlzdAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHZhbHVlID0gTm9uZQogICAgICAgIHJl dHVybiB2YWx1ZQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICIiIkRp Y3Rpb25hcnkgc3R5bGUgaW5kZXhpbmcuIiIiCiAgICAgICAgaWYgc2VsZi5saXN0IGlzIE5vbmU6 CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIm5vdCBpbmRleGFibGUiCiAgICAgICAgZm91 bmQgPSBbXQogICAgICAgIGZvciBpdGVtIGluIHNlbGYubGlzdDoKICAgICAgICAgICAgaWYgaXRl bS5uYW1lID09IGtleTogZm91bmQuYXBwZW5kKGl0ZW0pCiAgICAgICAgaWYgbm90IGZvdW5kOgog ICAgICAgICAgICByYWlzZSBLZXlFcnJvciwga2V5CiAgICAgICAgaWYgbGVuKGZvdW5kKSA9PSAx OgogICAgICAgICAgICByZXR1cm4gZm91bmRbMF0KICAgICAgICBlbHNlOgogICAgICAgICAgICBy ZXR1cm4gZm91bmQKCiAgICBkZWYgZ2V0dmFsdWUoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgog ICAgICAgICIiIkRpY3Rpb25hcnkgc3R5bGUgZ2V0KCkgbWV0aG9kLCBpbmNsdWRpbmcgJ3ZhbHVl JyBsb29rdXAuIiIiCiAgICAgICAgaWYga2V5IGluIHNlbGY6CiAgICAgICAgICAgIHZhbHVlID0g c2VsZltrZXldCiAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIHR5cGUoW10pOgogICAgICAg ICAgICAgICAgcmV0dXJuIG1hcChhdHRyZ2V0dGVyKCd2YWx1ZScpLCB2YWx1ZSkKICAgICAgICAg ICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZQogICAgICAgIGVsc2U6 CiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CgogICAgZGVmIGdldGZpcnN0KHNlbGYsIGtleSwg ZGVmYXVsdD1Ob25lKToKICAgICAgICAiIiIgUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSByZWNlaXZl ZC4iIiIKICAgICAgICBpZiBrZXkgaW4gc2VsZjoKICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tl eV0KICAgICAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgdHlwZShbXSk6CiAgICAgICAgICAgICAg ICByZXR1cm4gdmFsdWVbMF0udmFsdWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg IHJldHVybiB2YWx1ZS52YWx1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBkZWZh dWx0CgogICAgZGVmIGdldGxpc3Qoc2VsZiwga2V5KToKICAgICAgICAiIiIgUmV0dXJuIGxpc3Qg b2YgcmVjZWl2ZWQgdmFsdWVzLiIiIgogICAgICAgIGlmIGtleSBpbiBzZWxmOgogICAgICAgICAg ICB2YWx1ZSA9IHNlbGZba2V5XQogICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyB0eXBlKFtd KToKICAgICAgICAgICAgICAgIHJldHVybiBtYXAoYXR0cmdldHRlcigndmFsdWUnKSwgdmFsdWUp CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbHVlLnZhbHVlXQog ICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBrZXlzKHNlbGYpOgog ICAgICAgICIiIkRpY3Rpb25hcnkgc3R5bGUga2V5cygpIG1ldGhvZC4iIiIKICAgICAgICBpZiBz ZWxmLmxpc3QgaXMgTm9uZToKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAibm90IGluZGV4 YWJsZSIKICAgICAgICByZXR1cm4gbGlzdChzZXQoaXRlbS5uYW1lIGZvciBpdGVtIGluIHNlbGYu bGlzdCkpCgogICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKICAgICAgICAiIiJEaWN0aW9uYXJ5 IHN0eWxlIGhhc19rZXkoKSBtZXRob2QuIiIiCiAgICAgICAgaWYgc2VsZi5saXN0IGlzIE5vbmU6 CiAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIm5vdCBpbmRleGFibGUiCiAgICAgICAgcmV0 dXJuIGFueShpdGVtLm5hbWUgPT0ga2V5IGZvciBpdGVtIGluIHNlbGYubGlzdCkKCiAgICBkZWYg X19jb250YWluc19fKHNlbGYsIGtleSk6CiAgICAgICAgIiIiRGljdGlvbmFyeSBzdHlsZSBfX2Nv bnRhaW5zX18gbWV0aG9kLiIiIgogICAgICAgIGlmIHNlbGYubGlzdCBpcyBOb25lOgogICAgICAg ICAgICByYWlzZSBUeXBlRXJyb3IsICJub3QgaW5kZXhhYmxlIgogICAgICAgIHJldHVybiBhbnko aXRlbS5uYW1lID09IGtleSBmb3IgaXRlbSBpbiBzZWxmLmxpc3QpCgogICAgZGVmIF9fbGVuX18o c2VsZik6CiAgICAgICAgIiIiRGljdGlvbmFyeSBzdHlsZSBsZW4oeCkgc3VwcG9ydC4iIiIKICAg ICAgICByZXR1cm4gbGVuKHNlbGYua2V5cygpKQoKICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToK ICAgICAgICByZXR1cm4gYm9vbChzZWxmLmxpc3QpCgogICAgZGVmIHJlYWRfdXJsZW5jb2RlZChz ZWxmKToKICAgICAgICAiIiJJbnRlcm5hbDogcmVhZCBkYXRhIGluIHF1ZXJ5IHN0cmluZyBmb3Jt YXQuIiIiCiAgICAgICAgcXMgPSBzZWxmLmZwLnJlYWQoc2VsZi5sZW5ndGgpCiAgICAgICAgaWYg c2VsZi5xc19vbl9wb3N0OgogICAgICAgICAgICBxcyArPSAnJicgKyBzZWxmLnFzX29uX3Bvc3QK ICAgICAgICBzZWxmLmxpc3QgPSBsaXN0ID0gW10KICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB1 cmxwYXJzZS5wYXJzZV9xc2wocXMsIHNlbGYua2VlcF9ibGFua192YWx1ZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJpY3RfcGFyc2luZyk6CiAg ICAgICAgICAgIGxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCiAgICAg ICAgc2VsZi5za2lwX2xpbmVzKCkKCiAgICBGaWVsZFN0b3JhZ2VDbGFzcyA9IE5vbmUKCiAgICBk ZWYgcmVhZF9tdWx0aShzZWxmLCBlbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywgc3RyaWN0X3Bh cnNpbmcpOgogICAgICAgICIiIkludGVybmFsOiByZWFkIGEgcGFydCB0aGF0IGlzIGl0c2VsZiBt dWx0aXBhcnQuIiIiCiAgICAgICAgaWIgPSBzZWxmLmlubmVyYm91bmRhcnkKICAgICAgICBpZiBu b3QgdmFsaWRfYm91bmRhcnkoaWIpOgogICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnSW52 YWxpZCBib3VuZGFyeSBpbiBtdWx0aXBhcnQgZm9ybTogJXInICUgKGliLCkKICAgICAgICBzZWxm Lmxpc3QgPSBbXQogICAgICAgIGlmIHNlbGYucXNfb25fcG9zdDoKICAgICAgICAgICAgZm9yIGtl eSwgdmFsdWUgaW4gdXJscGFyc2UucGFyc2VfcXNsKHNlbGYucXNfb25fcG9zdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmtlZXBfYmxhbmtfdmFsdWVzLCBzZWxmLnN0cmlj dF9wYXJzaW5nKToKICAgICAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQoTWluaUZpZWxkU3Rv cmFnZShrZXksIHZhbHVlKSkKICAgICAgICAgICAgRmllbGRTdG9yYWdlQ2xhc3MgPSBOb25lCgog ICAgICAgIGtsYXNzID0gc2VsZi5GaWVsZFN0b3JhZ2VDbGFzcyBvciBzZWxmLl9fY2xhc3NfXwog ICAgICAgIHBhcnQgPSBrbGFzcyhzZWxmLmZwLCB7fSwgaWIsCiAgICAgICAgICAgICAgICAgICAg IGVudmlyb24sIGtlZXBfYmxhbmtfdmFsdWVzLCBzdHJpY3RfcGFyc2luZykKICAgICAgICAjIFRo cm93IGZpcnN0IHBhcnQgYXdheQogICAgICAgIHdoaWxlIG5vdCBwYXJ0LmRvbmU6CiAgICAgICAg ICAgIGhlYWRlcnMgPSByZmM4MjIuTWVzc2FnZShzZWxmLmZwKQogICAgICAgICAgICBwYXJ0ID0g a2xhc3Moc2VsZi5mcCwgaGVhZGVycywgaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnZp cm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywgc3RyaWN0X3BhcnNpbmcpCiAgICAgICAgICAgIHNlbGYu bGlzdC5hcHBlbmQocGFydCkKICAgICAgICBzZWxmLnNraXBfbGluZXMoKQoKICAgIGRlZiByZWFk X3NpbmdsZShzZWxmKToKICAgICAgICAiIiJJbnRlcm5hbDogcmVhZCBhbiBhdG9taWMgcGFydC4i IiIKICAgICAgICBpZiBzZWxmLmxlbmd0aCA+PSAwOgogICAgICAgICAgICBzZWxmLnJlYWRfYmlu YXJ5KCkKICAgICAgICAgICAgc2VsZi5za2lwX2xpbmVzKCkKICAgICAgICBlbHNlOgogICAgICAg ICAgICBzZWxmLnJlYWRfbGluZXMoKQogICAgICAgIHNlbGYuZmlsZS5zZWVrKDApCgogICAgYnVm c2l6ZSA9IDgqMTAyNCAgICAgICAgICAgICMgSS9PIGJ1ZmZlcmluZyBzaXplIGZvciBjb3B5IHRv IGZpbGUKCiAgICBkZWYgcmVhZF9iaW5hcnkoc2VsZik6CiAgICAgICAgIiIiSW50ZXJuYWw6IHJl YWQgYmluYXJ5IGRhdGEuIiIiCiAgICAgICAgc2VsZi5maWxlID0gc2VsZi5tYWtlX2ZpbGUoJ2In KQogICAgICAgIHRvZG8gPSBzZWxmLmxlbmd0aAogICAgICAgIGlmIHRvZG8gPj0gMDoKICAgICAg ICAgICAgd2hpbGUgdG9kbyA+IDA6CiAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5mcC5yZWFk KG1pbih0b2RvLCBzZWxmLmJ1ZnNpemUpKQogICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAg ICAgICAgICAgICAgICAgICAgc2VsZi5kb25lID0gLTEKICAgICAgICAgICAgICAgICAgICBicmVh awogICAgICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGRhdGEpCiAgICAgICAgICAgICAgICB0 b2RvID0gdG9kbyAtIGxlbihkYXRhKQoKICAgIGRlZiByZWFkX2xpbmVzKHNlbGYpOgogICAgICAg ICIiIkludGVybmFsOiByZWFkIGxpbmVzIHVudGlsIEVPRiBvciBvdXRlcmJvdW5kYXJ5LiIiIgog ICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuX19maWxlID0gU3RyaW5nSU8oKQogICAgICAgIGlmIHNl bGYub3V0ZXJib3VuZGFyeToKICAgICAgICAgICAgc2VsZi5yZWFkX2xpbmVzX3RvX291dGVyYm91 bmRhcnkoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucmVhZF9saW5lc190b19lb2Yo KQoKICAgIGRlZiBfX3dyaXRlKHNlbGYsIGxpbmUpOgogICAgICAgIGlmIHNlbGYuX19maWxlIGlz IG5vdCBOb25lOgogICAgICAgICAgICBpZiBzZWxmLl9fZmlsZS50ZWxsKCkgKyBsZW4obGluZSkg PiAxMDAwOgogICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5tYWtlX2ZpbGUoJycpCiAg ICAgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5fX2ZpbGUuZ2V0dmFsdWUoKSkKICAg ICAgICAgICAgICAgIHNlbGYuX19maWxlID0gTm9uZQogICAgICAgIHNlbGYuZmlsZS53cml0ZShs aW5lKQoKICAgIGRlZiByZWFkX2xpbmVzX3RvX2VvZihzZWxmKToKICAgICAgICAiIiJJbnRlcm5h bDogcmVhZCBsaW5lcyB1bnRpbCBFT0YuIiIiCiAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAg bGluZSA9IHNlbGYuZnAucmVhZGxpbmUoMTw8MTYpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lOgog ICAgICAgICAgICAgICAgc2VsZi5kb25lID0gLTEKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAg ICAgICAgIHNlbGYuX193cml0ZShsaW5lKQoKICAgIGRlZiByZWFkX2xpbmVzX3RvX291dGVyYm91 bmRhcnkoc2VsZik6CiAgICAgICAgIiIiSW50ZXJuYWw6IHJlYWQgbGluZXMgdW50aWwgb3V0ZXJi b3VuZGFyeS4iIiIKICAgICAgICBuZXh0ID0gIi0tIiArIHNlbGYub3V0ZXJib3VuZGFyeQogICAg ICAgIGxhc3QgPSBuZXh0ICsgIi0tIgogICAgICAgIGRlbGltID0gIiIKICAgICAgICBsYXN0X2xp bmVfbGZlbmQgPSBUcnVlCiAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgbGluZSA9IHNlbGYu ZnAucmVhZGxpbmUoMTw8MTYpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAg ICAgc2VsZi5kb25lID0gLTEKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGlmIGxp bmVbOjJdID09ICItLSIgYW5kIGxhc3RfbGluZV9sZmVuZDoKICAgICAgICAgICAgICAgIHN0cmlw cGVkbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgaWYgc3RyaXBwZWRsaW5lID09 IG5leHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGlmIHN0cmlw cGVkbGluZSA9PSBsYXN0OgogICAgICAgICAgICAgICAgICAgIHNlbGYuZG9uZSA9IDEKICAgICAg ICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBvZGVsaW0gPSBkZWxpbQogICAgICAgICAg ICBpZiBsaW5lWy0yOl0gPT0gIlxyXG4iOgogICAgICAgICAgICAgICAgZGVsaW0gPSAiXHJcbiIK ICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KICAgICAgICAgICAgICAgIGxhc3RfbGlu ZV9sZmVuZCA9IFRydWUKICAgICAgICAgICAgZWxpZiBsaW5lWy0xXSA9PSAiXG4iOgogICAgICAg ICAgICAgICAgZGVsaW0gPSAiXG4iCiAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCiAg ICAgICAgICAgICAgICBsYXN0X2xpbmVfbGZlbmQgPSBUcnVlCiAgICAgICAgICAgIGVsc2U6CiAg ICAgICAgICAgICAgICBkZWxpbSA9ICIiCiAgICAgICAgICAgICAgICBsYXN0X2xpbmVfbGZlbmQg PSBGYWxzZQogICAgICAgICAgICBzZWxmLl9fd3JpdGUob2RlbGltICsgbGluZSkKCiAgICBkZWYg c2tpcF9saW5lcyhzZWxmKToKICAgICAgICAiIiJJbnRlcm5hbDogc2tpcCBsaW5lcyB1bnRpbCBv dXRlciBib3VuZGFyeSBpZiBkZWZpbmVkLiIiIgogICAgICAgIGlmIG5vdCBzZWxmLm91dGVyYm91 bmRhcnkgb3Igc2VsZi5kb25lOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBuZXh0ID0gIi0t IiArIHNlbGYub3V0ZXJib3VuZGFyeQogICAgICAgIGxhc3QgPSBuZXh0ICsgIi0tIgogICAgICAg IGxhc3RfbGluZV9sZmVuZCA9IFRydWUKICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICBsaW5l ID0gc2VsZi5mcC5yZWFkbGluZSgxPDwxNikKICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAg ICAgICAgICAgICBzZWxmLmRvbmUgPSAtMQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg ICAgaWYgbGluZVs6Ml0gPT0gIi0tIiBhbmQgbGFzdF9saW5lX2xmZW5kOgogICAgICAgICAgICAg ICAgc3RyaXBwZWRsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICAgICBpZiBzdHJpcHBl ZGxpbmUgPT0gbmV4dDoKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAg aWYgc3RyaXBwZWRsaW5lID09IGxhc3Q6CiAgICAgICAgICAgICAgICAgICAgc2VsZi5kb25lID0g MQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGxhc3RfbGluZV9sZmVuZCA9 IGxpbmUuZW5kc3dpdGgoJ1xuJykKCiAgICBkZWYgbWFrZV9maWxlKHNlbGYsIGJpbmFyeT1Ob25l KToKICAgICAgICAiIiJPdmVycmlkYWJsZTogcmV0dXJuIGEgcmVhZGFibGUgJiB3cml0YWJsZSBm aWxlLgoKICAgICAgICBUaGUgZmlsZSB3aWxsIGJlIHVzZWQgYXMgZm9sbG93czoKICAgICAgICAt IGRhdGEgaXMgd3JpdHRlbiB0byBpdAogICAgICAgIC0gc2VlaygwKQogICAgICAgIC0gZGF0YSBp cyByZWFkIGZyb20gaXQKCiAgICAgICAgVGhlICdiaW5hcnknIGFyZ3VtZW50IGlzIHVudXNlZCAt LSB0aGUgZmlsZSBpcyBhbHdheXMgb3BlbmVkCiAgICAgICAgaW4gYmluYXJ5IG1vZGUuCgogICAg ICAgIFRoaXMgdmVyc2lvbiBvcGVucyBhIHRlbXBvcmFyeSBmaWxlIGZvciByZWFkaW5nIGFuZCB3 cml0aW5nLAogICAgICAgIGFuZCBpbW1lZGlhdGVseSBkZWxldGVzICh1bmxpbmtzKSBpdC4gIFRo ZSB0cmljayAob24gVW5peCEpIGlzCiAgICAgICAgdGhhdCB0aGUgZmlsZSBjYW4gc3RpbGwgYmUg dXNlZCwgYnV0IGl0IGNhbid0IGJlIG9wZW5lZCBieQogICAgICAgIGFub3RoZXIgcHJvY2Vzcywg YW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBkZWxldGVkIHdoZW4gaXQKICAgICAgICBpcyBj bG9zZWQgb3Igd2hlbiB0aGUgY3VycmVudCBwcm9jZXNzIHRlcm1pbmF0ZXMuCgogICAgICAgIElm IHlvdSB3YW50IGEgbW9yZSBwZXJtYW5lbnQgZmlsZSwgeW91IGRlcml2ZSBhIGNsYXNzIHdoaWNo CiAgICAgICAgb3ZlcnJpZGVzIHRoaXMgbWV0aG9kLiAgSWYgeW91IHdhbnQgYSB2aXNpYmxlIHRl bXBvcmFyeSBmaWxlCiAgICAgICAgdGhhdCBpcyBuZXZlcnRoZWxlc3MgYXV0b21hdGljYWxseSBk ZWxldGVkIHdoZW4gdGhlIHNjcmlwdAogICAgICAgIHRlcm1pbmF0ZXMsIHRyeSBkZWZpbmluZyBh IF9fZGVsX18gbWV0aG9kIGluIGEgZGVyaXZlZCBjbGFzcwogICAgICAgIHdoaWNoIHVubGlua3Mg dGhlIHRlbXBvcmFyeSBmaWxlcyB5b3UgaGF2ZSBjcmVhdGVkLgoKICAgICAgICAiIiIKICAgICAg ICBpbXBvcnQgdGVtcGZpbGUKICAgICAgICByZXR1cm4gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgi dytiIikKCgoKIyBCYWNrd2FyZHMgQ29tcGF0aWJpbGl0eSBDbGFzc2VzCiMgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoKY2xhc3MgRm9ybUNvbnRlbnREaWN0KFVzZXJEaWN0LlVzZXJE aWN0KToKICAgICIiIkZvcm0gY29udGVudCBhcyBkaWN0aW9uYXJ5IHdpdGggYSBsaXN0IG9mIHZh bHVlcyBwZXIgZmllbGQuCgogICAgZm9ybSA9IEZvcm1Db250ZW50RGljdCgpCgogICAgZm9ybVtr ZXldIC0+IFt2YWx1ZSwgdmFsdWUsIC4uLl0KICAgIGtleSBpbiBmb3JtIC0+IEJvb2xlYW4KICAg IGZvcm0ua2V5cygpIC0+IFtrZXksIGtleSwgLi4uXQogICAgZm9ybS52YWx1ZXMoKSAtPiBbW3Zh bCwgdmFsLCAuLi5dLCBbdmFsLCB2YWwsIC4uLl0sIC4uLl0KICAgIGZvcm0uaXRlbXMoKSAtPiAg WyhrZXksIFt2YWwsIHZhbCwgLi4uXSksIChrZXksIFt2YWwsIHZhbCwgLi4uXSksIC4uLl0KICAg IGZvcm0uZGljdCA9PSB7a2V5OiBbdmFsLCB2YWwsIC4uLl0sIC4uLn0KCiAgICAiIiIKICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9uPW9zLmVudmlyb24sIGtlZXBfYmxhbmtfdmFsdWVzPTAs IHN0cmljdF9wYXJzaW5nPTApOgogICAgICAgIHNlbGYuZGljdCA9IHNlbGYuZGF0YSA9IHBhcnNl KGVudmlyb249ZW52aXJvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ZWVwX2JsYW5rX3ZhbHVlcz1rZWVwX2JsYW5rX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJpY3RfcGFyc2luZz1zdHJpY3RfcGFyc2luZykKICAgICAgICBz ZWxmLnF1ZXJ5X3N0cmluZyA9IGVudmlyb25bJ1FVRVJZX1NUUklORyddCgoKY2xhc3MgU3ZGb3Jt Q29udGVudERpY3QoRm9ybUNvbnRlbnREaWN0KToKICAgICIiIkZvcm0gY29udGVudCBhcyBkaWN0 aW9uYXJ5IGV4cGVjdGluZyBhIHNpbmdsZSB2YWx1ZSBwZXIgZmllbGQuCgogICAgSWYgeW91IG9u bHkgZXhwZWN0IGEgc2luZ2xlIHZhbHVlIGZvciBlYWNoIGZpZWxkLCB0aGVuIGZvcm1ba2V5XQog ICAgd2lsbCByZXR1cm4gdGhhdCBzaW5nbGUgdmFsdWUuICBJdCB3aWxsIHJhaXNlIGFuIEluZGV4 RXJyb3IgaWYKICAgIHRoYXQgZXhwZWN0YXRpb24gaXMgbm90IHRydWUuICBJZiB5b3UgZXhwZWN0 IGEgZmllbGQgdG8gaGF2ZQogICAgcG9zc2libGUgbXVsdGlwbGUgdmFsdWVzLCB0aGFuIHlvdSBj YW4gdXNlIGZvcm0uZ2V0bGlzdChrZXkpIHRvCiAgICBnZXQgYWxsIG9mIHRoZSB2YWx1ZXMuICB2 YWx1ZXMoKSBhbmQgaXRlbXMoKSBhcmUgYSBjb21wcm9taXNlOgogICAgdGhleSByZXR1cm4gc2lu Z2xlIHN0cmluZ3Mgd2hlcmUgdGhlcmUgaXMgYSBzaW5nbGUgdmFsdWUsIGFuZAogICAgbGlzdHMg b2Ygc3RyaW5ncyBvdGhlcndpc2UuCgogICAgIiIiCiAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwg a2V5KToKICAgICAgICBpZiBsZW4oc2VsZi5kaWN0W2tleV0pID4gMToKICAgICAgICAgICAgcmFp c2UgSW5kZXhFcnJvciwgJ2V4cGVjdGluZyBhIHNpbmdsZSB2YWx1ZScKICAgICAgICByZXR1cm4g c2VsZi5kaWN0W2tleV1bMF0KICAgIGRlZiBnZXRsaXN0KHNlbGYsIGtleSk6CiAgICAgICAgcmV0 dXJuIHNlbGYuZGljdFtrZXldCiAgICBkZWYgdmFsdWVzKHNlbGYpOgogICAgICAgIHJlc3VsdCA9 IFtdCiAgICAgICAgZm9yIHZhbHVlIGluIHNlbGYuZGljdC52YWx1ZXMoKToKICAgICAgICAgICAg aWYgbGVuKHZhbHVlKSA9PSAxOgogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZVsw XSkKICAgICAgICAgICAgZWxzZTogcmVzdWx0LmFwcGVuZCh2YWx1ZSkKICAgICAgICByZXR1cm4g cmVzdWx0CiAgICBkZWYgaXRlbXMoc2VsZik6CiAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICBm b3Iga2V5LCB2YWx1ZSBpbiBzZWxmLmRpY3QuaXRlbXMoKToKICAgICAgICAgICAgaWYgbGVuKHZh bHVlKSA9PSAxOgogICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoa2V5LCB2YWx1ZVswXSkp CiAgICAgICAgICAgIGVsc2U6IHJlc3VsdC5hcHBlbmQoKGtleSwgdmFsdWUpKQogICAgICAgIHJl dHVybiByZXN1bHQKCgpjbGFzcyBJbnRlcnBGb3JtQ29udGVudERpY3QoU3ZGb3JtQ29udGVudERp Y3QpOgogICAgIiIiVGhpcyBjbGFzcyBpcyBwcmVzZW50IGZvciBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eSBvbmx5LiIiIgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgdiA9 IFN2Rm9ybUNvbnRlbnREaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKICAgICAgICBpZiB2WzBd IGluICcwMTIzNDU2Nzg5Ky0uJzoKICAgICAgICAgICAgdHJ5OiByZXR1cm4gaW50KHYpCiAgICAg ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgdHJ5OiByZXR1cm4gZmxv YXQodikKICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCiAgICAgICAgcmV0 dXJuIHYuc3RyaXAoKQogICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICByZXN1bHQgPSBbXQog ICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAg ICAgICAgIHJlc3VsdC5hcHBlbmQoc2VsZltrZXldKQogICAgICAgICAgICBleGNlcHQgSW5kZXhF cnJvcjoKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc2VsZi5kaWN0W2tleV0pCiAgICAg ICAgcmV0dXJuIHJlc3VsdAogICAgZGVmIGl0ZW1zKHNlbGYpOgogICAgICAgIHJlc3VsdCA9IFtd CiAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKICAgICAgICAgICAgdHJ5OgogICAgICAg ICAgICAgICAgcmVzdWx0LmFwcGVuZCgoa2V5LCBzZWxmW2tleV0pKQogICAgICAgICAgICBleGNl cHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKGtleSwgc2VsZi5k aWN0W2tleV0pKQogICAgICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBGb3JtQ29udGVudChGb3Jt Q29udGVudERpY3QpOgogICAgIiIiVGhpcyBjbGFzcyBpcyBwcmVzZW50IGZvciBiYWNrd2FyZHMg Y29tcGF0aWJpbGl0eSBvbmx5LiIiIgogICAgZGVmIHZhbHVlcyhzZWxmLCBrZXkpOgogICAgICAg IGlmIGtleSBpbiBzZWxmLmRpY3QgOnJldHVybiBzZWxmLmRpY3Rba2V5XQogICAgICAgIGVsc2U6 IHJldHVybiBOb25lCiAgICBkZWYgaW5kZXhlZF92YWx1ZShzZWxmLCBrZXksIGxvY2F0aW9uKToK ICAgICAgICBpZiBrZXkgaW4gc2VsZi5kaWN0OgogICAgICAgICAgICBpZiBsZW4oc2VsZi5kaWN0 W2tleV0pID4gbG9jYXRpb246CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kaWN0W2tleV1b bG9jYXRpb25dCiAgICAgICAgICAgIGVsc2U6IHJldHVybiBOb25lCiAgICAgICAgZWxzZTogcmV0 dXJuIE5vbmUKICAgIGRlZiB2YWx1ZShzZWxmLCBrZXkpOgogICAgICAgIGlmIGtleSBpbiBzZWxm LmRpY3Q6IHJldHVybiBzZWxmLmRpY3Rba2V5XVswXQogICAgICAgIGVsc2U6IHJldHVybiBOb25l CiAgICBkZWYgbGVuZ3RoKHNlbGYsIGtleSk6CiAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRpY3Rb a2V5XSkKICAgIGRlZiBzdHJpcHBlZChzZWxmLCBrZXkpOgogICAgICAgIGlmIGtleSBpbiBzZWxm LmRpY3Q6IHJldHVybiBzZWxmLmRpY3Rba2V5XVswXS5zdHJpcCgpCiAgICAgICAgZWxzZTogcmV0 dXJuIE5vbmUKICAgIGRlZiBwYXJzKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmRpY3QKCgoj IFRlc3QvZGVidWcgY29kZQojID09PT09PT09PT09PT09PQoKZGVmIHRlc3QoZW52aXJvbj1vcy5l bnZpcm9uKToKICAgICIiIlJvYnVzdCB0ZXN0IENHSSBzY3JpcHQsIHVzYWJsZSBhcyBtYWluIHBy b2dyYW0uCgogICAgV3JpdGUgbWluaW1hbCBIVFRQIGhlYWRlcnMgYW5kIGR1bXAgYWxsIGluZm9y bWF0aW9uIHByb3ZpZGVkIHRvCiAgICB0aGUgc2NyaXB0IGluIEhUTUwgZm9ybS4KCiAgICAiIiIK ICAgIHByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbCIKICAgIHByaW50CiAgICBzeXMuc3Rk ZXJyID0gc3lzLnN0ZG91dAogICAgdHJ5OgogICAgICAgIGZvcm0gPSBGaWVsZFN0b3JhZ2UoKSAg ICMgUmVwbGFjZSB3aXRoIG90aGVyIGNsYXNzZXMgdG8gdGVzdCB0aG9zZQogICAgICAgIHByaW50 X2RpcmVjdG9yeSgpCiAgICAgICAgcHJpbnRfYXJndW1lbnRzKCkKICAgICAgICBwcmludF9mb3Jt KGZvcm0pCiAgICAgICAgcHJpbnRfZW52aXJvbihlbnZpcm9uKQogICAgICAgIHByaW50X2Vudmly b25fdXNhZ2UoKQogICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgIGV4ZWMgInRlc3RpbmcgcHJp bnRfZXhjZXB0aW9uKCkgLS0gPEk+aXRhbGljcz88L0k+IgogICAgICAgIGRlZiBnKGY9Zik6CiAg ICAgICAgICAgIGYoKQogICAgICAgIHByaW50ICI8SDM+V2hhdCBmb2xsb3dzIGlzIGEgdGVzdCwg bm90IGFuIGFjdHVhbCBleGNlcHRpb246PC9IMz4iCiAgICAgICAgZygpCiAgICBleGNlcHQ6CiAg ICAgICAgcHJpbnRfZXhjZXB0aW9uKCkKCiAgICBwcmludCAiPEgxPlNlY29uZCB0cnkgd2l0aCBh IHNtYWxsIG1heGxlbi4uLjwvSDE+IgoKICAgIGdsb2JhbCBtYXhsZW4KICAgIG1heGxlbiA9IDUw CiAgICB0cnk6CiAgICAgICAgZm9ybSA9IEZpZWxkU3RvcmFnZSgpICAgIyBSZXBsYWNlIHdpdGgg b3RoZXIgY2xhc3NlcyB0byB0ZXN0IHRob3NlCiAgICAgICAgcHJpbnRfZGlyZWN0b3J5KCkKICAg ICAgICBwcmludF9hcmd1bWVudHMoKQogICAgICAgIHByaW50X2Zvcm0oZm9ybSkKICAgICAgICBw cmludF9lbnZpcm9uKGVudmlyb24pCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnRfZXhjZXB0aW9u KCkKCmRlZiBwcmludF9leGNlcHRpb24odHlwZT1Ob25lLCB2YWx1ZT1Ob25lLCB0Yj1Ob25lLCBs aW1pdD1Ob25lKToKICAgIGlmIHR5cGUgaXMgTm9uZToKICAgICAgICB0eXBlLCB2YWx1ZSwgdGIg PSBzeXMuZXhjX2luZm8oKQogICAgaW1wb3J0IHRyYWNlYmFjawogICAgcHJpbnQKICAgIHByaW50 ICI8SDM+VHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOjwvSDM+IgogICAgbGlzdCA9 IHRyYWNlYmFjay5mb3JtYXRfdGIodGIsIGxpbWl0KSArIFwKICAgICAgICAgICB0cmFjZWJhY2su Zm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUsIHZhbHVlKQogICAgcHJpbnQgIjxQUkU+JXM8Qj4l czwvQj48L1BSRT4iICUgKAogICAgICAgIGVzY2FwZSgiIi5qb2luKGxpc3RbOi0xXSkpLAogICAg ICAgIGVzY2FwZShsaXN0Wy0xXSksCiAgICAgICAgKQogICAgZGVsIHRiCgpkZWYgcHJpbnRfZW52 aXJvbihlbnZpcm9uPW9zLmVudmlyb24pOgogICAgIiIiRHVtcCB0aGUgc2hlbGwgZW52aXJvbm1l bnQgYXMgSFRNTC4iIiIKICAgIGtleXMgPSBlbnZpcm9uLmtleXMoKQogICAga2V5cy5zb3J0KCkK ICAgIHByaW50CiAgICBwcmludCAiPEgzPlNoZWxsIEVudmlyb25tZW50OjwvSDM+IgogICAgcHJp bnQgIjxETD4iCiAgICBmb3Iga2V5IGluIGtleXM6CiAgICAgICAgcHJpbnQgIjxEVD4iLCBlc2Nh cGUoa2V5KSwgIjxERD4iLCBlc2NhcGUoZW52aXJvbltrZXldKQogICAgcHJpbnQgIjwvREw+Igog ICAgcHJpbnQKCmRlZiBwcmludF9mb3JtKGZvcm0pOgogICAgIiIiRHVtcCB0aGUgY29udGVudHMg b2YgYSBmb3JtIGFzIEhUTUwuIiIiCiAgICBrZXlzID0gZm9ybS5rZXlzKCkKICAgIGtleXMuc29y dCgpCiAgICBwcmludAogICAgcHJpbnQgIjxIMz5Gb3JtIENvbnRlbnRzOjwvSDM+IgogICAgaWYg bm90IGtleXM6CiAgICAgICAgcHJpbnQgIjxQPk5vIGZvcm0gZmllbGRzLiIKICAgIHByaW50ICI8 REw+IgogICAgZm9yIGtleSBpbiBrZXlzOgogICAgICAgIHByaW50ICI8RFQ+IiArIGVzY2FwZShr ZXkpICsgIjoiLAogICAgICAgIHZhbHVlID0gZm9ybVtrZXldCiAgICAgICAgcHJpbnQgIjxpPiIg KyBlc2NhcGUocmVwcih0eXBlKHZhbHVlKSkpICsgIjwvaT4iCiAgICAgICAgcHJpbnQgIjxERD4i ICsgZXNjYXBlKHJlcHIodmFsdWUpKQogICAgcHJpbnQgIjwvREw+IgogICAgcHJpbnQKCmRlZiBw cmludF9kaXJlY3RvcnkoKToKICAgICIiIkR1bXAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFzIEhU TUwuIiIiCiAgICBwcmludAogICAgcHJpbnQgIjxIMz5DdXJyZW50IFdvcmtpbmcgRGlyZWN0b3J5 OjwvSDM+IgogICAgdHJ5OgogICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCiAgICBleGNlcHQgb3Mu ZXJyb3IsIG1zZzoKICAgICAgICBwcmludCAib3MuZXJyb3I6IiwgZXNjYXBlKHN0cihtc2cpKQog ICAgZWxzZToKICAgICAgICBwcmludCBlc2NhcGUocHdkKQogICAgcHJpbnQKCmRlZiBwcmludF9h cmd1bWVudHMoKToKICAgIHByaW50CiAgICBwcmludCAiPEgzPkNvbW1hbmQgTGluZSBBcmd1bWVu dHM6PC9IMz4iCiAgICBwcmludAogICAgcHJpbnQgc3lzLmFyZ3YKICAgIHByaW50CgpkZWYgcHJp bnRfZW52aXJvbl91c2FnZSgpOgogICAgIiIiRHVtcCBhIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFy aWFibGVzIHVzZWQgYnkgQ0dJIGFzIEhUTUwuIiIiCiAgICBwcmludCAiIiIKPEgzPlRoZXNlIGVu dmlyb25tZW50IHZhcmlhYmxlcyBjb3VsZCBoYXZlIGJlZW4gc2V0OjwvSDM+CjxVTD4KPExJPkFV VEhfVFlQRQo8TEk+Q09OVEVOVF9MRU5HVEgKPExJPkNPTlRFTlRfVFlQRQo8TEk+REFURV9HTVQK PExJPkRBVEVfTE9DQUwKPExJPkRPQ1VNRU5UX05BTUUKPExJPkRPQ1VNRU5UX1JPT1QKPExJPkRP Q1VNRU5UX1VSSQo8TEk+R0FURVdBWV9JTlRFUkZBQ0UKPExJPkxBU1RfTU9ESUZJRUQKPExJPlBB VEgKPExJPlBBVEhfSU5GTwo8TEk+UEFUSF9UUkFOU0xBVEVECjxMST5RVUVSWV9TVFJJTkcKPExJ PlJFTU9URV9BRERSCjxMST5SRU1PVEVfSE9TVAo8TEk+UkVNT1RFX0lERU5UCjxMST5SRU1PVEVf VVNFUgo8TEk+UkVRVUVTVF9NRVRIT0QKPExJPlNDUklQVF9OQU1FCjxMST5TRVJWRVJfTkFNRQo8 TEk+U0VSVkVSX1BPUlQKPExJPlNFUlZFUl9QUk9UT0NPTAo8TEk+U0VSVkVSX1JPT1QKPExJPlNF UlZFUl9TT0ZUV0FSRQo8L1VMPgpJbiBhZGRpdGlvbiwgSFRUUCBoZWFkZXJzIHNlbnQgYnkgdGhl IHNlcnZlciBtYXkgYmUgcGFzc2VkIGluIHRoZQplbnZpcm9ubWVudCBhcyB3ZWxsLiAgSGVyZSBh cmUgc29tZSBjb21tb24gdmFyaWFibGUgbmFtZXM6CjxVTD4KPExJPkhUVFBfQUNDRVBUCjxMST5I VFRQX0NPTk5FQ1RJT04KPExJPkhUVFBfSE9TVAo8TEk+SFRUUF9QUkFHTUEKPExJPkhUVFBfUkVG RVJFUgo8TEk+SFRUUF9VU0VSX0FHRU5UCjwvVUw+CiIiIgoKCiMgVXRpbGl0aWVzCiMgPT09PT09 PT09CgpkZWYgZXNjYXBlKHMsIHF1b3RlPU5vbmUpOgogICAgJycnUmVwbGFjZSBzcGVjaWFsIGNo YXJhY3RlcnMgIiYiLCAiPCIgYW5kICI+IiB0byBIVE1MLXNhZmUgc2VxdWVuY2VzLgogICAgSWYg dGhlIG9wdGlvbmFsIGZsYWcgcXVvdGUgaXMgdHJ1ZSwgdGhlIHF1b3RhdGlvbiBtYXJrIGNoYXJh Y3RlciAoIikKICAgIGlzIGFsc28gdHJhbnNsYXRlZC4nJycKICAgIHMgPSBzLnJlcGxhY2UoIiYi LCAiJmFtcDsiKSAjIE11c3QgYmUgZG9uZSBmaXJzdCEKICAgIHMgPSBzLnJlcGxhY2UoIjwiLCAi Jmx0OyIpCiAgICBzID0gcy5yZXBsYWNlKCI+IiwgIiZndDsiKQogICAgaWYgcXVvdGU6CiAgICAg ICAgcyA9IHMucmVwbGFjZSgnIicsICImcXVvdDsiKQogICAgcmV0dXJuIHMKCmRlZiB2YWxpZF9i b3VuZGFyeShzLCBfdmJfcGF0dGVybj0iXlsgLX5dezAsMjAwfVshLX5dJCIpOgogICAgaW1wb3J0 IHJlCiAgICByZXR1cm4gcmUubWF0Y2goX3ZiX3BhdHRlcm4sIHMpCgojIEludm9rZSBtYWlubGlu ZQojID09PT09PT09PT09PT09PQoKIyBDYWxsIHRlc3QoKSB3aGVuIHRoaXMgZmlsZSBpcyBydW4g YXMgYSBzY3JpcHQgKG5vdCBpbXBvcnRlZCBhcyBhIG1vZHVsZSkKaWYgX19uYW1lX18gPT0gJ19f bWFpbl9fJzoKICAgIHRlc3QoKQo= --_006_AEEEFA3AF04CF54E9F7B61FE62D1528305B6EB32MISOUT7MSGUSRCC_--