<?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>160709</bug_id>
          
          <creation_ts>2016-08-09 14:25:05 -0700</creation_ts>
          <short_desc>Move functionality common to Darwin ports into a base class</short_desc>
          <delta_ts>2016-10-07 15:19:36 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1218844</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-09 14:25:05 -0700</bug_when>
    <thetext>This bug extends https://bugs.webkit.org/show_bug.cgi?id=160672, so that both the Mac ports and IOS ports inherit from a shared Darwin port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218850</commentid>
    <comment_count>1</comment_count>
      <attachid>285675</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-09 14:35:38 -0700</bug_when>
    <thetext>Created attachment 285675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218987</commentid>
    <comment_count>2</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-10 00:29:17 -0700</bug_when>
    <thetext>After this patch only the win port inherits from ApplePort, doesn&apos;t it? If yes,you could move the remaining ApplePort to win.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219018</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-10 08:15:30 -0700</bug_when>
    <thetext>Darwin still shares functionality with ApplePort, so Darwin inherits from ApplePort.

I&apos;m not exactly sure the original reason for separating the Windows port from the GTK and EFL, perhaps the Port class could take on some of the implementation from ApplePort?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221146</commentid>
    <comment_count>4</comment_count>
      <attachid>285675</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-08-18 12:09:16 -0700</bug_when>
    <thetext>Comment on attachment 285675
Patch

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

&gt; Tools/Scripts/webkitpy/port/darwin.py:59
&gt; +    def supports_per_test_timeout(self):
&gt; +        return True

Following the move of this method from class ApplePort to DarwinPort, the supports_per_test_timeout() returns False for the Windows port by &lt;https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/port/base.py?rev=204603#L155&gt;. It looks like all ports support per test timeouts. So, we should change the base class implementation to remove True and remove all the port-specific overrides.

&gt; Tools/Scripts/webkitpy/port/darwin.py:199
&gt; +    def xcrun_find(self, command, fallback):
&gt; +        _log.warn(&quot;xcrun undefined; falling back to &apos;%s&apos;.&quot; % fallback)
&gt; +        return fallback

This does not seem correct. We can and should make use of xcrun to find command line tools for both the Mac and iOS ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221218</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-18 15:31:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 285675 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=285675&amp;action=review
....
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/port/darwin.py:199
&gt; &gt; +    def xcrun_find(self, command, fallback):
&gt; &gt; +        _log.warn(&quot;xcrun undefined; falling back to &apos;%s&apos;.&quot; % fallback)
&gt; &gt; +        return fallback
&gt; 
&gt; This does not seem correct. We can and should make use of xcrun to find
&gt; command line tools for both the Mac and iOS ports.

We do use xcrun for both Mac and iOS, but iOS assumes it&apos;s being run through a simulator, so it has a few extra arguments.  ios.py line 400 has the iOS simulator xcrun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221222</commentid>
    <comment_count>6</comment_count>
      <attachid>286405</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-18 15:44:59 -0700</bug_when>
    <thetext>Created attachment 286405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221224</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-18 15:47:05 -0700</bug_when>
    <thetext>Attachment 286405 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/port/mac.py:37:  No name &apos;darwin&apos; in module &apos;webkitpy.port&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/port/mac.py:192:  [MacPort.xcrun_find] Instance of &apos;MacPort&apos; has no &apos;_executive&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/port/ios.py:36:  No name &apos;darwin&apos; in module &apos;webkitpy.port&apos;  [pylint/E0611] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221227</commentid>
    <comment_count>8</comment_count>
      <attachid>286407</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-18 15:51:24 -0700</bug_when>
    <thetext>Created attachment 286407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221283</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-08-18 18:09:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 285675 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=285675&amp;action=review
&gt; ....
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/port/darwin.py:199
&gt; &gt; &gt; +    def xcrun_find(self, command, fallback):
&gt; &gt; &gt; +        _log.warn(&quot;xcrun undefined; falling back to &apos;%s&apos;.&quot; % fallback)
&gt; &gt; &gt; +        return fallback
&gt; &gt; 
&gt; &gt; This does not seem correct. We can and should make use of xcrun to find
&gt; &gt; command line tools for both the Mac and iOS ports.
&gt; 
&gt; We do use xcrun for both Mac and iOS, but iOS assumes it&apos;s being run through
&gt; a simulator, so it has a few extra arguments.  ios.py line 400 has the iOS
&gt; simulator xcrun.

Can we share more of the common code from MacPort.xcrun_find() and IOSPort.xcrun_find()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221285</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-08-18 18:10:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Can we share more of the common code from MacPort.xcrun_find() and
&gt; IOSPort.xcrun_find()?

*IOSSimulatorPort</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222233</commentid>
    <comment_count>11</comment_count>
      <attachid>285675</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-23 08:54:14 -0700</bug_when>
    <thetext>Comment on attachment 285675
Patch

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/port/darwin.py:199
&gt;&gt;&gt;&gt; +        return fallback
&gt;&gt;&gt; 
&gt;&gt;&gt; This does not seem correct. We can and should make use of xcrun to find command line tools for both the Mac and iOS ports.
&gt;&gt; 
&gt;&gt; We do use xcrun for both Mac and iOS, but iOS assumes it&apos;s being run through a simulator, so it has a few extra arguments.  ios.py line 400 has the iOS simulator xcrun.
&gt; 
&gt; Can we share more of the common code from MacPort.xcrun_find() and IOSPort.xcrun_find()?

