<?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>215960</bug_id>
          
          <creation_ts>2020-08-28 16:47:05 -0700</creation_ts>
          <short_desc>[webkitscmpy] Add root, branch and remote for local SCM repositories</short_desc>
          <delta_ts>2020-09-04 12:12:21 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215862</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683825</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-28 16:47:05 -0700</bug_when>
    <thetext>Start the task of creating local SCM objects to represent git and svn checkouts. The goal here is create a shared API between SVN and Git, along with remote representations of those same repositories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683826</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-28 16:47:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/67968919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683832</commentid>
    <comment_count>2</comment_count>
      <attachid>407517</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-28 16:57:32 -0700</bug_when>
    <thetext>Created attachment 407517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684158</commentid>
    <comment_count>3</comment_count>
      <attachid>407608</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-31 09:55:26 -0700</bug_when>
    <thetext>Created attachment 407608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684177</commentid>
    <comment_count>4</comment_count>
      <attachid>407608</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2020-08-31 10:55:50 -0700</bug_when>
    <thetext>Comment on attachment 407608
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:42
&gt; +    def root(self):

Not sure if &quot;root&quot; is the right name, this is returning top level directory path of a working tree (git) or a working copy (svn), maybe top_level_path / root_path ?
Besides do we consider to make this an argument ?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:50
&gt; +        result = run([self.executable, &apos;rev-parse&apos;, &apos;--abbrev-ref&apos;, &apos;HEAD&apos;], cwd=self.root, capture_output=True, encoding=&apos;utf-8&apos;)

This won&apos;t work in detached head state, for example you directly checkout with commit hash, we need to detect this state, otherwise it will return &quot;HEAD&quot; instead of an empty string, &quot;git branch --show-current&quot; will return an empty string, and should make this method failed quickly

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/local/git.py:33
&gt; +        self.remote = remote or &apos;git@github.org:/mock/{}&apos;.format(os.path.basename(path))

maybe we shouldn&apos;t use GitHub in the mock path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684280</commentid>
    <comment_count>5</comment_count>
      <attachid>407608</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-31 15:21:24 -0700</bug_when>
    <thetext>Comment on attachment 407608
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:42
&gt;&gt; +    def root(self):
&gt; 
&gt; Not sure if &quot;root&quot; is the right name, this is returning top level directory path of a working tree (git) or a working copy (svn), maybe top_level_path / root_path ?
&gt; Besides do we consider to make this an argument ?

