<?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>171976</bug_id>
          
          <creation_ts>2017-05-11 09:42:05 -0700</creation_ts>
          <short_desc>webkitpy: Process crash-logs for iOS devices</short_desc>
          <delta_ts>2017-06-06 13:25:17 -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=172002</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=172033</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=172931</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=172940</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>
          <dependson>172033</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1307290</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-11 09:42:05 -0700</bug_when>
    <thetext>We should process crash logs for iOS devices, sharing as much code as possible with other Darwin ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307291</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-11 09:42:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/32134551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307298</commentid>
    <comment_count>2</comment_count>
      <attachid>309719</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-11 10:00:42 -0700</bug_when>
    <thetext>Created attachment 309719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307310</commentid>
    <comment_count>3</comment_count>
      <attachid>309719</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 10:38:15 -0700</bug_when>
    <thetext>Comment on attachment 309719
Patch

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

I am not convinced that this is the correct approach. I understand that we may need to symbolicate device crash logs and that reading crash logs may require more filesystem operations to be performed on device more than the number of file system operations required to run a test. Can we symbolicate device crash logs on the host? Can we use efficient idioms to make the filesystem operations fast such that we can avoid the need to have a separate code path for iOS?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:79
&gt; +            self._host.list_crashlogs(newer_than), process_name, pid,

Can we symbolicate crash logs on the host? And avoid the need to add list_crashlogs()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307452</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 14:08:15 -0700</bug_when>
    <thetext>Jonathan and I discussed this bug some more today (05/11). Jonathan is concerned that calling FileSystem.mtime() for each crash log would cause a significant slowdown when the device has many crash logs. For 1000 crash logs Jonathan estimated it would take 30s to a minute to call FileSystem.mtime() on each log. Note that these crash logs may have existed before the test run. One idea I mentioned to reduce the number of invocations of FileSystem.mtime() is to have some sort of cache of last seen files. When run-webkit-tests is run and before the first test is executed we compute and store all the files seen in the crash log directory on the target host (device). We could modify FileSystem.file_under() to take this cache (in fact the cache may even be the output of this same function) and return the difference between the actual listing and the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307454</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 14:10:11 -0700</bug_when>
    <thetext>I forgot to mention, Jonathan and I also talked about adding a new function to the Host? object, called symbolicate_crash(), that takes the path to an unsymbolicated crash log and returns the path to the symbolicated crash log on the target device. For non-iOS ports symbolicate_crash() would return the path it was given. For iOS device, it would do something more meaningful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307461</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 14:16:43 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #5)
&gt; I forgot to mention, Jonathan and I also talked about adding a new function
&gt; to the Host? object, called symbolicate_crash(), that takes the path to an
&gt; unsymbolicated crash log and returns the path to the symbolicated crash log
&gt; on the target device. For non-iOS ports symbolicate_crash() would return the
&gt; path it was given. For iOS device, it would do something more meaningful.

We should still consider doing symbolication on the host machine (Mac) if possible instead of on the device as this is more efficient. Implementing symbolicate_crash() as described above and where the iOS device would do the actual symbolication is a first step. If it turns out that doing this computation on the device is a bottleneck for running tests and on-device caching is non-trivial it may naturally lead us to consider host symbolication as well as other optimization options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307546</commentid>
    <comment_count>7</comment_count>
      <attachid>309808</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-11 16:12:22 -0700</bug_when>
    <thetext>Created attachment 309808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307558</commentid>
    <comment_count>8</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-11 16:21:48 -0700</bug_when>
    <thetext>Still iterating on this (attachment 309808).

As Dan and I discussed, this implementation re-uses more code between iOS devices and other Darwin ports.  It uses a cached array of paths to ensure that we don&apos;t waste time checking crashes which occurred before the test run began.

The change that this does not contain, which Dan has suggested, is that the logs are not symbolicated on the host, they are symbolicated on the device.  Symbolicating logs on the host is possible, but it&apos;s more difficult and depends on the host having the binary which generated the crash.  One consideration here is if the host machine does not have the iOS SDK installed, or has a different SDK from the device.

I don&apos;t think we will see much of a performance benefit from symbolicating crashes on the host.  It will likely be faster to symbolicate on the host, but symbolication occurs once per crash and should only be applied to crashes which will be archived with the results.  I don&apos;t think that symbolicating crash-logs on the host is worth the trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307594</commentid>
    <comment_count>9</comment_count>
      <attachid>309808</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 16:52:03 -0700</bug_when>
    <thetext>Comment on attachment 309808
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:165
&gt; +                    count = 1
&gt; +                    original_result = result_name
&gt;                      while result_name in crash_logs:
&gt; -                        result_name = result_name + &quot;-1&quot;
&gt; +                        result_name = original_result + &apos;-{}&apos;.format(count)
&gt; +                        count += 1

I suggest that we fix this in a separate bug and add a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307603</commentid>
    <comment_count>10</comment_count>
      <attachid>309808</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-05-11 16:58:15 -0700</bug_when>
    <thetext>Comment on attachment 309808
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:54
&gt; +    def __init__(self):
&gt; +        self.cached_crashlogs = []
&gt; +

This does not seem the appropriate place for this knowledge. The purpose of this class is to abstract file system operations. Maybe PlatformInfo would be a more appropriate place for this?

&gt; Tools/Scripts/webkitpy/common/system/filesystem.py:349
&gt; +    def symbolicated_crashlog(self, path):
&gt; +        return path

I would call this symbolicate_crash_log() or symbolicate_crash_log_if_needed()

This does not seem the appropriate place for this knowledge. The purpose of this class is to abstract file system operations. Maybe Host would be a more appropriate place for this?

&gt; Tools/Scripts/webkitpy/port/darwin.py:111
&gt; +        crash_logs = CrashLogs((target_host or self.host))

Are the parentheses necessary? If not, then I suggest we remove them.

&gt; Tools/Scripts/webkitpy/port/win.py:380
&gt; +        crash_logs = CrashLogs((target_host or self.host), self.results_directory())

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308832</commentid>
    <comment_count>11</comment_count>
      <attachid>310175</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-15 15:23:30 -0700</bug_when>
    <thetext>Created attachment 310175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310223</commentid>
    <comment_count>12</comment_count>
      <attachid>310542</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-18 13:14:57 -0700</bug_when>
    <thetext>Created attachment 310542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310224</commentid>
    <comment_count>13</comment_count>
      <attachid>310542</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-05-18 13:15:28 -0700</bug_when>
    <thetext>Comment on attachment 310542
Patch

This patch shouldn&apos;t be committed until the Internal bits land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314727</commentid>
    <comment_count>14</comment_count>
      <attachid>311732</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-01 11:15:53 -0700</bug_when>
    <thetext>Created attachment 311732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314861</commentid>
    <comment_count>15</comment_count>
      <attachid>311771</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-01 16:03:41 -0700</bug_when>
    <thetext>Created attachment 311771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315064</commentid>
    <comment_count>16</comment_count>
      <attachid>311771</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-02 09:34:26 -0700</bug_when>
    <thetext>Comment on attachment 311771
Patch

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

&gt; Tools/ChangeLog:12
&gt; +        * Scripts/webkitpy/common/system/crashlogs.py:

This ChangeLog entry is out-of-date or there is a bug in prepare-ChangeLog. In particular, this ChangeLog is missing an entry for the modification of function CrashLogs.is_crash_log(). Please regenerate this ChangeLog file or file a bug about prepare-ChangeLog.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:58
&gt; +                return False

Is this correct?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:88
&gt; +                return False

Is this correct?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:151
&gt; +                    for line in log_contents.splitlines():
&gt; +                        match = process_regex.match(line)
&gt; +                        if match:
&gt; +                            break
&gt; +

Ewww. We should not duplicate code. I suggest that we extract out the process_regex and this parsing logic into a common helper method, say parse_darwin_crash_log(), that takes a path and symbolicates the crash log, parses it, and returns a (process name, pid) tuple on success and None if parsing fails.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:203
&gt; +        # Cache crash logs already on host.
&gt; +        try:
&gt; +            crash_log_directory = self._port.path_to_crash_logs()
&gt; +        except NotImplementedError:
&gt; +            return True
&gt; +        for i in xrange(self._options.child_processes):
&gt; +            target_host = self._port.target_host(i)
&gt; +            if not target_host.cached_crash_logs:
&gt; +                target_host.cached_crash_logs = target_host.filesystem.files_under(crash_log_directory)
&gt; +

This is not the appropriate place to do port-specific logic. Port specific logic should live in the Port class. Can we move this logic into Port.setup_test_run()?

&gt; Tools/Scripts/webkitpy/port/device.py:70
&gt; +        return path

This is not correct. The code in CrashLogs.py assumes symbolicate_crash_log_if_needed() returns the contents of the crash log. Either this code needs to change or the code in CrashLogs.py needs to change.

&gt; Tools/Scripts/webkitpy/port/ios_device.py:73
&gt; +            raise NotImplementedError

Raising a NotImplementedError exception is inconsistent with the behavior described in other functions when the Apple Additions module is unavailable. For example, in _device_for_worker_number_map() we raise RuntimeError(self.NO_ON_DEVICE_TESTING) when the Apple Additions module is unavailable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315089</commentid>
    <comment_count>17</comment_count>
      <attachid>311835</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-02 10:12:09 -0700</bug_when>
    <thetext>Created attachment 311835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315108</commentid>
    <comment_count>18</comment_count>
      <attachid>311771</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-02 10:40:25 -0700</bug_when>
    <thetext>Comment on attachment 311771
Patch

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

I will update to address Dan&apos;s comments that I did not respond to.

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:58
&gt;&gt; +                return False
&gt; 
&gt; Is this correct?

Yes.

This is an optimization so that we do not parse crash logs already on the host before testing began.  Perhaps cached_crash_logs needs a new name to make this more clear.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:203
&gt;&gt; +
&gt; 
&gt; This is not the appropriate place to do port-specific logic. Port specific logic should live in the Port class. Can we move this logic into Port.setup_test_run()?

Per your suggestion a few weeks ago, this actually isn&apos;t port-specific.  This is an optimization that all ports can use to avoid parsing crash logs not associated with layout tests.

For most ports, this will only calculate the list of cached crash logs once since the target host for each process is the same.  If a port specifies a different target host for a specific thread (as iOS does) this will calculate a list of cached crash logs for each target host.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315141</commentid>
    <comment_count>19</comment_count>
      <attachid>311841</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-02 11:45:57 -0700</bug_when>
    <thetext>Created attachment 311841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315249</commentid>
    <comment_count>20</comment_count>
      <attachid>311873</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-02 15:16:50 -0700</bug_when>
    <thetext>Created attachment 311873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315713</commentid>
    <comment_count>21</comment_count>
      <attachid>312013</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-05 09:51:04 -0700</bug_when>
    <thetext>Created attachment 312013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315728</commentid>
    <comment_count>22</comment_count>
      <attachid>312018</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-05 11:12:18 -0700</bug_when>
    <thetext>Created attachment 312018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315745</commentid>
    <comment_count>23</comment_count>
      <attachid>312018</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-05 13:06:08 -0700</bug_when>
    <thetext>Comment on attachment 312018
Patch

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

I suggest that we split this patch into at least two patches. One patch to fix up ServerProcess.process_name() and one patch to add the logic to symbolicate crash logs for iOS device.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:61
&gt; +    def _parse_darwin_crashlog(self, path):

Crash logs is two words. So, we should call this _parse_darwin_crash_log().

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:83
&gt; +                    parsed_crash_log = self._parse_darwin_crashlog(path)

I suggest we destructure/unpack the tuple here so as to avoid the need to need to know that the first and second arguments of the tuple are the process name and pid, respectively.

&gt; Tools/Scripts/webkitpy/port/apple.py:57
&gt; +    _host_to_existing_crashlogs = {}

Maybe a better name for this would be: crash_logs_to_skip_for_host.

This dictionary is only meaningful for the iOS device (simulator?) port at the moment that has multiple target devices. It would better if we could move this to the the iOS device (simulator?) port.

What is our naming convention for protected variables?

&gt; Tools/Scripts/webkitpy/port/apple.py:99
&gt; +    def host_to_crash_logs_to_skip(self, host):
&gt; +        if host in self._host_to_existing_crashlogs:
&gt; +            return self._host_to_existing_crashlogs[host]
&gt; +        return []

I do not see  the need to add such a getter-like function since it is only called from this class and derived classes. Instead I suggest caller just access the protected instance variable directly.

&gt; Tools/Scripts/webkitpy/port/darwin.py:241
&gt; +    def plist_data_from_bundle(self, app_bundle, entry):

This should be private.

&gt; Tools/Scripts/webkitpy/port/darwin.py:248
&gt; +        return self._executive.run_command(
&gt; +            [&apos;/usr/libexec/PlistBuddy&apos;, &apos;-c&apos;, &apos;Print {}&apos;.format(entry), plist_path]).rstrip()

I do not see the need to split this across two lines. I would write this on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316020</commentid>
    <comment_count>24</comment_count>
      <attachid>312078</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-06 09:24:46 -0700</bug_when>
    <thetext>Created attachment 312078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316024</commentid>
    <comment_count>25</comment_count>
      <attachid>312079</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-06 09:31:46 -0700</bug_when>
    <thetext>Created attachment 312079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316025</commentid>
    <comment_count>26</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-06 09:32:04 -0700</bug_when>
    <thetext>Talking to Dan yesterday, this bug has been split.  Dan&apos;s comments regarding the plist code will be addressed in bug 172940.

The approach in attachment 312079 keeps the host-to-crash-log-list dictionary on the Apple port, although the population of this dictionary is no longer generalized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316201</commentid>
    <comment_count>27</comment_count>
      <attachid>312079</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-06-06 13:18:05 -0700</bug_when>
    <thetext>Comment on attachment 312079
Patch

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

r=me, but please consider the feedback noted.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:74
&gt; +            if fs.join(dirpath, basename) in self._crash_logs_to_skip:
&gt; +                return False

Since iOS is the only port that uses skipped crash logs, you could add a check to see if self._crash_logs_to_skip is not empty before calling fs.join() (which creates a string just to see if it&apos;s in the list) [UNTESTED]:

    if self._crash_logs_to_skip and fs.join(dirpath, basename) in self._crash_logs_to_skip:

If you do this, please add this code everywhere this check is added.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py:37
&gt; -    return &quot;&quot;&quot;Process:         {process_name} [{pid}]
&gt; +    return &quot;&quot;&quot;May have garbage at the beginning

I&apos;d suggest something other than &quot;garbage&quot; here like:

    return &quot;&quot;&quot;Crash log may not start with Process line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316204</commentid>
    <comment_count>28</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-06-06 13:25:17 -0700</bug_when>
    <thetext>Committed r217853: &lt;http://trac.webkit.org/changeset/217853&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309719</attachid>
            <date>2017-05-11 10:00:42 -0700</date>
            <delta_ts>2017-05-11 16:12:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170511100042.patch</filename>
            <type>text/plain</type>
            <size>17148</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjY4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUzIEBACisyMDE3LTA1LTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIHBvdGVu
dGlhbCBwbGF0Zm9ybS4KKyAgICAgICAgKENyYXNoTG9ncy5maW5kX2FsbF9sb2dzKTogRGl0dG8u
CisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4pOiBDYWxsIF9wcm9j
ZXNzX25ld2VzdF9hcHBsZV9sb2cgZm9yCisgICAgICAgIE1hYy9TaW11bGF0b3IsIG1vdmUgZnVu
Y3Rpb25hbGl0eSB0byBfcHJvY2Vzc19uZXdlc3RfYXBwbGVfbG9nLgorICAgICAgICAoQ3Jhc2hM
b2dzLl9maW5kX25ld2VzdF9sb2dfaW9zKTogQ2FsbCBfcHJvY2Vzc19uZXdlc3RfYXBwbGVfbG9n
IGZvciBpT1MgZGV2aWNlcy4KKyAgICAgICAgKENyYXNoTG9ncy5fcHJvY2Vzc19uZXdlc3RfYXBw
bGVfbG9nKTogTWFjLCBTaW11bGF0b3IgYW5kIGlPUyBtb3N0bHkgc2hhcmUKKyAgICAgICAgdGhl
IHNhbWUgY3Jhc2gtbG9nIGZvcm1hdCwgaXQgaXMgb25seSB0aGUgdGVjaG5pcXVlIGZvciByZWFk
aW5nIGNyYXNoIGxvZ3MKKyAgICAgICAgd2hpY2ggbWF5IGRpZmZlci4KKyAgICAgICAgKENyYXNo
TG9ncy5fZmluZF9hbGxfbG9nc19kYXJ3aW4pOiBDYWxsIF9wcm9jZXNzX2FsbF9hcHBsZV9sb2dz
IGZvcgorICAgICAgICBNYWMvU2ltdWxhdG9yLCBtb3ZlIGZ1bmN0aW9uYWxpdHkgdG8gX3Byb2Nl
c3NfYWxsX2FwcGxlX2xvZ3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfaW9z
KTogQ2FsbCBfcHJvY2Vzc19hbGxfYXBwbGVfbG9ncyBmb3IgaU9TIGRldmljZXMuCisgICAgICAg
IChDcmFzaExvZ3MuX3Byb2Nlc3NfYWxsX2FwcGxlX2xvZ3MpOiBTaGFyZSBmdW5jdGlvbmFsaXR5
IGZvciBNYWMsIFNpbXVsYXRvcgorICAgICAgICBhbmQgaU9TIGRldmljZS4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5OgorICAgICAgICAo
UGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9u
YWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNo
X2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2
aWNlLmxpc3RfY3Jhc2hsb2dzKTogRXhwb3NlIHRoZSBwbGF0Zm9ybV9kZXZpY2UncyBjcmFzaCBs
b2dzLgorICAgICAgICAoRGV2aWNlLnJlYWRfY3Jhc2hsb2cpOiBSZWFkIGEgcGxhdGZvcm1fZGV2
aWNlJ3MgY3Jhc2ggbG9nIGF0IHNvbWUgcGF0aC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9nZXRfY3Jhc2hfbG9nKTogUGFzcyB0
YXJnZXRfaG9zdCB3aGVuIHNlYXJjaGluZyBmb3IgYSBjcmFzaCBsb2cuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1BvcnQuX2dldF9jcmFzaF9s
b2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJ
T1NEZXZpY2VQb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTogU2VhcmNo
IGV2ZXJ5IGNvbm5lY3RlZCBkZXZpY2UKKyAgICAgICAgZm9yIGNyYXNoIGxvZ3Mgc2luY2UgdGlt
ZS4KKyAgICAgICAgKElPU0RldmljZVBvcnQuX2dldF9jcmFzaF9sb2cpOiBTZWFyY2ggdGhlIHNw
ZWNpZmllZCB0YXJnZXQgaG9zdCBmb3IgYSBjcmFzaCBsb2cKKyAgICAgICAgaWYgYSB0YXJnZXQg
aG9zdCBpcyBzcGVjaWZpZWQuIEVsc2UsIHNlYXJjaCBhbGwgY29ubmVjdGVkIGRldmljZXMgZm9y
IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgY3Jhc2gtbG9nLgorICAgICAgICAoSU9TRGV2aWNlUG9y
dC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IFVzZSBEYXJ3aW4gaW1wbGVtZW50YXRpb24uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weToKKyAgICAgICAgKFdpblBvcnQu
X2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBj
cmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weToKKyAgICAg
ICAgKFdQRVBvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdo
ZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisgCiAyMDE3LTA1LTExICBDYXJsb3MgQWxiZXJ0byBMb3Bl
eiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBXUEUgcmVsZWFzZSBi
b3RzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dz
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9j
cmFzaGxvZ3MucHkJKHJldmlzaW9uIDIxNjYyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYg
QEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKIGltcG9y
dCBkYXRldGltZQogaW1wb3J0IHJlCiAKQEAgLTQ0LDYgKzQzLDggQEAgY2xhc3MgQ3Jhc2hMb2dz
KG9iamVjdCk6CiAgICAgZGVmIGZpbmRfbmV3ZXN0X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUsIHBp
ZD1Ob25lLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKICAgICAgICAg
aWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKICAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9maW5kX25ld2VzdF9sb2dfZGFyd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9y
cywgbmV3ZXJfdGhhbikKKyAgICAgICAgZWxpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX2lvcygp
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ19pb3MocHJvY2Vzc19u
YW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICBlbGlmIHNlbGYu
X2hvc3QucGxhdGZvcm0uaXNfd2luKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9u
ZXdlc3RfbG9nX3dpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3Ro
YW4pCiAgICAgICAgIHJldHVybiBOb25lCkBAIC01MSw2ICs1Miw4IEBAIGNsYXNzIENyYXNoTG9n
cyhvYmplY3QpOgogICAgIGRlZiBmaW5kX2FsbF9sb2dzKHNlbGYsIGluY2x1ZGVfZXJyb3JzPUZh
bHNlLCBuZXdlcl90aGFuPU5vbmUpOgogICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlz
X21hYygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKGlu
Y2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX2lvcygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsX2xvZ3NfaW9zKGlu
Y2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVm
IF9sb2dfZGlyZWN0b3J5X2RhcndpbihzZWxmKToKQEAgLTY3LDE1ICs3MCwyNCBAQCBjbGFzcyBD
cmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5zdGFydHN3aXRo
KHByb2Nlc3NfbmFtZSArICJfIikgYW5kIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQogCiAg
ICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9sb2dfZGlyZWN0b3J5X2RhcndpbigpCi0gICAg
ICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIobG9nX2RpcmVjdG9y
eSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vz
c19uZXdlc3RfYXBwbGVfbG9nKAorICAgICAgICAgICAgc2VsZi5faG9zdC5maWxlc3lzdGVtLmZp
bGVzX3VuZGVyKGxvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZyksIHByb2Nl
c3NfbmFtZSwgcGlkLAorICAgICAgICAgICAgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4sIGxh
bWJkYSBob3N0LCBwYXRoOiBob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkpCisK
KyAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19pb3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGlu
Y2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3Nf
bmV3ZXN0X2FwcGxlX2xvZygKKyAgICAgICAgICAgIHNlbGYuX2hvc3QubGlzdF9jcmFzaGxvZ3Mo
bmV3ZXJfdGhhbiksIHByb2Nlc3NfbmFtZSwgcGlkLAorICAgICAgICAgICAgaW5jbHVkZV9lcnJv
cnMsIG5ld2VyX3RoYW4sIGxhbWJkYSBob3N0LCBwYXRoOiBob3N0LnJlYWRfY3Jhc2hsb2cocGF0
aCkpCisKKyAgICBkZWYgX3Byb2Nlc3NfbmV3ZXN0X2FwcGxlX2xvZyhzZWxmLCBsb2dzLCBwcm9j
ZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4sIHJlYWRfZnVuY3Rpb24p
OgogICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/
UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKICAgICAgICAgZXJyb3JzID0g
JycKICAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAg
ICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0
LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgotICAgICAgICAgICAgICAgICAg
ICBmID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAg
ICAgICAgICAgICAgIGYgPSByZWFkX2Z1bmN0aW9uKHNlbGYuX2hvc3QsIHBhdGgpCiAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZWdleC5tYXRjaChmWzA6Zi5maW5kKCdc
bicpXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggYW5kIG1hdGNoLmdyb3VwKCdwcm9j
ZXNzX25hbWUnKSA9PSBwcm9jZXNzX25hbWUgYW5kIChwaWQgaXMgTm9uZSBvciBpbnQobWF0Y2gu
Z3JvdXAoJ3BpZCcpKSA9PSBwaWQpOgorICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaCBhbmQg
KG1hdGNoLmdyb3VwKCdwcm9jZXNzX25hbWUnKSA9PSBwcm9jZXNzX25hbWUgb3IgbWF0Y2guZ3Jv
dXAoJ3Byb2Nlc3NfbmFtZScpICsgJy5hcHAnID09IHByb2Nlc3NfbmFtZSkgYW5kIChwaWQgaXMg
Tm9uZSBvciBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKSA9PSBwaWQpOgogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9ycyArIGYKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBl
OgogICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3JzOgpAQCAtMTMwLDcgKzE0MiwxNiBA
QCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5l
bmRzd2l0aCgiLmNyYXNoIikKIAogICAgICAgICBsb2dfZGlyZWN0b3J5ID0gc2VsZi5fbG9nX2Rp
cmVjdG9yeV9kYXJ3aW4oKQotICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZp
bGVzX3VuZGVyKGxvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3NfYWxsX2FwcGxlX2xvZ3MoCisgICAgICAgICAgICBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIobG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9
aXNfY3Jhc2hfbG9nKSwKKyAgICAgICAgICAgIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuLCBs
YW1iZGEgaG9zdCwgcGF0aDogaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpKQor
CisgICAgZGVmIF9maW5kX2FsbF9sb2dzX2lvcyhzZWxmLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJf
dGhhbik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX2FsbF9hcHBsZV9sb2dzKAorICAg
ICAgICAgICAgc2VsZi5faG9zdC5saXN0X2NyYXNobG9ncyhuZXdlcl90aGFuKSwKKyAgICAgICAg
ICAgIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuLCBsYW1iZGEgaG9zdCwgcGF0aDogaG9zdC5y
ZWFkX2NyYXNobG9nKHBhdGgpKQorCisgICAgZGVmIF9wcm9jZXNzX2FsbF9hcHBsZV9sb2dzKHNl
bGYsIGxvZ3MsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuLCByZWFkX2Z1bmN0aW9uKToKICAg
ICAgICAgZmlyc3RfbGluZV9yZWdleCA9IHJlLmNvbXBpbGUocideUHJvY2VzczpccysoP1A8cHJv
Y2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAgICAgIGVycm9ycyA9ICcnCiAg
ICAgICAgIGNyYXNoX2xvZ3MgPSB7fQpAQCAtMTM5LDcgKzE2MCw3IEBAIGNsYXNzIENyYXNoTG9n
cyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hv
c3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46CiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCiAgICAgICAgICAgICAgICAgICAgIHBpZCA9IDAK
LSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0gc2VsZi5faG9zdC5maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGxvZ19jb250ZW50cyA9
IHJlYWRfZnVuY3Rpb24oc2VsZi5faG9zdCwgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgIyBW
ZXJpZnkgdGltZXN0YW1wIGZyb20gbG9nIGNvbnRlbnRzCiAgICAgICAgICAgICAgICAgICAgIGNy
YXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQogICAg
ICAgICAgICAgICAgICAgICBpZiBjcmFzaF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdlcl90aGFu
IGlzIG5vdCBOb25lOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMTY2MjQpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw5IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRl
ZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21hYycKIAor
ICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ2lv
cycKKwogICAgIGRlZiBpc193aW4oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUg
PT0gJ3dpbicKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9u
IDIxNjYyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQ3LDcgKzEzNDcsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAg
ICIiIlJldHVybnMgdGhlIHBvcnQncyBkcml2ZXIgaW1wbGVtZW50YXRpb24uIiIiCiAgICAgICAg
IHJldHVybiBkcml2ZXIuRHJpdmVyCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFt
ZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hf
bG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9o
b3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3IgJzx1bmtub3duIHByb2Nlc3Mg
bmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8dW5rbm93bj4nKQogICAgICAg
ICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+JykuZGVjb2RlKCd1dGY4JywgJ3Jl
cGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndp
bi5weQkocmV2aXNpb24gMjE2NjI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rh
cndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDE0ICsxMDEsMTQgQEAgY2xhc3MgRGFyd2lu
UG9ydChBcHBsZVBvcnQpOgogICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0
KQogICAgICAgICByZXR1cm4gY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9
VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwg
c2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xv
ZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5v
bmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToK
ICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNl
IGl0IGFwcGVhcnMgdGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1
YWxseSB3cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAg
ICAgICMgbG90cyBvZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KICAgICAgICAgdGlt
ZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4g
b3IgdGltZS5zbGVlcAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dz
ID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncygo
dGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0KSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAg
ICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nl
c3NlcycsIDEpKQogICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxp
bmU6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHJldmlzaW9uIDIx
NjYyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDE2IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICAg
ICAgICAgIGxheW91dF90ZXN0X2RpcmVjdG9yeT1sYXlvdXRfdGVzdF9kaXJlY3RvcnksCiAgICAg
ICAgICAgICApCiAKKyAgICBkZWYgbGlzdF9jcmFzaGxvZ3Moc2VsZiwgbmV3ZXJfdGhhbj1Ob25l
KToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBsYXRmb3JtX2RldmljZSwgJ2xpc3RfY3Jhc2hs
b2dzJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZpY2UubGlzdF9jcmFz
aGxvZ3MobmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAgICByZXR1cm4gW10KKworICAgIGRl
ZiByZWFkX2NyYXNobG9nKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGxh
dGZvcm1fZGV2aWNlLCAncmVhZF9jcmFzaGxvZycpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
cGxhdGZvcm1fZGV2aWNlLnJlYWRfY3Jhc2hsb2cocGF0aCkKKyAgICAgICAgcmV0dXJuIE5vbmUK
KwogICAgIGRlZiBmaW5pc2hlZF90ZXN0aW5nKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHNl
bGYucGxhdGZvcm1fZGV2aWNlLCAnZmluaXNoZWRfdGVzdGluZycpOgogICAgICAgICAgICAgc2Vs
Zi5wbGF0Zm9ybV9kZXZpY2UuZmluaXNoZWRfdGVzdGluZygpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxNjYyNCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGNyYXNoZWRfcGlkPXNlbGYuX2Ny
YXNoZWRfcGlkLCBjcmFzaF9sb2c9Y3Jhc2hfbG9nLCBwaWQ9cGlkKQogCiAgICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUs
IHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbikKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25h
bWUsIHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0
X2hvc3Q9c2VsZi5fdGFyZ2V0X2hvc3QpCiAKICAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihzZWxm
KToKICAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGlt
ZSBpbnN0cnVtZW50YXRpb24sIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90
ZXN0cy5weS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkocmV2aXNpb24gMjE2
NjI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkod29ya2luZyBjb3B5
KQpAQCAtMjIwLDcgKzIyMCw3IEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgZGVmIGNoZWNr
X3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gc3VwZXIoR3RrUG9y
dCwgc2VsZikuY2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0cCkgYW5kIHNlbGYuX2RyaXZlcl9jbGFz
cygpLmNoZWNrX2RyaXZlcihzZWxmKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRf
aG9zdD1Ob25lKToKICAgICAgICAgbmFtZSA9ICJXZWJLaXRXZWJQcm9jZXNzIiBpZiBuYW1lID09
ICJXZWJQcm9jZXNzIiBlbHNlIG5hbWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJh
dG9yKG5hbWUsIHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90
b19kcml2ZXIpLmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikKIApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIxNjYyNCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBp
bXBvcnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQ
b3J0CiAKQEAgLTcxLDkgKzcyLDYgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAg
ICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgog
ICAgICAgICBwYXNzCiAKLSAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jh
c2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICByZXR1cm4ge30KLQogICAgIGRl
ZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFy
dF90aW1lKToKICAgICAgICAgcmV0dXJuIHt9CiAKQEAgLTg3LDggKzg1LDI0IEBAIGNsYXNzIElP
U0RldmljZVBvcnQoSU9TUG9ydCk6CiAgICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAg
ICAgICAgIHJldHVybiAnaW9zLWRldmljZScKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxm
LCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNs
ZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAgICAgICAgcmV0dXJuIChzdGRlcnIs
IE5vbmUpCisgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYs
IG5ld2VyX3RoYW4pOgorICAgICAgICBsb2dfbGlzdCA9IHt9CisgICAgICAgIGZvciBkZXZpY2Ug
aW4gc2VsZi5fZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgpOgorICAgICAgICAgICAgY3Jh
c2hfbG9nID0gQ3Jhc2hMb2dzKGRldmljZSkKKyAgICAgICAgICAgIGxvZ19saXN0LnVwZGF0ZShj
cmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5l
d2VyX3RoYW4pKQorICAgICAgICByZXR1cm4gbG9nX2xpc3QKKworICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2Zu
PU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25l
KToKKyAgICAgICAgaWYgdGFyZ2V0X2hvc3Q6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoSU9T
RGV2aWNlUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVy
ciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9m
b3JfbG9nPXdhaXRfZm9yX2xvZywgdGFyZ2V0X2hvc3Q9dGFyZ2V0X2hvc3QpCisKKyAgICAgICAg
IyBXZSBuZWVkIHRvIHNlYXJjaCBldmVyeSBkZXZpY2Ugc2luY2Ugb25lIHdhcyBub3Qgc3BlY2lm
aWVkLgorICAgICAgICBjcmFzaGxvZyA9IE5vbmUKKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxm
Ll9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAgICAgICBzdGRlcnJfb3V0
LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xl
ZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQor
ICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGRlcnJf
b3V0LCBjcmFzaGxvZykKKyAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQogCiAgICAg
ZGVmIF9jcmVhdGVfZGV2aWNlcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgogICAgICAgICBpZiBub3Qg
YXBwbGVfYWRkaXRpb25zKCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2lu
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJl
dmlzaW9uIDIxNjYyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6
CiAgICAgICAgIHNlbGYucmVzdG9yZV9jcmFzaF9sb2dfc2F2aW5nKCkKICAgICAgICAgc3VwZXIo
V2luUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hf
bG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49
Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1l
X2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1O
b25lKToKICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQs
IHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0
byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJl
CiAgICAgICAgICMgbG90cyBvZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM3
Nyw3ICszNzcsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4g
PSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRp
bWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENy
YXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICAgICAgY3Jh
c2hfbG9ncyA9IENyYXNoTG9ncygodGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0KSwgc2VsZi5yZXN1
bHRzX2RpcmVjdG9yeSgpKQogICAgICAgICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAgIyBGSVhN
RTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2UncmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4K
ICAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAo
bmFtZSwgc3RyKHBpZCkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZp
c2lvbiAyMTY2MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw2ICs3NCw2IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVm
IF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsdF9l
eGVjdXRhYmxlc19wYXRoKCdJbWFnZURpZmYnKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgbmFtZSA9ICJXUEVXZWJQcm9jZXNzIiBpZiBuYW1l
ID09ICJXZWJQcm9jZXNzIiBlbHNlIG5hbWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2Vu
ZXJhdG9yKG5hbWUsIHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0
aF90b19kcml2ZXIpLmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309808</attachid>
            <date>2017-05-11 16:12:22 -0700</date>
            <delta_ts>2017-05-15 15:23:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170511161221.patch</filename>
            <type>text/plain</type>
            <size>18194</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjY5NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUxIEBACisyMDE3LTA1LTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIHBvdGVu
dGlhbCBwbGF0Zm9ybS4KKyAgICAgICAgKENyYXNoTG9ncy5maW5kX2FsbF9sb2dzKTogRGl0dG8u
CisgICAgICAgIChDcmFzaExvZ3MuX2xvZ19kaXJlY3RvcnlfZGFyd2luKTogQ29uc3VsdCBwbGF0
Zm9ybV9kZXZpY2UgaWYgb24gYW4gaU9TIGRldmljZS4KKyAgICAgICAgKENyYXNoTG9ncy5fZmlu
ZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQgaU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVj
aworICAgICAgICBjYWNoZWRfY3Jhc2hsb2csIHBhcnNlIHRoZSBzeW1ib2xpY2F0ZWQgY3Jhc2hs
b2cuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKTogRGl0dG8uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHk6Cisg
ICAgICAgIChGaWxlU3lzdGVtLl9faW5pdF9fKTogQWRkIGNhY2hlZF9jcmFzaGxvZ3MgYXJyYXkg
dG8gb3B0aW1pemUgc2VhcmNoaW5nIGZvciBuZXcKKyAgICAgICAgY3Jhc2hsb2dzLgorICAgICAg
ICAoRmlsZVN5c3RlbS5zeW1ib2xpY2F0ZWRfY3Jhc2hsb2cpOiBUaGUgc3ltYm9saWNhdGVkIGNy
YXNoIGxvZyBmb3IgbW9zdCBzeXN0ZW1zCisgICAgICAgIGlzIGp1c3QgdGhlIGNyYXNobG9nLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6
CisgICAgICAgIChQbGF0Zm9ybUluZm8uaXNfaW9zKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9nZXRfY3Jhc2hfbG9nKTog
UGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0
Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcg
Y3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHk6Cisg
ICAgICAgIChEZXZpY2UubGlzdF9jcmFzaGxvZ3MpOiBFeHBvc2UgdGhlIHBsYXRmb3JtX2Rldmlj
ZSdzIGNyYXNoIGxvZ3MuCisgICAgICAgIChEZXZpY2UucmVhZF9jcmFzaGxvZyk6IFJlYWQgYSBw
bGF0Zm9ybV9kZXZpY2UncyBjcmFzaCBsb2cgYXQgc29tZSBwYXRoLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX2dldF9jcmFzaF9s
b2cpOiBQYXNzIHRhcmdldF9ob3N0IHdoZW4gc2VhcmNoaW5nIGZvciBhIGNyYXNoIGxvZy4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5f
Z2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNy
YXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weToK
KyAgICAgICAgKElPU0RldmljZVBvcnQuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19k
aXIpOiBTZWFyY2ggZXZlcnkgY29ubmVjdGVkIGRldmljZQorICAgICAgICBmb3IgY3Jhc2ggbG9n
cyBzaW5jZSB0aW1lLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFNl
YXJjaCB0aGUgc3BlY2lmaWVkIHRhcmdldCBob3N0IGZvciBhIGNyYXNoIGxvZworICAgICAgICBp
ZiBhIHRhcmdldCBob3N0IGlzIHNwZWNpZmllZC4gRWxzZSwgc2VhcmNoIGFsbCBjb25uZWN0ZWQg
ZGV2aWNlcyBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgICBjcmFzaC1sb2cuCisgICAgICAgIChJ
T1NEZXZpY2VQb3J0Lmxvb2tfZm9yX25ld19jcmFzaF9sb2dzKTogVXNlIERhcndpbiBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAg
ICAoV2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hl
biBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3Bl
LnB5OgorICAgICAgICAoV1BFUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFy
Z2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAKIDIwMTctMDUtMTEgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgVmlicmF0aW9u
IEFQSQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9n
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
Y3Jhc2hsb2dzLnB5CShyZXZpc2lvbiAyMTY2MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgY29kZWNzCiBpbXBv
cnQgZGF0ZXRpbWUKIGltcG9ydCByZQogCkBAIC00MiwxOCArNDEsMjAgQEAgY2xhc3MgQ3Jhc2hM
b2dzKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0c19k
aXJlY3RvcnkKIAogICAgIGRlZiBmaW5kX25ld2VzdF9sb2coc2VsZiwgcHJvY2Vzc19uYW1lLCBw
aWQ9Tm9uZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSk6Ci0gICAgICAg
IGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3Qu
cGxhdGZvcm0uaXNfbWFjKCkgb3Igc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19pb3MoKToKICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfZGFyd2luKHByb2Nlc3NfbmFtZSwg
cGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgZWxpZiBzZWxmLl9ob3N0
LnBsYXRmb3JtLmlzX3dpbigpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0
X2xvZ193aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQog
ICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGZpbmRfYWxsX2xvZ3Moc2VsZiwgaW5jbHVk
ZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSk6Ci0gICAgICAgIGlmIHNlbGYuX2hvc3Qu
cGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFj
KCkgb3Igc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19pb3MoKToKICAgICAgICAgICAgIHJldHVybiBz
ZWxmLl9maW5kX2FsbF9sb2dzX2RhcndpbihpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAg
ICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfbG9nX2RpcmVjdG9yeV9kYXJ3aW4oc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5faG9zdC5wbGF0Zm9ybV9kZXZpY2UuQ1JBU0hfTE9HX1BBVEgKICAgICAgICAg
bG9nX2RpcmVjdG9yeSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5leHBhbmR1c2VyKCJ+IikKICAg
ICAgICAgbG9nX2RpcmVjdG9yeSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJl
Y3RvcnksICJMaWJyYXJ5IiwgIkxvZ3MiKQogICAgICAgICBpZiBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5qb2luKGxvZ19kaXJlY3RvcnksICJEaWFn
bm9zdGljUmVwb3J0cyIpKToKQEAgLTY0LDcgKzY1LDkgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVj
dCk6CiAKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4oc2VsZiwgcHJvY2Vzc19uYW1l
LCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNo
X2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1l
LnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgIl8iKSBhbmQgYmFzZW5hbWUuZW5kc3dpdGgoIi5j
cmFzaCIpCisgICAgICAgICAgICBpZiBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uam9pbihkaXJwYXRo
LCBiYXNlbmFtZSkgaW4gc2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hsb2dzOgorICAgICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgo
cHJvY2Vzc19uYW1lICsgIl8iKSBhbmQgKGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSBvciBi
YXNlbmFtZS5lbmRzd2l0aCgnLmlwcycpKQogCiAgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxm
Ll9sb2dfZGlyZWN0b3J5X2RhcndpbigpCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVz
eXN0ZW0uZmlsZXNfdW5kZXIobG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9n
KQpAQCAtNzMsOSArNzYsOSBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgZm9y
IHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAgICAgIHRyeToKICAgICAg
ICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ubXRp
bWUocGF0aCkgPiBuZXdlcl90aGFuOgotICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5faG9z
dC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGYg
PSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5faG9zdC5maWxlc3lz
dGVtLnN5bWJvbGljYXRlZF9jcmFzaGxvZyhwYXRoKSkKICAgICAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xuJyldKQotICAgICAgICAg
ICAgICAgICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHBy
b2Nlc3NfbmFtZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09
IHBpZCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoIGFuZCAobWF0Y2guZ3JvdXAoJ3By
b2Nlc3NfbmFtZScpID09IHByb2Nlc3NfbmFtZSBvciBtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1l
JykgKyAnLmFwcCcgPT0gcHJvY2Vzc19uYW1lKSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRj
aC5ncm91cCgncGlkJykpID09IHBpZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3JzICsgZgogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAg
ICAgaWYgaW5jbHVkZV9lcnJvcnM6CkBAIC0xMjcsNyArMTMwLDkgQEAgY2xhc3MgQ3Jhc2hMb2dz
KG9iamVjdCk6CiAKICAgICBkZWYgX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKHNlbGYsIGluY2x1ZGVf
ZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0
aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jh
c2giKQorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gZnMuY2Fj
aGVkX2NyYXNobG9nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAg
IHJldHVybiBiYXNlbmFtZS5lbmRzd2l0aCgnLmNyYXNoJykgb3IgYmFzZW5hbWUuZW5kc3dpdGgo
Jy5pcHMnKQogCiAgICAgICAgIGxvZ19kaXJlY3RvcnkgPSBzZWxmLl9sb2dfZGlyZWN0b3J5X2Rh
cndpbigpCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIo
bG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQpAQCAtMTM5LDcgKzE0NCw3
IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdl
cl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46
CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCiAgICAgICAgICAg
ICAgICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0gc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAg
ICAgIGxvZ19jb250ZW50cyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShz
ZWxmLl9ob3N0LmZpbGVzeXN0ZW0uc3ltYm9saWNhdGVkX2NyYXNobG9nKHBhdGgpKQogICAgICAg
ICAgICAgICAgICAgICAjIFZlcmlmeSB0aW1lc3RhbXAgZnJvbSBsb2cgY29udGVudHMKICAgICAg
ICAgICAgICAgICAgICAgY3Jhc2hfdGltZSA9IHNlbGYuZ2V0X3RpbWVzdGFtcF9mcm9tX2xvZyhs
b2dfY29udGVudHMpCiAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgaXMgbm90IE5v
bmUgYW5kIG5ld2VyX3RoYW4gaXMgbm90IE5vbmU6CkBAIC0xNTMsOCArMTU4LDExIEBAIGNsYXNz
IENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGlkID0gc3RyKG1h
dGNoLmdyb3VwKCdwaWQnKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0g
cHJvY2Vzc19uYW1lICsgIi0iICsgcGlkCiAKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSAx
CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsX3Jlc3VsdCA9IHJlc3VsdF9uYW1lCiAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIHJlc3VsdF9uYW1lIGluIGNyYXNoX2xvZ3M6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IHJlc3VsdF9uYW1lICsgIi0xIgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUgPSBvcmlnaW5hbF9yZXN1bHQgKyAnLXt9Jy5m
b3JtYXQoY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAg
ICAgICAgICAgICAgIGNyYXNoX2xvZ3NbcmVzdWx0X25hbWVdID0gZXJyb3JzICsgbG9nX2NvbnRl
bnRzCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKICAgICAgICAgICAgICAgICBpZiBp
bmNsdWRlX2Vycm9yczoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CShyZXZpc2lvbiAyMTY2MjQpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksOSBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgc2VwID0gb3Mu
c2VwCiAgICAgcGFyZGlyID0gb3MucGFyZGlyCiAKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgIHNlbGYuY2FjaGVkX2NyYXNobG9ncyA9IFtdCisKICAgICBkZWYgYWJzcGF0aChzZWxm
LCBwYXRoKToKICAgICAgICAgIyBGSVhNRTogVGhpcyBncm9zcyBoYWNrIGlzIG5lZWRlZCB3aGls
ZSB3ZSB0cmFuc2l0aW9uIGZyb20gQ3lnd2luIHRvIG5hdGl2ZSBXaW5kb3dzLCBiZWNhdXNlIHdl
CiAgICAgICAgICMgaGF2ZSBzb21lIG1peGluZyBvZiBmaWxlIGNvbnZlbnRpb25zIGZyb20gZGlm
ZmVyZW50IHRvb2xzOgpAQCAtMzQxLDMgKzM0NCw2IEBAIGNsYXNzIEZpbGVTeXN0ZW0ob2JqZWN0
KToKICAgICAgICAgICAgIHNlbGYuY29weXRyZWUoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuY29weWZpbGUoc291cmNlLCBkZXN0aW5hdGlvbikK
KworICAgIGRlZiBzeW1ib2xpY2F0ZWRfY3Jhc2hsb2coc2VsZiwgcGF0aCk6CisgICAgICAgIHJl
dHVybiBwYXRoCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIxNjYyNCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDYgKzYzLDkgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGlz
X21hYyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFjJwogCisgICAg
ZGVmIGlzX2lvcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnaW9zJwor
CiAgICAgZGVmIGlzX3dpbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAn
d2luJwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjE2
NjI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgIiIi
UmV0dXJucyB0aGUgcG9ydCdzIGRyaXZlciBpbXBsZW1lbnRhdGlvbi4iIiIKICAgICAgICAgcmV0
dXJuIGRyaXZlci5Ecml2ZXIKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9
Tm9uZSk6CiAgICAgICAgIG5hbWVfc3RyID0gbmFtZSBvciAnPHVua25vd24gcHJvY2VzcyBuYW1l
PicKICAgICAgICAgcGlkX3N0ciA9IHN0cihwaWQgb3IgJzx1bmtub3duPicpCiAgICAgICAgIHN0
ZG91dF9saW5lcyA9IChzdGRvdXQgb3IgJzxlbXB0eT4nKS5kZWNvZGUoJ3V0ZjgnLCAncmVwbGFj
ZScpLnNwbGl0bGluZXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndp
bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5
CShyZXZpc2lvbiAyMTY2MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTQgKzEwMSwxNCBAQCBjbGFzcyBEYXJ3aW5Qb3J0
KEFwcGxlUG9ydCk6CiAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCiAg
ICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVl
LCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVl
cF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwg
c2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAg
ICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQg
YXBwZWFycyB0aGUgdGltZQogICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5
IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAg
IyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgogICAgICAgICB0aW1lX2Zu
ID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0
aW1lLnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0KQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKCh0YXJn
ZXRfaG9zdCBvciBzZWxmLmhvc3QpKQogICAgICAgICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAg
ZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2Vz
JywgMSkpCiAgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RldmljZS5weQkocmV2aXNpb24gMjE2NjI0
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RldmljZS5weQkod29ya2luZyBjb3B5
KQpAQCAtNTcsNiArNTcsMTEgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgICAgICAg
ICAgbGF5b3V0X3Rlc3RfZGlyZWN0b3J5PWxheW91dF90ZXN0X2RpcmVjdG9yeSwKICAgICAgICAg
ICAgICkKIAorICAgIGRlZiBsaXN0X2NyYXNobG9ncyhzZWxmLCBuZXdlcl90aGFuPU5vbmUpOgor
ICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGxhdGZvcm1fZGV2aWNlLCAnbGlzdF9jcmFzaGxvZ3Mn
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5saXN0X2NyYXNobG9n
cyhuZXdlcl90aGFuPW5ld2VyX3RoYW4pCisgICAgICAgIHJldHVybiBbXQorCiAgICAgZGVmIGZp
bmlzaGVkX3Rlc3Rpbmcoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9k
ZXZpY2UsICdmaW5pc2hlZF90ZXN0aW5nJyk6CiAgICAgICAgICAgICBzZWxmLnBsYXRmb3JtX2Rl
dmljZS5maW5pc2hlZF90ZXN0aW5nKCkKQEAgLTg3LDYgKzkyLDEyIEBAIGNsYXNzIERldmljZShv
YmplY3QpOgogICAgIGRlZiB1ZGlkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9y
bV9kZXZpY2UudWRpZAogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNhY2hlZF9jcmFzaGxvZ3Mo
c2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9kZXZpY2UsICdjYWNoZWRf
Y3Jhc2hsb2dzJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZpY2UuY2Fj
aGVkX2NyYXNobG9ncworICAgICAgICByZXR1cm4gW10KKwogICAgIGRlZiBfX25vbnplcm9fXyhz
ZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlIGlzIG5vdCBOb25lCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjE2NjI0
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMjQxLDcgKzI0MSw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAg
Y3Jhc2hlZF9waWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xvZz1jcmFzaF9sb2csIHBpZD1w
aWQpCiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4pOgotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9j
cmFzaGVkX3Byb2Nlc3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJyLCBu
ZXdlcl90aGFuKQorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxm
Ll9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJy
LCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1zZWxmLl90YXJnZXRfaG9zdCkKIAogICAgIGRlZiBf
Y29tbWFuZF93cmFwcGVyKHNlbGYpOgogICAgICAgICAjIEhvb2sgZm9yIGluamVjdGluZyB2YWxn
cmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRhdGlvbiwgdXNlZCBieSBlLmcuIHRvb2xz
L3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2d0ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrLnB5CShyZXZpc2lvbiAyMTY2MjQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgR3RrUG9ydChQ
b3J0KToKICAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAg
IHJldHVybiBzdXBlcihHdGtQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKSBh
bmQgc2VsZi5fZHJpdmVyX2NsYXNzKCkuY2hlY2tfZHJpdmVyKHNlbGYpCiAKLSAgICBkZWYgX2dl
dF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lID0gIldlYktpdFdl
YlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlByb2Nlc3MiIGVsc2UgbmFtZQogICAgICAgICByZXR1
cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFtZSwgcGlkLCBuZXdlcl90aGFuLCBzZWxmLl9maWxl
c3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZlcikuZ2VuZXJhdGVfY3Jhc2hfbG9nKHN0ZG91dCwg
c3RkZXJyKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5w
eQkocmV2aXNpb24gMjE2NjI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBsb2dnaW5n
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdl
YmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Via2l0cHku
cG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIApAQCAtNzEsOSArNzIsNiBAQCBjbGFzcyBJT1NEZXZp
Y2VQb3J0KElPU1BvcnQpOgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19u
YW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdf
Y3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAg
IHJldHVybiB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9u
c2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30KIApAQCAtODcs
OCArODUsMjQgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBkZWYgb3BlcmF0
aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwogCi0gICAgZGVm
IF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3Ro
YW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAg
ICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKKyAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9s
b2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6CisgICAgICAgIGxvZ19saXN0ID0ge30K
KyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFw
KCk6CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3MoZGV2aWNlKQorICAgICAgICAg
ICAgbG9nX2xpc3QudXBkYXRlKGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3Jz
PVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikpCisgICAgICAgIHJldHVybiBsb2dfbGlzdAor
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRy
dWUsIHRhcmdldF9ob3N0PU5vbmUpOgorICAgICAgICBpZiB0YXJnZXRfaG9zdDoKKyAgICAgICAg
ICAgIHJldHVybiBzdXBlcihJT1NEZXZpY2VQb3J0LCBzZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1l
LCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWVfZm4sIHNsZWVw
X2ZuPXNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2c9d2FpdF9mb3JfbG9nLCB0YXJnZXRfaG9zdD10YXJn
ZXRfaG9zdCkKKworICAgICAgICAjIFdlIG5lZWQgdG8gc2VhcmNoIGV2ZXJ5IGRldmljZSBzaW5j
ZSBvbmUgd2FzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIGNyYXNobG9nID0gTm9uZQorICAgICAg
ICBmb3IgZGV2aWNlIGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAg
ICAgICAgICAgIHN0ZGVycl9vdXQsIGNyYXNobG9nID0gc3VwZXIoSU9TRGV2aWNlUG9ydCwgc2Vs
ZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwg
dGltZV9mbj10aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPUZhbHNlLCB0
YXJnZXRfaG9zdD1kZXZpY2UpCisgICAgICAgICAgICBpZiBjcmFzaGxvZzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKHN0ZGVycl9vdXQsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVy
ciwgY3Jhc2hsb2cpCiAKICAgICBkZWYgX2NyZWF0ZV9kZXZpY2VzKHNlbGYsIGRldmljZV9jbGFz
cyk6CiAgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3dpbi5weQkocmV2aXNpb24gMjE2NjI0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBAIGNsYXNz
IFdpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgc2VsZi5yZXN0b3JlX2NyYXNoX2xvZ19zYXZp
bmcoKQogICAgICAgICBzdXBlcihXaW5Qb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCiAK
LSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1
ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9n
PVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93
LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQogICAgICAgICAj
IFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2
YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFz
aGVzIGdvaW5nIG9uLgpAQCAtMzc3LDcgKzM3Nyw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0
KToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVw
X2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAg
ICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5yZXN1bHRzX2RpcmVj
dG9yeSgpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKCh0YXJnZXRfaG9zdCBvciBz
ZWxmLmhvc3QpLCBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkpCiAgICAgICAgIG5vdyA9IHRpbWVf
Zm4oKQogICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMg
Y29kZSBpcyB3b3JraW5nIC4uLgogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFz
aCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd3BlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93cGUucHkJKHJldmlzaW9uIDIxNjYyNCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93cGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDYgQEAgY2xhc3MgV1BF
UG9ydChQb3J0KToKICAgICBkZWYgX3BhdGhfdG9faW1hZ2VfZGlmZihzZWxmKToKICAgICAgICAg
cmV0dXJuIHNlbGYuX2J1aWx0X2V4ZWN1dGFibGVzX3BhdGgoJ0ltYWdlRGlmZicpCiAKLSAgICBk
ZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBz
dGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lID0gIldQ
RVdlYlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlByb2Nlc3MiIGVsc2UgbmFtZQogICAgICAgICBy
ZXR1cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFtZSwgcGlkLCBuZXdlcl90aGFuLCBzZWxmLl9m
aWxlc3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZlcikuZ2VuZXJhdGVfY3Jhc2hfbG9nKHN0ZG91
dCwgc3RkZXJyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310175</attachid>
            <date>2017-05-15 15:23:30 -0700</date>
            <delta_ts>2017-05-18 13:14:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170515152330.patch</filename>
            <type>text/plain</type>
            <size>22952</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNjg4MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYzIEBACisyMDE3LTA1LTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90
ZW50aWFsIHBsYXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0
by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQg
aU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVjaworICAgICAgICBjYWNoZWRfY3Jhc2hsb2dzIGZv
ciBlZmZpY2llbmN5IGFuZCBzeW1ib2xpY2F0ZSB0aGUgY3Jhc2hsb2cgYmVmb3JlIHBhcnNpbmcg
aXQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKTpEaXR0by4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5Ogor
ICAgICAgICAoUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1v
Y2tQbGF0Zm9ybUluZm8uaXNfaW9zKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0Ll9faW5p
dF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAgKFN5c3Rl
bUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IFRoZSBzeW1ib2xpY2F0ZWQg
Y3Jhc2ggbG9nIGZvciBtb3N0IHN5c3RlbXMKKyAgICAgICAgaXMganVzdCB0aGUgY3Jhc2hsb2cs
IHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weTogRGl0dG8uCisgICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAg
ICAgIChNYW5hZ2VyLl9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBjdXJyZW50bHkgb24g
dGhlIHRhcmdldCBob3N0cyBiZWZvcmUgcnVubmluZyB0ZXN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eToKKyAgICAgICAgKFJ1blRlc3QudGVzdF9jcmFzaF9sb2cpOiBJbml0aWFsaXplIGNhY2hlZF9j
cmFzaF9sb2dzIGJlZm9yZSBydW5uaW5nIHNvIHRoYXQgdGhlIGNyYXNoCisgICAgICAgIGxvZ3Mg
d2UncmUgdGVzdGluZyBhcmUgbm90IGlnbm9yZWQuCisgICAgICAgIChSdW5UZXN0LnRlc3Rfd2Vi
X3Byb2Nlc3NfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25h
bCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9nZXRfY3Jhc2hf
bG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHk6CisgICAgICAgIChEZXZp
Y2UuX19pbml0X18pOiBJbml0aWFsaXplIGNhY2hlZF9jcmFzaF9sb2dzIGFycmF5LgorICAgICAg
ICAoRGV2aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBJZiB0aGUgcGxhdGZv
cm0gZGV2aWNlIGhhcyBhIGZ1bmN0aW9uIHdpdGggdGhpcworICAgICAgICBuYW1lLCBjYWxsIGl0
LiBPdGhlcndpc2UsIGFzc3VtZSB0aGUgY3Jhc2ggbG9nIGlzIGFscmVhZHkgc3ltYm9saWNhdGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChE
cml2ZXIuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0
dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToK
KyAgICAgICAgKEd0a1BvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBo
b3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hf
bG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25zIGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dz
LgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9n
X2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQgZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBs
b2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFNlYXJjaCB0aGUg
c3BlY2lmaWVkIHRhcmdldCBob3N0IGZvciBhIGNyYXNoIGxvZworICAgICAgICBpZiBhIHRhcmdl
dCBob3N0IGlzIHNwZWNpZmllZC4gRWxzZSwgc2VhcmNoIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBm
b3IgdGhlIHNwZWNpZmllZAorICAgICAgICBjcmFzaC1sb2cuCisgICAgICAgIChJT1NEZXZpY2VQ
b3J0Lmxvb2tfZm9yX25ld19jcmFzaF9sb2dzKTogRGVsZXRlZCwgdXNlIERhcndpbiBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0
dGVzdC5weToKKyAgICAgICAgKElPU0RldmljZVRlc3QudGVzdF9jcmFzaGxvZ19wYXRoKTogV2l0
aG91dCBhcHBsZV9hZGRpdGlvbnMsIHBhdGhfdG9fY3Jhc2hfbG9ncyBzaG91bGQgcmFpc2UKKyAg
ICAgICAgYW4gZXhjZXB0aW9uLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHk6CisgICAgICAgIChXaW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJn
ZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC93cGUucHk6CisgICAgICAgIChXUEVQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBv
cHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorCiAyMDE3LTA1LTE1
ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIFBp
Y3R1cmUgSW4gUGljdHVyZSBBUEkgdGVzdHMgb24gdW5zdXBwb3J0ZWQgcGxhdGZvcm1zLgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dz
LnB5CShyZXZpc2lvbiAyMTY3OTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgY29kZWNzCiBpbXBvcnQgZGF0ZXRp
bWUKIGltcG9ydCByZQogCkBAIC00MiwyMCArNDEsMjIgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVj
dCk6CiAgICAgICAgIHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnkgPSBjcmFzaF9sb2dfZGlyZWN0
b3J5CiAKICAgICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5v
bmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBz
ZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRm
b3JtLmlzX21hYygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbihwcm9jZXNzX25hbWUsIHBpZCwg
aW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIGVsaWYgc2VsZi5faG9zdC5wbGF0
Zm9ybS5pc193aW4oKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2df
d2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAg
ICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBmaW5kX2FsbF9sb2dzKHNlbGYsIGluY2x1ZGVfZXJy
b3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRm
b3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9y
IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5f
ZmluZF9hbGxfbG9nc19kYXJ3aW4oaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAg
IHJldHVybiBOb25lCiAKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4oc2VsZiwgcHJv
Y2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVm
IGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJu
IGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgIl8iKSBhbmQgYmFzZW5hbWUuZW5k
c3dpdGgoIi5jcmFzaCIpCisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1l
KSBpbiBzZWxmLl9ob3N0LmNhY2hlZF9jcmFzaF9sb2dzOgorICAgICAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19u
YW1lICsgJ18nKSBhbmQgKGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSBvciBiYXNlbmFtZS5l
bmRzd2l0aCgnLmlwcycpKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0u
ZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jh
c2hfbG9nKQogICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNz
OlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKQEAgLTYzLDcgKzY0
LDcgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAgICAgICAgIGZvciBwYXRoIGluIHJldmVy
c2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYg
bm90IG5ld2VyX3RoYW4gb3Igc2VsZi5faG9zdC5maWxlc3lzdGVtLm10aW1lKHBhdGgpID4gbmV3
ZXJfdGhhbjoKLSAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5faG9zdC5m
aWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX2hvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9n
X2lmX25lZWRlZChwYXRoKSkKICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5l
X3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xuJyldKQogICAgICAgICAgICAgICAgICAgICBpZiBt
YXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHByb2Nlc3NfbmFtZSBhbmQg
KHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgZgpAQCAtODAsNiArODEsOCBAQCBjbGFz
cyBDcmFzaExvZ3Mob2JqZWN0KToKIAogICAgIGRlZiBfZmluZF9uZXdlc3RfbG9nX3dpbihzZWxm
LCBwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAg
ICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6CisgICAgICAgICAgICBp
ZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9ob3N0LmNhY2hlZF9jcmFzaF9s
b2dzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIGJh
c2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKIAogICAgICAgICBsb2dzID0gc2VsZi5faG9z
dC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnksIGZpbGVf
ZmlsdGVyPWlzX2NyYXNoX2xvZykKQEAgLTExNyw3ICsxMjAsOSBAQCBjbGFzcyBDcmFzaExvZ3Mo
b2JqZWN0KToKIAogICAgIGRlZiBfZmluZF9hbGxfbG9nc19kYXJ3aW4oc2VsZiwgaW5jbHVkZV9l
cnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRo
LCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoIi5jcmFz
aCIpCisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9o
b3N0LmNhY2hlZF9jcmFzaF9sb2dzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSBvciBiYXNlbmFtZS5l
bmRzd2l0aCgnLmlwcycpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5m
aWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFz
aF9sb2cpCiAgICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6
XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQpAQCAtMTI4LDcgKzEz
Myw3IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBu
ZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3Ro
YW46CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCiAgICAgICAg
ICAgICAgICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0g
c2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAg
ICAgICAgIGxvZ19jb250ZW50cyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmls
ZShzZWxmLl9ob3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkpCiAgICAg
ICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRpbWVzdGFtcCBmcm9tIGxvZyBjb250ZW50cwogICAg
ICAgICAgICAgICAgICAgICBjcmFzaF90aW1lID0gc2VsZi5nZXRfdGltZXN0YW1wX2Zyb21fbG9n
KGxvZ19jb250ZW50cykKICAgICAgICAgICAgICAgICAgICAgaWYgY3Jhc2hfdGltZSBpcyBub3Qg
Tm9uZSBhbmQgbmV3ZXJfdGhhbiBpcyBub3QgTm9uZToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24g
MjE2NzkwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3Jt
aW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOSBAQCBjbGFzcyBQbGF0Zm9ybUlu
Zm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5v
c19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5vc19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfd2luKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5vc19uYW1lID09ICd3aW4nCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJl
dmlzaW9uIDIxNjc5MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBjbGFz
cyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGlzX21hYyhzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFjJwogCisgICAgZGVmIGlzX2lvcyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnaW9zJworCiAgICAgZGVmIGlzX2xpbnV4
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdsaW51eCcKIApJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3Qu
cHkJKHJldmlzaW9uIDIxNjc5MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9zeXN0ZW1ob3N0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0MCwxMyBAQCBjbGFz
cyBTeXN0ZW1Ib3N0KG9iamVjdCk6CiAgICAgICAgIHNlbGYudXNlciA9IHVzZXIuVXNlcigpCiAg
ICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybWluZm8uUGxhdGZvcm1JbmZvKHN5cywgcGxh
dGZvcm0sIHNlbGYuZXhlY3V0aXZlKQogICAgICAgICBzZWxmLndvcmtzcGFjZSA9IHdvcmtzcGFj
ZS5Xb3Jrc3BhY2Uoc2VsZi5maWxlc3lzdGVtLCBzZWxmLmV4ZWN1dGl2ZSkKKyAgICAgICAgc2Vs
Zi5jYWNoZWRfY3Jhc2hfbG9ncyA9IFtdCiAKICAgICBkZWYgY29weV9jdXJyZW50X2Vudmlyb25t
ZW50KHNlbGYpOgogICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQuRW52aXJvbm1lbnQob3MuZW52
aXJvbi5jb3B5KCkpCiAKICAgICBkZWYgbWFrZV9maWxlX2xvY2soc2VsZiwgcGF0aCk6CiAgICAg
ICAgIHJldHVybiBmaWxlX2xvY2suRmlsZUxvY2socGF0aCkKKworICAgIGRlZiBzeW1ib2xpY2F0
ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9j
ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
c3lzdGVtaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAyMTY3OTApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC00OCw5ICs0OCwxMyBAQCBjbGFzcyBNb2NrU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgICAg
ICMgRklYTUU6IFNob3VsZCB0aGlzIHRha2UgcG9pbnRlcnMgdG8gdGhlIGZpbGVzeXN0ZW0gYW5k
IHRoZSBleGVjdXRpdmU/CiAgICAgICAgIHNlbGYud29ya3NwYWNlID0gTW9ja1dvcmtzcGFjZSgp
CisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVmIGNvcHlfY3Vy
cmVudF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50KHsiTU9D
S19FTlZJUk9OX0NPUFkiOiAnMSd9KQogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBh
dGgpOgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9s
aWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHBh
dGgKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CShy
ZXZpc2lvbiAyMTY3OTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTM3
LDYgKzUzNyw3IEBAIGNsYXNzIFJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAg
ICAgICAgICAgIHJldHVybgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19j
cmFzaF9yZXBvcnRfZGFyd2luKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQ1KQogICAgICAgICBob3N0
ID0gTW9ja0hvc3QoKQorICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRv
LWlnbm9yZSddCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcxOV9xdWFk
emVuLmNyYXNoJywgbW9ja19jcmFzaF9yZXBvcnQpCiAgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0
LCBfID0gbG9nZ2luZ19ydW4oWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLXdpdGgtc3RkZXJy
Lmh0bWwnLCAnLS1kdW1wLXJlbmRlci10cmVlJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9
aG9zdCkKICAgICAgICAgZXhwZWN0ZWRfY3Jhc2hfbG9nID0gbW9ja19jcmFzaF9yZXBvcnQKQEAg
LTU0OSw2ICs1NTAsNyBAQCBjbGFzcyBSdW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1U
CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtlX21v
Y2tfY3Jhc2hfcmVwb3J0X2RhcndpbignV2ViUHJvY2VzcycsIDEyMzQ1KQogICAgICAgICBob3N0
ID0gTW9ja0hvc3QoKQorICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRv
LWlnbm9yZSddCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9XZWJQcm9jZXNzXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4u
Y3Jhc2gnLCBtb2NrX2NyYXNoX3JlcG9ydCkKICAgICAgICAgbG9nZ2luZ19ydW4oWydmYWlsdXJl
cy91bmV4cGVjdGVkL3dlYi1wcm9jZXNzLWNyYXNoLXdpdGgtc3RkZXJyLmh0bWwnXSwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3Qu
ZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1
cmVzL3VuZXhwZWN0ZWQvd2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnItY3Jhc2gtbG9nLnR4
dCcpLCBtb2NrX2NyYXNoX3JlcG9ydCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNp
b24gMjE2NzkwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxNyBAQCBjbGFz
cyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5KQogCiAgICAgICAgIHNl
bGYuX3BvcnQuc2V0dXBfdGVzdF9ydW4oc2VsZi5fb3B0aW9ucy5kZXZpY2VfY2xhc3MpCisKKyAg
ICAgICAgIyBDYWNoZSBjcmFzaCBsb2dzIGFscmVhZHkgb24gaG9zdC4KKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgY3Jhc2hfbG9nX2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQucGF0aF90b19jcmFz
aF9sb2dzKCkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5fb3B0aW9ucy5jaGls
ZF9wcm9jZXNzZXMpOgorICAgICAgICAgICAgdGFyZ2V0X2hvc3QgPSBzZWxmLl9wb3J0LnRhcmdl
dF9ob3N0KGkpCisgICAgICAgICAgICBpZiBub3QgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xv
Z3M6CisgICAgICAgICAgICAgICAgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSB0YXJn
ZXRfaG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKGNyYXNoX2xvZ19kaXJlY3RvcnkpCisKICAg
ICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjE2NzkwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNTAsNyArMTM1
MCw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNl
bGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Cisg
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3Ig
Jzx1bmtub3duIHByb2Nlc3MgbmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8
dW5rbm93bj4nKQogICAgICAgICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+Jyku
ZGVjb2RlKCd1dGY4JywgJ3JlcGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjE2NzkwKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE0ICsxMTAs
MTQgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBjcmFzaF9sb2cgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAgICBy
ZXR1cm4gY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJf
dGhhbj1uZXdlcl90aGFuKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9u
ZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1l
LCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2Zu
PU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMg
dGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBh
bmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBv
ZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KICAgICAgICAgdGltZV9mbiA9IHRpbWVf
Zm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVl
cAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dz
KHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFz
aF9sb2dzKCkpCiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQogICAgICAgICBkZWFkbGluZSA9IG5v
dyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKICAgICAg
ICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTY3OTApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0
Zm9ybV9kZXZpY2UpOgogICAgICAgICBzZWxmLnBsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2Rl
dmljZQogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYu
Y2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVmIGxpc3RlbmluZ19wb3J0KHNlbGYpOgog
ICAgICAgICBpZiBub3Qgc2VsZi5saXN0ZW5pbmdfc29ja2V0OgpAQCAtNjMsNiArNjQsMTEgQEAg
Y2xhc3MgRGV2aWNlKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29ja2V0ID0g
Tm9uZQogCisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0
aCk6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9kZXZpY2UsICdzeW1ib2xpY2F0
ZV9jcmFzaF9sb2dfaWZfbmVlZGVkJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9y
bV9kZXZpY2Uuc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChwYXRoKQorICAgICAgICBy
ZXR1cm4gcGF0aAorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTY3OTApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyAr
MjQxLDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1z
ZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBpZCkKIAogICAgIGRl
ZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vz
c19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisg
ICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJv
Y2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4s
IHRhcmdldF9ob3N0PXNlbGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBw
ZXIoc2VsZik6CiAgICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVy
IHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFs
Z3JpbmRfdGVzdHMucHkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlz
aW9uIDIxNjc5MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtp
bmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRl
ZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIHN1cGVy
KEd0a1BvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2
ZXJfY2xhc3MoKS5jaGVja19kcml2ZXIoc2VsZikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dl
dF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwg
dGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyIgaWYg
bmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExv
Z0dlbmVyYXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYu
X3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CShyZXZpc2lvbiAy
MTY3OTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkucG9ydC5j
b25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBv
cnQgSU9TUG9ydAogCkBAIC02NywxNiArNjgsMzMgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQ
b3J0KToKICAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3Zl
cnNpb25fbnVtYmVyCiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAotICAgICMgRklYTUU6IFRo
ZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+
LgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gYXBwbGVfYWRk
aXRpb25zKCkuaW9zX2NyYXNoX2xvZ19wYXRoKCkKKworICAgIGRlZiBfbG9va19mb3JfYWxsX2Ny
YXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3Qg
PSB7fQorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJl
cl9tYXAoKToKKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhkZXZpY2UsIHNlbGYu
cGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hf
bG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90
aGFuKSkKKyAgICAgICAgcmV0dXJuIGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25l
LCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6Cisg
ICAgICAgIGlmIHRhcmdldF9ob3N0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0Rldmlj
ZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xv
Zz13YWl0X2Zvcl9sb2csIHRhcmdldF9ob3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2Ug
bmVlZCB0byBzZWFyY2ggZXZlcnkgZGV2aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4K
KyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFw
KCk6CisgICAgICAgICAgICBzdGRlcnJfb3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBv
cnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1G
YWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0
ZGVyciwgTm9uZSkKIAorICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0
aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Mo
c2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRl
ZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRf
dGltZSk6Ci0gICAgICAgIHJldHVybiB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVz
KHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1
cm4ge30KIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNjc5MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
MCArMzcsMTIgQEAgY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdAogICAg
IGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0ZW0oKSkKIAot
ICAgICMgRklYTUU6IFVwZGF0ZSB0ZXN0cyB3aGVuIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4g
aXMgY29tcGxldGVkLgogICAgIGRlZiB0ZXN0X2NyYXNobG9nX3BhdGgoc2VsZik6Ci0gICAgICAg
IHBhc3MKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHBvcnQucGF0
aF90b19jcmFzaF9sb2dzKCkKIAorICAgICMgRklYTUU6IFVwZGF0ZSB0ZXN0cyB3aGVuIDxyZGFy
Oi8vcHJvYmxlbS8zMDQ5Nzk5MT4gaXMgY29tcGxldGVkLgogICAgIGRlZiB0ZXN0X3NwaW5kdW1w
KHNlbGYpOgogICAgICAgICBwYXNzCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5w
eQkocmV2aXNpb24gMjE2NzkwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQ
b3J0KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVl
cF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwg
c2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAg
ICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQg
YXBwZWFycyB0aGUgdGltZQogICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5
IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAg
IyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgpAQCAtMzgwLDcgKzM4MCw3
IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4g
b3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAog
ICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNl
bGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9ncyA9
IENyYXNoTG9ncyh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9s
b2dzKCkpCiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQogICAgICAgICAjIEZJWE1FOiBkZWxldGUg
dGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4uLgogICAgICAgICBf
bG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIo
cGlkKSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkJKHJldmlzaW9uIDIxNjc5
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDYgKzc0LDYgQEAgY2xhc3MgV1BFUG9ydChQb3J0KToKICAgICBkZWYgX3BhdGhfdG9f
aW1hZ2VfZGlmZihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWx0X2V4ZWN1dGFibGVz
X3BhdGgoJ0ltYWdlRGlmZicpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9n
KHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0
PU5vbmUpOgogICAgICAgICBuYW1lID0gIldQRVdlYlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlBy
b2Nlc3MiIGVsc2UgbmFtZQogICAgICAgICByZXR1cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFt
ZSwgcGlkLCBuZXdlcl90aGFuLCBzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZl
cikuZ2VuZXJhdGVfY3Jhc2hfbG9nKHN0ZG91dCwgc3RkZXJyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310542</attachid>
            <date>2017-05-18 13:14:57 -0700</date>
            <delta_ts>2017-06-01 11:15:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170518131456.patch</filename>
            <type>text/plain</type>
            <size>23349</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzAwNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYzIEBACisyMDE3LTA1LTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90
ZW50aWFsIHBsYXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0
by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQg
aU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVjaworICAgICAgICBjYWNoZWRfY3Jhc2hsb2dzIGZv
ciBlZmZpY2llbmN5IGFuZCBzeW1ib2xpY2F0ZSB0aGUgY3Jhc2hsb2cgYmVmb3JlIHBhcnNpbmcg
aXQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKTpEaXR0by4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5Ogor
ICAgICAgICAoUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1v
Y2tQbGF0Zm9ybUluZm8uaXNfaW9zKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0Ll9faW5p
dF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAgKFN5c3Rl
bUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IFRoZSBzeW1ib2xpY2F0ZWQg
Y3Jhc2ggbG9nIGZvciBtb3N0IHN5c3RlbXMKKyAgICAgICAgaXMganVzdCB0aGUgY3Jhc2hsb2cs
IHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weTogRGl0dG8uCisgICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAg
ICAgIChNYW5hZ2VyLl9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBjdXJyZW50bHkgb24g
dGhlIHRhcmdldCBob3N0cyBiZWZvcmUgcnVubmluZyB0ZXN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eToKKyAgICAgICAgKFJ1blRlc3QudGVzdF9jcmFzaF9sb2cpOiBJbml0aWFsaXplIGNhY2hlZF9j
cmFzaF9sb2dzIGJlZm9yZSBydW5uaW5nIHNvIHRoYXQgdGhlIGNyYXNoCisgICAgICAgIGxvZ3Mg
d2UncmUgdGVzdGluZyBhcmUgbm90IGlnbm9yZWQuCisgICAgICAgIChSdW5UZXN0LnRlc3Rfd2Vi
X3Byb2Nlc3NfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25h
bCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9nZXRfY3Jhc2hf
bG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHk6CisgICAgICAgIChEZXZp
Y2UuX19pbml0X18pOiBJbml0aWFsaXplIGNhY2hlZF9jcmFzaF9sb2dzIGFycmF5LgorICAgICAg
ICAoRGV2aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBJZiB0aGUgcGxhdGZv
cm0gZGV2aWNlIGhhcyBhIGZ1bmN0aW9uIHdpdGggdGhpcworICAgICAgICBuYW1lLCBjYWxsIGl0
LiBPdGhlcndpc2UsIGFzc3VtZSB0aGUgY3Jhc2ggbG9nIGlzIGFscmVhZHkgc3ltYm9saWNhdGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChE
cml2ZXIuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0
dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToK
KyAgICAgICAgKEd0a1BvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBo
b3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hf
bG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25zIGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dz
LgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9n
X2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQgZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBs
b2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFNlYXJjaCB0aGUg
c3BlY2lmaWVkIHRhcmdldCBob3N0IGZvciBhIGNyYXNoIGxvZworICAgICAgICBpZiBhIHRhcmdl
dCBob3N0IGlzIHNwZWNpZmllZC4gRWxzZSwgc2VhcmNoIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBm
b3IgdGhlIHNwZWNpZmllZAorICAgICAgICBjcmFzaC1sb2cuCisgICAgICAgIChJT1NEZXZpY2VQ
b3J0Lmxvb2tfZm9yX25ld19jcmFzaF9sb2dzKTogRGVsZXRlZCwgdXNlIERhcndpbiBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0
dGVzdC5weToKKyAgICAgICAgKElPU0RldmljZVRlc3QudGVzdF9jcmFzaGxvZ19wYXRoKTogV2l0
aG91dCBhcHBsZV9hZGRpdGlvbnMsIHBhdGhfdG9fY3Jhc2hfbG9ncyBzaG91bGQgcmFpc2UKKyAg
ICAgICAgYW4gZXhjZXB0aW9uLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4u
cHk6CisgICAgICAgIChXaW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJn
ZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC93cGUucHk6CisgICAgICAgIChXUEVQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBv
cHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorCiAyMDE3LTA1LTE3
ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIyMTY5NTUuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHJldmlzaW9uIDIxNzAwNikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
LWltcG9ydCBjb2RlY3MKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHJlCiAKQEAgLTQyLDIwICs0
MSwyMiBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgc2VsZi5fY3Jhc2hfbG9n
X2RpcmVjdG9yeSA9IGNyYXNoX2xvZ19kaXJlY3RvcnkKIAogICAgIGRlZiBmaW5kX25ld2VzdF9s
b2coc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQ9Tm9uZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5l
d2VyX3RoYW49Tm9uZSk6Ci0gICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCk6
CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCkgb3Igc2VsZi5faG9zdC5w
bGF0Zm9ybS5pc19pb3MoKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9s
b2dfZGFyd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikK
ICAgICAgICAgZWxpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ193aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1
ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGZp
bmRfYWxsX2xvZ3Moc2VsZiwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSk6
Ci0gICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgIGlmIHNl
bGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCkgb3Igc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19pb3Mo
KToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbF9sb2dzX2RhcndpbihpbmNsdWRl
X2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZmlu
ZF9uZXdlc3RfbG9nX2RhcndpbihzZWxmLCBwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJv
cnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBi
YXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNz
X25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAgICAg
IGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2hvc3QuY2FjaGVkX2NyYXNo
X2xvZ3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4g
KGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgJ18nKSBhbmQgKGJhc2VuYW1lLmVu
ZHN3aXRoKCcuY3Jhc2gnKSkgb3IgKHByb2Nlc3NfbmFtZSBpbiBiYXNlbmFtZSBhbmQgYmFzZW5h
bWUuZW5kc3dpdGgoJy5pcHMnKSkpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1p
c19jcmFzaF9sb2cpCiAgICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHInXlBy
b2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQpAQCAtNjMs
NyArNjQsNyBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgZm9yIHBhdGggaW4g
cmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAg
ICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkg
PiBuZXdlcl90aGFuOgotICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5faG9zdC5maWxlc3lz
dGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9o
b3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkKICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xuJyldKQog
ICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFt
ZScpID09IHByb2Nlc3NfbmFtZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgn
cGlkJykpID09IHBpZCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsg
ZgpAQCAtODAsNiArODEsOCBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKIAogICAgIGRlZiBf
ZmluZF9uZXdlc3RfbG9nX3dpbihzZWxmLCBwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJv
cnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBi
YXNlbmFtZSk6CisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBz
ZWxmLl9ob3N0LmNhY2hlZF9jcmFzaF9sb2dzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQogICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKIAog
ICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2Ny
YXNoX2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKQEAgLTExNyw3ICsx
MjAsOSBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKIAogICAgIGRlZiBfZmluZF9hbGxfbG9n
c19kYXJ3aW4oc2VsZiwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYg
aXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4g
YmFzZW5hbWUuZW5kc3dpdGgoIi5jcmFzaCIpCisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBh
dGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9ob3N0LmNhY2hlZF9jcmFzaF9sb2dzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRo
KCcuY3Jhc2gnKSBvciBiYXNlbmFtZS5lbmRzd2l0aCgnLmlwcycpCiAKICAgICAgICAgbG9ncyA9
IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0
b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCiAgICAgICAgIGZpcnN0X2xpbmVfcmVnZXgg
PSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlk
PlxkKylcXSQnKQpAQCAtMTI4LDcgKzEzMyw3IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgog
ICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3Rl
bS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9u
YW1lID0gIlVua25vd24iCiAgICAgICAgICAgICAgICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAg
ICAgICAgICAgbG9nX2NvbnRlbnRzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9m
aWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGxvZ19jb250ZW50cyA9IHNlbGYuX2hvc3Qu
c3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChwYXRoKQogICAgICAgICAgICAgICAgICAg
ICAjIFZlcmlmeSB0aW1lc3RhbXAgZnJvbSBsb2cgY29udGVudHMKICAgICAgICAgICAgICAgICAg
ICAgY3Jhc2hfdGltZSA9IHNlbGYuZ2V0X3RpbWVzdGFtcF9mcm9tX2xvZyhsb2dfY29udGVudHMp
CiAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgaXMgbm90IE5vbmUgYW5kIG5ld2Vy
X3RoYW4gaXMgbm90IE5vbmU6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vcGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIxNzAwNikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDkgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAg
ICAgZGVmIGlzX21hYyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFj
JwogCisgICAgZGVmIGlzX2lvcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9
PSAnaW9zJworCiAgICAgZGVmIGlzX3dpbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3Nf
bmFtZSA9PSAnd2luJwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMTcwMDYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21v
Y2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAgY2xhc3MgTW9ja1BsYXRmb3Jt
SW5mbyhvYmplY3QpOgogICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
Lm9zX25hbWUgPT0gJ21hYycKIAorICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLm9zX25hbWUgPT0gJ2lvcycKKwogICAgIGRlZiBpc19saW51eChzZWxmKToKICAgICAg
ICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbGludXgnCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CShyZXZpc2lvbiAy
MTcwMDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9z
dC5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsMTMgQEAgY2xhc3MgU3lzdGVtSG9zdChv
YmplY3QpOgogICAgICAgICBzZWxmLnVzZXIgPSB1c2VyLlVzZXIoKQogICAgICAgICBzZWxmLnBs
YXRmb3JtID0gcGxhdGZvcm1pbmZvLlBsYXRmb3JtSW5mbyhzeXMsIHBsYXRmb3JtLCBzZWxmLmV4
ZWN1dGl2ZSkKICAgICAgICAgc2VsZi53b3Jrc3BhY2UgPSB3b3Jrc3BhY2UuV29ya3NwYWNlKHNl
bGYuZmlsZXN5c3RlbSwgc2VsZi5leGVjdXRpdmUpCisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNo
X2xvZ3MgPSBbXQogCiAgICAgZGVmIGNvcHlfY3VycmVudF9lbnZpcm9ubWVudChzZWxmKToKICAg
ICAgICAgcmV0dXJuIGVudmlyb25tZW50LkVudmlyb25tZW50KG9zLmVudmlyb24uY29weSgpKQog
CiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gZmls
ZV9sb2NrLkZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lm
X25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFk
X3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3N5c3RlbWhvc3RfbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAyMTcwMDYpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0OCwxMyBAQCBjbGFzcyBNb2NrU3lzdGVtSG9zdChv
YmplY3QpOgogCiAgICAgICAgICMgRklYTUU6IFNob3VsZCB0aGlzIHRha2UgcG9pbnRlcnMgdG8g
dGhlIGZpbGVzeXN0ZW0gYW5kIHRoZSBleGVjdXRpdmU/CiAgICAgICAgIHNlbGYud29ya3NwYWNl
ID0gTW9ja1dvcmtzcGFjZSgpCisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQog
CiAgICAgZGVmIGNvcHlfY3VycmVudF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJu
IEVudmlyb25tZW50KHsiTU9DS19FTlZJUk9OX0NPUFkiOiAnMSd9KQogCiAgICAgZGVmIG1ha2Vf
ZmlsZV9sb2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgp
CisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19p
bnRlZ3JhdGlvbnRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkJKHJldmlzaW9u
IDIxNzAwNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MzcsNiArNTM3
LDcgQEAgY2xhc3MgUnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVAogICAgICAgICAg
ICAgcmV0dXJuCiAgICAgICAgIG1vY2tfY3Jhc2hfcmVwb3J0ID0gbWFrZV9tb2NrX2NyYXNoX3Jl
cG9ydF9kYXJ3aW4oJ0R1bXBSZW5kZXJUcmVlJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2Nr
SG9zdCgpCisgICAgICAgIGhvc3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3Jl
J10KICAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL0R1bXBSZW5kZXJUcmVlXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jh
c2gnLCBtb2NrX2NyYXNoX3JlcG9ydCkKICAgICAgICAgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBs
b2dnaW5nX3J1bihbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcs
ICctLWR1bXAtcmVuZGVyLXRyZWUnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQog
ICAgICAgICBleHBlY3RlZF9jcmFzaF9sb2cgPSBtb2NrX2NyYXNoX3JlcG9ydApAQCAtNTQ5LDYg
KzU1MCw3IEBAIGNsYXNzIFJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAgICAg
ICAgICAgIHJldHVybgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFz
aF9yZXBvcnRfZGFyd2luKCdXZWJQcm9jZXNzJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2Nr
SG9zdCgpCisgICAgICAgIGhvc3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3Jl
J10KICAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL1dlYlByb2Nlc3NfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcs
IG1vY2tfY3Jhc2hfcmVwb3J0KQogICAgICAgICBsb2dnaW5nX3J1bihbJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvd2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCddLCB0ZXN0c19pbmNsdWRl
ZD1UcnVlLCBob3N0PWhvc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lz
dGVtLnJlYWRfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvdW5l
eHBlY3RlZC93ZWItcHJvY2Vzcy1jcmFzaC13aXRoLXN0ZGVyci1jcmFzaC1sb2cudHh0JyksIG1v
Y2tfY3Jhc2hfcmVwb3J0KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbWFuYWdlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CShyZXZpc2lvbiAyMTcw
MDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDE3IEBAIGNsYXNzIE1hbmFn
ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFr
ZV9kaXJlY3Rvcnkoc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkpCiAKICAgICAgICAgc2VsZi5fcG9y
dC5zZXR1cF90ZXN0X3J1bihzZWxmLl9vcHRpb25zLmRldmljZV9jbGFzcykKKworICAgICAgICAj
IENhY2hlIGNyYXNoIGxvZ3MgYWxyZWFkeSBvbiBob3N0LgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBjcmFzaF9sb2dfZGlyZWN0b3J5ID0gc2VsZi5fcG9ydC5wYXRoX3RvX2NyYXNoX2xvZ3Mo
KQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nl
c3Nlcyk6CisgICAgICAgICAgICB0YXJnZXRfaG9zdCA9IHNlbGYuX3BvcnQudGFyZ2V0X2hvc3Qo
aSkKKyAgICAgICAgICAgIGlmIG5vdCB0YXJnZXRfaG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAg
ICAgICAgICAgICAgICB0YXJnZXRfaG9zdC5jYWNoZWRfY3Jhc2hfbG9ncyA9IHRhcmdldF9ob3N0
LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoY3Jhc2hfbG9nX2RpcmVjdG9yeSkKKwogICAgICAgICBy
ZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMTcwMDYpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTM1MCw3ICsxMzUwLDcgQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xv
ZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYg
X2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
biwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWVfc3RyID0gbmFtZSBvciAnPHVua25v
d24gcHJvY2VzcyBuYW1lPicKICAgICAgICAgcGlkX3N0ciA9IHN0cihwaWQgb3IgJzx1bmtub3du
PicpCiAgICAgICAgIHN0ZG91dF9saW5lcyA9IChzdGRvdXQgb3IgJzxlbXB0eT4nKS5kZWNvZGUo
J3V0ZjgnLCAncmVwbGFjZScpLnNwbGl0bGluZXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTcwMDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTQgKzExMCwxNCBAQCBj
bGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9n
cyhzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCiAgICAgICAgIHJldHVybiBj
cmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5l
d2VyX3RoYW4pCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwg
d2FpdF9mb3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhh
dCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGlt
ZQogICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVz
aCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVs
dGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0
aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCiAgICAg
ICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5o
b3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jh
c2hMb2dzKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3Mo
KSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAq
IGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAgICB3aGls
ZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kZXZpY2UucHkJKHJldmlzaW9uIDIxNzAwNikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAg
Y2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtX2Rl
dmljZSk6CiAgICAgICAgIHNlbGYucGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlCiAg
ICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5jYWNoZWRf
Y3Jhc2hfbG9ncyA9IFtdCiAKICAgICBkZWYgbGlzdGVuaW5nX3BvcnQoc2VsZik6CiAgICAgICAg
IGlmIG5vdCBzZWxmLmxpc3RlbmluZ19zb2NrZXQ6CkBAIC02Myw2ICs2NCwxMSBAQCBjbGFzcyBE
ZXZpY2Uob2JqZWN0KToKIAogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCiAK
KyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAg
ICAgICAgaWYgaGFzYXR0cihzZWxmLnBsYXRmb3JtX2RldmljZSwgJ3N5bWJvbGljYXRlX2NyYXNo
X2xvZ19pZl9uZWVkZWQnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2Rldmlj
ZS5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAgICAgIHJldHVybiBw
YXRoCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhlY3V0aXZlKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZpY2UuZXhlY3V0aXZlCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxNzAwNikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGNyYXNoZWRfcGlkPXNlbGYuX2Ny
YXNoZWRfcGlkLCBjcmFzaF9sb2c9Y3Jhc2hfbG9nLCBwaWQ9cGlkKQogCiAgICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUs
IHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbikKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25h
bWUsIHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0
X2hvc3Q9c2VsZi5fdGFyZ2V0X2hvc3QpCiAKICAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihzZWxm
KToKICAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGlt
ZSBpbnN0cnVtZW50YXRpb24sIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90
ZXN0cy5weS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkocmV2aXNpb24gMjE3
MDA2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkod29ya2luZyBjb3B5
KQpAQCAtMjIwLDcgKzIyMCw3IEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgZGVmIGNoZWNr
X3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgogICAgICAgICByZXR1cm4gc3VwZXIoR3RrUG9y
dCwgc2VsZikuY2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0cCkgYW5kIHNlbGYuX2RyaXZlcl9jbGFz
cygpLmNoZWNrX2RyaXZlcihzZWxmKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRf
aG9zdD1Ob25lKToKICAgICAgICAgbmFtZSA9ICJXZWJLaXRXZWJQcm9jZXNzIiBpZiBuYW1lID09
ICJXZWJQcm9jZXNzIiBlbHNlIG5hbWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJh
dG9yKG5hbWUsIHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90
b19kcml2ZXIpLmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikKIApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIxNzAwNikK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBp
bXBvcnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQ
b3J0CiAKQEAgLTY3LDE2ICs2OCwzMyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgog
ICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9u
dW1iZXIKICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQogCi0gICAgIyBGSVhNRTogVGhlc2UgbmVl
ZCBkZXZpY2UgaW1wbGVtZW50YXRpb25zIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAgICAg
ZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgorICAgICAgICBpZiBub3QgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJldHVybiBhcHBsZV9hZGRpdGlvbnMo
KS5pb3NfY3Jhc2hfbG9nX3BhdGgoKQogCisgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9n
c19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgorICAgICAgICBsb2dfbGlzdCA9IHt9Cisg
ICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5fZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgp
OgorICAgICAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgICAgIGxvZ19saXN0LnVwZGF0ZShjcmFzaF9sb2cuZmlu
ZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pKQor
ICAgICAgICByZXR1cm4gbG9nX2xpc3QKKworICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBu
YW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVw
X2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKKyAgICAgICAg
aWYgdGFyZ2V0X2hvc3Q6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoSU9TRGV2aWNlUG9ydCwg
c2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
biwgdGltZV9mbj10aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPXdhaXRf
Zm9yX2xvZywgdGFyZ2V0X2hvc3Q9dGFyZ2V0X2hvc3QpCisKKyAgICAgICAgIyBXZSBuZWVkIHRv
IHNlYXJjaCBldmVyeSBkZXZpY2Ugc2luY2Ugb25lIHdhcyBub3Qgc3BlY2lmaWVkLgorICAgICAg
ICBmb3IgZGV2aWNlIGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAg
ICAgICAgICAgIHN0ZGVycl9vdXQsIGNyYXNobG9nID0gc3VwZXIoSU9TRGV2aWNlUG9ydCwgc2Vs
ZikuX2dldF9jcmFzaF9sb2cobmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwg
dGltZV9mbj10aW1lX2ZuLCBzbGVlcF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPUZhbHNlLCB0
YXJnZXRfaG9zdD1kZXZpY2UpCisgICAgICAgICAgICBpZiBjcmFzaGxvZzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKHN0ZGVyciwgY3Jhc2hsb2cpCisgICAgICAgIHJldHVybiAoc3RkZXJyLCBO
b25lKQorCisgICAgIyBGSVhNRTogVGhlc2UgbmVlZCBkZXZpY2UgaW1wbGVtZW50YXRpb25zIDxy
ZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAgICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBw
cm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKICAgICAgICAgcGFzcwogCi0gICAgZGVmIGxvb2tf
Zm9yX25ld19jcmFzaF9sb2dzKHNlbGYsIGNyYXNoZWRfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToK
LSAgICAgICAgcmV0dXJuIHt9Ci0KICAgICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwg
dW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CiAgICAgICAgIHJldHVybiB7fQog
CkBAIC05MCw5ICsxMDgsNiBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgIGRl
ZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICByZXR1cm4gJ2lvcy1kZXZpY2UnCiAK
LSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1
ZSk6Ci0gICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25lKQotCiAgICAgZGVmIF9jcmVhdGVfZGV2
aWNlcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgogICAgICAgICBpZiBub3QgYXBwbGVfYWRkaXRpb25z
KCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc2VsZi5OT19PTl9ERVZJQ0VfVEVT
VElORykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2
aWNlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTcwMDYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDEyIEBAIGNsYXNzIElPU0RldmljZVRlc3QoaW9zX3Rlc3RjYXNlLklPU1Rlc3QKICAgICBk
ZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdpb3MtZGV2aWNlJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCiAKLSAg
ICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+IGlz
IGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9jcmFzaGxvZ19wYXRoKHNlbGYpOgotICAgICAgICBw
YXNzCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHdpdGggc2VsZi5h
c3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBwb3J0LnBhdGhf
dG9fY3Jhc2hfbG9ncygpCiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjov
L3Byb2JsZW0vMzA0OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9zcGluZHVtcChz
ZWxmKToKICAgICAgICAgcGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJ
KHJldmlzaW9uIDIxNzAwNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9y
dCk6CiAgICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNl
bGYucmVzdWx0c19kaXJlY3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBf
Zm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxm
LCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNs
ZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAg
ICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFw
cGVhcnMgdGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3
cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMg
bG90cyBvZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM4MCw3ICszODAsNyBA
QCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9y
IHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAg
ICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxm
Lmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBD
cmFzaExvZ3ModGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9n
cygpKQogICAgICAgICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAgIyBGSVhNRTogZGVsZXRlIHRo
aXMgYWZ0ZXIgd2UncmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4KICAgICAgICAgX2xv
Zy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBp
ZCkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZpc2lvbiAyMTcwMDYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC03NCw2ICs3NCw2IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVmIF9wYXRoX3RvX2lt
YWdlX2RpZmYoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsdF9leGVjdXRhYmxlc19w
YXRoKCdJbWFnZURpZmYnKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1O
b25lKToKICAgICAgICAgbmFtZSA9ICJXUEVXZWJQcm9jZXNzIiBpZiBuYW1lID09ICJXZWJQcm9j
ZXNzIiBlbHNlIG5hbWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9yKG5hbWUs
IHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19kcml2ZXIp
LmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311732</attachid>
            <date>2017-06-01 11:15:53 -0700</date>
            <delta_ts>2017-06-01 16:03:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170601111552.patch</filename>
            <type>text/plain</type>
            <size>24895</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzYzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY1IEBACisyMDE3LTA1LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90
ZW50aWFsIHBsYXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0
by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQg
aU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVjaworICAgICAgICBjYWNoZWRfY3Jhc2hsb2dzIGZv
ciBlZmZpY2llbmN5IGFuZCBzeW1ib2xpY2F0ZSB0aGUgY3Jhc2hsb2cgYmVmb3JlIHBhcnNpbmcg
aXQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKTpEaXR0by4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5Ogor
ICAgICAgICAoUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1v
Y2tQbGF0Zm9ybUluZm8uaXNfaW9zKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0Ll9faW5p
dF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAgKFN5c3Rl
bUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IFRoZSBzeW1ib2xpY2F0ZWQg
Y3Jhc2ggbG9nIGZvciBtb3N0IHN5c3RlbXMKKyAgICAgICAgaXMganVzdCB0aGUgY3Jhc2hsb2cs
IHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weTogRGl0dG8uCisgICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAg
ICAgIChNYW5hZ2VyLl9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBjdXJyZW50bHkgb24g
dGhlIHRhcmdldCBob3N0cyBiZWZvcmUgcnVubmluZyB0ZXN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5w
eToKKyAgICAgICAgKFJ1blRlc3QudGVzdF9jcmFzaF9sb2cpOiBJbml0aWFsaXplIGNhY2hlZF9j
cmFzaF9sb2dzIGJlZm9yZSBydW5uaW5nIHNvIHRoYXQgdGhlIGNyYXNoCisgICAgICAgIGxvZ3Mg
d2UncmUgdGVzdGluZyBhcmUgbm90IGlnbm9yZWQuCisgICAgICAgIChSdW5UZXN0LnRlc3Rfd2Vi
X3Byb2Nlc3NfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgKE1hbmFnZXIuX3Nl
dF91cF9ydW4pOiBDYWNoZSBjcmFzaCBsb2dzIGFscmVhZHkgb24gdGhlIGhvc3Qgc28gd2UgZG9u
J3QgaGF2ZSB0byByZWFkIHRoZW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jh
c2UucHk6CisgICAgICAgIChQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJn
ZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTog
UGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UuX19p
bml0X18pOiBJbml0aWFsaXplIGNhY2hlZF9jcmFzaF9sb2dzIGFycmF5LgorICAgICAgICAoRGV2
aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBJZiB0aGUgcGxhdGZvcm0gZGV2
aWNlIGhhcyBhIGZ1bmN0aW9uIHdpdGggdGhpcworICAgICAgICBuYW1lLCBjYWxsIGl0LiBPdGhl
cndpc2UsIGFzc3VtZSB0aGUgY3Jhc2ggbG9nIGlzIGFscmVhZHkgc3ltYm9saWNhdGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIu
X2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBj
cmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAg
ICAgKEd0a1BvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdo
ZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6
IENvbnN1bHQgYXBwbGVfYWRkaXRpb25zIGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAg
ICAgICAoSU9TRGV2aWNlUG9ydC5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcik6
IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQgZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBsb2dzLgor
ICAgICAgICAoSU9TRGV2aWNlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFNlYXJjaCB0aGUgc3BlY2lm
aWVkIHRhcmdldCBob3N0IGZvciBhIGNyYXNoIGxvZworICAgICAgICBpZiBhIHRhcmdldCBob3N0
IGlzIHNwZWNpZmllZC4gRWxzZSwgc2VhcmNoIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyBmb3IgdGhl
IHNwZWNpZmllZAorICAgICAgICBjcmFzaC1sb2cuCisgICAgICAgIChJT1NEZXZpY2VQb3J0Lmxv
b2tfZm9yX25ld19jcmFzaF9sb2dzKTogRGVsZXRlZCwgdXNlIERhcndpbiBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5w
eToKKyAgICAgICAgKElPU0RldmljZVRlc3QudGVzdF9jcmFzaGxvZ19wYXRoKTogV2l0aG91dCBh
cHBsZV9hZGRpdGlvbnMsIHBhdGhfdG9fY3Jhc2hfbG9ncyBzaG91bGQgcmFpc2UKKyAgICAgICAg
YW4gZXhjZXB0aW9uLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6Cisg
ICAgICAgIChXaW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9z
dCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC93cGUucHk6CisgICAgICAgIChXUEVQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25h
bCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorCiAyMDE3LTA1LTMxICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgRU5BQkxFX0FQUExF
X1BBWV9ERUxFR0FURSB0byBFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjMgYW5kIGJ1bXAgdGhl
IHN1cHBvcnRlZCB2ZXJzaW9uIG51bWJlcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
Ci1pbXBvcnQgY29kZWNzCiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCByZQogCkBAIC00MiwyMCAr
NDEsMjIgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2NyYXNoX2xv
Z19kaXJlY3RvcnkgPSBjcmFzaF9sb2dfZGlyZWN0b3J5CiAKICAgICBkZWYgZmluZF9uZXdlc3Rf
bG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBu
ZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygp
OgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYuX2hvc3Qu
cGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3Rf
bG9nX2Rhcndpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4p
CiAgICAgICAgIGVsaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNs
dWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBm
aW5kX2FsbF9sb2dzKHNlbGYsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUp
OgotICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBz
ZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9z
KCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGxfbG9nc19kYXJ3aW4oaW5jbHVk
ZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgX2Zp
bmRfbmV3ZXN0X2xvZ19kYXJ3aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwg
YmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vz
c19uYW1lICsgIl8iKSBhbmQgYmFzZW5hbWUuZW5kc3dpdGgoIi5jcmFzaCIpCisgICAgICAgICAg
ICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9ob3N0LmNhY2hlZF9jcmFz
aF9sb2dzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJu
IChiYXNlbmFtZS5zdGFydHN3aXRoKHByb2Nlc3NfbmFtZSArICdfJykgYW5kIChiYXNlbmFtZS5l
bmRzd2l0aCgnLmNyYXNoJykpIG9yIChwcm9jZXNzX25hbWUgaW4gYmFzZW5hbWUgYW5kIGJhc2Vu
YW1lLmVuZHN3aXRoKCcuaXBzJykpKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVz
eXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9
aXNfY3Jhc2hfbG9nKQogICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Q
cm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKQEAgLTYz
LDcgKzY0LDcgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAgICAgICAgIGZvciBwYXRoIGlu
IHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAg
ICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2VsZi5faG9zdC5maWxlc3lzdGVtLm10aW1lKHBhdGgp
ID4gbmV3ZXJfdGhhbjoKLSAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5f
aG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCiAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZWdleC5tYXRjaChmWzA6Zi5maW5kKCdcbicpXSkK
ICAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggYW5kIG1hdGNoLmdyb3VwKCdwcm9jZXNzX25h
bWUnKSA9PSBwcm9jZXNzX25hbWUgYW5kIChwaWQgaXMgTm9uZSBvciBpbnQobWF0Y2guZ3JvdXAo
J3BpZCcpKSA9PSBwaWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycyAr
IGYKQEAgLTgwLDYgKzgxLDggQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBkZWYg
X2ZpbmRfbmV3ZXN0X2xvZ193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwg
YmFzZW5hbWUpOgorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4g
c2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFs
c2UKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5zdGFydHN3aXRoKCJDcmFzaExvZyIpCiAK
ICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9j
cmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCkBAIC0xMTcsNyAr
MTIwLDkgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBkZWYgX2ZpbmRfYWxsX2xv
Z3NfZGFyd2luKHNlbGYsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVm
IGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJu
IGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJw
YXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5lbmRzd2l0
aCgnLmNyYXNoJykgb3IgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKQogCiAgICAgICAgIGxvZ3Mg
PSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVj
dG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQogICAgICAgICBmaXJzdF9saW5lX3JlZ2V4
ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBp
ZD5cZCspXF0kJykKQEAgLTEyOCw3ICsxMzMsNyBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToK
ICAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRf
bmFtZSA9ICJVbmtub3duIgogICAgICAgICAgICAgICAgICAgICBwaWQgPSAwCi0gICAgICAgICAg
ICAgICAgICAgIGxvZ19jb250ZW50cyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRf
ZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBsb2dfY29udGVudHMgPSBzZWxmLl9ob3N0
LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkKICAgICAgICAgICAgICAgICAg
ICAgIyBWZXJpZnkgdGltZXN0YW1wIGZyb20gbG9nIGNvbnRlbnRzCiAgICAgICAgICAgICAgICAg
ICAgIGNyYXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRz
KQogICAgICAgICAgICAgICAgICAgICBpZiBjcmFzaF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdl
cl90aGFuIGlzIG5vdCBOb25lOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw2ICs2Myw5IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgog
ICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21h
YycKIAorICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUg
PT0gJ2lvcycKKwogICAgIGRlZiBpc193aW4oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9z
X25hbWUgPT0gJ3dpbicKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkocmV2aXNpb24gMjE3NjMx
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19t
b2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIGNsYXNzIE1vY2tQbGF0Zm9y
bUluZm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5vc19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5vc19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfbGludXgoc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JwogCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkocmV2aXNpb24g
MjE3NjMxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhv
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDEzIEBAIGNsYXNzIFN5c3RlbUhvc3Qo
b2JqZWN0KToKICAgICAgICAgc2VsZi51c2VyID0gdXNlci5Vc2VyKCkKICAgICAgICAgc2VsZi5w
bGF0Zm9ybSA9IHBsYXRmb3JtaW5mby5QbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgc2VsZi5l
eGVjdXRpdmUpCiAgICAgICAgIHNlbGYud29ya3NwYWNlID0gd29ya3NwYWNlLldvcmtzcGFjZShz
ZWxmLmZpbGVzeXN0ZW0sIHNlbGYuZXhlY3V0aXZlKQorICAgICAgICBzZWxmLmNhY2hlZF9jcmFz
aF9sb2dzID0gW10KIAogICAgIGRlZiBjb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoc2VsZik6CiAg
ICAgICAgIHJldHVybiBlbnZpcm9ubWVudC5FbnZpcm9ubWVudChvcy5lbnZpcm9uLmNvcHkoKSkK
IAogICAgIGRlZiBtYWtlX2ZpbGVfbG9jayhzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIGZp
bGVfbG9jay5GaWxlTG9jayhwYXRoKQorCisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19p
Zl9uZWVkZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVh
ZF90ZXh0X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9zeXN0ZW1ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkocmV2aXNpb24gMjE3NjMxKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTMgQEAgY2xhc3MgTW9ja1N5c3RlbUhvc3Qo
b2JqZWN0KToKIAogICAgICAgICAjIEZJWE1FOiBTaG91bGQgdGhpcyB0YWtlIHBvaW50ZXJzIHRv
IHRoZSBmaWxlc3lzdGVtIGFuZCB0aGUgZXhlY3V0aXZlPwogICAgICAgICBzZWxmLndvcmtzcGFj
ZSA9IE1vY2tXb3Jrc3BhY2UoKQorICAgICAgICBzZWxmLmNhY2hlZF9jcmFzaF9sb2dzID0gW10K
IAogICAgIGRlZiBjb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoc2VsZik6CiAgICAgICAgIHJldHVy
biBFbnZpcm9ubWVudCh7Ik1PQ0tfRU5WSVJPTl9DT1BZIjogJzEnfSkKIAogICAgIGRlZiBtYWtl
X2ZpbGVfbG9jayhzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIE1vY2tGaWxlTG9jayhwYXRo
KQorCisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6
CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNf
aW50ZWdyYXRpb250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lv
biAyMTc2MzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTM3LDYgKzUz
Nyw3IEBAIGNsYXNzIFJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAgICAgICAg
ICAgIHJldHVybgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9y
ZXBvcnRfZGFyd2luKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQ1KQogICAgICAgICBob3N0ID0gTW9j
a0hvc3QoKQorICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRvLWlnbm9y
ZSddCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0
LXRlc3QtcmVzdWx0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcxOV9xdWFkemVuLmNy
YXNoJywgbW9ja19jcmFzaF9yZXBvcnQpCiAgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0g
bG9nZ2luZ19ydW4oWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLXdpdGgtc3RkZXJyLmh0bWwn
LCAnLS1kdW1wLXJlbmRlci10cmVlJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkK
ICAgICAgICAgZXhwZWN0ZWRfY3Jhc2hfbG9nID0gbW9ja19jcmFzaF9yZXBvcnQKQEAgLTU0OSw2
ICs1NTAsNyBAQCBjbGFzcyBSdW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UCiAgICAg
ICAgICAgICByZXR1cm4KICAgICAgICAgbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jh
c2hfcmVwb3J0X2RhcndpbignV2ViUHJvY2VzcycsIDEyMzQ1KQogICAgICAgICBob3N0ID0gTW9j
a0hvc3QoKQorICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRvLWlnbm9y
ZSddCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0
LXRlc3QtcmVzdWx0cy9XZWJQcm9jZXNzXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gn
LCBtb2NrX2NyYXNoX3JlcG9ydCkKICAgICAgICAgbG9nZ2luZ19ydW4oWydmYWlsdXJlcy91bmV4
cGVjdGVkL3dlYi1wcm9jZXNzLWNyYXNoLXdpdGgtc3RkZXJyLmh0bWwnXSwgdGVzdHNfaW5jbHVk
ZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QuZmlsZXN5
c3RlbS5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL3Vu
ZXhwZWN0ZWQvd2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnItY3Jhc2gtbG9nLnR4dCcpLCBt
b2NrX2NyYXNoX3JlcG9ydCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gMjE3
NjMxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxNyBAQCBjbGFzcyBNYW5h
Z2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLm1heWJlX21h
a2VfZGlyZWN0b3J5KHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5KQogCiAgICAgICAgIHNlbGYuX3Bv
cnQuc2V0dXBfdGVzdF9ydW4oc2VsZi5fb3B0aW9ucy5kZXZpY2VfY2xhc3MpCisKKyAgICAgICAg
IyBDYWNoZSBjcmFzaCBsb2dzIGFscmVhZHkgb24gaG9zdC4KKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgY3Jhc2hfbG9nX2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQucGF0aF90b19jcmFzaF9sb2dz
KCkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9j
ZXNzZXMpOgorICAgICAgICAgICAgdGFyZ2V0X2hvc3QgPSBzZWxmLl9wb3J0LnRhcmdldF9ob3N0
KGkpCisgICAgICAgICAgICBpZiBub3QgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3M6Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSB0YXJnZXRfaG9z
dC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKGNyYXNoX2xvZ19kaXJlY3RvcnkpCisKICAgICAgICAg
cmV0dXJuIFRydWUKIAogICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjE3NjMxKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNjQsNyArMTM2NCw3IEBA
IGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgog
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgX2dldF9jcmFzaF9s
b2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVm
IF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3Ro
YW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3IgJzx1bmtu
b3duIHByb2Nlc3MgbmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8dW5rbm93
bj4nKQogICAgICAgICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+JykuZGVjb2Rl
KCd1dGY4JywgJ3JlcGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjE3NjMxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTEwLDE0ICsxMTAsMTQgQEAg
Y2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExv
Z3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAgICByZXR1cm4g
Y3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1u
ZXdlcl90aGFuKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2Fp
dF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUs
IHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBOb3RlIHRo
YXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRp
bWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1
c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBvZiBzaW11
bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3Ig
dGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAogICAg
ICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYu
aG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENy
YXNoTG9ncyh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dz
KCkpCiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQogICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUg
KiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKICAgICAgICAgd2hp
bGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAyMTc2MzEp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsOSArMTM3LDUgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3Rj
YXNlLlBvcnRUZXN0QwogICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2Vs
ZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0pCiAKICAgICBkZWYgdGVz
dF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAjIERhcndpbiBjcmFzaCBsb2dzIGFyZSB0
ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNo
LgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAgICAgICAgICB0aW1lcyA9IFswLCAy
MCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKICAgICAgICAg
cG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxmLnBvcnRfbmFtZSkKICAgICAgICAg
cG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0
aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBAIGNsYXNz
IERldmljZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybV9kZXZpY2Up
OgogICAgICAgICBzZWxmLnBsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZQogICAgICAg
ICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNo
X2xvZ3MgPSBbXQogCiAgICAgZGVmIGxpc3RlbmluZ19wb3J0KHNlbGYpOgogICAgICAgICBpZiBu
b3Qgc2VsZi5saXN0ZW5pbmdfc29ja2V0OgpAQCAtNjMsNiArNjQsMTEgQEAgY2xhc3MgRGV2aWNl
KG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29ja2V0ID0gTm9uZQogCisgICAg
ZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6CisgICAgICAg
IGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9kZXZpY2UsICdzeW1ib2xpY2F0ZV9jcmFzaF9sb2df
aWZfbmVlZGVkJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZpY2Uuc3lt
Ym9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChwYXRoKQorICAgICAgICByZXR1cm4gcGF0aAor
CiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgY2xh
c3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVk
X3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBpZCkKIAogICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxm
Ll9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisgICAgICAgIHJldHVy
biBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBz
ZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0
PXNlbGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoc2VsZik6CiAg
ICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5z
dHJ1bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfdGVzdHMu
cHkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIxNzYzMSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29weSkKQEAg
LTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRlZiBjaGVja19zeXNf
ZGVwcyhzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIHN1cGVyKEd0a1BvcnQsIHNl
bGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2ZXJfY2xhc3MoKS5j
aGVja19kcml2ZXIoc2VsZikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9
Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAiV2Vi
UHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRvcihu
YW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9fZHJp
dmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCiAKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
bWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jh
c2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0
IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAog
CkBAIC02NywxNiArNjgsMzMgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICAg
ICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVy
CiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAotICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2
aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBw
YXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25zKCkuaW9z
X2NyYXNoX2xvZ19wYXRoKCkKIAorICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5f
bG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAg
ICBmb3IgZGV2aWNlIGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAg
ICAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhkZXZpY2UsIHNlbGYucGF0aF90b19jcmFz
aF9sb2dzKCkpCisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxs
X2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAg
ICAgcmV0dXJuIGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1O
b25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRh
cmdldF9ob3N0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYp
Ll9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRp
bWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz13YWl0X2Zvcl9s
b2csIHRhcmdldF9ob3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2UgbmVlZCB0byBzZWFy
Y2ggZXZlcnkgZGV2aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgZm9y
IGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAg
ICAgICBzdGRlcnJfb3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9n
ZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0
X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAg
cmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkK
KworICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjov
L3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vz
c19uYW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29rX2Zvcl9u
ZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAg
ICAgIHJldHVybiB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVz
cG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30KIApAQCAt
OTAsOSArMTA4LDYgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBkZWYgb3Bl
cmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwogCi0gICAg
ZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgot
ICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBfY3JlYXRlX2RldmljZXMo
c2VsZiwgZGV2aWNlX2NsYXNzKToKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgog
ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91
bml0dGVzdC5weQkocmV2aXNpb24gMjE3NjMxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDgg
QEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHRpbWUK
KwogZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElPU0RldmljZVBvcnQKIGZy
b20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAgLTM3LDEwICszOSwxNyBA
QCBjbGFzcyBJT1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAgICAgZGVmIHRlc3Rf
b3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRl
dmljZScsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgIyBGSVhN
RTogVXBkYXRlIHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0
ZWQuCiAgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAgICAgICAgcGFzcworICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFp
c2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgcG9ydC5wYXRoX3RvX2NyYXNo
X2xvZ3MoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKKyAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxmLnBvcnRfbmFtZSkKKyAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcG9ydC5fZ2V0
X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUo
KSwgd2FpdF9mb3JfbG9nPUZhbHNlKQogCisgICAgIyBGSVhNRTogVXBkYXRlIHRlc3RzIHdoZW4g
PHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVmIHRlc3Rfc3Bp
bmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CShyZXZpc2lvbiAyMTc2MzEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgY2xhc3MgV2luUG9ydChB
cHBsZVBvcnQpOgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUs
IHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICBkZWYgX2dldF9jcmFzaF9s
b2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1O
b25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6
CiAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0LCBzaW5j
ZSBpdCBhcHBlYXJzIHRoZSB0aW1lCiAgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMgdG8gYWN0
dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFyZQogICAg
ICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCkBAIC0zODAsNyAr
MzgwLDcgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICB0aW1lX2ZuID0gdGlt
ZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNs
ZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExv
Z3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9s
b2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2Ny
YXNoX2xvZ3MoKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgICMgRklYTUU6IGRl
bGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCiAgICAg
ICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUs
IHN0cihwaWQpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkocmV2aXNpb24g
MjE3NjMxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkod29ya2luZyBj
b3B5KQpAQCAtNzQsNiArNzQsNiBAQCBjbGFzcyBXUEVQb3J0KFBvcnQpOgogICAgIGRlZiBfcGF0
aF90b19pbWFnZV9kaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbHRfZXhlY3V0
YWJsZXNfcGF0aCgnSW1hZ2VEaWZmJykKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBu
YW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFz
aF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0
X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV1BFV2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAi
V2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRv
cihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9f
ZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311771</attachid>
            <date>2017-06-01 16:03:41 -0700</date>
            <delta_ts>2017-06-02 10:12:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170601160340.patch</filename>
            <type>text/plain</type>
            <size>27840</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzY4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY4IEBACisyMDE3LTA1LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90
ZW50aWFsIHBsYXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0
by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQg
aU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVjaworICAgICAgICBjYWNoZWRfY3Jhc2hsb2dzIGZv
ciBlZmZpY2llbmN5IGFuZCBzeW1ib2xpY2F0ZSB0aGUgY3Jhc2hsb2cgYmVmb3JlIHBhcnNpbmcg
aXQuIENvbnRpbnVlIHNlYXJjaGluZworICAgICAgICBmb3IgcHJvY2VzcyBJRCB1bnRpbCBpdCBp
cyBmb3VuZCBpbiBsb2cuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2lu
KTpEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaGxvZ3MgbWF5IG5vdCBoYXZlIHRoZWlyIHByb2Nlc3Mgb24gdGhlIGZpcnN0IGxpbmUu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5w
eToKKyAgICAgICAgKFBsYXRmb3JtSW5mby5pc19pb3MpOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHk6CisgICAgICAg
IChNb2NrUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5OgorICAgICAgICAoU3lzdGVtSG9zdC5f
X2luaXRfXyk6IEluaXRpYWxpemUgY2FjaGVkX2NyYXNoX2xvZ3MgYXJyYXkuCisgICAgICAgIChT
eXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBUaGUgc3ltYm9saWNh
dGVkIGNyYXNoIGxvZyBmb3IgbW9zdCBzeXN0ZW1zCisgICAgICAgIGlzIGp1c3QgdGhlIGNyYXNo
bG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHk6IERpdHRvLgorICAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5Ogor
ICAgICAgICAoTWFuYWdlci5fc2V0X3VwX3J1bik6IENhY2hlIGNyYXNoIGxvZ3MgY3VycmVudGx5
IG9uIHRoZSB0YXJnZXQgaG9zdHMgYmVmb3JlIHJ1bm5pbmcgdGVzdHMuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRl
c3QucHk6CisgICAgICAgIChSdW5UZXN0LnRlc3RfY3Jhc2hfbG9nKTogSW5pdGlhbGl6ZSBjYWNo
ZWRfY3Jhc2hfbG9ncyBiZWZvcmUgcnVubmluZyBzbyB0aGF0IHRoZSBjcmFzaAorICAgICAgICBs
b2dzIHdlJ3JlIHRlc3RpbmcgYXJlIG5vdCBpZ25vcmVkLgorICAgICAgICAoUnVuVGVzdC50ZXN0
X3dlYl9wcm9jZXNzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAgICAgIChNYW5hZ2Vy
Ll9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBob3N0IHNvIHdl
IGRvbid0IGhhdmUgdG8gcmVhZCB0aGVtLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwg
dGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNoX2xv
Zyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNl
Ll9faW5pdF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAg
KERldmljZS5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKTogSWYgdGhlIHBsYXRmb3Jt
IGRldmljZSBoYXMgYSBmdW5jdGlvbiB3aXRoIHRoaXMKKyAgICAgICAgbmFtZSwgY2FsbCBpdC4g
T3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGNyYXNoIGxvZyBpcyBhbHJlYWR5IHN5bWJvbGljYXRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJp
dmVyLl9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRp
bmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHk6Cisg
ICAgICAgIChHdGtQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9z
dCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfZGV2aWNlLnB5OgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5wYXRoX3RvX2NyYXNoX2xv
Z3MpOiBDb25zdWx0IGFwcGxlX2FkZGl0aW9ucyBmb3IgdGhlIHBhdGggdG8gY3Jhc2ggbG9ncy4K
KyAgICAgICAgKElPU0RldmljZVBvcnQuX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19k
aXIpOiBTZWFyY2ggZXZlcnkgY29ubmVjdGVkIGRldmljZSBmb3IKKyAgICAgICAgY3Jhc2ggbG9n
cy4KKyAgICAgICAgKElPU0RldmljZVBvcnQuX2dldF9jcmFzaF9sb2cpOiBTZWFyY2ggdGhlIHNw
ZWNpZmllZCB0YXJnZXQgaG9zdCBmb3IgYSBjcmFzaCBsb2cKKyAgICAgICAgaWYgYSB0YXJnZXQg
aG9zdCBpcyBzcGVjaWZpZWQuIEVsc2UsIHNlYXJjaCBhbGwgY29ubmVjdGVkIGRldmljZXMgZm9y
IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgY3Jhc2gtbG9nLgorICAgICAgICAoSU9TRGV2aWNlUG9y
dC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0ZWQsIHVzZSBEYXJ3aW4gaW1wbGVtZW50
YXRpb24uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRl
c3QucHk6CisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfY3Jhc2hsb2dfcGF0aCk6IFdpdGhv
dXQgYXBwbGVfYWRkaXRpb25zLCBwYXRoX3RvX2NyYXNoX2xvZ3Mgc2hvdWxkIHJhaXNlCisgICAg
ICAgIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5
OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0
IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BFUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0
aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKwogMjAxNy0wNi0wMSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gQnVtcCBHVEsrIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluIGpoYnVpbGQKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Ny
YXNobG9ncy5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGRhdGV0aW1lCiBpbXBv
cnQgcmUKIApAQCAtNDIsMjkgKzQxLDM0IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAg
ICAgICBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5ID0gY3Jhc2hfbG9nX2RpcmVjdG9yeQogCiAg
ICAgZGVmIGZpbmRfbmV3ZXN0X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUsIHBpZD1Ob25lLCBpbmNs
dWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9z
dC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19t
YWMoKSBvciBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVf
ZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICBlbGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNf
d2luKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX3dpbihwcm9j
ZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVy
biBOb25lCiAKICAgICBkZWYgZmluZF9hbGxfbG9ncyhzZWxmLCBpbmNsdWRlX2Vycm9ycz1GYWxz
ZSwgbmV3ZXJfdGhhbj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19t
YWMoKToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9o
b3N0LnBsYXRmb3JtLmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxs
X2xvZ3NfZGFyd2luKGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4g
Tm9uZQogCiAgICAgZGVmIF9maW5kX25ld2VzdF9sb2dfZGFyd2luKHNlbGYsIHByb2Nlc3NfbmFt
ZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19jcmFz
aF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBiYXNlbmFt
ZS5zdGFydHN3aXRoKHByb2Nlc3NfbmFtZSArICJfIikgYW5kIGJhc2VuYW1lLmVuZHN3aXRoKCIu
Y3Jhc2giKQorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2Vs
Zi5faG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgICAgIHJldHVybiAoYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAn
XycpIGFuZCAoYmFzZW5hbWUuZW5kc3dpdGgoJy5jcmFzaCcpKSBvciAocHJvY2Vzc19uYW1lIGlu
IGJhc2VuYW1lIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgnLmlwcycpKSkKIAogICAgICAgICBsb2dz
ID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJl
Y3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKLSAgICAgICAgZmlyc3RfbGluZV9yZWdl
eCA9IHJlLmNvbXBpbGUocideUHJvY2VzczpccysoP1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxw
aWQ+XGQrKVxdJCcpCisgICAgICAgIHByb2Nlc3NfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nl
c3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQogICAgICAgICBl
cnJvcnMgPSAnJwogICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgog
ICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNl
bGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46Ci0gICAgICAgICAg
ICAgICAgICAgIGYgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkK
LSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpm
LmZpbmQoJ1xuJyldKQorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5faG9zdC5zeW1ib2xp
Y2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGZvciBs
aW5lIGluIGYuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBw
cm9jZXNzX3JlZ2V4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXRj
aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAg
ICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHByb2Nlc3NfbmFt
ZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZCk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgZgogICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3IsIGU6CkBAIC04MCw2ICs4NCw4IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3Qp
OgogCiAgICAgZGVmIF9maW5kX25ld2VzdF9sb2dfd2luKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlk
LCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2co
ZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKKyAgICAgICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwg
YmFzZW5hbWUpIGluIHNlbGYuX2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3M6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aCgi
Q3Jhc2hMb2ciKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNf
dW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9n
KQpAQCAtMTE3LDEwICsxMjMsMTIgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBk
ZWYgX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKHNlbGYsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
KToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAg
ICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQorICAgICAgICAgICAg
aWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hf
bG9nczoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBi
YXNlbmFtZS5lbmRzd2l0aCgnLmNyYXNoJykgb3IgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKQog
CiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5f
Y3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQotICAgICAgICBm
aXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25h
bWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKKyAgICAgICAgcHJvY2Vzc19yZWdleCA9IHJlLmNv
bXBpbGUocideUHJvY2VzczpccysoP1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxd
JCcpCiAgICAgICAgIGVycm9ycyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSB7fQogICAgICAg
ICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgpAQCAtMTI4LDcgKzEzNiw3IEBA
IGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90
aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46CiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCiAgICAgICAgICAgICAg
ICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0gc2VsZi5f
aG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAg
IGxvZ19jb250ZW50cyA9IHNlbGYuX2hvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRl
ZChwYXRoKQogICAgICAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aW1lc3RhbXAgZnJvbSBsb2cg
Y29udGVudHMKICAgICAgICAgICAgICAgICAgICAgY3Jhc2hfdGltZSA9IHNlbGYuZ2V0X3RpbWVz
dGFtcF9mcm9tX2xvZyhsb2dfY29udGVudHMpCiAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNo
X3RpbWUgaXMgbm90IE5vbmUgYW5kIG5ld2VyX3RoYW4gaXMgbm90IE5vbmU6CkBAIC0xMzYsNyAr
MTQ0LDExIEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY3Jhc2hfdGltZSA8IHN0YXJ0X3RpbWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWUKIAotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZpcnN0X2xpbmVfcmVn
ZXgubWF0Y2gobG9nX2NvbnRlbnRzWzA6bG9nX2NvbnRlbnRzLmZpbmQoJ1xuJyldKQorICAgICAg
ICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2dfY29udGVudHMuc3BsaXRsaW5lcygpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBwcm9jZXNzX3JlZ2V4Lm1hdGNoKGxpbmUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhaworCiAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBwaWQgPSBzdHIobWF0Y2guZ3JvdXAoJ3BpZCcpKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
Y3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw4IEBAIGZyb20gd2Via2l0cHkucG9ydC53aW4gaW1wb3J0IFdpblBv
cnQKIAogCiBkZWYgbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4ocHJvY2Vzc19uYW1lLCBw
aWQpOgotICAgIHJldHVybiAiIiJQcm9jZXNzOiAgICAgICAgIHtwcm9jZXNzX25hbWV9IFt7cGlk
fV0KKyAgICByZXR1cm4gIiIiTWF5IGhhdmUgZ2FyYmFnZSBhdCB0aGUgYmVnaW5uaW5nCitQcm9j
ZXNzOiAgICAgICAgIHtwcm9jZXNzX25hbWV9IFt7cGlkfV0KIFBhdGg6ICAgICAgICAgICAgL1Zv
bHVtZXMvRGF0YS9zbGF2ZS9zbm93bGVvcGFyZC1pbnRlbC1yZWxlYXNlLXRlc3RzL2J1aWxkL1dl
YktpdEJ1aWxkL1JlbGVhc2Uve3Byb2Nlc3NfbmFtZX0KIElkZW50aWZpZXI6ICAgICAge3Byb2Nl
c3NfbmFtZX0KIFZlcnNpb246ICAgICAgICAgPz8/ICg/Pz8pCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlz
aW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0
Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgUGxhdGZv
cm1JbmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYub3NfbmFtZSA9IHNlbGYuX2RldGVybWluZV9v
c19uYW1lKHN5c19tb2R1bGUucGxhdGZvcm0pCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAn
bGludXgnOgogICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX2xp
bnV4X3ZlcnNpb24oKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNl
bGYub3NfbmFtZSA9PSAnb3BlbmJzZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnOgorICAg
ICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3Bl
bmJzZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnaW9z
JzoKICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHBsYXRmb3JtX21vZHVsZS5yZWxlYXNl
KCkKICAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ21hYycpOgogICAgICAgICAg
ICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKHBsYXRmb3Jt
X21vZHVsZS5tYWNfdmVyKClbMF0pCkBAIC02Myw2ICs2Myw5IEBAIGNsYXNzIFBsYXRmb3JtSW5m
byhvYmplY3QpOgogICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9z
X25hbWUgPT0gJ21hYycKIAorICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLm9zX25hbWUgPT0gJ2lvcycKKwogICAgIGRlZiBpc193aW4oc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLm9zX25hbWUgPT0gJ3dpbicKIApAQCAtMTQxLDYgKzE0NCw4IEBAIGNsYXNzIFBs
YXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiBfZGV0ZXJtaW5lX29zX25hbWUoc2VsZiwgc3lz
X3BsYXRmb3JtKToKICAgICAgICAgaWYgc3lzX3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAg
ICAgICAgcmV0dXJuICdtYWMnCisgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnaW9zJzoKKyAg
ICAgICAgICAgIHJldHVybiAnaW9zJwogICAgICAgICBpZiBzeXNfcGxhdGZvcm0uc3RhcnRzd2l0
aCgnbGludXgnKToKICAgICAgICAgICAgIHJldHVybiAnbGludXgnCiAgICAgICAgIGlmIHN5c19w
bGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSBvciBzeXNfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6Cklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21v
Y2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDkgQEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAg
IGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21hYycK
IAorICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0g
J2lvcycKKwogICAgIGRlZiBpc19saW51eChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3Nf
bmFtZSA9PSAnbGludXgnCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9zeXN0ZW1ob3N0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkod29ya2luZyBjb3B5
KQpAQCAtNDAsOSArNDAsMTMgQEAgY2xhc3MgU3lzdGVtSG9zdChvYmplY3QpOgogICAgICAgICBz
ZWxmLnVzZXIgPSB1c2VyLlVzZXIoKQogICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm1p
bmZvLlBsYXRmb3JtSW5mbyhzeXMsIHBsYXRmb3JtLCBzZWxmLmV4ZWN1dGl2ZSkKICAgICAgICAg
c2VsZi53b3Jrc3BhY2UgPSB3b3Jrc3BhY2UuV29ya3NwYWNlKHNlbGYuZmlsZXN5c3RlbSwgc2Vs
Zi5leGVjdXRpdmUpCisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAg
ZGVmIGNvcHlfY3VycmVudF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJuIGVudmly
b25tZW50LkVudmlyb25tZW50KG9zLmVudmlyb24uY29weSgpKQogCiAgICAgZGVmIG1ha2VfZmls
ZV9sb2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gZmlsZV9sb2NrLkZpbGVMb2NrKHBh
dGgpCisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRo
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9j
ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
c3lzdGVtaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC00OCw5ICs0OCwxMyBAQCBjbGFzcyBNb2NrU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgICAg
ICMgRklYTUU6IFNob3VsZCB0aGlzIHRha2UgcG9pbnRlcnMgdG8gdGhlIGZpbGVzeXN0ZW0gYW5k
IHRoZSBleGVjdXRpdmU/CiAgICAgICAgIHNlbGYud29ya3NwYWNlID0gTW9ja1dvcmtzcGFjZSgp
CisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVmIGNvcHlfY3Vy
cmVudF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50KHsiTU9D
S19FTlZJUk9OX0NPUFkiOiAnMSd9KQogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBh
dGgpOgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9s
aWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dl
YmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MzcsNiArNTM3LDcgQEAgY2xhc3MgUnVuVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAg
IG1vY2tfY3Jhc2hfcmVwb3J0ID0gbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4oJ0R1bXBS
ZW5kZXJUcmVlJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgIGhv
c3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3JlJ10KICAgICAgICAgaG9zdC5m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL0R1bXBS
ZW5kZXJUcmVlXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gnLCBtb2NrX2NyYXNoX3Jl
cG9ydCkKICAgICAgICAgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBsb2dnaW5nX3J1bihbJ2ZhaWx1
cmVzL3VuZXhwZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcsICctLWR1bXAtcmVuZGVyLXRy
ZWUnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBleHBlY3RlZF9j
cmFzaF9sb2cgPSBtb2NrX2NyYXNoX3JlcG9ydApAQCAtNTQ5LDYgKzU1MCw3IEBAIGNsYXNzIFJ1
blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAgICAgICAgICAgIHJldHVybgogICAg
ICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKCdX
ZWJQcm9jZXNzJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgIGhv
c3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3JlJ10KICAgICAgICAgaG9zdC5m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL1dlYlBy
b2Nlc3NfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1vY2tfY3Jhc2hfcmVwb3J0
KQogICAgICAgICBsb2dnaW5nX3J1bihbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvd2ViLXByb2Nlc3Mt
Y3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3Qp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxl
KCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvdW5leHBlY3RlZC93ZWItcHJvY2Vz
cy1jcmFzaC13aXRoLXN0ZGVyci1jcmFzaC1sb2cudHh0JyksIG1vY2tfY3Jhc2hfcmVwb3J0KQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xOTAsNiArMTkwLDE3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAg
ICAgc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5f
cmVzdWx0c19kaXJlY3RvcnkpCiAKICAgICAgICAgc2VsZi5fcG9ydC5zZXR1cF90ZXN0X3J1bihz
ZWxmLl9vcHRpb25zLmRldmljZV9jbGFzcykKKworICAgICAgICAjIENhY2hlIGNyYXNoIGxvZ3Mg
YWxyZWFkeSBvbiBob3N0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmFzaF9sb2dfZGly
ZWN0b3J5ID0gc2VsZi5fcG9ydC5wYXRoX3RvX2NyYXNoX2xvZ3MoKQorICAgICAgICBleGNlcHQg
Tm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAg
ICB0YXJnZXRfaG9zdCA9IHNlbGYuX3BvcnQudGFyZ2V0X2hvc3QoaSkKKyAgICAgICAgICAgIGlm
IG5vdCB0YXJnZXRfaG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAgICAgICAgICAgICAgICB0YXJn
ZXRfaG9zdC5jYWNoZWRfY3Jhc2hfbG9ncyA9IHRhcmdldF9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNf
dW5kZXIoY3Jhc2hfbG9nX2RpcmVjdG9yeSkKKwogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAg
ZGVmIHJ1bihzZWxmLCBhcmdzKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2Vs
ZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9u
ZSk6CiAgICAgICAgIG5hbWVfc3RyID0gbmFtZSBvciAnPHVua25vd24gcHJvY2VzcyBuYW1lPicK
ICAgICAgICAgcGlkX3N0ciA9IHN0cihwaWQgb3IgJzx1bmtub3duPicpCiAgICAgICAgIHN0ZG91
dF9saW5lcyA9IChzdGRvdXQgb3IgJzxlbXB0eT4nKS5kZWNvZGUoJ3V0ZjgnLCAncmVwbGFjZScp
LnNwbGl0bGluZXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShy
ZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTQgKzExMCwxNCBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFw
cGxlUG9ydCk6CiAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYu
cGF0aF90b19jcmFzaF9sb2dzKCkpCiAgICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxf
bG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCiAKLSAgICBk
ZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Cisg
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUs
IHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4g
aGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQogICAgICAgICAjIFJlcG9y
dENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMg
d2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdv
aW5nIG9uLgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAg
c2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcn
Ci0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9f
Y3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9ob3N0
IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKICAgICAgICAgbm93ID0g
dGltZV9mbigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFu
ZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw5
ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAg
ICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBsZV9wcm9j
ZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKIAogICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2Vs
Zik6Ci0gICAgICAgICMgRGFyd2luIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNv
IGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCi0gICAgICAgIGRlZiBmYWtl
X3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KLSAgICAgICAgICAg
IHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9n
KCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zv
cl9sb2c9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHJl
dmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtX2RldmljZSk6CiAgICAgICAgIHNlbGYucGxh
dGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlCiAgICAgICAgIHNlbGYubGlzdGVuaW5nX3Nv
Y2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5jYWNoZWRfY3Jhc2hfbG9ncyA9IFtdCiAKICAgICBk
ZWYgbGlzdGVuaW5nX3BvcnQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmxpc3RlbmluZ19z
b2NrZXQ6CkBAIC02Myw2ICs2NCwxMSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKIAogICAgICAg
ICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCiAKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jh
c2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBs
YXRmb3JtX2RldmljZSwgJ3N5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQnKToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5zeW1ib2xpY2F0ZV9jcmFzaF9sb2df
aWZfbmVlZGVkKHBhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKICAgICBAcHJvcGVydHkKICAg
ICBkZWYgZXhlY3V0aXZlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZp
Y2UuZXhlY3V0aXZlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJl
dmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToK
ICAgICAgICAgICAgIGNyYXNoZWRfcGlkPXNlbGYuX2NyYXNoZWRfcGlkLCBjcmFzaF9sb2c9Y3Jh
c2hfbG9nLCBwaWQ9cGlkKQogCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIHN0ZG91dCwg
c3RkZXJyLCBuZXdlcl90aGFuKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2dldF9jcmFz
aF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUsIHNlbGYuX2NyYXNoZWRfcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuX2dldF9j
cmFzaF9sb2coc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUsIHNlbGYuX2NyYXNoZWRfcGlkLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9c2VsZi5fdGFyZ2V0X2hvc3Qp
CiAKICAgICBkZWYgX2NvbW1hbmRfd3JhcHBlcihzZWxmKToKICAgICAgICAgIyBIb29rIGZvciBp
bmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sIHVzZWQg
YnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5weS4KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2d0ay5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2d0ay5weQkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIGNs
YXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0
dHApOgogICAgICAgICByZXR1cm4gc3VwZXIoR3RrUG9ydCwgc2VsZikuY2hlY2tfc3lzX2RlcHMo
bmVlZHNfaHR0cCkgYW5kIHNlbGYuX2RyaXZlcl9jbGFzcygpLmNoZWNrX2RyaXZlcihzZWxmKQog
Ci0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgbmFt
ZSA9ICJXZWJLaXRXZWJQcm9jZXNzIiBpZiBuYW1lID09ICJXZWJQcm9jZXNzIiBlbHNlIG5hbWUK
ICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9yKG5hbWUsIHBpZCwgbmV3ZXJfdGhh
biwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19kcml2ZXIpLmdlbmVyYXRlX2NyYXNo
X2xvZyhzdGRvdXQsIHN0ZGVycikKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiBp
bXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVt
b2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNo
TG9ncwogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCiBm
cm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQb3J0CiAKQEAgLTY3LDE2ICs2OCwzMyBA
QCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAgICAgcG9ydF9uYW1lID0g
cG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKICAgICAgICAgcmV0dXJuIHBv
cnRfbmFtZQogCi0gICAgIyBGSVhNRTogVGhlc2UgbmVlZCBkZXZpY2UgaW1wbGVtZW50YXRpb25z
IDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAgICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhz
ZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBpZiBub3Qg
YXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
CisgICAgICAgIHJldHVybiBhcHBsZV9hZGRpdGlvbnMoKS5pb3NfY3Jhc2hfbG9nX3BhdGgoKQog
CisgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2Vy
X3RoYW4pOgorICAgICAgICBsb2dfbGlzdCA9IHt9CisgICAgICAgIGZvciBkZXZpY2UgaW4gc2Vs
Zi5fZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgpOgorICAgICAgICAgICAgY3Jhc2hfbG9n
ID0gQ3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAg
ICAgIGxvZ19saXN0LnVwZGF0ZShjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9y
cz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pKQorICAgICAgICByZXR1cm4gbG9nX2xpc3QK
KworICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJy
LCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1U
cnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKKyAgICAgICAgaWYgdGFyZ2V0X2hvc3Q6CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoSU9TRGV2aWNlUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFt
ZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lX2ZuLCBzbGVl
cF9mbj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPXdhaXRfZm9yX2xvZywgdGFyZ2V0X2hvc3Q9dGFy
Z2V0X2hvc3QpCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNlYXJjaCBldmVyeSBkZXZpY2Ugc2lu
Y2Ugb25lIHdhcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuX2Rl
dmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAgICAgICAgICAgIHN0ZGVycl9vdXQsIGNy
YXNobG9nID0gc3VwZXIoSU9TRGV2aWNlUG9ydCwgc2VsZikuX2dldF9jcmFzaF9sb2cobmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lX2ZuLCBzbGVlcF9m
bj1zbGVlcF9mbiwgd2FpdF9mb3JfbG9nPUZhbHNlLCB0YXJnZXRfaG9zdD1kZXZpY2UpCisgICAg
ICAgICAgICBpZiBjcmFzaGxvZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgY3Jh
c2hsb2cpCisgICAgICAgIHJldHVybiAoc3RkZXJyLCBOb25lKQorCisgICAgIyBGSVhNRTogVGhl
c2UgbmVlZCBkZXZpY2UgaW1wbGVtZW50YXRpb25zIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4u
CiAgICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlk
KToKICAgICAgICAgcGFzcwogCi0gICAgZGVmIGxvb2tfZm9yX25ld19jcmFzaF9sb2dzKHNlbGYs
IGNyYXNoZWRfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKLSAgICAgICAgcmV0dXJuIHt9Ci0KICAg
ICBkZWYgbG9va19mb3JfbmV3X3NhbXBsZXMoc2VsZiwgdW5yZXNwb25zaXZlX3Byb2Nlc3Nlcywg
c3RhcnRfdGltZSk6CiAgICAgICAgIHJldHVybiB7fQogCkBAIC05MCw5ICsxMDgsNiBAQCBjbGFz
cyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYp
OgogICAgICAgICByZXR1cm4gJ2lvcy1kZXZpY2UnCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2co
c2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25l
LCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiAoc3Rk
ZXJyLCBOb25lKQotCiAgICAgZGVmIF9jcmVhdGVfZGV2aWNlcyhzZWxmLCBkZXZpY2VfY2xhc3Mp
OgogICAgICAgICBpZiBub3QgYXBwbGVfYWRkaXRpb25zKCk6CiAgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3Ioc2VsZi5OT19PTl9ERVZJQ0VfVEVTVElORykKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsOCBAQAogIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgdGltZQorCiBmcm9tIHdlYmtpdHB5LnBv
cnQuaW9zX2RldmljZSBpbXBvcnQgSU9TRGV2aWNlUG9ydAogZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBpb3NfdGVzdGNhc2UKIApAQCAtMzcsMTAgKzM5LDE3IEBAIGNsYXNzIElPU0RldmljZVRl
c3QoaW9zX3Rlc3RjYXNlLklPU1Rlc3QKICAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNl
bGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3MtZGV2aWNlJywgc2VsZi5tYWtlX3Bv
cnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCiAKLSAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hl
biA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9j
cmFzaGxvZ19wYXRoKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRF
cnJvcik6CisgICAgICAgICAgICBwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpCisKKyAgICBkZWYg
dGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
cG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2Vz
KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVu
ZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFs
c2UpCiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzA0
OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9zcGluZHVtcChzZWxmKToKICAgICAg
ICAgcGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDIx
NzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVm
IHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c19k
aXJlY3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2Fp
dF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUs
IHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBOb3RlIHRo
YXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRp
bWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1
c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBvZiBzaW11
bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM4MCw3ICszODAsNyBAQCBjbGFzcyBXaW5Q
b3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQog
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hf
bG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYu
cGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModGFy
Z2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAg
ICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAgIyBGSVhNRTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2Un
cmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4KICAgICAgICAgX2xvZy5kZWJ1ZygnbG9v
a2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw2
IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsdF9leGVjdXRhYmxlc19wYXRoKCdJbWFnZURp
ZmYnKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBz
dGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAg
ICAgbmFtZSA9ICJXUEVXZWJQcm9jZXNzIiBpZiBuYW1lID09ICJXZWJQcm9jZXNzIiBlbHNlIG5h
bWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9yKG5hbWUsIHBpZCwgbmV3ZXJf
dGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19kcml2ZXIpLmdlbmVyYXRlX2Ny
YXNoX2xvZyhzdGRvdXQsIHN0ZGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311835</attachid>
            <date>2017-06-02 10:12:09 -0700</date>
            <delta_ts>2017-06-02 11:45:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170602101208.patch</filename>
            <type>text/plain</type>
            <size>28777</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzY4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY5IEBACisyMDE3LTA1LTMxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90
ZW50aWFsIHBsYXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0
by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFN1cHBvcnQg
aU9TIGRldmljZSBjcmFzaCBsb2dzLiBDaGVjaworICAgICAgICBjYWNoZWRfY3Jhc2hsb2dzIGZv
ciBlZmZpY2llbmN5IGFuZCBzeW1ib2xpY2F0ZSB0aGUgY3Jhc2hsb2cgYmVmb3JlIHBhcnNpbmcg
aXQuIENvbnRpbnVlIHNlYXJjaGluZworICAgICAgICBmb3IgcHJvY2VzcyBJRCB1bnRpbCBpdCBp
cyBmb3VuZCBpbiBsb2cuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2lu
KTpEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaGxvZ3MgbWF5IG5vdCBoYXZlIHRoZWlyIHByb2Nlc3Mgb24gdGhlIGZpcnN0IGxpbmUu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5w
eToKKyAgICAgICAgKFBsYXRmb3JtSW5mby5pc19pb3MpOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHk6CisgICAgICAg
IChNb2NrUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5OgorICAgICAgICAoU3lzdGVtSG9zdC5f
X2luaXRfXyk6IEluaXRpYWxpemUgY2FjaGVkX2NyYXNoX2xvZ3MgYXJyYXkuCisgICAgICAgIChT
eXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBUaGUgc3ltYm9saWNh
dGVkIGNyYXNoIGxvZyBmb3IgbW9zdCBzeXN0ZW1zCisgICAgICAgIGlzIGp1c3QgdGhlIGNyYXNo
bG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHk6IERpdHRvLgorICAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5Ogor
ICAgICAgICAoTWFuYWdlci5fc2V0X3VwX3J1bik6IENhY2hlIGNyYXNoIGxvZ3MgY3VycmVudGx5
IG9uIHRoZSB0YXJnZXQgaG9zdHMgYmVmb3JlIHJ1bm5pbmcgdGVzdHMuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRl
c3QucHk6CisgICAgICAgIChSdW5UZXN0LnRlc3RfY3Jhc2hfbG9nKTogSW5pdGlhbGl6ZSBjYWNo
ZWRfY3Jhc2hfbG9ncyBiZWZvcmUgcnVubmluZyBzbyB0aGF0IHRoZSBjcmFzaAorICAgICAgICBs
b2dzIHdlJ3JlIHRlc3RpbmcgYXJlIG5vdCBpZ25vcmVkLgorICAgICAgICAoUnVuVGVzdC50ZXN0
X3dlYl9wcm9jZXNzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAgICAgIChNYW5hZ2Vy
Ll9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBob3N0IHNvIHdl
IGRvbid0IGhhdmUgdG8gcmVhZCB0aGVtLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwg
dGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNoX2xv
Zyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncywgY29y
cmVjdGx5IG1hdGNoCisgICAgICAgIGlPUyBkZXZpY2UgcHJvY2VzcyBuYW1lcyBzaW5jZSBjcmFz
aCBsb2dzIGRvIG5vdCBhcHBlbmQgLmFwcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBjYWNo
ZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAgKERldmljZS5zeW1ib2xpY2F0ZV9jcmFzaF9s
b2dfaWZfbmVlZGVkKTogSWYgdGhlIHBsYXRmb3JtIGRldmljZSBoYXMgYSBmdW5jdGlvbiB3aXRo
IHRoaXMKKyAgICAgICAgbmFtZSwgY2FsbCBpdC4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGNyYXNo
IGxvZyBpcyBhbHJlYWR5IHN5bWJvbGljYXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9nZXRfY3Jhc2hfbG9nKTogUGFzcyBv
cHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHk6CisgICAgICAgIChHdGtQb3J0Ll9nZXRfY3Jhc2hf
bG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5OgorICAgICAgICAo
SU9TRGV2aWNlUG9ydC5wYXRoX3RvX2NyYXNoX2xvZ3MpOiBDb25zdWx0IGFwcGxlX2FkZGl0aW9u
cyBmb3IgdGhlIHBhdGggdG8gY3Jhc2ggbG9ncy4KKyAgICAgICAgKElPU0RldmljZVBvcnQuX2xv
b2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBTZWFyY2ggZXZlcnkgY29ubmVjdGVk
IGRldmljZSBmb3IKKyAgICAgICAgY3Jhc2ggbG9ncy4KKyAgICAgICAgKElPU0RldmljZVBvcnQu
X2dldF9jcmFzaF9sb2cpOiBTZWFyY2ggdGhlIHNwZWNpZmllZCB0YXJnZXQgaG9zdCBmb3IgYSBj
cmFzaCBsb2cKKyAgICAgICAgaWYgYSB0YXJnZXQgaG9zdCBpcyBzcGVjaWZpZWQuIEVsc2UsIHNl
YXJjaCBhbGwgY29ubmVjdGVkIGRldmljZXMgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgY3Jh
c2gtbG9nLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6
IERlbGV0ZWQsIHVzZSBEYXJ3aW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHk6CisgICAgICAgIChJT1NEZXZpY2VU
ZXN0LnRlc3RfY3Jhc2hsb2dfcGF0aCk6IFdpdGhvdXQgYXBwbGVfYWRkaXRpb25zLCBwYXRoX3Rv
X2NyYXNoX2xvZ3Mgc2hvdWxkIHJhaXNlCisgICAgICAgIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2Ny
YXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9n
cy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BF
UG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0
aW5nIGNyYXNobG9ncy4KKwogMjAxNy0wNi0wMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQnVtcCBHVEsrIGFuZCBpdHMgZGVwZW5k
ZW5jaWVzIGluIGpoYnVpbGQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9jcmFzaGxvZ3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2NyYXNobG9ncy5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0
IGNvZGVjcwogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgcmUKIApAQCAtNDIsMjkgKzQxLDM5IEBA
IGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogICAgICAgICBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0
b3J5ID0gY3Jhc2hfbG9nX2RpcmVjdG9yeQogCiAgICAgZGVmIGZpbmRfbmV3ZXN0X2xvZyhzZWxm
LCBwcm9jZXNzX25hbWUsIHBpZD1Ob25lLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhh
bj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAg
ICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3
aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAg
ICBlbGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCk6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZmluZF9uZXdlc3RfbG9nX3dpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJv
cnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgZmluZF9hbGxf
bG9ncyhzZWxmLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKLSAgICAg
ICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAgICAgaWYgc2VsZi5faG9z
dC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX2lvcygpOgogICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKGluY2x1ZGVfZXJyb3Jz
LCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9maW5kX25ld2Vz
dF9sb2dfZGFyd2luKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3
ZXJfdGhhbik6CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCkgYW5kIHBy
b2Nlc3NfbmFtZS5lbmRzd2l0aCgnLmFwcCcpOgorICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0g
cHJvY2Vzc19uYW1lWzotNF0KKwogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRo
LCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9j
ZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAg
ICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2hvc3QuY2FjaGVkX2Ny
YXNoX2xvZ3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1
cm4gKGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgJ18nKSBhbmQgKGJhc2VuYW1l
LmVuZHN3aXRoKCcuY3Jhc2gnKSkgb3IgKHByb2Nlc3NfbmFtZSBpbiBiYXNlbmFtZSBhbmQgYmFz
ZW5hbWUuZW5kc3dpdGgoJy5pcHMnKSkpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmls
ZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRl
cj1pc19jcmFzaF9sb2cpCi0gICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHIn
XlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQorICAg
ICAgICBwcm9jZXNzX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNz
X25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKICAgICAgICAgZXJyb3JzID0gJycKICAgICAg
ICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAgICAgIHRyeToK
ICAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgotICAgICAgICAgICAgICAgICAgICBmID0gc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCi0gICAgICAgICAgICAgICAg
ICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZWdleC5tYXRjaChmWzA6Zi5maW5kKCdcbicpXSkKKyAg
ICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuX2hvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lm
X25lZWRlZChwYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYu
c3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBwcm9jZXNzX3Jl
Z2V4Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBpZiBtYXRj
aCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHByb2Nlc3NfbmFtZSBhbmQgKHBp
ZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZCk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgZgogICAgICAgICAgICAgZXhjZXB0IElPRXJy
b3IsIGU6CkBAIC04MCw2ICs4OSw4IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAg
ZGVmIF9maW5kX25ld2VzdF9sb2dfd2luKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRl
X2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBh
dGgsIGJhc2VuYW1lKToKKyAgICAgICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUp
IGluIHNlbGYuX2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3M6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aCgiQ3Jhc2hMb2ci
KQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2Vs
Zi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQpAQCAtMTE3
LDEwICsxMjgsMTIgQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBkZWYgX2ZpbmRf
YWxsX2xvZ3NfZGFyd2luKHNlbGYsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAg
ICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAg
cmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQorICAgICAgICAgICAgaWYgZnMuam9p
bihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5l
bmRzd2l0aCgnLmNyYXNoJykgb3IgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKQogCiAgICAgICAg
IGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9n
X2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQotICAgICAgICBmaXJzdF9saW5l
X3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxb
KD9QPHBpZD5cZCspXF0kJykKKyAgICAgICAgcHJvY2Vzc19yZWdleCA9IHJlLmNvbXBpbGUocide
UHJvY2VzczpccysoP1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAg
ICAgIGVycm9ycyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSB7fQogICAgICAgICBmb3IgcGF0
aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgpAQCAtMTI4LDcgKzE0MSw5IEBAIGNsYXNzIENy
YXNoTG9ncyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNl
bGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCiAgICAgICAgICAgICAgICAgICAgIHBp
ZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0gc2VsZi5faG9zdC5maWxl
c3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGxvZ19jb250
ZW50cyA9IHNlbGYuX2hvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChwYXRoKQor
ICAgICAgICAgICAgICAgICAgICBpZiBub3QgbG9nX2NvbnRlbnRzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGltZXN0YW1w
IGZyb20gbG9nIGNvbnRlbnRzCiAgICAgICAgICAgICAgICAgICAgIGNyYXNoX3RpbWUgPSBzZWxm
LmdldF90aW1lc3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQogICAgICAgICAgICAgICAgICAg
ICBpZiBjcmFzaF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdlcl90aGFuIGlzIG5vdCBOb25lOgpA
QCAtMTM2LDcgKzE1MSwxMSBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgPCBzdGFydF90aW1lOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJz
dF9saW5lX3JlZ2V4Lm1hdGNoKGxvZ19jb250ZW50c1swOmxvZ19jb250ZW50cy5maW5kKCdcbicp
XSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nX2NvbnRlbnRzLnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcHJvY2Vzc19yZWdleC5tYXRj
aChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IG1hdGNoLmdyb3VwKCdwcm9jZXNz
X25hbWUnKQogICAgICAgICAgICAgICAgICAgICAgICAgcGlkID0gc3RyKG1hdGNoLmdyb3VwKCdw
aWQnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxv
Z3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQCBmcm9tIHdlYmtpdHB5LnBvcnQud2luIGlt
cG9ydCBXaW5Qb3J0CiAKIAogZGVmIG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKHByb2Nl
c3NfbmFtZSwgcGlkKToKLSAgICByZXR1cm4gIiIiUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19u
YW1lfSBbe3BpZH1dCisgICAgcmV0dXJuICIiIk1heSBoYXZlIGdhcmJhZ2UgYXQgdGhlIGJlZ2lu
bmluZworUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1lfSBbe3BpZH1dCiBQYXRoOiAgICAg
ICAgICAgIC9Wb2x1bWVzL0RhdGEvc2xhdmUvc25vd2xlb3BhcmQtaW50ZWwtcmVsZWFzZS10ZXN0
cy9idWlsZC9XZWJLaXRCdWlsZC9SZWxlYXNlL3twcm9jZXNzX25hbWV9CiBJZGVudGlmaWVyOiAg
ICAgIHtwcm9jZXNzX25hbWV9CiBWZXJzaW9uOiAgICAgICAgID8/PyAoPz8/KQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGNs
YXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9k
ZXRlcm1pbmVfb3NfbmFtZShzeXNfbW9kdWxlLnBsYXRmb3JtKQogICAgICAgICBpZiBzZWxmLm9z
X25hbWUgPT0gJ2xpbnV4JzoKICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2Rl
dGVybWluZV9saW51eF92ZXJzaW9uKCkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVl
YnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0
YnNkJzoKKyAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25h
bWUgPT0gJ2lvcyc6CiAgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1
bGUucmVsZWFzZSgpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCdtYWMnKToK
ICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lv
bihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQpAQCAtNjMsNiArNjMsOSBAQCBjbGFzcyBQ
bGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfd2luKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICd3aW4nCiAKQEAgLTE0MSw2ICsxNDQsOCBA
QCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgX2RldGVybWluZV9vc19uYW1l
KHNlbGYsIHN5c19wbGF0Zm9ybSk6CiAgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnZGFyd2lu
JzoKICAgICAgICAgICAgIHJldHVybiAnbWFjJworICAgICAgICBpZiBzeXNfcGxhdGZvcm0gPT0g
J2lvcyc6CisgICAgICAgICAgICByZXR1cm4gJ2lvcycKICAgICAgICAgaWYgc3lzX3BsYXRmb3Jt
LnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6CiAgICAgICAgICAgICByZXR1cm4gJ2xpbnV4JwogICAgICAg
ICBpZiBzeXNfcGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykgb3Igc3lzX3BsYXRmb3JtID09ICdj
eWd3aW4nOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2Jq
ZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1l
ID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5v
c19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfbGludXgoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkocmV2aXNpb24gMjE3NjgwKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDEzIEBAIGNsYXNzIFN5c3RlbUhvc3Qob2JqZWN0KToK
ICAgICAgICAgc2VsZi51c2VyID0gdXNlci5Vc2VyKCkKICAgICAgICAgc2VsZi5wbGF0Zm9ybSA9
IHBsYXRmb3JtaW5mby5QbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgc2VsZi5leGVjdXRpdmUp
CiAgICAgICAgIHNlbGYud29ya3NwYWNlID0gd29ya3NwYWNlLldvcmtzcGFjZShzZWxmLmZpbGVz
eXN0ZW0sIHNlbGYuZXhlY3V0aXZlKQorICAgICAgICBzZWxmLmNhY2hlZF9jcmFzaF9sb2dzID0g
W10KIAogICAgIGRlZiBjb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoc2VsZik6CiAgICAgICAgIHJl
dHVybiBlbnZpcm9ubWVudC5FbnZpcm9ubWVudChvcy5lbnZpcm9uLmNvcHkoKSkKIAogICAgIGRl
ZiBtYWtlX2ZpbGVfbG9jayhzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIGZpbGVfbG9jay5G
aWxlTG9jayhwYXRoKQorCisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQo
c2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0
ZW1ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOSArNDgsMTMgQEAgY2xhc3MgTW9ja1N5c3RlbUhvc3Qob2JqZWN0KToK
IAogICAgICAgICAjIEZJWE1FOiBTaG91bGQgdGhpcyB0YWtlIHBvaW50ZXJzIHRvIHRoZSBmaWxl
c3lzdGVtIGFuZCB0aGUgZXhlY3V0aXZlPwogICAgICAgICBzZWxmLndvcmtzcGFjZSA9IE1vY2tX
b3Jrc3BhY2UoKQorICAgICAgICBzZWxmLmNhY2hlZF9jcmFzaF9sb2dzID0gW10KIAogICAgIGRl
ZiBjb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoc2VsZik6CiAgICAgICAgIHJldHVybiBFbnZpcm9u
bWVudCh7Ik1PQ0tfRU5WSVJPTl9DT1BZIjogJzEnfSkKIAogICAgIGRlZiBtYWtlX2ZpbGVfbG9j
ayhzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIE1vY2tGaWxlTG9jayhwYXRoKQorCisgICAg
ZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6CisgICAgICAg
IHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5CShyZXZpc2lvbiAyMTc2ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X2ludGVncmF0aW9udGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNTM3LDYgKzUzNyw3IEBAIGNs
YXNzIFJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAgICAgICAgICAgIHJldHVy
bgogICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFy
d2luKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQ1KQogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQor
ICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRvLWlnbm9yZSddCiAgICAg
ICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9EdW1wUmVuZGVyVHJlZV8yMDExLTA2LTEzLTE1MDcxOV9xdWFkemVuLmNyYXNoJywgbW9j
a19jcmFzaF9yZXBvcnQpCiAgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19y
dW4oWydmYWlsdXJlcy91bmV4cGVjdGVkL2NyYXNoLXdpdGgtc3RkZXJyLmh0bWwnLCAnLS1kdW1w
LXJlbmRlci10cmVlJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAg
ZXhwZWN0ZWRfY3Jhc2hfbG9nID0gbW9ja19jcmFzaF9yZXBvcnQKQEAgLTU0OSw2ICs1NTAsNyBA
QCBjbGFzcyBSdW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UCiAgICAgICAgICAgICBy
ZXR1cm4KICAgICAgICAgbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jhc2hfcmVwb3J0
X2RhcndpbignV2ViUHJvY2VzcycsIDEyMzQ1KQogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQor
ICAgICAgICBob3N0LmNhY2hlZF9jcmFzaF9sb2dzID0gWydmaWxlLXRvLWlnbm9yZSddCiAgICAg
ICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9XZWJQcm9jZXNzXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gnLCBtb2NrX2Ny
YXNoX3JlcG9ydCkKICAgICAgICAgbG9nZ2luZ19ydW4oWydmYWlsdXJlcy91bmV4cGVjdGVkL3dl
Yi1wcm9jZXNzLWNyYXNoLXdpdGgtc3RkZXJyLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwg
aG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QuZmlsZXN5c3RlbS5yZWFk
X3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL3VuZXhwZWN0ZWQv
d2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnItY3Jhc2gtbG9nLnR4dCcpLCBtb2NrX2NyYXNo
X3JlcG9ydCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gMjE3NjgwKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCwxNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVj
dCk6CiAgICAgICAgIHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0
b3J5KHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5KQogCiAgICAgICAgIHNlbGYuX3BvcnQuc2V0dXBf
dGVzdF9ydW4oc2VsZi5fb3B0aW9ucy5kZXZpY2VfY2xhc3MpCisKKyAgICAgICAgIyBDYWNoZSBj
cmFzaCBsb2dzIGFscmVhZHkgb24gaG9zdC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3Jh
c2hfbG9nX2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQucGF0aF90b19jcmFzaF9sb2dzKCkKKyAgICAg
ICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpOgor
ICAgICAgICAgICAgdGFyZ2V0X2hvc3QgPSBzZWxmLl9wb3J0LnRhcmdldF9ob3N0KGkpCisgICAg
ICAgICAgICBpZiBub3QgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3M6CisgICAgICAgICAg
ICAgICAgdGFyZ2V0X2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3MgPSB0YXJnZXRfaG9zdC5maWxlc3lz
dGVtLmZpbGVzX3VuZGVyKGNyYXNoX2xvZ19kaXJlY3RvcnkpCisKICAgICAgICAgcmV0dXJuIFRy
dWUKIAogICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNjQsNyArMTM2NCw3IEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgogICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdl
dF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3IgJzx1bmtub3duIHByb2Nl
c3MgbmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8dW5rbm93bj4nKQogICAg
ICAgICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+JykuZGVjb2RlKCd1dGY4Jywg
J3JlcGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rh
cndpbi5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw4IEBAIGNsYXNzIERhcndp
blBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgICAgICAgICBwaWQgPSBpbnQodGVzdC5zcGxpdCgi
LSIpWzFdKQogICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIGlmIG5vdCBhbnkoZW50cnlbMV0gPT0gcHJvY2Vzc19uYW1l
IGFuZCBlbnRyeVsyXSA9PSBwaWQgZm9yIGVudHJ5IGluIGNyYXNoZWRfcHJvY2Vzc2VzKToKKyAg
ICAgICAgICAgICMgaU9TIGxvZ3Mgd29uJ3QgaGF2ZSAnLmFwcCcgaW4gdGhlIHByb2Nlc3MgbmFt
ZS4KKyAgICAgICAgICAgIGlmIG5vdCBhbnkoKGVudHJ5WzFdID09IHByb2Nlc3NfbmFtZSBvciBl
bnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgKyAnLmFwcCcpIGFuZCBlbnRyeVsyXSA9PSBwaWQgZm9y
IGVudHJ5IGluIGNyYXNoZWRfcHJvY2Vzc2VzKToKICAgICAgICAgICAgICAgICAjIGlmIHRoaXMg
aXMgYSBuZXcgY3Jhc2gsIHRoZW4gYXBwZW5kIHRoZSBsb2dzCiAgICAgICAgICAgICAgICAgbG9n
c1t0ZXN0XSA9IGNyYXNoX2xvZwogICAgICAgICByZXR1cm4gbG9ncwpAQCAtMTEwLDE0ICsxMTEs
MTQgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBjcmFzaF9sb2cgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAgICBy
ZXR1cm4gY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJf
dGhhbj1uZXdlcl90aGFuKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9u
ZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1l
LCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2Zu
PU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMg
dGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBh
bmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBv
ZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KICAgICAgICAgdGltZV9mbiA9IHRpbWVf
Zm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVl
cAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dz
KHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFz
aF9sb2dzKCkpCiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQogICAgICAgICBkZWFkbGluZSA9IG5v
dyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKICAgICAg
ICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAy
MTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOSArMTM3LDUgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0
X3Rlc3RjYXNlLlBvcnRUZXN0QwogICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0pCiAKICAgICBk
ZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAjIERhcndpbiBjcmFzaCBsb2dz
IGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0
IGNyYXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAgICAgICAgICB0aW1lcyA9
IFswLCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKICAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxmLnBvcnRfbmFtZSkKICAg
ICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBO
b25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
IGNsYXNzIERldmljZShvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybV9k
ZXZpY2UpOgogICAgICAgICBzZWxmLnBsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZQog
ICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCisgICAgICAgIHNlbGYuY2FjaGVk
X2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVmIGxpc3RlbmluZ19wb3J0KHNlbGYpOgogICAgICAg
ICBpZiBub3Qgc2VsZi5saXN0ZW5pbmdfc29ja2V0OgpAQCAtNjMsNiArNjQsMTEgQEAgY2xhc3Mg
RGV2aWNlKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29ja2V0ID0gTm9uZQog
CisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6Cisg
ICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9kZXZpY2UsICdzeW1ib2xpY2F0ZV9jcmFz
aF9sb2dfaWZfbmVlZGVkJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZp
Y2Uuc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChwYXRoKQorICAgICAgICByZXR1cm4g
cGF0aAorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAgICAgICAg
cmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcg
QEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9j
cmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBpZCkKIAogICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIHJl
dHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1l
LCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisgICAgICAg
IHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19u
YW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdl
dF9ob3N0PXNlbGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoc2Vs
Zik6CiAgICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRp
bWUgaW5zdHJ1bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRf
dGVzdHMucHkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIx
NzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRlZiBjaGVj
a19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIHN1cGVyKEd0a1Bv
cnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2ZXJfY2xh
c3MoKS5jaGVja19kcml2ZXIoc2VsZikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBu
YW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFz
aF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0
X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyIgaWYgbmFtZSA9
PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVy
YXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhf
dG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCiAKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc2ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkod29ya2luZyBj
b3B5KQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5j
b21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcg
aW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9T
UG9ydAogCkBAIC02NywxNiArNjgsMzMgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToK
ICAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25f
bnVtYmVyCiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAotICAgICMgRklYTUU6IFRoZXNlIG5l
ZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAg
IGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25z
KCkuaW9zX2NyYXNoX2xvZ19wYXRoKCkKIAorICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xv
Z3NfaW5fbG9nX2RpcihzZWxmLCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQor
ICAgICAgICBmb3IgZGV2aWNlIGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAo
KToKKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhkZXZpY2UsIHNlbGYucGF0aF90
b19jcmFzaF9sb2dzKCkpCisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZp
bmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkK
KyAgICAgICAgcmV0dXJuIGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVl
cF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAg
IGlmIHRhcmdldF9ob3N0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0RldmljZVBvcnQs
IHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3Ro
YW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz13YWl0
X2Zvcl9sb2csIHRhcmdldF9ob3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2UgbmVlZCB0
byBzZWFyY2ggZXZlcnkgZGV2aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAg
ICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6Cisg
ICAgICAgICAgICBzdGRlcnJfb3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNl
bGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4s
IHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwg
dGFyZ2V0X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwg
Tm9uZSkKKworICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8
cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwg
cHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29r
X2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6
Ci0gICAgICAgIHJldHVybiB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYs
IHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30K
IApAQCAtOTAsOSArMTA4LDYgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBk
ZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwog
Ci0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRy
dWUpOgotICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBfY3JlYXRlX2Rl
dmljZXMoc2VsZiwgZGV2aWNlX2NsYXNzKToKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9u
cygpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RF
U1RJTkcpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2Rl
dmljZV91bml0dGVzdC5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYg
KzIwLDggQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0
IHRpbWUKKwogZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElPU0RldmljZVBv
cnQKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAgLTM3LDEwICsz
OSwxNyBAQCBjbGFzcyBJT1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAgICAgZGVm
IHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
aW9zLWRldmljZScsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAg
IyBGSVhNRTogVXBkYXRlIHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBj
b21wbGV0ZWQuCiAgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAgICAgICAgcGFz
cworICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNz
ZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgcG9ydC5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKKyAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxmLnBvcnRfbmFtZSkKKyAgICAg
ICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcG9y
dC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1l
LnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQogCisgICAgIyBGSVhNRTogVXBkYXRlIHRlc3Rz
IHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVmIHRl
c3Rfc3BpbmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd2luLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgY2xhc3MgV2lu
UG9ydChBcHBsZVBvcnQpOgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkKIAotICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2Zu
PU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGlt
ZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9
Tm9uZSk6CiAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0
LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCiAgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMg
dG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFy
ZQogICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCkBAIC0z
ODAsNyArMzgwLDcgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICB0aW1lX2Zu
ID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0
aW1lLnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBD
cmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBj
cmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRo
X3RvX2NyYXNoX2xvZ3MoKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgICMgRklY
TUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4u
CiAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUg
KG5hbWUsIHN0cihwaWQpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkod29y
a2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNiBAQCBjbGFzcyBXUEVQb3J0KFBvcnQpOgogICAgIGRl
ZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbHRf
ZXhlY3V0YWJsZXNfcGF0aCgnSW1hZ2VEaWZmJykKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dl
dF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwg
dGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV1BFV2ViUHJvY2VzcyIgaWYgbmFt
ZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dl
bmVyYXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3Bh
dGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311841</attachid>
            <date>2017-06-02 11:45:57 -0700</date>
            <delta_ts>2017-06-02 15:16:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170602114557.patch</filename>
            <type>text/plain</type>
            <size>31032</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzcyMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgxIEBACisyMDE3LTA2LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuZmluZF9u
ZXdlc3RfbG9nKTogQWRkIGlPUyBhcyBhIHBvdGVudGlhbCBwbGF0Zm9ybS4KKyAgICAgICAgKENy
YXNoTG9ncy5maW5kX2FsbF9sb2dzKTogRGl0dG8uCisgICAgICAgIChDcmFzaExvZ3MuX3BhcnNl
X2Rhcndpbl9jcmFzaGxvZyk6IFNoYXJlIGNvZGUgZm9yIHBhcnNpbmcgb2YgRGFyd2luIGNyYXNo
IGxvZ3MuCisgICAgICAgIERvIG5vdCBhc3N1bWUgdGhhdCBhIERhcndpbiBjcmFzaCBsb2cgc3Rh
cnRzIHdpdGggdGhlIHByb2Nlc3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xv
Z19kYXJ3aW4pOiBSZW1vdmUgLmFwcCBpbiBwcm9jZXNzIG5hbWUgZm9yIGlPUywgdXNlCisgICAg
ICAgIHNoYXJlZCBjb2RlIGZvciBwYXJzaW5nIERhcndpbiBjcmFzaCBsb2dzLgorICAgICAgICAo
Q3Jhc2hMb2dzLl9maW5kX25ld2VzdF9sb2dfZGFyd2luLmlzX2NyYXNoX2xvZyk6IENoZWNrIGNh
Y2hlZF9jcmFzaF9sb2dzIHNvIHRoYXQKKyAgICAgICAgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRo
ZSBzeXN0ZW0gYmVmb3JlIHRlc3RpbmcgYmVnYW4gYXJlIG5vdCBwYXJzZWQuCisgICAgICAgIChD
cmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193aW4uaXNfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAg
ICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luLmlzX2NyYXNoX2xvZyk6IERpdHRv
LgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX2FsbF9sb2dzX2Rhcndpbik6IFVzZSBzaGFyZWQg
Y29kZSBmb3IgcGFyc2luZyBEYXJ3aW4gY3Jhc2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFr
ZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4pOiBDcmFzaGxvZ3MgbWF5IG5vdCBoYXZlIHRoZWly
IHByb2Nlc3Mgb24gdGhlIGZpcnN0IGxpbmUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3JtSW5mby5fX2lu
aXRfXyk6IFVzZSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpIGFzIHRoZSBvc192ZXJzaW9uIGZv
ciBpT1MgZGV2aWNlLgorICAgICAgICAoUGxhdGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAg
ICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1pbmVfb3NfbmFtZSk6IEEgcGxhdGZvcm0gbmFtZSBv
ZiAnaW9zJyBtZWFucyB0aGF0IHRoZSBvcyBuYW1lIGlzICdpb3MnLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAg
KE1vY2tQbGF0Zm9ybUluZm8uaXNfaW9zKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0Ll9f
aW5pdF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAgICAgICAgKFN5
c3RlbUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IFRoZSBzeW1ib2xpY2F0
ZWQgY3Jhc2ggbG9nIGZvciBtb3N0IHN5c3RlbXMKKyAgICAgICAgaXMganVzdCB0aGUgY3Jhc2hs
b2csIHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weToKKyAgICAgICAgKE1vY2tTeXN0
ZW1Ib3N0Ll9faW5pdF9fKTogSW5pdGlhbGl6ZSBjYWNoZWRfY3Jhc2hfbG9ncyBhcnJheS4KKyAg
ICAgICAgKE1vY2tTeXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBU
aGUgc3ltYm9saWNhdGVkIGNyYXNoIGxvZyBmb3IgbW9zdAorICAgICAgICBzeXN0ZW1zIGlzIGp1
c3QgdGhlIGNyYXNobG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6Cisg
ICAgICAgIChNYW5hZ2VyLl9zZXRfdXBfcnVuKTogQ2FjaGUgY3Jhc2ggbG9ncyBjdXJyZW50bHkg
b24gdGhlIHRhcmdldCBob3N0cyBiZWZvcmUgcnVubmluZyB0ZXN0cy4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVz
dC5weToKKyAgICAgICAgKFJ1blRlc3QudGVzdF9jcmFzaF9sb2cpOiBJbml0aWFsaXplIGNhY2hl
ZF9jcmFzaF9sb2dzIGJlZm9yZSBydW5uaW5nIHNvIHRoYXQgdGhlIGNyYXNoCisgICAgICAgIGxv
Z3Mgd2UncmUgdGVzdGluZyBhcmUgbm90IGlnbm9yZWQuCisgICAgICAgIChSdW5UZXN0LnRlc3Rf
d2ViX3Byb2Nlc3NfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRp
b25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9tZXJnZV9j
cmFzaF9sb2dzKTogQ29ycmVjdGx5IG1hdGNoIGlPUyBkZXZpY2UgcHJvY2VzcyBuYW1lcyBzaW5j
ZSBjcmFzaCBsb2dzIGRvCisgICAgICAgIG5vdCBhcHBlbmQgJy5hcHAnLgorICAgICAgICAoRGFy
d2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBn
ZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
X3Rlc3RjYXNlLnB5OgorICAgICAgICAoRGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBS
ZW1vdmVkIHVudXNlZCBsb2NhbCBmdW5jdGlvbi4KKyAgICAgICAgKERhcndpblRlc3QudGVzdF9n
ZXRfY3Jhc2hfbG9nLmZha2VfdGltZV9jYik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RldmljZS5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEluaXRp
YWxpemUgY2FjaGVkX2NyYXNoX2xvZ3MgYXJyYXkuCisgICAgICAgIChEZXZpY2Uuc3ltYm9saWNh
dGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IElmIHRoZSBwbGF0Zm9ybSBkZXZpY2UgaGFzIGEgZnVu
Y3Rpb24gd2l0aCB0aGlzCisgICAgICAgIG5hbWUsIGNhbGwgaXQuIE90aGVyd2lzZSwgYXNzdW1l
IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZCByZWFkIHRoZSBmaWxlIGF0IHRoZSBwcm92aWRlZCBw
YXRoLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4g
Z2V0dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5w
eToKKyAgICAgICAgKEd0a1BvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdl
dCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jh
c2hfbG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25zIGZvciB0aGUgcGF0aCB0byBjcmFzaCBs
b2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5f
bG9nX2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQgZGV2aWNlIGZvcgorICAgICAgICBjcmFz
aCBsb2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFNlYXJjaCB0
aGUgc3BlY2lmaWVkIHRhcmdldCBob3N0IGZvciBhIGNyYXNoIGxvZyBpZiBhIHRhcmdldAorICAg
ICAgICBob3N0IGlzIHNwZWNpZmllZC4gRWxzZSwgc2VhcmNoIGFsbCBjb25uZWN0ZWQgZGV2aWNl
cyBmb3IgdGhlIHNwZWNpZmllZCBjcmFzaC1sb2cuCisgICAgICAgIChJT1NEZXZpY2VQb3J0Lmxv
b2tfZm9yX25ld19jcmFzaF9sb2dzKTogRGVsZXRlZCwgdXNlIERhcndpbiBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5w
eToKKyAgICAgICAgKElPU0RldmljZVRlc3QudGVzdF9jcmFzaGxvZ19wYXRoKTogV2l0aG91dCBh
cHBsZV9hZGRpdGlvbnMsIGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkLgorICAgICAgICAo
SU9TRGV2aWNlVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBEaXR0by4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2NyYXNoX2xv
Zyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BFUG9ydC5f
Z2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNy
YXNobG9ncy4KKwogMjAxNy0wNi0wMiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW1dQRV0gRW5hYmxlIFNVQlRMRV9DUllQVE8KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQkocmV2aXNp
b24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNo
bG9ncy5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
ICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQg
cmUKIApAQCAtMzYsMzcgKzM1LDUzIEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAg
R0xPQkFMX1BJRF9SRUdFWCA9IHJlLmNvbXBpbGUocidccytHbG9iYWxccytQSUQ6XHMrXFsoP1A8
cGlkPlxkKylcXScpCiAgICAgRVhJVF9QUk9DRVNTX1BJRF9SRUdFWCA9IHJlLmNvbXBpbGUocidF
eGl0IHByb2Nlc3MgXGQrOig/UDxwaWQ+XHcrKSwgY29kZScpCisgICAgREFSV0lOX1BST0NFU1Nf
UkVHRVggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFso
P1A8cGlkPlxkKylcXSQnKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGNyYXNoX2xv
Z19kaXJlY3RvcnkpOgogICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLl9j
cmFzaF9sb2dfZGlyZWN0b3J5ID0gY3Jhc2hfbG9nX2RpcmVjdG9yeQogCiAgICAgZGVmIGZpbmRf
bmV3ZXN0X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUsIHBpZD1Ob25lLCBpbmNsdWRlX2Vycm9ycz1G
YWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5p
c19tYWMoKToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxm
Ll9ob3N0LnBsYXRmb3JtLmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRf
bmV3ZXN0X2xvZ19kYXJ3aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdl
cl90aGFuKQogICAgICAgICBlbGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCk6CiAgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX3dpbihwcm9jZXNzX25hbWUsIHBp
ZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVybiBOb25lCiAKICAg
ICBkZWYgZmluZF9hbGxfbG9ncyhzZWxmLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhh
bj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAg
ICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsX2xvZ3NfZGFyd2lu
KGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4gTm9uZQogCisgICAg
ZGVmIF9wYXJzZV9kYXJ3aW5fY3Jhc2hsb2coc2VsZiwgcGF0aCk6CisgICAgICAgIGNvbnRlbnRz
ID0gc2VsZi5faG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAg
ICAgIGlmIG5vdCBjb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZv
ciBsaW5lIGluIGNvbnRlbnRzLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIG1hdGNoID0gQ3Jh
c2hMb2dzLkRBUldJTl9QUk9DRVNTX1JFR0VYLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBt
YXRjaDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1hdGNoLmdyb3VwKCdwcm9jZXNzX25hbWUn
KSwgaW50KG1hdGNoLmdyb3VwKCdwaWQnKSksIGNvbnRlbnRzKQorICAgICAgICByZXR1cm4gKE5v
bmUsIE5vbmUsIGNvbnRlbnRzKQorCiAgICAgZGVmIF9maW5kX25ld2VzdF9sb2dfZGFyd2luKHNl
bGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CisgICAg
ICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCkgYW5kIHByb2Nlc3NfbmFtZS5lbmRz
d2l0aCgnLmFwcCcpOgorICAgICAgICAgICAgcHJvY2Vzc19uYW1lID0gcHJvY2Vzc19uYW1lWzot
NF0KKwogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6Ci0g
ICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAiXyIp
IGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAgICAgIGlmIGZzLmpvaW4o
ZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2hvc3QuY2FjaGVkX2NyYXNoX2xvZ3M6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gKGJhc2VuYW1lLnN0
YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgJ18nKSBhbmQgKGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jh
c2gnKSkgb3IgKHByb2Nlc3NfbmFtZSBpbiBiYXNlbmFtZSBhbmQgYmFzZW5hbWUuZW5kc3dpdGgo
Jy5pcHMnKSkpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191
bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cp
Ci0gICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9Q
PHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAn
JwogICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAg
ICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3Qu
ZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46Ci0gICAgICAgICAgICAgICAgICAg
IGYgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKLSAgICAgICAg
ICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xu
JyldKQotICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nl
c3NfbmFtZScpID09IHByb2Nlc3NfbmFtZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5n
cm91cCgncGlkJykpID09IHBpZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3JzICsgZgorICAgICAgICAgICAgICAgICAgICBwYXJzZWRfY3Jhc2hfbG9nID0gc2VsZi5fcGFy
c2VfZGFyd2luX2NyYXNobG9nKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJz
ZWRfY3Jhc2hfbG9nOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgICAgICAgICAgaWYgcGFyc2VkX2NyYXNoX2xvZ1swXSA9PSBwcm9jZXNzX25hbWUgYW5kIChw
aWQgaXMgTm9uZSBvciBwYXJzZWRfY3Jhc2hfbG9nWzFdID09IHBpZCk6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgcGFyc2VkX2NyYXNoX2xvZ1syXQogICAgICAgICAg
ICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6
CiAgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAiRVJST1I6IEZhaWxlZCB0byByZWFkICcl
cyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKQEAgLTgwLDYgKzk1LDggQEAgY2xhc3MgQ3Jhc2hM
b2dzKG9iamVjdCk6CiAKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ193aW4oc2VsZiwgcHJvY2Vz
c19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlz
X2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgorICAgICAgICAgICAgaWYgZnMuam9p
bihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5faG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5z
dGFydHN3aXRoKCJDcmFzaExvZyIpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5
c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1p
c19jcmFzaF9sb2cpCkBAIC0xMTcsMzQgKzEzNCwzNCBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0
KToKIAogICAgIGRlZiBfZmluZF9hbGxfbG9nc19kYXJ3aW4oc2VsZiwgaW5jbHVkZV9lcnJvcnMs
IG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNl
bmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoIi5jcmFzaCIpCisg
ICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9ob3N0LmNh
Y2hlZF9jcmFzaF9sb2dzOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAg
ICAgcmV0dXJuIGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSBvciBiYXNlbmFtZS5lbmRzd2l0
aCgnLmlwcycpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191
bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cp
Ci0gICAgICAgIGZpcnN0X2xpbmVfcmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9Q
PHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAn
JwogICAgICAgICBjcmFzaF9sb2dzID0ge30KICAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQo
c29ydGVkKGxvZ3MpKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBub3Qg
bmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90
aGFuOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9ICJVbmtub3duIgotICAgICAg
ICAgICAgICAgICAgICBwaWQgPSAwCi0gICAgICAgICAgICAgICAgICAgIGxvZ19jb250ZW50cyA9
IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQorICAgICAgICAgICAg
ICAgICAgICBwYXJzZWRfY3Jhc2hfbG9nID0gc2VsZi5fcGFyc2VfZGFyd2luX2NyYXNobG9nKHBh
dGgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJzZWRfY3Jhc2hfbG9nOgorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgICAgICAgICAjIFZlcmlm
eSB0aW1lc3RhbXAgZnJvbSBsb2cgY29udGVudHMKLSAgICAgICAgICAgICAgICAgICAgY3Jhc2hf
dGltZSA9IHNlbGYuZ2V0X3RpbWVzdGFtcF9mcm9tX2xvZyhsb2dfY29udGVudHMpCisgICAgICAg
ICAgICAgICAgICAgIGNyYXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3RhbXBfZnJvbV9sb2cocGFy
c2VkX2NyYXNoX2xvZ1syXSkKICAgICAgICAgICAgICAgICAgICAgaWYgY3Jhc2hfdGltZSBpcyBu
b3QgTm9uZSBhbmQgbmV3ZXJfdGhhbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0X3RpbWUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKGZsb2F0KG5l
d2VyX3RoYW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3Jhc2hfdGltZSA8IHN0YXJ0
X3RpbWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAg
ICAgICAgICAgICBtYXRjaCA9IGZpcnN0X2xpbmVfcmVnZXgubWF0Y2gobG9nX2NvbnRlbnRzWzA6
bG9nX2NvbnRlbnRzLmZpbmQoJ1xuJyldKQotICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NfbmFtZSA9IG1hdGNoLmdyb3VwKCdwcm9j
ZXNzX25hbWUnKQotICAgICAgICAgICAgICAgICAgICAgICAgcGlkID0gc3RyKG1hdGNoLmdyb3Vw
KCdwaWQnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gcHJvY2Vzc19u
YW1lICsgIi0iICsgcGlkCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcnNlZF9jcmFzaF9sb2db
MF06CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IHBhcnNlZF9jcmFzaF9s
b2dbMF0gKyAiLSIgKyBzdHIocGFyc2VkX2NyYXNoX2xvZ1sxXSkKIAogICAgICAgICAgICAgICAg
ICAgICB3aGlsZSByZXN1bHRfbmFtZSBpbiBjcmFzaF9sb2dzOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X25hbWUgPSByZXN1bHRfbmFtZSArICItMSIKLSAgICAgICAgICAgICAgICAg
ICAgY3Jhc2hfbG9nc1tyZXN1bHRfbmFtZV0gPSBlcnJvcnMgKyBsb2dfY29udGVudHMKKyAgICAg
ICAgICAgICAgICAgICAgY3Jhc2hfbG9nc1tyZXN1bHRfbmFtZV0gPSBlcnJvcnMgKyBwYXJzZWRf
Y3Jhc2hfbG9nWzJdCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKICAgICAgICAgICAg
ICAgICBpZiBpbmNsdWRlX2Vycm9yczoKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJF
UlJPUjogRmFpbGVkIHRvIHJlYWQgJyVzJzogJXNcbiIgJSAocGF0aCwgc3RyKGUpKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jh
c2hsb2dzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw4IEBAIGZyb20gd2Via2l0cHkucG9ydC53aW4gaW1wb3J0IFdpblBvcnQK
IAogCiBkZWYgbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4ocHJvY2Vzc19uYW1lLCBwaWQp
OgotICAgIHJldHVybiAiIiJQcm9jZXNzOiAgICAgICAgIHtwcm9jZXNzX25hbWV9IFt7cGlkfV0K
KyAgICByZXR1cm4gIiIiTWF5IGhhdmUgZ2FyYmFnZSBhdCB0aGUgYmVnaW5uaW5nCitQcm9jZXNz
OiAgICAgICAgIHtwcm9jZXNzX25hbWV9IFt7cGlkfV0KIFBhdGg6ICAgICAgICAgICAgL1ZvbHVt
ZXMvRGF0YS9zbGF2ZS9zbm93bGVvcGFyZC1pbnRlbC1yZWxlYXNlLXRlc3RzL2J1aWxkL1dlYktp
dEJ1aWxkL1JlbGVhc2Uve3Byb2Nlc3NfbmFtZX0KIElkZW50aWZpZXI6ICAgICAge3Byb2Nlc3Nf
bmFtZX0KIFZlcnNpb246ICAgICAgICAgPz8/ICg/Pz8pCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9u
IDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9y
bWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgUGxhdGZvcm1J
bmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYub3NfbmFtZSA9IHNlbGYuX2RldGVybWluZV9vc19u
YW1lKHN5c19tb2R1bGUucGxhdGZvcm0pCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnbGlu
dXgnOgogICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX2xpbnV4
X3ZlcnNpb24oKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYu
b3NfbmFtZSA9PSAnb3BlbmJzZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnOgorICAgICAg
ICBpZiBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3BlbmJz
ZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnaW9zJzoK
ICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkK
ICAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ21hYycpOgogICAgICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKHBsYXRmb3JtX21v
ZHVsZS5tYWNfdmVyKClbMF0pCkBAIC02Myw2ICs2Myw5IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhv
YmplY3QpOgogICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25h
bWUgPT0gJ21hYycKIAorICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Lm9zX25hbWUgPT0gJ2lvcycKKwogICAgIGRlZiBpc193aW4oc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLm9zX25hbWUgPT0gJ3dpbicKIApAQCAtMTQxLDYgKzE0NCw4IEBAIGNsYXNzIFBsYXRm
b3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiBfZGV0ZXJtaW5lX29zX25hbWUoc2VsZiwgc3lzX3Bs
YXRmb3JtKToKICAgICAgICAgaWYgc3lzX3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAg
ICAgcmV0dXJuICdtYWMnCisgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnaW9zJzoKKyAgICAg
ICAgICAgIHJldHVybiAnaW9zJwogICAgICAgICBpZiBzeXNfcGxhdGZvcm0uc3RhcnRzd2l0aCgn
bGludXgnKToKICAgICAgICAgICAgIHJldHVybiAnbGludXgnCiAgICAgICAgIGlmIHN5c19wbGF0
Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSBvciBzeXNfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6CkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2su
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDkgQEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRl
ZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21hYycKIAor
ICAgIGRlZiBpc19pb3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ2lv
cycKKwogICAgIGRlZiBpc19saW51eChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFt
ZSA9PSAnbGludXgnCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9zeXN0ZW1ob3N0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkod29ya2luZyBjb3B5KQpA
QCAtNDAsOSArNDAsMTMgQEAgY2xhc3MgU3lzdGVtSG9zdChvYmplY3QpOgogICAgICAgICBzZWxm
LnVzZXIgPSB1c2VyLlVzZXIoKQogICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm1pbmZv
LlBsYXRmb3JtSW5mbyhzeXMsIHBsYXRmb3JtLCBzZWxmLmV4ZWN1dGl2ZSkKICAgICAgICAgc2Vs
Zi53b3Jrc3BhY2UgPSB3b3Jrc3BhY2UuV29ya3NwYWNlKHNlbGYuZmlsZXN5c3RlbSwgc2VsZi5l
eGVjdXRpdmUpCisgICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVm
IGNvcHlfY3VycmVudF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJuIGVudmlyb25t
ZW50LkVudmlyb25tZW50KG9zLmVudmlyb24uY29weSgpKQogCiAgICAgZGVmIG1ha2VfZmlsZV9s
b2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gZmlsZV9sb2NrLkZpbGVMb2NrKHBhdGgp
CisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lz
dGVtaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
OCw5ICs0OCwxMyBAQCBjbGFzcyBNb2NrU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgICAgICMg
RklYTUU6IFNob3VsZCB0aGlzIHRha2UgcG9pbnRlcnMgdG8gdGhlIGZpbGVzeXN0ZW0gYW5kIHRo
ZSBleGVjdXRpdmU/CiAgICAgICAgIHNlbGYud29ya3NwYWNlID0gTW9ja1dvcmtzcGFjZSgpCisg
ICAgICAgIHNlbGYuY2FjaGVkX2NyYXNoX2xvZ3MgPSBbXQogCiAgICAgZGVmIGNvcHlfY3VycmVu
dF9lbnZpcm9ubWVudChzZWxmKToKICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50KHsiTU9DS19F
TlZJUk9OX0NPUFkiOiAnMSd9KQogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBhdGgp
OgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9saWNh
dGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
ZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MzcsNiArNTM3LDcgQEAgY2xhc3MgUnVuVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG1v
Y2tfY3Jhc2hfcmVwb3J0ID0gbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4oJ0R1bXBSZW5k
ZXJUcmVlJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgIGhvc3Qu
Y2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3JlJ10KICAgICAgICAgaG9zdC5maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL0R1bXBSZW5k
ZXJUcmVlXzIwMTEtMDYtMTMtMTUwNzE5X3F1YWR6ZW4uY3Jhc2gnLCBtb2NrX2NyYXNoX3JlcG9y
dCkKICAgICAgICAgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBsb2dnaW5nX3J1bihbJ2ZhaWx1cmVz
L3VuZXhwZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcsICctLWR1bXAtcmVuZGVyLXRyZWUn
XSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBleHBlY3RlZF9jcmFz
aF9sb2cgPSBtb2NrX2NyYXNoX3JlcG9ydApAQCAtNTQ5LDYgKzU1MCw3IEBAIGNsYXNzIFJ1blRl
c3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVQKICAgICAgICAgICAgIHJldHVybgogICAgICAg
ICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKCdXZWJQ
cm9jZXNzJywgMTIzNDUpCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgIGhvc3Qu
Y2FjaGVkX2NyYXNoX2xvZ3MgPSBbJ2ZpbGUtdG8taWdub3JlJ10KICAgICAgICAgaG9zdC5maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL1dlYlByb2Nl
c3NfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1vY2tfY3Jhc2hfcmVwb3J0KQog
ICAgICAgICBsb2dnaW5nX3J1bihbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvd2ViLXByb2Nlc3MtY3Jh
c2gtd2l0aC1zdGRlcnIuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcv
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvdW5leHBlY3RlZC93ZWItcHJvY2Vzcy1j
cmFzaC13aXRoLXN0ZGVyci1jcmFzaC1sb2cudHh0JyksIG1vY2tfY3Jhc2hfcmVwb3J0KQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xOTAsNiArMTkwLDE3IEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAg
c2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fcmVz
dWx0c19kaXJlY3RvcnkpCiAKICAgICAgICAgc2VsZi5fcG9ydC5zZXR1cF90ZXN0X3J1bihzZWxm
Ll9vcHRpb25zLmRldmljZV9jbGFzcykKKworICAgICAgICAjIENhY2hlIGNyYXNoIGxvZ3MgYWxy
ZWFkeSBvbiBob3N0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmFzaF9sb2dfZGlyZWN0
b3J5ID0gc2VsZi5fcG9ydC5wYXRoX3RvX2NyYXNoX2xvZ3MoKQorICAgICAgICBleGNlcHQgTm90
SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZvciBp
IGluIHhyYW5nZShzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyk6CisgICAgICAgICAgICB0
YXJnZXRfaG9zdCA9IHNlbGYuX3BvcnQudGFyZ2V0X2hvc3QoaSkKKyAgICAgICAgICAgIGlmIG5v
dCB0YXJnZXRfaG9zdC5jYWNoZWRfY3Jhc2hfbG9nczoKKyAgICAgICAgICAgICAgICB0YXJnZXRf
aG9zdC5jYWNoZWRfY3Jhc2hfbG9ncyA9IHRhcmdldF9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5k
ZXIoY3Jhc2hfbG9nX2RpcmVjdG9yeSkKKwogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVm
IHJ1bihzZWxmLCBhcmdzKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShy
ZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQko
d29ya2luZyBjb3B5KQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgog
ICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwg
bmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6
CiAgICAgICAgIG5hbWVfc3RyID0gbmFtZSBvciAnPHVua25vd24gcHJvY2VzcyBuYW1lPicKICAg
ICAgICAgcGlkX3N0ciA9IHN0cihwaWQgb3IgJzx1bmtub3duPicpCiAgICAgICAgIHN0ZG91dF9s
aW5lcyA9IChzdGRvdXQgb3IgJzxlbXB0eT4nKS5kZWNvZGUoJ3V0ZjgnLCAncmVwbGFjZScpLnNw
bGl0bGluZXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZp
c2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDggQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBv
cnQpOgogICAgICAgICAgICAgICAgIHBpZCA9IGludCh0ZXN0LnNwbGl0KCItIilbMV0pCiAgICAg
ICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAg
ICAgICAgICAgaWYgbm90IGFueShlbnRyeVsxXSA9PSBwcm9jZXNzX25hbWUgYW5kIGVudHJ5WzJd
ID09IHBpZCBmb3IgZW50cnkgaW4gY3Jhc2hlZF9wcm9jZXNzZXMpOgorICAgICAgICAgICAgIyBp
T1MgbG9ncyB3b24ndCBoYXZlICcuYXBwJyBpbiB0aGUgcHJvY2VzcyBuYW1lLgorICAgICAgICAg
ICAgaWYgbm90IGFueSgoZW50cnlbMV0gPT0gcHJvY2Vzc19uYW1lIG9yIGVudHJ5WzFdID09IHBy
b2Nlc3NfbmFtZSArICcuYXBwJykgYW5kIGVudHJ5WzJdID09IHBpZCBmb3IgZW50cnkgaW4gY3Jh
c2hlZF9wcm9jZXNzZXMpOgogICAgICAgICAgICAgICAgICMgaWYgdGhpcyBpcyBhIG5ldyBjcmFz
aCwgdGhlbiBhcHBlbmQgdGhlIGxvZ3MKICAgICAgICAgICAgICAgICBsb2dzW3Rlc3RdID0gY3Jh
c2hfbG9nCiAgICAgICAgIHJldHVybiBsb2dzCkBAIC0xMTAsMTQgKzExMSwxNCBAQCBjbGFzcyBE
YXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxm
Lmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCiAgICAgICAgIHJldHVybiBjcmFzaF9s
b2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3Ro
YW4pCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0
ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9s
b2c9VHJ1ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9m
b3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhhdCB3ZSBk
byBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQogICAg
ICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUg
ZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91
cyBjcmFzaGVzIGdvaW5nIG9uLgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRp
bWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCiAgICAgICAgIGNy
YXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBz
ZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dz
KHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKICAg
ICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChz
ZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAgICB3aGlsZSBub3Qg
Y3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw5ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9y
dFRlc3RDCiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0
LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKIAogICAgIGRlZiB0ZXN0X2dldF9j
cmFzaF9sb2coc2VsZik6Ci0gICAgICAgICMgRGFyd2luIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBl
bHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCi0gICAg
ICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0K
LSAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQogICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9n
ZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGlt
ZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
ZXZpY2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgY2xhc3MgRGV2aWNl
KG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtX2RldmljZSk6CiAgICAg
ICAgIHNlbGYucGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlCiAgICAgICAgIHNlbGYu
bGlzdGVuaW5nX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5jYWNoZWRfY3Jhc2hfbG9ncyA9
IFtdCiAKICAgICBkZWYgbGlzdGVuaW5nX3BvcnQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxm
Lmxpc3RlbmluZ19zb2NrZXQ6CkBAIC02Myw2ICs2NCwxMSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0
KToKIAogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCiAKKyAgICBkZWYgc3lt
Ym9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgaGFz
YXR0cihzZWxmLnBsYXRmb3JtX2RldmljZSwgJ3N5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5zeW1ib2xpY2F0
ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0
ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBleGVjdXRp
dmUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5leGVjdXRpdmUK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjE3Njgw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMjQxLDcgKzI0MSw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAg
Y3Jhc2hlZF9waWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xvZz1jcmFzaF9sb2csIHBpZD1w
aWQpCiAKICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4pOgotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9j
cmFzaGVkX3Byb2Nlc3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJyLCBu
ZXdlcl90aGFuKQorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxm
Ll9jcmFzaGVkX3Byb2Nlc3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJy
LCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1zZWxmLl90YXJnZXRfaG9zdCkKIAogICAgIGRlZiBf
Y29tbWFuZF93cmFwcGVyKHNlbGYpOgogICAgICAgICAjIEhvb2sgZm9yIGluamVjdGluZyB2YWxn
cmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRhdGlvbiwgdXNlZCBieSBlLmcuIHRvb2xz
L3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2d0ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
Z3RrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgR3RrUG9ydChQ
b3J0KToKICAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAg
IHJldHVybiBzdXBlcihHdGtQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKSBh
bmQgc2VsZi5fZHJpdmVyX2NsYXNzKCkuY2hlY2tfZHJpdmVyKHNlbGYpCiAKLSAgICBkZWYgX2dl
dF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lID0gIldlYktpdFdl
YlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlByb2Nlc3MiIGVsc2UgbmFtZQogICAgICAgICByZXR1
cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFtZSwgcGlkLCBuZXdlcl90aGFuLCBzZWxmLl9maWxl
c3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZlcikuZ2VuZXJhdGVfY3Jhc2hfbG9nKHN0ZG91dCwg
c3RkZXJyKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5w
eQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBsb2dnaW5n
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdl
YmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Via2l0cHku
cG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIApAQCAtNjcsMTYgKzY4LDMzIEBAIGNsYXNzIElPU0Rl
dmljZVBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAn
LScgKyBtYWpvcl92ZXJzaW9uX251bWJlcgogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCiAKLSAg
ICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9i
bGVtLzMwNDk3OTkxPi4KICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgotICAgICAg
ICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlv
bnMoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09OX0RFVklDRV9U
RVNUSU5HKQorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25zKCkuaW9zX2NyYXNoX2xvZ19w
YXRoKCkKKworICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxm
LCBuZXdlcl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAgICBmb3IgZGV2aWNl
IGluIHNlbGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAgICAgICAgICAgIGNy
YXNoX2xvZyA9IENyYXNoTG9ncyhkZXZpY2UsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisg
ICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVk
ZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJuIGxv
Z19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQs
IHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zv
cl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0Ogor
ICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hf
bG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9m
biwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz13YWl0X2Zvcl9sb2csIHRhcmdldF9o
b3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2UgbmVlZCB0byBzZWFyY2ggZXZlcnkgZGV2
aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgZm9yIGRldmljZSBpbiBz
ZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAgICAgICBzdGRlcnJf
b3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9n
KG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwg
c2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNl
KQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGRl
cnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKIAorICAgICMgRklY
TUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0
OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9j
ZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9n
cyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIHJldHVybiB7
fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9j
ZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30KIApAQCAtOTAsOSArMTA4LDYg
QEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBkZWYgb3BlcmF0aW5nX3N5c3Rl
bShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwogCi0gICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICByZXR1
cm4gKHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBfY3JlYXRlX2RldmljZXMoc2VsZiwgZGV2aWNl
X2NsYXNzKToKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQko
cmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZp
Y2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDggQEAKICMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHRpbWUKKwogZnJvbSB3ZWJr
aXRweS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElPU0RldmljZVBvcnQKIGZyb20gd2Via2l0cHku
cG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAgLTM3LDEwICszOSwxNyBAQCBjbGFzcyBJT1NE
ZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5
c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRldmljZScsIHNlbGYu
bWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgIyBGSVhNRTogVXBkYXRlIHRl
c3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVm
IHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBwb3J0ID0g
c2VsZi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVF
cnJvcik6CisgICAgICAgICAgICBwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpCisKKyAgICBkZWYg
dGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
cG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2Vz
KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVu
ZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFs
c2UpCiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzA0
OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9zcGluZHVtcChzZWxmKToKICAgICAg
ICAgcGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDIx
NzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVm
IHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c19k
aXJlY3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2Fp
dF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUs
IHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBOb3RlIHRo
YXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRp
bWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1
c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBvZiBzaW11
bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM4MCw3ICszODAsNyBAQCBjbGFzcyBXaW5Q
b3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQog
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hf
bG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYu
cGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModGFy
Z2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQogICAgICAg
ICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAgIyBGSVhNRTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2Un
cmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4KICAgICAgICAgX2xvZy5kZWJ1ZygnbG9v
a2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw2
IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsdF9leGVjdXRhYmxlc19wYXRoKCdJbWFnZURp
ZmYnKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBz
dGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAg
ICAgbmFtZSA9ICJXUEVXZWJQcm9jZXNzIiBpZiBuYW1lID09ICJXZWJQcm9jZXNzIiBlbHNlIG5h
bWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9yKG5hbWUsIHBpZCwgbmV3ZXJf
dGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19kcml2ZXIpLmdlbmVyYXRlX2Ny
YXNoX2xvZyhzdGRvdXQsIHN0ZGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311873</attachid>
            <date>2017-06-02 15:16:50 -0700</date>
            <delta_ts>2017-06-05 09:51:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170602151650.patch</filename>
            <type>text/plain</type>
            <size>29853</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzczNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg1IEBACisyMDE3LTA2LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuX19pbml0
X18pOiBBY2NlcHQgb3B0aW9uYWwgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGlnbm9yZS4KKyAgICAg
ICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90ZW50aWFsIHBs
YXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0by4KKyAgICAg
ICAgKENyYXNoTG9ncy5fcGFyc2VfZGFyd2luX2NyYXNobG9nKTogU2hhcmUgY29kZSBmb3IgcGFy
c2luZyBvZiBEYXJ3aW4gY3Jhc2ggbG9ncy4KKyAgICAgICAgRG8gbm90IGFzc3VtZSB0aGF0IGEg
RGFyd2luIGNyYXNoIGxvZyBzdGFydHMgd2l0aCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKENyYXNo
TG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFJlbW92ZSAuYXBwIGluIHByb2Nlc3MgbmFt
ZSBmb3IgaU9TLCB1c2UKKyAgICAgICAgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgRGFyd2luIGNy
YXNoIGxvZ3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4uaXNf
Y3Jhc2hfbG9nKTogU2tpcCBjcmFzaCBsb2dzIHBhc3NlZCBpbnRvIHRoaXMKKyAgICAgICAgb2Jq
ZWN0IHNvIHRoYXQgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBzeXN0ZW0gYmVmb3JlIHRlc3Rp
bmcgYXJlIG5vdCBwYXJzZWQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193
aW4uaXNfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xv
Z3NfZGFyd2luLmlzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5k
X2FsbF9sb2dzX2Rhcndpbik6IFVzZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyBEYXJ3aW4gY3Jh
c2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaCBsb2dzIG1heSBub3QgaGF2ZSB0aGVpciBwcm9jZXNzIG9uIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8u
cHk6CisgICAgICAgIFBsYXRmb3JtSW5mby5fX2luaXRfXyk6IFVzZSBwbGF0Zm9ybV9tb2R1bGUu
cmVsZWFzZSgpIGFzIHRoZSBvc192ZXJzaW9uIGZvciBpT1MgZGV2aWNlLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1p
bmVfb3NfbmFtZSk6IEEgcGxhdGZvcm0gbmFtZSBvZiAnaW9zJyBtZWFucyB0aGF0IHRoZSBvcyBu
YW1lIGlzICdpb3MnLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uaXNfaW9zKTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhv
c3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQpOiBUaGUgc3ltYm9saWNhdGVkIGNyYXNoIGxvZyBmb3IgbW9zdAorICAgICAgICBzeXN0ZW1z
IGlzIGp1c3QgdGhlIGNyYXNobG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHk6
CisgICAgICAgIChNb2NrU3lzdGVtSG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVk
KTogVGhlIHN5bWJvbGljYXRlZCBjcmFzaCBsb2cgZm9yIG1vc3QKKyAgICAgICAgc3lzdGVtcyBp
cyBqdXN0IHRoZSBjcmFzaGxvZywgdXNlIHRoaXMgYmVoYXZpb3IgYnkgZGVmYXVsdC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQp
OgorICAgICAgICAoQXBwbGVQb3J0Lmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKTogTWFwIGEg
aG9zdCB0byBhIGxpc3Qgb2YgY3Jhc2ggbG9ncyB0byBiZSBza2lwcGVkCisgICAgICAgIHdoZW4g
cGFyc2luZyBjcmFzaCBsb2dzLgorICAgICAgICAoQXBwbGVQb3J0LnNldHVwX3Rlc3RfcnVuKTog
R2VuZXJhdGUgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGJlIHNraXBwZWQgYmFzZWQgb24gdGhlIGNy
YXNoCisgICAgICAgIGxvZ3MgYWxyZWFkeSBvbiB0aGUgc3lzdGVtIHdoZW4gdGVzdHMgYXJlIHJ1
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBv
cnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGlu
ZyBjcmFzaCBsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6
CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGly
KTogUGFzcyBsaXN0IG9mIGNyYXNoIGxvZ3MgdG8gYmUgc2tpcHBlZCB0bworICAgICAgICBDcmFz
aExvZ3Mgb2JqZWN0LgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mg
b3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MsIHBhc3MgbGlzdCBv
ZiBjcmFzaAorICAgICAgICBsb2dzIHRvIGJlIHNraXBwZWQgdG8gQ3Jhc2hMb2dzIG9iamVjdC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5OgorICAg
ICAgICAoRGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBSZW1vdmVkIHVudXNlZCBsb2Nh
bCBmdW5jdGlvbi4KKyAgICAgICAgKERhcndpblRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nLmZha2Vf
dGltZV9jYik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rldmlj
ZS5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEluaXRpYWxpemUgY2FjaGVkX2NyYXNo
X2xvZ3MgYXJyYXkuCisgICAgICAgIChEZXZpY2Uuc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25l
ZWRlZCk6IElmIHRoZSBwbGF0Zm9ybSBkZXZpY2UgaGFzIGEgZnVuY3Rpb24gd2l0aCB0aGlzCisg
ICAgICAgIG5hbWUsIGNhbGwgaXQuIE90aGVyd2lzZSwgYXNzdW1lIHRoZSBkZWZhdWx0IGJlaGF2
aW9yIGFuZCByZWFkIHRoZSBmaWxlIGF0IHRoZSBwcm92aWRlZCBwYXRoLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX2dldF9jcmFz
aF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3Mu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1Bv
cnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGlu
ZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAg
ICAgICAgKElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBDYWxsIHN1cGVyJ3Mgc2V0dXBfdGVzdF9y
dW4uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAg
ICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6CisgICAgICAgIChJ
T1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25z
IGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9v
a19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQg
ZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBsb2dzIGFuZCBwYXNzIGxpc3Qgb2YgY3Jhc2ggbG9n
cyB0byBpZ25vcmUgdG8gZWFjaCBpbnN0YW5jZSBvZiBDcmFzaExvZ3MuCisgICAgICAgIChJT1NE
ZXZpY2VQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogU2VhcmNoIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGhv
c3QgZm9yIGEgY3Jhc2ggbG9nIGlmIGEgdGFyZ2V0CisgICAgICAgIGhvc3QgaXMgc3BlY2lmaWVk
LiBFbHNlLCBzZWFyY2ggYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGZvciB0aGUgc3BlY2lmaWVkIGNy
YXNoLWxvZy4KKyAgICAgICAgKElPU0RldmljZVBvcnQubG9va19mb3JfbmV3X2NyYXNoX2xvZ3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2NyYXNobG9nX3BhdGgpOiBX
aXRob3V0IGFwcGxlX2FkZGl0aW9ucywgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQuCisg
ICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0Ll9nZXRf
Y3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hs
b2dzLCBwYXNzIGxpc3Qgb2YgY3Jhc2gKKyAgICAgICAgbG9ncyB0byBiZSBza2lwcGVkIHRvIENy
YXNoTG9ncyBvYmplY3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weToK
KyAgICAgICAgKFdQRVBvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBo
b3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisKIDIwMTctMDYtMDIgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBjbGllbnRzIHRvIG92ZXJyaWRlIHZp
ZXdwb3J0IHNpemUgZm9yIENTUyB2aWV3cG9ydCB1bml0cy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQkocmV2aXNpb24gMjE3
NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjcsNDYgKzI3LDY3IEBACiAjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCi1pbXBvcnQgY29kZWNzCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBsb2dn
aW5nCiBpbXBvcnQgcmUKIAogCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
KwogY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBHTE9CQUxfUElEX1JFR0VYID0gcmUu
Y29tcGlsZShyJ1xzK0dsb2JhbFxzK1BJRDpccytcWyg/UDxwaWQ+XGQrKVxdJykKICAgICBFWElU
X1BST0NFU1NfUElEX1JFR0VYID0gcmUuY29tcGlsZShyJ0V4aXQgcHJvY2VzcyBcZCs6KD9QPHBp
ZD5cdyspLCBjb2RlJykKKyAgICBEQVJXSU5fUFJPQ0VTU19SRUdFWCA9IHJlLmNvbXBpbGUocide
UHJvY2VzczpccysoP1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgY3Jhc2hfbG9nX2RpcmVjdG9yeSk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGhvc3QsIGNyYXNoX2xvZ19kaXJlY3RvcnksIGNyYXNoX2xvZ3NfdG9f
c2tpcD1bXSk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYuX2NyYXNo
X2xvZ19kaXJlY3RvcnkgPSBjcmFzaF9sb2dfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuX2NyYXNo
X2xvZ3NfdG9fc2tpcCA9IGNyYXNoX2xvZ3NfdG9fc2tpcAogCiAgICAgZGVmIGZpbmRfbmV3ZXN0
X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUsIHBpZD1Ob25lLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwg
bmV3ZXJfdGhhbj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMo
KToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9ob3N0
LnBsYXRmb3JtLmlzX2lvcygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0
X2xvZ19kYXJ3aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
KQogICAgICAgICBlbGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCk6CiAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX3dpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5j
bHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYg
ZmluZF9hbGxfbG9ncyhzZWxmLCBpbmNsdWRlX2Vycm9ycz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25l
KToKLSAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKKyAgICAgICAgaWYg
c2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKSBvciBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX2lv
cygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsX2xvZ3NfZGFyd2luKGluY2x1
ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAgICByZXR1cm4gTm9uZQogCisgICAgZGVmIF9w
YXJzZV9kYXJ3aW5fY3Jhc2hsb2coc2VsZiwgcGF0aCk6CisgICAgICAgIGNvbnRlbnRzID0gc2Vs
Zi5faG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAgICAgIGlm
IG5vdCBjb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKyAg
ICAgICAgZm9yIGxpbmUgaW4gY29udGVudHMuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgbWF0
Y2ggPSBDcmFzaExvZ3MuREFSV0lOX1BST0NFU1NfUkVHRVgubWF0Y2gobGluZSkKKyAgICAgICAg
ICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIHJldHVybiAobWF0Y2guZ3JvdXAoJ3Byb2Nl
c3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKSwgY29udGVudHMpCisgICAgICAgIHJl
dHVybiAoTm9uZSwgTm9uZSwgY29udGVudHMpCisKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19k
YXJ3aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
KToKKyAgICAgICAgaWYgcHJvY2Vzc19uYW1lLmVuZHN3aXRoKCcuYXBwJyk6CisgICAgICAgICAg
ICBuYW1lX3dpdGhvdXRfYXBwID0gcHJvY2Vzc19uYW1lWzotNF0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIG5hbWVfd2l0aG91dF9hcHAgPSBwcm9jZXNzX25hbWUKKwogICAgICAgICBkZWYg
aXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4g
YmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRz
d2l0aCgiLmNyYXNoIikKKyAgICAgICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUp
IGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgICAgIHJldHVybiAoKGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1l
ICsgJ18nKSBvciBiYXNlbmFtZS5zdGFydHN3aXRoKG5hbWVfd2l0aG91dF9hcHAgKyAnXycpKSBh
bmQgKGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSkgb3IKKyAgICAgICAgICAgICAgICAgICAg
KChwcm9jZXNzX25hbWUgaW4gYmFzZW5hbWUgb3IgbmFtZV93aXRob3V0X2FwcCBpbiBiYXNlbmFt
ZSkgYW5kIGJhc2VuYW1lLmVuZHN3aXRoKCcuaXBzJykpKQogCiAgICAgICAgIGxvZ3MgPSBzZWxm
Ll9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwg
ZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQotICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUu
Y29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCsp
XF0kJykKICAgICAgICAgZXJyb3JzID0gJycKICAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQo
c29ydGVkKGxvZ3MpKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBub3Qg
bmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90
aGFuOgotICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRf
dGV4dF9maWxlKHBhdGgpCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9y
ZWdleC5tYXRjaChmWzA6Zi5maW5kKCdcbicpXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0
Y2ggYW5kIG1hdGNoLmdyb3VwKCdwcm9jZXNzX25hbWUnKSA9PSBwcm9jZXNzX25hbWUgYW5kIChw
aWQgaXMgTm9uZSBvciBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKSA9PSBwaWQpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycyArIGYKKyAgICAgICAgICAgICAgICAgICAgcGFy
c2VkX2NyYXNoX2xvZyA9IHNlbGYuX3BhcnNlX2Rhcndpbl9jcmFzaGxvZyhwYXRoKQorICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyc2VkX2NyYXNoX2xvZ1swXSA9PSBwcm9jZXNzX25hbWUgb3Ig
cGFyc2VkX2NyYXNoX2xvZ1swXSA9PSBuYW1lX3dpdGhvdXRfYXBwKSBhbmQgKHBpZCBpcyBOb25l
IG9yIHBhcnNlZF9jcmFzaF9sb2dbMV0gPT0gcGlkKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcnMgKyBwYXJzZWRfY3Jhc2hfbG9nWzJdCiAgICAgICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKICAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yczoKICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVkIHRvIHJlYWQgJyVzJzogJXNcbiIg
JSAocGF0aCwgc3RyKGUpKQpAQCAtODAsNiArMTAxLDggQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVj
dCk6CiAKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBw
aWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xv
ZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRo
LCBiYXNlbmFtZSkgaW4gc2VsZi5fY3Jhc2hfbG9nc190b19za2lwOgorICAgICAgICAgICAgICAg
IHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNy
YXNoTG9nIikKIAogICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3Vu
ZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykK
QEAgLTExNywzNCArMTQwLDM1IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAgZGVm
IF9maW5kX2FsbF9sb2dzX2RhcndpbihzZWxmLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6
CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKLSAgICAg
ICAgICAgIHJldHVybiBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAgICAgIGlm
IGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFt
ZS5lbmRzd2l0aCgnLmNyYXNoJykgb3IgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKQogCiAgICAg
ICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hf
bG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQotICAgICAgICBmaXJzdF9s
aW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+Liop
IFxbKD9QPHBpZD5cZCspXF0kJykKICAgICAgICAgZXJyb3JzID0gJycKICAgICAgICAgY3Jhc2hf
bG9ncyA9IHt9CiAgICAgICAgIGZvciBwYXRoIGluIHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAg
ICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLm10aW1lKHBhdGgpID4gbmV3ZXJfdGhhbjoKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X25hbWUgPSAiVW5rbm93biIKLSAgICAgICAgICAgICAgICAgICAgcGlk
ID0gMAotICAgICAgICAgICAgICAgICAgICBsb2dfY29udGVudHMgPSBzZWxmLl9ob3N0LmZpbGVz
eXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2Ny
YXNoX2xvZyA9IHNlbGYuX3BhcnNlX2Rhcndpbl9jcmFzaGxvZyhwYXRoKQorICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgcGFyc2VkX2NyYXNoX2xvZ1syXToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9sb2cud2FybignTm8gZGF0YSBpbiBjcmFzaCBsb2cgYXQge30nLmZvcm1hdChwYXRoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgICAgICAgICAg
IyBWZXJpZnkgdGltZXN0YW1wIGZyb20gbG9nIGNvbnRlbnRzCi0gICAgICAgICAgICAgICAgICAg
IGNyYXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQor
ICAgICAgICAgICAgICAgICAgICBjcmFzaF90aW1lID0gc2VsZi5nZXRfdGltZXN0YW1wX2Zyb21f
bG9nKHBhcnNlZF9jcmFzaF9sb2dbMl0pCiAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNoX3Rp
bWUgaXMgbm90IE5vbmUgYW5kIG5ld2VyX3RoYW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChm
bG9hdChuZXdlcl90aGFuKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUg
PCBzdGFydF90aW1lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAg
ICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGxvZ19jb250
ZW50c1swOmxvZ19jb250ZW50cy5maW5kKCdcbicpXSkKLSAgICAgICAgICAgICAgICAgICAgaWYg
bWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWUgPSBtYXRjaC5ncm91
cCgncHJvY2Vzc19uYW1lJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpZCA9IHN0cihtYXRj
aC5ncm91cCgncGlkJykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IHBy
b2Nlc3NfbmFtZSArICItIiArIHBpZAorICAgICAgICAgICAgICAgICAgICBpZiBwYXJzZWRfY3Jh
c2hfbG9nWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUgPSBwYXJzZWRf
Y3Jhc2hfbG9nWzBdICsgIi0iICsgc3RyKHBhcnNlZF9jcmFzaF9sb2dbMV0pCiAKICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgcmVzdWx0X25hbWUgaW4gY3Jhc2hfbG9nczoKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gcmVzdWx0X25hbWUgKyAiLTEiCi0gICAgICAgICAg
ICAgICAgICAgIGNyYXNoX2xvZ3NbcmVzdWx0X25hbWVdID0gZXJyb3JzICsgbG9nX2NvbnRlbnRz
CisgICAgICAgICAgICAgICAgICAgIGNyYXNoX2xvZ3NbcmVzdWx0X25hbWVdID0gZXJyb3JzICsg
cGFyc2VkX2NyYXNoX2xvZ1syXQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAg
ICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6CiAgICAgICAgICAgICAgICAgICAgIGVycm9y
cyArPSAiRVJST1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQCBmcm9tIHdlYmtpdHB5LnBvcnQud2luIGltcG9ydCBX
aW5Qb3J0CiAKIAogZGVmIG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKHByb2Nlc3NfbmFt
ZSwgcGlkKToKLSAgICByZXR1cm4gIiIiUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1lfSBb
e3BpZH1dCisgICAgcmV0dXJuICIiIk1heSBoYXZlIGdhcmJhZ2UgYXQgdGhlIGJlZ2lubmluZwor
UHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1lfSBbe3BpZH1dCiBQYXRoOiAgICAgICAgICAg
IC9Wb2x1bWVzL0RhdGEvc2xhdmUvc25vd2xlb3BhcmQtaW50ZWwtcmVsZWFzZS10ZXN0cy9idWls
ZC9XZWJLaXRCdWlsZC9SZWxlYXNlL3twcm9jZXNzX25hbWV9CiBJZGVudGlmaWVyOiAgICAgIHtw
cm9jZXNzX25hbWV9CiBWZXJzaW9uOiAgICAgICAgID8/PyAoPz8/KQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShy
ZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFBs
YXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1p
bmVfb3NfbmFtZShzeXNfbW9kdWxlLnBsYXRmb3JtKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUg
PT0gJ2xpbnV4JzoKICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWlu
ZV9saW51eF92ZXJzaW9uKCkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBv
ciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJzoK
KyAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0g
J29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25hbWUgPT0g
J2lvcyc6CiAgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVs
ZWFzZSgpCiAgICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCdtYWMnKToKICAgICAg
ICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9tYWNfdmVyc2lvbihwbGF0
Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQpAQCAtNjMsNiArNjMsOSBAQCBjbGFzcyBQbGF0Zm9y
bUluZm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5vc19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5vc19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfd2luKHNlbGYpOgogICAgICAg
ICByZXR1cm4gc2VsZi5vc19uYW1lID09ICd3aW4nCiAKQEAgLTE0MSw2ICsxNDQsOCBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgX2RldGVybWluZV9vc19uYW1lKHNlbGYs
IHN5c19wbGF0Zm9ybSk6CiAgICAgICAgIGlmIHN5c19wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAg
ICAgICAgICAgIHJldHVybiAnbWFjJworICAgICAgICBpZiBzeXNfcGxhdGZvcm0gPT0gJ2lvcyc6
CisgICAgICAgICAgICByZXR1cm4gJ2lvcycKICAgICAgICAgaWYgc3lzX3BsYXRmb3JtLnN0YXJ0
c3dpdGgoJ2xpbnV4Jyk6CiAgICAgICAgICAgICByZXR1cm4gJ2xpbnV4JwogICAgICAgICBpZiBz
eXNfcGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykgb3Igc3lzX3BsYXRmb3JtID09ICdjeWd3aW4n
OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5m
b19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToK
ICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdt
YWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1l
ID09ICdpb3MnCisKICAgICBkZWYgaXNfbGludXgoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
Lm9zX25hbWUgPT0gJ2xpbnV4JwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vc3lzdGVtaG9zdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDMgKzQ2LDYgQEAgY2xhc3MgU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAg
ZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gZmlsZV9sb2Nr
LkZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRl
ZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRf
ZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5
c3RlbWhvc3RfbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw2IEBAIGNsYXNzIE1vY2tTeXN0ZW1Ib3N0KG9iamVjdCk6
CiAKICAgICBkZWYgbWFrZV9maWxlX2xvY2soc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBN
b2NrRmlsZUxvY2socGF0aCkKKworICAgIGRlZiBzeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVl
ZGVkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlc3lzdGVtLnJlYWRfdGV4
dF9maWxlKHBhdGgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CShyZXZp
c2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHkJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAg
ICMgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzCiAgICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9
IFtdCiAgICAgQVJDSElURUNUVVJFUyA9IFtdCisgICAgX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hs
b2dzID0ge30KIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0
X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgpAQCAtOTIsNiArOTMsMTcgQEAg
Y2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUucmVw
bGFjZSgnLXdrMicsICcnKQogICAgICAgICBzZWxmLl92ZXJzaW9uID0gc2VsZi5fc3RyaXBfcG9y
dF9uYW1lX3ByZWZpeChwb3J0X25hbWUpCiAKKyAgICBkZWYgaG9zdF90b19jcmFzaF9sb2dzX3Rv
X3NraXAoc2VsZiwgaG9zdCk6CisgICAgICAgIGlmIGhvc3QgaW4gc2VsZi5faG9zdF90b19leGlz
dGluZ19jcmFzaGxvZ3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faG9zdF90b19leGlzdGlu
Z19jcmFzaGxvZ3NbaG9zdF0KKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgc2V0dXBfdGVz
dF9ydW4oc2VsZiwgZGV2aWNlX2NsYXNzPU5vbmUpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
aW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJykgb3IgMSkpOgorICAgICAgICAg
ICAgaG9zdCA9IHNlbGYudGFyZ2V0X2hvc3QoaSkKKyAgICAgICAgICAgIGlmIG5vdCBob3N0IGlu
IHNlbGYuX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzOgorICAgICAgICAgICAgICAgIHNlbGYu
X2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzW2hvc3RdID0gaG9zdC5maWxlc3lzdGVtLmZpbGVz
X3VuZGVyKHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisKICAgICBkZWYgZGVmYXVsdF90aW1l
b3V0X21zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycp
OgogICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw3ICsxMzY0LDcgQEAgY2xhc3Mg
UG9ydChvYmplY3QpOgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6CiAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxm
LCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFy
Z2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWVfc3RyID0gbmFtZSBvciAnPHVua25vd24gcHJv
Y2VzcyBuYW1lPicKICAgICAgICAgcGlkX3N0ciA9IHN0cihwaWQgb3IgJzx1bmtub3duPicpCiAg
ICAgICAgIHN0ZG91dF9saW5lcyA9IChzdGRvdXQgb3IgJzxlbXB0eT4nKS5kZWNvZGUoJ3V0Zjgn
LCAncmVwbGFjZScpLnNwbGl0bGluZXMoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTcgKzEwNywxNyBAQCBjbGFzcyBE
YXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHJldHVybiBsb2dzCiAKICAgICBkZWYgX2xv
b2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAg
ICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9s
b2dzKCkpCisgICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0
aF90b19jcmFzaF9sb2dzKCksIGNyYXNoX2xvZ3NfdG9fc2tpcD1zZWxmLmhvc3RfdG9fY3Jhc2hf
bG9nc190b19za2lwKHNlbGYuaG9zdCkpCiAgICAgICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9h
bGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCiAKLSAg
ICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRy
dWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNw
aW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQogICAgICAgICAjIFJl
cG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJp
ZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVz
IGdvaW5nIG9uLgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAg
ICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9
ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhf
dG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9o
b3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190
b19za2lwPXNlbGYuaG9zdF90b19jcmFzaF9sb2dzX3RvX3NraXAodGFyZ2V0X2hvc3Qgb3Igc2Vs
Zi5ob3N0KSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93
ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAg
ICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIx
NzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNyw5ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRf
dGVzdGNhc2UuUG9ydFRlc3RDCiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0
cyhzZWxmLCBwb3J0LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKIAogICAgIGRl
ZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6Ci0gICAgICAgICMgRGFyd2luIGNyYXNoIGxvZ3Mg
YXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3Qg
Y3Jhc2guCi0gICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRpbWVzID0g
WzAsIDIwLCA0MF0KLSAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQogICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAg
ICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5v
bmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kZXZpY2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBA
IGNsYXNzIERldmljZShvYmplY3QpOgogCiAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9
IE5vbmUKIAorICAgIGRlZiBzeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHNlbGYsIHBh
dGgpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGxhdGZvcm1fZGV2aWNlLCAnc3ltYm9saWNh
dGVfY3Jhc2hfbG9nX2lmX25lZWRlZCcpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZv
cm1fZGV2aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkKKyAgICAgICAg
cmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQorCiAgICAgQHByb3Bl
cnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZv
cm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVy
LnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hf
bG9nPWNyYXNoX2xvZywgcGlkPXBpZCkKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9n
ZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3Bp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0
Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVk
X3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PXNlbGYuX3Rhcmdl
dF9ob3N0KQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoc2VsZik6CiAgICAgICAgICMgSG9v
ayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9u
LCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfdGVzdHMucHkuCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAs
NyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBu
ZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIHN1cGVyKEd0a1BvcnQsIHNlbGYpLmNoZWNrX3N5
c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2ZXJfY2xhc3MoKS5jaGVja19kcml2ZXIo
c2VsZikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwg
c3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAg
ICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxz
ZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRvcihuYW1lLCBwaWQsIG5l
d2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0
ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIGNsYXNzIElPU1BvcnQo
RGFyd2luUG9ydCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hcHBfaWRlbnRpZmllcl9mcm9tX2J1
bmRsZShzZWxmLl9wYXRoX3RvX2RyaXZlcigpKSwKICAgICAgICAgICAgICAgICBzZWxmLmxheW91
dF90ZXN0c19kaXIoKSwKICAgICAgICAgICAgICkKKyAgICAgICAgc3VwZXIoSU9TUG9ydCwgc2Vs
Zikuc2V0dXBfdGVzdF9ydW4oZGV2aWNlX2NsYXNzKQogCiAgICAgZGVmIGNsZWFuX3VwX3Rlc3Rf
cnVuKHNlbGYpOgogICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1
bigpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBsb2dnaW5nCiAKIGZy
b20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5
LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZyb20gd2Via2l0cHkucG9ydC5p
b3MgaW1wb3J0IElPU1BvcnQKIApAQCAtNjcsMTYgKzY4LDMzIEBAIGNsYXNzIElPU0RldmljZVBv
cnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBt
YWpvcl92ZXJzaW9uX251bWJlcgogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCiAKLSAgICAjIEZJ
WE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzMw
NDk3OTkxPi4KICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgotICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKToK
KyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09OX0RFVklDRV9URVNUSU5H
KQorICAgICAgICByZXR1cm4gYXBwbGVfYWRkaXRpb25zKCkuaW9zX2NyYXNoX2xvZ19wYXRoKCkK
KworICAgIGRlZiBfbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2RpcihzZWxmLCBuZXdl
cl90aGFuKToKKyAgICAgICAgbG9nX2xpc3QgPSB7fQorICAgICAgICBmb3IgZGV2aWNlIGluIHNl
bGYuX2RldmljZV9mb3Jfd29ya2VyX251bWJlcl9tYXAoKToKKyAgICAgICAgICAgIGNyYXNoX2xv
ZyA9IENyYXNoTG9ncyhkZXZpY2UsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCksIGNyYXNoX2xv
Z3NfdG9fc2tpcD1zZWxmLmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKGRldmljZSkpCisgICAg
ICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9l
cnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJuIGxvZ19s
aXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0
ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9s
b2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0OgorICAg
ICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9n
KG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwg
c2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz13YWl0X2Zvcl9sb2csIHRhcmdldF9ob3N0
PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2UgbmVlZCB0byBzZWFyY2ggZXZlcnkgZGV2aWNl
IHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxm
Ll9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAgICAgICBzdGRlcnJfb3V0
LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xl
ZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQor
ICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIs
IGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKIAorICAgICMgRklYTUU6
IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5
OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhz
ZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIHJldHVybiB7fQot
CiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNz
ZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30KIApAQCAtOTAsOSArMTA4LDYgQEAg
Y2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShz
ZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwogCi0gICAgZGVmIF9nZXRfY3Jhc2hf
bG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49
Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICByZXR1cm4g
KHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBfY3JlYXRlX2RldmljZXMoc2VsZiwgZGV2aWNlX2Ns
YXNzKToKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Vf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDggQEAKICMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHRpbWUKKwogZnJvbSB3ZWJraXRw
eS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElPU0RldmljZVBvcnQKIGZyb20gd2Via2l0cHkucG9y
dCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAgLTM3LDEwICszOSwxNyBAQCBjbGFzcyBJT1NEZXZp
Y2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3Rl
bShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRldmljZScsIHNlbGYubWFr
ZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgIyBGSVhNRTogVXBkYXRlIHRlc3Rz
IHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVmIHRl
c3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBwb3J0ID0gc2Vs
Zi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJv
cik6CisgICAgICAgICAgICBwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpCisKKyAgICBkZWYgdGVz
dF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9y
dF9uYW1lPXNlbGYucG9ydF9uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1
bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVy
VHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2Up
CiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzA0OTc5
OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9zcGluZHVtcChzZWxmKToKICAgICAgICAg
cGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDIxNzY4
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVmIHBh
dGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c19kaXJl
Y3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9m
b3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdh
aXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBOb3RlIHRoYXQg
d2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRpbWUK
ICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1c2gg
dGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBvZiBzaW11bHRh
bmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM4MCw3ICszODAsNyBAQCBjbGFzcyBXaW5Qb3J0
KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAg
ICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9n
ID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0
aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModGFyZ2V0
X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dz
X3RvX3NraXA9c2VsZi5ob3N0X3RvX2NyYXNoX2xvZ3NfdG9fc2tpcCh0YXJnZXRfaG9zdCBvciBz
ZWxmLmhvc3QpKQogICAgICAgICBub3cgPSB0aW1lX2ZuKCkKICAgICAgICAgIyBGSVhNRTogZGVs
ZXRlIHRoaXMgYWZ0ZXIgd2UncmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4KICAgICAg
ICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwg
c3RyKHBpZCkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZpc2lvbiAy
MTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCw2IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVmIF9wYXRo
X3RvX2ltYWdlX2RpZmYoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsdF9leGVjdXRh
Ymxlc19wYXRoKCdJbWFnZURpZmYnKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5h
bWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgorICAgIGRlZiBfZ2V0X2NyYXNo
X2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0YXJnZXRf
aG9zdD1Ob25lKToKICAgICAgICAgbmFtZSA9ICJXUEVXZWJQcm9jZXNzIiBpZiBuYW1lID09ICJX
ZWJQcm9jZXNzIiBlbHNlIG5hbWUKICAgICAgICAgcmV0dXJuIEdEQkNyYXNoTG9nR2VuZXJhdG9y
KG5hbWUsIHBpZCwgbmV3ZXJfdGhhbiwgc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcGF0aF90b19k
cml2ZXIpLmdlbmVyYXRlX2NyYXNoX2xvZyhzdGRvdXQsIHN0ZGVycikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312013</attachid>
            <date>2017-06-05 09:51:04 -0700</date>
            <delta_ts>2017-06-05 11:12:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170605095103.patch</filename>
            <type>text/plain</type>
            <size>30584</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzczNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg3IEBACisyMDE3LTA2LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuX19pbml0
X18pOiBBY2NlcHQgb3B0aW9uYWwgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGlnbm9yZS4KKyAgICAg
ICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90ZW50aWFsIHBs
YXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0by4KKyAgICAg
ICAgKENyYXNoTG9ncy5fcGFyc2VfZGFyd2luX2NyYXNobG9nKTogU2hhcmUgY29kZSBmb3IgcGFy
c2luZyBvZiBEYXJ3aW4gY3Jhc2ggbG9ncy4KKyAgICAgICAgRG8gbm90IGFzc3VtZSB0aGF0IGEg
RGFyd2luIGNyYXNoIGxvZyBzdGFydHMgd2l0aCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKENyYXNo
TG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFJlbW92ZSAuYXBwIGluIHByb2Nlc3MgbmFt
ZSBmb3IgaU9TLCB1c2UKKyAgICAgICAgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgRGFyd2luIGNy
YXNoIGxvZ3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4uaXNf
Y3Jhc2hfbG9nKTogU2tpcCBjcmFzaCBsb2dzIHBhc3NlZCBpbnRvIHRoaXMKKyAgICAgICAgb2Jq
ZWN0IHNvIHRoYXQgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBzeXN0ZW0gYmVmb3JlIHRlc3Rp
bmcgYXJlIG5vdCBwYXJzZWQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193
aW4uaXNfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xv
Z3NfZGFyd2luLmlzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5k
X2FsbF9sb2dzX2Rhcndpbik6IFVzZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyBEYXJ3aW4gY3Jh
c2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaCBsb2dzIG1heSBub3QgaGF2ZSB0aGVpciBwcm9jZXNzIG9uIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8u
cHk6CisgICAgICAgIFBsYXRmb3JtSW5mby5fX2luaXRfXyk6IFVzZSBwbGF0Zm9ybV9tb2R1bGUu
cmVsZWFzZSgpIGFzIHRoZSBvc192ZXJzaW9uIGZvciBpT1MgZGV2aWNlLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1p
bmVfb3NfbmFtZSk6IEEgcGxhdGZvcm0gbmFtZSBvZiAnaW9zJyBtZWFucyB0aGF0IHRoZSBvcyBu
YW1lIGlzICdpb3MnLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uaXNfaW9zKTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhv
c3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQpOiBUaGUgc3ltYm9saWNhdGVkIGNyYXNoIGxvZyBmb3IgbW9zdAorICAgICAgICBzeXN0ZW1z
IGlzIGp1c3QgdGhlIGNyYXNobG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHk6
CisgICAgICAgIChNb2NrU3lzdGVtSG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVk
KTogVGhlIHN5bWJvbGljYXRlZCBjcmFzaCBsb2cgZm9yIG1vc3QKKyAgICAgICAgc3lzdGVtcyBp
cyBqdXN0IHRoZSBjcmFzaGxvZywgdXNlIHRoaXMgYmVoYXZpb3IgYnkgZGVmYXVsdC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQp
OgorICAgICAgICAoQXBwbGVQb3J0Lmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKTogTWFwIGEg
aG9zdCB0byBhIGxpc3Qgb2YgY3Jhc2ggbG9ncyB0byBiZSBza2lwcGVkCisgICAgICAgIHdoZW4g
cGFyc2luZyBjcmFzaCBsb2dzLgorICAgICAgICAoQXBwbGVQb3J0LnNldHVwX3Rlc3RfcnVuKTog
R2VuZXJhdGUgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGJlIHNraXBwZWQgYmFzZWQgb24gdGhlIGNy
YXNoCisgICAgICAgIGxvZ3MgYWxyZWFkeSBvbiB0aGUgc3lzdGVtIHdoZW4gdGVzdHMgYXJlIHJ1
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBv
cnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGlu
ZyBjcmFzaCBsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6
CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGly
KTogUGFzcyBsaXN0IG9mIGNyYXNoIGxvZ3MgdG8gYmUgc2tpcHBlZCB0bworICAgICAgICBDcmFz
aExvZ3Mgb2JqZWN0LgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mg
b3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MsIHBhc3MgbGlzdCBv
ZiBjcmFzaAorICAgICAgICBsb2dzIHRvIGJlIHNraXBwZWQgdG8gQ3Jhc2hMb2dzIG9iamVjdC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5OgorICAg
ICAgICAoRGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBSZW1vdmVkIHVudXNlZCBsb2Nh
bCBmdW5jdGlvbi4KKyAgICAgICAgKERhcndpblRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nLmZha2Vf
dGltZV9jYik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rldmlj
ZS5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEluaXRpYWxpemUgY2FjaGVkX2NyYXNo
X2xvZ3MgYXJyYXkuCisgICAgICAgIChEZXZpY2Uuc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25l
ZWRlZCk6IElmIHRoZSBwbGF0Zm9ybSBkZXZpY2UgaGFzIGEgZnVuY3Rpb24gd2l0aCB0aGlzCisg
ICAgICAgIG5hbWUsIGNhbGwgaXQuIE90aGVyd2lzZSwgYXNzdW1lIHRoZSBkZWZhdWx0IGJlaGF2
aW9yIGFuZCByZWFkIHRoZSBmaWxlIGF0IHRoZSBwcm92aWRlZCBwYXRoLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX2dldF9jcmFz
aF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3Mu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1Bv
cnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGlu
ZyBjcmFzaGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAg
ICAgICAgKElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBDYWxsIHN1cGVyJ3Mgc2V0dXBfdGVzdF9y
dW4uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAg
ICAgIChJT1NEZXZpY2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6CisgICAgICAgIChJ
T1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25z
IGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9v
a19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQg
ZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBsb2dzIGFuZCBwYXNzIGxpc3Qgb2YgY3Jhc2ggbG9n
cyB0byBpZ25vcmUgdG8gZWFjaCBpbnN0YW5jZSBvZiBDcmFzaExvZ3MuCisgICAgICAgIChJT1NE
ZXZpY2VQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogU2VhcmNoIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGhv
c3QgZm9yIGEgY3Jhc2ggbG9nIGlmIGEgdGFyZ2V0CisgICAgICAgIGhvc3QgaXMgc3BlY2lmaWVk
LiBFbHNlLCBzZWFyY2ggYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGZvciB0aGUgc3BlY2lmaWVkIGNy
YXNoLWxvZy4KKyAgICAgICAgKElPU0RldmljZVBvcnQubG9va19mb3JfbmV3X2NyYXNoX2xvZ3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2NyYXNobG9nX3BhdGgpOiBX
aXRob3V0IGFwcGxlX2FkZGl0aW9ucywgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQuCisg
ICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNl
cnZlclByb2Nlc3MuX19pbml0X18pOiBSZW1vdmUgJy5hcHAnIGZyb20gcHJvY2VzcyBuYW1lIGlm
IG5lY2Vzc2FyeS4gCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weToKKyAg
ICAgICAgKFdpblBvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0
IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MsIHBhc3MgbGlzdCBvZiBjcmFzaAorICAgICAgICBsb2dz
IHRvIGJlIHNraXBwZWQgdG8gQ3Jhc2hMb2dzIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BFUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBh
c3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKwogMjAxNy0w
Ni0wMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGNs
aWVudHMgdG8gb3ZlcnJpZGUgdmlld3BvcnQgc2l6ZSBmb3IgQ1NTIHZpZXdwb3J0IHVuaXRzLgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0NiArMjcsNjIgQEAK
ICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKIGltcG9ydCBk
YXRldGltZQoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogCiAKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKKworCiBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKIAogICAgIEdM
T0JBTF9QSURfUkVHRVggPSByZS5jb21waWxlKHInXHMrR2xvYmFsXHMrUElEOlxzK1xbKD9QPHBp
ZD5cZCspXF0nKQogICAgIEVYSVRfUFJPQ0VTU19QSURfUkVHRVggPSByZS5jb21waWxlKHInRXhp
dCBwcm9jZXNzIFxkKzooP1A8cGlkPlx3KyksIGNvZGUnKQorICAgIERBUldJTl9QUk9DRVNTX1JF
R0VYID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9Q
PHBpZD5cZCspXF0kJykKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBjcmFzaF9sb2df
ZGlyZWN0b3J5KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgY3Jhc2hfbG9nX2RpcmVj
dG9yeSwgY3Jhc2hfbG9nc190b19za2lwPVtdKToKICAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QK
ICAgICAgICAgc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSA9IGNyYXNoX2xvZ19kaXJlY3RvcnkK
KyAgICAgICAgc2VsZi5fY3Jhc2hfbG9nc190b19za2lwID0gY3Jhc2hfbG9nc190b19za2lwCiAK
ICAgICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGlu
Y2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9o
b3N0LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlz
X21hYygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVk
ZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIGVsaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5p
c193aW4oKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfd2luKHBy
b2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgcmV0
dXJuIE5vbmUKIAogICAgIGRlZiBmaW5kX2FsbF9sb2dzKHNlbGYsIGluY2x1ZGVfZXJyb3JzPUZh
bHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlz
X21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYu
X2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9h
bGxfbG9nc19kYXJ3aW4oaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVy
biBOb25lCiAKKyAgICBkZWYgX3BhcnNlX2Rhcndpbl9jcmFzaGxvZyhzZWxmLCBwYXRoKToKKyAg
ICAgICAgY29udGVudHMgPSBzZWxmLl9ob3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQocGF0aCkKKyAgICAgICAgaWYgbm90IGNvbnRlbnRzOgorICAgICAgICAgICAgcmV0dXJuIChO
b25lLCBOb25lLCBOb25lKQorICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50cy5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICBtYXRjaCA9IENyYXNoTG9ncy5EQVJXSU5fUFJPQ0VTU19SRUdFWC5t
YXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgcmV0dXJu
IChtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1lJyksIGludChtYXRjaC5ncm91cCgncGlkJykpLCBj
b250ZW50cykKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBjb250ZW50cykKKwogICAgIGRl
ZiBfZmluZF9uZXdlc3RfbG9nX2RhcndpbihzZWxmLCBwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVk
ZV9lcnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJw
YXRoLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChw
cm9jZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAg
ICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3Nf
dG9fc2tpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVy
biAoYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAnXycpIGFuZCAoYmFzZW5hbWUu
ZW5kc3dpdGgoJy5jcmFzaCcpKSBvcgorICAgICAgICAgICAgICAgICAgICAocHJvY2Vzc19uYW1l
IGluIGJhc2VuYW1lICBhbmQgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKSkpCiAKICAgICAgICAg
bG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2df
ZGlyZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCi0gICAgICAgIGZpcnN0X2xpbmVf
cmVnZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFso
P1A8cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAnJwogICAgICAgICBmb3IgcGF0aCBp
biByZXZlcnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
ICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRo
KSA+IG5ld2VyX3RoYW46Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9ob3N0LmZpbGVz
eXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBm
aXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xuJyldKQotICAgICAgICAgICAgICAg
ICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHByb2Nlc3Nf
bmFtZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgZgorICAgICAgICAgICAg
ICAgICAgICBwYXJzZWRfY3Jhc2hfbG9nID0gc2VsZi5fcGFyc2VfZGFyd2luX2NyYXNobG9nKHBh
dGgpCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcnNlZF9jcmFzaF9sb2dbMF0gPT0gcHJvY2Vz
c19uYW1lIGFuZCAocGlkIGlzIE5vbmUgb3IgcGFyc2VkX2NyYXNoX2xvZ1sxXSA9PSBwaWQpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycyArIHBhcnNlZF9jcmFzaF9sb2db
Ml0KICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgICAgIGlmIGlu
Y2x1ZGVfZXJyb3JzOgogICAgICAgICAgICAgICAgICAgICBlcnJvcnMgKz0gIkVSUk9SOiBGYWls
ZWQgdG8gcmVhZCAnJXMnOiAlc1xuIiAlIChwYXRoLCBzdHIoZSkpCkBAIC04MCw2ICs5Niw4IEBA
IGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAgZGVmIF9maW5kX25ld2VzdF9sb2dfd2lu
KHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAg
ICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKKyAgICAgICAg
ICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9f
c2tpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBi
YXNlbmFtZS5zdGFydHN3aXRoKCJDcmFzaExvZyIpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hv
c3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxl
X2ZpbHRlcj1pc19jcmFzaF9sb2cpCkBAIC0xMTcsMzQgKzEzNSwzNSBAQCBjbGFzcyBDcmFzaExv
Z3Mob2JqZWN0KToKIAogICAgIGRlZiBfZmluZF9hbGxfbG9nc19kYXJ3aW4oc2VsZiwgaW5jbHVk
ZV9lcnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJw
YXRoLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoIi5j
cmFzaCIpCisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxm
Ll9jcmFzaF9sb2dzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgICAgICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoJy5jcmFzaCcpIG9yIGJhc2VuYW1lLmVu
ZHN3aXRoKCcuaXBzJykKIAogICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZp
bGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNo
X2xvZykKLSAgICAgICAgZmlyc3RfbGluZV9yZWdleCA9IHJlLmNvbXBpbGUocideUHJvY2Vzczpc
cysoP1A8cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAgICAgIGVycm9y
cyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSB7fQogICAgICAgICBmb3IgcGF0aCBpbiByZXZl
cnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlm
IG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5l
d2VyX3RoYW46CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCi0g
ICAgICAgICAgICAgICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRl
bnRzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlZF9jcmFzaF9sb2cgPSBzZWxmLl9wYXJzZV9kYXJ3aW5fY3Jhc2hs
b2cocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlZF9jcmFzaF9sb2dbMl06
CisgICAgICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ05vIGRhdGEgaW4gY3Jhc2ggbG9n
IGF0IHt9Jy5mb3JtYXQocGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
CiAgICAgICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRpbWVzdGFtcCBmcm9tIGxvZyBjb250ZW50
cwotICAgICAgICAgICAgICAgICAgICBjcmFzaF90aW1lID0gc2VsZi5nZXRfdGltZXN0YW1wX2Zy
b21fbG9nKGxvZ19jb250ZW50cykKKyAgICAgICAgICAgICAgICAgICAgY3Jhc2hfdGltZSA9IHNl
bGYuZ2V0X3RpbWVzdGFtcF9mcm9tX2xvZyhwYXJzZWRfY3Jhc2hfbG9nWzJdKQogICAgICAgICAg
ICAgICAgICAgICBpZiBjcmFzaF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdlcl90aGFuIGlzIG5v
dCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IGRhdGV0aW1lLmRh
dGV0aW1lLmZyb210aW1lc3RhbXAoZmxvYXQobmV3ZXJfdGhhbikpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjcmFzaF90aW1lIDwgc3RhcnRfdGltZToKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGlu
ZV9yZWdleC5tYXRjaChsb2dfY29udGVudHNbMDpsb2dfY29udGVudHMuZmluZCgnXG4nKV0pCi0g
ICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc19uYW1lID0gbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwaWQgPSBzdHIobWF0Y2guZ3JvdXAoJ3BpZCcpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X25hbWUgPSBwcm9jZXNzX25hbWUgKyAiLSIgKyBwaWQKKyAgICAgICAgICAg
ICAgICAgICAgaWYgcGFyc2VkX2NyYXNoX2xvZ1swXToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9uYW1lID0gcGFyc2VkX2NyYXNoX2xvZ1swXSArICItIiArIHN0cihwYXJzZWRfY3Jh
c2hfbG9nWzFdKQogCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHJlc3VsdF9uYW1lIGluIGNy
YXNoX2xvZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IHJlc3VsdF9u
YW1lICsgIi0xIgotICAgICAgICAgICAgICAgICAgICBjcmFzaF9sb2dzW3Jlc3VsdF9uYW1lXSA9
IGVycm9ycyArIGxvZ19jb250ZW50cworICAgICAgICAgICAgICAgICAgICBjcmFzaF9sb2dzW3Jl
c3VsdF9uYW1lXSA9IGVycm9ycyArIHBhcnNlZF9jcmFzaF9sb2dbMl0KICAgICAgICAgICAgIGV4
Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3JzOgogICAg
ICAgICAgICAgICAgICAgICBlcnJvcnMgKz0gIkVSUk9SOiBGYWlsZWQgdG8gcmVhZCAnJXMnOiAl
c1xuIiAlIChwYXRoLCBzdHIoZSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxv
Z3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAgZnJvbSB3ZWJr
aXRweS5wb3J0LndpbiBpbXBvcnQgV2luUG9ydAogCiAKIGRlZiBtYWtlX21vY2tfY3Jhc2hfcmVw
b3J0X2Rhcndpbihwcm9jZXNzX25hbWUsIHBpZCk6Ci0gICAgcmV0dXJuICIiIlByb2Nlc3M6ICAg
ICAgICAge3Byb2Nlc3NfbmFtZX0gW3twaWR9XQorICAgIHJldHVybiAiIiJNYXkgaGF2ZSBnYXJi
YWdlIGF0IHRoZSBiZWdpbm5pbmcKK1Byb2Nlc3M6ICAgICAgICAge3Byb2Nlc3NfbmFtZX0gW3tw
aWR9XQogUGF0aDogICAgICAgICAgICAvVm9sdW1lcy9EYXRhL3NsYXZlL3Nub3dsZW9wYXJkLWlu
dGVsLXJlbGVhc2UtdGVzdHMvYnVpbGQvV2ViS2l0QnVpbGQvUmVsZWFzZS97cHJvY2Vzc19uYW1l
fQogSWRlbnRpZmllcjogICAgICB7cHJvY2Vzc19uYW1lfQogVmVyc2lvbjogICAgICAgICA/Pz8g
KD8/PykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9y
bWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgc2VsZi5v
c19uYW1lID0gc2VsZi5fZGV0ZXJtaW5lX29zX25hbWUoc3lzX21vZHVsZS5wbGF0Zm9ybSkKICAg
ICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdsaW51eCc6CiAgICAgICAgICAgICBzZWxmLm9zX3Zl
cnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfbGludXhfdmVyc2lvbigpCi0gICAgICAgIGlmIHNlbGYu
b3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19uYW1lID09ICdvcGVuYnNkJyBvciBzZWxm
Lm9zX25hbWUgPT0gJ25ldGJzZCc6CisgICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJz
ZCcgb3Igc2VsZi5vc19uYW1lID09ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJz
ZCcgb3Igc2VsZi5vc19uYW1lID09ICdpb3MnOgogICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9u
ID0gcGxhdGZvcm1fbW9kdWxlLnJlbGVhc2UoKQogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3Rh
cnRzd2l0aCgnbWFjJyk6CiAgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRl
cm1pbmVfbWFjX3ZlcnNpb24ocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKQEAgLTYzLDYg
KzYzLDkgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGlzX21hYyhzZWxm
KToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFjJwogCisgICAgZGVmIGlzX2lv
cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnaW9zJworCiAgICAgZGVm
IGlzX3dpbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnd2luJwogCkBA
IC0xNDEsNiArMTQ0LDggQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIF9k
ZXRlcm1pbmVfb3NfbmFtZShzZWxmLCBzeXNfcGxhdGZvcm0pOgogICAgICAgICBpZiBzeXNfcGxh
dGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICByZXR1cm4gJ21hYycKKyAgICAgICAgaWYg
c3lzX3BsYXRmb3JtID09ICdpb3MnOgorICAgICAgICAgICAgcmV0dXJuICdpb3MnCiAgICAgICAg
IGlmIHN5c19wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOgogICAgICAgICAgICAgcmV0dXJu
ICdsaW51eCcKICAgICAgICAgaWYgc3lzX3BsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpIG9yIHN5
c19wbGF0Zm9ybSA9PSAnY3lnd2luJzoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9u
IDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9y
bWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBjbGFzcyBNb2Nr
UGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGlzX21hYyhzZWxmKToKICAgICAgICAgcmV0
dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFjJwogCisgICAgZGVmIGlzX2lvcyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnaW9zJworCiAgICAgZGVmIGlzX2xpbnV4KHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdsaW51eCcKIApJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHJl
dmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9z
eXN0ZW1ob3N0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NiwzICs0Niw2IEBAIGNsYXNzIFN5c3Rl
bUhvc3Qob2JqZWN0KToKIAogICAgIGRlZiBtYWtlX2ZpbGVfbG9jayhzZWxmLCBwYXRoKToKICAg
ICAgICAgcmV0dXJuIGZpbGVfbG9jay5GaWxlTG9jayhwYXRoKQorCisgICAgZGVmIHN5bWJvbGlj
YXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxm
LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5
c3RlbWhvc3RfbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtNTQsMyArNTQsNiBAQCBjbGFzcyBN
b2NrU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBh
dGgpOgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9s
aWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGNsYXNz
IEFwcGxlUG9ydChQb3J0KToKICAgICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcwogICAgIFZF
UlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbXQogICAgIEFSQ0hJVEVDVFVSRVMgPSBbXQorICAgIF9o
b3N0X3RvX2V4aXN0aW5nX2NyYXNobG9ncyA9IHt9CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBk
ZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1l
KToKQEAgLTkyLDYgKzkzLDE3IEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAgICAgcG9y
dF9uYW1lID0gcG9ydF9uYW1lLnJlcGxhY2UoJy13azInLCAnJykKICAgICAgICAgc2VsZi5fdmVy
c2lvbiA9IHNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKQogCisgICAgZGVm
IGhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKHNlbGYsIGhvc3QpOgorICAgICAgICBpZiBob3N0
IGluIHNlbGYuX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzW2hvc3RdCisgICAgICAgIHJldHVybiBb
XQorCisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYsIGRldmljZV9jbGFzcz1Ob25lKToKKyAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nl
cycpIG9yIDEpKToKKyAgICAgICAgICAgIGhvc3QgPSBzZWxmLnRhcmdldF9ob3N0KGkpCisgICAg
ICAgICAgICBpZiBub3QgaG9zdCBpbiBzZWxmLl9ob3N0X3RvX2V4aXN0aW5nX2NyYXNobG9nczoK
KyAgICAgICAgICAgICAgICBzZWxmLl9ob3N0X3RvX2V4aXN0aW5nX2NyYXNobG9nc1tob3N0XSA9
IGhvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQor
CiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCdndWFyZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjE3NjgwKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEz
NjQsNyArMTM2NCw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcGF0aF90b19jcmFz
aF9sb2dzKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBk
ZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBz
dGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9
IG5hbWUgb3IgJzx1bmtub3duIHByb2Nlc3MgbmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIo
cGlkIG9yICc8dW5rbm93bj4nKQogICAgICAgICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8
ZW1wdHk+JykuZGVjb2RlKCd1dGY4JywgJ3JlcGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDE3ICsxMDcsMTcgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1
cm4gbG9ncwogCiAgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNl
bGYsIG5ld2VyX3RoYW4pOgotICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0
LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExv
Z3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3Nr
aXA9c2VsZi5ob3N0X3RvX2NyYXNoX2xvZ3NfdG9fc2tpcChzZWxmLmhvc3QpKQogICAgICAgICBy
ZXR1cm4gY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJf
dGhhbj1uZXdlcl90aGFuKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBp
ZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9u
ZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1l
LCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2Zu
PU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMg
dGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBh
bmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBv
ZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KICAgICAgICAgdGltZV9mbiA9IHRpbWVf
Zm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVl
cAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dz
KHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFz
aF9sb2dzKCksIGNyYXNoX2xvZ3NfdG9fc2tpcD1zZWxmLmhvc3RfdG9fY3Jhc2hfbG9nc190b19z
a2lwKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCkpCiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQog
ICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9w
cm9jZXNzZXMnLCAxKSkKICAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRl
YWRsaW5lOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2Fz
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rl
c3RjYXNlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOSArMTM3LDUgQEAg
Y2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0QwogICAgICAgICBPdXRwdXRD
YXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1b
J3Rlc3QnLCA0Ml0pCiAKICAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAg
ICAjIERhcndpbiBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1
c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6
Ci0gICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFt
YmRhOiB0aW1lcy5wb3AoMCkKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFt
ZT1zZWxmLnBvcnRfbmFtZSkKICAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRl
clRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNl
KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RldmljZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc2
ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2MywxMSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKIAogICAgICAgICBz
ZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBOb25lCiAKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hf
bG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBsYXRm
b3JtX2RldmljZSwgJ3N5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQnKToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZf
bmVlZGVkKHBhdGgpCisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUocGF0aCkKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBleGVjdXRpdmUoc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5leGVjdXRpdmUKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0
MSw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAgY3Jhc2hlZF9waWQ9c2Vs
Zi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xvZz1jcmFzaF9sb2csIHBpZD1waWQpCiAKICAgICBkZWYg
X2dldF9jcmFzaF9sb2coc2VsZiwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pOgotICAgICAg
ICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9jcmFzaGVkX3Byb2Nlc3Nf
bmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKQorICAg
ICAgICByZXR1cm4gc2VsZi5fcG9ydC5fZ2V0X2NyYXNoX2xvZyhzZWxmLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSwgc2VsZi5fY3Jhc2hlZF9waWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
YXJnZXRfaG9zdD1zZWxmLl90YXJnZXRfaG9zdCkKIAogICAgIGRlZiBfY29tbWFuZF93cmFwcGVy
KHNlbGYpOgogICAgICAgICAjIEhvb2sgZm9yIGluamVjdGluZyB2YWxncmluZCBvciBvdGhlciBy
dW50aW1lIGluc3RydW1lbnRhdGlvbiwgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdy
aW5kX3Rlc3RzLnB5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CShyZXZpc2lv
biAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAgICBkZWYg
Y2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIHJldHVybiBzdXBlcihH
dGtQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKSBhbmQgc2VsZi5fZHJpdmVy
X2NsYXNzKCkuY2hlY2tfZHJpdmVyKHNlbGYpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2Vs
ZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRh
cmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lID0gIldlYktpdFdlYlByb2Nlc3MiIGlmIG5h
bWUgPT0gIldlYlByb2Nlc3MiIGVsc2UgbmFtZQogICAgICAgICByZXR1cm4gR0RCQ3Jhc2hMb2dH
ZW5lcmF0b3IobmFtZSwgcGlkLCBuZXdlcl90aGFuLCBzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9w
YXRoX3RvX2RyaXZlcikuZ2VuZXJhdGVfY3Jhc2hfbG9nKHN0ZG91dCwgc3RkZXJyKQogCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksNyBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgICAgIHNlbGYu
YXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZi5fcGF0aF90b19kcml2ZXIoKSksCiAgICAg
ICAgICAgICAgICAgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksCiAgICAgICAgICAgICApCisgICAg
ICAgIHN1cGVyKElPU1BvcnQsIHNlbGYpLnNldHVwX3Rlc3RfcnVuKGRldmljZV9jbGFzcykKIAog
ICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgc3VwZXIoSU9TUG9ydCwg
c2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBA
CiBpbXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQg
bWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENy
YXNoTG9ncwogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25z
CiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQb3J0CiAKQEAgLTY3LDE2ICs2OCwz
MyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAgICAgcG9ydF9uYW1l
ID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKICAgICAgICAgcmV0dXJu
IHBvcnRfbmFtZQogCi0gICAgIyBGSVhNRTogVGhlc2UgbmVlZCBkZXZpY2UgaW1wbGVtZW50YXRp
b25zIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAgICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9n
cyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBpZiBu
b3QgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc2Vs
Zi5OT19PTl9ERVZJQ0VfVEVTVElORykKKyAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9ucygp
Lmlvc19jcmFzaF9sb2dfcGF0aCgpCisKKyAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dz
X2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6CisgICAgICAgIGxvZ19saXN0ID0ge30KKyAg
ICAgICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6
CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3MoZGV2aWNlLCBzZWxmLnBhdGhfdG9f
Y3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9c2VsZi5ob3N0X3RvX2NyYXNoX2xvZ3Nf
dG9fc2tpcChkZXZpY2UpKQorICAgICAgICAgICAgbG9nX2xpc3QudXBkYXRlKGNyYXNoX2xvZy5m
aW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikp
CisgICAgICAgIHJldHVybiBsb2dfbGlzdAorCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xl
ZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgorICAgICAg
ICBpZiB0YXJnZXRfaG9zdDoKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihJT1NEZXZpY2VQb3J0
LCBzZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90
aGFuLCB0aW1lX2ZuPXRpbWVfZm4sIHNsZWVwX2ZuPXNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2c9d2Fp
dF9mb3JfbG9nLCB0YXJnZXRfaG9zdD10YXJnZXRfaG9zdCkKKworICAgICAgICAjIFdlIG5lZWQg
dG8gc2VhcmNoIGV2ZXJ5IGRldmljZSBzaW5jZSBvbmUgd2FzIG5vdCBzcGVjaWZpZWQuCisgICAg
ICAgIGZvciBkZXZpY2UgaW4gc2VsZi5fZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgpOgor
ICAgICAgICAgICAgc3RkZXJyX291dCwgY3Jhc2hsb2cgPSBzdXBlcihJT1NEZXZpY2VQb3J0LCBz
ZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFu
LCB0aW1lX2ZuPXRpbWVfZm4sIHNsZWVwX2ZuPXNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2c9RmFsc2Us
IHRhcmdldF9ob3N0PWRldmljZSkKKyAgICAgICAgICAgIGlmIGNyYXNobG9nOgorICAgICAgICAg
ICAgICAgIHJldHVybiAoc3RkZXJyLCBjcmFzaGxvZykKKyAgICAgICAgcmV0dXJuIChzdGRlcnIs
IE5vbmUpCiAKKyAgICAjIEZJWE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMg
PHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPi4KICAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYs
IHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgbG9v
a19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUp
OgotICAgICAgICByZXR1cm4ge30KLQogICAgIGRlZiBsb29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxm
LCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90aW1lKToKICAgICAgICAgcmV0dXJuIHt9
CiAKQEAgLTkwLDkgKzEwOCw2IEBAIGNsYXNzIElPU0RldmljZVBvcnQoSU9TUG9ydCk6CiAgICAg
ZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAgICAgIHJldHVybiAnaW9zLWRldmljZScK
IAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJy
LCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1U
cnVlKToKLSAgICAgICAgcmV0dXJuIChzdGRlcnIsIE5vbmUpCi0KICAgICBkZWYgX2NyZWF0ZV9k
ZXZpY2VzKHNlbGYsIGRldmljZV9jbGFzcyk6CiAgICAgICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlv
bnMoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzZWxmLk5PX09OX0RFVklDRV9U
RVNUSU5HKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2
ICsyMCw4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9y
dCB0aW1lCisKIGZyb20gd2Via2l0cHkucG9ydC5pb3NfZGV2aWNlIGltcG9ydCBJT1NEZXZpY2VQ
b3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlvc190ZXN0Y2FzZQogCkBAIC0zNywxMCAr
MzksMTcgQEAgY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdAogICAgIGRl
ZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19zeXN0ZW0oKSkKIAotICAg
ICMgRklYTUU6IFVwZGF0ZSB0ZXN0cyB3aGVuIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4gaXMg
Y29tcGxldGVkLgogICAgIGRlZiB0ZXN0X2NyYXNobG9nX3BhdGgoc2VsZik6Ci0gICAgICAgIHBh
c3MKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcG9ydC5wYXRoX3RvX2NyYXNo
X2xvZ3MoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKKyAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxmLnBvcnRfbmFtZSkKKyAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcG9ydC5fZ2V0
X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUo
KSwgd2FpdF9mb3JfbG9nPUZhbHNlKQogCisgICAgIyBGSVhNRTogVXBkYXRlIHRlc3RzIHdoZW4g
PHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVmIHRlc3Rfc3Bp
bmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2MiwxMSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAKICAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9u
ZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgdGFyZ2V0X2hvc3Q9
Tm9uZSk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagotICAgICAgICBzZWxmLl9uYW1l
ID0gbmFtZSAgIyBTaG91bGQgYmUgdGhlIGNvbW1hbmQgbmFtZSAoZS5nLiBEdW1wUmVuZGVyVHJl
ZSwgSW1hZ2VEaWZmKQorICAgICAgICAjIFByb2Nlc3NlcyBpbnNpZGUgYXBwIGJ1bmRsZXMgd2ls
bCBub3QgaGF2ZSAnLmFwcCcgaW4gdGhlaXIgbmFtZXMuCisgICAgICAgIGlmIG5hbWUuZW5kc3dp
dGgoJy5hcHAnKToKKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lWzotNF0KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYuX2NtZCA9
IGNtZAogICAgICAgICBzZWxmLl9lbnYgPSBlbnYKICAgICAgICAgIyBTZXQgaWYgdGhlIHByb2Nl
c3Mgb3V0cHV0cyBub24tc3RhbmRhcmQgbmV3bGluZXMgbGlrZSAnXHJcbicgb3IgJ1xyJy4KSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcg
KzM3Miw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgcGF0aF90b19jcmFz
aF9sb2dzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSgpCiAK
LSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1
ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9n
PVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93
LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQogICAgICAgICAj
IFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2
YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFz
aGVzIGdvaW5nIG9uLgpAQCAtMzgwLDcgKzM4MCw3IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0
KToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVw
X2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAogICAgICAgICBjcmFzaF9sb2cgPSAnJwotICAg
ICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCwgc2VsZi5wYXRoX3RvX2NyYXNo
X2xvZ3MoKSkKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyh0YXJnZXRfaG9zdCBvciBz
ZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCksIGNyYXNoX2xvZ3NfdG9fc2tpcD1z
ZWxmLmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCkp
CiAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQogICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBh
ZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4uLgogICAgICAgICBfbG9nLmRl
YnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkJKHJldmlzaW9uIDIxNzY4MCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDYgKzc0LDYgQEAgY2xhc3MgV1BFUG9ydChQb3J0KToKICAgICBkZWYgX3BhdGhfdG9faW1hZ2Vf
ZGlmZihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWx0X2V4ZWN1dGFibGVzX3BhdGgo
J0ltYWdlRGlmZicpCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUp
OgogICAgICAgICBuYW1lID0gIldQRVdlYlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlByb2Nlc3Mi
IGVsc2UgbmFtZQogICAgICAgICByZXR1cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFtZSwgcGlk
LCBuZXdlcl90aGFuLCBzZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZlcikuZ2Vu
ZXJhdGVfY3Jhc2hfbG9nKHN0ZG91dCwgc3RkZXJyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312018</attachid>
            <date>2017-06-05 11:12:18 -0700</date>
            <delta_ts>2017-06-06 09:24:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170605111217.patch</filename>
            <type>text/plain</type>
            <size>33991</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzc4OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk1IEBACisyMDE3LTA2LTAyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuX19pbml0
X18pOiBBY2NlcHQgb3B0aW9uYWwgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGlnbm9yZS4KKyAgICAg
ICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90ZW50aWFsIHBs
YXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0by4KKyAgICAg
ICAgKENyYXNoTG9ncy5fcGFyc2VfZGFyd2luX2NyYXNobG9nKTogU2hhcmUgY29kZSBmb3IgcGFy
c2luZyBvZiBEYXJ3aW4gY3Jhc2ggbG9ncy4KKyAgICAgICAgRG8gbm90IGFzc3VtZSB0aGF0IGEg
RGFyd2luIGNyYXNoIGxvZyBzdGFydHMgd2l0aCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKENyYXNo
TG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFJlbW92ZSAuYXBwIGluIHByb2Nlc3MgbmFt
ZSBmb3IgaU9TLCB1c2UKKyAgICAgICAgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgRGFyd2luIGNy
YXNoIGxvZ3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4uaXNf
Y3Jhc2hfbG9nKTogU2tpcCBjcmFzaCBsb2dzIHBhc3NlZCBpbnRvIHRoaXMKKyAgICAgICAgb2Jq
ZWN0IHNvIHRoYXQgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBzeXN0ZW0gYmVmb3JlIHRlc3Rp
bmcgYXJlIG5vdCBwYXJzZWQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193
aW4uaXNfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xv
Z3NfZGFyd2luLmlzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5k
X2FsbF9sb2dzX2Rhcndpbik6IFVzZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyBEYXJ3aW4gY3Jh
c2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaCBsb2dzIG1heSBub3QgaGF2ZSB0aGVpciBwcm9jZXNzIG9uIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8u
cHk6CisgICAgICAgIFBsYXRmb3JtSW5mby5fX2luaXRfXyk6IFVzZSBwbGF0Zm9ybV9tb2R1bGUu
cmVsZWFzZSgpIGFzIHRoZSBvc192ZXJzaW9uIGZvciBpT1MgZGV2aWNlLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLmlzX2lvcyk6IEFkZGVkLgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRlcm1p
bmVfb3NfbmFtZSk6IEEgcGxhdGZvcm0gbmFtZSBvZiAnaW9zJyBtZWFucyB0aGF0IHRoZSBvcyBu
YW1lIGlzICdpb3MnLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uaXNfaW9zKTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhv
c3QucHk6CisgICAgICAgIChTeXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQpOiBUaGUgc3ltYm9saWNhdGVkIGNyYXNoIGxvZyBmb3IgbW9zdAorICAgICAgICBzeXN0ZW1z
IGlzIGp1c3QgdGhlIGNyYXNobG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHk6
CisgICAgICAgIChNb2NrU3lzdGVtSG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVk
KTogVGhlIHN5bWJvbGljYXRlZCBjcmFzaCBsb2cgZm9yIG1vc3QKKyAgICAgICAgc3lzdGVtcyBp
cyBqdXN0IHRoZSBjcmFzaGxvZywgdXNlIHRoaXMgYmVoYXZpb3IgYnkgZGVmYXVsdC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHk6CisgICAgICAgIChBcHBsZVBvcnQp
OgorICAgICAgICAoQXBwbGVQb3J0Lmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKTogTWFwIGEg
aG9zdCB0byBhIGxpc3Qgb2YgY3Jhc2ggbG9ncyB0byBiZSBza2lwcGVkCisgICAgICAgIHdoZW4g
cGFyc2luZyBjcmFzaCBsb2dzLgorICAgICAgICAoQXBwbGVQb3J0LnNldHVwX3Rlc3RfcnVuKTog
R2VuZXJhdGUgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGJlIHNraXBwZWQgYmFzZWQgb24gdGhlIGNy
YXNoCisgICAgICAgIGxvZ3MgYWxyZWFkeSBvbiB0aGUgc3lzdGVtIHdoZW4gdGVzdHMgYXJlIHJ1
bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBv
cnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGlu
ZyBjcmFzaCBsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHk6
CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGly
KTogUGFzcyBsaXN0IG9mIGNyYXNoIGxvZ3MgdG8gYmUgc2tpcHBlZCB0bworICAgICAgICBDcmFz
aExvZ3Mgb2JqZWN0LgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mg
b3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MsIHBhc3MgbGlzdCBv
ZiBjcmFzaAorICAgICAgICBsb2dzIHRvIGJlIHNraXBwZWQgdG8gQ3Jhc2hMb2dzIG9iamVjdC4K
KyAgICAgICAgKERhcndpblBvcnQucGxpc3RfZGF0YV9mcm9tX2J1bmRsZSk6IFNoYXJlIHBsaXN0
IGFjY2VzcyBjb2RlIGZvciBhY2Nlc3NpbmcgZGlmZmVyZW50IHBsaXN0IGVudHJpZXMuCisgICAg
ICAgIChEYXJ3aW5Qb3J0LmFwcF9pZGVudGlmaWVyX2Zyb21fYnVuZGxlKTogVXNlIHBsaXN0X2Rh
dGFfZnJvbV9idW5kbGUuCisgICAgICAgIChEYXJ3aW5Qb3J0LmFwcF9leGVjdXRhYmxlX2Zyb21f
YnVuZGxlKTogQWNjZXNzIG5hbWUgb2YgYXBwIGV4ZWN1dGFibGUgZnJvbSBwcm92aWRlZCBhcHAg
YnVuZGxlLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2Uu
cHk6CisgICAgICAgIChEYXJ3aW5UZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IFJlbW92ZWQgdW51
c2VkIGxvY2FsIGZ1bmN0aW9uLgorICAgICAgICAoRGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9s
b2cuZmFrZV90aW1lX2NiKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9u
ZWVkZWQpOiBJZiB0aGUgcGxhdGZvcm0gZGV2aWNlIGhhcyBhIGZ1bmN0aW9uIHdpdGggdGhpcwor
ICAgICAgICBuYW1lLCBjYWxsIGl0LiBPdGhlcndpc2UsIGFzc3VtZSB0aGUgZGVmYXVsdCBiZWhh
dmlvciBhbmQgcmVhZCB0aGUgZmlsZSBhdCB0aGUgcHJvdmlkZWQgcGF0aC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLl9nZXRfY3Jh
c2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dz
LgorICAgICAgICAoRHJpdmVyLmhhc19jcmFzaGVkKTogVXNlIF9zZXJ2ZXJfcHJvY2Vzcy5wcm9j
ZXNzX25hbWUoKSBpbnN0ZWFkIG9mIF9zZXJ2ZXJfcHJvY2Vzcy5uYW1lKCkgc2luY2UKKyAgICAg
ICAgX3NlcnZlcl9wcm9jZXNzLm5hbWUoKSB3aWxsIG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgcHJv
Y2VzcyBuYW1lIGZvciBpT1MuCisgICAgICAgIChEcml2ZXIuX2NoZWNrX2Zvcl9kcml2ZXJfY3Jh
c2hfb3JfdW5yZXNwb25zaXZlbmVzcyk6IERpdHRvLgorICAgICAgICAoRHJpdmVyLl9yZWFkX2Js
b2NrKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0
dGVzdC5weToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9jaGVja19mb3JfZHJpdmVyX2NyYXNo
LkZha2VTZXJ2ZXJQcm9jZXNzLnByb2Nlc3NfbmFtZSk6IFVwZGF0ZSBzaW5jZSBEcml2ZXIgdXNl
cworICAgICAgICBwcm9jZXNzX25hbWUoKSBpbnN0ZWFkIG9mIG5hbWUoKS4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZ2V0X2NyYXNo
X2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OiBEaXR0by4KKyAgICAgICAg
KElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBDYWxsIHN1cGVyJ3Mgc2V0dXBfdGVzdF9ydW4uCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJ
T1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IENvbnN1bHQgYXBwbGVfYWRkaXRpb25z
IGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5fbG9v
a19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcik6IFNlYXJjaCBldmVyeSBjb25uZWN0ZWQg
ZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBsb2dzIGFuZCBwYXNzIGxpc3Qgb2YgY3Jhc2ggbG9n
cyB0byBpZ25vcmUgdG8gZWFjaCBpbnN0YW5jZSBvZiBDcmFzaExvZ3MuCisgICAgICAgIChJT1NE
ZXZpY2VQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogU2VhcmNoIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGhv
c3QgZm9yIGEgY3Jhc2ggbG9nIGlmIGEgdGFyZ2V0CisgICAgICAgIGhvc3QgaXMgc3BlY2lmaWVk
LiBFbHNlLCBzZWFyY2ggYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGZvciB0aGUgc3BlY2lmaWVkIGNy
YXNoLWxvZy4KKyAgICAgICAgKElPU0RldmljZVBvcnQubG9va19mb3JfbmV3X2NyYXNoX2xvZ3Mp
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2NyYXNobG9nX3BhdGgpOiBX
aXRob3V0IGFwcGxlX2FkZGl0aW9ucywgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQuCisg
ICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weToKKyAgICAgICAg
KFNpbXVsYXRvclByb2Nlc3MucHJvY2Vzc19uYW1lKTogQ2hlY2sgdGhlIHByb3ZpZGVkIGJ1bmRs
ZSBmb3IgdGhlIHByb2Nlc3MgbmFtZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwg
dGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNobG9ncywgcGFzcyBsaXN0IG9mIGNyYXNoCisg
ICAgICAgIGxvZ3MgdG8gYmUgc2tpcHBlZCB0byBDcmFzaExvZ3Mgb2JqZWN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHk6CisgICAgICAgIChXUEVQb3J0Ll9nZXRfY3Jh
c2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dz
LgorCiAyMDE3LTA2LTA1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IG1fY3VycmVudFNjcmlwdENhbGxiYWNrSUQgaW4g
VUlTY3JpcHRDb250ZXh0OjpyZXF1ZXN0VUlTY3JpcHRDb21wbGV0aW9uKEpTU3RyaW5nUmVmKSBy
dW5uaW5nIGZhc3QvZXZlbnRzL2lvcy9hdXRvY29ycmVjdC13aXRoLXJhbmdlLXNlbGVjdGlvbi5o
dG1sCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dz
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9j
cmFzaGxvZ3MucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9jcmFzaGxvZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ2ICsyNyw2
MiBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IGNvZGVjcwogaW1w
b3J0IGRhdGV0aW1lCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiAKIAorX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAg
ICAgR0xPQkFMX1BJRF9SRUdFWCA9IHJlLmNvbXBpbGUocidccytHbG9iYWxccytQSUQ6XHMrXFso
P1A8cGlkPlxkKylcXScpCiAgICAgRVhJVF9QUk9DRVNTX1BJRF9SRUdFWCA9IHJlLmNvbXBpbGUo
cidFeGl0IHByb2Nlc3MgXGQrOig/UDxwaWQ+XHcrKSwgY29kZScpCisgICAgREFSV0lOX1BST0NF
U1NfUkVHRVggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikg
XFsoP1A8cGlkPlxkKylcXSQnKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGNyYXNo
X2xvZ19kaXJlY3RvcnkpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBjcmFzaF9sb2df
ZGlyZWN0b3J5LCBjcmFzaF9sb2dzX3RvX3NraXA9W10pOgogICAgICAgICBzZWxmLl9ob3N0ID0g
aG9zdAogICAgICAgICBzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5ID0gY3Jhc2hfbG9nX2RpcmVj
dG9yeQorICAgICAgICBzZWxmLl9jcmFzaF9sb2dzX3RvX3NraXAgPSBjcmFzaF9sb2dzX3RvX3Nr
aXAKIAogICAgIGRlZiBmaW5kX25ld2VzdF9sb2coc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQ9Tm9u
ZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSk6Ci0gICAgICAgIGlmIHNl
bGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZv
cm0uaXNfbWFjKCkgb3Igc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19pb3MoKToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfZGFyd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBp
bmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgZWxpZiBzZWxmLl9ob3N0LnBsYXRm
b3JtLmlzX3dpbigpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ193
aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKQogICAgICAg
ICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGZpbmRfYWxsX2xvZ3Moc2VsZiwgaW5jbHVkZV9lcnJv
cnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSk6Ci0gICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZv
cm0uaXNfbWFjKCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFjKCkgb3Ig
c2VsZi5faG9zdC5wbGF0Zm9ybS5pc19pb3MoKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9m
aW5kX2FsbF9sb2dzX2RhcndpbihpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAg
cmV0dXJuIE5vbmUKIAorICAgIGRlZiBfcGFyc2VfZGFyd2luX2NyYXNobG9nKHNlbGYsIHBhdGgp
OgorICAgICAgICBjb250ZW50cyA9IHNlbGYuX2hvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lm
X25lZWRlZChwYXRoKQorICAgICAgICBpZiBub3QgY29udGVudHM6CisgICAgICAgICAgICByZXR1
cm4gKE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIGZvciBsaW5lIGluIGNvbnRlbnRzLnNwbGl0
bGluZXMoKToKKyAgICAgICAgICAgIG1hdGNoID0gQ3Jhc2hMb2dzLkRBUldJTl9QUk9DRVNTX1JF
R0VYLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKG1hdGNoLmdyb3VwKCdwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdwaWQn
KSksIGNvbnRlbnRzKQorICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUsIGNvbnRlbnRzKQorCiAg
ICAgZGVmIF9maW5kX25ld2VzdF9sb2dfZGFyd2luKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBp
bmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMs
IGRpcnBhdGgsIGJhc2VuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5zdGFydHN3
aXRoKHByb2Nlc3NfbmFtZSArICJfIikgYW5kIGJhc2VuYW1lLmVuZHN3aXRoKCIuY3Jhc2giKQor
ICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5fY3Jhc2hf
bG9nc190b19za2lwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAg
cmV0dXJuIChiYXNlbmFtZS5zdGFydHN3aXRoKHByb2Nlc3NfbmFtZSArICdfJykgYW5kIChiYXNl
bmFtZS5lbmRzd2l0aCgnLmNyYXNoJykpIG9yCisgICAgICAgICAgICAgICAgICAgIChwcm9jZXNz
X25hbWUgaW4gYmFzZW5hbWUgIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgnLmlwcycpKSkKIAogICAg
ICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNo
X2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKLSAgICAgICAgZmlyc3Rf
bGluZV9yZWdleCA9IHJlLmNvbXBpbGUocideUHJvY2VzczpccysoP1A8cHJvY2Vzc19uYW1lPi4q
KSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAgICAgIGVycm9ycyA9ICcnCiAgICAgICAgIGZvciBw
YXRoIGluIHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAgICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2VsZi5faG9zdC5maWxlc3lzdGVtLm10aW1l
KHBhdGgpID4gbmV3ZXJfdGhhbjoKLSAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuX2hvc3Qu
ZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQotICAgICAgICAgICAgICAgICAgICBtYXRj
aCA9IGZpcnN0X2xpbmVfcmVnZXgubWF0Y2goZlswOmYuZmluZCgnXG4nKV0pCi0gICAgICAgICAg
ICAgICAgICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1lJykgPT0gcHJv
Y2Vzc19uYW1lIGFuZCAocGlkIGlzIE5vbmUgb3IgaW50KG1hdGNoLmdyb3VwKCdwaWQnKSkgPT0g
cGlkKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcnMgKyBmCisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlZF9jcmFzaF9sb2cgPSBzZWxmLl9wYXJzZV9kYXJ3aW5fY3Jhc2hs
b2cocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyc2VkX2NyYXNoX2xvZ1swXSA9PSBw
cm9jZXNzX25hbWUgYW5kIChwaWQgaXMgTm9uZSBvciBwYXJzZWRfY3Jhc2hfbG9nWzFdID09IHBp
ZCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgcGFyc2VkX2NyYXNo
X2xvZ1syXQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAg
aWYgaW5jbHVkZV9lcnJvcnM6CiAgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAiRVJST1I6
IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKQEAgLTgwLDYgKzk2
LDggQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xv
Z193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
KToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgorICAg
ICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2VsZi5fY3Jhc2hfbG9n
c190b19za2lwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0
dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKIAogICAgICAgICBsb2dzID0gc2Vs
Zi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3Rvcnks
IGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKQEAgLTExNywzNCArMTM1LDM1IEBAIGNsYXNzIENy
YXNoTG9ncyhvYmplY3QpOgogCiAgICAgZGVmIF9maW5kX2FsbF9sb2dzX2RhcndpbihzZWxmLCBp
bmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMs
IGRpcnBhdGgsIGJhc2VuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5lbmRzd2l0
aCgiLmNyYXNoIikKKyAgICAgICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGlu
IHNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5lbmRzd2l0aCgnLmNyYXNoJykgb3IgYmFzZW5h
bWUuZW5kc3dpdGgoJy5pcHMnKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNf
Y3Jhc2hfbG9nKQotICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9j
ZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKICAgICAgICAg
ZXJyb3JzID0gJycKICAgICAgICAgY3Jhc2hfbG9ncyA9IHt9CiAgICAgICAgIGZvciBwYXRoIGlu
IHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAg
ICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2VsZi5faG9zdC5maWxlc3lzdGVtLm10aW1lKHBhdGgp
ID4gbmV3ZXJfdGhhbjoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUgPSAiVW5rbm93
biIKLSAgICAgICAgICAgICAgICAgICAgcGlkID0gMAotICAgICAgICAgICAgICAgICAgICBsb2df
Y29udGVudHMgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKKyAg
ICAgICAgICAgICAgICAgICAgcGFyc2VkX2NyYXNoX2xvZyA9IHNlbGYuX3BhcnNlX2Rhcndpbl9j
cmFzaGxvZyhwYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFyc2VkX2NyYXNoX2xv
Z1syXToKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybignTm8gZGF0YSBpbiBjcmFz
aCBsb2cgYXQge30nLmZvcm1hdChwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisKICAgICAgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGltZXN0YW1wIGZyb20gbG9nIGNv
bnRlbnRzCi0gICAgICAgICAgICAgICAgICAgIGNyYXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3Rh
bXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQorICAgICAgICAgICAgICAgICAgICBjcmFzaF90aW1l
ID0gc2VsZi5nZXRfdGltZXN0YW1wX2Zyb21fbG9nKHBhcnNlZF9jcmFzaF9sb2dbMl0pCiAgICAg
ICAgICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgaXMgbm90IE5vbmUgYW5kIG5ld2VyX3RoYW4g
aXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRp
bWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChmbG9hdChuZXdlcl90aGFuKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgPCBzdGFydF90aW1lOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJz
dF9saW5lX3JlZ2V4Lm1hdGNoKGxvZ19jb250ZW50c1swOmxvZ19jb250ZW50cy5maW5kKCdcbicp
XSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzX25hbWUgPSBtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1lJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBpZCA9IHN0cihtYXRjaC5ncm91cCgncGlkJykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHRfbmFtZSA9IHByb2Nlc3NfbmFtZSArICItIiArIHBpZAorICAgICAg
ICAgICAgICAgICAgICBpZiBwYXJzZWRfY3Jhc2hfbG9nWzBdOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X25hbWUgPSBwYXJzZWRfY3Jhc2hfbG9nWzBdICsgIi0iICsgc3RyKHBhcnNl
ZF9jcmFzaF9sb2dbMV0pCiAKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgcmVzdWx0X25hbWUg
aW4gY3Jhc2hfbG9nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gcmVz
dWx0X25hbWUgKyAiLTEiCi0gICAgICAgICAgICAgICAgICAgIGNyYXNoX2xvZ3NbcmVzdWx0X25h
bWVdID0gZXJyb3JzICsgbG9nX2NvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgIGNyYXNoX2xv
Z3NbcmVzdWx0X25hbWVdID0gZXJyb3JzICsgcGFyc2VkX2NyYXNoX2xvZ1syXQogICAgICAgICAg
ICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6
CiAgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAiRVJST1I6IEZhaWxlZCB0byByZWFkICcl
cyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2Ny
YXNobG9nc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQCBmcm9t
IHdlYmtpdHB5LnBvcnQud2luIGltcG9ydCBXaW5Qb3J0CiAKIAogZGVmIG1ha2VfbW9ja19jcmFz
aF9yZXBvcnRfZGFyd2luKHByb2Nlc3NfbmFtZSwgcGlkKToKLSAgICByZXR1cm4gIiIiUHJvY2Vz
czogICAgICAgICB7cHJvY2Vzc19uYW1lfSBbe3BpZH1dCisgICAgcmV0dXJuICIiIk1heSBoYXZl
IGdhcmJhZ2UgYXQgdGhlIGJlZ2lubmluZworUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1l
fSBbe3BpZH1dCiBQYXRoOiAgICAgICAgICAgIC9Wb2x1bWVzL0RhdGEvc2xhdmUvc25vd2xlb3Bh
cmQtaW50ZWwtcmVsZWFzZS10ZXN0cy9idWlsZC9XZWJLaXRCdWlsZC9SZWxlYXNlL3twcm9jZXNz
X25hbWV9CiBJZGVudGlmaWVyOiAgICAgIHtwcm9jZXNzX25hbWV9CiBWZXJzaW9uOiAgICAgICAg
ID8/PyAoPz8/KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBz
ZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1pbmVfb3NfbmFtZShzeXNfbW9kdWxlLnBsYXRmb3Jt
KQogICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JzoKICAgICAgICAgICAgIHNlbGYu
b3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9saW51eF92ZXJzaW9uKCkKLSAgICAgICAgaWYg
c2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9y
IHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJzoKKyAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdm
cmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAn
bmV0YnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ2lvcyc6CiAgICAgICAgICAgICBzZWxmLm9zX3Zl
cnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpCiAgICAgICAgIGlmIHNlbGYub3NfbmFt
ZS5zdGFydHN3aXRoKCdtYWMnKToKICAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYu
X2RldGVybWluZV9tYWNfdmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQpAQCAt
NjMsNiArNjMsOSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFj
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYg
aXNfaW9zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdpb3MnCisKICAg
ICBkZWYgaXNfd2luKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICd3aW4n
CiAKQEAgLTE0MSw2ICsxNDQsOCBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBk
ZWYgX2RldGVybWluZV9vc19uYW1lKHNlbGYsIHN5c19wbGF0Zm9ybSk6CiAgICAgICAgIGlmIHN5
c19wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIHJldHVybiAnbWFjJworICAgICAg
ICBpZiBzeXNfcGxhdGZvcm0gPT0gJ2lvcyc6CisgICAgICAgICAgICByZXR1cm4gJ2lvcycKICAg
ICAgICAgaWYgc3lzX3BsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jyk6CiAgICAgICAgICAgICBy
ZXR1cm4gJ2xpbnV4JwogICAgICAgICBpZiBzeXNfcGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykg
b3Igc3lzX3BsYXRmb3JtID09ICdjeWd3aW4nOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkocmV2
aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIGNsYXNz
IE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAg
ICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCiAKKyAgICBkZWYgaXNfaW9zKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdpb3MnCisKICAgICBkZWYgaXNfbGludXgo
c2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JwogCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5w
eQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3N5c3RlbWhvc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDMgKzQ2LDYgQEAgY2xhc3Mg
U3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBhdGgp
OgogICAgICAgICByZXR1cm4gZmlsZV9sb2NrLkZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3lt
Ym9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5
CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vc3lzdGVtaG9zdF9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCwzICs1NCw2IEBAIGNs
YXNzIE1vY2tTeXN0ZW1Ib3N0KG9iamVjdCk6CiAKICAgICBkZWYgbWFrZV9maWxlX2xvY2soc2Vs
ZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBNb2NrRmlsZUxvY2socGF0aCkKKworICAgIGRlZiBz
eW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1
cm4gc2VsZi5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2FwcGxlLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYXBwbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAg
Y2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICMgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzCiAg
ICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFtdCiAgICAgQVJDSElURUNUVVJFUyA9IFtdCisg
ICAgX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzID0ge30KIAogICAgIEBjbGFzc21ldGhvZAog
ICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0
X25hbWUpOgpAQCAtOTIsNiArOTMsMTcgQEAgY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICAg
ICBwb3J0X25hbWUgPSBwb3J0X25hbWUucmVwbGFjZSgnLXdrMicsICcnKQogICAgICAgICBzZWxm
Ll92ZXJzaW9uID0gc2VsZi5fc3RyaXBfcG9ydF9uYW1lX3ByZWZpeChwb3J0X25hbWUpCiAKKyAg
ICBkZWYgaG9zdF90b19jcmFzaF9sb2dzX3RvX3NraXAoc2VsZiwgaG9zdCk6CisgICAgICAgIGlm
IGhvc3QgaW4gc2VsZi5faG9zdF90b19leGlzdGluZ19jcmFzaGxvZ3M6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5faG9zdF90b19leGlzdGluZ19jcmFzaGxvZ3NbaG9zdF0KKyAgICAgICAgcmV0
dXJuIFtdCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZiwgZGV2aWNlX2NsYXNzPU5vbmUp
OgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJv
Y2Vzc2VzJykgb3IgMSkpOgorICAgICAgICAgICAgaG9zdCA9IHNlbGYudGFyZ2V0X2hvc3QoaSkK
KyAgICAgICAgICAgIGlmIG5vdCBob3N0IGluIHNlbGYuX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hs
b2dzOgorICAgICAgICAgICAgICAgIHNlbGYuX2hvc3RfdG9fZXhpc3RpbmdfY3Jhc2hsb2dzW2hv
c3RdID0gaG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYucGF0aF90b19jcmFzaF9sb2dz
KCkpCisKICAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycpOgogICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEw
MDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMTc2ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMTM2NCw3ICsxMzY0LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgIGRlZiBwYXRoX3Rv
X2NyYXNoX2xvZ3Moc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAot
ICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBu
ZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWVf
c3RyID0gbmFtZSBvciAnPHVua25vd24gcHJvY2VzcyBuYW1lPicKICAgICAgICAgcGlkX3N0ciA9
IHN0cihwaWQgb3IgJzx1bmtub3duPicpCiAgICAgICAgIHN0ZG91dF9saW5lcyA9IChzdGRvdXQg
b3IgJzxlbXB0eT4nKS5kZWNvZGUoJ3V0ZjgnLCAncmVwbGFjZScpLnNwbGl0bGluZXMoKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTc2ODApCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsMTcgKzEwNywxNyBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAg
IHJldHVybiBsb2dzCiAKICAgICBkZWYgX2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19k
aXIoc2VsZiwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIGNyYXNoX2xvZyA9IENyYXNoTG9ncyhzZWxm
Lmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZyA9IENy
YXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCksIGNyYXNoX2xvZ3Nf
dG9fc2tpcD1zZWxmLmhvc3RfdG9fY3Jhc2hfbG9nc190b19za2lwKHNlbGYuaG9zdCkpCiAgICAg
ICAgIHJldHVybiBjcmFzaF9sb2cuZmluZF9hbGxfbG9ncyhpbmNsdWRlX2Vycm9ycz1UcnVlLCBu
ZXdlcl90aGFuPW5ld2VyX3RoYW4pCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFt
ZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9m
bj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xl
ZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUsIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBw
ZWFycyB0aGUgdGltZQogICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdy
aXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKICAgICAgICAgIyBs
b3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgogICAgICAgICB0aW1lX2ZuID0g
dGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1l
LnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFz
aExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFz
aF9sb2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2VsZi5wYXRoX3Rv
X2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190b19za2lwPXNlbGYuaG9zdF90b19jcmFzaF9sb2dz
X3RvX3NraXAodGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0KSkKICAgICAgICAgbm93ID0gdGltZV9m
bigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2No
aWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cg
PD0gZGVhZGxpbmU6CkBAIC0yMzgsMTAgKzIzOCwxNyBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxl
UG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKIAogICAgIEBtZW1vaXplZAotICAg
IGRlZiBhcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShzZWxmLCBhcHBfYnVuZGxlKToKKyAgICBk
ZWYgcGxpc3RfZGF0YV9mcm9tX2J1bmRsZShzZWxmLCBhcHBfYnVuZGxlLCBlbnRyeSk6CiAgICAg
ICAgIHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0luZm8u
cGxpc3QnKQogICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0
aCk6CiAgICAgICAgICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9i
dW5kbGUsICdDb250ZW50cycsICdJbmZvLnBsaXN0JykKICAgICAgICAgaWYgbm90IHNlbGYuX2Zp
bGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvbGliZXhlYy9Q
bGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBsaXN0X3BhdGhd
KS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAor
ICAgICAgICAgICAgWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScsICctYycsICdQcmludCB7fScu
Zm9ybWF0KGVudHJ5KSwgcGxpc3RfcGF0aF0pLnJzdHJpcCgpCisKKyAgICBkZWYgYXBwX2lkZW50
aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6CisgICAgICAgIHJldHVybiBzZWxm
LnBsaXN0X2RhdGFfZnJvbV9idW5kbGUoYXBwX2J1bmRsZSwgJ0NGQnVuZGxlSWRlbnRpZmllcicp
CisKKyAgICBkZWYgYXBwX2V4ZWN1dGFibGVfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6
CisgICAgICAgIHJldHVybiBzZWxmLnBsaXN0X2RhdGFfZnJvbV9idW5kbGUoYXBwX2J1bmRsZSwg
J0NGQnVuZGxlRXhlY3V0YWJsZScpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEz
Nyw5ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAg
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBsZV9w
cm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKIAogICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2co
c2VsZik6Ci0gICAgICAgICMgRGFyd2luIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUs
IHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCi0gICAgICAgIGRlZiBm
YWtlX3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KLSAgICAgICAg
ICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtl
X3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hf
bG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0
X2Zvcl9sb2c9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNl
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJ
KHJldmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIGNsYXNzIERldmljZShvYmplY3Qp
OgogCiAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9IE5vbmUKIAorICAgIGRlZiBzeW1i
b2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBoYXNh
dHRyKHNlbGYucGxhdGZvcm1fZGV2aWNlLCAnc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRl
ZCcpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLnN5bWJvbGljYXRl
X2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3Rl
bS5yZWFkX3RleHRfZmlsZShwYXRoKQorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2
ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTc2ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yNDEsNyArMjQxLDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBj
cmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBp
ZCkKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2Ny
YXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4pCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYu
X2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PXNlbGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9j
b21tYW5kX3dyYXBwZXIoc2VsZik6CiAgICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdy
aW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMv
dmFsZ3JpbmQvdmFsZ3JpbmRfdGVzdHMucHkuCkBAIC0zMTIsNyArMzEyLDcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lOgogICAg
ICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgaWYgc2VsZi5fc2VydmVyX3Byb2Nlc3MuaGFz
X2NyYXNoZWQoKToKLSAgICAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lID0gc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MubmFtZSgpCisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSA9IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnByb2Nlc3NfbmFtZSgpCiAgICAgICAgICAg
ICBzZWxmLl9jcmFzaGVkX3BpZCA9IHNlbGYuX3NlcnZlcl9wcm9jZXNzLnBpZCgpCiAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTQ1Myw3ICs0NTMsNyBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICBkZWYgX2NoZWNrX2Zvcl9kcml2ZXJfY3Jhc2hf
b3JfdW5yZXNwb25zaXZlbmVzcyhzZWxmLCBlcnJvcl9saW5lKToKICAgICAgICAgY3Jhc2hlZF9j
aGVjayA9IGVycm9yX2xpbmUucnN0cmlwKCdcclxuJykKICAgICAgICAgaWYgY3Jhc2hlZF9jaGVj
ayA9PSAiI0NSQVNIRUQiOgotICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUg
PSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5uYW1lKCkKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWRf
cHJvY2Vzc19uYW1lID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucHJvY2Vzc19uYW1lKCkKICAgICAg
ICAgICAgIHNlbGYuX2NyYXNoZWRfcGlkID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkKICAg
ICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGVsaWYgZXJyb3JfbGluZS5zdGFydHN3aXRo
KCIjQ1JBU0hFRCAtICIpOgpAQCAtNjA3LDcgKzYwNyw3IEBAIGNsYXNzIERyaXZlcihvYmplY3Qp
OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yX2Zyb21fdGVzdCArPSBlcnJfbGluZQog
CiAgICAgICAgIGlmIGFzYW5fdmlvbGF0aW9uX2RldGVjdGVkIGFuZCBub3Qgc2VsZi5fY3Jhc2hl
ZF9wcm9jZXNzX25hbWU6Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9
IHNlbGYuX3NlcnZlcl9wcm9jZXNzLm5hbWUoKQorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZF9w
cm9jZXNzX25hbWUgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5wcm9jZXNzX25hbWUoKQogICAgICAg
ICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5waWQoKQogCiAg
ICAgICAgIGJsb2NrLmRlY29kZV9jb250ZW50KCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDcgKzIwMCw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICAgICAgZGVmIHBpZChzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gMTIz
NAogCi0gICAgICAgICAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgICAgIGRlZiBwcm9jZXNz
X25hbWUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdGYWtlU2VydmVyUHJvY2VzcycK
IAogICAgICAgICAgICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2d0ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZ3RrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3Mg
R3RrUG9ydChQb3J0KToKICAgICBkZWYgY2hlY2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6
CiAgICAgICAgIHJldHVybiBzdXBlcihHdGtQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVk
c19odHRwKSBhbmQgc2VsZi5fZHJpdmVyX2NsYXNzKCkuY2hlY2tfZHJpdmVyKHNlbGYpCiAKLSAg
ICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lID0g
IldlYktpdFdlYlByb2Nlc3MiIGlmIG5hbWUgPT0gIldlYlByb2Nlc3MiIGVsc2UgbmFtZQogICAg
ICAgICByZXR1cm4gR0RCQ3Jhc2hMb2dHZW5lcmF0b3IobmFtZSwgcGlkLCBuZXdlcl90aGFuLCBz
ZWxmLl9maWxlc3lzdGVtLCBzZWxmLl9wYXRoX3RvX2RyaXZlcikuZ2VuZXJhdGVfY3Jhc2hfbG9n
KHN0ZG91dCwgc3RkZXJyKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9z
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJl
dmlzaW9uIDIxNzY4MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQp
OgogICAgICAgICAgICAgICAgIHNlbGYuYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZi5f
cGF0aF90b19kcml2ZXIoKSksCiAgICAgICAgICAgICAgICAgc2VsZi5sYXlvdXRfdGVzdHNfZGly
KCksCiAgICAgICAgICAgICApCisgICAgICAgIHN1cGVyKElPU1BvcnQsIHNlbGYpLnNldHVwX3Rl
c3RfcnVuKGRldmljZV9jbGFzcykKIAogICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToK
ICAgICAgICAgc3VwZXIoSU9TUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlzaW9uIDIxNzY4
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgbG9nZ2luZwogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZp
ZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJ
T1NQb3J0CiAKQEAgLTY3LDE2ICs2OCwzMyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQp
OgogICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lv
bl9udW1iZXIKICAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQogCi0gICAgIyBGSVhNRTogVGhlc2Ug
bmVlZCBkZXZpY2UgaW1wbGVtZW50YXRpb25zIDxyZGFyOi8vcHJvYmxlbS8zMDQ5Nzk5MT4uCiAg
ICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgorICAgICAgICBpZiBub3QgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAg
ICByYWlzZSBSdW50aW1lRXJyb3Ioc2VsZi5OT19PTl9ERVZJQ0VfVEVTVElORykKKyAgICAgICAg
cmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLmlvc19jcmFzaF9sb2dfcGF0aCgpCisKKyAgICBkZWYg
X2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIoc2VsZiwgbmV3ZXJfdGhhbik6Cisg
ICAgICAgIGxvZ19saXN0ID0ge30KKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2Vf
Zm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExv
Z3MoZGV2aWNlLCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9
c2VsZi5ob3N0X3RvX2NyYXNoX2xvZ3NfdG9fc2tpcChkZXZpY2UpKQorICAgICAgICAgICAgbG9n
X2xpc3QudXBkYXRlKGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUs
IG5ld2VyX3RoYW49bmV3ZXJfdGhhbikpCisgICAgICAgIHJldHVybiBsb2dfbGlzdAorCisgICAg
ZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUsIHRh
cmdldF9ob3N0PU5vbmUpOgorICAgICAgICBpZiB0YXJnZXRfaG9zdDoKKyAgICAgICAgICAgIHJl
dHVybiBzdXBlcihJT1NEZXZpY2VQb3J0LCBzZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWVfZm4sIHNsZWVwX2ZuPXNs
ZWVwX2ZuLCB3YWl0X2Zvcl9sb2c9d2FpdF9mb3JfbG9nLCB0YXJnZXRfaG9zdD10YXJnZXRfaG9z
dCkKKworICAgICAgICAjIFdlIG5lZWQgdG8gc2VhcmNoIGV2ZXJ5IGRldmljZSBzaW5jZSBvbmUg
d2FzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5fZGV2aWNlX2Zv
cl93b3JrZXJfbnVtYmVyX21hcCgpOgorICAgICAgICAgICAgc3RkZXJyX291dCwgY3Jhc2hsb2cg
PSBzdXBlcihJT1NEZXZpY2VQb3J0LCBzZWxmKS5fZ2V0X2NyYXNoX2xvZyhuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWVfZm4sIHNsZWVwX2ZuPXNsZWVw
X2ZuLCB3YWl0X2Zvcl9sb2c9RmFsc2UsIHRhcmdldF9ob3N0PWRldmljZSkKKyAgICAgICAgICAg
IGlmIGNyYXNobG9nOgorICAgICAgICAgICAgICAgIHJldHVybiAoc3RkZXJyLCBjcmFzaGxvZykK
KyAgICAgICAgcmV0dXJuIChzdGRlcnIsIE5vbmUpCiAKKyAgICAjIEZJWE1FOiBUaGVzZSBuZWVk
IGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPi4KICAgICBk
ZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgogICAg
ICAgICBwYXNzCiAKLSAgICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hl
ZF9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgotICAgICAgICByZXR1cm4ge30KLQogICAgIGRlZiBs
b29rX2Zvcl9uZXdfc2FtcGxlcyhzZWxmLCB1bnJlc3BvbnNpdmVfcHJvY2Vzc2VzLCBzdGFydF90
aW1lKToKICAgICAgICAgcmV0dXJuIHt9CiAKQEAgLTkwLDkgKzEwOCw2IEBAIGNsYXNzIElPU0Rl
dmljZVBvcnQoSU9TUG9ydCk6CiAgICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAg
ICAgIHJldHVybiAnaW9zLWRldmljZScKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBu
YW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVw
X2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAgICAgICAgcmV0dXJuIChzdGRlcnIsIE5v
bmUpCi0KICAgICBkZWYgX2NyZWF0ZV9kZXZpY2VzKHNlbGYsIGRldmljZV9jbGFzcyk6CiAgICAg
ICAgIGlmIG5vdCBhcHBsZV9hZGRpdGlvbnMoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcihzZWxmLk5PX09OX0RFVklDRV9URVNUSU5HKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxNzY4
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCB0aW1lCisKIGZyb20gd2Via2l0cHkucG9ydC5pb3Nf
ZGV2aWNlIGltcG9ydCBJT1NEZXZpY2VQb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlv
c190ZXN0Y2FzZQogCkBAIC0zNywxMCArMzksMTcgQEAgY2xhc3MgSU9TRGV2aWNlVGVzdChpb3Nf
dGVzdGNhc2UuSU9TVGVzdAogICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9w
ZXJhdGluZ19zeXN0ZW0oKSkKIAotICAgICMgRklYTUU6IFVwZGF0ZSB0ZXN0cyB3aGVuIDxyZGFy
Oi8vcHJvYmxlbS8zMDQ5Nzk5MT4gaXMgY29tcGxldGVkLgogICAgIGRlZiB0ZXN0X2NyYXNobG9n
X3BhdGgoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAg
ICAgICAgcG9ydC5wYXRoX3RvX2NyYXNoX2xvZ3MoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NyYXNo
X2xvZyhzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT1zZWxm
LnBvcnRfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3Ip
OgorICAgICAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0
LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQogCisgICAgIyBG
SVhNRTogVXBkYXRlIHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21w
bGV0ZWQuCiAgICAgZGVmIHRlc3Rfc3BpbmR1bXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5w
eQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVs
YXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIGNsYXNzIFNp
bXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAKICAgICAgICAgc2VsZi5fYnVuZGxlX2lk
ID0gcG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQogCisgICAgZGVm
IHByb2Nlc3NfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcnQuYXBwX2V4ZWN1
dGFibGVfZnJvbV9idW5kbGUoc2VsZi5fY21kWzBdKQorCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBfYWNjZXB0X2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VydmVyLCB0eXBlKToKICAgICAg
ICAgY29ubmVjdGlvbiwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5CShyZXZpc2lvbiAyMTc2ODApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgY2xh
c3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6
CiAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5KCkKIAotICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICBkZWYg
X2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
biwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0
X2hvc3Q9Tm9uZSk6CiAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFu
ZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCiAgICAgICAgICMgUmVwb3J0Q3Jhc2gg
dGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRo
ZXJlIGFyZQogICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24u
CkBAIC0zODAsNyArMzgwLDcgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICB0
aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9m
biBvciB0aW1lLnNsZWVwCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xv
Z3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAg
ICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHRhcmdldF9ob3N0IG9yIHNlbGYuaG9zdCwgc2Vs
Zi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190b19za2lwPXNlbGYuaG9zdF90b19j
cmFzaF9sb2dzX3RvX3NraXAodGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0KSkKICAgICAgICAgbm93
ID0gdGltZV9mbigpCiAgICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1
cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCiAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcg
Zm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3dwZS5weQkocmV2aXNpb24gMjE3NjgwKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3dwZS5weQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNiBAQCBj
bGFzcyBXUEVQb3J0KFBvcnQpOgogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fYnVpbHRfZXhlY3V0YWJsZXNfcGF0aCgnSW1hZ2VEaWZmJykK
IAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJy
LCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5h
bWUgPSAiV1BFV2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAg
ICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4s
IHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9s
b2coc3Rkb3V0LCBzdGRlcnIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312078</attachid>
            <date>2017-06-06 09:24:46 -0700</date>
            <delta_ts>2017-06-06 09:31:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170606092445.patch</filename>
            <type>text/plain</type>
            <size>26791</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDc5IEBACisyMDE3LTA2LTA2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuX19pbml0
X18pOiBBY2NlcHQgb3B0aW9uYWwgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGlnbm9yZS4KKyAgICAg
ICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90ZW50aWFsIHBs
YXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0by4KKyAgICAg
ICAgKENyYXNoTG9ncy5fcGFyc2VfZGFyd2luX2NyYXNobG9nKTogU2hhcmUgY29kZSBmb3IgcGFy
c2luZyBvZiBEYXJ3aW4gY3Jhc2ggbG9ncy4KKyAgICAgICAgRG8gbm90IGFzc3VtZSB0aGF0IGEg
RGFyd2luIGNyYXNoIGxvZyBzdGFydHMgd2l0aCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgKENyYXNo
TG9ncy5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbik6IFJlbW92ZSAuYXBwIGluIHByb2Nlc3MgbmFt
ZSBmb3IgaU9TLCB1c2UKKyAgICAgICAgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgRGFyd2luIGNy
YXNoIGxvZ3MuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4uaXNf
Y3Jhc2hfbG9nKTogU2tpcCBjcmFzaCBsb2dzIHBhc3NlZCBpbnRvIHRoaXMKKyAgICAgICAgb2Jq
ZWN0IHNvIHRoYXQgY3Jhc2ggbG9ncyBhbHJlYWR5IG9uIHRoZSBzeXN0ZW0gYmVmb3JlIHRlc3Rp
bmcgYXJlIG5vdCBwYXJzZWQuCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ193
aW4uaXNfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgIChDcmFzaExvZ3MuX2ZpbmRfYWxsX2xv
Z3NfZGFyd2luLmlzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5k
X2FsbF9sb2dzX2Rhcndpbik6IFVzZSBzaGFyZWQgY29kZSBmb3IgcGFyc2luZyBEYXJ3aW4gY3Jh
c2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4p
OiBDcmFzaCBsb2dzIG1heSBub3QgaGF2ZSB0aGVpciBwcm9jZXNzIG9uIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5
OgorICAgICAgICAoU3lzdGVtSG9zdC5zeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKTog
VGhlIHN5bWJvbGljYXRlZCBjcmFzaCBsb2cgZm9yIG1vc3QKKyAgICAgICAgc3lzdGVtcyBpcyBq
dXN0IHRoZSBjcmFzaGxvZywgdXNlIHRoaXMgYmVoYXZpb3IgYnkgZGVmYXVsdC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdF9tb2NrLnB5OgorICAg
ICAgICAoTW9ja1N5c3RlbUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6IFRo
ZSBzeW1ib2xpY2F0ZWQgY3Jhc2ggbG9nIGZvciBtb3N0CisgICAgICAgIHN5c3RlbXMgaXMganVz
dCB0aGUgY3Jhc2hsb2csIHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5OgorICAgICAgICAoQXBwbGVQb3J0KTogQWRk
IGEgZGljdGlvbmFyeSBtYXBwaW5nIGhvc3RzIHRvIGEgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGJl
IHNraXBwZWQuCisgICAgICAgIChBcHBsZVBvcnQuc2V0dXBfdGVzdF9ydW4pOiBTZXQgdGhlIGxp
c3Qgb2YgY3Jhc2ggbG9ncyB0byBiZSBza2lwcGVkIHRvIHRoZSBjcmFzaCBsb2dzIG9uCisgICAg
ICAgIHRoZSBzeXN0ZW0gYmVmb3JlIHRlc3RpbmcgYmVnaW5zCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weToKKyAgICAgICAgKFBvcnQuX2dldF9jcmFzaF9sb2cpOiBQYXNzIG9wdGlvbmFsIHRhcmdl
dCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaCBsb2dzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9kYXJ3aW4ucHk6CisgICAgICAgIChEYXJ3aW5Qb3J0Ll9sb29rX2Zvcl9hbGxfY3Jh
c2hfbG9nc19pbl9sb2dfZGlyKTogUGFzcyBsaXN0IG9mIGNyYXNoIGxvZ3MgdG8gYmUgc2tpcHBl
ZCB0bworICAgICAgICBDcmFzaExvZ3Mgb2JqZWN0LgorICAgICAgICAoRGFyd2luUG9ydC5fZ2V0
X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNo
IGxvZ3MsIHBhc3MgbGlzdCBvZiBjcmFzaAorICAgICAgICBsb2dzIHRvIGJlIHNraXBwZWQgdG8g
Q3Jhc2hMb2dzIG9iamVjdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
X3Rlc3RjYXNlLnB5OgorICAgICAgICAoRGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBS
ZW1vdmVkIHVudXNlZCBsb2NhbCBmdW5jdGlvbi4KKyAgICAgICAgKERhcndpblRlc3QudGVzdF9n
ZXRfY3Jhc2hfbG9nLmZha2VfdGltZV9jYik6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RldmljZS5weToKKyAgICAgICAgKERldmljZS5zeW1ib2xpY2F0ZV9jcmFz
aF9sb2dfaWZfbmVlZGVkKTogSWYgdGhlIHBsYXRmb3JtIGRldmljZSBoYXMgYSBmdW5jdGlvbiB3
aXRoIHRoaXMKKyAgICAgICAgbmFtZSwgY2FsbCBpdC4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGRl
ZmF1bHQgYmVoYXZpb3IgYW5kIHJlYWQgdGhlIGZpbGUgYXQgdGhlIHByb3ZpZGVkIHBhdGguCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZl
ci5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5n
IGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAg
ICAgICAoR3RrUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qg
d2hlbiBnZXR0aW5nIGNyYXNobG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zLnB5OiBEaXR0by4KKyAgICAgICAgKElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBFYWNoIGRl
dmljZSBpcyB0cmVhdGVkIGFzIGFuIGluZGVwZW5kZW50IGhvc3QuIFNldCB0aGUgbGlzdCBvZiBj
cmFzaCBsb2dzCisgICAgICAgIHRvIGJlIHNraXBwZWQgZm9yIGVhY2ggaG9zdC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weToKKyAgICAgICAgKElPU0Rldmlj
ZVBvcnQucGF0aF90b19jcmFzaF9sb2dzKTogQ29uc3VsdCBhcHBsZV9hZGRpdGlvbnMgZm9yIHRo
ZSBwYXRoIHRvIGNyYXNoIGxvZ3MuCisgICAgICAgIChJT1NEZXZpY2VQb3J0Ll9sb29rX2Zvcl9h
bGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKTogU2VhcmNoIGV2ZXJ5IGNvbm5lY3RlZCBkZXZpY2Ug
Zm9yCisgICAgICAgIGNyYXNoIGxvZ3MgYW5kIHBhc3MgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGln
bm9yZSB0byBlYWNoIGluc3RhbmNlIG9mIENyYXNoTG9ncy4KKyAgICAgICAgKElPU0RldmljZVBv
cnQuX2dldF9jcmFzaF9sb2cpOiBTZWFyY2ggdGhlIHNwZWNpZmllZCB0YXJnZXQgaG9zdCBmb3Ig
YSBjcmFzaCBsb2cgaWYgYSB0YXJnZXQKKyAgICAgICAgaG9zdCBpcyBzcGVjaWZpZWQuIEVsc2Us
IHNlYXJjaCBhbGwgY29ubmVjdGVkIGRldmljZXMgZm9yIHRoZSBzcGVjaWZpZWQgY3Jhc2gtbG9n
LgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IERlbGV0
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfY3Jhc2hsb2dfcGF0aCk6IFdpdGhvdXQg
YXBwbGVfYWRkaXRpb25zLCBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHJhaXNlZC4KKyAgICAgICAg
KElPU0RldmljZVRlc3QudGVzdF9nZXRfY3Jhc2hfbG9nKTogRGl0dG8uCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5OgorICAgICAgICAoU2ltdWxh
dG9yUHJvY2Vzcy5wcm9jZXNzX25hbWUpOiBDaGVjayB0aGUgcHJvdmlkZWQgYnVuZGxlIGZvciB0
aGUgcHJvY2VzcyBuYW1lLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6
CisgICAgICAgIChXaW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQg
aG9zdCB3aGVuIGdldHRpbmcgY3Jhc2hsb2dzLCBwYXNzIGxpc3Qgb2YgY3Jhc2gKKyAgICAgICAg
bG9ncyB0byBiZSBza2lwcGVkIHRvIENyYXNoTG9ncyBvYmplY3QuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L3dwZS5weToKKyAgICAgICAgKFdQRVBvcnQuX2dldF9jcmFzaF9sb2cp
OiBQYXNzIG9wdGlvbmFsIHRhcmdldCBob3N0IHdoZW4gZ2V0dGluZyBjcmFzaGxvZ3MuCisKIDIw
MTctMDYtMDYgIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+
CiAKICAgICAgICAgW1dQRV0gQWRkIGFuIGluc3RhbGwtZGVwZW5kZW5jaWVzIHNjcmlwdApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dz
LnB5CShyZXZpc2lvbiAyMTc4MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0NiArMjcsNjIgQEAKICMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBjb2RlY3MKIGltcG9ydCBkYXRl
dGltZQoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogCiAKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKKworCiBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKIAogICAgIEdMT0JB
TF9QSURfUkVHRVggPSByZS5jb21waWxlKHInXHMrR2xvYmFsXHMrUElEOlxzK1xbKD9QPHBpZD5c
ZCspXF0nKQogICAgIEVYSVRfUFJPQ0VTU19QSURfUkVHRVggPSByZS5jb21waWxlKHInRXhpdCBw
cm9jZXNzIFxkKzooP1A8cGlkPlx3KyksIGNvZGUnKQorICAgIERBUldJTl9QUk9DRVNTX1JFR0VY
ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBp
ZD5cZCspXF0kJykKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBjcmFzaF9sb2dfZGly
ZWN0b3J5KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgY3Jhc2hfbG9nX2RpcmVjdG9y
eSwgY3Jhc2hfbG9nc190b19za2lwPVtdKToKICAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAg
ICAgICAgc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSA9IGNyYXNoX2xvZ19kaXJlY3RvcnkKKyAg
ICAgICAgc2VsZi5fY3Jhc2hfbG9nc190b19za2lwID0gY3Jhc2hfbG9nc190b19za2lwCiAKICAg
ICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1
ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9ob3N0
LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21h
YygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbihwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9l
cnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIGVsaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193
aW4oKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfd2luKHByb2Nl
c3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKICAgICAgICAgcmV0dXJu
IE5vbmUKIAogICAgIGRlZiBmaW5kX2FsbF9sb2dzKHNlbGYsIGluY2x1ZGVfZXJyb3JzPUZhbHNl
LCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21h
YygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYuX2hv
c3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGxf
bG9nc19kYXJ3aW4oaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIHJldHVybiBO
b25lCiAKKyAgICBkZWYgX3BhcnNlX2Rhcndpbl9jcmFzaGxvZyhzZWxmLCBwYXRoKToKKyAgICAg
ICAgY29udGVudHMgPSBzZWxmLl9ob3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQo
cGF0aCkKKyAgICAgICAgaWYgbm90IGNvbnRlbnRzOgorICAgICAgICAgICAgcmV0dXJuIChOb25l
LCBOb25lLCBOb25lKQorICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50cy5zcGxpdGxpbmVzKCk6
CisgICAgICAgICAgICBtYXRjaCA9IENyYXNoTG9ncy5EQVJXSU5fUFJPQ0VTU19SRUdFWC5tYXRj
aChsaW5lKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgcmV0dXJuICht
YXRjaC5ncm91cCgncHJvY2Vzc19uYW1lJyksIGludChtYXRjaC5ncm91cCgncGlkJykpLCBjb250
ZW50cykKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBjb250ZW50cykKKwogICAgIGRlZiBf
ZmluZF9uZXdlc3RfbG9nX2RhcndpbihzZWxmLCBwcm9jZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9l
cnJvcnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRo
LCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuc3RhcnRzd2l0aChwcm9j
ZXNzX25hbWUgKyAiXyIpIGFuZCBiYXNlbmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAg
ICAgIGlmIGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9f
c2tpcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiAo
YmFzZW5hbWUuc3RhcnRzd2l0aChwcm9jZXNzX25hbWUgKyAnXycpIGFuZCAoYmFzZW5hbWUuZW5k
c3dpdGgoJy5jcmFzaCcpKSBvcgorICAgICAgICAgICAgICAgICAgICAocHJvY2Vzc19uYW1lIGlu
IGJhc2VuYW1lICBhbmQgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKSkpCiAKICAgICAgICAgbG9n
cyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGly
ZWN0b3J5LCBmaWxlX2ZpbHRlcj1pc19jcmFzaF9sb2cpCi0gICAgICAgIGZpcnN0X2xpbmVfcmVn
ZXggPSByZS5jb21waWxlKHInXlByb2Nlc3M6XHMrKD9QPHByb2Nlc3NfbmFtZT4uKikgXFsoP1A8
cGlkPlxkKylcXSQnKQogICAgICAgICBlcnJvcnMgPSAnJwogICAgICAgICBmb3IgcGF0aCBpbiBy
ZXZlcnNlZChzb3J0ZWQobG9ncykpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAg
IGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+
IG5ld2VyX3RoYW46Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9ob3N0LmZpbGVzeXN0
ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJz
dF9saW5lX3JlZ2V4Lm1hdGNoKGZbMDpmLmZpbmQoJ1xuJyldKQotICAgICAgICAgICAgICAgICAg
ICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpID09IHByb2Nlc3NfbmFt
ZSBhbmQgKHBpZCBpcyBOb25lIG9yIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JzICsgZgorICAgICAgICAgICAgICAg
ICAgICBwYXJzZWRfbmFtZSwgcGFyc2VkX3BpZCwgbG9nX2NvbnRlbnRzID0gc2VsZi5fcGFyc2Vf
ZGFyd2luX2NyYXNobG9nKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcnNlZF9uYW1l
ID09IHByb2Nlc3NfbmFtZSBhbmQgKHBpZCBpcyBOb25lIG9yIHBhcnNlZF9waWQgPT0gcGlkKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcnMgKyBsb2dfY29udGVudHMKICAg
ICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVf
ZXJyb3JzOgogICAgICAgICAgICAgICAgICAgICBlcnJvcnMgKz0gIkVSUk9SOiBGYWlsZWQgdG8g
cmVhZCAnJXMnOiAlc1xuIiAlIChwYXRoLCBzdHIoZSkpCkBAIC04MCw2ICs5Niw4IEBAIGNsYXNz
IENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAgZGVmIF9maW5kX25ld2VzdF9sb2dfd2luKHNlbGYs
IHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAg
IGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKKyAgICAgICAgICAgIGlm
IGZzLmpvaW4oZGlycGF0aCwgYmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBiYXNlbmFt
ZS5zdGFydHN3aXRoKCJDcmFzaExvZyIpCiAKICAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmls
ZXN5c3RlbS5maWxlc191bmRlcihzZWxmLl9jcmFzaF9sb2dfZGlyZWN0b3J5LCBmaWxlX2ZpbHRl
cj1pc19jcmFzaF9sb2cpCkBAIC0xMTcsMTggKzEzNSwyMiBAQCBjbGFzcyBDcmFzaExvZ3Mob2Jq
ZWN0KToKIAogICAgIGRlZiBfZmluZF9hbGxfbG9nc19kYXJ3aW4oc2VsZiwgaW5jbHVkZV9lcnJv
cnMsIG5ld2VyX3RoYW4pOgogICAgICAgICBkZWYgaXNfY3Jhc2hfbG9nKGZzLCBkaXJwYXRoLCBi
YXNlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoIi5jcmFzaCIp
CisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBpbiBzZWxmLl9jcmFz
aF9sb2dzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAg
ICByZXR1cm4gYmFzZW5hbWUuZW5kc3dpdGgoJy5jcmFzaCcpIG9yIGJhc2VuYW1lLmVuZHN3aXRo
KCcuaXBzJykKIAogICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3Vu
ZGVyKHNlbGYuX2NyYXNoX2xvZ19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykK
LSAgICAgICAgZmlyc3RfbGluZV9yZWdleCA9IHJlLmNvbXBpbGUocideUHJvY2VzczpccysoP1A8
cHJvY2Vzc19uYW1lPi4qKSBcWyg/UDxwaWQ+XGQrKVxdJCcpCiAgICAgICAgIGVycm9ycyA9ICcn
CiAgICAgICAgIGNyYXNoX2xvZ3MgPSB7fQogICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChz
b3J0ZWQobG9ncykpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBu
ZXdlcl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3Ro
YW46CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gIlVua25vd24iCi0gICAgICAg
ICAgICAgICAgICAgIHBpZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgbG9nX2NvbnRlbnRzID0g
c2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCisgICAgICAgICAgICAg
ICAgICAgIHBhcnNlZF9uYW1lLCBwYXJzZWRfcGlkLCBsb2dfY29udGVudHMgPSBzZWxmLl9wYXJz
ZV9kYXJ3aW5fY3Jhc2hsb2cocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxvZ19j
b250ZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybignTm8gZGF0YSBpbiBj
cmFzaCBsb2cgYXQge30nLmZvcm1hdChwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisKICAgICAgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGltZXN0YW1wIGZyb20gbG9n
IGNvbnRlbnRzCiAgICAgICAgICAgICAgICAgICAgIGNyYXNoX3RpbWUgPSBzZWxmLmdldF90aW1l
c3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQogICAgICAgICAgICAgICAgICAgICBpZiBjcmFz
aF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdlcl90aGFuIGlzIG5vdCBOb25lOgpAQCAtMTM2LDEx
ICsxNTgsOCBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGNyYXNoX3RpbWUgPCBzdGFydF90aW1lOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3Jl
Z2V4Lm1hdGNoKGxvZ19jb250ZW50c1swOmxvZ19jb250ZW50cy5maW5kKCdcbicpXSkKLSAgICAg
ICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
X25hbWUgPSBtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1lJykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBpZCA9IHN0cihtYXRjaC5ncm91cCgncGlkJykpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfbmFtZSA9IHByb2Nlc3NfbmFtZSArICItIiArIHBpZAorICAgICAgICAgICAgICAg
ICAgICBpZiBwYXJzZWRfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9uYW1l
ID0gcGFyc2VkX25hbWUgKyAiLSIgKyBzdHIocGFyc2VkX3BpZCkKIAogICAgICAgICAgICAgICAg
ICAgICB3aGlsZSByZXN1bHRfbmFtZSBpbiBjcmFzaF9sb2dzOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X25hbWUgPSByZXN1bHRfbmFtZSArICItMSIKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0
dGVzdC5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsOCBAQCBmcm9tIHdlYmtpdHB5LnBvcnQud2luIGltcG9ydCBXaW5Qb3J0CiAKIAogZGVmIG1h
a2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKHByb2Nlc3NfbmFtZSwgcGlkKToKLSAgICByZXR1
cm4gIiIiUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1lfSBbe3BpZH1dCisgICAgcmV0dXJu
ICIiIk1heSBoYXZlIGdhcmJhZ2UgYXQgdGhlIGJlZ2lubmluZworUHJvY2VzczogICAgICAgICB7
cHJvY2Vzc19uYW1lfSBbe3BpZH1dCiBQYXRoOiAgICAgICAgICAgIC9Wb2x1bWVzL0RhdGEvc2xh
dmUvc25vd2xlb3BhcmQtaW50ZWwtcmVsZWFzZS10ZXN0cy9idWlsZC9XZWJLaXRCdWlsZC9SZWxl
YXNlL3twcm9jZXNzX25hbWV9CiBJZGVudGlmaWVyOiAgICAgIHtwcm9jZXNzX25hbWV9CiBWZXJz
aW9uOiAgICAgICAgID8/PyAoPz8/KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3N5c3RlbWhvc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJKHJldmlzaW9uIDIxNzgzMykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC00NiwzICs0Niw2IEBAIGNsYXNzIFN5c3RlbUhvc3Qob2JqZWN0KToKIAogICAg
IGRlZiBtYWtlX2ZpbGVfbG9jayhzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIGZpbGVfbG9j
ay5GaWxlTG9jayhwYXRoKQorCisgICAgZGVmIHN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVk
ZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0
X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9z
eXN0ZW1ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQkod29y
a2luZyBjb3B5KQpAQCAtNTQsMyArNTQsNiBAQCBjbGFzcyBNb2NrU3lzdGVtSG9zdChvYmplY3Qp
OgogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4g
TW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25l
ZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3Rl
eHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQkocmV2
aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAg
ICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcwogICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIg
PSBbXQogICAgIEFSQ0hJVEVDVFVSRVMgPSBbXQorICAgIF9jcmFzaF9sb2dzX3RvX3NraXBfZm9y
X2hvc3QgPSB7fQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRldGVybWluZV9mdWxsX3Bv
cnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6CkBAIC05Miw2ICs5Myw5IEBA
IGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lLnJl
cGxhY2UoJy13azInLCAnJykKICAgICAgICAgc2VsZi5fdmVyc2lvbiA9IHNlbGYuX3N0cmlwX3Bv
cnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKQogCisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYs
IGRldmljZV9jbGFzcz1Ob25lKToKKyAgICAgICAgc2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zv
cl9ob3N0W3NlbGYuaG9zdF0gPSBzZWxmLmhvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWxm
LnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorCiAgICAgZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxm
KToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKICAgICAgICAg
ICAgIHJldHVybiAzNTAgKiAxMDAwCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNjQsNyArMTM2NCw3IEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlk
LCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PU5v
bmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3IgJzx1bmtub3duIHByb2Nlc3MgbmFtZT4n
CiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8dW5rbm93bj4nKQogICAgICAgICBzdGRv
dXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+JykuZGVjb2RlKCd1dGY4JywgJ3JlcGxhY2Un
KS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQko
cmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE3ICsxMDcsMTcgQEAgY2xhc3MgRGFyd2luUG9ydChB
cHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gbG9ncwogCiAgICAgZGVmIF9sb29rX2Zvcl9hbGxf
Y3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgotICAgICAgICBjcmFzaF9s
b2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorICAg
ICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hf
bG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9c2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zvcl9o
b3N0LmdldChzZWxmLmhvc3QsIFtdKSkKICAgICAgICAgcmV0dXJuIGNyYXNoX2xvZy5maW5kX2Fs
bF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKIAotICAg
IGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdl
cl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlKToK
KyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1
ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRvIHNsb3ctc3Bp
biBoZXJlIGFuZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJzIHRoZSB0aW1lCiAgICAgICAgICMgUmVw
b3J0Q3Jhc2ggdGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUgYW5kIGZsdXNoIHRoZSBmaWxlIHZhcmll
cyB3aGVuIHRoZXJlIGFyZQogICAgICAgICAjIGxvdHMgb2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMg
Z29pbmcgb24uCiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAg
ICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9nID0g
JycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0aF90
b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModGFyZ2V0X2hv
c3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3Rv
X3NraXA9c2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0LmdldCh0YXJnZXRfaG9zdCBv
ciBzZWxmLmhvc3QsIFtdKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgIGRlYWRs
aW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEp
KQogICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJl
dmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVz
dGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw5ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5U
ZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3Nl
cnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBsZV9wcm9jZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkK
IAogICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6Ci0gICAgICAgICMgRGFyd2luIGNy
YXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUg
d2UgZG9uJ3QgY3Jhc2guCi0gICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKLSAgICAgICAgICAg
IHRpbWVzID0gWzAsIDIwLCA0MF0KLSAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBv
cCgwKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9u
YW1lKQogICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQs
IE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHJldmlzaW9uIDIxNzgzMykKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDExIEBAIGNsYXNzIERldmljZShvYmplY3QpOgogCiAgICAgICAgIHNlbGYubGlzdGVuaW5n
X3NvY2tldCA9IE5vbmUKIAorICAgIGRlZiBzeW1ib2xpY2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVk
KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYucGxhdGZvcm1fZGV2aWNlLCAn
c3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCcpOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYucGxhdGZvcm1fZGV2aWNlLnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQocGF0aCkK
KyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQorCiAg
ICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNl
bGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTc4MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgY2xhc3Mg
RHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjcmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVkX3Bp
ZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBpZCkKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xv
ZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Ci0gICAgICAgIHJldHVybiBzZWxm
Ll9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9j
cmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4pCisgICAgICAgIHJldHVybiBz
ZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxm
Ll9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRhcmdldF9ob3N0PXNl
bGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9jb21tYW5kX3dyYXBwZXIoc2VsZik6CiAgICAg
ICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1
bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfdGVzdHMucHku
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9uIDIxNzgzMykKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcgY29weSkKQEAgLTIy
MCw3ICsyMjAsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRlZiBjaGVja19zeXNfZGVw
cyhzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0dXJuIHN1cGVyKEd0a1BvcnQsIHNlbGYp
LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBzZWxmLl9kcml2ZXJfY2xhc3MoKS5jaGVj
a19kcml2ZXIoc2VsZikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2Vs
ZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9u
ZSk6CiAgICAgICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAiV2ViUHJv
Y2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRvcihuYW1l
LCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9fZHJpdmVy
KS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTI0LDExICsxMjQsMTMgQEAgY2xh
c3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1NraXBwaW5n
IGluc3RhbGxhdGlvbicpCiAKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJv
Y2Vzc2VzKCkpOgotICAgICAgICAgICAgc2VsZi50YXJnZXRfaG9zdChpKS5wcmVwYXJlX2Zvcl90
ZXN0aW5nKAorICAgICAgICAgICAgaG9zdCA9IHNlbGYudGFyZ2V0X2hvc3QoaSkKKyAgICAgICAg
ICAgIGhvc3QucHJlcGFyZV9mb3JfdGVzdGluZygKICAgICAgICAgICAgICAgICBzZWxmLnBvcnRz
X3RvX2ZvcndhcmQoKSwKICAgICAgICAgICAgICAgICBzZWxmLmFwcF9pZGVudGlmaWVyX2Zyb21f
YnVuZGxlKHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkpLAogICAgICAgICAgICAgICAgIHNlbGYubGF5
b3V0X3Rlc3RzX2RpcigpLAogICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5fY3Jhc2hf
bG9nc190b19za2lwX2Zvcl9ob3N0W2hvc3RdID0gaG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVy
KHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCiAKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4o
c2VsZik6CiAgICAgICAgIHN1cGVyKElPU1BvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5CShyZXZpc2lv
biAyMTc4MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3
ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIGZyb20gd2Via2l0cHkucG9y
dC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBp
bXBvcnQgSU9TUG9ydAogCkBAIC02NywxNiArNjgsMzMgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJ
T1NQb3J0KToKICAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9y
X3ZlcnNpb25fbnVtYmVyCiAgICAgICAgIHJldHVybiBwb3J0X25hbWUKIAotICAgICMgRklYTUU6
IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5
OTE+LgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Moc2VsZik6Ci0gICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCisg
ICAgICAgIHJldHVybiBhcHBsZV9hZGRpdGlvbnMoKS5pb3NfY3Jhc2hfbG9nX3BhdGgoKQorCisg
ICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2VyX3Ro
YW4pOgorICAgICAgICBsb2dfbGlzdCA9IHt9CisgICAgICAgIGZvciBkZXZpY2UgaW4gc2VsZi5f
ZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgpOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Q3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3RvX2NyYXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190
b19za2lwPXNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcF9mb3JfaG9zdC5nZXQoZGV2aWNlLCBbXSkp
CisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jhc2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5j
bHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKSkKKyAgICAgICAgcmV0dXJu
IGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRv
dXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9ob3N0
OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jh
c2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGlt
ZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz13YWl0X2Zvcl9sb2csIHRhcmdl
dF9ob3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMgV2UgbmVlZCB0byBzZWFyY2ggZXZlcnkg
ZGV2aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgZm9yIGRldmljZSBp
biBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKCk6CisgICAgICAgICAgICBzdGRl
cnJfb3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0RldmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hf
bG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9m
biwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xvZz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2
aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6CisgICAgICAgICAgICAgICAgcmV0dXJuIChz
dGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKIAorICAgICMg
RklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0v
MzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBw
cm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hf
bG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6Ci0gICAgICAgIHJldHVy
biB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1wbGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9w
cm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICByZXR1cm4ge30KIApAQCAtOTAsOSArMTA4
LDYgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICBkZWYgb3BlcmF0aW5nX3N5
c3RlbShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3MtZGV2aWNlJwogCi0gICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRp
bWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICBy
ZXR1cm4gKHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBfY3JlYXRlX2RldmljZXMoc2VsZiwgZGV2
aWNlX2NsYXNzKToKICAgICAgICAgaWYgbm90IGFwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05fREVWSUNFX1RFU1RJTkcpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5w
eQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19k
ZXZpY2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDggQEAKICMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHRpbWUKKwogZnJvbSB3
ZWJraXRweS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElPU0RldmljZVBvcnQKIGZyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAgLTM3LDEwICszOSwxNyBAQCBjbGFzcyBJ
T1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5n
X3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLWRldmljZScsIHNl
bGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgIyBGSVhNRTogVXBkYXRl
IHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAg
ZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRp
bWVFcnJvcik6CisgICAgICAgICAgICBwb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncygpCisKKyAgICBk
ZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFp
c2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1w
UmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9
RmFsc2UpCiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVzdHMgd2hlbiA8cmRhcjovL3Byb2JsZW0v
MzA0OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYgdGVzdF9zcGluZHVtcChzZWxmKToKICAg
ICAgICAgcGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9u
IDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAg
ZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0
c19kaXJlY3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwg
d2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5v
bmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9zdD1Ob25lKToKICAgICAgICAgIyBOb3Rl
IHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhl
IHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQg
Zmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUgYXJlCiAgICAgICAgICMgbG90cyBvZiBz
aW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAgLTM4MCw3ICszODAsNyBAQCBjbGFzcyBX
aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKICAgICAgICAgY3Jh
c2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNl
bGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Mo
dGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFz
aF9sb2dzX3RvX3NraXA9c2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0LmdldCh0YXJn
ZXRfaG9zdCBvciBzZWxmLmhvc3QsIFtdKSkKICAgICAgICAgbm93ID0gdGltZV9mbigpCiAgICAg
ICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdlJ3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdv
cmtpbmcgLi4uCiAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3Ig
JXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC93cGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dw
ZS5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dw
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNiBAQCBjbGFzcyBXUEVQb3J0KFBvcnQp
OgogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbHRfZXhlY3V0YWJsZXNfcGF0aCgnSW1hZ2VEaWZmJykKIAotICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAg
ICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV1BFV2ViUHJvY2Vz
cyIgaWYgbmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBHREJD
cmFzaExvZ0dlbmVyYXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0s
IHNlbGYuX3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312079</attachid>
            <date>2017-06-06 09:31:46 -0700</date>
            <delta_ts>2017-06-06 13:18:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171976-20170606093145.patch</filename>
            <type>text/plain</type>
            <size>26758</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDc4IEBACisyMDE3LTA2LTA2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogUHJvY2VzcyBjcmFzaC1sb2dzIGZvciBpT1MgZGV2aWNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxOTc2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjEzNDU1MT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgbGF5b3V0IHRlc3RzIG9u
IGFuIGlPUyBkZXZpY2UsIGNyYXNoIGxvZ3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICAgICAg
SW1wbGVtZW50IGNyYXNoIGxvZyBzZWFyY2hpbmcgYW5kIHBhcnNpbmcgZm9yIGlPUyBkZXZpY2Vz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5w
eToKKyAgICAgICAgKENyYXNoTG9ncyk6IE1vdmVkIHByb2Nlc3MgcmVndWxhciBleHByZXNzaW9u
IGZvciBEYXJ3aW4gdG8gY2xhc3MgdmFyaWFibGUuCisgICAgICAgIChDcmFzaExvZ3MuX19pbml0
X18pOiBBY2NlcHQgb3B0aW9uYWwgbGlzdCBvZiBjcmFzaCBsb2dzIHRvIGlnbm9yZS4KKyAgICAg
ICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cpOiBBZGQgaU9TIGFzIGEgcG90ZW50aWFsIHBs
YXRmb3JtLgorICAgICAgICAoQ3Jhc2hMb2dzLmZpbmRfYWxsX2xvZ3MpOiBEaXR0by4KKyAgICAg
ICAgKENyYXNoTG9ncy5fcGFyc2VfZGFyd2luX2NyYXNoX2xvZyk6IFNoYXJlIGNvZGUgZm9yIHBh
cnNpbmcgb2YgRGFyd2luIGNyYXNoIGxvZ3MuCisgICAgICAgIERvIG5vdCBhc3N1bWUgdGhhdCBh
IERhcndpbiBjcmFzaCBsb2cgc3RhcnRzIHdpdGggdGhlIHByb2Nlc3MuCisgICAgICAgIChDcmFz
aExvZ3MuX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4pOiBSZW1vdmUgLmFwcCBpbiBwcm9jZXNzIG5h
bWUgZm9yIGlPUywgdXNlCisgICAgICAgIHNoYXJlZCBjb2RlIGZvciBwYXJzaW5nIERhcndpbiBj
cmFzaCBsb2dzLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX25ld2VzdF9sb2dfZGFyd2luLmlz
X2NyYXNoX2xvZyk6IFNraXAgY3Jhc2ggbG9ncyBwYXNzZWQgaW50byB0aGlzCisgICAgICAgIG9i
amVjdCBzbyB0aGF0IGNyYXNoIGxvZ3MgYWxyZWFkeSBvbiB0aGUgc3lzdGVtIGJlZm9yZSB0ZXN0
aW5nIGFyZSBub3QgcGFyc2VkLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX25ld2VzdF9sb2df
d2luLmlzX2NyYXNoX2xvZyk6IERpdHRvLgorICAgICAgICAoQ3Jhc2hMb2dzLl9maW5kX2FsbF9s
b2dzX2Rhcndpbi5pc19jcmFzaF9sb2cpOiBEaXR0by4KKyAgICAgICAgKENyYXNoTG9ncy5fZmlu
ZF9hbGxfbG9nc19kYXJ3aW4pOiBVc2Ugc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgRGFyd2luIGNy
YXNoIGxvZ3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNo
bG9nc191bml0dGVzdC5weToKKyAgICAgICAgKG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2lu
KTogQ3Jhc2ggbG9ncyBtYXkgbm90IGhhdmUgdGhlaXIgcHJvY2VzcyBvbiB0aGUgZmlyc3QgbGlu
ZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vc3lzdGVtaG9zdC5w
eToKKyAgICAgICAgKFN5c3RlbUhvc3Quc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCk6
IFRoZSBzeW1ib2xpY2F0ZWQgY3Jhc2ggbG9nIGZvciBtb3N0CisgICAgICAgIHN5c3RlbXMgaXMg
anVzdCB0aGUgY3Jhc2hsb2csIHVzZSB0aGlzIGJlaGF2aW9yIGJ5IGRlZmF1bHQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weToKKyAg
ICAgICAgKE1vY2tTeXN0ZW1Ib3N0LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBU
aGUgc3ltYm9saWNhdGVkIGNyYXNoIGxvZyBmb3IgbW9zdAorICAgICAgICBzeXN0ZW1zIGlzIGp1
c3QgdGhlIGNyYXNobG9nLCB1c2UgdGhpcyBiZWhhdmlvciBieSBkZWZhdWx0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weToKKyAgICAgICAgKEFwcGxlUG9ydCk6IEFk
ZCBhIGRpY3Rpb25hcnkgbWFwcGluZyBob3N0cyB0byBhIGxpc3Qgb2YgY3Jhc2ggbG9ncyB0byBi
ZSBza2lwcGVkLgorICAgICAgICAoQXBwbGVQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0IHRoZSBs
aXN0IG9mIGNyYXNoIGxvZ3MgdG8gYmUgc2tpcHBlZCB0byB0aGUgY3Jhc2ggbG9ncyBvbgorICAg
ICAgICB0aGUgc3lzdGVtIGJlZm9yZSB0ZXN0aW5nIGJlZ2lucworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBh
c3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weToKKyAgICAgICAgKERhcndpblBvcnQu
X2xvb2tfZm9yX2FsbF9jcmFzaF9sb2dzX2luX2xvZ19kaXIpOiBQYXNzIGxpc3Qgb2YgY3Jhc2gg
bG9ncyB0byBiZSBza2lwcGVkIHRvCisgICAgICAgIENyYXNoTG9ncyBvYmplY3QuCisgICAgICAg
IChEYXJ3aW5Qb3J0Ll9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQgaG9zdCB3
aGVuIGdldHRpbmcgY3Jhc2ggbG9ncywgcGFzcyBsaXN0IG9mIGNyYXNoCisgICAgICAgIGxvZ3Mg
dG8gYmUgc2tpcHBlZCB0byBDcmFzaExvZ3Mgb2JqZWN0LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5UZXN0LnRlc3Rf
Z2V0X2NyYXNoX2xvZyk6IFJlbW92ZWQgdW51c2VkIGxvY2FsIGZ1bmN0aW9uLgorICAgICAgICAo
RGFyd2luVGVzdC50ZXN0X2dldF9jcmFzaF9sb2cuZmFrZV90aW1lX2NiKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNl
LnN5bWJvbGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQpOiBJZiB0aGUgcGxhdGZvcm0gZGV2aWNl
IGhhcyBhIGZ1bmN0aW9uIHdpdGggdGhpcworICAgICAgICBuYW1lLCBjYWxsIGl0LiBPdGhlcndp
c2UsIGFzc3VtZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmQgcmVhZCB0aGUgZmlsZSBhdCB0aGUg
cHJvdmlkZWQgcGF0aC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5
OgorICAgICAgICAoRHJpdmVyLl9nZXRfY3Jhc2hfbG9nKTogUGFzcyBvcHRpb25hbCB0YXJnZXQg
aG9zdCB3aGVuIGdldHRpbmcgY3Jhc2ggbG9ncy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0
aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvcy5weTogRGl0dG8uCisgICAgICAgIChJT1NQb3J0LnNldHVw
X3Rlc3RfcnVuKTogRWFjaCBkZXZpY2UgaXMgdHJlYXRlZCBhcyBhbiBpbmRlcGVuZGVudCBob3N0
LiBTZXQgdGhlIGxpc3Qgb2YgY3Jhc2ggbG9ncworICAgICAgICB0byBiZSBza2lwcGVkIGZvciBl
YWNoIGhvc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6
CisgICAgICAgIChJT1NEZXZpY2VQb3J0LnBhdGhfdG9fY3Jhc2hfbG9ncyk6IENvbnN1bHQgYXBw
bGVfYWRkaXRpb25zIGZvciB0aGUgcGF0aCB0byBjcmFzaCBsb2dzLgorICAgICAgICAoSU9TRGV2
aWNlUG9ydC5fbG9va19mb3JfYWxsX2NyYXNoX2xvZ3NfaW5fbG9nX2Rpcik6IFNlYXJjaCBldmVy
eSBjb25uZWN0ZWQgZGV2aWNlIGZvcgorICAgICAgICBjcmFzaCBsb2dzIGFuZCBwYXNzIGxpc3Qg
b2YgY3Jhc2ggbG9ncyB0byBpZ25vcmUgdG8gZWFjaCBpbnN0YW5jZSBvZiBDcmFzaExvZ3MuCisg
ICAgICAgIChJT1NEZXZpY2VQb3J0Ll9nZXRfY3Jhc2hfbG9nKTogU2VhcmNoIHRoZSBzcGVjaWZp
ZWQgdGFyZ2V0IGhvc3QgZm9yIGEgY3Jhc2ggbG9nIGlmIGEgdGFyZ2V0CisgICAgICAgIGhvc3Qg
aXMgc3BlY2lmaWVkLiBFbHNlLCBzZWFyY2ggYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGZvciB0aGUg
c3BlY2lmaWVkIGNyYXNoLWxvZy4KKyAgICAgICAgKElPU0RldmljZVBvcnQubG9va19mb3JfbmV3
X2NyYXNoX2xvZ3MpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfZGV2aWNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2NyYXNo
bG9nX3BhdGgpOiBXaXRob3V0IGFwcGxlX2FkZGl0aW9ucywgYW4gZXhjZXB0aW9uIHNob3VsZCBi
ZSByYWlzZWQuCisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IERp
dHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5w
eToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MucHJvY2Vzc19uYW1lKTogQ2hlY2sgdGhlIHBy
b3ZpZGVkIGJ1bmRsZSBmb3IgdGhlIHByb2Nlc3MgbmFtZS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBh
c3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0aW5nIGNyYXNoIGxvZ3MsIHBhc3MgbGlz
dCBvZiBjcmFzaAorICAgICAgICBsb2dzIHRvIGJlIHNraXBwZWQgdG8gQ3Jhc2hMb2dzIG9iamVj
dC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BF
UG9ydC5fZ2V0X2NyYXNoX2xvZyk6IFBhc3Mgb3B0aW9uYWwgdGFyZ2V0IGhvc3Qgd2hlbiBnZXR0
aW5nIGNyYXNoIGxvZ3MuCisKIDIwMTctMDYtMDYgIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6
ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gQWRkIGFuIGluc3RhbGwtZGVw
ZW5kZW5jaWVzIHNjcmlwdApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShyZXZpc2lvbiAyMTc4MzMpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw0NiArMjcsNjIgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9y
dCBjb2RlY3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogCiAK
K19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCiBjbGFzcyBDcmFzaExvZ3Mo
b2JqZWN0KToKIAogICAgIEdMT0JBTF9QSURfUkVHRVggPSByZS5jb21waWxlKHInXHMrR2xvYmFs
XHMrUElEOlxzK1xbKD9QPHBpZD5cZCspXF0nKQogICAgIEVYSVRfUFJPQ0VTU19QSURfUkVHRVgg
PSByZS5jb21waWxlKHInRXhpdCBwcm9jZXNzIFxkKzooP1A8cGlkPlx3KyksIGNvZGUnKQorICAg
IERBUldJTl9QUk9DRVNTX1JFR0VYID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9j
ZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKIAotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBjcmFzaF9sb2dfZGlyZWN0b3J5KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dCwgY3Jhc2hfbG9nX2RpcmVjdG9yeSwgY3Jhc2hfbG9nc190b19za2lwPVtdKToKICAgICAgICAg
c2VsZi5faG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSA9IGNy
YXNoX2xvZ19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5fY3Jhc2hfbG9nc190b19za2lwID0gY3Jh
c2hfbG9nc190b19za2lwCiAKICAgICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3Nf
bmFtZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgot
ICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxm
Ll9ob3N0LnBsYXRmb3JtLmlzX21hYygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6
CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbihwcm9jZXNz
X25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCiAgICAgICAgIGVsaWYgc2Vs
Zi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5k
X25ld2VzdF9sb2dfd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJf
dGhhbikKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBmaW5kX2FsbF9sb2dzKHNlbGYs
IGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgotICAgICAgICBpZiBzZWxm
Ll9ob3N0LnBsYXRmb3JtLmlzX21hYygpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX21hYygpIG9yIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfaW9zKCk6CiAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZmluZF9hbGxfbG9nc19kYXJ3aW4oaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3Ro
YW4pCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBkZWYgX3BhcnNlX2Rhcndpbl9jcmFzaF9s
b2coc2VsZiwgcGF0aCk6CisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5faG9zdC5zeW1ib2xpY2F0
ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHBhdGgpCisgICAgICAgIGlmIG5vdCBjb250ZW50czoKKyAg
ICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgZm9yIGxpbmUgaW4g
Y29udGVudHMuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgbWF0Y2ggPSBDcmFzaExvZ3MuREFS
V0lOX1BST0NFU1NfUkVHRVgubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAg
ICAgICAgICAgICAgIHJldHVybiAobWF0Y2guZ3JvdXAoJ3Byb2Nlc3NfbmFtZScpLCBpbnQobWF0
Y2guZ3JvdXAoJ3BpZCcpKSwgY29udGVudHMpCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwg
Y29udGVudHMpCisKICAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ19kYXJ3aW4oc2VsZiwgcHJvY2Vz
c19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlz
X2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgotICAgICAgICAgICAgcmV0dXJuIGJh
c2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsgIl8iKSBhbmQgYmFzZW5hbWUuZW5kc3dp
dGgoIi5jcmFzaCIpCisgICAgICAgICAgICBpZiBmcy5qb2luKGRpcnBhdGgsIGJhc2VuYW1lKSBp
biBzZWxmLl9jcmFzaF9sb2dzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgICAgICByZXR1cm4gKGJhc2VuYW1lLnN0YXJ0c3dpdGgocHJvY2Vzc19uYW1lICsg
J18nKSBhbmQgKGJhc2VuYW1lLmVuZHN3aXRoKCcuY3Jhc2gnKSkgb3IKKyAgICAgICAgICAgICAg
ICAgICAgKHByb2Nlc3NfbmFtZSBpbiBiYXNlbmFtZSAgYW5kIGJhc2VuYW1lLmVuZHN3aXRoKCcu
aXBzJykpKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5k
ZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQot
ICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29tcGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxw
cm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0kJykKICAgICAgICAgZXJyb3JzID0gJycK
ICAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKICAgICAgICAgICAg
IHRyeToKICAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9ob3N0LmZp
bGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgotICAgICAgICAgICAgICAgICAgICBm
ID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHBhdGgpCi0gICAgICAgICAg
ICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZWdleC5tYXRjaChmWzA6Zi5maW5kKCdcbicp
XSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggYW5kIG1hdGNoLmdyb3VwKCdwcm9jZXNz
X25hbWUnKSA9PSBwcm9jZXNzX25hbWUgYW5kIChwaWQgaXMgTm9uZSBvciBpbnQobWF0Y2guZ3Jv
dXAoJ3BpZCcpKSA9PSBwaWQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
cyArIGYKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkX25hbWUsIHBhcnNlZF9waWQsIGxvZ19j
b250ZW50cyA9IHNlbGYuX3BhcnNlX2Rhcndpbl9jcmFzaF9sb2cocGF0aCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgcGFyc2VkX25hbWUgPT0gcHJvY2Vzc19uYW1lIGFuZCAocGlkIGlzIE5vbmUg
b3IgcGFyc2VkX3BpZCA9PSBwaWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9ycyArIGxvZ19jb250ZW50cwogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAg
ICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6CiAgICAgICAgICAgICAgICAgICAgIGVycm9y
cyArPSAiRVJST1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkK
QEAgLTgwLDYgKzk2LDggQEAgY2xhc3MgQ3Jhc2hMb2dzKG9iamVjdCk6CiAKICAgICBkZWYgX2Zp
bmRfbmV3ZXN0X2xvZ193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3Jz
LCBuZXdlcl90aGFuKToKICAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFz
ZW5hbWUpOgorICAgICAgICAgICAgaWYgZnMuam9pbihkaXJwYXRoLCBiYXNlbmFtZSkgaW4gc2Vs
Zi5fY3Jhc2hfbG9nc190b19za2lwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAg
ICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKIAogICAgICAg
ICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYuX2NyYXNoX2xv
Z19kaXJlY3RvcnksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKQEAgLTExNywxOCArMTM1LDIy
IEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAgICAgZGVmIF9maW5kX2FsbF9sb2dzX2Rh
cndpbihzZWxmLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbik6CiAgICAgICAgIGRlZiBpc19j
cmFzaF9sb2coZnMsIGRpcnBhdGgsIGJhc2VuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBiYXNl
bmFtZS5lbmRzd2l0aCgiLmNyYXNoIikKKyAgICAgICAgICAgIGlmIGZzLmpvaW4oZGlycGF0aCwg
YmFzZW5hbWUpIGluIHNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5lbmRzd2l0aCgnLmNyYXNo
Jykgb3IgYmFzZW5hbWUuZW5kc3dpdGgoJy5pcHMnKQogCiAgICAgICAgIGxvZ3MgPSBzZWxmLl9o
b3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIoc2VsZi5fY3Jhc2hfbG9nX2RpcmVjdG9yeSwgZmls
ZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQotICAgICAgICBmaXJzdF9saW5lX3JlZ2V4ID0gcmUuY29t
cGlsZShyJ15Qcm9jZXNzOlxzKyg/UDxwcm9jZXNzX25hbWU+LiopIFxbKD9QPHBpZD5cZCspXF0k
JykKICAgICAgICAgZXJyb3JzID0gJycKICAgICAgICAgY3Jhc2hfbG9ncyA9IHt9CiAgICAgICAg
IGZvciBwYXRoIGluIHJldmVyc2VkKHNvcnRlZChsb2dzKSk6CiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgaWYgbm90IG5ld2VyX3RoYW4gb3Igc2VsZi5faG9zdC5maWxlc3lzdGVt
Lm10aW1lKHBhdGgpID4gbmV3ZXJfdGhhbjoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25h
bWUgPSAiVW5rbm93biIKLSAgICAgICAgICAgICAgICAgICAgcGlkID0gMAotICAgICAgICAgICAg
ICAgICAgICBsb2dfY29udGVudHMgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkX25hbWUsIHBhcnNlZF9waWQsIGxv
Z19jb250ZW50cyA9IHNlbGYuX3BhcnNlX2Rhcndpbl9jcmFzaF9sb2cocGF0aCkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IGxvZ19jb250ZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAg
IF9sb2cud2FybignTm8gZGF0YSBpbiBjcmFzaCBsb2cgYXQge30nLmZvcm1hdChwYXRoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgICAgICAgICAgIyBW
ZXJpZnkgdGltZXN0YW1wIGZyb20gbG9nIGNvbnRlbnRzCiAgICAgICAgICAgICAgICAgICAgIGNy
YXNoX3RpbWUgPSBzZWxmLmdldF90aW1lc3RhbXBfZnJvbV9sb2cobG9nX2NvbnRlbnRzKQogICAg
ICAgICAgICAgICAgICAgICBpZiBjcmFzaF90aW1lIGlzIG5vdCBOb25lIGFuZCBuZXdlcl90aGFu
IGlzIG5vdCBOb25lOgpAQCAtMTM2LDExICsxNTgsOCBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0
KToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNyYXNoX3RpbWUgPCBzdGFydF90aW1lOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlZ2V4Lm1hdGNoKGxvZ19jb250ZW50c1swOmxvZ19jb250
ZW50cy5maW5kKCdcbicpXSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzX25hbWUgPSBtYXRjaC5ncm91cCgncHJvY2Vzc19uYW1l
JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpZCA9IHN0cihtYXRjaC5ncm91cCgncGlkJykp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfbmFtZSA9IHByb2Nlc3NfbmFtZSArICIt
IiArIHBpZAorICAgICAgICAgICAgICAgICAgICBpZiBwYXJzZWRfbmFtZToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdF9uYW1lID0gcGFyc2VkX25hbWUgKyAiLSIgKyBzdHIocGFyc2Vk
X3BpZCkKIAogICAgICAgICAgICAgICAgICAgICB3aGlsZSByZXN1bHRfbmFtZSBpbiBjcmFzaF9s
b2dzOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25hbWUgPSByZXN1bHRfbmFtZSAr
ICItMSIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxv
Z3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQCBmcm9tIHdlYmtpdHB5LnBvcnQud2luIGlt
cG9ydCBXaW5Qb3J0CiAKIAogZGVmIG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKHByb2Nl
c3NfbmFtZSwgcGlkKToKLSAgICByZXR1cm4gIiIiUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19u
YW1lfSBbe3BpZH1dCisgICAgcmV0dXJuICIiIk1heSBoYXZlIGdhcmJhZ2UgYXQgdGhlIGJlZ2lu
bmluZworUHJvY2VzczogICAgICAgICB7cHJvY2Vzc19uYW1lfSBbe3BpZH1dCiBQYXRoOiAgICAg
ICAgICAgIC9Wb2x1bWVzL0RhdGEvc2xhdmUvc25vd2xlb3BhcmQtaW50ZWwtcmVsZWFzZS10ZXN0
cy9idWlsZC9XZWJLaXRCdWlsZC9SZWxlYXNlL3twcm9jZXNzX25hbWV9CiBJZGVudGlmaWVyOiAg
ICAgIHtwcm9jZXNzX25hbWV9CiBWZXJzaW9uOiAgICAgICAgID8/PyAoPz8/KQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3QucHkJ
KHJldmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9zeXN0ZW1ob3N0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NiwzICs0Niw2IEBAIGNsYXNzIFN5
c3RlbUhvc3Qob2JqZWN0KToKIAogICAgIGRlZiBtYWtlX2ZpbGVfbG9jayhzZWxmLCBwYXRoKToK
ICAgICAgICAgcmV0dXJuIGZpbGVfbG9jay5GaWxlTG9jayhwYXRoKQorCisgICAgZGVmIHN5bWJv
bGljYXRlX2NyYXNoX2xvZ19pZl9uZWVkZWQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBz
ZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9zeXN0ZW1ob3N0X21vY2sucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3N5c3RlbWhvc3RfbW9jay5weQko
cmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3N5c3RlbWhvc3RfbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtNTQsMyArNTQsNiBAQCBjbGFz
cyBNb2NrU3lzdGVtSG9zdChvYmplY3QpOgogCiAgICAgZGVmIG1ha2VfZmlsZV9sb2NrKHNlbGYs
IHBhdGgpOgogICAgICAgICByZXR1cm4gTW9ja0ZpbGVMb2NrKHBhdGgpCisKKyAgICBkZWYgc3lt
Ym9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGNs
YXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcwogICAg
IFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbXQogICAgIEFSQ0hJVEVDVFVSRVMgPSBbXQorICAg
IF9jcmFzaF9sb2dzX3RvX3NraXBfZm9yX2hvc3QgPSB7fQogCiAgICAgQGNsYXNzbWV0aG9kCiAg
ICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRf
bmFtZSk6CkBAIC05Miw2ICs5Myw5IEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAgICAg
cG9ydF9uYW1lID0gcG9ydF9uYW1lLnJlcGxhY2UoJy13azInLCAnJykKICAgICAgICAgc2VsZi5f
dmVyc2lvbiA9IHNlbGYuX3N0cmlwX3BvcnRfbmFtZV9wcmVmaXgocG9ydF9uYW1lKQogCisgICAg
ZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYsIGRldmljZV9jbGFzcz1Ob25lKToKKyAgICAgICAgc2Vs
Zi5fY3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0W3NlbGYuaG9zdF0gPSBzZWxmLmhvc3QuZmls
ZXN5c3RlbS5maWxlc191bmRlcihzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpKQorCiAgICAgZGVm
IGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdn
dWFyZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNjQsNyArMTM2
NCw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgcGF0aF90b19jcmFzaF9sb2dzKHNl
bGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKLSAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbik6Cisg
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRhcmdldF9ob3N0PU5vbmUpOgogICAgICAgICBuYW1lX3N0ciA9IG5hbWUgb3Ig
Jzx1bmtub3duIHByb2Nlc3MgbmFtZT4nCiAgICAgICAgIHBpZF9zdHIgPSBzdHIocGlkIG9yICc8
dW5rbm93bj4nKQogICAgICAgICBzdGRvdXRfbGluZXMgPSAoc3Rkb3V0IG9yICc8ZW1wdHk+Jyku
ZGVjb2RlKCd1dGY4JywgJ3JlcGxhY2UnKS5zcGxpdGxpbmVzKCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE3ICsxMDcs
MTcgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gbG9ncwog
CiAgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19pbl9sb2dfZGlyKHNlbGYsIG5ld2Vy
X3RoYW4pOgotICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3Moc2VsZi5ob3N0LCBzZWxmLnBh
dGhfdG9fY3Jhc2hfbG9ncygpKQorICAgICAgICBjcmFzaF9sb2cgPSBDcmFzaExvZ3Moc2VsZi5o
b3N0LCBzZWxmLnBhdGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9c2VsZi5f
Y3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0LmdldChzZWxmLmhvc3QsIFtdKSkKICAgICAgICAg
cmV0dXJuIGNyYXNoX2xvZy5maW5kX2FsbF9sb2dzKGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2Vy
X3RoYW49bmV3ZXJfdGhhbikKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBw
aWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5v
bmUsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFt
ZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1Ob25lLCBzbGVlcF9m
bj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIGRvIHNsb3ctc3BpbiBoZXJlIGFuZCB3YWl0LCBzaW5jZSBpdCBhcHBlYXJz
IHRoZSB0aW1lCiAgICAgICAgICMgUmVwb3J0Q3Jhc2ggdGFrZXMgdG8gYWN0dWFsbHkgd3JpdGUg
YW5kIGZsdXNoIHRoZSBmaWxlIHZhcmllcyB3aGVuIHRoZXJlIGFyZQogICAgICAgICAjIGxvdHMg
b2Ygc2ltdWx0YW5lb3VzIGNyYXNoZXMgZ29pbmcgb24uCiAgICAgICAgIHRpbWVfZm4gPSB0aW1l
X2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xl
ZXAKICAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9n
cyhzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAgIGNyYXNoX2xv
Z3MgPSBDcmFzaExvZ3ModGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBhdGhfdG9fY3Jh
c2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9c2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zv
cl9ob3N0LmdldCh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIFtdKSkKICAgICAgICAgbm93ID0g
dGltZV9mbigpCiAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQogICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFu
ZCBub3cgPD0gZGVhZGxpbmU6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw5
ICsxMzcsNSBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAg
ICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnNhbXBsZV9wcm9j
ZXNzLCBhcmdzPVsndGVzdCcsIDQyXSkKIAogICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2Vs
Zik6Ci0gICAgICAgICMgRGFyd2luIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNv
IGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCi0gICAgICAgIGRlZiBmYWtl
X3RpbWVfY2IoKToKLSAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KLSAgICAgICAgICAg
IHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQogICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9n
KCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0X2Zv
cl9sb2c9RmFsc2UpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJKHJl
dmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDExIEBAIGNsYXNzIERldmljZShvYmplY3QpOgog
CiAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9IE5vbmUKIAorICAgIGRlZiBzeW1ib2xp
Y2F0ZV9jcmFzaF9sb2dfaWZfbmVlZGVkKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBoYXNhdHRy
KHNlbGYucGxhdGZvcm1fZGV2aWNlLCAnc3ltYm9saWNhdGVfY3Jhc2hfbG9nX2lmX25lZWRlZCcp
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLnN5bWJvbGljYXRlX2Ny
YXNoX2xvZ19pZl9uZWVkZWQocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZShwYXRoKQorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1dGl2ZShz
ZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2ZQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTc4MzMpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yNDEsNyArMjQxLDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjcmFz
aGVkX3BpZD1zZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBpZCkK
IAogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhh
bik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2NyYXNo
ZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2Vy
X3RoYW4pCisgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2Ny
YXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRhcmdldF9ob3N0PXNlbGYuX3RhcmdldF9ob3N0KQogCiAgICAgZGVmIF9jb21t
YW5kX3dyYXBwZXIoc2VsZik6CiAgICAgICAgICMgSG9vayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5k
IG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9uLCB1c2VkIGJ5IGUuZy4gdG9vbHMvdmFs
Z3JpbmQvdmFsZ3JpbmRfdGVzdHMucHkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZ3RrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsu
cHkJKHJldmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQp
OgogICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKICAgICAgICAgcmV0
dXJuIHN1cGVyKEd0a1BvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApIGFuZCBz
ZWxmLl9kcml2ZXJfY2xhc3MoKS5jaGVja19kcml2ZXIoc2VsZikKIAotICAgIGRlZiBfZ2V0X2Ny
YXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuKToKKyAg
ICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAgICAgIG5hbWUgPSAiV2ViS2l0V2ViUHJv
Y2VzcyIgaWYgbmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBuYW1lCiAgICAgICAgIHJldHVybiBH
REJDcmFzaExvZ0dlbmVyYXRvcihuYW1lLCBwaWQsIG5ld2VyX3RoYW4sIHNlbGYuX2ZpbGVzeXN0
ZW0sIHNlbGYuX3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9jcmFzaF9sb2coc3Rkb3V0LCBzdGRl
cnIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjE3ODMz
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDExICsxMjQsMTMgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1NraXBwaW5nIGluc3RhbGxhdGlvbicpCiAKICAgICAgICAgZm9yIGkg
aW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgc2VsZi50YXJn
ZXRfaG9zdChpKS5wcmVwYXJlX2Zvcl90ZXN0aW5nKAorICAgICAgICAgICAgaG9zdCA9IHNlbGYu
dGFyZ2V0X2hvc3QoaSkKKyAgICAgICAgICAgIGhvc3QucHJlcGFyZV9mb3JfdGVzdGluZygKICAg
ICAgICAgICAgICAgICBzZWxmLnBvcnRzX3RvX2ZvcndhcmQoKSwKICAgICAgICAgICAgICAgICBz
ZWxmLmFwcF9pZGVudGlmaWVyX2Zyb21fYnVuZGxlKHNlbGYuX3BhdGhfdG9fZHJpdmVyKCkpLAog
ICAgICAgICAgICAgICAgIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLAogICAgICAgICAgICAgKQor
ICAgICAgICAgICAgc2VsZi5fY3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0W2hvc3RdID0gaG9z
dC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCiAKICAg
ICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgIHN1cGVyKElPU1BvcnQsIHNl
bGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfZGV2aWNlLnB5CShyZXZpc2lvbiAyMTc4MzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAog
aW1wb3J0IGxvZ2dpbmcKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1l
bW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFz
aExvZ3MKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwog
ZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogCkBAIC02NywxNiArNjgsMzMg
QEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKICAgICAgICAgICAgIHBvcnRfbmFtZSA9
IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCiAgICAgICAgIHJldHVybiBw
b3J0X25hbWUKIAotICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9u
cyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBwYXRoX3RvX2NyYXNoX2xvZ3Mo
c2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90
IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYu
Tk9fT05fREVWSUNFX1RFU1RJTkcpCisgICAgICAgIHJldHVybiBhcHBsZV9hZGRpdGlvbnMoKS5p
b3NfY3Jhc2hfbG9nX3BhdGgoKQorCisgICAgZGVmIF9sb29rX2Zvcl9hbGxfY3Jhc2hfbG9nc19p
bl9sb2dfZGlyKHNlbGYsIG5ld2VyX3RoYW4pOgorICAgICAgICBsb2dfbGlzdCA9IHt9CisgICAg
ICAgIGZvciBkZXZpY2UgaW4gc2VsZi5fZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyX21hcCgpOgor
ICAgICAgICAgICAgY3Jhc2hfbG9nID0gQ3Jhc2hMb2dzKGRldmljZSwgc2VsZi5wYXRoX3RvX2Ny
YXNoX2xvZ3MoKSwgY3Jhc2hfbG9nc190b19za2lwPXNlbGYuX2NyYXNoX2xvZ3NfdG9fc2tpcF9m
b3JfaG9zdC5nZXQoZGV2aWNlLCBbXSkpCisgICAgICAgICAgICBsb2dfbGlzdC51cGRhdGUoY3Jh
c2hfbG9nLmZpbmRfYWxsX2xvZ3MoaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdl
cl90aGFuKSkKKyAgICAgICAgcmV0dXJuIGxvZ19saXN0CisKKyAgICBkZWYgX2dldF9jcmFzaF9s
b2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj1O
b25lLCBzbGVlcF9mbj1Ob25lLCB3YWl0X2Zvcl9sb2c9VHJ1ZSwgdGFyZ2V0X2hvc3Q9Tm9uZSk6
CisgICAgICAgIGlmIHRhcmdldF9ob3N0OgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElPU0Rl
dmljZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9y
X2xvZz13YWl0X2Zvcl9sb2csIHRhcmdldF9ob3N0PXRhcmdldF9ob3N0KQorCisgICAgICAgICMg
V2UgbmVlZCB0byBzZWFyY2ggZXZlcnkgZGV2aWNlIHNpbmNlIG9uZSB3YXMgbm90IHNwZWNpZmll
ZC4KKyAgICAgICAgZm9yIGRldmljZSBpbiBzZWxmLl9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJf
bWFwKCk6CisgICAgICAgICAgICBzdGRlcnJfb3V0LCBjcmFzaGxvZyA9IHN1cGVyKElPU0Rldmlj
ZVBvcnQsIHNlbGYpLl9nZXRfY3Jhc2hfbG9nKG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm49dGltZV9mbiwgc2xlZXBfZm49c2xlZXBfZm4sIHdhaXRfZm9yX2xv
Zz1GYWxzZSwgdGFyZ2V0X2hvc3Q9ZGV2aWNlKQorICAgICAgICAgICAgaWYgY3Jhc2hsb2c6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNobG9nKQorICAgICAgICByZXR1cm4g
KHN0ZGVyciwgTm9uZSkKIAorICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVu
dGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVh
a3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CiAgICAgICAgIHBhc3MKIAotICAg
IGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3Rh
cnRfdGltZSk6Ci0gICAgICAgIHJldHVybiB7fQotCiAgICAgZGVmIGxvb2tfZm9yX25ld19zYW1w
bGVzKHNlbGYsIHVucmVzcG9uc2l2ZV9wcm9jZXNzZXMsIHN0YXJ0X3RpbWUpOgogICAgICAgICBy
ZXR1cm4ge30KIApAQCAtOTAsOSArMTA4LDYgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0
KToKICAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgcmV0dXJuICdpb3Mt
ZGV2aWNlJwogCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9m
b3JfbG9nPVRydWUpOgotICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKLQogICAgIGRlZiBf
Y3JlYXRlX2RldmljZXMoc2VsZiwgZGV2aWNlX2NsYXNzKToKICAgICAgICAgaWYgbm90IGFwcGxl
X2FkZGl0aW9ucygpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHNlbGYuTk9fT05f
REVWSUNFX1RFU1RJTkcpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2Rl
dmljZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZV91bml0dGVzdC5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDYgKzIwLDggQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IAoraW1wb3J0IHRpbWUKKwogZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19kZXZpY2UgaW1wb3J0IElP
U0RldmljZVBvcnQKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zX3Rlc3RjYXNlCiAKQEAg
LTM3LDEwICszOSwxNyBAQCBjbGFzcyBJT1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0
CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnaW9zLWRldmljZScsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgp
KQogCi0gICAgIyBGSVhNRTogVXBkYXRlIHRlc3RzIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzMwNDk3
OTkxPiBpcyBjb21wbGV0ZWQuCiAgICAgZGVmIHRlc3RfY3Jhc2hsb2dfcGF0aChzZWxmKToKLSAg
ICAgICAgcGFzcworICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwb3J0LnBhdGhf
dG9fY3Jhc2hfbG9ncygpCisKKyAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPXNlbGYucG9ydF9uYW1lKQorICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBw
b3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRp
bWUudGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCiAKKyAgICAjIEZJWE1FOiBVcGRhdGUgdGVz
dHMgd2hlbiA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+IGlzIGNvbXBsZXRlZC4KICAgICBkZWYg
dGVzdF9zcGluZHVtcChzZWxmKToKICAgICAgICAgcGFzcwogCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDIxNzgzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw3ICszNzIsNyBAQCBjbGFzcyBX
aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgZGVmIHBhdGhfdG9fY3Jhc2hfbG9ncyhzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKQogCi0gICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdhaXRfZm9yX2xvZz1UcnVlLCB0YXJnZXRfaG9z
dD1Ob25lKToKICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhlcmUgYW5kIHdh
aXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRpbWUKICAgICAgICAgIyBSZXBvcnRDcmFzaCB0YWtl
cyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdoZW4gdGhlcmUg
YXJlCiAgICAgICAgICMgbG90cyBvZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2luZyBvbi4KQEAg
LTM4MCw3ICszODAsNyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIHRpbWVf
Zm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9y
IHRpbWUuc2xlZXAKICAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9
IENyYXNoTG9ncyhzZWxmLmhvc3QsIHNlbGYucGF0aF90b19jcmFzaF9sb2dzKCkpCisgICAgICAg
IGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3ModGFyZ2V0X2hvc3Qgb3Igc2VsZi5ob3N0LCBzZWxmLnBh
dGhfdG9fY3Jhc2hfbG9ncygpLCBjcmFzaF9sb2dzX3RvX3NraXA9c2VsZi5fY3Jhc2hfbG9nc190
b19za2lwX2Zvcl9ob3N0LmdldCh0YXJnZXRfaG9zdCBvciBzZWxmLmhvc3QsIFtdKSkKICAgICAg
ICAgbm93ID0gdGltZV9mbigpCiAgICAgICAgICMgRklYTUU6IGRlbGV0ZSB0aGlzIGFmdGVyIHdl
J3JlIHN1cmUgdGhpcyBjb2RlIGlzIHdvcmtpbmcgLi4uCiAgICAgICAgIF9sb2cuZGVidWcoJ2xv
b2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkocmV2aXNpb24gMjE3ODMzKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQs
NiBAQCBjbGFzcyBXUEVQb3J0KFBvcnQpOgogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbHRfZXhlY3V0YWJsZXNfcGF0aCgnSW1hZ2VE
aWZmJykKIAotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwg
c3RkZXJyLCBuZXdlcl90aGFuKToKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwg
cGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGFyZ2V0X2hvc3Q9Tm9uZSk6CiAgICAg
ICAgIG5hbWUgPSAiV1BFV2ViUHJvY2VzcyIgaWYgbmFtZSA9PSAiV2ViUHJvY2VzcyIgZWxzZSBu
YW1lCiAgICAgICAgIHJldHVybiBHREJDcmFzaExvZ0dlbmVyYXRvcihuYW1lLCBwaWQsIG5ld2Vy
X3RoYW4sIHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BhdGhfdG9fZHJpdmVyKS5nZW5lcmF0ZV9j
cmFzaF9sb2coc3Rkb3V0LCBzdGRlcnIpCg==
</data>
<flag name="review"
          id="333012"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>