So, just for reference (since the IOS xcrun isn&apos;t on this revision, here is that function definition:

# iOS xcrun_find(...) definition
def xcrun_find(self, command, fallback=None):
        fallback = fallback or command
        try:
            return self._executive.run_command([&apos;xcrun&apos;, &apos;--sdk&apos;, &apos;iphonesimulator&apos;, &apos;-find&apos;, command]).rstrip()
        except ScriptError:
            _log.warn(&quot;xcrun failed; falling back to &apos;%s&apos;.&quot; % fallback)
            return fallback

I think that xcrun_find should remain separate in the two ports, particularly since we may be creating a port for an iOS device, which would use an xcrun_find similar to iOS, but targeting the device instead of the simulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222450</commentid>
    <comment_count>12</comment_count>
      <attachid>286786</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-08-23 15:07:48 -0700</bug_when>
    <thetext>Created attachment 286786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231134</commentid>
    <comment_count>13</comment_count>
      <attachid>289235</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-09-19 10:08:11 -0700</bug_when>
    <thetext>Created attachment 289235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237783</commentid>
    <comment_count>14</comment_count>
      <attachid>289235</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-07 14:09:15 -0700</bug_when>
    <thetext>Comment on attachment 289235
Patch

Clearing flags on attachment: 289235

Committed r206934: &lt;http://trac.webkit.org/changeset/206934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237784</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-07 14:09:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237817</commentid>
    <comment_count>16</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-10-07 15:19:36 -0700</bug_when>
    <thetext>Committed r206940: &lt;http://trac.webkit.org/changeset/206940&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285675</attachid>
            <date>2016-08-09 14:35:38 -0700</date>
            <delta_ts>2016-08-18 15:44:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160709-20160809143403.patch</filename>
            <type>text/plain</type>
            <size>27391</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNDI5NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUyIEBACisyMDE2LTA4LTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZWZhY3RvciBvZiBXZWJraXRweSBQb3J0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xhcmlmeSBpbmhlcml0YW5jZSBzdHJ1
Y3R1cmUgb2Ygd2Via2l0cHkgcG9ydHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1l
KTogU3BlY2lmaWMgaU9TIHBvcnQgY2hlY2suCisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18p
OiBNb3ZlIGxlYWsgZGV0ZWN0b3IgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5f
bWFrZV9sZWFrX2RldGVjdG9yKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxl
UG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAg
ICAgICAgKEFwcGxlUG9ydC5jaGVja19mb3JfbGVha3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0Lgor
ICAgICAgICAoQXBwbGVQb3J0LnByaW50X2xlYWtzX3N1bW1hcnkpOiBNb3ZlZCB0byBEYXJ3aW5Q
b3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeSk6IE1vdmVk
IHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmls
ZSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQuX21lcmdlX2NyYXNo
X2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9sb29rX2Zv
cl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAg
ICAgKEFwcGxlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAg
ICAgIChBcHBsZVBvcnQubG9va19mb3JfbmV3X2NyYXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Q
b3J0LgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBsZV9wcm9jZXNzKTogTW92ZWQgdG8gRGFyd2lu
UG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zYW1wbGVfZmlsZV9wYXRoKTogTW92ZWQgdG8gRGFy
d2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5sb29rX2Zvcl9uZXdfc2FtcGxlcyk6IE1vdmVk
IHRvIERhcndpblBvcnQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5w
eTogQWRkZWQuCisgICAgICAgIChEYXJ3aW5Qb3J0KTogU2hhcmVkIGlPUyBhbmQgTWFjIGZ1bmN0
aW9ucworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJ
T1NQb3J0KToKKyAgICAgICAgKElPU1BvcnQub3BlcmF0aW5nX3N5c3RlbSk6CisgICAgICAgIChJ
T1NTaW11bGF0b3JQb3J0KToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX19pbml0X18pOiBJ
bmhlcml0cyBmcm9tIERhcndpblBvcnQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9wb3J0
X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weToKKyAgICAgICAgKE1hY1BvcnQpOgor
ICAgICAgICAoTWFjUG9ydC5fX2luaXRfXyk6IEluaGVyaXRzIGZyb20gRGFyd2luUG9ydC4KKyAg
ICAgICAgKE1hY1BvcnQuX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKTogTW92ZWQg
dG8gRGFyd2luUG9ydC4KKyAgICAgICAgKE1hY1BvcnQubWFrZV9jb21tYW5kKTogTW92ZWQgdG8g
RGFyd2luUG9ydC4KKyAgICAgICAgKE1hY1BvcnQuX2dldF9jcmFzaF9sb2cpOiBNb3ZlZCB0byBE
YXJ3aW5Qb3J0LgorICAgICAgICAoTWFjUG9ydC5ubV9jb21tYW5kKTogTW92ZWQgdG8gRGFyd2lu
UG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAo
V2luUG9ydCk6CisgICAgICAgIChXaW5Qb3J0Lmxvb2tfZm9yX25ld19zYW1wbGVzKTogVXNlZCBk
ZWZhdWx0LCBBcHBsZVBvcnQgbm8gbG9uZ2VyIGltcGxlbWVudHMuCisgICAgICAgIChXaW5Qb3J0
LnNhbXBsZV9wcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChXaW5Qb3J0Ll9tYWtlX2xlYWtfZGV0
ZWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdpblBvcnQuY2hlY2tfZm9yX2xlYWtzKTogRGl0dG8u
CisgICAgICAgIChXaW5Qb3J0LnByaW50X2xlYWtzX3N1bW1hcnkpOiBEaXR0by4KKyAgICAgICAg
KFdpblBvcnQuX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KTogRGl0dG8uCisKIDIwMTYtMDgtMDkg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBkaXJl
Y3RvcnkgcmVhZGluZyBjb2RlIGluIGlPU1NpbXVsYXRvckRldmljZXMoKSBtb3JlIHN0cmljdApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjA0MjkwKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0K
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9y
CiBmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRp
b24KLWZyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0ZWN0b3IgaW1wb3J0IExlYWtEZXRlY3Rvcgog
CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTYxLDYgKzYwLDExIEBA
IGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1l
KGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToKICAgICAgICAgb3B0aW9ucyA9IG9wdGlv
bnMgb3Ige30KICAgICAgICAgaWYgcG9ydF9uYW1lIGluIChjbHMucG9ydF9uYW1lLCBjbHMucG9y
dF9uYW1lICsgJy13azInKToKKworICAgICAgICAgICAgIyBTaW5jZSBJT1Mgc2ltdWxhdG9yIHJ1
biBvbiBtYWMsIHRoZXkgbmVlZCBhIHNwZWNpYWwgY2hlY2sKKyAgICAgICAgICAgIGlmIGhvc3Qu
cGxhdGZvcm0ub3NfbmFtZSA9PSAnbWFjJyBhbmQgJ2lvcy1zaW11bGF0b3InIGluIHBvcnRfbmFt
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9ydF9uYW1lCisKICAgICAgICAgICAgICMgSWYg
dGhlIHBvcnRfbmFtZSBtYXRjaGVzIHRoZSAoYmFkbHkgbmFtZWQpIGNscy5wb3J0X25hbWUsIHRo
YXQKICAgICAgICAgICAgICMgbWVhbnMgdGhhdCB0aGV5IHBhc3NlZCAnbWFjJyBvciAnd2luJyBh
bmQgZGlkbid0IHNwZWNpZnkgYSB2ZXJzaW9uLgogICAgICAgICAgICAgIyBUaGF0IGNvbnZlbnRp
b24gbWVhbnMgdGhhdCB3ZSdyZSBzdXBwb3NlZCB0byB1c2UgdGhlIHZlcnNpb24gY3VycmVudGx5
CkBAIC04OSwyMyArOTMsMTEgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICBwb3J0
X25hbWUgPSBwb3J0X25hbWUucmVwbGFjZSgnLXdrMicsICcnKQogICAgICAgICBzZWxmLl92ZXJz
aW9uID0gc2VsZi5fc3RyaXBfcG9ydF9uYW1lX3ByZWZpeChwb3J0X25hbWUpCiAKLSAgICAgICAg
c2VsZi5fbGVha19kZXRlY3RvciA9IHNlbGYuX21ha2VfbGVha19kZXRlY3RvcigpCi0gICAgICAg
IGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKToKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRy
ZWUgc2xvd3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVuIG1vcmUgdGhhbiBhYm91dCAxMDAwIHRl
c3RzIGluIGEgYmF0Y2gKLSAgICAgICAgICAgICMgd2l0aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5h
YmxlZC4KLSAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCJiYXRjaF9zaXplIiwg
MTAwMCkKLQotICAgIGRlZiBfbWFrZV9sZWFrX2RldGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1
cm4gTGVha0RldGVjdG9yKHNlbGYpCi0KICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYp
OgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycpOgogICAgICAgICAg
ICAgcmV0dXJuIDM1MCAqIDEwMDAKICAgICAgICAgcmV0dXJuIHN1cGVyKEFwcGxlUG9ydCwgc2Vs
ZikuZGVmYXVsdF90aW1lb3V0X21zKCkKIAotICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1l
b3V0KHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIHNob3VsZF9yZXRyeV9j
cmFzaGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0xMjksMTExICsxMjEsNiBA
QCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRp
b25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYuX3N0cmlwX3BvcnRfbmFt
ZV9wcmVmaXgocG9ydF9uYW1lKSwgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlw
ZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKLSAgICBkZWYg
Y2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgotICAgICAg
ICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9wc3V0aWwvIHRv
IGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KLSAgICAgICAgc2VsZi5fbGVha19k
ZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCkKLQotICAg
IGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRf
b3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UncmUgaW4g
dGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBh
IHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhh
Y2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdheSB0byBnZXQgdGhpcyBpbmZvcm1hdGlv
biBmcm9tIHRoZSB3b3JrZXJzIHlldC4KLSAgICAgICAgIyBGSVhNRTogVGhpcyB3aWxsIGluY2x1
ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVudCBydW5zIHVudGlsIHRoZSByZXN1bHRzIGRp
cmVjdG9yeSBpcyBjbGVhcmVkIQotICAgICAgICBsZWFrc19maWxlcyA9IHNlbGYuX2xlYWtfZGV0
ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkK
LSAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5j
b3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICB0
b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfbGVha3MobGVha3Nf
ZmlsZXMpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdG90YWwgbGVha3MgZm91bmQgZm9yIGEgdG90
YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywgdG90YWxfYnl0ZXNfc3RyaW5nKSkKLSAgICAgICAg
X2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91bmQuIiAlIHVuaXF1ZV9sZWFrcykKLQotICAg
IGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
Ll9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1dlYkNvcmUnKQotCi0g
ICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0c19maWxlbmFtZSk6Ci0g
ICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYuX3J1bl9zY3JpcHQoKSBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNjcmlwdAotICAgICAgICAjIHRvIGV4aXQgYW5kIHdlIHdh
bnQgdGhlIG91dHB1dCB0byBzaG93IHVwIG9uIHN0ZG91dCBpbiBjYXNlIHRoZXJlIGFyZSBlcnJv
cnMKLSAgICAgICAgIyBsYXVuY2hpbmcgdGhlIGJyb3dzZXIuCi0gICAgICAgIHNlbGYuX2V4ZWN1
dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgncnVuLXNhZmFyaScpXSArIHNlbGYuX2Fy
Z3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09w
ZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKLSAgICAgICAgICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNl
KCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRlcnI9ZmlsZShvcy5kZXZudWxsKSkKLQot
ICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxmLCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9w
cm9jZXNzZXMpOgotICAgICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJp
dGVtcygpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9
IHRlc3Quc3BsaXQoIi0iKVswXQotICAgICAgICAgICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0
KCItIilbMV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25h
bWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgot
ICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIG5ldyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhl
IGxvZ3MKLSAgICAgICAgICAgICAgICBsb2dzW3Rlc3RdID0gY3Jhc2hfbG9nCi0gICAgICAgIHJl
dHVybiBsb2dzCi0KLSAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIo
c2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhv
c3QpCi0gICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9y
cz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0KLSAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xl
ZXBfZm4sIHdhaXRfZm9yX2xvZyk6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgbG9v
a19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUp
OgotICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIGJl
IHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMKLSAgICAgICAgICAgdW5kZXIgc3RyZXNzIGRv
IGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCi0KLSAgICAgICAgICAg
Y3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJvY2Vzc19uYW1lIHR1cGxlIG9mIGNyYXNoZWQg
cHJvY2VzcwotICAgICAgICAgICBzdGFydF90aW1lOiB0aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0
LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gKLSAgICAgICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhh
dCB0aW1lLgotICAgICAgICAiIiIKLSAgICAgICAgY3Jhc2hfbG9ncyA9IHt9Ci0gICAgICAgIGZv
ciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6Ci0g
ICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBw
YXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNvCi0gICAgICAgICAgICAjIGlmIHRoZSBvdXRw
dXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCi0g
ICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwg
cGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCi0gICAg
ICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAg
ICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKLSAgICAgICAgYWxsX2Ny
YXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc3RhcnRf
dGltZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdlX2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywg
YWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9jZXNzZXMpCi0KLSAgICBkZWYgc2FtcGxlX3Byb2Nl
c3Moc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgaGFuZ19yZXBvcnQgPSBzZWxmLnNhbXBsZV9m
aWxlX3BhdGgobmFtZSwgcGlkKQotICAgICAgICBleGl0X3N0YXR1cyA9IHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAiL3Vzci9iaW4vc3VkbyIsCi0gICAgICAgICAg
ICAiLW4iLAotICAgICAgICAgICAgIi91c3Ivc2Jpbi9zcGluZHVtcCIsCi0gICAgICAgICAgICBw
aWQsCi0gICAgICAgICAgICAxMCwKLSAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgIi1maWxl
IiwKLSAgICAgICAgICAgIGhhbmdfcmVwb3J0LAotICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2Rl
PVRydWUpCi0gICAgICAgIGlmIGV4aXRfc3RhdHVzOgotICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAgICAg
ICAgICIvdXNyL2Jpbi9zYW1wbGUiLAotICAgICAgICAgICAgICAgICAgICBwaWQsCi0gICAgICAg
ICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgICAgICAgICAxMCwKLSAgICAgICAgICAgICAg
ICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgaGFuZ19yZXBvcnQsCi0gICAgICAg
ICAgICAgICAgXSkKLSAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgotICAgICAg
ICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHNhbXBsZSBwcm9jZXNzOicgKyBzdHIo
ZSkpCi0KLSAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwg
InswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBpZCkpCi0KLSAgICBkZWYgbG9va19m
b3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6
Ci0gICAgICAgIHNhbXBsZV9maWxlcyA9IHt9Ci0gICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9j
ZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZlX3Byb2Nlc3NlczoKLSAgICAgICAgICAgIHNh
bXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKHByb2Nlc3NfbmFtZSwgcGlkKQotICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uaXNmaWxlKHNhbXBsZV9maWxlKToKLSAg
ICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFt
ZV0gPSBzYW1wbGVfZmlsZQotICAgICAgICByZXR1cm4gc2FtcGxlX2ZpbGVzCi0KICAgICBkZWYg
X3BhdGhfdG9faGVscGVyKHNlbGYpOgogICAgICAgICBiaW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0
SGVscGVyJwogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChiaW5hcnlfbmFtZSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTk5IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9y
dCB0aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENy
YXNoTG9ncworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2Ny
aXB0RXJyb3IKK2Zyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Citmcm9t
IHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0b3IKKworCitfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgRGFyd2luUG9ydChBcHBs
ZVBvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpOgorICAgICAgICBBcHBsZVBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAq
Kmt3YXJncykKKworICAgICAgICBzZWxmLl9sZWFrX2RldGVjdG9yID0gTGVha0RldGVjdG9yKHNl
bGYpCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKToKKyAgICAgICAgICAgICMg
RHVtcFJlbmRlclRyZWUgc2xvd3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVuIG1vcmUgdGhhbiBh
Ym91dCAxMDAwIHRlc3RzIGluIGEgYmF0Y2gKKyAgICAgICAgICAgICMgd2l0aCBNYWxsb2NTdGFj
a0xvZ2dpbmcgZW5hYmxlZC4KKyAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCJi
YXRjaF9zaXplIiwgMTAwMCkKKworICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6CisgICAgICAgICAgICBy
ZXR1cm4gMzUwICogMTAwMAorICAgICAgICByZXR1cm4gc3VwZXIoRGFyd2luUG9ydCwgc2VsZiku
ZGVmYXVsdF90aW1lb3V0X21zKCkKKworICAgIGRlZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0
KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4
cGVjdGF0aW9uc19maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3Nl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RF
eHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKKwor
ICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6
CisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Bz
dXRpbC8gdG8gZ2V0IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgorICAgICAgICBzZWxm
Ll9sZWFrX2RldGVjdG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlk
KQorCisgICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIG5vdCBz
ZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBX
ZSdyZSBpbiB0aGUgbWFuYWdlciBwcm9jZXNzLCBzbyB0aGUgbGVhayBkZXRlY3RvciB3aWxsIG5v
dCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBsZWFrIGZpbGVzLgorICAgICAgICAjIEZJWE1FOiBUaGlz
IGlzIGEgaGFjaywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGlzIGlu
Zm9ybWF0aW9uIGZyb20gdGhlIHdvcmtlcnMgeWV0LgorICAgICAgICAjIEZJWE1FOiBUaGlzIHdp
bGwgaW5jbHVkZSB0b28gbWFueSBsZWFrcyBpbiBzdWJzZXF1ZW50IHJ1bnMgdW50aWwgdGhlIHJl
c3VsdHMgZGlyZWN0b3J5IGlzIGNsZWFyZWQhCisgICAgICAgIGxlYWtzX2ZpbGVzID0gc2VsZi5f
bGVha19kZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRzX2RpcmVj
dG9yeSgpKQorICAgICAgICBpZiBub3QgbGVha3NfZmlsZXM6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBzZWxmLl9sZWFrX2Rl
dGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVha3NfZmlsZXMpCisg
ICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9sZWFr
cyhsZWFrc19maWxlcykKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBmb3VuZCBm
b3IgYSB0b3RhbCBvZiAlcy4iICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRlc19zdHJpbmcpKQor
ICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVlX2xlYWtz
KQorCisgICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29y
ZScpCisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0
ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9s
b2c9VHJ1ZSk6CisgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3
YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCisgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFr
ZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJl
IGFyZQorICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCisg
ICAgICAgICMgRklYTUU6IFNob3VsZCBtb3N0IG9mIHRoaXMgYmUgbW92ZWQgaW50byBDcmFzaExv
Z3MoKT8KKyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAgICAgIHNs
ZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorICAgICAgICBjcmFzaF9sb2cgPSAnJwor
ICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgbm93ID0g
dGltZV9mbigpCisgICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUg
dGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9y
IGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgZGVhZGxp
bmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkp
CisgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKKyAgICAg
ICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwg
aW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAgICAgICAg
aWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
aWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0
bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKKyAgICAgICAgICAgICAg
ICBzbGVlcF9mbigwLjEpCisgICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCisKKyAgICAg
ICAgaWYgbm90IGNyYXNoX2xvZzoKKyAgICAgICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25lKQor
ICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jhc2hfbG9nKQorCisgICAgZGVmIF9tZXJnZV9jcmFz
aF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAg
IGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxpdCgiLSIpWzBd
CisgICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50cnlbMl0gPT0g
cGlkIGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICAgICAgIyBp
ZiB0aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncworICAgICAgICAgICAg
ICAgIGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgIGRl
ZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToK
KyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgcmV0dXJu
IGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49
bmV3ZXJfdGhhbikKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFz
aGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3Mg
Y2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcwor
ICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRo
ZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9j
ZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9jZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6
IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAg
ICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRpbWUuCisgICAgICAgICIiIgorICAgICAgICBj
cmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlk
KSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAgICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBv
dXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28K
KyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dl
dF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdh
aXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9
IGNyYXNoX2xvZworICAgICAgICBhbGxfY3Jhc2hfbG9nID0gc2VsZi5fbG9va19mb3JfYWxsX2Ny
YXNoX2xvZ3NfaW5fbG9nX2RpcihzdGFydF90aW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbWVy
Z2VfY3Jhc2hfbG9ncyhjcmFzaF9sb2dzLCBhbGxfY3Jhc2hfbG9nLCBjcmFzaGVkX3Byb2Nlc3Nl
cykKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJv
Y2Vzc2VzLCBzdGFydF90aW1lKToKKyAgICAgICAgc2FtcGxlX2ZpbGVzID0ge30KKyAgICAgICAg
Zm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJlc3BvbnNpdmVfcHJvY2Vz
c2VzOgorICAgICAgICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgocHJv
Y2Vzc19uYW1lLCBwaWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2Zp
bGUoc2FtcGxlX2ZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBz
YW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCisgICAgICAgIHJldHVybiBzYW1w
bGVfZmlsZXMKKworICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQpOgorICAg
ICAgICBoYW5nX3JlcG9ydCA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChuYW1lLCBwaWQpCisgICAg
ICAgIGV4aXRfc3RhdHVzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAg
ICAgICIvdXNyL2Jpbi9zdWRvIiwKKyAgICAgICAgICAgICItbiIsCisgICAgICAgICAgICAiL3Vz
ci9zYmluL3NwaW5kdW1wIiwKKyAgICAgICAgICAgIHBpZCwKKyAgICAgICAgICAgIDEwLAorICAg
ICAgICAgICAgMTAsCisgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAgICAgaGFuZ19yZXBv
cnQsCisgICAgICAgIF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgaWYgZXhpdF9z
dGF0dXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICAgICAgICAgIi91c3IvYmluL3NhbXBsZSIsCisg
ICAgICAgICAgICAgICAgICAgIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgMTAsCisgICAgICAg
ICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAg
ICAgICAgICAgICBoYW5nX3JlcG9ydCwKKyAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAg
ZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdV
bmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0cihlKSkKKworICAgIGRlZiBzaG93X3Jlc3Vs
dHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICAjIFdlIGRvbid0
IHVzZSBzZWxmLl9ydW5fc2NyaXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9y
IHRoZSBzY3JpcHQKKyAgICAgICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8g
c2hvdyB1cCBvbiBzdGRvdXQgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCisgICAgICAgICMgbGF1
bmNoaW5nIHRoZSBicm93c2VyLgorICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYu
cGF0aF90b19zY3JpcHQoJ3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZp
Z3VyYXRpb24oKSArIFsnLS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxl
bmFtZV0sCisgICAgICAgICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShv
cy5kZXZudWxsKSwgc3RkZXJyPWZpbGUob3MuZGV2bnVsbCkpCisKKyAgICBkZWYgc2FtcGxlX2Zp
bGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9y
bWF0KG5hbWUsIHBpZCkpCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQorCisgICAgZGVm
IG5tX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJywg
J25tJykKKworICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxiYWNrKToKKyAg
ICAgICAgX2xvZy53YXJuKCJ4Y3J1biB1bmRlZmluZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIg
JSBmYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIwNDI5MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIwICsyOSwxOCBAQCBpbXBvcnQg
c3VicHJvY2VzcwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQg
aW1wb3J0IG1lbW9pemVkCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGlt
cG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9j
b25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgogZnJvbSB3ZWJraXRweS5wb3J0
IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
ZHJpdmVyLCBpbWFnZV9kaWZmCi1mcm9tIHdlYmtpdHB5LnBvcnQuYXBwbGUgaW1wb3J0IEFwcGxl
UG9ydAotZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHku
cG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxh
dG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKIAogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgSU9TUG9ydChBcHBsZVBvcnQpOgor
Y2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAiaW9zIgogCiAgICAg
QVJDSElURUNUVVJFUyA9IFsnYXJtdjcnLCAnYXJtdjdzJywgJ2FybTY0J10KQEAgLTY3LDcgKzY1
LDcgQEAgY2xhc3MgSU9TUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gJ2lvcycKIAog
Ci1jbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6CitjbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KERhcndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgogCiAgICAg
RlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwpAQCAtODEsNyArNzksNyBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KEFwcGxlUG9ydCk6CiAgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lN
VUxBVE9SX0lOU1RBTkNFID0gMTAwCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9y
dF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYp
Ll9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIERhcndpblBvcnQu
X19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAgIGRlZiBkcml2
ZXJfbmFtZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScp
OgpAQCAtMjAyLDkgKzIwMCw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0KToK
IAogICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFj
a19uYW1lcykKIAotICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4o
c2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25zJykgZm9yIHAg
aW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCi0KICAgICBkZWYgc2V0dXBfdGVzdF9y
dW4oc2VsZik6CiAgICAgICAgIG1hY19vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9z
X3ZlcnNpb24KICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkp
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CShyZXZpc2lvbiAyMDQyOTApCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMiArMzQsMTIgQEAgaW1wb3J0IHJlCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5j
cmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKLWZyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBv
cnQgQXBwbGVQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0
CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBNYWNQb3J0
KEFwcGxlUG9ydCk6CitjbGFzcyBNYWNQb3J0KERhcndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9
ICJtYWMiCiAKICAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWydtYWMtc25vd2xlb3BhcmQn
LCAnbWFjLWxpb24nLCAnbWFjLW1vdW50YWlubGlvbicsICdtYWMtbWF2ZXJpY2tzJywgJ21hYy15
b3NlbWl0ZScsICdtYWMtZWxjYXBpdGFuJywgJ21hYy1zaWVycmEnXQpAQCAtNDksNyArNDksNyBA
QCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAn
eDg2XzY0JwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpOgotICAgICAgICBzdXBlcihNYWNQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25h
bWUsICoqa3dhcmdzKQorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBv
cnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToK
ICAgICAgICAgcmV0dXJuIFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0g
J3g4NicgZWxzZSBbXQpAQCAtNjYsOSArNjYsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6
CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCksICd3
azInXSArIGZhbGxiYWNrX25hbWVzCiAgICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQogCi0gICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4
cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3Nl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RF
eHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKLQog
ICAgIGRlZiBjb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3Moc2VsZik6CiAgICAgICAgIHJl
dHVybiB7CiAgICAgICAgICAgICAic2llcnJhKyI6IFsic2llcnJhIiwgImZ1dHVyZSJdLApAQCAt
MTUyLDkgKzE0OSw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgIHN1
cHBvcnRhYmxlX2luc3RhbmNlcyA9IGRlZmF1bHRfY291bnQKICAgICAgICAgcmV0dXJuIG1pbihz
dXBwb3J0YWJsZV9pbnN0YW5jZXMsIGRlZmF1bHRfY291bnQpCiAKLSAgICBkZWYgbWFrZV9jb21t
YW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3Iv
YmluL21ha2UnKQotCiAgICAgZGVmIF9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydChzZWxmKToKICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyB1bnVzZWQuIFJlbW92ZS4KICAgICAgICAgamF2YV90ZXN0
c19wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAi
amF2YSIpCkBAIC0xNjcsMzEgKzE2MSw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAg
ICBkZWYgX2NoZWNrX3BvcnRfYnVpbGQoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5n
ZXRfb3B0aW9uKCdqYXZhJykgb3Igc2VsZi5fYnVpbGRfamF2YV90ZXN0X3N1cHBvcnQoKQogCi0g
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUp
OgotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2lu
Y2UgaXQgYXBwZWFycyB0aGUgdGltZQotICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFj
dHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKLSAg
ICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgotICAgICAgICAj
IEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/Ci0g
ICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9
IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAg
Y3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4o
KQotICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29k
ZSBpcyB3b3JraW5nIC4uLgotICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBs
b2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCi0gICAgICAgIGRlYWRsaW5lID0gbm93
ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAg
ICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBj
cmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVf
ZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3
YWl0X2Zvcl9sb2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBj
cmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkg
aWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBf
Zm4oMC4xKQotICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5v
dCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLSAgICAgICAg
cmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKLQogICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZiwg
cGl4ZWxfdGVzdHM9RmFsc2UpOgogICAgICAgICBoZWxwZXJfcGF0aCA9IHNlbGYuX3BhdGhfdG9f
aGVscGVyKCkKICAgICAgICAgaWYgbm90IGhlbHBlcl9wYXRoOgpAQCAtMjE4LDYgKzE4NywxMyBA
QCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICAgICAgaWYgZS5leGl0X2Nv
ZGUgIT0gMToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQogCisgICAgZGVmIHhjcnVuX2Zp
bmQoc2VsZiwgY29tbWFuZCwgZmFsbGJhY2spOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnLWZpbmQnLCBjb21t
YW5kXSkucnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgorICAgICAgICAgICAg
X2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxsYmFj
aykKKyAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCiAgICAgZGVmIHN0b3BfaGVscGVyKHNl
bGYpOgogICAgICAgICBpZiBzZWxmLl9oZWxwZXI6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCJT
dG9wcGluZyBMYXlvdXRUZXN0SGVscGVyIikKQEAgLTIyOSwxNiArMjA1LDYgQEAgY2xhc3MgTWFj
UG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIklPRXJyb3IgcmFp
c2VkIHdoaWxlIHN0b3BwaW5nIGhlbHBlcjogJXMiICUgc3RyKGUpKQogICAgICAgICAgICAgc2Vs
Zi5faGVscGVyID0gTm9uZQogCi0gICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJywgJ25tJykKLQotICAgIGRlZiB4Y3J1bl9maW5kKHNl
bGYsIGNvbW1hbmQsIGZhbGxiYWNrKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJy1maW5kJywgY29tbWFuZF0p
LnJzdHJpcCgpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKLSAgICAgICAgICAgIF9sb2cu
d2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFsbGJhY2spCi0g
ICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKLQogICAgIGRlZiBsb2dnaW5nX3BhdHRlcm5zX3Rv
X3N0cmlwKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciA8cmRhcjov
L3Byb2JsZW0vMTU2MDUwMDc+IGlzIGZpeGVkCiAgICAgICAgIHJldHVybiBbKHJlLmNvbXBpbGUo
JyhBVkZ8R1ZBKSBpbmZvOi4qXG4nKSwgJycpXQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CShyZXZpc2lvbiAyMDQyOTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MDMsMjggKzQwMyw2IEBAIGNsYXNzIFdpblBvcnQo
QXBwbGVQb3J0KToKICAgICAgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFz
aF9sb2cKICAgICAgICAgcmV0dXJuIGNyYXNoX2xvZ3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdf
c2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAg
ICAgIyBObyBzYW1wbGluZyBvbiBXaW5kb3dzLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2Ft
cGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgIyBObyBzYW1wbGluZyBvbiBX
aW5kb3dzLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX21ha2VfbGVha19kZXRlY3RvcihzZWxm
KToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwg
cHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6Ci0gICAgICAgICMgTm8gbGVhayBjaGVja2luZyBv
biBXaW5kb3dzLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShz
ZWxmKToKLSAgICAgICAgIyBObyBsZWFrIGNoZWNraW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBh
c3MKLQotICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBOb25lCi0KICAgICBkZWYgZmluZF9zeXN0ZW1fcGlkKHNlbGYsIG5hbWUsIHBpZCk6CiAg
ICAgICAgIHN5c3RlbV9waWQgPSBpbnQocGlkKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286405</attachid>
            <date>2016-08-18 15:44:59 -0700</date>
            <delta_ts>2016-08-18 15:51:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160709-20160818154308.patch</filename>
            <type>text/plain</type>
            <size>20220</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDE2LTA4LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIERhcndpbiBwb3J0cyBp
bnRvIGEgYmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2xhcmlmeSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgb2Ygd2Via2l0cHkgcG9ydHMu
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChB
cHBsZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKTogU3BlY2lmaWMgaU9TIHBvcnQgY2hl
Y2suCisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOiBNb3ZlIGxlYWsgZGV0ZWN0b3IgdG8g
RGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVjdG9yKTogTW92
ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90
aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5jaGVja19mb3JfbGVh
a3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnByaW50X2xlYWtz
X3N1bW1hcnkpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9wYXRo
X3RvX3dlYmNvcmVfbGlicmFyeSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBs
ZVBvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAg
ICAgIChBcHBsZVBvcnQuX21lcmdlX2NyYXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0Lgor
ICAgICAgICAoQXBwbGVQb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTog
TW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6
IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQubG9va19mb3JfbmV3X2Ny
YXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBs
ZV9wcm9jZXNzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zYW1w
bGVfZmlsZV9wYXRoKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5s
b29rX2Zvcl9uZXdfc2FtcGxlcyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0KToKKyAgICAgICAgKFBv
cnQuc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dCk6IFJldHVybiB0cnVlIGZvciBhbGwgcG9ydHMu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbC5weToKKyAgICAgICAgKEVmbFBv
cnQpOgorICAgICAgICAoRWZsUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KTogTW92ZWQg
dG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAg
ICAoR3RrUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAgICAgKEd0a1BvcnQpOgorICAgICAgICAo
R3RrUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OiBBZGRlZC4KKyAgICAgICAgKERh
cndpblBvcnQpOiBTaGFyZWQgaU9TIGFuZCBNYWMgZnVuY3Rpb25zCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1BvcnQpOgorICAgICAgICAoSU9T
UG9ydC5vcGVyYXRpbmdfc3lzdGVtKToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAg
ICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IEluaGVyaXRzIGZyb20gRGFyd2luUG9y
dC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25z
X2ZpbGVzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvbWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAgIChNYWNQb3J0Ll9faW5p
dF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAoTWFjUG9ydC5fcG9ydF9z
cGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAg
ICAoTWFjUG9ydC5tYWtlX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAo
TWFjUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChN
YWNQb3J0Lm5tX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0KToKKyAgICAgICAgKFdp
blBvcnQubG9va19mb3JfbmV3X3NhbXBsZXMpOiBVc2VkIGRlZmF1bHQsIEFwcGxlUG9ydCBubyBs
b25nZXIgaW1wbGVtZW50cy4KKyAgICAgICAgKFdpblBvcnQuc2FtcGxlX3Byb2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdpblBvcnQuX21ha2VfbGVha19kZXRlY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOiBEaXR0by4KKyAgICAgICAgKFdpblBvcnQucHJp
bnRfbGVha3Nfc3VtbWFyeSk6IERpdHRvLgorICAgICAgICAoV2luUG9ydC5fcGF0aF90b193ZWJj
b3JlX2xpYnJhcnkpOiBEaXR0by4KKwogMjAxNi0wOC0xNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBvZmYgb2YgZGVw
cmVjYXRlZCBDb3JlR3JhcGhpY3MgQVBJIENHQ29udGV4dFNlbGVjdEZvbnQoKSBhbmQgQ0dDb250
ZXh0U2hvd1RleHRBdFBvaW50KCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkJKHJldmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBs
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uY3Jhc2hsb2dzIGltCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBv
cnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24g
aW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9y
IGltcG9ydCBMZWFrRGV0ZWN0b3IKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCkBAIC02MSw2ICs2MCwxMSBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgZGVmIGRl
dGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6CiAg
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIHt9CiAgICAgICAgIGlmIHBvcnRfbmFtZSBpbiAo
Y2xzLnBvcnRfbmFtZSwgY2xzLnBvcnRfbmFtZSArICctd2syJyk6CisKKyAgICAgICAgICAgICMg
U2luY2UgSU9TIHNpbXVsYXRvciBydW4gb24gbWFjLCB0aGV5IG5lZWQgYSBzcGVjaWFsIGNoZWNr
CisgICAgICAgICAgICBpZiBob3N0LnBsYXRmb3JtLm9zX25hbWUgPT0gJ21hYycgYW5kICdpb3Mt
c2ltdWxhdG9yJyBpbiBwb3J0X25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvcnRfbmFt
ZQorCiAgICAgICAgICAgICAjIElmIHRoZSBwb3J0X25hbWUgbWF0Y2hlcyB0aGUgKGJhZGx5IG5h
bWVkKSBjbHMucG9ydF9uYW1lLCB0aGF0CiAgICAgICAgICAgICAjIG1lYW5zIHRoYXQgdGhleSBw
YXNzZWQgJ21hYycgb3IgJ3dpbicgYW5kIGRpZG4ndCBzcGVjaWZ5IGEgdmVyc2lvbi4KICAgICAg
ICAgICAgICMgVGhhdCBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8gdXNl
IHRoZSB2ZXJzaW9uIGN1cnJlbnRseQpAQCAtODksMjMgKzkzLDExIEBAIGNsYXNzIEFwcGxlUG9y
dChQb3J0KToKICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lLnJlcGxhY2UoJy13azInLCAn
JykKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgo
cG9ydF9uYW1lKQogCi0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2xl
YWtfZGV0ZWN0b3IoKQotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6Ci0gICAg
ICAgICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBt
b3JlIHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCi0gICAgICAgICAgICAjIHdpdGgg
TWFsbG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb25f
ZGVmYXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCi0KLSAgICBkZWYgX21ha2VfbGVha19kZXRlY3Rv
cihzZWxmKToKLSAgICAgICAgcmV0dXJuIExlYWtEZXRlY3RvcihzZWxmKQotCiAgICAgZGVmIGRl
ZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFy
ZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCiAgICAgICAgIHJldHVy
biBzdXBlcihBcHBsZVBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCiAKLSAgICBkZWYg
c3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQog
ICAgIGRlZiBzaG91bGRfcmV0cnlfY3Jhc2hlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUK
IApAQCAtMTI5LDExMSArMTIxLDYgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lv
bj1zZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVjdHVyZT1h
cmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25m
aWd1cmF0aW9ucwogCi0gICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUs
IHByb2Nlc3NfcGlkKToKLSAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToK
LSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIFdlIGNvdWxkIHVzZSBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvcHN1dGlsLyB0byBnZXQgdGhlIHByb2Nlc3NfbmFtZSBmcm9tIHRoZSBwaWQu
Ci0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IuY2hlY2tfZm9yX2xlYWtzKHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpCi0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAjIFdlJ3JlIGluIHRoZSBtYW5hZ2VyIHByb2Nlc3MsIHNvIHRoZSBsZWFrIGRl
dGVjdG9yIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGxlYWsgZmlsZXMuCi0gICAgICAg
ICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciB3YXkg
dG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2VycyB5ZXQuCi0gICAgICAgICMg
RklYTUU6IFRoaXMgd2lsbCBpbmNsdWRlIHRvbyBtYW55IGxlYWtzIGluIHN1YnNlcXVlbnQgcnVu
cyB1bnRpbCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgY2xlYXJlZCEKLSAgICAgICAgbGVha3Nf
ZmlsZXMgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCkpCi0gICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKLSAgICAg
ICAgICAgIHJldHVybgotICAgICAgICB0b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9
IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhs
ZWFrc19maWxlcykKLSAgICAgICAgdG90YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNv
dW50X3RvdGFsX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFs
IGxlYWtzIGZvdW5kIGZvciBhIHRvdGFsIG9mICVzLiIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5
dGVzX3N0cmluZykpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kLiIg
JSB1bmlxdWVfbGVha3MpCi0KLSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlJykKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYs
IHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2Ny
aXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAgICAg
ICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQg
aW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2Vy
LgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1
bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1u
by1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAgICAg
ICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJy
PWZpbGUob3MuZGV2bnVsbCkpCi0KLSAgICBkZWYgX21lcmdlX2NyYXNoX2xvZ3Moc2VsZiwgbG9n
cywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgZm9yIHRlc3QsIGNyYXNo
X2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzX25hbWUgPSB0ZXN0LnNwbGl0KCItIilbMF0KLSAgICAgICAgICAgICAg
ICBwaWQgPSBpbnQodGVzdC5zcGxpdCgiLSIpWzFdKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4
RXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBhbnko
ZW50cnlbMV0gPT0gcHJvY2Vzc19uYW1lIGFuZCBlbnRyeVsyXSA9PSBwaWQgZm9yIGVudHJ5IGlu
IGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgYSBuZXcg
Y3Jhc2gsIHRoZW4gYXBwZW5kIHRoZSBsb2dzCi0gICAgICAgICAgICAgICAgbG9nc1t0ZXN0XSA9
IGNyYXNoX2xvZwotICAgICAgICByZXR1cm4gbG9ncwotCi0gICAgZGVmIF9sb29rX2Zvcl9hbGxf
Y3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgotICAgICAgICBjcmFzaF9s
b2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICByZXR1cm4gY3Jhc2hfbG9nLmZpbmRf
YWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotCi0g
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpOgotICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgZGVmIGxvb2tfZm9yX25ld19jcmFzaF9sb2dzKHNlbGYsIGNyYXNoZWRf
cHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgIiIiU2luY2UgY3Jhc2ggbG9ncyBjYW4g
dGFrZSBhIGxvbmcgdGltZSB0byBiZSB3cml0dGVuIG91dCBpZiB0aGUgc3lzdGVtIGlzCi0gICAg
ICAgICAgIHVuZGVyIHN0cmVzcyBkbyBhIHNlY29uZCBwYXNzIGF0IHRoZSBlbmQgb2YgdGhlIHRl
c3QgcnVuLgotCi0gICAgICAgICAgIGNyYXNoZXM6IHRlc3RfbmFtZSAtPiBwaWQsIHByb2Nlc3Nf
bmFtZSB0dXBsZSBvZiBjcmFzaGVkIHByb2Nlc3MKLSAgICAgICAgICAgc3RhcnRfdGltZTogdGlt
ZSB0aGUgdGVzdHMgc3RhcnRlZCBhdC4gIFdlJ3JlIGxvb2tpbmcgZm9yIGNyYXNoCi0gICAgICAg
ICAgICAgICBsb2dzIGFmdGVyIHRoYXQgdGltZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGNyYXNo
X2xvZ3MgPSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGlu
IGNyYXNoZWRfcHJvY2Vzc2VzOgotICAgICAgICAgICAgIyBQYXNzaW5nIE5vbmUgZm9yIG91dHB1
dC4gIFRoaXMgaXMgYSBzZWNvbmQgcGFzcyBhZnRlciB0aGUgdGVzdCBmaW5pc2hlZCBzbwotICAg
ICAgICAgICAgIyBpZiB0aGUgb3V0cHV0IGhhZCBhbnkgbG9nZ2luZyB3ZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY29sbGVjdGVkIGl0LgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gc2VsZi5fZ2V0X2Ny
YXNoX2xvZyhwcm9jZXNzX25hbWUsIHBpZCwgTm9uZSwgTm9uZSwgc3RhcnRfdGltZSwgd2FpdF9m
b3JfbG9nPUZhbHNlKVsxXQotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jh
c2hfbG9nCi0gICAgICAgIGFsbF9jcmFzaF9sb2cgPSBzZWxmLl9sb29rX2Zvcl9hbGxfY3Jhc2hf
bG9nc19pbl9sb2dfZGlyKHN0YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9j
cmFzaF9sb2dzKGNyYXNoX2xvZ3MsIGFsbF9jcmFzaF9sb2csIGNyYXNoZWRfcHJvY2Vzc2VzKQot
Ci0gICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIGhhbmdf
cmVwb3J0ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKLSAgICAgICAgZXhpdF9z
dGF0dXMgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgIi91c3Iv
YmluL3N1ZG8iLAotICAgICAgICAgICAgIi1uIiwKLSAgICAgICAgICAgICIvdXNyL3NiaW4vc3Bp
bmR1bXAiLAotICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAx
MCwKLSAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICBoYW5nX3JlcG9ydCwKLSAgICAg
ICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAgICAgICBpZiBleGl0X3N0YXR1czoKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWwotICAgICAgICAgICAgICAgICAgICAiL3Vzci9iaW4vc2FtcGxlIiwKLSAgICAgICAgICAg
ICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgICAgICAxMCwKLSAgICAgICAgICAgICAgICAg
ICAgMTAsCi0gICAgICAgICAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICAgICAgICAg
IGhhbmdfcmVwb3J0LAotICAgICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byBz
YW1wbGUgcHJvY2VzczonICsgc3RyKGUpKQotCi0gICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2Vs
ZiwgbmFtZSwgcGlkKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBw
aWQpKQotCi0gICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9w
cm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICBzYW1wbGVfZmlsZXMgPSB7fQotICAgICAg
ICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGluIHVucmVzcG9uc2l2ZV9wcm9j
ZXNzZXM6Ci0gICAgICAgICAgICBzYW1wbGVfZmlsZSA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChw
cm9jZXNzX25hbWUsIHBpZCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmlz
ZmlsZShzYW1wbGVfZmlsZSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IHNhbXBsZV9maWxlc1t0ZXN0X25hbWVdID0gc2FtcGxlX2ZpbGUKLSAgICAgICAgcmV0dXJuIHNh
bXBsZV9maWxlcwotCiAgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKICAgICAgICAgYmlu
YXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoYmluYXJ5X25hbWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQko
cmV2aXNpb24gMjA0NjExKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw5ICsxNTMsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAg
ICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2Vs
Zik6Ci0gICAgICAgICMgRklYTUU6IE1ha2UgcGVyLXRlc3QgdGltZW91dHMgdW5jb25kaXRpb25h
bCBvbmNlIGFsbCBwb3J0cycgRHVtcFJlbmRlclRyZWVzIHN1cHBvcnQgdGhhdC4KLSAgICAgICAg
IyBXaW5kb3dzIER1bXBSZW5kZXJUcmVlIG1heSBiZSB0aGUgb25seSBvbmUgcmVtYWluaW5nIHRv
IGJlIGZpeGVkIGF0IHRoaXMgdGltZS4KLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiBUcnVlCiAKICAgICBkZWYgZGVmYXVsdF9waXhlbF90ZXN0cyhzZWxmKToKICAgICAgICAg
IyBGSVhNRTogRGlzYWJsZSB1bnRpbCB0aGV5IGFyZSBydW4gYnkgZGVmYXVsdCBvbiBidWlsZC53
ZWJraXQub3JnLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5CShyZXZpc2lvbiAy
MDQ2MTEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC04MCw5ICs4MCw2IEBAIGNsYXNzIEVmbFBvcnQoUG9ydCk6CiAKICAgICAgICAgcmV0
dXJuIGVudgogCi0gICAgZGVmIHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAg
ICAgICAjIFRlc3RzIHJ1biBjb25zaWRlcmFibHkgc2xvd2VyIHVuZGVyIGdkYgogICAgICAgICAj
IG9yIHZhbGdyaW5kLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CShyZXZpc2lv
biAyMDQ2MTEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC04Myw5ICs4Myw2IEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgICAgICAg
ICByZXR1cm4gWG9yZ0RyaXZlcgogICAgICAgICByZXR1cm4gWHZmYkRyaXZlcgogCi0gICAgZGVm
IHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0K
ICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICAjIFN0YXJ0aW5nIGFu
IGFwcGxpY2F0aW9uIHVuZGVyIFZhbGdyaW5kIHRha2VzIGEgbG90IGxvbmdlciB0aGFuIG5vcm1h
bAogICAgICAgICAjIHNvIGluY3JlYXNlIHRoZSB0aW1lb3V0IChlbXBpcmljYWxseSAxMHggaXMg
ZW5vdWdoIHRvIGF2b2lkIHRpbWVvdXRzKS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
cy5weQkocmV2aXNpb24gMjA0NjExKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDE4IEBAIGltcG9ydCBzdWJwcm9jZXNz
CiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVt
b2l6ZWQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNo
TG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0
RXJyb3IKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRp
b24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNv
bmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGlt
YWdlX2RpZmYKLWZyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Ci1mcm9t
IHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LmRhcndp
biBpbXBvcnQgRGFyd2luUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0
IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KEFwcGxlUG9ydCk6CitjbGFzcyBJT1NQ
b3J0KERhcndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAKICAgICBBUkNISVRFQ1RV
UkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQpAQCAtNjcsNyArNjUsNyBAQCBjbGFz
cyBJT1NQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHJldHVybiAnaW9zJwogCiAKLWNsYXNzIElP
U1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0KToKK2NsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2lu
UG9ydCk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCiAKICAgICBGVVRVUkVfVkVS
U0lPTiA9ICdmdXR1cmUnCkBAIC05NSw3ICs5Myw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQo
QXBwbGVQb3J0KToKICAgICB9CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9u
YW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9f
aW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAgICAgICBvcHRpb25h
bF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAgICAgICAg
IHNlbGYuX2RldmljZV9jbGFzcyA9IG9wdGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9k
ZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCkBAIC0yMjAsOSArMjE4
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogCiAgICAgICAgIHJldHVy
biBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQogCi0gICAg
ZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFz
ZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5l
X3NlYXJjaF9wYXRoKCldKSkKLQogICAgIGRlZiBfc2V0X2RldmljZV9jbGFzcyhzZWxmLCBkZXZp
Y2VfY2xhc3MpOgogICAgICAgICAjIElkZWFsbHkgd2UnZCBlbnN1cmUgdGhhdCBubyBzaW11bGF0
b3JzIGFyZSBydW5uaW5nIHdoZW4gdGhpcyBpcyBjYWxsZWQuCiAgICAgICAgIHNlbGYuX2Rldmlj
ZV9jbGFzcyA9IGRldmljZV9jbGFzcyBpZiBkZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRf
REVWSUNFX0NMQVNTCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHJldmlzaW9u
IDIwNDYxMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEyICszNCwxMiBAQCBpbXBvcnQgcmUKIAogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5wb3J0
LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0
IERhcndpblBvcnQKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNs
YXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKK2NsYXNzIE1hY1BvcnQoRGFyd2luUG9ydCk6CiAgICAg
cG9ydF9uYW1lID0gIm1hYyIKIAogICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ21hYy1z
bm93bGVvcGFyZCcsICdtYWMtbGlvbicsICdtYWMtbW91bnRhaW5saW9uJywgJ21hYy1tYXZlcmlj
a3MnLCAnbWFjLXlvc2VtaXRlJywgJ21hYy1lbGNhcGl0YW4nLCAnbWFjLXNpZXJyYSddCkBAIC00
OSw3ICs0OSw3IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICBERUZBVUxUX0FSQ0hJ
VEVDVFVSRSA9ICd4ODZfNjQnCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9u
YW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVyKE1hY1BvcnQsIHNlbGYpLl9faW5pdF9fKGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2Vs
ZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2Zs
YWdzKHNlbGYpOgogICAgICAgICByZXR1cm4gWydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRl
Y3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC02Niw5ICs2Niw2IEBAIGNsYXNzIE1hY1BvcnQo
QXBwbGVQb3J0KToKICAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYuX3drMl9wb3J0
X25hbWUoKSwgJ3drMiddICsgZmFsbGJhY2tfbmFtZXMKICAgICAgICAgcmV0dXJuIG1hcChzZWxm
Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFtZXMpCiAKLSAgICBkZWYgX3BvcnRf
c3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gbGlzdChy
ZXZlcnNlZChbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRo
KHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFzZWxpbmVfc2VhcmNoX3Bh
dGgoKV0pKQotCiAgICAgZGVmIGNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3JvcyhzZWxmKToK
ICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICJzaWVycmErIjogWyJzaWVycmEiLCAiZnV0
dXJlIl0sCkBAIC0xNTIsOSArMTQ5LDYgQEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAg
ICAgICAgICAgc3VwcG9ydGFibGVfaW5zdGFuY2VzID0gZGVmYXVsdF9jb3VudAogICAgICAgICBy
ZXR1cm4gbWluKHN1cHBvcnRhYmxlX2luc3RhbmNlcywgZGVmYXVsdF9jb3VudCkKIAotICAgIGRl
ZiBtYWtlX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21h
a2UnLCAnL3Vzci9iaW4vbWFrZScpCi0KICAgICBkZWYgX2J1aWxkX2phdmFfdGVzdF9zdXBwb3J0
KHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIHVudXNlZC4gUmVtb3ZlLgogICAgICAg
ICBqYXZhX3Rlc3RzX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVz
dHNfZGlyKCksICJqYXZhIikKQEAgLTE2NywzMSArMTYxLDYgQEAgY2xhc3MgTWFjUG9ydChBcHBs
ZVBvcnQpOgogICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKICAgICAgICAgcmV0dXJu
IG5vdCBzZWxmLmdldF9vcHRpb24oJ2phdmEnKSBvciBzZWxmLl9idWlsZF9qYXZhX3Rlc3Rfc3Vw
cG9ydCgpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQs
IHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zv
cl9sb2c9VHJ1ZSk6Ci0gICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFu
ZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCi0gICAgICAgICMgUmVwb3J0Q3Jhc2gg
dGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRo
ZXJlIGFyZQotICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24u
Ci0gICAgICAgICMgRklYTUU6IFNob3VsZCBtb3N0IG9mIHRoaXMgYmUgbW92ZWQgaW50byBDcmFz
aExvZ3MoKT8KLSAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCi0gICAgICAg
IHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAotICAgICAgICBjcmFzaF9sb2cgPSAn
JwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAgICAgbm93
ID0gdGltZV9mbigpCi0gICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1
cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCi0gICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcg
Zm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKLSAgICAgICAgZGVh
ZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywg
MSkpCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKLSAg
ICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBp
ZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotICAgICAgICAg
ICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAg
ICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNw
bGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKLSAgICAgICAgICAg
ICAgICBzbGVlcF9mbigwLjEpCi0gICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCi0KLSAg
ICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25l
KQotICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jhc2hfbG9nKQotCiAgICAgZGVmIHN0YXJ0X2hl
bHBlcihzZWxmLCBwaXhlbF90ZXN0cz1GYWxzZSk6CiAgICAgICAgIGhlbHBlcl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19oZWxwZXIoKQogICAgICAgICBpZiBub3QgaGVscGVyX3BhdGg6CkBAIC0yMTgs
NiArMTg3LDEzIEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgICAgICBp
ZiBlLmV4aXRfY29kZSAhPSAxOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlCiAKKyAgICBk
ZWYgeGNydW5fZmluZChzZWxmLCBjb21tYW5kLCBmYWxsYmFjayk6CisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICct
ZmluZCcsIGNvbW1hbmRdKS5yc3RyaXAoKQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Cisg
ICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycu
IiAlIGZhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKICAgICBkZWYgc3Rv
cF9oZWxwZXIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hlbHBlcjoKICAgICAgICAgICAgIF9s
b2cuZGVidWcoIlN0b3BwaW5nIExheW91dFRlc3RIZWxwZXIiKQpAQCAtMjI5LDE2ICsyMDUsNiBA
QCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
SU9FcnJvciByYWlzZWQgd2hpbGUgc3RvcHBpbmcgaGVscGVyOiAlcyIgJSBzdHIoZSkpCiAgICAg
ICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAKLSAgICBkZWYgbm1fY29tbWFuZChzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbm0nLCAnbm0nKQotCi0gICAgZGVmIHhj
cnVuX2ZpbmQoc2VsZiwgY29tbWFuZCwgZmFsbGJhY2spOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnLWZpbmQn
LCBjb21tYW5kXSkucnN0cmlwKCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgotICAgICAg
ICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBm
YWxsYmFjaykKLSAgICAgICAgICAgIHJldHVybiBmYWxsYmFjawotCiAgICAgZGVmIGxvZ2dpbmdf
cGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CiAgICAgICAgICMgRklYTUU6IFJlbW92ZSB0aGlzIGFm
dGVyIDxyZGFyOi8vcHJvYmxlbS8xNTYwNTAwNz4gaXMgZml4ZWQKICAgICAgICAgcmV0dXJuIFso
cmUuY29tcGlsZSgnKEFWRnxHVkEpIGluZm86LipcbicpLCAnJyldCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwMywyOCArNDAzLDYgQEAgY2xh
c3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9u
YW1lXSA9IGNyYXNoX2xvZwogICAgICAgICByZXR1cm4gY3Jhc2hfbG9ncwogCi0gICAgZGVmIGxv
b2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3Rp
bWUpOgotICAgICAgICAjIE5vIHNhbXBsaW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBhc3MKLQot
ICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICAjIE5vIHNh
bXBsaW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfbWFrZV9sZWFrX2Rl
dGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGNoZWNrX2Zvcl9s
ZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKLSAgICAgICAgIyBObyBsZWFr
IGNoZWNraW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBwcmludF9sZWFr
c19zdW1tYXJ5KHNlbGYpOgotICAgICAgICAjIE5vIGxlYWsgY2hlY2tpbmcgb24gV2luZG93cy4K
LSAgICAgICAgcGFzcwotCi0gICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToK
LSAgICAgICAgcmV0dXJuIE5vbmUKLQogICAgIGRlZiBmaW5kX3N5c3RlbV9waWQoc2VsZiwgbmFt
ZSwgcGlkKToKICAgICAgICAgc3lzdGVtX3BpZCA9IGludChwaWQpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286407</attachid>
            <date>2016-08-18 15:51:24 -0700</date>
            <delta_ts>2016-08-23 15:07:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160709-20160818154934.patch</filename>
            <type>text/plain</type>
            <size>29657</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDE2LTA4LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIERhcndpbiBwb3J0cyBp
bnRvIGEgYmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2xhcmlmeSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgb2Ygd2Via2l0cHkgcG9ydHMu
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChB
cHBsZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKTogU3BlY2lmaWMgaU9TIHBvcnQgY2hl
Y2suCisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOiBNb3ZlIGxlYWsgZGV0ZWN0b3IgdG8g
RGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVjdG9yKTogTW92
ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90
aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5jaGVja19mb3JfbGVh
a3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnByaW50X2xlYWtz
X3N1bW1hcnkpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9wYXRo
X3RvX3dlYmNvcmVfbGlicmFyeSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBs
ZVBvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAg
ICAgIChBcHBsZVBvcnQuX21lcmdlX2NyYXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0Lgor
ICAgICAgICAoQXBwbGVQb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTog
TW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6
IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQubG9va19mb3JfbmV3X2Ny
YXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBs
ZV9wcm9jZXNzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zYW1w
bGVfZmlsZV9wYXRoKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5s
b29rX2Zvcl9uZXdfc2FtcGxlcyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0KToKKyAgICAgICAgKFBv
cnQuc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dCk6IFJldHVybiB0cnVlIGZvciBhbGwgcG9ydHMu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2VmbC5weToKKyAgICAgICAgKEVmbFBv
cnQpOgorICAgICAgICAoRWZsUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KTogTW92ZWQg
dG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAg
ICAoR3RrUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAgICAgKEd0a1BvcnQpOgorICAgICAgICAo
R3RrUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OiBBZGRlZC4KKyAgICAgICAgKERh
cndpblBvcnQpOiBTaGFyZWQgaU9TIGFuZCBNYWMgZnVuY3Rpb25zCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1BvcnQpOgorICAgICAgICAoSU9T
UG9ydC5vcGVyYXRpbmdfc3lzdGVtKToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAg
ICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IEluaGVyaXRzIGZyb20gRGFyd2luUG9y
dC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25z
X2ZpbGVzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvbWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAgIChNYWNQb3J0Ll9faW5p
dF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAoTWFjUG9ydC5fcG9ydF9z
cGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAg
ICAoTWFjUG9ydC5tYWtlX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAo
TWFjUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChN
YWNQb3J0Lm5tX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0KToKKyAgICAgICAgKFdp
blBvcnQubG9va19mb3JfbmV3X3NhbXBsZXMpOiBVc2VkIGRlZmF1bHQsIEFwcGxlUG9ydCBubyBs
b25nZXIgaW1wbGVtZW50cy4KKyAgICAgICAgKFdpblBvcnQuc2FtcGxlX3Byb2Nlc3MpOiBEaXR0
by4KKyAgICAgICAgKFdpblBvcnQuX21ha2VfbGVha19kZXRlY3Rvcik6IERpdHRvLgorICAgICAg
ICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOiBEaXR0by4KKyAgICAgICAgKFdpblBvcnQucHJp
bnRfbGVha3Nfc3VtbWFyeSk6IERpdHRvLgorICAgICAgICAoV2luUG9ydC5fcGF0aF90b193ZWJj
b3JlX2xpYnJhcnkpOiBEaXR0by4KKwogMjAxNi0wOC0xNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBvZmYgb2YgZGVw
cmVjYXRlZCBDb3JlR3JhcGhpY3MgQVBJIENHQ29udGV4dFNlbGVjdEZvbnQoKSBhbmQgQ0dDb250
ZXh0U2hvd1RleHRBdFBvaW50KCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkJKHJldmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBs
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uY3Jhc2hsb2dzIGltCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBv
cnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24g
aW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9y
IGltcG9ydCBMZWFrRGV0ZWN0b3IKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCkBAIC02MSw2ICs2MCwxMSBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgZGVmIGRl
dGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6CiAg
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIHt9CiAgICAgICAgIGlmIHBvcnRfbmFtZSBpbiAo
Y2xzLnBvcnRfbmFtZSwgY2xzLnBvcnRfbmFtZSArICctd2syJyk6CisKKyAgICAgICAgICAgICMg
U2luY2UgSU9TIHNpbXVsYXRvciBydW4gb24gbWFjLCB0aGV5IG5lZWQgYSBzcGVjaWFsIGNoZWNr
CisgICAgICAgICAgICBpZiBob3N0LnBsYXRmb3JtLm9zX25hbWUgPT0gJ21hYycgYW5kICdpb3Mt
c2ltdWxhdG9yJyBpbiBwb3J0X25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvcnRfbmFt
ZQorCiAgICAgICAgICAgICAjIElmIHRoZSBwb3J0X25hbWUgbWF0Y2hlcyB0aGUgKGJhZGx5IG5h
bWVkKSBjbHMucG9ydF9uYW1lLCB0aGF0CiAgICAgICAgICAgICAjIG1lYW5zIHRoYXQgdGhleSBw
YXNzZWQgJ21hYycgb3IgJ3dpbicgYW5kIGRpZG4ndCBzcGVjaWZ5IGEgdmVyc2lvbi4KICAgICAg
ICAgICAgICMgVGhhdCBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8gdXNl
IHRoZSB2ZXJzaW9uIGN1cnJlbnRseQpAQCAtODksMjMgKzkzLDExIEBAIGNsYXNzIEFwcGxlUG9y
dChQb3J0KToKICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lLnJlcGxhY2UoJy13azInLCAn
JykKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgo
cG9ydF9uYW1lKQogCi0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2xl
YWtfZGV0ZWN0b3IoKQotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6Ci0gICAg
ICAgICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBt
b3JlIHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCi0gICAgICAgICAgICAjIHdpdGgg
TWFsbG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb25f
ZGVmYXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCi0KLSAgICBkZWYgX21ha2VfbGVha19kZXRlY3Rv
cihzZWxmKToKLSAgICAgICAgcmV0dXJuIExlYWtEZXRlY3RvcihzZWxmKQotCiAgICAgZGVmIGRl
ZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFy
ZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCiAgICAgICAgIHJldHVy
biBzdXBlcihBcHBsZVBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCiAKLSAgICBkZWYg
c3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQog
ICAgIGRlZiBzaG91bGRfcmV0cnlfY3Jhc2hlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUK
IApAQCAtMTI5LDExMSArMTIxLDYgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lv
bj1zZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVjdHVyZT1h
cmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25m
aWd1cmF0aW9ucwogCi0gICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUs
IHByb2Nlc3NfcGlkKToKLSAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToK
LSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIFdlIGNvdWxkIHVzZSBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvcHN1dGlsLyB0byBnZXQgdGhlIHByb2Nlc3NfbmFtZSBmcm9tIHRoZSBwaWQu
Ci0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IuY2hlY2tfZm9yX2xlYWtzKHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpCi0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAjIFdlJ3JlIGluIHRoZSBtYW5hZ2VyIHByb2Nlc3MsIHNvIHRoZSBsZWFrIGRl
dGVjdG9yIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGxlYWsgZmlsZXMuCi0gICAgICAg
ICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciB3YXkg
dG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2VycyB5ZXQuCi0gICAgICAgICMg
RklYTUU6IFRoaXMgd2lsbCBpbmNsdWRlIHRvbyBtYW55IGxlYWtzIGluIHN1YnNlcXVlbnQgcnVu
cyB1bnRpbCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgY2xlYXJlZCEKLSAgICAgICAgbGVha3Nf
ZmlsZXMgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCkpCi0gICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKLSAgICAg
ICAgICAgIHJldHVybgotICAgICAgICB0b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9
IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhs
ZWFrc19maWxlcykKLSAgICAgICAgdG90YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNv
dW50X3RvdGFsX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFs
IGxlYWtzIGZvdW5kIGZvciBhIHRvdGFsIG9mICVzLiIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5
dGVzX3N0cmluZykpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kLiIg
JSB1bmlxdWVfbGVha3MpCi0KLSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlJykKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYs
IHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2Ny
aXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAgICAg
ICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQg
aW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2Vy
LgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1
bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1u
by1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAgICAg
ICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJy
PWZpbGUob3MuZGV2bnVsbCkpCi0KLSAgICBkZWYgX21lcmdlX2NyYXNoX2xvZ3Moc2VsZiwgbG9n
cywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgZm9yIHRlc3QsIGNyYXNo
X2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzX25hbWUgPSB0ZXN0LnNwbGl0KCItIilbMF0KLSAgICAgICAgICAgICAg
ICBwaWQgPSBpbnQodGVzdC5zcGxpdCgiLSIpWzFdKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4
RXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBhbnko
ZW50cnlbMV0gPT0gcHJvY2Vzc19uYW1lIGFuZCBlbnRyeVsyXSA9PSBwaWQgZm9yIGVudHJ5IGlu
IGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgYSBuZXcg
Y3Jhc2gsIHRoZW4gYXBwZW5kIHRoZSBsb2dzCi0gICAgICAgICAgICAgICAgbG9nc1t0ZXN0XSA9
IGNyYXNoX2xvZwotICAgICAgICByZXR1cm4gbG9ncwotCi0gICAgZGVmIF9sb29rX2Zvcl9hbGxf
Y3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgotICAgICAgICBjcmFzaF9s
b2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICByZXR1cm4gY3Jhc2hfbG9nLmZpbmRf
YWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotCi0g
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpOgotICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgZGVmIGxvb2tfZm9yX25ld19jcmFzaF9sb2dzKHNlbGYsIGNyYXNoZWRf
cHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgIiIiU2luY2UgY3Jhc2ggbG9ncyBjYW4g
dGFrZSBhIGxvbmcgdGltZSB0byBiZSB3cml0dGVuIG91dCBpZiB0aGUgc3lzdGVtIGlzCi0gICAg
ICAgICAgIHVuZGVyIHN0cmVzcyBkbyBhIHNlY29uZCBwYXNzIGF0IHRoZSBlbmQgb2YgdGhlIHRl
c3QgcnVuLgotCi0gICAgICAgICAgIGNyYXNoZXM6IHRlc3RfbmFtZSAtPiBwaWQsIHByb2Nlc3Nf
bmFtZSB0dXBsZSBvZiBjcmFzaGVkIHByb2Nlc3MKLSAgICAgICAgICAgc3RhcnRfdGltZTogdGlt
ZSB0aGUgdGVzdHMgc3RhcnRlZCBhdC4gIFdlJ3JlIGxvb2tpbmcgZm9yIGNyYXNoCi0gICAgICAg
ICAgICAgICBsb2dzIGFmdGVyIHRoYXQgdGltZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGNyYXNo
X2xvZ3MgPSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGlu
IGNyYXNoZWRfcHJvY2Vzc2VzOgotICAgICAgICAgICAgIyBQYXNzaW5nIE5vbmUgZm9yIG91dHB1
dC4gIFRoaXMgaXMgYSBzZWNvbmQgcGFzcyBhZnRlciB0aGUgdGVzdCBmaW5pc2hlZCBzbwotICAg
ICAgICAgICAgIyBpZiB0aGUgb3V0cHV0IGhhZCBhbnkgbG9nZ2luZyB3ZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY29sbGVjdGVkIGl0LgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gc2VsZi5fZ2V0X2Ny
YXNoX2xvZyhwcm9jZXNzX25hbWUsIHBpZCwgTm9uZSwgTm9uZSwgc3RhcnRfdGltZSwgd2FpdF9m
b3JfbG9nPUZhbHNlKVsxXQotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jh
c2hfbG9nCi0gICAgICAgIGFsbF9jcmFzaF9sb2cgPSBzZWxmLl9sb29rX2Zvcl9hbGxfY3Jhc2hf
bG9nc19pbl9sb2dfZGlyKHN0YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9j
cmFzaF9sb2dzKGNyYXNoX2xvZ3MsIGFsbF9jcmFzaF9sb2csIGNyYXNoZWRfcHJvY2Vzc2VzKQot
Ci0gICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIGhhbmdf
cmVwb3J0ID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRoKG5hbWUsIHBpZCkKLSAgICAgICAgZXhpdF9z
dGF0dXMgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgIi91c3Iv
YmluL3N1ZG8iLAotICAgICAgICAgICAgIi1uIiwKLSAgICAgICAgICAgICIvdXNyL3NiaW4vc3Bp
bmR1bXAiLAotICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAx
MCwKLSAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICBoYW5nX3JlcG9ydCwKLSAgICAg
ICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAgICAgICBpZiBleGl0X3N0YXR1czoKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWwotICAgICAgICAgICAgICAgICAgICAiL3Vzci9iaW4vc2FtcGxlIiwKLSAgICAgICAgICAg
ICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgICAgICAxMCwKLSAgICAgICAgICAgICAgICAg
ICAgMTAsCi0gICAgICAgICAgICAgICAgICAgICItZmlsZSIsCi0gICAgICAgICAgICAgICAgICAg
IGhhbmdfcmVwb3J0LAotICAgICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byBz
YW1wbGUgcHJvY2VzczonICsgc3RyKGUpKQotCi0gICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2Vs
ZiwgbmFtZSwgcGlkKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBw
aWQpKQotCi0gICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9w
cm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICBzYW1wbGVfZmlsZXMgPSB7fQotICAgICAg
ICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGluIHVucmVzcG9uc2l2ZV9wcm9j
ZXNzZXM6Ci0gICAgICAgICAgICBzYW1wbGVfZmlsZSA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChw
cm9jZXNzX25hbWUsIHBpZCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmlz
ZmlsZShzYW1wbGVfZmlsZSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IHNhbXBsZV9maWxlc1t0ZXN0X25hbWVdID0gc2FtcGxlX2ZpbGUKLSAgICAgICAgcmV0dXJuIHNh
bXBsZV9maWxlcwotCiAgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKICAgICAgICAgYmlu
YXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxk
X3BhdGgoYmluYXJ5X25hbWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQko
cmV2aXNpb24gMjA0NjExKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Myw5ICsxNTMsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAg
ICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2Vs
Zik6Ci0gICAgICAgICMgRklYTUU6IE1ha2UgcGVyLXRlc3QgdGltZW91dHMgdW5jb25kaXRpb25h
bCBvbmNlIGFsbCBwb3J0cycgRHVtcFJlbmRlclRyZWVzIHN1cHBvcnQgdGhhdC4KLSAgICAgICAg
IyBXaW5kb3dzIER1bXBSZW5kZXJUcmVlIG1heSBiZSB0aGUgb25seSBvbmUgcmVtYWluaW5nIHRv
IGJlIGZpeGVkIGF0IHRoaXMgdGltZS4KLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiBUcnVlCiAKICAgICBkZWYgZGVmYXVsdF9waXhlbF90ZXN0cyhzZWxmKToKICAgICAgICAg
IyBGSVhNRTogRGlzYWJsZSB1bnRpbCB0aGV5IGFyZSBydW4gYnkgZGVmYXVsdCBvbiBidWlsZC53
ZWJraXQub3JnLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBu
YW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2lt
cG9ydCBvcworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNo
bG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBB
cHBsZVBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0ZWN0b3IgaW1wb3J0IExlYWtEZXRl
Y3RvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBE
YXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9y
dF9uYW1lLCAqKmt3YXJncyk6CisgICAgICAgIEFwcGxlUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBM
ZWFrRGV0ZWN0b3Ioc2VsZikKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCJsZWFrcyIpOgor
ICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBzbG93cyBkb3duIG5vdGljYWJseSBpZiB3ZSBy
dW4gbW9yZSB0aGFuIGFib3V0IDEwMDAgdGVzdHMgaW4gYSBiYXRjaAorICAgICAgICAgICAgIyB3
aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFibGVkLgorICAgICAgICAgICAgc2VsZi5zZXRfb3B0
aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAxMDAwKQorCisgICAgZGVmIGRlZmF1bHRfdGltZW91
dF9tcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToK
KyAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCisgICAgICAgIHJldHVybiBzdXBlcihEYXJ3
aW5Qb3J0LCBzZWxmKS5kZWZhdWx0X3RpbWVvdXRfbXMoKQorCisgICAgZGVmIF9wb3J0X3NwZWNp
ZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJz
ZWQoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwg
J1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCld
KSkKKworICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgIyBXZSBjb3VsZCB1c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL3BzdXRpbC8gdG8gZ2V0IHRoZSBwcm9jZXNzX25hbWUgZnJvbSB0aGUgcGlkLgorICAgICAg
ICBzZWxmLl9sZWFrX2RldGVjdG9yLmNoZWNrX2Zvcl9sZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nl
c3NfcGlkKQorCisgICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlm
IG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgIyBXZSdyZSBpbiB0aGUgbWFuYWdlciBwcm9jZXNzLCBzbyB0aGUgbGVhayBkZXRlY3RvciB3
aWxsIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBsZWFrIGZpbGVzLgorICAgICAgICAjIEZJWE1F
OiBUaGlzIGlzIGEgaGFjaywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0
aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtlcnMgeWV0LgorICAgICAgICAjIEZJWE1FOiBU
aGlzIHdpbGwgaW5jbHVkZSB0b28gbWFueSBsZWFrcyBpbiBzdWJzZXF1ZW50IHJ1bnMgdW50aWwg
dGhlIHJlc3VsdHMgZGlyZWN0b3J5IGlzIGNsZWFyZWQhCisgICAgICAgIGxlYWtzX2ZpbGVzID0g
c2VsZi5fbGVha19kZXRlY3Rvci5sZWFrc19maWxlc19pbl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRz
X2RpcmVjdG9yeSgpKQorICAgICAgICBpZiBub3QgbGVha3NfZmlsZXM6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5nLCB1bmlxdWVfbGVha3MgPSBzZWxmLl9s
ZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2FuZF91bmlxdWVfbGVha3MobGVha3NfZmls
ZXMpCisgICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3Rh
bF9sZWFrcyhsZWFrc19maWxlcykKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBm
b3VuZCBmb3IgYSB0b3RhbCBvZiAlcy4iICUgKHRvdGFsX2xlYWtzLCB0b3RhbF9ieXRlc19zdHJp
bmcpKQorICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVl
X2xlYWtzKQorCisgICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1dlYkNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
V2ViQ29yZScpCisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6CisgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJl
IGFuZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCisgICAgICAgICMgUmVwb3J0Q3Jh
c2ggdGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVu
IHRoZXJlIGFyZQorICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcg
b24uCisgICAgICAgICMgRklYTUU6IFNob3VsZCBtb3N0IG9mIHRoaXMgYmUgbW92ZWQgaW50byBD
cmFzaExvZ3MoKT8KKyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAg
ICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorICAgICAgICBjcmFzaF9sb2cg
PSAnJworICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAg
bm93ID0gdGltZV9mbigpCisgICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3Jl
IHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tp
bmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAg
ZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2Vz
JywgMSkpCisgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToK
KyAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUs
IHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAg
ICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9n
LnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKKyAgICAgICAg
ICAgICAgICBzbGVlcF9mbigwLjEpCisgICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCisK
KyAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKKyAgICAgICAgICAgIHJldHVybiAoc3RkZXJyLCBO
b25lKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jhc2hfbG9nKQorCisgICAgZGVmIF9tZXJn
ZV9jcmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6Cisg
ICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxpdCgi
LSIpWzBdCisgICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkKKyAg
ICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgICAgICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50cnlb
Ml0gPT0gcGlkIGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICAg
ICAgIyBpZiB0aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncworICAgICAg
ICAgICAgICAgIGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGxvZ3MKKwor
ICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90
aGFuKToKKyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAg
cmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2Vy
X3RoYW49bmV3ZXJfdGhhbikKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxm
LCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgICIiIlNpbmNlIGNyYXNo
IGxvZ3MgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3Rl
bSBpcworICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5k
IG9mIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlk
LCBwcm9jZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9jZXNzCisgICAgICAgICAgIHN0YXJ0
X3RpbWU6IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFz
aAorICAgICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRpbWUuCisgICAgICAgICIiIgorICAg
ICAgICBjcmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFt
ZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAgICAgICAgICAgICMgUGFzc2luZyBOb25l
IGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNo
ZWQgc28KKyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291
bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNl
bGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3Rp
bWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9u
YW1lXSA9IGNyYXNoX2xvZworICAgICAgICBhbGxfY3Jhc2hfbG9nID0gc2VsZi5fbG9va19mb3Jf
YWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzdGFydF90aW1lKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fbWVyZ2VfY3Jhc2hfbG9ncyhjcmFzaF9sb2dzLCBhbGxfY3Jhc2hfbG9nLCBjcmFzaGVkX3By
b2Nlc3NlcykKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNp
dmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKKyAgICAgICAgc2FtcGxlX2ZpbGVzID0ge30KKyAg
ICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiB1bnJlc3BvbnNpdmVf
cHJvY2Vzc2VzOgorICAgICAgICAgICAgc2FtcGxlX2ZpbGUgPSBzZWxmLnNhbXBsZV9maWxlX3Bh
dGgocHJvY2Vzc19uYW1lLCBwaWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3Rl
bS5pc2ZpbGUoc2FtcGxlX2ZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBzYW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNhbXBsZV9maWxlCisgICAgICAgIHJldHVy
biBzYW1wbGVfZmlsZXMKKworICAgIGRlZiBzYW1wbGVfcHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQp
OgorICAgICAgICBoYW5nX3JlcG9ydCA9IHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChuYW1lLCBwaWQp
CisgICAgICAgIGV4aXRfc3RhdHVzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAg
ICAgICAgICAgICIvdXNyL2Jpbi9zdWRvIiwKKyAgICAgICAgICAgICItbiIsCisgICAgICAgICAg
ICAiL3Vzci9zYmluL3NwaW5kdW1wIiwKKyAgICAgICAgICAgIHBpZCwKKyAgICAgICAgICAgIDEw
LAorICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAgICAgaGFu
Z19yZXBvcnQsCisgICAgICAgIF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgaWYg
ZXhpdF9zdGF0dXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICAgICAgICAgIi91c3IvYmluL3NhbXBs
ZSIsCisgICAgICAgICAgICAgICAgICAgIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgMTAsCisg
ICAgICAgICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgICAgICAgICAiLWZpbGUiLAorICAg
ICAgICAgICAgICAgICAgICBoYW5nX3JlcG9ydCwKKyAgICAgICAgICAgICAgICBdKQorICAgICAg
ICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJu
aW5nKCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0cihlKSkKKworICAgIGRlZiBzaG93
X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAgICAjIFdl
IGRvbid0IHVzZSBzZWxmLl9ydW5fc2NyaXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdh
aXQgZm9yIHRoZSBzY3JpcHQKKyAgICAgICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRw
dXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCisgICAgICAg
ICMgbGF1bmNoaW5nIHRoZSBicm93c2VyLgorICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4o
W3NlbGYucGF0aF90b19zY3JpcHQoJ3J1bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9y
X2NvbmZpZ3VyYXRpb24oKSArIFsnLS1uby1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0
c19maWxlbmFtZV0sCisgICAgICAgICAgICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9
ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJyPWZpbGUob3MuZGV2bnVsbCkpCisKKyAgICBkZWYgc2Ft
cGxlX2ZpbGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmls
ZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4
dCIuZm9ybWF0KG5hbWUsIHBpZCkpCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQorCisg
ICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQo
J25tJywgJ25tJykKKworICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxiYWNr
KToKKyAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biB1bmRlZmluZWQ7IGZhbGxpbmcgYmFjayB0byAn
JXMnLiIgJSBmYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9lZmwucHkJKHJldmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9lZmwucHkJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgY2xh
c3MgRWZsUG9ydChQb3J0KToKIAogICAgICAgICByZXR1cm4gZW52CiAKLSAgICBkZWYgc3VwcG9y
dHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRl
ZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CiAgICAgICAgICMgVGVzdHMgcnVuIGNvbnNpZGVy
YWJseSBzbG93ZXIgdW5kZXIgZ2RiCiAgICAgICAgICMgb3IgdmFsZ3JpbmQuCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIwNDYxMSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDYgQEAg
Y2xhc3MgR3RrUG9ydChQb3J0KToKICAgICAgICAgICAgIHJldHVybiBYb3JnRHJpdmVyCiAgICAg
ICAgIHJldHVybiBYdmZiRHJpdmVyCiAKLSAgICBkZWYgc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91
dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRf
bXMoc2VsZik6CiAgICAgICAgICMgU3RhcnRpbmcgYW4gYXBwbGljYXRpb24gdW5kZXIgVmFsZ3Jp
bmQgdGFrZXMgYSBsb3QgbG9uZ2VyIHRoYW4gbm9ybWFsCiAgICAgICAgICMgc28gaW5jcmVhc2Ug
dGhlIHRpbWVvdXQgKGVtcGlyaWNhbGx5IDEweCBpcyBlbm91Z2ggdG8gYXZvaWQgdGltZW91dHMp
LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMDQ2MTEpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwyMCArMjksMTggQEAgaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAotZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRp
b24KIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2VfZGlmZgotZnJvbSB3ZWJraXRweS5w
b3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKLWZyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9y
dCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiBmcm9t
IHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZp
Y2VUeXBlCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNz
IElPU1BvcnQoQXBwbGVQb3J0KToKK2NsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9y
dF9uYW1lID0gImlvcyIKIAogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycs
ICdhcm02NCddCkBAIC02Nyw3ICs2NSw3IEBAIGNsYXNzIElPU1BvcnQoQXBwbGVQb3J0KToKICAg
ICAgICAgcmV0dXJuICdpb3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQp
OgorY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAi
aW9zLXNpbXVsYXRvciIKIAogICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKQEAgLTk1LDcg
KzkzLDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogICAgIH0KIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAg
c3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAq
Kmt3YXJncykKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25h
bWUsICoqa3dhcmdzKQogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNlbGYuZ2V0
X29wdGlvbignZGV2aWNlX2NsYXNzJykKICAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gb3B0
aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNlIHNlbGYuREVG
QVVMVF9ERVZJQ0VfQ0xBU1MKQEAgLTIyMCw5ICsyMTgsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KEFwcGxlUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCwgZmFsbGJhY2tfbmFtZXMpCiAKLSAgICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhwZWN0
YXRpb25zX2ZpbGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gbGlzdChyZXZlcnNlZChbc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHApLCAnVGVzdEV4cGVj
dGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKV0pKQotCiAgICAg
ZGVmIF9zZXRfZGV2aWNlX2NsYXNzKHNlbGYsIGRldmljZV9jbGFzcyk6CiAgICAgICAgICMgSWRl
YWxseSB3ZSdkIGVuc3VyZSB0aGF0IG5vIHNpbXVsYXRvcnMgYXJlIHJ1bm5pbmcgd2hlbiB0aGlz
IGlzIGNhbGxlZC4KICAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gZGV2aWNlX2NsYXNzIGlm
IGRldmljZV9jbGFzcyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L21hYy5weQkocmV2aXNpb24gMjA0NjExKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L21hYy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDEyIEBA
IGltcG9ydCByZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9y
dCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LnBvcnQuYXBwbGUgaW1wb3J0IEFwcGxlUG9ydAor
ZnJvbSB3ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydAogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgor
Y2xhc3MgTWFjUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAibWFjIgogCiAgICAg
VkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsnbWFjLXNub3dsZW9wYXJkJywgJ21hYy1saW9uJywg
J21hYy1tb3VudGFpbmxpb24nLCAnbWFjLW1hdmVyaWNrcycsICdtYWMteW9zZW1pdGUnLCAnbWFj
LWVsY2FwaXRhbicsICdtYWMtc2llcnJhJ10KQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgTWFjUG9y
dChBcHBsZVBvcnQpOgogICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ3g4Nl82NCcKIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAg
c3VwZXIoTWFjUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykK
KyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKQogCiAgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIHJldHVy
biBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10K
QEAgLTY2LDkgKzY2LDYgQEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAg
ZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpLCAnd2syJ10gKyBmYWxsYmFj
a19uYW1lcwogICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBm
YWxsYmFja19uYW1lcykKIAotICAgIGRlZiBfcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmls
ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVt
LmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25zJykg
Zm9yIHAgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCi0KICAgICBkZWYgY29uZmln
dXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKHNlbGYpOgogICAgICAgICByZXR1cm4gewogICAgICAg
ICAgICAgInNpZXJyYSsiOiBbInNpZXJyYSIsICJmdXR1cmUiXSwKQEAgLTE1Miw5ICsxNDksNiBA
QCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICBzdXBwb3J0YWJsZV9pbnN0
YW5jZXMgPSBkZWZhdWx0X2NvdW50CiAgICAgICAgIHJldHVybiBtaW4oc3VwcG9ydGFibGVfaW5z
dGFuY2VzLCBkZWZhdWx0X2NvdW50KQogCi0gICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKLQog
ICAgIGRlZiBfYnVpbGRfamF2YV90ZXN0X3N1cHBvcnQoc2VsZik6CiAgICAgICAgICMgRklYTUU6
IFRoaXMgaXMgdW51c2VkLiBSZW1vdmUuCiAgICAgICAgIGphdmFfdGVzdHNfcGF0aCA9IHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgImphdmEiKQpAQCAtMTY3
LDMxICsxNjEsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVmIF9jaGVja19w
b3J0X2J1aWxkKHNlbGYpOgogICAgICAgICByZXR1cm4gbm90IHNlbGYuZ2V0X29wdGlvbignamF2
YScpIG9yIHNlbGYuX2J1aWxkX2phdmFfdGVzdF9zdXBwb3J0KCkKIAotICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1l
X2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMg
dGhlIHRpbWUKLSAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBh
bmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCi0gICAgICAgICMgbG90cyBv
ZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KLSAgICAgICAgIyBGSVhNRTogU2hvdWxk
IG1vc3Qgb2YgdGhpcyBiZSBtb3ZlZCBpbnRvIENyYXNoTG9ncygpPwotICAgICAgICB0aW1lX2Zu
ID0gdGltZV9mbiBvciB0aW1lLnRpbWUKLSAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0
aW1lLnNsZWVwCi0gICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICBub3cgPSB0aW1lX2ZuKCkKLSAgICAgICAgIyBG
SVhNRTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2UncmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAu
Li4KLSAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycg
JSAobmFtZSwgc3RyKHBpZCkpKQotICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2Vs
Zi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKLSAgICAgICAgd2hpbGUgbm90IGNy
YXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jh
c2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBu
ZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0gICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgot
ICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5v
dCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0
YXJ0c3dpdGgoJ0VSUk9SJyldOgotICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKLSAgICAg
ICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkKLQotICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgot
ICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIsIE5vbmUpCi0gICAgICAgIHJldHVybiAoc3RkZXJy
LCBjcmFzaF9sb2cpCi0KICAgICBkZWYgc3RhcnRfaGVscGVyKHNlbGYsIHBpeGVsX3Rlc3RzPUZh
bHNlKToKICAgICAgICAgaGVscGVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2hlbHBlcigpCiAgICAg
ICAgIGlmIG5vdCBoZWxwZXJfcGF0aDoKQEAgLTIxOCw2ICsxODcsMTMgQEAgY2xhc3MgTWFjUG9y
dChBcHBsZVBvcnQpOgogICAgICAgICAgICAgICAgIGlmIGUuZXhpdF9jb2RlICE9IDE6CiAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIGUKIAorICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1h
bmQsIGZhbGxiYWNrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJy1maW5kJywgY29tbWFuZF0pLnJzdHJpcCgp
CisgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKKyAgICAgICAgICAgIF9sb2cud2FybigieGNy
dW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFsbGJhY2spCisgICAgICAgICAg
ICByZXR1cm4gZmFsbGJhY2sKKwogICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKICAgICAgICAg
aWYgc2VsZi5faGVscGVyOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU3RvcHBpbmcgTGF5b3V0
VGVzdEhlbHBlciIpCkBAIC0yMjksMTYgKzIwNSw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0
KToKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJJT0Vycm9yIHJhaXNlZCB3aGlsZSBzdG9w
cGluZyBoZWxwZXI6ICVzIiAlIHN0cihlKSkKICAgICAgICAgICAgIHNlbGYuX2hlbHBlciA9IE5v
bmUKIAotICAgIGRlZiBubV9jb21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1
bl9maW5kKCdubScsICdubScpCi0KLSAgICBkZWYgeGNydW5fZmluZChzZWxmLCBjb21tYW5kLCBm
YWxsYmFjayk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRp
dmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICctZmluZCcsIGNvbW1hbmRdKS5yc3RyaXAoKQotICAg
ICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Ci0gICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZh
aWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQotICAgICAgICAgICAgcmV0
dXJuIGZhbGxiYWNrCi0KICAgICBkZWYgbG9nZ2luZ19wYXR0ZXJuc190b19zdHJpcChzZWxmKToK
ICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgPHJkYXI6Ly9wcm9ibGVtLzE1NjA1
MDA3PiBpcyBmaXhlZAogICAgICAgICByZXR1cm4gWyhyZS5jb21waWxlKCcoQVZGfEdWQSkgaW5m
bzouKlxuJyksICcnKV0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNp
b24gMjA0NjExKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNDAzLDI4ICs0MDMsNiBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAg
ICAgICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jhc2hfbG9nCiAgICAgICAg
IHJldHVybiBjcmFzaF9sb2dzCiAKLSAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwg
dW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgICMgTm8gc2FtcGxp
bmcgb24gV2luZG93cy4KLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNl
bGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgICMgTm8gc2FtcGxpbmcgb24gV2luZG93cy4KLSAgICAg
ICAgcGFzcwotCi0gICAgZGVmIF9tYWtlX2xlYWtfZGV0ZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwg
cHJvY2Vzc19waWQpOgotICAgICAgICAjIE5vIGxlYWsgY2hlY2tpbmcgb24gV2luZG93cy4KLSAg
ICAgICAgcGFzcwotCi0gICAgZGVmIHByaW50X2xlYWtzX3N1bW1hcnkoc2VsZik6Ci0gICAgICAg
ICMgTm8gbGVhayBjaGVja2luZyBvbiBXaW5kb3dzLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYg
X3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCiAg
ICAgZGVmIGZpbmRfc3lzdGVtX3BpZChzZWxmLCBuYW1lLCBwaWQpOgogICAgICAgICBzeXN0ZW1f
cGlkID0gaW50KHBpZCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286786</attachid>
            <date>2016-08-23 15:07:48 -0700</date>
            <delta_ts>2016-09-19 10:08:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160709-20160823150550.patch</filename>
            <type>text/plain</type>
            <size>51883</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNDg2MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgzIEBACisyMDE2LTA4LTIzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIERhcndpbiBwb3J0cyBp
bnRvIGEgYmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBs
ZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKTogU3BlY2lmaWMgaU9TIHBvcnQgY2hlY2su
CisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOiBNb3ZlIGxlYWsgZGV0ZWN0b3IgdG8gRGFy
d2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVjdG9yKTogTW92ZWQg
dG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1l
b3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5jaGVja19mb3JfbGVha3Mp
OiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnByaW50X2xlYWtzX3N1
bW1hcnkpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9wYXRoX3Rv
X3dlYmNvcmVfbGlicmFyeSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBv
cnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAg
IChBcHBsZVBvcnQuX21lcmdlX2NyYXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAg
ICAgICAoQXBwbGVQb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTogTW92
ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQubG9va19mb3JfbmV3X2NyYXNo
X2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBsZV9w
cm9jZXNzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zYW1wbGVf
ZmlsZV9wYXRoKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5sb29r
X2Zvcl9uZXdfc2FtcGxlcyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnN1cHBvcnRzX3Blcl90ZXN0
X3RpbWVvdXQpOiBSZXR1cm4gdHJ1ZSBmb3IgYWxsIHBvcnRzLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6IEFkZGVkLgorICAgICAgICAoRGFyd2luUG9ydCk6IFNo
YXJlZCBpT1MgYW5kIE1hYyBmdW5jdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Rhcndpbl90ZXN0Y2FzZS5weTogQWRkZWQuCisgICAgICAgIChEYXJ3aW5UZXN0KTogU2hh
cmVkIGlPUyBhbmQgTWFjIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2VmbC5weToKKyAgICAgICAgKEVmbFBvcnQpOgorICAgICAgICAoRWZsUG9ydC5zdXBwb3J0c19w
ZXJfdGVzdF90aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAg
ICAgKEd0a1BvcnQpOgorICAgICAgICAoR3RrUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0
KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TUG9ydCk6CisgICAgICAgIChJT1NQb3J0Lm9wZXJhdGluZ19zeXN0ZW0p
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0
Ll9faW5pdF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3
aW5Qb3J0LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IERlbGV0
ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnhjcnVuX2ZpbmQpOiBEZWxldGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAoaW9zVGVzdCk6IFVuaXQgdGVzdHMgZm9yIHRoZSBpT1MgcG9ydC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAg
IChNYWNQb3J0Ll9faW5pdF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAo
TWFjUG9ydC5fcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3
aW5Qb3J0LgorICAgICAgICAoTWFjUG9ydC5tYWtlX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Q
b3J0LgorICAgICAgICAoTWFjUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIHRvIERhcndpblBv
cnQuCisgICAgICAgIChNYWNQb3J0Lm5tX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAg
IChNYWNUZXN0KToKKyAgICAgICAgKE1hY1Rlc3QudGVzdF9zZGtfbmFtZSk6IEFkZGVkIHRlc3Qu
CisgICAgICAgIChNYWNUZXN0LnRlc3RfeGNydW4pOiBBZGRlZCB0ZXN0LgorICAgICAgICAoTWFj
VGVzdC5hc3NlcnRfc2tpcHBlZF9maWxlX3NlYXJjaF9wYXRocyk6IE1vdmVkIHRvIERhcndpblRl
c3QuCisgICAgICAgIChNYWNUZXN0LnRlc3RfZGVmYXVsdF90aW1lb3V0X21zKTogTW92ZWQgdG8g
RGFyd2luVGVzdC4KKyAgICAgICAgKE1hY1Rlc3QuYXNzZXJ0X25hbWUpOiBNb3ZlZCB0byBEYXJ3
aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X2hlbHBlcl9zdGFydHMpOiBNb3ZlZCB0byBE
YXJ3aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X2hlbHBlcl9mYWlsc190b19zdGFydCk6
IE1vdmVkIHRvIERhcndpblRlc3QuCisgICAgICAgIChNYWNUZXN0LnRlc3RfaGVscGVyX2ZhaWxz
X3RvX3N0b3ApOiBNb3ZlZCB0byBEYXJ3aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X3Nw
aW5kdW1wKTogTW92ZWQgdG8gRGFyd2luVGVzdC4KKyAgICAgICAgKE1hY1Rlc3QudGVzdF9zYW1w
bGVfcHJvY2Vzcyk6IE1vdmVkIHRvIERhcndpblRlc3QuCisgICAgICAgIChNYWNUZXN0LnRlc3Rf
c2FtcGxlX3Byb2Nlc3NfZXhjZXB0aW9uKTogTW92ZWQgdG8gRGFyd2luVGVzdC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKFBvcnRU
ZXN0Q2FzZSk6CisgICAgICAgIChQb3J0VGVzdENhc2UudGVzdF9kaWZmX2ltYWdlKTogQWRkZWQg
aXNfc2ltdWxhdG9yIGZsYWcuCisgICAgICAgIChQb3J0VGVzdENhc2UudGVzdF9kaWZmX2ltYWdl
KTogU2tpcCB0ZXN0IGlmIG9uIGEgc2ltdWxhdG9yLgorICAgICAgICAoUG9ydFRlc3RDYXNlLnRl
c3RfZGlmZl9pbWFnZV9jcmFzaGVkKTogU2tpcCB0ZXN0IGlmIG9uIGEgc2ltdWxhdG9yLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0KToK
KyAgICAgICAgKFdpblBvcnQubG9va19mb3JfbmV3X3NhbXBsZXMpOiBVc2VkIGRlZmF1bHQsIEFw
cGxlUG9ydCBubyBsb25nZXIgaW1wbGVtZW50cy4KKyAgICAgICAgKFdpblBvcnQuc2FtcGxlX3By
b2Nlc3MpOiBEaXR0by4KKyAgICAgICAgKFdpblBvcnQuX21ha2VfbGVha19kZXRlY3Rvcik6IERp
dHRvLgorICAgICAgICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOiBEaXR0by4KKyAgICAgICAg
KFdpblBvcnQucHJpbnRfbGVha3Nfc3VtbWFyeSk6IERpdHRvLgorICAgICAgICAoV2luUG9ydC5f
cGF0aF90b193ZWJjb3JlX2xpYnJhcnkpOiBEaXR0by4KKwogMjAxNi0wOC0yMiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1dHRlcmZsaWVzIHNob3VsZCBiZSBh
bGxvY2F0ZWQgaW4gQXV4aWxpYXJ5IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2Ug
YW5kIHdlIHNob3VsZCByZXdyaXRlIGFzIG11Y2ggb2YgdGhlIEdDIGFzIG5lZWRlZCB0byBtYWtl
IHRoaXMgbm90IGEgcmVncmVzc2lvbgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBs
ZS5weQkocmV2aXNpb24gMjA0ODQyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Fw
cGxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBAIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQg
UG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlv
biBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KLWZyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0ZWN0
b3IgaW1wb3J0IExlYWtEZXRlY3RvcgogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKQEAgLTYxLDYgKzYwLDExIEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICBkZWYg
ZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToK
ICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgb3Ige30KICAgICAgICAgaWYgcG9ydF9uYW1lIGlu
IChjbHMucG9ydF9uYW1lLCBjbHMucG9ydF9uYW1lICsgJy13azInKToKKworICAgICAgICAgICAg
IyBTaW5jZSBJT1Mgc2ltdWxhdG9yIHJ1biBvbiBtYWMsIHRoZXkgbmVlZCBhIHNwZWNpYWwgY2hl
Y2sKKyAgICAgICAgICAgIGlmIGhvc3QucGxhdGZvcm0ub3NfbmFtZSA9PSAnbWFjJyBhbmQgJ2lv
cy1zaW11bGF0b3InIGluIHBvcnRfbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9ydF9u
YW1lCisKICAgICAgICAgICAgICMgSWYgdGhlIHBvcnRfbmFtZSBtYXRjaGVzIHRoZSAoYmFkbHkg
bmFtZWQpIGNscy5wb3J0X25hbWUsIHRoYXQKICAgICAgICAgICAgICMgbWVhbnMgdGhhdCB0aGV5
IHBhc3NlZCAnbWFjJyBvciAnd2luJyBhbmQgZGlkbid0IHNwZWNpZnkgYSB2ZXJzaW9uLgogICAg
ICAgICAgICAgIyBUaGF0IGNvbnZlbnRpb24gbWVhbnMgdGhhdCB3ZSdyZSBzdXBwb3NlZCB0byB1
c2UgdGhlIHZlcnNpb24gY3VycmVudGx5CkBAIC04OSwyMyArOTMsMTEgQEAgY2xhc3MgQXBwbGVQ
b3J0KFBvcnQpOgogICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUucmVwbGFjZSgnLXdrMics
ICcnKQogICAgICAgICBzZWxmLl92ZXJzaW9uID0gc2VsZi5fc3RyaXBfcG9ydF9uYW1lX3ByZWZp
eChwb3J0X25hbWUpCiAKLSAgICAgICAgc2VsZi5fbGVha19kZXRlY3RvciA9IHNlbGYuX21ha2Vf
bGVha19kZXRlY3RvcigpCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKToKLSAg
ICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgc2xvd3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVu
IG1vcmUgdGhhbiBhYm91dCAxMDAwIHRlc3RzIGluIGEgYmF0Y2gKLSAgICAgICAgICAgICMgd2l0
aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5hYmxlZC4KLSAgICAgICAgICAgIHNlbGYuc2V0X29wdGlv
bl9kZWZhdWx0KCJiYXRjaF9zaXplIiwgMTAwMCkKLQotICAgIGRlZiBfbWFrZV9sZWFrX2RldGVj
dG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gTGVha0RldGVjdG9yKHNlbGYpCi0KICAgICBkZWYg
ZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1
YXJkX21hbGxvYycpOgogICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKICAgICAgICAgcmV0
dXJuIHN1cGVyKEFwcGxlUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKIAotICAgIGRl
ZiBzdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQot
CiAgICAgZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1
ZQogCkBAIC0xMjksMTExICsxMjEsNiBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgICAg
ICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJz
aW9uPXNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKSwgYXJjaGl0ZWN0dXJl
PWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNv
bmZpZ3VyYXRpb25zCiAKLSAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpOgotICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycp
OgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBp
ZC4KLSAgICAgICAgc2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19u
YW1lLCBwcm9jZXNzX3BpZCkKLQotICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgot
ICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgotICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsg
ZGV0ZWN0b3Igd2lsbCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KLSAgICAg
ICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdh
eSB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KLSAgICAgICAg
IyBGSVhNRTogVGhpcyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVudCBy
dW5zIHVudGlsIHRoZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVhcmVkIQotICAgICAgICBsZWFr
c19maWxlcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNl
bGYucmVzdWx0c19kaXJlY3RvcnkoKSkKLSAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgotICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtz
ID0gc2VsZi5fbGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xlYWtz
KGxlYWtzX2ZpbGVzKQotICAgICAgICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3Iu
Y291bnRfdG90YWxfbGVha3MobGVha3NfZmlsZXMpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdG90
YWwgbGVha3MgZm91bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywgdG90YWxf
Ynl0ZXNfc3RyaW5nKSkKLSAgICAgICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91bmQu
IiAlIHVuaXF1ZV9sZWFrcykKLQotICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1ld29yay9W
ZXJzaW9ucy9BL1dlYkNvcmUnKQotCi0gICAgZGVmIHNob3dfcmVzdWx0c19odG1sX2ZpbGUoc2Vs
ZiwgcmVzdWx0c19maWxlbmFtZSk6Ci0gICAgICAgICMgV2UgZG9uJ3QgdXNlIHNlbGYuX3J1bl9z
Y3JpcHQoKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdGhlIHNjcmlwdAotICAg
ICAgICAjIHRvIGV4aXQgYW5kIHdlIHdhbnQgdGhlIG91dHB1dCB0byBzaG93IHVwIG9uIHN0ZG91
dCBpbiBjYXNlIHRoZXJlIGFyZSBlcnJvcnMKLSAgICAgICAgIyBsYXVuY2hpbmcgdGhlIGJyb3dz
ZXIuCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgn
cnVuLXNhZmFyaScpXSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyct
LW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKLSAgICAgICAg
ICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRl
cnI9ZmlsZShvcy5kZXZudWxsKSkKLQotICAgIGRlZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxmLCBs
b2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICBmb3IgdGVzdCwgY3Jh
c2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0iKVswXQotICAgICAgICAgICAg
ICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCi0gICAgICAgICAgICBleGNlcHQgSW5k
ZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IGFu
eShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50cnkg
aW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgotICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIG5l
dyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKLSAgICAgICAgICAgICAgICBsb2dzW3Rlc3Rd
ID0gY3Jhc2hfbG9nCi0gICAgICAgIHJldHVybiBsb2dzCi0KLSAgICBkZWYgX2xvb2tfZm9yX2Fs
bF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNyYXNo
X2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmlu
ZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0K
LSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZyk6Ci0gICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hl
ZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dzIGNh
biB0YWtlIGEgbG9uZyB0aW1lIHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMKLSAg
ICAgICAgICAgdW5kZXIgc3RyZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0aGUg
dGVzdCBydW4uCi0KLSAgICAgICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJvY2Vz
c19uYW1lIHR1cGxlIG9mIGNyYXNoZWQgcHJvY2VzcwotICAgICAgICAgICBzdGFydF90aW1lOiB0
aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gKLSAgICAg
ICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhhdCB0aW1lLgotICAgICAgICAiIiIKLSAgICAgICAgY3Jh
c2hfbG9ncyA9IHt9Ci0gICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkg
aW4gY3Jhc2hlZF9wcm9jZXNzZXM6Ci0gICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Igb3V0
cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNvCi0g
ICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhhdmUg
YWxyZWFkeSBjb2xsZWN0ZWQgaXQuCi0gICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9nZXRf
Y3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3YWl0
X2Zvcl9sb2c9RmFsc2UpWzFdCi0gICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBj
cmFzaF9sb2cKLSAgICAgICAgYWxsX2NyYXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2FsbF9jcmFz
aF9sb2dzX2luX2xvZ19kaXIoc3RhcnRfdGltZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX21lcmdl
X2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywgYWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9jZXNzZXMp
Ci0KLSAgICBkZWYgc2FtcGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToKLSAgICAgICAgaGFu
Z19yZXBvcnQgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKQotICAgICAgICBleGl0
X3N0YXR1cyA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAiL3Vz
ci9iaW4vc3VkbyIsCi0gICAgICAgICAgICAiLW4iLAotICAgICAgICAgICAgIi91c3Ivc2Jpbi9z
cGluZHVtcCIsCi0gICAgICAgICAgICBwaWQsCi0gICAgICAgICAgICAxMCwKLSAgICAgICAgICAg
IDEwLAotICAgICAgICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgIGhhbmdfcmVwb3J0LAotICAg
ICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCi0gICAgICAgIGlmIGV4aXRfc3RhdHVzOgot
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbCi0gICAgICAgICAgICAgICAgICAgICIvdXNyL2Jpbi9zYW1wbGUiLAotICAgICAgICAg
ICAgICAgICAgICBwaWQsCi0gICAgICAgICAgICAgICAgICAgIDEwLAotICAgICAgICAgICAgICAg
ICAgICAxMCwKLSAgICAgICAgICAgICAgICAgICAgIi1maWxlIiwKLSAgICAgICAgICAgICAgICAg
ICAgaGFuZ19yZXBvcnQsCi0gICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICAgIGV4Y2VwdCBT
Y3JpcHRFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRv
IHNhbXBsZSBwcm9jZXNzOicgKyBzdHIoZSkpCi0KLSAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChz
ZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUs
IHBpZCkpCi0KLSAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZl
X3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIHNhbXBsZV9maWxlcyA9IHt9Ci0gICAg
ICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZlX3By
b2Nlc3NlczoKLSAgICAgICAgICAgIHNhbXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRo
KHByb2Nlc3NfbmFtZSwgcGlkKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
aXNmaWxlKHNhbXBsZV9maWxlKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFtZV0gPSBzYW1wbGVfZmlsZQotICAgICAgICByZXR1cm4g
c2FtcGxlX2ZpbGVzCi0KICAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgogICAgICAgICBi
aW5hcnlfbmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwogICAgICAgICByZXR1cm4gc2VsZi5fYnVp
bGRfcGF0aChiaW5hcnlfbmFtZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
CShyZXZpc2lvbiAyMDQ4NDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTUzLDkgKzE1Myw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToK
ICAgICAgICAgcmV0dXJuIFtdCiAKICAgICBkZWYgc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChz
ZWxmKToKLSAgICAgICAgIyBGSVhNRTogTWFrZSBwZXItdGVzdCB0aW1lb3V0cyB1bmNvbmRpdGlv
bmFsIG9uY2UgYWxsIHBvcnRzJyBEdW1wUmVuZGVyVHJlZXMgc3VwcG9ydCB0aGF0LgotICAgICAg
ICAjIFdpbmRvd3MgRHVtcFJlbmRlclRyZWUgbWF5IGJlIHRoZSBvbmx5IG9uZSByZW1haW5pbmcg
dG8gYmUgZml4ZWQgYXQgdGhpcyB0aW1lLgotICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
cmV0dXJuIFRydWUKIAogICAgIGRlZiBkZWZhdWx0X3BpeGVsX3Rlc3RzKHNlbGYpOgogICAgICAg
ICAjIEZJWE1FOiBEaXNhYmxlIHVudGlsIHRoZXkgYXJlIHJ1biBieSBkZWZhdWx0IG9uIGJ1aWxk
LndlYmtpdC5vcmcuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1l
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9n
cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJy
b3IKK2Zyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBvcnQgQXBwbGVQb3J0Citmcm9tIHdlYmtp
dHB5LnBvcnQubGVha2RldGVjdG9yIGltcG9ydCBMZWFrRGV0ZWN0b3IKKworCitfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQp
OgorCisgICAgU0RLID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRf
bmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBBcHBsZVBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwg
cG9ydF9uYW1lLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLl9sZWFrX2RldGVjdG9yID0gTGVh
a0RldGVjdG9yKHNlbGYpCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigibGVha3MiKToKKyAg
ICAgICAgICAgICMgRHVtcFJlbmRlclRyZWUgc2xvd3MgZG93biBub3RpY2FibHkgaWYgd2UgcnVu
IG1vcmUgdGhhbiBhYm91dCAxMDAwIHRlc3RzIGluIGEgYmF0Y2gKKyAgICAgICAgICAgICMgd2l0
aCBNYWxsb2NTdGFja0xvZ2dpbmcgZW5hYmxlZC4KKyAgICAgICAgICAgIHNlbGYuc2V0X29wdGlv
bl9kZWZhdWx0KCJiYXRjaF9zaXplIiwgMTAwMCkKKworICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRf
bXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6Cisg
ICAgICAgICAgICByZXR1cm4gMzUwICogMTAwMAorICAgICAgICByZXR1cm4gc3VwZXIoRGFyd2lu
UG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKKworICAgIGRlZiBfcG9ydF9zcGVjaWZp
Y19leHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHJldmVyc2Vk
KFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdU
ZXN0RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkp
CisKKyAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19w
aWQpOgorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICMgV2UgY291bGQgdXNlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9wc3V0aWwvIHRvIGdldCB0aGUgcHJvY2Vzc19uYW1lIGZyb20gdGhlIHBpZC4KKyAgICAgICAg
c2VsZi5fbGVha19kZXRlY3Rvci5jaGVja19mb3JfbGVha3MocHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCkKKworICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
ICMgV2UncmUgaW4gdGhlIG1hbmFnZXIgcHJvY2Vzcywgc28gdGhlIGxlYWsgZGV0ZWN0b3Igd2ls
bCBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgbGVhayBmaWxlcy4KKyAgICAgICAgIyBGSVhNRTog
VGhpcyBpcyBhIGhhY2ssIGJ1dCB3ZSBkb24ndCBoYXZlIGEgYmV0dGVyIHdheSB0byBnZXQgdGhp
cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JrZXJzIHlldC4KKyAgICAgICAgIyBGSVhNRTogVGhp
cyB3aWxsIGluY2x1ZGUgdG9vIG1hbnkgbGVha3MgaW4gc3Vic2VxdWVudCBydW5zIHVudGlsIHRo
ZSByZXN1bHRzIGRpcmVjdG9yeSBpcyBjbGVhcmVkIQorICAgICAgICBsZWFrc19maWxlcyA9IHNl
bGYuX2xlYWtfZGV0ZWN0b3IubGVha3NfZmlsZXNfaW5fZGlyZWN0b3J5KHNlbGYucmVzdWx0c19k
aXJlY3RvcnkoKSkKKyAgICAgICAgaWYgbm90IGxlYWtzX2ZpbGVzOgorICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHRvdGFsX2J5dGVzX3N0cmluZywgdW5pcXVlX2xlYWtzID0gc2VsZi5fbGVh
a19kZXRlY3Rvci5jb3VudF90b3RhbF9ieXRlc19hbmRfdW5pcXVlX2xlYWtzKGxlYWtzX2ZpbGVz
KQorICAgICAgICB0b3RhbF9sZWFrcyA9IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxf
bGVha3MobGVha3NfZmlsZXMpCisgICAgICAgIF9sb2cuaW5mbygiJXMgdG90YWwgbGVha3MgZm91
bmQgZm9yIGEgdG90YWwgb2YgJXMuIiAlICh0b3RhbF9sZWFrcywgdG90YWxfYnl0ZXNfc3RyaW5n
KSkKKyAgICAgICAgX2xvZy5pbmZvKCIlcyB1bmlxdWUgbGVha3MgZm91bmQuIiAlIHVuaXF1ZV9s
ZWFrcykKKworICAgIGRlZiBfcGF0aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdXZWJDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1dl
YkNvcmUnKQorCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9m
b3JfbG9nPVRydWUpOgorICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBh
bmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQorICAgICAgICAjIFJlcG9ydENyYXNo
IHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0
aGVyZSBhcmUKKyAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9u
LgorICAgICAgICAjIEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jh
c2hMb2dzKCk/CisgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAg
ICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKKyAgICAgICAgY3Jhc2hfbG9nID0g
JycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5v
dyA9IHRpbWVfZm4oKQorICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBz
dXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4uLgorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5n
IGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGRl
YWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nlcycs
IDEpKQorICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Cisg
ICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBw
aWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKKyAgICAgICAg
ICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5z
cGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06CisgICAgICAgICAg
ICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorCisg
ICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9u
ZSkKKyAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKKworICAgIGRlZiBfbWVyZ2Vf
Y3Jhc2hfbG9ncyhzZWxmLCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAg
ICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IHRlc3Quc3BsaXQoIi0i
KVswXQorICAgICAgICAgICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCisgICAg
ICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAg
ICAgICAgICAgaWYgbm90IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJd
ID09IHBpZCBmb3IgZW50cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICAgICAgICAg
ICMgaWYgdGhpcyBpcyBhIG5ldyBjcmFzaCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKKyAgICAgICAg
ICAgICAgICBsb2dzW3Rlc3RdID0gY3Jhc2hfbG9nCisgICAgICAgIHJldHVybiBsb2dzCisKKyAg
ICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhh
bik6CisgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIHJl
dHVybiBjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90
aGFuPW5ld2VyX3RoYW4pCisKKyAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwg
Y3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgorICAgICAgICAiIiJTaW5jZSBjcmFzaCBs
b2dzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0g
aXMKKyAgICAgICAgICAgdW5kZXIgc3RyZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBv
ZiB0aGUgdGVzdCBydW4uCisKKyAgICAgICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwg
cHJvY2Vzc19uYW1lIHR1cGxlIG9mIGNyYXNoZWQgcHJvY2VzcworICAgICAgICAgICBzdGFydF90
aW1lOiB0aW1lIHRoZSB0ZXN0cyBzdGFydGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gK
KyAgICAgICAgICAgICAgIGxvZ3MgYWZ0ZXIgdGhhdCB0aW1lLgorICAgICAgICAiIiIKKyAgICAg
ICAgY3Jhc2hfbG9ncyA9IHt9CisgICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUs
IHBpZCkgaW4gY3Jhc2hlZF9wcm9jZXNzZXM6CisgICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBm
b3Igb3V0cHV0LiAgVGhpcyBpcyBhIHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVk
IHNvCisgICAgICAgICAgICAjIGlmIHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxk
IGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgaXQuCisgICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxm
Ll9nZXRfY3Jhc2hfbG9nKHByb2Nlc3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1l
LCB3YWl0X2Zvcl9sb2c9RmFsc2UpWzFdCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFt
ZV0gPSBjcmFzaF9sb2cKKyAgICAgICAgYWxsX2NyYXNoX2xvZyA9IHNlbGYuX2xvb2tfZm9yX2Fs
bF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc3RhcnRfdGltZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
X21lcmdlX2NyYXNoX2xvZ3MoY3Jhc2hfbG9ncywgYWxsX2NyYXNoX2xvZywgY3Jhc2hlZF9wcm9j
ZXNzZXMpCisKKyAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZl
X3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgIHNhbXBsZV9maWxlcyA9IHt9CisgICAg
ICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZlX3By
b2Nlc3NlczoKKyAgICAgICAgICAgIHNhbXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRo
KHByb2Nlc3NfbmFtZSwgcGlkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
aXNmaWxlKHNhbXBsZV9maWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFtZV0gPSBzYW1wbGVfZmlsZQorICAgICAgICByZXR1cm4g
c2FtcGxlX2ZpbGVzCisKKyAgICBkZWYgc2FtcGxlX3Byb2Nlc3Moc2VsZiwgbmFtZSwgcGlkKToK
KyAgICAgICAgaGFuZ19yZXBvcnQgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKQor
ICAgICAgICBleGl0X3N0YXR1cyA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAg
ICAgICAgICAiL3Vzci9iaW4vc3VkbyIsCisgICAgICAgICAgICAiLW4iLAorICAgICAgICAgICAg
Ii91c3Ivc2Jpbi9zcGluZHVtcCIsCisgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICAxMCwK
KyAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgIi1maWxlIiwKKyAgICAgICAgICAgIGhhbmdf
cmVwb3J0LAorICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisgICAgICAgIGlmIGV4
aXRfc3RhdHVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1
dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAgICAgICAgICIvdXNyL2Jpbi9zYW1wbGUi
LAorICAgICAgICAgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICAgICAgICAgIDEwLAorICAg
ICAgICAgICAgICAgICAgICAxMCwKKyAgICAgICAgICAgICAgICAgICAgIi1maWxlIiwKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZ19yZXBvcnQsCisgICAgICAgICAgICAgICAgXSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIF9sb2cud2Fybmlu
ZygnVW5hYmxlIHRvIHNhbXBsZSBwcm9jZXNzOicgKyBzdHIoZSkpCisKKyAgICBkZWYgc2hvd19y
ZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKKyAgICAgICAgIyBXZSBk
b24ndCB1c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byB3YWl0
IGZvciB0aGUgc2NyaXB0CisgICAgICAgICMgdG8gZXhpdCBhbmQgd2Ugd2FudCB0aGUgb3V0cHV0
IHRvIHNob3cgdXAgb24gc3Rkb3V0IGluIGNhc2UgdGhlcmUgYXJlIGVycm9ycworICAgICAgICAj
IGxhdW5jaGluZyB0aGUgYnJvd3Nlci4KKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBvcGVuKFtz
ZWxmLnBhdGhfdG9fc2NyaXB0KCdydW4tc2FmYXJpJyldICsgc2VsZi5fYXJndW1lbnRzX2Zvcl9j
b25maWd1cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQtc3RhdGUnLCAnLU5TT3BlbicsIHJlc3VsdHNf
ZmlsZW5hbWVdLAorICAgICAgICAgICAgY3dkPXNlbGYud2Via2l0X2Jhc2UoKSwgc3Rkb3V0PWZp
bGUob3MuZGV2bnVsbCksIHN0ZGVycj1maWxlKG9zLmRldm51bGwpKQorCisgICAgZGVmIHNhbXBs
ZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQi
LmZvcm1hdChuYW1lLCBwaWQpKQorCisgICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKKworICAg
IGRlZiBubV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdu
bScsICdubScpCisKKyAgICBkZWYgeGNydW5fZmluZChzZWxmLCBjb21tYW5kLCBmYWxsYmFjaz1O
b25lKToKKyAgICAgICAgZmFsbGJhY2sgPSBmYWxsYmFjayBvciBjb21tYW5kCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1
bicsICctLXNkaycsIHNlbGYuU0RLLCAnLWZpbmQnLCBjb21tYW5kXSkucnN0cmlwKCkKKyAgICAg
ICAgZXhjZXB0IFNjcmlwdEVycm9yOgorICAgICAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWls
ZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVy
biBmYWxsYmFjawpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0
Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
X3Rlc3RjYXNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5m
aWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRw
eS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucworZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZl
MiwgTW9ja1Byb2Nlc3MsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
c3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAorCisKK2NsYXNzIERhcndpblRl
c3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydF9za2lwcGVk
X2ZpbGVfc2VhcmNoX3BhdGhzKHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcGF0aHMsIHVzZV93
ZWJraXQyPUZhbHNlKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1w
b3J0X25hbWUsIG9wdGlvbnM9TW9ja09wdGlvbnMod2Via2l0X3Rlc3RfcnVubmVyPXVzZV93ZWJr
aXQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9za2lwcGVkX2ZpbGVfc2VhcmNo
X3BhdGhzKCksIGV4cGVjdGVkX3BhdGhzKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF90aW1lb3V0
X21zKHNlbGYpOgorICAgICAgICBzdXBlcihEYXJ3aW5UZXN0LCBzZWxmKS50ZXN0X2RlZmF1bHRf
dGltZW91dF9tcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQob3B0
aW9ucz1Nb2NrT3B0aW9ucyhndWFyZF9tYWxsb2M9VHJ1ZSkpLmRlZmF1bHRfdGltZW91dF9tcygp
LCAzNTAwMDApCisKKyAgICBkZWYgYXNzZXJ0X25hbWUoc2VsZiwgcG9ydF9uYW1lLCBvc192ZXJz
aW9uX3N0cmluZywgZXhwZWN0ZWQpOgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3Qob3Nf
bmFtZT1zZWxmLm9zX25hbWUsIG9zX3ZlcnNpb249b3NfdmVyc2lvbl9zdHJpbmcpCisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHBvcnQubmFtZSgpKQorCisgICAgZGVm
IHRlc3Rfc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KCkKKyAgICAgICAgIyBEZWxheSBzZXR0aW5nIGEgc2hvdWxkX2xvZyBleGVjdXRp
dmUgdG8gYXZvaWQgbG9nZ2luZyBmcm9tIE1hY1BvcnQuX19pbml0X18uCisgICAgICAgIHBvcnQu
X2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUoc2hvdWxkX2xvZz1UcnVlKQorICAgICAgICBleHBl
Y3RlZF9sb2dzID0gIk1PQ0sgcG9wZW46IFsnVG9vbHMvU2NyaXB0cy9ydW4tc2FmYXJpJywgJy0t
cmVsZWFzZScsICctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCAndGVzdC5odG1sJ10sIGN3
ZD0vbW9jay1jaGVja291dFxuIgorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgcG9ydC5zaG93X3Jlc3VsdHNfaHRtbF9maWxlLCBbInRlc3QuaHRtbCJdLCBleHBl
Y3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCisKKyAgICBkZWYgdGVzdF9oZWxwZXJfc3RhcnRzKHNl
bGYpOgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQorICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoaG9zdCkKKyAgICAgICAgb2MgPSBPdXRwdXRDYXB0
dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBob3N0LmV4ZWN1dGl2
ZS5fcHJvYyA9IE1vY2tQcm9jZXNzKCdyZWFkeVxuJykKKyAgICAgICAgcG9ydC5zdGFydF9oZWxw
ZXIoKQorICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKKyAgICAgICAgb2MucmVzdG9yZV9vdXRw
dXQoKQorCisgICAgICAgICMgbWFrZSBzdXJlIHRyeWluZyB0byBzdG9wIHRoZSBoZWxwZXIgdHdp
Y2UgaXMgc2FmZS4KKyAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCisKKyAgICBkZWYgdGVzdF9o
ZWxwZXJfZmFpbHNfdG9fc3RhcnQoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9z
dChNb2NrRXhlY3V0aXZlKCkpCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQor
ICAgICAgICBvYyA9IE91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgp
CisgICAgICAgIHBvcnQuc3RhcnRfaGVscGVyKCkKKyAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigp
CisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X2hlbHBlcl9mYWls
c190b19zdG9wKHNlbGYpOgorICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1
dGl2ZSgpKQorICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1vY2tQcm9jZXNzKCkKKwor
ICAgICAgICBkZWYgYmFkX3dhaXRlcigpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmFp
bGVkIHRvIHdhaXQnKQorICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYy53YWl0ID0gYmFkX3dh
aXRlcgorCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQorICAgICAgICBvYyA9
IE91dHB1dENhcHR1cmUoKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHBv
cnQuc3RhcnRfaGVscGVyKCkKKyAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCisgICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKKworICAgIGRlZiB0ZXN0X3NwaW5kdW1wKHNlbGYpOgorCisgICAg
ICAgIGRlZiBsb2dnaW5nX3J1bl9jb21tYW5kKGFyZ3MpOgorICAgICAgICAgICAgcHJpbnQgYXJn
cworCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQuX2V4ZWN1
dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPWxvZ2dpbmdfcnVuX2NvbW1hbmQp
CisgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJy91c3IvYmluL3N1ZG8nLCAnLW4nLCAnL3Vz
ci9zYmluL3NwaW5kdW1wJywgNDIsIDEwLCAxMCwgJy1maWxlJywgJy9tb2NrLWJ1aWxkL2xheW91
dC10ZXN0LXJlc3VsdHMvdGVzdC00Mi1zYW1wbGUudHh0J11cbiIKKyAgICAgICAgT3V0cHV0Q2Fw
dHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0
ZXN0JywgNDJdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgZGVmIHRl
c3Rfc2FtcGxlX3Byb2Nlc3Moc2VsZik6CisKKyAgICAgICAgZGVmIGxvZ2dpbmdfcnVuX2NvbW1h
bmQoYXJncyk6CisgICAgICAgICAgICBpZiBhcmdzWzBdID09ICcvdXNyL2Jpbi9zdWRvJzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgcHJpbnQgYXJncworICAgICAgICAg
ICAgcmV0dXJuIDAKKworICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBw
b3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj1sb2dnaW5nX3J1
bl9jb21tYW5kKQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWycvdXNyL2Jpbi9zYW1wbGUn
LCA0MiwgMTAsIDEwLCAnLWZpbGUnLCAnL21vY2stYnVpbGQvbGF5b3V0LXRlc3QtcmVzdWx0cy90
ZXN0LTQyLXNhbXBsZS50eHQnXVxuIgorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291
dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0sIGV4cGVj
dGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9zYW1wbGVfcHJvY2Vz
c19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5fY29tbWFuZChhcmdz
KToKKyAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gJy91c3IvYmluL3N1ZG8nOgorICAgICAgICAg
ICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiTU9DSyBzY3Jp
cHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBv
cnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1
bl9jb21tYW5kKQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwg
cG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0pCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZWZsLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9lZmwucHkJKHJldmlzaW9uIDIwNDg0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9lZmwucHkJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDYgQEAgY2xhc3Mg
RWZsUG9ydChQb3J0KToKIAogICAgICAgICByZXR1cm4gZW52CiAKLSAgICBkZWYgc3VwcG9ydHNf
cGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBk
ZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6CiAgICAgICAgICMgVGVzdHMgcnVuIGNvbnNpZGVyYWJs
eSBzbG93ZXIgdW5kZXIgZ2RiCiAgICAgICAgICMgb3IgdmFsZ3JpbmQuCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIwNDg0MikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDYgQEAgY2xh
c3MgR3RrUG9ydChQb3J0KToKICAgICAgICAgICAgIHJldHVybiBYb3JnRHJpdmVyCiAgICAgICAg
IHJldHVybiBYdmZiRHJpdmVyCiAKLSAgICBkZWYgc3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChz
ZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMo
c2VsZik6CiAgICAgICAgICMgU3RhcnRpbmcgYW4gYXBwbGljYXRpb24gdW5kZXIgVmFsZ3JpbmQg
dGFrZXMgYSBsb3QgbG9uZ2VyIHRoYW4gbm9ybWFsCiAgICAgICAgICMgc28gaW5jcmVhc2UgdGhl
IHRpbWVvdXQgKGVtcGlyaWNhbGx5IDEweCBpcyBlbm91Z2ggdG8gYXZvaWQgdGltZW91dHMpLgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMDQ4NDIpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwy
MCArMjksMTkgQEAgaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24K
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2VfZGlmZgotZnJvbSB3ZWJraXRweS5wb3J0
LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKLWZyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9ydCBQ
b3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiBmcm9tIHdl
YmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VU
eXBlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExv
Z3MKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgSU9T
UG9ydChBcHBsZVBvcnQpOgorY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25h
bWUgPSAiaW9zIgogCiAgICAgQVJDSElURUNUVVJFUyA9IFsnYXJtdjcnLCAnYXJtdjdzJywgJ2Fy
bTY0J10KQEAgLTY3LDcgKzY2LDcgQEAgY2xhc3MgSU9TUG9ydChBcHBsZVBvcnQpOgogICAgICAg
ICByZXR1cm4gJ2lvcycKIAogCi1jbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6Citj
bGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3Mt
c2ltdWxhdG9yIgogCiAgICAgRlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwpAQCAtNzYsNiArNzUs
NyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6CiAKICAgICBERUZBVUxUX0RF
VklDRV9DTEFTUyA9ICdpcGhvbmUnCiAgICAgQ1VTVE9NX0RFVklDRV9DTEFTU0VTID0gWydpcGFk
J10KKyAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9J
RCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwogICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0
VGVzdFJlbGF5JwpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxl
UG9ydCk6CiAgICAgfQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwg
Kiprd2FyZ3MpOgotICAgICAgICBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRf
Xyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9f
KHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxfZGV2
aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQogICAgICAgICBzZWxm
Ll9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCkBAIC0yMjgsOSArMjI4LDYgQEAgY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogCiAgICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Vi
a2l0X2Jhc2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQogCi0gICAgZGVmIF9wb3J0X3NwZWNp
ZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJz
ZWQoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwg
J1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCld
KSkKLQogICAgIGRlZiBfc2V0X2RldmljZV9jbGFzcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgogICAg
ICAgICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBkZXZpY2VfY2xhc3MgaWYgZGV2aWNlX2NsYXNzIGVs
c2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9DTEFTUwogCkBAIC0zNDMsNDQgKzM0MCw2IEBAIGNsYXNz
IElPU1NpbXVsYXRvclBvcnQoQXBwbGVQb3J0KToKIAogICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVH
RVggPSByZS5jb21waWxlKCcjQ1JBU0hFRCAtICg/UDxzdWJwcm9jZXNzX25hbWU+XFMrKSBcKHBp
ZCAoP1A8c3VicHJvY2Vzc19waWQ+XGQrKVwpJykKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWUu
dGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICB0
aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKLSAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9m
biBvciB0aW1lLnNsZWVwCi0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGNvbGxlY3QgdGhl
IGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBiZWNhdXNlIGl0IGluY2x1
ZGVzIG1vcmUKLSAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNlcHRpb24gY29kZXMpIHRo
YW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVuIHRvIHN0YW5kYXJkIGVy
cm9yLgotICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQotICAgICAgICBjcmFzaGVkX3N1YnByb2Nl
c3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRlclRyZWUuYXBwJywgMTIz
NCkKLSAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3BsaXRsaW5lcygpOgotICAg
ICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6Ci0gICAgICAg
ICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVHRVgubWF0Y2gobGluZSkK
LSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19uYW1lJyks
IGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlCi0gICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5kKGxpbmUpCi0KLSAgICAg
ICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMF0s
IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwKLSAgICAgICAgICAg
ICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBf
Zm4sIHdhaXRfZm9yX2xvZykKLQotICAgICAgICAjIExheW91dFRlc3RSZWxheSBjcmFzaGVkCi0g
ICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5h
bWUsIHN0cihwaWQpKSkKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAgICAg
ICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNz
ZXMnLCAxKSkKLSAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5l
OgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFt
ZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0gICAg
ICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAg
ICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9s
b2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgotICAgICAg
ICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKLSAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkK
LQotICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwg
Tm9uZQotICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKLQogICAgIGRlZiBfY3JlYXRl
X2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmNyZWF0ZV9k
ZXZpY2UobnVtYmVyLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLCBzZWxmLnNpbXVsYXRv
cl9ydW50aW1lKQogCkBAIC00MTksMTQgKzM3OCw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQo
QXBwbGVQb3J0KToKICAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNl
bGYueGNydW5fZmluZCgnbm0nKQogCi0gICAgZGVmIHhjcnVuX2ZpbmQoc2VsZiwgY29tbWFuZCwg
ZmFsbGJhY2s9Tm9uZSk6Ci0gICAgICAgIGZhbGxiYWNrID0gZmFsbGJhY2sgb3IgY29tbWFuZAot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsneGNydW4nLCAnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy1maW5kJywgY29tbWFu
ZF0pLnJzdHJpcCgpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKLSAgICAgICAgICAgIF9s
b2cud2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFsbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKLQogICAgIEBwcm9wZXJ0eQogICAgIEBtZW1v
aXplZAogICAgIGRlZiBkZXZlbG9wZXJfZGlyKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Zyb20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKK2Zyb20gd2Vi
a2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20g
d2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4
ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKKworCitjbGFzcyBp
b3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKKyAgICBvc19uYW1lID0gJ2lvcy1z
aW11bGF0b3InCisgICAgb3NfdmVyc2lvbiA9ICcnCisgICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11
bGF0b3InCisgICAgcG9ydF9tYWtlciA9IElPU1NpbXVsYXRvclBvcnQKKyAgICBpc19zaW11bGF0
b3IgPSBUcnVlCisKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1l
PU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dh
cmdzKToKKyAgICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0
PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19u
YW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydC5z
ZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQorICAgICAgICByZXR1cm4gcG9ydAorCisg
ICAgZGVmIHRlc3Rfc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlbGYpOgorICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhsZWFrcz1UcnVlLCBndWFyZF9t
YWxsb2M9VHJ1ZSkpCisgICAgICAgIGVudiA9IHBvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVy
KHBvcnQuZHJpdmVyX25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZbJ01hbGxv
Y1N0YWNrTG9nZ2luZyddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydNYWxs
b2NTY3JpYmJsZSddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52WydEWUxEX0lO
U0VSVF9MSUJSQVJJRVMnXSwgJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQorCisgICAgZGVm
IHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
aW9zLXNpbXVsYXRvcicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQorCisg
ICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKKyAgICAgICAgIyBNYWMgY3Jhc2ggbG9n
cyBhcmUgdGVzdGVkIGVsc2V3aGVyZSwgc28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24n
dCBjcmFzaC4KKyAgICAgICAgZGVmIGZha2VfdGltZV9jYigpOgorICAgICAgICAgICAgdGltZXMg
PSBbMCwgMjAsIDQwXQorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCisg
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQor
ICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsICcnLCAn
JywgMCwKKyAgICAgICAgICAgIHRpbWVfZm49ZmFrZV90aW1lX2NiKCksIHNsZWVwX2ZuPWxhbWJk
YSBkZWxheTogTm9uZSkKKworICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYpOgorICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhhcmNoaXRlY3R1cmU9J3g4Nicp
KQorCisgICAgICAgIGRlZiBydW5fc2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6
CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKyAgICAgICAgcG9ydC5fcnVuX3Njcmlw
dCA9IHJ1bl9zY3JpcHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVy
ZSgpLCAneDg2JykKKyAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisKKyAgICBkZWYgdGVz
dF82NGJpdChzZWxmKToKKyAgICAgICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkgZGVm
YXVsdAorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODZfNjQnKQorCisgICAgICAgIGRlZiBydW5f
c2NyaXB0KHNjcmlwdCwgYXJncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmFy
Z3MgPSBhcmdzCisKKyAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKKyAgICAg
ICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFy
Z3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisKKyAgICBkZWYgdGVzdF9zZGtfbmFtZShzZWxmKToK
KyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChwb3J0LlNESywgJ2lwaG9uZXNpbXVsYXRvcicpCisKKyAgICBkZWYgdGVzdF94Y3J1bihzZWxm
KToKKyAgICAgICAgZGVmIHRocm93aW5nX3J1bl9jb21tYW5kKGFyZ3MpOgorICAgICAgICAgICAg
cHJpbnQgYXJncworICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk1PQ0sgc2NyaXB0IGVy
cm9yIikKKworICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBwb3J0Ll9l
eGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29t
bWFuZCkKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAnLS1zZGsnLCAnaXBo
b25lc2ltdWxhdG9yJywgJy1maW5kJywgJ3Rlc3QnXVxuIgorICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdzPVsndGVzdCcsICdm
YWxsaW5nJ10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHkJKHJldmlzaW9uIDIwNDg0MikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDIyICszNCwyMyBAQCBp
bXBvcnQgcmUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQg
Q3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBT
Y3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKK2Zy
b20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKIAogX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKK2Ns
YXNzIE1hY1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gIm1hYyIKIAogICAgIFZF
UlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ21hYy1zbm93bGVvcGFyZCcsICdtYWMtbGlvbicsICdt
YWMtbW91bnRhaW5saW9uJywgJ21hYy1tYXZlcmlja3MnLCAnbWFjLXlvc2VtaXRlJywgJ21hYy1l
bGNhcGl0YW4nLCAnbWFjLXNpZXJyYSddCisgICAgU0RLID0gJ21hY29zeCcKIAogICAgIEFSQ0hJ
VEVDVFVSRVMgPSBbJ3g4Nl82NCcsICd4ODYnXQogCiAgICAgREVGQVVMVF9BUkNISVRFQ1RVUkUg
PSAneDg2XzY0JwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKipr
d2FyZ3MpOgotICAgICAgICBzdXBlcihNYWNQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKQorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3Qs
IHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxm
KToKICAgICAgICAgcmV0dXJuIFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkg
PT0gJ3g4NicgZWxzZSBbXQpAQCAtNjYsOSArNjcsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9y
dCk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCks
ICd3azInXSArIGZhbGxiYWNrX25hbWVzCiAgICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQogCi0gICAgZGVmIF9wb3J0X3NwZWNpZmlj
X2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQo
W3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rl
c3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkK
LQogICAgIGRlZiBjb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3Moc2VsZik6CiAgICAgICAg
IHJldHVybiB7CiAgICAgICAgICAgICAic2llcnJhKyI6IFsic2llcnJhIiwgImZ1dHVyZSJdLApA
QCAtMTUyLDkgKzE1MCw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAg
IHN1cHBvcnRhYmxlX2luc3RhbmNlcyA9IGRlZmF1bHRfY291bnQKICAgICAgICAgcmV0dXJuIG1p
bihzdXBwb3J0YWJsZV9pbnN0YW5jZXMsIGRlZmF1bHRfY291bnQpCiAKLSAgICBkZWYgbWFrZV9j
b21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91
c3IvYmluL21ha2UnKQotCiAgICAgZGVmIF9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydChzZWxmKToK
ICAgICAgICAgIyBGSVhNRTogVGhpcyBpcyB1bnVzZWQuIFJlbW92ZS4KICAgICAgICAgamF2YV90
ZXN0c19wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2Rpcigp
LCAiamF2YSIpCkBAIC0xNjcsMzEgKzE2Miw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToK
ICAgICBkZWYgX2NoZWNrX3BvcnRfYnVpbGQoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2Vs
Zi5nZXRfb3B0aW9uKCdqYXZhJykgb3Igc2VsZi5fYnVpbGRfamF2YV90ZXN0X3N1cHBvcnQoKQog
Ci0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRy
dWUpOgotICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwg
c2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQotICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRv
IGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUK
LSAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgotICAgICAg
ICAjIEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/
Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQotICAgICAgICBzbGVlcF9m
biA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAg
ICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVf
Zm4oKQotICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMg
Y29kZSBpcyB3b3JraW5nIC4uLgotICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFz
aCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCi0gICAgICAgIGRlYWRsaW5lID0g
bm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAg
ICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAg
ICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1
ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5v
dCB3YWl0X2Zvcl9sb2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5v
dCBjcmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVz
KCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xl
ZXBfZm4oMC4xKQotICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlm
IG5vdCBjcmFzaF9sb2c6Ci0gICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLSAgICAg
ICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKLQogICAgIGRlZiBzdGFydF9oZWxwZXIoc2Vs
ZiwgcGl4ZWxfdGVzdHM9RmFsc2UpOgogICAgICAgICBoZWxwZXJfcGF0aCA9IHNlbGYuX3BhdGhf
dG9faGVscGVyKCkKICAgICAgICAgaWYgbm90IGhlbHBlcl9wYXRoOgpAQCAtMjI5LDE2ICsxOTks
NiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiSU9FcnJvciByYWlzZWQgd2hpbGUgc3RvcHBpbmcgaGVscGVyOiAlcyIgJSBzdHIoZSkpCiAg
ICAgICAgICAgICBzZWxmLl9oZWxwZXIgPSBOb25lCiAKLSAgICBkZWYgbm1fY29tbWFuZChzZWxm
KToKLSAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgnbm0nLCAnbm0nKQotCi0gICAgZGVm
IHhjcnVuX2ZpbmQoc2VsZiwgY29tbWFuZCwgZmFsbGJhY2spOgotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnLWZp
bmQnLCBjb21tYW5kXSkucnN0cmlwKCkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgotICAg
ICAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIg
JSBmYWxsYmFjaykKLSAgICAgICAgICAgIHJldHVybiBmYWxsYmFjawotCiAgICAgZGVmIGxvZ2dp
bmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CiAgICAgICAgICMgRklYTUU6IFJlbW92ZSB0aGlz
IGFmdGVyIDxyZGFyOi8vcHJvYmxlbS8xNTYwNTAwNz4gaXMgZml4ZWQKICAgICAgICAgcmV0dXJu
IFsocmUuY29tcGlsZSgnKEFWRnxHVkEpIGluZm86LipcbicpLCAnJyldCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIwNDg0MikK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0yNyw3ICsyOCw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGZyb20gd2Via2l0cHkucG9ydC5tYWMg
aW1wb3J0IE1hY1BvcnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQor
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVy
ZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwpAQCAtMzUs
MjUgKzM2LDEyIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0
ZW1Ib3N0CiAKIAotY2xhc3MgTWFjVGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6Citj
bGFzcyBNYWNUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKICAgICBvc19uYW1lID0g
J21hYycKICAgICBvc192ZXJzaW9uID0gJ2xpb24nCiAgICAgcG9ydF9uYW1lID0gJ21hYy1saW9u
JwogICAgIHBvcnRfbWFrZXIgPSBNYWNQb3J0CiAKLSAgICBkZWYgYXNzZXJ0X3NraXBwZWRfZmls
ZV9zZWFyY2hfcGF0aHMoc2VsZiwgcG9ydF9uYW1lLCBleHBlY3RlZF9wYXRocywgdXNlX3dlYmtp
dDI9RmFsc2UpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXBvcnRf
bmFtZSwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9dXNlX3dlYmtpdDIp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0
aHMoKSwgZXhwZWN0ZWRfcGF0aHMpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X3RpbWVvdXRfbXMo
c2VsZik6Ci0gICAgICAgIHN1cGVyKE1hY1Rlc3QsIHNlbGYpLnRlc3RfZGVmYXVsdF90aW1lb3V0
X21zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKGd1YXJkX21hbGxvYz1UcnVlKSkuZGVmYXVsdF90aW1lb3V0X21zKCksIDM1MDAw
MCkKLQotICAgIGRlZiBhc3NlcnRfbmFtZShzZWxmLCBwb3J0X25hbWUsIG9zX3ZlcnNpb25fc3Ry
aW5nLCBleHBlY3RlZCk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPSdt
YWMnLCBvc192ZXJzaW9uPW9zX3ZlcnNpb25fc3RyaW5nKQotICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGV4cGVjdGVkLCBwb3J0Lm5hbWUoKSkKLQogICAgIGRlZiB0ZXN0X3Rlc3RzX2Zv
cl9vdGhlcl9wbGF0Zm9ybXMoc2VsZik6CiAgICAgICAgIHBsYXRmb3JtcyA9IFsnbWFjJywgJ21h
Yy1zbm93bGVvcGFyZCddCiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9
J21hYy1zbm93bGVvcGFyZCcpCkBAIC0xNjAsNzYgKzE0OCw2IEBAIGNsYXNzIE1hY1Rlc3QocG9y
dF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UKICAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVt
cFJlbmRlclRyZWUnLCAxMjM0LCAnJywgJycsIDAsCiAgICAgICAgICAgICB0aW1lX2ZuPWZha2Vf
dGltZV9jYigpLCBzbGVlcF9mbj1sYW1iZGEgZGVsYXk6IE5vbmUpCiAKLSAgICBkZWYgdGVzdF9o
ZWxwZXJfc3RhcnRzKHNlbGYpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4
ZWN1dGl2ZSgpKQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoaG9zdCkKLSAgICAgICAg
b2MgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAg
ICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1vY2tQcm9jZXNzKCdyZWFkeVxuJykKLSAgICAgICAg
cG9ydC5zdGFydF9oZWxwZXIoKQotICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKLSAgICAgICAg
b2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAgICAgICMgbWFrZSBzdXJlIHRyeWluZyB0byBzdG9w
IHRoZSBoZWxwZXIgdHdpY2UgaXMgc2FmZS4KLSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0K
LSAgICBkZWYgdGVzdF9oZWxwZXJfZmFpbHNfdG9fc3RhcnQoc2VsZik6Ci0gICAgICAgIGhvc3Qg
PSBNb2NrU3lzdGVtSG9zdChNb2NrRXhlY3V0aXZlKCkpCi0gICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydChob3N0KQotICAgICAgICBvYyA9IE91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5j
YXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBvcnQuc3RhcnRfaGVscGVyKCkKLSAgICAgICAgcG9y
dC5zdG9wX2hlbHBlcigpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0
ZXN0X2hlbHBlcl9mYWlsc190b19zdG9wKHNlbGYpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3Rl
bUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1v
Y2tQcm9jZXNzKCkKLQotICAgICAgICBkZWYgYmFkX3dhaXRlcigpOgotICAgICAgICAgICAgcmFp
c2UgSU9FcnJvcignZmFpbGVkIHRvIHdhaXQnKQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJv
Yy53YWl0ID0gYmFkX3dhaXRlcgotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0
KQotICAgICAgICBvYyA9IE91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1
dCgpCi0gICAgICAgIHBvcnQuc3RhcnRfaGVscGVyKCkKLSAgICAgICAgcG9ydC5zdG9wX2hlbHBl
cigpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0ZXN0X3NwaW5kdW1w
KHNlbGYpOgotCi0gICAgICAgIGRlZiBsb2dnaW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAg
ICAgICAgcHJpbnQgYXJncwotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAg
ICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPWxvZ2dp
bmdfcnVuX2NvbW1hbmQpCi0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJy91c3IvYmluL3N1
ZG8nLCAnLW4nLCAnL3Vzci9zYmluL3NwaW5kdW1wJywgNDIsIDEwLCAxMCwgJy1maWxlJywgJy9t
b2NrLWJ1aWxkL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdC00Mi1zYW1wbGUudHh0J11cbiIKLSAg
ICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQuc2FtcGxlX3By
b2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0
KQotCi0gICAgZGVmIHRlc3Rfc2FtcGxlX3Byb2Nlc3Moc2VsZik6Ci0KLSAgICAgICAgZGVmIGxv
Z2dpbmdfcnVuX2NvbW1hbmQoYXJncyk6Ci0gICAgICAgICAgICBpZiBhcmdzWzBdID09ICcvdXNy
L2Jpbi9zdWRvJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgcHJpbnQg
YXJncwotICAgICAgICAgICAgcmV0dXJuIDAKLQotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQotICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFu
ZF9mbj1sb2dnaW5nX3J1bl9jb21tYW5kKQotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWycv
dXNyL2Jpbi9zYW1wbGUnLCA0MiwgMTAsIDEwLCAnLWZpbGUnLCAnL21vY2stYnVpbGQvbGF5b3V0
LXRlc3QtcmVzdWx0cy90ZXN0LTQyLXNhbXBsZS50eHQnXVxuIgotICAgICAgICBPdXRwdXRDYXB0
dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rl
c3QnLCA0Ml0sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCi0KLSAgICBkZWYgdGVz
dF9zYW1wbGVfcHJvY2Vzc19leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIGRlZiB0aHJvd2luZ19y
dW5fY29tbWFuZChhcmdzKToKLSAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gJy91c3IvYmluL3N1
ZG8nOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICByYWlzZSBTY3JpcHRF
cnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5k
X2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0pCi0K
ICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0ZWN0dXJlPSd4ODYnKSkKIApAQCAtMjUyLDMgKzE3
MCwxNyBAQCBjbGFzcyBNYWNUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlCiAgICAgICAg
IHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZl
cigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbXSkKKworICAgIGRlZiB0
ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnbWFjb3N4JykKKworICAgIGRlZiB0ZXN0
X3hjcnVuKHNlbGYpOgorICAgICAgICBkZWYgdGhyb3dpbmdfcnVuX2NvbW1hbmQoYXJncyk6Cisg
ICAgICAgICAgICBwcmludCBhcmdzCisgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiTU9D
SyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAg
ICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93
aW5nX3J1bl9jb21tYW5kKQorICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICct
LXNkaycsICdtYWNvc3gnLCAnLWZpbmQnLCAndGVzdCddXG4iCisgICAgICAgIE91dHB1dENhcHR1
cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0Jywg
J2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAyMDQ4
NDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTgxLDYgKzgyLDcgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBvc192ZXJzaW9uID0gTm9uZQogICAgIHBvcnRfbWFrZXIgPSBUZXN0V2ViS2l0UG9y
dAogICAgIHBvcnRfbmFtZSA9IE5vbmUKKyAgICBpc19zaW11bGF0b3IgPSBGYWxzZQogCiAgICAg
ZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5v
bmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGhv
c3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9KG9zX25hbWUgb3Igc2VsZi5vc19u
YW1lKSwgb3NfdmVyc2lvbj0ob3NfdmVyc2lvbiBvciBzZWxmLm9zX3ZlcnNpb24pKQpAQCAtMjUw
LDYgKzI1MiwxMCBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICAgICAgc2VsZi5wcm9jID0gTW9ja1NlcnZlclByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52
LCBsaW5lcz1bJ2RpZmY6IDEwMCUgZmFpbGVkXG4nLCAnZGlmZjogMTAwJSBmYWlsZWRcbiddKQog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvYwogCisgICAgICAgICMgRklYTUU6IENhbid0IHBy
ZXRlbmQgdG8gcnVuIGEgc2ltdWxhdG9yJ3Mgc2V0dXAsIHNvIGp1c3Qgc2tpcCB0aGlzIHRlc3Qu
CisgICAgICAgIGlmIHNlbGYuaXNfc2ltdWxhdG9yOgorICAgICAgICAgICAgcmV0dXJuCisKICAg
ICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBtYWtlX3Byb2MKICAgICAg
ICAgcG9ydC5zZXR1cF90ZXN0X3J1bigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5k
aWZmX2ltYWdlKCdmb28nLCAnYmFyJyksICgnJywgMTAwLjAsIE5vbmUpKQpAQCAtMjczLDYgKzI3
OSwxMCBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAg
ICAgc2VsZi5wcm9jID0gTW9ja1NlcnZlclByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52LCBjcmFz
aGVkPVRydWUpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jCiAKKyAgICAgICAgIyBGSVhN
RTogQ2FuJ3QgcHJldGVuZCB0byBydW4gYSBzaW11bGF0b3IncyBzZXR1cCwgc28ganVzdCBza2lw
IHRoaXMgdGVzdC4KKyAgICAgICAgaWYgc2VsZi5pc19zaW11bGF0b3I6CisgICAgICAgICAgICBy
ZXR1cm4KKwogICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IG1ha2Vf
cHJvYwogICAgICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwb3J0LmRpZmZfaW1hZ2UoJ2ZvbycsICdiYXInKSwgKCcnLCAwLCAnSW1hZ2VEaWZmIGNy
YXNoZWRcbicpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CShyZXZpc2lvbiAy
MDQ4NDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC00MDMsMjggKzQwMyw2IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICAg
ICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKICAgICAgICAgcmV0
dXJuIGNyYXNoX2xvZ3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJl
c3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgIyBObyBzYW1wbGluZyBv
biBXaW5kb3dzLgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2FtcGxlX3Byb2Nlc3Moc2VsZiwg
bmFtZSwgcGlkKToKLSAgICAgICAgIyBObyBzYW1wbGluZyBvbiBXaW5kb3dzLgotICAgICAgICBw
YXNzCi0KLSAgICBkZWYgX21ha2VfbGVha19kZXRlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCk6Ci0gICAgICAgICMgTm8gbGVhayBjaGVja2luZyBvbiBXaW5kb3dzLgotICAgICAg
ICBwYXNzCi0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKLSAgICAgICAgIyBO
byBsZWFrIGNoZWNraW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfcGF0
aF90b193ZWJjb3JlX2xpYnJhcnkoc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KICAgICBk
ZWYgZmluZF9zeXN0ZW1fcGlkKHNlbGYsIG5hbWUsIHBpZCk6CiAgICAgICAgIHN5c3RlbV9waWQg
PSBpbnQocGlkKQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289235</attachid>
            <date>2016-09-19 10:08:11 -0700</date>
            <delta_ts>2016-10-07 14:09:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160709-20160919100526.patch</filename>
            <type>text/plain</type>
            <size>51213</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNjA5OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgzIEBACisyMDE2LTA5LTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBNb3ZlIGZ1bmN0aW9uYWxpdHkgY29tbW9uIHRvIERhcndpbiBwb3J0cyBp
bnRvIGEgYmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYwNzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBs
ZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKTogU3BlY2lmaWMgaU9TIHBvcnQgY2hlY2su
CisgICAgICAgIChBcHBsZVBvcnQuX19pbml0X18pOiBNb3ZlIGxlYWsgZGV0ZWN0b3IgdG8gRGFy
d2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fbWFrZV9sZWFrX2RldGVjdG9yKTogTW92ZWQg
dG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1l
b3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5jaGVja19mb3JfbGVha3Mp
OiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnByaW50X2xlYWtzX3N1
bW1hcnkpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0Ll9wYXRoX3Rv
X3dlYmNvcmVfbGlicmFyeSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBv
cnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZSk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAg
IChBcHBsZVBvcnQuX21lcmdlX2NyYXNoX2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAg
ICAgICAoQXBwbGVQb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTogTW92
ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIERhcndpblBvcnQuCisgICAgICAgIChBcHBsZVBvcnQubG9va19mb3JfbmV3X2NyYXNo
X2xvZ3MpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0LgorICAgICAgICAoQXBwbGVQb3J0LnNhbXBsZV9w
cm9jZXNzKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5zYW1wbGVf
ZmlsZV9wYXRoKTogTW92ZWQgdG8gRGFyd2luUG9ydC4KKyAgICAgICAgKEFwcGxlUG9ydC5sb29r
X2Zvcl9uZXdfc2FtcGxlcyk6IE1vdmVkIHRvIERhcndpblBvcnQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnN1cHBvcnRzX3Blcl90ZXN0
X3RpbWVvdXQpOiBSZXR1cm4gdHJ1ZSBmb3IgYWxsIHBvcnRzLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6IEFkZGVkLgorICAgICAgICAoRGFyd2luUG9ydCk6IFNo
YXJlZCBpT1MgYW5kIE1hYyBmdW5jdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Rhcndpbl90ZXN0Y2FzZS5weTogQWRkZWQuCisgICAgICAgIChEYXJ3aW5UZXN0KTogU2hh
cmVkIGlPUyBhbmQgTWFjIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2VmbC5weToKKyAgICAgICAgKEVmbFBvcnQpOgorICAgICAgICAoRWZsUG9ydC5zdXBwb3J0c19w
ZXJfdGVzdF90aW1lb3V0KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZHJpdmVyX2NsYXNzKToKKyAgICAg
ICAgKEd0a1BvcnQpOgorICAgICAgICAoR3RrUG9ydC5zdXBwb3J0c19wZXJfdGVzdF90aW1lb3V0
KTogTW92ZWQgdG8gUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TUG9ydCk6CisgICAgICAgIChJT1NQb3J0Lm9wZXJhdGluZ19zeXN0ZW0p
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0
Ll9faW5pdF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3
aW5Qb3J0LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IERlbGV0
ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnhjcnVuX2ZpbmQpOiBEZWxldGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAoaW9zVGVzdCk6IFVuaXQgdGVzdHMgZm9yIHRoZSBpT1MgcG9ydC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAg
IChNYWNQb3J0Ll9faW5pdF9fKTogSW5oZXJpdHMgZnJvbSBEYXJ3aW5Qb3J0LgorICAgICAgICAo
TWFjUG9ydC5fcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmlsZXMpOiBNb3ZlZCB0byBEYXJ3
aW5Qb3J0LgorICAgICAgICAoTWFjUG9ydC5tYWtlX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Q
b3J0LgorICAgICAgICAoTWFjUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIHRvIERhcndpblBv
cnQuCisgICAgICAgIChNYWNQb3J0Lm5tX2NvbW1hbmQpOiBNb3ZlZCB0byBEYXJ3aW5Qb3J0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAg
IChNYWNUZXN0KToKKyAgICAgICAgKE1hY1Rlc3QudGVzdF9zZGtfbmFtZSk6IEFkZGVkIHRlc3Qu
CisgICAgICAgIChNYWNUZXN0LnRlc3RfeGNydW4pOiBBZGRlZCB0ZXN0LgorICAgICAgICAoTWFj
VGVzdC5hc3NlcnRfc2tpcHBlZF9maWxlX3NlYXJjaF9wYXRocyk6IE1vdmVkIHRvIERhcndpblRl
c3QuCisgICAgICAgIChNYWNUZXN0LnRlc3RfZGVmYXVsdF90aW1lb3V0X21zKTogTW92ZWQgdG8g
RGFyd2luVGVzdC4KKyAgICAgICAgKE1hY1Rlc3QuYXNzZXJ0X25hbWUpOiBNb3ZlZCB0byBEYXJ3
aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X2hlbHBlcl9zdGFydHMpOiBNb3ZlZCB0byBE
YXJ3aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X2hlbHBlcl9mYWlsc190b19zdGFydCk6
IE1vdmVkIHRvIERhcndpblRlc3QuCisgICAgICAgIChNYWNUZXN0LnRlc3RfaGVscGVyX2ZhaWxz
X3RvX3N0b3ApOiBNb3ZlZCB0byBEYXJ3aW5UZXN0LgorICAgICAgICAoTWFjVGVzdC50ZXN0X3Nw
aW5kdW1wKTogTW92ZWQgdG8gRGFyd2luVGVzdC4KKyAgICAgICAgKE1hY1Rlc3QudGVzdF9zYW1w
bGVfcHJvY2Vzcyk6IE1vdmVkIHRvIERhcndpblRlc3QuCisgICAgICAgIChNYWNUZXN0LnRlc3Rf
c2FtcGxlX3Byb2Nlc3NfZXhjZXB0aW9uKTogTW92ZWQgdG8gRGFyd2luVGVzdC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKFBvcnRU
ZXN0Q2FzZSk6CisgICAgICAgIChQb3J0VGVzdENhc2UudGVzdF9kaWZmX2ltYWdlKTogQWRkZWQg
aXNfc2ltdWxhdG9yIGZsYWcuCisgICAgICAgIChQb3J0VGVzdENhc2UudGVzdF9kaWZmX2ltYWdl
KTogU2tpcCB0ZXN0IGlmIG9uIGEgc2ltdWxhdG9yLgorICAgICAgICAoUG9ydFRlc3RDYXNlLnRl
c3RfZGlmZl9pbWFnZV9jcmFzaGVkKTogU2tpcCB0ZXN0IGlmIG9uIGEgc2ltdWxhdG9yLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0KToK
KyAgICAgICAgKFdpblBvcnQubG9va19mb3JfbmV3X3NhbXBsZXMpOiBVc2VkIGRlZmF1bHQsIEFw
cGxlUG9ydCBubyBsb25nZXIgaW1wbGVtZW50cy4KKyAgICAgICAgKFdpblBvcnQuc2FtcGxlX3By
b2Nlc3MpOiBEaXR0by4KKyAgICAgICAgKFdpblBvcnQuX21ha2VfbGVha19kZXRlY3Rvcik6IERp
dHRvLgorICAgICAgICAoV2luUG9ydC5jaGVja19mb3JfbGVha3MpOiBEaXR0by4KKyAgICAgICAg
KFdpblBvcnQucHJpbnRfbGVha3Nfc3VtbWFyeSk6IERpdHRvLgorICAgICAgICAoV2luUG9ydC5f
cGF0aF90b193ZWJjb3JlX2xpYnJhcnkpOiBEaXR0by4KKwogMjAxNi0wOS0xOCAgR3l1eW91bmcg
S2ltICA8Z3l1eW91bmcua2ltQG5hdmVyY29ycC5jb20+CiAKICAgICAgICAgW0VGTF0gQnVtcCBl
ZmwgbGlicmFyeSB0byAxLjE4LjEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkJKHJldmlzaW9uIDIwNjA5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBs
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uY3Jhc2hsb2dzIGltCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBv
cnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24g
aW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LnBvcnQubGVha2RldGVjdG9y
IGltcG9ydCBMZWFrRGV0ZWN0b3IKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCkBAIC02MSw2ICs2MCwxMSBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgZGVmIGRl
dGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6CiAg
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIHt9CiAgICAgICAgIGlmIHBvcnRfbmFtZSBpbiAo
Y2xzLnBvcnRfbmFtZSwgY2xzLnBvcnRfbmFtZSArICctd2syJyk6CisKKyAgICAgICAgICAgICMg
U2luY2UgSU9TIHNpbXVsYXRvciBydW4gb24gbWFjLCB0aGV5IG5lZWQgYSBzcGVjaWFsIGNoZWNr
CisgICAgICAgICAgICBpZiBob3N0LnBsYXRmb3JtLm9zX25hbWUgPT0gJ21hYycgYW5kICdpb3Mt
c2ltdWxhdG9yJyBpbiBwb3J0X25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvcnRfbmFt
ZQorCiAgICAgICAgICAgICAjIElmIHRoZSBwb3J0X25hbWUgbWF0Y2hlcyB0aGUgKGJhZGx5IG5h
bWVkKSBjbHMucG9ydF9uYW1lLCB0aGF0CiAgICAgICAgICAgICAjIG1lYW5zIHRoYXQgdGhleSBw
YXNzZWQgJ21hYycgb3IgJ3dpbicgYW5kIGRpZG4ndCBzcGVjaWZ5IGEgdmVyc2lvbi4KICAgICAg
ICAgICAgICMgVGhhdCBjb252ZW50aW9uIG1lYW5zIHRoYXQgd2UncmUgc3VwcG9zZWQgdG8gdXNl
IHRoZSB2ZXJzaW9uIGN1cnJlbnRseQpAQCAtODksMjMgKzkzLDExIEBAIGNsYXNzIEFwcGxlUG9y
dChQb3J0KToKICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lLnJlcGxhY2UoJy13azInLCAn
JykKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgo
cG9ydF9uYW1lKQogCi0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBzZWxmLl9tYWtlX2xl
YWtfZGV0ZWN0b3IoKQotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oImxlYWtzIik6Ci0gICAg
ICAgICAgICAjIER1bXBSZW5kZXJUcmVlIHNsb3dzIGRvd24gbm90aWNhYmx5IGlmIHdlIHJ1biBt
b3JlIHRoYW4gYWJvdXQgMTAwMCB0ZXN0cyBpbiBhIGJhdGNoCi0gICAgICAgICAgICAjIHdpdGgg
TWFsbG9jU3RhY2tMb2dnaW5nIGVuYWJsZWQuCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb25f
ZGVmYXVsdCgiYmF0Y2hfc2l6ZSIsIDEwMDApCi0KLSAgICBkZWYgX21ha2VfbGVha19kZXRlY3Rv
cihzZWxmKToKLSAgICAgICAgcmV0dXJuIExlYWtEZXRlY3RvcihzZWxmKQotCiAgICAgZGVmIGRl
ZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFy
ZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCiAgICAgICAgIHJldHVy
biBzdXBlcihBcHBsZVBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCiAKLSAgICBkZWYg
c3VwcG9ydHNfcGVyX3Rlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQog
ICAgIGRlZiBzaG91bGRfcmV0cnlfY3Jhc2hlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUK
IApAQCAtMTI5LDExMyArMTIxLDYgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lv
bj1zZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVjdHVyZT1h
cmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25m
aWd1cmF0aW9ucwogCi0gICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUs
IHByb2Nlc3NfcGlkKToKLSAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToK
LSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIFdlIGNvdWxkIHVzZSBodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvcHN1dGlsLyB0byBnZXQgdGhlIHByb2Nlc3NfbmFtZSBmcm9tIHRoZSBwaWQu
Ci0gICAgICAgIHNlbGYuX2xlYWtfZGV0ZWN0b3IuY2hlY2tfZm9yX2xlYWtzKHByb2Nlc3NfbmFt
ZSwgcHJvY2Vzc19waWQpCi0KLSAgICBkZWYgcHJpbnRfbGVha3Nfc3VtbWFyeShzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignbGVha3MnKToKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAjIFdlJ3JlIGluIHRoZSBtYW5hZ2VyIHByb2Nlc3MsIHNvIHRoZSBsZWFrIGRl
dGVjdG9yIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBsaXN0IG9mIGxlYWsgZmlsZXMuCi0gICAgICAg
ICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciB3YXkg
dG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2VycyB5ZXQuCi0gICAgICAgICMg
RklYTUU6IFRoaXMgd2lsbCBpbmNsdWRlIHRvbyBtYW55IGxlYWtzIGluIHN1YnNlcXVlbnQgcnVu
cyB1bnRpbCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgY2xlYXJlZCEKLSAgICAgICAgbGVha3Nf
ZmlsZXMgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmxlYWtzX2ZpbGVzX2luX2RpcmVjdG9yeShzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCkpCi0gICAgICAgIGlmIG5vdCBsZWFrc19maWxlczoKLSAgICAg
ICAgICAgIHJldHVybgotICAgICAgICB0b3RhbF9ieXRlc19zdHJpbmcsIHVuaXF1ZV9sZWFrcyA9
IHNlbGYuX2xlYWtfZGV0ZWN0b3IuY291bnRfdG90YWxfYnl0ZXNfYW5kX3VuaXF1ZV9sZWFrcyhs
ZWFrc19maWxlcykKLSAgICAgICAgdG90YWxfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNv
dW50X3RvdGFsX2xlYWtzKGxlYWtzX2ZpbGVzKQotICAgICAgICBfbG9nLmluZm8oIiVzIHRvdGFs
IGxlYWtzIGZvdW5kIGZvciBhIHRvdGFsIG9mICVzLiIgJSAodG90YWxfbGVha3MsIHRvdGFsX2J5
dGVzX3N0cmluZykpCi0gICAgICAgIF9sb2cuaW5mbygiJXMgdW5pcXVlIGxlYWtzIGZvdW5kLiIg
JSB1bmlxdWVfbGVha3MpCi0KLSAgICBkZWYgX3BhdGhfdG9fd2ViY29yZV9saWJyYXJ5KHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnV2ViQ29yZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJDb3JlJykKLQotICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYs
IHJlc3VsdHNfZmlsZW5hbWUpOgotICAgICAgICAjIFdlIGRvbid0IHVzZSBzZWxmLl9ydW5fc2Ny
aXB0KCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIHRoZSBzY3JpcHQKLSAgICAg
ICAgIyB0byBleGl0IGFuZCB3ZSB3YW50IHRoZSBvdXRwdXQgdG8gc2hvdyB1cCBvbiBzdGRvdXQg
aW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzCi0gICAgICAgICMgbGF1bmNoaW5nIHRoZSBicm93c2Vy
LgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucG9wZW4oW3NlbGYucGF0aF90b19zY3JpcHQoJ3J1
bi1zYWZhcmknKV0gKyBzZWxmLl9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSArIFsnLS1u
by1zYXZlZC1zdGF0ZScsICctTlNPcGVuJywgcmVzdWx0c19maWxlbmFtZV0sCi0gICAgICAgICAg
ICBjd2Q9c2VsZi53ZWJraXRfYmFzZSgpLCBzdGRvdXQ9ZmlsZShvcy5kZXZudWxsKSwgc3RkZXJy
PWZpbGUob3MuZGV2bnVsbCkpCi0KLSAgICBkZWYgX21lcmdlX2NyYXNoX2xvZ3Moc2VsZiwgbG9n
cywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgZm9yIHRlc3QsIGNyYXNo
X2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzX25hbWUgPSB0ZXN0LnNwbGl0KCItIilbMF0KLSAgICAgICAgICAgICAg
ICBwaWQgPSBpbnQodGVzdC5zcGxpdCgiLSIpWzFdKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4
RXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBhbnko
ZW50cnlbMV0gPT0gcHJvY2Vzc19uYW1lIGFuZCBlbnRyeVsyXSA9PSBwaWQgZm9yIGVudHJ5IGlu
IGNyYXNoZWRfcHJvY2Vzc2VzKToKLSAgICAgICAgICAgICAgICAjIGlmIHRoaXMgaXMgYSBuZXcg
Y3Jhc2gsIHRoZW4gYXBwZW5kIHRoZSBsb2dzCi0gICAgICAgICAgICAgICAgbG9nc1t0ZXN0XSA9
IGNyYXNoX2xvZwotICAgICAgICByZXR1cm4gbG9ncwotCi0gICAgZGVmIF9sb29rX2Zvcl9hbGxf
Y3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgotICAgICAgICBjcmFzaF9s
b2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICByZXR1cm4gY3Jhc2hfbG9nLmZpbmRf
YWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotCi0g
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpOgotICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgZGVmIGxvb2tfZm9yX25ld19jcmFzaF9sb2dzKHNlbGYsIGNyYXNoZWRf
cHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgIiIiU2luY2UgY3Jhc2ggbG9ncyBjYW4g
dGFrZSBhIGxvbmcgdGltZSB0byBiZSB3cml0dGVuIG91dCBpZiB0aGUgc3lzdGVtIGlzCi0gICAg
ICAgICAgIHVuZGVyIHN0cmVzcyBkbyBhIHNlY29uZCBwYXNzIGF0IHRoZSBlbmQgb2YgdGhlIHRl
c3QgcnVuLgotCi0gICAgICAgICAgIGNyYXNoZXM6IHRlc3RfbmFtZSAtPiBwaWQsIHByb2Nlc3Nf
bmFtZSB0dXBsZSBvZiBjcmFzaGVkIHByb2Nlc3MKLSAgICAgICAgICAgc3RhcnRfdGltZTogdGlt
ZSB0aGUgdGVzdHMgc3RhcnRlZCBhdC4gIFdlJ3JlIGxvb2tpbmcgZm9yIGNyYXNoCi0gICAgICAg
ICAgICAgICBsb2dzIGFmdGVyIHRoYXQgdGltZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGNyYXNo
X2xvZ3MgPSB7fQotICAgICAgICBmb3IgKHRlc3RfbmFtZSwgcHJvY2Vzc19uYW1lLCBwaWQpIGlu
IGNyYXNoZWRfcHJvY2Vzc2VzOgotICAgICAgICAgICAgIyBQYXNzaW5nIE5vbmUgZm9yIG91dHB1
dC4gIFRoaXMgaXMgYSBzZWNvbmQgcGFzcyBhZnRlciB0aGUgdGVzdCBmaW5pc2hlZCBzbwotICAg
ICAgICAgICAgIyBpZiB0aGUgb3V0cHV0IGhhZCBhbnkgbG9nZ2luZyB3ZSB3b3VsZCBoYXZlIGFs
cmVhZHkgY29sbGVjdGVkIGl0LgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gc2VsZi5fZ2V0X2Ny
YXNoX2xvZyhwcm9jZXNzX25hbWUsIHBpZCwgTm9uZSwgTm9uZSwgc3RhcnRfdGltZSwgd2FpdF9m
b3JfbG9nPUZhbHNlKVsxXQotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgY3Jhc2hfbG9nc1t0ZXN0X25hbWVdID0gY3Jh
c2hfbG9nCi0gICAgICAgIGFsbF9jcmFzaF9sb2cgPSBzZWxmLl9sb29rX2Zvcl9hbGxfY3Jhc2hf
bG9nc19pbl9sb2dfZGlyKHN0YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9tZXJnZV9j
cmFzaF9sb2dzKGNyYXNoX2xvZ3MsIGFsbF9jcmFzaF9sb2csIGNyYXNoZWRfcHJvY2Vzc2VzKQot
Ci0gICAgZGVmIHNhbXBsZV9wcm9jZXNzKHNlbGYsIG5hbWUsIHBpZCk6Ci0gICAgICAgIGV4aXRf
c3RhdHVzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICIvdXNy
L2Jpbi9zdWRvIiwKLSAgICAgICAgICAgICItbiIsCi0gICAgICAgICAgICAiL3Vzci9zYmluL3Nw
aW5kdW1wIiwKLSAgICAgICAgICAgIHBpZCwKLSAgICAgICAgICAgIDEwLAotICAgICAgICAgICAg
MTAsCi0gICAgICAgICAgICAiLWZpbGUiLAotICAgICAgICAgICAgc2VsZi5zcGluZHVtcF9maWxl
X3BhdGgobmFtZSwgcGlkKSwKLSAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQotICAg
ICAgICBpZiBleGl0X3N0YXR1czoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBz
ZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgICAgICAgICAiL3Vzci9i
aW4vc2FtcGxlIiwKLSAgICAgICAgICAgICAgICAgICAgcGlkLAotICAgICAgICAgICAgICAgICAg
ICAxMCwKLSAgICAgICAgICAgICAgICAgICAgMTAsCi0gICAgICAgICAgICAgICAgICAgICItZmls
ZSIsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2FtcGxlX2ZpbGVfcGF0aChuYW1lLCBwaWQp
LAotICAgICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IgYXMg
ZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byBzYW1wbGUgcHJvY2Vz
czonICsgc3RyKGUpKQotCi0gICAgZGVmIHNhbXBsZV9maWxlX3BhdGgoc2VsZiwgbmFtZSwgcGlk
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLnJlc3VsdHNfZGly
ZWN0b3J5KCksICJ7MH0tezF9LXNhbXBsZS50eHQiLmZvcm1hdChuYW1lLCBwaWQpKQotCi0gICAg
ZGVmIHNwaW5kdW1wX2ZpbGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0t
c3BpbmR1bXAudHh0Ii5mb3JtYXQobmFtZSwgcGlkKSkKLQotICAgIGRlZiBsb29rX2Zvcl9uZXdf
c2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAg
ICAgc2FtcGxlX2ZpbGVzID0ge30KLSAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFt
ZSwgcGlkKSBpbiB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzOgotICAgICAgICAgICAgc2FtcGxlX2Zp
bGUgPSBzZWxmLnNhbXBsZV9maWxlX3BhdGgocHJvY2Vzc19uYW1lLCBwaWQpCi0gICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5pc2ZpbGUoc2FtcGxlX2ZpbGUpOgotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzYW1wbGVfZmlsZXNbdGVzdF9uYW1lXSA9IHNh
bXBsZV9maWxlCi0gICAgICAgIHJldHVybiBzYW1wbGVfZmlsZXMKLQogICAgIGRlZiBfcGF0aF90
b19oZWxwZXIoc2VsZik6CiAgICAgICAgIGJpbmFyeV9uYW1lID0gJ0xheW91dFRlc3RIZWxwZXIn
CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKGJpbmFyeV9uYW1lKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDIwNjA5NykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsOSArMTUz
LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICByZXR1cm4gW10KIAogICAgIGRlZiBz
dXBwb3J0c19wZXJfdGVzdF90aW1lb3V0KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBNYWtlIHBl
ci10ZXN0IHRpbWVvdXRzIHVuY29uZGl0aW9uYWwgb25jZSBhbGwgcG9ydHMnIER1bXBSZW5kZXJU
cmVlcyBzdXBwb3J0IHRoYXQuCi0gICAgICAgICMgV2luZG93cyBEdW1wUmVuZGVyVHJlZSBtYXkg
YmUgdGhlIG9ubHkgb25lIHJlbWFpbmluZyB0byBiZSBmaXhlZCBhdCB0aGlzIHRpbWUuCi0gICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIGRlZmF1bHRf
cGl4ZWxfdGVzdHMoc2VsZik6CiAgICAgICAgICMgRklYTUU6IERpc2FibGUgdW50aWwgdGhleSBh
cmUgcnVuIGJ5IGRlZmF1bHQgb24gYnVpbGQud2Via2l0Lm9yZy4KSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisj
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGlt
cG9ydCBBcHBsZVBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5sZWFrZGV0ZWN0b3IgaW1wb3J0IExl
YWtEZXRlY3RvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitj
bGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CisKKyAgICBTREsgPSBOb25lCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CisgICAgICAgIEFwcGxl
UG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorCisgICAgICAg
IHNlbGYuX2xlYWtfZGV0ZWN0b3IgPSBMZWFrRGV0ZWN0b3Ioc2VsZikKKyAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCJsZWFrcyIpOgorICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBzbG93
cyBkb3duIG5vdGljYWJseSBpZiB3ZSBydW4gbW9yZSB0aGFuIGFib3V0IDEwMDAgdGVzdHMgaW4g
YSBiYXRjaAorICAgICAgICAgICAgIyB3aXRoIE1hbGxvY1N0YWNrTG9nZ2luZyBlbmFibGVkLgor
ICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoImJhdGNoX3NpemUiLCAxMDAwKQor
CisgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCdndWFyZF9tYWxsb2MnKToKKyAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCisg
ICAgICAgIHJldHVybiBzdXBlcihEYXJ3aW5Qb3J0LCBzZWxmKS5kZWZhdWx0X3RpbWVvdXRfbXMo
KQorCisgICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93
ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBzZWxm
LmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKKworICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2Vs
ZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9v
cHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBXZSBjb3VsZCB1
c2UgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BzdXRpbC8gdG8gZ2V0IHRoZSBwcm9jZXNzX25h
bWUgZnJvbSB0aGUgcGlkLgorICAgICAgICBzZWxmLl9sZWFrX2RldGVjdG9yLmNoZWNrX2Zvcl9s
ZWFrcyhwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKQorCisgICAgZGVmIHByaW50X2xlYWtzX3N1
bW1hcnkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Cisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBXZSdyZSBpbiB0aGUgbWFuYWdlciBwcm9jZXNz
LCBzbyB0aGUgbGVhayBkZXRlY3RvciB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBsZWFr
IGZpbGVzLgorICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFjaywgYnV0IHdlIGRvbid0IGhh
dmUgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIHdvcmtlcnMg
eWV0LgorICAgICAgICAjIEZJWE1FOiBUaGlzIHdpbGwgaW5jbHVkZSB0b28gbWFueSBsZWFrcyBp
biBzdWJzZXF1ZW50IHJ1bnMgdW50aWwgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IGlzIGNsZWFyZWQh
CisgICAgICAgIGxlYWtzX2ZpbGVzID0gc2VsZi5fbGVha19kZXRlY3Rvci5sZWFrc19maWxlc19p
bl9kaXJlY3Rvcnkoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpKQorICAgICAgICBpZiBub3QgbGVh
a3NfZmlsZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdG90YWxfYnl0ZXNfc3RyaW5n
LCB1bmlxdWVfbGVha3MgPSBzZWxmLl9sZWFrX2RldGVjdG9yLmNvdW50X3RvdGFsX2J5dGVzX2Fu
ZF91bmlxdWVfbGVha3MobGVha3NfZmlsZXMpCisgICAgICAgIHRvdGFsX2xlYWtzID0gc2VsZi5f
bGVha19kZXRlY3Rvci5jb3VudF90b3RhbF9sZWFrcyhsZWFrc19maWxlcykKKyAgICAgICAgX2xv
Zy5pbmZvKCIlcyB0b3RhbCBsZWFrcyBmb3VuZCBmb3IgYSB0b3RhbCBvZiAlcy4iICUgKHRvdGFs
X2xlYWtzLCB0b3RhbF9ieXRlc19zdHJpbmcpKQorICAgICAgICBfbG9nLmluZm8oIiVzIHVuaXF1
ZSBsZWFrcyBmb3VuZC4iICUgdW5pcXVlX2xlYWtzKQorCisgICAgZGVmIF9wYXRoX3RvX3dlYmNv
cmVfbGlicmFyeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ1dlYkNv
cmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZScpCisKKyAgICBkZWYgc2hvd19yZXN1bHRz
X2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKKyAgICAgICAgIyBXZSBkb24ndCB1
c2Ugc2VsZi5fcnVuX3NjcmlwdCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0
aGUgc2NyaXB0CisgICAgICAgICMgdG8gZXhpdCBhbmQgd2Ugd2FudCB0aGUgb3V0cHV0IHRvIHNo
b3cgdXAgb24gc3Rkb3V0IGluIGNhc2UgdGhlcmUgYXJlIGVycm9ycworICAgICAgICAjIGxhdW5j
aGluZyB0aGUgYnJvd3Nlci4KKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBvcGVuKFtzZWxmLnBh
dGhfdG9fc2NyaXB0KCdydW4tc2FmYXJpJyldICsgc2VsZi5fYXJndW1lbnRzX2Zvcl9jb25maWd1
cmF0aW9uKCkgKyBbJy0tbm8tc2F2ZWQtc3RhdGUnLCAnLU5TT3BlbicsIHJlc3VsdHNfZmlsZW5h
bWVdLAorICAgICAgICAgICAgY3dkPXNlbGYud2Via2l0X2Jhc2UoKSwgc3Rkb3V0PWZpbGUob3Mu
ZGV2bnVsbCksIHN0ZGVycj1maWxlKG9zLmRldm51bGwpKQorCisgICAgZGVmIF9tZXJnZV9jcmFz
aF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAg
IGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gdGVzdC5zcGxpdCgiLSIpWzBd
CisgICAgICAgICAgICAgICAgcGlkID0gaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBpZiBub3QgYW55KGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBhbmQgZW50cnlbMl0gPT0g
cGlkIGZvciBlbnRyeSBpbiBjcmFzaGVkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICAgICAgIyBp
ZiB0aGlzIGlzIGEgbmV3IGNyYXNoLCB0aGVuIGFwcGVuZCB0aGUgbG9ncworICAgICAgICAgICAg
ICAgIGxvZ3NbdGVzdF0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgIGRl
ZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToK
KyAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgcmV0dXJu
IGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49
bmV3ZXJfdGhhbikKKworICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdh
aXRfZm9yX2xvZz1UcnVlKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBsb29rX2Zv
cl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Cisg
ICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3Jp
dHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcworICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBz
ZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBjcmFz
aGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9j
ZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBX
ZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAgICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRp
bWUuCisgICAgICAgICIiIgorICAgICAgICBjcmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9yICh0
ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAgICAg
ICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3Mg
YWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KKyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBo
YWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAgICAg
ICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQs
IE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAgICAg
ICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xvZworICAgICAgICBhbGxfY3Jhc2hf
bG9nID0gc2VsZi5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzdGFydF90aW1l
KQorICAgICAgICByZXR1cm4gc2VsZi5fbWVyZ2VfY3Jhc2hfbG9ncyhjcmFzaF9sb2dzLCBhbGxf
Y3Jhc2hfbG9nLCBjcmFzaGVkX3Byb2Nlc3NlcykKKworICAgIGRlZiBzYW1wbGVfcHJvY2Vzcyhz
ZWxmLCBuYW1lLCBwaWQpOgorICAgICAgICBleGl0X3N0YXR1cyA9IHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbCisgICAgICAgICAgICAiL3Vzci9iaW4vc3VkbyIsCisgICAgICAgICAgICAi
LW4iLAorICAgICAgICAgICAgIi91c3Ivc2Jpbi9zcGluZHVtcCIsCisgICAgICAgICAgICBwaWQs
CisgICAgICAgICAgICAxMCwKKyAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgIi1maWxlIiwK
KyAgICAgICAgICAgIHNlbGYuc3BpbmR1bXBfZmlsZV9wYXRoKG5hbWUsIHBpZCksCisgICAgICAg
IF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgaWYgZXhpdF9zdGF0dXM6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsKKyAgICAgICAgICAgICAgICAgICAgIi91c3IvYmluL3NhbXBsZSIsCisgICAgICAgICAgICAg
ICAgICAgIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAgICAgICAg
IDEwLAorICAgICAgICAgICAgICAgICAgICAiLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnNhbXBsZV9maWxlX3BhdGgobmFtZSwgcGlkKSwKKyAgICAgICAgICAgICAgICBdKQorICAg
ICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgX2xvZy53
YXJuaW5nKCdVbmFibGUgdG8gc2FtcGxlIHByb2Nlc3M6JyArIHN0cihlKSkKKworICAgIGRlZiBz
YW1wbGVfZmlsZV9wYXRoKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpLCAiezB9LXsxfS1zYW1wbGUu
dHh0Ii5mb3JtYXQobmFtZSwgcGlkKSkKKworICAgIGRlZiBzcGluZHVtcF9maWxlX3BhdGgoc2Vs
ZiwgbmFtZSwgcGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
LnJlc3VsdHNfZGlyZWN0b3J5KCksICJ7MH0tezF9LXNwaW5kdW1wLnR4dCIuZm9ybWF0KG5hbWUs
IHBpZCkpCisKKyAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZl
X3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgIHNhbXBsZV9maWxlcyA9IHt9CisgICAg
ICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gdW5yZXNwb25zaXZlX3By
b2Nlc3NlczoKKyAgICAgICAgICAgIHNhbXBsZV9maWxlID0gc2VsZi5zYW1wbGVfZmlsZV9wYXRo
KHByb2Nlc3NfbmFtZSwgcGlkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
aXNmaWxlKHNhbXBsZV9maWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgc2FtcGxlX2ZpbGVzW3Rlc3RfbmFtZV0gPSBzYW1wbGVfZmlsZQorICAgICAgICByZXR1cm4g
c2FtcGxlX2ZpbGVzCisKKyAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQorCisgICAgZGVmIG5t
X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJywgJ25t
JykKKworICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxiYWNrPU5vbmUpOgor
ICAgICAgICBmYWxsYmFjayA9IGZhbGxiYWNrIG9yIGNvbW1hbmQKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJy0t
c2RrJywgc2VsZi5TREssICctZmluZCcsIGNvbW1hbmRdKS5yc3RyaXAoKQorICAgICAgICBleGNl
cHQgU2NyaXB0RXJyb3I6CisgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFs
bGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbGxi
YWNrCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNh
c2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndp
bl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkucG9ydCBp
bXBvcnQgcG9ydF90ZXN0Y2FzZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LnRvb2wu
bW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBNb2Nr
UHJvY2VzcywgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CisKKworY2xhc3MgRGFyd2luVGVzdChwb3J0
X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0X3NraXBwZWRfZmlsZV9z
ZWFyY2hfcGF0aHMoc2VsZiwgcG9ydF9uYW1lLCBleHBlY3RlZF9wYXRocywgdXNlX3dlYmtpdDI9
RmFsc2UpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXBvcnRfbmFt
ZSwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9dXNlX3dlYmtpdDIpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMo
KSwgZXhwZWN0ZWRfcGF0aHMpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3RpbWVvdXRfbXMoc2Vs
Zik6CisgICAgICAgIHN1cGVyKERhcndpblRlc3QsIHNlbGYpLnRlc3RfZGVmYXVsdF90aW1lb3V0
X21zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1v
Y2tPcHRpb25zKGd1YXJkX21hbGxvYz1UcnVlKSkuZGVmYXVsdF90aW1lb3V0X21zKCksIDM1MDAw
MCkKKworICAgIGRlZiBhc3NlcnRfbmFtZShzZWxmLCBwb3J0X25hbWUsIG9zX3ZlcnNpb25fc3Ry
aW5nLCBleHBlY3RlZCk6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPXNl
bGYub3NfbmFtZSwgb3NfdmVyc2lvbj1vc192ZXJzaW9uX3N0cmluZykKKyAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcG9ydC5uYW1lKCkpCisKKyAgICBkZWYgdGVzdF9z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQorICAgICAgICAjIERlbGF5IHNldHRpbmcgYSBzaG91bGRfbG9nIGV4ZWN1dGl2ZSB0byBh
dm9pZCBsb2dnaW5nIGZyb20gTWFjUG9ydC5fX2luaXRfXy4KKyAgICAgICAgcG9ydC5fZXhlY3V0
aXZlID0gTW9ja0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCisgICAgICAgIGV4cGVjdGVkX2xv
Z3MgPSAiTU9DSyBwb3BlbjogWydUb29scy9TY3JpcHRzL3J1bi1zYWZhcmknLCAnLS1yZWxlYXNl
JywgJy0tbm8tc2F2ZWQtc3RhdGUnLCAnLU5TT3BlbicsICd0ZXN0Lmh0bWwnXSwgY3dkPS9tb2Nr
LWNoZWNrb3V0XG4iCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBwb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUsIFsidGVzdC5odG1sIl0sIGV4cGVjdGVkX2xv
Z3M9ZXhwZWN0ZWRfbG9ncykKKworICAgIGRlZiB0ZXN0X2hlbHBlcl9zdGFydHMoc2VsZik6Cisg
ICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChNb2NrRXhlY3V0aXZlKCkpCisgICAgICAgIHBv
cnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQorICAgICAgICBvYyA9IE91dHB1dENhcHR1cmUoKQor
ICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGhvc3QuZXhlY3V0aXZlLl9wcm9j
ID0gTW9ja1Byb2Nlc3MoJ3JlYWR5XG4nKQorICAgICAgICBwb3J0LnN0YXJ0X2hlbHBlcigpCisg
ICAgICAgIHBvcnQuc3RvcF9oZWxwZXIoKQorICAgICAgICBvYy5yZXN0b3JlX291dHB1dCgpCisK
KyAgICAgICAgIyBtYWtlIHN1cmUgdHJ5aW5nIHRvIHN0b3AgdGhlIGhlbHBlciB0d2ljZSBpcyBz
YWZlLgorICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKKworICAgIGRlZiB0ZXN0X2hlbHBlcl9m
YWlsc190b19zdGFydChzZWxmKToKKyAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KE1vY2tF
eGVjdXRpdmUoKSkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KGhvc3QpCisgICAgICAg
IG9jID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAg
ICAgcG9ydC5zdGFydF9oZWxwZXIoKQorICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKKyAgICAg
ICAgb2MucmVzdG9yZV9vdXRwdXQoKQorCisgICAgZGVmIHRlc3RfaGVscGVyX2ZhaWxzX3RvX3N0
b3Aoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChNb2NrRXhlY3V0aXZlKCkp
CisgICAgICAgIGhvc3QuZXhlY3V0aXZlLl9wcm9jID0gTW9ja1Byb2Nlc3MoKQorCisgICAgICAg
IGRlZiBiYWRfd2FpdGVyKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdmYWlsZWQgdG8g
d2FpdCcpCisgICAgICAgIGhvc3QuZXhlY3V0aXZlLl9wcm9jLndhaXQgPSBiYWRfd2FpdGVyCisK
KyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KGhvc3QpCisgICAgICAgIG9jID0gT3V0cHV0
Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgcG9ydC5zdGFy
dF9oZWxwZXIoKQorICAgICAgICBwb3J0LnN0b3BfaGVscGVyKCkKKyAgICAgICAgb2MucmVzdG9y
ZV9vdXRwdXQoKQorCisgICAgZGVmIHRlc3Rfc3BpbmR1bXAoc2VsZik6CisKKyAgICAgICAgZGVm
IGxvZ2dpbmdfcnVuX2NvbW1hbmQoYXJncyk6CisgICAgICAgICAgICBwcmludCBhcmdzCisKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0g
TW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49bG9nZ2luZ19ydW5fY29tbWFuZCkKKyAgICAg
ICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsnL3Vzci9iaW4vc3VkbycsICctbicsICcvdXNyL3NiaW4v
c3BpbmR1bXAnLCA0MiwgMTAsIDEwLCAnLWZpbGUnLCAnL21vY2stYnVpbGQvbGF5b3V0LXRlc3Qt
cmVzdWx0cy90ZXN0LTQyLXNwaW5kdW1wLnR4dCddXG4iCisgICAgICAgIE91dHB1dENhcHR1cmUo
KS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcs
IDQyXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKworICAgIGRlZiB0ZXN0X3Nh
bXBsZV9wcm9jZXNzKHNlbGYpOgorCisgICAgICAgIGRlZiBsb2dnaW5nX3J1bl9jb21tYW5kKGFy
Z3MpOgorICAgICAgICAgICAgaWYgYXJnc1swXSA9PSAnL3Vzci9iaW4vc3Vkbyc6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIHByaW50IGFyZ3MKKyAgICAgICAgICAgIHJl
dHVybiAwCisKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgcG9ydC5f
ZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49bG9nZ2luZ19ydW5fY29t
bWFuZCkKKyAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsnL3Vzci9iaW4vc2FtcGxlJywgNDIs
IDEwLCAxMCwgJy1maWxlJywgJy9tb2NrLWJ1aWxkL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdC00
Mi1zYW1wbGUudHh0J11cbiIKKyAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRz
KHNlbGYsIHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdLCBleHBlY3RlZF9z
dGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorCisgICAgZGVmIHRlc3Rfc2FtcGxlX3Byb2Nlc3NfZXhj
ZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgdGhyb3dpbmdfcnVuX2NvbW1hbmQoYXJncyk6Cisg
ICAgICAgICAgICBpZiBhcmdzWzBdID09ICcvdXNyL2Jpbi9zdWRvJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMQorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIk1PQ0sgc2NyaXB0IGVy
cm9yIikKKworICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBwb3J0Ll9l
eGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29t
bWFuZCkKKyAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQu
c2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2VmbC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZWZsLnB5CShyZXZpc2lvbiAyMDYwOTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZWZsLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCw2IEBAIGNsYXNzIEVmbFBv
cnQoUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIGVudgogCi0gICAgZGVmIHN1cHBvcnRzX3Blcl90
ZXN0X3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgZGVmYXVs
dF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHJ1biBjb25zaWRlcmFibHkgc2xv
d2VyIHVuZGVyIGdkYgogICAgICAgICAjIG9yIHZhbGdyaW5kLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2d0ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5CShyZXZpc2lvbiAyMDYwOTcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw2IEBAIGNsYXNzIEd0
a1BvcnQoUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gWG9yZ0RyaXZlcgogICAgICAgICByZXR1
cm4gWHZmYkRyaXZlcgogCi0gICAgZGVmIHN1cHBvcnRzX3Blcl90ZXN0X3RpbWVvdXQoc2VsZik6
Ci0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYp
OgogICAgICAgICAjIFN0YXJ0aW5nIGFuIGFwcGxpY2F0aW9uIHVuZGVyIFZhbGdyaW5kIHRha2Vz
IGEgbG90IGxvbmdlciB0aGFuIG5vcm1hbAogICAgICAgICAjIHNvIGluY3JlYXNlIHRoZSB0aW1l
b3V0IChlbXBpcmljYWxseSAxMHggaXMgZW5vdWdoIHRvIGF2b2lkIHRpbWVvdXRzKS4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjA2MDk3KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5
LDE5IEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
Lm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKLWZyb20gd2Via2l0cHkucG9ydC5hcHBs
ZSBpbXBvcnQgQXBwbGVQb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAor
ZnJvbSB3ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydAogZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAK
IAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIElPU1BvcnQo
QXBwbGVQb3J0KToKK2NsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0g
ImlvcyIKIAogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02NCdd
CkBAIC02Nyw3ICs2Niw3IEBAIGNsYXNzIElPU1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgcmV0
dXJuICdpb3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgorY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVs
YXRvciIKIAogICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKQEAgLTc2LDYgKzc1LDcgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQpOgogCiAgICAgREVGQVVMVF9ERVZJQ0Vf
Q0xBU1MgPSAnaXBob25lJwogICAgIENVU1RPTV9ERVZJQ0VfQ0xBU1NFUyA9IFsnaXBhZCddCisg
ICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKIAogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAn
Y29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKICAgICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RS
ZWxheScKQEAgLTk1LDcgKzk1LDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChBcHBsZVBvcnQp
OgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKToKLSAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX19pbml0X18oaG9z
dCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9j
bGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykKICAgICAgICAgc2VsZi5fcHJp
bnRpbmdfY21kX2xpbmUgPSBGYWxzZQpAQCAtMjI4LDkgKzIyOCw2IEBAIGNsYXNzIElPU1NpbXVs
YXRvclBvcnQoQXBwbGVQb3J0KToKIAogICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dlYmtpdF9i
YXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykKIAotICAgIGRlZiBfcG9ydF9zcGVjaWZpY19l
eHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0
RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCi0K
ICAgICBkZWYgX3NldF9kZXZpY2VfY2xhc3Moc2VsZiwgZGV2aWNlX2NsYXNzKToKICAgICAgICAg
c2VsZi5fZGV2aWNlX2NsYXNzID0gZGV2aWNlX2NsYXNzIGlmIGRldmljZV9jbGFzcyBlbHNlIHNl
bGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKIApAQCAtMzQzLDQ0ICszNDAsNiBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KEFwcGxlUG9ydCk6CiAKICAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VYID0g
cmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQgKD9Q
PHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUs
IHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAgICAgICAgdGltZV9m
biA9IHRpbWVfZm4gb3IgdGltZS50aW1lCi0gICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3Ig
dGltZS5zbGVlcAotCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBhY3R1
YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRlcyBt
b3JlCi0gICAgICAgICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFuIGlz
IGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvci4K
LSAgICAgICAgc3RkZXJyX2xpbmVzID0gW10KLSAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25h
bWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQpCi0g
ICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMoKToKLSAgICAgICAg
ICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAg
ICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCi0gICAg
ICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGNyYXNoZWRfc3VicHJv
Y2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBpbnQo
bWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlkJykpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZQotICAgICAgICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgICAgIGlm
IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBjcmFz
aGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCi0gICAgICAgICAgICAgICAg
J1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3
YWl0X2Zvcl9sb2cpCi0KLSAgICAgICAgIyBMYXlvdXRUZXN0UmVsYXkgY3Jhc2hlZAotICAgICAg
ICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBz
dHIocGlkKSkpCi0gICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICBub3cgPSB0aW1lX2ZuKCkKLSAgICAgICAgZGVh
ZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywg
MSkpCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKLSAg
ICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBp
ZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotICAgICAgICAg
ICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAg
ICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNw
bGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKLSAgICAgICAgICAg
ICAgICBzbGVlcF9mbigwLjEpCi0gICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCi0KLSAg
ICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUK
LSAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCi0KICAgICBkZWYgX2NyZWF0ZV9kZXZp
Y2Uoc2VsZiwgbnVtYmVyKToKICAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5jcmVhdGVfZGV2aWNl
KG51bWJlciwgc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUoKSwgc2VsZi5zaW11bGF0b3JfcnVu
dGltZSkKIApAQCAtNDE5LDE0ICszNzgsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KEFwcGxl
UG9ydCk6CiAgICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnhj
cnVuX2ZpbmQoJ25tJykKIAotICAgIGRlZiB4Y3J1bl9maW5kKHNlbGYsIGNvbW1hbmQsIGZhbGxi
YWNrPU5vbmUpOgotICAgICAgICBmYWxsYmFjayA9IGZhbGxiYWNrIG9yIGNvbW1hbmQKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
J3hjcnVuJywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvcicsICctZmluZCcsIGNvbW1hbmRdKS5y
c3RyaXAoKQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Ci0gICAgICAgICAgICBfbG9nLndh
cm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCi0KICAgICBAcHJvcGVydHkKICAgICBAbWVtb2l6ZWQK
ICAgICBkZWYgZGV2ZWxvcGVyX2RpcihzZWxmKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc191bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0
Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0
dXJlCitmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRp
dmUsIE1vY2tFeGVjdXRpdmUyLCBNb2NrUHJvY2VzcywgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CisK
KworY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CisgICAgb3NfbmFt
ZSA9ICdpb3Mtc2ltdWxhdG9yJworICAgIG9zX3ZlcnNpb24gPSAnJworICAgIHBvcnRfbmFtZSA9
ICdpb3Mtc2ltdWxhdG9yJworICAgIHBvcnRfbWFrZXIgPSBJT1NTaW11bGF0b3JQb3J0CisgICAg
aXNfc2ltdWxhdG9yID0gVHJ1ZQorCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUs
IHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1O
b25lLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihpb3NUZXN0LCBzZWxmKS5tYWtl
X3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9z
X25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCisgICAg
ICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKKyAgICAgICAgcmV0dXJu
IHBvcnQKKworICAgIGRlZiB0ZXN0X3NldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMobGVha3M9VHJ1
ZSwgZ3VhcmRfbWFsbG9jPVRydWUpKQorICAgICAgICBlbnYgPSBwb3J0LnNldHVwX2Vudmlyb25f
Zm9yX3NlcnZlcihwb3J0LmRyaXZlcl9uYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZW52WydNYWxsb2NTdGFja0xvZ2dpbmcnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGVudlsnTWFsbG9jU2NyaWJibGUnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVu
dlsnRFlMRF9JTlNFUlRfTElCUkFSSUVTJ10sICcvdXNyL2xpYi9saWJnbWFsbG9jLmR5bGliJykK
KworICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2lvcy1zaW11bGF0b3InLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0
ZW0oKSkKKworICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAgICAgICMgTWFj
IGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1
cmUgd2UgZG9uJ3QgY3Jhc2guCisgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKKyAgICAgICAg
ICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVz
LnBvcCgwKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdpb3Mtc2lt
dWxhdG9yJykKKyAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAx
MjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQorCisgICAg
ZGVmIHRlc3RfMzJiaXQoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRp
b25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2JykpCisKKyAgICAgICAgZGVmIHJ1bl9z
Y3JpcHQoc2NyaXB0LCBhcmdzPU5vbmUsIGVudj1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXJn
cyA9IGFyZ3MKKworICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQorICAgICAgICBw
b3J0Ll9idWlsZF9kcml2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLWlvcy1zaW11bGF0b3InXSkKKworICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgorICAgICAg
ICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZhdWx0CisgICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1
cmUoKSwgJ3g4Nl82NCcpCisKKyAgICAgICAgZGVmIHJ1bl9zY3JpcHQoc2NyaXB0LCBhcmdzPU5v
bmUsIGVudj1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgICAgICBw
b3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAorICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3In
XSkKKworICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuU0RLLCAnaXBob25lc2lt
dWxhdG9yJykKKworICAgIGRlZiB0ZXN0X3hjcnVuKHNlbGYpOgorICAgICAgICBkZWYgdGhyb3dp
bmdfcnVuX2NvbW1hbmQoYXJncyk6CisgICAgICAgICAgICBwcmludCBhcmdzCisgICAgICAgICAg
ICByYWlzZSBTY3JpcHRFcnJvcigiTU9DSyBzY3JpcHQgZXJyb3IiKQorCisgICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRp
dmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQorICAgICAgICBleHBlY3Rl
ZF9zdGRvdXQgPSAiWyd4Y3J1bicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InLCAnLWZpbmQn
LCAndGVzdCddXG4iCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0JywgJ2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rk
b3V0PWV4cGVjdGVkX3N0ZG91dCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9t
YWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQko
cmV2aXNpb24gMjA2MDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQko
d29ya2luZyBjb3B5KQpAQCAtMzQsMjIgKzM0LDIzIEBAIGltcG9ydCByZQogCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtp
dHB5LnBvcnQuYXBwbGUgaW1wb3J0IEFwcGxlUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LmRhcndp
biBpbXBvcnQgRGFyd2luUG9ydAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CiAKIAotY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgorY2xhc3MgTWFjUG9ydChEYXJ3aW5Qb3J0
KToKICAgICBwb3J0X25hbWUgPSAibWFjIgogCiAgICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9
IFsnbWFjLXNub3dsZW9wYXJkJywgJ21hYy1saW9uJywgJ21hYy1tb3VudGFpbmxpb24nLCAnbWFj
LW1hdmVyaWNrcycsICdtYWMteW9zZW1pdGUnLCAnbWFjLWVsY2FwaXRhbicsICdtYWMtc2llcnJh
J10KKyAgICBTREsgPSAnbWFjb3N4JwogCiAgICAgQVJDSElURUNUVVJFUyA9IFsneDg2XzY0Jywg
J3g4NiddCiAKICAgICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCiAKICAgICBkZWYg
X19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHN1cGVy
KE1hY1BvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAg
ICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykK
IAogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICByZXR1cm4gWydB
UkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC02
Niw5ICs2Nyw2IEBAIGNsYXNzIE1hY1BvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgIGZhbGxi
YWNrX25hbWVzID0gW3NlbGYuX3drMl9wb3J0X25hbWUoKSwgJ3drMiddICsgZmFsbGJhY2tfbmFt
ZXMKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJh
Y2tfbmFtZXMpCiAKLSAgICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNl
bGYpOgotICAgICAgICByZXR1cm4gbGlzdChyZXZlcnNlZChbc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBw
IGluIHNlbGYuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKV0pKQotCiAgICAgZGVmIGNvbmZpZ3VyYXRp
b25fc3BlY2lmaWVyX21hY3JvcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAg
ICJzaWVycmErIjogWyJzaWVycmEiLCAiZnV0dXJlIl0sCkBAIC0xNTIsOSArMTUwLDYgQEAgY2xh
c3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgICAgICAgICAgc3VwcG9ydGFibGVfaW5zdGFuY2Vz
ID0gZGVmYXVsdF9jb3VudAogICAgICAgICByZXR1cm4gbWluKHN1cHBvcnRhYmxlX2luc3RhbmNl
cywgZGVmYXVsdF9jb3VudCkKIAotICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21ha2UnLCAnL3Vzci9iaW4vbWFrZScpCi0KICAgICBk
ZWYgX2J1aWxkX2phdmFfdGVzdF9zdXBwb3J0KHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBUaGlz
IGlzIHVudXNlZC4gUmVtb3ZlLgogICAgICAgICBqYXZhX3Rlc3RzX3BhdGggPSBzZWxmLl9maWxl
c3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksICJqYXZhIikKQEAgLTE2NywzMSAr
MTYyLDYgQEAgY2xhc3MgTWFjUG9ydChBcHBsZVBvcnQpOgogICAgIGRlZiBfY2hlY2tfcG9ydF9i
dWlsZChzZWxmKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmdldF9vcHRpb24oJ2phdmEnKSBv
ciBzZWxmLl9idWlsZF9qYXZhX3Rlc3Rfc3VwcG9ydCgpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9s
b2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1O
b25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgICMgTm90ZSB0
aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0
aW1lCi0gICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZs
dXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFyZQotICAgICAgICAjIGxvdHMgb2Ygc2lt
dWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCi0gICAgICAgICMgRklYTUU6IFNob3VsZCBtb3N0
IG9mIHRoaXMgYmUgbW92ZWQgaW50byBDcmFzaExvZ3MoKT8KLSAgICAgICAgdGltZV9mbiA9IHRp
bWVfZm4gb3IgdGltZS50aW1lCi0gICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5z
bGVlcAotICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hM
b2dzKHNlbGYuaG9zdCkKLSAgICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgICMgRklYTUU6
IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCi0g
ICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5h
bWUsIHN0cihwaWQpKSkKLSAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0
X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkpCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaF9s
b2cgYW5kIG5vdyA8PSBkZWFkbGluZToKLSAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xv
Z3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJf
dGhhbj1uZXdlcl90aGFuKQotICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKLSAgICAg
ICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xp
bmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3
aXRoKCdFUlJPUicpXToKLSAgICAgICAgICAgICAgICBzbGVlcF9mbigwLjEpCi0gICAgICAgICAg
ICAgICAgbm93ID0gdGltZV9mbigpCi0KLSAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAg
ICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25lKQotICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jh
c2hfbG9nKQotCiAgICAgZGVmIHN0YXJ0X2hlbHBlcihzZWxmLCBwaXhlbF90ZXN0cz1GYWxzZSk6
CiAgICAgICAgIGhlbHBlcl9wYXRoID0gc2VsZi5fcGF0aF90b19oZWxwZXIoKQogICAgICAgICBp
ZiBub3QgaGVscGVyX3BhdGg6CkBAIC0yMjksMTYgKzE5OSw2IEBAIGNsYXNzIE1hY1BvcnQoQXBw
bGVQb3J0KToKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJJT0Vycm9yIHJhaXNlZCB3aGls
ZSBzdG9wcGluZyBoZWxwZXI6ICVzIiAlIHN0cihlKSkKICAgICAgICAgICAgIHNlbGYuX2hlbHBl
ciA9IE5vbmUKIAotICAgIGRlZiBubV9jb21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi54Y3J1bl9maW5kKCdubScsICdubScpCi0KLSAgICBkZWYgeGNydW5fZmluZChzZWxmLCBjb21t
YW5kLCBmYWxsYmFjayk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICctZmluZCcsIGNvbW1hbmRdKS5yc3RyaXAo
KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6Ci0gICAgICAgICAgICBfbG9nLndhcm4oInhj
cnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbGxiYWNrCi0KICAgICBkZWYgbG9nZ2luZ19wYXR0ZXJuc190b19zdHJpcChz
ZWxmKToKICAgICAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgPHJkYXI6Ly9wcm9ibGVt
LzE1NjA1MDA3PiBpcyBmaXhlZAogICAgICAgICByZXR1cm4gWyhyZS5jb21waWxlKCcoQVZGfEdW
QSkgaW5mbzouKlxuJyksICcnKV0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9t
YWNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L21hY191bml0dGVzdC5weQkocmV2aXNpb24gMjA2MDk3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hY191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAK
ICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI2LDggKzI3LDEwIEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgdGltZQorCiBmcm9tIHdlYmtpdHB5
LnBvcnQubWFjIGltcG9ydCBNYWNQb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRf
dGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5
c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91
dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlv
bnMKQEAgLTM1LDI1ICszOCwxMiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlX21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9y
dCBNb2NrU3lzdGVtSG9zdAogCiAKLWNsYXNzIE1hY1Rlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVz
dENhc2UpOgorY2xhc3MgTWFjVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CiAgICAg
b3NfbmFtZSA9ICdtYWMnCiAgICAgb3NfdmVyc2lvbiA9ICdsaW9uJwogICAgIHBvcnRfbmFtZSA9
ICdtYWMtbGlvbicKICAgICBwb3J0X21ha2VyID0gTWFjUG9ydAogCi0gICAgZGVmIGFzc2VydF9z
a2lwcGVkX2ZpbGVfc2VhcmNoX3BhdGhzKHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfcGF0aHMs
IHVzZV93ZWJraXQyPUZhbHNlKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRf
bmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9TW9ja09wdGlvbnMod2Via2l0X3Rlc3RfcnVubmVyPXVz
ZV93ZWJraXQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9za2lwcGVkX2ZpbGVf
c2VhcmNoX3BhdGhzKCksIGV4cGVjdGVkX3BhdGhzKQotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF90
aW1lb3V0X21zKHNlbGYpOgotICAgICAgICBzdXBlcihNYWNUZXN0LCBzZWxmKS50ZXN0X2RlZmF1
bHRfdGltZW91dF9tcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1Nb2NrT3B0aW9ucyhndWFyZF9tYWxsb2M9VHJ1ZSkpLmRlZmF1bHRfdGltZW91dF9t
cygpLCAzNTAwMDApCi0KLSAgICBkZWYgYXNzZXJ0X25hbWUoc2VsZiwgcG9ydF9uYW1lLCBvc192
ZXJzaW9uX3N0cmluZywgZXhwZWN0ZWQpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3Qo
b3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1vc192ZXJzaW9uX3N0cmluZykKLSAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcG9ydC5uYW1lKCkpCi0KICAgICBkZWYgdGVz
dF90ZXN0c19mb3Jfb3RoZXJfcGxhdGZvcm1zKHNlbGYpOgogICAgICAgICBwbGF0Zm9ybXMgPSBb
J21hYycsICdtYWMtc25vd2xlb3BhcmQnXQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
cG9ydF9uYW1lPSdtYWMtc25vd2xlb3BhcmQnKQpAQCAtMTU3LDc4ICsxNDcsNyBAQCBjbGFzcyBN
YWNUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlCiAgICAgICAgICAgICB0aW1lcyA9IFsw
LCAyMCwgNDBdCiAgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKICAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0nbWFjLXNub3dsZW9wYXJkJykKLSAg
ICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCAnJywgJycs
IDAsCi0gICAgICAgICAgICB0aW1lX2ZuPWZha2VfdGltZV9jYigpLCBzbGVlcF9mbj1sYW1iZGEg
ZGVsYXk6IE5vbmUpCi0KLSAgICBkZWYgdGVzdF9oZWxwZXJfc3RhcnRzKHNlbGYpOgotICAgICAg
ICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQotICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoaG9zdCkKLSAgICAgICAgb2MgPSBPdXRwdXRDYXB0dXJlKCkKLSAgICAg
ICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1v
Y2tQcm9jZXNzKCdyZWFkeVxuJykKLSAgICAgICAgcG9ydC5zdGFydF9oZWxwZXIoKQotICAgICAg
ICBwb3J0LnN0b3BfaGVscGVyKCkKLSAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQotCi0gICAg
ICAgICMgbWFrZSBzdXJlIHRyeWluZyB0byBzdG9wIHRoZSBoZWxwZXIgdHdpY2UgaXMgc2FmZS4K
LSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0KLSAgICBkZWYgdGVzdF9oZWxwZXJfZmFpbHNf
dG9fc3RhcnQoc2VsZik6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChNb2NrRXhlY3V0
aXZlKCkpCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQotICAgICAgICBvYyA9
IE91dHB1dENhcHR1cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBv
cnQuc3RhcnRfaGVscGVyKCkKLSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0gICAgICAgIG9j
LnJlc3RvcmVfb3V0cHV0KCkKLQotICAgIGRlZiB0ZXN0X2hlbHBlcl9mYWlsc190b19zdG9wKHNl
bGYpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoTW9ja0V4ZWN1dGl2ZSgpKQotICAg
ICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYyA9IE1vY2tQcm9jZXNzKCkKLQotICAgICAgICBkZWYg
YmFkX3dhaXRlcigpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmFpbGVkIHRvIHdhaXQn
KQotICAgICAgICBob3N0LmV4ZWN1dGl2ZS5fcHJvYy53YWl0ID0gYmFkX3dhaXRlcgotCi0gICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0KQotICAgICAgICBvYyA9IE91dHB1dENhcHR1
cmUoKQotICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIHBvcnQuc3RhcnRfaGVs
cGVyKCkKLSAgICAgICAgcG9ydC5zdG9wX2hlbHBlcigpCi0gICAgICAgIG9jLnJlc3RvcmVfb3V0
cHV0KCkKLQotICAgIGRlZiB0ZXN0X3NwaW5kdW1wKHNlbGYpOgotCi0gICAgICAgIGRlZiBsb2dn
aW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAgICAgICAgcHJpbnQgYXJncwotCi0gICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tF
eGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPWxvZ2dpbmdfcnVuX2NvbW1hbmQpCi0gICAgICAgIGV4
cGVjdGVkX3N0ZG91dCA9ICJbJy91c3IvYmluL3N1ZG8nLCAnLW4nLCAnL3Vzci9zYmluL3NwaW5k
dW1wJywgNDIsIDEwLCAxMCwgJy1maWxlJywgJy9tb2NrLWJ1aWxkL2xheW91dC10ZXN0LXJlc3Vs
dHMvdGVzdC00Mi1zcGluZHVtcC50eHQnXVxuIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNz
ZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0s
IGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCi0KLSAgICBkZWYgdGVzdF9zYW1wbGVf
cHJvY2VzcyhzZWxmKToKLQotICAgICAgICBkZWYgbG9nZ2luZ19ydW5fY29tbWFuZChhcmdzKToK
LSAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gJy91c3IvYmluL3N1ZG8nOgotICAgICAgICAgICAg
ICAgIHJldHVybiAxCi0gICAgICAgICAgICBwcmludCBhcmdzCi0gICAgICAgICAgICByZXR1cm4g
MAotCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuX2V4ZWN1
dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPWxvZ2dpbmdfcnVuX2NvbW1hbmQp
Ci0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICJbJy91c3IvYmluL3NhbXBsZScsIDQyLCAxMCwg
MTAsICctZmlsZScsICcvbW9jay1idWlsZC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rlc3QtNDItc2Ft
cGxlLnR4dCddXG4iCi0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBwb3J0LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSwgZXhwZWN0ZWRfc3Rkb3V0
PWV4cGVjdGVkX3N0ZG91dCkKLQotICAgIGRlZiB0ZXN0X3NhbXBsZV9wcm9jZXNzX2V4Y2VwdGlv
bihzZWxmKToKLSAgICAgICAgZGVmIHRocm93aW5nX3J1bl9jb21tYW5kKGFyZ3MpOgotICAgICAg
ICAgICAgaWYgYXJnc1swXSA9PSAnL3Vzci9iaW4vc3Vkbyc6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDEKLSAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJNT0NLIHNjcmlwdCBlcnJvciIp
Ci0KLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgcG9ydC5fZXhlY3V0
aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2NvbW1hbmRfZm49dGhyb3dpbmdfcnVuX2NvbW1hbmQp
Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBs
ZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKKyAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xv
ZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9m
b3JfbG9nPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfMzJiaXQoc2VsZik6CiAgICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKGFyY2hpdGVjdHVyZT0neDg2Jykp
CkBAIC0yNTIsMyArMTcxLDE3IEBAIGNsYXNzIE1hY1Rlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVz
dENhc2UKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAgICAgcG9y
dC5fYnVpbGRfZHJpdmVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFtd
KQorCisgICAgZGVmIHRlc3Rfc2RrX25hbWUoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5TREssICdtYWNvc3gnKQor
CisgICAgZGVmIHRlc3RfeGNydW4oc2VsZik6CisgICAgICAgIGRlZiB0aHJvd2luZ19ydW5fY29t
bWFuZChhcmdzKToKKyAgICAgICAgICAgIHByaW50IGFyZ3MKKyAgICAgICAgICAgIHJhaXNlIFNj
cmlwdEVycm9yKCJNT0NLIHNjcmlwdCBlcnJvciIpCisKKyAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKKyAgICAgICAgcG9ydC5fZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIocnVuX2Nv
bW1hbmRfZm49dGhyb3dpbmdfcnVuX2NvbW1hbmQpCisgICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9
ICJbJ3hjcnVuJywgJy0tc2RrJywgJ21hY29zeCcsICctZmluZCcsICd0ZXN0J11cbiIKKyAgICAg
ICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHBvcnQueGNydW5fZmluZCwg
YXJncz1bJ3Rlc3QnLCAnZmFsbGluZyddLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0
KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkJ
KHJldmlzaW9uIDIwNjA5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rl
c3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgIG9zX3ZlcnNpb24gPSBOb25lCiAgICAgcG9ydF9tYWtlciA9
IFRlc3RXZWJLaXRQb3J0CiAgICAgcG9ydF9uYW1lID0gTm9uZQorICAgIGlzX3NpbXVsYXRvciA9
IEZhbHNlCiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5v
bmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdz
KToKICAgICAgICAgaG9zdCA9IGhvc3Qgb3IgTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT0ob3NfbmFt
ZSBvciBzZWxmLm9zX25hbWUpLCBvc192ZXJzaW9uPShvc192ZXJzaW9uIG9yIHNlbGYub3NfdmVy
c2lvbikpCkBAIC0yNTAsNiArMjUyLDEwIEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICBzZWxmLnByb2MgPSBNb2NrU2VydmVyUHJvY2Vzcyhwb3J0
LCBubSwgY21kLCBlbnYsIGxpbmVzPVsnZGlmZjogMTAwJSBmYWlsZWRcbicsICdkaWZmOiAxMDAl
IGZhaWxlZFxuJ10pCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jCiAKKyAgICAgICAgIyBG
SVhNRTogQ2FuJ3QgcHJldGVuZCB0byBydW4gYSBzaW11bGF0b3IncyBzZXR1cCwgc28ganVzdCBz
a2lwIHRoaXMgdGVzdC4KKyAgICAgICAgaWYgc2VsZi5pc19zaW11bGF0b3I6CisgICAgICAgICAg
ICByZXR1cm4KKwogICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IG1h
a2VfcHJvYwogICAgICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChwb3J0LmRpZmZfaW1hZ2UoJ2ZvbycsICdiYXInKSwgKCcnLCAxMDAuMCwgTm9uZSkp
CkBAIC0yNzMsNiArMjc5LDEwIEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICBzZWxmLnByb2MgPSBNb2NrU2VydmVyUHJvY2Vzcyhwb3J0LCBubSwg
Y21kLCBlbnYsIGNyYXNoZWQ9VHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnByb2MKIAor
ICAgICAgICAjIEZJWE1FOiBDYW4ndCBwcmV0ZW5kIHRvIHJ1biBhIHNpbXVsYXRvcidzIHNldHVw
LCBzbyBqdXN0IHNraXAgdGhpcyB0ZXN0LgorICAgICAgICBpZiBzZWxmLmlzX3NpbXVsYXRvcjoK
KyAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0
cnVjdG9yID0gbWFrZV9wcm9jCiAgICAgICAgIHBvcnQuc2V0dXBfdGVzdF9ydW4oKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZGlmZl9pbWFnZSgnZm9vJywgJ2JhcicpLCAoJycsIDAs
ICdJbWFnZURpZmYgY3Jhc2hlZFxuJykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHkJKHJldmlzaW9uIDIwNjA5NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHkJKHdvcmtpbmcgY29weSkKQEAgLTQwNywyOCArNDA3LDYgQEAgY2xhc3MgV2luUG9ydChBcHBs
ZVBvcnQpOgogICAgICAgICAgICAgICAgIGNyYXNoX2xvZ3NbdGVzdF9uYW1lXSA9IGNyYXNoX2xv
ZwogICAgICAgICByZXR1cm4gY3Jhc2hfbG9ncwogCi0gICAgZGVmIGxvb2tfZm9yX25ld19zYW1w
bGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICAj
IE5vIHNhbXBsaW5nIG9uIFdpbmRvd3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzYW1wbGVf
cHJvY2VzcyhzZWxmLCBuYW1lLCBwaWQpOgotICAgICAgICAjIE5vIHNhbXBsaW5nIG9uIFdpbmRv
d3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfbWFrZV9sZWFrX2RldGVjdG9yKHNlbGYpOgot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9j
ZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKLSAgICAgICAgIyBObyBsZWFrIGNoZWNraW5nIG9uIFdp
bmRvd3MuCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBwcmludF9sZWFrc19zdW1tYXJ5KHNlbGYp
OgotICAgICAgICAjIE5vIGxlYWsgY2hlY2tpbmcgb24gV2luZG93cy4KLSAgICAgICAgcGFzcwot
Ci0gICAgZGVmIF9wYXRoX3RvX3dlYmNvcmVfbGlicmFyeShzZWxmKToKLSAgICAgICAgcmV0dXJu
IE5vbmUKLQogICAgIGRlZiBmaW5kX3N5c3RlbV9waWQoc2VsZiwgbmFtZSwgcGlkKToKICAgICAg
ICAgc3lzdGVtX3BpZCA9IGludChwaWQpCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>