Re: [spe-users] An error on FC6 with wxPy2.7
"SPE Stani's Python Editor" <[email protected]> Thu, 23 Nov 2006 01:23:21 +0100
| Newsgroups | gmane.comp.python.spe.user,gmane.spam.detected |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_41369_18639215.1164241401845 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline http://pythonide.stani.be http://pythonide.stani.be/manual/html/manual.html http://pythonide.stani.be/blog/sm_donate -- ------=_Part_41369_18639215.1164241401845 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline You'll need to replace _spe/sm/wxp/smdi.py with the attached file. I am working on a new version. Stani On 11/22/06, Jia Lu <[email protected]> wrote: > http://pythonide.stani.be > http://pythonide.stani.be/manual/html/manual.html > http://pythonide.stani.be/blog/sm_donate > -- > > > > > Hi Stani > Thanks for your anwser. > > I found filenew.png and other png files in > /usr/lib/python2.4/site-packages/_spe/skin/default/. > > Then I did python SPE.py --debug > debug.txt 2>&1 > in /usr/lib/python2.4/site-packages/_spe/ and got the > result below: > (It seems another error ?) > ----------------------------- > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was > found. > If you experience any problems please install wxPython v2.6.1.0. > > > SPE v0.8.3.c (c)2003-2005 www.stani.be > > If spe fails to start: > - type "python SPE.py --debug > debug.txt 2>&1" at the command prompt > (or if you use tcsh: "python SPE.py --debug >& debug.txt") > - send debug.txt with some info to spe.stani.be[at]gmail.com > > > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was > found. > If you experience any problems please install wxPython v2.6.1.0. > > Blender support disabled (run SPE inside Blender to enable). > Encrypted debugging enabled. > > Spe is running in debugging mode with this configuration: > - platform : linux2 > - python : 2.4.4 > - wxPython : 2.7.1.3. > - interface : <default> > - encoding : utf > > Launching application... > Create: Framework: menu. > Create: Framework: toolbar. > Create: Framework: statusbar. > Creating tabs... > Shell > Locals > Session > Output > Find > Browser > Recent > Todo > Index > Notes > Donate > Create: MdiSplit: <class 'sm.wxp.smdi.MdiSplitChildFrame '> unnamed unnamed > Create: Sdi: <class 'sm.wxp.smdi.MdiSplitChildFrame'>.tabs > Traceback (most recent call last): > File "SPE.py", line 209, in ? > style = style) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 1278, in __init__ > wx.App.__init__(self,redirect=not debug) > File > "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_core.py", > line 7480, in __init__ > self._BootstrapApp() > File "/usr/lib/python2.4/site-packages/wx- > 2.7.1-gtk2-unicode/wx/_core.py", line 7080, in _BootstrapApp > return _core_.PyApp__BootstrapApp(*args, **kwargs) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 1297, in OnInit > style = self.style, > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 801, in __init__ > Parent.__init__(self,app=app,page=page,**options) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 595, in __init__ > parentFrame = self, > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 326, in __init__ > self.__finish__() > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 599, in __finish__ > Framework.__finish__(self) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 424, in __finish__ > self.panel.__finish__() > File "/usr/lib/python2.4/site-packages/_spe/Parent.py", > line 121, in __finish__ > self.__frame__() > File "/usr/lib/python2.4/site-packages/_spe/Parent.py", > line 169, in __frame__ > self.__remember__(openFiles=self._openFiles) > File "/usr/lib/python2.4/site-packages/_spe/Parent.py", > line 194, in __remember__ > self.new(maximize = self.getValue("MaxChildren")) > File "/usr/lib/python2.4/site-packages/_spe/Parent.py", > line 379, in new > maximize = maximize) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 1125, in __init__ > extra = extra, > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 889, in __init__ > extra = extra, > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 326, in __init__ > self.__finish__() > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 899, in __finish__ > Framework.__finish__(self) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 422, in __finish__ > self.setTitle(self.page,self.extra) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 1150, in setTitle > Child.setTitle(self,page,extra,new) > File > "/usr/lib/python2.4/site-packages/_spe/sm/wxp/smdi.py", > line 991, in setTitle > self.SetTitle(self.pageTitle) > AttributeError: 'MdiSplitChildFrame' object has no attribute 'SetTitle' > ---------------------- > But I can run all the demos of wxPy normally. > What is wrong can you think of? > Thanks. > > > 2006/11/22, SPE Stani's Python Editor <[email protected]>: > > http://pythonide.stani.be > > http://pythonide.stani.be/manual/html/manual.html > > http://pythonide.stani.be/blog/sm_donate > > -- > > > > > > I could quickly think of the following possibilities causing the error: > > - The tool bitmap doesn't exist, so does the following file exist on > > your hard disk: skins/default/filenew.png? > > - There is a problem to locate the tool bitmap. So please cd to the > > "_spe" directory and start "python SPE.py --debug" > > - Something went wrong with the png handling in your wxPython > > installation. Please check if you can display png images in the > > wxPython demo and check if the toolbar demo works for you. > > > > Stani > > > > On 11/21/06, Jia Lu <[email protected]> wrote: > > > http://pythonide.stani.be > > > http://pythonide.stani.be/manual/html/manual.html > > > http://pythonide.stani.be/blog/sm_donate > > > -- > > > > > > > > > > > > > > > Hi Stani > > > Thanks for your answer. > > > I ran with debug mode and I got the error in debug.txt > > > > > > ----------------------- > > > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3. was > > > found. > > > If you experience any problems please install wxPython v2.6.1.0. > > > > > > > > > SPE v0.8.3.c (c)2003-2005 www.stani.be > > > > > > If spe fails to start: > > > - type "python SPE.py --debug > debug.txt 2>&1" at the command prompt > > > (or if you use tcsh: "python SPE.py --debug >& debug.txt") > > > - send debug.txt with some info to spe.stani.be[at]gmail.com > > > > > > > > > Spe Warning: Spe was developped on wxPython v2.6.1.0., but v2.7.1.3 . > was > > > found. > > > If you experience any problems please install wxPython v2.6.1.0. > > > > > > Blender support disabled (run SPE inside Blender to enable). > > > Encrypted debugging enabled. > > > > > > Spe is running in debugging mode with this configuration: > > > - platform : linux2 > > > - python : 2.4.4 > > > - wxPython : 2.7.1.3. > > > - interface : <default> > > > - encoding : utf > > > > > > Launching application... > > > Create: Framework: menu. > > > Create: Framework: toolbar. > > > Traceback (most recent call last): > > > File "SPE.py", line 209, in ? > > > style = style) > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0 /_spe/sm/wxp/smdi.py", line > 1278, > > > in __init__ > > > wx.App.__init__(self,redirect=not debug) > > > File > > > > "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_core.py", > > > line 7480, in __init__ > > > self._BootstrapApp() > > > File "/usr/lib/python2.4/site-packages/wx- > > > 2.7.1-gtk2-unicode/wx/_core.py", line 7080, in _BootstrapApp > > > return _core_.PyApp__BootstrapApp(*args, **kwargs) > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line > 1297, > > > in OnInit > > > style = self.style, > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line > 801, in > > > __init__ > > > Parent.__init__(self,app=app,page=page,**options) > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0 /_spe/sm/wxp/smdi.py", line > 595, > > > in __init__ > > > parentFrame = self, > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line > 324, in > > > __init__ > > > self.__tool__(app) > > > File "/home/Tools/SPE- 0.8.3.c-wx2.6.1.0/_spe/sm/wxp/smdi.py", line > 394, > > > in __tool__ > > > id=wx.ID_ANY, style=STYLE_TOOLBAR) > > > File "/home/Tools/SPE-0.8.3.c-wx2.6.1.0/_spe/Menu.py", line 71, in > > > __init__ > > > self.AddLabelTool (TOOL_NEW, "", > wx.Bitmap("skins/default/filenew.png", > > > wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, _("New | Ctrl+N"), > "") > > > File "/usr/lib/python2.4/site-packages/wx- > > > 2.7.1-gtk2-unicode /wx/_controls.py", line 3715, in AddLabelTool > > > shortHelp, longHelp, clientData) > > > File > > > > "/usr/lib/python2.4/site-packages/wx-2.7.1-gtk2-unicode/wx/_controls.py", > > > line 3637, in DoAddTool > > > return _controls_.ToolBarBase_DoAddTool(*args, > > > **kwargs) > > > wx._core.PyAssertionError: C++ assertion "bitmap.Ok()" failed at > > > ../src/gtk/tbargtk.cpp(365) in DoInsertTool(): invalid bitmap for > wxToolBar > > > icon > > > ----------------------- > > > > > > I searched on internet about the bitmap error, but I have no idea about > it. > > > I really want to use SPE.....:( > > > > > > Thanks.. > > > > > > _______________________________________________ > > > Python-spe-users mailing list > > > [email protected] > > > > https://lists.berlios.de/mailman/listinfo/python-spe-users > > > > > > > > > > > > > > > -- > > http://pythonide.stani.be > > http://pythonide.stani.be/screenshots > > http://pythonide.stani.be/manual/html/manual.html > > _______________________________________________ > > Python-spe-users mailing list > > [email protected] > > > https://lists.berlios.de/mailman/listinfo/python-spe-users > > > > > > -- > -- Jia LU > < http://www.lujia.us> > Registered Linux user #434792 > python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p > in '[email protected]'.split('@')])" > -- > \ "Unix is an operating system, OS/2 is half an operating system, | > `\ Windows is a shell, and DOS is a boot partition virus." -- | > _o__) > Peter H. Coffin | > _______________________________________________ > Python-spe-users mailing list > [email protected] > https://lists.berlios.de/mailman/listinfo/python-spe-users > > > -- http://pythonide.stani.be http://pythonide.stani.be/screenshots http://pythonide.stani.be/manual/html/manual.html ------=_Part_41369_18639215.1164241401845 Content-Type: text/x-python; name=smdi.py; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_euuf8hxs Content-Disposition: attachment; filename="smdi.py" IyMjIyhjKXd3dy5zdGFuaS5iZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnRyeToKICAgIGltcG9ydCBzbSwgc20ub3N4CiAgICBJ TkZPPXNtLklORk8uY29weSgpCiAgICAKICAgIElORk9bJ3RpdGxlJ10gICAgID0gSU5GT1sndGl0 bGVGdWxsJ10gPSAnU2RpL01kaSBGcmFtZXdvcmsnCiAgICAKICAgIElORk9bJ2Rlc2NyaXB0aW9u J109XAogICAgIiIiRnJhbWV3b3JrIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gc3dpdGNoIGJldHdl ZW4gU2RpIChMaW51eC9NYWMpIAogICAgYW5kIE1kaSAoV2luZG93cykuCiAgICAiIiIKCiAgICBf X2RvY19fPUlORk9bJ2RvYyddJUlORk8KZXhjZXB0OgogICAgX19kb2NfXz0iU3RhbmkncyBNdWx0 aXBsZSBEb2N1bWVudCBJbnRlcmZhY2UgKGMpd3d3LnN0YW5pLmJlIgoKIiIiCkF0dHJpYnV0ZXMg b2YgQXBwbGljYXRpb246CiAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgLSBjaGlsZHJlbgogICAg ICAgIC0gY29uZmlnCiAgICAgICAgLSBERUJVRwogICAgICAgIC0gaW1hZ2VQYXRoCiAgICAgICAg LSBtZGkKICAgICAgICAtIHRpdGxlCiAgICAgICAgLSBwYXJlbnRGcmFtZQogICAgICAgIC0gcGFy ZW50UGFuZWwKICAgICAgICAtIHBvcwogICAgICAgIC0gc2l6ZQogICAgICAgIC0gc3R5bGUKICAg IC0gbWV0aG9kczoKICAgICAgICAtIFNldE1kaQogICAgLSBjbGFzc2VzOgogICAgICAgIC0gQ2hp bGRGcmFtZQogICAgICAgIC0gQ2hpbGRQYW5lbAogICAgICAgIC0gTWVudUJhcgogICAgICAgIC0g UGFyZW50RnJhbWUKICAgICAgICAtIFBhcmVudFBhbmVsCiAgICAgICAgLSBTdGF0dXNCYXIKICAg ICAgICAtIFRvb2xCYXIKICAgICAgICAKQXR0cmlidXRlcyBvZiBGcmFtZToKICAgIC0gcHJvcGVy dGllczoKICAgICAgICAtIGFwcAogICAgICAgIC0gZGVhZAogICAgICAgIC0gbWVudUJhcgogICAg ICAgIC0gcGFyZW50RnJhbWUKICAgICAgICAtIHRvb2xCYXIKICAgIC0gbWV0aG9kczoKICAgICAg ICAtIGdldEluZGV4CiAgICAgICAgLSAobWF4aW1pemUpCiAgICAgICAgLSBzZXRUaXRsZQogICAg ICAgIC0gU2V0U3RhdHVzVGV4dAogICAgLSBldmVudHM6CiAgICAgICAgLSBiaW5kVGFicwogICAg ICAgIC0gdW5iaW5kVGFicwogICAgICAgIC0gb25GcmFtZUFjdGl2YXRlCiAgICAgICAgLSBvbkZy YW1lQ2xvc2UKICAgICAgICAtIG9uRnJhbWVNb3ZlCiAgICAgICAgLSBvbkZyYW1lU2l6ZQogICAg ICAgIC0gKG9uRnJhbWVUYWIpCiAgICAtIGNsYXNzZXM6CiAgICAgICAgLSBQYW5lbAogICAgICAg IApBdHRyaWJ1dGVzIG9mIFBhbmVsOgogICAgLSBwcm9wZXJ0aWVzOgogICAgICAgIC0gY2hhbmdl ZAogICAgICAgIC0gZnJhbWUKICAgICAgICAtIHRpdGxlCiAgICAgICAgLSBwYXJlbnRGcmFtZQog ICAgICAgIC0gcGFyZW50UGFuZWwKICAgIC0gbWV0aG9kczoKICAgIApBdHRyaWJ1dGVzIG9mIE1l bnVCYXI6CiAgICAtIHByb3BlcnRpZXM6CiAgICAgICAgLSBhcHAKICAgICAgICAtIGZyYW1lCiAg ICAgICAgLSBwYXJlbnRGcmFtZQogICAgICAgIC0gcGFyZW50UGFuZWwKICAgICAgICAtIHRvb2xC YXIKCkF0dHJpYnV0ZXMgb2YgVG9vbEJhcjoKICAgIC0gcHJvcGVydGllczoKICAgICAgICAtIGFw cAogICAgICAgIC0gZnJhbWUKICAgICAgICAtIG1lbnVCYXIKICAgIApUb2RvOgotIE1ESV9UQUJT IElTIE5PVCBXT1JLSU5HISEgVEhJUyBTSE9VTEQgQkUgRklYRUQKLSBpY29uIHN1cHBvcnQKIiIi CgojIyMjTW9kdWxlcwppbXBvcnQgIG9zLCBzeXMsIHBwcmludAppbXBvcnQgIHd4CmZyb20gICAg d3gubGliLmV2dG1nciBpbXBvcnQgZXZlbnRNYW5hZ2VyCmltcG9ydCBzaW5nbGVBcHAKaW1wb3J0 IE5vdGVib29rQ3RybAp3eF9Ob3RlYm9vayA9IE5vdGVib29rQ3RybC5Ob3RlYm9va0N0cmwKI2lt cG9ydCBzbS5zcHkKCiMjIyNDb25zdGFudHMKI3ZhbHVlcwpTREkgICAgICAgICAgICAgICAgID0g MApNRElfU0FTSCAgICAgICAgICAgID0gMQpNRElfU0FTSF9UQUJTICAgICAgID0gMgpNREkgICAg ICAgICAgICAgICAgID0gMwpNRElfVEFCUyAgICAgICAgICAgID0gNApNRElfU1BMSVQgICAgICAg ICAgID0gNQojZGVzY3JpcHRpb25zClNESV9NQUMgICAgICAgICAgICAgPSAic2luZ2xlIHdpdGgg dGFicyAobWFjLCBsaW51eCwgd2luZG93cykiCk1ESV9TQVNIX1dJTiAgICAgICAgPSAibXVsdGlw bGUgd2l0aCBzYXNoICh3aW5kb3dzKSIKTURJX1NBU0hfVEFCU19MSU5VWCA9ICJtdWx0aXBsZSB3 aXRoIHNhc2ggJiB0YWJzIChsaW51eCkiCk1ESV9TQVNIX1RBQlNfV0lOICAgPSAibXVsdGlwbGUg d2l0aCBzYXNoICYgdGFicyAod2luZG93cyBkZWZhdWx0KSIKTURJX1dJTiAgICAgICAgICAgICA9 ICJtdWx0aXBsZSB3aXRoIHBhbGV0dGUgKHdpbmRvd3MpIgpNRElfTUFDICAgICAgICAgICAgID0g InNpbmdsZSB3aXRoIHBhbGV0dGUgKG1hYykiCk1ESV9UQUJTX0xJTlVYICAgICAgPSAibXVsdGlw bGUgd2l0aCB0YWJzIChsaW51eCkiCk1ESV9UQUJTX1dJTiAgICAgICAgPSAibXVsdGlwbGUgd2l0 aCB0YWJzICh3aW5kb3dzKSIKTURJX1RBQlNfTUFDICAgICAgICA9ICJzaW5nbGUgd2l0aCB0YWJz IChtYWMpIgpNRElfU1BMSVRfQUxMICAgICAgID0gIm11bHRpcGxlIHdpdGggc2FzaCAmIHRhYnMg KG1hYyBkZWZhdWx0LGxpbnV4IGRlZmF1bHQsd2luZG93cykiCgpERUZBVUxUICAgICAgICAgICAg ID0gIjxkZWZhdWx0PiIKREkgICAgICAgICAgICAgICAgICA9IHtTRElfTUFDICAgICAgICAgICAg ICAgICAgOiBTREksCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfV0lOICAgICAgICAg ICAgIDogTURJX1NBU0gsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfVEFCU19MSU5V WCAgICAgIDogTURJX1NBU0gsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NBU0hfVEFCU19X SU4gICAgICAgIDogTURJX1NBU0hfVEFCUywKICAgICAgICAgICAgICAgICAgICAgICBNRElfV0lO ICAgICAgICAgICAgICAgICAgOiBNREksCiAgICAgICAgICAgICAgICAgICAgICAgTURJX01BQyAg ICAgICAgICAgICAgICAgIDogTURJLAogICAgICAgICAgICAgICAgICAgICAgIE1ESV9UQUJTX0xJ TlVYICAgICAgICAgICA6IE1ESSwKICAgICAgICAgICAgICAgICAgICAgICAjTURJX1RBQlNfV0lO ICAgICAgICAgICAgIDogTURJX1RBQlMsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1RBQlNf TUFDICAgICAgICAgICAgIDogTURJX1RBQlMsCiAgICAgICAgICAgICAgICAgICAgICAgTURJX1NQ TElUX0FMTCAgICAgICAgICAgIDogTURJX1NQTElULAogICAgICAgICAgICAgICAgICAgICAgIERF RkFVTFQgIDogLTF9CgpQTEFURk9STSAgICAgICAgICAgICAgICAgICAgPSBzeXMucGxhdGZvcm0K V0lOICAgICAgICAgICAgICAgICAgICAgICAgID0gUExBVEZPUk0uc3RhcnRzd2l0aCgnd2luJykK REFSV0lOICAgICAgICAgICAgICAgICAgICAgID0gUExBVEZPUk0uc3RhcnRzd2l0aCgnZGFyd2lu JykKR1RLICAgICAgICAgICAgICAgICAgICAgICAgID0gbm90IChXSU4gb3IgREFSV0lOKQoKaWYg REFSV0lOOgogICAgcHJpbnQgJ0lmIHNwZSBpcyB1bnN0YWJsZSwgdHJ5IHRoaXMgaW50ZXJmYWNl IGZyb20gdGhlIHByZWZlcmVuY2VzOlxuICAiJXMiXG4nJU1ESV9TUExJVF9BTEwKCiN3eCByZWxh dGVkCkZVTExfUkVQQUlOVF9PTl9SRVNJWkUgICAgICA9IHd4LkZVTExfUkVQQUlOVF9PTl9SRVNJ WkUKUE9TICAgICAgICAgICAgICAgICAgICAgICAgID0gKDEwLDEwKQpTSVpFICAgICAgICAgICAg ICAgICAgICAgICAgPSAoNjAwLDQwMCkKU0lOR0xFX0lOU1RBTkNFX0FQUCAgICAgICAgID0gRmFs c2UKU1RZTEVfQ0hJTERGUkFNRSAgICAgICAgICAgID0gd3guREVGQVVMVF9GUkFNRV9TVFlMRQpT VFlMRV9OT1RFQk9PSyAgICAgICAgICAgICAgPSBGVUxMX1JFUEFJTlRfT05fUkVTSVpFfHd4LkNM SVBfQ0hJTERSRU58d3guTk9fQk9SREVSClNUWUxFX1BBUkVOVEZSQU1FICAgICAgICAgICA9IHd4 LkRFRkFVTFRfRlJBTUVfU1RZTEUgI3wgd3guTUFYSU1JWkUKU1RZTEVfU1BMSVQgICAgICAgICAg ICAgICAgID0gd3guU1BfTk9CT1JERVIKU1RZTEVfVE9PTEJBUiAgICAgICAgICAgICAgID0gd3gu VEJfSE9SSVpPTlRBTCB8IHd4Lk5PX0JPUkRFUiB8IHd4LlRCX0ZMQVQgfCB3eC5UQl9URVhUClRB QlNBU0hfSEVJR0hUICAgICAgICAgICAgICA9IDMwClRJVExFICAgICAgICAgICAgICAgICAgICAg ICA9ICd3d3cuc3RhbmkuYmUnClVOTkFNRUQgICAgICAgICAgICAgICAgICAgICA9ICd1bm5hbWVk JwoKIyMjI01lbnUgaGVscGVyIGZ1bmN0aW9uCmRlZiBfKHgpOgogICAgaWYgREFSV0lOOgogICAg ICAgIHJldHVybiB4Iy5yZXBsYWNlKCdDdHJsJywnQ21kJykKICAgIGVsc2U6CiAgICAgICAgcmV0 dXJuIHgKCmRlZiBfc3RyaXAoeCk6CiAgICByZXR1cm4geC5yZXBsYWNlKCcgJywnXycpLnJlcGxh Y2UoJy0nLCdfJykucmVwbGFjZSgnJiYgJywnJykucmVwbGFjZSgnJicsJycpLnJlcGxhY2UoJy4n LCcnKS5yZXBsYWNlKCcoJywnJykucmVwbGFjZSgnKScsJycpCiAgICAKZGVmIG1lbnVXcml0ZSht ZW51QmFyLGY9J21lbnUudHh0Jyk6CiAgICBsYWJlbHMgPSBbXQogICAgZm9yIG0gaW4gcmFuZ2Uo bWVudUJhci5HZXRNZW51Q291bnQoKSk6CiAgICAgICAgbWVudSAgICAgICAgPSBtZW51QmFyLkdl dE1lbnUobSkKICAgICAgICBtZW51TGFiZWwgICA9IG1lbnVCYXIuR2V0TGFiZWxUb3AobSkKICAg ICAgICBmb3IgaXRlbSBpbiBtZW51LkdldE1lbnVJdGVtcygpOgogICAgICAgICAgICBsYWJlbCAg ID0gX3N0cmlwKGl0ZW0uR2V0TGFiZWwoKSkKICAgICAgICAgICAgaWYgbGFiZWw6CiAgICAgICAg ICAgICAgICBsYWJlbHMuYXBwZW5kKChtZW51TGFiZWwsaXRlbS5HZXRMYWJlbCgpKSkKICAgICNl dmVudHMKICAgIHJlc3VsdCA9ICdcdGRlZiBfX3NtZGlfXyhzZWxmKTpcbicKICAgIGZvciBsYWJl bCBpbiBsYWJlbHM6CiAgICAgICAgbGFiZWwgPSBfc3RyaXAobGFiZWxbMV0pCiAgICAgICAgcmVz dWx0Kz0gJ1x0XHR3eC5FVlRfTUVOVShzZWxmLCVzLHNlbGYubWVudV8lcylcbiclKGxhYmVsLnVw cGVyKCksbGFiZWwubG93ZXIoKSkKICAgIHJlc3VsdCs9ICdcbicKICAgIGZvciBsYWJlbCBpbiBs YWJlbHM6CiAgICAgICAgcmVzdWx0Kz0nXHRkZWYgbWVudV8lcyhzZWxmKTpcblx0XHQiIiIlcyIi IlxuXHRcdHBhc3NcblxuJyUoX3N0cmlwKGxhYmVsWzFdLmxvd2VyKCkpLCclcyA+ICVzJyVsYWJl bCkKICAgIHByaW50IHJlc3VsdAogICAgcHJpbnQgb3MuZ2V0Y3dkKCkKICAgIHByaW50IGYKICAg IGYgICA9IG9wZW4oZiwndycpCiAgICBmLndyaXRlKHJlc3VsdCkKICAgIGYuY2xvc2UoKQogICAg ICAgICAgICAKZGVmIHRlc3RfbWVudVdyaXRlKCk6CiAgICBpbXBvcnQgbWVudQogICAgbWVudVdy aXRlKHd4Z01lbnUuQmFyKCkpCiAgICAKIyMjI0Jhc2UKV1hfQklUTUFQICAgICAgID0gd3guQml0 bWFwCgpjbGFzcyBCaXRtYXA6CiAgICBkZWYgX19pbml0X18oc2VsZixwYXRoLGFwcCk6CiAgICAg ICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYuYXBwID0gYXBwCiAgICBkZWYgX19jYWxs X18oc2VsZix4LHQ9d3guQklUTUFQX1RZUEVfQU5ZKToKICAgICAgICBwYXRoID0gb3MucGF0aC5q b2luKHNlbGYucGF0aCxvcy5wYXRoLmJhc2VuYW1lKHgpKQogICAgICAgICNpZiBzZWxmLmFwcC5E RUJVRzoKICAgICAgICAjICAgIHByaW50ICdCaXRtYXA6ICVzPCVzJyUoeCxwYXRoKQogICAgICAg IHJldHVybiBXWF9CSVRNQVAocGF0aCx0KQogICAgICAgIApjbGFzcyBEdW1teVBhZ2Uod3guU3Rh dGljVGV4dCk6CiAgICAiIiJQYWdlIHRvIGZpbGwgdGhlIHRhYnMgKG5vdCBtZWFudCB0byBiZSB2 aXNpYmxlKS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLHRhYnMpOgogICAgICAgIHd4LlN0YXRp Y1RleHQuX19pbml0X18oc2VsZiwgdGFicywgd3guSURfQU5ZLCAiU1BFIGJ1ZzogVGhpcyBzaG91 bGRuJ3QgYmUgdmlzaWJsZSIpCiAgICAgICAgCiMjY2xhc3MgTm90ZWJvb2tQbHVzKHd4Lk5vdGVi b29rKToKIyMgICAgZGVmIF9faW5pdF9fKHNlbGYsYXBwLCphcmdzLCoqa2V5dyk6CiMjICAgICAg ICB3eC5Ob3RlYm9vay5fX2luaXRfXyhzZWxmLCphcmdzLCoqa2V5dykKIyMgICAgICAgIHNlbGYu YXBwID0gYXBwCiMjICAgICAgICBzZWxmLkJpbmQod3guRVZUX01JRERMRV9VUCxzZWxmLm9uRnJh bWVNaWRkbGVDbGljaykKIyMgICAgICAgIHNlbGYuQmluZCh3eC5FVlRfTEVGVF9EQ0xJQ0ssc2Vs Zi5vbkZyYW1lTWlkZGxlQ2xpY2spCiMjICAgICAgICAKIyMgICAgZGVmIG9uRnJhbWVNaWRkbGVD bGljayhzZWxmLGV2ZW50KToKIyMgICAgICAgICIiIldoZW4gYSB0YWIgaXMgbWlkZGxlIGNsaWNr ZWQgKEVWVF9NT1VTRV9MRUZUJkhpdFRlc3QpLiIiIgojIyAgICAgICAgbW91c2VQb3MgICAgPSBl dmVudC5HZXRQb3NpdGlvbigpCiMjICAgICAgICBpbmRleCwgb3RoZXIgPSBzZWxmLkhpdFRlc3Qo bW91c2VQb3MpCiMjICAgICAgICBpZiBzZWxmLmFwcC5tZGkgaW4gW1NESSxNRElfVEFCU106ICNu byBwYXJlbnQgdGFiCiMjICAgICAgICAgICAgemVybyA9IDAKIyMgICAgICAgIGVsc2U6CiMjICAg ICAgICAgICAgemVybyA9IC0xCiMjICAgICAgICBpZiBpbmRleD56ZXJvOgojIyAgICAgICAgICAg IHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LXplcm8tMV0uZnJhbWUub25GcmFtZUNsb3NlKCkKCmNs YXNzIE5vdGVib29rUGx1cyhOb3RlYm9va0N0cmwuTm90ZWJvb2tDdHJsKToKICAgIGRlZiBfX2lu aXRfXyhzZWxmLGFwcCwqYXJncywqKmtleXcpOgogICAgICAgIHNlbGYuYXBwID0gYXBwCiAgICAg ICAga2V5d1snc2l6ZSddID0gd3guU2l6ZSgyNSwyNSkKICAgICAgICBrZXl3WydtYXJnaW4nXSA9 IDAKICAgICAgICBpZiBrZXl3Lmhhc19rZXkoJ3N0eWxlJyk6CiAgICAgICAgICAgIGRlbCBrZXl3 WydzdHlsZSddCiAgICAgICAgTm90ZWJvb2tDdHJsLk5vdGVib29rQ3RybC5fX2luaXRfXyhzZWxm LCphcmdzLCoqa2V5dykKICAgICAgICAjdGhlbWUKICAgICAgICBzZWxmLnRhYnN0eWxlICAgPSBO b3RlYm9va0N0cmwuVGhlbWVTdHlsZSgpCiAgICAgICAgaWYgREFSV0lOOgogICAgICAgICAgICBz ZWxmLlNldENvbnRyb2xCYWNrZ3JvdW5kQ29sb3VyKHd4Lk51bGxDb2xvdXIpI3d4LkNvbG91cigy MzYsMjM2LDIzNikpCiAgICAgICAgICAgIHNlbGYudGFic3R5bGUuRW5hYmxlQXF1YVRoZW1lKFRy dWUsMikKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLlNldEhpZ2hsaWdodFNlbGVjdGlv bihUcnVlKQogICAgICAgICAgICBzZWxmLnRhYnN0eWxlLkVuYWJsZVNpbHZlclRoZW1lKFRydWUp CiAgICAgICAgc2VsZi5BcHBseVRhYlRoZW1lKHNlbGYudGFic3R5bGUpCiAgICAgICAgI2dlbmVy YWwgc2V0dGluZ3MKICAgICAgICBpZiBHVEs6CiAgICAgICAgICAgIHNlbGYuU2V0VGFiSGVpZ2h0 KDMwKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuU2V0VGFiSGVpZ2h0KDI1KSAgICAg ICAgICAgIAogICAgICAgIHNlbGYuU2V0RHJhd1goVHJ1ZSwgMikKICAgICAgICBzZWxmLlNldFBh ZGRpbmcod3guUG9pbnQoNCw0KSkKICAgICAgICBzZWxmLlNldFVzZUZvY3VzSW5kaWNhdG9yKEZh bHNlKQogICAgICAgIHNlbGYuRW5hYmxlQ2hpbGRGb2N1cyhUcnVlKQogICAgICAgIHNlbGYuRW5h YmxlRHJhZ0FuZERyb3AoVHJ1ZSkKICAgICAgICAjc2VsZi5FbmFibGVIaWRpbmcoVHJ1ZSkKICAg ICAgICBzZWxmLlNldFRvb2xUaXBCYWNrZ3JvdW5kQ29sb3VyKHd4LkNvbG91cigyNDAsMjU1LDI0 MCkpCiAgICAgICAgI2V2ZW50cwogICAgICAgIHNlbGYuQmluZChOb3RlYm9va0N0cmwuRVZUX05P VEVCT09LQ1RSTF9QQUdFX0NMT1NJTkcsc2VsZi5vbkNsb3NpbmcpCiAgICAgICAgc2VsZi5CaW5k KE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJMX1BBR0VfRE5ELCBzZWxmLm9uRHJhZ0FuZERy b3ApCiAgICAgICAgI3NlbGYuQmluZChOb3RlYm9va0N0cmwuRVZUX05PVEVCT09LQ1RSTF9QQUdF X0RDTElDSywgc2VsZi5PbkxlZnREQ2xpY2spCiAgICAgICAgCiAgICBkZWYgb25DbG9zaW5nKHNl bGYsZXZlbnQpOgogICAgICAgICIiIldoZW4gYSB0YWIgaXMgbWlkZGxlIGNsaWNrZWQgKEVWVF9N T1VTRV9MRUZUJkhpdFRlc3QpLiIiIgogICAgICAgIGluZGV4ICAgPSBldmVudC5HZXRTZWxlY3Rp b24oKQogICAgICAgIHplcm8gICAgPSBzZWxmLmdldFplcm8oKQogICAgICAgIGlmIGluZGV4Pnpl cm86CiAgICAgICAgICAgIHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LXplcm8tMV0uZnJhbWUub25G cmFtZUNsb3NlKCkKICAgICAgICAgICAgCiAgICBkZWYgb25EcmFnQW5kRHJvcChzZWxmLCBldmVu dCk6CiAgICAgICAgb2xkICAgICA9IGV2ZW50LkdldE9sZFBvc2l0aW9uKCkKICAgICAgICBuZXcg ICAgID0gZXZlbnQuR2V0TmV3UG9zaXRpb24oKQogICAgICAgIHplcm8gICAgPSBzZWxmLmdldFpl cm8oKQogICAgICAgIGlmIG5ldyAhPSB6ZXJvOiAjY2hpbGQgY2FuIG5vdCBiZSBiZWZvcmUgcGFy ZW50IGlmIHRoaXMgaXMgYSB0YWIKICAgICAgICAgICAgY2hpbGRyZW4gICAgICAgICAgICAgICAg PSBzZWxmLmFwcC5jaGlsZHJlbgogICAgICAgICAgICBjaGlsZCAgICAgICAgICAgICAgICAgICA9 IGNoaWxkcmVuW29sZC16ZXJvLTFdCiAgICAgICAgICAgIGNoaWxkcmVuLnJlbW92ZShjaGlsZCkK ICAgICAgICAgICAgY2hpbGRyZW4uaW5zZXJ0KG5ldy16ZXJvLTEsY2hpbGQpCiAgICAgICAgICAg IGV2ZW50LlNraXAoKQogICAgICAgIAogICAgZGVmIGdldFplcm8oc2VsZik6CiAgICAgICAgaWYg c2VsZi5hcHAubWRpIGluIFtTREksTURJX1RBQlNdOiAjbm8gcGFyZW50IHRhYgogICAgICAgICAg ICByZXR1cm4gMAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgIAog ICAgZGVmIHNldEljb25zKHNlbGYsYml0bWFwcyk6CiAgICAgICAgI3RvZG86IGhlcmUgdGhpcyBz aG91bGQgZ28gc29tZXdoZXJlIGVsc2UhIQogICAgICAgIHBhZ2VJY29ucyAgICAgID0gW10gIAog ICAgICAgIGZvciBiaXRtYXAgaW4gYml0bWFwczoKICAgICAgICAgICAgc2VsZi5wYWdlSWNvbnMu YXBwZW5kKHNlbGYubm90ZWJvb2tJY29ucy5BZGQoYml0bWFwKSkKICAgICAgICAgICAgCiAgICAg ICAgc2VsZi5ub3RlYm9va0ljb25zICA9IHd4LkltYWdlTGlzdCgxNiwxNikKICAgICAgICBzZWxm LkFzc2lnbkltYWdlTGlzdChzZWxmLm5vdGVib29rSWNvbnMpCiAgICAgICAgCiAgICBkZWYgT25M ZWZ0RENsaWNrKHNlbGYsIGV2ZW50KToKCiAgICAgICAgblBhZ2UgPSBldmVudC5HZXRTZWxlY3Rp b24oKQogICAgICAgIHNlbGYuUmVwYXJlbnRUb0ZyYW1lKG5QYWdlLCBGYWxzZSkKICAgICAgICAK ICAgICAgICBldmVudC5Ta2lwKCkKCgogICAgICAgICAgICAKIyMjI0ZvdW5kYXRpb24gQ2xhc3Nl cwpjbGFzcyBGcmFtZXdvcms6CiAgICAiIiJGb3VuZGF0aW9uIGNsYXNzIGZvciBldmVyeSBmcmFt ZS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLGFwcCxQYW5lbCxwYXJlbnRGcmFtZSxwYWdlPScn LGV4dHJhPScnLCoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5GcmVlemUoKQogICAgICAgICNzdGFn ZQogICAgICAgIHNlbGYuX19iZWZvcmVfXyhhcHAgICAgICAgICA9IGFwcCwKICAgICAgICAgICAg ICAgICAgICAgICAgUGFuZWwgICAgICAgPSBQYW5lbCwKICAgICAgICAgICAgICAgICAgICAgICAg cGFyZW50RnJhbWUgPSBwYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSAg ICAgICAgPSBwYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBleHRyYSAgICAgICA9IGV4dHJh KQogICAgICAgIHNlbGYuX19zdGFnZV9fKHBhZ2UgICAgICAgICA9IHBhZ2UsCiAgICAgICAgICAg ICAgICAgICAgICAgZXh0cmEgICAgICAgID0gZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAg KipvcHRpb25zKQogICAgICAgIHNlbGYuX19hZnRlcl9fKCkKICAgICAgICAjI3Jlc3QKICAgICAg ICBzZWxmLl9fbWVudV9fKCkKICAgICAgICBzZWxmLl9fdG9vbF9fKGFwcCkKICAgICAgICBzZWxm Ll9fc3RhdHVzQmFyX18oKQogICAgICAgIHNlbGYuX19maW5pc2hfXygpCiAgICAgICAgc2VsZi5f X2V2ZW50c19fKCkKICAgICAgICAjc2hvdwogICAgICAgIHNlbGYuVGhhdygpCiAgICAgICAgc2Vs Zi5TaG93KFRydWUpCiAgICAgICAgCiAgICAjLS0tY29tcG9uZW50cwogICAgZGVmIF9fYmVmb3Jl X18oc2VsZixhcHAsUGFuZWwscGFyZW50RnJhbWUscGFnZSxleHRyYSk6CiAgICAgICAgIiIiUmVm ZXJlbmNlIGZyYW1lIGF0dHJpYnV0ZXMgKG5vdCBvdmVyd3JpdHRlbikuIiIiCiAgICAgICAgc2Vs Zi5hcHAgICAgICAgICAgICA9IGFwcAogICAgICAgIHNlbGYuUGFuZWwgICAgICAgICAgPSBQYW5l bAogICAgICAgIHNlbGYucGFyZW50RnJhbWUgICAgPSBwYXJlbnRGcmFtZQogICAgICAgIHNlbGYu ZGVhZCAgICAgICAgICAgPSBGYWxzZSAjIHRvZG86IGlzIHRoaXMgc3RpbGwgbmVjZXNzYXJ5CiAg ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwnaXNTZGlQYXJlbnQnKToKICAgICAgICAgICAgc2Vs Zi5pc1NkaVBhcmVudCAgICA9IEZhbHNlCiAgICAgICAgc2VsZi5wYWdlICAgICAgICAgICA9IHBh Z2UKICAgICAgICBzZWxmLmV4dHJhICAgICAgICAgID0gZXh0cmEKCiAgICAgICAgCiAgICBkZWYg X19zdGFnZV9fKHNlbGYscGFnZSxleHRyYSwqKm9wdGlvbnMpOgogICAgICAgICIiIkNyZWF0ZSBu b3RlYm9vayAodG8gc3dpdGNoIGJldHdlZW4gZG9jdW1lbnRzKSAmIHBhbmVsCiAgICAgICAgVGhp cyBpcyBtb3N0bHkgb3ZlcndyaXR0ZW4uIiIiCiAgICAgICAgc2VsZi5wYW5lbCAgPSBzZWxmLlBh bmVsKHBhcmVudD1zZWxmLCoqb3B0aW9ucykKCiAgICBkZWYgX19hZnRlcl9fKHNlbGYpOgogICAg ICAgICIiIlJlZmVyZW5jZSBwYW5lbCBhdHRyaWJ1dGVzICAobm90IG92ZXJ3cml0dGVuKS4iIiIK ICAgICAgICBwYW5lbCAgICAgICAgICAgICAgID0gc2VsZi5wYW5lbAogICAgICAgIHBhbmVsLmFw cCAgICAgICAgICAgPSBzZWxmLmFwcAogICAgICAgIHBhbmVsLmZyYW1lICAgICAgICAgPSBzZWxm CiAgICAgICAgcGFuZWwucGFyZW50RnJhbWUgICA9IHNlbGYucGFyZW50RnJhbWUKICAgICAgICBw YW5lbC5wYXJlbnRQYW5lbCAgID0gc2VsZi5wYXJlbnRGcmFtZS5wYW5lbAogICAgICAgIHBhbmVs LmNoYW5nZWQgICAgICAgPSBGYWxzZQoKICAgIGRlZiBfX21lbnVfXyhzZWxmKToKICAgICAgICAi IiJDcmVhdGU6IEZyYW1ld29yazogbWVudS4iIiIKICAgICAgICBhcHAgICAgICAgICAgICAgICAg ICAgICA9IHNlbGYuYXBwCiAgICAgICAgaWYgYXBwLk1lbnVCYXIgYW5kIG5vdCBzZWxmLm5vTWVu dToKICAgICAgICAgICAgaWYgYXBwLkRFQlVHOgogICAgICAgICAgICAgICAgcHJpbnQgIiIiQ3Jl YXRlOiBGcmFtZXdvcms6IG1lbnUuIiIiCiAgICAgICAgICAgIGlmIGFwcC5tZGk6CiAgICAgICAg ICAgICAgICBmcmFtZSAgICAgICAgICAgPSBzZWxmLmFwcAogICAgICAgICAgICBlbHNlOgogICAg ICAgICAgICAgICAgZnJhbWUgICAgICAgICAgID0gc2VsZgogICAgICAgICAgICBzZWxmLm1lbnVC YXIgICAgICAgID0gbWVudUJhciA9IGFwcC5NZW51QmFyKGFwcD1zZWxmLmFwcCxmcmFtZT1mcmFt ZSkKICAgICAgICAgICAgc2VsZi5TZXRNZW51QmFyKG1lbnVCYXIpCiAgICAgICAgICAgICNyZWZl cmVuY2UKICAgICAgICAgICAgbWVudUJhci5hcHAgICAgICAgICA9IGFwcAogICAgICAgICAgICAj Y3JlYXRlCiAgICAgICAgICAgIG1lbnVCYXIuZnJhbWUgICAgICAgPSBzZWxmCiAgICAgICAgICAg IG1lbnVCYXIucGFyZW50RnJhbWUgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgICAgIG1lbnVC YXIucGFyZW50UGFuZWwgPSBzZWxmLnBhcmVudEZyYW1lLnBhbmVsCiAgICAgICAgICAgIGlmIGhh c2F0dHIoc2VsZiwncGFsZXR0ZScpOgogICAgICAgICAgICAgICAgc2VsZi5wYWxldHRlLnBhbmVs LmFwcCAgICAgID0gYXBwCiAgICAgICAgICAgICAgICBzZWxmLnBhbGV0dGUucGFuZWwubWVudUJh ciAgPSBtZW51QmFyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5tZW51QmFyICAgICAg ICA9IE5vbmUKCiAgICBkZWYgX190b29sX18oc2VsZixhcHApOgogICAgICAgICIiIkNyZWF0ZSB0 b29sYmFyCiAgICAgICAgCiAgICAgICAgVmVyeSBpbXBvcnRhbnQ6IGluIHRoZSBjdXN0b20gd3gu VG9vbEJhciBjbGFzcyBhZnRlciB0aGUgCiAgICAgICAgd3guVG9vbEJhci5fX2luaXRfXyB0aGUg Zm9sbG93aW5nIGNvZGUgbXVzdCBiZSB3cml0dGVuOgogICAgICAgICAgICBwYXJlbnQuU2V0VG9v bEJhcihzZWxmKSIiIgogICAgICAgIGlmIHNlbGYuYXBwLlRvb2xCYXIgYW5kIG5vdCAoc2VsZi5u b01lbnUgb3Igc2VsZi5pc1NkaVBhcmVudCk6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVH OgogICAgICAgICAgICAgICAgcHJpbnQgIiIiQ3JlYXRlOiBGcmFtZXdvcms6IHRvb2xiYXIuIiIi CiAgICAgICAgICAgICNjcmVhdGUKICAgICAgICAgICAgc2VsZi50b29sQmFyICAgICAgICAgICAg ICAgID0gc2VsZi5hcHAuVG9vbEJhcihwYXJlbnQ9c2VsZiwgYXBwPWFwcCwKICAgICAgICAgICAg ICAgIGlkPXd4LklEX0FOWSwgc3R5bGU9U1RZTEVfVE9PTEJBUikKICAgICAgICAgICAgI3NlbGYu U2V0VG9vbEJhcihzZWxmLnRvb2xCYXIpLT4gZG8gdGhpcyBpbiB0b29sYmFyIGNsYXNzCiAgICAg ICAgICAgICNyZWZlcmVuY2UKICAgICAgICAgICAgc2VsZi50b29sQmFyLmFwcCAgICAgICAgICAg ID0gc2VsZi5hcHAKICAgICAgICAgICAgc2VsZi50b29sQmFyLmZyYW1lICAgICAgICAgID0gc2Vs ZgogICAgICAgICAgICBpZiBzZWxmLm1lbnVCYXI6CiAgICAgICAgICAgICAgICBzZWxmLnRvb2xC YXIubWVudUJhciAgICAgICAgPSBzZWxmLm1lbnVCYXIKICAgICAgICAgICAgICAgIHNlbGYubWVu dUJhci50b29sQmFyICAgICAgICA9IHNlbGYudG9vbEJhcgogICAgICAgIGVsc2U6CiAgICAgICAg ICAgIHNlbGYudG9vbEJhciA9IE5vbmUKICAgICAgICAgICAgaWYgc2VsZi5tZW51QmFyOgogICAg ICAgICAgICAgICAgc2VsZi5tZW51QmFyLnRvb2xCYXIgICAgICAgID0gTm9uZQogICAgICAgICAg ICAKICAgIGRlZiBfX3N0YXR1c0Jhcl9fKHNlbGYpOgogICAgICAgICIiIkNyZWF0ZSBzdGF0dXNi YXIgKHRvIGJlIG92ZXJ3cml0dGVuKS4iIiIKICAgICAgICBpZiBzZWxmLm5vTWVudToKICAgICAg ICAgICAgc2VsZi5wYW5lbC5TZXRTdGF0dXNUZXh0ICAgID0gc2VsZi5wYXJlbnRGcmFtZS5TZXRT dGF0dXNUZXh0CiAgICAgICAgICAgIHNlbGYucGFuZWwuc3RhdHVzQmFyICAgICAgICA9IHNlbGYu cGFyZW50RnJhbWUuc3RhdHVzQmFyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5wYW5l bC5TZXRTdGF0dXNUZXh0ICAgID0gc2VsZi5TZXRTdGF0dXNUZXh0CiAgICAgICAgICAgIGlmIHNl bGYuYXBwLlN0YXR1c0JhcjoKICAgICAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOgogICAg ICAgICAgICAgICAgICAgIHByaW50ICIiIkNyZWF0ZTogRnJhbWV3b3JrOiBzdGF0dXNiYXIuIiIi CiAgICAgICAgICAgICAgICBzZWxmLnN0YXR1c0JhciA9IHNlbGYuYXBwLlN0YXR1c0JhcihwYXJl bnQ9c2VsZixpZD13eC5JRF9BTlkpCiAgICAgICAgICAgICAgICBzZWxmLlNldFN0YXR1c0Jhcihz ZWxmLnN0YXR1c0JhcikKICAgICAgICAgICAgCiAgICAjLS0tb3RoZXIKICAgIGRlZiBfX2Zpbmlz aF9fKHNlbGYpOgogICAgICAgIHNlbGYuc2V0VGl0bGUoc2VsZi5wYWdlLHNlbGYuZXh0cmEpCiAg ICAgICAgaWYgaGFzYXR0cihzZWxmLnBhbmVsLCdfX2ZpbmlzaF9fJyk6CiAgICAgICAgICAgIHNl bGYucGFuZWwuX19maW5pc2hfXygpCiAgICAgICAgICAgIAogICAgZGVmIF9fbGF5b3V0VGFic19f KHNlbGYscGFyZW50PU5vbmUpOgogICAgICAgICIiIk5vdCBmb3IgbWRpIGNoaWxkcmVuIiIiCiAg ICAgICAgaWYgbm90IHBhcmVudDogcGFyZW50ID0gc2VsZgogICAgICAgICNzaXplciBsYXlvdXQK ICAgICAgICBzaXplciA9IHd4LkJveFNpemVyKHd4LlZFUlRJQ0FMKQogICAgICAgIHNpemVyLkFk ZChzZWxmLnRhYnMsIDEsIHd4LkVYUEFORCwgMCkKICAgICAgICBwYXJlbnQuU2V0QXV0b0xheW91 dChUcnVlKQogICAgICAgIHBhcmVudC5TZXRTaXplcihzaXplcikKICAgICAgICBwYXJlbnQuTGF5 b3V0KCkKICAgICAgICAjZXZlbnRzCiAgICAgICAgc2VsZi5iaW5kVGFicygpCiAgICAgICAgCiAg ICAjLS0tZXZlbnRzCiAgICBkZWYgX19ldmVudHNfXyhzZWxmKToKICAgICAgICAiIiJJbml0aWFs aXplIGV2ZW50cy4iIiIKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1l QWN0aXZhdGUsIHd4LkVWVF9BQ1RJVkFURSwgICAgc2VsZikKICAgICAgICBldmVudE1hbmFnZXIu UmVnaXN0ZXIoc2VsZi5vbkZyYW1lQ2xvc2UsICAgIHd4LkVWVF9DTE9TRSwgICAgICAgc2VsZikK ICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lTW92ZSwgICAgIHd4LkVW VF9NT1ZFLCAgICAgICAgc2VsZikKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5v bkZyYW1lU2l6ZSwgICAgIHd4LkVWVF9TSVpFLCAgICAgICAgc2VsZikKICAgICAgICBpZiBzZWxm Lm1lbnVCYXI6ICAgIHNlbGYubWVudUJhci5fX2V2ZW50c19fKCkKICAgICAgICBpZiBzZWxmLnRv b2xCYXI6ICAgIHNlbGYudG9vbEJhci5fX2V2ZW50c19fKCkKICAgICAgICBpZiBoYXNhdHRyKHNl bGYucGFuZWwsJ29uSWRsZScpOgogICAgICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2Vs Zi5vbkZyYW1lSWRsZSwgd3guRVZUX0lETEUsIHNlbGYpCiAgICAgICAgCiAgICBkZWYgb25GcmFt ZUFjdGl2YXRlKHNlbGYsIGV2ZW50KToKICAgICAgICAiIiJBY3RpdmF0ZSBldmVudCAodG8gYmUg b3ZlcndyaXR0ZW4pLiIiIgogICAgICAgIGdldEFjdGl2ZSAgID0gKGV2ZW50IGlzIE5vbmUpIG9y IGV2ZW50LkdldEFjdGl2ZSgpCiAgICAgICAgaWYgZ2V0QWN0aXZlOgogICAgICAgICAgICBpZiBz ZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgICAgICBwcmludCAnRXZlbnQ8OiBGcmFtZXdvcms6 ICVzLkFjdGl2YXRlKCVzKSclKHNlbGYuX19jbGFzc19fLGdldEFjdGl2ZSkKICAgICAgICAgICAg aWYgaGFzYXR0cihzZWxmLnBhbmVsLCdvbkFjdGl2YXRlJyk6CiAgICAgICAgICAgICAgICBzZWxm LnBhbmVsLm9uQWN0aXZhdGUoZXZlbnQpCiAgICAgICAgZWxpZiBoYXNhdHRyKHNlbGYucGFuZWws J29uRGVhY3RpdmF0ZScpOgogICAgICAgICAgICBzZWxmLnBhbmVsLm9uRGVhY3RpdmF0ZShldmVu dCkKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgIHByaW50ICdFdmVudD46 IEZyYW1ld29yazogJXMuQWN0aXZhdGUoJXMpJyUoc2VsZi5fX2NsYXNzX18sZ2V0QWN0aXZlKQog ICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAKICAgIGRlZiBvbkZyYW1lQ2xv c2Uoc2VsZiwgZXZlbnQ9Tm9uZSwgZGVzdHJveSA9IDEpOgogICAgICAgICIiIkNsb3NlIGV2ZW50 ICh0byBiZSBvdmVyd3JpdHRlbi9leHRlbmRlZCkuIiIiCiAgICAgICAgZGVidWcgPSBzZWxmLmFw cC5ERUJVRwogICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICBwcmludCAnRXZlbnQ8OiBGcmFt ZXdvcms6ICVzLkNsb3NlJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5w YW5lbCwnb25DbG9zZScpOgogICAgICAgICAgICBzZWxmLmRlYWQgPSBzZWxmLnBhbmVsLm9uQ2xv c2UoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYuZGVhZCA9IFRydWUKICAgICAgICBp ZiBzZWxmLmRlYWQ6CiAgICAgICAgICAgIGlmIGRlc3Ryb3k6CiAgICAgICAgICAgICAgICBldmVu dE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmKQogICAgICAgICAgICAgICAgc2VsZi5EZXN0 cm95KCkKICAgICAgICAgICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAgICAg aWYgZGVidWc6IAogICAgICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5D bG9zZSByZXR1cm5zIFRydWUnJXNlbGYuX19jbGFzc19fCiAgICAgICAgICAgIHJldHVybiBUcnVl CiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgZGVidWc6IAogICAgICAgICAgICAgICAgcHJp bnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5DbG9zZSByZXR1cm5zIEZhbHNlJyVzZWxmLl9fY2xh c3NfXwogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAKICAgIGRlZiBvbkZyYW1lTW92 ZShzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAiIiJNb3ZlIGV2ZW50ICh0byBiZSBvdmVyd3Jp dHRlbikuIiIiCiAgICAgICAgaWYgc2VsZi5hcHAuREVCVUc6IAogICAgICAgICAgICBwcmludCAn RXZlbnQ8OiBGcmFtZXdvcms6ICVzLk1vdmUnJXNlbGYuX19jbGFzc19fCiAgICAgICAgaWYgZXZl bnQ6IGV2ZW50LlNraXAoKQogICAgICAgICNzbS5zcHkuZnJhbWUoMSkKICAgICAgICBpZiBoYXNh dHRyKHNlbGYucGFuZWwsJ29uTW92ZScpOgogICAgICAgICAgICBzZWxmLnBhbmVsLm9uTW92ZShl dmVudCkKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzogCiAgICAgICAgICAgIHByaW50ICdFdmVu dD46IEZyYW1ld29yazogJXMuTW92ZSclc2VsZi5fX2NsYXNzX18KICAgICAgICAKICAgIGRlZiBv bkZyYW1lU2l6ZShzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAiIiJTaXplIGV2ZW50ICh0byBi ZSBvdmVyd3JpdHRlbikuIiIiCiAgICAgICAgI3NtLnNweS5mcmFtZSgxKQogICAgICAgIGlmIHNl bGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PDogRnJhbWV3b3JrOiAlcy5T aXplJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYW5lbCwnb25TaXpl Jyk6CiAgICAgICAgICAgIHNlbGYucGFuZWwub25TaXplKGV2ZW50KQogICAgICAgIGlmIHNlbGYu YXBwLkRFQlVHOiAKICAgICAgICAgICAgcHJpbnQgJ0V2ZW50PjogRnJhbWV3b3JrOiAlcy5TaXpl JyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIGV2ZW50OiBldmVudC5Ta2lwKCkKICAgICAgICAK ICAgIGRlZiBvbkZyYW1lSWRsZShzZWxmLCBldmVudCk6CiAgICAgICAgIiIiVG8gYmUgb3Zlcndy aXR0ZW4uIiIiCiAgICAgICAgaWYgbm90IHNlbGYuZGVhZDoKICAgICAgICAgICAgaWYgaGFzYXR0 cihzZWxmLnBhbmVsLCdvbklkbGUnKToKICAgICAgICAgICAgICAgIHNlbGYucGFuZWwub25JZGxl KCkKICAgICAgICAgICAgICAgIAogICAgZGVmIGJpbmRUYWJzKHNlbGYpOgogICAgICAgICIiIkJp bmQgZXZlbnRzIHRvIG5vdGVib29rIHRhYnMgKHRvIGJlIG92ZXJ3cml0ZW4pLiIiIgogICAgICAg IHBhc3MKICAgICAgICAKICAgIGRlZiB1bmJpbmRUYWJzKHNlbGYpOgogICAgICAgICIiIlVuYmlu ZCBldmVudHMgdG8gbm90ZWJvb2sgdGFicyAodG8gYmUgb3ZlcndyaXRlbikuIiIiCiAgICAgICAg cGFzcwogICAgICAgIAogICAgZGVmIGdldEluZGV4KHNlbGYpOgogICAgICAgICIiIkdldCBpbmRl eCBvZiBjdXJyZW50IGNoaWxkLiIiIgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIHNl bGYuYXBwLmNoaWxkcmVuLmluZGV4KHNlbGYucGFuZWwpCiAgICAgICAgZXhjZXB0IFZhbHVlRXJy b3I6CiAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgICAgICAKCmNsYXNzIFRhYnMoRnJhbWV3 b3JrKToKICAgICMtLS1ldmVudHMgICAgICAgICAgICAKICAgIGRlZiBiaW5kVGFicyhzZWxmKToK ICAgICAgICBzZWxmLnRhYnMuQmluZChzZWxmLmFwcC5FVkVOVF9OT1RFQk9PSywgc2VsZi5vbkZy YW1lVGFiKQogICAgICAgICNldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lVGFiLCBz ZWxmLmFwcC5FVkVOVF9OT1RFQk9PSywgc2VsZi50YWJzKQogICAgICAgIAogICAgZGVmIHVuYmlu ZFRhYnMoc2VsZik6CiAgICAgICAgc2VsZi50YWJzLlVuYmluZChzZWxmLmFwcC5FVkVOVF9OT1RF Qk9PSykKICAgICAgICAjZXZlbnRNYW5hZ2VyLkRlcmVnaXN0ZXJXaW5kb3coc2VsZi50YWJzKQog ICAgICAgIAogICAgZGVmIHJhaXNlVGFiKHNlbGYsaW5kZXgpOgogICAgICAgIGlmIGluZGV4ID4g LTE6CiAgICAgICAgICAgIGFwcCA9IHNlbGYuYXBwCiAgICAgICAgICAgIGlmIGFwcC5ERUJVRzoK ICAgICAgICAgICAgICAgIHByaW50ICdFdmVudDw6IFRhYjogICAlcy5vbkZyYW1lVGFiKCVzKScl KHNlbGYuX19jbGFzc19fLGluZGV4KQogICAgICAgICAgICBwYXJlbnQgICAgICA9IGFwcC5tZGkg aW4gW1NESSxNRElfVEFCU10KICAgICAgICAgICAgaWYgaW5kZXggPT0gMCBhbmQgcGFyZW50Ogog ICAgICAgICAgICAgICAgd2luZG93ICA9IHNlbGYucGFyZW50RnJhbWUKICAgICAgICAgICAgICAg IGlmIGhhc2F0dHIod2luZG93LCdwYW5lbEZyYW1lJyk6CiAgICAgICAgICAgICAgICAgICAgd2lu ZG93ID0gd2luZG93LnBhbmVsRnJhbWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg IHdpbmRvdyA9IHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4LVswLDFdW3BhcmVudF1dLmZyYW1lCiAg ICAgICAgICAgIGlmIGFwcC5ERUJVRzoKICAgICAgICAgICAgICAgIHByaW50ICclcy5SYWlzZSgp JyV3aW5kb3cKICAgICAgICAgICAgICAgIHByaW50IHdpbmRvdy5SYWlzZQogICAgICAgICAgICB3 aW5kb3cuUmFpc2UoKQogICAgICAgICAgICBpZiBhcHAuREVCVUc6CiAgICAgICAgICAgICAgICBw cmludCAnRXZlbnQ+OiBUYWI6ICAgJXMub25GcmFtZVRhYiglcyknJShzZWxmLl9fY2xhc3NfXyxp bmRleCkKCiMtLS1TREkgUGxhdGZvcm0gZGVwZW5kZW50CmNsYXNzIFRhYldpbjMyKFRhYnMpOgog ICAgIiIiU0RJIEltcGxlbWVudGF0aW9uIGZvciB3aW5kb3dzIChzZWUgYWxzbyBBcHAuU2V0TWRp KSIiIgojIyAgICBkZWYgb25GcmFtZVRhYihzZWxmLGV2ZW50KToKIyMgICAgICAgICIiIldoZW4g YSB0YWIgaXMgY2hhbmdlZCAoRVZUX01PVVNFX0xFRlQmSGl0VGVzdCkuIiIiCiMjICAgICAgICBt b3VzZVBvcyAgICA9IGV2ZW50LkdldFBvc2l0aW9uKCkKIyMgICAgICAgIGluZGV4LCBvdGhlciA9 IHNlbGYudGFicy5IaXRUZXN0KG1vdXNlUG9zKQojIyAgICAgICAgc2VsZi5yYWlzZVRhYihpbmRl eCkKICAgICAgICAKICAgIGRlZiBvbkZyYW1lVGFiKHNlbGYsZXZlbnQpOgogICAgICAgIHNlbGYu cmFpc2VUYWIoZXZlbnQuR2V0U2VsZWN0aW9uKCkpCiAgICAgICAgZXZlbnQuU2tpcCgpCiAgICAg ICAgICAgICAgICAKY2xhc3MgVGFiVW5peChUYWJzKToKICAgICIiIlNESSBJbXBsZW1lbnRhdGlv biBmb3Igd2luZG93cyAoc2VlIGFsc28gQXBwLlNldE1kaSkiIiIKICAgIGRlZiBvbkZyYW1lVGFi KHNlbGYsZXZlbnQpOgogICAgICAgICIiIldoZW4gYSB0YWIgaXMgY2hhbmdlZCAoRVZUX05PVEVC T09LX0NIQU5HSU5HKS4iIiIKICAgICAgICBpbmRleCAgICAgICA9IGV2ZW50LkdldFNlbGVjdGlv bigpCiAgICAgICAgZXZlbnQuVmV0bygpI2luc3RlYWQgb2YgZXZlbnQuU2tpcCgpIChkb24ndCBk byB0aGlzIGhlcmUgYW55d2F5KQogICAgICAgIHNlbGYucmFpc2VUYWIoaW5kZXgpCgppZiBQTEFU Rk9STSA9PSAnd2luMzInOgogICAgVGFiUGxhdGZvcm0gICAgID0gVGFiV2luMzIKZWxzZToKICAg IFRhYlBsYXRmb3JtICAgICA9IFRhYlVuaXgKICAgICAgICAKIyMjI1BhcmVudCBjbGFzc2VzCmNs YXNzIFBhcmVudChGcmFtZXdvcmspOgogICAgIy0tLWluaXRpYWxpemUKICAgIGRlZiBfX2luaXRf XyhzZWxmLCBhcHAsIHBhZ2UgPSAnJywgKipvcHRpb25zKToKICAgICAgICBzZWxmLm9wdGlvbnMg ICAgICAgICAgICA9IG9wdGlvbnMKICAgICAgICBzZWxmLm5vTWVudSAgICAgICAgID0gRmFsc2UK ICAgICAgICBGcmFtZXdvcmsuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgYXBwICAgICAgICAg ICAgID0gYXBwLAogICAgICAgICAgICBQYW5lbCAgICAgICAgICAgPSBhcHAuUGFyZW50UGFuZWws CiAgICAgICAgICAgIHBhZ2UgICAgICAgICAgICA9IHBhZ2UsCiAgICAgICAgICAgIHBhcmVudEZy YW1lICAgICA9IHNlbGYsCiAgICAgICAgICAgICoqb3B0aW9ucykKICAgICAgICAKICAgIGRlZiBf X2ZpbmlzaF9fKHNlbGYpOgogICAgICAgIEZyYW1ld29yay5fX2ZpbmlzaF9fKHNlbGYpCiAgICAg ICAgCiAgICAjLS0tZXZlbnRzCiAgICBkZWYgb25GcmFtZUNsb3NlKHNlbGYsZXZlbnQ9Tm9uZSk6 CiAgICAgICAgc2VsZi5kZWFkID0gRnJhbWV3b3JrLm9uRnJhbWVDbG9zZShzZWxmLGV2ZW50LGRl c3Ryb3k9MCkKICAgICAgICBpZiBub3Qgc2VsZi5kZWFkOiByZXR1cm4KICAgICAgICAjQXZvaWQg ZXZlbnQgZXhjZXB0aW9ucyBvZiBjaGlsZCBmcmFtZXMKICAgICAgICBmb3IgY2hpbGQgaW4gc2Vs Zi5hcHAuY2hpbGRyZW46CiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5EZXJlZ2lzdGVyV2luZG93 KGNoaWxkLmZyYW1lKQogICAgICAgICAgICBjaGlsZC5kZWFkID0gMQogICAgICAgICNEZXN0cm95 IGl0c2VsZgogICAgICAgIHNlbGYuRGVzdHJveSgpCiAgICAgICAgaWYgZXZlbnQ6IGV2ZW50LlNr aXAoKQoKICAgICMtLS1tZW51CiAgICBkZWYgbWVudV9uZXcoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAg ICAgICAgc2VsZi5jaGlsZCgpCiAgICAgICAgCiAgICBkZWYgbWVudV9jbG9zZShzZWxmLGV2ZW50 PU5vbmUpOgogICAgICAgIGNoaWxkQWN0aXZlID0gc2VsZi5hcHAuY2hpbGRBY3RpdmUKICAgICAg ICBpZiBjaGlsZEFjdGl2ZToKICAgICAgICAgICAgY2hpbGRBY3RpdmUub25GcmFtZUNsb3NlKCkK ICAgICAgICAKICAgICMtLS1wYXJlbnRQYW5lbAogICAgZGVmIGNoaWxkKHNlbGYsKmFyZ3MsKipr ZXl3KToKICAgICAgICBzZWxmLkNoaWxkRnJhbWUoc2VsZiwqYXJncywqKmtleXcpCiAgICAgICAg CiAgICBkZWYgbWF4aW1pemUoc2VsZik6CiAgICAgICAgaWYgc2VsZi5hcHAubWRpID09IE1ESV9T UExJVDoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBpID0gMAogICAgICAgIG0gPSAw CiAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuYXBwLmNoaWxkcmVuOgogICAgICAgICAgICBpZiBj aGlsZC5mcmFtZS5Jc01heGltaXplZCgpOgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAg ICAgICByZXR1cm4gRmFsc2UKICAgIAogICAgIy0tLW90aGVyCiAgICBkZWYgc2V0VGl0bGUoc2Vs ZixwYWdlPScnLGV4dHJhPScnLGRyYXc9VHJ1ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgaWYgZHJh dzoKICAgICAgICAgICAgdCAgICAgICAgICAgPSBzZWxmLmFwcC50aXRsZQogICAgICAgICAgICBp ZiBwYWdlOgogICAgICAgICAgICAgICAgdCAgICAgICA9ICclcyAtICVzJyUocGFnZSx0KQogICAg ICAgICAgICBzZWxmLlNldFRpdGxlKHQpCiAgICAgICAgCgpjbGFzcyBNZGlQYXJlbnRGcmFtZShQ YXJlbnQsd3guTURJUGFyZW50RnJhbWUpOgogICAgIiIiVW5pZm9ybWVkIHBhcmVudCBNZGkvU2Rp IGNsYXNzIGJhc2VkIG9uIE1kaS4KICAgIAogICAgc2VsZi5QYW5lbCBpcyBkZWZpbmVkIGJ5IGpv aW5lZCBjbGFzcyIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsYXBwLAogICAgICAgICAgICBpZCAg ICAgID0gd3guSURfQU5ZLCAKICAgICAgICAgICAgcGFnZSAgID0gJ3BhcmVudEZyYW1lJywKICAg ICAgICAgICAgcGFyZW50ICA9IE5vbmUsCiAgICAgICAgICAgIHNpemUgICAgPSBTSVpFLAogICAg ICAgICAgICBzdHlsZSAgID0gU1RZTEVfUEFSRU5URlJBTUUsCiAgICAgICAgICAgIHBvcyAgICAg PSBQT1MsCiAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgICAgd3guTURJUGFyZW50RnJhbWUu X19pbml0X18oc2VsZiwgCiAgICAgICAgICAgIGlkICAgICAgPSBpZCwgCiAgICAgICAgICAgIG5h bWUgICAgPSBwYWdlLAogICAgICAgICAgICBwYXJlbnQgID0gcGFyZW50LAogICAgICAgICAgICBz aXplICAgID0gc2l6ZSwKICAgICAgICAgICAgc3R5bGUgICA9IHN0eWxlIHwgRlVMTF9SRVBBSU5U X09OX1JFU0laRSwKICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UsCiAgICAgICAgICAgIHBvcyAg ICAgPSBwb3MpCiAgICAgICAgaWYgc3R5bGUgJiB3eC5NQVhJTUlaRToKICAgICAgICAgICAgdHJ5 OiAjbm90IHdvcmtpbmcgb24gbWFuZHJha2U5CiAgICAgICAgICAgICAgICBzZWxmLk1heGltaXpl KDEpCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAjVGhp cyBhbHdheXMgaGFzIHRvIGJlIGxhc3QhCiAgICAgICAgUGFyZW50Ll9faW5pdF9fKHNlbGYsYXBw PWFwcCxwYWdlPXBhZ2UsKipvcHRpb25zKQogICAgICAgIAogICAgZGVmIF9fc3RhZ2VfXyhzZWxm LHBhZ2UsZXh0cmEsKipvcHRpb25zKToKICAgICAgICBzZWxmLnBhbmVsRnJhbWUgICAgID0gd3gu TURJQ2hpbGRGcmFtZShwYXJlbnQ9c2VsZixpZD13eC5JRF9BTlkpCiAgICAgICAgc2VsZi5wYW5l bEZyYW1lLlNldFRpdGxlKHNlbGYuYXBwLnBhbmVsRnJhbWVUaXRsZSkKICAgICAgICAjcGFyZW50 UGFuZWwKICAgICAgICBzZWxmLnBhbmVsICAgICAgICAgID0gc2VsZi5QYW5lbChwYXJlbnQ9c2Vs Zi5wYW5lbEZyYW1lLCoqb3B0aW9ucykKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2Vs Zi5vblNhc2hDbG9zZSwgd3guRVZUX0NMT1NFLCBzZWxmLnBhbmVsRnJhbWUpCiAgICAgICAgI3Bh bGV0dGUKICAgICAgICBpZiBzZWxmLmFwcC5QYWxldHRlOgogICAgICAgICAgICBzZWxmLnBhbGV0 dGUgICAgPSBzZWxmLmFwcC5QYWxldHRlKHBhcmVudD1zZWxmLGlkPXd4LklEX0FOWSkKICAgICAg ICAgICAgc2VsZi5wYWxldHRlLlNob3coKQogICAgICAgIAogICAgZGVmIG9uU2FzaENsb3NlKHNl bGYsZXZlbnQpOgogICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYW5lbCwnb25DbG9zZVBhbmVsRnJh bWUnKToKICAgICAgICAgICAgc2VsZi5wYW5lbC5vbkNsb3NlUGFuZWxGcmFtZShldmVudCkKICAg ICAgICAgICAgCiAgICBkZWYgc2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJhPScnLGRyYXc9VHJ1 ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgaWYgZHJhdzoKICAgICAgICAgICAgc2VsZi5TZXRUaXRs ZShzZWxmLmFwcC50aXRsZSkKICAgICAgICAgICAgCmNsYXNzIE1kaVRhYnNQYXJlbnRGcmFtZShU YWJQbGF0Zm9ybSxNZGlQYXJlbnRGcmFtZSk6CiAgICBkZWYgX19zdGFnZV9fKHNlbGYscGFnZSxl eHRyYSwqKm9wdGlvbnMpOgogICAgICAgIGFwcCAgICAgICAgICAgICAgICAgPSBzZWxmLmFwcAog ICAgICAgIHNlbGYucGFuZWxGcmFtZSAgICAgPSB3eC5NRElDaGlsZEZyYW1lKHBhcmVudD1zZWxm LGlkPXd4LklEX0FOWSkKICAgICAgICBzZWxmLnBhbmVsRnJhbWUuU2V0VGl0bGUoYXBwLnBhbmVs RnJhbWVUaXRsZSkKICAgICAgICBzZWxmLnBhbmVsRnJhbWUuUmFpc2U9IHNlbGYucGFuZWxGcmFt ZS5BY3RpdmF0ZQogICAgICAgICNwYXJlbnRQYW5lbAogICAgICAgIHNlbGYudGFicyAgID0gTm90 ZWJvb2tQbHVzKGFwcD1hcHAscGFyZW50PXNlbGYucGFyZW50RnJhbWUsIGlkPXd4LklEX0FOWSwK ICAgICAgICAgICAgc3R5bGUgPSBTVFlMRV9OT1RFQk9PSyApCiAgICAgICAgc2VsZi5wYW5lbCAg PSBzZWxmLlBhbmVsKHBhcmVudD1zZWxmLnRhYnMsKipvcHRpb25zKQogICAgICAgIHNlbGYudGFi cy5BZGRQYWdlKHNlbGYucGFuZWwsIHBhZ2UpCiAgICAgICAgc2VsZi5fX2xheW91dFRhYnNfXygp CiAgICAgICAgI2V2ZW50cwogICAgICAgIGV2ZW50TWFuYWdlci5SZWdpc3RlcihzZWxmLm9uU2Fz aENsb3NlLCB3eC5FVlRfQ0xPU0UsIHNlbGYucGFuZWxGcmFtZSkKICAgICAgICAjcGFsZXR0ZQog ICAgICAgIGlmIGFwcC5QYWxldHRlOgogICAgICAgICAgICBzZWxmLnBhbGV0dGUgICAgPSBzZWxm LmFwcC5QYWxldHRlKHBhcmVudD1zZWxmLGlkPXd4LklEX0FOWSkKICAgICAgICAgICAgc2VsZi5w YWxldHRlLlNob3coKQogICAgICAgICAgICAgICAgCiAgICAgICAgCmNsYXNzIE1kaVNhc2hQYXJl bnRGcmFtZShNZGlQYXJlbnRGcmFtZSk6CiAgICAiIiJVbmlmb3JtZWQgcGFyZW50IE1kaS9TZGkg Y2xhc3MgYmFzZWQgb24gTWRpLgogICAgCiAgICBzZWxmLlBhbmVsIGlzIGRlZmluZWQgYnkgam9p bmVkIGNsYXNzIiIiICAgICAgICAKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4dHJhLCoq b3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4gZG9jdW1l bnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJV RzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xh c3NfXywpCiAgICAgICAgI3Nhc2ggZm9yIHBhcmVudFBhbmVsCiAgICAgICAgc2VsZi5zYXNoSWQg PSB3eC5OZXdJZCgpCiAgICAgICAgc2VsZi5zYXNoID0gd3guU2FzaExheW91dFdpbmRvdyhpZD1z ZWxmLnNhc2hJZCwKICAgICAgICAgICAgICBuYW1lPSdzYXNoJywgcGFyZW50PXNlbGYsIHN0eWxl PXd4Lk5PX0JPUkRFUikKICAgICAgICBzZWxmLnNhc2guU2V0RGVmYXVsdFNpemUod3guU2l6ZSg3 OTIsIDIwMCkpCiAgICAgICAgc2VsZi5zYXNoLlNldE9yaWVudGF0aW9uKHd4LkxBWU9VVF9IT1JJ Wk9OVEFMKQogICAgICAgIHNlbGYuc2FzaC5TZXRBbGlnbm1lbnQod3guTEFZT1VUX0JPVFRPTSkK ICAgICAgICBzZWxmLnNhc2guU2V0U2FzaFZpc2libGUod3guU0FTSF9UT1AsIDEpCiAgICAgICAg c2VsZi5zYXNoLlNldE1pbmltdW1TaXplWSgxKQogICAgICAgICNzZWxmLnNhc2guU2hvdyhUcnVl KQogICAgICAgIGV2ZW50TWFuYWdlci5SZWdpc3RlcihzZWxmLm9uRnJhbWVTYXNoRHJhZ2dlZCwg d3guRVZUX1NBU0hfRFJBR0dFRCwgc2VsZi5zYXNoKQogICAgICAgICNwYXJlbnRQYW5lbAogICAg ICAgIHNlbGYucGFuZWwgICAgICAgICAgPSBzZWxmLlBhbmVsKHBhcmVudD1zZWxmLnNhc2gsKipv cHRpb25zKQogICAgICAgICNsYXlvdXQKICAgICAgICBzZWxmLnBhbmVsU2l6ZXIgICAgID0gd3gu Qm94U2l6ZXIod3guVkVSVElDQUwpCiAgICAgICAgc2VsZi5wYW5lbFNpemVyLkFkZChzZWxmLnBh bmVsLCAxLCB3eC5BTEwgfCB3eC5FWFBBTkQsIDApCiAgICAgICAgc2VsZi5zYXNoLlNldEF1dG9M YXlvdXQoMSkKICAgICAgICBzZWxmLnNhc2guU2V0U2l6ZXIoc2VsZi5wYW5lbFNpemVyKQogICAg CiAgICBkZWYgX19maW5pc2hfXyhzZWxmKToKICAgICAgICBQYXJlbnQuX19maW5pc2hfXyhzZWxm KQogICAgICAgIHd4LkxheW91dEFsZ29yaXRobSgpLkxheW91dE1ESUZyYW1lKHNlbGYpCgogICAg Iy0tLWV2ZW50cwogICAgZGVmIG9uRnJhbWVTYXNoRHJhZ2dlZChzZWxmLGV2ZW50KToKICAgICAg ICAiIiJDYWxsZWQgd2hlbiB0aGUgc2hhc2h3aW5kb3cgaXMgZHJhZ2dlZC4iIiIKICAgICAgICBp ZiBldmVudC5HZXREcmFnU3RhdHVzKCkgPT0gd3guU0FTSF9TVEFUVVNfT1VUX09GX1JBTkdFOgog ICAgICAgICAgICByZXR1cm4KICAgICAgICBlSUQgPSBldmVudC5HZXRJZCgpCiAgICAgICAgaWYg ZUlEID09IHNlbGYuc2FzaElkOgogICAgICAgICAgICBzZWxmLnNhc2guU2V0RGVmYXVsdFNpemUo d3guU2l6ZSgxMDAwLGV2ZW50LkdldERyYWdSZWN0KCkuaGVpZ2h0KSkKICAgICAgICB3eC5MYXlv dXRBbGdvcml0aG0oKS5MYXlvdXRNRElGcmFtZShzZWxmKQoKICAgIGRlZiBvbkZyYW1lU2l6ZShz ZWxmLCBldmVudCk6CiAgICAgICAgIiIiT3ZlcndyaXR0ZW4gZm9yIHNhc2ggZHJhZ2dpbmcuIiIi CiAgICAgICAgRnJhbWV3b3JrLm9uRnJhbWVTaXplKHNlbGYpCiAgICAgICAgd3guTGF5b3V0QWxn b3JpdGhtKCkuTGF5b3V0TURJRnJhbWUoc2VsZikKCmNsYXNzIE1kaVNhc2hUYWJzUGFyZW50RnJh bWUoVGFiUGxhdGZvcm0sTWRpU2FzaFBhcmVudEZyYW1lKToKICAgIGRlZiBfX3N0YWdlX18oc2Vs ZixwYWdlLCoqb3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdl ZW4gZG9jdW1lbnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxm LmFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpOiAlcy50YWJzJyUoc2Vs Zi5fX2NsYXNzX18sKQogICAgICAgIHNlbGYudGFic1Nhc2ggPSB3eC5TYXNoTGF5b3V0V2luZG93 KGlkPXd4LklEX0FOWSwKICAgICAgICAgICAgICBuYW1lPSd0YWJzJywgcGFyZW50PXNlbGYsIHN0 eWxlPXd4LkNMSVBfQ0hJTERSRU4pCiAgICAgICAgc2VsZi50YWJzU2FzaC5TZXRPcmllbnRhdGlv bih3eC5MQVlPVVRfSE9SSVpPTlRBTCkKICAgICAgICBzZWxmLnRhYnNTYXNoLlNldEFsaWdubWVu dCh3eC5MQVlPVVRfVE9QKQogICAgICAgIHNlbGYudGFic1Nhc2guU2V0RGVmYXVsdFNpemUod3gu U2l6ZSg3OTIsIFRBQlNBU0hfSEVJR0hUKSkKICAgICAgICBzZWxmLnRhYnMgPSBOb3RlYm9va1Bs dXMoYXBwPXNlbGYuYXBwLGlkPXd4LklEX0FOWSwgcGFyZW50PXNlbGYudGFic1Nhc2gsIHN0eWxl PVNUWUxFX05PVEVCT09LKQogICAgICAgIHNlbGYuX19sYXlvdXRUYWJzX18oc2VsZi50YWJzU2Fz aCkKICAgICAgICBNZGlTYXNoUGFyZW50RnJhbWUuX19zdGFnZV9fKHNlbGYscGFnZSwqKm9wdGlv bnMpCgogICAgZGVmIG9uRnJhbWVUYWIoc2VsZixldmVudCk6CiAgICAgICAgIiIiV2hlbiBhIHRh YiBpcyBjaGFuZ2VkIChFVlRfTU9VU0VfTEVGVCZIaXRUZXN0KS4iIiIKICAgICAgICBUYWJQbGF0 Zm9ybS5vbkZyYW1lVGFiKHNlbGYsZXZlbnQpCiAgICAgICAgZXZlbnQuU2tpcCgpCiAgICAgICAg ICAgIApjbGFzcyBNZGlTcGxpdFBhcmVudEZyYW1lKFBhcmVudCx3eC5GcmFtZSk6CiAgICBkZWYg X19pbml0X18oc2VsZixhcHAsCiAgICAgICAgICAgIGlkICAgICAgPSB3eC5JRF9BTlksIAogICAg ICAgICAgICBwYWdlICAgID0gJ3BhcmVudEZyYW1lJywKICAgICAgICAgICAgcGFyZW50ICA9IE5v bmUsCiAgICAgICAgICAgIHNpemUgICAgPSBTSVpFLAogICAgICAgICAgICBzdHlsZSAgID0gU1RZ TEVfUEFSRU5URlJBTUUsCiAgICAgICAgICAgIHBvcyAgICAgPSBQT1MsCiAgICAgICAgICAgICoq b3B0aW9ucyk6CiAgICAgICAgd3guRnJhbWUuX19pbml0X18oc2VsZiwgCiAgICAgICAgICAgIGlk ICAgICAgPSBpZCwgCiAgICAgICAgICAgIG5hbWUgICAgPSBwYWdlLAogICAgICAgICAgICBwYXJl bnQgID0gcGFyZW50LCAKICAgICAgICAgICAgc2l6ZSAgICA9IHNpemUsCiAgICAgICAgICAgIHN0 eWxlICAgPSBzdHlsZSB8IEZVTExfUkVQQUlOVF9PTl9SRVNJWkUsCiAgICAgICAgICAgIHRpdGxl ICAgPSBwYWdlLAogICAgICAgICAgICBwb3MgICAgID0gcG9zKQogICAgICAgIGlmIHN0eWxlICYg d3guTUFYSU1JWkU6CiAgICAgICAgICAgIHRyeTogI25vdCB3b3JraW5nIG9uIG1hbmRyYWtlOQog ICAgICAgICAgICAgICAgc2VsZi5NYXhpbWl6ZSgxKQogICAgICAgICAgICBleGNlcHQ6CiAgICAg ICAgICAgICAgICBwYXNzCiAgICAgICAgI3NlbGYuaXNTZGlQYXJlbnQgICAgPSBUcnVlCiAgICAg ICAgI1RoaXMgYWx3YXlzIGhhcyB0byBiZSBsYXN0IQogICAgICAgIFBhcmVudC5fX2luaXRfXyhz ZWxmLGFwcD1hcHAscGFnZT1wYWdlLCoqb3B0aW9ucykKICAgICAgICAKICAgIGRlZiBfX3N0YWdl X18oc2VsZixwYWdlLGV4dHJhLCoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5zcGxpdCAgPSBzcGxp dCA9IHd4LlNwbGl0dGVyV2luZG93KHNlbGYsd3guSURfQU5ZLHN0eWxlPVNUWUxFX1NQTElUKQog ICAgICAgIHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFwcD1zZWxmLmFwcCxwYXJlbnQ9c3Bs aXQsIGlkPXd4LklEX0FOWSwKICAgICAgICAgICAgc3R5bGUgPSBTVFlMRV9OT1RFQk9PSyApCiAg ICAgICAgI3NlbGYudGFicyAgID0gd3guTm90ZWJvb2socGFyZW50PXNwbGl0LCBpZD13eC5JRF9B TlksCiAgICAgICAgIyAgICBzdHlsZSA9IFNUWUxFX05PVEVCT09LICkKICAgICAgICBzZWxmLnBh bmVsICA9IHNlbGYuUGFuZWwocGFyZW50PXNwbGl0LCoqb3B0aW9ucykKICAgICAgICBzcGxpdC5T ZXRNaW5pbXVtUGFuZVNpemUoMjApCiAgICAgICAgc3BsaXQuU3BsaXRIb3Jpem9udGFsbHkoc2Vs Zi50YWJzLCBzZWxmLnBhbmVsLCAtMjAwKQogICAgICAgIHNpemUgPSBzZWxmLkdldFNpemUoKQog ICAgICAgIHNlbGYuU2V0U2l6ZSgoc2l6ZVswXSxzaXplWzFdLTEpKQogICAgICAgIHNlbGYuU2V0 U2l6ZSgoc2l6ZVswXSxzaXplWzFdKSkKICAgICAgICBzcGxpdC5VcGRhdGVTaXplKCkKICAgICAg ICBzZWxmLmJpbmRUYWJzKCkKICAgICAgICAKICAgIGRlZiBiaW5kVGFicyhzZWxmLGV2ZW50PU5v bmUpOgogICAgICAgIHNlbGYudGFicy5CaW5kKE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJM X1BBR0VfQ0hBTkdFRCwgc2VsZi5vbkZyYW1lVGFiKQogICAgICAgICNldmVudE1hbmFnZXIuUmVn aXN0ZXIoc2VsZi5vbkZyYW1lVGFiLCB3eC5FVlRfTk9URUJPT0tfUEFHRV9DSEFOR0VELCBzZWxm LnRhYnMpCiAgICAKICAgIGRlZiB1bmJpbmRUYWJzKHNlbGYpOgogICAgICAgIHNlbGYudGFicy5V bmJpbmQoTm90ZWJvb2tDdHJsLkVWVF9OT1RFQk9PS0NUUkxfUEFHRV9DSEFOR0VEKQogICAgICAg ICNldmVudE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmLnRhYnMpCiAgICAgICAgCiAgICBk ZWYgb25GcmFtZVRhYihzZWxmLGV2ZW50KToKICAgICAgICBpbmRleCA9IGV2ZW50LkdldFNlbGVj dGlvbigpCiAgICAgICAgI3ByaW50IGluZGV4CiAgICAgICAgaWYgaW5kZXg+LTE6CiAgICAgICAg ICAgIHNlbGYuYXBwLmNoaWxkcmVuW2luZGV4XS5mcmFtZS5vbkZyYW1lQWN0aXZhdGUoKQogICAg ICAgIGV2ZW50LlNraXAoKQogICAgICAgIApjbGFzcyBTZGlQYXJlbnRGcmFtZShUYWJQbGF0Zm9y bSxQYXJlbnQsd3guRnJhbWUpOgogICAgIiIiVW5pZm9ybWVkIHBhcmVudCBNZGkvU2RpIGNsYXNz IGJhc2VkIG9uIFNkaS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLGFwcCwKICAgICAgICAgICAg aWQgICAgICA9IHd4LklEX0FOWSwgCiAgICAgICAgICAgIHBhZ2UgICAgPSAncGFyZW50RnJhbWUn LAogICAgICAgICAgICBwYXJlbnQgID0gTm9uZSwKICAgICAgICAgICAgc2l6ZSAgICA9IFNJWkUs CiAgICAgICAgICAgIHN0eWxlICAgPSBTVFlMRV9QQVJFTlRGUkFNRSwKICAgICAgICAgICAgcG9z ICAgICA9IFBPUywKICAgICAgICAgICAgKipvcHRpb25zKToKICAgICAgICB3eC5GcmFtZS5fX2lu aXRfXyhzZWxmLCAKICAgICAgICAgICAgaWQgICAgICA9IGlkLCAKICAgICAgICAgICAgbmFtZSAg ICA9IHBhZ2UsCiAgICAgICAgICAgIHBhcmVudCAgPSBwYXJlbnQsIAogICAgICAgICAgICBzaXpl ICAgID0gc2l6ZSwKICAgICAgICAgICAgc3R5bGUgICA9IHN0eWxlIHwgRlVMTF9SRVBBSU5UX09O X1JFU0laRSwKICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UsCiAgICAgICAgICAgIHBvcyAgICAg PSBwb3MpCiAgICAgICAgaWYgc3R5bGUgJiB3eC5NQVhJTUlaRToKICAgICAgICAgICAgdHJ5OiAj bm90IHdvcmtpbmcgb24gbWFuZHJha2U5CiAgICAgICAgICAgICAgICBzZWxmLk1heGltaXplKDEp CiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICBzZWxmLmlz U2RpUGFyZW50ICAgID0gVHJ1ZQogICAgICAgICNUaGlzIGFsd2F5cyBoYXMgdG8gYmUgbGFzdCEK ICAgICAgICBQYXJlbnQuX19pbml0X18oc2VsZixhcHA9YXBwLHBhZ2U9cGFnZSwqKm9wdGlvbnMp CgogICAgZGVmIF9fc3RhZ2VfXyhzZWxmLHBhZ2UsZXh0cmEsKipvcHRpb25zKToKICAgICAgICAi IiJDcmVhdGUgdGFicyB0byBzd2l0Y2ggYmV0d2VlbiBkb2N1bWVudHMgYXMgYW4gd3guTm90ZWJv b2siIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0 ZTogU2RpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xhc3NfXywpCiAgICAgICAgc2VsZi50YWJzICAg PSBOb3RlYm9va1BsdXMoYXBwPXNlbGYuYXBwLHBhcmVudD1zZWxmLCBpZD13eC5JRF9BTlksCiAg ICAgICAgICAgIHN0eWxlID0gU1RZTEVfTk9URUJPT0sgKQogICAgICAgIHNlbGYucGFuZWwgID0g c2VsZi5QYW5lbChwYXJlbnQ9c2VsZi50YWJzLCoqb3B0aW9ucykKICAgICAgICBzZWxmLnRhYnMu QWRkUGFnZShzZWxmLnBhbmVsLCBwYWdlKQogICAgICAgIHNlbGYuX19sYXlvdXRUYWJzX18oKQog ICAgICAgIAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRyYT0nJyxkcmF3PVRydWUs Y29sb3VyPU5vbmUpOgogICAgICAgIGlmIGRyYXc6CiAgICAgICAgICAgIHNlbGYuU2V0VGl0bGUo c2VsZi5hcHAudGl0bGUpCiAgICAgICAgCiMjIyNDaGlsZCBjbGFzc2VzCmNsYXNzIENoaWxkKEZy YW1ld29yayk6CiAgICAjLS0taW5pdGlhbGl6ZQogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50 RnJhbWUscGFnZT0nJyxleHRyYT0nJyxwYXJlbnQ9Tm9uZSwqKm9wdGlvbnMpOgogICAgICAgIGFw cCAgICAgICAgICAgICAgICAgPSBwYXJlbnRGcmFtZS5hcHAKICAgICAgICBzZWxmLnBhZ2VUaXRs ZSAgICAgID0gJycKICAgICAgICBzZWxmLl9wYWdlVGl0bGUgICAgID0gJz8nCiAgICAgICAgc2Vs Zi5wYWdlSWNvbnMgICAgICA9IFtdCiAgICAgICAgc2VsZi5leHRyYVRpdGxlICAgICA9ICcnCiAg ICAgICAgc2VsZi5fZXh0cmFUaXRsZSAgICA9ICcnCiAgICAgICAgRnJhbWV3b3JrLl9faW5pdF9f KHNlbGYsCiAgICAgICAgICAgIGFwcCAgICAgICAgICAgICA9IGFwcCwKICAgICAgICAgICAgUGFu ZWwgICAgICAgICAgID0gYXBwLkNoaWxkUGFuZWwsCiAgICAgICAgICAgIHBhcmVudEZyYW1lICAg ICA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAgICAgICAgICAgPSBwYWdlLAogICAg ICAgICAgICBleHRyYSAgICAgICAgICAgPSBleHRyYSwKICAgICAgICAgICAgKipvcHRpb25zKQog ICAgCiAgICBkZWYgX19maW5pc2hfXyhzZWxmKToKICAgICAgICBhcHAgICAgICAgICAgICAgPSBz ZWxmLmFwcAogICAgICAgIHBhbmVsICAgICAgICAgICA9IHNlbGYucGFuZWwKICAgICAgICBhcHAu Y2hpbGRBY3RpdmUgPSBwYW5lbAogICAgICAgIGFwcC5jaGlsZHJlbi5hcHBlbmQocGFuZWwpCiAg ICAgICAgc2VsZi5hZGRQYWdlVG9QYXJlbnQocGFuZWwsYXBwLm1kaSkKICAgICAgICAjZmluaXNo CiAgICAgICAgRnJhbWV3b3JrLl9fZmluaXNoX18oc2VsZikKICAgICAgICAKICAgIGRlZiBhZGRQ YWdlVG9QYXJlbnQoc2VsZixwYW5lbCxtZGkpOgogICAgICAgICIiIiJBZGQgcGFnZSB3aXRoIGNo aWxkcyB0aXRsZSB0byBwYXJlbnQKICAgICAgICBDYW4gYmUgb3ZlcndyaXR0ZW4uIiIiCiAgICAg ICAgcGFyZW50RnJhbWUgICAgID0gc2VsZi5wYXJlbnRGcmFtZQogICAgICAgIHRhYnMgICAgICAg ICAgICA9IHBhcmVudEZyYW1lLnRhYnMKICAgICAgICB0YWJzLkFkZFBhZ2UocGFnZT1EdW1teVBh Z2UodGFicyksIHRleHQ9c2VsZi5wYWdlLHNlbGVjdD0obWRpIG5vdCBpbiBbU0RJLE1ESV9UQUJT XSkpCgogICAgIy0tLWV2ZW50cwogICAgZGVmIG9uRnJhbWVBY3RpdmF0ZShzZWxmLCBldmVudD1O b25lKToKICAgICAgICAiIiJBY3RpdmF0ZSBldmVudC4iIiIjdG9kbzogdXBkYXRlIHRhYnMgYWJv dmUgaWYgbm90IHJpZ2h0CiAgICAgICAgaWYgKG5vdCBldmVudCkgb3IgZXZlbnQuR2V0QWN0aXZl KCk6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgICAgICdFdmVu dDogIENoaWxkOiAlcy5BY3RpdmF0ZSclc2VsZi5fX2NsYXNzX18KICAgICAgICAgICAgc2VsZi5h cHAuY2hpbGRBY3RpdmUgICAgPSBzZWxmLnBhbmVsCiAgICAgICAgRnJhbWV3b3JrLm9uRnJhbWVB Y3RpdmF0ZShzZWxmLGV2ZW50KQogICAgICAgIAogICAgZGVmIG9uRnJhbWVDbG9zZShzZWxmLCBl dmVudCA9IE5vbmUpOgogICAgICAgICIiIkNsb3NlIGV2ZW50LiIiIgogICAgICAgIGRlYnVnID0g c2VsZi5hcHAuREVCVUcKICAgICAgICBpZiBkZWJ1ZzogCiAgICAgICAgICAgIHByaW50ICdFdmVu dDw6IENoaWxkOiAlcy5DbG9zZSclc2VsZi5fX2NsYXNzX18KICAgICAgICBzZWxmLmRlYWQgPSBG cmFtZXdvcmsub25GcmFtZUNsb3NlKHNlbGYsZGVzdHJveT0wKQogICAgICAgIGlmIG5vdCBzZWxm LmRlYWQ6CiAgICAgICAgICAgIGlmIHNlbGYuYXBwLkRFQlVHOiAKICAgICAgICAgICAgICAgIHBy aW50ICdFdmVudD46IENoaWxkOiAlcy5DbG9zZSByZXR1cm5zIEZhbHNlJyVzZWxmLl9fY2xhc3Nf XwogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAjZGVyZWdpc3RlciBldmVudHMKICAg ICAgICBldmVudE1hbmFnZXIuRGVyZWdpc3RlcldpbmRvdyhzZWxmKQogICAgICAgIGlmIGV2ZW50 OiBldmVudC5Ta2lwKCkKICAgICAgICAjaW5kZXgKICAgICAgICBtZGkgICAgID0gc2VsZi5hcHAu bWRpCiAgICAgICAgaW5kZXggICA9IHNlbGYuZ2V0SW5kZXgoKQogICAgICAgIGlmIG1kaSBpbiBb U0RJLE1ESV9UQUJTXTogIGRlbHRhID0gMQogICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAg ICAgIGRlbHRhID0gMAogICAgICAgICNVcGRhdGUgY2hpbGRyZW4KICAgICAgICBjaGlsZHJlbiAg ICA9IHNlbGYuYXBwLmNoaWxkcmVuCiAgICAgICAgY2hpbGRyZW4ucmVtb3ZlKHNlbGYucGFuZWwp CiAgICAgICAgaWYgY2hpbGRyZW46CiAgICAgICAgICAgIGNoaWxkQWN0aXZlID0gc2VsZi5hcHAu Y2hpbGRBY3RpdmUgPSBjaGlsZHJlblswXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNoaWxk QWN0aXZlID0gc2VsZi5hcHAuY2hpbGRBY3RpdmUgPSBOb25lCiAgICAgICAgI3VwZGF0ZSByZXN0 CiAgICAgICAgcGFyZW50RnJhbWUgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgaWYgaGFzYXR0 cihwYXJlbnRGcmFtZSwndGFicycpOgogICAgICAgICAgICAjVXBkYXRlIGNoaWxkQm9vayB0YWJz IAogICAgICAgICAgICBjdXJyZW50ID0gaW5kZXgrZGVsdGEKICAgICAgICAgICAgIyAqIHBhcmVu dCBmcmFtZSAobWRpICYgc2RpKQogICAgICAgICAgICBwYXJlbnRGcmFtZS51bmJpbmRUYWJzKCkK ICAgICAgICAgICAgcGFyZW50RnJhbWUudGFicy5EZWxldGVQYWdlKGN1cnJlbnQpCiAgICAgICAg ICAgIGlmIChtZGkgaW4gW1NESSxNRElfU0FTSF9UQUJTLE1ESV9UQUJTXSBvciAobWRpPT1NRElf U1BMSVQgYW5kIGNoaWxkcmVuKSkgYW5kIGNoaWxkQWN0aXZlOgogICAgICAgICAgICAgICAgdHJ5 OgogICAgICAgICAgICAgICAgICAgIHBhcmVudEZyYW1lLnRhYnMuU2V0U2VsZWN0aW9uKDApCiAg ICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAg ICBwYXJlbnRGcmFtZS5iaW5kVGFicygpCiAgICAgICAgICAgICMgKiBjaGlsZHJlbiBmcmFtZXMg KHNkaSkKICAgICAgICAgICAgaWYgbWRpIGluIFtTREksTURJX1RBQlNdIGFuZCBjaGlsZEFjdGl2 ZTogI25vdCBmb3IgbWRpY2hpbGQKICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5EZXJlZ2lz dGVyV2luZG93KHNlbGYudGFicykKICAgICAgICAgICAgICAgIGMgICAgICAgPSAxCiAgICAgICAg ICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CiAgICAgICAgICAgICAgICAgICAgY2hpbGQu ZnJhbWUudW5iaW5kVGFicygpCiAgICAgICAgICAgICAgICAgICAgdGFicyAgID0gY2hpbGQuZnJh bWUudGFicwogICAgICAgICAgICAgICAgICAgIHRhYnMuRGVsZXRlUGFnZShjdXJyZW50KSNyZW1v dmUgY2xvc2VkIGl0ZW0gZnJvbSBvdGhlciBjaGlsZHJlbgogICAgICAgICAgICAgICAgICAgIGlm IGM+PWN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHRhYnMuU2V0U2VsZWN0aW9uKGMp I2FkYXB0IHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgIGNoaWxkLmZyYW1lLmJpbmRUYWJz KCkKICAgICAgICAgICAgICAgICAgICBjICs9IDEKICAgICAgICBpZiBjaGlsZEFjdGl2ZToKICAg ICAgICAgICAgY2hpbGRBY3RpdmUuZnJhbWUuQWN0aXZhdGUoKQogICAgICAgIGlmIG1kaSE9TURJ X1NQTElUOgogICAgICAgICAgICBzZWxmLkRlc3Ryb3koKQogICAgICAgIGlmIGRlYnVnOiAKICAg ICAgICAgICAgcHJpbnQgJ0V2ZW50PjogQ2hpbGQ6ICVzLkNsb3NlIHJldHVybnMgVHJ1ZSclc2Vs Zi5fX2NsYXNzX18KICAgICAgICByZXR1cm4gVHJ1ZSAgICAKICAgICAgICAgICAgCiAgICBkZWYg c2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJhPScnLG5ldz1UcnVlLGRyYXc9VHJ1ZSxjb2xvdXI9 Tm9uZSk6CiAgICAgICAgaWYgbmV3OgogICAgICAgICAgICAjcGFyYW1ldGVycwogICAgICAgICAg ICBpZiBwYWdlOiAgICBzZWxmLnBhZ2VUaXRsZSAgPSBwYWdlCiAgICAgICAgICAgIGlmIGV4dHJh OiAgIHNlbGYuZXh0cmFUaXRsZSA9IGV4dHJhCiAgICAgICAgICAgICNnbwogICAgICAgICAgICBp ZiBzZWxmLnBhZ2VUaXRsZToKICAgICAgICAgICAgICAgIG0gICAgICAgICAgICAgICA9IFsnJywn IConXVtzZWxmLnBhbmVsLmNoYW5nZWQgYW5kIG5vdCBzZWxmLnBhZ2VJY29uc10KICAgICAgICAg ICAgICAgIHNlbGYuX3BhZ2VUaXRsZSA9ICAnJXMlcyclKHNlbGYucGFnZVRpdGxlLG0pCiAgICAg ICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBzZWxmLl9wYWdlVGl0bGUgPSAgJycKICAgICAg ICBpZiBkcmF3OgogICAgICAgICAgICBpZiBzZWxmLmFwcC5tZGlOYW1lID09IFNESSBvciBXSU46 CiAgICAgICAgICAgICAgICBzZWxmLlNldFRpdGxlKHNlbGYuZXh0cmFUaXRsZSkKICAgICAgICAg ICAgZWxpZiBoYXNhdHRyKHNlbGYsJ1NldFRpdGxlJyk6CiAgICAgICAgICAgICAgICBzZWxmLlNl dFRpdGxlKHNlbGYucGFnZVRpdGxlKQogICAgICAgICAgICBzZWxmLnNldEljb24oKQogICAgICAg ICAgICAKICAgIGRlZiBzZXRJY29uKHNlbGYpOgogICAgICAgIHBhc3MKICAgICAgICAKY2xhc3Mg TWRpU2FzaFRhYnNDaGlsZEZyYW1lKENoaWxkLHd4Lk1ESUNoaWxkRnJhbWUpOgogICAgZGVmIF9f aW5pdF9fKHNlbGYscGFyZW50RnJhbWUsCiAgICAgICAgaWQgICAgICAgICAgPSB3eC5JRF9BTlks CiAgICAgICAgcGFnZSAgICAgICAgPSBVTk5BTUVELAogICAgICAgIGV4dHJhICAgICAgID0gJycs CiAgICAgICAgc3R5bGUgICAgICAgPSBTVFlMRV9DSElMREZSQU1FLAogICAgICAgIG1heGltaXpl ICAgID0gTm9uZSwKICAgICAgICAqKm9wdGlvbnMpOgogICAgICAgIHNlbGYubm9NZW51ID0gVHJ1 ZQogICAgICAgIGFwcCAgICAgICAgICAgICA9IHBhcmVudEZyYW1lLmFwcAogICAgICAgICNkZWJ1 ZyBtZXNzYWdlCiAgICAgICAgaWYgYXBwLkRFQlVHOgogICAgICAgICAgICBwcmludCAnQ3JlYXRl OiBNZGk6ICVzJyVzZWxmLl9fY2xhc3NfXwogICAgICAgIGlmIG1heGltaXplID09IE5vbmU6CiAg ICAgICAgICAgIG1heGltaXplID0gcGFyZW50RnJhbWUubWF4aW1pemUoKQogICAgICAgIGlmIG1h eGltaXplOgogICAgICAgICAgICBzdHlsZSAgIHw9IHd4Lk1BWElNSVpFCiAgICAgICAgd3guTURJ Q2hpbGRGcmFtZS5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICBpZCAgICAgID0gaWQsIAogICAg ICAgICAgICBuYW1lICAgID0gcGFnZSwKICAgICAgICAgICAgcGFyZW50ICA9IHBhcmVudEZyYW1l LAogICAgICAgICAgICBzdHlsZSAgID0gc3R5bGUgfCBGVUxMX1JFUEFJTlRfT05fUkVTSVpFLCAK ICAgICAgICAgICAgdGl0bGUgICA9IHBhZ2UpCiAgICAgICAgc2VsZi5NYXhpbWl6ZSgpI2lmIG1h eGltaXplIGFuZCBQTEFURk9STSAhPSAnd2luMzInOiNzbTpzZWVtcyBiZXR0ZXIgdG8gbGVhdmUg dGhpcyBhd2F5LgogICAgICAgIHNlbGYuUmFpc2UgID0gc2VsZi5BY3RpdmF0ZSAjcmFpc2UgZG9l c24ndCB3b3JrIGhlcmUKICAgICAgICAjVGhpcyBhbHdheXMgaGFzIHRvIGJlIGxhc3QhCiAgICAg ICAgQ2hpbGQuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgcGFyZW50RnJhbWUgPSBwYXJlbnRG cmFtZSwKICAgICAgICAgICAgcGFnZSAgICAgICAgPSBwYWdlLAogICAgICAgICAgICBleHRyYSAg ICAgICA9IGV4dHJhLAogICAgICAgICAgICAqKm9wdGlvbnMpCiAgICAgICAgCiAgICBkZWYgX19m aW5pc2hfXyhzZWxmKToKICAgICAgICBzZWxmLnRhYnMgICAgICAgPSBzZWxmLnBhcmVudEZyYW1l LnRhYnMKICAgICAgICBDaGlsZC5fX2ZpbmlzaF9fKHNlbGYpCiAgICAgICAgICAgICAgICAKICAg IGRlZiBzZXRUaXRsZShzZWxmLHBhZ2U9JycsZXh0cmE9JycsbmV3PVRydWUsZHJhdz1UcnVlLGNv bG91cj1Ob25lKToKICAgICAgICBDaGlsZC5zZXRUaXRsZShzZWxmLHBhZ2UsZXh0cmEsbmV3LGRy YXcpCiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5zZXRUaXRsZShzZWxmLl9wYWdlVGl0bGUsZHJh dz1kcmF3KQogICAgICAgIGlmIG5ldyBhbmQgZHJhdzoKICAgICAgICAgICAgaW5kZXggPSBzZWxm LmdldEluZGV4KCkKICAgICAgICAgICAgc2VsZi50YWJzLlNldFBhZ2VUZXh0KGluZGV4LHNlbGYu X3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91ciBpcyBOb25lKSBhbmQgaGFzYXR0 cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAgICAgICAgICAgIHNlbGYudGFicy5T ZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAKICAgIGRlZiBvbkZyYW1lQWN0aXZh dGUoc2VsZiwgZXZlbnQpOgogICAgICAgIGlmIGV2ZW50LkdldEFjdGl2ZSgpOgogICAgICAgICAg ICBzZWxmLnNldFRpdGxlKG5ldz1GYWxzZSkKICAgICAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS50 YWJzLlNldFNlbGVjdGlvbihzZWxmLmdldEluZGV4KCkpCiAgICAgICAgQ2hpbGQub25GcmFtZUFj dGl2YXRlKHNlbGYsZXZlbnQpCiAgICAgICAgCmNsYXNzIE1kaUNoaWxkRnJhbWUoTWRpU2FzaFRh YnNDaGlsZEZyYW1lLCBDaGlsZCk6CiAgICAiIiJNZGkgQ2hpbGQgZnJhbWUgd2l0aG91dCB0YWJz LiIiIgogICAgZGVmIGFkZFBhZ2VUb1BhcmVudChzZWxmLHBhbmVsLG1kaSk6CiAgICAgICAgcGFz cwoKICAgIGRlZiBzZXRUaXRsZShzZWxmLHBhZ2U9JycsZXh0cmE9JycsbmV3PVRydWUsZHJhdz1U cnVlLGNvbG91cj1Ob25lKToKICAgICAgICBDaGlsZC5zZXRUaXRsZShzZWxmLHBhZ2UsZXh0cmEs bmV3LGRyYXcpCiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5zZXRUaXRsZShzZWxmLl9wYWdlVGl0 bGUsZHJhdz1kcmF3KQogICAgICAgIAogICAgZGVmIF9fZmluaXNoX18oc2VsZik6CiAgICAgICAg Q2hpbGQuX19maW5pc2hfXyhzZWxmKQogICAgICAgIAogICAgZGVmIG9uRnJhbWVBY3RpdmF0ZShz ZWxmLCBldmVudCk6CiAgICAgICAgaWYgZXZlbnQuR2V0QWN0aXZlKCk6CiAgICAgICAgICAgIHNl bGYuc2V0VGl0bGUobmV3PUZhbHNlKQogICAgICAgIENoaWxkLm9uRnJhbWVBY3RpdmF0ZShzZWxm LGV2ZW50KQogICAgICAgIApjbGFzcyBNZGlUYWJzQ2hpbGRGcmFtZShUYWJQbGF0Zm9ybSxNZGlT YXNoVGFic0NoaWxkRnJhbWUsIENoaWxkKToKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4 dHJhLCoqb3B0aW9ucyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4g ZG9jdW1lbnRzIGFzIGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFw cC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAgICVzLnRhYnMnJShzZWxm Ll9fY2xhc3NfXywpCiAgICAgICAgdGFicyA9IHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFw cD1zZWxmLmFwcCxwYXJlbnQ9c2VsZiwgaWQ9d3guSURfQU5ZLAogICAgICAgICAgICBzdHlsZSA9 IFNUWUxFX05PVEVCT09LICkKICAgICAgICBwYW5lbCA9IHNlbGYucGFuZWwgPSBzZWxmLlBhbmVs KHBhcmVudD10YWJzLCoqb3B0aW9ucykKICAgICAgICAjQWRkIHBhcmVudCB0YWIgdG8gaXRzZWxm CiAgICAgICAgdGFicy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKHRhYnMpLHRleHQ9c2VsZi5hcHAu dGl0bGUpCiAgICAgICAgI0FkZCBjaGlsZCB0YWJzIHRvIGl0c2VsZiBhbmQgdmljZSB2ZXJzYQog ICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmFwcC5jaGlsZHJlbjoKICAgICAgICAgICAgY2hpbGRU YWJzICAgPSBjaGlsZC5mcmFtZS50YWJzCiAgICAgICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPUR1 bW15UGFnZSh0YWJzKSx0ZXh0PWNoaWxkLmZyYW1lLl9wYWdlVGl0bGUpCiAgICAgICAgICAgIGNo aWxkVGFicy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKGNoaWxkVGFicyksdGV4dD1wYWdlKQogICAg ICAgICNBZGQgaXRzZWxmIHRvIGl0c2VsZgogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXBhbmVs LHRleHQ9cGFnZSxzZWxlY3Q9VHJ1ZSkKICAgICAgICBzZWxmLl9fbGF5b3V0VGFic19fKCkgICAg ICAgIAogICAgICAgIAogICAgZGVmIF9fZmluaXNoX18oc2VsZik6CiAgICAgICAgQ2hpbGQuX19m aW5pc2hfXyhzZWxmKQogICAgICAgIAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRy YT0nJyxuZXc9VHJ1ZSxkcmF3PVRydWUsY29sb3VyPU5vbmUpOgogICAgICAgIENoaWxkLnNldFRp dGxlKHNlbGYscGFnZSxleHRyYSxuZXcpCiAgICAgICAgaWYgbmV3IGFuZCBkcmF3OgogICAgICAg ICAgICBpbmRleCAgID0gc2VsZi5nZXRJbmRleCgpKzEKICAgICAgICAgICAgc2VsZi50YWJzLlNl dFBhZ2VUZXh0KGluZGV4LHNlbGYuX3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91 ciBpcyBOb25lKSBhbmQgaGFzYXR0cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAg ICAgICAgICAgIHNlbGYudGFicy5TZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAK ICAgIGRlZiBvbkZyYW1lQWN0aXZhdGUoc2VsZiwgZXZlbnQpOgogICAgICAgIGlmIGV2ZW50Lkdl dEFjdGl2ZSgpOgogICAgICAgICAgICBzZWxmLnNldFRpdGxlKG5ldz1GYWxzZSkKICAgICAgICAg ICAgc2VsZi5wYXJlbnRGcmFtZS50YWJzLlNldFNlbGVjdGlvbihzZWxmLmdldEluZGV4KCkrMSkK ICAgICAgICBDaGlsZC5vbkZyYW1lQWN0aXZhdGUoc2VsZixldmVudCkKICAgICAgICAKY2xhc3Mg TWRpU3BsaXRDaGlsZEZyYW1lKENoaWxkLHd4LlBhbmVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxm LHBhcmVudEZyYW1lLAogICAgICAgIGlkICAgICAgICAgID0gd3guSURfQU5ZLAogICAgICAgIHN0 eWxlICAgICAgID0gU1RZTEVfQ0hJTERGUkFNRSwKICAgICAgICBwYWdlICAgICAgICA9ICcnLAog ICAgICAgIGV4dHJhICAgICAgID0gJycsCiAgICAgICAgbWF4aW1pemUgICAgPSBOb25lLAogICAg ICAgICoqb3B0aW9ucyk6CiAgICAgICAgc2VsZi5ub01lbnUgPSBUcnVlCiAgICAgICAgYXBwICAg ICAgICAgPSBwYXJlbnRGcmFtZS5hcHAKICAgICAgICAjZGVidWcgbWVzc2FnZQogICAgICAgIGlm IGFwcC5ERUJVRzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogTWRpU3BsaXQ6ICVzJyVzZWxm Ll9fY2xhc3NfXyxwYWdlLGV4dHJhCiAgICAgICAgd3guUGFuZWwuX19pbml0X18oc2VsZiwKICAg ICAgICAgICAgaWQgICAgICA9IGlkLCAKICAgICAgICAgICAgbmFtZSAgICA9IHBhZ2UsCiAgICAg ICAgICAgIHBhcmVudCAgPSBwYXJlbnRGcmFtZS50YWJzLCAKICAgICAgICAgICAgc2l6ZSAgICA9 IHd4LlNpemUoNjAwLDQwMCksCiAgICAgICAgICAgIHN0eWxlICAgPSBzdHlsZSB8IEZVTExfUkVQ QUlOVF9PTl9SRVNJWkUsKSAKICAgICAgICAgICAgI3RpdGxlICAgPSBwYWdlKQogICAgICAgICNU aGlzIGFsd2F5cyBoYXMgdG8gYmUgbGFzdCEKICAgICAgICBDaGlsZC5fX2luaXRfXyhzZWxmLAog ICAgICAgICAgICBwYXJlbnRGcmFtZSA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAg ICAgICA9IHBhZ2UsCiAgICAgICAgICAgIGV4dHJhICAgICAgID0gZXh0cmEsCiAgICAgICAgICAg ICoqb3B0aW9ucykKICAgICAgICBldmVudE1hbmFnZXIuUmVnaXN0ZXIoc2VsZi5vbkZyYW1lQWN0 aXZhdGUsIHd4LkVWVF9TRVRfRk9DVVMsICAgIHNlbGYpCiAgICAgICAgCiAgICBkZWYgX19zdGFn ZV9fKHNlbGYscGFnZSxleHRyYSwqKm9wdGlvbnMpOgogICAgICAgICIiIkNyZWF0ZSB0YWJzIHRv IHN3aXRjaCBiZXR3ZWVuIGRvY3VtZW50cyBhcyBhbiB3eC5TYXNoTGF5b3V0V2luZG93IiIiCiAg ICAgICAgaWYgc2VsZi5hcHAuREVCVUc6CiAgICAgICAgICAgIHByaW50ICdDcmVhdGU6IFNkaTog ICAlcy50YWJzJyUoc2VsZi5fX2NsYXNzX18sKQogICAgICAgIHNlbGYucGFuZWwgPSBzZWxmLlBh bmVsKHBhcmVudD1zZWxmLG5hbWU9cGFnZSwqKm9wdGlvbnMpCiAgICAgICAgc2l6ZXIgPSB3eC5C b3hTaXplcih3eC5WRVJUSUNBTCkKICAgICAgICBzaXplci5BZGQoc2VsZi5wYW5lbCwgMSwgd3gu RVhQQU5ELCAwKQogICAgICAgIHNlbGYuU2V0QXV0b0xheW91dChUcnVlKQogICAgICAgIHNlbGYu U2V0U2l6ZXIoc2l6ZXIpCiAgICAgICAgc2VsZi5MYXlvdXQoKQogICAgICAgIAogICAgZGVmIGFk ZFBhZ2VUb1BhcmVudChzZWxmLHBhbmVsLG1kaSk6CiAgICAgICAgIiIiIkFkZCBwYWdlIHdpdGgg Y2hpbGRzIHRpdGxlIHRvIHBhcmVudAogICAgICAgIENhbiBiZSBvdmVyd3JpdHRlbi4iIiIKICAg ICAgICBwYXJlbnRGcmFtZSAgICAgPSBzZWxmLnBhcmVudEZyYW1lCiAgICAgICAgdGFicyAgICAg ICAgICAgID0gc2VsZi50YWJzID0gcGFyZW50RnJhbWUudGFicwogICAgICAgIHBhcmVudEZyYW1l LnVuYmluZFRhYnMoKQogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXNlbGYsIHRleHQ9c2VsZi5w YWdlLHNlbGVjdD0obWRpIG5vdCBpbiBbU0RJLE1ESV9UQUJTXSkpCiAgICAgICAgcGFyZW50RnJh bWUuYmluZFRhYnMoKSAgICAgICAKCiAgICBkZWYgc2V0VGl0bGUoc2VsZixwYWdlPScnLGV4dHJh PScnLG5ldz1UcnVlLGRyYXc9VHJ1ZSxjb2xvdXI9Tm9uZSk6CiAgICAgICAgQ2hpbGQuc2V0VGl0 bGUoc2VsZixwYWdlLGV4dHJhLG5ldykKICAgICAgICBpZiBuZXcgYW5kIGRyYXc6CiAgICAgICAg ICAgIGluZGV4ICAgPSBzZWxmLmdldEluZGV4KCkKICAgICAgICAgICAgc2VsZi50YWJzLlNldFBh Z2VUZXh0KGluZGV4LHNlbGYuX3BhZ2VUaXRsZSkKICAgICAgICAgICAgaWYgbm90KGNvbG91ciBp cyBOb25lKSBhbmQgaGFzYXR0cihzZWxmLnRhYnMsJ1NldFBhZ2VDb2xvdXInKToKICAgICAgICAg ICAgICAgIHNlbGYudGFicy5TZXRQYWdlQ29sb3VyKGluZGV4LGNvbG91cikKICAgICAgICAgICAg CiAgICBkZWYgU2V0SWNvbihzZWxmLCphcmdzLCoqa2V5dyk6CiAgICAgICAgcGFzcwogICAgCiAg ICBkZWYgSXNNYXhpbWl6ZWQoc2VsZik6CiAgICAgICAgcmV0dXJuIFRydWUKCiAgICBkZWYgQWN0 aXZhdGUoc2VsZik6CiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS50YWJzLlNldFNlbGVjdGlvbihz ZWxmLmdldEluZGV4KCkpCgojIyAgICBkZWYgb25GcmFtZUFjdGl2YXRlKHNlbGYsIGV2ZW50PU5v bmUpOgojIyAgICAgICAgaWYgKG5vdCBldmVudCkgb3IgZXZlbnQuR2V0QWN0aXZlKCk6CiMjICAg ICAgICAgICAgc2VsZi5zZXRUaXRsZShuZXc9RmFsc2UpCiMjICAgICAgICBDaGlsZC5vbkZyYW1l QWN0aXZhdGUoc2VsZixldmVudCkKICAgICAgICAKY2xhc3MgU2RpQ2hpbGRGcmFtZShUYWJQbGF0 Zm9ybSxDaGlsZCx3eC5GcmFtZSk6CiAgICBkZWYgX19pbml0X18oc2VsZixwYXJlbnRGcmFtZSwK ICAgICAgICBpZCAgICAgICAgICA9IHd4LklEX0FOWSwKICAgICAgICBzdHlsZSAgICAgICA9IFNU WUxFX0NISUxERlJBTUUsCiAgICAgICAgcGFnZSAgICAgICAgPSAnJywKICAgICAgICBleHRyYSAg ICAgICA9ICcnLAogICAgICAgIG1heGltaXplICAgID0gTm9uZSwKICAgICAgICAqKm9wdGlvbnMp OgogICAgICAgIHNlbGYubm9NZW51ID0gRmFsc2UKICAgICAgICBhcHAgICAgICAgICAgICAgPSBw YXJlbnRGcmFtZS5hcHAKICAgICAgICAjZGVidWcgbWVzc2FnZQogICAgICAgIGlmIGFwcC5ERUJV RzoKICAgICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAlcyclc2VsZi5fX2NsYXNzX18scGFn ZSxleHRyYQogICAgICAgICNtYXhpbWl6ZSZpbml0CiAgICAgICAgaWYgbWF4aW1pemUgPT0gTm9u ZToKICAgICAgICAgICAgbWF4aW1pemUgPSBwYXJlbnRGcmFtZS5tYXhpbWl6ZSgpCiAgICAgICAg aWYgbWF4aW1pemU6CiAgICAgICAgICAgIHN0eWxlICAgfD0gd3guTUFYSU1JWkUKICAgICAgICB3 eC5GcmFtZS5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICBpZCAgICAgID0gaWQsIAogICAgICAg ICAgICBuYW1lICAgID0gcGFnZSwKICAgICAgICAgICAgcGFyZW50ICA9IHBhcmVudEZyYW1lLCAK ICAgICAgICAgICAgc2l6ZSAgICA9IHd4LlNpemUoNjAwLDQwMCksCiAgICAgICAgICAgIHN0eWxl ICAgPSBzdHlsZSB8IEZVTExfUkVQQUlOVF9PTl9SRVNJWkUsIAogICAgICAgICAgICB0aXRsZSAg ID0gcGFnZSkKICAgICAgICBpZiBtYXhpbWl6ZToKICAgICAgICAgICAgaWYgUExBVEZPUk0gIT0g J3dpbjMyJzoKICAgICAgICAgICAgICAgIHNlbGYuTWF4aW1pemUoKQogICAgICAgICAgICBlbHNl OgogICAgICAgICAgICAgICAgc2VsZi5TZXRTaXplKGFwcC5zaXplKQogICAgICAgICNUaGlzIGFs d2F5cyBoYXMgdG8gYmUgbGFzdCEKICAgICAgICBDaGlsZC5fX2luaXRfXyhzZWxmLAogICAgICAg ICAgICBwYXJlbnRGcmFtZSA9IHBhcmVudEZyYW1lLAogICAgICAgICAgICBwYWdlICAgICAgICA9 IHBhZ2UsCiAgICAgICAgICAgIGV4dHJhICAgICAgID0gZXh0cmEsCiAgICAgICAgICAgICoqb3B0 aW9ucykKICAgICAgICAKICAgIGRlZiBfX3N0YWdlX18oc2VsZixwYWdlLGV4dHJhLCoqb3B0aW9u cyk6CiAgICAgICAgIiIiQ3JlYXRlIHRhYnMgdG8gc3dpdGNoIGJldHdlZW4gZG9jdW1lbnRzIGFz IGFuIHd4LlNhc2hMYXlvdXRXaW5kb3ciIiIKICAgICAgICBpZiBzZWxmLmFwcC5ERUJVRzoKICAg ICAgICAgICAgcHJpbnQgJ0NyZWF0ZTogU2RpOiAgICVzLnRhYnMnJShzZWxmLl9fY2xhc3NfXywp CiAgICAgICAgdGFicyA9IHNlbGYudGFicyAgID0gTm90ZWJvb2tQbHVzKGFwcD1zZWxmLmFwcCxw YXJlbnQ9c2VsZiwgaWQ9d3guSURfQU5ZLAogICAgICAgICAgICBzdHlsZSA9IFNUWUxFX05PVEVC T09LICkKICAgICAgICBwYW5lbCA9IHNlbGYucGFuZWwgPSBzZWxmLlBhbmVsKHBhcmVudD10YWJz LCoqb3B0aW9ucykKICAgICAgICAjQWRkIHBhcmVudCB0YWIgdG8gaXRzZWxmCiAgICAgICAgdGFi cy5BZGRQYWdlKHBhZ2U9RHVtbXlQYWdlKHRhYnMpLHRleHQ9c2VsZi5hcHAudGl0bGUpCiAgICAg ICAgI0FkZCBjaGlsZCB0YWJzIHRvIGl0c2VsZiBhbmQgdmljZSB2ZXJzYQogICAgICAgIGZvciBj aGlsZCBpbiBzZWxmLmFwcC5jaGlsZHJlbjoKICAgICAgICAgICAgY2hpbGRUYWJzICAgPSBjaGls ZC5mcmFtZS50YWJzCiAgICAgICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPUR1bW15UGFnZSh0YWJz KSx0ZXh0PWNoaWxkLmZyYW1lLl9wYWdlVGl0bGUpCiAgICAgICAgICAgIGNoaWxkVGFicy5BZGRQ YWdlKHBhZ2U9RHVtbXlQYWdlKGNoaWxkVGFicyksdGV4dD1wYWdlKQogICAgICAgICNBZGQgaXRz ZWxmIHRvIGl0c2VsZgogICAgICAgIHRhYnMuQWRkUGFnZShwYWdlPXBhbmVsLHRleHQ9cGFnZSxz ZWxlY3Q9VHJ1ZSkKICAgICAgICBzZWxmLl9fbGF5b3V0VGFic19fKCkgICAgICAgIAogICAgICAg IAogICAgZGVmIHNldFRpdGxlKHNlbGYscGFnZT0nJyxleHRyYT0nJyxuZXc9VHJ1ZSxkcmF3PVRy dWUsY29sb3VyPU5vbmUpOgogICAgICAgIENoaWxkLnNldFRpdGxlKHNlbGYscGFnZSxleHRyYSxu ZXcpCiAgICAgICAgaWYgbmV3IGFuZCBkcmF3OgogICAgICAgICAgICBzZWxmLnRhYnMuU2V0UGFn ZVRleHQoc2VsZi5nZXRJbmRleCgpKzEsc2VsZi5fcGFnZVRpdGxlKQogICAgICAgIAojIyMjQXBw bGljYXRpb24KCmNsYXNzIEFwcChzaW5nbGVBcHAuU2luZ2xlSW5zdGFuY2VBcHApOgogICAgZGVm IF9faW5pdF9fKHNlbGYsIFBhcmVudFBhbmVsLCBDaGlsZFBhbmVsLCBNZW51QmFyLCBUb29sQmFy LCBTdGF0dXNCYXIsCiAgICAgICAgICAgIFBhbGV0dGU9Tm9uZSwgbWRpPURFRkFVTFQsIGRlYnVn PTAsIHRpdGxlPSduYW1lJywKICAgICAgICAgICAgcGFuZWxGcmFtZVRpdGxlPSdwYW5lbCcsc2l6 ZT13eC5TaXplKDgwMCw0MDApLAogICAgICAgICAgICBpbWFnZVBhdGggPSBOb25lLCBwb3M9d3gu UG9pbnQod3guSURfQU5ZLHd4LklEX0FOWSksCiAgICAgICAgICAgIHNpbmdsZUluc3RhbmNlID0g RmFsc2UsCiAgICAgICAgICAgIHN0eWxlPVNUWUxFX1BBUkVOVEZSQU1FLCoqYXR0cmlidXRlcyk6 CiAgICAgICAgI3Bhc3NpbmcgYXJndW1lbnRzCiAgICAgICAgZ2xvYmFsIENISUxEUEFORUwKICAg ICAgICBzZWxmLlBhcmVudFBhbmVsICAgID0gUGFyZW50UGFuZWwKICAgICAgICBzZWxmLkNoaWxk UGFuZWwgICAgID0gQ0hJTERQQU5FTCA9IENoaWxkUGFuZWwKICAgICAgICBzZWxmLk1lbnVCYXIg ICAgICAgID0gTWVudUJhcgogICAgICAgIHNlbGYuVG9vbEJhciAgICAgICAgPSBUb29sQmFyCiAg ICAgICAgc2VsZi5TdGF0dXNCYXIgICAgICA9IFN0YXR1c0JhcgogICAgICAgIHNlbGYuUGFsZXR0 ZSAgICAgICAgPSBQYWxldHRlCiAgICAgICAgc2VsZi5TZXRNZGkobWRpKQogICAgICAgIHNlbGYu REVCVUcgICAgICAgICAgPSBkZWJ1ZwogICAgICAgIHNlbGYudGl0bGUgICAgICAgICAgPSB0aXRs ZQogICAgICAgIHNlbGYucGFuZWxGcmFtZVRpdGxlPSBwYW5lbEZyYW1lVGl0bGUKICAgICAgICBz ZWxmLnNpemUgICAgICAgICAgID0gc2l6ZQogICAgICAgIHNlbGYuaW1hZ2VQYXRoICAgICAgPSBp bWFnZVBhdGgKICAgICAgICBzZWxmLnBvcyAgICAgICAgICAgID0gcG9zCiAgICAgICAgc2VsZi5z aW5nbGVJbnN0YW5jZSA9IHNpbmdsZUluc3RhbmNlCiAgICAgICAgc2VsZi5hY3RpdmUgICAgICAg ICA9IFRydWUKICAgICAgICBzZWxmLnN0eWxlICAgICAgICAgID0gc3R5bGUKICAgICAgICAjaW5p dGlhbGl6YXRpb24KICAgICAgICBzZWxmLmNoaWxkcmVuICAgICAgID0gW10KICAgICAgICBzZWxm LmNoaWxkQWN0aXZlICAgID0gTm9uZQogICAgICAgIGlmIHNlbGYuaW1hZ2VQYXRoOgogICAgICAg ICAgICBzZWxmLmJpdG1hcCAgICAgPSB3eC5CaXRtYXAgPSBCaXRtYXAoaW1hZ2VQYXRoLHNlbGYp CiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2VsZi5iaXRtYXAgICAgID0gd3guQml0bWFwCiAg ICAgICAgI29wdGlvbnMKICAgICAgICBzZWxmLmF0dHJpYnV0ZXMgICAgID0gYXR0cmlidXRlcwog ICAgICAgIGZvciBrZXkgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxm LGtleSk6CiAgICAgICAgICAgICAgICBwcmludCAiV2FybmluZzogQXBwbGljYXRpb24gY2FuJ3Qg YWNjZXB0IGF0dHJpYnV0ZSAnJXMnLiIla2V5CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg ICAgICBzZXRhdHRyKHNlbGYsa2V5LGF0dHJpYnV0ZXNba2V5XSkKICAgICAgICAjc3RhcnQKICAg ICAgICBpZiBzaW5nbGVJbnN0YW5jZToKICAgICAgICAgICAgcHJpbnQgIkxhdW5jaGluZyBzaW5n bGUgaW5zdGFuY2UgYXBwbGljYXRpb24gKHdpdGggeG1sLXJwYyBzZXJ2ZXIpIC4uLiIKICAgICAg ICAgICAgc2luZ2xlQXBwLlNpbmdsZUluc3RhbmNlQXBwLl9faW5pdF9fKHNlbGYscmVkaXJlY3Q9 bm90IGRlYnVnLG5hbWU9dGl0bGUpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgIkxh dW5jaGluZyBhcHBsaWNhdGlvbi4uLiIKICAgICAgICAgICAgd3guQXBwLl9faW5pdF9fKHNlbGYs cmVkaXJlY3Q9bm90IGRlYnVnKQoKICAgICAgICAKICAgIGRlZiBPbkFyZ3Moc2VsZiwgZXZ0KToK ICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGFyZW50UGFuZWwsJ29uQXJncycpOgogICAgICAgICAg ICBzZWxmLnBhcmVudFBhbmVsLm9uQXJncyhldnQuZGF0YSkKICAgICAgICBzZWxmLkdldFRvcFdp bmRvdygpLlJhaXNlKCkKICAgICAgICBzZWxmLkdldFRvcFdpbmRvdygpLkljb25pemUoRmFsc2Up CgogICAgZGVmIE9uSW5pdChzZWxmKToKICAgICAgICBpZiBzZWxmLnNpbmdsZUluc3RhbmNlOgog ICAgICAgICAgICBpZiBzZWxmLmFjdGl2ZToKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQog ICAgICAgICAgICBzZWxmLkJpbmQoc2luZ2xlQXBwLkVWVF9QT1NUX0FSR1MsIHNlbGYuT25Bcmdz KQogICAgICAgIHd4LkluaXRBbGxJbWFnZUhhbmRsZXJzKCkKICAgICAgICBzZWxmLnBhcmVudEZy YW1lID0gc2VsZi5QYXJlbnRGcmFtZShzZWxmLAogICAgICAgICAgICBzaXplICAgID0gc2VsZi5z aXplLAogICAgICAgICAgICBwYWdlICAgID0gc2VsZi50aXRsZSwKICAgICAgICAgICAgcG9zICAg ICA9IHNlbGYucG9zLAogICAgICAgICAgICBzdHlsZSAgID0gc2VsZi5zdHlsZSwKICAgICAgICAg ICAgKipzZWxmLmF0dHJpYnV0ZXMpCiAgICAgICAgc2VsZi5wYXJlbnRQYW5lbCA9IHNlbGYucGFy ZW50RnJhbWUucGFuZWwKICAgICAgICBzZWxmLnBhcmVudEZyYW1lLlNob3coVHJ1ZSkKICAgICAg ICBzZWxmLlNldFRvcFdpbmRvdyhzZWxmLnBhcmVudEZyYW1lKQogICAgICAgIHJldHVybiBUcnVl CiAgICAgICAgCiAgICBkZWYgU2V0TWRpKHNlbGYsbWRpTmFtZT1ERUZBVUxUKToKICAgICAgICAi IiJEZWZpbmVzIHBhcmVudCBhbmQgY2hpbGRyZW4gZnJhbWUgY2xhc3Nlcy4iIiIKICAgICAgICBz ZWxmLm1kaU5hbWUgICAgPSBtZGlOYW1lCiAgICAgICAgaWYgbm90IERJLmhhc19rZXkobWRpTmFt ZSk6CiAgICAgICAgICAgIG1kaU5hbWUgICAgID0gREVGQVVMVAogICAgICAgIGlmIG1kaU5hbWUg PT0gREVGQVVMVDoKICAgICAgICAgICAgaWYgICBXSU46CiAgICAgICAgICAgICAgICBtZGlOYW1l ID0gTURJX1NBU0hfVEFCU19XSU4KICAgICAgICAgICAgZWxpZiBEQVJXSU46I21hYyBvc3gKICAg ICAgICAgICAgICAgIG1kaU5hbWUgPSBNRElfU1BMSVRfQUxMIAogICAgICAgICAgICBlbHNlOgog ICAgICAgICAgICAgICAgbWRpTmFtZSA9IE1ESV9TUExJVF9BTEwjTURJX1NBU0hfVEFCU19MSU5V WAoKICAgICAgICBzZWxmLm1kaSAgICA9IERJW21kaU5hbWVdCiAgICAgICAgaWYgICAgICBzZWxm Lm1kaSA9PSBTREk6CiAgICAgICAgICAgIHNlbGYuUGFyZW50RnJhbWUgICAgICAgID0gU2RpUGFy ZW50RnJhbWUKICAgICAgICAgICAgc2VsZi5DaGlsZEZyYW1lICAgICAgICAgPSBTZGlDaGlsZEZy YW1lCiAgICAgICAgZWxpZiAgICBzZWxmLm1kaSA9PSBNRElfU0FTSDoKICAgICAgICAgICAgc2Vs Zi5QYXJlbnRGcmFtZSAgICAgICAgPSBNZGlTYXNoUGFyZW50RnJhbWUKICAgICAgICAgICAgc2Vs Zi5DaGlsZEZyYW1lICAgICAgICAgPSBNZGlDaGlsZEZyYW1lCiAgICAgICAgZWxpZiAgICBzZWxm Lm1kaSA9PSBNRElfU0FTSF9UQUJTOgogICAgICAgICAgICBzZWxmLlBhcmVudEZyYW1lICAgICAg ICA9IE1kaVNhc2hUYWJzUGFyZW50RnJhbWUKICAgICAgICAgICAgc2VsZi5DaGlsZEZyYW1lICAg ICAgICAgPSBNZGlTYXNoVGFic0NoaWxkRnJhbWUKICAgICAgICAgICAgI3NlbGYuRVZFTlRfTk9U RUJPT0sgICAgID0gd3guRVZUX05PVEVCT09LX1BBR0VfQ0hBTkdFRAogICAgICAgIGVsaWYgICAg c2VsZi5tZGkgPT0gTURJOgogICAgICAgICAgICBzZWxmLlBhcmVudEZyYW1lICAgICAgICA9IE1k aVBhcmVudEZyYW1lCiAgICAgICAgICAgIHNlbGYuQ2hpbGRGcmFtZSAgICAgICAgID0gTWRpQ2hp bGRGcmFtZQogICAgICAgIGVsaWYgICAgc2VsZi5tZGkgPT0gTURJX1RBQlM6CiAgICAgICAgICAg IHNlbGYuUGFyZW50RnJhbWUgICAgICAgID0gTWRpVGFic1BhcmVudEZyYW1lCiAgICAgICAgICAg IHNlbGYuQ2hpbGRGcmFtZSAgICAgICAgID0gTWRpVGFic0NoaWxkRnJhbWUKICAgICAgICBlbGlm ICAgIHNlbGYubWRpID09IE1ESV9TUExJVDoKICAgICAgICAgICAgc2VsZi5QYXJlbnRGcmFtZSAg ICAgICAgPSBNZGlTcGxpdFBhcmVudEZyYW1lCiAgICAgICAgICAgIHNlbGYuQ2hpbGRGcmFtZSAg ICAgICAgID0gTWRpU3BsaXRDaGlsZEZyYW1lCiAgICAgICAgCiAgICAgICAgc2VsZi5FVkVOVF9O T1RFQk9PSyA9IE5vdGVib29rQ3RybC5FVlRfTk9URUJPT0tDVFJMX1BBR0VfQ0hBTkdFRAojIyAg ICAgICAgI1RhYnM6IG5vdGVib29rIGV2ZW50IGlzIHBsYXRmb3JtZGVwZW5kZW50CiMjICAgICAg ICBpZiBXSU46CiMjICAgICAgICAgICAgI1VuZGVyIFdpbmRvd3MsIEdldFNlbGVjdGlvbigpIHdp bGwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzCiMjICAgICAgICAgICAgI0dldE9sZFNlbGVjdGlv bigpIHdoZW4gY2FsbGVkIGZyb20gRVZUX05PVEVCT09LX1BBR0VfQ0hBTkdJTkcgaGFuZGxlciBh bmQKIyMgICAgICAgICAgICAjbm90IHRoZSBwYWdlIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHNlbGVj dGVkCiMjICAgICAgICAgICAgI1RoZXJlZm9yZSBvbiBXaW5kb3dzIGEgY29tYmluYXRpb24gb2Yg bW91c2UgY2xpY2sgYW5kIGhpdHRlc3QgbXVzdCBiZSB1c2VkLgojIyAgICAgICAgICAgIHNlbGYu RVZFTlRfTk9URUJPT0sgPSB3eC5FVlRfTEVGVF9ET1dOCiMjICAgICAgICBlbHNlOgojIyAgICAg ICAgICAgIHNlbGYuRVZFTlRfTk9URUJPT0sgPSB3eC5FVlRfTk9URUJPT0tfUEFHRV9DSEFOR0lO RwoKCiMjIyNUZXN0IGFwcApjbGFzcyBUZXN0TWVudUJhcih3eC5NZW51QmFyKToKICAgIGRlZiBf X2luaXRfXyhzZWxmLGFwcCxmcmFtZSwqYXJncywqKmt3ZHMpOgogICAgICAgIHd4Lk1lbnVCYXIu X19pbml0X18oc2VsZiwqYXJncywqKmt3ZHMpCiAgICAgICAgc2VsZi5maWxlICAgPSB3eC5NZW51 KCkKICAgICAgICBzZWxmLmZpbGUuQXBwZW5kKHd4LklEX05FVywgXygiJk5ld1x0Q3RybCtOIiks ICIiLCB3eC5JVEVNX05PUk1BTCkKICAgICAgICBzZWxmLmZpbGUuQXBwZW5kKHd4LklEX0NMT1NF LCBfKCImQ2xvc2VcdEN0cmwrVyIpLCAiIiwgd3guSVRFTV9OT1JNQUwpCiAgICAgICAgc2VsZi5m aWxlLkFwcGVuZCh3eC5JRF9FWElULCBfKCImRXhpdFx0QWx0K0Y0IiksICIiLCB3eC5JVEVNX05P Uk1BTCkKICAgICAgICBzZWxmLkFwcGVuZChzZWxmLmZpbGUsICImRmlsZSIpCiAgICBkZWYgX19l dmVudHNfXyhzZWxmKToKICAgICAgICB3eC5FVlRfTUVOVShzZWxmLmZyYW1lLHd4LklEX05FVyxz ZWxmLm1lbnVfbmV3KQogICAgICAgIHd4LkVWVF9NRU5VKHNlbGYuZnJhbWUsd3guSURfQ0xPU0Us c2VsZi5tZW51X2Nsb3NlKQogICAgICAgIHd4LkVWVF9NRU5VKHNlbGYuZnJhbWUsd3guSURfRVhJ VCxzZWxmLm1lbnVfZXhpdCkKICAgIGRlZiBtZW51X25ldyhzZWxmLGV2ZW50PU5vbmUpOgogICAg ICAgIHNlbGYucGFyZW50UGFuZWwubmV3KCkKICAgIGRlZiBtZW51X2Nsb3NlKHNlbGYsZXZlbnQ9 Tm9uZSk6CiAgICAgICAgc2VsZi5wYXJlbnRQYW5lbC5jbG9zZSgpCiAgICBkZWYgbWVudV9leGl0 KHNlbGYsZXZlbnQ9Tm9uZSk6CiAgICAgICAgc2VsZi5wYXJlbnRGcmFtZS5vbkZyYW1lQ2xvc2Uo KQogICAgICAgIApBcnRJRHMgPSBbIHd4LkFSVF9GSUxFX09QRU4sCiAgICAgICAgICAgd3guQVJU X1BSSU5ULAogICAgICAgICAgIHd4LkFSVF9BRERfQk9PS01BUkssCiAgICAgICAgICAgd3guQVJU X1JFUE9SVF9WSUVXLAogICAgICAgICAgIHd4LkFSVF9MSVNUX1ZJRVcsCiAgICAgICAgICAgd3gu QVJUX0hFTFAsCiAgICAgICAgICAgXQoKY2xhc3MgVGVzdFRvb2xCYXIod3guVG9vbEJhcik6CiAg ICBkZWYgX19pbml0X18oc2VsZixwYXJlbnQ9Tm9uZSxpZD13eC5JRF9BTlksbWVudT1Ob25lLGFw cD1Ob25lLCoqa3dkcyk6CiAgICAgICAgc2VsZi5hcHAgPSBhcHAKICAgICAgICB3eC5Ub29sQmFy Ll9faW5pdF9fKHNlbGYscGFyZW50PXBhcmVudCxpZD1pZCwqKmt3ZHMpCiAgICAgICAgcGFyZW50 LlNldFRvb2xCYXIoc2VsZikKICAgICAgICBzZWxmLnRvb2xzID0gW10KICAgICAgICBmb3IgaWQg aW4gQXJ0SURzOgogICAgICAgICAgICB0b29sSWQgPSB3eC5OZXdJZCgpCiAgICAgICAgICAgIGJt cCA9IHd4LkFydFByb3ZpZGVyX0dldEJpdG1hcChpZCwgd3guQVJUX1RPT0xCQVIsICgxNiwxNikp CiAgICAgICAgICAgIHNlbGYuQWRkTGFiZWxUb29sKHRvb2xJZCwgIiIsIGJtcCwgd3guTnVsbEJp dG1hcCwgd3guSVRFTV9OT1JNQUwsICJpbmZvIiwgIiIpCiAgICAgICAgICAgIHNlbGYudG9vbHMu YXBwZW5kKHRvb2xJZCkKICAgICAgICBzZWxmLlJlYWxpemUoKQogICAgICAgIAogICAgZGVmIF9f ZXZlbnRzX18oc2VsZik6CiAgICAgICAgZm9yIGlkIGluIHNlbGYudG9vbHM6CiAgICAgICAgICAg IHd4LkVWVF9UT09MKHNlbGYsaWQsIHNlbGYudGVzdCkKICAgIGRlZiB0ZXN0KHNlbGYsZXZlbnQp OgogICAgICAgIHByaW50ICd0ZXN0IHNlZW1zIG9rJwogICAgICAgIApjbGFzcyBUZXN0UGFyZW50 UGFuZWwod3guVGV4dEN0cmwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LCoqa3dkcyk6 CiAgICAgICAgd3guVGV4dEN0cmwuX19pbml0X18oc2VsZixwYXJlbnQ9cGFyZW50LGlkPXd4LklE X0FOWSx2YWx1ZT0ncGFyZW50JywqKmt3ZHMpCiAgICAgICAgc2VsZi50ZXN0X2NoaWxkID0gMAog ICAgZGVmIG5ldyhzZWxmKToKICAgICAgICB2YWx1ZSAgICAgICAgICAgPSAnY2hpbGQlMDJkJyVz ZWxmLnRlc3RfY2hpbGQKICAgICAgICBzZWxmLmFwcC5DaGlsZEZyYW1lKHNlbGYuZnJhbWUscGFn ZT12YWx1ZSx2YWx1ZT12YWx1ZSkKICAgICAgICBzZWxmLnRlc3RfY2hpbGQgKz0gMQogICAgZGVm IGNsb3NlKHNlbGYpOgogICAgICAgIGFjdGl2ZSA9IHNlbGYuYXBwLmNoaWxkQWN0aXZlCiAgICAg ICAgaWYgYWN0aXZlOiBhY3RpdmUuZnJhbWUub25GcmFtZUNsb3NlKCkKICAgICAgICAKY2xhc3Mg VGVzdENoaWxkUGFuZWwod3guVGV4dEN0cmwpOgogICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50 LCoqa3dkcyk6CiAgICAgICAgd3guVGV4dEN0cmwuX19pbml0X18oc2VsZixwYXJlbnQ9cGFyZW50 LGlkPXd4LklEX0FOWSwqKmt3ZHMpCiAgICAgICAgICAgICAgICAKZGVmIF9fdGVzdF9fKGRlYnVn LG1kaT1NREkpOgogICAgYXBwID0gQXBwKFRlc3RQYXJlbnRQYW5lbCwKICAgICAgICAgICAgICBU ZXN0Q2hpbGRQYW5lbCwKICAgICAgICAgICAgICBUZXN0TWVudUJhciwKICAgICAgICAgICAgICBU ZXN0VG9vbEJhciwKICAgICAgICAgICAgICB3eC5TdGF0dXNCYXIsCiAgICAgICAgICAgICAgbWRp PW1kaSwKICAgICAgICAgICAgICB0aXRsZT0nUGFyZW50JywKICAgICAgICAgICAgICBkZWJ1Zz1k ZWJ1ZykKICAgIGFwcC5NYWluTG9vcCgpCiAgICAKaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAg ICBfX3Rlc3RfXyhkZWJ1Zz0xLG1kaT1NRElfVEFCU19XSU4pI211bHRpcGxlIGRvY3VtZW50IGlu dGVyZmFjZSBmb3Igd2luZG93cwogICAgI19fdGVzdF9fKGRlYnVnPTEsbWRpPU1ESV9UQUJTX01B Qykjc2luZ2xlIGRvY3VtZW50IGludGVyZmFjZSBmb3IgbWFjCiAgICAjX190ZXN0X18oZGVidWc9 MSxtZGk9TURJX1NQTElUX0FMTCkjbXVsdGlwbGUgZG9jdW1lbnQgaW50ZXJmYWNlIGZvciBtYWM= ------=_Part_41369_18639215.1164241401845 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Python-spe-users mailing list [email protected] https://lists.berlios.de/mailman/listinfo/python-spe-users ------=_Part_41369_18639215.1164241401845--