<?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>219982</bug_id>
          
          <creation_ts>2020-12-17 08:36:27 -0800</creation_ts>
          <short_desc>[webkitscmpy] Add command to canonicalize unpushed commits</short_desc>
          <delta_ts>2021-01-07 08:44:03 -0800</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=219988</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219989</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219992</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=220369</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>ap</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1715387</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-17 08:36:27 -0800</bug_when>
    <thetext>We need to add a command to modify authorship and insert identifiers into commit before they are pushed to the remote.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715388</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-17 08:36:42 -0800</bug_when>
    <thetext>&lt;rdar://problem/72427536&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715427</commentid>
    <comment_count>2</comment_count>
      <attachid>416434</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-17 09:56:49 -0800</bug_when>
    <thetext>Created attachment 416434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715435</commentid>
    <comment_count>3</comment_count>
      <attachid>416434</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-17 10:16:08 -0800</bug_when>
    <thetext>Comment on attachment 416434
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/message.py:60
&gt; +        lines[identifier_index - 1] = &apos;Identifier: {}&apos;.format(commit)

I know Alexey has an opinion on this bit in that he thinks it should be a URL, which would look like:
&lt;https://scm.webkit.org/1234@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715436</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-17 10:16:49 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #3)
&gt; Comment on attachment 416434 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=416434&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/message.py:60
&gt; &gt; +        lines[identifier_index - 1] = &apos;Identifier: {}&apos;.format(commit)
&gt; 
&gt; I know Alexey has an opinion on this bit in that he thinks it should be a
&gt; URL, which would look like:
&gt; &lt;https://scm.webkit.org/1234@main&gt;

Note: This service does not yet exist, so this URL is dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715602</commentid>
    <comment_count>5</comment_count>
      <attachid>416477</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-17 15:51:15 -0800</bug_when>
    <thetext>Created attachment 416477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715714</commentid>
    <comment_count>6</comment_count>
      <attachid>416516</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-18 07:02:28 -0800</bug_when>
    <thetext>Created attachment 416516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715797</commentid>
    <comment_count>7</comment_count>
      <attachid>416542</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-18 13:43:14 -0800</bug_when>
    <thetext>Created attachment 416542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715800</commentid>
    <comment_count>8</comment_count>
      <attachid>416542</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-12-18 13:47:54 -0800</bug_when>
    <thetext>Comment on attachment 416542
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/message.py:62
&gt; +        lines.insert(identifier_index, &apos;Identifier: {}&apos;.format(identifier_template.format(commit)))

I continue to think that we want a descriptive name here that gives at least a hint for how it&apos;s expected to be used by people, e.g. &quot;Canonical link&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715801</commentid>
    <comment_count>9</comment_count>
      <attachid>416542</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-12-18 13:48:33 -0800</bug_when>
    <thetext>Comment on attachment 416542
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/message.py:62
&gt;&gt; +        lines.insert(identifier_index, &apos;Identifier: {}&apos;.format(identifier_template.format(commit)))
&gt; 
&gt; I continue to think that we want a descriptive name here that gives at least a hint for how it&apos;s expected to be used by people, e.g. &quot;Canonical link&quot;.

Also, on a purely nitpicking level, the URL is not the identifier, only the last part of it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715805</commentid>
    <comment_count>10</comment_count>
      <attachid>416543</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-18 14:00:30 -0800</bug_when>
    <thetext>Created attachment 416543
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715856</commentid>
    <comment_count>11</comment_count>
      <attachid>416558</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-18 16:21:30 -0800</bug_when>
    <thetext>Created attachment 416558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717446</commentid>
    <comment_count>12</comment_count>
      <attachid>417028</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-05 13:11:51 -0800</bug_when>
    <thetext>Created attachment 417028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717480</commentid>
    <comment_count>13</comment_count>
      <attachid>417028</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-01-05 14:26:47 -0800</bug_when>
    <thetext>Comment on attachment 417028
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program.py:186
&gt; +    from webkitscmpy.canonicalize import Canonicalize

There was a version of patch that splits the commands into different files, but we decided to keep them in a single file since there were too few commands/code to split them.
I see the deferred import is to avoid circular import. Do you think it&apos;s time to consider re-split commands?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/committer.py:50
&gt; +    REPOSITORY_PATH = os.environ.get(&apos;OLDPWD&apos;)

I do see GIT_* are set somewhere, but I don&apos;t see we set OLDPWD anywhere. How do we guarantee this since OLDPWD might be different based on PWD history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717493</commentid>
    <comment_count>14</comment_count>
      <attachid>417028</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-05 14:44:23 -0800</bug_when>
    <thetext>Comment on attachment 417028
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/committer.py:50
&gt;&gt; +    REPOSITORY_PATH = os.environ.get(&apos;OLDPWD&apos;)
&gt; 
&gt; I do see GIT_* are set somewhere, but I don&apos;t see we set OLDPWD anywhere. How do we guarantee this since OLDPWD might be different based on PWD history.

The GIT_* variables are both read and written, OLDPWD is only read. The bash code you see is actually reading the values of the GIT_* variables printed out by this script and exporting that to git filter-branch.

Seems like git filter-branch always sets OLDPWD, although I&apos;m not entirely certain why (seems likely to be something about git&apos;s underlying bash-y nature)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717505</commentid>
    <comment_count>15</comment_count>
      <attachid>417028</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-05 15:06:37 -0800</bug_when>
    <thetext>Comment on attachment 417028
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program.py:186
&gt;&gt; +    from webkitscmpy.canonicalize import Canonicalize
&gt; 
&gt; There was a version of patch that splits the commands into different files, but we decided to keep them in a single file since there were too few commands/code to split them.
&gt; I see the deferred import is to avoid circular import. Do you think it&apos;s time to consider re-split commands?

I do, but I think that should be a stand-alone patch. No reason to make this one more complicated than it already is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717518</commentid>
    <comment_count>16</comment_count>
      <attachid>417028</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2021-01-05 15:42:28 -0800</bug_when>
    <thetext>Comment on attachment 417028
Patch

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

&gt;&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program.py:186
&gt;&gt;&gt; +    from webkitscmpy.canonicalize import Canonicalize
&gt;&gt; 
&gt;&gt; There was a version of patch that splits the commands into different files, but we decided to keep them in a single file since there were too few commands/code to split them.
&gt;&gt; I see the deferred import is to avoid circular import. Do you think it&apos;s time to consider re-split commands?
&gt; 
&gt; I do, but I think that should be a stand-alone patch. No reason to make this one more complicated than it already is

Sure.

&gt;&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/committer.py:50
&gt;&gt;&gt; +    REPOSITORY_PATH = os.environ.get(&apos;OLDPWD&apos;)
&gt;&gt; 
&gt;&gt; I do see GIT_* are set somewhere, but I don&apos;t see we set OLDPWD anywhere. How do we guarantee this since OLDPWD might be different based on PWD history.
&gt; 
&gt; The GIT_* variables are both read and written, OLDPWD is only read. The bash code you see is actually reading the values of the GIT_* variables printed out by this script and exporting that to git filter-branch.
&gt; 
&gt; Seems like git filter-branch always sets OLDPWD, although I&apos;m not entirely certain why (seems likely to be something about git&apos;s underlying bash-y nature)

Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717524</commentid>
    <comment_count>17</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-01-05 15:52:43 -0800</bug_when>
    <thetext>r=me. Discussed with Jonathan in person, `git filter-branch` will set OLDPWD to the repo. Another approach Jonathan mentioned is to use &apos;GIT_DIR&apos;. I&apos;m OK with both approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717536</commentid>
    <comment_count>18</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-05 16:36:17 -0800</bug_when>
    <thetext>Committed r271182: &lt;https://trac.webkit.org/changeset/271182&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417028.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717585</commentid>
    <comment_count>19</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-05 22:06:05 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717586</commentid>
    <comment_count>20</comment_count>
      <attachid>417065</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-05 22:06:06 -0800</bug_when>
    <thetext>Created attachment 417065
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717640</commentid>
    <comment_count>21</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-01-06 07:05:19 -0800</bug_when>
    <thetext>&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/__init__.py:62
&gt;              if not repository.path:

Should repository.path be changed here as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717641</commentid>
    <comment_count>22</comment_count>
      <attachid>417065</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-01-06 07:05:27 -0800</bug_when>
    <thetext>Comment on attachment 417065
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/__init__.py:76
&gt;              &apos;{remote}/{branch}..{branch}&apos;.format(remote=args.remote, branch=branch),

test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717642</commentid>
    <comment_count>23</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-06 07:09:24 -0800</bug_when>
    <thetext>(In reply to Aakash Jain from comment #21)
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/canonicalize/__init__.py:62
&gt; &gt;              if not repository.path:
&gt; 
&gt; Should repository.path be changed here as well?

root_path is derived from path, what we&apos;re basically checking for here is &quot;is the repository the user specified something actually existing on the filesystem, or is it referring to a remote repository accessed via a web API&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717647</commentid>
    <comment_count>24</comment_count>
      <attachid>417084</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-06 08:00:16 -0800</bug_when>
    <thetext>Created attachment 417084
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717695</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-06 10:15:05 -0800</bug_when>
    <thetext>Committed r271203: &lt;https://trac.webkit.org/changeset/271203&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417084.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717958</commentid>
    <comment_count>26</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-07 08:44:03 -0800</bug_when>
    <thetext>A follow-up note on this change: We are now using this script in the post-commit SVN hook to push to https://github.com/WebKit/WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416434</attachid>
            <date>2020-12-17 09:56:49 -0800</date>
            <delta_ts>2020-12-17 15:51:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201217115647.patch</filename>
            <type>text/plain</type>
            <size>40445</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDkzNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ5IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUCAoT09QUyEpOiBT
b21lIG9mIHRoZSB1bml0IHRlc3QgY29ycmVjdGlvbnMgaW4gdGhlIGNoYW5nZSBzaG91bGQgYmUg
ZGlmZmVyZW50IGNoYW5nZXMKKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3NldHVwLnB5OiBBZGQgY2Fub25pY2FsaXplIGRpcmVjdG9yeSB0byBwYWNrYWdlLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNh
bGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKENhbm9u
aWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVkIGNvbW1pdHMgb24g
YSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAgICAgICAgKENhbm9u
aWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVkaXQgY29tbWl0IG1l
c3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29tbWl0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxp
emUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6ZSk6IEdpdmVuIGEg
bmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJuIGEgY2Fub25pY2Fs
IG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9yIG9yIGNvbW1pdHRl
ci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBhdXRob3IgYW5kIGNv
bW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVz
c2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBpZGVudGlmaWVyIHRvIGEg
Y29tbWl0IG1lc3NhZ2UuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29udHJpYnV0b3IucHk6CisgICAgICAgIChDb250cmlidXRvcik6IEFkZCB1
bmtub3duIGF1dGhvciByZWdleC4KKyAgICAgICAgKENvbnRyaWJ1dG9yLmZyb21fc2NtX2xvZyk6
CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9j
a3MvbG9jYWwvZ2l0LnB5OgorICAgICAgICAoR2l0Ll9faW5pdF9fKTogQWRkIGBnaXQgZmlsdGVy
LWJyYW5jaGAgbW9jay4gTm90ZSB0aGF0IHRoaXMgbW9jayBtYWtlcyBhbiBlZmZvcnQgdG8gdGVz
dAorICAgICAgICBtZXNzYWdlLnB5IGFuZCBjb250cmlidXRvci5weSwgYnV0IG5vdCB0aGUgc2hl
bGwgc2NyaXB0IHBhc3NlZCB0byB0aGUgY29tbWFuZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5OgorICAgICAgICAobWFpbik6
IEFkZCBDYW5vbmljYWxpemUgY29tbWFuZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRk
ZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXplKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9ub19jb21t
aXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9zaW5nbGVfY29tbWl0KToKKyAg
ICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5v
bmljYWxpemUudGVzdF9icmFuY2hfY29tbWl0cyk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAoVGVzdEZpbmQudGVzdF9iYXNpY19naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVu
dGlmaWVyX2dpdCk6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2lkZW50aWZpZXJfZ2l0X3N2bik6
CisgICAgICAgIChUZXN0RmluZC50ZXN0X2hhc2gpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5OgorICAgICAg
ICAoVGVzdEdpdC50ZXN0X2JyYW5jaGVzKToKKwogMjAyMC0xMi0xNiAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBweXRob24zIGluIFRvb2xzL1Njcmlw
dHMvZHVtcC1jbGFzcy1sYXlvdXQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNzA5MzQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQCBzZXR1cCgKICAgICBsaWNlbnNlPSdNb2RpZmllZCBCU0QnLAogICAgIHBhY2thZ2VzPVsK
ICAgICAgICAgJ3dlYmtpdHNjbXB5JywKKyAgICAgICAgJ3dlYmtpdHNjbXB5LmNhbm9uaWNhbGl6
ZScsCiAgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCiAgICAgICAgICd3ZWJraXRzY21weS5t
b2NrcycsCiAgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcsCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb250cmlidXRvci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jb250cmlidXRvci5weQkocmV2aXNpb24gMjcwOTM0KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHN0cmluZ191
dGlscwogY2xhc3MgQ29udHJpYnV0b3Iob2JqZWN0KToKICAgICBHSVRfQVVUSE9SX1JFID0gcmUu
Y29tcGlsZShyJ0F1dGhvcjogKD9QPGF1dGhvcj4uKikgPCg/UDxlbWFpbD5bXkBdK0BbXkBdKyko
QC4qKT8+JykKICAgICBBVVRPTUFURURfQ0hFQ0tJTl9SRSA9IHJlLmNvbXBpbGUocidBdXRob3I6
ICg/UDxhdXRob3I+LiopIDxkZXZudWxsPicpCisgICAgVU5LTk9XTl9BVVRIT1IgPSByZS5jb21w
aWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8Tm9uZT4nKQogICAgIFNWTl9BVVRIT1JfUkUg
PSByZS5jb21waWxlKHInclxkKyBcfCAoP1A8ZW1haWw+LiopIFx8ICg/UDxkYXRlPi4qKSBcfCBc
ZCsgbGluZXM/JykKICAgICBTVk5fUEFUQ0hfRlJPTV9SRSA9IHJlLmNvbXBpbGUocidQYXRjaCBi
eSAoP1A8YXV0aG9yPi4qKSA8KD9QPGVtYWlsPi4qKT4gb24gXGQrLVxkKy1cZCsnKQogCkBAIC0x
MTEsMTIgKzExMiwxMiBAQCBjbGFzcyBDb250cmlidXRvcihvYmplY3QpOgogICAgICAgICBlbWFp
bCA9IE5vbmUKICAgICAgICAgYXV0aG9yID0gTm9uZQogCi0gICAgICAgIGZvciBleHByZXNzaW9u
IGluIFtjbHMuR0lUX0FVVEhPUl9SRSwgY2xzLlNWTl9BVVRIT1JfUkUsIGNscy5TVk5fUEFUQ0hf
RlJPTV9SRSwgY2xzLkFVVE9NQVRFRF9DSEVDS0lOX1JFXToKKyAgICAgICAgZm9yIGV4cHJlc3Np
b24gaW4gW2Nscy5HSVRfQVVUSE9SX1JFLCBjbHMuU1ZOX0FVVEhPUl9SRSwgY2xzLlNWTl9QQVRD
SF9GUk9NX1JFLCBjbHMuQVVUT01BVEVEX0NIRUNLSU5fUkUsIGNscy5VTktOT1dOX0FVVEhPUl06
CiAgICAgICAgICAgICBtYXRjaCA9IGV4cHJlc3Npb24ubWF0Y2gobGluZSkKICAgICAgICAgICAg
IGlmIG1hdGNoOgogICAgICAgICAgICAgICAgIGlmICdhdXRob3InIGluIGV4cHJlc3Npb24uZ3Jv
dXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gbWF0Y2guZ3JvdXAoJ2F1dGhv
cicpCi0gICAgICAgICAgICAgICAgICAgIGlmICcobm8gYXV0aG9yKScgaW4gYXV0aG9yIG9yICdB
dXRvbWF0ZWQgQ2hlY2tpbicgaW4gYXV0aG9yOgorICAgICAgICAgICAgICAgICAgICBpZiAnKG5v
IGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21hdGVkIENoZWNraW4nIGluIGF1dGhvciBvciAn
VW5rbm93bicgaW4gYXV0aG9yOgogICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gTm9u
ZQogICAgICAgICAgICAgICAgIGlmICdlbWFpbCcgaW4gZXhwcmVzc2lvbi5ncm91cGluZGV4Ogog
ICAgICAgICAgICAgICAgICAgICBlbWFpbCA9IG1hdGNoLmdyb3VwKCdlbWFpbCcpCkluZGV4OiBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0ucHkJKHJldmlzaW9uIDI3MDkzNCkKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE4Myw3ICsxODMsOSBAQCBkZWYgbWFpbihhcmdzPU5vbmUsIHBhdGg9Tm9uZSwgbG9nZ2Vy
cz1OCiAKICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGhlbHA9J3N1Yi1j
b21tYW5kIGhlbHAnKQogCi0gICAgZm9yIHByb2dyYW0gaW4gW0ZpbmQsIENoZWNrb3V0XToKKyAg
ICBmcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZSBpbXBvcnQgQ2Fub25pY2FsaXplCisKKyAg
ICBmb3IgcHJvZ3JhbSBpbiBbRmluZCwgQ2hlY2tvdXQsIENhbm9uaWNhbGl6ZV06CiAgICAgICAg
IHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhlbHA9cHJv
Z3JhbS5oZWxwKQogICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5t
YWluKQogICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIGxvZ2dlcnM9bG9nZ2VycykK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nh
bm9uaWNhbGl6ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBv
cnQgc3lzCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMsIHJ1biwgc3RyaW5n
X3V0aWxzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2cKK2Zyb20gd2Via2l0c2NtcHkucHJv
Z3JhbSBpbXBvcnQgQ29tbWFuZAorCisKK2NsYXNzIENhbm9uaWNhbGl6ZShDb21tYW5kKToKKyAg
ICBuYW1lID0gJ2Nhbm9uaWNhbGl6ZScKKyAgICBoZWxwID0gJ1Rha2UgdGhlIHNldCBvZiBjb21t
aXRzIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIHB1c2hlZCBhbmQgZWRpdCBoaXN0b3J5IHRvIG5v
cm1hbGl6ZSB0aGUgJyArXAorICAgICAgICAgICAnY29tbWl0dGVycyB3aXRoIGV4aXN0aW5nIGNv
bnRyaWJ1dG9yIG1hcHBpbmcgYW5kIGFkZCBpZGVudGlmaWVycyB0byBjb21taXQgbWVzc2FnZXMn
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCBsb2dnZXJz
PU5vbmUpOgorICAgICAgICBvdXRwdXRfYXJncyA9IGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisg
ICAgICAgICAgICBwYXJzZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAg
ICAgICBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgYGdpdCByZWJhc2VgIGluZm9ybWF0
aW9uIGRpc3BsYXllZCcKKyAgICAgICAgKQorICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1l
bnQoCisgICAgICAgICAgICAnLS1pZGVudGlmaWVyJywgJy0tbm8taWRlbnRpZmllcicsCisgICAg
ICAgICAgICBoZWxwPSdBZGQgaW4gdGhlIGlkZW50aWZpZXIgdG8gY29tbWl0IG1lc3NhZ2VzLCB0
cnVlIGJ5IGRlZmF1bHQnLAorICAgICAgICAgICAgYWN0aW9uPWFyZ3VtZW50cy5Ob0FjdGlvbiwK
KyAgICAgICAgICAgIGRlc3Q9J2lkZW50aWZpZXInLAorICAgICAgICAgICAgZGVmYXVsdD1UcnVl
LAorICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAg
ICAgICctLXJlbW90ZScsCisgICAgICAgICAgICBoZWxwPSdDb21wYXJlIGFnYWluc3QgYSBkaWZm
ZXJlbnQgcmVtb3RlJywKKyAgICAgICAgICAgIGRlc3Q9J3JlbW90ZScsCisgICAgICAgICAgICBk
ZWZhdWx0PSdvcmlnaW4nLAorICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
bWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5w
YXRoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ2Fubm90IGNhbm9uaWNhbGl6ZSBj
b21taXRzIG9uIGEgcmVtb3RlIHJlcG9zaXRvcnlcbicpCisgICAgICAgICAgICByZXR1cm4gMQor
ICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5pc19naXQ6CisgICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCdDb21taXRzIGNhbiBvbmx5IGJlIGNhbm9uaWNhbGl6ZWQgb24gYSBHaXQgcmVwb3Np
dG9yeVxuJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgYnJhbmNoID0gcmVwb3Np
dG9yeS5icmFuY2gKKyAgICAgICAgaWYgbm90IGJyYW5jaDoKKyAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgY3VycmVudCBicmFuY2hcbicpCisgICAgICAg
ICAgICByZXR1cm4gLTEKKyAgICAgICAgcmVzdWx0ID0gcnVuKFsKKyAgICAgICAgICAgIHJlcG9z
aXRvcnkuZXhlY3V0YWJsZSgpLCAncmV2LWxpc3QnLAorICAgICAgICAgICAgJy0tY291bnQnLCAn
LS1uby1tZXJnZXMnLAorICAgICAgICAgICAgJ3tyZW1vdGV9L3ticmFuY2h9Li57YnJhbmNofScu
Zm9ybWF0KHJlbW90ZT1hcmdzLnJlbW90ZSwgYnJhbmNoPWJyYW5jaCksCisgICAgICAgIF0sIGNh
cHR1cmVfb3V0cHV0PVRydWUsIGN3ZD1yZXBvc2l0b3J5LnBhdGgpCisgICAgICAgIGlmIHJlc3Vs
dC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGZp
bmQgbG9jYWwgY29tbWl0c1xuJykKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBkaWZm
ZXJlbmNlID0gaW50KHJlc3VsdC5zdGRvdXQucnN0cmlwKCkpCisgICAgICAgIGlmIGRpZmZlcmVu
Y2UgPD0gMDoKKyAgICAgICAgICAgIHByaW50KCdObyBsb2NhbCBjb21taXRzIHRvIGJlIGVkaXRl
ZCcpCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBsb2cud2FybmluZygne30gdG8gYmUg
ZWRpdHRlZC4uLicuZm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2Nv
bW1pdCcpKSkKKworICAgICAgICBiYXNlID0gcmVwb3NpdG9yeS5maW5kKCd7fX57fScuZm9ybWF0
KGJyYW5jaCwgZGlmZmVyZW5jZSkpCisgICAgICAgIGxvZy5pbmZvKCdCYXNlIGNvbW1pdCBpcyB7
fSAocmVmIHt9KScuZm9ybWF0KGJhc2UsIGJhc2UuaGFzaCkpCisKKyAgICAgICAgbG9nLmRlYnVn
KCdTYXZpbmcgY29udHJpYnV0b3JzIHRvIHRlbXAgZmlsZSB0byBiZSBwaWNrZWQgdXAgYnkgY2hp
bGQgcHJvY2Vzc2VzJykKKyAgICAgICAgY29udHJpYnV0b3JzID0gb3MucGF0aC5qb2luKHRlbXBm
aWxlLmdldHRlbXBkaXIoKSwgJ3t9LWNvbnRyaWJ1dG9ycy5qc29uJy5mb3JtYXQob3MuZ2V0cGlk
KCkpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JzLCAn
dycpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5jb250cmlidXRvcnMuc2F2
ZShmaWxlKQorCisgICAgICAgICAgICBtZXNzYWdlX2ZpbHRlciA9IFsKKyAgICAgICAgICAgICAg
ICAnLS1tc2ctZmlsdGVyJywKKyAgICAgICAgICAgICAgICAne30ge30nLmZvcm1hdChzeXMuZXhl
Y3V0YWJsZSwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNzYWdl
LnB5JykpLAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZpZXIgZWxzZSBbXQorCisgICAg
ICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBkZXZudWxsOgorICAgICAgICAg
ICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICctZicsCisgICAgICAgICAgICAg
ICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21lc3NhZ2V9Citjb21taXR0ZXJP
dXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJpYnV0b3JfanNvbn0pCitLRVk9
JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0cHV0OyBkbworICAgIGlmIFtb
ICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBpZiBbWyAkS0VZID09IEdJVF8qIF1d
IDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0KKyAgICAgICAgICAgIHByaW50
ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIKKyAgICAgICAgICAg
IEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlm
IFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAgS0VZPSIkd29yZCIKKyAgICBlbHNl
CisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAgZmkKK2RvbmUKK2lmIFtbICRLRVkg
PT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVzc2FnZX0KKyAgICBwcmludGYgLXYg
JEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0iCitmaScnJy5mb3JtYXQoCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwg
PiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcgJEdJVF9DT01NSVQiJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9f
ZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udHJp
YnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5n
X21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJVRyBlbHNlICdlY2hvICIgICAg
JEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBd
ICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChicmFuY2gsIGJhc2UuaGFzaCld
LAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5wYXRoLAorICAgICAgICAgICAg
ICAgICAgICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hfV0FSTklORyc6ICcxJywgJ1BZVEhP
TlBBVEgnOiAnOicuam9pbihzeXMucGF0aCl9LAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9
ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAorICAgICAg
ICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5J
TkcgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgc3VicHJv
Y2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdG
YWlsZWQgdG8gbW9kaWZ5IGxvY2FsIGNvbW1pdCBtZXNzYWdlc1xuJykKKyAgICAgICAgICAgIHJl
dHVybiAtMQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUoY29udHJp
YnV0b3JzKQorCisgICAgICAgIHByaW50KCd7fSBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCEn
LmZvcm1hdChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZlcmVuY2UsICdjb21taXQnKSkpCisK
KyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2Fs
aXplL2NvbW1pdHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQor
aW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuCitmcm9tIHdlYmtpdHNj
bXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwKKworRU1BSUxfUkUgPSByZS5jb21waWxlKHIn
KD9QPGVtYWlsPlteQF0rQFteQF0rKShALiopPycpCisKKworZGVmIGNhbm9uaWNhbGl6ZShuYW1l
LCBlbWFpbCwgY29udHJpYnV0b3JzKToKKyAgICBtYXRjaCA9IEVNQUlMX1JFLm1hdGNoKGVtYWls
KQorICAgIGlmIG1hdGNoOgorICAgICAgICBlbWFpbCA9IG1hdGNoLmdyb3VwKCdlbWFpbCcpCisK
KyAgICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQoZW1haWwsIGNvbnRyaWJ1dG9ycy5n
ZXQoZW1haWwubG93ZXIoKSkpCisgICAgaWYgY29udHJpYnV0b3I6CisgICAgICAgIHJldHVybiBj
b250cmlidXRvci5uYW1lLCBlbWFpbCBpZiBtYXRjaCBlbHNlIGNvbnRyaWJ1dG9yLmVtYWlsCisg
ICAgY29udHJpYnV0b3IgPSBjb250cmlidXRvcnMuZ2V0KG5hbWUpCisgICAgaWYgY29udHJpYnV0
b3I6CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBjb250cmlidXRvci5lbWFpbAor
ICAgIHJldHVybiBuYW1lLCBlbWFpbAorCisKK2RlZiBtYWluKGNvbnRyaWJ1dG9yX2ZpbGUpOgor
ICAgIFJFUE9TSVRPUllfUEFUSCA9IG9zLmVudmlyb24uZ2V0KCdPTERQV0QnKQorICAgIEdJVF9D
T01NSVQgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVCcpCisKKyAgICB3aXRoIG9wZW4oY29u
dHJpYnV0b3JfZmlsZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICBjb250cmlidXRvcnMgPSBDb250
cmlidXRvci5NYXBwaW5nLmxvYWQoZmlsZSkKKworICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0g
Y2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9OQU1FJywg
J1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJVF9BVVRIT1JfRU1BSUwnLCAn
bnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAgKQorICAgIGNvbW1pdHRlciwgY29t
bWl0dGVyX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lU
X0NPTU1JVFRFUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJ
VF9DT01NSVRURVJfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAg
KQorCisgICAgIyBBdHRlbXB0IHRvIGV4dHJhY3QgcGF0Y2gtYnkKKyAgICBpZiBhdXRob3JfZW1h
aWwgPT0gY29tbWl0dGVyX2VtYWlsIGFuZCBSRVBPU0lUT1JZX1BBVEggYW5kIEdJVF9DT01NSVQ6
CisgICAgICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgIFtsb2NhbC5HaXQuZXhlY3V0YWJsZSgp
LCAnbG9nJywgR0lUX0NPTU1JVCwgJy0xJ10sCisgICAgICAgICAgICBjd2Q9UkVQT1NJVE9SWV9Q
QVRILCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnLAorICAgICAgICApCisK
KyAgICAgICAgcGF0Y2hfYnkgPSByZS5zZWFyY2goCisgICAgICAgICAgICByJ1xzK1BhdGNoIGJ5
ICg/UDxhdXRob3I+W148XSspIFw8KD9QPGVtYWlsPltePF0rKVw+Liogb24gXGQrLVxkKy1cZCsn
LAorICAgICAgICAgICAgbG9nLnN0ZG91dCwKKyAgICAgICAgKQorICAgICAgICBpZiBwYXRjaF9i
eToKKyAgICAgICAgICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAg
ICAgICAgICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdhdXRob3InKSwKKyAgICAgICAgICAgICAgICBw
YXRjaF9ieS5ncm91cCgnZW1haWwnKSwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnMsCisg
ICAgICAgICAgICApCisKKyAgICBwcmludCgnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0
aG9yKSkKKyAgICBwcmludCgnR0lUX0FVVEhPUl9FTUFJTCB7fScuZm9ybWF0KGF1dGhvcl9lbWFp
bCkpCisgICAgcHJpbnQoJ0dJVF9DT01NSVRURVJfTkFNRSB7fScuZm9ybWF0KGNvbW1pdHRlcikp
CisgICAgcHJpbnQoJ0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1h
aWwpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihz
eXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVz
c2FnZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Vi
a2l0c2NtcHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2RlZiBtYWluKGlucHV0ZmlsZSk6CisgICAg
UkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NPTU1J
VCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlmIG5vdCBSRVBPU0lUT1JZ
X1BBVEg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byByZXRyaWV2ZSByZXBv
c2l0b3J5IHBhdGhcbicpCisgICAgICAgIHJldHVybiAtMQorICAgIGlmIG5vdCBHSVRfQ09NTUlU
OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgZ2l0IGhhc2hc
bicpCisgICAgICAgIHJldHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9IEdpdChSRVBPU0lUT1JZ
X1BBVEgpCisgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFzaD1HSVRfQ09NTUlUKQor
ICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBm
aW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAgICAg
cmV0dXJuIC0xCisgICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9yIG5vdCBjb21taXQuYnJh
bmNoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gY29tcHV0ZSB0aGUgaWRl
bnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAgICAgICByZXR1cm4gLTEK
KworICAgIGxpbmVzID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZpbGUucmVhZGxpbmVzKCk6
CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisgICAgaWRlbnRpZmllcl9p
bmRleCA9IGxlbihsaW5lcykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCByZXBvc2l0b3J5
LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAgICAgaWRlbnRpZmllcl9p
bmRleCAtPSAxCisKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBsaW5lc1tpZGVudGlmaWVy
X2luZGV4IC0gMV0uc3RhcnRzd2l0aCgnSWRlbnRpZmllcjogJyk6CisgICAgICAgIGxpbmVzW2lk
ZW50aWZpZXJfaW5kZXggLSAxXSA9ICdJZGVudGlmaWVyOiB7fScuZm9ybWF0KGNvbW1pdCkKKyAg
ICBlbHNlOgorICAgICAgICBsaW5lcy5pbnNlcnQoaWRlbnRpZmllcl9pbmRleCwgJ0lkZW50aWZp
ZXI6IHt9Jy5mb3JtYXQoY29tbWl0KSkKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAg
ICBwcmludChsaW5lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4
aXQobWFpbihzeXMuc3RkaW4pKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dp
dC5weQkocmV2aXNpb24gMjcwOTM0KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxNSArMjUsMTcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIAogZnJvbSBkYXRldGltZSBpbXBv
cnQgZGF0ZXRpbWUKLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IG1vY2tzLCBPdXRwdXRDYXB0dXJlLCBTdHJpbmdJTwogZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgbG9jYWwsIENvbW1pdCwgQ29udHJpYnV0b3IKK2Zyb20gd2Via2l0c2NtcHku
Y2Fub25pY2FsaXplLmNvbW1pdHRlciBpbXBvcnQgbWFpbiBhcyBjb21taXR0ZXJfbWFpbgorZnJv
bSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUubWVzc2FnZSBpbXBvcnQgbWFpbiBhcyBtZXNzYWdl
X21haW4KIAogCiBjbGFzcyBHaXQobW9ja3MuU3VicHJvY2Vzcyk6CiAKICAgICBkZWYgX19pbml0
X18oCiAgICAgICAgIHNlbGYsIHBhdGg9Jy8uaW52YWxpZC1naXQnLCBkYXRhZmlsZT1Ob25lLAot
ICAgICAgICByZW1vdGU9Tm9uZSwgYnJhbmNoZXM9Tm9uZSwgdGFncz1Ob25lLAorICAgICAgICBy
ZW1vdGU9Tm9uZSwgdGFncz1Ob25lLAogICAgICAgICBkZXRhY2hlZD1Ob25lLCBkZWZhdWx0X2Jy
YW5jaD0nbWFpbicsCiAgICAgICAgIGdpdF9zdm49RmFsc2UsCiAgICAgKToKQEAgLTQyLDcgKzQ0
LDYgQEAgY2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgogICAgICAgICBzZWxmLnJlbW90ZSA9
IHJlbW90ZSBvciAnZ2l0QGV4YW1wbGUub3JnOi9tb2NrL3t9Jy5mb3JtYXQob3MucGF0aC5iYXNl
bmFtZShwYXRoKSkKICAgICAgICAgc2VsZi5kZXRhY2hlZCA9IGRldGFjaGVkIG9yIEZhbHNlCiAK
LSAgICAgICAgc2VsZi5icmFuY2hlcyA9IGJyYW5jaGVzIG9yIFtdCiAgICAgICAgIHNlbGYudGFn
cyA9IHRhZ3Mgb3Ige30KIAogICAgICAgICB0cnk6CkBAIC01OSw2ICs2MCw3IEBAIGNsYXNzIEdp
dChtb2Nrcy5TdWJwcm9jZXNzKToKICAgICAgICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9u
ID0gTm9uZQogCiAgICAgICAgIHNlbGYuaGVhZCA9IHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRf
YnJhbmNoXVstMV0KKyAgICAgICAgc2VsZi5yZW1vdGVzID0geydvcmlnaW4ve30nLmZvcm1hdChi
cmFuY2gpOiBjb21taXRzWy0xXSBmb3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29tbWl0cy5p
dGVtcygpfQogICAgICAgICBzZWxmLnRhZ3MgPSB7fQogCiAgICAgICAgIGlmIGdpdF9zdm46CkBA
IC0xNTYsNyArMTU4LDcgQEAgbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgog
ICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm5jb2RlPTAsCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD0n
XG4nLmpvaW4oc29ydGVkKFsnKiAnICsgc2VsZi5icmFuY2hdICsgbGlzdCgoe2RlZmF1bHRfYnJh
bmNofSB8IHNldChzZWxmLmNvbW1pdHMua2V5cygpKSB8IHNldChzZWxmLmJyYW5jaGVzKSkgLSB7
c2VsZi5icmFuY2h9KSkpICsKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdcbicuam9pbihz
b3J0ZWQoWycqICcgKyBzZWxmLmJyYW5jaF0gKyBsaXN0KCh7ZGVmYXVsdF9icmFuY2h9IHwgc2V0
KHNlbGYuY29tbWl0cy5rZXlzKCkpKSAtIHtzZWxmLmJyYW5jaH0pKSkgKwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ1xucmVtb3Rlcy9vcmlnaW4vSEVBRCAtPiBvcmlnaW4ve31cbicuZm9y
bWF0KGRlZmF1bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgKSwg
bW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKQEAgLTE5NywxMSArMTk5LDExIEBAIG5vdGhpbmcgdG8g
Y29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRlPWRhdGV0aW1lLmZyb210aW1lc3RhbXAoc2VsZi5maW5kKGFyZ3NbMl0pLnRpbWVzdGFtcCku
c3RyZnRpbWUoJyVhICViICVkICVIOiVNOiVTICVZJyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9nPSdcbicuam9pbihbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoJyAgICAnICsgbGluZSkgaWYgbGluZSBlbHNlICcnIGZvciBsaW5lIGluIHNlbGYuZmluZChh
cmdzWzJdKS5tZXNzYWdlLnNwbGl0bGluZXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdICsgWydnaXQtc3ZuLWlkOiBodHRwczovL3N2bi57fS9yZXBvc2l0b3J5L3t9L3RydW5r
QHt9IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycuZm9ybWF0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBdICsgKFsnZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4u
e30vcmVwb3NpdG9yeS97fS90cnVua0B7fSAyNjhmNDVjYy1jZDA5LTA0MTAtYWIzYy1kNTI2OTFi
NGRiZmMnLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
cmVtb3RlLnNwbGl0KCdAJylbLTFdLnNwbGl0KCc6JylbMF0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5kKGFyZ3NbMl0pLnJldmlzaW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApXSBpZiBnaXRfc3ZuIGVsc2UgW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICldIGlmIGdpdF9zdm4gZWxzZSBbXSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAg
ICAgICAgICAgICApIGlmIHNlbGYuZmluZChhcmdzWzJdKSBlbHNlIG1vY2tzLlByb2Nlc3NDb21w
bGV0aW9uKHJldHVybmNvZGU9MTI4KSwKQEAgLTIzNCw2ICsyMzYsMTQgQEAgbm90aGluZyB0byBj
b21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgogICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1i
ZGEgKmFyZ3MsICoqa3dhcmdzOgogICAgICAgICAgICAgICAgICAgICBtb2Nrcy5Qcm9jZXNzQ29t
cGxldGlvbihyZXR1cm5jb2RlPTApIGlmIHNlbGYuY2hlY2tvdXQoYXJnc1syXSkgZWxzZSBtb2Nr
cy5Qcm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEpCiAgICAgICAgICAgICApLCBtb2Nrcy5T
dWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwgJ2ZpbHRl
ci1icmFuY2gnLCAnLWYnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHNlbGYuZmlsdGVyX2Jy
YW5jaCgKKyAgICAgICAgICAgICAgICAgICAgYXJnc1stMV0sCisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2U9VHJ1ZSBpZiBhcmdzWy0zXSA9PSAnLS1tc2ctZmlsdGVyJyBlbHNlIEZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zaGVsbD1hcmdzWzRdIGlmIGFyZ3NbM10g
PT0gJy0tZW52LWZpbHRlcicgYW5kIGFyZ3NbNF0gZWxzZSBOb25lLAorICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCiAgICAgICAgICAgICAg
ICAgc2VsZi5leGVjdXRhYmxlLAogICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKQEAgLTI2Niwx
NiArMjc2LDIyIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVtm
b3VuZC5icmFuY2hfcG9pbnQgLSBkaWZmZXJlbmNlIC0gMV0KICAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQogCisgICAgICAgIHNvbWV0aGluZyA9IHN0cihzb21ldGhpbmcpCisgICAgICAgIGlm
ICcuLicgaW4gc29tZXRoaW5nOgorICAgICAgICAgICAgYSwgYiA9IHNvbWV0aGluZy5zcGxpdCgn
Li4nKQorICAgICAgICAgICAgYSA9IHNlbGYuZmluZChhKQorICAgICAgICAgICAgYiA9IHNlbGYu
ZmluZChiKQorICAgICAgICAgICAgcmV0dXJuIGIgaWYgYSBhbmQgYiBlbHNlIE5vbmUKKwogICAg
ICAgICBpZiBzb21ldGhpbmcgPT0gJ0hFQUQnOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGVh
ZAogICAgICAgICBpZiBzb21ldGhpbmcgaW4gc2VsZi5jb21taXRzLmtleXMoKToKICAgICAgICAg
ICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc29tZXRoaW5nXVstMV0KICAgICAgICAgaWYgc29tZXRo
aW5nIGluIHNlbGYudGFncy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50YWdzW3Nv
bWV0aGluZ10KKyAgICAgICAgaWYgc29tZXRoaW5nIGluIHNlbGYucmVtb3Rlcy5rZXlzKCk6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5yZW1vdGVzW3NvbWV0aGluZ10KIAotICAgICAgICBzb21l
dGhpbmcgPSBzdHIoc29tZXRoaW5nKQotICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZzoKLSAg
ICAgICAgICAgIHNvbWV0aGluZyA9IHNvbWV0aGluZy5zcGxpdCgnLi4nKVsxXQogICAgICAgICBm
b3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgogICAgICAgICAgICAg
aWYgYnJhbmNoID09IHNvbWV0aGluZzoKICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0c1st
MV0KQEAgLTI4NywxMCArMzAzLDE2IEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUg
Y2xlYW4KICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBjb3VudChzZWxmLCBzb21ldGhp
bmcpOgotICAgICAgICBtYXRjaCA9IHNlbGYuZmluZChzb21ldGhpbmcpCi0gICAgICAgIGlmICcu
LicgaW4gc29tZXRoaW5nIG9yIG5vdCBtYXRjaC5icmFuY2hfcG9pbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gbWF0Y2guaWRlbnRpZmllcgotICAgICAgICByZXR1cm4gbWF0Y2guYnJhbmNoX3BvaW50
ICsgbWF0Y2guaWRlbnRpZmllcgorICAgICAgICBpZiAnLi4nIG5vdCBpbiBzb21ldGhpbmc6Cisg
ICAgICAgICAgICBtYXRjaCA9IHNlbGYuZmluZChzb21ldGhpbmcpCisgICAgICAgICAgICByZXR1
cm4gKG1hdGNoLmJyYW5jaF9wb2ludCBvciAwKSArIG1hdGNoLmlkZW50aWZpZXIKKworICAgICAg
ICBhLCBiID0gc29tZXRoaW5nLnNwbGl0KCcuLicpCisgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkK
KyAgICAgICAgYiA9IHNlbGYuZmluZChiKQorICAgICAgICBpZiBhLmJyYW5jaF9wb2ludCA9PSBi
LmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJldHVybiBhYnMoYi5pZGVudGlmaWVyIC0gYS5p
ZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gYi5pZGVudGlmaWVyCiAKICAgICBkZWYgYnJhbmNo
ZXNfb24oc2VsZiwgaGFzaCk6CiAgICAgICAgIHJlc3VsdCA9IHNldCgpCkBAIC0zMTIsNSArMzM0
LDg4IEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgY29t
bWl0ID0gc2VsZi5maW5kKHNvbWV0aGluZykKICAgICAgICAgaWYgY29tbWl0OgogICAgICAgICAg
ICAgc2VsZi5oZWFkID0gY29tbWl0Ci0gICAgICAgICAgICBzZWxmLmRldGFjaGVkID0gc29tZXRo
aW5nIG5vdCBpbiBzZWxmLmJyYW5jaGVzCisgICAgICAgICAgICBzZWxmLmRldGFjaGVkID0gc29t
ZXRoaW5nIG5vdCBpbiBzZWxmLmNvbW1pdHMua2V5cygpCiAgICAgICAgIHJldHVybiBUcnVlIGlm
IGNvbW1pdCBlbHNlIEZhbHNlCisKKyAgICBkZWYgZmlsdGVyX2JyYW5jaChzZWxmLCByYW5nZSwg
bWVzc2FnZT1UcnVlLCBlbnZpcm9ubWVudF9zaGVsbD1Ob25lKToKKyAgICAgICAgIyBXZSBjYW4n
dCBlZmZlY3RpdmVseSBtb2NrIHRoZSBiYXNoIHNjcmlwdCBpbiB0aGUgY29tbWFuZCwgYnV0IHdl
IGNhbiBtb2NrIHRoZSBweXRob24gY29kZSB0aGF0CisgICAgICAgICMgc2NyaXB0IGNhbGxzLCB3
aGljaCBpcyB3aGVyZSB0aGUgcHJvZ3JhbSBsb2dpYyBpcy4KKyAgICAgICAgaGVhZCwgc3RhcnQg
PSByYW5nZS5zcGxpdCgnLi4uJykKKyAgICAgICAgaGVhZCA9IHNlbGYuZmluZChoZWFkKQorICAg
ICAgICBzdGFydCA9IHNlbGYuZmluZChzdGFydCkKKworICAgICAgICBjb21taXRzX3RvX2VkaXQg
PSBbXQorICAgICAgICBmb3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1toZWFkLmJy
YW5jaF0pOgorICAgICAgICAgICAgaWYgY29tbWl0LmJyYW5jaCA9PSBzdGFydC5icmFuY2ggYW5k
IGNvbW1pdC5pZGVudGlmaWVyIDw9IHN0YXJ0LmlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIGNvbW1pdHNfdG9fZWRpdC5pbnNlcnQoMCwgY29tbWl0KQorICAg
ICAgICBpZiBoZWFkLmJyYW5jaCAhPSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAg
Zm9yIGNvbW1pdCBpbiByZXZlcnNlZChzZWxmLmNvbW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1b
OmhlYWQuYnJhbmNoX3BvaW50XSk6CisgICAgICAgICAgICAgICAgaWYgY29tbWl0LmlkZW50aWZp
ZXIgPD0gc3RhcnQuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgICAgICAgICBjb21taXRzX3RvX2VkaXQuaW5zZXJ0KDAsIGNvbW1pdCkKKworICAgICAgICBz
dGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIG9yaWdpbmFsX2VudiA9IHtrZXk6IG9zLmVudmly
b24uZ2V0KCdPTERQV0QnKSBmb3Iga2V5IGluIFsKKyAgICAgICAgICAgICdPTERQV0QnLCAnR0lU
X0NPTU1JVCcsCisgICAgICAgICAgICAnR0lUX0FVVEhPUl9OQU1FJywgJ0dJVF9BVVRIT1JfRU1B
SUwnLAorICAgICAgICAgICAgJ0dJVF9DT01NSVRURVJfTkFNRScsICdHSVRfQ09NTUlUVEVSX0VN
QUlMJywKKyAgICAgICAgXX0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb3VudCA9IDAK
KyAgICAgICAgICAgIG9zLmVudmlyb25bJ09MRFBXRCddID0gc2VsZi5wYXRoCisgICAgICAgICAg
ICBmb3IgY29tbWl0IGluIGNvbW1pdHNfdG9fZWRpdDoKKyAgICAgICAgICAgICAgICBjb3VudCAr
PSAxCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0NPTU1JVCddID0gY29tbWl0Lmhh
c2gKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQVVUSE9SX05BTUUnXSA9IGNvbW1p
dC5hdXRob3IubmFtZQorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9BVVRIT1JfRU1B
SUwnXSA9IGNvbW1pdC5hdXRob3IuZW1haWwKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydH
SVRfQ09NTUlUVEVSX05BTUUnXSA9IGNvbW1pdC5hdXRob3IubmFtZQorICAgICAgICAgICAgICAg
IG9zLmVudmlyb25bJ0dJVF9DT01NSVRURVJfRU1BSUwnXSA9IGNvbW1pdC5hdXRob3IuZW1haWwK
KworICAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgJ1Jl
d3JpdGUge2hhc2h9ICh7Y291bnR9L3t0b3RhbH0pICgtLS0gc2Vjb25kcyBwYXNzZWQsIHJlbWFp
bmluZyAtLS0gcHJlZGljdGVkKVxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBo
YXNoPWNvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9Y291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b3RhbD1sZW4oY29tbWl0c190b19lZGl0KSwKKyAgICAg
ICAgICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VmaWxlID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlZmlsZS53cml0ZShjb21taXQubWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZWZpbGUuc2VlaygwKQorICAgICAgICAgICAgICAgICAgICB3aXRoIE91dHB1dENhcHR1
cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfbWFpbiht
ZXNzYWdlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0Lm1lc3NhZ2UgPSBjYXB0dXJl
ZC5zdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGVudmlyb25tZW50
X3NoZWxsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlm
IHJlLnNlYXJjaChyJ2VjaG8gIk92ZXJ3cml0aW5nJywgZW52aXJvbm1lbnRfc2hlbGwpOgorICAg
ICAgICAgICAgICAgICAgICBzdGRvdXQud3JpdGUoJ092ZXJ3cml0aW5nIHt9XG4nLmZvcm1hdChj
b21taXQuaGFzaCkpCisKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChyJyg/UDxq
c29uPlxTK1wuanNvbiknLCBlbnZpcm9ubWVudF9zaGVsbCkKKyAgICAgICAgICAgICAgICBpZiBt
YXRjaDoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVy
ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZXJfbWFpbihtYXRjaC5ncm91cCgn
anNvbicpKQorICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuc2VlaygwKQorICAg
ICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjYXB0dXJlZC5zdGRvdXQucmVhZGxpbmVzKCk6
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3MuZW52aXJvbltsaW5lLnNwbGl0KCcgJylbMF1dID0gJyAnLmpvaW4o
bGluZS5zcGxpdCgnICcpWzE6XSkKKworICAgICAgICAgICAgICAgIGNvbW1pdC5hdXRob3IgPSBD
b250cmlidXRvcihuYW1lPW9zLmVudmlyb25bJ0dJVF9BVVRIT1JfTkFNRSddLCBlbWFpbHM9W29z
LmVudmlyb25bJ0dJVF9BVVRIT1JfRU1BSUwnXV0pCisKKyAgICAgICAgICAgICAgICBpZiByZS5z
ZWFyY2gocidlY2hvICJccysnLCBlbnZpcm9ubWVudF9zaGVsbCk6CisgICAgICAgICAgICAgICAg
ICAgIGZvciBrZXkgaW4gWydHSVRfQVVUSE9SX05BTUUnLCAnR0lUX0FVVEhPUl9FTUFJTCcsICdH
SVRfQ09NTUlUVEVSX05BTUUnLCAnR0lUX0NPTU1JVFRFUl9FTUFJTCddOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc3Rkb3V0LndyaXRlKCcgICAge309e31cbicuZm9ybWF0KGtleSwgb3MuZW52
aXJvbltrZXldKSkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGtleSwgdmFs
dWUgaW4gb3JpZ2luYWxfZW52Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25b
a2V5XQorCisgICAgICAgIHJldHVybiBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKKyAgICAgICAg
ICAgIHJldHVybmNvZGU9MCwKKyAgICAgICAgICAgIHN0ZG91dD1zdGRvdXQuZ2V0dmFsdWUoKSwK
KyAgICAgICAgKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvdGVzdC9jYW5vbmljYWxpemVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jYW5vbmlj
YWxpemVfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jYW5vbmljYWxpemVfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IFRpbWUgYXMg
TW9ja1RpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IHByb2dyYW0sIG1vY2tzLCBsb2NhbCwg
Q29tbWl0LCBDb250cmlidXRvcgorCisKK2NsYXNzIFRlc3RDYW5vbmljYWxpemUodW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIHBhdGggPSAnL21vY2svcmVwb3NpdG9yeScKKworICAgIGRlZiB0ZXN0
X2ludmFsaWQoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpLCBtb2Nrcy5sb2Nh
bC5HaXQoKSwgbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJn
cz0oJ2Nhbm9uaWNhbGl6ZScsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAg
ICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgorICAgICAgICB3
aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0
aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxp
emUnLCksCisgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICApKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdO
byBsb2NhbCBjb21taXRzIHRvIGJlIGVkaXRlZFxuJykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9j
b21taXQoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBt
b2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9j
a1RpbWU6CisgICAgICAgICAgICBjb250aXJidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkK
KyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVk
YXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRf
YnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9JzM4ZWE1MGQyOGFl
Mzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWYnLAorICAgICAgICAgICAgICAgIGJyYW5jaD1t
b2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcign
amJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVst
MV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAs
CisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdFxuJywKKyAgICAgICAgICAgICkp
CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAg
ICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCAnLXYnLCksCisgICAgICAgICAgICAgICAg
cGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29udHJpYnV0b3JzPWNvbnRpcmJ1dG9y
cywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9IGxvY2FsLkdpdChzZWxm
LnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxl
LmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQubWVzc2FnZSwgJ05l
dyBjb21taXRcbklkZW50aWZpZXI6IDVAbWFpbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAg
J1Jld3JpdGUgMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZiAoMS8xKSAo
LS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAg
ICAgICdPdmVyd3JpdGluZyAzOGVhNTBkMjhhZTM5NGM5YzhiODBlMTNjM2ZiMjFmMWMyNjI4NzFm
XG4nCisgICAgICAgICAgICAnMSBjb21taXQgc3VjY2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQhXG4n
LAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRo
IE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwg
Z2l0X3N2bj1UcnVlKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWU6CisgICAg
ICAgICAgICBjb250aXJidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkKKyAgICAgICAgICAg
IGNvbnRpcmJ1dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVkYXJkQGFwcGxlLmNv
bScpCisKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5hcHBl
bmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9Jzc2NjYwOTI3NmZlMjAxZTdjZTJjNjk5
OTRlMTEzZDk3OWQyMTQ4YWMnLAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1bHRf
YnJhbmNoLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBs
ZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyPW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVstMV0uaWRlbnRpZmll
ciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAg
ICAgICAgcmV2aXNpb249OSwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0XG4n
LAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICctdnYnKSwK
KyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmli
dXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgY29tbWl0
ID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNo
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0aG9yLCBjb250aXJidXRv
cnNbJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAor
ICAgICAgICAgICAgICAgIGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAgICAgICAgICdOZXcgY29t
bWl0XG4nCisgICAgICAgICAgICAgICAgJ0lkZW50aWZpZXI6IDVAbWFpblxuJworICAgICAgICAg
ICAgICAgICdzdm4taWQ6IGh0dHBzOi8vc3ZuLmV4YW1wbGUub3JnL3JlcG9zaXRvcnkvcmVwb3Np
dG9yeS90cnVua0A5IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAg
ICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1
cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgNzY2NjA5Mjc2ZmUy
MDFlN2NlMmM2OTk5NGUxMTNkOTc5ZDIxNDhhYyAoMS8xKSAoLS0tIHNlY29uZHMgcGFzc2VkLCBy
ZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGluZyA3NjY2
MDkyNzZmZTIwMWU3Y2UyYzY5OTk0ZTExM2Q5NzlkMjE0OGFjXG4nCisgICAgICAgICAgICAnICAg
IEdJVF9BVVRIT1JfTkFNRT1Kb25hdGhhbiBCZWRhcmRcbicKKyAgICAgICAgICAgICcgICAgR0lU
X0FVVEhPUl9FTUFJTD1qYmVkYXJkQGFwcGxlLmNvbVxuJworICAgICAgICAgICAgJyAgICBHSVRf
Q09NTUlUVEVSX05BTUU9Sm9uYXRoYW4gQmVkYXJkXG4nCisgICAgICAgICAgICAnICAgIEdJVF9D
T01NSVRURVJfRU1BSUw9amJlZGFyZEBhcHBsZS5jb21cbicKKyAgICAgICAgICAgICcxIGNvbW1p
dCBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkKKworICAgIGRlZiB0
ZXN0X2JyYW5jaF9jb21taXRzKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBh
cyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMgbW9jaywgbW9ja3MubG9j
YWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgY29udGlyYnV0b3JzID0gQ29udHJpYnV0
b3IuTWFwcGluZygpCisgICAgICAgICAgICBjb250aXJidXRvcnMuY3JlYXRlKCdKb25hdGhhbiBC
ZWRhcmQnLCAnamJlZGFyZEBhcHBsZS5jb20nKQorCisgICAgICAgICAgICBsb2NhbC5HaXQoc2Vs
Zi5wYXRoKS5jaGVja291dCgnYnJhbmNoLWEnKQorICAgICAgICAgICAgbW9jay5jb21taXRzWydi
cmFuY2gtYSddLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nZjkzMTM4ZTNi
ZjFkNWVjY2EyNWZjMDg0NGI3YTJhNzhiOGUwMGFhZScsCisgICAgICAgICAgICAgICAgYnJhbmNo
PSdicmFuY2gtYScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdqYmVkYXJk
QGFwcGxlLmNvbScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAg
ICAgIGJyYW5jaF9wb2ludD1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmJyYW5jaF9wb2lu
dCwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1snYnJhbmNoLWEnXVst
MV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAs
CisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdCAxXG4nLAorICAgICAgICAgICAg
KSkKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1snYnJhbmNoLWEnXS5hcHBlbmQoQ29tbWl0KAor
ICAgICAgICAgICAgICAgIGhhc2g9JzAxNDhjMGRmMGZhZjI0OGFhMTMzZDZkNWFkOTExZDdjYjFi
NTZhNWInLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nYnJhbmNoLWEnLAorICAgICAgICAgICAg
ICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVk
YXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBicmFuY2hfcG9pbnQ9bW9jay5jb21t
aXRzWydicmFuY2gtYSddWy0xXS5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICAgICAgaWRlbnRp
Zmllcj1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY5MDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9
J05ldyBjb21taXQgMlxuJywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmlj
YWxpemUnLCApLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAg
ICAgIGNvbnRyaWJ1dG9ycz1jb250aXJidXRvcnMsCisgICAgICAgICAgICApKQorCisgICAgICAg
ICAgICBjb21taXRfYSA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9J2JyYW5j
aC1hfjEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYS5hdXRob3IsIGNv
bnRpcmJ1dG9yc1snamJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY29tbWl0X2EubWVzc2FnZSwgJ05ldyBjb21taXQgMVxuSWRlbnRpZmllcjogMi4zQGJy
YW5jaC1hJykKKworICAgICAgICAgICAgY29tbWl0X2IgPSBsb2NhbC5HaXQoc2VsZi5wYXRoKS5j
b21taXQoYnJhbmNoPSdicmFuY2gtYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1pdF9iLmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYi5tZXNzYWdlLCAnTmV3IGNvbW1pdCAyXG5J
ZGVudGlmaWVyOiAyLjRAYnJhbmNoLWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICdSZXdy
aXRlIGY5MzEzOGUzYmYxZDVlY2NhMjVmYzA4NDRiN2EyYTc4YjhlMDBhYWUgKDEvMikgKC0tLSBz
ZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nCisgICAgICAgICAgICAn
UmV3cml0ZSAwMTQ4YzBkZjBmYWYyNDhhYTEzM2Q2ZDVhZDkxMWQ3Y2IxYjU2YTViICgyLzIpICgt
LS0gc2Vjb25kcyBwYXNzZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAg
ICAgJzIgY29tbWl0cyBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3QvZmluZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDI3MDkzNCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBjbGFzcyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgYXJn
cz0oJ2ZpbmQnLCAnSEVBRCcsICctcScpLAogICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRo
LAogICAgICAgICAgICAgKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRv
dXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJhZTVkMWU5MDk5OVxuJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJhZTVkMWU5
MDk5OSB8IDZ0aCBjb21taXRcbicpCiAKICAgICBkZWYgdGVzdF9iYXNpY19naXRfc3ZuKHNlbGYp
OgogICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSks
IG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVk
OgpAQCAtNzgsNyArNzgsNyBAQCBjbGFzcyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJywgJy1xJyksCiAgICAgICAgICAg
ICAgICAgcGF0aD1zZWxmLnBhdGgsCiAgICAgICAgICAgICApKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMkBtYWluIHwgZmZmODNiYjJkOTE3
XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgp
LCAnMkBtYWluIHwgZmZmODNiYjJkOTE3IHwgMm5kIGNvbW1pdFxuJykKIAogICAgIGRlZiB0ZXN0
X2lkZW50aWZpZXJfZ2l0X3N2bihzZWxmKToKICAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQo
c2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQ6CkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFRlc3RGaW5kKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICcyQG1haW4nLCAnLXEnKSwK
ICAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKICAgICAgICAgICAgICkpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyQG1haW4gfCBm
ZmY4M2JiMmQ5MTdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0
LmdldHZhbHVlKCksICcyQG1haW4gfCBmZmY4M2JiMmQ5MTcgfCAybmQgY29tbWl0XG4nKQogCiAg
ICAgZGVmIHRlc3RfaWRlbnRpZmllcl9zdm4oc2VsZik6CiAgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgpAQCAtMTAyLDcgKzEwMiw3IEBAIGNsYXNzIFRlc3RGaW5kKHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczY2QzMmUz
NTI0MTAnLCAnLXEnKSwKICAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKICAgICAgICAg
ICAgICkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVl
KCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUzNTI0MTBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUz
NTI0MTAgfCA1dGggY29tbWl0XG4nKQogCiAgICAgZGVmIHRlc3RfcmV2aXNpb25fc3ZuKHNlbGYp
OgogICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5w
YXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNzA5MzQpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBAIGNsYXNzIFRlc3RH
aXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2Nh
bC5HaXQoc2VsZi5wYXRoKS5yZW1vdGUoKSwgcmVwby5yZW1vdGUpCiAKICAgICBkZWYgdGVzdF9i
cmFuY2hlcyhzZWxmKToKLSAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBi
cmFuY2hlcz0oJ3JlbW90ZXMvb3JpZ2luL2JyYW5jaC0zJywpKToKKyAgICAgICAgd2l0aCBtb2Nr
cy5sb2NhbC5HaXQoc2VsZi5wYXRoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAg
ICAgICAgICAgICAgICAgbG9jYWwuR2l0KHNlbGYucGF0aCkuYnJhbmNoZXMsCi0gICAgICAgICAg
ICAgICAgWydicmFuY2gtMycsICdicmFuY2gtYScsICdicmFuY2gtYicsICdtYWluJ10sCisgICAg
ICAgICAgICAgICAgWydicmFuY2gtYScsICdicmFuY2gtYicsICdtYWluJ10sCiAgICAgICAgICAg
ICApCiAKICAgICBkZWYgdGVzdF90YWdzKHNlbGYpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416477</attachid>
            <date>2020-12-17 15:51:15 -0800</date>
            <delta_ts>2020-12-18 07:02:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201217175114.patch</filename>
            <type>text/plain</type>
            <size>38352</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDk1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBpZGVudGlmaWVyIHRyYW5zbGF0aW9uLgor
ICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgY2Fu
b25pY2FsaXplIGRpcmVjdG9yeSB0byBwYWNrYWdlLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24uCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25p
Y2FsaXplOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAoQ2Fu
b25pY2FsaXplKTogQ29tbWFuZCB0byBlZGl0IGhpc3Rvcnkgb2YgdW5wdXNoZWQgY29tbWl0cyBv
biBhIGJyYW5jaC4KKyAgICAgICAgKENhbm9uaWNhbGl6ZS5wYXJzZXIpOgorICAgICAgICAoQ2Fu
b25pY2FsaXplLm1haW4pOiBDYWxsIGBnaXQgZmlsdGVyLWJyYW5jaGAgdG8gZWRpdCBjb21taXQg
bWVzc2FnZSBhbmQgYXV0aG9yc2hpcAorICAgICAgICBvZiB1bnB1c2hlZCBjb21taXRzLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNh
bGl6ZS9jb21taXR0ZXIucHk6IEFkZGVkLgorICAgICAgICAoY2Fub25pY2FsaXplKTogR2l2ZW4g
YSBuYW1lLCBlbWFpbCBhbmQgYSBjb250cmlidXRvciBtYXBwaW5nLCByZXR1cm4gYSBjYW5vbmlj
YWwgbmFtZQorICAgICAgICBhbmQgZW1haWwgZm9yIHRoZSBnaXZlbiBhdXRob3Igb3IgY29tbWl0
dGVyLgorICAgICAgICAobWFpbik6IFByaW50IG91dCB0aGUgY2Fub25pY2FsIGF1dGhvciBhbmQg
Y29tbWl0dGVyIHRvIGJlIHBhcnNlZCBieSBgZ2l0IGZpbHRlci1icmFuY2hgLgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9t
ZXNzYWdlLnB5OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOiBBZGQgdGhlIGlkZW50aWZpZXIgdG8g
YSBjb21taXQgbWVzc2FnZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9jb250cmlidXRvci5weToKKyAgICAgICAgKENvbnRyaWJ1dG9yKTogQWRk
IHVua25vd24gYXV0aG9yIHJlZ2V4LgorICAgICAgICAoQ29udHJpYnV0b3IuZnJvbV9zY21fbG9n
KToKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9sb2NhbC9naXQucHk6CisgICAgICAgIChHaXQuX19pbml0X18pOiBBZGQgYGdpdCBmaWx0
ZXItYnJhbmNoYCBtb2NrLiBOb3RlIHRoYXQgdGhpcyBtb2NrIG1ha2VzIGFuIGVmZm9ydCB0byB0
ZXN0CisgICAgICAgIG1lc3NhZ2UucHkgYW5kIGNvbnRyaWJ1dG9yLnB5LCBidXQgbm90IHRoZSBz
aGVsbCBzY3JpcHQgcGFzc2VkIHRvIHRoZSBjb21tYW5kLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHk6CisgICAgICAgIChDb21t
YW5kLm1haW4pOiBBY2NlcHQgYXJiaXRyYXJ5ICoqa3dhcmdzLgorICAgICAgICAoRmluZC5tYWlu
KTogRGl0dG8uCisgICAgICAgIChDaGVja291dC5tYWluKTogRGl0dG8uCisgICAgICAgIChtYWlu
KTogQWxsb3cgY2FsbGVyIHRvIHNwZWNpZnkgYSBzdHJpbmcgdGVtcGxhdGUgZm9yIGlkZW50aWZp
ZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQu
CisgICAgICAgIChUZXN0Q2Fub25pY2FsaXplKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRz
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToK
KyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RD
YW5vbmljYWxpemUudGVzdF9icmFuY2hfY29tbWl0cyk6CisKIDIwMjAtMTItMTcgIEpvbmF0aGFu
IEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gQ29y
cmVjdCBtb2NrIGBnaXQgbG9nYCBjYWxsIGluIHN0YW5kYXJkIGdpdCByZXBvc2l0b3JpZXMKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2dpdC13ZWJraXQJKHJldmlzaW9uIDI3MDk1OCkKKysrIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtp
dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNSArNDIsOSBAQCBpZiAnX19tYWluX18nID09IF9fbmFt
ZV9fOgogICAgICAgICAgICAgaWYgbmljayBub3QgaW4gY29udHJpYnV0b3JzOgogICAgICAgICAg
ICAgICAgIGNvbnRyaWJ1dG9yc1tuaWNrXSA9IGMKIAotICAgIHN5cy5leGl0KHByb2dyYW0ubWFp
bihwYXRoPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRv
cnMpKQorICAgIHN5cy5leGl0KHByb2dyYW0ubWFpbigKKyAgICAgICAgcGF0aD1vcy5wYXRoLmRp
cm5hbWUoX19maWxlX18pLAorICAgICAgICBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzLAorICAg
ICAgICBpZGVudGlmaWVyX3RlbXBsYXRlPSdodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy97fScs
CisgICAgKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0
dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
c2V0dXAucHkJKHJldmlzaW9uIDI3MDk1OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldHVw
KAogICAgIGxpY2Vuc2U9J01vZGlmaWVkIEJTRCcsCiAgICAgcGFja2FnZXM9WwogICAgICAgICAn
d2Via2l0c2NtcHknLAorICAgICAgICAnd2Via2l0c2NtcHkuY2Fub25pY2FsaXplJywKICAgICAg
ICAgJ3dlYmtpdHNjbXB5LmxvY2FsJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzJywKICAg
ICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzLmxvY2FsJywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNzA5NTgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRj
b3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxw
YWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNiwgNCkK
K3ZlcnNpb24gPSBWZXJzaW9uKDAsIDcsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2th
Z2UoJ2Zhc3RlbmVycycsIFZlcnNpb24oMCwgMTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVy
KFBhY2thZ2UoJ21vbm90b25pYycsIFZlcnNpb24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
Y29udHJpYnV0b3IucHkJKHJldmlzaW9uIDI3MDk1OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBAIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMK
IGNsYXNzIENvbnRyaWJ1dG9yKG9iamVjdCk6CiAgICAgR0lUX0FVVEhPUl9SRSA9IHJlLmNvbXBp
bGUocidBdXRob3I6ICg/UDxhdXRob3I+LiopIDwoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/
PicpCiAgICAgQVVUT01BVEVEX0NIRUNLSU5fUkUgPSByZS5jb21waWxlKHInQXV0aG9yOiAoP1A8
YXV0aG9yPi4qKSA8ZGV2bnVsbD4nKQorICAgIFVOS05PV05fQVVUSE9SID0gcmUuY29tcGlsZShy
J0F1dGhvcjogKD9QPGF1dGhvcj4uKikgPE5vbmU+JykKICAgICBTVk5fQVVUSE9SX1JFID0gcmUu
Y29tcGlsZShyJ3JcZCsgXHwgKD9QPGVtYWlsPi4qKSBcfCAoP1A8ZGF0ZT4uKikgXHwgXGQrIGxp
bmVzPycpCiAgICAgU1ZOX1BBVENIX0ZST01fUkUgPSByZS5jb21waWxlKHInUGF0Y2ggYnkgKD9Q
PGF1dGhvcj4uKikgPCg/UDxlbWFpbD4uKik+IG9uIFxkKy1cZCstXGQrJykKIApAQCAtMTExLDEy
ICsxMTIsMTIgQEAgY2xhc3MgQ29udHJpYnV0b3Iob2JqZWN0KToKICAgICAgICAgZW1haWwgPSBO
b25lCiAgICAgICAgIGF1dGhvciA9IE5vbmUKIAotICAgICAgICBmb3IgZXhwcmVzc2lvbiBpbiBb
Y2xzLkdJVF9BVVRIT1JfUkUsIGNscy5TVk5fQVVUSE9SX1JFLCBjbHMuU1ZOX1BBVENIX0ZST01f
UkUsIGNscy5BVVRPTUFURURfQ0hFQ0tJTl9SRV06CisgICAgICAgIGZvciBleHByZXNzaW9uIGlu
IFtjbHMuR0lUX0FVVEhPUl9SRSwgY2xzLlNWTl9BVVRIT1JfUkUsIGNscy5TVk5fUEFUQ0hfRlJP
TV9SRSwgY2xzLkFVVE9NQVRFRF9DSEVDS0lOX1JFLCBjbHMuVU5LTk9XTl9BVVRIT1JdOgogICAg
ICAgICAgICAgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICBpZiBt
YXRjaDoKICAgICAgICAgICAgICAgICBpZiAnYXV0aG9yJyBpbiBleHByZXNzaW9uLmdyb3VwaW5k
ZXg6CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IG1hdGNoLmdyb3VwKCdhdXRob3InKQot
ICAgICAgICAgICAgICAgICAgICBpZiAnKG5vIGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21h
dGVkIENoZWNraW4nIGluIGF1dGhvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgJyhubyBhdXRo
b3IpJyBpbiBhdXRob3Igb3IgJ0F1dG9tYXRlZCBDaGVja2luJyBpbiBhdXRob3Igb3IgJ1Vua25v
d24nIGluIGF1dGhvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IE5vbmUKICAg
ICAgICAgICAgICAgICBpZiAnZW1haWwnIGluIGV4cHJlc3Npb24uZ3JvdXBpbmRleDoKICAgICAg
ICAgICAgICAgICAgICAgZW1haWwgPSBtYXRjaC5ncm91cCgnZW1haWwnKQpJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9wcm9ncmFtLnB5CShyZXZpc2lvbiAyNzA5NTgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIGNsYXNzIENvbW1hbmQob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoIid7fScgZG9lcyBub3QgaGF2ZSBhIGhlbHAgbWVzc2FnZSIpCiAK
ICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgor
ICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmllZFxuJykKICAgICAgICAgcmV0dXJu
IC0xCiAKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgRmluZChDb21tYW5kKToKICAgICAgICAgKQog
CiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5KToK
KyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnksICoqa3dhcmdzKToKICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRb
MF0sIGluY2x1ZGVfbG9nPWFyZ3MuaW5jbHVkZV9sb2cpCiAgICAgICAgIGV4Y2VwdCAobG9jYWwu
U2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgpAQCAtMTQzLDcgKzE0Myw3
IEBAIGNsYXNzIENoZWNrb3V0KENvbW1hbmQpOgogICAgICAgICApCiAKICAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNs
cywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBpZiBub3QgcmVwb3NpdG9y
eS5wYXRoOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9u
IHJlbW90ZSByZXBvc2l0b3J5IikKICAgICAgICAgICAgIHJldHVybiAxCkBAIC0xNjIsNyArMTYy
LDcgQEAgY2xhc3MgQ2hlY2tvdXQoQ29tbWFuZCk6CiAgICAgICAgIHJldHVybiAwCiAKIAotZGVm
IG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5v
bmUpOgorZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJp
YnV0b3JzPU5vbmUsIGlkZW50aWZpZXJfdGVtcGxhdGU9Tm9uZSk6CiAgICAgbG9nZ2luZy5iYXNp
Y0NvbmZpZyhsZXZlbD1sb2dnaW5nLldBUk5JTkcpCiAKICAgICBsb2dnZXJzID0gW2xvZ2dpbmcu
Z2V0TG9nZ2VyKCksIHdlYmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCkBA
IC0xODMsNyArMTgzLDkgQEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9
TgogCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29t
bWFuZCBoZWxwJykKIAotICAgIGZvciBwcm9ncmFtIGluIFtGaW5kLCBDaGVja291dF06CisgICAg
ZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUgaW1wb3J0IENhbm9uaWNhbGl6ZQorCisgICAg
Zm9yIHByb2dyYW0gaW4gW0ZpbmQsIENoZWNrb3V0LCBDYW5vbmljYWxpemVdOgogICAgICAgICBz
dWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIocHJvZ3JhbS5uYW1lLCBoZWxwPXByb2dy
YW0uaGVscCkKICAgICAgICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhtYWluPXByb2dyYW0ubWFp
bikKICAgICAgICAgcHJvZ3JhbS5wYXJzZXIoc3VicGFyc2VyLCBsb2dnZXJzPWxvZ2dlcnMpCkBA
IC0xOTUsNCArMTk3LDQgQEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9
TgogICAgIGVsc2U6CiAgICAgICAgIHJlcG9zaXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBh
dGg9cGFyc2VkLnJlcG9zaXRvcnksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMpCiAKLSAgICBy
ZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkKKyAg
ICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwg
aWRlbnRpZmllcl90ZW1wbGF0ZT1pZGVudGlmaWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxp
emUvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MK
K2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3
ZWJraXRjb3JlcHkgaW1wb3J0IGFyZ3VtZW50cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21t
YW5kCisKKworY2xhc3MgQ2Fub25pY2FsaXplKENvbW1hbmQpOgorICAgIG5hbWUgPSAnY2Fub25p
Y2FsaXplJworICAgIGhlbHAgPSAnVGFrZSB0aGUgc2V0IG9mIGNvbW1pdHMgd2hpY2ggaGF2ZSBu
b3QgeWV0IGJlZW4gcHVzaGVkIGFuZCBlZGl0IGhpc3RvcnkgdG8gbm9ybWFsaXplIHRoZSAnICtc
CisgICAgICAgICAgICdjb21taXR0ZXJzIHdpdGggZXhpc3RpbmcgY29udHJpYnV0b3IgbWFwcGlu
ZyBhbmQgYWRkIGlkZW50aWZpZXJzIHRvIGNvbW1pdCBtZXNzYWdlcycKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAg
IG91dHB1dF9hcmdzID0gYXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNl
ciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFt
b3VudCBvZiBsb2dnaW5nIGFuZCBgZ2l0IHJlYmFzZWAgaW5mb3JtYXRpb24gZGlzcGxheWVkJwor
ICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAg
ICctLWlkZW50aWZpZXInLCAnLS1uby1pZGVudGlmaWVyJywKKyAgICAgICAgICAgIGhlbHA9J0Fk
ZCBpbiB0aGUgaWRlbnRpZmllciB0byBjb21taXQgbWVzc2FnZXMsIHRydWUgYnkgZGVmYXVsdCcs
CisgICAgICAgICAgICBhY3Rpb249YXJndW1lbnRzLk5vQWN0aW9uLAorICAgICAgICAgICAgZGVz
dD0naWRlbnRpZmllcicsCisgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICkKKyAg
ICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0tcmVtb3RlJywK
KyAgICAgICAgICAgIGhlbHA9J0NvbXBhcmUgYWdhaW5zdCBhIGRpZmZlcmVudCByZW1vdGUnLAor
ICAgICAgICAgICAgZGVzdD0ncmVtb3RlJywKKyAgICAgICAgICAgIGRlZmF1bHQ9J29yaWdpbics
CisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywg
cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAg
IGlmIG5vdCByZXBvc2l0b3J5LnBhdGg6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdD
YW5ub3QgY2Fub25pY2FsaXplIGNvbW1pdHMgb24gYSByZW1vdGUgcmVwb3NpdG9yeVxuJykKKyAg
ICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LmlzX2dpdDoKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0NvbW1pdHMgY2FuIG9ubHkgYmUgY2Fub25pY2Fs
aXplZCBvbiBhIEdpdCByZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAg
ICAgICBicmFuY2ggPSByZXBvc2l0b3J5LmJyYW5jaAorICAgICAgICBpZiBub3QgYnJhbmNoOgor
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGRldGVybWluZSBjdXJyZW50
IGJyYW5jaFxuJykKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXN1bHQgPSBydW4o
WworICAgICAgICAgICAgcmVwb3NpdG9yeS5leGVjdXRhYmxlKCksICdyZXYtbGlzdCcsCisgICAg
ICAgICAgICAnLS1jb3VudCcsICctLW5vLW1lcmdlcycsCisgICAgICAgICAgICAne3JlbW90ZX0v
e2JyYW5jaH0uLnticmFuY2h9Jy5mb3JtYXQocmVtb3RlPWFyZ3MucmVtb3RlLCBicmFuY2g9YnJh
bmNoKSwKKyAgICAgICAgXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucGF0
aCkKKyAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCdGYWlsZWQgdG8gZmluZCBsb2NhbCBjb21taXRzXG4nKQorICAgICAgICAgICAgcmV0
dXJuIC0xCisgICAgICAgIGRpZmZlcmVuY2UgPSBpbnQocmVzdWx0LnN0ZG91dC5yc3RyaXAoKSkK
KyAgICAgICAgaWYgZGlmZmVyZW5jZSA8PSAwOgorICAgICAgICAgICAgcHJpbnQoJ05vIGxvY2Fs
IGNvbW1pdHMgdG8gYmUgZWRpdGVkJykKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGxv
Zy53YXJuaW5nKCd7fSB0byBiZSBlZGl0dGVkLi4uJy5mb3JtYXQoc3RyaW5nX3V0aWxzLnBsdXJh
bGl6ZShkaWZmZXJlbmNlLCAnY29tbWl0JykpKQorCisgICAgICAgIGJhc2UgPSByZXBvc2l0b3J5
LmZpbmQoJ3t9fnt9Jy5mb3JtYXQoYnJhbmNoLCBkaWZmZXJlbmNlKSkKKyAgICAgICAgbG9nLmlu
Zm8oJ0Jhc2UgY29tbWl0IGlzIHt9IChyZWYge30pJy5mb3JtYXQoYmFzZSwgYmFzZS5oYXNoKSkK
KworICAgICAgICBsb2cuZGVidWcoJ1NhdmluZyBjb250cmlidXRvcnMgdG8gdGVtcCBmaWxlIHRv
IGJlIHBpY2tlZCB1cCBieSBjaGlsZCBwcm9jZXNzZXMnKQorICAgICAgICBjb250cmlidXRvcnMg
PSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAne30tY29udHJpYnV0b3JzLmpz
b24nLmZvcm1hdChvcy5nZXRwaWQoKSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGgg
b3Blbihjb250cmlidXRvcnMsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICByZXBvc2l0
b3J5LmNvbnRyaWJ1dG9ycy5zYXZlKGZpbGUpCisKKyAgICAgICAgICAgIG1lc3NhZ2VfZmlsdGVy
ID0gWworICAgICAgICAgICAgICAgICctLW1zZy1maWx0ZXInLAorICAgICAgICAgICAgICAgICd7
fSB7fSB7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyks
ICdtZXNzYWdlLnB5JyksCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUg
b3IgJ3t9JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50
aWZpZXIgZWxzZSBbXQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBh
cyBkZXZudWxsOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAg
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcs
ICctZicsCisgICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRl
X21lc3NhZ2V9Citjb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29u
dHJpYnV0b3JfanNvbn0pCitLRVk9JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVy
T3V0cHV0OyBkbworICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBp
ZiBbWyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2Fn
ZX0KKyAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0g
LSAxKSl9fSIKKyAgICAgICAgICAgIEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAg
ICAgZmkKKyAgICBmaQorICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAg
S0VZPSIkd29yZCIKKyAgICBlbHNlCisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAg
ZmkKK2RvbmUKK2lmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVz
c2FnZX0KKyAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkp
fX0iCitmaScnJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVz
c2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRp
bmcgJEdJVF9DT01NSVQiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhl
Y3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpv
aW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5E
RUJVRyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAg
KSwKKyAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1h
dChicmFuY2gsIGJhc2UuaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9y
eS5wYXRoLAorICAgICAgICAgICAgICAgICAgICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hf
V0FSTklORyc6ICcxJywgJ1BZVEhPTlBBVEgnOiAnOicuam9pbihzeXMucGF0aCl9LAorICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5J
TkcgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cu
bGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICkKKwor
ICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gbW9kaWZ5IGxvY2FsIGNvbW1pdCBtZXNzYWdl
c1xuJykKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBvcy5yZW1vdmUoY29udHJpYnV0b3JzKQorCisgICAgICAgIHByaW50KCd7fSBzdWNjZXNz
ZnVsbHkgY2Fub25pY2FsaXplZCEnLmZvcm1hdChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZl
cmVuY2UsICdjb21taXQnKSkpCisKKyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0
ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxp
emUvY29tbWl0dGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgcnVuCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwKKworRU1B
SUxfUkUgPSByZS5jb21waWxlKHInKD9QPGVtYWlsPlteQF0rQFteQF0rKShALiopPycpCisKKwor
ZGVmIGNhbm9uaWNhbGl6ZShuYW1lLCBlbWFpbCwgY29udHJpYnV0b3JzKToKKyAgICBtYXRjaCA9
IEVNQUlMX1JFLm1hdGNoKGVtYWlsKQorICAgIGlmIG1hdGNoOgorICAgICAgICBlbWFpbCA9IG1h
dGNoLmdyb3VwKCdlbWFpbCcpCisKKyAgICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQo
ZW1haWwsIGNvbnRyaWJ1dG9ycy5nZXQoZW1haWwubG93ZXIoKSkpCisgICAgaWYgY29udHJpYnV0
b3I6CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBlbWFpbCBpZiBtYXRjaCBlbHNl
IGNvbnRyaWJ1dG9yLmVtYWlsCisgICAgY29udHJpYnV0b3IgPSBjb250cmlidXRvcnMuZ2V0KG5h
bWUpCisgICAgaWYgY29udHJpYnV0b3I6CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1l
LCBjb250cmlidXRvci5lbWFpbAorICAgIHJldHVybiBuYW1lLCBlbWFpbAorCisKK2RlZiBtYWlu
KGNvbnRyaWJ1dG9yX2ZpbGUpOgorICAgIFJFUE9TSVRPUllfUEFUSCA9IG9zLmVudmlyb24uZ2V0
KCdPTERQV0QnKQorICAgIEdJVF9DT01NSVQgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVCcp
CisKKyAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JfZmlsZSwgJ3InKSBhcyBmaWxlOgorICAgICAg
ICBjb250cmlidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nLmxvYWQoZmlsZSkKKworICAgIGF1
dGhvciwgYXV0aG9yX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdl
dCgnR0lUX0FVVEhPUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQo
J0dJVF9BVVRIT1JfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAg
KQorICAgIGNvbW1pdHRlciwgY29tbWl0dGVyX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAg
ICBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAg
ICAgb3MuZW52aXJvbi5nZXQoJ0dJVF9DT01NSVRURVJfRU1BSUwnLCAnbnVsbCcpLAorICAgICAg
ICBjb250cmlidXRvcnMsCisgICAgKQorCisgICAgIyBBdHRlbXB0IHRvIGV4dHJhY3QgcGF0Y2gt
YnkKKyAgICBpZiBhdXRob3JfZW1haWwgPT0gY29tbWl0dGVyX2VtYWlsIGFuZCBSRVBPU0lUT1JZ
X1BBVEggYW5kIEdJVF9DT01NSVQ6CisgICAgICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgIFts
b2NhbC5HaXQuZXhlY3V0YWJsZSgpLCAnbG9nJywgR0lUX0NPTU1JVCwgJy0xJ10sCisgICAgICAg
ICAgICBjd2Q9UkVQT1NJVE9SWV9QQVRILCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0n
dXRmLTgnLAorICAgICAgICApCisKKyAgICAgICAgcGF0Y2hfYnkgPSByZS5zZWFyY2goCisgICAg
ICAgICAgICByJ1xzK1BhdGNoIGJ5ICg/UDxhdXRob3I+W148XSspIFw8KD9QPGVtYWlsPltePF0r
KVw+Liogb24gXGQrLVxkKy1cZCsnLAorICAgICAgICAgICAgbG9nLnN0ZG91dCwKKyAgICAgICAg
KQorICAgICAgICBpZiBwYXRjaF9ieToKKyAgICAgICAgICAgIGF1dGhvciwgYXV0aG9yX2VtYWls
ID0gY2Fub25pY2FsaXplKAorICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdhdXRob3In
KSwKKyAgICAgICAgICAgICAgICBwYXRjaF9ieS5ncm91cCgnZW1haWwnKSwKKyAgICAgICAgICAg
ICAgICBjb250cmlidXRvcnMsCisgICAgICAgICAgICApCisKKyAgICBwcmludCgnR0lUX0FVVEhP
Ul9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9yKSkKKyAgICBwcmludCgnR0lUX0FVVEhPUl9FTUFJTCB7
fScuZm9ybWF0KGF1dGhvcl9lbWFpbCkpCisgICAgcHJpbnQoJ0dJVF9DT01NSVRURVJfTkFNRSB7
fScuZm9ybWF0KGNvbW1pdHRlcikpCisgICAgcHJpbnQoJ0dJVF9DT01NSVRURVJfRU1BSUwge30n
LmZvcm1hdChjb21taXR0ZXJfZW1haWwpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2Fn
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitp
bXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2RlZiBt
YWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90ZW1wbGF0ZSk6CisgICAgUkVQT1NJVE9SWV9QQVRI
ID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24u
Z2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlmIG5vdCBSRVBPU0lUT1JZX1BBVEg6CisgICAgICAg
IHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhcbicp
CisgICAgICAgIHJldHVybiAtMQorICAgIGlmIG5vdCBHSVRfQ09NTUlUOgorICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgZ2l0IGhhc2hcbicpCisgICAgICAgIHJl
dHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9IEdpdChSRVBPU0lUT1JZX1BBVEgpCisgICAgY29t
bWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFzaD1HSVRfQ09NTUlUKQorICAgIGlmIG5vdCBjb21t
aXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4gdGhl
IHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisgICAg
aWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9yIG5vdCBjb21taXQuYnJhbmNoOgorICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gY29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9
JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAgICAgICByZXR1cm4gLTEKKworICAgIGxpbmVzID0g
W10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmVz
LmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisgICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihsaW5l
cykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJ
T04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAgICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCisKKyAg
ICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBsaW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0uc3Rh
cnRzd2l0aCgnSWRlbnRpZmllcjogJyk6CisgICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXgg
LSAxXSA9ICdJZGVudGlmaWVyOiB7fScuZm9ybWF0KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0
KGNvbW1pdCkpCisgICAgZWxzZToKKyAgICAgICAgbGluZXMuaW5zZXJ0KGlkZW50aWZpZXJfaW5k
ZXgsICdJZGVudGlmaWVyOiB7fScuZm9ybWF0KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNv
bW1pdCkpKQorCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHByaW50KGxpbmUpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5zdGRp
biwgc3lzLmFyZ3ZbMV0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5w
eQkocmV2aXNpb24gMjcwOTU4KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4
ICsyNSwxMCBAQCBpbXBvcnQgb3MKIGltcG9ydCByZQogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBk
YXRldGltZQotZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgbW9ja3MsIE91dHB1dENhcHR1cmUsIFN0cmluZ0lPCiBmcm9tIHdlYmtpdHNjbXB5
IGltcG9ydCBsb2NhbCwgQ29tbWl0LCBDb250cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5jYW5v
bmljYWxpemUuY29tbWl0dGVyIGltcG9ydCBtYWluIGFzIGNvbW1pdHRlcl9tYWluCitmcm9tIHdl
YmtpdHNjbXB5LmNhbm9uaWNhbGl6ZS5tZXNzYWdlIGltcG9ydCBtYWluIGFzIG1lc3NhZ2VfbWFp
bgogCiAKIGNsYXNzIEdpdChtb2Nrcy5TdWJwcm9jZXNzKToKQEAgLTU4LDYgKzYwLDcgQEAgY2xh
c3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgogICAgICAgICAgICAgICAgICAgICBjb21taXQucmV2
aXNpb24gPSBOb25lCiAKICAgICAgICAgc2VsZi5oZWFkID0gc2VsZi5jb21taXRzW3NlbGYuZGVm
YXVsdF9icmFuY2hdWy0xXQorICAgICAgICBzZWxmLnJlbW90ZXMgPSB7J29yaWdpbi97fScuZm9y
bWF0KGJyYW5jaCk6IGNvbW1pdHNbLTFdIGZvciBicmFuY2gsIGNvbW1pdHMgaW4gc2VsZi5jb21t
aXRzLml0ZW1zKCl9CiAgICAgICAgIHNlbGYudGFncyA9IHt9CiAKICAgICAgICAgaWYgZ2l0X3N2
bjoKQEAgLTIzMyw2ICsyMzYsMTQgQEAgbm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBj
bGVhbgogICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOgog
ICAgICAgICAgICAgICAgICAgICBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTAp
IGlmIHNlbGYuY2hlY2tvdXQoYXJnc1syXSkgZWxzZSBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbihy
ZXR1cm5jb2RlPTEpCiAgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAg
ICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwgJ2ZpbHRlci1icmFuY2gnLCAnLWYnLAorICAg
ICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxh
bWJkYSAqYXJncywgKiprd2FyZ3M6IHNlbGYuZmlsdGVyX2JyYW5jaCgKKyAgICAgICAgICAgICAg
ICAgICAgYXJnc1stMV0sCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9
JyAnLmpvaW4oYXJnc1stMl0uc3BsaXQoJyAnKVsyOl0pIGlmIGFyZ3NbLTNdID09ICctLW1zZy1m
aWx0ZXInIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfc2hlbGw9
YXJnc1s0XSBpZiBhcmdzWzNdID09ICctLWVudi1maWx0ZXInIGFuZCBhcmdzWzRdIGVsc2UgTm9u
ZSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJv
dXRlKAogICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICBj
d2Q9c2VsZi5wYXRoLAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0Nv
bXBsZXRpb24oCkBAIC0yNjUsMTYgKzI3NiwyMiBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2lu
ZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc2Vs
Zi5kZWZhdWx0X2JyYW5jaF1bZm91bmQuYnJhbmNoX3BvaW50IC0gZGlmZmVyZW5jZSAtIDFdCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgICAgICBzb21ldGhpbmcgPSBzdHIoc29t
ZXRoaW5nKQorICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZzoKKyAgICAgICAgICAgIGEsIGIg
PSBzb21ldGhpbmcuc3BsaXQoJy4uJykKKyAgICAgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkKKyAg
ICAgICAgICAgIGIgPSBzZWxmLmZpbmQoYikKKyAgICAgICAgICAgIHJldHVybiBiIGlmIGEgYW5k
IGIgZWxzZSBOb25lCisKICAgICAgICAgaWYgc29tZXRoaW5nID09ICdIRUFEJzoKICAgICAgICAg
ICAgIHJldHVybiBzZWxmLmhlYWQKICAgICAgICAgaWYgc29tZXRoaW5nIGluIHNlbGYuY29tbWl0
cy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW3NvbWV0aGluZ11bLTFd
CiAgICAgICAgIGlmIHNvbWV0aGluZyBpbiBzZWxmLnRhZ3Mua2V5cygpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYudGFnc1tzb21ldGhpbmddCisgICAgICAgIGlmIHNvbWV0aGluZyBpbiBzZWxm
LnJlbW90ZXMua2V5cygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVtb3Rlc1tzb21ldGhp
bmddCiAKLSAgICAgICAgc29tZXRoaW5nID0gc3RyKHNvbWV0aGluZykKLSAgICAgICAgaWYgJy4u
JyBpbiBzb21ldGhpbmc6Ci0gICAgICAgICAgICBzb21ldGhpbmcgPSBzb21ldGhpbmcuc3BsaXQo
Jy4uJylbMV0KICAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRl
bXMoKToKICAgICAgICAgICAgIGlmIGJyYW5jaCA9PSBzb21ldGhpbmc6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbW1pdHNbLTFdCkBAIC0yODYsMTAgKzMwMywxNiBAQCBub3RoaW5nIHRvIGNv
bW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYg
Y291bnQoc2VsZiwgc29tZXRoaW5nKToKLSAgICAgICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRo
aW5nKQotICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZyBvciBub3QgbWF0Y2guYnJhbmNoX3Bv
aW50OgotICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmlkZW50aWZpZXIKLSAgICAgICAgcmV0dXJu
IG1hdGNoLmJyYW5jaF9wb2ludCArIG1hdGNoLmlkZW50aWZpZXIKKyAgICAgICAgaWYgJy4uJyBu
b3QgaW4gc29tZXRoaW5nOgorICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRoaW5n
KQorICAgICAgICAgICAgcmV0dXJuIChtYXRjaC5icmFuY2hfcG9pbnQgb3IgMCkgKyBtYXRjaC5p
ZGVudGlmaWVyCisKKyAgICAgICAgYSwgYiA9IHNvbWV0aGluZy5zcGxpdCgnLi4nKQorICAgICAg
ICBhID0gc2VsZi5maW5kKGEpCisgICAgICAgIGIgPSBzZWxmLmZpbmQoYikKKyAgICAgICAgaWYg
YS5icmFuY2hfcG9pbnQgPT0gYi5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gYWJz
KGIuaWRlbnRpZmllciAtIGEuaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGIuaWRlbnRpZmll
cgogCiAgICAgZGVmIGJyYW5jaGVzX29uKHNlbGYsIGhhc2gpOgogICAgICAgICByZXN1bHQgPSBz
ZXQoKQpAQCAtMzEzLDMgKzMzNiw4OSBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVl
IGNsZWFuCiAgICAgICAgICAgICBzZWxmLmhlYWQgPSBjb21taXQKICAgICAgICAgICAgIHNlbGYu
ZGV0YWNoZWQgPSBzb21ldGhpbmcgbm90IGluIHNlbGYuY29tbWl0cy5rZXlzKCkKICAgICAgICAg
cmV0dXJuIFRydWUgaWYgY29tbWl0IGVsc2UgRmFsc2UKKworICAgIGRlZiBmaWx0ZXJfYnJhbmNo
KHNlbGYsIHJhbmdlLCBpZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUsIGVudmlyb25tZW50X3NoZWxs
PU5vbmUpOgorICAgICAgICAjIFdlIGNhbid0IGVmZmVjdGl2ZWx5IG1vY2sgdGhlIGJhc2ggc2Ny
aXB0IGluIHRoZSBjb21tYW5kLCBidXQgd2UgY2FuIG1vY2sgdGhlIHB5dGhvbiBjb2RlIHRoYXQK
KyAgICAgICAgIyBzY3JpcHQgY2FsbHMsIHdoaWNoIGlzIHdoZXJlIHRoZSBwcm9ncmFtIGxvZ2lj
IGlzLgorICAgICAgICBoZWFkLCBzdGFydCA9IHJhbmdlLnNwbGl0KCcuLi4nKQorICAgICAgICBo
ZWFkID0gc2VsZi5maW5kKGhlYWQpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5maW5kKHN0YXJ0KQor
CisgICAgICAgIGNvbW1pdHNfdG9fZWRpdCA9IFtdCisgICAgICAgIGZvciBjb21taXQgaW4gcmV2
ZXJzZWQoc2VsZi5jb21taXRzW2hlYWQuYnJhbmNoXSk6CisgICAgICAgICAgICBpZiBjb21taXQu
YnJhbmNoID09IHN0YXJ0LmJyYW5jaCBhbmQgY29tbWl0LmlkZW50aWZpZXIgPD0gc3RhcnQuaWRl
bnRpZmllcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgY29tbWl0c190b19l
ZGl0Lmluc2VydCgwLCBjb21taXQpCisgICAgICAgIGlmIGhlYWQuYnJhbmNoICE9IHNlbGYuZGVm
YXVsdF9icmFuY2g6CisgICAgICAgICAgICBmb3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29t
bWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVs6aGVhZC5icmFuY2hfcG9pbnRdKToKKyAgICAgICAg
ICAgICAgICBpZiBjb21taXQuaWRlbnRpZmllciA8PSBzdGFydC5pZGVudGlmaWVyOgorICAgICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbW1pdHNfdG9fZWRpdC5pbnNl
cnQoMCwgY29tbWl0KQorCisgICAgICAgIHN0ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgb3Jp
Z2luYWxfZW52ID0ge2tleTogb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpIGZvciBrZXkgaW4gWwor
ICAgICAgICAgICAgJ09MRFBXRCcsICdHSVRfQ09NTUlUJywKKyAgICAgICAgICAgICdHSVRfQVVU
SE9SX05BTUUnLCAnR0lUX0FVVEhPUl9FTUFJTCcsCisgICAgICAgICAgICAnR0lUX0NPTU1JVFRF
Ul9OQU1FJywgJ0dJVF9DT01NSVRURVJfRU1BSUwnLAorICAgICAgICBdfQorCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgb3MuZW52aXJvblsnT0xEUFdE
J10gPSBzZWxmLnBhdGgKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0c190b19lZGl0
OgorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9u
WydHSVRfQ09NTUlUJ10gPSBjb21taXQuaGFzaAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25b
J0dJVF9BVVRIT1JfTkFNRSddID0gY29tbWl0LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAg
b3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJTCddID0gY29tbWl0LmF1dGhvci5lbWFpbAorICAg
ICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9DT01NSVRURVJfTkFNRSddID0gY29tbWl0LmF1
dGhvci5uYW1lCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0NPTU1JVFRFUl9FTUFJ
TCddID0gY29tbWl0LmF1dGhvci5lbWFpbAorCisgICAgICAgICAgICAgICAgc3Rkb3V0LndyaXRl
KAorICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZSB7aGFzaH0gKHtjb3VudH0ve3RvdGFsfSkg
KC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nLmZvcm1hdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9Y29tbWl0Lmhhc2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudD1jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsPWxl
bihjb21taXRzX3RvX2VkaXQpLAorICAgICAgICAgICAgICAgICAgICApKQorCisgICAgICAgICAg
ICAgICAgaWYgaWRlbnRpZmllcl90ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZWZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VmaWxlLndyaXRl
KGNvbW1pdC5tZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlZmlsZS5zZWVrKDAp
CisgICAgICAgICAgICAgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgor
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9tYWluKG1lc3NhZ2VmaWxlLCBpZGVudGlm
aWVyX3RlbXBsYXRlKQorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGNhcHR1cmVkLnN0ZG91
dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lc1st
MV0uc3RhcnRzd2l0aCgnZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4nKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmVzLnBvcCgtMSkKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0Lm1lc3Nh
Z2UgPSAnXG4nLmpvaW4obGluZXMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgZW52aXJvbm1l
bnRfc2hlbGw6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
aWYgcmUuc2VhcmNoKHInZWNobyAiT3ZlcndyaXRpbmcnLCBlbnZpcm9ubWVudF9zaGVsbCk6Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnT3ZlcndyaXRpbmcge31cbicuZm9ybWF0
KGNvbW1pdC5oYXNoKSkKKworICAgICAgICAgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKD9Q
PGpzb24+XFMrXC5qc29uKScsIGVudmlyb25tZW50X3NoZWxsKQorICAgICAgICAgICAgICAgIGlm
IG1hdGNoOgorICAgICAgICAgICAgICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0
dXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9tYWluKG1hdGNoLmdyb3Vw
KCdqc29uJykpCisgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5zZWVrKDApCisg
ICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNhcHR1cmVkLnN0ZG91dC5yZWFkbGluZXMo
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2xpbmUuc3BsaXQoJyAnKVswXV0gPSAnICcuam9p
bihsaW5lLnNwbGl0KCcgJylbMTpdKQorCisgICAgICAgICAgICAgICAgY29tbWl0LmF1dGhvciA9
IENvbnRyaWJ1dG9yKG5hbWU9b3MuZW52aXJvblsnR0lUX0FVVEhPUl9OQU1FJ10sIGVtYWlscz1b
b3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJTCddXSkKKworICAgICAgICAgICAgICAgIGlmIHJl
LnNlYXJjaChyJ2VjaG8gIlxzKycsIGVudmlyb25tZW50X3NoZWxsKToKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIGtleSBpbiBbJ0dJVF9BVVRIT1JfTkFNRScsICdHSVRfQVVUSE9SX0VNQUlMJywg
J0dJVF9DT01NSVRURVJfTkFNRScsICdHSVRfQ09NTUlUVEVSX0VNQUlMJ106CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRvdXQud3JpdGUoJyAgICB7fT17fVxuJy5mb3JtYXQoa2V5LCBvcy5l
bnZpcm9uW2tleV0pKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3Iga2V5LCB2
YWx1ZSBpbiBvcmlnaW5hbF9lbnYuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJv
bltrZXldCisKKyAgICAgICAgcmV0dXJuIG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAg
ICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgc3Rkb3V0PXN0ZG91dC5nZXR2YWx1ZSgp
LAorICAgICAgICApCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9u
aWNhbGl6ZV91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGlt
cG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBh
cyBNb2NrVGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgcHJvZ3JhbSwgbW9ja3MsIGxvY2Fs
LCBDb21taXQsIENvbnRyaWJ1dG9yCisKKworY2xhc3MgVGVzdENhbm9uaWNhbGl6ZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRl
c3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCksIG1vY2tzLmxv
Y2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1RpbWU6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBh
cmdzPSgnY2Fub25pY2FsaXplJywpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAor
ICAgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAg
IHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5w
YXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNh
bGl6ZScsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICkp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwg
J05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRpdGVkXG4nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0
ZWRfaWRlbnRpZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2Fw
dHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2
bigpLCBNb2NrVGltZToKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1h
cHBpbmcoKQorICAgICAgICAgICAgY29udGlyYnV0b3JzLmNyZWF0ZSgnSm9uYXRoYW4gQmVkYXJk
JywgJ2piZWRhcmRAYXBwbGUuY29tJykKKworICAgICAgICAgICAgbW9jay5jb21taXRzW21vY2su
ZGVmYXVsdF9icmFuY2hdLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nMzhl
YTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZicsCisgICAgICAgICAgICAgICAg
YnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRy
aWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10p
LAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9bW9jay5jb21taXRzW21vY2suZGVmYXVsdF9i
cmFuY2hdWy0xXS5pZGVudGlmaWVyICsgMSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYw
MTY2ODAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAg
ICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4o
CisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICctdicsKSwKKyAgICAgICAg
ICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29u
dGlyYnV0b3JzLAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J2h0dHBzOi8v
Y29tbWl0cy53ZWJraXQub3JnL3t9JywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNv
bW1pdCA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2Jy
YW5jaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGly
YnV0b3JzWydqYmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb21taXQubWVzc2FnZSwgJ05ldyBjb21taXRcbklkZW50aWZpZXI6IGh0dHBzOi8vY29tbWl0
cy53ZWJraXQub3JnLzVAbWFpbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUg
MzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZiAoMS8xKSAoLS0tIHNlY29u
ZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVy
d3JpdGluZyAzOGVhNTBkMjhhZTM5NGM5YzhiODBlMTNjM2ZiMjFmMWMyNjI4NzFmXG4nCisgICAg
ICAgICAgICAnMSBjb21taXQgc3VjY2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQhXG4nLAorICAgICAg
ICApCisKKyAgICBkZWYgdGVzdF9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENh
cHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1U
cnVlKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBj
b250aXJidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkKKyAgICAgICAgICAgIGNvbnRpcmJ1
dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVkYXJkQGFwcGxlLmNvbScpCisKKyAg
ICAgICAgICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0
KAorICAgICAgICAgICAgICAgIGhhc2g9Jzc2NjYwOTI3NmZlMjAxZTdjZTJjNjk5OTRlMTEzZDk3
OWQyMTQ4YWMnLAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoLAor
ICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBl
bWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVy
PW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVstMV0uaWRlbnRpZmllciArIDEsCisg
ICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAgICAgICAgcmV2
aXNpb249OSwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAg
ICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4o
CisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICctdnYnKSwKKyAgICAgICAg
ICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29u
dGlyYnV0b3JzLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgY29tbWl0ID0gbG9jYWwu
R2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0aG9yLCBjb250aXJidXRvcnNbJ2piZWRh
cmRAYXBwbGUuY29tJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgICAgIGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAgICAgICAgICdOZXcgY29tbWl0XG4nCisg
ICAgICAgICAgICAgICAgJ0lkZW50aWZpZXI6IDVAbWFpblxuJworICAgICAgICAgICAgICAgICdz
dm4taWQ6IGh0dHBzOi8vc3ZuLmV4YW1wbGUub3JnL3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVu
a0A5IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAgICAp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91
dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2
OTk5NGUxMTNkOTc5ZDIxNDhhYyAoMS8xKSAoLS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcg
LS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGluZyA3NjY2MDkyNzZmZTIw
MWU3Y2UyYzY5OTk0ZTExM2Q5NzlkMjE0OGFjXG4nCisgICAgICAgICAgICAnICAgIEdJVF9BVVRI
T1JfTkFNRT1Kb25hdGhhbiBCZWRhcmRcbicKKyAgICAgICAgICAgICcgICAgR0lUX0FVVEhPUl9F
TUFJTD1qYmVkYXJkQGFwcGxlLmNvbVxuJworICAgICAgICAgICAgJyAgICBHSVRfQ09NTUlUVEVS
X05BTUU9Sm9uYXRoYW4gQmVkYXJkXG4nCisgICAgICAgICAgICAnICAgIEdJVF9DT01NSVRURVJf
RU1BSUw9amJlZGFyZEBhcHBsZS5jb21cbicKKyAgICAgICAgICAgICcxIGNvbW1pdCBzdWNjZXNz
ZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JyYW5j
aF9jb21taXRzKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJl
ZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMgbW9jaywgbW9ja3MubG9jYWwuU3ZuKCks
IE1vY2tUaW1lOgorICAgICAgICAgICAgY29udGlyYnV0b3JzID0gQ29udHJpYnV0b3IuTWFwcGlu
ZygpCisgICAgICAgICAgICBjb250aXJidXRvcnMuY3JlYXRlKCdKb25hdGhhbiBCZWRhcmQnLCAn
amJlZGFyZEBhcHBsZS5jb20nKQorCisgICAgICAgICAgICBsb2NhbC5HaXQoc2VsZi5wYXRoKS5j
aGVja291dCgnYnJhbmNoLWEnKQorICAgICAgICAgICAgbW9jay5jb21taXRzWydicmFuY2gtYSdd
LmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nZjkzMTM4ZTNiZjFkNWVjY2Ey
NWZjMDg0NGI3YTJhNzhiOGUwMGFhZScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSdicmFuY2gt
YScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNv
bScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIGJyYW5j
aF9wb2ludD1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmJyYW5jaF9wb2ludCwKKyAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1snYnJhbmNoLWEnXVstMV0uaWRlbnRp
ZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAg
ICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdCAxXG4nLAorICAgICAgICAgICAgKSkKKyAgICAg
ICAgICAgIG1vY2suY29tbWl0c1snYnJhbmNoLWEnXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAg
ICAgICAgIGhhc2g9JzAxNDhjMGRmMGZhZjI0OGFhMTMzZDZkNWFkOTExZDdjYjFiNTZhNWInLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0nYnJhbmNoLWEnLAorICAgICAgICAgICAgICAgIGF1dGhv
cj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxl
LmNvbSddKSwKKyAgICAgICAgICAgICAgICBicmFuY2hfcG9pbnQ9bW9jay5jb21taXRzWydicmFu
Y2gtYSddWy0xXS5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2Nr
LmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAgICAgICAgICAg
IHRpbWVzdGFtcD0xNjAxNjY5MDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBjb21t
aXQgMlxuJywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCAp
LAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbnRy
aWJ1dG9ycz1jb250aXJidXRvcnMsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBjb21t
aXRfYSA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1hfjEnKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYS5hdXRob3IsIGNvbnRpcmJ1dG9y
c1snamJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29t
bWl0X2EubWVzc2FnZSwgJ05ldyBjb21taXQgMVxuSWRlbnRpZmllcjogMi4zQGJyYW5jaC1hJykK
KworICAgICAgICAgICAgY29tbWl0X2IgPSBsb2NhbC5HaXQoc2VsZi5wYXRoKS5jb21taXQoYnJh
bmNoPSdicmFuY2gtYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9iLmF1
dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjb21taXRfYi5tZXNzYWdlLCAnTmV3IGNvbW1pdCAyXG5JZGVudGlmaWVy
OiAyLjRAYnJhbmNoLWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICdSZXdyaXRlIGY5MzEz
OGUzYmYxZDVlY2NhMjVmYzA4NDRiN2EyYTc4YjhlMDBhYWUgKDEvMikgKC0tLSBzZWNvbmRzIHBh
c3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nCisgICAgICAgICAgICAnUmV3cml0ZSAw
MTQ4YzBkZjBmYWYyNDhhYTEzM2Q2ZDVhZDkxMWQ3Y2IxYjU2YTViICgyLzIpICgtLS0gc2Vjb25k
cyBwYXNzZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAgICAgJzIgY29t
bWl0cyBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416516</attachid>
            <date>2020-12-18 07:02:28 -0800</date>
            <delta_ts>2020-12-18 13:43:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201218090226.patch</filename>
            <type>text/plain</type>
            <size>38382</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDk1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBjYW5vbmljYWwgaWRlbnRpZmllciB0cmFu
c2xhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5w
eTogQWRkIGNhbm9uaWNhbGl6ZSBkaXJlY3RvcnkgdG8gcGFja2FnZS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2
ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2Nhbm9uaWNhbGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKENhbm9uaWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVk
IGNvbW1pdHMgb24gYSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAg
ICAgICAgKENhbm9uaWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVk
aXQgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29t
bWl0cy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6
ZSk6IEdpdmVuIGEgbmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJu
IGEgY2Fub25pY2FsIG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9y
IG9yIGNvbW1pdHRlci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBh
dXRob3IgYW5kIGNvbW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBjYW5v
bmljYWwgaWRlbnRpZmllciB0byBhIGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5OgorICAgICAg
ICAoQ29udHJpYnV0b3IpOiBBZGQgdW5rbm93biBhdXRob3IgcmVnZXguCisgICAgICAgIChDb250
cmlidXRvci5mcm9tX3NjbV9sb2cpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5fX2lu
aXRfXyk6IEFkZCBgZ2l0IGZpbHRlci1icmFuY2hgIG1vY2suIE5vdGUgdGhhdCB0aGlzIG1vY2sg
bWFrZXMgYW4gZWZmb3J0IHRvIHRlc3QKKyAgICAgICAgbWVzc2FnZS5weSBhbmQgY29udHJpYnV0
b3IucHksIGJ1dCBub3QgdGhlIHNoZWxsIHNjcmlwdCBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weToKKyAgICAgICAgKENvbW1hbmQubWFpbik6IEFjY2VwdCBhcmJpdHJhcnkgKiprd2FyZ3Mu
CisgICAgICAgIChGaW5kLm1haW4pOiBEaXR0by4KKyAgICAgICAgKENoZWNrb3V0Lm1haW4pOiBE
aXR0by4KKyAgICAgICAgKG1haW4pOiBBbGxvdyBjYWxsZXIgdG8gc3BlY2lmeSBhIHN0cmluZyB0
ZW1wbGF0ZSBmb3IgY2Fub25pY2FsIGlkZW50aWZpZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nh
bm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXpl
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9icmFuY2hfY29t
bWl0cyk6CisKIDIwMjAtMTItMTcgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29t
PgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gQ29ycmVjdCBtb2NrIGBnaXQgbG9nYCBjYWxsIGlu
IHN0YW5kYXJkIGdpdCByZXBvc2l0b3JpZXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtp
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQJKHJldmlzaW9uIDI3MDk1
OCkKKysrIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtNDIsNSAr
NDIsOSBAQCBpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgogICAgICAgICAgICAgaWYgbmljayBu
b3QgaW4gY29udHJpYnV0b3JzOgogICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9yc1tuaWNrXSA9
IGMKIAotICAgIHN5cy5leGl0KHByb2dyYW0ubWFpbihwYXRoPW9zLnBhdGguZGlybmFtZShfX2Zp
bGVfXyksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMpKQorICAgIHN5cy5leGl0KHByb2dyYW0u
bWFpbigKKyAgICAgICAgcGF0aD1vcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICBj
b250cmlidXRvcnM9Y29udHJpYnV0b3JzLAorICAgICAgICBpZGVudGlmaWVyX3RlbXBsYXRlPSdo
dHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy97fScsCisgICAgKSkKIApJbmRleDogVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHJldmlzaW9uIDI3MDk1OCkK
KysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldHVwKAogICAgIGxpY2Vuc2U9J01vZGlmaWVkIEJT
RCcsCiAgICAgcGFja2FnZXM9WwogICAgICAgICAnd2Via2l0c2NtcHknLAorICAgICAgICAnd2Vi
a2l0c2NtcHkuY2Fub25pY2FsaXplJywKICAgICAgICAgJ3dlYmtpdHNjbXB5LmxvY2FsJywKICAg
ICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzLmxv
Y2FsJywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzA5NTgpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5w
eQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAg
ICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Vi
a2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkK
IAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNiwgNCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDcsIDAp
CiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycsIFZlcnNpb24oMCwg
MTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90b25pYycsIFZlcnNp
b24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY29udHJpYnV0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkJKHJldmlzaW9uIDI3
MDk1OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L2NvbnRyaWJ1dG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGZyb20gd2Vi
a2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMKIGNsYXNzIENvbnRyaWJ1dG9yKG9iamVjdCk6
CiAgICAgR0lUX0FVVEhPUl9SRSA9IHJlLmNvbXBpbGUocidBdXRob3I6ICg/UDxhdXRob3I+Liop
IDwoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/PicpCiAgICAgQVVUT01BVEVEX0NIRUNLSU5f
UkUgPSByZS5jb21waWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8ZGV2bnVsbD4nKQorICAg
IFVOS05PV05fQVVUSE9SID0gcmUuY29tcGlsZShyJ0F1dGhvcjogKD9QPGF1dGhvcj4uKikgPE5v
bmU+JykKICAgICBTVk5fQVVUSE9SX1JFID0gcmUuY29tcGlsZShyJ3JcZCsgXHwgKD9QPGVtYWls
Pi4qKSBcfCAoP1A8ZGF0ZT4uKikgXHwgXGQrIGxpbmVzPycpCiAgICAgU1ZOX1BBVENIX0ZST01f
UkUgPSByZS5jb21waWxlKHInUGF0Y2ggYnkgKD9QPGF1dGhvcj4uKikgPCg/UDxlbWFpbD4uKik+
IG9uIFxkKy1cZCstXGQrJykKIApAQCAtMTExLDEyICsxMTIsMTIgQEAgY2xhc3MgQ29udHJpYnV0
b3Iob2JqZWN0KToKICAgICAgICAgZW1haWwgPSBOb25lCiAgICAgICAgIGF1dGhvciA9IE5vbmUK
IAotICAgICAgICBmb3IgZXhwcmVzc2lvbiBpbiBbY2xzLkdJVF9BVVRIT1JfUkUsIGNscy5TVk5f
QVVUSE9SX1JFLCBjbHMuU1ZOX1BBVENIX0ZST01fUkUsIGNscy5BVVRPTUFURURfQ0hFQ0tJTl9S
RV06CisgICAgICAgIGZvciBleHByZXNzaW9uIGluIFtjbHMuR0lUX0FVVEhPUl9SRSwgY2xzLlNW
Tl9BVVRIT1JfUkUsIGNscy5TVk5fUEFUQ0hfRlJPTV9SRSwgY2xzLkFVVE9NQVRFRF9DSEVDS0lO
X1JFLCBjbHMuVU5LTk9XTl9BVVRIT1JdOgogICAgICAgICAgICAgbWF0Y2ggPSBleHByZXNzaW9u
Lm1hdGNoKGxpbmUpCiAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgICBpZiAn
YXV0aG9yJyBpbiBleHByZXNzaW9uLmdyb3VwaW5kZXg6CiAgICAgICAgICAgICAgICAgICAgIGF1
dGhvciA9IG1hdGNoLmdyb3VwKCdhdXRob3InKQotICAgICAgICAgICAgICAgICAgICBpZiAnKG5v
IGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21hdGVkIENoZWNraW4nIGluIGF1dGhvcjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgJyhubyBhdXRob3IpJyBpbiBhdXRob3Igb3IgJ0F1dG9tYXRl
ZCBDaGVja2luJyBpbiBhdXRob3Igb3IgJ1Vua25vd24nIGluIGF1dGhvcjoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dGhvciA9IE5vbmUKICAgICAgICAgICAgICAgICBpZiAnZW1haWwnIGlu
IGV4cHJlc3Npb24uZ3JvdXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAgZW1haWwgPSBtYXRj
aC5ncm91cCgnZW1haWwnKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5CShyZXZpc2lvbiAyNzA5
NTgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9w
cm9ncmFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIENvbW1hbmQo
b2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIid7fScgZG9l
cyBub3QgaGF2ZSBhIGhlbHAgbWVzc2FnZSIpCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
bWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVw
b3NpdG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5k
IHNwZWNpZmllZFxuJykKICAgICAgICAgcmV0dXJuIC0xCiAKQEAgLTgxLDcgKzgxLDcgQEAgY2xh
c3MgRmluZChDb21tYW5kKToKICAgICAgICAgKQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVm
IG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5KToKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJl
cG9zaXRvcnksICoqa3dhcmdzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29tbWl0ID0g
cmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9nPWFyZ3MuaW5jbHVk
ZV9sb2cpCiAgICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikg
YXMgZXhjZXB0aW9uOgpAQCAtMTQzLDcgKzE0Myw3IEBAIGNsYXNzIENoZWNrb3V0KENvbW1hbmQp
OgogICAgICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3Ms
IHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2Fy
Z3MpOgogICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgogICAgICAgICAgICAgc3lzLnN0
ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKICAgICAg
ICAgICAgIHJldHVybiAxCkBAIC0xNjIsNyArMTYyLDcgQEAgY2xhc3MgQ2hlY2tvdXQoQ29tbWFu
ZCk6CiAgICAgICAgIHJldHVybiAwCiAKIAotZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUs
IGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgorZGVmIG1haW4oYXJncz1Ob25lLCBw
YXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlkZW50aWZpZXJfdGVt
cGxhdGU9Tm9uZSk6CiAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLldBUk5J
TkcpCiAKICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdlYmtpdGNvcmVweV9s
b2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCkBAIC0xODMsNyArMTgzLDkgQEAgZGVmIG1haW4o
YXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogCiAgICAgc3VicGFyc2VycyA9IHBhcnNl
ci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKIAotICAgIGZvciBwcm9n
cmFtIGluIFtGaW5kLCBDaGVja291dF06CisgICAgZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxp
emUgaW1wb3J0IENhbm9uaWNhbGl6ZQorCisgICAgZm9yIHByb2dyYW0gaW4gW0ZpbmQsIENoZWNr
b3V0LCBDYW5vbmljYWxpemVdOgogICAgICAgICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9w
YXJzZXIocHJvZ3JhbS5uYW1lLCBoZWxwPXByb2dyYW0uaGVscCkKICAgICAgICAgc3VicGFyc2Vy
LnNldF9kZWZhdWx0cyhtYWluPXByb2dyYW0ubWFpbikKICAgICAgICAgcHJvZ3JhbS5wYXJzZXIo
c3VicGFyc2VyLCBsb2dnZXJzPWxvZ2dlcnMpCkBAIC0xOTUsNCArMTk3LDQgQEAgZGVmIG1haW4o
YXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogICAgIGVsc2U6CiAgICAgICAgIHJlcG9z
aXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2VkLnJlcG9zaXRvcnksIGNvbnRy
aWJ1dG9ycz1jb250cmlidXRvcnMpCiAKLSAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJz
ZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkKKyAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1w
YXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1pZGVudGlm
aWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9f
X2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1
YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGFyZ3VtZW50
cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZworZnJvbSB3
ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3MgQ2Fub25pY2FsaXpl
KENvbW1hbmQpOgorICAgIG5hbWUgPSAnY2Fub25pY2FsaXplJworICAgIGhlbHAgPSAnVGFrZSB0
aGUgc2V0IG9mIGNvbW1pdHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gcHVzaGVkIGFuZCBlZGl0
IGhpc3RvcnkgdG8gbm9ybWFsaXplIHRoZSAnICtcCisgICAgICAgICAgICdjb21taXR0ZXJzIHdp
dGggZXhpc3RpbmcgY29udHJpYnV0b3IgbWFwcGluZyBhbmQgYWRkIGlkZW50aWZpZXJzIHRvIGNv
bW1pdCBtZXNzYWdlcycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBw
YXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0gYXJndW1lbnRzLkxv
Z2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9n
Z2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBgZ2l0IHJl
YmFzZWAgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApCisgICAgICAgIG91dHB1dF9h
cmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWlkZW50aWZpZXInLCAnLS1uby1pZGVu
dGlmaWVyJywKKyAgICAgICAgICAgIGhlbHA9J0FkZCBpbiB0aGUgaWRlbnRpZmllciB0byBjb21t
aXQgbWVzc2FnZXMsIHRydWUgYnkgZGVmYXVsdCcsCisgICAgICAgICAgICBhY3Rpb249YXJndW1l
bnRzLk5vQWN0aW9uLAorICAgICAgICAgICAgZGVzdD0naWRlbnRpZmllcicsCisgICAgICAgICAg
ICBkZWZhdWx0PVRydWUsCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3Vt
ZW50KAorICAgICAgICAgICAgJy0tcmVtb3RlJywKKyAgICAgICAgICAgIGhlbHA9J0NvbXBhcmUg
YWdhaW5zdCBhIGRpZmZlcmVudCByZW1vdGUnLAorICAgICAgICAgICAgZGVzdD0ncmVtb3RlJywK
KyAgICAgICAgICAgIGRlZmF1bHQ9J29yaWdpbicsCisgICAgICAgICkKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1w
bGF0ZT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LnBhdGg6Cisg
ICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdDYW5ub3QgY2Fub25pY2FsaXplIGNvbW1pdHMg
b24gYSByZW1vdGUgcmVwb3NpdG9yeVxuJykKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAg
IGlmIG5vdCByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
J0NvbW1pdHMgY2FuIG9ubHkgYmUgY2Fub25pY2FsaXplZCBvbiBhIEdpdCByZXBvc2l0b3J5XG4n
KQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBicmFuY2ggPSByZXBvc2l0b3J5LmJy
YW5jaAorICAgICAgICBpZiBub3QgYnJhbmNoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgnRmFpbGVkIHRvIGRldGVybWluZSBjdXJyZW50IGJyYW5jaFxuJykKKyAgICAgICAgICAgIHJl
dHVybiAtMQorICAgICAgICByZXN1bHQgPSBydW4oWworICAgICAgICAgICAgcmVwb3NpdG9yeS5l
eGVjdXRhYmxlKCksICdyZXYtbGlzdCcsCisgICAgICAgICAgICAnLS1jb3VudCcsICctLW5vLW1l
cmdlcycsCisgICAgICAgICAgICAne3JlbW90ZX0ve2JyYW5jaH0uLnticmFuY2h9Jy5mb3JtYXQo
cmVtb3RlPWFyZ3MucmVtb3RlLCBicmFuY2g9YnJhbmNoKSwKKyAgICAgICAgXSwgY2FwdHVyZV9v
dXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucGF0aCkKKyAgICAgICAgaWYgcmVzdWx0LnJldHVy
bmNvZGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZmluZCBsb2Nh
bCBjb21taXRzXG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGRpZmZlcmVuY2Ug
PSBpbnQocmVzdWx0LnN0ZG91dC5yc3RyaXAoKSkKKyAgICAgICAgaWYgZGlmZmVyZW5jZSA8PSAw
OgorICAgICAgICAgICAgcHJpbnQoJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRpdGVkJykKKyAg
ICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGxvZy53YXJuaW5nKCd7fSB0byBiZSBlZGl0dGVk
Li4uJy5mb3JtYXQoc3RyaW5nX3V0aWxzLnBsdXJhbGl6ZShkaWZmZXJlbmNlLCAnY29tbWl0Jykp
KQorCisgICAgICAgIGJhc2UgPSByZXBvc2l0b3J5LmZpbmQoJ3t9fnt9Jy5mb3JtYXQoYnJhbmNo
LCBkaWZmZXJlbmNlKSkKKyAgICAgICAgbG9nLmluZm8oJ0Jhc2UgY29tbWl0IGlzIHt9IChyZWYg
e30pJy5mb3JtYXQoYmFzZSwgYmFzZS5oYXNoKSkKKworICAgICAgICBsb2cuZGVidWcoJ1Nhdmlu
ZyBjb250cmlidXRvcnMgdG8gdGVtcCBmaWxlIHRvIGJlIHBpY2tlZCB1cCBieSBjaGlsZCBwcm9j
ZXNzZXMnKQorICAgICAgICBjb250cmlidXRvcnMgPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0
dGVtcGRpcigpLCAne30tY29udHJpYnV0b3JzLmpzb24nLmZvcm1hdChvcy5nZXRwaWQoKSkpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihjb250cmlidXRvcnMsICd3JykgYXMg
ZmlsZToKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmNvbnRyaWJ1dG9ycy5zYXZlKGZpbGUp
CisKKyAgICAgICAgICAgIG1lc3NhZ2VfZmlsdGVyID0gWworICAgICAgICAgICAgICAgICctLW1z
Zy1maWx0ZXInLAorICAgICAgICAgICAgICAgICd7fSB7fSB7fScuZm9ybWF0KAorICAgICAgICAg
ICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5q
b2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNzYWdlLnB5JyksCisgICAgICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3IgJ3t9JywKKyAgICAgICAgICAgICAgICAp
LAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZpZXIgZWxzZSBbXQorCisgICAgICAgICAg
ICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBkZXZudWxsOgorICAgICAgICAgICAgICAg
IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnku
ZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICctZicsCisgICAgICAgICAgICAgICAgICAg
ICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21lc3NhZ2V9Citjb21taXR0ZXJPdXRwdXQ9
JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJpYnV0b3JfanNvbn0pCitLRVk9JycKK1ZB
TFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0cHV0OyBkbworICAgIGlmIFtbICR3b3Jk
ID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBpZiBbWyAkS0VZID09IEdJVF8qIF1dIDsgdGhl
bgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0KKyAgICAgICAgICAgIHByaW50ZiAtdiAk
S0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIKKyAgICAgICAgICAgIEtFWT0n
JworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFtbICIk
S0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAgS0VZPSIkd29yZCIKKyAgICBlbHNlCisgICAg
ICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAgZmkKK2RvbmUKK2lmIFtbICRLRVkgPT0gR0lU
XyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVzc2FnZX0KKyAgICBwcmludGYgLXYgJEtFWSAi
JHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0iCitmaScnJy5mb3JtYXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dn
aW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcgJEdJVF9DT01NSVQiJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0b3Jf
anNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nX21lc3Nh
Z2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJVRyBlbHNlICdlY2hvICIgICAgJEtFWT0k
VkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBdICsgbWVz
c2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChicmFuY2gsIGJhc2UuaGFzaCldLAorICAg
ICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5wYXRoLAorICAgICAgICAgICAgICAgICAg
ICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hfV0FSTklORyc6ICcxJywgJ1BZVEhPTlBBVEgn
OiAnOicuam9pbihzeXMucGF0aCl9LAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVs
bCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAorICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxz
ZSBOb25lLAorICAgICAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5D
YWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQg
dG8gbW9kaWZ5IGxvY2FsIGNvbW1pdCBtZXNzYWdlc1xuJykKKyAgICAgICAgICAgIHJldHVybiAt
MQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUoY29udHJpYnV0b3Jz
KQorCisgICAgICAgIHByaW50KCd7fSBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCEnLmZvcm1h
dChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZlcmVuY2UsICdjb21taXQnKSkpCisKKyAgICAg
ICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL2Nv
bW1pdHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0
IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuCitmcm9tIHdlYmtpdHNjbXB5IGlt
cG9ydCBDb250cmlidXRvciwgbG9jYWwKKworRU1BSUxfUkUgPSByZS5jb21waWxlKHInKD9QPGVt
YWlsPlteQF0rQFteQF0rKShALiopPycpCisKKworZGVmIGNhbm9uaWNhbGl6ZShuYW1lLCBlbWFp
bCwgY29udHJpYnV0b3JzKToKKyAgICBtYXRjaCA9IEVNQUlMX1JFLm1hdGNoKGVtYWlsKQorICAg
IGlmIG1hdGNoOgorICAgICAgICBlbWFpbCA9IG1hdGNoLmdyb3VwKCdlbWFpbCcpCisKKyAgICBj
b250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQoZW1haWwsIGNvbnRyaWJ1dG9ycy5nZXQoZW1h
aWwubG93ZXIoKSkpCisgICAgaWYgY29udHJpYnV0b3I6CisgICAgICAgIHJldHVybiBjb250cmli
dXRvci5uYW1lLCBlbWFpbCBpZiBtYXRjaCBlbHNlIGNvbnRyaWJ1dG9yLmVtYWlsCisgICAgY29u
dHJpYnV0b3IgPSBjb250cmlidXRvcnMuZ2V0KG5hbWUpCisgICAgaWYgY29udHJpYnV0b3I6Cisg
ICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBjb250cmlidXRvci5lbWFpbAorICAgIHJl
dHVybiBuYW1lLCBlbWFpbAorCisKK2RlZiBtYWluKGNvbnRyaWJ1dG9yX2ZpbGUpOgorICAgIFJF
UE9TSVRPUllfUEFUSCA9IG9zLmVudmlyb24uZ2V0KCdPTERQV0QnKQorICAgIEdJVF9DT01NSVQg
PSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVCcpCisKKyAgICB3aXRoIG9wZW4oY29udHJpYnV0
b3JfZmlsZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICBjb250cmlidXRvcnMgPSBDb250cmlidXRv
ci5NYXBwaW5nLmxvYWQoZmlsZSkKKworICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0gY2Fub25p
Y2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9OQU1FJywgJ1Vua25v
d24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJVF9BVVRIT1JfRU1BSUwnLCAnbnVsbCcp
LAorICAgICAgICBjb250cmlidXRvcnMsCisgICAgKQorICAgIGNvbW1pdHRlciwgY29tbWl0dGVy
X2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1J
VFRFUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJVF9DT01N
SVRURVJfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAgKQorCisg
ICAgIyBBdHRlbXB0IHRvIGV4dHJhY3QgcGF0Y2gtYnkKKyAgICBpZiBhdXRob3JfZW1haWwgPT0g
Y29tbWl0dGVyX2VtYWlsIGFuZCBSRVBPU0lUT1JZX1BBVEggYW5kIEdJVF9DT01NSVQ6CisgICAg
ICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgIFtsb2NhbC5HaXQuZXhlY3V0YWJsZSgpLCAnbG9n
JywgR0lUX0NPTU1JVCwgJy0xJ10sCisgICAgICAgICAgICBjd2Q9UkVQT1NJVE9SWV9QQVRILCBj
YXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnLAorICAgICAgICApCisKKyAgICAg
ICAgcGF0Y2hfYnkgPSByZS5zZWFyY2goCisgICAgICAgICAgICByJ1xzK1BhdGNoIGJ5ICg/UDxh
dXRob3I+W148XSspIFw8KD9QPGVtYWlsPltePF0rKVw+Liogb24gXGQrLVxkKy1cZCsnLAorICAg
ICAgICAgICAgbG9nLnN0ZG91dCwKKyAgICAgICAgKQorICAgICAgICBpZiBwYXRjaF9ieToKKyAg
ICAgICAgICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICAg
ICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdhdXRob3InKSwKKyAgICAgICAgICAgICAgICBwYXRjaF9i
eS5ncm91cCgnZW1haWwnKSwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnMsCisgICAgICAg
ICAgICApCisKKyAgICBwcmludCgnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9yKSkK
KyAgICBwcmludCgnR0lUX0FVVEhPUl9FTUFJTCB7fScuZm9ybWF0KGF1dGhvcl9lbWFpbCkpCisg
ICAgcHJpbnQoJ0dJVF9DT01NSVRURVJfTkFNRSB7fScuZm9ybWF0KGNvbW1pdHRlcikpCisgICAg
cHJpbnQoJ0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1haWwpKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJn
dlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2Nt
cHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2RlZiBtYWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90
ZW1wbGF0ZSk6CisgICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcp
CisgICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlm
IG5vdCBSRVBPU0lUT1JZX1BBVEg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0
byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhcbicpCisgICAgICAgIHJldHVybiAtMQorICAgIGlm
IG5vdCBHSVRfQ09NTUlUOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0
cmlldmUgZ2l0IGhhc2hcbicpCisgICAgICAgIHJldHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9
IEdpdChSRVBPU0lUT1JZX1BBVEgpCisgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFz
aD1HSVRfQ09NTUlUKQorICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09N
TUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisgICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9y
IG5vdCBjb21taXQuYnJhbmNoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8g
Y29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAg
ICAgICByZXR1cm4gLTEKKworICAgIGxpbmVzID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZp
bGUucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisg
ICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihsaW5lcykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4
IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAg
ICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCisKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBs
aW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aCgnSWRlbnRpZmllcjogJyk6Cisg
ICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXggLSAxXSA9ICdJZGVudGlmaWVyOiB7fScuZm9y
bWF0KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkpCisgICAgZWxzZToKKyAgICAg
ICAgbGluZXMuaW5zZXJ0KGlkZW50aWZpZXJfaW5kZXgsICdJZGVudGlmaWVyOiB7fScuZm9ybWF0
KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkpKQorCisgICAgZm9yIGxpbmUgaW4g
bGluZXM6CisgICAgICAgIHByaW50KGxpbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5zdGRpbiwgc3lzLmFyZ3ZbMV0pKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwv
Z2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjcwOTU4KQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwv
Z2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQCBpbXBvcnQgb3MKIGltcG9y
dCByZQogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQotZnJvbSB3ZWJraXRjb3JlcHkg
aW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MsIE91dHB1dENhcHR1
cmUsIFN0cmluZ0lPCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgQ29tbWl0LCBDb250
cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUuY29tbWl0dGVyIGltcG9ydCBt
YWluIGFzIGNvbW1pdHRlcl9tYWluCitmcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZS5tZXNz
YWdlIGltcG9ydCBtYWluIGFzIG1lc3NhZ2VfbWFpbgogCiAKIGNsYXNzIEdpdChtb2Nrcy5TdWJw
cm9jZXNzKToKQEAgLTU4LDYgKzYwLDcgQEAgY2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgog
ICAgICAgICAgICAgICAgICAgICBjb21taXQucmV2aXNpb24gPSBOb25lCiAKICAgICAgICAgc2Vs
Zi5oZWFkID0gc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdWy0xXQorICAgICAgICBz
ZWxmLnJlbW90ZXMgPSB7J29yaWdpbi97fScuZm9ybWF0KGJyYW5jaCk6IGNvbW1pdHNbLTFdIGZv
ciBicmFuY2gsIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLml0ZW1zKCl9CiAgICAgICAgIHNlbGYu
dGFncyA9IHt9CiAKICAgICAgICAgaWYgZ2l0X3N2bjoKQEAgLTIzMyw2ICsyMzYsMTQgQEAgbm90
aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgogICAgICAgICAgICAgICAgIGdlbmVy
YXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOgogICAgICAgICAgICAgICAgICAgICBtb2Nrcy5Q
cm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTApIGlmIHNlbGYuY2hlY2tvdXQoYXJnc1syXSkg
ZWxzZSBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEpCiAgICAgICAgICAgICAp
LCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJs
ZSwgJ2ZpbHRlci1icmFuY2gnLCAnLWYnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgs
CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHNlbGYu
ZmlsdGVyX2JyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgYXJnc1stMV0sCisgICAgICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9JyAnLmpvaW4oYXJnc1stMl0uc3BsaXQoJyAn
KVsyOl0pIGlmIGFyZ3NbLTNdID09ICctLW1zZy1maWx0ZXInIGVsc2UgTm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgZW52aXJvbm1lbnRfc2hlbGw9YXJnc1s0XSBpZiBhcmdzWzNdID09ICctLWVu
di1maWx0ZXInIGFuZCBhcmdzWzRdIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICApCisgICAg
ICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIHNlbGYu
ZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCkBAIC0yNjUsMTYgKzI3Niwy
MiBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1bZm91bmQuYnJh
bmNoX3BvaW50IC0gZGlmZmVyZW5jZSAtIDFdCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAorICAgICAgICBzb21ldGhpbmcgPSBzdHIoc29tZXRoaW5nKQorICAgICAgICBpZiAnLi4nIGlu
IHNvbWV0aGluZzoKKyAgICAgICAgICAgIGEsIGIgPSBzb21ldGhpbmcuc3BsaXQoJy4uJykKKyAg
ICAgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkKKyAgICAgICAgICAgIGIgPSBzZWxmLmZpbmQoYikK
KyAgICAgICAgICAgIHJldHVybiBiIGlmIGEgYW5kIGIgZWxzZSBOb25lCisKICAgICAgICAgaWYg
c29tZXRoaW5nID09ICdIRUFEJzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLmhlYWQKICAgICAg
ICAgaWYgc29tZXRoaW5nIGluIHNlbGYuY29tbWl0cy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3NvbWV0aGluZ11bLTFdCiAgICAgICAgIGlmIHNvbWV0aGluZyBpbiBz
ZWxmLnRhZ3Mua2V5cygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFnc1tzb21ldGhpbmdd
CisgICAgICAgIGlmIHNvbWV0aGluZyBpbiBzZWxmLnJlbW90ZXMua2V5cygpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYucmVtb3Rlc1tzb21ldGhpbmddCiAKLSAgICAgICAgc29tZXRoaW5nID0g
c3RyKHNvbWV0aGluZykKLSAgICAgICAgaWYgJy4uJyBpbiBzb21ldGhpbmc6Ci0gICAgICAgICAg
ICBzb21ldGhpbmcgPSBzb21ldGhpbmcuc3BsaXQoJy4uJylbMV0KICAgICAgICAgZm9yIGJyYW5j
aCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGJyYW5j
aCA9PSBzb21ldGhpbmc6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHNbLTFdCkBAIC0y
ODYsMTAgKzMwMywxNiBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAg
ICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgY291bnQoc2VsZiwgc29tZXRoaW5nKToKLSAg
ICAgICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRoaW5nKQotICAgICAgICBpZiAnLi4nIGluIHNv
bWV0aGluZyBvciBub3QgbWF0Y2guYnJhbmNoX3BvaW50OgotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoLmlkZW50aWZpZXIKLSAgICAgICAgcmV0dXJuIG1hdGNoLmJyYW5jaF9wb2ludCArIG1hdGNo
LmlkZW50aWZpZXIKKyAgICAgICAgaWYgJy4uJyBub3QgaW4gc29tZXRoaW5nOgorICAgICAgICAg
ICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRoaW5nKQorICAgICAgICAgICAgcmV0dXJuIChtYXRj
aC5icmFuY2hfcG9pbnQgb3IgMCkgKyBtYXRjaC5pZGVudGlmaWVyCisKKyAgICAgICAgYSwgYiA9
IHNvbWV0aGluZy5zcGxpdCgnLi4nKQorICAgICAgICBhID0gc2VsZi5maW5kKGEpCisgICAgICAg
IGIgPSBzZWxmLmZpbmQoYikKKyAgICAgICAgaWYgYS5icmFuY2hfcG9pbnQgPT0gYi5icmFuY2hf
cG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gYWJzKGIuaWRlbnRpZmllciAtIGEuaWRlbnRpZmll
cikKKyAgICAgICAgcmV0dXJuIGIuaWRlbnRpZmllcgogCiAgICAgZGVmIGJyYW5jaGVzX29uKHNl
bGYsIGhhc2gpOgogICAgICAgICByZXN1bHQgPSBzZXQoKQpAQCAtMzEzLDMgKzMzNiw4OSBAQCBu
b3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICBzZWxmLmhl
YWQgPSBjb21taXQKICAgICAgICAgICAgIHNlbGYuZGV0YWNoZWQgPSBzb21ldGhpbmcgbm90IGlu
IHNlbGYuY29tbWl0cy5rZXlzKCkKICAgICAgICAgcmV0dXJuIFRydWUgaWYgY29tbWl0IGVsc2Ug
RmFsc2UKKworICAgIGRlZiBmaWx0ZXJfYnJhbmNoKHNlbGYsIHJhbmdlLCBpZGVudGlmaWVyX3Rl
bXBsYXRlPU5vbmUsIGVudmlyb25tZW50X3NoZWxsPU5vbmUpOgorICAgICAgICAjIFdlIGNhbid0
IGVmZmVjdGl2ZWx5IG1vY2sgdGhlIGJhc2ggc2NyaXB0IGluIHRoZSBjb21tYW5kLCBidXQgd2Ug
Y2FuIG1vY2sgdGhlIHB5dGhvbiBjb2RlIHRoYXQKKyAgICAgICAgIyBzY3JpcHQgY2FsbHMsIHdo
aWNoIGlzIHdoZXJlIHRoZSBwcm9ncmFtIGxvZ2ljIGlzLgorICAgICAgICBoZWFkLCBzdGFydCA9
IHJhbmdlLnNwbGl0KCcuLi4nKQorICAgICAgICBoZWFkID0gc2VsZi5maW5kKGhlYWQpCisgICAg
ICAgIHN0YXJ0ID0gc2VsZi5maW5kKHN0YXJ0KQorCisgICAgICAgIGNvbW1pdHNfdG9fZWRpdCA9
IFtdCisgICAgICAgIGZvciBjb21taXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzW2hlYWQuYnJh
bmNoXSk6CisgICAgICAgICAgICBpZiBjb21taXQuYnJhbmNoID09IHN0YXJ0LmJyYW5jaCBhbmQg
Y29tbWl0LmlkZW50aWZpZXIgPD0gc3RhcnQuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgY29tbWl0c190b19lZGl0Lmluc2VydCgwLCBjb21taXQpCisgICAg
ICAgIGlmIGhlYWQuYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICBm
b3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVs6
aGVhZC5icmFuY2hfcG9pbnRdKToKKyAgICAgICAgICAgICAgICBpZiBjb21taXQuaWRlbnRpZmll
ciA8PSBzdGFydC5pZGVudGlmaWVyOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIGNvbW1pdHNfdG9fZWRpdC5pbnNlcnQoMCwgY29tbWl0KQorCisgICAgICAgIHN0
ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgb3JpZ2luYWxfZW52ID0ge2tleTogb3MuZW52aXJv
bi5nZXQoJ09MRFBXRCcpIGZvciBrZXkgaW4gWworICAgICAgICAgICAgJ09MRFBXRCcsICdHSVRf
Q09NTUlUJywKKyAgICAgICAgICAgICdHSVRfQVVUSE9SX05BTUUnLCAnR0lUX0FVVEhPUl9FTUFJ
TCcsCisgICAgICAgICAgICAnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ0dJVF9DT01NSVRURVJfRU1B
SUwnLAorICAgICAgICBdfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvdW50ID0gMAor
ICAgICAgICAgICAgb3MuZW52aXJvblsnT0xEUFdEJ10gPSBzZWxmLnBhdGgKKyAgICAgICAgICAg
IGZvciBjb21taXQgaW4gY29tbWl0c190b19lZGl0OgorICAgICAgICAgICAgICAgIGNvdW50ICs9
IDEKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09NTUlUJ10gPSBjb21taXQuaGFz
aAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9BVVRIT1JfTkFNRSddID0gY29tbWl0
LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJ
TCddID0gY29tbWl0LmF1dGhvci5lbWFpbAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJ
VF9DT01NSVRURVJfTkFNRSddID0gY29tbWl0LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAg
b3MuZW52aXJvblsnR0lUX0NPTU1JVFRFUl9FTUFJTCddID0gY29tbWl0LmF1dGhvci5lbWFpbAor
CisgICAgICAgICAgICAgICAgc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAnUmV3
cml0ZSB7aGFzaH0gKHtjb3VudH0ve3RvdGFsfSkgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWlu
aW5nIC0tLSBwcmVkaWN0ZWQpXG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
c2g9Y29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1jb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsPWxlbihjb21taXRzX3RvX2VkaXQpLAorICAgICAg
ICAgICAgICAgICAgICApKQorCisgICAgICAgICAgICAgICAgaWYgaWRlbnRpZmllcl90ZW1wbGF0
ZToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWZpbGUgPSBTdHJpbmdJTygpCisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VmaWxlLndyaXRlKGNvbW1pdC5tZXNzYWdlKQorICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlZmlsZS5zZWVrKDApCisgICAgICAgICAgICAgICAgICAgIHdpdGgg
T3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZV9tYWluKG1lc3NhZ2VmaWxlLCBpZGVudGlmaWVyX3RlbXBsYXRlKQorICAgICAgICAgICAg
ICAgICAgICBsaW5lcyA9IGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQor
ICAgICAgICAgICAgICAgICAgICBpZiBsaW5lc1stMV0uc3RhcnRzd2l0aCgnZ2l0LXN2bi1pZDog
aHR0cHM6Ly9zdm4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnBvcCgtMSkKKyAg
ICAgICAgICAgICAgICAgICAgY29tbWl0Lm1lc3NhZ2UgPSAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICAgICAgICAgICAgICBpZiBub3QgZW52aXJvbm1lbnRfc2hlbGw6CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHInZWNobyAiT3Zlcndy
aXRpbmcnLCBlbnZpcm9ubWVudF9zaGVsbCk6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dC53
cml0ZSgnT3ZlcndyaXRpbmcge31cbicuZm9ybWF0KGNvbW1pdC5oYXNoKSkKKworICAgICAgICAg
ICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKD9QPGpzb24+XFMrXC5qc29uKScsIGVudmlyb25t
ZW50X3NoZWxsKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAg
ICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHRlcl9tYWluKG1hdGNoLmdyb3VwKCdqc29uJykpCisgICAgICAgICAgICAgICAg
ICAgIGNhcHR1cmVkLnN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5l
IGluIGNhcHR1cmVkLnN0ZG91dC5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9u
W2xpbmUuc3BsaXQoJyAnKVswXV0gPSAnICcuam9pbihsaW5lLnNwbGl0KCcgJylbMTpdKQorCisg
ICAgICAgICAgICAgICAgY29tbWl0LmF1dGhvciA9IENvbnRyaWJ1dG9yKG5hbWU9b3MuZW52aXJv
blsnR0lUX0FVVEhPUl9OQU1FJ10sIGVtYWlscz1bb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJ
TCddXSkKKworICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChyJ2VjaG8gIlxzKycsIGVudmly
b25tZW50X3NoZWxsKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBbJ0dJVF9BVVRI
T1JfTkFNRScsICdHSVRfQVVUSE9SX0VNQUlMJywgJ0dJVF9DT01NSVRURVJfTkFNRScsICdHSVRf
Q09NTUlUVEVSX0VNQUlMJ106CisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQud3JpdGUo
JyAgICB7fT17fVxuJy5mb3JtYXQoa2V5LCBvcy5lbnZpcm9uW2tleV0pKQorCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcmlnaW5hbF9lbnYuaXRlbXMo
KToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICAgICAgcmV0dXJuIG1v
Y2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAg
ICAgICAgc3Rkb3V0PXN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICApCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6
ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVu
aXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdl
YmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBNb2NrVGltZQorZnJvbSB3ZWJraXRzY21w
eSBpbXBvcnQgcHJvZ3JhbSwgbW9ja3MsIGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9yCisKKwor
Y2xhc3MgVGVzdENhbm9uaWNhbGl6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcv
bW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAg
d2l0aCBPdXRwdXRDYXB0dXJlKCksIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4o
c2VsZi5wYXRoKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHBy
b2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywpLAorICAg
ICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgKSkKKworICAgIGRlZiB0
ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNh
cHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1v
Y2tUaW1lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisg
ICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsKSwKKyAgICAgICAgICAgICAgICBw
YXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRp
dGVkXG4nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0ZWRfaWRlbnRpZmllcihzZWxmKToKKyAgICAg
ICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxm
LnBhdGgpIGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKKyAgICAgICAgICAg
IGNvbnRpcmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcoKQorICAgICAgICAgICAgY29udGly
YnV0b3JzLmNyZWF0ZSgnSm9uYXRoYW4gQmVkYXJkJywgJ2piZWRhcmRAYXBwbGUuY29tJykKKwor
ICAgICAgICAgICAgbW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdLmFwcGVuZChDb21t
aXQoCisgICAgICAgICAgICAgICAgaGFzaD0nMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIx
ZjFjMjYyODcxZicsCisgICAgICAgICAgICAgICAgYnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gs
CisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScs
IGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXI9bW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdWy0xXS5pZGVudGlmaWVyICsgMSwK
KyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2ODAwMCwKKyAgICAgICAgICAgICAgICBt
ZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nh
bm9uaWNhbGl6ZScsICctdicsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAg
ICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgICAg
IGlkZW50aWZpZXJfdGVtcGxhdGU9J2h0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3t9JywKKyAg
ICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9IGxvY2FsLkdpdChzZWxmLnBhdGgp
LmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxlLmNvbSdd
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQubWVzc2FnZSwgJ05ldyBjb21t
aXRcbklkZW50aWZpZXI6IGh0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnLzVAbWFpbicpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2
YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNm
YjIxZjFjMjYyODcxZiAoMS8xKSAoLS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHBy
ZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGluZyAzOGVhNTBkMjhhZTM5NGM5Yzhi
ODBlMTNjM2ZiMjFmMWMyNjI4NzFmXG4nCisgICAgICAgICAgICAnMSBjb21taXQgc3VjY2Vzc2Z1
bGx5IGNhbm9uaWNhbGl6ZWQhXG4nLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9naXRfc3Zu
KHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3Mu
bG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBjb250aXJidXRvcnMgPSBDb250cmlidXRvci5N
YXBwaW5nKCkKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFy
ZCcsICdqYmVkYXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1ttb2Nr
LmRlZmF1bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9Jzc2
NjYwOTI3NmZlMjAxZTdjZTJjNjk5OTRlMTEzZDk3OWQyMTQ4YWMnLAorICAgICAgICAgICAgICAg
IGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250
cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSdd
KSwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRf
YnJhbmNoXVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2
MDE2NjgwMDAsCisgICAgICAgICAgICAgICAgcmV2aXNpb249OSwKKyAgICAgICAgICAgICAgICBt
ZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nh
bm9uaWNhbGl6ZScsICctdnYnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAg
ICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgKSkK
KworICAgICAgICAgICAgY29tbWl0ID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5j
aD1tb2NrLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXQuYXV0aG9yLCBjb250aXJidXRvcnNbJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvbW1pdC5tZXNzYWdlLAorICAg
ICAgICAgICAgICAgICdOZXcgY29tbWl0XG4nCisgICAgICAgICAgICAgICAgJ0lkZW50aWZpZXI6
IDVAbWFpblxuJworICAgICAgICAgICAgICAgICdzdm4taWQ6IGh0dHBzOi8vc3ZuLmV4YW1wbGUu
b3JnL3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVua0A5IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNj
LWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAg
J1Jld3JpdGUgNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2OTk5NGUxMTNkOTc5ZDIxNDhhYyAoMS8xKSAo
LS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAg
ICAgICdPdmVyd3JpdGluZyA3NjY2MDkyNzZmZTIwMWU3Y2UyYzY5OTk0ZTExM2Q5NzlkMjE0OGFj
XG4nCisgICAgICAgICAgICAnICAgIEdJVF9BVVRIT1JfTkFNRT1Kb25hdGhhbiBCZWRhcmRcbicK
KyAgICAgICAgICAgICcgICAgR0lUX0FVVEhPUl9FTUFJTD1qYmVkYXJkQGFwcGxlLmNvbVxuJwor
ICAgICAgICAgICAgJyAgICBHSVRfQ09NTUlUVEVSX05BTUU9Sm9uYXRoYW4gQmVkYXJkXG4nCisg
ICAgICAgICAgICAnICAgIEdJVF9DT01NSVRURVJfRU1BSUw9amJlZGFyZEBhcHBsZS5jb21cbicK
KyAgICAgICAgICAgICcxIGNvbW1pdCBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisg
ICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JyYW5jaF9jb21taXRzKHNlbGYpOgorICAgICAgICB3
aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0
aCkgYXMgbW9jaywgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgY29u
dGlyYnV0b3JzID0gQ29udHJpYnV0b3IuTWFwcGluZygpCisgICAgICAgICAgICBjb250aXJidXRv
cnMuY3JlYXRlKCdKb25hdGhhbiBCZWRhcmQnLCAnamJlZGFyZEBhcHBsZS5jb20nKQorCisgICAg
ICAgICAgICBsb2NhbC5HaXQoc2VsZi5wYXRoKS5jaGVja291dCgnYnJhbmNoLWEnKQorICAgICAg
ICAgICAgbW9jay5jb21taXRzWydicmFuY2gtYSddLmFwcGVuZChDb21taXQoCisgICAgICAgICAg
ICAgICAgaGFzaD0nZjkzMTM4ZTNiZjFkNWVjY2EyNWZjMDg0NGI3YTJhNzhiOGUwMGFhZScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSdicmFuY2gtYScsCisgICAgICAgICAgICAgICAgYXV0aG9y
PUNvbnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUu
Y29tJ10pLAorICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludD1tb2NrLmNvbW1pdHNbJ2JyYW5j
aC1hJ11bLTFdLmJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2su
Y29tbWl0c1snYnJhbmNoLWEnXVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAg
dGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1p
dCAxXG4nLAorICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1snYnJhbmNo
LWEnXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9JzAxNDhjMGRmMGZhZjI0
OGFhMTMzZDZkNWFkOTExZDdjYjFiNTZhNWInLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nYnJh
bmNoLWEnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBs
ZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBi
cmFuY2hfcG9pbnQ9bW9jay5jb21taXRzWydicmFuY2gtYSddWy0xXS5icmFuY2hfcG9pbnQsCisg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmlk
ZW50aWZpZXIgKyAxLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY5MDAwLAorICAg
ICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBjb21taXQgMlxuJywKKyAgICAgICAgICAgICkpCisK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAg
ICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCApLAorICAgICAgICAgICAgICAgIHBhdGg9c2Vs
Zi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250aXJidXRvcnMsCisgICAg
ICAgICAgICApKQorCisgICAgICAgICAgICBjb21taXRfYSA9IGxvY2FsLkdpdChzZWxmLnBhdGgp
LmNvbW1pdChicmFuY2g9J2JyYW5jaC1hfjEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb21taXRfYS5hdXRob3IsIGNvbnRpcmJ1dG9yc1snamJlZGFyZEBhcHBsZS5jb20nXSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0X2EubWVzc2FnZSwgJ05ldyBjb21taXQg
MVxuSWRlbnRpZmllcjogMi4zQGJyYW5jaC1hJykKKworICAgICAgICAgICAgY29tbWl0X2IgPSBs
b2NhbC5HaXQoc2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPSdicmFuY2gtYScpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9iLmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJk
QGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYi5tZXNz
YWdlLCAnTmV3IGNvbW1pdCAyXG5JZGVudGlmaWVyOiAyLjRAYnJhbmNoLWEnKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUo
KSwKKyAgICAgICAgICAgICdSZXdyaXRlIGY5MzEzOGUzYmYxZDVlY2NhMjVmYzA4NDRiN2EyYTc4
YjhlMDBhYWUgKDEvMikgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0
ZWQpXG4nCisgICAgICAgICAgICAnUmV3cml0ZSAwMTQ4YzBkZjBmYWYyNDhhYTEzM2Q2ZDVhZDkx
MWQ3Y2IxYjU2YTViICgyLzIpICgtLS0gc2Vjb25kcyBwYXNzZWQsIHJlbWFpbmluZyAtLS0gcHJl
ZGljdGVkKVxuJworICAgICAgICAgICAgJzIgY29tbWl0cyBzdWNjZXNzZnVsbHkgY2Fub25pY2Fs
aXplZCFcbicsCisgICAgICAgICkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416542</attachid>
            <date>2020-12-18 13:43:14 -0800</date>
            <delta_ts>2020-12-18 14:00:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201218154313.patch</filename>
            <type>text/plain</type>
            <size>38403</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDk2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBjYW5vbmljYWwgaWRlbnRpZmllciB0cmFu
c2xhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5w
eTogQWRkIGNhbm9uaWNhbGl6ZSBkaXJlY3RvcnkgdG8gcGFja2FnZS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2
ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2Nhbm9uaWNhbGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKENhbm9uaWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVk
IGNvbW1pdHMgb24gYSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAg
ICAgICAgKENhbm9uaWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVk
aXQgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29t
bWl0cy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6
ZSk6IEdpdmVuIGEgbmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJu
IGEgY2Fub25pY2FsIG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9y
IG9yIGNvbW1pdHRlci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBh
dXRob3IgYW5kIGNvbW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBjYW5v
bmljYWwgaWRlbnRpZmllciB0byBhIGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5OgorICAgICAg
ICAoQ29udHJpYnV0b3IpOiBBZGQgdW5rbm93biBhdXRob3IgcmVnZXguCisgICAgICAgIChDb250
cmlidXRvci5mcm9tX3NjbV9sb2cpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5fX2lu
aXRfXyk6IEFkZCBgZ2l0IGZpbHRlci1icmFuY2hgIG1vY2suIE5vdGUgdGhhdCB0aGlzIG1vY2sg
bWFrZXMgYW4gZWZmb3J0IHRvIHRlc3QKKyAgICAgICAgbWVzc2FnZS5weSBhbmQgY29udHJpYnV0
b3IucHksIGJ1dCBub3QgdGhlIHNoZWxsIHNjcmlwdCBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weToKKyAgICAgICAgKENvbW1hbmQubWFpbik6IEFjY2VwdCBhcmJpdHJhcnkgKiprd2FyZ3Mu
CisgICAgICAgIChGaW5kLm1haW4pOiBEaXR0by4KKyAgICAgICAgKENoZWNrb3V0Lm1haW4pOiBE
aXR0by4KKyAgICAgICAgKG1haW4pOiBBbGxvdyBjYWxsZXIgdG8gc3BlY2lmeSBhIHN0cmluZyB0
ZW1wbGF0ZSBmb3IgY2Fub25pY2FsIGlkZW50aWZpZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nh
bm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXpl
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9icmFuY2hfY29t
bWl0cyk6CisKIDIwMjAtMTItMTcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTjogWyBCaWdTdXIgXSAzIFBpY3R1cmVJblBpY3R1cmUgcmVsYXRl
ZCBBUEkgdGVzdHMgdGltaW5nIG91dApJbmRleDogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkocmV2aXNpb24gMjcwOTY4KQor
KysgVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw1ICs0Miw5
IEBAIGlmICdfX21haW5fXycgPT0gX19uYW1lX186CiAgICAgICAgICAgICBpZiBuaWNrIG5vdCBp
biBjb250cmlidXRvcnM6CiAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JzW25pY2tdID0gYwog
Ci0gICAgc3lzLmV4aXQocHJvZ3JhbS5tYWluKHBhdGg9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykpCisgICAgc3lzLmV4aXQocHJvZ3JhbS5tYWlu
KAorICAgICAgICBwYXRoPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgIGNvbnRy
aWJ1dG9ycz1jb250cmlidXRvcnMsCisgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J2h0dHBz
Oi8vY29tbWl0cy53ZWJraXQub3JnL3t9JywKKyAgICApKQogCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjcwOTY4KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAgc2V0dXAoCiAgICAgbGljZW5zZT0nTW9kaWZpZWQgQlNEJywK
ICAgICBwYWNrYWdlcz1bCiAgICAgICAgICd3ZWJraXRzY21weScsCisgICAgICAgICd3ZWJraXRz
Y21weS5jYW5vbmljYWxpemUnLAogICAgICAgICAnd2Via2l0c2NtcHkubG9jYWwnLAogICAgICAg
ICAnd2Via2l0c2NtcHkubW9ja3MnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MubG9jYWwn
LApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
X19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MDk2OCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAg
ICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRj
b3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12
ZXJzaW9uID0gVmVyc2lvbigwLCA2LCA0KQordmVyc2lvbiA9IFZlcnNpb24oMCwgNywgMCkKIAog
QXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZmFzdGVuZXJzJywgVmVyc2lvbigwLCAxNSwg
MCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnbW9ub3RvbmljJywgVmVyc2lvbigx
LCA1KSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jb250cmlidXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb250cmlidXRvci5weQkocmV2aXNpb24gMjcwOTY4
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29u
dHJpYnV0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IHN0cmluZ191dGlscwogY2xhc3MgQ29udHJpYnV0b3Iob2JqZWN0KToKICAg
ICBHSVRfQVVUSE9SX1JFID0gcmUuY29tcGlsZShyJ0F1dGhvcjogKD9QPGF1dGhvcj4uKikgPCg/
UDxlbWFpbD5bXkBdK0BbXkBdKykoQC4qKT8+JykKICAgICBBVVRPTUFURURfQ0hFQ0tJTl9SRSA9
IHJlLmNvbXBpbGUocidBdXRob3I6ICg/UDxhdXRob3I+LiopIDxkZXZudWxsPicpCisgICAgVU5L
Tk9XTl9BVVRIT1IgPSByZS5jb21waWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8Tm9uZT4n
KQogICAgIFNWTl9BVVRIT1JfUkUgPSByZS5jb21waWxlKHInclxkKyBcfCAoP1A8ZW1haWw+Liop
IFx8ICg/UDxkYXRlPi4qKSBcfCBcZCsgbGluZXM/JykKICAgICBTVk5fUEFUQ0hfRlJPTV9SRSA9
IHJlLmNvbXBpbGUocidQYXRjaCBieSAoP1A8YXV0aG9yPi4qKSA8KD9QPGVtYWlsPi4qKT4gb24g
XGQrLVxkKy1cZCsnKQogCkBAIC0xMTEsMTIgKzExMiwxMiBAQCBjbGFzcyBDb250cmlidXRvcihv
YmplY3QpOgogICAgICAgICBlbWFpbCA9IE5vbmUKICAgICAgICAgYXV0aG9yID0gTm9uZQogCi0g
ICAgICAgIGZvciBleHByZXNzaW9uIGluIFtjbHMuR0lUX0FVVEhPUl9SRSwgY2xzLlNWTl9BVVRI
T1JfUkUsIGNscy5TVk5fUEFUQ0hfRlJPTV9SRSwgY2xzLkFVVE9NQVRFRF9DSEVDS0lOX1JFXToK
KyAgICAgICAgZm9yIGV4cHJlc3Npb24gaW4gW2Nscy5HSVRfQVVUSE9SX1JFLCBjbHMuU1ZOX0FV
VEhPUl9SRSwgY2xzLlNWTl9QQVRDSF9GUk9NX1JFLCBjbHMuQVVUT01BVEVEX0NIRUNLSU5fUkUs
IGNscy5VTktOT1dOX0FVVEhPUl06CiAgICAgICAgICAgICBtYXRjaCA9IGV4cHJlc3Npb24ubWF0
Y2gobGluZSkKICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAgICAgIGlmICdhdXRo
b3InIGluIGV4cHJlc3Npb24uZ3JvdXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAgYXV0aG9y
ID0gbWF0Y2guZ3JvdXAoJ2F1dGhvcicpCi0gICAgICAgICAgICAgICAgICAgIGlmICcobm8gYXV0
aG9yKScgaW4gYXV0aG9yIG9yICdBdXRvbWF0ZWQgQ2hlY2tpbicgaW4gYXV0aG9yOgorICAgICAg
ICAgICAgICAgICAgICBpZiAnKG5vIGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21hdGVkIENo
ZWNraW4nIGluIGF1dGhvciBvciAnVW5rbm93bicgaW4gYXV0aG9yOgogICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0aG9yID0gTm9uZQogICAgICAgICAgICAgICAgIGlmICdlbWFpbCcgaW4gZXhw
cmVzc2lvbi5ncm91cGluZGV4OgogICAgICAgICAgICAgICAgICAgICBlbWFpbCA9IG1hdGNoLmdy
b3VwKCdlbWFpbCcpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9wcm9ncmFtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkJKHJldmlzaW9uIDI3MDk2OCkK
KysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dy
YW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgQ29tbWFuZChvYmpl
Y3QpOgogICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5v
dCBoYXZlIGEgaGVscCBtZXNzYWdlIikKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtYWlu
KGNscywgYXJncywgcmVwb3NpdG9yeSk6CisgICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0
b3J5LCAqKmt3YXJncyk6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ05vIGNvbW1hbmQgc3Bl
Y2lmaWVkXG4nKQogICAgICAgICByZXR1cm4gLTEKIApAQCAtODEsNyArODEsNyBAQCBjbGFzcyBG
aW5kKENvbW1hbmQpOgogICAgICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFp
bihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3Np
dG9yeSwgKiprd2FyZ3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb21taXQgPSByZXBv
c2l0b3J5LmZpbmQoYXJncy5hcmd1bWVudFswXSwgaW5jbHVkZV9sb2c9YXJncy5pbmNsdWRlX2xv
ZykKICAgICAgICAgZXhjZXB0IChsb2NhbC5TY20uRXhjZXB0aW9uLCBWYWx1ZUVycm9yKSBhcyBl
eGNlcHRpb246CkBAIC0xNDMsNyArMTQzLDcgQEAgY2xhc3MgQ2hlY2tvdXQoQ29tbWFuZCk6CiAg
ICAgICAgICkKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtYWluKGNscywgYXJncywgcmVw
b3NpdG9yeSk6CisgICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5LCAqKmt3YXJncyk6
CiAgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LnBhdGg6CiAgICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCJDYW5ub3QgY2hlY2tvdXQgb24gcmVtb3RlIHJlcG9zaXRvcnkiKQogICAgICAgICAg
ICAgcmV0dXJuIDEKQEAgLTE2Miw3ICsxNjIsNyBAQCBjbGFzcyBDaGVja291dChDb21tYW5kKToK
ICAgICAgICAgcmV0dXJuIDAKIAogCi1kZWYgbWFpbihhcmdzPU5vbmUsIHBhdGg9Tm9uZSwgbG9n
Z2Vycz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSk6CitkZWYgbWFpbihhcmdzPU5vbmUsIHBhdGg9
Tm9uZSwgbG9nZ2Vycz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSwgaWRlbnRpZmllcl90ZW1wbGF0
ZT1Ob25lKToKICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykK
IAogICAgIGxvZ2dlcnMgPSBbbG9nZ2luZy5nZXRMb2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywg
IGxvZ10gKyAobG9nZ2VycyBvciBbXSkKQEAgLTE4Myw3ICsxODMsOSBAQCBkZWYgbWFpbihhcmdz
PU5vbmUsIHBhdGg9Tm9uZSwgbG9nZ2Vycz1OCiAKICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFk
ZF9zdWJwYXJzZXJzKGhlbHA9J3N1Yi1jb21tYW5kIGhlbHAnKQogCi0gICAgZm9yIHByb2dyYW0g
aW4gW0ZpbmQsIENoZWNrb3V0XToKKyAgICBmcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZSBp
bXBvcnQgQ2Fub25pY2FsaXplCisKKyAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZCwgQ2hlY2tvdXQs
IENhbm9uaWNhbGl6ZV06CiAgICAgICAgIHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNl
cihwcm9ncmFtLm5hbWUsIGhlbHA9cHJvZ3JhbS5oZWxwKQogICAgICAgICBzdWJwYXJzZXIuc2V0
X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5tYWluKQogICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJw
YXJzZXIsIGxvZ2dlcnM9bG9nZ2VycykKQEAgLTE5NSw0ICsxOTcsNCBAQCBkZWYgbWFpbihhcmdz
PU5vbmUsIHBhdGg9Tm9uZSwgbG9nZ2Vycz1OCiAgICAgZWxzZToKICAgICAgICAgcmVwb3NpdG9y
eSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0aD1wYXJzZWQucmVwb3NpdG9yeSwgY29udHJpYnV0
b3JzPWNvbnRyaWJ1dG9ycykKIAotICAgIHJldHVybiBwYXJzZWQubWFpbihhcmdzPXBhcnNlZCwg
cmVwb3NpdG9yeT1yZXBvc2l0b3J5KQorICAgIHJldHVybiBwYXJzZWQubWFpbihhcmdzPXBhcnNl
ZCwgcmVwb3NpdG9yeT1yZXBvc2l0b3J5LCBpZGVudGlmaWVyX3RlbXBsYXRlPWlkZW50aWZpZXJf
dGVtcGxhdGUpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5p
dF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJv
Y2VzcworaW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBy
dW4sIHN0cmluZ191dGlscworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nCitmcm9tIHdlYmtp
dHNjbXB5LnByb2dyYW0gaW1wb3J0IENvbW1hbmQKKworCitjbGFzcyBDYW5vbmljYWxpemUoQ29t
bWFuZCk6CisgICAgbmFtZSA9ICdjYW5vbmljYWxpemUnCisgICAgaGVscCA9ICdUYWtlIHRoZSBz
ZXQgb2YgY29tbWl0cyB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbiBwdXNoZWQgYW5kIGVkaXQgaGlz
dG9yeSB0byBub3JtYWxpemUgdGhlICcgK1wKKyAgICAgICAgICAgJ2NvbW1pdHRlcnMgd2l0aCBl
eGlzdGluZyBjb250cmlidXRvciBtYXBwaW5nIGFuZCBhZGQgaWRlbnRpZmllcnMgdG8gY29tbWl0
IG1lc3NhZ2VzJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlcihjbHMsIHBhcnNl
ciwgbG9nZ2Vycz1Ob25lKToKKyAgICAgICAgb3V0cHV0X2FyZ3MgPSBhcmd1bWVudHMuTG9nZ2lu
Z0dyb3VwKAorICAgICAgICAgICAgcGFyc2VyLAorICAgICAgICAgICAgbG9nZ2Vycz1sb2dnZXJz
LAorICAgICAgICAgICAgaGVscD0ne30gYW1vdW50IG9mIGxvZ2dpbmcgYW5kIGBnaXQgcmViYXNl
YCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQnCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2FyZ3Mu
YWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0taWRlbnRpZmllcicsICctLW5vLWlkZW50aWZp
ZXInLAorICAgICAgICAgICAgaGVscD0nQWRkIGluIHRoZSBpZGVudGlmaWVyIHRvIGNvbW1pdCBt
ZXNzYWdlcywgdHJ1ZSBieSBkZWZhdWx0JywKKyAgICAgICAgICAgIGFjdGlvbj1hcmd1bWVudHMu
Tm9BY3Rpb24sCisgICAgICAgICAgICBkZXN0PSdpZGVudGlmaWVyJywKKyAgICAgICAgICAgIGRl
ZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKQorICAgICAgICBvdXRwdXRfYXJncy5hZGRfYXJndW1lbnQo
CisgICAgICAgICAgICAnLS1yZW1vdGUnLAorICAgICAgICAgICAgaGVscD0nQ29tcGFyZSBhZ2Fp
bnN0IGEgZGlmZmVyZW50IHJlbW90ZScsCisgICAgICAgICAgICBkZXN0PSdyZW1vdGUnLAorICAg
ICAgICAgICAgZGVmYXVsdD0nb3JpZ2luJywKKyAgICAgICAgKQorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5LCBpZGVudGlmaWVyX3RlbXBsYXRl
PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHJlcG9zaXRvcnkucGF0aDoKKyAgICAg
ICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Nhbm5vdCBjYW5vbmljYWxpemUgY29tbWl0cyBvbiBh
IHJlbW90ZSByZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYg
bm90IHJlcG9zaXRvcnkuaXNfZ2l0OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ29t
bWl0cyBjYW4gb25seSBiZSBjYW5vbmljYWxpemVkIG9uIGEgR2l0IHJlcG9zaXRvcnlcbicpCisg
ICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJyYW5jaCA9IHJlcG9zaXRvcnkuYnJhbmNo
CisgICAgICAgIGlmIG5vdCBicmFuY2g6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdG
YWlsZWQgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoXG4nKQorICAgICAgICAgICAgcmV0dXJu
IC0xCisgICAgICAgIHJlc3VsdCA9IHJ1bihbCisgICAgICAgICAgICByZXBvc2l0b3J5LmV4ZWN1
dGFibGUoKSwgJ3Jldi1saXN0JywKKyAgICAgICAgICAgICctLWNvdW50JywgJy0tbm8tbWVyZ2Vz
JywKKyAgICAgICAgICAgICd7cmVtb3RlfS97YnJhbmNofS4ue2JyYW5jaH0nLmZvcm1hdChyZW1v
dGU9YXJncy5yZW1vdGUsIGJyYW5jaD1icmFuY2gpLAorICAgICAgICBdLCBjYXB0dXJlX291dHB1
dD1UcnVlLCBjd2Q9cmVwb3NpdG9yeS5wYXRoKQorICAgICAgICBpZiByZXN1bHQucmV0dXJuY29k
ZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byBmaW5kIGxvY2FsIGNv
bW1pdHNcbicpCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZGlmZmVyZW5jZSA9IGlu
dChyZXN1bHQuc3Rkb3V0LnJzdHJpcCgpKQorICAgICAgICBpZiBkaWZmZXJlbmNlIDw9IDA6Cisg
ICAgICAgICAgICBwcmludCgnTm8gbG9jYWwgY29tbWl0cyB0byBiZSBlZGl0ZWQnKQorICAgICAg
ICAgICAgcmV0dXJuIDAKKyAgICAgICAgbG9nLndhcm5pbmcoJ3t9IHRvIGJlIGVkaXR0ZWQuLi4n
LmZvcm1hdChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZlcmVuY2UsICdjb21taXQnKSkpCisK
KyAgICAgICAgYmFzZSA9IHJlcG9zaXRvcnkuZmluZCgne31+e30nLmZvcm1hdChicmFuY2gsIGRp
ZmZlcmVuY2UpKQorICAgICAgICBsb2cuaW5mbygnQmFzZSBjb21taXQgaXMge30gKHJlZiB7fSkn
LmZvcm1hdChiYXNlLCBiYXNlLmhhc2gpKQorCisgICAgICAgIGxvZy5kZWJ1ZygnU2F2aW5nIGNv
bnRyaWJ1dG9ycyB0byB0ZW1wIGZpbGUgdG8gYmUgcGlja2VkIHVwIGJ5IGNoaWxkIHByb2Nlc3Nl
cycpCisgICAgICAgIGNvbnRyaWJ1dG9ycyA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1w
ZGlyKCksICd7fS1jb250cmlidXRvcnMuanNvbicuZm9ybWF0KG9zLmdldHBpZCgpKSkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGNvbnRyaWJ1dG9ycywgJ3cnKSBhcyBmaWxl
OgorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuY29udHJpYnV0b3JzLnNhdmUoZmlsZSkKKwor
ICAgICAgICAgICAgbWVzc2FnZV9maWx0ZXIgPSBbCisgICAgICAgICAgICAgICAgJy0tbXNnLWZp
bHRlcicsCisgICAgICAgICAgICAgICAgJ3t9IHt9IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAg
ICAgICAgIHN5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4o
b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21lc3NhZ2UucHknKSwKKyAgICAgICAgICAgICAg
ICAgICAgaWRlbnRpZmllcl90ZW1wbGF0ZSBvciAne30nLAorICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICBdIGlmIGFyZ3MuaWRlbnRpZmllciBlbHNlIFtdCisKKyAgICAgICAgICAgIHdp
dGggb3Blbihvcy5kZXZudWxsLCAndycpIGFzIGRldm51bGw6CisgICAgICAgICAgICAgICAgc3Vi
cHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS5leGVj
dXRhYmxlKCksICdmaWx0ZXItYnJhbmNoJywgJy1mJywKKyAgICAgICAgICAgICAgICAgICAgJy0t
ZW52LWZpbHRlcicsICcnJ3tvdmVyd3JpdGVfbWVzc2FnZX0KK2NvbW1pdHRlck91dHB1dD0kKHtw
eXRob259IHtjb21taXR0ZXJfcHl9IHtjb250cmlidXRvcl9qc29ufSkKK0tFWT0nJworVkFMVUU9
JycKK2ZvciB3b3JkIGluICRjb21taXR0ZXJPdXRwdXQ7IGRvCisgICAgaWYgW1sgJHdvcmQgPT0g
R0lUXyogXV0gOyB0aGVuCisgICAgICAgIGlmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisg
ICAgICAgICAgICB7c2V0dGluZ19tZXNzYWdlfQorICAgICAgICAgICAgcHJpbnRmIC12ICRLRVkg
IiR7e1ZBTFVFOjokKCgke3sjVkFMVUV9fSAtIDEpKX19IgorICAgICAgICAgICAgS0VZPScnCisg
ICAgICAgICAgICBWQUxVRT0nJworICAgICAgICBmaQorICAgIGZpCisgICAgaWYgW1sgIiRLRVki
ID09ICIiIF1dIDsgdGhlbgorICAgICAgICBLRVk9IiR3b3JkIgorICAgIGVsc2UKKyAgICAgICAg
VkFMVUU9IiRWQUxVRSR3b3JkICIKKyAgICBmaQorZG9uZQoraWYgW1sgJEtFWSA9PSBHSVRfKiBd
XSA7IHRoZW4KKyAgICB7c2V0dGluZ19tZXNzYWdlfQorICAgIHByaW50ZiAtdiAkS0VZICIke3tW
QUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIKK2ZpJycnLmZvcm1hdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG92ZXJ3cml0ZV9tZXNzYWdlPScnIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcu
SU5GTyBlbHNlICdlY2hvICJPdmVyd3JpdGluZyAkR0lUX0NPTU1JVCInLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcHl0aG9uPXN5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29tbWl0dGVyX3B5PW9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAn
Y29tbWl0dGVyLnB5JyksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRvcl9qc29u
PWNvbnRyaWJ1dG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdfbWVzc2FnZT0n
JyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLkRFQlVHIGVsc2UgJ2VjaG8gIiAgICAkS0VZPSRWQUxV
RSInLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIF0gKyBtZXNzYWdl
X2ZpbHRlciArIFsne30uLi57fScuZm9ybWF0KGJyYW5jaCwgYmFzZS5oYXNoKV0sCisgICAgICAg
ICAgICAgICAgICAgIGN3ZD1yZXBvc2l0b3J5LnBhdGgsCisgICAgICAgICAgICAgICAgICAgIGVu
dj17J0ZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJOSU5HJzogJzEnLCAnUFlUSE9OUEFUSCc6ICc6
Jy5qb2luKHN5cy5wYXRoKX0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsIGlm
IGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAg
ICAgIHN0ZGVycj1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5v
bmUsCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxl
ZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0byBt
b2RpZnkgbG9jYWwgY29tbWl0IG1lc3NhZ2VzXG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisK
KyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250cmlidXRvcnMpCisK
KyAgICAgICAgcHJpbnQoJ3t9IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIScuZm9ybWF0KHN0
cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKKworICAgICAgICBy
ZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvY29tbWl0
dGVyLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lz
CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4KK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IENvbnRyaWJ1dG9yLCBsb2NhbAorCitFTUFJTF9SRSA9IHJlLmNvbXBpbGUocicoP1A8ZW1haWw+
W15AXStAW15AXSspKEAuKik/JykKKworCitkZWYgY2Fub25pY2FsaXplKG5hbWUsIGVtYWlsLCBj
b250cmlidXRvcnMpOgorICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2goZW1haWwpCisgICAgaWYg
bWF0Y2g6CisgICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWlsJykKKworICAgIGNvbnRy
aWJ1dG9yID0gY29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0b3JzLmdldChlbWFpbC5s
b3dlcigpKSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9y
Lm5hbWUsIGVtYWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1haWwKKyAgICBjb250cmli
dXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQobmFtZSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAg
ICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVtYWlsCisgICAgcmV0dXJu
IG5hbWUsIGVtYWlsCisKKworZGVmIG1haW4oY29udHJpYnV0b3JfZmlsZSk6CisgICAgUkVQT1NJ
VE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NPTU1JVCA9IG9z
LmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIHdpdGggb3Blbihjb250cmlidXRvcl9m
aWxlLCAncicpIGFzIGZpbGU6CisgICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1h
cHBpbmcubG9hZChmaWxlKQorCisgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxp
emUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05BTUUnLCAnVW5rbm93bicp
LAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJTCcsICdudWxsJyksCisg
ICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisgICAgY29tbWl0dGVyLCBjb21taXR0ZXJfZW1h
aWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUVEVS
X05BTUUnLCAnVW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRF
Ul9FTUFJTCcsICdudWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisKKyAgICAj
IEF0dGVtcHQgdG8gZXh0cmFjdCBwYXRjaC1ieQorICAgIGlmIGF1dGhvcl9lbWFpbCA9PSBjb21t
aXR0ZXJfZW1haWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NPTU1JVDoKKyAgICAgICAg
bG9nID0gcnVuKAorICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRhYmxlKCksICdsb2cnLCBH
SVRfQ09NTUlULCAnLTEnXSwKKyAgICAgICAgICAgIGN3ZD1SRVBPU0lUT1JZX1BBVEgsIGNhcHR1
cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICkKKworICAgICAgICBw
YXRjaF9ieSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgIHInXHMrUGF0Y2ggYnkgKD9QPGF1dGhv
cj5bXjxdKykgXDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQrLVxkKycsCisgICAgICAg
ICAgICBsb2cuc3Rkb3V0LAorICAgICAgICApCisgICAgICAgIGlmIHBhdGNoX2J5OgorICAgICAg
ICAgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgICAgICAg
ICAgcGF0Y2hfYnkuZ3JvdXAoJ2F1dGhvcicpLAorICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdy
b3VwKCdlbWFpbCcpLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICAgICAgICAg
ICkKKworICAgIHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0aG9yKSkKKyAg
ICBwcmludCh1J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRob3JfZW1haWwpKQorICAg
IHByaW50KHUnR0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29tbWl0dGVyKSkKKyAgICBw
cmludCh1J0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJfZW1haWwpKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJn
dlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2Nt
cHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2RlZiBtYWluKGlucHV0ZmlsZSwgaWRlbnRpZmllcl90
ZW1wbGF0ZSk6CisgICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcp
CisgICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIGlm
IG5vdCBSRVBPU0lUT1JZX1BBVEg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0ZhaWxlZCB0
byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhcbicpCisgICAgICAgIHJldHVybiAtMQorICAgIGlm
IG5vdCBHSVRfQ09NTUlUOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0
cmlldmUgZ2l0IGhhc2hcbicpCisgICAgICAgIHJldHVybiAtMQorCisgICAgcmVwb3NpdG9yeSA9
IEdpdChSRVBPU0lUT1JZX1BBVEgpCisgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5jb21taXQoaGFz
aD1HSVRfQ09NTUlUKQorICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1hdChHSVRfQ09N
TUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisgICAgaWYgbm90IGNvbW1pdC5pZGVudGlmaWVyIG9y
IG5vdCBjb21taXQuYnJhbmNoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8g
Y29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01NSVQpKQorICAg
ICAgICByZXR1cm4gLTEKKworICAgIGxpbmVzID0gW10KKyAgICBmb3IgbGluZSBpbiBpbnB1dGZp
bGUucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorCisg
ICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihsaW5lcykKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4
IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFdKToKKyAgICAg
ICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCisKKyAgICBpZiBpZGVudGlmaWVyX2luZGV4IGFuZCBs
aW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aCgnSWRlbnRpZmllcjogJyk6Cisg
ICAgICAgIGxpbmVzW2lkZW50aWZpZXJfaW5kZXggLSAxXSA9ICdJZGVudGlmaWVyOiB7fScuZm9y
bWF0KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkpCisgICAgZWxzZToKKyAgICAg
ICAgbGluZXMuaW5zZXJ0KGlkZW50aWZpZXJfaW5kZXgsICdJZGVudGlmaWVyOiB7fScuZm9ybWF0
KGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkpKQorCisgICAgZm9yIGxpbmUgaW4g
bGluZXM6CisgICAgICAgIHByaW50KGxpbmUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5zdGRpbiwgc3lzLmFyZ3ZbMV0pKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwv
Z2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjcwOTY4KQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwv
Z2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQCBpbXBvcnQgb3MKIGltcG9y
dCByZQogCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQotZnJvbSB3ZWJraXRjb3JlcHkg
aW1wb3J0IG1vY2tzCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MsIE91dHB1dENhcHR1
cmUsIFN0cmluZ0lPCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgQ29tbWl0LCBDb250
cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUuY29tbWl0dGVyIGltcG9ydCBt
YWluIGFzIGNvbW1pdHRlcl9tYWluCitmcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZS5tZXNz
YWdlIGltcG9ydCBtYWluIGFzIG1lc3NhZ2VfbWFpbgogCiAKIGNsYXNzIEdpdChtb2Nrcy5TdWJw
cm9jZXNzKToKQEAgLTU4LDYgKzYwLDcgQEAgY2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgog
ICAgICAgICAgICAgICAgICAgICBjb21taXQucmV2aXNpb24gPSBOb25lCiAKICAgICAgICAgc2Vs
Zi5oZWFkID0gc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdWy0xXQorICAgICAgICBz
ZWxmLnJlbW90ZXMgPSB7J29yaWdpbi97fScuZm9ybWF0KGJyYW5jaCk6IGNvbW1pdHNbLTFdIGZv
ciBicmFuY2gsIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLml0ZW1zKCl9CiAgICAgICAgIHNlbGYu
dGFncyA9IHt9CiAKICAgICAgICAgaWYgZ2l0X3N2bjoKQEAgLTIzMyw2ICsyMzYsMTQgQEAgbm90
aGluZyB0byBjb21taXQsIHdvcmtpbmcgdHJlZSBjbGVhbgogICAgICAgICAgICAgICAgIGdlbmVy
YXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOgogICAgICAgICAgICAgICAgICAgICBtb2Nrcy5Q
cm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTApIGlmIHNlbGYuY2hlY2tvdXQoYXJnc1syXSkg
ZWxzZSBtb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbihyZXR1cm5jb2RlPTEpCiAgICAgICAgICAgICAp
LCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJs
ZSwgJ2ZpbHRlci1icmFuY2gnLCAnLWYnLAorICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgs
CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHNlbGYu
ZmlsdGVyX2JyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgYXJnc1stMV0sCisgICAgICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9JyAnLmpvaW4oYXJnc1stMl0uc3BsaXQoJyAn
KVsyOl0pIGlmIGFyZ3NbLTNdID09ICctLW1zZy1maWx0ZXInIGVsc2UgTm9uZSwKKyAgICAgICAg
ICAgICAgICAgICAgZW52aXJvbm1lbnRfc2hlbGw9YXJnc1s0XSBpZiBhcmdzWzNdID09ICctLWVu
di1maWx0ZXInIGFuZCBhcmdzWzRdIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICApCisgICAg
ICAgICAgICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIHNlbGYu
ZXhlY3V0YWJsZSwKICAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb249bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCkBAIC0yNjUsMTYgKzI3Niwy
MiBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1bZm91bmQuYnJh
bmNoX3BvaW50IC0gZGlmZmVyZW5jZSAtIDFdCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAorICAgICAgICBzb21ldGhpbmcgPSBzdHIoc29tZXRoaW5nKQorICAgICAgICBpZiAnLi4nIGlu
IHNvbWV0aGluZzoKKyAgICAgICAgICAgIGEsIGIgPSBzb21ldGhpbmcuc3BsaXQoJy4uJykKKyAg
ICAgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkKKyAgICAgICAgICAgIGIgPSBzZWxmLmZpbmQoYikK
KyAgICAgICAgICAgIHJldHVybiBiIGlmIGEgYW5kIGIgZWxzZSBOb25lCisKICAgICAgICAgaWYg
c29tZXRoaW5nID09ICdIRUFEJzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLmhlYWQKICAgICAg
ICAgaWYgc29tZXRoaW5nIGluIHNlbGYuY29tbWl0cy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3NvbWV0aGluZ11bLTFdCiAgICAgICAgIGlmIHNvbWV0aGluZyBpbiBz
ZWxmLnRhZ3Mua2V5cygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFnc1tzb21ldGhpbmdd
CisgICAgICAgIGlmIHNvbWV0aGluZyBpbiBzZWxmLnJlbW90ZXMua2V5cygpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYucmVtb3Rlc1tzb21ldGhpbmddCiAKLSAgICAgICAgc29tZXRoaW5nID0g
c3RyKHNvbWV0aGluZykKLSAgICAgICAgaWYgJy4uJyBpbiBzb21ldGhpbmc6Ci0gICAgICAgICAg
ICBzb21ldGhpbmcgPSBzb21ldGhpbmcuc3BsaXQoJy4uJylbMV0KICAgICAgICAgZm9yIGJyYW5j
aCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGJyYW5j
aCA9PSBzb21ldGhpbmc6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHNbLTFdCkBAIC0y
ODYsMTAgKzMwMywxNiBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAg
ICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgY291bnQoc2VsZiwgc29tZXRoaW5nKToKLSAg
ICAgICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRoaW5nKQotICAgICAgICBpZiAnLi4nIGluIHNv
bWV0aGluZyBvciBub3QgbWF0Y2guYnJhbmNoX3BvaW50OgotICAgICAgICAgICAgcmV0dXJuIG1h
dGNoLmlkZW50aWZpZXIKLSAgICAgICAgcmV0dXJuIG1hdGNoLmJyYW5jaF9wb2ludCArIG1hdGNo
LmlkZW50aWZpZXIKKyAgICAgICAgaWYgJy4uJyBub3QgaW4gc29tZXRoaW5nOgorICAgICAgICAg
ICAgbWF0Y2ggPSBzZWxmLmZpbmQoc29tZXRoaW5nKQorICAgICAgICAgICAgcmV0dXJuIChtYXRj
aC5icmFuY2hfcG9pbnQgb3IgMCkgKyBtYXRjaC5pZGVudGlmaWVyCisKKyAgICAgICAgYSwgYiA9
IHNvbWV0aGluZy5zcGxpdCgnLi4nKQorICAgICAgICBhID0gc2VsZi5maW5kKGEpCisgICAgICAg
IGIgPSBzZWxmLmZpbmQoYikKKyAgICAgICAgaWYgYS5icmFuY2hfcG9pbnQgPT0gYi5icmFuY2hf
cG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gYWJzKGIuaWRlbnRpZmllciAtIGEuaWRlbnRpZmll
cikKKyAgICAgICAgcmV0dXJuIGIuaWRlbnRpZmllcgogCiAgICAgZGVmIGJyYW5jaGVzX29uKHNl
bGYsIGhhc2gpOgogICAgICAgICByZXN1bHQgPSBzZXQoKQpAQCAtMzEzLDMgKzMzNiw4OSBAQCBu
b3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICBzZWxmLmhl
YWQgPSBjb21taXQKICAgICAgICAgICAgIHNlbGYuZGV0YWNoZWQgPSBzb21ldGhpbmcgbm90IGlu
IHNlbGYuY29tbWl0cy5rZXlzKCkKICAgICAgICAgcmV0dXJuIFRydWUgaWYgY29tbWl0IGVsc2Ug
RmFsc2UKKworICAgIGRlZiBmaWx0ZXJfYnJhbmNoKHNlbGYsIHJhbmdlLCBpZGVudGlmaWVyX3Rl
bXBsYXRlPU5vbmUsIGVudmlyb25tZW50X3NoZWxsPU5vbmUpOgorICAgICAgICAjIFdlIGNhbid0
IGVmZmVjdGl2ZWx5IG1vY2sgdGhlIGJhc2ggc2NyaXB0IGluIHRoZSBjb21tYW5kLCBidXQgd2Ug
Y2FuIG1vY2sgdGhlIHB5dGhvbiBjb2RlIHRoYXQKKyAgICAgICAgIyBzY3JpcHQgY2FsbHMsIHdo
aWNoIGlzIHdoZXJlIHRoZSBwcm9ncmFtIGxvZ2ljIGlzLgorICAgICAgICBoZWFkLCBzdGFydCA9
IHJhbmdlLnNwbGl0KCcuLi4nKQorICAgICAgICBoZWFkID0gc2VsZi5maW5kKGhlYWQpCisgICAg
ICAgIHN0YXJ0ID0gc2VsZi5maW5kKHN0YXJ0KQorCisgICAgICAgIGNvbW1pdHNfdG9fZWRpdCA9
IFtdCisgICAgICAgIGZvciBjb21taXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzW2hlYWQuYnJh
bmNoXSk6CisgICAgICAgICAgICBpZiBjb21taXQuYnJhbmNoID09IHN0YXJ0LmJyYW5jaCBhbmQg
Y29tbWl0LmlkZW50aWZpZXIgPD0gc3RhcnQuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgY29tbWl0c190b19lZGl0Lmluc2VydCgwLCBjb21taXQpCisgICAg
ICAgIGlmIGhlYWQuYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICBm
b3IgY29tbWl0IGluIHJldmVyc2VkKHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVs6
aGVhZC5icmFuY2hfcG9pbnRdKToKKyAgICAgICAgICAgICAgICBpZiBjb21taXQuaWRlbnRpZmll
ciA8PSBzdGFydC5pZGVudGlmaWVyOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgIGNvbW1pdHNfdG9fZWRpdC5pbnNlcnQoMCwgY29tbWl0KQorCisgICAgICAgIHN0
ZG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgb3JpZ2luYWxfZW52ID0ge2tleTogb3MuZW52aXJv
bi5nZXQoJ09MRFBXRCcpIGZvciBrZXkgaW4gWworICAgICAgICAgICAgJ09MRFBXRCcsICdHSVRf
Q09NTUlUJywKKyAgICAgICAgICAgICdHSVRfQVVUSE9SX05BTUUnLCAnR0lUX0FVVEhPUl9FTUFJ
TCcsCisgICAgICAgICAgICAnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ0dJVF9DT01NSVRURVJfRU1B
SUwnLAorICAgICAgICBdfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvdW50ID0gMAor
ICAgICAgICAgICAgb3MuZW52aXJvblsnT0xEUFdEJ10gPSBzZWxmLnBhdGgKKyAgICAgICAgICAg
IGZvciBjb21taXQgaW4gY29tbWl0c190b19lZGl0OgorICAgICAgICAgICAgICAgIGNvdW50ICs9
IDEKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09NTUlUJ10gPSBjb21taXQuaGFz
aAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9BVVRIT1JfTkFNRSddID0gY29tbWl0
LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJ
TCddID0gY29tbWl0LmF1dGhvci5lbWFpbAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJ
VF9DT01NSVRURVJfTkFNRSddID0gY29tbWl0LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAg
b3MuZW52aXJvblsnR0lUX0NPTU1JVFRFUl9FTUFJTCddID0gY29tbWl0LmF1dGhvci5lbWFpbAor
CisgICAgICAgICAgICAgICAgc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAnUmV3
cml0ZSB7aGFzaH0gKHtjb3VudH0ve3RvdGFsfSkgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWlu
aW5nIC0tLSBwcmVkaWN0ZWQpXG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
c2g9Y29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1jb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsPWxlbihjb21taXRzX3RvX2VkaXQpLAorICAgICAg
ICAgICAgICAgICAgICApKQorCisgICAgICAgICAgICAgICAgaWYgaWRlbnRpZmllcl90ZW1wbGF0
ZToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWZpbGUgPSBTdHJpbmdJTygpCisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VmaWxlLndyaXRlKGNvbW1pdC5tZXNzYWdlKQorICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlZmlsZS5zZWVrKDApCisgICAgICAgICAgICAgICAgICAgIHdpdGgg
T3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZV9tYWluKG1lc3NhZ2VmaWxlLCBpZGVudGlmaWVyX3RlbXBsYXRlKQorICAgICAgICAgICAg
ICAgICAgICBsaW5lcyA9IGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQor
ICAgICAgICAgICAgICAgICAgICBpZiBsaW5lc1stMV0uc3RhcnRzd2l0aCgnZ2l0LXN2bi1pZDog
aHR0cHM6Ly9zdm4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnBvcCgtMSkKKyAg
ICAgICAgICAgICAgICAgICAgY29tbWl0Lm1lc3NhZ2UgPSAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICAgICAgICAgICAgICBpZiBub3QgZW52aXJvbm1lbnRfc2hlbGw6CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHInZWNobyAiT3Zlcndy
aXRpbmcnLCBlbnZpcm9ubWVudF9zaGVsbCk6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dC53
cml0ZSgnT3ZlcndyaXRpbmcge31cbicuZm9ybWF0KGNvbW1pdC5oYXNoKSkKKworICAgICAgICAg
ICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKD9QPGpzb24+XFMrXC5qc29uKScsIGVudmlyb25t
ZW50X3NoZWxsKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAg
ICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHRlcl9tYWluKG1hdGNoLmdyb3VwKCdqc29uJykpCisgICAgICAgICAgICAgICAg
ICAgIGNhcHR1cmVkLnN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5l
IGluIGNhcHR1cmVkLnN0ZG91dC5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9u
W2xpbmUuc3BsaXQoJyAnKVswXV0gPSAnICcuam9pbihsaW5lLnNwbGl0KCcgJylbMTpdKQorCisg
ICAgICAgICAgICAgICAgY29tbWl0LmF1dGhvciA9IENvbnRyaWJ1dG9yKG5hbWU9b3MuZW52aXJv
blsnR0lUX0FVVEhPUl9OQU1FJ10sIGVtYWlscz1bb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJ
TCddXSkKKworICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChyJ2VjaG8gIlxzKycsIGVudmly
b25tZW50X3NoZWxsKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBbJ0dJVF9BVVRI
T1JfTkFNRScsICdHSVRfQVVUSE9SX0VNQUlMJywgJ0dJVF9DT01NSVRURVJfTkFNRScsICdHSVRf
Q09NTUlUVEVSX0VNQUlMJ106CisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQud3JpdGUo
JyAgICB7fT17fVxuJy5mb3JtYXQoa2V5LCBvcy5lbnZpcm9uW2tleV0pKQorCisgICAgICAgIGZp
bmFsbHk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcmlnaW5hbF9lbnYuaXRlbXMo
KToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICAgICAgcmV0dXJuIG1v
Y2tzLlByb2Nlc3NDb21wbGV0aW9uKAorICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAg
ICAgICAgc3Rkb3V0PXN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICApCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6
ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVu
aXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdl
YmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBNb2NrVGltZQorZnJvbSB3ZWJraXRzY21w
eSBpbXBvcnQgcHJvZ3JhbSwgbW9ja3MsIGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9yCisKKwor
Y2xhc3MgVGVzdENhbm9uaWNhbGl6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcv
bW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAg
d2l0aCBPdXRwdXRDYXB0dXJlKCksIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4o
c2VsZi5wYXRoKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHBy
b2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywpLAorICAg
ICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgKSkKKworICAgIGRlZiB0
ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNh
cHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1v
Y2tUaW1lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisg
ICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsKSwKKyAgICAgICAgICAgICAgICBw
YXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRp
dGVkXG4nKQorCisgICAgZGVmIHRlc3RfZm9ybWF0ZWRfaWRlbnRpZmllcihzZWxmKToKKyAgICAg
ICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxm
LnBhdGgpIGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKKyAgICAgICAgICAg
IGNvbnRpcmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcoKQorICAgICAgICAgICAgY29udGly
YnV0b3JzLmNyZWF0ZSgnXHUwMTdkYW4gRG9iZXJcdTAxNjFlaycsICd6ZG9iZXJzZWtAaWdhbGlh
LmNvbScpCisKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5h
cHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9JzM4ZWE1MGQyOGFlMzk0YzljOGI4
MGUxM2MzZmIyMWYxYzI2Mjg3MWYnLAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1
bHRfYnJhbmNoLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignXHUwMTdkYW4g
RG9iZXJcdTAxNjFlaycsIGVtYWlscz1bJ3pkb2JlcnNla0BpZ2FsaWEuY29tJ10pLAorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXI9bW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdWy0x
XS5pZGVudGlmaWVyICsgMSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2ODAwMCwK
KyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAgKSkK
KworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAg
ICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICctdicsKSwKKyAgICAgICAgICAgICAgICBw
YXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3Jz
LAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J2h0dHBzOi8vY29tbWl0cy53
ZWJraXQub3JnL3t9JywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9IGxv
Y2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3JzWyd6
ZG9iZXJzZWtAaWdhbGlhLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXQubWVzc2FnZSwgJ05ldyBjb21taXRcbklkZW50aWZpZXI6IGh0dHBzOi8vY29tbWl0cy53ZWJr
aXQub3JnLzVAbWFpbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgMzhlYTUw
ZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZiAoMS8xKSAoLS0tIHNlY29uZHMgcGFz
c2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGlu
ZyAzOGVhNTBkMjhhZTM5NGM5YzhiODBlMTNjM2ZiMjFmMWMyNjI4NzFmXG4nCisgICAgICAgICAg
ICAnMSBjb21taXQgc3VjY2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQhXG4nLAorICAgICAgICApCisK
KyAgICBkZWYgdGVzdF9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUo
KSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSBh
cyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBjb250aXJi
dXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5j
cmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVkYXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAg
ICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAg
ICAgICAgICAgICAgIGhhc2g9Jzc2NjYwOTI3NmZlMjAxZTdjZTJjNjk5OTRlMTEzZDk3OWQyMTQ4
YWMnLAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAg
ICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9
WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2su
Y29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAg
ICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAgICAgICAgcmV2aXNpb249
OSwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAg
KSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAg
ICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICctdnYnKSwKKyAgICAgICAgICAgICAg
ICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0
b3JzLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgY29tbWl0ID0gbG9jYWwuR2l0KHNl
bGYucGF0aCkuY29tbWl0KGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0aG9yLCBjb250aXJidXRvcnNbJ2piZWRhcmRAYXBw
bGUuY29tJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAg
IGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAgICAgICAgICdOZXcgY29tbWl0XG4nCisgICAgICAg
ICAgICAgICAgJ0lkZW50aWZpZXI6IDVAbWFpblxuJworICAgICAgICAgICAgICAgICdzdm4taWQ6
IGh0dHBzOi8vc3ZuLmV4YW1wbGUub3JnL3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVua0A5IDI2
OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAgICApCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2
YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2OTk5NGUx
MTNkOTc5ZDIxNDhhYyAoMS8xKSAoLS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHBy
ZWRpY3RlZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGluZyA3NjY2MDkyNzZmZTIwMWU3Y2Uy
YzY5OTk0ZTExM2Q5NzlkMjE0OGFjXG4nCisgICAgICAgICAgICAnICAgIEdJVF9BVVRIT1JfTkFN
RT1Kb25hdGhhbiBCZWRhcmRcbicKKyAgICAgICAgICAgICcgICAgR0lUX0FVVEhPUl9FTUFJTD1q
YmVkYXJkQGFwcGxlLmNvbVxuJworICAgICAgICAgICAgJyAgICBHSVRfQ09NTUlUVEVSX05BTUU9
Sm9uYXRoYW4gQmVkYXJkXG4nCisgICAgICAgICAgICAnICAgIEdJVF9DT01NSVRURVJfRU1BSUw9
amJlZGFyZEBhcHBsZS5jb21cbicKKyAgICAgICAgICAgICcxIGNvbW1pdCBzdWNjZXNzZnVsbHkg
Y2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JyYW5jaF9jb21t
aXRzKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9j
a3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMgbW9jaywgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tU
aW1lOgorICAgICAgICAgICAgY29udGlyYnV0b3JzID0gQ29udHJpYnV0b3IuTWFwcGluZygpCisg
ICAgICAgICAgICBjb250aXJidXRvcnMuY3JlYXRlKCdKb25hdGhhbiBCZWRhcmQnLCAnamJlZGFy
ZEBhcHBsZS5jb20nKQorCisgICAgICAgICAgICBsb2NhbC5HaXQoc2VsZi5wYXRoKS5jaGVja291
dCgnYnJhbmNoLWEnKQorICAgICAgICAgICAgbW9jay5jb21taXRzWydicmFuY2gtYSddLmFwcGVu
ZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nZjkzMTM4ZTNiZjFkNWVjY2EyNWZjMDg0
NGI3YTJhNzhiOGUwMGFhZScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSdicmFuY2gtYScsCisg
ICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVt
YWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIGJyYW5jaF9wb2lu
dD1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmJyYW5jaF9wb2ludCwKKyAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1snYnJhbmNoLWEnXVstMV0uaWRlbnRpZmllciAr
IDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAgICAg
ICAgbWVzc2FnZT0nTmV3IGNvbW1pdCAxXG4nLAorICAgICAgICAgICAgKSkKKyAgICAgICAgICAg
IG1vY2suY29tbWl0c1snYnJhbmNoLWEnXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAg
IGhhc2g9JzAxNDhjMGRmMGZhZjI0OGFhMTMzZDZkNWFkOTExZDdjYjFiNTZhNWInLAorICAgICAg
ICAgICAgICAgIGJyYW5jaD0nYnJhbmNoLWEnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250
cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSdd
KSwKKyAgICAgICAgICAgICAgICBicmFuY2hfcG9pbnQ9bW9jay5jb21taXRzWydicmFuY2gtYSdd
Wy0xXS5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNvbW1p
dHNbJ2JyYW5jaC1hJ11bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAgICAgICAgICAgIHRpbWVz
dGFtcD0xNjAxNjY5MDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBjb21taXQgMlxu
JywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJv
Z3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCApLAorICAg
ICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9y
cz1jb250aXJidXRvcnMsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBjb21taXRfYSA9
IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1hfjEnKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYS5hdXRob3IsIGNvbnRpcmJ1dG9yc1snamJl
ZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0X2Eu
bWVzc2FnZSwgJ05ldyBjb21taXQgMVxuSWRlbnRpZmllcjogMi4zQGJyYW5jaC1hJykKKworICAg
ICAgICAgICAgY29tbWl0X2IgPSBsb2NhbC5HaXQoc2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPSdi
cmFuY2gtYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9iLmF1dGhvciwg
Y29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjb21taXRfYi5tZXNzYWdlLCAnTmV3IGNvbW1pdCAyXG5JZGVudGlmaWVyOiAyLjRA
YnJhbmNoLWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0
dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICdSZXdyaXRlIGY5MzEzOGUzYmYx
ZDVlY2NhMjVmYzA4NDRiN2EyYTc4YjhlMDBhYWUgKDEvMikgKC0tLSBzZWNvbmRzIHBhc3NlZCwg
cmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nCisgICAgICAgICAgICAnUmV3cml0ZSAwMTQ4YzBk
ZjBmYWYyNDhhYTEzM2Q2ZDVhZDkxMWQ3Y2IxYjU2YTViICgyLzIpICgtLS0gc2Vjb25kcyBwYXNz
ZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAgICAgJzIgY29tbWl0cyBz
dWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416543</attachid>
            <date>2020-12-18 14:00:30 -0800</date>
            <delta_ts>2020-12-18 16:21:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201218160029.patch</filename>
            <type>text/plain</type>
            <size>38401</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDk2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBjYW5vbmljYWwgaWRlbnRpZmllciB0cmFu
c2xhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5w
eTogQWRkIGNhbm9uaWNhbGl6ZSBkaXJlY3RvcnkgdG8gcGFja2FnZS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2
ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2Nhbm9uaWNhbGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKENhbm9uaWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVk
IGNvbW1pdHMgb24gYSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAg
ICAgICAgKENhbm9uaWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVk
aXQgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29t
bWl0cy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6
ZSk6IEdpdmVuIGEgbmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJu
IGEgY2Fub25pY2FsIG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9y
IG9yIGNvbW1pdHRlci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBh
dXRob3IgYW5kIGNvbW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBjYW5v
bmljYWwgaWRlbnRpZmllciB0byBhIGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5OgorICAgICAg
ICAoQ29udHJpYnV0b3IpOiBBZGQgdW5rbm93biBhdXRob3IgcmVnZXguCisgICAgICAgIChDb250
cmlidXRvci5mcm9tX3NjbV9sb2cpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5fX2lu
aXRfXyk6IEFkZCBgZ2l0IGZpbHRlci1icmFuY2hgIG1vY2suIE5vdGUgdGhhdCB0aGlzIG1vY2sg
bWFrZXMgYW4gZWZmb3J0IHRvIHRlc3QKKyAgICAgICAgbWVzc2FnZS5weSBhbmQgY29udHJpYnV0
b3IucHksIGJ1dCBub3QgdGhlIHNoZWxsIHNjcmlwdCBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weToKKyAgICAgICAgKENvbW1hbmQubWFpbik6IEFjY2VwdCBhcmJpdHJhcnkgKiprd2FyZ3Mu
CisgICAgICAgIChGaW5kLm1haW4pOiBEaXR0by4KKyAgICAgICAgKENoZWNrb3V0Lm1haW4pOiBE
aXR0by4KKyAgICAgICAgKG1haW4pOiBBbGxvdyBjYWxsZXIgdG8gc3BlY2lmeSBhIHN0cmluZyB0
ZW1wbGF0ZSBmb3IgY2Fub25pY2FsIGlkZW50aWZpZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nh
bm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXpl
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9icmFuY2hfY29t
bWl0cyk6CisKIDIwMjAtMTItMTcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTjogWyBCaWdTdXIgXSAzIFBpY3R1cmVJblBpY3R1cmUgcmVsYXRl
ZCBBUEkgdGVzdHMgdGltaW5nIG91dApJbmRleDogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkocmV2aXNpb24gMjcwOTY4KQor
KysgVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw1ICs0Miw5
IEBAIGlmICdfX21haW5fXycgPT0gX19uYW1lX186CiAgICAgICAgICAgICBpZiBuaWNrIG5vdCBp
biBjb250cmlidXRvcnM6CiAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JzW25pY2tdID0gYwog
Ci0gICAgc3lzLmV4aXQocHJvZ3JhbS5tYWluKHBhdGg9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykpCisgICAgc3lzLmV4aXQocHJvZ3JhbS5tYWlu
KAorICAgICAgICBwYXRoPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgIGNvbnRy
aWJ1dG9ycz1jb250cmlidXRvcnMsCisgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J0Nhbm9u
aWNhbCBsaW5rOiBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy97fScsCisgICAgKSkKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHJldmlz
aW9uIDI3MDk2OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVw
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldHVwKAogICAgIGxpY2Vuc2U9
J01vZGlmaWVkIEJTRCcsCiAgICAgcGFja2FnZXM9WwogICAgICAgICAnd2Via2l0c2NtcHknLAor
ICAgICAgICAnd2Via2l0c2NtcHkuY2Fub25pY2FsaXplJywKICAgICAgICAgJ3dlYmtpdHNjbXB5
LmxvY2FsJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzJywKICAgICAgICAgJ3dlYmtpdHNj
bXB5Lm1vY2tzLmxvY2FsJywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAy
NzA5NjgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1w
b3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlw
IGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVS
TD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNiwgNCkKK3ZlcnNpb24gPSBWZXJz
aW9uKDAsIDcsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycs
IFZlcnNpb24oMCwgMTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90
b25pYycsIFZlcnNpb24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkJ
KHJldmlzaW9uIDI3MDk2OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBAIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMKIGNsYXNzIENvbnRyaWJ1
dG9yKG9iamVjdCk6CiAgICAgR0lUX0FVVEhPUl9SRSA9IHJlLmNvbXBpbGUocidBdXRob3I6ICg/
UDxhdXRob3I+LiopIDwoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/PicpCiAgICAgQVVUT01B
VEVEX0NIRUNLSU5fUkUgPSByZS5jb21waWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8ZGV2
bnVsbD4nKQorICAgIFVOS05PV05fQVVUSE9SID0gcmUuY29tcGlsZShyJ0F1dGhvcjogKD9QPGF1
dGhvcj4uKikgPE5vbmU+JykKICAgICBTVk5fQVVUSE9SX1JFID0gcmUuY29tcGlsZShyJ3JcZCsg
XHwgKD9QPGVtYWlsPi4qKSBcfCAoP1A8ZGF0ZT4uKikgXHwgXGQrIGxpbmVzPycpCiAgICAgU1ZO
X1BBVENIX0ZST01fUkUgPSByZS5jb21waWxlKHInUGF0Y2ggYnkgKD9QPGF1dGhvcj4uKikgPCg/
UDxlbWFpbD4uKik+IG9uIFxkKy1cZCstXGQrJykKIApAQCAtMTExLDEyICsxMTIsMTIgQEAgY2xh
c3MgQ29udHJpYnV0b3Iob2JqZWN0KToKICAgICAgICAgZW1haWwgPSBOb25lCiAgICAgICAgIGF1
dGhvciA9IE5vbmUKIAotICAgICAgICBmb3IgZXhwcmVzc2lvbiBpbiBbY2xzLkdJVF9BVVRIT1Jf
UkUsIGNscy5TVk5fQVVUSE9SX1JFLCBjbHMuU1ZOX1BBVENIX0ZST01fUkUsIGNscy5BVVRPTUFU
RURfQ0hFQ0tJTl9SRV06CisgICAgICAgIGZvciBleHByZXNzaW9uIGluIFtjbHMuR0lUX0FVVEhP
Ul9SRSwgY2xzLlNWTl9BVVRIT1JfUkUsIGNscy5TVk5fUEFUQ0hfRlJPTV9SRSwgY2xzLkFVVE9N
QVRFRF9DSEVDS0lOX1JFLCBjbHMuVU5LTk9XTl9BVVRIT1JdOgogICAgICAgICAgICAgbWF0Y2gg
PSBleHByZXNzaW9uLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAg
ICAgICAgICBpZiAnYXV0aG9yJyBpbiBleHByZXNzaW9uLmdyb3VwaW5kZXg6CiAgICAgICAgICAg
ICAgICAgICAgIGF1dGhvciA9IG1hdGNoLmdyb3VwKCdhdXRob3InKQotICAgICAgICAgICAgICAg
ICAgICBpZiAnKG5vIGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21hdGVkIENoZWNraW4nIGlu
IGF1dGhvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgJyhubyBhdXRob3IpJyBpbiBhdXRob3Ig
b3IgJ0F1dG9tYXRlZCBDaGVja2luJyBpbiBhdXRob3Igb3IgJ1Vua25vd24nIGluIGF1dGhvcjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IE5vbmUKICAgICAgICAgICAgICAgICBp
ZiAnZW1haWwnIGluIGV4cHJlc3Npb24uZ3JvdXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAg
ZW1haWwgPSBtYXRjaC5ncm91cCgnZW1haWwnKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5CShy
ZXZpc2lvbiAyNzA5NjgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9wcm9ncmFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNs
YXNzIENvbW1hbmQob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoIid7fScgZG9lcyBub3QgaGF2ZSBhIGhlbHAgbWVzc2FnZSIpCiAKICAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNs
cywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdObyBjb21tYW5kIHNwZWNpZmllZFxuJykKICAgICAgICAgcmV0dXJuIC0xCiAKQEAgLTgxLDcg
KzgxLDcgQEAgY2xhc3MgRmluZChDb21tYW5kKToKICAgICAgICAgKQogCiAgICAgQGNsYXNzbWV0
aG9kCi0gICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5KToKKyAgICBkZWYgbWFpbihj
bHMsIGFyZ3MsIHJlcG9zaXRvcnksICoqa3dhcmdzKToKICAgICAgICAgdHJ5OgogICAgICAgICAg
ICAgY29tbWl0ID0gcmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9n
PWFyZ3MuaW5jbHVkZV9sb2cpCiAgICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwg
VmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgpAQCAtMTQzLDcgKzE0Myw3IEBAIGNsYXNzIENoZWNr
b3V0KENvbW1hbmQpOgogICAgICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFp
bihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3Np
dG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgogICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0
b3J5IikKICAgICAgICAgICAgIHJldHVybiAxCkBAIC0xNjIsNyArMTYyLDcgQEAgY2xhc3MgQ2hl
Y2tvdXQoQ29tbWFuZCk6CiAgICAgICAgIHJldHVybiAwCiAKIAotZGVmIG1haW4oYXJncz1Ob25l
LCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgorZGVmIG1haW4o
YXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlk
ZW50aWZpZXJfdGVtcGxhdGU9Tm9uZSk6CiAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1s
b2dnaW5nLldBUk5JTkcpCiAKICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdl
YmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCkBAIC0xODMsNyArMTgzLDkg
QEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogCiAgICAgc3VicGFy
c2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKIAot
ICAgIGZvciBwcm9ncmFtIGluIFtGaW5kLCBDaGVja291dF06CisgICAgZnJvbSB3ZWJraXRzY21w
eS5jYW5vbmljYWxpemUgaW1wb3J0IENhbm9uaWNhbGl6ZQorCisgICAgZm9yIHByb2dyYW0gaW4g
W0ZpbmQsIENoZWNrb3V0LCBDYW5vbmljYWxpemVdOgogICAgICAgICBzdWJwYXJzZXIgPSBzdWJw
YXJzZXJzLmFkZF9wYXJzZXIocHJvZ3JhbS5uYW1lLCBoZWxwPXByb2dyYW0uaGVscCkKICAgICAg
ICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhtYWluPXByb2dyYW0ubWFpbikKICAgICAgICAgcHJv
Z3JhbS5wYXJzZXIoc3VicGFyc2VyLCBsb2dnZXJzPWxvZ2dlcnMpCkBAIC0xOTUsNCArMTk3LDQg
QEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogICAgIGVsc2U6CiAg
ICAgICAgIHJlcG9zaXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2VkLnJlcG9z
aXRvcnksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMpCiAKLSAgICByZXR1cm4gcGFyc2VkLm1h
aW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkKKyAgICByZXR1cm4gcGFyc2Vk
Lm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1w
bGF0ZT1pZGVudGlmaWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nh
bm9uaWNhbGl6ZS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmls
ZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IGFyZ3VtZW50cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IGxvZworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3Mg
Q2Fub25pY2FsaXplKENvbW1hbmQpOgorICAgIG5hbWUgPSAnY2Fub25pY2FsaXplJworICAgIGhl
bHAgPSAnVGFrZSB0aGUgc2V0IG9mIGNvbW1pdHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gcHVz
aGVkIGFuZCBlZGl0IGhpc3RvcnkgdG8gbm9ybWFsaXplIHRoZSAnICtcCisgICAgICAgICAgICdj
b21taXR0ZXJzIHdpdGggZXhpc3RpbmcgY29udHJpYnV0b3IgbWFwcGluZyBhbmQgYWRkIGlkZW50
aWZpZXJzIHRvIGNvbW1pdCBtZXNzYWdlcycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBw
YXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0g
YXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAg
IGxvZ2dlcnM9bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5n
IGFuZCBgZ2l0IHJlYmFzZWAgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApCisgICAg
ICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWlkZW50aWZpZXIn
LCAnLS1uby1pZGVudGlmaWVyJywKKyAgICAgICAgICAgIGhlbHA9J0FkZCBpbiB0aGUgaWRlbnRp
ZmllciB0byBjb21taXQgbWVzc2FnZXMsIHRydWUgYnkgZGVmYXVsdCcsCisgICAgICAgICAgICBh
Y3Rpb249YXJndW1lbnRzLk5vQWN0aW9uLAorICAgICAgICAgICAgZGVzdD0naWRlbnRpZmllcics
CisgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2Fy
Z3MuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0tcmVtb3RlJywKKyAgICAgICAgICAgIGhl
bHA9J0NvbXBhcmUgYWdhaW5zdCBhIGRpZmZlcmVudCByZW1vdGUnLAorICAgICAgICAgICAgZGVz
dD0ncmVtb3RlJywKKyAgICAgICAgICAgIGRlZmF1bHQ9J29yaWdpbicsCisgICAgICAgICkKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgaWRl
bnRpZmllcl90ZW1wbGF0ZT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCByZXBvc2l0
b3J5LnBhdGg6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdDYW5ub3QgY2Fub25pY2Fs
aXplIGNvbW1pdHMgb24gYSByZW1vdGUgcmVwb3NpdG9yeVxuJykKKyAgICAgICAgICAgIHJldHVy
biAxCisgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoJ0NvbW1pdHMgY2FuIG9ubHkgYmUgY2Fub25pY2FsaXplZCBvbiBhIEdpdCBy
ZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBicmFuY2ggPSBy
ZXBvc2l0b3J5LmJyYW5jaAorICAgICAgICBpZiBub3QgYnJhbmNoOgorICAgICAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGRldGVybWluZSBjdXJyZW50IGJyYW5jaFxuJykKKyAg
ICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXN1bHQgPSBydW4oWworICAgICAgICAgICAg
cmVwb3NpdG9yeS5leGVjdXRhYmxlKCksICdyZXYtbGlzdCcsCisgICAgICAgICAgICAnLS1jb3Vu
dCcsICctLW5vLW1lcmdlcycsCisgICAgICAgICAgICAne3JlbW90ZX0ve2JyYW5jaH0uLnticmFu
Y2h9Jy5mb3JtYXQocmVtb3RlPWFyZ3MucmVtb3RlLCBicmFuY2g9YnJhbmNoKSwKKyAgICAgICAg
XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucGF0aCkKKyAgICAgICAgaWYg
cmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQg
dG8gZmluZCBsb2NhbCBjb21taXRzXG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAg
IGRpZmZlcmVuY2UgPSBpbnQocmVzdWx0LnN0ZG91dC5yc3RyaXAoKSkKKyAgICAgICAgaWYgZGlm
ZmVyZW5jZSA8PSAwOgorICAgICAgICAgICAgcHJpbnQoJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUg
ZWRpdGVkJykKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGxvZy53YXJuaW5nKCd7fSB0
byBiZSBlZGl0dGVkLi4uJy5mb3JtYXQoc3RyaW5nX3V0aWxzLnBsdXJhbGl6ZShkaWZmZXJlbmNl
LCAnY29tbWl0JykpKQorCisgICAgICAgIGJhc2UgPSByZXBvc2l0b3J5LmZpbmQoJ3t9fnt9Jy5m
b3JtYXQoYnJhbmNoLCBkaWZmZXJlbmNlKSkKKyAgICAgICAgbG9nLmluZm8oJ0Jhc2UgY29tbWl0
IGlzIHt9IChyZWYge30pJy5mb3JtYXQoYmFzZSwgYmFzZS5oYXNoKSkKKworICAgICAgICBsb2cu
ZGVidWcoJ1NhdmluZyBjb250cmlidXRvcnMgdG8gdGVtcCBmaWxlIHRvIGJlIHBpY2tlZCB1cCBi
eSBjaGlsZCBwcm9jZXNzZXMnKQorICAgICAgICBjb250cmlidXRvcnMgPSBvcy5wYXRoLmpvaW4o
dGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAne30tY29udHJpYnV0b3JzLmpzb24nLmZvcm1hdChvcy5n
ZXRwaWQoKSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihjb250cmlidXRv
cnMsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmNvbnRyaWJ1dG9y
cy5zYXZlKGZpbGUpCisKKyAgICAgICAgICAgIG1lc3NhZ2VfZmlsdGVyID0gWworICAgICAgICAg
ICAgICAgICctLW1zZy1maWx0ZXInLAorICAgICAgICAgICAgICAgICd7fSB7fSB7fScuZm9ybWF0
KAorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNzYWdlLnB5Jyks
CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3IgJ0lkZW50aWZpZXI6
IHt9JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZp
ZXIgZWxzZSBbXQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBk
ZXZudWxsOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICct
ZicsCisgICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21l
c3NhZ2V9Citjb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJp
YnV0b3JfanNvbn0pCitLRVk9JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0
cHV0OyBkbworICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBpZiBb
WyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0K
KyAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAx
KSl9fSIKKyAgICAgICAgICAgIEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAgICAg
ZmkKKyAgICBmaQorICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAgS0VZ
PSIkd29yZCIKKyAgICBlbHNlCisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAgZmkK
K2RvbmUKK2lmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVzc2Fn
ZX0KKyAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0i
CitmaScnJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2Fn
ZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcg
JEdJVF9DT01NSVQiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4o
b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJV
RyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChi
cmFuY2gsIGJhc2UuaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5w
YXRoLAorICAgICAgICAgICAgICAgICAgICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hfV0FS
TklORyc6ICcxJywgJ1BZVEhPTlBBVEgnOiAnOicuam9pbihzeXMucGF0aCl9LAorICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcg
ZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cubGV2
ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICkKKworICAg
ICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gbW9kaWZ5IGxvY2FsIGNvbW1pdCBtZXNzYWdlc1xu
JykKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBvcy5yZW1vdmUoY29udHJpYnV0b3JzKQorCisgICAgICAgIHByaW50KCd7fSBzdWNjZXNzZnVs
bHkgY2Fub25pY2FsaXplZCEnLmZvcm1hdChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZlcmVu
Y2UsICdjb21taXQnKSkpCisKKyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUv
Y29tbWl0dGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQg
cnVuCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwKKworRU1BSUxf
UkUgPSByZS5jb21waWxlKHInKD9QPGVtYWlsPlteQF0rQFteQF0rKShALiopPycpCisKKworZGVm
IGNhbm9uaWNhbGl6ZShuYW1lLCBlbWFpbCwgY29udHJpYnV0b3JzKToKKyAgICBtYXRjaCA9IEVN
QUlMX1JFLm1hdGNoKGVtYWlsKQorICAgIGlmIG1hdGNoOgorICAgICAgICBlbWFpbCA9IG1hdGNo
Lmdyb3VwKCdlbWFpbCcpCisKKyAgICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQoZW1h
aWwsIGNvbnRyaWJ1dG9ycy5nZXQoZW1haWwubG93ZXIoKSkpCisgICAgaWYgY29udHJpYnV0b3I6
CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBlbWFpbCBpZiBtYXRjaCBlbHNlIGNv
bnRyaWJ1dG9yLmVtYWlsCisgICAgY29udHJpYnV0b3IgPSBjb250cmlidXRvcnMuZ2V0KG5hbWUp
CisgICAgaWYgY29udHJpYnV0b3I6CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBj
b250cmlidXRvci5lbWFpbAorICAgIHJldHVybiBuYW1lLCBlbWFpbAorCisKK2RlZiBtYWluKGNv
bnRyaWJ1dG9yX2ZpbGUpOgorICAgIFJFUE9TSVRPUllfUEFUSCA9IG9zLmVudmlyb24uZ2V0KCdP
TERQV0QnKQorICAgIEdJVF9DT01NSVQgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVCcpCisK
KyAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JfZmlsZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICBj
b250cmlidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nLmxvYWQoZmlsZSkKKworICAgIGF1dGhv
ciwgYXV0aG9yX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgn
R0lUX0FVVEhPUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJ
VF9BVVRIT1JfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAgKQor
ICAgIGNvbW1pdHRlciwgY29tbWl0dGVyX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBv
cy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAg
b3MuZW52aXJvbi5nZXQoJ0dJVF9DT01NSVRURVJfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBj
b250cmlidXRvcnMsCisgICAgKQorCisgICAgIyBBdHRlbXB0IHRvIGV4dHJhY3QgcGF0Y2gtYnkK
KyAgICBpZiBhdXRob3JfZW1haWwgPT0gY29tbWl0dGVyX2VtYWlsIGFuZCBSRVBPU0lUT1JZX1BB
VEggYW5kIEdJVF9DT01NSVQ6CisgICAgICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgIFtsb2Nh
bC5HaXQuZXhlY3V0YWJsZSgpLCAnbG9nJywgR0lUX0NPTU1JVCwgJy0xJ10sCisgICAgICAgICAg
ICBjd2Q9UkVQT1NJVE9SWV9QQVRILCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRm
LTgnLAorICAgICAgICApCisKKyAgICAgICAgcGF0Y2hfYnkgPSByZS5zZWFyY2goCisgICAgICAg
ICAgICByJ1xzK1BhdGNoIGJ5ICg/UDxhdXRob3I+W148XSspIFw8KD9QPGVtYWlsPltePF0rKVw+
Liogb24gXGQrLVxkKy1cZCsnLAorICAgICAgICAgICAgbG9nLnN0ZG91dCwKKyAgICAgICAgKQor
ICAgICAgICBpZiBwYXRjaF9ieToKKyAgICAgICAgICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0g
Y2Fub25pY2FsaXplKAorICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdhdXRob3InKSwK
KyAgICAgICAgICAgICAgICBwYXRjaF9ieS5ncm91cCgnZW1haWwnKSwKKyAgICAgICAgICAgICAg
ICBjb250cmlidXRvcnMsCisgICAgICAgICAgICApCisKKyAgICBwcmludCh1J0dJVF9BVVRIT1Jf
TkFNRSB7fScuZm9ybWF0KGF1dGhvcikpCisgICAgcHJpbnQodSdHSVRfQVVUSE9SX0VNQUlMIHt9
Jy5mb3JtYXQoYXV0aG9yX2VtYWlsKSkKKyAgICBwcmludCh1J0dJVF9DT01NSVRURVJfTkFNRSB7
fScuZm9ybWF0KGNvbW1pdHRlcikpCisgICAgcHJpbnQodSdHSVRfQ09NTUlUVEVSX0VNQUlMIHt9
Jy5mb3JtYXQoY29tbWl0dGVyX2VtYWlsKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMV0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL21lc3Nh
Z2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsIGltcG9ydCBHaXQKKworCitkZWYg
bWFpbihpbnB1dGZpbGUsIGlkZW50aWZpZXJfdGVtcGxhdGUpOgorICAgIFJFUE9TSVRPUllfUEFU
SCA9IG9zLmVudmlyb24uZ2V0KCdPTERQV0QnKQorICAgIEdJVF9DT01NSVQgPSBvcy5lbnZpcm9u
LmdldCgnR0lUX0NPTU1JVCcpCisKKyAgICBpZiBub3QgUkVQT1NJVE9SWV9QQVRIOgorICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgcmVwb3NpdG9yeSBwYXRoXG4n
KQorICAgICAgICByZXR1cm4gLTEKKyAgICBpZiBub3QgR0lUX0NPTU1JVDoKKyAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIHJldHJpZXZlIGdpdCBoYXNoXG4nKQorICAgICAgICBy
ZXR1cm4gLTEKKworICAgIHJlcG9zaXRvcnkgPSBHaXQoUkVQT1NJVE9SWV9QQVRIKQorICAgIGNv
bW1pdCA9IHJlcG9zaXRvcnkuY29tbWl0KGhhc2g9R0lUX0NPTU1JVCkKKyAgICBpZiBub3QgY29t
bWl0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gZmluZCAne30nIGluIHRo
ZSByZXBvc2l0b3J5Ii5mb3JtYXQoR0lUX0NPTU1JVCkpCisgICAgICAgIHJldHVybiAtMQorICAg
IGlmIG5vdCBjb21taXQuaWRlbnRpZmllciBvciBub3QgY29tbWl0LmJyYW5jaDoKKyAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGNvbXB1dGUgdGhlIGlkZW50aWZpZXIgZm9yICd7
fSciLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisKKyAgICBsaW5lcyA9
IFtdCisgICAgZm9yIGxpbmUgaW4gaW5wdXRmaWxlLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5l
cy5hcHBlbmQobGluZS5yc3RyaXAoKSkKKworICAgIGlkZW50aWZpZXJfaW5kZXggPSBsZW4obGlu
ZXMpCisgICAgaWYgaWRlbnRpZmllcl9pbmRleCBhbmQgcmVwb3NpdG9yeS5HSVRfU1ZOX1JFVklT
SU9OLm1hdGNoKGxpbmVzWy0xXSk6CisgICAgICAgIGlkZW50aWZpZXJfaW5kZXggLT0gMQorCisg
ICAgaWYgaWRlbnRpZmllcl9pbmRleCBhbmQgbGluZXNbaWRlbnRpZmllcl9pbmRleCAtIDFdLnN0
YXJ0c3dpdGgoJ0lkZW50aWZpZXI6ICcpOgorICAgICAgICBsaW5lc1tpZGVudGlmaWVyX2luZGV4
IC0gMV0gPSBpZGVudGlmaWVyX3RlbXBsYXRlLmZvcm1hdChjb21taXQpCisgICAgZWxzZToKKyAg
ICAgICAgbGluZXMuaW5zZXJ0KGlkZW50aWZpZXJfaW5kZXgsIGlkZW50aWZpZXJfdGVtcGxhdGUu
Zm9ybWF0KGNvbW1pdCkpCisKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgcHJpbnQo
bGluZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4o
c3lzLnN0ZGluLCBzeXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9j
YWwvZ2l0LnB5CShyZXZpc2lvbiAyNzA5NjgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDggKzI1LDEwIEBAIGltcG9ydCBvcwogaW1wb3J0IHJlCiAKIGZyb20gZGF0ZXRpbWUg
aW1wb3J0IGRhdGV0aW1lCi1mcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Vi
a2l0Y29yZXB5IGltcG9ydCBtb2NrcywgT3V0cHV0Q2FwdHVyZSwgU3RyaW5nSU8KIGZyb20gd2Vi
a2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9yCitmcm9tIHdlYmtpdHNj
bXB5LmNhbm9uaWNhbGl6ZS5jb21taXR0ZXIgaW1wb3J0IG1haW4gYXMgY29tbWl0dGVyX21haW4K
K2Zyb20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplLm1lc3NhZ2UgaW1wb3J0IG1haW4gYXMgbWVz
c2FnZV9tYWluCiAKIAogY2xhc3MgR2l0KG1vY2tzLlN1YnByb2Nlc3MpOgpAQCAtNTgsNiArNjAs
NyBAQCBjbGFzcyBHaXQobW9ja3MuU3VicHJvY2Vzcyk6CiAgICAgICAgICAgICAgICAgICAgIGNv
bW1pdC5yZXZpc2lvbiA9IE5vbmUKIAogICAgICAgICBzZWxmLmhlYWQgPSBzZWxmLmNvbW1pdHNb
c2VsZi5kZWZhdWx0X2JyYW5jaF1bLTFdCisgICAgICAgIHNlbGYucmVtb3RlcyA9IHsnb3JpZ2lu
L3t9Jy5mb3JtYXQoYnJhbmNoKTogY29tbWl0c1stMV0gZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBz
ZWxmLmNvbW1pdHMuaXRlbXMoKX0KICAgICAgICAgc2VsZi50YWdzID0ge30KIAogICAgICAgICBp
ZiBnaXRfc3ZuOgpAQCAtMjMzLDYgKzIzNiwxNCBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2lu
ZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKipr
d2FyZ3M6CiAgICAgICAgICAgICAgICAgICAgIG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKHJldHVy
bmNvZGU9MCkgaWYgc2VsZi5jaGVja291dChhcmdzWzJdKSBlbHNlIG1vY2tzLlByb2Nlc3NDb21w
bGV0aW9uKHJldHVybmNvZGU9MSkKICAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91
dGUoCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlLCAnZmlsdGVyLWJyYW5jaCcsICct
ZicsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBnZW5l
cmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogc2VsZi5maWx0ZXJfYnJhbmNoKAorICAgICAg
ICAgICAgICAgICAgICBhcmdzWy0xXSwKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcl90
ZW1wbGF0ZT0nICcuam9pbihhcmdzWy0yXS5zcGxpdCgnICcpWzI6XSkgaWYgYXJnc1stM10gPT0g
Jy0tbXNnLWZpbHRlcicgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVu
dF9zaGVsbD1hcmdzWzRdIGlmIGFyZ3NbM10gPT0gJy0tZW52LWZpbHRlcicgYW5kIGFyZ3NbNF0g
ZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnBy
b2Nlc3MuUm91dGUoCiAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlLAogICAgICAgICAg
ICAgICAgIGN3ZD1zZWxmLnBhdGgsCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Q
cm9jZXNzQ29tcGxldGlvbigKQEAgLTI2NSwxNiArMjc2LDIyIEBAIG5vdGhpbmcgdG8gY29tbWl0
LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29t
bWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVtmb3VuZC5icmFuY2hfcG9pbnQgLSBkaWZmZXJlbmNl
IC0gMV0KICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCisgICAgICAgIHNvbWV0aGluZyA9
IHN0cihzb21ldGhpbmcpCisgICAgICAgIGlmICcuLicgaW4gc29tZXRoaW5nOgorICAgICAgICAg
ICAgYSwgYiA9IHNvbWV0aGluZy5zcGxpdCgnLi4nKQorICAgICAgICAgICAgYSA9IHNlbGYuZmlu
ZChhKQorICAgICAgICAgICAgYiA9IHNlbGYuZmluZChiKQorICAgICAgICAgICAgcmV0dXJuIGIg
aWYgYSBhbmQgYiBlbHNlIE5vbmUKKwogICAgICAgICBpZiBzb21ldGhpbmcgPT0gJ0hFQUQnOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGVhZAogICAgICAgICBpZiBzb21ldGhpbmcgaW4gc2Vs
Zi5jb21taXRzLmtleXMoKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc29tZXRo
aW5nXVstMV0KICAgICAgICAgaWYgc29tZXRoaW5nIGluIHNlbGYudGFncy5rZXlzKCk6CiAgICAg
ICAgICAgICByZXR1cm4gc2VsZi50YWdzW3NvbWV0aGluZ10KKyAgICAgICAgaWYgc29tZXRoaW5n
IGluIHNlbGYucmVtb3Rlcy5rZXlzKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZW1vdGVz
W3NvbWV0aGluZ10KIAotICAgICAgICBzb21ldGhpbmcgPSBzdHIoc29tZXRoaW5nKQotICAgICAg
ICBpZiAnLi4nIGluIHNvbWV0aGluZzoKLSAgICAgICAgICAgIHNvbWV0aGluZyA9IHNvbWV0aGlu
Zy5zcGxpdCgnLi4nKVsxXQogICAgICAgICBmb3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29t
bWl0cy5pdGVtcygpOgogICAgICAgICAgICAgaWYgYnJhbmNoID09IHNvbWV0aGluZzoKICAgICAg
ICAgICAgICAgICByZXR1cm4gY29tbWl0c1stMV0KQEAgLTI4NiwxMCArMzAzLDE2IEBAIG5vdGhp
bmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgcmV0dXJuIE5vbmUKIAog
ICAgIGRlZiBjb3VudChzZWxmLCBzb21ldGhpbmcpOgotICAgICAgICBtYXRjaCA9IHNlbGYuZmlu
ZChzb21ldGhpbmcpCi0gICAgICAgIGlmICcuLicgaW4gc29tZXRoaW5nIG9yIG5vdCBtYXRjaC5i
cmFuY2hfcG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2guaWRlbnRpZmllcgotICAgICAg
ICByZXR1cm4gbWF0Y2guYnJhbmNoX3BvaW50ICsgbWF0Y2guaWRlbnRpZmllcgorICAgICAgICBp
ZiAnLi4nIG5vdCBpbiBzb21ldGhpbmc6CisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuZmluZChz
b21ldGhpbmcpCisgICAgICAgICAgICByZXR1cm4gKG1hdGNoLmJyYW5jaF9wb2ludCBvciAwKSAr
IG1hdGNoLmlkZW50aWZpZXIKKworICAgICAgICBhLCBiID0gc29tZXRoaW5nLnNwbGl0KCcuLicp
CisgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkKKyAgICAgICAgYiA9IHNlbGYuZmluZChiKQorICAg
ICAgICBpZiBhLmJyYW5jaF9wb2ludCA9PSBiLmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJl
dHVybiBhYnMoYi5pZGVudGlmaWVyIC0gYS5pZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gYi5p
ZGVudGlmaWVyCiAKICAgICBkZWYgYnJhbmNoZXNfb24oc2VsZiwgaGFzaCk6CiAgICAgICAgIHJl
c3VsdCA9IHNldCgpCkBAIC0zMTMsMyArMzM2LDg5IEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3Jr
aW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgIHNlbGYuaGVhZCA9IGNvbW1pdAogICAgICAgICAg
ICAgc2VsZi5kZXRhY2hlZCA9IHNvbWV0aGluZyBub3QgaW4gc2VsZi5jb21taXRzLmtleXMoKQog
ICAgICAgICByZXR1cm4gVHJ1ZSBpZiBjb21taXQgZWxzZSBGYWxzZQorCisgICAgZGVmIGZpbHRl
cl9icmFuY2goc2VsZiwgcmFuZ2UsIGlkZW50aWZpZXJfdGVtcGxhdGU9Tm9uZSwgZW52aXJvbm1l
bnRfc2hlbGw9Tm9uZSk6CisgICAgICAgICMgV2UgY2FuJ3QgZWZmZWN0aXZlbHkgbW9jayB0aGUg
YmFzaCBzY3JpcHQgaW4gdGhlIGNvbW1hbmQsIGJ1dCB3ZSBjYW4gbW9jayB0aGUgcHl0aG9uIGNv
ZGUgdGhhdAorICAgICAgICAjIHNjcmlwdCBjYWxscywgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2dy
YW0gbG9naWMgaXMuCisgICAgICAgIGhlYWQsIHN0YXJ0ID0gcmFuZ2Uuc3BsaXQoJy4uLicpCisg
ICAgICAgIGhlYWQgPSBzZWxmLmZpbmQoaGVhZCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmZpbmQo
c3RhcnQpCisKKyAgICAgICAgY29tbWl0c190b19lZGl0ID0gW10KKyAgICAgICAgZm9yIGNvbW1p
dCBpbiByZXZlcnNlZChzZWxmLmNvbW1pdHNbaGVhZC5icmFuY2hdKToKKyAgICAgICAgICAgIGlm
IGNvbW1pdC5icmFuY2ggPT0gc3RhcnQuYnJhbmNoIGFuZCBjb21taXQuaWRlbnRpZmllciA8PSBz
dGFydC5pZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBjb21t
aXRzX3RvX2VkaXQuaW5zZXJ0KDAsIGNvbW1pdCkKKyAgICAgICAgaWYgaGVhZC5icmFuY2ggIT0g
c2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gcmV2ZXJzZWQo
c2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdWzpoZWFkLmJyYW5jaF9wb2ludF0pOgor
ICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5pZGVudGlmaWVyIDw9IHN0YXJ0LmlkZW50aWZpZXI6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY29tbWl0c190b19l
ZGl0Lmluc2VydCgwLCBjb21taXQpCisKKyAgICAgICAgc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAg
ICAgICBvcmlnaW5hbF9lbnYgPSB7a2V5OiBvcy5lbnZpcm9uLmdldCgnT0xEUFdEJykgZm9yIGtl
eSBpbiBbCisgICAgICAgICAgICAnT0xEUFdEJywgJ0dJVF9DT01NSVQnLAorICAgICAgICAgICAg
J0dJVF9BVVRIT1JfTkFNRScsICdHSVRfQVVUSE9SX0VNQUlMJywKKyAgICAgICAgICAgICdHSVRf
Q09NTUlUVEVSX05BTUUnLCAnR0lUX0NPTU1JVFRFUl9FTUFJTCcsCisgICAgICAgIF19CisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgY291bnQgPSAwCisgICAgICAgICAgICBvcy5lbnZpcm9u
WydPTERQV0QnXSA9IHNlbGYucGF0aAorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRz
X3RvX2VkaXQ6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgIG9z
LmVudmlyb25bJ0dJVF9DT01NSVQnXSA9IGNvbW1pdC5oYXNoCisgICAgICAgICAgICAgICAgb3Mu
ZW52aXJvblsnR0lUX0FVVEhPUl9OQU1FJ10gPSBjb21taXQuYXV0aG9yLm5hbWUKKyAgICAgICAg
ICAgICAgICBvcy5lbnZpcm9uWydHSVRfQVVUSE9SX0VNQUlMJ10gPSBjb21taXQuYXV0aG9yLmVt
YWlsCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0NPTU1JVFRFUl9OQU1FJ10gPSBj
b21taXQuYXV0aG9yLm5hbWUKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09NTUlU
VEVSX0VNQUlMJ10gPSBjb21taXQuYXV0aG9yLmVtYWlsCisKKyAgICAgICAgICAgICAgICBzdGRv
dXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICdSZXdyaXRlIHtoYXNofSAoe2NvdW50fS97
dG90YWx9KSAoLS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicu
Zm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD1jb21taXQuaGFzaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50PWNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
dG90YWw9bGVuKGNvbW1pdHNfdG9fZWRpdCksCisgICAgICAgICAgICAgICAgICAgICkpCisKKyAg
ICAgICAgICAgICAgICBpZiBpZGVudGlmaWVyX3RlbXBsYXRlOgorICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWZp
bGUud3JpdGUoY29tbWl0Lm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VmaWxl
LnNlZWsoMCkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2Fw
dHVyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX21haW4obWVzc2FnZWZpbGUs
IGlkZW50aWZpZXJfdGVtcGxhdGUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGlm
IGxpbmVzWy0xXS5zdGFydHN3aXRoKCdnaXQtc3ZuLWlkOiBodHRwczovL3N2bicpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZXMucG9wKC0xKQorICAgICAgICAgICAgICAgICAgICBjb21t
aXQubWVzc2FnZSA9ICdcbicuam9pbihsaW5lcykKKworICAgICAgICAgICAgICAgIGlmIG5vdCBl
bnZpcm9ubWVudF9zaGVsbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgICAgICBpZiByZS5zZWFyY2gocidlY2hvICJPdmVyd3JpdGluZycsIGVudmlyb25tZW50X3No
ZWxsKToKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LndyaXRlKCdPdmVyd3JpdGluZyB7fVxu
Jy5mb3JtYXQoY29tbWl0Lmhhc2gpKQorCisgICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFy
Y2gocicoP1A8anNvbj5cUytcLmpzb24pJywgZW52aXJvbm1lbnRfc2hlbGwpCisgICAgICAgICAg
ICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgp
IGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVyX21haW4obWF0
Y2guZ3JvdXAoJ2pzb24nKSkKKyAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0LnNl
ZWsoMCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY2FwdHVyZWQuc3Rkb3V0LnJl
YWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bbGluZS5zcGxpdCgnICcpWzBdXSA9
ICcgJy5qb2luKGxpbmUuc3BsaXQoJyAnKVsxOl0pCisKKyAgICAgICAgICAgICAgICBjb21taXQu
YXV0aG9yID0gQ29udHJpYnV0b3IobmFtZT1vcy5lbnZpcm9uWydHSVRfQVVUSE9SX05BTUUnXSwg
ZW1haWxzPVtvcy5lbnZpcm9uWydHSVRfQVVUSE9SX0VNQUlMJ11dKQorCisgICAgICAgICAgICAg
ICAgaWYgcmUuc2VhcmNoKHInZWNobyAiXHMrJywgZW52aXJvbm1lbnRfc2hlbGwpOgorICAgICAg
ICAgICAgICAgICAgICBmb3Iga2V5IGluIFsnR0lUX0FVVEhPUl9OQU1FJywgJ0dJVF9BVVRIT1Jf
RU1BSUwnLCAnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ0dJVF9DT01NSVRURVJfRU1BSUwnXToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnICAgIHt9PXt9XG4nLmZvcm1hdChr
ZXksIG9zLmVudmlyb25ba2V5XSkpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZv
ciBrZXksIHZhbHVlIGluIG9yaWdpbmFsX2Vudi5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlm
IHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0g
PSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlbCBv
cy5lbnZpcm9uW2tleV0KKworICAgICAgICByZXR1cm4gbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24o
CisgICAgICAgICAgICByZXR1cm5jb2RlPTAsCisgICAgICAgICAgICBzdGRvdXQ9c3Rkb3V0Lmdl
dHZhbHVlKCksCisgICAgICAgICkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2Fub25pY2FsaXplX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBACisjIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0Y29yZXB5Lm1vY2tzIGltcG9y
dCBUaW1lIGFzIE1vY2tUaW1lCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBwcm9ncmFtLCBtb2Nr
cywgbG9jYWwsIENvbW1pdCwgQ29udHJpYnV0b3IKKworCitjbGFzcyBUZXN0Q2Fub25pY2FsaXpl
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisKKyAg
ICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwg
bW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvZ3JhbS5tYWluKAorICAgICAgICAg
ICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCksCisgICAgICAgICAgICAgICAgcGF0aD1zZWxm
LnBhdGgsCisgICAgICAgICAgICApKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToK
KyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdp
dChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgn
Y2Fub25pY2FsaXplJywpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAg
ICAgICAgKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2
YWx1ZSgpLCAnTm8gbG9jYWwgY29tbWl0cyB0byBiZSBlZGl0ZWRcbicpCisKKyAgICBkZWYgdGVz
dF9mb3JtYXRlZF9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUo
KSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMgbW9jaywgbW9ja3Mu
bG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgY29udGlyYnV0b3JzID0gQ29udHJp
YnV0b3IuTWFwcGluZygpCisgICAgICAgICAgICBjb250aXJidXRvcnMuY3JlYXRlKCdcdTAxN2Rh
biBEb2Jlclx1MDE2MWVrJywgJ3pkb2JlcnNla0BpZ2FsaWEuY29tJykKKworICAgICAgICAgICAg
bW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdLmFwcGVuZChDb21taXQoCisgICAgICAg
ICAgICAgICAgaGFzaD0nMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZics
CisgICAgICAgICAgICAgICAgYnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAg
ICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdcdTAxN2RhbiBEb2Jlclx1MDE2MWVrJywgZW1haWxz
PVsnemRvYmVyc2VrQGlnYWxpYS5jb20nXSksCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1t
b2NrLmNvbW1pdHNbbW9jay5kZWZhdWx0X2JyYW5jaF1bLTFdLmlkZW50aWZpZXIgKyAxLAorICAg
ICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MDAwLAorICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9J05ldyBjb21taXRcbicsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25p
Y2FsaXplJywgJy12JywpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAg
ICAgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250aXJidXRvcnMsCisgICAgICAgICAgICAgICAgaWRl
bnRpZmllcl90ZW1wbGF0ZT0nQ2Fub25pY2FsIGxpbms6IGh0dHBzOi8vY29tbWl0cy53ZWJraXQu
b3JnL3t9JywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9IGxvY2FsLkdp
dChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3JzWyd6ZG9iZXJz
ZWtAaWdhbGlhLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQubWVz
c2FnZSwgJ05ldyBjb21taXRcbkNhbm9uaWNhbCBsaW5rOiBodHRwczovL2NvbW1pdHMud2Via2l0
Lm9yZy81QG1haW4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBj
YXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICdSZXdyaXRlIDM4ZWE1MGQy
OGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWYgKDEvMSkgKC0tLSBzZWNvbmRzIHBhc3Nl
ZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nCisgICAgICAgICAgICAnT3ZlcndyaXRpbmcg
MzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZlxuJworICAgICAgICAgICAg
JzEgY29tbWl0IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIVxuJywKKyAgICAgICAgKQorCisg
ICAgZGVmIHRlc3RfZ2l0X3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSkgYXMg
bW9jaywgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgY29udGlyYnV0
b3JzID0gQ29udHJpYnV0b3IuTWFwcGluZygpCisgICAgICAgICAgICBjb250aXJidXRvcnMuY3Jl
YXRlKCdKb25hdGhhbiBCZWRhcmQnLCAnamJlZGFyZEBhcHBsZS5jb20nKQorCisgICAgICAgICAg
ICBtb2NrLmNvbW1pdHNbbW9jay5kZWZhdWx0X2JyYW5jaF0uYXBwZW5kKENvbW1pdCgKKyAgICAg
ICAgICAgICAgICBoYXNoPSc3NjY2MDkyNzZmZTIwMWU3Y2UyYzY5OTk0ZTExM2Q5NzlkMjE0OGFj
JywKKyAgICAgICAgICAgICAgICBicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCwKKyAgICAgICAg
ICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ2piZWRhcmRAYXBwbGUuY29tJywgZW1haWxzPVsn
amJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNv
bW1pdHNbbW9jay5kZWZhdWx0X2JyYW5jaF1bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAgICAg
ICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MDAwLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPTks
CisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdFxuJywKKyAgICAgICAgICAgICkp
CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAg
ICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCAnLXZ2JyksCisgICAgICAgICAgICAgICAg
cGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29udHJpYnV0b3JzPWNvbnRpcmJ1dG9y
cywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9IGxvY2FsLkdpdChzZWxm
LnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxl
LmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBj
b21taXQubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnTmV3IGNvbW1pdFxuJworICAgICAgICAg
ICAgICAgICdJZGVudGlmaWVyOiA1QG1haW5cbicKKyAgICAgICAgICAgICAgICAnc3ZuLWlkOiBo
dHRwczovL3N2bi5leGFtcGxlLm9yZy9yZXBvc2l0b3J5L3JlcG9zaXRvcnkvdHJ1bmtAOSAyNjhm
NDVjYy1jZDA5LTA0MTAtYWIzYy1kNTI2OTFiNGRiZmMnLAorICAgICAgICAgICAgKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFs
dWUoKSwKKyAgICAgICAgICAgICdSZXdyaXRlIDc2NjYwOTI3NmZlMjAxZTdjZTJjNjk5OTRlMTEz
ZDk3OWQyMTQ4YWMgKDEvMSkgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVk
aWN0ZWQpXG4nCisgICAgICAgICAgICAnT3ZlcndyaXRpbmcgNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2
OTk5NGUxMTNkOTc5ZDIxNDhhY1xuJworICAgICAgICAgICAgJyAgICBHSVRfQVVUSE9SX05BTUU9
Sm9uYXRoYW4gQmVkYXJkXG4nCisgICAgICAgICAgICAnICAgIEdJVF9BVVRIT1JfRU1BSUw9amJl
ZGFyZEBhcHBsZS5jb21cbicKKyAgICAgICAgICAgICcgICAgR0lUX0NPTU1JVFRFUl9OQU1FPUpv
bmF0aGFuIEJlZGFyZFxuJworICAgICAgICAgICAgJyAgICBHSVRfQ09NTUlUVEVSX0VNQUlMPWpi
ZWRhcmRAYXBwbGUuY29tXG4nCisgICAgICAgICAgICAnMSBjb21taXQgc3VjY2Vzc2Z1bGx5IGNh
bm9uaWNhbGl6ZWQhXG4nLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9icmFuY2hfY29tbWl0
cyhzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQsIG1vY2tz
LmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZToKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcoKQorICAg
ICAgICAgICAgY29udGlyYnV0b3JzLmNyZWF0ZSgnSm9uYXRoYW4gQmVkYXJkJywgJ2piZWRhcmRA
YXBwbGUuY29tJykKKworICAgICAgICAgICAgbG9jYWwuR2l0KHNlbGYucGF0aCkuY2hlY2tvdXQo
J2JyYW5jaC1hJykKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1snYnJhbmNoLWEnXS5hcHBlbmQo
Q29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9J2Y5MzEzOGUzYmYxZDVlY2NhMjVmYzA4NDRi
N2EyYTc4YjhlMDBhYWUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nYnJhbmNoLWEnLAorICAg
ICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFp
bHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBicmFuY2hfcG9pbnQ9
bW9jay5jb21taXRzWydicmFuY2gtYSddWy0xXS5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcj1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmlkZW50aWZpZXIgKyAx
LAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY4MDAwLAorICAgICAgICAgICAgICAg
IG1lc3NhZ2U9J05ldyBjb21taXQgMVxuJywKKyAgICAgICAgICAgICkpCisgICAgICAgICAgICBt
b2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ10uYXBwZW5kKENvbW1pdCgKKyAgICAgICAgICAgICAgICBo
YXNoPScwMTQ4YzBkZjBmYWYyNDhhYTEzM2Q2ZDVhZDkxMWQ3Y2IxYjU2YTViJywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J2JyYW5jaC1hJywKKyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJp
YnV0b3IoJ2piZWRhcmRAYXBwbGUuY29tJywgZW1haWxzPVsnamJlZGFyZEBhcHBsZS5jb20nXSks
CisgICAgICAgICAgICAgICAgYnJhbmNoX3BvaW50PW1vY2suY29tbWl0c1snYnJhbmNoLWEnXVst
MV0uYnJhbmNoX3BvaW50LAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9bW9jay5jb21taXRz
WydicmFuY2gtYSddWy0xXS5pZGVudGlmaWVyICsgMSwKKyAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA9MTYwMTY2OTAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdOZXcgY29tbWl0IDJcbics
CisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dy
YW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywgKSwKKyAgICAg
ICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9
Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgY29tbWl0X2EgPSBs
b2NhbC5HaXQoc2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPSdicmFuY2gtYX4xJykKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0X2EuYXV0aG9yLCBjb250aXJidXRvcnNbJ2piZWRh
cmRAYXBwbGUuY29tJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9hLm1l
c3NhZ2UsICdOZXcgY29tbWl0IDFcbklkZW50aWZpZXI6IDIuM0BicmFuY2gtYScpCisKKyAgICAg
ICAgICAgIGNvbW1pdF9iID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5jaD0nYnJh
bmNoLWEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYi5hdXRob3IsIGNv
bnRpcmJ1dG9yc1snamJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY29tbWl0X2IubWVzc2FnZSwgJ05ldyBjb21taXQgMlxuSWRlbnRpZmllcjogMi40QGJy
YW5jaC1hJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAnUmV3cml0ZSBmOTMxMzhlM2JmMWQ1
ZWNjYTI1ZmMwODQ0YjdhMmE3OGI4ZTAwYWFlICgxLzIpICgtLS0gc2Vjb25kcyBwYXNzZWQsIHJl
bWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAgICAgJ1Jld3JpdGUgMDE0OGMwZGYw
ZmFmMjQ4YWExMzNkNmQ1YWQ5MTFkN2NiMWI1NmE1YiAoMi8yKSAoLS0tIHNlY29uZHMgcGFzc2Vk
LCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICcyIGNvbW1pdHMgc3Vj
Y2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQhXG4nLAorICAgICAgICApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416558</attachid>
            <date>2020-12-18 16:21:30 -0800</date>
            <delta_ts>2021-01-05 13:11:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20201218182129.patch</filename>
            <type>text/plain</type>
            <size>40058</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDk2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBjYW5vbmljYWwgaWRlbnRpZmllciB0cmFu
c2xhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5w
eTogQWRkIGNhbm9uaWNhbGl6ZSBkaXJlY3RvcnkgdG8gcGFja2FnZS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2
ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2Nhbm9uaWNhbGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKENhbm9uaWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVk
IGNvbW1pdHMgb24gYSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAg
ICAgICAgKENhbm9uaWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVk
aXQgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29t
bWl0cy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6
ZSk6IEdpdmVuIGEgbmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJu
IGEgY2Fub25pY2FsIG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9y
IG9yIGNvbW1pdHRlci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBh
dXRob3IgYW5kIGNvbW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBjYW5v
bmljYWwgaWRlbnRpZmllciB0byBhIGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5OgorICAgICAg
ICAoQ29udHJpYnV0b3IpOiBBZGQgdW5rbm93biBhdXRob3IgcmVnZXguCisgICAgICAgIChDb250
cmlidXRvci5mcm9tX3NjbV9sb2cpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5fX2lu
aXRfXyk6IEFkZCBgZ2l0IGZpbHRlci1icmFuY2hgIG1vY2suIE5vdGUgdGhhdCB0aGlzIG1vY2sg
bWFrZXMgYW4gZWZmb3J0IHRvIHRlc3QKKyAgICAgICAgbWVzc2FnZS5weSBhbmQgY29udHJpYnV0
b3IucHksIGJ1dCBub3QgdGhlIHNoZWxsIHNjcmlwdCBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weToKKyAgICAgICAgKENvbW1hbmQubWFpbik6IEFjY2VwdCBhcmJpdHJhcnkgKiprd2FyZ3Mu
CisgICAgICAgIChGaW5kLm1haW4pOiBEaXR0by4KKyAgICAgICAgKENoZWNrb3V0Lm1haW4pOiBE
aXR0by4KKyAgICAgICAgKG1haW4pOiBBbGxvdyBjYWxsZXIgdG8gc3BlY2lmeSBhIHN0cmluZyB0
ZW1wbGF0ZSBmb3IgY2Fub25pY2FsIGlkZW50aWZpZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nh
bm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXpl
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9icmFuY2hfY29t
bWl0cyk6CisKIDIwMjAtMTItMTcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTjogWyBCaWdTdXIgXSAzIFBpY3R1cmVJblBpY3R1cmUgcmVsYXRl
ZCBBUEkgdGVzdHMgdGltaW5nIG91dApJbmRleDogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkocmV2aXNpb24gMjcwOTY4KQor
KysgVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw1ICs0Miw5
IEBAIGlmICdfX21haW5fXycgPT0gX19uYW1lX186CiAgICAgICAgICAgICBpZiBuaWNrIG5vdCBp
biBjb250cmlidXRvcnM6CiAgICAgICAgICAgICAgICAgY29udHJpYnV0b3JzW25pY2tdID0gYwog
Ci0gICAgc3lzLmV4aXQocHJvZ3JhbS5tYWluKHBhdGg9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykpCisgICAgc3lzLmV4aXQocHJvZ3JhbS5tYWlu
KAorICAgICAgICBwYXRoPW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgIGNvbnRy
aWJ1dG9ycz1jb250cmlidXRvcnMsCisgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J0Nhbm9u
aWNhbCBsaW5rOiBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy97fScsCisgICAgKSkKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHJldmlz
aW9uIDI3MDk2OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVw
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHNldHVwKAogICAgIGxpY2Vuc2U9
J01vZGlmaWVkIEJTRCcsCiAgICAgcGFja2FnZXM9WwogICAgICAgICAnd2Via2l0c2NtcHknLAor
ICAgICAgICAnd2Via2l0c2NtcHkuY2Fub25pY2FsaXplJywKICAgICAgICAgJ3dlYmtpdHNjbXB5
LmxvY2FsJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzJywKICAgICAgICAgJ3dlYmtpdHNj
bXB5Lm1vY2tzLmxvY2FsJywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAy
NzA5NjgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1w
b3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlw
IGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVS
TD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNiwgNCkKK3ZlcnNpb24gPSBWZXJz
aW9uKDAsIDcsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycs
IFZlcnNpb24oMCwgMTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90
b25pYycsIFZlcnNpb24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkJ
KHJldmlzaW9uIDI3MDk2OCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBAIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBzdHJpbmdfdXRpbHMKIGNsYXNzIENvbnRyaWJ1
dG9yKG9iamVjdCk6CiAgICAgR0lUX0FVVEhPUl9SRSA9IHJlLmNvbXBpbGUocidBdXRob3I6ICg/
UDxhdXRob3I+LiopIDwoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/PicpCiAgICAgQVVUT01B
VEVEX0NIRUNLSU5fUkUgPSByZS5jb21waWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8ZGV2
bnVsbD4nKQorICAgIFVOS05PV05fQVVUSE9SID0gcmUuY29tcGlsZShyJ0F1dGhvcjogKD9QPGF1
dGhvcj4uKikgPE5vbmU+JykKICAgICBTVk5fQVVUSE9SX1JFID0gcmUuY29tcGlsZShyJ3JcZCsg
XHwgKD9QPGVtYWlsPi4qKSBcfCAoP1A8ZGF0ZT4uKikgXHwgXGQrIGxpbmVzPycpCiAgICAgU1ZO
X1BBVENIX0ZST01fUkUgPSByZS5jb21waWxlKHInUGF0Y2ggYnkgKD9QPGF1dGhvcj4uKikgPCg/
UDxlbWFpbD4uKik+IG9uIFxkKy1cZCstXGQrJykKIApAQCAtMTExLDEyICsxMTIsMTIgQEAgY2xh
c3MgQ29udHJpYnV0b3Iob2JqZWN0KToKICAgICAgICAgZW1haWwgPSBOb25lCiAgICAgICAgIGF1
dGhvciA9IE5vbmUKIAotICAgICAgICBmb3IgZXhwcmVzc2lvbiBpbiBbY2xzLkdJVF9BVVRIT1Jf
UkUsIGNscy5TVk5fQVVUSE9SX1JFLCBjbHMuU1ZOX1BBVENIX0ZST01fUkUsIGNscy5BVVRPTUFU
RURfQ0hFQ0tJTl9SRV06CisgICAgICAgIGZvciBleHByZXNzaW9uIGluIFtjbHMuR0lUX0FVVEhP
Ul9SRSwgY2xzLlNWTl9BVVRIT1JfUkUsIGNscy5TVk5fUEFUQ0hfRlJPTV9SRSwgY2xzLkFVVE9N
QVRFRF9DSEVDS0lOX1JFLCBjbHMuVU5LTk9XTl9BVVRIT1JdOgogICAgICAgICAgICAgbWF0Y2gg
PSBleHByZXNzaW9uLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAg
ICAgICAgICBpZiAnYXV0aG9yJyBpbiBleHByZXNzaW9uLmdyb3VwaW5kZXg6CiAgICAgICAgICAg
ICAgICAgICAgIGF1dGhvciA9IG1hdGNoLmdyb3VwKCdhdXRob3InKQotICAgICAgICAgICAgICAg
ICAgICBpZiAnKG5vIGF1dGhvciknIGluIGF1dGhvciBvciAnQXV0b21hdGVkIENoZWNraW4nIGlu
IGF1dGhvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgJyhubyBhdXRob3IpJyBpbiBhdXRob3Ig
b3IgJ0F1dG9tYXRlZCBDaGVja2luJyBpbiBhdXRob3Igb3IgJ1Vua25vd24nIGluIGF1dGhvcjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IE5vbmUKICAgICAgICAgICAgICAgICBp
ZiAnZW1haWwnIGluIGV4cHJlc3Npb24uZ3JvdXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAg
ZW1haWwgPSBtYXRjaC5ncm91cCgnZW1haWwnKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5CShy
ZXZpc2lvbiAyNzA5NjgpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9wcm9ncmFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNs
YXNzIENvbW1hbmQob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoIid7fScgZG9lcyBub3QgaGF2ZSBhIGhlbHAgbWVzc2FnZSIpCiAKICAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNs
cywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRl
KCdObyBjb21tYW5kIHNwZWNpZmllZFxuJykKICAgICAgICAgcmV0dXJuIC0xCiAKQEAgLTgxLDcg
KzgxLDcgQEAgY2xhc3MgRmluZChDb21tYW5kKToKICAgICAgICAgKQogCiAgICAgQGNsYXNzbWV0
aG9kCi0gICAgZGVmIG1haW4oY2xzLCBhcmdzLCByZXBvc2l0b3J5KToKKyAgICBkZWYgbWFpbihj
bHMsIGFyZ3MsIHJlcG9zaXRvcnksICoqa3dhcmdzKToKICAgICAgICAgdHJ5OgogICAgICAgICAg
ICAgY29tbWl0ID0gcmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9n
PWFyZ3MuaW5jbHVkZV9sb2cpCiAgICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwg
VmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgpAQCAtMTQzLDcgKzE0Myw3IEBAIGNsYXNzIENoZWNr
b3V0KENvbW1hbmQpOgogICAgICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFp
bihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3Np
dG9yeSwgKiprd2FyZ3MpOgogICAgICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgogICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0
b3J5IikKICAgICAgICAgICAgIHJldHVybiAxCkBAIC0xNjIsNyArMTYyLDcgQEAgY2xhc3MgQ2hl
Y2tvdXQoQ29tbWFuZCk6CiAgICAgICAgIHJldHVybiAwCiAKIAotZGVmIG1haW4oYXJncz1Ob25l
LCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgorZGVmIG1haW4o
YXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlk
ZW50aWZpZXJfdGVtcGxhdGU9Tm9uZSk6CiAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1s
b2dnaW5nLldBUk5JTkcpCiAKICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdl
YmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCkBAIC0xODMsNyArMTgzLDkg
QEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogCiAgICAgc3VicGFy
c2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKIAot
ICAgIGZvciBwcm9ncmFtIGluIFtGaW5kLCBDaGVja291dF06CisgICAgZnJvbSB3ZWJraXRzY21w
eS5jYW5vbmljYWxpemUgaW1wb3J0IENhbm9uaWNhbGl6ZQorCisgICAgZm9yIHByb2dyYW0gaW4g
W0ZpbmQsIENoZWNrb3V0LCBDYW5vbmljYWxpemVdOgogICAgICAgICBzdWJwYXJzZXIgPSBzdWJw
YXJzZXJzLmFkZF9wYXJzZXIocHJvZ3JhbS5uYW1lLCBoZWxwPXByb2dyYW0uaGVscCkKICAgICAg
ICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhtYWluPXByb2dyYW0ubWFpbikKICAgICAgICAgcHJv
Z3JhbS5wYXJzZXIoc3VicGFyc2VyLCBsb2dnZXJzPWxvZ2dlcnMpCkBAIC0xOTUsNCArMTk3LDQg
QEAgZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogICAgIGVsc2U6CiAg
ICAgICAgIHJlcG9zaXRvcnkgPSBsb2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2VkLnJlcG9z
aXRvcnksIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMpCiAKLSAgICByZXR1cm4gcGFyc2VkLm1h
aW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkKKyAgICByZXR1cm4gcGFyc2Vk
Lm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1w
bGF0ZT1pZGVudGlmaWVyX3RlbXBsYXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nh
bm9uaWNhbGl6ZS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmls
ZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IGFyZ3VtZW50cywgcnVuLCBzdHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IGxvZworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3Mg
Q2Fub25pY2FsaXplKENvbW1hbmQpOgorICAgIG5hbWUgPSAnY2Fub25pY2FsaXplJworICAgIGhl
bHAgPSAnVGFrZSB0aGUgc2V0IG9mIGNvbW1pdHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gcHVz
aGVkIGFuZCBlZGl0IGhpc3RvcnkgdG8gbm9ybWFsaXplIHRoZSAnICtcCisgICAgICAgICAgICdj
b21taXR0ZXJzIHdpdGggZXhpc3RpbmcgY29udHJpYnV0b3IgbWFwcGluZyBhbmQgYWRkIGlkZW50
aWZpZXJzIHRvIGNvbW1pdCBtZXNzYWdlcycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBw
YXJzZXIoY2xzLCBwYXJzZXIsIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0g
YXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAg
IGxvZ2dlcnM9bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5n
IGFuZCBgZ2l0IHJlYmFzZWAgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApCisgICAg
ICAgIG91dHB1dF9hcmdzLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWlkZW50aWZpZXIn
LCAnLS1uby1pZGVudGlmaWVyJywKKyAgICAgICAgICAgIGhlbHA9J0FkZCBpbiB0aGUgaWRlbnRp
ZmllciB0byBjb21taXQgbWVzc2FnZXMsIHRydWUgYnkgZGVmYXVsdCcsCisgICAgICAgICAgICBh
Y3Rpb249YXJndW1lbnRzLk5vQWN0aW9uLAorICAgICAgICAgICAgZGVzdD0naWRlbnRpZmllcics
CisgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2Fy
Z3MuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJy0tcmVtb3RlJywKKyAgICAgICAgICAgIGhl
bHA9J0NvbXBhcmUgYWdhaW5zdCBhIGRpZmZlcmVudCByZW1vdGUnLAorICAgICAgICAgICAgZGVz
dD0ncmVtb3RlJywKKyAgICAgICAgICAgIGRlZmF1bHQ9J29yaWdpbicsCisgICAgICAgICkKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgaWRl
bnRpZmllcl90ZW1wbGF0ZT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCByZXBvc2l0
b3J5LnBhdGg6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdDYW5ub3QgY2Fub25pY2Fs
aXplIGNvbW1pdHMgb24gYSByZW1vdGUgcmVwb3NpdG9yeVxuJykKKyAgICAgICAgICAgIHJldHVy
biAxCisgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoJ0NvbW1pdHMgY2FuIG9ubHkgYmUgY2Fub25pY2FsaXplZCBvbiBhIEdpdCBy
ZXBvc2l0b3J5XG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBicmFuY2ggPSBy
ZXBvc2l0b3J5LmJyYW5jaAorICAgICAgICBpZiBub3QgYnJhbmNoOgorICAgICAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIGRldGVybWluZSBjdXJyZW50IGJyYW5jaFxuJykKKyAg
ICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXN1bHQgPSBydW4oWworICAgICAgICAgICAg
cmVwb3NpdG9yeS5leGVjdXRhYmxlKCksICdyZXYtbGlzdCcsCisgICAgICAgICAgICAnLS1jb3Vu
dCcsICctLW5vLW1lcmdlcycsCisgICAgICAgICAgICAne3JlbW90ZX0ve2JyYW5jaH0uLnticmFu
Y2h9Jy5mb3JtYXQocmVtb3RlPWFyZ3MucmVtb3RlLCBicmFuY2g9YnJhbmNoKSwKKyAgICAgICAg
XSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucGF0aCkKKyAgICAgICAgaWYg
cmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQg
dG8gZmluZCBsb2NhbCBjb21taXRzXG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAg
IGRpZmZlcmVuY2UgPSBpbnQocmVzdWx0LnN0ZG91dC5yc3RyaXAoKSkKKyAgICAgICAgaWYgZGlm
ZmVyZW5jZSA8PSAwOgorICAgICAgICAgICAgcHJpbnQoJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUg
ZWRpdGVkJykKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGxvZy53YXJuaW5nKCd7fSB0
byBiZSBlZGl0dGVkLi4uJy5mb3JtYXQoc3RyaW5nX3V0aWxzLnBsdXJhbGl6ZShkaWZmZXJlbmNl
LCAnY29tbWl0JykpKQorCisgICAgICAgIGJhc2UgPSByZXBvc2l0b3J5LmZpbmQoJ3t9fnt9Jy5m
b3JtYXQoYnJhbmNoLCBkaWZmZXJlbmNlKSkKKyAgICAgICAgbG9nLmluZm8oJ0Jhc2UgY29tbWl0
IGlzIHt9IChyZWYge30pJy5mb3JtYXQoYmFzZSwgYmFzZS5oYXNoKSkKKworICAgICAgICBsb2cu
ZGVidWcoJ1NhdmluZyBjb250cmlidXRvcnMgdG8gdGVtcCBmaWxlIHRvIGJlIHBpY2tlZCB1cCBi
eSBjaGlsZCBwcm9jZXNzZXMnKQorICAgICAgICBjb250cmlidXRvcnMgPSBvcy5wYXRoLmpvaW4o
dGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAne30tY29udHJpYnV0b3JzLmpzb24nLmZvcm1hdChvcy5n
ZXRwaWQoKSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihjb250cmlidXRv
cnMsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LmNvbnRyaWJ1dG9y
cy5zYXZlKGZpbGUpCisKKyAgICAgICAgICAgIG1lc3NhZ2VfZmlsdGVyID0gWworICAgICAgICAg
ICAgICAgICctLW1zZy1maWx0ZXInLAorICAgICAgICAgICAgICAgICd7fSB7fSB7fScuZm9ybWF0
KAorICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtZXNzYWdlLnB5Jyks
CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGUgb3IgJ0lkZW50aWZpZXI6
IHt9JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgXSBpZiBhcmdzLmlkZW50aWZp
ZXIgZWxzZSBbXQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgJ3cnKSBhcyBk
ZXZudWxsOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAg
ICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAnZmlsdGVyLWJyYW5jaCcsICct
ZicsCisgICAgICAgICAgICAgICAgICAgICctLWVudi1maWx0ZXInLCAnJyd7b3ZlcndyaXRlX21l
c3NhZ2V9Citjb21taXR0ZXJPdXRwdXQ9JCh7cHl0aG9ufSB7Y29tbWl0dGVyX3B5fSB7Y29udHJp
YnV0b3JfanNvbn0pCitLRVk9JycKK1ZBTFVFPScnCitmb3Igd29yZCBpbiAkY29tbWl0dGVyT3V0
cHV0OyBkbworICAgIGlmIFtbICR3b3JkID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICBpZiBb
WyAkS0VZID09IEdJVF8qIF1dIDsgdGhlbgorICAgICAgICAgICAge3NldHRpbmdfbWVzc2FnZX0K
KyAgICAgICAgICAgIHByaW50ZiAtdiAkS0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAx
KSl9fSIKKyAgICAgICAgICAgIEtFWT0nJworICAgICAgICAgICAgVkFMVUU9JycKKyAgICAgICAg
ZmkKKyAgICBmaQorICAgIGlmIFtbICIkS0VZIiA9PSAiIiBdXSA7IHRoZW4KKyAgICAgICAgS0VZ
PSIkd29yZCIKKyAgICBlbHNlCisgICAgICAgIFZBTFVFPSIkVkFMVUUkd29yZCAiCisgICAgZmkK
K2RvbmUKK2lmIFtbICRLRVkgPT0gR0lUXyogXV0gOyB0aGVuCisgICAge3NldHRpbmdfbWVzc2Fn
ZX0KKyAgICBwcmludGYgLXYgJEtFWSAiJHt7VkFMVUU6OiQoKCR7eyNWQUxVRX19IC0gMSkpfX0i
CitmaScnJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyd3JpdGVfbWVzc2Fn
ZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLklORk8gZWxzZSAnZWNobyAiT3ZlcndyaXRpbmcg
JEdJVF9DT01NSVQiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbj1zeXMuZXhlY3V0
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9weT1vcy5wYXRoLmpvaW4o
b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbW1pdHRlci5weScpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udHJpYnV0b3JfanNvbj1jb250cmlidXRvcnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJV
RyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKKyAgICAgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChi
cmFuY2gsIGJhc2UuaGFzaCldLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5w
YXRoLAorICAgICAgICAgICAgICAgICAgICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hfV0FS
TklORyc6ICcxJywgJ1BZVEhPTlBBVEgnOiAnOicuam9pbihzeXMucGF0aCl9LAorICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcg
ZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cubGV2
ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICkKKworICAg
ICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gbW9kaWZ5IGxvY2FsIGNvbW1pdCBtZXNzYWdlc1xu
JykKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAg
ICBvcy5yZW1vdmUoY29udHJpYnV0b3JzKQorCisgICAgICAgIHByaW50KCd7fSBzdWNjZXNzZnVs
bHkgY2Fub25pY2FsaXplZCEnLmZvcm1hdChzdHJpbmdfdXRpbHMucGx1cmFsaXplKGRpZmZlcmVu
Y2UsICdjb21taXQnKSkpCisKKyAgICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUv
Y29tbWl0dGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQg
cnVuCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwKKworRU1BSUxf
UkUgPSByZS5jb21waWxlKHInKD9QPGVtYWlsPlteQF0rQFteQF0rKShALiopPycpCisKKworZGVm
IGNhbm9uaWNhbGl6ZShuYW1lLCBlbWFpbCwgY29udHJpYnV0b3JzKToKKyAgICBtYXRjaCA9IEVN
QUlMX1JFLm1hdGNoKGVtYWlsKQorICAgIGlmIG1hdGNoOgorICAgICAgICBlbWFpbCA9IG1hdGNo
Lmdyb3VwKCdlbWFpbCcpCisKKyAgICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQoZW1h
aWwsIGNvbnRyaWJ1dG9ycy5nZXQoZW1haWwubG93ZXIoKSkpCisgICAgaWYgY29udHJpYnV0b3I6
CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBlbWFpbCBpZiBtYXRjaCBlbHNlIGNv
bnRyaWJ1dG9yLmVtYWlsCisgICAgY29udHJpYnV0b3IgPSBjb250cmlidXRvcnMuZ2V0KG5hbWUp
CisgICAgaWYgY29udHJpYnV0b3I6CisgICAgICAgIHJldHVybiBjb250cmlidXRvci5uYW1lLCBj
b250cmlidXRvci5lbWFpbAorICAgIHJldHVybiBuYW1lLCBlbWFpbAorCisKK2RlZiBtYWluKGNv
bnRyaWJ1dG9yX2ZpbGUpOgorICAgIFJFUE9TSVRPUllfUEFUSCA9IG9zLmVudmlyb24uZ2V0KCdP
TERQV0QnKQorICAgIEdJVF9DT01NSVQgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVCcpCisK
KyAgICB3aXRoIG9wZW4oY29udHJpYnV0b3JfZmlsZSwgJ3InKSBhcyBmaWxlOgorICAgICAgICBj
b250cmlidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nLmxvYWQoZmlsZSkKKworICAgIGF1dGhv
ciwgYXV0aG9yX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBvcy5lbnZpcm9uLmdldCgn
R0lUX0FVVEhPUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ0dJ
VF9BVVRIT1JfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBjb250cmlidXRvcnMsCisgICAgKQor
ICAgIGNvbW1pdHRlciwgY29tbWl0dGVyX2VtYWlsID0gY2Fub25pY2FsaXplKAorICAgICAgICBv
cy5lbnZpcm9uLmdldCgnR0lUX0NPTU1JVFRFUl9OQU1FJywgJ1Vua25vd24nKSwKKyAgICAgICAg
b3MuZW52aXJvbi5nZXQoJ0dJVF9DT01NSVRURVJfRU1BSUwnLCAnbnVsbCcpLAorICAgICAgICBj
b250cmlidXRvcnMsCisgICAgKQorCisgICAgIyBBdHRlbXB0IHRvIGV4dHJhY3QgcGF0Y2gtYnkK
KyAgICBpZiBhdXRob3JfZW1haWwgPT0gY29tbWl0dGVyX2VtYWlsIGFuZCBSRVBPU0lUT1JZX1BB
VEggYW5kIEdJVF9DT01NSVQ6CisgICAgICAgIGxvZyA9IHJ1bigKKyAgICAgICAgICAgIFtsb2Nh
bC5HaXQuZXhlY3V0YWJsZSgpLCAnbG9nJywgR0lUX0NPTU1JVCwgJy0xJ10sCisgICAgICAgICAg
ICBjd2Q9UkVQT1NJVE9SWV9QQVRILCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRm
LTgnLAorICAgICAgICApCisKKyAgICAgICAgcGF0Y2hfYnkgPSByZS5zZWFyY2goCisgICAgICAg
ICAgICByJ1xzK1BhdGNoIGJ5ICg/UDxhdXRob3I+W148XSspIFw8KD9QPGVtYWlsPltePF0rKVw+
Liogb24gXGQrLVxkKy1cZCsnLAorICAgICAgICAgICAgbG9nLnN0ZG91dCwKKyAgICAgICAgKQor
ICAgICAgICBpZiBwYXRjaF9ieToKKyAgICAgICAgICAgIGF1dGhvciwgYXV0aG9yX2VtYWlsID0g
Y2Fub25pY2FsaXplKAorICAgICAgICAgICAgICAgIHBhdGNoX2J5Lmdyb3VwKCdhdXRob3InKSwK
KyAgICAgICAgICAgICAgICBwYXRjaF9ieS5ncm91cCgnZW1haWwnKSwKKyAgICAgICAgICAgICAg
ICBjb250cmlidXRvcnMsCisgICAgICAgICAgICApCisKKyAgICBwcmludCh1J0dJVF9BVVRIT1Jf
TkFNRSB7fScuZm9ybWF0KGF1dGhvcikpCisgICAgcHJpbnQodSdHSVRfQVVUSE9SX0VNQUlMIHt9
Jy5mb3JtYXQoYXV0aG9yX2VtYWlsKSkKKyAgICBwcmludCh1J0dJVF9DT01NSVRURVJfTkFNRSB7
fScuZm9ybWF0KGNvbW1pdHRlcikpCisgICAgcHJpbnQodSdHSVRfQ09NTUlUVEVSX0VNQUlMIHt9
Jy5mb3JtYXQoY29tbWl0dGVyX2VtYWlsKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMV0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvY2Fub25pY2FsaXplL21lc3NhZ2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL21lc3Nh
Z2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcwor
aW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHNjbXB5LmxvY2FsIGltcG9ydCBHaXQKKworCitkZWYg
bWFpbihpbnB1dGZpbGUsIGlkZW50aWZpZXJfdGVtcGxhdGUpOgorICAgIFJFUE9TSVRPUllfUEFU
SCA9IG9zLmVudmlyb24uZ2V0KCdPTERQV0QnKQorICAgIEdJVF9DT01NSVQgPSBvcy5lbnZpcm9u
LmdldCgnR0lUX0NPTU1JVCcpCisKKyAgICBpZiBub3QgUkVQT1NJVE9SWV9QQVRIOgorICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gcmV0cmlldmUgcmVwb3NpdG9yeSBwYXRoXG4n
KQorICAgICAgICByZXR1cm4gLTEKKyAgICBpZiBub3QgR0lUX0NPTU1JVDoKKyAgICAgICAgc3lz
LnN0ZGVyci53cml0ZSgnRmFpbGVkIHRvIHJldHJpZXZlIGdpdCBoYXNoXG4nKQorICAgICAgICBy
ZXR1cm4gLTEKKworICAgIHJlcG9zaXRvcnkgPSBHaXQoUkVQT1NJVE9SWV9QQVRIKQorICAgIGNv
bW1pdCA9IHJlcG9zaXRvcnkuY29tbWl0KGhhc2g9R0lUX0NPTU1JVCkKKyAgICBpZiBub3QgY29t
bWl0OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gZmluZCAne30nIGluIHRo
ZSByZXBvc2l0b3J5Ii5mb3JtYXQoR0lUX0NPTU1JVCkpCisgICAgICAgIHJldHVybiAtMQorICAg
IGlmIG5vdCBjb21taXQuaWRlbnRpZmllciBvciBub3QgY29tbWl0LmJyYW5jaDoKKyAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGNvbXB1dGUgdGhlIGlkZW50aWZpZXIgZm9yICd7
fSciLmZvcm1hdChHSVRfQ09NTUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisKKyAgICBsaW5lcyA9
IFtdCisgICAgZm9yIGxpbmUgaW4gaW5wdXRmaWxlLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5l
cy5hcHBlbmQobGluZS5yc3RyaXAoKSkKKworICAgIGlkZW50aWZpZXJfaW5kZXggPSBsZW4obGlu
ZXMpCisgICAgaWYgaWRlbnRpZmllcl9pbmRleCBhbmQgcmVwb3NpdG9yeS5HSVRfU1ZOX1JFVklT
SU9OLm1hdGNoKGxpbmVzWy0xXSk6CisgICAgICAgIGlkZW50aWZpZXJfaW5kZXggLT0gMQorCisg
ICAgaWYgaWRlbnRpZmllcl9pbmRleCBhbmQgbGluZXNbaWRlbnRpZmllcl9pbmRleCAtIDFdLnN0
YXJ0c3dpdGgoaWRlbnRpZmllcl90ZW1wbGF0ZS5mb3JtYXQoJycpLnNwbGl0KCc6JylbMF0pOgor
ICAgICAgICBsaW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0gPSBpZGVudGlmaWVyX3RlbXBsYXRl
LmZvcm1hdChjb21taXQpCisgICAgZWxzZToKKyAgICAgICAgbGluZXMuaW5zZXJ0KGlkZW50aWZp
ZXJfaW5kZXgsIGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkpCisKKyAgICBmb3Ig
bGluZSBpbiBsaW5lczoKKyAgICAgICAgcHJpbnQobGluZSkKKworCitpZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLnN0ZGluLCBzeXMuYXJndlsxXSkpCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CShyZXZpc2lvbiAyNzA5Njgp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nr
cy9sb2NhbC9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBAIGltcG9ydCBv
cwogaW1wb3J0IHJlCiAKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCi1mcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcywgT3V0
cHV0Q2FwdHVyZSwgU3RyaW5nSU8KIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBDb21t
aXQsIENvbnRyaWJ1dG9yCitmcm9tIHdlYmtpdHNjbXB5LmNhbm9uaWNhbGl6ZS5jb21taXR0ZXIg
aW1wb3J0IG1haW4gYXMgY29tbWl0dGVyX21haW4KK2Zyb20gd2Via2l0c2NtcHkuY2Fub25pY2Fs
aXplLm1lc3NhZ2UgaW1wb3J0IG1haW4gYXMgbWVzc2FnZV9tYWluCiAKIAogY2xhc3MgR2l0KG1v
Y2tzLlN1YnByb2Nlc3MpOgpAQCAtNTgsNiArNjAsNyBAQCBjbGFzcyBHaXQobW9ja3MuU3VicHJv
Y2Vzcyk6CiAgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5yZXZpc2lvbiA9IE5vbmUKIAogICAg
ICAgICBzZWxmLmhlYWQgPSBzZWxmLmNvbW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1bLTFdCisg
ICAgICAgIHNlbGYucmVtb3RlcyA9IHsnb3JpZ2luL3t9Jy5mb3JtYXQoYnJhbmNoKTogY29tbWl0
c1stMV0gZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRlbXMoKX0KICAgICAg
ICAgc2VsZi50YWdzID0ge30KIAogICAgICAgICBpZiBnaXRfc3ZuOgpAQCAtMjMzLDYgKzIzNiwx
NCBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6CiAgICAgICAgICAgICAgICAgICAg
IG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKHJldHVybmNvZGU9MCkgaWYgc2VsZi5jaGVja291dChh
cmdzWzJdKSBlbHNlIG1vY2tzLlByb2Nlc3NDb21wbGV0aW9uKHJldHVybmNvZGU9MSkKICAgICAg
ICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCisgICAgICAgICAgICAgICAgc2VsZi5l
eGVjdXRhYmxlLCAnZmlsdGVyLWJyYW5jaCcsICctZicsCisgICAgICAgICAgICAgICAgY3dkPXNl
bGYucGF0aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJn
czogc2VsZi5maWx0ZXJfYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBhcmdzWy0xXSwKKyAg
ICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcl90ZW1wbGF0ZT0nICcuam9pbihhcmdzWy0yXS5z
cGxpdCgnICcpWzI6XSkgaWYgYXJnc1stM10gPT0gJy0tbXNnLWZpbHRlcicgZWxzZSBOb25lLAor
ICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zaGVsbD1hcmdzWzRdIGlmIGFyZ3NbM10g
PT0gJy0tZW52LWZpbHRlcicgYW5kIGFyZ3NbNF0gZWxzZSBOb25lLAorICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICksIG1vY2tzLlN1YnByb2Nlc3MuUm91dGUoCiAgICAgICAgICAgICAg
ICAgc2VsZi5leGVjdXRhYmxlLAogICAgICAgICAgICAgICAgIGN3ZD1zZWxmLnBhdGgsCiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbj1tb2Nrcy5Qcm9jZXNzQ29tcGxldGlvbigKQEAgLTI2NSwx
NiArMjc2LDIyIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVtm
b3VuZC5icmFuY2hfcG9pbnQgLSBkaWZmZXJlbmNlIC0gMV0KICAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQogCisgICAgICAgIHNvbWV0aGluZyA9IHN0cihzb21ldGhpbmcpCisgICAgICAgIGlm
ICcuLicgaW4gc29tZXRoaW5nOgorICAgICAgICAgICAgYSwgYiA9IHNvbWV0aGluZy5zcGxpdCgn
Li4nKQorICAgICAgICAgICAgYSA9IHNlbGYuZmluZChhKQorICAgICAgICAgICAgYiA9IHNlbGYu
ZmluZChiKQorICAgICAgICAgICAgcmV0dXJuIGIgaWYgYSBhbmQgYiBlbHNlIE5vbmUKKwogICAg
ICAgICBpZiBzb21ldGhpbmcgPT0gJ0hFQUQnOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGVh
ZAogICAgICAgICBpZiBzb21ldGhpbmcgaW4gc2VsZi5jb21taXRzLmtleXMoKToKICAgICAgICAg
ICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc29tZXRoaW5nXVstMV0KICAgICAgICAgaWYgc29tZXRo
aW5nIGluIHNlbGYudGFncy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50YWdzW3Nv
bWV0aGluZ10KKyAgICAgICAgaWYgc29tZXRoaW5nIGluIHNlbGYucmVtb3Rlcy5rZXlzKCk6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5yZW1vdGVzW3NvbWV0aGluZ10KIAotICAgICAgICBzb21l
dGhpbmcgPSBzdHIoc29tZXRoaW5nKQotICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZzoKLSAg
ICAgICAgICAgIHNvbWV0aGluZyA9IHNvbWV0aGluZy5zcGxpdCgnLi4nKVsxXQogICAgICAgICBm
b3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgogICAgICAgICAgICAg
aWYgYnJhbmNoID09IHNvbWV0aGluZzoKICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0c1st
MV0KQEAgLTI4NiwxMCArMzAzLDE2IEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUg
Y2xlYW4KICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBjb3VudChzZWxmLCBzb21ldGhp
bmcpOgotICAgICAgICBtYXRjaCA9IHNlbGYuZmluZChzb21ldGhpbmcpCi0gICAgICAgIGlmICcu
LicgaW4gc29tZXRoaW5nIG9yIG5vdCBtYXRjaC5icmFuY2hfcG9pbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gbWF0Y2guaWRlbnRpZmllcgotICAgICAgICByZXR1cm4gbWF0Y2guYnJhbmNoX3BvaW50
ICsgbWF0Y2guaWRlbnRpZmllcgorICAgICAgICBpZiAnLi4nIG5vdCBpbiBzb21ldGhpbmc6Cisg
ICAgICAgICAgICBtYXRjaCA9IHNlbGYuZmluZChzb21ldGhpbmcpCisgICAgICAgICAgICByZXR1
cm4gKG1hdGNoLmJyYW5jaF9wb2ludCBvciAwKSArIG1hdGNoLmlkZW50aWZpZXIKKworICAgICAg
ICBhLCBiID0gc29tZXRoaW5nLnNwbGl0KCcuLicpCisgICAgICAgIGEgPSBzZWxmLmZpbmQoYSkK
KyAgICAgICAgYiA9IHNlbGYuZmluZChiKQorICAgICAgICBpZiBhLmJyYW5jaF9wb2ludCA9PSBi
LmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJldHVybiBhYnMoYi5pZGVudGlmaWVyIC0gYS5p
ZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gYi5pZGVudGlmaWVyCiAKICAgICBkZWYgYnJhbmNo
ZXNfb24oc2VsZiwgaGFzaCk6CiAgICAgICAgIHJlc3VsdCA9IHNldCgpCkBAIC0zMTMsMyArMzM2
LDg5IEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAg
IHNlbGYuaGVhZCA9IGNvbW1pdAogICAgICAgICAgICAgc2VsZi5kZXRhY2hlZCA9IHNvbWV0aGlu
ZyBub3QgaW4gc2VsZi5jb21taXRzLmtleXMoKQogICAgICAgICByZXR1cm4gVHJ1ZSBpZiBjb21t
aXQgZWxzZSBGYWxzZQorCisgICAgZGVmIGZpbHRlcl9icmFuY2goc2VsZiwgcmFuZ2UsIGlkZW50
aWZpZXJfdGVtcGxhdGU9Tm9uZSwgZW52aXJvbm1lbnRfc2hlbGw9Tm9uZSk6CisgICAgICAgICMg
V2UgY2FuJ3QgZWZmZWN0aXZlbHkgbW9jayB0aGUgYmFzaCBzY3JpcHQgaW4gdGhlIGNvbW1hbmQs
IGJ1dCB3ZSBjYW4gbW9jayB0aGUgcHl0aG9uIGNvZGUgdGhhdAorICAgICAgICAjIHNjcmlwdCBj
YWxscywgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2dyYW0gbG9naWMgaXMuCisgICAgICAgIGhlYWQs
IHN0YXJ0ID0gcmFuZ2Uuc3BsaXQoJy4uLicpCisgICAgICAgIGhlYWQgPSBzZWxmLmZpbmQoaGVh
ZCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmZpbmQoc3RhcnQpCisKKyAgICAgICAgY29tbWl0c190
b19lZGl0ID0gW10KKyAgICAgICAgZm9yIGNvbW1pdCBpbiByZXZlcnNlZChzZWxmLmNvbW1pdHNb
aGVhZC5icmFuY2hdKToKKyAgICAgICAgICAgIGlmIGNvbW1pdC5icmFuY2ggPT0gc3RhcnQuYnJh
bmNoIGFuZCBjb21taXQuaWRlbnRpZmllciA8PSBzdGFydC5pZGVudGlmaWVyOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBjb21taXRzX3RvX2VkaXQuaW5zZXJ0KDAsIGNvbW1p
dCkKKyAgICAgICAgaWYgaGVhZC5icmFuY2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAg
ICAgICAgIGZvciBjb21taXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9i
cmFuY2hdWzpoZWFkLmJyYW5jaF9wb2ludF0pOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5p
ZGVudGlmaWVyIDw9IHN0YXJ0LmlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICAgICAgY29tbWl0c190b19lZGl0Lmluc2VydCgwLCBjb21taXQpCisKKyAg
ICAgICAgc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICBvcmlnaW5hbF9lbnYgPSB7a2V5OiBv
cy5lbnZpcm9uLmdldCgnT0xEUFdEJykgZm9yIGtleSBpbiBbCisgICAgICAgICAgICAnT0xEUFdE
JywgJ0dJVF9DT01NSVQnLAorICAgICAgICAgICAgJ0dJVF9BVVRIT1JfTkFNRScsICdHSVRfQVVU
SE9SX0VNQUlMJywKKyAgICAgICAgICAgICdHSVRfQ09NTUlUVEVSX05BTUUnLCAnR0lUX0NPTU1J
VFRFUl9FTUFJTCcsCisgICAgICAgIF19CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY291
bnQgPSAwCisgICAgICAgICAgICBvcy5lbnZpcm9uWydPTERQV0QnXSA9IHNlbGYucGF0aAorICAg
ICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzX3RvX2VkaXQ6CisgICAgICAgICAgICAgICAg
Y291bnQgKz0gMQorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9DT01NSVQnXSA9IGNv
bW1pdC5oYXNoCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0FVVEhPUl9OQU1FJ10g
PSBjb21taXQuYXV0aG9yLm5hbWUKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfQVVU
SE9SX0VNQUlMJ10gPSBjb21taXQuYXV0aG9yLmVtYWlsCisgICAgICAgICAgICAgICAgb3MuZW52
aXJvblsnR0lUX0NPTU1JVFRFUl9OQU1FJ10gPSBjb21taXQuYXV0aG9yLm5hbWUKKyAgICAgICAg
ICAgICAgICBvcy5lbnZpcm9uWydHSVRfQ09NTUlUVEVSX0VNQUlMJ10gPSBjb21taXQuYXV0aG9y
LmVtYWlsCisKKyAgICAgICAgICAgICAgICBzdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAg
ICAgICdSZXdyaXRlIHtoYXNofSAoe2NvdW50fS97dG90YWx9KSAoLS0tIHNlY29uZHMgcGFzc2Vk
LCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzaD1jb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PWNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw9bGVuKGNvbW1pdHNfdG9fZWRpdCks
CisgICAgICAgICAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgICAgICBpZiBpZGVudGlmaWVy
X3RlbXBsYXRlOgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlZmlsZSA9IFN0cmluZ0lPKCkK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZWZpbGUud3JpdGUoY29tbWl0Lm1lc3NhZ2UpCisg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VmaWxlLnNlZWsoMCkKKyAgICAgICAgICAgICAgICAg
ICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlX21haW4obWVzc2FnZWZpbGUsIGlkZW50aWZpZXJfdGVtcGxhdGUpCisgICAg
ICAgICAgICAgICAgICAgIGxpbmVzID0gY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRs
aW5lcygpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVzWy0xXS5zdGFydHN3aXRoKCdnaXQt
c3ZuLWlkOiBodHRwczovL3N2bicpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucG9w
KC0xKQorICAgICAgICAgICAgICAgICAgICBjb21taXQubWVzc2FnZSA9ICdcbicuam9pbihsaW5l
cykKKworICAgICAgICAgICAgICAgIGlmIG5vdCBlbnZpcm9ubWVudF9zaGVsbDoKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2gocidlY2hv
ICJPdmVyd3JpdGluZycsIGVudmlyb25tZW50X3NoZWxsKToKKyAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0LndyaXRlKCdPdmVyd3JpdGluZyB7fVxuJy5mb3JtYXQoY29tbWl0Lmhhc2gpKQorCisg
ICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocicoP1A8anNvbj5cUytcLmpzb24pJywg
ZW52aXJvbm1lbnRfc2hlbGwpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAg
ICAgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAg
ICAgICAgICAgICAgY29tbWl0dGVyX21haW4obWF0Y2guZ3JvdXAoJ2pzb24nKSkKKyAgICAgICAg
ICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIGxpbmUgaW4gY2FwdHVyZWQuc3Rkb3V0LnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9z
LmVudmlyb25bbGluZS5zcGxpdCgnICcpWzBdXSA9ICcgJy5qb2luKGxpbmUuc3BsaXQoJyAnKVsx
Ol0pCisKKyAgICAgICAgICAgICAgICBjb21taXQuYXV0aG9yID0gQ29udHJpYnV0b3IobmFtZT1v
cy5lbnZpcm9uWydHSVRfQVVUSE9SX05BTUUnXSwgZW1haWxzPVtvcy5lbnZpcm9uWydHSVRfQVVU
SE9SX0VNQUlMJ11dKQorCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKHInZWNobyAiXHMr
JywgZW52aXJvbm1lbnRfc2hlbGwpOgorICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIFsn
R0lUX0FVVEhPUl9OQU1FJywgJ0dJVF9BVVRIT1JfRU1BSUwnLCAnR0lUX0NPTU1JVFRFUl9OQU1F
JywgJ0dJVF9DT01NSVRURVJfRU1BSUwnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91
dC53cml0ZSgnICAgIHt9PXt9XG4nLmZvcm1hdChrZXksIG9zLmVudmlyb25ba2V5XSkpCisKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG9yaWdpbmFsX2Vu
di5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgICAgICBy
ZXR1cm4gbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICByZXR1cm5jb2RlPTAs
CisgICAgICAgICAgICBzdGRvdXQ9c3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2Fu
b25pY2FsaXplX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Rlc3QvY2Fub25pY2FsaXplX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjAwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUK
K2Zyb20gd2Via2l0Y29yZXB5Lm1vY2tzIGltcG9ydCBUaW1lIGFzIE1vY2tUaW1lCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBwcm9ncmFtLCBtb2NrcywgbG9jYWwsIENvbW1pdCwgQ29udHJpYnV0
b3IKKworCitjbGFzcyBUZXN0Q2Fub25pY2FsaXplKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBw
YXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgor
ICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxv
Y2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMSwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUn
LCksCisgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICApKQorCisg
ICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0u
bWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywpLAorICAgICAgICAg
ICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgKSkKKworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnTm8gbG9jYWwgY29tbWl0cyB0
byBiZSBlZGl0ZWRcbicpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKHNlbGYp
OgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwu
R2l0KHNlbGYucGF0aCkgYXMgbW9jaywgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAg
ICAgICAgICAgY29udGlyYnV0b3JzID0gQ29udHJpYnV0b3IuTWFwcGluZygpCisgICAgICAgICAg
ICBjb250aXJidXRvcnMuY3JlYXRlKCdcdTAxN2RhbiBEb2Jlclx1MDE2MWVrJywgJ3pkb2JlcnNl
a0BpZ2FsaWEuY29tJykKKworICAgICAgICAgICAgbW9jay5jb21taXRzW21vY2suZGVmYXVsdF9i
cmFuY2hdLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nMzhlYTUwZDI4YWUz
OTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZicsCisgICAgICAgICAgICAgICAgYnJhbmNoPW1v
Y2suZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdc
dTAxN2RhbiBEb2Jlclx1MDE2MWVrJywgZW1haWxzPVsnemRvYmVyc2VrQGlnYWxpYS5jb20nXSks
CisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNvbW1pdHNbbW9jay5kZWZhdWx0X2Jy
YW5jaF1bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAx
NjY4MDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBjb21taXRcbicsCisgICAgICAg
ICAgICApKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigK
KyAgICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywgJy12JywpLAorICAgICAgICAg
ICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250
aXJidXRvcnMsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcl90ZW1wbGF0ZT0nQ2Fub25pY2Fs
IGxpbms6IGh0dHBzOi8vY29tbWl0cy53ZWJraXQub3JnL3t9JywKKyAgICAgICAgICAgICkpCisK
KyAgICAgICAgICAgIGNvbW1pdCA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9
bW9jay5kZWZhdWx0X2JyYW5jaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0
LmF1dGhvciwgY29udGlyYnV0b3JzWyd6ZG9iZXJzZWtAaWdhbGlhLmNvbSddKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQubWVzc2FnZSwgJ05ldyBjb21taXRcbkNhbm9uaWNh
bCBsaW5rOiBodHRwczovL2NvbW1pdHMud2Via2l0Lm9yZy81QG1haW4nKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwK
KyAgICAgICAgICAgICdSZXdyaXRlIDM4ZWE1MGQyOGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2
Mjg3MWYgKDEvMSkgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQp
XG4nCisgICAgICAgICAgICAnT3ZlcndyaXRpbmcgMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNm
YjIxZjFjMjYyODcxZlxuJworICAgICAgICAgICAgJzEgY29tbWl0IHN1Y2Nlc3NmdWxseSBjYW5v
bmljYWxpemVkIVxuJywKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXhpc3RpbmdfaWRlbnRp
ZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQsIG1v
Y2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2bigpLCBNb2Nr
VGltZToKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcoKQor
ICAgICAgICAgICAgY29udGlyYnV0b3JzLmNyZWF0ZSgnSm9uYXRoYW4gQmVkYXJkJywgJ2piZWRh
cmRAYXBwbGUuY29tJykKKworICAgICAgICAgICAgbW9jay5jb21taXRzW21vY2suZGVmYXVsdF9i
cmFuY2hdLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD0nMzhlYTUwZDI4YWUz
OTRjOWM4YjgwZTEzYzNmYjIxZjFjMjYyODcxZicsCisgICAgICAgICAgICAgICAgYnJhbmNoPW1v
Y2suZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdK
b25hdGhhbiBCZWRhcmQnLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVstMV0u
aWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjgwMDAsCisg
ICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdFxuSWRlbnRpZmllcjoge31Ae30nLmZv
cm1hdCgKKyAgICAgICAgICAgICAgICAgICAgbW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFu
Y2hdWy0xXS5pZGVudGlmaWVyICsgMSwKKyAgICAgICAgICAgICAgICAgICAgbW9jay5kZWZhdWx0
X2JyYW5jaCwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKSkKKworICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJn
cz0oJ2Nhbm9uaWNhbGl6ZScsICctdicsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0
aCwKKyAgICAgICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAg
ICAgKSkKKworICAgICAgICAgICAgY29tbWl0ID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0
KGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb21taXQuYXV0aG9yLCBjb250aXJidXRvcnNbJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5tZXNzYWdlLCAnTmV3IGNvbW1pdFxuSWRl
bnRpZmllcjogNUBtYWluJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAnUmV3cml0ZSAzOGVh
NTBkMjhhZTM5NGM5YzhiODBlMTNjM2ZiMjFmMWMyNjI4NzFmICgxLzEpICgtLS0gc2Vjb25kcyBw
YXNzZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAgICAgJ092ZXJ3cml0
aW5nIDM4ZWE1MGQyOGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWZcbicKKyAgICAgICAg
ICAgICcxIGNvbW1pdCBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkK
KworICAgIGRlZiB0ZXN0X2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVy
ZSgpIGFzIGNhcHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUp
IGFzIG1vY2ssIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZToKKyAgICAgICAgICAgIGNvbnRp
cmJ1dG9ycyA9IENvbnRyaWJ1dG9yLk1hcHBpbmcoKQorICAgICAgICAgICAgY29udGlyYnV0b3Jz
LmNyZWF0ZSgnSm9uYXRoYW4gQmVkYXJkJywgJ2piZWRhcmRAYXBwbGUuY29tJykKKworICAgICAg
ICAgICAgbW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdLmFwcGVuZChDb21taXQoCisg
ICAgICAgICAgICAgICAgaGFzaD0nNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2OTk5NGUxMTNkOTc5ZDIx
NDhhYycsCisgICAgICAgICAgICAgICAgYnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gsCisgICAg
ICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVtYWls
cz1bJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9bW9j
ay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdWy0xXS5pZGVudGlmaWVyICsgMSwKKyAgICAg
ICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2ODAwMCwKKyAgICAgICAgICAgICAgICByZXZpc2lv
bj05LAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBjb21taXRcbicsCisgICAgICAgICAg
ICApKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAg
ICAgICAgICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywgJy12dicpLAorICAgICAgICAgICAg
ICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250aXJi
dXRvcnMsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBjb21taXQgPSBsb2NhbC5HaXQo
c2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNvbnRpcmJ1dG9yc1snamJlZGFyZEBh
cHBsZS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAg
ICAgY29tbWl0Lm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgJ05ldyBjb21taXRcbicKKyAgICAg
ICAgICAgICAgICAnSWRlbnRpZmllcjogNUBtYWluXG4nCisgICAgICAgICAgICAgICAgJ3N2bi1p
ZDogaHR0cHM6Ly9zdm4uZXhhbXBsZS5vcmcvcmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDkg
MjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJywKKyAgICAgICAgICAgICkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0Lmdl
dHZhbHVlKCksCisgICAgICAgICAgICAnUmV3cml0ZSA3NjY2MDkyNzZmZTIwMWU3Y2UyYzY5OTk0
ZTExM2Q5NzlkMjE0OGFjICgxLzEpICgtLS0gc2Vjb25kcyBwYXNzZWQsIHJlbWFpbmluZyAtLS0g
cHJlZGljdGVkKVxuJworICAgICAgICAgICAgJ092ZXJ3cml0aW5nIDc2NjYwOTI3NmZlMjAxZTdj
ZTJjNjk5OTRlMTEzZDk3OWQyMTQ4YWNcbicKKyAgICAgICAgICAgICcgICAgR0lUX0FVVEhPUl9O
QU1FPUpvbmF0aGFuIEJlZGFyZFxuJworICAgICAgICAgICAgJyAgICBHSVRfQVVUSE9SX0VNQUlM
PWpiZWRhcmRAYXBwbGUuY29tXG4nCisgICAgICAgICAgICAnICAgIEdJVF9DT01NSVRURVJfTkFN
RT1Kb25hdGhhbiBCZWRhcmRcbicKKyAgICAgICAgICAgICcgICAgR0lUX0NPTU1JVFRFUl9FTUFJ
TD1qYmVkYXJkQGFwcGxlLmNvbVxuJworICAgICAgICAgICAgJzEgY29tbWl0IHN1Y2Nlc3NmdWxs
eSBjYW5vbmljYWxpemVkIVxuJywKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYnJhbmNoX2Nv
bW1pdHMoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBt
b2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9j
a1RpbWU6CisgICAgICAgICAgICBjb250aXJidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkK
KyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVk
YXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAgICAgIGxvY2FsLkdpdChzZWxmLnBhdGgpLmNoZWNr
b3V0KCdicmFuY2gtYScpCisgICAgICAgICAgICBtb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ10uYXBw
ZW5kKENvbW1pdCgKKyAgICAgICAgICAgICAgICBoYXNoPSdmOTMxMzhlM2JmMWQ1ZWNjYTI1ZmMw
ODQ0YjdhMmE3OGI4ZTAwYWFlJywKKyAgICAgICAgICAgICAgICBicmFuY2g9J2JyYW5jaC1hJywK
KyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ2piZWRhcmRAYXBwbGUuY29tJywg
ZW1haWxzPVsnamJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgYnJhbmNoX3Bv
aW50PW1vY2suY29tbWl0c1snYnJhbmNoLWEnXVstMV0uYnJhbmNoX3BvaW50LAorICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXI9bW9jay5jb21taXRzWydicmFuY2gtYSddWy0xXS5pZGVudGlmaWVy
ICsgMSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2ODAwMCwKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlPSdOZXcgY29tbWl0IDFcbicsCisgICAgICAgICAgICApKQorICAgICAgICAg
ICAgbW9jay5jb21taXRzWydicmFuY2gtYSddLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAg
ICAgaGFzaD0nMDE0OGMwZGYwZmFmMjQ4YWExMzNkNmQ1YWQ5MTFkN2NiMWI1NmE1YicsCisgICAg
ICAgICAgICAgICAgYnJhbmNoPSdicmFuY2gtYScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNv
bnRyaWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29t
J10pLAorICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludD1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1h
J11bLTFdLmJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29t
bWl0c1snYnJhbmNoLWEnXVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGlt
ZXN0YW1wPTE2MDE2NjkwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdCAy
XG4nLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBw
cm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNhbGl6ZScsICksCisg
ICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29udHJpYnV0
b3JzPWNvbnRpcmJ1dG9ycywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdF9h
ID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5jaD0nYnJhbmNoLWF+MScpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9hLmF1dGhvciwgY29udGlyYnV0b3JzWydq
YmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRf
YS5tZXNzYWdlLCAnTmV3IGNvbW1pdCAxXG5JZGVudGlmaWVyOiAyLjNAYnJhbmNoLWEnKQorCisg
ICAgICAgICAgICBjb21taXRfYiA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9
J2JyYW5jaC1hJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0X2IuYXV0aG9y
LCBjb250aXJidXRvcnNbJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNvbW1pdF9iLm1lc3NhZ2UsICdOZXcgY29tbWl0IDJcbklkZW50aWZpZXI6IDIu
NEBicmFuY2gtYScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNh
cHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3JpdGUgZjkzMTM4ZTNi
ZjFkNWVjY2EyNWZjMDg0NGI3YTJhNzhiOGUwMGFhZSAoMS8yKSAoLS0tIHNlY29uZHMgcGFzc2Vk
LCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdSZXdyaXRlIDAxNDhj
MGRmMGZhZjI0OGFhMTMzZDZkNWFkOTExZDdjYjFiNTZhNWIgKDIvMikgKC0tLSBzZWNvbmRzIHBh
c3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4nCisgICAgICAgICAgICAnMiBjb21taXRz
IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIVxuJywKKyAgICAgICAgKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417028</attachid>
            <date>2021-01-05 13:11:51 -0800</date>
            <delta_ts>2021-01-05 22:06:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20210105131150.patch</filename>
            <type>text/plain</type>
            <size>40029</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTE2MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEyLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBjb21tYW5kIHRvIGNhbm9uaWNhbGl6ZSB1
bnB1c2hlZCBjb21taXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9naXQt
d2Via2l0OiBTcGVjaWZ5IHdlYi1zZXJ2aWNlIGZvciBjYW5vbmljYWwgaWRlbnRpZmllciB0cmFu
c2xhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5w
eTogQWRkIGNhbm9uaWNhbGl6ZSBkaXJlY3RvcnkgdG8gcGFja2FnZS4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2
ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L2Nhbm9uaWNhbGl6ZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5OiBBZGRlZC4KKyAg
ICAgICAgKENhbm9uaWNhbGl6ZSk6IENvbW1hbmQgdG8gZWRpdCBoaXN0b3J5IG9mIHVucHVzaGVk
IGNvbW1pdHMgb24gYSBicmFuY2guCisgICAgICAgIChDYW5vbmljYWxpemUucGFyc2VyKToKKyAg
ICAgICAgKENhbm9uaWNhbGl6ZS5tYWluKTogQ2FsbCBgZ2l0IGZpbHRlci1icmFuY2hgIHRvIGVk
aXQgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvcnNoaXAKKyAgICAgICAgb2YgdW5wdXNoZWQgY29t
bWl0cy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9jYW5vbmljYWxpemUvY29tbWl0dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNhbm9uaWNhbGl6
ZSk6IEdpdmVuIGEgbmFtZSwgZW1haWwgYW5kIGEgY29udHJpYnV0b3IgbWFwcGluZywgcmV0dXJu
IGEgY2Fub25pY2FsIG5hbWUKKyAgICAgICAgYW5kIGVtYWlsIGZvciB0aGUgZ2l2ZW4gYXV0aG9y
IG9yIGNvbW1pdHRlci4KKyAgICAgICAgKG1haW4pOiBQcmludCBvdXQgdGhlIGNhbm9uaWNhbCBh
dXRob3IgYW5kIGNvbW1pdHRlciB0byBiZSBwYXJzZWQgYnkgYGdpdCBmaWx0ZXItYnJhbmNoYC4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5v
bmljYWxpemUvbWVzc2FnZS5weTogQWRkZWQuCisgICAgICAgIChtYWluKTogQWRkIHRoZSBjYW5v
bmljYWwgaWRlbnRpZmllciB0byBhIGNvbW1pdCBtZXNzYWdlLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1dG9yLnB5OgorICAgICAg
ICAoQ29udHJpYnV0b3IpOiBBZGQgdW5rbm93biBhdXRob3IgcmVnZXguCisgICAgICAgIChDb250
cmlidXRvci5mcm9tX3NjbV9sb2cpOgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5fX2lu
aXRfXyk6IEFkZCBgZ2l0IGZpbHRlci1icmFuY2hgIG1vY2suIE5vdGUgdGhhdCB0aGlzIG1vY2sg
bWFrZXMgYW4gZWZmb3J0IHRvIHRlc3QKKyAgICAgICAgbWVzc2FnZS5weSBhbmQgY29udHJpYnV0
b3IucHksIGJ1dCBub3QgdGhlIHNoZWxsIHNjcmlwdCBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS5weToKKyAgICAgICAgKENvbW1hbmQubWFpbik6IEFjY2VwdCBhcmJpdHJhcnkgKiprd2FyZ3Mu
CisgICAgICAgIChGaW5kLm1haW4pOiBEaXR0by4KKyAgICAgICAgKENoZWNrb3V0Lm1haW4pOiBE
aXR0by4KKyAgICAgICAgKG1haW4pOiBBbGxvdyBjYWxsZXIgdG8gc3BlY2lmeSBhIHN0cmluZyB0
ZW1wbGF0ZSBmb3IgY2Fub25pY2FsIGlkZW50aWZpZXJzIGluIGNvbW1pdCBtZXNzYWdlcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nh
bm9uaWNhbGl6ZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q2Fub25pY2FsaXpl
KToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9pbnZhbGlkKToKKyAgICAgICAgKFRl
c3RDYW5vbmljYWxpemUudGVzdF9ub19jb21taXRzKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxp
emUudGVzdF9mb3JtYXRlZF9pZGVudGlmaWVyKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUu
dGVzdF9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RDYW5vbmljYWxpemUudGVzdF9icmFuY2hfY29t
bWl0cyk6CisKIDIwMjEtMDEtMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2ZXJ0IHBhcnQgb2YgaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvcjI3MTE1
OApJbmRleDogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvZ2l0LXdlYmtpdAkocmV2aXNpb24gMjcxMTYzKQorKysgVG9vbHMvU2NyaXB0cy9naXQt
d2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw1ICs0Miw5IEBAIGlmICdfX21haW5fXycgPT0g
X19uYW1lX186CiAgICAgICAgICAgICBpZiBuaWNrIG5vdCBpbiBjb250cmlidXRvcnM6CiAgICAg
ICAgICAgICAgICAgY29udHJpYnV0b3JzW25pY2tdID0gYwogCi0gICAgc3lzLmV4aXQocHJvZ3Jh
bS5tYWluKHBhdGg9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgY29udHJpYnV0b3JzPWNvbnRy
aWJ1dG9ycykpCisgICAgc3lzLmV4aXQocHJvZ3JhbS5tYWluKAorICAgICAgICBwYXRoPW9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250cmlidXRvcnMs
CisgICAgICAgIGlkZW50aWZpZXJfdGVtcGxhdGU9J0Nhbm9uaWNhbCBsaW5rOiBodHRwczovL2Nv
bW1pdHMud2Via2l0Lm9yZy97fScsCisgICAgKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHJldmlzaW9uIDI3MTE2MykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC01MCw2ICs1MCw3IEBAIHNldHVwKAogICAgIGxpY2Vuc2U9J01vZGlmaWVkIEJTRCcsCiAgICAg
cGFja2FnZXM9WwogICAgICAgICAnd2Via2l0c2NtcHknLAorICAgICAgICAnd2Via2l0c2NtcHku
Y2Fub25pY2FsaXplJywKICAgICAgICAgJ3dlYmtpdHNjbXB5LmxvY2FsJywKICAgICAgICAgJ3dl
YmtpdHNjbXB5Lm1vY2tzJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzLmxvY2FsJywKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzExNjMpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQ
bGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5
IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lv
biA9IFZlcnNpb24oMCwgNiwgNCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDcsIDApCiAKIEF1dG9J
bnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycsIFZlcnNpb24oMCwgMTUsIDApKSkK
IEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90b25pYycsIFZlcnNpb24oMSwgNSkp
KQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
Y29udHJpYnV0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29udHJpYnV0b3IucHkJKHJldmlzaW9uIDI3MTE2MykKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbnRyaWJ1
dG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIGZyb20gd2Via2l0Y29yZXB5
IGltcG9ydCBzdHJpbmdfdXRpbHMKIGNsYXNzIENvbnRyaWJ1dG9yKG9iamVjdCk6CiAgICAgR0lU
X0FVVEhPUl9SRSA9IHJlLmNvbXBpbGUocidBdXRob3I6ICg/UDxhdXRob3I+LiopIDwoP1A8ZW1h
aWw+W15AXStAW15AXSspKEAuKik/PicpCiAgICAgQVVUT01BVEVEX0NIRUNLSU5fUkUgPSByZS5j
b21waWxlKHInQXV0aG9yOiAoP1A8YXV0aG9yPi4qKSA8ZGV2bnVsbD4nKQorICAgIFVOS05PV05f
QVVUSE9SID0gcmUuY29tcGlsZShyJ0F1dGhvcjogKD9QPGF1dGhvcj4uKikgPE5vbmU+JykKICAg
ICBTVk5fQVVUSE9SX1JFID0gcmUuY29tcGlsZShyJ3JcZCsgXHwgKD9QPGVtYWlsPi4qKSBcfCAo
P1A8ZGF0ZT4uKikgXHwgXGQrIGxpbmVzPycpCiAgICAgU1ZOX1BBVENIX0ZST01fUkUgPSByZS5j
b21waWxlKHInUGF0Y2ggYnkgKD9QPGF1dGhvcj4uKikgPCg/UDxlbWFpbD4uKik+IG9uIFxkKy1c
ZCstXGQrJykKIApAQCAtMTExLDEyICsxMTIsMTIgQEAgY2xhc3MgQ29udHJpYnV0b3Iob2JqZWN0
KToKICAgICAgICAgZW1haWwgPSBOb25lCiAgICAgICAgIGF1dGhvciA9IE5vbmUKIAotICAgICAg
ICBmb3IgZXhwcmVzc2lvbiBpbiBbY2xzLkdJVF9BVVRIT1JfUkUsIGNscy5TVk5fQVVUSE9SX1JF
LCBjbHMuU1ZOX1BBVENIX0ZST01fUkUsIGNscy5BVVRPTUFURURfQ0hFQ0tJTl9SRV06CisgICAg
ICAgIGZvciBleHByZXNzaW9uIGluIFtjbHMuR0lUX0FVVEhPUl9SRSwgY2xzLlNWTl9BVVRIT1Jf
UkUsIGNscy5TVk5fUEFUQ0hfRlJPTV9SRSwgY2xzLkFVVE9NQVRFRF9DSEVDS0lOX1JFLCBjbHMu
VU5LTk9XTl9BVVRIT1JdOgogICAgICAgICAgICAgbWF0Y2ggPSBleHByZXNzaW9uLm1hdGNoKGxp
bmUpCiAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgICBpZiAnYXV0aG9yJyBp
biBleHByZXNzaW9uLmdyb3VwaW5kZXg6CiAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IG1h
dGNoLmdyb3VwKCdhdXRob3InKQotICAgICAgICAgICAgICAgICAgICBpZiAnKG5vIGF1dGhvcikn
IGluIGF1dGhvciBvciAnQXV0b21hdGVkIENoZWNraW4nIGluIGF1dGhvcjoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgJyhubyBhdXRob3IpJyBpbiBhdXRob3Igb3IgJ0F1dG9tYXRlZCBDaGVja2lu
JyBpbiBhdXRob3Igb3IgJ1Vua25vd24nIGluIGF1dGhvcjoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dGhvciA9IE5vbmUKICAgICAgICAgICAgICAgICBpZiAnZW1haWwnIGluIGV4cHJlc3Np
b24uZ3JvdXBpbmRleDoKICAgICAgICAgICAgICAgICAgICAgZW1haWwgPSBtYXRjaC5ncm91cCgn
ZW1haWwnKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcHJvZ3JhbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5CShyZXZpc2lvbiAyNzExNjMpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIENvbW1hbmQob2JqZWN0KToK
ICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIid7fScgZG9lcyBub3QgaGF2
ZSBhIGhlbHAgbWVzc2FnZSIpCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMs
IGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwg
Kiprd2FyZ3MpOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmll
ZFxuJykKICAgICAgICAgcmV0dXJuIC0xCiAKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgRmluZChD
b21tYW5kKToKICAgICAgICAgKQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1haW4oY2xz
LCBhcmdzLCByZXBvc2l0b3J5KToKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnks
ICoqa3dhcmdzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9y
eS5maW5kKGFyZ3MuYXJndW1lbnRbMF0sIGluY2x1ZGVfbG9nPWFyZ3MuaW5jbHVkZV9sb2cpCiAg
ICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikgYXMgZXhjZXB0
aW9uOgpAQCAtMTQzLDcgKzE0Myw3IEBAIGNsYXNzIENoZWNrb3V0KENvbW1hbmQpOgogICAgICAg
ICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRv
cnkpOgorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgKiprd2FyZ3MpOgogICAg
ICAgICBpZiBub3QgcmVwb3NpdG9yeS5wYXRoOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiQ2Fubm90IGNoZWNrb3V0IG9uIHJlbW90ZSByZXBvc2l0b3J5IikKICAgICAgICAgICAgIHJl
dHVybiAxCkBAIC0xNjIsNyArMTYyLDcgQEAgY2xhc3MgQ2hlY2tvdXQoQ29tbWFuZCk6CiAgICAg
ICAgIHJldHVybiAwCiAKIAotZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUsIGxvZ2dlcnM9
Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgorZGVmIG1haW4oYXJncz1Ob25lLCBwYXRoPU5vbmUs
IGxvZ2dlcnM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUsIGlkZW50aWZpZXJfdGVtcGxhdGU9Tm9u
ZSk6CiAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLldBUk5JTkcpCiAKICAg
ICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdlYmtpdGNvcmVweV9sb2csICBsb2dd
ICsgKGxvZ2dlcnMgb3IgW10pCkBAIC0xODMsNyArMTgzLDkgQEAgZGVmIG1haW4oYXJncz1Ob25l
LCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogCiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3Vi
cGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKIAotICAgIGZvciBwcm9ncmFtIGluIFtG
aW5kLCBDaGVja291dF06CisgICAgZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUgaW1wb3J0
IENhbm9uaWNhbGl6ZQorCisgICAgZm9yIHByb2dyYW0gaW4gW0ZpbmQsIENoZWNrb3V0LCBDYW5v
bmljYWxpemVdOgogICAgICAgICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIocHJv
Z3JhbS5uYW1lLCBoZWxwPXByb2dyYW0uaGVscCkKICAgICAgICAgc3VicGFyc2VyLnNldF9kZWZh
dWx0cyhtYWluPXByb2dyYW0ubWFpbikKICAgICAgICAgcHJvZ3JhbS5wYXJzZXIoc3VicGFyc2Vy
LCBsb2dnZXJzPWxvZ2dlcnMpCkBAIC0xOTUsNCArMTk3LDQgQEAgZGVmIG1haW4oYXJncz1Ob25l
LCBwYXRoPU5vbmUsIGxvZ2dlcnM9TgogICAgIGVsc2U6CiAgICAgICAgIHJlcG9zaXRvcnkgPSBs
b2NhbC5TY20uZnJvbV9wYXRoKHBhdGg9cGFyc2VkLnJlcG9zaXRvcnksIGNvbnRyaWJ1dG9ycz1j
b250cmlidXRvcnMpCiAKLSAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJlcG9z
aXRvcnk9cmVwb3NpdG9yeSkKKyAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJl
cG9zaXRvcnk9cmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1pZGVudGlmaWVyX3RlbXBs
YXRlKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvY2Fub25pY2FsaXplL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9fX2luaXRfXy5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MK
K2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGFyZ3VtZW50cywgcnVuLCBz
dHJpbmdfdXRpbHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZworZnJvbSB3ZWJraXRzY21w
eS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3MgQ2Fub25pY2FsaXplKENvbW1hbmQp
OgorICAgIG5hbWUgPSAnY2Fub25pY2FsaXplJworICAgIGhlbHAgPSAnVGFrZSB0aGUgc2V0IG9m
IGNvbW1pdHMgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gcHVzaGVkIGFuZCBlZGl0IGhpc3Rvcnkg
dG8gbm9ybWFsaXplIHRoZSAnICtcCisgICAgICAgICAgICdjb21taXR0ZXJzIHdpdGggZXhpc3Rp
bmcgY29udHJpYnV0b3IgbWFwcGluZyBhbmQgYWRkIGlkZW50aWZpZXJzIHRvIGNvbW1pdCBtZXNz
YWdlcycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIGxv
Z2dlcnM9Tm9uZSk6CisgICAgICAgIG91dHB1dF9hcmdzID0gYXJndW1lbnRzLkxvZ2dpbmdHcm91
cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9nZ2VycywKKyAg
ICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBgZ2l0IHJlYmFzZWAgaW5m
b3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApCisgICAgICAgIG91dHB1dF9hcmdzLmFkZF9h
cmd1bWVudCgKKyAgICAgICAgICAgICctLWlkZW50aWZpZXInLCAnLS1uby1pZGVudGlmaWVyJywK
KyAgICAgICAgICAgIGhlbHA9J0FkZCBpbiB0aGUgaWRlbnRpZmllciB0byBjb21taXQgbWVzc2Fn
ZXMsIHRydWUgYnkgZGVmYXVsdCcsCisgICAgICAgICAgICBhY3Rpb249YXJndW1lbnRzLk5vQWN0
aW9uLAorICAgICAgICAgICAgZGVzdD0naWRlbnRpZmllcicsCisgICAgICAgICAgICBkZWZhdWx0
PVRydWUsCisgICAgICAgICkKKyAgICAgICAgb3V0cHV0X2FyZ3MuYWRkX2FyZ3VtZW50KAorICAg
ICAgICAgICAgJy0tcmVtb3RlJywKKyAgICAgICAgICAgIGhlbHA9J0NvbXBhcmUgYWdhaW5zdCBh
IGRpZmZlcmVudCByZW1vdGUnLAorICAgICAgICAgICAgZGVzdD0ncmVtb3RlJywKKyAgICAgICAg
ICAgIGRlZmF1bHQ9J29yaWdpbicsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSwgaWRlbnRpZmllcl90ZW1wbGF0ZT1Ob25l
LCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCByZXBvc2l0b3J5LnBhdGg6CisgICAgICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdDYW5ub3QgY2Fub25pY2FsaXplIGNvbW1pdHMgb24gYSByZW1v
dGUgcmVwb3NpdG9yeVxuJykKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCBy
ZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0NvbW1pdHMg
Y2FuIG9ubHkgYmUgY2Fub25pY2FsaXplZCBvbiBhIEdpdCByZXBvc2l0b3J5XG4nKQorICAgICAg
ICAgICAgcmV0dXJuIDEKKworICAgICAgICBicmFuY2ggPSByZXBvc2l0b3J5LmJyYW5jaAorICAg
ICAgICBpZiBub3QgYnJhbmNoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRmFpbGVk
IHRvIGRldGVybWluZSBjdXJyZW50IGJyYW5jaFxuJykKKyAgICAgICAgICAgIHJldHVybiAtMQor
ICAgICAgICByZXN1bHQgPSBydW4oWworICAgICAgICAgICAgcmVwb3NpdG9yeS5leGVjdXRhYmxl
KCksICdyZXYtbGlzdCcsCisgICAgICAgICAgICAnLS1jb3VudCcsICctLW5vLW1lcmdlcycsCisg
ICAgICAgICAgICAne3JlbW90ZX0ve2JyYW5jaH0uLnticmFuY2h9Jy5mb3JtYXQocmVtb3RlPWFy
Z3MucmVtb3RlLCBicmFuY2g9YnJhbmNoKSwKKyAgICAgICAgXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1
ZSwgY3dkPXJlcG9zaXRvcnkucGF0aCkKKyAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6Cisg
ICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZmluZCBsb2NhbCBjb21taXRz
XG4nKQorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGRpZmZlcmVuY2UgPSBpbnQocmVz
dWx0LnN0ZG91dC5yc3RyaXAoKSkKKyAgICAgICAgaWYgZGlmZmVyZW5jZSA8PSAwOgorICAgICAg
ICAgICAgcHJpbnQoJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRpdGVkJykKKyAgICAgICAgICAg
IHJldHVybiAwCisgICAgICAgIGxvZy53YXJuaW5nKCd7fSB0byBiZSBlZGl0dGVkLi4uJy5mb3Jt
YXQoc3RyaW5nX3V0aWxzLnBsdXJhbGl6ZShkaWZmZXJlbmNlLCAnY29tbWl0JykpKQorCisgICAg
ICAgIGJhc2UgPSByZXBvc2l0b3J5LmZpbmQoJ3t9fnt9Jy5mb3JtYXQoYnJhbmNoLCBkaWZmZXJl
bmNlKSkKKyAgICAgICAgbG9nLmluZm8oJ0Jhc2UgY29tbWl0IGlzIHt9IChyZWYge30pJy5mb3Jt
YXQoYmFzZSwgYmFzZS5oYXNoKSkKKworICAgICAgICBsb2cuZGVidWcoJ1NhdmluZyBjb250cmli
dXRvcnMgdG8gdGVtcCBmaWxlIHRvIGJlIHBpY2tlZCB1cCBieSBjaGlsZCBwcm9jZXNzZXMnKQor
ICAgICAgICBjb250cmlidXRvcnMgPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigp
LCAne30tY29udHJpYnV0b3JzLmpzb24nLmZvcm1hdChvcy5nZXRwaWQoKSkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHdpdGggb3Blbihjb250cmlidXRvcnMsICd3JykgYXMgZmlsZToKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5LmNvbnRyaWJ1dG9ycy5zYXZlKGZpbGUpCisKKyAgICAg
ICAgICAgIG1lc3NhZ2VfZmlsdGVyID0gWworICAgICAgICAgICAgICAgICctLW1zZy1maWx0ZXIn
LAorICAgICAgICAgICAgICAgICJ7fSB7fSAne30nIi5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgIHN5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3Mu
cGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21lc3NhZ2UucHknKSwKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcl90ZW1wbGF0ZSBvciAnSWRlbnRpZmllcjoge30nLAorICAgICAgICAgICAg
ICAgICksCisgICAgICAgICAgICBdIGlmIGFyZ3MuaWRlbnRpZmllciBlbHNlIFtdCisKKyAgICAg
ICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxsLCAndycpIGFzIGRldm51bGw6CisgICAgICAgICAg
ICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeS5leGVjdXRhYmxlKCksICdmaWx0ZXItYnJhbmNoJywgJy1mJywKKyAgICAgICAgICAgICAg
ICAgICAgJy0tZW52LWZpbHRlcicsICcnJ3tvdmVyd3JpdGVfbWVzc2FnZX0KK2NvbW1pdHRlck91
dHB1dD0kKHtweXRob259IHtjb21taXR0ZXJfcHl9IHtjb250cmlidXRvcl9qc29ufSkKK0tFWT0n
JworVkFMVUU9JycKK2ZvciB3b3JkIGluICRjb21taXR0ZXJPdXRwdXQ7IGRvCisgICAgaWYgW1sg
JHdvcmQgPT0gR0lUXyogXV0gOyB0aGVuCisgICAgICAgIGlmIFtbICRLRVkgPT0gR0lUXyogXV0g
OyB0aGVuCisgICAgICAgICAgICB7c2V0dGluZ19tZXNzYWdlfQorICAgICAgICAgICAgcHJpbnRm
IC12ICRLRVkgIiR7e1ZBTFVFOjokKCgke3sjVkFMVUV9fSAtIDEpKX19IgorICAgICAgICAgICAg
S0VZPScnCisgICAgICAgICAgICBWQUxVRT0nJworICAgICAgICBmaQorICAgIGZpCisgICAgaWYg
W1sgIiRLRVkiID09ICIiIF1dIDsgdGhlbgorICAgICAgICBLRVk9IiR3b3JkIgorICAgIGVsc2UK
KyAgICAgICAgVkFMVUU9IiRWQUxVRSR3b3JkICIKKyAgICBmaQorZG9uZQoraWYgW1sgJEtFWSA9
PSBHSVRfKiBdXSA7IHRoZW4KKyAgICB7c2V0dGluZ19tZXNzYWdlfQorICAgIHByaW50ZiAtdiAk
S0VZICIke3tWQUxVRTo6JCgoJHt7I1ZBTFVFfX0gLSAxKSl9fSIKK2ZpJycnLmZvcm1hdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZV9tZXNzYWdlPScnIGlmIGxvZy5sZXZlbCA+
IGxvZ2dpbmcuSU5GTyBlbHNlICdlY2hvICJPdmVyd3JpdGluZyAkR0lUX0NPTU1JVCInLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcHl0aG9uPXN5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29tbWl0dGVyX3B5PW9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19m
aWxlX18pLCAnY29tbWl0dGVyLnB5JyksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cmli
dXRvcl9qc29uPWNvbnRyaWJ1dG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdf
bWVzc2FnZT0nJyBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLkRFQlVHIGVsc2UgJ2VjaG8gIiAgICAk
S0VZPSRWQUxVRSInLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIF0g
KyBtZXNzYWdlX2ZpbHRlciArIFsne30uLi57fScuZm9ybWF0KGJyYW5jaCwgYmFzZS5oYXNoKV0s
CisgICAgICAgICAgICAgICAgICAgIGN3ZD1yZXBvc2l0b3J5LnBhdGgsCisgICAgICAgICAgICAg
ICAgICAgIGVudj17J0ZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJOSU5HJzogJzEnLCAnUFlUSE9O
UEFUSCc6ICc6Jy5qb2luKHN5cy5wYXRoKX0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1k
ZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUsCisgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklO
RyBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9j
ZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Zh
aWxlZCB0byBtb2RpZnkgbG9jYWwgY29tbWl0IG1lc3NhZ2VzXG4nKQorICAgICAgICAgICAgcmV0
dXJuIC0xCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250cmli
dXRvcnMpCisKKyAgICAgICAgcHJpbnQoJ3t9IHN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIScu
Zm9ybWF0KHN0cmluZ191dGlscy5wbHVyYWxpemUoZGlmZmVyZW5jZSwgJ2NvbW1pdCcpKSkKKwor
ICAgICAgICByZXR1cm4gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL2NvbW1pdHRlci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxp
emUvY29tbWl0dGVyLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9jb21taXR0ZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitp
bXBvcnQgc3lzCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBydW4KK2Zyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IENvbnRyaWJ1dG9yLCBsb2NhbAorCitFTUFJTF9SRSA9IHJlLmNvbXBpbGUocico
P1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/JykKKworCitkZWYgY2Fub25pY2FsaXplKG5hbWUs
IGVtYWlsLCBjb250cmlidXRvcnMpOgorICAgIG1hdGNoID0gRU1BSUxfUkUubWF0Y2goZW1haWwp
CisgICAgaWYgbWF0Y2g6CisgICAgICAgIGVtYWlsID0gbWF0Y2guZ3JvdXAoJ2VtYWlsJykKKwor
ICAgIGNvbnRyaWJ1dG9yID0gY29udHJpYnV0b3JzLmdldChlbWFpbCwgY29udHJpYnV0b3JzLmdl
dChlbWFpbC5sb3dlcigpKSkKKyAgICBpZiBjb250cmlidXRvcjoKKyAgICAgICAgcmV0dXJuIGNv
bnRyaWJ1dG9yLm5hbWUsIGVtYWlsIGlmIG1hdGNoIGVsc2UgY29udHJpYnV0b3IuZW1haWwKKyAg
ICBjb250cmlidXRvciA9IGNvbnRyaWJ1dG9ycy5nZXQobmFtZSkKKyAgICBpZiBjb250cmlidXRv
cjoKKyAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yLm5hbWUsIGNvbnRyaWJ1dG9yLmVtYWlsCisg
ICAgcmV0dXJuIG5hbWUsIGVtYWlsCisKKworZGVmIG1haW4oY29udHJpYnV0b3JfZmlsZSk6Cisg
ICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpCisgICAgR0lUX0NP
TU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykKKworICAgIHdpdGggb3Blbihjb250
cmlidXRvcl9maWxlLCAncicpIGFzIGZpbGU6CisgICAgICAgIGNvbnRyaWJ1dG9ycyA9IENvbnRy
aWJ1dG9yLk1hcHBpbmcubG9hZChmaWxlKQorCisgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBj
YW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRfQVVUSE9SX05BTUUnLCAn
VW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0FVVEhPUl9FTUFJTCcsICdu
dWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICApCisgICAgY29tbWl0dGVyLCBjb21t
aXR0ZXJfZW1haWwgPSBjYW5vbmljYWxpemUoCisgICAgICAgIG9zLmVudmlyb24uZ2V0KCdHSVRf
Q09NTUlUVEVSX05BTUUnLCAnVW5rbm93bicpLAorICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lU
X0NPTU1JVFRFUl9FTUFJTCcsICdudWxsJyksCisgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAgICAp
CisKKyAgICAjIEF0dGVtcHQgdG8gZXh0cmFjdCBwYXRjaC1ieQorICAgIGlmIGF1dGhvcl9lbWFp
bCA9PSBjb21taXR0ZXJfZW1haWwgYW5kIFJFUE9TSVRPUllfUEFUSCBhbmQgR0lUX0NPTU1JVDoK
KyAgICAgICAgbG9nID0gcnVuKAorICAgICAgICAgICAgW2xvY2FsLkdpdC5leGVjdXRhYmxlKCks
ICdsb2cnLCBHSVRfQ09NTUlULCAnLTEnXSwKKyAgICAgICAgICAgIGN3ZD1SRVBPU0lUT1JZX1BB
VEgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICkKKwor
ICAgICAgICBwYXRjaF9ieSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgIHInXHMrUGF0Y2ggYnkg
KD9QPGF1dGhvcj5bXjxdKykgXDwoP1A8ZW1haWw+W148XSspXD4uKiBvbiBcZCstXGQrLVxkKycs
CisgICAgICAgICAgICBsb2cuc3Rkb3V0LAorICAgICAgICApCisgICAgICAgIGlmIHBhdGNoX2J5
OgorICAgICAgICAgICAgYXV0aG9yLCBhdXRob3JfZW1haWwgPSBjYW5vbmljYWxpemUoCisgICAg
ICAgICAgICAgICAgcGF0Y2hfYnkuZ3JvdXAoJ2F1dGhvcicpLAorICAgICAgICAgICAgICAgIHBh
dGNoX2J5Lmdyb3VwKCdlbWFpbCcpLAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycywKKyAg
ICAgICAgICAgICkKKworICAgIHByaW50KHUnR0lUX0FVVEhPUl9OQU1FIHt9Jy5mb3JtYXQoYXV0
aG9yKSkKKyAgICBwcmludCh1J0dJVF9BVVRIT1JfRU1BSUwge30nLmZvcm1hdChhdXRob3JfZW1h
aWwpKQorICAgIHByaW50KHUnR0lUX0NPTU1JVFRFUl9OQU1FIHt9Jy5mb3JtYXQoY29tbWl0dGVy
KSkKKyAgICBwcmludCh1J0dJVF9DT01NSVRURVJfRU1BSUwge30nLmZvcm1hdChjb21taXR0ZXJf
ZW1haWwpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lzLmV4aXQobWFp
bihzeXMuYXJndlsxXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUv
bWVzc2FnZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvbWVzc2FnZS5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20g
d2Via2l0c2NtcHkubG9jYWwgaW1wb3J0IEdpdAorCisKK2RlZiBtYWluKGlucHV0ZmlsZSwgaWRl
bnRpZmllcl90ZW1wbGF0ZSk6CisgICAgUkVQT1NJVE9SWV9QQVRIID0gb3MuZW52aXJvbi5nZXQo
J09MRFBXRCcpCisgICAgR0lUX0NPTU1JVCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfQ09NTUlUJykK
KworICAgIGlmIG5vdCBSRVBPU0lUT1JZX1BBVEg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
J0ZhaWxlZCB0byByZXRyaWV2ZSByZXBvc2l0b3J5IHBhdGhcbicpCisgICAgICAgIHJldHVybiAt
MQorICAgIGlmIG5vdCBHSVRfQ09NTUlUOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdGYWls
ZWQgdG8gcmV0cmlldmUgZ2l0IGhhc2hcbicpCisgICAgICAgIHJldHVybiAtMQorCisgICAgcmVw
b3NpdG9yeSA9IEdpdChSRVBPU0lUT1JZX1BBVEgpCisgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5j
b21taXQoaGFzaD1HSVRfQ09NTUlUKQorICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgIHN5cy5z
dGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kICd7fScgaW4gdGhlIHJlcG9zaXRvcnkiLmZvcm1h
dChHSVRfQ09NTUlUKSkKKyAgICAgICAgcmV0dXJuIC0xCisgICAgaWYgbm90IGNvbW1pdC5pZGVu
dGlmaWVyIG9yIG5vdCBjb21taXQuYnJhbmNoOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJG
YWlsZWQgdG8gY29tcHV0ZSB0aGUgaWRlbnRpZmllciBmb3IgJ3t9JyIuZm9ybWF0KEdJVF9DT01N
SVQpKQorICAgICAgICByZXR1cm4gLTEKKworICAgIGxpbmVzID0gW10KKyAgICBmb3IgbGluZSBp
biBpbnB1dGZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJp
cCgpKQorCisgICAgaWRlbnRpZmllcl9pbmRleCA9IGxlbihsaW5lcykKKyAgICBpZiBpZGVudGlm
aWVyX2luZGV4IGFuZCByZXBvc2l0b3J5LkdJVF9TVk5fUkVWSVNJT04ubWF0Y2gobGluZXNbLTFd
KToKKyAgICAgICAgaWRlbnRpZmllcl9pbmRleCAtPSAxCisKKyAgICBpZiBpZGVudGlmaWVyX2lu
ZGV4IGFuZCBsaW5lc1tpZGVudGlmaWVyX2luZGV4IC0gMV0uc3RhcnRzd2l0aChpZGVudGlmaWVy
X3RlbXBsYXRlLmZvcm1hdCgnJykuc3BsaXQoJzonKVswXSk6CisgICAgICAgIGxpbmVzW2lkZW50
aWZpZXJfaW5kZXggLSAxXSA9IGlkZW50aWZpZXJfdGVtcGxhdGUuZm9ybWF0KGNvbW1pdCkKKyAg
ICBlbHNlOgorICAgICAgICBsaW5lcy5pbnNlcnQoaWRlbnRpZmllcl9pbmRleCwgaWRlbnRpZmll
cl90ZW1wbGF0ZS5mb3JtYXQoY29tbWl0KSkKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAg
ICAgICBwcmludChsaW5lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3lz
LmV4aXQobWFpbihzeXMuc3RkaW4sIHN5cy5hcmd2WzFdKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9tb2Nrcy9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI3MTE2MykKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcmUKIAogZnJv
bSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLWZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2Nr
cworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IG1vY2tzLCBPdXRwdXRDYXB0dXJlLCBTdHJpbmdJ
TwogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIENvbW1pdCwgQ29udHJpYnV0b3IKK2Zy
b20gd2Via2l0c2NtcHkuY2Fub25pY2FsaXplLmNvbW1pdHRlciBpbXBvcnQgbWFpbiBhcyBjb21t
aXR0ZXJfbWFpbgorZnJvbSB3ZWJraXRzY21weS5jYW5vbmljYWxpemUubWVzc2FnZSBpbXBvcnQg
bWFpbiBhcyBtZXNzYWdlX21haW4KIAogCiBjbGFzcyBHaXQobW9ja3MuU3VicHJvY2Vzcyk6CkBA
IC01OCw2ICs2MCw3IEBAIGNsYXNzIEdpdChtb2Nrcy5TdWJwcm9jZXNzKToKICAgICAgICAgICAg
ICAgICAgICAgY29tbWl0LnJldmlzaW9uID0gTm9uZQogCiAgICAgICAgIHNlbGYuaGVhZCA9IHNl
bGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVstMV0KKyAgICAgICAgc2VsZi5yZW1vdGVz
ID0geydvcmlnaW4ve30nLmZvcm1hdChicmFuY2gpOiBjb21taXRzWy0xXSBmb3IgYnJhbmNoLCBj
b21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpfQogICAgICAgICBzZWxmLnRhZ3MgPSB7fQog
CiAgICAgICAgIGlmIGdpdF9zdm46CkBAIC0yMzMsNiArMjM2LDE0IEBAIG5vdGhpbmcgdG8gY29t
bWl0LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRh
ICphcmdzLCAqKmt3YXJnczoKICAgICAgICAgICAgICAgICAgICAgbW9ja3MuUHJvY2Vzc0NvbXBs
ZXRpb24ocmV0dXJuY29kZT0wKSBpZiBzZWxmLmNoZWNrb3V0KGFyZ3NbMl0pIGVsc2UgbW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24ocmV0dXJuY29kZT0xKQogICAgICAgICAgICAgKSwgbW9ja3MuU3Vi
cHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUsICdmaWx0ZXIt
YnJhbmNoJywgJy1mJywKKyAgICAgICAgICAgICAgICBjd2Q9c2VsZi5wYXRoLAorICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcj1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBzZWxmLmZpbHRlcl9icmFu
Y2goCisgICAgICAgICAgICAgICAgICAgIGFyZ3NbLTFdLAorICAgICAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyX3RlbXBsYXRlPWFyZ3NbLTJdLnNwbGl0KCInIilbLTJdIGlmIGFyZ3NbLTNdID09
ICctLW1zZy1maWx0ZXInIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1l
bnRfc2hlbGw9YXJnc1s0XSBpZiBhcmdzWzNdID09ICctLWVudi1maWx0ZXInIGFuZCBhcmdzWzRd
IGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJw
cm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSwKICAgICAgICAg
ICAgICAgICBjd2Q9c2VsZi5wYXRoLAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb249bW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCkBAIC0yNjUsMTYgKzI3NiwyMiBAQCBub3RoaW5nIHRvIGNvbW1p
dCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNv
bW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1bZm91bmQuYnJhbmNoX3BvaW50IC0gZGlmZmVyZW5j
ZSAtIDFdCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgICAgICBzb21ldGhpbmcg
PSBzdHIoc29tZXRoaW5nKQorICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZzoKKyAgICAgICAg
ICAgIGEsIGIgPSBzb21ldGhpbmcuc3BsaXQoJy4uJykKKyAgICAgICAgICAgIGEgPSBzZWxmLmZp
bmQoYSkKKyAgICAgICAgICAgIGIgPSBzZWxmLmZpbmQoYikKKyAgICAgICAgICAgIHJldHVybiBi
IGlmIGEgYW5kIGIgZWxzZSBOb25lCisKICAgICAgICAgaWYgc29tZXRoaW5nID09ICdIRUFEJzoK
ICAgICAgICAgICAgIHJldHVybiBzZWxmLmhlYWQKICAgICAgICAgaWYgc29tZXRoaW5nIGluIHNl
bGYuY29tbWl0cy5rZXlzKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW3NvbWV0
aGluZ11bLTFdCiAgICAgICAgIGlmIHNvbWV0aGluZyBpbiBzZWxmLnRhZ3Mua2V5cygpOgogICAg
ICAgICAgICAgcmV0dXJuIHNlbGYudGFnc1tzb21ldGhpbmddCisgICAgICAgIGlmIHNvbWV0aGlu
ZyBpbiBzZWxmLnJlbW90ZXMua2V5cygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVtb3Rl
c1tzb21ldGhpbmddCiAKLSAgICAgICAgc29tZXRoaW5nID0gc3RyKHNvbWV0aGluZykKLSAgICAg
ICAgaWYgJy4uJyBpbiBzb21ldGhpbmc6Ci0gICAgICAgICAgICBzb21ldGhpbmcgPSBzb21ldGhp
bmcuc3BsaXQoJy4uJylbMV0KICAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNv
bW1pdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGJyYW5jaCA9PSBzb21ldGhpbmc6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHNbLTFdCkBAIC0yODYsMTAgKzMwMywxNiBAQCBub3Ro
aW5nIHRvIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuCiAgICAgICAgIHJldHVybiBOb25lCiAK
ICAgICBkZWYgY291bnQoc2VsZiwgc29tZXRoaW5nKToKLSAgICAgICAgbWF0Y2ggPSBzZWxmLmZp
bmQoc29tZXRoaW5nKQotICAgICAgICBpZiAnLi4nIGluIHNvbWV0aGluZyBvciBub3QgbWF0Y2gu
YnJhbmNoX3BvaW50OgotICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmlkZW50aWZpZXIKLSAgICAg
ICAgcmV0dXJuIG1hdGNoLmJyYW5jaF9wb2ludCArIG1hdGNoLmlkZW50aWZpZXIKKyAgICAgICAg
aWYgJy4uJyBub3QgaW4gc29tZXRoaW5nOgorICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmZpbmQo
c29tZXRoaW5nKQorICAgICAgICAgICAgcmV0dXJuIChtYXRjaC5icmFuY2hfcG9pbnQgb3IgMCkg
KyBtYXRjaC5pZGVudGlmaWVyCisKKyAgICAgICAgYSwgYiA9IHNvbWV0aGluZy5zcGxpdCgnLi4n
KQorICAgICAgICBhID0gc2VsZi5maW5kKGEpCisgICAgICAgIGIgPSBzZWxmLmZpbmQoYikKKyAg
ICAgICAgaWYgYS5icmFuY2hfcG9pbnQgPT0gYi5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICBy
ZXR1cm4gYWJzKGIuaWRlbnRpZmllciAtIGEuaWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGIu
aWRlbnRpZmllcgogCiAgICAgZGVmIGJyYW5jaGVzX29uKHNlbGYsIGhhc2gpOgogICAgICAgICBy
ZXN1bHQgPSBzZXQoKQpAQCAtMzEzLDMgKzMzNiw4OSBAQCBub3RoaW5nIHRvIGNvbW1pdCwgd29y
a2luZyB0cmVlIGNsZWFuCiAgICAgICAgICAgICBzZWxmLmhlYWQgPSBjb21taXQKICAgICAgICAg
ICAgIHNlbGYuZGV0YWNoZWQgPSBzb21ldGhpbmcgbm90IGluIHNlbGYuY29tbWl0cy5rZXlzKCkK
ICAgICAgICAgcmV0dXJuIFRydWUgaWYgY29tbWl0IGVsc2UgRmFsc2UKKworICAgIGRlZiBmaWx0
ZXJfYnJhbmNoKHNlbGYsIHJhbmdlLCBpZGVudGlmaWVyX3RlbXBsYXRlPU5vbmUsIGVudmlyb25t
ZW50X3NoZWxsPU5vbmUpOgorICAgICAgICAjIFdlIGNhbid0IGVmZmVjdGl2ZWx5IG1vY2sgdGhl
IGJhc2ggc2NyaXB0IGluIHRoZSBjb21tYW5kLCBidXQgd2UgY2FuIG1vY2sgdGhlIHB5dGhvbiBj
b2RlIHRoYXQKKyAgICAgICAgIyBzY3JpcHQgY2FsbHMsIHdoaWNoIGlzIHdoZXJlIHRoZSBwcm9n
cmFtIGxvZ2ljIGlzLgorICAgICAgICBoZWFkLCBzdGFydCA9IHJhbmdlLnNwbGl0KCcuLi4nKQor
ICAgICAgICBoZWFkID0gc2VsZi5maW5kKGhlYWQpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5maW5k
KHN0YXJ0KQorCisgICAgICAgIGNvbW1pdHNfdG9fZWRpdCA9IFtdCisgICAgICAgIGZvciBjb21t
aXQgaW4gcmV2ZXJzZWQoc2VsZi5jb21taXRzW2hlYWQuYnJhbmNoXSk6CisgICAgICAgICAgICBp
ZiBjb21taXQuYnJhbmNoID09IHN0YXJ0LmJyYW5jaCBhbmQgY29tbWl0LmlkZW50aWZpZXIgPD0g
c3RhcnQuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgY29t
bWl0c190b19lZGl0Lmluc2VydCgwLCBjb21taXQpCisgICAgICAgIGlmIGhlYWQuYnJhbmNoICE9
IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICBmb3IgY29tbWl0IGluIHJldmVyc2Vk
KHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVs6aGVhZC5icmFuY2hfcG9pbnRdKToK
KyAgICAgICAgICAgICAgICBpZiBjb21taXQuaWRlbnRpZmllciA8PSBzdGFydC5pZGVudGlmaWVy
OgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbW1pdHNfdG9f
ZWRpdC5pbnNlcnQoMCwgY29tbWl0KQorCisgICAgICAgIHN0ZG91dCA9IFN0cmluZ0lPKCkKKyAg
ICAgICAgb3JpZ2luYWxfZW52ID0ge2tleTogb3MuZW52aXJvbi5nZXQoJ09MRFBXRCcpIGZvciBr
ZXkgaW4gWworICAgICAgICAgICAgJ09MRFBXRCcsICdHSVRfQ09NTUlUJywKKyAgICAgICAgICAg
ICdHSVRfQVVUSE9SX05BTUUnLCAnR0lUX0FVVEhPUl9FTUFJTCcsCisgICAgICAgICAgICAnR0lU
X0NPTU1JVFRFUl9OQU1FJywgJ0dJVF9DT01NSVRURVJfRU1BSUwnLAorICAgICAgICBdfQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgb3MuZW52aXJv
blsnT0xEUFdEJ10gPSBzZWxmLnBhdGgKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0
c190b19lZGl0OgorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBv
cy5lbnZpcm9uWydHSVRfQ09NTUlUJ10gPSBjb21taXQuaGFzaAorICAgICAgICAgICAgICAgIG9z
LmVudmlyb25bJ0dJVF9BVVRIT1JfTkFNRSddID0gY29tbWl0LmF1dGhvci5uYW1lCisgICAgICAg
ICAgICAgICAgb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJTCddID0gY29tbWl0LmF1dGhvci5l
bWFpbAorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9DT01NSVRURVJfTkFNRSddID0g
Y29tbWl0LmF1dGhvci5uYW1lCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnR0lUX0NPTU1J
VFRFUl9FTUFJTCddID0gY29tbWl0LmF1dGhvci5lbWFpbAorCisgICAgICAgICAgICAgICAgc3Rk
b3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAnUmV3cml0ZSB7aGFzaH0gKHtjb3VudH0v
e3RvdGFsfSkgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4n
LmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9Y29tbWl0Lmhhc2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb3VudD1jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRvdGFsPWxlbihjb21taXRzX3RvX2VkaXQpLAorICAgICAgICAgICAgICAgICAgICApKQorCisg
ICAgICAgICAgICAgICAgaWYgaWRlbnRpZmllcl90ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZWZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vm
aWxlLndyaXRlKGNvbW1pdC5tZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlZmls
ZS5zZWVrKDApCisgICAgICAgICAgICAgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNh
cHR1cmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9tYWluKG1lc3NhZ2VmaWxl
LCBpZGVudGlmaWVyX3RlbXBsYXRlKQorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGNhcHR1
cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBp
ZiBsaW5lc1stMV0uc3RhcnRzd2l0aCgnZ2l0LXN2bi1pZDogaHR0cHM6Ly9zdm4nKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVzLnBvcCgtMSkKKyAgICAgICAgICAgICAgICAgICAgY29t
bWl0Lm1lc3NhZ2UgPSAnXG4nLmpvaW4obGluZXMpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qg
ZW52aXJvbm1lbnRfc2hlbGw6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAgICAgaWYgcmUuc2VhcmNoKHInZWNobyAiT3ZlcndyaXRpbmcnLCBlbnZpcm9ubWVudF9z
aGVsbCk6CisgICAgICAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnT3ZlcndyaXRpbmcge31c
bicuZm9ybWF0KGNvbW1pdC5oYXNoKSkKKworICAgICAgICAgICAgICAgIG1hdGNoID0gcmUuc2Vh
cmNoKHInKD9QPGpzb24+XFMrXC5qc29uKScsIGVudmlyb25tZW50X3NoZWxsKQorICAgICAgICAg
ICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUo
KSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlcl9tYWluKG1h
dGNoLmdyb3VwKCdqc29uJykpCisgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5z
ZWVrKDApCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNhcHR1cmVkLnN0ZG91dC5y
ZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgp
CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2xpbmUuc3BsaXQoJyAnKVswXV0g
PSAnICcuam9pbihsaW5lLnNwbGl0KCcgJylbMTpdKQorCisgICAgICAgICAgICAgICAgY29tbWl0
LmF1dGhvciA9IENvbnRyaWJ1dG9yKG5hbWU9b3MuZW52aXJvblsnR0lUX0FVVEhPUl9OQU1FJ10s
IGVtYWlscz1bb3MuZW52aXJvblsnR0lUX0FVVEhPUl9FTUFJTCddXSkKKworICAgICAgICAgICAg
ICAgIGlmIHJlLnNlYXJjaChyJ2VjaG8gIlxzKycsIGVudmlyb25tZW50X3NoZWxsKToKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIGtleSBpbiBbJ0dJVF9BVVRIT1JfTkFNRScsICdHSVRfQVVUSE9S
X0VNQUlMJywgJ0dJVF9DT01NSVRURVJfTkFNRScsICdHSVRfQ09NTUlUVEVSX0VNQUlMJ106Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQud3JpdGUoJyAgICB7fT17fVxuJy5mb3JtYXQo
a2V5LCBvcy5lbnZpcm9uW2tleV0pKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBm
b3Iga2V5LCB2YWx1ZSBpbiBvcmlnaW5hbF9lbnYuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBp
ZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXld
ID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkZWwg
b3MuZW52aXJvbltrZXldCisKKyAgICAgICAgcmV0dXJuIG1vY2tzLlByb2Nlc3NDb21wbGV0aW9u
KAorICAgICAgICAgICAgcmV0dXJuY29kZT0wLAorICAgICAgICAgICAgc3Rkb3V0PXN0ZG91dC5n
ZXR2YWx1ZSgpLAorICAgICAgICApCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90
ZXN0L2Nhbm9uaWNhbGl6ZV91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2Nhbm9uaWNhbGl6ZV91
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0
Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBv
cnQgVGltZSBhcyBNb2NrVGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgcHJvZ3JhbSwgbW9j
a3MsIGxvY2FsLCBDb21taXQsIENvbnRyaWJ1dG9yCisKKworY2xhc3MgVGVzdENhbm9uaWNhbGl6
ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisg
ICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCks
IG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1RpbWU6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb2dyYW0ubWFpbigKKyAgICAgICAg
ICAgICAgICBhcmdzPSgnY2Fub25pY2FsaXplJywpLAorICAgICAgICAgICAgICAgIHBhdGg9c2Vs
Zi5wYXRoLAorICAgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6
CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBtb2Nrcy5sb2NhbC5H
aXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0o
J2Nhbm9uaWNhbGl6ZScsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAg
ICAgICAgICkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0
dmFsdWUoKSwgJ05vIGxvY2FsIGNvbW1pdHMgdG8gYmUgZWRpdGVkXG4nKQorCisgICAgZGVmIHRl
c3RfZm9ybWF0ZWRfaWRlbnRpZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZWQsIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpIGFzIG1vY2ssIG1vY2tz
LmxvY2FsLlN2bigpLCBNb2NrVGltZToKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycyA9IENvbnRy
aWJ1dG9yLk1hcHBpbmcoKQorICAgICAgICAgICAgY29udGlyYnV0b3JzLmNyZWF0ZSgnXHUwMTdk
YW4gRG9iZXJcdTAxNjFlaycsICd6ZG9iZXJzZWtAaWdhbGlhLmNvbScpCisKKyAgICAgICAgICAg
IG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAgICAg
ICAgICAgICAgIGhhc2g9JzM4ZWE1MGQyOGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWYn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAgICAg
ICAgICAgIGF1dGhvcj1Db250cmlidXRvcignXHUwMTdkYW4gRG9iZXJcdTAxNjFlaycsIGVtYWls
cz1bJ3pkb2JlcnNla0BpZ2FsaWEuY29tJ10pLAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9
bW9jay5jb21taXRzW21vY2suZGVmYXVsdF9icmFuY2hdWy0xXS5pZGVudGlmaWVyICsgMSwKKyAg
ICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2ODAwMCwKKyAgICAgICAgICAgICAgICBtZXNz
YWdlPSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9u
aWNhbGl6ZScsICctdicsKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAg
ICAgICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXJfdGVtcGxhdGU9J0Nhbm9uaWNhbCBsaW5rOiBodHRwczovL2NvbW1pdHMud2Via2l0
Lm9yZy97fScsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBjb21taXQgPSBsb2NhbC5H
aXQoc2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPW1vY2suZGVmYXVsdF9icmFuY2gpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNvbnRpcmJ1dG9yc1snemRvYmVy
c2VrQGlnYWxpYS5jb20nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0Lm1l
c3NhZ2UsICdOZXcgY29tbWl0XG5DYW5vbmljYWwgbGluazogaHR0cHM6Ly9jb21taXRzLndlYmtp
dC5vcmcvNUBtYWluJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAg
Y2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAnUmV3cml0ZSAzOGVhNTBk
MjhhZTM5NGM5YzhiODBlMTNjM2ZiMjFmMWMyNjI4NzFmICgxLzEpICgtLS0gc2Vjb25kcyBwYXNz
ZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVkKVxuJworICAgICAgICAgICAgJ092ZXJ3cml0aW5n
IDM4ZWE1MGQyOGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWZcbicKKyAgICAgICAgICAg
ICcxIGNvbW1pdCBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAgICkKKwor
ICAgIGRlZiB0ZXN0X2V4aXN0aW5nX2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHdpdGggT3V0
cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkLCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSBhcyBt
b2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWU6CisgICAgICAgICAgICBjb250aXJidXRv
cnMgPSBDb250cmlidXRvci5NYXBwaW5nKCkKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5jcmVh
dGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdqYmVkYXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAgICAg
IG1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAgICAg
ICAgICAgICAgIGhhc2g9JzM4ZWE1MGQyOGFlMzk0YzljOGI4MGUxM2MzZmIyMWYxYzI2Mjg3MWYn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD1tb2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAgICAg
ICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9uYXRoYW4gQmVkYXJkJywgZW1haWxzPVsnamJl
ZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNvbW1p
dHNbbW9jay5kZWZhdWx0X2JyYW5jaF1bLTFdLmlkZW50aWZpZXIgKyAxLAorICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcD0xNjAxNjY4MDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05ldyBj
b21taXRcbklkZW50aWZpZXI6IHt9QHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1v
Y2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNoXVstMV0uaWRlbnRpZmllciArIDEsCisgICAg
ICAgICAgICAgICAgICAgIG1vY2suZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3Jh
bS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdjYW5vbmljYWxpemUnLCAnLXYnLCksCisg
ICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgY29udHJpYnV0
b3JzPWNvbnRpcmJ1dG9ycywKKyAgICAgICAgICAgICkpCisKKyAgICAgICAgICAgIGNvbW1pdCA9
IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChicmFuY2g9bW9jay5kZWZhdWx0X2JyYW5jaCkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udGlyYnV0b3Jz
WydqYmVkYXJkQGFwcGxlLmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXQubWVzc2FnZSwgJ05ldyBjb21taXRcbklkZW50aWZpZXI6IDVAbWFpbicpCisKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgp
LAorICAgICAgICAgICAgJ1Jld3JpdGUgMzhlYTUwZDI4YWUzOTRjOWM4YjgwZTEzYzNmYjIxZjFj
MjYyODcxZiAoMS8xKSAoLS0tIHNlY29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3Rl
ZClcbicKKyAgICAgICAgICAgICdPdmVyd3JpdGluZyAzOGVhNTBkMjhhZTM5NGM5YzhiODBlMTNj
M2ZiMjFmMWMyNjI4NzFmXG4nCisgICAgICAgICAgICAnMSBjb21taXQgc3VjY2Vzc2Z1bGx5IGNh
bm9uaWNhbGl6ZWQhXG4nLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9naXRfc3ZuKHNlbGYp
OgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwu
R2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSBhcyBtb2NrLCBtb2Nrcy5sb2NhbC5Tdm4oKSwg
TW9ja1RpbWU6CisgICAgICAgICAgICBjb250aXJidXRvcnMgPSBDb250cmlidXRvci5NYXBwaW5n
KCkKKyAgICAgICAgICAgIGNvbnRpcmJ1dG9ycy5jcmVhdGUoJ0pvbmF0aGFuIEJlZGFyZCcsICdq
YmVkYXJkQGFwcGxlLmNvbScpCisKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1ttb2NrLmRlZmF1
bHRfYnJhbmNoXS5hcHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9Jzc2NjYwOTI3
NmZlMjAxZTdjZTJjNjk5OTRlMTEzZDk3OWQyMTQ4YWMnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD1tb2NrLmRlZmF1bHRfYnJhbmNoLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRv
cignamJlZGFyZEBhcHBsZS5jb20nLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0c1ttb2NrLmRlZmF1bHRfYnJhbmNo
XVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2Njgw
MDAsCisgICAgICAgICAgICAgICAgcmV2aXNpb249OSwKKyAgICAgICAgICAgICAgICBtZXNzYWdl
PSdOZXcgY29tbWl0XG4nLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Nhbm9uaWNh
bGl6ZScsICctdnYnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAg
ICAgICAgICBjb250cmlidXRvcnM9Y29udGlyYnV0b3JzLAorICAgICAgICAgICAgKSkKKworICAg
ICAgICAgICAgY29tbWl0ID0gbG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGJyYW5jaD1tb2Nr
LmRlZmF1bHRfYnJhbmNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0
aG9yLCBjb250aXJidXRvcnNbJ2piZWRhcmRAYXBwbGUuY29tJ10pCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAg
ICAgICAgICdOZXcgY29tbWl0XG4nCisgICAgICAgICAgICAgICAgJ0lkZW50aWZpZXI6IDVAbWFp
blxuJworICAgICAgICAgICAgICAgICdzdm4taWQ6IGh0dHBzOi8vc3ZuLmV4YW1wbGUub3JnL3Jl
cG9zaXRvcnkvcmVwb3NpdG9yeS90cnVua0A5IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5
MWI0ZGJmYycsCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJ1Jld3Jp
dGUgNzY2NjA5Mjc2ZmUyMDFlN2NlMmM2OTk5NGUxMTNkOTc5ZDIxNDhhYyAoMS8xKSAoLS0tIHNl
Y29uZHMgcGFzc2VkLCByZW1haW5pbmcgLS0tIHByZWRpY3RlZClcbicKKyAgICAgICAgICAgICdP
dmVyd3JpdGluZyA3NjY2MDkyNzZmZTIwMWU3Y2UyYzY5OTk0ZTExM2Q5NzlkMjE0OGFjXG4nCisg
ICAgICAgICAgICAnICAgIEdJVF9BVVRIT1JfTkFNRT1Kb25hdGhhbiBCZWRhcmRcbicKKyAgICAg
ICAgICAgICcgICAgR0lUX0FVVEhPUl9FTUFJTD1qYmVkYXJkQGFwcGxlLmNvbVxuJworICAgICAg
ICAgICAgJyAgICBHSVRfQ09NTUlUVEVSX05BTUU9Sm9uYXRoYW4gQmVkYXJkXG4nCisgICAgICAg
ICAgICAnICAgIEdJVF9DT01NSVRURVJfRU1BSUw9amJlZGFyZEBhcHBsZS5jb21cbicKKyAgICAg
ICAgICAgICcxIGNvbW1pdCBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFcbicsCisgICAgICAg
ICkKKworICAgIGRlZiB0ZXN0X2JyYW5jaF9jb21taXRzKHNlbGYpOgorICAgICAgICB3aXRoIE91
dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZCwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCkgYXMg
bW9jaywgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lOgorICAgICAgICAgICAgY29udGlyYnV0
b3JzID0gQ29udHJpYnV0b3IuTWFwcGluZygpCisgICAgICAgICAgICBjb250aXJidXRvcnMuY3Jl
YXRlKCdKb25hdGhhbiBCZWRhcmQnLCAnamJlZGFyZEBhcHBsZS5jb20nKQorCisgICAgICAgICAg
ICBsb2NhbC5HaXQoc2VsZi5wYXRoKS5jaGVja291dCgnYnJhbmNoLWEnKQorICAgICAgICAgICAg
bW9jay5jb21taXRzWydicmFuY2gtYSddLmFwcGVuZChDb21taXQoCisgICAgICAgICAgICAgICAg
aGFzaD0nZjkzMTM4ZTNiZjFkNWVjY2EyNWZjMDg0NGI3YTJhNzhiOGUwMGFhZScsCisgICAgICAg
ICAgICAgICAgYnJhbmNoPSdicmFuY2gtYScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRy
aWJ1dG9yKCdqYmVkYXJkQGFwcGxlLmNvbScsIGVtYWlscz1bJ2piZWRhcmRAYXBwbGUuY29tJ10p
LAorICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludD1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11b
LTFdLmJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPW1vY2suY29tbWl0
c1snYnJhbmNoLWEnXVstMV0uaWRlbnRpZmllciArIDEsCisgICAgICAgICAgICAgICAgdGltZXN0
YW1wPTE2MDE2NjgwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTmV3IGNvbW1pdCAxXG4n
LAorICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIG1vY2suY29tbWl0c1snYnJhbmNoLWEnXS5h
cHBlbmQoQ29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9JzAxNDhjMGRmMGZhZjI0OGFhMTMz
ZDZkNWFkOTExZDdjYjFiNTZhNWInLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nYnJhbmNoLWEn
LAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignamJlZGFyZEBhcHBsZS5jb20n
LCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBicmFuY2hf
cG9pbnQ9bW9jay5jb21taXRzWydicmFuY2gtYSddWy0xXS5icmFuY2hfcG9pbnQsCisgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcj1tb2NrLmNvbW1pdHNbJ2JyYW5jaC1hJ11bLTFdLmlkZW50aWZp
ZXIgKyAxLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY5MDAwLAorICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9J05ldyBjb21taXQgMlxuJywKKyAgICAgICAgICAgICkpCisKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdjYW5vbmljYWxpemUnLCApLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRo
LAorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9ycz1jb250aXJidXRvcnMsCisgICAgICAgICAg
ICApKQorCisgICAgICAgICAgICBjb21taXRfYSA9IGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1p
dChicmFuY2g9J2JyYW5jaC1hfjEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXRfYS5hdXRob3IsIGNvbnRpcmJ1dG9yc1snamJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0X2EubWVzc2FnZSwgJ05ldyBjb21taXQgMVxuSWRl
bnRpZmllcjogMi4zQGJyYW5jaC1hJykKKworICAgICAgICAgICAgY29tbWl0X2IgPSBsb2NhbC5H
aXQoc2VsZi5wYXRoKS5jb21taXQoYnJhbmNoPSdicmFuY2gtYScpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNvbW1pdF9iLmF1dGhvciwgY29udGlyYnV0b3JzWydqYmVkYXJkQGFwcGxl
LmNvbSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXRfYi5tZXNzYWdlLCAn
TmV3IGNvbW1pdCAyXG5JZGVudGlmaWVyOiAyLjRAYnJhbmNoLWEnKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAg
ICAgICAgICAgICdSZXdyaXRlIGY5MzEzOGUzYmYxZDVlY2NhMjVmYzA4NDRiN2EyYTc4YjhlMDBh
YWUgKDEvMikgKC0tLSBzZWNvbmRzIHBhc3NlZCwgcmVtYWluaW5nIC0tLSBwcmVkaWN0ZWQpXG4n
CisgICAgICAgICAgICAnUmV3cml0ZSAwMTQ4YzBkZjBmYWYyNDhhYTEzM2Q2ZDVhZDkxMWQ3Y2Ix
YjU2YTViICgyLzIpICgtLS0gc2Vjb25kcyBwYXNzZWQsIHJlbWFpbmluZyAtLS0gcHJlZGljdGVk
KVxuJworICAgICAgICAgICAgJzIgY29tbWl0cyBzdWNjZXNzZnVsbHkgY2Fub25pY2FsaXplZCFc
bicsCisgICAgICAgICkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417065</attachid>
            <date>2021-01-05 22:06:06 -0800</date>
            <delta_ts>2021-01-06 08:00:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219982-20210105220606.patch</filename>
            <type>text/plain</type>
            <size>2252</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTkyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTA0MjBiMzk3OThkN2I3M2MxYjY3ZDRiODUwNThmMzJh
ZDQ2ZWEzYS4uM2U5OTUyYWM2OGIxNWE5OGQ1YjZkNGI1M2MwZmZiM2Y0ZTE4ODY4NiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDIxLTAxLTA1ICBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorCisg
ICAgICAgIFt3ZWJraXRzY21weV0gQWRkIGNvbW1hbmQgdG8gY2Fub25pY2FsaXplIHVucHVzaGVk
IGNvbW1pdHMgKEZvbGxvdy11cCBmaXgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyNDI3NTM2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19faW5p
dF9fLnB5OgorICAgICAgICAoQ2Fub25pY2FsaXplLm1haW4pOiBnaXQgZmlsdGVyLWJyYW5jaCBy
ZXF1aXJlcyB0aGUgcmVwb3NpdG9yeSByb290LgorCiAyMDIxLTAxLTA1ICBBZGl0eWEgS2VlcnRo
aSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjYxMTU3KTog
Q3Jhc2ggaW4gV0tTZWxlY3RQb3BvdmVyIHdoZW4gcnVubmluZyBhcyBpUGhvbmUgYXBwIG9uIGlQ
YWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L2Nhbm9uaWNhbGl6ZS9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nhbm9uaWNhbGl6ZS9fX2luaXRfXy5weQppbmRleCAy
Njg0OTI3NWRlYzQ0ZTg4MTdiNjQ5OGRkNDViMDQ1NzBkODNhZTQ0Li5iNzQ2Yzg2NDhiNTNiNzM0
MDg1YTJjZjQwNzI1MWYwNjkwMTM1NWE1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25p
Y2FsaXplL19faW5pdF9fLnB5CkBAIC03NCw3ICs3NCw3IEBAIGNsYXNzIENhbm9uaWNhbGl6ZShD
b21tYW5kKToKICAgICAgICAgICAgIHJlcG9zaXRvcnkuZXhlY3V0YWJsZSgpLCAncmV2LWxpc3Qn
LAogICAgICAgICAgICAgJy0tY291bnQnLCAnLS1uby1tZXJnZXMnLAogICAgICAgICAgICAgJ3ty
ZW1vdGV9L3ticmFuY2h9Li57YnJhbmNofScuZm9ybWF0KHJlbW90ZT1hcmdzLnJlbW90ZSwgYnJh
bmNoPWJyYW5jaCksCi0gICAgICAgIF0sIGNhcHR1cmVfb3V0cHV0PVRydWUsIGN3ZD1yZXBvc2l0
b3J5LnBhdGgpCisgICAgICAgIF0sIGNhcHR1cmVfb3V0cHV0PVRydWUsIGN3ZD1yZXBvc2l0b3J5
LnJvb3RfcGF0aCkKICAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CiAgICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCdGYWlsZWQgdG8gZmluZCBsb2NhbCBjb21taXRzXG4nKQogICAgICAg
ICAgICAgcmV0dXJuIC0xCkBAIC0xMzUsNyArMTM1LDcgQEAgZmknJycuZm9ybWF0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0dGluZ19tZXNzYWdlPScnIGlmIGxvZy5sZXZlbCA+IGxvZ2dp
bmcuREVCVUcgZWxzZSAnZWNobyAiICAgICRLRVk9JFZBTFVFIicsCiAgICAgICAgICAgICAgICAg
ICAgICksCiAgICAgICAgICAgICAgICAgXSArIG1lc3NhZ2VfZmlsdGVyICsgWyd7fS4uLnt9Jy5m
b3JtYXQoYnJhbmNoLCBiYXNlLmhhc2gpXSwKLSAgICAgICAgICAgICAgICAgICAgY3dkPXJlcG9z
aXRvcnkucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgY3dkPXJlcG9zaXRvcnkucm9vdF9wYXRo
LAogICAgICAgICAgICAgICAgICAgICBlbnY9eydGSUxURVJfQlJBTkNIX1NRVUVMQ0hfV0FSTklO
Ryc6ICcxJywgJ1BZVEhPTlBBVEgnOiAnOicuam9pbihzeXMucGF0aCl9LAogICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9ZGV2bnVsbCBpZiBsb2cubGV2ZWwgPiBsb2dnaW5nLldBUk5JTkcgZWxz
ZSBOb25lLAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbCBpZiBsb2cubGV2ZWwg
PiBsb2dnaW5nLldBUk5JTkcgZWxzZSBOb25lLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417084</attachid>
            <date>2021-01-06 08:00:16 -0800</date>
            <delta_ts>2021-01-06 10:15:06 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-219982-20210106080015.patch</filename>
            <type>text/plain</type>
            <size>2758</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTIwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDIxLTAxLTA2ICBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29t
PgorCisgICAgICAgIFt3ZWJraXRzY21weV0gQWRkIGNvbW1hbmQgdG8gY2Fub25pY2FsaXplIHVu
cHVzaGVkIGNvbW1pdHMgKEZvbGxvdy11cCBmaXgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5ODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcy
NDI3NTM2PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFha2FzaCBKYWluLgorCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2FsaXplL19f
aW5pdF9fLnB5OgorICAgICAgICAoQ2Fub25pY2FsaXplLm1haW4pOiBnaXQgZmlsdGVyLWJyYW5j
aCByZXF1aXJlcyB0aGUgcmVwb3NpdG9yeSByb290LgorCiAyMDIxLTAxLTA2ICBMYXVybyBNb3Vy
YSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNES10gY29yZWR1bXBj
dGwgaW52b2NhdGlvbiB3aGVuIHVzaW5nIGEgbG9jYWwgU0RLIHJlcG8gZmFsbGJhY2tzIHRvIHRo
ZSByZW1vdGUgcmVwbwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MTIw
MCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRF
cnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5z
dGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAi
CiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA3LCAwKQordmVyc2lvbiA9IFZlcnNpb24o
MCwgNywgMSkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZmFzdGVuZXJzJywgVmVy
c2lvbigwLCAxNSwgMCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnbW9ub3Rvbmlj
JywgVmVyc2lvbigxLCA1KSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY2Fub25pY2Fs
aXplL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzEyMDApCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jYW5vbmljYWxpemUvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgQ2Fub25pY2FsaXplKENvbW1hbmQp
OgogICAgICAgICAgICAgcmVwb3NpdG9yeS5leGVjdXRhYmxlKCksICdyZXYtbGlzdCcsCiAgICAg
ICAgICAgICAnLS1jb3VudCcsICctLW5vLW1lcmdlcycsCiAgICAgICAgICAgICAne3JlbW90ZX0v
e2JyYW5jaH0uLnticmFuY2h9Jy5mb3JtYXQocmVtb3RlPWFyZ3MucmVtb3RlLCBicmFuY2g9YnJh
bmNoKSwKLSAgICAgICAgXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucGF0
aCkKKyAgICAgICAgXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgY3dkPXJlcG9zaXRvcnkucm9vdF9w
YXRoKQogICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKICAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoJ0ZhaWxlZCB0byBmaW5kIGxvY2FsIGNvbW1pdHNcbicpCiAgICAgICAgICAgICBy
ZXR1cm4gLTEKQEAgLTEzNSw3ICsxMzUsNyBAQCBmaScnJy5mb3JtYXQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5nX21lc3NhZ2U9JycgaWYgbG9nLmxldmVsID4gbG9nZ2luZy5ERUJV
RyBlbHNlICdlY2hvICIgICAgJEtFWT0kVkFMVUUiJywKICAgICAgICAgICAgICAgICAgICAgKSwK
ICAgICAgICAgICAgICAgICBdICsgbWVzc2FnZV9maWx0ZXIgKyBbJ3t9Li4ue30nLmZvcm1hdChi
cmFuY2gsIGJhc2UuaGFzaCldLAotICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5w
YXRoLAorICAgICAgICAgICAgICAgICAgICBjd2Q9cmVwb3NpdG9yeS5yb290X3BhdGgsCiAgICAg
ICAgICAgICAgICAgICAgIGVudj17J0ZJTFRFUl9CUkFOQ0hfU1FVRUxDSF9XQVJOSU5HJzogJzEn
LCAnUFlUSE9OUEFUSCc6ICc6Jy5qb2luKHN5cy5wYXRoKX0sCiAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dpbmcuV0FSTklORyBlbHNlIE5vbmUs
CiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsIGlmIGxvZy5sZXZlbCA+IGxvZ2dp
bmcuV0FSTklORyBlbHNlIE5vbmUsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>