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

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>11898</bug_id>
          
          <creation_ts>2017-08-05 04:25:24 +0000</creation_ts>
          <short_desc>bitbake server timeout on first &apos;server.runCommand&apos; call after build starts</short_desc>
          <delta_ts>2017-09-22 05:30:47 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>7</classification_id>
          <classification>Build System, Metadata &amp; Runtime</classification>
          <product>BitBake</product>
          <component>bitbake</component>
          <version>2.4</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Multiple</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.yoctoproject.org/show_bug.cgi?id=12116</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>High</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>2.4 M3</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Reyna">david.reyna</reporter>
          <assigned_to name="Richard Purdie">richard.purdie</assigned_to>
          <cc>poky.bs.watcher</cc>
    
    <cc>poky.watcher</cc>
    
    <cc>randy.macleod</cc>
          
          
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>No (bug/feature does not impact docs)</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>75667</commentid>
    <comment_count>0</comment_count>
    <who name="David Reyna">david.reyna</who>
    <bug_when>2017-08-05 04:25:24 +0000</bug_when>
    <thetext>Recent changes in the bitbake server has caused a serious regression in Toaster UI when running builds from the command line. 

* The issue:

1) Normally Toaster:

  (a) makes a few server calls to fetch variable values (WORKS)
  (b) runs the server call to start the build, (WORKS)
  (c) does addition sever calls to fetch variables to process the incoming event stream (NOW FAILS)

2) Now, the first server call after the build starts the server will time out with the message &quot;Timeout while waiting for a reply from the bitbake server&quot; and the build fails.

3) Here is where the build is failing, in the &quot;toasterui -&gt; BuildInfoHelper() -&gt; __init__&quot;:

  self.tmp_dir = self.server.runCommand([&quot;getVariable&quot;, &quot;TMPDIR&quot;])[0]
  
The timeout occurs from this call, but that just happens to be the first &apos;server.runCommand&apos; after the build started (see below).


* Reproducer

1) Set up Toaster

  $ bash
  $ . ./oe-init-build-env
  $ . toaster start noweb

