<?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>201826</bug_id>
          
          <creation_ts>2019-09-16 10:53:14 -0700</creation_ts>
          <short_desc>Python 3: Add support in webkitpy.common.system</short_desc>
          <delta_ts>2021-09-02 12:42:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=202462</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=229824</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>angelsueneer</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>jlewis3</cc>
    
    <cc>krollin</cc>
    
    <cc>lantw44</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1571176</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-16 10:53:14 -0700</bug_when>
    <thetext>If we have Python 3 support here, working on the rest of webkitpy can be parallelized since just about everything depends on webkitpy.common.system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571177</commentid>
    <comment_count>1</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-16 10:54:13 -0700</bug_when>
    <thetext>I&apos;ve made some solid progress on this so far. Auto-migration tooling isn&apos;t going to be sufficient, our problems are mostly about unicode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571678</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-17 14:01:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/55452671&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572155</commentid>
    <comment_count>3</comment_count>
      <attachid>379085</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-18 16:56:44 -0700</bug_when>
    <thetext>Created attachment 379085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572940</commentid>
    <comment_count>4</comment_count>
      <attachid>379085</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-09-20 16:25:21 -0700</bug_when>
    <thetext>Comment on attachment 379085
Patch

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

Looks good overall; IMO would be better to move the re-definitions and version checks to the top of the file.

&gt; Tools/Scripts/webkitpy/common/version.py:33
&gt;      @staticmethod

Might be better just to subclass `operator` from the standard library:
https://docs.python.org/3/library/operator.html

&gt; Tools/Scripts/webkitpy/common/version.py:-36
&gt; -        for i in xrange(len(val)):

Nit: This should be a re-assignment up top:
```py
if sys.version &gt;= 3:
    xrange = range
```

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:36
&gt; +

Can we just re-assign unicode to str if sys.version &gt;= 3? Or maybe unicode to bytes?

&gt; Tools/Scripts/webkitpy/common/system/abstractexecutive.py:104
&gt; +        if sys.version_info &gt; (3, 0):

Nit: It would be clearer to re-assign unicode at the top of the file to str if sys.version_info &gt; (3, 0).

&gt; Tools/Scripts/webkitpy/common/system/abstractexecutive.py:115
&gt; +            if sys.version_info &lt; (3, 0) and isinstance(arg, unicode):

Ditto.

&gt; Tools/Scripts/webkitpy/common/system/executive.py:76
&gt; +        if sys.version_info &gt; (3, 0):

Ditto to previous comment on moving this up top.

&gt; Tools/Scripts/webkitpy/common/system/executive.py:470
&gt; +        string_args = map(str if sys.version_info &gt; (3, 0) else unicode, args)

Ditto to previous comments.

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:258
&gt; +            if (sys.version_info &gt; (3, 0)):

Nit: Can you just re-assign str to bytes if our version is &gt; 3,0?

Also, need_encodeing -&gt; need_encoding.

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:190
&gt; +        return [i for i in filter(path_filter, existing_files)] + [i for i in filter(path_filter, self.dirs)]

Nit: Easier to cast these to list().

&gt; Tools/Scripts/webkitpy/common/system/profiler.py:-44
&gt; -        profiler_class = next(itertools.ifilter(lambda profiler: profiler.name == profiler_name, profilers), None)

Nit: itertools.ifilter in py2 is equivalent to filter in py3.

&gt; Tools/Scripts/webkitpy/common/system/user_mock.py:34
&gt; +if sys.version_info &gt; (3, 0):

Nit: Might be more clear to just re-assign input or raw_input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572942</commentid>
    <comment_count>5</comment_count>
      <attachid>379085</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2019-09-20 16:30:08 -0700</bug_when>
    <thetext>Comment on attachment 379085
Patch

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

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:440
&gt; +                            result.write(unicode(&quot;\n        Reviewed by %s.\n&quot; % reviewer))

Let&apos;s add comments for cases when we need to make files python3 compatible.

Also do we want to keep % notation?

&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt; +if sys.version_info &gt; (3, 0):

should we just make a common is_python_3 helper function?

&gt; Tools/Scripts/webkitpy/common/system/abstractexecutive.py:104
&gt; +        if sys.version_info &gt; (3, 0):

I like Dean&apos;s idea about reassigning unicode to str in python3

&gt; Tools/Scripts/webkitpy/common/system/executive.py:76
&gt; +        if sys.version_info &gt; (3, 0):

unicode hack

&gt; Tools/Scripts/webkitpy/common/system/executive.py:95
&gt; +                    continue

This code feels extremely unsafe to me.  We have no idea if Popen is depending on some of the __ functions you are not setting

&gt; Tools/Scripts/webkitpy/common/system/executive.py:-114
&gt; -        while True:

keep comment?

&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))

maybe write a decode helper function?

&gt; Tools/Scripts/webkitpy/common/system/executive.py:374
&gt; +        if sys.version_info &lt; (3, 0) and isinstance(input, unicode):

rename unicode?

&gt; Tools/Scripts/webkitpy/common/system/executive.py:405
&gt; +                output = output = process.communicate()[0]

bug

&gt; Tools/Scripts/webkitpy/common/system/executive.py:407
&gt; +                output = process.communicate(string_to_communicate.encode(&apos;utf-8&apos;))[0]

decide/encode cleanup

&gt; Tools/Scripts/webkitpy/common/system/executive.py:470
&gt; +        string_args = map(str if sys.version_info &gt; (3, 0) else unicode, args)

rename unicode?

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:258
&gt; +            if (sys.version_info &gt; (3, 0)):

encode/decode helper functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573370</commentid>
    <comment_count>6</comment_count>
      <attachid>379085</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 11:39:15 -0700</bug_when>
    <thetext>Comment on attachment 379085
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/version.py:33
&gt;&gt;      @staticmethod
&gt; 
&gt; Might be better just to subclass `operator` from the standard library:
&gt; https://docs.python.org/3/library/operator.html

Not quite sure what you have in mind here. The operator module doesn&apos;t include anything to subclass

&gt;&gt; Tools/Scripts/webkitpy/common/version.py:-36
&gt;&gt; -        for i in xrange(len(val)):
&gt; 
&gt; Nit: This should be a re-assignment up top:
&gt; ```py
&gt; if sys.version &gt;= 3:
&gt;     xrange = range
&gt; ```

In this case, we don&apos;t lose much by using range in Python 3, I&apos;d rather not have the version check if we don &apos;t need it.

&gt;&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt;&gt; +if sys.version_info &gt; (3, 0):
&gt; 
&gt; should we just make a common is_python_3 helper function?

I don&apos;t know that an is_python_3 function is any shorter or more clear than this (and then we would have to import it)

If we were going to do this, we would probably want to have a sort of &apos;webkitpy.common.python3&apos;

&gt;&gt; Tools/Scripts/webkitpy/common/system/abstractexecutive.py:115
&gt;&gt; +            if sys.version_info &lt; (3, 0) and isinstance(arg, unicode):
&gt; 
&gt; Ditto.

Still need the version check here, we want to use unicode in Python 3

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt;&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))
&gt; 
&gt; maybe write a decode helper function?

What would you envision that function to be and where should it live?

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:374
&gt;&gt; +        if sys.version_info &lt; (3, 0) and isinstance(input, unicode):
&gt; 
&gt; rename unicode?

I will, but we still need the version check because we want to prefer unicode in Python 3, but not Python 2 (string literals are unicode in Python 3)

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:258
&gt;&gt;&gt; +            if (sys.version_info &gt; (3, 0)):
&gt;&gt; 
&gt;&gt; Nit: Can you just re-assign str to bytes if our version is &gt; 3,0?
&gt;&gt; 
&gt;&gt; Also, need_encodeing -&gt; need_encoding.
&gt; 
&gt; encode/decode helper functions

No, we definitely can&apos;t just re-assign str to bytes, because str is a valid identifier in Python 3.

Also, we have had some systemic problems with unicode handling, I think forcing ourselves to be explicit is going to be a good thing for the codebase. It will force us to be clear about what we mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573371</commentid>
    <comment_count>7</comment_count>
      <attachid>379382</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 11:42:32 -0700</bug_when>
    <thetext>Created attachment 379382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573421</commentid>
    <comment_count>8</comment_count>
      <attachid>379085</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-09-23 14:43:54 -0700</bug_when>
    <thetext>Comment on attachment 379085
Patch

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

Few more comments / code cleanup opportunities.

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/version.py:33
&gt;&gt;&gt;      @staticmethod
&gt;&gt; 
&gt;&gt; Might be better just to subclass `operator` from the standard library:
&gt;&gt; https://docs.python.org/3/library/operator.html
&gt; 
&gt; Not quite sure what you have in mind here. The operator module doesn&apos;t include anything to subclass

I&apos;m a bit confused -- reading the data model for Python 3.7 it isn&apos;t clear to me that the various comparator functions (__gt__, __lt__, __eq__, etc.) are removed from the base `object`.

➜  python3
Python 3.7.3 (...)
...
&gt;&gt;&gt; class test(object):
...  pass
...
&gt;&gt;&gt; t = test()
&gt;&gt;&gt; dir(t)
[&apos;__class__&apos;, &apos;__delattr__&apos;, &apos;__dict__&apos;, &apos;__dir__&apos;, &apos;__doc__&apos;, &apos;__eq__&apos;, &apos;__format__&apos;, &apos;__ge__&apos;, &apos;__getattribute__&apos;, &apos;__gt__&apos;, &apos;__hash__&apos;, &apos;__init__&apos;, &apos;__init_subclass__&apos;, &apos;__le__&apos;, &apos;__lt__&apos;, &apos;__module__&apos;, &apos;__ne__&apos;, &apos;__new__&apos;, &apos;__reduce__&apos;, &apos;__reduce_ex__&apos;, &apos;__repr__&apos;, &apos;__setattr__&apos;, &apos;__sizeof__&apos;, &apos;__str__&apos;, &apos;__subclasshook__&apos;, &apos;__weakref__&apos;]
&gt;&gt;&gt; g = test()
&gt;&gt;&gt; t == g
False // NotImplementedError not raised

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:440
&gt;&gt; +                            result.write(unicode(&quot;\n        Reviewed by %s.\n&quot; % reviewer))
&gt; 
&gt; Let&apos;s add comments for cases when we need to make files python3 compatible.
&gt; 
&gt; Also do we want to keep % notation?

Won&apos;t this break python3 compatibility?

➜ python3
&gt;&gt;&gt; unicode
Traceback (most recent call last):
  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
NameError: name &apos;unicode&apos; is not defined

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt;&gt;&gt; +if sys.version_info &gt; (3, 0):
&gt;&gt; 
&gt;&gt; should we just make a common is_python_3 helper function?
&gt; 
&gt; I don&apos;t know that an is_python_3 function is any shorter or more clear than this (and then we would have to import it)
&gt; 
&gt; If we were going to do this, we would probably want to have a sort of &apos;webkitpy.common.python3&apos;

IMO a version check here is fine vs a helper function given this is for specific imports. However, I do think it&apos;s useful to have a helper function for more frequent version-specific edge-cases, such as string vs unicode.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:303
&gt; +                self.files[key] = value.encode(&apos;utf-8&apos;)

This is a bit less clear, so I&apos;m not necessarily advocating for it, but for other cases another way to write this could be:
self.files = {key: value and value.encode(&apos;utf-8&apos;) for key, value in self.files.items()}

&gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:321
&gt; +            self.assertTrue(crash_log in [value.decode(&apos;utf-8&apos;) if value else None for value in self.files.values()])

Nit: Same to other comment, though maybe this would be a slight improvement in readability (your call):
self.assertTrue(crash_log in [value and value.decode(&apos;utf-8&apos;) for value in self.files.values()])

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:95
&gt;&gt; +                    continue
&gt; 
&gt; This code feels extremely unsafe to me.  We have no idea if Popen is depending on some of the __ functions you are not setting

I agree with this statement. Why don&apos;t we just subclass subprocess.Popen and write our own __enter__ and __exit__?

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt;&gt;&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))
&gt;&gt; 
&gt;&gt; maybe write a decode helper function?
&gt; 
&gt; What would you envision that function to be and where should it live?

Something like webkitpy.common.py3_compatibility_hacks and a function named &apos;py23_decode_if_necessary`. Example page:
....
    output_line = child_process.stdout.readline()
    output_line = py23_decode_if_necessary(output_line)
    teed_output.write(output_line)
....

&gt; Tools/Scripts/webkitpy/common/system/executive.py:143
&gt; +        child_out_file = StringIO() if sys.version_info &gt; (3, 0) else BytesIO()

Can you please do this re-assignment at the top of the file? Doing all of these in-line makes it really difficult to understand which py3 hacks we&apos;ve added and where.

&gt; Tools/Scripts/webkitpy/common/system/path.py:154
&gt; +        return urllib.parse.quote(path, safe=&apos;/+:&apos;)

As part of the sys.version check, maybe we can just re-assign `urllib.quote = urllib.parse.quote`? Then we don&apos;t need anything special in our logic here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573428</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 15:04:20 -0700</bug_when>
    <thetext>(In reply to Dean Johnson from comment #8)
&gt; Comment on attachment 379085 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379085&amp;action=review
&gt; 
&gt; Few more comments / code cleanup opportunities.
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/version.py:33
&gt; &gt;&gt;&gt;      @staticmethod
&gt; &gt;&gt; 
&gt; &gt;&gt; Might be better just to subclass `operator` from the standard library:
&gt; &gt;&gt; https://docs.python.org/3/library/operator.html
&gt; &gt; 
&gt; &gt; Not quite sure what you have in mind here. The operator module doesn&apos;t include anything to subclass
&gt; 
&gt; I&apos;m a bit confused -- reading the data model for Python 3.7 it isn&apos;t clear
&gt; to me that the various comparator functions (__gt__, __lt__, __eq__, etc.)
&gt; are removed from the base `object`.
&gt; 
&gt; ➜  python3
&gt; Python 3.7.3 (...)
&gt; ...
&gt; &gt;&gt;&gt; class test(object):
&gt; ...  pass
&gt; ...
&gt; &gt;&gt;&gt; t = test()
&gt; &gt;&gt;&gt; dir(t)
&gt; [&apos;__class__&apos;, &apos;__delattr__&apos;, &apos;__dict__&apos;, &apos;__dir__&apos;, &apos;__doc__&apos;, &apos;__eq__&apos;,
&gt; &apos;__format__&apos;, &apos;__ge__&apos;, &apos;__getattribute__&apos;, &apos;__gt__&apos;, &apos;__hash__&apos;,
&gt; &apos;__init__&apos;, &apos;__init_subclass__&apos;, &apos;__le__&apos;, &apos;__lt__&apos;, &apos;__module__&apos;, &apos;__ne__&apos;,
&gt; &apos;__new__&apos;, &apos;__reduce__&apos;, &apos;__reduce_ex__&apos;, &apos;__repr__&apos;, &apos;__setattr__&apos;,
&gt; &apos;__sizeof__&apos;, &apos;__str__&apos;, &apos;__subclasshook__&apos;, &apos;__weakref__&apos;]
&gt; &gt;&gt;&gt; g = test()
&gt; &gt;&gt;&gt; t == g
&gt; False // NotImplementedError not raised

They removed the __cmp__ function. The suggested approach is basically exactly what I did &lt;https://portingguide.readthedocs.io/en/latest/comparisons.html&gt;.

&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:440
&gt; &gt;&gt; +                            result.write(unicode(&quot;\n        Reviewed by %s.\n&quot; % reviewer))
&gt; &gt; 
&gt; &gt; Let&apos;s add comments for cases when we need to make files python3 compatible.
&gt; &gt; 
&gt; &gt; Also do we want to keep % notation?
&gt; 
&gt; Won&apos;t this break python3 compatibility?

Yes, hence the &apos;add comments for cases when we need to make files Python 3 compatible&apos;. webkitpy is spaghetti code, I wasn&apos;t targeting common/checkout, just had to change the imports since webkitpy/port depends on it.

&gt; 
&gt; ➜ python3
&gt; &gt;&gt;&gt; unicode
&gt; Traceback (most recent call last):
&gt;   File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
&gt; NameError: name &apos;unicode&apos; is not defined
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt; &gt;&gt;&gt; +if sys.version_info &gt; (3, 0):
&gt; &gt;&gt; 
&gt; &gt;&gt; should we just make a common is_python_3 helper function?
&gt; &gt; 
&gt; &gt; I don&apos;t know that an is_python_3 function is any shorter or more clear than this (and then we would have to import it)
&gt; &gt; 
&gt; &gt; If we were going to do this, we would probably want to have a sort of &apos;webkitpy.common.python3&apos;
&gt; 
&gt; IMO a version check here is fine vs a helper function given this is for
&gt; specific imports. However, I do think it&apos;s useful to have a helper function
&gt; for more frequent version-specific edge-cases, such as string vs unicode.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:303
&gt; &gt; +                self.files[key] = value.encode(&apos;utf-8&apos;)
&gt; 
&gt; This is a bit less clear, so I&apos;m not necessarily advocating for it, but for
&gt; other cases another way to write this could be:
&gt; self.files = {key: value and value.encode(&apos;utf-8&apos;) for key, value in
&gt; self.files.items()}
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:321
&gt; &gt; +            self.assertTrue(crash_log in [value.decode(&apos;utf-8&apos;) if value else None for value in self.files.values()])
&gt; 
&gt; Nit: Same to other comment, though maybe this would be a slight improvement
&gt; in readability (your call):
&gt; self.assertTrue(crash_log in [value and value.decode(&apos;utf-8&apos;) for value in
&gt; self.files.values()])
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:95
&gt; &gt;&gt; +                    continue
&gt; &gt; 
&gt; &gt; This code feels extremely unsafe to me.  We have no idea if Popen is depending on some of the __ functions you are not setting
&gt; 
&gt; I agree with this statement. Why don&apos;t we just subclass subprocess.Popen and
&gt; write our own __enter__ and __exit__?

Because we aren&apos;t actually creating the Popen object, we&apos;re getting an already instantiated instance from subprocess.

I&apos;m open to other ideas, but as far as I can tell, this is the least disruptive and safest approach. The Python 3 context manger approach is definitely more correctly than Python 2&apos;s, and if we don&apos;t 

&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt; &gt;&gt;&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))
&gt; &gt;&gt; 
&gt; &gt;&gt; maybe write a decode helper function?
&gt; &gt; 
&gt; &gt; What would you envision that function to be and where should it live?
&gt; 
&gt; Something like webkitpy.common.py3_compatibility_hacks and a function named
&gt; &apos;py23_decode_if_necessary`. Example page:
&gt; ....
&gt;     output_line = child_process.stdout.readline()
&gt;     output_line = py23_decode_if_necessary(output_line)
&gt;     teed_output.write(output_line)
&gt; ....
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:143
&gt; &gt; +        child_out_file = StringIO() if sys.version_info &gt; (3, 0) else BytesIO()
&gt; 
&gt; Can you please do this re-assignment at the top of the file? Doing all of
&gt; these in-line makes it really difficult to understand which py3 hacks we&apos;ve
&gt; added and where.

I am very much against generalizing this hack because it&apos;s not always correct. In this case, it&apos;s only what we want because we&apos;re looking for an output file that is accessed as a text file instead of a binary file. The trouble is, a text file with the native string encoding will be StringIO in Python 3 and BytesIO in Python 2. It&apos;s possible, however, that we want a ByteIO (ie, binary) encoded file stream in Python 3 or a unicode encoded stream in Python 2.

I think we need to force ourselves to think about what we want any time we use BytesIO and StringIO. If we wanted a &apos;generalized&apos; hack, we should define BytesIO, StringIO (StringIO in Python 3, BytesIO in Python 2) and UnicodeIO. But that seems extremely confusing, it means that when developers used StringIO, they wouldn&apos;t actually be using StringIO.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/path.py:154
&gt; &gt; +        return urllib.parse.quote(path, safe=&apos;/+:&apos;)
&gt; 
&gt; As part of the sys.version check, maybe we can just re-assign `urllib.quote
&gt; = urllib.parse.quote`? Then we don&apos;t need anything special in our logic here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573429</commentid>
    <comment_count>10</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-23 15:06:34 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #9)
&gt; (In reply to Dean Johnson from comment #8)
&gt; ...
&gt; 
&gt; I&apos;m open to other ideas, but as far as I can tell, this is the least
&gt; disruptive and safest approach. The Python 3 context manger approach is
&gt; definitely more correctly than Python 2&apos;s, and if we don&apos;t 

use the context manager, we&apos;ll leave file handles open, so we would still need some sort of clean-up in all of our callers.

&gt; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573496</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-09-23 17:42:03 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #9)
&gt; (In reply to Dean Johnson from comment #8)
&gt; &gt; Comment on attachment 379085 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=379085&amp;action=review
&gt; &gt; 
&gt; &gt; Few more comments / code cleanup opportunities.
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/version.py:33
&gt; &gt; &gt;&gt;&gt;      @staticmethod
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Might be better just to subclass `operator` from the standard library:
&gt; &gt; &gt;&gt; https://docs.python.org/3/library/operator.html
&gt; &gt; &gt; 
&gt; &gt; &gt; Not quite sure what you have in mind here. The operator module doesn&apos;t include anything to subclass
&gt; &gt; 
&gt; &gt; I&apos;m a bit confused -- reading the data model for Python 3.7 it isn&apos;t clear
&gt; &gt; to me that the various comparator functions (__gt__, __lt__, __eq__, etc.)
&gt; &gt; are removed from the base `object`.
&gt; &gt; 
&gt; &gt; ➜  python3
&gt; &gt; Python 3.7.3 (...)
&gt; &gt; ...
&gt; &gt; &gt;&gt;&gt; class test(object):
&gt; &gt; ...  pass
&gt; &gt; ...
&gt; &gt; &gt;&gt;&gt; t = test()
&gt; &gt; &gt;&gt;&gt; dir(t)
&gt; &gt; [&apos;__class__&apos;, &apos;__delattr__&apos;, &apos;__dict__&apos;, &apos;__dir__&apos;, &apos;__doc__&apos;, &apos;__eq__&apos;,
&gt; &gt; &apos;__format__&apos;, &apos;__ge__&apos;, &apos;__getattribute__&apos;, &apos;__gt__&apos;, &apos;__hash__&apos;,
&gt; &gt; &apos;__init__&apos;, &apos;__init_subclass__&apos;, &apos;__le__&apos;, &apos;__lt__&apos;, &apos;__module__&apos;, &apos;__ne__&apos;,
&gt; &gt; &apos;__new__&apos;, &apos;__reduce__&apos;, &apos;__reduce_ex__&apos;, &apos;__repr__&apos;, &apos;__setattr__&apos;,
&gt; &gt; &apos;__sizeof__&apos;, &apos;__str__&apos;, &apos;__subclasshook__&apos;, &apos;__weakref__&apos;]
&gt; &gt; &gt;&gt;&gt; g = test()
&gt; &gt; &gt;&gt;&gt; t == g
&gt; &gt; False // NotImplementedError not raised
&gt; 
&gt; They removed the __cmp__ function. The suggested approach is basically
&gt; exactly what I did
&gt; &lt;https://portingguide.readthedocs.io/en/latest/comparisons.html&gt;.
But why are you implementing all the other __* methods that aren&apos;t __cmp__? They should already use __cmp__ by default. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:440
&gt; &gt; &gt;&gt; +                            result.write(unicode(&quot;\n        Reviewed by %s.\n&quot; % reviewer))
&gt; &gt; &gt; 
&gt; &gt; &gt; Let&apos;s add comments for cases when we need to make files python3 compatible.
&gt; &gt; &gt; 
&gt; &gt; &gt; Also do we want to keep % notation?
&gt; &gt; 
&gt; &gt; Won&apos;t this break python3 compatibility?
&gt; 
&gt; Yes, hence the &apos;add comments for cases when we need to make files Python 3
&gt; compatible&apos;. webkitpy is spaghetti code, I wasn&apos;t targeting common/checkout,
&gt; just had to change the imports since webkitpy/port depends on it.
But can&apos;t this just be handled by putting something like the following at the top of the file?:
if sys.version_info &gt; (3, 2):
    unicode = str
&gt; 
&gt; &gt; 
&gt; &gt; ➜ python3
&gt; &gt; &gt;&gt;&gt; unicode
&gt; &gt; Traceback (most recent call last):
&gt; &gt;   File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
&gt; &gt; NameError: name &apos;unicode&apos; is not defined
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt; &gt; &gt;&gt;&gt; +if sys.version_info &gt; (3, 0):
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; should we just make a common is_python_3 helper function?
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t know that an is_python_3 function is any shorter or more clear than this (and then we would have to import it)
&gt; &gt; &gt; 
&gt; &gt; &gt; If we were going to do this, we would probably want to have a sort of &apos;webkitpy.common.python3&apos;
&gt; &gt; 
&gt; &gt; IMO a version check here is fine vs a helper function given this is for
&gt; &gt; specific imports. However, I do think it&apos;s useful to have a helper function
&gt; &gt; for more frequent version-specific edge-cases, such as string vs unicode.
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:303
&gt; &gt; &gt; +                self.files[key] = value.encode(&apos;utf-8&apos;)
&gt; &gt; 
&gt; &gt; This is a bit less clear, so I&apos;m not necessarily advocating for it, but for
&gt; &gt; other cases another way to write this could be:
&gt; &gt; self.files = {key: value and value.encode(&apos;utf-8&apos;) for key, value in
&gt; &gt; self.files.items()}
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:321
&gt; &gt; &gt; +            self.assertTrue(crash_log in [value.decode(&apos;utf-8&apos;) if value else None for value in self.files.values()])
&gt; &gt; 
&gt; &gt; Nit: Same to other comment, though maybe this would be a slight improvement
&gt; &gt; in readability (your call):
&gt; &gt; self.assertTrue(crash_log in [value and value.decode(&apos;utf-8&apos;) for value in
&gt; &gt; self.files.values()])
&gt; &gt; 
&gt; &gt; &gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:95
&gt; &gt; &gt;&gt; +                    continue
&gt; &gt; &gt; 
&gt; &gt; &gt; This code feels extremely unsafe to me.  We have no idea if Popen is depending on some of the __ functions you are not setting
&gt; &gt; 
&gt; &gt; I agree with this statement. Why don&apos;t we just subclass subprocess.Popen and
&gt; &gt; write our own __enter__ and __exit__?
&gt; 
&gt; Because we aren&apos;t actually creating the Popen object, we&apos;re getting an
&gt; already instantiated instance from subprocess.
&gt; 
&gt; I&apos;m open to other ideas, but as far as I can tell, this is the least
&gt; disruptive and safest approach. The Python 3 context manger approach is
&gt; definitely more correctly than Python 2&apos;s, and if we don&apos;t 
&gt; 
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt; &gt; &gt;&gt;&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; maybe write a decode helper function?
&gt; &gt; &gt; 
&gt; &gt; &gt; What would you envision that function to be and where should it live?
&gt; &gt; 
&gt; &gt; Something like webkitpy.common.py3_compatibility_hacks and a function named
&gt; &gt; &apos;py23_decode_if_necessary`. Example page:
&gt; &gt; ....
&gt; &gt;     output_line = child_process.stdout.readline()
&gt; &gt;     output_line = py23_decode_if_necessary(output_line)
&gt; &gt;     teed_output.write(output_line)
&gt; &gt; ....
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:143
&gt; &gt; &gt; +        child_out_file = StringIO() if sys.version_info &gt; (3, 0) else BytesIO()
&gt; &gt; 
&gt; &gt; Can you please do this re-assignment at the top of the file? Doing all of
&gt; &gt; these in-line makes it really difficult to understand which py3 hacks we&apos;ve
&gt; &gt; added and where.
&gt; 
&gt; I am very much against generalizing this hack because it&apos;s not always
&gt; correct. In this case, it&apos;s only what we want because we&apos;re looking for an
&gt; output file that is accessed as a text file instead of a binary file. The
&gt; trouble is, a text file with the native string encoding will be StringIO in
&gt; Python 3 and BytesIO in Python 2. It&apos;s possible, however, that we want a
&gt; ByteIO (ie, binary) encoded file stream in Python 3 or a unicode encoded
&gt; stream in Python 2.
Generally, I&apos;m against in-lining Python2/3 compatibility hacks. I&apos;d rather add new variable names (like UnicodeIO) and use those instead where needed. For example:
if sys.version_info &gt; (3, 0):
    UnicodeIO = StringIO
else:
    UnicodeIO = BytesIO

Then use UnicodeIO in the places where it&apos;s needed.

Taking this general approach makes it so any compatibility hacks that exist are immediately obvious when reading the file, and are generally in the same places.
&gt; 
&gt; I think we need to force ourselves to think about what we want any time we
&gt; use BytesIO and StringIO. If we wanted a &apos;generalized&apos; hack, we should
&gt; define BytesIO, StringIO (StringIO in Python 3, BytesIO in Python 2) and
&gt; UnicodeIO. But that seems extremely confusing, it means that when developers
&gt; used StringIO, they wouldn&apos;t actually be using StringIO.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/path.py:154
&gt; &gt; &gt; +        return urllib.parse.quote(path, safe=&apos;/+:&apos;)
&gt; &gt; 
&gt; &gt; As part of the sys.version check, maybe we can just re-assign `urllib.quote
&gt; &gt; = urllib.parse.quote`? Then we don&apos;t need anything special in our logic here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573669</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-24 08:53:16 -0700</bug_when>
    <thetext>(In reply to Dean Johnson from comment #11)
&gt; ...
&gt; &gt; &gt; ...
&gt; &gt; &gt; &gt;&gt;&gt; t = test()
&gt; &gt; &gt; &gt;&gt;&gt; dir(t)
&gt; &gt; &gt; [&apos;__class__&apos;, &apos;__delattr__&apos;, &apos;__dict__&apos;, &apos;__dir__&apos;, &apos;__doc__&apos;, &apos;__eq__&apos;,
&gt; &gt; &gt; &apos;__format__&apos;, &apos;__ge__&apos;, &apos;__getattribute__&apos;, &apos;__gt__&apos;, &apos;__hash__&apos;,
&gt; &gt; &gt; &apos;__init__&apos;, &apos;__init_subclass__&apos;, &apos;__le__&apos;, &apos;__lt__&apos;, &apos;__module__&apos;, &apos;__ne__&apos;,
&gt; &gt; &gt; &apos;__new__&apos;, &apos;__reduce__&apos;, &apos;__reduce_ex__&apos;, &apos;__repr__&apos;, &apos;__setattr__&apos;,
&gt; &gt; &gt; &apos;__sizeof__&apos;, &apos;__str__&apos;, &apos;__subclasshook__&apos;, &apos;__weakref__&apos;]
&gt; &gt; &gt; &gt;&gt;&gt; g = test()
&gt; &gt; &gt; &gt;&gt;&gt; t == g
&gt; &gt; &gt; False // NotImplementedError not raised
&gt; &gt; 
&gt; &gt; They removed the __cmp__ function. The suggested approach is basically
&gt; &gt; exactly what I did
&gt; &gt; &lt;https://portingguide.readthedocs.io/en/latest/comparisons.html&gt;.
&gt; But why are you implementing all the other __* methods that aren&apos;t __cmp__?
&gt; They should already use __cmp__ by default. 

That doesn&apos;t work any more in Python 3.

&gt; ...
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:440
&gt; &gt; &gt; &gt;&gt; +                            result.write(unicode(&quot;\n        Reviewed by %s.\n&quot; % reviewer))
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Let&apos;s add comments for cases when we need to make files python3 compatible.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Also do we want to keep % notation?
&gt; &gt; &gt; 
&gt; &gt; &gt; Won&apos;t this break python3 compatibility?
&gt; &gt; 
&gt; &gt; Yes, hence the &apos;add comments for cases when we need to make files Python 3
&gt; &gt; compatible&apos;. webkitpy is spaghetti code, I wasn&apos;t targeting common/checkout,
&gt; &gt; just had to change the imports since webkitpy/port depends on it.
&gt; But can&apos;t this just be handled by putting something like the following at
&gt; the top of the file?:
&gt; if sys.version_info &gt; (3, 2):
&gt;     unicode = str

I have not audited this file. That will happen in another patch. We have spaghetti code in webkitpy, I&apos;m trying to separate patches as much as possible. There are no doubt very simple solutions, but again, making webkitpy.common.checkout Python3 compatible is not the goal of this patch.

&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; ➜ python3
&gt; &gt; &gt; &gt;&gt;&gt; unicode
&gt; &gt; &gt; Traceback (most recent call last):
&gt; &gt; &gt;   File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
&gt; &gt; &gt; NameError: name &apos;unicode&apos; is not defined
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/net/networktransaction.py:33
&gt; &gt; &gt; &gt;&gt;&gt; +if sys.version_info &gt; (3, 0):
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; should we just make a common is_python_3 helper function?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t know that an is_python_3 function is any shorter or more clear than this (and then we would have to import it)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If we were going to do this, we would probably want to have a sort of &apos;webkitpy.common.python3&apos;
&gt; &gt; &gt; 
&gt; &gt; &gt; IMO a version check here is fine vs a helper function given this is for
&gt; &gt; &gt; specific imports. However, I do think it&apos;s useful to have a helper function
&gt; &gt; &gt; for more frequent version-specific edge-cases, such as string vs unicode.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:303
&gt; &gt; &gt; &gt; +                self.files[key] = value.encode(&apos;utf-8&apos;)
&gt; &gt; &gt; 
&gt; &gt; &gt; This is a bit less clear, so I&apos;m not necessarily advocating for it, but for
&gt; &gt; &gt; other cases another way to write this could be:
&gt; &gt; &gt; self.files = {key: value and value.encode(&apos;utf-8&apos;) for key, value in
&gt; &gt; &gt; self.files.items()}
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:321
&gt; &gt; &gt; &gt; +            self.assertTrue(crash_log in [value.decode(&apos;utf-8&apos;) if value else None for value in self.files.values()])
&gt; &gt; &gt; 
&gt; &gt; &gt; Nit: Same to other comment, though maybe this would be a slight improvement
&gt; &gt; &gt; in readability (your call):
&gt; &gt; &gt; self.assertTrue(crash_log in [value and value.decode(&apos;utf-8&apos;) for value in
&gt; &gt; &gt; self.files.values()])
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:95
&gt; &gt; &gt; &gt;&gt; +                    continue
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This code feels extremely unsafe to me.  We have no idea if Popen is depending on some of the __ functions you are not setting
&gt; &gt; &gt; 
&gt; &gt; &gt; I agree with this statement. Why don&apos;t we just subclass subprocess.Popen and
&gt; &gt; &gt; write our own __enter__ and __exit__?
&gt; &gt; 
&gt; &gt; Because we aren&apos;t actually creating the Popen object, we&apos;re getting an
&gt; &gt; already instantiated instance from subprocess.
&gt; &gt; 
&gt; &gt; I&apos;m open to other ideas, but as far as I can tell, this is the least
&gt; &gt; disruptive and safest approach. The Python 3 context manger approach is
&gt; &gt; definitely more correctly than Python 2&apos;s, and if we don&apos;t 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:132
&gt; &gt; &gt; &gt;&gt;&gt; +                    teed_output.write(output_line.decode(&apos;utf-8&apos;))
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; maybe write a decode helper function?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What would you envision that function to be and where should it live?
&gt; &gt; &gt; 
&gt; &gt; &gt; Something like webkitpy.common.py3_compatibility_hacks and a function named
&gt; &gt; &gt; &apos;py23_decode_if_necessary`. Example page:
&gt; &gt; &gt; ....
&gt; &gt; &gt;     output_line = child_process.stdout.readline()
&gt; &gt; &gt;     output_line = py23_decode_if_necessary(output_line)
&gt; &gt; &gt;     teed_output.write(output_line)
&gt; &gt; &gt; ....
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:143
&gt; &gt; &gt; &gt; +        child_out_file = StringIO() if sys.version_info &gt; (3, 0) else BytesIO()
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you please do this re-assignment at the top of the file? Doing all of
&gt; &gt; &gt; these in-line makes it really difficult to understand which py3 hacks we&apos;ve
&gt; &gt; &gt; added and where.
&gt; &gt; 
&gt; &gt; I am very much against generalizing this hack because it&apos;s not always
&gt; &gt; correct. In this case, it&apos;s only what we want because we&apos;re looking for an
&gt; &gt; output file that is accessed as a text file instead of a binary file. The
&gt; &gt; trouble is, a text file with the native string encoding will be StringIO in
&gt; &gt; Python 3 and BytesIO in Python 2. It&apos;s possible, however, that we want a
&gt; &gt; ByteIO (ie, binary) encoded file stream in Python 3 or a unicode encoded
&gt; &gt; stream in Python 2.
&gt; Generally, I&apos;m against in-lining Python2/3 compatibility hacks. I&apos;d rather
&gt; add new variable names (like UnicodeIO) and use those instead where needed.
&gt; For example:
&gt; if sys.version_info &gt; (3, 0):
&gt;     UnicodeIO = StringIO
&gt; else:
&gt;     UnicodeIO = BytesIO
&gt; 
&gt; Then use UnicodeIO in the places where it&apos;s needed.
&gt; 
&gt; Taking this general approach makes it so any compatibility hacks that exist
&gt; are immediately obvious when reading the file, and are generally in the same
&gt; places.
&gt;

I&apos;ll add the generalization, but I&apos;d like to point out that your example code is wrong. UnicodeIO = io.StringIO in both Python2 and Python3, StringIO = UnicodeIO in Python3, but StringIO = BytesIO in Python2 (or at least, it should....the IO stream which accepts the String type in Python2 would be a bytes stream)

TLDR, there are actually 2 versions of StringIO in Python 2, StringIO.StringIO (which is a byte stream) and io.StringIO (which is a unicode string stream).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573799</commentid>
    <comment_count>13</comment_count>
      <attachid>379482</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-24 13:34:49 -0700</bug_when>
    <thetext>Created attachment 379482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574098</commentid>
    <comment_count>14</comment_count>
      <attachid>379482</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-25 10:10:11 -0700</bug_when>
    <thetext>Comment on attachment 379482
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/executive.py:90
&gt; +                if attribute.startswith(&apos;__&apos;):

To Stephanie&apos;s point here, if we are relying on __ functions from the popen we aren&apos;t picking up here, we&apos;d end up with an exception like this:

AttributeError: __&lt;function&gt;__

I think it&apos;s quite unlikely that we&apos;re relying on such functions, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574145</commentid>
    <comment_count>15</comment_count>
      <attachid>379482</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-09-25 11:50:29 -0700</bug_when>
    <thetext>Comment on attachment 379482
Patch

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

Unofficial r+. I really like the changes to put most of the py2/3 hacks into a separate module. I&apos;d prefer if we named the module something like py23_compatibility though.

&gt; Tools/Scripts/webkitpy/common/unicode.py:54
&gt; +    return value

Maybe it&apos;d be better to name this file more for its purpose around python2/3 compatibility?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574216</commentid>
    <comment_count>16</comment_count>
      <attachid>379482</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2019-09-25 14:25:46 -0700</bug_when>
    <thetext>Comment on attachment 379482
Patch

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

The encode/decode functions make all of this way more readable.  Echo Dean&apos;s comments about being more specific about purpose of the functions in naming but I&apos;m happy with the patch.

&gt; Tools/Scripts/webkitpy/common/unicode.py:37
&gt; +def encode(value, encoding=&apos;utf-8&apos;, errors=&apos;strict&apos;):

nit: I did like the name encode_if_necessary_for_python2 because it explains exactly what this function is doing.

&gt; Tools/Scripts/webkitpy/common/unicode.py:53
&gt; +        return decode(bytes(value))

maybe unicode_compatibility?

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:90
&gt;&gt; +                if attribute.startswith(&apos;__&apos;):
&gt; 
&gt; To Stephanie&apos;s point here, if we are relying on __ functions from the popen we aren&apos;t picking up here, we&apos;d end up with an exception like this:
&gt; 
&gt; AttributeError: __&lt;function&gt;__
&gt; 
&gt; I think it&apos;s quite unlikely that we&apos;re relying on such functions, though.

As long as the errors are really obvious Ill be ok with this.  I still think it might be better to add our own notimplemented message to make it clearer for someone who doesn&apos;t know about this hack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574313</commentid>
    <comment_count>17</comment_count>
      <attachid>379602</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-09-25 18:16:28 -0700</bug_when>
    <thetext>Created attachment 379602
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574315</commentid>
    <comment_count>18</comment_count>
      <attachid>379602</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-25 19:02:00 -0700</bug_when>
    <thetext>Comment on attachment 379602
Patch for landing

Clearing flags on attachment: 379602

Committed r250375: &lt;https://trac.webkit.org/changeset/250375&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574316</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-25 19:02:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379085</attachid>
            <date>2019-09-18 16:56:44 -0700</date>
            <delta_ts>2019-09-23 11:42:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201826-20190918165642.patch</filename>
            <type>text/plain</type>
            <size>69463</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDA2NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyNiBAQAorMjAxOS0wOS0xOCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MTgyNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTU0NTI2NzE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGNvbXBhdGliaWxpdHkgYnkg
cnVubmluZyAncHl0aG9uMyAtbSB1bml0dGVzdCB3ZWJraXRweS5jb21tb24uc3lzdGVtLjxfdW5p
dHRlc3Q+JyBvbgorICAgICAgICBlYWNoIG9mIHRoZSBlZmZlY3RlZCBmaWxlcy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weTogSW1wb3J0
IFN0cmluZ0lPIGZyb20gaW8gbW9kdWxlLgorICAgICAgICAoc2V0X3Jldmlld2VyKToKKyAgICAg
ICAgKHNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3VybCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQucHk6ICBJbXBvcnQgU3RyaW5nSU8g
ZnJvbSBpbyBtb2R1bGUuCisgICAgICAgIChDaGVja291dC5fbGF0ZXN0X2VudHJ5X2Zvcl9jaGFu
Z2Vsb2dfYXRfcmV2aXNpb24pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzLnB5OgorICAgICAgICAoQ29tbWl0dGVyTGlzdC5sb2FkX2pzb24pOiBp
dGVyaXRlbXMgLT4gaXRlbXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0
L25ldHdvcmt0cmFuc2FjdGlvbi5weToKKyAgICAgICAgKE5ldHdvcmtUcmFuc2FjdGlvbi5ydW4p
OiB1cmxsaWIyIGlzIHVybGxpYiBpbiBQeXRob24zLiAKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHk6CisgICAgICAgIChBYnN0cmFj
dEV4ZWN1dGl2ZS5fc3RyaW5naWZ5X2FyZ3MpOgorICAgICAgICAoQWJzdHJhY3RFeGVjdXRpdmUu
Y29tbWFuZF9mb3JfcHJpbnRpbmcpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24z
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5p
dHRlc3QucHk6IEV4cGxpY2l0bHkgZW5jb2RlIGFuZCBkZWNvZGUgYmluYXJ5IGNyYXNobG9ncy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRfdW5p
dHRlc3QucHk6IFVzZSBhYnNvbHV0ZSBpbXBvcnRzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHk6CisgICAgICAgIChTY3JpcHRFcnJvci5tZXNz
YWdlX3dpdGhfb3V0cHV0KTogVGhlIHN0ciB0eXBlIGlzIHVuaWNvZGUgaW4gUHl0aG9uMy4KKyAg
ICAgICAgKEV4ZWN1dGl2ZS5XcmFwcGVkUG9wZW4pOiBQeXRob24zJ3MgUG9wZW4gb2JqZWN0IGlz
IGEgY29udGV4dCBtYW5hZ2VyLiBUbyBhbGxvdyB1cyB0byB1c2UgaXQgYXMgb25lLAorICAgICAg
ICBvdXIgUHl0aG9uMiBQb3BlbiBuZWVkcyB0byBiZSBvbmUgYXMgd2VsbC4KKyAgICAgICAgKEV4
ZWN1dGl2ZS5XcmFwcGVkUG9wZW4uX19pbml0X18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBw
ZWRQb3Blbi5fX2VudGVyX18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBwZWRQb3Blbi5fX2V4
aXRfXyk6CisgICAgICAgIChFeGVjdXRpdmUuX3J1bl9jb21tYW5kX3dpdGhfdGVlZF9vdXRwdXQp
OiBTaW1wbGlmeSBsb29wLCBkZWNvZGUgdW5pY29kZSBzdHJpbmdzLgorICAgICAgICAoRXhlY3V0
aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbCk6IFRoZSBjaGlsZCBvdXRwdXQgZmlsZSBzaG91bGQg
bm90IGJlIHVuaWNvZGUgc3RyaW5ncy4KKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5uaW5nX3BpZHMp
OiBVc2UgdGhlIFBvcGVuIGNvbnRleHQgbWFuYWdlciB0byBndWFyYW50ZWUgY2xlYW4tdXAuCisg
ICAgICAgIChFeGVjdXRpdmUuX2NvbXB1dGVfc3RkaW4pOgorICAgICAgICAoRXhlY3V0aXZlLnJ1
bl9jb21tYW5kKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1hbmFnZXIgdG8gZ3VhcmFudGVlIGNs
ZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlLl9zdHJpbmdpZnlfYXJncyk6IFRoZSBzdHIgdHlw
ZSBpcyB1bmljb2RlIGluIFB5dGhvbjMuCisgICAgICAgIChFeGVjdXRpdmUucG9wZW4pOiBSZXR1
cm4gYSBjb250ZXh0IG1hbmFnZXIgaWYgdGhlIFBvcGVuIG9iamVjdCBpcyBub3Qgb25lLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToK
KyAgICAgICAgKE1vY2tQcm9jZXNzLl9faW5pdF9fKTogU3RyaW5nSU8gLT4gQnl0ZXNJTy4KKyAg
ICAgICAgKE1vY2tQcm9jZXNzLl9fZW50ZXJfXyk6CisgICAgICAgIChNb2NrUHJvY2Vzcyk6Cisg
ICAgICAgIChNb2NrUHJvY2Vzcy5fX2V4aXRfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weToKKyAgICAgICAgKEV4ZWN1dGl2
ZVRlc3QudGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdzKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1h
bmFnZXIgdG8gZ3VhcmFudGVlIGNsZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlVGVzdC50ZXN0
X3BvcGVuX2FyZ3MpOiBEaXR0by4KKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3Quc2VyaWFsX3Rlc3Rf
a2lsbF9wcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChFeGVjdXRpdmVUZXN0LnNlcmlhbF90ZXN0
X2tpbGxfYWxsKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW0ucHk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUp
OiBVc2UgJ29wZW4nIGluc3RlYWQgb2YgJ2ZpbGUnLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0
ZV9iaW5hcnlfZmlsZSk6IERpdHRvLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0ZV90ZXh0X2Zp
bGUpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24zLiAKKyAgICAgICAgKEZpbGVT
eXN0ZW0ucmVscGF0aCk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlbW92ZSk6IFRoZSBXaW5kb3dz
RXJyb3IgaXMganVzdCBhbnRoZXIgT1NFcnJvciBpbiBQeXRob24zLgorICAgICAgICAoRmlsZVN5
c3RlbS5fV2luZG93c0Vycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAoTW9ja0ZpbGVTeXN0
ZW0uZ2xvYik6IGZpbHRlciByZXR1cm5zIGEgZ2VuZXJhdG9yIGluc3RlYWQgb2YgYSBsaXN0Lgor
ICAgICAgICAoV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0Ll9faW5pdF9fKTogQmluYXJ5IGZpbGVz
IGFyZSBjb21wcmlzZWQgb2YgYnl0ZXMsIG5vdCBzdHJpbmcgaW4gUHl0aG9uMy4KKyAgICAgICAg
KFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC53cml0ZSk6IERpdHRvLgorICAgICAgICAoUmVhZGFi
bGVUZXh0RmlsZU9iamVjdC5fX2luaXRfXyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2tfdW5pdHRlc3QucHk6CisgICAgICAg
IChNb2NrRmlsZVN5c3RlbVRlc3QudGVzdF9ub3JtcGF0aCk6CisgICAgICAgIChNb2NrRmlsZVN5
c3RlbVRlc3QudGVzdF9kaXJzX3VuZGVyKTogYXNzZXJ0RXF1YWxzIC0+IGFzc2VydEVxdWFsLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUmVhbEZpbGVTeXN0ZW1UZXN0LnRlc3RfcmVhZF9hbmRfd3JpdGVf
ZmlsZSk6IEV4cGxpY2l0bHkgZGVmaW5lIGJ5dGUgYXJyYXlzIGluc3RlYWQgb2Ygc3RyaW5ncy4K
KyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50ZXN0X3JlbW92ZV9maWxlX3dpdGhfcmV0cnku
cmVtb3ZlX3dpdGhfZXhjZXB0aW9uKTogVGhlIFdpbmRvd3NFcnJvciBpcyBqdXN0CisgICAgICAg
IGFudGhlciBPU0Vycm9yIGluIFB5dGhvbjMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL291dHB1dHRlZV91bml0dGVzdC5weToKKyAgICAgICAgKFNpbXBsZVRl
ZVRlc3QudGVzdF9zaW1wbGVfdGVlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGF0aC5weToKKyAgICAgICAgKF9lc2NhcGUpOiB1cmxsaWIgbGlicmFyeSBoYXMg
YmVlbiBicm9rZW4gaW50byBwYXJ0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGVtZmlsZS5weToKKyAgICAgICAgKF9wYXJzZV9wZW1fZm9ybWF0LmZpbmRfZW5k
KTogUHl0aG9uMyBkb2VzIG5vdCBkZWZpbmUgYSBtYXhpbnQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBs
YXRmb3JtSW5mby50b3RhbF9ieXRlc19tZW1vcnkpOiBOb3QgJ2xvbmcnIHR5cGUgaW4gUHl0aG9u
My4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X3JlYWxfY29kZSk6
IGFzc2VydE5vdEVxdWFscyAtPiBhc3NlcnROb3RFcXVhbC4KKyAgICAgICAgKFRlc3RQbGF0Zm9y
bUluZm8udGVzdF9kaXNwbGF5X25hbWUpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6CisgICAgICAgIChQcm9maWxlckZhY3Rvcnku
Y3JlYXRlX3Byb2ZpbGVyKTogTWFudWFsbHkgaW1wbGVtZW50IGlmaWx0ZXIuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5OiBVc2Ug
YWJzb2x1dGUgaW1wb3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vc3RhY2tfdXRpbHNfdW5pdHRlc3QucHk6CisgICAgICAgIChjdXJyZW50X3RocmVhZF9pZCk6
IGl0ZW1zKCkgcmV0dXJucyBhIGdlbmVyYXRvciBpbiBQeXRob24zLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5OiBVc2UgYWJzb2x1dGUgaW1w
b3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hl
ci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
dXJsZmV0Y2hlcl9tb2NrLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAoVXNlci5wcm9tcHQpOiBVc2UgYWJzb2x1
dGUgaW1wb3J0cywgcmF3X2lucHV0IC0+IGlucHV0LgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0
aF9tdWx0aXBsZV9saXN0cyk6CisgICAgICAgIChVc2VyLnByb21wdF93aXRoX2xpc3QpOgorICAg
ICAgICAoVXNlci5jb25maXJtKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlcl9tb2NrLnB5OgorICAgICAgICAoTW9ja1VzZXIucHJvbXB0KTogcmF3X2lucHV0
IC0+IGlucHV0LgorICAgICAgICAoTW9ja1VzZXIucHJvbXB0X3dpdGhfbGlzdCk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHk6CisgICAgICAgIChW
ZXJzaW9uLmZyb21faXRlcmFibGUpOiB4cmFuZ2UgLT4gcmFuZ2UuCisgICAgICAgIChWZXJzaW9u
LmZyb21fbmFtZSk6IFVzZSBhYnNvbHV0ZSBpbXBvcnQgcGF0aC4KKyAgICAgICAgKFZlcnNpb24u
X19jb250YWluc19fKTogeHJhbmdlIC0+IHJhbmdlLgorICAgICAgICAoVmVyc2lvbi5fX3N0cl9f
KTogeHJhbmdlIC0+IHJhbmdlLgorICAgICAgICAoVmVyc2lvbi5fX2NtcF9fKTogYW1wIGlzIG5v
IGxvbmdlciBhbiBvcGVyYXRvciBpbiBQeXRob24zLCBidXQgdmVyc2lvbnMgYXJlIGNvbXByaXNl
ZAorICAgICAgICBPZiBpbnRlZ2Vycywgc28gc3VidHJhY3Rpb24gaGFzIHRoZSBzYW1lIGVmZmVj
dC4KKyAgICAgICAgKFZlcnNpb24pOgorICAgICAgICAoVmVyc2lvbi5fX2VxX18pOiBfX2NtcF9f
IG9wZXJhdG9yIGlzIG5vIGxvbmdlciByZXNwZWN0ZWQsIHNvIHdlIG5lZWQgdG8gaW1wbGVtZW50
CisgICAgICAgIGVhY2ggY29tcGFyaXNvbi4KKyAgICAgICAgKFZlcnNpb24uX19uZV9fKTogRGl0
dG8uCisgICAgICAgIChWZXJzaW9uLl9fbHRfXyk6IERpdHRvLgorICAgICAgICAoVmVyc2lvbi5f
X2xlX18pOiBEaXR0by4KKyAgICAgICAgKFZlcnNpb24uX19ndF9fKTogRGl0dG8uCisgICAgICAg
IChWZXJzaW9uLl9fZ2VfXyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3ZlcnNpb25fbmFtZV9tYXAucHk6CisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21h
cF90b19tYWpvcl92ZXJzaW9uKToKKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiB4
cmFuZ2UgLT4gcmFuZ2UuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5mcm9tX25hbWUpOiBpdGVy
aXRlbXMgLT4gaXRlbXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bl9uYW1lX21hcF91bml0dGVzdC5weTogVXNlIGFic29sdXRlIGltcG9ydHMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weTogRGl0dG8uCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHk6CisgICAgICAgIChXYXZl
RGlmZi5fX2luaXRfXyk6IFN0cmluZ0lPIC0+IEJ5dGVzSU8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L19faW5pdF9fLnB5OgorICAgICAgICAob3V0c2lkZSk6CisKIDIwMTktMDkt
MTggIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRl
IGZsYWtpbmVzcyBkYXNoYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgaU9TIDEzIHF1ZXVlcwpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShyZXZpc2lvbiAyNDk5
NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVmVyc2lvbihvYmplY3QpOgogICAgIEBz
dGF0aWNtZXRob2QKICAgICBkZWYgZnJvbV9pdGVyYWJsZSh2YWwpOgogICAgICAgICByZXN1bHQg
PSBWZXJzaW9uKCkKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih2YWwpKToKKyAgICAgICAg
Zm9yIGkgaW4gcmFuZ2UobGVuKHZhbCkpOgogICAgICAgICAgICAgcmVzdWx0W2ldID0gaW50KHZh
bFtpXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRl
ZiBmcm9tX25hbWUobmFtZSk6Ci0gICAgICAgIGZyb20gdmVyc2lvbl9uYW1lX21hcCBpbXBvcnQg
VmVyc2lvbk5hbWVNYXAKKyAgICAgICAgZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1l
X21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKICAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFw
Lm1hcCgpLmZyb21fbmFtZShuYW1lKVsxXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ham9y
PTAsIG1pbm9yPTAsIHRpbnk9MCwgbWljcm89MCwgbmFubz0wKToKQEAgLTk5LDcgKzk5LDcgQEAg
Y2xhc3MgVmVyc2lvbihvYmplY3QpOgogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmVyc2lv
bik6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnNpb24sIFZlcnNpb24pCiAgICAgICAg
IGRvZXNfbWF0Y2ggPSBUcnVlCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odmVyc2lvbikp
OgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odmVyc2lvbikpOgogICAgICAgICAgICAgaWYg
c2VsZltpXSAhPSB2ZXJzaW9uW2ldOgogICAgICAgICAgICAgICAgIGRvZXNfbWF0Y2ggPSBGYWxz
ZQogICAgICAgICAgICAgaWYgbm90IGRvZXNfbWF0Y2ggYW5kIHNlbGZbaV0gIT0gMDoKQEAgLTEw
OCwxOCArMTA4LDM3IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKIAogICAgIGRlZiBfX3N0cl9f
KHNlbGYpOgogICAgICAgICBsZW5fdG9fcHJpbnQgPSAxCi0gICAgICAgIGZvciBpIGluIHhyYW5n
ZShsZW4oc2VsZikpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZikpOgogICAgICAg
ICAgICAgaWYgc2VsZltpXToKICAgICAgICAgICAgICAgICBsZW5fdG9fcHJpbnQgPSBpICsgMQog
ICAgICAgICByZXN1bHQgPSBzdHIoc2VsZi5tYWpvcikKLSAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxlbl90b19wcmludCAtIDEpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW5fdG9fcHJpbnQg
LSAxKToKICAgICAgICAgICAgIHJlc3VsdCArPSAnLnt9Jy5mb3JtYXQoc2VsZltpICsgMV0pCiAg
ICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKICAg
ICAgICAgaWYgb3RoZXIgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGZv
ciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgotICAgICAgICAgICAgaWYgY21wKHNlbGZbaV0sIG90
aGVyW2ldKToKLSAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGZbaV0sIG90aGVyW2ldKQor
ICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZikpOgorICAgICAgICAgICAgZGlmZiA9IHNl
bGZbaV0gLSBvdGhlcltpXQorICAgICAgICAgICAgaWYgZGlmZjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGlmZgogICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhl
cik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpID09IDAKKworICAgIGRlZiBf
X25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSAh
PSAwCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X19jbXBfXyhvdGhlcikgPCAwCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPD0gMAorCisgICAgZGVmIF9fZ3RfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpID4gMAorCisgICAg
ZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3Ro
ZXIpID49IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFt
ZV9tYXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcC5weQkocmV2aXNpb24gMjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQkod29ya2luZyBjb3B5KQpAQCAtODYsMTMg
Kzg2LDEzIEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CiAgICAgZGVmIF9hdXRvbWFw
X3RvX21ham9yX3ZlcnNpb24oY2xzLCBwcmVmaXgsIG1pbmltdW09VmVyc2lvbigxKSwgbWF4aW11
bT1WZXJzaW9uKDEpKToKICAgICAgICAgcmVzdWx0ID0ge30KICAgICAgICAgYXNzZXJ0IG1pbmlt
dW0gPD0gbWF4aW11bQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoKG1heGltdW0ubWFqb3IgKyAx
KSAtIG1pbmltdW0ubWFqb3IpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgobWF4aW11bS5tYWpv
ciArIDEpIC0gbWluaW11bS5tYWpvcik6CiAgICAgICAgICAgICByZXN1bHRbJ3t9IHt9Jy5mb3Jt
YXQocHJlZml4LCBzdHIoVmVyc2lvbihtaW5pbXVtLm1ham9yICsgaSkpKV0gPSBWZXJzaW9uKG1p
bmltdW0ubWFqb3IgKyBpKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgdG9fbmFt
ZShzZWxmLCB2ZXJzaW9uLCBwbGF0Zm9ybT1Ob25lLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgogICAg
ICAgICBjbG9zZXN0X21hdGNoID0gKE5vbmUsIE5vbmUpCi0gICAgICAgIGZvciBvc19uYW1lLCBv
c192ZXJzaW9uIGluIHNlbGYubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm0sIHRhYmxlKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG9zX25hbWUsIG9zX3ZlcnNpb24gaW4gc2VsZi5tYXBw
aW5nX2Zvcl9wbGF0Zm9ybShwbGF0Zm9ybSwgdGFibGUpLml0ZW1zKCk6CiAgICAgICAgICAgICBp
ZiB2ZXJzaW9uID09IG9zX3ZlcnNpb246CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9zX25hbWUK
ICAgICAgICAgICAgIGVsaWYgdmVyc2lvbiBpbiBvc192ZXJzaW9uOgpAQCAtMTIyLDE2ICsxMjIs
MTYgQEAgY2xhc3MgVmVyc2lvbk5hbWVNYXAob2JqZWN0KToKIAogICAgIGRlZiBmcm9tX25hbWUo
c2VsZiwgbmFtZSk6CiAgICAgICAgICMgRXhhY3QgbWF0Y2gKLSAgICAgICAgZm9yIF8sIG1hcCBp
biBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3Igb3NfbmFtZSwgb3Nf
bWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIF8sIG1hcCBpbiBzZWxmLm1hcHBp
bmcuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZW1z
KCk6CiAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBvc19tYXA6CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAob3NfbmFtZSwgb3NfbWFwW25hbWVdKQogCiAgICAgICAgICMgSXQncyBub3Qg
YW4gZXhhY3QgbWF0Y2gsIGxldCdzIHRyeSB1bmlmeWluZyBmb3JtYXR0aW5nCiAgICAgICAgIHVu
Zm9ybWF0dGVkID0gc2VsZi5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcobmFtZSkKLSAgICAgICAgZm9y
IF8sIG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3Igb3Nf
bmFtZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgICAgICBmb3IgdmVy
c2lvbl9uYW1lLCB2ZXJzaW9uIGluIG9zX21hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIF8s
IG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBv
c19tYXAgaW4gbWFwLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIHZlcnNpb25fbmFtZSwg
dmVyc2lvbiBpbiBvc19tYXAuaXRlbXMoKToKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5z
dHJpcF9uYW1lX2Zvcm1hdHRpbmcodmVyc2lvbl9uYW1lKSA9PSB1bmZvcm1hdHRlZDoKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAob3NfbmFtZSwgdmVyc2lvbikKICAgICAgICAgcmV0
dXJuIChOb25lLCBOb25lKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDk5
NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBAIGltcG9ydCB1bml0dGVz
dAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVt
SG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgotZnJvbSB2
ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAorZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIAogCiBjbGFzcyBWZXJz
aW9uTWFwVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDk5
NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1m
cm9tIHZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KIAogCiBjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENh
c2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHkJKHJl
dmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdmVkaWZm
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMiArMjAsMTMgQEAKICMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5
cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgd2F2ZQogCitmcm9tIGlvIGltcG9ydCBCeXRlc0lP
CisKIAogY2xhc3MgV2F2ZURpZmYob2JqZWN0KToKICAgICBfcGFyYW1OYW1lcyA9ICgnTnVtYmVy
IG9mIGNoYW5uZWxzJywgJ1NhbXBsZSB3aWR0aCcsICdTYW1wbGUgcmF0ZScsICdOdW1iZXIgb2Yg
ZnJhbWVzJywgJ0NvbXByZXNzaW9uIHR5cGUnLCAnQ29tcHJlc3Npb24gbmFtZScpCkBAIC0zNywx
MSArMzgsMTEgQEAgY2xhc3MgV2F2ZURpZmYob2JqZWN0KToKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShpbjEsIGZpbGUpOgogICAgICAgICAgICAgd2F2ZUZpbGUxID0gd2F2ZS5vcGVuKGluMSwgJ3Ji
JykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHdhdmVGaWxlMSA9IHdhdmUub3BlbihTdHJp
bmdJTy5TdHJpbmdJTyhpbjEpLCAncmInKQorICAgICAgICAgICAgd2F2ZUZpbGUxID0gd2F2ZS5v
cGVuKEJ5dGVzSU8oaW4xKSwgJ3JiJykKICAgICAgICAgaWYgaXNpbnN0YW5jZShpbjIsIGZpbGUp
OgogICAgICAgICAgICAgd2F2ZUZpbGUxID0gd2F2ZS5vcGVuKGluMiwgJ3JiJykKICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHdhdmVGaWxlMiA9IHdhdmUub3BlbihTdHJpbmdJTy5TdHJpbmdJ
TyhpbjIpLCAncmInKQorICAgICAgICAgICAgd2F2ZUZpbGUyID0gd2F2ZS5vcGVuKEJ5dGVzSU8o
aW4yKSwgJ3JiJykKIAogICAgICAgICBwYXJhbXMxID0gd2F2ZUZpbGUxLmdldHBhcmFtcygpCiAg
ICAgICAgIHBhcmFtczIgPSB3YXZlRmlsZTIuZ2V0cGFyYW1zKCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHkJKHJldmlz
aW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2No
YW5nZWxvZy5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTAgQEAKIAogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCByZQotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCB0
ZXh0d3JhcAogCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5jb25maWcuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIGltcG9ydCB3ZWJraXRw
eS5jb21tb24uY29uZmlnLnVybHMgYXMgY29uZmlnX3VybHMKQEAgLTQzNiw3ICs0MzcsNyBAQCBj
bGFzcyBDaGFuZ2VMb2cob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LndyaXRl
KGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGlmIGZvdW5kX2J1Z191cmw6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBidWdfdXJsX251bWJlcl9vZl9pdGVtcyA9PSAxOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC53cml0ZSgiXG4gICAgICAgIFJldmlld2VkIGJ5ICVz
LlxuIiAlIHJldmlld2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC53cml0
ZSh1bmljb2RlKCJcbiAgICAgICAgUmV2aWV3ZWQgYnkgJXMuXG4iICUgcmV2aWV3ZXIpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnVnX3VybF9udW1iZXJfb2ZfaXRlbXMgLT0gMQogICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5wYXRoLCByZXN1bHQu
Z2V0dmFsdWUoKSkKICAgICAgICAgZWxzZToKQEAgLTQ1NSw3ICs0NTYsNyBAQCBjbGFzcyBDaGFu
Z2VMb2cob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX2NoYW5nZWxv
Z19pbmRlbnQgKyBzaG9ydF9kZXNjcmlwdGlvbiArICJcbiIKICAgICAgICAgICAgICAgICBpZiBz
dHJpcHBlZCA9PSBidWdfdXJsX3BsYWNlaG9sZGVyOgogICAgICAgICAgICAgICAgICAgICBsaW5l
ID0gc2VsZi5fY2hhbmdlbG9nX2luZGVudCArIGJ1Z191cmwgKyAiXG4iCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgcmVzdWx0LndyaXRlKHVuaWNv
ZGUobGluZSkpCiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYu
cGF0aCwgcmVzdWx0LmdldHZhbHVlKCkpCiAKICAgICBkZWYgZGVsZXRlX2VudHJpZXMoc2VsZiwg
bnVtX2VudHJpZXMpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvY2hlY2tvdXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvY2hlY2tvdXQucHkJKHJldmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoZWNrb3V0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQg
U3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LmNvbmZpZyBpbXBvcnQgdXJscwogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdl
bG9nIGltcG9ydCBDaGFuZ2VMb2csIHBhcnNlX2J1Z19pZF9mcm9tX2NoYW5nZWxvZwpAQCAtNjEs
NyArNjEsNyBAQCBjbGFzcyBDaGVja291dChvYmplY3QpOgogICAgICAgICAjIHRoYXQgQ2hhbmdl
TG9nIGZpbGVzIGFyZSB1dGYtOC4gIHBhcnNlX2xhdGVzdF9lbnRyeV9mcm9tX2ZpbGUKICAgICAg
ICAgIyBleHBlY3RzIGEgZmlsZS1saWtlIG9iamVjdCB3aGljaCB2ZW5kcyB1bmljb2RlKCksIHNv
IHdlIGRlY29kZSBoZXJlLgogICAgICAgICAjIE9sZCByZXZpc2lvbnMgb2YgU291cmNlcy9XZWJL
aXQvd3gvQ2hhbmdlTG9nIGhhdmUgc29tZSBpbnZhbGlkIHV0ZjggY2hhcmFjdGVycy4KLSAgICAg
ICAgY2hhbmdlbG9nX2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhjaGFuZ2Vsb2dfY29udGVudHMu
ZGVjb2RlKCJ1dGYtOCIsICJpZ25vcmUiKSkKKyAgICAgICAgY2hhbmdlbG9nX2ZpbGUgPSBTdHJp
bmdJTyhjaGFuZ2Vsb2dfY29udGVudHMuZGVjb2RlKCJ1dGYtOCIsICJpZ25vcmUiKSkKICAgICAg
ICAgcmV0dXJuIENoYW5nZUxvZy5wYXJzZV9sYXRlc3RfZW50cnlfZnJvbV9maWxlKGNoYW5nZWxv
Z19maWxlKQogCiAgICAgZGVmIGNoYW5nZWxvZ19lbnRyaWVzX2Zvcl9yZXZpc2lvbihzZWxmLCBy
ZXZpc2lvbiwgY2hhbmdlZF9maWxlcz1Ob25lKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5CShyZXZpc2lvbiAyNDk5NTQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQko
d29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIGNsYXNzIENvbW1pdHRlckxpc3Qob2Jq
ZWN0KToKICAgICAgICAgc2VsZi5fY29tbWl0dGVycyA9IFtdCiAgICAgICAgIHNlbGYuX3Jldmll
d2VycyA9IFtdCiAKLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gY29udHJpYnV0b3JzLml0ZXJp
dGVtcygpOgorICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBjb250cmlidXRvcnMuaXRlbXMoKToK
ICAgICAgICAgICAgIGNvbnRyaWJ1dG9yID0gTm9uZQogICAgICAgICAgICAgc3RhdHVzID0gZGF0
YS5nZXQoJ3N0YXR1cycpCiAgICAgICAgICAgICBpZiBzdGF0dXMgPT0gInJldmlld2VyIjoKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdv
cmt0cmFuc2FjdGlvbi5weQkocmV2aXNpb24gMjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2FjdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsMTMgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBz
eXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliMgorCitpZiBzeXMudmVyc2lvbl9pbmZvID4g
KDMsIDApOgorICAgIGZyb20gdXJsbGliLmVycm9yIGltcG9ydCBIVFRQRXJyb3IsIFVSTEVycm9y
CitlbHNlOgorICAgIGZyb20gdXJsbGliMiBpbXBvcnQgSFRUUEVycm9yLCBVUkxFcnJvcgogCiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTUxLDEzICs1NiwxMyBAQCBj
bGFzcyBOZXR3b3JrVHJhbnNhY3Rpb24ob2JqZWN0KToKICAgICAgICAgd2hpbGUgVHJ1ZToKICAg
ICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdCgpCi0gICAgICAg
ICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBI
VFRQRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jb252ZXJ0XzQwNF90b19O
b25lIGFuZCBlLmNvZGUgPT0gNDA0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQog
ICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl90aW1lb3V0KCkKICAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oIlJlY2VpdmVkIEhUVFAgc3RhdHVzICVzIGxvYWRpbmcgXCIlc1wiLiAgUmV0
cnlpbmcgaW4gJXMgc2Vjb25kcy4uLiIgJSAoZS5jb2RlLCBlLmZpbGVuYW1lLCBzZWxmLl9iYWNr
b2ZmX3NlY29uZHMpKQogICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKCkKLSAgICAgICAgICAg
IGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgVVJMRXJy
b3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19mb3JfdGltZW91dCgpCiAgICAg
ICAgICAgICAgICAgX2xvZy53YXJuKCdSZWNlaXZlZCBVUkxFcnJvcjogInt9IiB3aGlsZSBsb2Fk
aW5nIHt9LiBSZXRyeWluZyBpbiB7fSBzZWNvbmRzLi4uJy5mb3JtYXQoZS5yZWFzb24sIHVybCwg
c2VsZi5fYmFja29mZl9zZWNvbmRzKSkKICAgICAgICAgICAgICAgICBzZWxmLl9zbGVlcCgpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRp
dmUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2Fic3RyYWN0ZXhlY3V0aXZlLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw2ICsxMDEsOCBAQCBjbGFzcyBBYnN0cmFjdEV4ZWN1dGl2ZShvYmplY3QpOgog
ICAgICAgICBwYXNzCiAKICAgICBkZWYgX3N0cmluZ2lmeV9hcmdzKHNlbGYsIGFyZ3MpOgorICAg
ICAgICBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgorICAgICAgICAgICAgcmV0dXJuIG1h
cChzdHIsIGFyZ3MpCiAgICAgICAgIHJldHVybiBtYXAodW5pY29kZSwgYXJncykKIAogICAgIGRl
ZiBjb21tYW5kX2Zvcl9wcmludGluZyhzZWxmLCBhcmdzKToKQEAgLTEwOSw5ICsxMTEsMTEgQEAg
Y2xhc3MgQWJzdHJhY3RFeGVjdXRpdmUob2JqZWN0KToKICAgICAgICAgYXJncyA9IHNlbGYuX3N0
cmluZ2lmeV9hcmdzKGFyZ3MpCiAgICAgICAgIGVzY2FwZWRfYXJncyA9IFtdCiAgICAgICAgIGZv
ciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCB1bmljb2RlKToK
KworICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKSBhbmQgaXNpbnN0YW5j
ZShhcmcsIHVuaWNvZGUpOgogICAgICAgICAgICAgICAgICMgRXNjYXBlIGFueSBub24tYXNjaWkg
Y2hhcmFjdGVycyBmb3IgZWFzeSBjb3B5L3Bhc3RlCiAgICAgICAgICAgICAgICAgYXJnID0gYXJn
LmVuY29kZSgidW5pY29kZV9lc2NhcGUiKQorCiAgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBu
ZWVkIHRvIGZpeCBxdW90ZXMgaGVyZT8KICAgICAgICAgICAgIGVzY2FwZWRfYXJncy5hcHBlbmQo
YXJnKQogICAgICAgICByZXR1cm4gIiAiLmpvaW4oZXNjYXBlZF9hcmdzKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dz
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0KIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxl
U3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lz
dGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBv
cnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBN
b2NrCiAKICMgTmVlZGVkIHRvIHN1cHBvcnQgV2luZG93cyBwb3J0IHRlc3RzCiBmcm9tIHdlYmtp
dHB5LnBvcnQud2luIGltcG9ydCBXaW5Qb3J0CkBAIC0yOTgsNiArMjk3LDExIEBAIGNsYXNzIENy
YXNoTG9nc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmZpbGVzWycvVXNl
cnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAx
MS0wNi0xMy0xNTA3MjFfcXVhZHplbi5jcmFzaCddID0gTm9uZQogICAgICAgICBzZWxmLmZpbGVz
WycvVXNlcnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRy
ZWVfMjAxMS0wNi0xMy0xNTA3MjJfcXVhZHplbi5jcmFzaCddID0gc2VsZi5vdGhlcl9wcm9jZXNz
X21vY2tfY3Jhc2hfcmVwb3J0CiAgICAgICAgIHNlbGYuZmlsZXNbJy9Vc2Vycy9tb2NrL0xpYnJh
cnkvTG9ncy9EaWFnbm9zdGljUmVwb3J0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcy
M19xdWFkemVuLmNyYXNoJ10gPSBzZWxmLm1pc2Zvcm1hdHRlZF9tb2NrX2NyYXNoX3JlcG9ydAor
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuZmlsZXMuaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZXNba2V5XSA9IHZhbHVlLmVu
Y29kZSgndXRmLTgnKQorCiAgICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVt
KHNlbGYuZmlsZXMpCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3MoTW9ja1N5c3RlbUhv
c3QoZmlsZXN5c3RlbT1zZWxmLmZpbGVzeXN0ZW0pLCBDcmFzaExvZ3NUZXN0LkRBUldJTl9NT0NL
X0NSQVNIX0RJUkVDVE9SWSkKICAgICAgICAgbG9ncyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191
bmRlcignL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzLycpCkBAIC0z
MTMsOCArMzE3LDggQEAgY2xhc3MgQ3Jhc2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGFsbF9sb2dzID0gY3Jhc2hfbG9ncy5maW5kX2FsbF9sb2dzKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChsZW4oYWxsX2xvZ3MpLCA4KQogCi0gICAgICAgIGZvciB0ZXN0LCBjcmFz
aF9sb2cgaW4gYWxsX2xvZ3MuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUoY3Jhc2hfbG9nIGluIHNlbGYuZmlsZXMudmFsdWVzKCkpCisgICAgICAgIGZvciB0ZXN0LCBj
cmFzaF9sb2cgaW4gYWxsX2xvZ3MuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShjcmFzaF9sb2cgaW4gW3ZhbHVlLmRlY29kZSgndXRmLTgnKSBpZiB2YWx1ZSBlbHNlIE5vbmUg
Zm9yIHZhbHVlIGluIHNlbGYuZmlsZXMudmFsdWVzKCldKQogICAgICAgICAgICAgaWYgdGVzdC5z
cGxpdCgnLScpWzBdICE9ICdTYW5kYm94JzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUodGVzdCA9PSAiVW5rbm93biIgb3IgaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkgaW4gcmFuZ2Uo
Mjg1MjcsIDI4NTMxKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2Vudmlyb25tZW50X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9lbnZpcm9ubWVudF91bml0dGVzdC5weQkocmV2aXNpb24g
MjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Vudmlyb25t
ZW50X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIGltcG9y
dCB1bml0dGVzdAogCi1mcm9tIC5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKIAog
CiBjbGFzcyBFbnZpcm9ubWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZp
c2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhl
Y3V0aXZlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBlcnJubwogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKQEAgLTM3LDYgKzM2LDggQEAgaW1wb3J0
IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKK2Zyb20gaW8gaW1wb3J0IEJ5
dGVzSU8sIFN0cmluZ0lPCisKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5hYnN0cmFjdGV4
ZWN1dGl2ZSBpbXBvcnQgQWJzdHJhY3RFeGVjdXRpdmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5vdXRwdXR0ZWUgaW1wb3J0IFRlZQogCkBAIC03MSw2ICs3Miw5IEBAIGNsYXNzIFNjcmlw
dEVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHUiJXNcblxuTGFzdCAl
cyBjaGFyYWN0ZXJzIG9mIG91dHB1dDpcbiVzIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKHNl
bGYsIG91dHB1dF9saW1pdCwgc2VsZi5vdXRwdXRbLW91dHB1dF9saW1pdDpdKQogICAgICAgICAg
ICAgcmV0dXJuIHUiJXNcblxuJXMiICUgKHNlbGYsIHNlbGYub3V0cHV0KQorCisgICAgICAgIGlm
IHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYp
CiAgICAgICAgIHJldHVybiB1bmljb2RlKHNlbGYpCiAKICAgICBkZWYgY29tbWFuZF9uYW1lKHNl
bGYpOgpAQCAtODQsNiArODgsMTkgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZl
KToKICAgICBQSVBFID0gc3VicHJvY2Vzcy5QSVBFCiAgICAgU1RET1VUID0gc3VicHJvY2Vzcy5T
VERPVVQKIAorICAgIGNsYXNzIFdyYXBwZWRQb3BlbihvYmplY3QpOgorICAgICAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9wZW4pOgorICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZSBpbiBkaXIocG9w
ZW4pOgorICAgICAgICAgICAgICAgIGlmIGF0dHJpYnV0ZS5zdGFydHN3aXRoKCdfXycpOgorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwg
YXR0cmlidXRlLCBnZXRhdHRyKHBvcGVuLCBhdHRyaWJ1dGUpKQorCisgICAgICAgIGRlZiBfX2Vu
dGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBfX2V4
aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBzZWxmLndhaXQoKQorCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLnBpZF90b19zeXN0ZW1fcGlkID0ge30KICAgICAg
ICAgc2VsZi5faXNfbmF0aXZlX3dpbiA9IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKQpA
QCAtMTA4LDE4ICsxMjUsMTMgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPXNlbGYuX3Nob3Vs
ZF9jbG9zZV9mZHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2Fy
Z3MpCiAKLSAgICAgICAgIyBVc2Ugb3VyIG93biBjdXN0b20gd2FpdCBsb29wIGJlY2F1c2UgUG9w
ZW4gaWdub3JlcyBhIHRlZSdkCi0gICAgICAgICMgc3RkZXJyL3N0ZG91dC4KLSAgICAgICAgIyBG
SVhNRTogVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBub3QgdG8gZmxhdHRlbiBvdXRwdXQgdG8gc3Rk
b3V0LgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgb3V0cHV0X2xpbmUgPSBjaGls
ZF9wcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBvdXRwdXRfbGluZSA9
PSAiIiBhbmQgY2hpbGRfcHJvY2Vzcy5wb2xsKCkgIT0gTm9uZToKLSAgICAgICAgICAgICAgICAj
IHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgot
ICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzcy5wb2xsKCkKLSAgICAgICAgICAgICMg
V2UgYXNzdW1lIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgdG8gdXMgaW4gdXRmLTgsCi0g
ICAgICAgICAgICAjIHNvIG5vIHJlLWVuY29kaW5nIGlzIG5lY2Vzc2FyeSBiZWZvcmUgd3JpdGlu
ZyBoZXJlLgotICAgICAgICAgICAgdGVlZF9vdXRwdXQud3JpdGUob3V0cHV0X2xpbmUpCisgICAg
ICAgIHdpdGggY2hpbGRfcHJvY2VzczoKKyAgICAgICAgICAgIHdoaWxlIGNoaWxkX3Byb2Nlc3Mu
cG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgb3V0cHV0X2xpbmUgPSBjaGlsZF9wcm9j
ZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5m
byA+ICgzLCAwKToKKyAgICAgICAgICAgICAgICAgICAgdGVlZF9vdXRwdXQud3JpdGUob3V0cHV0
X2xpbmUuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHRlZWRfb3V0cHV0LndyaXRlKG91dHB1dF9saW5lKQogCiAgICAgIyBGSVhNRTog
UmVtb3ZlIHRoaXMgZGVwcmVjYXRlZCBtZXRob2QgYW5kIG1vdmUgY2FsbGVycyB0byBydW5fY29t
bWFuZC4KICAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBhIGhhY2sgdG8gYWxsb3cgcnVubmlu
ZyBjb21tYW5kIHdoaWNoIGJvdGgKQEAgLTEyOCwyMSArMTQwLDI1IEBAIGNsYXNzIEV4ZWN1dGl2
ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgIyBidXQgc3RpbGwgaGF2ZSB0aGUgb3V0cHV0IHRv
IHN0dWZmIGludG8gYSBsb2cgZmlsZS4KICAgICBkZWYgcnVuX2FuZF90aHJvd19pZl9mYWlsKHNl
bGYsIGFyZ3MsIHF1aWV0PUZhbHNlLCBkZWNvZGVfb3V0cHV0PVRydWUsICoqa3dhcmdzKToKICAg
ICAgICAgIyBDYWNoZSB0aGUgY2hpbGQncyBvdXRwdXQgbG9jYWxseSBzbyBpdCBjYW4gYmUgdXNl
ZCBmb3IgZXJyb3IgcmVwb3J0cy4KLSAgICAgICAgY2hpbGRfb3V0X2ZpbGUgPSBTdHJpbmdJTy5T
dHJpbmdJTygpCisgICAgICAgIGNoaWxkX291dF9maWxlID0gU3RyaW5nSU8oKSBpZiBzeXMudmVy
c2lvbl9pbmZvID4gKDMsIDApIGVsc2UgQnl0ZXNJTygpCiAgICAgICAgIHRlZV9zdGRvdXQgPSBz
eXMuc3Rkb3V0Ci0gICAgICAgIGlmIHF1aWV0OgotICAgICAgICAgICAgZGV2X251bGwgPSBvcGVu
KG9zLmRldm51bGwsICJ3IikgICMgRklYTUU6IERvZXMgdGhpcyBuZWVkIGFuIGVuY29kaW5nPwot
ICAgICAgICAgICAgdGVlX3N0ZG91dCA9IGRldl9udWxsCi0gICAgICAgIGNoaWxkX3N0ZG91dCA9
IFRlZShjaGlsZF9vdXRfZmlsZSwgdGVlX3N0ZG91dCkKLSAgICAgICAgZXhpdF9jb2RlID0gc2Vs
Zi5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCBjaGlsZF9zdGRvdXQsICoqa3dh
cmdzKQotICAgICAgICBpZiBxdWlldDoKLSAgICAgICAgICAgIGRldl9udWxsLmNsb3NlKCkKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgZGV2X251
bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikgICMgRklYTUU6IERvZXMgdGhpcyBuZWVkIGFuIGVu
Y29kaW5nPworICAgICAgICAgICAgICAgIHRlZV9zdGRvdXQgPSBkZXZfbnVsbAorICAgICAgICAg
ICAgY2hpbGRfc3Rkb3V0ID0gVGVlKGNoaWxkX291dF9maWxlLCB0ZWVfc3Rkb3V0KQorICAgICAg
ICAgICAgZXhpdF9jb2RlID0gc2VsZi5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdz
LCBjaGlsZF9zdGRvdXQsICoqa3dhcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
aWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgZGV2X251bGwuY2xvc2UoKQogCiAgICAgICAgIGNo
aWxkX291dHB1dCA9IGNoaWxkX291dF9maWxlLmdldHZhbHVlKCkKICAgICAgICAgY2hpbGRfb3V0
X2ZpbGUuY2xvc2UoKQogCi0gICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6CisgICAgICAgIGlmIGRl
Y29kZV9vdXRwdXQgYW5kIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCk6CiAgICAgICAgICAgICBj
aGlsZF9vdXRwdXQgPSBjaGlsZF9vdXRwdXQuZGVjb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5j
b2RpbmcoKSkKKyAgICAgICAgaWYgbm90IGRlY29kZV9vdXRwdXQgYW5kIHN5cy52ZXJzaW9uX2lu
Zm8gPiAoMywgMCk6CisgICAgICAgICAgICBjaGlsZF9vdXRwdXQgPSBjaGlsZF9vdXRwdXQuZW5j
b2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKIAogICAgICAgICBpZiBleGl0X2Nv
ZGU6CiAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcihzY3JpcHRfYXJncz1hcmdzLApAQCAt
Mjg2LDE3ICszMDIsMTcgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToKICAg
ICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAg
ICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5wb3Bl
bihbJ3BzJywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9c2Vs
Zi5QSVBFKQotICAgICAgICAgICAgc3Rkb3V0LCBfID0gcHNfcHJvY2Vzcy5jb21tdW5pY2F0ZSgp
Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgotICAgICAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgIyBJbiBzb21lIGNhc2VzIHRoZSBsaW5l
IGNhbiBjb250YWluIG9uZSBvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyB3
aGl0ZS1zcGFjZXMsIHNvIHN0cmlwIGl0IGJlZm9yZSBzcGxpdC4KLSAgICAgICAgICAgICAgICAg
ICAgcGlkLCBwcm9jZXNzX25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAnLCAxKQotICAgICAg
ICAgICAgICAgICAgICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQotICAgICAg
ICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5wb3BlbihbJ3BzJywgJy1lbycsICdwaWQsY29tbSdd
LCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9c2VsZi5QSVBFKSBhcyBwc19wcm9jZXNzOgorICAg
ICAgICAgICAgICAgIHN0ZG91dCwgXyA9IHBzX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAg
ICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gc29tZSBjYXNlcyB0aGUg
bGluZSBjYW4gY29udGFpbiBvbmUgb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBs
ZWFkaW5nIHdoaXRlLXNwYWNlcywgc28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgcGlkLCBwcm9jZXNzX25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAn
LCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc19uYW1lX2ZpbHRlcihwcm9j
ZXNzX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBl
bmQoaW50KHBpZCkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgcmV0dXJuIHNvcnRlZChy
dW5uaW5nX3BpZHMpCiAKQEAgLTM1NSw3ICszNzEsNyBAQCBjbGFzcyBFeGVjdXRpdmUoQWJzdHJh
Y3RFeGVjdXRpdmUpOgogICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mzc1MjgKICAgICAgICAgIyBmb3IgYW4gZXhhbXBsZSBvZiBhIHJlZ3Jlc2lv
biBjYXVzZWQgYnkgcGFzc2luZyBhIHVuaWNvZGUgc3RyaW5nIGRpcmVjdGx5LgogICAgICAgICAj
IEZJWE1FOiBXZSBtYXkgbmVlZCB0byBlbmNvZGUgZGlmZmVyZW50bHkgb24gZGlmZmVyZW50IHBs
YXRmb3Jtcy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dCwgdW5pY29kZSk6CisgICAgICAg
IGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCkgYW5kIGlzaW5zdGFuY2UoaW5wdXQsIHVuaWNv
ZGUpOgogICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5lbmNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vz
c19lbmNvZGluZygpKQogICAgICAgICByZXR1cm4gKHNlbGYuUElQRSwgaW5wdXQpCiAKQEAgLTM4
NCwzMyArNDAwLDM5IEBAIGNsYXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1jd2QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudj1lbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1z
ZWxmLl9zaG91bGRfY2xvc2VfZmRzKCkpCi0gICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVu
aWNhdGUoc3RyaW5nX3RvX2NvbW11bmljYXRlKVswXQotCi0gICAgICAgICMgcnVuX2NvbW1hbmQg
YXV0b21hdGljYWxseSBkZWNvZGVzIHRvIHVuaWNvZGUoKSBhbmQgY29udmVydHMgQ1JMRiB0byBM
RiB1bmxlc3MgZXhwbGljaXRseSB0b2xkIG5vdCB0by4KLSAgICAgICAgaWYgZGVjb2RlX291dHB1
dDoKLSAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5kZWNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vz
c19lbmNvZGluZygpKS5yZXBsYWNlKCdcclxuJywgJ1xuJykKLQotICAgICAgICAjIHdhaXQoKSBp
cyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAj
IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgIGV4aXRfY29kZSA9
IHByb2Nlc3Mud2FpdCgpCisgICAgICAgIHdpdGggcHJvY2VzczoKKyAgICAgICAgICAgIGlmIG5v
dCBzdHJpbmdfdG9fY29tbXVuaWNhdGU6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0
ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBlbGlmIHN5cy52ZXJzaW9u
X2luZm8gPiAoMywgMCkgYW5kIGlzaW5zdGFuY2Uoc3RyaW5nX3RvX2NvbW11bmljYXRlLCBzdHIp
OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVuaWNhdGUoc3RyaW5nX3Rv
X2NvbW11bmljYXRlLmVuY29kZSgndXRmLTgnKSlbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgb3V0cHV0ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShzdHJpbmdfdG9fY29tbXVu
aWNhdGUpWzBdCisKKyAgICAgICAgICAgICMgcnVuX2NvbW1hbmQgYXV0b21hdGljYWxseSBkZWNv
ZGVzIHRvIHVuaWNvZGUoKSBhbmQgY29udmVydHMgQ1JMRiB0byBMRiB1bmxlc3MgZXhwbGljaXRs
eSB0b2xkIG5vdCB0by4KKyAgICAgICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6CisgICAgICAgICAg
ICAgICAgb3V0cHV0ID0gb3V0cHV0LmRlY29kZShzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5n
KCkpLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorCisgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3Qg
dGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAgICAgIyBo
dHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICAgICAgZXhpdF9jb2Rl
ID0gcHJvY2Vzcy53YWl0KCkKIAotICAgICAgICBfbG9nLmRlYnVnKCciJXMiIHRvb2sgJS4yZnMn
ICUgKHNlbGYuY29tbWFuZF9mb3JfcHJpbnRpbmcoYXJncyksIHRpbWUudGltZSgpIC0gc3RhcnRf
dGltZSkpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCciJXMiIHRvb2sgJS4yZnMnICUgKHNlbGYu
Y29tbWFuZF9mb3JfcHJpbnRpbmcoYXJncyksIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkpCiAK
LSAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKLSAgICAgICAgICAgIHJldHVybiBleGl0X2Nv
ZGUKKyAgICAgICAgICAgIGlmIHJldHVybl9leGl0X2NvZGU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGV4aXRfY29kZQogCi0gICAgICAgIGlmIGV4aXRfY29kZToKLSAgICAgICAgICAgIHNjcmlw
dF9lcnJvciA9IFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFyZ3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGU9ZXhpdF9jb2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PW91dHB1dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1jd2QpCi0KLSAgICAgICAgICAgIGlmIGlnbm9y
ZV9lcnJvcnM6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGVycm9yX2hhbmRsZXIgaXMgTm9uZSwg
ImRvbid0IHNwZWNpZnkgZXJyb3JfaGFuZGxlciBpZiBpZ25vcmVfZXJyb3JzIGlzIFRydWUiCi0g
ICAgICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IEV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKKyAg
ICAgICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgICAgICAgICBzY3JpcHRfZXJyb3IgPSBT
Y3JpcHRFcnJvcihzY3JpcHRfYXJncz1hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4aXRfY29kZT1leGl0X2NvZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PW91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkKQorCisgICAgICAgICAgICAgICAgaWYg
aWdub3JlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGVycm9yX2hhbmRsZXIg
aXMgTm9uZSwgImRvbid0IHNwZWNpZnkgZXJyb3JfaGFuZGxlciBpZiBpZ25vcmVfZXJyb3JzIGlz
IFRydWUiCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBFeGVjdXRpdmUuaWdu
b3JlX2Vycm9yCiAKLSAgICAgICAgICAgIChlcnJvcl9oYW5kbGVyIG9yIHNlbGYuZGVmYXVsdF9l
cnJvcl9oYW5kbGVyKShzY3JpcHRfZXJyb3IpCi0gICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAg
ICAgICAgICAgICAoZXJyb3JfaGFuZGxlciBvciBzZWxmLmRlZmF1bHRfZXJyb3JfaGFuZGxlciko
c2NyaXB0X2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuIG91dHB1dAogCiAgICAgZGVmIF9jaGls
ZF9wcm9jZXNzX2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFdpbjMyIFB5dGhvbiAyLnggdXNl
cyBDcmVhdGVQcm9jZXNzQSByYXRoZXIgdGhhbiBDcmVhdGVQcm9jZXNzVwpAQCAtNDQ1LDcgKzQ2
Nyw3IEBAIGNsYXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAKICAgICBkZWYgX3N0
cmluZ2lmeV9hcmdzKHNlbGYsIGFyZ3MpOgogICAgICAgICAjIFBvcGVuIHdpbGwgdGhyb3cgYW4g
ZXhjZXB0aW9uIGlmIGFyZ3MgYXJlIG5vbi1zdHJpbmdzIChsaWtlIGludCgpKQotICAgICAgICBz
dHJpbmdfYXJncyA9IG1hcCh1bmljb2RlLCBhcmdzKQorICAgICAgICBzdHJpbmdfYXJncyA9IG1h
cChzdHIgaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKSBlbHNlIHVuaWNvZGUsIGFyZ3MpCiAg
ICAgICAgICMgVGhlIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgUG9wZW4gY2Fubm90IGhhbmRs
ZSB1bmljb2RlIHN0cmluZ3MuIDooCiAgICAgICAgIHJldHVybiBtYXAoc2VsZi5fZW5jb2RlX2Fy
Z3VtZW50X2lmX25lZWRlZCwgc3RyaW5nX2FyZ3MpCiAKQEAgLTQ3OCw3ICs1MDAsMTIgQEAgY2xh
c3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToKICAgICAgICAgICAgIHN0cmluZ19hcmdz
ID0gYXJncwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RyaW5nX2FyZ3MgPSBzZWxmLl9z
dHJpbmdpZnlfYXJncyhhcmdzKQotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihzdHJp
bmdfYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgIyBQeXRob24gMyB0cmVhdHMgUG9wZW4gYXMg
YSBjb250ZXh0IG1hbmFnZXIsIHdlIHNob3VsZCBhbGxvdyB0aGlzIGluIFB5dGhvbiAyCisgICAg
ICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuUG9wZW4oc3RyaW5nX2FyZ3MsICoqa3dhcmdzKQorICAg
ICAgICBpZiBub3QgY2FsbGFibGUoZ2V0YXR0cihyZXN1bHQsICJfX2VudGVyX18iLCBOb25lKSkg
YW5kIG5vdCBjYWxsYWJsZShnZXRhdHRyKHJlc3VsdCwgIl9fZXhpdF9fIiwgTm9uZSkpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuV3JhcHBlZFBvcGVuKHJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAogCiAgICAgZGVmIHJ1bl9pbl9wYXJhbGxlbChzZWxmLCBjb21tYW5kX2xpbmVzX2Fu
ZF9jd2RzLCBwcm9jZXNzZXM9Tm9uZSk6CiAgICAgICAgICIiIlJ1bnMgYSBsaXN0IG9mIChjbWRf
bGluZSBsaXN0LCBjd2Qgc3RyaW5nKSB0dXBsZXMgaW4gcGFyYWxsZWwgYW5kIHJldHVybnMgYSBs
aXN0IG9mIChyZXRjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGVzLiIiIgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9j
ay5weQkocmV2aXNpb24gMjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTEg
QEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTwogaW1w
b3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiAKIF9s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTM4LDkgKzM5LDkgQEAgX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3Rkb3V0PSdNT0NLIFNURE9VVFxuJywgc3RkZXJyPScn
KToKICAgICAgICAgc2VsZi5waWQgPSA0MgotICAgICAgICBzZWxmLnN0ZG91dCA9IFN0cmluZ0lP
LlN0cmluZ0lPKHN0ZG91dCkKLSAgICAgICAgc2VsZi5zdGRlcnIgPSBTdHJpbmdJTy5TdHJpbmdJ
TyhzdGRlcnIpCi0gICAgICAgIHNlbGYuc3RkaW4gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAg
ICAgIHNlbGYuc3Rkb3V0ID0gQnl0ZXNJTyhzdGRvdXQpCisgICAgICAgIHNlbGYuc3RkZXJyID0g
Qnl0ZXNJTyhzdGRlcnIpCisgICAgICAgIHNlbGYuc3RkaW4gPSBCeXRlc0lPKCkKICAgICAgICAg
c2VsZi5yZXR1cm5jb2RlID0gMAogICAgICAgICBzZWxmLl9pc19ydW5uaW5nID0gRmFsc2UKIApA
QCAtNTcsNiArNTgsMTIgQEAgY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAg
IHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAorICAgIGRlZiBf
X2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18o
c2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLndhaXQoKQorCiAKICMgRklYTUU6IFRoaXMgc2hv
dWxkIGJlIHVuaWZpZWQgd2l0aCBNb2NrRXhlY3V0aXZlMgogY2xhc3MgTW9ja0V4ZWN1dGl2ZShv
YmplY3QpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1
dGl2ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTMgKzExOCwxNSBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdzKHNl
bGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQogICAgICAgICBleGVjdXRpdmUu
cnVuX2NvbW1hbmQoY29tbWFuZF9saW5lKCdlY2hvJywgMSkpCi0gICAgICAgIGV4ZWN1dGl2ZS5w
b3Blbihjb21tYW5kX2xpbmUoJ2VjaG8nLCAxKSwgc3Rkb3V0PWV4ZWN1dGl2ZS5QSVBFKS53YWl0
KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZWNobyAxJywgZXhlY3V0aXZlLmNvbW1hbmRf
Zm9yX3ByaW50aW5nKFsnZWNobycsIDFdKSkKKyAgICAgICAgd2l0aCBleGVjdXRpdmUucG9wZW4o
Y29tbWFuZF9saW5lKCdlY2hvJywgMSksIHN0ZG91dD1leGVjdXRpdmUuUElQRSkgYXMgcHJvY2Vz
czoKKyAgICAgICAgICAgIHByb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdlY2hvIDEnLCBleGVjdXRpdmUuY29tbWFuZF9mb3JfcHJpbnRpbmcoWydlY2hvJywgMV0p
KQogCiAgICAgZGVmIHRlc3RfcG9wZW5fYXJncyhzZWxmKToKICAgICAgICAgZXhlY3V0aXZlID0g
RXhlY3V0aXZlKCkKICAgICAgICAgIyBFeHBsaWNpdGx5IG5hbWluZyB0aGUgJ2FyZ3MnIGFyZ3Vt
ZW50IHNob3VsZCBub3QgdGhvdyBhbiBleGNlcHRpb24uCi0gICAgICAgIGV4ZWN1dGl2ZS5wb3Bl
bihhcmdzPWNvbW1hbmRfbGluZSgnZWNobycsIDEpLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUpLndh
aXQoKQorICAgICAgICB3aXRoIGV4ZWN1dGl2ZS5wb3BlbihhcmdzPWNvbW1hbmRfbGluZSgnZWNo
bycsIDEpLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUpIGFzIHByb2Nlc3M6CisgICAgICAgICAgICBw
cm9jZXNzLndhaXQoKQogCiAgICAgZGVmIHRlc3RfcnVuX2NvbW1hbmRfd2l0aF91bmljb2RlKHNl
bGYpOgogICAgICAgICAiIiJWYWxpZGF0ZSB0aGF0IGl0IGlzIHNhZmUgdG8gcGFzcyB1bmljb2Rl
KCkgb2JqZWN0cwpAQCAtMTY3LDQ0ICsxNjksNDQgQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2VyaWFsX3Rlc3Rfa2lsbF9wcm9jZXNzKHNlbGYp
OgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQotICAgICAgICBwcm9jZXNzID0gc3Vi
cHJvY2Vzcy5Qb3BlbihuZXZlcl9lbmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5Q
SVBFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3MucG9sbCgpLCBOb25lKSAgIyBQ
cm9jZXNzIGlzIHJ1bm5pbmcKLSAgICAgICAgZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhwcm9jZXNz
LnBpZCkKLSAgICAgICAgIyBOb3RlOiBDYW4ndCB1c2UgYSB0ZXJuYXJ5IHNpbmNlIHNpZ25hbC5T
SUdLSUxMIGlzIHVuZGVmaW5lZCBmb3Igc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIKLSAgICAgICAg
aWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgIyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NzkwCi0gICAgICAgICAg
ICAjIFdlIHNlZW0gdG8gZ2V0IGVpdGhlciAwIG9yIDEgaGVyZSBmb3Igc29tZSByZWFzb24uCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoMCwgMSkpCi0gICAgICAg
IGVsaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgotICAgICAgICAgICAgIyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MTk2Ci0gICAgICAgICAgICAj
IGN5Z3dpbiBzZWVtcyB0byBnaXZlIHVzIGVpdGhlciBTSUdBQlJUIG9yIFNJR0tJTEwKLSAgICAg
ICAgICAgICMgTmF0aXZlIFdpbmRvd3MgKHZpYSBDeWd3aW4pIHJldHVybnMgRU5PVEJMSyAoLTE1
KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwcm9jZXNzLndhaXQoKSwgKC1zaWduYWwuU0lH
QUJSVCwgLXNpZ25hbC5TSUdLSUxMLCAtMTUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ZXhwZWN0ZWRfZXhpdF9jb2RlID0gLXNpZ25hbC5TSUdURVJNCi0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHByb2Nlc3Mud2FpdCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCisgICAgICAgIHdp
dGggZXhlY3V0aXZlLnBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUpIGFzIHByb2Nlc3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nl
c3MucG9sbCgpLCBOb25lKSAgIyBQcm9jZXNzIGlzIHJ1bm5pbmcKKyAgICAgICAgICAgIGV4ZWN1
dGl2ZS5raWxsX3Byb2Nlc3MocHJvY2Vzcy5waWQpCisgICAgICAgICAgICAjIE5vdGU6IENhbid0
IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFsLlNJR0tJTEwgaXMgdW5kZWZpbmVkIGZvciBzeXMu
cGxhdGZvcm0gPT0gIndpbjMyIgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dp
dGgoJ3dpbicpOgorICAgICAgICAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDc5MAorICAgICAgICAgICAgICAgICMgV2Ugc2VlbSB0byBn
ZXQgZWl0aGVyIDAgb3IgMSBoZXJlIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoMCwgMSkpCisgICAgICAgICAgICBlbGlmIHN5
cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgxOTYKKyAgICAgICAgICAgICAgICAj
IGN5Z3dpbiBzZWVtcyB0byBnaXZlIHVzIGVpdGhlciBTSUdBQlJUIG9yIFNJR0tJTEwKKyAgICAg
ICAgICAgICAgICAjIE5hdGl2ZSBXaW5kb3dzICh2aWEgQ3lnd2luKSByZXR1cm5zIEVOT1RCTEsg
KC0xNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoLXNp
Z25hbC5TSUdBQlJULCAtc2lnbmFsLlNJR0tJTEwsIC0xNSkpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkX2V4aXRfY29kZSA9IC1zaWduYWwuU0lHVEVSTQorICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCksIGV4cGVjdGVkX2V4
aXRfY29kZSkKIAotICAgICAgICAjIEtpbGxpbmcgYWdhaW4gc2hvdWxkIGZhaWwgc2lsZW50bHku
Ci0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocHJvY2Vzcy5waWQpCisgICAgICAgICAg
ICAjIEtpbGxpbmcgYWdhaW4gc2hvdWxkIGZhaWwgc2lsZW50bHkuCisgICAgICAgICAgICBleGVj
dXRpdmUua2lsbF9wcm9jZXNzKHByb2Nlc3MucGlkKQogCiAgICAgZGVmIHNlcmlhbF90ZXN0X2tp
bGxfYWxsKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQotICAgICAgICBw
cm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihuZXZlcl9lbmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9
c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm9jZXNzLnBvbGwo
KSkgICMgUHJvY2VzcyBpcyBydW5uaW5nCi0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZl
cl9lbmRpbmdfY29tbWFuZCgpWzBdKQotICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5h
cnkgc2luY2Ugc2lnbmFsLlNJR1RFUk0gaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0g
IndpbjMyIgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6Ci0gICAgICAgICAg
ICBleHBlY3RlZF9leGl0X2NvZGUgPSAwICAjIG9zLmtpbGwgcmVzdWx0cyBpbiBleGl0KDApIGZv
ciB0aGlzIHByb2Nlc3MuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Mud2Fp
dCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0NzkwCi0gICAgICAgICAgICAjIFdlIHNlZW0gdG8gZ2V0IGVp
dGhlciAwIG9yIDEgaGVyZSBmb3Igc29tZSByZWFzb24uCi0gICAgICAgICAgICBzZWxmLmFzc2Vy
dEluKHByb2Nlc3Mud2FpdCgpLCAoMCwgMSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBl
eHBlY3RlZF9leGl0X2NvZGUgPSAtc2lnbmFsLlNJR1RFUk0KLSAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKLSAgICAgICAgIyBL
aWxsaW5nIGFnYWluIHNob3VsZCBmYWlsIHNpbGVudGx5LgotICAgICAgICBleGVjdXRpdmUua2ls
bF9hbGwobmV2ZXJfZW5kaW5nX2NvbW1hbmQoKVswXSkKKyAgICAgICAgd2l0aCBleGVjdXRpdmUu
cG9wZW4obmV2ZXJfZW5kaW5nX2NvbW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMg
cHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb2Nlc3MucG9sbCgpKSAg
IyBQcm9jZXNzIGlzIHJ1bm5pbmcKKyAgICAgICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZl
cl9lbmRpbmdfY29tbWFuZCgpWzBdKQorICAgICAgICAgICAgIyBOb3RlOiBDYW4ndCB1c2UgYSB0
ZXJuYXJ5IHNpbmNlIHNpZ25hbC5TSUdURVJNIGlzIHVuZGVmaW5lZCBmb3Igc3lzLnBsYXRmb3Jt
ID09ICJ3aW4zMiIKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKKyAg
ICAgICAgICAgICAgICBleHBlY3RlZF9leGl0X2NvZGUgPSAwICAjIG9zLmtpbGwgcmVzdWx0cyBp
biBleGl0KDApIGZvciB0aGlzIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQorICAgICAgICAgICAgZWxp
ZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgIyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NzkwCisgICAgICAg
ICAgICAgICAgIyBXZSBzZWVtIHRvIGdldCBlaXRoZXIgMCBvciAxIGhlcmUgZm9yIHNvbWUgcmVh
c29uLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgwLCAx
KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2Rl
ID0gLXNpZ25hbC5TSUdURVJNCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9j
ZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQorICAgICAgICAgICAgIyBLaWxsaW5nIGFn
YWluIHNob3VsZCBmYWlsIHNpbGVudGx5LgorICAgICAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxs
KG5ldmVyX2VuZGluZ19jb21tYW5kKClbMF0pCiAKICAgICBkZWYgX2Fzc2VydF93aW5kb3dzX2lt
YWdlX25hbWUoc2VsZiwgbmFtZSwgZXhwZWN0ZWRfd2luZG93c19uYW1lKToKICAgICAgICAgZXhl
Y3V0aXZlID0gRXhlY3V0aXZlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgZXJybm8KLWlt
cG9ydCBleGNlcHRpb25zCiBpbXBvcnQgZmlsZWNtcAogaW1wb3J0IGdsb2IKIGltcG9ydCBoYXNo
bGliCkBAIC0yMjEsMTEgKzIyMCwxMSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAg
ICBkZWYgcmVhZF9iaW5hcnlfZmlsZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRo
ZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhcyBhIGJ5dGUgc3RyaW5n
LiIiIgotICAgICAgICB3aXRoIGZpbGUocGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgd2l0aCBv
cGVuKHBhdGgsICdyYicpIGFzIGY6CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKIAogICAg
IGRlZiB3cml0ZV9iaW5hcnlfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cyk6Ci0gICAgICAgIHdp
dGggZmlsZShwYXRoLCAnd2InKSBhcyBmOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3diJykg
YXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCiAKICAgICBkZWYgb3Blbl90ZXh0
X2ZpbGVfZm9yX3JlYWRpbmcoc2VsZiwgcGF0aCwgZXJyb3JzPSdzdHJpY3QnKToKQEAgLTI1Niw3
ICsyNTUsMTEgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgogCiAgICAgICAgIFRoZSBmaWxl
IGlzIHdyaXR0ZW4gZW5jb2RlZCBhcyBVVEYtOCB3aXRoIG5vIEJPTS4iIiIKICAgICAgICAgd2l0
aCBjb2RlY3Mub3BlbihwYXRoLCAndycsICd1dGYtOCcsIGVycm9ycz1lcnJvcnMpIGFzIGY6Ci0g
ICAgICAgICAgICBmLndyaXRlKGNvbnRlbnRzLmRlY29kZSgndXRmLTgnLCBlcnJvcnM9ZXJyb3Jz
KSBpZiB0eXBlKGNvbnRlbnRzKSA9PSBzdHIgZWxzZSBjb250ZW50cykKKyAgICAgICAgICAgIGlm
IChzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApKToKKyAgICAgICAgICAgICAgICBuZWVkX2VuY29k
ZWluZyA9IGJ5dGVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5lZWRfZW5j
b2RlaW5nID0gc3RyCisgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnRzLmRlY29kZSgndXRmLTgn
LCBlcnJvcnM9ZXJyb3JzKSBpZiB0eXBlKGNvbnRlbnRzKSA9PSBuZWVkX2VuY29kZWluZyBlbHNl
IGNvbnRlbnRzKQogCiAgICAgZGVmIHNoYTEoc2VsZiwgcGF0aCk6CiAgICAgICAgIGNvbnRlbnRz
ID0gc2VsZi5yZWFkX2JpbmFyeV9maWxlKHBhdGgpCkBAIC0yNjUsMTkgKzI2OCwxNSBAQCBjbGFz
cyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIHJlbHBhdGgoc2VsZiwgcGF0aCwgc3RhcnQ9
Jy4nKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChwYXRoLCBzdGFydCkKIAotICAg
IGNsYXNzIF9XaW5kb3dzRXJyb3IoZXhjZXB0aW9ucy5PU0Vycm9yKToKLSAgICAgICAgIiIiRmFr
ZSBleGNlcHRpb24gZm9yIExpbnV4IGFuZCBNYWMuIiIiCi0gICAgICAgIHBhc3MKLQogICAgIGRl
ZiByZW1vdmUoc2VsZiwgcGF0aCwgb3NyZW1vdmU9b3MucmVtb3ZlKToKICAgICAgICAgIiIiT24g
V2luZG93cywgaWYgYSBwcm9jZXNzIHdhcyByZWNlbnRseSBraWxsZWQgYW5kIGl0IGhlbGQgb24g
dG8gYQogICAgICAgICBmaWxlLCB0aGUgT1Mgd2lsbCBob2xkIG9uIHRvIHRoZSBmaWxlIGZvciBh
IHNob3J0IHdoaWxlLiAgVGhpcyBtYWtlcwogICAgICAgICBhdHRlbXB0cyB0byBkZWxldGUgdGhl
IGZpbGUgZmFpbC4gIFRvIHdvcmsgYXJvdW5kIHRoYXQsIHRoaXMgbWV0aG9kCiAgICAgICAgIHdp
bGwgcmV0cnkgZm9yIGEgZmV3IHNlY29uZHMgdW50aWwgV2luZG93cyBpcyBkb25lIHdpdGggdGhl
IGZpbGUuIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4Y2VwdGlvbnMuV2luZG93c0Vy
cm9yCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGV4Y2VwdGlv
bnMuV2luZG93c0Vycm9yID0gRmlsZVN5c3RlbS5fV2luZG93c0Vycm9yCisgICAgICAgICAgICBX
aW5PU0Vycm9yID0gV2luZG93c0Vycm9yCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAg
ICAgICAgICBXaW5PU0Vycm9yID0gT1NFcnJvcgogCiAgICAgICAgIHJldHJ5X3RpbWVvdXRfc2Vj
ID0gMy4wCiAgICAgICAgIHNsZWVwX2ludGVydmFsID0gMC4xCkBAIC0yODUsNyArMjg0LDcgQEAg
Y2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
ICAgIG9zcmVtb3ZlKHBhdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAg
ICAgIGV4Y2VwdCBleGNlcHRpb25zLldpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhj
ZXB0IFdpbk9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX2lu
dGVydmFsKQogICAgICAgICAgICAgICAgIHJldHJ5X3RpbWVvdXRfc2VjIC09IHNsZWVwX2ludGVy
dmFsCiAgICAgICAgICAgICAgICAgaWYgcmV0cnlfdGltZW91dF9zZWMgPCAwOgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV9tb2NrLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiAr
MjYsMTMgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJ
TwogaW1wb3J0IGVycm5vCiBpbXBvcnQgaGFzaGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2lt
cG9ydCBzeXMKIAorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgcGF0aAogCiAKQEAgLTE4Niw3ICsxODcsNyBAQCBjbGFzcyBNb2NrRmls
ZVN5c3RlbShvYmplY3QpOgogCiAgICAgICAgICMgV2UgY291bGQgdXNlIGZubWF0Y2guZm5tYXRj
aCwgYnV0IHRoYXQgbWlnaHQgbm90IGRvIHRoZSByaWdodCB0aGluZyBvbiB3aW5kb3dzLgogICAg
ICAgICBleGlzdGluZ19maWxlcyA9IFtwYXRoIGZvciBwYXRoLCBjb250ZW50cyBpbiBzZWxmLmZp
bGVzLml0ZW1zKCkgaWYgY29udGVudHMgaXMgbm90IE5vbmVdCi0gICAgICAgIHJldHVybiBmaWx0
ZXIocGF0aF9maWx0ZXIsIGV4aXN0aW5nX2ZpbGVzKSArIGZpbHRlcihwYXRoX2ZpbHRlciwgc2Vs
Zi5kaXJzKQorICAgICAgICByZXR1cm4gW2kgZm9yIGkgaW4gZmlsdGVyKHBhdGhfZmlsdGVyLCBl
eGlzdGluZ19maWxlcyldICsgW2kgZm9yIGkgaW4gZmlsdGVyKHBhdGhfZmlsdGVyLCBzZWxmLmRp
cnMpXQogCiAgICAgZGVmIGlzYWJzKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gcGF0aC5z
dGFydHN3aXRoKHNlbGYuc2VwKQpAQCAtNDQxLDcgKzQ0MiwxMCBAQCBjbGFzcyBXcml0YWJsZUJp
bmFyeUZpbGVPYmplY3Qob2JqZWN0KToKICAgICAgICAgc2VsZi5mcyA9IGZzCiAgICAgICAgIHNl
bGYucGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotICAgICAgICBzZWxm
LmZzLmZpbGVzW3BhdGhdID0gIiIKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAw
KToKKyAgICAgICAgICAgIHNlbGYuZnMuZmlsZXNbcGF0aF0gPSBiJycKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuZnMuZmlsZXNbcGF0aF0gPSAiIgogCiAgICAgZGVmIF9fZW50ZXJf
XyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKQEAgLTQ1Miw4ICs0NTYsMTEgQEAgY2xhc3Mg
V3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0KG9iamVjdCk6CiAgICAgZGVmIGNsb3NlKHNlbGYpOgog
ICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKIAotICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgot
ICAgICAgICBzZWxmLmZzLmZpbGVzW3NlbGYucGF0aF0gKz0gc3RyCisgICAgZGVmIHdyaXRlKHNl
bGYsIHN0cmluZyk6CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCkgYW5kIGlz
aW5zdGFuY2Uoc3RyaW5nLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5mcy5maWxlc1tzZWxmLnBh
dGhdICs9IHN0cmluZy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuZnMuZmlsZXNbc2VsZi5wYXRoXSArPSBzdHJpbmcKICAgICAgICAgc2VsZi5mcy53cml0
dGVuX2ZpbGVzW3NlbGYucGF0aF0gPSBzZWxmLmZzLmZpbGVzW3NlbGYucGF0aF0KIAogCkBAIC00
ODksNyArNDk2LDcgQEAgY2xhc3MgUmVhZGFibGVCaW5hcnlGaWxlT2JqZWN0KG9iamVjdCk6CiAK
IGNsYXNzIFJlYWRhYmxlVGV4dEZpbGVPYmplY3QoUmVhZGFibGVCaW5hcnlGaWxlT2JqZWN0KToK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgZnMsIHBhdGgsIGRhdGEpOgotICAgICAgICBzdXBlcihS
ZWFkYWJsZVRleHRGaWxlT2JqZWN0LCBzZWxmKS5fX2luaXRfXyhmcywgcGF0aCwgU3RyaW5nSU8u
U3RyaW5nSU8oZGF0YS5kZWNvZGUoInV0Zi04IikpKQorICAgICAgICBzdXBlcihSZWFkYWJsZVRl
eHRGaWxlT2JqZWN0LCBzZWxmKS5fX2luaXRfXyhmcywgcGF0aCwgU3RyaW5nSU8oZGF0YS5kZWNv
ZGUoInV0Zi04IikpKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmRhdGEu
Y2xvc2UoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVz
eXN0ZW1fbW9ja191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV9tb2NrX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxOCArNzAsMTggQEAgY2xh
c3MgTW9ja0ZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgIGRlZiB0ZXN0X25vcm1w
YXRoKHNlbGYpOgogICAgICAgICBzZWxmLnF1aWNrX2NoZWNrKHNlbGYuZnMubm9ybXBhdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcy5fc2xvd19idXRfY29ycmVjdF9ub3JtcGF0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAnLycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy4nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICcvLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Zvby8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vLics
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby9iYXInLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICcvZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLy4uL2JhcicsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby8uLi9iYXIvYmF6JywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnLi4vZm9vJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJycsKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAoJy8nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
KCcuJywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnLy4nLCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgKCdmb28nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28vJywp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vLy4nLCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgKCdmb28vYmFyJywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnL2Zvbycs
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Zvby8uLi9iYXInLCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgKCdmb28vLi4vYmFyL2JheicsKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAoJy4uL2ZvbycsKSkKIAogICAgIGRlZiB0ZXN0X2RpcnNfdW5kZXIoc2VsZik6CiAgICAg
ICAgIEZBS0VfRklMRVMgPSB7CkBAIC05MCw5ICs5MCw5IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVt
VGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICAgICAgICAgICcvdGVzdHMvdGVzdDIvdGVzdC50eHQn
OiAndGVzdCd9CiAgICAgICAgIGZzID0gZmlsZXN5c3RlbV9tb2NrLk1vY2tGaWxlU3lzdGVtKGZp
bGVzPUZBS0VfRklMRVMpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuZGlyc191bmRl
cignL3Rlc3RzJyksIFsnL3Rlc3RzJywgJy90ZXN0cy90ZXN0MicsICcvdGVzdHMvdGVzdDMnLCAn
L3Rlc3RzL3Rlc3QzL3Rlc3QyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZGlyc191
bmRlcignL3Rlc3RzJyksIFsnL3Rlc3RzJywgJy90ZXN0cy90ZXN0MicsICcvdGVzdHMvdGVzdDMn
LCAnL3Rlc3RzL3Rlc3QzL3Rlc3QyJ10pCiAKICAgICAgICAgZGVmIGZpbHRlcl9kaXIoZnMsIGRp
cnBhdGgpOgogICAgICAgICAgICAgcmV0dXJuIGZzLmJhc2VuYW1lKGRpcnBhdGgpICE9ICd0ZXN0
MicKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmcy5kaXJzX3VuZGVyKCcvdGVzdHMnLCBm
aWx0ZXJfZGlyKSwgWycvdGVzdHMnLCAnL3Rlc3RzL3Rlc3QzJ10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZnMuZGlyc191bmRlcignL3Rlc3RzJywgZmlsdGVyX2RpciksIFsnL3Rlc3RzJywg
Jy90ZXN0cy90ZXN0MyddKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0
OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVt
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGltcG9ydCBzeXMK
IGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gZmlsZXN5c3RlbSBpbXBv
cnQgRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1w
b3J0IEZpbGVTeXN0ZW0KIAogCiBjbGFzcyBHZW5lcmljRmlsZVN5c3RlbVRlc3RzKG9iamVjdCk6
CkBAIC0yNjcsOSArMjY3LDkgQEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRl
c3RDYQogICAgICAgICBiaW5hcnlfcGF0aCA9IE5vbmUKIAogICAgICAgICB1bmljb2RlX3RleHRf
c3RyaW5nID0gdSdcdTAxNkFuXHUwMTJEY1x1MDE0RGRlXHUwMzNEJwotICAgICAgICBoZXhfZXF1
aXZhbGVudCA9ICdceEM1XHhBQVx4NkVceEM0XHhBRFx4NjNceEM1XHg4RFx4NjRceDY1XHhDQ1x4
QkQnCi0gICAgICAgIG1hbGZvcm1lZF90ZXh0X2hleCA9ICdceDREXHg2OVx4NjNceDcyXHg2Rlx4
NzNceDZGXHg2Nlx4NzRceEFFXHgyMFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3
NFx4NzVceDY0XHg2OVx4NkZceEFFXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgwQScKLSAgICAg
ICAgbWFsZm9ybWVkX2lnbm9yZWRfdGV4dF9oZXggPSAnXHg0RFx4NjlceDYzXHg3Mlx4NkZceDcz
XHg2Rlx4NjZceDc0XHgyMFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVc
eDY0XHg2OVx4NkZceDIwXHgzMlx4MzBceDMxXHgzMFx4MERceDBBJworICAgICAgICBoZXhfZXF1
aXZhbGVudCA9IGInXHhDNVx4QUFceDZFXHhDNFx4QURceDYzXHhDNVx4OERceDY0XHg2NVx4Q0Nc
eEJEJworICAgICAgICBtYWxmb3JtZWRfdGV4dF9oZXggPSBiJ1x4NERceDY5XHg2M1x4NzJceDZG
XHg3M1x4NkZceDY2XHg3NFx4QUVceDIwXHg1Nlx4NjlceDczXHg3NVx4NjFceDZDXHgyMFx4NTNc
eDc0XHg3NVx4NjRceDY5XHg2Rlx4QUVceDIwXHgzMlx4MzBceDMxXHgzMFx4MERceDBBJworICAg
ICAgICBtYWxmb3JtZWRfaWdub3JlZF90ZXh0X2hleCA9IGInXHg0RFx4NjlceDYzXHg3Mlx4NkZc
eDczXHg2Rlx4NjZceDc0XHgyMFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4
NzVceDY0XHg2OVx4NkZceDIwXHgzMlx4MzBceDMxXHgzMFx4MERceDBBJwogICAgICAgICB0cnk6
CiAgICAgICAgICAgICB0ZXh0X3BhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3Vu
aXR0ZXN0XycpCiAgICAgICAgICAgICBiaW5hcnlfcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVm
aXg9J3RyZWVfdW5pdHRlc3RfJykKQEAgLTI4NSw4ICsyODUsOSBAQCBjbGFzcyBSZWFsRmlsZVN5
c3RlbVRlc3QodW5pdHRlc3QuVGVzdENhCiAgICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmls
ZShiaW5hcnlfcGF0aCwgbWFsZm9ybWVkX3RleHRfaGV4KQogICAgICAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgZnMucmVhZF90ZXh0X2ZpbGUsIGJpbmFyeV9wYXRoKQogICAg
ICAgICAgICAgdGV4dF9jb250ZW50cyA9IGZzLnJlYWRfYmluYXJ5X2ZpbGUoYmluYXJ5X3BhdGgp
LmRlY29kZSgndXRmOCcsICdpZ25vcmUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
dGV4dF9jb250ZW50cywgbWFsZm9ybWVkX2lnbm9yZWRfdGV4dF9oZXgpCi0gICAgICAgICAgICBm
cy5vcGVuX3RleHRfZmlsZV9mb3JfcmVhZGluZyhiaW5hcnlfcGF0aCwgJ3JlcGxhY2UnKS5yZWFk
bGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHRfY29udGVudHMsIG1hbGZv
cm1lZF9pZ25vcmVkX3RleHRfaGV4LmRlY29kZSgndXRmOCcsICdpZ25vcmUnKSkKKyAgICAgICAg
ICAgIHdpdGggZnMub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoYmluYXJ5X3BhdGgsICdyZXBs
YWNlJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBmaWxlLnJlYWRsaW5lKCkKIAogICAgICAg
ICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgdGV4dF9wYXRoIGFuZCBmcy5pc2ZpbGUodGV4dF9w
YXRoKToKQEAgLTMxMSw3ICszMTIsNyBAQCBjbGFzcyBSZWFsRmlsZVN5c3RlbVRlc3QodW5pdHRl
c3QuVGVzdENhCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByYWlz
ZSBXaW5kb3dzRXJyb3IKICAgICAgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAg
ICAgICAgICAgICAgICByYWlzZSBGaWxlU3lzdGVtLl9XaW5kb3dzRXJyb3IKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiAgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5yZW1vdmUoJ2ZpbGVuYW1lJywgcmVtb3ZlX3dpdGhfZXhj
ZXB0aW9uKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRw
dXRjYXB0dXJlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsMTEgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCiBpbXBvcnQg
dW5pdHRlc3QKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK3RyeToKKyAgICBmcm9t
IFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTyAgIyBQeXRob24gMgorZXhjZXB0IEltcG9ydEVycm9y
OgorICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPICAjIFB5dGhvbiAzCiAKIAogY2xhc3MgT3V0
cHV0Q2FwdHVyZShvYmplY3QpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL291dHB1dHRlZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0dGVlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0dGVl
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTggQEAKICMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHVuaXR0ZXN0
Cit0cnk6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8gICMgUHl0aG9uIDIKK2V4
Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyAgIyBQeXRob24g
MwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0dGVlIGltcG9ydCBUZWUsIE91
dHB1dFRlZQogCiAKIGNsYXNzIFNpbXBsZVRlZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
IGRlZiB0ZXN0X3NpbXBsZV90ZWUoc2VsZik6Ci0gICAgICAgIGZpbGUxLCBmaWxlMiA9IFN0cmlu
Z0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgZmlsZTEsIGZpbGUy
ID0gU3RyaW5nSU8oKSwgU3RyaW5nSU8oKQogICAgICAgICB0ZWUgPSBUZWUoZmlsZTEsIGZpbGUy
KQogICAgICAgICB0ZWUud3JpdGUoImZvbyBiYXJcbiIpCiAgICAgICAgIHRlZS53cml0ZSgiYmF6
XG4iKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BhdGgucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BhdGgu
cHkJKHJldmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9wYXRoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBpbXBvcnQgc3Vi
cHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB0aHJlYWRpbmcKLWlt
cG9ydCB1cmxsaWIKKworaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKKyAgICBpbXBvcnQg
dXJsbGliLnBhcnNlCitlbHNlOgorICAgIGltcG9ydCB1cmxsaWIKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBAIC0xNDYsNiArMTUwLDggQEAgZGVmIF9lc2NhcGUocGF0
aCk6CiAgICAgIyB3aGVuIGNvbnZlcnRpbmcgZmlsZW5hbWVzIHRvIGZpbGVzLiBJbnN0ZWFkIG9m
IHVzaW5nIHVybGxpYidzIGRlZmF1bHQKICAgICAjIHJ1bGVzLCB3ZSBhbGxvdyBhIHNtYWxsIGxp
c3Qgb2Ygb3RoZXIgY2hhcmFjdGVycyB0aHJvdWdoIHVuLWVzY2FwZWQuCiAgICAgIyBJdCdzIHVu
Y2xlYXIgaWYgdGhpcyBpcyB0aGUgYmVzdCBwb3NzaWJsZSBzb2x1dGlvbi4KKyAgICBpZiBzeXMu
dmVyc2lvbl9pbmZvID4gKDMsIDApOgorICAgICAgICByZXR1cm4gdXJsbGliLnBhcnNlLnF1b3Rl
KHBhdGgsIHNhZmU9Jy8rOicpCiAgICAgcmV0dXJuIHVybGxpYi5xdW90ZShwYXRoLCBzYWZlPScv
KzonKQogCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wZW1m
aWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wZW1maWxlLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3
IEBAIGRlZiBfcGFyc2VfcGVtX2Zvcm1hdChjb250ZW50KToKIAogICAgICAgICB0cnk6CiAgICAg
ICAgICAgICBpbmRleCA9IGxpbmVzLmluZGV4KGVuZF9tYXJrZXIpCi0gICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHJh
aXNlIEJhZEZvcm1hdEVycm9yKCJDYW5ub3QgZmluZCBzZWN0aW9uIGVuZDoge30iLmZvcm1hdChl
bmRfbWFya2VyKSkKIAogICAgICAgICByZXR1cm4ga2luZCwgIlxuIi5qb2luKGxpbmVzWzA6aW5k
ZXggKyAxXSkgKyAiXG4iLCBsaW5lc1tpbmRleCArIDE6XQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHkJ
KHJldmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wZW1maWxlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAK
IAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5wZW1maWxlIGltcG9ydCBQZW0sIEJhZEZvcm1hdEVycm9yCiAKQEAgLTE1NywxNCArMTU2
LDE1IEBAIGRlZiB0cmltKGRvY3N0cmluZyk6CiAgICAgIyBhbmQgc3BsaXQgaW50byBhIGxpc3Qg
b2YgbGluZXM6CiAgICAgbGluZXMgPSBkb2NzdHJpbmcuZXhwYW5kdGFicygpLnNwbGl0bGluZXMo
KQogICAgICMgRGV0ZXJtaW5lIG1pbmltdW0gaW5kZW50YXRpb24gKGZpcnN0IGxpbmUgZG9lc24n
dCBjb3VudCk6Ci0gICAgaW5kZW50ID0gc3lzLm1heGludAorICAgIE1BWCA9IDIxNDc0ODM2NDcK
KyAgICBpbmRlbnQgPSBNQVgKICAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06CiAgICAgICAgIHN0
cmlwcGVkID0gbGluZS5sc3RyaXAoKQogICAgICAgICBpZiBzdHJpcHBlZDoKICAgICAgICAgICAg
IGluZGVudCA9IG1pbihpbmRlbnQsIGxlbihsaW5lKSAtIGxlbihzdHJpcHBlZCkpCiAgICAgIyBS
ZW1vdmUgaW5kZW50YXRpb24gKGZpcnN0IGxpbmUgaXMgc3BlY2lhbCk6CiAgICAgdHJpbW1lZCA9
IFtsaW5lc1swXS5zdHJpcCgpXQotICAgIGlmIGluZGVudCA8IHN5cy5tYXhpbnQ6CisgICAgaWYg
aW5kZW50IDwgTUFYOgogICAgICAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06CiAgICAgICAgICAg
ICB0cmltbWVkLmFwcGVuZChsaW5lW2luZGVudDpdLnJzdHJpcCgpKQogICAgICMgU3RyaXAgb2Zm
IHRyYWlsaW5nIGFuZCBsZWFkaW5nIGJsYW5rIGxpbmVzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lv
biAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZv
cm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgY2xhc3MgUGxhdGZv
cm1JbmZvKG9iamVjdCk6CiAKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAg
ICAgICBpZiBzZWxmLmlzX21hYygpOgotICAgICAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwgImh3Lm1lbXNpemUiXSkpCisgICAg
ICAgICAgICByZXR1cm4gaW50KHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbInN5c2N0bCIs
ICItbiIsICJody5tZW1zaXplIl0pKQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIHRl
cm1pbmFsX3dpZHRoKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTAgQEAg
Y2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgIGRlZiB0ZXN0X3Jl
YWxfY29kZShzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGUgcmVhbCAo
dW5tb2NrZWQpIGNvZGUgYWN0dWFsbHkgd29ya3MuCiAgICAgICAgIGluZm8gPSBQbGF0Zm9ybUlu
Zm8oc3lzLCBwbGF0Zm9ybSwgRXhlY3V0aXZlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1
YWxzKGluZm8ub3NfbmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5v
c19uYW1lLCAnJykKICAgICAgICAgaWYgaW5mby5pc19tYWMoKSBvciBpbmZvLmlzX3dpbigpOgog
ICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaW5mby5vc192ZXJzaW9uKQotICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAg
c2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGluZm8uaXNfbWFjKCkgb3IgaW5mby5pc193aW4oKSBvciBpbmZvLmlzX2xp
bnV4KCkgb3IgaW5mby5pc19mcmVlYnNkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25l
KGluZm8udGVybWluYWxfd2lkdGgoKSkKIApAQCAtMTM1LDE2ICsxMzUsMTYgQEAgY2xhc3MgVGVz
dFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogCiAgICAgZGVmIHRlc3RfZGlzcGxheV9u
YW1lKHNlbGYpOgogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2Rhcndp
bicpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAn
JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykK
IAogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2Vf
cGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5nPSc2LjEuNzYwMCcpKQotICAgICAgICBzZWxmLmFz
c2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3Nl
cnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAogICAgICAgICBpbmZvID0gc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcp
KQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAog
ICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2Vf
cGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFs
cyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChp
bmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAogICAgIGRlZiB0ZXN0X3RvdGFsX2J5dGVzX21lbW9y
eShzZWxmKToKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4n
KSwgZmFrZV9wbGF0Zm9ybSgnMTAuNi4zJyksIGZha2VfZXhlY3V0aXZlKCcxMjM0JykpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5
CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcHJvZmlsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIGZyb20gX19m
dXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcmUK
LWltcG9ydCBpdGVydG9vbHMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CkBAIC00MSw3ICs0MCwxMiBAQCBjbGFzcyBQcm9maWxlckZhY3Rvcnkob2JqZWN0KToKICAgICAg
ICAgaWYgbm90IHByb2ZpbGVyczoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBy
b2ZpbGVyX25hbWUgPSBwcm9maWxlcl9uYW1lIG9yIGNscy5kZWZhdWx0X3Byb2ZpbGVyX25hbWUo
aG9zdC5wbGF0Zm9ybSkKLSAgICAgICAgcHJvZmlsZXJfY2xhc3MgPSBuZXh0KGl0ZXJ0b29scy5p
ZmlsdGVyKGxhbWJkYSBwcm9maWxlcjogcHJvZmlsZXIubmFtZSA9PSBwcm9maWxlcl9uYW1lLCBw
cm9maWxlcnMpLCBOb25lKQorICAgICAgICBwcm9maWxlcl9jbGFzcyA9IE5vbmUKKyAgICAgICAg
Zm9yIHByb2ZpbGVyIGluIHByb2ZpbGVyczoKKyAgICAgICAgICAgIGlmIHByb2ZpbGVyLm5hbWUg
PT0gcHJvZmlsZXJfbmFtZToKKyAgICAgICAgICAgICAgICBwcm9maWxlcl9jbGFzcyA9IHByb2Zp
bGVyCisgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICBpZiBub3QgcHJvZmlsZXJfY2xh
c3M6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gcHJvZmlsZXJzWzBd
KGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwgb3V0cHV0X2RpciwgaWRlbnRpZmllcikKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmls
ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5wbGF0Zm9ybWluZm9fbW9jayBpbXBvcnQgTW9ja1BsYXRmb3JtSW5mbwogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKIAot
ZnJvbSAucHJvZmlsZXIgaW1wb3J0IFByb2ZpbGVyRmFjdG9yeSwgR29vZ2xlUFByb2YKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5wcm9maWxlciBpbXBvcnQgUHJvZmlsZXJGYWN0b3J5LCBH
b29nbGVQUHJvZgogCiAKIGNsYXNzIFByb2ZpbGVyRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0YWNrX3V0
aWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9zdGFja191dGlsc191bml0dGVzdC5weQkocmV2aXNpb24gMjQ5OTU0KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0YWNrX3V0aWxzX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBAIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgc3RhY2sKIAogCiBkZWYgY3VycmVudF90aHJlYWRfaWQoKToKLSAgICB0
aHJlYWRfaWQsIF8gPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgIHJldHVy
biB0aHJlYWRfaWQKKyAgICBmb3IgdGhyZWFkX2lkIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5r
ZXlzKCk6CisgICAgICAgIHJldHVybiB0aHJlYWRfaWQKKyAgICByZXR1cm4gTm9uZQogCiAKIGNs
YXNzIFN0YWNrVXRpbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CShyZXZpc2lv
biAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVt
aG9zdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbXBvcnQgb3MKIGltcG9y
dCBwbGF0Zm9ybQogaW1wb3J0IHN5cwogCi1mcm9tIC4gaW1wb3J0IGVudmlyb25tZW50LCBleGVj
dXRpdmUsIGZpbGVfbG9jaywgZmlsZXN5c3RlbSwgcGxhdGZvcm1pbmZvLCB1c2VyLCB3b3Jrc3Bh
Y2UKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZW52aXJvbm1lbnQsIGV4ZWN1
dGl2ZSwgZmlsZV9sb2NrLCBmaWxlc3lzdGVtLCBwbGF0Zm9ybWluZm8sIHVzZXIsIHdvcmtzcGFj
ZQogCiAKIGNsYXNzIFN5c3RlbUhvc3Qob2JqZWN0KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyLnB5CShyZXZpc2lvbiAyNDk5
NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5w
eQkobm9uZXhpc3RlbnQpCkBAIC0xLDU1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJX
cmFwcGVyIG1vZHVsZSBmb3IgZmV0Y2hpbmcgVVJMcy4iIiIKLQotaW1wb3J0IHVybGxpYgotCi0K
LWNsYXNzIFVybEZldGNoZXIob2JqZWN0KToKLSAgICAiIiJDbGFzcyB3aXRoIHJlc3RyaWN0ZWQg
aW50ZXJmYWNlIHRvIGZldGNoIFVSTHMgKG1ha2VzIHRlc3RpbmcgZWFzaWVyKSIiIgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtKToKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9
IGZpbGVzeXN0ZW0KLQotICAgIGRlZiBmZXRjaChzZWxmLCB1cmwpOgotICAgICAgICAiIiJGZXRj
aGVzIHRoZSBjb250ZW50cyBvZiB0aGUgVVJMIGFzIGEgc3RyaW5nLiIiIgotICAgICAgICBmaWxl
X29iamVjdCA9IHVybGxpYi51cmxvcGVuKHVybCkKLSAgICAgICAgY29udGVudCA9IGZpbGVfb2Jq
ZWN0LnJlYWQoKQotICAgICAgICBmaWxlX29iamVjdC5jbG9zZSgpCi0gICAgICAgIHJldHVybiBj
b250ZW50Ci0KLSAgICBkZWYgZmV0Y2hfaW50b19maWxlKHNlbGYsIHVybCk6Ci0gICAgICAgICIi
IkZldGNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVUkwgaW50byBhIHRlbXBvcmFyeSBmaWxlIGFu
ZCByZXR1cm4gdGhlIGZpbGVuYW1lLgotCi0gICAgICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQg
b2YgdXJsbGliLnJldHJpZXZlKCkgZXhjZXB0IHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGFueSBoZWFk
ZXJzLgotICAgICAgICAiIiIKLSAgICAgICAgZmlsZV9vYmplY3QsIGZpbGVuYW1lID0gc2VsZi5f
ZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV90ZW1wZmlsZSgnLWZldGNoZWQnKQotICAgICAgICBjb250
ZW50cyA9IHNlbGYuZmV0Y2godXJsKQotICAgICAgICBmaWxlX29iamVjdC53cml0ZShjb250ZW50
cykKLSAgICAgICAgZmlsZV9vYmplY3QuY2xvc2UoKQotICAgICAgICByZXR1cm4gZmlsZW5hbWUK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyX21v
Y2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3VybGZldGNoZXJfbW9jay5weQkocmV2aXNpb24gMjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9jay5weQkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMK
LSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMg
ZGlzdHJpYnV0aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLWRlZiBtYWtlX2ZldGNoZXJfY2xzKHVy
bHMpOgotICAgICIiIlVybEZldGNoZXIgZmFjdG9yeSByb3V0aW5lIHRoYXQgc2ltdWxhdGVzIG5l
dHdvcmsgYWNjZXNzCi0gICAgdXNpbmcgYSBkaWN0IG9mIFVSTHMgLT4gY29udGVudHMuIiIiCi0g
ICAgY2xhc3MgTW9ja0ZldGNoZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGZpbGVzeXN0ZW0pOgotICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0K
LQotICAgICAgICBkZWYgZmV0Y2goc2VsZiwgdXJsKToKLSAgICAgICAgICAgIHJldHVybiB1cmxz
W3VybF0KLQotICAgICAgICBkZWYgZmV0Y2hfaW50b19maWxlKHNlbGYsIHVybCk6Ci0gICAgICAg
ICAgICBmLCBmbiA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9iaW5hcnlfdGVtcGZpbGUoJ21vY2tm
ZXRjaGVyJykKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5mZXRjaCh1cmwpKQotICAgICAgICAg
ICAgZi5jbG9zZSgpCi0gICAgICAgICAgICByZXR1cm4gZm4KLQotICAgIHJldHVybiBNb2NrRmV0
Y2hlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIu
cHkJKHJldmlzaW9uIDI0OTk1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS91c2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGltcG9ydCBzeXMK
IGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgd2ViYnJvd3NlcgogCi1mcm9tIC5leGVjdXRpdmUg
aW1wb3J0IEV4ZWN1dGl2ZQotZnJvbSAucGxhdGZvcm1pbmZvIGltcG9ydCBQbGF0Zm9ybUluZm8K
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBsYXRmb3JtaW5mbyBpbXBvcnQgUGxhdGZvcm1J
bmZvCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTAsNiArNTAs
MTEgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAjIFRoZXJlIGlzIG5vIHJlYWRsaW5l
IG1vZHVsZSBmb3Igd2luMzIsIG5vdCBtdWNoIHRvIGRvIGV4Y2VwdCBjcnkuCiAgICAgICAgIF9s
b2cud2FybigiVW5hYmxlIHRvIGltcG9ydCByZWFkbGluZS4iKQogCitpZiBzeXMudmVyc2lvbl9p
bmZvID4gKDMsIDApOgorICAgIGlucHV0X2Z1bmMgPSBpbnB1dAorZWxzZToKKyAgICBpbnB1dF9m
dW5jID0gcmF3X2lucHV0CisKIAogY2xhc3MgVXNlcihvYmplY3QpOgogICAgIERFRkFVTFRfTk8g
PSAnbicKQEAgLTYyLDcgKzY3LDcgQEAgY2xhc3MgVXNlcihvYmplY3QpOgogCiAgICAgIyBGSVhN
RTogVGhlc2UgYXJlIEBjbGFzc21ldGhvZHMgYmVjYXVzZSBidWd6aWxsYS5weSBkb2Vzbid0IGhh
dmUgYSBUb29sIG9iamVjdCAodGh1cyBubyBVc2VyIGluc3RhbmNlKS4KICAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgcHJvbXB0KGNscywgbWVzc2FnZSwgcmVwZWF0PTEsIHJhd19pbnB1dD1yYXdf
aW5wdXQpOgorICAgIGRlZiBwcm9tcHQoY2xzLCBtZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lucHV0
PWlucHV0X2Z1bmMpOgogICAgICAgICByZXNwb25zZSA9IE5vbmUKICAgICAgICAgd2hpbGUgKHJl
cGVhdCBhbmQgbm90IHJlc3BvbnNlKToKICAgICAgICAgICAgIHJlcGVhdCAtPSAxCkBAIC03NCw3
ICs3OSw3IEBAIGNsYXNzIFVzZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGNscy5wcm9tcHQo
bWVzc2FnZSwgcmVwZWF0PXJlcGVhdCwgcmF3X2lucHV0PWdldHBhc3MuZ2V0cGFzcykKIAogICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBwcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyhjbHMsIGxp
c3RfdGl0bGUsIHN1YnRpdGxlcywgbGlzdHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJh
d19pbnB1dD1yYXdfaW5wdXQpOgorICAgIGRlZiBwcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyhj
bHMsIGxpc3RfdGl0bGUsIHN1YnRpdGxlcywgbGlzdHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFs
c2UsIHJhd19pbnB1dD1pbnB1dF9mdW5jKToKICAgICAgICAgaXRlbV9pbmRleCA9IDAKICAgICAg
ICAgY3VtdWxhdGVkX2xpc3QgPSBbXQogICAgICAgICBwcmludChsaXN0X3RpdGxlKQpAQCAtMTE0
LDcgKzExOSw3IEBAIGNsYXNzIFVzZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1cm4g
bGlzdF9pdGVtc1tyZXN1bHRdCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcHJvbXB0X3dp
dGhfbGlzdChjbHMsIGxpc3RfdGl0bGUsIGxpc3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9
RmFsc2UsIHJhd19pbnB1dD1yYXdfaW5wdXQpOgorICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0KGNs
cywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3
X2lucHV0PWlucHV0X2Z1bmMpOgogICAgICAgICBwcmludChsaXN0X3RpdGxlKQogICAgICAgICBp
ID0gMAogICAgICAgICBmb3IgaXRlbSBpbiBsaXN0X2l0ZW1zOgpAQCAtMTU2LDcgKzE2MSw3IEBA
IGNsYXNzIFVzZXIob2JqZWN0KToKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAg
ICAgICAgIHBhc3MKIAotICAgIGRlZiBjb25maXJtKHNlbGYsIG1lc3NhZ2U9Tm9uZSwgZGVmYXVs
dD1ERUZBVUxUX1lFUywgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgZGVmIGNvbmZpcm0oc2Vs
ZiwgbWVzc2FnZT1Ob25lLCBkZWZhdWx0PURFRkFVTFRfWUVTLCByYXdfaW5wdXQ9aW5wdXRfZnVu
Yyk6CiAgICAgICAgIGlmIG5vdCBtZXNzYWdlOgogICAgICAgICAgICAgbWVzc2FnZSA9ICJDb250
aW51ZT8iCiAgICAgICAgIGNob2ljZSA9IHsneSc6ICdZL24nLCAnbic6ICd5L04nfVtkZWZhdWx0
XQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfbW9jay5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNl
cl9tb2NrLnB5CShyZXZpc2lvbiAyNDk5NTQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vdXNlcl9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOCArMjcsMjQg
QEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKIAogX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCitpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMs
IDApOgorICAgIGlucHV0X2Z1bmMgPSBpbnB1dAorZWxzZToKKyAgICBpbnB1dF9mdW5jID0gcmF3
X2lucHV0CisKIAogY2xhc3MgTW9ja1VzZXIob2JqZWN0KToKIAogICAgIEBjbGFzc21ldGhvZAot
ICAgIGRlZiBwcm9tcHQoY2xzLCBtZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lucHV0PXJhd19pbnB1
dCk6CisgICAgZGVmIHByb21wdChjbHMsIG1lc3NhZ2UsIHJlcGVhdD0xLCByYXdfaW5wdXQ9aW5w
dXRfZnVuYyk6CiAgICAgICAgIHJldHVybiAiTW9jayB1c2VyIHJlc3BvbnNlIgogCiAgICAgQGNs
YXNzbWV0aG9kCi0gICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0
X2l0ZW1zLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lucHV0KToK
KyAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUsIGxpc3RfaXRlbXMsIGNh
bl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1pbnB1dF9mdW5jKToKICAgICAgICAg
cGFzcwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9fX2luaXRfXy5weQkocmV2aXNpb24gMjQ5OTU0KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBA
CiAKICIiIlBvcnQtc3BlY2lmaWMgZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMgdGVz
dCBpbmZyYXN0cnVjdHVyZS4iIiIKIAotaW1wb3J0IGJ1aWxkZXJzICAjIFdoeSBpcyB0aGlzIGlu
IHBvcnQ/CitpbXBvcnQgd2Via2l0cHkucG9ydC5idWlsZGVycyAgIyBXaHkgaXMgdGhpcyBpbiBw
b3J0PwogCi1mcm9tIGJhc2UgaW1wb3J0IFBvcnQgICMgSXQncyBwb3NzaWJsZSB3ZSBkb24ndCBu
ZWVkIHRvIGV4cG9ydCB0aGlzIHZpcnR1YWwgYmFzZWNsYXNzIG91dHNpZGUgdGhlIG1vZHVsZS4K
LWZyb20gZHJpdmVyIGltcG9ydCBEcml2ZXIsIERyaXZlcklucHV0LCBEcml2ZXJPdXRwdXQKLWZy
b20gZmFjdG9yeSBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25z
Citmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydCAgIyBJdCdzIHBvc3NpYmxlIHdl
IGRvbid0IG5lZWQgdG8gZXhwb3J0IHRoaXMgdmlydHVhbCBiYXNlY2xhc3Mgb3V0c2lkZSB0aGUg
bW9kdWxlLgorZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyLCBEcml2ZXJJ
bnB1dCwgRHJpdmVyT3V0cHV0Citmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgcGxh
dGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379382</attachid>
            <date>2019-09-23 11:42:32 -0700</date>
            <delta_ts>2019-09-24 13:34:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201826-20190923114232.patch</filename>
            <type>text/plain</type>
            <size>74294</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDI0NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzOCBAQAorMjAxOS0wOS0yMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MTgyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5OgorICAgICAgICAo
c2V0X3Jldmlld2VyKToKKyAgICAgICAgKHNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3Vy
bCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQu
cHk6CisgICAgICAgIChDaGVja291dC5fbGF0ZXN0X2VudHJ5X2Zvcl9jaGFuZ2Vsb2dfYXRfcmV2
aXNpb24pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0
ZXJzLnB5OgorICAgICAgICAoQ29tbWl0dGVyTGlzdC5sb2FkX2pzb24pOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6CisgICAgICAg
IChOZXR3b3JrVHJhbnNhY3Rpb24ucnVuKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHk6CisgICAgICAgIChBYnN0cmFjdEV4ZWN1
dGl2ZS5jb21tYW5kX2Zvcl9wcmludGluZyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRfdW5pdHRlc3QucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weToKKyAgICAgICAgKEV4
ZWN1dGl2ZS5XcmFwcGVkUG9wZW4pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBwZWRQb3Blbi5f
X2luaXRfXyk6CisgICAgICAgIChFeGVjdXRpdmUuV3JhcHBlZFBvcGVuLl9fZW50ZXJfXyk6Cisg
ICAgICAgIChFeGVjdXRpdmUuV3JhcHBlZFBvcGVuLl9fZXhpdF9fKToKKyAgICAgICAgKEV4ZWN1
dGl2ZS5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dCk6CisgICAgICAgIChFeGVjdXRpdmUu
cnVuX2FuZF90aHJvd19pZl9mYWlsKToKKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5uaW5nX3BpZHMp
OgorICAgICAgICAoRXhlY3V0aXZlLl9jb21wdXRlX3N0ZGluKToKKyAgICAgICAgKEV4ZWN1dGl2
ZS5ydW5fY29tbWFuZCk6CisgICAgICAgIChFeGVjdXRpdmUucG9wZW4pOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToKKyAgICAgICAg
KE1vY2tQcm9jZXNzLl9faW5pdF9fKToKKyAgICAgICAgKE1vY2tQcm9jZXNzLl9fZW50ZXJfXyk6
CisgICAgICAgIChNb2NrUHJvY2Vzcyk6CisgICAgICAgIChNb2NrUHJvY2Vzcy5fX2V4aXRfXyk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0
dGVzdC5weToKKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3QudGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdz
KToKKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3QudGVzdF9wb3Blbl9hcmdzKToKKyAgICAgICAgKEV4
ZWN1dGl2ZVRlc3Quc2VyaWFsX3Rlc3Rfa2lsbF9wcm9jZXNzKToKKyAgICAgICAgKEV4ZWN1dGl2
ZVRlc3Quc2VyaWFsX3Rlc3Rfa2lsbF9hbGwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAoRmlsZVN5c3RlbS5yZWFkX2Jp
bmFyeV9maWxlKToKKyAgICAgICAgKEZpbGVTeXN0ZW0ud3JpdGVfYmluYXJ5X2ZpbGUpOgorICAg
ICAgICAoRmlsZVN5c3RlbS53cml0ZV90ZXh0X2ZpbGUpOgorICAgICAgICAoRmlsZVN5c3RlbS5y
ZWxwYXRoKToKKyAgICAgICAgKEZpbGVTeXN0ZW0ucmVtb3ZlKToKKyAgICAgICAgKEZpbGVTeXN0
ZW0uX1dpbmRvd3NFcnJvcik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weToKKyAgICAgICAgKE1vY2tGaWxlU3lzdGVt
Lmdsb2IpOgorICAgICAgICAoV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0Ll9faW5pdF9fKToKKyAg
ICAgICAgKFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC53cml0ZSk6CisgICAgICAgIChSZWFkYWJs
ZVRleHRGaWxlT2JqZWN0Ll9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTW9ja0Zp
bGVTeXN0ZW1UZXN0LnRlc3Rfbm9ybXBhdGgpOgorICAgICAgICAoTW9ja0ZpbGVTeXN0ZW1UZXN0
LnRlc3RfZGlyc191bmRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHk6CisgICAgICAgIChSZWFsRmlsZVN5c3RlbVRlc3Qu
dGVzdF9yZWFkX2FuZF93cml0ZV9maWxlKToKKyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50
ZXN0X3JlbW92ZV9maWxlX3dpdGhfcmV0cnkucmVtb3ZlX3dpdGhfZXhjZXB0aW9uKToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0dGVlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoU2ltcGxlVGVlVGVzdC50ZXN0X3NpbXBsZV90ZWUpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wYXRoLnB5OgorICAgICAgICAoX2VzY2Fw
ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGUucHk6
CisgICAgICAgIChfcGFyc2VfcGVtX2Zvcm1hdC5maW5kX2VuZCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAg
KFBsYXRmb3JtSW5mby50b3RhbF9ieXRlc19tZW1vcnkpOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHk6CisgICAgICAgIChU
ZXN0UGxhdGZvcm1JbmZvLnRlc3RfcmVhbF9jb2RlKToKKyAgICAgICAgKFRlc3RQbGF0Zm9ybUlu
Zm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9wcm9maWxlci5weToKKyAgICAgICAgKFByb2ZpbGVyRmFjdG9yeS5jcmVhdGVfcHJv
ZmlsZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxl
cl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
c3RhY2tfdXRpbHNfdW5pdHRlc3QucHk6CisgICAgICAgIChjdXJyZW50X3RocmVhZF9pZCk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXIucHk6IFJl
bW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNo
ZXJfbW9jay5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlci5weToKKyAgICAgICAgKFVzZXIucHJvbXB0KToKKyAgICAgICAgKFVzZXIucHJv
bXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMpOgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0aF9saXN0
KToKKyAgICAgICAgKFVzZXIuY29uZmlybSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3VzZXJfbW9jay5weToKKyAgICAgICAgKE1vY2tVc2VyLnByb21wdCk6Cisg
ICAgICAgIChNb2NrVXNlci5wcm9tcHRfd2l0aF9saXN0KToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5mcm9tX2l0ZXJhYmxl
KToKKyAgICAgICAgKFZlcnNpb24uZnJvbV9uYW1lKToKKyAgICAgICAgKFZlcnNpb24uX19jb250
YWluc19fKToKKyAgICAgICAgKFZlcnNpb24uX19zdHJfXyk6CisgICAgICAgIChWZXJzaW9uLl9f
Y21wX18pOgorICAgICAgICAoVmVyc2lvbik6CisgICAgICAgIChWZXJzaW9uLl9fZXFfXyk6Cisg
ICAgICAgIChWZXJzaW9uLl9fbmVfXyk6CisgICAgICAgIChWZXJzaW9uLl9fbHRfXyk6CisgICAg
ICAgIChWZXJzaW9uLl9fbGVfXyk6CisgICAgICAgIChWZXJzaW9uLl9fZ3RfXyk6CisgICAgICAg
IChWZXJzaW9uLl9fZ2VfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcC5weToKKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9hdXRvbWFwX3RvX21h
am9yX3ZlcnNpb24pOgorICAgICAgICAoVmVyc2lvbk5hbWVNYXAudG9fbmFtZSk6CisgICAgICAg
IChWZXJzaW9uTmFtZU1hcC5mcm9tX25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weToKKyAgICAgICAgKFdhdmVEaWZmLl9faW5pdF9fKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvX19pbml0X18ucHk6CisgICAgICAgIChv
dXRzaWRlKToKKworMjAxOS0wOS0yMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MTgyNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTU0NTI2NzE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGNvbXBhdGliaWxpdHkgYnkg
cnVubmluZyAncHl0aG9uMyAtbSB1bml0dGVzdCB3ZWJraXRweS5jb21tb24uc3lzdGVtLjxfdW5p
dHRlc3Q+JyBvbgorICAgICAgICBlYWNoIG9mIHRoZSBlZmZlY3RlZCBmaWxlcy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weTogSW1wb3J0
IFN0cmluZ0lPIGZyb20gaW8gbW9kdWxlLgorICAgICAgICAoc2V0X3Jldmlld2VyKToKKyAgICAg
ICAgKHNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3VybCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQucHk6ICBJbXBvcnQgU3RyaW5nSU8g
ZnJvbSBpbyBtb2R1bGUuCisgICAgICAgIChDaGVja291dC5fbGF0ZXN0X2VudHJ5X2Zvcl9jaGFu
Z2Vsb2dfYXRfcmV2aXNpb24pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzLnB5OgorICAgICAgICAoQ29tbWl0dGVyTGlzdC5sb2FkX2pzb24pOiBp
dGVyaXRlbXMgLT4gaXRlbXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0
L25ldHdvcmt0cmFuc2FjdGlvbi5weToKKyAgICAgICAgKE5ldHdvcmtUcmFuc2FjdGlvbi5ydW4p
OiB1cmxsaWIyIGlzIHVybGxpYiBpbiBQeXRob24zLiAKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHk6CisgICAgICAgIChBYnN0cmFj
dEV4ZWN1dGl2ZS5fc3RyaW5naWZ5X2FyZ3MpOgorICAgICAgICAoQWJzdHJhY3RFeGVjdXRpdmUu
Y29tbWFuZF9mb3JfcHJpbnRpbmcpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24z
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5p
dHRlc3QucHk6IEV4cGxpY2l0bHkgZW5jb2RlIGFuZCBkZWNvZGUgYmluYXJ5IGNyYXNobG9ncy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRfdW5p
dHRlc3QucHk6IFVzZSBhYnNvbHV0ZSBpbXBvcnRzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHk6CisgICAgICAgIChTY3JpcHRFcnJvci5tZXNz
YWdlX3dpdGhfb3V0cHV0KTogVGhlIHN0ciB0eXBlIGlzIHVuaWNvZGUgaW4gUHl0aG9uMy4KKyAg
ICAgICAgKEV4ZWN1dGl2ZS5XcmFwcGVkUG9wZW4pOiBQeXRob24zJ3MgUG9wZW4gb2JqZWN0IGlz
IGEgY29udGV4dCBtYW5hZ2VyLiBUbyBhbGxvdyB1cyB0byB1c2UgaXQgYXMgb25lLAorICAgICAg
ICBvdXIgUHl0aG9uMiBQb3BlbiBuZWVkcyB0byBiZSBvbmUgYXMgd2VsbC4KKyAgICAgICAgKEV4
ZWN1dGl2ZS5XcmFwcGVkUG9wZW4uX19pbml0X18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBw
ZWRQb3Blbi5fX2VudGVyX18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBwZWRQb3Blbi5fX2V4
aXRfXyk6CisgICAgICAgIChFeGVjdXRpdmUuX3J1bl9jb21tYW5kX3dpdGhfdGVlZF9vdXRwdXQp
OiBTaW1wbGlmeSBsb29wLCBkZWNvZGUgdW5pY29kZSBzdHJpbmdzLgorICAgICAgICAoRXhlY3V0
aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbCk6IFRoZSBjaGlsZCBvdXRwdXQgZmlsZSBzaG91bGQg
bm90IGJlIHVuaWNvZGUgc3RyaW5ncy4KKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5uaW5nX3BpZHMp
OiBVc2UgdGhlIFBvcGVuIGNvbnRleHQgbWFuYWdlciB0byBndWFyYW50ZWUgY2xlYW4tdXAuCisg
ICAgICAgIChFeGVjdXRpdmUuX2NvbXB1dGVfc3RkaW4pOgorICAgICAgICAoRXhlY3V0aXZlLnJ1
bl9jb21tYW5kKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1hbmFnZXIgdG8gZ3VhcmFudGVlIGNs
ZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlLl9zdHJpbmdpZnlfYXJncyk6IFRoZSBzdHIgdHlw
ZSBpcyB1bmljb2RlIGluIFB5dGhvbjMuCisgICAgICAgIChFeGVjdXRpdmUucG9wZW4pOiBSZXR1
cm4gYSBjb250ZXh0IG1hbmFnZXIgaWYgdGhlIFBvcGVuIG9iamVjdCBpcyBub3Qgb25lLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToK
KyAgICAgICAgKE1vY2tQcm9jZXNzLl9faW5pdF9fKTogU3RyaW5nSU8gLT4gQnl0ZXNJTy4KKyAg
ICAgICAgKE1vY2tQcm9jZXNzLl9fZW50ZXJfXyk6CisgICAgICAgIChNb2NrUHJvY2Vzcyk6Cisg
ICAgICAgIChNb2NrUHJvY2Vzcy5fX2V4aXRfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weToKKyAgICAgICAgKEV4ZWN1dGl2
ZVRlc3QudGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdzKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1h
bmFnZXIgdG8gZ3VhcmFudGVlIGNsZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlVGVzdC50ZXN0
X3BvcGVuX2FyZ3MpOiBEaXR0by4KKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3Quc2VyaWFsX3Rlc3Rf
a2lsbF9wcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChFeGVjdXRpdmVUZXN0LnNlcmlhbF90ZXN0
X2tpbGxfYWxsKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW0ucHk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUp
OiBVc2UgJ29wZW4nIGluc3RlYWQgb2YgJ2ZpbGUnLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0
ZV9iaW5hcnlfZmlsZSk6IERpdHRvLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0ZV90ZXh0X2Zp
bGUpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24zLiAKKyAgICAgICAgKEZpbGVT
eXN0ZW0ucmVscGF0aCk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlbW92ZSk6IFRoZSBXaW5kb3dz
RXJyb3IgaXMganVzdCBhbnRoZXIgT1NFcnJvciBpbiBQeXRob24zLgorICAgICAgICAoRmlsZVN5
c3RlbS5fV2luZG93c0Vycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAoTW9ja0ZpbGVTeXN0
ZW0uZ2xvYik6IGZpbHRlciByZXR1cm5zIGEgZ2VuZXJhdG9yIGluc3RlYWQgb2YgYSBsaXN0Lgor
ICAgICAgICAoV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0Ll9faW5pdF9fKTogQmluYXJ5IGZpbGVz
IGFyZSBjb21wcmlzZWQgb2YgYnl0ZXMsIG5vdCBzdHJpbmcgaW4gUHl0aG9uMy4KKyAgICAgICAg
KFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC53cml0ZSk6IERpdHRvLgorICAgICAgICAoUmVhZGFi
bGVUZXh0RmlsZU9iamVjdC5fX2luaXRfXyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2tfdW5pdHRlc3QucHk6CisgICAgICAg
IChNb2NrRmlsZVN5c3RlbVRlc3QudGVzdF9ub3JtcGF0aCk6CisgICAgICAgIChNb2NrRmlsZVN5
c3RlbVRlc3QudGVzdF9kaXJzX3VuZGVyKTogYXNzZXJ0RXF1YWxzIC0+IGFzc2VydEVxdWFsLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUmVhbEZpbGVTeXN0ZW1UZXN0LnRlc3RfcmVhZF9hbmRfd3JpdGVf
ZmlsZSk6IEV4cGxpY2l0bHkgZGVmaW5lIGJ5dGUgYXJyYXlzIGluc3RlYWQgb2Ygc3RyaW5ncy4K
KyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50ZXN0X3JlbW92ZV9maWxlX3dpdGhfcmV0cnku
cmVtb3ZlX3dpdGhfZXhjZXB0aW9uKTogVGhlIFdpbmRvd3NFcnJvciBpcyBqdXN0CisgICAgICAg
IGFudGhlciBPU0Vycm9yIGluIFB5dGhvbjMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL291dHB1dHRlZV91bml0dGVzdC5weToKKyAgICAgICAgKFNpbXBsZVRl
ZVRlc3QudGVzdF9zaW1wbGVfdGVlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGF0aC5weToKKyAgICAgICAgKF9lc2NhcGUpOiB1cmxsaWIgbGlicmFyeSBoYXMg
YmVlbiBicm9rZW4gaW50byBwYXJ0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGVtZmlsZS5weToKKyAgICAgICAgKF9wYXJzZV9wZW1fZm9ybWF0LmZpbmRfZW5k
KTogUHl0aG9uMyBkb2VzIG5vdCBkZWZpbmUgYSBtYXhpbnQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBs
YXRmb3JtSW5mby50b3RhbF9ieXRlc19tZW1vcnkpOiBOb3QgJ2xvbmcnIHR5cGUgaW4gUHl0aG9u
My4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X3JlYWxfY29kZSk6
IGFzc2VydE5vdEVxdWFscyAtPiBhc3NlcnROb3RFcXVhbC4KKyAgICAgICAgKFRlc3RQbGF0Zm9y
bUluZm8udGVzdF9kaXNwbGF5X25hbWUpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6CisgICAgICAgIChQcm9maWxlckZhY3Rvcnku
Y3JlYXRlX3Byb2ZpbGVyKTogTWFudWFsbHkgaW1wbGVtZW50IGlmaWx0ZXIuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5OiBVc2Ug
YWJzb2x1dGUgaW1wb3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vc3RhY2tfdXRpbHNfdW5pdHRlc3QucHk6CisgICAgICAgIChjdXJyZW50X3RocmVhZF9pZCk6
IGl0ZW1zKCkgcmV0dXJucyBhIGdlbmVyYXRvciBpbiBQeXRob24zLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5OiBVc2UgYWJzb2x1dGUgaW1w
b3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hl
ci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
dXJsZmV0Y2hlcl9tb2NrLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAoVXNlci5wcm9tcHQpOiBVc2UgYWJzb2x1
dGUgaW1wb3J0cywgcmF3X2lucHV0IC0+IGlucHV0LgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0
aF9tdWx0aXBsZV9saXN0cyk6CisgICAgICAgIChVc2VyLnByb21wdF93aXRoX2xpc3QpOgorICAg
ICAgICAoVXNlci5jb25maXJtKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlcl9tb2NrLnB5OgorICAgICAgICAoTW9ja1VzZXIucHJvbXB0KTogcmF3X2lucHV0
IC0+IGlucHV0LgorICAgICAgICAoTW9ja1VzZXIucHJvbXB0X3dpdGhfbGlzdCk6IERpdHRvLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHk6CisgICAgICAgIChW
ZXJzaW9uLmZyb21faXRlcmFibGUpOiB4cmFuZ2UgLT4gcmFuZ2UuCisgICAgICAgIChWZXJzaW9u
LmZyb21fbmFtZSk6IFVzZSBhYnNvbHV0ZSBpbXBvcnQgcGF0aC4KKyAgICAgICAgKFZlcnNpb24u
X19jb250YWluc19fKTogeHJhbmdlIC0+IHJhbmdlLgorICAgICAgICAoVmVyc2lvbi5fX3N0cl9f
KTogeHJhbmdlIC0+IHJhbmdlLgorICAgICAgICAoVmVyc2lvbi5fX2NtcF9fKTogYW1wIGlzIG5v
IGxvbmdlciBhbiBvcGVyYXRvciBpbiBQeXRob24zLCBidXQgdmVyc2lvbnMgYXJlIGNvbXByaXNl
ZAorICAgICAgICBPZiBpbnRlZ2Vycywgc28gc3VidHJhY3Rpb24gaGFzIHRoZSBzYW1lIGVmZmVj
dC4KKyAgICAgICAgKFZlcnNpb24pOgorICAgICAgICAoVmVyc2lvbi5fX2VxX18pOiBfX2NtcF9f
IG9wZXJhdG9yIGlzIG5vIGxvbmdlciByZXNwZWN0ZWQsIHNvIHdlIG5lZWQgdG8gaW1wbGVtZW50
CisgICAgICAgIGVhY2ggY29tcGFyaXNvbi4KKyAgICAgICAgKFZlcnNpb24uX19uZV9fKTogRGl0
dG8uCisgICAgICAgIChWZXJzaW9uLl9fbHRfXyk6IERpdHRvLgorICAgICAgICAoVmVyc2lvbi5f
X2xlX18pOiBEaXR0by4KKyAgICAgICAgKFZlcnNpb24uX19ndF9fKTogRGl0dG8uCisgICAgICAg
IChWZXJzaW9uLl9fZ2VfXyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3ZlcnNpb25fbmFtZV9tYXAucHk6CisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21h
cF90b19tYWpvcl92ZXJzaW9uKToKKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiB4
cmFuZ2UgLT4gcmFuZ2UuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5mcm9tX25hbWUpOiBpdGVy
aXRlbXMgLT4gaXRlbXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bl9uYW1lX21hcF91bml0dGVzdC5weTogVXNlIGFic29sdXRlIGltcG9ydHMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weTogRGl0dG8uCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHk6CisgICAgICAgIChXYXZl
RGlmZi5fX2luaXRfXyk6IFN0cmluZ0lPIC0+IEJ5dGVzSU8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L19faW5pdF9fLnB5OgorICAgICAgICAob3V0c2lkZSk6CisKIDIwMTktMDkt
MjAgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtFV1Nd
IEpTQyBxdWV1ZXMgc2hvdWxkIHJlLWJ1aWxkIFRvVCBhbmQgY29tcGFyZSByZXN1bHRzIG9uIGJ1
aWxkIGZhaWx1cmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5w
eQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZlcnNpb24o
b2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGZyb21faXRlcmFibGUodmFsKToK
ICAgICAgICAgcmVzdWx0ID0gVmVyc2lvbigpCi0gICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4o
dmFsKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWwpKToKICAgICAgICAgICAgIHJl
c3VsdFtpXSA9IGludCh2YWxbaV0pCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIEBzdGF0
aWNtZXRob2QKICAgICBkZWYgZnJvbV9uYW1lKG5hbWUpOgotICAgICAgICBmcm9tIHZlcnNpb25f
bmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCisgICAgICAgIGZyb20gd2Via2l0cHkuY29t
bW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiAgICAgICAgIHJldHVy
biBWZXJzaW9uTmFtZU1hcC5tYXAoKS5mcm9tX25hbWUobmFtZSlbMV0KIAogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtYWpvcj0wLCBtaW5vcj0wLCB0aW55PTAsIG1pY3JvPTAsIG5hbm89MCk6CkBA
IC05OSw3ICs5OSw3IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKICAgICBkZWYgX19jb250YWlu
c19fKHNlbGYsIHZlcnNpb24pOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJzaW9uLCBW
ZXJzaW9uKQogICAgICAgICBkb2VzX21hdGNoID0gVHJ1ZQotICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UobGVuKHZlcnNpb24pKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZlcnNpb24pKToK
ICAgICAgICAgICAgIGlmIHNlbGZbaV0gIT0gdmVyc2lvbltpXToKICAgICAgICAgICAgICAgICBk
b2VzX21hdGNoID0gRmFsc2UKICAgICAgICAgICAgIGlmIG5vdCBkb2VzX21hdGNoIGFuZCBzZWxm
W2ldICE9IDA6CkBAIC0xMDgsMTggKzEwOCwzNyBAQCBjbGFzcyBWZXJzaW9uKG9iamVjdCk6CiAK
ICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQotICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVu
KHNlbGYpKToKICAgICAgICAgICAgIGlmIHNlbGZbaV06CiAgICAgICAgICAgICAgICAgbGVuX3Rv
X3ByaW50ID0gaSArIDEKICAgICAgICAgcmVzdWx0ID0gc3RyKHNlbGYubWFqb3IpCi0gICAgICAg
IGZvciBpIGluIHhyYW5nZShsZW5fdG9fcHJpbnQgLSAxKToKKyAgICAgICAgZm9yIGkgaW4gcmFu
Z2UobGVuX3RvX3ByaW50IC0gMSk6CiAgICAgICAgICAgICByZXN1bHQgKz0gJy57fScuZm9ybWF0
KHNlbGZbaSArIDFdKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19jbXBfXyhz
ZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIG90aGVyIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1
cm4gMQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKLSAgICAgICAgICAgIGlm
IGNtcChzZWxmW2ldLCBvdGhlcltpXSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxm
W2ldLCBvdGhlcltpXSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYpKToKKyAgICAg
ICAgICAgIGRpZmYgPSBzZWxmW2ldIC0gb3RoZXJbaV0KKyAgICAgICAgICAgIGlmIGRpZmY6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYKICAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBf
X2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA9
PSAwCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X19jbXBfXyhvdGhlcikgIT0gMAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDwgMAorCisgICAgZGVmIF9fbGVfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDw9IDAKKworICAg
IGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90
aGVyKSA+IDAKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4g
c2VsZi5fX2NtcF9fKG90aGVyKSA+PSAwCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwLDEzICs5MCwxMyBAQCBjbGFzcyBWZXJzaW9uTmFtZU1hcChvYmplY3QpOgog
ICAgIGRlZiBfYXV0b21hcF90b19tYWpvcl92ZXJzaW9uKGNscywgcHJlZml4LCBtaW5pbXVtPVZl
cnNpb24oMSksIG1heGltdW09VmVyc2lvbigxKSk6CiAgICAgICAgIHJlc3VsdCA9IHt9CiAgICAg
ICAgIGFzc2VydCBtaW5pbXVtIDw9IG1heGltdW0KLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKCht
YXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1ham9yKToKKyAgICAgICAgZm9yIGkgaW4gcmFu
Z2UoKG1heGltdW0ubWFqb3IgKyAxKSAtIG1pbmltdW0ubWFqb3IpOgogICAgICAgICAgICAgcmVz
dWx0Wyd7fSB7fScuZm9ybWF0KHByZWZpeCwgc3RyKFZlcnNpb24obWluaW11bS5tYWpvciArIGkp
KSldID0gVmVyc2lvbihtaW5pbXVtLm1ham9yICsgaSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAog
CiAgICAgZGVmIHRvX25hbWUoc2VsZiwgdmVyc2lvbiwgcGxhdGZvcm09Tm9uZSwgdGFibGU9UFVC
TElDX1RBQkxFKToKICAgICAgICAgY2xvc2VzdF9tYXRjaCA9IChOb25lLCBOb25lKQotICAgICAg
ICBmb3Igb3NfbmFtZSwgb3NfdmVyc2lvbiBpbiBzZWxmLm1hcHBpbmdfZm9yX3BsYXRmb3JtKHBs
YXRmb3JtLCB0YWJsZSkuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBvc19uYW1lLCBvc192ZXJz
aW9uIGluIHNlbGYubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm0sIHRhYmxlKS5pdGVtcygp
OgogICAgICAgICAgICAgaWYgdmVyc2lvbiA9PSBvc192ZXJzaW9uOgogICAgICAgICAgICAgICAg
IHJldHVybiBvc19uYW1lCiAgICAgICAgICAgICBlbGlmIHZlcnNpb24gaW4gb3NfdmVyc2lvbjoK
QEAgLTEyNiwxNiArMTI2LDE2IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CiAKICAg
ICBkZWYgZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgogICAgICAgICAjIEV4YWN0IG1hdGNoCi0gICAg
ICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZXJpdGVtcygpOgotICAgICAgICAgICAg
Zm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBfLCBt
YXAgaW4gc2VsZi5tYXBwaW5nLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igb3NfbmFtZSwgb3Nf
bWFwIGluIG1hcC5pdGVtcygpOgogICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gb3NfbWFwOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9zX25hbWUsIG9zX21hcFtuYW1lXSkKIAogICAg
ICAgICAjIEl0J3Mgbm90IGFuIGV4YWN0IG1hdGNoLCBsZXQncyB0cnkgdW5pZnlpbmcgZm9ybWF0
dGluZwogICAgICAgICB1bmZvcm1hdHRlZCA9IHNlbGYuc3RyaXBfbmFtZV9mb3JtYXR0aW5nKG5h
bWUpCi0gICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZXJpdGVtcygpOgotICAg
ICAgICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlcml0ZW1zKCk6Ci0gICAgICAg
ICAgICAgICAgZm9yIHZlcnNpb25fbmFtZSwgdmVyc2lvbiBpbiBvc19tYXAuaXRlcml0ZW1zKCk6
CisgICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZW1zKCk6CisgICAgICAgICAg
ICBmb3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVtcygpOgorICAgICAgICAgICAgICAgIGZv
ciB2ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4gb3NfbWFwLml0ZW1zKCk6CiAgICAgICAgICAgICAg
ICAgICAgIGlmIHNlbGYuc3RyaXBfbmFtZV9mb3JtYXR0aW5nKHZlcnNpb25fbmFtZSkgPT0gdW5m
b3JtYXR0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9zX25hbWUsIHZlcnNp
b24pCiAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5w
eQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QCBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhv
c3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0
IFZlcnNpb24KLWZyb20gdmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFw
CiAKIAogY2xhc3MgVmVyc2lvbk1hcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5w
eQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiBpbXBv
cnQgdW5pdHRlc3QKIAotZnJvbSB2ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiAKIAogY2xhc3MgVmVyc2lvblRlc3RDYXNl
KHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3dhdmVkaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3dhdmVkaWZmLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi93YXZlZGlmZi5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTIgKzIwLDEzIEBACiAj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBz
dHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHdhdmUKIAorZnJvbSBp
byBpbXBvcnQgQnl0ZXNJTworCiAKIGNsYXNzIFdhdmVEaWZmKG9iamVjdCk6CiAgICAgX3BhcmFt
TmFtZXMgPSAoJ051bWJlciBvZiBjaGFubmVscycsICdTYW1wbGUgd2lkdGgnLCAnU2FtcGxlIHJh
dGUnLCAnTnVtYmVyIG9mIGZyYW1lcycsICdDb21wcmVzc2lvbiB0eXBlJywgJ0NvbXByZXNzaW9u
IG5hbWUnKQpAQCAtMzcsMTEgKzM4LDExIEBAIGNsYXNzIFdhdmVEaWZmKG9iamVjdCk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoaW4xLCBmaWxlKToKICAgICAgICAgICAgIHdhdmVGaWxlMSA9IHdh
dmUub3BlbihpbjEsICdyYicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3YXZlRmlsZTEg
PSB3YXZlLm9wZW4oU3RyaW5nSU8uU3RyaW5nSU8oaW4xKSwgJ3JiJykKKyAgICAgICAgICAgIHdh
dmVGaWxlMSA9IHdhdmUub3BlbihCeXRlc0lPKGluMSksICdyYicpCiAgICAgICAgIGlmIGlzaW5z
dGFuY2UoaW4yLCBmaWxlKToKICAgICAgICAgICAgIHdhdmVGaWxlMSA9IHdhdmUub3BlbihpbjIs
ICdyYicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3YXZlRmlsZTIgPSB3YXZlLm9wZW4o
U3RyaW5nSU8uU3RyaW5nSU8oaW4yKSwgJ3JiJykKKyAgICAgICAgICAgIHdhdmVGaWxlMiA9IHdh
dmUub3BlbihCeXRlc0lPKGluMiksICdyYicpCiAKICAgICAgICAgcGFyYW1zMSA9IHdhdmVGaWxl
MS5nZXRwYXJhbXMoKQogICAgICAgICBwYXJhbXMyID0gd2F2ZUZpbGUyLmdldHBhcmFtcygpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hh
bmdlbG9nLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwx
NyBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBT
dHJpbmdJTworaW1wb3J0IHN5cwogaW1wb3J0IHRleHR3cmFwCiAKK2Zyb20gaW8gaW1wb3J0IFN0
cmluZ0lPCisKIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJzIGltcG9ydCBD
b21taXR0ZXJMaXN0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBv
cnQgRmlsZVN5c3RlbQogaW1wb3J0IHdlYmtpdHB5LmNvbW1vbi5jb25maWcudXJscyBhcyBjb25m
aWdfdXJscwogCisjIEZJWE1FOiBGaWxlIGhhcyBub3QgYmVlbiBhdWRpdGVkIGZvciBQeXRob24g
MyBjb21wYXRpYmlsaXR5Cit1bmljb2RlID0gc3RyIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywg
MCkgZWxzZSB1bmljb2RlCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIApA
QCAtNDM2LDcgKzQ0MCw3IEBAIGNsYXNzIENoYW5nZUxvZyhvYmplY3QpOgogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQud3JpdGUobGluZSkKICAgICAgICAgICAgICAgICAgICAgaWYgZm91bmRf
YnVnX3VybDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1Z191cmxfbnVtYmVyX29mX2l0
ZW1zID09IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LndyaXRlKCJcbiAg
ICAgICAgUmV2aWV3ZWQgYnkgJXMuXG4iICUgcmV2aWV3ZXIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LndyaXRlKHVuaWNvZGUoIlxuICAgICAgICBSZXZpZXdlZCBieSAlcy5c
biIgJSByZXZpZXdlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICBidWdfdXJsX251bWJlcl9v
Zl9pdGVtcyAtPSAxCiAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmls
ZShzZWxmLnBhdGgsIHJlc3VsdC5nZXR2YWx1ZSgpKQogICAgICAgICBlbHNlOgpAQCAtNDU1LDcg
KzQ1OSw3IEBAIGNsYXNzIENoYW5nZUxvZyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICBs
aW5lID0gc2VsZi5fY2hhbmdlbG9nX2luZGVudCArIHNob3J0X2Rlc2NyaXB0aW9uICsgIlxuIgog
ICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkID09IGJ1Z191cmxfcGxhY2Vob2xkZXI6CiAgICAg
ICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9jaGFuZ2Vsb2dfaW5kZW50ICsgYnVnX3VybCAr
ICJcbiIKLSAgICAgICAgICAgICAgICByZXN1bHQud3JpdGUobGluZSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQud3JpdGUodW5pY29kZShsaW5lKSkKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53
cml0ZV90ZXh0X2ZpbGUoc2VsZi5wYXRoLCByZXN1bHQuZ2V0dmFsdWUoKSkKIAogICAgIGRlZiBk
ZWxldGVfZW50cmllcyhzZWxmLCBudW1fZW50cmllcyk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGVja291dC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGVja291dC5weQkocmV2aXNpb24gMjUw
MjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAog
ZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnIGltcG9ydCB1cmxzCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IENoYW5nZUxvZywgcGFyc2VfYnVnX2lkX2Zy
b21fY2hhbmdlbG9nCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIENoZWNrb3V0KG9iamVjdCk6CiAg
ICAgICAgICMgdGhhdCBDaGFuZ2VMb2cgZmlsZXMgYXJlIHV0Zi04LiAgcGFyc2VfbGF0ZXN0X2Vu
dHJ5X2Zyb21fZmlsZQogICAgICAgICAjIGV4cGVjdHMgYSBmaWxlLWxpa2Ugb2JqZWN0IHdoaWNo
IHZlbmRzIHVuaWNvZGUoKSwgc28gd2UgZGVjb2RlIGhlcmUuCiAgICAgICAgICMgT2xkIHJldmlz
aW9ucyBvZiBTb3VyY2VzL1dlYktpdC93eC9DaGFuZ2VMb2cgaGF2ZSBzb21lIGludmFsaWQgdXRm
OCBjaGFyYWN0ZXJzLgotICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lP
KGNoYW5nZWxvZ19jb250ZW50cy5kZWNvZGUoInV0Zi04IiwgImlnbm9yZSIpKQorICAgICAgICBj
aGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPKGNoYW5nZWxvZ19jb250ZW50cy5kZWNvZGUoInV0Zi04
IiwgImlnbm9yZSIpKQogICAgICAgICByZXR1cm4gQ2hhbmdlTG9nLnBhcnNlX2xhdGVzdF9lbnRy
eV9mcm9tX2ZpbGUoY2hhbmdlbG9nX2ZpbGUpCiAKICAgICBkZWYgY2hhbmdlbG9nX2VudHJpZXNf
Zm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMu
cHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGZyb20g
d2Via2l0cHkuY29tbW9uLmVkaXRkaXN0YW5jZSBpbXBvcnQKIGZyb20gd2Via2l0cHkuY29tbW9u
Lm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZp
bGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIAorIyBGSVhNRTogRmlsZSBoYXMgbm90IGJlZW4g
YXVkaXRlZCBmb3IgUHl0aG9uIDMgY29tcGF0aWJpbGl0eQogCiBjbGFzcyBDb250cmlidXRvcihv
YmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBlbWFpbF9vcl9lbWFpbHMsIGly
Y19uaWNrbmFtZV9vcl9uaWNrbmFtZXM9Tm9uZSwgYWxpYXNfb3JfYWxpYXNlcz1Ob25lLCBleHBl
cnRpc2U9Tm9uZSk6CkBAIC0yMDEsNyArMjAyLDcgQEAgY2xhc3MgQ29tbWl0dGVyTGlzdChvYmpl
Y3QpOgogICAgICAgICBzZWxmLl9jb21taXR0ZXJzID0gW10KICAgICAgICAgc2VsZi5fcmV2aWV3
ZXJzID0gW10KIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBjb250cmlidXRvcnMuaXRlcml0
ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIGNvbnRyaWJ1dG9ycy5pdGVtcygpOgog
ICAgICAgICAgICAgY29udHJpYnV0b3IgPSBOb25lCiAgICAgICAgICAgICBzdGF0dXMgPSBkYXRh
LmdldCgnc3RhdHVzJykKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAicmV2aWV3ZXIiOgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2FjdGlvbi5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29y
a3RyYW5zYWN0aW9uLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw4ICsyNywxMyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5
cwogaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIyCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAo
MywgMCk6CisgICAgZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IEhUVFBFcnJvciwgVVJMRXJyb3IK
K2Vsc2U6CisgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBIVFRQRXJyb3IsIFVSTEVycm9yCiAKIF9s
b2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTEsMTMgKzU2LDEzIEBAIGNs
YXNzIE5ldHdvcmtUcmFuc2FjdGlvbihvYmplY3QpOgogICAgICAgICB3aGlsZSBUcnVlOgogICAg
ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KCkKLSAgICAgICAg
ICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IEhU
VFBFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnRfNDA0X3RvX05v
bmUgYW5kIGUuY29kZSA9PSA0MDQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAg
ICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfZm9yX3RpbWVvdXQoKQogICAgICAgICAgICAgICAg
IF9sb2cud2FybigiUmVjZWl2ZWQgSFRUUCBzdGF0dXMgJXMgbG9hZGluZyBcIiVzXCIuICBSZXRy
eWluZyBpbiAlcyBzZWNvbmRzLi4uIiAlIChlLmNvZGUsIGUuZmlsZW5hbWUsIHNlbGYuX2JhY2tv
ZmZfc2Vjb25kcykpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAoKQotICAgICAgICAgICAg
ZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJv
ciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl90aW1lb3V0KCkKICAgICAg
ICAgICAgICAgICBfbG9nLndhcm4oJ1JlY2VpdmVkIFVSTEVycm9yOiAie30iIHdoaWxlIGxvYWRp
bmcge30uIFJldHJ5aW5nIGluIHt9IHNlY29uZHMuLi4nLmZvcm1hdChlLnJlYXNvbiwgdXJsLCBz
ZWxmLl9iYWNrb2ZmX3NlY29uZHMpKQogICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKCkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9hYnN0cmFjdGV4ZWN1dGl2
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
YWJzdHJhY3RleGVjdXRpdmUucHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9hYnN0cmFjdGV4ZWN1dGl2ZS5weQkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQogCit1bmljb2RlID0gc3RyIGlmIHN5
cy52ZXJzaW9uX2luZm8gPiAoMywgMCkgZWxzZSB1bmljb2RlCiAKIGNsYXNzIEFic3RyYWN0RXhl
Y3V0aXZlKG9iamVjdCk6CiAKQEAgLTEwOSw5ICsxMTAsMTEgQEAgY2xhc3MgQWJzdHJhY3RFeGVj
dXRpdmUob2JqZWN0KToKICAgICAgICAgYXJncyA9IHNlbGYuX3N0cmluZ2lmeV9hcmdzKGFyZ3Mp
CiAgICAgICAgIGVzY2FwZWRfYXJncyA9IFtdCiAgICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCB1bmljb2RlKToKKworICAgICAgICAgICAgaWYg
c3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKSBhbmQgaXNpbnN0YW5jZShhcmcsIHVuaWNvZGUpOgog
ICAgICAgICAgICAgICAgICMgRXNjYXBlIGFueSBub24tYXNjaWkgY2hhcmFjdGVycyBmb3IgZWFz
eSBjb3B5L3Bhc3RlCiAgICAgICAgICAgICAgICAgYXJnID0gYXJnLmVuY29kZSgidW5pY29kZV9l
c2NhcGUiKQorCiAgICAgICAgICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGZpeCBxdW90ZXMg
aGVyZT8KICAgICAgICAgICAgIGVzY2FwZWRfYXJncy5hcHBlbmQoYXJnKQogICAgICAgICByZXR1
cm4gIiAiLmpvaW4oZXNjYXBlZF9hcmdzKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jh
c2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBAIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0KIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QK
LWZyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKICMgTmVlZGVkIHRv
IHN1cHBvcnQgV2luZG93cyBwb3J0IHRlc3RzCiBmcm9tIHdlYmtpdHB5LnBvcnQud2luIGltcG9y
dCBXaW5Qb3J0CkBAIC0yOTgsNiArMjk3LDExIEBAIGNsYXNzIENyYXNoTG9nc1Rlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9jay9MaWJyYXJ5L0xv
Z3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3MjFfcXVh
ZHplbi5jcmFzaCddID0gTm9uZQogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9jay9MaWJy
YXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3
MjJfcXVhZHplbi5jcmFzaCddID0gc2VsZi5vdGhlcl9wcm9jZXNzX21vY2tfY3Jhc2hfcmVwb3J0
CiAgICAgICAgIHNlbGYuZmlsZXNbJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFnbm9zdGlj
UmVwb3J0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcyM19xdWFkemVuLmNyYXNoJ10g
PSBzZWxmLm1pc2Zvcm1hdHRlZF9tb2NrX2NyYXNoX3JlcG9ydAorCisgICAgICAgIGZvciBrZXks
IHZhbHVlIGluIHNlbGYuZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAg
ICAgICAgICAgICAgIHNlbGYuZmlsZXNba2V5XSA9IHZhbHVlLmVuY29kZSgndXRmLTgnKQorCiAg
ICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVtKHNlbGYuZmlsZXMpCiAgICAg
ICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3MoTW9ja1N5c3RlbUhvc3QoZmlsZXN5c3RlbT1zZWxm
LmZpbGVzeXN0ZW0pLCBDcmFzaExvZ3NUZXN0LkRBUldJTl9NT0NLX0NSQVNIX0RJUkVDVE9SWSkK
ICAgICAgICAgbG9ncyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191bmRlcignL1VzZXJzL21vY2sv
TGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzLycpCkBAIC0zMTMsOCArMzE3LDggQEAgY2xh
c3MgQ3Jhc2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGFsbF9sb2dzID0g
Y3Jhc2hfbG9ncy5maW5kX2FsbF9sb2dzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
YWxsX2xvZ3MpLCA4KQogCi0gICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gYWxsX2xvZ3Mu
aXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3Jhc2hfbG9nIGluIHNl
bGYuZmlsZXMudmFsdWVzKCkpCisgICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gYWxsX2xv
Z3MuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmFzaF9sb2cgaW4gW3Zh
bHVlLmRlY29kZSgndXRmLTgnKSBpZiB2YWx1ZSBlbHNlIE5vbmUgZm9yIHZhbHVlIGluIHNlbGYu
ZmlsZXMudmFsdWVzKCldKQogICAgICAgICAgICAgaWYgdGVzdC5zcGxpdCgnLScpWzBdICE9ICdT
YW5kYm94JzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdCA9PSAiVW5rbm93
biIgb3IgaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkgaW4gcmFuZ2UoMjg1MjcsIDI4NTMxKSkKIApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Vudmlyb25tZW50X3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9lbnZpcm9ubWVudF91bml0dGVzdC5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Vudmlyb25tZW50X3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9t
IC5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKIAogCiBjbGFzcyBFbnZpcm9ubWVu
dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
Ci1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBt
dWx0aXByb2Nlc3NpbmcKQEAgLTM3LDExICszNiwxNCBAQCBpbXBvcnQgc3VicHJvY2VzcwogaW1w
b3J0IHN5cwogaW1wb3J0IHRpbWUKIAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8K
KwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmFic3RyYWN0ZXhlY3V0aXZlIGltcG9ydCBB
YnN0cmFjdEV4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dHRlZSBp
bXBvcnQgVGVlCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQordW5pY29k
ZSA9IHN0ciBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApIGVsc2UgdW5pY29kZQogCiAKIGNs
YXNzIFNjcmlwdEVycm9yKEV4Y2VwdGlvbik6CkBAIC04NCw2ICs4NiwxOSBAQCBjbGFzcyBFeGVj
dXRpdmUoQWJzdHJhY3RFeGVjdXRpdmUpOgogICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKICAg
ICBTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAogCisgICAgY2xhc3MgV3JhcHBlZFBvcGVuKG9i
amVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3Blbik6CisgICAgICAgICAgICBm
b3IgYXR0cmlidXRlIGluIGRpcihwb3Blbik6CisgICAgICAgICAgICAgICAgaWYgYXR0cmlidXRl
LnN0YXJ0c3dpdGgoJ19fJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyaWJ1dGUsIGdldGF0dHIocG9wZW4sIGF0dHJpYnV0
ZSkpCisKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmCisKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHNl
bGYud2FpdCgpCisKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYucGlkX3Rv
X3N5c3RlbV9waWQgPSB7fQogICAgICAgICBzZWxmLl9pc19uYXRpdmVfd2luID0gc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpCkBAIC0xMDgsMTggKzEyMywxNiBAQCBjbGFzcyBFeGVjdXRp
dmUoQWJzdHJhY3RFeGVjdXRpdmUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbG9zZV9mZHM9c2VsZi5fc2hvdWxkX2Nsb3NlX2ZkcygpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqKmt3YXJncykKIAotICAgICAgICAjIFVzZSBvdXIgb3duIGN1c3Rv
bSB3YWl0IGxvb3AgYmVjYXVzZSBQb3BlbiBpZ25vcmVzIGEgdGVlJ2QKLSAgICAgICAgIyBzdGRl
cnIvc3Rkb3V0LgotICAgICAgICAjIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIG5vdCB0
byBmbGF0dGVuIG91dHB1dCB0byBzdGRvdXQuCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAg
ICAgICBvdXRwdXRfbGluZSA9IGNoaWxkX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dF9saW5lID09ICIiIGFuZCBjaGlsZF9wcm9jZXNzLnBvbGwoKSAhPSBO
b25lOgotICAgICAgICAgICAgICAgICMgcG9sbCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4g
dGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAgICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRo
b24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZF9wcm9jZXNz
LnBvbGwoKQotICAgICAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgcHJvY2VzcyB3
cm90ZSB0byB1cyBpbiB1dGYtOCwKLSAgICAgICAgICAgICMgc28gbm8gcmUtZW5jb2RpbmcgaXMg
bmVjZXNzYXJ5IGJlZm9yZSB3cml0aW5nIGhlcmUuCi0gICAgICAgICAgICB0ZWVkX291dHB1dC53
cml0ZShvdXRwdXRfbGluZSkKKyAgICAgICAgd2l0aCBjaGlsZF9wcm9jZXNzOgorICAgICAgICAg
ICAgIyBVc2Ugb3VyIG93biBjdXN0b20gd2FpdCBsb29wIGJlY2F1c2UgUG9wZW4gaWdub3JlcyBh
IHRlZSdkCisgICAgICAgICAgICAjIHN0ZGVyci9zdGRvdXQuCisgICAgICAgICAgICAjIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIG5vdCB0byBmbGF0dGVuIG91dHB1dCB0byBzdGRvdXQu
CisgICAgICAgICAgICB3aGlsZSBjaGlsZF9wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAg
ICAgICAgICAgIG91dHB1dF9saW5lID0gY2hpbGRfcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKQor
ICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgICAgICAg
ICAgICAgICAgIHRlZWRfb3V0cHV0LndyaXRlKG91dHB1dF9saW5lLmRlY29kZSgndXRmLTgnKSkK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0ZWVkX291dHB1dC53
cml0ZShvdXRwdXRfbGluZSkKIAogICAgICMgRklYTUU6IFJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQg
bWV0aG9kIGFuZCBtb3ZlIGNhbGxlcnMgdG8gcnVuX2NvbW1hbmQuCiAgICAgIyBGSVhNRTogVGhp
cyBtZXRob2QgaXMgYSBoYWNrIHRvIGFsbG93IHJ1bm5pbmcgY29tbWFuZCB3aGljaCBib3RoCkBA
IC0xMjgsMjEgKzE0MSwyNSBAQCBjbGFzcyBFeGVjdXRpdmUoQWJzdHJhY3RFeGVjdXRpdmUpOgog
ICAgICMgYnV0IHN0aWxsIGhhdmUgdGhlIG91dHB1dCB0byBzdHVmZiBpbnRvIGEgbG9nIGZpbGUu
CiAgICAgZGVmIHJ1bl9hbmRfdGhyb3dfaWZfZmFpbChzZWxmLCBhcmdzLCBxdWlldD1GYWxzZSwg
ZGVjb2RlX291dHB1dD1UcnVlLCAqKmt3YXJncyk6CiAgICAgICAgICMgQ2FjaGUgdGhlIGNoaWxk
J3Mgb3V0cHV0IGxvY2FsbHkgc28gaXQgY2FuIGJlIHVzZWQgZm9yIGVycm9yIHJlcG9ydHMuCi0g
ICAgICAgIGNoaWxkX291dF9maWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjaGls
ZF9vdXRfZmlsZSA9IFN0cmluZ0lPKCkgaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKSBlbHNl
IEJ5dGVzSU8oKQogICAgICAgICB0ZWVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBpZiBx
dWlldDoKLSAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpICAjIEZJ
WE1FOiBEb2VzIHRoaXMgbmVlZCBhbiBlbmNvZGluZz8KLSAgICAgICAgICAgIHRlZV9zdGRvdXQg
PSBkZXZfbnVsbAotICAgICAgICBjaGlsZF9zdGRvdXQgPSBUZWUoY2hpbGRfb3V0X2ZpbGUsIHRl
ZV9zdGRvdXQpCi0gICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX3J1bl9jb21tYW5kX3dpdGhfdGVl
ZF9vdXRwdXQoYXJncywgY2hpbGRfc3Rkb3V0LCAqKmt3YXJncykKLSAgICAgICAgaWYgcXVpZXQ6
Ci0gICAgICAgICAgICBkZXZfbnVsbC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGlmIHF1aWV0OgorICAgICAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5kZXZudWxsLCAi
dyIpICAjIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhbiBlbmNvZGluZz8KKyAgICAgICAgICAgICAg
ICB0ZWVfc3Rkb3V0ID0gZGV2X251bGwKKyAgICAgICAgICAgIGNoaWxkX3N0ZG91dCA9IFRlZShj
aGlsZF9vdXRfZmlsZSwgdGVlX3N0ZG91dCkKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYu
X3J1bl9jb21tYW5kX3dpdGhfdGVlZF9vdXRwdXQoYXJncywgY2hpbGRfc3Rkb3V0LCAqKmt3YXJn
cykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAg
ICAgIGRldl9udWxsLmNsb3NlKCkKIAogICAgICAgICBjaGlsZF9vdXRwdXQgPSBjaGlsZF9vdXRf
ZmlsZS5nZXR2YWx1ZSgpCiAgICAgICAgIGNoaWxkX291dF9maWxlLmNsb3NlKCkKIAotICAgICAg
ICBpZiBkZWNvZGVfb3V0cHV0OgorICAgICAgICBpZiBkZWNvZGVfb3V0cHV0IGFuZCBzeXMudmVy
c2lvbl9pbmZvIDwgKDMsIDApOgogICAgICAgICAgICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0
cHV0LmRlY29kZShzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCisgICAgICAgIGlmIG5v
dCBkZWNvZGVfb3V0cHV0IGFuZCBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgorICAgICAgICAg
ICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0cHV0LmVuY29kZShzZWxmLl9jaGlsZF9wcm9jZXNz
X2VuY29kaW5nKCkpCiAKICAgICAgICAgaWYgZXhpdF9jb2RlOgogICAgICAgICAgICAgcmFpc2Ug
U2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywKQEAgLTI4NiwxNyArMzAzLDE3IEBAIGNsYXNz
IEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgICAgICAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgcHNfcHJvY2VzcyA9IHNlbGYucG9wZW4oWydwcycsICctZW8nLCAncGlkLGNv
bW0nXSwgc3Rkb3V0PXNlbGYuUElQRSwgc3RkZXJyPXNlbGYuUElQRSkKLSAgICAgICAgICAgIHN0
ZG91dCwgXyA9IHBzX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgZm9yIGxpbmUg
aW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgICAgICMgSW4gc29tZSBjYXNlcyB0aGUgbGluZSBjYW4gY29udGFpbiBvbmUgb3IgbW9y
ZQotICAgICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgd2hpdGUtc3BhY2VzLCBzbyBzdHJpcCBp
dCBiZWZvcmUgc3BsaXQuCi0gICAgICAgICAgICAgICAgICAgIHBpZCwgcHJvY2Vzc19uYW1lID0g
bGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgcHJvY2Vz
c19uYW1lX2ZpbHRlcihwcm9jZXNzX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgcnVu
bmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVF
cnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNl
bGYucG9wZW4oWydwcycsICctZW8nLCAncGlkLGNvbW0nXSwgc3Rkb3V0PXNlbGYuUElQRSwgc3Rk
ZXJyPXNlbGYuUElQRSkgYXMgcHNfcHJvY2VzczoKKyAgICAgICAgICAgICAgICBzdGRvdXQsIF8g
PSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBz
dGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAjIEluIHNvbWUgY2FzZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4gb25lIG9y
IG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyB3aGl0ZS1zcGFjZXMsIHNv
IHN0cmlwIGl0IGJlZm9yZSBzcGxpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcHJv
Y2Vzc19uYW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAgICAgICAg
ICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzcwogCiAgICAgICAgIHJldHVybiBzb3J0ZWQocnVubmluZ19waWRzKQogCkBAIC0zNTUs
NyArMzcyLDcgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToKICAgICAgICAg
IyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTI4CiAgICAg
ICAgICMgZm9yIGFuIGV4YW1wbGUgb2YgYSByZWdyZXNpb24gY2F1c2VkIGJ5IHBhc3NpbmcgYSB1
bmljb2RlIHN0cmluZyBkaXJlY3RseS4KICAgICAgICAgIyBGSVhNRTogV2UgbWF5IG5lZWQgdG8g
ZW5jb2RlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoaW5wdXQsIHVuaWNvZGUpOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwg
KDMsIDApIGFuZCBpc2luc3RhbmNlKGlucHV0LCB1bmljb2RlKToKICAgICAgICAgICAgIGlucHV0
ID0gaW5wdXQuZW5jb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKICAgICAgICAg
cmV0dXJuIChzZWxmLlBJUEUsIGlucHV0KQogCkBAIC0zODQsMzMgKzQwMSwzOSBAQCBjbGFzcyBF
eGVjdXRpdmUoQWJzdHJhY3RFeGVjdXRpdmUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjd2Q9Y3dkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9c2VsZi5fc2hvdWxkX2Nsb3NlX2Zkcygp
KQotICAgICAgICBvdXRwdXQgPSBwcm9jZXNzLmNvbW11bmljYXRlKHN0cmluZ190b19jb21tdW5p
Y2F0ZSlbMF0KLQotICAgICAgICAjIHJ1bl9jb21tYW5kIGF1dG9tYXRpY2FsbHkgZGVjb2RlcyB0
byB1bmljb2RlKCkgYW5kIGNvbnZlcnRzIENSTEYgdG8gTEYgdW5sZXNzIGV4cGxpY2l0bHkgdG9s
ZCBub3QgdG8uCi0gICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6Ci0gICAgICAgICAgICBvdXRwdXQg
PSBvdXRwdXQuZGVjb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkucmVwbGFjZSgn
XHJcbicsICdcbicpCi0KLSAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNh
biB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3Jn
L2lzc3VlMTczMTcxNwotICAgICAgICBleGl0X2NvZGUgPSBwcm9jZXNzLndhaXQoKQorICAgICAg
ICB3aXRoIHByb2Nlc3M6CisgICAgICAgICAgICBpZiBub3Qgc3RyaW5nX3RvX2NvbW11bmljYXRl
OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKVswXQorICAg
ICAgICAgICAgZWxpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApIGFuZCBpc2luc3RhbmNlKHN0
cmluZ190b19jb21tdW5pY2F0ZSwgc3RyKToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBwcm9j
ZXNzLmNvbW11bmljYXRlKHN0cmluZ190b19jb21tdW5pY2F0ZS5lbmNvZGUoJ3V0Zi04JykpWzBd
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3MuY29t
bXVuaWNhdGUoc3RyaW5nX3RvX2NvbW11bmljYXRlKVswXQorCisgICAgICAgICAgICAjIHJ1bl9j
b21tYW5kIGF1dG9tYXRpY2FsbHkgZGVjb2RlcyB0byB1bmljb2RlKCkgYW5kIGNvbnZlcnRzIENS
TEYgdG8gTEYgdW5sZXNzIGV4cGxpY2l0bHkgdG9sZCBub3QgdG8uCisgICAgICAgICAgICBpZiBk
ZWNvZGVfb3V0cHV0OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5kZWNvZGUoc2Vs
Zi5fY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKS5yZXBsYWNlKCdcclxuJywgJ1xuJykKKworICAg
ICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9y
IGR1ZSB0bzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3
MTcKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IHByb2Nlc3Mud2FpdCgpCiAKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnIiVzIiB0b29rICUuMmZzJyAlIChzZWxmLmNvbW1hbmRfZm9yX3ByaW50aW5nKGFy
Z3MpLCB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUpKQorICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
IiVzIiB0b29rICUuMmZzJyAlIChzZWxmLmNvbW1hbmRfZm9yX3ByaW50aW5nKGFyZ3MpLCB0aW1l
LnRpbWUoKSAtIHN0YXJ0X3RpbWUpKQogCi0gICAgICAgIGlmIHJldHVybl9leGl0X2NvZGU6Ci0g
ICAgICAgICAgICByZXR1cm4gZXhpdF9jb2RlCisgICAgICAgICAgICBpZiByZXR1cm5fZXhpdF9j
b2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBleGl0X2NvZGUKIAotICAgICAgICBpZiBleGl0
X2NvZGU6Ci0gICAgICAgICAgICBzY3JpcHRfZXJyb3IgPSBTY3JpcHRFcnJvcihzY3JpcHRfYXJn
cz1hcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9jb2Rl
PWV4aXRfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dD1vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dk
KQotCi0gICAgICAgICAgICBpZiBpZ25vcmVfZXJyb3JzOgotICAgICAgICAgICAgICAgIGFzc2Vy
dCBlcnJvcl9oYW5kbGVyIGlzIE5vbmUsICJkb24ndCBzcGVjaWZ5IGVycm9yX2hhbmRsZXIgaWYg
aWdub3JlX2Vycm9ycyBpcyBUcnVlIgotICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBF
eGVjdXRpdmUuaWdub3JlX2Vycm9yCisgICAgICAgICAgICBpZiBleGl0X2NvZGU6CisgICAgICAg
ICAgICAgICAgc2NyaXB0X2Vycm9yID0gU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGU9ZXhpdF9j
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dD1v
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWN3
ZCkKKworICAgICAgICAgICAgICAgIGlmIGlnbm9yZV9lcnJvcnM6CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydCBlcnJvcl9oYW5kbGVyIGlzIE5vbmUsICJkb24ndCBzcGVjaWZ5IGVycm9yX2hh
bmRsZXIgaWYgaWdub3JlX2Vycm9ycyBpcyBUcnVlIgorICAgICAgICAgICAgICAgICAgICBlcnJv
cl9oYW5kbGVyID0gRXhlY3V0aXZlLmlnbm9yZV9lcnJvcgogCi0gICAgICAgICAgICAoZXJyb3Jf
aGFuZGxlciBvciBzZWxmLmRlZmF1bHRfZXJyb3JfaGFuZGxlcikoc2NyaXB0X2Vycm9yKQotICAg
ICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgICAgICAgICAgKGVycm9yX2hhbmRsZXIgb3Igc2Vs
Zi5kZWZhdWx0X2Vycm9yX2hhbmRsZXIpKHNjcmlwdF9lcnJvcikKKyAgICAgICAgICAgIHJldHVy
biBvdXRwdXQKIAogICAgIGRlZiBfY2hpbGRfcHJvY2Vzc19lbmNvZGluZyhzZWxmKToKICAgICAg
ICAgIyBXaW4zMiBQeXRob24gMi54IHVzZXMgQ3JlYXRlUHJvY2Vzc0EgcmF0aGVyIHRoYW4gQ3Jl
YXRlUHJvY2Vzc1cKQEAgLTQ3OCw3ICs1MDEsMTIgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0
RXhlY3V0aXZlKToKICAgICAgICAgICAgIHN0cmluZ19hcmdzID0gYXJncwogICAgICAgICBlbHNl
OgogICAgICAgICAgICAgc3RyaW5nX2FyZ3MgPSBzZWxmLl9zdHJpbmdpZnlfYXJncyhhcmdzKQot
ICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihzdHJpbmdfYXJncywgKiprd2FyZ3MpCisK
KyAgICAgICAgIyBQeXRob24gMyB0cmVhdHMgUG9wZW4gYXMgYSBjb250ZXh0IG1hbmFnZXIsIHdl
IHNob3VsZCBhbGxvdyB0aGlzIGluIFB5dGhvbiAyCisgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nl
c3MuUG9wZW4oc3RyaW5nX2FyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBub3QgY2FsbGFibGUo
Z2V0YXR0cihyZXN1bHQsICJfX2VudGVyX18iLCBOb25lKSkgYW5kIG5vdCBjYWxsYWJsZShnZXRh
dHRyKHJlc3VsdCwgIl9fZXhpdF9fIiwgTm9uZSkpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
V3JhcHBlZFBvcGVuKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIHJ1
bl9pbl9wYXJhbGxlbChzZWxmLCBjb21tYW5kX2xpbmVzX2FuZF9jd2RzLCBwcm9jZXNzZXM9Tm9u
ZSk6CiAgICAgICAgICIiIlJ1bnMgYSBsaXN0IG9mIChjbWRfbGluZSBsaXN0LCBjd2Qgc3RyaW5n
KSB0dXBsZXMgaW4gcGFyYWxsZWwgYW5kIHJldHVybnMgYSBsaXN0IG9mIChyZXRjb2RlLCBzdGRv
dXQsIHN0ZGVycikgdHVwbGVzLiIiIgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQkocmV2aXNpb24gMjUwMjQw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2Nr
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTEgQEAKICMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBv
cwogCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKQEAgLTM4LDkgKzM5LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQogY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2Vs
Ziwgc3Rkb3V0PSdNT0NLIFNURE9VVFxuJywgc3RkZXJyPScnKToKICAgICAgICAgc2VsZi5waWQg
PSA0MgotICAgICAgICBzZWxmLnN0ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKHN0ZG91dCkKLSAg
ICAgICAgc2VsZi5zdGRlcnIgPSBTdHJpbmdJTy5TdHJpbmdJTyhzdGRlcnIpCi0gICAgICAgIHNl
bGYuc3RkaW4gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gQnl0
ZXNJTyhzdGRvdXQpCisgICAgICAgIHNlbGYuc3RkZXJyID0gQnl0ZXNJTyhzdGRlcnIpCisgICAg
ICAgIHNlbGYuc3RkaW4gPSBCeXRlc0lPKCkKICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMAog
ICAgICAgICBzZWxmLl9pc19ydW5uaW5nID0gRmFsc2UKIApAQCAtNTcsNiArNTgsMTIgQEAgY2xh
c3MgTW9ja1Byb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAg
IHJldHVybiBzZWxmLnJldHVybmNvZGUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAg
ICBzZWxmLndhaXQoKQorCiAKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aCBN
b2NrRXhlY3V0aXZlMgogY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZl
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsMTMgKzExOCwxNSBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICBkZWYgdGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdzKHNlbGYpOgogICAgICAgICBleGVjdXRp
dmUgPSBFeGVjdXRpdmUoKQogICAgICAgICBleGVjdXRpdmUucnVuX2NvbW1hbmQoY29tbWFuZF9s
aW5lKCdlY2hvJywgMSkpCi0gICAgICAgIGV4ZWN1dGl2ZS5wb3Blbihjb21tYW5kX2xpbmUoJ2Vj
aG8nLCAxKSwgc3Rkb3V0PWV4ZWN1dGl2ZS5QSVBFKS53YWl0KCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnZWNobyAxJywgZXhlY3V0aXZlLmNvbW1hbmRfZm9yX3ByaW50aW5nKFsnZWNobycs
IDFdKSkKKyAgICAgICAgd2l0aCBleGVjdXRpdmUucG9wZW4oY29tbWFuZF9saW5lKCdlY2hvJywg
MSksIHN0ZG91dD1leGVjdXRpdmUuUElQRSkgYXMgcHJvY2VzczoKKyAgICAgICAgICAgIHByb2Nl
c3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdlY2hvIDEnLCBleGVjdXRp
dmUuY29tbWFuZF9mb3JfcHJpbnRpbmcoWydlY2hvJywgMV0pKQogCiAgICAgZGVmIHRlc3RfcG9w
ZW5fYXJncyhzZWxmKToKICAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKICAgICAgICAg
IyBFeHBsaWNpdGx5IG5hbWluZyB0aGUgJ2FyZ3MnIGFyZ3VtZW50IHNob3VsZCBub3QgdGhvdyBh
biBleGNlcHRpb24uCi0gICAgICAgIGV4ZWN1dGl2ZS5wb3BlbihhcmdzPWNvbW1hbmRfbGluZSgn
ZWNobycsIDEpLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUpLndhaXQoKQorICAgICAgICB3aXRoIGV4
ZWN1dGl2ZS5wb3BlbihhcmdzPWNvbW1hbmRfbGluZSgnZWNobycsIDEpLCBzdGRvdXQ9ZXhlY3V0
aXZlLlBJUEUpIGFzIHByb2Nlc3M6CisgICAgICAgICAgICBwcm9jZXNzLndhaXQoKQogCiAgICAg
ZGVmIHRlc3RfcnVuX2NvbW1hbmRfd2l0aF91bmljb2RlKHNlbGYpOgogICAgICAgICAiIiJWYWxp
ZGF0ZSB0aGF0IGl0IGlzIHNhZmUgdG8gcGFzcyB1bmljb2RlKCkgb2JqZWN0cwpAQCAtMTY3LDQ0
ICsxNjksNDQgQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAg
ICBkZWYgc2VyaWFsX3Rlc3Rfa2lsbF9wcm9jZXNzKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUg
PSBFeGVjdXRpdmUoKQotICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihuZXZlcl9l
bmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHByb2Nlc3MucG9sbCgpLCBOb25lKSAgIyBQcm9jZXNzIGlzIHJ1bm5pbmcKLSAg
ICAgICAgZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhwcm9jZXNzLnBpZCkKLSAgICAgICAgIyBOb3Rl
OiBDYW4ndCB1c2UgYSB0ZXJuYXJ5IHNpbmNlIHNpZ25hbC5TSUdLSUxMIGlzIHVuZGVmaW5lZCBm
b3Igc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0NzkwCi0gICAgICAgICAgICAjIFdlIHNlZW0gdG8gZ2V0IGVp
dGhlciAwIG9yIDEgaGVyZSBmb3Igc29tZSByZWFzb24uCi0gICAgICAgICAgICBzZWxmLmFzc2Vy
dEluKHByb2Nlc3Mud2FpdCgpLCAoMCwgMSkpCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09
ICJjeWd3aW4iOgotICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk4MTk2Ci0gICAgICAgICAgICAjIGN5Z3dpbiBzZWVtcyB0byBnaXZl
IHVzIGVpdGhlciBTSUdBQlJUIG9yIFNJR0tJTEwKLSAgICAgICAgICAgICMgTmF0aXZlIFdpbmRv
d3MgKHZpYSBDeWd3aW4pIHJldHVybnMgRU5PVEJMSyAoLTE1KQotICAgICAgICAgICAgc2VsZi5h
c3NlcnRJbihwcm9jZXNzLndhaXQoKSwgKC1zaWduYWwuU0lHQUJSVCwgLXNpZ25hbC5TSUdLSUxM
LCAtMTUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2RlID0g
LXNpZ25hbC5TSUdURVJNCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Mud2Fp
dCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCisgICAgICAgIHdpdGggZXhlY3V0aXZlLnBvcGVuKG5l
dmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2Nlc3M6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3MucG9sbCgpLCBOb25lKSAgIyBQ
cm9jZXNzIGlzIHJ1bm5pbmcKKyAgICAgICAgICAgIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocHJv
Y2Vzcy5waWQpCisgICAgICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ug
c2lnbmFsLlNJR0tJTEwgaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgor
ICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAg
ICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDc5MAorICAgICAgICAgICAgICAgICMgV2Ugc2VlbSB0byBnZXQgZWl0aGVyIDAgb3IgMSBoZXJl
IGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHByb2Nlc3Mu
d2FpdCgpLCAoMCwgMSkpCisgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2lu
IjoKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTgxOTYKKyAgICAgICAgICAgICAgICAjIGN5Z3dpbiBzZWVtcyB0byBnaXZl
IHVzIGVpdGhlciBTSUdBQlJUIG9yIFNJR0tJTEwKKyAgICAgICAgICAgICAgICAjIE5hdGl2ZSBX
aW5kb3dzICh2aWEgQ3lnd2luKSByZXR1cm5zIEVOT1RCTEsgKC0xNSkKKyAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoLXNpZ25hbC5TSUdBQlJULCAtc2lnbmFs
LlNJR0tJTEwsIC0xNSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2V4aXRfY29kZSA9IC1zaWduYWwuU0lHVEVSTQorICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKIAotICAgICAgICAj
IEtpbGxpbmcgYWdhaW4gc2hvdWxkIGZhaWwgc2lsZW50bHkuCi0gICAgICAgIGV4ZWN1dGl2ZS5r
aWxsX3Byb2Nlc3MocHJvY2Vzcy5waWQpCisgICAgICAgICAgICAjIEtpbGxpbmcgYWdhaW4gc2hv
dWxkIGZhaWwgc2lsZW50bHkuCisgICAgICAgICAgICBleGVjdXRpdmUua2lsbF9wcm9jZXNzKHBy
b2Nlc3MucGlkKQogCiAgICAgZGVmIHNlcmlhbF90ZXN0X2tpbGxfYWxsKHNlbGYpOgogICAgICAg
ICBleGVjdXRpdmUgPSBFeGVjdXRpdmUoKQotICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Q
b3BlbihuZXZlcl9lbmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAg
ICAgICBzZWxmLmFzc2VydElzTm9uZShwcm9jZXNzLnBvbGwoKSkgICMgUHJvY2VzcyBpcyBydW5u
aW5nCi0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZlcl9lbmRpbmdfY29tbWFuZCgpWzBd
KQotICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFsLlNJR1RF
Uk0gaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgotICAgICAgICBpZiBz
eXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6Ci0gICAgICAgICAgICBleHBlY3RlZF9leGl0X2NvZGUg
PSAwICAjIG9zLmtpbGwgcmVzdWx0cyBpbiBleGl0KDApIGZvciB0aGlzIHByb2Nlc3MuCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Mud2FpdCgpLCBleHBlY3RlZF9leGl0X2Nv
ZGUpCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAg
ICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0
NzkwCi0gICAgICAgICAgICAjIFdlIHNlZW0gdG8gZ2V0IGVpdGhlciAwIG9yIDEgaGVyZSBmb3Ig
c29tZSByZWFzb24uCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAo
MCwgMSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBleHBlY3RlZF9leGl0X2NvZGUgPSAt
c2lnbmFsLlNJR1RFUk0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53YWl0
KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKLSAgICAgICAgIyBLaWxsaW5nIGFnYWluIHNob3VsZCBm
YWlsIHNpbGVudGx5LgotICAgICAgICBleGVjdXRpdmUua2lsbF9hbGwobmV2ZXJfZW5kaW5nX2Nv
bW1hbmQoKVswXSkKKyAgICAgICAgd2l0aCBleGVjdXRpdmUucG9wZW4obmV2ZXJfZW5kaW5nX2Nv
bW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvY2VzczoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0SXNOb25lKHByb2Nlc3MucG9sbCgpKSAgIyBQcm9jZXNzIGlzIHJ1bm5pbmcK
KyAgICAgICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZlcl9lbmRpbmdfY29tbWFuZCgpWzBd
KQorICAgICAgICAgICAgIyBOb3RlOiBDYW4ndCB1c2UgYSB0ZXJuYXJ5IHNpbmNlIHNpZ25hbC5T
SUdURVJNIGlzIHVuZGVmaW5lZCBmb3Igc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIKKyAgICAgICAg
ICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKKyAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9leGl0X2NvZGUgPSAwICAjIG9zLmtpbGwgcmVzdWx0cyBpbiBleGl0KDApIGZvciB0aGlzIHBy
b2Nlc3MuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLndhaXQoKSwg
ZXhwZWN0ZWRfZXhpdF9jb2RlKQorICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRz
d2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NzkwCisgICAgICAgICAgICAgICAgIyBXZSBzZWVtIHRv
IGdldCBlaXRoZXIgMCBvciAxIGhlcmUgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICAgICAgICAg
IHNlbGYuYXNzZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgwLCAxKSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2RlID0gLXNpZ25hbC5TSUdURVJNCisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRf
ZXhpdF9jb2RlKQorICAgICAgICAgICAgIyBLaWxsaW5nIGFnYWluIHNob3VsZCBmYWlsIHNpbGVu
dGx5LgorICAgICAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGluZ19jb21tYW5k
KClbMF0pCiAKICAgICBkZWYgX2Fzc2VydF93aW5kb3dzX2ltYWdlX25hbWUoc2VsZiwgbmFtZSwg
ZXhwZWN0ZWRfd2luZG93c19uYW1lKToKICAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBA
QAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgZXJybm8KLWltcG9ydCBleGNlcHRpb25zCiBpbXBv
cnQgZmlsZWNtcAogaW1wb3J0IGdsb2IKIGltcG9ydCBoYXNobGliCkBAIC0yMjEsMTEgKzIyMCwx
MSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAgICBkZWYgcmVhZF9iaW5hcnlfZmls
ZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgZmls
ZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhcyBhIGJ5dGUgc3RyaW5nLiIiIgotICAgICAgICB3aXRoIGZp
bGUocGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGY6
CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKIAogICAgIGRlZiB3cml0ZV9iaW5hcnlfZmls
ZShzZWxmLCBwYXRoLCBjb250ZW50cyk6Ci0gICAgICAgIHdpdGggZmlsZShwYXRoLCAnd2InKSBh
cyBmOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGYu
d3JpdGUoY29udGVudHMpCiAKICAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoc2Vs
ZiwgcGF0aCwgZXJyb3JzPSdzdHJpY3QnKToKQEAgLTI1Niw3ICsyNTUsMTEgQEAgY2xhc3MgRmls
ZVN5c3RlbShvYmplY3QpOgogCiAgICAgICAgIFRoZSBmaWxlIGlzIHdyaXR0ZW4gZW5jb2RlZCBh
cyBVVEYtOCB3aXRoIG5vIEJPTS4iIiIKICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAn
dycsICd1dGYtOCcsIGVycm9ycz1lcnJvcnMpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKGNv
bnRlbnRzLmRlY29kZSgndXRmLTgnLCBlcnJvcnM9ZXJyb3JzKSBpZiB0eXBlKGNvbnRlbnRzKSA9
PSBzdHIgZWxzZSBjb250ZW50cykKKyAgICAgICAgICAgIGlmIChzeXMudmVyc2lvbl9pbmZvID4g
KDMsIDApKToKKyAgICAgICAgICAgICAgICBuZWVkX2VuY29kaW5nID0gYnl0ZXMKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmVlZF9lbmNvZGluZyA9IHN0cgorICAgICAgICAg
ICAgZi53cml0ZShjb250ZW50cy5kZWNvZGUoJ3V0Zi04JywgZXJyb3JzPWVycm9ycykgaWYgdHlw
ZShjb250ZW50cykgPT0gbmVlZF9lbmNvZGluZyBlbHNlIGNvbnRlbnRzKQogCiAgICAgZGVmIHNo
YTEoc2VsZiwgcGF0aCk6CiAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5yZWFkX2JpbmFyeV9maWxl
KHBhdGgpCkBAIC0yNjUsMTkgKzI2OCwxNSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAg
ICAgZGVmIHJlbHBhdGgoc2VsZiwgcGF0aCwgc3RhcnQ9Jy4nKToKICAgICAgICAgcmV0dXJuIG9z
LnBhdGgucmVscGF0aChwYXRoLCBzdGFydCkKIAotICAgIGNsYXNzIF9XaW5kb3dzRXJyb3IoZXhj
ZXB0aW9ucy5PU0Vycm9yKToKLSAgICAgICAgIiIiRmFrZSBleGNlcHRpb24gZm9yIExpbnV4IGFu
ZCBNYWMuIiIiCi0gICAgICAgIHBhc3MKLQogICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0aCwgb3Ny
ZW1vdmU9b3MucmVtb3ZlKToKICAgICAgICAgIiIiT24gV2luZG93cywgaWYgYSBwcm9jZXNzIHdh
cyByZWNlbnRseSBraWxsZWQgYW5kIGl0IGhlbGQgb24gdG8gYQogICAgICAgICBmaWxlLCB0aGUg
T1Mgd2lsbCBob2xkIG9uIHRvIHRoZSBmaWxlIGZvciBhIHNob3J0IHdoaWxlLiAgVGhpcyBtYWtl
cwogICAgICAgICBhdHRlbXB0cyB0byBkZWxldGUgdGhlIGZpbGUgZmFpbC4gIFRvIHdvcmsgYXJv
dW5kIHRoYXQsIHRoaXMgbWV0aG9kCiAgICAgICAgIHdpbGwgcmV0cnkgZm9yIGEgZmV3IHNlY29u
ZHMgdW50aWwgV2luZG93cyBpcyBkb25lIHdpdGggdGhlIGZpbGUuIiIiCiAgICAgICAgIHRyeToK
LSAgICAgICAgICAgIGV4Y2VwdGlvbnMuV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBBdHRy
aWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbnMuV2luZG93c0Vycm9yID0gRmlsZVN5
c3RlbS5fV2luZG93c0Vycm9yCisgICAgICAgICAgICBXaW5PU0Vycm9yID0gV2luZG93c0Vycm9y
CisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBXaW5PU0Vycm9yID0gT1NF
cnJvcgogCiAgICAgICAgIHJldHJ5X3RpbWVvdXRfc2VjID0gMy4wCiAgICAgICAgIHNsZWVwX2lu
dGVydmFsID0gMC4xCkBAIC0yODUsNyArMjg0LDcgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmplY3Qp
OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zcmVtb3ZlKHBhdGgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLldp
bmRvd3NFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IFdpbk9TRXJyb3IgYXMgZToKICAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX2ludGVydmFsKQogICAgICAgICAgICAgICAg
IHJldHJ5X3RpbWVvdXRfc2VjIC09IHNsZWVwX2ludGVydmFsCiAgICAgICAgICAgICAgICAgaWYg
cmV0cnlfdGltZW91dF9zZWMgPCAwOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CShyZXZpc2lvbiAyNTAy
NDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9t
b2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTMgQEAKICMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGVycm5vCiBpbXBvcnQg
aGFzaGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIAorZnJvbSBpbyBpbXBv
cnQgU3RyaW5nSU8KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogCiAK
QEAgLTE4Niw3ICsxODcsNyBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogCiAgICAg
ICAgICMgV2UgY291bGQgdXNlIGZubWF0Y2guZm5tYXRjaCwgYnV0IHRoYXQgbWlnaHQgbm90IGRv
IHRoZSByaWdodCB0aGluZyBvbiB3aW5kb3dzLgogICAgICAgICBleGlzdGluZ19maWxlcyA9IFtw
YXRoIGZvciBwYXRoLCBjb250ZW50cyBpbiBzZWxmLmZpbGVzLml0ZW1zKCkgaWYgY29udGVudHMg
aXMgbm90IE5vbmVdCi0gICAgICAgIHJldHVybiBmaWx0ZXIocGF0aF9maWx0ZXIsIGV4aXN0aW5n
X2ZpbGVzKSArIGZpbHRlcihwYXRoX2ZpbHRlciwgc2VsZi5kaXJzKQorICAgICAgICByZXR1cm4g
bGlzdChmaWx0ZXIocGF0aF9maWx0ZXIsIGV4aXN0aW5nX2ZpbGVzKSkgKyBsaXN0KGZpbHRlcihw
YXRoX2ZpbHRlciwgc2VsZi5kaXJzKSkKIAogICAgIGRlZiBpc2FicyhzZWxmLCBwYXRoKToKICAg
ICAgICAgcmV0dXJuIHBhdGguc3RhcnRzd2l0aChzZWxmLnNlcCkKQEAgLTQ0MSw3ICs0NDIsMTAg
QEAgY2xhc3MgV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0KG9iamVjdCk6CiAgICAgICAgIHNlbGYu
ZnMgPSBmcwogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAgICAgICAgIHNlbGYuY2xvc2VkID0g
RmFsc2UKLSAgICAgICAgc2VsZi5mcy5maWxlc1twYXRoXSA9ICIiCisgICAgICAgIGlmIHN5cy52
ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgICAgICAgICBzZWxmLmZzLmZpbGVzW3BhdGhdID0g
YicnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZzLmZpbGVzW3BhdGhdID0gIiIK
IAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC00NTIs
OCArNDU2LDExIEBAIGNsYXNzIFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdChvYmplY3QpOgogICAg
IGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAKLSAgICBkZWYg
d3JpdGUoc2VsZiwgc3RyKToKLSAgICAgICAgc2VsZi5mcy5maWxlc1tzZWxmLnBhdGhdICs9IHN0
cgorICAgIGRlZiB3cml0ZShzZWxmLCBzdHJpbmcpOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9p
bmZvID4gKDMsIDApIGFuZCBpc2luc3RhbmNlKHN0cmluZywgc3RyKToKKyAgICAgICAgICAgIHNl
bGYuZnMuZmlsZXNbc2VsZi5wYXRoXSArPSBzdHJpbmcuZW5jb2RlKCd1dGYtOCcpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLmZzLmZpbGVzW3NlbGYucGF0aF0gKz0gc3RyaW5nCiAg
ICAgICAgIHNlbGYuZnMud3JpdHRlbl9maWxlc1tzZWxmLnBhdGhdID0gc2VsZi5mcy5maWxlc1tz
ZWxmLnBhdGhdCiAKIApAQCAtNDg5LDcgKzQ5Niw3IEBAIGNsYXNzIFJlYWRhYmxlQmluYXJ5Rmls
ZU9iamVjdChvYmplY3QpOgogCiBjbGFzcyBSZWFkYWJsZVRleHRGaWxlT2JqZWN0KFJlYWRhYmxl
QmluYXJ5RmlsZU9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZzLCBwYXRoLCBkYXRh
KToKLSAgICAgICAgc3VwZXIoUmVhZGFibGVUZXh0RmlsZU9iamVjdCwgc2VsZikuX19pbml0X18o
ZnMsIHBhdGgsIFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEuZGVjb2RlKCJ1dGYtOCIpKSkKKyAgICAg
ICAgc3VwZXIoUmVhZGFibGVUZXh0RmlsZU9iamVjdCwgc2VsZikuX19pbml0X18oZnMsIHBhdGgs
IFN0cmluZ0lPKGRhdGEuZGVjb2RlKCJ1dGYtOCIpKSkKIAogICAgIGRlZiBjbG9zZShzZWxmKToK
ICAgICAgICAgc2VsZi5kYXRhLmNsb3NlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2tfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9ja191bml0
dGVzdC5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9ja191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
NzAsMTggKzcwLDE4IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2EK
ICAgICBkZWYgdGVzdF9ub3JtcGF0aChzZWxmKToKICAgICAgICAgc2VsZi5xdWlja19jaGVjayhz
ZWxmLmZzLm5vcm1wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnMuX3Nsb3df
YnV0X2NvcnJlY3Rfbm9ybXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJycsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJy8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcuJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnLy4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICdmb28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnZm9vLy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vYmFyJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAnL2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zvby8uLi9iYXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vLi4vYmFyL2Jh
eicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy4uL2ZvbycpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgKCcnLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCcvJywpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICgnLicsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJy8u
JywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vJywpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgnZm9vLycsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Zvby8uJywp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vL2JhcicsKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAoJy9mb28nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28vLi4v
YmFyJywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vLy4uL2Jhci9iYXonLCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgKCcuLi9mb28nLCkpCiAKICAgICBkZWYgdGVzdF9kaXJz
X3VuZGVyKHNlbGYpOgogICAgICAgICBGQUtFX0ZJTEVTID0gewpAQCAtOTAsOSArOTAsOSBAQCBj
bGFzcyBNb2NrRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENhCiAgICAgICAgICAgICAnL3Rl
c3RzL3Rlc3QyL3Rlc3QudHh0JzogJ3Rlc3QnfQogICAgICAgICBmcyA9IGZpbGVzeXN0ZW1fbW9j
ay5Nb2NrRmlsZVN5c3RlbShmaWxlcz1GQUtFX0ZJTEVTKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGZzLmRpcnNfdW5kZXIoJy90ZXN0cycpLCBbJy90ZXN0cycsICcvdGVzdHMvdGVzdDIn
LCAnL3Rlc3RzL3Rlc3QzJywgJy90ZXN0cy90ZXN0My90ZXN0MiddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGZzLmRpcnNfdW5kZXIoJy90ZXN0cycpLCBbJy90ZXN0cycsICcvdGVzdHMvdGVz
dDInLCAnL3Rlc3RzL3Rlc3QzJywgJy90ZXN0cy90ZXN0My90ZXN0MiddKQogCiAgICAgICAgIGRl
ZiBmaWx0ZXJfZGlyKGZzLCBkaXJwYXRoKToKICAgICAgICAgICAgIHJldHVybiBmcy5iYXNlbmFt
ZShkaXJwYXRoKSAhPSAndGVzdDInCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuZGly
c191bmRlcignL3Rlc3RzJywgZmlsdGVyX2RpciksIFsnL3Rlc3RzJywgJy90ZXN0cy90ZXN0Mydd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmRpcnNfdW5kZXIoJy90ZXN0cycsIGZpbHRl
cl9kaXIpLCBbJy90ZXN0cycsICcvdGVzdHMvdGVzdDMnXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1m
cm9tIGZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCiAKIAogY2xhc3MgR2VuZXJpY0ZpbGVT
eXN0ZW1UZXN0cyhvYmplY3QpOgpAQCAtMjY3LDkgKzI2Nyw5IEBAIGNsYXNzIFJlYWxGaWxlU3lz
dGVtVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICAgICAgYmluYXJ5X3BhdGggPSBOb25lCiAKICAg
ICAgICAgdW5pY29kZV90ZXh0X3N0cmluZyA9IHUnXHUwMTZBblx1MDEyRGNcdTAxNERkZVx1MDMz
RCcKLSAgICAgICAgaGV4X2VxdWl2YWxlbnQgPSAnXHhDNVx4QUFceDZFXHhDNFx4QURceDYzXHhD
NVx4OERceDY0XHg2NVx4Q0NceEJEJwotICAgICAgICBtYWxmb3JtZWRfdGV4dF9oZXggPSAnXHg0
RFx4NjlceDYzXHg3Mlx4NkZceDczXHg2Rlx4NjZceDc0XHhBRVx4MjBceDU2XHg2OVx4NzNceDc1
XHg2MVx4NkNceDIwXHg1M1x4NzRceDc1XHg2NFx4NjlceDZGXHhBRVx4MjBceDMyXHgzMFx4MzFc
eDMwXHgwRFx4MEEnCi0gICAgICAgIG1hbGZvcm1lZF9pZ25vcmVkX3RleHRfaGV4ID0gJ1x4NERc
eDY5XHg2M1x4NzJceDZGXHg3M1x4NkZceDY2XHg3NFx4MjBceDU2XHg2OVx4NzNceDc1XHg2MVx4
NkNceDIwXHg1M1x4NzRceDc1XHg2NFx4NjlceDZGXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgw
QScKKyAgICAgICAgaGV4X2VxdWl2YWxlbnQgPSBiJ1x4QzVceEFBXHg2RVx4QzRceEFEXHg2M1x4
QzVceDhEXHg2NFx4NjVceENDXHhCRCcKKyAgICAgICAgbWFsZm9ybWVkX3RleHRfaGV4ID0gYidc
eDREXHg2OVx4NjNceDcyXHg2Rlx4NzNceDZGXHg2Nlx4NzRceEFFXHgyMFx4NTZceDY5XHg3M1x4
NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZceEFFXHgyMFx4MzJceDMwXHgz
MVx4MzBceDBEXHgwQScKKyAgICAgICAgbWFsZm9ybWVkX2lnbm9yZWRfdGV4dF9oZXggPSBiJ1x4
NERceDY5XHg2M1x4NzJceDZGXHg3M1x4NkZceDY2XHg3NFx4MjBceDU2XHg2OVx4NzNceDc1XHg2
MVx4NkNceDIwXHg1M1x4NzRceDc1XHg2NFx4NjlceDZGXHgyMFx4MzJceDMwXHgzMVx4MzBceDBE
XHgwQScKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGV4dF9wYXRoID0gdGVtcGZpbGUubWt0
ZW1wKHByZWZpeD0ndHJlZV91bml0dGVzdF8nKQogICAgICAgICAgICAgYmluYXJ5X3BhdGggPSB0
ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3VuaXR0ZXN0XycpCkBAIC0yODUsOCArMjg1LDkg
QEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICAgICAg
ZnMud3JpdGVfYmluYXJ5X2ZpbGUoYmluYXJ5X3BhdGgsIG1hbGZvcm1lZF90ZXh0X2hleCkKICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZzLnJlYWRfdGV4dF9maWxl
LCBiaW5hcnlfcGF0aCkKICAgICAgICAgICAgIHRleHRfY29udGVudHMgPSBmcy5yZWFkX2JpbmFy
eV9maWxlKGJpbmFyeV9wYXRoKS5kZWNvZGUoJ3V0ZjgnLCAnaWdub3JlJykKLSAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHRleHRfY29udGVudHMsIG1hbGZvcm1lZF9pZ25vcmVkX3RleHRf
aGV4KQotICAgICAgICAgICAgZnMub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoYmluYXJ5X3Bh
dGgsICdyZXBsYWNlJykucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0
ZXh0X2NvbnRlbnRzLCBtYWxmb3JtZWRfaWdub3JlZF90ZXh0X2hleC5kZWNvZGUoJ3V0ZjgnLCAn
aWdub3JlJykpCisgICAgICAgICAgICB3aXRoIGZzLm9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5n
KGJpbmFyeV9wYXRoLCAncmVwbGFjZScpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS5y
ZWFkbGluZSgpCiAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHRleHRfcGF0aCBh
bmQgZnMuaXNmaWxlKHRleHRfcGF0aCk6CkBAIC0zMTEsNyArMzEyLDcgQEAgY2xhc3MgUmVhbEZp
bGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICAgICAgICAgIHRyeToKICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCiAgICAgICAgICAgICAgICAgZXhjZXB0
IE5hbWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmlsZVN5c3RlbS5fV2luZG93
c0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogICAgICAgICBmcyA9
IEZpbGVTeXN0ZW0oKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMucmVtb3ZlKCdmaWxlbmFt
ZScsIHJlbW92ZV93aXRoX2V4Y2VwdGlvbikpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQkocmV2aXNpb24gMjUw
MjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1
cmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDExIEBACiBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJ
TworCit0cnk6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8gICMgUHl0aG9uIDIK
K2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyAgIyBQeXRo
b24gMwogCiAKIGNsYXNzIE91dHB1dENhcHR1cmUob2JqZWN0KToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0ZWVfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dHRlZV91bml0
dGVzdC5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL291dHB1dHRlZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUg
KzI2LDE4IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3RyaW5n
SU8KIGltcG9ydCB1bml0dGVzdAordHJ5OgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmlu
Z0lPICAjIFB5dGhvbiAyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBpbyBpbXBvcnQg
U3RyaW5nSU8gICMgUHl0aG9uIDMKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1
dHRlZSBpbXBvcnQgVGVlLCBPdXRwdXRUZWUKIAogCiBjbGFzcyBTaW1wbGVUZWVUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaW1wbGVfdGVlKHNlbGYpOgotICAgICAgICBm
aWxlMSwgZmlsZTIgPSBTdHJpbmdJTy5TdHJpbmdJTygpLCBTdHJpbmdJTy5TdHJpbmdJTygpCisg
ICAgICAgIGZpbGUxLCBmaWxlMiA9IFN0cmluZ0lPKCksIFN0cmluZ0lPKCkKICAgICAgICAgdGVl
ID0gVGVlKGZpbGUxLCBmaWxlMikKICAgICAgICAgdGVlLndyaXRlKCJmb28gYmFyXG4iKQogICAg
ICAgICB0ZWUud3JpdGUoImJhelxuIikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wYXRoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wYXRoLnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGF0aC5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsMTEgQEAgaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdXJsbGliCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAo
MywgMCk6CisgICAgaW1wb3J0IHVybGxpYi5wYXJzZQorZWxzZToKKyAgICBpbXBvcnQgdXJsbGli
CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtMTQ2LDYgKzE1MCw4
IEBAIGRlZiBfZXNjYXBlKHBhdGgpOgogICAgICMgd2hlbiBjb252ZXJ0aW5nIGZpbGVuYW1lcyB0
byBmaWxlcy4gSW5zdGVhZCBvZiB1c2luZyB1cmxsaWIncyBkZWZhdWx0CiAgICAgIyBydWxlcywg
d2UgYWxsb3cgYSBzbWFsbCBsaXN0IG9mIG90aGVyIGNoYXJhY3RlcnMgdGhyb3VnaCB1bi1lc2Nh
cGVkLgogICAgICMgSXQncyB1bmNsZWFyIGlmIHRoaXMgaXMgdGhlIGJlc3QgcG9zc2libGUgc29s
dXRpb24uCisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKKyAgICAgICAgcmV0dXJu
IHVybGxpYi5wYXJzZS5xdW90ZShwYXRoLCBzYWZlPScvKzonKQogICAgIHJldHVybiB1cmxsaWIu
cXVvdGUocGF0aCwgc2FmZT0nLys6JykKIAogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZS5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGUucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBkZWYgX3BhcnNlX3BlbV9mb3JtYXQoY29udGVudCk6CiAK
ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW5kZXggPSBsaW5lcy5pbmRleChlbmRfbWFya2Vy
KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgICAgICAgICByYWlzZSBCYWRGb3JtYXRFcnJvcigiQ2Fubm90IGZpbmQgc2VjdGlv
biBlbmQ6IHt9Ii5mb3JtYXQoZW5kX21hcmtlcikpCiAKICAgICAgICAgcmV0dXJuIGtpbmQsICJc
biIuam9pbihsaW5lc1swOmluZGV4ICsgMV0pICsgIlxuIiwgbGluZXNbaW5kZXggKyAxOl0KSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wZW1maWxlX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
ZW1maWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsNiBAQAogCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHN5cwogCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGVtZmlsZSBpbXBvcnQgUGVtLCBCYWRGb3JtYXRFcnJv
cgogCkBAIC0xNTcsMTQgKzE1NiwxNSBAQCBkZWYgdHJpbShkb2NzdHJpbmcpOgogICAgICMgYW5k
IHNwbGl0IGludG8gYSBsaXN0IG9mIGxpbmVzOgogICAgIGxpbmVzID0gZG9jc3RyaW5nLmV4cGFu
ZHRhYnMoKS5zcGxpdGxpbmVzKCkKICAgICAjIERldGVybWluZSBtaW5pbXVtIGluZGVudGF0aW9u
IChmaXJzdCBsaW5lIGRvZXNuJ3QgY291bnQpOgotICAgIGluZGVudCA9IHN5cy5tYXhpbnQKKyAg
ICBNQVggPSAyMTQ3NDgzNjQ3CisgICAgaW5kZW50ID0gTUFYCiAgICAgZm9yIGxpbmUgaW4gbGlu
ZXNbMTpdOgogICAgICAgICBzdHJpcHBlZCA9IGxpbmUubHN0cmlwKCkKICAgICAgICAgaWYgc3Ry
aXBwZWQ6CiAgICAgICAgICAgICBpbmRlbnQgPSBtaW4oaW5kZW50LCBsZW4obGluZSkgLSBsZW4o
c3RyaXBwZWQpKQogICAgICMgUmVtb3ZlIGluZGVudGF0aW9uIChmaXJzdCBsaW5lIGlzIHNwZWNp
YWwpOgogICAgIHRyaW1tZWQgPSBbbGluZXNbMF0uc3RyaXAoKV0KLSAgICBpZiBpbmRlbnQgPCBz
eXMubWF4aW50OgorICAgIGlmIGluZGVudCA8IE1BWDoKICAgICAgICAgZm9yIGxpbmUgaW4gbGlu
ZXNbMTpdOgogICAgICAgICAgICAgdHJpbW1lZC5hcHBlbmQobGluZVtpbmRlbnQ6XS5yc3RyaXAo
KSkKICAgICAjIFN0cmlwIG9mZiB0cmFpbGluZyBhbmQgbGVhZGluZyBibGFuayBsaW5lczoKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mby5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogCiAgICAgZGVmIHRvdGFsX2J5dGVz
X21lbW9yeShzZWxmKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKLSAgICAgICAgICAgIHJl
dHVybiBsb25nKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbInN5c2N0bCIsICItbiIsICJo
dy5tZW1zaXplIl0pKQorICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQoWyJzeXNjdGwiLCAiLW4iLCAiaHcubWVtc2l6ZSJdKSkKICAgICAgICAgcmV0dXJu
IE5vbmUKIAogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5m
b191bml0dGVzdC5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtNzYsMTAgKzc2LDEwIEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENh
c2UKICAgICBkZWYgdGVzdF9yZWFsX2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IG1h
a2VzIHN1cmUgdGhlIHJlYWwgKHVubW9ja2VkKSBjb2RlIGFjdHVhbGx5IHdvcmtzLgogICAgICAg
ICBpbmZvID0gUGxhdGZvcm1JbmZvKHN5cywgcGxhdGZvcm0sIEV4ZWN1dGl2ZSgpKQotICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLm9zX25hbWUsICcnKQorICAgICAgICBzZWxmLmFz
c2VydE5vdEVxdWFsKGluZm8ub3NfbmFtZSwgJycpCiAgICAgICAgIGlmIGluZm8uaXNfbWFjKCkg
b3IgaW5mby5pc193aW4oKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluZm8u
b3NfdmVyc2lvbikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25h
bWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5kaXNwbGF5X25hbWUo
KSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX21hYygpIG9yIGluZm8uaXNf
d2luKCkgb3IgaW5mby5pc19saW51eCgpIG9yIGluZm8uaXNfZnJlZWJzZCgpKQogICAgICAgICBz
ZWxmLmFzc2VydElzTm90Tm9uZShpbmZvLnRlcm1pbmFsX3dpZHRoKCkpCiAKQEAgLTEzNSwxNiAr
MTM1LDE2IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKIAogICAg
IGRlZiB0ZXN0X2Rpc3BsYXlfbmFtZShzZWxmKToKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5m
by5kaXNwbGF5X25hbWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5k
aXNwbGF5X25hbWUoKSwgJycpCiAKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCd3aW4zMicpLCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNi4xLjc2MDAn
KSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUoKSwgJycp
CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5kaXNwbGF5X25hbWUoKSwgJycpCiAK
ICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSwgZmFrZV9w
bGF0Zm9ybSgnJywgJzEwLjQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5k
aXNwbGF5X25hbWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5kaXNw
bGF5X25hbWUoKSwgJycpCiAKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUoKSwgJycpCisgICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5kaXNwbGF5X25hbWUoKSwgJycpCiAKICAgICBkZWYgdGVz
dF90b3RhbF9ieXRlc19tZW1vcnkoc2VsZik6CiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjYuMycpLCBmYWtlX2V4ZWN1
dGl2ZSgnMTIzNCcpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3Byb2ZpbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9wcm9maWxlci5weQkocmV2aXNpb24gMjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSwxMCBAQAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCByZQotaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHN5cworCitpZiBz
eXMudmVyc2lvbl9pbmZvIDwgKDMsIDApOgorICAgIGZyb20gaXRlcnRvb2xzIGltcG9ydCBpZmls
dGVyICBhcyBmaWx0ZXIKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBA
IC00MSw3ICs0NCw3IEBAIGNsYXNzIFByb2ZpbGVyRmFjdG9yeShvYmplY3QpOgogICAgICAgICBp
ZiBub3QgcHJvZmlsZXJzOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcHJvZmls
ZXJfbmFtZSA9IHByb2ZpbGVyX25hbWUgb3IgY2xzLmRlZmF1bHRfcHJvZmlsZXJfbmFtZShob3N0
LnBsYXRmb3JtKQotICAgICAgICBwcm9maWxlcl9jbGFzcyA9IG5leHQoaXRlcnRvb2xzLmlmaWx0
ZXIobGFtYmRhIHByb2ZpbGVyOiBwcm9maWxlci5uYW1lID09IHByb2ZpbGVyX25hbWUsIHByb2Zp
bGVycyksIE5vbmUpCisgICAgICAgIHByb2ZpbGVyX2NsYXNzID0gbmV4dChmaWx0ZXIobGFtYmRh
IHByb2ZpbGVyOiBwcm9maWxlci5uYW1lID09IHByb2ZpbGVyX25hbWUsIHByb2ZpbGVycyksIE5v
bmUpCiAgICAgICAgIGlmIG5vdCBwcm9maWxlcl9jbGFzczoKICAgICAgICAgICAgIHJldHVybiBO
b25lCiAgICAgICAgIHJldHVybiBwcm9maWxlcnNbMF0oaG9zdCwgZXhlY3V0YWJsZV9wYXRoLCBv
dXRwdXRfZGlyLCBpZGVudGlmaWVyKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQkocmV2aXNpb24g
MjUwMjQwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVy
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGltcG9ydCB1bml0
dGVzdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBsYXRmb3JtaW5mb19tb2NrIGltcG9y
dCBNb2NrUGxhdGZvcm1JbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9z
dF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogCi1mcm9tIC5wcm9maWxlciBpbXBvcnQgUHJv
ZmlsZXJGYWN0b3J5LCBHb29nbGVQUHJvZgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBy
b2ZpbGVyIGltcG9ydCBQcm9maWxlckZhY3RvcnksIEdvb2dsZVBQcm9mCiAKIAogY2xhc3MgUHJv
ZmlsZXJGYWN0b3J5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3RhY2tfdXRpbHNfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0YWNrX3V0aWxzX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vc3RhY2tfdXRpbHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDkgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBzdGFjawogCiAK
IGRlZiBjdXJyZW50X3RocmVhZF9pZCgpOgotICAgIHRocmVhZF9pZCwgXyA9IHN5cy5fY3VycmVu
dF9mcmFtZXMoKS5pdGVtcygpWzBdCi0gICAgcmV0dXJuIHRocmVhZF9pZAorICAgIGZvciB0aHJl
YWRfaWQgaW4gc3lzLl9jdXJyZW50X2ZyYW1lcygpLmtleXMoKToKKyAgICAgICAgcmV0dXJuIHRo
cmVhZF9pZAorICAgIHJldHVybiBOb25lCiAKIAogY2xhc3MgU3RhY2tVdGlsc1Rlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3N5c3RlbWhvc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBAIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgc3lzCiAK
LWZyb20gLiBpbXBvcnQgZW52aXJvbm1lbnQsIGV4ZWN1dGl2ZSwgZmlsZV9sb2NrLCBmaWxlc3lz
dGVtLCBwbGF0Zm9ybWluZm8sIHVzZXIsIHdvcmtzcGFjZQorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtIGltcG9ydCBlbnZpcm9ubWVudCwgZXhlY3V0aXZlLCBmaWxlX2xvY2ssIGZpbGVzeXN0
ZW0sIHBsYXRmb3JtaW5mbywgdXNlciwgd29ya3NwYWNlCiAKIAogY2xhc3MgU3lzdGVtSG9zdChv
YmplY3QpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZl
dGNoZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3VybGZldGNoZXIucHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyLnB5CShub25leGlzdGVudCkKQEAgLTEsNTUg
KzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3Ry
aWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIldyYXBwZXIgbW9kdWxlIGZvciBmZXRjaGlu
ZyBVUkxzLiIiIgotCi1pbXBvcnQgdXJsbGliCi0KLQotY2xhc3MgVXJsRmV0Y2hlcihvYmplY3Qp
OgotICAgICIiIkNsYXNzIHdpdGggcmVzdHJpY3RlZCBpbnRlcmZhY2UgdG8gZmV0Y2ggVVJMcyAo
bWFrZXMgdGVzdGluZyBlYXNpZXIpIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0
ZW0pOgotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQotCi0gICAgZGVmIGZl
dGNoKHNlbGYsIHVybCk6Ci0gICAgICAgICIiIkZldGNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBV
UkwgYXMgYSBzdHJpbmcuIiIiCi0gICAgICAgIGZpbGVfb2JqZWN0ID0gdXJsbGliLnVybG9wZW4o
dXJsKQotICAgICAgICBjb250ZW50ID0gZmlsZV9vYmplY3QucmVhZCgpCi0gICAgICAgIGZpbGVf
b2JqZWN0LmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGNvbnRlbnQKLQotICAgIGRlZiBmZXRjaF9p
bnRvX2ZpbGUoc2VsZiwgdXJsKToKLSAgICAgICAgIiIiRmV0Y2hlcyB0aGUgY29udGVudHMgb2Yg
dGhlIFVSTCBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJldHVybiB0aGUgZmlsZW5hbWUuCi0K
LSAgICAgICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB1cmxsaWIucmV0cmlldmUoKSBleGNl
cHQgdGhhdCB3ZSBkb24ndCByZXR1cm4gYW55IGhlYWRlcnMuCi0gICAgICAgICIiIgotICAgICAg
ICBmaWxlX29iamVjdCwgZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3Rl
bXBmaWxlKCctZmV0Y2hlZCcpCi0gICAgICAgIGNvbnRlbnRzID0gc2VsZi5mZXRjaCh1cmwpCi0g
ICAgICAgIGZpbGVfb2JqZWN0LndyaXRlKGNvbnRlbnRzKQotICAgICAgICBmaWxlX29iamVjdC5j
bG9zZSgpCi0gICAgICAgIHJldHVybiBmaWxlbmFtZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9jay5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5CShyZXZp
c2lvbiAyNTAyNDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJs
ZmV0Y2hlcl9tb2NrLnB5CShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLQotZGVmIG1ha2VfZmV0Y2hlcl9jbHModXJscyk6Ci0gICAgIiIiVXJsRmV0Y2hlciBm
YWN0b3J5IHJvdXRpbmUgdGhhdCBzaW11bGF0ZXMgbmV0d29yayBhY2Nlc3MKLSAgICB1c2luZyBh
IGRpY3Qgb2YgVVJMcyAtPiBjb250ZW50cy4iIiIKLSAgICBjbGFzcyBNb2NrRmV0Y2hlcihvYmpl
Y3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbSk6Ci0gICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQotCi0gICAgICAgIGRlZiBmZXRjaChzZWxm
LCB1cmwpOgotICAgICAgICAgICAgcmV0dXJuIHVybHNbdXJsXQotCi0gICAgICAgIGRlZiBmZXRj
aF9pbnRvX2ZpbGUoc2VsZiwgdXJsKToKLSAgICAgICAgICAgIGYsIGZuID0gc2VsZi5fZmlsZXN5
c3RlbS5vcGVuX2JpbmFyeV90ZW1wZmlsZSgnbW9ja2ZldGNoZXInKQotICAgICAgICAgICAgZi53
cml0ZShzZWxmLmZldGNoKHVybCkpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAg
IHJldHVybiBmbgotCi0gICAgcmV0dXJuIE1vY2tGZXRjaGVyCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQkocmV2aXNpb24gMjUwMjQwKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDggQEAgaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9y
dCB3ZWJicm93c2VyCiAKLWZyb20gLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCi1mcm9tIC5w
bGF0Zm9ybWluZm8gaW1wb3J0IFBsYXRmb3JtSW5mbworZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ucGxhdGZvcm1pbmZvIGltcG9ydCBQbGF0Zm9ybUluZm8KIAogCiBfbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoX19uYW1lX18pCkBAIC01MCw2ICs1MCwxMSBAQCBleGNlcHQgSW1wb3J0RXJyb3I6
CiAgICAgICAgICMgVGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlIGZvciB3aW4zMiwgbm90IG11
Y2ggdG8gZG8gZXhjZXB0IGNyeS4KICAgICAgICAgX2xvZy53YXJuKCJVbmFibGUgdG8gaW1wb3J0
IHJlYWRsaW5lLiIpCiAKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgaW5wdXRf
ZnVuYyA9IGlucHV0CitlbHNlOgorICAgIGlucHV0X2Z1bmMgPSByYXdfaW5wdXQKKwogCiBjbGFz
cyBVc2VyKG9iamVjdCk6CiAgICAgREVGQVVMVF9OTyA9ICduJwpAQCAtNjIsNyArNjcsNyBAQCBj
bGFzcyBVc2VyKG9iamVjdCk6CiAKICAgICAjIEZJWE1FOiBUaGVzZSBhcmUgQGNsYXNzbWV0aG9k
cyBiZWNhdXNlIGJ1Z3ppbGxhLnB5IGRvZXNuJ3QgaGF2ZSBhIFRvb2wgb2JqZWN0ICh0aHVzIG5v
IFVzZXIgaW5zdGFuY2UpLgogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBwcm9tcHQoY2xzLCBt
ZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgZGVmIHByb21wdChj
bHMsIG1lc3NhZ2UsIHJlcGVhdD0xLCByYXdfaW5wdXQ9aW5wdXRfZnVuYyk6CiAgICAgICAgIHJl
c3BvbnNlID0gTm9uZQogICAgICAgICB3aGlsZSAocmVwZWF0IGFuZCBub3QgcmVzcG9uc2UpOgog
ICAgICAgICAgICAgcmVwZWF0IC09IDEKQEAgLTc0LDcgKzc5LDcgQEAgY2xhc3MgVXNlcihvYmpl
Y3QpOgogICAgICAgICByZXR1cm4gY2xzLnByb21wdChtZXNzYWdlLCByZXBlYXQ9cmVwZWF0LCBy
YXdfaW5wdXQ9Z2V0cGFzcy5nZXRwYXNzKQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHBy
b21wdF93aXRoX211bHRpcGxlX2xpc3RzKGNscywgbGlzdF90aXRsZSwgc3VidGl0bGVzLCBsaXN0
cywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAg
ZGVmIHByb21wdF93aXRoX211bHRpcGxlX2xpc3RzKGNscywgbGlzdF90aXRsZSwgc3VidGl0bGVz
LCBsaXN0cywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PWlucHV0X2Z1bmMp
OgogICAgICAgICBpdGVtX2luZGV4ID0gMAogICAgICAgICBjdW11bGF0ZWRfbGlzdCA9IFtdCiAg
ICAgICAgIHByaW50KGxpc3RfdGl0bGUpCkBAIC0xMTQsNyArMTE5LDcgQEAgY2xhc3MgVXNlcihv
YmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0X2l0ZW1zW3Jlc3VsdF0KIAogICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwg
bGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1
dCk6CisgICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1z
LCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9aW5wdXRfZnVuYyk6CiAgICAg
ICAgIHByaW50KGxpc3RfdGl0bGUpCiAgICAgICAgIGkgPSAwCiAgICAgICAgIGZvciBpdGVtIGlu
IGxpc3RfaXRlbXM6CkBAIC0xNTYsNyArMTYxLDcgQEAgY2xhc3MgVXNlcihvYmplY3QpOgogICAg
ICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIGNv
bmZpcm0oc2VsZiwgbWVzc2FnZT1Ob25lLCBkZWZhdWx0PURFRkFVTFRfWUVTLCByYXdfaW5wdXQ9
cmF3X2lucHV0KToKKyAgICBkZWYgY29uZmlybShzZWxmLCBtZXNzYWdlPU5vbmUsIGRlZmF1bHQ9
REVGQVVMVF9ZRVMsIHJhd19pbnB1dD1pbnB1dF9mdW5jKToKICAgICAgICAgaWYgbm90IG1lc3Nh
Z2U6CiAgICAgICAgICAgICBtZXNzYWdlID0gIkNvbnRpbnVlPyIKICAgICAgICAgY2hvaWNlID0g
eyd5JzogJ1kvbicsICduJzogJ3kvTid9W2RlZmF1bHRdCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlcl9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHkJKHJldmlzaW9uIDI1MDI0
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDE4ICsyNywyMiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN5cwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiAKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCk6CisgICAgaW5wdXQgPSByYXdfaW5w
dXQKKwogCiBjbGFzcyBNb2NrVXNlcihvYmplY3QpOgogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIHByb21wdChjbHMsIG1lc3NhZ2UsIHJlcGVhdD0xLCByYXdfaW5wdXQ9cmF3X2lucHV0KToK
KyAgICBkZWYgcHJvbXB0KGNscywgbWVzc2FnZSwgcmVwZWF0PTEsIHJhd19pbnB1dD1pbnB1dCk6
CiAgICAgICAgIHJldHVybiAiTW9jayB1c2VyIHJlc3BvbnNlIgogCiAgICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBj
YW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lucHV0KToKKyAgICBkZWYg
cHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUsIGxpc3RfaXRlbXMsIGNhbl9jaG9vc2Vf
bXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1pbnB1dCk6CiAgICAgICAgIHBhc3MKIAogICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9fX2lu
aXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvX19pbml0
X18ucHkJKHJldmlzaW9uIDI1MDI0MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiAiIiJQb3J0LXNw
ZWNpZmljIGVudHJ5cG9pbnRzIGZvciB0aGUgbGF5b3V0IHRlc3RzIHRlc3QgaW5mcmFzdHJ1Y3R1
cmUuIiIiCiAKLWltcG9ydCBidWlsZGVycyAgIyBXaHkgaXMgdGhpcyBpbiBwb3J0PworaW1wb3J0
IHdlYmtpdHB5LnBvcnQuYnVpbGRlcnMgICMgV2h5IGlzIHRoaXMgaW4gcG9ydD8KIAotZnJvbSBi
YXNlIGltcG9ydCBQb3J0ICAjIEl0J3MgcG9zc2libGUgd2UgZG9uJ3QgbmVlZCB0byBleHBvcnQg
dGhpcyB2aXJ0dWFsIGJhc2VjbGFzcyBvdXRzaWRlIHRoZSBtb2R1bGUuCi1mcm9tIGRyaXZlciBp
bXBvcnQgRHJpdmVyLCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0Ci1mcm9tIGZhY3RvcnkgaW1w
b3J0IHBsYXRmb3JtX29wdGlvbnMsIGNvbmZpZ3VyYXRpb25fb3B0aW9ucworZnJvbSB3ZWJraXRw
eS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQgICMgSXQncyBwb3NzaWJsZSB3ZSBkb24ndCBuZWVkIHRv
IGV4cG9ydCB0aGlzIHZpcnR1YWwgYmFzZWNsYXNzIG91dHNpZGUgdGhlIG1vZHVsZS4KK2Zyb20g
d2Via2l0cHkucG9ydC5kcml2ZXIgaW1wb3J0IERyaXZlciwgRHJpdmVySW5wdXQsIERyaXZlck91
dHB1dAorZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMs
IGNvbmZpZ3VyYXRpb25fb3B0aW9ucwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379482</attachid>
            <date>2019-09-24 13:34:49 -0700</date>
            <delta_ts>2019-09-25 18:16:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201826-20190924133448.patch</filename>
            <type>text/plain</type>
            <size>75787</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDMxNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyOCBAQAorMjAxOS0wOS0yMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MTgyNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTU0NTI2NzE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGVkIGNvbXBhdGliaWxpdHkgYnkg
cnVubmluZyAncHl0aG9uMyAtbSB1bml0dGVzdCB3ZWJraXRweS5jb21tb24uc3lzdGVtLjxfdW5p
dHRlc3Q+JyBvbgorICAgICAgICBlYWNoIG9mIHRoZSBlZmZlY3RlZCBmaWxlcy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weTogSW1wb3J0
IFN0cmluZ0lPIGZyb20gaW8gbW9kdWxlLgorICAgICAgICAoc2V0X3Jldmlld2VyKToKKyAgICAg
ICAgKHNldF9zaG9ydF9kZXNjcmlwdGlvbl9hbmRfYnVnX3VybCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQucHk6ICBJbXBvcnQgU3RyaW5nSU8g
ZnJvbSBpbyBtb2R1bGUuCisgICAgICAgIChDaGVja291dC5fbGF0ZXN0X2VudHJ5X2Zvcl9jaGFu
Z2Vsb2dfYXRfcmV2aXNpb24pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzLnB5OgorICAgICAgICAoQ29tbWl0dGVyTGlzdC5sb2FkX2pzb24pOiBp
dGVyaXRlbXMgLT4gaXRlbXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0
L25ldHdvcmt0cmFuc2FjdGlvbi5weToKKyAgICAgICAgKE5ldHdvcmtUcmFuc2FjdGlvbi5ydW4p
OiB1cmxsaWIyIGlzIHVybGxpYiBpbiBQeXRob24zLiAKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHk6CisgICAgICAgIChBYnN0cmFj
dEV4ZWN1dGl2ZS5fc3RyaW5naWZ5X2FyZ3MpOgorICAgICAgICAoQWJzdHJhY3RFeGVjdXRpdmUu
Y29tbWFuZF9mb3JfcHJpbnRpbmcpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24z
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5p
dHRlc3QucHk6IEV4cGxpY2l0bHkgZW5jb2RlIGFuZCBkZWNvZGUgYmluYXJ5IGNyYXNobG9ncy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRfdW5p
dHRlc3QucHk6IFVzZSBhYnNvbHV0ZSBpbXBvcnRzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHk6CisgICAgICAgIChTY3JpcHRFcnJvci5tZXNz
YWdlX3dpdGhfb3V0cHV0KTogVGhlIHN0ciB0eXBlIGlzIHVuaWNvZGUgaW4gUHl0aG9uMy4KKyAg
ICAgICAgKEV4ZWN1dGl2ZS5XcmFwcGVkUG9wZW4pOiBQeXRob24zJ3MgUG9wZW4gb2JqZWN0IGlz
IGEgY29udGV4dCBtYW5hZ2VyLiBUbyBhbGxvdyB1cyB0byB1c2UgaXQgYXMgb25lLAorICAgICAg
ICBvdXIgUHl0aG9uMiBQb3BlbiBuZWVkcyB0byBiZSBvbmUgYXMgd2VsbC4KKyAgICAgICAgKEV4
ZWN1dGl2ZS5XcmFwcGVkUG9wZW4uX19pbml0X18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBw
ZWRQb3Blbi5fX2VudGVyX18pOgorICAgICAgICAoRXhlY3V0aXZlLldyYXBwZWRQb3Blbi5fX2V4
aXRfXyk6CisgICAgICAgIChFeGVjdXRpdmUuX3J1bl9jb21tYW5kX3dpdGhfdGVlZF9vdXRwdXQp
OiBTaW1wbGlmeSBsb29wLCBkZWNvZGUgdW5pY29kZSBzdHJpbmdzLgorICAgICAgICAoRXhlY3V0
aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbCk6IFRoZSBjaGlsZCBvdXRwdXQgZmlsZSBzaG91bGQg
bm90IGJlIHVuaWNvZGUgc3RyaW5ncy4KKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5uaW5nX3BpZHMp
OiBVc2UgdGhlIFBvcGVuIGNvbnRleHQgbWFuYWdlciB0byBndWFyYW50ZWUgY2xlYW4tdXAuCisg
ICAgICAgIChFeGVjdXRpdmUuX2NvbXB1dGVfc3RkaW4pOgorICAgICAgICAoRXhlY3V0aXZlLnJ1
bl9jb21tYW5kKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1hbmFnZXIgdG8gZ3VhcmFudGVlIGNs
ZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlLl9zdHJpbmdpZnlfYXJncyk6IFRoZSBzdHIgdHlw
ZSBpcyB1bmljb2RlIGluIFB5dGhvbjMuCisgICAgICAgIChFeGVjdXRpdmUucG9wZW4pOiBSZXR1
cm4gYSBjb250ZXh0IG1hbmFnZXIgaWYgdGhlIFBvcGVuIG9iamVjdCBpcyBub3Qgb25lLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToK
KyAgICAgICAgKE1vY2tQcm9jZXNzLl9faW5pdF9fKTogU3RyaW5nSU8gLT4gQnl0ZXNJTy4KKyAg
ICAgICAgKE1vY2tQcm9jZXNzLl9fZW50ZXJfXyk6CisgICAgICAgIChNb2NrUHJvY2Vzcyk6Cisg
ICAgICAgIChNb2NrUHJvY2Vzcy5fX2V4aXRfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weToKKyAgICAgICAgKEV4ZWN1dGl2
ZVRlc3QudGVzdF9hdXRvX3N0cmluZ2lmeV9hcmdzKTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1h
bmFnZXIgdG8gZ3VhcmFudGVlIGNsZWFuLXVwLgorICAgICAgICAoRXhlY3V0aXZlVGVzdC50ZXN0
X3BvcGVuX2FyZ3MpOiBEaXR0by4KKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3Quc2VyaWFsX3Rlc3Rf
a2lsbF9wcm9jZXNzKTogRGl0dG8uCisgICAgICAgIChFeGVjdXRpdmVUZXN0LnNlcmlhbF90ZXN0
X2tpbGxfYWxsKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW0ucHk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUp
OiBVc2UgJ29wZW4nIGluc3RlYWQgb2YgJ2ZpbGUnLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0
ZV9iaW5hcnlfZmlsZSk6IERpdHRvLgorICAgICAgICAoRmlsZVN5c3RlbS53cml0ZV90ZXh0X2Zp
bGUpOiBUaGUgc3RyIHR5cGUgaXMgdW5pY29kZSBpbiBQeXRob24zLiAKKyAgICAgICAgKEZpbGVT
eXN0ZW0ucmVscGF0aCk6CisgICAgICAgIChGaWxlU3lzdGVtLnJlbW92ZSk6IFRoZSBXaW5kb3dz
RXJyb3IgaXMganVzdCBhbnRoZXIgT1NFcnJvciBpbiBQeXRob24zLgorICAgICAgICAoRmlsZVN5
c3RlbS5fV2luZG93c0Vycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAoTW9ja0ZpbGVTeXN0
ZW0uZ2xvYik6IGZpbHRlciByZXR1cm5zIGEgZ2VuZXJhdG9yIGluc3RlYWQgb2YgYSBsaXN0Lgor
ICAgICAgICAoV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0Ll9faW5pdF9fKTogQmluYXJ5IGZpbGVz
IGFyZSBjb21wcmlzZWQgb2YgYnl0ZXMsIG5vdCBzdHJpbmcgaW4gUHl0aG9uMy4KKyAgICAgICAg
KFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC53cml0ZSk6IERpdHRvLgorICAgICAgICAoUmVhZGFi
bGVUZXh0RmlsZU9iamVjdC5fX2luaXRfXyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2tfdW5pdHRlc3QucHk6CisgICAgICAg
IChNb2NrRmlsZVN5c3RlbVRlc3QudGVzdF9ub3JtcGF0aCk6CisgICAgICAgIChNb2NrRmlsZVN5
c3RlbVRlc3QudGVzdF9kaXJzX3VuZGVyKTogYXNzZXJ0RXF1YWxzIC0+IGFzc2VydEVxdWFsLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUmVhbEZpbGVTeXN0ZW1UZXN0LnRlc3RfcmVhZF9hbmRfd3JpdGVf
ZmlsZSk6IEV4cGxpY2l0bHkgZGVmaW5lIGJ5dGUgYXJyYXlzIGluc3RlYWQgb2Ygc3RyaW5ncy4K
KyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50ZXN0X3JlbW92ZV9maWxlX3dpdGhfcmV0cnku
cmVtb3ZlX3dpdGhfZXhjZXB0aW9uKTogVGhlIFdpbmRvd3NFcnJvciBpcyBqdXN0CisgICAgICAg
IGFudGhlciBPU0Vycm9yIGluIFB5dGhvbjMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL291dHB1dHRlZV91bml0dGVzdC5weToKKyAgICAgICAgKFNpbXBsZVRl
ZVRlc3QudGVzdF9zaW1wbGVfdGVlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGF0aC5weToKKyAgICAgICAgKF9lc2NhcGUpOiB1cmxsaWIgbGlicmFyeSBoYXMg
YmVlbiBicm9rZW4gaW50byBwYXJ0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGVtZmlsZS5weToKKyAgICAgICAgKF9wYXJzZV9wZW1fZm9ybWF0LmZpbmRfZW5k
KTogUHl0aG9uMyBkb2VzIG5vdCBkZWZpbmUgYSBtYXhpbnQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BlbWZpbGVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBs
YXRmb3JtSW5mby50b3RhbF9ieXRlc19tZW1vcnkpOiBOb3QgJ2xvbmcnIHR5cGUgaW4gUHl0aG9u
My4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X3JlYWxfY29kZSk6
IGFzc2VydE5vdEVxdWFscyAtPiBhc3NlcnROb3RFcXVhbC4KKyAgICAgICAgKFRlc3RQbGF0Zm9y
bUluZm8udGVzdF9kaXNwbGF5X25hbWUpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHk6CisgICAgICAgIChQcm9maWxlckZhY3Rvcnku
Y3JlYXRlX3Byb2ZpbGVyKTogTWFudWFsbHkgaW1wbGVtZW50IGlmaWx0ZXIuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5OiBVc2Ug
YWJzb2x1dGUgaW1wb3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vc3RhY2tfdXRpbHNfdW5pdHRlc3QucHk6CisgICAgICAgIChjdXJyZW50X3RocmVhZF9pZCk6
IGl0ZW1zKCkgcmV0dXJucyBhIGdlbmVyYXRvciBpbiBQeXRob24zLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5OiBVc2UgYWJzb2x1dGUgaW1w
b3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hl
ci5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
dXJsZmV0Y2hlcl9tb2NrLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAoVXNlci5wcm9tcHQpOiBVc2UgYWJzb2x1
dGUgaW1wb3J0cywgcmF3X2lucHV0IC0+IGlucHV0LgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0
aF9tdWx0aXBsZV9saXN0cyk6CisgICAgICAgIChVc2VyLnByb21wdF93aXRoX2xpc3QpOgorICAg
ICAgICAoVXNlci5jb25maXJtKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi91
bmljb2RlLnB5OiBUb29saW5nIHRvIG1hbmFnZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gUHl0aG9u
IDIKKyAgICAgICAgYW5kIFB5dGhvbiAzIHVuaWNvZGUgaGFuZGxpbmcuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfbW9jay5weToKKyAgICAgICAgKE1vY2tV
c2VyLnByb21wdCk6IHJhd19pbnB1dCAtPiBpbnB1dC4KKyAgICAgICAgKE1vY2tVc2VyLnByb21w
dF93aXRoX2xpc3QpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92
ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5mcm9tX2l0ZXJhYmxlKTogeHJhbmdlIC0+IHJh
bmdlLgorICAgICAgICAoVmVyc2lvbi5mcm9tX25hbWUpOiBVc2UgYWJzb2x1dGUgaW1wb3J0IHBh
dGguCisgICAgICAgIChWZXJzaW9uLl9fY29udGFpbnNfXyk6IHhyYW5nZSAtPiByYW5nZS4KKyAg
ICAgICAgKFZlcnNpb24uX19zdHJfXyk6IHhyYW5nZSAtPiByYW5nZS4KKyAgICAgICAgKFZlcnNp
b24uX19jbXBfXyk6IGFtcCBpcyBubyBsb25nZXIgYW4gb3BlcmF0b3IgaW4gUHl0aG9uMywgYnV0
IHZlcnNpb25zIGFyZSBjb21wcmlzZWQKKyAgICAgICAgT2YgaW50ZWdlcnMsIHNvIHN1YnRyYWN0
aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3QuCisgICAgICAgIChWZXJzaW9uKToKKyAgICAgICAgKFZl
cnNpb24uX19lcV9fKTogX19jbXBfXyBvcGVyYXRvciBpcyBubyBsb25nZXIgcmVzcGVjdGVkLCBz
byB3ZSBuZWVkIHRvIGltcGxlbWVudAorICAgICAgICBlYWNoIGNvbXBhcmlzb24uCisgICAgICAg
IChWZXJzaW9uLl9fbmVfXyk6IERpdHRvLgorICAgICAgICAoVmVyc2lvbi5fX2x0X18pOiBEaXR0
by4KKyAgICAgICAgKFZlcnNpb24uX19sZV9fKTogRGl0dG8uCisgICAgICAgIChWZXJzaW9uLl9f
Z3RfXyk6IERpdHRvLgorICAgICAgICAoVmVyc2lvbi5fX2dlX18pOiBEaXR0by4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5OgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAuX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbik6CisgICAgICAgIChWZXJz
aW9uTmFtZU1hcC50b19uYW1lKTogeHJhbmdlIC0+IHJhbmdlLgorICAgICAgICAoVmVyc2lvbk5h
bWVNYXAuZnJvbV9uYW1lKTogaXRlcml0ZW1zIC0+IGl0ZW1zLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHk6IFVzZSBhYnNvbHV0
ZSBpbXBvcnRzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5p
dHRlc3QucHk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdmVk
aWZmLnB5OgorICAgICAgICAoV2F2ZURpZmYuX19pbml0X18pOiBTdHJpbmdJTyAtPiBCeXRlc0lP
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9fX2luaXRfXy5weToKKyAgICAgICAg
KG91dHNpZGUpOgorCiAyMDE5LTA5LTI0ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNv
bT4KIAogICAgICAgICBDb2FsZXNjZSBvciByZW1vdmUgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShJT1NfRkFNSUxZKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdW5pY29k
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi91bmljb2Rl
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3VuaWNv
ZGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW8KK2ltcG9ydCBzeXMKKworCitCeXRlc0lP
ID0gaW8uQnl0ZXNJTworaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKKyAgICBTdHJpbmdJ
TyA9IGlvLlN0cmluZ0lPCitlbHNlOgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lP
CitVbmljb2RlSU8gPSBpby5TdHJpbmdJTworCit1bmljb2RlID0gc3RyIGlmIHN5cy52ZXJzaW9u
X2luZm8gPiAoMywgMCkgZWxzZSB1bmljb2RlCisKKworZGVmIGVuY29kZSh2YWx1ZSwgZW5jb2Rp
bmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKToKKyAgICBpZiB0eXBlKHZhbHVlKSA9PSB1bmlj
b2RlOgorICAgICAgICByZXR1cm4gdmFsdWUuZW5jb2RlKGVuY29kaW5nLCBlcnJvcnM9ZXJyb3Jz
KQorICAgIHJldHVybiB2YWx1ZQorCisKK2RlZiBkZWNvZGUodmFsdWUsIGVuY29kaW5nPSd1dGYt
OCcsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgaWYgdHlwZSh2YWx1ZSkgPT0gYnl0ZXM6CisgICAg
ICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpCisgICAgcmV0
dXJuIHZhbHVlCisKKworZGVmIGRlY29kZV9mb3IodmFsdWUsIHRhcmdldF90eXBlKToKKyAgICBp
ZiB0eXBlKHZhbHVlKSA9PSB0YXJnZXRfdHlwZToKKyAgICAgICAgcmV0dXJuIHZhbHVlCisgICAg
aWYgdGFyZ2V0X3R5cGUgPT0gdW5pY29kZToKKyAgICAgICAgcmV0dXJuIGRlY29kZShieXRlcyh2
YWx1ZSkpCisgICAgcmV0dXJuIHZhbHVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3ZlcnNpb24ucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxMyBAQCBj
bGFzcyBWZXJzaW9uKG9iamVjdCk6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBmcm9tX2l0
ZXJhYmxlKHZhbCk6CiAgICAgICAgIHJlc3VsdCA9IFZlcnNpb24oKQotICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGVuKHZhbCkpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odmFsKSk6CiAg
ICAgICAgICAgICByZXN1bHRbaV0gPSBpbnQodmFsW2ldKQogICAgICAgICByZXR1cm4gcmVzdWx0
CiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGZyb21fbmFtZShuYW1lKToKLSAgICAgICAg
ZnJvbSB2ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAorICAgICAgICBmcm9t
IHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAog
ICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAubWFwKCkuZnJvbV9uYW1lKG5hbWUpWzFdCiAK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFqb3I9MCwgbWlub3I9MCwgdGlueT0wLCBtaWNybz0w
LCBuYW5vPTApOgpAQCAtOTksNyArOTksNyBAQCBjbGFzcyBWZXJzaW9uKG9iamVjdCk6CiAgICAg
ZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2ZXJzaW9uKToKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFu
Y2UodmVyc2lvbiwgVmVyc2lvbikKICAgICAgICAgZG9lc19tYXRjaCA9IFRydWUKLSAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKGxlbih2ZXJzaW9uKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxl
bih2ZXJzaW9uKSk6CiAgICAgICAgICAgICBpZiBzZWxmW2ldICE9IHZlcnNpb25baV06CiAgICAg
ICAgICAgICAgICAgZG9lc19tYXRjaCA9IEZhbHNlCiAgICAgICAgICAgICBpZiBub3QgZG9lc19t
YXRjaCBhbmQgc2VsZltpXSAhPSAwOgpAQCAtMTA4LDE4ICsxMDgsMzcgQEAgY2xhc3MgVmVyc2lv
bihvYmplY3QpOgogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIGxlbl90b19wcmlu
dCA9IDEKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CisgICAgICAgIGZvciBp
IGluIHJhbmdlKGxlbihzZWxmKSk6CiAgICAgICAgICAgICBpZiBzZWxmW2ldOgogICAgICAgICAg
ICAgICAgIGxlbl90b19wcmludCA9IGkgKyAxCiAgICAgICAgIHJlc3VsdCA9IHN0cihzZWxmLm1h
am9yKQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuX3RvX3ByaW50IC0gMSk6CisgICAgICAg
IGZvciBpIGluIHJhbmdlKGxlbl90b19wcmludCAtIDEpOgogICAgICAgICAgICAgcmVzdWx0ICs9
ICcue30nLmZvcm1hdChzZWxmW2kgKyAxXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAg
ZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBvdGhlciBpcyBOb25lOgogICAg
ICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6Ci0g
ICAgICAgICAgICBpZiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihz
ZWxmKSk6CisgICAgICAgICAgICBkaWZmID0gc2VsZltpXSAtIG90aGVyW2ldCisgICAgICAgICAg
ICBpZiBkaWZmOgorICAgICAgICAgICAgICAgIHJldHVybiBkaWZmCiAgICAgICAgIHJldHVybiAw
CisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19j
bXBfXyhvdGhlcikgPT0gMAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAg
IHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpICE9IDAKKworICAgIGRlZiBfX2x0X18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8IDAKKworICAgIGRl
ZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVy
KSA8PSAwCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX19jbXBfXyhvdGhlcikgPiAwCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPj0gMApJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CShyZXZpc2lvbiAy
NTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFw
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTMgQEAgY2xhc3MgVmVyc2lvbk5hbWVN
YXAob2JqZWN0KToKICAgICBkZWYgX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbihjbHMsIHByZWZp
eCwgbWluaW11bT1WZXJzaW9uKDEpLCBtYXhpbXVtPVZlcnNpb24oMSkpOgogICAgICAgICByZXN1
bHQgPSB7fQogICAgICAgICBhc3NlcnQgbWluaW11bSA8PSBtYXhpbXVtCi0gICAgICAgIGZvciBp
IGluIHhyYW5nZSgobWF4aW11bS5tYWpvciArIDEpIC0gbWluaW11bS5tYWpvcik6CisgICAgICAg
IGZvciBpIGluIHJhbmdlKChtYXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1ham9yKToKICAg
ICAgICAgICAgIHJlc3VsdFsne30ge30nLmZvcm1hdChwcmVmaXgsIHN0cihWZXJzaW9uKG1pbmlt
dW0ubWFqb3IgKyBpKSkpXSA9IFZlcnNpb24obWluaW11bS5tYWpvciArIGkpCiAgICAgICAgIHJl
dHVybiByZXN1bHQKIAogICAgIGRlZiB0b19uYW1lKHNlbGYsIHZlcnNpb24sIHBsYXRmb3JtPU5v
bmUsIHRhYmxlPVBVQkxJQ19UQUJMRSk6CiAgICAgICAgIGNsb3Nlc3RfbWF0Y2ggPSAoTm9uZSwg
Tm9uZSkKLSAgICAgICAgZm9yIG9zX25hbWUsIG9zX3ZlcnNpb24gaW4gc2VsZi5tYXBwaW5nX2Zv
cl9wbGF0Zm9ybShwbGF0Zm9ybSwgdGFibGUpLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Igb3Nf
bmFtZSwgb3NfdmVyc2lvbiBpbiBzZWxmLm1hcHBpbmdfZm9yX3BsYXRmb3JtKHBsYXRmb3JtLCB0
YWJsZSkuaXRlbXMoKToKICAgICAgICAgICAgIGlmIHZlcnNpb24gPT0gb3NfdmVyc2lvbjoKICAg
ICAgICAgICAgICAgICByZXR1cm4gb3NfbmFtZQogICAgICAgICAgICAgZWxpZiB2ZXJzaW9uIGlu
IG9zX3ZlcnNpb246CkBAIC0xMjYsMTYgKzEyNiwxNiBAQCBjbGFzcyBWZXJzaW9uTmFtZU1hcChv
YmplY3QpOgogCiAgICAgZGVmIGZyb21fbmFtZShzZWxmLCBuYW1lKToKICAgICAgICAgIyBFeGFj
dCBtYXRjaAotICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVyaXRlbXMoKToK
LSAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZXJpdGVtcygpOgorICAg
ICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVtcygpOgorICAgICAgICAgICAgZm9y
IG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBuYW1l
IGluIG9zX21hcDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCBvc19tYXBb
bmFtZV0pCiAKICAgICAgICAgIyBJdCdzIG5vdCBhbiBleGFjdCBtYXRjaCwgbGV0J3MgdHJ5IHVu
aWZ5aW5nIGZvcm1hdHRpbmcKICAgICAgICAgdW5mb3JtYXR0ZWQgPSBzZWxmLnN0cmlwX25hbWVf
Zm9ybWF0dGluZyhuYW1lKQotICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVy
aXRlbXMoKToKLSAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZXJpdGVt
cygpOgotICAgICAgICAgICAgICAgIGZvciB2ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4gb3NfbWFw
Lml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVtcygp
OgorICAgICAgICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlbXMoKToKKyAgICAg
ICAgICAgICAgICBmb3IgdmVyc2lvbl9uYW1lLCB2ZXJzaW9uIGluIG9zX21hcC5pdGVtcygpOgog
ICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmlwX25hbWVfZm9ybWF0dGluZyh2ZXJzaW9u
X25hbWUpID09IHVuZm9ybWF0dGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChv
c19uYW1lLCB2ZXJzaW9uKQogICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9t
YXBfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDcgKzI0LDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uIGltcG9ydCBWZXJzaW9uCi1mcm9tIHZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNp
b25OYW1lTWFwCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBW
ZXJzaW9uTmFtZU1hcAogCiAKIGNsYXNzIFZlcnNpb25NYXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0
Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNp
b25fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gdmVyc2lvbiBpbXBvcnQgVmVyc2lvbgor
ZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogCiAKIGNsYXNzIFZl
cnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEy
ICsyMCwxMyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogIyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IFN0cmlu
Z0lPCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB3
YXZlCiAKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KKwogCiBjbGFzcyBXYXZlRGlmZihvYmplY3Qp
OgogICAgIF9wYXJhbU5hbWVzID0gKCdOdW1iZXIgb2YgY2hhbm5lbHMnLCAnU2FtcGxlIHdpZHRo
JywgJ1NhbXBsZSByYXRlJywgJ051bWJlciBvZiBmcmFtZXMnLCAnQ29tcHJlc3Npb24gdHlwZScs
ICdDb21wcmVzc2lvbiBuYW1lJykKQEAgLTM3LDExICszOCwxMSBAQCBjbGFzcyBXYXZlRGlmZihv
YmplY3QpOgogICAgICAgICBpZiBpc2luc3RhbmNlKGluMSwgZmlsZSk6CiAgICAgICAgICAgICB3
YXZlRmlsZTEgPSB3YXZlLm9wZW4oaW4xLCAncmInKQogICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgd2F2ZUZpbGUxID0gd2F2ZS5vcGVuKFN0cmluZ0lPLlN0cmluZ0lPKGluMSksICdyYicpCisg
ICAgICAgICAgICB3YXZlRmlsZTEgPSB3YXZlLm9wZW4oQnl0ZXNJTyhpbjEpLCAncmInKQogICAg
ICAgICBpZiBpc2luc3RhbmNlKGluMiwgZmlsZSk6CiAgICAgICAgICAgICB3YXZlRmlsZTEgPSB3
YXZlLm9wZW4oaW4yLCAncmInKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgd2F2ZUZpbGUy
ID0gd2F2ZS5vcGVuKFN0cmluZ0lPLlN0cmluZ0lPKGluMiksICdyYicpCisgICAgICAgICAgICB3
YXZlRmlsZTIgPSB3YXZlLm9wZW4oQnl0ZXNJTyhpbjIpLCAncmInKQogCiAgICAgICAgIHBhcmFt
czEgPSB3YXZlRmlsZTEuZ2V0cGFyYW1zKCkKICAgICAgICAgcGFyYW1zMiA9IHdhdmVGaWxlMi5n
ZXRwYXJhbXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L2NoYW5nZWxvZy5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMSArMzAsMTEgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQotZnJvbSBTdHJp
bmdJTyBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCB0ZXh0d3JhcAogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5jb25maWcuY29tbWl0dGVycyBpbXBvcnQgQ29tbWl0dGVyTGlzdAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0
cHkuY29tbW9uLnVuaWNvZGUgaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgd2Via2l0cHkuY29tbW9u
LmNvbmZpZy51cmxzIGFzIGNvbmZpZ191cmxzCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2No
ZWNrb3V0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L2NoZWNrb3V0LnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGVja291dC5weQkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTQgKzI2LDEzIEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3Ry
aW5nSU8KLQogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnIGltcG9ydCB1cmxzCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IENoYW5nZUxvZywgcGFyc2Vf
YnVnX2lkX2Zyb21fY2hhbmdlbG9nCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jb21t
aXRpbmZvIGltcG9ydCBDb21taXRJbmZvCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5z
Y20gaW1wb3J0IENvbW1pdE1lc3NhZ2UKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGlt
cG9ydCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnVuaWNvZGUgaW1wb3J0IFN0cmlu
Z0lPCiAKIAogIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIFdlYktpdC1zcGVjaWZpYyBwYXJ0
cyBvZiB0aGUgY2hlY2tvdXQgKGxpa2UgQ2hhbmdlTG9ncykuCkBAIC02MSw3ICs2MCw3IEBAIGNs
YXNzIENoZWNrb3V0KG9iamVjdCk6CiAgICAgICAgICMgdGhhdCBDaGFuZ2VMb2cgZmlsZXMgYXJl
IHV0Zi04LiAgcGFyc2VfbGF0ZXN0X2VudHJ5X2Zyb21fZmlsZQogICAgICAgICAjIGV4cGVjdHMg
YSBmaWxlLWxpa2Ugb2JqZWN0IHdoaWNoIHZlbmRzIHVuaWNvZGUoKSwgc28gd2UgZGVjb2RlIGhl
cmUuCiAgICAgICAgICMgT2xkIHJldmlzaW9ucyBvZiBTb3VyY2VzL1dlYktpdC93eC9DaGFuZ2VM
b2cgaGF2ZSBzb21lIGludmFsaWQgdXRmOCBjaGFyYWN0ZXJzLgotICAgICAgICBjaGFuZ2Vsb2df
ZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKGNoYW5nZWxvZ19jb250ZW50cy5kZWNvZGUoInV0Zi04
IiwgImlnbm9yZSIpKQorICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPKGNoYW5nZWxv
Z19jb250ZW50cy5kZWNvZGUoInV0Zi04IiwgImlnbm9yZSIpKQogICAgICAgICByZXR1cm4gQ2hh
bmdlTG9nLnBhcnNlX2xhdGVzdF9lbnRyeV9mcm9tX2ZpbGUoY2hhbmdlbG9nX2ZpbGUpCiAKICAg
ICBkZWYgY2hhbmdlbG9nX2VudHJpZXNfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uLCBjaGFu
Z2VkX2ZpbGVzPU5vbmUpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29u
ZmlnL2NvbW1pdHRlcnMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yMDEsNyArMjAxLDcgQEAgY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgogICAgICAg
ICBzZWxmLl9jb21taXR0ZXJzID0gW10KICAgICAgICAgc2VsZi5fcmV2aWV3ZXJzID0gW10KIAot
ICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBjb250cmlidXRvcnMuaXRlcml0ZW1zKCk6CisgICAg
ICAgIGZvciBuYW1lLCBkYXRhIGluIGNvbnRyaWJ1dG9ycy5pdGVtcygpOgogICAgICAgICAgICAg
Y29udHJpYnV0b3IgPSBOb25lCiAgICAgICAgICAgICBzdGF0dXMgPSBkYXRhLmdldCgnc3RhdHVz
JykKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAicmV2aWV3ZXIiOgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFuc2FjdGlvbi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9u
LnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMyBA
QAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cwogaW1wb3J0IHRp
bWUKLWltcG9ydCB1cmxsaWIyCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAg
ZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IEhUVFBFcnJvciwgVVJMRXJyb3IKK2Vsc2U6CisgICAg
ZnJvbSB1cmxsaWIyIGltcG9ydCBIVFRQRXJyb3IsIFVSTEVycm9yCiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTEsMTMgKzU2LDEzIEBAIGNsYXNzIE5ldHdvcmtU
cmFuc2FjdGlvbihvYmplY3QpOgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KCkKLSAgICAgICAgICAgIGV4Y2VwdCB1
cmxsaWIyLkhUVFBFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBl
OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnRfNDA0X3RvX05vbmUgYW5kIGUuY29k
ZSA9PSA0MDQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICAg
ICAgc2VsZi5fY2hlY2tfZm9yX3RpbWVvdXQoKQogICAgICAgICAgICAgICAgIF9sb2cud2Fybigi
UmVjZWl2ZWQgSFRUUCBzdGF0dXMgJXMgbG9hZGluZyBcIiVzXCIuICBSZXRyeWluZyBpbiAlcyBz
ZWNvbmRzLi4uIiAlIChlLmNvZGUsIGUuZmlsZW5hbWUsIHNlbGYuX2JhY2tvZmZfc2Vjb25kcykp
CiAgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAoKQotICAgICAgICAgICAgZXhjZXB0IHVybGxp
YjIuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJvciBhcyBlOgogICAg
ICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl90aW1lb3V0KCkKICAgICAgICAgICAgICAgICBf
bG9nLndhcm4oJ1JlY2VpdmVkIFVSTEVycm9yOiAie30iIHdoaWxlIGxvYWRpbmcge30uIFJldHJ5
aW5nIGluIHt9IHNlY29uZHMuLi4nLmZvcm1hdChlLnJlYXNvbiwgdXJsLCBzZWxmLl9iYWNrb2Zm
X3NlY29uZHMpKQogICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKCkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9hYnN0cmFjdGV4ZWN1dGl2ZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vYWJzdHJhY3RleGVj
dXRpdmUucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9hYnN0cmFjdGV4ZWN1dGl2ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQotCitmcm9tIHdlYmtpdHB5LmNvbW1v
biBpbXBvcnQgdW5pY29kZQogCiBjbGFzcyBBYnN0cmFjdEV4ZWN1dGl2ZShvYmplY3QpOgogCkBA
IC0xMDEsMjAgKzEwMSwxMyBAQCBjbGFzcyBBYnN0cmFjdEV4ZWN1dGl2ZShvYmplY3QpOgogICAg
ICAgICBwYXNzCiAKICAgICBkZWYgX3N0cmluZ2lmeV9hcmdzKHNlbGYsIGFyZ3MpOgotICAgICAg
ICByZXR1cm4gbWFwKHVuaWNvZGUsIGFyZ3MpCisgICAgICAgIHJldHVybiBtYXAodW5pY29kZS51
bmljb2RlLCBhcmdzKQogCiAgICAgZGVmIGNvbW1hbmRfZm9yX3ByaW50aW5nKHNlbGYsIGFyZ3Mp
OgogICAgICAgICAiIiJSZXR1cm5zIGEgcHJpbnQtcmVhZHkgc3RyaW5nIHJlcHJlc2VudGluZyBj
b21tYW5kIGFyZ3MuCiAgICAgICAgIFRoZSBzdHJpbmcgc2hvdWxkIGJlIGNvcHkvcGFzdGUgcmVh
ZHkgZm9yIGV4ZWN1dGlvbiBpbiBhIHNoZWxsLiIiIgogICAgICAgICBhcmdzID0gc2VsZi5fc3Ry
aW5naWZ5X2FyZ3MoYXJncykKLSAgICAgICAgZXNjYXBlZF9hcmdzID0gW10KLSAgICAgICAgZm9y
IGFyZyBpbiBhcmdzOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHVuaWNvZGUpOgot
ICAgICAgICAgICAgICAgICMgRXNjYXBlIGFueSBub24tYXNjaWkgY2hhcmFjdGVycyBmb3IgZWFz
eSBjb3B5L3Bhc3RlCi0gICAgICAgICAgICAgICAgYXJnID0gYXJnLmVuY29kZSgidW5pY29kZV9l
c2NhcGUiKQotICAgICAgICAgICAgIyBGSVhNRTogRG8gd2UgbmVlZCB0byBmaXggcXVvdGVzIGhl
cmU/Ci0gICAgICAgICAgICBlc2NhcGVkX2FyZ3MuYXBwZW5kKGFyZykKLSAgICAgICAgcmV0dXJu
ICIgIi5qb2luKGVzY2FwZWRfYXJncykKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUuZGVjb2RlKHVu
aWNvZGUuZW5jb2RlKCcgJy5qb2luKGFyZ3MpLCAndW5pY29kZV9lc2NhcGUnKSkKIAogICAgIGRl
ZiBydW5fY29tbWFuZChzZWxmLCBhcmdzLCBjd2Q9Tm9uZSwgZW52PU5vbmUsIGlucHV0PU5vbmUs
IGVycm9yX2hhbmRsZXI9Tm9uZSwgaWdub3JlX2Vycm9ycz1GYWxzZSwKICAgICAgICAgcmV0dXJu
X2V4aXRfY29kZT1GYWxzZSwgcmV0dXJuX3N0ZGVycj1UcnVlLCBkZWNvZGVfb3V0cHV0PVRydWUp
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jh
c2hsb2dzLnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBA
IGltcG9ydCBkYXRldGltZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogCitmcm9tIHdlYmtp
dHB5LmNvbW1vbiBpbXBvcnQgdW5pY29kZQorCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIApAQCAtMTA5LDcgKzExMSw3IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgog
ICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAgICAg
dHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmls
ZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46Ci0gICAgICAgICAgICAgICAgICAgIGxv
Z19maWxlID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVj
b2RlKCdhc2NpaScsICdpZ25vcmUnKQorICAgICAgICAgICAgICAgICAgICBsb2dfZmlsZSA9IHVu
aWNvZGUuZGVjb2RlKHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKHBhdGgp
LCAnYXNjaWknLCAnaWdub3JlJykKICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLkdM
T0JBTF9QSURfUkVHRVguc2VhcmNoKGxvZ19maWxlKQogICAgICAgICAgICAgICAgICAgICBpZiBt
YXRjaDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGludChtYXRjaC5ncm91cCgncGlkJykp
ID09IHBpZDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFz
aGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2aXNpb24gMjUwMjYzKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uY3Jhc2hsb2dzIGltCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3Rl
bV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LnRo
aXJkcGFydHkubW9jayBpbXBvcnQgTW9jaworZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHVu
aWNvZGUKIAogIyBOZWVkZWQgdG8gc3VwcG9ydCBXaW5kb3dzIHBvcnQgdGVzdHMKIGZyb20gd2Vi
a2l0cHkucG9ydC53aW4gaW1wb3J0IFdpblBvcnQKQEAgLTI5OCw2ICsyOTgsOSBAQCBjbGFzcyBD
cmFzaExvZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5maWxlc1snL1Vz
ZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzL0R1bXBSZW5kZXJUcmVlXzIw
MTEtMDYtMTMtMTUwNzIxX3F1YWR6ZW4uY3Jhc2gnXSA9IE5vbmUKICAgICAgICAgc2VsZi5maWxl
c1snL1VzZXJzL21vY2svTGlicmFyeS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzL0R1bXBSZW5kZXJU
cmVlXzIwMTEtMDYtMTMtMTUwNzIyX3F1YWR6ZW4uY3Jhc2gnXSA9IHNlbGYub3RoZXJfcHJvY2Vz
c19tb2NrX2NyYXNoX3JlcG9ydAogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9jay9MaWJy
YXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3
MjNfcXVhZHplbi5jcmFzaCddID0gc2VsZi5taXNmb3JtYXR0ZWRfbW9ja19jcmFzaF9yZXBvcnQK
KworICAgICAgICBzZWxmLmZpbGVzID0ge2tleTogdW5pY29kZS5lbmNvZGUodmFsdWUpIGZvciBr
ZXksIHZhbHVlIGluIHNlbGYuZmlsZXMuaXRlbXMoKX0KKwogICAgICAgICBzZWxmLmZpbGVzeXN0
ZW0gPSBNb2NrRmlsZVN5c3RlbShzZWxmLmZpbGVzKQogICAgICAgICBjcmFzaF9sb2dzID0gQ3Jh
c2hMb2dzKE1vY2tTeXN0ZW1Ib3N0KGZpbGVzeXN0ZW09c2VsZi5maWxlc3lzdGVtKSwgQ3Jhc2hM
b2dzVGVzdC5EQVJXSU5fTU9DS19DUkFTSF9ESVJFQ1RPUlkpCiAgICAgICAgIGxvZ3MgPSBzZWxm
LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFnbm9z
dGljUmVwb3J0cy8nKQpAQCAtMzEzLDggKzMxNiw4IEBAIGNsYXNzIENyYXNoTG9nc1Rlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBhbGxfbG9ncyA9IGNyYXNoX2xvZ3MuZmluZF9hbGxf
bG9ncygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbF9sb2dzKSwgOCkKIAotICAg
ICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIGFsbF9sb2dzLml0ZXJpdGVtcygpOgotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyYXNoX2xvZyBpbiBzZWxmLmZpbGVzLnZhbHVlcygpKQor
ICAgICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIGFsbF9sb2dzLml0ZW1zKCk6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUoY3Jhc2hfbG9nIGluIFt1bmljb2RlLmRlY29kZSh2YWx1ZSkg
Zm9yIHZhbHVlIGluIHNlbGYuZmlsZXMudmFsdWVzKCldKQogICAgICAgICAgICAgaWYgdGVzdC5z
cGxpdCgnLScpWzBdICE9ICdTYW5kYm94JzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRy
dWUodGVzdCA9PSAiVW5rbm93biIgb3IgaW50KHRlc3Quc3BsaXQoIi0iKVsxXSkgaW4gcmFuZ2Uo
Mjg1MjcsIDI4NTMxKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2Vudmlyb25tZW50X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9lbnZpcm9ubWVudF91bml0dGVzdC5weQkocmV2aXNpb24g
MjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Vudmlyb25t
ZW50X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIGltcG9y
dCB1bml0dGVzdAogCi1mcm9tIC5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5lbnZpcm9ubWVudCBpbXBvcnQgRW52aXJvbm1lbnQKIAog
CiBjbGFzcyBFbnZpcm9ubWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZp
c2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhl
Y3V0aXZlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBlcnJubwogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKQEAgLTM5LDYgKzM4LDcgQEAgaW1wb3J0
IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmFic3RyYWN0ZXhlY3V0aXZlIGlt
cG9ydCBBYnN0cmFjdEV4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1
dHRlZSBpbXBvcnQgVGVlCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgdW5pY29kZQogCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTcxLDcgKzcxLDcgQEAgY2xh
c3MgU2NyaXB0RXJyb3IoRXhjZXB0aW9uKToKICAgICAgICAgICAgICAgICByZXR1cm4gdSIlc1xu
XG5MYXN0ICVzIGNoYXJhY3RlcnMgb2Ygb3V0cHV0OlxuJXMiICUgXAogICAgICAgICAgICAgICAg
ICAgICAoc2VsZiwgb3V0cHV0X2xpbWl0LCBzZWxmLm91dHB1dFstb3V0cHV0X2xpbWl0Ol0pCiAg
ICAgICAgICAgICByZXR1cm4gdSIlc1xuXG4lcyIgJSAoc2VsZiwgc2VsZi5vdXRwdXQpCi0gICAg
ICAgIHJldHVybiB1bmljb2RlKHNlbGYpCisgICAgICAgIHJldHVybiB1bmljb2RlLnVuaWNvZGUo
c2VsZikKIAogICAgIGRlZiBjb21tYW5kX25hbWUoc2VsZik6CiAgICAgICAgIGNvbW1hbmRfcGF0
aCA9IHNlbGYuc2NyaXB0X2FyZ3MKQEAgLTg0LDYgKzg0LDE5IEBAIGNsYXNzIEV4ZWN1dGl2ZShB
YnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgUElQRSA9IHN1YnByb2Nlc3MuUElQRQogICAgIFNURE9V
VCA9IHN1YnByb2Nlc3MuU1RET1VUCiAKKyAgICBjbGFzcyBXcmFwcGVkUG9wZW4ob2JqZWN0KToK
KyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcGVuKToKKyAgICAgICAgICAgIGZvciBhdHRy
aWJ1dGUgaW4gZGlyKHBvcGVuKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyaWJ1dGUuc3RhcnRz
d2l0aCgnX18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAg
ICBzZXRhdHRyKHNlbGYsIGF0dHJpYnV0ZSwgZ2V0YXR0cihwb3BlbiwgYXR0cmlidXRlKSkKKwor
ICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKwor
ICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi53YWl0
KCkKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5waWRfdG9fc3lzdGVt
X3BpZCA9IHt9CiAgICAgICAgIHNlbGYuX2lzX25hdGl2ZV93aW4gPSBzeXMucGxhdGZvcm0uc3Rh
cnRzd2l0aCgnd2luJykKQEAgLTEwOCwxOCArMTIxLDEzIEBAIGNsYXNzIEV4ZWN1dGl2ZShBYnN0
cmFjdEV4ZWN1dGl2ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3Nl
X2Zkcz1zZWxmLl9zaG91bGRfY2xvc2VfZmRzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoqa3dhcmdzKQogCi0gICAgICAgICMgVXNlIG91ciBvd24gY3VzdG9tIHdhaXQg
bG9vcCBiZWNhdXNlIFBvcGVuIGlnbm9yZXMgYSB0ZWUnZAotICAgICAgICAjIHN0ZGVyci9zdGRv
dXQuCi0gICAgICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUgaW1wcm92ZWQgbm90IHRvIGZsYXR0
ZW4gb3V0cHV0IHRvIHN0ZG91dC4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIG91
dHB1dF9saW5lID0gY2hpbGRfcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKQotICAgICAgICAgICAg
aWYgb3V0cHV0X2xpbmUgPT0gIiIgYW5kIGNoaWxkX3Byb2Nlc3MucG9sbCgpICE9IE5vbmU6Ci0g
ICAgICAgICAgICAgICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBP
U0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcv
aXNzdWUxNzMxNzE3Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkX3Byb2Nlc3MucG9sbCgp
Ci0gICAgICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBwcm9jZXNzIHdyb3RlIHRv
IHVzIGluIHV0Zi04LAotICAgICAgICAgICAgIyBzbyBubyByZS1lbmNvZGluZyBpcyBuZWNlc3Nh
cnkgYmVmb3JlIHdyaXRpbmcgaGVyZS4KLSAgICAgICAgICAgIHRlZWRfb3V0cHV0LndyaXRlKG91
dHB1dF9saW5lKQorICAgICAgICB3aXRoIGNoaWxkX3Byb2Nlc3M6CisgICAgICAgICAgICAjIFVz
ZSBvdXIgb3duIGN1c3RvbSB3YWl0IGxvb3AgYmVjYXVzZSBQb3BlbiBpZ25vcmVzIGEgdGVlJ2QK
KyAgICAgICAgICAgICMgc3RkZXJyL3N0ZG91dC4KKyAgICAgICAgICAgICMgRklYTUU6IFRoaXMg
Y291bGQgYmUgaW1wcm92ZWQgbm90IHRvIGZsYXR0ZW4gb3V0cHV0IHRvIHN0ZG91dC4KKyAgICAg
ICAgICAgIHdoaWxlIGNoaWxkX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgb3V0cHV0X2xpbmUgPSBjaGlsZF9wcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAg
ICAgICAgICAgdGVlZF9vdXRwdXQud3JpdGUodW5pY29kZS5kZWNvZGVfZm9yKG91dHB1dF9saW5l
LCBzdHIpKQogCiAgICAgIyBGSVhNRTogUmVtb3ZlIHRoaXMgZGVwcmVjYXRlZCBtZXRob2QgYW5k
IG1vdmUgY2FsbGVycyB0byBydW5fY29tbWFuZC4KICAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCBp
cyBhIGhhY2sgdG8gYWxsb3cgcnVubmluZyBjb21tYW5kIHdoaWNoIGJvdGgKQEAgLTEyOCwyMSAr
MTM2LDI1IEBAIGNsYXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgIyBidXQg
c3RpbGwgaGF2ZSB0aGUgb3V0cHV0IHRvIHN0dWZmIGludG8gYSBsb2cgZmlsZS4KICAgICBkZWYg
cnVuX2FuZF90aHJvd19pZl9mYWlsKHNlbGYsIGFyZ3MsIHF1aWV0PUZhbHNlLCBkZWNvZGVfb3V0
cHV0PVRydWUsICoqa3dhcmdzKToKICAgICAgICAgIyBDYWNoZSB0aGUgY2hpbGQncyBvdXRwdXQg
bG9jYWxseSBzbyBpdCBjYW4gYmUgdXNlZCBmb3IgZXJyb3IgcmVwb3J0cy4KLSAgICAgICAgY2hp
bGRfb3V0X2ZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNoaWxkX291dF9maWxl
ID0gdW5pY29kZS5TdHJpbmdJTygpCiAgICAgICAgIHRlZV9zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0g
ICAgICAgIGlmIHF1aWV0OgotICAgICAgICAgICAgZGV2X251bGwgPSBvcGVuKG9zLmRldm51bGws
ICJ3IikgICMgRklYTUU6IERvZXMgdGhpcyBuZWVkIGFuIGVuY29kaW5nPwotICAgICAgICAgICAg
dGVlX3N0ZG91dCA9IGRldl9udWxsCi0gICAgICAgIGNoaWxkX3N0ZG91dCA9IFRlZShjaGlsZF9v
dXRfZmlsZSwgdGVlX3N0ZG91dCkKLSAgICAgICAgZXhpdF9jb2RlID0gc2VsZi5fcnVuX2NvbW1h
bmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCBjaGlsZF9zdGRvdXQsICoqa3dhcmdzKQotICAgICAg
ICBpZiBxdWlldDoKLSAgICAgICAgICAgIGRldl9udWxsLmNsb3NlKCkKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgZGV2X251bGwgPSBvcGVuKG9z
LmRldm51bGwsICJ3IikgICMgRklYTUU6IERvZXMgdGhpcyBuZWVkIGFuIGVuY29kaW5nPworICAg
ICAgICAgICAgICAgIHRlZV9zdGRvdXQgPSBkZXZfbnVsbAorICAgICAgICAgICAgY2hpbGRfc3Rk
b3V0ID0gVGVlKGNoaWxkX291dF9maWxlLCB0ZWVfc3Rkb3V0KQorICAgICAgICAgICAgZXhpdF9j
b2RlID0gc2VsZi5fcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCBjaGlsZF9zdGRv
dXQsICoqa3dhcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgcXVpZXQ6Cisg
ICAgICAgICAgICAgICAgZGV2X251bGwuY2xvc2UoKQogCiAgICAgICAgIGNoaWxkX291dHB1dCA9
IGNoaWxkX291dF9maWxlLmdldHZhbHVlKCkKICAgICAgICAgY2hpbGRfb3V0X2ZpbGUuY2xvc2Uo
KQogCiAgICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6Ci0gICAgICAgICAgICBjaGlsZF9vdXRwdXQg
PSBjaGlsZF9vdXRwdXQuZGVjb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKKyAg
ICAgICAgICAgIGNoaWxkX291dHB1dCA9IHVuaWNvZGUuZGVjb2RlKGNoaWxkX291dHB1dCwgc2Vs
Zi5fY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
Y2hpbGRfb3V0cHV0ID0gdW5pY29kZS5lbmNvZGUoY2hpbGRfb3V0cHV0LCBzZWxmLl9jaGlsZF9w
cm9jZXNzX2VuY29kaW5nKCkpCiAKICAgICAgICAgaWYgZXhpdF9jb2RlOgogICAgICAgICAgICAg
cmFpc2UgU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywKQEAgLTI4NiwxNyArMjk4LDE3IEBA
IGNsYXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBl
bHNlOgotICAgICAgICAgICAgcHNfcHJvY2VzcyA9IHNlbGYucG9wZW4oWydwcycsICctZW8nLCAn
cGlkLGNvbW0nXSwgc3Rkb3V0PXNlbGYuUElQRSwgc3RkZXJyPXNlbGYuUElQRSkKLSAgICAgICAg
ICAgIHN0ZG91dCwgXyA9IHBzX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgZm9y
IGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICAgICAgICAgICMgSW4gc29tZSBjYXNlcyB0aGUgbGluZSBjYW4gY29udGFpbiBvbmUg
b3IgbW9yZQotICAgICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgd2hpdGUtc3BhY2VzLCBzbyBz
dHJpcCBpdCBiZWZvcmUgc3BsaXQuCi0gICAgICAgICAgICAgICAgICAgIHBpZCwgcHJvY2Vzc19u
YW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYg
cHJvY2Vzc19uYW1lX2ZpbHRlcihwcm9jZXNzX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKLSAgICAgICAgICAgICAgICBleGNlcHQg
VmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3
aXRoIHNlbGYucG9wZW4oWydwcycsICctZW8nLCAncGlkLGNvbW0nXSwgc3Rkb3V0PXNlbGYuUElQ
RSwgc3RkZXJyPXNlbGYuUElQRSkgYXMgcHNfcHJvY2VzczoKKyAgICAgICAgICAgICAgICBzdGRv
dXQsIF8gPSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICAgICBmb3IgbGlu
ZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAjIEluIHNvbWUgY2FzZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4g
b25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyB3aGl0ZS1zcGFj
ZXMsIHNvIHN0cmlwIGl0IGJlZm9yZSBzcGxpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBp
ZCwgcHJvY2Vzc19uYW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAg
ICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcwogCiAgICAgICAgIHJldHVybiBzb3J0ZWQocnVubmluZ19waWRzKQogCkBA
IC0zNTUsOCArMzY3LDcgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToKICAg
ICAgICAgIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NTI4
CiAgICAgICAgICMgZm9yIGFuIGV4YW1wbGUgb2YgYSByZWdyZXNpb24gY2F1c2VkIGJ5IHBhc3Np
bmcgYSB1bmljb2RlIHN0cmluZyBkaXJlY3RseS4KICAgICAgICAgIyBGSVhNRTogV2UgbWF5IG5l
ZWQgdG8gZW5jb2RlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuCi0gICAgICAg
IGlmIGlzaW5zdGFuY2UoaW5wdXQsIHVuaWNvZGUpOgotICAgICAgICAgICAgaW5wdXQgPSBpbnB1
dC5lbmNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQorICAgICAgICBpbnB1dCA9
IHVuaWNvZGUuZW5jb2RlKGlucHV0LCBzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCiAg
ICAgICAgIHJldHVybiAoc2VsZi5QSVBFLCBpbnB1dCkKIAogICAgICMgRklYTUU6IHJ1bl9hbmRf
dGhyb3dfaWZfZmFpbCBzaG91bGQgYmUgbWVyZ2VkIGludG8gdGhpcyBtZXRob2QuCkBAIC0zODQs
MzMgKzM5NSwzNyBAQCBjbGFzcyBFeGVjdXRpdmUoQWJzdHJhY3RFeGVjdXRpdmUpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnY9ZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9c2Vs
Zi5fc2hvdWxkX2Nsb3NlX2ZkcygpKQotICAgICAgICBvdXRwdXQgPSBwcm9jZXNzLmNvbW11bmlj
YXRlKHN0cmluZ190b19jb21tdW5pY2F0ZSlbMF0KLQotICAgICAgICAjIHJ1bl9jb21tYW5kIGF1
dG9tYXRpY2FsbHkgZGVjb2RlcyB0byB1bmljb2RlKCkgYW5kIGNvbnZlcnRzIENSTEYgdG8gTEYg
dW5sZXNzIGV4cGxpY2l0bHkgdG9sZCBub3QgdG8uCi0gICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6
Ci0gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3Nf
ZW5jb2RpbmcoKSkucmVwbGFjZSgnXHJcbicsICdcbicpCi0KLSAgICAgICAgIyB3YWl0KCkgaXMg
bm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgIyBo
dHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICBleGl0X2NvZGUgPSBw
cm9jZXNzLndhaXQoKQorICAgICAgICB3aXRoIHByb2Nlc3M6CisgICAgICAgICAgICBpZiBub3Qg
c3RyaW5nX3RvX2NvbW11bmljYXRlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3Mu
Y29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRw
dXQgPSBwcm9jZXNzLmNvbW11bmljYXRlKHVuaWNvZGUuZW5jb2RlKHN0cmluZ190b19jb21tdW5p
Y2F0ZSwgJ3V0Zi04JykpWzBdCisKKyAgICAgICAgICAgICMgcnVuX2NvbW1hbmQgYXV0b21hdGlj
YWxseSBkZWNvZGVzIHRvIHVuaWNvZGUoKSBhbmQgY29udmVydHMgQ1JMRiB0byBMRiB1bmxlc3Mg
ZXhwbGljaXRseSB0b2xkIG5vdCB0by4KKyAgICAgICAgICAgIGlmIGRlY29kZV9vdXRwdXQ6Cisg
ICAgICAgICAgICAgICAgb3V0cHV0ID0gdW5pY29kZS5kZWNvZGUob3V0cHV0LCBzZWxmLl9jaGls
ZF9wcm9jZXNzX2VuY29kaW5nKCkpLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorCisgICAgICAgICAg
ICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRv
OgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAg
ICAgICAgICAgZXhpdF9jb2RlID0gcHJvY2Vzcy53YWl0KCkKIAotICAgICAgICBfbG9nLmRlYnVn
KCciJXMiIHRvb2sgJS4yZnMnICUgKHNlbGYuY29tbWFuZF9mb3JfcHJpbnRpbmcoYXJncyksIHRp
bWUudGltZSgpIC0gc3RhcnRfdGltZSkpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCciJXMiIHRv
b2sgJS4yZnMnICUgKHNlbGYuY29tbWFuZF9mb3JfcHJpbnRpbmcoYXJncyksIHRpbWUudGltZSgp
IC0gc3RhcnRfdGltZSkpCiAKLSAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKLSAgICAgICAg
ICAgIHJldHVybiBleGl0X2NvZGUKKyAgICAgICAgICAgIGlmIHJldHVybl9leGl0X2NvZGU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRfY29kZQogCi0gICAgICAgIGlmIGV4aXRfY29kZToK
LSAgICAgICAgICAgIHNjcmlwdF9lcnJvciA9IFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFyZ3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGU9ZXhpdF9j
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PW91dHB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1jd2QpCi0KLSAg
ICAgICAgICAgIGlmIGlnbm9yZV9lcnJvcnM6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGVycm9y
X2hhbmRsZXIgaXMgTm9uZSwgImRvbid0IHNwZWNpZnkgZXJyb3JfaGFuZGxlciBpZiBpZ25vcmVf
ZXJyb3JzIGlzIFRydWUiCi0gICAgICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9IEV4ZWN1dGl2
ZS5pZ25vcmVfZXJyb3IKKyAgICAgICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgICAgICAg
ICBzY3JpcHRfZXJyb3IgPSBTY3JpcHRFcnJvcihzY3JpcHRfYXJncz1hcmdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRfY29kZT1leGl0X2NvZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PW91dHB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkKQorCisg
ICAgICAgICAgICAgICAgaWYgaWdub3JlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0IGVycm9yX2hhbmRsZXIgaXMgTm9uZSwgImRvbid0IHNwZWNpZnkgZXJyb3JfaGFuZGxlciBp
ZiBpZ25vcmVfZXJyb3JzIGlzIFRydWUiCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2hhbmRs
ZXIgPSBFeGVjdXRpdmUuaWdub3JlX2Vycm9yCiAKLSAgICAgICAgICAgIChlcnJvcl9oYW5kbGVy
IG9yIHNlbGYuZGVmYXVsdF9lcnJvcl9oYW5kbGVyKShzY3JpcHRfZXJyb3IpCi0gICAgICAgIHJl
dHVybiBvdXRwdXQKKyAgICAgICAgICAgICAgICAoZXJyb3JfaGFuZGxlciBvciBzZWxmLmRlZmF1
bHRfZXJyb3JfaGFuZGxlcikoc2NyaXB0X2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuIG91dHB1
dAogCiAgICAgZGVmIF9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFdp
bjMyIFB5dGhvbiAyLnggdXNlcyBDcmVhdGVQcm9jZXNzQSByYXRoZXIgdGhhbiBDcmVhdGVQcm9j
ZXNzVwpAQCAtNDQxLDExICs0NTYsMTEgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0
aXZlKToKICAgICBkZWYgX2VuY29kZV9hcmd1bWVudF9pZl9uZWVkZWQoc2VsZiwgYXJndW1lbnQp
OgogICAgICAgICBpZiBub3Qgc2VsZi5fc2hvdWxkX2VuY29kZV9jaGlsZF9wcm9jZXNzX2FyZ3Vt
ZW50cygpOgogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Ci0gICAgICAgIHJldHVybiBhcmd1
bWVudC5lbmNvZGUoc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQorICAgICAgICByZXR1
cm4gdW5pY29kZS5lbmNvZGUoYXJndW1lbnQsIHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2Rpbmco
KSkKIAogICAgIGRlZiBfc3RyaW5naWZ5X2FyZ3Moc2VsZiwgYXJncyk6CiAgICAgICAgICMgUG9w
ZW4gd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYXJncyBhcmUgbm9uLXN0cmluZ3MgKGxpa2Ug
aW50KCkpCi0gICAgICAgIHN0cmluZ19hcmdzID0gbWFwKHVuaWNvZGUsIGFyZ3MpCisgICAgICAg
IHN0cmluZ19hcmdzID0gbWFwKHVuaWNvZGUudW5pY29kZSwgYXJncykKICAgICAgICAgIyBUaGUg
V2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBQb3BlbiBjYW5ub3QgaGFuZGxlIHVuaWNvZGUgc3Ry
aW5ncy4gOigKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl9lbmNvZGVfYXJndW1lbnRfaWZfbmVl
ZGVkLCBzdHJpbmdfYXJncykKIApAQCAtNDc4LDcgKzQ5MywxMiBAQCBjbGFzcyBFeGVjdXRpdmUo
QWJzdHJhY3RFeGVjdXRpdmUpOgogICAgICAgICAgICAgc3RyaW5nX2FyZ3MgPSBhcmdzCiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICBzdHJpbmdfYXJncyA9IHNlbGYuX3N0cmluZ2lmeV9hcmdz
KGFyZ3MpCi0gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKHN0cmluZ19hcmdzLCAqKmt3
YXJncykKKworICAgICAgICAjIFB5dGhvbiAzIHRyZWF0cyBQb3BlbiBhcyBhIGNvbnRleHQgbWFu
YWdlciwgd2Ugc2hvdWxkIGFsbG93IHRoaXMgaW4gUHl0aG9uIDIKKyAgICAgICAgcmVzdWx0ID0g
c3VicHJvY2Vzcy5Qb3BlbihzdHJpbmdfYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIG5vdCBj
YWxsYWJsZShnZXRhdHRyKHJlc3VsdCwgIl9fZW50ZXJfXyIsIE5vbmUpKSBhbmQgbm90IGNhbGxh
YmxlKGdldGF0dHIocmVzdWx0LCAiX19leGl0X18iLCBOb25lKSk6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5XcmFwcGVkUG9wZW4ocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAg
ICBkZWYgcnVuX2luX3BhcmFsbGVsKHNlbGYsIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMsIHByb2Nl
c3Nlcz1Ob25lKToKICAgICAgICAgIiIiUnVucyBhIGxpc3Qgb2YgKGNtZF9saW5lIGxpc3QsIGN3
ZCBzdHJpbmcpIHR1cGxlcyBpbiBwYXJhbGxlbCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgKHJldGNv
ZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZXMuIiIiCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CShyZXZpc2lv
biAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IG9zCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnVuaWNvZGUgaW1wb3J0IEJ5dGVzSU8s
IHVuaWNvZGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNj
cmlwdEVycm9yCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTM4LDkg
KzM4LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xhc3MgTW9ja1By
b2Nlc3Mob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3Rkb3V0PSdNT0NLIFNURE9V
VFxuJywgc3RkZXJyPScnKToKICAgICAgICAgc2VsZi5waWQgPSA0MgotICAgICAgICBzZWxmLnN0
ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKHN0ZG91dCkKLSAgICAgICAgc2VsZi5zdGRlcnIgPSBT
dHJpbmdJTy5TdHJpbmdJTyhzdGRlcnIpCi0gICAgICAgIHNlbGYuc3RkaW4gPSBTdHJpbmdJTy5T
dHJpbmdJTygpCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gQnl0ZXNJTyhzdGRvdXQpCisgICAgICAg
IHNlbGYuc3RkZXJyID0gQnl0ZXNJTyhzdGRlcnIpCisgICAgICAgIHNlbGYuc3RkaW4gPSBCeXRl
c0lPKCkKICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMAogICAgICAgICBzZWxmLl9pc19ydW5u
aW5nID0gRmFsc2UKIApAQCAtNTcsNiArNTcsMTIgQEAgY2xhc3MgTW9ja1Byb2Nlc3Mob2JqZWN0
KToKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNv
ZGUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAg
ICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLndhaXQoKQorCiAKICMg
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aCBNb2NrRXhlY3V0aXZlMgogY2xhc3Mg
TW9ja0V4ZWN1dGl2ZShvYmplY3QpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGlmIHRoaXJk
X3BhcnR5X3B5IG5vdCBpbiBzeXMucGF0aDoKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCB1bmljb2RlCiAKIAogY2xhc3MgU2NyaXB0RXJyb3JUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTExOCwxMyArMTE5LDE1IEBAIGNsYXNzIEV4ZWN1dGl2
ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2F1dG9fc3RyaW5naWZ5X2Fy
Z3Moc2VsZik6CiAgICAgICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCiAgICAgICAgIGV4ZWN1
dGl2ZS5ydW5fY29tbWFuZChjb21tYW5kX2xpbmUoJ2VjaG8nLCAxKSkKLSAgICAgICAgZXhlY3V0
aXZlLnBvcGVuKGNvbW1hbmRfbGluZSgnZWNobycsIDEpLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUp
LndhaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdlY2hvIDEnLCBleGVjdXRpdmUuY29t
bWFuZF9mb3JfcHJpbnRpbmcoWydlY2hvJywgMV0pKQorICAgICAgICB3aXRoIGV4ZWN1dGl2ZS5w
b3Blbihjb21tYW5kX2xpbmUoJ2VjaG8nLCAxKSwgc3Rkb3V0PWV4ZWN1dGl2ZS5QSVBFKSBhcyBw
cm9jZXNzOgorICAgICAgICAgICAgcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2VjaG8gMScsIGV4ZWN1dGl2ZS5jb21tYW5kX2Zvcl9wcmludGluZyhbJ2VjaG8n
LCAxXSkpCiAKICAgICBkZWYgdGVzdF9wb3Blbl9hcmdzKHNlbGYpOgogICAgICAgICBleGVjdXRp
dmUgPSBFeGVjdXRpdmUoKQogICAgICAgICAjIEV4cGxpY2l0bHkgbmFtaW5nIHRoZSAnYXJncycg
YXJndW1lbnQgc2hvdWxkIG5vdCB0aG93IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgZXhlY3V0aXZl
LnBvcGVuKGFyZ3M9Y29tbWFuZF9saW5lKCdlY2hvJywgMSksIHN0ZG91dD1leGVjdXRpdmUuUElQ
RSkud2FpdCgpCisgICAgICAgIHdpdGggZXhlY3V0aXZlLnBvcGVuKGFyZ3M9Y29tbWFuZF9saW5l
KCdlY2hvJywgMSksIHN0ZG91dD1leGVjdXRpdmUuUElQRSkgYXMgcHJvY2VzczoKKyAgICAgICAg
ICAgIHByb2Nlc3Mud2FpdCgpCiAKICAgICBkZWYgdGVzdF9ydW5fY29tbWFuZF93aXRoX3VuaWNv
ZGUoc2VsZik6CiAgICAgICAgICIiIlZhbGlkYXRlIHRoYXQgaXQgaXMgc2FmZSB0byBwYXNzIHVu
aWNvZGUoKSBvYmplY3RzCkBAIC0xMzUsMTEgKzEzOCwxMSBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGVuY29kaW5nID0gJ21iY3MnCiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcKLSAgICAgICAgZW5jb2Rl
ZF90b3IgPSB1bmljb2RlX3Rvcl9pbnB1dC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIGVuY29k
ZWRfdG9yID0gdW5pY29kZS5lbmNvZGUodW5pY29kZV90b3JfaW5wdXQsIGVuY29kaW5nKQogICAg
ICAgICAjIE9uIFdpbmRvd3MsIHdlIGV4cGVjdCB0aGUgdW5pY29kZS0+bWJjcy0+dW5pY29kZSBy
b3VuZHRyaXAgdG8gYmUKICAgICAgICAgIyBsb3NzeS4gT24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBl
eHBlY3QgYSBsb3NzbGVzcyByb3VuZHRyaXAuCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFy
dHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgIHVuaWNvZGVfdG9yX291dHB1dCA9IGVuY29kZWRf
dG9yLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIHVuaWNvZGVfdG9yX291dHB1dCA9IHVu
aWNvZGUuZGVjb2RlKGVuY29kZWRfdG9yLCBlbmNvZGluZykKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIHVuaWNvZGVfdG9yX291dHB1dCA9IHVuaWNvZGVfdG9yX2lucHV0CiAKQEAgLTE2Nyw0
NCArMTcwLDQ0IEBAIGNsYXNzIEV4ZWN1dGl2ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAg
ICAgZGVmIHNlcmlhbF90ZXN0X2tpbGxfcHJvY2VzcyhzZWxmKToKICAgICAgICAgZXhlY3V0aXZl
ID0gRXhlY3V0aXZlKCkKLSAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4obmV2ZXJf
ZW5kaW5nX2NvbW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwcm9jZXNzLnBvbGwoKSwgTm9uZSkgICMgUHJvY2VzcyBpcyBydW5uaW5nCi0g
ICAgICAgIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocHJvY2Vzcy5waWQpCi0gICAgICAgICMgTm90
ZTogQ2FuJ3QgdXNlIGEgdGVybmFyeSBzaW5jZSBzaWduYWwuU0lHS0lMTCBpcyB1bmRlZmluZWQg
Zm9yIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFy
dHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDc5MAotICAgICAgICAgICAgIyBXZSBzZWVtIHRvIGdldCBl
aXRoZXIgMCBvciAxIGhlcmUgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICAgICAgc2VsZi5hc3Nl
cnRJbihwcm9jZXNzLndhaXQoKSwgKDAsIDEpKQotICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9
PSAiY3lnd2luIjoKLSAgICAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05ODE5NgotICAgICAgICAgICAgIyBjeWd3aW4gc2VlbXMgdG8gZ2l2
ZSB1cyBlaXRoZXIgU0lHQUJSVCBvciBTSUdLSUxMCi0gICAgICAgICAgICAjIE5hdGl2ZSBXaW5k
b3dzICh2aWEgQ3lnd2luKSByZXR1cm5zIEVOT1RCTEsgKC0xNSkKLSAgICAgICAgICAgIHNlbGYu
YXNzZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgtc2lnbmFsLlNJR0FCUlQsIC1zaWduYWwuU0lHS0lM
TCwgLTE1KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4cGVjdGVkX2V4aXRfY29kZSA9
IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLndh
aXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQorICAgICAgICB3aXRoIGV4ZWN1dGl2ZS5wb3Blbihu
ZXZlcl9lbmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBwcm9jZXNz
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLnBvbGwoKSwgTm9uZSkgICMg
UHJvY2VzcyBpcyBydW5uaW5nCisgICAgICAgICAgICBleGVjdXRpdmUua2lsbF9wcm9jZXNzKHBy
b2Nlc3MucGlkKQorICAgICAgICAgICAgIyBOb3RlOiBDYW4ndCB1c2UgYSB0ZXJuYXJ5IHNpbmNl
IHNpZ25hbC5TSUdLSUxMIGlzIHVuZGVmaW5lZCBmb3Igc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIK
KyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAg
ICAgICAgICAjIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTQ3OTAKKyAgICAgICAgICAgICAgICAjIFdlIHNlZW0gdG8gZ2V0IGVpdGhlciAwIG9yIDEgaGVy
ZSBmb3Igc29tZSByZWFzb24uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwcm9jZXNz
LndhaXQoKSwgKDAsIDEpKQorICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dp
biI6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4MTk2CisgICAgICAgICAgICAgICAgIyBjeWd3aW4gc2VlbXMgdG8gZ2l2
ZSB1cyBlaXRoZXIgU0lHQUJSVCBvciBTSUdLSUxMCisgICAgICAgICAgICAgICAgIyBOYXRpdmUg
V2luZG93cyAodmlhIEN5Z3dpbikgcmV0dXJucyBFTk9UQkxLICgtMTUpCisgICAgICAgICAgICAg
ICAgc2VsZi5hc3NlcnRJbihwcm9jZXNzLndhaXQoKSwgKC1zaWduYWwuU0lHQUJSVCwgLXNpZ25h
bC5TSUdLSUxMLCAtMTUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBl
Y3RlZF9leGl0X2NvZGUgPSAtc2lnbmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHByb2Nlc3Mud2FpdCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCiAKLSAgICAgICAg
IyBLaWxsaW5nIGFnYWluIHNob3VsZCBmYWlsIHNpbGVudGx5LgotICAgICAgICBleGVjdXRpdmUu
a2lsbF9wcm9jZXNzKHByb2Nlc3MucGlkKQorICAgICAgICAgICAgIyBLaWxsaW5nIGFnYWluIHNo
b3VsZCBmYWlsIHNpbGVudGx5LgorICAgICAgICAgICAgZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhw
cm9jZXNzLnBpZCkKIAogICAgIGRlZiBzZXJpYWxfdGVzdF9raWxsX2FsbChzZWxmKToKICAgICAg
ICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKLSAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3Mu
UG9wZW4obmV2ZXJfZW5kaW5nX2NvbW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvY2Vzcy5wb2xsKCkpICAjIFByb2Nlc3MgaXMgcnVu
bmluZwotICAgICAgICBleGVjdXRpdmUua2lsbF9hbGwobmV2ZXJfZW5kaW5nX2NvbW1hbmQoKVsw
XSkKLSAgICAgICAgIyBOb3RlOiBDYW4ndCB1c2UgYSB0ZXJuYXJ5IHNpbmNlIHNpZ25hbC5TSUdU
RVJNIGlzIHVuZGVmaW5lZCBmb3Igc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIKLSAgICAgICAgaWYg
c3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgotICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2Rl
ID0gMCAgIyBvcy5raWxsIHJlc3VsdHMgaW4gZXhpdCgwKSBmb3IgdGhpcyBwcm9jZXNzLgotICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9j
b2RlKQotICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAg
ICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDc5MAotICAgICAgICAgICAgIyBXZSBzZWVtIHRvIGdldCBlaXRoZXIgMCBvciAxIGhlcmUgZm9y
IHNvbWUgcmVhc29uLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwcm9jZXNzLndhaXQoKSwg
KDAsIDEpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2RlID0g
LXNpZ25hbC5TSUdURVJNCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Mud2Fp
dCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCi0gICAgICAgICMgS2lsbGluZyBhZ2FpbiBzaG91bGQg
ZmFpbCBzaWxlbnRseS4KLSAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGluZ19j
b21tYW5kKClbMF0pCisgICAgICAgIHdpdGggZXhlY3V0aXZlLnBvcGVuKG5ldmVyX2VuZGluZ19j
b21tYW5kKCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2Nlc3M6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydElzTm9uZShwcm9jZXNzLnBvbGwoKSkgICMgUHJvY2VzcyBpcyBydW5uaW5n
CisgICAgICAgICAgICBleGVjdXRpdmUua2lsbF9hbGwobmV2ZXJfZW5kaW5nX2NvbW1hbmQoKVsw
XSkKKyAgICAgICAgICAgICMgTm90ZTogQ2FuJ3QgdXNlIGEgdGVybmFyeSBzaW5jZSBzaWduYWwu
U0lHVEVSTSBpcyB1bmRlZmluZWQgZm9yIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAg
ICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6CisgICAgICAgICAgICAgICAgZXhwZWN0
ZWRfZXhpdF9jb2RlID0gMCAgIyBvcy5raWxsIHJlc3VsdHMgaW4gZXhpdCgwKSBmb3IgdGhpcyBw
cm9jZXNzLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCks
IGV4cGVjdGVkX2V4aXRfY29kZSkKKyAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtLnN0YXJ0
c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDc5MAorICAgICAgICAgICAgICAgICMgV2Ugc2VlbSB0
byBnZXQgZWl0aGVyIDAgb3IgMSBoZXJlIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgICAgICAg
ICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoMCwgMSkpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX2V4aXRfY29kZSA9IC1zaWduYWwuU0lHVEVSTQor
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCksIGV4cGVjdGVk
X2V4aXRfY29kZSkKKyAgICAgICAgICAgICMgS2lsbGluZyBhZ2FpbiBzaG91bGQgZmFpbCBzaWxl
bnRseS4KKyAgICAgICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChuZXZlcl9lbmRpbmdfY29tbWFu
ZCgpWzBdKQogCiAgICAgZGVmIF9hc3NlcnRfd2luZG93c19pbWFnZV9uYW1lKHNlbGYsIG5hbWUs
IGV4cGVjdGVkX3dpbmRvd3NfbmFtZSk6CiAgICAgICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbS5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYg
QEAKIAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IGVycm5vCi1pbXBvcnQgZXhjZXB0aW9ucwogaW1w
b3J0IGZpbGVjbXAKIGltcG9ydCBnbG9iCiBpbXBvcnQgaGFzaGxpYgpAQCAtNDAsNiArMzksOCBA
QCBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnVuaWNvZGUgaW1wb3J0IGRlY29kZQorCiAKIGNsYXNzIEZpbGVTeXN0ZW0ob2Jq
ZWN0KToKICAgICAiIiJGaWxlU3lzdGVtIGludGVyZmFjZSBmb3Igd2Via2l0cHkuCkBAIC0yMjEs
MTEgKzIyMiwxMSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAgICBkZWYgcmVhZF9i
aW5hcnlfZmlsZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjb250ZW50cyBv
ZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhcyBhIGJ5dGUgc3RyaW5nLiIiIgotICAgICAg
ICB3aXRoIGZpbGUocGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdy
YicpIGFzIGY6CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKIAogICAgIGRlZiB3cml0ZV9i
aW5hcnlfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cyk6Ci0gICAgICAgIHdpdGggZmlsZShwYXRo
LCAnd2InKSBhcyBmOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3diJykgYXMgZjoKICAgICAg
ICAgICAgIGYud3JpdGUoY29udGVudHMpCiAKICAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3Jl
YWRpbmcoc2VsZiwgcGF0aCwgZXJyb3JzPSdzdHJpY3QnKToKQEAgLTI1Niw3ICsyNTcsNyBAQCBj
bGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAgICAgICAgVGhlIGZpbGUgaXMgd3JpdHRlbiBl
bmNvZGVkIGFzIFVURi04IHdpdGggbm8gQk9NLiIiIgogICAgICAgICB3aXRoIGNvZGVjcy5vcGVu
KHBhdGgsICd3JywgJ3V0Zi04JywgZXJyb3JzPWVycm9ycykgYXMgZjoKLSAgICAgICAgICAgIGYu
d3JpdGUoY29udGVudHMuZGVjb2RlKCd1dGYtOCcsIGVycm9ycz1lcnJvcnMpIGlmIHR5cGUoY29u
dGVudHMpID09IHN0ciBlbHNlIGNvbnRlbnRzKQorICAgICAgICAgICAgZi53cml0ZShkZWNvZGUo
Y29udGVudHMsIGVycm9ycz1lcnJvcnMpKQogCiAgICAgZGVmIHNoYTEoc2VsZiwgcGF0aCk6CiAg
ICAgICAgIGNvbnRlbnRzID0gc2VsZi5yZWFkX2JpbmFyeV9maWxlKHBhdGgpCkBAIC0yNjUsMTkg
KzI2NiwxNSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgZGVmIHJlbHBhdGgoc2Vs
ZiwgcGF0aCwgc3RhcnQ9Jy4nKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChwYXRo
LCBzdGFydCkKIAotICAgIGNsYXNzIF9XaW5kb3dzRXJyb3IoZXhjZXB0aW9ucy5PU0Vycm9yKToK
LSAgICAgICAgIiIiRmFrZSBleGNlcHRpb24gZm9yIExpbnV4IGFuZCBNYWMuIiIiCi0gICAgICAg
IHBhc3MKLQogICAgIGRlZiByZW1vdmUoc2VsZiwgcGF0aCwgb3NyZW1vdmU9b3MucmVtb3ZlKToK
ICAgICAgICAgIiIiT24gV2luZG93cywgaWYgYSBwcm9jZXNzIHdhcyByZWNlbnRseSBraWxsZWQg
YW5kIGl0IGhlbGQgb24gdG8gYQogICAgICAgICBmaWxlLCB0aGUgT1Mgd2lsbCBob2xkIG9uIHRv
IHRoZSBmaWxlIGZvciBhIHNob3J0IHdoaWxlLiAgVGhpcyBtYWtlcwogICAgICAgICBhdHRlbXB0
cyB0byBkZWxldGUgdGhlIGZpbGUgZmFpbC4gIFRvIHdvcmsgYXJvdW5kIHRoYXQsIHRoaXMgbWV0
aG9kCiAgICAgICAgIHdpbGwgcmV0cnkgZm9yIGEgZmV3IHNlY29uZHMgdW50aWwgV2luZG93cyBp
cyBkb25lIHdpdGggdGhlIGZpbGUuIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4Y2Vw
dGlvbnMuV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAg
ICAgICAgIGV4Y2VwdGlvbnMuV2luZG93c0Vycm9yID0gRmlsZVN5c3RlbS5fV2luZG93c0Vycm9y
CisgICAgICAgICAgICBXaW5PU0Vycm9yID0gV2luZG93c0Vycm9yCisgICAgICAgIGV4Y2VwdCBO
YW1lRXJyb3I6CisgICAgICAgICAgICBXaW5PU0Vycm9yID0gT1NFcnJvcgogCiAgICAgICAgIHJl
dHJ5X3RpbWVvdXRfc2VjID0gMy4wCiAgICAgICAgIHNsZWVwX2ludGVydmFsID0gMC4xCkBAIC0y
ODUsNyArMjgyLDcgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIG9zcmVtb3ZlKHBhdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zLldpbmRvd3NFcnJvciBhcyBlOgor
ICAgICAgICAgICAgZXhjZXB0IFdpbk9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICB0aW1l
LnNsZWVwKHNsZWVwX2ludGVydmFsKQogICAgICAgICAgICAgICAgIHJldHJ5X3RpbWVvdXRfc2Vj
IC09IHNsZWVwX2ludGVydmFsCiAgICAgICAgICAgICAgICAgaWYgcmV0cnlfdGltZW91dF9zZWMg
PCAwOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0
ZW1fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxNSArMjYsMTUgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
LWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGVycm5vCiBpbXBvcnQgaGFzaGxpYgogaW1wb3J0IG9z
CiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIAorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHVu
aWNvZGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogCi0KIGNsYXNz
IE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgc2VwID0gJy8nCiAgICAgcGFyZGlyID0gJy4u
JwpAQCAtMTg2LDcgKzE4Niw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAKICAg
ICAgICAgIyBXZSBjb3VsZCB1c2UgZm5tYXRjaC5mbm1hdGNoLCBidXQgdGhhdCBtaWdodCBub3Qg
ZG8gdGhlIHJpZ2h0IHRoaW5nIG9uIHdpbmRvd3MuCiAgICAgICAgIGV4aXN0aW5nX2ZpbGVzID0g
W3BhdGggZm9yIHBhdGgsIGNvbnRlbnRzIGluIHNlbGYuZmlsZXMuaXRlbXMoKSBpZiBjb250ZW50
cyBpcyBub3QgTm9uZV0KLSAgICAgICAgcmV0dXJuIGZpbHRlcihwYXRoX2ZpbHRlciwgZXhpc3Rp
bmdfZmlsZXMpICsgZmlsdGVyKHBhdGhfZmlsdGVyLCBzZWxmLmRpcnMpCisgICAgICAgIHJldHVy
biBsaXN0KGZpbHRlcihwYXRoX2ZpbHRlciwgZXhpc3RpbmdfZmlsZXMpKSArIGxpc3QoZmlsdGVy
KHBhdGhfZmlsdGVyLCBzZWxmLmRpcnMpKQogCiAgICAgZGVmIGlzYWJzKHNlbGYsIHBhdGgpOgog
ICAgICAgICByZXR1cm4gcGF0aC5zdGFydHN3aXRoKHNlbGYuc2VwKQpAQCAtMzQ0LDcgKzM0NCw3
IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBzZWxmLnJl
YWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVjb2RlKCd1dGYtOCcsIGVycm9ycz1lcnJvcnMpCiAKICAg
ICBkZWYgd3JpdGVfdGV4dF9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnRzLCBlcnJvcnM9J3N0cmlj
dCcpOgotICAgICAgICByZXR1cm4gc2VsZi53cml0ZV9iaW5hcnlfZmlsZShwYXRoLCBjb250ZW50
cy5lbmNvZGUoJ3V0Zi04JywgZXJyb3JzPWVycm9ycykpCisgICAgICAgIHJldHVybiBzZWxmLndy
aXRlX2JpbmFyeV9maWxlKHBhdGgsIHVuaWNvZGUuZW5jb2RlKGNvbnRlbnRzLCAndXRmLTgnLCBl
cnJvcnM9ZXJyb3JzKSkKIAogICAgIGRlZiBzaGExKHNlbGYsIHBhdGgpOgogICAgICAgICBjb250
ZW50cyA9IHNlbGYucmVhZF9iaW5hcnlfZmlsZShwYXRoKQpAQCAtNDQxLDcgKzQ0MSw3IEBAIGNs
YXNzIFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdChvYmplY3QpOgogICAgICAgICBzZWxmLmZzID0g
ZnMKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNl
Ci0gICAgICAgIHNlbGYuZnMuZmlsZXNbcGF0aF0gPSAiIgorICAgICAgICBzZWxmLmZzLmZpbGVz
W3BhdGhdID0gYicnCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZgpAQCAtNDUyLDE0ICs0NTIsMTQgQEAgY2xhc3MgV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0
KG9iamVjdCk6CiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlZCA9IFRy
dWUKIAotICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgotICAgICAgICBzZWxmLmZzLmZpbGVzW3Nl
bGYucGF0aF0gKz0gc3RyCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNl
bGYuZnMuZmlsZXNbc2VsZi5wYXRoXSArPSB1bmljb2RlLmVuY29kZShzdHJpbmcsICd1dGYtOCcp
CiAgICAgICAgIHNlbGYuZnMud3JpdHRlbl9maWxlc1tzZWxmLnBhdGhdID0gc2VsZi5mcy5maWxl
c1tzZWxmLnBhdGhdCiAKIAogY2xhc3MgV3JpdGFibGVUZXh0RmlsZU9iamVjdChXcml0YWJsZUJp
bmFyeUZpbGVPYmplY3QpOgogICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgotICAgICAgICBXcml0
YWJsZUJpbmFyeUZpbGVPYmplY3Qud3JpdGUoc2VsZiwgc3RyLmVuY29kZSgndXRmLTgnKSkKKyAg
ICAgICAgV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0LndyaXRlKHNlbGYsIHVuaWNvZGUuZW5jb2Rl
KHN0ciwgJ3V0Zi04JykpCiAKIAogY2xhc3MgUmVhZGFibGVCaW5hcnlGaWxlT2JqZWN0KG9iamVj
dCk6CkBAIC00ODksNyArNDg5LDcgQEAgY2xhc3MgUmVhZGFibGVCaW5hcnlGaWxlT2JqZWN0KG9i
amVjdCk6CiAKIGNsYXNzIFJlYWRhYmxlVGV4dEZpbGVPYmplY3QoUmVhZGFibGVCaW5hcnlGaWxl
T2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnMsIHBhdGgsIGRhdGEpOgotICAgICAg
ICBzdXBlcihSZWFkYWJsZVRleHRGaWxlT2JqZWN0LCBzZWxmKS5fX2luaXRfXyhmcywgcGF0aCwg
U3RyaW5nSU8uU3RyaW5nSU8oZGF0YS5kZWNvZGUoInV0Zi04IikpKQorICAgICAgICBzdXBlcihS
ZWFkYWJsZVRleHRGaWxlT2JqZWN0LCBzZWxmKS5fX2luaXRfXyhmcywgcGF0aCwgdW5pY29kZS5V
bmljb2RlSU8odW5pY29kZS5kZWNvZGVfZm9yKGRhdGEsIHVuaWNvZGUudW5pY29kZSkpKQogCiAg
ICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmRhdGEuY2xvc2UoKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9ja191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxOCArNzAsMTggQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW1U
ZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgogICAgICAg
ICBzZWxmLnF1aWNrX2NoZWNrKHNlbGYuZnMubm9ybXBhdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5mcy5fc2xvd19idXRfY29ycmVjdF9ub3JtcGF0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnLycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgJy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcvLicsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgJ2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Zv
by8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vLicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgJ2Zvby9iYXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICcvZm9vJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnZm9vLy4uL2JhcicsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Zvby8uLi9iYXIvYmF6JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnLi4vZm9v
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJycsKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAoJy8nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCcuJywpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICgnLy4nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28n
LCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28vJywpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgnZm9vLy4nLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28vYmFy
JywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnL2ZvbycsKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAoJ2Zvby8uLi9iYXInLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdm
b28vLi4vYmFyL2JheicsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJy4uL2ZvbycsKSkK
IAogICAgIGRlZiB0ZXN0X2RpcnNfdW5kZXIoc2VsZik6CiAgICAgICAgIEZBS0VfRklMRVMgPSB7
CkBAIC05MCw5ICs5MCw5IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0
Q2EKICAgICAgICAgICAgICcvdGVzdHMvdGVzdDIvdGVzdC50eHQnOiAndGVzdCd9CiAgICAgICAg
IGZzID0gZmlsZXN5c3RlbV9tb2NrLk1vY2tGaWxlU3lzdGVtKGZpbGVzPUZBS0VfRklMRVMpCiAK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuZGlyc191bmRlcignL3Rlc3RzJyksIFsnL3Rl
c3RzJywgJy90ZXN0cy90ZXN0MicsICcvdGVzdHMvdGVzdDMnLCAnL3Rlc3RzL3Rlc3QzL3Rlc3Qy
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZGlyc191bmRlcignL3Rlc3RzJyksIFsn
L3Rlc3RzJywgJy90ZXN0cy90ZXN0MicsICcvdGVzdHMvdGVzdDMnLCAnL3Rlc3RzL3Rlc3QzL3Rl
c3QyJ10pCiAKICAgICAgICAgZGVmIGZpbHRlcl9kaXIoZnMsIGRpcnBhdGgpOgogICAgICAgICAg
ICAgcmV0dXJuIGZzLmJhc2VuYW1lKGRpcnBhdGgpICE9ICd0ZXN0MicKIAotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhmcy5kaXJzX3VuZGVyKCcvdGVzdHMnLCBmaWx0ZXJfZGlyKSwgWycvdGVz
dHMnLCAnL3Rlc3RzL3Rlc3QzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZGlyc191
bmRlcignL3Rlc3RzJywgZmlsdGVyX2RpciksIFsnL3Rlc3RzJywgJy90ZXN0cy90ZXN0MyddKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQog
aW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIAog
CiBjbGFzcyBHZW5lcmljRmlsZVN5c3RlbVRlc3RzKG9iamVjdCk6CkBAIC0yNjcsOSArMjY3LDkg
QEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICBiaW5h
cnlfcGF0aCA9IE5vbmUKIAogICAgICAgICB1bmljb2RlX3RleHRfc3RyaW5nID0gdSdcdTAxNkFu
XHUwMTJEY1x1MDE0RGRlXHUwMzNEJwotICAgICAgICBoZXhfZXF1aXZhbGVudCA9ICdceEM1XHhB
QVx4NkVceEM0XHhBRFx4NjNceEM1XHg4RFx4NjRceDY1XHhDQ1x4QkQnCi0gICAgICAgIG1hbGZv
cm1lZF90ZXh0X2hleCA9ICdceDREXHg2OVx4NjNceDcyXHg2Rlx4NzNceDZGXHg2Nlx4NzRceEFF
XHgyMFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZc
eEFFXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgwQScKLSAgICAgICAgbWFsZm9ybWVkX2lnbm9y
ZWRfdGV4dF9oZXggPSAnXHg0RFx4NjlceDYzXHg3Mlx4NkZceDczXHg2Rlx4NjZceDc0XHgyMFx4
NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZceDIwXHgz
Mlx4MzBceDMxXHgzMFx4MERceDBBJworICAgICAgICBoZXhfZXF1aXZhbGVudCA9IGInXHhDNVx4
QUFceDZFXHhDNFx4QURceDYzXHhDNVx4OERceDY0XHg2NVx4Q0NceEJEJworICAgICAgICBtYWxm
b3JtZWRfdGV4dF9oZXggPSBiJ1x4NERceDY5XHg2M1x4NzJceDZGXHg3M1x4NkZceDY2XHg3NFx4
QUVceDIwXHg1Nlx4NjlceDczXHg3NVx4NjFceDZDXHgyMFx4NTNceDc0XHg3NVx4NjRceDY5XHg2
Rlx4QUVceDIwXHgzMlx4MzBceDMxXHgzMFx4MERceDBBJworICAgICAgICBtYWxmb3JtZWRfaWdu
b3JlZF90ZXh0X2hleCA9IGInXHg0RFx4NjlceDYzXHg3Mlx4NkZceDczXHg2Rlx4NjZceDc0XHgy
MFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZceDIw
XHgzMlx4MzBceDMxXHgzMFx4MERceDBBJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXh0
X3BhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3VuaXR0ZXN0XycpCiAgICAgICAg
ICAgICBiaW5hcnlfcGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3Rf
JykKQEAgLTI4NSw4ICsyODUsOSBAQCBjbGFzcyBSZWFsRmlsZVN5c3RlbVRlc3QodW5pdHRlc3Qu
VGVzdENhCiAgICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShiaW5hcnlfcGF0aCwgbWFs
Zm9ybWVkX3RleHRfaGV4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgZnMucmVhZF90ZXh0X2ZpbGUsIGJpbmFyeV9wYXRoKQogICAgICAgICAgICAgdGV4dF9jb250
ZW50cyA9IGZzLnJlYWRfYmluYXJ5X2ZpbGUoYmluYXJ5X3BhdGgpLmRlY29kZSgndXRmOCcsICdp
Z25vcmUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGV4dF9jb250ZW50cywgbWFs
Zm9ybWVkX2lnbm9yZWRfdGV4dF9oZXgpCi0gICAgICAgICAgICBmcy5vcGVuX3RleHRfZmlsZV9m
b3JfcmVhZGluZyhiaW5hcnlfcGF0aCwgJ3JlcGxhY2UnKS5yZWFkbGluZSgpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHRleHRfY29udGVudHMsIG1hbGZvcm1lZF9pZ25vcmVkX3RleHRf
aGV4LmRlY29kZSgndXRmOCcsICdpZ25vcmUnKSkKKyAgICAgICAgICAgIHdpdGggZnMub3Blbl90
ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoYmluYXJ5X3BhdGgsICdyZXBsYWNlJykgYXMgZmlsZToKKyAg
ICAgICAgICAgICAgICBmaWxlLnJlYWRsaW5lKCkKIAogICAgICAgICBmaW5hbGx5OgogICAgICAg
ICAgICAgaWYgdGV4dF9wYXRoIGFuZCBmcy5pc2ZpbGUodGV4dF9wYXRoKToKQEAgLTMxMSw3ICsz
MTIsNyBAQCBjbGFzcyBSZWFsRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENhCiAgICAgICAg
ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKICAg
ICAgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgICAgICAgICByYWlz
ZSBGaWxlU3lzdGVtLl9XaW5kb3dzRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NF
cnJvcgogCiAgICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShmcy5yZW1vdmUoJ2ZpbGVuYW1lJywgcmVtb3ZlX3dpdGhfZXhjZXB0aW9uKSkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0
dXJlLnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBA
QAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotZnJvbSBTdHJp
bmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSB3ZWJraXRweS5jb21tb24udW5pY29kZSBpbXBv
cnQgU3RyaW5nSU8KIAogCiBjbGFzcyBPdXRwdXRDYXB0dXJlKG9iamVjdCk6CkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0cHV0dGVlX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0
ZWVfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0ZWVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDE1ICsyNiwxNSBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0
IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
Lm91dHB1dHRlZSBpbXBvcnQgVGVlLCBPdXRwdXRUZWUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnVu
aWNvZGUgaW1wb3J0IFN0cmluZ0lPCiAKIAogY2xhc3MgU2ltcGxlVGVlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2ltcGxlX3RlZShzZWxmKToKLSAgICAgICAgZmlsZTEs
IGZpbGUyID0gU3RyaW5nSU8uU3RyaW5nSU8oKSwgU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAg
ICBmaWxlMSwgZmlsZTIgPSBTdHJpbmdJTygpLCBTdHJpbmdJTygpCiAgICAgICAgIHRlZSA9IFRl
ZShmaWxlMSwgZmlsZTIpCiAgICAgICAgIHRlZS53cml0ZSgiZm9vIGJhclxuIikKICAgICAgICAg
dGVlLndyaXRlKCJiYXpcbiIpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vcGF0aC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGF0aC5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3BhdGgucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEx
IEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0
IHRocmVhZGluZwotaW1wb3J0IHVybGxpYgorCitpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDAp
OgorICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZSBhcyB1cmxsaWJfcXVvdGUKK2Vs
c2U6CisgICAgZnJvbSB1cmxsaWIgaW1wb3J0IHF1b3RlIGFzIHVybGxpYl9xdW90ZQogCiBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTE0Niw3ICsxNTAsNyBAQCBkZWYg
X2VzY2FwZShwYXRoKToKICAgICAjIHdoZW4gY29udmVydGluZyBmaWxlbmFtZXMgdG8gZmlsZXMu
IEluc3RlYWQgb2YgdXNpbmcgdXJsbGliJ3MgZGVmYXVsdAogICAgICMgcnVsZXMsIHdlIGFsbG93
IGEgc21hbGwgbGlzdCBvZiBvdGhlciBjaGFyYWN0ZXJzIHRocm91Z2ggdW4tZXNjYXBlZC4KICAg
ICAjIEl0J3MgdW5jbGVhciBpZiB0aGlzIGlzIHRoZSBiZXN0IHBvc3NpYmxlIHNvbHV0aW9uLgot
ICAgIHJldHVybiB1cmxsaWIucXVvdGUocGF0aCwgc2FmZT0nLys6JykKKyAgICByZXR1cm4gdXJs
bGliX3F1b3RlKHBhdGgsIHNhZmU9Jy8rOicpCiAKIAogZGVmIF9jb252ZXJ0X3BhdGgocGxhdGZv
cm0sIHBhdGgpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bl
bWZpbGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BlbWZpbGUucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wZW1maWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIy
LDcgQEAgZGVmIF9wYXJzZV9wZW1fZm9ybWF0KGNvbnRlbnQpOgogCiAgICAgICAgIHRyeToKICAg
ICAgICAgICAgIGluZGV4ID0gbGluZXMuaW5kZXgoZW5kX21hcmtlcikKLSAgICAgICAgZXhjZXB0
IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAg
cmFpc2UgQmFkRm9ybWF0RXJyb3IoIkNhbm5vdCBmaW5kIHNlY3Rpb24gZW5kOiB7fSIuZm9ybWF0
KGVuZF9tYXJrZXIpKQogCiAgICAgICAgIHJldHVybiBraW5kLCAiXG4iLmpvaW4obGluZXNbMDpp
bmRleCArIDFdKSArICJcbiIsIGxpbmVzW2luZGV4ICsgMTpdCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZV91bml0dGVzdC5w
eQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BlbWZpbGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkgQEAK
IAogCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLnBlbWZpbGUgaW1wb3J0IFBlbSwgQmFkRm9ybWF0RXJyb3IKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5wbGF0Zm9ybWluZm8gaW1wb3J0IFBsYXRmb3JtSW5mbwogCiAKIGNsYXNz
IFBlbUZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE1NywxNCArMTU3LDE0IEBAIGRl
ZiB0cmltKGRvY3N0cmluZyk6CiAgICAgIyBhbmQgc3BsaXQgaW50byBhIGxpc3Qgb2YgbGluZXM6
CiAgICAgbGluZXMgPSBkb2NzdHJpbmcuZXhwYW5kdGFicygpLnNwbGl0bGluZXMoKQogICAgICMg
RGV0ZXJtaW5lIG1pbmltdW0gaW5kZW50YXRpb24gKGZpcnN0IGxpbmUgZG9lc24ndCBjb3VudCk6
Ci0gICAgaW5kZW50ID0gc3lzLm1heGludAorICAgIGluZGVudCA9IFBsYXRmb3JtSW5mby5NQVgK
ICAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06CiAgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3Ry
aXAoKQogICAgICAgICBpZiBzdHJpcHBlZDoKICAgICAgICAgICAgIGluZGVudCA9IG1pbihpbmRl
bnQsIGxlbihsaW5lKSAtIGxlbihzdHJpcHBlZCkpCiAgICAgIyBSZW1vdmUgaW5kZW50YXRpb24g
KGZpcnN0IGxpbmUgaXMgc3BlY2lhbCk6CiAgICAgdHJpbW1lZCA9IFtsaW5lc1swXS5zdHJpcCgp
XQotICAgIGlmIGluZGVudCA8IHN5cy5tYXhpbnQ6CisgICAgaWYgaW5kZW50IDwgUGxhdGZvcm1J
bmZvLk1BWDoKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXNbMTpdOgogICAgICAgICAgICAgdHJp
bW1lZC5hcHBlbmQobGluZVtpbmRlbnQ6XS5yc3RyaXAoKSkKICAgICAjIFN0cmlwIG9mZiB0cmFp
bGluZyBhbmQgbGVhZGluZyBibGFuayBsaW5lczoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjUw
MjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5m
by5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltCiAKIAogY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6Cisg
ICAgTUFYID0gMjE0NzQ4MzY0NworCiAgICAgIiIiVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNvbnNp
c3RlbnQgKGFuZCBtb2NrYWJsZSkgaW50ZXJwcmV0YXRpb24gb2YKICAgICBzeXN0ZW0tc3BlY2lm
aWMgdmFsdWVzIChsaWtlIHN5cy5wbGF0Zm9ybSBhbmQgcGxhdGZvcm0ubWFjX3ZlcigpKQogICAg
IHRvIGJlIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHdlYmtpdHB5IGNvZGUgYmFzZS4KQEAgLTEx
OCwxMSArMTIwLDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogCiAgICAgZGVmIHRv
dGFsX2J5dGVzX21lbW9yeShzZWxmKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKLSAgICAg
ICAgICAgIHJldHVybiBsb25nKHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbInN5c2N0bCIs
ICItbiIsICJody5tZW1zaXplIl0pKQorICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLl9leGVj
dXRpdmUucnVuX2NvbW1hbmQoWyJzeXNjdGwiLCAiLW4iLCAiaHcubWVtc2l6ZSJdKSkKICAgICAg
ICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKLSAgICAgICAg
IiIiUmV0dXJucyBzeXMubWF4aW50IGlmIHRoZSB3aWR0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4i
IiIKKyAgICAgICAgIiIiUmV0dXJucyBNQVggaWYgdGhlIHdpZHRoIGNhbm5vdCBiZSBkZXRlcm1p
bmVkLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLmlzX3dpbigpOgogICAg
ICAgICAgICAgICAgICMgRnJvbSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy80
NDA2OTQtZGV0ZXJtaW5lLXNpemUtb2YtY29uc29sZS13aW5kb3ctb24td2luZG93cy8KQEAgLTEz
NSw3ICsxMzcsNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgICAgICAg
ICAgICAgIyBOb3RlIHRoYXQgd2UgcmV0dXJuIDEgbGVzcyB0aGFuIHRoZSB3aWR0aCBzaW5jZSB3
cml0aW5nIGludG8gdGhlIHJpZ2h0bW9zdCBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgIyBh
dXRvbWF0aWNhbGx5IHBlcmZvcm1zIGEgbGluZSBmZWVkLgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmlnaHQgLSBsZWZ0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2VsZi5NQVgKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAgICAgaW1wb3J0IGZjbnRsCiAgICAgICAgICAgICAgICAgaW1wb3J0IHN0cnVjdApAQCAt
MTQ0LDcgKzE0Niw3IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICAgICAg
ICAgIF8sIGNvbHVtbnMsIF8sIF8gPSBzdHJ1Y3QudW5wYWNrKCdISEhIJywgcGFja2VkKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAg
IHJldHVybiBzeXMubWF4aW50CisgICAgICAgICAgICByZXR1cm4gc2VsZi5NQVgKIAogICAgIGRl
ZiBidWlsZF92ZXJzaW9uKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTAgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0
dGVzdC5UZXN0Q2FzZQogICAgIGRlZiB0ZXN0X3JlYWxfY29kZShzZWxmKToKICAgICAgICAgIyBU
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGUgcmVhbCAodW5tb2NrZWQpIGNvZGUgYWN0dWFsbHkgd29y
a3MuCiAgICAgICAgIGluZm8gPSBQbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgRXhlY3V0aXZl
KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8ub3NfbmFtZSwgJycpCisgICAg
ICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5mby5vc19uYW1lLCAnJykKICAgICAgICAgaWYgaW5m
by5pc19tYWMoKSBvciBpbmZvLmlzX3dpbigpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05v
dE5vbmUoaW5mby5vc192ZXJzaW9uKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZv
LmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRp
c3BsYXlfbmFtZSgpLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm8uaXNfbWFjKCkg
b3IgaW5mby5pc193aW4oKSBvciBpbmZvLmlzX2xpbnV4KCkgb3IgaW5mby5pc19mcmVlYnNkKCkp
CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluZm8udGVybWluYWxfd2lkdGgoKSkKIApA
QCAtMTM1LDE2ICsxMzUsMTYgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0
Q2FzZQogCiAgICAgZGVmIHRlc3RfZGlzcGxheV9uYW1lKHNlbGYpOgogICAgICAgICBpbmZvID0g
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpKQotICAgICAgICBzZWxmLmFzc2VydE5v
dEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RF
cXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAogICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5n
PSc2LjEuNzYwMCcpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlf
bmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFt
ZSgpLCAnJykKIAogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4
MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVx
dWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVh
bChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScp
KQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAog
ICAgIGRlZiB0ZXN0X3RvdGFsX2J5dGVzX21lbW9yeShzZWxmKToKICAgICAgICAgaW5mbyA9IHNl
bGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuNi4zJyks
IGZha2VfZXhlY3V0aXZlKCcxMjM0JykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vcHJvZmlsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDEwIEBACiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0
aW9uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCi1pbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQg
c3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCk6CisgICAgZnJvbSBpdGVydG9vbHMg
aW1wb3J0IGlmaWx0ZXIgIGFzIGZpbHRlcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCiAKQEAgLTQxLDcgKzQ0LDcgQEAgY2xhc3MgUHJvZmlsZXJGYWN0b3J5KG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBwcm9maWxlcnM6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAg
ICAgICBwcm9maWxlcl9uYW1lID0gcHJvZmlsZXJfbmFtZSBvciBjbHMuZGVmYXVsdF9wcm9maWxl
cl9uYW1lKGhvc3QucGxhdGZvcm0pCi0gICAgICAgIHByb2ZpbGVyX2NsYXNzID0gbmV4dChpdGVy
dG9vbHMuaWZpbHRlcihsYW1iZGEgcHJvZmlsZXI6IHByb2ZpbGVyLm5hbWUgPT0gcHJvZmlsZXJf
bmFtZSwgcHJvZmlsZXJzKSwgTm9uZSkKKyAgICAgICAgcHJvZmlsZXJfY2xhc3MgPSBuZXh0KGZp
bHRlcihsYW1iZGEgcHJvZmlsZXI6IHByb2ZpbGVyLm5hbWUgPT0gcHJvZmlsZXJfbmFtZSwgcHJv
ZmlsZXJzKSwgTm9uZSkKICAgICAgICAgaWYgbm90IHByb2ZpbGVyX2NsYXNzOgogICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHByb2ZpbGVyc1swXShob3N0LCBleGVjdXRh
YmxlX3BhdGgsIG91dHB1dF9kaXIsIGlkZW50aWZpZXIpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyNTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcHJvZmlsZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAg
aW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGxhdGZvcm1pbmZv
X21vY2sgaW1wb3J0IE1vY2tQbGF0Zm9ybUluZm8KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CiAKLWZyb20gLnByb2ZpbGVy
IGltcG9ydCBQcm9maWxlckZhY3RvcnksIEdvb2dsZVBQcm9mCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0ucHJvZmlsZXIgaW1wb3J0IFByb2ZpbGVyRmFjdG9yeSwgR29vZ2xlUFByb2YKIAog
CiBjbGFzcyBQcm9maWxlckZhY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zdGFja191dGlsc191bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3Rh
Y2tfdXRpbHNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9zdGFja191dGlsc191bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMzQsOCArMzQsOSBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0
IHN0YWNrCiAKIAogZGVmIGN1cnJlbnRfdGhyZWFkX2lkKCk6Ci0gICAgdGhyZWFkX2lkLCBfID0g
c3lzLl9jdXJyZW50X2ZyYW1lcygpLml0ZW1zKClbMF0KLSAgICByZXR1cm4gdGhyZWFkX2lkCisg
ICAgZm9yIHRocmVhZF9pZCBpbiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkua2V5cygpOgorICAgICAg
ICByZXR1cm4gdGhyZWFkX2lkCisgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBTdGFja1V0aWxz
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkocmV2aXNpb24gMjUwMjYzKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KIGlt
cG9ydCBzeXMKIAotZnJvbSAuIGltcG9ydCBlbnZpcm9ubWVudCwgZXhlY3V0aXZlLCBmaWxlX2xv
Y2ssIGZpbGVzeXN0ZW0sIHBsYXRmb3JtaW5mbywgdXNlciwgd29ya3NwYWNlCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGVudmlyb25tZW50LCBleGVjdXRpdmUsIGZpbGVfbG9j
aywgZmlsZXN5c3RlbSwgcGxhdGZvcm1pbmZvLCB1c2VyLCB3b3Jrc3BhY2UKIAogCiBjbGFzcyBT
eXN0ZW1Ib3N0KG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXJsZmV0Y2hlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXIucHkJKG5vbmV4aXN0ZW50
KQpAQCAtMSw1NSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIiIiV3JhcHBlciBtb2R1bGUg
Zm9yIGZldGNoaW5nIFVSTHMuIiIiCi0KLWltcG9ydCB1cmxsaWIKLQotCi1jbGFzcyBVcmxGZXRj
aGVyKG9iamVjdCk6Ci0gICAgIiIiQ2xhc3Mgd2l0aCByZXN0cmljdGVkIGludGVyZmFjZSB0byBm
ZXRjaCBVUkxzIChtYWtlcyB0ZXN0aW5nIGVhc2llcikiIiIKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZmlsZXN5c3RlbSk6Ci0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCi0K
LSAgICBkZWYgZmV0Y2goc2VsZiwgdXJsKToKLSAgICAgICAgIiIiRmV0Y2hlcyB0aGUgY29udGVu
dHMgb2YgdGhlIFVSTCBhcyBhIHN0cmluZy4iIiIKLSAgICAgICAgZmlsZV9vYmplY3QgPSB1cmxs
aWIudXJsb3Blbih1cmwpCi0gICAgICAgIGNvbnRlbnQgPSBmaWxlX29iamVjdC5yZWFkKCkKLSAg
ICAgICAgZmlsZV9vYmplY3QuY2xvc2UoKQotICAgICAgICByZXR1cm4gY29udGVudAotCi0gICAg
ZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwpOgotICAgICAgICAiIiJGZXRjaGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgVVJMIGludG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmV0dXJuIHRoZSBm
aWxlbmFtZS4KLQotICAgICAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHVybGxpYi5yZXRy
aWV2ZSgpIGV4Y2VwdCB0aGF0IHdlIGRvbid0IHJldHVybiBhbnkgaGVhZGVycy4KLSAgICAgICAg
IiIiCi0gICAgICAgIGZpbGVfb2JqZWN0LCBmaWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Bl
bl9iaW5hcnlfdGVtcGZpbGUoJy1mZXRjaGVkJykKLSAgICAgICAgY29udGVudHMgPSBzZWxmLmZl
dGNoKHVybCkKLSAgICAgICAgZmlsZV9vYmplY3Qud3JpdGUoY29udGVudHMpCi0gICAgICAgIGZp
bGVfb2JqZWN0LmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGZpbGVuYW1lCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyX21v
Y2sucHkJKHJldmlzaW9uIDI1MDI2MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS91cmxmZXRjaGVyX21vY2sucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NiArMCwwIEBA
Ci0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotCi1kZWYgbWFrZV9mZXRjaGVyX2Nscyh1cmxzKToKLSAgICAiIiJV
cmxGZXRjaGVyIGZhY3Rvcnkgcm91dGluZSB0aGF0IHNpbXVsYXRlcyBuZXR3b3JrIGFjY2Vzcwot
ICAgIHVzaW5nIGEgZGljdCBvZiBVUkxzIC0+IGNvbnRlbnRzLiIiIgotICAgIGNsYXNzIE1vY2tG
ZXRjaGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtKToK
LSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCi0KLSAgICAgICAgZGVm
IGZldGNoKHNlbGYsIHVybCk6Ci0gICAgICAgICAgICByZXR1cm4gdXJsc1t1cmxdCi0KLSAgICAg
ICAgZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwpOgotICAgICAgICAgICAgZiwgZm4gPSBz
ZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxlKCdtb2NrZmV0Y2hlcicpCi0gICAg
ICAgICAgICBmLndyaXRlKHNlbGYuZmV0Y2godXJsKSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQot
ICAgICAgICAgICAgcmV0dXJuIGZuCi0KLSAgICByZXR1cm4gTW9ja0ZldGNoZXIKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CShyZXZpc2lvbiAy
NTAyNjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJv
Y2VzcwogaW1wb3J0IHdlYmJyb3dzZXIKIAotZnJvbSAuZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRp
dmUKLWZyb20gLnBsYXRmb3JtaW5mbyBpbXBvcnQgUGxhdGZvcm1JbmZvCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5wbGF0Zm9ybWluZm8gaW1wb3J0IFBsYXRmb3JtSW5mbwogCiAKIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTUwLDYgKzUwLDExIEBAIGV4Y2VwdCBJ
bXBvcnRFcnJvcjoKICAgICAgICAgIyBUaGVyZSBpcyBubyByZWFkbGluZSBtb2R1bGUgZm9yIHdp
bjMyLCBub3QgbXVjaCB0byBkbyBleGNlcHQgY3J5LgogICAgICAgICBfbG9nLndhcm4oIlVuYWJs
ZSB0byBpbXBvcnQgcmVhZGxpbmUuIikKIAoraWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToK
KyAgICBpbnB1dF9mdW5jID0gaW5wdXQKK2Vsc2U6CisgICAgaW5wdXRfZnVuYyA9IHJhd19pbnB1
dAorCiAKIGNsYXNzIFVzZXIob2JqZWN0KToKICAgICBERUZBVUxUX05PID0gJ24nCkBAIC02Miw3
ICs2Nyw3IEBAIGNsYXNzIFVzZXIob2JqZWN0KToKIAogICAgICMgRklYTUU6IFRoZXNlIGFyZSBA
Y2xhc3NtZXRob2RzIGJlY2F1c2UgYnVnemlsbGEucHkgZG9lc24ndCBoYXZlIGEgVG9vbCBvYmpl
Y3QgKHRodXMgbm8gVXNlciBpbnN0YW5jZSkuCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHBy
b21wdChjbHMsIG1lc3NhZ2UsIHJlcGVhdD0xLCByYXdfaW5wdXQ9cmF3X2lucHV0KToKKyAgICBk
ZWYgcHJvbXB0KGNscywgbWVzc2FnZSwgcmVwZWF0PTEsIHJhd19pbnB1dD1pbnB1dF9mdW5jKToK
ICAgICAgICAgcmVzcG9uc2UgPSBOb25lCiAgICAgICAgIHdoaWxlIChyZXBlYXQgYW5kIG5vdCBy
ZXNwb25zZSk6CiAgICAgICAgICAgICByZXBlYXQgLT0gMQpAQCAtNzQsNyArNzksNyBAQCBjbGFz
cyBVc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBjbHMucHJvbXB0KG1lc3NhZ2UsIHJlcGVh
dD1yZXBlYXQsIHJhd19pbnB1dD1nZXRwYXNzLmdldHBhc3MpCiAKICAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgcHJvbXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMoY2xzLCBsaXN0X3RpdGxlLCBzdWJ0
aXRsZXMsIGxpc3RzLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9cmF3X2lu
cHV0KToKKyAgICBkZWYgcHJvbXB0X3dpdGhfbXVsdGlwbGVfbGlzdHMoY2xzLCBsaXN0X3RpdGxl
LCBzdWJ0aXRsZXMsIGxpc3RzLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9
aW5wdXRfZnVuYyk6CiAgICAgICAgIGl0ZW1faW5kZXggPSAwCiAgICAgICAgIGN1bXVsYXRlZF9s
aXN0ID0gW10KICAgICAgICAgcHJpbnQobGlzdF90aXRsZSkKQEAgLTExNCw3ICsxMTksNyBAQCBj
bGFzcyBVc2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RfaXRlbXNbcmVz
dWx0XQogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBs
aXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5w
dXQ9cmF3X2lucHV0KToKKyAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUs
IGxpc3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1pbnB1dF9m
dW5jKToKICAgICAgICAgcHJpbnQobGlzdF90aXRsZSkKICAgICAgICAgaSA9IDAKICAgICAgICAg
Zm9yIGl0ZW0gaW4gbGlzdF9pdGVtczoKQEAgLTE1Niw3ICsxNjEsNyBAQCBjbGFzcyBVc2VyKG9i
amVjdCk6CiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBwYXNzCiAK
LSAgICBkZWYgY29uZmlybShzZWxmLCBtZXNzYWdlPU5vbmUsIGRlZmF1bHQ9REVGQVVMVF9ZRVMs
IHJhd19pbnB1dD1yYXdfaW5wdXQpOgorICAgIGRlZiBjb25maXJtKHNlbGYsIG1lc3NhZ2U9Tm9u
ZSwgZGVmYXVsdD1ERUZBVUxUX1lFUywgcmF3X2lucHV0PWlucHV0X2Z1bmMpOgogICAgICAgICBp
ZiBub3QgbWVzc2FnZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSAiQ29udGludWU/IgogICAgICAg
ICBjaG9pY2UgPSB7J3knOiAnWS9uJywgJ24nOiAneS9OJ31bZGVmYXVsdF0KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfbW9jay5weQkocmV2
aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Vz
ZXJfbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMTggKzI3LDIyIEBACiAjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCiAKIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIAoraWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKToKKyAgICBpbnB1
dCA9IHJhd19pbnB1dAorCiAKIGNsYXNzIE1vY2tVc2VyKG9iamVjdCk6CiAKICAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgcHJvbXB0KGNscywgbWVzc2FnZSwgcmVwZWF0PTEsIHJhd19pbnB1dD1y
YXdfaW5wdXQpOgorICAgIGRlZiBwcm9tcHQoY2xzLCBtZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lu
cHV0PWlucHV0KToKICAgICAgICAgcmV0dXJuICJNb2NrIHVzZXIgcmVzcG9uc2UiCiAKICAgICBA
Y2xhc3NtZXRob2QKLSAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUsIGxp
c3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1yYXdfaW5wdXQp
OgorICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywg
Y2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PWlucHV0KToKICAgICAgICAgcGFz
cwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9fX2luaXRfXy5weQkocmV2aXNpb24gMjUwMjYzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAK
ICIiIlBvcnQtc3BlY2lmaWMgZW50cnlwb2ludHMgZm9yIHRoZSBsYXlvdXQgdGVzdHMgdGVzdCBp
bmZyYXN0cnVjdHVyZS4iIiIKIAotaW1wb3J0IGJ1aWxkZXJzICAjIFdoeSBpcyB0aGlzIGluIHBv
cnQ/CitpbXBvcnQgd2Via2l0cHkucG9ydC5idWlsZGVycyAgIyBXaHkgaXMgdGhpcyBpbiBwb3J0
PwogCi1mcm9tIGJhc2UgaW1wb3J0IFBvcnQgICMgSXQncyBwb3NzaWJsZSB3ZSBkb24ndCBuZWVk
IHRvIGV4cG9ydCB0aGlzIHZpcnR1YWwgYmFzZWNsYXNzIG91dHNpZGUgdGhlIG1vZHVsZS4KLWZy
b20gZHJpdmVyIGltcG9ydCBEcml2ZXIsIERyaXZlcklucHV0LCBEcml2ZXJPdXRwdXQKLWZyb20g
ZmFjdG9yeSBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCitm
cm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydCAgIyBJdCdzIHBvc3NpYmxlIHdlIGRv
bid0IG5lZWQgdG8gZXhwb3J0IHRoaXMgdmlydHVhbCBiYXNlY2xhc3Mgb3V0c2lkZSB0aGUgbW9k
dWxlLgorZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVyLCBEcml2ZXJJbnB1
dCwgRHJpdmVyT3V0cHV0Citmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgcGxhdGZv
cm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379602</attachid>
            <date>2019-09-25 18:16:28 -0700</date>
            <delta_ts>2019-09-25 19:02:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201826-20190925181626.patch</filename>
            <type>text/plain</type>
            <size>76746</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDM3MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyOCBAQAorMjAxOS0wOS0yNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUHl0aG9uIDM6IEFkZCBzdXBwb3J0IGluIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MTgyNgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTU0NTI2NzE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU3RlcGhhbmllIExld2lzLgorCisgICAgICAgIFRlc3RlZCBjb21wYXRpYmlsaXR5IGJ5
IHJ1bm5pbmcgJ3B5dGhvbjMgLW0gdW5pdHRlc3Qgd2Via2l0cHkuY29tbW9uLnN5c3RlbS48X3Vu
aXR0ZXN0Picgb24KKyAgICAgICAgZWFjaCBvZiB0aGUgZWZmZWN0ZWQgZmlsZXMuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHk6IEltcG9y
dCBTdHJpbmdJTyBmcm9tIGlvIG1vZHVsZS4KKyAgICAgICAgKHNldF9yZXZpZXdlcik6CisgICAg
ICAgIChzZXRfc2hvcnRfZGVzY3JpcHRpb25fYW5kX2J1Z191cmwpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoZWNrb3V0LnB5OiAgSW1wb3J0IFN0cmluZ0lP
IGZyb20gaW8gbW9kdWxlLgorICAgICAgICAoQ2hlY2tvdXQuX2xhdGVzdF9lbnRyeV9mb3JfY2hh
bmdlbG9nX2F0X3JldmlzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
b25maWcvY29tbWl0dGVycy5weToKKyAgICAgICAgKENvbW1pdHRlckxpc3QubG9hZF9qc29uKTog
aXRlcml0ZW1zIC0+IGl0ZW1zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25l
dC9uZXR3b3JrdHJhbnNhY3Rpb24ucHk6CisgICAgICAgIChOZXR3b3JrVHJhbnNhY3Rpb24ucnVu
KTogdXJsbGliMiBpcyB1cmxsaWIgaW4gUHl0aG9uMy4gCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2Fic3RyYWN0ZXhlY3V0aXZlLnB5OgorICAgICAgICAoQWJzdHJh
Y3RFeGVjdXRpdmUuX3N0cmluZ2lmeV9hcmdzKToKKyAgICAgICAgKEFic3RyYWN0RXhlY3V0aXZl
LmNvbW1hbmRfZm9yX3ByaW50aW5nKTogVGhlIHN0ciB0eXBlIGlzIHVuaWNvZGUgaW4gUHl0aG9u
My4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3Vu
aXR0ZXN0LnB5OiBFeHBsaWNpdGx5IGVuY29kZSBhbmQgZGVjb2RlIGJpbmFyeSBjcmFzaGxvZ3Mu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Vudmlyb25tZW50X3Vu
aXR0ZXN0LnB5OiBVc2UgYWJzb2x1dGUgaW1wb3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAoU2NyaXB0RXJyb3IubWVz
c2FnZV93aXRoX291dHB1dCk6IFRoZSBzdHIgdHlwZSBpcyB1bmljb2RlIGluIFB5dGhvbjMuCisg
ICAgICAgIChFeGVjdXRpdmUuV3JhcHBlZFBvcGVuKTogUHl0aG9uMydzIFBvcGVuIG9iamVjdCBp
cyBhIGNvbnRleHQgbWFuYWdlci4gVG8gYWxsb3cgdXMgdG8gdXNlIGl0IGFzIG9uZSwKKyAgICAg
ICAgb3VyIFB5dGhvbjIgUG9wZW4gbmVlZHMgdG8gYmUgb25lIGFzIHdlbGwuCisgICAgICAgIChF
eGVjdXRpdmUuV3JhcHBlZFBvcGVuLl9faW5pdF9fKToKKyAgICAgICAgKEV4ZWN1dGl2ZS5XcmFw
cGVkUG9wZW4uX19lbnRlcl9fKToKKyAgICAgICAgKEV4ZWN1dGl2ZS5XcmFwcGVkUG9wZW4uX19l
eGl0X18pOgorICAgICAgICAoRXhlY3V0aXZlLl9ydW5fY29tbWFuZF93aXRoX3RlZWRfb3V0cHV0
KTogU2ltcGxpZnkgbG9vcCwgZGVjb2RlIHVuaWNvZGUgc3RyaW5ncy4KKyAgICAgICAgKEV4ZWN1
dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwpOiBUaGUgY2hpbGQgb3V0cHV0IGZpbGUgc2hvdWxk
IG5vdCBiZSB1bmljb2RlIHN0cmluZ3MuCisgICAgICAgIChFeGVjdXRpdmUucnVubmluZ19waWRz
KTogVXNlIHRoZSBQb3BlbiBjb250ZXh0IG1hbmFnZXIgdG8gZ3VhcmFudGVlIGNsZWFuLXVwLgor
ICAgICAgICAoRXhlY3V0aXZlLl9jb21wdXRlX3N0ZGluKToKKyAgICAgICAgKEV4ZWN1dGl2ZS5y
dW5fY29tbWFuZCk6IFVzZSB0aGUgUG9wZW4gY29udGV4dCBtYW5hZ2VyIHRvIGd1YXJhbnRlZSBj
bGVhbi11cC4KKyAgICAgICAgKEV4ZWN1dGl2ZS5fc3RyaW5naWZ5X2FyZ3MpOiBUaGUgc3RyIHR5
cGUgaXMgdW5pY29kZSBpbiBQeXRob24zLgorICAgICAgICAoRXhlY3V0aXZlLnBvcGVuKTogUmV0
dXJuIGEgY29udGV4dCBtYW5hZ2VyIGlmIHRoZSBQb3BlbiBvYmplY3QgaXMgbm90IG9uZS4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHk6
CisgICAgICAgIChNb2NrUHJvY2Vzcy5fX2luaXRfXyk6IFN0cmluZ0lPIC0+IEJ5dGVzSU8uCisg
ICAgICAgIChNb2NrUHJvY2Vzcy5fX2VudGVyX18pOgorICAgICAgICAoTW9ja1Byb2Nlc3MpOgor
ICAgICAgICAoTW9ja1Byb2Nlc3MuX19leGl0X18pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHk6CisgICAgICAgIChFeGVjdXRp
dmVUZXN0LnRlc3RfYXV0b19zdHJpbmdpZnlfYXJncyk6IFVzZSB0aGUgUG9wZW4gY29udGV4dCBt
YW5hZ2VyIHRvIGd1YXJhbnRlZSBjbGVhbi11cC4KKyAgICAgICAgKEV4ZWN1dGl2ZVRlc3QudGVz
dF9wb3Blbl9hcmdzKTogRGl0dG8uCisgICAgICAgIChFeGVjdXRpdmVUZXN0LnNlcmlhbF90ZXN0
X2tpbGxfcHJvY2Vzcyk6IERpdHRvLgorICAgICAgICAoRXhlY3V0aXZlVGVzdC5zZXJpYWxfdGVz
dF9raWxsX2FsbCk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAoRmlsZVN5c3RlbS5yZWFkX2JpbmFyeV9maWxl
KTogVXNlICdvcGVuJyBpbnN0ZWFkIG9mICdmaWxlJy4KKyAgICAgICAgKEZpbGVTeXN0ZW0ud3Jp
dGVfYmluYXJ5X2ZpbGUpOiBEaXR0by4KKyAgICAgICAgKEZpbGVTeXN0ZW0ud3JpdGVfdGV4dF9m
aWxlKTogVGhlIHN0ciB0eXBlIGlzIHVuaWNvZGUgaW4gUHl0aG9uMy4gCisgICAgICAgIChGaWxl
U3lzdGVtLnJlbHBhdGgpOgorICAgICAgICAoRmlsZVN5c3RlbS5yZW1vdmUpOiBUaGUgV2luZG93
c0Vycm9yIGlzIGp1c3QgYW50aGVyIE9TRXJyb3IgaW4gUHl0aG9uMy4KKyAgICAgICAgKEZpbGVT
eXN0ZW0uX1dpbmRvd3NFcnJvcik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weToKKyAgICAgICAgKE1vY2tGaWxlU3lz
dGVtLmdsb2IpOiBmaWx0ZXIgcmV0dXJucyBhIGdlbmVyYXRvciBpbnN0ZWFkIG9mIGEgbGlzdC4K
KyAgICAgICAgKFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC5fX2luaXRfXyk6IEJpbmFyeSBmaWxl
cyBhcmUgY29tcHJpc2VkIG9mIGJ5dGVzLCBub3Qgc3RyaW5nIGluIFB5dGhvbjMuCisgICAgICAg
IChXcml0YWJsZUJpbmFyeUZpbGVPYmplY3Qud3JpdGUpOiBEaXR0by4KKyAgICAgICAgKFJlYWRh
YmxlVGV4dEZpbGVPYmplY3QuX19pbml0X18pOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAoTW9ja0ZpbGVTeXN0ZW1UZXN0LnRlc3Rfbm9ybXBhdGgpOgorICAgICAgICAoTW9ja0ZpbGVT
eXN0ZW1UZXN0LnRlc3RfZGlyc191bmRlcik6IGFzc2VydEVxdWFscyAtPiBhc3NlcnRFcXVhbC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0
dGVzdC5weToKKyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50ZXN0X3JlYWRfYW5kX3dyaXRl
X2ZpbGUpOiBFeHBsaWNpdGx5IGRlZmluZSBieXRlIGFycmF5cyBpbnN0ZWFkIG9mIHN0cmluZ3Mu
CisgICAgICAgIChSZWFsRmlsZVN5c3RlbVRlc3QudGVzdF9yZW1vdmVfZmlsZV93aXRoX3JldHJ5
LnJlbW92ZV93aXRoX2V4Y2VwdGlvbik6IFRoZSBXaW5kb3dzRXJyb3IgaXMganVzdAorICAgICAg
ICBhbnRoZXIgT1NFcnJvciBpbiBQeXRob24zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9vdXRwdXRjYXB0dXJlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0ZWVfdW5pdHRlc3QucHk6CisgICAgICAgIChTaW1wbGVU
ZWVUZXN0LnRlc3Rfc2ltcGxlX3RlZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BhdGgucHk6CisgICAgICAgIChfZXNjYXBlKTogdXJsbGliIGxpYnJhcnkgaGFz
IGJlZW4gYnJva2VuIGludG8gcGFydHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BlbWZpbGUucHk6CisgICAgICAgIChfcGFyc2VfcGVtX2Zvcm1hdC5maW5kX2Vu
ZCk6IFB5dGhvbjMgZG9lcyBub3QgZGVmaW5lIGEgbWF4aW50LgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wZW1maWxlX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAgICAgIChQ
bGF0Zm9ybUluZm8udG90YWxfYnl0ZXNfbWVtb3J5KTogTm90ICdsb25nJyB0eXBlIGluIFB5dGhv
bjMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5m
b191bml0dGVzdC5weToKKyAgICAgICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9yZWFsX2NvZGUp
OiBhc3NlcnROb3RFcXVhbHMgLT4gYXNzZXJ0Tm90RXF1YWwuCisgICAgICAgIChUZXN0UGxhdGZv
cm1JbmZvLnRlc3RfZGlzcGxheV9uYW1lKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3Byb2ZpbGVyLnB5OgorICAgICAgICAoUHJvZmlsZXJGYWN0b3J5
LmNyZWF0ZV9wcm9maWxlcik6IE1hbnVhbGx5IGltcGxlbWVudCBpZmlsdGVyLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weTogVXNl
IGFic29sdXRlIGltcG9ydHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3N0YWNrX3V0aWxzX3VuaXR0ZXN0LnB5OgorICAgICAgICAoY3VycmVudF90aHJlYWRfaWQp
OiBpdGVtcygpIHJldHVybnMgYSBnZW5lcmF0b3IgaW4gUHl0aG9uMy4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weTogVXNlIGFic29sdXRlIGlt
cG9ydHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNo
ZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3VybGZldGNoZXJfbW9jay5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vdXNlci5weToKKyAgICAgICAgKFVzZXIucHJvbXB0KTogVXNlIGFic29s
dXRlIGltcG9ydHMsIHJhd19pbnB1dCAtPiBpbnB1dC4KKyAgICAgICAgKFVzZXIucHJvbXB0X3dp
dGhfbXVsdGlwbGVfbGlzdHMpOgorICAgICAgICAoVXNlci5wcm9tcHRfd2l0aF9saXN0KToKKyAg
ICAgICAgKFVzZXIuY29uZmlybSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dW5pY29kZS5weTogVG9vbGluZyB0byBtYW5hZ2UgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIFB5dGhv
biAyCisgICAgICAgIGFuZCBQeXRob24gMyB1bmljb2RlIGhhbmRsaW5nLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHk6CisgICAgICAgIChNb2Nr
VXNlci5wcm9tcHQpOiByYXdfaW5wdXQgLT4gaW5wdXQuCisgICAgICAgIChNb2NrVXNlci5wcm9t
cHRfd2l0aF9saXN0KTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uZnJvbV9pdGVyYWJsZSk6IHhyYW5nZSAtPiBy
YW5nZS4KKyAgICAgICAgKFZlcnNpb24uZnJvbV9uYW1lKTogVXNlIGFic29sdXRlIGltcG9ydCBw
YXRoLgorICAgICAgICAoVmVyc2lvbi5fX2NvbnRhaW5zX18pOiB4cmFuZ2UgLT4gcmFuZ2UuCisg
ICAgICAgIChWZXJzaW9uLl9fc3RyX18pOiB4cmFuZ2UgLT4gcmFuZ2UuCisgICAgICAgIChWZXJz
aW9uLl9fY21wX18pOiBhbXAgaXMgbm8gbG9uZ2VyIGFuIG9wZXJhdG9yIGluIFB5dGhvbjMsIGJ1
dCB2ZXJzaW9ucyBhcmUgY29tcHJpc2VkCisgICAgICAgIE9mIGludGVnZXJzLCBzbyBzdWJ0cmFj
dGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0LgorICAgICAgICAoVmVyc2lvbik6CisgICAgICAgIChW
ZXJzaW9uLl9fZXFfXyk6IF9fY21wX18gb3BlcmF0b3IgaXMgbm8gbG9uZ2VyIHJlc3BlY3RlZCwg
c28gd2UgbmVlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgZWFjaCBjb21wYXJpc29uLgorICAgICAg
ICAoVmVyc2lvbi5fX25lX18pOiBEaXR0by4KKyAgICAgICAgKFZlcnNpb24uX19sdF9fKTogRGl0
dG8uCisgICAgICAgIChWZXJzaW9uLl9fbGVfXyk6IERpdHRvLgorICAgICAgICAoVmVyc2lvbi5f
X2d0X18pOiBEaXR0by4KKyAgICAgICAgKFZlcnNpb24uX19nZV9fKTogRGl0dG8uCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weToKKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLl9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24pOgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAudG9fbmFtZSk6IHhyYW5nZSAtPiByYW5nZS4KKyAgICAgICAgKFZlcnNpb25O
YW1lTWFwLmZyb21fbmFtZSk6IGl0ZXJpdGVtcyAtPiBpdGVtcy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5OiBVc2UgYWJzb2x1
dGUgaW1wb3J0cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3Vu
aXR0ZXN0LnB5OiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXZl
ZGlmZi5weToKKyAgICAgICAgKFdhdmVEaWZmLl9faW5pdF9fKTogU3RyaW5nSU8gLT4gQnl0ZXNJ
Ty4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvX19pbml0X18ucHk6CisgICAgICAg
IChvdXRzaWRlKToKKwogMjAxOS0wOS0yNSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0VXU10gUnVuSmF2YVNjcmlwdENvcmVUZXN0c1RvVCBzaG91bGQg
dXNlIHRoZSBzYW1lIGNvbW1hbmQgYXMgUnVuSmF2YVNjcmlwdENvcmVUZXN0cwpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdW5pY29kZV9jb21wYXRpYmlsaXR5LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3VuaWNvZGVfY29tcGF0aWJp
bGl0eS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi91
bmljb2RlX2NvbXBhdGliaWxpdHkucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW8KK2ltcG9y
dCBzeXMKKworCitCeXRlc0lPID0gaW8uQnl0ZXNJTworaWYgc3lzLnZlcnNpb25faW5mbyA+ICgz
LCAwKToKKyAgICBTdHJpbmdJTyA9IGlvLlN0cmluZ0lPCitlbHNlOgorICAgIGZyb20gU3RyaW5n
SU8gaW1wb3J0IFN0cmluZ0lPCitVbmljb2RlSU8gPSBpby5TdHJpbmdJTworCit1bmljb2RlID0g
c3RyIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCkgZWxzZSB1bmljb2RlCisKKworZGVmIGVu
Y29kZV9pZl9uZWNlc3NhcnkodmFsdWUsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3RyaWN0
Jyk6CisgICAgIyBJbiBQeXRob24gMywgc3RyaW5nIHR5cGVzIG11c3QgYmUgZW5jb2RlZAorICAg
IGlmIHR5cGUodmFsdWUpID09IHVuaWNvZGU6CisgICAgICAgIHJldHVybiB2YWx1ZS5lbmNvZGUo
ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpCisgICAgcmV0dXJuIHZhbHVlCisKKworZGVmIGRlY29k
ZV9pZl9uZWNlc3NhcnkodmFsdWUsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3RyaWN0Jyk6
CisgICAgIyBJbiBQeXRob24gMiwgc3RyaW5nIHR5cGVzIG1pZ2h0IG5lZWQgdG8gYmUgZGVjb2Rl
ZAorICAgIGlmIHR5cGUodmFsdWUpID09IGJ5dGVzOgorICAgICAgICByZXR1cm4gdmFsdWUuZGVj
b2RlKGVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKQorICAgIHJldHVybiB2YWx1ZQorCisKK2RlZiBk
ZWNvZGVfZm9yKHZhbHVlLCB0YXJnZXRfdHlwZSk6CisgICAgaWYgdHlwZSh2YWx1ZSkgPT0gdGFy
Z2V0X3R5cGU6CisgICAgICAgIHJldHVybiB2YWx1ZQorICAgIGlmIHRhcmdldF90eXBlID09IHVu
aWNvZGU6CisgICAgICAgIHJldHVybiBkZWNvZGVfaWZfbmVjZXNzYXJ5KGJ5dGVzKHZhbHVlKSkK
KyAgICByZXR1cm4gdmFsdWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbi5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFZl
cnNpb24ob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGZyb21faXRlcmFibGUo
dmFsKToKICAgICAgICAgcmVzdWx0ID0gVmVyc2lvbigpCi0gICAgICAgIGZvciBpIGluIHhyYW5n
ZShsZW4odmFsKSk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWwpKToKICAgICAgICAg
ICAgIHJlc3VsdFtpXSA9IGludCh2YWxbaV0pCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAg
IEBzdGF0aWNtZXRob2QKICAgICBkZWYgZnJvbV9uYW1lKG5hbWUpOgotICAgICAgICBmcm9tIHZl
cnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCisgICAgICAgIGZyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiAgICAgICAg
IHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAoKS5mcm9tX25hbWUobmFtZSlbMV0KIAogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtYWpvcj0wLCBtaW5vcj0wLCB0aW55PTAsIG1pY3JvPTAsIG5hbm89
MCk6CkBAIC05OSw3ICs5OSw3IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKICAgICBkZWYgX19j
b250YWluc19fKHNlbGYsIHZlcnNpb24pOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJz
aW9uLCBWZXJzaW9uKQogICAgICAgICBkb2VzX21hdGNoID0gVHJ1ZQotICAgICAgICBmb3IgaSBp
biB4cmFuZ2UobGVuKHZlcnNpb24pKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZlcnNp
b24pKToKICAgICAgICAgICAgIGlmIHNlbGZbaV0gIT0gdmVyc2lvbltpXToKICAgICAgICAgICAg
ICAgICBkb2VzX21hdGNoID0gRmFsc2UKICAgICAgICAgICAgIGlmIG5vdCBkb2VzX21hdGNoIGFu
ZCBzZWxmW2ldICE9IDA6CkBAIC0xMDgsMTggKzEwOCwzNyBAQCBjbGFzcyBWZXJzaW9uKG9iamVj
dCk6CiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQot
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAgZm9yIGkgaW4gcmFu
Z2UobGVuKHNlbGYpKToKICAgICAgICAgICAgIGlmIHNlbGZbaV06CiAgICAgICAgICAgICAgICAg
bGVuX3RvX3ByaW50ID0gaSArIDEKICAgICAgICAgcmVzdWx0ID0gc3RyKHNlbGYubWFqb3IpCi0g
ICAgICAgIGZvciBpIGluIHhyYW5nZShsZW5fdG9fcHJpbnQgLSAxKToKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UobGVuX3RvX3ByaW50IC0gMSk6CiAgICAgICAgICAgICByZXN1bHQgKz0gJy57fScu
Zm9ybWF0KHNlbGZbaSArIDFdKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19j
bXBfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIG90aGVyIGlzIE5vbmU6CiAgICAgICAgICAg
ICByZXR1cm4gMQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKLSAgICAgICAg
ICAgIGlmIGNtcChzZWxmW2ldLCBvdGhlcltpXSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNt
cChzZWxmW2ldLCBvdGhlcltpXSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYpKToK
KyAgICAgICAgICAgIGRpZmYgPSBzZWxmW2ldIC0gb3RoZXJbaV0KKyAgICAgICAgICAgIGlmIGRp
ZmY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYKICAgICAgICAgcmV0dXJuIDAKKworICAg
IGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90
aGVyKSA9PSAwCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX19jbXBfXyhvdGhlcikgIT0gMAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDwgMAorCisgICAgZGVmIF9fbGVf
XyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDw9IDAK
KworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2Nt
cF9fKG90aGVyKSA+IDAKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA+PSAwCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHJldmlzaW9uIDI1MDM3MSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDEzICs5MCwxMyBAQCBjbGFzcyBWZXJzaW9uTmFtZU1hcChvYmpl
Y3QpOgogICAgIGRlZiBfYXV0b21hcF90b19tYWpvcl92ZXJzaW9uKGNscywgcHJlZml4LCBtaW5p
bXVtPVZlcnNpb24oMSksIG1heGltdW09VmVyc2lvbigxKSk6CiAgICAgICAgIHJlc3VsdCA9IHt9
CiAgICAgICAgIGFzc2VydCBtaW5pbXVtIDw9IG1heGltdW0KLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKChtYXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1ham9yKToKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoKG1heGltdW0ubWFqb3IgKyAxKSAtIG1pbmltdW0ubWFqb3IpOgogICAgICAgICAg
ICAgcmVzdWx0Wyd7fSB7fScuZm9ybWF0KHByZWZpeCwgc3RyKFZlcnNpb24obWluaW11bS5tYWpv
ciArIGkpKSldID0gVmVyc2lvbihtaW5pbXVtLm1ham9yICsgaSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdAogCiAgICAgZGVmIHRvX25hbWUoc2VsZiwgdmVyc2lvbiwgcGxhdGZvcm09Tm9uZSwgdGFi
bGU9UFVCTElDX1RBQkxFKToKICAgICAgICAgY2xvc2VzdF9tYXRjaCA9IChOb25lLCBOb25lKQot
ICAgICAgICBmb3Igb3NfbmFtZSwgb3NfdmVyc2lvbiBpbiBzZWxmLm1hcHBpbmdfZm9yX3BsYXRm
b3JtKHBsYXRmb3JtLCB0YWJsZSkuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBvc19uYW1lLCBv
c192ZXJzaW9uIGluIHNlbGYubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm0sIHRhYmxlKS5p
dGVtcygpOgogICAgICAgICAgICAgaWYgdmVyc2lvbiA9PSBvc192ZXJzaW9uOgogICAgICAgICAg
ICAgICAgIHJldHVybiBvc19uYW1lCiAgICAgICAgICAgICBlbGlmIHZlcnNpb24gaW4gb3NfdmVy
c2lvbjoKQEAgLTEyNiwxNiArMTI2LDE2IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6
CiAKICAgICBkZWYgZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgogICAgICAgICAjIEV4YWN0IG1hdGNo
Ci0gICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZXJpdGVtcygpOgotICAgICAg
ICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgIGZv
ciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igb3NfbmFt
ZSwgb3NfbWFwIGluIG1hcC5pdGVtcygpOgogICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gb3Nf
bWFwOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9zX25hbWUsIG9zX21hcFtuYW1lXSkK
IAogICAgICAgICAjIEl0J3Mgbm90IGFuIGV4YWN0IG1hdGNoLCBsZXQncyB0cnkgdW5pZnlpbmcg
Zm9ybWF0dGluZwogICAgICAgICB1bmZvcm1hdHRlZCA9IHNlbGYuc3RyaXBfbmFtZV9mb3JtYXR0
aW5nKG5hbWUpCi0gICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZXJpdGVtcygp
OgotICAgICAgICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlcml0ZW1zKCk6Ci0g
ICAgICAgICAgICAgICAgZm9yIHZlcnNpb25fbmFtZSwgdmVyc2lvbiBpbiBvc19tYXAuaXRlcml0
ZW1zKCk6CisgICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZW1zKCk6CisgICAg
ICAgICAgICBmb3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVtcygpOgorICAgICAgICAgICAg
ICAgIGZvciB2ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4gb3NfbWFwLml0ZW1zKCk6CiAgICAgICAg
ICAgICAgICAgICAgIGlmIHNlbGYuc3RyaXBfbmFtZV9mb3JtYXR0aW5nKHZlcnNpb25fbmFtZSkg
PT0gdW5mb3JtYXR0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9zX25hbWUs
IHZlcnNpb24pCiAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0
dGVzdC5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5
c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KLWZyb20gdmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVN
YXAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25O
YW1lTWFwCiAKIAogY2xhc3MgVmVyc2lvbk1hcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0
dGVzdC5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAog
CiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB2ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiAKIAogY2xhc3MgVmVyc2lvblRl
c3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3dhdmVkaWZmLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3dhdmVkaWZmLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTIgKzIwLDEz
IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgU3RyaW5nSU8KIGlt
cG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHdhdmUKIAor
ZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworCiAKIGNsYXNzIFdhdmVEaWZmKG9iamVjdCk6CiAgICAg
X3BhcmFtTmFtZXMgPSAoJ051bWJlciBvZiBjaGFubmVscycsICdTYW1wbGUgd2lkdGgnLCAnU2Ft
cGxlIHJhdGUnLCAnTnVtYmVyIG9mIGZyYW1lcycsICdDb21wcmVzc2lvbiB0eXBlJywgJ0NvbXBy
ZXNzaW9uIG5hbWUnKQpAQCAtMzcsMTEgKzM4LDExIEBAIGNsYXNzIFdhdmVEaWZmKG9iamVjdCk6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoaW4xLCBmaWxlKToKICAgICAgICAgICAgIHdhdmVGaWxl
MSA9IHdhdmUub3BlbihpbjEsICdyYicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3YXZl
RmlsZTEgPSB3YXZlLm9wZW4oU3RyaW5nSU8uU3RyaW5nSU8oaW4xKSwgJ3JiJykKKyAgICAgICAg
ICAgIHdhdmVGaWxlMSA9IHdhdmUub3BlbihCeXRlc0lPKGluMSksICdyYicpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoaW4yLCBmaWxlKToKICAgICAgICAgICAgIHdhdmVGaWxlMSA9IHdhdmUub3Bl
bihpbjIsICdyYicpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3YXZlRmlsZTIgPSB3YXZl
Lm9wZW4oU3RyaW5nSU8uU3RyaW5nSU8oaW4yKSwgJ3JiJykKKyAgICAgICAgICAgIHdhdmVGaWxl
MiA9IHdhdmUub3BlbihCeXRlc0lPKGluMiksICdyYicpCiAKICAgICAgICAgcGFyYW1zMSA9IHdh
dmVGaWxlMS5nZXRwYXJhbXMoKQogICAgICAgICBwYXJhbXMyID0gd2F2ZUZpbGUyLmdldHBhcmFt
cygpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vs
b2cucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvY2hhbmdlbG9nLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEx
ICszMCwxMSBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCi1mcm9tIFN0cmluZ0lPIGlt
cG9ydCBTdHJpbmdJTwogaW1wb3J0IHRleHR3cmFwCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNv
bmZpZy5jb21taXR0ZXJzIGltcG9ydCBDb21taXR0ZXJMaXN0CiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21t
b24udW5pY29kZV9jb21wYXRpYmlsaXR5IGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHdlYmtpdHB5
LmNvbW1vbi5jb25maWcudXJscyBhcyBjb25maWdfdXJscwogCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9jaGVja291dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9jaGVja291dC5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hlY2tvdXQucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE0ICsyNiwxMyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1w
b3J0IFN0cmluZ0lPCi0KIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZyBpbXBvcnQgdXJscwog
ZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIGltcG9ydCBDaGFuZ2VMb2cs
IHBhcnNlX2J1Z19pZF9mcm9tX2NoYW5nZWxvZwogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tv
dXQuY29tbWl0aW5mbyBpbXBvcnQgQ29tbWl0SW5mbwogZnJvbSB3ZWJraXRweS5jb21tb24uY2hl
Y2tvdXQuc2NtIGltcG9ydCBDb21taXRNZXNzYWdlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1v
aXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi51bmljb2RlX2NvbXBh
dGliaWxpdHkgaW1wb3J0IFN0cmluZ0lPCiAKIAogIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhl
IFdlYktpdC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgY2hlY2tvdXQgKGxpa2UgQ2hhbmdlTG9ncyku
CkBAIC02MSw3ICs2MCw3IEBAIGNsYXNzIENoZWNrb3V0KG9iamVjdCk6CiAgICAgICAgICMgdGhh
dCBDaGFuZ2VMb2cgZmlsZXMgYXJlIHV0Zi04LiAgcGFyc2VfbGF0ZXN0X2VudHJ5X2Zyb21fZmls
ZQogICAgICAgICAjIGV4cGVjdHMgYSBmaWxlLWxpa2Ugb2JqZWN0IHdoaWNoIHZlbmRzIHVuaWNv
ZGUoKSwgc28gd2UgZGVjb2RlIGhlcmUuCiAgICAgICAgICMgT2xkIHJldmlzaW9ucyBvZiBTb3Vy
Y2VzL1dlYktpdC93eC9DaGFuZ2VMb2cgaGF2ZSBzb21lIGludmFsaWQgdXRmOCBjaGFyYWN0ZXJz
LgotICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKGNoYW5nZWxvZ19j
b250ZW50cy5kZWNvZGUoInV0Zi04IiwgImlnbm9yZSIpKQorICAgICAgICBjaGFuZ2Vsb2dfZmls
ZSA9IFN0cmluZ0lPKGNoYW5nZWxvZ19jb250ZW50cy5kZWNvZGUoInV0Zi04IiwgImlnbm9yZSIp
KQogICAgICAgICByZXR1cm4gQ2hhbmdlTG9nLnBhcnNlX2xhdGVzdF9lbnRyeV9mcm9tX2ZpbGUo
Y2hhbmdlbG9nX2ZpbGUpCiAKICAgICBkZWYgY2hhbmdlbG9nX2VudHJpZXNfZm9yX3JldmlzaW9u
KHNlbGYsIHJldmlzaW9uLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkJKHJldmlzaW9u
IDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0
ZXJzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgY2xhc3MgQ29tbWl0dGVy
TGlzdChvYmplY3QpOgogICAgICAgICBzZWxmLl9jb21taXR0ZXJzID0gW10KICAgICAgICAgc2Vs
Zi5fcmV2aWV3ZXJzID0gW10KIAotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBjb250cmlidXRv
cnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIGNvbnRyaWJ1dG9ycy5p
dGVtcygpOgogICAgICAgICAgICAgY29udHJpYnV0b3IgPSBOb25lCiAgICAgICAgICAgICBzdGF0
dXMgPSBkYXRhLmdldCgnc3RhdHVzJykKICAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAicmV2aWV3
ZXIiOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L25ldHdvcmt0cmFu
c2FjdGlvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvbmV0d29ya3RyYW5zYWN0aW9uLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNywxMyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIyCisKK2lmIHN5cy52ZXJzaW9u
X2luZm8gPiAoMywgMCk6CisgICAgZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IEhUVFBFcnJvciwg
VVJMRXJyb3IKK2Vsc2U6CisgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBIVFRQRXJyb3IsIFVSTEVy
cm9yCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTEsMTMgKzU2
LDEzIEBAIGNsYXNzIE5ldHdvcmtUcmFuc2FjdGlvbihvYmplY3QpOgogICAgICAgICB3aGlsZSBU
cnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KCkK
LSAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciBhcyBlOgorICAgICAgICAgICAg
ZXhjZXB0IEhUVFBFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnRf
NDA0X3RvX05vbmUgYW5kIGUuY29kZSA9PSA0MDQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb25lCiAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfZm9yX3RpbWVvdXQoKQogICAgICAg
ICAgICAgICAgIF9sb2cud2FybigiUmVjZWl2ZWQgSFRUUCBzdGF0dXMgJXMgbG9hZGluZyBcIiVz
XCIuICBSZXRyeWluZyBpbiAlcyBzZWNvbmRzLi4uIiAlIChlLmNvZGUsIGUuZmlsZW5hbWUsIHNl
bGYuX2JhY2tvZmZfc2Vjb25kcykpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAoKQotICAg
ICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2Vw
dCBVUkxFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Zvcl90aW1lb3V0
KCkKICAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ1JlY2VpdmVkIFVSTEVycm9yOiAie30iIHdo
aWxlIGxvYWRpbmcge30uIFJldHJ5aW5nIGluIHt9IHNlY29uZHMuLi4nLmZvcm1hdChlLnJlYXNv
biwgdXJsLCBzZWxmLl9iYWNrb2ZmX3NlY29uZHMpKQogICAgICAgICAgICAgICAgIHNlbGYuX3Ns
ZWVwKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9hYnN0cmFj
dGV4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vYWJzdHJhY3RleGVjdXRpdmUucHkJKHJldmlzaW9uIDI1MDM3MSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9hYnN0cmFjdGV4ZWN1dGl2ZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQot
Citmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgdW5pY29kZV9jb21wYXRpYmlsaXR5CiAKIGNs
YXNzIEFic3RyYWN0RXhlY3V0aXZlKG9iamVjdCk6CiAKQEAgLTEwMSwyMCArMTAxLDEzIEBAIGNs
YXNzIEFic3RyYWN0RXhlY3V0aXZlKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBf
c3RyaW5naWZ5X2FyZ3Moc2VsZiwgYXJncyk6Ci0gICAgICAgIHJldHVybiBtYXAodW5pY29kZSwg
YXJncykKKyAgICAgICAgcmV0dXJuIG1hcCh1bmljb2RlX2NvbXBhdGliaWxpdHkudW5pY29kZSwg
YXJncykKIAogICAgIGRlZiBjb21tYW5kX2Zvcl9wcmludGluZyhzZWxmLCBhcmdzKToKICAgICAg
ICAgIiIiUmV0dXJucyBhIHByaW50LXJlYWR5IHN0cmluZyByZXByZXNlbnRpbmcgY29tbWFuZCBh
cmdzLgogICAgICAgICBUaGUgc3RyaW5nIHNob3VsZCBiZSBjb3B5L3Bhc3RlIHJlYWR5IGZvciBl
eGVjdXRpb24gaW4gYSBzaGVsbC4iIiIKICAgICAgICAgYXJncyA9IHNlbGYuX3N0cmluZ2lmeV9h
cmdzKGFyZ3MpCi0gICAgICAgIGVzY2FwZWRfYXJncyA9IFtdCi0gICAgICAgIGZvciBhcmcgaW4g
YXJnczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCB1bmljb2RlKToKLSAgICAgICAg
ICAgICAgICAjIEVzY2FwZSBhbnkgbm9uLWFzY2lpIGNoYXJhY3RlcnMgZm9yIGVhc3kgY29weS9w
YXN0ZQotICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5lbmNvZGUoInVuaWNvZGVfZXNjYXBlIikK
LSAgICAgICAgICAgICMgRklYTUU6IERvIHdlIG5lZWQgdG8gZml4IHF1b3RlcyBoZXJlPwotICAg
ICAgICAgICAgZXNjYXBlZF9hcmdzLmFwcGVuZChhcmcpCi0gICAgICAgIHJldHVybiAiICIuam9p
bihlc2NhcGVkX2FyZ3MpCisgICAgICAgIHJldHVybiB1bmljb2RlX2NvbXBhdGliaWxpdHkuZGVj
b2RlX2lmX25lY2Vzc2FyeSh1bmljb2RlX2NvbXBhdGliaWxpdHkuZW5jb2RlX2lmX25lY2Vzc2Fy
eSgnICcuam9pbihhcmdzKSwgJ3VuaWNvZGVfZXNjYXBlJykpCiAKICAgICBkZWYgcnVuX2NvbW1h
bmQoc2VsZiwgYXJncywgY3dkPU5vbmUsIGVudj1Ob25lLCBpbnB1dD1Ob25lLCBlcnJvcl9oYW5k
bGVyPU5vbmUsIGlnbm9yZV9lcnJvcnM9RmFsc2UsCiAgICAgICAgIHJldHVybl9leGl0X2NvZGU9
RmFsc2UsIHJldHVybl9zdGRlcnI9VHJ1ZSwgZGVjb2RlX291dHB1dD1UcnVlKToKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQko
cmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2NyYXNobG9ncy5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQCBpbXBvcnQgZGF0
ZXRpbWUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcmUKIAorZnJvbSB3ZWJraXRweS5jb21tb24g
aW1wb3J0IHVuaWNvZGVfY29tcGF0aWJpbGl0eQorCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKIApAQCAtMTA5LDcgKzExMSw3IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3Qp
OgogICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAg
ICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3Qu
ZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46Ci0gICAgICAgICAgICAgICAgICAg
IGxvZ19maWxlID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCku
ZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKQorICAgICAgICAgICAgICAgICAgICBsb2dfZmlsZSA9
IHVuaWNvZGVfY29tcGF0aWJpbGl0eS5kZWNvZGVfaWZfbmVjZXNzYXJ5KHNlbGYuX2hvc3QuZmls
ZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKHBhdGgpLCAnYXNjaWknLCAnaWdub3JlJykKICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLkdMT0JBTF9QSURfUkVHRVguc2VhcmNoKGxvZ19m
aWxlKQogICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZDoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0
dGVzdC5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3Rl
bQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhv
c3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1v
Y2tTeXN0ZW1Ib3N0Ci1mcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawor
ZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHVuaWNvZGVfY29tcGF0aWJpbGl0eQogCiAjIE5l
ZWRlZCB0byBzdXBwb3J0IFdpbmRvd3MgcG9ydCB0ZXN0cwogZnJvbSB3ZWJraXRweS5wb3J0Lndp
biBpbXBvcnQgV2luUG9ydApAQCAtMjk4LDYgKzI5OCw5IEBAIGNsYXNzIENyYXNoTG9nc1Rlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9jay9MaWJy
YXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3
MjFfcXVhZHplbi5jcmFzaCddID0gTm9uZQogICAgICAgICBzZWxmLmZpbGVzWycvVXNlcnMvbW9j
ay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0x
My0xNTA3MjJfcXVhZHplbi5jcmFzaCddID0gc2VsZi5vdGhlcl9wcm9jZXNzX21vY2tfY3Jhc2hf
cmVwb3J0CiAgICAgICAgIHNlbGYuZmlsZXNbJy9Vc2Vycy9tb2NrL0xpYnJhcnkvTG9ncy9EaWFn
bm9zdGljUmVwb3J0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcyM19xdWFkemVuLmNy
YXNoJ10gPSBzZWxmLm1pc2Zvcm1hdHRlZF9tb2NrX2NyYXNoX3JlcG9ydAorCisgICAgICAgIHNl
bGYuZmlsZXMgPSB7a2V5OiB1bmljb2RlX2NvbXBhdGliaWxpdHkuZW5jb2RlX2lmX25lY2Vzc2Fy
eSh2YWx1ZSkgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5maWxlcy5pdGVtcygpfQorCiAgICAgICAg
IHNlbGYuZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVtKHNlbGYuZmlsZXMpCiAgICAgICAgIGNy
YXNoX2xvZ3MgPSBDcmFzaExvZ3MoTW9ja1N5c3RlbUhvc3QoZmlsZXN5c3RlbT1zZWxmLmZpbGVz
eXN0ZW0pLCBDcmFzaExvZ3NUZXN0LkRBUldJTl9NT0NLX0NSQVNIX0RJUkVDVE9SWSkKICAgICAg
ICAgbG9ncyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191bmRlcignL1VzZXJzL21vY2svTGlicmFy
eS9Mb2dzL0RpYWdub3N0aWNSZXBvcnRzLycpCkBAIC0zMTMsOCArMzE2LDggQEAgY2xhc3MgQ3Jh
c2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGFsbF9sb2dzID0gY3Jhc2hf
bG9ncy5maW5kX2FsbF9sb2dzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsX2xv
Z3MpLCA4KQogCi0gICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gYWxsX2xvZ3MuaXRlcml0
ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3Jhc2hfbG9nIGluIHNlbGYuZmls
ZXMudmFsdWVzKCkpCisgICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gYWxsX2xvZ3MuaXRl
bXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmFzaF9sb2cgaW4gW3VuaWNvZGVf
Y29tcGF0aWJpbGl0eS5kZWNvZGVfaWZfbmVjZXNzYXJ5KHZhbHVlKSBmb3IgdmFsdWUgaW4gc2Vs
Zi5maWxlcy52YWx1ZXMoKV0pCiAgICAgICAgICAgICBpZiB0ZXN0LnNwbGl0KCctJylbMF0gIT0g
J1NhbmRib3gnOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0ID09ICJVbmtu
b3duIiBvciBpbnQodGVzdC5zcGxpdCgiLSIpWzFdKSBpbiByYW5nZSgyODUyNywgMjg1MzEpKQog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2Vudmlyb25tZW50X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZW52aXJvbm1lbnRfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZy
b20gLmVudmlyb25tZW50IGltcG9ydCBFbnZpcm9ubWVudAorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmVudmlyb25tZW50IGltcG9ydCBFbnZpcm9ubWVudAogCiAKIGNsYXNzIEVudmlyb25t
ZW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkJKHJldmlzaW9uIDI1MDM3MSkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0
IG11bHRpcHJvY2Vzc2luZwpAQCAtMzksNiArMzgsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uYWJzdHJhY3RleGVjdXRpdmUgaW1wb3J0IEFic3RyYWN0RXhl
Y3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0dGVlIGltcG9ydCBUZWUK
K2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB1bmljb2RlX2NvbXBhdGliaWxpdHkKIAogCiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC03MSw3ICs3MSw3IEBAIGNsYXNz
IFNjcmlwdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHUiJXNcblxu
TGFzdCAlcyBjaGFyYWN0ZXJzIG9mIG91dHB1dDpcbiVzIiAlIFwKICAgICAgICAgICAgICAgICAg
ICAgKHNlbGYsIG91dHB1dF9saW1pdCwgc2VsZi5vdXRwdXRbLW91dHB1dF9saW1pdDpdKQogICAg
ICAgICAgICAgcmV0dXJuIHUiJXNcblxuJXMiICUgKHNlbGYsIHNlbGYub3V0cHV0KQotICAgICAg
ICByZXR1cm4gdW5pY29kZShzZWxmKQorICAgICAgICByZXR1cm4gdW5pY29kZV9jb21wYXRpYmls
aXR5LnVuaWNvZGUoc2VsZikKIAogICAgIGRlZiBjb21tYW5kX25hbWUoc2VsZik6CiAgICAgICAg
IGNvbW1hbmRfcGF0aCA9IHNlbGYuc2NyaXB0X2FyZ3MKQEAgLTg0LDYgKzg0LDE5IEBAIGNsYXNz
IEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgUElQRSA9IHN1YnByb2Nlc3MuUElQ
RQogICAgIFNURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCiAKKyAgICBjbGFzcyBXcmFwcGVkUG9w
ZW4ob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcGVuKToKKyAgICAgICAg
ICAgIGZvciBhdHRyaWJ1dGUgaW4gZGlyKHBvcGVuKToKKyAgICAgICAgICAgICAgICBpZiBhdHRy
aWJ1dGUuc3RhcnRzd2l0aCgnX18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGF0dHJpYnV0ZSwgZ2V0YXR0cihwb3BlbiwgYXR0
cmlidXRlKSkKKworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYKKworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAg
ICAgc2VsZi53YWl0KCkKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5w
aWRfdG9fc3lzdGVtX3BpZCA9IHt9CiAgICAgICAgIHNlbGYuX2lzX25hdGl2ZV93aW4gPSBzeXMu
cGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykKQEAgLTEwOCwxOCArMTIxLDEzIEBAIGNsYXNzIEV4
ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb3NlX2Zkcz1zZWxmLl9zaG91bGRfY2xvc2VfZmRzKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQogCi0gICAgICAgICMgVXNlIG91ciBvd24g
Y3VzdG9tIHdhaXQgbG9vcCBiZWNhdXNlIFBvcGVuIGlnbm9yZXMgYSB0ZWUnZAotICAgICAgICAj
IHN0ZGVyci9zdGRvdXQuCi0gICAgICAgICMgRklYTUU6IFRoaXMgY291bGQgYmUgaW1wcm92ZWQg
bm90IHRvIGZsYXR0ZW4gb3V0cHV0IHRvIHN0ZG91dC4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAg
ICAgICAgICAgIG91dHB1dF9saW5lID0gY2hpbGRfcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKQot
ICAgICAgICAgICAgaWYgb3V0cHV0X2xpbmUgPT0gIiIgYW5kIGNoaWxkX3Byb2Nlc3MucG9sbCgp
ICE9IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5k
IGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdz
LnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkX3By
b2Nlc3MucG9sbCgpCi0gICAgICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBwcm9j
ZXNzIHdyb3RlIHRvIHVzIGluIHV0Zi04LAotICAgICAgICAgICAgIyBzbyBubyByZS1lbmNvZGlu
ZyBpcyBuZWNlc3NhcnkgYmVmb3JlIHdyaXRpbmcgaGVyZS4KLSAgICAgICAgICAgIHRlZWRfb3V0
cHV0LndyaXRlKG91dHB1dF9saW5lKQorICAgICAgICB3aXRoIGNoaWxkX3Byb2Nlc3M6CisgICAg
ICAgICAgICAjIFVzZSBvdXIgb3duIGN1c3RvbSB3YWl0IGxvb3AgYmVjYXVzZSBQb3BlbiBpZ25v
cmVzIGEgdGVlJ2QKKyAgICAgICAgICAgICMgc3RkZXJyL3N0ZG91dC4KKyAgICAgICAgICAgICMg
RklYTUU6IFRoaXMgY291bGQgYmUgaW1wcm92ZWQgbm90IHRvIGZsYXR0ZW4gb3V0cHV0IHRvIHN0
ZG91dC4KKyAgICAgICAgICAgIHdoaWxlIGNoaWxkX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6Cisg
ICAgICAgICAgICAgICAgb3V0cHV0X2xpbmUgPSBjaGlsZF9wcm9jZXNzLnN0ZG91dC5yZWFkbGlu
ZSgpCisgICAgICAgICAgICAgICAgdGVlZF9vdXRwdXQud3JpdGUodW5pY29kZV9jb21wYXRpYmls
aXR5LmRlY29kZV9mb3Iob3V0cHV0X2xpbmUsIHN0cikpCiAKICAgICAjIEZJWE1FOiBSZW1vdmUg
dGhpcyBkZXByZWNhdGVkIG1ldGhvZCBhbmQgbW92ZSBjYWxsZXJzIHRvIHJ1bl9jb21tYW5kLgog
ICAgICMgRklYTUU6IFRoaXMgbWV0aG9kIGlzIGEgaGFjayB0byBhbGxvdyBydW5uaW5nIGNvbW1h
bmQgd2hpY2ggYm90aApAQCAtMTI4LDIxICsxMzYsMjUgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3Ry
YWN0RXhlY3V0aXZlKToKICAgICAjIGJ1dCBzdGlsbCBoYXZlIHRoZSBvdXRwdXQgdG8gc3R1ZmYg
aW50byBhIGxvZyBmaWxlLgogICAgIGRlZiBydW5fYW5kX3Rocm93X2lmX2ZhaWwoc2VsZiwgYXJn
cywgcXVpZXQ9RmFsc2UsIGRlY29kZV9vdXRwdXQ9VHJ1ZSwgKiprd2FyZ3MpOgogICAgICAgICAj
IENhY2hlIHRoZSBjaGlsZCdzIG91dHB1dCBsb2NhbGx5IHNvIGl0IGNhbiBiZSB1c2VkIGZvciBl
cnJvciByZXBvcnRzLgotICAgICAgICBjaGlsZF9vdXRfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lP
KCkKKyAgICAgICAgY2hpbGRfb3V0X2ZpbGUgPSB1bmljb2RlX2NvbXBhdGliaWxpdHkuU3RyaW5n
SU8oKQogICAgICAgICB0ZWVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBpZiBxdWlldDoK
LSAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpICAjIEZJWE1FOiBE
b2VzIHRoaXMgbmVlZCBhbiBlbmNvZGluZz8KLSAgICAgICAgICAgIHRlZV9zdGRvdXQgPSBkZXZf
bnVsbAotICAgICAgICBjaGlsZF9zdGRvdXQgPSBUZWUoY2hpbGRfb3V0X2ZpbGUsIHRlZV9zdGRv
dXQpCi0gICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX3J1bl9jb21tYW5kX3dpdGhfdGVlZF9vdXRw
dXQoYXJncywgY2hpbGRfc3Rkb3V0LCAqKmt3YXJncykKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAg
ICAgICAgICBkZXZfbnVsbC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHF1
aWV0OgorICAgICAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpICAj
IEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhbiBlbmNvZGluZz8KKyAgICAgICAgICAgICAgICB0ZWVf
c3Rkb3V0ID0gZGV2X251bGwKKyAgICAgICAgICAgIGNoaWxkX3N0ZG91dCA9IFRlZShjaGlsZF9v
dXRfZmlsZSwgdGVlX3N0ZG91dCkKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IHNlbGYuX3J1bl9j
b21tYW5kX3dpdGhfdGVlZF9vdXRwdXQoYXJncywgY2hpbGRfc3Rkb3V0LCAqKmt3YXJncykKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgIGRl
dl9udWxsLmNsb3NlKCkKIAogICAgICAgICBjaGlsZF9vdXRwdXQgPSBjaGlsZF9vdXRfZmlsZS5n
ZXR2YWx1ZSgpCiAgICAgICAgIGNoaWxkX291dF9maWxlLmNsb3NlKCkKIAogICAgICAgICBpZiBk
ZWNvZGVfb3V0cHV0OgotICAgICAgICAgICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0cHV0LmRl
Y29kZShzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCisgICAgICAgICAgICBjaGlsZF9v
dXRwdXQgPSB1bmljb2RlX2NvbXBhdGliaWxpdHkuZGVjb2RlX2lmX25lY2Vzc2FyeShjaGlsZF9v
dXRwdXQsIHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGNoaWxkX291dHB1dCA9IHVuaWNvZGVfY29tcGF0aWJpbGl0eS5lbmNvZGVfaWZf
bmVjZXNzYXJ5KGNoaWxkX291dHB1dCwgc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKQog
CiAgICAgICAgIGlmIGV4aXRfY29kZToKICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKHNj
cmlwdF9hcmdzPWFyZ3MsCkBAIC0yODYsMTcgKzI5OCwxNyBAQCBjbGFzcyBFeGVjdXRpdmUoQWJz
dHJhY3RFeGVjdXRpdmUpOgogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6
CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBz
X3Byb2Nlc3MgPSBzZWxmLnBvcGVuKFsncHMnLCAnLWVvJywgJ3BpZCxjb21tJ10sIHN0ZG91dD1z
ZWxmLlBJUEUsIHN0ZGVycj1zZWxmLlBJUEUpCi0gICAgICAgICAgICBzdGRvdXQsIF8gPSBwc19w
cm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxp
dGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAjIElu
IHNvbWUgY2FzZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUKLSAgICAgICAgICAg
ICAgICAgICAgIyBsZWFkaW5nIHdoaXRlLXNwYWNlcywgc28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0
LgotICAgICAgICAgICAgICAgICAgICBwaWQsIHByb2Nlc3NfbmFtZSA9IGxpbmUuc3RyaXAoKS5z
cGxpdCgnICcsIDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIo
cHJvY2Vzc19uYW1lKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBl
bmQoaW50KHBpZCkpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAg
ICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLnBvcGVuKFsncHMn
LCAnLWVvJywgJ3BpZCxjb21tJ10sIHN0ZG91dD1zZWxmLlBJUEUsIHN0ZGVycj1zZWxmLlBJUEUp
IGFzIHBzX3Byb2Nlc3M6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBfID0gcHNfcHJvY2Vzcy5j
b21tdW5pY2F0ZSgpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAg
IyBJbiBzb21lIGNhc2VzIHRoZSBsaW5lIGNhbiBjb250YWluIG9uZSBvciBtb3JlCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgd2hpdGUtc3BhY2VzLCBzbyBzdHJpcCBpdCBiZWZv
cmUgc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHByb2Nlc3NfbmFtZSA9IGxp
bmUuc3RyaXAoKS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9j
ZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKKyAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAg
ICAgICByZXR1cm4gc29ydGVkKHJ1bm5pbmdfcGlkcykKIApAQCAtMzU1LDggKzM2Nyw3IEBAIGNs
YXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4ZWN1dGl2ZSk6CiAgICAgICAgICMgU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzUyOAogICAgICAgICAjIGZvciBhbiBl
eGFtcGxlIG9mIGEgcmVncmVzaW9uIGNhdXNlZCBieSBwYXNzaW5nIGEgdW5pY29kZSBzdHJpbmcg
ZGlyZWN0bHkuCiAgICAgICAgICMgRklYTUU6IFdlIG1heSBuZWVkIHRvIGVuY29kZSBkaWZmZXJl
bnRseSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLgotICAgICAgICBpZiBpc2luc3RhbmNlKGlucHV0
LCB1bmljb2RlKToKLSAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuZW5jb2RlKHNlbGYuX2NoaWxk
X3Byb2Nlc3NfZW5jb2RpbmcoKSkKKyAgICAgICAgaW5wdXQgPSB1bmljb2RlX2NvbXBhdGliaWxp
dHkuZW5jb2RlX2lmX25lY2Vzc2FyeShpbnB1dCwgc2VsZi5fY2hpbGRfcHJvY2Vzc19lbmNvZGlu
ZygpKQogICAgICAgICByZXR1cm4gKHNlbGYuUElQRSwgaW5wdXQpCiAKICAgICAjIEZJWE1FOiBy
dW5fYW5kX3Rocm93X2lmX2ZhaWwgc2hvdWxkIGJlIG1lcmdlZCBpbnRvIHRoaXMgbWV0aG9kLgpA
QCAtMzg0LDMzICszOTUsMzcgQEAgY2xhc3MgRXhlY3V0aXZlKEFic3RyYWN0RXhlY3V0aXZlKToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWN3ZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW52PWVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vf
ZmRzPXNlbGYuX3Nob3VsZF9jbG9zZV9mZHMoKSkKLSAgICAgICAgb3V0cHV0ID0gcHJvY2Vzcy5j
b21tdW5pY2F0ZShzdHJpbmdfdG9fY29tbXVuaWNhdGUpWzBdCi0KLSAgICAgICAgIyBydW5fY29t
bWFuZCBhdXRvbWF0aWNhbGx5IGRlY29kZXMgdG8gdW5pY29kZSgpIGFuZCBjb252ZXJ0cyBDUkxG
IHRvIExGIHVubGVzcyBleHBsaWNpdGx5IHRvbGQgbm90IHRvLgotICAgICAgICBpZiBkZWNvZGVf
b3V0cHV0OgotICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmRlY29kZShzZWxmLl9jaGlsZF9w
cm9jZXNzX2VuY29kaW5nKCkpLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQotCi0gICAgICAgICMgd2Fp
dCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAg
ICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgZXhpdF9j
b2RlID0gcHJvY2Vzcy53YWl0KCkKKyAgICAgICAgd2l0aCBwcm9jZXNzOgorICAgICAgICAgICAg
aWYgbm90IHN0cmluZ190b19jb21tdW5pY2F0ZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBw
cm9jZXNzLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgb3V0cHV0ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSh1bmljb2RlX2NvbXBhdGliaWxpdHkuZW5j
b2RlX2lmX25lY2Vzc2FyeShzdHJpbmdfdG9fY29tbXVuaWNhdGUsICd1dGYtOCcpKVswXQorCisg
ICAgICAgICAgICAjIHJ1bl9jb21tYW5kIGF1dG9tYXRpY2FsbHkgZGVjb2RlcyB0byB1bmljb2Rl
KCkgYW5kIGNvbnZlcnRzIENSTEYgdG8gTEYgdW5sZXNzIGV4cGxpY2l0bHkgdG9sZCBub3QgdG8u
CisgICAgICAgICAgICBpZiBkZWNvZGVfb3V0cHV0OgorICAgICAgICAgICAgICAgIG91dHB1dCA9
IHVuaWNvZGVfY29tcGF0aWJpbGl0eS5kZWNvZGVfaWZfbmVjZXNzYXJ5KG91dHB1dCwgc2VsZi5f
Y2hpbGRfcHJvY2Vzc19lbmNvZGluZygpKS5yZXBsYWNlKCdcclxuJywgJ1xuJykKKworICAgICAg
ICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1
ZSB0bzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcK
KyAgICAgICAgICAgIGV4aXRfY29kZSA9IHByb2Nlc3Mud2FpdCgpCiAKLSAgICAgICAgX2xvZy5k
ZWJ1ZygnIiVzIiB0b29rICUuMmZzJyAlIChzZWxmLmNvbW1hbmRfZm9yX3ByaW50aW5nKGFyZ3Mp
LCB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUpKQorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnIiVz
IiB0b29rICUuMmZzJyAlIChzZWxmLmNvbW1hbmRfZm9yX3ByaW50aW5nKGFyZ3MpLCB0aW1lLnRp
bWUoKSAtIHN0YXJ0X3RpbWUpKQogCi0gICAgICAgIGlmIHJldHVybl9leGl0X2NvZGU6Ci0gICAg
ICAgICAgICByZXR1cm4gZXhpdF9jb2RlCisgICAgICAgICAgICBpZiByZXR1cm5fZXhpdF9jb2Rl
OgorICAgICAgICAgICAgICAgIHJldHVybiBleGl0X2NvZGUKIAotICAgICAgICBpZiBleGl0X2Nv
ZGU6Ci0gICAgICAgICAgICBzY3JpcHRfZXJyb3IgPSBTY3JpcHRFcnJvcihzY3JpcHRfYXJncz1h
cmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9jb2RlPWV4
aXRfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dD1v
dXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Y3dkKQot
Ci0gICAgICAgICAgICBpZiBpZ25vcmVfZXJyb3JzOgotICAgICAgICAgICAgICAgIGFzc2VydCBl
cnJvcl9oYW5kbGVyIGlzIE5vbmUsICJkb24ndCBzcGVjaWZ5IGVycm9yX2hhbmRsZXIgaWYgaWdu
b3JlX2Vycm9ycyBpcyBUcnVlIgotICAgICAgICAgICAgICAgIGVycm9yX2hhbmRsZXIgPSBFeGVj
dXRpdmUuaWdub3JlX2Vycm9yCisgICAgICAgICAgICBpZiBleGl0X2NvZGU6CisgICAgICAgICAg
ICAgICAgc2NyaXB0X2Vycm9yID0gU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NvZGU9ZXhpdF9jb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dD1vdXRw
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWN3ZCkK
KworICAgICAgICAgICAgICAgIGlmIGlnbm9yZV9lcnJvcnM6CisgICAgICAgICAgICAgICAgICAg
IGFzc2VydCBlcnJvcl9oYW5kbGVyIGlzIE5vbmUsICJkb24ndCBzcGVjaWZ5IGVycm9yX2hhbmRs
ZXIgaWYgaWdub3JlX2Vycm9ycyBpcyBUcnVlIgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9o
YW5kbGVyID0gRXhlY3V0aXZlLmlnbm9yZV9lcnJvcgogCi0gICAgICAgICAgICAoZXJyb3JfaGFu
ZGxlciBvciBzZWxmLmRlZmF1bHRfZXJyb3JfaGFuZGxlcikoc2NyaXB0X2Vycm9yKQotICAgICAg
ICByZXR1cm4gb3V0cHV0CisgICAgICAgICAgICAgICAgKGVycm9yX2hhbmRsZXIgb3Igc2VsZi5k
ZWZhdWx0X2Vycm9yX2hhbmRsZXIpKHNjcmlwdF9lcnJvcikKKyAgICAgICAgICAgIHJldHVybiBv
dXRwdXQKIAogICAgIGRlZiBfY2hpbGRfcHJvY2Vzc19lbmNvZGluZyhzZWxmKToKICAgICAgICAg
IyBXaW4zMiBQeXRob24gMi54IHVzZXMgQ3JlYXRlUHJvY2Vzc0EgcmF0aGVyIHRoYW4gQ3JlYXRl
UHJvY2Vzc1cKQEAgLTQ0MSwxMSArNDU2LDExIEBAIGNsYXNzIEV4ZWN1dGl2ZShBYnN0cmFjdEV4
ZWN1dGl2ZSk6CiAgICAgZGVmIF9lbmNvZGVfYXJndW1lbnRfaWZfbmVlZGVkKHNlbGYsIGFyZ3Vt
ZW50KToKICAgICAgICAgaWYgbm90IHNlbGYuX3Nob3VsZF9lbmNvZGVfY2hpbGRfcHJvY2Vzc19h
cmd1bWVudHMoKToKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudAotICAgICAgICByZXR1cm4g
YXJndW1lbnQuZW5jb2RlKHNlbGYuX2NoaWxkX3Byb2Nlc3NfZW5jb2RpbmcoKSkKKyAgICAgICAg
cmV0dXJuIHVuaWNvZGVfY29tcGF0aWJpbGl0eS5lbmNvZGVfaWZfbmVjZXNzYXJ5KGFyZ3VtZW50
LCBzZWxmLl9jaGlsZF9wcm9jZXNzX2VuY29kaW5nKCkpCiAKICAgICBkZWYgX3N0cmluZ2lmeV9h
cmdzKHNlbGYsIGFyZ3MpOgogICAgICAgICAjIFBvcGVuIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9u
IGlmIGFyZ3MgYXJlIG5vbi1zdHJpbmdzIChsaWtlIGludCgpKQotICAgICAgICBzdHJpbmdfYXJn
cyA9IG1hcCh1bmljb2RlLCBhcmdzKQorICAgICAgICBzdHJpbmdfYXJncyA9IG1hcCh1bmljb2Rl
X2NvbXBhdGliaWxpdHkudW5pY29kZSwgYXJncykKICAgICAgICAgIyBUaGUgV2luZG93cyBpbXBs
ZW1lbnRhdGlvbiBvZiBQb3BlbiBjYW5ub3QgaGFuZGxlIHVuaWNvZGUgc3RyaW5ncy4gOigKICAg
ICAgICAgcmV0dXJuIG1hcChzZWxmLl9lbmNvZGVfYXJndW1lbnRfaWZfbmVlZGVkLCBzdHJpbmdf
YXJncykKIApAQCAtNDc4LDcgKzQ5MywxMiBAQCBjbGFzcyBFeGVjdXRpdmUoQWJzdHJhY3RFeGVj
dXRpdmUpOgogICAgICAgICAgICAgc3RyaW5nX2FyZ3MgPSBhcmdzCiAgICAgICAgIGVsc2U6CiAg
ICAgICAgICAgICBzdHJpbmdfYXJncyA9IHNlbGYuX3N0cmluZ2lmeV9hcmdzKGFyZ3MpCi0gICAg
ICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKHN0cmluZ19hcmdzLCAqKmt3YXJncykKKworICAg
ICAgICAjIFB5dGhvbiAzIHRyZWF0cyBQb3BlbiBhcyBhIGNvbnRleHQgbWFuYWdlciwgd2Ugc2hv
dWxkIGFsbG93IHRoaXMgaW4gUHl0aG9uIDIKKyAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5Q
b3BlbihzdHJpbmdfYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShnZXRh
dHRyKHJlc3VsdCwgIl9fZW50ZXJfXyIsIE5vbmUpKSBhbmQgbm90IGNhbGxhYmxlKGdldGF0dHIo
cmVzdWx0LCAiX19leGl0X18iLCBOb25lKSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5XcmFw
cGVkUG9wZW4ocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgcnVuX2lu
X3BhcmFsbGVsKHNlbGYsIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMsIHByb2Nlc3Nlcz1Ob25lKToK
ICAgICAgICAgIiIiUnVucyBhIGxpc3Qgb2YgKGNtZF9saW5lIGxpc3QsIGN3ZCBzdHJpbmcpIHR1
cGxlcyBpbiBwYXJhbGxlbCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgKHJldGNvZGUsIHN0ZG91dCwg
c3RkZXJyKSB0dXBsZXMuIiIiCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CShyZXZpc2lvbiAyNTAzNzEpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiAK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnVuaWNvZGVfY29tcGF0aWJpbGl0eSBpbXBvcnQgQnl0ZXNJ
TywgdW5pY29kZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
U2NyaXB0RXJyb3IKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtMzgs
OSArMzgsOSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBjbGFzcyBNb2Nr
UHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGRvdXQ9J01PQ0sgU1RE
T1VUXG4nLCBzdGRlcnI9JycpOgogICAgICAgICBzZWxmLnBpZCA9IDQyCi0gICAgICAgIHNlbGYu
c3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oc3Rkb3V0KQotICAgICAgICBzZWxmLnN0ZGVyciA9
IFN0cmluZ0lPLlN0cmluZ0lPKHN0ZGVycikKLSAgICAgICAgc2VsZi5zdGRpbiA9IFN0cmluZ0lP
LlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBCeXRlc0lPKHN0ZG91dCkKKyAgICAg
ICAgc2VsZi5zdGRlcnIgPSBCeXRlc0lPKHN0ZGVycikKKyAgICAgICAgc2VsZi5zdGRpbiA9IEJ5
dGVzSU8oKQogICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAwCiAgICAgICAgIHNlbGYuX2lzX3J1
bm5pbmcgPSBGYWxzZQogCkBAIC01Nyw2ICs1NywxMiBAQCBjbGFzcyBNb2NrUHJvY2VzcyhvYmpl
Y3QpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJu
Y29kZQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKwor
ICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYud2FpdCgpCisKIAog
IyBGSVhNRTogVGhpcyBzaG91bGQgYmUgdW5pZmllZCB3aXRoIE1vY2tFeGVjdXRpdmUyCiBjbGFz
cyBNb2NrRXhlY3V0aXZlKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVj
dXRpdmVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgaWYgdGhp
cmRfcGFydHlfcHkgbm90IGluIHN5cy5wYXRoOgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQorZnJv
bSB3ZWJraXRweS5jb21tb24gaW1wb3J0IHVuaWNvZGVfY29tcGF0aWJpbGl0eQogCiAKIGNsYXNz
IFNjcmlwdEVycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMTgsMTMgKzExOSwxNSBA
QCBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9h
dXRvX3N0cmluZ2lmeV9hcmdzKHNlbGYpOgogICAgICAgICBleGVjdXRpdmUgPSBFeGVjdXRpdmUo
KQogICAgICAgICBleGVjdXRpdmUucnVuX2NvbW1hbmQoY29tbWFuZF9saW5lKCdlY2hvJywgMSkp
Ci0gICAgICAgIGV4ZWN1dGl2ZS5wb3Blbihjb21tYW5kX2xpbmUoJ2VjaG8nLCAxKSwgc3Rkb3V0
PWV4ZWN1dGl2ZS5QSVBFKS53YWl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZWNobyAx
JywgZXhlY3V0aXZlLmNvbW1hbmRfZm9yX3ByaW50aW5nKFsnZWNobycsIDFdKSkKKyAgICAgICAg
d2l0aCBleGVjdXRpdmUucG9wZW4oY29tbWFuZF9saW5lKCdlY2hvJywgMSksIHN0ZG91dD1leGVj
dXRpdmUuUElQRSkgYXMgcHJvY2VzczoKKyAgICAgICAgICAgIHByb2Nlc3Mud2FpdCgpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdlY2hvIDEnLCBleGVjdXRpdmUuY29tbWFuZF9mb3Jf
cHJpbnRpbmcoWydlY2hvJywgMV0pKQogCiAgICAgZGVmIHRlc3RfcG9wZW5fYXJncyhzZWxmKToK
ICAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKICAgICAgICAgIyBFeHBsaWNpdGx5IG5h
bWluZyB0aGUgJ2FyZ3MnIGFyZ3VtZW50IHNob3VsZCBub3QgdGhvdyBhbiBleGNlcHRpb24uCi0g
ICAgICAgIGV4ZWN1dGl2ZS5wb3BlbihhcmdzPWNvbW1hbmRfbGluZSgnZWNobycsIDEpLCBzdGRv
dXQ9ZXhlY3V0aXZlLlBJUEUpLndhaXQoKQorICAgICAgICB3aXRoIGV4ZWN1dGl2ZS5wb3Blbihh
cmdzPWNvbW1hbmRfbGluZSgnZWNobycsIDEpLCBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUpIGFzIHBy
b2Nlc3M6CisgICAgICAgICAgICBwcm9jZXNzLndhaXQoKQogCiAgICAgZGVmIHRlc3RfcnVuX2Nv
bW1hbmRfd2l0aF91bmljb2RlKHNlbGYpOgogICAgICAgICAiIiJWYWxpZGF0ZSB0aGF0IGl0IGlz
IHNhZmUgdG8gcGFzcyB1bmljb2RlKCkgb2JqZWN0cwpAQCAtMTM1LDExICsxMzgsMTEgQEAgY2xh
c3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBlbmNvZGlu
ZyA9ICdtYmNzJwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTgn
Ci0gICAgICAgIGVuY29kZWRfdG9yID0gdW5pY29kZV90b3JfaW5wdXQuZW5jb2RlKGVuY29kaW5n
KQorICAgICAgICBlbmNvZGVkX3RvciA9IHVuaWNvZGVfY29tcGF0aWJpbGl0eS5lbmNvZGVfaWZf
bmVjZXNzYXJ5KHVuaWNvZGVfdG9yX2lucHV0LCBlbmNvZGluZykKICAgICAgICAgIyBPbiBXaW5k
b3dzLCB3ZSBleHBlY3QgdGhlIHVuaWNvZGUtPm1iY3MtPnVuaWNvZGUgcm91bmR0cmlwIHRvIGJl
CiAgICAgICAgICMgbG9zc3kuIE9uIG90aGVyIHBsYXRmb3Jtcywgd2UgZXhwZWN0IGEgbG9zc2xl
c3Mgcm91bmR0cmlwLgogICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6
Ci0gICAgICAgICAgICB1bmljb2RlX3Rvcl9vdXRwdXQgPSBlbmNvZGVkX3Rvci5kZWNvZGUoZW5j
b2RpbmcpCisgICAgICAgICAgICB1bmljb2RlX3Rvcl9vdXRwdXQgPSB1bmljb2RlX2NvbXBhdGli
aWxpdHkuZGVjb2RlX2lmX25lY2Vzc2FyeShlbmNvZGVkX3RvciwgZW5jb2RpbmcpCiAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICB1bmljb2RlX3Rvcl9vdXRwdXQgPSB1bmljb2RlX3Rvcl9pbnB1
dAogCkBAIC0xNjcsNDQgKzE3MCw0NCBAQCBjbGFzcyBFeGVjdXRpdmVUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgIGRlZiBzZXJpYWxfdGVzdF9raWxsX3Byb2Nlc3Moc2VsZik6CiAgICAg
ICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCi0gICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5wb2xsKCksIE5vbmUpICAjIFByb2Nlc3Mg
aXMgcnVubmluZwotICAgICAgICBleGVjdXRpdmUua2lsbF9wcm9jZXNzKHByb2Nlc3MucGlkKQot
ICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkgc2luY2Ugc2lnbmFsLlNJR0tJTEwg
aXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndpbjMyIgotICAgICAgICBpZiBzeXMu
cGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3OTAKLSAgICAgICAgICAgICMgV2Ug
c2VlbSB0byBnZXQgZWl0aGVyIDAgb3IgMSBoZXJlIGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgwLCAxKSkKLSAgICAgICAgZWxpZiBz
eXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6Ci0gICAgICAgICAgICAjIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgxOTYKLSAgICAgICAgICAgICMgY3lnd2lu
IHNlZW1zIHRvIGdpdmUgdXMgZWl0aGVyIFNJR0FCUlQgb3IgU0lHS0lMTAotICAgICAgICAgICAg
IyBOYXRpdmUgV2luZG93cyAodmlhIEN5Z3dpbikgcmV0dXJucyBFTk9UQkxLICgtMTUpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEluKHByb2Nlc3Mud2FpdCgpLCAoLXNpZ25hbC5TSUdBQlJULCAt
c2lnbmFsLlNJR0tJTEwsIC0xNSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBleHBlY3Rl
ZF9leGl0X2NvZGUgPSAtc2lnbmFsLlNJR1RFUk0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocHJvY2Vzcy53YWl0KCksIGV4cGVjdGVkX2V4aXRfY29kZSkKKyAgICAgICAgd2l0aCBleGVj
dXRpdmUucG9wZW4obmV2ZXJfZW5kaW5nX2NvbW1hbmQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSkgYXMgcHJvY2VzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5wb2xs
KCksIE5vbmUpICAjIFByb2Nlc3MgaXMgcnVubmluZworICAgICAgICAgICAgZXhlY3V0aXZlLmtp
bGxfcHJvY2Vzcyhwcm9jZXNzLnBpZCkKKyAgICAgICAgICAgICMgTm90ZTogQ2FuJ3QgdXNlIGEg
dGVybmFyeSBzaW5jZSBzaWduYWwuU0lHS0lMTCBpcyB1bmRlZmluZWQgZm9yIHN5cy5wbGF0Zm9y
bSA9PSAid2luMzIiCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2lu
Jyk6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0NzkwCisgICAgICAgICAgICAgICAgIyBXZSBzZWVtIHRvIGdldCBlaXRo
ZXIgMCBvciAxIGhlcmUgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgwLCAxKSkKKyAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRm
b3JtID09ICJjeWd3aW4iOgorICAgICAgICAgICAgICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODE5NgorICAgICAgICAgICAgICAgICMgY3lnd2lu
IHNlZW1zIHRvIGdpdmUgdXMgZWl0aGVyIFNJR0FCUlQgb3IgU0lHS0lMTAorICAgICAgICAgICAg
ICAgICMgTmF0aXZlIFdpbmRvd3MgKHZpYSBDeWd3aW4pIHJldHVybnMgRU5PVEJMSyAoLTE1KQor
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJvY2Vzcy53YWl0KCksICgtc2lnbmFsLlNJ
R0FCUlQsIC1zaWduYWwuU0lHS0lMTCwgLTE1KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRfZXhpdF9jb2RlID0gLXNpZ25hbC5TSUdURVJNCisgICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2Rl
KQogCi0gICAgICAgICMgS2lsbGluZyBhZ2FpbiBzaG91bGQgZmFpbCBzaWxlbnRseS4KLSAgICAg
ICAgZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhwcm9jZXNzLnBpZCkKKyAgICAgICAgICAgICMgS2ls
bGluZyBhZ2FpbiBzaG91bGQgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgICAgIGV4ZWN1dGl2ZS5r
aWxsX3Byb2Nlc3MocHJvY2Vzcy5waWQpCiAKICAgICBkZWYgc2VyaWFsX3Rlc3Rfa2lsbF9hbGwo
c2VsZik6CiAgICAgICAgIGV4ZWN1dGl2ZSA9IEV4ZWN1dGl2ZSgpCi0gICAgICAgIHByb2Nlc3Mg
PSBzdWJwcm9jZXNzLlBvcGVuKG5ldmVyX2VuZGluZ19jb21tYW5kKCksIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb2Nlc3MucG9sbCgpKSAgIyBQ
cm9jZXNzIGlzIHJ1bm5pbmcKLSAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGlu
Z19jb21tYW5kKClbMF0pCi0gICAgICAgICMgTm90ZTogQ2FuJ3QgdXNlIGEgdGVybmFyeSBzaW5j
ZSBzaWduYWwuU0lHVEVSTSBpcyB1bmRlZmluZWQgZm9yIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIi
Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICAgICAgICAgIGV4cGVj
dGVkX2V4aXRfY29kZSA9IDAgICMgb3Mua2lsbCByZXN1bHRzIGluIGV4aXQoMCkgZm9yIHRoaXMg
cHJvY2Vzcy4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy53YWl0KCksIGV4
cGVjdGVkX2V4aXRfY29kZSkKLSAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgn
d2luJyk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ3OTAKLSAgICAgICAgICAgICMgV2Ugc2VlbSB0byBnZXQgZWl0aGVyIDAg
b3IgMSBoZXJlIGZvciBzb21lIHJlYXNvbi4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJv
Y2Vzcy53YWl0KCksICgwLCAxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4cGVjdGVk
X2V4aXRfY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChwcm9jZXNzLndhaXQoKSwgZXhwZWN0ZWRfZXhpdF9jb2RlKQotICAgICAgICAjIEtpbGxpbmcg
YWdhaW4gc2hvdWxkIGZhaWwgc2lsZW50bHkuCi0gICAgICAgIGV4ZWN1dGl2ZS5raWxsX2FsbChu
ZXZlcl9lbmRpbmdfY29tbWFuZCgpWzBdKQorICAgICAgICB3aXRoIGV4ZWN1dGl2ZS5wb3Blbihu
ZXZlcl9lbmRpbmdfY29tbWFuZCgpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKSBhcyBwcm9jZXNz
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvY2Vzcy5wb2xsKCkpICAjIFByb2Nl
c3MgaXMgcnVubmluZworICAgICAgICAgICAgZXhlY3V0aXZlLmtpbGxfYWxsKG5ldmVyX2VuZGlu
Z19jb21tYW5kKClbMF0pCisgICAgICAgICAgICAjIE5vdGU6IENhbid0IHVzZSBhIHRlcm5hcnkg
c2luY2Ugc2lnbmFsLlNJR1RFUk0gaXMgdW5kZWZpbmVkIGZvciBzeXMucGxhdGZvcm0gPT0gIndp
bjMyIgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgorICAgICAgICAg
ICAgICAgIGV4cGVjdGVkX2V4aXRfY29kZSA9IDAgICMgb3Mua2lsbCByZXN1bHRzIGluIGV4aXQo
MCkgZm9yIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBy
b2Nlc3Mud2FpdCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCisgICAgICAgICAgICBlbGlmIHN5cy5w
bGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3OTAKKyAgICAgICAgICAgICAg
ICAjIFdlIHNlZW0gdG8gZ2V0IGVpdGhlciAwIG9yIDEgaGVyZSBmb3Igc29tZSByZWFzb24uCisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwcm9jZXNzLndhaXQoKSwgKDAsIDEpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9leGl0X2NvZGUgPSAtc2ln
bmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3Mud2Fp
dCgpLCBleHBlY3RlZF9leGl0X2NvZGUpCisgICAgICAgICAgICAjIEtpbGxpbmcgYWdhaW4gc2hv
dWxkIGZhaWwgc2lsZW50bHkuCisgICAgICAgICAgICBleGVjdXRpdmUua2lsbF9hbGwobmV2ZXJf
ZW5kaW5nX2NvbW1hbmQoKVswXSkKIAogICAgIGRlZiBfYXNzZXJ0X3dpbmRvd3NfaW1hZ2VfbmFt
ZShzZWxmLCBuYW1lLCBleHBlY3RlZF93aW5kb3dzX25hbWUpOgogICAgICAgICBleGVjdXRpdmUg
PSBFeGVjdXRpdmUoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzeXN0ZW0ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkJKHJldmlzaW9uIDI1MDM3MSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw2IEBACiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBlcnJubwotaW1wb3J0IGV4
Y2VwdGlvbnMKIGltcG9ydCBmaWxlY21wCiBpbXBvcnQgZ2xvYgogaW1wb3J0IGhhc2hsaWIKQEAg
LTQwLDYgKzM5LDggQEAgaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQog
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi51bmljb2RlX2NvbXBhdGliaWxpdHkgaW1wb3J0IGRlY29k
ZV9pZl9uZWNlc3NhcnkKKwogCiBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgIiIiRmls
ZVN5c3RlbSBpbnRlcmZhY2UgZm9yIHdlYmtpdHB5LgpAQCAtMjIxLDExICsyMjIsMTEgQEAgY2xh
c3MgRmlsZVN5c3RlbShvYmplY3QpOgogCiAgICAgZGVmIHJlYWRfYmluYXJ5X2ZpbGUoc2VsZiwg
cGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhl
IGdpdmVuIHBhdGggYXMgYSBieXRlIHN0cmluZy4iIiIKLSAgICAgICAgd2l0aCBmaWxlKHBhdGgs
ICdyYicpIGFzIGY6CisgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmOgogICAgICAg
ICAgICAgcmV0dXJuIGYucmVhZCgpCiAKICAgICBkZWYgd3JpdGVfYmluYXJ5X2ZpbGUoc2VsZiwg
cGF0aCwgY29udGVudHMpOgotICAgICAgICB3aXRoIGZpbGUocGF0aCwgJ3diJykgYXMgZjoKKyAg
ICAgICAgd2l0aCBvcGVuKHBhdGgsICd3YicpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGNv
bnRlbnRzKQogCiAgICAgZGVmIG9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5nKHNlbGYsIHBhdGgs
IGVycm9ycz0nc3RyaWN0Jyk6CkBAIC0yNTYsNyArMjU3LDcgQEAgY2xhc3MgRmlsZVN5c3RlbShv
YmplY3QpOgogCiAgICAgICAgIFRoZSBmaWxlIGlzIHdyaXR0ZW4gZW5jb2RlZCBhcyBVVEYtOCB3
aXRoIG5vIEJPTS4iIiIKICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAndycsICd1dGYt
OCcsIGVycm9ycz1lcnJvcnMpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKGNvbnRlbnRzLmRl
Y29kZSgndXRmLTgnLCBlcnJvcnM9ZXJyb3JzKSBpZiB0eXBlKGNvbnRlbnRzKSA9PSBzdHIgZWxz
ZSBjb250ZW50cykKKyAgICAgICAgICAgIGYud3JpdGUoZGVjb2RlX2lmX25lY2Vzc2FyeShjb250
ZW50cywgZXJyb3JzPWVycm9ycykpCiAKICAgICBkZWYgc2hhMShzZWxmLCBwYXRoKToKICAgICAg
ICAgY29udGVudHMgPSBzZWxmLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkKQEAgLTI2NSwxOSArMjY2
LDE1IEBAIGNsYXNzIEZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgcmVscGF0aChzZWxmLCBw
YXRoLCBzdGFydD0nLicpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHN0
YXJ0KQogCi0gICAgY2xhc3MgX1dpbmRvd3NFcnJvcihleGNlcHRpb25zLk9TRXJyb3IpOgotICAg
ICAgICAiIiJGYWtlIGV4Y2VwdGlvbiBmb3IgTGludXggYW5kIE1hYy4iIiIKLSAgICAgICAgcGFz
cwotCiAgICAgZGVmIHJlbW92ZShzZWxmLCBwYXRoLCBvc3JlbW92ZT1vcy5yZW1vdmUpOgogICAg
ICAgICAiIiJPbiBXaW5kb3dzLCBpZiBhIHByb2Nlc3Mgd2FzIHJlY2VudGx5IGtpbGxlZCBhbmQg
aXQgaGVsZCBvbiB0byBhCiAgICAgICAgIGZpbGUsIHRoZSBPUyB3aWxsIGhvbGQgb24gdG8gdGhl
IGZpbGUgZm9yIGEgc2hvcnQgd2hpbGUuICBUaGlzIG1ha2VzCiAgICAgICAgIGF0dGVtcHRzIHRv
IGRlbGV0ZSB0aGUgZmlsZSBmYWlsLiAgVG8gd29yayBhcm91bmQgdGhhdCwgdGhpcyBtZXRob2QK
ICAgICAgICAgd2lsbCByZXRyeSBmb3IgYSBmZXcgc2Vjb25kcyB1bnRpbCBXaW5kb3dzIGlzIGRv
bmUgd2l0aCB0aGUgZmlsZS4iIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhjZXB0aW9u
cy5XaW5kb3dzRXJyb3IKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAg
ICAgZXhjZXB0aW9ucy5XaW5kb3dzRXJyb3IgPSBGaWxlU3lzdGVtLl9XaW5kb3dzRXJyb3IKKyAg
ICAgICAgICAgIFdpbk9TRXJyb3IgPSBXaW5kb3dzRXJyb3IKKyAgICAgICAgZXhjZXB0IE5hbWVF
cnJvcjoKKyAgICAgICAgICAgIFdpbk9TRXJyb3IgPSBPU0Vycm9yCiAKICAgICAgICAgcmV0cnlf
dGltZW91dF9zZWMgPSAzLjAKICAgICAgICAgc2xlZXBfaW50ZXJ2YWwgPSAwLjEKQEAgLTI4NSw3
ICsyODIsNyBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgb3NyZW1vdmUocGF0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQotICAgICAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbnMuV2luZG93c0Vycm9yIGFzIGU6CisgICAg
ICAgICAgICBleGNlcHQgV2luT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHRpbWUuc2xl
ZXAoc2xlZXBfaW50ZXJ2YWwpCiAgICAgICAgICAgICAgICAgcmV0cnlfdGltZW91dF9zZWMgLT0g
c2xlZXBfaW50ZXJ2YWwKICAgICAgICAgICAgICAgICBpZiByZXRyeV90aW1lb3V0X3NlYyA8IDA6
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9t
b2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtX21vY2sucHkJKHJldmlzaW9uIDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE1ICsyNiwxNSBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1w
b3J0IFN0cmluZ0lPCiBpbXBvcnQgZXJybm8KIGltcG9ydCBoYXNobGliCiBpbXBvcnQgb3MKIGlt
cG9ydCByZQoraW1wb3J0IHN5cwogCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgdW5pY29k
ZV9jb21wYXRpYmlsaXR5CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgK
IAotCiBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgIHNlcCA9ICcvJwogICAgIHBh
cmRpciA9ICcuLicKQEAgLTE4Niw3ICsxODYsNyBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmpl
Y3QpOgogCiAgICAgICAgICMgV2UgY291bGQgdXNlIGZubWF0Y2guZm5tYXRjaCwgYnV0IHRoYXQg
bWlnaHQgbm90IGRvIHRoZSByaWdodCB0aGluZyBvbiB3aW5kb3dzLgogICAgICAgICBleGlzdGlu
Z19maWxlcyA9IFtwYXRoIGZvciBwYXRoLCBjb250ZW50cyBpbiBzZWxmLmZpbGVzLml0ZW1zKCkg
aWYgY29udGVudHMgaXMgbm90IE5vbmVdCi0gICAgICAgIHJldHVybiBmaWx0ZXIocGF0aF9maWx0
ZXIsIGV4aXN0aW5nX2ZpbGVzKSArIGZpbHRlcihwYXRoX2ZpbHRlciwgc2VsZi5kaXJzKQorICAg
ICAgICByZXR1cm4gbGlzdChmaWx0ZXIocGF0aF9maWx0ZXIsIGV4aXN0aW5nX2ZpbGVzKSkgKyBs
aXN0KGZpbHRlcihwYXRoX2ZpbHRlciwgc2VsZi5kaXJzKSkKIAogICAgIGRlZiBpc2FicyhzZWxm
LCBwYXRoKToKICAgICAgICAgcmV0dXJuIHBhdGguc3RhcnRzd2l0aChzZWxmLnNlcCkKQEAgLTM0
NCw3ICszNDQsNyBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICByZXR1
cm4gc2VsZi5yZWFkX2JpbmFyeV9maWxlKHBhdGgpLmRlY29kZSgndXRmLTgnLCBlcnJvcnM9ZXJy
b3JzKQogCiAgICAgZGVmIHdyaXRlX3RleHRfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgZXJy
b3JzPSdzdHJpY3QnKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVfYmluYXJ5X2ZpbGUocGF0
aCwgY29udGVudHMuZW5jb2RlKCd1dGYtOCcsIGVycm9ycz1lcnJvcnMpKQorICAgICAgICByZXR1
cm4gc2VsZi53cml0ZV9iaW5hcnlfZmlsZShwYXRoLCB1bmljb2RlX2NvbXBhdGliaWxpdHkuZW5j
b2RlX2lmX25lY2Vzc2FyeShjb250ZW50cywgJ3V0Zi04JywgZXJyb3JzPWVycm9ycykpCiAKICAg
ICBkZWYgc2hhMShzZWxmLCBwYXRoKToKICAgICAgICAgY29udGVudHMgPSBzZWxmLnJlYWRfYmlu
YXJ5X2ZpbGUocGF0aCkKQEAgLTQ0MSw3ICs0NDEsNyBAQCBjbGFzcyBXcml0YWJsZUJpbmFyeUZp
bGVPYmplY3Qob2JqZWN0KToKICAgICAgICAgc2VsZi5mcyA9IGZzCiAgICAgICAgIHNlbGYucGF0
aCA9IHBhdGgKICAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotICAgICAgICBzZWxmLmZzLmZp
bGVzW3BhdGhdID0gIiIKKyAgICAgICAgc2VsZi5mcy5maWxlc1twYXRoXSA9IGInJwogCiAgICAg
ZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKQEAgLTQ1MiwxNCArNDUy
LDE0IEBAIGNsYXNzIFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdChvYmplY3QpOgogICAgIGRlZiBj
bG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAKLSAgICBkZWYgd3JpdGUo
c2VsZiwgc3RyKToKLSAgICAgICAgc2VsZi5mcy5maWxlc1tzZWxmLnBhdGhdICs9IHN0cgorICAg
IGRlZiB3cml0ZShzZWxmLCBzdHJpbmcpOgorICAgICAgICBzZWxmLmZzLmZpbGVzW3NlbGYucGF0
aF0gKz0gdW5pY29kZV9jb21wYXRpYmlsaXR5LmVuY29kZV9pZl9uZWNlc3Nhcnkoc3RyaW5nLCAn
dXRmLTgnKQogICAgICAgICBzZWxmLmZzLndyaXR0ZW5fZmlsZXNbc2VsZi5wYXRoXSA9IHNlbGYu
ZnMuZmlsZXNbc2VsZi5wYXRoXQogCiAKIGNsYXNzIFdyaXRhYmxlVGV4dEZpbGVPYmplY3QoV3Jp
dGFibGVCaW5hcnlGaWxlT2JqZWN0KToKICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKLSAgICAg
ICAgV3JpdGFibGVCaW5hcnlGaWxlT2JqZWN0LndyaXRlKHNlbGYsIHN0ci5lbmNvZGUoJ3V0Zi04
JykpCisgICAgICAgIFdyaXRhYmxlQmluYXJ5RmlsZU9iamVjdC53cml0ZShzZWxmLCB1bmljb2Rl
X2NvbXBhdGliaWxpdHkuZW5jb2RlX2lmX25lY2Vzc2FyeShzdHIsICd1dGYtOCcpKQogCiAKIGNs
YXNzIFJlYWRhYmxlQmluYXJ5RmlsZU9iamVjdChvYmplY3QpOgpAQCAtNDg5LDcgKzQ4OSw3IEBA
IGNsYXNzIFJlYWRhYmxlQmluYXJ5RmlsZU9iamVjdChvYmplY3QpOgogCiBjbGFzcyBSZWFkYWJs
ZVRleHRGaWxlT2JqZWN0KFJlYWRhYmxlQmluYXJ5RmlsZU9iamVjdCk6CiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGZzLCBwYXRoLCBkYXRhKToKLSAgICAgICAgc3VwZXIoUmVhZGFibGVUZXh0Rmls
ZU9iamVjdCwgc2VsZikuX19pbml0X18oZnMsIHBhdGgsIFN0cmluZ0lPLlN0cmluZ0lPKGRhdGEu
ZGVjb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgc3VwZXIoUmVhZGFibGVUZXh0RmlsZU9iamVjdCwg
c2VsZikuX19pbml0X18oZnMsIHBhdGgsIHVuaWNvZGVfY29tcGF0aWJpbGl0eS5Vbmljb2RlSU8o
dW5pY29kZV9jb21wYXRpYmlsaXR5LmRlY29kZV9mb3IoZGF0YSwgdW5pY29kZV9jb21wYXRpYmls
aXR5LnVuaWNvZGUpKSkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5kYXRh
LmNsb3NlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtX21vY2tfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9ja191bml0dGVzdC5weQkocmV2aXNpb24g
MjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0
ZW1fbW9ja191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsMTggKzcwLDE4IEBAIGNs
YXNzIE1vY2tGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICBkZWYgdGVzdF9ub3Jt
cGF0aChzZWxmKToKICAgICAgICAgc2VsZi5xdWlja19jaGVjayhzZWxmLmZzLm5vcm1wYXRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnMuX3Nsb3dfYnV0X2NvcnJlY3Rfbm9ybXBh
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgJy8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICcuJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnLy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICdmb28vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLy4n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vYmFyJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAnL2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvby8uLi9iYXInLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICdmb28vLi4vYmFyL2JheicsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgJy4uL2ZvbycpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCcnLCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgKCcvJywpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICgnLicsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJy8uJywpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICgnZm9vJywpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vLycs
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Zvby8uJywpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgnZm9vL2JhcicsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJy9mb28n
LCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb28vLi4vYmFyJywpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICgnZm9vLy4uL2Jhci9iYXonLCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgKCcuLi9mb28nLCkpCiAKICAgICBkZWYgdGVzdF9kaXJzX3VuZGVyKHNlbGYpOgogICAg
ICAgICBGQUtFX0ZJTEVTID0gewpAQCAtOTAsOSArOTAsOSBAQCBjbGFzcyBNb2NrRmlsZVN5c3Rl
bVRlc3QodW5pdHRlc3QuVGVzdENhCiAgICAgICAgICAgICAnL3Rlc3RzL3Rlc3QyL3Rlc3QudHh0
JzogJ3Rlc3QnfQogICAgICAgICBmcyA9IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbShm
aWxlcz1GQUtFX0ZJTEVTKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZzLmRpcnNfdW5k
ZXIoJy90ZXN0cycpLCBbJy90ZXN0cycsICcvdGVzdHMvdGVzdDInLCAnL3Rlc3RzL3Rlc3QzJywg
Jy90ZXN0cy90ZXN0My90ZXN0MiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmRpcnNf
dW5kZXIoJy90ZXN0cycpLCBbJy90ZXN0cycsICcvdGVzdHMvdGVzdDInLCAnL3Rlc3RzL3Rlc3Qz
JywgJy90ZXN0cy90ZXN0My90ZXN0MiddKQogCiAgICAgICAgIGRlZiBmaWx0ZXJfZGlyKGZzLCBk
aXJwYXRoKToKICAgICAgICAgICAgIHJldHVybiBmcy5iYXNlbmFtZShkaXJwYXRoKSAhPSAndGVz
dDInCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuZGlyc191bmRlcignL3Rlc3RzJywg
ZmlsdGVyX2RpciksIFsnL3Rlc3RzJywgJy90ZXN0cy90ZXN0MyddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGZzLmRpcnNfdW5kZXIoJy90ZXN0cycsIGZpbHRlcl9kaXIpLCBbJy90ZXN0cycs
ICcvdGVzdHMvdGVzdDMnXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBpbXBvcnQgc3lz
CiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIGZpbGVzeXN0ZW0gaW1w
b3J0IEZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGlt
cG9ydCBGaWxlU3lzdGVtCiAKIAogY2xhc3MgR2VuZXJpY0ZpbGVTeXN0ZW1UZXN0cyhvYmplY3Qp
OgpAQCAtMjY3LDkgKzI2Nyw5IEBAIGNsYXNzIFJlYWxGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5U
ZXN0Q2EKICAgICAgICAgYmluYXJ5X3BhdGggPSBOb25lCiAKICAgICAgICAgdW5pY29kZV90ZXh0
X3N0cmluZyA9IHUnXHUwMTZBblx1MDEyRGNcdTAxNERkZVx1MDMzRCcKLSAgICAgICAgaGV4X2Vx
dWl2YWxlbnQgPSAnXHhDNVx4QUFceDZFXHhDNFx4QURceDYzXHhDNVx4OERceDY0XHg2NVx4Q0Nc
eEJEJwotICAgICAgICBtYWxmb3JtZWRfdGV4dF9oZXggPSAnXHg0RFx4NjlceDYzXHg3Mlx4NkZc
eDczXHg2Rlx4NjZceDc0XHhBRVx4MjBceDU2XHg2OVx4NzNceDc1XHg2MVx4NkNceDIwXHg1M1x4
NzRceDc1XHg2NFx4NjlceDZGXHhBRVx4MjBceDMyXHgzMFx4MzFceDMwXHgwRFx4MEEnCi0gICAg
ICAgIG1hbGZvcm1lZF9pZ25vcmVkX3RleHRfaGV4ID0gJ1x4NERceDY5XHg2M1x4NzJceDZGXHg3
M1x4NkZceDY2XHg3NFx4MjBceDU2XHg2OVx4NzNceDc1XHg2MVx4NkNceDIwXHg1M1x4NzRceDc1
XHg2NFx4NjlceDZGXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgwQScKKyAgICAgICAgaGV4X2Vx
dWl2YWxlbnQgPSBiJ1x4QzVceEFBXHg2RVx4QzRceEFEXHg2M1x4QzVceDhEXHg2NFx4NjVceEND
XHhCRCcKKyAgICAgICAgbWFsZm9ybWVkX3RleHRfaGV4ID0gYidceDREXHg2OVx4NjNceDcyXHg2
Rlx4NzNceDZGXHg2Nlx4NzRceEFFXHgyMFx4NTZceDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUz
XHg3NFx4NzVceDY0XHg2OVx4NkZceEFFXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgwQScKKyAg
ICAgICAgbWFsZm9ybWVkX2lnbm9yZWRfdGV4dF9oZXggPSBiJ1x4NERceDY5XHg2M1x4NzJceDZG
XHg3M1x4NkZceDY2XHg3NFx4MjBceDU2XHg2OVx4NzNceDc1XHg2MVx4NkNceDIwXHg1M1x4NzRc
eDc1XHg2NFx4NjlceDZGXHgyMFx4MzJceDMwXHgzMVx4MzBceDBEXHgwQScKICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgdGV4dF9wYXRoID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0ndHJlZV91
bml0dGVzdF8nKQogICAgICAgICAgICAgYmluYXJ5X3BhdGggPSB0ZW1wZmlsZS5ta3RlbXAocHJl
Zml4PSd0cmVlX3VuaXR0ZXN0XycpCkBAIC0yODUsOCArMjg1LDkgQEAgY2xhc3MgUmVhbEZpbGVT
eXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2Zp
bGUoYmluYXJ5X3BhdGgsIG1hbGZvcm1lZF90ZXh0X2hleCkKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZzLnJlYWRfdGV4dF9maWxlLCBiaW5hcnlfcGF0aCkKICAg
ICAgICAgICAgIHRleHRfY29udGVudHMgPSBmcy5yZWFkX2JpbmFyeV9maWxlKGJpbmFyeV9wYXRo
KS5kZWNvZGUoJ3V0ZjgnLCAnaWdub3JlJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHRleHRfY29udGVudHMsIG1hbGZvcm1lZF9pZ25vcmVkX3RleHRfaGV4KQotICAgICAgICAgICAg
ZnMub3Blbl90ZXh0X2ZpbGVfZm9yX3JlYWRpbmcoYmluYXJ5X3BhdGgsICdyZXBsYWNlJykucmVh
ZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0X2NvbnRlbnRzLCBtYWxm
b3JtZWRfaWdub3JlZF90ZXh0X2hleC5kZWNvZGUoJ3V0ZjgnLCAnaWdub3JlJykpCisgICAgICAg
ICAgICB3aXRoIGZzLm9wZW5fdGV4dF9maWxlX2Zvcl9yZWFkaW5nKGJpbmFyeV9wYXRoLCAncmVw
bGFjZScpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS5yZWFkbGluZSgpCiAKICAgICAg
ICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHRleHRfcGF0aCBhbmQgZnMuaXNmaWxlKHRleHRf
cGF0aCk6CkBAIC0zMTEsNyArMzEyLDcgQEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0
ZXN0LlRlc3RDYQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmFp
c2UgV2luZG93c0Vycm9yCiAgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRmlsZVN5c3RlbS5fV2luZG93c0Vycm9yCisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogICAgICAgICBmcyA9IEZpbGVTeXN0ZW0oKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZnMucmVtb3ZlKCdmaWxlbmFtZScsIHJlbW92ZV93aXRoX2V4
Y2VwdGlvbikpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vb3V0
cHV0Y2FwdHVyZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vb3V0cHV0Y2FwdHVyZS5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDggQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3lzCiBpbXBvcnQg
dW5pdHRlc3QKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnVuaWNvZGVfY29tcGF0aWJpbGl0eSBpbXBvcnQgU3RyaW5nSU8KIAogCiBjbGFzcyBP
dXRwdXRDYXB0dXJlKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vb3V0cHV0dGVlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0ZWVfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9vdXRwdXR0
ZWVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxNSBAQAogIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRl
c3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dHRlZSBpbXBvcnQgVGVlLCBP
dXRwdXRUZWUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnVuaWNvZGVfY29tcGF0aWJpbGl0eSBpbXBv
cnQgU3RyaW5nSU8KIAogCiBjbGFzcyBTaW1wbGVUZWVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICBkZWYgdGVzdF9zaW1wbGVfdGVlKHNlbGYpOgotICAgICAgICBmaWxlMSwgZmlsZTIgPSBT
dHJpbmdJTy5TdHJpbmdJTygpLCBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGZpbGUxLCBm
aWxlMiA9IFN0cmluZ0lPKCksIFN0cmluZ0lPKCkKICAgICAgICAgdGVlID0gVGVlKGZpbGUxLCBm
aWxlMikKICAgICAgICAgdGVlLndyaXRlKCJmb28gYmFyXG4iKQogICAgICAgICB0ZWUud3JpdGUo
ImJhelxuIikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wYXRo
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
YXRoLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGF0aC5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAgaW1wb3J0
IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdGhyZWFkaW5n
Ci1pbXBvcnQgdXJsbGliCisKK2lmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CisgICAgZnJv
bSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlIGFzIHVybGxpYl9xdW90ZQorZWxzZToKKyAgICBm
cm9tIHVybGxpYiBpbXBvcnQgcXVvdGUgYXMgdXJsbGliX3F1b3RlCiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtMTQ2LDcgKzE1MCw3IEBAIGRlZiBfZXNjYXBlKHBh
dGgpOgogICAgICMgd2hlbiBjb252ZXJ0aW5nIGZpbGVuYW1lcyB0byBmaWxlcy4gSW5zdGVhZCBv
ZiB1c2luZyB1cmxsaWIncyBkZWZhdWx0CiAgICAgIyBydWxlcywgd2UgYWxsb3cgYSBzbWFsbCBs
aXN0IG9mIG90aGVyIGNoYXJhY3RlcnMgdGhyb3VnaCB1bi1lc2NhcGVkLgogICAgICMgSXQncyB1
bmNsZWFyIGlmIHRoaXMgaXMgdGhlIGJlc3QgcG9zc2libGUgc29sdXRpb24uCi0gICAgcmV0dXJu
IHVybGxpYi5xdW90ZShwYXRoLCBzYWZlPScvKzonKQorICAgIHJldHVybiB1cmxsaWJfcXVvdGUo
cGF0aCwgc2FmZT0nLys6JykKIAogCiBkZWYgX2NvbnZlcnRfcGF0aChwbGF0Zm9ybSwgcGF0aCk6
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmlsZS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmls
ZS5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BlbWZpbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBkZWYg
X3BhcnNlX3BlbV9mb3JtYXQoY29udGVudCk6CiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
aW5kZXggPSBsaW5lcy5pbmRleChlbmRfbWFya2VyKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJv
ciwgZToKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBCYWRG
b3JtYXRFcnJvcigiQ2Fubm90IGZpbmQgc2VjdGlvbiBlbmQ6IHt9Ii5mb3JtYXQoZW5kX21hcmtl
cikpCiAKICAgICAgICAgcmV0dXJuIGtpbmQsICJcbiIuam9pbihsaW5lc1swOmluZGV4ICsgMV0p
ICsgIlxuIiwgbGluZXNbaW5kZXggKyAxOl0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wZW1maWxlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wZW1maWxlX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGVtZmls
ZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogCiAKIGltcG9y
dCB1bml0dGVzdAotaW1wb3J0IHN5cwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGVt
ZmlsZSBpbXBvcnQgUGVtLCBCYWRGb3JtYXRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnBsYXRmb3JtaW5mbyBpbXBvcnQgUGxhdGZvcm1JbmZvCiAKIAogY2xhc3MgUGVtRmlsZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTU3LDE0ICsxNTcsMTQgQEAgZGVmIHRyaW0oZG9j
c3RyaW5nKToKICAgICAjIGFuZCBzcGxpdCBpbnRvIGEgbGlzdCBvZiBsaW5lczoKICAgICBsaW5l
cyA9IGRvY3N0cmluZy5leHBhbmR0YWJzKCkuc3BsaXRsaW5lcygpCiAgICAgIyBEZXRlcm1pbmUg
bWluaW11bSBpbmRlbnRhdGlvbiAoZmlyc3QgbGluZSBkb2Vzbid0IGNvdW50KToKLSAgICBpbmRl
bnQgPSBzeXMubWF4aW50CisgICAgaW5kZW50ID0gUGxhdGZvcm1JbmZvLk1BWAogICAgIGZvciBs
aW5lIGluIGxpbmVzWzE6XToKICAgICAgICAgc3RyaXBwZWQgPSBsaW5lLmxzdHJpcCgpCiAgICAg
ICAgIGlmIHN0cmlwcGVkOgogICAgICAgICAgICAgaW5kZW50ID0gbWluKGluZGVudCwgbGVuKGxp
bmUpIC0gbGVuKHN0cmlwcGVkKSkKICAgICAjIFJlbW92ZSBpbmRlbnRhdGlvbiAoZmlyc3QgbGlu
ZSBpcyBzcGVjaWFsKToKICAgICB0cmltbWVkID0gW2xpbmVzWzBdLnN0cmlwKCldCi0gICAgaWYg
aW5kZW50IDwgc3lzLm1heGludDoKKyAgICBpZiBpbmRlbnQgPCBQbGF0Zm9ybUluZm8uTUFYOgog
ICAgICAgICBmb3IgbGluZSBpbiBsaW5lc1sxOl06CiAgICAgICAgICAgICB0cmltbWVkLmFwcGVu
ZChsaW5lW2luZGVudDpdLnJzdHJpcCgpKQogICAgICMgU3RyaXAgb2ZmIHRyYWlsaW5nIGFuZCBs
ZWFkaW5nIGJsYW5rIGxpbmVzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmUgaW0KIAogCiBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKKyAgICBNQVggPSAy
MTQ3NDgzNjQ3CisKICAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY29uc2lzdGVudCAoYW5k
IG1vY2thYmxlKSBpbnRlcnByZXRhdGlvbiBvZgogICAgIHN5c3RlbS1zcGVjaWZpYyB2YWx1ZXMg
KGxpa2Ugc3lzLnBsYXRmb3JtIGFuZCBwbGF0Zm9ybS5tYWNfdmVyKCkpCiAgICAgdG8gYmUgdXNl
ZCBieSB0aGUgcmVzdCBvZiB0aGUgd2Via2l0cHkgY29kZSBiYXNlLgpAQCAtMTE4LDExICsxMjAs
MTEgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAKICAgICBkZWYgdG90YWxfYnl0ZXNf
bWVtb3J5KHNlbGYpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgotICAgICAgICAgICAgcmV0
dXJuIGxvbmcoc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwgImh3
Lm1lbXNpemUiXSkpCisgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbInN5c2N0bCIsICItbiIsICJody5tZW1zaXplIl0pKQogICAgICAgICByZXR1cm4g
Tm9uZQogCiAgICAgZGVmIHRlcm1pbmFsX3dpZHRoKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5z
IHN5cy5tYXhpbnQgaWYgdGhlIHdpZHRoIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiIiIgorICAgICAg
ICAiIiJSZXR1cm5zIE1BWCBpZiB0aGUgd2lkdGggY2Fubm90IGJlIGRldGVybWluZWQuIiIiCiAg
ICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuaXNfd2luKCk6CiAgICAgICAgICAgICAg
ICAgIyBGcm9tIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ0MDY5NC1kZXRl
cm1pbmUtc2l6ZS1vZi1jb25zb2xlLXdpbmRvdy1vbi13aW5kb3dzLwpAQCAtMTM1LDcgKzEzNyw3
IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAjIE5v
dGUgdGhhdCB3ZSByZXR1cm4gMSBsZXNzIHRoYW4gdGhlIHdpZHRoIHNpbmNlIHdyaXRpbmcgaW50
byB0aGUgcmlnaHRtb3N0IGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAjIGF1dG9tYXRpY2Fs
bHkgcGVyZm9ybXMgYSBsaW5lIGZlZWQuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByaWdo
dCAtIGxlZnQKLSAgICAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAorICAgICAgICAgICAg
ICAgIHJldHVybiBzZWxmLk1BWAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBp
bXBvcnQgZmNudGwKICAgICAgICAgICAgICAgICBpbXBvcnQgc3RydWN0CkBAIC0xNDQsNyArMTQ2
LDcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgXywgY29s
dW1ucywgXywgXyA9IHN0cnVjdC51bnBhY2soJ0hISEgnLCBwYWNrZWQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbHVtbnMKICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIHN5
cy5tYXhpbnQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLk1BWAogCiAgICAgZGVmIGJ1aWxkX3Zl
cnNpb24oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWlu
Zm9fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDEwICs3NiwxMCBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RD
YXNlCiAgICAgZGVmIHRlc3RfcmVhbF9jb2RlKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBt
YWtlcyBzdXJlIHRoZSByZWFsICh1bm1vY2tlZCkgY29kZSBhY3R1YWxseSB3b3Jrcy4KICAgICAg
ICAgaW5mbyA9IFBsYXRmb3JtSW5mbyhzeXMsIHBsYXRmb3JtLCBFeGVjdXRpdmUoKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5vc19uYW1lLCAnJykKKyAgICAgICAgc2VsZi5h
c3NlcnROb3RFcXVhbChpbmZvLm9zX25hbWUsICcnKQogICAgICAgICBpZiBpbmZvLmlzX21hYygp
IG9yIGluZm8uaXNfd2luKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShpbmZv
Lm9zX3ZlcnNpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9u
YW1lKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluZm8uZGlzcGxheV9uYW1l
KCksICcnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5pc19tYWMoKSBvciBpbmZvLmlz
X3dpbigpIG9yIGluZm8uaXNfbGludXgoKSBvciBpbmZvLmlzX2ZyZWVic2QoKSkKICAgICAgICAg
c2VsZi5hc3NlcnRJc05vdE5vbmUoaW5mby50ZXJtaW5hbF93aWR0aCgpKQogCkBAIC0xMzUsMTYg
KzEzNSwxNiBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAKICAg
ICBkZWYgdGVzdF9kaXNwbGF5X25hbWUoc2VsZik6CiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnZGFyd2luJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGlu
Zm8uZGlzcGxheV9uYW1lKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluZm8u
ZGlzcGxheV9uYW1lKCksICcnKQogCiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnd2luMzInKSwgZmFrZV9wbGF0Zm9ybSh3aW5fdmVyc2lvbl9zdHJpbmc9JzYuMS43NjAw
JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcn
KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQog
CiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2Vf
cGxhdGZvcm0oJycsICcxMC40JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8u
ZGlzcGxheV9uYW1lKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluZm8uZGlz
cGxheV9uYW1lKCksICcnKQogCiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQorICAgICAgICBz
ZWxmLmFzc2VydE5vdEVxdWFsKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCiAgICAgZGVmIHRl
c3RfdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC42LjMnKSwgZmFrZV9leGVj
dXRpdmUoJzEyMzQnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wcm9maWxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcHJvZmlsZXIucHkJKHJldmlzaW9uIDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksMTAgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIGltcG9y
dCBsb2dnaW5nCiBpbXBvcnQgcmUKLWltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBzeXMKKworaWYg
c3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKToKKyAgICBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaWZp
bHRlciAgYXMgZmlsdGVyCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApA
QCAtNDEsNyArNDQsNyBAQCBjbGFzcyBQcm9maWxlckZhY3Rvcnkob2JqZWN0KToKICAgICAgICAg
aWYgbm90IHByb2ZpbGVyczoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHByb2Zp
bGVyX25hbWUgPSBwcm9maWxlcl9uYW1lIG9yIGNscy5kZWZhdWx0X3Byb2ZpbGVyX25hbWUoaG9z
dC5wbGF0Zm9ybSkKLSAgICAgICAgcHJvZmlsZXJfY2xhc3MgPSBuZXh0KGl0ZXJ0b29scy5pZmls
dGVyKGxhbWJkYSBwcm9maWxlcjogcHJvZmlsZXIubmFtZSA9PSBwcm9maWxlcl9uYW1lLCBwcm9m
aWxlcnMpLCBOb25lKQorICAgICAgICBwcm9maWxlcl9jbGFzcyA9IG5leHQoZmlsdGVyKGxhbWJk
YSBwcm9maWxlcjogcHJvZmlsZXIubmFtZSA9PSBwcm9maWxlcl9uYW1lLCBwcm9maWxlcnMpLCBO
b25lKQogICAgICAgICBpZiBub3QgcHJvZmlsZXJfY2xhc3M6CiAgICAgICAgICAgICByZXR1cm4g
Tm9uZQogICAgICAgICByZXR1cm4gcHJvZmlsZXJzWzBdKGhvc3QsIGV4ZWN1dGFibGVfcGF0aCwg
b3V0cHV0X2RpciwgaWRlbnRpZmllcikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wcm9maWxlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcHJvZmlsZXJfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDI1MDM3MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wcm9maWxl
cl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbXBvcnQgdW5p
dHRlc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wbGF0Zm9ybWluZm9fbW9jayBpbXBv
cnQgTW9ja1BsYXRmb3JtSW5mbwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhv
c3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKIAotZnJvbSAucHJvZmlsZXIgaW1wb3J0IFBy
b2ZpbGVyRmFjdG9yeSwgR29vZ2xlUFByb2YKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5w
cm9maWxlciBpbXBvcnQgUHJvZmlsZXJGYWN0b3J5LCBHb29nbGVQUHJvZgogCiAKIGNsYXNzIFBy
b2ZpbGVyRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N0YWNrX3V0aWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zdGFja191dGlsc191
bml0dGVzdC5weQkocmV2aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3N0YWNrX3V0aWxzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw4ICszNCw5IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgc3RhY2sKIAog
CiBkZWYgY3VycmVudF90aHJlYWRfaWQoKToKLSAgICB0aHJlYWRfaWQsIF8gPSBzeXMuX2N1cnJl
bnRfZnJhbWVzKCkuaXRlbXMoKVswXQotICAgIHJldHVybiB0aHJlYWRfaWQKKyAgICBmb3IgdGhy
ZWFkX2lkIGluIHN5cy5fY3VycmVudF9mcmFtZXMoKS5rZXlzKCk6CisgICAgICAgIHJldHVybiB0
aHJlYWRfaWQKKyAgICByZXR1cm4gTm9uZQogCiAKIGNsYXNzIFN0YWNrVXRpbHNUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9zeXN0ZW1ob3N0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQCBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHN5cwog
Ci1mcm9tIC4gaW1wb3J0IGVudmlyb25tZW50LCBleGVjdXRpdmUsIGZpbGVfbG9jaywgZmlsZXN5
c3RlbSwgcGxhdGZvcm1pbmZvLCB1c2VyLCB3b3Jrc3BhY2UKK2Zyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbSBpbXBvcnQgZW52aXJvbm1lbnQsIGV4ZWN1dGl2ZSwgZmlsZV9sb2NrLCBmaWxlc3lz
dGVtLCBwbGF0Zm9ybWluZm8sIHVzZXIsIHdvcmtzcGFjZQogCiAKIGNsYXNzIFN5c3RlbUhvc3Qo
b2JqZWN0KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91cmxm
ZXRjaGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS91cmxmZXRjaGVyLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDU1
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0
cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiJXcmFwcGVyIG1vZHVsZSBmb3IgZmV0Y2hp
bmcgVVJMcy4iIiIKLQotaW1wb3J0IHVybGxpYgotCi0KLWNsYXNzIFVybEZldGNoZXIob2JqZWN0
KToKLSAgICAiIiJDbGFzcyB3aXRoIHJlc3RyaWN0ZWQgaW50ZXJmYWNlIHRvIGZldGNoIFVSTHMg
KG1ha2VzIHRlc3RpbmcgZWFzaWVyKSIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lz
dGVtKToKLSAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KLQotICAgIGRlZiBm
ZXRjaChzZWxmLCB1cmwpOgotICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUg
VVJMIGFzIGEgc3RyaW5nLiIiIgotICAgICAgICBmaWxlX29iamVjdCA9IHVybGxpYi51cmxvcGVu
KHVybCkKLSAgICAgICAgY29udGVudCA9IGZpbGVfb2JqZWN0LnJlYWQoKQotICAgICAgICBmaWxl
X29iamVjdC5jbG9zZSgpCi0gICAgICAgIHJldHVybiBjb250ZW50Ci0KLSAgICBkZWYgZmV0Y2hf
aW50b19maWxlKHNlbGYsIHVybCk6Ci0gICAgICAgICIiIkZldGNoZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSBVUkwgaW50byBhIHRlbXBvcmFyeSBmaWxlIGFuZCByZXR1cm4gdGhlIGZpbGVuYW1lLgot
Ci0gICAgICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdXJsbGliLnJldHJpZXZlKCkgZXhj
ZXB0IHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGFueSBoZWFkZXJzLgotICAgICAgICAiIiIKLSAgICAg
ICAgZmlsZV9vYmplY3QsIGZpbGVuYW1lID0gc2VsZi5fZmlsZXN5c3RlbS5vcGVuX2JpbmFyeV90
ZW1wZmlsZSgnLWZldGNoZWQnKQotICAgICAgICBjb250ZW50cyA9IHNlbGYuZmV0Y2godXJsKQot
ICAgICAgICBmaWxlX29iamVjdC53cml0ZShjb250ZW50cykKLSAgICAgICAgZmlsZV9vYmplY3Qu
Y2xvc2UoKQotICAgICAgICByZXR1cm4gZmlsZW5hbWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyX21vY2sucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9jay5weQkocmV2
aXNpb24gMjUwMzcxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Vy
bGZldGNoZXJfbW9jay5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ2ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0KLWRlZiBtYWtlX2ZldGNoZXJfY2xzKHVybHMpOgotICAgICIiIlVybEZldGNoZXIg
ZmFjdG9yeSByb3V0aW5lIHRoYXQgc2ltdWxhdGVzIG5ldHdvcmsgYWNjZXNzCi0gICAgdXNpbmcg
YSBkaWN0IG9mIFVSTHMgLT4gY29udGVudHMuIiIiCi0gICAgY2xhc3MgTW9ja0ZldGNoZXIob2Jq
ZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW0pOgotICAgICAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KLQotICAgICAgICBkZWYgZmV0Y2goc2Vs
ZiwgdXJsKToKLSAgICAgICAgICAgIHJldHVybiB1cmxzW3VybF0KLQotICAgICAgICBkZWYgZmV0
Y2hfaW50b19maWxlKHNlbGYsIHVybCk6Ci0gICAgICAgICAgICBmLCBmbiA9IHNlbGYuX2ZpbGVz
eXN0ZW0ub3Blbl9iaW5hcnlfdGVtcGZpbGUoJ21vY2tmZXRjaGVyJykKLSAgICAgICAgICAgIGYu
d3JpdGUoc2VsZi5mZXRjaCh1cmwpKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAg
ICByZXR1cm4gZm4KLQotICAgIHJldHVybiBNb2NrRmV0Y2hlcgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHkJKHJldmlzaW9uIDI1MDM3MSkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBAIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBv
cnQgd2ViYnJvd3NlcgogCi1mcm9tIC5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQotZnJvbSAu
cGxhdGZvcm1pbmZvIGltcG9ydCBQbGF0Zm9ybUluZm8KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnBsYXRmb3JtaW5mbyBpbXBvcnQgUGxhdGZvcm1JbmZvCiAKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTAsNiArNTAsMTEgQEAgZXhjZXB0IEltcG9ydEVycm9y
OgogICAgICAgICAjIFRoZXJlIGlzIG5vIHJlYWRsaW5lIG1vZHVsZSBmb3Igd2luMzIsIG5vdCBt
dWNoIHRvIGRvIGV4Y2VwdCBjcnkuCiAgICAgICAgIF9sb2cud2FybigiVW5hYmxlIHRvIGltcG9y
dCByZWFkbGluZS4iKQogCitpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgorICAgIGlucHV0
X2Z1bmMgPSBpbnB1dAorZWxzZToKKyAgICBpbnB1dF9mdW5jID0gcmF3X2lucHV0CisKIAogY2xh
c3MgVXNlcihvYmplY3QpOgogICAgIERFRkFVTFRfTk8gPSAnbicKQEAgLTYyLDcgKzY3LDcgQEAg
Y2xhc3MgVXNlcihvYmplY3QpOgogCiAgICAgIyBGSVhNRTogVGhlc2UgYXJlIEBjbGFzc21ldGhv
ZHMgYmVjYXVzZSBidWd6aWxsYS5weSBkb2Vzbid0IGhhdmUgYSBUb29sIG9iamVjdCAodGh1cyBu
byBVc2VyIGluc3RhbmNlKS4KICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcHJvbXB0KGNscywg
bWVzc2FnZSwgcmVwZWF0PTEsIHJhd19pbnB1dD1yYXdfaW5wdXQpOgorICAgIGRlZiBwcm9tcHQo
Y2xzLCBtZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lucHV0PWlucHV0X2Z1bmMpOgogICAgICAgICBy
ZXNwb25zZSA9IE5vbmUKICAgICAgICAgd2hpbGUgKHJlcGVhdCBhbmQgbm90IHJlc3BvbnNlKToK
ICAgICAgICAgICAgIHJlcGVhdCAtPSAxCkBAIC03NCw3ICs3OSw3IEBAIGNsYXNzIFVzZXIob2Jq
ZWN0KToKICAgICAgICAgcmV0dXJuIGNscy5wcm9tcHQobWVzc2FnZSwgcmVwZWF0PXJlcGVhdCwg
cmF3X2lucHV0PWdldHBhc3MuZ2V0cGFzcykKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBw
cm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyhjbHMsIGxpc3RfdGl0bGUsIHN1YnRpdGxlcywgbGlz
dHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1yYXdfaW5wdXQpOgorICAg
IGRlZiBwcm9tcHRfd2l0aF9tdWx0aXBsZV9saXN0cyhjbHMsIGxpc3RfdGl0bGUsIHN1YnRpdGxl
cywgbGlzdHMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1pbnB1dF9mdW5j
KToKICAgICAgICAgaXRlbV9pbmRleCA9IDAKICAgICAgICAgY3VtdWxhdGVkX2xpc3QgPSBbXQog
ICAgICAgICBwcmludChsaXN0X3RpdGxlKQpAQCAtMTE0LDcgKzExOSw3IEBAIGNsYXNzIFVzZXIo
b2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdF9pdGVtc1tyZXN1bHRdCiAKICAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUs
IGxpc3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1yYXdfaW5w
dXQpOgorICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVt
cywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PWlucHV0X2Z1bmMpOgogICAg
ICAgICBwcmludChsaXN0X3RpdGxlKQogICAgICAgICBpID0gMAogICAgICAgICBmb3IgaXRlbSBp
biBsaXN0X2l0ZW1zOgpAQCAtMTU2LDcgKzE2MSw3IEBAIGNsYXNzIFVzZXIob2JqZWN0KToKICAg
ICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBj
b25maXJtKHNlbGYsIG1lc3NhZ2U9Tm9uZSwgZGVmYXVsdD1ERUZBVUxUX1lFUywgcmF3X2lucHV0
PXJhd19pbnB1dCk6CisgICAgZGVmIGNvbmZpcm0oc2VsZiwgbWVzc2FnZT1Ob25lLCBkZWZhdWx0
PURFRkFVTFRfWUVTLCByYXdfaW5wdXQ9aW5wdXRfZnVuYyk6CiAgICAgICAgIGlmIG5vdCBtZXNz
YWdlOgogICAgICAgICAgICAgbWVzc2FnZSA9ICJDb250aW51ZT8iCiAgICAgICAgIGNob2ljZSA9
IHsneSc6ICdZL24nLCAnbic6ICd5L04nfVtkZWZhdWx0XQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlcl9tb2NrLnB5CShyZXZpc2lvbiAyNTAz
NzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlcl9tb2NrLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOCArMjcsMjIgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFt
ZV9fKQogCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDApOgorICAgIGlucHV0ID0gcmF3X2lu
cHV0CisKIAogY2xhc3MgTW9ja1VzZXIob2JqZWN0KToKIAogICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBwcm9tcHQoY2xzLCBtZXNzYWdlLCByZXBlYXQ9MSwgcmF3X2lucHV0PXJhd19pbnB1dCk6
CisgICAgZGVmIHByb21wdChjbHMsIG1lc3NhZ2UsIHJlcGVhdD0xLCByYXdfaW5wdXQ9aW5wdXQp
OgogICAgICAgICByZXR1cm4gIk1vY2sgdXNlciByZXNwb25zZSIKIAogICAgIEBjbGFzc21ldGhv
ZAotICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywg
Y2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CisgICAgZGVm
IHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBjYW5fY2hvb3Nl
X211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9aW5wdXQpOgogICAgICAgICBwYXNzCiAKICAgICBk
ZWYgX19pbml0X18oc2VsZik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvX19p
bml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L19faW5p
dF9fLnB5CShyZXZpc2lvbiAyNTAzNzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
X19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogIiIiUG9ydC1z
cGVjaWZpYyBlbnRyeXBvaW50cyBmb3IgdGhlIGxheW91dCB0ZXN0cyB0ZXN0IGluZnJhc3RydWN0
dXJlLiIiIgogCi1pbXBvcnQgYnVpbGRlcnMgICMgV2h5IGlzIHRoaXMgaW4gcG9ydD8KK2ltcG9y
dCB3ZWJraXRweS5wb3J0LmJ1aWxkZXJzICAjIFdoeSBpcyB0aGlzIGluIHBvcnQ/CiAKLWZyb20g
YmFzZSBpbXBvcnQgUG9ydCAgIyBJdCdzIHBvc3NpYmxlIHdlIGRvbid0IG5lZWQgdG8gZXhwb3J0
IHRoaXMgdmlydHVhbCBiYXNlY2xhc3Mgb3V0c2lkZSB0aGUgbW9kdWxlLgotZnJvbSBkcml2ZXIg
aW1wb3J0IERyaXZlciwgRHJpdmVySW5wdXQsIERyaXZlck91dHB1dAotZnJvbSBmYWN0b3J5IGlt
cG9ydCBwbGF0Zm9ybV9vcHRpb25zLCBjb25maWd1cmF0aW9uX29wdGlvbnMKK2Zyb20gd2Via2l0
cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0ICAjIEl0J3MgcG9zc2libGUgd2UgZG9uJ3QgbmVlZCB0
byBleHBvcnQgdGhpcyB2aXJ0dWFsIGJhc2VjbGFzcyBvdXRzaWRlIHRoZSBtb2R1bGUuCitmcm9t
IHdlYmtpdHB5LnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXIsIERyaXZlcklucHV0LCBEcml2ZXJP
dXRwdXQKK2Zyb20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBwbGF0Zm9ybV9vcHRpb25z
LCBjb25maWd1cmF0aW9uX29wdGlvbnMK
</data>

          </attachment>
      

    </bug>

</bugzilla>