<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>61773</bug_id>
          
          <creation_ts>2011-05-31 01:56:50 -0700</creation_ts>
          <short_desc>Write a tools library to manipulate Xcode project files</short_desc>
          <delta_ts>2013-10-31 08:30:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>63528</dependson>
    
    <dependson>64148</dependson>
          <blocked>61772</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>hayato</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>mark</cc>
    
    <cc>morrita</cc>
    
    <cc>mrowe</cc>
    
    <cc>ojan</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>412506</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 01:56:50 -0700</bug_when>
    <thetext>The webkit-file tool project requires a module to manipulate XCode project files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412522</commentid>
    <comment_count>1</comment_count>
      <attachid>95410</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 02:51:47 -0700</bug_when>
    <thetext>Created attachment 95410
patch, first version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412523</commentid>
    <comment_count>2</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 02:56:35 -0700</bug_when>
    <thetext>(In reply to comment #1)

First version of the module for XCode project file handling. I&apos;m far from a Python-wizard, so any suggestions how to improve the quality or performance of the code are highly welcome!

The initial version contains all that is necessary to read and parse a project file, add new files and project groups, and write out a project file. &apos;children&apos; and &apos;files&apos; lists within the project are implicitly sorted on writing.

Just reading and writing a project file already gives better results IMHO than Tools/Scripts/sort-XCode-project-file (better handling of files without extensions and variant groups).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412630</commentid>
    <comment_count>3</comment_count>
      <attachid>95410</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-31 08:10:25 -0700</bug_when>
    <thetext>Comment on attachment 95410
patch, first version

View in context: https://bugs.webkit.org/attachment.cgi?id=95410&amp;action=review

Was some of this taken from xcodebodge? or did you write this all yourself?

&gt; Tools/Scripts/webkitpy/common/project/__init__.py:4
&gt; +__all__ = [
&gt; +  &apos;xcodeproj&apos;]

Why the strange wrap?  I don&apos;t remember what __all__ does. I don&apos;t think we&apos;ve used it in any other __init__ files, but maybe we should?

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:45
&gt; +    def __init__(self, msg):
&gt; +        self._msg = msg

You could pass args and kwargs through, but I doubt it matters.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:51
&gt; +class XCodeString(object):

Why our own separate string class?

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:54
&gt; +    def __init__(self, strval=&apos;&apos;):

If you&apos;re ever modifying self._string, than having a default value like this is bad, since the default is a global shared value.  Paranoid python programmers always use =None as a default value and then do if not arg: arg = &quot;default value&quot;

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:76
&gt; +    def __init__(self, uuidstr=&apos;000000000000000000000000&apos;):

Same problem as above with default values.  Here especailly would make sense to define a cls._zero_string or cls.zero.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:119
&gt; +            if uuid != XCodeUUID(&apos;000000000000000000000000&apos;) and uuid != XCodeUUID(&apos;FFFFFFFFFFFFFFFFFFFFFFFF&apos;):

I might have used &apos;0&apos; * 24 or &apos;F&apos; * 24 to make it easier to realize I hadn&apos;t missed one.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:147
&gt; +        self._uuid2buildphaseUUID = {}
&gt; +        self._buildConfList2UUID = {}
&gt; +        self._uuid2commentCache = {}
&gt; +        self._mainGroupUUID = XCodeUUID()
&gt; +        self._mainProjectNativeTarget = None
&gt; +        self._mainProjectSourcesBuildPhaseUUID = XCodeUUID()
&gt; +        self._mainProjectHeadersBuildPhaseUUID = XCodeUUID()
&gt; +        self._mainProjectResourcesBuildPhaseUUID = XCodeUUID()
&gt; +        self._mainProjectFrameworksBuildPhaseUUID = XCodeUUID()

I think you&apos;re used to google-style python naming here.  We try to follow PEP8 (with the exception of the 80c rule) in WebKit.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:814
&gt; +            self._file.write(&apos;&quot;&apos;)
&gt; +            self._file.write(str(value))
&gt; +            self._file.write(&apos;&quot;&apos;)

Why 3 lines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412631</commentid>
    <comment_count>4</comment_count>
      <attachid>95410</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-31 08:11:30 -0700</bug_when>
    <thetext>Comment on attachment 95410
patch, first version

Many unanswered questions in the previou review, so marking r-.  If this does a better job than sort-XCode-project-file, seems it might make sense to re-write sort-XCode-project-file to use it in some future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413050</commentid>
    <comment_count>5</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 18:14:59 -0700</bug_when>
    <thetext>(In reply to comment #3)

Thanks for the great feedback!

&gt; Was some of this taken from xcodebodge? or did you write this all yourself?

All written by myself (I didn&apos;t even know of xcodebodge unil now... :P)
 
&gt; &gt; Tools/Scripts/webkitpy/common/project/__init__.py:4
&gt; &gt; +__all__ = [
&gt; &gt; +  &apos;xcodeproj&apos;]
&gt; 
&gt; Why the strange wrap?  I don&apos;t remember what __all__ does. I don&apos;t think we&apos;ve used it in any other __init__ files, but maybe we should?

It&apos;s so one can use &apos;from webkitpy.common.project import *&apos; that I foresee being useful for the final tool that adds files to all different project files. The wrap is because there will be more files added over time.

&gt; &gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:51
&gt; &gt; +class XCodeString(object):
&gt; 
&gt; Why our own separate string class?

XCodeString and XCodeUUID are used to remember the type of the original values and distinguish them from IDs, paths and integers (all simply stored as string). When writing back the project file, UUIDs need additional comments, and XCodeString adds the enclosing quotes, except if used within a comment. OTOH, integers, paths and IDs are just written as-is.

(I should document this in the source as well.)

&gt; I think you&apos;re used to google-style python naming here.  We try to follow PEP8 (with the exception of the 80c rule) in WebKit.

Will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413075</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 18:53:07 -0700</bug_when>
    <thetext>&gt; It&apos;s so one can use &apos;from webkitpy.common.project import *&apos; that I foresee being useful for the final tool that adds files to all different project files. The wrap is because there will be more files added over time.

That&apos;s discouraged by PEP8 and we don&apos;t allow it outside of unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413168</commentid>
    <comment_count>7</comment_count>
      <attachid>95553</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 23:31:37 -0700</bug_when>
    <thetext>Created attachment 95553
new patch

Hopefully with improved PEP8 compliance :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413173</commentid>
    <comment_count>8</comment_count>
      <attachid>95553</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 23:42:47 -0700</bug_when>
    <thetext>Comment on attachment 95553
new patch

View in context: https://bugs.webkit.org/attachment.cgi?id=95553&amp;action=review

This is a lot of code, and I&apos;ve very happy you&apos;re doing this work.  The big thing missing from this patch (aside from the nits below) is tests!  We greatly prefer this code to be tested using Python unit tests so we can make changes to it without breaking things.  You can see lot of examples of other tests in webkitpy in the files named _unittest.py.  If you write a unit test in a file with such a name, it will be automagically discovered and run as part of the test-webkitpy testing harness.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:42
&gt; +    &quot;&quot;&quot;Class used for exceptions.&quot;&quot;&quot;

This docstring is meaningless.  Of course its a class used for exceptions.  It&apos;s a subclass of Exception.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:45
&gt; +    def __init__(self, msg):
&gt; +        self._msg = msg

Sorry to keep poking you with style nits, but we prefer variables to be full english works, like we do in regular WebKit code, so this should be _message.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:58
&gt; +    def __init__(self, strval):

strval =&gt; string_value or just string

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:274
&gt; +        # could not resolve path, return non-empty sub-path together with current group

Also like regular WebKit code, we prefer comments to be English sentences with initial caps and a trailing period.

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:618
&gt; +    def parse_project_file(self, filePath, project_name=&apos;&apos;):

filePath =&gt; file_path

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:627
&gt; +        with codecs.open(filePath, &apos;r&apos;, &apos;utf8&apos;, &apos;replace&apos;) as self._file:
&gt; +            self._content = self._file.read()

Please use the filesystem abstraction for interacting with the file system.  (Also, we require compatibility with Python 2.5, so you can&apos;t use &quot;with&quot; without importing it from the future.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413175</commentid>
    <comment_count>9</comment_count>
      <attachid>95553</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-31 23:45:44 -0700</bug_when>
    <thetext>Comment on attachment 95553
new patch

View in context: https://bugs.webkit.org/attachment.cgi?id=95553&amp;action=review

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:33
&gt; +from __future__ import with_statement

He did import with. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413177</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 23:49:47 -0700</bug_when>
    <thetext>Ah.  I fail at reading.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413178</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-31 23:50:27 -0700</bug_when>
    <thetext>This whole approach is super exciting to me.  I&apos;ve hoped we&apos;d do this for a long time, but I was scared of trying to write code that interacts with the xcodeproj files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413485</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-01 10:47:11 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; This whole approach is super exciting to me.  I&apos;ve hoped we&apos;d do this for a long time, but I was scared of trying to write code that interacts with the xcodeproj files.

FWIW, we used to have a similar python script in Chromium (I think jrg wrote it):
  http://codereview.chromium.org/2167003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413510</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Mentovai">mark</who>
    <bug_when>2011-06-01 10:59:38 -0700</bug_when>
    <thetext>aharper wrote xcodebodge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413722</commentid>
    <comment_count>14</comment_count>
      <attachid>95553</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-06-01 15:55:23 -0700</bug_when>
    <thetext>Comment on attachment 95553
new patch

View in context: https://bugs.webkit.org/attachment.cgi?id=95553&amp;action=review

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:31
&gt; +# This is a very simple script designed to crawl the build directory
&gt; +# for visual studio express build logs and print them to stdout.

…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413725</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-06-01 15:55:56 -0700</bug_when>
    <thetext>One general comment:  It’s Xcode, not “XCode”.  There are numerous instances of this misspelling in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413734</commentid>
    <comment_count>16</comment_count>
      <attachid>95553</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-06-01 16:07:08 -0700</bug_when>
    <thetext>Comment on attachment 95553
new patch

View in context: https://bugs.webkit.org/attachment.cgi?id=95553&amp;action=review

&gt; Tools/Scripts/webkitpy/common/project/xcodeproj.py:78
&gt; +class XCodeUUID(object):
&gt; +    &quot;&quot;&quot;Class containing a single XCode UUID.

It’s a bit misleading to refer to this as a UUID.  They’re unique identifiers, but they do not take the form of a UUID (24 hex characters vs the usual 32).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413845</commentid>
    <comment_count>17</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-01 19:40:01 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; FWIW, we used to have a similar python script in Chromium (I think jrg wrote it):
&gt;   http://codereview.chromium.org/2167003

Eric also mentioned it. Why was it removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414183</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Mentovai">mark</who>
    <bug_when>2011-06-02 09:21:54 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #12)
&gt; &gt; FWIW, we used to have a similar python script in Chromium (I think jrg wrote it):
&gt; &gt;   http://codereview.chromium.org/2167003
&gt; 
&gt; Eric also mentioned it. Why was it removed?

The changelist description in the link you quoted explains it succinctly, but to expand…

We removed xcodebodge when we moved to GYP. We no longer modify .xcodeprojs directly, so xcodebodge was effectively obsolete for our purposes. Since it was only intended as a quick-and-dirty stopgap to begin with, we didn’t consider it worth maintaining in our tree, and removed it.

When we did this, we were fully aware that if anyone ever wanted to resurrect it, they could just pull it out of our version control history.

Here’s the history: http://src.chromium.org/viewvc/chrome/trunk/src/tools/xcodebodge/xcodebodge.py?view=log&amp;pathrev=48277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433897</commentid>
    <comment_count>19</comment_count>
      <attachid>100072</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-07 22:22:40 -0700</bug_when>
    <thetext>Created attachment 100072
work-in-progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433904</commentid>
    <comment_count>20</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-07 22:29:25 -0700</bug_when>
    <thetext>Work-in-progress update:

-) stole a few ideas from webkitbodge.py (more to be stolen later)
-) factored out common interfaces into base classes (see bug 64148)
-) added a unittest stub file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579358</commentid>
    <comment_count>21</comment_count>
      <attachid>132042</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-15 07:22:29 -0700</bug_when>
    <thetext>Created attachment 132042
work-in-progress

expanded and refactored work-in-progress. The idea being to make the system flexible enough to do all kinds of file manipulations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592040</commentid>
    <comment_count>22</comment_count>
      <attachid>134771</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-30 04:28:40 -0700</bug_when>
    <thetext>Created attachment 134771
patch, requires 82595

first review version. Unit tests are subsumed by unit tests for webkit-file.py (see bug 81317)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945532</commentid>
    <comment_count>23</comment_count>
      <attachid>134771</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-31 08:30:41 -0700</bug_when>
    <thetext>Comment on attachment 134771
patch, requires 82595

Nobody is working on this and it&apos;s cluttering up the Bugzilla review queue so I&apos;m going to go ahead and close this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95410</attachid>
            <date>2011-05-31 02:51:47 -0700</date>
            <delta_ts>2011-05-31 23:31:29 -0700</delta_ts>
            <desc>patch, first version</desc>
            <filename>bug-61773-20110531185145.patch</filename>
            <type>text/plain</type>
            <size>37065</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3MTYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNmU5ZDE0ZTEyN2M4MzZkMzcwNGQxMDAzMDY1ZjFiNmQ1
M2VlZDc0Li5iYTYyODM4MjEwZTA0ZGY3MWZjMTQ2NTgxOTE2OWZmYTdjNDMyM2ViIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMDUtMzEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV3Jp
dGUgYSB0b29scyBsaWJyYXJ5IHRvIG1hbmlwdWxhdGUgWENvZGUgcHJvamVjdCBmaWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3NzMKKworICAg
ICAgICBBZGRpbmcgYSBQeXRob24gbGlicmFyeSAneGNvZGVwcm9qLnB5JyB1bmRlciBhIG5ldyBk
aXJlY3RvcnkgJ3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0Jy4KKyAgICAgICAgVGhlIGZpcnN0IHZl
cnNpb24gY29udGFpbnMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVjZXNzYXJ5IHRvOgorICAgICAgICAu
KSBSZWFkIGFuZCBwYXJzZSBhIHByb2plY3QucGJ4cHJvaiBmaWxlCisgICAgICAgIC4pIEFkZCBu
ZXcgZmlsZXMgYW5kIHByb2plY3QgZ3JvdXBzIHRvIHRoZSBwcm9qZWN0CisgICAgICAgIC4pIElt
cGxpY2l0bHkgc29ydCAnY2hpbGRyZW4nIGFuZCAnZmlsZXMnIGxpc3RzIHdpdGhpbiB0aGUgcHJv
amVjdAorICAgICAgICAuKSBHZW5lcmF0ZSBhbmQgd3JpdGUgYSBwcm9qZWN0IGZpbGUgdG8gZGlz
YworCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC94Y29k
ZXByb2oucHk6IEFkZGVkLgorCiAyMDExLTA1LTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24u
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5p
dF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45OTQ3NmUzM2JlYjBhYzJhYWNhMGJlMDliNWFiOTRiOWEwZWUzMzJhCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9f
X2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFy
Y2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCitfX2FsbF9fID0gWworICAneGNv
ZGVwcm9qJ10KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2pl
Y3QveGNvZGVwcm9qLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC94
Y29kZXByb2oucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTExMWU4YjY3YmJjN2FjYjNlN2VhMDJkM2I3ZWQxMzYx
ODJmNGUyMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Byb2plY3QveGNvZGVwcm9qLnB5CkBAIC0wLDAgKzEsODM5IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgc2NyaXB0
IGRlc2lnbmVkIHRvIGNyYXdsIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgZm9yIHZpc3VhbCBzdHVk
aW8gZXhwcmVzcyBidWlsZCBsb2dzIGFuZCBwcmludCB0aGVtIHRvIHN0ZG91dC4KKworZnJvbSBf
X2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgY29kZWNzCitpbXBvcnQg
b3BlcmF0b3IKK2ltcG9ydCByYW5kb20KK2ltcG9ydCByZQorCisKK2NsYXNzIFhDb2RlUHJvamVj
dEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkNsYXNzIHVzZWQgZm9yIGV4Y2VwdGlvbnMu
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgc2VsZi5fbXNnID0g
bXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcHIoc2VsZi5f
bXNnKQorCisKK2NsYXNzIFhDb2RlU3RyaW5nKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgY29udGFp
bmluZyBhIHNpbmdsZSBYQ29kZSBTdHJpbmcgKHN0cmluZyBpbiBxdW90ZXMgd2l0aGluIHRoZSBw
cm9qZWN0IGZpbGUpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cnZhbD0nJyk6Cisg
ICAgICAgIHNlbGYuX3N0cmluZyA9IHN0cnZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9zdHJpbmcKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIGhhc2goc2VsZi5fc3RyaW5nKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gY21wKHNlbGYuX3N0cmluZywgc3RyKG90aGVyKSkKKwor
ICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyaW5n
ID09IHN0cihvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fc3RyaW5nICE9IHN0cihvdGhlcikKKworCitjbGFzcyBYQ29kZVVVSUQob2Jq
ZWN0KToKKyAgICAiIiJDbGFzcyBjb250YWluaW5nIGEgc2luZ2xlIFhDb2RlIFVVSUQuIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdXVpZHN0cj0nMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Jyk6CisgICAgICAgIGlmIG5vdCBYQ29kZVVVSUQuaXNWYWxpZFVVSUQodXVpZHN0cik6CisgICAg
ICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIiclcycgaXMgbm90IGEgdmFsaWQg
WENvZGUgVVVJRCAtIGV4YWN0bHkgMjQgdXBwZXItY2FzZSBoZXggY2hhcmFjdGVycyBleHBlY3Rl
ZCEiICUgdXVpZHN0cikKKyAgICAgICAgc2VsZi5fdXVpZCA9IHV1aWRzdHIKKworICAgIGRlZiBf
X2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fdXVpZCkKKworICAgIGRl
ZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLl91dWlkLCBv
dGhlci5fdXVpZCkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1
cm4gc2VsZi5fdXVpZCA9PSBvdGhlci5fdXVpZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhl
cik6CisgICAgICAgIHJldHVybiBzZWxmLl91dWlkICE9IG90aGVyLl91dWlkCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91dWlkCisKKyAgICBkZWYgX19z
dHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3V1aWQKKworICAgIGRlZiBfX25vbnpl
cm9fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3V1aWQgIT0gJzAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMCcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNVVUlEQ2hhcihjKToK
KyAgICAgICAgcmV0dXJuIChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yIChjID49ICdBJyBhbmQg
YyA8PSAnRicpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlzVmFsaWRVVUlEKHV1aWRz
dHIpOgorICAgICAgICBpZiBsZW4odXVpZHN0cikgIT0gMjQ6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgZm9yIGMgaW4gdXVpZHN0cjoKKyAgICAgICAgICAgIGlmIG5vdCBYQ29k
ZVVVSUQuaXNVVUlEQ2hhcihjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmFuZG9tVVVJRCgp
OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdXVpZCA9IFhDb2RlVVVJRCgnJy5q
b2luKFtyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5QUJDREVGJykgZm9yIGkgaW4gcmFuZ2UoMjQp
XSkpCisgICAgICAgICAgICBpZiB1dWlkICE9IFhDb2RlVVVJRCgnMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwJykgYW5kIHV1aWQgIT0gWENvZGVVVUlEKCdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYn
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdXVpZAorCisKK2NsYXNzIFhDb2RlUHJvajoKKyAg
ICAiIiJDbGFzcyBjb250YWluaW5nIGFsbCBkYXRhIHN0cnVjdHVyZXMgZGVzY3JpYmluZyBhbiBY
Q29kZSBwcm9qZWN0IGZpbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
IHNlbGYuX2ZpbGUgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbnRlbnQgPSAnJworICAgICAgICBz
ZWxmLl9pdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9uZXh0ID0gJ1wwJworICAgICAgICBzZWxm
Ll9sb29rYWhlYWQgPSAnXDAnCisgICAgICAgIHNlbGYuY2xlYXJQcm9qZWN0RGF0YSgpCisKKyAg
ICBkZWYgY2xlYXJQcm9qZWN0RGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvamVjdE5hbWUg
PSAnVW5rbm93bicKKyAgICAgICAgc2VsZi5fcGJ4ID0ge30KKyAgICAgICAgc2VsZi5fdXVpZHMg
PSB7fQorICAgICAgICBzZWxmLl9pc2EyVVVJRHMgPSB7fQorICAgICAgICBzZWxmLl91dWlkMmJ1
aWxkcGhhc2VVVUlEID0ge30KKyAgICAgICAgc2VsZi5fYnVpbGRDb25mTGlzdDJVVUlEID0ge30K
KyAgICAgICAgc2VsZi5fdXVpZDJjb21tZW50Q2FjaGUgPSB7fQorICAgICAgICBzZWxmLl9tYWlu
R3JvdXBVVUlEID0gWENvZGVVVUlEKCkKKyAgICAgICAgc2VsZi5fbWFpblByb2plY3ROYXRpdmVU
YXJnZXQgPSBOb25lCisgICAgICAgIHNlbGYuX21haW5Qcm9qZWN0U291cmNlc0J1aWxkUGhhc2VV
VUlEID0gWENvZGVVVUlEKCkKKyAgICAgICAgc2VsZi5fbWFpblByb2plY3RIZWFkZXJzQnVpbGRQ
aGFzZVVVSUQgPSBYQ29kZVVVSUQoKQorICAgICAgICBzZWxmLl9tYWluUHJvamVjdFJlc291cmNl
c0J1aWxkUGhhc2VVVUlEID0gWENvZGVVVUlEKCkKKyAgICAgICAgc2VsZi5fbWFpblByb2plY3RG
cmFtZXdvcmtzQnVpbGRQaGFzZVVVSUQgPSBYQ29kZVVVSUQoKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBleHRyYWN0UHJvamVjdE5hbWVGcm9tRmlsZVBhdGgoZmlsZVBhdGgpOgorICAg
ICAgICBtYXRjaCA9IHJlLnNlYXJjaCgnLyhbXi8uXSspXC54Y29kZXByb2ovcHJvamVjdFwucGJ4
cHJvaiQnLCBmaWxlUGF0aCkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICByZXR1cm4g
bWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgc2V0UHJvamVjdE5h
bWUoc2VsZiwgcHJvamVjdE5hbWUpOgorICAgICAgICBzZWxmLl9wcm9qZWN0TmFtZSA9IHByb2pl
Y3ROYW1lCisgICAgICAgIGlmIHNlbGYuX21haW5Qcm9qZWN0TmF0aXZlVGFyZ2V0OgorICAgICAg
ICAgICAgc2VsZi5fbWFpblByb2plY3ROYXRpdmVUYXJnZXRbJ25hbWUnXSA9IHByb2plY3ROYW1l
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldFVVSUQob2JqLCBrZXkpOgorICAgICAg
ICB2YWwgPSBvYmpba2V5XQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgWENvZGVVVUlEKToK
KyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0
aW9uKCJVbmV4cGVjdGVkIHR5cGUgJyVzJyBlbmNvdW50ZXJlZCBmb3IgZmllbGQgJyVzJyAtIFVV
SUQgZXhwZWN0ZWQhIiAlIChzdHIodHlwZSh2YWwpKSwga2V5KSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgZ2V0TGlzdChvYmosIGtleSk6CisgICAgICAgIHZhbCA9IG9ialtrZXldCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KToKKyAgICAgICAgICAgIHJldHVybiB2YWwK
KyAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgJyVz
JyBlbmNvdW50ZXJlZCBmb3IgZmllbGQgJyVzJyAtIGxpc3QgZXhwZWN0ZWQhIiAlIChzdHIodHlw
ZSh2YWwpKSwga2V5KSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0U3RyaW5nKG9i
aiwga2V5KToKKyAgICAgICAgdmFsID0gb2JqW2tleV0KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2
YWwsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHZhbAorICAgICAgICByYWlzZSBY
Q29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0ZWQgdHlwZSAnJXMnIGVuY291bnRlcmVkIGZv
ciBmaWVsZCAnJXMnIC0gJ3VuaWNvZGUnIGV4cGVjdGVkISIgJSAoc3RyKHR5cGUodmFsKSksIGtl
eSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldElTQShvYmopOgorICAgICAgICBy
ZXR1cm4gWENvZGVQcm9qLmdldFN0cmluZyhvYmosICdpc2EnKQorCisgICAgZGVmIGdlbmVyYXRl
VVVJRChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBuZXcgVVVJRCB0aGF0IGRvZXNuJ3Qg
eWV0IGV4aXN0IHdpdGhpbiB0aGUgcHJvamVjdC4iIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIHV1aWQgPSBYQ29kZVVVSUQucmFuZG9tVVVJRCgpCisgICAgICAgICAgICBpZiB1
dWlkIG5vdCBpbiBzZWxmLl91dWlkczoKKyAgICAgICAgICAgICAgICByZXR1cm4gdXVpZAorCisg
ICAgZGVmIGFkZFVVSUQoc2VsZiwgdXVpZCwgZGVmaW5pdGlvbik6CisgICAgICAgICIiIkFkZHMg
YSBuZXcgVVVJRCBkZWZpbml0aW9uIHRvIHRoZSBwcm9qZWN0LiIiIgorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZSh1dWlkLCBYQ29kZVVVSUQpOgorICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9q
ZWN0RXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogbm9uLVVVSUQgcGFzc2VkIHRvIGFkZFVVSUQo
KSEiKQorICAgICAgICBpZiB1dWlkIGluIHNlbGYuX3V1aWRzOgorICAgICAgICAgICAgcmFpc2Ug
WENvZGVQcm9qZWN0RXhjZXB0aW9uKCJVVUlEICclcycgZm9yIGlzYSAnJXMnIGFscmVhZHkgZGVm
aW5lZCEiICUgKHV1aWQsIGRlZmluaXRpb25bJ2lzYSddKSkKKyAgICAgICAgaXNhID0gc2VsZi5n
ZXRJU0EoZGVmaW5pdGlvbikKKyAgICAgICAgc2VsZi5fdXVpZHNbdXVpZF0gPSBkZWZpbml0aW9u
CisgICAgICAgIGlmIGlzYSBub3QgaW4gc2VsZi5faXNhMlVVSURzOgorICAgICAgICAgICAgc2Vs
Zi5faXNhMlVVSURzW2lzYV0gPSBbdXVpZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX2lzYTJVVUlEc1tpc2FdLmFwcGVuZCh1dWlkKQorCisgICAgZGVmIGFkZE5ld1N1Ykdyb3Vw
KHNlbGYsIHBhcmVudEdyb3VwLCBwYXRoKToKKyAgICAgICAgIiIiQWRkIGEgc2luZ2xlIG5ldyBz
dWItZ3JvdXAuCisKKyAgICAgICAgQWRkIGEgbmV3IHN1Ymdyb3VwIHVuZGVyIHBhcmVudEdyb3Vw
IGZvciBmaWxlcyB3aXRoIHRoZSBnaXZlbiBwYXRoLgorICAgICAgICAoU2V0cyB0aGUgJ3BhdGgn
IGZpZWxkIGZvciB0aGUgZ3JvdXAgdG8gdGhlIHBhc3NlZC1pbiBwYXRoLikKKyAgICAgICAgIiIi
CisgICAgICAgIHV1aWRHcm91cCA9IHNlbGYuZ2VuZXJhdGVVVUlEKCkKKyAgICAgICAgZ3JvdXAg
PSB7CisgICAgICAgICAgICAnaXNhJzogICAgICAgICdQQlhHcm91cCcsCisgICAgICAgICAgICAn
Y2hpbGRyZW4nOiAgIFtdLAorICAgICAgICAgICAgJ3BhdGgnOiAgICAgICBwYXRoLAorICAgICAg
ICAgICAgJ3NvdXJjZVRyZWUnOiAnIjxncm91cD4iJ30KKyAgICAgICAgc2VsZi5hZGRVVUlEKHV1
aWRHcm91cCwgZ3JvdXApCisgICAgICAgIHBhcmVudENoaWxkTGlzdCA9IHNlbGYuZ2V0TGlzdChw
YXJlbnRHcm91cCwgJ2NoaWxkcmVuJykKKyAgICAgICAgcGFyZW50Q2hpbGRMaXN0LmFwcGVuZCh1
dWlkR3JvdXApCisgICAgICAgIHJldHVybiBncm91cAorCisgICAgZGVmIGFkZE5ld1N1Ykdyb3Vw
cyhzZWxmLCBncm91cCwgc3ViUGF0aCk6CisgICAgICAgICIiIkFkZCBuZXcgcHJvamVjdCBncm91
cHMuCisKKyAgICAgICAgUmVjdXJzaXZlbHkgYWRkcyBhIG5ldyBwcm9qY3Qgc3ViLWdyb3VwIHRv
IGdyb3VwIGZvciBldmVyeSBkaXJlY3RvcnkgZ2l2ZW4gaW4gc3ViUGF0aC4KKyAgICAgICAgIiIi
CisgICAgICAgIGRpckxpc3QgPSByZS5zcGxpdCgnW1xcL10nLCBzdWJQYXRoKQorICAgICAgICBm
b3IgZGlyIGluIGRpckxpc3Q6CisgICAgICAgICAgICBncm91cCA9IHNlbGYuYWRkTmV3U3ViR3Jv
dXAoZ3JvdXAsIGRpcikKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYgZmluZEdyb3Vw
QnlQYXRoKHNlbGYsIGN1cnJlbnRHcm91cCwgcGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoOgor
ICAgICAgICAgICAgcmV0dXJuICcnLCBjdXJyZW50R3JvdXAKKyAgICAgICAgIyBUcnkgdG8gZmlu
ZCBzdWl0YWJsZSBzdWItZ3JvdXAuCisgICAgICAgIGNoaWxkcmVuTGlzdCA9IHNlbGYuZ2V0TGlz
dChjdXJyZW50R3JvdXAsICdjaGlsZHJlbicpCisgICAgICAgIGZvciB1dWlkIGluIGNoaWxkcmVu
TGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHV1aWQsIFhDb2RlVVVJRCk6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJDaGlsZHJlbiBsaXN0
IGNvbnRhaW5zIG5vbi1VVUlEIGVudHJ5ICclcychIiAlIHV1aWQpCisgICAgICAgICAgICBjaGls
ZCA9IHNlbGYuX3V1aWRzW3V1aWRdCisgICAgICAgICAgICBpZiBzZWxmLmdldElTQShjaGlsZCkg
IT0gJ1BCWEdyb3VwJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc291
cmNlVHJlZSA9IGNoaWxkWydzb3VyY2VUcmVlJ10KKyAgICAgICAgICAgICMgT25seSBjb25zaWRl
ciBncm91cHMgdGhhdCBjb250YWluIGEgcGF0aCBhbmQgYXJlIHJlbGF0aXZlIHRvIGl0cyBwYXJl
bnQgZ3JvdXAKKyAgICAgICAgICAgIGlmIHNvdXJjZVRyZWUgPT0gJ1NPVVJDRV9ST09UJzoKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc291cmNlVHJlZSA9PSAnQlVJ
TFRfUFJPRFVDVFNfRElSJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShzb3VyY2VUcmVlLCBYQ29kZVN0cmluZykgYW5kIHNvdXJjZVRyZWUgPT0g
JzxhYnNvbHV0ZT4nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShzb3VyY2VUcmVlLCBYQ29kZVN0cmluZykgb3Igc291cmNlVHJlZSAhPSAn
PGdyb3VwPic6CisgICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCIi
Ikdyb3VwIGNvbnRhaW5zIHVua25vd24gJ3NvdXJjZVRyZWUnIGZpZWxkIHZhbHVlICclcycgLSBT
T1VSQ0VfUk9PVCwgQlVJTFRfUFJPRFVDVFNfRElSLCAiPGdyb3VwPiIgb3IgImFic29sdXRlIiBl
eHBlY3RlZCEiIiIgJSBzb3VyY2VUcmVlKQorICAgICAgICAgICAgaWYgJ3BhdGgnIGluIGNoaWxk
OgorICAgICAgICAgICAgICAgICMgcGF0aCBjb3VsZCBiZSBJRCBvciBQQVRICisgICAgICAgICAg
ICAgICAgY2hpbGRQYXRoID0gY2hpbGRbJ3BhdGgnXQorICAgICAgICAgICAgICAgIGlmIHBhdGgu
c3RhcnRzd2l0aChjaGlsZFBhdGgpOgorICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gcGF0
aFtsZW4oY2hpbGRQYXRoKTpdCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoKSA9PSBs
ZW4oY2hpbGRQYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJywgY2hpbGQK
KyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aFtsZW4oY2hpbGRQYXRoKV0gPT0gJy8nOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZEdyb3VwQnlQYXRoKGNoaWxkLCBw
YXRoW2xlbihjaGlsZFBhdGgpICsgMTpdKQorICAgICAgICAjIGNvdWxkIG5vdCByZXNvbHZlIHBh
dGgsIHJldHVybiBub24tZW1wdHkgc3ViLXBhdGggdG9nZXRoZXIgd2l0aCBjdXJyZW50IGdyb3Vw
CisgICAgICAgIHJldHVybiBwYXRoLCBjdXJyZW50R3JvdXAKKworICAgIGRlZiBkZXRlcm1pbmVG
aWxlVHlwZShzZWxmLCBmaWxlTmFtZSk6CisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCdcLihb
YS16XSspJCcsIGZpbGVOYW1lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIGV4dGVu
c2lvbiA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gJ2NwcCc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdzb3VyY2Vjb2RlLmNwcC5jcHAnLCBzZWxmLl9tYWlu
UHJvamVjdFNvdXJjZXNCdWlsZFBoYXNlVVVJRAorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09
ICdoJzoKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiB3aGVuIHRvIHVzZSAnc291cmNlY29kZS5j
cHAuaCc/CisgICAgICAgICAgICAgICAgcmV0dXJuICdzb3VyY2Vjb2RlLmMuaCcsIHNlbGYuX21h
aW5Qcm9qZWN0SGVhZGVyc0J1aWxkUGhhc2VVVUlECisgICAgICAgICAgICBpZiBleHRlbnNpb24g
PT0gJ21tJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZWNvZGUuY3BwLm9iamNwcCcs
IHNlbGYuX21haW5Qcm9qZWN0U291cmNlc0J1aWxkUGhhc2VVVUlECisgICAgICAgICAgICBpZiBl
eHRlbnNpb24gPT0gJ20nOgorICAgICAgICAgICAgICAgIHJldHVybiAnc291cmNlY29kZS5jLm9i
amMnLCBzZWxmLl9tYWluUHJvamVjdFNvdXJjZXNCdWlsZFBoYXNlVVVJRAorICAgICAgICAgICAg
aWYgZXh0ZW5zaW9uID09ICdwbCcgb3IgZXh0ZW5zaW9uID09ICdwbSc6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICd0ZXh0LnNjcmlwdC5wZXJsJywgc2VsZi5fbWFpblByb2plY3RIZWFkZXJzQnVp
bGRQaGFzZVVVSUQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAncG5nJzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ2ltYWdlLnBuZycsIHNlbGYuX21haW5Qcm9qZWN0UmVzb3VyY2VzQnVp
bGRQaGFzZVVVSUQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAndGlmZic6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdpbWFnZS50aWZmJywgc2VsZi5fbWFpblByb2plY3RSZXNvdXJjZXNC
dWlsZFBoYXNlVVVJRAorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICd0eHQnOgorICAgICAg
ICAgICAgICAgIHJldHVybiAndGV4dCcsIHNlbGYuX21haW5Qcm9qZWN0U291cmNlc0J1aWxkUGhh
c2VVVUlECisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gJ2ZyYW1ld29yayc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICd3cmFwcGVyLmZyYW1ld29yaycsIHNlbGYuX21haW5Qcm9qZWN0RnJh
bWV3b3Jrc0J1aWxkUGhhc2VVVUlECisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gJ25pYic6
CisgICAgICAgICAgICAgICAgcmV0dXJuICd3cmFwcGVyLm5pYicsIHNlbGYuX21haW5Qcm9qZWN0
UmVzb3VyY2VzQnVpbGRQaGFzZVVVSUQKKyAgICAgICAgICAgICMgRklYTUU6IGhhdmVuJ3Qgc2Vl
biB0aGVzZSBleHRlbnNpb25zIGluIGFjdHVhbCBmaWxlcywgZXh0cmFwb2xhdGluZyBmb3IgY29t
cGxldGVuZXNzCisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gJ2NjJyBvciBleHRlbnNpb24g
PT0gJ2N4eCc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzb3VyY2Vjb2RlLmNwcC5jcHAnLCBz
ZWxmLl9tYWluUHJvamVjdFNvdXJjZXNCdWlsZFBoYXNlVVVJRAorICAgICAgICAgICAgaWYgZXh0
ZW5zaW9uID09ICdocHAnIG9yIGV4dGVuc2lvbiA9PSAnaHh4JzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NvdXJjZWNvZGUuY3BwLmgnLCBzZWxmLl9tYWluUHJvamVjdEhlYWRlcnNCdWlsZFBo
YXNlVVVJRAorICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBpcyBhIGd1ZXNzLCBoYXZlbid0IHNl
ZW4gJ3RleHQuc2NyaXB0LnB5dGhvbicgaW4gYWN0dWFsIHByb2plY3QgZmlsZXMhCisgICAgICAg
ICAgICBpZiBleHRlbnNpb24gPT0gJ3B5JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQu
c2NyaXB0LnB5dGhvbicsIHNlbGYuX21haW5Qcm9qZWN0U291cmNlc0J1aWxkUGhhc2VVVUlECisg
ICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiQ291bGQgbm90IGRldGVybWluZSBm
aWxlIHR5cGUgZnJvbSBleHRlbnNpb24gZm9yIGZpbGUgJyVzJyIgJSBmaWxlTmFtZSkKKworICAg
IGRlZiBhZGRGaWxlKHNlbGYsIHJlbFBhdGgsIGZpbGVOYW1lLCBhZGROZXdTdWJHcm91cHM9VHJ1
ZSk6CisgICAgICAgICIiIkFkZCBhIG5ldyBmaWxlIHRvIHRoZSBwcm9qZWN0LgorCisgICAgICAg
IHJlbFBhdGg6IHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgZmlsZSByb290IGRpcmVjdG9y
eSAoU09VUkNFX1JPT1QpCisgICAgICAgIGZpbGVOYW1lOiBmaWxlIG5hbWUgKGluY2wuIGV4dGVu
c2lvbikgb2YgdGhlIG5ldyBmaWxlCisgICAgICAgIGFkZE5ld1N1Ykdyb3VwczogYWRkIG5ldyBw
cm9qZWN0IGdyb3VwcyBpZiBubyBwcm9qZWN0IGdyb3VwcyBleGlzdCBmb3IgdGhlIGdpdmVuIHBh
dGg/CisgICAgICAgICIiIgorICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgdGhhdCB0aGUgZmlsZSBk
b2Vzbid0IGFscmVhZHkgZXhpc3QKKyAgICAgICAgZmlsZVR5cGUsIGJ1aWxkUGhhc2VVVUlEID0g
c2VsZi5kZXRlcm1pbmVGaWxlVHlwZShmaWxlTmFtZSkKKyAgICAgICAgc3ViUGF0aCwgZ3JvdXAg
PSBzZWxmLmZpbmRHcm91cEJ5UGF0aChzZWxmLl91dWlkc1tzZWxmLl9tYWluR3JvdXBVVUlEXSwg
cmVsUGF0aCkKKyAgICAgICAgaWYgc3ViUGF0aDoKKyAgICAgICAgICAgIGlmIGFkZE5ld1N1Ykdy
b3VwczoKKyAgICAgICAgICAgICAgICBncm91cCA9IHNlbGYuYWRkTmV3U3ViR3JvdXBzKGdyb3Vw
LCBzdWJQYXRoKQorICAgICAgICAgICAgICAgIHN1YlBhdGggPSAnJworICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN1YlBhdGggKyAnLycgKyBmaWxlTmFtZQor
ICAgICAgICAjIGFkZCBmaWxlIHJlZmVyZW5jZSBlbnRyeQorICAgICAgICB1dWlkRmlsZVJlZmVy
ZW5jZSA9IHNlbGYuZ2VuZXJhdGVVVUlEKCkKKyAgICAgICAgc2VsZi5hZGRVVUlEKHV1aWRGaWxl
UmVmZXJlbmNlLCB7CisgICAgICAgICAgICAnaXNhJzogICAgICAgICAgICAgICAnUEJYRmlsZVJl
ZmVyZW5jZScsCisgICAgICAgICAgICAnZmlsZUVuY29kaW5nJzogICAgICAnNCcsCisgICAgICAg
ICAgICAnbGFzdEtub3duRmlsZVR5cGUnOiBmaWxlVHlwZSwKKyAgICAgICAgICAgICdwYXRoJzog
ICAgICAgICAgICAgIGZpbGVOYW1lLAorICAgICAgICAgICAgJ3NvdXJjZVRyZWUnOiAgICAgICAg
JyI8Z3JvdXA+Iid9KQorICAgICAgICAjIGFkZCBidWlsZCBmaWxlIGVudHJ5CisgICAgICAgIGJ1
aWxkRmlsZVVVSUQgPSBzZWxmLmdlbmVyYXRlVVVJRCgpCisgICAgICAgIHNlbGYuYWRkVVVJRChi
dWlsZEZpbGVVVUlELCB7CisgICAgICAgICAgICAnaXNhJzogICAgICdQQlhCdWlsZEZpbGUnLAor
ICAgICAgICAgICAgJ2ZpbGVSZWYnOiB1dWlkRmlsZVJlZmVyZW5jZX0pCisgICAgICAgICAgICAj
IEZJWE1FOiBhZGQgInNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsiIHdo
ZXJlIG5lY2Vzc2FyeSEKKyAgICAgICAgIyBhZGQgYnVpbGQgZmlsZSB0byBidWlsZCBwaGFzZQor
ICAgICAgICBidWlsZFBoYXNlID0gc2VsZi5fdXVpZHNbYnVpbGRQaGFzZVVVSURdCisgICAgICAg
IGJ1aWxkUGhhc2VGaWxlcyA9IHNlbGYuZ2V0TGlzdChidWlsZFBoYXNlLCAnZmlsZXMnKQorICAg
ICAgICBidWlsZFBoYXNlRmlsZXMuYXBwZW5kKGJ1aWxkRmlsZVVVSUQpCisgICAgICAgICMgYWRk
IGZpbGUgcmVmZXJlbmNlIHRvIHByb2plY3QgZ3JvdXAKKyAgICAgICAgZ3JvdXBDaGlsZExpc3Qg
PSBzZWxmLmdldExpc3QoZ3JvdXAsICdjaGlsZHJlbicpCisgICAgICAgIGdyb3VwQ2hpbGRMaXN0
LmFwcGVuZCh1dWlkRmlsZVJlZmVyZW5jZSkKKyAgICAgICAgIyB1cGRhdGUgaW50ZXJuYWwgZGF0
YSBzdHJ1Y3R1cmVzCisgICAgICAgIHNlbGYuX3V1aWQyYnVpbGRwaGFzZVVVSURbYnVpbGRGaWxl
VVVJRF0gPSBidWlsZFBoYXNlVVVJRAorCisgICAgIyAtLS0gcGFyc2luZyAtLS0KKworICAgIGRl
ZiByZWFkTmV4dChzZWxmKToKKyAgICAgICAgIyBQYXJzaW5nIHNob3VsZCBzdG9wIHdpdGggdGhl
IGxhc3QgMiBjaGFyYWN0ZXJzIGJlaW5nICd9JyBhbmQgJ1xuJy4KKyAgICAgICAgIyBJZiB0aGF0
IGlzIG5vdCB0aGUgY2FzZSwgcGFyc2luZyB3aWxsIGZhaWwgd2l0aCBhbiB1bmV4cGVjdGVkIFN0
b3BJdGVyYXRpb24gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLl9uZXh0ID0gc2VsZi5fbG9va2Fo
ZWFkCisgICAgICAgIHNlbGYuX2xvb2thaGVhZCA9IHNlbGYuX2l0ZXIubmV4dCgpCisKKyAgICBk
ZWYgbmV4dElzRU9MQ2hhcihzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX25leHQKKyAgICAgICAg
cmV0dXJuIGMgPT0gJ1xuJyBvciBjID09ICdccicKKworICAgIGRlZiBuZXh0SXNXU0NoYXIoc2Vs
Zik6CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAgICAgIHJldHVybiBjID09ICcgJyBvciBj
ID09ICdcdCcgb3IgYyA9PSAnXG4nIG9yIGMgPT0gJ1xyJworCisgICAgZGVmIG5leHRJc0RpZ2l0
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmV4dCA+PSAnMCcgYW5kIHNlbGYuX25leHQg
PD0gJzknCisKKyAgICBkZWYgbmV4dElzVVVJRENoYXIoc2VsZik6CisgICAgICAgIHJldHVybiBY
Q29kZVVVSUQuaXNVVUlEQ2hhcihzZWxmLl9uZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBpc0lESW5pdGlhbENoYXIoYyk6CisgICAgICAgIHJldHVybiAoYyA+PSAnQScgYW5kIGMg
PD0gJ1onKSBvciAoYyA+PSAnYScgYW5kIGMgPD0gJ3onKSBvciBjID09ICdfJworCisgICAgZGVm
IG5leHRJc0lESW5pdGlhbENoYXIoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAg
ICAgIHJldHVybiAoYyA+PSAnQScgYW5kIGMgPD0gJ1onKSBvciAoYyA+PSAnYScgYW5kIGMgPD0g
J3onKSBvciBjID09ICdfJworCisgICAgZGVmIG5leHRJc0lEQ2hhcihzZWxmKToKKyAgICAgICAg
YyA9IHNlbGYuX25leHQKKyAgICAgICAgcmV0dXJuIChjID49ICdBJyBhbmQgYyA8PSAnWicpIG9y
IChjID49ICdhJyBhbmQgYyA8PSAneicpIG9yIChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yIGMg
PT0gJ18nCisKKyAgICBkZWYgbmV4dElzUGF0aENoYXIoc2VsZik6CisgICAgICAgIGMgPSBzZWxm
Ll9uZXh0CisgICAgICAgIHJldHVybiAoYyA+PSAnQScgYW5kIGMgPD0gJ1onKSBvciAoYyA+PSAn
YScgYW5kIGMgPD0gJ3onKSBvciAoYyA+PSAnMCcgYW5kIGMgPD0gJzknKSBvciBjIGluICdfLS8u
JworCisgICAgZGVmIHNraXBXUyhzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5uZXh0SXNXU0No
YXIoKToKKyAgICAgICAgICAgIHNlbGYucmVhZE5leHQoKQorCisgICAgZGVmIHNraXBMaW5lKHNl
bGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5uZXh0SXNFT0xDaGFyKCk6CisgICAgICAgICAg
ICBzZWxmLnJlYWROZXh0KCkKKworICAgIGRlZiBza2lwQ29tbWVudChzZWxmKToKKyAgICAgICAg
aWYgbm90IHNlbGYuX25leHQgPT0gJy8nOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIGlmIHNlbGYuX2xvb2thaGVhZCA9PSAnLyc6ICAgICMgIi8vIi1jb21tZW50LCByZWFkIHRp
bGwgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgIHNlbGYuc2tpcExpbmUoKQorICAgICAgICAgICAg
cmV0dXJuIFRydWUKKyAgICAgICAgaWYgc2VsZi5fbG9va2FoZWFkID09ICcqJzogICMgIi8qIC4u
LiAqLyItY29tbWVudCwgcmVhZCB0aWxsICIqLyIKKyAgICAgICAgICAgIHNlbGYucmVhZE5leHQo
KQorICAgICAgICAgICAgc2VsZi5yZWFkTmV4dCgpCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9u
ZXh0ICE9ICcqJyBvciBzZWxmLl9sb29rYWhlYWQgIT0gJy8nOgorICAgICAgICAgICAgICAgIHNl
bGYucmVhZE5leHQoKQorICAgICAgICAgICAgc2VsZi5yZWFkTmV4dCgpCisgICAgICAgICAgICBz
ZWxmLnJlYWROZXh0KCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgQXNzdW1l
ICcvJyBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJyBvciAnKicgaXMgdGhl
IHN0YXJ0IG9mIGEgcGF0aC4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2tpcFdT
YW5kQ29tbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFdTKCkKKyAgICAgICAgd2hpbGUg
c2VsZi5za2lwQ29tbWVudCgpOgorICAgICAgICAgICAgc2VsZi5za2lwV1MoKQorCisgICAgZGVm
IHNraXBDaGFyKHNlbGYsIGMpOgorICAgICAgICBpZiBzZWxmLl9uZXh0ICE9IGM6CisgICAgICAg
ICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICcl
YycgZW5jb3VudGVyZWQgIC0gJyVjJyBleHBlY3RlZCEiICUgKHNlbGYuX25leHQsIGMpKQorICAg
ICAgICBzZWxmLnJlYWROZXh0KCkKKyAgICAgICAgc2VsZi5za2lwV1NhbmRDb21tZW50cygpCisK
KyAgICBkZWYgcmVhZFBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHdoaWxlIHNlbGYubmV4dElz
UGF0aENoYXIoKToKKyAgICAgICAgICAgIHBhdGggKz0gc2VsZi5fbmV4dAorICAgICAgICAgICAg
c2VsZi5yZWFkTmV4dCgpCisgICAgICAgIGlmIG5vdCBzZWxmLm5leHRJc1dTQ2hhcigpIGFuZCBz
ZWxmLl9uZXh0ICE9ICc7JyBhbmQgc2VsZi5fbmV4dCAhPSAnLCc6CisgICAgICAgICAgICByYWlz
ZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICclYycgZW5jb3Vu
dGVyZWQgYWZ0ZXIgcGF0aCAoPykgdmFsdWUgJyVzJyAtIHdoaXRlIHNwYWNlLCAnOycgb3IgJywn
IGV4cGVjdGVkISIgJSAoc2VsZi5fbmV4dCwgcGF0aCkpCisgICAgICAgIHJldHVybiBwYXRoCisK
KyAgICBkZWYgcmVhZElEKHNlbGYsIGlkLCBtYXlGYWxsQmFja1RvUGF0aCk6CisgICAgICAgIGlm
IGlkID09ICcnIGFuZCBub3Qgc2VsZi5uZXh0SXNJREluaXRpYWxDaGFyKCk6CisgICAgICAgICAg
ICBpZiBtYXlGYWxsQmFja1RvUGF0aDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFk
UGF0aCgnJykKKyAgICAgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZXJu
YWwgZXJyb3IgLSByZWFkSUQgY2FsbGVkIG9uIG5vbi1JRCBzdHJpbmcgJyVzJyEiICUgKGlkICsg
c2VsZi5fbmV4dCkpCisgICAgICAgIHdoaWxlIHNlbGYubmV4dElzSURDaGFyKCk6CisgICAgICAg
ICAgICBpZCArPSBzZWxmLl9uZXh0CisgICAgICAgICAgICBzZWxmLnJlYWROZXh0KCkKKyAgICAg
ICAgaWYgc2VsZi5uZXh0SXNQYXRoQ2hhcigpOgorICAgICAgICAgICAgaWYgbWF5RmFsbEJhY2tU
b1BhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZFBhdGgoaWQpCisgICAgICAg
ICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIklkZW50aWZpZXIgZm9sbG93ZWQgYnkg
aWxsZWdhbCBjaGFyYWN0ZXIgJyVjJyEiICUgc2VsZi5fbmV4dCkKKyAgICAgICAgcmV0dXJuIGlk
CisKKyAgICBkZWYgcmVhZFVVSUQoc2VsZiwgdXVpZHN0ciwgbWF5RmFsbEJhY2tUb0lELCBtYXlG
YWxsQmFja1RvUGF0aCk6CisgICAgICAgIHdoaWxlIGxlbih1dWlkc3RyKSA8IDI0IGFuZCBzZWxm
Lm5leHRJc1VVSURDaGFyKCk6CisgICAgICAgICAgICB1dWlkc3RyICs9IHNlbGYuX25leHQKKyAg
ICAgICAgICAgIHNlbGYucmVhZE5leHQoKQorICAgICAgICBpZiBzZWxmLm5leHRJc0lEQ2hhcigp
OgorICAgICAgICAgICAgaWYgbWF5RmFsbEJhY2tUb0lEIGFuZCAodXVpZHN0ciA9PSAnJyBvciBz
ZWxmLmlzSURJbml0aWFsQ2hhcih1dWlkc3RyWzBdKSk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYucmVhZElEKHV1aWRzdHIsIG1heUZhbGxCYWNrVG9QYXRoKQorICAgICAgICAgICAgcmFp
c2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJVVUlEICg/KSAnJXMnIGhhcyBjaGFyYWN0ZXIgJyVj
JyBmb2xsb3dpbmchIiAlICh1dWlkc3RyLCBzZWxmLl9uZXh0KSkKKyAgICAgICAgaWYgc2VsZi5u
ZXh0SXNQYXRoQ2hhcigpOgorICAgICAgICAgICAgaWYgbWF5RmFsbEJhY2tUb1BhdGg6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZFBhdGgodXVpZHN0cikKKyAgICAgICAgICAgIHJh
aXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiVVVJRCAoPykgJyVzJyBoYXMgY2hhcmFjdGVyICcl
YycgZm9sbG93aW5nISIgJSAodXVpZHN0ciwgc2VsZi5fbmV4dCkpCisgICAgICAgIHNlbGYuc2tp
cFdTYW5kQ29tbWVudHMoKQorICAgICAgICByZXR1cm4gWENvZGVVVUlEKHV1aWRzdHIpCisKKyAg
ICBkZWYgcmVhZEludGVnZXIoc2VsZiwgbWF5RmFsbEJhY2tUb1VVSUQsIG1heUZhbGxCYWNrVG9Q
YXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYubmV4dElzRGlnaXQoKToKKyAgICAgICAgICAgIHJh
aXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3IgLSByZWFkSW50ZWdlciBj
YWxsZWQgb24gbm9uLWludGVnZXIgY2hhcmFjdGVyICclYychIiAlIHNlbGYuX25leHQpCisgICAg
ICAgIGludGVnZXIgPSAnJworICAgICAgICB3aGlsZSBzZWxmLm5leHRJc0RpZ2l0KCk6CisgICAg
ICAgICAgICBpbnRlZ2VyICs9IHNlbGYuX25leHQKKyAgICAgICAgICAgIHNlbGYucmVhZE5leHQo
KQorICAgICAgICBpZiBzZWxmLm5leHRJc1VVSURDaGFyKCk6CisgICAgICAgICAgICBpZiBtYXlG
YWxsQmFja1RvVVVJRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkVVVJRChpbnRl
Z2VyLCBGYWxzZSwgbWF5RmFsbEJhY2tUb1BhdGgpCisgICAgICAgICAgICByYWlzZSBYQ29kZVBy
b2plY3RFeGNlcHRpb24oIkludGVnZXIgKD8pICclcycgaGFzIGNoYXJhY3RlciAnJWMnIGZvbGxv
d2luZyEiICUgKGludGVnZXIsIHNlbGYuX25leHQpKQorICAgICAgICBpZiBzZWxmLm5leHRJc1Bh
dGhDaGFyKCk6CisgICAgICAgICAgICBpZiBtYXlGYWxsQmFja1RvUGF0aDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5yZWFkUGF0aChpbnRlZ2VyKQorICAgICAgICAgICAgcmFpc2UgWENv
ZGVQcm9qZWN0RXhjZXB0aW9uKCJJbnRlZ2VyICg/KSAnJXMnIGhhcyBjaGFyYWN0ZXIgJyVjJyBm
b2xsb3dpbmchIiAlIChpbnRlZ2VyLCBzZWxmLl9uZXh0KSkKKyAgICAgICAgaWYgbGVuKGludGVn
ZXIpID09IDI0IGFuZCBtYXlGYWxsQmFja1RvVVVJRDoKKyAgICAgICAgICAgICMgc3RyaW5nIG9m
IDI0IGRpZ2l0cyAtIGFzc3VtZSBVVUlECisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkVVVJ
RChpbnRlZ2VyLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHJldHVybiBpbnRlZ2VyCisKKyAgICBk
ZWYgcmVhZFN0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5za2lwQ2hhcignIicpCisgICAgICAg
IHN0cnZhbCA9ICcnCisgICAgICAgIHdoaWxlIHNlbGYuX25leHQgIT0gJyInOgorICAgICAgICAg
ICAgaWYgc2VsZi5fbmV4dCA9PSAnXFwnOgorICAgICAgICAgICAgICAgICMganVzdCByZWFkIG5l
eHQgY2hhcmFjdGVyLCB3aGF0ZXZlciBpdCBpcworICAgICAgICAgICAgICAgIHN0cnZhbCArPSAn
XFwnCisgICAgICAgICAgICAgICAgc2VsZi5yZWFkTmV4dCgpCisgICAgICAgICAgICBzdHJ2YWwg
Kz0gc2VsZi5fbmV4dAorICAgICAgICAgICAgc2VsZi5yZWFkTmV4dCgpCisgICAgICAgIHNlbGYu
cmVhZE5leHQoKQorICAgICAgICByZXR1cm4gWENvZGVTdHJpbmcoc3RydmFsKQorCisgICAgZGVm
IHJlYWRWYWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5za2lwV1NhbmRDb21tZW50cygpCisgICAg
ICAgIGlmIHNlbGYuX25leHQgPT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZE9i
amVjdCgpCisgICAgICAgIGlmIHNlbGYuX25leHQgPT0gJygnOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYucmVhZExpc3QoKQorICAgICAgICBpZiBzZWxmLl9uZXh0ID09ICciJzoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJlYWRTdHJpbmcoKQorICAgICAgICBpZiBzZWxmLm5leHRJc0RpZ2l0
KCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkSW50ZWdlcihUcnVlLCBUcnVlKQorICAg
ICAgICBpZiBzZWxmLm5leHRJc1VVSURDaGFyKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5y
ZWFkVVVJRCgnJywgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5uZXh0SXNJREluaXRpYWxD
aGFyKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkSUQoJycsIFRydWUpCisgICAgICAg
IGlmIHNlbGYubmV4dElzUGF0aENoYXIoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRQ
YXRoKCcnKQorICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIklsbGVnYWwgY2hh
cmFjdGVyICclYycgZW5jb3VudGVyZWQgaW4gdmFsdWUgLSBvYmplY3QsIGxpc3QsIGludGVnZXIs
IHN0cmluZywgVVVJRCwgSUQgb3IgcGF0aCBleHBlY3RlZCEiICUgc2VsZi5fbmV4dCkKKworICAg
IGRlZiByZWFkTGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5za2lwQ2hhcignKCcpCisgICAgICAg
IHNlbGYuc2tpcFdTYW5kQ29tbWVudHMoKQorICAgICAgICBsaXN0ID0gW10KKyAgICAgICAgd2hp
bGUgc2VsZi5fbmV4dCAhPSAnKSc6CisgICAgICAgICAgICB2YWwgPSBzZWxmLnJlYWRWYWx1ZSgp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZCh2YWwpCisgICAgICAgICAgICBzZWxmLnNraXBXU2Fu
ZENvbW1lbnRzKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoJywnKQorICAgICAgICBzZWxm
LnJlYWROZXh0KCkKKyAgICAgICAgcmV0dXJuIGxpc3QKKworICAgIGRlZiByZWFkT2JqZWN0KHNl
bGYpOgorICAgICAgICBzZWxmLnNraXBDaGFyKCd7JykKKyAgICAgICAgb2JqID0ge30KKyAgICAg
ICAgd2hpbGUgc2VsZi5fbmV4dCAhPSAnfSc6CisgICAgICAgICAgICBpZCA9IHNlbGYucmVhZElE
KCcnLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuc2tpcFdTYW5kQ29tbWVudHMoKQorICAgICAg
ICAgICAgc2VsZi5za2lwQ2hhcignPScpCisgICAgICAgICAgICBvYmpbaWRdID0gc2VsZi5yZWFk
VmFsdWUoKQorICAgICAgICAgICAgc2VsZi5za2lwV1MoKQorICAgICAgICAgICAgc2VsZi5za2lw
Q2hhcignOycpCisgICAgICAgICMgc2tpcCBjbG9zaW5nICd9JworICAgICAgICBzZWxmLnJlYWRO
ZXh0KCkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJlYWRVVUlEc09iamVjdChzZWxm
KToKKyAgICAgICAgc2VsZi5za2lwQ2hhcigneycpCisgICAgICAgIGRlZmluaXRpb24gPSB7fQor
ICAgICAgICB3aGlsZSBzZWxmLl9uZXh0ICE9ICd9JzoKKyAgICAgICAgICAgIHV1aWQgPSBzZWxm
LnJlYWRVVUlEKCcnLCBGYWxzZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLnNraXBXU2FuZENv
bW1lbnRzKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoJz0nKQorICAgICAgICAgICAgZGVm
aW5pdGlvbiA9IHNlbGYucmVhZE9iamVjdCgpCisgICAgICAgICAgICBzZWxmLnNraXBXUygpCisg
ICAgICAgICAgICBzZWxmLnNraXBDaGFyKCc7JykKKyAgICAgICAgICAgIHNlbGYuYWRkVVVJRCh1
dWlkLCBkZWZpbml0aW9uKQorICAgICAgICAgICAgIyBwcm9jZXNzICdmaWxlcycgaWYgcHJlc2Vu
dAorICAgICAgICAgICAgaWYgJ2ZpbGVzJyBpbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAg
IGxpc3RGaWxlcyA9IHNlbGYuZ2V0TGlzdChkZWZpbml0aW9uLCAnZmlsZXMnKQorICAgICAgICAg
ICAgICAgIGZvciBmaWxlVVVJRCBpbiBsaXN0RmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKGZpbGVVVUlELCBYQ29kZVVVSUQpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJEZWZpbml0aW9uICdmaWxlcycgbGlz
dCBmb3IgVVVJRCAnJXMnIGNvbnRhaW5zIG5vbi1VVUlEIGVudHJ5ICclcychIiAlICh1dWlkLCBz
dHIoZmlsZVVVSUQpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZVVVSUQgaW4gc2VsZi5f
dXVpZDJidWlsZHBoYXNlVVVJRCBhbmQgdXVpZCAhPSBzZWxmLl91dWlkMmJ1aWxkcGhhc2VVVUlE
W2ZpbGVVVUlEXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4
Y2VwdGlvbigiRmlsZSBkZWZpbml0aW9uIHdpdGggVVVJRCAnJXMnIGxpc3RlZCBpbiAyKyBidWls
ZHBoYXNlczogJyVzJyBhbmQgJyVzJyEiICUgKGZpbGVVVUlELCBzZWxmLl91dWlkMmJ1aWxkcGhh
c2VVVUlEW2ZpbGVVVUlEXSwgdXVpZCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3V1aWQy
YnVpbGRwaGFzZVVVSURbZmlsZVVVSURdID0gdXVpZAorICAgICAgICAgICAgIyBwcm9jZXNzICdi
dWlsZENvbmZpZ3VyYXRpb25MaXN0JworICAgICAgICAgICAgaWYgJ2J1aWxkQ29uZmlndXJhdGlv
bkxpc3QnIGluIGRlZmluaXRpb246CisgICAgICAgICAgICAgICAgYnVpbGRDb25mID0gc2VsZi5n
ZXRVVUlEKGRlZmluaXRpb24sICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JykKKyAgICAgICAgICAg
ICAgICBpZiBidWlsZENvbmYgaW4gc2VsZi5fYnVpbGRDb25mTGlzdDJVVUlEIGFuZCB1dWlkICE9
IHNlbGYuX2J1aWxkQ29uZkxpc3QyVVVJRFtidWlsZENvbmZdOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIlVVSUQgJyVzJyBsaXN0ZWQgaW4gMisgJ2J1
aWxkQ29uZmlndXJhdGlvbkxpc3QnIGVudHJpZXM6ICclcycgYW5kICclcychIiAlIChidWlsZENv
bmYsIHNlbGYuX2J1aWxkQ29uZkxpc3QyVVVJRFtidWlsZENvbmZdLCB1dWlkKSkKKyAgICAgICAg
ICAgICAgICBzZWxmLl9idWlsZENvbmZMaXN0MlVVSURbYnVpbGRDb25mXSA9IHV1aWQKKyAgICAg
ICAgICAgICMgZXh0cmFjdCAnbWFpbkdyb3VwJyBpZiBwcmVzZW50CisgICAgICAgICAgICBpZiAn
bWFpbkdyb3VwJyBpbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIG1haW5Hcm91cFVVSUQg
PSBzZWxmLmdldFVVSUQoZGVmaW5pdGlvbiwgJ21haW5Hcm91cCcpCisgICAgICAgICAgICAgICAg
aWYgc2VsZi5fbWFpbkdyb3VwVVVJRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQ
cm9qZWN0RXhjZXB0aW9uKCJtYWluR3JvdXAgZGVmaW5lZCAyKyB0aW1lczogJyVzJyBhbmQgJyVz
JyEiICUgKG1haW5Hcm91cFVVSUQsIHNlbGYuX21haW5Hcm91cFVVSUQpKQorICAgICAgICAgICAg
ICAgIHNlbGYuX21haW5Hcm91cFVVSUQgPSBtYWluR3JvdXBVVUlECisgICAgICAgICAgICAjIGV4
dHJhY3QgbmF0aXZlIHRhcmdldCBvZiB0aGUgbWFpbiBwcm9qZWN0CisgICAgICAgICAgICBpc2Eg
PSBzZWxmLmdldElTQShkZWZpbml0aW9uKQorICAgICAgICAgICAgaWYgaXNhID09ICdQQlhOYXRp
dmVUYXJnZXQnOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldFN0cmluZyhkZWZpbml0
aW9uLCAnbmFtZScpCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSBzZWxmLl9wcm9qZWN0TmFt
ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbWFpblByb2plY3ROYXRpdmVUYXJnZXQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIk5h
dGl2ZSB0YXJnZXQgZm9yIG1haW4gcHJvamVjdCBkZWZpbmVkIDIrIHRpbWVzISIpCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX21haW5Qcm9qZWN0TmF0aXZlVGFyZ2V0ID0gZGVmaW5pdGlvbgor
ICAgICAgICAjIHNraXAgY2xvc2luZyAnfScgY2hhcmFjdGVyCisgICAgICAgIHNlbGYucmVhZE5l
eHQoKQorCisgICAgZGVmIHJlYWRNYWluT2JqZWN0KHNlbGYpOgorICAgICAgICBzZWxmLnNraXBX
U2FuZENvbW1lbnRzKCkKKyAgICAgICAgc2VsZi5za2lwQ2hhcigneycpCisgICAgICAgIHdoaWxl
IHNlbGYuX25leHQgIT0gJ30nOgorICAgICAgICAgICAgaWQgPSBzZWxmLnJlYWRJRCgnJywgRmFs
c2UpCisgICAgICAgICAgICBzZWxmLnNraXBXU2FuZENvbW1lbnRzKCkKKyAgICAgICAgICAgIHNl
bGYuc2tpcENoYXIoJz0nKQorICAgICAgICAgICAgIyByZWFkIHZhbHVlLCBzcGVjaWFsIGNhc2Ug
Zm9yICdvYmplY3RzJworICAgICAgICAgICAgaWYgaWQgPT0gJ29iamVjdHMnOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3BieFsnb2JqZWN0cyddID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLnJl
YWRVVUlEc09iamVjdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
X3BieFtpZF0gPSBzZWxmLnJlYWRWYWx1ZSgpCisgICAgICAgICAgICBzZWxmLnNraXBXUygpCisg
ICAgICAgICAgICBzZWxmLnNraXBDaGFyKCc7JykKKyAgICAgICAgIyBpZ25vcmUgY2xvc2luZyAn
fScgLSBzdG9wIGhlcmUgdG8gYXZvaWQgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24KKworICAgIGRl
ZiBmaW5kQnVpbGRQaGFzZVVVSUQoc2VsZiwgbGlzdCwgaXNhKToKKyAgICAgICAgZm9yIHV1aWQg
aW4gbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHV1aWQsIFhDb2RlVVVJRCk6
CisgICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJmaW5kQnVpbGRQ
aGFzZTogYnVpbGQgcGhhc2UgbGlzdCBmb3IgbWFpbiBuYXRpdmUgdGFyZ2V0IGNvbnRhaW5zIG5v
bi1VVUlEICclcychIiAlIHV1aWQpCisgICAgICAgICAgICBpZiBzZWxmLmdldElTQShzZWxmLl91
dWlkc1t1dWlkXSkgPT0gaXNhOgorICAgICAgICAgICAgICAgIHJldHVybiB1dWlkCisgICAgICAg
IHJldHVybiBYQ29kZVVVSUQoKQorCisgICAgZGVmIHBvc3RQcm9jZXNzKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl9tYWluUHJvamVjdE5hdGl2ZVRhcmdldDoKKyAgICAgICAgICAgIG5hdGl2ZVRh
cmdldEJ1aWxkUGhhc2VzID0gc2VsZi5nZXRMaXN0KHNlbGYuX21haW5Qcm9qZWN0TmF0aXZlVGFy
Z2V0LCAnYnVpbGRQaGFzZXMnKQorICAgICAgICAgICAgc2VsZi5fbWFpblByb2plY3RTb3VyY2Vz
QnVpbGRQaGFzZVVVSUQgPSBzZWxmLmZpbmRCdWlsZFBoYXNlVVVJRChuYXRpdmVUYXJnZXRCdWls
ZFBoYXNlcywgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJykKKyAgICAgICAgICAgIHNlbGYuX21haW5Q
cm9qZWN0SGVhZGVyc0J1aWxkUGhhc2VVVUlEID0gc2VsZi5maW5kQnVpbGRQaGFzZVVVSUQobmF0
aXZlVGFyZ2V0QnVpbGRQaGFzZXMsICdQQlhIZWFkZXJzQnVpbGRQaGFzZScpCisgICAgICAgICAg
ICBzZWxmLl9tYWluUHJvamVjdFJlc291cmNlc0J1aWxkUGhhc2VVVUlEID0gc2VsZi5maW5kQnVp
bGRQaGFzZVVVSUQobmF0aXZlVGFyZ2V0QnVpbGRQaGFzZXMsICdQQlhSZXNvdXJjZXNCdWlsZFBo
YXNlJykKKyAgICAgICAgICAgIHNlbGYuX21haW5Qcm9qZWN0RnJhbWV3b3Jrc0J1aWxkUGhhc2VV
VUlEID0gc2VsZi5maW5kQnVpbGRQaGFzZVVVSUQobmF0aXZlVGFyZ2V0QnVpbGRQaGFzZXMsICdQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZScpCisKKyAgICBkZWYgcGFyc2VQcm9qZWN0RmlsZShzZWxm
LCBmaWxlUGF0aCwgcHJvamVjdE5hbWU9JycpOgorICAgICAgICAiIiJSZWFkIGEgcHJvamVjdCBm
aWxlIGZyb20gZGlzYyBhbmQgcGFyc2UgaXQuCisKKyAgICAgICAgZmlsZVBhdGggbXVzdCBjb250
YWluIHRoZSBwcm9qZWN0IGZpbGUgaXRzZWxmLCBub3QganVzdCBhIGRpcmVjdG9yeS4KKyAgICAg
ICAgVGhlIHByb2plY3QgbmFtZSBpcyBkZXJpdmVkIGZyb20gdGhlIGZpbGUgbmFtZSB1bmxlc3Mg
ZXhwbGljaXRseSBzcGVjaWZpZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNsZWFyUHJv
amVjdERhdGEoKQorICAgICAgICBzZWxmLl9wcm9qZWN0TmFtZSA9IHByb2plY3ROYW1lIG9yIHNl
bGYuZXh0cmFjdFByb2plY3ROYW1lRnJvbUZpbGVQYXRoKGZpbGVQYXRoKSBvciAnVW5rbm93bicK
KyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihmaWxlUGF0aCwgJ3InLCAndXRmOCcsICdyZXBsYWNl
JykgYXMgc2VsZi5fZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2NvbnRlbnQgPSBzZWxmLl9maWxl
LnJlYWQoKQorICAgICAgICAgICAgc2VsZi5faXRlciA9IGl0ZXIoc2VsZi5fY29udGVudCkKKyAg
ICAgICAgICAgIHNlbGYuX2xvb2thaGVhZCA9IHNlbGYuX2l0ZXIubmV4dCgpCisgICAgICAgICAg
ICBzZWxmLnJlYWROZXh0KCkKKyAgICAgICAgICAgIHNlbGYucmVhZE1haW5PYmplY3QoKQorICAg
ICAgICAgICAgc2VsZi5wb3N0UHJvY2VzcygpCisKKyAgICAjIC0tLSB3cml0aW5nIC0tLQorCisg
ICAgZGVmIGdlbmVyYXRlQ29tbWVudEZvclVVSUQoc2VsZiwgdXVpZCk6CisgICAgICAgIGRlZmlu
aXRpb24gPSBzZWxmLl91dWlkc1t1dWlkXQorICAgICAgICBpZiAnbmFtZScgaW4gZGVmaW5pdGlv
bjoKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGVmaW5pdGlvblsnbmFtZSddKQorICAgICAgICBp
ZiAncGF0aCcgaW4gZGVmaW5pdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGVmaW5pdGlv
blsncGF0aCddKQorICAgICAgICBpZiAnZmlsZVJlZicgaW4gZGVmaW5pdGlvbjoKKyAgICAgICAg
ICAgIGZpbGVSZWYgPSBzZWxmLmdldFVVSUQoZGVmaW5pdGlvbiwgJ2ZpbGVSZWYnKQorICAgICAg
ICAgICAgZmlsZU5hbWUgPSBzZWxmLmdldENvbW1lbnRGb3JVVUlEKGZpbGVSZWYpCisgICAgICAg
ICAgICBpZiBub3QgdXVpZCBpbiBzZWxmLl91dWlkMmJ1aWxkcGhhc2VVVUlEOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3IgZ2VuZXJh
dGluZyBjb21tZW50OiBObyBidWlsZCBwaGFzZSBmb3VuZCBmb3IgVVVJRCAnJXMnIChmaWxlUmVm
ICclcycpISIgJSAodXVpZCwgZmlsZVJlZikpCisgICAgICAgICAgICBidWlsZFBoYXNlID0gc2Vs
Zi5nZXRDb21tZW50Rm9yVVVJRChzZWxmLl91dWlkMmJ1aWxkcGhhc2VVVUlEW3V1aWRdKQorICAg
ICAgICAgICAgcmV0dXJuIGZpbGVOYW1lICsgIiBpbiAiICsgYnVpbGRQaGFzZQorICAgICAgICBp
c2EgPSBzZWxmLmdldElTQShkZWZpbml0aW9uKQorICAgICAgICBpZiBpc2EgPT0gJ1BCWEhlYWRl
cnNCdWlsZFBoYXNlJzoKKyAgICAgICAgICAgIHJldHVybiAiSGVhZGVycyIKKyAgICAgICAgaWYg
aXNhID09ICdQQlhTb3VyY2VzQnVpbGRQaGFzZSc6CisgICAgICAgICAgICByZXR1cm4gIlNvdXJj
ZXMiCisgICAgICAgIGlmIGlzYSA9PSAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSc6CisgICAgICAg
ICAgICByZXR1cm4gIlJlc291cmNlcyIKKyAgICAgICAgaWYgaXNhID09ICdQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSc6CisgICAgICAgICAgICByZXR1cm4gIkZyYW1ld29ya3MiCisgICAgICAgIGlm
IGlzYSA9PSAnUEJYUHJvamVjdCc6CisgICAgICAgICAgICByZXR1cm4gIlByb2plY3Qgb2JqZWN0
IgorICAgICAgICBpZiBpc2EgPT0gJ1hDQ29uZmlndXJhdGlvbkxpc3QnOgorICAgICAgICAgICAg
aWYgbm90IHV1aWQgaW4gc2VsZi5fYnVpbGRDb25mTGlzdDJVVUlEOgorICAgICAgICAgICAgICAg
IHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3IgZ2VuZXJhdGluZyBj
b21tZW50OiBObyBidWlsZCBjb25maWd1cmF0aW9uIHRhcmdldCBmb3VuZCBmb3IgVVVJRCAnJXMn
ISIgJSB1dWlkKQorICAgICAgICAgICAgdGFyZ2V0VVVJRCA9IHNlbGYuX2J1aWxkQ29uZkxpc3Qy
VVVJRFt1dWlkXQorICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5fdXVpZHNbdGFyZ2V0VVVJRF0K
KyAgICAgICAgICAgIHRhcmdldElzQSA9IHNlbGYuZ2V0SVNBKHRhcmdldCkKKyAgICAgICAgICAg
IHRhcmdldENvbW1lbnQgPSBzZWxmLmdldENvbW1lbnRGb3JVVUlEKHRhcmdldFVVSUQpCisgICAg
ICAgICAgICBpZiB0YXJnZXRDb21tZW50ID09ICJQcm9qZWN0IG9iamVjdCI6CisgICAgICAgICAg
ICAgICAgdGFyZ2V0Q29tbWVudCA9IHNlbGYuX3Byb2plY3ROYW1lCisgICAgICAgICAgICByZXR1
cm4gJ0J1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgJXMgIiVzIicgJSAodGFyZ2V0SXNBLCB0
YXJnZXRDb21tZW50KQorICAgICAgICByZXR1cm4gaXNhCisKKyAgICBkZWYgZ2V0Q29tbWVudEZv
clVVSUQoc2VsZiwgdXVpZCk6CisgICAgICAgIGlmIHV1aWQgbm90IGluIHNlbGYuX3V1aWQyY29t
bWVudENhY2hlOgorICAgICAgICAgICAgc2VsZi5fdXVpZDJjb21tZW50Q2FjaGVbdXVpZF0gPSBz
ZWxmLmdlbmVyYXRlQ29tbWVudEZvclVVSUQodXVpZCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3V1
aWQyY29tbWVudENhY2hlW3V1aWRdCisKKyAgICBkZWYgd3JpdGVVVUlEQW5kQ29tbWVudChzZWxm
LCB1dWlkKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHIodXVpZCkpCisgICAgICAgIHNl
bGYuX2ZpbGUud3JpdGUoIiAvKiAiKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKHNlbGYuZ2V0
Q29tbWVudEZvclVVSUQodXVpZCkpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiAqLyIpCisK
KyAgICBkZWYgZ2V0U29ydFR5cGVGb3JVVUlEKHNlbGYsIHV1aWQpOgorICAgICAgICBkZWZpbml0
aW9uID0gc2VsZi5fdXVpZHNbdXVpZF0KKyAgICAgICAgaXNhID0gc2VsZi5nZXRJU0EoZGVmaW5p
dGlvbikKKyAgICAgICAgIyBzb3J0IGdyb3VwcyBiZWZvcmUgZmlsZXMKKyAgICAgICAgaWYgaXNh
ID09ICdQQlhHcm91cCc6CisgICAgICAgICAgICByZXR1cm4gJ0EnCisgICAgICAgIGlmIGlzYSA9
PSAnUEJYVmFyaWFudEdyb3VwJzoKKyAgICAgICAgICAgIHJldHVybiAnQScKKyAgICAgICAgaWYg
aXNhID09ICdQQlhCdWlsZEZpbGUnOgorICAgICAgICAgICAgcmV0dXJuICdGJworICAgICAgICBp
ZiBpc2EgPT0gJ1BCWEZpbGVSZWZlcmVuY2UnOgorICAgICAgICAgICAgcmV0dXJuICdGJworICAg
ICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0ZWQgSVNBICclcycgZm9y
IFVVSUQgJyVzJyBpbiBzb3J0ZWQgbGlzdCEiICUgKGlzYSwgc3RyKHV1aWQpKSkKKworICAgIGRl
ZiB3cml0ZUxpc3RTb3J0ZWRNdWx0aUxpbmUoc2VsZiwgbGlzdCwgaW5kZW50KToKKyAgICAgICAg
c2VsZi5fZmlsZS53cml0ZSgiKFxuIikKKyAgICAgICAgc3ViSW5kZW50ID0gaW5kZW50ICsgJ1x0
JworICAgICAgICBkZWNvcmF0ZWRMaXN0ID0gWyh1LCBzZWxmLmdldFNvcnRUeXBlRm9yVVVJRCh1
KSArIHNlbGYuZ2V0Q29tbWVudEZvclVVSUQodSkubG93ZXIoKSkgZm9yIHUgaW4gbGlzdF0KKyAg
ICAgICAgc29ydGVkTGlzdCA9IHNvcnRlZChkZWNvcmF0ZWRMaXN0LCBrZXk9b3BlcmF0b3IuaXRl
bWdldHRlcigxKSkKKyAgICAgICAgZm9yIHV1aWQsIHNvcnRLZXkgaW4gc29ydGVkTGlzdDoKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3ViSW5kZW50KQorICAgICAgICAgICAgc2VsZi53
cml0ZVVVSURBbmRDb21tZW50KHV1aWQpCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIs
XG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2VsZi5fZmls
ZS53cml0ZSgiKSIpCisKKyAgICBkZWYgd3JpdGVMaXN0VW5zb3J0ZWRTaW5nbGVMaW5lKHNlbGYs
IGxpc3QpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIoIikKKyAgICAgICAgZm9yIHZhbHVl
IGluIGxpc3Q6CisgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUsICcnLCBUcnVlKQor
ICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiLCAiKQorICAgICAgICBzZWxmLl9maWxlLndy
aXRlKCIpIikKKworICAgIGRlZiB3cml0ZUxpc3RVbnNvcnRlZE11bHRpTGluZShzZWxmLCBsaXN0
LCBpbmRlbnQpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIoXG4iKQorICAgICAgICBzdWJJ
bmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGZvciB2YWx1ZSBpbiBsaXN0OgorICAgICAg
ICAgICAgc2VsZi5fZmlsZS53cml0ZShzdWJJbmRlbnQpCisgICAgICAgICAgICBzZWxmLndyaXRl
VmFsdWUodmFsdWUsIHN1YkluZGVudCwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9maWxlLndy
aXRlKCIsXG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2Vs
Zi5fZmlsZS53cml0ZSgiKSIpCisKKyAgICBkZWYgd3JpdGVTaW1wbGVPYmplY3RTaW5nbGVMaW5l
KHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoInsiKQorICAgICAgICBmb3Ig
a2V5IGluIHNvcnRlZChvYmoua2V5cygpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUo
a2V5KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiID0gIikKKyAgICAgICAgICAgIHNl
bGYud3JpdGVWYWx1ZShvYmpba2V5XSwgJycsIFRydWUpCisgICAgICAgICAgICBzZWxmLl9maWxl
LndyaXRlKCI7ICIpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIn0iKQorCisgICAgZGVmIHdy
aXRlU2ltcGxlT2JqZWN0TXVsdGlMaW5lKHNlbGYsIG9iaiwgaW5kZW50KToKKyAgICAgICAgc2Vs
Zi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViSW5kZW50ID0gaW5kZW50ICsgJ1x0Jwor
ICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygpKToKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGUud3JpdGUoc3ViSW5kZW50KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShrZXkp
CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgc2VsZi53
cml0ZVZhbHVlKG9ialtrZXldLCBzdWJJbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5f
ZmlsZS53cml0ZSgiO1xuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAg
ICAgIHNlbGYuX2ZpbGUud3JpdGUoIn0iKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBp
c2FTb3J0KHMpOgorICAgICAgICBpZiBzID09ICdpc2EnOgorICAgICAgICAgICAgcmV0dXJuICcn
CisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgd3JpdGVPYmplY3RXaXRoSVNBU2luZ2xlTGlu
ZShzZWxmLCBvYmopOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ7IikKKyAgICAgICAgZm9y
IGtleSBpbiBzb3J0ZWQob2JqLmtleXMoKSwga2V5PWxhbWJkYSBzOiBYQ29kZVByb2ouaXNhU29y
dChzKSk6CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGtleSkKKyAgICAgICAgICAgIHNl
bGYuX2ZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUob2JqW2tl
eV0sICcnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiOyAiKQorICAgICAg
ICBzZWxmLl9maWxlLndyaXRlKCJ9IikKKworICAgIGRlZiB3cml0ZU9iamVjdFdpdGhJU0FNdWx0
aUxpbmUoc2VsZiwgb2JqLCBpbmRlbnQsIHNvcnRDaGlsZHJlbkFuZEZpbGVzKToKKyAgICAgICAg
c2VsZi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViSW5kZW50ID0gaW5kZW50ICsgJ1x0
JworICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygpLCBrZXk9bGFtYmRhIHM6IFhD
b2RlUHJvai5pc2FTb3J0KHMpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3ViSW5k
ZW50KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShrZXkpCisgICAgICAgICAgICBzZWxm
Ll9maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgaWYgKGtleSA9PSAnY2hpbGRyZW4nIG9y
IGtleSA9PSAnZmlsZXMnKSBhbmQgc29ydENoaWxkcmVuQW5kRmlsZXM6CisgICAgICAgICAgICAg
ICAgbGlzdCA9IHNlbGYuZ2V0TGlzdChvYmosIGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLndy
aXRlTGlzdFNvcnRlZE11bHRpTGluZShsaXN0LCBzdWJJbmRlbnQpCisgICAgICAgICAgICBlbGlm
IGtleSA9PSAncmVtb3RlR2xvYmFsSURTdHJpbmcnOgorICAgICAgICAgICAgICAgICMgRm9yIHNv
bWUgcmVhc29uLCAncmVtb3RlR2xvYmFsSURTdHJpbmcnIHdyaXRlcyB0aGUgVVVJRCB3aXRob3V0
IGNvbW1lbnQKKyAgICAgICAgICAgICAgICB1dWlkID0gc2VsZi5nZXRVVUlEKG9iaiwgJ3JlbW90
ZUdsb2JhbElEU3RyaW5nJykKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cih1
dWlkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVl
KG9ialtrZXldLCBzdWJJbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0
ZSgiO1xuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYu
X2ZpbGUud3JpdGUoIn0iKQorCisgICAgZGVmIHdyaXRlVVVJRHNPYmplY3Qoc2VsZiwgaW5kZW50
KToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViSW5kZW50ID0g
aW5kZW50ICsgJ1x0JworICAgICAgICBmb3IgaXNhIGluIHNvcnRlZChzZWxmLl9pc2EyVVVJRHMu
a2V5cygpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIlxuLyogQmVnaW4gIikKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoaXNhKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53
cml0ZSgiIHNlY3Rpb24gKi9cbiIpCisgICAgICAgICAgICBmb3IgdXVpZCBpbiBzb3J0ZWQoc2Vs
Zi5faXNhMlVVSURzW2lzYV0pOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3Vi
SW5kZW50KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVVVUlEQW5kQ29tbWVudCh1dWlkKQor
ICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICAgICAg
ZGVmaW5pdGlvbiA9IHNlbGYuX3V1aWRzW3V1aWRdCisgICAgICAgICAgICAgICAgaXNhID0gc2Vs
Zi5nZXRJU0EoZGVmaW5pdGlvbikKKyAgICAgICAgICAgICAgICBpZiBpc2EgPT0gJ1BCWEJ1aWxk
RmlsZScgb3IgaXNhID09ICdQQlhGaWxlUmVmZXJlbmNlJzoKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi53cml0ZU9iamVjdFdpdGhJU0FTaW5nbGVMaW5lKHNlbGYuX3V1aWRzW3V1aWRdKQorICAg
ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVPYmplY3RX
aXRoSVNBTXVsdGlMaW5lKHNlbGYuX3V1aWRzW3V1aWRdLCBzdWJJbmRlbnQsIHV1aWQgIT0gc2Vs
Zi5fbWFpbkdyb3VwVVVJRCkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCI7XG4i
KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiLyogRW5kICIpCisgICAgICAgICAgICBz
ZWxmLl9maWxlLndyaXRlKGlzYSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiBzZWN0
aW9uICovXG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2Vs
Zi5fZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYgd3JpdGVNYWluT2JqZWN0KHNlbGYsIG9iaiwg
aW5kZW50KToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViSW5k
ZW50ID0gaW5kZW50ICsgJ1x0JworICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygp
KToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3ViSW5kZW50KQorICAgICAgICAgICAg
c2VsZi5fZmlsZS53cml0ZShrZXkpCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgPSAi
KQorICAgICAgICAgICAgaWYga2V5ID09ICdvYmplY3RzJzoKKyAgICAgICAgICAgICAgICBzZWxm
LndyaXRlVVVJRHNPYmplY3Qoc3ViSW5kZW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBzZWxmLndyaXRlVmFsdWUob2JqW2tleV0sIHN1YkluZGVudCwgRmFsc2UpCisgICAg
ICAgICAgICBzZWxmLl9maWxlLndyaXRlKCI7XG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRl
KGluZGVudCkKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgifVxuIikKKworICAgIGRlZiB3cml0
ZVZhbHVlKHNlbGYsIHZhbHVlLCBpbmRlbnQsIHNpbmdsZUxpbmUpOgorICAgICAgICBpZiBpc2lu
c3RhbmNlKHZhbHVlLCBYQ29kZVVVSUQpOgorICAgICAgICAgICAgc2VsZi53cml0ZVVVSURBbmRD
b21tZW50KHZhbHVlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIFhDb2RlU3RyaW5n
KToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyInKQorICAgICAgICAgICAgc2VsZi5f
ZmlsZS53cml0ZShzdHIodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnIicp
CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAg
ICBzZWxmLl9maWxlLndyaXRlKHZhbHVlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUs
IGxpc3QpOgorICAgICAgICAgICAgaWYgc2luZ2xlTGluZToKKyAgICAgICAgICAgICAgICBzZWxm
LndyaXRlTGlzdFVuc29ydGVkU2luZ2xlTGluZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgc2VsZi53cml0ZUxpc3RVbnNvcnRlZE11bHRpTGluZSh2YWx1ZSwgaW5k
ZW50KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAg
aWYgc2luZ2xlTGluZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlU2ltcGxlT2JqZWN0U2lu
Z2xlTGluZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53
cml0ZVNpbXBsZU9iamVjdE11bHRpTGluZSh2YWx1ZSwgaW5kZW50KQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvciAt
IHVua25vd24gdHlwZSAlcyBmb3IgdmFsdWUgJyVzJyBlbmNvdW50ZXJlZCEiICUgKHN0cih0eXBl
KHZhbHVlKSksIHZhbHVlKSkKKworICAgIGRlZiB3cml0ZVByb2plY3RGaWxlKHNlbGYsIGZpbGVQ
YXRoLCBwcm9qZWN0TmFtZT0nJyk6CisgICAgICAgICIiIldyaXRlIGEgcHJvamVjdCBmaWxlIHRv
IGRpc2MuCisKKyAgICAgICAgZmlsZVBhdGggbXVzdCBpbmNsdWRlIHRoZSBwcm9qZWN0IGZpbGUg
aXRzZWxmIChub3QganVzdCBhIGRpcmVjdG9yeSkuCisgICAgICAgIFRoZSBwcm9qZWN0IG5hbWUg
aXMgZGVyaXZlZCBmcm9tIHRoZSBmaWxlIG5hbWUgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVk
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXRQcm9qZWN0TmFtZShwcm9qZWN0TmFtZSBv
ciBzZWxmLmV4dHJhY3RQcm9qZWN0TmFtZUZyb21GaWxlUGF0aChmaWxlUGF0aCkgb3Igc2VsZi5f
cHJvamVjdE5hbWUpCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZVBhdGgsICd3JywgJ3V0
ZjgnLCAncmVwbGFjZScpIGFzIHNlbGYuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlLndy
aXRlKCIvLyAhJCpVVEY4KiQhXG4iKQorICAgICAgICAgICAgc2VsZi53cml0ZU1haW5PYmplY3Qo
c2VsZi5fcGJ4LCAnJykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95553</attachid>
            <date>2011-05-31 23:31:37 -0700</date>
            <delta_ts>2011-07-07 22:22:32 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>bug-61773-20110601153134.patch</filename>
            <type>text/plain</type>
            <size>38909</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc3NzEKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4Y2ZhZDE3YWExZTAwZjA0MTNhODAxYmQ3MDlhMjhkZDE2
NjVhOWQzLi5iNWVmNDZiMjU3ZDkwMWEyOGZhYzFiMDczOWFlMGQ0NjdkM2I3ZGMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMDUtMzEgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV3Jp
dGUgYSB0b29scyBsaWJyYXJ5IHRvIG1hbmlwdWxhdGUgWENvZGUgcHJvamVjdCBmaWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3NzMKKworICAg
ICAgICBBZGRpbmcgYSBQeXRob24gbGlicmFyeSAneGNvZGVwcm9qLnB5JyB1bmRlciBhIG5ldyBk
aXJlY3RvcnkgJ3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0Jy4KKyAgICAgICAgVGhlIGZpcnN0IHZl
cnNpb24gY29udGFpbnMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVjZXNzYXJ5IHRvOgorICAgICAgICAu
KSBSZWFkIGFuZCBwYXJzZSBhIHByb2plY3QucGJ4cHJvaiBmaWxlCisgICAgICAgIC4pIEFkZCBu
ZXcgZmlsZXMgYW5kIHByb2plY3QgZ3JvdXBzIHRvIHRoZSBwcm9qZWN0CisgICAgICAgIC4pIElt
cGxpY2l0bHkgc29ydCAnY2hpbGRyZW4nIGFuZCAnZmlsZXMnIGxpc3RzIHdpdGhpbiB0aGUgcHJv
amVjdAorICAgICAgICAuKSBHZW5lcmF0ZSBhbmQgd3JpdGUgYSBwcm9qZWN0IGZpbGUgdG8gZGlz
YworCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC94Y29k
ZXByb2oucHk6IEFkZGVkLgorCiAyMDExLTA1LTMxICBZb25nIExpICA8eW9saUByaW0uY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY2NWJlZTVi
Yjc3ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9q
ZWN0L3hjb2RlcHJvai5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3Qv
eGNvZGVwcm9qLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwZDFjY2E4M2ZlMzhmMzU1YWYyNzBjMGRmODJmZTRl
ZmRkNGVhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L3hjb2RlcHJvai5weQpAQCAtMCwwICsxLDg1NSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMgVGhpcyBpcyBhIHZlcnkgc2ltcGxlIHNjcmlw
dCBkZXNpZ25lZCB0byBjcmF3bCB0aGUgYnVpbGQgZGlyZWN0b3J5CisjIGZvciB2aXN1YWwgc3R1
ZGlvIGV4cHJlc3MgYnVpbGQgbG9ncyBhbmQgcHJpbnQgdGhlbSB0byBzdGRvdXQuCisKK2Zyb20g
X19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKKworaW1wb3J0IGNvZGVjcworaW1wb3J0
IG9wZXJhdG9yCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgcmUKKworCitjbGFzcyBYQ29kZVByb2pl
Y3RFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAiIiJDbGFzcyB1c2VkIGZvciBleGNlcHRpb25z
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuX21zZyA9
IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYu
X21zZykKKworCitjbGFzcyBYQ29kZVN0cmluZyhvYmplY3QpOgorICAgICIiIkNsYXNzIGNvbnRh
aW5pbmcgYSBzaW5nbGUgWENvZGUgU3RyaW5nIChzdHJpbmcgaW4gcXVvdGVzIHdpdGhpbiB0aGUg
cHJvamVjdCBmaWxlKS4KKworICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZW1lbWJlciB0aGF0
IHRoZSBvcmlnaW5hbCBmaWVsZCB2YWx1ZSB3YXMgZW5jbG9zZWQgaW4gcXVvdGVzLgorICAgIFN0
cmluZ3MgYXJlIHB1dCBpbnNpZGUgZG91YmxlIHF1b3RlcyBpZiB3cml0dGVuIGFzIHZhbHVlcywg
YnV0IHdyaXR0ZW4gd2l0aG91dCBxdW90ZXMgd2l0aGluIGNvbW1lbnRzLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cnZhbCk6CisgICAgICAgIHNlbGYuX3N0cmluZyA9IHN0
cnZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHJp
bmcKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5f
c3RyaW5nKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4g
Y21wKHNlbGYuX3N0cmluZywgc3RyKG90aGVyKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3Ro
ZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyaW5nID09IHN0cihvdGhlcikKKworICAgIGRl
ZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyaW5nICE9IHN0
cihvdGhlcikKKworCitjbGFzcyBYQ29kZVVVSUQob2JqZWN0KToKKyAgICAiIiJDbGFzcyBjb250
YWluaW5nIGEgc2luZ2xlIFhDb2RlIFVVSUQuCisKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8g
ZGlmZmVyZW50aWF0ZSBVVUlEcyBmcm9tIG90aGVyIHN0cmluZyB2YWx1ZXMuCisgICAgVVVJRHMg
YXJlIHVzZWQgYXMga2V5cyBpbiB2YXJpb3VzIGludGVybmFsIG1hcHMuIFdoZW4gd3JpdHRlbiwg
dGhleSByZXF1aXJlIGFuIGFkZGl0aW9uYWwgY29tbWVudCB0byBiZSBnZW5lcmF0ZWQuCisgICAg
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXVpZHN0cj1Ob25lKToKKyAgICAgICAgaWYg
bm90IHV1aWRzdHI6CisgICAgICAgICAgICB1dWlkc3RyID0gJzAnICogMjQKKyAgICAgICAgZWxp
ZiBub3QgWENvZGVVVUlELmlzX3ZhbGlkX3V1aWQodXVpZHN0cik6CisgICAgICAgICAgICByYWlz
ZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIiclcycgaXMgbm90IGEgdmFsaWQgWENvZGUgVVVJRCAt
IGV4YWN0bHkgMjQgdXBwZXItY2FzZSBoZXggY2hhcmFjdGVycyBleHBlY3RlZCEiICUgdXVpZHN0
cikKKyAgICAgICAgc2VsZi5fdXVpZCA9IHV1aWRzdHIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fdXVpZCkKKworICAgIGRlZiBfX2NtcF9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLl91dWlkLCBvdGhlci5fdXVpZCkK
KworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fdXVp
ZCA9PSBvdGhlci5fdXVpZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAg
IHJldHVybiBzZWxmLl91dWlkICE9IG90aGVyLl91dWlkCisKKyAgICBkZWYgX19yZXByX18oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl91dWlkCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3V1aWQKKworICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3V1aWQgIT0gJzAnICogMjQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgaXNfdXVpZF9jaGFyKGMpOgorICAgICAgICByZXR1cm4gKGMgPj0gJzAnIGFu
ZCBjIDw9ICc5Jykgb3IgKGMgPj0gJ0EnIGFuZCBjIDw9ICdGJykKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgaXNfdmFsaWRfdXVpZCh1dWlkc3RyKToKKyAgICAgICAgaWYgbGVuKHV1aWRz
dHIpICE9IDI0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBjIGluIHV1
aWRzdHI6CisgICAgICAgICAgICBpZiBub3QgWENvZGVVVUlELmlzX3V1aWRfY2hhcihjKToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgcmFuZG9tX3V1aWQoKToKKyAgICAgICAgd2hpbGUgVHJ1ZToK
KyAgICAgICAgICAgIHV1aWQgPSBYQ29kZVVVSUQoJycuam9pbihbcmFuZG9tLmNob2ljZSgnMDEy
MzQ1Njc4OUFCQ0RFRicpIGZvciBpIGluIHJhbmdlKDI0KV0pKQorICAgICAgICAgICAgaWYgdXVp
ZCAhPSBYQ29kZVVVSUQoJzAnICogMjQpIGFuZCB1dWlkICE9IFhDb2RlVVVJRCgnRicgKiAyNCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHV1aWQKKworCitjbGFzcyBYQ29kZVByb2o6CisgICAg
IiIiQ2xhc3MgY29udGFpbmluZyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGRlc2NyaWJpbmcgYW4gWENv
ZGUgcHJvamVjdCBmaWxlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLl9maWxlID0gTm9uZQorICAgICAgICBzZWxmLl9jb250ZW50ID0gJycKKyAgICAgICAgc2Vs
Zi5faXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmV4dCA9ICdcMCcKKyAgICAgICAgc2VsZi5f
bG9va2FoZWFkID0gJ1wwJworICAgICAgICBzZWxmLmNsZWFyX3Byb2plY3RfZGF0YSgpCisKKyAg
ICBkZWYgY2xlYXJfcHJvamVjdF9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9qZWN0X25h
bWUgPSAnVW5rbm93bicKKyAgICAgICAgc2VsZi5fcGJ4ID0ge30KKyAgICAgICAgc2VsZi5fdXVp
ZHMgPSB7fQorICAgICAgICBzZWxmLl9pc2FfdG9fdXVpZCA9IHt9CisgICAgICAgIHNlbGYuX3V1
aWRfdG9fYnVpbGRwaGFzZV91dWlkID0ge30KKyAgICAgICAgc2VsZi5fYnVpbGRfY29uZmlndXJh
dGlvbl9saXN0X3RvX3V1aWQgPSB7fQorICAgICAgICBzZWxmLl91dWlkX3RvX2NvbW1lbnRfY2Fj
aGUgPSB7fQorICAgICAgICBzZWxmLl9tYWluX2dyb3VwX3V1aWQgPSBYQ29kZVVVSUQoKQorICAg
ICAgICBzZWxmLl9tYWluX3Byb2plY3RfbmF0aXZlX3RhcmdldCA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fbWFpbl9wcm9qZWN0X3NvdXJjZXNfdXVpZCA9IFhDb2RlVVVJRCgpCisgICAgICAgIHNlbGYu
X21haW5fcHJvamVjdF9oZWFkZXJzX3V1aWQgPSBYQ29kZVVVSUQoKQorICAgICAgICBzZWxmLl9t
YWluX3Byb2plY3RfcmVzb3VyY2VzX3V1aWQgPSBYQ29kZVVVSUQoKQorICAgICAgICBzZWxmLl9t
YWluX3Byb2plY3RfZnJhbWV3b3Jrc191dWlkID0gWENvZGVVVUlEKCkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgX2V4dHJhY3RfcHJvamVjdF9uYW1lX2Zyb21fZmlsZV9wYXRoKGZpbGVQ
YXRoKToKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goJy8oW14vLl0rKVwueGNvZGVwcm9qL3By
b2plY3RcLnBieHByb2okJywgZmlsZVBhdGgpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpCisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIF9z
ZXRfcHJvamVjdF9uYW1lKHNlbGYsIHByb2plY3RfbmFtZSk6CisgICAgICAgIHNlbGYuX3Byb2pl
Y3RfbmFtZSA9IHByb2plY3RfbmFtZQorICAgICAgICBpZiBzZWxmLl9tYWluX3Byb2plY3RfbmF0
aXZlX3RhcmdldDoKKyAgICAgICAgICAgIHNlbGYuX21haW5fcHJvamVjdF9uYXRpdmVfdGFyZ2V0
WyduYW1lJ10gPSBwcm9qZWN0X25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dl
dF91dWlkKG9iaiwga2V5KToKKyAgICAgICAgdmFsID0gb2JqW2tleV0KKyAgICAgICAgaWYgaXNp
bnN0YW5jZSh2YWwsIFhDb2RlVVVJRCk6CisgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAg
IHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlICclcycgZW5jb3Vu
dGVyZWQgZm9yIGZpZWxkICclcycgLSBVVUlEIGV4cGVjdGVkISIgJSAoc3RyKHR5cGUodmFsKSks
IGtleSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbGlzdChvYmosIGtleSk6
CisgICAgICAgIHZhbCA9IG9ialtrZXldCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0
KToKKyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhj
ZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgJyVzJyBlbmNvdW50ZXJlZCBmb3IgZmllbGQgJyVzJyAt
IGxpc3QgZXhwZWN0ZWQhIiAlIChzdHIodHlwZSh2YWwpKSwga2V5KSkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgX2dldF9zdHJpbmcob2JqLCBrZXkpOgorICAgICAgICB2YWwgPSBvYmpb
a2V5XQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgYmFzZXN0cmluZyk6CisgICAgICAgICAg
ICByZXR1cm4gdmFsCisgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBl
Y3RlZCB0eXBlICclcycgZW5jb3VudGVyZWQgZm9yIGZpZWxkICclcycgLSAndW5pY29kZScgZXhw
ZWN0ZWQhIiAlIChzdHIodHlwZSh2YWwpKSwga2V5KSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgX2dldF9pc2Eob2JqKToKKyAgICAgICAgcmV0dXJuIFhDb2RlUHJvai5fZ2V0X3N0cmlu
ZyhvYmosICdpc2EnKQorCisgICAgZGVmIGdlbmVyYXRlX3V1aWQoc2VsZik6CisgICAgICAgICIi
IkdlbmVyYXRlIGEgbmV3IFVVSUQgdGhhdCBkb2Vzbid0IHlldCBleGlzdCB3aXRoaW4gdGhlIHBy
b2plY3QuIiIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB1dWlkID0gWENvZGVV
VUlELnJhbmRvbV91dWlkKCkKKyAgICAgICAgICAgIGlmIHV1aWQgbm90IGluIHNlbGYuX3V1aWRz
OgorICAgICAgICAgICAgICAgIHJldHVybiB1dWlkCisKKyAgICBkZWYgYWRkX3V1aWQoc2VsZiwg
dXVpZCwgZGVmaW5pdGlvbik6CisgICAgICAgICIiIkFkZHMgYSBuZXcgVVVJRCBkZWZpbml0aW9u
IHRvIHRoZSBwcm9qZWN0LiIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1dWlkLCBYQ29k
ZVVVSUQpOgorICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJJbnRlcm5h
bCBFcnJvcjogbm9uLVVVSUQgcGFzc2VkIHRvIGFkZF91dWlkKCkhIikKKyAgICAgICAgaWYgdXVp
ZCBpbiBzZWxmLl91dWlkczoKKyAgICAgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlv
bigiVVVJRCAnJXMnIGZvciBpc2EgJyVzJyBhbHJlYWR5IGRlZmluZWQhIiAlICh1dWlkLCBkZWZp
bml0aW9uWydpc2EnXSkpCisgICAgICAgIGlzYSA9IHNlbGYuX2dldF9pc2EoZGVmaW5pdGlvbikK
KyAgICAgICAgc2VsZi5fdXVpZHNbdXVpZF0gPSBkZWZpbml0aW9uCisgICAgICAgIGlmIGlzYSBu
b3QgaW4gc2VsZi5faXNhX3RvX3V1aWQ6CisgICAgICAgICAgICBzZWxmLl9pc2FfdG9fdXVpZFtp
c2FdID0gW3V1aWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pc2FfdG9fdXVp
ZFtpc2FdLmFwcGVuZCh1dWlkKQorCisgICAgZGVmIGFkZF9uZXdfc3ViX2dyb3VwKHNlbGYsIHBh
cmVudF9ncm91cCwgcGF0aCk6CisgICAgICAgICIiIkFkZCBhIHNpbmdsZSBuZXcgc3ViLWdyb3Vw
LgorCisgICAgICAgIEFkZCBhIG5ldyBzdWJncm91cCB1bmRlciBwYXJlbnRfZ3JvdXAgZm9yIGZp
bGVzIHdpdGggdGhlIGdpdmVuIHBhdGguCisgICAgICAgIChTZXRzIHRoZSAncGF0aCcgZmllbGQg
Zm9yIHRoZSBncm91cCB0byB0aGUgcGFzc2VkLWluIHBhdGguKQorICAgICAgICAiIiIKKyAgICAg
ICAgZ3JvdXBfdXVpZCA9IHNlbGYuZ2VuZXJhdGVfdXVpZCgpCisgICAgICAgIGdyb3VwID0gewor
ICAgICAgICAgICAgJ2lzYSc6ICAgICAgICAnUEJYR3JvdXAnLAorICAgICAgICAgICAgJ2NoaWxk
cmVuJzogICBbXSwKKyAgICAgICAgICAgICdwYXRoJzogICAgICAgcGF0aCwKKyAgICAgICAgICAg
ICdzb3VyY2VUcmVlJzogJyI8Z3JvdXA+IicsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hZGRf
dXVpZChncm91cF91dWlkLCBncm91cCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLl9nZXRfbGlz
dChwYXJlbnRfZ3JvdXAsICdjaGlsZHJlbicpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChncm91
cF91dWlkKQorICAgICAgICByZXR1cm4gZ3JvdXAKKworICAgIGRlZiBhZGRfbmV3X3N1Yl9ncm91
cHMoc2VsZiwgZ3JvdXAsIHN1Yl9wYXRoKToKKyAgICAgICAgIiIiQWRkIG5ldyBwcm9qZWN0IGdy
b3Vwcy4KKworICAgICAgICBSZWN1cnNpdmVseSBhZGRzIGEgbmV3IHByb2pjdCBzdWItZ3JvdXAg
dG8gZ3JvdXAgZm9yIGV2ZXJ5IGRpcmVjdG9yeSBnaXZlbiBpbiBzdWJfcGF0aC4KKyAgICAgICAg
IiIiCisgICAgICAgIGRpcmVjdG9yeV9saXN0ID0gc3ViX3BhdGguc3BsaXQoJy8nKQorICAgICAg
ICBmb3IgZGlyIGluIGRpcmVjdG9yeV9saXN0OgorICAgICAgICAgICAgZ3JvdXAgPSBzZWxmLmFk
ZF9uZXdfc3ViX2dyb3VwKGdyb3VwLCBkaXIpCisgICAgICAgIHJldHVybiBncm91cAorCisgICAg
ZGVmIF9maW5kX2dyb3VwX2J5X3BhdGgoc2VsZiwgY3VycmVudF9ncm91cCwgcGF0aCk6CisgICAg
ICAgIGlmIG5vdCBwYXRoOgorICAgICAgICAgICAgcmV0dXJuICcnLCBjdXJyZW50X2dyb3VwCisg
ICAgICAgICMgVHJ5IHRvIGZpbmQgc3VpdGFibGUgc3ViLWdyb3VwLgorICAgICAgICBjaGlsZHJl
biA9IHNlbGYuX2dldF9saXN0KGN1cnJlbnRfZ3JvdXAsICdjaGlsZHJlbicpCisgICAgICAgIGZv
ciB1dWlkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXVpZCwg
WENvZGVVVUlEKToKKyAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24o
IkNoaWxkcmVuIGxpc3QgY29udGFpbnMgbm9uLVVVSUQgZW50cnkgJyVzJyEiICUgdXVpZCkKKyAg
ICAgICAgICAgIGNoaWxkX2dyb3VwID0gc2VsZi5fdXVpZHNbdXVpZF0KKyAgICAgICAgICAgIGlm
IHNlbGYuX2dldF9pc2EoY2hpbGRfZ3JvdXApICE9ICdQQlhHcm91cCc6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgIHNvdXJjZV90cmVlID0gY2hpbGRfZ3JvdXBbJ3NvdXJj
ZVRyZWUnXQorICAgICAgICAgICAgIyBPbmx5IGNvbnNpZGVyIGdyb3VwcyB0aGF0IGNvbnRhaW4g
YSBwYXRoIGFuZCBhcmUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBncm91cAorICAgICAgICAgICAg
IyBGSVhNRTogV2hhdCB0byBkbyB3aXRoIGdyb3VwcyBsaWtlICdmaWxlYXBpJyBpbiBXZWJDb3Jl
IHRoYXQgdXNlICduYW1lJyByYXRoZXIgdGhhbiAncGF0aCcKKyAgICAgICAgICAgICMgICAgICAg
IChhbmQgbGlzdCB0aGVpciBjaGlsZCBmaWxlcyB3aXRoIGEgcmVsYXRpdmUgcGF0aCBwcmVmaXgp
PworICAgICAgICAgICAgaWYgc291cmNlX3RyZWUgPT0gJ1NPVVJDRV9ST09UJzoKKyAgICAgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc291cmNlX3RyZWUgPT0gJ0JVSUxUX1BS
T0RVQ1RTX0RJUic6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2Uoc291cmNlX3RyZWUsIFhDb2RlU3RyaW5nKSBhbmQgc291cmNlX3RyZWUgPT0gJzxh
YnNvbHV0ZT4nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShzb3VyY2VfdHJlZSwgWENvZGVTdHJpbmcpIG9yIHNvdXJjZV90cmVlICE9ICc8
Z3JvdXA+JzoKKyAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIiIi
R3JvdXAgY29udGFpbnMgdW5rbm93biAnc291cmNlVHJlZScgZmllbGQgdmFsdWUgJyVzJyAtIFNP
VVJDRV9ST09ULCBCVUlMVF9QUk9EVUNUU19ESVIsICI8Z3JvdXA+IiBvciAiYWJzb2x1dGUiIGV4
cGVjdGVkISIiIiAlIHNvdXJjZV90cmVlKQorICAgICAgICAgICAgaWYgJ3BhdGgnIGluIGNoaWxk
X2dyb3VwOgorICAgICAgICAgICAgICAgIHBhdGhfb2ZfY2hpbGRfZ3JvdXAgPSBjaGlsZF9ncm91
cFsncGF0aCddCisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKHBhdGhfb2ZfY2hp
bGRfZ3JvdXApOgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPT0gbGVuKHBhdGhf
b2ZfY2hpbGRfZ3JvdXApOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnLCBjaGls
ZF9ncm91cAorICAgICAgICAgICAgICAgICAgICBpZiBwYXRoW2xlbihwYXRoX29mX2NoaWxkX2dy
b3VwKV0gPT0gJy8nOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRf
Z3JvdXBfYnlfcGF0aChjaGlsZF9ncm91cCwgcGF0aFtsZW4ocGF0aF9vZl9jaGlsZF9ncm91cCkg
KyAxOl0pCisgICAgICAgICMgY291bGQgbm90IHJlc29sdmUgcGF0aCwgcmV0dXJuIG5vbi1lbXB0
eSBzdWItcGF0aCB0b2dldGhlciB3aXRoIGN1cnJlbnQgZ3JvdXAKKyAgICAgICAgcmV0dXJuIHBh
dGgsIGN1cnJlbnRfZ3JvdXAKKworICAgIGRlZiBfZGV0ZXJtaW5lX2ZpbGVfdHlwZShzZWxmLCBm
aWxlX25hbWUpOgorICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgnXC4oW2Etel0rKSQnLCBmaWxl
X25hbWUpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gbWF0Y2gu
Z3JvdXAoMSkKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAnY3BwJzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3NvdXJjZWNvZGUuY3BwLmNwcCcsIHNlbGYuX21haW5fcHJvamVjdF9zb3Vy
Y2VzX3V1aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAnaCc6CisgICAgICAgICAgICAg
ICAgIyBGSVhNRTogd2hlbiB0byB1c2UgJ3NvdXJjZWNvZGUuY3BwLmgnPworICAgICAgICAgICAg
ICAgIHJldHVybiAnc291cmNlY29kZS5jLmgnLCBzZWxmLl9tYWluX3Byb2plY3RfaGVhZGVyc191
dWlkCisgICAgICAgICAgICBpZiBleHRlbnNpb24gPT0gJ21tJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NvdXJjZWNvZGUuY3BwLm9iamNwcCcsIHNlbGYuX21haW5fcHJvamVjdF9zb3VyY2Vz
X3V1aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAnbSc6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdzb3VyY2Vjb2RlLmMub2JqYycsIHNlbGYuX21haW5fcHJvamVjdF9zb3VyY2VzX3V1
aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAncGwnIG9yIGV4dGVuc2lvbiA9PSAncG0n
OgorICAgICAgICAgICAgICAgIHJldHVybiAndGV4dC5zY3JpcHQucGVybCcsIHNlbGYuX21haW5f
cHJvamVjdF9oZWFkZXJzX3V1aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAncG5nJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ2ltYWdlLnBuZycsIHNlbGYuX21haW5fcHJvamVjdF9y
ZXNvdXJjZXNfdXVpZAorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICd0aWZmJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ2ltYWdlLnRpZmYnLCBzZWxmLl9tYWluX3Byb2plY3RfcmVzb3Vy
Y2VzX3V1aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAndHh0JzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3RleHQnLCBzZWxmLl9tYWluX3Byb2plY3Rfc291cmNlc191dWlkCisgICAg
ICAgICAgICBpZiBleHRlbnNpb24gPT0gJ2ZyYW1ld29yayc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICd3cmFwcGVyLmZyYW1ld29yaycsIHNlbGYuX21haW5fcHJvamVjdF9mcmFtZXdvcmtzX3V1
aWQKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAnbmliJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3dyYXBwZXIubmliJywgc2VsZi5fbWFpbl9wcm9qZWN0X3Jlc291cmNlc191dWlkCisg
ICAgICAgICAgICAjIEZJWE1FOiBoYXZlbid0IHNlZW4gdGhlc2UgZXh0ZW5zaW9ucyBpbiBhY3R1
YWwgZmlsZXMsIGV4dHJhcG9sYXRpbmcgZm9yIGNvbXBsZXRlbmVzcworICAgICAgICAgICAgaWYg
ZXh0ZW5zaW9uID09ICdjYycgb3IgZXh0ZW5zaW9uID09ICdjeHgnOgorICAgICAgICAgICAgICAg
IHJldHVybiAnc291cmNlY29kZS5jcHAuY3BwJywgc2VsZi5fbWFpbl9wcm9qZWN0X3NvdXJjZXNf
dXVpZAorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICdocHAnIG9yIGV4dGVuc2lvbiA9PSAn
aHh4JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZWNvZGUuY3BwLmgnLCBzZWxmLl9t
YWluX3Byb2plY3RfaGVhZGVyc191dWlkCisgICAgICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEg
Z3Vlc3MsIGhhdmVuJ3Qgc2VlbiAndGV4dC5zY3JpcHQucHl0aG9uJyBpbiBhY3R1YWwgcHJvamVj
dCBmaWxlcyEKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiA9PSAncHknOgorICAgICAgICAgICAg
ICAgIHJldHVybiAndGV4dC5zY3JpcHQucHl0aG9uJywgc2VsZi5fbWFpbl9wcm9qZWN0X3NvdXJj
ZXNfdXVpZAorICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIkNvdWxkIG5vdCBk
ZXRlcm1pbmUgZmlsZSB0eXBlIGZyb20gZXh0ZW5zaW9uIGZvciBmaWxlICclcyciICUgZmlsZV9u
YW1lKQorCisgICAgZGVmIGFkZF9maWxlKHNlbGYsIHJlbF9wYXRoLCBmaWxlX25hbWUsIGFkZF9u
ZXdfc3ViZ3JvdXBzPVRydWUpOgorICAgICAgICAiIiJBZGQgYSBuZXcgZmlsZSB0byB0aGUgcHJv
amVjdC4KKworICAgICAgICByZWxfcGF0aDogcGF0aCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCBm
aWxlIHJvb3QgZGlyZWN0b3J5IChTT1VSQ0VfUk9PVCkKKyAgICAgICAgZmlsZV9uYW1lOiBmaWxl
IG5hbWUgKGluY2wuIGV4dGVuc2lvbikgb2YgdGhlIG5ldyBmaWxlCisgICAgICAgIGFkZF9uZXdf
c3ViZ3JvdXBzOiBhZGQgbmV3IHByb2plY3QgZ3JvdXBzIGlmIG5vIHByb2plY3QgZ3JvdXBzIGV4
aXN0IGZvciB0aGUgZ2l2ZW4gcGF0aD8KKyAgICAgICAgIiIiCisgICAgICAgICMgRklYTUU6IHZl
cmlmeSB0aGF0IHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdAorICAgICAgICBmaWxlX3R5
cGUsIGJ1aWxkX3BoYXNlX3V1aWQgPSBzZWxmLl9kZXRlcm1pbmVfZmlsZV90eXBlKGZpbGVfbmFt
ZSkKKyAgICAgICAgc3ViX3BhdGgsIGdyb3VwID0gc2VsZi5fZmluZF9ncm91cF9ieV9wYXRoKHNl
bGYuX3V1aWRzW3NlbGYuX21haW5fZ3JvdXBfdXVpZF0sIHJlbF9wYXRoKQorICAgICAgICBpZiBz
dWJfcGF0aDoKKyAgICAgICAgICAgIGlmIGFkZF9uZXdfc3ViZ3JvdXBzOgorICAgICAgICAgICAg
ICAgIGdyb3VwID0gc2VsZi5hZGRfbmV3X3N1Yl9ncm91cHMoZ3JvdXAsIHN1Yl9wYXRoKQorICAg
ICAgICAgICAgICAgIHN1Yl9wYXRoID0gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgZmlsZV9uYW1lID0gc3ViX3BhdGggKyAnLycgKyBmaWxlX25hbWUKKyAgICAgICAgIyBh
ZGQgZmlsZSByZWZlcmVuY2UgZW50cnkKKyAgICAgICAgZmlsZV9yZWZlcmVuY2VfdXVpZCA9IHNl
bGYuZ2VuZXJhdGVfdXVpZCgpCisgICAgICAgIHNlbGYuYWRkX3V1aWQoZmlsZV9yZWZlcmVuY2Vf
dXVpZCwgeworICAgICAgICAgICAgJ2lzYSc6ICAgICAgICAgICAgICAgJ1BCWEZpbGVSZWZlcmVu
Y2UnLAorICAgICAgICAgICAgJ2ZpbGVFbmNvZGluZyc6ICAgICAgJzQnLAorICAgICAgICAgICAg
J2xhc3RLbm93bkZpbGVUeXBlJzogZmlsZV90eXBlLAorICAgICAgICAgICAgJ3BhdGgnOiAgICAg
ICAgICAgICAgZmlsZV9uYW1lLAorICAgICAgICAgICAgJ3NvdXJjZVRyZWUnOiAgICAgICAgJyI8
Z3JvdXA+IicsCisgICAgICAgIH0pCisgICAgICAgICMgYWRkIGJ1aWxkIGZpbGUgZW50cnkKKyAg
ICAgICAgYnVpbGRmaWxlX3V1aWQgPSBzZWxmLmdlbmVyYXRlX3V1aWQoKQorICAgICAgICBzZWxm
LmFkZF91dWlkKGJ1aWxkZmlsZV91dWlkLCB7CisgICAgICAgICAgICAnaXNhJzogICAgICdQQlhC
dWlsZEZpbGUnLAorICAgICAgICAgICAgJ2ZpbGVSZWYnOiBmaWxlX3JlZmVyZW5jZV91dWlkLAor
ICAgICAgICAgICAgIyBGSVhNRTogYWRkICJzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IiB3aGVyZSBuZWNlc3NhcnkhCisgICAgICAgIH0pCisgICAgICAgICMgYWRkIGJ1
aWxkIGZpbGUgdG8gYnVpbGQgcGhhc2UKKyAgICAgICAgYnVpbGRfcGhhc2UgPSBzZWxmLl91dWlk
c1tidWlsZF9waGFzZV91dWlkXQorICAgICAgICBidWlsZF9waGFzZV9maWxlcyA9IHNlbGYuX2dl
dF9saXN0KGJ1aWxkX3BoYXNlLCAnZmlsZXMnKQorICAgICAgICBidWlsZF9waGFzZV9maWxlcy5h
cHBlbmQoYnVpbGRmaWxlX3V1aWQpCisgICAgICAgICMgYWRkIGZpbGUgcmVmZXJlbmNlIHRvIHBy
b2plY3QgZ3JvdXAKKyAgICAgICAgZ3JvdXBfY2hpbGRfbGlzdCA9IHNlbGYuX2dldF9saXN0KGdy
b3VwLCAnY2hpbGRyZW4nKQorICAgICAgICBncm91cF9jaGlsZF9saXN0LmFwcGVuZChmaWxlX3Jl
ZmVyZW5jZV91dWlkKQorICAgICAgICAjIHVwZGF0ZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMK
KyAgICAgICAgc2VsZi5fdXVpZF90b19idWlsZHBoYXNlX3V1aWRbYnVpbGRmaWxlX3V1aWRdID0g
YnVpbGRfcGhhc2VfdXVpZAorCisgICAgIyAtLS0gcGFyc2luZyAtLS0KKworICAgIGRlZiBfcmVh
ZF9uZXh0KHNlbGYpOgorICAgICAgICAjIFBhcnNpbmcgc2hvdWxkIHN0b3Agd2l0aCB0aGUgbGFz
dCAyIGNoYXJhY3RlcnMgYmVpbmcgJ30nIGFuZCAnXG4nLgorICAgICAgICAjIElmIHRoYXQgaXMg
bm90IHRoZSBjYXNlLCBwYXJzaW5nIHdpbGwgZmFpbCB3aXRoIGFuIHVuZXhwZWN0ZWQgU3RvcEl0
ZXJhdGlvbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuX25leHQgPSBzZWxmLl9sb29rYWhlYWQK
KyAgICAgICAgc2VsZi5fbG9va2FoZWFkID0gc2VsZi5faXRlci5uZXh0KCkKKworICAgIGRlZiBf
bmV4dF9pc19lb2xfY2hhcihzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX25leHQKKyAgICAgICAg
cmV0dXJuIGMgPT0gJ1xuJyBvciBjID09ICdccicKKworICAgIGRlZiBfbmV4dF9pc193aGl0ZXNw
YWNlX2NoYXIoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAgICAgIHJldHVybiBj
ID09ICcgJyBvciBjID09ICdcdCcgb3IgYyA9PSAnXG4nIG9yIGMgPT0gJ1xyJworCisgICAgZGVm
IF9uZXh0X2lzX2RpZ2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmV4dCA+PSAnMCcg
YW5kIHNlbGYuX25leHQgPD0gJzknCisKKyAgICBkZWYgX25leHRfaXNfdXVpZF9jaGFyKHNlbGYp
OgorICAgICAgICByZXR1cm4gWENvZGVVVUlELmlzX3V1aWRfY2hhcihzZWxmLl9uZXh0KQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfaXNfaWRfaW5pdGlhbF9jaGFyKGMpOgorICAgICAg
ICByZXR1cm4gKGMgPj0gJ0EnIGFuZCBjIDw9ICdaJykgb3IgKGMgPj0gJ2EnIGFuZCBjIDw9ICd6
Jykgb3IgYyA9PSAnXycKKworICAgIGRlZiBfbmV4dF9pc19pZF9pbml0aWFsX2NoYXIoc2VsZik6
CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAgICAgIHJldHVybiAoYyA+PSAnQScgYW5kIGMg
PD0gJ1onKSBvciAoYyA+PSAnYScgYW5kIGMgPD0gJ3onKSBvciBjID09ICdfJworCisgICAgZGVm
IF9uZXh0X2lzX2lkX2NoYXIoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAgICAg
IHJldHVybiAoYyA+PSAnQScgYW5kIGMgPD0gJ1onKSBvciAoYyA+PSAnYScgYW5kIGMgPD0gJ3on
KSBvciAoYyA+PSAnMCcgYW5kIGMgPD0gJzknKSBvciBjID09ICdfJworCisgICAgZGVmIF9uZXh0
X2lzX3BhdGhfY2hhcihzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX25leHQKKyAgICAgICAgcmV0
dXJuIChjID49ICdBJyBhbmQgYyA8PSAnWicpIG9yIChjID49ICdhJyBhbmQgYyA8PSAneicpIG9y
IChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yIGMgaW4gJ18tLy4nCisKKyAgICBkZWYgX3NraXBf
d2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4dF9pc193aGl0ZXNwYWNl
X2NoYXIoKToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisKKyAgICBkZWYgX3NraXBf
bGluZShzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX25leHRfaXNfZW9sX2NoYXIoKToK
KyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisKKyAgICBkZWYgX3NraXBfY29tbWVudChz
ZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX25leHQgPT0gJy8nOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2xvb2thaGVhZCA9PSAnLyc6ICAgICMgIi8vIi1j
b21tZW50LCByZWFkIHRpbGwgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgIHNlbGYuX3NraXBfbGlu
ZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9sb29rYWhlYWQg
PT0gJyonOiAgIyAiLyogLi4uICovIi1jb21tZW50LCByZWFkIHRpbGwgIiovIgorICAgICAgICAg
ICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAg
ICAgICAgICB3aGlsZSBzZWxmLl9uZXh0ICE9ICcqJyBvciBzZWxmLl9sb29rYWhlYWQgIT0gJy8n
OgorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAgICAgICAgICBzZWxmLl9y
ZWFkX25leHQoKQorICAgICAgICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgICMgQXNzdW1lICcvJyBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBv
dGhlciB0aGFuICcvJyBvciAnKicgaXMgdGhlIHN0YXJ0IG9mIGEgcGF0aC4KKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICBkZWYgX3NraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoc2VsZik6
CisgICAgICAgIHNlbGYuX3NraXBfd2hpdGVzcGFjZSgpCisgICAgICAgIHdoaWxlIHNlbGYuX3Nr
aXBfY29tbWVudCgpOgorICAgICAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlKCkKKworICAg
IGRlZiBfc2tpcF9jaGFyKHNlbGYsIGMpOgorICAgICAgICBpZiBzZWxmLl9uZXh0ICE9IGM6Cisg
ICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0ZWQgY2hhcmFj
dGVyICclYycgZW5jb3VudGVyZWQgIC0gJyVjJyBleHBlY3RlZCEiICUgKHNlbGYuX25leHQsIGMp
KQorICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICBzZWxmLl9za2lwX3doaXRlc3Bh
Y2VfYW5kX2NvbW1lbnRzKCkKKworICAgIGRlZiBfcmVhZF9wYXRoKHNlbGYsIHBhdGgpOgorICAg
ICAgICB3aGlsZSBzZWxmLl9uZXh0X2lzX3BhdGhfY2hhcigpOgorICAgICAgICAgICAgcGF0aCAr
PSBzZWxmLl9uZXh0CisgICAgICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICBpZiBu
b3Qgc2VsZi5fbmV4dF9pc193aGl0ZXNwYWNlX2NoYXIoKSBhbmQgc2VsZi5fbmV4dCAhPSAnOycg
YW5kIHNlbGYuX25leHQgIT0gJywnOgorICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhj
ZXB0aW9uKCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnJWMnIGVuY291bnRlcmVkIGFmdGVyIHBhdGgg
KD8pIHZhbHVlICclcycgLSB3aGl0ZSBzcGFjZSwgJzsnIG9yICcsJyBleHBlY3RlZCEiICUgKHNl
bGYuX25leHQsIHBhdGgpKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIF9yZWFkX0lE
KHNlbGYsIGlkLCBtYXlfZmFsbF9iYWNrX3RvX3BhdGgpOgorICAgICAgICBpZiBpZCA9PSAnJyBh
bmQgbm90IHNlbGYuX25leHRfaXNfaWRfaW5pdGlhbF9jaGFyKCk6CisgICAgICAgICAgICBpZiBt
YXlfZmFsbF9iYWNrX3RvX3BhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRf
cGF0aCgnJykKKyAgICAgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZXJu
YWwgZXJyb3IgLSBfcmVhZF9JRCBjYWxsZWQgb24gbm9uLUlEIHN0cmluZyAnJXMnISIgJSAoaWQg
KyBzZWxmLl9uZXh0KSkKKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4dF9pc19pZF9jaGFyKCk6Cisg
ICAgICAgICAgICBpZCArPSBzZWxmLl9uZXh0CisgICAgICAgICAgICBzZWxmLl9yZWFkX25leHQo
KQorICAgICAgICBpZiBzZWxmLl9uZXh0X2lzX3BhdGhfY2hhcigpOgorICAgICAgICAgICAgaWYg
bWF5X2ZhbGxfYmFja190b19wYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFk
X3BhdGgoaWQpCisgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIklkZW50
aWZpZXIgZm9sbG93ZWQgYnkgaWxsZWdhbCBjaGFyYWN0ZXIgJyVjJyEiICUgc2VsZi5fbmV4dCkK
KyAgICAgICAgcmV0dXJuIGlkCisKKyAgICBkZWYgX3JlYWRfdXVpZChzZWxmLCB1dWlkc3RyLCBt
YXlfZmFsbF9iYWNrX3RvX2lkLCBtYXlfZmFsbF9iYWNrX3RvX3BhdGgpOgorICAgICAgICB3aGls
ZSBsZW4odXVpZHN0cikgPCAyNCBhbmQgc2VsZi5fbmV4dF9pc191dWlkX2NoYXIoKToKKyAgICAg
ICAgICAgIHV1aWRzdHIgKz0gc2VsZi5fbmV4dAorICAgICAgICAgICAgc2VsZi5fcmVhZF9uZXh0
KCkKKyAgICAgICAgaWYgc2VsZi5fbmV4dF9pc19pZF9jaGFyKCk6CisgICAgICAgICAgICBpZiBt
YXlfZmFsbF9iYWNrX3RvX2lkIGFuZCAodXVpZHN0ciA9PSAnJyBvciBzZWxmLl9pc19pZF9pbml0
aWFsX2NoYXIodXVpZHN0clswXSkpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFk
X0lEKHV1aWRzdHIsIG1heV9mYWxsX2JhY2tfdG9fcGF0aCkKKyAgICAgICAgICAgIHJhaXNlIFhD
b2RlUHJvamVjdEV4Y2VwdGlvbigiVVVJRCAoPykgJyVzJyBoYXMgY2hhcmFjdGVyICclYycgZm9s
bG93aW5nISIgJSAodXVpZHN0ciwgc2VsZi5fbmV4dCkpCisgICAgICAgIGlmIHNlbGYuX25leHRf
aXNfcGF0aF9jaGFyKCk6CisgICAgICAgICAgICBpZiBtYXlfZmFsbF9iYWNrX3RvX3BhdGg6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfcGF0aCh1dWlkc3RyKQorICAgICAgICAg
ICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJVVUlEICg/KSAnJXMnIGhhcyBjaGFyYWN0
ZXIgJyVjJyBmb2xsb3dpbmchIiAlICh1dWlkc3RyLCBzZWxmLl9uZXh0KSkKKyAgICAgICAgc2Vs
Zi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgIHJldHVybiBYQ29kZVVV
SUQodXVpZHN0cikKKworICAgIGRlZiBfcmVhZF9pbnRlZ2VyKHNlbGYsIG1heV9mYWxsX2JhY2tf
dG9fdXVpZCwgbWF5X2ZhbGxfYmFja190b19wYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYuX25l
eHRfaXNfZGlnaXQoKToKKyAgICAgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigi
SW50ZXJuYWwgZXJyb3IgLSBfcmVhZF9pbnRlZ2VyIGNhbGxlZCBvbiBub24taW50ZWdlciBjaGFy
YWN0ZXIgJyVjJyEiICUgc2VsZi5fbmV4dCkKKyAgICAgICAgaW50ZWdlciA9ICcnCisgICAgICAg
IHdoaWxlIHNlbGYuX25leHRfaXNfZGlnaXQoKToKKyAgICAgICAgICAgIGludGVnZXIgKz0gc2Vs
Zi5fbmV4dAorICAgICAgICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgaWYgc2VsZi5f
bmV4dF9pc191dWlkX2NoYXIoKToKKyAgICAgICAgICAgIGlmIG1heV9mYWxsX2JhY2tfdG9fdXVp
ZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91dWlkKGludGVnZXIsIEZhbHNl
LCBtYXlfZmFsbF9iYWNrX3RvX3BhdGgpCisgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RF
eGNlcHRpb24oIkludGVnZXIgKD8pICclcycgaGFzIGNoYXJhY3RlciAnJWMnIGZvbGxvd2luZyEi
ICUgKGludGVnZXIsIHNlbGYuX25leHQpKQorICAgICAgICBpZiBzZWxmLl9uZXh0X2lzX3BhdGhf
Y2hhcigpOgorICAgICAgICAgICAgaWYgbWF5X2ZhbGxfYmFja190b19wYXRoOgorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3BhdGgoaW50ZWdlcikKKyAgICAgICAgICAgIHJhaXNl
IFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZWdlciAoPykgJyVzJyBoYXMgY2hhcmFjdGVyICcl
YycgZm9sbG93aW5nISIgJSAoaW50ZWdlciwgc2VsZi5fbmV4dCkpCisgICAgICAgIGlmIGxlbihp
bnRlZ2VyKSA9PSAyNCBhbmQgbWF5X2ZhbGxfYmFja190b191dWlkOgorICAgICAgICAgICAgIyBz
dHJpbmcgb2YgMjQgZGlnaXRzIC0gYXNzdW1lIFVVSUQKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkX3V1aWQoaW50ZWdlciwgRmFsc2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gaW50ZWdl
cgorCisgICAgZGVmIF9yZWFkX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fc2tpcF9jaGFy
KCciJykKKyAgICAgICAgc3RydmFsID0gJycKKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4dCAhPSAn
Iic6CisgICAgICAgICAgICBpZiBzZWxmLl9uZXh0ID09ICdcXCc6CisgICAgICAgICAgICAgICAg
IyBqdXN0IHJlYWQgbmV4dCBjaGFyYWN0ZXIsIHdoYXRldmVyIGl0IGlzCisgICAgICAgICAgICAg
ICAgc3RydmFsICs9ICdcXCcKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAg
ICAgICAgICAgc3RydmFsICs9IHNlbGYuX25leHQKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4
dCgpCisgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAgICAgIHJldHVybiBYQ29kZVN0cmlu
ZyhzdHJ2YWwpCisKKyAgICBkZWYgX3JlYWRfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nr
aXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoKQorICAgICAgICBpZiBzZWxmLl9uZXh0ID09ICd7
JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX29iamVjdCgpCisgICAgICAgIGlmIHNl
bGYuX25leHQgPT0gJygnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfbGlzdCgpCisg
ICAgICAgIGlmIHNlbGYuX25leHQgPT0gJyInOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
YWRfc3RyaW5nKCkKKyAgICAgICAgaWYgc2VsZi5fbmV4dF9pc19kaWdpdCgpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlYWRfaW50ZWdlcihUcnVlLCBUcnVlKQorICAgICAgICBpZiBzZWxm
Ll9uZXh0X2lzX3V1aWRfY2hhcigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdXVp
ZCgnJywgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5fbmV4dF9pc19pZF9pbml0aWFsX2No
YXIoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX0lEKCcnLCBUcnVlKQorICAgICAg
ICBpZiBzZWxmLl9uZXh0X2lzX3BhdGhfY2hhcigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X3JlYWRfcGF0aCgnJykKKyAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJJbGxl
Z2FsIGNoYXJhY3RlciAnJWMnIGVuY291bnRlcmVkIGluIHZhbHVlIC0gb2JqZWN0LCBsaXN0LCBp
bnRlZ2VyLCBzdHJpbmcsIFVVSUQsIElEIG9yIHBhdGggZXhwZWN0ZWQhIiAlIHNlbGYuX25leHQp
CisKKyAgICBkZWYgX3JlYWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCco
JykKKyAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAg
IGxpc3QgPSBbXQorICAgICAgICB3aGlsZSBzZWxmLl9uZXh0ICE9ICcpJzoKKyAgICAgICAgICAg
IHZhbCA9IHNlbGYuX3JlYWRfdmFsdWUoKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodmFsKQor
ICAgICAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAg
ICAgICBzZWxmLl9za2lwX2NoYXIoJywnKQorICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAg
ICAgICByZXR1cm4gbGlzdAorCisgICAgZGVmIF9yZWFkX29iamVjdChzZWxmKToKKyAgICAgICAg
c2VsZi5fc2tpcF9jaGFyKCd7JykKKyAgICAgICAgb2JqID0ge30KKyAgICAgICAgd2hpbGUgc2Vs
Zi5fbmV4dCAhPSAnfSc6CisgICAgICAgICAgICBpZCA9IHNlbGYuX3JlYWRfSUQoJycsIEZhbHNl
KQorICAgICAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAg
ICAgICAgICBzZWxmLl9za2lwX2NoYXIoJz0nKQorICAgICAgICAgICAgb2JqW2lkXSA9IHNlbGYu
X3JlYWRfdmFsdWUoKQorICAgICAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3NraXBfY2hhcignOycpCisgICAgICAgICMgc2tpcCBjbG9zaW5nICd9Jwor
ICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYg
X3JlYWRfdXVpZF9kZWZpbml0aW9uc19vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3NraXBf
Y2hhcigneycpCisgICAgICAgIGRlZmluaXRpb24gPSB7fQorICAgICAgICB3aGlsZSBzZWxmLl9u
ZXh0ICE9ICd9JzoKKyAgICAgICAgICAgIHV1aWQgPSBzZWxmLl9yZWFkX3V1aWQoJycsIEZhbHNl
LCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuX3NraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMo
KQorICAgICAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIGRlZmluaXRp
b24gPSBzZWxmLl9yZWFkX29iamVjdCgpCisgICAgICAgICAgICBzZWxmLl9za2lwX3doaXRlc3Bh
Y2UoKQorICAgICAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCc7JykKKyAgICAgICAgICAgIHNlbGYu
YWRkX3V1aWQodXVpZCwgZGVmaW5pdGlvbikKKyAgICAgICAgICAgICMgcHJvY2VzcyAnZmlsZXMn
IGlmIHByZXNlbnQKKyAgICAgICAgICAgIGlmICdmaWxlcycgaW4gZGVmaW5pdGlvbjoKKyAgICAg
ICAgICAgICAgICBsaXN0RmlsZXMgPSBzZWxmLl9nZXRfbGlzdChkZWZpbml0aW9uLCAnZmlsZXMn
KQorICAgICAgICAgICAgICAgIGZvciBmaWxlVVVJRCBpbiBsaXN0RmlsZXM6CisgICAgICAgICAg
ICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVVVUlELCBYQ29kZVVVSUQpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJEZWZpbml0aW9u
ICdmaWxlcycgbGlzdCBmb3IgVVVJRCAnJXMnIGNvbnRhaW5zIG5vbi1VVUlEIGVudHJ5ICclcych
IiAlICh1dWlkLCBzdHIoZmlsZVVVSUQpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZVVV
SUQgaW4gc2VsZi5fdXVpZF90b19idWlsZHBoYXNlX3V1aWQgYW5kIHV1aWQgIT0gc2VsZi5fdXVp
ZF90b19idWlsZHBoYXNlX3V1aWRbZmlsZVVVSURdOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJGaWxlIGRlZmluaXRpb24gd2l0aCBVVUlEICcl
cycgbGlzdGVkIGluIDIrIGJ1aWxkcGhhc2VzOiAnJXMnIGFuZCAnJXMnISIgJSAoZmlsZVVVSUQs
IHNlbGYuX3V1aWRfdG9fYnVpbGRwaGFzZV91dWlkW2ZpbGVVVUlEXSwgdXVpZCkpCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3V1aWRfdG9fYnVpbGRwaGFzZV91dWlkW2ZpbGVVVUlEXSA9IHV1
aWQKKyAgICAgICAgICAgICMgcHJvY2VzcyAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcKKyAgICAg
ICAgICAgIGlmICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JyBpbiBkZWZpbml0aW9uOgorICAgICAg
ICAgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91dWlkID0gc2VsZi5fZ2V0X3V1aWQo
ZGVmaW5pdGlvbiwgJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnKQorICAgICAgICAgICAgICAgIGlm
IGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91dWlkIGluIHNlbGYuX2J1aWxkX2NvbmZpZ3VyYXRp
b25fbGlzdF90b191dWlkIGFuZCB1dWlkICE9IHNlbGYuX2J1aWxkX2NvbmZpZ3VyYXRpb25fbGlz
dF90b191dWlkW2J1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91dWlkXToKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJVVUlEICclcycgbGlzdGVkIGluIDIr
ICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JyBlbnRyaWVzOiAnJXMnIGFuZCAnJXMnISIgJSAoYnVp
bGRfY29uZmlndXJhdGlvbl9saXN0X3V1aWQsIHNlbGYuX2J1aWxkX2NvbmZpZ3VyYXRpb25fbGlz
dF90b191dWlkW2J1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91dWlkXSwgdXVpZCkpCisgICAgICAg
ICAgICAgICAgc2VsZi5fYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3RvX3V1aWRbYnVpbGRfY29u
ZmlndXJhdGlvbl9saXN0X3V1aWRdID0gdXVpZAorICAgICAgICAgICAgIyBleHRyYWN0ICdtYWlu
R3JvdXAnIGlmIHByZXNlbnQKKyAgICAgICAgICAgIGlmICdtYWluR3JvdXAnIGluIGRlZmluaXRp
b246CisgICAgICAgICAgICAgICAgbWFpbl9ncm91cF91dWlkID0gc2VsZi5fZ2V0X3V1aWQoZGVm
aW5pdGlvbiwgJ21haW5Hcm91cCcpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbWFpbl9ncm91
cF91dWlkOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24o
Im1haW5Hcm91cCBkZWZpbmVkIDIrIHRpbWVzOiAnJXMnIGFuZCAnJXMnISIgJSAobWFpbl9ncm91
cF91dWlkLCBzZWxmLl9tYWluX2dyb3VwX3V1aWQpKQorICAgICAgICAgICAgICAgIHNlbGYuX21h
aW5fZ3JvdXBfdXVpZCA9IG1haW5fZ3JvdXBfdXVpZAorICAgICAgICAgICAgIyBleHRyYWN0IG5h
dGl2ZSB0YXJnZXQgb2YgdGhlIG1haW4gcHJvamVjdAorICAgICAgICAgICAgaXNhID0gc2VsZi5f
Z2V0X2lzYShkZWZpbml0aW9uKQorICAgICAgICAgICAgaWYgaXNhID09ICdQQlhOYXRpdmVUYXJn
ZXQnOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfc3RyaW5nKGRlZmluaXRpb24s
ICduYW1lJykKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09IHNlbGYuX3Byb2plY3RfbmFtZToK
KyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbWFpbl9wcm9qZWN0X25hdGl2ZV90YXJnZXQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIk5h
dGl2ZSB0YXJnZXQgZm9yIG1haW4gcHJvamVjdCBkZWZpbmVkIDIrIHRpbWVzISIpCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX21haW5fcHJvamVjdF9uYXRpdmVfdGFyZ2V0ID0gZGVmaW5pdGlv
bgorICAgICAgICAjIHNraXAgY2xvc2luZyAnfScgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuX3Jl
YWRfbmV4dCgpCisKKyAgICBkZWYgX3JlYWRfbWFpbl9vYmplY3Qoc2VsZik6CisgICAgICAgIHNl
bGYuX3NraXBfd2hpdGVzcGFjZV9hbmRfY29tbWVudHMoKQorICAgICAgICBzZWxmLl9za2lwX2No
YXIoJ3snKQorICAgICAgICB3aGlsZSBzZWxmLl9uZXh0ICE9ICd9JzoKKyAgICAgICAgICAgIGlk
ID0gc2VsZi5fcmVhZF9JRCgnJywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9za2lwX3doaXRl
c3BhY2VfYW5kX2NvbW1lbnRzKCkKKyAgICAgICAgICAgIHNlbGYuX3NraXBfY2hhcignPScpCisg
ICAgICAgICAgICAjIHJlYWQgdmFsdWUsIHNwZWNpYWwgY2FzZSBmb3IgJ29iamVjdHMnCisgICAg
ICAgICAgICBpZiBpZCA9PSAnb2JqZWN0cyc6CisgICAgICAgICAgICAgICAgc2VsZi5fcGJ4Wydv
YmplY3RzJ10gPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfdXVpZF9kZWZpbml0aW9u
c19vYmplY3QoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYnhb
aWRdID0gc2VsZi5fcmVhZF92YWx1ZSgpCisgICAgICAgICAgICBzZWxmLl9za2lwX3doaXRlc3Bh
Y2UoKQorICAgICAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCc7JykKKyAgICAgICAgIyBpZ25vcmUg
Y2xvc2luZyAnfScgLSBzdG9wIGhlcmUgdG8gYXZvaWQgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24K
KworICAgIGRlZiBfZmluZF9idWlsZHBoYXNlX3V1aWQoc2VsZiwgbGlzdCwgaXNhKToKKyAgICAg
ICAgZm9yIHV1aWQgaW4gbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHV1aWQs
IFhDb2RlVVVJRCk6CisgICAgICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9u
KCJmaW5kQnVpbGRQaGFzZTogYnVpbGQgcGhhc2UgbGlzdCBmb3IgbWFpbiBuYXRpdmUgdGFyZ2V0
IGNvbnRhaW5zIG5vbi1VVUlEICclcychIiAlIHV1aWQpCisgICAgICAgICAgICBpZiBzZWxmLl9n
ZXRfaXNhKHNlbGYuX3V1aWRzW3V1aWRdKSA9PSBpc2E6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHV1aWQKKyAgICAgICAgcmV0dXJuIFhDb2RlVVVJRCgpCisKKyAgICBkZWYgX3Bvc3Rwcm9jZXNz
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tYWluX3Byb2plY3RfbmF0aXZlX3RhcmdldDoKKyAg
ICAgICAgICAgIG5hdGl2ZVRhcmdldEJ1aWxkUGhhc2VzID0gc2VsZi5fZ2V0X2xpc3Qoc2VsZi5f
bWFpbl9wcm9qZWN0X25hdGl2ZV90YXJnZXQsICdidWlsZFBoYXNlcycpCisgICAgICAgICAgICBz
ZWxmLl9tYWluX3Byb2plY3Rfc291cmNlc191dWlkID0gc2VsZi5fZmluZF9idWlsZHBoYXNlX3V1
aWQobmF0aXZlVGFyZ2V0QnVpbGRQaGFzZXMsICdQQlhTb3VyY2VzQnVpbGRQaGFzZScpCisgICAg
ICAgICAgICBzZWxmLl9tYWluX3Byb2plY3RfaGVhZGVyc191dWlkID0gc2VsZi5fZmluZF9idWls
ZHBoYXNlX3V1aWQobmF0aXZlVGFyZ2V0QnVpbGRQaGFzZXMsICdQQlhIZWFkZXJzQnVpbGRQaGFz
ZScpCisgICAgICAgICAgICBzZWxmLl9tYWluX3Byb2plY3RfcmVzb3VyY2VzX3V1aWQgPSBzZWxm
Ll9maW5kX2J1aWxkcGhhc2VfdXVpZChuYXRpdmVUYXJnZXRCdWlsZFBoYXNlcywgJ1BCWFJlc291
cmNlc0J1aWxkUGhhc2UnKQorICAgICAgICAgICAgc2VsZi5fbWFpbl9wcm9qZWN0X2ZyYW1ld29y
a3NfdXVpZCA9IHNlbGYuX2ZpbmRfYnVpbGRwaGFzZV91dWlkKG5hdGl2ZVRhcmdldEJ1aWxkUGhh
c2VzLCAnUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2UnKQorCisgICAgZGVmIHBhcnNlX3Byb2plY3Rf
ZmlsZShzZWxmLCBmaWxlUGF0aCwgcHJvamVjdF9uYW1lPScnKToKKyAgICAgICAgIiIiUmVhZCBh
IHByb2plY3QgZmlsZSBmcm9tIGRpc2MgYW5kIHBhcnNlIGl0LgorCisgICAgICAgIGZpbGVQYXRo
IG11c3QgY29udGFpbiB0aGUgcHJvamVjdCBmaWxlIGl0c2VsZiwgbm90IGp1c3QgYSBkaXJlY3Rv
cnkuCisgICAgICAgIFRoZSBwcm9qZWN0IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBmaWxlIG5h
bWUgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2Vs
Zi5jbGVhcl9wcm9qZWN0X2RhdGEoKQorICAgICAgICBzZWxmLl9wcm9qZWN0X25hbWUgPSBwcm9q
ZWN0X25hbWUgb3Igc2VsZi5fZXh0cmFjdF9wcm9qZWN0X25hbWVfZnJvbV9maWxlX3BhdGgoZmls
ZVBhdGgpIG9yICdVbmtub3duJworICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGVQYXRoLCAn
cicsICd1dGY4JywgJ3JlcGxhY2UnKSBhcyBzZWxmLl9maWxlOgorICAgICAgICAgICAgc2VsZi5f
Y29udGVudCA9IHNlbGYuX2ZpbGUucmVhZCgpCisgICAgICAgICAgICBzZWxmLl9pdGVyID0gaXRl
cihzZWxmLl9jb250ZW50KQorICAgICAgICAgICAgc2VsZi5fbG9va2FoZWFkID0gc2VsZi5faXRl
ci5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAgICAgICAgICBzZWxm
Ll9yZWFkX21haW5fb2JqZWN0KCkKKyAgICAgICAgICAgIHNlbGYuX3Bvc3Rwcm9jZXNzKCkKKwor
ICAgICMgLS0tIHdyaXRpbmcgLS0tCisKKyAgICBkZWYgZ2VuZXJhdGVfY29tbWVudF9mb3JfdXVp
ZChzZWxmLCB1dWlkKToKKyAgICAgICAgIiIiR2VuZXJhdGVzIGEgY29tbWVudCBmb3IgdGhlIGdp
dmVuIFVVSUQuCisKKyAgICAgICAgVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGRlZmluaXRp
b24gZm9yIHRoZSBVVUlELCBhbmQgcG90ZW50aWFsbHkgYWxzbyB0aGF0IG9mIHJlbGF0ZWQgZGVm
aW5pdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBkZWZpbml0aW9uID0gc2VsZi5fdXVpZHNb
dXVpZF0KKyAgICAgICAgaWYgJ25hbWUnIGluIGRlZmluaXRpb246CisgICAgICAgICAgICByZXR1
cm4gc3RyKGRlZmluaXRpb25bJ25hbWUnXSkKKyAgICAgICAgaWYgJ3BhdGgnIGluIGRlZmluaXRp
b246CisgICAgICAgICAgICByZXR1cm4gc3RyKGRlZmluaXRpb25bJ3BhdGgnXSkKKyAgICAgICAg
aWYgJ2ZpbGVSZWYnIGluIGRlZmluaXRpb246CisgICAgICAgICAgICBmaWxlX3JlZiA9IHNlbGYu
X2dldF91dWlkKGRlZmluaXRpb24sICdmaWxlUmVmJykKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9
IHNlbGYuZ2V0X2NvbW1lbnRfZm9yX3V1aWQoZmlsZV9yZWYpCisgICAgICAgICAgICBpZiBub3Qg
dXVpZCBpbiBzZWxmLl91dWlkX3RvX2J1aWxkcGhhc2VfdXVpZDoKKyAgICAgICAgICAgICAgICBy
YWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIkludGVybmFsIEVycm9yIGdlbmVyYXRpbmcgY29t
bWVudDogTm8gYnVpbGQgcGhhc2UgZm91bmQgZm9yIFVVSUQgJyVzJyAoZmlsZV9yZWYgJyVzJykh
IiAlICh1dWlkLCBmaWxlX3JlZikpCisgICAgICAgICAgICBidWlsZF9waGFzZSA9IHNlbGYuZ2V0
X2NvbW1lbnRfZm9yX3V1aWQoc2VsZi5fdXVpZF90b19idWlsZHBoYXNlX3V1aWRbdXVpZF0pCisg
ICAgICAgICAgICByZXR1cm4gIiVzIGluICVzIiAlIChmaWxlX25hbWUsIGJ1aWxkX3BoYXNlKQor
ICAgICAgICBpc2EgPSBzZWxmLl9nZXRfaXNhKGRlZmluaXRpb24pCisgICAgICAgIGlmIGlzYSA9
PSAnUEJYSGVhZGVyc0J1aWxkUGhhc2UnOgorICAgICAgICAgICAgcmV0dXJuICJIZWFkZXJzIgor
ICAgICAgICBpZiBpc2EgPT0gJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJzoKKyAgICAgICAgICAgIHJl
dHVybiAiU291cmNlcyIKKyAgICAgICAgaWYgaXNhID09ICdQQlhSZXNvdXJjZXNCdWlsZFBoYXNl
JzoKKyAgICAgICAgICAgIHJldHVybiAiUmVzb3VyY2VzIgorICAgICAgICBpZiBpc2EgPT0gJ1BC
WEZyYW1ld29ya3NCdWlsZFBoYXNlJzoKKyAgICAgICAgICAgIHJldHVybiAiRnJhbWV3b3JrcyIK
KyAgICAgICAgaWYgaXNhID09ICdQQlhQcm9qZWN0JzoKKyAgICAgICAgICAgIHJldHVybiAiUHJv
amVjdCBvYmplY3QiCisgICAgICAgIGlmIGlzYSA9PSAnWENDb25maWd1cmF0aW9uTGlzdCc6Cisg
ICAgICAgICAgICBpZiBub3QgdXVpZCBpbiBzZWxmLl9idWlsZF9jb25maWd1cmF0aW9uX2xpc3Rf
dG9fdXVpZDoKKyAgICAgICAgICAgICAgICByYWlzZSBYQ29kZVByb2plY3RFeGNlcHRpb24oIklu
dGVybmFsIEVycm9yIGdlbmVyYXRpbmcgY29tbWVudDogTm8gYnVpbGQgY29uZmlndXJhdGlvbiB0
YXJnZXQgZm91bmQgZm9yIFVVSUQgJyVzJyEiICUgdXVpZCkKKyAgICAgICAgICAgIHRhcmdldF91
dWlkID0gc2VsZi5fYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3RvX3V1aWRbdXVpZF0KKyAgICAg
ICAgICAgIHRhcmdldCA9IHNlbGYuX3V1aWRzW3RhcmdldF91dWlkXQorICAgICAgICAgICAgdGFy
Z2V0X2lzYSA9IHNlbGYuX2dldF9pc2EodGFyZ2V0KQorICAgICAgICAgICAgdGFyZ2V0X2NvbW1l
bnQgPSBzZWxmLmdldF9jb21tZW50X2Zvcl91dWlkKHRhcmdldF91dWlkKQorICAgICAgICAgICAg
aWYgdGFyZ2V0X2NvbW1lbnQgPT0gIlByb2plY3Qgb2JqZWN0IjoKKyAgICAgICAgICAgICAgICB0
YXJnZXRfY29tbWVudCA9IHNlbGYuX3Byb2plY3RfbmFtZQorICAgICAgICAgICAgcmV0dXJuICdC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yICVzICIlcyInICUgKHRhcmdldF9pc2EsIHRhcmdl
dF9jb21tZW50KQorICAgICAgICByZXR1cm4gaXNhCisKKyAgICBkZWYgZ2V0X2NvbW1lbnRfZm9y
X3V1aWQoc2VsZiwgdXVpZCk6CisgICAgICAgICIiIlJldHJpZXZlIHRoZSBjb21tZW50IGZvciBh
IFVVSUQuCisKKyAgICAgICAgQXMgZ2VuZXJhdGVfY29tbWVudF9mb3JfdXVpZCwgYnV0IHVzZXMg
YSBjYWNoZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHV1aWQgbm90IGluIHNlbGYuX3V1aWRf
dG9fY29tbWVudF9jYWNoZToKKyAgICAgICAgICAgIHNlbGYuX3V1aWRfdG9fY29tbWVudF9jYWNo
ZVt1dWlkXSA9IHNlbGYuZ2VuZXJhdGVfY29tbWVudF9mb3JfdXVpZCh1dWlkKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fdXVpZF90b19jb21tZW50X2NhY2hlW3V1aWRdCisKKyAgICBkZWYgX3dyaXRl
X3V1aWRfYW5kX2NvbW1lbnQoc2VsZiwgdXVpZCk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUo
IiVzIC8qICVzICovIiAlIChzdHIodXVpZCksIHNlbGYuZ2V0X2NvbW1lbnRfZm9yX3V1aWQodXVp
ZCkpKQorCisgICAgZGVmIF9nZXRfc29ydF90eXBlX2Zvcl91dWlkKHNlbGYsIHV1aWQpOgorICAg
ICAgICBkZWZpbml0aW9uID0gc2VsZi5fdXVpZHNbdXVpZF0KKyAgICAgICAgaXNhID0gc2VsZi5f
Z2V0X2lzYShkZWZpbml0aW9uKQorICAgICAgICAjIHNvcnQgZ3JvdXBzIGJlZm9yZSBmaWxlcwor
ICAgICAgICBpZiBpc2EgPT0gJ1BCWEdyb3VwJzoKKyAgICAgICAgICAgIHJldHVybiAnQScKKyAg
ICAgICAgaWYgaXNhID09ICdQQlhWYXJpYW50R3JvdXAnOgorICAgICAgICAgICAgcmV0dXJuICdB
JworICAgICAgICBpZiBpc2EgPT0gJ1BCWEJ1aWxkRmlsZSc6CisgICAgICAgICAgICByZXR1cm4g
J0YnCisgICAgICAgIGlmIGlzYSA9PSAnUEJYRmlsZVJlZmVyZW5jZSc6CisgICAgICAgICAgICBy
ZXR1cm4gJ0YnCisgICAgICAgIHJhaXNlIFhDb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBlY3Rl
ZCBJU0EgJyVzJyBmb3IgVVVJRCAnJXMnIGluIHNvcnRlZCBsaXN0ISIgJSAoaXNhLCBzdHIodXVp
ZCkpKQorCisgICAgZGVmIF93cml0ZV9saXN0X3NvcnRlZF9tdWx0aV9saW5lKHNlbGYsIGxpc3Qs
IGluZGVudCk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIihcbiIpCisgICAgICAgIHN1Yl9p
bmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGRlY29yYXRlZF9saXN0ID0gWyh1LCBzZWxm
Ll9nZXRfc29ydF90eXBlX2Zvcl91dWlkKHUpICsgc2VsZi5nZXRfY29tbWVudF9mb3JfdXVpZCh1
KS5sb3dlcigpKSBmb3IgdSBpbiBsaXN0XQorICAgICAgICBzb3J0ZWRfbGlzdCA9IHNvcnRlZChk
ZWNvcmF0ZWRfbGlzdCwga2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSkpCisgICAgICAgIGZvciB1
dWlkLCBzb3J0X2tleSBpbiBzb3J0ZWRfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3Jp
dGUoc3ViX2luZGVudCkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3V1aWRfYW5kX2NvbW1lbnQo
dXVpZCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIixcbiIpCisgICAgICAgIHNlbGYu
X2ZpbGUud3JpdGUoaW5kZW50KQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIpIikKKworICAg
IGRlZiBfd3JpdGVfbGlzdF91bnNvcnRlZF9zaW5nbGVfbGluZShzZWxmLCBsaXN0KToKKyAgICAg
ICAgc2VsZi5fZmlsZS53cml0ZSgiKCIpCisgICAgICAgIGZvciB2YWx1ZSBpbiBsaXN0OgorICAg
ICAgICAgICAgc2VsZi5fd3JpdGVfdmFsdWUodmFsdWUsICcnLCBUcnVlKQorICAgICAgICAgICAg
c2VsZi5fZmlsZS53cml0ZSgiLCAiKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIpIikKKwor
ICAgIGRlZiBfd3JpdGVfbGlzdF91bnNvcnRlZF9tdWx0aV9saW5lKHNlbGYsIGxpc3QsIGluZGVu
dCk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIihcbiIpCisgICAgICAgIHN1Yl9pbmRlbnQg
PSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGZvciB2YWx1ZSBpbiBsaXN0OgorICAgICAgICAgICAg
c2VsZi5fZmlsZS53cml0ZShzdWJfaW5kZW50KQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfdmFs
dWUodmFsdWUsIHN1Yl9pbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0
ZSgiLFxuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYu
X2ZpbGUud3JpdGUoIikiKQorCisgICAgZGVmIF93cml0ZV9vYmplY3Rfc2luZ2xlX2xpbmUoc2Vs
Ziwgb2JqKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgieyIpCisgICAgICAgIGZvciBrZXkg
aW4gc29ydGVkKG9iai5rZXlzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShrZXkp
CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgc2VsZi5f
d3JpdGVfdmFsdWUob2JqW2tleV0sICcnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53
cml0ZSgiOyAiKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ9IikKKworICAgIGRlZiBfd3Jp
dGVfb2JqZWN0X211bHRpX2xpbmUoc2VsZiwgb2JqLCBpbmRlbnQpOgorICAgICAgICBzZWxmLl9m
aWxlLndyaXRlKCJ7XG4iKQorICAgICAgICBzdWJfaW5kZW50ID0gaW5kZW50ICsgJ1x0JworICAg
ICAgICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygpKToKKyAgICAgICAgICAgIHNlbGYuX2Zp
bGUud3JpdGUoc3ViX2luZGVudCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoa2V5KQor
ICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiID0gIikKKyAgICAgICAgICAgIHNlbGYuX3dy
aXRlX3ZhbHVlKG9ialtrZXldLCBzdWJfaW5kZW50LCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGUud3JpdGUoIjtcbiIpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoaW5kZW50KQorICAg
ICAgICBzZWxmLl9maWxlLndyaXRlKCJ9IikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
X2lzYV9zb3J0KHMpOgorICAgICAgICBpZiBzID09ICdpc2EnOgorICAgICAgICAgICAgcmV0dXJu
ICcnCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX3dyaXRlX29iamVjdF93aXRoX2lzYV9z
aW5nbGVfbGluZShzZWxmLCBvYmopOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ7IikKKyAg
ICAgICAgZm9yIGtleSBpbiBzb3J0ZWQob2JqLmtleXMoKSwga2V5PWxhbWJkYSBzOiBYQ29kZVBy
b2ouX2lzYV9zb3J0KHMpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoa2V5KQorICAg
ICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiID0gIikKKyAgICAgICAgICAgIHNlbGYuX3dyaXRl
X3ZhbHVlKG9ialtrZXldLCAnJywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUo
IjsgIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYgX3dyaXRlX29i
amVjdF93aXRoX2lzYV9tdWx0aV9saW5lKHNlbGYsIG9iaiwgaW5kZW50LCBzb3J0X2NoaWxkcmVu
X2FuZF9maWxlcyk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIntcbiIpCisgICAgICAgIHN1
Yl9pbmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKG9iai5r
ZXlzKCksIGtleT1sYW1iZGEgczogWENvZGVQcm9qLl9pc2Ffc29ydChzKSk6CisgICAgICAgICAg
ICBzZWxmLl9maWxlLndyaXRlKHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBzZWxmLl9maWxlLndy
aXRlKGtleSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAg
ICBpZiAoa2V5ID09ICdjaGlsZHJlbicgb3Iga2V5ID09ICdmaWxlcycpIGFuZCBzb3J0X2NoaWxk
cmVuX2FuZF9maWxlczoKKyAgICAgICAgICAgICAgICBsaXN0ID0gc2VsZi5fZ2V0X2xpc3Qob2Jq
LCBrZXkpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfbGlzdF9zb3J0ZWRfbXVsdGlfbGlu
ZShsaXN0LCBzdWJfaW5kZW50KQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ3JlbW90ZUdsb2Jh
bElEU3RyaW5nJzoKKyAgICAgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiwgJ3JlbW90ZUds
b2JhbElEU3RyaW5nJyB3cml0ZXMgdGhlIFVVSUQgd2l0aG91dCBjb21tZW50CisgICAgICAgICAg
ICAgICAgdXVpZCA9IHNlbGYuX2dldF91dWlkKG9iaiwgJ3JlbW90ZUdsb2JhbElEU3RyaW5nJykK
KyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cih1dWlkKSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdmFsdWUob2JqW2tleV0sIHN1Yl9p
bmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiO1xuIikKKyAgICAg
ICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIn0i
KQorCisgICAgZGVmIF93cml0ZV91dWlkX2RlZmluaXRpb25zX29iamVjdChzZWxmLCBpbmRlbnQp
OgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ7XG4iKQorICAgICAgICBzdWJfaW5kZW50ID0g
aW5kZW50ICsgJ1x0JworICAgICAgICBmb3IgaXNhIGluIHNvcnRlZChzZWxmLl9pc2FfdG9fdXVp
ZC5rZXlzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiXG4vKiBCZWdpbiAiKQor
ICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpc2EpCisgICAgICAgICAgICBzZWxmLl9maWxl
LndyaXRlKCIgc2VjdGlvbiAqL1xuIikKKyAgICAgICAgICAgIGZvciB1dWlkIGluIHNvcnRlZChz
ZWxmLl9pc2FfdG9fdXVpZFtpc2FdKToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRl
KHN1Yl9pbmRlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdXVpZF9hbmRfY29tbWVu
dCh1dWlkKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiA9ICIpCisgICAgICAg
ICAgICAgICAgZGVmaW5pdGlvbiA9IHNlbGYuX3V1aWRzW3V1aWRdCisgICAgICAgICAgICAgICAg
aXNhID0gc2VsZi5fZ2V0X2lzYShkZWZpbml0aW9uKQorICAgICAgICAgICAgICAgIGlmIGlzYSA9
PSAnUEJYQnVpbGRGaWxlJyBvciBpc2EgPT0gJ1BCWEZpbGVSZWZlcmVuY2UnOgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl93cml0ZV9vYmplY3Rfd2l0aF9pc2Ffc2luZ2xlX2xpbmUoc2VsZi5f
dXVpZHNbdXVpZF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fd3JpdGVfb2JqZWN0X3dpdGhfaXNhX211bHRpX2xpbmUoc2VsZi5fdXVpZHNbdXVpZF0s
IHN1Yl9pbmRlbnQsIHV1aWQgIT0gc2VsZi5fbWFpbl9ncm91cF91dWlkKQorICAgICAgICAgICAg
ICAgIHNlbGYuX2ZpbGUud3JpdGUoIjtcbiIpCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRl
KCIvKiBFbmQgIikKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoaXNhKQorICAgICAgICAg
ICAgc2VsZi5fZmlsZS53cml0ZSgiIHNlY3Rpb24gKi9cbiIpCisgICAgICAgIHNlbGYuX2ZpbGUu
d3JpdGUoaW5kZW50KQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ9IikKKworICAgIGRlZiBf
d3JpdGVfbWFpbl9vYmplY3Qoc2VsZiwgb2JqLCBpbmRlbnQpOgorICAgICAgICBzZWxmLl9maWxl
LndyaXRlKCJ7XG4iKQorICAgICAgICBzdWJfaW5kZW50ID0gaW5kZW50ICsgJ1x0JworICAgICAg
ICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUu
d3JpdGUoc3ViX2luZGVudCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoa2V5KQorICAg
ICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiID0gIikKKyAgICAgICAgICAgIGlmIGtleSA9PSAn
b2JqZWN0cyc6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdXVpZF9kZWZpbml0aW9uc19v
YmplY3Qoc3ViX2luZGVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fd3JpdGVfdmFsdWUob2JqW2tleV0sIHN1Yl9pbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAg
c2VsZi5fZmlsZS53cml0ZSgiO1xuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQp
CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIn1cbiIpCisKKyAgICBkZWYgX3dyaXRlX3ZhbHVl
KHNlbGYsIHZhbHVlLCBpbmRlbnQsIHNpbmdsZV9saW5lKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZSh2YWx1ZSwgWENvZGVVVUlEKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3V1aWRfYW5kX2Nv
bW1lbnQodmFsdWUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgWENvZGVTdHJpbmcp
OgorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnIiVzIicgJSBzdHIodmFsdWUpKQorICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgc2Vs
Zi5fZmlsZS53cml0ZSh2YWx1ZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0
KToKKyAgICAgICAgICAgIGlmIHNpbmdsZV9saW5lOgorICAgICAgICAgICAgICAgIHNlbGYuX3dy
aXRlX2xpc3RfdW5zb3J0ZWRfc2luZ2xlX2xpbmUodmFsdWUpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2xpc3RfdW5zb3J0ZWRfbXVsdGlfbGluZSh2YWx1
ZSwgaW5kZW50KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAg
ICAgICAgaWYgc2luZ2xlX2xpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfb2JqZWN0
X3NpbmdsZV9saW5lKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBz
ZWxmLl93cml0ZV9vYmplY3RfbXVsdGlfbGluZSh2YWx1ZSwgaW5kZW50KQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmFpc2UgWENvZGVQcm9qZWN0RXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJv
ciAtIHVua25vd24gdHlwZSAlcyBmb3IgdmFsdWUgJyVzJyBlbmNvdW50ZXJlZCEiICUgKHN0cih0
eXBlKHZhbHVlKSksIHZhbHVlKSkKKworICAgIGRlZiB3cml0ZV9wcm9qZWN0X2ZpbGUoc2VsZiwg
ZmlsZVBhdGgsIHByb2plY3RfbmFtZT0nJyk6CisgICAgICAgICIiIldyaXRlIGEgcHJvamVjdCBm
aWxlIHRvIGRpc2MuCisKKyAgICAgICAgZmlsZVBhdGggbXVzdCBpbmNsdWRlIHRoZSBwcm9qZWN0
IGZpbGUgaXRzZWxmIChub3QganVzdCBhIGRpcmVjdG9yeSkuCisgICAgICAgIFRoZSBwcm9qZWN0
IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBmaWxlIG5hbWUgdW5sZXNzIGV4cGxpY2l0bHkgc3Bl
Y2lmaWVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc2V0X3Byb2plY3RfbmFtZShwcm9q
ZWN0X25hbWUgb3Igc2VsZi5fZXh0cmFjdF9wcm9qZWN0X25hbWVfZnJvbV9maWxlX3BhdGgoZmls
ZVBhdGgpIG9yIHNlbGYuX3Byb2plY3RfbmFtZSkKKyAgICAgICAgd2l0aCBjb2RlY3Mub3Blbihm
aWxlUGF0aCwgJ3cnLCAndXRmOCcsICdyZXBsYWNlJykgYXMgc2VsZi5fZmlsZToKKyAgICAgICAg
ICAgIHNlbGYuX2ZpbGUud3JpdGUoIi8vICEkKlVURjgqJCFcbiIpCisgICAgICAgICAgICBzZWxm
Ll93cml0ZV9tYWluX29iamVjdChzZWxmLl9wYngsICcnKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100072</attachid>
            <date>2011-07-07 22:22:40 -0700</date>
            <delta_ts>2012-03-15 07:22:29 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-61773-20110708142238.patch</filename>
            <type>text/plain</type>
            <size>40895</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MTEKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZGMyNTA0NjAxODRlZTdhMTlkNzhiMDNiMjUwMjhhZWJi
NmNlYTVlLi43OGRkYjliMTg3ZmI1OWNkZGZlZjAzMDBjM2UxZjczM2ZmYTY0MmI0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTEtMDctMDggIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV3Jp
dGUgYSB0b29scyBsaWJyYXJ5IHRvIG1hbmlwdWxhdGUgWENvZGUgcHJvamVjdCBmaWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3NzMKKworICAg
ICAgICBBZGRpbmcgYSBQeXRob24gbGlicmFyeSAneGNvZGVwcm9qLnB5JyB1bmRlciBhIG5ldyBk
aXJlY3RvcnkgJ3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0Jy4KKyAgICAgICAgVGhlIGZpcnN0IHZl
cnNpb24gY29udGFpbnMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVjZXNzYXJ5IHRvOgorICAgICAgICAu
KSBSZWFkIGFuZCBwYXJzZSBhIHByb2plY3QucGJ4cHJvaiBmaWxlCisgICAgICAgIC4pIEFkZCBu
ZXcgZmlsZXMgYW5kIHByb2plY3QgZ3JvdXBzIHRvIHRoZSBwcm9qZWN0CisgICAgICAgIC4pIElt
cGxpY2l0bHkgc29ydCAnY2hpbGRyZW4nIGFuZCAnZmlsZXMnIGxpc3RzIHdpdGhpbiB0aGUgcHJv
amVjdAorICAgICAgICAuKSBHZW5lcmF0ZSBhbmQgd3JpdGUgYSBwcm9qZWN0IGZpbGUgdG8gZGlz
YworCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC94Y29kZXByb2ou
cHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNv
ZGVwcm9qX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKwogMjAxMS0wNy0wNyAgS2V2aW4gT2xsaXZpZXIg
IDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQgYnVp
bGQgZml4LCByZW1vdmUgb2xkIGZpbGVzIGZyb20gdGhlIHRyZWUgYW5kIHVwZGF0ZSBwYXRocyB0
byBuZXcgb25lcy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3By
b2plY3QveGNvZGVwcm9qLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVj
dC94Y29kZXByb2oucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFmODA1ZGRjZTliMjkxYzIyMWM3ZGMzYmU1YzNm
MjIzOWYzYmFjMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QveGNvZGVwcm9qLnB5CkBAIC0wLDAgKzEsODU0IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCByYW5k
b20KKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVT
eXN0ZW0KKworcmFuZG9tLnNlZWQoKSAgIyBTZWVkIHRoZSBnZW5lcmF0b3IKKworCisjIEFsbCBr
bm93biBwcm9qZWN0IGJ1aWxkIHBhdGggc291cmNlIHRyZWUgcGF0aCByZWZlcmVuY2UgdHlwZXMK
K1BCWF9WQUxJRF9TT1VSQ0VfVFJFRV9UWVBFUyA9ICgnIjxncm91cD4iJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnU09VUkNFX1JPT1QnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICciPGFic29sdXRlPiInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdCVUlMVF9QUk9EVUNUU19ESVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdE
RVZFTE9QRVJfRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU0RLUk9PVCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTkZJR1VSQVRJT05fVEVNUF9ESVIn
KQorCisjIFN1cHBvcnRlZCBYY29kZSBmaWxlIHR5cGVzCitFWFRFTlNJT05fVE9fWENPREVfRklM
RVRZUEVfQU5EX0JVSUxEX1BIQVNFID0geworICAgICcuYycgICAgICAgIDogKCdzb3VyY2Vjb2Rl
LmMuYycsICAgICAgICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5jcHAnICAgICAg
OiAoJ3NvdXJjZWNvZGUuY3BwLmNwcCcsICAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAg
ICAnLm0nICAgICAgICA6ICgnc291cmNlY29kZS5jLm9iamMnLCAgICAgICdQQlhTb3VyY2VzQnVp
bGRQaGFzZScpLAorICAgICcubW0nICAgICAgIDogKCdzb3VyY2Vjb2RlLmNwcC5vYmpjcHAnLCAg
J1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5wbCcgICAgICAgOiAoJ3RleHQuc2NyaXB0
LnBlcmwnLCAgICAgICAnUEJYSGVhZGVyc0J1aWxkUGhhc2UnKSwKKyAgICAnLnBuZycgICAgICA6
ICgnaW1hZ2UucG5nJywgICAgICAgICAgICAgICdQQlhSZXNvdXJjZXNCdWlsZFBoYXNlJyksCisg
ICAgJy50aWZmJyAgICAgOiAoJ2ltYWdlLnRpZmYnLCAgICAgICAgICAgICAnUEJYUmVzb3VyY2Vz
QnVpbGRQaGFzZScpLAorICAgICcudHh0JyAgICAgIDogKCd0ZXh0JywgICAgICAgICAgICAgICAg
ICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5mcmFtZXdvcmsnOiAoJ3dyYXBwZXIu
ZnJhbWV3b3JrJywgICAgICAnUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2UnKSwKKyAgICAnLm5pYicg
ICAgICA6ICgnd3JhcHBlci5uaWInLCAgICAgICAgICAgICdQQlhSZXNvdXJjZXNCdWlsZFBoYXNl
JyksCisgICAgIyBGSVhNRTogd2hlbiB0byB1c2UgJ3NvdXJjZWNvZGUuY3BwLmgnPworICAgICcu
aCcgICAgICAgIDogKCdzb3VyY2Vjb2RlLmMuaCcsICAgICAgICAgJ1BCWEhlYWRlcnNCdWlsZFBo
YXNlJyksCisgICAgIyBGSVhNRTogSSBIYXZlbid0IHNlZW4gdGhlc2UgZXh0ZW5zaW9ucyBpbiBh
Y3R1YWwgZmlsZXMsIHRoaXMgaXMgYW4gZXh0cmFwb2xhdGlvbiBmb3IgY29tcGxldGVuZXNzLgor
ICAgICcuY2MnICAgICAgIDogKCdzb3VyY2Vjb2RlLmNwcC5jcHAnLCAgICAgJ1BCWFNvdXJjZXNC
dWlsZFBoYXNlJyksCisgICAgJy5jeHgnICAgICAgOiAoJ3NvdXJjZWNvZGUuY3BwLmNwcCcsICAg
ICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLmhwcCcgICAgICA6ICgnc291cmNlY29k
ZS5jcHAuaCcsICAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFzZScpLAorICAgICcuaHh4JyAgICAg
IDogKCdzb3VyY2Vjb2RlLmNwcC5oJywgICAgICAgJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJyksCisg
ICAgIyBGSVhNRTogVGhpcyBpcyBhIGd1ZXNzIC0gSSBoYXZlbid0IHNlZW4gJ3RleHQuc2NyaXB0
LnB5dGhvbicgaW4gYWN0dWFsIHByb2plY3QgZmlsZXMuCisgICAgJy5weScgICAgICAgOiAoJ3Rl
eHQuc2NyaXB0LnB5dGhvbicsICAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKK30KKworCitj
bGFzcyBYY29kZVByb2plY3RFeGNlcHRpb24oUHJvamVjdEV4Y2VwdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBQcm9qZWN0RXhjZXB0aW9uLl9faW5pdF9f
KHNlbGYsIG1lc3NhZ2UpCisKKworY2xhc3MgWGNvZGVTdHJpbmcob2JqZWN0KToKKyAgICAiIiJD
bGFzcyBjb250YWluaW5nIGEgc2luZ2xlIFhjb2RlIFN0cmluZyAoc3RyaW5nIGluIHF1b3RlcyB3
aXRoaW4gdGhlIHByb2plY3QgZmlsZSkuCisKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVt
ZW1iZXIgdGhhdCB0aGUgb3JpZ2luYWwgZmllbGQgdmFsdWUgd2FzIGVuY2xvc2VkIGluIHF1b3Rl
cy4KKyAgICBTdHJpbmdzIGFyZSBwdXQgaW5zaWRlIGRvdWJsZSBxdW90ZXMgaWYgd3JpdHRlbiBh
cyB2YWx1ZXMsIGJ1dCB3cml0dGVuIHdpdGhvdXQgcXVvdGVzIHdpdGhpbiBjb21tZW50cy4KKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpbmcpOgorICAgICAgICBzZWxmLl9z
dHJpbmcgPSBzdHJpbmcKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fc3RyaW5nCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBo
YXNoKHNlbGYuX3N0cmluZykKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIGNtcChzZWxmLl9zdHJpbmcsIHN0cihvdGhlcikpCisKKyAgICBkZWYgX19lcV9f
KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cmluZyA9PSBzdHIob3RoZXIp
CisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0
cmluZyAhPSBzdHIob3RoZXIpCisKKworY2xhc3MgWGNvZGVVSUQob2JqZWN0KToKKyAgICAiIiJD
bGFzcyBjb250YWluaW5nIGEgc2luZ2xlIFhjb2RlIFVJRC4KKworICAgIFRoaXMgY2xhc3MgaXMg
dXNlZCB0byBkaWZmZXJlbnRpYXRlIFVJRHMgZnJvbSBvdGhlciBzdHJpbmcgdmFsdWVzLgorICAg
IFVJRHMgYXJlIHVzZWQgYXMga2V5cyBpbiB2YXJpb3VzIGludGVybmFsIG1hcHMuIFdoZW4gd3Jp
dHRlbiwgdGhleSByZXF1aXJlIGFuIGFkZGl0aW9uYWwgY29tbWVudCB0byBiZSBnZW5lcmF0ZWQu
CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkc3RyPU5vbmUpOgorICAgICAg
ICBpZiBub3QgdWlkc3RyOgorICAgICAgICAgICAgdWlkc3RyID0gJzAnICogMjQKKyAgICAgICAg
ZWxpZiBub3QgWGNvZGVVSUQuaXNfdmFsaWRfdWlkKHVpZHN0cik6CisgICAgICAgICAgICByYWlz
ZSBYY29kZVByb2plY3RFeGNlcHRpb24oIiclcycgaXMgbm90IGEgdmFsaWQgWGNvZGUgVUlEIC0g
ZXhhY3RseSAyNCB1cHBlci1jYXNlIGhleCBjaGFyYWN0ZXJzIGV4cGVjdGVkISIgJSB1aWRzdHIp
CisgICAgICAgIHNlbGYuX3VpZCA9IHVpZHN0cgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gaGFzaChzZWxmLl91aWQpCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIHJldHVybiBjbXAoc2VsZi5fdWlkLCBvdGhlci5fdWlkKQorCisgICAg
ZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl91aWQgPT0gb3Ro
ZXIuX3VpZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBz
ZWxmLl91aWQgIT0gb3RoZXIuX3VpZAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fdWlkCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3VpZAorCisgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fdWlkICE9ICcwJyAqIDI0CisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAg
ICAgIHJldHVybiBYY29kZVVJRC5pc192YWxpZF91aWQoc2VsZi5fdWlkKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBpc191aWRfY2hhcihjKToKKyAgICAgICAgcmV0dXJuIChjID49ICcw
JyBhbmQgYyA8PSAnOScpIG9yIChjID49ICdBJyBhbmQgYyA8PSAnRicpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGlzX3ZhbGlkX3VpZCh1aWRzdHIpOgorICAgICAgICBpZiBsZW4odWlk
c3RyKSAhPSAyNDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgYyBpbiB1
aWRzdHI6CisgICAgICAgICAgICBpZiBub3QgWGNvZGVVSUQuaXNfdWlkX2NoYXIoYyk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHJhbmRvbV91aWQoKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIHVpZCA9IFhjb2RlVUlEKCcnLmpvaW4oW3JhbmRvbS5jaG9pY2UoJzAxMjM0NTY3
ODlBQkNERUYnKSBmb3IgaSBpbiByYW5nZSgyNCldKSkKKyAgICAgICAgICAgIGlmIHVpZCAhPSBY
Y29kZVVJRCgnMCcgKiAyNCkgYW5kIHVpZCAhPSBYY29kZVVJRCgnRicgKiAyNCk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHVpZAorCisKK2RlZiB4Y29kZV9nZXRfdWlkKG9iaiwga2V5KToKKyAg
ICB2YWwgPSBvYmpba2V5XQorICAgIGlmIGlzaW5zdGFuY2UodmFsLCBYY29kZVVJRCk6CisgICAg
ICAgIHJldHVybiB2YWwKKyAgICByYWlzZSBYY29kZVByb2plY3RFeGNlcHRpb24oIlVuZXhwZWN0
ZWQgdHlwZSAnJXMnIGVuY291bnRlcmVkIGZvciBmaWVsZCAnJXMnIC0gVUlEIGV4cGVjdGVkISIg
JSAoc3RyKHR5cGUodmFsKSksIGtleSkpCisKKworZGVmIHhjb2RlX2dldF9saXN0KG9iaiwga2V5
KToKKyAgICB2YWwgPSBvYmpba2V5XQorICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KToKKyAg
ICAgICAgcmV0dXJuIHZhbAorICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBl
Y3RlZCB0eXBlICclcycgZW5jb3VudGVyZWQgZm9yIGZpZWxkICclcycgLSBsaXN0IGV4cGVjdGVk
ISIgJSAoc3RyKHR5cGUodmFsKSksIGtleSkpCisKKworZGVmIHhjb2RlX2dldF9zdHJpbmcob2Jq
LCBrZXkpOgorICAgIHZhbCA9IG9ialtrZXldCisgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJhc2Vz
dHJpbmcpOgorICAgICAgICByZXR1cm4gdmFsCisgICAgcmFpc2UgWGNvZGVQcm9qZWN0RXhjZXB0
aW9uKCJVbmV4cGVjdGVkIHR5cGUgJyVzJyBlbmNvdW50ZXJlZCBmb3IgZmllbGQgJyVzJyAtICd1
bmljb2RlJyBleHBlY3RlZCEiICUgKHN0cih0eXBlKHZhbCkpLCBrZXkpKQorCisKK2RlZiB4Y29k
ZV9nZXRfaXNhKG9iaik6CisgICAgcmV0dXJuIHhjb2RlX2dldF9zdHJpbmcob2JqLCAnaXNhJykK
KworCitjbGFzcyBYY29kZVByb2plY3QoUHJvamVjdCk6CisgICAgIiIiQ2xhc3MgY29udGFpbmlu
ZyBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGRlc2NyaWJpbmcgYW4gWGNvZGUgcHJvamVjdCBmaWxlLiIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tb24sIGFic3BhdGgpOgorICAgICAgICBzdXBl
cihYY29kZVByb2plY3QsIHNlbGYpLl9faW5pdF9fKGNvbW1vbiwgYWJzcGF0aCkKKyAgICAgICAg
c2VsZi5fcGJ4ID0ge30KKyAgICAgICAgc2VsZi5fdWlkX3RvX2RlZmluaXRpb24gPSB7fQorICAg
ICAgICBzZWxmLl9pc2FfdG9fdWlkID0ge30KKyAgICAgICAgc2VsZi5fZmlsZV91aWRfdG9fYnVp
bGRwaGFzZV91aWQgPSB7fQorICAgICAgICBzZWxmLl9idWlsZF9jb25maWd1cmF0aW9uX2xpc3Rf
dG9fdWlkID0ge30KKyAgICAgICAgc2VsZi5fdWlkX3RvX2NvbW1lbnRfY2FjaGUgPSB7fQorICAg
ICAgICBzZWxmLl9tYWluX2dyb3VwX3VpZCA9IFhjb2RlVUlEKCkKKyAgICAgICAgc2VsZi5fbWFp
bl9wcm9qZWN0X25hdGl2ZV90YXJnZXQgPSBOb25lCisgICAgICAgIHNlbGYuX3NvdXJjZXNfYnVp
bGRfcGhhc2UgPSBYY29kZVVJRCgpCisgICAgICAgIHNlbGYuX2hlYWRlcnNfYnVpbGRfcGhhc2Ug
PSBYY29kZVVJRCgpCisgICAgICAgIHNlbGYuX3Jlc291cmNlc19idWlsZF9waGFzZSA9IFhjb2Rl
VUlEKCkKKyAgICAgICAgc2VsZi5fZnJhbWV3b3Jrc19idWlsZF9waGFzZSA9IFhjb2RlVUlEKCkK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBleHRyYWN0X3Byb2plY3RfbmFtZV9mcm9tX3Bh
dGgoY2xzLCBmaWxlX3BhdGgsIGZpbGVzeXN0ZW0pOgorICAgICAgICBsaXN0ID0gZmlsZXN5c3Rl
bS5zcGxpdF9wYXRoKGZpbGVfcGF0aCkKKyAgICAgICAgaWYgbGVuKGxpc3QpIDwgMjoKKyAgICAg
ICAgICAgIHJldHVybiAnJworICAgICAgICBpZiBsaXN0Wy0xXSAhPSAncHJvamVjdC5wYnhwcm9q
JzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBiYXNlX25hbWUsIGV4dGVuc2lvbiA9
IGZpbGVzeXN0ZW0uc3BsaXRleHQobGlzdFstMl0pCisgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAn
Lnhjb2RlcHJvaic6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIGJhc2Vf
bmFtZQorCisgICAgIyAtLS0gbWFuaXB1bGF0aW9uIC0tLQorCisgICAgZGVmIGdlbmVyYXRlX3Vp
ZChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBuZXcgVUlEIHRoYXQgZG9lc24ndCB5ZXQg
ZXhpc3Qgd2l0aGluIHRoZSBwcm9qZWN0LiIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgdWlkID0gWGNvZGVVSUQucmFuZG9tX3VpZCgpCisgICAgICAgICAgICBpZiB1aWQgbm90
IGluIHNlbGYuX3VpZF90b19kZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiB1aWQK
KworICAgIGRlZiBhZGRfdWlkKHNlbGYsIHVpZCwgZGVmaW5pdGlvbik6CisgICAgICAgICIiIkFk
ZHMgYSBuZXcgVUlEIGRlZmluaXRpb24gdG8gdGhlIHByb2plY3QuIiIiCisgICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpOgorICAgICAgICAgICAgcmFpc2UgWGNvZGVQcm9q
ZWN0RXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogbm9uLVVJRCBwYXNzZWQgdG8gYWRkX3VpZCgp
ISIpCisgICAgICAgIGlmIHVpZCBpbiBzZWxmLl91aWRfdG9fZGVmaW5pdGlvbjoKKyAgICAgICAg
ICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiVUlEICclcycgZm9yIGlzYSAnJXMnIGFs
cmVhZHkgZGVmaW5lZCEiICUgKHVpZCwgZGVmaW5pdGlvblsnaXNhJ10pKQorICAgICAgICBpc2Eg
PSB4Y29kZV9nZXRfaXNhKGRlZmluaXRpb24pCisgICAgICAgIHNlbGYuX3VpZF90b19kZWZpbml0
aW9uW3VpZF0gPSBkZWZpbml0aW9uCisgICAgICAgIGlmIGlzYSBub3QgaW4gc2VsZi5faXNhX3Rv
X3VpZDoKKyAgICAgICAgICAgIHNlbGYuX2lzYV90b191aWRbaXNhXSA9IFt1aWRdCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pc2FfdG9fdWlkW2lzYV0uYXBwZW5kKHVpZCkKKwor
ICAgIGRlZiBhZGRfbmV3X3N1Yl9ncm91cChzZWxmLCBwYXJlbnRfZ3JvdXAsIHBhdGgpOgorICAg
ICAgICAiIiJBZGQgYSBzaW5nbGUgbmV3IHN1Yi1ncm91cC4KKworICAgICAgICBBZGQgYSBuZXcg
c3ViZ3JvdXAgdW5kZXIgcGFyZW50X2dyb3VwIGZvciBmaWxlcyB3aXRoIHRoZSBnaXZlbiBwYXRo
LgorICAgICAgICAoU2V0cyB0aGUgJ3BhdGgnIGZpZWxkIGZvciB0aGUgZ3JvdXAgdG8gdGhlIHBh
c3NlZC1pbiBwYXRoLikKKyAgICAgICAgIiIiCisgICAgICAgIGdyb3VwX3VpZCA9IHNlbGYuZ2Vu
ZXJhdGVfdWlkKCkKKyAgICAgICAgZ3JvdXAgPSB7CisgICAgICAgICAgICAnaXNhJzogICAgICAg
ICdQQlhHcm91cCcsCisgICAgICAgICAgICAnY2hpbGRyZW4nOiAgIFtdLAorICAgICAgICAgICAg
J3BhdGgnOiAgICAgICBwYXRoLAorICAgICAgICAgICAgJ3NvdXJjZVRyZWUnOiAnIjxncm91cD4i
JywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFkZF91aWQoZ3JvdXBfdWlkLCBncm91cCkKKyAg
ICAgICAgY2hpbGRyZW4gPSB4Y29kZV9nZXRfbGlzdChwYXJlbnRfZ3JvdXAsICdjaGlsZHJlbicp
CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChncm91cF91aWQpCisgICAgICAgIHJldHVybiBncm91
cAorCisgICAgZGVmIGFkZF9uZXdfc3ViX2dyb3VwcyhzZWxmLCBncm91cCwgc3ViX3BhdGgpOgor
ICAgICAgICAiIiJBZGQgbmV3IHByb2plY3QgZ3JvdXBzLgorCisgICAgICAgIFJlY3Vyc2l2ZWx5
IGFkZHMgYSBuZXcgcHJvamN0IHN1Yi1ncm91cCB0byBncm91cCBmb3IgZXZlcnkgZGlyZWN0b3J5
IGdpdmVuIGluIHN1Yl9wYXRoLgorICAgICAgICBSZXR1cm5zIHRoZSBsYXN0IChpbm5lcm1vc3Qp
IHN1Yi1ncm91cC4KKyAgICAgICAgIiIiCisgICAgICAgIGRpcmVjdG9yeV9saXN0ID0gc2VsZi5m
aWxlc3lzdGVtLnNwbGl0X3BhdGgoc3ViX3BhdGgpCisgICAgICAgIGZvciBkaXIgaW4gZGlyZWN0
b3J5X2xpc3Q6CisgICAgICAgICAgICBncm91cCA9IHNlbGYuYWRkX25ld19zdWJfZ3JvdXAoZ3Jv
dXAsIGRpcikKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYgX2ZpbmRfZ3JvdXBfYnlf
cGF0aChzZWxmLCBjdXJyZW50X2dyb3VwLCBwYXRoKToKKyAgICAgICAgaWYgbm90IHBhdGg6Cisg
ICAgICAgICAgICByZXR1cm4gJycsIGN1cnJlbnRfZ3JvdXAKKyAgICAgICAgIyBUcnkgdG8gZmlu
ZCBzdWl0YWJsZSBzdWItZ3JvdXAuCisgICAgICAgIGNoaWxkcmVuID0geGNvZGVfZ2V0X2xpc3Qo
Y3VycmVudF9ncm91cCwgJ2NoaWxkcmVuJykKKyAgICAgICAgZm9yIHVpZCBpbiBjaGlsZHJlbjoK
KyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiQ2hpbGRyZW4gbGlzdCBjb250YWlu
cyBub24tVUlEIGVudHJ5ICclcychIiAlIHVpZCkKKyAgICAgICAgICAgIGNoaWxkX2dyb3VwID0g
c2VsZi5fdWlkX3RvX2RlZmluaXRpb25bdWlkXQorICAgICAgICAgICAgaWYgeGNvZGVfZ2V0X2lz
YShjaGlsZF9ncm91cCkgIT0gJ1BCWEdyb3VwJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgc291cmNlX3RyZWUgPSBjaGlsZF9ncm91cFsnc291cmNlVHJlZSddCisgICAg
ICAgICAgICAjIE9ubHkgY29uc2lkZXIgZ3JvdXBzIHRoYXQgY29udGFpbiBhIHBhdGggYW5kIGFy
ZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGdyb3VwLgorICAgICAgICAgICAgIyBGSVhNRTogV2hh
dCB0byBkbyB3aXRoIGdyb3VwcyBsaWtlICdmaWxlYXBpJyBpbiBXZWJDb3JlIHRoYXQgdXNlICdu
YW1lJyByYXRoZXIgdGhhbiAncGF0aCcKKyAgICAgICAgICAgICMgICAgICAgIChhbmQgbGlzdCB0
aGVpciBjaGlsZCBmaWxlcyB3aXRoIGEgcmVsYXRpdmUgcGF0aCBwcmVmaXgpPworICAgICAgICAg
ICAgaWYgc291cmNlX3RyZWUgPT0gJ1NPVVJDRV9ST09UJzoKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorICAgICAgICAgICAgaWYgc291cmNlX3RyZWUgPT0gJ0JVSUxUX1BST0RVQ1RTX0RJUic6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc291
cmNlX3RyZWUsIFhjb2RlU3RyaW5nKSBhbmQgc291cmNlX3RyZWUgPT0gJzxhYnNvbHV0ZT4nOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShz
b3VyY2VfdHJlZSwgWGNvZGVTdHJpbmcpIG9yIHNvdXJjZV90cmVlICE9ICc8Z3JvdXA+JzoKKyAg
ICAgICAgICAgICAgICByYWlzZSBYY29kZVByb2plY3RFeGNlcHRpb24oIiIiR3JvdXAgY29udGFp
bnMgdW5rbm93biAnc291cmNlVHJlZScgZmllbGQgdmFsdWUgJyVzJyEiIiIgJSBzb3VyY2VfdHJl
ZSkKKyAgICAgICAgICAgIGlmICdwYXRoJyBpbiBjaGlsZF9ncm91cDoKKyAgICAgICAgICAgICAg
ICBwYXRoX29mX2NoaWxkX2dyb3VwID0gY2hpbGRfZ3JvdXBbJ3BhdGgnXQorICAgICAgICAgICAg
ICAgIGlmIHBhdGguc3RhcnRzd2l0aChwYXRoX29mX2NoaWxkX2dyb3VwKToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgbGVuKHBhdGgpID09IGxlbihwYXRoX29mX2NoaWxkX2dyb3VwKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAnJywgY2hpbGRfZ3JvdXAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgcGF0aFtsZW4ocGF0aF9vZl9jaGlsZF9ncm91cCldID09ICcvJzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2dyb3VwX2J5X3BhdGgoY2hpbGRfZ3Jv
dXAsIHBhdGhbbGVuKHBhdGhfb2ZfY2hpbGRfZ3JvdXApICsgMTpdKQorICAgICAgICAjIENvdWxk
IG5vdCByZXNvbHZlIHBhdGggLT4gcmV0dXJuIG5vbi1lbXB0eSBzdWItcGF0aCB0b2dldGhlciB3
aXRoIGN1cnJlbnQgZ3JvdXAuCisgICAgICAgIHJldHVybiBwYXRoLCBjdXJyZW50X2dyb3VwCisK
KyAgICBkZWYgX2ZpbmRfYnVpbGRwaGFzZV91aWQoc2VsZiwgbGlzdCwgYnVpbGRfcGhhc2UpOgor
ICAgICAgICBmb3IgdWlkIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1
aWQsIFhjb2RlVUlEKToKKyAgICAgICAgICAgICAgICByYWlzZSBYY29kZVByb2plY3RFeGNlcHRp
b24oImZpbmRCdWlsZFBoYXNlOiBidWlsZCBwaGFzZSBsaXN0IGZvciBtYWluIG5hdGl2ZSB0YXJn
ZXQgY29udGFpbnMgbm9uLVVJRCAnJXMnISIgJSB1aWQpCisgICAgICAgICAgICBpZiB4Y29kZV9n
ZXRfaXNhKHNlbGYuX3VpZF90b19kZWZpbml0aW9uW3VpZF0pID09IGJ1aWxkX3BoYXNlOgorICAg
ICAgICAgICAgICAgIHJldHVybiB1aWQKKyAgICAgICAgcmV0dXJuIFhjb2RlVUlEKCkKKworICAg
IGRlZiBfZGV0ZXJtaW5lX2ZpbGVfdHlwZV9hbmRfYnVpbGRfcGhhc2Uoc2VsZiwgZmlsZV9uYW1l
KToKKyAgICAgICAgYmFzZV9uYW1lLCBleHRlbnNpb24gPSBzZWxmLmZpbGVzeXN0ZW0uc3BsaXRl
eHQoZmlsZV9uYW1lKQorICAgICAgICBpZiBub3QgZXh0ZW5zaW9uIGluIEVYVEVOU0lPTl9UT19Y
Q09ERV9GSUxFVFlQRV9BTkRfQlVJTERfUEhBU0U6CisgICAgICAgICAgICByYWlzZSBYY29kZVBy
b2plY3RFeGNlcHRpb24oIkNvdWxkIG5vdCBkZXRlcm1pbmUgZmlsZSB0eXBlIGZyb20gZXh0ZW5z
aW9uIGZvciBmaWxlICclcyciICUgZmlsZV9uYW1lKQorICAgICAgICBuYXRpdmVUYXJnZXRCdWls
ZFBoYXNlcyA9IHhjb2RlX2dldF9saXN0KHNlbGYuX21haW5fcHJvamVjdF9uYXRpdmVfdGFyZ2V0
LCAnYnVpbGRQaGFzZXMnKQorICAgICAgICBmaWxlX3R5cGUsIGJ1aWxkX3BoYXNlID0gRVhURU5T
SU9OX1RPX1hDT0RFX0ZJTEVUWVBFX0FORF9CVUlMRF9QSEFTRVtleHRlbnNpb25dCisgICAgICAg
IHJldHVybiBmaWxlX3R5cGUsIGJ1aWxkX3BoYXNlLCBzZWxmLl9maW5kX2J1aWxkcGhhc2VfdWlk
KG5hdGl2ZVRhcmdldEJ1aWxkUGhhc2VzLCBidWlsZF9waGFzZSkKKworICAgIGRlZiBhZGRfZmls
ZShzZWxmLCByZWxfcGF0aCwgZmlsZV9uYW1lLCBhZGRfbmV3X3N1Ymdyb3Vwcz1UcnVlKToKKyAg
ICAgICAgIiIiQWRkIGEgbmV3IGZpbGUgdG8gdGhlIHByb2plY3QuCisKKyAgICAgICAgcmVsX3Bh
dGg6IHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgZmlsZSByb290IGRpcmVjdG9yeSAoU09V
UkNFX1JPT1QpCisgICAgICAgIGZpbGVfbmFtZTogZmlsZSBuYW1lIChpbmNsLiBleHRlbnNpb24p
IG9mIHRoZSBuZXcgZmlsZQorICAgICAgICBhZGRfbmV3X3N1Ymdyb3VwczogYWRkIG5ldyBwcm9q
ZWN0IGdyb3VwcyBpZiBubyBwcm9qZWN0IGdyb3VwcyBleGlzdCBmb3IgdGhlIGdpdmVuIHBhdGg/
CisgICAgICAgICIiIgorICAgICAgICAjIEZJWE1FOiBWZXJpZnkgdGhhdCB0aGUgZmlsZSBkb2Vz
bid0IGFscmVhZHkgZXhpc3QuCisgICAgICAgIGZpbGVfdHlwZSwgYnVpbGRfcGhhc2UsIGJ1aWxk
X3BoYXNlX3VpZCA9IHNlbGYuX2RldGVybWluZV9maWxlX3R5cGVfYW5kX2J1aWxkX3BoYXNlKGZp
bGVfbmFtZSkKKyAgICAgICAgaWYgbm90IGJ1aWxkX3BoYXNlX3VpZC5pc192YWxpZCgpOgorICAg
ICAgICAgICAgcmFpc2UgWGNvZGVQcm9qZWN0RXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIGJ1
aWxkIHBoYXNlICclcycgZm9yIGZpbGUgJyVzJyIgJSAoYnVpbGRfcGhhc2UsIGZpbGVfbmFtZSkp
CisgICAgICAgIHN1Yl9wYXRoLCBncm91cCA9IHNlbGYuX2ZpbmRfZ3JvdXBfYnlfcGF0aChzZWxm
Ll91aWRfdG9fZGVmaW5pdGlvbltzZWxmLl9tYWluX2dyb3VwX3VpZF0sIHJlbF9wYXRoKQorICAg
ICAgICBpZiBzdWJfcGF0aDoKKyAgICAgICAgICAgIGlmIGFkZF9uZXdfc3ViZ3JvdXBzOgorICAg
ICAgICAgICAgICAgIGdyb3VwID0gc2VsZi5hZGRfbmV3X3N1Yl9ncm91cHMoZ3JvdXAsIHN1Yl9w
YXRoKQorICAgICAgICAgICAgICAgIHN1Yl9wYXRoID0gJycKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gc3ViX3BhdGggKyAnLycgKyBmaWxlX25hbWUKKyAg
ICAgICAgIyBBZGQgdGhlIG5ldyBmaWxlIHJlZmVyZW5jZSBlbnRyeS4KKyAgICAgICAgZmlsZV9y
ZWZlcmVuY2VfdWlkID0gc2VsZi5nZW5lcmF0ZV91aWQoKQorICAgICAgICBzZWxmLmFkZF91aWQo
ZmlsZV9yZWZlcmVuY2VfdWlkLCB7CisgICAgICAgICAgICAnaXNhJzogICAgICAgICAgICAgICAn
UEJYRmlsZVJlZmVyZW5jZScsCisgICAgICAgICAgICAnZmlsZUVuY29kaW5nJzogICAgICAnNCcs
CisgICAgICAgICAgICAnbGFzdEtub3duRmlsZVR5cGUnOiBmaWxlX3R5cGUsCisgICAgICAgICAg
ICAncGF0aCc6ICAgICAgICAgICAgICBmaWxlX25hbWUsCisgICAgICAgICAgICAnc291cmNlVHJl
ZSc6ICAgICAgICAnIjxncm91cD4iJywKKyAgICAgICAgfSkKKyAgICAgICAgIyBBZGQgdGhlIG5l
dyBidWlsZCBmaWxlIGVudHJ5LgorICAgICAgICBidWlsZGZpbGVfdWlkID0gc2VsZi5nZW5lcmF0
ZV91aWQoKQorICAgICAgICBzZWxmLmFkZF91aWQoYnVpbGRmaWxlX3VpZCwgeworICAgICAgICAg
ICAgJ2lzYSc6ICAgICAnUEJYQnVpbGRGaWxlJywKKyAgICAgICAgICAgICdmaWxlUmVmJzogZmls
ZV9yZWZlcmVuY2VfdWlkLAorICAgICAgICAgICAgIyBGSVhNRTogQWRkICJzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IiB3aGVyZSBuZWNlc3NhcnkhCisgICAgICAgIH0p
CisgICAgICAgICMgQWRkIHRoZSBidWlsZCBmaWxlIHRvIHRoZSBhcHByb3ByaWF0ZSBidWlsZCBw
aGFzZS4KKyAgICAgICAgYnVpbGRfcGhhc2UgPSBzZWxmLl91aWRfdG9fZGVmaW5pdGlvbltidWls
ZF9waGFzZV91aWRdCisgICAgICAgIGJ1aWxkX3BoYXNlX2ZpbGVzID0geGNvZGVfZ2V0X2xpc3Qo
YnVpbGRfcGhhc2UsICdmaWxlcycpCisgICAgICAgIGJ1aWxkX3BoYXNlX2ZpbGVzLmFwcGVuZChi
dWlsZGZpbGVfdWlkKQorICAgICAgICAjIEFkZCB0aGUgZmlsZSByZWZlcmVuY2UgdG8gaXRzIHBy
b2plY3QgZ3JvdXAuCisgICAgICAgIGdyb3VwX2NoaWxkX2xpc3QgPSB4Y29kZV9nZXRfbGlzdChn
cm91cCwgJ2NoaWxkcmVuJykKKyAgICAgICAgZ3JvdXBfY2hpbGRfbGlzdC5hcHBlbmQoZmlsZV9y
ZWZlcmVuY2VfdWlkKQorICAgICAgICAjIFVwZGF0ZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMu
CisgICAgICAgIHNlbGYuX2ZpbGVfdWlkX3RvX2J1aWxkcGhhc2VfdWlkW2J1aWxkZmlsZV91aWRd
ID0gYnVpbGRfcGhhc2VfdWlkCisKKworY2xhc3MgWGNvZGVQcm9qZWN0UmVhZGVyKFByb2plY3RS
ZWFkZXIpOgorICAgICIiIlNlcmlhbGl6ZXIgKHJlYWRlcikgZm9yIFhjb2RlIHByb2plY3QgZmls
ZXMuIiIiCisgICAgUFJPSkVDVF9DTEFTUyA9IFhjb2RlUHJvamVjdAorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNvbW1vbik6CisgICAgICAgIHN1cGVyKFhjb2RlUHJvamVjdFJlYWRlciwgc2Vs
ZikuX19pbml0X18oY29tbW9uKQorICAgICAgICBzZWxmLl9jb250ZW50ID0gJycKKyAgICAgICAg
c2VsZi5faXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmV4dCA9ICdcMCcKKyAgICAgICAgc2Vs
Zi5fbG9va2FoZWFkID0gJ1wwJworCisgICAgIyAtLS0gcGFyc2luZyAtLS0KKworICAgIGRlZiBf
cmVhZF9uZXh0KHNlbGYpOgorICAgICAgICAjIFBhcnNpbmcgc2hvdWxkIHN0b3Agd2l0aCB0aGUg
bGFzdCAyIGNoYXJhY3RlcnMgYmVpbmcgJ30nIGFuZCAnXG4nLgorICAgICAgICAjIElmIHRoYXQg
aXMgbm90IHRoZSBjYXNlLCBwYXJzaW5nIHdpbGwgZmFpbCB3aXRoIGFuIHVuZXhwZWN0ZWQgU3Rv
cEl0ZXJhdGlvbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuX25leHQgPSBzZWxmLl9sb29rYWhl
YWQKKyAgICAgICAgc2VsZi5fbG9va2FoZWFkID0gc2VsZi5faXRlci5uZXh0KCkKKworICAgIGRl
ZiBfbmV4dF9pc19lb2xfY2hhcihzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX25leHQKKyAgICAg
ICAgcmV0dXJuIGMgPT0gJ1xuJyBvciBjID09ICdccicKKworICAgIGRlZiBfbmV4dF9pc193aGl0
ZXNwYWNlX2NoYXIoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9uZXh0CisgICAgICAgIHJldHVy
biBjID09ICcgJyBvciBjID09ICdcdCcgb3IgYyA9PSAnXG4nIG9yIGMgPT0gJ1xyJworCisgICAg
ZGVmIF9uZXh0X2lzX2RpZ2l0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmV4dCA+PSAn
MCcgYW5kIHNlbGYuX25leHQgPD0gJzknCisKKyAgICBkZWYgX25leHRfaXNfdWlkX2NoYXIoc2Vs
Zik6CisgICAgICAgIHJldHVybiBYY29kZVVJRC5pc191aWRfY2hhcihzZWxmLl9uZXh0KQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfaXNfaWRfaW5pdGlhbF9jaGFyKGMpOgorICAgICAg
ICByZXR1cm4gKGMgPj0gJ0EnIGFuZCBjIDw9ICdaJykgb3IgKGMgPj0gJ2EnIGFuZCBjIDw9ICd6
Jykgb3IgYyA9PSAnXycKKworICAgIGRlZiBfbmV4dF9pc19pZF9pbml0aWFsX2NoYXIoc2VsZik6
CisgICAgICAgIHJldHVybiBYY29kZVByb2plY3RSZWFkZXIuX2lzX2lkX2luaXRpYWxfY2hhcihz
ZWxmLl9uZXh0KQorCisgICAgZGVmIF9uZXh0X2lzX2lkX2NoYXIoc2VsZik6CisgICAgICAgIGMg
PSBzZWxmLl9uZXh0CisgICAgICAgIHJldHVybiAoYyA+PSAnQScgYW5kIGMgPD0gJ1onKSBvciAo
YyA+PSAnYScgYW5kIGMgPD0gJ3onKSBvciAoYyA+PSAnMCcgYW5kIGMgPD0gJzknKSBvciBjID09
ICdfJworCisgICAgZGVmIF9uZXh0X2lzX3BhdGhfY2hhcihzZWxmKToKKyAgICAgICAgYyA9IHNl
bGYuX25leHQKKyAgICAgICAgcmV0dXJuIChjID49ICdBJyBhbmQgYyA8PSAnWicpIG9yIChjID49
ICdhJyBhbmQgYyA8PSAneicpIG9yIChjID49ICcwJyBhbmQgYyA8PSAnOScpIG9yIGMgaW4gJ18t
Ly4nCisKKyAgICBkZWYgX3NraXBfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgd2hpbGUgc2Vs
Zi5fbmV4dF9pc193aGl0ZXNwYWNlX2NoYXIoKToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4
dCgpCisKKyAgICBkZWYgX3NraXBfbGluZShzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYu
X25leHRfaXNfZW9sX2NoYXIoKToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisKKyAg
ICBkZWYgX3NraXBfY29tbWVudChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX25leHQgPT0g
Jy8nOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2xvb2thaGVh
ZCA9PSAnLyc6ICAjICIvLyItY29tbWVudDogUmVhZCB1bnRpbCBlbmQgb2YgbGluZS4KKyAgICAg
ICAgICAgIHNlbGYuX3NraXBfbGluZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICBpZiBzZWxmLl9sb29rYWhlYWQgPT0gJyonOiAgIyAiLyogLi4uICovIi1jb21tZW50OiBSZWFk
IHRpbGwgIiovIi4KKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAgICAgICAgICBz
ZWxmLl9yZWFkX25leHQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5fbmV4dCAhPSAnKicgb3Ig
c2VsZi5fbG9va2FoZWFkICE9ICcvJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX25leHQo
KQorICAgICAgICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRf
bmV4dCgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIEFzc3VtZSAnLycgZm9s
bG93ZWQgYnkgYSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycgb3IgJyonIGlzIHRoZSBzdGFydCBv
ZiBhIHBhdGguCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9za2lwX3doaXRlc3Bh
Y2VfYW5kX2NvbW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLl9za2lwX3doaXRlc3BhY2UoKQor
ICAgICAgICB3aGlsZSBzZWxmLl9za2lwX2NvbW1lbnQoKToKKyAgICAgICAgICAgIHNlbGYuX3Nr
aXBfd2hpdGVzcGFjZSgpCisKKyAgICBkZWYgX3NraXBfY2hhcihzZWxmLCBjKToKKyAgICAgICAg
aWYgc2VsZi5fbmV4dCAhPSBjOgorICAgICAgICAgICAgcmFpc2UgWGNvZGVQcm9qZWN0RXhjZXB0
aW9uKCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnJWMnIGVuY291bnRlcmVkICAtICclYycgZXhwZWN0
ZWQhIiAlIChzZWxmLl9uZXh0LCBjKSkKKyAgICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAg
ICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisKKyAgICBkZWYgX3JlYWRf
cGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4dF9pc19wYXRoX2NoYXIo
KToKKyAgICAgICAgICAgIHBhdGggKz0gc2VsZi5fbmV4dAorICAgICAgICAgICAgc2VsZi5fcmVh
ZF9uZXh0KCkKKyAgICAgICAgaWYgbm90IHNlbGYuX25leHRfaXNfd2hpdGVzcGFjZV9jaGFyKCkg
YW5kIHNlbGYuX25leHQgIT0gJzsnIGFuZCBzZWxmLl9uZXh0ICE9ICcsJzoKKyAgICAgICAgICAg
IHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyVjJyBl
bmNvdW50ZXJlZCBhZnRlciBwYXRoICg/KSB2YWx1ZSAnJXMnIC0gd2hpdGUgc3BhY2UsICc7JyBv
ciAnLCcgZXhwZWN0ZWQhIiAlIChzZWxmLl9uZXh0LCBwYXRoKSkKKyAgICAgICAgcmV0dXJuIHBh
dGgKKworICAgIGRlZiBfcmVhZF9JRChzZWxmLCBpZCwgbWF5X2ZhbGxfYmFja190b19wYXRoKToK
KyAgICAgICAgaWYgaWQgPT0gJycgYW5kIG5vdCBzZWxmLl9uZXh0X2lzX2lkX2luaXRpYWxfY2hh
cigpOgorICAgICAgICAgICAgaWYgbWF5X2ZhbGxfYmFja190b19wYXRoOgorICAgICAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9yZWFkX3BhdGgoJycpCisgICAgICAgICAgICByYWlzZSBYY29kZVBy
b2plY3RFeGNlcHRpb24oIkludGVybmFsIGVycm9yIC0gX3JlYWRfSUQgY2FsbGVkIG9uIG5vbi1J
RCBzdHJpbmcgJyVzJyEiICUgKGlkICsgc2VsZi5fbmV4dCkpCisgICAgICAgIHdoaWxlIHNlbGYu
X25leHRfaXNfaWRfY2hhcigpOgorICAgICAgICAgICAgaWQgKz0gc2VsZi5fbmV4dAorICAgICAg
ICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgaWYgc2VsZi5fbmV4dF9pc19wYXRoX2No
YXIoKToKKyAgICAgICAgICAgIGlmIG1heV9mYWxsX2JhY2tfdG9fcGF0aDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZF9wYXRoKGlkKQorICAgICAgICAgICAgcmFpc2UgWGNvZGVQ
cm9qZWN0RXhjZXB0aW9uKCJJZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGlsbGVnYWwgY2hhcmFjdGVy
ICclYychIiAlIHNlbGYuX25leHQpCisgICAgICAgIHJldHVybiBpZAorCisgICAgZGVmIF9yZWFk
X3VpZChzZWxmLCB1aWRzdHIsIG1heV9mYWxsX2JhY2tfdG9faWQsIG1heV9mYWxsX2JhY2tfdG9f
cGF0aCk6CisgICAgICAgIHdoaWxlIGxlbih1aWRzdHIpIDwgMjQgYW5kIHNlbGYuX25leHRfaXNf
dWlkX2NoYXIoKToKKyAgICAgICAgICAgIHVpZHN0ciArPSBzZWxmLl9uZXh0CisgICAgICAgICAg
ICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICBpZiBzZWxmLl9uZXh0X2lzX2lkX2NoYXIoKToK
KyAgICAgICAgICAgIGlmIG1heV9mYWxsX2JhY2tfdG9faWQgYW5kICh1aWRzdHIgPT0gJycgb3Ig
c2VsZi5faXNfaWRfaW5pdGlhbF9jaGFyKHVpZHN0clswXSkpOgorICAgICAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9yZWFkX0lEKHVpZHN0ciwgbWF5X2ZhbGxfYmFja190b19wYXRoKQorICAgICAg
ICAgICAgcmFpc2UgWGNvZGVQcm9qZWN0RXhjZXB0aW9uKCJVSUQgKD8pICclcycgaGFzIGNoYXJh
Y3RlciAnJWMnIGZvbGxvd2luZyEiICUgKHVpZHN0ciwgc2VsZi5fbmV4dCkpCisgICAgICAgIGlm
IHNlbGYuX25leHRfaXNfcGF0aF9jaGFyKCk6CisgICAgICAgICAgICBpZiBtYXlfZmFsbF9iYWNr
X3RvX3BhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfcGF0aCh1aWRzdHIp
CisgICAgICAgICAgICByYWlzZSBYY29kZVByb2plY3RFeGNlcHRpb24oIlVJRCAoPykgJyVzJyBo
YXMgY2hhcmFjdGVyICclYycgZm9sbG93aW5nISIgJSAodWlkc3RyLCBzZWxmLl9uZXh0KSkKKyAg
ICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgIHJldHVy
biBYY29kZVVJRCh1aWRzdHIpCisKKyAgICBkZWYgX3JlYWRfaW50ZWdlcihzZWxmLCBtYXlfZmFs
bF9iYWNrX3RvX3VpZCwgbWF5X2ZhbGxfYmFja190b19wYXRoKToKKyAgICAgICAgaWYgbm90IHNl
bGYuX25leHRfaXNfZGlnaXQoKToKKyAgICAgICAgICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2Vw
dGlvbigiSW50ZXJuYWwgZXJyb3IgLSBfcmVhZF9pbnRlZ2VyIGNhbGxlZCBvbiBub24taW50ZWdl
ciBjaGFyYWN0ZXIgJyVjJyEiICUgc2VsZi5fbmV4dCkKKyAgICAgICAgaW50ZWdlciA9ICcnCisg
ICAgICAgIHdoaWxlIHNlbGYuX25leHRfaXNfZGlnaXQoKToKKyAgICAgICAgICAgIGludGVnZXIg
Kz0gc2VsZi5fbmV4dAorICAgICAgICAgICAgc2VsZi5fcmVhZF9uZXh0KCkKKyAgICAgICAgaWYg
c2VsZi5fbmV4dF9pc191aWRfY2hhcigpOgorICAgICAgICAgICAgaWYgbWF5X2ZhbGxfYmFja190
b191aWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdWlkKGludGVnZXIsIEZh
bHNlLCBtYXlfZmFsbF9iYWNrX3RvX3BhdGgpCisgICAgICAgICAgICByYWlzZSBYY29kZVByb2pl
Y3RFeGNlcHRpb24oIkludGVnZXIgKD8pICclcycgaGFzIGNoYXJhY3RlciAnJWMnIGZvbGxvd2lu
ZyEiICUgKGludGVnZXIsIHNlbGYuX25leHQpKQorICAgICAgICBpZiBzZWxmLl9uZXh0X2lzX3Bh
dGhfY2hhcigpOgorICAgICAgICAgICAgaWYgbWF5X2ZhbGxfYmFja190b19wYXRoOgorICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3BhdGgoaW50ZWdlcikKKyAgICAgICAgICAgIHJh
aXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiSW50ZWdlciAoPykgJyVzJyBoYXMgY2hhcmFjdGVy
ICclYycgZm9sbG93aW5nISIgJSAoaW50ZWdlciwgc2VsZi5fbmV4dCkpCisgICAgICAgIGlmIGxl
bihpbnRlZ2VyKSA9PSAyNCBhbmQgbWF5X2ZhbGxfYmFja190b191aWQ6CisgICAgICAgICAgICAj
IFN0cmluZyBvZiAyNCBkaWdpdHMgLSBhc3N1bWUgaXQncyBhbiBVSUQuCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcmVhZF91aWQoaW50ZWdlciwgRmFsc2UsIEZhbHNlKQorICAgICAgICByZXR1
cm4gaW50ZWdlcgorCisgICAgZGVmIF9yZWFkX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5f
c2tpcF9jaGFyKCciJykKKyAgICAgICAgc3RydmFsID0gJycKKyAgICAgICAgd2hpbGUgc2VsZi5f
bmV4dCAhPSAnIic6CisgICAgICAgICAgICBpZiBzZWxmLl9uZXh0ID09ICdcXCc6CisgICAgICAg
ICAgICAgICAgIyBFc2NhcGUgJ1wnIC0ganVzdCBhZGQgaXQgYW5kIHRoZSBuZXh0IGNoYXJhY3Rl
ciwgd2hhdGV2ZXIgaXQgaXMuCisgICAgICAgICAgICAgICAgc3RydmFsICs9ICdcXCcKKyAgICAg
ICAgICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICAgICAgc3RydmFsICs9IHNlbGYu
X25leHQKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfbmV4dCgpCisgICAgICAgIHNlbGYuX3NraXBf
Y2hhcignIicpCisgICAgICAgIHJldHVybiBYY29kZVN0cmluZyhzdHJ2YWwpCisKKyAgICBkZWYg
X3JlYWRfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuX3NraXBfd2hpdGVzcGFjZV9hbmRfY29t
bWVudHMoKQorICAgICAgICBpZiBzZWxmLl9uZXh0ID09ICd7JzoKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl9yZWFkX29iamVjdCgpCisgICAgICAgIGlmIHNlbGYuX25leHQgPT0gJygnOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfbGlzdCgpCisgICAgICAgIGlmIHNlbGYuX25leHQg
PT0gJyInOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfc3RyaW5nKCkKKyAgICAgICAg
aWYgc2VsZi5fbmV4dF9pc19kaWdpdCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRf
aW50ZWdlcihUcnVlLCBUcnVlKQorICAgICAgICBpZiBzZWxmLl9uZXh0X2lzX3VpZF9jaGFyKCk6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91aWQoJycsIFRydWUsIFRydWUpCisgICAg
ICAgIGlmIHNlbGYuX25leHRfaXNfaWRfaW5pdGlhbF9jaGFyKCk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fcmVhZF9JRCgnJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5fbmV4dF9pc19wYXRo
X2NoYXIoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3BhdGgoJycpCisgICAgICAg
IHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiSWxsZWdhbCBjaGFyYWN0ZXIgJyVjJyBlbmNv
dW50ZXJlZCBpbiB2YWx1ZSAtIG9iamVjdCwgbGlzdCwgaW50ZWdlciwgc3RyaW5nLCBVSUQsIElE
IG9yIHBhdGggZXhwZWN0ZWQhIiAlIHNlbGYuX25leHQpCisKKyAgICBkZWYgX3JlYWRfbGlzdChz
ZWxmKToKKyAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCcoJykKKyAgICAgICAgc2VsZi5fc2tpcF93
aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgIGxpc3QgPSBbXQorICAgICAgICB3aGls
ZSBzZWxmLl9uZXh0ICE9ICcpJzoKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuX3JlYWRfdmFsdWUo
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodmFsKQorICAgICAgICAgICAgc2VsZi5fc2tpcF93
aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgICAgICBzZWxmLl9za2lwX2NoYXIoJywn
KQorICAgICAgICBzZWxmLl9za2lwX2NoYXIoJyknKQorICAgICAgICByZXR1cm4gbGlzdAorCisg
ICAgZGVmIF9yZWFkX29iamVjdChzZWxmKToKKyAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCd7JykK
KyAgICAgICAgb2JqID0ge30KKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4dCAhPSAnfSc6CisgICAg
ICAgICAgICBpZCA9IHNlbGYuX3JlYWRfSUQoJycsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5f
c2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgICAgICBzZWxmLl9za2lwX2No
YXIoJz0nKQorICAgICAgICAgICAgb2JqW2lkXSA9IHNlbGYuX3JlYWRfdmFsdWUoKQorICAgICAg
ICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgICAgICBz
ZWxmLl9za2lwX2NoYXIoJzsnKQorICAgICAgICBzZWxmLl9za2lwX2NoYXIoJ30nKQorICAgICAg
ICByZXR1cm4gb2JqCisKKyAgICBkZWYgX3JlYWRfdWlkX2RlZmluaXRpb25zX29iamVjdChzZWxm
KToKKyAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCd7JykKKyAgICAgICAgd2hpbGUgc2VsZi5fbmV4
dCAhPSAnfSc6CisgICAgICAgICAgICB1aWQgPSBzZWxmLl9yZWFkX3VpZCgnJywgRmFsc2UsIEZh
bHNlKQorICAgICAgICAgICAgc2VsZi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisg
ICAgICAgICAgICBzZWxmLl9za2lwX2NoYXIoJz0nKQorICAgICAgICAgICAgZGVmaW5pdGlvbiA9
IHNlbGYuX3JlYWRfb2JqZWN0KCkKKyAgICAgICAgICAgIHNlbGYuX3NraXBfd2hpdGVzcGFjZV9h
bmRfY29tbWVudHMoKQorICAgICAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCc7JykKKyAgICAgICAg
ICAgIHNlbGYucHJvamVjdC5hZGRfdWlkKHVpZCwgZGVmaW5pdGlvbikKKyAgICAgICAgICAgICMg
UHJvY2VzcyAnZmlsZXMnIGZpZWxkIGlmIHByZXNlbnQuCisgICAgICAgICAgICBpZiAnZmlsZXMn
IGluIGRlZmluaXRpb246CisgICAgICAgICAgICAgICAgbGlzdF9vZl9maWxlcyA9IHhjb2RlX2dl
dF9saXN0KGRlZmluaXRpb24sICdmaWxlcycpCisgICAgICAgICAgICAgICAgZm9yIGZpbGVfdWlk
IGluIGxpc3Rfb2ZfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGZpbGVfdWlkLCBYY29kZVVJRCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBYY29k
ZVByb2plY3RFeGNlcHRpb24oIkRlZmluaXRpb24gJ2ZpbGVzJyBsaXN0IGZvciBVSUQgJyVzJyBj
b250YWlucyBub24tVUlEIGVudHJ5ICclcychIiAlICh1aWQsIHN0cihmaWxlX3VpZCkpKQorICAg
ICAgICAgICAgICAgICAgICBpZiBmaWxlX3VpZCBpbiBzZWxmLnByb2plY3QuX2ZpbGVfdWlkX3Rv
X2J1aWxkcGhhc2VfdWlkIGFuZCB1aWQgIT0gc2VsZi5wcm9qZWN0Ll9maWxlX3VpZF90b19idWls
ZHBoYXNlX3VpZFtmaWxlX3VpZF06CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBYY29k
ZVByb2plY3RFeGNlcHRpb24oIkZpbGUgZGVmaW5pdGlvbiB3aXRoIFVJRCAnJXMnIGxpc3RlZCBp
biAyKyBidWlsZHBoYXNlczogJyVzJyBhbmQgJyVzJyEiICUgKGZpbGVfdWlkLCBzZWxmLnByb2pl
Y3QuX2ZpbGVfdWlkX3RvX2J1aWxkcGhhc2VfdWlkW2ZpbGVfdWlkXSwgdWlkKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wcm9qZWN0Ll9maWxlX3VpZF90b19idWlsZHBoYXNlX3VpZFtmaWxl
X3VpZF0gPSB1aWQKKyAgICAgICAgICAgICMgUHJvY2VzcyAnYnVpbGRDb25maWd1cmF0aW9uTGlz
dCcgZmllbGQgaWYgcHJlc2VudC4KKyAgICAgICAgICAgIGlmICdidWlsZENvbmZpZ3VyYXRpb25M
aXN0JyBpbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25f
bGlzdF91aWQgPSB4Y29kZV9nZXRfdWlkKGRlZmluaXRpb24sICdidWlsZENvbmZpZ3VyYXRpb25M
aXN0JykKKyAgICAgICAgICAgICAgICBpZiBidWlsZF9jb25maWd1cmF0aW9uX2xpc3RfdWlkIGlu
IHNlbGYucHJvamVjdC5fYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3RvX3VpZCBhbmQgdWlkICE9
IHNlbGYucHJvamVjdC5fYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3RvX3VpZFtidWlsZF9jb25m
aWd1cmF0aW9uX2xpc3RfdWlkXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgWGNvZGVQcm9q
ZWN0RXhjZXB0aW9uKCJVSUQgJyVzJyBsaXN0ZWQgaW4gMisgJ2J1aWxkQ29uZmlndXJhdGlvbkxp
c3QnIGVudHJpZXM6ICclcycgYW5kICclcychIiAlIChidWlsZF9jb25maWd1cmF0aW9uX2xpc3Rf
dWlkLCBzZWxmLnByb2plY3QuX2J1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF90b191aWRbYnVpbGRf
Y29uZmlndXJhdGlvbl9saXN0X3VpZF0sIHVpZCkpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9q
ZWN0Ll9idWlsZF9jb25maWd1cmF0aW9uX2xpc3RfdG9fdWlkW2J1aWxkX2NvbmZpZ3VyYXRpb25f
bGlzdF91aWRdID0gdWlkCisgICAgICAgICAgICAjIEV4dHJhY3QgJ21haW5Hcm91cCcgaWYgcHJl
c2VudC4KKyAgICAgICAgICAgIGlmICdtYWluR3JvdXAnIGluIGRlZmluaXRpb246CisgICAgICAg
ICAgICAgICAgbWFpbl9ncm91cF91aWQgPSB4Y29kZV9nZXRfdWlkKGRlZmluaXRpb24sICdtYWlu
R3JvdXAnKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucHJvamVjdC5fbWFpbl9ncm91cF91aWQ6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigibWFpbkdy
b3VwIGRlZmluZWQgMisgdGltZXM6ICclcycgYW5kICclcychIiAlIChtYWluX2dyb3VwX3VpZCwg
c2VsZi5wcm9qZWN0Ll9tYWluX2dyb3VwX3VpZCkpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9q
ZWN0Ll9tYWluX2dyb3VwX3VpZCA9IG1haW5fZ3JvdXBfdWlkCisgICAgICAgICAgICAjIEV4dHJh
Y3QgbmF0aXZlIHRhcmdldCBvZiB0aGUgbWFpbiBwcm9qZWN0IGlmIGF2YWlsYWJsZS4KKyAgICAg
ICAgICAgIGlzYSA9IHhjb2RlX2dldF9pc2EoZGVmaW5pdGlvbikKKyAgICAgICAgICAgIGlmIGlz
YSA9PSAnUEJYTmF0aXZlVGFyZ2V0JzoKKyAgICAgICAgICAgICAgICBuYW1lID0geGNvZGVfZ2V0
X3N0cmluZyhkZWZpbml0aW9uLCAnbmFtZScpCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSBz
ZWxmLnByb2plY3QubmFtZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wcm9qZWN0Ll9t
YWluX3Byb2plY3RfbmF0aXZlX3RhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNl
IFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiTmF0aXZlIHRhcmdldCBmb3IgbWFpbiBwcm9qZWN0IGRl
ZmluZWQgMisgdGltZXMhIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0Ll9tYWlu
X3Byb2plY3RfbmF0aXZlX3RhcmdldCA9IGRlZmluaXRpb24KKyAgICAgICAgc2VsZi5fc2tpcF9j
aGFyKCd9JykKKworICAgIGRlZiBfcmVhZF9tYWluX29iamVjdChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fc2tpcF93aGl0ZXNwYWNlX2FuZF9jb21tZW50cygpCisgICAgICAgIHNlbGYuX3NraXBfY2hh
cigneycpCisgICAgICAgIHdoaWxlIHNlbGYuX25leHQgIT0gJ30nOgorICAgICAgICAgICAgaWQg
PSBzZWxmLl9yZWFkX0lEKCcnLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuX3NraXBfd2hpdGVz
cGFjZV9hbmRfY29tbWVudHMoKQorICAgICAgICAgICAgc2VsZi5fc2tpcF9jaGFyKCc9JykKKyAg
ICAgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciAnb2JqZWN0cycgZmllbGQsIHdoaWNoIGNvbnRh
aW5zIHRoZSBVSUQgZGVmaW5pdGlvbnMuCisgICAgICAgICAgICBpZiBpZCA9PSAnb2JqZWN0cyc6
CisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0Ll9wYnhbJ29iamVjdHMnXSA9ICcnCisgICAg
ICAgICAgICAgICAgc2VsZi5fcmVhZF91aWRfZGVmaW5pdGlvbnNfb2JqZWN0KCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0Ll9wYnhbaWRdID0gc2VsZi5f
cmVhZF92YWx1ZSgpCisgICAgICAgICAgICBzZWxmLl9za2lwX3doaXRlc3BhY2VfYW5kX2NvbW1l
bnRzKCkKKyAgICAgICAgICAgIHNlbGYuX3NraXBfY2hhcignOycpCisgICAgICAgICMgSWdub3Jl
IHRoZSBjbG9zaW5nICd9JyBhbmQgc3RvcCBoZXJlIHRvIGF2b2lkIHJhaXNpbmcgKGFuZCBoYXZp
bmcgdG8gaGFuZGxlKSBhIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uLgorCisgICAgZGVmIHBhcnNl
X3Byb2plY3RfZmlsZShzZWxmLCBhYnNwYXRoKToKKyAgICAgICAgIiIiUmVhZCBhIHByb2plY3Qg
ZmlsZSBmcm9tIGRpc2MgYW5kIHBhcnNlIGl0LgorCisgICAgICAgIGZpbGVfcGF0aCBtdXN0IGNv
bnRhaW4gdGhlIHByb2plY3QgZmlsZSBpdHNlbGYsIG5vdCBqdXN0IGEgZGlyZWN0b3J5LgorICAg
ICAgICBUaGUgcHJvamVjdCBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgZmlsZSBuYW1lIHVubGVz
cyBleHBsaWNpdGx5IHNwZWNpZmllZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX25leHQg
PSAnXDAnCisgICAgICAgIHNlbGYuX2xvb2thaGVhZCA9ICdcMCcKKyAgICAgICAgc2VsZi5fY29u
dGVudCA9IHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShhYnNwYXRoKQorICAgICAgICBz
ZWxmLl9pdGVyID0gaXRlcihzZWxmLl9jb250ZW50KQorICAgICAgICBzZWxmLl9sb29rYWhlYWQg
PSBzZWxmLl9pdGVyLm5leHQoKQorICAgICAgICBzZWxmLl9yZWFkX25leHQoKQorICAgICAgICBz
ZWxmLl9yZWFkX21haW5fb2JqZWN0KCkKKworCitjbGFzcyBYY29kZVByb2plY3RXcml0ZXIoUHJv
amVjdFdyaXRlcik6CisgICAgIiIiU2VyaWFsaXplciAod3JpdGVyKSBmb3IgWGNvZGUgcHJvamVj
dCBmaWxlcy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFhjb2Rl
UHJvamVjdFdyaXRlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLl9maWxlID0gTm9u
ZQorCisgICAgZGVmIGdlbmVyYXRlX2NvbW1lbnRfZm9yX3VpZChzZWxmLCB1aWQpOgorICAgICAg
ICAiIiJHZW5lcmF0ZXMgYSBjb21tZW50IGZvciB0aGUgZ2l2ZW4gVUlELgorCisgICAgICAgIFRo
aXMgdGFrZXMgaW50byBhY2NvdW50IHRoZSBkZWZpbml0aW9uIGZvciB0aGUgVUlELCBhbmQgcG90
ZW50aWFsbHkgYWxzbyB0aGF0IG9mIHJlbGF0ZWQgZGVmaW5pdGlvbnMuCisgICAgICAgICIiIgor
ICAgICAgICBkZWZpbml0aW9uID0gc2VsZi5wcm9qZWN0Ll91aWRfdG9fZGVmaW5pdGlvblt1aWRd
CisgICAgICAgIGlmICduYW1lJyBpbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHN0
cihkZWZpbml0aW9uWyduYW1lJ10pCisgICAgICAgIGlmICdwYXRoJyBpbiBkZWZpbml0aW9uOgor
ICAgICAgICAgICAgcmV0dXJuIHN0cihkZWZpbml0aW9uWydwYXRoJ10pCisgICAgICAgIGlmICdm
aWxlUmVmJyBpbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgZmlsZV9yZWYgPSB4Y29kZV9nZXRf
dWlkKGRlZmluaXRpb24sICdmaWxlUmVmJykKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IHNlbGYu
Z2V0X2NvbW1lbnRfZm9yX3VpZChmaWxlX3JlZikKKyAgICAgICAgICAgIGlmIG5vdCB1aWQgaW4g
c2VsZi5wcm9qZWN0Ll9maWxlX3VpZF90b19idWlsZHBoYXNlX3VpZDoKKyAgICAgICAgICAgICAg
ICByYWlzZSBYY29kZVByb2plY3RFeGNlcHRpb24oIkludGVybmFsIEVycm9yIGdlbmVyYXRpbmcg
Y29tbWVudDogTm8gYnVpbGQgcGhhc2UgZm91bmQgZm9yIFVJRCAnJXMnIChmaWxlX3JlZiAnJXMn
KSEiICUgKHVpZCwgZmlsZV9yZWYpKQorICAgICAgICAgICAgYnVpbGRfcGhhc2UgPSBzZWxmLmdl
dF9jb21tZW50X2Zvcl91aWQoc2VsZi5wcm9qZWN0Ll9maWxlX3VpZF90b19idWlsZHBoYXNlX3Vp
ZFt1aWRdKQorICAgICAgICAgICAgcmV0dXJuICIlcyBpbiAlcyIgJSAoZmlsZV9uYW1lLCBidWls
ZF9waGFzZSkKKyAgICAgICAgaXNhID0geGNvZGVfZ2V0X2lzYShkZWZpbml0aW9uKQorICAgICAg
ICBpZiBpc2EgPT0gJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJzoKKyAgICAgICAgICAgIHJldHVybiAi
SGVhZGVycyIKKyAgICAgICAgaWYgaXNhID09ICdQQlhTb3VyY2VzQnVpbGRQaGFzZSc6CisgICAg
ICAgICAgICByZXR1cm4gIlNvdXJjZXMiCisgICAgICAgIGlmIGlzYSA9PSAnUEJYUmVzb3VyY2Vz
QnVpbGRQaGFzZSc6CisgICAgICAgICAgICByZXR1cm4gIlJlc291cmNlcyIKKyAgICAgICAgaWYg
aXNhID09ICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSc6CisgICAgICAgICAgICByZXR1cm4gIkZy
YW1ld29ya3MiCisgICAgICAgIGlmIGlzYSA9PSAnUEJYUHJvamVjdCc6CisgICAgICAgICAgICBy
ZXR1cm4gIlByb2plY3Qgb2JqZWN0IgorICAgICAgICBpZiBpc2EgPT0gJ1hDQ29uZmlndXJhdGlv
bkxpc3QnOgorICAgICAgICAgICAgaWYgbm90IHVpZCBpbiBzZWxmLnByb2plY3QuX2J1aWxkX2Nv
bmZpZ3VyYXRpb25fbGlzdF90b191aWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgWGNvZGVQcm9q
ZWN0RXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvciBnZW5lcmF0aW5nIGNvbW1lbnQ6IE5vIGJ1aWxk
IGNvbmZpZ3VyYXRpb24gdGFyZ2V0IGZvdW5kIGZvciBVSUQgJyVzJyEiICUgdWlkKQorICAgICAg
ICAgICAgdGFyZ2V0X3VpZCA9IHNlbGYucHJvamVjdC5fYnVpbGRfY29uZmlndXJhdGlvbl9saXN0
X3RvX3VpZFt1aWRdCisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnByb2plY3QuX3VpZF90b19k
ZWZpbml0aW9uW3RhcmdldF91aWRdCisgICAgICAgICAgICB0YXJnZXRfaXNhID0geGNvZGVfZ2V0
X2lzYSh0YXJnZXQpCisgICAgICAgICAgICB0YXJnZXRfY29tbWVudCA9IHNlbGYuZ2V0X2NvbW1l
bnRfZm9yX3VpZCh0YXJnZXRfdWlkKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbW1lbnQgPT0g
IlByb2plY3Qgb2JqZWN0IjoKKyAgICAgICAgICAgICAgICB0YXJnZXRfY29tbWVudCA9IHNlbGYu
cHJvamVjdC5uYW1lCisgICAgICAgICAgICByZXR1cm4gJ0J1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgJXMgIiVzIicgJSAodGFyZ2V0X2lzYSwgdGFyZ2V0X2NvbW1lbnQpCisgICAgICAgIHJl
dHVybiBpc2EKKworICAgIGRlZiBnZXRfY29tbWVudF9mb3JfdWlkKHNlbGYsIHVpZCk6CisgICAg
ICAgICIiIlJldHJpZXZlIHRoZSBjb21tZW50IGZvciBhIFVJRC4KKworICAgICAgICBBcyBnZW5l
cmF0ZV9jb21tZW50X2Zvcl91aWQsIGJ1dCB1c2VzIGEgY2FjaGUuCisgICAgICAgICIiIgorICAg
ICAgICBpZiB1aWQgbm90IGluIHNlbGYucHJvamVjdC5fdWlkX3RvX2NvbW1lbnRfY2FjaGU6Cisg
ICAgICAgICAgICBzZWxmLnByb2plY3QuX3VpZF90b19jb21tZW50X2NhY2hlW3VpZF0gPSBzZWxm
LmdlbmVyYXRlX2NvbW1lbnRfZm9yX3VpZCh1aWQpCisgICAgICAgIHJldHVybiBzZWxmLnByb2pl
Y3QuX3VpZF90b19jb21tZW50X2NhY2hlW3VpZF0KKworICAgIGRlZiBfd3JpdGVfdWlkX2FuZF9j
b21tZW50KHNlbGYsIHVpZCk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiVzIC8qICVzICov
IiAlIChzdHIodWlkKSwgc2VsZi5nZXRfY29tbWVudF9mb3JfdWlkKHVpZCkpKQorCisgICAgZGVm
IF9nZXRfc29ydF90eXBlX2Zvcl91aWQoc2VsZiwgdWlkKToKKyAgICAgICAgZGVmaW5pdGlvbiA9
IHNlbGYucHJvamVjdC5fdWlkX3RvX2RlZmluaXRpb25bdWlkXQorICAgICAgICBpc2EgPSB4Y29k
ZV9nZXRfaXNhKGRlZmluaXRpb24pCisgICAgICAgICMgU29ydCBncm91cHMgYmVmb3JlIGZpbGVz
LgorICAgICAgICBpZiBpc2EgPT0gJ1BCWEdyb3VwJzoKKyAgICAgICAgICAgIHJldHVybiAnQScK
KyAgICAgICAgaWYgaXNhID09ICdQQlhWYXJpYW50R3JvdXAnOgorICAgICAgICAgICAgcmV0dXJu
ICdBJworICAgICAgICBpZiBpc2EgPT0gJ1BCWEJ1aWxkRmlsZSc6CisgICAgICAgICAgICByZXR1
cm4gJ0YnCisgICAgICAgIGlmIGlzYSA9PSAnUEJYRmlsZVJlZmVyZW5jZSc6CisgICAgICAgICAg
ICByZXR1cm4gJ0YnCisgICAgICAgIHJhaXNlIFhjb2RlUHJvamVjdEV4Y2VwdGlvbigiVW5leHBl
Y3RlZCBJU0EgJyVzJyBmb3IgVUlEICclcycgaW4gc29ydGVkIGxpc3QhIiAlIChpc2EsIHN0cih1
aWQpKSkKKworICAgIGRlZiBfd3JpdGVfbGlzdF9zb3J0ZWRfbXVsdGlfbGluZShzZWxmLCBsaXN0
LCBpbmRlbnQpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIoXG4iKQorICAgICAgICBzdWJf
aW5kZW50ID0gaW5kZW50ICsgJ1x0JworICAgICAgICBkZWNvcmF0ZWRfbGlzdCA9IFsodSwgc2Vs
Zi5fZ2V0X3NvcnRfdHlwZV9mb3JfdWlkKHUpICsgc2VsZi5nZXRfY29tbWVudF9mb3JfdWlkKHUp
Lmxvd2VyKCkpIGZvciB1IGluIGxpc3RdCisgICAgICAgIHNvcnRlZF9saXN0ID0gc29ydGVkKGRl
Y29yYXRlZF9saXN0LCBrZXk9b3BlcmF0b3IuaXRlbWdldHRlcigxKSkKKyAgICAgICAgZm9yIHVp
ZCwgc29ydF9rZXkgaW4gc29ydGVkX2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRl
KHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBzZWxmLl93cml0ZV91aWRfYW5kX2NvbW1lbnQodWlk
KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiLFxuIikKKyAgICAgICAgc2VsZi5fZmls
ZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIikiKQorCisgICAgZGVm
IF93cml0ZV9saXN0X3Vuc29ydGVkX3NpbmdsZV9saW5lKHNlbGYsIGxpc3QpOgorICAgICAgICBz
ZWxmLl9maWxlLndyaXRlKCIoIikKKyAgICAgICAgZm9yIHZhbHVlIGluIGxpc3Q6CisgICAgICAg
ICAgICBzZWxmLl93cml0ZV92YWx1ZSh2YWx1ZSwgJycsIFRydWUpCisgICAgICAgICAgICBzZWxm
Ll9maWxlLndyaXRlKCIsICIpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIikiKQorCisgICAg
ZGVmIF93cml0ZV9saXN0X3Vuc29ydGVkX211bHRpX2xpbmUoc2VsZiwgbGlzdCwgaW5kZW50KToK
KyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiKFxuIikKKyAgICAgICAgc3ViX2luZGVudCA9IGlu
ZGVudCArICdcdCcKKyAgICAgICAgZm9yIHZhbHVlIGluIGxpc3Q6CisgICAgICAgICAgICBzZWxm
Ll9maWxlLndyaXRlKHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBzZWxmLl93cml0ZV92YWx1ZSh2
YWx1ZSwgc3ViX2luZGVudCwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIs
XG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2VsZi5fZmls
ZS53cml0ZSgiKSIpCisKKyAgICBkZWYgX3dyaXRlX29iamVjdF9zaW5nbGVfbGluZShzZWxmLCBv
YmopOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ7IikKKyAgICAgICAgZm9yIGtleSBpbiBz
b3J0ZWQob2JqLmtleXMoKSk6CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGtleSkKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICBzZWxmLl93cml0
ZV92YWx1ZShvYmpba2V5XSwgJycsIFRydWUpCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRl
KCI7ICIpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIn0iKQorCisgICAgZGVmIF93cml0ZV9v
YmplY3RfbXVsdGlfbGluZShzZWxmLCBvYmosIGluZGVudCk6CisgICAgICAgIHNlbGYuX2ZpbGUu
d3JpdGUoIntcbiIpCisgICAgICAgIHN1Yl9pbmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAg
IGZvciBrZXkgaW4gc29ydGVkKG9iai5rZXlzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmlsZS53
cml0ZShzdWJfaW5kZW50KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShrZXkpCisgICAg
ICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVf
dmFsdWUob2JqW2tleV0sIHN1Yl9pbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmls
ZS53cml0ZSgiO1xuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAg
IHNlbGYuX2ZpbGUud3JpdGUoIn0iKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfaXNh
X3NvcnQocyk6CisgICAgICAgIGlmIHMgPT0gJ2lzYSc6CisgICAgICAgICAgICByZXR1cm4gJycK
KyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfd3JpdGVfb2JqZWN0X3dpdGhfaXNhX3Npbmds
ZV9saW5lKHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoInsiKQorICAgICAg
ICBmb3Iga2V5IGluIHNvcnRlZChvYmoua2V5cygpLCBrZXk9bGFtYmRhIHM6IFhjb2RlUHJvamVj
dFdyaXRlci5faXNhX3NvcnQocykpOgorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShrZXkp
CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgc2VsZi5f
d3JpdGVfdmFsdWUob2JqW2tleV0sICcnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53
cml0ZSgiOyAiKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCJ9IikKKworICAgIGRlZiBfd3Jp
dGVfb2JqZWN0X3dpdGhfaXNhX211bHRpX2xpbmUoc2VsZiwgb2JqLCBpbmRlbnQsIHNvcnRfY2hp
bGRyZW5fYW5kX2ZpbGVzKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAg
ICAgc3ViX2luZGVudCA9IGluZGVudCArICdcdCcKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQo
b2JqLmtleXMoKSwga2V5PWxhbWJkYSBzOiBYY29kZVByb2plY3RXcml0ZXIuX2lzYV9zb3J0KHMp
KToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3ViX2luZGVudCkKKyAgICAgICAgICAg
IHNlbGYuX2ZpbGUud3JpdGUoa2V5KQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiID0g
IikKKyAgICAgICAgICAgIGlmIChrZXkgPT0gJ2NoaWxkcmVuJyBvciBrZXkgPT0gJ2ZpbGVzJykg
YW5kIHNvcnRfY2hpbGRyZW5fYW5kX2ZpbGVzOgorICAgICAgICAgICAgICAgIGxpc3QgPSB4Y29k
ZV9nZXRfbGlzdChvYmosIGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9saXN0X3Nv
cnRlZF9tdWx0aV9saW5lKGxpc3QsIHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBlbGlmIGtleSA9
PSAncmVtb3RlR2xvYmFsSURTdHJpbmcnOgorICAgICAgICAgICAgICAgICMgRm9yIHNvbWUgcmVh
c29uLCAncmVtb3RlR2xvYmFsSURTdHJpbmcnIHdyaXRlcyB0aGUgVUlEIHdpdGhvdXQgY29tbWVu
dC5mCisgICAgICAgICAgICAgICAgdWlkID0geGNvZGVfZ2V0X3VpZChvYmosICdyZW1vdGVHbG9i
YWxJRFN0cmluZycpCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHIodWlkKSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdmFsdWUob2Jq
W2tleV0sIHN1Yl9pbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgi
O1xuIikKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYuX2Zp
bGUud3JpdGUoIn0iKQorCisgICAgZGVmIF93cml0ZV91aWRfZGVmaW5pdGlvbnNfb2JqZWN0KHNl
bGYsIGluZGVudCk6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIntcbiIpCisgICAgICAgIHN1
Yl9pbmRlbnQgPSBpbmRlbnQgKyAnXHQnCisgICAgICAgIGZvciBpc2EgaW4gc29ydGVkKHNlbGYu
cHJvamVjdC5faXNhX3RvX3VpZC5rZXlzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0
ZSgiXG4vKiBCZWdpbiAiKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShpc2EpCisgICAg
ICAgICAgICBzZWxmLl9maWxlLndyaXRlKCIgc2VjdGlvbiAqL1xuIikKKyAgICAgICAgICAgIGZv
ciB1aWQgaW4gc29ydGVkKHNlbGYucHJvamVjdC5faXNhX3RvX3VpZFtpc2FdKToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN1Yl9pbmRlbnQpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fd3JpdGVfdWlkX2FuZF9jb21tZW50KHVpZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxl
LndyaXRlKCIgPSAiKQorICAgICAgICAgICAgICAgIGRlZmluaXRpb24gPSBzZWxmLnByb2plY3Qu
X3VpZF90b19kZWZpbml0aW9uW3VpZF0KKyAgICAgICAgICAgICAgICBpc2EgPSB4Y29kZV9nZXRf
aXNhKGRlZmluaXRpb24pCisgICAgICAgICAgICAgICAgaWYgaXNhID09ICdQQlhCdWlsZEZpbGUn
IG9yIGlzYSA9PSAnUEJYRmlsZVJlZmVyZW5jZSc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3dyaXRlX29iamVjdF93aXRoX2lzYV9zaW5nbGVfbGluZShzZWxmLnByb2plY3QuX3VpZF90b19k
ZWZpbml0aW9uW3VpZF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fd3JpdGVfb2JqZWN0X3dpdGhfaXNhX211bHRpX2xpbmUoc2VsZi5wcm9qZWN0Ll91
aWRfdG9fZGVmaW5pdGlvblt1aWRdLCBzdWJfaW5kZW50LCB1aWQgIT0gc2VsZi5wcm9qZWN0Ll9t
YWluX2dyb3VwX3VpZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKCI7XG4iKQor
ICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiLyogRW5kICIpCisgICAgICAgICAgICBzZWxm
Ll9maWxlLndyaXRlKGlzYSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiBzZWN0aW9u
ICovXG4iKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2VsZi5f
ZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYgX3dyaXRlX21haW5fb2JqZWN0KHNlbGYsIG9iaiwg
aW5kZW50KToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgie1xuIikKKyAgICAgICAgc3ViX2lu
ZGVudCA9IGluZGVudCArICdcdCcKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQob2JqLmtleXMo
KSk6CisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN1Yl9pbmRlbnQpCisgICAgICAgICAg
ICBzZWxmLl9maWxlLndyaXRlKGtleSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIiA9
ICIpCisgICAgICAgICAgICBpZiBrZXkgPT0gJ29iamVjdHMnOgorICAgICAgICAgICAgICAgIHNl
bGYuX3dyaXRlX3VpZF9kZWZpbml0aW9uc19vYmplY3Qoc3ViX2luZGVudCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdmFsdWUob2JqW2tleV0sIHN1Yl9p
bmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgiO1xuIikKKyAgICAg
ICAgc2VsZi5fZmlsZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoIn1c
biIpCisKKyAgICBkZWYgX3dyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlLCBpbmRlbnQsIHNpbmdsZV9s
aW5lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVVSUQpOgorICAgICAgICAg
ICAgc2VsZi5fd3JpdGVfdWlkX2FuZF9jb21tZW50KHZhbHVlKQorICAgICAgICBlbGlmIGlzaW5z
dGFuY2UodmFsdWUsIFhjb2RlU3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUo
JyIlcyInICUgc3RyKHZhbHVlKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNl
c3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUodmFsdWUpCisgICAgICAgIGVs
aWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICBpZiBzaW5nbGVfbGluZToK
KyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9saXN0X3Vuc29ydGVkX3NpbmdsZV9saW5lKHZh
bHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9saXN0
X3Vuc29ydGVkX211bHRpX2xpbmUodmFsdWUsIGluZGVudCkKKyAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIGlmIHNpbmdsZV9saW5lOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3dyaXRlX29iamVjdF9zaW5nbGVfbGluZSh2YWx1ZSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfb2JqZWN0X211bHRpX2xpbmUodmFs
dWUsIGluZGVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFhjb2RlUHJvamVj
dEV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3IgLSB1bmtub3duIHR5cGUgJXMgZm9yIHZhbHVlICcl
cycgZW5jb3VudGVyZWQhIiAlIChzdHIodHlwZSh2YWx1ZSkpLCB2YWx1ZSkpCisKKyAgICBkZWYg
d3JpdGVfcHJvamVjdF9maWxlKHNlbGYsIGZpbGVfcGF0aCk6CisgICAgICAgICIiIldyaXRlIGEg
cHJvamVjdCBmaWxlIHRvIGRpc2MuCisKKyAgICAgICAgZmlsZV9wYXRoIG11c3QgaW5jbHVkZSB0
aGUgcHJvamVjdCBmaWxlIGl0c2VsZiAobm90IGp1c3QgYSBkaXJlY3RvcnkpLgorICAgICAgICBU
aGUgcHJvamVjdCBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgZmlsZSBuYW1lIHVubGVzcyBleHBs
aWNpdGx5IHNwZWNpZmllZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZpbGUgPSBzZWxm
LmZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcoZmlsZV9wYXRoKQorICAgICAg
ICBzZWxmLl9maWxlLndyaXRlKCIvLyAhJCpVVEY4KiQhXG4iKQorICAgICAgICBzZWxmLl93cml0
ZV9tYWluX29iamVjdChzZWxmLnByb2plY3QuX3BieCwgJycpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3hjb2RlcHJval91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNvZGVwcm9qX3VuaXR0ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk1ZDJiZThkYTJkZDIwYzNlMTUyMjNhMzVjYjIwM2VmZGNiOGI3YjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3hj
b2RlcHJval91bml0dGVzdC5weQpAQCAtMCwwICsxLDQ1IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHByb2plY3QgaW1w
b3J0IHhjb2RlcHJvagorCisKK2NsYXNzIFhDb2RlUHJvamVjdFRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rf
YWRkX2ZpbGUoc2VsZik6CisgICAgICAgIHBhc3MKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>132042</attachid>
            <date>2012-03-15 07:22:29 -0700</date>
            <delta_ts>2012-03-15 07:22:29 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>webkit-file-xcode.patch</filename>
            <type>application/octet-stream</type>
            <size>58900</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNvZGVw
cm9qLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC94Y29kZXByb2ou
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwZTA1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNvZGVwcm9q
LnB5CkBAIC0wLDAgKzEsMTMwNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5ncm91cGJhc2UgaW1wb3J0ICoK
KworaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgcmUKKworCityYW5kb20u
c2VlZCgpICAjIFNlZWQgdGhlIGdlbmVyYXRvcgorCisjIEFsbCBrbm93biBidWlsZCBwaGFzZSB0
eXBlcworUEJYX0JVSUxEX1BIQVNFX1RZUEVTID0gKCdQQlhIZWFkZXJzQnVpbGRQaGFzZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1BCWEZyYW1ld29ya3NCdWlsZFBoYXNlJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAnUEJYQ29weUZpbGVzQnVpbGRQaGFzZScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJ1BCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZScpCisKKyMgU3VwcG9ydGVkIFhjb2RlIGZpbGUg
dHlwZXMKK0VYVEVOU0lPTl9UT19YQ09ERV9GSUxFVFlQRV9BTkRfQlVJTERfUEhBU0UgPSB7Cisg
ICAgJy5jJyAgICAgICAgICAgIDogKCdzb3VyY2Vjb2RlLmMuYycsICAgICAgICAnUEJYU291cmNl
c0J1aWxkUGhhc2UnKSwKKyAgICAnLmNwcCcgICAgICAgICAgOiAoJ3NvdXJjZWNvZGUuY3BwLmNw
cCcsICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICcubScgICAgICAgICAgICA6ICgn
c291cmNlY29kZS5jLm9iamMnLCAgICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5t
bScgICAgICAgICAgIDogKCdzb3VyY2Vjb2RlLmNwcC5vYmpjcHAnLCAnUEJYU291cmNlc0J1aWxk
UGhhc2UnKSwKKyAgICAnLnBsJyAgICAgICAgICAgOiAoJ3RleHQuc2NyaXB0LnBlcmwnLCAgICAg
ICdQQlhIZWFkZXJzQnVpbGRQaGFzZScpLAorICAgICcucG5nJyAgICAgICAgICA6ICgnaW1hZ2Uu
cG5nJywgICAgICAgICAgICAgJ1BCWFJlc291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLnRpZmYn
ICAgICAgICAgOiAoJ2ltYWdlLnRpZmYnLCAgICAgICAgICAgICdQQlhSZXNvdXJjZXNCdWlsZFBo
YXNlJyksCisgICAgJy50eHQnICAgICAgICAgIDogKCd0ZXh0JywgICAgICAgICAgICAgICAgICAn
UEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLmZyYW1ld29yaycgICAgOiAoJ3dyYXBwZXIu
ZnJhbWV3b3JrJywgICAgICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZScpLAorICAgICcubmliJyAg
ICAgICAgICA6ICgnd3JhcHBlci5uaWInLCAgICAgICAgICAgJ1BCWFJlc291cmNlc0J1aWxkUGhh
c2UnKSwKKyAgICAnLndhdicgICAgICAgICAgOiAoJ2F1ZGlvLndhdicsICAgICAgICAgICAgICdQ
QlhDb3B5RmlsZXNCdWlsZFBoYXNlJyksCisgICAgIyBGSVhNRTogd2hlbiB0byB1c2UgJ3NvdXJj
ZWNvZGUuY3BwLmgnPworICAgICcuaCcgICAgICAgICAgICA6ICgnc291cmNlY29kZS5jLmgnLCAg
ICAgICAgJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJyksCisgICAgIyBGSVhNRTogSSBIYXZlbid0IHNl
ZW4gdGhlc2UgZXh0ZW5zaW9ucyBpbiBhY3R1YWwgZmlsZXMsIHRoaXMgaXMgYW4gZXh0cmFwb2xh
dGlvbiBmb3IgY29tcGxldGVuZXNzLgorICAgICcuY2MnICAgICAgICAgICA6ICgnc291cmNlY29k
ZS5jcHAuY3BwJywgICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5jeHgnICAgICAg
ICAgIDogKCdzb3VyY2Vjb2RlLmNwcC5jcHAnLCAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwK
KyAgICAnLmhwcCcgICAgICAgICAgOiAoJ3NvdXJjZWNvZGUuY3BwLmgnLCAgICAgICdQQlhIZWFk
ZXJzQnVpbGRQaGFzZScpLAorICAgICcuaHh4JyAgICAgICAgICA6ICgnc291cmNlY29kZS5jcHAu
aCcsICAgICAgJ1BCWEhlYWRlcnNCdWlsZFBoYXNlJyksCisgICAgIyBOT1RFOiAuc3RyaW5ncyBh
cmUgdXNlZCBpbiBQQlhWYXJpYW50R3JvdXAgaW4gYW4gYWRkaXRpb25hbCBsZXZlbCBvZiBpbmRp
cmVjdGlvbjogUEJYQnVpbGRGaWxlIC0+IFBCWFZhcmlhbnRHcm91cCAtPiBQQlhGaWxlUmVmZXJl
bmNlCisgICAgJy5zdHJpbmdzJyAgICAgIDogKCd0ZXh0LnBsaXN0LnN0cmluZ3MnLCAgICAnUEJY
UmVzb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICMgRklYTUU6IFRoaXMgaXMgYSBndWVzcyAtIEkg
aGF2ZW4ndCBzZWVuICd0ZXh0LnNjcmlwdC5weXRob24nIGluIGFjdHVhbCBwcm9qZWN0IGZpbGVz
LgorICAgICcucHknICAgICAgICAgICA6ICgndGV4dC5zY3JpcHQucHl0aG9uJywgICAgJ1BCWFNv
dXJjZXNCdWlsZFBoYXNlJyksCit9CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKworY2xhc3MgWGNvZGVVSUQob2JqZWN0KToKKyAgICAiIiIKKyAgICBD
bGFzcyBjb250YWluaW5nIGEgc2luZ2xlIFhjb2RlIFVJRC4KKyAgICBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gZGlmZmVyZW50aWF0ZSBVSURzIGZyb20gb3RoZXIgc3RyaW5nIHZhbHVlcy4KKyAgICBV
SURzIGFyZSB1c2VkIGFzIGtleXMgaW4gdmFyaW91cyBpbnRlcm5hbCBtYXBzLiBXaGVuIHdyaXR0
ZW4sIHRoZXkgcmVxdWlyZSBhbiBhZGRpdGlvbmFsIGNvbW1lbnQgdG8gYmUgZ2VuZXJhdGVkLgor
ICAgICIiIgorICAgIE1BVENIID0gcmUuY29tcGlsZSgnXlswLTlBLUZdezI0fScpCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdWlkc3RyPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZSh1aWRzdHIsIGJhc2VzdHJpbmcpCisgICAgICAgIGFzc2VydCBub3QgdWlkc3RyIG9yIFhjb2Rl
VUlELmlzX3ZhbGlkX1VJRCh1aWRzdHIpCisgICAgICAgIGlmIG5vdCB1aWRzdHI6CisgICAgICAg
ICAgICB1aWRzdHIgPSAnMCcgKiAyNAorICAgICAgICBzZWxmLnN0cmluZyA9IHVpZHN0cgorICAg
ICAgICBzZWxmLnJlZmVycmVkX29iamVjdCA9IE5vbmUKKyAgICAgICAgc2VsZi5jYWNoZWRfY29t
bWVudCA9IE5vbmUKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNz
ZXJ0IHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5zdHJpbmcgIT0gb3RoZXIuc3RyaW5nCisgICAgICAg
IHJldHVybiBjbXAoc2VsZi5zdHJpbmcsIG90aGVyLnN0cmluZykKKworICAgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhlciBvciBzZWxmLnN0cmlu
ZyAhPSBvdGhlci5zdHJpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyaW5nID09IG90aGVyLnN0
cmluZworCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBzZWxm
IGlzIG90aGVyIG9yIHNlbGYuc3RyaW5nICE9IG90aGVyLnN0cmluZworICAgICAgICByZXR1cm4g
c2VsZi5zdHJpbmcgIT0gb3RoZXIuc3RyaW5nCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiBoYXNoKHNlbGYuc3RyaW5nKQorCisgICAgZGVmIF9fbm9uemVyb19fKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdHJpbmcgIT0gJzAnICogMjQKKworICAgIGRlZiBp
c192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFhjb2RlVUlELmlzX3ZhbGlkX1VJRChzZWxm
LnN0cmluZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfdmFsaWRfVUlEKHVpZHN0
cik6CisgICAgICAgIHJldHVybiBsZW4odWlkc3RyKSA9PSAyNCBhbmQgWGNvZGVVSUQuTUFUQ0gu
bWF0Y2godWlkc3RyKSBhbmQgdWlkc3RyICE9ICgnMCcgKiAyNCkgYW5kIHVpZHN0ciAhPSAoJ0Yn
ICogMjQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3JlYXRlX3JhbmRvbShjbHMpOgor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdWlkc3RyID0gJycuam9pbihbcmFuZG9t
LmNob2ljZSgnMDEyMzQ1Njc4OUFCQ0RFRicpIGZvciBpIGluIHJhbmdlKDI0KV0pCisgICAgICAg
ICAgICBpZiBpc192YWxpZF9VSUQodWlkc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWGNv
ZGVVSUQodWlkKQorCisKK2NsYXNzIFhjb2RlUXVvdGVkU3RyaW5nKHN0cik6CisgICAgIiIiCisg
ICAgQ2xhc3MgY29udGFpbmluZyBhIHNpbmdsZSBYY29kZSBTdHJpbmcgKHN0cmluZyBpbiBxdW90
ZXMgd2l0aGluIHRoZSBwcm9qZWN0IGZpbGUpLgorICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBy
ZW1lbWJlciB0aGF0IHRoZSBvcmlnaW5hbCBmaWVsZCB2YWx1ZSB3YXMgZW5jbG9zZWQgaW4gcXVv
dGVzLgorICAgIFN0cmluZ3MgYXJlIHB1dCBpbnNpZGUgZG91YmxlIHF1b3RlcyBpZiB3cml0dGVu
IGFzIHZhbHVlcywgYnV0IHdyaXR0ZW4gd2l0aG91dCBxdW90ZXMgd2l0aGluIGNvbW1lbnRzLgor
ICAgICIiIgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goJyIn
ICsgc2VsZiArICciJykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX19zdHJfXygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICciJyArIHNlbGYucmVwbGFjZSgnIicsICdcIicpICsgJyInCisKKworY2xhc3MgWGNvZGVRdW90
ZWRTdHJpbmdMaXN0KGxpc3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBsaXN0
IG9mIFhjb2RlUXVvdGVkU3RyaW5nIG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIGFwcGVuZChz
ZWxmLCBxdW90ZWRfc3RyaW5nKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocXVvdGVkX3N0
cmluZywgWGNvZGVRdW90ZWRTdHJpbmcpLCBxdW90ZWRfc3RyaW5nCisgICAgICAgIGxpc3QuYXBw
ZW5kKHNlbGYsIHF1b3RlZF9zdHJpbmcpCisKKworY2xhc3MgWGNvZGVVSURMaXN0KGxpc3QpOgor
ICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBsaXN0IG9mIFhjb2RlVUlEIG9iamVjdHMu
CisgICAgIiIiCisgICAgZGVmIGFwcGVuZChzZWxmLCB1aWQpOgorICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZSh1aWQsIFhjb2RlVUlEKSwgdWlkCisgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYsIHVp
ZCkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
KyMgJCQkIFRPRE86IFRoZSB2YXJpb3VzIFBCWC4uLiBvYmplY3QncyBwcm9wZXJ0aWVzIGR1cGxp
Y2F0ZSB0aGUgVUlEIG9iamVjdHMgb2YgdGhlIG1hcCBrZXkgd2l0aCB0aGUgc2FtZSBpbmZvcm1h
dGlvbiEKKyMgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB1cG9uIGVkaXRpbmcsIHRoaXMgbWF5IGdl
dCBvdXQgb2Ygc3luYy4KKyMKKyMgICAgICAgIC0+IEZpbmQgYSB3YXkgdG8gc2hhcmUgdGhpcywg
ZS5nLiwgdGhlIHByb3BlcnRpZXMganVzdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgWGNvZGVVSURM
aXN0IGFzIHRoZSBtYXAgdmFsdWVzCisjICAgICAgICAgICAoUHJvYmxlbTogcHJvcGVydGllcyB1
c2Ugc2V0cyBvZiBvYmplY3RzIHZzLiB0aGUgbWFwJ3MgWGNvZGVVSURMaXN0KQorCitjbGFzcyBQ
QlhPYmplY3QoZGljdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcywgaG9sZGluZyBhIGRlZmlu
aXRpb24gZGljdCBmb3IgYW4gWGNvZGUgb2JqZWN0LgorICAgIEl0IGFsc28gc3RvcmVzIHRoZSBV
SUQgb2YgdGhlIG9iamVjdCwgYW5kIGNhY2hlcyBhbnkgZ2VuZXJhdGVkIGNvbW1lbnQgZm9yIHRo
ZSBvYmplY3QuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1l
PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1aWQsIFhjb2RlVUlEKQorICAgICAg
ICBhc3NlcnQgdWlkLmlzX3ZhbGlkKCkKKyAgICAgICAgYXNzZXJ0IG5vdCB1aWQucmVmZXJyZWRf
b2JqZWN0IG9yIHVpZC5yZWZlcnJlZF9vYmplY3QgaXMgc2VsZgorICAgICAgICBhc3NlcnQgaXNh
CisgICAgICAgIGRpY3QuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi51aWQgPSB1aWQKKyAg
ICAgICAgc2VsZi51aWQucmVmZXJyZWRfb2JqZWN0ID0gc2VsZgorICAgICAgICBzZWxmLmlzYSA9
IGlzYQorICAgICAgICBzZWxmWydpc2EnXSA9IGlzYQorICAgICAgICBzZWxmLl9jYWNoZWRfY29t
bWVudCA9IE5vbmUKKworICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICBy
YWlzZSAiQ291bGQgbm90IGZpbmQga2V5ICclcycgd2l0aCBVSUQgJXMgaW4gJXMhIiAlIChrZXks
IHVpZCwgc2VsZikKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhh
c2goc2VsZi51aWQpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuaXNhICsgJyAnICsgc2VsZi51aWQuc3RyaW5nCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnVpZC5pc192YWxpZCgpCisKKyAgICBkZWYgZ2V0X25hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdldCgnbmFtZScpCisKKyAgICBkZWYgc2V0X25h
bWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICBzZWxmWyduYW1l
J10gPSBuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRlbF9uYW1lKCkKKwor
ICAgIGRlZiBkZWxfbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5wb3AoJ25hbWUnLCBOb25lKQor
CisgICAgbmFtZSA9IHByb3BlcnR5KGdldF9uYW1lLCBzZXRfbmFtZSwgZGVsX25hbWUsICInbmFt
ZScgcHJvcGVydHkgb24gUEJYIG9iamVjdHMiKQorCisKK2NsYXNzIFBCWEZpbGVSZWZlcmVuY2Uo
UEJYT2JqZWN0LCBHcm91cFByb2plY3RGaWxlUmVmZXJlbmNlKToKKyAgICAiIiIKKyAgICBDbGFz
cyBzdG9yaW5nIGEgUEJYRmlsZVJlZmVyZW5jZSBvYmplY3QsIHJlZmVycmluZyB0byBhIENvbW1v
bkZpbGUuCisgICAgQSBQQlhGaWxlUmVmZXJlbmNlIGlzIGNvbnRhaW5lZCBpbiBQQlhHcm91cCBh
bmQgUEJYVmFyaWFudEdyb3VwIG9iamVjdHMuCisgICAgSXQgbWF5IGJlIHJlZmVyZW5jZWQgaXRz
ZWxmIGJ5IGEgUEJYQnVpbGRGaWxlIG9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgZmlsZT1Ob25lLCBncm91cD1Ob25lKToKKyAgICAg
ICAgYXNzZXJ0IGlzYSA9PSAnUEJYRmlsZVJlZmVyZW5jZScKKyAgICAgICAgUEJYT2JqZWN0Ll9f
aW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1lKQorICAgICAgICBHcm91cFByb2plY3RGaWxlUmVm
ZXJlbmNlLl9faW5pdF9fKHNlbGYsIGZpbGUsIGdyb3VwKQorCisgICAgZGVmIGlzX3ZhbGlkKHNl
bGYpOgorICAgICAgICByZXR1cm4gUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYpIGFuZCBHcm91cFBy
b2plY3RGaWxlUmVmZXJlbmNlLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KCduYW1lJykgb3Igc2VsZi5maWxlLm5hbWUKKwor
CitjbGFzcyBQQlhWYXJpYW50R3JvdXBDb250YWluZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBD
bGFzcyBjb250YWluaW5nIFBCWFZhcmlhbnRHcm91cCBvYmplY3RzLgorICAgICIiIgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi52YXJpYW50X2dyb3VwcyA9IHNldCgpCisK
KyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
aXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi52YXJpYW50X2dyb3Vwcwor
CisgICAgZGVmIGFkZF92YXJpYW50X2dyb3VwKHNlbGYsIHZhcmlhbnRfZ3JvdXApOgorICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZSh2YXJpYW50X2dyb3VwLCBQQlhWYXJpYW50R3JvdXApCisgICAg
ICAgIGFzc2VydCB2YXJpYW50X2dyb3VwIG5vdCBpbiBzZWxmLnZhcmlhbnRfZ3JvdXBzCisgICAg
ICAgIHNlbGYudmFyaWFudF9ncm91cHMuYWRkKHZhcmlhbnRfZ3JvdXApCisKKyAgICBkZWYgcmVt
b3ZlX3ZhcmlhbnRfZ3JvdXAoc2VsZiwgdmFyaWFudF9ncm91cCk6CisgICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAsIFBCWFZhcmlhbnRHcm91cCkKKyAgICAgICAgYXNzZXJ0
IHZhcmlhbnRfZ3JvdXAgaW4gc2VsZi52YXJpYW50X2dyb3VwcworICAgICAgICBzZWxmLnZhcmlh
bnRfZ3JvdXBzLnJlbW92ZSh2YXJpYW50X2dyb3VwKQorCisKK2NsYXNzIFBCWFZhcmlhbnRHcm91
cChQQlhPYmplY3QsIFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2UsIFByb2plY3RGaWxlUmVmZXJl
bmNlQ29udGFpbmVyKToKKyAgICAiIiIKKyAgICBBIFBCWFZhcmlhbnRHcm91cCBpcyBhIHN3aXRj
aCBiZXR3ZWVuIGRpZmZlcmVudCBQQlhGaWxlUmVmZXJlbmNlcywgZXNzZW50aWFsbHkgYSBtZXRh
IGZpbGUgcmVmZXJlbmNlLgorICAgIExpa2UgYSBncm91cCBpdCBtYXkgYWxzbyByZWZlciBhIGRp
cmVjdG9yeSBhbmQvb3IgaGF2ZSBhIG5hbWUuCisgICAgIiIiCisgICAgSURfQ09VTlRFUiA9IDAK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBjb250YWluZXI9
Tm9uZSwgZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhWYXJpYW50
R3JvdXAnCisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5zdGFuY2UoY29udGFp
bmVyLCBQQlhWYXJpYW50R3JvdXBDb250YWluZXIpCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgUHJvamVjdERpcmVjdG9yeVJlZmVyZW5j
ZS5fX2luaXRfXyhzZWxmLCBkaXJlY3RvcnkpCisgICAgICAgIFByb2plY3RGaWxlUmVmZXJlbmNl
Q29udGFpbmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFBCWFZhcmlhbnRHcm91cC5JRF9DT1VO
VEVSICs9IDEKKyAgICAgICAgc2VsZi5faWQgPSBQQlhWYXJpYW50R3JvdXAuSURfQ09VTlRFUgor
ICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRhaW5lcgorCisgICAgZGVmIF9faGFzaF9fKHNl
bGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKworICAgIGRlZiBfX2VxX18oc2Vs
Ziwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhlciBvciBzZWxmLl9pZCAhPSBv
dGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKworICAgIGRlZiBfX25lX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIGlzaW5zdGFuY2Uob3Ro
ZXIsIHNlbGYuUHJvamVjdEdyb3VwKQorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhlciBvciBz
ZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisK
KyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgYW5kIFBC
WE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQgUHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZS5pc192
YWxpZChzZWxmKSBhbmQgUHJvamVjdEZpbGVSZWZlcmVuY2VDb250YWluZXIuaXNfdmFsaWQoc2Vs
ZikKKworICAgIGRlZiBjb21tZW50KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5uYW1lCisg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUgb3Igc2VsZi51aWQuc3RyaW5nCisKKyAgICBkZWYgc2V0
X2NvbnRhaW5lcihzZWxmLCBjb250YWluZXIpOgorICAgICAgICBhc3NlcnQgbm90IGNvbnRhaW5l
ciBvciBpc2luc3RhbmNlKGNvbnRhaW5lciwgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyKQorICAg
ICAgICBhc3NlcnQgbm90IHNlbGYuY29udGFpbmVyCisgICAgICAgIHNlbGYuY29udGFpbmVyID0g
Y29udGFpbmVyCisKKworY2xhc3MgUEJYR3JvdXAoUEJYT2JqZWN0LCBQcm9qZWN0R3JvdXAsIFBC
WFZhcmlhbnRHcm91cENvbnRhaW5lcik6CisgICAgIiIiCisgICAgWGNvZGUtc3BlY2lmaWMgZ3Jv
dXAgZGVmaW5pdGlvbiBjbGFzcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlk
LCBpc2EsIG5hbWU9Tm9uZSwgcGFyZW50X2dyb3VwPU5vbmUsIGRpcmVjdG9yeT1Ob25lKToKKyAg
ICAgICAgYXNzZXJ0IGlzYSA9PSAnUEJYR3JvdXAnCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgUHJvamVjdEdyb3VwLl9faW5pdF9fKHNl
bGYsIHBhcmVudF9ncm91cCwgZGlyZWN0b3J5KQorICAgICAgICBQQlhWYXJpYW50R3JvdXBDb250
YWluZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmRpcmVjdG9yeToKKyAgICAgICAgICAgIGRpcl9zdHJpbmcgPSBzZWxmLmRpcmVjdG9y
eS5fZGVzY3BhdGhfd2l0aF9zZXAoJy8nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGly
X3N0cmluZyA9ICIoTm9uZSkiCisgICAgICAgIHJldHVybiAiJXMgTmFtZTogJyVzJyBEaXI6ICVz
IiAlIChQQlhPYmplY3QuX19zdHJfXyhzZWxmKSwgc2VsZi5uYW1lIG9yICIoTm9uZSkiLCBkaXJf
c3RyaW5nKQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gUEJYT2Jq
ZWN0LmlzX3ZhbGlkKHNlbGYpIGFuZCBQcm9qZWN0R3JvdXAuaXNfdmFsaWQoc2VsZikgYW5kIFBC
WFZhcmlhbnRHcm91cENvbnRhaW5lci5pc192YWxpZChzZWxmKQorCisgICAgZGVmIGlzX2VtcHR5
KHNlbGYpOgorICAgICAgICByZXR1cm4gUHJvamVjdEdyb3VwLmlzX2VtcHR5KHNlbGYpIGFuZCBQ
QlhWYXJpYW50R3JvdXBDb250YWluZXIuaXNfZW1wdHkoKQorCisgICAgZGVmIGNvbW1lbnQoc2Vs
Zik6CisgICAgICAgIGFzc2VydCBzZWxmLmRpcmVjdG9yeQorICAgICAgICByZXR1cm4gc2VsZi5u
YW1lIG9yIHNlbGYuZGlyZWN0b3J5Lm5hbWUgb3Igc2VsZi51aWQuc3RyaW5nCisKKworY2xhc3Mg
UEJYQnVpbGRGaWxlKFBCWE9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3Mgc3RvcmluZyBhIFBC
WEJ1aWxkRmlsZSBvYmplY3QuCisgICAgQSBQQlhCdWlsZEZpbGUgaXMgY29udGFpbmVkIGluIGEg
YnVpbGQgcGhhc2UgYW5kIHJlZmVyZW5jZXMgYSBQQlhGaWxlUmVmZXJlbmNlLgorICAgIEluIGFk
ZGl0aW9uLCBpdCBtYXkgc2V0IGZsYWdzIG9uIHRoZSBmaWxlIHVzZWQgaW4gYnVpbGRpbmcgKG1v
c3QgY29tbW9ubHkgdGhlIGhlYWRlciByb2xlKS4KKworICAgIE5vdGU6ICdmaWxlUmVmJyBjYW4g
YmUgYSBQQlhGaWxlUmVmZXJlbmNlIG9yIGEgUEJYVmFyaWFudEdyb3VwCisgICAgIiIiCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIGZpbGVSZWY9Tm9uZSwgYnVp
bGRfcGhhc2U9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2EgPT0gJ1BCWEJ1aWxkRmlsZScKKyAg
ICAgICAgYXNzZXJ0IG5vdCBmaWxlUmVmIG9yIGlzaW5zdGFuY2UoZmlsZVJlZiwgUEJYRmlsZVJl
ZmVyZW5jZSkgb3IgaXNpbnN0YW5jZShmaWxlUmVmLCBQQlhWYXJpYW50R3JvdXApCisgICAgICAg
IGFzc2VydCBub3QgYnVpbGRfcGhhc2Ugb3IgaXNpbnN0YW5jZShidWlsZF9waGFzZSwgUEJYQnVp
bGRQaGFzZSkKKyAgICAgICAgUEJYT2JqZWN0Ll9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1l
KQorICAgICAgICBzZWxmLmZpbGVSZWYgPSBmaWxlUmVmCisgICAgICAgIHNlbGYuYnVpbGRfcGhh
c2UgPSBidWlsZF9waGFzZQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1
cm4gUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYpIGFuZCBzZWxmLmZpbGVSZWYgYW5kIHNlbGYuYnVp
bGRfcGhhc2UKKworICAgIGRlZiBjb21tZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzIGlu
ICVzIiAlIChzZWxmLmZpbGVSZWYuY29tbWVudCgpLnN0cmlwKCciJyksIHNlbGYuYnVpbGRfcGhh
c2UuY29tbWVudCgpLnN0cmlwKCciJykpCisKKyAgICBkZWYgc2V0X2ZpbGVSZWYoc2VsZiwgZmls
ZVJlZik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGVSZWYsIFBCWEZpbGVSZWZlcmVu
Y2UpIG9yIGlzaW5zdGFuY2UoZmlsZVJlZiwgUEJYVmFyaWFudEdyb3VwKQorICAgICAgICBhc3Nl
cnQgbm90IHNlbGYuZmlsZVJlZgorICAgICAgICBzZWxmLmZpbGVSZWYgPSBmaWxlUmVmCisKKyAg
ICBkZWYgc2V0X2J1aWxkX3BoYXNlKHNlbGYsIGJ1aWxkX3BoYXNlKToKKyAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2UoYnVpbGRfcGhhc2UsIFBCWEJ1aWxkUGhhc2UpCisgICAgICAgIGFzc2VydCBu
b3QgYnVpbGRfcGhhc2Ugb3Igbm90IHNlbGYuYnVpbGRfcGhhc2UKKyAgICAgICAgc2VsZi5idWls
ZF9waGFzZSA9IGJ1aWxkX3BoYXNlCisKKworY2xhc3MgUEJYQnVpbGRQaGFzZShQQlhPYmplY3Qp
OgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYW4gWGNvZGUgYnVpbGQgcGhhc2UgKGUu
Zy4gUEJYU291cmNlc0J1aWxkUGhhc2UpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB1aWQsIGlzYSwgbmFtZT1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2Eg
aW4gUEJYX0JVSUxEX1BIQVNFX1RZUEVTCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRfXyhzZWxm
LCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAg
c2VsZi5idWlsZF9maWxlcyA9IHNldCgpCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnRhcmdldCBhbmQgUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYpCisKKyAg
ICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBvciBzZWxmLmlz
YVszOi0xMF0gICMgU3RyaXAgJ1BCWCcgYW5kICdCdWlsZFBoYXNlJy4KKworICAgIGRlZiBzZXRf
dGFyZ2V0KHNlbGYsIHRhcmdldCk6CisgICAgICAgIGFzc2VydCB0YXJnZXQKKyAgICAgICAgYXNz
ZXJ0IGlzaW5zdGFuY2UodGFyZ2V0LCBQQlhUYXJnZXQpCisgICAgICAgIGFzc2VydCBub3Qgc2Vs
Zi50YXJnZXQKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBhZGRfYnVp
bGRfZmlsZShzZWxmLCBidWlsZF9maWxlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVp
bGRfZmlsZSwgUEJYQnVpbGRGaWxlKQorICAgICAgICBhc3NlcnQgYnVpbGRfZmlsZSBub3QgaW4g
c2VsZi5idWlsZF9maWxlcworICAgICAgICBzZWxmLmJ1aWxkX2ZpbGVzLmFkZChidWlsZF9maWxl
KQorCisgICAgZGVmIHJlbW92ZV9idWlsZF9maWxlKHNlbGYsIGJ1aWxkX2ZpbGUpOgorICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9maWxlLCBQQlhCdWlsZEZpbGUpCisgICAgICAgIGFz
c2VydCBidWlsZF9maWxlIGluIHNlbGYuYnVpbGRfZmlsZXMKKyAgICAgICAgc2VsZi5idWlsZF9m
aWxlcy5yZW1vdmUoYnVpbGRfZmlsZSkKKworCitjbGFzcyBYQ0NvbmZpZ3VyYXRpb25MaXN0KFBC
WE9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3MgY29udGFpbmluZyBkYXRhIGZvciBhIFhDQ29u
ZmlndXJhdGlvbkxpc3Qgb2JqZWN0LgorICAgIFRoaXMgaXMgcmVmZXJyZWQgdG8gYnkgUEJYVGFy
Z2V0IGFuZCBQQlhQcm9qZWN0IG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIHJlZmVycmluZ19vYmplY3Q9Tm9uZSk6CisgICAgICAg
IGFzc2VydCBpc2EgPT0gJ1hDQ29uZmlndXJhdGlvbkxpc3QnCisgICAgICAgIGFzc2VydCBub3Qg
cmVmZXJyaW5nX29iamVjdCBvciBpc2luc3RhbmNlKHJlZmVycmluZ19vYmplY3QsIFhDQ29uZmln
dXJhdGlvbkxpc3RSZWZlcnJlcikKKyAgICAgICAgUEJYT2JqZWN0Ll9faW5pdF9fKHNlbGYsIHVp
ZCwgaXNhLCBuYW1lKQorICAgICAgICBzZWxmLnJlZmVycmluZ19vYmplY3QgPSByZWZlcnJpbmdf
b2JqZWN0CisgICAgICAgIHNlbGYuYnVpbGRfY29uZmlndXJhdGlvbnMgPSBbXSAjIGxpc3Qgb2Yg
WENCdWlsZENvbmZpZ3VyYXRpb24gb2JqZWN0cworCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5yZWZlcnJpbmdfb2JqZWN0IGFuZCBQQlhPYmplY3QuaXNfdmFs
aWQoc2VsZikKKworICAgIGRlZiBjb21tZW50KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5y
ZWZlcnJpbmdfb2JqZWN0CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5yZWZlcnJpbmdfb2Jq
ZWN0LCBQQlhQcm9qZWN0KToKKyAgICAgICAgICAgIHRhcmdldF9jb21tZW50ID0gc2VsZi5yZWZl
cnJpbmdfb2JqZWN0LnByb2plY3QubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFy
Z2V0X2NvbW1lbnQgPSBzZWxmLnJlZmVycmluZ19vYmplY3QuY29tbWVudCgpCisgICAgICAgIHJl
dHVybiAnQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciAlcyAiJXMiJyAlIChzZWxmLnJlZmVy
cmluZ19vYmplY3QuaXNhLCB0YXJnZXRfY29tbWVudC5zdHJpcCgnIicpKQorCisgICAgZGVmIHNl
dF9yZWZlcnJlcihzZWxmLCByZWZlcnJlcik6CisgICAgICAgIGFzc2VydCByZWZlcnJlcgorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZWZlcnJlciwgWENDb25maWd1cmF0aW9uTGlzdFJlZmVy
cmVyKQorICAgICAgICBzZWxmLnJlZmVycmluZ19vYmplY3QgPSByZWZlcnJlcgorCisgICAgZGVm
IGFwcGVuZF9idWlsZF9jb25maWd1cmF0aW9uKHNlbGYsIGJ1aWxkX2NvbmZpZ3VyYXRpb24pOgor
ICAgICAgICBhc3NlcnQgYnVpbGRfY29uZmlndXJhdGlvbgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShidWlsZF9jb25maWd1cmF0aW9uLCBYQ0J1aWxkQ29uZmlndXJhdGlvbikKKyAgICAgICAg
c2VsZi5idWlsZF9jb25maWd1cmF0aW9ucy5hcHBlbmQoYnVpbGRfY29uZmlndXJhdGlvbikKKwor
CitjbGFzcyBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIob2JqZWN0KToKKyAgICAiIiIKKyAg
ICBNaXhpbiBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIHJlZmVycmluZyBhIFhDQ29uZmlndXJhdGlv
bkxpc3QsIGkuZS4gUEJYVGFyZ2V0LCBQQlhQcm9qZWN0IGFuZCBYQ0J1aWxkQ29uZmlndXJhdGlv
bgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3Q9Tm9u
ZSk6CisgICAgICAgIGFzc2VydCBub3QgY29uZmlndXJhdGlvbl9saXN0IG9yIGlzaW5zdGFuY2Uo
Y29uZmlndXJhdGlvbl9saXN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0KQorICAgICAgICBzZWxmLmNv
bmZpZ3VyYXRpb25fbGlzdCA9IGNvbmZpZ3VyYXRpb25fbGlzdAorCisgICAgZGVmIGlzX3ZhbGlk
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25maWd1cmF0aW9uX2xpc3QKKworICAgIGRl
ZiBzZXRfY29uZmlndXJhdGlvbl9saXN0KHNlbGYsIGNvbmZpZ3VyYXRpb25fbGlzdCk6CisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbmZpZ3VyYXRpb25fbGlzdCwgWENDb25maWd1cmF0aW9u
TGlzdCkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmNvbmZpZ3VyYXRpb25fbGlzdAorICAgICAg
ICBzZWxmLmNvbmZpZ3VyYXRpb25fbGlzdCA9IGNvbmZpZ3VyYXRpb25fbGlzdAorCisKK2NsYXNz
IFhDQnVpbGRDb25maWd1cmF0aW9uKFBCWE9iamVjdCwgWENDb25maWd1cmF0aW9uTGlzdFJlZmVy
cmVyKToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIGRhdGEgZm9yIGEgWENCdWlsZENv
bmZpZ3VyYXRpb24gb2JqZWN0LgorICAgIFRoaXMgaXMgcmVmZXJyZWQgdG8gYnkgWENDb25maWd1
cmF0aW9uTGlzdCBvYmplY3RzCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVpZCwg
aXNhLCBuYW1lPU5vbmUsIGNvbmZpZ3VyYXRpb25fbGlzdD1Ob25lKToKKyAgICAgICAgYXNzZXJ0
IGlzYSA9PSAnWENCdWlsZENvbmZpZ3VyYXRpb24nCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkKKyAgICAgICAgWENDb25maWd1cmF0aW9uTGlzdFJlZmVy
cmVyLl9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb25fbGlzdCkKKworICAgIGRlZiBpc192YWxp
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBhbmQgUEJYT2JqZWN0LmlzX3ZhbGlk
KHNlbGYpIGFuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIuaXNfdmFsaWQoc2VsZikKKwor
ICAgIGRlZiBjb21tZW50KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5uYW1lCisgICAgICAg
IHJldHVybiBzZWxmLm5hbWUgb3Igc2VsZi51aWQuc3RyaW5nCisKKworY2xhc3MgUEJYVGFyZ2V0
KFBCWE9iamVjdCwgWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyKToKKyAgICAiIiIKKyAgICBD
bGFzcyBjb250YWluaW5nIGEgUEJYTmF0aXZlVGFyZ2V0IG9yIFBCWEFnZ3JlZ2F0ZVRhcmdldCwg
aW5jbC4gaXRzIGJ1aWxkIHBoYXNlcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1
aWQsIGlzYSwgbmFtZT1Ob25lLCBwcm9qZWN0PU5vbmUsIGNvbmZpZ3VyYXRpb25fbGlzdD1Ob25l
KToKKyAgICAgICAgYXNzZXJ0IGlzYSA9PSAnUEJYTmF0aXZlVGFyZ2V0JyBvciBpc2EgPT0gJ1BC
WEFnZ3JlZ2F0ZVRhcmdldCcKKyAgICAgICAgYXNzZXJ0IG5vdCBwcm9qZWN0IG9yIGlzaW5zdGFu
Y2UocHJvamVjdCwgUEJYUHJvamVjdCkKKyAgICAgICAgUEJYT2JqZWN0Ll9faW5pdF9fKHNlbGYs
IHVpZCwgaXNhLCBuYW1lKQorICAgICAgICBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIuX19p
bml0X18oc2VsZiwgY29uZmlndXJhdGlvbl9saXN0KQorICAgICAgICBzZWxmLnByb2plY3QgPSBw
cm9qZWN0CisgICAgICAgIHNlbGYuYnVpbGRfcGhhc2VzID0gW10gICMgbGlzdCBvZiBQQlhCdWls
ZFBoYXNlIGVudHJpZXMgCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLm5hbWUgYW5kIFBCWE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQgWENDb25maWd1cmF0
aW9uTGlzdFJlZmVycmVyLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxmKToK
KyAgICAgICAgYXNzZXJ0IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gc2VsZi5uYW1lIG9yIHNl
bGYudWlkLnN0cmluZworCisgICAgZGVmIHNldF9wcm9qZWN0KHNlbGYsIHByb2plY3QpOgorICAg
ICAgICBhc3NlcnQgbm90IHByb2plY3Qgb3IgaXNpbnN0YW5jZShwcm9qZWN0LCBQQlhQcm9qZWN0
KQorICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CisKKyAgICBkZWYgYXBwZW5kX2J1aWxk
X3BoYXNlKHNlbGYsIGJ1aWxkX3BoYXNlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVp
bGRfcGhhc2UsIFBCWEJ1aWxkUGhhc2UpCisgICAgICAgIGFzc2VydCBidWlsZF9waGFzZSBub3Qg
aW4gc2VsZi5idWlsZF9waGFzZXMKKyAgICAgICAgc2VsZi5idWlsZF9waGFzZXMuYXBwZW5kKGJ1
aWxkX3BoYXNlKQorCisKK2NsYXNzIFBCWFByb2plY3QoUEJYT2JqZWN0LCBYQ0NvbmZpZ3VyYXRp
b25MaXN0UmVmZXJyZXIpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgZGF0YSBmb3Ig
YSBQQlhQcm9qZWN0IG9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlk
LCBpc2EsIHByb2plY3QsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUpOgorICAg
ICAgICBhc3NlcnQgaXNhID09ICdQQlhQcm9qZWN0JworICAgICAgICBQQlhPYmplY3QuX19pbml0
X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZl
cnJlci5fX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYucHJv
amVjdCA9IHByb2plY3QKKyAgICAgICAgc2VsZi50YXJnZXRzID0gW10gICMgbGlzdCBvZiBQQlhU
YXJnZXQgZW50cmllcworICAgICAgICBzZWxmLm1haW5fZ3JvdXAgPSBOb25lCisKKyAgICBkZWYg
aXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBQQlhPYmplY3QuaXNfdmFsaWQoc2VsZikg
YW5kIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZlcnJlci5pc192YWxpZChzZWxmKQorCisgICAgZGVm
IGNvbW1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiAiUHJvamVjdCBvYmplY3QiCisKKyAgICBk
ZWYgYXBwZW5kX3RhcmdldChzZWxmLCB0YXJnZXQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZSh0YXJnZXQsIFBCWFRhcmdldCkKKyAgICAgICAgYXNzZXJ0IHRhcmdldCBub3QgaW4gc2VsZi50
YXJnZXRzCisgICAgICAgIHNlbGYudGFyZ2V0cy5hcHBlbmQodGFyZ2V0KQorCisKK2NsYXNzIFBC
WEFyYml0cmFyeU9iamVjdChQQlhPYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGhvbGRpbmcg
YSB0b3AtbGV2ZWwgWGNvZGUgb2JqZWN0IHRoYXQgaXMgbm9uZSBvZiB0aGUgYWJvdmUuIFRob3Nl
IGFyZSBBRkFJQ1Q6CisgICAgICAgIFBCWENvbnRhaW5lckl0ZW1Qcm94eQorICAgICAgICBQQlhU
YXJnZXREZXBlbmRlbmN5CisgICAgd2hlcmU6CisgICAgICAgIFBCWE5hdGl2ZVRhcmdldC5kZXBl
bmRlbmNpZXMgLT4gUEJYVGFyZ2V0RGVwZW5kZW5jeQorICAgICAgICBQQlhUYXJnZXREZXBlbmRl
bmN5LnRhcmdldFByb3h5IC0+IFBCWENvbnRhaW5lckl0ZW1Qcm94eQorICAgICIiIgorICAgIGRl
ZiBjb21tZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lIG9yIHNlbGYuaXNhCisK
KworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Ns
YXNzIFhjb2RlUHJvamVjdFJlYWRlcihQcm9qZWN0UmVhZGVyKToKKyAgICAiIiIKKyAgICBQYXJz
aW5nIGNsYXNzIGZvciBhbiBYY29kZSBwcm9qZWN0IGZpbGUuCisgICAgIiIiCisgICAgQ09NTUVO
VF9NQVRDSCA9IHJlLmNvbXBpbGUoJy9cKi4qP1wqLycpCisgICAgSURfTUFUQ0ggPSByZS5jb21w
aWxlKCdbQS1aYS16MC05X10rJykKKyAgICBWQUxVRV9NQVRDSCA9IHJlLmNvbXBpbGUoJ1stXy8u
QS1aYS16MC05XSsnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVzeXN0
ZW09Tm9uZSk6CisgICAgICAgIGFzc2VydCBwcm9qZWN0CisgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKHByb2plY3QsIFhjb2RlUHJvamVjdCkKKyAgICAgICAgUHJvamVjdFJlYWRlci5fX2luaXRf
XyhzZWxmLCBwcm9qZWN0LCBmaWxlc3lzdGVtKQorICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisg
ICAgICAgIHNlbGYubGluZSA9ICcnCisgICAgICAgIHNlbGYubGluZV9udW1iZXIgPSAwCisgICAg
ICAgICMgUmVsZXZhbnQgb2JqZWN0IHR5cGVzIGFuZCB0aGVpciBjcmVhdGlvbiBmdW5jdGlvbnMK
KyAgICAgICAgc2VsZi5pc2FfdG9fY3JlYXRlX21ldGhvZCA9IHsKKyAgICAgICAgICAgICdQQlhC
dWlsZEZpbGUnICAgICAgICAgICAgICA6IHByb2plY3QuY3JlYXRlX1BCWEJ1aWxkRmlsZSwKKyAg
ICAgICAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFzZScgICAgICA6IHByb2plY3QuY3JlYXRlX1BC
WEJ1aWxkUGhhc2UsCisgICAgICAgICAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnICAgICAgOiBw
cm9qZWN0LmNyZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWFJlc291cmNlc0J1
aWxkUGhhc2UnICAgIDogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSwKKyAgICAgICAgICAg
ICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZScgICA6IHByb2plY3QuY3JlYXRlX1BCWEJ1aWxkUGhh
c2UsCisgICAgICAgICAgICAnUEJYQ29weUZpbGVzQnVpbGRQaGFzZScgICAgOiBwcm9qZWN0LmNy
ZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWFNoZWxsU2NyaXB0QnVpbGRQaGFz
ZScgIDogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSwKKyAgICAgICAgICAgICdQQlhGaWxl
UmVmZXJlbmNlJyAgICAgICAgICA6IHByb2plY3QuY3JlYXRlX1BCWEZpbGVSZWZlcmVuY2UsCisg
ICAgICAgICAgICAnUEJYR3JvdXAnICAgICAgICAgICAgICAgICAgOiBwcm9qZWN0LmNyZWF0ZV9Q
QlhHcm91cCwKKyAgICAgICAgICAgICdQQlhWYXJpYW50R3JvdXAnICAgICAgICAgICA6IHByb2pl
Y3QuY3JlYXRlX1BCWFZhcmlhbnRHcm91cCwKKyAgICAgICAgICAgICdQQlhBZ2dyZWdhdGVUYXJn
ZXQnICAgICAgICA6IHByb2plY3QuY3JlYXRlX1BCWFRhcmdldCwKKyAgICAgICAgICAgICdQQlhO
YXRpdmVUYXJnZXQnICAgICAgICAgICA6IHByb2plY3QuY3JlYXRlX1BCWFRhcmdldCwKKyAgICAg
ICAgICAgICdQQlhQcm9qZWN0JyAgICAgICAgICAgICAgICA6IHByb2plY3QuY3JlYXRlX1BCWFBy
b2plY3QsCisgICAgICAgICAgICAnWENCdWlsZENvbmZpZ3VyYXRpb24nICAgICAgOiBwcm9qZWN0
LmNyZWF0ZV9YQ0J1aWxkQ29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICdYQ0NvbmZpZ3VyYXRp
b25MaXN0JyAgICAgICA6IHByb2plY3QuY3JlYXRlX1hDQ29uZmlndXJhdGlvbkxpc3QsCisgICAg
ICAgIH0KKyAgICAgICAgIyBiYXNlIGRpcmVjdG9yeSBtYXBwaW5nCisgICAgICAgIHNlbGYuc291
cmNlVHJlZV90b19kaXJlY3RvcnkgPSB7CisgICAgICAgICAgICAnIjxncm91cD4iJyAgICAgICAg
ICAgICAgICAgOiBOb25lLAorICAgICAgICAgICAgJ1NPVVJDRV9ST09UJyAgICAgICAgICAgICAg
IDogc2VsZi5wcm9qZWN0LnNvdXJjZV9yb290X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICciPGFi
c29sdXRlPiInICAgICAgICAgICAgICA6IHNlbGYuY29tbW9uLnJvb3RfZGlyZWN0b3J5LAorICAg
ICAgICAgICAgJ0JVSUxUX1BST0RVQ1RTX0RJUicgICAgICAgIDogc2VsZi5jb21tb24uYnVpbGRf
ZGlyZWN0b3J5LAorICAgICAgICAgICAgJ0RFVkVMT1BFUl9ESVInICAgICAgICAgICAgIDogc2Vs
Zi5jb21tb24uREVWRUxPUEVSX0RJUl9kaXJlY3RvcnksCisgICAgICAgICAgICAnU0RLUk9PVCcg
ICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbW1vbi5TREtST09UX2RpcmVjdG9yeSwKKyAgICAg
ICAgICAgICdDT05GSUdVUkFUSU9OX1RFTVBfRElSJyAgICA6IHNlbGYuY29tbW9uLkNPTkZJR1VS
QVRJT05fVEVNUF9ESVJfZGlyZWN0b3J5LAorICAgICAgICB9CisKKyAgICAjIC0tLSByZWFkaW5n
IC0tLQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5s
aW5lOgorICAgICAgICAgICAgc2VsZi5saW5lID0gc2VsZi5faXRlci5uZXh0KCkKKyAgICAgICAg
ICAgIHNlbGYubGluZV9udW1iZXIgKz0gMQorICAgICAgICAgICAgIyBTdHJpcCBjb21tZW50cyBh
bmQgd2hpdGVzcGFjZS4KKyAgICAgICAgICAgIHNlbGYubGluZSA9IHNlbGYuQ09NTUVOVF9NQVRD
SC5zdWIoJycsIHNlbGYubGluZSkuc3RyaXAoKQorICAgICAgICAgICAgaWYgc2VsZi5saW5lLnN0
YXJ0c3dpdGgoJy8vJyk6CisgICAgICAgICAgICAgICAgc2VsZi5saW5lID0gJycKKworICAgIGRl
ZiBza2lwX25fY2hhcnMoc2VsZiwgbik6CisgICAgICAgIHNlbGYubGluZSA9IHNlbGYubGluZVtu
Ol0ubHN0cmlwKCkKKyAgICAgICAgc2VsZi5yZWFkbGluZSgpCisKKyAgICBkZWYgc2tpcF9jaGFy
KHNlbGYsIGMpOgorICAgICAgICBzZWxmLnZlcmlmeShzZWxmLmxpbmUuc3RhcnRzd2l0aChjKSwg
IlVuZXhwZWN0ZWQgY2hhcmFjdGVyICclYycgZW5jb3VudGVyZWQgKCclYycgZXhwZWN0ZWQpIGlu
IGxpbmUgJWQhIiAlIChzZWxmLmxpbmVbMF0sIGMsIHNlbGYubGluZV9udW1iZXIpKQorICAgICAg
ICBzZWxmLmxpbmUgPSBzZWxmLmxpbmVbMTpdLmxzdHJpcCgpCisgICAgICAgIHNlbGYucmVhZGxp
bmUoKQorCisgICAgZGVmIHJlYWRfbWF0Y2goc2VsZiwgcmVnZXhwLCBleHBsYW5hdGlvbik6Cisg
ICAgICAgIG1hdGNoID0gcmVnZXhwLm1hdGNoKHNlbGYubGluZSkKKyAgICAgICAgc2VsZi52ZXJp
ZnkobWF0Y2gsICJDb3VsZCBub3QgcGFyc2UgJXMgLSB1bmV4cGVjdGVkIGNoYXJhY3RlcnMgJyVz
JyBlbmNvdW50ZXJlZCBpbiBsaW5lICVkISIlIChleHBsYW5hdGlvbiwgc2VsZi5saW5lLCBzZWxm
LmxpbmVfbnVtYmVyKSkKKyAgICAgICAgc2VsZi5za2lwX25fY2hhcnMobWF0Y2guZW5kKDApKQor
ICAgICAgICByZXR1cm4gbWF0Y2guZ3JvdXAoMCkKKworICAgIGRlZiByZWFkX3F1b3RlZF9zdHJp
bmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmxpbmVbMF0gPT0gJyInCisgICAgICAgIG4g
PSAxCisgICAgICAgIHdoaWxlIHNlbGYubGluZVtuXSAhPSAnIic6CisgICAgICAgICAgICAjIEVz
Y2FwZSAnXCcgLSBqdXN0IHNraXAgdGhlIG5leHQgY2hhcmFjdGVyLCB3aGF0ZXZlciBpdCBpcy4K
KyAgICAgICAgICAgIGlmIHNlbGYubGluZVtuXSA9PSAnXFwnOgorICAgICAgICAgICAgICAgIG4g
Kz0gMQorICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHZhbHVlID0gc2VsZi5saW5lWzE6bl0K
KyAgICAgICAgc2VsZi5za2lwX25fY2hhcnMobiArIDEpCisgICAgICAgIHJldHVybiBYY29kZVF1
b3RlZFN0cmluZyh2YWx1ZSkKKworICAgIGRlZiByZWFkX3NvdXJjZVRyZWUoc2VsZik6CisgICAg
ICAgICcnJ0F2b2lkIHVzaW5nIFhjb2RlUXVvdGVkU3RyaW5nIGZvciBzb3VyY2VUcmVlIHZhbHVl
cycnJworICAgICAgICBuID0gMAorICAgICAgICB3aGlsZSBzZWxmLmxpbmVbbl0gIT0gJzsnOgor
ICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHZhbHVlID0gc2VsZi5saW5lWzpuXS5yc3RyaXAo
KQorICAgICAgICBzZWxmLnNraXBfbl9jaGFycyhuKQorICAgICAgICByZXR1cm4gdmFsdWUKKwor
ICAgIGRlZiByZWFkX1VJRChzZWxmKToKKyAgICAgICAgbWF0Y2ggPSBYY29kZVVJRC5NQVRDSC5t
YXRjaChzZWxmLmxpbmUpCisgICAgICAgIHNlbGYudmVyaWZ5KG1hdGNoLCAiQ291bGQgbm90IHBh
cnNlIFVJRCAtIHVuZXhwZWN0ZWQgY2hhcmFjdGVycyAnJXMnIGVuY291bnRlcmVkIGluIGxpbmUg
JWQhIiUgKHNlbGYubGluZSwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAgIHNlbGYuc2tpcF9u
X2NoYXJzKG1hdGNoLmVuZCgwKSkKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvamVjdC5lbnN1cmVf
VUlEKG1hdGNoLmdyb3VwKDApKQorCisgICAgZGVmIHJlYWRfbGlzdChzZWxmKToKKyAgICAgICAg
c2VsZi5za2lwX2NoYXIoJygnKQorICAgICAgICBsaXN0ID0gW10KKyAgICAgICAgd2hpbGUgc2Vs
Zi5saW5lWzBdICE9ICcpJzoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5yZWFkX3ZhbHVlKCkK
KyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCcsJykKKyAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHZhbHVlKQorICAgICAgICBzZWxmLnNraXBfY2hhcignKScpCisgICAgICAgIHJldHVybiBsaXN0
CisKKyAgICBkZWYgcmVhZF9VSURfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX2NoYXIo
JygnKQorICAgICAgICBsaXN0ID0gWGNvZGVVSURMaXN0KCkKKyAgICAgICAgd2hpbGUgc2VsZi5s
aW5lWzBdICE9ICcpJzoKKyAgICAgICAgICAgIHVpZCA9IHNlbGYucmVhZF9VSUQoKQorICAgICAg
ICAgICAgc2VsZi5za2lwX2NoYXIoJywnKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodWlkKQor
ICAgICAgICBzZWxmLnNraXBfY2hhcignKScpCisgICAgICAgIHJldHVybiBsaXN0CisKKyAgICBk
ZWYgcmVhZF9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCd7JykKKyAgICAg
ICAgb2JqZWN0ID0ge30KKyAgICAgICAgd2hpbGUgc2VsZi5saW5lWzBdICE9ICd9JzoKKyAgICAg
ICAgICAgIGlkID0gc2VsZi5yZWFkX21hdGNoKHNlbGYuSURfTUFUQ0gsICJwcm9wZXJ0eSBuYW1l
IikKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIHZhbHVlID0g
c2VsZi5yZWFkX3ZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc7JykKKyAgICAg
ICAgICAgIG9iamVjdFtpZF0gPSB2YWx1ZQorICAgICAgICBzZWxmLnNraXBfY2hhcignfScpCisg
ICAgICAgIHJldHVybiBvYmplY3QKKworICAgIGRlZiByZWFkX3ZhbHVlKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmxpbmVbMF0gPT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9v
YmplY3QoKQorICAgICAgICBpZiBzZWxmLmxpbmVbMF0gPT0gJygnOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYucmVhZF9saXN0KCkKKyAgICAgICAgaWYgc2VsZi5saW5lWzBdID09ICciJzoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfcXVvdGVkX3N0cmluZygpCisgICAgICAgIG1hdGNo
ID0gWGNvZGVVSUQuTUFUQ0gubWF0Y2goc2VsZi5saW5lWzoyNF0pCisgICAgICAgIGlmIG1hdGNo
OgorICAgICAgICAgICAgdWlkID0gc2VsZi5wcm9qZWN0LmVuc3VyZV9VSUQobWF0Y2guZ3JvdXAo
MCkpCisgICAgICAgICAgICBzZWxmLnNraXBfbl9jaGFycyhtYXRjaC5lbmQoMCkpCisgICAgICAg
ICAgICByZXR1cm4gdWlkCisgICAgICAgIG1hdGNoID0gc2VsZi5WQUxVRV9NQVRDSC5tYXRjaChz
ZWxmLmxpbmUpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC5n
cm91cCgwKQorICAgICAgICAgICAgc2VsZi5za2lwX25fY2hhcnMobWF0Y2guZW5kKDApKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHJldHVybiBzZWxmLmVycm9yKCJDb3VsZCBu
b3QgcGFyc2UgdmFsdWUgJyVzJyBpbiBsaW5lICVkISIgJSAoc2VsZi5saW5lLCBzZWxmLmxpbmVf
bnVtYmVyKSkKKworICAgICMgUGFyc2luZyBtZXRob2RzIGZvciBpbXBvcnRhbnQgcHJvcGVydHkg
bmFtZXMKKyAgICBQUk9QRVJUWV9OQU1FX1RPX1JFQURfTUVUSE9EID0geworICAgICAgICAnYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UnOiByZWFkX1VJRCwKKyAgICAgICAgJ2J1aWxkQ29uZmln
dXJhdGlvbkxpc3QnICAgIDogcmVhZF9VSUQsCisgICAgICAgICdidWlsZENvbmZpZ3VyYXRpb25z
JyAgICAgICA6IHJlYWRfVUlEX2xpc3QsCisgICAgICAgICdidWlsZFBoYXNlcycgICAgICAgICAg
ICAgICA6IHJlYWRfVUlEX2xpc3QsCisgICAgICAgICdjaGlsZHJlbicgICAgICAgICAgICAgICAg
ICA6IHJlYWRfVUlEX2xpc3QsCisgICAgICAgICdkZXBlbmRlbmNpZXMnICAgICAgICAgICAgICA6
IHJlYWRfVUlEX2xpc3QsCisgICAgICAgICdmaWxlUmVmJyAgICAgICAgICAgICAgICAgICA6IHJl
YWRfVUlELAorICAgICAgICAnZmlsZXMnICAgICAgICAgICAgICAgICAgICAgOiByZWFkX1VJRF9s
aXN0LAorICAgICAgICAnbWFpbkdyb3VwJyAgICAgICAgICAgICAgICAgOiByZWFkX1VJRCwKKyAg
ICAgICAgJ3Byb2R1Y3RSZWZHcm91cCcgICAgICAgICAgIDogcmVhZF9VSUQsCisgICAgICAgICdy
ZW1vdGVHbG9iYWxJRFN0cmluZycgICAgICA6IHJlYWRfVUlELAorICAgICAgICAnc291cmNlVHJl
ZScgICAgICAgICAgICAgICAgOiByZWFkX3NvdXJjZVRyZWUsCisgICAgICAgICd0YXJnZXRzJyAg
ICAgICAgICAgICAgICAgICA6IHJlYWRfVUlEX2xpc3QsCisgICAgfQorCisgICAgZGVmIHJlYWRf
cGJ4X29iamVjdChzZWxmLCB1aWQpOgorICAgICAgICBzZWxmLnZlcmlmeSh1aWQgbm90IGluIHNl
bGYucHJvamVjdC5hbGxfb2JqZWN0cywgIk9iamVjdCAlcyBhbHJlYWR5IGhhcyBhIGRlZmluaXRp
b24gLSBsaW5lICVkIiAlICh1aWQsIHNlbGYubGluZV9udW1iZXIpKQorICAgICAgICBzZWxmLnNr
aXBfY2hhcigneycpCisgICAgICAgICMgUmVhZCAnaXNhJyBhdHRyaWJ1dGUgYW5kIGluc3RhbnRp
YXRlIGFwcHJvcHJpYXRlIGNsYXNzIG9iamVjdC4KKyAgICAgICAgIyBOT1RFOiBiZWxvdyBjb2Rl
IGFzc3VtZXMgdGhlICdpc2EnIGF0dHJpYnV0ZSBpcyBhbHdheXMgbGlzdGVkIGZpcnN0LgorICAg
ICAgICBzZWxmLnZlcmlmeShzZWxmLmxpbmUuc3RhcnRzd2l0aCgnaXNhJyksICJFeHBlY3RlZCAn
aXNhJyBhdHRyaWJ1dGUsIGZvdW5kICclcycgaW5zdGVhZCAtIGluIGxpbmUgJWQhIiAlIChzZWxm
LmxpbmUsIHNlbGYubGluZV9udW1iZXIpKQorICAgICAgICBzZWxmLnNraXBfbl9jaGFycygzKQor
ICAgICAgICBzZWxmLnNraXBfY2hhcignPScpCisgICAgICAgIGlzYSA9IHNlbGYucmVhZF9tYXRj
aChzZWxmLklEX01BVENILCAiJ2lzYScgdmFsdWUiKQorICAgICAgICBwYnhfb2JqZWN0ID0gc2Vs
Zi5pc2FfdG9fY3JlYXRlX21ldGhvZC5nZXQoaXNhLCBzZWxmLnByb2plY3QuY3JlYXRlX1BCWEFy
Yml0cmFyeU9iamVjdCkodWlkLCBpc2EpCisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc7JykKKyAg
ICAgICAgIyByZWFkIHJlbWFpbmluZyBhdHRyaWJ1dGVzCisgICAgICAgIHdoaWxlIHNlbGYubGlu
ZVswXSAhPSAnfSc6CisgICAgICAgICAgICBpZCA9IHNlbGYucmVhZF9tYXRjaChzZWxmLklEX01B
VENILCAiZGljdGlvbmFyeSBrZXkiKQorICAgICAgICAgICAgc2VsZi5za2lwX2NoYXIoJz0nKQor
ICAgICAgICAgICAgcGJ4X29iamVjdFtpZF0gPSBYY29kZVByb2plY3RSZWFkZXIuUFJPUEVSVFlf
TkFNRV9UT19SRUFEX01FVEhPRC5nZXQoaWQsIFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX3ZhbHVl
KShzZWxmKQorICAgICAgICAgICAgc2VsZi5za2lwX2NoYXIoJzsnKQorICAgICAgICBzZWxmLnNr
aXBfY2hhcignfScpCisKKyAgICBkZWYgcmVhZF9vYmplY3RzKHNlbGYpOgorICAgICAgICBzZWxm
LnNraXBfY2hhcigneycpCisgICAgICAgIHdoaWxlIHNlbGYubGluZVswXSAhPSAnfSc6CisgICAg
ICAgICAgICB1aWQgPSBzZWxmLnJlYWRfVUlEKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFy
KCc9JykKKyAgICAgICAgICAgIHNlbGYucmVhZF9wYnhfb2JqZWN0KHVpZCkKKyAgICAgICAgICAg
IHNlbGYuc2tpcF9jaGFyKCc7JykKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJ30nKQorCisgICAg
ZGVmIHJlYWRfbWFpbl9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCd7JykK
KyAgICAgICAgc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0ID0ge30KKyAgICAgICAgd2hpbGUgc2Vs
Zi5saW5lWzBdICE9ICd9JzoKKyAgICAgICAgICAgIGlkID0gc2VsZi5yZWFkX21hdGNoKHNlbGYu
SURfTUFUQ0gsICJtYWluIG9iamVjdCBhdHRyaWJ1dGUiKQorICAgICAgICAgICAgc2VsZi5za2lw
X2NoYXIoJz0nKQorICAgICAgICAgICAgaWYgaWQgPT0gJ29iamVjdHMnOgorICAgICAgICAgICAg
ICAgIHNlbGYucmVhZF9vYmplY3RzKCkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2plY3QubWFp
bl9vYmplY3RbJ29iamVjdHMnXSA9IHNlbGYucHJvamVjdC5hbGxfb2JqZWN0cworICAgICAgICAg
ICAgZWxpZiBpZCA9PSAncm9vdE9iamVjdCc6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0
Lm1haW5fb2JqZWN0Wydyb290T2JqZWN0J10gPSBzZWxmLnJlYWRfVUlEKCkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0W2lkXSA9IHNl
bGYucmVhZF92YWx1ZSgpCisgICAgICAgICAgICBzZWxmLnNraXBfY2hhcignOycpCisgICAgICAg
ICMgRG9uJ3QgdXNlIHNlbGYuc2tpcF9jaGFyKCd9JykgYmVsb3csIHRvIGF2b2lkIGhhdmluZyB0
byBoYW5kbGUgdGhlIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uCisgICAgICAgIGFzc2VydCBzZWxm
LmxpbmUuc3RhcnRzd2l0aCgnfScpCisgICAgICAgIHJldHVybiBzZWxmLnByb2plY3QubWFpbl9v
YmplY3QKKworICAgIGRlZiByZWFkX3Byb2plY3RfZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAg
c2VsZi5pbmZvKCJSZWFkaW5nIHByb2plY3QgZmlsZSBmcm9tICVzIiAlIHBhdGgpCisgICAgICAg
IHNlbGYuZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lID0gJycKKyAgICAgICAgd2l0aCBz
ZWxmLmZpbGVzeXN0ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcocGF0aCkgYXMgc2VsZi5m
aWxlOgorICAgICAgICAgICAgc2VsZi5faXRlciA9IGl0ZXIoc2VsZi5maWxlKQorICAgICAgICAg
ICAgc2VsZi5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLnJlYWRfbWFpbl9vYmplY3QoKQor
ICAgICAgICBzZWxmLnZpbmZvKCJQb3N0cHJvY2Vzc2luZy4uLiIpCisgICAgICAgIHNlbGYudmVy
aWZ5X3Jvb3Rfb2JqZWN0KCkKKyAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc19ncm91cHMoKQorICAg
ICAgICBzZWxmLnBvc3Rwcm9jZXNzX2J1aWxkX3BoYXNlcygpCisgICAgICAgIHNlbGYucG9zdHBy
b2Nlc3NfYnVpbGRfZmlsZXMoKQorICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2NvbmZpZ3VyYXRp
b25fbGlzdHMoKQorICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX3RhcmdldHMoKQorICAgICAgICBz
ZWxmLnBvc3Rwcm9jZXNzX3Byb2plY3QoKQorICAgICAgICBzZWxmLnZlcmlmeV9hbGxfb2JqZWN0
cygpCisgICAgICAgIHNlbGYudmluZm8oIkRvbmUgLSBhIHRvdGFsIG9mICVkIG9iamVjdHMgc3Rv
cmVkIiAlIGxlbihzZWxmLnByb2plY3QuYWxsX29iamVjdHMpKQorICAgICAgICBzZWxmLmZpbGUg
PSBOb25lCisgICAgICAgIHNlbGYubGluZSA9ICcnCisKKyAgICAjIC0tLSBwb3N0cHJvY2Vzc2lu
ZyAtLS0KKworICAgIGRlZiBlbnN1cmVfcHJvcGVydHkoc2VsZiwgb2JqZWN0LCBwcm9wZXJ0eV9u
YW1lLCBjbHMpOgorICAgICAgICBpZiBwcm9wZXJ0eV9uYW1lIG5vdCBpbiBvYmplY3Q6CisgICAg
ICAgICAgICBzZWxmLndhcm5pbmcoIiVzIGhhcyBubyBwcm9wZXJ0eSAnJXMnIC0gYWRkaW5nIGl0
ISIgJSAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lKSkKKyAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0
eV9uYW1lXSA9IGNscygpCisgICAgICAgIHJldHVybiBvYmplY3RbcHJvcGVydHlfbmFtZV0KKwor
ICAgIGRlZiBkaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVlKHNlbGYsIG9iamVjdCwgY29udGFpbmVy
X2RpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgaWYgbm90ICdzb3VyY2VUcmVlJyBpbiBvYmplY3Q6
CisgICAgICAgICAgICBzZWxmLndhcm5pbmcoIiVzIGRvZXMgbm90IGNvbnRhaW4gJ3NvdXJjZVRy
ZWUnIHByb3BlcnR5IC0gYXNzdW1pbmcgXCI8Z3JvdXA+XCIiICUgb2JqZWN0KQorICAgICAgICAg
ICAgb2JqZWN0Wydzb3VyY2VUcmVlJ10gPSAnIjxncm91cD4iJworICAgICAgICBzb3VyY2VUcmVl
ID0gb2JqZWN0Wydzb3VyY2VUcmVlJ10KKyAgICAgICAgc2VsZi52ZXJpZnkoc291cmNlVHJlZSBp
biBzZWxmLnNvdXJjZVRyZWVfdG9fZGlyZWN0b3J5LCAiRW5jb3VudGVyZWQgdW5rbm93biAnc291
cmNlVHJlZScgcHJvcGVydHkgaW4gJXMhIiAlIG9iamVjdCkKKyAgICAgICAgcmV0dXJuIHNlbGYu
c291cmNlVHJlZV90b19kaXJlY3Rvcnlbc291cmNlVHJlZV0gb3IgY29udGFpbmVyX2RpcmVjdG9y
eSBvciBzZWxmLnByb2plY3Quc291cmNlX3Jvb3RfZGlyZWN0b3J5CisKKyAgICBkZWYgZGlyZWN0
b3J5X2Zyb21fc291cmNlVHJlZV9hbmRfcGF0aChzZWxmLCBvYmplY3QsIGNvbnRhaW5lcl9kaXJl
Y3Rvcnk9Tm9uZSk6CisgICAgICAgIHBhcmVudF9kaXJlY3RvcnkgPSBzZWxmLmRpcmVjdG9yeV9m
cm9tX3NvdXJjZVRyZWUob2JqZWN0LCBjb250YWluZXJfZGlyZWN0b3J5KQorICAgICAgICBwYXRo
ID0gb2JqZWN0LmdldCgncGF0aCcsICcnKQorICAgICAgICByZXR1cm4gc2VsZi5jb21tb24uZW5z
dXJlX3N1YmRpcmVjdG9yeV9wYXRoKHBhcmVudF9kaXJlY3RvcnksIHBhdGgpCisKKyAgICBkZWYg
ZmlsZV9mcm9tX3NvdXJjZVRyZWVfYW5kX3BhdGgoc2VsZiwgb2JqZWN0LCBjb250YWluZXJfZGly
ZWN0b3J5PU5vbmUpOgorICAgICAgICBwYXJlbnRfZGlyZWN0b3J5ID0gc2VsZi5kaXJlY3Rvcnlf
ZnJvbV9zb3VyY2VUcmVlKG9iamVjdCwgY29udGFpbmVyX2RpcmVjdG9yeSkKKyAgICAgICAgcGF0
aCA9IG9iamVjdC5nZXQoJ3BhdGgnLCAnJykKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbW9uLmVu
c3VyZV9maWxlX3BhdGgocGFyZW50X2RpcmVjdG9yeSwgcGF0aCkKKworICAgIGRlZiB2ZXJpZnlf
cm9vdF9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5KCdvYmplY3RzJyBpbiBzZWxm
LnByb2plY3QubWFpbl9vYmplY3QsICJEaWQgbm90IGZpbmQgYW4gJ29iamVjdHMnIGVudHJ5IHdp
dGhpbiB0aGUgbWFpbiBwcm9qZWN0IG9iamVjdCEiKQorICAgICAgICBzZWxmLnZlcmlmeSgncm9v
dE9iamVjdCcgaW4gc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0LCAiRGlkIG5vdCBmaW5kIGEgJ3Jv
b3RPYmplY3QnIGVudHJ5IHdpdGhpbiB0aGUgbWFpbiBwcm9qZWN0IG9iamVjdCEiKQorICAgICAg
ICBzZWxmLnZlcmlmeShzZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QsICJEaWQgbm90IGZpbmQg
YSBQQlhQcm9qZWN0IG9iamVjdCB3aXRoaW4gdGhlIHByb2plY3QgZmlsZSEiKQorICAgICAgICBy
b290X29iamVjdF91aWQgPSBzZWxmLnByb2plY3QubWFpbl9vYmplY3RbJ3Jvb3RPYmplY3QnXQor
ICAgICAgICBzZWxmLnZlcmlmeShyb290X29iamVjdF91aWQucmVmZXJyZWRfb2JqZWN0LCAiJ3Jv
b3RPYmplY3QnIG9mIHRoZSBwcm9qZWN0IHJlZmVycyB0byBhbiB1bmtub3duIGVudGl0eSAnJXMn
ISIgJSByb290X29iamVjdF91aWQpCisgICAgICAgIHNlbGYudmVyaWZ5KHJvb3Rfb2JqZWN0X3Vp
ZCA9PSBzZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QudWlkLCAiVGhlICdyb290T2JqZWN0JyBV
SUQgJXMgaW4gdGhlIHByb2plY3QgZmlsZSBkaWZmZXJzIGZyb20gdGhlIFBCWFByb2plY3QncyBV
SUQgJXMhIiAlIChyb290X29iamVjdF91aWQsIHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdC51
aWQpKQorICAgICAgICBhc3NlcnQgcm9vdF9vYmplY3RfdWlkLnJlZmVycmVkX29iamVjdCBpcyBz
ZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QKKworICAgIGRlZiBwb3N0cHJvY2Vzc19ncm91cHMo
c2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5KCdtYWluR3JvdXAnIGluIHNlbGYucHJvamVjdC5w
cm9qZWN0X29iamVjdCwgIkRpZCBub3QgZmluZCBhICdtYWluR3JvdXAnIGVudHJ5IGluIHRoZSBQ
QlhQcm9qZWN0IG9iamVjdCEiKQorICAgICAgICBtYWluX2dyb3VwX3VpZCA9IHNlbGYucHJvamVj
dC5wcm9qZWN0X29iamVjdFsnbWFpbkdyb3VwJ10KKyAgICAgICAgc2VsZi52ZXJpZnkobWFpbl9n
cm91cF91aWQucmVmZXJyZWRfb2JqZWN0LCAiRGlkIG5vdCBmaW5kIG1haW4gZ3JvdXAgJXMgZW50
cnkgd2l0aGluIHRoZSBwcm9qZWN0IGZpbGUhIiAlIG1haW5fZ3JvdXBfdWlkKQorICAgICAgICBt
YWluX2dyb3VwID0gbWFpbl9ncm91cF91aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAgIHNlbGYu
dmVyaWZ5KGlzaW5zdGFuY2UobWFpbl9ncm91cCwgUEJYR3JvdXApLCAiJXMgcmVmZXJyZWQgYXMg
J21haW5Hcm91cCcgaW4gJXMgaXMgbm90IGEgUEJYR3JvdXAgb2JqZWN0ISIgJSAobWFpbl9ncm91
cCwgc2VsZi5wcm9qZWN0LnByb2plY3Rfb2JqZWN0KSkKKyAgICAgICAgI21haW5fZ3JvdXAuc2V0
X2RpcmVjdG9yeShzZWxmLnByb2plY3QuZmlsZS5kaXJlY3RvcnkpCisgICAgICAgIHNlbGYucHJv
amVjdC5zZXRfbWFpbl9ncm91cChtYWluX2dyb3VwKQorICAgICAgICBzZWxmLnBvc3Rwcm9jZXNz
X2dyb3VwKHNlbGYucHJvamVjdC5tYWluX2dyb3VwKQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX2dy
b3VwKHNlbGYsIGdyb3VwLCBjb250YWluaW5nX2dyb3VwPU5vbmUpOgorICAgICAgICBhc3NlcnQg
bm90IGdyb3VwLmRpcmVjdG9yeQorICAgICAgICBhc3NlcnQgbm90IGNvbnRhaW5pbmdfZ3JvdXAg
b3IgY29udGFpbmluZ19ncm91cC5kaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5pbmdf
Z3JvdXAgb3IgZ3JvdXAgaXMgc2VsZi5wcm9qZWN0Lm1haW5fZ3JvdXAKKyAgICAgICAgIyBsaW5r
IGNvbnRhaW5pbmcgKHBhcmVudCkgZ3JvdXAKKyAgICAgICAgc2VsZi52ZXJpZnkobm90IGdyb3Vw
LmNvbnRhaW5lciwgIlBvc3Rwcm9jZXNzaW5nICVzOiB3YXMgYWxyZWFkeSBwcmV2aW91c2x5IHJl
ZmVyZW5jZWQgYnkgJXMhIiAlIChncm91cCwgZ3JvdXAuY29udGFpbmVyKSkKKyAgICAgICAgZ3Jv
dXAuc2V0X2NvbnRhaW5lcihjb250YWluaW5nX2dyb3VwKQorICAgICAgICAjIGxpbmsgZGlyZWN0
b3J5CisgICAgICAgIGNvbnRhaW5lcl9kaXJlY3RvcnkgPSBjb250YWluaW5nX2dyb3VwIGFuZCBj
b250YWluaW5nX2dyb3VwLmRpcmVjdG9yeQorICAgICAgICBncm91cC5zZXRfZGlyZWN0b3J5KHNl
bGYuZGlyZWN0b3J5X2Zyb21fc291cmNlVHJlZV9hbmRfcGF0aChncm91cCwgY29udGFpbmVyX2Rp
cmVjdG9yeSkpCisgICAgICAgICMgbGluayBjaGlsZHJlbiAoY2hpbGQgZ3JvdXBzIGFuZCBmaWxl
IHJlZmVyZW5jZXMpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5lbnN1cmVfcHJvcGVydHkoZ3Jv
dXAsICdjaGlsZHJlbicsIFhjb2RlVUlETGlzdCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
Y2hpbGRyZW4sIFhjb2RlVUlETGlzdCkKKyAgICAgICAgZm9yIHVpZCBpbiBjaGlsZHJlbjoKKyAg
ICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBz
ZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgY2hpbGQgd2l0
aCAlcycgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQgd2l0aGluIHRoZSBwcm9qZWN0ISIgJSAoZ3Jv
dXAsIHVpZCkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3Qs
IFBCWEdyb3VwKToKKyAgICAgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2dyb3VwKHVpZC5y
ZWZlcnJlZF9vYmplY3QsIGdyb3VwKQorICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9ncm91cCh1
aWQucmVmZXJyZWRfb2JqZWN0KQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHVpZC5yZWZl
cnJlZF9vYmplY3QsIFBCWEZpbGVSZWZlcmVuY2UpOgorICAgICAgICAgICAgICAgIHNlbGYucG9z
dHByb2Nlc3NfZmlsZV9yZWZlcmVuY2UodWlkLnJlZmVycmVkX29iamVjdCwgZ3JvdXApCisgICAg
ICAgICAgICAgICAgZ3JvdXAuYWRkX2ZpbGVfcmVmZXJlbmNlKHVpZC5yZWZlcnJlZF9vYmplY3Qp
CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgUEJYVmFy
aWFudEdyb3VwKToKKyAgICAgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX3ZhcmlhbnRfZ3Jv
dXAodWlkLnJlZmVycmVkX29iamVjdCwgZ3JvdXApCisgICAgICAgICAgICAgICAgZ3JvdXAuYWRk
X3ZhcmlhbnRfZ3JvdXAodWlkLnJlZmVycmVkX29iamVjdCkKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiJXMgY29udGFpbnMgJ2NoaWxkcmVuJyBlbnRyeSAl
cyAtIFBCWEZpbGVSZWZlcmVuY2UsIFBCWEdyb3VwIG9yIFBCWFZhcmlhbnRHcm91cCBleHBlY3Rl
ZCEiICUgKGdyb3VwLCB1aWQucmVmZXJyZWRfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICAKKyAg
ICAjZGVmIHBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNlcyhzZWxmKToKKyAgICAjICAgIGZvciBm
aWxlX3JlZmVyZW5jZSBpbiBzZWxmLnByb2plY3QuYWxsX2ZpbGVfcmVmZXJlbmNlczoKKyAgICAj
ICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNlKGZpbGVfcmVmZXJlbmNlKQor
CisgICAgZGVmIHBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNlKHNlbGYsIGZpbGVfcmVmZXJlbmNl
LCBjb250YWluZXIpOgorICAgICAgICBhc3NlcnQgY29udGFpbmVyCisgICAgICAgIGFzc2VydCBj
b250YWluZXIuZGlyZWN0b3J5CisgICAgICAgICMgbGluayBjb250YWluZXIKKyAgICAgICAgaWYg
ZmlsZV9yZWZlcmVuY2UuY29udGFpbmVyOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBp
cyBhbHJlYWR5IGNvbnRhaW5lZCBpbiAlcyAtIG5vdCBhZGRpbmcgdG8gJXMhIiAlIChmaWxlX3Jl
ZmVyZW5jZSwgZmlsZV9yZWZlcmVuY2UuY29udGFpbmVyLCBjb250YWluZXIpKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgZmlsZV9yZWZlcmVuY2Uuc2V0X2NvbnRhaW5lcihjb250YWluZXIp
CisgICAgICAgICMgbGluayBmaWxlCisgICAgICAgIGZpbGUgPSBzZWxmLmZpbGVfZnJvbV9zb3Vy
Y2VUcmVlX2FuZF9wYXRoKGZpbGVfcmVmZXJlbmNlLCBjb250YWluZXIuZGlyZWN0b3J5KQorICAg
ICAgICBpZiBmaWxlX3JlZmVyZW5jZS5maWxlIGFuZCBmaWxlX3JlZmVyZW5jZS5maWxlIGlzIG5v
dCBmaWxlOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBpcyBhbHJlYWR5IGFzc2lnbmUg
dG8gZmlsZSAlcyAtIG5vdCBhc3NpZ25pbmcgaXQgdG8gZGlmZmVyZW50IGZpbGUgJXMhIiAlIChm
aWxlX3JlZmVyZW5jZSwgZmlsZV9yZWZlcmVuY2UuZmlsZS5fZGVzY3BhdGhfd2l0aF9zZXAoJy8n
KSwgZmlsZS5fZGVzY3BhdGhfd2l0aF9zZXAoJy8nKSkpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBmaWxlX3JlZmVyZW5jZS5zZXRfZmlsZShmaWxlKQorCisgICAgI2RlZiBwb3N0cHJvY2Vz
c192YXJpYW50X2dyb3VwcyhzZWxmKToKKyAgICAjICAgIGZvciB2YXJpYW50X2dyb3VwIGluIHNl
bGYucHJvamVjdC5hbGxfdmFyaWFudF9ncm91cHM6CisgICAgIyAgICAgICAgc2VsZi5wb3N0cHJv
Y2Vzc192YXJpYW50X2dyb3VwKHZhcmlhbnRfZ3JvdXApCisKKyAgICBkZWYgcG9zdHByb2Nlc3Nf
dmFyaWFudF9ncm91cChzZWxmLCB2YXJpYW50X2dyb3VwLCBjb250YWluZXIpOgorICAgICAgICBh
c3NlcnQgY29udGFpbmVyCisgICAgICAgIGFzc2VydCBjb250YWluZXIuZGlyZWN0b3J5CisgICAg
ICAgICMgbGluayBjb250YWluZXIKKyAgICAgICAgc2VsZi52ZXJpZnkobm90IHZhcmlhbnRfZ3Jv
dXAuY29udGFpbmVyLCAiUG9zdHByb2Nlc3NpbmcgJXM6IHdhcyBhbHJlYWR5IHByZXZpb3VzbHkg
cmVmZXJlbmNlZCBieSAlcyEiICUgKHZhcmlhbnRfZ3JvdXAsIHZhcmlhbnRfZ3JvdXAuY29udGFp
bmVyKSkKKyAgICAgICAgdmFyaWFudF9ncm91cC5zZXRfY29udGFpbmVyKGNvbnRhaW5lcikKKyAg
ICAgICAgIyBsaW5rIGRpcmVjdG9yeQorICAgICAgICB2YXJpYW50X2dyb3VwLnNldF9kaXJlY3Rv
cnkoc2VsZi5kaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVlX2FuZF9wYXRoKHZhcmlhbnRfZ3JvdXAs
IGNvbnRhaW5lci5kaXJlY3RvcnkpKQorICAgICAgICAjIGxpbmsgJ2NoaWxkcmVuJyBmaWxlIHJl
ZmVyZW5jZXMKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmVuc3VyZV9wcm9wZXJ0eSh2YXJpYW50
X2dyb3VwLCAnY2hpbGRyZW4nLCBYY29kZVVJRExpc3QpCisgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKGNoaWxkcmVuLCBYY29kZVVJRExpc3QpCisgICAgICAgIGZvciB1aWQgaW4gY2hpbGRyZW46
CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1aWQsIFhjb2RlVUlEKQorICAgICAgICAg
ICAgc2VsZi52ZXJpZnkodWlkLnJlZmVycmVkX29iamVjdCwgIiVzIHJlZmVycyB0byBhIGNoaWxk
IHdpdGggJXMnIHRoYXQgY291bGQgbm90IGJlIGZvdW5kIHdpdGhpbiB0aGUgcHJvamVjdCEiICUg
KHZhcmlhbnRfZ3JvdXAsIHVpZCkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZl
cnJlZF9vYmplY3QsIFBCWEZpbGVSZWZlcmVuY2UpOgorICAgICAgICAgICAgICAgIHNlbGYucG9z
dHByb2Nlc3NfZmlsZV9yZWZlcmVuY2UodWlkLnJlZmVycmVkX29iamVjdCwgdmFyaWFudF9ncm91
cCkKKyAgICAgICAgICAgICAgICB2YXJpYW50X2dyb3VwLmFkZF9maWxlX3JlZmVyZW5jZSh1aWQu
cmVmZXJyZWRfb2JqZWN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
LmVycm9yKCIlcyBjb250YWlucyAnY2hpbGRyZW4nIGVudHJ5ICVzIC0gUEJYRmlsZVJlZmVyZW5j
ZSBleHBlY3RlZCEiICUgKHZhcmlhbnRfZ3JvdXAsIHVpZC5yZWZlcnJlZF9vYmplY3QpKQorCisg
ICAgZGVmIHBvc3Rwcm9jZXNzX2J1aWxkX3BoYXNlcyhzZWxmKToKKyAgICAgICAgZm9yIGJ1aWxk
X3BoYXNlIGluIHNlbGYucHJvamVjdC5hbGxfYnVpbGRfcGhhc2VzOgorICAgICAgICAgICAgc2Vs
Zi5wb3N0cHJvY2Vzc19idWlsZF9waGFzZShidWlsZF9waGFzZSkKKworICAgIGRlZiBwb3N0cHJv
Y2Vzc19idWlsZF9waGFzZShzZWxmLCBidWlsZF9waGFzZSk6CisgICAgICAgICMgbGluayBidWls
ZCBmaWxlcworICAgICAgICBmaWxlcyA9IHNlbGYuZW5zdXJlX3Byb3BlcnR5KGJ1aWxkX3BoYXNl
LCAnZmlsZXMnLCBYY29kZVVJRExpc3QpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGVz
LCBYY29kZVVJRExpc3QpCisgICAgICAgIGZvciB1aWQgaW4gZmlsZXM6CisgICAgICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZSh1aWQsIFhjb2RlVUlEKQorICAgICAgICAgICAgc2VsZi52ZXJpZnko
dWlkLnJlZmVycmVkX29iamVjdCwgIiVzIHJlZmVycyB0byBhICdmaWxlcycgZW50cnkgJXMgdGhh
dCBjb3VsZCBub3QgYmUgZm91bmQgd2l0aGluIHRoZSBwcm9qZWN0ISIgJSAoYnVpbGRfcGhhc2Us
IHVpZCkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBC
WEJ1aWxkRmlsZSk6CisgICAgICAgICAgICAgICAgYnVpbGRfZmlsZSA9IHVpZC5yZWZlcnJlZF9v
YmplY3QKKyAgICAgICAgICAgICAgICBzZWxmLnZlcmlmeShub3QgYnVpbGRfZmlsZS5idWlsZF9w
aGFzZSwgIiVzIHJlZmVycyB0byBhICVzLCBidXQgdGhhdCB3YXMgYWxyZWFkeSBwcmV2aW91c2x5
IHJlZmVyZW5jZWQgYnkgJXMhIiAlIChidWlsZF9waGFzZSwgYnVpbGRfZmlsZSwgYnVpbGRfZmls
ZS5idWlsZF9waGFzZSkpCisgICAgICAgICAgICAgICAgYnVpbGRfZmlsZS5zZXRfYnVpbGRfcGhh
c2UoYnVpbGRfcGhhc2UpCisgICAgICAgICAgICAgICAgYnVpbGRfcGhhc2UuYWRkX2J1aWxkX2Zp
bGUoYnVpbGRfZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5l
cnJvcigiJXMgY29udGFpbnMgJ2ZpbGVzJyBlbnRyeSAlcyAtIFBCWEJ1aWxkRmlsZSBleHBlY3Rl
ZCEiICUgKGJ1aWxkX3BoYXNlLCB1aWQucmVmZXJyZWRfb2JqZWN0KSkKKworICAgIGRlZiBwb3N0
cHJvY2Vzc19idWlsZF9maWxlcyhzZWxmKToKKyAgICAgICAgZm9yIGJ1aWxkX2ZpbGUgaW4gc2Vs
Zi5wcm9qZWN0LmFsbF9idWlsZF9maWxlczoKKyAgICAgICAgICAgIHNlbGYucG9zdHByb2Nlc3Nf
YnVpbGRfZmlsZShidWlsZF9maWxlKQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX2J1aWxkX2ZpbGUo
c2VsZiwgYnVpbGRfZmlsZSk6CisgICAgICAgICMgbGluayBmaWxlIHJlZmVyZW5jZXMKKyAgICAg
ICAgc2VsZi52ZXJpZnkoJ2ZpbGVSZWYnIGluIGJ1aWxkX2ZpbGUsICIlcyBkb2VzIG5vdCBjb250
YWluIGEgJ2ZpbGVSZWYnIHByb3BlcnR5ISIgJSBidWlsZF9maWxlKQorICAgICAgICB1aWQgPSBi
dWlsZF9maWxlWydmaWxlUmVmJ10KKyAgICAgICAgc2VsZi52ZXJpZnkodWlkLnJlZmVycmVkX29i
amVjdCwgIiVzOiAnZmlsZVJlZicgcHJvcGVydHkgJXMgaXMgdW5rbm93biEiICUgKGJ1aWxkX2Zp
bGUsIHVpZCkpCisgICAgICAgIGZpbGVSZWYgPSB1aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAg
IHNlbGYudmVyaWZ5KGlzaW5zdGFuY2UoZmlsZVJlZiwgUEJYRmlsZVJlZmVyZW5jZSkgb3IgaXNp
bnN0YW5jZShmaWxlUmVmLCBQQlhWYXJpYW50R3JvdXApLCAiJXM6ICdmaWxlUmVmJyBwcm9wZXJ0
eSBwb2ludHMgdG8gJXMgLSBQQlhGaWxlUmVmZXJlbmNlIG9yIFBCWFZhcmlhbnRHcm91cCBleHBl
Y3RlZCEiICUgKGJ1aWxkX2ZpbGUsIGZpbGVSZWYpKQorICAgICAgICBidWlsZF9maWxlLnNldF9m
aWxlUmVmKGZpbGVSZWYpCisKKyAgICBkZWYgcG9zdHByb2Nlc3NfY29uZmlndXJhdGlvbl9saXN0
cyhzZWxmKToKKyAgICAgICAgZm9yIGNvbmZpZ3VyYXRpb25fbGlzdCBpbiBzZWxmLnByb2plY3Qu
YWxsX2NvbmZpZ3VyYXRpb25fbGlzdHM6CisgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2Nv
bmZpZ3VyYXRpb25fbGlzdChjb25maWd1cmF0aW9uX2xpc3QpCisKKyAgICBkZWYgcG9zdHByb2Nl
c3NfY29uZmlndXJhdGlvbl9saXN0KHNlbGYsIGNvbmZpZ3VyYXRpb25fbGlzdCk6CisgICAgICAg
IHNlbGYudmVyaWZ5KCdidWlsZENvbmZpZ3VyYXRpb25zJyBpbiBjb25maWd1cmF0aW9uX2xpc3Qs
ICIlcyBkb2VzIG5vdCBjb250YWluIGEgJ2J1aWxkQ29uZmlndXJhdGlvbnMnIHByb3BlcnR5ISIg
JSBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25zID0gY29u
ZmlndXJhdGlvbl9saXN0WydidWlsZENvbmZpZ3VyYXRpb25zJ10KKyAgICAgICAgZm9yIHVpZCBp
biBidWlsZF9jb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVp
ZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0
LCAiJXMgcmVmZXJzIHRvIGEgJ2J1aWxkQ29uZmlndXJhdGlvbnMnIGVudHJ5ICVzIHRoYXQgY291
bGQgbm90IGJlIGZvdW5kIHdpdGhpbiB0aGUgcHJvamVjdCEiICUgKGNvbmZpZ3VyYXRpb25fbGlz
dCwgdWlkKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwg
WENCdWlsZENvbmZpZ3VyYXRpb24pOgorICAgICAgICAgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRp
b24gPSB1aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnkobm90
IGJ1aWxkX2NvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvbl9saXN0LCAiJXMgcmVmZXJzIHRvIGEg
JXMsIGJ1dCB0aGF0IHdhcyBhbHJlYWR5IHByZXZpb3VzbHkgcmVmZXJlbmNlZCBieSAlcyEiICUg
KGNvbmZpZ3VyYXRpb25fbGlzdCwgYnVpbGRfY29uZmlndXJhdGlvbiwgYnVpbGRfY29uZmlndXJh
dGlvbi5jb25maWd1cmF0aW9uX2xpc3QpKQorICAgICAgICAgICAgICAgIGJ1aWxkX2NvbmZpZ3Vy
YXRpb24uc2V0X2NvbmZpZ3VyYXRpb25fbGlzdChjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAg
ICAgICAgICAgY29uZmlndXJhdGlvbl9saXN0LmFwcGVuZF9idWlsZF9jb25maWd1cmF0aW9uKGJ1
aWxkX2NvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYuZXJyb3IoIiVzIGNvbnRhaW5zICdidWlsZENvbmZpZ3VyYXRpb25zJyBlbnRyeSAlcyAtIFhD
QnVpbGRDb25maWd1cmF0aW9uIGV4cGVjdGVkISIgJSAoYnVpbGRfcGhhc2UsIHVpZC5yZWZlcnJl
ZF9vYmplY3QpKQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX3RhcmdldHMoc2VsZik6CisgICAgICAg
IGZvciB0YXJnZXQgaW4gc2VsZi5wcm9qZWN0LmFsbF90YXJnZXRzOgorICAgICAgICAgICAgc2Vs
Zi5wb3N0cHJvY2Vzc190YXJnZXQodGFyZ2V0KQorCisgICAgZGVmIHBvc3Rwcm9jZXNzX3Rhcmdl
dChzZWxmLCB0YXJnZXQpOgorICAgICAgICAjIGxpbmsgY29uZmlndXJhdGlvbiBsaXN0CisgICAg
ICAgIHNlbGYudmVyaWZ5KCdidWlsZENvbmZpZ3VyYXRpb25MaXN0JyBpbiB0YXJnZXQsICIlcyBk
b2VzIG5vdCBjb250YWluIGEgJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnIHByb3BlcnR5ISIgJSB0
YXJnZXQpCisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQgPSB0YXJnZXRbJ2J1
aWxkQ29uZmlndXJhdGlvbkxpc3QnXQorICAgICAgICBzZWxmLnZlcmlmeShidWlsZF9jb25maWd1
cmF0aW9uX2xpc3RfdWlkLnJlZmVycmVkX29iamVjdCwgIiclczogJ2J1aWxkQ29uZmlndXJhdGlv
bkxpc3QnIHByb3BlcnR5ICVzIGlzIHVua25vd24hIiAlICh0YXJnZXQsIGJ1aWxkX2NvbmZpZ3Vy
YXRpb25fbGlzdF91aWQpKQorICAgICAgICBzZWxmLnZlcmlmeShpc2luc3RhbmNlKGJ1aWxkX2Nv
bmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0
KSwgIiVzOiAnZmlsZVJlZicgcHJvcGVydHkgaXMgbm90IGEgWENDb25maWd1cmF0aW9uTGlzdCwg
YnV0IGEgJXMhIiAlICh0YXJnZXQsIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJy
ZWRfb2JqZWN0KSkKKyAgICAgICAgdGFyZ2V0LnNldF9jb25maWd1cmF0aW9uX2xpc3QoYnVpbGRf
Y29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmplY3QpCisgICAgICAgIGJ1aWxkX2Nv
bmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LnNldF9yZWZlcnJlcih0YXJnZXQp
CisgICAgICAgICMgbGluayBidWlsZCBwaGFzZXMKKyAgICAgICAgYnVpbGRfcGhhc2VzID0gc2Vs
Zi5lbnN1cmVfcHJvcGVydHkodGFyZ2V0LCAnYnVpbGRQaGFzZXMnLCBYY29kZVVJRExpc3QpCisg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX3BoYXNlcywgWGNvZGVVSURMaXN0KQorICAg
ICAgICBmb3IgdWlkIGluIGJ1aWxkX3BoYXNlczoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRf
b2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2J1aWxkUGhhc2VzJyBlbnRyeSAlcyB0aGF0IGNvdWxk
IG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3QhIiAlICh0YXJnZXQsIHVpZCkpCisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBCWEJ1aWxkUGhhc2Up
OgorICAgICAgICAgICAgICAgIGJ1aWxkX3BoYXNlID0gdWlkLnJlZmVycmVkX29iamVjdAorICAg
ICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG5vdCBidWlsZF9waGFzZS50YXJnZXQsICIlcyByZWZl
cnMgdG8gYSAlcywgYnV0IHRoYXQgd2FzIGFscmVhZHkgcHJldmlvdXNseSByZWZlcmVuY2VkIGJ5
ICVzISIgJSAodGFyZ2V0LCBidWlsZF9waGFzZSwgYnVpbGRfcGhhc2UudGFyZ2V0KSkKKyAgICAg
ICAgICAgICAgICBidWlsZF9waGFzZS5zZXRfdGFyZ2V0KHRhcmdldCkKKyAgICAgICAgICAgICAg
ICB0YXJnZXQuYXBwZW5kX2J1aWxkX3BoYXNlKGJ1aWxkX3BoYXNlKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCIlcyBjb250YWlucyAnYnVpbGRQaGFzZXMn
IGVudHJ5ICVzIC0gUEJYQnVpbGRQaGFzZSBleHBlY3RlZCEiICUgKHRhcmdldCwgdWlkLnJlZmVy
cmVkX29iamVjdCkpCisKKyAgICBkZWYgcG9zdHByb2Nlc3NfcHJvamVjdChzZWxmKToKKyAgICAg
ICAgcHJvamVjdCA9IHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdAorICAgICAgICAjIGxpbmsg
Y29uZmlndXJhdG9uIGxpc3QKKyAgICAgICAgc2VsZi52ZXJpZnkoJ2J1aWxkQ29uZmlndXJhdGlv
bkxpc3QnIGluIHByb2plY3QsICIlcyBkb2VzIG5vdCBjb250YWluIGEgJ2J1aWxkQ29uZmlndXJh
dGlvbkxpc3QnIHByb3BlcnR5ISIgJSBwcm9qZWN0KQorICAgICAgICBidWlsZF9jb25maWd1cmF0
aW9uX2xpc3RfdWlkID0gcHJvamVjdFsnYnVpbGRDb25maWd1cmF0aW9uTGlzdCddCisgICAgICAg
IHNlbGYudmVyaWZ5KGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0
LCAiJyVzOiAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgcHJvcGVydHkgJXMgaXMgdW5rbm93biEi
ICUgKHByb2plY3QsIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQpKQorICAgICAgICBzZWxm
LnZlcmlmeShpc2luc3RhbmNlKGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRf
b2JqZWN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0KSwgIiVzOiAnZmlsZVJlZicgcHJvcGVydHkgaXMg
bm90IGEgWENDb25maWd1cmF0aW9uTGlzdCwgYnV0IGEgJXMhIiAlIChwcm9qZWN0LCBidWlsZF9j
b25maWd1cmF0aW9uX2xpc3RfdWlkLnJlZmVycmVkX29iamVjdCkpCisgICAgICAgIHByb2plY3Qu
c2V0X2NvbmZpZ3VyYXRpb25fbGlzdChidWlsZF9jb25maWd1cmF0aW9uX2xpc3RfdWlkLnJlZmVy
cmVkX29iamVjdCkKKyAgICAgICAgYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJl
ZF9vYmplY3Quc2V0X3JlZmVycmVyKHByb2plY3QpCisgICAgICAgICMgbGluayB0YXJnZXRzCisg
ICAgICAgIHRhcmdldHMgPSBzZWxmLmVuc3VyZV9wcm9wZXJ0eShwcm9qZWN0LCAndGFyZ2V0cycs
IFhjb2RlVUlETGlzdCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0cywgWGNvZGVV
SURMaXN0KQorICAgICAgICBmb3IgdWlkIGluIHRhcmdldHM6CisgICAgICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZSh1aWQsIFhjb2RlVUlEKQorICAgICAgICAgICAgc2VsZi52ZXJpZnkodWlkLnJl
ZmVycmVkX29iamVjdCwgIiVzIHJlZmVycyB0byBhICd0YXJnZXQnIGVudHJ5ICVzIHRoYXQgY291
bGQgbm90IGJlIGZvdW5kIHdpdGhpbiB0aGUgcHJvamVjdCEiICUgKHByb2plY3QsIHVpZCkpCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBCWFRhcmdldCk6
CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdWlkLnJlZmVycmVkX29iamVjdAorICAgICAgICAg
ICAgICAgIHNlbGYudmVyaWZ5KG5vdCB0YXJnZXQucHJvamVjdCwgIiVzIHJlZmVycyB0byBhICVz
LCBidXQgdGhhdCB3YXMgYWxyZWFkeSBwcmV2aW91c2x5IHJlZmVyZW5jZWQgYnkgJXMhIiAlIChw
cm9qZWN0LCB0YXJnZXQsIHRhcmdldC5wcm9qZWN0KSkKKyAgICAgICAgICAgICAgICB0YXJnZXQu
c2V0X3Byb2plY3QocHJvamVjdCkKKyAgICAgICAgICAgICAgICBwcm9qZWN0LmFwcGVuZF90YXJn
ZXQodGFyZ2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9y
KCIlcyBjb250YWlucyAndGFyZ2V0cycgZW50cnkgJXMgLSBQQlhUYXJnZXQgZXhwZWN0ZWQhIiAl
IChwcm9qZWN0LCB1aWQucmVmZXJyZWRfb2JqZWN0KSkKKworICAgIGRlZiB2ZXJpZnlfYWxsX29i
amVjdHMoc2VsZik6CisgICAgICAgIGZvciBvYmplY3QgaW4gc2VsZi5wcm9qZWN0LmFsbF9vYmpl
Y3RzOgorICAgICAgICAgICAgIyBUT0RPOiAiaXMgbm90IHZhbGlkISIgaXMgbm90IHZlcnkgaGVs
cGZ1bCAtIGltcHJvdmUgb3V0cHV0CisgICAgICAgICAgICBzZWxmLnZlcmlmeShvYmplY3QuaXNf
dmFsaWQoKSwgIiVzIGlzIG5vdCB2YWxpZCEiICUgb2JqZWN0KQorCisKKyMgPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgWGNvZGVQcm9qZWN0V3Jp
dGVyKFByb2plY3RXcml0ZXIpOgorICAgICIiIlNlcmlhbGl6ZXIgKHdyaXRlcikgZm9yIFhjb2Rl
IHByb2plY3QgZmlsZXMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVz
eXN0ZW09Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb2plY3QsIFhjb2RlUHJv
amVjdCkKKyAgICAgICAgUHJvamVjdFdyaXRlci5fX2luaXRfXyhzZWxmLCBwcm9qZWN0LCBmaWxl
c3lzdGVtKQorICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisgICAgICAgIHNlbGYuZGlyZWN0b3J5
X3RvX3NvdXJjZVRyZWUgPSB7CisgICAgICAgICAgICAgc2VsZi5wcm9qZWN0LnNvdXJjZV9yb290
X2RpcmVjdG9yeSAgICAgICAgICAgICA6ICdTT1VSQ0VfUk9PVCcsCisgICAgICAgICAgICAgc2Vs
Zi5jb21tb24ucm9vdF9kaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICA6ICciPGFic29sdXRl
PiInLAorICAgICAgICAgICAgIHNlbGYuY29tbW9uLmJ1aWxkX2RpcmVjdG9yeSAgICAgICAgICAg
ICAgICAgICAgOiAnQlVJTFRfUFJPRFVDVFNfRElSJywKKyAgICAgICAgICAgICBzZWxmLmNvbW1v
bi5ERVZFTE9QRVJfRElSX2RpcmVjdG9yeSAgICAgICAgICAgIDogJ0RFVkVMT1BFUl9ESVInLAor
ICAgICAgICAgICAgIHNlbGYuY29tbW9uLlNES1JPT1RfZGlyZWN0b3J5ICAgICAgICAgICAgICAg
ICAgOiAnU0RLUk9PVCcsCisgICAgICAgICAgICAgc2VsZi5jb21tb24uQ09ORklHVVJBVElPTl9U
RU1QX0RJUl9kaXJlY3RvcnkgICA6ICdDT05GSUdVUkFUSU9OX1RFTVBfRElSJywKKyAgICAgICAg
fQorCisgICAgIyAtLS0gd3JpdGluZyAtLS0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
cHJvcGVydGllc19zb3J0X2tleShwcm9wZXJ0eV9uYW1lKToKKyAgICAgICAgJycnIFNvcnQgJ2lz
YScgYXMgZmlyc3QgcHJvcGVydHkgdG8gYmUgb3V0cHV0LiAnJycKKyAgICAgICAgaWYgcHJvcGVy
dHlfbmFtZSA9PSAnaXNhJzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4g
cHJvcGVydHlfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhbHBoYWJldGljYWxf
VUlEX3NvcnRfa2V5KHVpZCk6CisgICAgICAgIGFzc2VydCB1aWQucmVmZXJyZWRfb2JqZWN0Cisg
ICAgICAgIG9iamVjdCA9IHVpZC5yZWZlcnJlZF9vYmplY3QKKyAgICAgICAgY29tbWVudCA9IG9i
amVjdC5jb21tZW50KCkubG93ZXIoKQorICAgICAgICBhc3NlcnQgY29tbWVudCwgIk9iamVjdCAl
cyBnZW5lcmF0ZXMgbm8gY29tbWVudCEiICUgdWlkLnN0cmluZworICAgICAgICAnJydTb3J0IGdy
b3VwcyBiZWZvcmUgZmlsZXMsIHNvcnQgYWNjb3JkaW5nIHRvIG5hbWUgKGNvbW1lbnQpIHdpdGhp
biBncm91cHMvZmlsZXMuJycnCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0LCBQQlhHcm91
cCk6CisgICAgICAgICAgICByZXR1cm4gJ0EnICsgY29tbWVudAorICAgICAgICBpZiBpc2luc3Rh
bmNlKG9iamVjdCwgUEJYVmFyaWFudEdyb3VwKToKKyAgICAgICAgICAgIHJldHVybiAnRicgKyBj
b21tZW50CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0LCBQQlhCdWlsZEZpbGUpOgorICAg
ICAgICAgICAgcmV0dXJuICdGJyArIGNvbW1lbnQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmpl
Y3QsIFBCWEZpbGVSZWZlcmVuY2UpOgorICAgICAgICAgICAgcmV0dXJuICdGJyArIGNvbW1lbnQK
KyAgICAgICAgYXNzZXJ0IEZhbHNlCisgICAgICAgIHJldHVybiAnWicgKyBjb21tZW50ICsgdWlk
CisKKyAgICBkZWYgd3JpdGVfdWlkX2FuZF9jb21tZW50KHNlbGYsIHVpZCk6CisgICAgICAgIHNl
bGYuZmlsZS53cml0ZSh1aWQuc3RyaW5nKQorICAgICAgICBjb21tZW50ID0gdWlkLnJlZmVycmVk
X29iamVjdC5jb21tZW50KCkKKyAgICAgICAgaWYgY29tbWVudDoKKyAgICAgICAgICAgIHNlbGYu
ZmlsZS53cml0ZSgiIC8qICIgKyBjb21tZW50ICsgIiAqLyIpCisKKyAgICBkZWYgd3JpdGVfdmFs
dWUoc2VsZiwgdmFsdWUsIGluZGVudCwgc2luZ2xlX2xpbmUpOgorICAgICAgICBpZiBpc2luc3Rh
bmNlKHZhbHVlLCBYY29kZVVJRCk6CisgICAgICAgICAgICBzZWxmLndyaXRlX3VpZF9hbmRfY29t
bWVudCh2YWx1ZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBYY29kZVF1b3RlZFN0
cmluZyk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoJyInICsgdmFsdWUgKyAnIicpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBz
ZWxmLmZpbGUud3JpdGUodmFsdWUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlz
dCk6CisgICAgICAgICAgICBpZiBzaW5nbGVfbGluZToKKyAgICAgICAgICAgICAgICBzZWxmLndy
aXRlX2xpc3Rfc2luZ2xlX2xpbmUodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNlbGYud3JpdGVfbGlzdF9tdWx0aV9saW5lKHZhbHVlLCBpbmRlbnQpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBpZiBzaW5nbGVfbGlu
ZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX29iamVjdF9zaW5nbGVfbGluZSh2YWx1ZSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9vYmplY3RfbXVs
dGlfbGluZSh2YWx1ZSwgaW5kZW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5l
cnJvcigiSW50ZXJuYWwgRXJyb3IgLSB1bmtub3duIHR5cGUgJXMgZm9yIHZhbHVlICclcycgZW5j
b3VudGVyZWQhIiAlIChzdHIodHlwZSh2YWx1ZSkpLCB2YWx1ZSkpCisgICAgICAgICAgICBhc3Nl
cnQgRmFsc2UKKworICAgIGRlZiB3cml0ZV9saXN0X3NpbmdsZV9saW5lKHNlbGYsIGxpc3QpOgor
ICAgICAgICBzZWxmLmZpbGUud3JpdGUoIigiKQorICAgICAgICBmb3IgdmFsdWUgaW4gbGlzdDoK
KyAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUsICcnLCBUcnVlKQorICAgICAgICAg
ICAgc2VsZi5maWxlLndyaXRlKCIsICIpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiKSIpCisK
KyAgICBkZWYgd3JpdGVfbGlzdF9tdWx0aV9saW5lKHNlbGYsIGxpc3QsIGluZGVudCk6CisgICAg
ICAgIHNlbGYuZmlsZS53cml0ZSgiKFxuIikKKyAgICAgICAgc3ViX2luZGVudCA9IGluZGVudCAr
ICdcdCcKKyAgICAgICAgZm9yIHZhbHVlIGluIGxpc3Q6CisgICAgICAgICAgICBzZWxmLmZpbGUu
d3JpdGUoc3ViX2luZGVudCkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUsIHN1
Yl9pbmRlbnQsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCIsXG4iKQorICAg
ICAgICBzZWxmLmZpbGUud3JpdGUoaW5kZW50KQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiki
KQorCisgICAgZGVmIHdyaXRlX29iamVjdF9tdWx0aV9saW5lKHNlbGYsIG9iaiwgaW5kZW50KToK
KyAgICAgICAgc2VsZi5maWxlLndyaXRlKCJ7XG4iKQorICAgICAgICBzdWJfaW5kZW50ID0gaW5k
ZW50ICsgIlx0IgorICAgICAgICBmb3IgKGtleSwgdmFsdWUpIGluIHNvcnRlZChvYmouaXRlbXMo
KSwga2V5PWxhbWJkYSAoaywgdik6IFhjb2RlUHJvamVjdFdyaXRlci5wcm9wZXJ0aWVzX3NvcnRf
a2V5KGspKToKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzdWJfaW5kZW50KQorICAgICAg
ICAgICAgc2VsZi5maWxlLndyaXRlKGtleSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgi
ID0gIikKKyAgICAgICAgICAgIGlmIGtleSA9PSAnY2hpbGRyZW4nIG9yIGtleSA9PSAnZmlsZXMn
OgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBYY29kZVVJRExpc3Qp
CisgICAgICAgICAgICAgICAgaWYgb2JqIGlzIG5vdCBzZWxmLnByb2plY3QubWFpbl9ncm91cDoK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUuc29ydChrZXk9WGNvZGVQcm9qZWN0V3JpdGVyLmFs
cGhhYmV0aWNhbF9VSURfc29ydF9rZXkpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9saXN0
X211bHRpX2xpbmUodmFsdWUsIHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBlbGlmIGtleSA9PSAn
cmVtb3RlR2xvYmFsSURTdHJpbmcnOgorICAgICAgICAgICAgICAgICMgRm9yIHNvbWUgcmVhc29u
ICdyZW1vdGVHbG9iYWxJRFN0cmluZycgd3JpdGVzIHRoZSBVSUQgd2l0aG91dCBjb21tZW50Lgor
ICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBYY29kZVVJRCkKKyAgICAg
ICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUodmFsdWUuc3RyaW5nKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgdmFsdWUgaXMgbm90IE5vbmUsICInTm9uZScgdmFs
dWUgZm9yIHByb3BlcnR5ICclcycgaW4gb2JqZWN0ICVzISIgJSAoa2V5LCBvYmoudWlkLnN0cmlu
ZykKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlLCBzdWJfaW5kZW50LCBG
YWxzZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiO1xuIikKKyAgICAgICAgc2VsZi5m
aWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKCJ9IikKKworICAgIGRl
ZiB3cml0ZV9vYmplY3Rfc2luZ2xlX2xpbmUoc2VsZiwgb2JqKToKKyAgICAgICAgc2VsZi5maWxl
LndyaXRlKCJ7IikKKyAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzb3J0ZWQob2JqLml0ZW1z
KCksIGtleT1sYW1iZGEgKGssIHYpOiBYY29kZVByb2plY3RXcml0ZXIucHJvcGVydGllc19zb3J0
X2tleShrKSk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoa2V5KQorICAgICAgICAgICAg
c2VsZi5maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1
ZSwgJycsIFRydWUpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIjsgIikKKyAgICAgICAg
c2VsZi5maWxlLndyaXRlKCJ9IikKKworICAgIGRlZiB3cml0ZV9vYmplY3RzKHNlbGYpOgorICAg
ICAgICBzZWxmLmZpbGUud3JpdGUoIntcbiIpCisgICAgICAgIGZvciAoaXNhLCBvYmplY3Rfc2V0
KSBpbiBzb3J0ZWQoc2VsZi5wcm9qZWN0LmlzYV90b19vYmplY3RzLml0ZW1zKCksIGtleT1vcGVy
YXRvci5pdGVtZ2V0dGVyKDApKToKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiXG4vKiBC
ZWdpbiAiKQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGlzYSkKKyAgICAgICAgICAgIHNl
bGYuZmlsZS53cml0ZSgiIHNlY3Rpb24gKi9cbiIpCisgICAgICAgICAgICBzaW5nbGVfbGluZSA9
IGlzYSA9PSAnUEJYQnVpbGRGaWxlJyBvciBpc2EgPT0gJ1BCWEZpbGVSZWZlcmVuY2UnCisgICAg
ICAgICAgICBmb3Igb2JqIGluIHNvcnRlZChvYmplY3Rfc2V0LCBrZXk9b3BlcmF0b3IuYXR0cmdl
dHRlcigndWlkJykpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiXHRcdCIpCisg
ICAgICAgICAgICAgICAgc2VsZi53cml0ZV91aWRfYW5kX2NvbW1lbnQob2JqLnVpZCkKKyAgICAg
ICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICAgICAgaWYgc2lu
Z2xlX2xpbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfb2JqZWN0X3NpbmdsZV9s
aW5lKG9iaikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxm
LndyaXRlX29iamVjdF9tdWx0aV9saW5lKG9iaiwgIlx0XHQiKQorICAgICAgICAgICAgICAgIHNl
bGYuZmlsZS53cml0ZSgiO1xuIikKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLyogRW5k
ICIpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoaXNhKQorICAgICAgICAgICAgc2VsZi5m
aWxlLndyaXRlKCIgc2VjdGlvbiAqL1xuIikKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKCJcdH0i
KQorCisgICAgZGVmIHdyaXRlX21haW5fb2JqZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUu
d3JpdGUoIntcbiIpCisgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKHNlbGYucHJvamVjdC5tYWlu
X29iamVjdC5rZXlzKCkpOgorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCJcdCIpCisgICAg
ICAgICAgICBzZWxmLmZpbGUud3JpdGUoa2V5KQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRl
KCIgPSAiKQorICAgICAgICAgICAgaWYga2V5ID09ICdvYmplY3RzJzoKKyAgICAgICAgICAgICAg
ICBzZWxmLndyaXRlX29iamVjdHMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBzZWxmLndyaXRlX3ZhbHVlKHNlbGYucHJvamVjdC5tYWluX29iamVjdFtrZXldLCAiXHQiLCBG
YWxzZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiO1xuIikKKyAgICAgICAgc2VsZi5m
aWxlLndyaXRlKCJ9XG4iKQorCisgICAgZGVmIHdyaXRlX3Byb2plY3RfZmlsZShzZWxmLCBwYXRo
KToKKyAgICAgICAgc2VsZi5pbmZvKCJXcml0aW5nIHByb2plY3QgZmlsZSB0byAlcyIgJSBwYXRo
KQorICAgICAgICB3aXRoIHNlbGYuZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGlu
ZyhwYXRoKSBhcyBzZWxmLmZpbGU6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIi8vICEk
KlVURjgqJCFcbiIpCisgICAgICAgICAgICBzZWxmLndyaXRlX21haW5fb2JqZWN0KCkKKworCisj
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFhj
b2RlUHJvamVjdChHcm91cFByb2plY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcg
YWxsIGRhdGEgc3RydWN0dXJlcyBkZXNjcmliaW5nIGFuIFhjb2RlIHByb2plY3QgZmlsZS4KKyAg
ICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbW9uLCBmaWxlLCBzb3VyY2Vfcm9vdF9k
aXJlY3RvcnksIHByb2plY3RfbmFtZT1Ob25lLCB0YXJnZXRfbmFtZT1Ob25lKToKKyAgICAgICAg
YXNzZXJ0IGNvbW1vbgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb21tb24sIENvbW1vbklu
Zm8pCisgICAgICAgIGFzc2VydCBmaWxlCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUs
IENvbW1vbkZpbGUpCisgICAgICAgIGFzc2VydCBzb3VyY2Vfcm9vdF9kaXJlY3RvcnkKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc291cmNlX3Jvb3RfZGlyZWN0b3J5LCBDb21tb25EaXJlY3Rv
cnkpCisgICAgICAgIEdyb3VwUHJvamVjdC5fX2luaXRfXyhzZWxmLCBjb21tb24sIGZpbGUsIHBy
b2plY3RfbmFtZSkKKyAgICAgICAgIyBkaXJlY3RvcnkgcmVmZXJyZWQgYnkgU09VUkNFX1JPT1QK
KyAgICAgICAgc2VsZi5zb3VyY2Vfcm9vdF9kaXJlY3RvcnkgPSBzb3VyY2Vfcm9vdF9kaXJlY3Rv
cnkKKyAgICAgICAgIyBYY29kZSBwcm9qZWN0cyBjYW4gY29udGFpbiBtdWx0aXBsZSB0YXJnZXRz
LiBEZWZpbmUgdGhlIHRhcmdldCBuYW1lIHdlJ2xsIGJlIG1hbmlwdWxhdGluZy4KKyAgICAgICAg
c2VsZi50YXJnZXRfbmFtZSA9IHRhcmdldF9uYW1lIG9yIHByb2plY3RfbmFtZQorICAgICAgICAj
IG1haW4gKG91dGVyKSBvYmplY3QKKyAgICAgICAgc2VsZi5tYWluX29iamVjdCA9IHt9CisgICAg
ICAgICMgcHJvamVjdCdzIFBCWFByb2plY3Qgb2JqZWN0CisgICAgICAgIHNlbGYucHJvamVjdF9v
YmplY3QgPSBOb25lCisgICAgICAgICMgbWFwIHVpZCBzdHJpbmcgLT4gWGNvZGVVSUQgb2JqZWN0
CisgICAgICAgIHNlbGYudWlkX3N0cmluZ190b19VSUQgPSB7fQorICAgICAgICAjIG1hcCAnaXNh
JyAoZS5nLiwgJ1BCWEdyb3VwJykgdG8gYSBzZXQgb2YgUEJYT2JqZWN0LXMgdGhhdCBhcmUgb2Yg
dGhhdCB0eXBlCisgICAgICAgIHNlbGYuaXNhX3RvX29iamVjdHMgPSB7fQorICAgICAgICAjIHNl
dCBvZiBhbGwgb2JqZWN0cworICAgICAgICBzZWxmLmFsbF9vYmplY3RzID0gc2V0KCkKKyAgICAg
ICAgIyBhbGwgUEJYRmlsZVJlZmVyZW5jZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX2ZpbGVf
cmVmZXJlbmNlcyA9IHNldCgpCisgICAgICAgICMgYWxsIFBCWFZhcmlhbnRHcm91cCBvYmplY3Rz
CisgICAgICAgIHNlbGYuYWxsX3ZhcmlhbnRfZ3JvdXBzID0gc2V0KCkKKyAgICAgICAgIyBhbGwg
UEJYQnVpbGRQaGFzZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX2J1aWxkX3BoYXNlcyA9IHNl
dCgpCisgICAgICAgICMgYWxsIFBCWEJ1aWxkRmlsZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxs
X2J1aWxkX2ZpbGVzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgWENCdWlsZENvbmZpZ3VyYXRpb24g
b2JqZWN0cworICAgICAgICBzZWxmLmFsbF9idWlsZF9jb25maWd1cmF0aW9ucyA9IHNldCgpCisg
ICAgICAgICMgYWxsIFhDQ29uZmlndXJhdGlvbkxpc3Qgb2JqZWN0cworICAgICAgICBzZWxmLmFs
bF9jb25maWd1cmF0aW9uX2xpc3RzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgUEJYVGFyZ2V0IG9i
amVjdHMKKyAgICAgICAgc2VsZi5hbGxfdGFyZ2V0cyA9IHNldCgpCisKKyAgICAjIC0tLSBtYW5p
cHVsYXRpb24gLS0tCisKKyAgICBkZWYgZW5zdXJlX1VJRChzZWxmLCB1aWRfc3RyaW5nKToKKyAg
ICAgICAgYXNzZXJ0IFhjb2RlVUlELmlzX3ZhbGlkX1VJRCh1aWRfc3RyaW5nKQorICAgICAgICBy
ZXR1cm4gc2VsZi51aWRfc3RyaW5nX3RvX1VJRC5zZXRkZWZhdWx0KHVpZF9zdHJpbmcsIFhjb2Rl
VUlEKHVpZF9zdHJpbmcpKQorCisgICAgZGVmIF9hZGRfb2JqZWN0KHNlbGYsIG9iamVjdCk6Cisg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9iamVjdCwgUEJYT2JqZWN0KQorICAgICAgICBhc3Nl
cnQgb2JqZWN0LnVpZCAKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2JqZWN0LnVpZCwgWGNv
ZGVVSUQpCisgICAgICAgIGFzc2VydCBvYmplY3QudWlkLnN0cmluZyBpbiBzZWxmLnVpZF9zdHJp
bmdfdG9fVUlECisgICAgICAgIGFzc2VydCBvYmplY3QudWlkLnJlZmVycmVkX29iamVjdCBpcyBv
YmplY3QKKyAgICAgICAgYXNzZXJ0IG9iamVjdC5pc2EKKyAgICAgICAgYXNzZXJ0IG9iamVjdCBu
b3QgaW4gc2VsZi5hbGxfb2JqZWN0cworICAgICAgICBzZWxmLmFsbF9vYmplY3RzLmFkZChvYmpl
Y3QpCisgICAgICAgIHNlbGYuaXNhX3RvX29iamVjdHMuc2V0ZGVmYXVsdChvYmplY3QuaXNhLCBz
ZXQoKSkuYWRkKG9iamVjdCkKKworICAgIGRlZiBzZXRfUEJYUHJvamVjdChzZWxmLCBwcm9qZWN0
X29iamVjdCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb2plY3Rfb2JqZWN0LCBQQlhQ
cm9qZWN0KQorICAgICAgICBhc3NlcnQgbm90IHNlbGYucHJvamVjdF9vYmplY3QKKyAgICAgICAg
c2VsZi5wcm9qZWN0X29iamVjdCA9IHByb2plY3Rfb2JqZWN0CisgICAgICAgIHNlbGYuX2FkZF9v
YmplY3QocHJvamVjdF9vYmplY3QpCisKKyAgICBkZWYgYWRkX1BCWFRhcmdldChzZWxmLCB0YXJn
ZXQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXJnZXQsIFBCWFRhcmdldCkKKyAgICAg
ICAgYXNzZXJ0IHRhcmdldCBub3QgaW4gc2VsZi5hbGxfdGFyZ2V0cworICAgICAgICBzZWxmLmFs
bF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgIHNlbGYuX2FkZF9vYmplY3QodGFyZ2V0KQor
CisgICAgZGVmIGFkZF9QQlhCdWlsZFBoYXNlKHNlbGYsIGJ1aWxkX3BoYXNlKToKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfcGhhc2UsIFBCWEJ1aWxkUGhhc2UpCisgICAgICAgIGFz
c2VydCBidWlsZF9waGFzZSBub3QgaW4gc2VsZi5hbGxfYnVpbGRfcGhhc2VzCisgICAgICAgIHNl
bGYuYWxsX2J1aWxkX3BoYXNlcy5hZGQoYnVpbGRfcGhhc2UpCisgICAgICAgIHNlbGYuX2FkZF9v
YmplY3QoYnVpbGRfcGhhc2UpCisKKyAgICBkZWYgYWRkX1BCWEdyb3VwKHNlbGYsIGdyb3VwKToK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JvdXAsIFBCWEdyb3VwKQorICAgICAgICBzZWxm
LmFkZF9ncm91cChncm91cCkKKyAgICAgICAgc2VsZi5fYWRkX29iamVjdChncm91cCkKKworICAg
IGRlZiBhZGRfUEJYVmFyaWFudEdyb3VwKHNlbGYsIHZhcmlhbnRfZ3JvdXApOgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZSh2YXJpYW50X2dyb3VwLCBQQlhWYXJpYW50R3JvdXApCisgICAgICAg
IHNlbGYuYWxsX3ZhcmlhbnRfZ3JvdXBzLmFkZCh2YXJpYW50X2dyb3VwKQorICAgICAgICBzZWxm
Ll9hZGRfb2JqZWN0KHZhcmlhbnRfZ3JvdXApCisKKyAgICBkZWYgYWRkX1BCWEJ1aWxkRmlsZShz
ZWxmLCBidWlsZF9maWxlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfZmlsZSwg
UEJYQnVpbGRGaWxlKQorICAgICAgICBhc3NlcnQgYnVpbGRfZmlsZSBub3QgaW4gc2VsZi5hbGxf
YnVpbGRfZmlsZXMKKyAgICAgICAgc2VsZi5hbGxfYnVpbGRfZmlsZXMuYWRkKGJ1aWxkX2ZpbGUp
CisgICAgICAgIHNlbGYuX2FkZF9vYmplY3QoYnVpbGRfZmlsZSkKKworICAgIGRlZiBhZGRfUEJY
RmlsZVJlZmVyZW5jZShzZWxmLCBmaWxlX3JlZmVyZW5jZSk6CisgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKGZpbGVfcmVmZXJlbmNlLCBQQlhGaWxlUmVmZXJlbmNlKQorICAgICAgICBhc3NlcnQg
ZmlsZV9yZWZlcmVuY2Ugbm90IGluIHNlbGYuYWxsX2ZpbGVfcmVmZXJlbmNlcworICAgICAgICBz
ZWxmLmFsbF9maWxlX3JlZmVyZW5jZXMuYWRkKGZpbGVfcmVmZXJlbmNlKQorICAgICAgICBzZWxm
Ll9hZGRfb2JqZWN0KGZpbGVfcmVmZXJlbmNlKQorCisgICAgZGVmIGFkZF9YQ0J1aWxkQ29uZmln
dXJhdGlvbihzZWxmLCBidWlsZF9jb25maWd1cmF0aW9uKToKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UoYnVpbGRfY29uZmlndXJhdGlvbiwgWENCdWlsZENvbmZpZ3VyYXRpb24pCisgICAgICAg
IHNlbGYuYWxsX2J1aWxkX2NvbmZpZ3VyYXRpb25zLmFkZChidWlsZF9jb25maWd1cmF0aW9uKQor
ICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KGJ1aWxkX2NvbmZpZ3VyYXRpb24pCisKKyAgICBkZWYg
YWRkX1hDQ29uZmlndXJhdGlvbkxpc3Qoc2VsZiwgY29uZmlndXJhdGlvbl9saXN0KToKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmlndXJhdGlvbl9saXN0LCBYQ0NvbmZpZ3VyYXRpb25M
aXN0KQorICAgICAgICBzZWxmLmFsbF9jb25maWd1cmF0aW9uX2xpc3RzLmFkZChjb25maWd1cmF0
aW9uX2xpc3QpCisgICAgICAgIHNlbGYuX2FkZF9vYmplY3QoY29uZmlndXJhdGlvbl9saXN0KQor
CisgICAgZGVmIGFkZF9QQlhBcmJpdHJhcnlPYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAgICAg
c2VsZi5fYWRkX29iamVjdChvYmplY3QpCisKKyAgICBkZWYgY3JlYXRlX1BCWFByb2plY3Qoc2Vs
ZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUpOgorICAgICAg
ICBwcm9qZWN0ID0gUEJYUHJvamVjdCh1aWQsIGlzYSwgc2VsZiwgbmFtZSwgY29uZmlndXJhdGlv
bl9saXN0KQorICAgICAgICBzZWxmLnNldF9QQlhQcm9qZWN0KHByb2plY3QpCisgICAgICAgIHJl
dHVybiBwcm9qZWN0CisKKyAgICBkZWYgY3JlYXRlX1BCWFRhcmdldChzZWxmLCB1aWQsIGlzYSwg
bmFtZT1Ob25lLCBwcm9qZWN0PU5vbmUsIGNvbmZpZ3VyYXRpb25fbGlzdD1Ob25lKToKKyAgICAg
ICAgdGFyZ2V0ID0gUEJYVGFyZ2V0KHVpZCwgaXNhLCBuYW1lLCBwcm9qZWN0LCBjb25maWd1cmF0
aW9uX2xpc3QpCisgICAgICAgIHNlbGYuYWRkX1BCWFRhcmdldCh0YXJnZXQpCisgICAgICAgIHJl
dHVybiB0YXJnZXQKKworICAgIGRlZiBjcmVhdGVfUEJYQnVpbGRQaGFzZShzZWxmLCB1aWQsIGlz
YSwgbmFtZT1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGJ1aWxkX3BoYXNlID0gUEJYQnVp
bGRQaGFzZSh1aWQsIGlzYSwgbmFtZSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFkZF9QQlhCdWls
ZFBoYXNlKGJ1aWxkX3BoYXNlKQorICAgICAgICByZXR1cm4gYnVpbGRfcGhhc2UKKworICAgIGRl
ZiBjcmVhdGVfUEJYR3JvdXAoc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgcGFyZW50X2dyb3Vw
PU5vbmUsIGRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgZ3JvdXAgPSBQQlhHcm91cCh1aWQsIGlz
YSwgbmFtZSwgcGFyZW50X2dyb3VwLCBkaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYWRkX1BCWEdy
b3VwKGdyb3VwKQorICAgICAgICByZXR1cm4gZ3JvdXAKKworICAgIGRlZiBjcmVhdGVfUEJYVmFy
aWFudEdyb3VwKHNlbGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIHBhcmVudF9ncm91cD1Ob25lLCBk
aXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgIHZhcmlhbnRfZ3JvdXAgPSBQQlhWYXJpYW50R3JvdXAo
dWlkLCBpc2EsIG5hbWUsIHBhcmVudF9ncm91cCwgZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFk
ZF9QQlhWYXJpYW50R3JvdXAodmFyaWFudF9ncm91cCkKKyAgICAgICAgcmV0dXJuIHZhcmlhbnRf
Z3JvdXAKKworICAgIGRlZiBjcmVhdGVfUEJYQnVpbGRGaWxlKHNlbGYsIHVpZCwgaXNhLCBuYW1l
PU5vbmUsIGZpbGVSZWY9Tm9uZSwgYnVpbGRfcGhhc2U9Tm9uZSk6CisgICAgICAgIGJ1aWxkX2Zp
bGUgPSBQQlhCdWlsZEZpbGUodWlkLCBpc2EsIG5hbWUsIGZpbGVSZWYsIGJ1aWxkX3BoYXNlKQor
ICAgICAgICBzZWxmLmFkZF9QQlhCdWlsZEZpbGUoYnVpbGRfZmlsZSkKKyAgICAgICAgcmV0dXJu
IGJ1aWxkX2ZpbGUKKworICAgIGRlZiBjcmVhdGVfUEJYRmlsZVJlZmVyZW5jZShzZWxmLCB1aWQs
IGlzYSwgbmFtZT1Ob25lLCBmaWxlPU5vbmUsIGdyb3VwPU5vbmUpOgorICAgICAgICBmaWxlX3Jl
ZmVyZW5jZSA9IFBCWEZpbGVSZWZlcmVuY2UodWlkLCBpc2EsIG5hbWUsIGZpbGUsIGdyb3VwKQor
ICAgICAgICBzZWxmLmFkZF9QQlhGaWxlUmVmZXJlbmNlKGZpbGVfcmVmZXJlbmNlKQorICAgICAg
ICByZXR1cm4gZmlsZV9yZWZlcmVuY2UKKworICAgIGRlZiBjcmVhdGVfWENCdWlsZENvbmZpZ3Vy
YXRpb24oc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUp
OgorICAgICAgICBidWlsZF9jb25maWd1cmF0aW9uID0gWENCdWlsZENvbmZpZ3VyYXRpb24odWlk
LCBpc2EsIG5hbWUsIGNvbmZpZ3VyYXRpb25fbGlzdCkKKyAgICAgICAgc2VsZi5hZGRfWENCdWls
ZENvbmZpZ3VyYXRpb24oYnVpbGRfY29uZmlndXJhdGlvbikKKyAgICAgICAgcmV0dXJuIGJ1aWxk
X2NvbmZpZ3VyYXRpb24KKworICAgIGRlZiBjcmVhdGVfWENDb25maWd1cmF0aW9uTGlzdChzZWxm
LCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBjb25maWd1cmF0aW9uX2xpc3Q9Tm9uZSk6CisgICAgICAg
IGNvbmZpZ3VyYXRpb25fbGlzdCA9IFhDQ29uZmlndXJhdGlvbkxpc3QodWlkLCBpc2EsIG5hbWUs
IGNvbmZpZ3VyYXRpb25fbGlzdCkKKyAgICAgICAgc2VsZi5hZGRfWENDb25maWd1cmF0aW9uTGlz
dChjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uX2xpc3QK
KworICAgIGRlZiBjcmVhdGVfUEJYQXJiaXRyYXJ5T2JqZWN0KHNlbGYsIHVpZCwgaXNhLCBuYW1l
PU5vbmUpOgorICAgICAgICBvYmplY3QgPSBQQlhBcmJpdHJhcnlPYmplY3QodWlkLCBpc2EsIG5h
bWUpCisgICAgICAgIHNlbGYuYWRkX1BCWEFyYml0cmFyeU9iamVjdChvYmplY3QpCisgICAgICAg
IHJldHVybiBvYmplY3QKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134771</attachid>
            <date>2012-03-30 04:28:40 -0700</date>
            <delta_ts>2013-10-31 08:30:41 -0700</delta_ts>
            <desc>patch, requires 82595</desc>
            <filename>bug-61773-20120330202838.patch</filename>
            <type>text/plain</type>
            <size>74126</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTA4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDU5ZGVjYTg5NmRkODc1ZDBhYjViMzBkN2FiZTcwODE4
MjMwNDY0Zi4uMDQ0YmU5NGQzZGJiMzk5ZDcyZDI4MjY4YTU4ZTAxOTg4OGJkNmQ5YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
NyBAQAorMjAxMi0wMy0zMCAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBXcml0ZSBhIHRvb2xzIGxpYnJhcnkgdG8gbWFuaXB1bGF0ZSBYY29k
ZSBwcm9qZWN0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MTc3MworCisgICAgICAgIEltcGxlbWVudCB0aGUgY2xhc3NlcyBmb3IgWGNvZGUg
cHJvamVjdHMsIHByb2plY3QgcmVhZGVyIGFuZCB3cml0ZXIsCisgICAgICAgIGFzIHdlbGwgYXMg
Y2xhc3NlcyBmb3IgbW9zdCBvZiB0aGUgaW5kaXZpZHVhbCBwYXJ0cyB0aGF0IG1ha2UgdXAgYW4g
WGNvZGUgcHJvamVjdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNvZGVwcm9qLnB5OiBB
ZGRlZC4KKyAgICAgICAgKFhjb2RlVUlEKToKKyAgICAgICAgKFhjb2RlVUlELmlzKToKKyAgICAg
ICAgKFhjb2RlVUlELl9faW5pdF9fKToKKyAgICAgICAgKFhjb2RlVUlELl9fY21wX18pOgorICAg
ICAgICAoWGNvZGVVSUQuX19lcV9fKToKKyAgICAgICAgKFhjb2RlVUlELl9fbmVfXyk6CisgICAg
ICAgIChYY29kZVVJRC5fX2hhc2hfXyk6CisgICAgICAgIChYY29kZVVJRC5fX25vbnplcm9fXyk6
CisgICAgICAgIChYY29kZVVJRC5pc192YWxpZCk6CisgICAgICAgIChYY29kZVVJRC5pc192YWxp
ZF9VSUQpOgorICAgICAgICAoWGNvZGVRdW90ZWRTdHJpbmcpOgorICAgICAgICAoWGNvZGVRdW90
ZWRTdHJpbmcuaXMpOgorICAgICAgICAoWGNvZGVRdW90ZWRTdHJpbmcuX19oYXNoX18pOgorICAg
ICAgICAoWGNvZGVRdW90ZWRTdHJpbmcuX19yZXByX18pOgorICAgICAgICAoWGNvZGVRdW90ZWRT
dHJpbmcuX19zdHJfXyk6CisgICAgICAgIChYY29kZVF1b3RlZFN0cmluZ0xpc3QpOgorICAgICAg
ICAoWGNvZGVRdW90ZWRTdHJpbmdMaXN0LmFwcGVuZCk6CisgICAgICAgIChYY29kZVVJRExpc3Qp
OgorICAgICAgICAoWGNvZGVVSURMaXN0LmFwcGVuZCk6CisgICAgICAgIChQQlhPYmplY3QpOgor
ICAgICAgICAoUEJYT2JqZWN0Ll9faW5pdF9fKToKKyAgICAgICAgKFBCWE9iamVjdC5fX21pc3Np
bmdfXyk6CisgICAgICAgIChQQlhPYmplY3QuX19oYXNoX18pOgorICAgICAgICAoUEJYT2JqZWN0
Ll9fc3RyX18pOgorICAgICAgICAoUEJYT2JqZWN0LmlzX3ZhbGlkKToKKyAgICAgICAgKFBCWE9i
amVjdC5nZXRfbmFtZSk6CisgICAgICAgIChQQlhPYmplY3Quc2V0X25hbWUpOgorICAgICAgICAo
UEJYT2JqZWN0LmRlbF9uYW1lKToKKyAgICAgICAgKFBCWE9iamVjdC5nZXRfcGF0aCk6CisgICAg
ICAgIChQQlhPYmplY3Quc2V0X3BhdGgpOgorICAgICAgICAoUEJYT2JqZWN0LmRlbF9wYXRoKToK
KyAgICAgICAgKFBCWEZpbGVSZWZlcmVuY2UpOgorICAgICAgICAoUEJYRmlsZVJlZmVyZW5jZS5f
X2luaXRfXyk6CisgICAgICAgIChQQlhGaWxlUmVmZXJlbmNlLmlzX3ZhbGlkKToKKyAgICAgICAg
KFBCWEZpbGVSZWZlcmVuY2UuY29tbWVudCk6CisgICAgICAgIChQQlhWYXJpYW50R3JvdXBDb250
YWluZXIpOgorICAgICAgICAoUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFBCWFZhcmlhbnRHcm91cENvbnRhaW5lci5fYWRkX3ZhcmlhbnRfZ3JvdXApOgorICAg
ICAgICAoUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyLl9yZW1vdmVfdmFyaWFudF9ncm91cCk6Cisg
ICAgICAgIChQQlhWYXJpYW50R3JvdXBDb250YWluZXIuaXNfdmFsaWQpOgorICAgICAgICAoUEJY
VmFyaWFudEdyb3VwQ29udGFpbmVyLmlzX2VtcHR5KToKKyAgICAgICAgKFBCWFZhcmlhbnRHcm91
cCk6CisgICAgICAgIChQQlhWYXJpYW50R3JvdXAuX19pbml0X18pOgorICAgICAgICAoUEJYVmFy
aWFudEdyb3VwLl9faGFzaF9fKToKKyAgICAgICAgKFBCWFZhcmlhbnRHcm91cC5fX2VxX18pOgor
ICAgICAgICAoUEJYVmFyaWFudEdyb3VwLl9fbmVfXyk6CisgICAgICAgIChQQlhWYXJpYW50R3Jv
dXAuX3NldF9jb250YWluZXIpOgorICAgICAgICAoUEJYVmFyaWFudEdyb3VwLmlzX3ZhbGlkKToK
KyAgICAgICAgKFBCWFZhcmlhbnRHcm91cC5jb21tZW50KToKKyAgICAgICAgKFBCWEdyb3VwKToK
KyAgICAgICAgKFBCWEdyb3VwLl9faW5pdF9fKToKKyAgICAgICAgKFBCWEdyb3VwLl9fc3RyX18p
OgorICAgICAgICAoUEJYR3JvdXAuaXNfdmFsaWQpOgorICAgICAgICAoUEJYR3JvdXAuaXNfZW1w
dHkpOgorICAgICAgICAoUEJYR3JvdXAuY29tbWVudCk6CisgICAgICAgIChQQlhCdWlsZEZpbGUp
OgorICAgICAgICAoUEJYQnVpbGRGaWxlLl9faW5pdF9fKToKKyAgICAgICAgKFBCWEJ1aWxkRmls
ZS5fX3N0cl9fKToKKyAgICAgICAgKFBCWEJ1aWxkRmlsZS5fc2V0X2ZpbGVSZWYpOgorICAgICAg
ICAoUEJYQnVpbGRGaWxlLl9zZXRfYnVpbGRfcGhhc2UpOgorICAgICAgICAoUEJYQnVpbGRGaWxl
LmlzX3ZhbGlkKToKKyAgICAgICAgKFBCWEJ1aWxkRmlsZS5jb21tZW50KToKKyAgICAgICAgKFBC
WEJ1aWxkUGhhc2UpOgorICAgICAgICAoUEJYQnVpbGRQaGFzZS5fX2luaXRfXyk6CisgICAgICAg
IChQQlhCdWlsZFBoYXNlLl9zZXRfdGFyZ2V0KToKKyAgICAgICAgKFBCWEJ1aWxkUGhhc2UuX2Fk
ZF9idWlsZF9maWxlKToKKyAgICAgICAgKFBCWEJ1aWxkUGhhc2UuX3JlbW92ZV9idWlsZF9maWxl
KToKKyAgICAgICAgKFBCWEJ1aWxkUGhhc2UuaXNfdmFsaWQpOgorICAgICAgICAoUEJYQnVpbGRQ
aGFzZS5jb21tZW50KToKKyAgICAgICAgKFhDQ29uZmlndXJhdGlvbkxpc3QpOgorICAgICAgICAo
WENDb25maWd1cmF0aW9uTGlzdC5fX2luaXRfXyk6CisgICAgICAgIChYQ0NvbmZpZ3VyYXRpb25M
aXN0Ll9zZXRfcmVmZXJyZXIpOgorICAgICAgICAoWENDb25maWd1cmF0aW9uTGlzdC5fYXBwZW5k
X2J1aWxkX2NvbmZpZ3VyYXRpb24pOgorICAgICAgICAoWENDb25maWd1cmF0aW9uTGlzdC5pc192
YWxpZCk6CisgICAgICAgIChYQ0NvbmZpZ3VyYXRpb25MaXN0LmNvbW1lbnQpOgorICAgICAgICAo
WENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyKToKKyAgICAgICAgKFhDQ29uZmlndXJhdGlvbkxp
c3RSZWZlcnJlci5mb3IpOgorICAgICAgICAoWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyLl9f
aW5pdF9fKToKKyAgICAgICAgKFhDQ29uZmlndXJhdGlvbkxpc3RSZWZlcnJlci5pc192YWxpZCk6
CisgICAgICAgIChYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIuX3NldF9jb25maWd1cmF0aW9u
X2xpc3QpOgorICAgICAgICAoWENCdWlsZENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoWENCdWls
ZENvbmZpZ3VyYXRpb24uX19pbml0X18pOgorICAgICAgICAoWENCdWlsZENvbmZpZ3VyYXRpb24u
aXNfdmFsaWQpOgorICAgICAgICAoWENCdWlsZENvbmZpZ3VyYXRpb24uY29tbWVudCk6CisgICAg
ICAgIChQQlhUYXJnZXQpOgorICAgICAgICAoUEJYVGFyZ2V0Ll9faW5pdF9fKToKKyAgICAgICAg
KFBCWFRhcmdldC5fc2V0X3Byb2plY3QpOgorICAgICAgICAoUEJYVGFyZ2V0Ll9hcHBlbmRfYnVp
bGRfcGhhc2UpOgorICAgICAgICAoUEJYVGFyZ2V0LmlzX3ZhbGlkKToKKyAgICAgICAgKFBCWFRh
cmdldC5jb21tZW50KToKKyAgICAgICAgKFBCWFByb2plY3QpOgorICAgICAgICAoUEJYUHJvamVj
dC5fX2luaXRfXyk6CisgICAgICAgIChQQlhQcm9qZWN0Ll9hcHBlbmRfdGFyZ2V0KToKKyAgICAg
ICAgKFBCWFByb2plY3QuaXNfdmFsaWQpOgorICAgICAgICAoUEJYUHJvamVjdC5jb21tZW50KToK
KyAgICAgICAgKFBCWEFyYml0cmFyeU9iamVjdCk6CisgICAgICAgIChQQlhBcmJpdHJhcnlPYmpl
Y3QuY29tbWVudCk6CisgICAgICAgIChUZW1wb3JhcnlQQlhPYmplY3QpOgorICAgICAgICAoVGVt
cG9yYXJ5UEJYT2JqZWN0Ll9faW5pdF9fKToKKyAgICAgICAgKFRlbXBvcmFyeVBCWE9iamVjdC5f
X2hhc2hfXyk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIpOgorICAgICAgICAoWGNvZGVQ
cm9qZWN0UmVhZGVyLmZvcik6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIuX19pbml0X18p
OgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLmNyZWF0ZV90ZW1wb3Jhcnlfb2JqZWN0KToK
KyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5yZXBsYWNlX3RlbXBvcmFyeV9maWxlX3JlZmVy
ZW5jZSk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucmVhZGxpbmUpOgorICAgICAgICAo
WGNvZGVQcm9qZWN0UmVhZGVyLnNraXBfbl9jaGFycyk6CisgICAgICAgIChYY29kZVByb2plY3RS
ZWFkZXIuc2tpcF9jaGFyKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX21hdGNo
KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX3F1b3RlZF9zdHJpbmcpOgorICAg
ICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLnJlYWRfc291cmNlVHJlZSk6CisgICAgICAgIChYY29k
ZVByb2plY3RSZWFkZXIucmVhZF9VSUQpOgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLnJl
YWRfbGlzdCk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucmVhZF9VSURfbGlzdCk6Cisg
ICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucmVhZF9vYmplY3QpOgorICAgICAgICAoWGNvZGVQ
cm9qZWN0UmVhZGVyLnJlYWRfdmFsdWUpOgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLnJl
YWRfcGJ4X29iamVjdCk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucmVhZF9wYnhfb2Jq
ZWN0Lm9iamVjdCk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucmVhZF9vYmplY3RzKToK
KyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX21haW5fb2JqZWN0KToKKyAgICAgICAg
KFhjb2RlUHJvamVjdFJlYWRlci5yZWFkX3Byb2plY3RfZmlsZSk6CisgICAgICAgIChYY29kZVBy
b2plY3RSZWFkZXIuZW5zdXJlX3Byb3BlcnR5KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRl
ci5kaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVlKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRl
ci5kaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVlX2FuZF9wYXRoKToKKyAgICAgICAgKFhjb2RlUHJv
amVjdFJlYWRlci5maWxlX2Zyb21fc291cmNlVHJlZV9hbmRfcGF0aCk6CisgICAgICAgIChYY29k
ZVByb2plY3RSZWFkZXIudmVyaWZ5X3Jvb3Rfb2JqZWN0KToKKyAgICAgICAgKFhjb2RlUHJvamVj
dFJlYWRlci5wb3N0cHJvY2Vzc19tYWluX2dyb3VwKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJl
YWRlci5wb3N0cHJvY2Vzc19ncm91cF9jaGlsZHJlbik6CisgICAgICAgIChYY29kZVByb2plY3RS
ZWFkZXIucG9zdHByb2Nlc3Nfc3ViZ3JvdXApOgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVy
LnBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNlKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRl
ci5wb3N0cHJvY2Vzc192YXJpYW50X2dyb3VwKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRl
ci5wb3N0cHJvY2Vzc19idWlsZF9maWxlcyk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIu
cG9zdHByb2Nlc3NfYnVpbGRfZmlsZSk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucG9z
dHByb2Nlc3NfYnVpbGRfcGhhc2VzKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5wb3N0
cHJvY2Vzc19idWlsZF9waGFzZSk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIucG9zdHBy
b2Nlc3NfY29uZmlndXJhdGlvbl9saXN0cyk6CisgICAgICAgIChYY29kZVByb2plY3RSZWFkZXIu
cG9zdHByb2Nlc3NfY29uZmlndXJhdGlvbl9saXN0KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJl
YWRlci5wb3N0cHJvY2Vzc190YXJnZXRzKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFJlYWRlci5w
b3N0cHJvY2Vzc190YXJnZXQpOgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLnBvc3Rwcm9j
ZXNzX3Byb2plY3QpOgorICAgICAgICAoWGNvZGVQcm9qZWN0UmVhZGVyLnZlcmlmeV9hbGxfb2Jq
ZWN0cyk6CisgICAgICAgIChYY29kZVByb2plY3RXcml0ZXIpOgorICAgICAgICAoWGNvZGVQcm9q
ZWN0V3JpdGVyLl9faW5pdF9fKToKKyAgICAgICAgKFhjb2RlUHJvamVjdFdyaXRlci5wcm9wZXJ0
aWVzX3NvcnRfa2V5KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFdyaXRlci5hbHBoYWJldGljYWxf
VUlEX3NvcnRfa2V5KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFdyaXRlci53cml0ZV91aWRfYW5k
X2NvbW1lbnQpOgorICAgICAgICAoWGNvZGVQcm9qZWN0V3JpdGVyLndyaXRlX3ZhbHVlKToKKyAg
ICAgICAgKFhjb2RlUHJvamVjdFdyaXRlci53cml0ZV9saXN0X3NpbmdsZV9saW5lKToKKyAgICAg
ICAgKFhjb2RlUHJvamVjdFdyaXRlci53cml0ZV9saXN0X211bHRpX2xpbmUpOgorICAgICAgICAo
WGNvZGVQcm9qZWN0V3JpdGVyLndyaXRlX29iamVjdF9tdWx0aV9saW5lKToKKyAgICAgICAgKFhj
b2RlUHJvamVjdFdyaXRlci53cml0ZV9vYmplY3Rfc2luZ2xlX2xpbmUpOgorICAgICAgICAoWGNv
ZGVQcm9qZWN0V3JpdGVyLndyaXRlX29iamVjdHMpOgorICAgICAgICAoWGNvZGVQcm9qZWN0V3Jp
dGVyLndyaXRlX21haW5fb2JqZWN0KToKKyAgICAgICAgKFhjb2RlUHJvamVjdFdyaXRlci53cml0
ZV9wcm9qZWN0X2ZpbGUpOgorICAgICAgICAoWGNvZGVQcm9qZWN0KToKKyAgICAgICAgKFhjb2Rl
UHJvamVjdC5fX2luaXRfXyk6CisgICAgICAgIChYY29kZVByb2plY3QuY3JlYXRlX1VJRF9zdHJp
bmcpOgorICAgICAgICAoWGNvZGVQcm9qZWN0LmNyZWF0ZV9VSUQpOgorICAgICAgICAoWGNvZGVQ
cm9qZWN0LmVuc3VyZV9VSUQpOgorICAgICAgICAoWGNvZGVQcm9qZWN0Ll9hZGRfb2JqZWN0KToK
KyAgICAgICAgKFhjb2RlUHJvamVjdC5zZXRfUEJYUHJvamVjdCk6CisgICAgICAgIChYY29kZVBy
b2plY3QuYWRkX1BCWFRhcmdldCk6CisgICAgICAgIChYY29kZVByb2plY3QuYWRkX1BCWEJ1aWxk
UGhhc2UpOgorICAgICAgICAoWGNvZGVQcm9qZWN0LmFkZF9QQlhHcm91cCk6CisgICAgICAgIChY
Y29kZVByb2plY3QuYWRkX1BCWFZhcmlhbnRHcm91cCk6CisgICAgICAgIChYY29kZVByb2plY3Qu
YWRkX1BCWEJ1aWxkRmlsZSk6CisgICAgICAgIChYY29kZVByb2plY3QuYWRkX1BCWEZpbGVSZWZl
cmVuY2UpOgorICAgICAgICAoWGNvZGVQcm9qZWN0LmFkZF9YQ0J1aWxkQ29uZmlndXJhdGlvbik6
CisgICAgICAgIChYY29kZVByb2plY3QuYWRkX1hDQ29uZmlndXJhdGlvbkxpc3QpOgorICAgICAg
ICAoWGNvZGVQcm9qZWN0LmFkZF9QQlhBcmJpdHJhcnlPYmplY3QpOgorICAgICAgICAoWGNvZGVQ
cm9qZWN0LmNyZWF0ZV9QQlhQcm9qZWN0KToKKyAgICAgICAgKFhjb2RlUHJvamVjdC5jcmVhdGVf
UEJYVGFyZ2V0KToKKyAgICAgICAgKFhjb2RlUHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSk6
CisgICAgICAgIChYY29kZVByb2plY3QuY3JlYXRlX1BCWEdyb3VwKToKKyAgICAgICAgKFhjb2Rl
UHJvamVjdC5jcmVhdGVfUEJYVmFyaWFudEdyb3VwKToKKyAgICAgICAgKFhjb2RlUHJvamVjdC5j
cmVhdGVfUEJYQnVpbGRGaWxlKToKKyAgICAgICAgKFhjb2RlUHJvamVjdC5jcmVhdGVfUEJYRmls
ZVJlZmVyZW5jZSk6CisgICAgICAgIChYY29kZVByb2plY3QuY3JlYXRlX1hDQnVpbGRDb25maWd1
cmF0aW9uKToKKyAgICAgICAgKFhjb2RlUHJvamVjdC5jcmVhdGVfWENDb25maWd1cmF0aW9uTGlz
dCk6CisgICAgICAgIChYY29kZVByb2plY3QuY3JlYXRlX1BCWEFyYml0cmFyeU9iamVjdCk6Cisg
ICAgICAgIChYY29kZVByb2plY3QuZW5zdXJlX2dyb3VwX2Zvcl9kaXJlY3RvcnkpOgorICAgICAg
ICAoWGNvZGVQcm9qZWN0LmFkZF9maWxlKToKKwogMjAxMi0wMy0yOSAgVmluZWV0IENoYXVkaGFy
eSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGN1c3RvbSBiaW5kaW5n
cyBmb3JtIEludGVybmFscy5pZGwgb2YgYXR0cmlidXRlIHR5cGUgQXJyYXkuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3hjb2RlcHJvai5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QveGNvZGVwcm9qLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5NmYwOWE2MTY5NzgyNGE2NDQ0NGNmYWMyOGFmZDUzMmNkNjhlODMKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L3hjb2RlcHJvai5w
eQpAQCAtMCwwICsxLDE0MzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QuZ3JvdXBiYXNlIGltcG9ydCAqCisK
K2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCisKKworcmFuZG9tLnNl
ZWQoKSAgIyBTZWVkIHRoZSBnZW5lcmF0b3IKKworIyBBbGwga25vd24gYnVpbGQgcGhhc2UgdHlw
ZXMKK1BCWF9CVUlMRF9QSEFTRV9UWVBFUyA9ICgnUEJYSGVhZGVyc0J1aWxkUGhhc2UnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgJ1BCWFJlc291cmNlc0J1aWxkUGhhc2UnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgJ1BCWENvcHlGaWxlc0J1aWxkUGhhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICdQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2UnKQorCisjIFN1cHBvcnRlZCBYY29kZSBmaWxlIHR5
cGVzCitFWFRFTlNJT05fVE9fRklMRUVOQ09ESU5HX0xBU1RLTk9XTkZJTEVUWVBFX0FORF9CVUlM
RF9QSEFTRSA9IHsKKyAgICAnLmMnOiAgICAgICAgICAgKCc0JywgICAgICdzb3VyY2Vjb2RlLmMu
YycsICAgICAgICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLmNwcCc6ICAgICAgICAg
KCc0JywgICAgICdzb3VyY2Vjb2RlLmNwcC5jcHAnLCAgICAnUEJYU291cmNlc0J1aWxkUGhhc2Un
KSwKKyAgICAnLm0nOiAgICAgICAgICAgKCc0JywgICAgICdzb3VyY2Vjb2RlLmMub2JqYycsICAg
ICAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAnLm1tJzogICAgICAgICAgKCc0JywgICAg
ICdzb3VyY2Vjb2RlLmNwcC5vYmpjcHAnLCAnUEJYU291cmNlc0J1aWxkUGhhc2UnKSwKKyAgICAn
LnBsJzogICAgICAgICAgKCc0JywgICAgICd0ZXh0LnNjcmlwdC5wZXJsJywgICAgICAnUEJYSGVh
ZGVyc0J1aWxkUGhhc2UnKSwKKyAgICAnLnBuZyc6ICAgICAgICAgKE5vbmUsICAgICdpbWFnZS5w
bmcnLCAgICAgICAgICAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICcudGlmZic6
ICAgICAgICAoTm9uZSwgICAgJ2ltYWdlLnRpZmYnLCAgICAgICAgICAgICdQQlhSZXNvdXJjZXNC
dWlsZFBoYXNlJyksCisgICAgJy50eHQnOiAgICAgICAgICgnNCcsICAgICAndGV4dCcsICAgICAg
ICAgICAgICAgICAgJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgJy5uaWInOiAgICAgICAg
IChOb25lLCAgICAnd3JhcHBlci5uaWInLCAgICAgICAgICAgJ1BCWFJlc291cmNlc0J1aWxkUGhh
c2UnKSwKKyAgICAnLndhdic6ICAgICAgICAgKE5vbmUsICAgICdhdWRpby53YXYnLCAgICAgICAg
ICAgICAnUEJYQ29weUZpbGVzQnVpbGRQaGFzZScpLAorICAgICcuaWRsJzogICAgICAgICAoJzQn
LCAgICAgJ3RleHQnLCAgICAgICAgICAgICAgICAgIE5vbmUpLAorICAgICMgRklYTUU6IHdoZW4g
dG8gdXNlICdzb3VyY2Vjb2RlLmNwcC5oJz8KKyAgICAnLmgnOiAgICAgICAgICAgKCc0JywgICAg
ICdzb3VyY2Vjb2RlLmMuaCcsICAgICAgICAnUEJYSGVhZGVyc0J1aWxkUGhhc2UnKSwKKyAgICAj
IE5PVEU6IC5zdHJpbmdzIGFyZSB1c2VkIGluIFBCWFZhcmlhbnRHcm91cCBpbiBhbiBhZGRpdGlv
bmFsIGxldmVsIG9mIGluZGlyZWN0aW9uOiBQQlhCdWlsZEZpbGUgLT4gUEJYVmFyaWFudEdyb3Vw
IC0+IFBCWEZpbGVSZWZlcmVuY2UKKyAgICAnLnN0cmluZ3MnOiAgICAgKCcxMCcsICAgICd0ZXh0
LnBsaXN0LnN0cmluZ3MnLCAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICMgTk9U
RTogSSBIYXZlbid0IHNlZW4gdGhlc2UgZXh0ZW5zaW9ucyBpbiBhY3R1YWwgZmlsZXMsIHRoaXMg
aXMgYW4gZXh0cmFwb2xhdGlvbiBmb3IgY29tcGxldGVuZXNzLgorICAgICcuY2MnOiAgICAgICAg
ICAoJzQnLCAgICAgJ3NvdXJjZWNvZGUuY3BwLmNwcCcsICAgICdQQlhTb3VyY2VzQnVpbGRQaGFz
ZScpLAorICAgICcuY3h4JzogICAgICAgICAoJzQnLCAgICAgJ3NvdXJjZWNvZGUuY3BwLmNwcCcs
ICAgICdQQlhTb3VyY2VzQnVpbGRQaGFzZScpLAorICAgICcuaHBwJzogICAgICAgICAoJzQnLCAg
ICAgJ3NvdXJjZWNvZGUuY3BwLmgnLCAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFzZScpLAorICAg
ICcuaHh4JzogICAgICAgICAoJzQnLCAgICAgJ3NvdXJjZWNvZGUuY3BwLmgnLCAgICAgICdQQlhI
ZWFkZXJzQnVpbGRQaGFzZScpLAorICAgICMgTk9URTogVGhpcyBpcyBhIGd1ZXNzIC0gSSBoYXZl
bid0IHNlZW4gJ3RleHQuc2NyaXB0LnB5dGhvbicgaW4gYWN0dWFsIHByb2plY3QgZmlsZXMuCisg
ICAgJy5weSc6ICAgICAgICAgICgnNCcsICAgICAndGV4dC5zY3JpcHQucHl0aG9uJywgICAgJ1BC
WFNvdXJjZXNCdWlsZFBoYXNlJyksCisgICAgIyBGSVhNRTogJy5mcmFtZXdvcmsnIHVzZXMgZGlm
ZmVyZW50IHByb3BlcnRpZXMgb24gUEJYRmlsZVJlZmVyZW5jZSAtIGZpbmQgb3V0IGhvdyB0byBn
ZW5lcmF0ZSB0aGVtCisgICAgIycuZnJhbWV3b3JrJzogIChOb25lLCAgICAnd3JhcHBlci5mcmFt
ZXdvcmsnLCAgICAgJ1BCWEZyYW1ld29ya3NCdWlsZFBoYXNlJyksCit9CisKKyMgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitjbGFzcyBYY29kZVVJRChv
YmplY3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBzaW5nbGUgWGNvZGUgVUlE
LgorICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIFVJRHMgZnJvbSBvdGhl
ciBzdHJpbmcgdmFsdWVzLgorICAgIFVJRHMgYXJlIHVzZWQgYXMga2V5cyBpbiB2YXJpb3VzIGlu
dGVybmFsIG1hcHMuIFdoZW4gd3JpdHRlbiwgdGhleSByZXF1aXJlIGFuIGFkZGl0aW9uYWwgY29t
bWVudCB0byBiZSBnZW5lcmF0ZWQuCisgICAgIiIiCisgICAgTUFUQ0ggPSByZS5jb21waWxlKCde
WzAtOUEtRl17MjR9JykKKyAgICBCT1RUT00gPSAnMCcgKiAyNAorICAgIFRPUCA9ICdGJyAqIDI0
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkc3RyPU5vbmUpOgorICAgICAgICBhc3NlcnQg
aXNpbnN0YW5jZSh1aWRzdHIsIGJhc2VzdHJpbmcpCisgICAgICAgIGFzc2VydCBub3QgdWlkc3Ry
IG9yIFhjb2RlVUlELmlzX3ZhbGlkX1VJRCh1aWRzdHIpCisgICAgICAgIGlmIG5vdCB1aWRzdHI6
CisgICAgICAgICAgICB1aWRzdHIgPSAnMCcgKiAyNAorICAgICAgICBzZWxmLnN0cmluZyA9IHVp
ZHN0cgorICAgICAgICBzZWxmLnJlZmVycmVkX29iamVjdCA9IE5vbmUKKyAgICAgICAgc2VsZi5j
YWNoZWRfY29tbWVudCA9IE5vbmUKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgYXNzZXJ0IHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5zdHJpbmcgIT0gb3RoZXIuc3RyaW5n
CisgICAgICAgIHJldHVybiBjbXAoc2VsZi5zdHJpbmcsIG90aGVyLnN0cmluZykKKworICAgIGRl
ZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBvdGhlciBvciBz
ZWxmLnN0cmluZyAhPSBvdGhlci5zdHJpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyaW5nID09
IG90aGVyLnN0cmluZworCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFz
c2VydCBzZWxmIGlzIG90aGVyIG9yIHNlbGYuc3RyaW5nICE9IG90aGVyLnN0cmluZworICAgICAg
ICByZXR1cm4gc2VsZi5zdHJpbmcgIT0gb3RoZXIuc3RyaW5nCisKKyAgICBkZWYgX19oYXNoX18o
c2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuc3RyaW5nKQorCisgICAgZGVmIF9fbm9u
emVyb19fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdHJpbmcgIT0gJzAnICogMjQKKwor
ICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFhjb2RlVUlELmlzX3ZhbGlk
X1VJRChzZWxmLnN0cmluZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfdmFsaWRf
VUlEKHVpZHN0cik6CisgICAgICAgIHJldHVybiBsZW4odWlkc3RyKSA9PSAyNCBhbmQgWGNvZGVV
SUQuTUFUQ0gubWF0Y2godWlkc3RyKSBhbmQgdWlkc3RyICE9IFhjb2RlVUlELkJPVFRPTSBhbmQg
dWlkc3RyICE9IFhjb2RlVUlELlRPUAorCisKK2NsYXNzIFhjb2RlUXVvdGVkU3RyaW5nKHN0cik6
CisgICAgIiIiCisgICAgQ2xhc3MgY29udGFpbmluZyBhIHNpbmdsZSBYY29kZSBTdHJpbmcgKHN0
cmluZyBpbiBxdW90ZXMgd2l0aGluIHRoZSBwcm9qZWN0IGZpbGUpLgorICAgIFRoaXMgY2xhc3Mg
aXMgdXNlZCB0byByZW1lbWJlciB0aGF0IHRoZSBvcmlnaW5hbCBmaWVsZCB2YWx1ZSB3YXMgZW5j
bG9zZWQgaW4gcXVvdGVzLgorICAgIFN0cmluZ3MgYXJlIHB1dCBpbnNpZGUgZG91YmxlIHF1b3Rl
cyBpZiB3cml0dGVuIGFzIHZhbHVlcywgYnV0IHdyaXR0ZW4gd2l0aG91dCBxdW90ZXMgd2l0aGlu
IGNvbW1lbnRzLgorICAgICIiIgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIGhhc2goJyInICsgc2VsZiArICciJykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX19zdHJfXygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuICciJyArIHNlbGYucmVwbGFjZSgnIicsICdcIicpICsgJyInCisKKworY2xh
c3MgWGNvZGVRdW90ZWRTdHJpbmdMaXN0KGxpc3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRh
aW5pbmcgYSBsaXN0IG9mIFhjb2RlUXVvdGVkU3RyaW5nIG9iamVjdHMuCisgICAgIiIiCisgICAg
ZGVmIGFwcGVuZChzZWxmLCBxdW90ZWRfc3RyaW5nKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UocXVvdGVkX3N0cmluZywgWGNvZGVRdW90ZWRTdHJpbmcpLCBxdW90ZWRfc3RyaW5nCisgICAg
ICAgIGxpc3QuYXBwZW5kKHNlbGYsIHF1b3RlZF9zdHJpbmcpCisKKworY2xhc3MgWGNvZGVVSURM
aXN0KGxpc3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgYSBsaXN0IG9mIFhjb2Rl
VUlEIG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIGFwcGVuZChzZWxmLCB1aWQpOgorICAgICAg
ICBhc3NlcnQgaXNpbnN0YW5jZSh1aWQsIFhjb2RlVUlEKSwgdWlkCisgICAgICAgIGxpc3QuYXBw
ZW5kKHNlbGYsIHVpZCkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisKKyMgJCQkIFRPRE86IFRoZSB2YXJpb3VzIFBCWC4uLiBvYmplY3QncyBwcm9w
ZXJ0aWVzIGR1cGxpY2F0ZSB0aGUgVUlEIG9iamVjdHMgb2YgdGhlIG1hcCBrZXkgd2l0aCB0aGUg
c2FtZSBpbmZvcm1hdGlvbiEKKyMgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGlzIG1heSBlYXNp
bHkgZ2V0IG91dCBvZiBzeW5jLgorIworIyAgICAgICAgLT4gRmluZCBhIHdheSB0byBzaGFyZSB0
aGlzLCBzaW1pbGFyIGFzIGlzIGJlaW5nIGRvbmUgZm9yICduYW1lJyBhbmQgJ3BhdGgnCisjICAg
ICAgICAgICAoUHJvYmxlbTogcHJvcGVydGllcyB1c2Ugc2V0cyBvZiBvYmplY3RzIHZzLiB0aGUg
ZGljdCdzIFhjb2RlVUlETGlzdCkKKworCitjbGFzcyBQQlhPYmplY3Qob2JqZWN0KToKKyAgICAi
IiIKKyAgICBCYXNlIGNsYXNzLCBob2xkaW5nIGEgZGVmaW5pdGlvbiBkaWN0IGZvciBhbiBYY29k
ZSBvYmplY3QuCisgICAgSXQgYWxzbyBzdG9yZXMgdGhlIFVJRCBvZiB0aGUgb2JqZWN0LCBhbmQg
Zm9yd2FyZHMgYWNjZXNzIHRvIHRoZSAnbmFtZSdwcm9wZXJ0eSB0byB0aGUgdW5kZXJseWluZyBk
aWN0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25l
KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkLCBYY29kZVVJRCkKKyAgICAgICAgYXNz
ZXJ0IHVpZC5pc192YWxpZCgpCisgICAgICAgIGFzc2VydCBub3QgdWlkLnJlZmVycmVkX29iamVj
dCBvciB1aWQucmVmZXJyZWRfb2JqZWN0IGlzIHNlbGYKKyAgICAgICAgYXNzZXJ0IGlzYQorICAg
ICAgICBzZWxmLnVpZCA9IHVpZAorICAgICAgICBzZWxmLnVpZC5yZWZlcnJlZF9vYmplY3QgPSBz
ZWxmCisgICAgICAgIHNlbGYuaXNhID0gaXNhCisgICAgICAgIHNlbGYucHJvcGVydGllcyA9IHsn
aXNhJzogaXNhfQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgIHJh
aXNlICJDb3VsZCBub3QgZmluZCBrZXkgJyVzJyB3aXRoIFVJRCAlcyBpbiAlcyEiICUgKGtleSwg
dWlkLCBzZWxmKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFz
aChzZWxmLnVpZCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5p
c2EgKyAiICIgKyBzZWxmLnVpZC5zdHJpbmcKKyAgICAgICAgbiA9IHNlbGYucHJvcGVydGllcy5n
ZXQoJ25hbWUnKQorICAgICAgICBwID0gc2VsZi5wcm9wZXJ0aWVzLmdldCgncGF0aCcpCisgICAg
ICAgIGlmIG46CisgICAgICAgICAgICBzICs9ICIgbmFtZTogJyVzJyIgJSBuCisgICAgICAgIGlm
IHA6CisgICAgICAgICAgICBzICs9ICIgcGF0aDogJyVzJyIgJSBwCisgICAgICAgIHJldHVybiBz
CisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnVpZC5pc192
YWxpZCgpCisKKyAgICBkZWYgZ2V0X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBy
b3BlcnRpZXMuZ2V0KCduYW1lJykKKworICAgIGRlZiBzZXRfbmFtZShzZWxmLCBuYW1lKToKKyAg
ICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHNlbGYucHJvcGVydGllc1snbmFtZSddID0gbmFt
ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kZWxfbmFtZSgpCisKKyAgICBkZWYg
ZGVsX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYucHJvcGVydGllcy5wb3AoJ25hbWUnLCBOb25l
KQorCisgICAgbmFtZSA9IHByb3BlcnR5KGdldF9uYW1lLCBzZXRfbmFtZSwgZGVsX25hbWUsICIn
bmFtZScgcHJvcGVydHkgb24gUEJYIG9iamVjdHMiKQorCisgICAgZGVmIGdldF9wYXRoKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5wcm9wZXJ0aWVzLmdldCgncGF0aCcpCisKKyAgICBkZWYg
c2V0X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICBzZWxm
LnByb3BlcnRpZXNbJ3BhdGgnXSA9IHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuZGVsX3BhdGgoKQorCisgICAgZGVmIGRlbF9wYXRoKHNlbGYpOgorICAgICAgICBzZWxmLnBy
b3BlcnRpZXMucG9wKCdwYXRoJywgTm9uZSkKKworICAgIHBhdGggPSBwcm9wZXJ0eShnZXRfcGF0
aCwgc2V0X3BhdGgsIGRlbF9wYXRoLCAiJ3BhdGgnIHByb3BlcnR5IG9uIFBCWCBvYmplY3RzIikK
KworCitjbGFzcyBQQlhGaWxlUmVmZXJlbmNlKFBCWE9iamVjdCwgR3JvdXBQcm9qZWN0RmlsZVJl
ZmVyZW5jZSk6CisgICAgIiIiCisgICAgQ2xhc3Mgc3RvcmluZyBhIFBCWEZpbGVSZWZlcmVuY2Ug
b2JqZWN0LCByZWZlcnJpbmcgdG8gYSBDb21tb25GaWxlLgorICAgIEEgUEJYRmlsZVJlZmVyZW5j
ZSBpcyBjb250YWluZWQgaW4gUEJYR3JvdXAgYW5kIFBCWFZhcmlhbnRHcm91cCBvYmplY3RzLgor
ICAgIEl0IG1heSBiZSByZWZlcmVuY2VkIGl0c2VsZiBieSBhIFBCWEJ1aWxkRmlsZSBvYmplY3Qu
CisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIGZp
bGU9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2EgPT0gJ1BCWEZpbGVSZWZl
cmVuY2UnCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZSkK
KyAgICAgICAgR3JvdXBQcm9qZWN0RmlsZVJlZmVyZW5jZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBn
cm91cCkKKyAgICAgICAgIyBkZWZhdWx0IHByb3BlcnRpZXMKKyAgICAgICAgc2VsZi5wcm9wZXJ0
aWVzWydzb3VyY2VUcmVlJ10gPSAnIjxncm91cD4iJworCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYp
OgorICAgICAgICByZXR1cm4gUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYpIGFuZCBHcm91cFByb2pl
Y3RGaWxlUmVmZXJlbmNlLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYucHJvcGVydGllcy5nZXQoJ25hbWUnKSBvciBzZWxmLmZpbGUu
bmFtZQorCisKK2NsYXNzIFBCWFZhcmlhbnRHcm91cENvbnRhaW5lcihvYmplY3QpOgorICAgICIi
IgorICAgIENsYXNzIGNvbnRhaW5pbmcgUEJYVmFyaWFudEdyb3VwIG9iamVjdHMuCisgICAgIiIi
CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZhcmlhbnRfZ3JvdXBzID0g
c2V0KCkKKworICAgIGRlZiBfYWRkX3ZhcmlhbnRfZ3JvdXAoc2VsZiwgdmFyaWFudF9ncm91cCk6
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAsIFBCWFZhcmlhbnRHcm91
cCkKKyAgICAgICAgYXNzZXJ0IHZhcmlhbnRfZ3JvdXAgbm90IGluIHNlbGYudmFyaWFudF9ncm91
cHMKKyAgICAgICAgc2VsZi52YXJpYW50X2dyb3Vwcy5hZGQodmFyaWFudF9ncm91cCkKKworICAg
IGRlZiBfcmVtb3ZlX3ZhcmlhbnRfZ3JvdXAoc2VsZiwgdmFyaWFudF9ncm91cCk6CisgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAsIFBCWFZhcmlhbnRHcm91cCkKKyAgICAg
ICAgYXNzZXJ0IHZhcmlhbnRfZ3JvdXAgaW4gc2VsZi52YXJpYW50X2dyb3VwcworICAgICAgICBz
ZWxmLnZhcmlhbnRfZ3JvdXBzLnJlbW92ZSh2YXJpYW50X2dyb3VwKQorCisgICAgZGVmIGlzX3Zh
bGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2VtcHR5KHNlbGYp
OgorICAgICAgICByZXR1cm4gbm90IHNlbGYudmFyaWFudF9ncm91cHMKKworCitjbGFzcyBQQlhW
YXJpYW50R3JvdXAoUEJYT2JqZWN0LCBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlLCBQcm9qZWN0
RmlsZVJlZmVyZW5jZUNvbnRhaW5lcik6CisgICAgIiIiCisgICAgQSBQQlhWYXJpYW50R3JvdXAg
aXMgYSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgUEJYRmlsZVJlZmVyZW5jZXMsIGVzc2VudGlh
bGx5IGEgbWV0YSBmaWxlIHJlZmVyZW5jZS4KKyAgICBMaWtlIGEgZ3JvdXAgaXQgbWF5IGFsc28g
cmVmZXIgYSBkaXJlY3RvcnkgYW5kL29yIGhhdmUgYSBuYW1lLgorICAgICIiIgorICAgIElEX0NP
VU5URVIgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWU9Tm9uZSwg
Y29udGFpbmVyPU5vbmUsIGRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGlzYSA9PSAn
UEJYVmFyaWFudEdyb3VwJworICAgICAgICBhc3NlcnQgbm90IGNvbnRhaW5lciBvciBpc2luc3Rh
bmNlKGNvbnRhaW5lciwgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyKQorICAgICAgICBQQlhPYmpl
Y3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFByb2plY3REaXJlY3Rv
cnlSZWZlcmVuY2UuX19pbml0X18oc2VsZiwgZGlyZWN0b3J5KQorICAgICAgICBQcm9qZWN0Rmls
ZVJlZmVyZW5jZUNvbnRhaW5lci5fX2luaXRfXyhzZWxmKQorICAgICAgICBQQlhWYXJpYW50R3Jv
dXAuSURfQ09VTlRFUiArPSAxCisgICAgICAgIHNlbGYuX2lkID0gUEJYVmFyaWFudEdyb3VwLklE
X0NPVU5URVIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWluZXIKKworICAgIGRlZiBf
X2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5faWQpCisKKyAgICBkZWYg
X19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYgaXMgb3RoZXIgb3Igc2Vs
Zi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisKKyAgICBk
ZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBpc2lu
c3RhbmNlKG90aGVyLCBzZWxmLlByb2plY3RHcm91cCkKKyAgICAgICAgYXNzZXJ0IHNlbGYgaXMg
b3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBzZWxmIGlzIG5v
dCBvdGhlcgorCisgICAgZGVmIF9zZXRfY29udGFpbmVyKHNlbGYsIGNvbnRhaW5lcik6CisgICAg
ICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5zdGFuY2UoY29udGFpbmVyLCBQQlhWYXJp
YW50R3JvdXBDb250YWluZXIpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5jb250YWluZXIKKyAg
ICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWluZXIKKworICAgIGRlZiBpc192YWxpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBhbmQgUEJYT2JqZWN0LmlzX3ZhbGlkKHNlbGYp
IGFuZCBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlLmlzX3ZhbGlkKHNlbGYpIGFuZCBQcm9qZWN0
RmlsZVJlZmVyZW5jZUNvbnRhaW5lci5pc192YWxpZChzZWxmKQorCisgICAgZGVmIGNvbW1lbnQo
c2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZSBvciBzZWxmLnVpZC5zdHJpbmcKKworCitjbGFzcyBQQlhHcm91cChQQlhPYmplY3QsIFByb2pl
Y3RHcm91cCwgUEJYVmFyaWFudEdyb3VwQ29udGFpbmVyKToKKyAgICAiIiIKKyAgICBYY29kZS1z
cGVjaWZpYyBncm91cCBkZWZpbml0aW9uIGNsYXNzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBwYXJlbnRfZ3JvdXA9Tm9uZSwgZGlyZWN0b3J5
PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhHcm91cCcKKyAgICAgICAgUEJYT2Jq
ZWN0Ll9faW5pdF9fKHNlbGYsIHVpZCwgaXNhLCBuYW1lKQorICAgICAgICBQcm9qZWN0R3JvdXAu
X19pbml0X18oc2VsZiwgcGFyZW50X2dyb3VwLCBkaXJlY3RvcnkpCisgICAgICAgIFBCWFZhcmlh
bnRHcm91cENvbnRhaW5lci5fX2luaXRfXyhzZWxmKQorICAgICAgICAjIGRlZmF1bHQgcHJvcGVy
dGllcworICAgICAgICBzZWxmLnByb3BlcnRpZXNbJ3NvdXJjZVRyZWUnXSA9ICciPGdyb3VwPiIn
CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kaXJlY3Rvcnk6Cisg
ICAgICAgICAgICBkaXJfc3RyaW5nID0gc2VsZi5kaXJlY3RvcnkuX2Rlc2NwYXRoX3dpdGhfc2Vw
KCcvJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcl9zdHJpbmcgPSAiKE5vbmUpIgor
ICAgICAgICByZXR1cm4gUEJYT2JqZWN0Ll9fc3RyX18oc2VsZikgKyAiIERpcjogJyVzJyIgJSBk
aXJfc3RyaW5nCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBQQlhP
YmplY3QuaXNfdmFsaWQoc2VsZikgYW5kIFByb2plY3RHcm91cC5pc192YWxpZChzZWxmKSBhbmQg
UEJYVmFyaWFudEdyb3VwQ29udGFpbmVyLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgaXNfZW1w
dHkoc2VsZik6CisgICAgICAgIHJldHVybiBQcm9qZWN0R3JvdXAuaXNfZW1wdHkoc2VsZikgYW5k
IFBCWFZhcmlhbnRHcm91cENvbnRhaW5lci5pc19lbXB0eSgpCisKKyAgICBkZWYgY29tbWVudChz
ZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuZGlyZWN0b3J5CisgICAgICAgIHJldHVybiBzZWxm
Lm5hbWUgb3Igc2VsZi5wcm9wZXJ0aWVzLmdldCgncGF0aCcpIG9yIHNlbGYudWlkLnN0cmluZwor
CisKK2NsYXNzIFBCWEJ1aWxkRmlsZShQQlhPYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIHN0
b3JpbmcgYSBQQlhCdWlsZEZpbGUgb2JqZWN0LgorICAgIEEgUEJYQnVpbGRGaWxlIGlzIGNvbnRh
aW5lZCBpbiBhIGJ1aWxkIHBoYXNlIGFuZCByZWZlcmVuY2VzIGEgUEJYRmlsZVJlZmVyZW5jZS4K
KyAgICBJbiBhZGRpdGlvbiwgaXQgbWF5IHNldCBmbGFncyBvbiB0aGUgZmlsZSB1c2VkIGluIGJ1
aWxkaW5nIChtb3N0IGNvbW1vbmx5IHRoZSBoZWFkZXIgcm9sZSkuCisKKyAgICBOb3RlOiAnZmls
ZVJlZicgY2FuIGJlIGEgUEJYRmlsZVJlZmVyZW5jZSBvciBhIFBCWFZhcmlhbnRHcm91cAorICAg
ICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1aWQsIGlzYSwgbmFtZT1Ob25lLCBmaWxlUmVm
PU5vbmUsIGJ1aWxkX3BoYXNlPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhCdWls
ZEZpbGUnCisgICAgICAgIGFzc2VydCBub3QgZmlsZVJlZiBvciBpc2luc3RhbmNlKGZpbGVSZWYs
IFBCWEZpbGVSZWZlcmVuY2UpIG9yIGlzaW5zdGFuY2UoZmlsZVJlZiwgUEJYVmFyaWFudEdyb3Vw
KQorICAgICAgICBhc3NlcnQgbm90IGJ1aWxkX3BoYXNlIG9yIGlzaW5zdGFuY2UoYnVpbGRfcGhh
c2UsIFBCWEJ1aWxkUGhhc2UpCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRfXyhzZWxmLCB1aWQs
IGlzYSwgbmFtZSkKKyAgICAgICAgc2VsZi5maWxlUmVmID0gZmlsZVJlZgorICAgICAgICBzZWxm
LmJ1aWxkX3BoYXNlID0gYnVpbGRfcGhhc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gUEJYT2JqZWN0Ll9fc3RyX18oc2VsZikgKyAiICgtPiAlcykiICUgc2VsZi5m
aWxlUmVmCisKKyAgICBkZWYgX3NldF9maWxlUmVmKHNlbGYsIGZpbGVSZWYpOgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShmaWxlUmVmLCBQQlhGaWxlUmVmZXJlbmNlKSBvciBpc2luc3RhbmNl
KGZpbGVSZWYsIFBCWFZhcmlhbnRHcm91cCkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmZpbGVS
ZWYKKyAgICAgICAgc2VsZi5maWxlUmVmID0gZmlsZVJlZgorCisgICAgZGVmIF9zZXRfYnVpbGRf
cGhhc2Uoc2VsZiwgYnVpbGRfcGhhc2UpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWls
ZF9waGFzZSwgUEJYQnVpbGRQaGFzZSkKKyAgICAgICAgYXNzZXJ0IG5vdCBidWlsZF9waGFzZSBv
ciBub3Qgc2VsZi5idWlsZF9waGFzZQorICAgICAgICBzZWxmLmJ1aWxkX3BoYXNlID0gYnVpbGRf
cGhhc2UKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFBCWE9iamVj
dC5pc192YWxpZChzZWxmKSBhbmQgc2VsZi5maWxlUmVmIGFuZCBzZWxmLmJ1aWxkX3BoYXNlCisK
KyAgICBkZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyBpbiAlcyIgJSAoc2Vs
Zi5maWxlUmVmLmNvbW1lbnQoKS5zdHJpcCgnIicpLCBzZWxmLmJ1aWxkX3BoYXNlLmNvbW1lbnQo
KS5zdHJpcCgnIicpKQorCisKK2NsYXNzIFBCWEJ1aWxkUGhhc2UoUEJYT2JqZWN0KToKKyAgICAi
IiIKKyAgICBDbGFzcyBjb250YWluaW5nIGFuIFhjb2RlIGJ1aWxkIHBoYXNlIChlLmcuIFBCWFNv
dXJjZXNCdWlsZFBoYXNlKS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBp
c2EsIG5hbWU9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNhIGluIFBCWF9C
VUlMRF9QSEFTRV9UWVBFUworICAgICAgICBQQlhPYmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBp
c2EsIG5hbWUpCisgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgIHNlbGYuYnVp
bGRfZmlsZXMgPSBzZXQoKQorCisgICAgZGVmIF9zZXRfdGFyZ2V0KHNlbGYsIHRhcmdldCk6Cisg
ICAgICAgIGFzc2VydCB0YXJnZXQKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0LCBQ
QlhUYXJnZXQpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi50YXJnZXQKKyAgICAgICAgc2VsZi50
YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBfYWRkX2J1aWxkX2ZpbGUoc2VsZiwgYnVpbGRfZmls
ZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxkX2ZpbGUsIFBCWEJ1aWxkRmlsZSkK
KyAgICAgICAgYXNzZXJ0IGJ1aWxkX2ZpbGUgbm90IGluIHNlbGYuYnVpbGRfZmlsZXMKKyAgICAg
ICAgc2VsZi5idWlsZF9maWxlcy5hZGQoYnVpbGRfZmlsZSkKKworICAgIGRlZiBfcmVtb3ZlX2J1
aWxkX2ZpbGUoc2VsZiwgYnVpbGRfZmlsZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1
aWxkX2ZpbGUsIFBCWEJ1aWxkRmlsZSkKKyAgICAgICAgYXNzZXJ0IGJ1aWxkX2ZpbGUgaW4gc2Vs
Zi5idWlsZF9maWxlcworICAgICAgICBzZWxmLmJ1aWxkX2ZpbGVzLnJlbW92ZShidWlsZF9maWxl
KQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQg
YW5kIFBCWE9iamVjdC5pc192YWxpZChzZWxmKQorCisgICAgZGVmIGNvbW1lbnQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUgb3Igc2VsZi5pc2FbMzotMTBdICAjIFN0cmlwICdQQlgn
IGFuZCAnQnVpbGRQaGFzZScuCisKKworY2xhc3MgWENDb25maWd1cmF0aW9uTGlzdChQQlhPYmpl
Y3QpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgZGF0YSBmb3IgYSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0IG9iamVjdC4KKyAgICBUaGlzIGlzIHJlZmVycmVkIHRvIGJ5IFBCWFRhcmdldCBh
bmQgUEJYUHJvamVjdCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1
aWQsIGlzYSwgbmFtZT1Ob25lLCByZWZlcnJpbmdfb2JqZWN0PU5vbmUpOgorICAgICAgICBhc3Nl
cnQgaXNhID09ICdYQ0NvbmZpZ3VyYXRpb25MaXN0JworICAgICAgICBhc3NlcnQgbm90IHJlZmVy
cmluZ19vYmplY3Qgb3IgaXNpbnN0YW5jZShyZWZlcnJpbmdfb2JqZWN0LCBYQ0NvbmZpZ3VyYXRp
b25MaXN0UmVmZXJyZXIpCisgICAgICAgIFBCWE9iamVjdC5fX2luaXRfXyhzZWxmLCB1aWQsIGlz
YSwgbmFtZSkKKyAgICAgICAgc2VsZi5yZWZlcnJpbmdfb2JqZWN0ID0gcmVmZXJyaW5nX29iamVj
dAorICAgICAgICBzZWxmLmJ1aWxkX2NvbmZpZ3VyYXRpb25zID0gW10gICMgbGlzdCBvZiBYQ0J1
aWxkQ29uZmlndXJhdGlvbiBvYmplY3RzCisKKyAgICBkZWYgX3NldF9yZWZlcnJlcihzZWxmLCBy
ZWZlcnJlcik6CisgICAgICAgIGFzc2VydCByZWZlcnJlcgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShyZWZlcnJlciwgWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyKQorICAgICAgICBzZWxm
LnJlZmVycmluZ19vYmplY3QgPSByZWZlcnJlcgorCisgICAgZGVmIF9hcHBlbmRfYnVpbGRfY29u
ZmlndXJhdGlvbihzZWxmLCBidWlsZF9jb25maWd1cmF0aW9uKToKKyAgICAgICAgYXNzZXJ0IGJ1
aWxkX2NvbmZpZ3VyYXRpb24KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfY29uZmln
dXJhdGlvbiwgWENCdWlsZENvbmZpZ3VyYXRpb24pCisgICAgICAgIHNlbGYuYnVpbGRfY29uZmln
dXJhdGlvbnMuYXBwZW5kKGJ1aWxkX2NvbmZpZ3VyYXRpb24pCisKKyAgICBkZWYgaXNfdmFsaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlZmVycmluZ19vYmplY3QgYW5kIFBCWE9iamVj
dC5pc192YWxpZChzZWxmKQorCisgICAgZGVmIGNvbW1lbnQoc2VsZik6CisgICAgICAgIGFzc2Vy
dCBzZWxmLnJlZmVycmluZ19vYmplY3QKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnJlZmVy
cmluZ19vYmplY3QsIFBCWFByb2plY3QpOgorICAgICAgICAgICAgdGFyZ2V0X2NvbW1lbnQgPSBz
ZWxmLnJlZmVycmluZ19vYmplY3QucHJvamVjdC5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICB0YXJnZXRfY29tbWVudCA9IHNlbGYucmVmZXJyaW5nX29iamVjdC5jb21tZW50KCkKKyAg
ICAgICAgcmV0dXJuICdCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yICVzICIlcyInICUgKHNl
bGYucmVmZXJyaW5nX29iamVjdC5pc2EsIHRhcmdldF9jb21tZW50LnN0cmlwKCciJykpCisKKwor
Y2xhc3MgWENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyKG9iamVjdCk6CisgICAgIiIiCisgICAg
TWl4aW4gYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyByZWZlcnJpbmcgYSBYQ0NvbmZpZ3VyYXRpb25M
aXN0LCBpLmUuIFBCWFRhcmdldCwgUEJYUHJvamVjdCBhbmQgWENCdWlsZENvbmZpZ3VyYXRpb24K
KyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUp
OgorICAgICAgICBhc3NlcnQgbm90IGNvbmZpZ3VyYXRpb25fbGlzdCBvciBpc2luc3RhbmNlKGNv
bmZpZ3VyYXRpb25fbGlzdCwgWENDb25maWd1cmF0aW9uTGlzdCkKKyAgICAgICAgc2VsZi5jb25m
aWd1cmF0aW9uX2xpc3QgPSBjb25maWd1cmF0aW9uX2xpc3QKKworICAgIGRlZiBpc192YWxpZChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlndXJhdGlvbl9saXN0CisKKyAgICBkZWYg
X3NldF9jb25maWd1cmF0aW9uX2xpc3Qoc2VsZiwgY29uZmlndXJhdGlvbl9saXN0KToKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29uZmlndXJhdGlvbl9saXN0LCBYQ0NvbmZpZ3VyYXRpb25M
aXN0KQorICAgICAgICBhc3NlcnQgbm90IHNlbGYuY29uZmlndXJhdGlvbl9saXN0CisgICAgICAg
IHNlbGYuY29uZmlndXJhdGlvbl9saXN0ID0gY29uZmlndXJhdGlvbl9saXN0CisKKworY2xhc3Mg
WENCdWlsZENvbmZpZ3VyYXRpb24oUEJYT2JqZWN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJy
ZXIpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgZGF0YSBmb3IgYSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbiBvYmplY3QuCisgICAgVGhpcyBpcyByZWZlcnJlZCB0byBieSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0IG9iamVjdHMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBp
c2EsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUpOgorICAgICAgICBhc3NlcnQg
aXNhID09ICdYQ0J1aWxkQ29uZmlndXJhdGlvbicKKyAgICAgICAgUEJYT2JqZWN0Ll9faW5pdF9f
KHNlbGYsIHVpZCwgaXNhLCBuYW1lKQorICAgICAgICBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJy
ZXIuX19pbml0X18oc2VsZiwgY29uZmlndXJhdGlvbl9saXN0KQorCisgICAgZGVmIGlzX3ZhbGlk
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lIGFuZCBQQlhPYmplY3QuaXNfdmFsaWQo
c2VsZikgYW5kIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZlcnJlci5pc192YWxpZChzZWxmKQorCisg
ICAgZGVmIGNvbW1lbnQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLm5hbWUKKyAgICAgICAg
cmV0dXJuIHNlbGYubmFtZSBvciBzZWxmLnVpZC5zdHJpbmcKKworCitjbGFzcyBQQlhUYXJnZXQo
UEJYT2JqZWN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0UmVmZXJyZXIpOgorICAgICIiIgorICAgIENs
YXNzIGNvbnRhaW5pbmcgYSBQQlhOYXRpdmVUYXJnZXQgb3IgUEJYQWdncmVnYXRlVGFyZ2V0LCBp
bmNsLiBpdHMgYnVpbGQgcGhhc2VzCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVp
ZCwgaXNhLCBuYW1lPU5vbmUsIHByb2plY3Q9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUp
OgorICAgICAgICBhc3NlcnQgaXNhID09ICdQQlhOYXRpdmVUYXJnZXQnIG9yIGlzYSA9PSAnUEJY
QWdncmVnYXRlVGFyZ2V0JworICAgICAgICBhc3NlcnQgbm90IHByb2plY3Qgb3IgaXNpbnN0YW5j
ZShwcm9qZWN0LCBQQlhQcm9qZWN0KQorICAgICAgICBQQlhPYmplY3QuX19pbml0X18oc2VsZiwg
dWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZlcnJlci5fX2lu
aXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYucHJvamVjdCA9IHBy
b2plY3QKKyAgICAgICAgc2VsZi5idWlsZF9waGFzZXMgPSBbXSAgIyBsaXN0IG9mIFBCWEJ1aWxk
UGhhc2UgZW50cmllcworCisgICAgZGVmIF9zZXRfcHJvamVjdChzZWxmLCBwcm9qZWN0KToKKyAg
ICAgICAgYXNzZXJ0IG5vdCBwcm9qZWN0IG9yIGlzaW5zdGFuY2UocHJvamVjdCwgUEJYUHJvamVj
dCkKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAorCisgICAgZGVmIF9hcHBlbmRfYnVp
bGRfcGhhc2Uoc2VsZiwgYnVpbGRfcGhhc2UpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShi
dWlsZF9waGFzZSwgUEJYQnVpbGRQaGFzZSkKKyAgICAgICAgYXNzZXJ0IGJ1aWxkX3BoYXNlIG5v
dCBpbiBzZWxmLmJ1aWxkX3BoYXNlcworICAgICAgICBzZWxmLmJ1aWxkX3BoYXNlcy5hcHBlbmQo
YnVpbGRfcGhhc2UpCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLm5hbWUgYW5kIFBCWE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQgWENDb25maWd1cmF0aW9u
TGlzdFJlZmVycmVyLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29tbWVudChzZWxmKToKKyAg
ICAgICAgYXNzZXJ0IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gc2VsZi5uYW1lIG9yIHNlbGYu
dWlkLnN0cmluZworCisKK2NsYXNzIFBCWFByb2plY3QoUEJYT2JqZWN0LCBYQ0NvbmZpZ3VyYXRp
b25MaXN0UmVmZXJyZXIpOgorICAgICIiIgorICAgIENsYXNzIGNvbnRhaW5pbmcgZGF0YSBmb3Ig
YSBQQlhQcm9qZWN0IG9iamVjdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlk
LCBpc2EsIHByb2plY3QsIG5hbWU9Tm9uZSwgY29uZmlndXJhdGlvbl9saXN0PU5vbmUpOgorICAg
ICAgICBhc3NlcnQgaXNhID09ICdQQlhQcm9qZWN0JworICAgICAgICBQQlhPYmplY3QuX19pbml0
X18oc2VsZiwgdWlkLCBpc2EsIG5hbWUpCisgICAgICAgIFhDQ29uZmlndXJhdGlvbkxpc3RSZWZl
cnJlci5fX2luaXRfXyhzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYucHJv
amVjdCA9IHByb2plY3QKKyAgICAgICAgc2VsZi50YXJnZXRzID0gW10gICMgbGlzdCBvZiBQQlhU
YXJnZXQgZW50cmllcworICAgICAgICBzZWxmLm1haW5fZ3JvdXAgPSBOb25lCisKKyAgICBkZWYg
X2FwcGVuZF90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uo
dGFyZ2V0LCBQQlhUYXJnZXQpCisgICAgICAgIGFzc2VydCB0YXJnZXQgbm90IGluIHNlbGYudGFy
Z2V0cworICAgICAgICBzZWxmLnRhcmdldHMuYXBwZW5kKHRhcmdldCkKKworICAgIGRlZiBpc192
YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFBCWE9iamVjdC5pc192YWxpZChzZWxmKSBhbmQg
WENDb25maWd1cmF0aW9uTGlzdFJlZmVycmVyLmlzX3ZhbGlkKHNlbGYpCisKKyAgICBkZWYgY29t
bWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICJQcm9qZWN0IG9iamVjdCIKKworCitjbGFzcyBQ
QlhBcmJpdHJhcnlPYmplY3QoUEJYT2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBob2xkaW5n
IGEgdG9wLWxldmVsIFhjb2RlIG9iamVjdCB0aGF0IGlzIG5vbmUgb2YgdGhlIGFib3ZlLiBUaG9z
ZSBhcmUgQUZBSUNUOgorICAgICAgICBQQlhDb250YWluZXJJdGVtUHJveHkKKyAgICAgICAgUEJY
VGFyZ2V0RGVwZW5kZW5jeQorICAgIHdoZXJlOgorICAgICAgICBQQlhOYXRpdmVUYXJnZXQuZGVw
ZW5kZW5jaWVzIC0+IFBCWFRhcmdldERlcGVuZGVuY3kKKyAgICAgICAgUEJYVGFyZ2V0RGVwZW5k
ZW5jeS50YXJnZXRQcm94eSAtPiBQQlhDb250YWluZXJJdGVtUHJveHkKKyAgICAiIiIKKyAgICBk
ZWYgY29tbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBvciBzZWxmLmlzYQor
CisKKycnJworY2xhc3MgVGVtcG9yYXJ5UEJYT2JqZWN0KFBCWE9iamVjdCk6CisgICAgIiIiCisg
ICAgQ2xhc3MgaG9sZGluZyBhbiBpbmNvbXBsZXRlIG9iamVjdCB0aGF0IHdpbGwgYmUgcmVwbGFj
ZWQgd2l0aCBhbiBhY3R1YWwgUEJYIG9iamVjdCBkdXJpbmcgcG9zdC1wcm9jZXNzaW5nLgorICAg
IEN1cnJlbnRseSB1c2VkIGZvciBQQlhGaWxlUmVmZXJlbmNlLgorICAgICIiIgorICAgIElEX0NP
VU5URVIgPSAxMDAwMDAwMDAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdWlkLCBpc2EpOgor
ICAgICAgICBQQlhPYmplY3QuX19pbml0X18oc2VsZiwgdWlkLCBpc2EpCisgICAgICAgIFRlbXBv
cmFyeVBCWE9iamVjdC5JRF9DT1VOVEVSICs9IDEKKyAgICAgICAgc2VsZi5faWQgPSBUZW1wb3Jh
cnlQQlhPYmplY3QuSURfQ09VTlRFUgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKycnJworCisjID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgWGNvZGVQcm9qZWN0UmVhZGVyKFByb2pl
Y3RSZWFkZXIpOgorICAgICIiIgorICAgIFBhcnNpbmcgY2xhc3MgZm9yIGFuIFhjb2RlIHByb2pl
Y3QgZmlsZS4KKyAgICAiIiIKKyAgICBDT01NRU5UX01BVENIID0gcmUuY29tcGlsZSgnL1wqLio/
XCovJykKKyAgICBJRF9NQVRDSCA9IHJlLmNvbXBpbGUoJ1tBLVphLXowLTlfXSsnKQorICAgIFZB
TFVFX01BVENIID0gcmUuY29tcGlsZSgnWy1fLy5BLVphLXowLTldKycpCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcHJvamVjdCwgZmlsZXN5c3RlbT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IHBy
b2plY3QKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvamVjdCwgWGNvZGVQcm9qZWN0KQor
ICAgICAgICBQcm9qZWN0UmVhZGVyLl9faW5pdF9fKHNlbGYsIHByb2plY3QsIGZpbGVzeXN0ZW0p
CisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lID0gJycKKyAgICAg
ICAgc2VsZi5saW5lX251bWJlciA9IDAKKyAgICAgICAgIyBSZWxldmFudCBvYmplY3QgdHlwZXMg
YW5kIHRoZWlyIGNyZWF0aW9uIGZ1bmN0aW9ucworICAgICAgICBzZWxmLmlzYV90b19jcmVhdGVf
bWV0aG9kID0geworICAgICAgICAgICAgJ1BCWEJ1aWxkRmlsZSc6ICAgICAgICAgICAgIHByb2pl
Y3QuY3JlYXRlX1BCWEJ1aWxkRmlsZSwKKyAgICAgICAgICAgICdQQlhIZWFkZXJzQnVpbGRQaGFz
ZSc6ICAgICBwcm9qZWN0LmNyZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWFNv
dXJjZXNCdWlsZFBoYXNlJzogICAgIHByb2plY3QuY3JlYXRlX1BCWEJ1aWxkUGhhc2UsCisgICAg
ICAgICAgICAnUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSc6ICAgcHJvamVjdC5jcmVhdGVfUEJYQnVp
bGRQaGFzZSwKKyAgICAgICAgICAgICdQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSc6ICBwcm9qZWN0
LmNyZWF0ZV9QQlhCdWlsZFBoYXNlLAorICAgICAgICAgICAgJ1BCWENvcHlGaWxlc0J1aWxkUGhh
c2UnOiAgIHByb2plY3QuY3JlYXRlX1BCWEJ1aWxkUGhhc2UsCisgICAgICAgICAgICAnUEJYU2hl
bGxTY3JpcHRCdWlsZFBoYXNlJzogcHJvamVjdC5jcmVhdGVfUEJYQnVpbGRQaGFzZSwKKyAgICAg
ICAgICAgICdQQlhGaWxlUmVmZXJlbmNlJzogICAgICAgICBwcm9qZWN0LmNyZWF0ZV9QQlhGaWxl
UmVmZXJlbmNlLCAgIyBzZWxmLmNyZWF0ZV90ZW1wb3Jhcnlfb2JqZWN0LAorICAgICAgICAgICAg
J1BCWEdyb3VwJzogICAgICAgICAgICAgICAgIHByb2plY3QuY3JlYXRlX1BCWEdyb3VwLAorICAg
ICAgICAgICAgJ1BCWFZhcmlhbnRHcm91cCc6ICAgICAgICAgIHByb2plY3QuY3JlYXRlX1BCWFZh
cmlhbnRHcm91cCwKKyAgICAgICAgICAgICdQQlhBZ2dyZWdhdGVUYXJnZXQnOiAgICAgICBwcm9q
ZWN0LmNyZWF0ZV9QQlhUYXJnZXQsCisgICAgICAgICAgICAnUEJYTmF0aXZlVGFyZ2V0JzogICAg
ICAgICAgcHJvamVjdC5jcmVhdGVfUEJYVGFyZ2V0LAorICAgICAgICAgICAgJ1BCWFByb2plY3Qn
OiAgICAgICAgICAgICAgIHByb2plY3QuY3JlYXRlX1BCWFByb2plY3QsCisgICAgICAgICAgICAn
WENCdWlsZENvbmZpZ3VyYXRpb24nOiAgICAgcHJvamVjdC5jcmVhdGVfWENCdWlsZENvbmZpZ3Vy
YXRpb24sCisgICAgICAgICAgICAnWENDb25maWd1cmF0aW9uTGlzdCc6ICAgICAgcHJvamVjdC5j
cmVhdGVfWENDb25maWd1cmF0aW9uTGlzdCwKKyAgICAgICAgfQorICAgICAgICAjIGNvbnRhaW5l
cnMgZm9yIHRlbXBvcmFyeSBvYmplY3RzLCB1c2VkIGZvciBib29ra2VlcGluZworICAgICAgICBz
ZWxmLmFsbF90ZW1wb3Jhcnlfb2JqZWN0cyA9IHNldCgpCisKKyAgICAjIC0tLSB0ZW1wb3Jhcnkg
b2JqZWN0IGNyZWF0aW9uIC0tLQorCisgICAgJycnCisgICAgZGVmIGNyZWF0ZV90ZW1wb3Jhcnlf
b2JqZWN0KHNlbGYsIHVpZCwgaXNhKToKKyAgICAgICAgb2JqID0gVGVtcG9yYXJ5UEJYT2JqZWN0
KHVpZCwgaXNhKQorICAgICAgICBzZWxmLmFsbF90ZW1wb3Jhcnlfb2JqZWN0cy5hZGQob2JqKQor
ICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgcmVwbGFjZV90ZW1wb3JhcnlfZmlsZV9yZWZl
cmVuY2Uoc2VsZiwgdGVtcG9yYXJ5X29iamVjdCwgZmlsZSk6CisgICAgICAgIGFzc2VydCBmaWxl
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpCisgICAgICAgIHVp
ZCA9IHRlbXBvcmFyeV9vYmplY3QudWlkCisgICAgICAgIHVpZC5yZWZlcnJlZF9vYmplY3QgPSBO
b25lCisgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gUEJYRmlsZVJlZmVyZW5jZSh1aWQsIHRlbXBv
cmFyeV9vYmplY3QuaXNhLCBmaWxlKQorICAgICAgICBhc3NlcnQgdWlkLnJlZmVycmVkX29iamVj
dCBpcyBmaWxlX3JlZmVyZW5jZQorICAgICAgICBmaWxlX3JlZmVyZW5jZS5wcm9wZXJ0aWVzID0g
dGVtcG9yYXJ5X29iamVjdC5wcm9wZXJ0aWVzCisgICAgICAgIHNlbGYuYWxsX3RlbXBvcmFyeV9v
YmplY3RzLnJlbW92ZSh0ZW1wb3Jhcnlfb2JqZWN0KQorICAgICAgICBzZWxmLnByb2plY3QuYWRk
X1BCWEZpbGVSZWZlcmVuY2UoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIHJldHVybiBmaWxlX3Jl
ZmVyZW5jZQorICAgICcnJworCisgICAgIyAtLS0gcmVhZGluZyAtLS0KKworICAgIGRlZiByZWFk
bGluZShzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYubGluZToKKyAgICAgICAgICAgIHNl
bGYubGluZSA9IHNlbGYuX2l0ZXIubmV4dCgpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVy
ICs9IDEKKyAgICAgICAgICAgICMgU3RyaXAgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UuCisgICAg
ICAgICAgICBzZWxmLmxpbmUgPSBzZWxmLkNPTU1FTlRfTUFUQ0guc3ViKCcnLCBzZWxmLmxpbmUp
LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHNlbGYubGluZS5zdGFydHN3aXRoKCcvLycpOgorICAg
ICAgICAgICAgICAgIHNlbGYubGluZSA9ICcnCisKKyAgICBkZWYgc2tpcF9uX2NoYXJzKHNlbGYs
IG4pOgorICAgICAgICBzZWxmLmxpbmUgPSBzZWxmLmxpbmVbbjpdLmxzdHJpcCgpCisgICAgICAg
IHNlbGYucmVhZGxpbmUoKQorCisgICAgZGVmIHNraXBfY2hhcihzZWxmLCBjKToKKyAgICAgICAg
c2VsZi52ZXJpZnkoc2VsZi5saW5lLnN0YXJ0c3dpdGgoYyksICJVbmV4cGVjdGVkIGNoYXJhY3Rl
ciAnJWMnIGVuY291bnRlcmVkICgnJWMnIGV4cGVjdGVkKSBpbiBsaW5lICVkISIgJSAoc2VsZi5s
aW5lWzBdLCBjLCBzZWxmLmxpbmVfbnVtYmVyKSkKKyAgICAgICAgc2VsZi5saW5lID0gc2VsZi5s
aW5lWzE6XS5sc3RyaXAoKQorICAgICAgICBzZWxmLnJlYWRsaW5lKCkKKworICAgIGRlZiByZWFk
X21hdGNoKHNlbGYsIHJlZ2V4cCwgZXhwbGFuYXRpb24pOgorICAgICAgICBtYXRjaCA9IHJlZ2V4
cC5tYXRjaChzZWxmLmxpbmUpCisgICAgICAgIHNlbGYudmVyaWZ5KG1hdGNoLCAiQ291bGQgbm90
IHBhcnNlICVzIC0gdW5leHBlY3RlZCBjaGFyYWN0ZXJzICclcycgZW5jb3VudGVyZWQgaW4gbGlu
ZSAlZCEiICUgKGV4cGxhbmF0aW9uLCBzZWxmLmxpbmUsIHNlbGYubGluZV9udW1iZXIpKQorICAg
ICAgICBzZWxmLnNraXBfbl9jaGFycyhtYXRjaC5lbmQoMCkpCisgICAgICAgIHJldHVybiBtYXRj
aC5ncm91cCgwKQorCisgICAgZGVmIHJlYWRfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAg
YXNzZXJ0IHNlbGYubGluZVswXSA9PSAnIicKKyAgICAgICAgbiA9IDEKKyAgICAgICAgd2hpbGUg
c2VsZi5saW5lW25dICE9ICciJzoKKyAgICAgICAgICAgICMgRXNjYXBlICdcJyAtIGp1c3Qgc2tp
cCB0aGUgbmV4dCBjaGFyYWN0ZXIsIHdoYXRldmVyIGl0IGlzLgorICAgICAgICAgICAgaWYgc2Vs
Zi5saW5lW25dID09ICdcXCc6CisgICAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgICAgICBu
ICs9IDEKKyAgICAgICAgdmFsdWUgPSBzZWxmLmxpbmVbMTpuXQorICAgICAgICBzZWxmLnNraXBf
bl9jaGFycyhuICsgMSkKKyAgICAgICAgcmV0dXJuIFhjb2RlUXVvdGVkU3RyaW5nKHZhbHVlKQor
CisgICAgZGVmIHJlYWRfc291cmNlVHJlZShzZWxmKToKKyAgICAgICAgJycnQXZvaWQgdXNpbmcg
WGNvZGVRdW90ZWRTdHJpbmcgZm9yIHNvdXJjZVRyZWUgdmFsdWVzJycnCisgICAgICAgIG4gPSAw
CisgICAgICAgIHdoaWxlIHNlbGYubGluZVtuXSAhPSAnOyc6CisgICAgICAgICAgICBuICs9IDEK
KyAgICAgICAgdmFsdWUgPSBzZWxmLmxpbmVbOm5dLnJzdHJpcCgpCisgICAgICAgIHNlbGYuc2tp
cF9uX2NoYXJzKG4pCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHJlYWRfVUlEKHNl
bGYpOgorICAgICAgICBtYXRjaCA9IFhjb2RlVUlELk1BVENILm1hdGNoKHNlbGYubGluZSkKKyAg
ICAgICAgc2VsZi52ZXJpZnkobWF0Y2gsICJDb3VsZCBub3QgcGFyc2UgVUlEIC0gdW5leHBlY3Rl
ZCBjaGFyYWN0ZXJzICclcycgZW5jb3VudGVyZWQgaW4gbGluZSAlZCEiICUgKHNlbGYubGluZSwg
c2VsZi5saW5lX251bWJlcikpCisgICAgICAgIHNlbGYuc2tpcF9uX2NoYXJzKG1hdGNoLmVuZCgw
KSkKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvamVjdC5lbnN1cmVfVUlEKG1hdGNoLmdyb3VwKDAp
KQorCisgICAgZGVmIHJlYWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJygn
KQorICAgICAgICBsaXN0ID0gW10KKyAgICAgICAgd2hpbGUgc2VsZi5saW5lWzBdICE9ICcpJzoK
KyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5yZWFkX3ZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYu
c2tpcF9jaGFyKCcsJykKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHZhbHVlKQorICAgICAgICBz
ZWxmLnNraXBfY2hhcignKScpCisgICAgICAgIHJldHVybiBsaXN0CisKKyAgICBkZWYgcmVhZF9V
SURfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJygnKQorICAgICAgICBsaXN0
ID0gWGNvZGVVSURMaXN0KCkKKyAgICAgICAgd2hpbGUgc2VsZi5saW5lWzBdICE9ICcpJzoKKyAg
ICAgICAgICAgIHVpZCA9IHNlbGYucmVhZF9VSUQoKQorICAgICAgICAgICAgc2VsZi5za2lwX2No
YXIoJywnKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodWlkKQorICAgICAgICBzZWxmLnNraXBf
Y2hhcignKScpCisgICAgICAgIHJldHVybiBsaXN0CisKKyAgICBkZWYgcmVhZF9vYmplY3Qoc2Vs
Zik6CisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCd7JykKKyAgICAgICAgb2JqZWN0ID0ge30KKyAg
ICAgICAgd2hpbGUgc2VsZi5saW5lWzBdICE9ICd9JzoKKyAgICAgICAgICAgIGlkID0gc2VsZi5y
ZWFkX21hdGNoKHNlbGYuSURfTUFUQ0gsICJwcm9wZXJ0eSBuYW1lIikKKyAgICAgICAgICAgIHNl
bGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5yZWFkX3ZhbHVlKCkK
KyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc7JykKKyAgICAgICAgICAgIG9iamVjdFtpZF0g
PSB2YWx1ZQorICAgICAgICBzZWxmLnNraXBfY2hhcignfScpCisgICAgICAgIHJldHVybiBvYmpl
Y3QKKworICAgIGRlZiByZWFkX3ZhbHVlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxpbmVbMF0g
PT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9vYmplY3QoKQorICAgICAgICBp
ZiBzZWxmLmxpbmVbMF0gPT0gJygnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9saXN0
KCkKKyAgICAgICAgaWYgc2VsZi5saW5lWzBdID09ICciJzoKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLnJlYWRfcXVvdGVkX3N0cmluZygpCisgICAgICAgIG1hdGNoID0gWGNvZGVVSUQuTUFUQ0gu
bWF0Y2goc2VsZi5saW5lWzoyNF0pCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgdWlk
ID0gc2VsZi5wcm9qZWN0LmVuc3VyZV9VSUQobWF0Y2guZ3JvdXAoMCkpCisgICAgICAgICAgICBz
ZWxmLnNraXBfbl9jaGFycyhtYXRjaC5lbmQoMCkpCisgICAgICAgICAgICByZXR1cm4gdWlkCisg
ICAgICAgIG1hdGNoID0gc2VsZi5WQUxVRV9NQVRDSC5tYXRjaChzZWxmLmxpbmUpCisgICAgICAg
IGlmIG1hdGNoOgorICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC5ncm91cCgwKQorICAgICAgICAg
ICAgc2VsZi5za2lwX25fY2hhcnMobWF0Y2guZW5kKDApKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlCisgICAgICAgIHJldHVybiBzZWxmLmVycm9yKCJDb3VsZCBub3QgcGFyc2UgdmFsdWUgJyVz
JyBpbiBsaW5lICVkISIgJSAoc2VsZi5saW5lLCBzZWxmLmxpbmVfbnVtYmVyKSkKKworICAgICMg
UGFyc2luZyBtZXRob2RzIGZvciBpbXBvcnRhbnQgcHJvcGVydHkgbmFtZXMKKyAgICBQUk9QRVJU
WV9OQU1FX1RPX1JFQURfTUVUSE9EID0geworICAgICAgICAnYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UnOiAgIHJlYWRfVUlELAorICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6ICAg
ICAgIHJlYWRfVUlELAorICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9ucyc6ICAgICAgICAgIHJl
YWRfVUlEX2xpc3QsCisgICAgICAgICdidWlsZFBoYXNlcyc6ICAgICAgICAgICAgICAgICAgcmVh
ZF9VSURfbGlzdCwKKyAgICAgICAgJ2NoaWxkcmVuJzogICAgICAgICAgICAgICAgICAgICByZWFk
X1VJRF9saXN0LAorICAgICAgICAnZGVwZW5kZW5jaWVzJzogICAgICAgICAgICAgICAgIHJlYWRf
VUlEX2xpc3QsCisgICAgICAgICdmaWxlUmVmJzogICAgICAgICAgICAgICAgICAgICAgcmVhZF9V
SUQsCisgICAgICAgICdmaWxlcyc6ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9VSURfbGlz
dCwKKyAgICAgICAgJ21haW5Hcm91cCc6ICAgICAgICAgICAgICAgICAgICByZWFkX1VJRCwKKyAg
ICAgICAgJ3Byb2R1Y3RSZWZHcm91cCc6ICAgICAgICAgICAgICByZWFkX1VJRCwKKyAgICAgICAg
J3JlbW90ZUdsb2JhbElEU3RyaW5nJzogICAgICAgICByZWFkX1VJRCwKKyAgICAgICAgJ3NvdXJj
ZVRyZWUnOiAgICAgICAgICAgICAgICAgICByZWFkX3NvdXJjZVRyZWUsCisgICAgICAgICd0YXJn
ZXRzJzogICAgICAgICAgICAgICAgICAgICAgcmVhZF9VSURfbGlzdCwKKyAgICB9CisKKyAgICBk
ZWYgcmVhZF9wYnhfb2JqZWN0KHNlbGYsIHVpZCk6CisgICAgICAgIHNlbGYudmVyaWZ5KHVpZCBu
b3QgaW4gc2VsZi5wcm9qZWN0LmFsbF9vYmplY3RzLCAiT2JqZWN0ICVzIGFscmVhZHkgaGFzIGEg
ZGVmaW5pdGlvbiAtIGxpbmUgJWQiICUgKHVpZCwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAg
IHNlbGYuc2tpcF9jaGFyKCd7JykKKyAgICAgICAgIyBSZWFkICdpc2EnIGF0dHJpYnV0ZSBhbmQg
aW5zdGFudGlhdGUgYXBwcm9wcmlhdGUgY2xhc3Mgb2JqZWN0LgorICAgICAgICAjIE5PVEU6IGJl
bG93IGNvZGUgYXNzdW1lcyB0aGUgJ2lzYScgYXR0cmlidXRlIGlzIGFsd2F5cyBsaXN0ZWQgZmly
c3QuCisgICAgICAgIHNlbGYudmVyaWZ5KHNlbGYubGluZS5zdGFydHN3aXRoKCdpc2EnKSwgIkV4
cGVjdGVkICdpc2EnIGF0dHJpYnV0ZSwgZm91bmQgJyVzJyBpbnN0ZWFkIC0gaW4gbGluZSAlZCEi
ICUgKHNlbGYubGluZSwgc2VsZi5saW5lX251bWJlcikpCisgICAgICAgIHNlbGYuc2tpcF9uX2No
YXJzKDMpCisgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgaXNhID0gc2VsZi5y
ZWFkX21hdGNoKHNlbGYuSURfTUFUQ0gsICInaXNhJyB2YWx1ZSIpCisgICAgICAgIHBieF9vYmpl
Y3QgPSBzZWxmLmlzYV90b19jcmVhdGVfbWV0aG9kLmdldChpc2EsIHNlbGYucHJvamVjdC5jcmVh
dGVfUEJYQXJiaXRyYXJ5T2JqZWN0KSh1aWQsIGlzYSkKKyAgICAgICAgc2VsZi5za2lwX2NoYXIo
JzsnKQorICAgICAgICAjIHJlYWQgcmVtYWluaW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgd2hpbGUg
c2VsZi5saW5lWzBdICE9ICd9JzoKKyAgICAgICAgICAgIGlkID0gc2VsZi5yZWFkX21hdGNoKHNl
bGYuSURfTUFUQ0gsICJkaWN0aW9uYXJ5IGtleSIpCisgICAgICAgICAgICBzZWxmLnNraXBfY2hh
cignPScpCisgICAgICAgICAgICBwYnhfb2JqZWN0LnByb3BlcnRpZXNbaWRdID0gWGNvZGVQcm9q
ZWN0UmVhZGVyLlBST1BFUlRZX05BTUVfVE9fUkVBRF9NRVRIT0QuZ2V0KGlkLCBYY29kZVByb2pl
Y3RSZWFkZXIucmVhZF92YWx1ZSkoc2VsZikKKyAgICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc7
JykKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJ30nKQorCisgICAgZGVmIHJlYWRfb2JqZWN0cyhz
ZWxmKToKKyAgICAgICAgc2VsZi5za2lwX2NoYXIoJ3snKQorICAgICAgICB3aGlsZSBzZWxmLmxp
bmVbMF0gIT0gJ30nOgorICAgICAgICAgICAgdWlkID0gc2VsZi5yZWFkX1VJRCgpCisgICAgICAg
ICAgICBzZWxmLnNraXBfY2hhcignPScpCisgICAgICAgICAgICBzZWxmLnJlYWRfcGJ4X29iamVj
dCh1aWQpCisgICAgICAgICAgICBzZWxmLnNraXBfY2hhcignOycpCisgICAgICAgIHNlbGYuc2tp
cF9jaGFyKCd9JykKKworICAgIGRlZiByZWFkX21haW5fb2JqZWN0KHNlbGYpOgorICAgICAgICBz
ZWxmLnNraXBfY2hhcigneycpCisgICAgICAgIHNlbGYucHJvamVjdC5tYWluX29iamVjdCA9IHt9
CisgICAgICAgIHdoaWxlIHNlbGYubGluZVswXSAhPSAnfSc6CisgICAgICAgICAgICBpZCA9IHNl
bGYucmVhZF9tYXRjaChzZWxmLklEX01BVENILCAibWFpbiBvYmplY3QgYXR0cmlidXRlIikKKyAg
ICAgICAgICAgIHNlbGYuc2tpcF9jaGFyKCc9JykKKyAgICAgICAgICAgIGlmIGlkID09ICdvYmpl
Y3RzJzoKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRfb2JqZWN0cygpCisgICAgICAgICAgICAg
ICAgc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0WydvYmplY3RzJ10gPSBzZWxmLnByb2plY3QuYWxs
X29iamVjdHMKKyAgICAgICAgICAgIGVsaWYgaWQgPT0gJ3Jvb3RPYmplY3QnOgorICAgICAgICAg
ICAgICAgIHNlbGYucHJvamVjdC5tYWluX29iamVjdFsncm9vdE9iamVjdCddID0gc2VsZi5yZWFk
X1VJRCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHJvamVjdC5t
YWluX29iamVjdFtpZF0gPSBzZWxmLnJlYWRfdmFsdWUoKQorICAgICAgICAgICAgc2VsZi5za2lw
X2NoYXIoJzsnKQorICAgICAgICAjIERvbid0IHVzZSBzZWxmLnNraXBfY2hhcignfScpIGJlbG93
LCB0byBhdm9pZCBoYXZpbmcgdG8gaGFuZGxlIHRoZSBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbgor
ICAgICAgICBhc3NlcnQgc2VsZi5saW5lLnN0YXJ0c3dpdGgoJ30nKQorICAgICAgICByZXR1cm4g
c2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0CisKKyAgICBkZWYgcmVhZF9wcm9qZWN0X2ZpbGUoc2Vs
ZiwgcGF0aCk6CisgICAgICAgIHNlbGYuaW5mbygiUmVhZGluZyBYY29kZSBwcm9qZWN0IGZpbGUg
ZnJvbSAlcyIgJSBwYXRoKQorICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisgICAgICAgIHNlbGYu
bGluZSA9ICcnCisgICAgICAgIHdpdGggc2VsZi5maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zv
cl9yZWFkaW5nKHBhdGgpIGFzIHNlbGYuZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2l0ZXIgPSBp
dGVyKHNlbGYuZmlsZSkKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmUoKQorICAgICAgICAgICAg
c2VsZi5yZWFkX21haW5fb2JqZWN0KCkKKyAgICAgICAgc2VsZi5kZWJ1ZygiUG9zdHByb2Nlc3Np
bmcuLi4iKQorICAgICAgICBzZWxmLnZlcmlmeV9yb290X29iamVjdCgpCisgICAgICAgIHNlbGYu
cG9zdHByb2Nlc3NfbWFpbl9ncm91cCgpCisgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfYnVpbGRf
ZmlsZXMoKQorICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2J1aWxkX3BoYXNlcygpCisgICAgICAg
IHNlbGYucG9zdHByb2Nlc3NfY29uZmlndXJhdGlvbl9saXN0cygpCisgICAgICAgIHNlbGYucG9z
dHByb2Nlc3NfdGFyZ2V0cygpCisgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfcHJvamVjdCgpCisg
ICAgICAgIHNlbGYudmVyaWZ5X2FsbF9vYmplY3RzKCkKKyAgICAgICAgc2VsZi5kZWJ1ZygiRG9u
ZSAtIGEgdG90YWwgb2YgJWQgb2JqZWN0cyBzdG9yZWQiICUgbGVuKHNlbGYucHJvamVjdC5hbGxf
b2JqZWN0cykpCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lID0g
JycKKworICAgICMgLS0tIHBvc3Rwcm9jZXNzaW5nIC0tLQorCisgICAgZGVmIGVuc3VyZV9wcm9w
ZXJ0eShzZWxmLCBvYmplY3QsIHByb3BlcnR5X25hbWUsIGNscyk6CisgICAgICAgIGlmIHByb3Bl
cnR5X25hbWUgbm90IGluIG9iamVjdC5wcm9wZXJ0aWVzOgorICAgICAgICAgICAgc2VsZi53YXJu
aW5nKCIlcyBoYXMgbm8gcHJvcGVydHkgJyVzJyAtIGFkZGluZyBpdCEiICUgKG9iamVjdCwgcHJv
cGVydHlfbmFtZSkpCisgICAgICAgICAgICBvYmplY3QucHJvcGVydGllc1twcm9wZXJ0eV9uYW1l
XSA9IGNscygpCisgICAgICAgIHJldHVybiBvYmplY3QucHJvcGVydGllc1twcm9wZXJ0eV9uYW1l
XQorCisgICAgZGVmIGRpcmVjdG9yeV9mcm9tX3NvdXJjZVRyZWUoc2VsZiwgb2JqZWN0LCBjb250
YWluZXJfZGlyZWN0b3J5KToKKyAgICAgICAgYXNzZXJ0IGNvbnRhaW5lcl9kaXJlY3RvcnkKKyAg
ICAgICAgaWYgbm90ICdzb3VyY2VUcmVlJyBpbiBvYmplY3QucHJvcGVydGllczoKKyAgICAgICAg
ICAgIHNlbGYud2FybmluZygiJXMgZG9lcyBub3QgY29udGFpbiAnc291cmNlVHJlZScgcHJvcGVy
dHkgLSBhc3N1bWluZyBcIjxncm91cD5cIiIgJSBvYmplY3QpCisgICAgICAgICAgICBvYmplY3Qu
cHJvcGVydGllc1snc291cmNlVHJlZSddID0gJyI8Z3JvdXA+IicKKyAgICAgICAgc291cmNlVHJl
ZSA9IG9iamVjdC5wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10KKyAgICAgICAgaWYgc291cmNlVHJl
ZSA9PSAnIjxncm91cD4iJzoKKyAgICAgICAgICAgIHJldHVybiBjb250YWluZXJfZGlyZWN0b3J5
CisgICAgICAgIHNlbGYudmVyaWZ5KHNvdXJjZVRyZWUgaW4gc2VsZi5wcm9qZWN0LnZhcmlhYmxl
X3RvX2RpcmVjdG9yeSwgIkVuY291bnRlcmVkIHVua25vd24gJ3NvdXJjZVRyZWUnIHByb3BlcnR5
IGluICVzISIgJSBvYmplY3QpCisgICAgICAgIHJldHVybiBzZWxmLnByb2plY3QudmFyaWFibGVf
dG9fZGlyZWN0b3J5W3NvdXJjZVRyZWVdCisKKyAgICBkZWYgZGlyZWN0b3J5X2Zyb21fc291cmNl
VHJlZV9hbmRfcGF0aChzZWxmLCBvYmplY3QsIGNvbnRhaW5lcl9kaXJlY3RvcnkpOgorICAgICAg
ICBwYXJlbnRfZGlyZWN0b3J5ID0gc2VsZi5kaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVlKG9iamVj
dCwgY29udGFpbmVyX2RpcmVjdG9yeSkKKyAgICAgICAgcGF0aCA9IG9iamVjdC5wcm9wZXJ0aWVz
LmdldCgncGF0aCcsICcnKQorICAgICAgICByZXR1cm4gc2VsZi5jb21tb24uZW5zdXJlX3N1YmRp
cmVjdG9yeV9wYXRoKHBhcmVudF9kaXJlY3RvcnksIHBhdGgpCisKKyAgICBkZWYgZmlsZV9mcm9t
X3NvdXJjZVRyZWVfYW5kX3BhdGgoc2VsZiwgb2JqZWN0LCBjb250YWluZXJfZGlyZWN0b3J5KToK
KyAgICAgICAgcGFyZW50X2RpcmVjdG9yeSA9IHNlbGYuZGlyZWN0b3J5X2Zyb21fc291cmNlVHJl
ZShvYmplY3QsIGNvbnRhaW5lcl9kaXJlY3RvcnkpCisgICAgICAgIHBhdGggPSBvYmplY3QucHJv
cGVydGllcy5nZXQoJ3BhdGgnLCAnJykKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbW9uLmVuc3Vy
ZV9maWxlX3BhdGgocGFyZW50X2RpcmVjdG9yeSwgcGF0aCkKKworICAgIGRlZiB2ZXJpZnlfcm9v
dF9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5KCdvYmplY3RzJyBpbiBzZWxmLnBy
b2plY3QubWFpbl9vYmplY3QsICJEaWQgbm90IGZpbmQgYW4gJ29iamVjdHMnIGVudHJ5IHdpdGhp
biB0aGUgbWFpbiBwcm9qZWN0IG9iamVjdCEiKQorICAgICAgICBzZWxmLnZlcmlmeSgncm9vdE9i
amVjdCcgaW4gc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0LCAiRGlkIG5vdCBmaW5kIGEgJ3Jvb3RP
YmplY3QnIGVudHJ5IHdpdGhpbiB0aGUgbWFpbiBwcm9qZWN0IG9iamVjdCEiKQorICAgICAgICBz
ZWxmLnZlcmlmeShzZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QsICJEaWQgbm90IGZpbmQgYSBQ
QlhQcm9qZWN0IG9iamVjdCB3aXRoaW4gdGhlIHByb2plY3QgZmlsZSEiKQorICAgICAgICByb290
X29iamVjdF91aWQgPSBzZWxmLnByb2plY3QubWFpbl9vYmplY3RbJ3Jvb3RPYmplY3QnXQorICAg
ICAgICBzZWxmLnZlcmlmeShyb290X29iamVjdF91aWQucmVmZXJyZWRfb2JqZWN0LCAiJ3Jvb3RP
YmplY3QnIG9mIHRoZSBwcm9qZWN0IHJlZmVycyB0byBhbiB1bmtub3duIGVudGl0eSAnJXMnISIg
JSByb290X29iamVjdF91aWQpCisgICAgICAgIHNlbGYudmVyaWZ5KHJvb3Rfb2JqZWN0X3VpZCA9
PSBzZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QudWlkLCAiVGhlICdyb290T2JqZWN0JyBVSUQg
JXMgaW4gdGhlIHByb2plY3QgZmlsZSBkaWZmZXJzIGZyb20gdGhlIFBCWFByb2plY3QncyBVSUQg
JXMhIiAlIChyb290X29iamVjdF91aWQsIHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdC51aWQp
KQorICAgICAgICBhc3NlcnQgcm9vdF9vYmplY3RfdWlkLnJlZmVycmVkX29iamVjdCBpcyBzZWxm
LnByb2plY3QucHJvamVjdF9vYmplY3QKKworICAgIGRlZiBwb3N0cHJvY2Vzc19tYWluX2dyb3Vw
KHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeSgnbWFpbkdyb3VwJyBpbiBzZWxmLnByb2plY3Qu
cHJvamVjdF9vYmplY3QucHJvcGVydGllcywgIkRpZCBub3QgZmluZCBhICdtYWluR3JvdXAnIGVu
dHJ5IGluIHRoZSBQQlhQcm9qZWN0IG9iamVjdCEiKQorICAgICAgICBtYWluX2dyb3VwX3VpZCA9
IHNlbGYucHJvamVjdC5wcm9qZWN0X29iamVjdC5wcm9wZXJ0aWVzWydtYWluR3JvdXAnXQorICAg
ICAgICBzZWxmLnZlcmlmeShtYWluX2dyb3VwX3VpZC5yZWZlcnJlZF9vYmplY3QsICJEaWQgbm90
IGZpbmQgbWFpbiBncm91cCAlcyBlbnRyeSB3aXRoaW4gdGhlIHByb2plY3QgZmlsZSEiICUgbWFp
bl9ncm91cF91aWQpCisgICAgICAgIG1haW5fZ3JvdXAgPSBtYWluX2dyb3VwX3VpZC5yZWZlcnJl
ZF9vYmplY3QKKyAgICAgICAgc2VsZi52ZXJpZnkoaXNpbnN0YW5jZShtYWluX2dyb3VwLCBQQlhH
cm91cCksICIlcyByZWZlcnJlZCBhcyAnbWFpbkdyb3VwJyBpbiAlcyBpcyBub3QgYSBQQlhHcm91
cCBvYmplY3QhIiAlIChtYWluX2dyb3VwLCBzZWxmLnByb2plY3QucHJvamVjdF9vYmplY3QpKQor
ICAgICAgICBzZWxmLnByb2plY3QuX3NldF9tYWluX2dyb3VwKG1haW5fZ3JvdXApCisgICAgICAg
IG1haW5fZ3JvdXAuX3NldF9kaXJlY3Rvcnkoc2VsZi5kaXJlY3RvcnlfZnJvbV9zb3VyY2VUcmVl
X2FuZF9wYXRoKG1haW5fZ3JvdXAsIHNlbGYucHJvamVjdC52YXJpYWJsZV90b19kaXJlY3Rvcnlb
J1NPVVJDRV9ST09UJ10pKQorICAgICAgICBzZWxmLnByb2plY3QuZGlyZWN0b3J5X3RvX2dyb3Vw
cy5zZXRkZWZhdWx0KG1haW5fZ3JvdXAuZGlyZWN0b3J5LCBbXSkuYXBwZW5kKG1haW5fZ3JvdXAp
CisgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfZ3JvdXBfY2hpbGRyZW4obWFpbl9ncm91cCkKKwor
ICAgIGRlZiBwb3N0cHJvY2Vzc19ncm91cF9jaGlsZHJlbihzZWxmLCBncm91cCk6CisgICAgICAg
IGNoaWxkcmVuID0gc2VsZi5lbnN1cmVfcHJvcGVydHkoZ3JvdXAsICdjaGlsZHJlbicsIFhjb2Rl
VUlETGlzdCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY2hpbGRyZW4sIFhjb2RlVUlETGlz
dCkKKyAgICAgICAgZm9yIHVpZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJy
ZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgY2hpbGQgd2l0aCAlcycgdGhhdCBjb3VsZCBub3Qg
YmUgZm91bmQgd2l0aGluIHRoZSBwcm9qZWN0ISIgJSAoZ3JvdXAsIHVpZCkpCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBCWEdyb3VwKToKKyAgICAgICAg
ICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX3N1Ymdyb3VwKHVpZC5yZWZlcnJlZF9vYmplY3QsIGdy
b3VwKQorICAgICAgICAgICAgICAgIGdyb3VwLl9hZGRfZ3JvdXAodWlkLnJlZmVycmVkX29iamVj
dCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh1aWQucmVmZXJyZWRfb2JqZWN0LCBQQlhG
aWxlUmVmZXJlbmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2ZpbGVfcmVm
ZXJlbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIGdyb3VwKQorICAgICAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHVpZC5yZWZlcnJlZF9vYmplY3QsIFBCWFZhcmlhbnRHcm91cCk6CisgICAgICAgICAg
ICAgICAgc2VsZi5wb3N0cHJvY2Vzc192YXJpYW50X2dyb3VwKHVpZC5yZWZlcnJlZF9vYmplY3Qs
IGdyb3VwKQorICAgICAgICAgICAgICAgIGdyb3VwLl9hZGRfdmFyaWFudF9ncm91cCh1aWQucmVm
ZXJyZWRfb2JqZWN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmVy
cm9yKCJNYWluIGdyb3VwICVzIGNvbnRhaW5zICdjaGlsZHJlbicgZW50cnkgJXMgLSBQQlhGaWxl
UmVmZXJlbmNlLCBQQlhHcm91cCBvciBQQlhWYXJpYW50R3JvdXAgZXhwZWN0ZWQhIiAlIChtYWlu
X2dyb3VwLCB1aWQucmVmZXJyZWRfb2JqZWN0KSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc19zdWJn
cm91cChzZWxmLCBncm91cCwgY29udGFpbmluZ19ncm91cCk6CisgICAgICAgIGFzc2VydCBub3Qg
Z3JvdXAuZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBjb250YWluaW5nX2dyb3VwCisgICAgICAg
IGFzc2VydCBjb250YWluaW5nX2dyb3VwLmRpcmVjdG9yeQorICAgICAgICBzZWxmLnZlcmlmeShu
b3QgZ3JvdXAuY29udGFpbmVyLCAiUG9zdHByb2Nlc3NpbmcgJXM6IHdhcyBhbHJlYWR5IHByZXZp
b3VzbHkgcmVmZXJlbmNlZCBieSAlcyEiICUgKGdyb3VwLCBncm91cC5jb250YWluZXIpKQorICAg
ICAgICBncm91cC5fc2V0X2NvbnRhaW5lcihjb250YWluaW5nX2dyb3VwKQorICAgICAgICBncm91
cC5fc2V0X2RpcmVjdG9yeShzZWxmLmRpcmVjdG9yeV9mcm9tX3NvdXJjZVRyZWVfYW5kX3BhdGgo
Z3JvdXAsIGNvbnRhaW5pbmdfZ3JvdXAuZGlyZWN0b3J5KSkKKyAgICAgICAgc2VsZi5wcm9qZWN0
LmRpcmVjdG9yeV90b19ncm91cHMuc2V0ZGVmYXVsdChncm91cC5kaXJlY3RvcnksIFtdKS5hcHBl
bmQoZ3JvdXApCisgICAgICAgIHNlbGYucG9zdHByb2Nlc3NfZ3JvdXBfY2hpbGRyZW4oZ3JvdXAp
CisKKyAgICBkZWYgcG9zdHByb2Nlc3NfZmlsZV9yZWZlcmVuY2Uoc2VsZiwgZmlsZV9yZWZlcmVu
Y2UsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2VydCBjb250YWluZXIKKyAgICAgICAgYXNzZXJ0
IGNvbnRhaW5lci5kaXJlY3RvcnkKKyAgICAgICAgaWYgZmlsZV9yZWZlcmVuY2UuY29udGFpbmVy
OgorICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiAl
cyAtIG5vdCBhZGRpbmcgdG8gJXMhIiAlIChmaWxlX3JlZmVyZW5jZSwgZmlsZV9yZWZlcmVuY2Uu
Y29udGFpbmVyLCBjb250YWluZXIpKQorICAgICAgICAgICAgYXNzZXJ0IGZpbGVfcmVmZXJlbmNl
LmZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgZmlsZV9yZWZlcmVu
Y2UuZmlsZQorICAgICAgICAgICAgZmlsZSA9IHNlbGYuZmlsZV9mcm9tX3NvdXJjZVRyZWVfYW5k
X3BhdGgoZmlsZV9yZWZlcmVuY2UsIGNvbnRhaW5lci5kaXJlY3RvcnkpCisgICAgICAgICAgICBm
aWxlX3JlZmVyZW5jZS5fc2V0X2ZpbGUoZmlsZSkKKyAgICAgICAgICAgIHNlbGYucHJvamVjdC5m
aWxlX3RvX2ZpbGVfcmVmZXJlbmNlcy5zZXRkZWZhdWx0KGZpbGUsIHNldCgpKS5hZGQoZmlsZV9y
ZWZlcmVuY2UpCisgICAgICAgICAgICBmaWxlX3JlZmVyZW5jZS5fc2V0X2NvbnRhaW5lcihjb250
YWluZXIpCisgICAgICAgICAgICBjb250YWluZXIuX2FkZF9maWxlX3JlZmVyZW5jZShmaWxlX3Jl
ZmVyZW5jZSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc192YXJpYW50X2dyb3VwKHNlbGYsIHZhcmlh
bnRfZ3JvdXAsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2VydCBjb250YWluZXIKKyAgICAgICAg
YXNzZXJ0IGNvbnRhaW5lci5kaXJlY3RvcnkKKyAgICAgICAgIyBsaW5rIGNvbnRhaW5lcgorICAg
ICAgICBzZWxmLnZlcmlmeShub3QgdmFyaWFudF9ncm91cC5jb250YWluZXIsICJQb3N0cHJvY2Vz
c2luZyAlczogd2FzIGFscmVhZHkgcHJldmlvdXNseSByZWZlcmVuY2VkIGJ5ICVzISIgJSAodmFy
aWFudF9ncm91cCwgdmFyaWFudF9ncm91cC5jb250YWluZXIpKQorICAgICAgICB2YXJpYW50X2dy
b3VwLl9zZXRfY29udGFpbmVyKGNvbnRhaW5lcikKKyAgICAgICAgIyBsaW5rIGRpcmVjdG9yeQor
ICAgICAgICB2YXJpYW50X2dyb3VwLl9zZXRfZGlyZWN0b3J5KHNlbGYuZGlyZWN0b3J5X2Zyb21f
c291cmNlVHJlZV9hbmRfcGF0aCh2YXJpYW50X2dyb3VwLCBjb250YWluZXIuZGlyZWN0b3J5KSkK
KyAgICAgICAgIyBsaW5rICdjaGlsZHJlbicgZmlsZSByZWZlcmVuY2VzCisgICAgICAgIGNoaWxk
cmVuID0gc2VsZi5lbnN1cmVfcHJvcGVydHkodmFyaWFudF9ncm91cCwgJ2NoaWxkcmVuJywgWGNv
ZGVVSURMaXN0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjaGlsZHJlbiwgWGNvZGVVSURM
aXN0KQorICAgICAgICBmb3IgdWlkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgYXNzZXJ0IGlz
aW5zdGFuY2UodWlkLCBYY29kZVVJRCkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KHVpZC5yZWZl
cnJlZF9vYmplY3QsICIlcyByZWZlcnMgdG8gYSBjaGlsZCB3aXRoICVzJyB0aGF0IGNvdWxkIG5v
dCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3QhIiAlICh2YXJpYW50X2dyb3VwLCB1aWQpKQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh1aWQucmVmZXJyZWRfb2JqZWN0LCBQQlhGaWxlUmVm
ZXJlbmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2ZpbGVfcmVmZXJlbmNl
KHVpZC5yZWZlcnJlZF9vYmplY3QsIHZhcmlhbnRfZ3JvdXApCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIiVzIGNvbnRhaW5zICdjaGlsZHJlbicgZW50cnkg
JXMgLSBQQlhGaWxlUmVmZXJlbmNlIGV4cGVjdGVkISIgJSAodmFyaWFudF9ncm91cCwgdWlkLnJl
ZmVycmVkX29iamVjdCkpCisKKyAgICBkZWYgcG9zdHByb2Nlc3NfYnVpbGRfZmlsZXMoc2VsZik6
CisgICAgICAgIGZvciBidWlsZF9maWxlIGluIHNlbGYucHJvamVjdC5hbGxfYnVpbGRfZmlsZXM6
CisgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2J1aWxkX2ZpbGUoYnVpbGRfZmlsZSkKKwor
ICAgIGRlZiBwb3N0cHJvY2Vzc19idWlsZF9maWxlKHNlbGYsIGJ1aWxkX2ZpbGUpOgorICAgICAg
ICAjIGxpbmsgZmlsZSByZWZlcmVuY2VzCisgICAgICAgIHNlbGYudmVyaWZ5KCdmaWxlUmVmJyBp
biBidWlsZF9maWxlLnByb3BlcnRpZXMsICIlcyBkb2VzIG5vdCBjb250YWluIGEgJ2ZpbGVSZWYn
IHByb3BlcnR5ISIgJSBidWlsZF9maWxlKQorICAgICAgICB1aWQgPSBidWlsZF9maWxlLnByb3Bl
cnRpZXNbJ2ZpbGVSZWYnXQorICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0
LCAiJXM6ICdmaWxlUmVmJyBwcm9wZXJ0eSAlcyBpcyB1bmtub3duISIgJSAoYnVpbGRfZmlsZSwg
dWlkKSkKKyAgICAgICAgZmlsZVJlZiA9IHVpZC5yZWZlcnJlZF9vYmplY3QKKyAgICAgICAgc2Vs
Zi52ZXJpZnkoaXNpbnN0YW5jZShmaWxlUmVmLCBQQlhGaWxlUmVmZXJlbmNlKSBvciBpc2luc3Rh
bmNlKGZpbGVSZWYsIFBCWFZhcmlhbnRHcm91cCksICIlczogJ2ZpbGVSZWYnIHByb3BlcnR5IHBv
aW50cyB0byAlcyAtIFBCWEZpbGVSZWZlcmVuY2Ugb3IgUEJYVmFyaWFudEdyb3VwIGV4cGVjdGVk
ISIgJSAoYnVpbGRfZmlsZSwgZmlsZVJlZikpCisgICAgICAgIGJ1aWxkX2ZpbGUuX3NldF9maWxl
UmVmKGZpbGVSZWYpCisKKyAgICBkZWYgcG9zdHByb2Nlc3NfYnVpbGRfcGhhc2VzKHNlbGYpOgor
ICAgICAgICBmb3IgYnVpbGRfcGhhc2UgaW4gc2VsZi5wcm9qZWN0LmFsbF9idWlsZF9waGFzZXM6
CisgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNzX2J1aWxkX3BoYXNlKGJ1aWxkX3BoYXNlKQor
CisgICAgZGVmIHBvc3Rwcm9jZXNzX2J1aWxkX3BoYXNlKHNlbGYsIGJ1aWxkX3BoYXNlKToKKyAg
ICAgICAgIyBsaW5rIGJ1aWxkIGZpbGVzCisgICAgICAgIGZpbGVzID0gc2VsZi5lbnN1cmVfcHJv
cGVydHkoYnVpbGRfcGhhc2UsICdmaWxlcycsIFhjb2RlVUlETGlzdCkKKyAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2UoZmlsZXMsIFhjb2RlVUlETGlzdCkKKyAgICAgICAgZm9yIHVpZCBpbiBmaWxl
czoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAg
ICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2Zp
bGVzJyBlbnRyeSAlcyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2plY3Qh
IiAlIChidWlsZF9waGFzZSwgdWlkKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJl
ZmVycmVkX29iamVjdCwgUEJYQnVpbGRGaWxlKToKKyAgICAgICAgICAgICAgICBidWlsZF9maWxl
ID0gdWlkLnJlZmVycmVkX29iamVjdAorICAgICAgICAgICAgICAgIGlmIGJ1aWxkX2ZpbGUuYnVp
bGRfcGhhc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudmVyaWZ5KGJ1aWxkX2ZpbGUuYnVp
bGRfcGhhc2UgaXMgYnVpbGRfcGhhc2UsICIlcyByZWZlcnMgdG8gYSAlcywgYnV0IHRoYXQgd2Fz
IGFscmVhZHkgcHJldmlvdXNseSByZWZlcmVuY2VkIGJ5ICVzISIgJSAoYnVpbGRfcGhhc2UsIGJ1
aWxkX2ZpbGUsIGJ1aWxkX2ZpbGUuYnVpbGRfcGhhc2UpKQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLndhcm5pbmcoIiVzIGNvbnRhaW5zIGR1cGxpY2F0ZWQgZW50cnkgZm9yICVzIC0gZGlzY2Fy
ZGluZyBkdXBsaWNhdGVzISIgJSAoYnVpbGRfcGhhc2UsIGJ1aWxkX2ZpbGUpKQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ZpbGUuX3NldF9idWlsZF9w
aGFzZShidWlsZF9waGFzZSkKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRfcGhhc2UuX2FkZF9i
dWlsZF9maWxlKGJ1aWxkX2ZpbGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHNlbGYuZXJyb3IoIiVzIGNvbnRhaW5zICdmaWxlcycgZW50cnkgJXMgLSBQQlhCdWlsZEZpbGUg
ZXhwZWN0ZWQhIiAlIChidWlsZF9waGFzZSwgdWlkLnJlZmVycmVkX29iamVjdCkpCisgICAgICAg
ICMgUmVtb3ZlIGFueSBkdXBsaWNhdGVzCisgICAgICAgIGJ1aWxkX3BoYXNlLnByb3BlcnRpZXNb
J2ZpbGVzJ10gPSBYY29kZVVJRExpc3Qoc2V0KGZpbGVzKSkKKworICAgIGRlZiBwb3N0cHJvY2Vz
c19jb25maWd1cmF0aW9uX2xpc3RzKHNlbGYpOgorICAgICAgICBmb3IgY29uZmlndXJhdGlvbl9s
aXN0IGluIHNlbGYucHJvamVjdC5hbGxfY29uZmlndXJhdGlvbl9saXN0czoKKyAgICAgICAgICAg
IHNlbGYucG9zdHByb2Nlc3NfY29uZmlndXJhdGlvbl9saXN0KGNvbmZpZ3VyYXRpb25fbGlzdCkK
KworICAgIGRlZiBwb3N0cHJvY2Vzc19jb25maWd1cmF0aW9uX2xpc3Qoc2VsZiwgY29uZmlndXJh
dGlvbl9saXN0KToKKyAgICAgICAgc2VsZi52ZXJpZnkoJ2J1aWxkQ29uZmlndXJhdGlvbnMnIGlu
IGNvbmZpZ3VyYXRpb25fbGlzdC5wcm9wZXJ0aWVzLCAiJXMgZG9lcyBub3QgY29udGFpbiBhICdi
dWlsZENvbmZpZ3VyYXRpb25zJyBwcm9wZXJ0eSEiICUgY29uZmlndXJhdGlvbl9saXN0KQorICAg
ICAgICBidWlsZF9jb25maWd1cmF0aW9ucyA9IGNvbmZpZ3VyYXRpb25fbGlzdC5wcm9wZXJ0aWVz
WydidWlsZENvbmZpZ3VyYXRpb25zJ10KKyAgICAgICAgZm9yIHVpZCBpbiBidWlsZF9jb25maWd1
cmF0aW9uczoKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisg
ICAgICAgICAgICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRv
IGEgJ2J1aWxkQ29uZmlndXJhdGlvbnMnIGVudHJ5ICVzIHRoYXQgY291bGQgbm90IGJlIGZvdW5k
IHdpdGhpbiB0aGUgcHJvamVjdCEiICUgKGNvbmZpZ3VyYXRpb25fbGlzdCwgdWlkKSkKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVjdCwgWENCdWlsZENvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb24gPSB1aWQucmVmZXJy
ZWRfb2JqZWN0CisgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnkobm90IGJ1aWxkX2NvbmZpZ3Vy
YXRpb24uY29uZmlndXJhdGlvbl9saXN0LCAiJXMgcmVmZXJzIHRvIGEgJXMsIGJ1dCB0aGF0IHdh
cyBhbHJlYWR5IHByZXZpb3VzbHkgcmVmZXJlbmNlZCBieSAlcyEiICUgKGNvbmZpZ3VyYXRpb25f
bGlzdCwgYnVpbGRfY29uZmlndXJhdGlvbiwgYnVpbGRfY29uZmlndXJhdGlvbi5jb25maWd1cmF0
aW9uX2xpc3QpKQorICAgICAgICAgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb24uX3NldF9jb25m
aWd1cmF0aW9uX2xpc3QoY29uZmlndXJhdGlvbl9saXN0KQorICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb25fbGlzdC5fYXBwZW5kX2J1aWxkX2NvbmZpZ3VyYXRpb24oYnVpbGRfY29uZmlndXJh
dGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiJXMg
Y29udGFpbnMgJ2J1aWxkQ29uZmlndXJhdGlvbnMnIGVudHJ5ICVzIC0gWENCdWlsZENvbmZpZ3Vy
YXRpb24gZXhwZWN0ZWQhIiAlIChidWlsZF9waGFzZSwgdWlkLnJlZmVycmVkX29iamVjdCkpCisK
KyAgICBkZWYgcG9zdHByb2Nlc3NfdGFyZ2V0cyhzZWxmKToKKyAgICAgICAgZm9yIHRhcmdldCBp
biBzZWxmLnByb2plY3QuYWxsX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLnBvc3Rwcm9jZXNz
X3RhcmdldCh0YXJnZXQpCisgICAgICAgIHNlbGYudmVyaWZ5KHNlbGYucHJvamVjdC5tYWluX3Rh
cmdldCwgIkNvdWxkIG5vdCBsb2NhdGUgbWFpbiB0YXJnZXQgJyVzJyBpbiBwcm9qZWN0ISIgJSBz
ZWxmLnByb2plY3QubWFpbl90YXJnZXRfbmFtZSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc190YXJn
ZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIyBsaW5rIGNvbmZpZ3VyYXRpb24gbGlzdAorICAg
ICAgICBzZWxmLnZlcmlmeSgnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgaW4gdGFyZ2V0LnByb3Bl
cnRpZXMsICIlcyBkb2VzIG5vdCBjb250YWluIGEgJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnIHBy
b3BlcnR5ISIgJSB0YXJnZXQpCisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQg
PSB0YXJnZXQucHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9uTGlzdCddCisgICAgICAgIHNl
bGYudmVyaWZ5KGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2JqZWN0LCAi
JyVzOiAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgcHJvcGVydHkgJXMgaXMgdW5rbm93biEiICUg
KHRhcmdldCwgYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZCkpCisgICAgICAgIHNlbGYudmVy
aWZ5KGlzaW5zdGFuY2UoYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmpl
Y3QsIFhDQ29uZmlndXJhdGlvbkxpc3QpLCAiJXM6ICdmaWxlUmVmJyBwcm9wZXJ0eSBpcyBub3Qg
YSBYQ0NvbmZpZ3VyYXRpb25MaXN0LCBidXQgYSAlcyEiICUgKHRhcmdldCwgYnVpbGRfY29uZmln
dXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9vYmplY3QpKQorICAgICAgICB0YXJnZXQuX3NldF9j
b25maWd1cmF0aW9uX2xpc3QoYnVpbGRfY29uZmlndXJhdGlvbl9saXN0X3VpZC5yZWZlcnJlZF9v
YmplY3QpCisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVmZXJyZWRfb2Jq
ZWN0Ll9zZXRfcmVmZXJyZXIodGFyZ2V0KQorICAgICAgICAjIGNoZWNrIGZvciBtYWluIHRhcmdl
dAorICAgICAgICBpZiB0YXJnZXQubmFtZSA9PSBzZWxmLnByb2plY3QubWFpbl90YXJnZXRfbmFt
ZToKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KG5vdCBzZWxmLnByb2plY3QubWFpbl90YXJnZXQs
ICJQcm9qZWN0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgdGFyZ2V0IGNhbGxlZCAnJXMnIChhdDog
JXMsIGFuZCBwcmV2aW91c2x5OiAlcykhIiAlIChzZWxmLnByb2plY3QubWFpbl90YXJnZXRfbmFt
ZSwgdGFyZ2V0LCBzZWxmLnByb2plY3QubWFpbl90YXJnZXQpKQorICAgICAgICAgICAgc2VsZi5w
cm9qZWN0Lm1haW5fdGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgICMgbGluayBidWlsZCBwaGFzZXMK
KyAgICAgICAgYnVpbGRfcGhhc2VzID0gc2VsZi5lbnN1cmVfcHJvcGVydHkodGFyZ2V0LCAnYnVp
bGRQaGFzZXMnLCBYY29kZVVJRExpc3QpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ1aWxk
X3BoYXNlcywgWGNvZGVVSURMaXN0KQorICAgICAgICBmb3IgdWlkIGluIGJ1aWxkX3BoYXNlczoK
KyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAg
ICBzZWxmLnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ2J1aWxk
UGhhc2VzJyBlbnRyeSAlcyB0aGF0IGNvdWxkIG5vdCBiZSBmb3VuZCB3aXRoaW4gdGhlIHByb2pl
Y3QhIiAlICh0YXJnZXQsIHVpZCkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVpZC5yZWZl
cnJlZF9vYmplY3QsIFBCWEJ1aWxkUGhhc2UpOgorICAgICAgICAgICAgICAgIGJ1aWxkX3BoYXNl
ID0gdWlkLnJlZmVycmVkX29iamVjdAorICAgICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG5vdCBi
dWlsZF9waGFzZS50YXJnZXQsICIlcyByZWZlcnMgdG8gYSAlcywgYnV0IHRoYXQgd2FzIGFscmVh
ZHkgcHJldmlvdXNseSByZWZlcmVuY2VkIGJ5ICVzISIgJSAodGFyZ2V0LCBidWlsZF9waGFzZSwg
YnVpbGRfcGhhc2UudGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBidWlsZF9waGFzZS5fc2V0X3Rh
cmdldCh0YXJnZXQpCisgICAgICAgICAgICAgICAgdGFyZ2V0Ll9hcHBlbmRfYnVpbGRfcGhhc2Uo
YnVpbGRfcGhhc2UpCisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0IGlzIHNlbGYucHJvamVjdC5t
YWluX3RhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRfcGhhc2UgPSBzZWxmLnByb2pl
Y3QuYnVpbGRfcGhhc2VfbmFtZV90b19idWlsZF9waGFzZXMuc2V0ZGVmYXVsdChidWlsZF9waGFz
ZS5pc2EsIHNldCgpKS5hZGQoYnVpbGRfcGhhc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYuZXJyb3IoIiVzIGNvbnRhaW5zICdidWlsZFBoYXNlcycgZW50cnkgJXMg
LSBQQlhCdWlsZFBoYXNlIGV4cGVjdGVkISIgJSAodGFyZ2V0LCB1aWQucmVmZXJyZWRfb2JqZWN0
KSkKKworICAgIGRlZiBwb3N0cHJvY2Vzc19wcm9qZWN0KHNlbGYpOgorICAgICAgICBwcm9qZWN0
ID0gc2VsZi5wcm9qZWN0LnByb2plY3Rfb2JqZWN0CisgICAgICAgICMgbGluayBjb25maWd1cmF0
b24gbGlzdAorICAgICAgICBzZWxmLnZlcmlmeSgnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgaW4g
cHJvamVjdC5wcm9wZXJ0aWVzLCAiJXMgZG9lcyBub3QgY29udGFpbiBhICdidWlsZENvbmZpZ3Vy
YXRpb25MaXN0JyBwcm9wZXJ0eSEiICUgcHJvamVjdCkKKyAgICAgICAgYnVpbGRfY29uZmlndXJh
dGlvbl9saXN0X3VpZCA9IHByb2plY3QucHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9uTGlz
dCddCisgICAgICAgIHNlbGYudmVyaWZ5KGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQucmVm
ZXJyZWRfb2JqZWN0LCAiJyVzOiAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcgcHJvcGVydHkgJXMg
aXMgdW5rbm93biEiICUgKHByb2plY3QsIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91aWQpKQor
ICAgICAgICBzZWxmLnZlcmlmeShpc2luc3RhbmNlKGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlzdF91
aWQucmVmZXJyZWRfb2JqZWN0LCBYQ0NvbmZpZ3VyYXRpb25MaXN0KSwgIiVzOiAnZmlsZVJlZicg
cHJvcGVydHkgaXMgbm90IGEgWENDb25maWd1cmF0aW9uTGlzdCwgYnV0IGEgJXMhIiAlIChwcm9q
ZWN0LCBidWlsZF9jb25maWd1cmF0aW9uX2xpc3RfdWlkLnJlZmVycmVkX29iamVjdCkpCisgICAg
ICAgIHByb2plY3QuX3NldF9jb25maWd1cmF0aW9uX2xpc3QoYnVpbGRfY29uZmlndXJhdGlvbl9s
aXN0X3VpZC5yZWZlcnJlZF9vYmplY3QpCisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb25fbGlz
dF91aWQucmVmZXJyZWRfb2JqZWN0Ll9zZXRfcmVmZXJyZXIocHJvamVjdCkKKyAgICAgICAgIyBs
aW5rIHRhcmdldHMKKyAgICAgICAgdGFyZ2V0cyA9IHNlbGYuZW5zdXJlX3Byb3BlcnR5KHByb2pl
Y3QsICd0YXJnZXRzJywgWGNvZGVVSURMaXN0KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0
YXJnZXRzLCBYY29kZVVJRExpc3QpCisgICAgICAgIGZvciB1aWQgaW4gdGFyZ2V0czoKKyAgICAg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHVpZCwgWGNvZGVVSUQpCisgICAgICAgICAgICBzZWxm
LnZlcmlmeSh1aWQucmVmZXJyZWRfb2JqZWN0LCAiJXMgcmVmZXJzIHRvIGEgJ3RhcmdldCcgZW50
cnkgJXMgdGhhdCBjb3VsZCBub3QgYmUgZm91bmQgd2l0aGluIHRoZSBwcm9qZWN0ISIgJSAocHJv
amVjdCwgdWlkKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodWlkLnJlZmVycmVkX29iamVj
dCwgUEJYVGFyZ2V0KToKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSB1aWQucmVmZXJyZWRfb2Jq
ZWN0CisgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnkobm90IHRhcmdldC5wcm9qZWN0LCAiJXMg
cmVmZXJzIHRvIGEgJXMsIGJ1dCB0aGF0IHdhcyBhbHJlYWR5IHByZXZpb3VzbHkgcmVmZXJlbmNl
ZCBieSAlcyEiICUgKHByb2plY3QsIHRhcmdldCwgdGFyZ2V0LnByb2plY3QpKQorICAgICAgICAg
ICAgICAgIHRhcmdldC5fc2V0X3Byb2plY3QocHJvamVjdCkKKyAgICAgICAgICAgICAgICBwcm9q
ZWN0Ll9hcHBlbmRfdGFyZ2V0KHRhcmdldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgc2VsZi5lcnJvcigiJXMgY29udGFpbnMgJ3RhcmdldHMnIGVudHJ5ICVzIC0gUEJYVGFy
Z2V0IGV4cGVjdGVkISIgJSAocHJvamVjdCwgdWlkLnJlZmVycmVkX29iamVjdCkpCisKKyAgICBk
ZWYgdmVyaWZ5X2FsbF9vYmplY3RzKHNlbGYpOgorICAgICAgICBmb3Igb2JqZWN0IGluIHNlbGYu
YWxsX3RlbXBvcmFyeV9vYmplY3RzOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nKCIlcyBpcyBu
b3QgcmVmZXJyZWQgYnkgYW55dGhpbmcgLSBkZWxldGluZyEiICUgb2JqZWN0KQorICAgICAgICBz
ZWxmLmFsbF90ZW1wb3Jhcnlfb2JqZWN0cy5jbGVhcigpCisgICAgICAgIGZvciBvYmplY3QgaW4g
c2VsZi5wcm9qZWN0LmFsbF9vYmplY3RzOgorICAgICAgICAgICAgIyBUT0RPOiAiaXMgbm90IHZh
bGlkISIgaXMgbm90IHZlcnkgaGVscGZ1bCAtIGltcHJvdmUgb3V0cHV0CisgICAgICAgICAgICBz
ZWxmLnZlcmlmeShvYmplY3QuaXNfdmFsaWQoKSwgIiVzIGlzIG5vdCB2YWxpZCEiICUgb2JqZWN0
KQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor
CitjbGFzcyBYY29kZVByb2plY3RXcml0ZXIoUHJvamVjdFdyaXRlcik6CisgICAgIiIiU2VyaWFs
aXplciAod3JpdGVyKSBmb3IgWGNvZGUgcHJvamVjdCBmaWxlcy4iIiIKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcHJvamVjdCwgZmlsZXN5c3RlbT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UocHJvamVjdCwgWGNvZGVQcm9qZWN0KQorICAgICAgICBQcm9qZWN0V3JpdGVyLl9faW5p
dF9fKHNlbGYsIHByb2plY3QsIGZpbGVzeXN0ZW0pCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUK
KworICAgICMgLS0tIHdyaXRpbmcgLS0tCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHBy
b3BlcnRpZXNfc29ydF9rZXkocHJvcGVydHlfbmFtZSk6CisgICAgICAgICcnJyBTb3J0ICdpc2En
IGFzIGZpcnN0IHByb3BlcnR5IHRvIGJlIG91dHB1dC4gJycnCisgICAgICAgIGlmIHByb3BlcnR5
X25hbWUgPT0gJ2lzYSc6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5X25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYWxwaGFiZXRpY2FsX1VJ
RF9zb3J0X2tleSh1aWQpOgorICAgICAgICBhc3NlcnQgdWlkLnJlZmVycmVkX29iamVjdAorICAg
ICAgICBvYmplY3QgPSB1aWQucmVmZXJyZWRfb2JqZWN0CisgICAgICAgIGNvbW1lbnQgPSBvYmpl
Y3QuY29tbWVudCgpLmxvd2VyKCkKKyAgICAgICAgYXNzZXJ0IGNvbW1lbnQsICJPYmplY3QgJXMg
Z2VuZXJhdGVzIG5vIGNvbW1lbnQhIiAlIHVpZC5zdHJpbmcKKyAgICAgICAgJycnU29ydCBncm91
cHMgYmVmb3JlIGZpbGVzLCBzb3J0IGFjY29yZGluZyB0byBuYW1lIChjb21tZW50KSB3aXRoaW4g
Z3JvdXBzL2ZpbGVzLicnJworICAgICAgICBpZiBpc2luc3RhbmNlKG9iamVjdCwgUEJYR3JvdXAp
OgorICAgICAgICAgICAgcmV0dXJuICdBJyArIGNvbW1lbnQKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShvYmplY3QsIFBCWFZhcmlhbnRHcm91cCk6CisgICAgICAgICAgICByZXR1cm4gJ0YnICsgY29t
bWVudAorICAgICAgICBpZiBpc2luc3RhbmNlKG9iamVjdCwgUEJYQnVpbGRGaWxlKToKKyAgICAg
ICAgICAgIHJldHVybiAnRicgKyBjb21tZW50CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0
LCBQQlhGaWxlUmVmZXJlbmNlKToKKyAgICAgICAgICAgIHJldHVybiAnRicgKyBjb21tZW50Cisg
ICAgICAgIGFzc2VydCBGYWxzZQorICAgICAgICByZXR1cm4gJ1onICsgY29tbWVudCArIHVpZAor
CisgICAgZGVmIHdyaXRlX3VpZF9hbmRfY29tbWVudChzZWxmLCB1aWQpOgorICAgICAgICBzZWxm
LmZpbGUud3JpdGUodWlkLnN0cmluZykKKyAgICAgICAgY29tbWVudCA9IHVpZC5yZWZlcnJlZF9v
YmplY3QuY29tbWVudCgpCisgICAgICAgIGlmIGNvbW1lbnQ6CisgICAgICAgICAgICBzZWxmLmZp
bGUud3JpdGUoIiAvKiAiICsgY29tbWVudCArICIgKi8iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVl
KHNlbGYsIHZhbHVlLCBpbmRlbnQsIHNpbmdsZV9saW5lKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZSh2YWx1ZSwgWGNvZGVVSUQpOgorICAgICAgICAgICAgc2VsZi53cml0ZV91aWRfYW5kX2NvbW1l
bnQodmFsdWUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVRdW90ZWRTdHJp
bmcpOgorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCciJyArIHZhbHVlICsgJyInKQorICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgc2Vs
Zi5maWxlLndyaXRlKHZhbHVlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3Qp
OgorICAgICAgICAgICAgaWYgc2luZ2xlX2xpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0
ZV9saXN0X3NpbmdsZV9saW5lKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBzZWxmLndyaXRlX2xpc3RfbXVsdGlfbGluZSh2YWx1ZSwgaW5kZW50KQorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgaWYgc2luZ2xlX2xpbmU6
CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9vYmplY3Rfc2luZ2xlX2xpbmUodmFsdWUpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfb2JqZWN0X211bHRp
X2xpbmUodmFsdWUsIGluZGVudCwgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuZXJyb3IoIkludGVybmFsIEVycm9yIC0gdW5rbm93biB0eXBlICVzIGZvciB2YWx1ZSAnJXMn
IGVuY291bnRlcmVkISIgJSAoc3RyKHR5cGUodmFsdWUpKSwgdmFsdWUpKQorICAgICAgICAgICAg
YXNzZXJ0IEZhbHNlCisKKyAgICBkZWYgd3JpdGVfbGlzdF9zaW5nbGVfbGluZShzZWxmLCBsaXN0
KToKKyAgICAgICAgc2VsZi5maWxlLndyaXRlKCIoIikKKyAgICAgICAgZm9yIHZhbHVlIGluIGxp
c3Q6CisgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlLCAnJywgVHJ1ZSkKKyAgICAg
ICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLCAiKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiki
KQorCisgICAgZGVmIHdyaXRlX2xpc3RfbXVsdGlfbGluZShzZWxmLCBsaXN0LCBpbmRlbnQpOgor
ICAgICAgICBzZWxmLmZpbGUud3JpdGUoIihcbiIpCisgICAgICAgIHN1Yl9pbmRlbnQgPSBpbmRl
bnQgKyAnXHQnCisgICAgICAgIGZvciB2YWx1ZSBpbiBsaXN0OgorICAgICAgICAgICAgc2VsZi5m
aWxlLndyaXRlKHN1Yl9pbmRlbnQpCisgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVl
LCBzdWJfaW5kZW50LCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLFxuIikK
KyAgICAgICAgc2VsZi5maWxlLndyaXRlKGluZGVudCkKKyAgICAgICAgc2VsZi5maWxlLndyaXRl
KCIpIikKKworICAgIGRlZiB3cml0ZV9vYmplY3RfbXVsdGlfbGluZShzZWxmLCBvYmosIGluZGVu
dCwgc29ydF9jaGlsZHJlbik6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgie1xuIikKKyAgICAg
ICAgc3ViX2luZGVudCA9IGluZGVudCArICJcdCIKKyAgICAgICAgZm9yIChrZXksIHZhbHVlKSBp
biBzb3J0ZWQob2JqLml0ZW1zKCksIGtleT1sYW1iZGEgKGssIHYpOiBYY29kZVByb2plY3RXcml0
ZXIucHJvcGVydGllc19zb3J0X2tleShrKSk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUo
c3ViX2luZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShrZXkpCisgICAgICAgICAg
ICBzZWxmLmZpbGUud3JpdGUoIiA9ICIpCisgICAgICAgICAgICBpZiBrZXkgPT0gJ2NoaWxkcmVu
JyBvciBrZXkgPT0gJ2ZpbGVzJzoKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2
YWx1ZSwgWGNvZGVVSURMaXN0KQorICAgICAgICAgICAgICAgIGlmIHNvcnRfY2hpbGRyZW46Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlLnNvcnQoa2V5PVhjb2RlUHJvamVjdFdyaXRlci5hbHBo
YWJldGljYWxfVUlEX3NvcnRfa2V5KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfbGlzdF9t
dWx0aV9saW5lKHZhbHVlLCBzdWJfaW5kZW50KQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ3Jl
bW90ZUdsb2JhbElEU3RyaW5nJzoKKyAgICAgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiAn
cmVtb3RlR2xvYmFsSURTdHJpbmcnIHdyaXRlcyB0aGUgVUlEIHdpdGhvdXQgY29tbWVudC4KKyAg
ICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgWGNvZGVVSUQpCisgICAgICAg
ICAgICAgICAgc2VsZi5maWxlLndyaXRlKHZhbHVlLnN0cmluZykKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGlzIG5vdCBOb25lLCAiJ05vbmUnIHZhbHVl
IGZvciBwcm9wZXJ0eSAnJXMnIGluIG9iamVjdCAlcyEiICUgKGtleSwgb2JqLnVpZC5zdHJpbmcp
CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSwgc3ViX2luZGVudCwgRmFs
c2UpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIjtcbiIpCisgICAgICAgIHNlbGYuZmls
ZS53cml0ZShpbmRlbnQpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYg
d3JpdGVfb2JqZWN0X3NpbmdsZV9saW5lKHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYuZmlsZS53
cml0ZSgieyIpCisgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc29ydGVkKG9iai5pdGVtcygp
LCBrZXk9bGFtYmRhIChrLCB2KTogWGNvZGVQcm9qZWN0V3JpdGVyLnByb3BlcnRpZXNfc29ydF9r
ZXkoaykpOgorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGtleSkKKyAgICAgICAgICAgIHNl
bGYuZmlsZS53cml0ZSgiID0gIikKKyAgICAgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUs
ICcnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCI7ICIpCisgICAgICAgIHNl
bGYuZmlsZS53cml0ZSgifSIpCisKKyAgICBkZWYgd3JpdGVfb2JqZWN0cyhzZWxmKToKKyAgICAg
ICAgc2VsZi5maWxlLndyaXRlKCJ7XG4iKQorICAgICAgICBmb3IgKGlzYSwgb2JqZWN0X3NldCkg
aW4gc29ydGVkKHNlbGYucHJvamVjdC5pc2FfdG9fb2JqZWN0cy5pdGVtcygpLCBrZXk9b3BlcmF0
b3IuaXRlbWdldHRlcigwKSk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIlxuLyogQmVn
aW4gIikKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShpc2EpCisgICAgICAgICAgICBzZWxm
LmZpbGUud3JpdGUoIiBzZWN0aW9uICovXG4iKQorICAgICAgICAgICAgc2luZ2xlX2xpbmUgPSBp
c2EgPT0gJ1BCWEJ1aWxkRmlsZScgb3IgaXNhID09ICdQQlhGaWxlUmVmZXJlbmNlJworICAgICAg
ICAgICAgZm9yIG9iaiBpbiBzb3J0ZWQob2JqZWN0X3NldCwga2V5PW9wZXJhdG9yLmF0dHJnZXR0
ZXIoJ3VpZCcpKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIlx0XHQiKQorICAg
ICAgICAgICAgICAgIHNlbGYud3JpdGVfdWlkX2FuZF9jb21tZW50KG9iai51aWQpCisgICAgICAg
ICAgICAgICAgc2VsZi5maWxlLndyaXRlKCIgPSAiKQorICAgICAgICAgICAgICAgIGlmIHNpbmds
ZV9saW5lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX29iamVjdF9zaW5nbGVfbGlu
ZShvYmoucHJvcGVydGllcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBzb3J0X2NoaWxkcmVuID0gb2JqIGlzIG5vdCBzZWxmLnByb2plY3QubWFpbl9ncm91cAor
ICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX29iamVjdF9tdWx0aV9saW5lKG9iai5wcm9w
ZXJ0aWVzLCAiXHRcdCIsIHNvcnRfY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgc2VsZi5maWxl
LndyaXRlKCI7XG4iKQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCIvKiBFbmQgIikKKyAg
ICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShpc2EpCisgICAgICAgICAgICBzZWxmLmZpbGUud3Jp
dGUoIiBzZWN0aW9uICovXG4iKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoIlx0fSIpCisKKyAg
ICBkZWYgd3JpdGVfbWFpbl9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZS53cml0ZSgi
e1xuIikKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0
LmtleXMoKSk6CisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIlx0IikKKyAgICAgICAgICAg
IHNlbGYuZmlsZS53cml0ZShrZXkpCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoIiA9ICIp
CisgICAgICAgICAgICBpZiBrZXkgPT0gJ29iamVjdHMnOgorICAgICAgICAgICAgICAgIHNlbGYu
d3JpdGVfb2JqZWN0cygpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
d3JpdGVfdmFsdWUoc2VsZi5wcm9qZWN0Lm1haW5fb2JqZWN0W2tleV0sICJcdCIsIEZhbHNlKQor
ICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCI7XG4iKQorICAgICAgICBzZWxmLmZpbGUud3Jp
dGUoIn1cbiIpCisKKyAgICBkZWYgd3JpdGVfcHJvamVjdF9maWxlKHNlbGYsIHBhdGgpOgorICAg
ICAgICBzZWxmLmluZm8oIldyaXRpbmcgWGNvZGUgcHJvamVjdCBmaWxlIHRvICVzIiAlIHBhdGgp
CisgICAgICAgIHdpdGggc2VsZi5maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5n
KHBhdGgpIGFzIHNlbGYuZmlsZToKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZSgiLy8gISQq
VVRGOCokIVxuIikKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbWFpbl9vYmplY3QoKQorCisKKyMg
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitjbGFzcyBY
Y29kZVByb2plY3QoR3JvdXBQcm9qZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5n
IGFsbCBkYXRhIHN0cnVjdHVyZXMgZGVzY3JpYmluZyBhbiBYY29kZSBwcm9qZWN0IGZpbGUuCisg
ICAgIiIiCisgICAgU0VQID0gJy8nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbW9uLCBm
aWxlLCB2YXJpYWJsZV90b19kaXJlY3RvcnksIHByb2plY3RfbmFtZT1Ob25lLCBtYWluX3Rhcmdl
dF9uYW1lPU5vbmUpOgorICAgICAgICBhc3NlcnQgY29tbW9uCisgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKGNvbW1vbiwgQ29tbW9uSW5mbykKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgYXNzZXJ0ICdTT1VS
Q0VfUk9PVCcgaW4gdmFyaWFibGVfdG9fZGlyZWN0b3J5CisgICAgICAgIEdyb3VwUHJvamVjdC5f
X2luaXRfXyhzZWxmLCBjb21tb24sIGZpbGUsIHZhcmlhYmxlX3RvX2RpcmVjdG9yeSwgcHJvamVj
dF9uYW1lKQorICAgICAgICAjIFhjb2RlIHByb2plY3RzIGNhbiBjb250YWluIG11bHRpcGxlIHRh
cmdldHMuIERlZmluZSB0aGUgdGFyZ2V0IG5hbWUgYW5kIHRhcmdldCBvYmplY3Qgd2UnbGwgYmUg
bWFuaXB1bGF0aW5nLgorICAgICAgICBzZWxmLm1haW5fdGFyZ2V0X25hbWUgPSBtYWluX3Rhcmdl
dF9uYW1lIG9yIHByb2plY3RfbmFtZQorICAgICAgICBzZWxmLm1haW5fdGFyZ2V0ID0gTm9uZQor
ICAgICAgICAjIG1haW4gKG91dGVyKSBvYmplY3QKKyAgICAgICAgc2VsZi5tYWluX29iamVjdCA9
IHt9CisgICAgICAgICMgcHJvamVjdCdzIFBCWFByb2plY3Qgb2JqZWN0CisgICAgICAgIHNlbGYu
cHJvamVjdF9vYmplY3QgPSBOb25lCisgICAgICAgICMgbWFwIHVpZCBzdHJpbmcgLT4gWGNvZGVV
SUQgb2JqZWN0CisgICAgICAgIHNlbGYudWlkX3N0cmluZ190b19VSUQgPSB7fQorICAgICAgICAj
IG1hcCAnaXNhJyAoZS5nLiwgJ1BCWEdyb3VwJykgdG8gYSBzZXQgb2YgUEJYT2JqZWN0LXMgdGhh
dCBhcmUgb2YgdGhhdCB0eXBlCisgICAgICAgIHNlbGYuaXNhX3RvX29iamVjdHMgPSB7fQorICAg
ICAgICAjIHNldCBvZiBhbGwgb2JqZWN0cworICAgICAgICBzZWxmLmFsbF9vYmplY3RzID0gc2V0
KCkKKyAgICAgICAgIyBhbGwgUEJYRmlsZVJlZmVyZW5jZSBvYmplY3RzCisgICAgICAgIHNlbGYu
YWxsX2ZpbGVfcmVmZXJlbmNlcyA9IHNldCgpCisgICAgICAgICMgYWxsIFBCWFZhcmlhbnRHcm91
cCBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX3ZhcmlhbnRfZ3JvdXBzID0gc2V0KCkKKyAgICAg
ICAgIyBhbGwgUEJYQnVpbGRQaGFzZSBvYmplY3RzCisgICAgICAgIHNlbGYuYWxsX2J1aWxkX3Bo
YXNlcyA9IHNldCgpCisgICAgICAgICMgYWxsIFBCWEJ1aWxkRmlsZSBvYmplY3RzCisgICAgICAg
IHNlbGYuYWxsX2J1aWxkX2ZpbGVzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgWENCdWlsZENvbmZp
Z3VyYXRpb24gb2JqZWN0cworICAgICAgICBzZWxmLmFsbF9idWlsZF9jb25maWd1cmF0aW9ucyA9
IHNldCgpCisgICAgICAgICMgYWxsIFhDQ29uZmlndXJhdGlvbkxpc3Qgb2JqZWN0cworICAgICAg
ICBzZWxmLmFsbF9jb25maWd1cmF0aW9uX2xpc3RzID0gc2V0KCkKKyAgICAgICAgIyBhbGwgUEJY
VGFyZ2V0IG9iamVjdHMKKyAgICAgICAgc2VsZi5hbGxfdGFyZ2V0cyA9IHNldCgpCisgICAgICAg
ICMgbWFwIENvbW1vbkZpbGUgLT4gc2V0IG9mIFBCWEZpbGVSZWZlcmVuY2Ugb2JqZWN0cworICAg
ICAgICBzZWxmLmZpbGVfdG9fZmlsZV9yZWZlcmVuY2VzID0ge30KKyAgICAgICAgIyBtYXAgYnVp
bGQgcGhhc2UgbmFtZSAoJ1BCWFNvdXJjZXNCdWlsZFBoYXNlJywgZXRjLikgLT4gc2V0IG9mIFBC
WEJ1aWxkUGhhc2Ugb2JqZWN0cworICAgICAgICBzZWxmLmJ1aWxkX3BoYXNlX25hbWVfdG9fYnVp
bGRfcGhhc2VzID0ge30KKyAgICAgICAgIyBtYXAgQ29tbW9uRGlyZWN0b3J5IC0+IGxpc3Qgb2Yg
UEJYR3JvdXAgKG5vdCBQQlhWYXJpYW50R3JvdXAhKSBvYmplY3RzLCBvcmRlcmVkIGRlcHRoLWZp
cnN0CisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3RvX2dyb3VwcyA9IHt9CisgICAgICAgICMgVUlE
IGNyZWF0aW9uIGZ1bmN0aW9uIC0gb3ZlcnJpZGUgZm9yIG1vY2tpbmcKKyAgICAgICAgc2VsZi51
aWRfY3JlYXRpb25fZnVuY3Rpb24gPSBYY29kZVByb2plY3QuY3JlYXRlX1VJRF9zdHJpbmcKKwor
ICAgICMgLS0tIG1hbmlwdWxhdGlvbiAtLS0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
Y3JlYXRlX1VJRF9zdHJpbmcoKToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oW3JhbmRvbS5jaG9p
Y2UoJzAxMjM0NTY3ODlBQkNERUYnKSBmb3IgaSBpbiByYW5nZSgyNCldKQorCisgICAgZGVmIGNy
ZWF0ZV9VSUQoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB1aWRzdHIg
PSBzZWxmLnVpZF9jcmVhdGlvbl9mdW5jdGlvbigpCisgICAgICAgICAgICBpZiBub3QgWGNvZGVV
SUQuaXNfdmFsaWRfVUlEKHVpZHN0cik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIGlmIHVpZHN0ciBpbiBzZWxmLnVpZF9zdHJpbmdfdG9fVUlEOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgICAgICB1aWQgPSBYY29kZVVJRCh1aWRzdHIpCisgICAgICAg
ICAgICBzZWxmLnVpZF9zdHJpbmdfdG9fVUlEW3VpZHN0cl0gPSB1aWQKKyAgICAgICAgICAgIHJl
dHVybiB1aWQKKworICAgIGRlZiBlbnN1cmVfVUlEKHNlbGYsIHVpZF9zdHJpbmcpOgorICAgICAg
ICBhc3NlcnQgWGNvZGVVSUQuaXNfdmFsaWRfVUlEKHVpZF9zdHJpbmcpCisgICAgICAgIHJldHVy
biBzZWxmLnVpZF9zdHJpbmdfdG9fVUlELnNldGRlZmF1bHQodWlkX3N0cmluZywgWGNvZGVVSUQo
dWlkX3N0cmluZykpCisKKyAgICBkZWYgX2FkZF9vYmplY3Qoc2VsZiwgb2JqZWN0KToKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2JqZWN0LCBQQlhPYmplY3QpCisgICAgICAgIGFzc2VydCBv
YmplY3QudWlkCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9iamVjdC51aWQsIFhjb2RlVUlE
KQorICAgICAgICBhc3NlcnQgb2JqZWN0LnVpZC5zdHJpbmcgaW4gc2VsZi51aWRfc3RyaW5nX3Rv
X1VJRAorICAgICAgICBhc3NlcnQgb2JqZWN0LnVpZC5yZWZlcnJlZF9vYmplY3QgaXMgb2JqZWN0
CisgICAgICAgIGFzc2VydCBvYmplY3QuaXNhCisgICAgICAgIGFzc2VydCBvYmplY3Qgbm90IGlu
IHNlbGYuYWxsX29iamVjdHMKKyAgICAgICAgc2VsZi5hbGxfb2JqZWN0cy5hZGQob2JqZWN0KQor
ICAgICAgICBzZWxmLmlzYV90b19vYmplY3RzLnNldGRlZmF1bHQob2JqZWN0LmlzYSwgc2V0KCkp
LmFkZChvYmplY3QpCisKKyAgICBkZWYgc2V0X1BCWFByb2plY3Qoc2VsZiwgcHJvamVjdF9vYmpl
Y3QpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9qZWN0X29iamVjdCwgUEJYUHJvamVj
dCkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLnByb2plY3Rfb2JqZWN0CisgICAgICAgIHNlbGYu
cHJvamVjdF9vYmplY3QgPSBwcm9qZWN0X29iamVjdAorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0
KHByb2plY3Rfb2JqZWN0KQorCisgICAgZGVmIGFkZF9QQlhUYXJnZXQoc2VsZiwgdGFyZ2V0KToK
KyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0LCBQQlhUYXJnZXQpCisgICAgICAgIGFz
c2VydCB0YXJnZXQgbm90IGluIHNlbGYuYWxsX3RhcmdldHMKKyAgICAgICAgc2VsZi5hbGxfdGFy
Z2V0cy5hZGQodGFyZ2V0KQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KHRhcmdldCkKKworICAg
IGRlZiBhZGRfUEJYQnVpbGRQaGFzZShzZWxmLCBidWlsZF9waGFzZSk6CisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKGJ1aWxkX3BoYXNlLCBQQlhCdWlsZFBoYXNlKQorICAgICAgICBhc3NlcnQg
YnVpbGRfcGhhc2Ugbm90IGluIHNlbGYuYWxsX2J1aWxkX3BoYXNlcworICAgICAgICBzZWxmLmFs
bF9idWlsZF9waGFzZXMuYWRkKGJ1aWxkX3BoYXNlKQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0
KGJ1aWxkX3BoYXNlKQorCisgICAgZGVmIGFkZF9QQlhHcm91cChzZWxmLCBncm91cCk6CisgICAg
ICAgIGFzc2VydCBpc2luc3RhbmNlKGdyb3VwLCBQQlhHcm91cCkKKyAgICAgICAgc2VsZi5fYWRk
X2dyb3VwKGdyb3VwKQorICAgICAgICBzZWxmLl9hZGRfb2JqZWN0KGdyb3VwKQorCisgICAgZGVm
IGFkZF9QQlhWYXJpYW50R3JvdXAoc2VsZiwgdmFyaWFudF9ncm91cCk6CisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKHZhcmlhbnRfZ3JvdXAsIFBCWFZhcmlhbnRHcm91cCkKKyAgICAgICAgc2Vs
Zi5hbGxfdmFyaWFudF9ncm91cHMuYWRkKHZhcmlhbnRfZ3JvdXApCisgICAgICAgIHNlbGYuX2Fk
ZF9vYmplY3QodmFyaWFudF9ncm91cCkKKworICAgIGRlZiBhZGRfUEJYQnVpbGRGaWxlKHNlbGYs
IGJ1aWxkX2ZpbGUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9maWxlLCBQQlhC
dWlsZEZpbGUpCisgICAgICAgIGFzc2VydCBidWlsZF9maWxlIG5vdCBpbiBzZWxmLmFsbF9idWls
ZF9maWxlcworICAgICAgICBzZWxmLmFsbF9idWlsZF9maWxlcy5hZGQoYnVpbGRfZmlsZSkKKyAg
ICAgICAgc2VsZi5fYWRkX29iamVjdChidWlsZF9maWxlKQorCisgICAgZGVmIGFkZF9QQlhGaWxl
UmVmZXJlbmNlKHNlbGYsIGZpbGVfcmVmZXJlbmNlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UoZmlsZV9yZWZlcmVuY2UsIFBCWEZpbGVSZWZlcmVuY2UpCisgICAgICAgIGFzc2VydCBmaWxl
X3JlZmVyZW5jZSBub3QgaW4gc2VsZi5hbGxfZmlsZV9yZWZlcmVuY2VzCisgICAgICAgIHNlbGYu
YWxsX2ZpbGVfcmVmZXJlbmNlcy5hZGQoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuX2Fk
ZF9vYmplY3QoZmlsZV9yZWZlcmVuY2UpCisKKyAgICBkZWYgYWRkX1hDQnVpbGRDb25maWd1cmF0
aW9uKHNlbGYsIGJ1aWxkX2NvbmZpZ3VyYXRpb24pOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShidWlsZF9jb25maWd1cmF0aW9uLCBYQ0J1aWxkQ29uZmlndXJhdGlvbikKKyAgICAgICAgc2Vs
Zi5hbGxfYnVpbGRfY29uZmlndXJhdGlvbnMuYWRkKGJ1aWxkX2NvbmZpZ3VyYXRpb24pCisgICAg
ICAgIHNlbGYuX2FkZF9vYmplY3QoYnVpbGRfY29uZmlndXJhdGlvbikKKworICAgIGRlZiBhZGRf
WENDb25maWd1cmF0aW9uTGlzdChzZWxmLCBjb25maWd1cmF0aW9uX2xpc3QpOgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShjb25maWd1cmF0aW9uX2xpc3QsIFhDQ29uZmlndXJhdGlvbkxpc3Qp
CisgICAgICAgIHNlbGYuYWxsX2NvbmZpZ3VyYXRpb25fbGlzdHMuYWRkKGNvbmZpZ3VyYXRpb25f
bGlzdCkKKyAgICAgICAgc2VsZi5fYWRkX29iamVjdChjb25maWd1cmF0aW9uX2xpc3QpCisKKyAg
ICBkZWYgYWRkX1BCWEFyYml0cmFyeU9iamVjdChzZWxmLCBvYmplY3QpOgorICAgICAgICBzZWxm
Ll9hZGRfb2JqZWN0KG9iamVjdCkKKworICAgIGRlZiBjcmVhdGVfUEJYUHJvamVjdChzZWxmLCB1
aWQsIGlzYT1Ob25lLCBuYW1lPU5vbmUsIGNvbmZpZ3VyYXRpb25fbGlzdD1Ob25lKToKKyAgICAg
ICAgcHJvamVjdCA9IFBCWFByb2plY3QodWlkLCBpc2Egb3IgJ1BCWFByb2plY3QnLCBzZWxmLCBu
YW1lLCBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYuc2V0X1BCWFByb2plY3QocHJv
amVjdCkKKyAgICAgICAgcmV0dXJuIHByb2plY3QKKworICAgIGRlZiBjcmVhdGVfUEJYVGFyZ2V0
KHNlbGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIHByb2plY3Q9Tm9uZSwgY29uZmlndXJhdGlvbl9s
aXN0PU5vbmUpOgorICAgICAgICB0YXJnZXQgPSBQQlhUYXJnZXQodWlkLCBpc2EsIG5hbWUsIHBy
b2plY3QsIGNvbmZpZ3VyYXRpb25fbGlzdCkKKyAgICAgICAgc2VsZi5hZGRfUEJYVGFyZ2V0KHRh
cmdldCkKKyAgICAgICAgcmV0dXJuIHRhcmdldAorCisgICAgZGVmIGNyZWF0ZV9QQlhCdWlsZFBo
YXNlKHNlbGYsIHVpZCwgaXNhLCBuYW1lPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgYnVp
bGRfcGhhc2UgPSBQQlhCdWlsZFBoYXNlKHVpZCwgaXNhLCBuYW1lLCB0YXJnZXQpCisgICAgICAg
IHNlbGYuYWRkX1BCWEJ1aWxkUGhhc2UoYnVpbGRfcGhhc2UpCisgICAgICAgIHJldHVybiBidWls
ZF9waGFzZQorCisgICAgZGVmIGNyZWF0ZV9QQlhHcm91cChzZWxmLCB1aWQsIGlzYT1Ob25lLCBu
YW1lPU5vbmUsIHBhcmVudF9ncm91cD1Ob25lLCBkaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgIGdy
b3VwID0gUEJYR3JvdXAodWlkLCBpc2Egb3IgJ1BCWEdyb3VwJywgbmFtZSwgcGFyZW50X2dyb3Vw
LCBkaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYWRkX1BCWEdyb3VwKGdyb3VwKQorICAgICAgICBy
ZXR1cm4gZ3JvdXAKKworICAgIGRlZiBjcmVhdGVfUEJYVmFyaWFudEdyb3VwKHNlbGYsIHVpZCwg
aXNhPU5vbmUsIG5hbWU9Tm9uZSwgcGFyZW50X2dyb3VwPU5vbmUsIGRpcmVjdG9yeT1Ob25lKToK
KyAgICAgICAgdmFyaWFudF9ncm91cCA9IFBCWFZhcmlhbnRHcm91cCh1aWQsIGlzYSBvciAnUEJY
VmFyaWFudEdyb3VwJywgbmFtZSwgcGFyZW50X2dyb3VwLCBkaXJlY3RvcnkpCisgICAgICAgIHNl
bGYuYWRkX1BCWFZhcmlhbnRHcm91cCh2YXJpYW50X2dyb3VwKQorICAgICAgICByZXR1cm4gdmFy
aWFudF9ncm91cAorCisgICAgZGVmIGNyZWF0ZV9QQlhCdWlsZEZpbGUoc2VsZiwgdWlkPU5vbmUs
IGlzYT1Ob25lLCBuYW1lPU5vbmUsIGZpbGVSZWY9Tm9uZSwgYnVpbGRfcGhhc2U9Tm9uZSk6Cisg
ICAgICAgIGJ1aWxkX2ZpbGUgPSBQQlhCdWlsZEZpbGUodWlkLCBpc2Egb3IgJ1BCWEJ1aWxkRmls
ZScsIG5hbWUsIGZpbGVSZWYsIGJ1aWxkX3BoYXNlKQorICAgICAgICBzZWxmLmFkZF9QQlhCdWls
ZEZpbGUoYnVpbGRfZmlsZSkKKyAgICAgICAgcmV0dXJuIGJ1aWxkX2ZpbGUKKworICAgIGRlZiBj
cmVhdGVfUEJYRmlsZVJlZmVyZW5jZShzZWxmLCB1aWQsIGlzYT1Ob25lLCBuYW1lPU5vbmUsIGZp
bGU9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gUEJYRmlsZVJl
ZmVyZW5jZSh1aWQsIGlzYSBvciAnUEJYRmlsZVJlZmVyZW5jZScsIG5hbWUsIGZpbGUsIGdyb3Vw
KQorICAgICAgICBzZWxmLmFkZF9QQlhGaWxlUmVmZXJlbmNlKGZpbGVfcmVmZXJlbmNlKQorICAg
ICAgICByZXR1cm4gZmlsZV9yZWZlcmVuY2UKKworICAgIGRlZiBjcmVhdGVfWENCdWlsZENvbmZp
Z3VyYXRpb24oc2VsZiwgdWlkLCBpc2E9Tm9uZSwgbmFtZT1Ob25lLCBjb25maWd1cmF0aW9uX2xp
c3Q9Tm9uZSk6CisgICAgICAgIGJ1aWxkX2NvbmZpZ3VyYXRpb24gPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbih1aWQsIGlzYSBvciAnWENCdWlsZENvbmZpZ3VyYXRpb24nLCBuYW1lLCBjb25maWd1cmF0
aW9uX2xpc3QpCisgICAgICAgIHNlbGYuYWRkX1hDQnVpbGRDb25maWd1cmF0aW9uKGJ1aWxkX2Nv
bmZpZ3VyYXRpb24pCisgICAgICAgIHJldHVybiBidWlsZF9jb25maWd1cmF0aW9uCisKKyAgICBk
ZWYgY3JlYXRlX1hDQ29uZmlndXJhdGlvbkxpc3Qoc2VsZiwgdWlkLCBpc2E9Tm9uZSwgbmFtZT1O
b25lLCBjb25maWd1cmF0aW9uX2xpc3Q9Tm9uZSk6CisgICAgICAgIGNvbmZpZ3VyYXRpb25fbGlz
dCA9IFhDQ29uZmlndXJhdGlvbkxpc3QodWlkLCBpc2Egb3IgJ1hDQ29uZmlndXJhdGlvbkxpc3Qn
LCBuYW1lLCBjb25maWd1cmF0aW9uX2xpc3QpCisgICAgICAgIHNlbGYuYWRkX1hDQ29uZmlndXJh
dGlvbkxpc3QoY29uZmlndXJhdGlvbl9saXN0KQorICAgICAgICByZXR1cm4gY29uZmlndXJhdGlv
bl9saXN0CisKKyAgICBkZWYgY3JlYXRlX1BCWEFyYml0cmFyeU9iamVjdChzZWxmLCB1aWQsIGlz
YSwgbmFtZT1Ob25lKToKKyAgICAgICAgb2JqZWN0ID0gUEJYQXJiaXRyYXJ5T2JqZWN0KHVpZCwg
aXNhLCBuYW1lKQorICAgICAgICBzZWxmLmFkZF9QQlhBcmJpdHJhcnlPYmplY3Qob2JqZWN0KQor
ICAgICAgICByZXR1cm4gb2JqZWN0CisKKyAgICBkZWYgZW5zdXJlX2dyb3VwX2Zvcl9kaXJlY3Rv
cnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgZ3JvdXBzID0gc2VsZi5kaXJlY3RvcnlfdG9f
Z3JvdXBzLnNldGRlZmF1bHQoZGlyZWN0b3J5LCBbXSkKKyAgICAgICAgaWYgZ3JvdXBzOgorICAg
ICAgICAgICAgcmV0dXJuIGdyb3Vwc1swXSAgIyBUaGVyZSdzIG5vIHdheSB0byBkZWNpZGUgYmV0
d2VlbiBtdWx0aXBsZSBncm91cHMgcmVmZXJyaW5nIHRoZSBzYW1lIGRpcmVjdG9yeSAtIGNob29z
ZSBhbiBhcmJpdHJhcnkgb25lCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmVsb3cgbGlu
ZSB0cmlnZ2VycyBmaXIgJyR7U0NNfScgaWYgc29tZW9uZSB3YW50cyB0byBhZGQgYSBmaWxlIG9y
IGRpcmVjdG9yeSB0byB0aGUgY2hlY2tvdXQgcm9vdC4KKyAgICAgICAgIyAgICAgICAgVGhpcyBp
cyBPSyBmb3IgV2ViQ29yZSwgYnV0IHBlcmhhcHMgbm90IG90aGVyIHByb2plY3RzLgorICAgICAg
ICAjCisgICAgICAgIHNlbGYudmVyaWZ5KGRpcmVjdG9yeS5wYXJlbnRfZGlyZWN0b3J5LCAiYmFz
ZSBkaXJlY3RvcnkgJXMgbm90IHJlcHJlc2VudGVkIGluIFhjb2RlIHByb2plY3QhIiAlIGRpcmVj
dG9yeS5uYW1lKQorICAgICAgICBiYXNlX2dyb3VwID0gc2VsZi5lbnN1cmVfZ3JvdXBfZm9yX2Rp
cmVjdG9yeShkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSkKKyAgICAgICAgZ3JvdXAgPSBzZWxm
LmNyZWF0ZV9QQlhHcm91cChzZWxmLmNyZWF0ZV9VSUQoKSwgcGFyZW50X2dyb3VwPWJhc2VfZ3Jv
dXAsIGRpcmVjdG9yeT1kaXJlY3RvcnkpCisgICAgICAgIGdyb3VwLnBhdGggPSBkaXJlY3Rvcnku
bmFtZQorICAgICAgICBncm91cC5wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10gPSAnIjxncm91cD4i
JworICAgICAgICBncm91cHMuYXBwZW5kKGdyb3VwKQorICAgICAgICBiYXNlX2dyb3VwLnByb3Bl
cnRpZXMuc2V0ZGVmYXVsdCgnY2hpbGRyZW4nLCBYY29kZVVJRExpc3QoKSkuYXBwZW5kKGdyb3Vw
LnVpZCkKKyAgICAgICAgc2VsZi5kZWJ1ZygiQ3JlYXRlZCAlcyIgJSBncm91cCkKKyAgICAgICAg
cmV0dXJuIGdyb3VwCisKKyAgICBkZWYgYWRkX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgIGFz
c2VydCBmaWxlCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpCisg
ICAgICAgIHNlbGYuaW5mbygiQWRkaW5nIGZpbGUgJXMgdG8gWGNvZGUgcHJvamVjdCIgJSBzZWxm
LmNvbW1vbi5maWxlX2Fic3BhdGgoZmlsZSwgWGNvZGVQcm9qZWN0LlNFUCwgc2VsZi5kaXJlY3Rv
cnlfdG9fdmFyaWFibGUpKQorICAgICAgICBmaWxlX3JlZmVyZW5jZXMgPSBzZWxmLmZpbGVfdG9f
ZmlsZV9yZWZlcmVuY2VzLnNldGRlZmF1bHQoZmlsZSwgc2V0KCkpCisgICAgICAgIGlmIGZpbGVf
cmVmZXJlbmNlczoKKyAgICAgICAgICAgIHNlbGYud2FybmluZygiRmlsZSAlcyBhbHJlYWR5IGNv
bnRhaW5lZCBpbiBYY29kZSBwcm9qZWN0ICVzIC0gbm90IGFkZGluZyBpdCBhZ2FpbiEiICUgKHNl
bGYuY29tbW9uLmZpbGVfYWJzcGF0aChmaWxlLCBYY29kZVByb2plY3QuU0VQLCBzZWxmLmRpcmVj
dG9yeV90b192YXJpYWJsZSksIHNlbGYubmFtZSkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgZ3JvdXAgPSBzZWxmLmVuc3VyZV9ncm91cF9mb3JfZGlyZWN0b3J5KGZpbGUuZGlyZWN0b3J5
KQorICAgICAgICBhc3NlcnQgbm90IGdyb3VwLmNvbnRhaW5zX3JlZmVyZW5jZV90b19maWxlKGZp
bGUpCisgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gc2VsZi5jcmVhdGVfUEJYRmlsZVJlZmVyZW5j
ZShzZWxmLmNyZWF0ZV9VSUQoKSwgZmlsZT1maWxlLCBncm91cD1ncm91cCkKKyAgICAgICAgZmls
ZV9yZWZlcmVuY2UucGF0aCA9IGZpbGUubmFtZQorICAgICAgICBzZWxmLmRlYnVnKCJDcmVhdGVk
ICVzIiAlIGZpbGVfcmVmZXJlbmNlKQorICAgICAgICBncm91cC5fYWRkX2ZpbGVfcmVmZXJlbmNl
KGZpbGVfcmVmZXJlbmNlKQorICAgICAgICBncm91cC5wcm9wZXJ0aWVzLnNldGRlZmF1bHQoJ2No
aWxkcmVuJywgWGNvZGVVSURMaXN0KCkpLmFwcGVuZChmaWxlX3JlZmVyZW5jZS51aWQpCisgICAg
ICAgIGZpbGVfcmVmZXJlbmNlcy5hZGQoZmlsZV9yZWZlcmVuY2UpCisgICAgICAgIChmaWxlX25h
bWUsIGZpbGVfZXh0ZW5zaW9uKSA9IHNlbGYuY29tbW9uLmZpbGVzeXN0ZW0uc3BsaXRleHQoZmls
ZS5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeShmaWxlX2V4dGVuc2lvbiBpbiBFWFRFTlNJT05f
VE9fRklMRUVOQ09ESU5HX0xBU1RLTk9XTkZJTEVUWVBFX0FORF9CVUlMRF9QSEFTRSwgIlVua25v
d24gZmlsZSBleHRlbnNpb24gZm9yIGZpbGUgJyVzJyEiICUgZmlsZS5uYW1lKQorICAgICAgICAo
ZW5jb2RpbmcsIGZpbGVfdHlwZSwgYnVpbGRfcGhhc2VfbmFtZSkgPSBFWFRFTlNJT05fVE9fRklM
RUVOQ09ESU5HX0xBU1RLTk9XTkZJTEVUWVBFX0FORF9CVUlMRF9QSEFTRVtmaWxlX2V4dGVuc2lv
bl0KKyAgICAgICAgZmlsZV9yZWZlcmVuY2UucHJvcGVydGllc1snbGFzdEtub3duRmlsZVR5cGUn
XSA9IGZpbGVfdHlwZQorICAgICAgICBpZiBlbmNvZGluZzoKKyAgICAgICAgICAgIGZpbGVfcmVm
ZXJlbmNlLnByb3BlcnRpZXNbJ2ZpbGVFbmNvZGluZyddID0gZW5jb2RpbmcKKyAgICAgICAgaWYg
YnVpbGRfcGhhc2VfbmFtZToKKyAgICAgICAgICAgIGJ1aWxkX3BoYXNlcyA9IHNlbGYuYnVpbGRf
cGhhc2VfbmFtZV90b19idWlsZF9waGFzZXMuc2V0ZGVmYXVsdChidWlsZF9waGFzZV9uYW1lLCBz
ZXQoKSkKKyAgICAgICAgICAgICMgRklYTUU6IGFkZCBhIG5ldyBidWlsZCBwaGFzZSBpZiBub3Qg
eWV0IHByZXNlbnQKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5KGJ1aWxkX3BoYXNlcywgIkZpbGUg
JXMgc2hvdWxkIGJlIGFkZGVkIHRvIGJ1aWxkIHBoYXNlICclcycgdGhhdCBpcyBub3QgY29udGFp
bmVkIHdpdGhpbiB0YXJnZXQgJXMhIiAlIChmaWxlLm5hbWUsIGJ1aWxkX3BoYXNlX25hbWUsIHNl
bGYubWFpbl90YXJnZXQpKQorICAgICAgICAgICAgYnVpbGRfcGhhc2UgPSBpdGVyKGJ1aWxkX3Bo
YXNlcykubmV4dCgpICAjIGNob29zZSBhbiBhcmJpdHJhcnkgb25lCisgICAgICAgICAgICBidWls
ZF9maWxlID0gc2VsZi5jcmVhdGVfUEJYQnVpbGRGaWxlKHNlbGYuY3JlYXRlX1VJRCgpLCBmaWxl
UmVmPWZpbGVfcmVmZXJlbmNlLCBidWlsZF9waGFzZT1idWlsZF9waGFzZSkKKyAgICAgICAgICAg
IGJ1aWxkX2ZpbGUucHJvcGVydGllc1snZmlsZVJlZiddID0gZmlsZV9yZWZlcmVuY2UudWlkCisg
ICAgICAgICAgICBidWlsZF9waGFzZS5fYWRkX2J1aWxkX2ZpbGUoYnVpbGRfZmlsZSkKKyAgICAg
ICAgICAgIHNlbGYuZGVidWcoIkNyZWF0ZWQgJXMiICUgYnVpbGRfZmlsZSkKKyAgICAgICAgICAg
IGJ1aWxkX3BoYXNlLnByb3BlcnRpZXMuc2V0ZGVmYXVsdCgnZmlsZXMnLCBYY29kZVVJRExpc3Qo
KSkuYXBwZW5kKGJ1aWxkX2ZpbGUudWlkKQo=
</data>
<flag name="review"
          id="139102"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>