2) Start build

  $ rm -rf cache/* tmp/ sstate-control/
  $ bitbake core-image-base
  &lt;&lt;&lt; 5 seconds ... &gt;&gt;&gt;
  Timeout while waiting for a reply from the bitbake server
  $
  
3) Repeat #2 to again trigger the error


* What I have tried:

1) I have tested increasing the 5 second timeout to say 10 seconds, but it still fails.

2) I have tried moving the Toaster code around and commenting out server calls so that the first call is as late as possible (in case this is just build start-up overhead problem). 

I have specifically tested delaying any server access until after the &quot;bb.event.TreeDataPreparationStarted&quot; event (easily 30 seconds after the build started).

It can sometimes work in this case - but only if I also increase the server timeout to 10 seconds.

3) If I &quot;rm -rf cache/* tmp/ sstate-control/&quot; before the build, I can consistently get it to fail. If I do not, a subsequent build attempt has a better chance of working.

4) On occasion the observed error is in the server retry code, and I see this:

  [build]$ bitbake core-image-base
  NOTE: Reconnecting to bitbake server...
  NOTE: Retrying server connection... (Traceback (most recent call last):
    File &quot;/opt/dreyna/yp-2.4/poky/bitbake/lib/bb/main.py&quot;, line 449, in setup_bitbake
      server_connection = bb.server.process.connectProcessServer(sockname, featureset)
    File &quot;/opt/dreyna/yp-2.4/poky/bitbake/lib/bb/server/process.py&quot;, line 445, in connectProcessServer
      server_connection.connection.updateFeatureSet(featureset)
    File &quot;/opt/dreyna/yp-2.4/poky/bitbake/lib/bb/server/process.py&quot;, line 319, in updateFeatureSet
      _, error = self.runCommand([&quot;setFeatures&quot;, featureset])
    File &quot;/opt/dreyna/yp-2.4/poky/bitbake/lib/bb/server/process.py&quot;, line 316, in runCommand
      return self.recv.get()
    File &quot;/opt/dreyna/yp-2.4/poky/bitbake/lib/bb/server/process.py&quot;, line 559, in get
      res = self.reader.recv_bytes()
    File &quot;/usr/lib/python3.4/multiprocessing/connection.py&quot;, line 216, in recv_bytes
      buf = self._recv_bytes(maxlength)
    File &quot;/usr/lib/python3.4/multiprocessing/connection.py&quot;, line 416, in _recv_bytes
      buf = self._recv(4)
    File &quot;/usr/lib/python3.4/multiprocessing/connection.py&quot;, line 389, in _recv
      raise EOFError
  EOFError
  )
  ...
  NOTE: Reconnecting to bitbake server...
  NOTE: Retrying server connection...
  ERROR: Unable to connect to bitbake server, or start one
  [build]$ 


5) I believe that this error is not visible with Knotty because that does not make any server requests after the build starts (outside of the build cancel request). The other UIs however might be similarly impacted.

6) If the build output makes it to the display of repos and commit tags, the build will succeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75927</commentid>
    <comment_count>1</comment_count>
      <attachid>3947</attachid>
    <who name="David Reyna">david.reyna</who>
    <bug_when>2017-08-16 21:44:27 +0000</bug_when>
    <thetext>Created attachment 3947
unit test version of knotty to demonstrate defect

Attached is a simple replicator of the server timeout using knotty (to avoid the extra steps of setting up Toaster).

1) Place the attached &quot;knotty_11898.py&quot; into &quot;bitbake/lib/bb/ui&quot;

2) Observe the simple server query added under &quot;bb.event.ParseProgress&quot;:

            if isinstance(event, bb.event.ParseProgress):

                ### TRY TO GET VALUE FROM BB SERVER ###
                print(&quot;vvv BEFORE SERVER.RUNCOMMAND() vvv&quot;)
                tmp_dir = server.runCommand([&quot;getVariable&quot;, &quot;TMPDIR&quot;])[0]
                print(&quot;^^^ AFTER SERVER.RUNCOMMAND() ^^^&quot;)

This is an example of a simple query that Toaster has been making for years in processing the bb events.

3) Run these commands:

  [poky]$ . ./oe-init-build-env 
  [build]$ rm -rf cache/* tmp/ sstate-control/
  [build]$ bitbake -u knotty_11898 quilt-native
  NOTE: Starting bitbake server...
  WARNING: Host distribution &quot;ubuntu-14.04&quot; has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
  vvv BEFORE SERVER.RUNCOMMAND() vvv                              | ETA:  --:--:--
  Timeout while waiting for a reply from the bitbake server
  [build]$


NOTE: I did not need to do the &quot;rm -rf ...&quot; to replicate this error, but you may need to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75992</commentid>
    <comment_count>2</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2017-08-18 16:09:59 +0000</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 3947 [details]
&gt; unit test version of knotty to demonstrate defect
&gt; 
&gt; Attached is a simple replicator of the server timeout using knotty (to avoid
&gt; the extra steps of setting up Toaster).
&gt; 
&gt; 1) Place the attached &quot;knotty_11898.py&quot; into &quot;bitbake/lib/bb/ui&quot;
&gt; 
&gt; 2) Observe the simple server query added under &quot;bb.event.ParseProgress&quot;:
&gt; 
&gt;             if isinstance(event, bb.event.ParseProgress):
&gt; 
&gt;                 ### TRY TO GET VALUE FROM BB SERVER ###
&gt;                 print(&quot;vvv BEFORE SERVER.RUNCOMMAND() vvv&quot;)
&gt;                 tmp_dir = server.runCommand([&quot;getVariable&quot;, &quot;TMPDIR&quot;])[0]
&gt;                 print(&quot;^^^ AFTER SERVER.RUNCOMMAND() ^^^&quot;)
&gt; 
&gt; This is an example of a simple query that Toaster has been making for years
&gt; in processing the bb events.
&gt; 
&gt; 3) Run these commands:
&gt; 
&gt;   [poky]$ . ./oe-init-build-env 
&gt;   [build]$ rm -rf cache/* tmp/ sstate-control/
&gt;   [build]$ bitbake -u knotty_11898 quilt-native
&gt;   NOTE: Starting bitbake server...
&gt;   WARNING: Host distribution &quot;ubuntu-14.04&quot; has not been validated with this
&gt; version of the build system; you may possibly experience unexpected
&gt; failures. It is recommended that you use a tested distribution.
&gt;   vvv BEFORE SERVER.RUNCOMMAND() vvv                              | ETA: 
&gt; --:--:--
&gt;   Timeout while waiting for a reply from the bitbake server
&gt;   [build]$
&gt; 
&gt; 
&gt; NOTE: I did not need to do the &quot;rm -rf ...&quot; to replicate this error, but you
&gt; may need to.

Thanks David, this really does help illustrate the problem. The issue appears to be multiple nested commands. I&apos;ll see what I can figure out about what is going on but this should speed things up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76018</commentid>
    <comment_count>3</comment_count>
    <who name="David Reyna">david.reyna</who>
    <bug_when>2017-08-21 03:27:15 +0000</bug_when>
    <thetext>*** Bug 11833 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76132</commentid>
    <comment_count>4</comment_count>
    <who name="Richard Purdie">richard.purdie</who>
    <bug_when>2017-08-24 15:18:32 +0000</bug_when>
    <thetext>http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=ae874ef55373160e0fc910273915e885f9236ed2</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3947</attachid>
            <date>2017-08-16 21:44:27 +0000</date>
            <delta_ts>2017-08-16 21:44:27 +0000</delta_ts>
            <desc>unit test version of knotty to demonstrate defect</desc>
            <filename>knotty_11898.py</filename>
            <type>text/plain</type>
            <size>29518</size>
            <attacher name="David Reyna">david.reyna</attacher>
            
              <data encoding="base64">IwojIEJpdEJha2UgKE5vKVRUWSBVSSBJbXBsZW1lbnRhdGlvbgojCiMgSGFuZGxpbmcgb3V0cHV0
IHRvIFRUWXMgb3IgZmlsZXMgKG5vIFRUWSkKIwojIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIFJp
Y2hhcmQgUHVyZGllCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YWxvbmcKIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAojIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlz
aW9uCgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgeG1scnBjLmNsaWVudCBhcyB4bWxycGNs
aWIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHByb2dyZXNzYmFyCmltcG9ydCBzaWduYWwKaW1wb3J0
IGJiLm1zZwppbXBvcnQgdGltZQppbXBvcnQgZmNudGwKaW1wb3J0IHN0cnVjdAppbXBvcnQgY29w
eQppbXBvcnQgYXRleGl0Cgpmcm9tIGJiLnVpIGltcG9ydCB1aWhlbHBlcgoKZmVhdHVyZVNldCA9
IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFNdCgpsb2dnZXIgPSBs
b2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCmludGVyYWN0aXZlID0gc3lzLnN0ZG91dC5pc2F0
dHkoKQoKY2xhc3MgQkJQcm9ncmVzcyhwcm9ncmVzc2Jhci5Qcm9ncmVzc0Jhcik6CiAgICBkZWYg
X19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwsIHdpZGdldHM9Tm9uZSwgZXh0cmFwb3M9LTEsIHJl
c2l6ZV9oYW5kbGVyPU5vbmUpOgogICAgICAgIHNlbGYubXNnID0gbXNnCiAgICAgICAgc2VsZi5l
eHRyYXBvcyA9IGV4dHJhcG9zCiAgICAgICAgaWYgbm90IHdpZGdldHM6CiAgICAgICAgICAgIHdp
ZGdldHMgPSBbcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigp
LCAnICcsCiAgICAgICAgICAgIHByb2dyZXNzYmFyLkVUQSgpXQogICAgICAgICAgICBzZWxmLmV4
dHJhcG9zID0gNAoKICAgICAgICBpZiByZXNpemVfaGFuZGxlcjoKICAgICAgICAgICAgc2VsZi5f
cmVzaXplX2RlZmF1bHQgPSByZXNpemVfaGFuZGxlcgogICAgICAgIGVsc2U6CiAgICAgICAgICAg
IHNlbGYuX3Jlc2l6ZV9kZWZhdWx0ID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHV0lOQ0gp
CiAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX19pbml0X18oc2VsZiwgbWF4dmFsLCBb
c2VsZi5tc2cgKyAiOiAiXSArIHdpZGdldHMsIGZkPXN5cy5zdGRvdXQpCgogICAgZGVmIF9oYW5k
bGVfcmVzaXplKHNlbGYsIHNpZ251bT1Ob25lLCBmcmFtZT1Ob25lKToKICAgICAgICBwcm9ncmVz
c2Jhci5Qcm9ncmVzc0Jhci5faGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW0sIGZyYW1lKQogICAg
ICAgIGlmIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0OgogICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVm
YXVsdChzaWdudW0sIGZyYW1lKQoKICAgIGRlZiBmaW5pc2goc2VsZik6CiAgICAgICAgcHJvZ3Jl
c3NiYXIuUHJvZ3Jlc3NCYXIuZmluaXNoKHNlbGYpCiAgICAgICAgaWYgc2VsZi5fcmVzaXplX2Rl
ZmF1bHQ6CiAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLl9y
ZXNpemVfZGVmYXVsdCkKCiAgICBkZWYgc2V0bWVzc2FnZShzZWxmLCBtc2cpOgogICAgICAgIHNl
bGYubXNnID0gbXNnCiAgICAgICAgc2VsZi53aWRnZXRzWzBdID0gbXNnCgogICAgZGVmIHNldGV4
dHJhKHNlbGYsIGV4dHJhKToKICAgICAgICBpZiBzZWxmLmV4dHJhcG9zID4gLTE6CiAgICAgICAg
ICAgIGlmIGV4dHJhOgogICAgICAgICAgICAgICAgZXh0cmFzdHIgPSBzdHIoZXh0cmEpCiAgICAg
ICAgICAgICAgICBpZiBleHRyYXN0clswXSAhPSAnICc6CiAgICAgICAgICAgICAgICAgICAgZXh0
cmFzdHIgPSAnICcgKyBleHRyYXN0cgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
ZXh0cmFzdHIgPSAnJwogICAgICAgICAgICBzZWxmLndpZGdldHNbc2VsZi5leHRyYXBvc10gPSBl
eHRyYXN0cgoKICAgIGRlZiBfbmVlZF91cGRhdGUoc2VsZik6CiAgICAgICAgIyBXZSBhbHdheXMg
d2FudCB0aGUgYmFyIHRvIHByaW50IHdoZW4gdXBkYXRlKCkgaXMgY2FsbGVkCiAgICAgICAgcmV0
dXJuIFRydWUKCmNsYXNzIE5vbkludGVyYWN0aXZlUHJvZ3Jlc3Mob2JqZWN0KToKICAgIGZvYmog
PSBzeXMuc3Rkb3V0CgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgbWF4dmFsKToKICAgICAg
ICBzZWxmLm1zZyA9IG1zZwogICAgICAgIHNlbGYubWF4dmFsID0gbWF4dmFsCiAgICAgICAgc2Vs
Zi5maW5pc2hlZCA9IEZhbHNlCgogICAgZGVmIHN0YXJ0KHNlbGYsIHVwZGF0ZT1UcnVlKToKICAg
ICAgICBzZWxmLmZvYmoud3JpdGUoIiVzLi4uIiAlIHNlbGYubXNnKQogICAgICAgIHNlbGYuZm9i
ai5mbHVzaCgpCiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVl
KToKICAgICAgICBwYXNzCgogICAgZGVmIGZpbmlzaChzZWxmKToKICAgICAgICBpZiBzZWxmLmZp
bmlzaGVkOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBzZWxmLmZvYmoud3JpdGUoImRvbmUu
XG4iKQogICAgICAgIHNlbGYuZm9iai5mbHVzaCgpCiAgICAgICAgc2VsZi5maW5pc2hlZCA9IFRy
dWUKCmRlZiBuZXdfcHJvZ3Jlc3MobXNnLCBtYXh2YWwpOgogICAgaWYgaW50ZXJhY3RpdmU6CiAg
ICAgICAgcmV0dXJuIEJCUHJvZ3Jlc3MobXNnLCBtYXh2YWwpCiAgICBlbHNlOgogICAgICAgIHJl
dHVybiBOb25JbnRlcmFjdGl2ZVByb2dyZXNzKG1zZywgbWF4dmFsKQoKZGVmIHBsdXJhbGlzZShz
aW5ndWxhciwgcGx1cmFsLCBxdHkpOgogICAgaWYocXR5ID09IDEpOgogICAgICAgIHJldHVybiBz
aW5ndWxhciAlIHF0eQogICAgZWxzZToKICAgICAgICByZXR1cm4gcGx1cmFsICUgcXR5CgoKY2xh
c3MgSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZiwgZm9ybWF0KToKICAgICAgICBzZWxmLnRmID0gdGYKICAgICAgICBzZWxm
LmZvcm1hdCA9IGZvcm1hdAoKICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKICAgICAgICBp
ZiByZWNvcmQubGV2ZWxubyA9PSBzZWxmLmZvcm1hdC5OT1RFIGFuZCAocmVjb3JkLm1zZy5zdGFy
dHN3aXRoKCJSdW5uaW5nIikgb3IgcmVjb3JkLm1zZy5zdGFydHN3aXRoKCJyZWNpcGUgIikpOgog
ICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICBzZWxmLnRmLmNsZWFyRm9vdGVyKCkKICAg
ICAgICByZXR1cm4gVHJ1ZQoKY2xhc3MgVGVybWluYWxGaWx0ZXIob2JqZWN0KToKICAgIHJvd3Mg
PSAyNQogICAgY29sdW1ucyA9IDgwCgogICAgZGVmIHNpZ3dpbmNoX2hhbmRsZShzZWxmLCBzaWdu
dW0sIGZyYW1lKToKICAgICAgICBzZWxmLnJvd3MsIHNlbGYuY29sdW1ucyA9IHNlbGYuZ2V0VGVy
bWluYWxDb2x1bW5zKCkKICAgICAgICBpZiBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0OgogICAgICAg
ICAgICBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0KHNpZ251bSwgZnJhbWUpCgogICAgZGVmIGdldFRl
cm1pbmFsQ29sdW1ucyhzZWxmKToKICAgICAgICBkZWYgaW9jdGxfR1dJTlNaKGZkKToKICAgICAg
ICAgICAgdHJ5OgogICAgICAgICAgICAgICAgY3IgPSBzdHJ1Y3QudW5wYWNrKCdoaCcsIGZjbnRs
LmlvY3RsKGZkLCBzZWxmLnRlcm1pb3MuVElPQ0dXSU5TWiwgJzEyMzQnKSkKICAgICAgICAgICAg
ZXhjZXB0OgogICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgcmV0dXJuIGNy
CiAgICAgICAgY3IgPSBpb2N0bF9HV0lOU1ooc3lzLnN0ZG91dC5maWxlbm8oKSkKICAgICAgICBp
ZiBub3QgY3I6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbihv
cy5jdGVybWlkKCksIG9zLk9fUkRPTkxZKQogICAgICAgICAgICAgICAgY3IgPSBpb2N0bF9HV0lO
U1ooZmQpCiAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICAgICAgZXhjZXB0Ogog
ICAgICAgICAgICAgICAgcGFzcwogICAgICAgIGlmIG5vdCBjcjoKICAgICAgICAgICAgdHJ5Ogog
ICAgICAgICAgICAgICAgY3IgPSAoZW52WydMSU5FUyddLCBlbnZbJ0NPTFVNTlMnXSkKICAgICAg
ICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgY3IgPSAoMjUsIDgwKQogICAgICAgIHJldHVy
biBjcgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNv
bnNvbGUsIGZvcm1hdCwgcXVpZXQpOgogICAgICAgIHNlbGYubWFpbiA9IG1haW4KICAgICAgICBz
ZWxmLmhlbHBlciA9IGhlbHBlcgogICAgICAgIHNlbGYuY3V1ID0gTm9uZQogICAgICAgIHNlbGYu
c3RkaW5iYWNrdXAgPSBOb25lCiAgICAgICAgc2VsZi5pbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQu
aXNhdHR5KCkKICAgICAgICBzZWxmLmZvb3Rlcl9wcmVzZW50ID0gRmFsc2UKICAgICAgICBzZWxm
Lmxhc3RwaWRzID0gW10KICAgICAgICBzZWxmLmxhc3R0aW1lID0gTm9uZQogICAgICAgIHNlbGYu
cXVpZXQgPSBxdWlldAoKICAgICAgICBpZiBub3Qgc2VsZi5pbnRlcmFjdGl2ZToKICAgICAgICAg
ICAgcmV0dXJuCgogICAgICAgIHRyeToKICAgICAgICAgICAgaW1wb3J0IGN1cnNlcwogICAgICAg
IGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBUaGUga25v
dHR5IHVpIGNvdWxkIG5vdCBsb2FkIHRoZSByZXF1aXJlZCBjdXJzZXMgcHl0aG9uIG1vZHVsZS4i
KQoKICAgICAgICBpbXBvcnQgdGVybWlvcwogICAgICAgIHNlbGYuY3Vyc2VzID0gY3Vyc2VzCiAg
ICAgICAgc2VsZi50ZXJtaW9zID0gdGVybWlvcwogICAgICAgIHRyeToKICAgICAgICAgICAgZmQg
PSBzeXMuc3RkaW4uZmlsZW5vKCkKICAgICAgICAgICAgc2VsZi5zdGRpbmJhY2t1cCA9IHRlcm1p
b3MudGNnZXRhdHRyKGZkKQogICAgICAgICAgICBuZXcgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc3Rk
aW5iYWNrdXApCiAgICAgICAgICAgIG5ld1szXSA9IG5ld1szXSAmIH50ZXJtaW9zLkVDSE8KICAg
ICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBuZXcpCiAg
ICAgICAgICAgIGN1cnNlcy5zZXR1cHRlcm0oKQogICAgICAgICAgICBpZiBjdXJzZXMudGlnZXRu
dW0oImNvbG9ycyIpID4gMjoKICAgICAgICAgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQog
ICAgICAgICAgICBzZWxmLmVkID0gY3Vyc2VzLnRpZ2V0c3RyKCJlZCIpCiAgICAgICAgICAgIGlm
IHNlbGYuZWQ6CiAgICAgICAgICAgICAgICBzZWxmLmN1dSA9IGN1cnNlcy50aWdldHN0cigiY3V1
IikKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc2VsZi5fc2lnd2luY2hfZGVmYXVs
dCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQogICAgICAgICAgICAgICAgc2ln
bmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuc2lnd2luY2hfaGFuZGxlKQogICAgICAg
ICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgIHNlbGYucm93cywg
c2VsZi5jb2x1bW5zID0gc2VsZi5nZXRUZXJtaW5hbENvbHVtbnMoKQogICAgICAgIGV4Y2VwdDoK
ICAgICAgICAgICAgc2VsZi5jdXUgPSBOb25lCiAgICAgICAgaWYgbm90IHNlbGYuY3V1OgogICAg
ICAgICAgICBzZWxmLmludGVyYWN0aXZlID0gRmFsc2UKICAgICAgICAgICAgYmIubm90ZSgiVW5h
YmxlIHRvIHVzZSBpbnRlcmFjdGl2ZSBtb2RlIGZvciB0aGlzIHRlcm1pbmFsLCB1c2luZyBmYWxs
YmFjayIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIGNvbnNvbGU6CiAgICAgICAgICAg
IGNvbnNvbGUuYWRkRmlsdGVyKEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihzZWxmLCBmb3JtYXQp
KQogICAgICAgIGlmIGVycmNvbnNvbGU6CiAgICAgICAgICAgIGVycmNvbnNvbGUuYWRkRmlsdGVy
KEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihzZWxmLCBmb3JtYXQpKQoKICAgICAgICBzZWxmLm1h
aW5fcHJvZ3Jlc3MgPSBOb25lCgogICAgZGVmIGNsZWFyRm9vdGVyKHNlbGYpOgogICAgICAgIGlm
IHNlbGYuZm9vdGVyX3ByZXNlbnQ6CiAgICAgICAgICAgIGxpbmVzID0gc2VsZi5mb290ZXJfcHJl
c2VudAogICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShzZWxmLmN1cnNlcy50cGFy
bShzZWxmLmN1dSwgbGluZXMpKQogICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShz
ZWxmLmN1cnNlcy50cGFybShzZWxmLmVkKSkKICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgp
CiAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IEZhbHNlCgogICAgZGVmIHVwZGF0ZUZvb3Rl
cihzZWxmKToKICAgICAgICBpZiBub3Qgc2VsZi5jdXU6CiAgICAgICAgICAgIHJldHVybgogICAg
ICAgIGFjdGl2ZXRhc2tzID0gc2VsZi5oZWxwZXIucnVubmluZ190YXNrcwogICAgICAgIGZhaWxl
ZHRhc2tzID0gc2VsZi5oZWxwZXIuZmFpbGVkX3Rhc2tzCiAgICAgICAgcnVubmluZ3BpZHMgPSBz
ZWxmLmhlbHBlci5ydW5uaW5nX3BpZHMKICAgICAgICBjdXJyZW50dGltZSA9IHRpbWUudGltZSgp
CiAgICAgICAgaWYgbm90IHNlbGYubGFzdHRpbWUgb3IgKGN1cnJlbnR0aW1lIC0gc2VsZi5sYXN0
dGltZSA+IDUpOgogICAgICAgICAgICBzZWxmLmhlbHBlci5uZWVkVXBkYXRlID0gVHJ1ZQogICAg
ICAgICAgICBzZWxmLmxhc3R0aW1lID0gY3VycmVudHRpbWUKICAgICAgICBpZiBzZWxmLmZvb3Rl
cl9wcmVzZW50IGFuZCBub3Qgc2VsZi5oZWxwZXIubmVlZFVwZGF0ZToKICAgICAgICAgICAgcmV0
dXJuCiAgICAgICAgc2VsZi5oZWxwZXIubmVlZFVwZGF0ZSA9IEZhbHNlCiAgICAgICAgaWYgc2Vs
Zi5mb290ZXJfcHJlc2VudDoKICAgICAgICAgICAgc2VsZi5jbGVhckZvb3RlcigpCiAgICAgICAg
aWYgKG5vdCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsIG9yIHNlbGYuaGVscGVyLnRhc2tu
dW1iZXJfY3VycmVudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKSBhbmQgbm90IGxl
bihhY3RpdmV0YXNrcyk6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIHRhc2tzID0gW10KICAg
ICAgICBmb3IgdCBpbiBydW5uaW5ncGlkczoKICAgICAgICAgICAgcHJvZ3Jlc3MgPSBhY3RpdmV0
YXNrc1t0XS5nZXQoInByb2dyZXNzIiwgTm9uZSkKICAgICAgICAgICAgaWYgcHJvZ3Jlc3MgaXMg
bm90IE5vbmU6CiAgICAgICAgICAgICAgICBwYmFyID0gYWN0aXZldGFza3NbdF0uZ2V0KCJwcm9n
cmVzc2JhciIsIE5vbmUpCiAgICAgICAgICAgICAgICByYXRlID0gYWN0aXZldGFza3NbdF0uZ2V0
KCJyYXRlIiwgTm9uZSkKICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBhY3RpdmV0YXNrc1t0
XS5nZXQoInN0YXJ0dGltZSIsIE5vbmUpCiAgICAgICAgICAgICAgICBpZiBub3QgcGJhciBvciBw
YmFyLmJvdW5jaW5nICE9IChwcm9ncmVzcyA8IDApOgogICAgICAgICAgICAgICAgICAgIGlmIHBy
b2dyZXNzIDwgMDoKICAgICAgICAgICAgICAgICAgICAgICAgcGJhciA9IEJCUHJvZ3Jlc3MoIjA6
ICVzIChwaWQgJXMpICIgJSAoYWN0aXZldGFza3NbdF1bInRpdGxlIl0sIHQpLCAxMDAsIHdpZGdl
dHM9W3Byb2dyZXNzYmFyLkJvdW5jaW5nU2xpZGVyKCksICcnXSwgZXh0cmFwb3M9MiwgcmVzaXpl
X2hhbmRsZXI9c2VsZi5zaWd3aW5jaF9oYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHBi
YXIuYm91bmNpbmcgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICAgICAgICAgcGJhciA9IEJCUHJvZ3Jlc3MoIjA6ICVzIChwaWQgJXMpICIgJSAoYWN0aXZl
dGFza3NbdF1bInRpdGxlIl0sIHQpLCAxMDAsIHdpZGdldHM9W3Byb2dyZXNzYmFyLlBlcmNlbnRh
Z2UoKSwgJyAnLCBwcm9ncmVzc2Jhci5CYXIoKSwgJyddLCBleHRyYXBvcz00LCByZXNpemVfaGFu
ZGxlcj1zZWxmLnNpZ3dpbmNoX2hhbmRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgcGJhci5i
b3VuY2luZyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgYWN0aXZldGFza3NbdF1bInByb2dy
ZXNzYmFyIl0gPSBwYmFyCiAgICAgICAgICAgICAgICB0YXNrcy5hcHBlbmQoKHBiYXIsIHByb2dy
ZXNzLCByYXRlLCBzdGFydF90aW1lKSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWUgPSBhY3RpdmV0YXNrc1t0XS5nZXQoInN0YXJ0dGltZSIsIE5vbmUpCiAgICAg
ICAgICAgICAgICBpZiBzdGFydF90aW1lOgogICAgICAgICAgICAgICAgICAgIHRhc2tzLmFwcGVu
ZCgiJXMgLSAlZHMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCBjdXJyZW50
dGltZSAtIHN0YXJ0X3RpbWUsIHQpKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICAgICB0YXNrcy5hcHBlbmQoIiVzIChwaWQgJXMpIiAlIChhY3RpdmV0YXNrc1t0XVsidGl0
bGUiXSwgdCkpCgogICAgICAgIGlmIHNlbGYubWFpbi5zaHV0ZG93bjoKICAgICAgICAgICAgY29u
dGVudCA9ICJXYWl0aW5nIGZvciAlcyBydW5uaW5nIHRhc2tzIHRvIGZpbmlzaDoiICUgbGVuKGFj
dGl2ZXRhc2tzKQogICAgICAgICAgICBwcmludChjb250ZW50KQogICAgICAgIGVsc2U6CiAgICAg
ICAgICAgIGlmIHNlbGYucXVpZXQ6CiAgICAgICAgICAgICAgICBjb250ZW50ID0gIlJ1bm5pbmcg
dGFza3MgKCVzIG9mICVzKSIgJSAoc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50LCBzZWxm
LmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKQogICAgICAgICAgICBlbGlmIG5vdCBsZW4oYWN0aXZl
dGFza3MpOgogICAgICAgICAgICAgICAgY29udGVudCA9ICJObyBjdXJyZW50bHkgcnVubmluZyB0
YXNrcyAoJXMgb2YgJXMpIiAlIChzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQsIHNlbGYu
aGVscGVyLnRhc2tudW1iZXJfdG90YWwpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICBjb250ZW50ID0gIkN1cnJlbnRseSAlMnMgcnVubmluZyB0YXNrcyAoJXMgb2YgJXMpIiAlIChs
ZW4oYWN0aXZldGFza3MpLCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQsIHNlbGYuaGVs
cGVyLnRhc2tudW1iZXJfdG90YWwpCiAgICAgICAgICAgIG1heHRhc2sgPSBzZWxmLmhlbHBlci50
YXNrbnVtYmVyX3RvdGFsCiAgICAgICAgICAgIGlmIG5vdCBzZWxmLm1haW5fcHJvZ3Jlc3Mgb3Ig
c2VsZi5tYWluX3Byb2dyZXNzLm1heHZhbCAhPSBtYXh0YXNrOgogICAgICAgICAgICAgICAgd2lk
Z2V0cyA9IFsnICcsIHByb2dyZXNzYmFyLlBlcmNlbnRhZ2UoKSwgJyAnLCBwcm9ncmVzc2Jhci5C
YXIoKV0KICAgICAgICAgICAgICAgIHNlbGYubWFpbl9wcm9ncmVzcyA9IEJCUHJvZ3Jlc3MoIlJ1
bm5pbmcgdGFza3MiLCBtYXh0YXNrLCB3aWRnZXRzPXdpZGdldHMsIHJlc2l6ZV9oYW5kbGVyPXNl
bGYuc2lnd2luY2hfaGFuZGxlKQogICAgICAgICAgICAgICAgc2VsZi5tYWluX3Byb2dyZXNzLnN0
YXJ0KEZhbHNlKQogICAgICAgICAgICBzZWxmLm1haW5fcHJvZ3Jlc3Muc2V0bWVzc2FnZShjb250
ZW50KQogICAgICAgICAgICBwcm9ncmVzcyA9IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVu
dCAtIDEKICAgICAgICAgICAgaWYgcHJvZ3Jlc3MgPCAwOgogICAgICAgICAgICAgICAgcHJvZ3Jl
c3MgPSAwCiAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLm1haW5fcHJvZ3Jlc3MudXBkYXRlKHBy
b2dyZXNzKQogICAgICAgICAgICBwcmludCgnJykKICAgICAgICBsaW5lcyA9IDEgKyBpbnQobGVu
KGNvbnRlbnQpIC8gKHNlbGYuY29sdW1ucyArIDEpKQogICAgICAgIGlmIHNlbGYucXVpZXQgPT0g
MDoKICAgICAgICAgICAgZm9yIHRhc2tudW0sIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzWzooc2Vs
Zi5yb3dzIC0gMildKToKICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFzaywgdHVwbGUp
OgogICAgICAgICAgICAgICAgICAgIHBiYXIsIHByb2dyZXNzLCByYXRlLCBzdGFydF90aW1lID0g
dGFzawogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYmFyLnN0YXJ0X3RpbWU6CiAgICAgICAg
ICAgICAgICAgICAgICAgIHBiYXIuc3RhcnQoRmFsc2UpCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIHN0YXJ0X3RpbWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmFyLnN0YXJ0X3Rp
bWUgPSBzdGFydF90aW1lCiAgICAgICAgICAgICAgICAgICAgcGJhci5zZXRtZXNzYWdlKCclczol
cycgJSAodGFza251bSwgcGJhci5tc2cuc3BsaXQoJzonLCAxKVsxXSkpCiAgICAgICAgICAgICAg
ICAgICAgaWYgcHJvZ3Jlc3MgPiAtMToKICAgICAgICAgICAgICAgICAgICAgICAgcGJhci5zZXRl
eHRyYShyYXRlKQogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gcGJhci51cGRhdGUo
cHJvZ3Jlc3MpCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGVudCA9IHBiYXIudXBkYXRlKDEpCiAgICAgICAgICAgICAgICAgICAgcHJpbnQoJycp
CiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAiJXM6
ICVzIiAlICh0YXNrbnVtLCB0YXNrKQogICAgICAgICAgICAgICAgICAgIHByaW50KGNvbnRlbnQp
CiAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzICsgMSArIGludChsZW4oY29udGVudCkgLyAo
c2VsZi5jb2x1bW5zICsgMSkpCiAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IGxpbmVzCiAg
ICAgICAgc2VsZi5sYXN0cGlkcyA9IHJ1bm5pbmdwaWRzWzpdCiAgICAgICAgc2VsZi5sYXN0Y291
bnQgPSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQKCiAgICBkZWYgZmluaXNoKHNlbGYp
OgogICAgICAgIGlmIHNlbGYuc3RkaW5iYWNrdXA6CiAgICAgICAgICAgIGZkID0gc3lzLnN0ZGlu
LmZpbGVubygpCiAgICAgICAgICAgIHNlbGYudGVybWlvcy50Y3NldGF0dHIoZmQsIHNlbGYudGVy
bWlvcy5UQ1NBRFJBSU4sIHNlbGYuc3RkaW5iYWNrdXApCgpkZWYgX2xvZ19zZXR0aW5nc19mcm9t
X3NlcnZlcihzZXJ2ZXIsIG9ic2VydmVfb25seSk6CiAgICAjIEdldCB2YWx1ZXMgb2YgdmFyaWFi
bGVzIHdoaWNoIGNvbnRyb2wgb3VyIG91dHB1dAogICAgaW5jbHVkZWxvZ3MsIGVycm9yID0gc2Vy
dmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTIl0pCiAgICBpZiBl
cnJvcjoKICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIEJC
SU5DTFVERUxPR1MgdmFyaWFibGU6ICVzIiAlIGVycm9yKQogICAgICAgIHJhaXNlIEJhc2VFeGNl
cHRpb24oZXJyb3IpCiAgICBsb2dsaW5lcywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdl
dFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1NfTElORVMiXSkKICAgIGlmIGVycm9yOgogICAgICAg
IGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HU19M
SU5FUyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCiAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihl
cnJvcikKICAgIGlmIG9ic2VydmVfb25seToKICAgICAgICBjbWQgPSAnZ2V0VmFyaWFibGUnCiAg
ICBlbHNlOgogICAgICAgIGNtZCA9ICdnZXRTZXRWYXJpYWJsZScKICAgIGNvbnNvbGVsb2dmaWxl
LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFtjbWQsICJCQl9DT05TT0xFTE9HIl0pCiAgICBp
ZiBlcnJvcjoKICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9m
IEJCX0NPTlNPTEVMT0cgdmFyaWFibGU6ICVzIiAlIGVycm9yKQogICAgICAgIHJhaXNlIEJhc2VF
eGNlcHRpb24oZXJyb3IpCiAgICByZXR1cm4gaW5jbHVkZWxvZ3MsIGxvZ2xpbmVzLCBjb25zb2xl
bG9nZmlsZQoKX2V2dF9saXN0ID0gWyAiYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCIsICJi
Yi5ldmVudC5Mb2dFeGVjVFRZIiwgImxvZ2dpbmcuTG9nUmVjb3JkIiwKICAgICAgICAgICAgICAi
YmIuYnVpbGQuVGFza0ZhaWxlZCIsICJiYi5idWlsZC5UYXNrQmFzZSIsICJiYi5ldmVudC5QYXJz
ZVN0YXJ0ZWQiLAogICAgICAgICAgICAgICJiYi5ldmVudC5QYXJzZVByb2dyZXNzIiwgImJiLmV2
ZW50LlBhcnNlQ29tcGxldGVkIiwgImJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQiLAogICAgICAg
ICAgICAgICJiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyIsICJiYi5ldmVudC5DYWNoZUxvYWRD
b21wbGV0ZWQiLCAiYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkIiwKICAgICAgICAgICAgICAiYmIu
Y29tbWFuZC5Db21tYW5kRXhpdCIsICJiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQiLCAgImJi
LmNvb2tlci5Db29rZXJFeGl0IiwKICAgICAgICAgICAgICAiYmIuZXZlbnQuTXVsdGlwbGVQcm92
aWRlcnMiLCAiYmIuZXZlbnQuTm9Qcm92aWRlciIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFz
a1N0YXJ0ZWQiLAogICAgICAgICAgICAgICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVk
IiwgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1
ZXVlVGFza0ZhaWxlZCIsCiAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkQmFzZSIsICJiYi5i
dWlsZC5UYXNrU3RhcnRlZCIsICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIiwgImJiLmJ1aWxkLlRh
c2tGYWlsZWRTaWxlbnQiLAogICAgICAgICAgICAgICJiYi5idWlsZC5UYXNrUHJvZ3Jlc3MiLCAi
YmIuZXZlbnQuUHJvY2Vzc1N0YXJ0ZWQiLCAiYmIuZXZlbnQuUHJvY2Vzc1Byb2dyZXNzIiwgImJi
LmV2ZW50LlByb2Nlc3NGaW5pc2hlZCJdCgpkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwg
cGFyYW1zLCB0ZiA9IFRlcm1pbmFsRmlsdGVyKToKCiAgICBpbmNsdWRlbG9ncywgbG9nbGluZXMs
IGNvbnNvbGVsb2dmaWxlID0gX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIsIHBhcmFt
cy5vYnNlcnZlX29ubHkpCgogICAgaWYgc3lzLnN0ZGluLmlzYXR0eSgpIGFuZCBzeXMuc3Rkb3V0
LmlzYXR0eSgpOgogICAgICAgIGxvZ19leGVjX3R0eSA9IFRydWUKICAgIGVsc2U6CiAgICAgICAg
bG9nX2V4ZWNfdHR5ID0gRmFsc2UKCiAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkK
CiAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCiAgICBlcnJj
b25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpCiAgICBmb3JtYXRfc3Ry
ID0gIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgogICAgZm9ybWF0ID0gYmIubXNnLkJCTG9n
Rm9ybWF0dGVyKGZvcm1hdF9zdHIpCiAgICBpZiBwYXJhbXMub3B0aW9ucy5xdWlldCA9PSAwOgog
ICAgICAgIGZvcmNlbGV2ZWwgPSBOb25lCiAgICBlbGlmIHBhcmFtcy5vcHRpb25zLnF1aWV0ID4g
MjoKICAgICAgICBmb3JjZWxldmVsID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyLkVSUk9SCiAgICBl
bHNlOgogICAgICAgIGZvcmNlbGV2ZWwgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIuV0FSTklORwog
ICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVy
U3RkT3V0LCBmb3JjZWxldmVsKQogICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoZXJyY29u
c29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkRXJyKQogICAgY29uc29sZS5zZXRGb3JtYXR0ZXIo
Zm9ybWF0KQogICAgZXJyY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQogICAgaWYgbm90IGJi
Lm1zZy5oYXNfY29uc29sZV9oYW5kbGVyKGxvZ2dlcik6CiAgICAgICAgbG9nZ2VyLmFkZEhhbmRs
ZXIoY29uc29sZSkKICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihlcnJjb25zb2xlKQoKICAgIGJi
LnV0aWxzLnNldF9wcm9jZXNzX25hbWUoIktub3R0eVVJIikKCiAgICBpZiBwYXJhbXMub3B0aW9u
cy5yZW1vdGVfc2VydmVyIGFuZCBwYXJhbXMub3B0aW9ucy5raWxsX3NlcnZlcjoKICAgICAgICBz
ZXJ2ZXIudGVybWluYXRlU2VydmVyKCkKICAgICAgICByZXR1cm4KCiAgICBjb25zb2xlbG9nID0g
Tm9uZQogICAgaWYgY29uc29sZWxvZ2ZpbGUgYW5kIG5vdCBwYXJhbXMub3B0aW9ucy5zaG93X2Vu
dmlyb25tZW50IGFuZCBub3QgcGFyYW1zLm9wdGlvbnMuc2hvd192ZXJzaW9uczoKICAgICAgICBi
Yi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSkKICAgICAg
ICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKICAgICAg
ICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihjb25zb2xlbG9nZmlsZSkKICAgICAg
ICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQogICAgICAgIGNvbnNvbGVs
b2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihj
b25zb2xlbG9nKQogICAgICAgIGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1l
KGNvbnNvbGVsb2dmaWxlKSwgJ2NvbnNvbGUtbGF0ZXN0LmxvZycpCiAgICAgICAgYmIudXRpbHMu
cmVtb3ZlKGxvZ2xpbmspCiAgICAgICAgdHJ5OgogICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0
aC5iYXNlbmFtZShjb25zb2xlbG9nZmlsZSksIGxvZ2xpbmspCiAgICAgICAgZXhjZXB0IE9TRXJy
b3I6CiAgICAgICAgICAgcGFzcwoKICAgIGxsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5j
b25zdHJ1Y3RMb2dPcHRpb25zKCkKICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0RXZlbnRNYXNr
Iiwgc2VydmVyLmdldEV2ZW50SGFuZGxlKCksIGxsZXZlbCwgZGVidWdfZG9tYWlucywgX2V2dF9s
aXN0XSkKCiAgICB1bml2ZXJzZSA9IEZhbHNlCiAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25s
eToKICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCiAgICAgICAgcGFyYW1z
LnVwZGF0ZVRvU2VydmVyKHNlcnZlciwgb3MuZW52aXJvbi5jb3B5KCkpCiAgICAgICAgY21kbGlu
ZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQogICAgICAgIGlmIG5vdCBjbWRsaW5lOgogICAgICAg
ICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQg
ZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9u
LiIpCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQg
Y21kbGluZVsnbXNnJ106CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihjbWRsaW5lWydtc2cnXSkK
ICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICBpZiBjbWRsaW5lWydhY3Rpb24nXVswXSA9PSAi
YnVpbGRUYXJnZXRzIiBhbmQgInVuaXZlcnNlIiBpbiBjbWRsaW5lWydhY3Rpb24nXVsxXToKICAg
ICAgICAgICAgdW5pdmVyc2UgPSBUcnVlCgogICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVu
Q29tbWFuZChjbWRsaW5lWydhY3Rpb24nXSkKICAgICAgICBpZiBlcnJvcjoKICAgICAgICAgICAg
bG9nZ2VyLmVycm9yKCJDb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kbGluZSwgZXJyb3Ip
KQogICAgICAgICAgICByZXR1cm4gMQogICAgICAgIGVsaWYgcmV0ICE9IFRydWU6CiAgICAgICAg
ICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCAnJXMnIGZhaWxlZDogcmV0dXJuZWQgJXMiICUgKGNt
ZGxpbmUsIHJldCkpCiAgICAgICAgICAgIHJldHVybiAxCgoKICAgIHBhcnNlcHJvZ3Jlc3MgPSBO
b25lCiAgICBjYWNoZXByb2dyZXNzID0gTm9uZQogICAgbWFpbi5zaHV0ZG93biA9IDAKICAgIGlu
dGVycnVwdGVkID0gRmFsc2UKICAgIHJldHVybl92YWx1ZSA9IDAKICAgIGVycm9ycyA9IDAKICAg
IHdhcm5pbmdzID0gMAogICAgdGFza2ZhaWx1cmVzID0gW10KCiAgICB0ZXJtZmlsdGVyID0gdGYo
bWFpbiwgaGVscGVyLCBjb25zb2xlLCBlcnJjb25zb2xlLCBmb3JtYXQsIHBhcmFtcy5vcHRpb25z
LnF1aWV0KQogICAgYXRleGl0LnJlZ2lzdGVyKHRlcm1maWx0ZXIuZmluaXNoKQoKICAgIHdoaWxl
IFRydWU6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0
RXZlbnQoMCkKICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKICAgICAgICAgICAgICAgIGlm
IG1haW4uc2h1dGRvd24gPiAxOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAg
ICAgICB0ZXJtZmlsdGVyLnVwZGF0ZUZvb3RlcigpCiAgICAgICAgICAgICAgICBldmVudCA9IGV2
ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKICAgICAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5v
bmU6CiAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaGVscGVyLmV2ZW50
SGFuZGxlcihldmVudCkKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVl
dWUucnVuUXVldWVFeGl0V2FpdCk6CiAgICAgICAgICAgICAgICBpZiBub3QgbWFpbi5zaHV0ZG93
bjoKICAgICAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMQogICAgICAgICAgICAgICAg
Y29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhl
Y1RUWSk6CiAgICAgICAgICAgICAgICBpZiBsb2dfZXhlY190dHk6CiAgICAgICAgICAgICAgICAg
ICAgdHJpZXMgPSBldmVudC5yZXRyaWVzCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJpZXM6
CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJUcnlpbmcgdG8gcnVuOiAlcyIgJSBldmVu
dC5wcm9nKQogICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5zeXN0ZW0oZXZlbnQucHJvZykg
PT0gMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoZXZlbnQuc2xlZXBfZGVsYXkpCiAgICAgICAgICAgICAgICAgICAg
ICAgIHRyaWVzIC09IDEKICAgICAgICAgICAgICAgICAgICBpZiB0cmllczoKICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKGV2ZW50
Lm1zZykKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBpZiBpc2luc3RhbmNl
KGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CiAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZl
bG5vID49IGZvcm1hdC5FUlJPUjoKICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMg
KyAxCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQogICAgICAgICAgICAgICAg
ZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdC5XQVJOSU5HOgogICAgICAgICAgICAgICAgICAg
IHdhcm5pbmdzID0gd2FybmluZ3MgKyAxCgogICAgICAgICAgICAgICAgaWYgZXZlbnQudGFza3Bp
ZCAhPSAwOgogICAgICAgICAgICAgICAgICAgICMgRm9yICJub3JtYWwiIGxvZ2dpbmcgY29uZGl0
aW9ucywgZG9uJ3Qgc2hvdyBub3RlIGxvZ3MgZnJvbSB0YXNrcwogICAgICAgICAgICAgICAgICAg
ICMgYnV0IGRvIHNob3cgdGhlbSBpZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBs
b2cgbGV2ZWwgdG8KICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdmVyYm9zZS9kZWJ1ZyBt
ZXNzYWdlcwogICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPD0gZm9ybWF0Lk5P
VEUgYW5kIChldmVudC5sZXZlbG5vIDwgbGxldmVsIG9yIChldmVudC5sZXZlbG5vID09IGZvcm1h
dC5OT1RFIGFuZCBsbGV2ZWwgIT0gZm9ybWF0LlZFUkJPU0UpKToKICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKCiAgICAgICAgICAgICAgICAgICAgIyBQcmVmaXggdGFzayBtZXNzYWdl
cyB3aXRoIHJlY2lwZS90YXNrCiAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQudGFza3BpZCBp
biBoZWxwZXIucnVubmluZ190YXNrcyBhbmQgZXZlbnQubGV2ZWxubyAhPSBmb3JtYXQuUExBSU46
CiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tpbmZvID0gaGVscGVyLnJ1bm5pbmdfdGFza3Nb
ZXZlbnQudGFza3BpZF0KICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubXNnID0gdGFza2lu
Zm9bJ3RpdGxlJ10gKyAnOiAnICsgZXZlbnQubXNnCiAgICAgICAgICAgICAgICBpZiBoYXNhdHRy
KGV2ZW50LCAnZm4nKToKICAgICAgICAgICAgICAgICAgICBldmVudC5tc2cgPSBldmVudC5mbiAr
ICc6ICcgKyBldmVudC5tc2cKICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCiAg
ICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwg
YmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6CiAgICAgICAgICAgICAgICBsb2dnZXIud2Fybmlu
ZygiTG9nZmlsZSBmb3IgZmFpbGVkIHNldHNjZW5lIHRhc2sgaXMgJXMiICUgZXZlbnQubG9nZmls
ZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZl
bnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgogICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0g
MQogICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKICAgICAgICAgICAgICAg
IGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgogICAgICAgICAgICAgICAg
ICAgIHRlcm1maWx0ZXIuY2xlYXJGb290ZXIoKQogICAgICAgICAgICAgICAgICAgIGJiLmVycm9y
KCJMb2dmaWxlIG9mIGZhaWx1cmUgc3RvcmVkIGluOiAlcyIgJSBsb2dmaWxlKQogICAgICAgICAg
ICAgICAgICAgIGlmIGluY2x1ZGVsb2dzIGFuZCBub3QgZXZlbnQuZXJycHJpbnRlZDoKICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoIkxvZyBkYXRhIGZvbGxvd3M6IikKICAgICAgICAgICAg
ICAgICAgICAgICAgZiA9IG9wZW4obG9nZmlsZSwgInIiKQogICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsID0gZi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBsID09ICcnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbG9nbGluZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgfCAlcycgJSBsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGxlbihsaW5lcykgPiBpbnQobG9nbGluZXMpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lcy5wb3AoMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ3wgJXMnICUgbCkKICAg
ICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGxpbmVzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0Jhc2UpOgogICAgICAgICAgICAgICAgbG9n
Z2VyLmluZm8oZXZlbnQuX21lc3NhZ2UpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgogICAgICAg
ICAgICAgICAgaWYgcGFyYW1zLm9wdGlvbnMucXVpZXQgPiAxOgogICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBldmVudC50b3RhbCA9PSAwOgogICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzID0gbmV3X3By
b2dyZXNzKCJQYXJzaW5nIHJlY2lwZXMiLCBldmVudC50b3RhbCkuc3RhcnQoKQogICAgICAgICAg
ICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQu
UGFyc2VQcm9ncmVzcyk6CgogICAgICAgICAgICAgICAgIyMjIFRSWSBUTyBHRVQgVkFMVUUgRlJP
TSBCQiBTRVJWRVIgIyMjCiAgICAgICAgICAgICAgICBwcmludCgidnZ2IEJFRk9SRSBTRVJWRVIu
UlVOQ09NTUFORCgpIHZ2diIpCiAgICAgICAgICAgICAgICB0bXBfZGlyID0gc2VydmVyLnJ1bkNv
bW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUTVBESVIiXSlbMF0KICAgICAgICAgICAgICAgIHByaW50
KCJeXl4gQUZURVIgU0VSVkVSLlJVTkNPTU1BTkQoKSBeXl4iKQoKICAgICAgICAgICAgICAgIGlm
IHBhcmFtcy5vcHRpb25zLnF1aWV0ID4gMToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQog
ICAgICAgICAgICAgICAgaWYgcGFyc2Vwcm9ncmVzczoKICAgICAgICAgICAgICAgICAgICBwYXJz
ZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQogICAgICAgICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgICAgICAgICBiYi53YXJuKCJHb3QgUGFyc2VQcm9ncmVzcyBldmVudCBmb3IgcGFy
c2luZyB0aGF0IG5ldmVyIHN0YXJ0ZWQ/IikKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKICAg
ICAgICAgICAgICAgIGlmIHBhcmFtcy5vcHRpb25zLnF1aWV0ID4gMToKICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlcHJvZ3Jlc3M6CiAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MuZmlu
aXNoKCkKICAgICAgICAgICAgICAgIHBhc3JlcHJvZ3Jlc3MgPSBOb25lCiAgICAgICAgICAgICAg
ICBpZiBwYXJhbXMub3B0aW9ucy5xdWlldCA9PSAwOgogICAgICAgICAgICAgICAgICAgIHByaW50
KCgiUGFyc2luZyBvZiAlZCAuYmIgZmlsZXMgY29tcGxldGUgKCVkIGNhY2hlZCwgJWQgcGFyc2Vk
KS4gJWQgdGFyZ2V0cywgJWQgc2tpcHBlZCwgJWQgbWFza2VkLCAlZCBlcnJvcnMuIgogICAgICAg
ICAgICAgICAgICAgICAgICAlICggZXZlbnQudG90YWwsIGV2ZW50LmNhY2hlZCwgZXZlbnQucGFy
c2VkLCBldmVudC52aXJ0dWFscywgZXZlbnQuc2tpcHBlZCwgZXZlbnQubWFza2VkLCBldmVudC5l
cnJvcnMpKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKToKICAgICAgICAgICAgICAgIGlm
IHBhcmFtcy5vcHRpb25zLnF1aWV0ID4gMToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQog
ICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcyA9IG5ld19wcm9ncmVzcygiTG9hZGluZyBjYWNo
ZSIsIGV2ZW50LnRvdGFsKS5zdGFydCgpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CiAg
ICAgICAgICAgICAgICBpZiBwYXJhbXMub3B0aW9ucy5xdWlldCA+IDE6CiAgICAgICAgICAgICAg
ICAgICAgY29udGludWUKICAgICAgICAgICAgICAgIGNhY2hlcHJvZ3Jlc3MudXBkYXRlKGV2ZW50
LmN1cnJlbnQpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgogICAgICAgICAgICAgICAg
aWYgcGFyYW1zLm9wdGlvbnMucXVpZXQgPiAxOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
CiAgICAgICAgICAgICAgICBjYWNoZXByb2dyZXNzLmZpbmlzaCgpCiAgICAgICAgICAgICAgICBp
ZiBwYXJhbXMub3B0aW9ucy5xdWlldCA9PSAwOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJM
b2FkZWQgJWQgZW50cmllcyBmcm9tIGRlcGVuZGVuY3kgY2FjaGUuIiAlIGV2ZW50Lm51bV9lbnRy
aWVzKQogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
ZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CiAgICAgICAgICAgICAgICByZXR1cm5f
dmFsdWUgPSBldmVudC5leGl0Y29kZQogICAgICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3I6CiAg
ICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQogICAgICAgICAgICAgICAgICAg
IGxvZ2dlci5lcnJvcihzdHIoZXZlbnQpKQogICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9
IDIKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZl
bnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgogICAgICAgICAgICAgICAgaWYgbm90IHJldHVy
bl92YWx1ZToKICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBldmVudC5leGl0Y29k
ZQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVu
dCwgKGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCwgYmIuY29va2VyLkNvb2tlckV4aXQpKToK
ICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCiAgICAgICAgICAgICAgICBjb250aW51
ZQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5NdWx0aXBsZVByb3Zp
ZGVycyk6CiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhzdHIoZXZlbnQpKQogICAgICAgICAg
ICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQu
Tm9Qcm92aWRlcik6CiAgICAgICAgICAgICAgICAjIEZvciB1bml2ZXJzZSBidWlsZHMsIG9ubHkg
c2hvdyB0aGVzZSBhcyB3YXJuaW5ncywgbm90IGVycm9ycwogICAgICAgICAgICAgICAgaWYgbm90
IHVuaXZlcnNlOgogICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKICAgICAgICAg
ICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCiAgICAgICAgICAgICAgICAgICAgbG9nZ2Vy
LmVycm9yKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
ICAgIGxvZ2dlci53YXJuaW5nKHN0cihldmVudCkpCiAgICAgICAgICAgICAgICBjb250aW51ZQoK
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRh
c2tTdGFydGVkKToKICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSdW5uaW5nIHNldHNjZW5l
IHRhc2sgJWQgb2YgJWQgKCVzKSIgJSAoZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3Rh
dHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMSwgZXZlbnQuc3RhdHMudG90YWwsIGV2
ZW50LnRhc2tzdHJpbmcpKQogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQpOgogICAg
ICAgICAgICAgICAgaWYgZXZlbnQubm9leGVjOgogICAgICAgICAgICAgICAgICAgIHRhc2t0eXBl
ID0gJ25vZXhlYyB0YXNrJwogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAg
ICB0YXNrdHlwZSA9ICd0YXNrJwogICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcg
JXMgJWQgb2YgJWQgKCVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50
LnN0YXRzLmFjdGl2ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Rh
dHMuZmFpbGVkICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRv
dGFsLCBldmVudC50YXNrc3RyaW5nKQogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCk6
CiAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCiAgICAgICAgICAgICAgICB0YXNrZmFp
bHVyZXMuYXBwZW5kKGV2ZW50LnRhc2tzdHJpbmcpCiAgICAgICAgICAgICAgICBsb2dnZXIuZXJy
b3Ioc3RyKGV2ZW50KSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBpZiBp
c2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6CiAgICAg
ICAgICAgICAgICBsb2dnZXIud2FybmluZyhzdHIoZXZlbnQpKQogICAgICAgICAgICAgICAgY29u
dGludWUKCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVH
ZW5lcmF0ZWQpOgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoZXZlbnQsIGJiLmV2ZW50LlByb2Nlc3NTdGFydGVkKToKICAgICAgICAgICAgICAgIGlm
IHBhcmFtcy5vcHRpb25zLnF1aWV0ID4gMToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQog
ICAgICAgICAgICAgICAgcGFyc2Vwcm9ncmVzcyA9IG5ld19wcm9ncmVzcyhldmVudC5wcm9jZXNz
bmFtZSwgZXZlbnQudG90YWwpCiAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLnN0YXJ0KEZh
bHNlKQogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShl
dmVudCwgYmIuZXZlbnQuUHJvY2Vzc1Byb2dyZXNzKToKICAgICAgICAgICAgICAgIGlmIHBhcmFt
cy5vcHRpb25zLnF1aWV0ID4gMToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAg
ICAgICAgICAgaWYgcGFyc2Vwcm9ncmVzczoKICAgICAgICAgICAgICAgICAgICBwYXJzZXByb2dy
ZXNzLnVwZGF0ZShldmVudC5wcm9ncmVzcykKICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICAgICAgYmIud2FybigiR290IFByb2Nlc3NQcm9ncmVzcyBldmVudCBmb3Igc29tZXRp
bmcgdGhhdCBuZXZlciBzdGFydGVkPyIpCiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Qcm9jZXNzRmluaXNoZWQpOgogICAg
ICAgICAgICAgICAgaWYgcGFyYW1zLm9wdGlvbnMucXVpZXQgPiAxOgogICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICBpZiBwYXJzZXByb2dyZXNzOgogICAgICAgICAg
ICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MuZmluaXNoKCkKICAgICAgICAgICAgICAgIHBhcnNlcHJv
Z3Jlc3MgPSBOb25lCiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgIyBpZ25v
cmUKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LkJ1aWxkQmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5TdGFtcFVwZGF0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk11bHRpQ29uZmlnUGFy
c2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUGFy
c2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJl
RmluYWxpc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5y
dW5RdWV1ZUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQu
T3BlcmF0aW9uU3RhcnRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2
ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmIuZXZlbnQuRGlza0Z1bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiYi5ldmVudC5IZWFydGJlYXRFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJiLmJ1aWxkLlRhc2tQcm9ncmVzcykpOgogICAgICAgICAgICAgICAgY29udGludWUKCiAg
ICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5rbm93biBldmVudDogJXMiLCBldmVudCkKCiAgICAg
ICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKICAgICAgICAgICAgdGVybWZp
bHRlci5jbGVhckZvb3RlcigpCiAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCiAg
ICAgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgogICAgICAgICAgICAgICAgY29udGlu
dWUKICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzdHIoaW9lcnJvcikpCiAgICAgICAgICAg
IGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5OgogICAgICAgICAgICAgICAgXywgZXJyb3IgPSBz
ZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQogICAgICAgICAgICBtYWlu
LnNodXRkb3duID0gMgogICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAg
ICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCiAgICAgICAgICAgIGlmIHBhcmFtcy5vYnNlcnZl
X29ubHk6CiAgICAgICAgICAgICAgICBwcmludCgiXG5LZXlib2FyZCBJbnRlcnJ1cHQsIGV4aXRp
bmcgb2JzZXJ2ZXIuLi4iKQogICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKICAgICAg
ICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMToK
ICAgICAgICAgICAgICAgIHByaW50KCJcblNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3Bw
aW5nLi4uXG4iKQogICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChb
InN0YXRlRm9yY2VTaHV0ZG93biJdKQogICAgICAgICAgICAgICAgaWYgZXJyb3I6CiAgICAgICAg
ICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcyIgJSBl
cnJvcikKICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1
dGRvd24gPT0gMDoKICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwg
Y2xvc2luZyBkb3duLi4uXG4iKQogICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCiAg
ICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93
biJdKQogICAgICAgICAgICAgICAgaWYgZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgbG9nZ2Vy
LmVycm9yKCJVbmFibGUgdG8gY2xlYW5seSBzaHV0ZG93bjogJXMiICUgZXJyb3IpCiAgICAgICAg
ICAgIG1haW4uc2h1dGRvd24gPSBtYWluLnNodXRkb3duICsgMQogICAgICAgICAgICBwYXNzCiAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNr
CiAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKICAg
ICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CiAgICAgICAgICAgICAgICBfLCBl
cnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCiAgICAgICAg
ICAgIG1haW4uc2h1dGRvd24gPSAyCiAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKICAgIHRy
eToKICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKICAgICAgICBzdW1tYXJ5ID0gIiIK
ICAgICAgICBpZiB0YXNrZmFpbHVyZXM6CiAgICAgICAgICAgIHN1bW1hcnkgKz0gcGx1cmFsaXNl
KCJcblN1bW1hcnk6ICVzIHRhc2sgZmFpbGVkOiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJcblN1bW1hcnk6ICVzIHRhc2tzIGZhaWxlZDoiLCBsZW4odGFza2ZhaWx1cmVzKSkK
ICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gdGFza2ZhaWx1cmVzOgogICAgICAgICAgICAgICAg
c3VtbWFyeSArPSAiXG4gICVzIiAlIGZhaWx1cmUKICAgICAgICBpZiB3YXJuaW5nczoKICAgICAg
ICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogVGhlcmUgd2FzICVzIFdBUk5J
TkcgbWVzc2FnZSBzaG93bi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5T
dW1tYXJ5OiBUaGVyZSB3ZXJlICVzIFdBUk5JTkcgbWVzc2FnZXMgc2hvd24uIiwgd2FybmluZ3Mp
CiAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGFuZCBlcnJvcnM6CiAgICAgICAgICAgIHN1bW1hcnkg
Kz0gcGx1cmFsaXNlKCJcblN1bW1hcnk6IFRoZXJlIHdhcyAlcyBFUlJPUiBtZXNzYWdlIHNob3du
LCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlxuU3VtbWFyeTogVGhlcmUgd2VyZSAlcyBFUlJPUiBtZXNzYWdlcyBzaG93
biwgcmV0dXJuaW5nIGEgbm9uLXplcm8gZXhpdCBjb2RlLiIsIGVycm9ycykKICAgICAgICBpZiBz
dW1tYXJ5IGFuZCBwYXJhbXMub3B0aW9ucy5xdWlldCA9PSAwOgogICAgICAgICAgICBwcmludChz
dW1tYXJ5KQoKICAgICAgICBpZiBpbnRlcnJ1cHRlZDoKICAgICAgICAgICAgcHJpbnQoIkV4ZWN1
dGlvbiB3YXMgaW50ZXJydXB0ZWQsIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iKQog
ICAgICAgICAgICBpZiByZXR1cm5fdmFsdWUgPT0gMDoKICAgICAgICAgICAgICAgIHJldHVybl92
YWx1ZSA9IDEKICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgaW1wb3J0IGVycm5vCiAg
ICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKICAgICAgICAgICAgcGFzcwoKICAgIGlm
IGNvbnNvbGVsb2c6CiAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoY29uc29sZWxvZykKICAg
ICAgICBjb25zb2xlbG9nLmNsb3NlKCkKCiAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>