The point of this is so that if a user constructs a repository at a location, we know what the root of the working tree is (basically, making it so that &quot;Git(os.path.dirname(__file__))&quot; works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684281</commentid>
    <comment_count>6</comment_count>
      <attachid>407630</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-31 15:26:17 -0700</bug_when>
    <thetext>Created attachment 407630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685046</commentid>
    <comment_count>7</comment_count>
      <attachid>407630</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-09-02 16:08:08 -0700</bug_when>
    <thetext>Comment on attachment 407630
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:32
&gt; +        self.cached = cached

What&apos;s the purpose of this variable? Why do we want a memoizer that does not cache result?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:37
&gt; +            timeout = kwargs.get(&apos;timeout&apos;, self.timeout)
&gt; +            cached = kwargs.get(&apos;cached&apos;, self.cached)

What happens if the wrapped function actually uses `timeout` and `cached` for different purpose?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:48
&gt; +            cache = function(*args)

Also, I think we should pass &apos;**kwargs&apos; here?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:53
&gt; +        decorator.clear = lambda: self.clear()

Why not just decorator.clear = self.clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685051</commentid>
    <comment_count>8</comment_count>
      <attachid>407630</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-02 16:19:12 -0700</bug_when>
    <thetext>Comment on attachment 407630
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:32
&gt;&gt; +        self.cached = cached
&gt; 
&gt; What&apos;s the purpose of this variable? Why do we want a memoizer that does not cache result?

We may want a memoizer which does not cache by default. That would allow you to have a function call which explicitly opted in to the cached behavior. It&apos;s basically the reverse of what I would imagine most usages of the class will be: default caching, except for some calls which opt out of caching.

We don&apos;t have to keep this, it just seemed silly not to given how decorator was implemented.

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:37
&gt;&gt; +            cached = kwargs.get(&apos;cached&apos;, self.cached)
&gt; 
&gt; What happens if the wrapped function actually uses `timeout` and `cached` for different purpose?

We would be passing those arguments in both spots.

Suppose we should probably pop them instead, so they don&apos;t get forwarded.

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:48
&gt;&gt; +            cache = function(*args)
&gt; 
&gt; Also, I think we should pass &apos;**kwargs&apos; here?

Oops, yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685065</commentid>
    <comment_count>9</comment_count>
      <attachid>407833</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-02 16:55:49 -0700</bug_when>
    <thetext>Created attachment 407833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685455</commentid>
    <comment_count>10</comment_count>
      <attachid>407833</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-09-03 15:02:42 -0700</bug_when>
    <thetext>Comment on attachment 407833
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:46
&gt; +            if cache:
&gt; +                return cache

Does this mean a function that returns None will always not cached even when &apos;None&apos; is a valid return of the function?
We may want to differentiate that in the code.

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/decorators_unittest.py:31
&gt; +

It would be great to test a function that throws an exception and the exception should be raised as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685466</commentid>
    <comment_count>11</comment_count>
      <attachid>407833</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-03 15:30:15 -0700</bug_when>
    <thetext>Comment on attachment 407833
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/decorators.py:46
&gt;&gt; +                return cache
&gt; 
&gt; Does this mean a function that returns None will always not cached even when &apos;None&apos; is a valid return of the function?
&gt; We may want to differentiate that in the code.

Oops! Yes it does</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685467</commentid>
    <comment_count>12</comment_count>
      <attachid>407923</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-03 15:40:54 -0700</bug_when>
    <thetext>Created attachment 407923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685792</commentid>
    <comment_count>13</comment_count>
      <attachid>408007</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-04 11:45:15 -0700</bug_when>
    <thetext>Created attachment 408007
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685807</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-04 12:12:21 -0700</bug_when>
    <thetext>Committed r266628: &lt;https://trac.webkit.org/changeset/266628&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408007.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407517</attachid>
            <date>2020-08-28 16:57:32 -0700</date>
            <delta_ts>2020-08-31 09:55:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215960-20200828165731.patch</filename>
            <type>text/plain</type>
            <size>36932</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjMxMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA4LTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoTWVtb2l6ZSk6IEFkZCBh
IG1lbW9pemUgY2FsbCB0aGF0IGNhbiBjYWNoZSBhIHJlc3BvbnNlIGZvciBhIHNldCBhbW91bnQg
b2YgdGltZQorICAgICAgICBPciBiZSBleHBsaWNpdGx5IGNsZWFyZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RNZW1vaXplKToKKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVt
cCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdpdCk6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBnaXQgY2hlY2tv
dXQuCisgICAgICAgIChHaXQuaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMg
YSBnaXQgY2hlY2tvdXQuCisgICAgICAgIChHaXQuX19pbml0X18pOiBJbml0aWFsaXplIGEgR2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0LnJvb3QpOiBSZXR1cm4gdGhlIHBhdGggZm9yIHRoZSBy
b290IG9mIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAoR2l0LmJyYW5jaCk6IFJldHVy
biB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgIChHaXQucmVtb3RlKTogUmV0dXJuIHRoZSB1
cmwgb2YgdGhlIHJlbW90ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKTogQmFzZSBj
bGFzcyBmb3IgYWxsIGxvY2FsIFNDTSBjaGVja291dHMuCisgICAgICAgIChTY20uRXhjZXB0aW9u
KToKKyAgICAgICAgKFNjbS5mcm9tX3BhdGgpOiBHaXZlbiBhIHBhdGgsIHJldHVybiBhbiBpbnN0
YW50aWF0ZWQgU1ZOIG9iamVjdCBmcm9tIHRoYXQKKyAgICAgICAgcGF0aCwgaWYgcG9zc2libGUu
CisgICAgICAgIChTY20uX19pbml0X18pOgorICAgICAgICAoU2NtLnJvb3QpOiBWaXJ0dWFsIGZ1
bmN0aW9uIGltcGxlbWVudGVkIGJ5IGNoaWxkcmVuLgorICAgICAgICAoU2NtLmJyYW5jaCk6IERp
dHRvLgorICAgICAgICAoU2NtLnJlbW90ZSk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weTogQWRkZWQuCisgICAg
ICAgIChTdm4pOiBPYmplY3QgcmVwcmVzZW50aW5nIGEgbG9jYWwgU3ZuIGNoZWNrb3V0LgorICAg
ICAgICAoU3ZuLmlzX2NoZWNrb3V0KTogQ2hlY2sgaWYgYSBnaXZlbiBwYXRoIGlzIGEgc3ZuIGNo
ZWNrb3V0LgorICAgICAgICAoU3ZuLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBhIFN2biBjaGVja291
dC4KKyAgICAgICAgKFN2bi5pbmZvKTogUmV0dXJuIHRoZSBjb250ZW50cyBvZiBzdm4gaW5mbyBh
cyBhIGRpY3Rpb25hcnkuCisgICAgICAgIChTdm4ucm9vdCk6IFJldHVybiB0aGUgcGF0aCBmb3Ig
dGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgIChTdm4uYnJhbmNoKTog
UmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKFN2bi5yZW1vdGUpOiBSZXR1cm4g
dGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3Mv
bG9jYWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHk6
IEFkZGVkLgorICAgICAgICAoR2l0KTogTW9jayBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAg
ICAgICAoR2l0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHk6IEFkZGVkLgorICAgICAgICAoU3Zu
KTogTW9jayBhIGxvY2FsIFNWTiByZXBvc2l0b3J5LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Q6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvX19pbml0X18ucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RHaXQpOgorICAgICAg
ICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc2NtX3Vu
aXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTY20pOgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RTdm4pOgorCiAyMDIwLTA4LTI4ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViSURMXSAndm9pZCcgdHlwZSBpcyBjaGFuZ2lu
ZyB0byAndW5kZWZpbmVkJwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lv
biAyNjYyOTQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGZyb20g
d2Via2l0Y29yZXB5LnRpbWVvdXQgaW1wb3J0IFRpbWVvdXQKIGZyb20gd2Via2l0Y29yZXB5LnN1
YnByb2Nlc3NfdXRpbHMgaW1wb3J0IFRpbWVvdXRFeHBpcmVkLCBDb21wbGV0ZWRQcm9jZXNzLCBy
dW4KIGZyb20gd2Via2l0Y29yZXB5Lm91dHB1dF9jYXB0dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJl
LCBPdXRwdXRDYXB0dXJlLCBPdXRwdXREdXBsaWNhdGUKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwg
NCwgMikKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQsIDMpCiAKIGZyb20gd2Via2l0Y29yZXB5LmF1
dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZlcnNpb25faW5m
byA+ICgzLCAwKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2RlY29yYXRvcnMucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVw
eS9kZWNvcmF0b3JzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitmcm9tIGNvbGxlY3Rp
b25zIGltcG9ydCBkZWZhdWx0ZGljdAorCisKK2NsYXNzIE1lbW9pemUob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdGltZW91dD1Ob25lLCBjYWNoZWQ9VHJ1ZSk6CisgICAgICAgIHNl
bGYuX2NhY2hlID0gZGVmYXVsdGRpY3QoZGljdCkKKyAgICAgICAgc2VsZi5fbGFzdF9jYWxsZWQg
PSBkZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAg
ICAgIHNlbGYuY2FjaGVkID0gY2FjaGVkCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuY3Rp
b24pOgorICAgICAgICBkZWYgZGVjb3JhdG9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAg
ICB0aW1lb3V0ID0ga3dhcmdzLmdldCgndGltZW91dCcsIHNlbGYudGltZW91dCkKKyAgICAgICAg
ICAgIGNhY2hlZCA9IGt3YXJncy5nZXQoJ2NhY2hlZCcsIHNlbGYuY2FjaGVkKQorICAgICAgICAg
ICAgbGFzdF9jYWxsZWQgPSBzZWxmLl9sYXN0X2NhbGxlZFtmdW5jdGlvbl0uZ2V0KGFyZ3MsIDAp
CisKKyAgICAgICAgICAgIGNhY2hlID0gc2VsZi5fY2FjaGVbZnVuY3Rpb25dLmdldChhcmdzLCBO
b25lKQorICAgICAgICAgICAgaWYgbm90IGNhY2hlZDoKKyAgICAgICAgICAgICAgICBjYWNoZSA9
IE5vbmUKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgYW5kIHRpbWVvdXQgPCB0aW1lLnRpbWUoKSAt
IGxhc3RfY2FsbGVkOgorICAgICAgICAgICAgICAgIGNhY2hlID0gTm9uZQorICAgICAgICAgICAg
aWYgY2FjaGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlCisKKyAgICAgICAgICAgIGNh
Y2hlID0gZnVuY3Rpb24oKmFyZ3MpCisgICAgICAgICAgICBzZWxmLl9sYXN0X2NhbGxlZFtmdW5j
dGlvbl1bYXJnc10gPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2VsZi5fY2FjaGVbZnVuY3Rp
b25dW2FyZ3NdID0gY2FjaGUKKyAgICAgICAgICAgIHJldHVybiBjYWNoZQorCisgICAgICAgIGRl
Y29yYXRvci5jbGVhciA9IGxhbWJkYTogc2VsZi5jbGVhcigpCisgICAgICAgIHJldHVybiBkZWNv
cmF0b3IKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5fY2FjaGUgPSBkZWZh
dWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLl9sYXN0X2NhbGxlZCA9IGRlZmF1bHRkaWN0KGRp
Y3QpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29y
ZXB5L3Rlc3RzL2RlY29yYXRvcnNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvZGVjb3JhdG9yc191bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBkZWNvcmF0b3JzLCBtb2NrcworCisKK2NsYXNzIFRlc3RNZW1vaXplKHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBjb3VudCA9IDAKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBA
ZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgaW5jcmVtZW50X2NhY2hlKCk6CisgICAgICAg
IFRlc3RNZW1vaXplLmNvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIFRlc3RNZW1vaXplLmNvdW50
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZShjYWNoZWQ9RmFs
c2UpCisgICAgZGVmIGluY3JlbWVudF9ub19jYWNoZSgpOgorICAgICAgICBUZXN0TWVtb2l6ZS5j
b3VudCArPSAxCisgICAgICAgIHJldHVybiBUZXN0TWVtb2l6ZS5jb3VudAorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUodGltZW91dD0xMCkKKyAgICBkZWYgaW5j
cmVtZW50X3RpbWVvdXRfY2FjaGUoKToKKyAgICAgICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQor
ICAgICAgICByZXR1cm4gVGVzdE1lbW9pemUuY291bnQKKworICAgIGRlZiB0ZXN0X2NhY2hlZChz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5UaW1lOgorICAgICAgICAgICAgVGVzdE1lbW9pemUu
Y291bnQgPSAwCisgICAgICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUuY2xlYXIo
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2Fj
aGUoKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVt
ZW50X2NhY2hlKCksIDEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9p
emUuaW5jcmVtZW50X2NhY2hlKGNhY2hlZD1GYWxzZSksIDIpCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNoZSgpLCAyKQorCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNoZSh0aW1lb3V0PTEw
KSwgMikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTUpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNoZSh0aW1lb3V0PTEwKSwgMykKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDMp
CisKKyAgICBkZWYgdGVzdF9ub3RfY2FjaGVkKHNlbGYpOgorICAgICAgICBUZXN0TWVtb2l6ZS5j
b3VudCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRf
bm9fY2FjaGUoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNy
ZW1lbnRfbm9fY2FjaGUoKSwgMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1v
aXplLmluY3JlbWVudF9ub19jYWNoZShjYWNoZWQ9VHJ1ZSksIDIpCisKKyAgICBkZWYgdGVzdF90
aW1lb3V0X2NhY2hlZChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5UaW1lOgorICAgICAgICAg
ICAgVGVzdE1lbW9pemUuY291bnQgPSAwCisgICAgICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1l
bnRfdGltZW91dF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRl
c3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisg
ICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRl
c3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICB0aW1l
LnNsZWVwKDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNy
ZW1lbnRfdGltZW91dF9jYWNoZSgpLCAyKQorICAgICAgICAgICAgdGltZS5zbGVlcCg4KQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9j
YWNoZSh0aW1lb3V0PTUpLCAzKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9u
IDI2NjI5NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Niw1ICs0Niw5IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAg
ICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRj
b3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12
ZXJzaW9uID0gVmVyc2lvbigwLCAwLCAxKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgMikKKwor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IG1v
Y2tzCisKIG5hbWUgPSAnd2Via2l0c2NtcHknCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9f
X2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworZnJvbSB3ZWJraXRzY21weS5sb2NhbC5zY20gaW1wb3J0IFNjbQorZnJvbSB3
ZWJraXRzY21weS5sb2NhbC5zdm4gaW1wb3J0IFN2bgorZnJvbSB3ZWJraXRzY21weS5sb2NhbC5n
aXQgaW1wb3J0IEdpdApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2Nh
bC9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBk
ZWNvcmF0b3JzCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsIGltcG9ydCBTY20KKworCitjbGFzcyBH
aXQoU2NtKToKKyAgICBleGVjdXRhYmxlID0gJy91c3IvYmluL2dpdCcKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBpc19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVu
KFtjbHMuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSwgY3dkPXBh
dGgsIGNhcHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNvZGUgPT0gMAorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzdXBlcihHaXQsIHNlbGYpLl9faW5pdF9fKHBhdGgp
CisgICAgICAgIGlmIG5vdCBzZWxmLnJvb3Q6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdQ
cm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5Jy5mb3JtYXQocGF0aCkpCisK
KyAgICBAcHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgcm9vdChz
ZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2Un
LCAnLS1zaG93LXRvcGxldmVsJ10sIGN3ZD1zZWxmLnBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUs
IGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0cmlwKCkK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2goc2VsZik6CisgICAgICAgIHJlc3VsdCA9
IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdIRUFE
J10sIGN3ZD1zZWxmLnJvb3QsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcp
CisgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5F
eGNlcHRpb24oJ0ZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9yIHt9Jy5mb3JtYXQoc2VsZi5y
b290KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0cmlwKCkKKworICAgIGRlZiBy
ZW1vdGUoc2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1
dGFibGUsICdyZW1vdGUnLCAnZ2V0LXVybCcsIG5hbWUgb3IgJ29yaWdpbiddLCBjd2Q9c2VsZi5y
b290LCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiBy
ZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdGYWls
ZWQgdG8gcmV0cmlldmUgcmVtb3RlIGZvciB7fScuZm9ybWF0KHNlbGYucm9vdCkpCisgICAgICAg
IHJldHVybiByZXN1bHQuc3Rkb3V0LnJzdHJpcCgpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2Nt
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIFNjbShvYmpl
Y3QpOgorICAgIGNsYXNzIEV4Y2VwdGlvbihSdW50aW1lRXJyb3IpOgorICAgICAgICBwYXNzCisK
KyAgICBleGVjdXRhYmxlID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21f
cGF0aChjbHMsIHBhdGgpOgorICAgICAgICBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAor
CisgICAgICAgIGlmIGxvY2FsLkdpdC5pc19jaGVja291dChwYXRoKToKKyAgICAgICAgICAgIHJl
dHVybiBsb2NhbC5HaXQocGF0aCkKKyAgICAgICAgaWYgbG9jYWwuU3ZuLmlzX2NoZWNrb3V0KHBh
dGgpOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsLlN2bihwYXRoKQorICAgICAgICByYWlzZSBP
U0Vycm9yKCd7fSBpcyBub3QgYSBrbm93biBTQ00gdHlwZScpCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcGF0aCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CisgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCcnKQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm9vdChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoKHNlbGYpOgor
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiByZW1vdGUoc2Vs
ZiwgbmFtZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9z
dm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4sIGRlY29yYXRvcnMKK2Zyb20gd2Vi
a2l0c2NtcHkubG9jYWwuc2NtIGltcG9ydCBTY20KKworCitjbGFzcyBTdm4oU2NtKToKKyAgICBl
eGVjdXRhYmxlID0gJy91c3IvbG9jYWwvYmluL3N2bicKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBpc19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVuKFtjbHMuZXhl
Y3V0YWJsZSwgJ2luZm8nXSwgY3dkPXBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNv
ZGUgPT0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzdXBlcihT
dm4sIHNlbGYpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIGlmIG5vdCBzZWxmLnJvb3Q6CisgICAg
ICAgICAgICByYWlzZSBPU0Vycm9yKCdQcm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIHN2biByZXBv
c2l0b3J5Jy5mb3JtYXQocGF0aCkpCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1G
YWxzZSkKKyAgICBkZWYgaW5mbyhzZWxmKToKKyAgICAgICAgaW5mb19yZXN1bHQgPSBydW4oW3Nl
bGYuZXhlY3V0YWJsZSwgJ2luZm8nXSwgY3dkPXNlbGYucGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1
ZSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgaWYgaW5mb19yZXN1bHQucmV0dXJuY29kZToK
KyAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGZv
ciBsaW5lIGluIGluZm9fcmVzdWx0LnN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBz
cGxpdCA9IGxpbmUuc3BsaXQoJzogJykKKyAgICAgICAgICAgIHJlc3VsdFtzcGxpdFswXV0gPSAn
OiAnLmpvaW4oc3BsaXRbMTpdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgcm9vdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5mbyhjYWNoZWQ9
VHJ1ZSkuZ2V0KCdXb3JraW5nIENvcHkgUm9vdCBQYXRoJykKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiBicmFuY2goc2VsZik6CisgICAgICAgIGxvY2FsX3BhdGggPSBzZWxmLnBhdGhbbGVuKHNl
bGYucm9vdCk6XQorICAgICAgICBpZiBsb2NhbF9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuaW5mbygpWydSZWxhdGl2ZSBVUkwnXVsyOi1sZW4obG9jYWxfcGF0aCldCisgICAgICAgIHJl
dHVybiBzZWxmLmluZm8oKVsnUmVsYXRpdmUgVVJMJ11bMjpdCisKKyAgICBkZWYgcmVtb3RlKHNl
bGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmluZm8oKVsnUmVwb3NpdG9yeSBS
b290J10KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitmcm9tIHdlYmtp
dHNjbXB5Lm1vY2tzIGltcG9ydCBsb2NhbApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9j
a3MvbG9jYWwvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwu
c3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwuZ2l0IGltcG9ydCBH
aXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9j
a3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdGNv
cmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisKKworY2xh
c3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPScv
LmludmFsaWQtZ2l0JywgYnJhbmNoPU5vbmUsIHJlbW90ZT1Ob25lKToKKyAgICAgICAgc2VsZi5w
YXRoID0gcGF0aAorICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaCBvciAnbWFzdGVyJworICAg
ICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZSBvciAnZ2l0QGdpdGh1Yi5vcmc6L21vY2sve30nLmZv
cm1hdChvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorCisgICAgICAgIHN1cGVyKEdpdCwgc2VsZiku
X19pbml0X18oCisgICAgICAgICAgICBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAg
ICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZl
bCcsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uPW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1
cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYu
cGF0aCksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nl
c3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsICdyZXYtcGFy
c2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBh
dGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1v
Y2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAs
CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYuYnJhbmNoKSwK
KyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0
ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3JlbW90ZScsICdnZXQt
dXJsJywgJy4qJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAg
ICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxl
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9J3t9XG4nLmZvcm1hdChzZWxmLnJlbW90ZSksCisgICAgICAgICAgICAgICAg
KSBpZiBhcmdzWzNdIGVsc2UgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybmNvZGU9MTI4LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ImZhdGFs
OiBObyBzdWNoIHJlbW90ZSAne30nXG4iLmZvcm1hdChhcmdzWzNdKSwKKyAgICAgICAgICAgICAg
ICApLAorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAg
ICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRo
LAorICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MSwKKyAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPSd1c2FnZTogZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdLi4uXG4nLAorICAgICAgICAgICAg
ICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAg
ICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGNvbXBsZXRpb249
bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9
MTI4LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9J2ZhdGFsOiBub3QgYSBnaXQgcmVwb3Np
dG9yeSAob3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludClcblN0b3BwaW5nIGF0IGZpbGVz
eXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCku
XG4nLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLAorICAgICAgICApCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9s
b2NhbC9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2Fs
L3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisjIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAorCisKK2NsYXNzIFN2biht
b2Nrcy5TdWJwcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD0nLy5pbnZhbGlk
LXN2bicsIGJyYW5jaD1Ob25lLCByZW1vdGU9Tm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBh
dGgKKyAgICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2ggb3IgJ3RydW5rJworICAgICAgICBzZWxm
LnJlbW90ZSA9IHJlbW90ZSBvciAnaHR0cHM6Ly9zdm4ubW9jay5vcmcvcmVwb3NpdG9yeS97fScu
Zm9ybWF0KG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxm
KS5fX2luaXRfXygKKyAgICAgICAgICAgIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAg
ICAgICAgICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsICdpbmZvJywKKyAgICAgICAgICAgICAgICBj
d2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoq
a3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuY29kZT0wLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9CisgICAgICAgICAgICAgICAg
ICAgICAgICAnUGF0aDogLlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1dvcmtpbmcgQ29w
eSBSb290IFBhdGg6IHtwYXRofVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1VSTDoge3Jl
bW90ZX0ve2JyYW5jaH17ZGlyZWN0b3J5fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1Jl
bGF0aXZlIFVSTDogXi97YnJhbmNofXtkaXJlY3Rvcnl9XG4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAnUmVwb3NpdG9yeSBSb290OiB7cmVtb3RlfVxuJy5mb3JtYXQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlyZWN0b3J5PWt3YXJncy5nZXQoJ2N3ZCcsICcnKVtsZW4oc2VsZi5w
YXRoKTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZT1zZWxmLnJlbW90ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmFuY2g9c2VsZi5icmFuY2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICApLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9j
ZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLlN2bi5leGVjdXRhYmxlLAorICAgICAg
ICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nr
cy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xLAor
ICAgICAgICAgICAgICAgICAgICBzdGRlcnI9IlR5cGUgJ3N2biBoZWxwJyBmb3IgdXNhZ2UuXG4i
LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91
dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0
aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTEsCisgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj0ic3ZuOiBFMTU1MDA3OiAne30nIGlzIG5vdCBhIHdvcmtpbmcgY29weVxuIi5m
b3JtYXQoa3dhcmdzLmdldCgnY3dkJykpLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg
ICksCisgICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9fX2luaXRfXy5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS90ZXN0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RHaXQodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRl
ZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2Vs
Zi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5T
Y20uZnJvbV9wYXRoKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0
ZWN0LmV4ZWN1dGFibGUsIGxvY2FsLkdpdC5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9v
dChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKToKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0aCkucm9vdCwgc2VsZi5w
YXRoKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAg
ICAgICAgICAgICAgIGxvY2FsLkdpdChvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdAor
CisgICAgZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdp
dChzZWxmLnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2Vs
Zi5wYXRoKS5icmFuY2gsICdtYXN0ZXInKQorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgor
ICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIHJlcG86CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLkdpdChzZWxmLnBhdGgpLnJlbW90ZSgpLCByZXBv
LnJlbW90ZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IHVuaXR0
ZXN0Citmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MKKworCitjbGFzcyBUZXN0
U2NtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL2RpcmVjdG9yeScKKwor
ICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5H
aXQoKSwgbW9ja3MubG9jYWwuU3ZuKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFp
c2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5w
YXRoKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2Vy
dFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2FsLlNjbShzZWxm
LnBhdGgpLnJvb3QKKworICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2Fs
LlNjbShzZWxmLnBhdGgpLmJyYW5jaAorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAg
ICAgICAgbG9jYWwuU2NtKHNlbGYucGF0aCkucmVtb3RlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RTdm4odW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0X2RldGVj
dGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgbW9j
a3MubG9jYWwuR2l0KCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5TY20uZnJvbV9wYXRo
KHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0LmV4ZWN1dGFi
bGUsIGxvY2FsLlN2bi5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAg
ICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucm9vdCwgc2VsZi5wYXRoKQorCisgICAg
ICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgICAg
IGxvY2FsLlN2bihvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdAorCisgICAgZGVmIHRl
c3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgp
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5Tdm4oc2VsZi5wYXRoKS5icmFu
Y2gsICd0cnVuaycpCisKKyAgICBkZWYgdGVzdF9yZW1vdGUoc2VsZik6CisgICAgICAgIHdpdGgg
bW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCkgYXMgcmVwbzoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucmVtb3RlKCksIHJlcG8ucmVtb3RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407608</attachid>
            <date>2020-08-31 09:55:26 -0700</date>
            <delta_ts>2020-08-31 15:26:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215960-20200831095525.patch</filename>
            <type>text/plain</type>
            <size>37610</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjM1NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA4LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoTWVtb2l6ZSk6IEFkZCBh
IG1lbW9pemUgY2FsbCB0aGF0IGNhbiBjYWNoZSBhIHJlc3BvbnNlIGZvciBhIHNldCBhbW91bnQg
b2YgdGltZQorICAgICAgICBPciBiZSBleHBsaWNpdGx5IGNsZWFyZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RNZW1vaXplKToKKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVt
cCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdpdCk6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBnaXQgY2hlY2tv
dXQuCisgICAgICAgIChHaXQuaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMg
YSBnaXQgY2hlY2tvdXQuCisgICAgICAgIChHaXQuX19pbml0X18pOiBJbml0aWFsaXplIGEgR2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0LnJvb3QpOiBSZXR1cm4gdGhlIHBhdGggZm9yIHRoZSBy
b290IG9mIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAoR2l0LmJyYW5jaCk6IFJldHVy
biB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgIChHaXQucmVtb3RlKTogUmV0dXJuIHRoZSB1
cmwgb2YgdGhlIHJlbW90ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKTogQmFzZSBj
bGFzcyBmb3IgYWxsIGxvY2FsIFNDTSBjaGVja291dHMuCisgICAgICAgIChTY20uRXhjZXB0aW9u
KToKKyAgICAgICAgKFNjbS5mcm9tX3BhdGgpOiBHaXZlbiBhIHBhdGgsIHJldHVybiBhbiBpbnN0
YW50aWF0ZWQgU1ZOIG9iamVjdCBmcm9tIHRoYXQKKyAgICAgICAgcGF0aCwgaWYgcG9zc2libGUu
CisgICAgICAgIChTY20uX19pbml0X18pOgorICAgICAgICAoU2NtLnJvb3QpOiBWaXJ0dWFsIGZ1
bmN0aW9uIGltcGxlbWVudGVkIGJ5IGNoaWxkcmVuLgorICAgICAgICAoU2NtLmJyYW5jaCk6IERp
dHRvLgorICAgICAgICAoU2NtLnJlbW90ZSk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weTogQWRkZWQuCisgICAg
ICAgIChTdm4pOiBPYmplY3QgcmVwcmVzZW50aW5nIGEgbG9jYWwgU3ZuIGNoZWNrb3V0LgorICAg
ICAgICAoU3ZuLmlzX2NoZWNrb3V0KTogQ2hlY2sgaWYgYSBnaXZlbiBwYXRoIGlzIGEgc3ZuIGNo
ZWNrb3V0LgorICAgICAgICAoU3ZuLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBhIFN2biBjaGVja291
dC4KKyAgICAgICAgKFN2bi5pbmZvKTogUmV0dXJuIHRoZSBjb250ZW50cyBvZiBzdm4gaW5mbyBh
cyBhIGRpY3Rpb25hcnkuCisgICAgICAgIChTdm4ucm9vdCk6IFJldHVybiB0aGUgcGF0aCBmb3Ig
dGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgIChTdm4uYnJhbmNoKTog
UmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKFN2bi5yZW1vdGUpOiBSZXR1cm4g
dGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weTogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3Mv
bG9jYWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHk6
IEFkZGVkLgorICAgICAgICAoR2l0KTogTW9jayBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAg
ICAgICAoR2l0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHk6IEFkZGVkLgorICAgICAgICAoU3Zu
KTogTW9jayBhIGxvY2FsIFNWTiByZXBvc2l0b3J5LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Q6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvX19pbml0X18ucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RHaXQpOgorICAgICAg
ICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc2NtX3Vu
aXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTY20pOgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RTdm4pOgorCiAyMDIwLTA4LTMxICBSb2IgQnVpcyAgPHJidWlz
QGlnYWxpYS5jb20+CiAKICAgICAgICAgQ29udmVydCBydW50aW1lIGZsYWcgdG8gc2V0dGluZyBm
b3IgbGF6eSBpbWFnZSBsb2FkaW5nCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJl
dmlzaW9uIDI2NjM1NikKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
ZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRjb3Jl
cHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nl
c3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNh
cHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lv
bigwLCA0LCAyKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMykKIAogZnJvbSB3ZWJraXRjb3Jl
cHkuYXV0b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lv
bl9pbmZvID4gKDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9kZWNvcmF0b3JzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0
Y29yZXB5L2RlY29yYXRvcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKK2Zyb20gY29s
bGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKKworY2xhc3MgTWVtb2l6ZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0PU5vbmUsIGNhY2hlZD1UcnVlKToKKyAgICAg
ICAgc2VsZi5fY2FjaGUgPSBkZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLl9sYXN0X2Nh
bGxlZCA9IGRlZmF1bHRkaWN0KGRpY3QpCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQK
KyAgICAgICAgc2VsZi5jYWNoZWQgPSBjYWNoZWQKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBm
dW5jdGlvbik6CisgICAgICAgIGRlZiBkZWNvcmF0b3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgICAgIHRpbWVvdXQgPSBrd2FyZ3MuZ2V0KCd0aW1lb3V0Jywgc2VsZi50aW1lb3V0KQorICAg
ICAgICAgICAgY2FjaGVkID0ga3dhcmdzLmdldCgnY2FjaGVkJywgc2VsZi5jYWNoZWQpCisgICAg
ICAgICAgICBsYXN0X2NhbGxlZCA9IHNlbGYuX2xhc3RfY2FsbGVkW2Z1bmN0aW9uXS5nZXQoYXJn
cywgMCkKKworICAgICAgICAgICAgY2FjaGUgPSBzZWxmLl9jYWNoZVtmdW5jdGlvbl0uZ2V0KGFy
Z3MsIE5vbmUpCisgICAgICAgICAgICBpZiBub3QgY2FjaGVkOgorICAgICAgICAgICAgICAgIGNh
Y2hlID0gTm9uZQorICAgICAgICAgICAgaWYgdGltZW91dCBhbmQgdGltZW91dCA8IHRpbWUudGlt
ZSgpIC0gbGFzdF9jYWxsZWQ6CisgICAgICAgICAgICAgICAgY2FjaGUgPSBOb25lCisgICAgICAg
ICAgICBpZiBjYWNoZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUKKworICAgICAgICAg
ICAgY2FjaGUgPSBmdW5jdGlvbigqYXJncykKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfY2FsbGVk
W2Z1bmN0aW9uXVthcmdzXSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtm
dW5jdGlvbl1bYXJnc10gPSBjYWNoZQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlCisKKyAgICAg
ICAgZGVjb3JhdG9yLmNsZWFyID0gbGFtYmRhOiBzZWxmLmNsZWFyKCkKKyAgICAgICAgcmV0dXJu
IGRlY29yYXRvcgorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWNoZSA9
IGRlZmF1bHRkaWN0KGRpY3QpCisgICAgICAgIHNlbGYuX2xhc3RfY2FsbGVkID0gZGVmYXVsdGRp
Y3QoZGljdCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJr
aXRjb3JlcHkvdGVzdHMvZGVjb3JhdG9yc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL2RlY29y
YXRvcnNfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3JzX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJr
aXRjb3JlcHkgaW1wb3J0IGRlY29yYXRvcnMsIG1vY2tzCisKKworY2xhc3MgVGVzdE1lbW9pemUo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNvdW50ID0gMAorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBpbmNyZW1lbnRfY2FjaGUoKToKKyAg
ICAgICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQorICAgICAgICByZXR1cm4gVGVzdE1lbW9pemUu
Y291bnQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hl
ZD1GYWxzZSkKKyAgICBkZWYgaW5jcmVtZW50X25vX2NhY2hlKCk6CisgICAgICAgIFRlc3RNZW1v
aXplLmNvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIFRlc3RNZW1vaXplLmNvdW50CisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSh0aW1lb3V0PTEwKQorICAgIGRl
ZiBpbmNyZW1lbnRfdGltZW91dF9jYWNoZSgpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCAr
PSAxCisgICAgICAgIHJldHVybiBUZXN0TWVtb2l6ZS5jb3VudAorCisgICAgZGVmIHRlc3RfY2Fj
aGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlRpbWU6CisgICAgICAgICAgICBUZXN0TWVt
b2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAgIFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNoZS5j
bGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVu
dF9jYWNoZSgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5p
bmNyZW1lbnRfY2FjaGUoKSwgMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0
TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoY2FjaGVkPUZhbHNlKSwgMikKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDIpCisKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKHRpbWVv
dXQ9MTApLCAyKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxNSkKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKHRpbWVvdXQ9MTApLCAzKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUo
KSwgMykKKworICAgIGRlZiB0ZXN0X25vdF9jYWNoZWQoc2VsZik6CisgICAgICAgIFRlc3RNZW1v
aXplLmNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3Jl
bWVudF9ub19jYWNoZSgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXpl
LmluY3JlbWVudF9ub19jYWNoZSgpLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVz
dE1lbW9pemUuaW5jcmVtZW50X25vX2NhY2hlKGNhY2hlZD1UcnVlKSwgMikKKworICAgIGRlZiB0
ZXN0X3RpbWVvdXRfY2FjaGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlRpbWU6CisgICAg
ICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAgIFRlc3RNZW1vaXplLmlu
Y3JlbWVudF90aW1lb3V0X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwgMSkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwg
MSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwgMSkKKyAgICAgICAgICAg
IHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXpl
LmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDgp
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1l
b3V0X2NhY2hlKHRpbWVvdXQ9NSksIDMpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjY2MzU2KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDEzIEBAIHNldHVwKAogICAgIGF1dGhvcj0nSm9uYXRoYW4gQmVkYXJkJywKICAgICBhdXRo
b3JfZW1haWw9J2piZWRhcmRAYXBwbGUuY29tJywKICAgICBsaWNlbnNlPSdNb2RpZmllZCBCU0Qn
LAotICAgIHBhY2thZ2VzPVsnd2Via2l0c2NtcHknXSwKKyAgICBwYWNrYWdlcz1bCisgICAgICAg
ICd3ZWJraXRzY21weScsCisgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCisgICAgICAgICd3
ZWJraXRzY21weS5tb2NrcycsCisgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcsCisg
ICAgICAgICd3ZWJraXRzY21weS50ZXN0JywKKyAgICBdLAogICAgIGluc3RhbGxfcmVxdWlyZXM9
Wyd3ZWJraXRjb3JlcHknXSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgIHpp
cF9zYWZlPUZhbHNlLApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2NjM1
NikKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC00Niw1ICs0Niw5IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBs
ZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkg
LS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9u
ID0gVmVyc2lvbigwLCAwLCAxKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgMikKKworZnJvbSB3
ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IG1vY2tzCisK
IG5hbWUgPSAnd2Via2l0c2NtcHknCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRf
Xy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworZnJvbSB3ZWJraXRzY21weS5sb2NhbC5zY20gaW1wb3J0IFNjbQorZnJvbSB3ZWJraXRz
Y21weS5sb2NhbC5zdm4gaW1wb3J0IFN2bgorZnJvbSB3ZWJraXRzY21weS5sb2NhbC5naXQgaW1w
b3J0IEdpdApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0
b3JzCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsIGltcG9ydCBTY20KKworCitjbGFzcyBHaXQoU2Nt
KToKKyAgICBleGVjdXRhYmxlID0gJy91c3IvYmluL2dpdCcKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBpc19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVuKFtjbHMu
ZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSwgY3dkPXBhdGgsIGNh
cHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNvZGUgPT0gMAorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBhdGgpOgorICAgICAgICBzdXBlcihHaXQsIHNlbGYpLl9faW5pdF9fKHBhdGgpCisgICAg
ICAgIGlmIG5vdCBzZWxmLnJvb3Q6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdQcm92aWRl
ZCBwYXRoIHt9IGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5Jy5mb3JtYXQocGF0aCkpCisKKyAgICBA
cHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgcm9vdChzZWxmKToK
KyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1z
aG93LXRvcGxldmVsJ10sIGN3ZD1zZWxmLnBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29k
aW5nPSd1dGYtOCcpCisgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0cmlwKCkKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2goc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bihb
c2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10sIGN3
ZD1zZWxmLnJvb3QsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAg
ICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRp
b24oJ0ZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9yIHt9Jy5mb3JtYXQoc2VsZi5yb290KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0cmlwKCkKKworICAgIGRlZiByZW1vdGUo
c2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUs
ICdyZW1vdGUnLCAnZ2V0LXVybCcsIG5hbWUgb3IgJ29yaWdpbiddLCBjd2Q9c2VsZi5yb290LCBj
YXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiByZXN1bHQu
cmV0dXJuY29kZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8g
cmV0cmlldmUgcmVtb3RlIGZvciB7fScuZm9ybWF0KHNlbGYucm9vdCkpCisgICAgICAgIHJldHVy
biByZXN1bHQuc3Rkb3V0LnJzdHJpcCgpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsL3NjbS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIFNjbShvYmplY3QpOgor
ICAgIGNsYXNzIEV4Y2VwdGlvbihSdW50aW1lRXJyb3IpOgorICAgICAgICBwYXNzCisKKyAgICBl
eGVjdXRhYmxlID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fcGF0aChj
bHMsIHBhdGgpOgorICAgICAgICBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAorCisgICAg
ICAgIGlmIGxvY2FsLkdpdC5pc19jaGVja291dChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBs
b2NhbC5HaXQocGF0aCkKKyAgICAgICAgaWYgbG9jYWwuU3ZuLmlzX2NoZWNrb3V0KHBhdGgpOgor
ICAgICAgICAgICAgcmV0dXJuIGxvY2FsLlN2bihwYXRoKQorICAgICAgICByYWlzZSBPU0Vycm9y
KCd7fSBpcyBub3QgYSBrbm93biBTQ00gdHlwZScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cGF0aCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CisgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCcnKQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgcm9vdChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcigpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoKHNlbGYpOgorICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiByZW1vdGUoc2VsZiwgbmFt
ZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
K2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4sIGRlY29yYXRvcnMKK2Zyb20gd2Via2l0c2Nt
cHkubG9jYWwuc2NtIGltcG9ydCBTY20KKworCitjbGFzcyBTdm4oU2NtKToKKyAgICBleGVjdXRh
YmxlID0gJy91c3IvbG9jYWwvYmluL3N2bicKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBp
c19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVuKFtjbHMuZXhlY3V0YWJs
ZSwgJ2luZm8nXSwgY3dkPXBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNvZGUgPT0g
MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzdXBlcihTdm4sIHNl
bGYpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIGlmIG5vdCBzZWxmLnJvb3Q6CisgICAgICAgICAg
ICByYWlzZSBPU0Vycm9yKCdQcm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIHN2biByZXBvc2l0b3J5
Jy5mb3JtYXQocGF0aCkpCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1GYWxzZSkK
KyAgICBkZWYgaW5mbyhzZWxmKToKKyAgICAgICAgaW5mb19yZXN1bHQgPSBydW4oW3NlbGYuZXhl
Y3V0YWJsZSwgJ2luZm8nXSwgY3dkPXNlbGYucGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5j
b2Rpbmc9J3V0Zi04JykKKyAgICAgICAgaWYgaW5mb19yZXN1bHQucmV0dXJuY29kZToKKyAgICAg
ICAgICAgIHJldHVybiB7fQorCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGZvciBsaW5l
IGluIGluZm9fcmVzdWx0LnN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBzcGxpdCA9
IGxpbmUuc3BsaXQoJzogJykKKyAgICAgICAgICAgIHJlc3VsdFtzcGxpdFswXV0gPSAnOiAnLmpv
aW4oc3BsaXRbMTpdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAg
ICBkZWYgcm9vdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5mbyhjYWNoZWQ9VHJ1ZSku
Z2V0KCdXb3JraW5nIENvcHkgUm9vdCBQYXRoJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBi
cmFuY2goc2VsZik6CisgICAgICAgIGxvY2FsX3BhdGggPSBzZWxmLnBhdGhbbGVuKHNlbGYucm9v
dCk6XQorICAgICAgICBpZiBsb2NhbF9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5m
bygpWydSZWxhdGl2ZSBVUkwnXVsyOi1sZW4obG9jYWxfcGF0aCldCisgICAgICAgIHJldHVybiBz
ZWxmLmluZm8oKVsnUmVsYXRpdmUgVVJMJ11bMjpdCisKKyAgICBkZWYgcmVtb3RlKHNlbGYsIG5h
bWU9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmluZm8oKVsnUmVwb3NpdG9yeSBSb290J10K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19f
aW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitmcm9tIHdlYmtpdHNjbXB5
Lm1vY2tzIGltcG9ydCBsb2NhbApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9j
YWwvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwuc3ZuIGlt
cG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwuZ2l0IGltcG9ydCBHaXQKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tz
L2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9j
YWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdGNvcmVweSBp
bXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisKKworY2xhc3MgR2l0
KG1vY2tzLlN1YnByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPScvLmludmFs
aWQtZ2l0JywgYnJhbmNoPU5vbmUsIHJlbW90ZT1Ob25lKToKKyAgICAgICAgc2VsZi5wYXRoID0g
cGF0aAorICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaCBvciAnbWFzdGVyJworICAgICAgICBz
ZWxmLnJlbW90ZSA9IHJlbW90ZSBvciAnZ2l0QGdpdGh1Yi5vcmc6L21vY2sve30nLmZvcm1hdChv
cy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorCisgICAgICAgIHN1cGVyKEdpdCwgc2VsZikuX19pbml0
X18oCisgICAgICAgICAgICBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAg
IGxvY2FsLkdpdC5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCcsCisg
ICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
PW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2Rl
PTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYucGF0aCks
CisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91
dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAn
LS1hYmJyZXYtcmVmJywgJ0hFQUQnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlBy
b2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAg
ICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYuYnJhbmNoKSwKKyAgICAg
ICAgICAgICAgICApLAorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAg
ICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3JlbW90ZScsICdnZXQtdXJsJywg
Jy4qJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGdl
bmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgICAgICAgICBz
dGRvdXQ9J3t9XG4nLmZvcm1hdChzZWxmLnJlbW90ZSksCisgICAgICAgICAgICAgICAgKSBpZiBh
cmdzWzNdIGVsc2UgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAg
IHJldHVybmNvZGU9MTI4LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ImZhdGFsOiBObyBz
dWNoIHJlbW90ZSAne30nXG4iLmZvcm1hdChhcmdzWzNdKSwKKyAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBs
b2NhbC5HaXQuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybmNvZGU9MSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPSd1
c2FnZTogZ2l0IFstLXZlcnNpb25dIFstLWhlbHBdLi4uXG4nLAorICAgICAgICAgICAgICAgICks
CisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAg
IGxvY2FsLkdpdC5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MTI4LAor
ICAgICAgICAgICAgICAgICAgICBzdGRlcnI9J2ZhdGFsOiBub3QgYSBnaXQgcmVwb3NpdG9yeSAo
b3IgYW55IHBhcmVudCB1cCB0byBtb3VudCBwb2ludClcblN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0g
Ym91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuXG4nLAor
ICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLAorICAgICAgICApCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9z
dm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL3N2bi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1v
Y2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAorCisKK2NsYXNzIFN2bihtb2Nrcy5T
dWJwcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD0nLy5pbnZhbGlkLXN2bics
IGJyYW5jaD1Ob25lLCByZW1vdGU9Tm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAg
ICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2ggb3IgJ3RydW5rJworICAgICAgICBzZWxmLnJlbW90
ZSA9IHJlbW90ZSBvciAnaHR0cHM6Ly9zdm4ubW9jay5vcmcvcmVwb3NpdG9yeS97fScuZm9ybWF0
KG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2lu
aXRfXygKKyAgICAgICAgICAgIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAg
ICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsICdpbmZvJywKKyAgICAgICAgICAgICAgICBjd2Q9c2Vs
Zi5wYXRoLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdz
OiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29k
ZT0wLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9CisgICAgICAgICAgICAgICAgICAgICAg
ICAnUGF0aDogLlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1dvcmtpbmcgQ29weSBSb290
IFBhdGg6IHtwYXRofVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1VSTDoge3JlbW90ZX0v
e2JyYW5jaH17ZGlyZWN0b3J5fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1JlbGF0aXZl
IFVSTDogXi97YnJhbmNofXtkaXJlY3Rvcnl9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAn
UmVwb3NpdG9yeSBSb290OiB7cmVtb3RlfVxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0b3J5PWt3YXJncy5nZXQoJ2N3ZCcsICcnKVtsZW4oc2VsZi5wYXRoKTpd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbW90ZT1zZWxmLnJlbW90ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2g9c2VsZi5icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAp
LAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJv
dXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLlN2bi5leGVjdXRhYmxlLAorICAgICAgICAgICAg
ICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9j
ZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xLAorICAgICAg
ICAgICAgICAgICAgICBzdGRlcnI9IlR5cGUgJ3N2biBoZWxwJyBmb3IgdXNhZ2UuXG4iLAorICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisg
ICAgICAgICAgICAgICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTEsCisgICAgICAgICAgICAgICAgICAgIHN0
ZGVycj0ic3ZuOiBFMTU1MDA3OiAne30nIGlzIG5vdCBhIHdvcmtpbmcgY29weVxuIi5mb3JtYXQo
a3dhcmdzLmdldCgnY3dkJykpLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksCisg
ICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3QvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9fX2luaXRfXy5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90
ZXN0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RHaXQodW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0
X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRo
KSwgbW9ja3MubG9jYWwuU3ZuKCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5TY20uZnJv
bV9wYXRoKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0LmV4
ZWN1dGFibGUsIGxvY2FsLkdpdC5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxm
KToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0aCkucm9vdCwgc2VsZi5wYXRoKQor
CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAg
ICAgICAgIGxvY2FsLkdpdChvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdAorCisgICAg
ZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxm
LnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2VsZi5wYXRo
KS5icmFuY2gsICdtYXN0ZXInKQorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIHJlcG86CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxvY2FsLkdpdChzZWxmLnBhdGgpLnJlbW90ZSgpLCByZXBvLnJlbW90
ZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IHVuaXR0ZXN0Citm
cm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MKKworCitjbGFzcyBUZXN0U2NtKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL2RpcmVjdG9yeScKKworICAgIGRl
ZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwg
bW9ja3MubG9jYWwuU3ZuKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9T
RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKQor
CisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNl
cyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2FsLlNjbShzZWxmLnBhdGgp
LnJvb3QKKworICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2FsLlNjbShz
ZWxmLnBhdGgpLmJyYW5jaAorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAgICB3
aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAg
bG9jYWwuU2NtKHNlbGYucGF0aCkucmVtb3RlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3Qvc3ZuX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0c2NtcHkgaW1w
b3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RTdm4odW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgbW9ja3MubG9j
YWwuR2l0KCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYu
cGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0LmV4ZWN1dGFibGUsIGxv
Y2FsLlN2bi5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucm9vdCwgc2VsZi5wYXRoKQorCisgICAgICAgICAg
ICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvY2Fs
LlN2bihvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdAorCisgICAgZGVmIHRlc3RfYnJh
bmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5Tdm4oc2VsZi5wYXRoKS5icmFuY2gsICd0
cnVuaycpCisKKyAgICBkZWYgdGVzdF9yZW1vdGUoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3Mu
bG9jYWwuU3ZuKHNlbGYucGF0aCkgYXMgcmVwbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucmVtb3RlKCksIHJlcG8ucmVtb3RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407630</attachid>
            <date>2020-08-31 15:26:17 -0700</date>
            <delta_ts>2020-09-02 16:55:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215960-20200831152616.patch</filename>
            <type>text/plain</type>
            <size>38819</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjM2NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA4LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoTWVtb2l6ZSk6IEFkZCBh
IG1lbW9pemUgY2FsbCB0aGF0IGNhbiBjYWNoZSBhIHJlc3BvbnNlIGZvciBhIHNldCBhbW91bnQg
b2YgdGltZQorICAgICAgICBPciBiZSBleHBsaWNpdGx5IGNsZWFyZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RNZW1vaXplKToKKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVt
cCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdpdCk6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBnaXQgY2hlY2tv
dXQuCisgICAgICAgIChHaXQuaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMg
YSBnaXQgY2hlY2tvdXQuCisgICAgICAgIChHaXQuX19pbml0X18pOiBJbml0aWFsaXplIGEgR2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0LnJvb3RfcGF0aCk6IFJldHVybiB0aGUgcGF0aCBmb3Ig
dGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXQuYnJhbmNoKTog
UmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKEdpdC5yZW1vdGUpOiBSZXR1cm4g
dGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weTogQWRkZWQuCisgICAgICAgIChTY20pOiBC
YXNlIGNsYXNzIGZvciBhbGwgbG9jYWwgU0NNIGNoZWNrb3V0cy4KKyAgICAgICAgKFNjbS5FeGNl
cHRpb24pOgorICAgICAgICAoU2NtLmZyb21fcGF0aCk6IEdpdmVuIGEgcGF0aCwgcmV0dXJuIGFu
IGluc3RhbnRpYXRlZCBTVk4gb2JqZWN0IGZyb20gdGhhdAorICAgICAgICBwYXRoLCBpZiBwb3Nz
aWJsZS4KKyAgICAgICAgKFNjbS5fX2luaXRfXyk6CisgICAgICAgIChTY20ucm9vdF9wYXRoKTog
VmlydHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBieSBjaGlsZHJlbi4KKyAgICAgICAgKFNjbS5i
cmFuY2gpOiBEaXR0by4KKyAgICAgICAgKFNjbS5yZW1vdGUpOiBEaXR0by4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHk6IEFk
ZGVkLgorICAgICAgICAoU3ZuKTogT2JqZWN0IHJlcHJlc2VudGluZyBhIGxvY2FsIFN2biBjaGVj
a291dC4KKyAgICAgICAgKFN2bi5pc19jaGVja291dCk6IENoZWNrIGlmIGEgZ2l2ZW4gcGF0aCBp
cyBhIHN2biBjaGVja291dC4KKyAgICAgICAgKFN2bi5fX2luaXRfXyk6IEluaXRpYWxpemUgYSBT
dm4gY2hlY2tvdXQuCisgICAgICAgIChTdm4uaW5mbyk6IFJldHVybiB0aGUgY29udGVudHMgb2Yg
c3ZuIGluZm8gYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICAoU3ZuLnJvb3RfcGF0aCk6IFJldHVy
biB0aGUgcGF0aCBmb3IgdGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAg
IChTdm4uYnJhbmNoKTogUmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKFN2bi5y
ZW1vdGUpOiBSZXR1cm4gdGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzOiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvbG9jYWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHk6IEFkZGVkLgorICAgICAgICAoR2l0KTogTW9jayBhIGxvY2FsIEdpdCBy
ZXBvc2l0b3J5LgorICAgICAgICAoR2l0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHk6IEFkZGVk
LgorICAgICAgICAoU3ZuKTogTW9jayBhIGxvY2FsIFNWTiByZXBvc2l0b3J5LgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Q6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRl
c3RHaXQpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTY20pOgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3Zu
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTdm4pOgorCiAyMDIwLTA4LTMxICBI
ZWN0b3IgTG9wZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcmV2ZXJ0aW5nIHIyNjYzNTAuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI2NjM2NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRj
b3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFBy
b2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dl
ckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVy
c2lvbigwLCA0LCAyKQordmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMykKIAogZnJvbSB3ZWJraXRj
b3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVy
c2lvbl9pbmZvID4gKDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9kZWNvcmF0b3JzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKK2Zyb20g
Y29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKKworY2xhc3MgTWVtb2l6ZShvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0PU5vbmUsIGNhY2hlZD1UcnVlKToKKyAg
ICAgICAgc2VsZi5fY2FjaGUgPSBkZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLl9sYXN0
X2NhbGxlZCA9IGRlZmF1bHRkaWN0KGRpY3QpCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVv
dXQKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBjYWNoZWQKKworICAgIGRlZiBfX2NhbGxfXyhzZWxm
LCBmdW5jdGlvbik6CisgICAgICAgIGRlZiBkZWNvcmF0b3IoKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAgICAgICAgIHRpbWVvdXQgPSBrd2FyZ3MuZ2V0KCd0aW1lb3V0Jywgc2VsZi50aW1lb3V0KQor
ICAgICAgICAgICAgY2FjaGVkID0ga3dhcmdzLmdldCgnY2FjaGVkJywgc2VsZi5jYWNoZWQpCisg
ICAgICAgICAgICBsYXN0X2NhbGxlZCA9IHNlbGYuX2xhc3RfY2FsbGVkW2Z1bmN0aW9uXS5nZXQo
YXJncywgMCkKKworICAgICAgICAgICAgY2FjaGUgPSBzZWxmLl9jYWNoZVtmdW5jdGlvbl0uZ2V0
KGFyZ3MsIE5vbmUpCisgICAgICAgICAgICBpZiBub3QgY2FjaGVkOgorICAgICAgICAgICAgICAg
IGNhY2hlID0gTm9uZQorICAgICAgICAgICAgaWYgdGltZW91dCBhbmQgdGltZW91dCA8IHRpbWUu
dGltZSgpIC0gbGFzdF9jYWxsZWQ6CisgICAgICAgICAgICAgICAgY2FjaGUgPSBOb25lCisgICAg
ICAgICAgICBpZiBjYWNoZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUKKworICAgICAg
ICAgICAgY2FjaGUgPSBmdW5jdGlvbigqYXJncykKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfY2Fs
bGVkW2Z1bmN0aW9uXVthcmdzXSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLl9jYWNo
ZVtmdW5jdGlvbl1bYXJnc10gPSBjYWNoZQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlCisKKyAg
ICAgICAgZGVjb3JhdG9yLmNsZWFyID0gbGFtYmRhOiBzZWxmLmNsZWFyKCkKKyAgICAgICAgcmV0
dXJuIGRlY29yYXRvcgorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWNo
ZSA9IGRlZmF1bHRkaWN0KGRpY3QpCisgICAgICAgIHNlbGYuX2xhc3RfY2FsbGVkID0gZGVmYXVs
dGRpY3QoZGljdCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvdGVzdHMvZGVjb3JhdG9yc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL2Rl
Y29yYXRvcnNfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3JzX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3
ZWJraXRjb3JlcHkgaW1wb3J0IGRlY29yYXRvcnMsIG1vY2tzCisKKworY2xhc3MgVGVzdE1lbW9p
emUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNvdW50ID0gMAorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBpbmNyZW1lbnRfY2FjaGUoKToK
KyAgICAgICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQorICAgICAgICByZXR1cm4gVGVzdE1lbW9p
emUuY291bnQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNh
Y2hlZD1GYWxzZSkKKyAgICBkZWYgaW5jcmVtZW50X25vX2NhY2hlKCk6CisgICAgICAgIFRlc3RN
ZW1vaXplLmNvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIFRlc3RNZW1vaXplLmNvdW50CisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSh0aW1lb3V0PTEwKQorICAg
IGRlZiBpbmNyZW1lbnRfdGltZW91dF9jYWNoZSgpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3Vu
dCArPSAxCisgICAgICAgIHJldHVybiBUZXN0TWVtb2l6ZS5jb3VudAorCisgICAgZGVmIHRlc3Rf
Y2FjaGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlRpbWU6CisgICAgICAgICAgICBUZXN0
TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAgIFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNo
ZS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3Jl
bWVudF9jYWNoZSgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6
ZS5pbmNyZW1lbnRfY2FjaGUoKSwgMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChU
ZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoY2FjaGVkPUZhbHNlKSwgMikKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDIpCisKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKHRp
bWVvdXQ9MTApLCAyKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxNSkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKHRpbWVvdXQ9MTApLCAz
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2Fj
aGUoKSwgMykKKworICAgIGRlZiB0ZXN0X25vdF9jYWNoZWQoc2VsZik6CisgICAgICAgIFRlc3RN
ZW1vaXplLmNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmlu
Y3JlbWVudF9ub19jYWNoZSgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1v
aXplLmluY3JlbWVudF9ub19jYWNoZSgpLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
VGVzdE1lbW9pemUuaW5jcmVtZW50X25vX2NhY2hlKGNhY2hlZD1UcnVlKSwgMikKKworICAgIGRl
ZiB0ZXN0X3RpbWVvdXRfY2FjaGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlRpbWU6Cisg
ICAgICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAgIFRlc3RNZW1vaXpl
LmluY3JlbWVudF90aW1lb3V0X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwgMSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUo
KSwgMSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwgMSkKKyAgICAgICAg
ICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1v
aXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDIpCisgICAgICAgICAgICB0aW1lLnNsZWVw
KDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90
aW1lb3V0X2NhY2hlKHRpbWVvdXQ9NSksIDMpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjY2MzY3KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDcgKzQ4LDEzIEBAIHNldHVwKAogICAgIGF1dGhvcj0nSm9uYXRoYW4gQmVkYXJkJywKICAgICBh
dXRob3JfZW1haWw9J2piZWRhcmRAYXBwbGUuY29tJywKICAgICBsaWNlbnNlPSdNb2RpZmllZCBC
U0QnLAotICAgIHBhY2thZ2VzPVsnd2Via2l0c2NtcHknXSwKKyAgICBwYWNrYWdlcz1bCisgICAg
ICAgICd3ZWJraXRzY21weScsCisgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCisgICAgICAg
ICd3ZWJraXRzY21weS5tb2NrcycsCisgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcs
CisgICAgICAgICd3ZWJraXRzY21weS50ZXN0JywKKyAgICBdLAogICAgIGluc3RhbGxfcmVxdWly
ZXM9Wyd3ZWJraXRjb3JlcHknXSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAg
IHppcF9zYWZlPUZhbHNlLApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2
NjM2NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Niw1ICs0Niw5IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAg
IlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3Jl
cHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJz
aW9uID0gVmVyc2lvbigwLCAwLCAxKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgMikKKworZnJv
bSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IG1vY2tz
CisKIG5hbWUgPSAnd2Via2l0c2NtcHknCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9fX2lu
aXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworZnJvbSB3ZWJraXRzY21weS5sb2NhbC5zY20gaW1wb3J0IFNjbQorZnJvbSB3ZWJr
aXRzY21weS5sb2NhbC5zdm4gaW1wb3J0IFN2bgorZnJvbSB3ZWJraXRzY21weS5sb2NhbC5naXQg
aW1wb3J0IEdpdApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9n
aXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBkZWNv
cmF0b3JzCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsIGltcG9ydCBTY20KKworCitjbGFzcyBHaXQo
U2NtKToKKyAgICBleGVjdXRhYmxlID0gJy91c3IvYmluL2dpdCcKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBpc19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVuKFtj
bHMuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSwgY3dkPXBhdGgs
IGNhcHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNvZGUgPT0gMAorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBhdGgpOgorICAgICAgICBzdXBlcihHaXQsIHNlbGYpLl9faW5pdF9fKHBhdGgpCisg
ICAgICAgIGlmIG5vdCBzZWxmLnJvb3RfcGF0aDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3Io
J1Byb3ZpZGVkIHBhdGgge30gaXMgbm90IGEgZ2l0IHJlcG9zaXRvcnknLmZvcm1hdChwYXRoKSkK
KworICAgIEBwcm9wZXJ0eQorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiByb290
X3BhdGgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2
LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1
dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiByZXN1bHQuc3Rkb3V0LnJz
dHJpcCgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoKHNlbGYpOgorICAgICAgICBz
dGF0dXMgPSBydW4oW3NlbGYuZXhlY3V0YWJsZSwgJ3N0YXR1cyddLCBjd2Q9c2VsZi5yb290X3Bh
dGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIGlmIHN0
YXR1cy5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0ZhaWxl
ZCB0byBydW4gYGdpdCBzdGF0dXNgIGZvciB7fScuZm9ybWF0KHNlbGYucm9vdF9wYXRoKSkKKyAg
ICAgICAgaWYgc3RhdHVzLnN0ZG91dC5zcGxpdGxpbmVzKClbMF0uc3RhcnRzd2l0aCgnSEVBRCBk
ZXRhY2hlZCBhdCcpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXN1bHQg
PSBydW4oW3NlbGYuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnSEVB
RCddLCBjd2Q9c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1
dGYtOCcpCisgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2Ug
c2VsZi5FeGNlcHRpb24oJ0ZhaWxlZCB0byByZXRyaWV2ZSBicmFuY2ggZm9yIHt9Jy5mb3JtYXQo
c2VsZi5yb290X3BhdGgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC5yc3RyaXAoKQor
CisgICAgZGVmIHJlbW90ZShzZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICByZXN1bHQgPSBydW4o
W3NlbGYuZXhlY3V0YWJsZSwgJ3JlbW90ZScsICdnZXQtdXJsJywgbmFtZSBvciAnb3JpZ2luJ10s
IGN3ZD1zZWxmLnJvb3RfcGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04
JykKKyAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICByYWlzZSBzZWxm
LkV4Y2VwdGlvbignRmFpbGVkIHRvIHJldHJpZXZlIHJlbW90ZSBmb3Ige30nLmZvcm1hdChzZWxm
LnJvb3RfcGF0aCkpCisgICAgICAgIHJldHVybiByZXN1bHQuc3Rkb3V0LnJzdHJpcCgpCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9z
Y20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2NsYXNzIFNjbShvYmplY3QpOgorICAgIGNsYXNzIEV4Y2VwdGlvbihSdW50aW1lRXJy
b3IpOgorICAgICAgICBwYXNzCisKKyAgICBleGVjdXRhYmxlID0gTm9uZQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIGZyb21fcGF0aChjbHMsIHBhdGgpOgorICAgICAgICBmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBsb2NhbAorCisgICAgICAgIGlmIGxvY2FsLkdpdC5pc19jaGVja291dChw
YXRoKToKKyAgICAgICAgICAgIHJldHVybiBsb2NhbC5HaXQocGF0aCkKKyAgICAgICAgaWYgbG9j
YWwuU3ZuLmlzX2NoZWNrb3V0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsLlN2bihw
YXRoKQorICAgICAgICByYWlzZSBPU0Vycm9yKCd7fSBpcyBub3QgYSBrbm93biBTQ00gdHlwZScp
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIG5vdCBpc2luc3Rh
bmNlKHBhdGgsIHN0cik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCcnKQorICAgICAg
ICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm9vdF9wYXRoKHNl
bGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiBicmFuY2goc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoKQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0
IHJ1biwgZGVjb3JhdG9ycworZnJvbSB3ZWJraXRzY21weS5sb2NhbC5zY20gaW1wb3J0IFNjbQor
CisKK2NsYXNzIFN2bihTY20pOgorICAgIGV4ZWN1dGFibGUgPSAnL3Vzci9sb2NhbC9iaW4vc3Zu
JworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX2NoZWNrb3V0KGNscywgcGF0aCk6Cisg
ICAgICAgIHJldHVybiBydW4oW2Nscy5leGVjdXRhYmxlLCAnaW5mbyddLCBjd2Q9cGF0aCwgY2Fw
dHVyZV9vdXRwdXQ9VHJ1ZSkucmV0dXJuY29kZSA9PSAwCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcGF0aCk6CisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19pbml0X18ocGF0aCkKKyAgICAg
ICAgaWYgbm90IHNlbGYucm9vdF9wYXRoOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignUHJv
dmlkZWQgcGF0aCB7fSBpcyBub3QgYSBzdm4gcmVwb3NpdG9yeScuZm9ybWF0KHBhdGgpKQorCisg
ICAgQGRlY29yYXRvcnMuTWVtb2l6ZShjYWNoZWQ9RmFsc2UpCisgICAgZGVmIGluZm8oc2VsZik6
CisgICAgICAgIGluZm9fcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdpbmZvJ10sIGN3
ZD1zZWxmLnBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAg
ICAgIGlmIGluZm9fcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICByZXR1cm4ge30KKwor
ICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBmb3IgbGluZSBpbiBpbmZvX3Jlc3VsdC5zdGRv
dXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc3BsaXQgPSBsaW5lLnNwbGl0KCc6ICcpCisg
ICAgICAgICAgICByZXN1bHRbc3BsaXRbMF1dID0gJzogJy5qb2luKHNwbGl0WzE6XSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvb3RfcGF0aChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5mbyhjYWNoZWQ9VHJ1ZSkuZ2V0KCdXb3JraW5nIENv
cHkgUm9vdCBQYXRoJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2goc2VsZik6Cisg
ICAgICAgIGxvY2FsX3BhdGggPSBzZWxmLnBhdGhbbGVuKHNlbGYucm9vdF9wYXRoKTpdCisgICAg
ICAgIGlmIGxvY2FsX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmZvKClbJ1JlbGF0
aXZlIFVSTCddWzI6LWxlbihsb2NhbF9wYXRoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuaW5mbygp
WydSZWxhdGl2ZSBVUkwnXVsyOl0KKworICAgIGRlZiByZW1vdGUoc2VsZiwgbmFtZT1Ob25lKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuaW5mbygpWydSZXBvc2l0b3J5IFJvb3QnXQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20gd2Via2l0c2NtcHkubW9ja3MgaW1w
b3J0IGxvY2FsCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9tb2Nrcy9sb2NhbC9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9fX2luaXRf
Xy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworZnJvbSB3ZWJraXRzY21weS5tb2Nrcy5sb2NhbC5zdm4gaW1wb3J0IFN2bgor
ZnJvbSB3ZWJraXRzY21weS5tb2Nrcy5sb2NhbC5naXQgaW1wb3J0IEdpdApJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IG9zCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2Nr
cworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKKworCitjbGFzcyBHaXQobW9ja3MuU3Vi
cHJvY2Vzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Jy8uaW52YWxpZC1naXQnLCBi
cmFuY2g9Tm9uZSwgcmVtb3RlPU5vbmUsIGRldGFjaGVkPU5vbmUpOgorICAgICAgICBzZWxmLnBh
dGggPSBwYXRoCisgICAgICAgIHNlbGYuYnJhbmNoID0gYnJhbmNoIG9yICdtYXN0ZXInCisgICAg
ICAgIHNlbGYucmVtb3RlID0gcmVtb3RlIG9yICdnaXRAd2Via2l0Lm9yZzovbW9jay97fScuZm9y
bWF0KG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisgICAgICAgIHNlbGYuZGV0YWNoZWQgPSBkZXRh
Y2hlZCBvciBGYWxzZQorCisgICAgICAgIHN1cGVyKEdpdCwgc2VsZikuX19pbml0X18oCisgICAg
ICAgICAgICBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLkdp
dC5leGVjdXRhYmxlLCAnc3RhdHVzJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOgorICAgICAg
ICAgICAgICAgICAgICBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybmNvZGU9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0nJydI
RUFEIGRldGFjaGVkIGF0IGI4YTMxNWVkOTNjCitub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0
cmVlIGNsZWFuCisnJycgaWYgc2VsZi5kZXRhY2hlZCBlbHNlICcnJydPbiBicmFuY2gge2JyYW5j
aH0KK1lvdXIgYnJhbmNoIGlzIHVwIHRvIGRhdGUgd2l0aCAnb3JpZ2luL3ticmFuY2h9Jy4KKwor
bm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgorJycnLmZvcm1hdChicmFuY2g9
c2VsZi5icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwu
R2l0LmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1zaG93LXRvcGxldmVsJywKKyAgICAgICAg
ICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwKKyAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5wYXRoKSwKKyAgICAg
ICAgICAgICAgICApLAorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAg
ICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLWFiYnJl
di1yZWYnLCAnSEVBRCcsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAg
ICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3MuUHJvY2Vzc0Nv
bXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwKKyAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoJ0hFQUQnIGlmIHNlbGYuZGV0YWNoZWQgZWxz
ZSBzZWxmLmJyYW5jaCksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tz
LlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUs
ICdyZW1vdGUnLCAnZ2V0LXVybCcsICcuKicsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0
aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9j
a3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwK
KyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5yZW1vdGUpLAor
ICAgICAgICAgICAgICAgICkgaWYgYXJnc1szXSA9PSAnb3JpZ2luJyBlbHNlIG1vY2tzLlByb2Nl
c3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTEyOCwKKyAgICAg
ICAgICAgICAgICAgICAgc3RkZXJyPSJmYXRhbDogTm8gc3VjaCByZW1vdGUgJ3t9J1xuIi5mb3Jt
YXQoYXJnc1szXSksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1
YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsCisg
ICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
PW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2Rl
PTEsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0ndXNhZ2U6IGdpdCBbLS12ZXJzaW9uXSBb
LS1oZWxwXS4uLlxuJywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKSwgbW9ja3Mu
U3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uPW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTEyOCwKKyAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPSdmYXRhbDogbm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91
bnQgcG9pbnQpXG5TdG9wcGluZyBhdCBmaWxlc3lzdGVtIGJvdW5kYXJ5IChHSVRfRElTQ09WRVJZ
X0FDUk9TU19GSUxFU1lTVEVNIG5vdCBzZXQpLlxuJywKKyAgICAgICAgICAgICAgICApLAorICAg
ICAgICAgICAgKSwKKyAgICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvc3ZuLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2Fs
L3N2bi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IG9zCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbG9jYWwKKworCitjbGFzcyBTdm4obW9ja3MuU3VicHJvY2Vzcyk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBhdGg9Jy8uaW52YWxpZC1zdm4nLCBicmFuY2g9Tm9uZSwgcmVtb3RlPU5v
bmUpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuYnJhbmNoID0gYnJh
bmNoIG9yICd0cnVuaycKKyAgICAgICAgc2VsZi5yZW1vdGUgPSByZW1vdGUgb3IgJ2h0dHBzOi8v
c3ZuLm1vY2sub3JnL3JlcG9zaXRvcnkve30nLmZvcm1hdChvcy5wYXRoLmJhc2VuYW1lKHBhdGgp
KQorCisgICAgICAgIHN1cGVyKFN2biwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBtb2Nr
cy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLlN2bi5leGVjdXRhYmxl
LCAnaW5mbycsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAg
ICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3MuUHJvY2Vzc0NvbXBsZXRp
b24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwKKyAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PQorICAgICAgICAgICAgICAgICAgICAgICAgJ1BhdGg6IC5cbicKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdXb3JraW5nIENvcHkgUm9vdCBQYXRoOiB7cGF0aH1cbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdVUkw6IHtyZW1vdGV9L3ticmFuY2h9e2RpcmVjdG9yeX1cbicK
KyAgICAgICAgICAgICAgICAgICAgICAgICdSZWxhdGl2ZSBVUkw6IF4ve2JyYW5jaH17ZGlyZWN0
b3J5fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1JlcG9zaXRvcnkgUm9vdDoge3JlbW90
ZX1cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeT1rd2Fy
Z3MuZ2V0KCdjd2QnLCAnJylbbGVuKHNlbGYucGF0aCk6XSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1v
dGU9c2VsZi5yZW1vdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPXNlbGYu
YnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApLAor
ICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBs
b2NhbC5Tdm4uZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybmNvZGU9MSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPSJU
eXBlICdzdm4gaGVscCcgZm9yIHVzYWdlLlxuIiwKKyAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLlN2
bi5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoq
a3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuY29kZT0xLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9InN2bjogRTE1NTAwNzogJ3t9
JyBpcyBub3QgYSB3b3JraW5nIGNvcHlcbiIuZm9ybWF0KGt3YXJncy5nZXQoJ2N3ZCcpKSwKKyAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICApLAorICAgICAgICApCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L19faW5pdF9fLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3QvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9fX2luaXRfXy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0
dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwg
bW9ja3MKKworCitjbGFzcyBUZXN0R2l0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0g
Jy9tb2NrL3JlcG9zaXRvcnknCisKKyAgICBkZWYgdGVzdF9kZXRlY3Rpb24oc2VsZik6CisgICAg
ICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpOgor
ICAgICAgICAgICAgZGV0ZWN0ID0gbG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRldGVjdC5leGVjdXRhYmxlLCBsb2NhbC5HaXQuZXhl
Y3V0YWJsZSkKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3Mu
bG9jYWwuR2l0KHNlbGYucGF0aCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2Fs
LkdpdChzZWxmLnBhdGgpLnJvb3RfcGF0aCwgc2VsZi5wYXRoKQorCisgICAgICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvY2FsLkdpdChv
cy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdF9wYXRoCisKKyAgICBkZWYgdGVzdF9icmFu
Y2goc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLkdpdChzZWxmLnBhdGgpLmJyYW5jaCwgJ21h
c3RlcicpCisKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBkZXRhY2hl
ZD1UcnVlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0
aCkuYnJhbmNoLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIHJlcG86CisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGxvY2FsLkdpdChzZWxmLnBhdGgpLnJlbW90ZSgpLCByZXBvLnJlbW90ZSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3Qvc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3Qvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9t
IHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MKKworCitjbGFzcyBUZXN0U2NtKHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL2RpcmVjdG9yeScKKworICAgIGRlZiB0
ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9j
a3MubG9jYWwuU3ZuKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJy
b3IpOgorICAgICAgICAgICAgICAgIGxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKQorCisg
ICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2FsLlNjbShzZWxmLnBhdGgpLnJv
b3RfcGF0aAorCisgICAgZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgbG9jYWwuU2Nt
KHNlbGYucGF0aCkuYnJhbmNoCisKKyAgICBkZWYgdGVzdF9yZW1vdGUoc2VsZik6CisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAg
ICBsb2NhbC5TY20oc2VsZi5wYXRoKS5yZW1vdGUoKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
dGVzdC9zdm5fdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zdm5fdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbG9jYWwsIG1vY2tzCisKKworY2xhc3MgVGVzdFN2bih1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfZGV0ZWN0aW9u
KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBtb2Nrcy5s
b2NhbC5HaXQoKToKKyAgICAgICAgICAgIGRldGVjdCA9IGxvY2FsLlNjbS5mcm9tX3BhdGgoc2Vs
Zi5wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXRlY3QuZXhlY3V0YWJsZSwg
bG9jYWwuU3ZuLmV4ZWN1dGFibGUpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsb2NhbC5Tdm4oc2VsZi5wYXRoKS5yb290X3BhdGgsIHNlbGYucGF0aCkKKworICAg
ICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgICAg
ICBsb2NhbC5Tdm4ob3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCkpLnJvb3RfcGF0aAorCisgICAg
ZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxm
LnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5Tdm4oc2VsZi5wYXRo
KS5icmFuY2gsICd0cnVuaycpCisKKyAgICBkZWYgdGVzdF9yZW1vdGUoc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCkgYXMgcmVwbzoKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucmVtb3RlKCksIHJlcG8ucmVtb3Rl
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407833</attachid>
            <date>2020-09-02 16:55:49 -0700</date>
            <delta_ts>2020-09-03 15:40:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215960-20200902165548.patch</filename>
            <type>text/plain</type>
            <size>38154</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjQ5MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA5LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoTWVtb2l6ZSk6IEFkZCBh
IG1lbW9pemUgY2FsbCB0aGF0IGNhbiBjYWNoZSBhIHJlc3BvbnNlIGZvciBhIHNldCBhbW91bnQg
b2YgdGltZQorICAgICAgICBPciBiZSBleHBsaWNpdGx5IGNsZWFyZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RNZW1vaXplKToKKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVt
cCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdpdCk6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBnaXQgY2hlY2tv
dXQuCisgICAgICAgIChHaXQuaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMg
YSBnaXQgY2hlY2tvdXQuCisgICAgICAgIChHaXQuX19pbml0X18pOiBJbml0aWFsaXplIGEgR2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0LnJvb3RfcGF0aCk6IFJldHVybiB0aGUgcGF0aCBmb3Ig
dGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXQuYnJhbmNoKTog
UmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKEdpdC5yZW1vdGUpOiBSZXR1cm4g
dGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weTogQWRkZWQuCisgICAgICAgIChTY20pOiBC
YXNlIGNsYXNzIGZvciBhbGwgbG9jYWwgU0NNIGNoZWNrb3V0cy4KKyAgICAgICAgKFNjbS5FeGNl
cHRpb24pOgorICAgICAgICAoU2NtLmZyb21fcGF0aCk6IEdpdmVuIGEgcGF0aCwgcmV0dXJuIGFu
IGluc3RhbnRpYXRlZCBTVk4gb2JqZWN0IGZyb20gdGhhdAorICAgICAgICBwYXRoLCBpZiBwb3Nz
aWJsZS4KKyAgICAgICAgKFNjbS5fX2luaXRfXyk6CisgICAgICAgIChTY20ucm9vdF9wYXRoKTog
VmlydHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBieSBjaGlsZHJlbi4KKyAgICAgICAgKFNjbS5i
cmFuY2gpOiBEaXR0by4KKyAgICAgICAgKFNjbS5yZW1vdGUpOiBEaXR0by4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHk6IEFk
ZGVkLgorICAgICAgICAoU3ZuKTogT2JqZWN0IHJlcHJlc2VudGluZyBhIGxvY2FsIFN2biBjaGVj
a291dC4KKyAgICAgICAgKFN2bi5pc19jaGVja291dCk6IENoZWNrIGlmIGEgZ2l2ZW4gcGF0aCBp
cyBhIHN2biBjaGVja291dC4KKyAgICAgICAgKFN2bi5fX2luaXRfXyk6IEluaXRpYWxpemUgYSBT
dm4gY2hlY2tvdXQuCisgICAgICAgIChTdm4uaW5mbyk6IFJldHVybiB0aGUgY29udGVudHMgb2Yg
c3ZuIGluZm8gYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICAoU3ZuLnJvb3RfcGF0aCk6IFJldHVy
biB0aGUgcGF0aCBmb3IgdGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAg
IChTdm4uYnJhbmNoKTogUmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKFN2bi5y
ZW1vdGUpOiBSZXR1cm4gdGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzOiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvbG9jYWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHk6IEFkZGVkLgorICAgICAgICAoR2l0KTogTW9jayBhIGxvY2FsIEdpdCBy
ZXBvc2l0b3J5LgorICAgICAgICAoR2l0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHk6IEFkZGVk
LgorICAgICAgICAoU3ZuKTogTW9jayBhIGxvY2FsIFNWTiByZXBvc2l0b3J5LgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Q6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRl
c3RHaXQpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTY20pOgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3Zu
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTdm4pOgorCiAyMDIwLTA5LTAyICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBhIHZhcmlhbnQg
b2YgbWFwIHdoaWNoIGZpbHRlcnMgaXRlbXMgdG8gVmVjdG9yLmgKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29y
ZXB5L2RlY29yYXRvcnMucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9kZWNvcmF0b3JzLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCB0aW1lCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCisKK2Ns
YXNzIE1lbW9pemUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZW91dD1Ob25l
LCBjYWNoZWQ9VHJ1ZSk6CisgICAgICAgIHNlbGYuX2NhY2hlID0gZGVmYXVsdGRpY3QoZGljdCkK
KyAgICAgICAgc2VsZi5fbGFzdF9jYWxsZWQgPSBkZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBz
ZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuY2FjaGVkID0gY2FjaGVkCisKKyAg
ICBkZWYgX19jYWxsX18oc2VsZiwgZnVuY3Rpb24pOgorICAgICAgICBkZWYgZGVjb3JhdG9yKCph
cmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICB0aW1lb3V0ID0ga3dhcmdzLnBvcCgndGltZW91
dCcsIHNlbGYudGltZW91dCkKKyAgICAgICAgICAgIGNhY2hlZCA9IGt3YXJncy5wb3AoJ2NhY2hl
ZCcsIHNlbGYuY2FjaGVkKQorICAgICAgICAgICAgbGFzdF9jYWxsZWQgPSBzZWxmLl9sYXN0X2Nh
bGxlZFtmdW5jdGlvbl0uZ2V0KGFyZ3MsIDApCisKKyAgICAgICAgICAgIGNhY2hlID0gc2VsZi5f
Y2FjaGVbZnVuY3Rpb25dLmdldChhcmdzLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IGNhY2hl
ZDoKKyAgICAgICAgICAgICAgICBjYWNoZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHRpbWVvdXQg
YW5kIHRpbWVvdXQgPCB0aW1lLnRpbWUoKSAtIGxhc3RfY2FsbGVkOgorICAgICAgICAgICAgICAg
IGNhY2hlID0gTm9uZQorICAgICAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNhY2hlCisKKyAgICAgICAgICAgIGNhY2hlID0gZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdz
KQorICAgICAgICAgICAgc2VsZi5fbGFzdF9jYWxsZWRbZnVuY3Rpb25dW2FyZ3NdID0gdGltZS50
aW1lKCkKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW2Z1bmN0aW9uXVthcmdzXSA9IGNhY2hlCisg
ICAgICAgICAgICByZXR1cm4gY2FjaGUKKworICAgICAgICBkZWNvcmF0b3IuY2xlYXIgPSBzZWxm
LmNsZWFyCisgICAgICAgIHJldHVybiBkZWNvcmF0b3IKKworICAgIGRlZiBjbGVhcihzZWxmKToK
KyAgICAgICAgc2VsZi5fY2FjaGUgPSBkZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLl9s
YXN0X2NhbGxlZCA9IGRlZmF1bHRkaWN0KGRpY3QpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL2RlY29yYXRvcnNfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3JzX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMv
ZGVjb3JhdG9yc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQoraW1wb3J0
IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBkZWNvcmF0b3JzLCBtb2Nrcwor
CisKK2NsYXNzIFRlc3RNZW1vaXplKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjb3VudCA9IDAK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYg
aW5jcmVtZW50X2NhY2hlKCk6CisgICAgICAgIFRlc3RNZW1vaXplLmNvdW50ICs9IDEKKyAgICAg
ICAgcmV0dXJuIFRlc3RNZW1vaXplLmNvdW50CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQGRl
Y29yYXRvcnMuTWVtb2l6ZShjYWNoZWQ9RmFsc2UpCisgICAgZGVmIGluY3JlbWVudF9ub19jYWNo
ZSgpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCArPSAxCisgICAgICAgIHJldHVybiBUZXN0
TWVtb2l6ZS5jb3VudAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIEBkZWNvcmF0b3JzLk1lbW9p
emUodGltZW91dD0xMCkKKyAgICBkZWYgaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKToKKyAgICAg
ICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQorICAgICAgICByZXR1cm4gVGVzdE1lbW9pemUuY291
bnQKKworICAgIGRlZiB0ZXN0X2NhY2hlZChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5UaW1l
OgorICAgICAgICAgICAgVGVzdE1lbW9pemUuY291bnQgPSAwCisgICAgICAgICAgICBUZXN0TWVt
b2l6ZS5pbmNyZW1lbnRfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDEpCisKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKGNhY2hlZD1GYWxz
ZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVu
dF9jYWNoZSgpLCAyKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXpl
LmluY3JlbWVudF9jYWNoZSh0aW1lb3V0PTEwKSwgMikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAo
MTUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9j
YWNoZSh0aW1lb3V0PTEwKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1l
bW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDMpCisKKyAgICBkZWYgdGVzdF9ub3RfY2FjaGVkKHNl
bGYpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfbm9fY2FjaGUoKSwgMSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfbm9fY2FjaGUoKSwgMikKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9ub19jYWNoZShjYWNoZWQ9
VHJ1ZSksIDIpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0X2NhY2hlZChzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5UaW1lOgorICAgICAgICAgICAgVGVzdE1lbW9pemUuY291bnQgPSAwCisgICAg
ICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9jYWNoZS5jbGVhcigpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2Nh
Y2hlKCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3Jl
bWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2Nh
Y2hlKCksIDEpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9jYWNoZSgpLCAyKQorICAg
ICAgICAgICAgdGltZS5zbGVlcCg4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0
TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9jYWNoZSh0aW1lb3V0PTUpLCAzKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHJldmlzaW9uIDI2
NjQ5MykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwxMyBAQCBzZXR1cCgKICAgICBhdXRob3I9J0pvbmF0
aGFuIEJlZGFyZCcsCiAgICAgYXV0aG9yX2VtYWlsPSdqYmVkYXJkQGFwcGxlLmNvbScsCiAgICAg
bGljZW5zZT0nTW9kaWZpZWQgQlNEJywKLSAgICBwYWNrYWdlcz1bJ3dlYmtpdHNjbXB5J10sCisg
ICAgcGFja2FnZXM9WworICAgICAgICAnd2Via2l0c2NtcHknLAorICAgICAgICAnd2Via2l0c2Nt
cHkubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MnLAorICAgICAgICAnd2Via2l0
c2NtcHkubW9ja3MubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkudGVzdCcsCisgICAgXSwK
ICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnd2Via2l0Y29yZXB5J10sCiAgICAgaW5jbHVkZV9wYWNr
YWdlX2RhdGE9VHJ1ZSwKICAgICB6aXBfc2FmZT1GYWxzZSwKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5p
dF9fLnB5CShyZXZpc2lvbiAyNjY0OTMpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNSArNDYsOSBAQCBleGNlcHQgSW1w
b3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlw
IGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVS
TD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgMSkKK3ZlcnNpb24gPSBWZXJz
aW9uKDAsIDAsIDIpCisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCitmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBtb2NrcworCiBuYW1lID0gJ3dlYmtpdHNjbXB5JwpJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwuc2NtIGlt
cG9ydCBTY20KK2Zyb20gd2Via2l0c2NtcHkubG9jYWwuc3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Vi
a2l0c2NtcHkubG9jYWwuZ2l0IGltcG9ydCBHaXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQu
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSB3ZWJraXRjb3Jl
cHkgaW1wb3J0IHJ1biwgZGVjb3JhdG9ycworZnJvbSB3ZWJraXRzY21weS5sb2NhbCBpbXBvcnQg
U2NtCisKKworY2xhc3MgR2l0KFNjbSk6CisgICAgZXhlY3V0YWJsZSA9ICcvdXNyL2Jpbi9naXQn
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNfY2hlY2tvdXQoY2xzLCBwYXRoKToKKyAg
ICAgICAgcmV0dXJuIHJ1bihbY2xzLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1zaG93LXRv
cGxldmVsJ10sIGN3ZD1wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlKS5yZXR1cm5jb2RlID09IDAK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc3VwZXIoR2l0LCBzZWxm
KS5fX2luaXRfXyhwYXRoKQorICAgICAgICBpZiBub3Qgc2VsZi5yb290X3BhdGg6CisgICAgICAg
ICAgICByYWlzZSBPU0Vycm9yKCdQcm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIGdpdCByZXBvc2l0
b3J5Jy5mb3JtYXQocGF0aCkpCisKKyAgICBAcHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1v
aXplKCkKKyAgICBkZWYgcm9vdF9wYXRoKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW4oW3Nl
bGYuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSwgY3dkPXNlbGYu
cGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgaWYg
cmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1
cm4gcmVzdWx0LnN0ZG91dC5yc3RyaXAoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJyYW5j
aChzZWxmKToKKyAgICAgICAgc3RhdHVzID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdzdGF0dXMn
XSwgY3dkPXNlbGYucm9vdF9wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRm
LTgnKQorICAgICAgICBpZiBzdGF0dXMucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJhaXNlIHNl
bGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gcnVuIGBnaXQgc3RhdHVzYCBmb3Ige30nLmZvcm1hdChz
ZWxmLnJvb3RfcGF0aCkpCisgICAgICAgIGlmIHN0YXR1cy5zdGRvdXQuc3BsaXRsaW5lcygpWzBd
LnN0YXJ0c3dpdGgoJ0hFQUQgZGV0YWNoZWQgYXQnKToKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAn
LS1hYmJyZXYtcmVmJywgJ0hFQUQnXSwgY3dkPXNlbGYucm9vdF9wYXRoLCBjYXB0dXJlX291dHB1
dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToK
KyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gcmV0cmlldmUgYnJh
bmNoIGZvciB7fScuZm9ybWF0KHNlbGYucm9vdF9wYXRoKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5zdGRvdXQucnN0cmlwKCkKKworICAgIGRlZiByZW1vdGUoc2VsZiwgbmFtZT1Ob25lKToKKyAg
ICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdyZW1vdGUnLCAnZ2V0LXVybCcs
IG5hbWUgb3IgJ29yaWdpbiddLCBjd2Q9c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRy
dWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAg
ICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0ZhaWxlZCB0byByZXRyaWV2ZSByZW1vdGUg
Zm9yIHt9Jy5mb3JtYXQoc2VsZi5yb290X3BhdGgpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnN0
ZG91dC5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2Nh
bC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBTY20ob2JqZWN0KToKKyAgICBjbGFzcyBF
eGNlcHRpb24oUnVudGltZUVycm9yKToKKyAgICAgICAgcGFzcworCisgICAgZXhlY3V0YWJsZSA9
IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3BhdGgoY2xzLCBwYXRoKToK
KyAgICAgICAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKKworICAgICAgICBpZiBsb2Nh
bC5HaXQuaXNfY2hlY2tvdXQocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gbG9jYWwuR2l0KHBh
dGgpCisgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVja291dChwYXRoKToKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigne30gaXMgbm90
IGEga25vd24gU0NNIHR5cGUnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXRoLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignJykKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIHJvb3RfcGF0aChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cigpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoKHNlbGYpOgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiByZW1vdGUoc2VsZiwgbmFtZT1Ob25l
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20g
d2Via2l0Y29yZXB5IGltcG9ydCBydW4sIGRlY29yYXRvcnMKK2Zyb20gd2Via2l0c2NtcHkubG9j
YWwuc2NtIGltcG9ydCBTY20KKworCitjbGFzcyBTdm4oU2NtKToKKyAgICBleGVjdXRhYmxlID0g
Jy91c3IvbG9jYWwvYmluL3N2bicKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpc19jaGVj
a291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4gcnVuKFtjbHMuZXhlY3V0YWJsZSwgJ2lu
Zm8nXSwgY3dkPXBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUpLnJldHVybmNvZGUgPT0gMAorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzdXBlcihTdm4sIHNlbGYpLl9f
aW5pdF9fKHBhdGgpCisgICAgICAgIGlmIG5vdCBzZWxmLnJvb3RfcGF0aDoKKyAgICAgICAgICAg
IHJhaXNlIE9TRXJyb3IoJ1Byb3ZpZGVkIHBhdGgge30gaXMgbm90IGEgc3ZuIHJlcG9zaXRvcnkn
LmZvcm1hdChwYXRoKSkKKworICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoY2FjaGVkPUZhbHNlKQor
ICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICBpbmZvX3Jlc3VsdCA9IHJ1bihbc2VsZi5leGVj
dXRhYmxlLCAnaW5mbyddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNv
ZGluZz0ndXRmLTgnKQorICAgICAgICBpZiBpbmZvX3Jlc3VsdC5yZXR1cm5jb2RlOgorICAgICAg
ICAgICAgcmV0dXJuIHt9CisKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgZm9yIGxpbmUg
aW4gaW5mb19yZXN1bHQuc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHNwbGl0ID0g
bGluZS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgcmVzdWx0W3NwbGl0WzBdXSA9ICc6ICcuam9p
bihzcGxpdFsxOl0pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiByb290X3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmluZm8oY2FjaGVkPVRy
dWUpLmdldCgnV29ya2luZyBDb3B5IFJvb3QgUGF0aCcpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgYnJhbmNoKHNlbGYpOgorICAgICAgICBsb2NhbF9wYXRoID0gc2VsZi5wYXRoW2xlbihzZWxm
LnJvb3RfcGF0aCk6XQorICAgICAgICBpZiBsb2NhbF9wYXRoOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuaW5mbygpWydSZWxhdGl2ZSBVUkwnXVsyOi1sZW4obG9jYWxfcGF0aCldCisgICAgICAg
IHJldHVybiBzZWxmLmluZm8oKVsnUmVsYXRpdmUgVVJMJ11bMjpdCisKKyAgICBkZWYgcmVtb3Rl
KHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmluZm8oKVsnUmVwb3NpdG9y
eSBSb290J10KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitmcm9tIHdl
YmtpdHNjbXB5Lm1vY2tzIGltcG9ydCBsb2NhbApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bW9ja3MvbG9jYWwvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9j
YWwuc3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwuZ2l0IGltcG9y
dCBHaXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L21vY2tzL2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisKKwor
Y2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRo
PScvLmludmFsaWQtZ2l0JywgYnJhbmNoPU5vbmUsIHJlbW90ZT1Ob25lLCBkZXRhY2hlZD1Ob25l
KToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5j
aCBvciAnbWFzdGVyJworICAgICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZSBvciAnZ2l0QHdlYmtp
dC5vcmc6L21vY2sve30nLmZvcm1hdChvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorICAgICAgICBz
ZWxmLmRldGFjaGVkID0gZGV0YWNoZWQgb3IgRmFsc2UKKworICAgICAgICBzdXBlcihHaXQsIHNl
bGYpLl9faW5pdF9fKAorICAgICAgICAgICAgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAg
ICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3N0YXR1cycsCisgICAgICAgICAgICAg
ICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdz
LCAqKmt3YXJnczoKKyAgICAgICAgICAgICAgICAgICAgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24o
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9JycnSEVBRCBkZXRhY2hlZCBhdCBiOGEzMTVlZDkzYworbm90aGluZyB0
byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgorJycnIGlmIHNlbGYuZGV0YWNoZWQgZWxzZSAn
JycnT24gYnJhbmNoIHticmFuY2h9CitZb3VyIGJyYW5jaCBpcyB1cCB0byBkYXRlIHdpdGggJ29y
aWdpbi97YnJhbmNofScuCisKK25vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4K
KycnJy5mb3JtYXQoYnJhbmNoPXNlbGYuYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICksCisgICAgICAgICAgICBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAg
ICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tc2hvdy10
b3BsZXZlbCcsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uPW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAg
ICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0
KHNlbGYucGF0aCksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1
YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsICdy
ZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnLAorICAgICAgICAgICAgICAgIGN3ZD1z
ZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2Fy
Z3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5j
b2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KCdIRUFEJyBp
ZiBzZWxmLmRldGFjaGVkIGVsc2Ugc2VsZi5icmFuY2gpLAorICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxv
Y2FsLkdpdC5leGVjdXRhYmxlLCAncmVtb3RlJywgJ2dldC11cmwnLCAnLionLAorICAgICAgICAg
ICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAq
YXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAg
ICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0ne31cbicuZm9y
bWF0KHNlbGYucmVtb3RlKSwKKyAgICAgICAgICAgICAgICApIGlmIGFyZ3NbM10gPT0gJ29yaWdp
bicgZWxzZSBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuY29kZT0xMjgsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0iZmF0YWw6IE5vIHN1Y2gg
cmVtb3RlICd7fSdcbiIuZm9ybWF0KGFyZ3NbM10pLAorICAgICAgICAgICAgICAgICksCisgICAg
ICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2Fs
LkdpdC5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuY29kZT0xLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9J3VzYWdl
OiBnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0uLi5cbicsCisgICAgICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9j
YWwuR2l0LmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9j
ZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xMjgsCisgICAg
ICAgICAgICAgICAgICAgIHN0ZGVycj0nZmF0YWw6IG5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBh
bnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50KVxuU3RvcHBpbmcgYXQgZmlsZXN5c3RlbSBib3Vu
ZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSBub3Qgc2V0KS5cbicsCisgICAg
ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksCisgICAgICAgICkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL3N2bi5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvc3ZuLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisKKworY2xhc3MgU3ZuKG1vY2tzLlN1YnBy
b2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPScvLmludmFsaWQtc3ZuJywgYnJh
bmNoPU5vbmUsIHJlbW90ZT1Ob25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAg
ICBzZWxmLmJyYW5jaCA9IGJyYW5jaCBvciAndHJ1bmsnCisgICAgICAgIHNlbGYucmVtb3RlID0g
cmVtb3RlIG9yICdodHRwczovL3N2bi5tb2NrLm9yZy9yZXBvc2l0b3J5L3t9Jy5mb3JtYXQob3Mu
cGF0aC5iYXNlbmFtZShwYXRoKSkKKworICAgICAgICBzdXBlcihTdm4sIHNlbGYpLl9faW5pdF9f
KAorICAgICAgICAgICAgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBs
b2NhbC5Tdm4uZXhlY3V0YWJsZSwgJ2luZm8nLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBh
dGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1v
Y2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAs
CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0KKyAgICAgICAgICAgICAgICAgICAgICAgICdQ
YXRoOiAuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnV29ya2luZyBDb3B5IFJvb3QgUGF0
aDoge3BhdGh9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnVVJMOiB7cmVtb3RlfS97YnJh
bmNofXtkaXJlY3Rvcnl9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnUmVsYXRpdmUgVVJM
OiBeL3ticmFuY2h9e2RpcmVjdG9yeX1cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICdSZXBv
c2l0b3J5IFJvb3Q6IHtyZW1vdGV9XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rvcnk9a3dhcmdzLmdldCgnY3dkJywgJycpW2xlbihzZWxmLnBhdGgpOl0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtb3RlPXNlbGYucmVtb3RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaD1zZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUo
CisgICAgICAgICAgICAgICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAg
Y3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uPW1vY2tzLlByb2Nlc3ND
b21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTEsCisgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycj0iVHlwZSAnc3ZuIGhlbHAnIGZvciB1c2FnZS5cbiIsCisgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAg
ICAgICAgICAgICBsb2NhbC5Tdm4uZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJy
PSJzdm46IEUxNTUwMDc6ICd7fScgaXMgbm90IGEgd29ya2luZyBjb3B5XG4iLmZvcm1hdChrd2Fy
Z3MuZ2V0KCdjd2QnKSksCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSwKKyAgICAg
ICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L19faW5pdF9fLnB5CShub25leGlzdGVudCkK
KysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
X19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgbG9jYWwsIG1vY2tzCisKKworY2xhc3MgVGVzdEdpdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfZGV0
ZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBt
b2Nrcy5sb2NhbC5Tdm4oKToKKyAgICAgICAgICAgIGRldGVjdCA9IGxvY2FsLlNjbS5mcm9tX3Bh
dGgoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXRlY3QuZXhlY3V0
YWJsZSwgbG9jYWwuR2l0LmV4ZWN1dGFibGUpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgor
ICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpOgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2VsZi5wYXRoKS5yb290X3BhdGgsIHNlbGYucGF0aCkK
KworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAg
ICAgICAgICBsb2NhbC5HaXQob3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCkpLnJvb3RfcGF0aAor
CisgICAgZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdp
dChzZWxmLnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2Vs
Zi5wYXRoKS5icmFuY2gsICdtYXN0ZXInKQorCisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0
KHNlbGYucGF0aCwgZGV0YWNoZWQ9VHJ1ZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxvY2FsLkdpdChzZWxmLnBhdGgpLmJyYW5jaCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlbW90
ZShzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSBhcyByZXBv
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2VsZi5wYXRoKS5yZW1v
dGUoKSwgcmVwby5yZW1vdGUpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS90ZXN0L3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3NjbV91bml0
dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS90ZXN0L3NjbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2lt
cG9ydCB1bml0dGVzdAorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzCisKKwor
Y2xhc3MgVGVzdFNjbSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9kaXJl
Y3RvcnknCisKKyAgICBkZWYgdGVzdF9kZXRlY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggbW9j
a3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bigpOgorICAgICAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgICAgICBsb2NhbC5TY20uZnJvbV9w
YXRoKHNlbGYucGF0aCkKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIHdpdGgg
c2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBsb2Nh
bC5TY20oc2VsZi5wYXRoKS5yb290X3BhdGgKKworICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToK
KyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAg
ICAgICAgICAgIGxvY2FsLlNjbShzZWxmLnBhdGgpLmJyYW5jaAorCisgICAgZGVmIHRlc3RfcmVt
b3RlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVk
RXJyb3IpOgorICAgICAgICAgICAgbG9jYWwuU2NtKHNlbGYucGF0aCkucmVtb3RlKCkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3Zu
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3Zu
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RTdm4o
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAg
IGRlZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4o
c2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2Nh
bC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZGV0ZWN0LmV4ZWN1dGFibGUsIGxvY2FsLlN2bi5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rf
cm9vdChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkucm9vdF9wYXRo
LCBzZWxmLnBhdGgpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJv
cik6CisgICAgICAgICAgICAgICAgbG9jYWwuU3ZuKG9zLnBhdGguZGlybmFtZShzZWxmLnBhdGgp
KS5yb290X3BhdGgKKworICAgIGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bG9jYWwuU3ZuKHNlbGYucGF0aCkuYnJhbmNoLCAndHJ1bmsnKQorCisgICAgZGVmIHRlc3RfcmVt
b3RlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpIGFzIHJl
cG86CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLlN2bihzZWxmLnBhdGgpLnJl
bW90ZSgpLCByZXBvLnJlbW90ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407923</attachid>
            <date>2020-09-03 15:40:54 -0700</date>
            <delta_ts>2020-09-04 11:45:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215960-20200903154053.patch</filename>
            <type>text/plain</type>
            <size>39229</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjU1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA5LTAzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2RlY29yYXRvcnMucHk6IEFkZGVkLgorICAgICAgICAoTWVtb2l6ZSk6IEFkZCBh
IG1lbW9pemUgY2FsbCB0aGF0IGNhbiBjYWNoZSBhIHJlc3BvbnNlIGZvciBhIHNldCBhbW91bnQg
b2YgdGltZQorICAgICAgICBPciBiZSBleHBsaWNpdGx5IGNsZWFyZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3Jz
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RNZW1vaXplKToKKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVt
cCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdpdCk6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBnaXQgY2hlY2tv
dXQuCisgICAgICAgIChHaXQuaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMg
YSBnaXQgY2hlY2tvdXQuCisgICAgICAgIChHaXQuX19pbml0X18pOiBJbml0aWFsaXplIGEgR2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0LnJvb3RfcGF0aCk6IFJldHVybiB0aGUgcGF0aCBmb3Ig
dGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXQuYnJhbmNoKTog
UmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKEdpdC5yZW1vdGUpOiBSZXR1cm4g
dGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weTogQWRkZWQuCisgICAgICAgIChTY20pOiBC
YXNlIGNsYXNzIGZvciBhbGwgbG9jYWwgU0NNIGNoZWNrb3V0cy4KKyAgICAgICAgKFNjbS5FeGNl
cHRpb24pOgorICAgICAgICAoU2NtLmZyb21fcGF0aCk6IEdpdmVuIGEgcGF0aCwgcmV0dXJuIGFu
IGluc3RhbnRpYXRlZCBTVk4gb2JqZWN0IGZyb20gdGhhdAorICAgICAgICBwYXRoLCBpZiBwb3Nz
aWJsZS4KKyAgICAgICAgKFNjbS5fX2luaXRfXyk6CisgICAgICAgIChTY20ucm9vdF9wYXRoKTog
VmlydHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBieSBjaGlsZHJlbi4KKyAgICAgICAgKFNjbS5i
cmFuY2gpOiBEaXR0by4KKyAgICAgICAgKFNjbS5yZW1vdGUpOiBEaXR0by4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHk6IEFk
ZGVkLgorICAgICAgICAoU3ZuKTogT2JqZWN0IHJlcHJlc2VudGluZyBhIGxvY2FsIFN2biBjaGVj
a291dC4KKyAgICAgICAgKFN2bi5pc19jaGVja291dCk6IENoZWNrIGlmIGEgZ2l2ZW4gcGF0aCBp
cyBhIHN2biBjaGVja291dC4KKyAgICAgICAgKFN2bi5fX2luaXRfXyk6IEluaXRpYWxpemUgYSBT
dm4gY2hlY2tvdXQuCisgICAgICAgIChTdm4uaW5mbyk6IFJldHVybiB0aGUgY29udGVudHMgb2Yg
c3ZuIGluZm8gYXMgYSBkaWN0aW9uYXJ5LgorICAgICAgICAoU3ZuLnJvb3RfcGF0aCk6IFJldHVy
biB0aGUgcGF0aCBmb3IgdGhlIHJvb3Qgb2YgdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAg
IChTdm4uYnJhbmNoKTogUmV0dXJuIHRoZSBjdXJyZW50IGJyYW5jaC4KKyAgICAgICAgKFN2bi5y
ZW1vdGUpOiBSZXR1cm4gdGhlIHVybCBvZiB0aGUgcmVtb3RlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzOiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvbG9jYWw6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHk6IEFkZGVkLgorICAgICAgICAoR2l0KTogTW9jayBhIGxvY2FsIEdpdCBy
ZXBvc2l0b3J5LgorICAgICAgICAoR2l0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHk6IEFkZGVk
LgorICAgICAgICAoU3ZuKTogTW9jayBhIGxvY2FsIFNWTiByZXBvc2l0b3J5LgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Q6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRl
c3RHaXQpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3Qvc2NtX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTY20pOgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3Zu
X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RTdm4pOgorCiAyMDIwLTA5LTAzICBM
YXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gZ2Vu
ZXJhdGUtYnVuZGxlOiBSZW1vdmUgdGhlIHppcCBleHRlbnNpb24gZnJvbSB0aGUgdXBsb2FkZWQg
Y2hlY2tzdW0gZmlsZW5hbWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2RlY29yYXRvcnMucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9kZWNvcmF0b3JzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbnNwZWN0CitpbXBv
cnQgdGltZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworCitjbGFzcyBN
ZW1vaXplKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVvdXQ9Tm9uZSwgY2Fj
aGVkPVRydWUpOgorICAgICAgICBzZWxmLl9jYWNoZSA9IGRlZmF1bHRkaWN0KGRpY3QpCisgICAg
ICAgIHNlbGYuX2xhc3RfY2FsbGVkID0gZGVmYXVsdGRpY3QoZGljdCkKKyAgICAgICAgc2VsZi50
aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmNhY2hlZCA9IGNhY2hlZAorCisgICAgZGVm
IF9fY2FsbF9fKHNlbGYsIGZ1bmN0aW9uKToKKyAgICAgICAgZGVmIGRlY29yYXRvcigqYXJncywg
Kiprd2FyZ3MpOgorICAgICAgICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dAorICAgICAgICAg
ICAgaWYgJ3RpbWVvdXQnIG5vdCBpbiBpbnNwZWN0LmdldGFyZ3NwZWMoZnVuY3Rpb24pLmFyZ3M6
CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGt3YXJncy5wb3AoJ3RpbWVvdXQnLCB0aW1lb3V0
KQorCisgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLmNhY2hlZAorICAgICAgICAgICAgaWYgJ2Nh
Y2hlZCcgbm90IGluIGluc3BlY3QuZ2V0YXJnc3BlYyhmdW5jdGlvbikuYXJnczoKKyAgICAgICAg
ICAgICAgICBjYWNoZWQgPSBrd2FyZ3MucG9wKCdjYWNoZWQnLCBjYWNoZWQpCisKKyAgICAgICAg
ICAgIGxhc3RfY2FsbGVkID0gc2VsZi5fbGFzdF9jYWxsZWRbZnVuY3Rpb25dLmdldChhcmdzLCAw
KQorICAgICAgICAgICAgaXNfY2FjaGVkID0gYXJncyBpbiBzZWxmLl9jYWNoZVtmdW5jdGlvbl0K
KyAgICAgICAgICAgIGlmIG5vdCBjYWNoZWQ6CisgICAgICAgICAgICAgICAgaXNfY2FjaGVkID0g
RmFsc2UKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgYW5kIHRpbWVvdXQgPCB0aW1lLnRpbWUoKSAt
IGxhc3RfY2FsbGVkOgorICAgICAgICAgICAgICAgIGlzX2NhY2hlZCA9IEZhbHNlCisgICAgICAg
ICAgICBpZiBpc19jYWNoZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlW2Z1
bmN0aW9uXS5nZXQoYXJncywgTm9uZSkKKworICAgICAgICAgICAgdmFsdWUgPSBmdW5jdGlvbigq
YXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBzZWxmLl9sYXN0X2NhbGxlZFtmdW5jdGlvbl1b
YXJnc10gPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2VsZi5fY2FjaGVbZnVuY3Rpb25dW2Fy
Z3NdID0gdmFsdWUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGRlY29yYXRv
ci5jbGVhciA9IHNlbGYuY2xlYXIKKyAgICAgICAgcmV0dXJuIGRlY29yYXRvcgorCisgICAgZGVm
IGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWNoZSA9IGRlZmF1bHRkaWN0KGRpY3QpCisg
ICAgICAgIHNlbGYuX2xhc3RfY2FsbGVkID0gZGVmYXVsdGRpY3QoZGljdCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvZGVjb3Jh
dG9yc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL2RlY29yYXRvcnNfdW5pdHRlc3QucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS90ZXN0cy9kZWNvcmF0b3JzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTA5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBkZWNv
cmF0b3JzLCBtb2NrcworCisKK2NsYXNzIFRlc3RNZW1vaXplKHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBjb3VudCA9IDAKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5NZW1v
aXplKCkKKyAgICBkZWYgaW5jcmVtZW50X2NhY2hlKCk6CisgICAgICAgIFRlc3RNZW1vaXplLmNv
dW50ICs9IDEKKyAgICAgICAgcmV0dXJuIFRlc3RNZW1vaXplLmNvdW50CisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZShjYWNoZWQ9RmFsc2UpCisgICAgZGVmIGlu
Y3JlbWVudF9ub19jYWNoZSgpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCArPSAxCisgICAg
ICAgIHJldHVybiBUZXN0TWVtb2l6ZS5jb3VudAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIEBk
ZWNvcmF0b3JzLk1lbW9pemUodGltZW91dD0xMCkKKyAgICBkZWYgaW5jcmVtZW50X3RpbWVvdXRf
Y2FjaGUoKToKKyAgICAgICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQorICAgICAgICByZXR1cm4g
VGVzdE1lbW9pemUuY291bnQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5N
ZW1vaXplKCkKKyAgICBkZWYgaW5jcmVtZW50X2FuZF9yYWlzZSgpOgorICAgICAgICBUZXN0TWVt
b2l6ZS5jb3VudCArPSAxCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VYQ0VQVElPTicpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisgICAgZGVmIGlu
Y3JlbWVudF93aXRoX2FyZ3ModGltZW91dD1Ob25lLCBjYWNoZWQ9Tm9uZSk6CisgICAgICAgIHJl
dHVybiB0aW1lb3V0LCBjYWNoZWQKKworICAgIGRlZiB0ZXN0X2NhY2hlZChzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5UaW1lOgorICAgICAgICAgICAgVGVzdE1lbW9pemUuY291bnQgPSAwCisg
ICAgICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUuY2xlYXIoKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoKSwgMSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCks
IDEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50
X2NhY2hlKGNhY2hlZD1GYWxzZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRl
c3RNZW1vaXplLmluY3JlbWVudF9jYWNoZSgpLCAyKQorCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9jYWNoZSh0aW1lb3V0PTEwKSwgMikKKyAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMTUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RN
ZW1vaXplLmluY3JlbWVudF9jYWNoZSh0aW1lb3V0PTEwKSwgMykKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKCksIDMpCisKKyAgICBkZWYg
dGVzdF9ub3RfY2FjaGVkKHNlbGYpOgorICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfbm9fY2FjaGUoKSwg
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfbm9fY2Fj
aGUoKSwgMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVu
dF9ub19jYWNoZShjYWNoZWQ9VHJ1ZSksIDIpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0X2NhY2hl
ZChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5UaW1lOgorICAgICAgICAgICAgVGVzdE1lbW9p
emUuY291bnQgPSAwCisgICAgICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9j
YWNoZS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmlu
Y3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICB0
aW1lLnNsZWVwKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmlu
Y3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDEpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91
dF9jYWNoZSgpLCAyKQorICAgICAgICAgICAgdGltZS5zbGVlcCg4KQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfdGltZW91dF9jYWNoZSh0aW1lb3V0
PTUpLCAzKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgVGVzdE1lbW9pemUuaW5j
cmVtZW50X2FuZF9yYWlzZSgpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdGluZ19hcmdzKHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF93aXRoX2Fy
Z3MoCisgICAgICAgICAgICB0aW1lb3V0PSd0aW1lb3V0JywKKyAgICAgICAgICAgIGNhY2hlZD0n
Y2FjaGVkJywKKyAgICAgICAgKSwgKCd0aW1lb3V0JywgJ2NhY2hlZCcpKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3dpdGhfYXJncygKKyAgICAgICAg
ICAgIHRpbWVvdXQ9J3RpbWVvdXQtbmV3JywKKyAgICAgICAgICAgIGNhY2hlZD0nY2FjaGVkLW5l
dycsCisgICAgICAgICksICgndGltZW91dCcsICdjYWNoZWQnKSkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNjY1NTkpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsMTMgQEAgc2V0dXAoCiAgICAgYXV0aG9yPSdKb25hdGhhbiBCZWRh
cmQnLAogICAgIGF1dGhvcl9lbWFpbD0namJlZGFyZEBhcHBsZS5jb20nLAogICAgIGxpY2Vuc2U9
J01vZGlmaWVkIEJTRCcsCi0gICAgcGFja2FnZXM9Wyd3ZWJraXRzY21weSddLAorICAgIHBhY2th
Z2VzPVsKKyAgICAgICAgJ3dlYmtpdHNjbXB5JywKKyAgICAgICAgJ3dlYmtpdHNjbXB5LmxvY2Fs
JywKKyAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzJywKKyAgICAgICAgJ3dlYmtpdHNjbXB5Lm1v
Y2tzLmxvY2FsJywKKyAgICAgICAgJ3dlYmtpdHNjbXB5LnRlc3QnLAorICAgIF0sCiAgICAgaW5z
dGFsbF9yZXF1aXJlcz1bJ3dlYmtpdGNvcmVweSddLAogICAgIGluY2x1ZGVfcGFja2FnZV9kYXRh
PVRydWUsCiAgICAgemlwX3NhZmU9RmFsc2UsCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQko
cmV2aXNpb24gMjY2NTU5KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0j
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDUgKzQ2LDkgQEAgZXhjZXB0IEltcG9ydEVycm9y
OgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0YWxs
IHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBpbmRleCBVUkw+YCIKICAg
ICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDEpCit2ZXJzaW9uID0gVmVyc2lvbigwLCAw
LCAyKQorCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAorZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbW9ja3MKKwogbmFtZSA9ICd3ZWJraXRzY21weScKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL19faW5pdF9fLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L2xvY2FsL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL19faW5pdF9fLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsLnNjbSBpbXBvcnQgU2Nt
Citmcm9tIHdlYmtpdHNjbXB5LmxvY2FsLnN2biBpbXBvcnQgU3ZuCitmcm9tIHdlYmtpdHNjbXB5
LmxvY2FsLmdpdCBpbXBvcnQgR2l0CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2xvY2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9y
dCBydW4sIGRlY29yYXRvcnMKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwgaW1wb3J0IFNjbQorCisK
K2NsYXNzIEdpdChTY20pOgorICAgIGV4ZWN1dGFibGUgPSAnL3Vzci9iaW4vZ2l0JworCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX2NoZWNrb3V0KGNscywgcGF0aCk6CisgICAgICAgIHJl
dHVybiBydW4oW2Nscy5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCdd
LCBjd2Q9cGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSkucmV0dXJuY29kZSA9PSAwCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHN1cGVyKEdpdCwgc2VsZikuX19pbml0
X18ocGF0aCkKKyAgICAgICAgaWYgbm90IHNlbGYucm9vdF9wYXRoOgorICAgICAgICAgICAgcmFp
c2UgT1NFcnJvcignUHJvdmlkZWQgcGF0aCB7fSBpcyBub3QgYSBnaXQgcmVwb3NpdG9yeScuZm9y
bWF0KHBhdGgpKQorCisgICAgQHByb3BlcnR5CisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisg
ICAgZGVmIHJvb3RfcGF0aChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1
dGFibGUsICdyZXYtcGFyc2UnLCAnLS1zaG93LXRvcGxldmVsJ10sIGN3ZD1zZWxmLnBhdGgsIGNh
cHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIGlmIHJlc3VsdC5y
ZXR1cm5jb2RlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5zdGRvdXQucnN0cmlwKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2goc2VsZik6
CisgICAgICAgIHN0YXR1cyA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAnc3RhdHVzJ10sIGN3ZD1z
ZWxmLnJvb3RfcGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAg
ICAgICAgaWYgc3RhdHVzLnJldHVybmNvZGU6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2Vw
dGlvbignRmFpbGVkIHRvIHJ1biBgZ2l0IHN0YXR1c2AgZm9yIHt9Jy5mb3JtYXQoc2VsZi5yb290
X3BhdGgpKQorICAgICAgICBpZiBzdGF0dXMuc3Rkb3V0LnNwbGl0bGluZXMoKVswXS5zdGFydHN3
aXRoKCdIRUFEIGRldGFjaGVkIGF0Jyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2
LXJlZicsICdIRUFEJ10sIGN3ZD1zZWxmLnJvb3RfcGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwg
ZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAg
ICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignRmFpbGVkIHRvIHJldHJpZXZlIGJyYW5jaCBmb3Ig
e30nLmZvcm1hdChzZWxmLnJvb3RfcGF0aCkpCisgICAgICAgIHJldHVybiByZXN1bHQuc3Rkb3V0
LnJzdHJpcCgpCisKKyAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIHJl
c3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmVtb3RlJywgJ2dldC11cmwnLCBuYW1lIG9y
ICdvcmlnaW4nXSwgY3dkPXNlbGYucm9vdF9wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNv
ZGluZz0ndXRmLTgnKQorICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAg
IHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gcmV0cmlldmUgcmVtb3RlIGZvciB7fScu
Zm9ybWF0KHNlbGYucm9vdF9wYXRoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0
cmlwKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2xvY2FsL3NjbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworY2xhc3MgU2NtKG9iamVjdCk6CisgICAgY2xhc3MgRXhjZXB0aW9u
KFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHBhc3MKKworICAgIGV4ZWN1dGFibGUgPSBOb25lCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9wYXRoKGNscywgcGF0aCk6CisgICAgICAg
IGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisKKyAgICAgICAgaWYgbG9jYWwuR2l0Lmlz
X2NoZWNrb3V0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGxvY2FsLkdpdChwYXRoKQorICAg
ICAgICBpZiBsb2NhbC5Tdm4uaXNfY2hlY2tvdXQocGF0aCk6CisgICAgICAgICAgICByZXR1cm4g
bG9jYWwuU3ZuKHBhdGgpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3t9IGlzIG5vdCBhIGtub3du
IFNDTSB0eXBlJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UocGF0aCwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
JycpCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBy
b290X3BhdGgoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGJyYW5jaChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2
bi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIHdlYmtpdGNv
cmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0b3JzCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsLnNjbSBp
bXBvcnQgU2NtCisKKworY2xhc3MgU3ZuKFNjbSk6CisgICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xv
Y2FsL2Jpbi9zdm4nCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNfY2hlY2tvdXQoY2xz
LCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHJ1bihbY2xzLmV4ZWN1dGFibGUsICdpbmZvJ10sIGN3
ZD1wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlKS5yZXR1cm5jb2RlID09IDAKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXyhw
YXRoKQorICAgICAgICBpZiBub3Qgc2VsZi5yb290X3BhdGg6CisgICAgICAgICAgICByYWlzZSBP
U0Vycm9yKCdQcm92aWRlZCBwYXRoIHt9IGlzIG5vdCBhIHN2biByZXBvc2l0b3J5Jy5mb3JtYXQo
cGF0aCkpCisKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKGNhY2hlZD1GYWxzZSkKKyAgICBkZWYg
aW5mbyhzZWxmKToKKyAgICAgICAgaW5mb19yZXN1bHQgPSBydW4oW3NlbGYuZXhlY3V0YWJsZSwg
J2luZm8nXSwgY3dkPXNlbGYucGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0
Zi04JykKKyAgICAgICAgaWYgaW5mb19yZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJl
dHVybiB7fQorCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGZvciBsaW5lIGluIGluZm9f
cmVzdWx0LnN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBzcGxpdCA9IGxpbmUuc3Bs
aXQoJzogJykKKyAgICAgICAgICAgIHJlc3VsdFtzcGxpdFswXV0gPSAnOiAnLmpvaW4oc3BsaXRb
MTpdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcm9v
dF9wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbmZvKGNhY2hlZD1UcnVlKS5nZXQo
J1dvcmtpbmcgQ29weSBSb290IFBhdGgnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGJyYW5j
aChzZWxmKToKKyAgICAgICAgbG9jYWxfcGF0aCA9IHNlbGYucGF0aFtsZW4oc2VsZi5yb290X3Bh
dGgpOl0KKyAgICAgICAgaWYgbG9jYWxfcGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmlu
Zm8oKVsnUmVsYXRpdmUgVVJMJ11bMjotbGVuKGxvY2FsX3BhdGgpXQorICAgICAgICByZXR1cm4g
c2VsZi5pbmZvKClbJ1JlbGF0aXZlIFVSTCddWzI6XQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBu
YW1lPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5pbmZvKClbJ1JlcG9zaXRvcnkgUm9vdCdd
CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworZnJvbSB3ZWJraXRzY21w
eS5tb2NrcyBpbXBvcnQgbG9jYWwKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xv
Y2FsL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL19faW5pdF9fLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCitmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzLmxvY2FsLnN2biBp
bXBvcnQgU3ZuCitmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzLmxvY2FsLmdpdCBpbXBvcnQgR2l0Cklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xv
Y2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisjIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRjb3JlcHkg
aW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAorCisKK2NsYXNzIEdp
dChtb2Nrcy5TdWJwcm9jZXNzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD0nLy5pbnZh
bGlkLWdpdCcsIGJyYW5jaD1Ob25lLCByZW1vdGU9Tm9uZSwgZGV0YWNoZWQ9Tm9uZSk6CisgICAg
ICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2ggb3IgJ21h
c3RlcicKKyAgICAgICAgc2VsZi5yZW1vdGUgPSByZW1vdGUgb3IgJ2dpdEB3ZWJraXQub3JnOi9t
b2NrL3t9Jy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKyAgICAgICAgc2VsZi5kZXRh
Y2hlZCA9IGRldGFjaGVkIG9yIEZhbHNlCisKKyAgICAgICAgc3VwZXIoR2l0LCBzZWxmKS5fX2lu
aXRfXygKKyAgICAgICAgICAgIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAg
ICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsICdzdGF0dXMnLAorICAgICAgICAgICAgICAgIGN3ZD1z
ZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2Fy
Z3M6CisgICAgICAgICAgICAgICAgICAgIG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0PScnJ0hFQUQgZGV0YWNoZWQgYXQgYjhhMzE1ZWQ5M2MKK25vdGhpbmcgdG8gY29tbWl0
LCB3b3JraW5nIHRyZWUgY2xlYW4KKycnJyBpZiBzZWxmLmRldGFjaGVkIGVsc2UgJycnJ09uIGJy
YW5jaCB7YnJhbmNofQorWW91ciBicmFuY2ggaXMgdXAgdG8gZGF0ZSB3aXRoICdvcmlnaW4ve2Jy
YW5jaH0nLgorCitub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCisnJycuZm9y
bWF0KGJyYW5jaD1zZWxmLmJyYW5jaCksCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAg
ICAgICApLAorICAgICAgICAgICAgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAg
ICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwn
LAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29tcGxl
dGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
Y29kZT0wLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9J3t9XG4nLmZvcm1hdChzZWxmLnBh
dGgpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNz
LlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLCAncmV2LXBhcnNl
JywgJy0tYWJicmV2LXJlZicsICdIRUFEJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRo
LAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nr
cy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAor
ICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9J3t9XG4nLmZvcm1hdCgnSEVBRCcgaWYgc2VsZi5k
ZXRhY2hlZCBlbHNlIHNlbGYuYnJhbmNoKSwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAg
ICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQu
ZXhlY3V0YWJsZSwgJ3JlbW90ZScsICdnZXQtdXJsJywgJy4qJywKKyAgICAgICAgICAgICAgICBj
d2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoq
a3dhcmdzOiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuY29kZT0wLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9J3t9XG4nLmZvcm1hdChzZWxm
LnJlbW90ZSksCisgICAgICAgICAgICAgICAgKSBpZiBhcmdzWzNdID09ICdvcmlnaW4nIGVsc2Ug
bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9
MTI4LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ImZhdGFsOiBObyBzdWNoIHJlbW90ZSAn
e30nXG4iLmZvcm1hdChhcmdzWzNdKSwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg
KSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhl
Y3V0YWJsZSwKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAg
IGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAg
IHJldHVybmNvZGU9MSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPSd1c2FnZTogZ2l0IFst
LXZlcnNpb25dIFstLWhlbHBdLi4uXG4nLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAg
ICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5l
eGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBs
ZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MTI4LAorICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9J2ZhdGFsOiBub3QgYSBnaXQgcmVwb3NpdG9yeSAob3IgYW55IHBhcmVu
dCB1cCB0byBtb3VudCBwb2ludClcblN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJ
VF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuXG4nLAorICAgICAgICAgICAg
ICAgICksCisgICAgICAgICAgICApLAorICAgICAgICApCkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bW9ja3MvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL3N2bi5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1vY2tzCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBsb2NhbAorCisKK2NsYXNzIFN2bihtb2Nrcy5TdWJwcm9jZXNzKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD0nLy5pbnZhbGlkLXN2bicsIGJyYW5jaD1Ob25l
LCByZW1vdGU9Tm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5i
cmFuY2ggPSBicmFuY2ggb3IgJ3RydW5rJworICAgICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZSBv
ciAnaHR0cHM6Ly9zdm4ubW9jay5vcmcvcmVwb3NpdG9yeS97fScuZm9ybWF0KG9zLnBhdGguYmFz
ZW5hbWUocGF0aCkpCisKKyAgICAgICAgc3VwZXIoU3ZuLCBzZWxmKS5fX2luaXRfXygKKyAgICAg
ICAgICAgIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuU3Zu
LmV4ZWN1dGFibGUsICdpbmZvJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAg
ICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBtb2Nrcy5Qcm9j
ZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9CisgICAgICAgICAgICAgICAgICAgICAgICAnUGF0aDogLlxu
JworICAgICAgICAgICAgICAgICAgICAgICAgJ1dvcmtpbmcgQ29weSBSb290IFBhdGg6IHtwYXRo
fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1VSTDoge3JlbW90ZX0ve2JyYW5jaH17ZGly
ZWN0b3J5fVxuJworICAgICAgICAgICAgICAgICAgICAgICAgJ1JlbGF0aXZlIFVSTDogXi97YnJh
bmNofXtkaXJlY3Rvcnl9XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnUmVwb3NpdG9yeSBS
b290OiB7cmVtb3RlfVxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5PWt3YXJncy5nZXQoJ2N3ZCcsICcnKVtsZW4oc2VsZi5wYXRoKTpdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbW90ZT1zZWxmLnJlbW90ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmFuY2g9c2VsZi5icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAg
ICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAg
ICAgICAgICAgIGxvY2FsLlN2bi5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxm
LnBhdGgsCisgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlv
bigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xLAorICAgICAgICAgICAgICAgICAg
ICBzdGRlcnI9IlR5cGUgJ3N2biBoZWxwJyBmb3IgdXNhZ2UuXG4iLAorICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAg
ICAgbG9jYWwuU3ZuLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJk
YSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAg
ICAgICAgICByZXR1cm5jb2RlPTEsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0ic3ZuOiBF
MTU1MDA3OiAne30nIGlzIG5vdCBhIHdvcmtpbmcgY29weVxuIi5mb3JtYXQoa3dhcmdzLmdldCgn
Y3dkJykpLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksCisgICAgICAgICkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
X19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3QvZ2l0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0c2NtcHkgaW1w
b3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRlc3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9j
YWwuU3ZuKCk6CisgICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYu
cGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0LmV4ZWN1dGFibGUsIGxv
Y2FsLkdpdC5leGVjdXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0aCkucm9vdF9wYXRoLCBzZWxmLnBhdGgpCisKKyAgICAg
ICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICAgICAg
bG9jYWwuR2l0KG9zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpKS5yb290X3BhdGgKKworICAgIGRl
ZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5w
YXRoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0aCku
YnJhbmNoLCAnbWFzdGVyJykKKworICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBh
dGgsIGRldGFjaGVkPVRydWUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5H
aXQoc2VsZi5wYXRoKS5icmFuY2gsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZW1vdGUoc2VsZik6
CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMgcmVwbzoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuR2l0KHNlbGYucGF0aCkucmVtb3RlKCksIHJl
cG8ucmVtb3RlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvdGVzdC9zY21fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9zY21fdW5pdHRlc3QucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvdGVzdC9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgdW5p
dHRlc3QKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworCisKK2NsYXNzIFRl
c3RTY20odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhdGggPSAnL21vY2svZGlyZWN0b3J5Jwor
CisgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2Fs
LkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICAgICAgbG9jYWwuU2NtLmZyb21fcGF0aChzZWxm
LnBhdGgpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgbG9jYWwuU2NtKHNl
bGYucGF0aCkucm9vdF9wYXRoCisKKyAgICBkZWYgdGVzdF9icmFuY2goc2VsZik6CisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAg
ICBsb2NhbC5TY20oc2VsZi5wYXRoKS5icmFuY2gKKworICAgIGRlZiB0ZXN0X3JlbW90ZShzZWxm
KToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToK
KyAgICAgICAgICAgIGxvY2FsLlNjbShzZWxmLnBhdGgpLnJlbW90ZSgpCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MKKworCitjbGFzcyBUZXN0U3ZuKHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisKKyAgICBkZWYgdGVz
dF9kZXRlY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0
aCksIG1vY2tzLmxvY2FsLkdpdCgpOgorICAgICAgICAgICAgZGV0ZWN0ID0gbG9jYWwuU2NtLmZy
b21fcGF0aChzZWxmLnBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRldGVjdC5l
eGVjdXRhYmxlLCBsb2NhbC5Tdm4uZXhlY3V0YWJsZSkKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2Vs
Zik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCk6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLlN2bihzZWxmLnBhdGgpLnJvb3RfcGF0aCwgc2VsZi5w
YXRoKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAg
ICAgICAgICAgICAgIGxvY2FsLlN2bihvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKSkucm9vdF9w
YXRoCisKKyAgICBkZWYgdGVzdF9icmFuY2goc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuU3ZuKHNlbGYucGF0aCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLlN2
bihzZWxmLnBhdGgpLmJyYW5jaCwgJ3RydW5rJykKKworICAgIGRlZiB0ZXN0X3JlbW90ZShzZWxm
KToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSBhcyByZXBvOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5Tdm4oc2VsZi5wYXRoKS5yZW1vdGUoKSwg
cmVwby5yZW1vdGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408007</attachid>
            <date>2020-09-04 11:45:15 -0700</date>
            <delta_ts>2020-09-04 12:12:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-215960-20200904114514.patch</filename>
            <type>text/plain</type>
            <size>39888</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NjYyMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTA5LTA0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCByb290LCBicmFuY2ggYW5kIHJlbW90ZSBm
b3IgbG9jYWwgU0NNIHJlcG9zaXRvcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTYwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82Nzk2ODkx
OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEZXdlaSBaaHUuCisKKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1wIHZl
cnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9kZWNvcmF0b3JzLnB5OiBBZGRlZC4KKyAgICAgICAgKE1lbW9pemUpOiBBZGQgYSBtZW1v
aXplIGNhbGwgdGhhdCBjYW4gY2FjaGUgYSByZXNwb25zZSBmb3IgYSBzZXQgYW1vdW50IG9mIHRp
bWUKKyAgICAgICAgT3IgYmUgZXhwbGljaXRseSBjbGVhcmVkLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvZGVjb3JhdG9yc191bml0
dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0TWVtb2l6ZSk6CisgICAgICAgICogU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHk6IEJ1bXAgdmVy
c2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvbG9jYWwvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weTogQWRkZWQuCisg
ICAgICAgIChHaXQpOiBPYmplY3QgcmVwcmVzZW50aW5nIGEgbG9jYWwgZ2l0IGNoZWNrb3V0Lgor
ICAgICAgICAoR2l0LmlzX2NoZWNrb3V0KTogQ2hlY2sgaWYgYSBnaXZlbiBwYXRoIGlzIGEgZ2l0
IGNoZWNrb3V0LgorICAgICAgICAoR2l0Ll9faW5pdF9fKTogSW5pdGlhbGl6ZSBhIEdpdCBjaGVj
a291dC4KKyAgICAgICAgKEdpdC5yb290X3BhdGgpOiBSZXR1cm4gdGhlIHBhdGggZm9yIHRoZSBy
b290IG9mIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAoR2l0LmJyYW5jaCk6IFJldHVy
biB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgIChHaXQucmVtb3RlKTogUmV0dXJuIHRoZSB1
cmwgb2YgdGhlIHJlbW90ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6IEFkZGVkLgorICAgICAgICAoU2NtKTogQmFzZSBj
bGFzcyBmb3IgYWxsIGxvY2FsIFNDTSBjaGVja291dHMuCisgICAgICAgIChTY20uRXhjZXB0aW9u
KToKKyAgICAgICAgKFNjbS5mcm9tX3BhdGgpOiBHaXZlbiBhIHBhdGgsIHJldHVybiBhbiBpbnN0
YW50aWF0ZWQgU1ZOIG9iamVjdCBmcm9tIHRoYXQKKyAgICAgICAgcGF0aCwgaWYgcG9zc2libGUu
CisgICAgICAgIChTY20uX19pbml0X18pOgorICAgICAgICAoU2NtLnJvb3RfcGF0aCk6IFZpcnR1
YWwgZnVuY3Rpb24gaW1wbGVtZW50ZWQgYnkgY2hpbGRyZW4uCisgICAgICAgIChTY20uYnJhbmNo
KTogRGl0dG8uCisgICAgICAgIChTY20ucmVtb3RlKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5OiBBZGRlZC4K
KyAgICAgICAgKFN2bik6IE9iamVjdCByZXByZXNlbnRpbmcgYSBsb2NhbCBTdm4gY2hlY2tvdXQu
CisgICAgICAgIChTdm4uaXNfY2hlY2tvdXQpOiBDaGVjayBpZiBhIGdpdmVuIHBhdGggaXMgYSBz
dm4gY2hlY2tvdXQuCisgICAgICAgIChTdm4uX19pbml0X18pOiBJbml0aWFsaXplIGEgU3ZuIGNo
ZWNrb3V0LgorICAgICAgICAoU3ZuLmluZm8pOiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHN2biBp
bmZvIGFzIGEgZGljdGlvbmFyeS4KKyAgICAgICAgKFN2bi5yb290X3BhdGgpOiBSZXR1cm4gdGhl
IHBhdGggZm9yIHRoZSByb290IG9mIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorICAgICAgICAoU3Zu
LmJyYW5jaCk6IFJldHVybiB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgIChTdm4ucmVtb3Rl
KTogUmV0dXJuIHRoZSB1cmwgb2YgdGhlIHJlbW90ZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2NrczogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvX19pbml0X18ucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L21vY2tzL2xvY2FsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9fX2luaXRfXy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9j
YWwvZ2l0LnB5OiBBZGRlZC4KKyAgICAgICAgKEdpdCk6IE1vY2sgYSBsb2NhbCBHaXQgcmVwb3Np
dG9yeS4KKyAgICAgICAgKEdpdC5fX2luaXRfXyk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvc3ZuLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFN2bik6IE1vY2sgYSBsb2NhbCBTVk4gcmVwb3NpdG9yeS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L19faW5p
dF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0R2l0
KToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90
ZXN0L3NjbV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0U2NtKToKKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3N2bl91bml0
dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0U3ZuKToKKwogMjAyMC0wOS0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQmluZGluZyBnZW5lcmF0b3Ig
aXMgbm90IGFsd2F5cyBjb21wdXRpbmcgdGhlIHJpZ2h0IGludGVyZmFjZSBhdHRyaWJ1dGVzCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2NjYyMykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91
dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBv
cnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3Jl
cHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91
dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0LCA0KQordmVyc2lvbiA9IFZl
cnNpb24oMCwgNCwgNSkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0IFBh
Y2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgpJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9kZWNvcmF0
b3JzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvZGVjb3JhdG9ycy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2RlY29yYXRvcnMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCB0aW1lCitmcm9tIGNvbGxlY3Rpb25z
IGltcG9ydCBkZWZhdWx0ZGljdAorCisKK2NsYXNzIE1lbW9pemUob2JqZWN0KToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdGltZW91dD1Ob25lLCBjYWNoZWQ9VHJ1ZSk6CisgICAgICAgIHNlbGYu
X2NhY2hlID0gZGVmYXVsdGRpY3QoZGljdCkKKyAgICAgICAgc2VsZi5fbGFzdF9jYWxsZWQgPSBk
ZWZhdWx0ZGljdChkaWN0KQorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAg
IHNlbGYuY2FjaGVkID0gY2FjaGVkCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuY3Rpb24p
OgorICAgICAgICBkZWYgZGVjb3JhdG9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICB0
aW1lb3V0ID0gc2VsZi50aW1lb3V0CisgICAgICAgICAgICBpZiAndGltZW91dCcgbm90IGluIGlu
c3BlY3QuZ2V0YXJnc3BlYyhmdW5jdGlvbikuYXJnczoKKyAgICAgICAgICAgICAgICB0aW1lb3V0
ID0ga3dhcmdzLnBvcCgndGltZW91dCcsIHRpbWVvdXQpCisKKyAgICAgICAgICAgIGNhY2hlZCA9
IHNlbGYuY2FjaGVkCisgICAgICAgICAgICBpZiAnY2FjaGVkJyBub3QgaW4gaW5zcGVjdC5nZXRh
cmdzcGVjKGZ1bmN0aW9uKS5hcmdzOgorICAgICAgICAgICAgICAgIGNhY2hlZCA9IGt3YXJncy5w
b3AoJ2NhY2hlZCcsIGNhY2hlZCkKKworICAgICAgICAgICAgbGFzdF9jYWxsZWQgPSBzZWxmLl9s
YXN0X2NhbGxlZFtmdW5jdGlvbl0uZ2V0KGFyZ3MsIDApCisgICAgICAgICAgICBpc19jYWNoZWQg
PSBhcmdzIGluIHNlbGYuX2NhY2hlW2Z1bmN0aW9uXQorICAgICAgICAgICAgaWYgbm90IGNhY2hl
ZDoKKyAgICAgICAgICAgICAgICBpc19jYWNoZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgdGlt
ZW91dCBhbmQgdGltZW91dCA8IHRpbWUudGltZSgpIC0gbGFzdF9jYWxsZWQ6CisgICAgICAgICAg
ICAgICAgaXNfY2FjaGVkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGlzX2NhY2hlZDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVbZnVuY3Rpb25dLmdldChhcmdzLCBOb25lKQor
CisgICAgICAgICAgICB2YWx1ZSA9IGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAg
ICAgIHNlbGYuX2xhc3RfY2FsbGVkW2Z1bmN0aW9uXVthcmdzXSA9IHRpbWUudGltZSgpCisgICAg
ICAgICAgICBzZWxmLl9jYWNoZVtmdW5jdGlvbl1bYXJnc10gPSB2YWx1ZQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlCisKKyAgICAgICAgZGVjb3JhdG9yLmNsZWFyID0gc2VsZi5jbGVhcgorICAg
ICAgICByZXR1cm4gZGVjb3JhdG9yCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNl
bGYuX2NhY2hlID0gZGVmYXVsdGRpY3QoZGljdCkKKyAgICAgICAgc2VsZi5fbGFzdF9jYWxsZWQg
PSBkZWZhdWx0ZGljdChkaWN0KQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9kZWNvcmF0b3JzX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
dGVzdHMvZGVjb3JhdG9yc191bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL2RlY29yYXRvcnNf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGRlY29yYXRvcnMsIG1vY2tzCisKKworY2xhc3Mg
VGVzdE1lbW9pemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNvdW50ID0gMAorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBpbmNyZW1lbnRf
Y2FjaGUoKToKKyAgICAgICAgVGVzdE1lbW9pemUuY291bnQgKz0gMQorICAgICAgICByZXR1cm4g
VGVzdE1lbW9pemUuY291bnQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAZGVjb3JhdG9ycy5N
ZW1vaXplKGNhY2hlZD1GYWxzZSkKKyAgICBkZWYgaW5jcmVtZW50X25vX2NhY2hlKCk6CisgICAg
ICAgIFRlc3RNZW1vaXplLmNvdW50ICs9IDEKKyAgICAgICAgcmV0dXJuIFRlc3RNZW1vaXplLmNv
dW50CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSh0aW1lb3V0
PTEwKQorICAgIGRlZiBpbmNyZW1lbnRfdGltZW91dF9jYWNoZSgpOgorICAgICAgICBUZXN0TWVt
b2l6ZS5jb3VudCArPSAxCisgICAgICAgIHJldHVybiBUZXN0TWVtb2l6ZS5jb3VudAorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAgIGRlZiBpbmNyZW1l
bnRfYW5kX3JhaXNlKCk6CisgICAgICAgIFRlc3RNZW1vaXplLmNvdW50ICs9IDEKKyAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignRVhDRVBUSU9OJykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBA
ZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgaW5jcmVtZW50X3dpdGhfYXJncyh0aW1lb3V0
PU5vbmUsIGNhY2hlZD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHRpbWVvdXQsIGNhY2hlZAorCisg
ICAgZGVmIHRlc3RfY2FjaGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlRpbWU6CisgICAg
ICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAgIFRlc3RNZW1vaXplLmlu
Y3JlbWVudF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RN
ZW1vaXplLmluY3JlbWVudF9jYWNoZSgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoKSwgMSkKKworICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfY2FjaGUoY2FjaGVkPUZhbHNlKSwgMikK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hl
KCksIDIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVt
ZW50X2NhY2hlKHRpbWVvdXQ9MTApLCAyKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxNSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X2NhY2hlKHRp
bWVvdXQ9MTApLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6ZS5p
bmNyZW1lbnRfY2FjaGUoKSwgMykKKworICAgIGRlZiB0ZXN0X25vdF9jYWNoZWQoc2VsZik6Cisg
ICAgICAgIFRlc3RNZW1vaXplLmNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRl
c3RNZW1vaXplLmluY3JlbWVudF9ub19jYWNoZSgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF9ub19jYWNoZSgpLCAyKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X25vX2NhY2hlKGNhY2hlZD1UcnVlKSwg
MikKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfY2FjaGVkKHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLlRpbWU6CisgICAgICAgICAgICBUZXN0TWVtb2l6ZS5jb3VudCA9IDAKKyAgICAgICAgICAg
IFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwg
MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3Rp
bWVvdXRfY2FjaGUoKSwgMSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoNSkKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3RpbWVvdXRfY2FjaGUoKSwg
MSkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFRlc3RNZW1vaXplLmluY3JlbWVudF90aW1lb3V0X2NhY2hlKCksIDIpCisgICAgICAgICAg
ICB0aW1lLnNsZWVwKDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3RNZW1vaXpl
LmluY3JlbWVudF90aW1lb3V0X2NhY2hlKHRpbWVvdXQ9NSksIDMpCisKKyAgICBkZWYgdGVzdF9l
eGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
cik6CisgICAgICAgICAgICBUZXN0TWVtb2l6ZS5pbmNyZW1lbnRfYW5kX3JhaXNlKCkKKworICAg
IGRlZiB0ZXN0X2NvbmZsaWN0aW5nX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoVGVzdE1lbW9pemUuaW5jcmVtZW50X3dpdGhfYXJncygKKyAgICAgICAgICAgIHRpbWVvdXQ9
J3RpbWVvdXQnLAorICAgICAgICAgICAgY2FjaGVkPSdjYWNoZWQnLAorICAgICAgICApLCAoJ3Rp
bWVvdXQnLCAnY2FjaGVkJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0TWVtb2l6
ZS5pbmNyZW1lbnRfd2l0aF9hcmdzKAorICAgICAgICAgICAgdGltZW91dD0ndGltZW91dC1uZXcn
LAorICAgICAgICAgICAgY2FjaGVkPSdjYWNoZWQtbmV3JywKKyAgICAgICAgKSwgKCd0aW1lb3V0
JywgJ2NhY2hlZCcpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
c2V0dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvc2V0dXAucHkJKHJldmlzaW9uIDI2NjYyMykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwxMyBAQCBz
ZXR1cCgKICAgICBhdXRob3I9J0pvbmF0aGFuIEJlZGFyZCcsCiAgICAgYXV0aG9yX2VtYWlsPSdq
YmVkYXJkQGFwcGxlLmNvbScsCiAgICAgbGljZW5zZT0nTW9kaWZpZWQgQlNEJywKLSAgICBwYWNr
YWdlcz1bJ3dlYmtpdHNjbXB5J10sCisgICAgcGFja2FnZXM9WworICAgICAgICAnd2Via2l0c2Nt
cHknLAorICAgICAgICAnd2Via2l0c2NtcHkubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHku
bW9ja3MnLAorICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MubG9jYWwnLAorICAgICAgICAnd2Vi
a2l0c2NtcHkudGVzdCcsCisgICAgXSwKICAgICBpbnN0YWxsX3JlcXVpcmVzPVsnd2Via2l0Y29y
ZXB5J10sCiAgICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKICAgICB6aXBfc2FmZT1GYWxz
ZSwKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjY2MjMpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDYsNSArNDYsOSBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFs
bCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5k
ZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24o
MCwgMCwgMSkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDIpCisKK2Zyb20gd2Via2l0c2NtcHkg
aW1wb3J0IGxvY2FsCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBtb2NrcworCiBuYW1lID0gJ3dl
YmtpdHNjbXB5JwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvX19pbml0X18ucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zyb20g
d2Via2l0c2NtcHkubG9jYWwuc2NtIGltcG9ydCBTY20KK2Zyb20gd2Via2l0c2NtcHkubG9jYWwu
c3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkubG9jYWwuZ2l0IGltcG9ydCBHaXQKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2Fs
L2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHJ1biwgZGVjb3JhdG9ycworZnJvbSB3
ZWJraXRzY21weS5sb2NhbCBpbXBvcnQgU2NtCisKKworY2xhc3MgR2l0KFNjbSk6CisgICAgZXhl
Y3V0YWJsZSA9ICcvdXNyL2Jpbi9naXQnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaXNf
Y2hlY2tvdXQoY2xzLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHJ1bihbY2xzLmV4ZWN1dGFibGUs
ICdyZXYtcGFyc2UnLCAnLS1zaG93LXRvcGxldmVsJ10sIGN3ZD1wYXRoLCBjYXB0dXJlX291dHB1
dD1UcnVlKS5yZXR1cm5jb2RlID09IDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToK
KyAgICAgICAgc3VwZXIoR2l0LCBzZWxmKS5fX2luaXRfXyhwYXRoKQorICAgICAgICBpZiBub3Qg
c2VsZi5yb290X3BhdGg6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdQcm92aWRlZCBwYXRo
IHt9IGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5Jy5mb3JtYXQocGF0aCkpCisKKyAgICBAcHJvcGVy
dHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKKyAgICBkZWYgcm9vdF9wYXRoKHNlbGYpOgor
ICAgICAgICByZXN1bHQgPSBydW4oW3NlbGYuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLXNo
b3ctdG9wbGV2ZWwnXSwgY3dkPXNlbGYucGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rp
bmc9J3V0Zi04JykKKyAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC5yc3RyaXAoKQorCisgICAg
QHByb3BlcnR5CisgICAgZGVmIGJyYW5jaChzZWxmKToKKyAgICAgICAgc3RhdHVzID0gcnVuKFtz
ZWxmLmV4ZWN1dGFibGUsICdzdGF0dXMnXSwgY3dkPXNlbGYucm9vdF9wYXRoLCBjYXB0dXJlX291
dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiBzdGF0dXMucmV0dXJuY29k
ZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gcnVuIGBnaXQg
c3RhdHVzYCBmb3Ige30nLmZvcm1hdChzZWxmLnJvb3RfcGF0aCkpCisgICAgICAgIGlmIHN0YXR1
cy5zdGRvdXQuc3BsaXRsaW5lcygpWzBdLnN0YXJ0c3dpdGgoJ0hFQUQgZGV0YWNoZWQgYXQnKToK
KyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4
ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSwgY3dkPXNlbGYu
cm9vdF9wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAg
ICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9u
KCdGYWlsZWQgdG8gcmV0cmlldmUgYnJhbmNoIGZvciB7fScuZm9ybWF0KHNlbGYucm9vdF9wYXRo
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGRvdXQucnN0cmlwKCkKKworICAgIGRlZiByZW1v
dGUoc2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFi
bGUsICdyZW1vdGUnLCAnZ2V0LXVybCcsIG5hbWUgb3IgJ29yaWdpbiddLCBjd2Q9c2VsZi5yb290
X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIGlm
IHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Zh
aWxlZCB0byByZXRyaWV2ZSByZW1vdGUgZm9yIHt9Jy5mb3JtYXQoc2VsZi5yb290X3BhdGgpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL3NjbS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBT
Y20ob2JqZWN0KToKKyAgICBjbGFzcyBFeGNlcHRpb24oUnVudGltZUVycm9yKToKKyAgICAgICAg
cGFzcworCisgICAgZXhlY3V0YWJsZSA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBmcm9tX3BhdGgoY2xzLCBwYXRoKToKKyAgICAgICAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQg
bG9jYWwKKworICAgICAgICBpZiBsb2NhbC5HaXQuaXNfY2hlY2tvdXQocGF0aCk6CisgICAgICAg
ICAgICByZXR1cm4gbG9jYWwuR2l0KHBhdGgpCisgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVj
a291dChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKKyAgICAgICAg
cmFpc2UgT1NFcnJvcigne30gaXMgbm90IGEga25vd24gU0NNIHR5cGUnKQorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXRoLCBzdHIp
OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJykKKyAgICAgICAgc2VsZi5wYXRoID0g
cGF0aAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvb3RfcGF0aChzZWxmKToKKyAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJh
bmNoKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRl
ZiByZW1vdGUoc2VsZiwgbmFtZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcigpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9sb2NhbC9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
CisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4sIGRlY29yYXRv
cnMKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwuc2NtIGltcG9ydCBTY20KKworCitjbGFzcyBTdm4o
U2NtKToKKyAgICBleGVjdXRhYmxlID0gJy91c3IvbG9jYWwvYmluL3N2bicKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBpc19jaGVja291dChjbHMsIHBhdGgpOgorICAgICAgICByZXR1cm4g
cnVuKFtjbHMuZXhlY3V0YWJsZSwgJ2luZm8nXSwgY3dkPXBhdGgsIGNhcHR1cmVfb3V0cHV0PVRy
dWUpLnJldHVybmNvZGUgPT0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAg
ICAgICBzdXBlcihTdm4sIHNlbGYpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIGlmIG5vdCBzZWxm
LnJvb3RfcGF0aDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ1Byb3ZpZGVkIHBhdGgge30g
aXMgbm90IGEgc3ZuIHJlcG9zaXRvcnknLmZvcm1hdChwYXRoKSkKKworICAgIEBkZWNvcmF0b3Jz
Lk1lbW9pemUoY2FjaGVkPUZhbHNlKQorICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICBpbmZv
X3Jlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAnaW5mbyddLCBjd2Q9c2VsZi5wYXRoLCBj
YXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBpZiBpbmZvX3Jl
c3VsdC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmV0dXJuIHt9CisKKyAgICAgICAgcmVzdWx0
ID0ge30KKyAgICAgICAgZm9yIGxpbmUgaW4gaW5mb19yZXN1bHQuc3Rkb3V0LnNwbGl0bGluZXMo
KToKKyAgICAgICAgICAgIHNwbGl0ID0gbGluZS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgcmVz
dWx0W3NwbGl0WzBdXSA9ICc6ICcuam9pbihzcGxpdFsxOl0pCisgICAgICAgIHJldHVybiByZXN1
bHQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByb290X3BhdGgoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLmluZm8oY2FjaGVkPVRydWUpLmdldCgnV29ya2luZyBDb3B5IFJvb3QgUGF0aCcp
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNoKHNlbGYpOgorICAgICAgICBsb2NhbF9w
YXRoID0gc2VsZi5wYXRoW2xlbihzZWxmLnJvb3RfcGF0aCk6XQorICAgICAgICBpZiBsb2NhbF9w
YXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5mbygpWydSZWxhdGl2ZSBVUkwnXVsyOi1s
ZW4obG9jYWxfcGF0aCldCisgICAgICAgIHJldHVybiBzZWxmLmluZm8oKVsnUmVsYXRpdmUgVVJM
J11bMjpdCisKKyAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CisgICAgICAgIHJldHVy
biBzZWxmLmluZm8oKVsnUmVwb3NpdG9yeSBSb290J10KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21v
Y2tzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorCitmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzIGltcG9ydCBsb2NhbApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3Mv
bG9jYWwvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvX19pbml0X18ucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
bW9ja3MvbG9jYWwvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK2Zy
b20gd2Via2l0c2NtcHkubW9ja3MubG9jYWwuc3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2Nt
cHkubW9ja3MubG9jYWwuZ2l0IGltcG9ydCBHaXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCBvcworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0
c2NtcHkgaW1wb3J0IGxvY2FsCisKKworY2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPScvLmludmFsaWQtZ2l0JywgYnJhbmNoPU5vbmUsIHJl
bW90ZT1Ob25lLCBkZXRhY2hlZD1Ob25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAg
ICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaCBvciAnbWFzdGVyJworICAgICAgICBzZWxmLnJlbW90
ZSA9IHJlbW90ZSBvciAnZ2l0QHdlYmtpdC5vcmc6L21vY2sve30nLmZvcm1hdChvcy5wYXRoLmJh
c2VuYW1lKHBhdGgpKQorICAgICAgICBzZWxmLmRldGFjaGVkID0gZGV0YWNoZWQgb3IgRmFsc2UK
KworICAgICAgICBzdXBlcihHaXQsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgbW9ja3Mu
U3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwg
J3N0YXR1cycsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAg
ICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczoKKyAgICAgICAgICAgICAgICAgICAg
bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5j
b2RlPTAsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9JycnSEVBRCBkZXRhY2hlZCBh
dCBiOGEzMTVlZDkzYworbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgorJycn
IGlmIHNlbGYuZGV0YWNoZWQgZWxzZSAnJycnT24gYnJhbmNoIHticmFuY2h9CitZb3VyIGJyYW5j
aCBpcyB1cCB0byBkYXRlIHdpdGggJ29yaWdpbi97YnJhbmNofScuCisKK25vdGhpbmcgdG8gY29t
bWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KKycnJy5mb3JtYXQoYnJhbmNoPXNlbGYuYnJhbmNoKSwK
KyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBtb2Nr
cy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxl
LCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCcsCisgICAgICAgICAgICAgICAgY3dkPXNl
bGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uPW1vY2tzLlByb2Nlc3NDb21wbGV0
aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAg
ICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYucGF0aCksCisgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAg
bG9jYWwuR2l0LmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQn
LAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD0ne31cbicuZm9ybWF0KCdIRUFEJyBpZiBzZWxmLmRldGFjaGVkIGVsc2Ugc2VsZi5icmFuY2gp
LAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJv
dXRlKAorICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLCAncmVtb3RlJywgJ2dl
dC11cmwnLCAnLionLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21w
bGV0aW9uKAorICAgICAgICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAg
ICAgICAgIHN0ZG91dD0ne31cbicuZm9ybWF0KHNlbGYucmVtb3RlKSwKKyAgICAgICAgICAgICAg
ICApIGlmIGFyZ3NbM10gPT0gJ29yaWdpbicgZWxzZSBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xMjgsCisgICAgICAgICAgICAgICAgICAg
IHN0ZGVycj0iZmF0YWw6IE5vIHN1Y2ggcmVtb3RlICd7fSdcbiIuZm9ybWF0KGFyZ3NbM10pLAor
ICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRl
KAorICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAg
IGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNz
Q29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZT0xLAorICAgICAgICAg
ICAgICAgICAgICBzdGRlcnI9J3VzYWdlOiBnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0uLi5cbics
CisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91
dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuR2l0LmV4ZWN1dGFibGUsCisgICAgICAgICAgICAg
ICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuY29kZT0xMjgsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0nZmF0YWw6IG5v
dCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgcGFyZW50IHVwIHRvIG1vdW50IHBvaW50KVxuU3Rv
cHBpbmcgYXQgZmlsZXN5c3RlbSBib3VuZGFyeSAoR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZ
U1RFTSBub3Qgc2V0KS5cbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICksCisg
ICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L21vY2tzL2xvY2FsL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9zdm4ucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbW9ja3MvbG9jYWwvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworCitmcm9tIHdl
YmtpdGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCisK
KworY2xhc3MgU3ZuKG1vY2tzLlN1YnByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
YXRoPScvLmludmFsaWQtc3ZuJywgYnJhbmNoPU5vbmUsIHJlbW90ZT1Ob25lKToKKyAgICAgICAg
c2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaCBvciAndHJ1bmsn
CisgICAgICAgIHNlbGYucmVtb3RlID0gcmVtb3RlIG9yICdodHRwczovL3N2bi5tb2NrLm9yZy9y
ZXBvc2l0b3J5L3t9Jy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKworICAgICAgICBz
dXBlcihTdm4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgbW9ja3MuU3VicHJvY2Vzcy5S
b3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5Tdm4uZXhlY3V0YWJsZSwgJ2luZm8nLAorICAg
ICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxh
bWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAg
ICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICdQYXRoOiAuXG4nCisgICAgICAgICAgICAgICAgICAgICAg
ICAnV29ya2luZyBDb3B5IFJvb3QgUGF0aDoge3BhdGh9XG4nCisgICAgICAgICAgICAgICAgICAg
ICAgICAnVVJMOiB7cmVtb3RlfS97YnJhbmNofXtkaXJlY3Rvcnl9XG4nCisgICAgICAgICAgICAg
ICAgICAgICAgICAnUmVsYXRpdmUgVVJMOiBeL3ticmFuY2h9e2RpcmVjdG9yeX1cbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdSZXBvc2l0b3J5IFJvb3Q6IHtyZW1vdGV9XG4nLmZvcm1hdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk9a3dhcmdzLmdldCgnY3dkJywg
JycpW2xlbihzZWxmLnBhdGgpOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1z
ZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlPXNlbGYucmVtb3Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1zZWxmLmJyYW5jaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICks
IG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgbG9jYWwuU3ZuLmV4ZWN1
dGFibGUsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBj
b21wbGV0aW9uPW1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5jb2RlPTEsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0iVHlwZSAnc3ZuIGhlbHAn
IGZvciB1c2FnZS5cbiIsCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKSwgbW9ja3Mu
U3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5Tdm4uZXhlY3V0YWJsZSwK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RkZXJyPSJzdm46IEUxNTUwMDc6ICd7fScgaXMgbm90IGEgd29y
a2luZyBjb3B5XG4iLmZvcm1hdChrd2FyZ3MuZ2V0KCdjd2QnKSksCisgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgKSwKKyAgICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9fX2luaXRfXy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L19f
aW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9naXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9naXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQg
dW5pdHRlc3QKKworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzCisKKworY2xh
c3MgVGVzdEdpdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0
b3J5JworCisgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKToKKyAgICAgICAgICAgIGRl
dGVjdCA9IGxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChkZXRlY3QuZXhlY3V0YWJsZSwgbG9jYWwuR2l0LmV4ZWN1dGFibGUpCisKKyAg
ICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxm
LnBhdGgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5HaXQoc2VsZi5wYXRo
KS5yb290X3BhdGgsIHNlbGYucGF0aCkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJh
aXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQob3MucGF0aC5kaXJuYW1l
KHNlbGYucGF0aCkpLnJvb3RfcGF0aAorCisgICAgZGVmIHRlc3RfYnJhbmNoKHNlbGYpOgorICAg
ICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsb2NhbC5HaXQoc2VsZi5wYXRoKS5icmFuY2gsICdtYXN0ZXInKQorCisgICAg
ICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZGV0YWNoZWQ9VHJ1ZSk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLkdpdChzZWxmLnBhdGgpLmJyYW5jaCwgTm9u
ZSkKKworICAgIGRlZiB0ZXN0X3JlbW90ZShzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2Nh
bC5HaXQoc2VsZi5wYXRoKSBhcyByZXBvOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
b2NhbC5HaXQoc2VsZi5wYXRoKS5yZW1vdGUoKSwgcmVwby5yZW1vdGUpCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3NjbV91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L3NjbV91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L3NjbV91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbG9jYWwsIG1vY2tzCisKKworY2xhc3MgVGVzdFNjbSh1bml0dGVzdC5UZXN0Q2FzZSk6
CisgICAgcGF0aCA9ICcvbW9jay9kaXJlY3RvcnknCisKKyAgICBkZWYgdGVzdF9kZXRlY3Rpb24o
c2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bigp
OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAg
ICAgICAgICBsb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCkKKworICAgIGRlZiB0ZXN0X3Jv
b3Qoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvcik6CisgICAgICAgICAgICBsb2NhbC5TY20oc2VsZi5wYXRoKS5yb290X3BhdGgKKworICAg
IGRlZiB0ZXN0X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhO
b3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIGxvY2FsLlNjbShzZWxmLnBhdGgpLmJy
YW5jaAorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgbG9jYWwuU2NtKHNl
bGYucGF0aCkucmVtb3RlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0
ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L3Rlc3Qvc3ZuX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBt
b2NrcworCisKK2NsYXNzIFRlc3RTdm4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhdGggPSAn
L21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KCk6Cisg
ICAgICAgICAgICBkZXRlY3QgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGV0ZWN0LmV4ZWN1dGFibGUsIGxvY2FsLlN2bi5leGVj
dXRhYmxlKQorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5s
b2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwu
U3ZuKHNlbGYucGF0aCkucm9vdF9wYXRoLCBzZWxmLnBhdGgpCisKKyAgICAgICAgICAgIHdpdGgg
c2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICAgICAgbG9jYWwuU3ZuKG9z
LnBhdGguZGlybmFtZShzZWxmLnBhdGgpKS5yb290X3BhdGgKKworICAgIGRlZiB0ZXN0X2JyYW5j
aChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKToKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWwuU3ZuKHNlbGYucGF0aCkuYnJhbmNoLCAndHJ1
bmsnKQorCisgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxv
Y2FsLlN2bihzZWxmLnBhdGgpIGFzIHJlcG86CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxvY2FsLlN2bihzZWxmLnBhdGgpLnJlbW90ZSgpLCByZXBvLnJlbW90ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>